From 5d9cfbab485e2d0563c89916c40a9c77cc2eda04 Mon Sep 17 00:00:00 2001 From: The foxBMS ReleaseBot Date: Thu, 8 Aug 2024 12:00:27 +0200 Subject: [PATCH] Minor release of foxBMS 2 (v1.7.0) The installation process and the overall tooling has been simplified. foxBMS 2 now ships with a new 'venv' environment named '2024-08-pale-fox'. See INSTALLATION.md for information on updating the toolchain. **The CAN message IDs and some internal definitions have been changed.** * The defintion and layout of the CAN messages has been improved and required some changes. This is a incompatible change, i.e., control software needs to be adapted in order to correctly communicate with the BMS. See the changelog and documentation for details. * Fixed several bugs in NXP MC33775A driver: - which was caused by a wrong stop condition when iterating over cell voltages in function 'N775_InitializeDatabase'. - which caused an out-of-bounce access when reading out the unique device ID in function 'N775_Enumerate'. - which caused the daisy-chain to be not initialized correctly in some cases. No measurement data could be read from the daisy-chain in these cases. * Unit tests of the ADI ADES1830 AFE driver have been improved. * Toolchain updates (see INSTALLATION.md on how to update): - The Python dependencies have been updated. - Ceedling has been updated to 1.0.0-ba45d2c. - The Ruby Gems required for ceedling have been updated. - The VS Code workspaces have been improved for a better developed experience. For a detailed list of changes, please refer to the documentation at https://iisb-foxbms.iisb.fraunhofer.de/foxbms/gen2/docs/html/v1.7.0/general/changelog.html. --- .clang-format | 110 +- .gitattributes | 7 + .github/PULL_REQUEST_TEMPLATE.md | 2 +- .gitignore | 26 + .pre-commit-config.yaml | 411 + BSD-3-Clause.txt | 2 +- CITATION.cff | 4 +- INSTALL.md | 211 + LICENSE.md | 4 +- README.md | 47 +- conf/tpl/yaml.yaml => cli/__init__.py | 6 +- .../fgui/entry/helper.py => cli/__main__.py | 22 +- cli/cli.py | 122 + cli/cmd_axivion/__init__.py | 38 + cli/cmd_axivion/axivion_impl.py | 237 + cli/cmd_build/__init__.py | 38 + .../cmd_build/build_impl.py | 47 +- cli/cmd_ci/__init__.py | 38 + cli/cmd_ci/check_ci_config.py | 164 + cli/cmd_ci/check_coverage.py | 111 + cli/cmd_ci/create_readme.py | 139 + cli/cmd_cli_unittest/__init__.py | 38 + cli/cmd_cli_unittest/cli_unittest_impl.py | 95 + cli/cmd_embedded_ut/__init__.py | 38 + .../cmd_embedded_ut/embedded_ut_constants.py | 11 +- cli/cmd_embedded_ut/embedded_ut_impl.py | 224 + cli/cmd_ide/__init__.py | 38 + .../cmd_ide/ide_impl.py | 54 +- cli/cmd_install/__init__.py | 38 + cli/cmd_install/install_impl.py | 91 + cli/cmd_misc/__init__.py | 38 + .../cmd_misc/crc_example.py | 17 +- cli/cmd_misc/doc_example.py | 57 + cli/cmd_misc/run_uncrustify.py | 166 + .../cmd_misc/verify_checksums.py | 79 +- cli/cmd_pre_commit/__init__.py | 38 + cli/cmd_pre_commit/pre_commit_impl.py | 50 + cli/cmd_script/__init__.py | 38 + .../cmd_script/script_impl.py | 50 +- cli/commands/__init__.py | 38 + cli/commands/c_axivion.py | 180 + .../commands/c_build.py | 55 +- .../commands/c_ci.py | 94 +- .../commands/c_cli_unittest.py | 82 +- .../commands/c_embedded_ut.py | 48 +- .../send_worker.py => cli/commands/c_ide.py | 90 +- .../commands/c_install.py | 66 +- cli/commands/c_misc.py | 113 + cli/commands/c_pre_commit.py | 63 + .../commands/c_program.py | 80 +- .../can/__init__.py => cli/foxbms_version.py | 7 +- .../gui/fgui/misc => cli/helpers}/__init__.py | 7 +- cli/helpers/ansi_colors.py | 65 + .../helpers/host_platform.py | 15 +- cli/helpers/misc.py | 226 + cli/helpers/spr.py | 115 + .../helpers/win32_vars.py | 65 +- .../pre_commit_scripts}/__init__.py | 7 +- cli/pre_commit_scripts/check_doxygen.py | 175 + .../pre_commit_scripts/check_encoding.py | 54 +- .../pre_commit_scripts/check_file_names.py | 63 +- .../pre_commit_scripts/check_include_guard.py | 123 +- cli/pre_commit_scripts/check_license_info.py | 261 + cli/pre_commit_scripts/check_sections.py | 177 + conf/README.md | 10 + conf/bms/bms.json | 52 +- conf/bms/schema/application.schema.json | 144 - conf/bms/schema/bms.schema.json | 458 +- conf/bms/schema/rtos.schema.json | 19 - conf/bms/schema/slave.schema.json | 277 - conf/cc/cc-options.yaml | 2 +- conf/cc/linker_pulls.json | 6 +- conf/env/conda_env_linux-pkgs.yaml | 90 - conf/env/conda_env_linux.yaml | 253 - conf/env/conda_env_win32-pkgs.yaml | 95 - conf/env/conda_env_win32.yaml | 199 - conf/env/paths_win32.txt | 4 +- conf/fmt/README.md | 26 - conf/fmt/pyproject.toml | 32 - conf/guidelines/rules.json | 695 - conf/spa/.pylintrc | 590 - conf/spa/README.md | 6 - conf/spell/README.md | 16 - conf/spell/conda_env_spelling_linux.yaml | 76 - conf/spell/dicts/lan_c.txt | 11 - conf/spell/dicts/lan_py.txt | 23 - conf/spell/dicts/module_prefix.txt | 74 - conf/spell/pyspell_cfg.yml | 271 - conf/tpl/{batch.bat => batch_script.bat} | 4 +- conf/tpl/c.c | 14 +- conf/tpl/c.h | 14 +- .../__init__.py => conf/tpl/pwsh_script.ps1 | 18 +- conf/tpl/python_script.py | 26 +- conf/tpl/rst.rst | 7 - conf/tpl/{shell.sh => shell_script.sh} | 22 +- conf/tpl/test_c.c | 12 +- conf/tpl/test_c.h | 14 +- conf/unit/ceedling.cmd | 38 - conf/unit/ceedling.sh | 45 - conf/unit/project_posix.yml | 565 +- conf/unit/project_win32.yml | 565 +- conf/unit/vsc-settings.yml | 2 +- docs/README.md | 6 + docs/conf.py | 42 +- .../hardware-developer-manual.rst | 18 +- .../public-release-process.rst | 108 +- .../software/software-development-process.dot | 2 +- .../style-guide/examples/c-004.c | 13 +- .../style-guide/examples/c-005.c | 13 +- .../style-guide/examples/c-005.h | 13 +- .../style-guide/examples/c-006-source.c | 13 +- .../style-guide/examples/c-006-source.h | 13 +- .../style-guide/examples/c-006-test.c | 13 +- .../style-guide/examples/c-006-test.h | 13 +- .../style-guide/examples/c-007_abc.c | 13 +- .../style-guide/examples/c-007_abc.h | 13 +- .../style-guide/examples/c-007_abc_cfg.c | 13 +- .../style-guide/examples/c-007_abc_cfg.h | 13 +- .../style-guide/examples/c-008.c | 20 +- .../style-guide/examples/c-008.h | 13 +- .../style-guide/examples/c-009.c | 13 +- .../style-guide/examples/c-011.c | 13 +- .../style-guide/examples/c-011.h | 13 +- .../style-guide/examples/c-012.c | 13 +- .../style-guide/examples/c-013.c | 13 +- .../style-guide/examples/c-013.h | 13 +- .../style-guide/examples/c-015.c | 13 +- .../style-guide/examples/c-015.h | 19 +- .../style-guide/examples/c-016.c | 13 +- .../style-guide/examples/c-017.c | 13 +- .../style-guide/examples/c-018.c | 13 +- .../style-guide/examples/c-019.c | 15 +- .../style-guide/examples/c-020.c | 13 +- .../style-guide/examples/c-021.c | 13 +- .../style-guide/examples/c-022.c | 13 +- .../style-guide/examples/c-023.c | 13 +- .../style-guide/examples/c-024.c | 13 +- .../style-guide/examples/c-025.c | 13 +- .../style-guide/examples/c-026.c | 13 +- .../style-guide/examples/c-027.c | 19 +- .../examples/c-028-battery-defines.c | 13 +- .../style-guide/examples/c-028.c | 13 +- .../style-guide/examples/python-006.py | 3 +- .../style-guide/examples/python-007.py | 4 +- .../style-guide/examples/wscript | 3 +- .../style-guide/guidelines_c.rst | 86 +- .../style-guide/guidelines_general.rst | 10 - .../style-guide/guidelines_overview.rst | 9 +- .../style-guide/guidelines_overview_sh.csv | 5 - .../guidelines_overview_shell_scripts.csv | 7 + .../style-guide/guidelines_overview_yaml.csv | 3 - .../style-guide/guidelines_python.rst | 16 +- ...shell.rst => guidelines_shell_scripts.rst} | 54 +- .../style-guide/guidelines_yaml.rst | 42 - .../state-diagram-complete-simplified.dot | 2 +- .../state-diagram-complete.dot | 2 +- .../state-diagram-recoverable-error.dot | 2 +- .../state-diagram-top-view.dot | 2 +- .../state-machine-example/state-machine.c | 18 +- .../state-machine-example/state-machine.h | 14 +- .../style-guide/state-machine-example/wscript | 3 +- .../style-guide/state-machines_how-to.rst | 12 +- .../style-guide/style-guide.rst | 3 +- docs/doxygen_src.conf.in | 704 +- docs/doxygen_tests.conf.in | 704 +- docs/general/changelog.rst | 260 +- docs/general/commit-msgs/release-v1.7.0.txt | 30 + .../license-tables/license-info_ceedling.csv | 4 +- .../license-tables/license-info_freertos.csv | 1 + .../license-tables/license-info_llvm.csv | 5 - .../license-tables/license-info_miniconda.csv | 5 - .../license-info_packages-conda-env-linux.csv | 197 - .../license-info_packages-conda-env-win32.csv | 194 - .../license-tables/license-info_python.csv | 6 + .../license-info_python_packages.csv | 90 + .../license-info_ruby-installer.csv | 2 +- .../license-tables/license-info_ti-hcg.csv | 2 +- .../license-tables/license-info_vs-code.csv | 2 +- .../license-info_vs-code_extensions.csv | 10 - .../license-info_waf-unit-tests.csv | 5 - ...kages-conda-env-spelling-build-strings.txt | 14 - .../license-packages-conda-env-spelling.txt | 241 - docs/general/license.rst | 94 +- docs/general/releases.csv | 1 + docs/general/releases.rst | 9 - docs/general/safety/safety.rst | 34 +- docs/getting-started/directories/_root.csv | 9 + docs/getting-started/directories/conf.csv | 7 + docs/getting-started/directories/src.csv | 5 + docs/getting-started/directories/tests.csv | 12 + docs/getting-started/directories/tools.csv | 11 + .../first-steps-on-hardware.rst | 31 +- docs/getting-started/fox_py.rst | 24 + .../llvm-installation/llvm-installation.rst | 31 - .../mingw64-installation.rst | 16 - .../conda-configuration.rst | 76 - .../img/miniconda-installer-0.png | Bin 30552 -> 0 bytes .../img/miniconda-installer-1.png | Bin 19834 -> 0 bytes .../img/miniconda-installer-2.png | Bin 14486 -> 0 bytes .../img/miniconda-installer-3.png | Bin 17499 -> 0 bytes .../img/miniconda-installer-4.png | Bin 21607 -> 0 bytes .../img/miniconda-installer-5.png | Bin 14980 -> 0 bytes .../img/miniconda-installer-6.png | Bin 9134 -> 0 bytes .../img/miniconda-installer-7.png | Bin 34921 -> 0 bytes .../img/miniconda-installer.gif | Bin 100719 -> 0 bytes .../miniconda-installation.rst | 41 - docs/getting-started/repository-structure.rst | 181 +- .../img/ruby-installer-0.png | Bin 17746 -> 0 bytes .../ruby-installation/ruby-installation.rst | 40 - .../getting-started/software-installation.rst | 458 +- docs/getting-started/workspace.rst | 31 +- docs/hardware/connectors.rst | 6 +- docs/hardware/design-resources.rst | 34 +- .../ti-tms570lc4357-v1.1.1_pinout.rst | 4 +- .../12-ltc-ltc6804-1-v1.x.x.rst | 16 +- docs/index.rst | 4 +- docs/introduction/bms-overview.rst | 51 +- docs/introduction/img/bms-components.png | Bin 0 -> 34149 bytes docs/introduction/img/bms-components.pptx | Bin 0 -> 54037 bytes docs/introduction/naming-conventions.rst | 18 + docs/macros.txt | 63 +- docs/misc/bibliography.rst | 22 - docs/misc/indices-and-tables.rst | 6 +- docs/software/api/overview.rst | 21 - .../architecture/img/axivion_architecture.svg | 1182 +- .../build-environment_how-to.rst | 77 +- docs/software/build-process/build-process.rst | 7 - .../build-process/library-project_how-to.rst | 14 +- .../build-process/misc/libcc-options.yaml | 4 +- .../build-process/misc/libproject-example.c | 14 +- .../build-process/misc/libproject-example.h | 14 +- docs/software/build-process/misc/wscript | 39 +- docs/software/build/build.rst | 30 +- .../software/build/waf-available-commands.csv | 2 + .../linker_pulls/example_linker_pulls.json | 2 +- .../compiler/linker_pulls/wscript | 3 +- docs/software/configuration/configuration.rst | 12 +- .../configuration/without-halcogen/wscript | 3 +- .../state-estimation/soc/soc_counting.rst | 29 +- .../state-estimation/soc/soc_debug.rst | 4 +- .../state-estimation/soc/soc_none.rst | 4 +- .../state-estimation/soe/soe_counting.rst | 27 +- .../state-estimation/soe/soe_debug.rst | 6 +- .../state-estimation/soe/soe_none.rst | 6 +- .../state-estimation/sof/sof_trapezoid.rst | 12 +- .../state-estimation/soh/soh_debug.rst | 4 +- .../state-estimation/soh/soh_none.rst | 4 +- .../state-estimation/state-estimation.rst | 2 - docs/software/modules/application/bal/bal.rst | 22 +- docs/software/modules/application/bms/bms.rst | 8 +- .../application/plausibility/plausibility.rst | 8 +- .../application/redundancy/redundancy.rst | 37 +- docs/software/modules/application/soa/soa.rst | 12 +- docs/software/modules/driver/adc/adc.rst | 6 +- .../modules/driver/afe/adi/adi_ades1830.rst | 16 +- .../modules/driver/afe/maxim/max1785x.rst | 134 +- .../modules/driver/afe/nxp/mc33775a.rst | 53 +- docs/software/modules/driver/can/can.rst | 170 +- .../modules/driver/can/can_how-to.rst | 274 +- .../modules/driver/can/can_how-to_rx.rst | 3 + .../modules/driver/can/can_how-to_tx_async.c | 58 +- .../modules/driver/can/can_how-to_tx_async.h | 41 +- .../driver/can/can_how-to_tx_async.rst | 83 + ...can_how-to_tx.c => can_how-to_tx_cyclic.c} | 46 +- .../driver/can/can_how-to_tx_cyclic.rst | 106 + docs/software/modules/driver/can/wscript | 42 +- .../modules/driver/contactor/contactor.rst | 12 +- docs/software/modules/driver/crc/crc.rst | 6 +- docs/software/modules/driver/dma/dma.rst | 19 +- .../modules/driver/foxmath/foxmath.rst | 6 +- .../software/modules/driver/foxmath/utils.rst | 2 +- docs/software/modules/driver/fram/fram.rst | 10 +- docs/software/modules/driver/htsen/htsen.rst | 6 +- docs/software/modules/driver/i2c/i2c.rst | 9 +- .../driver/imd/bender/bender_ir155.rst | 22 +- .../driver/imd/bender/bender_iso165c.rst | 24 +- .../iso165c_state_diagram_disable.dot | 2 +- .../iso165c_state_diagram_enable.dot | 2 +- .../iso165c_state_diagram_initialization.dot | 2 +- .../iso165c_state_diagram_running.dot | 2 +- .../modules/driver/imd/imd-state-diagram.dot | 2 +- .../modules/driver/imd/none/no-imd.rst | 6 +- .../driver/interlock/interlock-schematic.dot | 2 +- .../modules/driver/interlock/interlock.rst | 10 +- docs/software/modules/driver/io/io.rst | 2 +- docs/software/modules/driver/mcu/mcu.rst | 6 +- docs/software/modules/driver/meas/meas.rst | 6 +- docs/software/modules/driver/pex/pex.rst | 10 +- docs/software/modules/driver/pwm/pwm.rst | 6 +- docs/software/modules/driver/rtc/rtc.rst | 6 +- docs/software/modules/driver/sbc/sbc.rst | 43 +- .../driver/sbc/sbc_state_machine_wakeup.dot | 2 +- docs/software/modules/driver/spi/spi.rst | 14 +- docs/software/modules/driver/sps/sps.rst | 12 +- .../driver/ts/adding-a-new-ts_how-to.rst | 18 +- .../driver/ts/epcos/b57251v5103j060.rst | 7 - .../driver/ts/epcos/b57861s0103f045.rst | 7 - .../modules/driver/ts/murata/ncxxxxh103.rst | 7 - .../software/modules/driver/ts/ts-sensors.rst | 13 - .../modules/driver/ts/ts-short-names.csv | 1 + .../driver/ts/vishay/ntcalug01a103g.rst | 7 - .../driver/ts/vishay/ntcle317e4103sba.rst | 7 - .../driver/ts/vishay/ntcle413e2103f102l.rst | 7 - .../modules/engine/database/database.rst | 8 +- .../modules/engine/database/database_how-to.c | 34 +- docs/software/modules/engine/database/wscript | 3 +- docs/software/modules/engine/diag/diag.rst | 72 +- .../modules/engine/hw_info/hw_info.rst | 6 +- docs/software/modules/engine/sys/sys.rst | 16 +- .../engine/sys/sys_state-machine-detailed.dot | 2 +- .../engine/sys/sys_state-machine-top-view.dot | 2 +- .../modules/engine/sys_mon/sys_mon.rst | 12 +- docs/software/modules/main/fassert.rst | 2 +- docs/software/modules/task/ftask/ftask.rst | 10 +- .../modules/task/ftask/ftask_how-to.c | 18 +- docs/software/modules/task/ftask/wscript | 3 +- docs/software/modules/task/os/os.rst | 8 +- docs/software/unit-tests/abc.c | 12 +- docs/software/unit-tests/abc.h | 14 +- .../software/unit-tests/build-and-run-abc.bat | 87 - docs/software/unit-tests/run_abc.c | 12 +- docs/software/unit-tests/test_abc.c | 15 +- docs/software/unit-tests/unit-tests.rst | 10 +- .../software/unit-tests/unit-tests_how-to.rst | 129 +- .../software/unit-tests/wscript | 59 +- docs/spelling_wordlist.txt | 268 - docs/system/imd-testing.rst | 62 + docs/system/img/imd-testing.png | Bin 0 -> 8221 bytes docs/system/img/imd-testing.pptx | Bin 0 -> 37861 bytes docs/system/precharging.rst | 10 +- .../system-voltage-and-current-monitoring.rst | 3 +- docs/tools/dbc.rst | 6 - docs/tools/debugger/debug-application.rst | 4 +- docs/tools/debugger/debugger-lauterbach.rst | 7 - docs/tools/debugger/debugger-ozone.rst | 19 +- docs/tools/gui/gui-implementation.rst | 22 - docs/tools/gui/gui.rst | 41 - docs/tools/gui/impl/entry/entry.rst | 35 - docs/tools/gui/impl/fgui.rst | 21 - docs/tools/gui/impl/log_parser/log_parser.rst | 21 - docs/tools/gui/impl/lvac/lvac.rst | 42 - docs/tools/gui/impl/misc/misc.rst | 70 - docs/tools/gui/impl/workers/workers.rst | 35 - docs/tools/static-analysis/axivion.rst | 68 +- .../waf-tools/compiler-tool/f_ti_arm_cgt.rst | 24 - .../compiler-tool/f_ti_arm_helper.rst | 9 - .../compiler-tool/f_ti_color_arm_cgt.rst | 3 - docs/tools/waf-tools/f_axivion.rst | 12 - docs/tools/waf-tools/f_black.rst | 27 - .../waf-tools/f_bootstrap_library_project.rst | 5 - docs/tools/waf-tools/f_check_db_vars.rst | 9 - docs/tools/waf-tools/f_clang_format.rst | 16 - docs/tools/waf-tools/f_git_hooks.rst | 20 - docs/tools/waf-tools/f_guidelines.rst | 32 - docs/tools/waf-tools/f_hcg.rst | 10 - docs/tools/waf-tools/f_j_flash.rst | 7 - docs/tools/waf-tools/f_lauterbach.rst | 7 - docs/tools/waf-tools/f_miniconda_env.rst | 24 - docs/tools/waf-tools/f_ozone.rst | 7 - docs/tools/waf-tools/f_pylint.rst | 25 - docs/tools/waf-tools/f_sphinx_build.rst | 10 - docs/tools/waf-tools/f_unit_test.rst | 16 - docs/tools/waf-tools/waf-tools.rst | 6 - docs/units.txt | 1 + tools/gui/gui.bat => fox.bat | 53 +- fox.ps1 | 111 + fox.py | 65 + fox.sh | 127 + hardware/README.md | 5 +- ide.bat | 96 - pyproject.toml | 732 + requirements.txt | 89 + src/README.md | 8 + src/app/application/algorithm/algorithm.c | 15 +- src/app/application/algorithm/algorithm.h | 14 +- .../algorithm/config/algorithm_cfg.c | 16 +- .../algorithm/config/algorithm_cfg.h | 14 +- .../algorithm/moving_average/moving_average.c | 16 +- .../algorithm/moving_average/moving_average.h | 18 +- .../soc/counting/soc_counting.c | 88 +- .../soc/counting/soc_counting_cfg.h | 18 +- .../state_estimation/soc/debug/soc_debug.c | 14 +- .../state_estimation/soc/none/soc_none.c | 16 +- .../soe/counting/soe_counting.c | 82 +- .../soe/counting/soe_counting_cfg.h | 14 +- .../state_estimation/soe/debug/soe_debug.c | 14 +- .../soe/debug/soe_debug_cfg.h | 14 +- .../state_estimation/soe/none/soe_none.c | 15 +- .../state_estimation/soe/none/soe_none_cfg.h | 14 +- .../sof/trapezoid/sof_trapezoid.c | 14 +- .../sof/trapezoid/sof_trapezoid.h | 14 +- .../sof/trapezoid/sof_trapezoid_cfg.c | 14 +- .../sof/trapezoid/sof_trapezoid_cfg.h | 14 +- .../state_estimation/soh/debug/soh_debug.c | 22 +- .../state_estimation/soh/none/soh_none.c | 14 +- .../state_estimation/state_estimation.c | 14 +- .../state_estimation/state_estimation.h | 14 +- src/app/application/algorithm/wscript | 3 +- src/app/application/bal/bal.c | 24 +- src/app/application/bal/bal.h | 38 +- .../bal/history/bal_strategy_history.c | 112 +- .../application/bal/none/bal_strategy_none.c | 14 +- .../bal/voltage/bal_strategy_voltage.c | 54 +- .../bal/voltage/bal_strategy_voltage.h | 14 +- src/app/application/bms/bms.c | 212 +- src/app/application/bms/bms.h | 79 +- src/app/application/config/bal_cfg.c | 14 +- src/app/application/config/bal_cfg.h | 16 +- src/app/application/config/battery_cell_cfg.c | 13 +- src/app/application/config/battery_cell_cfg.h | 19 +- .../application/config/battery_system_cfg.c | 14 +- .../application/config/battery_system_cfg.h | 47 +- src/app/application/config/bms_cfg.h | 25 +- src/app/application/config/plausibility_cfg.h | 16 +- src/app/application/config/soa_cfg.c | 13 +- src/app/application/config/soa_cfg.h | 13 +- .../application/plausibility/plausibility.c | 41 +- .../application/plausibility/plausibility.h | 29 +- src/app/application/redundancy/redundancy.c | 259 +- src/app/application/redundancy/redundancy.h | 33 +- src/app/application/soa/soa.c | 14 +- src/app/application/soa/soa.h | 14 +- src/app/application/wscript | 3 +- src/app/driver/adc/adc.c | 37 +- src/app/driver/adc/adc.h | 27 +- .../driver/afe/adi/ades1830/adi_ades1830.json | 18 +- .../afe/adi/ades1830/adi_ades1830_balancing.c | 45 +- .../afe/adi/ades1830/adi_ades1830_defs.h | 14 +- .../adi/ades1830/adi_ades1830_gpio_voltages.c | 86 +- .../adi/ades1830/config/adi_ades1830_cfg.c | 16 +- src/app/driver/afe/adi/ades1830/wscript | 3 +- .../afe/adi/common/ades183x/adi_ades183x.c | 195 +- .../afe/adi/common/ades183x/adi_ades183x.h | 38 +- .../common/ades183x/adi_ades183x_balancing.h | 22 +- .../common/ades183x/adi_ades183x_buffers.c | 14 +- .../common/ades183x/adi_ades183x_buffers.h | 19 +- .../common/ades183x/adi_ades183x_commands.c | 14 +- .../common/ades183x/adi_ades183x_commands.h | 14 +- .../ades183x/adi_ades183x_commands_voltages.c | 16 +- .../ades183x/adi_ades183x_commands_voltages.h | 14 +- .../adi/common/ades183x/adi_ades183x_defs.h | 44 +- .../common/ades183x/adi_ades183x_diagnostic.h | 16 +- .../ades183x/adi_ades183x_diagnostic_w.c | 14 +- .../ades183x/adi_ades183x_gpio_voltages.h | 26 +- .../common/ades183x/adi_ades183x_helpers.c | 102 +- .../common/ades183x/adi_ades183x_helpers.h | 14 +- .../ades183x/adi_ades183x_initialization.c | 24 +- .../ades183x/adi_ades183x_initialization.h | 14 +- .../ades183x/adi_ades183x_temperatures.c | 37 +- .../ades183x/adi_ades183x_temperatures.h | 18 +- .../common/ades183x/adi_ades183x_voltages.c | 30 +- .../common/ades183x/adi_ades183x_voltages.h | 14 +- .../common/ades183x/api/adi_ades183x_afe.c | 15 +- .../ades183x/api/adi_ades183x_afe_dma.c | 15 +- .../common/ades183x/config/adi_ades183x_cfg.c | 16 +- .../common/ades183x/config/adi_ades183x_cfg.h | 14 +- .../common/ades183x/pec/adi_ades183x_pec.c | 15 +- .../common/ades183x/pec/adi_ades183x_pec.h | 13 +- .../driver/afe/adi/common/ades183x/wscript | 3 +- src/app/driver/afe/adi/wscript | 3 +- src/app/driver/afe/api/afe.h | 19 +- src/app/driver/afe/api/afe_dma.h | 14 +- src/app/driver/afe/api/afe_plausibility.c | 16 +- src/app/driver/afe/api/afe_plausibility.h | 22 +- .../debug/can/api/debug_can_afe.c} | 91 +- .../debug/can/api/debug_can_afe_dma.c} | 38 +- src/app/driver/afe/debug/can/debug_can.c | 438 + src/app/driver/afe/debug/can/debug_can.h | 107 + src/app/driver/afe/debug/can/debug_can.json | 7 + .../app/driver/afe/debug/can/wscript | 74 +- .../afe/debug/default/api/debug_default_afe.c | 15 +- .../debug/default/api/debug_default_afe_dma.c | 14 +- .../driver/afe/debug/default/debug_default.c | 23 +- .../driver/afe/debug/default/debug_default.h | 17 +- .../afe/debug/default/debug_default.json | 10 +- src/app/driver/afe/debug/default/wscript | 3 +- src/app/driver/afe/debug/wscript | 3 +- src/app/driver/afe/ltc/6804-1/wscript | 3 +- .../driver/afe/ltc/6806/config/ltc_6806_cfg.c | 14 +- .../driver/afe/ltc/6806/config/ltc_6806_cfg.h | 39 +- src/app/driver/afe/ltc/6806/ltc_6806.c | 240 +- src/app/driver/afe/ltc/6806/ltc_6806.json | 14 +- src/app/driver/afe/ltc/6806/wscript | 3 +- src/app/driver/afe/ltc/6811-1/wscript | 3 +- src/app/driver/afe/ltc/6812-1/wscript | 3 +- .../afe/ltc/6813-1/config/ltc_6813-1_cfg.c | 55 +- .../afe/ltc/6813-1/config/ltc_6813-1_cfg.h | 48 +- src/app/driver/afe/ltc/6813-1/ltc_6813-1.c | 551 +- src/app/driver/afe/ltc/6813-1/ltc_6813-1.json | 14 +- src/app/driver/afe/ltc/6813-1/wscript | 3 +- src/app/driver/afe/ltc/api/ltc_afe.c | 17 +- .../driver/afe/ltc/common/config/ltc_cfg.h | 14 +- src/app/driver/afe/ltc/common/ltc.h | 26 +- src/app/driver/afe/ltc/common/ltc_afe_dma.c | 14 +- src/app/driver/afe/ltc/common/ltc_afe_dma.h | 14 +- src/app/driver/afe/ltc/common/ltc_defs.h | 195 +- src/app/driver/afe/ltc/common/ltc_pec.c | 13 +- src/app/driver/afe/ltc/common/ltc_pec.h | 15 +- src/app/driver/afe/ltc/wscript | 3 +- src/app/driver/afe/maxim/api/mxm_afe.c | 20 +- .../driver/afe/maxim/common/config/mxm_cfg.c | 14 +- .../driver/afe/maxim/common/config/mxm_cfg.h | 14 +- src/app/driver/afe/maxim/common/mxm_17841b.c | 24 +- src/app/driver/afe/maxim/common/mxm_17841b.h | 33 +- src/app/driver/afe/maxim/common/mxm_1785x.c | 209 +- src/app/driver/afe/maxim/common/mxm_1785x.h | 65 +- .../driver/afe/maxim/common/mxm_1785x_tools.c | 24 +- .../driver/afe/maxim/common/mxm_1785x_tools.h | 45 +- .../afe/maxim/common/mxm_41b_register_map.h | 17 +- src/app/driver/afe/maxim/common/mxm_afe_dma.c | 14 +- .../afe/maxim/common/mxm_basic_defines.h | 49 +- .../afe/maxim/common/mxm_battery_management.c | 64 +- .../afe/maxim/common/mxm_battery_management.h | 48 +- .../{mxm_bitextract.c => mxm_bit_extract.c} | 17 +- .../{mxm_bitextract.h => mxm_bit_extract.h} | 31 +- src/app/driver/afe/maxim/common/mxm_crc8.c | 14 +- src/app/driver/afe/maxim/common/mxm_crc8.h | 16 +- .../afe/maxim/common/mxm_register_map.h | 940 +- .../driver/afe/maxim/common/mxm_registry.c | 18 +- .../driver/afe/maxim/common/mxm_registry.h | 16 +- .../afe/maxim/max17852/maxim_max17852.json | 14 +- src/app/driver/afe/maxim/max17852/mxm_17852.c | 75 +- src/app/driver/afe/maxim/max17852/wscript | 5 +- src/app/driver/afe/maxim/wscript | 3 +- src/app/driver/afe/nxp/api/nxp_afe.c | 15 +- src/app/driver/afe/nxp/api/nxp_afe.h | 19 +- .../afe/nxp/mc33775a/api/nxp_mc33775a_afe.c | 18 +- .../nxp/mc33775a/config/nxp_mc33775a_cfg.c | 16 +- .../nxp/mc33775a/config/nxp_mc33775a_cfg.h | 70 +- src/app/driver/afe/nxp/mc33775a/nxp_afe_dma.c | 16 +- src/app/driver/afe/nxp/mc33775a/nxp_afe_dma.h | 14 +- .../driver/afe/nxp/mc33775a/nxp_mc33775a-ll.c | 66 +- .../driver/afe/nxp/mc33775a/nxp_mc33775a-ll.h | 46 +- .../nxp_mc33775a-ll_vendor-hashes.json | 23 + .../driver/afe/nxp/mc33775a/nxp_mc33775a.c | 208 +- .../driver/afe/nxp/mc33775a/nxp_mc33775a.h | 12 +- .../driver/afe/nxp/mc33775a/nxp_mc33775a.json | 18 +- .../afe/nxp/mc33775a/nxp_mc33775a_defs.h | 130 +- src/app/driver/afe/nxp/mc33775a/wscript | 29 +- src/app/driver/afe/nxp/wscript | 3 +- src/app/driver/afe/ti/api/ti_afe.c | 15 +- src/app/driver/afe/ti/api/ti_afe.h | 17 +- src/app/driver/afe/ti/api/wscript | 3 +- .../afe/ti/common/api/ti_bq79xxx_afe_dma.c | 16 +- src/app/driver/afe/ti/common/wscript | 3 +- .../driver/afe/ti/dummy/api/ti_dummy_afe.c | 14 +- src/app/driver/afe/ti/dummy/ti_dummy.c | 14 +- src/app/driver/afe/ti/dummy/ti_dummy.h | 14 +- src/app/driver/afe/ti/dummy/ti_dummy.json | 14 +- src/app/driver/afe/ti/dummy/wscript | 3 +- src/app/driver/afe/ti/wscript | 3 +- src/app/driver/afe/wscript | 3 +- src/app/driver/can/can.c | 236 +- src/app/driver/can/can.h | 18 +- src/app/driver/can/cbs/can_helper.c | 21 +- src/app/driver/can/cbs/can_helper.h | 14 +- src/app/driver/can/cbs/rx/can_cbs_rx.h | 88 +- .../can/cbs/rx/can_cbs_rx_aerosol-sensor.c | 34 +- .../can/cbs/rx/can_cbs_rx_bms-state-request.c | 141 +- .../can/cbs/rx/can_cbs_rx_cell-temperatures.c | 184 + .../can/cbs/rx/can_cbs_rx_cell-voltages.c | 178 + .../can/cbs/rx/can_cbs_rx_current-sensor.c | 605 +- src/app/driver/can/cbs/rx/can_cbs_rx_debug.c | 156 +- .../driver/can/cbs/rx/can_cbs_rx_imd-info.c | 431 +- .../driver/can/cbs/rx/can_cbs_rx_imd-info.h | 113 + .../can/cbs/rx/can_cbs_rx_imd-response.c | 174 +- .../can/cbs/rx/can_cbs_rx_imd-response.h | 109 + .../{tx => tx-async}/can_cbs_tx_crash-dump.c | 45 +- .../{tx => tx-async}/can_cbs_tx_crash-dump.h | 22 +- .../can_cbs_tx_debug-build-configuration.c | 1615 +++ .../can_cbs_tx_debug-build-configuration.h | 120 + .../can_cbs_tx_debug-response.c | 203 +- .../can_cbs_tx_debug-response.h | 28 +- ..._tx_debug-unsupported-multiplexer-values.c | 26 +- ..._tx_debug-unsupported-multiplexer-values.h | 16 +- .../can/cbs/tx-async/can_cbs_tx_imd-request.c | 476 + .../can/cbs/tx-async/can_cbs_tx_imd-request.h | 104 + .../tx-cyclic/can_cbs_tx_bms-state-details.c | 408 + .../can/cbs/tx-cyclic/can_cbs_tx_bms-state.c | 386 + .../tx-cyclic/can_cbs_tx_cell-temperatures.c | 311 + .../can_cbs_tx_cell-voltages.c | 185 +- .../can/cbs/tx-cyclic/can_cbs_tx_cyclic.h | 375 + .../cbs/tx-cyclic/can_cbs_tx_pack-limits.c | 418 + .../can_cbs_tx_pack-minimum-maximum-values.c | 386 + .../can_cbs_tx_pack-state-estimation.c | 480 + .../cbs/tx-cyclic/can_cbs_tx_pack-values-p0.c | 303 + .../cbs/tx-cyclic/can_cbs_tx_pack-values-p1.c | 169 + ...can_cbs_tx_string-minimum-maximum-values.c | 263 + .../can_cbs_tx_string-state-estimation.c | 441 + .../cbs/tx-cyclic/can_cbs_tx_string-state.c | 817 ++ .../tx-cyclic/can_cbs_tx_string-values-p0.c | 290 + .../tx-cyclic/can_cbs_tx_string-values-p1.c | 178 + src/app/driver/can/cbs/tx/can_cbs_tx.h | 232 - .../can/cbs/tx/can_cbs_tx_bms-state-details.c | 106 - .../driver/can/cbs/tx/can_cbs_tx_bms-state.c | 546 - .../can/cbs/tx/can_cbs_tx_cell-temperatures.c | 269 - .../can/cbs/tx/can_cbs_tx_pack-limits.c | 141 - .../can_cbs_tx_pack-minimum-maximum-values.c | 248 - .../cbs/tx/can_cbs_tx_pack-state-estimation.c | 194 - .../can/cbs/tx/can_cbs_tx_pack-values-p0.c | 265 - .../tx/can_cbs_tx_string-state-estimation.c | 176 - .../can/cbs/tx/can_cbs_tx_string-values-p0.c | 86 - .../can/cbs/tx/can_cbs_tx_string-values-p1.c | 82 - src/app/driver/checksum/checksum.c | 14 +- src/app/driver/checksum/checksum.h | 17 +- src/app/driver/config/can_cfg.c | 18 +- src/app/driver/config/can_cfg.h | 52 +- .../config/can_cfg_rx-message-definitions.h | 477 +- src/app/driver/config/can_cfg_rx.c | 35 +- .../can_cfg_tx-async-message-definitions.h | 136 + ...> can_cfg_tx-cyclic-message-definitions.h} | 348 +- .../{can_cfg_tx.c => can_cfg_tx_cyclic.c} | 54 +- src/app/driver/config/contactor_cfg.c | 16 +- src/app/driver/config/contactor_cfg.h | 16 +- src/app/driver/config/dma_cfg.c | 14 +- src/app/driver/config/dma_cfg.h | 19 +- src/app/driver/config/fram_cfg.c | 22 +- src/app/driver/config/fram_cfg.h | 40 +- src/app/driver/config/interlock_cfg.h | 14 +- src/app/driver/config/pex_cfg.c | 14 +- src/app/driver/config/pex_cfg.h | 47 +- src/app/driver/config/spi_cfg.c | 50 +- src/app/driver/config/spi_cfg.h | 41 +- src/app/driver/config/sps_cfg.c | 36 +- src/app/driver/config/sps_cfg.h | 16 +- src/app/driver/config/tsi_plausibility_cfg.h | 18 +- src/app/driver/contactor/contactor.c | 12 +- src/app/driver/contactor/contactor.h | 13 +- src/app/driver/crc/crc.c | 20 +- src/app/driver/crc/crc.h | 15 +- src/app/driver/dma/dma.c | 38 +- src/app/driver/dma/dma.h | 12 +- src/app/driver/foxmath/foxmath.c | 16 +- src/app/driver/foxmath/foxmath.h | 30 +- src/app/driver/foxmath/utils.h | 12 +- src/app/driver/fram/fram.c | 75 +- src/app/driver/fram/fram.h | 13 +- src/app/driver/htsensor/htsensor.c | 12 +- src/app/driver/htsensor/htsensor.h | 12 +- src/app/driver/i2c/i2c.c | 48 +- src/app/driver/i2c/i2c.h | 18 +- .../driver/imd/bender/ir155/bender_ir155.c | 19 +- .../driver/imd/bender/ir155/bender_ir155.h | 13 +- .../imd/bender/ir155/bender_ir155_helper.c | 15 +- .../imd/bender/ir155/bender_ir155_helper.h | 21 +- .../bender/ir155/config/bender_ir155_cfg.h | 21 +- src/app/driver/imd/bender/ir155/wscript | 3 +- .../imd/bender/iso165c/bender_iso165c.c | 784 +- .../imd/bender/iso165c/bender_iso165c.h | 20 +- .../iso165c/config/bender_iso165c_cfg.h | 83 +- src/app/driver/imd/bender/iso165c/wscript | 5 +- src/app/driver/imd/bender/wscript | 3 +- src/app/driver/imd/imd.c | 21 +- src/app/driver/imd/imd.h | 14 +- src/app/driver/imd/none/no-imd.c | 13 +- src/app/driver/imd/none/no-imd.h | 13 +- src/app/driver/imd/none/wscript | 3 +- src/app/driver/imd/wscript | 3 +- src/app/driver/interlock/interlock.c | 26 +- src/app/driver/interlock/interlock.h | 18 +- src/app/driver/io/io.c | 15 +- src/app/driver/io/io.h | 13 +- src/app/driver/led/led.c | 14 +- src/app/driver/led/led.h | 12 +- src/app/driver/mcu/mcu.c | 20 +- src/app/driver/mcu/mcu.h | 16 +- src/app/driver/meas/meas.c | 12 +- src/app/driver/meas/meas.h | 13 +- src/app/driver/pex/pex.c | 71 +- src/app/driver/pex/pex.h | 14 +- src/app/driver/pwm/pwm.c | 12 +- src/app/driver/pwm/pwm.h | 12 +- src/app/driver/rtc/rtc.c | 149 +- src/app/driver/rtc/rtc.h | 32 +- src/app/driver/sbc/fs8x_driver/sbc_fs8x.c | 2 +- src/app/driver/sbc/fs8x_driver/sbc_fs8x.h | 2 +- .../driver/sbc/fs8x_driver/sbc_fs8x_assert.h | 2 +- .../driver/sbc/fs8x_driver/sbc_fs8x_common.h | 2 +- .../sbc/fs8x_driver/sbc_fs8x_communication.c | 2 +- .../sbc/fs8x_driver/sbc_fs8x_communication.h | 2 +- src/app/driver/sbc/nxpfs85xx.c | 18 +- src/app/driver/sbc/nxpfs85xx.h | 14 +- src/app/driver/sbc/sbc.c | 14 +- src/app/driver/sbc/sbc.h | 14 +- src/app/driver/spi/spi.c | 163 +- src/app/driver/spi/spi.h | 20 +- src/app/driver/spi/spi_cfg-helper.h | 17 +- src/app/driver/sps/sps.c | 37 +- src/app/driver/sps/sps.h | 14 +- src/app/driver/sps/sps_types.h | 14 +- src/app/driver/ts/api/tsi.h | 15 +- src/app/driver/ts/api/tsi_limits.c | 23 +- src/app/driver/ts/beta.c | 24 +- src/app/driver/ts/beta.h | 16 +- .../b57251v5103j060/epcos_b57251v5103j060.c | 44 +- .../b57251v5103j060/epcos_b57251v5103j060.h | 16 +- .../epcos_b57251v5103j060_lookup-table.c | 16 +- .../epcos_b57251v5103j060_polynomial.c | 16 +- .../b57861s0103f045/epcos_b57861s0103f045.c | 34 +- .../b57861s0103f045/epcos_b57861s0103f045.h | 16 +- .../epcos_b57861s0103f045_lookup-table.c | 16 +- .../epcos_b57861s0103f045_polynomial.c | 16 +- src/app/driver/ts/fake/none/fake_none.c | 16 +- src/app/driver/ts/fake/none/fake_none.h | 16 +- .../lookup-table/fake_none_lookup-table.c | 16 +- .../none/polynomial/fake_none_polynomial.c | 16 +- .../murata_ncxxxxh103_lookup-table.c | 16 +- .../ts/murata/ncxxxxh103/murata_ncxxxxh103.c | 40 +- .../ts/murata/ncxxxxh103/murata_ncxxxxh103.h | 16 +- .../polynomial/murata_ncxxxxh103_polynomial.c | 16 +- .../semitec_103jt_lookup-table.c} | 34 +- .../driver/ts/semitec/103jt/semitec_103jt.c | 197 + .../driver/ts/semitec/103jt/semitec_103jt.h | 126 + src/app/driver/ts/temperature_sensor_defs.h | 16 +- .../vishay_ntcalug01a103g_lookup-table.c | 14 +- .../vishay_ntcalug01a103g_polynomial.c | 14 +- .../ntcalug01a103g/vishay_ntcalug01a103g.c | 27 +- .../ntcalug01a103g/vishay_ntcalug01a103g.h | 16 +- .../vishay_ntcle317e4103sba_lookup-table.c | 14 +- .../vishay_ntcle317e4103sba.c | 42 +- .../vishay_ntcle317e4103sba.h | 16 +- .../vishay_ntcle413e2103f102l_lookup-table.c | 14 +- .../vishay_ntcle413e2103f102l.c | 42 +- .../vishay_ntcle413e2103f102l.h | 16 +- src/app/driver/wscript | 59 +- src/app/engine/config/database_cfg.c | 26 +- src/app/engine/config/database_cfg.h | 145 +- src/app/engine/config/diag_cfg.c | 17 +- src/app/engine/config/diag_cfg.h | 170 +- src/app/engine/config/sys_cfg.c | 13 +- src/app/engine/config/sys_cfg.h | 13 +- src/app/engine/config/sys_mon_cfg.c | 17 +- src/app/engine/config/sys_mon_cfg.h | 15 +- src/app/engine/database/database.c | 40 +- src/app/engine/database/database.h | 19 +- src/app/engine/database/database_helper.c | 13 +- src/app/engine/database/database_helper.h | 14 +- src/app/engine/diag/cbs/diag_cbs.h | 14 +- .../engine/diag/cbs/diag_cbs_aerosol-sensor.c | 12 +- src/app/engine/diag/cbs/diag_cbs_afe.c | 12 +- src/app/engine/diag/cbs/diag_cbs_bms.c | 12 +- src/app/engine/diag/cbs/diag_cbs_can.c | 12 +- src/app/engine/diag/cbs/diag_cbs_contactor.c | 12 +- .../engine/diag/cbs/diag_cbs_current-sensor.c | 18 +- src/app/engine/diag/cbs/diag_cbs_current.c | 14 +- .../engine/diag/cbs/diag_cbs_deep-discharge.c | 12 +- src/app/engine/diag/cbs/diag_cbs_dummy.c | 12 +- src/app/engine/diag/cbs/diag_cbs_fram.c | 12 +- src/app/engine/diag/cbs/diag_cbs_i2c.c | 12 +- src/app/engine/diag/cbs/diag_cbs_insulation.c | 12 +- src/app/engine/diag/cbs/diag_cbs_interlock.c | 12 +- .../engine/diag/cbs/diag_cbs_plausibility.c | 12 +- .../diag/cbs/diag_cbs_power-measurement.c | 12 +- src/app/engine/diag/cbs/diag_cbs_rtc.c | 12 +- src/app/engine/diag/cbs/diag_cbs_sbc.c | 12 +- src/app/engine/diag/cbs/diag_cbs_sys-mon.c | 12 +- .../engine/diag/cbs/diag_cbs_temperature.c | 12 +- src/app/engine/diag/cbs/diag_cbs_voltage.c | 54 +- src/app/engine/diag/diag.c | 30 +- src/app/engine/diag/diag.h | 17 +- src/app/engine/hw_info/master_info.c | 16 +- src/app/engine/hw_info/master_info.h | 16 +- src/app/engine/sys/reset.c | 17 +- src/app/engine/sys/reset.h | 15 +- src/app/engine/sys/sys.c | 20 +- src/app/engine/sys/sys.h | 15 +- src/app/engine/sys_mon/sys_mon.c | 37 +- src/app/engine/sys_mon/sys_mon.h | 23 +- src/app/engine/wscript | 6 +- src/app/main/fassert.c | 19 +- src/app/main/fstartup.c | 43 +- src/app/main/include/config/version_cfg.h | 154 +- src/app/main/include/fassert.h | 15 +- src/app/main/include/fstartup.h | 15 +- src/app/main/include/fstd_types.h | 15 +- src/app/main/include/fsystem.h | 18 +- src/app/main/include/general.h | 16 +- src/app/main/include/infinite-loop-helper.h | 16 +- src/app/main/include/main.h | 31 +- src/app/main/linker_script_elf.cmd | 12 +- src/app/main/linker_script_hex.cmd | 2 +- src/app/main/main.c | 23 +- src/app/main/wscript | 3 +- src/app/task/config/ftask_cfg.c | 34 +- src/app/task/config/ftask_cfg.h | 12 +- src/app/task/ftask/freertos/ftask_freertos.c | 44 +- src/app/task/ftask/ftask.c | 12 +- src/app/task/ftask/ftask.h | 26 +- src/app/task/os/freertos/os_freertos.c | 15 +- .../freertos/os_freertos_config-validation.h | 12 +- src/app/task/os/os.c | 14 +- src/app/task/os/os.h | 12 +- src/app/task/wscript | 6 +- src/app/wscript | 3 +- src/doxygen_src.h | 43 +- src/hal/wscript | 3 +- src/opt/cells/config/lg_inr18650mj1.c | 16 +- src/opt/cells/config/lg_inr18650mj1.h | 22 +- src/opt/cells/config/panasonic_ncr18650bd.h | 22 +- src/os/freertos/README.ti-halcogen.md | 2 +- src/os/freertos/freertos_cfg.json | 8 +- src/os/freertos/wscript | 3 +- src/os/wscript | 3 +- src/wscript | 3 +- tests/README.md | 15 + tests/axivion/README.md | 65 +- tests/axivion/additional_compiler_config.json | 64 +- .../addon-test/run_axivion_addon_tests.bat | 84 - .../test_file_comments/not_doxygen_comment.c | 8 +- .../test_file_comments/text_error.c | 8 +- .../test_file_comments/unexpected_tag.c | 8 +- .../test_file_comments/value_error.c | 8 +- .../test_license_comments/license_incorrect.c | 8 +- .../test_license_comments/license_short.c | 2 +- .../addon-test/test_license_comments/ok.c | 8 +- tests/axivion/addon/__init__.py | 0 .../addon/doxygen_comment_at_declaration.py | 0 tests/axivion/addon/file_comment.py | 0 tests/axivion/addon/file_encoding_check.py | 0 tests/axivion/addon/file_license_header.py | 16 +- tests/axivion/addon/iisb_base.py | 0 tests/axivion/addon/literal_suffixes.py | 2 - tests/axivion/addon/unique_filenames.py | 0 tests/axivion/architecture_config.json | 62 +- tests/axivion/axivion_config.json | 28 +- tests/axivion/axivion_preinc.h | 15 +- tests/axivion/axivion_self_tests.json | 66 + tests/axivion/axivion_self_tests.py | 204 + tests/axivion/ci_config.json | 138 +- tests/axivion/combine_report_files.py | 201 + tests/axivion/compiler-errata/README.md | 37 +- ...ler_errata_ti-cgt-arm_20.2.6.lts_tests.bat | 89 - tests/axivion/compiler_config.json | 494 +- tests/axivion/config-test/README.md | 10 + .../config-test/run_axivion_config_tests.bat | 84 - tests/axivion/config-test/test_macro-names.h | 3 +- .../config-test/test_parameter-names-0.c | 123 + .../config-test/test_parameter-names-1.c | 33 + .../config-test/test_parameter-names.c | 123 - .../check_forbidden_violations.py | 141 - tests/axivion/mapping.gxl | 9 - tests/axivion/qualification-test/README.md | 25 +- .../run_axivion_qualification_kit_tests.bat | 85 - tests/axivion/rule_config_addon.json | 210 +- tests/axivion/rule_config_bad_tokens.json | 54 +- tests/axivion/rule_config_c.json | 2780 ++-- tests/axivion/rule_config_c.py | 7 +- tests/axivion/rule_config_include_guard.py | 15 +- tests/axivion/rule_config_metric_lines.json | 204 +- tests/axivion/rule_config_names.json | 328 +- tests/axivion/rule_config_names.py | 40 +- tests/axivion/scripts/README.md | 23 +- .../axivion/scripts/check_axivion_versions.py | 56 +- .../ci_check_freshness_of_architecture_svg.py | 35 +- tests/axivion/scripts/dependency_analysis.py | 12 +- .../scripts/gravis_export_architecture_svg.py | 7 +- tests/axivion/scripts/start_analysis.bat | 52 - .../axivion/scripts/start_local_analysis.bat | 66 - .../scripts/start_local_dashserver.bat | 40 - .../scripts/wrapper_make_race_pdfs.bat | 42 - tests/axivion/violations/check_violations.py | 275 + .../forbidden-violations.txt | 0 .../violations/violation-free-files.txt | 372 + tests/c-std/c-std-test-inline-helper.h | 13 +- tests/c-std/c-std-test.c | 13 +- tests/c-std/c-std-test.json | 28 +- tests/c-std/c-std-test.py | 31 +- tests/can/check_ids.py | 464 +- tests/can/check_implemented.py | 38 +- tests/ccs/ccs1000/ccs1000_cc-options.yaml | 4 +- tests/ccs/ccs1000/ccs1000_linker_pulls.json | 6 +- tests/ccs/ccs1000/ccs1000_paths_win32.txt | 8 +- tests/ccs/ccs1011/ccs1011_cc-options.yaml | 4 +- tests/ccs/ccs1011/ccs1011_linker_pulls.json | 6 +- tests/ccs/ccs1011/ccs1011_paths_win32.txt | 8 +- tests/ccs/ccs1020/ccs1020_cc-options.yaml | 4 +- tests/ccs/ccs1020/ccs1020_linker_pulls.json | 6 +- tests/ccs/ccs1020/ccs1020_paths_win32.txt | 8 +- tests/ccs/ccs1030/ccs1030_cc-options.yaml | 4 +- tests/ccs/ccs1030/ccs1030_linker_pulls.json | 6 +- tests/ccs/ccs1030/ccs1030_paths_win32.txt | 8 +- tests/ccs/ccs1031/ccs1031_cc-options.yaml | 4 +- tests/ccs/ccs1031/ccs1031_linker_pulls.json | 6 +- tests/ccs/ccs1031/ccs1031_paths_win32.txt | 8 +- tests/ccs/ccs1040/ccs1040_cc-options.yaml | 4 +- tests/ccs/ccs1040/ccs1040_linker_pulls.json | 6 +- tests/ccs/ccs1040/ccs1040_paths_win32.txt | 8 +- .../ccs1100-c99/ccs1100-c99_cc-options.yaml | 4 +- .../ccs1100-c99/ccs1100-c99_linker_pulls.json | 6 +- .../ccs1100-c99/ccs1100-c99_paths_win32.txt | 8 +- tests/ccs/ccs1100/ccs1100_cc-options.yaml | 4 +- tests/ccs/ccs1100/ccs1100_linker_pulls.json | 6 +- tests/ccs/ccs1100/ccs1100_paths_win32.txt | 8 +- tests/ccs/ccs1200/ccs1200_cc-options.yaml | 4 +- tests/ccs/ccs1200/ccs1200_linker_pulls.json | 6 +- tests/ccs/ccs1200/ccs1200_paths_win32.txt | 8 +- .../ccs_build_helper.py} | 118 +- tests/cli/__init__.py | 38 + tests/cli/cmd_axivion/__init__.py | 38 + tests/cli/cmd_axivion/test_axivion_impl.py | 101 + tests/cli/cmd_ci/__init__.py | 38 + .../cmd_ci/test_create_readme.py} | 73 +- tests/cli/helpers/__init__.py | 38 + tests/cli/helpers/test_spr.py | 97 + tests/cli/test_main.py | 120 + tests/dbc/check_parseable.py | 30 +- tests/dbc/overlapping-signals.py | 4 +- tests/env/conda_env_linux.json | 2462 ---- tests/env/conda_env_win32.json | 1932 --- .../env/packages/env_test_argparse-addons.py | 84 - tests/env/packages/env_test_astroid.py | 107 - tests/env/packages/env_test_atk-1.0_linux.py | 73 - tests/env/packages/env_test_attrs.py | 80 - tests/env/packages/env_test_babel.py | 72 - tests/env/packages/env_test_backcall.py | 72 - tests/env/packages/env_test_beautifulsoup4.py | 74 - tests/env/packages/env_test_bitstruct.py | 76 - tests/env/packages/env_test_black.py | 81 - tests/env/packages/env_test_bleach.py | 72 - tests/env/packages/env_test_bokeh.py | 72 - tests/env/packages/env_test_bottle.py | 72 - tests/env/packages/env_test_brotlipy_linux.py | 69 - .../env/packages/env_test_ca-certificates.py | 73 - tests/env/packages/env_test_cairo_linux.py | 69 - tests/env/packages/env_test_cantools.py | 72 - tests/env/packages/env_test_certifi.py | 74 - tests/env/packages/env_test_cffconvert.py | 72 - tests/env/packages/env_test_cffi.py | 72 - .../packages/env_test_charset-normalizer.py | 77 - tests/env/packages/env_test_click.py | 72 - tests/env/packages/env_test_cloudpickle.py | 72 - tests/env/packages/env_test_colorama.py | 72 - .../env_test_console_shortcut_win32.py | 71 - tests/env/packages/env_test_coverage.py | 72 - tests/env/packages/env_test_crcmod.py | 72 - tests/env/packages/env_test_cycler.py | 72 - tests/env/packages/env_test_dask.py | 72 - tests/env/packages/env_test_debugpy.py | 74 - tests/env/packages/env_test_decorator.py | 72 - tests/env/packages/env_test_defusedxml.py | 72 - tests/env/packages/env_test_diskcache.py | 72 - tests/env/packages/env_test_docopt.py | 72 - tests/env/packages/env_test_docutils.py | 72 - tests/env/packages/env_test_doxygen_win32.py | 71 - tests/env/packages/env_test_entrypoints.py | 72 - tests/env/packages/env_test_et-xmlfile.py | 73 - tests/env/packages/env_test_expat_linux.py | 69 - tests/env/packages/env_test_filterpy.py | 72 - ...nv_test_font-ttf-dejavu-sans-mono_linux.py | 71 - .../env_test_font-ttf-inconsolata_linux.py | 71 - ...env_test_font-ttf-source-code-pro_linux.py | 71 - .../env_test_font-ttf-ubuntu_linux.py | 71 - .../env/packages/env_test_fontconfig_linux.py | 69 - .../packages/env_test_fonts-anaconda_linux.py | 71 - .../env_test_fonts-conda-ecosystem_linux.py | 71 - tests/env/packages/env_test_freetype_linux.py | 69 - tests/env/packages/env_test_fribidi_linux.py | 69 - tests/env/packages/env_test_fsspec.py | 72 - tests/env/packages/env_test_gcovr.py | 72 - .../env/packages/env_test_gdk-pixbuf_linux.py | 71 - tests/env/packages/env_test_gettext_linux.py | 69 - tests/env/packages/env_test_gitdb.py | 72 - tests/env/packages/env_test_gitpython.py | 72 - tests/env/packages/env_test_glib_linux.py | 69 - .../env_test_gobject-introspection_linux.py | 71 - tests/env/packages/env_test_gprof2dot.py | 72 - .../env/packages/env_test_graphite2_linux.py | 69 - tests/env/packages/env_test_graphviz_win32.py | 71 - .../env_test_gst-plugins-base_linux.py | 71 - .../env/packages/env_test_gstreamer_linux.py | 69 - tests/env/packages/env_test_gtk2_linux.py | 69 - tests/env/packages/env_test_harfbuzz_linux.py | 69 - tests/env/packages/env_test_httplib2.py | 72 - tests/env/packages/env_test_icu_linux.py | 69 - tests/env/packages/env_test_idna.py | 72 - tests/env/packages/env_test_imagesize.py | 72 - tests/env/packages/env_test_ipykernel.py | 72 - .../env/packages/env_test_ipython-genutils.py | 74 - tests/env/packages/env_test_ipython.py | 72 - tests/env/packages/env_test_ipywidgets.py | 72 - tests/env/packages/env_test_isort.py | 72 - tests/env/packages/env_test_jdcal.py | 72 - tests/env/packages/env_test_jedi.py | 72 - tests/env/packages/env_test_jinja2.py | 72 - tests/env/packages/env_test_joblib.py | 72 - tests/env/packages/env_test_jpeg_linux.py | 69 - tests/env/packages/env_test_jsonschema.py | 72 - tests/env/packages/env_test_jupyter-client.py | 74 - .../env/packages/env_test_jupyter-console.py | 75 - tests/env/packages/env_test_jupyter-core.py | 74 - tests/env/packages/env_test_jupyter.py | 72 - .../packages/env_test_jupyterlab-pygments.py | 74 - .../packages/env_test_jupyterlab-widgets.py | 76 - tests/env/packages/env_test_kiwisolver.py | 72 - tests/env/packages/env_test_latexcodec.py | 72 - .../packages/env_test_lazy-object-proxy.py | 74 - .../env_test_ld_impl_linux-64_linux.py | 71 - tests/env/packages/env_test_libffi_linux.py | 69 - .../env/packages/env_test_libgcc-ng_linux.py | 71 - tests/env/packages/env_test_libglib_linux.py | 69 - tests/env/packages/env_test_libglu_linux.py | 70 - tests/env/packages/env_test_libgomp_linux.py | 69 - tests/env/packages/env_test_libiconv_linux.py | 69 - tests/env/packages/env_test_libogg_linux.py | 69 - tests/env/packages/env_test_libopus_linux.py | 69 - tests/env/packages/env_test_libpng_linux.py | 69 - .../packages/env_test_libstdcxx-ng_linux.py | 71 - tests/env/packages/env_test_libtiff_linux.py | 69 - tests/env/packages/env_test_libuuid_linux.py | 69 - .../env/packages/env_test_libvorbis_linux.py | 69 - .../packages/env_test_libwebp-base_linux.py | 71 - tests/env/packages/env_test_libxcb_linux.py | 69 - tests/env/packages/env_test_libxml2_linux.py | 69 - tests/env/packages/env_test_locket.py | 72 - tests/env/packages/env_test_lxml.py | 72 - tests/env/packages/env_test_lz4-c_linux.py | 71 - tests/env/packages/env_test_markdown.py | 72 - tests/env/packages/env_test_markupsafe.py | 72 - .../packages/env_test_matplotlib-inline.py | 74 - tests/env/packages/env_test_matplotlib.py | 72 - tests/env/packages/env_test_mccabe.py | 72 - tests/env/packages/env_test_mistune.py | 72 - tests/env/packages/env_test_msgpack_linux.py | 69 - .../env/packages/env_test_mypy-extensions.py | 74 - tests/env/packages/env_test_mypy.py | 72 - tests/env/packages/env_test_nbclient.py | 72 - tests/env/packages/env_test_nbconvert.py | 72 - tests/env/packages/env_test_nbformat.py | 72 - tests/env/packages/env_test_ncurses_linux.py | 69 - tests/env/packages/env_test_nest-asyncio.py | 74 - tests/env/packages/env_test_ninja_linux.py | 69 - tests/env/packages/env_test_notebook.py | 72 - tests/env/packages/env_test_numpy.py | 72 - tests/env/packages/env_test_openpyxl.py | 72 - tests/env/packages/env_test_openssl.py | 72 - tests/env/packages/env_test_packaging.py | 72 - tests/env/packages/env_test_pandas-stubs.py | 74 - tests/env/packages/env_test_pandas.py | 72 - tests/env/packages/env_test_pandocfilters.py | 72 - tests/env/packages/env_test_pango_linux.py | 69 - tests/env/packages/env_test_parso.py | 72 - tests/env/packages/env_test_partd.py | 72 - tests/env/packages/env_test_pathlib2_linux.py | 69 - tests/env/packages/env_test_patsy.py | 72 - tests/env/packages/env_test_pcre_linux.py | 69 - tests/env/packages/env_test_pexpect_linux.py | 69 - tests/env/packages/env_test_pickleshare.py | 72 - tests/env/packages/env_test_pillow.py | 72 - tests/env/packages/env_test_pip-licenses.py | 74 - tests/env/packages/env_test_pip.py | 72 - tests/env/packages/env_test_pixman_linux.py | 69 - .../packages/env_test_plantuml-markdown.py | 73 - tests/env/packages/env_test_plantuml.py | 72 - tests/env/packages/env_test_platformdirs.py | 72 - .../env_test_powershell_shortcut_win32.py | 71 - .../packages/env_test_prometheus-client.py | 79 - tests/env/packages/env_test_prompt-toolkit.py | 74 - tests/env/packages/env_test_psutil.py | 72 - tests/env/packages/env_test_ptable.py | 72 - .../packages/env_test_pthread-stubs_linux.py | 71 - .../env/packages/env_test_ptyprocess_linux.py | 69 - .../env/packages/env_test_pybtex-docutils.py | 97 - tests/env/packages/env_test_pybtex.py | 72 - tests/env/packages/env_test_pycparser.py | 72 - tests/env/packages/env_test_pyenchant.py | 72 - tests/env/packages/env_test_pygments.py | 72 - tests/env/packages/env_test_pykwalify.py | 72 - tests/env/packages/env_test_pylint.py | 72 - .../env/packages/env_test_pyopenssl_linux.py | 69 - tests/env/packages/env_test_pyparsing.py | 72 - tests/env/packages/env_test_pypubsub_linux.py | 69 - tests/env/packages/env_test_pyrsistent.py | 72 - tests/env/packages/env_test_pyserial.py | 72 - tests/env/packages/env_test_pysimplegui.py | 72 - tests/env/packages/env_test_pysocks_linux.py | 69 - tests/env/packages/env_test_python-can.py | 74 - tests/env/packages/env_test_python-datauri.py | 76 - tests/env/packages/env_test_python-lin.py | 74 - .../packages/env_test_python-markdown-math.py | 74 - tests/env/packages/env_test_python-uds.py | 74 - .../env/packages/env_test_python_abi_linux.py | 69 - tests/env/packages/env_test_pytz.py | 72 - tests/env/packages/env_test_pyvisa.py | 72 - tests/env/packages/env_test_pywin32_win32.py | 72 - tests/env/packages/env_test_pywinpty_win32.py | 72 - tests/env/packages/env_test_pyyaml.py | 72 - tests/env/packages/env_test_pyzmq.py | 71 - tests/env/packages/env_test_qtconsole.py | 72 - tests/env/packages/env_test_qtpy.py | 74 - tests/env/packages/env_test_readline_linux.py | 69 - tests/env/packages/env_test_regex.py | 72 - tests/env/packages/env_test_requests-file.py | 78 - tests/env/packages/env_test_requests.py | 72 - tests/env/packages/env_test_rope.py | 72 - tests/env/packages/env_test_rsinstrument.py | 72 - .../env/packages/env_test_ruamel-yaml-clib.py | 74 - tests/env/packages/env_test_ruamel-yaml.py | 74 - tests/env/packages/env_test_scipy.py | 72 - tests/env/packages/env_test_seaborn.py | 72 - tests/env/packages/env_test_send2trash.py | 72 - tests/env/packages/env_test_setuptools.py | 72 - tests/env/packages/env_test_six.py | 72 - tests/env/packages/env_test_smmap.py | 72 - .../env/packages/env_test_snowballstemmer.py | 72 - .../packages/env_test_sphinx-copybutton.py | 74 - tests/env/packages/env_test_sphinx-panels.py | 74 - .../env/packages/env_test_sphinx-rtd-theme.py | 74 - tests/env/packages/env_test_sphinx.py | 72 - .../env_test_sphinxcontrib-applehelp.py | 74 - .../packages/env_test_sphinxcontrib-bibtex.py | 74 - .../env_test_sphinxcontrib-devhelp.py | 74 - .../env_test_sphinxcontrib-htmlhelp.py | 74 - .../packages/env_test_sphinxcontrib-jsmath.py | 74 - .../env_test_sphinxcontrib-mermaid.py | 74 - .../env_test_sphinxcontrib-plantuml.py | 74 - .../env_test_sphinxcontrib-programoutput.py | 74 - .../packages/env_test_sphinxcontrib-qthelp.py | 74 - .../env_test_sphinxcontrib-serializinghtml.py | 74 - .../env_test_sphinxcontrib-spelling.py | 74 - tests/env/packages/env_test_sqlite.py | 72 - tests/env/packages/env_test_statsmodels.py | 72 - tests/env/packages/env_test_tabulate.py | 72 - tests/env/packages/env_test_tenacity.py | 86 - tests/env/packages/env_test_terminado.py | 72 - tests/env/packages/env_test_testpath.py | 72 - tests/env/packages/env_test_textparser.py | 72 - tests/env/packages/env_test_textx.py | 74 - tests/env/packages/env_test_threadpoolctl.py | 72 - tests/env/packages/env_test_tk_linux.py | 69 - tests/env/packages/env_test_toml.py | 72 - tests/env/packages/env_test_tomli.py | 74 - tests/env/packages/env_test_toolz.py | 72 - tests/env/packages/env_test_tornado.py | 72 - tests/env/packages/env_test_traitlets.py | 72 - .../packages/env_test_typing-extensions.py | 74 - tests/env/packages/env_test_tzdata.py | 75 - tests/env/packages/env_test_uptime.py | 72 - tests/env/packages/env_test_urllib3.py | 72 - tests/env/packages/env_test_vc_win32.py | 71 - .../packages/env_test_vs2015_runtime_win32.py | 71 - tests/env/packages/env_test_wcwidth.py | 72 - tests/env/packages/env_test_webencodings.py | 72 - tests/env/packages/env_test_wheel.py | 72 - .../packages/env_test_widgetsnbextension.py | 72 - .../packages/env_test_wincertstore_win32.py | 72 - .../packages/env_test_windows-curses_win32.py | 74 - tests/env/packages/env_test_winpty_win32.py | 72 - tests/env/packages/env_test_wrapt.py | 72 - tests/env/packages/env_test_xlsxwriter.py | 74 - tests/env/packages/env_test_xz_linux.py | 69 - tests/env/packages/env_test_zlib.py | 74 - tests/env/packages/env_test_zstd_linux.py | 69 - tests/env/packages_test.py | 156 - tests/os-information/README.md | 16 +- tests/re-names/README.md | 4 +- tests/re-names/function.json | 76 +- tests/re-names/global-variable.json | 88 +- tests/re-names/local-variable.json | 50 +- tests/re-names/macro.json | 48 +- tests/re-names/test_names_regex.py | 11 +- tests/re-names/typedefed-enum.json | 44 +- tests/re-names/typedefed-struct.json | 44 +- tests/scripts/.gitignore | 1 - tests/scripts/gui/__init__.py | 43 - tests/scripts/run_tests.bat | 87 - tests/scripts/waf-core/README.md | 6 - tests/scripts/waf-core/general/wscript | 82 - tests/scripts/waf-core/init/side_cwd/side.txt | 1 - .../waf-core/init/up_cwd/project/sub/test.txt | 1 - .../waf-core/init/up_cwd/project/wscript | 58 - tests/scripts/waf-core/init/wscript | 141 - tests/scripts/waf-core/install/wscript | 92 - tests/scripts/waf-core/install_group/wscript | 72 - tests/scripts/waf-core/preproc/recursion/a.c | 6 - tests/scripts/waf-core/preproc/recursion/a.h | 8 - tests/scripts/waf-core/preproc/recursion/b.h | 1 - tests/scripts/waf-core/preproc/recursion/c.h | 3 - tests/scripts/waf-core/preproc/src/a.h | 1 - tests/scripts/waf-core/preproc/src/b.h | 0 tests/scripts/waf-core/preproc/src/c.h | 0 tests/scripts/waf-core/preproc/src/d.h | 0 tests/scripts/waf-core/preproc/src/e.h | 1 - tests/scripts/waf-core/preproc/src/f.h | 0 tests/scripts/waf-core/preproc/src/g.h | 0 tests/scripts/waf-core/preproc/src/h.h | 0 tests/scripts/waf-core/preproc/src/main.c | 46 - tests/scripts/waf-core/preproc/src/pasting.c | 9 - tests/scripts/waf-core/preproc/wscript | 198 - .../waf-core/run_waf_core_unit_tests.sh | 89 - tests/scripts/waf-tools/__init__.py | 43 - .../f_guidelines/test_f_guidelines.py | 454 - .../tests/c-004_tests/c-004_test0.c | 13 - .../tests/c-004_tests/c-004_test1.c | 13 - .../tests/c-004_tests/c-004_test2.c | 13 - .../tests/c-004_tests/c-004_test3.c | 16 - .../tests/c-004_tests/c-004_test4.c | 16 - .../tests/c-004_tests/c-004_test5.c | 13 - .../tests/c-004_tests/c-004_test6.c | 1 - .../c-004_test_configured_rules.json | 18 - .../tests/c-004_tests/c-004_test_results.json | 48 - .../tests/c-005_tests/c-005_test0.h | 8 - .../tests/c-005_tests/c-005_test1.h | 8 - .../tests/c-005_tests/c-005_test2.h | 10 - .../tests/c-005_tests/c-005_test3.h | 8 - .../tests/c-005_tests/c-005_test4.h | 5 - .../tests/c-005_tests/c-005_test5.h | 8 - .../tests/c-005_tests/c-005_test6.h | 1 - .../tests/c-005_tests/c-005_test7.h | 5 - .../tests/c-005_tests/c-005_test_results.json | 65 - .../tests/c-006_tests/c-006_test0.c | 21 - .../tests/c-006_tests/c-006_test1.c | 23 - .../tests/c-006_tests/c-006_test2.c | 23 - .../tests/c-006_tests/c-006_test3.c | 5 - .../tests/c-006_tests/c-006_test4.c | 23 - .../tests/c-006_tests/c-006_test5.c | 22 - .../tests/c-006_tests/c-006_test_results.json | 154 - .../tests/c-029_tests/c-029_test0.c | 1 - .../tests/c-029_tests/c-029_test1.c | 1 - .../tests/c-029_tests/c-029_test_results.json | 6 - .../tests/general_tests/general-003_test0.txt | 1 - .../tests/general_tests/general-003_test1.txt | 1 - .../tests/general_tests/general-003_test2.txt | Bin 82 -> 0 bytes .../tests/general_tests/general-003_test3.txt | 1 - .../tests/general_tests/general-003_test4.txt | 1 - .../tests/general_tests/general-004_test0.txt | 2 - .../tests/general_tests/general-004_test1.txt | 3 - .../tests/general_tests/general-004_test2.txt | 1 - .../tests/general_tests/general-004_test3.txt | 3 - .../tests/general_tests/general-004_test4.txt | 7 - .../tests/general_tests/general-005_test0.txt | 2 - .../tests/general_tests/general-005_test1.txt | 5 - .../tests/general_tests/general-005_test2.txt | 6 - .../tests/general_tests/general-006_test0.txt | 1 - .../tests/general_tests/general-006_test1.txt | 4 - .../tests/general_tests/general-006_test2.txt | 3 - .../tests/general_tests/general-006_test3.txt | 3 - .../tests/general_tests/general-006_test4.txt | 6 - .../general_tests/general_test_results.json | 118 - .../tests/header_tests/header_test0.py | 42 - .../tests/header_tests/header_test1.py | 42 - .../tests/header_tests/header_test2.py | 16 - .../tests/header_tests/header_test3.py | 42 - .../header_tests/header_test_results.json | 25 - .../tests/rst-003_tests/rst-003_test0.rst | 2 - .../tests/rst-003_tests/rst-003_test1.rst | 4 - .../tests/rst-003_tests/rst-003_test2.rst | 4 - .../tests/rst-003_tests/rst-003_test3.rst | 4 - .../tests/rst-003_tests/rst-003_test4.rst | 4 - .../tests/rst-003_tests/rst-003_test5.rst | 5 - .../tests/rst-003_tests/rst-003_test6.rst | 4 - .../tests/rst-003_tests/rst-003_test7.rst | 5 - .../rst-003_tests/rst-003_test_results.json | 10 - .../rst-007_tests/rst-007_test_results.json | 79 - .../tests/rst-007_tests/rst_007_test0.rst | 10 - .../tests/rst-007_tests/rst_007_test1.rst | 11 - .../tests/rst-007_tests/rst_007_test10.rst | 12 - .../tests/rst-007_tests/rst_007_test2.rst | 10 - .../tests/rst-007_tests/rst_007_test3.rst | 8 - .../tests/rst-007_tests/rst_007_test4.rst | 11 - .../tests/rst-007_tests/rst_007_test5.rst | 10 - .../tests/rst-007_tests/rst_007_test6.rst | 11 - .../tests/rst-007_tests/rst_007_test7.rst | 12 - .../tests/rst-007_tests/rst_007_test8.rst | 10 - .../tests/rst-007_tests/rst_007_test9.rst | 12 - tests/scripts/waf-tools/f_hcg/__init__.py | 43 - tests/scripts/waf-tools/f_hcg/test_f_hcg.py | 130 - .../waf-tools/f_hcg/tests/test_hcg0.dil | 11975 ---------------- .../waf-tools/f_hcg/tests/test_hcg0.hcg | 1122 -- .../waf-tools/f_hcg/tests/test_hcg0.json | 177 - .../waf-tools/f_hcg/tests/test_hcg1.dil | 11969 --------------- .../waf-tools/f_hcg/tests/test_hcg1.hcg | 915 -- .../waf-tools/f_hcg/tests/test_hcg1.json | 139 - .../waf-tools/f_hcg/tests/test_hcg2.dil | 11969 --------------- .../waf-tools/f_hcg/tests/test_hcg2.hcg | 945 -- .../waf-tools/f_hcg/tests/test_hcg2.json | 154 - .../waf-tools/f_hcg/tests/test_hcg3.dil | 11975 ---------------- .../waf-tools/f_hcg/tests/test_hcg3.hcg | 1069 -- .../waf-tools/f_hcg/tests/test_hcg3.json | 170 - .../waf-tools/f_hcg/tests/test_hcg_raises.dil | 11975 ---------------- .../waf-tools/f_hcg/tests/test_hcg_raises.hcg | 1069 -- .../f_hcg/tests/test_hcg_raises.json | 5 - .../waf-tools/f_ti_arm_cgt/__init__.py | 43 - .../f_ti_arm_cgt/test_f_ti_arm_cgt.py | 128 - .../tests/f_ti_arm_cgt_result.json | 36 - .../tests/f_ti_arm_cgt_test0.json | 6 - .../f_ti_arm_cgt/tests/f_ti_arm_cgt_test0.txt | 16 - .../tests/f_ti_arm_cgt_test1.json | 6 - .../f_ti_arm_cgt/tests/f_ti_arm_cgt_test1.txt | 16 - .../tests/f_ti_arm_cgt_test2.json | 6 - .../f_ti_arm_cgt/tests/f_ti_arm_cgt_test2.txt | 16 - .../tests/f_ti_arm_cgt_test3.json | 1 - .../f_ti_arm_cgt/tests/f_ti_arm_cgt_test3.txt | 0 tests/unit/README.md | 325 +- .../algorithm/config/test_algorithm_cfg.c | 12 +- .../moving_average/test_moving_average.c | 12 +- .../soc/counting/test_soc_counting.c | 76 +- .../soc/debug/test_soc_debug.c | 31 +- .../state_estimation/soc/none/test_soc_none.c | 84 +- .../soe/counting/test_soe_counting.c | 12 +- .../soe/debug/test_soe_debug.c | 26 +- .../state_estimation/soe/none/test_soe_none.c | 63 +- .../sof/trapezoid/test_sof_trapezoid.c | 14 +- .../sof/trapezoid/test_sof_trapezoid_cfg.c | 12 +- .../soh/debug/test_soh_debug.c | 35 +- .../state_estimation/soh/none/test_soh_none.c | 55 +- .../state_estimation/test_state_estimation.c | 12 +- .../application/algorithm/test_algorithm.c | 12 +- .../bal/history/test_bal_strategy_history.c | 16 +- .../bal/none/test_bal_strategy_none.c | 12 +- tests/unit/app/application/bal/test_bal.c | 28 +- .../bal/voltage/test_bal_strategy_voltage.c | 16 +- tests/unit/app/application/bms/test_bms.c | 12 +- .../config/battery_system_cfg_unit_test.h | 398 + .../app/application/config/test_bal_cfg.c | 12 +- .../config/test_battery_cell_cfg.c | 12 +- .../config/test_battery_system_cfg.c | 12 +- .../app/application/config/test_soa_cfg.c | 30 +- .../plausibility/test_plausibility.c | 32 +- .../application/redundancy/test_redundancy.c | 12 +- tests/unit/app/application/soa/test_soa.c | 102 +- tests/unit/app/driver/adc/test_adc.c | 58 +- .../adi_ades1830_helpers_test-data-rdb.c | 12 +- .../adi_ades1830_helpers_test-data-rdb.h | 14 +- .../adi_ades1830_helpers_test-data-wdb.c | 14 +- .../adi_ades1830_helpers_test-data-wdb.h | 14 +- .../adi/ades1830/api/test_adi_ades1830_afe.c | 12 +- .../ades1830/api/test_adi_ades1830_afe_dma.c | 12 +- .../ades1830/config/test_adi_ades1830_cfg.c | 14 +- .../adi/ades1830/pec/test_adi_ades1830_pec.c | 12 +- .../afe/adi/ades1830/test_adi_ades1830.c | 18 +- .../ades1830/test_adi_ades1830_balancing.c | 23 +- .../adi/ades1830/test_adi_ades1830_buffers.c | 12 +- .../adi/ades1830/test_adi_ades1830_commands.c | 12 +- .../test_adi_ades1830_commands_voltages.c | 12 +- .../ades1830/test_adi_ades1830_diagnostic_w.c | 14 +- .../test_adi_ades1830_gpio_voltages.c | 13 +- .../adi/ades1830/test_adi_ades1830_helpers.c | 12 +- .../test_adi_ades1830_initialization.c | 12 +- .../ades1830/test_adi_ades1830_temperatures.c | 150 +- .../test_adi_ades1830_temperatures_2.c | 225 + .../adi/ades1830/test_adi_ades1830_voltages.c | 357 +- .../ades1830/test_adi_ades1830_voltages.c.txt | 630 + .../ades183x/api/test_adi_ades183x_afe.c | 12 +- .../ades183x/api/test_adi_ades183x_afe_dma.c | 12 +- .../ades183x/config/test_adi_ades183x_cfg.c | 12 +- .../ades183x/pec/test_adi_ades183x_pec.c | 12 +- .../adi/common/ades183x/test_adi_ades183x.c | 12 +- .../ades183x/test_adi_ades183x_buffers.c | 12 +- .../ades183x/test_adi_ades183x_commands.c | 12 +- .../test_adi_ades183x_commands_voltages.c | 12 +- .../ades183x/test_adi_ades183x_diagnostic_w.c | 12 +- .../ades183x/test_adi_ades183x_helpers.c | 12 +- .../test_adi_ades183x_initialization.c | 12 +- .../ades183x/test_adi_ades183x_temperatures.c | 12 +- .../ades183x/test_adi_ades183x_voltages.c | 12 +- .../driver/afe/api/test_afe_plausibility.c | 12 +- .../afe/debug/can/api/test_debug_can_afe.c | 123 + .../debug/can/api/test_debug_can_afe_dma.c | 82 + .../app/driver/afe/debug/can/test_debug_can.c | 323 + .../default/api/test_debug_default_afe.c | 12 +- .../default/api/test_debug_default_afe_dma.c | 12 +- .../afe/debug/default/test_debug_default.c | 12 +- .../afe/ltc/6806/config/test_ltc_6806_cfg.c | 12 +- .../app/driver/afe/ltc/6806/test_ltc_6806.c | 14 +- .../ltc/6806/test_ltc_6806_pec_in_arrays.c | 12 +- .../ltc/6813-1/config/test_ltc_6813-1_cfg.c | 28 +- .../driver/afe/ltc/6813-1/test_ltc_6813-1.c | 12 +- .../6813-1/test_ltc_6813-1_pec_in_arrays.c | 18 +- .../app/driver/afe/ltc/api/test_ltc_afe.c | 14 +- .../driver/afe/ltc/common/test_ltc_afe_dma.c | 22 +- .../app/driver/afe/ltc/common/test_ltc_pec.c | 12 +- .../app/driver/afe/maxim/api/test_mxm_afe.c | 12 +- .../afe/maxim/common/config/test_mxm_cfg.c | 12 +- .../driver/afe/maxim/common/test_mxm_17841b.c | 38 +- .../driver/afe/maxim/common/test_mxm_1785x.c | 32 +- .../afe/maxim/common/test_mxm_1785x_tools.c | 12 +- .../afe/maxim/common/test_mxm_afe_dma.c | 12 +- .../common/test_mxm_battery_management.c | 12 +- ...xm_bitextract.c => test_mxm_bit_extract.c} | 26 +- .../driver/afe/maxim/common/test_mxm_crc8.c | 12 +- .../afe/maxim/common/test_mxm_register_map.c | 12 +- .../afe/maxim/common/test_mxm_registry.c | 18 +- .../afe/maxim/max17852/test_mxm_17852.c | 16 +- .../app/driver/afe/nxp/api/test_nxp_afe.c | 12 +- .../nxp/mc33775a/api/test_nxp_mc33775a_afe.c | 12 +- .../mc33775a/config/test_nxp_mc33775a_cfg.c | 12 +- .../afe/nxp/mc33775a/test_nxp_afe_dma.c | 12 +- .../afe/nxp/mc33775a/test_nxp_mc33775a-ll.c | 12 +- .../afe/nxp/mc33775a/test_nxp_mc33775a.c | 305 +- .../unit/app/driver/afe/ti/api/test_ti_afe.c | 12 +- .../ti/common/api/test_ti_bq79xxx_afe_dma.c | 12 +- .../afe/ti/dummy/api/test_ti_dummy_afe.c | 12 +- .../app/driver/afe/ti/dummy/test_ti_dummy.c | 12 +- .../cbs/rx/test_can_cbs_rx_aerosol-sensor.c | 44 +- .../rx/test_can_cbs_rx_bms-state-request.c | 298 +- .../rx/test_can_cbs_rx_cell-temperatures.c | 278 + .../cbs/rx/test_can_cbs_rx_cell-voltages.c | 278 + .../cbs/rx/test_can_cbs_rx_current-sensor.c | 12 +- .../driver/can/cbs/rx/test_can_cbs_rx_debug.c | 61 +- .../can/cbs/rx/test_can_cbs_rx_imd-info.c | 228 +- .../can/cbs/rx/test_can_cbs_rx_imd-response.c | 323 +- .../unit/app/driver/can/cbs/test_can_helper.c | 18 +- .../test_can_cbs_tx_crash-dump.c | 35 +- ...est_can_cbs_tx_debug-build-configuration.c | 3214 +++++ .../tx-async/test_can_cbs_tx_debug-response.c | 203 + ..._tx_debug-unsupported-multiplexer-values.c | 22 +- .../tx-async/test_can_cbs_tx_imd-request.c | 324 + .../test_can_cbs_tx_bms-state-details.c | 107 +- .../cbs/tx-cyclic/test_can_cbs_tx_bms-state.c | 484 + .../test_can_cbs_tx_cell-temperatures.c | 35 +- .../test_can_cbs_tx_cell-voltages.c | 35 +- .../tx-cyclic/test_can_cbs_tx_pack-limits.c | 433 + ...t_can_cbs_tx_pack-minimum-maximum-values.c | 520 + .../test_can_cbs_tx_pack-state-estimation.c | 780 + .../test_can_cbs_tx_pack-values-p0.c | 356 + .../test_can_cbs_tx_pack-values-p1.c | 254 + ...can_cbs_tx_string-minimum-maximum-values.c | 383 + .../test_can_cbs_tx_string-state-estimation.c | 563 + .../tx-cyclic/test_can_cbs_tx_string-state.c | 291 + .../test_can_cbs_tx_string-values-p0.c | 410 + .../test_can_cbs_tx_string-values-p1.c | 69 +- .../can/cbs/tx/test_can_cbs_tx_bms-state.c | 139 - .../cbs/tx/test_can_cbs_tx_debug-response.c | 126 - .../can/cbs/tx/test_can_cbs_tx_pack-limits.c | 172 - ...t_can_cbs_tx_pack-minimum-maximum-values.c | 210 - .../test_can_cbs_tx_pack-state-estimation.c | 233 - .../cbs/tx/test_can_cbs_tx_pack-values-p0.c | 164 - .../cbs/tx/test_can_cbs_tx_pack-values-p1.c | 132 - .../test_can_cbs_tx_string-state-estimation.c | 137 - .../can/cbs/tx/test_can_cbs_tx_string-state.c | 137 - .../cbs/tx/test_can_cbs_tx_string-values-p0.c | 132 - tests/unit/app/driver/can/test_can.c | 12 +- tests/unit/app/driver/can/test_can_1.c | 12 +- tests/unit/app/driver/can/test_can_2.c | 12 +- .../unit/app/driver/checksum/test_checksum.c | 12 +- tests/unit/app/driver/config/test_can_cfg.c | 12 +- .../unit/app/driver/config/test_can_cfg_rx.c | 12 +- ..._can_cfg_tx.c => test_can_cfg_tx_cyclic.c} | 23 +- .../app/driver/config/test_contactor_cfg.c | 12 +- tests/unit/app/driver/config/test_dma_cfg.c | 12 +- tests/unit/app/driver/config/test_fram_cfg.c | 12 +- tests/unit/app/driver/config/test_pex_cfg.c | 12 +- tests/unit/app/driver/config/test_spi_cfg.c | 12 +- tests/unit/app/driver/config/test_sps_cfg.c | 12 +- .../app/driver/contactor/test_contactor.c | 12 +- tests/unit/app/driver/crc/test_crc.c | 14 +- tests/unit/app/driver/dma/test_dma.c | 12 +- tests/unit/app/driver/foxmath/test_foxmath.c | 29 +- tests/unit/app/driver/fram/test_fram.c | 75 +- .../unit/app/driver/htsensor/test_htsensor.c | 12 +- tests/unit/app/driver/i2c/test_i2c.c | 83 +- .../imd/bender/ir155/test_bender_ir155.c | 12 +- .../bender/ir155/test_bender_ir155_helper.c | 12 +- .../imd/bender/iso165c/test_bender_iso165c.c | 165 +- tests/unit/app/driver/imd/none/test_no-imd.c | 12 +- tests/unit/app/driver/imd/test_imd.c | 12 +- .../app/driver/interlock/test_interlock.c | 24 +- tests/unit/app/driver/io/test_io.c | 12 +- tests/unit/app/driver/led/test_led.c | 12 +- tests/unit/app/driver/mcu/test_mcu.c | 12 +- tests/unit/app/driver/meas/test_meas.c | 12 +- tests/unit/app/driver/pex/test_pex.c | 232 +- tests/unit/app/driver/pwm/test_pwm.c | 17 +- tests/unit/app/driver/rtc/test_rtc.c | 12 +- tests/unit/app/driver/sbc/test_nxpfs85xx.c | 12 +- tests/unit/app/driver/sbc/test_sbc.c | 12 +- tests/unit/app/driver/spi/test_spi.c | 147 +- tests/unit/app/driver/spi/test_spi_adi.c | 262 + tests/unit/app/driver/spi/test_spi_debug.c | 232 + tests/unit/app/driver/spi/test_spi_ltc.c | 262 + tests/unit/app/driver/spi/test_spi_mxm.c | 256 + tests/unit/app/driver/spi/test_spi_nxp.c | 281 + tests/unit/app/driver/spi/test_spi_ti.c | 232 + tests/unit/app/driver/sps/test_sps.c | 36 +- .../unit/app/driver/ts/api/test_tsi_limits.c | 12 +- .../test_epcos_b57251v5103j060_lookup-table.c | 12 +- .../test_epcos_b57251v5103j060_polynomial.c | 12 +- .../test_epcos_b57251v5103j060.c | 12 +- .../test_epcos_b57861s0103f045_lookup-table.c | 12 +- .../test_epcos_b57861s0103f045_polynomial.c | 12 +- .../test_epcos_b57861s0103f045.c | 12 +- .../test_fake_none_lookup-table.c | 12 +- .../polynomial/test_fake_none_polynomial.c | 12 +- .../app/driver/ts/fake/none/test_fake_none.c | 12 +- .../test_murata_ncxxxxh103_lookup-table.c | 12 +- .../test_murata_ncxxxxh103_polynomial.c | 12 +- .../ncxxxxh103/test_murata_ncxxxxh103.c | 12 +- .../test_semitec_103jt_lookup-table.c} | 56 +- .../semitec/103jt/test_semitec_103jt.c} | 53 +- tests/unit/app/driver/ts/test_beta.c | 12 +- .../test_vishay_ntcalug01a103g_lookup-table.c | 12 +- .../test_vishay_ntcalug01a103g_polynomial.c | 12 +- .../test_vishay_ntcalug01a103g.c | 12 +- ...est_vishay_ntcle317e4103sba_lookup-table.c | 12 +- .../test_vishay_ntcle317e4103sba.c | 12 +- ...t_vishay_ntcle413e2103f102l_lookup-table.c | 12 +- .../test_vishay_ntcle413e2103f102l.c | 12 +- .../app/engine/config/test_database_cfg.c | 12 +- tests/unit/app/engine/config/test_diag_cfg.c | 12 +- tests/unit/app/engine/config/test_sys_cfg.c | 14 +- .../unit/app/engine/config/test_sys_mon_cfg.c | 12 +- .../unit/app/engine/database/test_database.c | 533 +- .../engine/database/test_database_helper.c | 12 +- .../diag/cbs/test_diag_cbs_aerosol-sensor.c | 12 +- .../app/engine/diag/cbs/test_diag_cbs_afe.c | 12 +- .../app/engine/diag/cbs/test_diag_cbs_bms.c | 12 +- .../app/engine/diag/cbs/test_diag_cbs_can.c | 14 +- .../engine/diag/cbs/test_diag_cbs_contactor.c | 14 +- .../diag/cbs/test_diag_cbs_current-sensor.c | 122 +- .../engine/diag/cbs/test_diag_cbs_current.c | 12 +- .../diag/cbs/test_diag_cbs_deep-discharge.c | 12 +- .../app/engine/diag/cbs/test_diag_cbs_dummy.c | 12 +- .../app/engine/diag/cbs/test_diag_cbs_fram.c | 12 +- .../app/engine/diag/cbs/test_diag_cbs_i2c.c | 12 +- .../diag/cbs/test_diag_cbs_insulation.c | 12 +- .../engine/diag/cbs/test_diag_cbs_interlock.c | 12 +- .../diag/cbs/test_diag_cbs_plausibility.c | 12 +- .../cbs/test_diag_cbs_power-measurement.c | 64 +- .../app/engine/diag/cbs/test_diag_cbs_rtc.c | 12 +- .../app/engine/diag/cbs/test_diag_cbs_sbc.c | 12 +- .../engine/diag/cbs/test_diag_cbs_sys-mon.c | 12 +- .../diag/cbs/test_diag_cbs_temperature.c | 491 +- .../engine/diag/cbs/test_diag_cbs_voltage.c | 330 +- tests/unit/app/engine/diag/test_diag.c | 22 +- .../app/engine/hw_info/test_master_info.c | 12 +- tests/unit/app/engine/sys/test_reset.c | 12 +- tests/unit/app/engine/sys/test_sys.c | 16 +- tests/unit/app/engine/sys_mon/test_sys_mon.c | 278 +- tests/unit/app/main/test_fassert.c | 17 +- tests/unit/app/main/test_fstartup.c | 28 +- tests/unit/app/main/test_main.c | 186 +- tests/unit/app/task/config/test_ftask_cfg.c | 111 +- .../task/ftask/freertos/test_ftask_freertos.c | 12 +- tests/unit/app/task/ftask/test_ftask.c | 12 +- .../app/task/os/freertos/test_os_freertos.c | 14 +- tests/unit/app/task/os/test_os.c | 15 +- tests/unit/axivion/axivion_config.json | 25 +- tests/unit/axivion/call_irlink.py | 47 +- tests/unit/axivion/ci_config.json | 150 +- tests/unit/axivion/compiler_config.json | 1628 +-- tests/unit/axivion/link.bat | 44 - tests/unit/axivion/unit_test_settings.json | 62 + tests/unit/build.json | 10641 ++++++++++---- tests/unit/doxygen_tests.h | 56 +- .../waf-core => unit/gen_hcg}/.gitignore | 0 tests/unit/gen_hcg/wscript | 64 + .../opt/cells/config/test_lg_inr18650mj1.c | 12 +- tests/unit/run_ut_gcc_build.bat | 65 - tests/unit/support/test_algorithm_stubs.h | 12 +- tests/unit/support/test_assert_helper.h | 29 +- ...test_can_mpu_prototype_queue_create_stub.h | 12 +- tests/unit/support/test_ignore_list.h | 14 +- tests/unit/support/test_pec_helper.h | 15 +- tests/unit/wscript | 242 +- ...des1830_hbb_cc-cc-tr-none_none-no-imd.json | 52 +- ...des1830_vbb_cc-cc-tr-none_none-no-imd.json | 52 +- ...can_none_cc-cc-tr-none_bender-iso165c.json | 31 + ...efault_none_cc-cc-tr-none_none-no-imd.json | 52 +- ...none_debug-debug-tr-debug_none-no-imd.json | 52 +- ...lt_none_none-none-tr-none_none-no-imd.json | 52 +- ...-6804-1_hbb_cc-cc-tr-none_none-no-imd.json | 52 +- ...c-6806_none_cc-cc-tr-none_none-no-imd.json | 52 +- ...12-1_hbb_cc-cc-tr-none_bender-iso165c.json | 52 +- ...6813-1_hbb_cc-cc-tr-none_bender-ir155.json | 52 +- ...13-1_hbb_cc-cc-tr-none_bender-iso165c.json | 52 +- ...6813-1_vbb_cc-cc-tr-none_bender-ir155.json | 52 +- ...13-1_vbb_cc-cc-tr-none_bender-iso165c.json | 52 +- ...-6813-1_vbb_cc-cc-tr-none_none-no-imd.json | 52 +- ...ax17852_vbb_cc-cc-tr-none_none-no-imd.json | 52 +- ...c33775a_vbb_cc-cc-tr-none_none-no-imd.json | 52 +- ...i-dummy_vbb_cc-cc-tr-none_none-no-imd.json | 52 +- tests/variants/lib-build/lib-build.bat | 101 - .../variants/lib-build/lib-build.ps1 | 86 +- .../lib-build/lib-build_cc-options.yaml | 9 +- tests/variants/lib-build/lib-build_main.c | 63 +- tools/README.md | 30 +- tools/crc/README.md | 28 +- tools/crc/build-crc-snippets.bat | 74 - tools/crc/crc-10_0x48f.c | 12 +- tools/crc/crc-10_0x48f.md | 6 +- tools/crc/crc-15_0xc599.c | 12 +- tools/crc/crc-15_0xc599.md | 5 +- tools/crc/crc.bat | 58 - tools/crc/crc16-0x9eb2h.ipynb | 2 +- tools/crc/crc8-0xa6.ipynb | 2 +- tools/crc/crc_init.py | 7 +- .../env_test_arpeggio.py => tools/crc/wscript | 49 +- tools/dbc/README.md | 17 + tools/dbc/foxbms.dbc | 6323 +++++--- tools/dbc/foxbms.sym | 4708 ++++-- tools/dbc/plot_periods.py | 177 + tools/dbc/plot_periods_test.py | 125 + tools/dbc/symbol_creator.py | 86 +- tools/dbc/test_log.txt | 301 + tools/dbc/third-party/README.md | 3 +- tools/debugger/lauterbach/commands.md | 4 +- tools/debugger/lauterbach/config.t32.in | 4 +- tools/debugger/lauterbach/get_macro_values.py | 15 +- tools/debugger/lauterbach/init.cmm.in | 2 +- tools/deploy/deploy_internal_server.sh | 60 +- tools/gui/README.md | 20 - .../2020-05-12_09-25-36_logfile_can_bms.txt | 209 - tools/gui/data/pcan_view_v2.0.trc | 29 - tools/gui/entry-frame-select-sub-tool.png | Bin 20886 -> 0 bytes tools/gui/entry-frame.png | Bin 22549 -> 0 bytes tools/gui/fgui/__init__.py | 90 - tools/gui/fgui/entry/__init__.py | 44 - tools/gui/fgui/entry/entry_frame.py | 222 - tools/gui/fgui/foxbms_gui.py | 115 - tools/gui/fgui/log_parser/__init__.py | 42 - tools/gui/fgui/log_parser/log_parser.py | 597 - tools/gui/fgui/lvac/__init__.py | 42 - tools/gui/fgui/lvac/__main__.py | 45 - tools/gui/fgui/lvac/bms_state.py | 112 - tools/gui/fgui/lvac/cell_temperatures.py | 152 - tools/gui/fgui/lvac/cell_voltages.py | 153 - tools/gui/fgui/lvac/debug_response.py | 117 - tools/gui/fgui/lvac/default_messages.py | 122 - tools/gui/fgui/lvac/lvac_frame.py | 574 - tools/gui/fgui/lvac/msgs/msg_debug.py | 202 - tools/gui/fgui/misc/can/can_constants.py | 74 - tools/gui/fgui/misc/can/can_helpers.py | 171 - tools/gui/fgui/misc/info_dialog.py | 175 - tools/gui/fgui/misc/logo.py | 414 - tools/gui/fgui/misc/misc.py | 136 - tools/gui/fgui/misc/program_arguments.py | 177 - tools/gui/fgui/workers/can_node_worker.py | 182 - tools/gui/fgui/workers/gui_sync_worker.py | 77 - tools/ide/vscode/README.md | 29 +- tools/ide/vscode/c_cpp_properties.json.jinja2 | 117 - tools/ide/vscode/cspell.json | 937 ++ tools/ide/vscode/cspell.json.jinja2 | 870 -- .../embedded-tests/c_cpp_properties.json | 24 + .../embedded-tests/e-project-include-path.txt | 9 + tools/ide/vscode/embedded-tests/launch.json | 25 + tools/ide/vscode/embedded-tests/settings.json | 69 + tools/ide/vscode/embedded-tests/tasks.json | 25 + tools/ide/vscode/extensions.json.jinja2 | 13 - .../ide/vscode/generic/c_cpp_properties.json | 24 + .../vscode/generic/g-project-include-path.txt | 61 + tools/ide/vscode/generic/settings.json | 142 + tools/ide/vscode/generic/tasks.json | 275 + tools/ide/vscode/install-snippets.bat | 40 - tools/ide/vscode/launch.json.jinja2 | 25 - tools/ide/vscode/settings.json.jinja2 | 181 - tools/ide/vscode/snippets/c.json | 60 +- tools/ide/vscode/snippets/python.json | 38 +- tools/ide/vscode/src/c_cpp_properties.json | 24 + .../ide/vscode/src/s-project-include-path.txt | 61 + tools/ide/vscode/src/settings.json | 69 + tools/ide/vscode/src/tasks.json | 139 + tools/ide/vscode/tasks.json.jinja2 | 322 - tools/precharge/precharge_dimensioning.ipynb | 2 +- tools/utils/README.md | 15 +- tools/utils/bash/dir_shall_not_exist.sh | 48 - tools/utils/bash/find_base_conda.sh | 205 - tools/utils/bash/find_ccs.sh | 103 - tools/utils/bash/run-python-script.sh | 115 - tools/utils/bash/run-python.sh | 105 - tools/utils/bash/run-script.sh | 110 - tools/utils/cmd/add_pcan_to_path.bat | 41 - tools/utils/cmd/find_base_conda.bat | 119 - tools/utils/cmd/find_ccs.bat | 77 - tools/utils/cmd/find_git.bat | 73 - tools/utils/cmd/find_vs-code.bat | 86 - tools/utils/cmd/run-python-coverage.bat | 64 - tools/utils/cmd/run-python-script.bat | 73 - tools/utils/cmd/run-python.bat | 63 - tools/utils/cmd/run-script.bat | 62 - tools/utils/conda-init.bat | 59 - tools/utils/conda-update-env.bat | 61 - tools/utils/conda-update-env.sh | 121 - tools/utils/generate_license_list.py | 371 - tools/utils/generate_missing_test_files.py | 14 +- tools/utils/git-hooks/pre-commit | 3 - tools/utils/list_prefixes.py | 7 +- tools/utils/llvm-install.bat | 98 - tools/utils/mingw64-install.bat | 69 - tools/utils/miniconda3-install.bat | 58 - tools/utils/ruby-install.bat | 55 - tools/utils/run-uncrustify.bat | 61 - tools/utils/update_doxygen_header.py | 13 +- tools/utils/update_version.py | 58 +- tools/utils/verify_checksums.py | 116 - tools/utils/verify_doc_source_links.py | 127 - tools/vendor/ceedling/GIT_COMMIT_SHA | 1 + tools/vendor/ceedling/Gemfile | 10 +- tools/vendor/ceedling/Gemfile.lock | 36 +- tools/vendor/ceedling/README.md | 71 +- tools/vendor/ceedling/bin/actions_wrapper.rb | 42 + tools/vendor/ceedling/bin/app_cfg.rb | 119 + tools/vendor/ceedling/bin/ceedling | 483 +- tools/vendor/ceedling/bin/cli.rb | 445 + tools/vendor/ceedling/bin/cli_handler.rb | 401 + tools/vendor/ceedling/bin/cli_helper.rb | 454 + tools/vendor/ceedling/bin/configinator.rb | 111 + tools/vendor/ceedling/bin/mixinator.rb | 136 + tools/vendor/ceedling/bin/mixins.rb | 5 + tools/vendor/ceedling/bin/objects.yml | 80 + tools/vendor/ceedling/bin/path_validator.rb | 54 + tools/vendor/ceedling/bin/projectinator.rb | 236 + tools/vendor/ceedling/bin/versionator.rb | 69 + tools/vendor/ceedling/lib/ceedling.rb | 109 +- .../ceedling/lib/ceedling/application.rb | 26 + .../ceedling/lib/ceedling/backtrace.gdb | 5 + .../lib/ceedling/build_batchinator.rb | 16 +- .../lib/ceedling/build_invoker_utils.rb | 37 - .../ceedling/lib/ceedling/cacheinator.rb | 6 + .../lib/ceedling/cacheinator_helper.rb | 6 + .../lib/ceedling/config_matchinator.rb | 170 +- .../lib/ceedling/config_walkinator.rb | 35 + .../ceedling/lib/ceedling/configurator.rb | 638 +- .../lib/ceedling/configurator_builder.rb | 336 +- .../lib/ceedling/configurator_plugins.rb | 100 +- .../lib/ceedling/configurator_setup.rb | 267 +- .../lib/ceedling/configurator_validator.rb | 267 +- .../vendor/ceedling/lib/ceedling/constants.rb | 97 +- .../ceedling/lib/ceedling/debugger_utils.rb | 218 - .../vendor/ceedling/lib/ceedling/defaults.rb | 258 +- .../ceedling/lib/ceedling/defineinator.rb | 62 +- .../ceedling/lib/ceedling/dependinator.rb | 66 +- .../ceedling/lib/ceedling/erb_wrapper.rb | 7 + .../ceedling/lib/ceedling/exceptions.rb | 27 + .../ceedling/lib/ceedling/file_finder.rb | 214 +- .../lib/ceedling/file_finder_helper.rb | 88 +- .../ceedling/file_path_collection_utils.rb | 136 + .../ceedling/lib/ceedling/file_path_utils.rb | 105 +- .../lib/ceedling/file_system_utils.rb | 69 - .../lib/ceedling/file_system_wrapper.rb | 6 + .../ceedling/lib/ceedling/file_wrapper.rb | 17 +- .../ceedling/lib/ceedling/flaginator.rb | 21 +- .../vendor/ceedling/lib/ceedling/generator.rb | 217 +- .../ceedling/lib/ceedling/generator_helper.rb | 73 +- .../ceedling/lib/ceedling/generator_mocks.rb | 30 +- .../lib/ceedling/generator_test_results.rb | 237 +- .../generator_test_results_backtrace.rb | 215 + .../generator_test_results_sanity_checker.rb | 21 +- .../lib/ceedling/generator_test_runner.rb | 96 +- .../lib/ceedling/include_pathinator.rb | 41 +- .../vendor/ceedling/lib/ceedling/loginator.rb | 271 +- .../vendor/ceedling/lib/ceedling/makefile.rb | 6 + .../vendor/ceedling/lib/ceedling/objects.yml | 150 +- tools/vendor/ceedling/lib/ceedling/plugin.rb | 78 +- .../ceedling/lib/ceedling/plugin_builder.rb | 55 - .../ceedling/lib/ceedling/plugin_manager.rb | 62 +- .../lib/ceedling/plugin_manager_helper.rb | 10 +- .../lib/ceedling/plugin_reportinator.rb | 118 +- .../ceedling/plugin_reportinator_helper.rb | 87 +- .../ceedling/lib/ceedling/preprocessinator.rb | 213 +- .../ceedling/preprocessinator_extractor.rb | 8 +- .../ceedling/preprocessinator_file_handler.rb | 65 +- .../preprocessinator_includes_handler.rb | 72 +- .../lib/ceedling/project_config_manager.rb | 45 - .../lib/ceedling/project_file_loader.rb | 99 - .../ceedling/lib/ceedling/rake_utils.rb | 6 + .../ceedling/lib/ceedling/rake_wrapper.rb | 7 + .../vendor/ceedling/lib/ceedling/rakefile.rb | 187 +- .../ceedling/lib/ceedling/release_invoker.rb | 35 +- .../lib/ceedling/release_invoker_helper.rb | 19 +- .../ceedling/lib/ceedling/reportinator.rb | 83 +- .../ceedling/lib/ceedling/rules_release.rake | 83 +- .../ceedling/lib/ceedling/rules_tests.rake | 33 +- .../ceedling/lib/ceedling/setupinator.rb | 232 +- .../ceedling/lib/ceedling/stream_wrapper.rb | 32 +- .../ceedling/lib/ceedling/streaminator.rb | 37 - .../lib/ceedling/streaminator_helper.rb | 15 - .../ceedling/lib/ceedling/system_utils.rb | 10 +- .../ceedling/lib/ceedling/system_wrapper.rb | 102 +- .../ceedling/lib/ceedling/target_loader.rb | 38 - .../ceedling/lib/ceedling/task_invoker.rb | 8 +- .../ceedling/lib/ceedling/tasks_base.rake | 100 +- .../lib/ceedling/tasks_filesystem.rake | 37 +- .../ceedling/lib/ceedling/tasks_release.rake | 37 +- .../ceedling/lib/ceedling/tasks_tests.rake | 47 +- .../lib/ceedling/test_context_extractor.rb | 200 +- .../ceedling/lib/ceedling/test_invoker.rb | 263 +- .../lib/ceedling/test_invoker_helper.rb | 232 +- .../lib/ceedling/test_runner_manager.rb | 47 + .../ceedling/lib/ceedling/tool_executor.rb | 87 +- .../lib/ceedling/tool_executor_helper.rb | 101 +- .../ceedling/lib/ceedling/tool_validator.rb | 148 + .../ceedling/lib/ceedling/unity_utils.rb | 109 - .../ceedling/lib/ceedling/verbosinator.rb | 13 +- tools/vendor/ceedling/lib/ceedling/version.rb | 56 - .../ceedling/lib/ceedling/yaml_wrapper.rb | 7 + tools/vendor/ceedling/lib/version.rb | 24 + tools/vendor/ceedling/license.txt | 22 + tools/vendor/ceedling/plugins/beep/README.md | 131 +- .../ceedling/plugins/beep/config/defaults.yml | 7 + .../plugins/beep/config/defaults_beep.rb | 67 + .../vendor/ceedling/plugins/beep/lib/beep.rb | 73 +- .../ceedling/plugins/beep/lib/beep_tools.rb | 23 - .../ceedling/plugins/bullseye/README.md | 13 +- .../ceedling/plugins/bullseye/bullseye.rake | 40 +- .../plugins/bullseye/config/defaults.yml | 101 +- .../ceedling/plugins/bullseye/lib/bullseye.rb | 39 +- .../ceedling/plugins/colour_report/README.md | 20 - .../colour_report/lib/colour_report.rb | 16 - .../ceedling/plugins/command_hooks/README.md | 272 +- .../command_hooks/lib/command_hooks.rb | 257 +- .../plugins/compile_commands_json/README.md | 29 - .../lib/compile_commands_json.rb | 35 - .../compile_commands_json_db/README.md | 40 + .../lib/compile_commands_json_db.rb | 51 + .../ceedling/plugins/dependencies/README.md | 159 +- .../ceedling/plugins/dependencies/Rakefile | 188 + .../plugins/dependencies/config/defaults.yml | 75 +- .../plugins/dependencies/dependencies.rake | 46 +- .../dependencies/example/boss/project.yml | 234 + .../dependencies/example/boss/src/boss.c | 80 + .../dependencies/example/boss/src/boss.h | 16 + .../dependencies/example/boss/src/main.c | 45 + .../example/boss/test/test_boss.c | 118 + .../example/supervisor/project.yml | 168 + .../example/supervisor/src/supervisor.c | 45 + .../example/supervisor/src/supervisor.h | 14 + .../example/supervisor/test/test_supervisor.c | 58 + .../dependencies/example/version.tar.gzip | Bin 0 -> 577 bytes .../plugins/dependencies/lib/dependencies.rb | 446 +- .../examples/fff_example/project.yml | 71 - .../examples/fff_example/rakefile.rb | 7 - .../examples/fff_example/src/bar.c | 1 - .../examples/fff_example/src/custom_types.h | 6 - .../examples/fff_example/src/display.c | 7 - .../examples/fff_example/src/foo.c | 16 - .../examples/fff_example/src/foo.h | 8 - .../examples/fff_example/src/subfolder/zzz.c | 1 - .../examples/fff_example/src/subfolder/zzz.h | 6 - .../fff/examples/driver_testing/driver.h | 11 - .../vendor/fff/examples/embedded_ui/DISPLAY.h | 17 - .../vendor/fff/examples/embedded_ui/SYSTEM.h | 21 - .../vendor/fff/examples/embedded_ui/UI.h | 12 - .../vendor/fff/test/fff_test_global_cpp.cpp | 23 - .../README.md | 26 +- .../{fake_function_framework => fff}/Rakefile | 11 +- .../ceedling/plugins/fff/config/fff.yml | 13 + .../fff/examples/fff_example/project.yml | 145 + .../fff/examples/fff_example/src/bar.c | 8 + .../examples/fff_example/src/bar.h | 7 + .../examples/fff_example/src/custom_types.h | 13 + .../fff/examples/fff_example/src/display.c | 14 + .../examples/fff_example/src/display.h | 7 + .../fff_example/src/event_processor.c | 7 + .../fff_example/src/event_processor.h | 7 + .../fff/examples/fff_example/src/foo.c | 23 + .../fff/examples/fff_example/src/foo.h | 15 + .../examples/fff_example/src/subfolder/zzz.c | 8 + .../examples/fff_example/src/subfolder/zzz.h | 13 + .../fff_example/test/test_event_processor.c | 43 +- .../examples/fff_example/test/test_foo.c | 7 + .../lib/fff.rb} | 41 +- .../lib/fff_mock_generator.rb | 7 + .../spec/fff_mock_header_generator_spec.rb | 7 + .../spec/fff_mock_source_generator_spec.rb | 7 + .../spec/header_generator.rb | 7 + .../spec/spec_helper.rb | 7 + .../src/fff_unity_helper.h | 7 + .../vendor/fff/LICENSE | 0 .../vendor/fff/Makefile | 0 .../vendor/fff/README.md | 0 .../vendor/fff/buildandtest | 0 .../vendor/fff/examples/Makefile | 0 .../fff/examples/driver_testing/Makefile | 0 .../fff/examples/driver_testing/driver.c | 8 + .../fff/examples/driver_testing/driver.h | 21 + .../examples/driver_testing/driver.test.cpp | 8 + .../driver_testing/driver.test.fff.cpp | 8 + .../driver_testing/hardware_abstraction.h | 10 + .../fff/examples/driver_testing/registers.h | 10 + .../vendor/fff/examples/embedded_ui/DISPLAY.h | 27 + .../vendor/fff/examples/embedded_ui/Kata.txt | 0 .../vendor/fff/examples/embedded_ui/Makefile | 0 .../vendor/fff/examples/embedded_ui/SYSTEM.h | 31 + .../vendor/fff/examples/embedded_ui/UI.c | 8 + .../fff/vendor/fff/examples/embedded_ui/UI.h | 22 + .../fff/examples/embedded_ui/UI_test_ansic.c | 8 + .../fff/examples/embedded_ui/UI_test_cpp.cpp | 8 + .../embedded_ui/test_suite_template.c | 8 + .../vendor/fff/fakegen.rb | 8 + .../vendor/fff/fff.h | 10 + .../vendor/fff/gtest/Makefile | 0 .../vendor/fff/gtest/gtest-all.cc | 0 .../vendor/fff/gtest/gtest-main.cc | 0 .../vendor/fff/gtest/gtest.h | 10 + .../vendor/fff/test/Makefile | 0 .../vendor/fff/test/c_test_framework.h | 10 + .../vendor/fff/test/fff_test_c.c | 8 + .../vendor/fff/test/fff_test_cpp.cpp | 8 + .../vendor/fff/test/fff_test_global_c.c | 8 + .../vendor/fff/test/fff_test_global_cpp.cpp | 31 + .../vendor/fff/test/global_fakes.c | 8 + .../vendor/fff/test/global_fakes.h | 10 + .../vendor/fff/test/test_cases.include | 0 tools/vendor/ceedling/plugins/gcov/README.md | 794 +- .../ceedling/plugins/gcov/assets/template.erb | 15 - .../ceedling/plugins/gcov/config/defaults.yml | 22 + .../plugins/gcov/config/defaults_gcov.rb | 68 +- tools/vendor/ceedling/plugins/gcov/gcov.rake | 54 +- .../vendor/ceedling/plugins/gcov/lib/gcov.rb | 288 +- .../plugins/gcov/lib/gcov_constants.rb | 30 +- .../plugins/gcov/lib/gcovr_reportinator.rb | 315 +- .../gcov/lib/reportgenerator_reportinator.rb | 150 +- .../plugins/gcov/lib/reportinator_helper.rb | 14 +- .../plugins/html_tests_report/README.md | 38 - .../plugins/json_tests_report/README.md | 36 - .../lib/json_tests_report.rb | 83 - .../plugins/junit_tests_report/README.md | 36 - .../lib/junit_tests_report.rb | 134 - .../plugins/module_generator/README.md | 111 +- .../plugins/module_generator/Rakefile | 205 + .../plugins/module_generator/assets/stubby1.h | 13 + .../plugins/module_generator/assets/stubby2.h | 15 + .../config/module_generator.yml | 14 +- .../module_generator/example/project.yml | 175 + .../module_generator/lib/module_generator.rb | 72 +- .../module_generator/module_generator.rake | 7 + .../plugins/raw_output_report/README.md | 19 - .../lib/raw_output_report.rb | 41 - .../report_build_warnings_log/README.md | 40 + .../config/defaults.yml | 12 + .../lib/report_build_warnings_log.rb | 143 + .../report_tests_gtestlike_stdout/README.md | 96 + .../assets/template.erb | 13 +- .../config/report_tests_gtestlike_stdout.yml | 11 + .../lib/report_tests_gtestlike_stdout.rb | 69 + .../plugins/report_tests_ide_stdout/README.md | 62 + .../config/report_tests_ide_stdout.yml | 11 + .../lib/report_tests_ide_stdout.rb | 72 + .../report_tests_log_factory/README.md | 446 + .../config/defaults.yml | 11 + .../lib/cppunit_tests_reporter.rb | 100 + .../lib/html_tests_reporter.rb} | 89 +- .../lib/json_tests_reporter.rb | 72 + .../lib/junit_tests_reporter.rb | 197 + .../lib/report_tests_log_factory.rb | 135 + .../lib/tests_reporter.rb | 70 + .../sample_html_report.png | Bin 0 -> 46135 bytes .../report_tests_pretty_stdout/README.md | 54 + .../assets/template.erb | 22 +- .../config/report_tests_pretty_stdout.yml | 11 + .../lib/report_tests_pretty_stdout.rb | 73 + .../report_tests_raw_output_log/README.md | 50 + .../lib/report_tests_raw_output_log.rb | 129 + .../report_tests_teamcity_stdout/README.md | 94 + .../config/defaults.yml | 12 + .../config/report_tests_teamcity_stdout.yml | 11 + .../lib/report_tests_teamcity_stdout.rb | 163 + .../stdout_gtestlike_tests_report/README.md | 19 - .../assets/template.erb copy | 59 - .../config/stdout_gtestlike_tests_report.yml | 4 - .../lib/stdout_gtestlike_tests_report.rb | 43 - .../plugins/stdout_ide_tests_report/README.md | 18 - .../config/stdout_ide_tests_report.yml | 4 - .../lib/stdout_ide_tests_report.rb | 44 - .../stdout_pretty_tests_report/README.md | 20 - .../config/stdout_pretty_tests_report.yml | 4 - .../lib/stdout_pretty_tests_report.rb | 47 - .../ceedling/plugins/subprojects/README.md | 63 - .../plugins/subprojects/config/defaults.yml | 33 - .../plugins/subprojects/lib/subprojects.rb | 92 - .../plugins/subprojects/subprojects.rake | 78 - .../plugins/teamcity_tests_report/README.md | 18 - .../config/teamcity_tests_report.yml | 4 - .../lib/teamcity_tests_report.rb | 57 - .../plugins/warnings_report/README.md | 19 - .../warnings_report/lib/warnings_report.rb | 69 - .../plugins/xml_tests_report/README.md | 39 - .../xml_tests_report/lib/xml_tests_report.rb | 112 - .../vendor/c_exception/lib/CException.c | 13 + .../vendor/c_exception/lib/CException.h | 9 +- .../ceedling/vendor/c_exception/license.txt | 22 + .../vendor/ceedling/vendor/cmock/LICENSE.txt | 19 + .../cmock_generator_plugin_return_thru_ptr.rb | 28 +- .../vendor/cmock/lib/cmock_header_parser.rb | 2 +- .../cmock/lib/cmock_unityhelper_parser.rb | 3 + tools/vendor/ceedling/vendor/diy/LICENSE.txt | 7 + tools/vendor/ceedling/vendor/diy/lib/diy.rb | 8 + .../ceedling/vendor/diy/lib/diy/factory.rb | 8 + .../vendor/ceedling/vendor/unity/LICENSE.txt | 21 + .../ceedling/vendor/unity/auto/__init__.py | 7 + .../vendor/unity/auto/colour_prompt.rb | 11 +- .../vendor/unity/auto/colour_reporter.rb | 13 +- .../vendor/unity/auto/extract_version.py | 7 + .../vendor/unity/auto/generate_config.yml | 7 + .../vendor/unity/auto/generate_module.rb | 47 +- .../vendor/unity/auto/generate_test_runner.rb | 49 +- .../vendor/unity/auto/parse_output.rb | 44 +- .../ceedling/vendor/unity/auto/run_test.erb | 2 +- .../vendor/unity/auto/stylize_as_junit.py | 13 +- .../vendor/unity/auto/stylize_as_junit.rb | 9 +- .../vendor/unity/auto/test_file_filter.rb | 12 +- .../vendor/unity/auto/type_sanitizer.rb | 9 +- .../vendor/unity/auto/unity_test_summary.py | 12 +- .../vendor/unity/auto/unity_test_summary.rb | 21 +- .../ceedling/vendor/unity/auto/yaml_helper.rb | 18 +- .../vendor/ceedling/vendor/unity/src/unity.c | 76 +- .../vendor/ceedling/vendor/unity/src/unity.h | 15 +- .../vendor/unity/src/unity_internals.h | 48 +- tools/waf-pubkey.asc | 51 - tools/waf-tools/doxygen.py | 125 - tools/waf-tools/f_axivion.py | 11 +- .../waf-tools/f_bootstrap_library_project.py | 21 +- tools/waf-tools/f_check_db_vars.py | 5 +- tools/waf-tools/f_clang_format.py | 116 - tools/waf-tools/f_doxygen.py | 66 + tools/waf-tools/f_guidelines.py | 2071 --- tools/waf-tools/f_hcg.py | 13 +- tools/waf-tools/f_helpers.py | 8 +- tools/waf-tools/f_j_flash.py | 8 +- tools/waf-tools/f_lauterbach.py | 32 +- tools/waf-tools/f_miniconda_env.py | 252 - tools/waf-tools/f_node_helper.py | 4 +- tools/waf-tools/f_ozone.py | 3 +- tools/waf-tools/f_pylint.py | 107 - tools/waf-tools/f_sphinx_build.py | 142 +- tools/waf-tools/f_ti_arm_cgt.py | 198 +- tools/waf-tools/f_ti_arm_cgt_cc_options.py | 3 +- tools/waf-tools/f_ti_arm_helper.py | 11 +- tools/waf-tools/f_ti_arm_tools.py | 4 +- tools/waf-tools/f_ti_color_arm_cgt.py | 4 +- tools/waf-tools/f_unit_test.py | 11 +- tools/waf-tools/f_vscode.py | 724 +- tools/waf-tools/why.py | 77 - tools/waf-verify-sig.py | 56 - waf.bat | 122 - waf.sh | 149 - wscript | 687 +- 2027 files changed, 87105 insertions(+), 144742 deletions(-) create mode 100644 .pre-commit-config.yaml create mode 100644 INSTALL.md rename conf/tpl/yaml.yaml => cli/__init__.py (95%) mode change 100644 => 100755 rename tools/gui/fgui/entry/helper.py => cli/__main__.py (81%) mode change 100644 => 100755 create mode 100755 cli/cli.py create mode 100755 cli/cmd_axivion/__init__.py create mode 100755 cli/cmd_axivion/axivion_impl.py create mode 100755 cli/cmd_build/__init__.py rename tests/env/packages/env_test__openmp_mutex_linux.py => cli/cmd_build/build_impl.py (67%) mode change 100644 => 100755 create mode 100755 cli/cmd_ci/__init__.py create mode 100755 cli/cmd_ci/check_ci_config.py create mode 100755 cli/cmd_ci/check_coverage.py create mode 100755 cli/cmd_ci/create_readme.py create mode 100755 cli/cmd_cli_unittest/__init__.py create mode 100755 cli/cmd_cli_unittest/cli_unittest_impl.py create mode 100755 cli/cmd_embedded_ut/__init__.py rename tools/gui/fgui/entry/__main__.py => cli/cmd_embedded_ut/embedded_ut_constants.py (84%) mode change 100644 => 100755 create mode 100755 cli/cmd_embedded_ut/embedded_ut_impl.py create mode 100755 cli/cmd_ide/__init__.py rename tests/env/packages/env_test_pandoc.py => cli/cmd_ide/ide_impl.py (65%) mode change 100644 => 100755 create mode 100755 cli/cmd_install/__init__.py create mode 100755 cli/cmd_install/install_impl.py create mode 100755 cli/cmd_misc/__init__.py rename tools/gui/fgui/log_parser/__main__.py => cli/cmd_misc/crc_example.py (80%) mode change 100644 => 100755 create mode 100755 cli/cmd_misc/doc_example.py create mode 100755 cli/cmd_misc/run_uncrustify.py rename tests/env/packages/env_test_pathspec.py => cli/cmd_misc/verify_checksums.py (60%) mode change 100644 => 100755 create mode 100755 cli/cmd_pre_commit/__init__.py create mode 100755 cli/cmd_pre_commit/pre_commit_impl.py create mode 100755 cli/cmd_script/__init__.py rename tests/env/packages/env_test_python.py => cli/cmd_script/script_impl.py (67%) mode change 100644 => 100755 create mode 100755 cli/commands/__init__.py create mode 100755 cli/commands/c_axivion.py rename tests/env/packages/env_test__libgcc_mutex_linux.py => cli/commands/c_build.py (68%) mode change 100644 => 100755 rename tests/scripts/gui/test_foxbms_gui.py => cli/commands/c_ci.py (55%) mode change 100644 => 100755 rename tools/gui/fgui/misc/gui_helpers.py => cli/commands/c_cli_unittest.py (61%) mode change 100644 => 100755 rename tests/env/packages/env_test_cryptography_linux.py => cli/commands/c_embedded_ut.py (72%) mode change 100644 => 100755 rename tools/gui/fgui/workers/send_worker.py => cli/commands/c_ide.py (56%) mode change 100644 => 100755 rename tests/env/packages/env_test_alabaster.py => cli/commands/c_install.py (64%) mode change 100644 => 100755 create mode 100755 cli/commands/c_misc.py create mode 100755 cli/commands/c_pre_commit.py rename tests/env/packages/env_test_appdirs.py => cli/commands/c_program.py (57%) mode change 100644 => 100755 rename tools/gui/fgui/misc/can/__init__.py => cli/foxbms_version.py (94%) mode change 100644 => 100755 rename {tools/gui/fgui/misc => cli/helpers}/__init__.py (94%) mode change 100644 => 100755 create mode 100755 cli/helpers/ansi_colors.py rename tools/gui/fgui/__main__.py => cli/helpers/host_platform.py (86%) mode change 100644 => 100755 create mode 100755 cli/helpers/misc.py create mode 100755 cli/helpers/spr.py rename tests/env/packages/env_test_python-dateutil.py => cli/helpers/win32_vars.py (62%) mode change 100644 => 100755 rename {tools/gui/fgui/workers => cli/pre_commit_scripts}/__init__.py (94%) mode change 100644 => 100755 create mode 100755 cli/pre_commit_scripts/check_doxygen.py rename tests/env/packages/env_test_soupsieve.py => cli/pre_commit_scripts/check_encoding.py (67%) mode change 100644 => 100755 rename tests/env/packages/env_test_alsa-lib_linux.py => cli/pre_commit_scripts/check_file_names.py (57%) mode change 100644 => 100755 rename conf/spell/check_dicts.py => cli/pre_commit_scripts/check_include_guard.py (50%) mode change 100644 => 100755 create mode 100755 cli/pre_commit_scripts/check_license_info.py create mode 100755 cli/pre_commit_scripts/check_sections.py create mode 100644 conf/README.md delete mode 100644 conf/bms/schema/application.schema.json delete mode 100644 conf/bms/schema/rtos.schema.json delete mode 100644 conf/bms/schema/slave.schema.json delete mode 100644 conf/env/conda_env_linux-pkgs.yaml delete mode 100644 conf/env/conda_env_linux.yaml delete mode 100644 conf/env/conda_env_win32-pkgs.yaml delete mode 100644 conf/env/conda_env_win32.yaml delete mode 100644 conf/fmt/README.md delete mode 100644 conf/fmt/pyproject.toml delete mode 100644 conf/guidelines/rules.json delete mode 100644 conf/spa/.pylintrc delete mode 100644 conf/spa/README.md delete mode 100644 conf/spell/README.md delete mode 100644 conf/spell/conda_env_spelling_linux.yaml delete mode 100644 conf/spell/dicts/lan_c.txt delete mode 100644 conf/spell/dicts/lan_py.txt delete mode 100644 conf/spell/dicts/module_prefix.txt delete mode 100644 conf/spell/pyspell_cfg.yml rename conf/tpl/{batch.bat => batch_script.bat} (96%) rename tests/scripts/waf-tools/f_guidelines/__init__.py => conf/tpl/pwsh_script.ps1 (87%) mode change 100644 => 100755 mode change 100644 => 100755 conf/tpl/python_script.py rename conf/tpl/{shell.sh => shell_script.sh} (76%) mode change 100644 => 100755 delete mode 100644 conf/unit/ceedling.cmd delete mode 100644 conf/unit/ceedling.sh create mode 100644 docs/README.md mode change 100644 => 100755 docs/conf.py mode change 100644 => 100755 docs/developer-manual/style-guide/examples/python-006.py mode change 100644 => 100755 docs/developer-manual/style-guide/examples/python-007.py mode change 100644 => 100755 docs/developer-manual/style-guide/examples/wscript delete mode 100644 docs/developer-manual/style-guide/guidelines_overview_sh.csv create mode 100644 docs/developer-manual/style-guide/guidelines_overview_shell_scripts.csv delete mode 100644 docs/developer-manual/style-guide/guidelines_overview_yaml.csv rename docs/developer-manual/style-guide/{guidelines_batch_shell.rst => guidelines_shell_scripts.rst} (58%) delete mode 100644 docs/developer-manual/style-guide/guidelines_yaml.rst mode change 100644 => 100755 docs/developer-manual/style-guide/state-machine-example/wscript create mode 100644 docs/general/commit-msgs/release-v1.7.0.txt delete mode 100644 docs/general/license-tables/license-info_llvm.csv delete mode 100644 docs/general/license-tables/license-info_miniconda.csv delete mode 100644 docs/general/license-tables/license-info_packages-conda-env-linux.csv delete mode 100644 docs/general/license-tables/license-info_packages-conda-env-win32.csv create mode 100644 docs/general/license-tables/license-info_python.csv create mode 100644 docs/general/license-tables/license-info_python_packages.csv delete mode 100644 docs/general/license-tables/license-info_vs-code_extensions.csv delete mode 100644 docs/general/license-tables/license-info_waf-unit-tests.csv delete mode 100644 docs/general/license-tables/license-packages-conda-env-spelling-build-strings.txt delete mode 100644 docs/general/license-tables/license-packages-conda-env-spelling.txt create mode 100644 docs/getting-started/directories/_root.csv create mode 100644 docs/getting-started/directories/conf.csv create mode 100644 docs/getting-started/directories/src.csv create mode 100644 docs/getting-started/directories/tests.csv create mode 100644 docs/getting-started/directories/tools.csv create mode 100644 docs/getting-started/fox_py.rst delete mode 100644 docs/getting-started/llvm-installation/llvm-installation.rst delete mode 100644 docs/getting-started/mingw64-installation/mingw64-installation.rst delete mode 100644 docs/getting-started/miniconda-installation/conda-configuration.rst delete mode 100644 docs/getting-started/miniconda-installation/img/miniconda-installer-0.png delete mode 100644 docs/getting-started/miniconda-installation/img/miniconda-installer-1.png delete mode 100644 docs/getting-started/miniconda-installation/img/miniconda-installer-2.png delete mode 100644 docs/getting-started/miniconda-installation/img/miniconda-installer-3.png delete mode 100644 docs/getting-started/miniconda-installation/img/miniconda-installer-4.png delete mode 100644 docs/getting-started/miniconda-installation/img/miniconda-installer-5.png delete mode 100644 docs/getting-started/miniconda-installation/img/miniconda-installer-6.png delete mode 100644 docs/getting-started/miniconda-installation/img/miniconda-installer-7.png delete mode 100644 docs/getting-started/miniconda-installation/img/miniconda-installer.gif delete mode 100644 docs/getting-started/miniconda-installation/miniconda-installation.rst delete mode 100644 docs/getting-started/ruby-installation/img/ruby-installer-0.png delete mode 100644 docs/getting-started/ruby-installation/ruby-installation.rst create mode 100644 docs/introduction/img/bms-components.png create mode 100644 docs/introduction/img/bms-components.pptx delete mode 100644 docs/software/api/overview.rst mode change 100644 => 100755 docs/software/build-process/misc/wscript mode change 100644 => 100755 docs/software/configuration/compiler/linker_pulls/wscript mode change 100644 => 100755 docs/software/configuration/without-halcogen/wscript create mode 100644 docs/software/modules/driver/can/can_how-to_rx.rst rename src/app/driver/can/cbs/tx/can_cbs_tx_string-minimum-maximum-values.c => docs/software/modules/driver/can/can_how-to_tx_async.c (62%) rename src/app/driver/config/nxpfs85xx_cfg.h => docs/software/modules/driver/can/can_how-to_tx_async.h (70%) create mode 100644 docs/software/modules/driver/can/can_how-to_tx_async.rst rename docs/software/modules/driver/can/{can_how-to_tx.c => can_how-to_tx_cyclic.c} (78%) create mode 100644 docs/software/modules/driver/can/can_how-to_tx_cyclic.rst mode change 100644 => 100755 docs/software/modules/driver/can/wscript mode change 100644 => 100755 docs/software/modules/engine/database/wscript mode change 100644 => 100755 docs/software/modules/task/ftask/wscript delete mode 100644 docs/software/unit-tests/build-and-run-abc.bat rename tests/env/packages/env_test_argon2-cffi.py => docs/software/unit-tests/wscript (64%) mode change 100644 => 100755 delete mode 100644 docs/spelling_wordlist.txt create mode 100644 docs/system/imd-testing.rst create mode 100644 docs/system/img/imd-testing.png create mode 100644 docs/system/img/imd-testing.pptx delete mode 100644 docs/tools/gui/gui-implementation.rst delete mode 100644 docs/tools/gui/gui.rst delete mode 100644 docs/tools/gui/impl/entry/entry.rst delete mode 100644 docs/tools/gui/impl/fgui.rst delete mode 100644 docs/tools/gui/impl/log_parser/log_parser.rst delete mode 100644 docs/tools/gui/impl/lvac/lvac.rst delete mode 100644 docs/tools/gui/impl/misc/misc.rst delete mode 100644 docs/tools/gui/impl/workers/workers.rst delete mode 100644 docs/tools/waf-tools/f_black.rst delete mode 100644 docs/tools/waf-tools/f_clang_format.rst delete mode 100644 docs/tools/waf-tools/f_git_hooks.rst delete mode 100644 docs/tools/waf-tools/f_guidelines.rst delete mode 100644 docs/tools/waf-tools/f_miniconda_env.rst delete mode 100644 docs/tools/waf-tools/f_pylint.rst rename tools/gui/gui.bat => fox.bat (63%) create mode 100755 fox.ps1 create mode 100755 fox.py create mode 100755 fox.sh delete mode 100644 ide.bat create mode 100644 pyproject.toml create mode 100644 requirements.txt create mode 100644 src/README.md mode change 100644 => 100755 src/app/application/algorithm/wscript mode change 100644 => 100755 src/app/application/wscript mode change 100644 => 100755 src/app/driver/afe/adi/ades1830/wscript mode change 100644 => 100755 src/app/driver/afe/adi/common/ades183x/wscript mode change 100644 => 100755 src/app/driver/afe/adi/wscript rename src/app/driver/{can/cbs/tx/can_cbs_tx_pack-values-p1.c => afe/debug/can/api/debug_can_afe.c} (54%) rename src/app/driver/{can/cbs/tx/can_cbs_tx_string-state.c => afe/debug/can/api/debug_can_afe_dma.c} (78%) create mode 100644 src/app/driver/afe/debug/can/debug_can.c create mode 100644 src/app/driver/afe/debug/can/debug_can.h create mode 100644 src/app/driver/afe/debug/can/debug_can.json rename tools/waf-tools/f_git_hooks.py => src/app/driver/afe/debug/can/wscript (55%) mode change 100644 => 100755 mode change 100644 => 100755 src/app/driver/afe/debug/default/wscript mode change 100644 => 100755 src/app/driver/afe/debug/wscript mode change 100644 => 100755 src/app/driver/afe/ltc/6804-1/wscript mode change 100644 => 100755 src/app/driver/afe/ltc/6806/wscript mode change 100644 => 100755 src/app/driver/afe/ltc/6811-1/wscript mode change 100644 => 100755 src/app/driver/afe/ltc/6812-1/wscript mode change 100644 => 100755 src/app/driver/afe/ltc/6813-1/wscript mode change 100644 => 100755 src/app/driver/afe/ltc/wscript rename src/app/driver/afe/maxim/common/{mxm_bitextract.c => mxm_bit_extract.c} (94%) rename src/app/driver/afe/maxim/common/{mxm_bitextract.h => mxm_bit_extract.h} (91%) mode change 100644 => 100755 src/app/driver/afe/maxim/max17852/wscript mode change 100644 => 100755 src/app/driver/afe/maxim/wscript create mode 100644 src/app/driver/afe/nxp/mc33775a/nxp_mc33775a-ll_vendor-hashes.json mode change 100644 => 100755 src/app/driver/afe/nxp/mc33775a/wscript mode change 100644 => 100755 src/app/driver/afe/nxp/wscript mode change 100644 => 100755 src/app/driver/afe/ti/api/wscript mode change 100644 => 100755 src/app/driver/afe/ti/common/wscript mode change 100644 => 100755 src/app/driver/afe/ti/dummy/wscript mode change 100644 => 100755 src/app/driver/afe/ti/wscript mode change 100644 => 100755 src/app/driver/afe/wscript create mode 100644 src/app/driver/can/cbs/rx/can_cbs_rx_cell-temperatures.c create mode 100644 src/app/driver/can/cbs/rx/can_cbs_rx_cell-voltages.c create mode 100644 src/app/driver/can/cbs/rx/can_cbs_rx_imd-info.h create mode 100644 src/app/driver/can/cbs/rx/can_cbs_rx_imd-response.h rename src/app/driver/can/cbs/{tx => tx-async}/can_cbs_tx_crash-dump.c (69%) rename src/app/driver/can/cbs/{tx => tx-async}/can_cbs_tx_crash-dump.h (79%) create mode 100644 src/app/driver/can/cbs/tx-async/can_cbs_tx_debug-build-configuration.c create mode 100644 src/app/driver/can/cbs/tx-async/can_cbs_tx_debug-build-configuration.h rename src/app/driver/can/cbs/{tx => tx-async}/can_cbs_tx_debug-response.c (81%) rename src/app/driver/can/cbs/{tx => tx-async}/can_cbs_tx_debug-response.h (80%) rename src/app/driver/can/cbs/{tx => tx-async}/can_cbs_tx_debug-unsupported-multiplexer-values.c (86%) rename src/app/driver/can/cbs/{tx => tx-async}/can_cbs_tx_debug-unsupported-multiplexer-values.h (88%) create mode 100644 src/app/driver/can/cbs/tx-async/can_cbs_tx_imd-request.c create mode 100644 src/app/driver/can/cbs/tx-async/can_cbs_tx_imd-request.h create mode 100644 src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_bms-state-details.c create mode 100644 src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_bms-state.c create mode 100644 src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_cell-temperatures.c rename src/app/driver/can/cbs/{tx => tx-cyclic}/can_cbs_tx_cell-voltages.c (54%) create mode 100644 src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_cyclic.h create mode 100644 src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_pack-limits.c create mode 100644 src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_pack-minimum-maximum-values.c create mode 100644 src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_pack-state-estimation.c create mode 100644 src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_pack-values-p0.c create mode 100644 src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_pack-values-p1.c create mode 100644 src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_string-minimum-maximum-values.c create mode 100644 src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_string-state-estimation.c create mode 100644 src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_string-state.c create mode 100644 src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_string-values-p0.c create mode 100644 src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_string-values-p1.c delete mode 100644 src/app/driver/can/cbs/tx/can_cbs_tx.h delete mode 100644 src/app/driver/can/cbs/tx/can_cbs_tx_bms-state-details.c delete mode 100644 src/app/driver/can/cbs/tx/can_cbs_tx_bms-state.c delete mode 100644 src/app/driver/can/cbs/tx/can_cbs_tx_cell-temperatures.c delete mode 100644 src/app/driver/can/cbs/tx/can_cbs_tx_pack-limits.c delete mode 100644 src/app/driver/can/cbs/tx/can_cbs_tx_pack-minimum-maximum-values.c delete mode 100644 src/app/driver/can/cbs/tx/can_cbs_tx_pack-state-estimation.c delete mode 100644 src/app/driver/can/cbs/tx/can_cbs_tx_pack-values-p0.c delete mode 100644 src/app/driver/can/cbs/tx/can_cbs_tx_string-state-estimation.c delete mode 100644 src/app/driver/can/cbs/tx/can_cbs_tx_string-values-p0.c delete mode 100644 src/app/driver/can/cbs/tx/can_cbs_tx_string-values-p1.c create mode 100644 src/app/driver/config/can_cfg_tx-async-message-definitions.h rename src/app/driver/config/{can_cfg_tx-message-definitions.h => can_cfg_tx-cyclic-message-definitions.h} (60%) rename src/app/driver/config/{can_cfg_tx.c => can_cfg_tx_cyclic.c} (73%) mode change 100644 => 100755 src/app/driver/imd/bender/ir155/wscript mode change 100644 => 100755 src/app/driver/imd/bender/iso165c/wscript mode change 100644 => 100755 src/app/driver/imd/bender/wscript mode change 100644 => 100755 src/app/driver/imd/none/wscript mode change 100644 => 100755 src/app/driver/imd/wscript rename src/app/driver/{can/cbs/tx/can_cbs_tx_imd-request.c => ts/semitec/103jt/lookup-table/semitec_103jt_lookup-table.c} (79%) create mode 100644 src/app/driver/ts/semitec/103jt/semitec_103jt.c create mode 100644 src/app/driver/ts/semitec/103jt/semitec_103jt.h mode change 100644 => 100755 src/app/driver/wscript mode change 100644 => 100755 src/app/engine/wscript mode change 100644 => 100755 src/app/main/wscript mode change 100644 => 100755 src/app/task/wscript mode change 100644 => 100755 src/app/wscript mode change 100644 => 100755 src/hal/wscript mode change 100644 => 100755 src/os/freertos/wscript mode change 100644 => 100755 src/os/wscript mode change 100644 => 100755 src/wscript create mode 100644 tests/README.md delete mode 100644 tests/axivion/addon-test/run_axivion_addon_tests.bat mode change 100644 => 100755 tests/axivion/addon/__init__.py mode change 100644 => 100755 tests/axivion/addon/doxygen_comment_at_declaration.py mode change 100644 => 100755 tests/axivion/addon/file_comment.py mode change 100644 => 100755 tests/axivion/addon/file_encoding_check.py mode change 100644 => 100755 tests/axivion/addon/file_license_header.py mode change 100644 => 100755 tests/axivion/addon/iisb_base.py mode change 100644 => 100755 tests/axivion/addon/literal_suffixes.py mode change 100644 => 100755 tests/axivion/addon/unique_filenames.py create mode 100644 tests/axivion/axivion_self_tests.json create mode 100755 tests/axivion/axivion_self_tests.py create mode 100755 tests/axivion/combine_report_files.py delete mode 100644 tests/axivion/compiler-errata/run_axivion_compiler_errata_ti-cgt-arm_20.2.6.lts_tests.bat create mode 100644 tests/axivion/config-test/README.md delete mode 100644 tests/axivion/config-test/run_axivion_config_tests.bat create mode 100644 tests/axivion/config-test/test_parameter-names-0.c create mode 100644 tests/axivion/config-test/test_parameter-names-1.c delete mode 100644 tests/axivion/config-test/test_parameter-names.c delete mode 100644 tests/axivion/forbidden-violations/check_forbidden_violations.py delete mode 100644 tests/axivion/qualification-test/run_axivion_qualification_kit_tests.bat mode change 100644 => 100755 tests/axivion/rule_config_c.py mode change 100644 => 100755 tests/axivion/rule_config_include_guard.py mode change 100644 => 100755 tests/axivion/rule_config_names.py mode change 100644 => 100755 tests/axivion/scripts/check_axivion_versions.py mode change 100644 => 100755 tests/axivion/scripts/ci_check_freshness_of_architecture_svg.py mode change 100644 => 100755 tests/axivion/scripts/dependency_analysis.py mode change 100644 => 100755 tests/axivion/scripts/gravis_export_architecture_svg.py delete mode 100644 tests/axivion/scripts/start_analysis.bat delete mode 100644 tests/axivion/scripts/start_local_analysis.bat delete mode 100644 tests/axivion/scripts/start_local_dashserver.bat delete mode 100644 tests/axivion/scripts/wrapper_make_race_pdfs.bat create mode 100755 tests/axivion/violations/check_violations.py rename tests/axivion/{forbidden-violations => violations}/forbidden-violations.txt (100%) create mode 100644 tests/axivion/violations/violation-free-files.txt mode change 100644 => 100755 tests/c-std/c-std-test.py mode change 100644 => 100755 tests/can/check_ids.py mode change 100644 => 100755 tests/can/check_implemented.py rename tests/{scripts/gui/test_info_dialog.py => ccs/ccs_build_helper.py} (54%) mode change 100644 => 100755 create mode 100755 tests/cli/__init__.py create mode 100755 tests/cli/cmd_axivion/__init__.py create mode 100755 tests/cli/cmd_axivion/test_axivion_impl.py create mode 100755 tests/cli/cmd_ci/__init__.py rename tests/{env/packages/env_test_wxpython.py => cli/cmd_ci/test_create_readme.py} (54%) mode change 100644 => 100755 create mode 100755 tests/cli/helpers/__init__.py create mode 100755 tests/cli/helpers/test_spr.py create mode 100755 tests/cli/test_main.py mode change 100644 => 100755 tests/dbc/check_parseable.py mode change 100644 => 100755 tests/dbc/overlapping-signals.py delete mode 100644 tests/env/conda_env_linux.json delete mode 100644 tests/env/conda_env_win32.json delete mode 100644 tests/env/packages/env_test_argparse-addons.py delete mode 100644 tests/env/packages/env_test_astroid.py delete mode 100644 tests/env/packages/env_test_atk-1.0_linux.py delete mode 100644 tests/env/packages/env_test_attrs.py delete mode 100644 tests/env/packages/env_test_babel.py delete mode 100644 tests/env/packages/env_test_backcall.py delete mode 100644 tests/env/packages/env_test_beautifulsoup4.py delete mode 100644 tests/env/packages/env_test_bitstruct.py delete mode 100644 tests/env/packages/env_test_black.py delete mode 100644 tests/env/packages/env_test_bleach.py delete mode 100644 tests/env/packages/env_test_bokeh.py delete mode 100644 tests/env/packages/env_test_bottle.py delete mode 100644 tests/env/packages/env_test_brotlipy_linux.py delete mode 100644 tests/env/packages/env_test_ca-certificates.py delete mode 100644 tests/env/packages/env_test_cairo_linux.py delete mode 100644 tests/env/packages/env_test_cantools.py delete mode 100644 tests/env/packages/env_test_certifi.py delete mode 100644 tests/env/packages/env_test_cffconvert.py delete mode 100644 tests/env/packages/env_test_cffi.py delete mode 100644 tests/env/packages/env_test_charset-normalizer.py delete mode 100644 tests/env/packages/env_test_click.py delete mode 100644 tests/env/packages/env_test_cloudpickle.py delete mode 100644 tests/env/packages/env_test_colorama.py delete mode 100644 tests/env/packages/env_test_console_shortcut_win32.py delete mode 100644 tests/env/packages/env_test_coverage.py delete mode 100644 tests/env/packages/env_test_crcmod.py delete mode 100644 tests/env/packages/env_test_cycler.py delete mode 100644 tests/env/packages/env_test_dask.py delete mode 100644 tests/env/packages/env_test_debugpy.py delete mode 100644 tests/env/packages/env_test_decorator.py delete mode 100644 tests/env/packages/env_test_defusedxml.py delete mode 100644 tests/env/packages/env_test_diskcache.py delete mode 100644 tests/env/packages/env_test_docopt.py delete mode 100644 tests/env/packages/env_test_docutils.py delete mode 100644 tests/env/packages/env_test_doxygen_win32.py delete mode 100644 tests/env/packages/env_test_entrypoints.py delete mode 100644 tests/env/packages/env_test_et-xmlfile.py delete mode 100644 tests/env/packages/env_test_expat_linux.py delete mode 100644 tests/env/packages/env_test_filterpy.py delete mode 100644 tests/env/packages/env_test_font-ttf-dejavu-sans-mono_linux.py delete mode 100644 tests/env/packages/env_test_font-ttf-inconsolata_linux.py delete mode 100644 tests/env/packages/env_test_font-ttf-source-code-pro_linux.py delete mode 100644 tests/env/packages/env_test_font-ttf-ubuntu_linux.py delete mode 100644 tests/env/packages/env_test_fontconfig_linux.py delete mode 100644 tests/env/packages/env_test_fonts-anaconda_linux.py delete mode 100644 tests/env/packages/env_test_fonts-conda-ecosystem_linux.py delete mode 100644 tests/env/packages/env_test_freetype_linux.py delete mode 100644 tests/env/packages/env_test_fribidi_linux.py delete mode 100644 tests/env/packages/env_test_fsspec.py delete mode 100644 tests/env/packages/env_test_gcovr.py delete mode 100644 tests/env/packages/env_test_gdk-pixbuf_linux.py delete mode 100644 tests/env/packages/env_test_gettext_linux.py delete mode 100644 tests/env/packages/env_test_gitdb.py delete mode 100644 tests/env/packages/env_test_gitpython.py delete mode 100644 tests/env/packages/env_test_glib_linux.py delete mode 100644 tests/env/packages/env_test_gobject-introspection_linux.py delete mode 100644 tests/env/packages/env_test_gprof2dot.py delete mode 100644 tests/env/packages/env_test_graphite2_linux.py delete mode 100644 tests/env/packages/env_test_graphviz_win32.py delete mode 100644 tests/env/packages/env_test_gst-plugins-base_linux.py delete mode 100644 tests/env/packages/env_test_gstreamer_linux.py delete mode 100644 tests/env/packages/env_test_gtk2_linux.py delete mode 100644 tests/env/packages/env_test_harfbuzz_linux.py delete mode 100644 tests/env/packages/env_test_httplib2.py delete mode 100644 tests/env/packages/env_test_icu_linux.py delete mode 100644 tests/env/packages/env_test_idna.py delete mode 100644 tests/env/packages/env_test_imagesize.py delete mode 100644 tests/env/packages/env_test_ipykernel.py delete mode 100644 tests/env/packages/env_test_ipython-genutils.py delete mode 100644 tests/env/packages/env_test_ipython.py delete mode 100644 tests/env/packages/env_test_ipywidgets.py delete mode 100644 tests/env/packages/env_test_isort.py delete mode 100644 tests/env/packages/env_test_jdcal.py delete mode 100644 tests/env/packages/env_test_jedi.py delete mode 100644 tests/env/packages/env_test_jinja2.py delete mode 100644 tests/env/packages/env_test_joblib.py delete mode 100644 tests/env/packages/env_test_jpeg_linux.py delete mode 100644 tests/env/packages/env_test_jsonschema.py delete mode 100644 tests/env/packages/env_test_jupyter-client.py delete mode 100644 tests/env/packages/env_test_jupyter-console.py delete mode 100644 tests/env/packages/env_test_jupyter-core.py delete mode 100644 tests/env/packages/env_test_jupyter.py delete mode 100644 tests/env/packages/env_test_jupyterlab-pygments.py delete mode 100644 tests/env/packages/env_test_jupyterlab-widgets.py delete mode 100644 tests/env/packages/env_test_kiwisolver.py delete mode 100644 tests/env/packages/env_test_latexcodec.py delete mode 100644 tests/env/packages/env_test_lazy-object-proxy.py delete mode 100644 tests/env/packages/env_test_ld_impl_linux-64_linux.py delete mode 100644 tests/env/packages/env_test_libffi_linux.py delete mode 100644 tests/env/packages/env_test_libgcc-ng_linux.py delete mode 100644 tests/env/packages/env_test_libglib_linux.py delete mode 100644 tests/env/packages/env_test_libglu_linux.py delete mode 100644 tests/env/packages/env_test_libgomp_linux.py delete mode 100644 tests/env/packages/env_test_libiconv_linux.py delete mode 100644 tests/env/packages/env_test_libogg_linux.py delete mode 100644 tests/env/packages/env_test_libopus_linux.py delete mode 100644 tests/env/packages/env_test_libpng_linux.py delete mode 100644 tests/env/packages/env_test_libstdcxx-ng_linux.py delete mode 100644 tests/env/packages/env_test_libtiff_linux.py delete mode 100644 tests/env/packages/env_test_libuuid_linux.py delete mode 100644 tests/env/packages/env_test_libvorbis_linux.py delete mode 100644 tests/env/packages/env_test_libwebp-base_linux.py delete mode 100644 tests/env/packages/env_test_libxcb_linux.py delete mode 100644 tests/env/packages/env_test_libxml2_linux.py delete mode 100644 tests/env/packages/env_test_locket.py delete mode 100644 tests/env/packages/env_test_lxml.py delete mode 100644 tests/env/packages/env_test_lz4-c_linux.py delete mode 100644 tests/env/packages/env_test_markdown.py delete mode 100644 tests/env/packages/env_test_markupsafe.py delete mode 100644 tests/env/packages/env_test_matplotlib-inline.py delete mode 100644 tests/env/packages/env_test_matplotlib.py delete mode 100644 tests/env/packages/env_test_mccabe.py delete mode 100644 tests/env/packages/env_test_mistune.py delete mode 100644 tests/env/packages/env_test_msgpack_linux.py delete mode 100644 tests/env/packages/env_test_mypy-extensions.py delete mode 100644 tests/env/packages/env_test_mypy.py delete mode 100644 tests/env/packages/env_test_nbclient.py delete mode 100644 tests/env/packages/env_test_nbconvert.py delete mode 100644 tests/env/packages/env_test_nbformat.py delete mode 100644 tests/env/packages/env_test_ncurses_linux.py delete mode 100644 tests/env/packages/env_test_nest-asyncio.py delete mode 100644 tests/env/packages/env_test_ninja_linux.py delete mode 100644 tests/env/packages/env_test_notebook.py delete mode 100644 tests/env/packages/env_test_numpy.py delete mode 100644 tests/env/packages/env_test_openpyxl.py delete mode 100644 tests/env/packages/env_test_openssl.py delete mode 100644 tests/env/packages/env_test_packaging.py delete mode 100644 tests/env/packages/env_test_pandas-stubs.py delete mode 100644 tests/env/packages/env_test_pandas.py delete mode 100644 tests/env/packages/env_test_pandocfilters.py delete mode 100644 tests/env/packages/env_test_pango_linux.py delete mode 100644 tests/env/packages/env_test_parso.py delete mode 100644 tests/env/packages/env_test_partd.py delete mode 100644 tests/env/packages/env_test_pathlib2_linux.py delete mode 100644 tests/env/packages/env_test_patsy.py delete mode 100644 tests/env/packages/env_test_pcre_linux.py delete mode 100644 tests/env/packages/env_test_pexpect_linux.py delete mode 100644 tests/env/packages/env_test_pickleshare.py delete mode 100644 tests/env/packages/env_test_pillow.py delete mode 100644 tests/env/packages/env_test_pip-licenses.py delete mode 100644 tests/env/packages/env_test_pip.py delete mode 100644 tests/env/packages/env_test_pixman_linux.py delete mode 100644 tests/env/packages/env_test_plantuml-markdown.py delete mode 100644 tests/env/packages/env_test_plantuml.py delete mode 100644 tests/env/packages/env_test_platformdirs.py delete mode 100644 tests/env/packages/env_test_powershell_shortcut_win32.py delete mode 100644 tests/env/packages/env_test_prometheus-client.py delete mode 100644 tests/env/packages/env_test_prompt-toolkit.py delete mode 100644 tests/env/packages/env_test_psutil.py delete mode 100644 tests/env/packages/env_test_ptable.py delete mode 100644 tests/env/packages/env_test_pthread-stubs_linux.py delete mode 100644 tests/env/packages/env_test_ptyprocess_linux.py delete mode 100644 tests/env/packages/env_test_pybtex-docutils.py delete mode 100644 tests/env/packages/env_test_pybtex.py delete mode 100644 tests/env/packages/env_test_pycparser.py delete mode 100644 tests/env/packages/env_test_pyenchant.py delete mode 100644 tests/env/packages/env_test_pygments.py delete mode 100644 tests/env/packages/env_test_pykwalify.py delete mode 100644 tests/env/packages/env_test_pylint.py delete mode 100644 tests/env/packages/env_test_pyopenssl_linux.py delete mode 100644 tests/env/packages/env_test_pyparsing.py delete mode 100644 tests/env/packages/env_test_pypubsub_linux.py delete mode 100644 tests/env/packages/env_test_pyrsistent.py delete mode 100644 tests/env/packages/env_test_pyserial.py delete mode 100644 tests/env/packages/env_test_pysimplegui.py delete mode 100644 tests/env/packages/env_test_pysocks_linux.py delete mode 100644 tests/env/packages/env_test_python-can.py delete mode 100644 tests/env/packages/env_test_python-datauri.py delete mode 100644 tests/env/packages/env_test_python-lin.py delete mode 100644 tests/env/packages/env_test_python-markdown-math.py delete mode 100644 tests/env/packages/env_test_python-uds.py delete mode 100644 tests/env/packages/env_test_python_abi_linux.py delete mode 100644 tests/env/packages/env_test_pytz.py delete mode 100644 tests/env/packages/env_test_pyvisa.py delete mode 100644 tests/env/packages/env_test_pywin32_win32.py delete mode 100644 tests/env/packages/env_test_pywinpty_win32.py delete mode 100644 tests/env/packages/env_test_pyyaml.py delete mode 100644 tests/env/packages/env_test_pyzmq.py delete mode 100644 tests/env/packages/env_test_qtconsole.py delete mode 100644 tests/env/packages/env_test_qtpy.py delete mode 100644 tests/env/packages/env_test_readline_linux.py delete mode 100644 tests/env/packages/env_test_regex.py delete mode 100644 tests/env/packages/env_test_requests-file.py delete mode 100644 tests/env/packages/env_test_requests.py delete mode 100644 tests/env/packages/env_test_rope.py delete mode 100644 tests/env/packages/env_test_rsinstrument.py delete mode 100644 tests/env/packages/env_test_ruamel-yaml-clib.py delete mode 100644 tests/env/packages/env_test_ruamel-yaml.py delete mode 100644 tests/env/packages/env_test_scipy.py delete mode 100644 tests/env/packages/env_test_seaborn.py delete mode 100644 tests/env/packages/env_test_send2trash.py delete mode 100644 tests/env/packages/env_test_setuptools.py delete mode 100644 tests/env/packages/env_test_six.py delete mode 100644 tests/env/packages/env_test_smmap.py delete mode 100644 tests/env/packages/env_test_snowballstemmer.py delete mode 100644 tests/env/packages/env_test_sphinx-copybutton.py delete mode 100644 tests/env/packages/env_test_sphinx-panels.py delete mode 100644 tests/env/packages/env_test_sphinx-rtd-theme.py delete mode 100644 tests/env/packages/env_test_sphinx.py delete mode 100644 tests/env/packages/env_test_sphinxcontrib-applehelp.py delete mode 100644 tests/env/packages/env_test_sphinxcontrib-bibtex.py delete mode 100644 tests/env/packages/env_test_sphinxcontrib-devhelp.py delete mode 100644 tests/env/packages/env_test_sphinxcontrib-htmlhelp.py delete mode 100644 tests/env/packages/env_test_sphinxcontrib-jsmath.py delete mode 100644 tests/env/packages/env_test_sphinxcontrib-mermaid.py delete mode 100644 tests/env/packages/env_test_sphinxcontrib-plantuml.py delete mode 100644 tests/env/packages/env_test_sphinxcontrib-programoutput.py delete mode 100644 tests/env/packages/env_test_sphinxcontrib-qthelp.py delete mode 100644 tests/env/packages/env_test_sphinxcontrib-serializinghtml.py delete mode 100644 tests/env/packages/env_test_sphinxcontrib-spelling.py delete mode 100644 tests/env/packages/env_test_sqlite.py delete mode 100644 tests/env/packages/env_test_statsmodels.py delete mode 100644 tests/env/packages/env_test_tabulate.py delete mode 100644 tests/env/packages/env_test_tenacity.py delete mode 100644 tests/env/packages/env_test_terminado.py delete mode 100644 tests/env/packages/env_test_testpath.py delete mode 100644 tests/env/packages/env_test_textparser.py delete mode 100644 tests/env/packages/env_test_textx.py delete mode 100644 tests/env/packages/env_test_threadpoolctl.py delete mode 100644 tests/env/packages/env_test_tk_linux.py delete mode 100644 tests/env/packages/env_test_toml.py delete mode 100644 tests/env/packages/env_test_tomli.py delete mode 100644 tests/env/packages/env_test_toolz.py delete mode 100644 tests/env/packages/env_test_tornado.py delete mode 100644 tests/env/packages/env_test_traitlets.py delete mode 100644 tests/env/packages/env_test_typing-extensions.py delete mode 100644 tests/env/packages/env_test_tzdata.py delete mode 100644 tests/env/packages/env_test_uptime.py delete mode 100644 tests/env/packages/env_test_urllib3.py delete mode 100644 tests/env/packages/env_test_vc_win32.py delete mode 100644 tests/env/packages/env_test_vs2015_runtime_win32.py delete mode 100644 tests/env/packages/env_test_wcwidth.py delete mode 100644 tests/env/packages/env_test_webencodings.py delete mode 100644 tests/env/packages/env_test_wheel.py delete mode 100644 tests/env/packages/env_test_widgetsnbextension.py delete mode 100644 tests/env/packages/env_test_wincertstore_win32.py delete mode 100644 tests/env/packages/env_test_windows-curses_win32.py delete mode 100644 tests/env/packages/env_test_winpty_win32.py delete mode 100644 tests/env/packages/env_test_wrapt.py delete mode 100644 tests/env/packages/env_test_xlsxwriter.py delete mode 100644 tests/env/packages/env_test_xz_linux.py delete mode 100644 tests/env/packages/env_test_zlib.py delete mode 100644 tests/env/packages/env_test_zstd_linux.py delete mode 100644 tests/env/packages_test.py mode change 100644 => 100755 tests/re-names/test_names_regex.py delete mode 100644 tests/scripts/.gitignore delete mode 100644 tests/scripts/gui/__init__.py delete mode 100644 tests/scripts/run_tests.bat delete mode 100644 tests/scripts/waf-core/README.md delete mode 100644 tests/scripts/waf-core/general/wscript delete mode 100644 tests/scripts/waf-core/init/side_cwd/side.txt delete mode 100644 tests/scripts/waf-core/init/up_cwd/project/sub/test.txt delete mode 100644 tests/scripts/waf-core/init/up_cwd/project/wscript delete mode 100644 tests/scripts/waf-core/init/wscript delete mode 100644 tests/scripts/waf-core/install/wscript delete mode 100644 tests/scripts/waf-core/install_group/wscript delete mode 100644 tests/scripts/waf-core/preproc/recursion/a.c delete mode 100644 tests/scripts/waf-core/preproc/recursion/a.h delete mode 100644 tests/scripts/waf-core/preproc/recursion/b.h delete mode 100644 tests/scripts/waf-core/preproc/recursion/c.h delete mode 100644 tests/scripts/waf-core/preproc/src/a.h delete mode 100644 tests/scripts/waf-core/preproc/src/b.h delete mode 100644 tests/scripts/waf-core/preproc/src/c.h delete mode 100644 tests/scripts/waf-core/preproc/src/d.h delete mode 100644 tests/scripts/waf-core/preproc/src/e.h delete mode 100644 tests/scripts/waf-core/preproc/src/f.h delete mode 100644 tests/scripts/waf-core/preproc/src/g.h delete mode 100644 tests/scripts/waf-core/preproc/src/h.h delete mode 100644 tests/scripts/waf-core/preproc/src/main.c delete mode 100644 tests/scripts/waf-core/preproc/src/pasting.c delete mode 100644 tests/scripts/waf-core/preproc/wscript delete mode 100755 tests/scripts/waf-core/run_waf_core_unit_tests.sh delete mode 100644 tests/scripts/waf-tools/__init__.py delete mode 100644 tests/scripts/waf-tools/f_guidelines/test_f_guidelines.py delete mode 100644 tests/scripts/waf-tools/f_guidelines/tests/c-004_tests/c-004_test0.c delete mode 100644 tests/scripts/waf-tools/f_guidelines/tests/c-004_tests/c-004_test1.c delete mode 100644 tests/scripts/waf-tools/f_guidelines/tests/c-004_tests/c-004_test2.c delete mode 100644 tests/scripts/waf-tools/f_guidelines/tests/c-004_tests/c-004_test3.c delete mode 100644 tests/scripts/waf-tools/f_guidelines/tests/c-004_tests/c-004_test4.c delete mode 100644 tests/scripts/waf-tools/f_guidelines/tests/c-004_tests/c-004_test5.c delete mode 100644 tests/scripts/waf-tools/f_guidelines/tests/c-004_tests/c-004_test6.c delete mode 100644 tests/scripts/waf-tools/f_guidelines/tests/c-004_tests/c-004_test_configured_rules.json delete mode 100644 tests/scripts/waf-tools/f_guidelines/tests/c-004_tests/c-004_test_results.json delete mode 100644 tests/scripts/waf-tools/f_guidelines/tests/c-005_tests/c-005_test0.h delete mode 100644 tests/scripts/waf-tools/f_guidelines/tests/c-005_tests/c-005_test1.h delete mode 100644 tests/scripts/waf-tools/f_guidelines/tests/c-005_tests/c-005_test2.h delete mode 100644 tests/scripts/waf-tools/f_guidelines/tests/c-005_tests/c-005_test3.h delete mode 100644 tests/scripts/waf-tools/f_guidelines/tests/c-005_tests/c-005_test4.h delete mode 100644 tests/scripts/waf-tools/f_guidelines/tests/c-005_tests/c-005_test5.h delete mode 100644 tests/scripts/waf-tools/f_guidelines/tests/c-005_tests/c-005_test6.h delete mode 100644 tests/scripts/waf-tools/f_guidelines/tests/c-005_tests/c-005_test7.h delete mode 100644 tests/scripts/waf-tools/f_guidelines/tests/c-005_tests/c-005_test_results.json delete mode 100644 tests/scripts/waf-tools/f_guidelines/tests/c-006_tests/c-006_test0.c delete mode 100644 tests/scripts/waf-tools/f_guidelines/tests/c-006_tests/c-006_test1.c delete mode 100644 tests/scripts/waf-tools/f_guidelines/tests/c-006_tests/c-006_test2.c delete mode 100644 tests/scripts/waf-tools/f_guidelines/tests/c-006_tests/c-006_test3.c delete mode 100644 tests/scripts/waf-tools/f_guidelines/tests/c-006_tests/c-006_test4.c delete mode 100644 tests/scripts/waf-tools/f_guidelines/tests/c-006_tests/c-006_test5.c delete mode 100644 tests/scripts/waf-tools/f_guidelines/tests/c-006_tests/c-006_test_results.json delete mode 100644 tests/scripts/waf-tools/f_guidelines/tests/c-029_tests/c-029_test0.c delete mode 100644 tests/scripts/waf-tools/f_guidelines/tests/c-029_tests/c-029_test1.c delete mode 100644 tests/scripts/waf-tools/f_guidelines/tests/c-029_tests/c-029_test_results.json delete mode 100644 tests/scripts/waf-tools/f_guidelines/tests/general_tests/general-003_test0.txt delete mode 100644 tests/scripts/waf-tools/f_guidelines/tests/general_tests/general-003_test1.txt delete mode 100644 tests/scripts/waf-tools/f_guidelines/tests/general_tests/general-003_test2.txt delete mode 100644 tests/scripts/waf-tools/f_guidelines/tests/general_tests/general-003_test3.txt delete mode 100644 tests/scripts/waf-tools/f_guidelines/tests/general_tests/general-003_test4.txt delete mode 100644 tests/scripts/waf-tools/f_guidelines/tests/general_tests/general-004_test0.txt delete mode 100644 tests/scripts/waf-tools/f_guidelines/tests/general_tests/general-004_test1.txt delete mode 100644 tests/scripts/waf-tools/f_guidelines/tests/general_tests/general-004_test2.txt delete mode 100644 tests/scripts/waf-tools/f_guidelines/tests/general_tests/general-004_test3.txt delete mode 100644 tests/scripts/waf-tools/f_guidelines/tests/general_tests/general-004_test4.txt delete mode 100644 tests/scripts/waf-tools/f_guidelines/tests/general_tests/general-005_test0.txt delete mode 100644 tests/scripts/waf-tools/f_guidelines/tests/general_tests/general-005_test1.txt delete mode 100644 tests/scripts/waf-tools/f_guidelines/tests/general_tests/general-005_test2.txt delete mode 100644 tests/scripts/waf-tools/f_guidelines/tests/general_tests/general-006_test0.txt delete mode 100644 tests/scripts/waf-tools/f_guidelines/tests/general_tests/general-006_test1.txt delete mode 100644 tests/scripts/waf-tools/f_guidelines/tests/general_tests/general-006_test2.txt delete mode 100644 tests/scripts/waf-tools/f_guidelines/tests/general_tests/general-006_test3.txt delete mode 100644 tests/scripts/waf-tools/f_guidelines/tests/general_tests/general-006_test4.txt delete mode 100644 tests/scripts/waf-tools/f_guidelines/tests/general_tests/general_test_results.json delete mode 100644 tests/scripts/waf-tools/f_guidelines/tests/header_tests/header_test0.py delete mode 100644 tests/scripts/waf-tools/f_guidelines/tests/header_tests/header_test1.py delete mode 100644 tests/scripts/waf-tools/f_guidelines/tests/header_tests/header_test2.py delete mode 100644 tests/scripts/waf-tools/f_guidelines/tests/header_tests/header_test3.py delete mode 100644 tests/scripts/waf-tools/f_guidelines/tests/header_tests/header_test_results.json delete mode 100644 tests/scripts/waf-tools/f_guidelines/tests/rst-003_tests/rst-003_test0.rst delete mode 100644 tests/scripts/waf-tools/f_guidelines/tests/rst-003_tests/rst-003_test1.rst delete mode 100644 tests/scripts/waf-tools/f_guidelines/tests/rst-003_tests/rst-003_test2.rst delete mode 100644 tests/scripts/waf-tools/f_guidelines/tests/rst-003_tests/rst-003_test3.rst delete mode 100644 tests/scripts/waf-tools/f_guidelines/tests/rst-003_tests/rst-003_test4.rst delete mode 100644 tests/scripts/waf-tools/f_guidelines/tests/rst-003_tests/rst-003_test5.rst delete mode 100644 tests/scripts/waf-tools/f_guidelines/tests/rst-003_tests/rst-003_test6.rst delete mode 100644 tests/scripts/waf-tools/f_guidelines/tests/rst-003_tests/rst-003_test7.rst delete mode 100644 tests/scripts/waf-tools/f_guidelines/tests/rst-003_tests/rst-003_test_results.json delete mode 100644 tests/scripts/waf-tools/f_guidelines/tests/rst-007_tests/rst-007_test_results.json delete mode 100644 tests/scripts/waf-tools/f_guidelines/tests/rst-007_tests/rst_007_test0.rst delete mode 100644 tests/scripts/waf-tools/f_guidelines/tests/rst-007_tests/rst_007_test1.rst delete mode 100644 tests/scripts/waf-tools/f_guidelines/tests/rst-007_tests/rst_007_test10.rst delete mode 100644 tests/scripts/waf-tools/f_guidelines/tests/rst-007_tests/rst_007_test2.rst delete mode 100644 tests/scripts/waf-tools/f_guidelines/tests/rst-007_tests/rst_007_test3.rst delete mode 100644 tests/scripts/waf-tools/f_guidelines/tests/rst-007_tests/rst_007_test4.rst delete mode 100644 tests/scripts/waf-tools/f_guidelines/tests/rst-007_tests/rst_007_test5.rst delete mode 100644 tests/scripts/waf-tools/f_guidelines/tests/rst-007_tests/rst_007_test6.rst delete mode 100644 tests/scripts/waf-tools/f_guidelines/tests/rst-007_tests/rst_007_test7.rst delete mode 100644 tests/scripts/waf-tools/f_guidelines/tests/rst-007_tests/rst_007_test8.rst delete mode 100644 tests/scripts/waf-tools/f_guidelines/tests/rst-007_tests/rst_007_test9.rst delete mode 100644 tests/scripts/waf-tools/f_hcg/__init__.py delete mode 100644 tests/scripts/waf-tools/f_hcg/test_f_hcg.py delete mode 100644 tests/scripts/waf-tools/f_hcg/tests/test_hcg0.dil delete mode 100644 tests/scripts/waf-tools/f_hcg/tests/test_hcg0.hcg delete mode 100644 tests/scripts/waf-tools/f_hcg/tests/test_hcg0.json delete mode 100644 tests/scripts/waf-tools/f_hcg/tests/test_hcg1.dil delete mode 100644 tests/scripts/waf-tools/f_hcg/tests/test_hcg1.hcg delete mode 100644 tests/scripts/waf-tools/f_hcg/tests/test_hcg1.json delete mode 100644 tests/scripts/waf-tools/f_hcg/tests/test_hcg2.dil delete mode 100644 tests/scripts/waf-tools/f_hcg/tests/test_hcg2.hcg delete mode 100644 tests/scripts/waf-tools/f_hcg/tests/test_hcg2.json delete mode 100644 tests/scripts/waf-tools/f_hcg/tests/test_hcg3.dil delete mode 100644 tests/scripts/waf-tools/f_hcg/tests/test_hcg3.hcg delete mode 100644 tests/scripts/waf-tools/f_hcg/tests/test_hcg3.json delete mode 100644 tests/scripts/waf-tools/f_hcg/tests/test_hcg_raises.dil delete mode 100644 tests/scripts/waf-tools/f_hcg/tests/test_hcg_raises.hcg delete mode 100644 tests/scripts/waf-tools/f_hcg/tests/test_hcg_raises.json delete mode 100644 tests/scripts/waf-tools/f_ti_arm_cgt/__init__.py delete mode 100644 tests/scripts/waf-tools/f_ti_arm_cgt/test_f_ti_arm_cgt.py delete mode 100644 tests/scripts/waf-tools/f_ti_arm_cgt/tests/f_ti_arm_cgt_result.json delete mode 100644 tests/scripts/waf-tools/f_ti_arm_cgt/tests/f_ti_arm_cgt_test0.json delete mode 100644 tests/scripts/waf-tools/f_ti_arm_cgt/tests/f_ti_arm_cgt_test0.txt delete mode 100644 tests/scripts/waf-tools/f_ti_arm_cgt/tests/f_ti_arm_cgt_test1.json delete mode 100644 tests/scripts/waf-tools/f_ti_arm_cgt/tests/f_ti_arm_cgt_test1.txt delete mode 100644 tests/scripts/waf-tools/f_ti_arm_cgt/tests/f_ti_arm_cgt_test2.json delete mode 100644 tests/scripts/waf-tools/f_ti_arm_cgt/tests/f_ti_arm_cgt_test2.txt delete mode 100644 tests/scripts/waf-tools/f_ti_arm_cgt/tests/f_ti_arm_cgt_test3.json delete mode 100644 tests/scripts/waf-tools/f_ti_arm_cgt/tests/f_ti_arm_cgt_test3.txt create mode 100644 tests/unit/app/application/config/battery_system_cfg_unit_test.h create mode 100644 tests/unit/app/driver/afe/adi/ades1830/test_adi_ades1830_temperatures_2.c create mode 100644 tests/unit/app/driver/afe/adi/ades1830/test_adi_ades1830_voltages.c.txt create mode 100644 tests/unit/app/driver/afe/debug/can/api/test_debug_can_afe.c create mode 100644 tests/unit/app/driver/afe/debug/can/api/test_debug_can_afe_dma.c create mode 100644 tests/unit/app/driver/afe/debug/can/test_debug_can.c rename tests/unit/app/driver/afe/maxim/common/{test_mxm_bitextract.c => test_mxm_bit_extract.c} (88%) create mode 100644 tests/unit/app/driver/can/cbs/rx/test_can_cbs_rx_cell-temperatures.c create mode 100644 tests/unit/app/driver/can/cbs/rx/test_can_cbs_rx_cell-voltages.c rename tests/unit/app/driver/can/cbs/{tx => tx-async}/test_can_cbs_tx_crash-dump.c (70%) create mode 100644 tests/unit/app/driver/can/cbs/tx-async/test_can_cbs_tx_debug-build-configuration.c create mode 100644 tests/unit/app/driver/can/cbs/tx-async/test_can_cbs_tx_debug-response.c rename tests/unit/app/driver/can/cbs/{tx => tx-async}/test_can_cbs_tx_debug-unsupported-multiplexer-values.c (92%) create mode 100644 tests/unit/app/driver/can/cbs/tx-async/test_can_cbs_tx_imd-request.c rename tests/unit/app/driver/can/cbs/{tx => tx-cyclic}/test_can_cbs_tx_bms-state-details.c (53%) create mode 100644 tests/unit/app/driver/can/cbs/tx-cyclic/test_can_cbs_tx_bms-state.c rename tests/unit/app/driver/can/cbs/{tx => tx-cyclic}/test_can_cbs_tx_cell-temperatures.c (88%) rename tests/unit/app/driver/can/cbs/{tx => tx-cyclic}/test_can_cbs_tx_cell-voltages.c (88%) create mode 100644 tests/unit/app/driver/can/cbs/tx-cyclic/test_can_cbs_tx_pack-limits.c create mode 100644 tests/unit/app/driver/can/cbs/tx-cyclic/test_can_cbs_tx_pack-minimum-maximum-values.c create mode 100644 tests/unit/app/driver/can/cbs/tx-cyclic/test_can_cbs_tx_pack-state-estimation.c create mode 100644 tests/unit/app/driver/can/cbs/tx-cyclic/test_can_cbs_tx_pack-values-p0.c create mode 100644 tests/unit/app/driver/can/cbs/tx-cyclic/test_can_cbs_tx_pack-values-p1.c create mode 100644 tests/unit/app/driver/can/cbs/tx-cyclic/test_can_cbs_tx_string-minimum-maximum-values.c create mode 100644 tests/unit/app/driver/can/cbs/tx-cyclic/test_can_cbs_tx_string-state-estimation.c create mode 100644 tests/unit/app/driver/can/cbs/tx-cyclic/test_can_cbs_tx_string-state.c create mode 100644 tests/unit/app/driver/can/cbs/tx-cyclic/test_can_cbs_tx_string-values-p0.c rename tests/unit/app/driver/can/cbs/{tx => tx-cyclic}/test_can_cbs_tx_string-values-p1.c (66%) delete mode 100644 tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_bms-state.c delete mode 100644 tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_debug-response.c delete mode 100644 tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_pack-limits.c delete mode 100644 tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_pack-minimum-maximum-values.c delete mode 100644 tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_pack-state-estimation.c delete mode 100644 tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_pack-values-p0.c delete mode 100644 tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_pack-values-p1.c delete mode 100644 tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_string-state-estimation.c delete mode 100644 tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_string-state.c delete mode 100644 tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_string-values-p0.c rename tests/unit/app/driver/config/{test_can_cfg_tx.c => test_can_cfg_tx_cyclic.c} (84%) create mode 100644 tests/unit/app/driver/spi/test_spi_adi.c create mode 100644 tests/unit/app/driver/spi/test_spi_debug.c create mode 100644 tests/unit/app/driver/spi/test_spi_ltc.c create mode 100644 tests/unit/app/driver/spi/test_spi_mxm.c create mode 100644 tests/unit/app/driver/spi/test_spi_nxp.c create mode 100644 tests/unit/app/driver/spi/test_spi_ti.c rename tests/unit/app/driver/{can/cbs/tx/test_can_cbs_tx_string-minimum-maximum-values.c => ts/semitec/103jt/lookup-table/test_semitec_103jt_lookup-table.c} (63%) rename tests/unit/app/driver/{can/cbs/tx/test_can_cbs_tx_imd-request.c => ts/semitec/103jt/test_semitec_103jt.c} (68%) mode change 100644 => 100755 tests/unit/axivion/call_irlink.py delete mode 100644 tests/unit/axivion/link.bat create mode 100644 tests/unit/axivion/unit_test_settings.json rename tests/{scripts/waf-core => unit/gen_hcg}/.gitignore (100%) create mode 100755 tests/unit/gen_hcg/wscript delete mode 100644 tests/unit/run_ut_gcc_build.bat mode change 100644 => 100755 tests/unit/wscript create mode 100644 tests/variants/freertos_debug-can_none_cc-cc-tr-none_bender-iso165c.json delete mode 100644 tests/variants/lib-build/lib-build.bat rename tools/waf-tools/f_black.py => tests/variants/lib-build/lib-build.ps1 (50%) mode change 100644 => 100755 delete mode 100644 tools/crc/build-crc-snippets.bat delete mode 100644 tools/crc/crc.bat mode change 100644 => 100755 tools/crc/crc_init.py rename tests/env/packages/env_test_arpeggio.py => tools/crc/wscript (66%) mode change 100644 => 100755 create mode 100644 tools/dbc/README.md create mode 100755 tools/dbc/plot_periods.py create mode 100755 tools/dbc/plot_periods_test.py mode change 100644 => 100755 tools/dbc/symbol_creator.py create mode 100644 tools/dbc/test_log.txt mode change 100644 => 100755 tools/debugger/lauterbach/get_macro_values.py mode change 100644 => 100755 tools/deploy/deploy_internal_server.sh delete mode 100644 tools/gui/README.md delete mode 100644 tools/gui/data/2020-05-12_09-25-36_logfile_can_bms.txt delete mode 100644 tools/gui/data/pcan_view_v2.0.trc delete mode 100644 tools/gui/entry-frame-select-sub-tool.png delete mode 100644 tools/gui/entry-frame.png delete mode 100644 tools/gui/fgui/__init__.py delete mode 100644 tools/gui/fgui/entry/__init__.py delete mode 100644 tools/gui/fgui/entry/entry_frame.py delete mode 100644 tools/gui/fgui/foxbms_gui.py delete mode 100644 tools/gui/fgui/log_parser/__init__.py delete mode 100644 tools/gui/fgui/log_parser/log_parser.py delete mode 100644 tools/gui/fgui/lvac/__init__.py delete mode 100644 tools/gui/fgui/lvac/__main__.py delete mode 100644 tools/gui/fgui/lvac/bms_state.py delete mode 100644 tools/gui/fgui/lvac/cell_temperatures.py delete mode 100644 tools/gui/fgui/lvac/cell_voltages.py delete mode 100644 tools/gui/fgui/lvac/debug_response.py delete mode 100644 tools/gui/fgui/lvac/default_messages.py delete mode 100644 tools/gui/fgui/lvac/lvac_frame.py delete mode 100644 tools/gui/fgui/lvac/msgs/msg_debug.py delete mode 100644 tools/gui/fgui/misc/can/can_constants.py delete mode 100644 tools/gui/fgui/misc/can/can_helpers.py delete mode 100644 tools/gui/fgui/misc/info_dialog.py delete mode 100644 tools/gui/fgui/misc/logo.py delete mode 100644 tools/gui/fgui/misc/misc.py delete mode 100644 tools/gui/fgui/misc/program_arguments.py delete mode 100644 tools/gui/fgui/workers/can_node_worker.py delete mode 100644 tools/gui/fgui/workers/gui_sync_worker.py delete mode 100644 tools/ide/vscode/c_cpp_properties.json.jinja2 create mode 100644 tools/ide/vscode/cspell.json delete mode 100644 tools/ide/vscode/cspell.json.jinja2 create mode 100644 tools/ide/vscode/embedded-tests/c_cpp_properties.json create mode 100644 tools/ide/vscode/embedded-tests/e-project-include-path.txt create mode 100644 tools/ide/vscode/embedded-tests/launch.json create mode 100644 tools/ide/vscode/embedded-tests/settings.json create mode 100644 tools/ide/vscode/embedded-tests/tasks.json delete mode 100644 tools/ide/vscode/extensions.json.jinja2 create mode 100644 tools/ide/vscode/generic/c_cpp_properties.json create mode 100644 tools/ide/vscode/generic/g-project-include-path.txt create mode 100644 tools/ide/vscode/generic/settings.json create mode 100644 tools/ide/vscode/generic/tasks.json delete mode 100644 tools/ide/vscode/install-snippets.bat delete mode 100644 tools/ide/vscode/launch.json.jinja2 delete mode 100644 tools/ide/vscode/settings.json.jinja2 create mode 100644 tools/ide/vscode/src/c_cpp_properties.json create mode 100644 tools/ide/vscode/src/s-project-include-path.txt create mode 100644 tools/ide/vscode/src/settings.json create mode 100644 tools/ide/vscode/src/tasks.json delete mode 100644 tools/ide/vscode/tasks.json.jinja2 delete mode 100644 tools/utils/bash/dir_shall_not_exist.sh delete mode 100755 tools/utils/bash/find_base_conda.sh delete mode 100644 tools/utils/bash/find_ccs.sh delete mode 100755 tools/utils/bash/run-python-script.sh delete mode 100644 tools/utils/bash/run-python.sh delete mode 100644 tools/utils/bash/run-script.sh delete mode 100644 tools/utils/cmd/add_pcan_to_path.bat delete mode 100644 tools/utils/cmd/find_base_conda.bat delete mode 100644 tools/utils/cmd/find_ccs.bat delete mode 100644 tools/utils/cmd/find_git.bat delete mode 100644 tools/utils/cmd/find_vs-code.bat delete mode 100644 tools/utils/cmd/run-python-coverage.bat delete mode 100644 tools/utils/cmd/run-python-script.bat delete mode 100644 tools/utils/cmd/run-python.bat delete mode 100644 tools/utils/cmd/run-script.bat delete mode 100644 tools/utils/conda-init.bat delete mode 100644 tools/utils/conda-update-env.bat delete mode 100644 tools/utils/conda-update-env.sh delete mode 100644 tools/utils/generate_license_list.py mode change 100644 => 100755 tools/utils/generate_missing_test_files.py delete mode 100644 tools/utils/git-hooks/pre-commit mode change 100644 => 100755 tools/utils/list_prefixes.py delete mode 100644 tools/utils/llvm-install.bat delete mode 100644 tools/utils/mingw64-install.bat delete mode 100644 tools/utils/miniconda3-install.bat delete mode 100644 tools/utils/ruby-install.bat delete mode 100644 tools/utils/run-uncrustify.bat mode change 100644 => 100755 tools/utils/update_doxygen_header.py mode change 100644 => 100755 tools/utils/update_version.py delete mode 100644 tools/utils/verify_checksums.py delete mode 100644 tools/utils/verify_doc_source_links.py create mode 100644 tools/vendor/ceedling/GIT_COMMIT_SHA create mode 100644 tools/vendor/ceedling/bin/actions_wrapper.rb create mode 100644 tools/vendor/ceedling/bin/app_cfg.rb create mode 100644 tools/vendor/ceedling/bin/cli.rb create mode 100644 tools/vendor/ceedling/bin/cli_handler.rb create mode 100644 tools/vendor/ceedling/bin/cli_helper.rb create mode 100644 tools/vendor/ceedling/bin/configinator.rb create mode 100644 tools/vendor/ceedling/bin/mixinator.rb create mode 100644 tools/vendor/ceedling/bin/mixins.rb create mode 100644 tools/vendor/ceedling/bin/objects.yml create mode 100644 tools/vendor/ceedling/bin/path_validator.rb create mode 100644 tools/vendor/ceedling/bin/projectinator.rb create mode 100644 tools/vendor/ceedling/bin/versionator.rb create mode 100644 tools/vendor/ceedling/lib/ceedling/application.rb create mode 100644 tools/vendor/ceedling/lib/ceedling/backtrace.gdb delete mode 100644 tools/vendor/ceedling/lib/ceedling/build_invoker_utils.rb create mode 100644 tools/vendor/ceedling/lib/ceedling/config_walkinator.rb delete mode 100644 tools/vendor/ceedling/lib/ceedling/debugger_utils.rb create mode 100644 tools/vendor/ceedling/lib/ceedling/exceptions.rb create mode 100644 tools/vendor/ceedling/lib/ceedling/file_path_collection_utils.rb delete mode 100644 tools/vendor/ceedling/lib/ceedling/file_system_utils.rb create mode 100644 tools/vendor/ceedling/lib/ceedling/generator_test_results_backtrace.rb delete mode 100644 tools/vendor/ceedling/lib/ceedling/plugin_builder.rb delete mode 100644 tools/vendor/ceedling/lib/ceedling/project_config_manager.rb delete mode 100644 tools/vendor/ceedling/lib/ceedling/project_file_loader.rb delete mode 100644 tools/vendor/ceedling/lib/ceedling/streaminator.rb delete mode 100644 tools/vendor/ceedling/lib/ceedling/streaminator_helper.rb delete mode 100644 tools/vendor/ceedling/lib/ceedling/target_loader.rb create mode 100644 tools/vendor/ceedling/lib/ceedling/test_runner_manager.rb create mode 100644 tools/vendor/ceedling/lib/ceedling/tool_validator.rb delete mode 100644 tools/vendor/ceedling/lib/ceedling/unity_utils.rb delete mode 100644 tools/vendor/ceedling/lib/ceedling/version.rb create mode 100644 tools/vendor/ceedling/lib/version.rb create mode 100644 tools/vendor/ceedling/license.txt create mode 100644 tools/vendor/ceedling/plugins/beep/config/defaults_beep.rb delete mode 100644 tools/vendor/ceedling/plugins/beep/lib/beep_tools.rb delete mode 100644 tools/vendor/ceedling/plugins/colour_report/README.md delete mode 100644 tools/vendor/ceedling/plugins/colour_report/lib/colour_report.rb delete mode 100644 tools/vendor/ceedling/plugins/compile_commands_json/README.md delete mode 100644 tools/vendor/ceedling/plugins/compile_commands_json/lib/compile_commands_json.rb create mode 100644 tools/vendor/ceedling/plugins/compile_commands_json_db/README.md create mode 100644 tools/vendor/ceedling/plugins/compile_commands_json_db/lib/compile_commands_json_db.rb create mode 100644 tools/vendor/ceedling/plugins/dependencies/Rakefile create mode 100644 tools/vendor/ceedling/plugins/dependencies/example/boss/project.yml create mode 100644 tools/vendor/ceedling/plugins/dependencies/example/boss/src/boss.c create mode 100644 tools/vendor/ceedling/plugins/dependencies/example/boss/src/boss.h create mode 100644 tools/vendor/ceedling/plugins/dependencies/example/boss/src/main.c create mode 100644 tools/vendor/ceedling/plugins/dependencies/example/boss/test/test_boss.c create mode 100644 tools/vendor/ceedling/plugins/dependencies/example/supervisor/project.yml create mode 100644 tools/vendor/ceedling/plugins/dependencies/example/supervisor/src/supervisor.c create mode 100644 tools/vendor/ceedling/plugins/dependencies/example/supervisor/src/supervisor.h create mode 100644 tools/vendor/ceedling/plugins/dependencies/example/supervisor/test/test_supervisor.c create mode 100644 tools/vendor/ceedling/plugins/dependencies/example/version.tar.gzip delete mode 100644 tools/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/project.yml delete mode 100644 tools/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/rakefile.rb delete mode 100644 tools/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/src/bar.c delete mode 100644 tools/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/src/custom_types.h delete mode 100644 tools/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/src/display.c delete mode 100644 tools/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/src/foo.c delete mode 100644 tools/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/src/foo.h delete mode 100644 tools/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/src/subfolder/zzz.c delete mode 100644 tools/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/src/subfolder/zzz.h delete mode 100644 tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/examples/driver_testing/driver.h delete mode 100644 tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/examples/embedded_ui/DISPLAY.h delete mode 100644 tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/examples/embedded_ui/SYSTEM.h delete mode 100644 tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/examples/embedded_ui/UI.h delete mode 100644 tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/test/fff_test_global_cpp.cpp rename tools/vendor/ceedling/plugins/{fake_function_framework => fff}/README.md (85%) rename tools/vendor/ceedling/plugins/{fake_function_framework => fff}/Rakefile (50%) create mode 100644 tools/vendor/ceedling/plugins/fff/config/fff.yml create mode 100644 tools/vendor/ceedling/plugins/fff/examples/fff_example/project.yml create mode 100644 tools/vendor/ceedling/plugins/fff/examples/fff_example/src/bar.c rename tools/vendor/ceedling/plugins/{fake_function_framework => fff}/examples/fff_example/src/bar.h (54%) create mode 100644 tools/vendor/ceedling/plugins/fff/examples/fff_example/src/custom_types.h create mode 100644 tools/vendor/ceedling/plugins/fff/examples/fff_example/src/display.c rename tools/vendor/ceedling/plugins/{fake_function_framework => fff}/examples/fff_example/src/display.h (60%) rename tools/vendor/ceedling/plugins/{fake_function_framework => fff}/examples/fff_example/src/event_processor.c (82%) rename tools/vendor/ceedling/plugins/{fake_function_framework => fff}/examples/fff_example/src/event_processor.h (50%) create mode 100644 tools/vendor/ceedling/plugins/fff/examples/fff_example/src/foo.c create mode 100644 tools/vendor/ceedling/plugins/fff/examples/fff_example/src/foo.h create mode 100644 tools/vendor/ceedling/plugins/fff/examples/fff_example/src/subfolder/zzz.c create mode 100644 tools/vendor/ceedling/plugins/fff/examples/fff_example/src/subfolder/zzz.h rename tools/vendor/ceedling/plugins/{fake_function_framework => fff}/examples/fff_example/test/test_event_processor.c (82%) rename tools/vendor/ceedling/plugins/{fake_function_framework => fff}/examples/fff_example/test/test_foo.c (73%) rename tools/vendor/ceedling/plugins/{fake_function_framework/lib/fake_function_framework.rb => fff/lib/fff.rb} (72%) rename tools/vendor/ceedling/plugins/{fake_function_framework => fff}/lib/fff_mock_generator.rb (93%) rename tools/vendor/ceedling/plugins/{fake_function_framework => fff}/spec/fff_mock_header_generator_spec.rb (97%) rename tools/vendor/ceedling/plugins/{fake_function_framework => fff}/spec/fff_mock_source_generator_spec.rb (93%) rename tools/vendor/ceedling/plugins/{fake_function_framework => fff}/spec/header_generator.rb (79%) rename tools/vendor/ceedling/plugins/{fake_function_framework => fff}/spec/spec_helper.rb (93%) rename tools/vendor/ceedling/plugins/{fake_function_framework => fff}/src/fff_unity_helper.h (77%) rename tools/vendor/ceedling/plugins/{fake_function_framework => fff}/vendor/fff/LICENSE (100%) rename tools/vendor/ceedling/plugins/{fake_function_framework => fff}/vendor/fff/Makefile (100%) rename tools/vendor/ceedling/plugins/{fake_function_framework => fff}/vendor/fff/README.md (100%) rename tools/vendor/ceedling/plugins/{fake_function_framework => fff}/vendor/fff/buildandtest (100%) rename tools/vendor/ceedling/plugins/{fake_function_framework => fff}/vendor/fff/examples/Makefile (100%) rename tools/vendor/ceedling/plugins/{fake_function_framework => fff}/vendor/fff/examples/driver_testing/Makefile (100%) rename tools/vendor/ceedling/plugins/{fake_function_framework => fff}/vendor/fff/examples/driver_testing/driver.c (58%) create mode 100644 tools/vendor/ceedling/plugins/fff/vendor/fff/examples/driver_testing/driver.h rename tools/vendor/ceedling/plugins/{fake_function_framework => fff}/vendor/fff/examples/driver_testing/driver.test.cpp (75%) rename tools/vendor/ceedling/plugins/{fake_function_framework => fff}/vendor/fff/examples/driver_testing/driver.test.fff.cpp (84%) rename tools/vendor/ceedling/plugins/{fake_function_framework => fff}/vendor/fff/examples/driver_testing/hardware_abstraction.h (55%) rename tools/vendor/ceedling/plugins/{fake_function_framework => fff}/vendor/fff/examples/driver_testing/registers.h (50%) create mode 100644 tools/vendor/ceedling/plugins/fff/vendor/fff/examples/embedded_ui/DISPLAY.h rename tools/vendor/ceedling/plugins/{fake_function_framework => fff}/vendor/fff/examples/embedded_ui/Kata.txt (100%) rename tools/vendor/ceedling/plugins/{fake_function_framework => fff}/vendor/fff/examples/embedded_ui/Makefile (100%) create mode 100644 tools/vendor/ceedling/plugins/fff/vendor/fff/examples/embedded_ui/SYSTEM.h rename tools/vendor/ceedling/plugins/{fake_function_framework => fff}/vendor/fff/examples/embedded_ui/UI.c (69%) create mode 100644 tools/vendor/ceedling/plugins/fff/vendor/fff/examples/embedded_ui/UI.h rename tools/vendor/ceedling/plugins/{fake_function_framework => fff}/vendor/fff/examples/embedded_ui/UI_test_ansic.c (93%) rename tools/vendor/ceedling/plugins/{fake_function_framework => fff}/vendor/fff/examples/embedded_ui/UI_test_cpp.cpp (90%) rename tools/vendor/ceedling/plugins/{fake_function_framework => fff}/vendor/fff/examples/embedded_ui/test_suite_template.c (60%) rename tools/vendor/ceedling/plugins/{fake_function_framework => fff}/vendor/fff/fakegen.rb (97%) rename tools/vendor/ceedling/plugins/{fake_function_framework => fff}/vendor/fff/fff.h (99%) rename tools/vendor/ceedling/plugins/{fake_function_framework => fff}/vendor/fff/gtest/Makefile (100%) rename tools/vendor/ceedling/plugins/{fake_function_framework => fff}/vendor/fff/gtest/gtest-all.cc (100%) rename tools/vendor/ceedling/plugins/{fake_function_framework => fff}/vendor/fff/gtest/gtest-main.cc (100%) rename tools/vendor/ceedling/plugins/{fake_function_framework => fff}/vendor/fff/gtest/gtest.h (99%) rename tools/vendor/ceedling/plugins/{fake_function_framework => fff}/vendor/fff/test/Makefile (100%) rename tools/vendor/ceedling/plugins/{fake_function_framework => fff}/vendor/fff/test/c_test_framework.h (56%) rename tools/vendor/ceedling/plugins/{fake_function_framework => fff}/vendor/fff/test/fff_test_c.c (92%) rename tools/vendor/ceedling/plugins/{fake_function_framework => fff}/vendor/fff/test/fff_test_cpp.cpp (77%) rename tools/vendor/ceedling/plugins/{fake_function_framework => fff}/vendor/fff/test/fff_test_global_c.c (89%) create mode 100644 tools/vendor/ceedling/plugins/fff/vendor/fff/test/fff_test_global_cpp.cpp rename tools/vendor/ceedling/plugins/{fake_function_framework => fff}/vendor/fff/test/global_fakes.c (65%) rename tools/vendor/ceedling/plugins/{fake_function_framework => fff}/vendor/fff/test/global_fakes.h (78%) rename tools/vendor/ceedling/plugins/{fake_function_framework => fff}/vendor/fff/test/test_cases.include (100%) delete mode 100644 tools/vendor/ceedling/plugins/gcov/assets/template.erb create mode 100644 tools/vendor/ceedling/plugins/gcov/config/defaults.yml delete mode 100644 tools/vendor/ceedling/plugins/html_tests_report/README.md delete mode 100644 tools/vendor/ceedling/plugins/json_tests_report/README.md delete mode 100644 tools/vendor/ceedling/plugins/json_tests_report/lib/json_tests_report.rb delete mode 100644 tools/vendor/ceedling/plugins/junit_tests_report/README.md delete mode 100644 tools/vendor/ceedling/plugins/junit_tests_report/lib/junit_tests_report.rb create mode 100644 tools/vendor/ceedling/plugins/module_generator/Rakefile create mode 100644 tools/vendor/ceedling/plugins/module_generator/assets/stubby1.h create mode 100644 tools/vendor/ceedling/plugins/module_generator/assets/stubby2.h create mode 100644 tools/vendor/ceedling/plugins/module_generator/example/project.yml delete mode 100644 tools/vendor/ceedling/plugins/raw_output_report/README.md delete mode 100644 tools/vendor/ceedling/plugins/raw_output_report/lib/raw_output_report.rb create mode 100644 tools/vendor/ceedling/plugins/report_build_warnings_log/README.md create mode 100644 tools/vendor/ceedling/plugins/report_build_warnings_log/config/defaults.yml create mode 100644 tools/vendor/ceedling/plugins/report_build_warnings_log/lib/report_build_warnings_log.rb create mode 100644 tools/vendor/ceedling/plugins/report_tests_gtestlike_stdout/README.md rename tools/vendor/ceedling/plugins/{stdout_gtestlike_tests_report => report_tests_gtestlike_stdout}/assets/template.erb (91%) create mode 100644 tools/vendor/ceedling/plugins/report_tests_gtestlike_stdout/config/report_tests_gtestlike_stdout.yml create mode 100644 tools/vendor/ceedling/plugins/report_tests_gtestlike_stdout/lib/report_tests_gtestlike_stdout.rb create mode 100644 tools/vendor/ceedling/plugins/report_tests_ide_stdout/README.md create mode 100644 tools/vendor/ceedling/plugins/report_tests_ide_stdout/config/report_tests_ide_stdout.yml create mode 100644 tools/vendor/ceedling/plugins/report_tests_ide_stdout/lib/report_tests_ide_stdout.rb create mode 100644 tools/vendor/ceedling/plugins/report_tests_log_factory/README.md create mode 100644 tools/vendor/ceedling/plugins/report_tests_log_factory/config/defaults.yml create mode 100644 tools/vendor/ceedling/plugins/report_tests_log_factory/lib/cppunit_tests_reporter.rb rename tools/vendor/ceedling/plugins/{html_tests_report/lib/html_tests_report.rb => report_tests_log_factory/lib/html_tests_reporter.rb} (75%) create mode 100644 tools/vendor/ceedling/plugins/report_tests_log_factory/lib/json_tests_reporter.rb create mode 100644 tools/vendor/ceedling/plugins/report_tests_log_factory/lib/junit_tests_reporter.rb create mode 100644 tools/vendor/ceedling/plugins/report_tests_log_factory/lib/report_tests_log_factory.rb create mode 100644 tools/vendor/ceedling/plugins/report_tests_log_factory/lib/tests_reporter.rb create mode 100644 tools/vendor/ceedling/plugins/report_tests_log_factory/sample_html_report.png create mode 100644 tools/vendor/ceedling/plugins/report_tests_pretty_stdout/README.md rename tools/vendor/ceedling/plugins/{stdout_pretty_tests_report => report_tests_pretty_stdout}/assets/template.erb (74%) create mode 100644 tools/vendor/ceedling/plugins/report_tests_pretty_stdout/config/report_tests_pretty_stdout.yml create mode 100644 tools/vendor/ceedling/plugins/report_tests_pretty_stdout/lib/report_tests_pretty_stdout.rb create mode 100644 tools/vendor/ceedling/plugins/report_tests_raw_output_log/README.md create mode 100644 tools/vendor/ceedling/plugins/report_tests_raw_output_log/lib/report_tests_raw_output_log.rb create mode 100644 tools/vendor/ceedling/plugins/report_tests_teamcity_stdout/README.md create mode 100644 tools/vendor/ceedling/plugins/report_tests_teamcity_stdout/config/defaults.yml create mode 100644 tools/vendor/ceedling/plugins/report_tests_teamcity_stdout/config/report_tests_teamcity_stdout.yml create mode 100644 tools/vendor/ceedling/plugins/report_tests_teamcity_stdout/lib/report_tests_teamcity_stdout.rb delete mode 100644 tools/vendor/ceedling/plugins/stdout_gtestlike_tests_report/README.md delete mode 100644 tools/vendor/ceedling/plugins/stdout_gtestlike_tests_report/assets/template.erb copy delete mode 100644 tools/vendor/ceedling/plugins/stdout_gtestlike_tests_report/config/stdout_gtestlike_tests_report.yml delete mode 100644 tools/vendor/ceedling/plugins/stdout_gtestlike_tests_report/lib/stdout_gtestlike_tests_report.rb delete mode 100644 tools/vendor/ceedling/plugins/stdout_ide_tests_report/README.md delete mode 100644 tools/vendor/ceedling/plugins/stdout_ide_tests_report/config/stdout_ide_tests_report.yml delete mode 100644 tools/vendor/ceedling/plugins/stdout_ide_tests_report/lib/stdout_ide_tests_report.rb delete mode 100644 tools/vendor/ceedling/plugins/stdout_pretty_tests_report/README.md delete mode 100644 tools/vendor/ceedling/plugins/stdout_pretty_tests_report/config/stdout_pretty_tests_report.yml delete mode 100644 tools/vendor/ceedling/plugins/stdout_pretty_tests_report/lib/stdout_pretty_tests_report.rb delete mode 100644 tools/vendor/ceedling/plugins/subprojects/README.md delete mode 100644 tools/vendor/ceedling/plugins/subprojects/config/defaults.yml delete mode 100644 tools/vendor/ceedling/plugins/subprojects/lib/subprojects.rb delete mode 100644 tools/vendor/ceedling/plugins/subprojects/subprojects.rake delete mode 100644 tools/vendor/ceedling/plugins/teamcity_tests_report/README.md delete mode 100644 tools/vendor/ceedling/plugins/teamcity_tests_report/config/teamcity_tests_report.yml delete mode 100644 tools/vendor/ceedling/plugins/teamcity_tests_report/lib/teamcity_tests_report.rb delete mode 100644 tools/vendor/ceedling/plugins/warnings_report/README.md delete mode 100644 tools/vendor/ceedling/plugins/warnings_report/lib/warnings_report.rb delete mode 100644 tools/vendor/ceedling/plugins/xml_tests_report/README.md delete mode 100644 tools/vendor/ceedling/plugins/xml_tests_report/lib/xml_tests_report.rb create mode 100644 tools/vendor/ceedling/vendor/c_exception/license.txt create mode 100644 tools/vendor/ceedling/vendor/cmock/LICENSE.txt create mode 100644 tools/vendor/ceedling/vendor/diy/LICENSE.txt create mode 100644 tools/vendor/ceedling/vendor/unity/LICENSE.txt mode change 100644 => 100755 tools/vendor/ceedling/vendor/unity/auto/__init__.py mode change 100644 => 100755 tools/vendor/ceedling/vendor/unity/auto/extract_version.py mode change 100644 => 100755 tools/vendor/ceedling/vendor/unity/auto/stylize_as_junit.py mode change 100644 => 100755 tools/vendor/ceedling/vendor/unity/auto/unity_test_summary.py delete mode 100644 tools/waf-pubkey.asc delete mode 100644 tools/waf-tools/doxygen.py mode change 100644 => 100755 tools/waf-tools/f_axivion.py mode change 100644 => 100755 tools/waf-tools/f_bootstrap_library_project.py mode change 100644 => 100755 tools/waf-tools/f_check_db_vars.py delete mode 100644 tools/waf-tools/f_clang_format.py create mode 100755 tools/waf-tools/f_doxygen.py delete mode 100644 tools/waf-tools/f_guidelines.py mode change 100644 => 100755 tools/waf-tools/f_hcg.py mode change 100644 => 100755 tools/waf-tools/f_helpers.py mode change 100644 => 100755 tools/waf-tools/f_j_flash.py mode change 100644 => 100755 tools/waf-tools/f_lauterbach.py delete mode 100644 tools/waf-tools/f_miniconda_env.py mode change 100644 => 100755 tools/waf-tools/f_node_helper.py mode change 100644 => 100755 tools/waf-tools/f_ozone.py delete mode 100644 tools/waf-tools/f_pylint.py mode change 100644 => 100755 tools/waf-tools/f_sphinx_build.py mode change 100644 => 100755 tools/waf-tools/f_ti_arm_cgt.py mode change 100644 => 100755 tools/waf-tools/f_ti_arm_cgt_cc_options.py mode change 100644 => 100755 tools/waf-tools/f_ti_arm_helper.py mode change 100644 => 100755 tools/waf-tools/f_ti_arm_tools.py mode change 100644 => 100755 tools/waf-tools/f_ti_color_arm_cgt.py mode change 100644 => 100755 tools/waf-tools/f_unit_test.py mode change 100644 => 100755 tools/waf-tools/f_vscode.py delete mode 100644 tools/waf-tools/why.py delete mode 100644 tools/waf-verify-sig.py delete mode 100644 waf.bat delete mode 100755 waf.sh mode change 100644 => 100755 wscript diff --git a/.clang-format b/.clang-format index ae7fad80..36ab1c5d 100644 --- a/.clang-format +++ b/.clang-format @@ -1,22 +1,57 @@ +--- Language: Cpp +# BasedOnStyle: LLVM AccessModifierOffset: -2 AlignAfterOpenBracket: AlwaysBreak -AlignArrayOfStructures: None # clang-bug -AlignConsecutiveMacros: Consecutive -AlignConsecutiveAssignments: true -AlignConsecutiveBitFields: Consecutive -AlignConsecutiveDeclarations: false +AlignArrayOfStructures: None +AlignConsecutiveMacros: + Enabled: true + AcrossEmptyLines: false + AcrossComments: false + AlignCompound: false + AlignFunctionPointers: false + PadOperators: false +AlignConsecutiveAssignments: + Enabled: true + AcrossEmptyLines: false + AcrossComments: false + AlignCompound: false + AlignFunctionPointers: false + PadOperators: true +AlignConsecutiveBitFields: + Enabled: true + AcrossEmptyLines: false + AcrossComments: false + AlignCompound: false + AlignFunctionPointers: false + PadOperators: false +AlignConsecutiveDeclarations: + Enabled: false + AcrossEmptyLines: false + AcrossComments: false + AlignCompound: false + AlignFunctionPointers: false + PadOperators: false +AlignConsecutiveShortCaseStatements: + Enabled: false + AcrossEmptyLines: false + AcrossComments: false + AlignCaseColons: false AlignEscapedNewlines: Left AlignOperands: Align -AlignTrailingComments: true +AlignTrailingComments: + Kind: Always + OverEmptyLines: 0 AllowAllArgumentsOnNextLine: true -AllowAllConstructorInitializersOnNextLine: true AllowAllParametersOfDeclarationOnNextLine: false +AllowBreakBeforeNoexceptSpecifier: Never AllowShortBlocksOnASingleLine: false AllowShortCaseLabelsOnASingleLine: false +AllowShortCompoundRequirementOnASingleLine: false +AllowShortEnumsOnASingleLine: false AllowShortFunctionsOnASingleLine: InlineOnly AllowShortLambdasOnASingleLine: All -AllowShortIfStatementsOnASingleLine: false +AllowShortIfStatementsOnASingleLine: Never AllowShortLoopsOnASingleLine: false AlwaysBreakAfterDefinitionReturnType: None AlwaysBreakAfterReturnType: None @@ -44,24 +79,24 @@ BraceWrapping: SplitEmptyFunction: true SplitEmptyRecord: true SplitEmptyNamespace: true +BreakAdjacentStringLiterals: true +BreakAfterAttributes: Leave +BreakArrays: true BreakBeforeBinaryOperators: None BreakBeforeConceptDeclarations: true BreakBeforeBraces: Attach -BreakBeforeInheritanceComma: false +BreakBeforeInlineASMColon: OnlyMultiline BreakInheritanceList: BeforeColon BreakBeforeTernaryOperators: true -BreakConstructorInitializersBeforeComma: false BreakConstructorInitializers: BeforeColon BreakAfterJavaFieldAnnotations: false BreakStringLiterals: true ColumnLimit: 120 CommentPragmas: "^ IWYU pragma:" CompactNamespaces: false -ConstructorInitializerAllOnOneLineOrOnePerLine: false ConstructorInitializerIndentWidth: 4 ContinuationIndentWidth: 4 Cpp11BracedListStyle: true -DeriveLineEnding: true DerivePointerAlignment: false DisableFormat: false EmptyLineAfterAccessModifier: Never @@ -107,30 +142,45 @@ IncludeIsMainSourceRegex: "" IndentAccessModifiers: false IndentCaseLabels: true IndentCaseBlocks: false + IndentGotoLabels: true IndentPPDirectives: None IndentExternBlock: AfterExternBlock -IndentRequires: false +IndentRequiresClause: true IndentWidth: 4 -IndentWrappedFunctionNames: true +IndentWrappedFunctionNames: false +InsertBraces: false +InsertNewlineAtEOF: false InsertTrailingCommas: None +IntegerLiteralSeparator: + Binary: 0 + BinaryMinDigits: 0 + Decimal: 0 + DecimalMinDigits: 0 + Hex: 0 + HexMinDigits: 0 JavaScriptQuotes: Leave JavaScriptWrapImports: true KeepEmptyLinesAtTheStartOfBlocks: false +KeepEmptyLinesAtEOF: true LambdaBodyIndentation: Signature +LineEnding: DeriveLF MacroBlockBegin: "" MacroBlockEnd: "" MaxEmptyLinesToKeep: 1 NamespaceIndentation: None ObjCBinPackProtocolList: Auto -ObjCBlockIndentWidth: 2 +ObjCBlockIndentWidth: 4 ObjCBreakBeforeNestedBlockParam: true ObjCSpaceAfterProperty: false ObjCSpaceBeforeProtocolList: true +PackConstructorInitializers: BinPack PenaltyBreakAssignment: 20 PenaltyBreakBeforeFirstCallParameter: 19 PenaltyBreakComment: 300 PenaltyBreakFirstLessLess: 120 +PenaltyBreakOpenParenthesis: 0 +PenaltyBreakScopeResolution: 500 PenaltyBreakString: 1000 PenaltyBreakTemplateDeclaration: 10 PenaltyExcessCharacter: 1000000 @@ -138,12 +188,20 @@ PenaltyReturnTypeOnItsOwnLine: 100000 PenaltyIndentedWhitespace: 0 PointerAlignment: Right PPIndentWidth: -1 +QualifierAlignment: Leave ReferenceAlignment: Pointer ReflowComments: false +RemoveBracesLLVM: false +RemoveParentheses: Leave +RemoveSemicolon: false +RequiresClausePosition: OwnLine +RequiresExpressionIndentation: OuterScope +SeparateDefinitionBlocks: Leave ShortNamespaceLines: 1 +SkipMacroDefinitionBody: false SortIncludes: CaseSensitive SortJavaStaticImport: Before -SortUsingDeclarations: true +SortUsingDeclarations: LexicographicNumeric SpaceAfterCStyleCast: false SpaceAfterLogicalNot: false SpaceAfterTemplateKeyword: true @@ -152,20 +210,29 @@ SpaceBeforeCaseColon: false SpaceBeforeCpp11BracedList: false SpaceBeforeCtorInitializerColon: true SpaceBeforeInheritanceColon: true +SpaceBeforeJsonColon: false SpaceBeforeParens: ControlStatements SpaceAroundPointerQualifiers: Default +SpaceBeforeParensOptions: + AfterControlStatements: true + AfterForeachMacros: true + AfterFunctionDefinitionName: false + AfterFunctionDeclarationName: false + AfterIfMacros: true + AfterOverloadedOperator: false + AfterPlacementOperator: true + AfterRequiresInClause: false + AfterRequiresInExpression: false + BeforeNonEmptyParentheses: false SpaceBeforeRangeBasedForLoopColon: true SpaceInEmptyBlock: false -SpaceInEmptyParentheses: false SpacesBeforeTrailingComments: 2 SpacesInAngles: Never -SpacesInConditionalStatement: false SpacesInContainerLiterals: true -SpacesInCStyleCastParentheses: false SpacesInLineCommentPrefix: Minimum: 1 Maximum: -1 -SpacesInParentheses: false +SpacesInParens: Never SpacesInSquareBrackets: false SpaceBeforeSquareBrackets: false BitFieldColonSpacing: Both @@ -173,6 +240,7 @@ Standard: Latest StatementAttributeLikeMacros: [] StatementMacros: [] TabWidth: 4 -UseCRLF: true UseTab: Never +VerilogBreakBetweenInstancePorts: true WhitespaceSensitiveMacros: [] +--- diff --git a/.gitattributes b/.gitattributes index e407a225..bbb455d0 100644 --- a/.gitattributes +++ b/.gitattributes @@ -27,3 +27,10 @@ tests/axivion/qualification-test/qualification-kit/**/*.cpp -diff -merge -text tests/axivion/qualification-test/qualification-kit/**/*.h -diff -merge -text tests/axivion/qualification-test/qualification-kit/**/*.json -diff -merge -text tests/axivion/qualification-test/qualification-kit/**/*.py -diff -merge -text + +*.sln text eol=crlf + +*.png binary +*.jpg binary + +*.sh text eol=lf diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index bbc35ca7..4eb09948 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -27,5 +27,5 @@ system or similar that would allow us to integrate input from GitHub Pull Requests, therefore GitHub Pull Requests are currently not accepted. We would be very pleased if you intend to contribute to this project. Please -contact us first at info@foxbms.org in order to discuss your contribution and +contact us first at in order to discuss your contribution and how it can be applied to the project. diff --git a/.gitignore b/.gitignore index bbf526bc..29a3ad63 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,6 @@ /.vscode/ +/src/.vscode/ +/tests/unit/.vscode/ /build/ /build-tools-tests/ /*build/ @@ -7,17 +9,26 @@ /conf/hcg/source/* /conf/hcg/*_bak.dil /conf/hcg/*_bak.hcg +/tmp/* +*/tmp/* *c4che* /foxbms*/ tools/*waf3-*/ tools/waf-sig* +tools/utils/waf-sig* .lock-waf* +.wafpickle-* *.bz2 *.gz *.zip *.7z *.stats +*.html + +# +libbuild/ +lib-build/ # spelling dictionary.dic @@ -53,10 +64,14 @@ __pycache__ *.~* *.~$* +~$* **/foxbms-2_axivion_report*.json +**/foxbms_spa_report*.json spa-artifacts/ +*.o +*.obj *.exe /races.txt @@ -65,3 +80,14 @@ spa-artifacts/ *.asc *.tmp + +# coverage files +.coverage +htmlcov/ + +*.mk +*.rsp +*.dmr +*.tmw +buildInfo.* +codeInfo.* diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 00000000..8e1ad865 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,411 @@ +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# All rights reserved. +# +# SPDX-License-Identifier: BSD-3-Clause +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# We kindly request you to use one or more of the following phrases to refer to +# foxBMS in your hardware, software, documentation or advertising materials: +# +# - "This product uses parts of foxBMS®" +# - "This product includes parts of foxBMS®" +# - "This product is derived from foxBMS®" + +exclude: | + (?x)^( + src/os/freertos/.*\.[c|h]| + src/os/freertos/.*\.url| + src/os/freertos/\.github/.*| + src/os/freertos/History\.txt| + src/os/freertos/include/.*| + src/os/freertos/LICENSE\.md| + src/os/freertos/portable/.*| + src/os/freertos/README\.md| + tests/axivion/addon/.*\.py| + tests/axivion/addon-test/.*\.(c|h|cpp)| + tests/axivion/compiler-errata/ti-cgt-arm.*| + tests/axivion/qualification-test/qualification-kit.*| + tests/hil/server/pi_pico/fault_injector/mcp23017\.py| + tools/dbc/third-party/.*| + tools/vendor/ceedling/.*| + tools/waf + )$ +repos: + - repo: meta + hooks: + # - id: check-useless-excludes + - id: check-hooks-apply + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v4.6.0 + hooks: + - id: check-added-large-files + - id: check-ast + files: | + (?x)^( + .*\.py| + .*wscript + )$ + - id: check-builtin-literals + files: | + (?x)^( + .*\.py| + .*wscript + )$ + - id: check-case-conflict + - id: check-docstring-first + files: | + (?x)^( + .*\.py| + .*wscript + )$ + - id: check-executables-have-shebangs + #- id: check-illegal-windows-names + - id: check-json + - id: check-merge-conflict + - id: check-shebang-scripts-are-executable + - id: check-toml + - id: check-vcs-permalinks + - id: check-yaml + exclude: \.gitlab-ci\.yml + args: [--allow-multiple-documents] + - id: debug-statements + files: | + (?x)^( + .*(\.py)| + .*wscript + )$ + - id: destroyed-symlinks + - id: detect-private-key + - id: end-of-file-fixer + - id: fix-byte-order-marker + - id: forbid-submodules + - id: mixed-line-ending + args: [--fix=no] + - id: name-tests-test + args: [--unittest] + exclude: | + (?x)^( + tests/axivion/.*\.py| + tests/can/check_ids\.py| + tests/can/check_implemented\.py| + tests/ccs/ccs_build_helper\.py| + tests/c-std/c-std-test\.py| + tests/dbc/check_parseable\.py| + tests/dbc/overlapping-signals\.py| + tests/hil/.*\.py| + tests/unit/axivion/call_irlink\.py + )$ + - id: no-commit-to-branch + args: [--branch, master] + - id: pretty-format-json + args: [--indent, "2", --no-sort-keys, --autofix] + exclude: | + (?x)^( + .*\.(ipynb)| + tests/axivion/ci_config\.json| + tests/unit/axivion/compiler_config\.json + )$ + - id: requirements-txt-fixer + - id: trailing-whitespace + exclude: (?x)^( + .*\.(dil)| + docs/software/architecture/img/axivion_architecture.svg| + src/app/driver/afe/nxp/mc33775a/vendor/.*\.[c|h] + )$ + + - repo: https://github.com/astral-sh/ruff-pre-commit + rev: v0.5.1 + hooks: + - id: ruff + args: [--fix] + - id: ruff-format + - repo: https://github.com/asottile/pyupgrade + rev: v3.16.0 + hooks: + - id: pyupgrade + files: | + (?x)^( + .*(\.py)| + .*wscript + )$ + - repo: local + hooks: + - id: check-file-name + name: file name check + entry: file names must be alphanumeric and lower-case + language: fail + files: "[^a-z0-9._/-]" + exclude: | + (?x)^( + .*README\.md| + \.github/PULL_REQUEST_TEMPLATE\.md| + \.gitlab/CODEOWNERS| + BSD-3-Clause\.txt| + CC-BY-4\.0\.txt| + CHANGELOG\.md| + CITATION\.cff| + INSTALL\.md| + LICENSE\.md| + src/app/driver/afe/nxp/mc33775a/vendor/MC33775A\.h| + src/os/freertos/README\.ti-halcogen\.md + )$ + - repo: local + hooks: + - id: pylint + name: pylint + entry: pylint + language: system + types: [python] + files: | + (?x)^( + .*(\.py)| + .*wscript + )$ + require_serial: true + - repo: https://github.com/pre-commit/mirrors-clang-format + rev: "v18.1.8" + hooks: + - id: clang-format + args: [--style=file] + types_or: [c] + - repo: local + hooks: + - id: check-license-header + name: check Python-files for the correct license header + files: | + (?x)^( + .*(\.py)| + .*wscript + )$ + exclude: | + (?x)^( + tests/hil/.*\.py + )$ + language: system + entry: python cli/pre_commit_scripts/check_license_info.py --file-type=py + - id: check-license-header + name: check C-files for the correct license header + types: [c] + language: system + entry: python cli/pre_commit_scripts/check_license_info.py --file-type=c + exclude: | + (?x)^( + src/app/driver/afe/nxp/mc33775a/nxp_mc33775a-ll\.[c|h]| + src/app/driver/afe/nxp/mc33775a/vendor/.*| + src/app/driver/sbc/fs8x_driver/.*| + tests/axivion/config-test/test_macro-names\.[c|h]|| + tests/axivion/config-test/test_parameter-names-\d\.[c|h] + )$ + - id: check-license-header + name: check YAML-files for the correct license header + types: [yaml] + language: system + entry: python cli/pre_commit_scripts/check_license_info.py --file-type=yaml + exclude: | + (?x)^( + .*\.clang-format| + conf/unit/project_posix\.yml| + conf/unit/project_win32\.yml| + tests/hil/.* + )$ + - id: check-license-header + name: check toml-files for the correct license header + types: [toml] + language: system + entry: python cli/pre_commit_scripts/check_license_info.py --file-type=toml + - id: check-license-header + name: check pwsh-files for the correct license header + types: [powershell] + language: system + entry: python cli/pre_commit_scripts/check_license_info.py --file-type=pwsh + - id: check-license-header + name: check bat-files for the correct license header + types: [batch] + exclude: tests/hil/.* + language: system + entry: python cli/pre_commit_scripts/check_license_info.py --file-type=batch + - id: check-license-header + name: check shell-files for the correct license header + types: [shell] + language: system + entry: python cli/pre_commit_scripts/check_license_info.py --file-type=shell + - id: check-license-header + name: check dot-files for the correct license header + language: system + entry: python cli/pre_commit_scripts/check_license_info.py --file-type=dot + files: .*(\.dot) + - id: check-file-encoding + name: check C-files use the ASCII encoding + language: system + entry: python cli/pre_commit_scripts/check_encoding.py --encoding=ascii + types: [c] + exclude: src/app/driver/afe/nxp/mc33775a/vendor/.* + - id: check-file-encoding + name: check sym/dbc-files use the ASCII encoding + language: system + entry: python cli/pre_commit_scripts/check_encoding.py --encoding=ascii + files: | + (?x)^( + .*\.(dbc)| + .*\.(sym) + )$ + - id: check-file-encoding + name: check all other files use UTF-8 encoding + language: system + entry: python cli/pre_commit_scripts/check_encoding.py --encoding=utf-8 + exclude_types: [c, png, jpeg, icon] + exclude: | + (?x)^( + .*\.(pptx)| + .*\.(vsdx) + )$ + - id: unique-file-names + name: check that file names are unique in the repository + language: system + entry: python cli/pre_commit_scripts/check_file_names.py + exclude: | + (?x)^( + .*\.clang-format| + .*\.dummy| + .*\.gitignore| + .*__init__.py| + .*__main__.py| + .*main.py| + .*misc.py| + .*README\.md| + .*wscript| + tests/axivion/axivion_config\.json| + tests/axivion/ci_config\.json| + tests/axivion/compiler_config\.json| + tests/unit/axivion/axivion_config\.json| + tests/unit/axivion/ci_config\.json| + tests/unit/axivion/compiler_config\.json| + tools/ide/vscode/.*/c_cpp_properties\.json| + tools/ide/vscode/.*/settings\.json| + tools/ide/vscode/.*/tasks\.json| + tools/vendor/ceedling/plugins/dependencies/example/boss/src/main\.c + )$ + - id: check-include-guard + name: check C-header use the correct include guard + language: system + entry: python cli/pre_commit_scripts/check_include_guard.py + types: [c] + exclude: | + (?x)^( + src/app/driver/afe/nxp/mc33775a/vendor/.*| + src/app/driver/sbc/fs8x_driver/.* + )$ + - id: check-c-section-markers + name: check C-files in 'src' use the correct section markers + language: system + entry: python cli/pre_commit_scripts/check_sections.py --file-type=src + types: [c] + exclude: | + (?x)^( + conf/tpl/test_c\.c| + conf/tpl/test_c\.h| + docs/developer-manual/style-guide/examples/c-006-test\.[c|h]| + docs/software/unit-tests/test_abc\.c| + src/app/driver/afe/nxp/mc33775a/vendor/.*| + src/app/driver/sbc/fs8x_driver/.*| + tests/axivion/axivion_preinc\.h| + tests/axivion/config-test/test_macro-names\.[c|h]| + tests/axivion/config-test/test_parameter-names-\d\.c| + tests/unit.* + )$ + - id: check-c-section-markers + name: check C-files in 'tests' use the correct section markers + language: system + entry: python cli/pre_commit_scripts/check_sections.py --file-type=test + types: [c] + exclude: | + (?x)^( + conf/tpl/c\.[h|c]| + docs/developer-manual/style-guide/examples/c-004\.c| + docs/developer-manual/style-guide/examples/c-005\.[c|h]| + docs/developer-manual/style-guide/examples/c-006-source\.[c|h]| + docs/developer-manual/style-guide/examples/c-007_abc\.[c|h]| + docs/developer-manual/style-guide/examples/c-007_abc_cfg\.c| + docs/developer-manual/style-guide/examples/c-007_abc_cfg\.h| + docs/developer-manual/style-guide/examples/c-008\.[c|h]| + docs/developer-manual/style-guide/examples/c-009\.c| + docs/developer-manual/style-guide/examples/c-011\.[c|h]| + docs/developer-manual/style-guide/examples/c-012\.c| + docs/developer-manual/style-guide/examples/c-013\.[c|h]| + docs/developer-manual/style-guide/examples/c-015\.[c|h]| + docs/developer-manual/style-guide/examples/c-016\.c| + docs/developer-manual/style-guide/examples/c-017\.c| + docs/developer-manual/style-guide/examples/c-018\.c| + docs/developer-manual/style-guide/examples/c-019\.c| + docs/developer-manual/style-guide/examples/c-020\.c| + docs/developer-manual/style-guide/examples/c-021\.c| + docs/developer-manual/style-guide/examples/c-022\.c| + docs/developer-manual/style-guide/examples/c-023\.c| + docs/developer-manual/style-guide/examples/c-024\.c| + docs/developer-manual/style-guide/examples/c-025\.c| + docs/developer-manual/style-guide/examples/c-026\.c| + docs/developer-manual/style-guide/examples/c-027\.c| + docs/developer-manual/style-guide/examples/c-028\.c| + docs/developer-manual/style-guide/examples/c-028-battery-defines\.c| + docs/developer-manual/style-guide/state-machine-example/state-machine\.[c|h]| + docs/software/build-process/misc/libproject-example\.[c|h]| + docs/software/modules/driver/can/can_how-to_tx_async\.[c|h]| + docs/software/modules/driver/can/can_how-to_tx_cyclic\.c| + docs/software/modules/engine/database/database_how-to\.c| + docs/software/modules/task/ftask/ftask_how-to\.c| + docs/software/unit-tests/abc\.c| + docs/software/unit-tests/abc\.c| + docs/software/unit-tests/abc\.h| + docs/software/unit-tests/run_abc\.c| + src/.*| + tests/axivion/axivion_preinc\.h| + tests/axivion/config-test/test_macro-names\.[c|h]| + tests/axivion/config-test/test_parameter-names-\d\.c| + tests/c-std/c-std-test\.c| + tests/unit/app/driver/afe/adi/common/ades183x.*| + tests/variants/lib-build/lib-build_main\.c| + tools/crc/crc-10_0x48f\.c| + tools/crc/crc-15_0xc599\.c + )$ + - id: check-doxygen-comments + name: check C-files have a well defined doxygen comment + language: system + entry: python cli/pre_commit_scripts/check_doxygen.py + types: [c] + exclude: | + (?x)^( + src/app/driver/afe/nxp/mc33775a/nxp_mc33775a-ll\.h| + src/app/driver/afe/nxp/mc33775a/vendor/.*| + src/app/driver/sbc/fs8x_driver/.*| + tests/axivion/axivion_preinc\.h | + tests/axivion/config-test/test_macro-names\.[c|h]| + tests/axivion/config-test/test_parameter-names-\d\.c + )$ + - repo: https://github.com/shellcheck-py/shellcheck-py + rev: v0.10.0.1 + hooks: + - id: shellcheck diff --git a/BSD-3-Clause.txt b/BSD-3-Clause.txt index 1b748b5a..690398ff 100644 --- a/BSD-3-Clause.txt +++ b/BSD-3-Clause.txt @@ -1,6 +1,6 @@ BSD 3-Clause License (BSD 3-Clause "New" or "Revised" License) -Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. All rights reserved. Redistribution and use in source and binary forms, with or without diff --git a/CITATION.cff b/CITATION.cff index db8197db..22b82bde 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -46,5 +46,5 @@ keywords: - "BMS" message: "If the foxBMS project contributes to a project that leads to a scientific publication, please acknowledge this fact by citing." title: "foxBMS - The Most Advanced Open Source BMS Platform: foxBMS 2" -version: "1.6.0" -date-released: 2023-10-12 +version: "1.7.0" +date-released: 2024-08-08 diff --git a/INSTALL.md b/INSTALL.md new file mode 100644 index 00000000..f85804c4 --- /dev/null +++ b/INSTALL.md @@ -0,0 +1,211 @@ +# Installation Instructions for the Host Machine + +This document serves as a short summary on how to setup the **host machine** +for development of foxBMS 2. + +For more detailed installation instructions (that include more automation and +less user interaction during the installation) for the host machine see +[docs/getting-started/software-installation.rst](./docs/getting-started/software-installation.rst). + +> **_NOTE 1:_** +> +> Read the documentation carefully and follow every point exactly as described.\ +> Otherwise, the configuration workload in later points of the setup or the +> development will be significantly higher. +> +> **_NOTE 2:_** +> +> These are the installation instructions for the host machine.\ +> These are **NOT** the instructions for installing (i.e., flashing) the created +> binary on the target.\ +> Flashing the binary requires a hardware debugger/flashing tool. + +## Installation steps + +1. Install [git](https://git-scm.com). +1. Clone the repository into a path, that does **NOT** contain whitespace + + ```shell + git clone https://github.com/foxBMS/foxbms-2 + ``` + +1. Install Code Composer Studio (CCS) + [version 12.0.0](https://www.ti.com/tool/download/CCSTUDIO/12.0.0) + (chose `Windows single file (offline) installer for Code Composer Studio IDE (all features, devices)`).\ + When running the installer: + 1. Do **NOT** change the default installation directory chosen by the + installer + (e.g., `C:\ti\ccs1200` for CCS 12.0.0) + and let the installer proceed with the installation. + 1. Select the Hercules™ Safety MCUs option during the installation. +1. Install [HALCoGen](https://www.ti.com/tool/HALCOGEN) version 04.07.01.\ + When running the installer: + 1. Do **NOT** change the default installation directory chosen by the + installer + (e.g., `C:\ti\Hercules\HALCoGen\v04.07.01` for HALCoGen 04.07.01) + and let the installer proceed with the installation. +1. Install [Python](https://www.python.org/).\ + If you have already installed Python from this step + can be skipped. +1. Open a terminal and run `py --version`, this should print something like + `Python 3.12.4` or similar to the terminal: + + ```pwsh + py --version + Python 3.12.4 + ``` + +1. Create a virtual environment **2024-08-pale-fox** by running in `cmd.exe` or + `PowerShell`. + - `cmd.exe`: + + ```cmd + py -m venv %USERPROFILE%\foxbms-envs\2024-08-pale-fox + ``` + + - `PowerShell`: + + ```pwsh + py -m venv $env:USERPROFILE\foxbms-envs\2024-08-pale-fox + ``` + +1. Activate the virtual environment by running in `cmd.exe` or ``PowerShell`. + - `cmd.exe`: + + ```cmd + %USERPROFILE%\foxbms-envs\2024-08-pale-fox\Scripts\activate.bat + ``` + + - `PowerShell`: + + ```pwsh + &"$env:USERPROFILE\foxbms-envs\2024-08-pale-fox\Scripts\activate.ps1" + ``` + +1. Install the required packages by running: + + ```pwsh + cd path\to\foxbms-2 # cd into the root of the repository + python -m pip install -r requirements.txt --no-deps + ``` + +1. Install [Ruby](https://www.ruby-lang.org) + 1. Download the installer version for + [Ruby 3.1.3-x64 without Devkit](https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.1.3-1/rubyinstaller-3.1.3-1-x64.exe). + 1. Use `C:\Ruby\Ruby3.1.3-x64` as installation directory + 1. Do **NOT** add Ruby to `PATH`. + 1. Install the required packages, i.e., Gems by running: + + ```pwsh + cd path\to\foxbms-2 # cd into the root of the repository + cd tools\vendor\ceedling + C:\Ruby\Ruby3.1.3-x64\bin\bundle install # install the Ruby Gems + ``` + +1. Install GCC + + > **_NOTE:_** Installing MinWG64 requires 7-Zip to be installed. + 7-Zip can be download from https://7-zip.org. + + 1. Download MinGW-W64 version x86_64-posix-seh from + [sourceforge.net](https://sourceforge.net/projects/mingw-w64/files/mingw-w64/) + (use this [7z-archive]( + https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win64/Personal%20Builds/mingw-builds/8.1.0/threads-posix/seh/x86_64-8.1.0-release-posix-seh-rt_v6-rev0.7z)). + 1. Extract the archive. + 1. Copy the extracted mingw64 directory to + `C:\mingw64\x86_64-8.1.0-release-posix-seh-rt_v6-rev0`. + 1. Verify that `gcc.exe` is available at + `C:\MinGW64\x86_64-8.1.0-release-posix-seh-rt_v6-rev0\mingw64\bin\gcc.exe`. + +1. Install Doxygen + + 1. Download Doxygen version 1.11.0 from + [GitHub](https://github.com/doxygen/doxygen/releases/tag/Release_1_11_0) + (use this [zip-archive]( + https://github.com/doxygen/doxygen/releases/download/Release_1_11_0/doxygen-1.11.0.windows.x64.bin.zip)). + 1. Extract the archive. + 1. Copy the extracted archive to `C:\Users\\doxygen\1.11.0`. + 1. Verify that `doxygen.exe` is available at + `C:\Users\\doxygen\1.11.0\doxygen.exe`. + +1. Install Graphviz + + 1. Download GraphViz version 11.0.0 from + [https://graphviz.org/download](https://graphviz.org/download) + (use this [zip-archive]( + https://gitlab.com/api/v4/projects/4207231/packages/generic/graphviz-releases/11.0.0/windows_10_cmake_Release_Graphviz-11.0.0-win64.zip)). + 1. Extract the archive. + 1. Copy the extracted archive to `C:\Users\\graphviz\11.0.0`. + 1. Verify that `dot.exe` is available at + `C:\Users\\graphviz\11.0.0\bin\dot.exe`. + +1. Check that all required software is installed by running in `cmd.exe` or + `PowerShell`. + + - `cmd.exe`: + + ```cmd + fox.bat install --check + ``` + + - `PowerShell`: + + ```pwsh + .\fox.ps1 install --check + ``` + +1. (Optional): Install VS Code. + + 1. Download VS Code from the project website at + [Visual Studio Code](https://code.visualstudio.com). + 1. Install code: |foxbms| recommends installing |code| with the + `User Installer`, which does not require elevated rights. + 1. *Optional:* Let the installer add code to the `PATH` variable. + +All required software is now installed. + + +## Environment Updates + +Sometimes it might be required to update the build environment. +It that is the case, it is then mentioned in the +[CHANGELOG.md](./CHANGELOG.md). + +To update the build environment the following steps must be done: + + > **_NOTE:_** The placeholder ```` must be replaced + with the actual name of the new build environment, which is + then documented in the [CHANGELOG.md](./CHANGELOG.md). + +1. Create a virtual environment ```` by running in `cmd.exe` or + `PowerShell`. + - `cmd.exe`: + + ```cmd + py -m venv %USERPROFILE%\foxbms-envs\ + ``` + + - `PowerShell`: + + ```pwsh + py -m venv $env:USERPROFILE\foxbms-envs\ + ``` +1. Activate the virtual environment by running in `cmd.exe` or ``PowerShell`. + - `cmd.exe`: + + ```cmd + %USERPROFILE%\foxbms-envs\\Scripts\activate.bat + ``` + + - `PowerShell`: + + ```pwsh + &"$env:USERPROFILE\foxbms-envs\\Scripts\activate.ps1" + ``` + +1. Install the required packages by running: + + ```pwsh + cd path\to\foxbms-2 # cd into the root of the repository + python -m pip install -r requirements.txt --no-deps + ``` diff --git a/LICENSE.md b/LICENSE.md index 42d75c61..b1fd4c13 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -4,7 +4,7 @@ - foxBMS 2 hardware and documentation is licensed under the Creative Commons Attribution 4.0 International License. - The license can be obtained from https://creativecommons.org/licenses/by/4.0/. + The license can be obtained from . - The license text is found in [CC-BY-4.0.txt](CC-BY-4.0.txt). - The SPDX short identifier is [CC-BY-4.0](https://spdx.org/licenses/CC-BY-4.0.html). @@ -27,7 +27,7 @@ foxBMS in your hardware, software, documentation or advertising materials: If you use foxBMS in your products, we encourage you to contact us at: -``` +```text CONTACT INFORMATION Fraunhofer IISB Schottkystrasse 10 diff --git a/README.md b/README.md index 54c4513e..879cde85 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,32 @@ # foxBMS 2 foxBMS is a free, open and flexible development environment to design battery -management systems. It is the first modular open source BMS development -platform. +management systems. +It is the first modular open source BMS development platform. + +## Overview + +foxBMS is an universal hardware and software platform providing a fully open +source BMS development platform. +foxBMS aims to control modern and complex electrical energy storage systems of +any size. +foxBMS is successfully used for electrical energy storage consisting of + +- Lithium-Ion and Solid State Batteries +- Lithium-Sulfur Batteries +- Sodium-Ion Batteries +- Lithium-Ion Capacitors (LIC) +- Electric Double-Layer Capacitors (EDLC, supercapacitors or ultracaps) +- Redox-Flow Batteries (RFB) (e.g., Vanadium Redox-Flow), and +- Fuel Cells (FC) + +or in an hybrid combination of these and in various domains. ## Documentation A current build of the documentation of this project can be found here: + - [latest documentation build (of the most recent release)](https://iisb-foxbms.iisb.fraunhofer.de/foxbms/gen2/docs/html/latest/) - [list of all available documentation builds](https://iisb-foxbms.iisb.fraunhofer.de/foxbms/gen2/docs/html/) @@ -16,6 +35,30 @@ here: The project changelog is found in [docs/general/changelog.rst](./docs/general/changelog.rst). +## Installation Instructions + +See [INSTALL.md](./INSTALL.md) for installation instructions. + +## Repository Structure + +The repository is structured as follows: + +| Directory Name | Content Description | +| ---------------- | ------------------------------------------------------------------------------------------------------------------------------- | +| `.` | The repository root contains the license information, installation instructions, a link to the changelog, the main build script | +| `conf` | Contains all high level configurations | +| `docs` | Documentation source files | +| `hardware` | Hardware schematic and layout information | +| `src` | Parent directory for all source files for the BMS embedded software | +| `tests` | Tests for embedded sources, the tool chain, the conda environment and scripts | +| `tools` | Tools needed to build foxBMS binaries and additional tools to work with foxBMS | + +The toplevel directories ([`conf`](./conf), [`docs`](./docs), [`src`](./src), +[`tests`](./tests), and [`tools`](./tools)) each have a `README.md` that +explain the content of the directory ([`conf/README.md`](conf/README.md), +[`docs/README.md`](docs/README.md), [`src/README.md`](src/README.md), +[`tests/README.md`](tests/README.md), [`tools/README.md`](tools/README.md)). + ## License The license information of the project is found in [LICENSE.md](./LICENSE.md). diff --git a/conf/tpl/yaml.yaml b/cli/__init__.py old mode 100644 new mode 100755 similarity index 95% rename from conf/tpl/yaml.yaml rename to cli/__init__.py index 74f82a3b..2271a78a --- a/conf/tpl/yaml.yaml +++ b/cli/__init__.py @@ -1,4 +1,6 @@ -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +#!/usr/bin/env python3 +# +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -34,5 +36,3 @@ # - "This product uses parts of foxBMS®" # - "This product includes parts of foxBMS®" # - "This product is derived from foxBMS®" - -# put configuration here diff --git a/tools/gui/fgui/entry/helper.py b/cli/__main__.py old mode 100644 new mode 100755 similarity index 81% rename from tools/gui/fgui/entry/helper.py rename to cli/__main__.py index 167e1b29..376aab8c --- a/tools/gui/fgui/entry/helper.py +++ b/cli/__main__.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -38,13 +37,18 @@ # - "This product includes parts of foxBMS®" # - "This product is derived from foxBMS®" +"""Mark this module as not callable.""" -"""Miscellaneous helpers for the entry GUI.""" +import sys +from pathlib import Path -INSTRUCTIONS = """Use - "File → LiveViewAndControl" -to open a GUI to control a foxBMS Master Unit. +from .cli import main -Use - "File → LogParser" -to parse foxBMS CAN log recordings""" +if __name__ == "__main__": + cwd = Path.cwd() + expected_cwd = Path(__file__).parent.parent + if cwd != expected_cwd: + sys.exit( + f"This script needs to be run in the root of the repository ({expected_cwd})." + ) + main.main() diff --git a/cli/cli.py b/cli/cli.py new file mode 100755 index 00000000..6b1f459e --- /dev/null +++ b/cli/cli.py @@ -0,0 +1,122 @@ +#!/usr/bin/env python3 +# +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# All rights reserved. +# +# SPDX-License-Identifier: BSD-3-Clause +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# We kindly request you to use one or more of the following phrases to refer to +# foxBMS in your hardware, software, documentation or advertising materials: +# +# - "This product uses parts of foxBMS®" +# - "This product includes parts of foxBMS®" +# - "This product is derived from foxBMS®" + +"""Implements the command line interface to the Battery System Designer tool.""" + +import sys +import warnings + +from .helpers.misc import ignore_third_party_logging, init_path_var_for_foxbms + +try: + import click + import colorama + + colorama.init() +except ImportError: + print( + "The 'click' module is required to run this application.\n" + f"Run '{sys.executable} -m pip install click' to install it", + file=sys.stderr, + ) + sys.exit(1) + +from .commands.c_axivion import axivion +from .commands.c_build import waf +from .commands.c_ci import ci +from .commands.c_cli_unittest import cli_unittest +from .commands.c_embedded_ut import ceedling +from .commands.c_ide import ide +from .commands.c_install import install +from .commands.c_misc import misc +from .commands.c_pre_commit import pre_commit +from .commands.c_program import run_program, run_script +from .foxbms_version import __version__ + +warnings.simplefilter(action="ignore", category=FutureWarning) + +CONTEXT_SETTINGS = {"help_option_names": ["-h", "--help"]} + + +def get_program_config() -> dict[str, str]: + """Returns the current foxBMS repository configuration""" + return { + "foxBMS 2": __version__, + } + + +# Options for main +@click.group(context_settings=CONTEXT_SETTINGS, invoke_without_command=True) +@click.version_option(version=__version__) +@click.option( + "-s", + "--show-config", + default=False, + is_flag=True, + help="Shows foxBMS configuration information", +) +@click.pass_context +def main( + ctx: click.Context, + show_config: bool, +) -> None: + """'fox.py' is a tool to interact with the foxBMS 2 repository. + It supports the following commands and options:""" + ignore_third_party_logging() + init_path_var_for_foxbms() + if show_config: + config = get_program_config() + padding = max(len(x) for x in config) + for key, value in config.items(): + click.echo(f"{key}:{' ' * (padding - len(key))} {value}") + elif not ctx.invoked_subcommand: + click.echo(main.get_help(ctx)) + + +main.add_command(axivion) +main.add_command(ci) +main.add_command(cli_unittest) +main.add_command(waf) +main.add_command(ceedling) +main.add_command(ide) +main.add_command(install) +main.add_command(misc) +main.add_command(pre_commit) +main.add_command(run_script) +main.add_command(run_program) diff --git a/cli/cmd_axivion/__init__.py b/cli/cmd_axivion/__init__.py new file mode 100755 index 00000000..2271a78a --- /dev/null +++ b/cli/cmd_axivion/__init__.py @@ -0,0 +1,38 @@ +#!/usr/bin/env python3 +# +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# All rights reserved. +# +# SPDX-License-Identifier: BSD-3-Clause +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# We kindly request you to use one or more of the following phrases to refer to +# foxBMS in your hardware, software, documentation or advertising materials: +# +# - "This product uses parts of foxBMS®" +# - "This product includes parts of foxBMS®" +# - "This product is derived from foxBMS®" diff --git a/cli/cmd_axivion/axivion_impl.py b/cli/cmd_axivion/axivion_impl.py new file mode 100755 index 00000000..4c72d7b9 --- /dev/null +++ b/cli/cmd_axivion/axivion_impl.py @@ -0,0 +1,237 @@ +#!/usr/bin/env python3 +# +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# All rights reserved. +# +# SPDX-License-Identifier: BSD-3-Clause +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# We kindly request you to use one or more of the following phrases to refer to +# foxBMS in your hardware, software, documentation or advertising materials: +# +# - "This product uses parts of foxBMS®" +# - "This product includes parts of foxBMS®" +# - "This product is derived from foxBMS®" + +"""Implements the functionalities behind the 'axivion' command""" + +import logging +import os +import shutil +import sys +from pathlib import Path + +from ..cmd_script import script_impl +from ..helpers.ansi_colors import RED +from ..helpers.misc import PROJECT_ROOT, eprint +from ..helpers.spr import SubprocessResult, run_process +from ..helpers.win32_vars import PROGRAMFILES, PROGRAMFILESX86, USERPROFILE + +GRAVIS_EXPORT_SCRIPT = ( + PROJECT_ROOT / "tests/axivion/scripts/gravis_export_architecture_svg.py" +) + +ARCHITECTURE_UP_TO_DATE_SCRIPT = ( + PROJECT_ROOT / "tests/axivion/scripts/ci_check_freshness_of_architecture_svg.py" +) + +VERSION_CHECK_SCRIPT = PROJECT_ROOT / "tests/axivion/scripts/check_axivion_versions.py" + + +CHECK_VIOLATIONS_SCRIPT = PROJECT_ROOT / "tests/axivion/violations/check_violations.py" +FORBIDDEN_VIOLATIONS_CONFIG = ( + PROJECT_ROOT / "tests/axivion/violations/forbidden-violations.txt" +) + +COMBINE_REPORTS_SCRIPT = PROJECT_ROOT / "tests/axivion/combine_report_files.py" + +SELF_TEST_SCRIPT = PROJECT_ROOT / "tests/axivion/axivion_self_tests.py" + + +MAKE_RACE_PDFS_SCRIPT = Path( + "C:/Bauhaus/7.5.2/doc/html/_downloads/87991abe35fa881bf14ce6d55f075d2d/make_race_pdfs.bat" +) +IR_FILE = Path(USERPROFILE) / ".bauhaus/localbuild/projects/foxbms-2.ir" +RFG_FILE = Path(USERPROFILE) / ".bauhaus/localbuild/projects/foxbms-2.rfg" + +AXIVION_DASHBOARD_URL = os.environ.get("AXIVION_DASHBOARD_URL", "") + + +def export_architecture(verbosity: int = 0) -> SubprocessResult: + """Calls the architecture export script""" + gravis = shutil.which("gravis") + if not gravis: + path = ( + os.path.join(PROGRAMFILES, "Bauhaus", "bin") + + os.pathsep + + os.path.join(PROGRAMFILESX86, "Bauhaus", "bin") + ) + gravis = shutil.which("gravis", path=path) + logging.debug("Gravis: %s", gravis) + if not gravis: + eprint("Could not find gravis", color=RED, err=True) + return SubprocessResult(1) + cmd = [gravis, "--script", str(GRAVIS_EXPORT_SCRIPT)] + if verbosity: + cmd.append("-v") # gravis supports only one '-v' + return run_process(cmd=cmd, cwd=PROJECT_ROOT, stderr=None, stdout=None) + + +def check_if_architecture_up_to_date(verbosity: int = 0) -> SubprocessResult: + """Calls the architecture up-to-date check script""" + cmd = [sys.executable, str(ARCHITECTURE_UP_TO_DATE_SCRIPT)] + if verbosity: + cmd.append("-" + verbosity * "v") + return run_process(cmd=cmd, cwd=PROJECT_ROOT, stderr=None, stdout=None) + + +def check_versions(verbosity: int = 0) -> SubprocessResult: + """Calls the architecture up-to-date check script""" + cmd = [sys.executable, str(VERSION_CHECK_SCRIPT)] + if verbosity: + cmd.append("-" + verbosity * "v") + return run_process(cmd=cmd, cwd=PROJECT_ROOT, stderr=None, stdout=None) + + +def check_violations(check_violations_args: list[str]) -> int: + """Runs the violations check script on the provided analysis report file""" + err = 0 + cmd = [str(CHECK_VIOLATIONS_SCRIPT)] + check_violations_args + script_impl.run_python_script(cmd, cwd=PROJECT_ROOT) + return err + + +def combine_report_files( + reports: list[Path], + verbosity: int = 0, +): + """Combines several Axivion analysis reports to one""" + base_cmd = [sys.executable, str(COMBINE_REPORTS_SCRIPT)] + cmd = base_cmd + [str(i) for i in reports] + if verbosity: + cmd.append("-" + verbosity * "v") + err = run_process(cmd=cmd, cwd=PROJECT_ROOT, stderr=None, stdout=None).returncode + return err + + +def self_test(script_args: list[str]) -> SubprocessResult: + """Calls the architecture export script""" + gravis = shutil.which("gravis") + if not gravis: + path = ( + os.path.join(PROGRAMFILES, "Bauhaus", "bin") + + os.pathsep + + os.path.join(PROGRAMFILESX86, "Bauhaus", "bin") + ) + gravis = shutil.which("gravis", path=path) + logging.debug("Gravis: %s", gravis) + if not gravis: + eprint("Could not find gravis", color=RED, err=True) + return SubprocessResult(1) + cmd = [sys.executable, str(SELF_TEST_SCRIPT)] + script_args + return run_process(cmd=cmd, cwd=PROJECT_ROOT, stderr=None, stdout=None) + + +def run_local_analysis( + dashboard_url: str, variant: str, branch: str +) -> SubprocessResult: + """Runs a local Axivion analysis""" + if not dashboard_url: + if AXIVION_DASHBOARD_URL: + dashboard_url = AXIVION_DASHBOARD_URL + if not dashboard_url: + return SubprocessResult(1, out="", err="Dashboard url is not provided.") + + if not variant: + variant = "freertos_ltc-6813-1_vbb_cc-cc-tr-none_none-no-imd_s1-m2-cb18" + if not branch: + branch = "master" + + bauhaus_config = PROJECT_ROOT / "tests/axivion" + requests_ca_bundle = Path(USERPROFILE) / ".bauhaus/auto.crt" + project_name = "foxbms-2" + project_shadow_repo = Path(USERPROFILE) / f".bauhaus/{project_name}" + project_shadow_repo.mkdir(parents=True, exist_ok=True) + env = os.environ.copy() + env["AXIVION"] = "TRUE" + env["AXIVION_LOCAL_BUILD"] = "TRUE" + env["AXIVION_BRANCH_NAME"] = branch + env["REQUESTS_CA_BUNDLE"] = str(requests_ca_bundle) + env["BAUHAUS_CONFIG"] = str(bauhaus_config) + env["AXIVION_DASHBOARD_URL"] = dashboard_url + env["projectName"] = project_name + env["analysisProjectName"] = f"{project_name}.{variant}.{branch}" + env["projectShadowRepo"] = str(project_shadow_repo) + return run_analysis(env=env) + + +def run_analysis(env=None) -> SubprocessResult: + """Runs Axivion analysis""" + axivion_build_dir = PROJECT_ROOT / "build/axivion" + axivion_build_dir.mkdir(parents=True, exist_ok=True) + if env.get("AXIVION_LOCAL_BUILD", ""): + env["SKIP_PREBUILD_CLEAN"] = env["AXIVION_LOCAL_BUILD"] + if env.get("AXIVION_INCREMENTAL_BUILD", ""): + env["SKIP_POSTBUILD_CLEAN"] = env["AXIVION_INCREMENTAL_BUILD"] + env["AXIVION_BUILD_DIR"] = str(axivion_build_dir) + axivion_ci = shutil.which("axivion_ci") + if not axivion_ci: + return SubprocessResult( + 1, out="", err="Could not find 'axivion_config' executable." + ) + cmd = [axivion_ci] + return run_process(cmd, env=env) + + +def start_local_dashserver(db_file: Path) -> SubprocessResult: + """Starts a local Axivion dashserver""" + cmd = ["dashserver", "start", "--local", "--noauth", f"--install_file={db_file}"] + return run_process(cmd) + + +def make_race_pdfs( + ir_file: Path = IR_FILE, rfg_file: Path = RFG_FILE +) -> SubprocessResult: + """Creates the race""" + if not MAKE_RACE_PDFS_SCRIPT.is_file(): + return SubprocessResult( + 1, + out="", + err=f"{MAKE_RACE_PDFS_SCRIPT} does not exist.", + ) + if not ir_file.is_file(): + return SubprocessResult( + 1, + out="", + err=f"{ir_file} does not exist.", + ) + env = os.environ.copy() + env["BAUHAUS_CONFIG"] = str(PROJECT_ROOT / "tests/axivion") + cmd = [MAKE_RACE_PDFS_SCRIPT, ir_file] + if rfg_file: + cmd.append(rfg_file) + return run_process(cmd=cmd, cwd=PROJECT_ROOT, env=env) diff --git a/cli/cmd_build/__init__.py b/cli/cmd_build/__init__.py new file mode 100755 index 00000000..2271a78a --- /dev/null +++ b/cli/cmd_build/__init__.py @@ -0,0 +1,38 @@ +#!/usr/bin/env python3 +# +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# All rights reserved. +# +# SPDX-License-Identifier: BSD-3-Clause +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# We kindly request you to use one or more of the following phrases to refer to +# foxBMS in your hardware, software, documentation or advertising materials: +# +# - "This product uses parts of foxBMS®" +# - "This product includes parts of foxBMS®" +# - "This product is derived from foxBMS®" diff --git a/tests/env/packages/env_test__openmp_mutex_linux.py b/cli/cmd_build/build_impl.py old mode 100644 new mode 100755 similarity index 67% rename from tests/env/packages/env_test__openmp_mutex_linux.py rename to cli/cmd_build/build_impl.py index 1d850058..a311c806 --- a/tests/env/packages/env_test__openmp_mutex_linux.py +++ b/cli/cmd_build/build_impl.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -38,34 +37,32 @@ # - "This product includes parts of foxBMS®" # - "This product is derived from foxBMS®" -"""Testing '_openmp_mutex' package""" +"""Implements the functionalities behind the 'waf' command""" -import argparse import logging +from subprocess import PIPE +from sys import executable -# nothing to test +from ..helpers.misc import PROJECT_ROOT +from ..helpers.spr import SubprocessResult, run_process +WAF_BIN = PROJECT_ROOT / "tools/waf" +WAF_DEFAULT_CWD = PROJECT_ROOT +WAF_BASE_CMD = [executable, str(WAF_BIN)] -def main(): - """Testing '_openmp_mutex' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) +def run_waf( + args: list[str], cwd=WAF_DEFAULT_CWD, stdout=PIPE, stderr=PIPE +) -> SubprocessResult: + """Run the waf binary with the provided arguments.""" + cmd = WAF_BASE_CMD + args + logging.debug("%s", " ".join(cmd)) + return run_process(cmd, cwd=cwd, stdout=stdout, stderr=stderr) -if __name__ == "__main__": - main() +def run_top_level_waf( + args: list[str], cwd=WAF_DEFAULT_CWD, stdout=PIPE, stderr=PIPE +) -> SubprocessResult: + """Run the waf binary with the provided arguments.""" + ret = run_waf(args, cwd=cwd, stdout=stdout, stderr=stderr) + return ret diff --git a/cli/cmd_ci/__init__.py b/cli/cmd_ci/__init__.py new file mode 100755 index 00000000..2271a78a --- /dev/null +++ b/cli/cmd_ci/__init__.py @@ -0,0 +1,38 @@ +#!/usr/bin/env python3 +# +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# All rights reserved. +# +# SPDX-License-Identifier: BSD-3-Clause +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# We kindly request you to use one or more of the following phrases to refer to +# foxBMS in your hardware, software, documentation or advertising materials: +# +# - "This product uses parts of foxBMS®" +# - "This product includes parts of foxBMS®" +# - "This product is derived from foxBMS®" diff --git a/cli/cmd_ci/check_ci_config.py b/cli/cmd_ci/check_ci_config.py new file mode 100755 index 00000000..6c9d0463 --- /dev/null +++ b/cli/cmd_ci/check_ci_config.py @@ -0,0 +1,164 @@ +#!/usr/bin/env python3 +# +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# All rights reserved. +# +# SPDX-License-Identifier: BSD-3-Clause +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# We kindly request you to use one or more of the following phrases to refer to +# foxBMS in your hardware, software, documentation or advertising materials: +# +# - "This product uses parts of foxBMS®" +# - "This product includes parts of foxBMS®" +# - "This product is derived from foxBMS®" + +"""Checks that the GitLab CI configuration adheres to some rules""" + +import logging +import sys +from dataclasses import dataclass + +import yaml + +from ..helpers.ansi_colors import RED +from ..helpers.misc import PROJECT_ROOT, eprint + +CI_CONFIG = PROJECT_ROOT / ".gitlab-ci.yml" + + +@dataclass +class Stage: + """container for stage""" + + name: str + prefix: str + + +class VerificationError: # pylint:disable=too-few-public-methods + """Error class""" + + def __init__(self) -> None: + self.error_level = 0 + + def log(self, msg) -> int: + """Error increment and logging""" + self.error_level += 1 + logging.error(msg) + return self.error_level + + +def check_ci_config() -> int: + """Reads the '.gitlab-ci.yml' file and validates it""" + err = 0 + if not CI_CONFIG.is_file(): + eprint(f"File '{CI_CONFIG}' does not exist.", err=True, color=RED) + err += 1 + if err: + return err + with open(CI_CONFIG, encoding="utf-8") as f: + ci_config_txt = f.read() + try: + ci_config: dict = yaml.load(ci_config_txt, Loader=yaml.Loader) + except yaml.YAMLError as exc: + sys.exit(f"{CI_CONFIG} is not a valid yaml file {exc}).") + + stages = [ + Stage(i, "".join([j[0] for j in i.split("_")])) + for i in ci_config.get("stages", []) + ] + if not stages: + sys.exit("Could not determine stages.") + + # check that all job use the correct prefix + special_keys = ["variables", "workflow", "stages", "before_script"] + prefixes = tuple(f"{i.prefix}_" for i in stages) + error = VerificationError() + for k in ci_config.keys(): + if k.startswith(".") or k in special_keys: + continue + if not k.startswith(prefixes): + error.log(f"Job '{k}' uses the wrong prefix.") + + # all files that are listed in '.parallel-build-bin-and-spa' shall be + # gathered along with the respective binaries + parallel_build_bin_and_spa_artifact_strings = [] + for i in ci_config[".parallel-build-bin-and-spa-template"]["parallel"]["matrix"]: + artifact_parts = [] + for _, v in i.items(): + artifact_parts.append(str(v)) + artifact_string = ", ".join(artifact_parts) + parallel_build_bin_and_spa_artifact_strings.append(artifact_string) + + # construct expected binaries so that none is missed. + # creating jobs are 'bb_all_config_variants' and 'spa_build' + expected = [] + for i in parallel_build_bin_and_spa_artifact_strings: + expected.extend( + [ + f"bb_all_config_variants_0: [{i}]", + f"spa_build: [{i}]", + ] + ) + if not sorted(expected) == sorted(ci_config["spae_gather_spa_artifacts"]["needs"]): + missing = set(expected) - set(ci_config["spae_gather_spa_artifacts"]["needs"]) + error.log( + f"Some artifacts are missing in job 'spae_gather_spa_artifacts' ({missing}).", + ) + + # all testes that are run on the HIL shall be defined via the + # ".parallel-build-bin-and-spa" key. + # all HIL tests shall start with 'th_test', expect for the known helpers + for k, v in ci_config.items(): + if not k.startswith("th_"): + continue + if k in ["th_ensure_power_supply_is_off", "th_switch_power_supply_off"]: + continue + needs = v.get("needs", []) + if not needs: + error.log(f"{k} does not specify any artifacts.") + continue + # first element now guaranteed + if not needs[0] == "th_ensure_power_supply_is_off": + error.log( + f"The first entry for '{k}:needs:' shall be 'th_ensure_power_supply_is_off'.", + ) + if len(needs) > 2: + error.log(f"Too many artifacts specified in '{k}:needs:'.") + if len(needs) < 2: + error.log(f"Too few artifacts specified in '{k}:needs:'.") + continue + # second element now guaranteed + if needs[1] not in [ + x for x in expected if x.startswith("bb_all_config_variants_0: [") + ]: + error.log( + f"The test '{k}' specifies an artifact that is is not " + "specified in '.parallel-build-bin-and-spa'", + ) + + return min(error.error_level, 255) diff --git a/cli/cmd_ci/check_coverage.py b/cli/cmd_ci/check_coverage.py new file mode 100755 index 00000000..1260c5d2 --- /dev/null +++ b/cli/cmd_ci/check_coverage.py @@ -0,0 +1,111 @@ +#!/usr/bin/env python3 +# +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# All rights reserved. +# +# SPDX-License-Identifier: BSD-3-Clause +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# We kindly request you to use one or more of the following phrases to refer to +# foxBMS in your hardware, software, documentation or advertising materials: +# +# - "This product uses parts of foxBMS®" +# - "This product includes parts of foxBMS®" +# - "This product is derived from foxBMS®" + +"""Checks that the GitLab CI configuration adheres to some rules""" + +import logging +import os +from pathlib import Path +from xml.etree import ElementTree + +from ..helpers.host_platform import PLATFORM + +CI_COMMIT_REF_NAME = os.getenv("CI_COMMIT_REF_NAME") +TARGET_BRANCH = os.getenv("TARGET_BRANCH", "master") + +if PLATFORM == "linux": + CERTIFICATE_FILE = "/etc/ssl/certs/ca-bundle.crt" +else: + CERTIFICATE_FILE = "" + + +class Coverage: + """Coverage information from Cobertura report""" + + def __init__(self, cobertura_report: Path) -> None: + root = ElementTree.parse(cobertura_report).getroot() + for coverage in root.iter("coverage"): + self.line_rate = coverage.attrib["line-rate"] + self.branch_rate = coverage.attrib["branch-rate"] + + def compare(self, branch: "Coverage") -> int: + """Compares two coverage reports""" + err = 0 + if self.line_rate > branch.line_rate: + logging.error( + "The line coverage drops from %s on '%s' to %s on '%s'.", + self.line_rate, + TARGET_BRANCH, + branch.line_rate, + CI_COMMIT_REF_NAME, + ) + err += 1 + if self.branch_rate > branch.branch_rate: + logging.error( + "The branch coverage drops from %s on '%s' to %s on '%s'.", + self.branch_rate, + TARGET_BRANCH, + branch.branch_rate, + CI_COMMIT_REF_NAME, + ) + err += 1 + return err + + def __str__(self) -> str: + return f"line-rate: {self.line_rate}\nbranch-rate: {self.branch_rate}" + + +def check_coverage() -> int: + """Compares two coverage reports""" + cobertura_archive_master = Path( + "master-artifacts/build/unit_test/artifacts/gcov/gcovr/GcovCoverageCobertura.xml" + ) + + coverage_master = Coverage(cobertura_archive_master) + logging.info("'%s'-branch coverage:\n%s", TARGET_BRANCH, coverage_master) + + cobertura_archive_branch = Path( + "build/unit_test/artifacts/gcov/gcovr/GcovCoverageCobertura.xml" + ) + + coverage_branch = Coverage(cobertura_archive_branch) + logging.info("'%s'-branch coverage:\n%s", CI_COMMIT_REF_NAME, coverage_branch) + + comparison = coverage_master.compare(coverage_branch) + return comparison diff --git a/cli/cmd_ci/create_readme.py b/cli/cmd_ci/create_readme.py new file mode 100755 index 00000000..3f5a9364 --- /dev/null +++ b/cli/cmd_ci/create_readme.py @@ -0,0 +1,139 @@ +#!/usr/bin/env python3 +# +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# All rights reserved. +# +# SPDX-License-Identifier: BSD-3-Clause +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# We kindly request you to use one or more of the following phrases to refer to +# foxBMS in your hardware, software, documentation or advertising materials: +# +# - "This product uses parts of foxBMS®" +# - "This product includes parts of foxBMS®" +# - "This product is derived from foxBMS®" + +"""Creates the README for the GitLab CI configuration documentation.""" + +import re +import sys + +import yaml + +from ..helpers.ansi_colors import RED +from ..helpers.misc import PROJECT_ROOT, eprint + +CI_CONFIG = PROJECT_ROOT / ".gitlab-ci.yml" +CI_README = PROJECT_ROOT / ".gitlab/README.md" + + +MARKER = ( + "###############################################################################" +) + + +def create_readme() -> int: # pylint:disable=too-many-branches + """Reads the '.gitlab-ci.yml' file and creates the 'README.md'.""" + err = 0 + if not CI_CONFIG.is_file(): + eprint(f"File '{CI_CONFIG}' does not exist.", err=True, color=RED) + err += 1 + if not CI_README.is_file(): + eprint(f"File '{CI_README}' does not exist.", err=True, color=RED) + err += 1 + if err: + return err + with open(CI_CONFIG, encoding="utf-8") as f: + ci_config_txt = f.read() + try: + ci_config: dict = yaml.load(ci_config_txt, Loader=yaml.Loader) + except yaml.YAMLError as exc: + sys.exit(f"{CI_CONFIG} is not a valid yaml file {exc}).") + + if not ci_config.get("stages", []): + sys.exit("Could not determine stages.") + + in_block = False + in_stages = False + done = False + stage_docs: list[str] = [] + markdown: list[str] = [] + lines = ci_config_txt.splitlines() + for i, line in enumerate(lines): + if not in_block: + if line == MARKER: + in_block = True + continue + if line == MARKER: + continue + # special handling for stages + if line == "stages:": + in_stages = True + continue + if in_stages: + if not (line.strip().startswith("-") or line.strip().startswith("#")): + in_stages = False + continue + if line.startswith(" -") and len(line.split("#")) == 2: + if not stage_docs: + stage_docs.append("\n| stage name | job prefix |description |\n") + stage_docs.append("| --- | --- | --- |\n") + s_name, s_docs = line.split("#") + s_name = s_name.split("-")[1].strip() + s_job_prefix = "".join([j[0] for j in s_name.split("_")]) + s_docs = s_docs.strip() + stage_docs.append(f"| {s_name} | {s_job_prefix} |{s_docs} |\n") + continue + if not done and not in_stages and len(stage_docs) > 1: # we are done parsing + markdown.extend(stage_docs) + markdown.append("\n") + done = True + continue + # we reached some part of the document, where documentation started + while line.startswith("#") or line.startswith(" #"): + if line.startswith("#"): + markdown.append(line[2:].rstrip() + "\n") + elif line.startswith(" #"): + if line.startswith(" # ###"): + markdown.append(f"### `{lines[i-1][:-1]}`" + "\n") + if markdown[-1].startswith("### "): + line = line[5:] + markdown.append(line[3:].strip() + "\n") + break + if not line: + markdown.append("\n") + markdown = re.sub(r"[\r\n][\r\n]{2,}", "\n\n", "".join(markdown)).split("\n") + # Fix newlines + markdown_fixed = [] + for i, line in enumerate(markdown): + markdown_fixed.append(line) + # we are in a list or heading + if line.startswith("#") and not markdown[i + 1] == "": + markdown_fixed.append("") + with open(CI_README, "w", encoding="utf-8") as f: + f.write("\n".join(markdown_fixed)) + return err diff --git a/cli/cmd_cli_unittest/__init__.py b/cli/cmd_cli_unittest/__init__.py new file mode 100755 index 00000000..2271a78a --- /dev/null +++ b/cli/cmd_cli_unittest/__init__.py @@ -0,0 +1,38 @@ +#!/usr/bin/env python3 +# +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# All rights reserved. +# +# SPDX-License-Identifier: BSD-3-Clause +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# We kindly request you to use one or more of the following phrases to refer to +# foxBMS in your hardware, software, documentation or advertising materials: +# +# - "This product uses parts of foxBMS®" +# - "This product includes parts of foxBMS®" +# - "This product is derived from foxBMS®" diff --git a/cli/cmd_cli_unittest/cli_unittest_impl.py b/cli/cmd_cli_unittest/cli_unittest_impl.py new file mode 100755 index 00000000..e8703a7e --- /dev/null +++ b/cli/cmd_cli_unittest/cli_unittest_impl.py @@ -0,0 +1,95 @@ +#!/usr/bin/env python3 +# +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# All rights reserved. +# +# SPDX-License-Identifier: BSD-3-Clause +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# We kindly request you to use one or more of the following phrases to refer to +# foxBMS in your hardware, software, documentation or advertising materials: +# +# - "This product uses parts of foxBMS®" +# - "This product includes parts of foxBMS®" +# - "This product is derived from foxBMS®" + +"""Implements the functionalities behind the 'cli-unittest' command""" + +import logging +import os +import sys +from typing import Sequence + +from pathlib import Path + +from ..helpers.misc import PROJECT_ROOT +from ..helpers.spr import SubprocessResult, run_process + +UNIT_TEST_MODULE_BASE_COMMAND = [sys.executable, "-m", "unittest"] +COVERAGE_MODULE_BASE_COMMAND = [sys.executable, "-m", "coverage"] + + +def run_unittest_module(args: list[str]) -> SubprocessResult: + """Run the unittest module with the provided arguments.""" + logging.debug(" ".join(args)) + cmd = UNIT_TEST_MODULE_BASE_COMMAND + args + return run_process(cmd, cwd=PROJECT_ROOT, stdout=None, stderr=None) + + +def run_script_tests(coverage_report: bool = False) -> SubprocessResult: + """Run unit tests on Python modules and files in the repository""" + if coverage_report: + out_dir = PROJECT_ROOT / "build/cli-selftest" + out_dir.mkdir(exist_ok=True, parents=True) + cmd: Sequence[str | Path] = COVERAGE_MODULE_BASE_COMMAND + [ + "run", + "--source=cli", + "-m", + "unittest", + "discover", + "-s", + f"tests{os.sep}cli", + ] + ret = run_process(cmd, cwd=PROJECT_ROOT, stdout=None, stderr=None) + cmd = COVERAGE_MODULE_BASE_COMMAND + ["report"] + ret += run_process(cmd, cwd=PROJECT_ROOT, stdout=None, stderr=None) + cmd = COVERAGE_MODULE_BASE_COMMAND + ["html", "-d", out_dir] + ret += run_process(cmd, cwd=PROJECT_ROOT, stdout=None, stderr=None) + cmd = COVERAGE_MODULE_BASE_COMMAND + [ + "xml", + "-o", + out_dir / "CoberturaCoverageCliSelfTest.xml", + ] + ret += run_process(cmd, cwd=PROJECT_ROOT, stdout=None, stderr=None) + else: + cmd = UNIT_TEST_MODULE_BASE_COMMAND + [ + "discover", + "-s", + f"tests{os.sep}cli", + ] + ret = run_process(cmd, cwd=PROJECT_ROOT, stdout=None, stderr=None) + return ret diff --git a/cli/cmd_embedded_ut/__init__.py b/cli/cmd_embedded_ut/__init__.py new file mode 100755 index 00000000..2271a78a --- /dev/null +++ b/cli/cmd_embedded_ut/__init__.py @@ -0,0 +1,38 @@ +#!/usr/bin/env python3 +# +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# All rights reserved. +# +# SPDX-License-Identifier: BSD-3-Clause +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# We kindly request you to use one or more of the following phrases to refer to +# foxBMS in your hardware, software, documentation or advertising materials: +# +# - "This product uses parts of foxBMS®" +# - "This product includes parts of foxBMS®" +# - "This product is derived from foxBMS®" diff --git a/tools/gui/fgui/entry/__main__.py b/cli/cmd_embedded_ut/embedded_ut_constants.py old mode 100644 new mode 100755 similarity index 84% rename from tools/gui/fgui/entry/__main__.py rename to cli/cmd_embedded_ut/embedded_ut_constants.py index bcc0aac6..37d442e9 --- a/tools/gui/fgui/entry/__main__.py +++ b/cli/cmd_embedded_ut/embedded_ut_constants.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -38,8 +37,10 @@ # - "This product includes parts of foxBMS®" # - "This product is derived from foxBMS®" -"""make 'fgui.entry' callable""" +"""Constants that are related to the embedded unit tests (paths etc.)""" -from . import entry_frame +from ..helpers.misc import PROJECT_ROOT -entry_frame.main() # pylint: disable=no-value-for-parameter +# needs to be aligned with build tool defintion +UNIT_TEST_BUILD_DIR = PROJECT_ROOT / "build/unit_test" +CEEDLING_BINARY = PROJECT_ROOT / "tools/vendor/ceedling/bin/ceedling" diff --git a/cli/cmd_embedded_ut/embedded_ut_impl.py b/cli/cmd_embedded_ut/embedded_ut_impl.py new file mode 100755 index 00000000..e888ebed --- /dev/null +++ b/cli/cmd_embedded_ut/embedded_ut_impl.py @@ -0,0 +1,224 @@ +#!/usr/bin/env python3 +# +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# All rights reserved. +# +# SPDX-License-Identifier: BSD-3-Clause +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# We kindly request you to use one or more of the following phrases to refer to +# foxBMS in your hardware, software, documentation or advertising materials: +# +# - "This product uses parts of foxBMS®" +# - "This product includes parts of foxBMS®" +# - "This product is derived from foxBMS®" + +"""Implements the functionalities behind the 'ceedling' command""" + +import filecmp +import logging +import pickle +import re +import shutil +import subprocess +import sys +from dataclasses import dataclass +from pathlib import Path + +from ..helpers.ansi_colors import RED, YELLOW +from ..helpers.misc import PROJECT_ROOT, eprint, get_multiple_files_hash_str +from ..helpers.spr import SubprocessResult, run_process +from .embedded_ut_constants import CEEDLING_BINARY, UNIT_TEST_BUILD_DIR + +_CEEDLING_PROJECT_FILE_SRC = PROJECT_ROOT / "conf/unit/project_.yml" +CEEDLING_PROJECT_FILE_TGT = UNIT_TEST_BUILD_DIR / "project.yml" +HALCOGEN_HCG_SRC = PROJECT_ROOT / "conf/hcg/hcg.hcg" +HALCOGEN_HCG_TGT = UNIT_TEST_BUILD_DIR / "hcg.hcg" +HALCOGEN_DIL_SRC = PROJECT_ROOT / "conf/hcg/hcg.dil" +HALCOGEN_DIL_TGT = UNIT_TEST_BUILD_DIR / "hcg.dil" + +if sys.platform.lower() == "linux": + CEEDLING_PROJECT_FILE_SRC = Path( + str(_CEEDLING_PROJECT_FILE_SRC).replace("", "posix") + ) + +elif sys.platform.lower() == "win32": + CEEDLING_PROJECT_FILE_SRC = Path( + str(_CEEDLING_PROJECT_FILE_SRC).replace("", "win32") + ) +else: + CEEDLING_PROJECT_FILE_SRC = Path( + str(_CEEDLING_PROJECT_FILE_SRC).replace("", "posix") + ) + sys.exit(f"Something went wrong at '{Path(__file__).stem}'") + + +@dataclass +class SourceTargetPair: + """Source-Target""" + + src: Path + tgt: Path + + +SOURCE_TARGET_PAIRS = [ + SourceTargetPair(CEEDLING_PROJECT_FILE_SRC, CEEDLING_PROJECT_FILE_TGT), + SourceTargetPair(HALCOGEN_HCG_SRC, HALCOGEN_HCG_TGT), + SourceTargetPair(HALCOGEN_DIL_SRC, HALCOGEN_DIL_TGT), +] + + +def _cleanup_hcg_sources() -> None: + freertos_config_file = UNIT_TEST_BUILD_DIR / "include/FreeRTOSConfig.h" + + if not freertos_config_file.is_file(): + eprint("Could not find 'FreeRTOSConfig.h'.", err=True, color=RED) + + for line in freertos_config_file.read_text(encoding="utf-8").splitlines(): + mach = re.search( + r"#define configCPU_CLOCK_HZ.*\( \( unsigned portLONG \) ([0-9]+) \)", + line, + ) + if mach: + frequency = mach.group(1) + break + if not frequency: + eprint("Could not determine clock frequency.", err=True, color=RED) + + tmp = UNIT_TEST_BUILD_DIR / "include/config_cpu_clock_hz.h" + define_guard = tmp.name.upper().replace(".H", "_H_") + tmp.write_text( + f"#ifndef {define_guard}\n" + f"#define {define_guard}\n" + f"#define HALCOGEN_CPU_CLOCK_HZ ({frequency})\n" + f"#endif /* {define_guard} */\n", + encoding="utf-8", + ) + + # remove generated files we do not need (FreeRTOS (we ship our own copy)) + (UNIT_TEST_BUILD_DIR / "source/HL_sys_link.cmd").unlink() + (UNIT_TEST_BUILD_DIR / "include/FreeRTOS.h").unlink() + (UNIT_TEST_BUILD_DIR / "include/FreeRTOSConfig.h").unlink() + for i in UNIT_TEST_BUILD_DIR.glob("source/os_*.asm"): + i.unlink() + for i in UNIT_TEST_BUILD_DIR.glob("source/os_*.c"): + i.unlink() + for i in UNIT_TEST_BUILD_DIR.glob("include/os_*.h"): + i.unlink() + + +def make_unit_test_dir() -> None: + """Create the unit test directory,if it does not exist""" + UNIT_TEST_BUILD_DIR.mkdir(parents=True, exist_ok=True) + return (UNIT_TEST_BUILD_DIR / "include").mkdir(parents=True, exist_ok=True) + + +def run_embedded_tests(args: list[str], stderr=None, stdout=None) -> SubprocessResult: + """Run the embedded sources tests""" + eprint("Running 'ceedling' directly: all arguments are passed to ceedling verbatim") + if not args: + args = ["help"] + logging.debug("arguments to ceedling are: %s", args) + + make_unit_test_dir() + hcg_needs_to_run = False + + # update input files if needed + for i in SOURCE_TARGET_PAIRS: + if not Path(i.tgt).is_file() or not filecmp.cmp(i.src, i.tgt): + shutil.copyfile(i.src, i.tgt) + hcg_needs_to_run = True + # if only help is requested, no need to run HALCoGen: + if args == ["help"]: + return _run_ceedling(args, stderr=stderr, stdout=stdout) + + # check if HALCoGen has run and the files are uptodate + hcg_files_hash_pickle = UNIT_TEST_BUILD_DIR / "manual_runner.pickle" + if hcg_files_hash_pickle.is_file(): + with open(hcg_files_hash_pickle, "rb") as f: + try: + old_hcg_files_hash: str = pickle.load(f) + except AttributeError: + old_hcg_files_hash = "" + hcg_needs_to_run = True + else: + old_hcg_files_hash = "" + hcg_needs_to_run = True + + current_hcg_files_hash = get_multiple_files_hash_str( + list(UNIT_TEST_BUILD_DIR.glob("source/*.c")) + + list(UNIT_TEST_BUILD_DIR.glob("include/*.h")) + ) + + if old_hcg_files_hash != current_hcg_files_hash: + hcg_needs_to_run = True + + halcogen = shutil.which("halcogen") + if not halcogen: + eprint("Could not find program 'HALCogen'.", err=True, color=RED) + eprint("Assuming HALCoGen sources are available...", err=True, color=YELLOW) + + # check if need to re-run HALCoGen + # if any([stored_file_hashes.hcg.changed, stored_file_hashes.dil.changed]): + if halcogen and hcg_needs_to_run: + cmd = [halcogen, "-i", str(HALCOGEN_HCG_TGT)] + cwd = UNIT_TEST_BUILD_DIR + logging.debug("running subprocess '%s' in '%s'.", cmd, cwd) + with subprocess.Popen(cmd, cwd=cwd) as p: + p.communicate() + if p.returncode: + return SubprocessResult( + p.returncode, + out="", + err="Could not successfully run HALCoGen, exiting...", + ) + _cleanup_hcg_sources() + current_hcg_files_hash = get_multiple_files_hash_str( + list(UNIT_TEST_BUILD_DIR.glob("source/*.c")) + + list(UNIT_TEST_BUILD_DIR.glob("include/*.h")) + ) + + with open(hcg_files_hash_pickle, "wb") as f: + pickle.dump(current_hcg_files_hash, f) + + # HALCoGen alters the dil file when generating the code, therefore we + # need copy it again... + shutil.copyfile(HALCOGEN_DIL_SRC, HALCOGEN_DIL_TGT) + + # copy sources and generating files worked fine, let's run ceedling + err = _run_ceedling(args, stderr=stderr, stdout=stdout) + return err + + +def _run_ceedling(args: list[str], stderr=None, stdout=None) -> SubprocessResult: + """Runs ceedling with the provided arguments""" + ruby = shutil.which("ruby") + if not ruby: + eprint("Could not find program 'ceedling'.", err=True, color=RED) + return SubprocessResult(1) + cmd = [ruby, str(CEEDLING_BINARY)] + args + return run_process(cmd, cwd=UNIT_TEST_BUILD_DIR, stderr=stderr, stdout=stdout) diff --git a/cli/cmd_ide/__init__.py b/cli/cmd_ide/__init__.py new file mode 100755 index 00000000..2271a78a --- /dev/null +++ b/cli/cmd_ide/__init__.py @@ -0,0 +1,38 @@ +#!/usr/bin/env python3 +# +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# All rights reserved. +# +# SPDX-License-Identifier: BSD-3-Clause +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# We kindly request you to use one or more of the following phrases to refer to +# foxBMS in your hardware, software, documentation or advertising materials: +# +# - "This product uses parts of foxBMS®" +# - "This product includes parts of foxBMS®" +# - "This product is derived from foxBMS®" diff --git a/tests/env/packages/env_test_pandoc.py b/cli/cmd_ide/ide_impl.py old mode 100644 new mode 100755 similarity index 65% rename from tests/env/packages/env_test_pandoc.py rename to cli/cmd_ide/ide_impl.py index 1981bcf9..c860ee51 --- a/tests/env/packages/env_test_pandoc.py +++ b/cli/cmd_ide/ide_impl.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -38,36 +37,39 @@ # - "This product includes parts of foxBMS®" # - "This product is derived from foxBMS®" -"""Testing 'pandoc' package""" +"""Implements the functionalities behind the 'ide' command""" -import argparse import logging import shutil +from pathlib import Path +from ..helpers.misc import PROJECT_ROOT +from ..helpers.spr import run_process -def main(): - """Testing 'pandoc' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) +def open_ide_generic() -> int: + """Open VS Code in the repository root""" + return open_ide(PROJECT_ROOT) - if not shutil.which("pandoc"): - raise BaseException("Could not find pandoc") +def open_ide_src() -> int: + """Open VS Code in the 'src' directory""" + return open_ide(PROJECT_ROOT / "src") -if __name__ == "__main__": - main() + +def open_ide_embedded_unit_tests() -> int: + """Open VS Code in the 'tests/unit' directory""" + return open_ide(PROJECT_ROOT / "tests/unit") + + +def open_ide(wd: Path = PROJECT_ROOT) -> int: + """Open VS Code for the provided path""" + vs_code = shutil.which("code") + if not vs_code: + logging.error("Could not find 'code' binary.") + return -1 + if not wd.is_dir(): + logging.error("Working directory '%s' does not exist.", wd.absolute()) + return -1 + ret = run_process(cmd=[vs_code, str(wd)], cwd=wd) + return ret.returncode diff --git a/cli/cmd_install/__init__.py b/cli/cmd_install/__init__.py new file mode 100755 index 00000000..2271a78a --- /dev/null +++ b/cli/cmd_install/__init__.py @@ -0,0 +1,38 @@ +#!/usr/bin/env python3 +# +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# All rights reserved. +# +# SPDX-License-Identifier: BSD-3-Clause +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# We kindly request you to use one or more of the following phrases to refer to +# foxBMS in your hardware, software, documentation or advertising materials: +# +# - "This product uses parts of foxBMS®" +# - "This product includes parts of foxBMS®" +# - "This product is derived from foxBMS®" diff --git a/cli/cmd_install/install_impl.py b/cli/cmd_install/install_impl.py new file mode 100755 index 00000000..be21d105 --- /dev/null +++ b/cli/cmd_install/install_impl.py @@ -0,0 +1,91 @@ +#!/usr/bin/env python3 +# +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# All rights reserved. +# +# SPDX-License-Identifier: BSD-3-Clause +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# We kindly request you to use one or more of the following phrases to refer to +# foxBMS in your hardware, software, documentation or advertising materials: +# +# - "This product uses parts of foxBMS®" +# - "This product includes parts of foxBMS®" +# - "This product is derived from foxBMS®" + +"""Implements the functionalities behind the 'install' command""" + +import logging +import os +import shutil +from copy import deepcopy + +from ..helpers.ansi_colors import RED, GREEN +from ..helpers.host_platform import PLATFORM +from ..helpers.misc import PROJECT_ROOT, eprint + +INSTALL_MESSAGE = f"""See {PROJECT_ROOT/ 'INSTALL.md'} for the installation\ +instructions for the foxBMS toolchain.""" + +REQUIRED_SOFTWARE = { + "gcc": {"executable": "gcc", "path": False}, + "ti-compiler": {"executable": "armcl", "path": False}, + "ti-halcogen": {"executable": "halcogen", "path": False}, + "ruby": {"executable": "ruby", "path": False}, + "python": {"executable": "python", "path": False}, + "graphviz": {"executable": "dot", "path": False}, + "doxygen": {"executable": "doxygen", "path": False}, +} + + +def check_for_all_softwares(): + """Checks whether all software is available or not""" + tmp = deepcopy(REQUIRED_SOFTWARE) + paths_file = (PROJECT_ROOT / f"conf/env/paths_{PLATFORM}.txt").read_text( + encoding="utf-8" + ) + path = ( + os.pathsep.join(paths_file.splitlines()) + os.pathsep + os.environ.get("PATH") + ) + for _, v in tmp.items(): + available = shutil.which(v["executable"], path=path) + if available: + v["path"] = available + return tmp + + +def all_software_available() -> int: + """Simplified wrapper to check whether all software is available or not""" + err = 0 + for k, v in check_for_all_softwares().items(): + logging.debug("%s: %s", k, v) + if not v["path"]: + eprint(f"{k}: {v}", color=RED, err=True) + err += 1 + if not err: + eprint("All required software is installed.", color=GREEN) + return err diff --git a/cli/cmd_misc/__init__.py b/cli/cmd_misc/__init__.py new file mode 100755 index 00000000..2271a78a --- /dev/null +++ b/cli/cmd_misc/__init__.py @@ -0,0 +1,38 @@ +#!/usr/bin/env python3 +# +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# All rights reserved. +# +# SPDX-License-Identifier: BSD-3-Clause +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# We kindly request you to use one or more of the following phrases to refer to +# foxBMS in your hardware, software, documentation or advertising materials: +# +# - "This product uses parts of foxBMS®" +# - "This product includes parts of foxBMS®" +# - "This product is derived from foxBMS®" diff --git a/tools/gui/fgui/log_parser/__main__.py b/cli/cmd_misc/crc_example.py old mode 100644 new mode 100755 similarity index 80% rename from tools/gui/fgui/log_parser/__main__.py rename to cli/cmd_misc/crc_example.py index a64534ec..af1dfba3 --- a/tools/gui/fgui/log_parser/__main__.py +++ b/cli/cmd_misc/crc_example.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -38,8 +37,16 @@ # - "This product includes parts of foxBMS®" # - "This product is derived from foxBMS®" -"""make 'fgui.log_parser' callable""" +"""Uses waf to build the CRC example""" -from . import log_parser +from ..cmd_build.build_impl import run_waf +from ..helpers.misc import PROJECT_ROOT +from ..helpers.spr import SubprocessResult -log_parser.main() # pylint: disable=no-value-for-parameter +CRC_DIR = PROJECT_ROOT / "tools/crc" + + +def run_crc_build() -> SubprocessResult: + """builds the CRC example source code in tools/crc""" + ret = run_waf(args=["configure", "build"], cwd=CRC_DIR, stdout=None, stderr=None) + return ret diff --git a/cli/cmd_misc/doc_example.py b/cli/cmd_misc/doc_example.py new file mode 100755 index 00000000..db1ca91d --- /dev/null +++ b/cli/cmd_misc/doc_example.py @@ -0,0 +1,57 @@ +#!/usr/bin/env python3 +# +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# All rights reserved. +# +# SPDX-License-Identifier: BSD-3-Clause +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# We kindly request you to use one or more of the following phrases to refer to +# foxBMS in your hardware, software, documentation or advertising materials: +# +# - "This product uses parts of foxBMS®" +# - "This product includes parts of foxBMS®" +# - "This product is derived from foxBMS®" + +"""Uses waf to build the documentation example""" + +from ..cmd_build.build_impl import run_waf +from ..helpers.misc import PROJECT_ROOT +from ..helpers.spr import SubprocessResult + +DOC_UNIT_TEST_EXAMPLE_DIR = PROJECT_ROOT / "docs/software/unit-tests" + + +def run_doc_build() -> SubprocessResult: + """build the documentation example source code in docs/software/unit-tests""" + ret = run_waf( + args=["configure", "build"], + cwd=DOC_UNIT_TEST_EXAMPLE_DIR, + stdout=None, + stderr=None, + ) + return ret diff --git a/cli/cmd_misc/run_uncrustify.py b/cli/cmd_misc/run_uncrustify.py new file mode 100755 index 00000000..f7833270 --- /dev/null +++ b/cli/cmd_misc/run_uncrustify.py @@ -0,0 +1,166 @@ +#!/usr/bin/env python3 +# +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# All rights reserved. +# +# SPDX-License-Identifier: BSD-3-Clause +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# We kindly request you to use one or more of the following phrases to refer to +# foxBMS in your hardware, software, documentation or advertising materials: +# +# - "This product uses parts of foxBMS®" +# - "This product includes parts of foxBMS®" +# - "This product is derived from foxBMS®" +# +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# All rights reserved. +# +# SPDX-License-Identifier: BSD-3-Clause +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# We kindly request you to use one or more of the following phrases to refer to +# foxBMS in your hardware, software, documentation or advertising materials: +# +# - "This product uses parts of foxBMS®" +# - "This product includes parts of foxBMS®" +# - "This product is derived from foxBMS®" + +"""Run uncrustify on the FreeRTOS sources in the foxBMS source tree""" + +import logging +import os +from concurrent.futures import ProcessPoolExecutor +from pathlib import Path +from shutil import which + +from ..helpers.ansi_colors import RED +from ..helpers.host_platform import PLATFORM +from ..helpers.misc import PROJECT_ROOT, eprint +from ..helpers.spr import SubprocessResult, run_process +from ..helpers.win32_vars import HOMEDRIVE + +ROOT = Path(__file__).parent.parent.parent + + +FREERTOS_UNCRUSTIFY_CONFIG = str(ROOT / "src/os/freertos/.github/uncrustify.cfg") +FREERTOS_FILES = [ + str(i) + for i in list((ROOT / "src/os/freertos").rglob("*.c")) + + list((ROOT / "src/os/freertos").rglob("*.h")) +] + + +def run_uncrustify_process( + uncrustify: str, args: list[str], _file: str +) -> SubprocessResult: + """Runs uncrustify with the provided arguments on the specified file as a + subprocess""" + cmd = [uncrustify] + args + [_file] + cwd = ROOT + return run_process(cmd, cwd=cwd, stderr=None, stdout=None) + + +def lint_freertos(check=True) -> int: + """Run uncrustify on the foxBMS FreeRTOS source tree""" + + uncrustify_install_path = os.environ.get("PATH", "") + if PLATFORM == "win32": + uncrustify_install_path = ( + os.path.join(HOMEDRIVE, "uncrustify", "uncrustify-0.69") + + os.pathsep + + uncrustify_install_path + ) + uncrustify = which("uncrustify", path=uncrustify_install_path) + + if not uncrustify: + eprint("Could not find uncrustify.", err=True, color=RED) + return 1 + + uncrustify_args = [ + "-c", + str(PROJECT_ROOT / "src/os/freertos/.github/uncrustify.cfg"), + ] + if check: + uncrustify_args.append("--check") + + err = 0 + with ProcessPoolExecutor() as pool: + futures = [] + for i in FREERTOS_FILES: + if not Path(i).is_file(): + err += 1 + logging.error("'%s' is not a file.", i) + continue + logging.debug("Start worker for file '%s'", i) + futures.append( + pool.submit( + run_uncrustify_process, + uncrustify, + uncrustify_args, + i, + ) + ) + + for f in futures: + exit_code = f.result().returncode + if exit_code: + logging.error("exitcode: %s", exit_code) + logging.error("stdout: %s", f.result().out) + logging.error("stderr: %s", f.result().err) + else: + logging.debug("exitcode: %s", exit_code) + logging.debug("stdout: %s", f.result().out) + logging.debug("stderr: %s", f.result().err) + + err += exit_code + + return err diff --git a/tests/env/packages/env_test_pathspec.py b/cli/cmd_misc/verify_checksums.py old mode 100644 new mode 100755 similarity index 60% rename from tests/env/packages/env_test_pathspec.py rename to cli/cmd_misc/verify_checksums.py index 5349c7f4..b8d09763 --- a/tests/env/packages/env_test_pathspec.py +++ b/cli/cmd_misc/verify_checksums.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -38,53 +37,41 @@ # - "This product includes parts of foxBMS®" # - "This product is derived from foxBMS®" -"""Testing 'pathspec' package""" -import sys -import argparse -import logging +"""Calculates the checksum of file or directory and checks it against a known +hash.""" +import logging from pathlib import Path -# package to test -import pathspec # pylint: disable=unused-import - -import git -from git.exc import InvalidGitRepositoryError - -SCRIPT_DIR = Path(__file__).parent.resolve() - -try: - repo = git.Repo(SCRIPT_DIR, search_parent_directories=True) - REPO_ROOT = Path(repo.git.rev_parse("--show-toplevel")) -except InvalidGitRepositoryError: - sys.exit("Test can only be run in a git repository.") +from ..helpers.misc import get_multiple_files_hash_str -def main(): - """Testing 'pathspec' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) +def verify(files: Path | list[Path], known_hash: str) -> int: + """Verifies the checksum of directory""" + # ensure we have a list + if isinstance(files, list): + pass else: - logging.basicConfig(level=logging.ERROR) - - gitignore = Path(REPO_ROOT / ".gitignore").read_text(encoding="utf-8") - pathspec.PathSpec.from_lines( - pathspec.patterns.GitWildMatchPattern, gitignore.splitlines() - ) - - -if __name__ == "__main__": - main() + files = [files] + relevant_files = [] + # if the entry in the list is a directory, just recursively glob all files, + # otherwise append the file to the list to-be-verified files + for i in files: + if not isinstance(i, Path): + i = Path(i) + if i.is_file(): + relevant_files.append(i) + else: + relevant_files.extend(j for j in i.rglob("*") if j.is_file()) + logging.info("Known hash is: %s", known_hash) + calculated_hash = get_multiple_files_hash_str(relevant_files) + logging.info("Calculated hash is: %s", calculated_hash) + err = 0 + if not known_hash == calculated_hash: + logging.error("Known hash is: %s", known_hash) + logging.error("Calculated hash is: %s", calculated_hash) + logging.error("Hashes do not match.") + err = 1 + else: + logging.debug("Hash matches.") + return err diff --git a/cli/cmd_pre_commit/__init__.py b/cli/cmd_pre_commit/__init__.py new file mode 100755 index 00000000..2271a78a --- /dev/null +++ b/cli/cmd_pre_commit/__init__.py @@ -0,0 +1,38 @@ +#!/usr/bin/env python3 +# +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# All rights reserved. +# +# SPDX-License-Identifier: BSD-3-Clause +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# We kindly request you to use one or more of the following phrases to refer to +# foxBMS in your hardware, software, documentation or advertising materials: +# +# - "This product uses parts of foxBMS®" +# - "This product includes parts of foxBMS®" +# - "This product is derived from foxBMS®" diff --git a/cli/cmd_pre_commit/pre_commit_impl.py b/cli/cmd_pre_commit/pre_commit_impl.py new file mode 100755 index 00000000..ce786ace --- /dev/null +++ b/cli/cmd_pre_commit/pre_commit_impl.py @@ -0,0 +1,50 @@ +#!/usr/bin/env python3 +# +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# All rights reserved. +# +# SPDX-License-Identifier: BSD-3-Clause +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# We kindly request you to use one or more of the following phrases to refer to +# foxBMS in your hardware, software, documentation or advertising materials: +# +# - "This product uses parts of foxBMS®" +# - "This product includes parts of foxBMS®" +# - "This product is derived from foxBMS®" + +"""Implements the functionalities behind the 'pre-commit' command""" + +from ..helpers.misc import PROJECT_ROOT +from ..helpers.spr import SubprocessResult, run_process + + +def run_pre_commit(args: list[str], stderr=None, stdout=None) -> SubprocessResult: + """Run the waf binary with the provided arguments.""" + cmd = ["pre-commit"] + args + err = run_process(cmd, cwd=PROJECT_ROOT, stdout=stdout, stderr=stderr) + return err diff --git a/cli/cmd_script/__init__.py b/cli/cmd_script/__init__.py new file mode 100755 index 00000000..2271a78a --- /dev/null +++ b/cli/cmd_script/__init__.py @@ -0,0 +1,38 @@ +#!/usr/bin/env python3 +# +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# All rights reserved. +# +# SPDX-License-Identifier: BSD-3-Clause +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# We kindly request you to use one or more of the following phrases to refer to +# foxBMS in your hardware, software, documentation or advertising materials: +# +# - "This product uses parts of foxBMS®" +# - "This product includes parts of foxBMS®" +# - "This product is derived from foxBMS®" diff --git a/tests/env/packages/env_test_python.py b/cli/cmd_script/script_impl.py old mode 100644 new mode 100755 similarity index 67% rename from tests/env/packages/env_test_python.py rename to cli/cmd_script/script_impl.py index f3c78b53..60b03935 --- a/tests/env/packages/env_test_python.py +++ b/cli/cmd_script/script_impl.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -38,36 +37,31 @@ # - "This product includes parts of foxBMS®" # - "This product is derived from foxBMS®" -"""Testing 'python' package""" -import argparse -import logging -import sys +"""Implements the functionalities behind the 'pre-commit' command""" -# nothing to test +import sys +from pathlib import Path -def main(): - """Testing 'python' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() +from ..helpers.misc import PROJECT_ROOT +from ..helpers.spr import SubprocessResult, run_process - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - logging.debug(sys.executable) +def run_python_script( + python_args: list[str], cwd: str | Path = PROJECT_ROOT, stderr=None, stdout=None +) -> SubprocessResult: + """Run the waf binary with the provided arguments.""" + if not python_args: + print("No Arguments provided.") + return SubprocessResult() + cmd = [sys.executable] + python_args + err = run_program(cmd, cwd=cwd, stdout=stdout, stderr=stderr) + return err -if __name__ == "__main__": - main() +def run_program( + args: list[str], cwd: str | Path = PROJECT_ROOT, stderr=None, stdout=None +) -> SubprocessResult: + """Run the waf binary with the provided arguments.""" + err = run_process(args, cwd=cwd, stdout=stdout, stderr=stderr) + return err diff --git a/cli/commands/__init__.py b/cli/commands/__init__.py new file mode 100755 index 00000000..2271a78a --- /dev/null +++ b/cli/commands/__init__.py @@ -0,0 +1,38 @@ +#!/usr/bin/env python3 +# +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# All rights reserved. +# +# SPDX-License-Identifier: BSD-3-Clause +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# We kindly request you to use one or more of the following phrases to refer to +# foxBMS in your hardware, software, documentation or advertising materials: +# +# - "This product uses parts of foxBMS®" +# - "This product includes parts of foxBMS®" +# - "This product is derived from foxBMS®" diff --git a/cli/commands/c_axivion.py b/cli/commands/c_axivion.py new file mode 100755 index 00000000..2b963847 --- /dev/null +++ b/cli/commands/c_axivion.py @@ -0,0 +1,180 @@ +#!/usr/bin/env python3 +# +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# All rights reserved. +# +# SPDX-License-Identifier: BSD-3-Clause +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# We kindly request you to use one or more of the following phrases to refer to +# foxBMS in your hardware, software, documentation or advertising materials: +# +# - "This product uses parts of foxBMS®" +# - "This product includes parts of foxBMS®" +# - "This product is derived from foxBMS®" + +"""Command line interface definition for Axivion""" + +from pathlib import Path + +import click + +from ..cmd_axivion import axivion_impl + +CONTEXT_SETTINGS = {"help_option_names": ["-h", "--help"]} + + +@click.group(context_settings=CONTEXT_SETTINGS, invoke_without_command=True) +@click.option("-v", "--verbose", default=0, count=True, help="Verbose information") +@click.option( + "--check-versions", + default=False, + is_flag=True, + help="Check that all Axivion configuration files have the same version", +) +@click.pass_context +def axivion( + ctx: click.Context, + verbose: bool, + check_versions: bool, +) -> None: + """Checks related to Axivion. This does not run the Axivion SPA build. + To run the Axivion SPA build, use the 'waf' command.""" + if check_versions: + ret = axivion_impl.check_versions(verbose) + ctx.exit(ret.returncode) + elif not ctx.invoked_subcommand: + click.echo(axivion.get_help(ctx)) + + +@axivion.command("self-test", context_settings={"ignore_unknown_options": True}) +@click.argument("script_args", nargs=-1, type=click.UNPROCESSED) +@click.pass_context +def cmd_self_test(ctx: click.Context, script_args: tuple[str]) -> None: + """Axivion self-and configuration tests""" + ret = axivion_impl.self_test(list(script_args)) + ctx.exit(ret.returncode) + + +@axivion.command("export-architecture") +@click.option("-v", "--verbose", default=0, count=True, help="Verbose information") +@click.pass_context +def cmd_export_architecture( + ctx: click.Context, + verbose: int, +) -> None: + """Exports the architecture file""" + ret = axivion_impl.export_architecture(verbose) + ctx.exit(ret.returncode) + + +@axivion.command("check-architecture-up-to-date") +@click.option("-v", "--verbose", default=0, count=True, help="Verbose information") +@click.pass_context +def cmd_check_architecture_uptodate( + ctx: click.Context, + verbose: int, +) -> None: + """Checks whether the architecture file is up-to-date""" + ret = axivion_impl.check_if_architecture_up_to_date(verbose) + ctx.exit(ret.returncode) + + +@axivion.command( + "check-violations", + context_settings={ + "help_option_names": ["--dummy"], + "ignore_unknown_options": True, + }, +) +@click.argument("check_violations_args", nargs=-1, type=click.UNPROCESSED) +@click.pass_context +def cmd_check_violations(ctx: click.Context, check_violations_args: tuple[str]) -> None: + """Checks for Axivion violations (uses the 'check_violations.py' script)""" + ret = axivion_impl.check_violations(list(check_violations_args)) + ctx.exit(ret) + + +@axivion.command("combine-reports") +@click.option("-v", "--verbose", default=0, count=True, help="Verbose information") +@click.argument( + "reports", + nargs=-1, + is_eager=True, + type=click.Path(exists=True, dir_okay=False, path_type=Path), +) +@click.pass_context +def cmd_combine_reports( + ctx: click.Context, + verbose: int, + reports: list[Path], +) -> None: + """Combines several reports into one""" + if not reports: + click.echo("No reports provided.", err=True) + ctx.exit(1) + ret = axivion_impl.combine_report_files(reports, verbose) + ctx.exit(ret) + + +@axivion.command("local-analysis") +@click.option("-u", "--dashboard-url", help="Axivion Dashboard URL") +@click.option("-v", "--variant", help="Build variant") +@click.option("-b", "--branch", help="git branch") +@click.pass_context +def cmd_local_analysis( + ctx: click.Context, + dashboard_url: str, + variant: str, + branch: str, +) -> None: + """Runs a local analysis""" + ret = axivion_impl.run_local_analysis(dashboard_url, variant, branch) + ctx.exit(ret.returncode) + + +@axivion.command("local-dashserver") +@click.option( + "-d", + "--db-file", + is_eager=True, + type=click.Path(exists=True, dir_okay=False, path_type=Path), + help="Database file to be installed", +) +@click.pass_context +def cmd_local_dashserver(ctx: click.Context, db_file: Path) -> None: + """Starts a local dashserver""" + ret = axivion_impl.start_local_dashserver(db_file) + ctx.exit(ret.returncode) + + +@axivion.command("make-race-pdfs") +@click.pass_context +def cmd_make_race_pdfs(ctx: click.Context) -> None: + """Creates the race pdfs""" + ret = axivion_impl.make_race_pdfs() + ctx.exit(ret.returncode) diff --git a/tests/env/packages/env_test__libgcc_mutex_linux.py b/cli/commands/c_build.py old mode 100644 new mode 100755 similarity index 68% rename from tests/env/packages/env_test__libgcc_mutex_linux.py rename to cli/commands/c_build.py index 30255236..bbe0bbc7 --- a/tests/env/packages/env_test__libgcc_mutex_linux.py +++ b/cli/commands/c_build.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -37,35 +36,35 @@ # - "This product uses parts of foxBMS®" # - "This product includes parts of foxBMS®" # - "This product is derived from foxBMS®" +"""Command line interface definition for waf""" -"""Testing '_libgcc_mutex' package""" +import click -import argparse -import logging +from ..cmd_build import build_impl -# nothing to test +CONTEXT_SETTINGS = { + "help_option_names": ["--dummy"], + "ignore_unknown_options": True, +} -def main(): - """Testing '_libgcc_mutex' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) +@click.command(context_settings=CONTEXT_SETTINGS) +@click.option( + "--cwd", + type=click.Path(exists=True, file_okay=False, dir_okay=True), + is_eager=True, + help="Directory where 'waf' is run", +) +@click.argument("waf_args", nargs=-1, type=click.UNPROCESSED) +@click.pass_context +def waf( + ctx: click.Context, + cwd: str, + waf_args: tuple[str], +) -> None: + """Run the 'waf' tool""" + if cwd: + ret = build_impl.run_waf(list(waf_args), cwd=cwd, stdout=None, stderr=None) else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() + ret = build_impl.run_top_level_waf(list(waf_args), stdout=None, stderr=None) + ctx.exit(ret.returncode) diff --git a/tests/scripts/gui/test_foxbms_gui.py b/cli/commands/c_ci.py old mode 100644 new mode 100755 similarity index 55% rename from tests/scripts/gui/test_foxbms_gui.py rename to cli/commands/c_ci.py index ec05f4f4..616029fa --- a/tests/scripts/gui/test_foxbms_gui.py +++ b/cli/commands/c_ci.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -38,62 +37,65 @@ # - "This product includes parts of foxBMS®" # - "This product is derived from foxBMS®" -"""Implements tests for the foxBMS 2 GUI. -""" +"""Command line interface definition for CI tools""" -import os -import sys -import unittest +from pathlib import Path -import wx +import click -HAVE_GIT = False -try: - from git import Repo - from git.exc import InvalidGitRepositoryError +from ..cmd_ci.check_ci_config import check_ci_config +from ..cmd_ci.check_coverage import check_coverage +from ..cmd_ci.create_readme import create_readme - HAVE_GIT = True -except ImportError: - pass +CONTEXT_SETTINGS = { + "help_option_names": ["-h", "--help"], + "ignore_unknown_options": True, +} -def get_git_root(path: str) -> str: - """helper function to find the repository root +@click.group(context_settings=CONTEXT_SETTINGS, hidden=True) +def ci() -> None: + """Continuous Integration related tests - Args: - path (string): path of test_f_guidelines + Most of these scripts and tools will **not** work outside Fraunhofer IISB.""" - Returns: - root (string): root path of the git repository - """ - root = os.path.join(os.path.dirname(path), "..", "..", "..") - if HAVE_GIT: - try: - repo = Repo(path, search_parent_directories=True) - root = repo.git.rev_parse("--show-toplevel") - except InvalidGitRepositoryError: - pass - return root +@ci.command("create-readme") +@click.pass_context +def cmd_create_readme( + ctx: click.Context, +) -> None: + """Create the CI readme""" + ctx.exit(create_readme()) -ROOT = get_git_root(os.path.realpath(__file__)) -sys.path.insert(1, os.path.abspath(os.path.join(ROOT, "tools", "gui"))) -from fgui import foxbms_gui # pylint:disable=wrong-import-position,unused-import +@ci.command("check-ci-config") +@click.pass_context +def cmd_check_ci_config( + ctx: click.Context, +) -> None: + """Validate the CI configuration file""" + ctx.exit(check_ci_config()) -class TestDialog(unittest.TestCase): - """Testing the info dialog""" +@ci.command("check-coverage") +@click.pass_context +def cmd_check_coverage( + ctx: click.Context, +) -> None: + """Check the unit test coverage""" + ctx.exit(check_coverage()) - def setUp(self): - self.app = wx.App() - self.frame = wx.Frame() - self.frame.Show() - def tearDown(self): - wx.CallAfter(self.app.ExitMainLoop) - self.app.MainLoop() - - -if __name__ == "__main__": - unittest.main() +@ci.command("path-shall-not-exist") +@click.argument( + "path", + type=click.Path(exists=False, dir_okay=True, file_okay=True, path_type=Path), +) +@click.pass_context +def cmd_path_shall_not_exist(ctx: click.Context, path: Path) -> None: + """Ensure that a directory or file does not exist""" + if path.exists(): + click.echo(f"Path '{path}' exists.", err=True) + ctx.exit(1) + ctx.exit(0) diff --git a/tools/gui/fgui/misc/gui_helpers.py b/cli/commands/c_cli_unittest.py old mode 100644 new mode 100755 similarity index 61% rename from tools/gui/fgui/misc/gui_helpers.py rename to cli/commands/c_cli_unittest.py index a2a09dcb..2f3f1c24 --- a/tools/gui/fgui/misc/gui_helpers.py +++ b/cli/commands/c_cli_unittest.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -38,48 +37,47 @@ # - "This product includes parts of foxBMS®" # - "This product is derived from foxBMS®" +"""Command line interface definition for CLI self tests""" -"Miscellaneous helper functions for the GUI" +import click -import webbrowser +from ..cmd_cli_unittest import cli_unittest_impl -import wx -from fgui import FOXBMS_DOC_URL -from fgui.misc.info_dialog import FoxbmsInfoDialog -from fgui.misc.logo import logo_foxbms +CONTEXT_SETTINGS = { + "help_option_names": ["-h", "--help"], + "ignore_unknown_options": True, +} -def cb_open_documentation(_, **args): - """Shows the foxBMS documentation from local source if it exists, from - web if it does not""" - open_documentation() - - -def open_documentation(): - """Shows the foxBMS documentation from local source if it exists, from - web if it does not""" - webbrowser.open(FOXBMS_DOC_URL) - - -def cb_show_info(_, **args): - """Shows the program information""" - show_info() - - -def show_info(): - """Shows the program information""" - about_dialog = FoxbmsInfoDialog(None, title="About foxBMS 2") - about_dialog.ShowModal() - about_dialog.Destroy() - - -def get_icon(): - """Returns the foxBMS logo as icon""" - _icon = wx.Icon() - logo_img = wx.Image(logo_foxbms.GetImage()) - logo_img_size = logo_img.GetSize() - resized = logo_img_size / 5 - logo_img.Rescale(resized[0], resized[1]) - image = wx.Bitmap(logo_img) - _icon.CopyFromBitmap(image) - return _icon +@click.group(context_settings=CONTEXT_SETTINGS, invoke_without_command=True) +@click.option( + "-s", + "--self-test", + default=False, + is_flag=True, + help="Run foxBMS CLI self test", +) +@click.option( + "--coverage-report", + default=False, + is_flag=True, + help="Run foxBMS CLI self test", +) +@click.argument("unittest_args", nargs=-1, type=click.UNPROCESSED) +@click.pass_context +def cli_unittest( + ctx: click.Context, + self_test: bool, + coverage_report: bool, + unittest_args: tuple[str], +) -> None: + """Run unit-tests on the CLI tool itself""" + err = 0 + if self_test: + err = cli_unittest_impl.run_script_tests(coverage_report).returncode + elif unittest_args: + args = list(unittest_args) + err = cli_unittest_impl.run_unittest_module(args).returncode + elif not ctx.invoked_subcommand: + click.echo(cli_unittest.get_help(ctx)) + ctx.exit(err) diff --git a/tests/env/packages/env_test_cryptography_linux.py b/cli/commands/c_embedded_ut.py old mode 100644 new mode 100755 similarity index 72% rename from tests/env/packages/env_test_cryptography_linux.py rename to cli/commands/c_embedded_ut.py index 95112659..22218284 --- a/tests/env/packages/env_test_cryptography_linux.py +++ b/cli/commands/c_embedded_ut.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -38,32 +37,29 @@ # - "This product includes parts of foxBMS®" # - "This product is derived from foxBMS®" -"""Testing 'cryptography' package""" +"""Command line interface definition for Ceedling""" -import argparse -import logging +import click +from ..cmd_embedded_ut import embedded_ut_impl -def main(): - """Testing 'cryptography' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) +CONTEXT_SETTINGS = { + "help_option_names": ["-h", "--help"], + "ignore_unknown_options": True, +} -if __name__ == "__main__": - main() +@click.command(context_settings=CONTEXT_SETTINGS) +@click.argument("ceedling_args", nargs=-1, type=click.UNPROCESSED) +@click.pass_context +def ceedling( + ctx: click.Context, + ceedling_args: tuple[str], +) -> None: + """ceedling command""" + if not ceedling_args: + ceedling_args = ("help",) + ret = embedded_ut_impl.run_embedded_tests( + list(ceedling_args), stdout=None, stderr=None + ) + ctx.exit(ret.returncode) diff --git a/tools/gui/fgui/workers/send_worker.py b/cli/commands/c_ide.py old mode 100644 new mode 100755 similarity index 56% rename from tools/gui/fgui/workers/send_worker.py rename to cli/commands/c_ide.py index 19457e76..0992596a --- a/tools/gui/fgui/workers/send_worker.py +++ b/cli/commands/c_ide.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -38,40 +37,65 @@ # - "This product includes parts of foxBMS®" # - "This product is derived from foxBMS®" -"""Holds a thread that puts GUI control input (i.e. a CAN message that must be -sent) into the CAN thread queue. -Sending these CAN messages (and by that emptying that queue) is then done by -another process, that consumes the queue. -""" +"""Command line interface definition for VS Code""" -import logging -import multiprocessing -import threading -import time -from typing import Callable +import click -class PeriodicSendThread(threading.Thread): - """This thread checks periodically, whether there is information to be - put into the to-be-send-queue.""" +from ..cmd_ide import ide_impl - def __init__(self, get_data: Callable, send_queue: multiprocessing.Queue) -> None: - threading.Thread.__init__(self) - self.canceled = threading.Event() - self.get_data = get_data - self.send_queue = send_queue +CONTEXT_SETTINGS = { + "help_option_names": ["-h", "--help"], +} - def run(self) -> None: - """Thread function to be run.""" - while True: - if self.canceled.isSet(): # cancel when button is pressed - logging.debug("PeriodicSendThread was canceled.") - break - data = self.get_data() - for i in data: - self.send_queue.put(i) - time.sleep(0.005) # no hurry - def cancel(self) -> None: - """Cancel the thread""" - self.canceled.set() +@click.command(context_settings=CONTEXT_SETTINGS) +@click.option( + "--generic/--no-generic", + default=True, + is_flag=True, + help="Open a generic VS Code workspace in the repository root.", +) +@click.option( + "--embedded-unit-tests/--no-embedded-unit-tests", + default=False, + is_flag=True, + help="Open a VS Code workspace for embedded unit test development", +) +@click.option( + "-e", + "embedded_unit_tests_short", + default=False, + is_flag=True, + help="Short for '--embedded-unit-tests'", +) +@click.option( + "--src/--no-src", + default=False, + is_flag=True, + help="Open a VS Code workspace for target development", +) +@click.option( + "-s", + "src_short", + default=False, + is_flag=True, + help="Short for '--src'", +) +@click.pass_context +def ide( # pylint:disable=too-many-arguments + ctx: click.Context, + generic: bool, + embedded_unit_tests: bool, + embedded_unit_tests_short: bool, + src: bool, + src_short: bool, +) -> None: + """Open pre-configured VS Code workspaces""" + if generic: + ide_impl.open_ide_generic() + if embedded_unit_tests or embedded_unit_tests_short: + ide_impl.open_ide_embedded_unit_tests() + if src or src_short: + ide_impl.open_ide_src() + ctx.exit(0) diff --git a/tests/env/packages/env_test_alabaster.py b/cli/commands/c_install.py old mode 100644 new mode 100755 similarity index 64% rename from tests/env/packages/env_test_alabaster.py rename to cli/commands/c_install.py index 3091f919..c3241936 --- a/tests/env/packages/env_test_alabaster.py +++ b/cli/commands/c_install.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -38,37 +37,44 @@ # - "This product includes parts of foxBMS®" # - "This product is derived from foxBMS®" -"""Testing 'alabaster' package""" +"""Command line interface definition for the 'install' command""" -import argparse -import logging +import click -# package to test -import alabaster +from ..cmd_install import install_impl +from ..helpers.misc import set_logging_level_cb +CONTEXT_SETTINGS = { + "help_option_names": ["-h", "--help"], +} -def main(): - """Testing 'alabaster' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) +@click.command(context_settings=CONTEXT_SETTINGS) +@click.option( + "-v", + "--verbose", + default=0, + count=True, + help="Verbose information", + callback=set_logging_level_cb, +) +@click.option( + "--check/--no-check", + default=False, + is_flag=True, + help="Check if the required software is installed", +) +@click.pass_context +def install( + ctx: click.Context, + # verbose is used in the callback 'set_logging_level_cb' + verbose: int, # pylint: disable=unused-argument + check: bool, +) -> None: + """Show installation instructions or check for required software""" + err = 0 + if check: + err += install_impl.all_software_available() else: - logging.basicConfig(level=logging.ERROR) - - logging.debug(alabaster.__name__) - - -if __name__ == "__main__": - main() + click.echo(install_impl.INSTALL_MESSAGE) + ctx.exit(err) diff --git a/cli/commands/c_misc.py b/cli/commands/c_misc.py new file mode 100755 index 00000000..ad1a4005 --- /dev/null +++ b/cli/commands/c_misc.py @@ -0,0 +1,113 @@ +#!/usr/bin/env python3 +# +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# All rights reserved. +# +# SPDX-License-Identifier: BSD-3-Clause +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# We kindly request you to use one or more of the following phrases to refer to +# foxBMS in your hardware, software, documentation or advertising materials: +# +# - "This product uses parts of foxBMS®" +# - "This product includes parts of foxBMS®" +# - "This product is derived from foxBMS®" + +"""Command line interface definition for miscellaneous fox tools""" + +from pathlib import Path + +import click + +from ..cmd_misc import verify_checksums +from ..cmd_misc.crc_example import run_crc_build +from ..cmd_misc.doc_example import run_doc_build +from ..cmd_misc.run_uncrustify import lint_freertos +from ..helpers.ansi_colors import RED +from ..helpers.misc import eprint + +CONTEXT_SETTINGS = { + "help_option_names": ["-h", "--help"], + "ignore_unknown_options": True, +} + + +@click.group(context_settings=CONTEXT_SETTINGS) +def misc() -> None: + """Miscellaneous tools or scripts that did not fit in any other category""" + + +@misc.command("verify-checksum") +@click.argument( + "files", + nargs=-1, + is_eager=True, + type=click.Path(exists=True, dir_okay=True, path_type=Path), +) +@click.argument( + "known-hash", + type=click.STRING, +) +@click.pass_context +def cmd_verify_checksum(ctx: click.Context, files: list[Path], known_hash: str) -> None: + """Verify checksum of a list of given paths""" + print(files, known_hash) + if not files: + eprint("No files provided", color=RED, err=True) + ctx.exit(1) + ctx.exit(verify_checksums.verify(list(files), known_hash)) + + +@misc.command("uncrustify-freertos") +@click.option( + "--check/--no-check", + default=True, + is_flag=True, + help="Run uncrustify in check or edit mode", +) +@click.pass_context +def cmd_uncrustify_freertos(ctx: click.Context, check: bool) -> None: + """Run uncrustify on the FreeRTOS sources in the source tree""" + ctx.exit(lint_freertos(check)) + + +@misc.command("build-crc-code") +@click.pass_context +def cmd_build_crc_code( + ctx: click.Context, +) -> None: + """Build the CRC example code""" + ctx.exit(run_crc_build().returncode) + + +@misc.command("build-doc-code") +@click.pass_context +def cmd_build_doc_code( + ctx: click.Context, +) -> None: + """Build the documentation example code""" + ctx.exit(run_doc_build().returncode) diff --git a/cli/commands/c_pre_commit.py b/cli/commands/c_pre_commit.py new file mode 100755 index 00000000..be2b1f91 --- /dev/null +++ b/cli/commands/c_pre_commit.py @@ -0,0 +1,63 @@ +#!/usr/bin/env python3 +# +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# All rights reserved. +# +# SPDX-License-Identifier: BSD-3-Clause +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# We kindly request you to use one or more of the following phrases to refer to +# foxBMS in your hardware, software, documentation or advertising materials: +# +# - "This product uses parts of foxBMS®" +# - "This product includes parts of foxBMS®" +# - "This product is derived from foxBMS®" + +"""Command line interface definition for pre-commit""" + +import click + +from ..cmd_pre_commit import pre_commit_impl + +CONTEXT_SETTINGS = { + "help_option_names": ["--dummy"], + "ignore_unknown_options": True, +} + + +@click.command(context_settings=CONTEXT_SETTINGS) +@click.argument("pre_commit_args", nargs=-1, type=click.UNPROCESSED) +@click.pass_context +def pre_commit( + ctx: click.Context, + pre_commit_args: tuple[str], +) -> None: + """Run the 'pre-commit' tool""" + ret = pre_commit_impl.run_pre_commit( + list(pre_commit_args), stdout=None, stderr=None + ) + ctx.exit(ret.returncode) diff --git a/tests/env/packages/env_test_appdirs.py b/cli/commands/c_program.py old mode 100644 new mode 100755 similarity index 57% rename from tests/env/packages/env_test_appdirs.py rename to cli/commands/c_program.py index 09bf710e..1f495e36 --- a/tests/env/packages/env_test_appdirs.py +++ b/cli/commands/c_program.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -38,44 +37,53 @@ # - "This product includes parts of foxBMS®" # - "This product is derived from foxBMS®" -"""Testing 'appdirs' package""" +"""Command line interface definition for running scripts""" -import argparse -import logging +import click -# package to test -import appdirs +from ..cmd_script import script_impl +CONTEXT_SETTINGS = { + "help_option_names": ["--dummy"], + "ignore_unknown_options": True, +} -def main(): - """Testing 'appdirs' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - logging.debug(f"{appdirs.__name__} {appdirs.__version__}") - - appname = "foxBMS" - appauthor = "Fraunhofer IISB" - logging.debug(appdirs.user_data_dir(appname, appauthor)) - logging.debug(appdirs.user_data_dir(appname, appauthor, roaming=True)) - logging.debug(appdirs.user_cache_dir(appname, appauthor)) - logging.debug(appdirs.user_log_dir(appname, appauthor)) +@click.command("run-script", context_settings=CONTEXT_SETTINGS) +@click.option( + "--cwd", + type=click.Path(exists=True, file_okay=False, dir_okay=True), + is_eager=True, + help="Directory where the script is run from", +) +@click.argument("script_args", nargs=-1, type=click.UNPROCESSED) +@click.pass_context +def run_script( + ctx: click.Context, + cwd: str, + script_args: tuple[str], +) -> None: + """Run the provided script""" + ret = script_impl.run_python_script( + list(script_args), cwd=cwd, stdout=None, stderr=None + ) + ctx.exit(ret.returncode) -if __name__ == "__main__": - main() +@click.command("run-program", context_settings=CONTEXT_SETTINGS) +@click.option( + "--cwd", + type=click.Path(exists=True, file_okay=False, dir_okay=True), + is_eager=True, + help="Directory where the script is run from", +) +@click.argument("program_args", nargs=-1, type=click.UNPROCESSED) +@click.pass_context +def run_program( + ctx: click.Context, + cwd: str, + program_args: tuple[str], +) -> None: + """Run the provided program""" + ret = script_impl.run_program(list(program_args), cwd=cwd, stdout=None, stderr=None) + ctx.exit(ret.returncode) diff --git a/tools/gui/fgui/misc/can/__init__.py b/cli/foxbms_version.py old mode 100644 new mode 100755 similarity index 94% rename from tools/gui/fgui/misc/can/__init__.py rename to cli/foxbms_version.py index 5cfc35db..6ba2b086 --- a/tools/gui/fgui/misc/can/__init__.py +++ b/cli/foxbms_version.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -38,4 +37,6 @@ # - "This product includes parts of foxBMS®" # - "This product is derived from foxBMS®" -# make package importable +"""Version specification""" + +__version__ = "1.7.0" diff --git a/tools/gui/fgui/misc/__init__.py b/cli/helpers/__init__.py old mode 100644 new mode 100755 similarity index 94% rename from tools/gui/fgui/misc/__init__.py rename to cli/helpers/__init__.py index 5cfc35db..d6859d02 --- a/tools/gui/fgui/misc/__init__.py +++ b/cli/helpers/__init__.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -38,4 +37,6 @@ # - "This product includes parts of foxBMS®" # - "This product is derived from foxBMS®" -# make package importable +"""Defines the tool name""" + +TOOL = "fox.py" diff --git a/cli/helpers/ansi_colors.py b/cli/helpers/ansi_colors.py new file mode 100755 index 00000000..b33ed50d --- /dev/null +++ b/cli/helpers/ansi_colors.py @@ -0,0 +1,65 @@ +#!/usr/bin/env python3 +# +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# All rights reserved. +# +# SPDX-License-Identifier: BSD-3-Clause +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# We kindly request you to use one or more of the following phrases to refer to +# foxBMS in your hardware, software, documentation or advertising materials: +# +# - "This product uses parts of foxBMS®" +# - "This product includes parts of foxBMS®" +# - "This product is derived from foxBMS®" + +"""ANSI color codes""" + +import os + +if os.getenv("NO_COLOR", ""): + BLACK = "" + RED = "" + GREEN = "" + YELLOW = "" + BLUE = "" + MAGENTA = "" + CYAN = "" + LIGHT_GRAY = "" + WHITE = "" + RESET = "" +else: + BLACK = "\033[30m" + RED = "\033[31m" + GREEN = "\033[32m" + YELLOW = "\033[33m" + BLUE = "\033[34m" + MAGENTA = "\033[35m" + CYAN = "\033[36m" + LIGHT_GRAY = "\033[37m" + WHITE = "\033[97m" + RESET = "\033[0m" diff --git a/tools/gui/fgui/__main__.py b/cli/helpers/host_platform.py old mode 100644 new mode 100755 similarity index 86% rename from tools/gui/fgui/__main__.py rename to cli/helpers/host_platform.py index 418968d3..ecb97329 --- a/tools/gui/fgui/__main__.py +++ b/cli/helpers/host_platform.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -38,8 +37,14 @@ # - "This product includes parts of foxBMS®" # - "This product is derived from foxBMS®" -"""make 'fgui' callable""" +"""Determine host platform""" -from fgui import foxbms_gui +import sys -foxbms_gui.main() # pylint: disable=no-value-for-parameter +if sys.platform.lower() == "linux": + PLATFORM = "linux" +elif sys.platform.lower() == "win32": + PLATFORM = "win32" +else: + PLATFORM = "" + sys.exit("Running on an unsupported platform.") diff --git a/cli/helpers/misc.py b/cli/helpers/misc.py new file mode 100755 index 00000000..42b36133 --- /dev/null +++ b/cli/helpers/misc.py @@ -0,0 +1,226 @@ +#!/usr/bin/env python3 +# +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# All rights reserved. +# +# SPDX-License-Identifier: BSD-3-Clause +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# We kindly request you to use one or more of the following phrases to refer to +# foxBMS in your hardware, software, documentation or advertising materials: +# +# - "This product uses parts of foxBMS®" +# - "This product includes parts of foxBMS®" +# - "This product is derived from foxBMS®" + + +"""Miscellaneous helper functions.""" + +import hashlib +import logging +import os +import sys +from pathlib import Path +from typing import Union + +from click import Context +from click.core import Parameter + +from .host_platform import PLATFORM +from .win32_vars import HOMEDRIVE, LOCALAPPDATA, PROGRAMFILES, USERPROFILE + +try: + from git import Repo + from git.exc import InvalidGitRepositoryError + + HAVE_GIT = True +except ImportError: + HAVE_GIT = False + +DISABLE_LOGGING_FOR_MODULES = ["git"] + + +def get_project_root(path: str = ".") -> Path: + """helper function to find the repository root + + Args: + path: path to retrieve the project root from + + Returns: + root path of the git repository + """ + if HAVE_GIT: + try: + repo = Repo(path, search_parent_directories=True) + root = repo.git.rev_parse("--show-toplevel") + except InvalidGitRepositoryError: + root = Path(__file__).parent.parent.parent + else: + root = Path(__file__).parent.parent.parent + return Path(root) + + +PROJECT_ROOT = get_project_root() + +PATH_FILE = PROJECT_ROOT / f"conf/env/paths_{PLATFORM}.txt" + +PATH_REPLACEMENTS = { + "$DOT_DIR$": [ + os.path.join(USERPROFILE, "graphviz"), + os.path.join(HOMEDRIVE, "graphviz"), + ], + "$DOXYGEN_DIR$": [ + os.path.join(USERPROFILE, "doxygen"), + os.path.join(HOMEDRIVE, "doxygen"), + ], + "$GIT_DIR$": [ + os.path.join(PROGRAMFILES, "Git"), + os.path.join(LOCALAPPDATA, "Programs", "Git"), + ], +} + + +def replace_var(rep: str) -> list[str]: + """replace the placeholder in the path with the actual values""" + if PLATFORM == "linux": + return [] + for k, v in PATH_REPLACEMENTS.items(): + if k in rep: + tmp = rep.split(k + os.sep)[1] + return [os.path.join(path, tmp) for path in v] + return [] + + +def init_path_var_for_foxbms() -> None: + """Add paths that foxBMS expects to exist to the PATH environment variable. + - If a path do not exist, it is not added to PATH + - If a path is already on PATH, it is not added to PATH + """ + prepare_config = [] + for i in PATH_FILE.read_text(encoding="utf-8").splitlines(): + if any(k for k, _ in PATH_REPLACEMENTS.items() if k in i): + prepare_config.extend(replace_var(i)) + else: + prepare_config.append(i) + prepend_to_path = [] + for i in prepare_config: + if Path(i).is_dir(): + prepend_to_path.append(i) + # now we have all entries that should be added + + # crate the full path, that might have some duplicates + full_path = prepend_to_path + os.environ.get("PATH", "").split(os.pathsep) + # remove duplicates, but keep list order + new_path_list = list(dict.fromkeys(full_path)) + new_path_list_clean: list[str] = [] + for i in new_path_list: + if os.sep + "WindowsApps" in i: + continue + new_path_list_clean.append(i) + + os.environ["PATH"] = os.pathsep.join(new_path_list_clean) + + +def ignore_third_party_logging() -> None: + """Disable logging for third party tool, except for errors""" + for module in DISABLE_LOGGING_FOR_MODULES: + logging.getLogger(module).setLevel(logging.CRITICAL) + + +def set_logging_level( + verbosity: int = 1, + _format: str = "%(asctime)s File:%(filename)-9s line:%(lineno)-4s %(levelname)-8s %(message)s", + datefmt: Union[str, None] = None, +) -> None: + """sets the module logging level + + :param verbosity: verbosity level + :param _format: logging format style + :param datefmt: date format style""" + + if verbosity < 1: + verbosity = 1 + elif verbosity > 3: + verbosity = 3 + + logging_levels = { + "1": logging.WARNING, + "2": logging.INFO, + "3": logging.DEBUG, + } + level = logging_levels[str(verbosity)] + logging.basicConfig( + format=_format, + datefmt=datefmt, + level=level, + ) + logging.debug("Setting logging level to %s", level) + + +def set_logging_level_cb(ctx: Context, param: Parameter | None, value: int) -> None: + """sets the module logging level through a click option callback""" + set_logging_level(verbosity=value) + + +def eprint(msg: str, color=False, err: bool = False) -> None: + """Enhanced printing function""" + if color: + msg = f"{color}{msg}\033[0m" + if err: + print(msg, file=sys.stderr) + else: + print(msg) + + +def get_sha256_file_hash( + file_path: Path, buffer_size: int = 65536, file_hash=hashlib.sha256() +) -> "hashlib._Hash": + """Calculate the SHA256 hash of a file""" + with open(file_path, "rb") as f: + while True: + data = f.read(buffer_size) + if not data: + break + file_hash.update(data) + return file_hash + + +def get_sha256_file_hash_str(file_path: Path, buffer_size: int = 65536) -> str: + """Returns the string representation of a SHA256 hash of a file""" + return get_sha256_file_hash( + file_path=file_path, buffer_size=buffer_size + ).hexdigest() + + +def get_multiple_files_hash_str(files: list[Path], buffer_size: int = 65536) -> str: + """Returns the string representation of a SHA256 hash for multiple files""" + file_hash = hashlib.sha256() + for i in files: + file_hash = get_sha256_file_hash( + i, buffer_size=buffer_size, file_hash=file_hash + ) + return file_hash.hexdigest() diff --git a/cli/helpers/spr.py b/cli/helpers/spr.py new file mode 100755 index 00000000..42223cae --- /dev/null +++ b/cli/helpers/spr.py @@ -0,0 +1,115 @@ +#!/usr/bin/env python3 +# +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# All rights reserved. +# +# SPDX-License-Identifier: BSD-3-Clause +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# We kindly request you to use one or more of the following phrases to refer to +# foxBMS in your hardware, software, documentation or advertising materials: +# +# - "This product uses parts of foxBMS®" +# - "This product includes parts of foxBMS®" +# - "This product is derived from foxBMS®" + +"""Simple subprocess wrapper""" + +import logging +import shutil +from dataclasses import dataclass +from pathlib import Path +from subprocess import PIPE, Popen +from typing import Sequence + +from .ansi_colors import RED +from .misc import PROJECT_ROOT, eprint + + +@dataclass +class SubprocessResult: + """Subprocess result""" + + returncode: int = 1 + out: str = "" + err: str = "" + + def __add__(self, other: "SubprocessResult") -> "SubprocessResult": + return SubprocessResult( + abs(self.returncode) + (other.returncode), + self.out + "\nnew:\n" + other.out, + self.err + "\nnew:\n" + other.err, + ) + + def __str__(self) -> str: + return f"return code: {self.returncode}\n\nout:{self.out}\n\n{self.err}\n" + + +def prepare_subprocess_output( + returncode: int, out: bytes, err: bytes +) -> SubprocessResult: + """Decode the subprocess output""" + if out: + out_str = out.decode("utf-8").strip() + else: + out_str = "" + if err: + err_str = err.decode("utf-8").strip() + else: + err_str = "" + return SubprocessResult(returncode=returncode, out=out_str, err=err_str) + + +def run_process( + cmd: Sequence[str | Path], + cwd: str | Path = PROJECT_ROOT, + stdout=PIPE, + stderr=PIPE, + env=None, +) -> SubprocessResult: + """Run the provided command""" + logging.debug("Original cmd: %s", cmd) + if len(cmd) == 0: + eprint("No program provided.", err=True, color=RED) + return prepare_subprocess_output( + 1, out=b"", err="No program provided.".encode(encoding="utf-8") + ) + executable = cmd[0] + if not shutil.which(executable): + eprint(f"Program '{cmd[0]}' does not exist.", err=True, color=RED) + return prepare_subprocess_output( + 1, + out=b"", + err=f"Program '{cmd[0]}' does not exist.".encode(encoding="utf-8"), + ) + logging.debug("Original cmd: %s", cmd) + # fix executable name (required on Windows because of PATHEXT) + cmd_str = [str(shutil.which(executable))] + [str(i) for i in cmd[1:]] + logging.debug("Stringified cmd: %s", " ".join(cmd_str)) + with Popen(cmd_str, cwd=cwd, stdout=stdout, stderr=stderr, env=env) as p: + out, err = p.communicate() + return prepare_subprocess_output(p.returncode, out, err) diff --git a/tests/env/packages/env_test_python-dateutil.py b/cli/helpers/win32_vars.py old mode 100644 new mode 100755 similarity index 62% rename from tests/env/packages/env_test_python-dateutil.py rename to cli/helpers/win32_vars.py index ce4a896b..08489e06 --- a/tests/env/packages/env_test_python-dateutil.py +++ b/cli/helpers/win32_vars.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -38,45 +37,33 @@ # - "This product includes parts of foxBMS®" # - "This product is derived from foxBMS®" -# pylint: disable=invalid-name +"""Get meaningful default values for relevant Windows environment variables. +Variables are set on Linux to some meaningful default value""" -"""Testing 'python-dateutil' package""" +import os -import argparse +from .host_platform import PLATFORM -# packages needed for tests -import datetime -import logging - -# package to test -import dateutil -import dateutil.relativedelta - - -def main(): - """Testing 'python-dateutil' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", +if PLATFORM == "linux": + USERNAME = os.environ.get("USER", "") + if not USERNAME: + USERNAME = os.environ.get("USERNAME", "unknown-user") + HOMEDRIVE = "/" + USERPROFILE = os.environ.get("HOME", "~") + PROGRAMFILES = USERPROFILE + PROGRAMFILESX86 = USERPROFILE + LOCALAPPDATA = USERPROFILE +elif PLATFORM == "win32": + USERNAME = os.environ.get("USERNAME", "unknown-user") + # must use '+ os.sep' otherwise the backslash is missing! + HOMEDRIVE = os.environ.get("HOMEDRIVE", "C:") + os.sep + USERPROFILE = os.environ.get("USERPROFILE", HOMEDRIVE) + PROGRAMFILES = os.environ.get( + "ProgramFiles", os.path.join(HOMEDRIVE, "Program Files") ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - logging.debug( - datetime.datetime.now() + dateutil.relativedelta.relativedelta(months=+1) + PROGRAMFILESX86 = os.environ.get( + "ProgramFiles(x86)", os.path.join(HOMEDRIVE, "Program Files (x86)") + ) + LOCALAPPDATA = os.environ.get( + "LOCALAPPDATA", os.path.join(USERPROFILE, "AppData\\Local") ) - - -if __name__ == "__main__": - main() diff --git a/tools/gui/fgui/workers/__init__.py b/cli/pre_commit_scripts/__init__.py old mode 100644 new mode 100755 similarity index 94% rename from tools/gui/fgui/workers/__init__.py rename to cli/pre_commit_scripts/__init__.py index 5cfc35db..d6859d02 --- a/tools/gui/fgui/workers/__init__.py +++ b/cli/pre_commit_scripts/__init__.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -38,4 +37,6 @@ # - "This product includes parts of foxBMS®" # - "This product is derived from foxBMS®" -# make package importable +"""Defines the tool name""" + +TOOL = "fox.py" diff --git a/cli/pre_commit_scripts/check_doxygen.py b/cli/pre_commit_scripts/check_doxygen.py new file mode 100755 index 00000000..eaa7566e --- /dev/null +++ b/cli/pre_commit_scripts/check_doxygen.py @@ -0,0 +1,175 @@ +#!/usr/bin/env python3 +# +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# All rights reserved. +# +# SPDX-License-Identifier: BSD-3-Clause +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# We kindly request you to use one or more of the following phrases to refer to +# foxBMS in your hardware, software, documentation or advertising materials: +# +# - "This product uses parts of foxBMS®" +# - "This product includes parts of foxBMS®" +# - "This product is derived from foxBMS®" + +"""Script to check the file level doxygen comment""" + +import argparse +from pathlib import Path +from subprocess import PIPE, Popen +import sys +from typing import Sequence +import re + +RE_DATE_FIELD = re.compile(r" \* @date \d{4}-\d{2}-\d{2} \(date of creation\)") +RE_UPDATED_FIELD = re.compile(r" \* @updated \d{4}-\d{2}-\d{2} \(date of last update\)") +RE_INGROUP_FIELD = re.compile(r" \* @ingroup [A-Z]{1,}") +RE_PREFIX_FIELD = re.compile(r" \* @prefix [A-Z]{1,5}") +RE_BRIEF_FIELD = re.compile(r" \* @brief [A-Z]{1,}") +RE_DETAILS_FIELD = re.compile(r" \* @details [A-Z]{1,}") + + +def run_check(filename: Path, version: str) -> int: + """Runs the check""" + fp = filename.as_posix() + try: + txt = filename.read_text(encoding="ascii") + except UnicodeDecodeError: + print(f"{fp}: Could not ASCII-decode file.") + return 1 + txt_lines = txt.splitlines() + err = 0 + try: + txt_lines[41] == "/**" + except IndexError: + err += 1 + print(f"{fp}: Doxygen comment start marker is missing.") + try: + txt_lines[42] == f" * @file {filename.name}" + except IndexError: + err += 1 + print(f"{fp}: Doxygen comment start marker is missing.") + try: + txt_lines[43] == " * @author foxBMS Team" + except IndexError: + err += 1 + print(f"{fp}: Doxygen @author field is wrong/missing.") + try: + if not RE_DATE_FIELD.match(txt_lines[44]): + err += 1 + print(f"{fp}: Doxygen @date field is wrong/missing.") + except IndexError: + err += 1 + print(f"{fp}: Doxygen @date field is wrong/missing.") + try: + if not RE_UPDATED_FIELD.match(txt_lines[45]): + err += 1 + print(f"{fp}: Doxygen @updated field is wrong/missing.") + except IndexError: + err += 1 + print(f"{fp}: Doxygen @updated field is wrong/missing.") + try: + txt_lines[46] == f" * @version v{version}" + except IndexError: + err += 1 + print(f"{fp}: Doxygen @version field is wrong/missing.") + try: + if not RE_INGROUP_FIELD.match(txt_lines[47]): + err += 1 + print(f"{fp}: Doxygen @ingroup field is wrong/missing.") + except IndexError: + err += 1 + print(f"{fp}: Doxygen @ingroup field is wrong/missing.") + try: + if not RE_PREFIX_FIELD.match(txt_lines[48]): + err += 1 + print(f"{fp}: Doxygen @prefix field is wrong/missing.") + except IndexError: + err += 1 + print(f"{fp}: Doxygen @prefix field is wrong/missing.") + try: + if not RE_BRIEF_FIELD.match(txt_lines[50]): + err += 1 + print(f"{fp}: Doxygen @brief field is wrong/missing.") + except IndexError: + err += 1 + print(f"{fp}: Doxygen @brief field is wrong/missing.") + + # now read until we find the @details comment: + idx_details = -1 + for ln, line in enumerate(txt_lines[51:]): + if line.startswith(" * @details "): + idx_details = ln + 51 + break + if txt_lines[idx_details - 1] == " *": + err += 1 + print(f"{fp}: There shall be no empty line between @brief and @details.") + + try: + if not RE_DETAILS_FIELD.match(txt_lines[idx_details]): + err += 1 + print(f"{fp}: Doxygen @details field is wrong/missing.") + except IndexError: + err += 1 + print(f"{fp}: Doxygen @details field is wrong/missing.") + + # we not check for comment closing was the compiler will do that. + return err + + +def check_doxygen(files: Sequence[Path], version: str) -> int: + """Check test files""" + err = 0 + for i in files: + if i.suffix == ".c": + continue + err += run_check(i, version) + return err + + +def main(argv: Sequence[str] | None = None) -> int: + """Doxygen file comment checker""" + parser = argparse.ArgumentParser() + parser.add_argument("files", nargs="*", help="Files to check") + args = parser.parse_args(argv) + err = 0 + cmd = [sys.executable, "fox.py", "--show-config"] + with Popen(cmd, stdout=PIPE) as p: + ver_str = p.communicate()[0].decode("utf-8") + try: + version = ver_str.split(":")[1] + except IndexError: + print("Could not determine foxBMS version.") + return 1 + files = [Path(i) for i in args.files] + err = check_doxygen(files=files, version=version) + return err + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/tests/env/packages/env_test_soupsieve.py b/cli/pre_commit_scripts/check_encoding.py old mode 100644 new mode 100755 similarity index 67% rename from tests/env/packages/env_test_soupsieve.py rename to cli/pre_commit_scripts/check_encoding.py index b41b9543..6e174e2c --- a/tests/env/packages/env_test_soupsieve.py +++ b/cli/pre_commit_scripts/check_encoding.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -38,37 +37,40 @@ # - "This product includes parts of foxBMS®" # - "This product is derived from foxBMS®" -"""Testing 'soupsieve' package""" +"""Script to check the encoding for a list of provided files""" import argparse -import logging +import codecs +from pathlib import Path +from typing import Sequence -# package to test -import soupsieve - -def main(): - """Testing 'soupsieve' package""" +def main(argv: Sequence[str] | None = None) -> int: + """Encoding header checker""" parser = argparse.ArgumentParser() parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", + "--encoding", + default="utf-8", + choices=["utf-8", "ascii"], + help="File encoding", ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - logging.debug(f"{soupsieve.__name__} {soupsieve.__version__}") + parser.add_argument("files", nargs="*", help="Files to check") + args = parser.parse_args(argv) + err = 0 + for i in args.files: + try: + with codecs.open(i, encoding=args.encoding, errors="strict"): + pass + except ValueError: + print(f"Could not open '{i}' in mode '{args.encoding}'.") + err += 1 + try: + Path(i).read_text(encoding=args.encoding) + except ValueError: + print(f"Could not open '{i}' in mode '{args.encoding}'.") + err += 1 + return err if __name__ == "__main__": - main() + raise SystemExit(main()) diff --git a/tests/env/packages/env_test_alsa-lib_linux.py b/cli/pre_commit_scripts/check_file_names.py old mode 100644 new mode 100755 similarity index 57% rename from tests/env/packages/env_test_alsa-lib_linux.py rename to cli/pre_commit_scripts/check_file_names.py index 02ae1176..b9c428a5 --- a/tests/env/packages/env_test_alsa-lib_linux.py +++ b/cli/pre_commit_scripts/check_file_names.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -38,34 +37,48 @@ # - "This product includes parts of foxBMS®" # - "This product is derived from foxBMS®" -# pylint:disable=invalid-name - -"""Testing 'alsa-lib' package""" +"""Script to check the list of provided files for uniqueness""" import argparse -import logging +from pathlib import Path +from subprocess import PIPE, Popen +from typing import Sequence +KNOWN = [ + "tests/axivion/addon-test/test_file_comments/interlock.c", + "tools/vendor/ceedling/plugins/dependencies/example/boss/src/main.c", + "tests/axivion/addon-test/test_file_comments/ltc_defs.h", + "src/os/freertos/LICENSE.md", + "docs/developer-manual/hardware/.dummy", + "docs/hardware/slaves/14-maxim-max17852-vx.x.x/.dummy", + "src/os/safertos/.dummy", + "src/os/safertos/include/.dummy", +] -def main(): - """Testing 'alsa-lib' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) +def main(argv: Sequence[str] | None = None) -> int: + """File name uniqueness checker""" + parser = argparse.ArgumentParser() + parser.add_argument("files", nargs="*", help="Files to check") + args = parser.parse_args(argv) + err = 0 + with Popen(["git", "ls-files"], stdout=PIPE) as p: + out = p.communicate()[0] + tmp = out.decode("utf-8").splitlines() + repo_files = [] + for i in tmp: + file_to_add = Path(i) + if file_to_add.as_posix() not in KNOWN: + repo_files.append(file_to_add.name) + for i in args.files: + if repo_files.count(Path(i).name) > 1: + print(f"{Path(i)}: File name '{Path(i).name}' exists multiple times.") + for j in repo_files: + if Path(i).name == Path(j).name: + print(i, j) + err += 1 + return err if __name__ == "__main__": - main() + raise SystemExit(main()) diff --git a/conf/spell/check_dicts.py b/cli/pre_commit_scripts/check_include_guard.py old mode 100644 new mode 100755 similarity index 50% rename from conf/spell/check_dicts.py rename to cli/pre_commit_scripts/check_include_guard.py index 7112138c..8366ba94 --- a/conf/spell/check_dicts.py +++ b/cli/pre_commit_scripts/check_include_guard.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -38,74 +37,76 @@ # - "This product includes parts of foxBMS®" # - "This product is derived from foxBMS®" -"""Template for Python scripts""" +"""Script to check the include guard in header-files""" import argparse -import logging -import sys - from pathlib import Path +from typing import Sequence -SCRIPT_DIR = Path(__file__).parent.resolve() -ROOT_DIR = Path(__file__).parent.parent.parent - - -def main(): - """This script does this and that""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() +MARKERS = [ + "#ifndef {}", + "#define {}", + "#endif /* {} */", +] - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - dict_files = (SCRIPT_DIR / "dicts").glob("*.txt") +def run_check(filename: Path) -> int: + """Runs the check""" + txt = filename.read_text(encoding="ascii") + txt_lines = txt.splitlines() err = 0 - dicts = {} - for i in dict_files: - txt = i.read_text(encoding="utf-8") - if not txt: - err += 1 - logging.error( - f"Found empty dictionary: {i.absolute()}. " - "Empty dicts are not allowed." - ) - words = txt.splitlines() - if not words == sorted(words): - logging.error( - f"Found unsorted dictionary: {i.absolute()}. " - "Word lists must be alphabetically sorted." - ) + name = "".join([c if c.isalnum() else "_" for c in filename.stem.upper()]) + define_guard = f"FOXBMS__{name}_H_" + + for i in MARKERS: + marker = i.format(define_guard) + if not txt_lines.count(marker): err += 1 - if not len(words) == len(set(words)): - logging.error( - f"Found duplicate entries in dictionary: {i.absolute()}. " - "Words must be unique per file." - ) + print(f"{filename.as_posix()}: {marker} is missing.") + if txt_lines.count(marker) > 1: err += 1 - for word in words: - for source, known_words in dicts.items(): - if word in known_words: - logging.error( - f"Dictionary {i.relative_to(ROOT_DIR)} contains word " - f"'{word}' which is already in the word list " - f"provided by '{source.relative_to(ROOT_DIR)}'." - ) - # now we are good to add the words to the global dictionary - dicts[i] = words - sys.exit(err) + print(f"{filename.as_posix()}: {marker} occurs more than once.") + idx = [] + for marker in MARKERS: + marker = i.format(define_guard) + try: + idx.append(txt_lines.index(marker)) + except ValueError: + idx.append(-1) + if idx != sorted(idx): + err += 1 + print(f"{filename.as_posix()}: markers are not in the correct order.") + marker_0 = MARKERS[0].format(define_guard) + marker_1 = MARKERS[1].format(define_guard) + if f"\n\n{marker_0}\n{marker_1}\n\n" not in txt: + err += 1 + print( + f"{filename.as_posix()}: The pattern needs to be:" + f"\n\n#ifndef {define_guard}\n#define {define_guard}\n\n" + ) + return err + + +def check_include_guard(files: Sequence[Path]) -> int: + """Check test files""" + err = 0 + for i in files: + if i.suffix == ".c": + continue + err += run_check(i) + return err + + +def main(argv: Sequence[str] | None = None) -> int: + """define guard checker""" + parser = argparse.ArgumentParser() + parser.add_argument("files", nargs="*", help="Files to check") + args = parser.parse_args(argv) + err = 0 + files = [Path(i) for i in args.files] + err = check_include_guard(files=files) + return err if __name__ == "__main__": - main() + raise SystemExit(main()) diff --git a/cli/pre_commit_scripts/check_license_info.py b/cli/pre_commit_scripts/check_license_info.py new file mode 100755 index 00000000..ccb769ba --- /dev/null +++ b/cli/pre_commit_scripts/check_license_info.py @@ -0,0 +1,261 @@ +#!/usr/bin/env python3 +# +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# All rights reserved. +# +# SPDX-License-Identifier: BSD-3-Clause +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# We kindly request you to use one or more of the following phrases to refer to +# foxBMS in your hardware, software, documentation or advertising materials: +# +# - "This product uses parts of foxBMS®" +# - "This product includes parts of foxBMS®" +# - "This product is derived from foxBMS®" + +"""Script to check the license information for a list of provided files""" + +import argparse +from pathlib import Path +from typing import Sequence + +LICENSE_BASE_TEXT = [ + "SPDX-License-Identifier: BSD-3-Clause", + "", + "Redistribution and use in source and binary forms, with or without", + "modification, are permitted provided that the following conditions are met:", + "", + "1. Redistributions of source code must retain the above copyright notice, this", + " list of conditions and the following disclaimer.", + "", + "2. Redistributions in binary form must reproduce the above copyright notice,", + " this list of conditions and the following disclaimer in the documentation", + " and/or other materials provided with the distribution.", + "", + "3. Neither the name of the copyright holder nor the names of its", + " contributors may be used to endorse or promote products derived from", + " this software without specific prior written permission.", + "", + 'THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"', + "AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE", + "IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE", + "DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE", + "FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL", + "DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR", + "SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER", + "CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,", + "OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE", + "OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.", + "", + "We kindly request you to use one or more of the following phrases to refer to", + "foxBMS in your hardware, software, documentation or advertising materials:", + "", + '- "This product uses parts of foxBMS®"', + '- "This product includes parts of foxBMS®"', + '- "This product is derived from foxBMS®"', +] + + +def compare_header( + file_name: Path, expected: list[str], actual: list[str], start: int, end: int +) -> int: + """compares to lists of strings""" + err = 0 + if not len(actual) >= end + 1: + print(f"License header '{file_name}' is not correct.") + err += 1 + + if not actual[start : end + 1] == expected: + print(f"License header '{file_name}' is not correct.") + print("The following lines differ") + for i, (e, a) in enumerate(zip(expected, actual)): + if not e == a: + print(f"Line {i+1}: Expected: {e}") + print(f"Line {i+1}: Actual: {a}") + err += 1 + return err + + +def check_c(files: Sequence[str]) -> int: + """Check C sources""" + err = 0 + prolog = [ + "/**", + " *", + # pylint: disable-next=line-too-long + " * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V.", + " * All rights reserved.", + " *", + ] + epilog = [" *", " */"] + char = " * " + txt = [] + for i in LICENSE_BASE_TEXT: + txt.append((char + i.replace("®", "®")).rstrip()) + license_text = prolog + txt + epilog + start = 0 + end = 39 + for i in files: + tmp = Path(i).read_text(encoding="utf-8").splitlines() + err += compare_header( + file_name=Path(i), + expected=license_text, + actual=tmp, + start=start, + end=end, + ) + return err + + +def check_py(files: Sequence[str]) -> int: + """Check Python scripts""" + err = 0 + prolog = [ + "#", + # pylint: disable-next=line-too-long + "# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V.", + "# All rights reserved.", + "#", + ] + char = "# " + txt = [] + for i in LICENSE_BASE_TEXT: + txt.append((char + i).rstrip()) + license_text = prolog + txt + start = 1 + end = 37 + for i in files: + tmp = Path(i).read_text(encoding="utf-8").splitlines() + err += compare_header( + file_name=Path(i), + expected=license_text, + actual=tmp, + start=start, + end=end, + ) + return err + + +def check_yaml(files: Sequence[str]) -> int: + """Check YAML files""" + err = 0 + prolog = [ + # pylint: disable-next=line-too-long + "# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V.", + "# All rights reserved.", + "#", + ] + char = "# " + txt = [] + for i in LICENSE_BASE_TEXT: + txt.append((char + i).rstrip()) + license_text = prolog + txt + start = 0 + end = 35 + for i in files: + tmp = Path(i).read_text(encoding="utf-8").splitlines() + err += compare_header( + file_name=Path(i), + expected=license_text, + actual=tmp, + start=start, + end=end, + ) + return err + + +def check_toml(files: Sequence[str]) -> int: + """Check toml files""" + # same header + print(11) + return check_yaml(files) + + +def check_pwsh(files: Sequence[str]) -> int: + """Check pwsh scripts""" + # same header + return check_py(files) + + +def check_batch(files: Sequence[str]) -> int: + """Check batch scripts""" + err = 0 + prolog = [ + # pylint: disable-next=line-too-long + "@REM Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V.", + "@REM All rights reserved.", + "@REM", + ] + char = "@REM " + txt = [] + for i in LICENSE_BASE_TEXT: + txt.append((char + i.replace("®", "®")).rstrip()) + license_text = prolog + txt + start = 0 + end = 35 + for i in files: + tmp = Path(i).read_text(encoding="utf-8").splitlines() + err += compare_header( + file_name=Path(i), + expected=license_text, + actual=tmp, + start=start, + end=end, + ) + return err + + +def check_shell(files: Sequence[str]) -> int: + """Check shell scripts""" + # same header + return check_py(files) + + +def check_dot(files: Sequence[str]) -> int: + """Check dot files""" + # same header + return check_yaml(files) + + +def main(argv: Sequence[str] | None = None) -> int: + """License header checker""" + parser = argparse.ArgumentParser() + parser.add_argument( + "--file-type", + default="c", + choices=["c", "py", "yaml", "toml", "pwsh", "batch", "shell", "dot"], + help="File type", + ) + parser.add_argument("files", nargs="*", help="Files to check") + args = parser.parse_args(argv) + err = 0 + err = globals()[f"check_{args.file_type}"](files=args.files) + return err + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/cli/pre_commit_scripts/check_sections.py b/cli/pre_commit_scripts/check_sections.py new file mode 100755 index 00000000..a60e78fe --- /dev/null +++ b/cli/pre_commit_scripts/check_sections.py @@ -0,0 +1,177 @@ +#!/usr/bin/env python3 +# +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# All rights reserved. +# +# SPDX-License-Identifier: BSD-3-Clause +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# We kindly request you to use one or more of the following phrases to refer to +# foxBMS in your hardware, software, documentation or advertising materials: +# +# - "This product uses parts of foxBMS®" +# - "This product includes parts of foxBMS®" +# - "This product is derived from foxBMS®" + +"""Script to check the section markers in C files""" + +import argparse +from pathlib import Path +from typing import Sequence + +TYPES = { + "src.c": [ + "/*========== Includes =======================================================*/", + "/*========== Macros and Definitions =========================================*/", + "/*========== Static Constant and Variable Definitions =======================*/", + "/*========== Extern Constant and Variable Definitions =======================*/", + "/*========== Static Function Prototypes =====================================*/", + "/*========== Static Function Implementations ================================*/", + "/*========== Extern Function Implementations ================================*/", + "/*========== Externalized Static Function Implementations (Unit Test) =======*/", + ], + "src.h": [ + "/*========== Includes =======================================================*/", + "/*========== Macros and Definitions =========================================*/", + "/*========== Extern Constant and Variable Declarations ======================*/", + "/*========== Extern Function Prototypes =====================================*/", + "/*========== Externalized Static Functions Prototypes (Unit Test) ===========*/", + ], + "test.c": [ + "/*========== Includes =======================================================*/", + "/*========== Unit Testing Framework Directives ==============================*/", + "/*========== Definitions and Implementations for Unit Test ==================*/", + "/*========== Setup and Teardown =============================================*/", + "/*========== Test Cases =====================================================*/", + ], + "test.h": [ + "/*========== Includes =======================================================*/", + "/*========== Unit Testing Framework Directives ==============================*/", + "/*========== Macros and Definitions =========================================*/", + ], +} + + +def run_check(filename: Path, file_type) -> int: + """Runs the check""" + txt = filename.read_text(encoding="ascii") + txt_lines = txt.splitlines() + markers = TYPES[file_type] + err = 0 + for marker in markers: + if not txt_lines.count(marker): + err += 1 + print(f"{filename.as_posix()}: {marker} is missing.") + if txt_lines.count(marker) > 1: + err += 1 + print(f"{filename.as_posix()}: {marker} occurs more than once.") + for marker in markers: + if f"\n\n{marker}\n" not in txt: + err += 1 + print( + f"{filename.as_posix()}: {marker} requires a blank line " + "before the marker." + ) + idx = [] + for marker in markers: + try: + idx.append(txt_lines.index(marker)) + except ValueError: + err += 1 + print(f"{filename.as_posix()}: Could not find {marker}.") + idx.append(-1) + if idx != sorted(idx): + err += 1 + print(f"{filename.as_posix()}: markers are not in the correct order.") + + if file_type in ["src.c", "src.h"]: + if filename == Path("src/app/application/config/battery_system_cfg.h"): + return err + try: + unit_test_define = txt_lines.index(TYPES[file_type][-1]) + 1 + except ValueError: + err += 1 + print(f"{filename.as_posix()}: Could not find {marker}.") + idx.append(-1) + return err + try: + if not txt_lines[unit_test_define] == "#ifdef UNITY_UNIT_TEST": + err += 1 + print( + f"{filename.as_posix()}: '#ifdef UNITY_UNIT_TEST' is " + f"missing after {TYPES[file_type][-1]}." + ) + except IndexError: + err += 1 + print( + f"{filename.as_posix()}: '#ifdef UNITY_UNIT_TEST' is " + f"missing after {TYPES[file_type][-1]}." + ) + return err + + +def check_src(files: Sequence[Path]) -> int: + """Check src files""" + err = 0 + for i in files: + if i.suffix == ".c": + err += run_check(i, "src.c") + elif i.suffix == ".h": + err += run_check(i, "src.h") + return err + + +def check_test(files: Sequence[Path]) -> int: + """Check test files""" + err = 0 + for i in files: + if i.suffix == ".c": + err += run_check(i, "test.c") + elif i.suffix == ".h": + err += run_check(i, "test.h") + return err + + +def main(argv: Sequence[str] | None = None) -> int: + """Encoding header checker""" + parser = argparse.ArgumentParser() + parser.add_argument( + "--file-type", + default="src", + choices=["src", "test"], + help="File type", + ) + parser.add_argument("files", nargs="*", help="Files to check") + args = parser.parse_args(argv) + err = 0 + files = [Path(i) for i in args.files] + err = globals()[f"check_{args.file_type}"](files=files) + return err + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/conf/README.md b/conf/README.md new file mode 100644 index 00000000..d8d631e0 --- /dev/null +++ b/conf/README.md @@ -0,0 +1,10 @@ +# `conf` Directory Description + +| Directory Name | Long Name | Content Description | +| ---------------- | --------------------------- | ------------------------------------------------------------------------ | +| `bms` | Battery Management System | Configuration of the BMS (e.g., used AFE) | +| `cc` | C compiler | Compiler configuration (e.g., compiler flags) | +| `env` | Environment | Environment configuration files (e.g., Path, Conda package dependencies) | +| `hcg` | HalCoGen | HalCoGen configuration files for the Hardware Abstraction Layer | +| `tpl` | Templates | Template files for source files (C, Python, etc.) | +| `unit` | Unit tests | Unit test configuration files | diff --git a/conf/bms/bms.json b/conf/bms/bms.json index 30690c28..ca60c30c 100644 --- a/conf/bms/bms.json +++ b/conf/bms/bms.json @@ -1,31 +1,31 @@ { - "slave-unit": { - "analog-front-end": { - "manufacturer": "ltc", - "ic": "6813-1" - }, - "temperature-sensor": { - "manufacturer": "epcos", - "model": "b57251v5103j060", - "method": "polynomial" - } + "application": { + "algorithm": { + "state-estimation": { + "soc": "counting", + "soe": "counting", + "sof": "trapezoid", + "soh": "none" + } }, - "application": { - "algorithm": { - "state-estimation": { - "soc": "counting", - "soe": "counting", - "sof": "trapezoid", - "soh": "none" - } - }, - "balancing-strategy": "none", - "insulation-monitoring-device": { - "manufacturer": "bender", - "model": "iso165c" - } + "balancing-strategy": "none", + "insulation-monitoring-device": { + "manufacturer": "bender", + "model": "iso165c" + } + }, + "rtos": { + "name": "freertos" + }, + "slave-unit": { + "analog-front-end": { + "ic": "6813-1", + "manufacturer": "ltc" }, - "rtos": { - "name": "freertos" + "temperature-sensor": { + "manufacturer": "epcos", + "method": "polynomial", + "model": "b57251v5103j060" } + } } diff --git a/conf/bms/schema/application.schema.json b/conf/bms/schema/application.schema.json deleted file mode 100644 index 59dae3a5..00000000 --- a/conf/bms/schema/application.schema.json +++ /dev/null @@ -1,144 +0,0 @@ -{ - "$id": "/properties/application", - "title": "Configuration of the application", - "required": [ - "algorithm", - "balancing-strategy", - "insulation-monitoring-device" - ], - "additionalProperties": false, - "properties": { - "algorithm": { - "$id": "/properties/application/algorithm", - "title": "Configuration of the algorithm module", - "required": [ - "state-estimation" - ], - "properties": { - "state-estimation": { - "$id": "/properties/application/algorithm/state-estimation", - "title": "State estimators (must correspond to the directory name)", - "required": [ - "soc", - "soe", - "sof", - "soh" - ], - "properties": { - "soc": { - "$id": "/properties/application/algorithm/state-estimation/soc", - "title": "State-of-Charge algorithm (must correspond to the directory name)", - "type": "string", - "enum": [ - "counting", - "debug", - "none" - ] - }, - "soe": { - "$id": "/properties/application/algorithm/state-estimation/soe", - "title": "State-of-Energy algorithm (must correspond to the directory name)", - "type": "string", - "enum": [ - "counting", - "debug", - "none" - ] - }, - "sof": { - "$id": "/properties/application/algorithm/state-estimation/sof", - "title": "State-of-Function algorithm (must correspond to the directory name)", - "type": "string", - "enum": [ - "trapezoid" - ] - }, - "soh": { - "$id": "/properties/application/algorithm/state-estimation/soh", - "title": "State-of-Health algorithm (must correspond to the directory name)", - "type": "string", - "enum": [ - "debug", - "none" - ] - } - } - } - } - }, - "balancing-strategy": { - "$id": "/properties/application/balancing-strategy", - "title": "Balancing strategy", - "type": "string", - "enum": [ - "voltage", - "history", - "none" - ] - }, - "insulation-monitoring-device": { - "$id": "/properties/application/insulation-monitoring-device", - "title": "Configuration of the used insulation measurement device", - "required": [ - "manufacturer", - "model" - ], - "additionalProperties": false, - "properties": { - "manufacturer": { - "$id": "/properties/application/insulation-monitoring-device/manufacturer", - "title": "Manufacturer of the insulation monitoring device (must correspond to the directory name)", - "type": "string", - "enum": [ - "none", - "bender" - ] - }, - "model": { - "$id": "/properties/application/insulation-monitoring-device/model", - "title": "Name of the insulation monitoring device (must correspond to the directory name)", - "type": "string" - } - }, - "if": { - "properties": { - "manufacturer": { - "enum": [ - "none" - ] - } - } - }, - "then": { - "properties": { - "model": { - "enum": [ - "" - ] - } - } - }, - "else": { - "if": { - "properties": { - "manufacturer": { - "enum": [ - "bender" - ] - } - } - }, - "then": { - "properties": { - "model": { - "enum": [ - "ir155", - "iso165c" - ] - } - } - } - } - } - } -} diff --git a/conf/bms/schema/bms.schema.json b/conf/bms/schema/bms.schema.json index 8c46c78a..36224275 100644 --- a/conf/bms/schema/bms.schema.json +++ b/conf/bms/schema/bms.schema.json @@ -1,19 +1,445 @@ { - "required": [ - "application", - "slave-unit", - "rtos" - ], - "additionalProperties": false, - "properties": { - "application": { - "$ref": "application.schema.json#" - }, - "slave-unit": { - "$ref": "slave.schema.json#" - }, - "rtos": { - "$ref": "rtos.schema.json#" - } + "additionalProperties": false, + "properties": { + "application": { + "algorithm": { + "$id": "/properties/application/algorithm", + "properties": { + "state-estimation": { + "$id": "/properties/application/algorithm/state-estimation", + "properties": { + "soc": { + "$id": "/properties/application/algorithm/state-estimation/soc", + "enum": [ + "counting", + "debug", + "none" + ], + "title": "State-of-Charge algorithm (must correspond to the directory name)", + "type": "string" + }, + "soe": { + "$id": "/properties/application/algorithm/state-estimation/soe", + "enum": [ + "counting", + "debug", + "none" + ], + "title": "State-of-Energy algorithm (must correspond to the directory name)", + "type": "string" + }, + "sof": { + "$id": "/properties/application/algorithm/state-estimation/sof", + "enum": [ + "trapezoid" + ], + "title": "State-of-Function algorithm (must correspond to the directory name)", + "type": "string" + }, + "soh": { + "$id": "/properties/application/algorithm/state-estimation/soh", + "enum": [ + "debug", + "none" + ], + "title": "State-of-Health algorithm (must correspond to the directory name)", + "type": "string" + } + }, + "required": [ + "soc", + "soe", + "sof", + "soh" + ], + "title": "State estimators (must correspond to the directory name)" + } + }, + "required": [ + "state-estimation" + ], + "title": "Configuration of the algorithm module" + }, + "balancing-strategy": { + "$id": "/properties/application/balancing-strategy", + "enum": [ + "voltage", + "history", + "none" + ], + "title": "Balancing strategy", + "type": "string" + }, + "insulation-monitoring-device": { + "$id": "/properties/application/insulation-monitoring-device", + "additionalProperties": false, + "else": { + "if": { + "properties": { + "manufacturer": { + "enum": [ + "bender" + ] + } + } + }, + "then": { + "properties": { + "model": { + "enum": [ + "ir155", + "iso165c" + ] + } + } + } + }, + "if": { + "properties": { + "manufacturer": { + "enum": [ + "none" + ] + } + } + }, + "properties": { + "manufacturer": { + "$id": "/properties/application/insulation-monitoring-device/manufacturer", + "enum": [ + "none", + "bender" + ], + "title": "Manufacturer of the insulation monitoring device (must correspond to the directory name)", + "type": "string" + }, + "model": { + "$id": "/properties/application/insulation-monitoring-device/model", + "title": "Name of the insulation monitoring device (must correspond to the directory name)", + "type": "string" + } + }, + "required": [ + "manufacturer", + "model" + ], + "then": { + "properties": { + "model": { + "enum": [ + "" + ] + } + } + }, + "title": "Configuration of the used insulation measurement device" + } + }, + "rtos": { + "name": { + "$id": "/properties/rtos/name", + "enum": [ + "freertos", + "safertos" + ], + "title": "Name of the Real Time Operating System (must correspond to the directory name)", + "type": "string" + } + }, + "slave-unit": { + "analog-front-end": { + "$id": "/properties/slave-unit/analog-front-end", + "additionalProperties": false, + "else": { + "else": { + "else": { + "else": { + "else": { + "if": { + "properties": { + "manufacturer": { + "enum": [ + "ti" + ] + } + } + }, + "properties": { + "ic": { + "enum": [ + "dummy" + ] + } + } + }, + "if": { + "properties": { + "manufacturer": { + "enum": [ + "adi" + ] + } + } + }, + "then": { + "properties": { + "ic": { + "enum": [ + "ades1830" + ] + } + } + } + }, + "if": { + "properties": { + "manufacturer": { + "enum": [ + "debug" + ] + } + } + }, + "then": { + "properties": { + "ic": { + "enum": [ + "default", + "can" + ] + } + } + } + }, + "if": { + "properties": { + "manufacturer": { + "enum": [ + "maxim" + ] + } + } + }, + "then": { + "properties": { + "ic": { + "enum": [ + "max17852" + ] + } + } + } + }, + "if": { + "properties": { + "manufacturer": { + "enum": [ + "nxp" + ] + } + } + }, + "then": { + "properties": { + "ic": { + "enum": [ + "mc33775a" + ] + } + } + } + }, + "if": { + "properties": { + "manufacturer": { + "enum": [ + "ltc" + ] + } + } + }, + "properties": { + "ic": { + "$id": "/properties/slave-unit/analog-front-end/ic", + "title": "Name of the Analog Front-End (must correspond to the directory name)", + "type": "string" + }, + "manufacturer": { + "$id": "/properties/slave-unit/analog-front-end/manufacturer", + "enum": [ + "ltc", + "maxim", + "nxp", + "debug", + "adi", + "ti" + ], + "title": "Manufacturer of the Analog Front-End (must correspond to the directory name)", + "type": "string" + } + }, + "required": [ + "manufacturer", + "ic" + ], + "then": { + "properties": { + "ic": { + "enum": [ + "6804-1", + "6806", + "6811-1", + "6812-1", + "6813-1" + ] + } + } + }, + "title": "Configuration of the Analog Front-End" + }, + "temperature-sensor": { + "$id": "/properties/slave-unit/temperature-sensor", + "additionalProperties": false, + "else": { + "else": { + "else": { + "else": { + "if": { + "properties": { + "manufacturer": { + "enum": [ + "fake" + ] + } + } + }, + "then": { + "properties": { + "model": { + "enum": [ + "none" + ] + } + } + } + }, + "if": { + "properties": { + "manufacturer": { + "enum": [ + "vishay" + ] + } + } + }, + "then": { + "properties": { + "model": { + "enum": [ + "ntcalug01a103g", + "ntcle317e4103sba" + ] + } + } + } + }, + "if": { + "properties": { + "manufacturer": { + "enum": [ + "semitec" + ] + } + } + }, + "then": { + "properties": { + "model": { + "enum": [ + "103jt" + ] + } + } + } + }, + "if": { + "properties": { + "manufacturer": { + "enum": [ + "murata" + ] + } + } + }, + "then": { + "properties": { + "model": { + "enum": [ + "ncxxxxh103" + ] + } + } + } + }, + "if": { + "properties": { + "manufacturer": { + "enum": [ + "epcos" + ] + } + } + }, + "properties": { + "manufacturer": { + "$id": "/properties/slave-unit/temperature-sensor/manufacturer", + "enum": [ + "epcos", + "murata", + "semitec", + "vishay", + "fake" + ], + "title": "Manufacturer of the temperature sensor (must correspond to the directory name)", + "type": "string" + }, + "method": { + "$id": "/properties/slave-unit/temperature-sensor/method", + "enum": [ + "polynomial", + "lookup-table" + ], + "title": "Method on which the temperature calculation is based on (must correspond to the directory name)", + "type": "string" + }, + "model": { + "$id": "/properties/slave-unit/temperature-sensor/model", + "title": "Name of the temperature sensor (must correspond to the directory name)", + "type": "string" + } + }, + "required": [ + "manufacturer", + "model", + "method" + ], + "then": { + "properties": { + "model": { + "enum": [ + "b57251v5103j060", + "b57861s0103f045" + ] + } + } + }, + "title": "Configuration of the temperature sensor" + } } + }, + "required": [ + "application", + "slave-unit", + "rtos" + ] } diff --git a/conf/bms/schema/rtos.schema.json b/conf/bms/schema/rtos.schema.json deleted file mode 100644 index e8230111..00000000 --- a/conf/bms/schema/rtos.schema.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "$id": "/properties/rtos", - "title": "Configuration of the Operating System", - "required": [ - "name" - ], - "additionalProperties": false, - "properties": { - "name": { - "$id": "/properties/rtos/name", - "title": "Name of the Real Time Operating System (must correspond to the directory name)", - "type": "string", - "enum": [ - "freertos", - "safertos" - ] - } - } -} diff --git a/conf/bms/schema/slave.schema.json b/conf/bms/schema/slave.schema.json deleted file mode 100644 index b268d156..00000000 --- a/conf/bms/schema/slave.schema.json +++ /dev/null @@ -1,277 +0,0 @@ -{ - "$id": "/properties/slave-unit", - "title": "Configuration of Slave Unit", - "required": [ - "analog-front-end", - "temperature-sensor" - ], - "additionalProperties": false, - "properties": { - "analog-front-end": { - "$id": "/properties/slave-unit/analog-front-end", - "title": "Configuration of the Analog Front-End", - "required": [ - "manufacturer", - "ic" - ], - "additionalProperties": false, - "properties": { - "manufacturer": { - "$id": "/properties/slave-unit/analog-front-end/manufacturer", - "title": "Manufacturer of the Analog Front-End (must correspond to the directory name)", - "type": "string", - "enum": [ - "ltc", - "maxim", - "nxp", - "debug", - "adi", - "ti" - ] - }, - "ic": { - "$id": "/properties/slave-unit/analog-front-end/ic", - "title": "Name of the Analog Front-End (must correspond to the directory name)", - "type": "string" - } - }, - "if": { - "properties": { - "manufacturer": { - "enum": [ - "ltc" - ] - } - } - }, - "then": { - "properties": { - "ic": { - "enum": [ - "6804-1", - "6806", - "6811-1", - "6812-1", - "6813-1" - ] - } - } - }, - "else": { - "if": { - "properties": { - "manufacturer": { - "enum": [ - "nxp" - ] - } - } - }, - "then": { - "properties": { - "ic": { - "enum": [ - "mc33775a" - ] - } - } - }, - "else": { - "if": { - "properties": { - "manufacturer": { - "enum": [ - "maxim" - ] - } - } - }, - "then": { - "properties": { - "ic": { - "enum": [ - "max17852" - ] - } - } - }, - "else": { - "if": { - "properties": { - "manufacturer": { - "enum": [ - "debug" - ] - } - } - }, - "then": { - "properties": { - "ic": { - "enum": [ - "default" - ] - } - } - }, - "else": { - "if": { - "properties": { - "manufacturer": { - "enum": [ - "adi" - ] - } - } - }, - "then": { - "properties": { - "ic": { - "enum": [ - "ades1830" - ] - } - } - }, - "else": { - "if": { - "properties": { - "manufacturer": { - "enum": [ - "ti" - ] - } - } - }, - "properties": { - "ic": { - "enum": [ - "dummy" - ] - } - } - } - } - } - } - } - }, - "temperature-sensor": { - "$id": "/properties/slave-unit/temperature-sensor", - "title": "Configuration of the temperature sensor", - "required": [ - "manufacturer", - "model", - "method" - ], - "additionalProperties": false, - "properties": { - "manufacturer": { - "$id": "/properties/slave-unit/temperature-sensor/manufacturer", - "title": "Manufacturer of the temperature sensor (must correspond to the directory name)", - "type": "string", - "enum": [ - "epcos", - "murata", - "vishay", - "fake" - ] - }, - "model": { - "$id": "/properties/slave-unit/temperature-sensor/model", - "title": "Name of the temperature sensor (must correspond to the directory name)", - "type": "string" - }, - "method": { - "$id": "/properties/slave-unit/temperature-sensor/method", - "title": "Method on which the temperature calculation is based on (must correspond to the directory name)", - "type": "string", - "enum": [ - "polynomial", - "lookup-table" - ] - } - }, - "if": { - "properties": { - "manufacturer": { - "enum": [ - "epcos" - ] - } - } - }, - "then": { - "properties": { - "model": { - "enum": [ - "b57251v5103j060", - "b57861s0103f045" - ] - } - } - }, - "else": { - "if": { - "properties": { - "manufacturer": { - "enum": [ - "murata" - ] - } - } - }, - "then": { - "properties": { - "model": { - "enum": [ - "ncxxxxh103" - ] - } - } - }, - "else": { - "if": { - "properties": { - "manufacturer": { - "enum": [ - "vishay" - ] - } - } - }, - "then": { - "properties": { - "model": { - "enum": [ - "ntcalug01a103g", - "ntcle317e4103sba" - ] - } - } - }, - "else": { - "if": { - "properties": { - "manufacturer": { - "enum": [ - "fake" - ] - } - } - }, - "then": { - "properties": { - "model": { - "enum": [ - "none" - ] - } - } - } - } - } - } - } - } -} diff --git a/conf/cc/cc-options.yaml b/conf/cc/cc-options.yaml index a605e207..d1a205da 100644 --- a/conf/cc/cc-options.yaml +++ b/conf/cc/cc-options.yaml @@ -1,4 +1,4 @@ -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause diff --git a/conf/cc/linker_pulls.json b/conf/cc/linker_pulls.json index b3cf64d3..a2916327 100644 --- a/conf/cc/linker_pulls.json +++ b/conf/cc/linker_pulls.json @@ -1,5 +1,5 @@ { - "_c_int00": "src/app/main/fstartup.c.1.obj", - "canMessageNotification": "src/app/driver/libfoxbms-driver.a", - "dmaGroupANotification": "src/app/driver/libfoxbms-driver.a" + "_c_int00": "src/app/main/fstartup.c.1.obj", + "canMessageNotification": "src/app/driver/libfoxbms-driver.a", + "dmaGroupANotification": "src/app/driver/libfoxbms-driver.a" } diff --git a/conf/env/conda_env_linux-pkgs.yaml b/conf/env/conda_env_linux-pkgs.yaml deleted file mode 100644 index 7b417d98..00000000 --- a/conf/env/conda_env_linux-pkgs.yaml +++ /dev/null @@ -1,90 +0,0 @@ -name: 2023-02-fennec-fox -channels: - - defaults - - conda-forge - - foxbms -dependencies: - - pandoc - - pip - - python=3.9 - - zlib - - wxpython - - pip: - - appdirs - - babel - - black - - bokeh - - cantools[plot] - - cffconvert - - click - - colorama - - coverage - - crcmod - - dask - - docutils - - filterpy - - gcovr - - gitdb - - gitpython - - gprof2dot - - ipython - - isort - - jinja2 - - joblib - - jsonschema - - jupyter - - matplotlib - - mypy - - mypy-extensions - - nbclient - - nbconvert - - nbformat - - openpyxl - - pandas - - pandas-stubs - - pandocfilters - - pip-licenses - - plantuml - - plantuml-markdown - - prompt-toolkit - - psutil - - pybtex - - pybtex-docutils - - pycparser - - pyenchant - - pylint - - pyserial - - pysimplegui - - python-can==4.0.0.dev2 - - python-dateutil - - python-lin - - python-markdown-math - - python-uds - - pyvisa - - pyyaml - - pyzmq - - requests - - rope - - rsinstrument - - ruamel-yaml - - ruamel-yaml-clib - - scipy - - seaborn - - sphinx - - sphinx-copybutton - - sphinx-rtd-theme - - sphinxcontrib-applehelp - - sphinxcontrib-bibtex - - sphinxcontrib-devhelp - - sphinxcontrib-htmlhelp - - sphinxcontrib-jsmath - - sphinxcontrib-mermaid - - sphinxcontrib-plantuml - - sphinxcontrib-serializinghtml - - sphinxcontrib-spelling - - statsmodels - - tabulate - - toml - - typing-extensions - - uptime - - widgetsnbextension diff --git a/conf/env/conda_env_linux.yaml b/conf/env/conda_env_linux.yaml deleted file mode 100644 index e40eb155..00000000 --- a/conf/env/conda_env_linux.yaml +++ /dev/null @@ -1,253 +0,0 @@ -name: 2023-02-fennec-fox -channels: - - defaults - - conda-forge - - foxbms -dependencies: - - _libgcc_mutex=0.1=main - - _openmp_mutex=4.5=1_gnu - - alsa-lib=1.2.3=h516909a_0 - - atk-1.0=2.36.0=h28cd5cc_0 - - brotlipy=0.7.0=py39h27cfd23_1003 - - ca-certificates=2021.10.26=h06a4308_2 - - cairo=1.16.0=hf32fb01_1 - - certifi=2021.10.8=py39h06a4308_0 - - cffi=1.14.6=py39h400218f_0 - - charset-normalizer=2.0.4=pyhd3eb1b0_0 - - cryptography=35.0.0=py39hd23ed53_0 - - expat=2.4.1=h2531618_2 - - font-ttf-dejavu-sans-mono=2.37=hd3eb1b0_0 - - font-ttf-inconsolata=2.001=hcb22688_0 - - font-ttf-source-code-pro=2.030=hd3eb1b0_0 - - font-ttf-ubuntu=0.83=h8b1ccd4_0 - - fontconfig=2.13.1=h6c09931_0 - - fonts-anaconda=1=h8fa9717_0 - - fonts-conda-ecosystem=1=hd3eb1b0_0 - - freetype=2.11.0=h70c0345_0 - - fribidi=1.0.10=h7b6447c_0 - - gdk-pixbuf=2.42.6=h04a7f16_0 - - gettext=0.21.0=hf68c758_0 - - glib=2.68.2=h36276a3_0 - - gobject-introspection=1.68.0=py39h2109141_1 - - graphite2=1.3.14=h23475e2_0 - - gst-plugins-base=1.18.4=hf529b03_2 - - gstreamer=1.18.4=h76c114f_2 - - gtk2=2.24.33=h539f30e_1 - - harfbuzz=2.8.1=h6f93f22_0 - - icu=58.2=he6710b0_3 - - idna=3.2=pyhd3eb1b0_0 - - jpeg=9d=h7f8727e_0 - - ld_impl_linux-64=2.35.1=h7274673_9 - - libffi=3.3=he6710b0_2 - - libgcc-ng=9.3.0=h5101ec6_17 - - libglib=2.68.2=h3e27bee_0 - - libglu=9.0.0=hf484d3e_1 - - libgomp=9.3.0=h5101ec6_17 - - libiconv=1.16=h516909a_0 - - libogg=1.3.5=h27cfd23_1 - - libopus=1.3.1=h7b6447c_0 - - libpng=1.6.37=hbc83047_0 - - libstdcxx-ng=9.3.0=hd4cf53a_17 - - libtiff=4.2.0=h85742a9_0 - - libuuid=1.0.3=h7f8727e_2 - - libvorbis=1.3.7=h7b6447c_0 - - libwebp-base=1.2.0=h27cfd23_0 - - libxcb=1.14=h7b6447c_0 - - libxml2=2.9.12=h03d6c58_0 - - lz4-c=1.9.3=h295c915_1 - - ncurses=6.3=h7f8727e_2 - - ninja=1.10.2=py39hd09550d_3 - - openssl=1.1.1l=h7f8727e_0 - - pandoc=2.12=h06a4308_0 - - pango=1.48.5=hb8ff022_0 - - pathlib2=2.3.6=py39h06a4308_2 - - pcre=8.45=h295c915_0 - - pip=21.2.4=py39h06a4308_0 - - pixman=0.40.0=h7f8727e_1 - - pthread-stubs=0.3=h0ce48e5_1 - - pycparser=2.21=pyhd3eb1b0_0 - - pyopenssl=21.0.0=pyhd3eb1b0_1 - - pypubsub=4.0.3=py_0 - - pysocks=1.7.1=py39h06a4308_0 - - python=3.9.7=h12debd9_1 - - python_abi=3.9=2_cp39 - - readline=8.1=h27cfd23_0 - - requests=2.26.0=pyhd3eb1b0_0 - - setuptools=58.0.4=py39h06a4308_0 - - six=1.16.0=pyhd3eb1b0_0 - - sqlite=3.36.0=hc218d9a_0 - - tk=8.6.11=h1ccaba5_0 - - tzdata=2021e=hda174b7_0 - - urllib3=1.26.7=pyhd3eb1b0_0 - - wheel=0.37.0=pyhd3eb1b0_1 - - wxpython=4.1.1=py39h09f47c6_1 - - xz=5.2.5=h7b6447c_0 - - zlib=1.2.11=h7b6447c_3 - - zstd=1.4.9=haebb681_0 - - pip: - - alabaster==0.7.12 - - appdirs==1.4.4 - - argon2-cffi==21.1.0 - - argparse-addons==0.7.0 - - arpeggio==1.10.2 - - astroid==2.8.4 - - attrs==21.2.0 - - babel==2.9.1 - - backcall==0.2.0 - - beautifulsoup4==4.10.0 - - bitstruct==8.11.1 - - black==21.10b0 - - bleach==4.1.0 - - bokeh==2.4.1 - - bottle==0.12.19 - - cantools==36.5.0 - - cffconvert==2.0.0 - - click==8.0.3 - - cloudpickle==2.0.0 - - colorama==0.4.4 - - coverage==6.1.2 - - crcmod==1.7 - - cycler==0.11.0 - - dask==2021.11.1 - - debugpy==1.5.1 - - decorator==5.1.0 - - defusedxml==0.7.1 - - diskcache==5.2.1 - - docopt==0.6.2 - - docutils==0.16 - - entrypoints==0.3 - - et-xmlfile==1.1.0 - - filterpy==1.4.5 - - fsspec==2021.11.0 - - gcovr==5.0 - - gitdb==4.0.9 - - gitpython==3.1.24 - - gprof2dot==2021.2.21 - - httplib2==0.20.2 - - imagesize==1.3.0 - - ipykernel==6.5.0 - - ipython==7.29.0 - - ipython-genutils==0.2.0 - - ipywidgets==7.6.5 - - isort==5.10.1 - - jdcal==1.4.1 - - jedi==0.18.0 - - jinja2==2.11.3 - - joblib==1.1.0 - - jsonschema==3.2.0 - - jupyter==1.0.0 - - jupyter-client==7.0.6 - - jupyter-console==6.4.0 - - jupyter-core==4.9.1 - - jupyterlab-pygments==0.1.2 - - jupyterlab-widgets==1.0.2 - - kiwisolver==1.3.2 - - latexcodec==2.0.1 - - lazy-object-proxy==1.6.0 - - locket==0.2.1 - - lxml==4.6.4 - - markdown==3.3.4 - - markupsafe==2.0.1 - - matplotlib==3.4.3 - - matplotlib-inline==0.1.3 - - mccabe==0.6.1 - - mistune==0.8.4 - - msgpack==1.0.2 - - mypy==0.910 - - mypy-extensions==0.4.3 - - nbclient==0.5.8 - - nbconvert==6.3.0 - - nbformat==5.1.3 - - nest-asyncio==1.5.1 - - notebook==6.4.5 - - numpy==1.22.4 - - openpyxl==2.6.4 - - packaging==21.2 - - pandas==1.3.4 - - pandas-stubs==1.2.0.37 - - pandocfilters==1.5.0 - - parso==0.8.2 - - partd==1.2.0 - - pathspec==0.9.0 - - patsy==0.5.2 - - pexpect==4.8.0 - - pickleshare==0.7.5 - - pillow==8.4.0 - - pip-licenses==3.5.3 - - plantuml==0.3.0 - - plantuml-markdown==3.4.4 - - platformdirs==2.4.0 - - prometheus-client==0.12.0 - - prompt-toolkit==3.0.22 - - psutil==5.8.0 - - ptable==0.9.2 - - ptyprocess==0.7.0 - - pybtex==0.24.0 - - pybtex-docutils==1.0.1 - - pyenchant==3.2.2 - - pygments==2.10.0 - - pykwalify==1.8.0 - - pylint==2.11.1 - - pyparsing==2.4.7 - - pyrsistent==0.18.0 - - pyserial==3.5 - - pysimplegui==4.55.1 - - python-can==4.0.0.dev2 - - python-datauri==0.2.9 - - python-dateutil==2.8.2 - - python-lin==0.1.1 - - python-markdown-math==0.6 - - python-uds==1.0.2 - - pytz==2021.3 - - pyvisa==1.11.3 - - pyyaml==5.4.1 - - pyzmq==22.3.0 - - qtconsole==5.2.0 - - qtpy==1.11.2 - - regex==2021.11.10 - - requests-file==1.5.1 - - rope==0.21.1 - - rsinstrument==1.19.0.75 - - ruamel-yaml==0.17.17 - - ruamel-yaml-clib==0.2.6 - - scipy==1.7.2 - - seaborn==0.11.2 - - send2trash==1.8.0 - - smmap==5.0.0 - - snowballstemmer==2.1.0 - - soupsieve==2.3.1 - - sphinx==4.3.0 - - sphinx-copybutton==0.3.3 - - sphinx-panels==0.6.0 - - sphinx-rtd-theme==1.0.0 - - sphinxcontrib-applehelp==1.0.2 - - sphinxcontrib-bibtex==2.4.1 - - sphinxcontrib-devhelp==1.0.2 - - sphinxcontrib-htmlhelp==2.0.0 - - sphinxcontrib-jsmath==1.0.1 - - sphinxcontrib-mermaid==0.7.1 - - sphinxcontrib-plantuml==0.21 - - sphinxcontrib-programoutput==0.17 - - sphinxcontrib-qthelp==1.0.3 - - sphinxcontrib-serializinghtml==1.1.5 - - sphinxcontrib-spelling==7.2.1 - - statsmodels==0.13.0 - - tabulate==0.8.9 - - tenacity==8.0.1 - - terminado==0.12.1 - - testpath==0.5.0 - - textparser==0.23.0 - - textx==2.3.0 - - threadpoolctl==3.0.0 - - toml==0.10.2 - - tomli==1.2.2 - - toolz==0.11.2 - - tornado==6.1 - - traitlets==5.1.1 - - typing-extensions==3.10.0.2 - - uptime==3.0.1 - - wcwidth==0.2.5 - - webencodings==0.5.1 - - widgetsnbextension==3.5.2 - - wrapt==1.13.3 - - xlsxwriter==1.4.5 diff --git a/conf/env/conda_env_win32-pkgs.yaml b/conf/env/conda_env_win32-pkgs.yaml deleted file mode 100644 index 793e4cdf..00000000 --- a/conf/env/conda_env_win32-pkgs.yaml +++ /dev/null @@ -1,95 +0,0 @@ -name: 2023-02-fennec-fox -channels: - - defaults - - foxbms -dependencies: - - console_shortcut - - doxygen - - graphviz - - pandoc - - pip - - powershell_shortcut - - python=3.9 - - pywin32 - - winpty - - zlib - - pip: - - appdirs - - babel - - black - - bokeh - - cantools[plot] - - cffconvert - - click - - coverage - - crcmod - - dask - - docutils - - filterpy - - gcovr - - gitdb - - gitpython - - gprof2dot - - ipython - - isort - - jinja2 - - joblib - - jsonschema - - jupyter - - matplotlib - - mypy - - mypy-extensions - - nbclient - - nbconvert - - nbformat - - openpyxl - - pandas - - pandas-stubs - - pandocfilters - - pip-licenses - - plantuml - - plantuml-markdown - - prompt-toolkit - - psutil - - pybtex - - pybtex-docutils - - pycparser - - pyenchant - - pylint - - pyserial - - pysimplegui - - python-can==4.0.0.dev2 - - python-dateutil - - python-lin - - python-markdown-math - - python-uds - - pyvisa - - pywinpty - - pyyaml - - pyzmq - - requests - - rope - - rsinstrument - - ruamel-yaml - - ruamel-yaml-clib - - scipy - - seaborn - - sphinx - - sphinx-copybutton - - sphinx-rtd-theme - - sphinxcontrib-applehelp - - sphinxcontrib-bibtex - - sphinxcontrib-devhelp - - sphinxcontrib-htmlhelp - - sphinxcontrib-jsmath - - sphinxcontrib-mermaid - - sphinxcontrib-plantuml - - sphinxcontrib-serializinghtml - - sphinxcontrib-spelling - - statsmodels - - tabulate - - toml - - typing-extensions - - uptime - - widgetsnbextension - - wxpython diff --git a/conf/env/conda_env_win32.yaml b/conf/env/conda_env_win32.yaml deleted file mode 100644 index 85ebcd16..00000000 --- a/conf/env/conda_env_win32.yaml +++ /dev/null @@ -1,199 +0,0 @@ -name: 2023-02-fennec-fox -channels: - - defaults - - foxbms -dependencies: - - ca-certificates=2021.10.26=haa95532_2 - - certifi=2021.10.8=py39haa95532_0 - - console_shortcut=0.1.1=4 - - doxygen=1.9.1=1 - - graphviz=2.38=hfd603c8_2 - - openssl=1.1.1l=h2bbff1b_0 - - pandoc=2.12=haa95532_0 - - pip=21.2.4=py39haa95532_0 - - powershell_shortcut=0.0.1=3 - - python=3.9.7=h6244533_1 - - pywin32=228=py39hbaba5e8_1 - - setuptools=58.0.4=py39haa95532_0 - - sqlite=3.36.0=h2bbff1b_0 - - tzdata=2021e=hda174b7_0 - - vc=14.2=h21ff451_1 - - vs2015_runtime=14.27.29016=h5e58377_2 - - wheel=0.37.0=pyhd3eb1b0_1 - - wincertstore=0.2=py39haa95532_2 - - winpty=0.4.3=4 - - zlib=1.2.11=h62dcd97_4 - - pip: - - alabaster==0.7.12 - - appdirs==1.4.4 - - argon2-cffi==21.1.0 - - argparse-addons==0.7.0 - - arpeggio==1.10.2 - - astroid==2.8.4 - - attrs==21.2.0 - - babel==2.9.1 - - backcall==0.2.0 - - beautifulsoup4==4.10.0 - - bitstruct==8.11.1 - - black==21.10b0 - - bleach==4.1.0 - - bokeh==2.4.1 - - bottle==0.12.19 - - cantools==36.5.0 - - cffconvert==2.0.0 - - cffi==1.15.0 - - charset-normalizer==2.0.7 - - click==8.0.3 - - cloudpickle==2.0.0 - - colorama==0.4.4 - - coverage==6.1.1 - - crcmod==1.7 - - cycler==0.11.0 - - dask==2021.11.1 - - debugpy==1.5.1 - - decorator==5.1.0 - - defusedxml==0.7.1 - - diskcache==5.2.1 - - docopt==0.6.2 - - docutils==0.16 - - entrypoints==0.3 - - et-xmlfile==1.1.0 - - filterpy==1.4.5 - - fsspec==2021.11.0 - - gcovr==5.0 - - gitdb==4.0.9 - - gitpython==3.1.24 - - gprof2dot==2021.2.21 - - httplib2==0.20.2 - - idna==3.3 - - imagesize==1.3.0 - - ipykernel==6.5.0 - - ipython==7.29.0 - - ipython-genutils==0.2.0 - - ipywidgets==7.6.5 - - isort==5.10.1 - - jdcal==1.4.1 - - jedi==0.18.0 - - jinja2==2.11.3 - - joblib==1.1.0 - - jsonschema==3.2.0 - - jupyter==1.0.0 - - jupyter-client==7.0.6 - - jupyter-console==6.4.0 - - jupyter-core==4.9.1 - - jupyterlab-pygments==0.1.2 - - jupyterlab-widgets==1.0.2 - - kiwisolver==1.3.2 - - latexcodec==2.0.1 - - lazy-object-proxy==1.6.0 - - locket==0.2.1 - - lxml==4.6.4 - - markdown==3.3.4 - - markupsafe==2.0.1 - - matplotlib==3.4.3 - - matplotlib-inline==0.1.3 - - mccabe==0.6.1 - - mistune==0.8.4 - - mypy==0.910 - - mypy-extensions==0.4.3 - - nbclient==0.5.5 - - nbconvert==6.2.0 - - nbformat==5.1.3 - - nest-asyncio==1.5.1 - - notebook==6.4.5 - - numpy==1.22.4 - - openpyxl==2.6.4 - - packaging==21.2 - - pandas==1.3.4 - - pandas-stubs==1.2.0.37 - - pandocfilters==1.5.0 - - parso==0.8.2 - - partd==1.2.0 - - pathspec==0.9.0 - - patsy==0.5.2 - - pickleshare==0.7.5 - - pillow==8.4.0 - - pip-licenses==3.5.3 - - plantuml==0.3.0 - - plantuml-markdown==3.4.4 - - platformdirs==2.4.0 - - prometheus-client==0.12.0 - - prompt-toolkit==3.0.22 - - psutil==5.8.0 - - ptable==0.9.2 - - pybtex==0.24.0 - - pybtex-docutils==1.0.1 - - pycparser==2.21 - - pyenchant==3.2.2 - - pygments==2.10.0 - - pykwalify==1.8.0 - - pylint==2.11.1 - - pyparsing==2.4.7 - - pyrsistent==0.18.0 - - pyserial==3.5 - - pysimplegui==4.55.1 - - python-can==4.0.0.dev2 - - python-datauri==0.2.9 - - python-dateutil==2.8.2 - - python-lin==0.1.1 - - python-markdown-math==0.6 - - python-uds==1.0.2 - - pytz==2021.3 - - pyvisa==1.11.3 - - pywinpty==1.1.5 - - pyyaml==5.4.1 - - pyzmq==22.3.0 - - qtconsole==5.2.0 - - qtpy==1.11.2 - - regex==2021.11.10 - - requests==2.26.0 - - requests-file==1.5.1 - - rope==0.21.0 - - rsinstrument==1.19.0.75 - - ruamel-yaml==0.17.17 - - ruamel-yaml-clib==0.2.6 - - scipy==1.7.2 - - seaborn==0.11.2 - - send2trash==1.8.0 - - six==1.16.0 - - smmap==5.0.0 - - snowballstemmer==2.1.0 - - soupsieve==2.3 - - sphinx==4.3.0 - - sphinx-copybutton==0.3.3 - - sphinx-panels==0.6.0 - - sphinx-rtd-theme==1.0.0 - - sphinxcontrib-applehelp==1.0.2 - - sphinxcontrib-bibtex==2.4.1 - - sphinxcontrib-devhelp==1.0.2 - - sphinxcontrib-htmlhelp==2.0.0 - - sphinxcontrib-jsmath==1.0.1 - - sphinxcontrib-mermaid==0.7.1 - - sphinxcontrib-plantuml==0.21 - - sphinxcontrib-programoutput==0.17 - - sphinxcontrib-qthelp==1.0.3 - - sphinxcontrib-serializinghtml==1.1.5 - - sphinxcontrib-spelling==7.2.1 - - statsmodels==0.13.0 - - tabulate==0.8.9 - - tenacity==8.0.1 - - terminado==0.12.1 - - testpath==0.5.0 - - textparser==0.23.0 - - textx==2.3.0 - - threadpoolctl==3.0.0 - - toml==0.10.2 - - tomli==1.2.2 - - toolz==0.11.2 - - tornado==6.1 - - traitlets==5.1.1 - - typing-extensions==3.10.0.2 - - uptime==3.0.1 - - urllib3==1.26.7 - - wcwidth==0.2.5 - - webencodings==0.5.1 - - widgetsnbextension==3.5.2 - - windows-curses==2.2.0 - - wrapt==1.13.3 - - wxpython==4.1.1 - - xlsxwriter==1.4.5 diff --git a/conf/env/paths_win32.txt b/conf/env/paths_win32.txt index e725463d..8521b347 100644 --- a/conf/env/paths_win32.txt +++ b/conf/env/paths_win32.txt @@ -4,7 +4,9 @@ C:\ti\ccs1200\ccs\utils\bin C:\ti\ccs1200\ccs\utils\cygwin C:\ti\ccs1200\ccs\utils\tiobj2bin C:\ti\Hercules\HALCoGen\v04.07.01 -C:\Program Files\LLVM\13.0.0\bin C:\Ruby\Ruby3.1.3-x64\bin C:\MinGW64\x86_64-8.1.0-release-posix-seh-rt_v6-rev0\mingw64\bin C:\Bauhaus\7.5.2\bin +$DOT_DIR$\11.0.0\bin +$DOXYGEN_DIR$\1.11.0 +$GIT_DIR$\bin diff --git a/conf/fmt/README.md b/conf/fmt/README.md deleted file mode 100644 index 252ea295..00000000 --- a/conf/fmt/README.md +++ /dev/null @@ -1,26 +0,0 @@ -# Formatting Configurations - -This directory contains the configurations for the formatting rules applied to -the foxBMS 2 repository. - -## C - -foxBMS 2 uses [clang-format](https://clang.llvm.org/docs/ClangFormat.html) to -automatically format the code correctly. - -The formatting configuration file ``.clang-format`` is not in the directory as -clang-format has a different way of searching the configuration file -(closest configuration file to the to-be-formatted-source file is chosen). -The ``.clang-format`` is therefore stored in the repository root. - -Directories that should not be automatically formatted must include a -``.clang-format`` file to disable automatic formatting: - -**``.clang-format``** -```yaml -DisableFormat: true -SortIncludes: false -``` - -## Python -All Python formatting rules are defined in ``pyproject.toml``. diff --git a/conf/fmt/pyproject.toml b/conf/fmt/pyproject.toml deleted file mode 100644 index 57c6145a..00000000 --- a/conf/fmt/pyproject.toml +++ /dev/null @@ -1,32 +0,0 @@ -[tool.black] -line-length = 88 -target_version = ['py39'] -include = ''' -( - .\wscript?$ - | \.py?$ -) -''' -exclude = ''' -( - /( - \.git - | __pycache__ - | build - | foxbms - | docs/_ext - | docs/_themes - | tools/waf3-2.0.20-bfe1012d9751ef8c4f223dfd0424d33f - | tools/waf3-2.0.21-16cd196b0fc7b4eebe195ce20396f3d1 - | tools/waf3-2.0.22-1241519b19b496207abef1f72bbf61c2 - | tests/scripts/waf-core - )/ - | docs/conf.py - | tools/vendor - | tools/waf-tools/why.py - | tools/waf-verify-sig.py -) -''' - -[tool.isort] -profile = "black" diff --git a/conf/guidelines/rules.json b/conf/guidelines/rules.json deleted file mode 100644 index aa11336e..00000000 --- a/conf/guidelines/rules.json +++ /dev/null @@ -1,695 +0,0 @@ -{ - "binary": [ - "7z", - "coverage", - "exe", - "gif", - "ico", - "jpg", - "o", - "png", - "pptx", - "pyc", - "pyc", - "stats", - "svg", - "svg", - "tar", - "tar.bz2", - "tar.gz", - "vsdx", - "vsdx", - "zip", - "~pptx", - "~vsdx" - ], - "global": [ - "**/**.log", - "**/*.asc", - "**/*~", - "**/.lock-waf_*_build", - "**/.vscode/**", - "**/__pycache__/**", - "**/foxbms-2_axivion_report.json", - "**/foxbms_spa_report.json", - ".git/**", - ".mypy_cache/**", - "build-tools-tests/**", - "build/**", - "conf/hcg/include/*", - "conf/hcg/source/*", - "docs/_ext/**", - "foxbms/**", - "libbuild/**", - "spa-artifacts/**", - "src/app/driver/afe/nxp/mc33775a/vendor/**", - "src/app/driver/sbc/fs8x_driver/**", - "src/os/freertos/**/*.asm", - "src/os/freertos/**/*.c", - "src/os/freertos/**/*.h", - "src/os/freertos/.github/uncrustify.cfg", - "src/os/freertos/GitHub-FreeRTOS-Kernel-Home.url", - "src/os/freertos/History.txt", - "src/os/freertos/LICENSE.md", - "src/os/freertos/Quick_Start_Guide.url", - "src/os/freertos/README.md", - "src/os/freertos/portable/memmang/ReadMe.url", - "src/os/freertos/portable/readme.txt", - "src/os/safertos/**/*.asm", - "src/os/safertos/**/*.c", - "src/os/safertos/**/*.h", - "tests/axivion/compiler-errata/ti-cgt-arm*/**", - "tests/axivion/qualification-test/qualification-kit/**", - "tests/scripts/waf-core/general/**", - "tests/scripts/waf-core/init/**", - "tests/scripts/waf-core/install/**", - "tests/scripts/waf-core/install_group/**", - "tests/scripts/waf-core/preproc/**", - "tests/scripts/waf-tools/f_guidelines/tests/**", - "tests/unit/build/**", - "tools/.waf3-**", - "tools/dbc/third-party/**", - "tools/vendor/**", - "tools/waf", - "tools/waf-verify-sig.py", - "tools/waf3-**" - ], - "file_names": { - "name": "GENERAL:001", - "regex": "^[a-z0-9_\\-.]*$", - "exclude": [ - "**/*.py1.stats", - "**/*.~vsdx", - "**/LICENSE.md", - "**/README.md", - ".github/PULL_REQUEST_TEMPLATE.md", - ".gitlab/**", - "BSD-3-Clause.txt", - "CC-BY-4.0.txt", - "CHANGELOG.md", - "CITATION.cff", - "conf/hcg/**/*.asm", - "conf/hcg/**/*.c", - "conf/hcg/**/*.cmd", - "conf/hcg/**/*.h", - "src/os/freertos/README.ti-halcogen.md", - "tests/axivion/**/*cafeCC*" - ] - }, - "unique_filenames": { - "name": "GENERAL:002", - "exclude": [ - "**/.clang-format", - "**/.dummy", - "**/.gitignore", - "**/README.md", - "**/__init__.py", - "**/__main__.py", - "**/dir_exists", - "**/misc.py", - "**/wscript", - "tests/axivion/addon-test/**/ok.c", - "tests/axivion/addon-test/test_*/**", - "tests/axivion/addon-test/test_unique_filename/**", - "tests/unit/axivion/axivion_config.json", - "tests/unit/axivion/ci_config.json", - "tests/unit/axivion/compiler_config.json", - "tools/gui/LICENSE.md" - ] - }, - "encoding": { - "name": "GENERAL:003", - "default": "utf-8", - "exceptions": [ - { - "**/*.sym": "ascii" - }, - { - "**/*.dbc": "ascii" - }, - { - "**/*.c": "ascii" - }, - { - "**/*.h": "ascii" - }, - { - "src/**/*.cmd": "ascii" - }, - { - "tests/axivion/addon-test/test_file_encoding/windows-1252.cpp": "windows-1252" - }, - { - "tests/axivion/addon-test/test_file_encoding/latin1.cpp": "latin1" - } - ] - }, - "posix_3.206": { - "name": "GENERAL:004", - "exclude": [ - "**/*.patch", - "tools/utils/git-hooks/pre-commit" - ] - }, - "trailing_whitespace": { - "name": "GENERAL:005", - "exclude": [ - "**/*.dil", - "**/*.patch", - "tools/gui/data/pcan_view_v2.0.trc" - ] - }, - "tabs": { - "name": "GENERAL:006", - "exclude": [ - "**/*.sym" - ] - }, - "languages": { - "C": { - "exclude": [ - "tests/axivion/addon-test/test_*/**", - "tests/axivion/config-test/**/*.c", - "tests/axivion/config-test/**/*.h" - ], - "files": [ - "**/*.c", - "**/*.h", - "src/app/main/linker_script_elf.cmd" - ], - "header": { - "name": "C:002", - "exclude": [ - "src/app/driver/afe/nxp/mc33775a/nxp_mc33775a-ll.*", - "src/app/driver/sbc/fs8x_driver/**" - ], - "text": [ - "/**", - " *", - " * @copyright © 2010 - @YEAR@, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V.", - " * All rights reserved.", - " *", - " * SPDX-License-Identifier: BSD-3-Clause", - " *", - " * Redistribution and use in source and binary forms, with or without", - " * modification, are permitted provided that the following conditions are met:", - " *", - " * 1. Redistributions of source code must retain the above copyright notice, this", - " * list of conditions and the following disclaimer.", - " *", - " * 2. Redistributions in binary form must reproduce the above copyright notice,", - " * this list of conditions and the following disclaimer in the documentation", - " * and/or other materials provided with the distribution.", - " *", - " * 3. Neither the name of the copyright holder nor the names of its", - " * contributors may be used to endorse or promote products derived from", - " * this software without specific prior written permission.", - " *", - " * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"", - " * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE", - " * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE", - " * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE", - " * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL", - " * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR", - " * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER", - " * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,", - " * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE", - " * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.", - " *", - " * We kindly request you to use one or more of the following phrases to refer to", - " * foxBMS in your hardware, software, documentation or advertising materials:", - " *", - " * - ″This product uses parts of foxBMS®″", - " * - ″This product includes parts of foxBMS®″", - " * - ″This product is derived from foxBMS®″", - " *", - " */", - "" - ] - }, - "doxygen": { - "name": "C:004", - "exclude": [ - "src/app/driver/afe/nxp/mc33775a/nxp_mc33775a-ll.*", - "src/app/driver/sbc/fs8x_driver/sbc_fs8x*.*", - "src/app/main/linker_script_elf.cmd", - "src/os/**", - "tests/axivion/axivion_preinc.h" - ], - "regex": [ - "\/\\*\\*$", - "[ ]\\* (@file)[ ]{4}@FILENAME@$", - "[ ]\\* (@author)[ ]{2}foxBMS Team$", - "[ ]\\* (@date)[ ]{4}[0-9]{4}-[0-9]{2}-[0-9]{2}[ ]\\(date of creation\\)$", - "[ ]\\* (@updated)[ ][0-9]{4}-[0-9]{2}-[0-9]{2}[ ]\\(date of last update\\)$", - "[ ]\\* (@version)[ ]v@VERSION@", - "[ ]\\* (@ingroup)[ ][A-Za-z_]+$", - "[ ]\\* (@prefix)[ ]{2}[A-Z][0-9A-Z]{1,4}$", - "([ ]\\*)", - "[ ]\\* (@brief)[ ]{3}\\S.*", - "[ ]\\*.*", - "[ ]\\*\/" - ] - }, - "define_guard": { - "name": "C:005", - "include": [ - "**/*.h" - ], - "exclude": [ - "src/app/driver/afe/nxp/mc33775a/nxp_mc33775a-ll.h", - "src/app/driver/sbc/fs8x_driver/**", - "src/os/**", - "tests/axivion/axivion_preinc.h" - ], - "prefix": "FOXBMS__", - "suffix": "_H_", - "replacements": [ - { - "-": "_", - ".": "_" - } - ] - }, - "sections": { - "exclude": [ - "src/app/driver/sbc/fs8x_driver/**", - "src/app/main/linker_script_elf.cmd", - "tests/axivion/axivion_preinc.h" - ], - "name": "C:006", - "header": { - "exclude": [ - "conf/tpl/test_c.h", - "docs/developer-manual/style-guide/examples/c-006-test.h", - "tests/unit/**" - ], - "sections": [ - "/*========== Includes =======================================================*/", - "/*========== Macros and Definitions =========================================*/", - "/*========== Extern Constant and Variable Declarations ======================*/", - "/*========== Extern Function Prototypes =====================================*/", - "/*========== Externalized Static Functions Prototypes (Unit Test) ===========*/" - ] - }, - "source": { - "exclude": [ - "conf/tpl/test_c.c", - "docs/developer-manual/style-guide/examples/c-006-test.c", - "docs/software/unit-tests/test_abc.c", - "src/app/driver/config/can_cfg.c", - "src/app/engine/config/diag_cfg.c", - "src/app/engine/config/sys_mon_cfg.c", - "tests/unit/**", - "tests/variants/**" - ], - "sections": [ - "/*========== Includes =======================================================*/", - "/*========== Macros and Definitions =========================================*/", - "/*========== Static Constant and Variable Definitions =======================*/", - "/*========== Extern Constant and Variable Definitions =======================*/", - "/*========== Static Function Prototypes =====================================*/", - "/*========== Static Function Implementations ================================*/", - "/*========== Extern Function Implementations ================================*/", - "/*========== Externalized Static Function Implementations (Unit Test) =======*/" - ] - }, - "test_header": { - "exclude": [ - "conf/tpl/c.h", - "docs/developer-manual/style-guide/examples/c-005.h", - "docs/developer-manual/style-guide/examples/c-006-source.h", - "docs/developer-manual/style-guide/examples/c-007_abc.h", - "docs/developer-manual/style-guide/examples/c-007_abc_cfg.h", - "docs/developer-manual/style-guide/examples/c-008.h", - "docs/developer-manual/style-guide/examples/c-011.h", - "docs/developer-manual/style-guide/examples/c-013.h", - "docs/developer-manual/style-guide/examples/c-015.h", - "docs/developer-manual/style-guide/state-machine-example/state-machine.h", - "docs/software/build-process/misc/libproject-example.h", - "docs/software/unit-tests/abc.h", - "src/**", - "tests/variants/lib-build/*" - ], - "sections": [ - "/*========== Includes =======================================================*/", - "/*========== Unit Testing Framework Directives ==============================*/", - "/*========== Macros and Definitions =========================================*/" - ] - }, - "test_source": { - "exclude": [ - "conf/tpl/c.c", - "docs/developer-manual/style-guide/examples/c-004.c", - "docs/developer-manual/style-guide/examples/c-005.c", - "docs/developer-manual/style-guide/examples/c-006-source.c", - "docs/developer-manual/style-guide/examples/c-007_abc.c", - "docs/developer-manual/style-guide/examples/c-007_abc_cfg.c", - "docs/developer-manual/style-guide/examples/c-008.c", - "docs/developer-manual/style-guide/examples/c-009.c", - "docs/developer-manual/style-guide/examples/c-011.c", - "docs/developer-manual/style-guide/examples/c-012.c", - "docs/developer-manual/style-guide/examples/c-013.c", - "docs/developer-manual/style-guide/examples/c-015.c", - "docs/developer-manual/style-guide/examples/c-016.c", - "docs/developer-manual/style-guide/examples/c-017.c", - "docs/developer-manual/style-guide/examples/c-018.c", - "docs/developer-manual/style-guide/examples/c-019.c", - "docs/developer-manual/style-guide/examples/c-020.c", - "docs/developer-manual/style-guide/examples/c-021.c", - "docs/developer-manual/style-guide/examples/c-022.c", - "docs/developer-manual/style-guide/examples/c-023.c", - "docs/developer-manual/style-guide/examples/c-024.c", - "docs/developer-manual/style-guide/examples/c-025.c", - "docs/developer-manual/style-guide/examples/c-026.c", - "docs/developer-manual/style-guide/examples/c-027.c", - "docs/developer-manual/style-guide/examples/c-028-battery-defines.c", - "docs/developer-manual/style-guide/examples/c-028.c", - "docs/developer-manual/style-guide/state-machine-example/state-machine.c", - "docs/software/build-process/misc/libproject-example.c", - "docs/software/modules/driver/can/can_how-to_tx.c", - "docs/software/modules/engine/database/database_how-to.c", - "docs/software/modules/task/ftask/ftask_how-to.c", - "docs/software/unit-tests/abc.c", - "docs/software/unit-tests/run_abc.c", - "src/**", - "tests/c-std/c-std-test.c", - "tests/variants/lib-build/*", - "tools/crc/crc-10_0x48f.c", - "tools/crc/crc-15_0xc599.c" - ], - "sections": [ - "/*========== Includes =======================================================*/", - "/*========== Unit Testing Framework Directives ==============================*/", - "/*========== Definitions and Implementations for Unit Test ==================*/", - "/*========== Setup and Teardown =============================================*/", - "/*========== Test Cases =====================================================*/" - ] - } - }, - "comment-style": { - "name": "C:029", - "forbidden": "C99", - "exclude": [ - "tests/axivion/addon-test/**", - "tests/axivion/config-test/**/*.c", - "tests/axivion/config-test/**/*.h" - ] - }, - "formatting": { - "name": "C:031", - "provider": "clang-format", - "exclude": [ - "src/app/main/linker_script_elf.cmd" - ], - "config": ".clang-format" - } - }, - "Python": { - "exclude": [ - "tools/waf-tools/doxygen.py", - "tools/waf-tools/why.py" - ], - "files": [ - "**/*.py", - "**/wscript" - ], - "header": { - "name": "PYTHON:002", - "exclude": [ - "tests/axivion/addon/**", - "tools/gui/fgui/misc/logo.py" - ], - "text": [ - "#!/usr/bin/env python3", - "# -*- coding: utf-8 -*-", - "#", - "# Copyright (c) 2010 - @YEAR@, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V.", - "# All rights reserved.", - "#", - "# SPDX-License-Identifier: BSD-3-Clause", - "#", - "# Redistribution and use in source and binary forms, with or without", - "# modification, are permitted provided that the following conditions are met:", - "#", - "# 1. Redistributions of source code must retain the above copyright notice, this", - "# list of conditions and the following disclaimer.", - "#", - "# 2. Redistributions in binary form must reproduce the above copyright notice,", - "# this list of conditions and the following disclaimer in the documentation", - "# and/or other materials provided with the distribution.", - "#", - "# 3. Neither the name of the copyright holder nor the names of its", - "# contributors may be used to endorse or promote products derived from", - "# this software without specific prior written permission.", - "#", - "# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"", - "# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE", - "# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE", - "# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE", - "# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL", - "# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR", - "# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER", - "# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,", - "# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE", - "# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.", - "#", - "# We kindly request you to use one or more of the following phrases to refer to", - "# foxBMS in your hardware, software, documentation or advertising materials:", - "#", - "# - \"This product uses parts of foxBMS®\"", - "# - \"This product includes parts of foxBMS®\"", - "# - \"This product is derived from foxBMS®\"", - "" - ] - }, - "formatting": { - "name": "PYTHON:004", - "provider": "black", - "exclude": [ - "**/*waf3-**.*-*/**", - "**/c4che/**", - ".vscode/**", - "tools/waf-tools/why.py" - ] - }, - "static_program_analysis": { - "name": "PYTHON:005", - "provider": "pylint", - "exclude": [ - "**/*waf3-**.*-*/**", - "**/c4che/**", - ".vscode/**", - "tests/axivion/addon/**", - "tools/waf-tools/why.py" - ] - } - }, - "reStructuredText": { - "exclude": [], - "files": [ - "**/*.rst" - ], - "include": { - "name": "RST:003", - "exclude": [], - "include_files": [ - { - "macros.txt": { - "exclude": [ - "docs/general/team-ad-sc.rst", - "docs/general/team-dev.rst", - "docs/general/team-former.rst" - ], - "regex": ".. include:: .{1,2}(/(..|\\w+))*/macros.txt" - } - }, - { - "units.txt": { - "exclude": [ - "docs/general/team.rst", - "docs/general/team-ad-sc.rst", - "docs/general/team-dev.rst", - "docs/general/team-former.rst", - "docs/misc/acknowledgements.rst" - ], - "regex": ".. include:: .{1,2}(/(..|\\w+))*/units.txt" - } - } - ] - }, - "heading": { - "name": "RST:005", - "exclude": [ - "docs/general/team-ad-sc.rst", - "docs/general/team-dev.rst", - "docs/general/team-former.rst", - "docs/tools/waf-tools/compiler-tool/f_*.rst", - "docs/tools/waf-tools/f_*.rst" - ] - }, - "orphan": { - "name": "RST:006", - "include": [] - } - }, - "YAML": { - "exclude": [ - "conf/env/conda_env_*.yaml", - "tests/hil/hil-env.yaml" - ], - "files": [ - "**/*.dot", - "**/*.yaml", - "**/*.yml" - ], - "header": { - "name": "YAML:002", - "exclude": [], - "text": [ - "# Copyright (c) 2010 - @YEAR@, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V.", - "# All rights reserved.", - "#", - "# SPDX-License-Identifier: BSD-3-Clause", - "#", - "# Redistribution and use in source and binary forms, with or without", - "# modification, are permitted provided that the following conditions are met:", - "#", - "# 1. Redistributions of source code must retain the above copyright notice, this", - "# list of conditions and the following disclaimer.", - "#", - "# 2. Redistributions in binary form must reproduce the above copyright notice,", - "# this list of conditions and the following disclaimer in the documentation", - "# and/or other materials provided with the distribution.", - "#", - "# 3. Neither the name of the copyright holder nor the names of its", - "# contributors may be used to endorse or promote products derived from", - "# this software without specific prior written permission.", - "#", - "# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"", - "# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE", - "# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE", - "# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE", - "# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL", - "# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR", - "# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER", - "# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,", - "# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE", - "# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.", - "#", - "# We kindly request you to use one or more of the following phrases to refer to", - "# foxBMS in your hardware, software, documentation or advertising materials:", - "#", - "# - \"This product uses parts of foxBMS®\"", - "# - \"This product includes parts of foxBMS®\"", - "# - \"This product is derived from foxBMS®\"", - "" - ] - } - }, - "batch": { - "exclude": [ - "src/app/main/linker_script_elf.cmd", - "src/app/main/linker_script_hex.cmd" - ], - "files": [ - "**/*.bat", - "**/*.cmd" - ], - "header": { - "name": "BATCH:002", - "exclude": [], - "text": [ - "@REM Copyright (c) 2010 - @YEAR@, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V.", - "@REM All rights reserved.", - "@REM", - "@REM SPDX-License-Identifier: BSD-3-Clause", - "@REM", - "@REM Redistribution and use in source and binary forms, with or without", - "@REM modification, are permitted provided that the following conditions are met:", - "@REM", - "@REM 1. Redistributions of source code must retain the above copyright notice, this", - "@REM list of conditions and the following disclaimer.", - "@REM", - "@REM 2. Redistributions in binary form must reproduce the above copyright notice,", - "@REM this list of conditions and the following disclaimer in the documentation", - "@REM and/or other materials provided with the distribution.", - "@REM", - "@REM 3. Neither the name of the copyright holder nor the names of its", - "@REM contributors may be used to endorse or promote products derived from", - "@REM this software without specific prior written permission.", - "@REM", - "@REM THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"", - "@REM AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE", - "@REM IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE", - "@REM DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE", - "@REM FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL", - "@REM DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR", - "@REM SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER", - "@REM CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,", - "@REM OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE", - "@REM OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.", - "@REM", - "@REM We kindly request you to use one or more of the following phrases to refer to", - "@REM foxBMS in your hardware, software, documentation or advertising materials:", - "@REM", - "@REM - \"This product uses parts of foxBMS®\"", - "@REM - \"This product includes parts of foxBMS®\"", - "@REM - \"This product is derived from foxBMS®\"", - "" - ] - } - }, - "shell": { - "exclude": [], - "files": [ - "**/*.sh" - ], - "header": { - "name": "SHELL:002", - "exclude": [], - "text": [ - "#!/usr/bin/env bash", - "#", - "# Copyright (c) 2010 - @YEAR@, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V.", - "# All rights reserved.", - "#", - "# SPDX-License-Identifier: BSD-3-Clause", - "#", - "# Redistribution and use in source and binary forms, with or without", - "# modification, are permitted provided that the following conditions are met:", - "#", - "# 1. Redistributions of source code must retain the above copyright notice, this", - "# list of conditions and the following disclaimer.", - "#", - "# 2. Redistributions in binary form must reproduce the above copyright notice,", - "# this list of conditions and the following disclaimer in the documentation", - "# and/or other materials provided with the distribution.", - "#", - "# 3. Neither the name of the copyright holder nor the names of its", - "# contributors may be used to endorse or promote products derived from", - "# this software without specific prior written permission.", - "#", - "# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"", - "# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE", - "# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE", - "# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE", - "# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL", - "# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR", - "# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER", - "# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,", - "# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE", - "# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.", - "#", - "# We kindly request you to use one or more of the following phrases to refer to", - "# foxBMS in your hardware, software, documentation or advertising materials:", - "#", - "# - \"This product uses parts of foxBMS®\"", - "# - \"This product includes parts of foxBMS®\"", - "# - \"This product is derived from foxBMS®\"", - "" - ] - } - } - } -} diff --git a/conf/spa/.pylintrc b/conf/spa/.pylintrc deleted file mode 100644 index 66ddf264..00000000 --- a/conf/spa/.pylintrc +++ /dev/null @@ -1,590 +0,0 @@ -[MASTER] - -# A comma-separated list of package or module names from where C extensions may -# be loaded. Extensions are loading into the active Python interpreter and may -# run arbitrary code. -extension-pkg-whitelist=wx, - pycosat - -# Add files or directories to the blacklist. They should be base names, not -# paths. -ignore=CVS - -# Add files or directories matching the regex patterns to the blacklist. The -# regex matches against base names, not paths. -ignore-patterns= - -# Python code to execute, usually for sys.path manipulation such as -# pygtk.require(). -init-hook='import sys; sys.path.extend(["tools/waf3-2.0.22-1241519b19b496207abef1f72bbf61c2", "tools/.waf3-2.0.22-1241519b19b496207abef1f72bbf61c2", "tools/gui", "tests/hil"])' - -# Use multiple processes to speed up Pylint. Specifying 0 will auto-detect the -# number of processors available to use. -jobs=1 - -# Control the amount of potential inferred values when inferring a single -# object. This can help the performance when dealing with large functions or -# complex, nested conditions. -limit-inference-results=100 - -# List of plugins (as comma separated values of python module names) to load, -# usually to register additional checkers. -load-plugins= - -# Pickle collected data for later comparisons. -persistent=yes - -# Specify a configuration file. -#rcfile= - -# When enabled, pylint would attempt to guess common misconfiguration and emit -# user-friendly hints instead of false-positive error messages. -suggestion-mode=yes - -# Allow loading of arbitrary C extensions. Extensions are imported into the -# active Python interpreter and may run arbitrary code. -unsafe-load-any-extension=no - - -[MESSAGES CONTROL] - -# Only show warnings with the listed confidence levels. Leave empty to show -# all. Valid levels: HIGH, INFERENCE, INFERENCE_FAILURE, UNDEFINED. -confidence= - -# Disable the message, report, category or checker with the given id(s). You -# can either give multiple identifiers separated by comma (,) or put this -# option multiple times (only on the command line, not in the configuration -# file where it should appear only once). You can also use "--disable=all" to -# disable everything first and then reenable specific checks. For example, if -# you want to run only the similarities checker, you can use "--disable=all -# --enable=similarities". If you want to run only the classes checker, but have -# no Warning level messages displayed, use "--disable=all --enable=classes -# --disable=W". -disable=print-statement, - parameter-unpacking, - unpacking-in-except, - old-raise-syntax, - backtick, - long-suffix, - old-ne-operator, - old-octal-literal, - import-star-module-level, - non-ascii-bytes-literal, - raw-checker-failed, - bad-inline-option, - locally-disabled, - file-ignored, - suppressed-message, - useless-suppression, - deprecated-pragma, - use-symbolic-message-instead, - apply-builtin, - basestring-builtin, - buffer-builtin, - cmp-builtin, - coerce-builtin, - execfile-builtin, - file-builtin, - long-builtin, - raw_input-builtin, - reduce-builtin, - standarderror-builtin, - unicode-builtin, - xrange-builtin, - coerce-method, - delslice-method, - getslice-method, - setslice-method, - no-absolute-import, - old-division, - dict-iter-method, - dict-view-method, - next-method-called, - metaclass-assignment, - indexing-exception, - raising-string, - reload-builtin, - oct-method, - hex-method, - nonzero-method, - cmp-method, - input-builtin, - round-builtin, - intern-builtin, - unichr-builtin, - map-builtin-not-iterating, - zip-builtin-not-iterating, - range-builtin-not-iterating, - filter-builtin-not-iterating, - using-cmp-argument, - eq-without-hash, - div-method, - idiv-method, - rdiv-method, - exception-message-attribute, - invalid-str-codec, - sys-max-int, - bad-python3-import, - deprecated-string-function, - deprecated-str-translate-call, - deprecated-itertools-function, - deprecated-types-field, - next-method-defined, - dict-items-not-iterating, - dict-keys-not-iterating, - dict-values-not-iterating, - deprecated-operator-function, - deprecated-urllib-function, - xreadlines-attribute, - deprecated-sys-function, - exception-escape, - comprehension-escape, - bad-continuation, # this is checked by black - fixme, - logging-fstring-interpolation - -# Enable the message, report, category or checker with the given id(s). You can -# either give multiple identifier separated by comma (,) or put this option -# multiple time (only on the command line, not in the configuration file where -# it should appear only once). See also the "--disable" option for examples. -enable=c-extension-no-member - - -[REPORTS] - -# Python expression which should return a score less than or equal to 10. You -# have access to the variables 'error', 'warning', 'refactor', and 'convention' -# which contain the number of messages in each category, as well as 'statement' -# which is the total number of statements analyzed. This score is used by the -# global evaluation report (RP0004). -evaluation=10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10) - -# Template used to display messages. This is a python new-style format string -# used to format the message information. See doc for all details. -#msg-template= - -# Set the output format. Available formats are text, parseable, colorized, json -# and msvs (visual studio). You can also give a reporter class, e.g. -# mypackage.mymodule.MyReporterClass. -output-format=text - -# Tells whether to display a full report or only the messages. -reports=no - -# Activate the evaluation score. -score=yes - - -[REFACTORING] - -# Maximum number of nested blocks for function / method body -max-nested-blocks=5 - -# Complete name of functions that never returns. When checking for -# inconsistent-return-statements if a never returning function is called then -# it will be considered as an explicit return statement and no message will be -# printed. -never-returning-functions=sys.exit - - -[BASIC] - -# Naming style matching correct argument names. -argument-naming-style=snake_case - -# Regular expression matching correct argument names. Overrides argument- -# naming-style. -#argument-rgx= - -# Naming style matching correct attribute names. -attr-naming-style=snake_case - -# Regular expression matching correct attribute names. Overrides attr-naming- -# style. -#attr-rgx= - -# Bad variable names which should always be refused, separated by a comma. -bad-names=foo, - bar, - baz, - toto, - tutu, - tata - -# Naming style matching correct class attribute names. -class-attribute-naming-style=any - -# Regular expression matching correct class attribute names. Overrides class- -# attribute-naming-style. -#class-attribute-rgx= - -# Naming style matching correct class names. -class-naming-style=PascalCase - -# Regular expression matching correct class names. Overrides class-naming- -# style. -#class-rgx= - -# Naming style matching correct constant names. -const-naming-style=UPPER_CASE - -# Regular expression matching correct constant names. Overrides const-naming- -# style. -#const-rgx= - -# Minimum line length for functions/classes that require docstrings, shorter -# ones are exempt. -docstring-min-length=-1 - -# Naming style matching correct function names. -function-naming-style=snake_case - -# Regular expression matching correct function names. Overrides function- -# naming-style. -#function-rgx= - -# Good variable names which should always be accepted, separated by a comma. -good-names=p, - d, - i, - j, - k, - v, - m, - ex, - Run, - f, - _ - -# Include a hint for the correct naming format with invalid-name. -include-naming-hint=no - -# Naming style matching correct inline iteration names. -inlinevar-naming-style=any - -# Regular expression matching correct inline iteration names. Overrides -# inlinevar-naming-style. -#inlinevar-rgx= - -# Naming style matching correct method names. -method-naming-style=snake_case - -# Regular expression matching correct method names. Overrides method-naming- -# style. -#method-rgx= - -# Naming style matching correct module names. -module-naming-style=snake_case - -# Regular expression matching correct module names. Overrides module-naming- -# style. -#module-rgx= - -# Colon-delimited sets of names that determine each other's naming style when -# the name regexes allow several styles. -name-group= - -# Regular expression which should only match function or class names that do -# not require a docstring. -no-docstring-rgx=^_ - -# List of decorators that produce properties, such as abc.abstractproperty. Add -# to this list to register other decorators that produce valid properties. -# These decorators are taken in consideration only for invalid-name. -property-classes=abc.abstractproperty - -# Naming style matching correct variable names. -variable-naming-style=snake_case - -# Regular expression matching correct variable names. Overrides variable- -# naming-style. -#variable-rgx= - - -[FORMAT] - -# Expected format of line ending, e.g. empty (any line ending), LF or CRLF. -expected-line-ending-format= - -# Regexp for a line that is allowed to be longer than the limit. -ignore-long-lines=^\s*(# )??$ - -# Number of spaces of indent required inside a hanging or continued line. -indent-after-paren=4 - -# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1 -# tab). -indent-string=' ' - -# Maximum number of characters on a single line. -max-line-length=100 - -# Maximum number of lines in a module. -max-module-lines=2000 - -# List of optional constructs for which whitespace checking is disabled. `dict- -# separator` is used to allow tabulation in dicts, etc.: {1 : 1,\n222: 2}. -# `trailing-comma` allows a space between comma and closing bracket: (a, ). -# `empty-line` allows space-only lines. -no-space-check=trailing-comma, - dict-separator - -# Allow the body of a class to be on the same line as the declaration if body -# contains single statement. -single-line-class-stmt=no - -# Allow the body of an if to be on the same line as the test if there is no -# else. -single-line-if-stmt=no - - -[LOGGING] - -# Format style used to check logging format string. `old` means using % -# formatting, `new` is for `{}` formatting,and `fstr` is for f-strings. -logging-format-style=new - -# Logging modules to check that the string format arguments are in logging -# function parameter format. -logging-modules=logging - - -[MISCELLANEOUS] - -# List of note tags to take in consideration, separated by a comma. -notes=FIXME, - XXX, - TODO - - -[SIMILARITIES] - -# Ignore comments when computing similarities. -ignore-comments=yes - -# Ignore docstrings when computing similarities. -ignore-docstrings=yes - -# Ignore imports when computing similarities. -ignore-imports=no - -# Minimum lines number of a similarity. -min-similarity-lines=4 - - -[SPELLING] - -# Limits count of emitted suggestions for spelling mistakes. -max-spelling-suggestions=4 - -# Spelling dictionary name. Available dictionaries: none. To make it work, -# install the python-enchant package. -spelling-dict= - -# List of comma separated words that should not be checked. -spelling-ignore-words= - -# A path to a file that contains the private dictionary; one word per line. -spelling-private-dict-file= - -# Tells whether to store unknown words to the private dictionary (see the -# --spelling-private-dict-file option) instead of raising a message. -spelling-store-unknown-words=no - - -[STRING] - -# This flag controls whether the implicit-str-concat-in-sequence should -# generate a warning on implicit string concatenation in sequences defined over -# several lines. -check-str-concat-over-line-jumps=no - - -[TYPECHECK] - -# List of decorators that produce context managers, such as -# contextlib.contextmanager. Add to this list to register other decorators that -# produce valid context managers. -contextmanager-decorators=contextlib.contextmanager - -# List of members which are set dynamically and missed by pylint inference -# system, and so shouldn't trigger E1101 when accessed. Python regular -# expressions are accepted. -generated-members= - -# Tells whether missing members accessed in mixin class should be ignored. A -# mixin class is detected if its name ends with "mixin" (case insensitive). -ignore-mixin-members=yes - -# Tells whether to warn about missing members when the owner of the attribute -# is inferred to be None. -ignore-none=yes - -# This flag controls whether pylint should warn about no-member and similar -# checks whenever an opaque object is returned when inferring. The inference -# can return multiple potential results while evaluating a Python object, but -# some branches might not be evaluated, which results in partial inference. In -# that case, it might be useful to still emit no-member and other checks for -# the rest of the inferred objects. -ignore-on-opaque-inference=yes - -# List of class names for which member attributes should not be checked (useful -# for classes with dynamically set attributes). This supports the use of -# qualified names. -ignored-classes=optparse.Values,thread._local,_thread._local - -# List of module names for which member attributes should not be checked -# (useful for modules/projects where namespaces are manipulated during runtime -# and thus existing member attributes cannot be deduced by static analysis). It -# supports qualified module names, as well as Unix pattern matching. -ignored-modules=can - -# Show a hint with possible names when a member name was not found. The aspect -# of finding the hint is based on edit distance. -missing-member-hint=yes - -# The minimum edit distance a name should have in order to be considered a -# similar match for a missing member name. -missing-member-hint-distance=1 - -# The total number of similar names that should be taken in consideration when -# showing a hint for a missing member. -missing-member-max-choices=1 - -# List of decorators that change the signature of a decorated function. -signature-mutators= - - -[VARIABLES] - -# List of additional names supposed to be defined in builtins. Remember that -# you should avoid defining new builtins when possible. -additional-builtins= - -# Tells whether unused global variables should be treated as a violation. -allow-global-unused-variables=yes - -# List of strings which can identify a callback function by name. A callback -# name must start or end with one of those strings. -callbacks=cb_, - _cb - -# A regular expression matching the name of dummy variables (i.e. expected to -# not be used). -dummy-variables-rgx=_+$|(_[a-zA-Z0-9_]*[a-zA-Z0-9]+?$)|dummy|^ignored_|^unused_ - -# Argument names that match this expression will be ignored. Default to name -# with leading underscore. -ignored-argument-names=_.*|^ignored_|^unused_ - -# Tells whether we should check for unused import in __init__ files. -init-import=no - -# List of qualified module names which can have objects that can redefine -# builtins. -redefining-builtins-modules=six.moves,past.builtins,future.builtins,builtins,io - - -[CLASSES] - -# List of method names used to declare (i.e. assign) instance attributes. -defining-attr-methods=__init__, - __new__, - setUp, - __post_init__ - -# List of member names, which should be excluded from the protected access -# warning. -exclude-protected=_asdict, - _fields, - _replace, - _source, - _make - -# List of valid names for the first argument in a class method. -valid-classmethod-first-arg=cls - -# List of valid names for the first argument in a metaclass class method. -valid-metaclass-classmethod-first-arg=cls - - -[DESIGN] - -# Maximum number of arguments for function / method. -max-args=5 - -# Maximum number of attributes for a class (see R0902). -max-attributes=7 - -# Maximum number of boolean expressions in an if statement (see R0916). -max-bool-expr=5 - -# Maximum number of branch for function / method body. -max-branches=25 - -# Maximum number of locals for function / method body. -max-locals=100 - -# Maximum number of parents for a class (see R0901). -max-parents=7 - -# Maximum number of public methods for a class (see R0904). -max-public-methods=30 - -# Maximum number of return / yield for function / method body. -max-returns=6 - -# Maximum number of statements in function / method body. -max-statements=100 - -# Minimum number of public methods for a class (see R0903). -min-public-methods=2 - - -[IMPORTS] - -# List of modules that can be imported at any level, not just the top level -# one. -allow-any-import-level= - -# Allow wildcard imports from modules that define __all__. -allow-wildcard-with-all=no - -# Analyse import fallback blocks. This can be used to support both Python 2 and -# 3 compatible code, which means that the block might have code that exists -# only in one or another interpreter, leading to false positives when analysed. -analyse-fallback-blocks=no - -# Deprecated modules which should not be used, separated by a comma. -deprecated-modules=optparse,tkinter.tix - -# Create a graph of external dependencies in the given file (report RP0402 must -# not be disabled). -ext-import-graph= - -# Create a graph of every (i.e. internal and external) dependencies in the -# given file (report RP0402 must not be disabled). -import-graph= - -# Create a graph of internal dependencies in the given file (report RP0402 must -# not be disabled). -int-import-graph= - -# Force import order to recognize a module as part of the standard -# compatibility libraries. -known-standard-library= - -# Force import order to recognize a module as part of a third party library. -known-third-party=enchant - -# Couples of modules and preferred modules, separated by a comma. -preferred-modules= - - -[EXCEPTIONS] - -# Exceptions that will emit a warning when being caught. Defaults to -# "BaseException, Exception". -overgeneral-exceptions=BaseException, - Exception diff --git a/conf/spa/README.md b/conf/spa/README.md deleted file mode 100644 index 6849f107..00000000 --- a/conf/spa/README.md +++ /dev/null @@ -1,6 +0,0 @@ -# Static Program Analysis - -## Python - -The ``pylint`` configuration for the foxBMS 2 project is defined in -``.pylintrc`` in this directory. diff --git a/conf/spell/README.md b/conf/spell/README.md deleted file mode 100644 index 8cafb597..00000000 --- a/conf/spell/README.md +++ /dev/null @@ -1,16 +0,0 @@ -# Spelling Checking Configuration - -## Setup - -- Install aspell 0.60.8 or later -- Install englisch dictionary -- Install conda environment - -## Usage - -```bash -$ # activate conda base environment -$ conda activate pyspell-2-8-2 -$ cd path/to/foxbms-2 -$ pyspelling -c conf/spell/pyspell_cfg.yml -``` diff --git a/conf/spell/conda_env_spelling_linux.yaml b/conf/spell/conda_env_spelling_linux.yaml deleted file mode 100644 index 0b41ca3b..00000000 --- a/conf/spell/conda_env_spelling_linux.yaml +++ /dev/null @@ -1,76 +0,0 @@ -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -name: pyspell-2-8-2 -channels: - - defaults - - conda-forge -dependencies: - - _libgcc_mutex=0.1=main - - _openmp_mutex=5.1=1_gnu - - bzip2=1.0.8=h7b6447c_0 - - ca-certificates=2023.01.10=h06a4308_0 - - ld_impl_linux-64=2.38=h1181459_1 - - libffi=3.4.4=h6a678d5_0 - - libgcc-ng=11.2.0=h1234567_1 - - libgomp=11.2.0=h1234567_1 - - libstdcxx-ng=11.2.0=h1234567_1 - - libuuid=1.41.5=h5eee18b_0 - - ncurses=6.4=h6a678d5_0 - - openssl=1.1.1t=h7f8727e_0 - - python=3.10.11=h7a1cb2a_2 - - readline=8.2=h5eee18b_0 - - sqlite=3.41.2=h5eee18b_0 - - tk=8.6.12=h1ccaba5_0 - - tzdata=2023c=h04d1e81_0 - - xz=5.4.2=h5eee18b_0 - - zlib=1.2.13=h5eee18b_0 - - pip: - - beautifulsoup4==4.12.2 - - bracex==2.3.post1 - - html5lib==1.1 - - lxml==4.9.2 - - markdown==3.4.3 - - pip==23.0.1 - - pyspelling==2.8.2 - - pyyaml==6.0 - - setuptools==67.8.0 - - six==1.16.0 - - soupsieve==2.4.1 - - wcmatch==8.4.1 - - webencodings==0.5.1 - - wheel==0.38.4 diff --git a/conf/spell/dicts/lan_c.txt b/conf/spell/dicts/lan_c.txt deleted file mode 100644 index 6872e763..00000000 --- a/conf/spell/dicts/lan_c.txt +++ /dev/null @@ -1,11 +0,0 @@ -bool -cdefs -curpc -endif -goto -ifdef -ifndef -mktime -printf -struct -uint diff --git a/conf/spell/dicts/lan_py.txt b/conf/spell/dicts/lan_py.txt deleted file mode 100644 index 812a0296..00000000 --- a/conf/spell/dicts/lan_py.txt +++ /dev/null @@ -1,23 +0,0 @@ -abspath -elif -endswith -environ -getattr -hasattr -hexsha -isdir -isfile -isinstance -len -linenos -linesep -mkdir -pathlib -pathsep -shlex -shutil -splitlines -startswith -subprocess -tarfile -tempfile diff --git a/conf/spell/dicts/module_prefix.txt b/conf/spell/dicts/module_prefix.txt deleted file mode 100644 index 90d9eb57..00000000 --- a/conf/spell/dicts/module_prefix.txt +++ /dev/null @@ -1,74 +0,0 @@ -ABC -ADC -ADI -AFE -ALGO -BAL -BALS -BC -BETA -BMS -BS -CAN -CANRX -CANTX -CHK -CONT -CRC -DATA -DIAG -DMA -DX -EG -FAKE -FAS -FRAM -FS85 -FSYS -FTSK -GEN -HTSEN -I165C -I2C -ILCK -IMD -IO -IR155 -LED -LTC -MATH -MCU -MEAS -MINFO -MRC -MXM -N775 -NOIMD -NONE -NXP -OS -PEX -PL -PWM -RTC -SBC -SE -SOA -SOC -SOE -SOF -SOH -SPI -SPS -STD -STU -SUPER -SYS -SYSM -TEST -TODO -TS -TSEN -TSI -UTIL -VER diff --git a/conf/spell/pyspell_cfg.yml b/conf/spell/pyspell_cfg.yml deleted file mode 100644 index 129772bc..00000000 --- a/conf/spell/pyspell_cfg.yml +++ /dev/null @@ -1,271 +0,0 @@ -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -matrix: - - name: c - group: code - sources: - # third party is not checked and files with heavy usage of names from the - # data sheet (e.g., AFE drivers) are checked seperately to not pollute - # general dictionaries. - - ./**/*.c|!./src/os/freertos/**/*|!./src/os/safertos/**/*|!./src/app/driver/afe/adi/**/*|!./tests/unit/app/driver/afe/adi/**/*|!./src/app/driver/afe/maxim/**/*|!./src/app/driver/afe/ltc/**/*|!./tests/unit/app/driver/afe/ltc/**/*|!./tests/unit/app/driver/afe/maxim/**/*|!./tools/vendor/**/*|!./tests/axivion/qualification-test/**/*|!./tests/axivion/compiler-errata/**/*|!./src/app/driver/sbc/fs8x_driver/* - - ./**/*.h|!./src/os/freertos/**/*|!./src/os/safertos/**/*|!./src/app/driver/afe/adi/**/*|!./tests/unit/app/driver/afe/adi/**/*|!./src/app/driver/afe/maxim/**/*|!./src/app/driver/afe/ltc/**/*|!./tests/unit/app/driver/afe/ltc/**/*|!./tests/unit/app/driver/afe/maxim/**/*|!./tools/vendor/**/*|!./tests/axivion/qualification-test/**/*|!./tests/axivion/compiler-errata/**/*|!./src/app/driver/sbc/fs8x_driver/*|!./src/app/driver/afe/nxp/mc33775a/vendor/MC33775A.h|!./tests/axivion/axivion_preinc.h - pipeline: - - pyspelling.filters.context: - context_visible_first: true - delimiters: - - open: '0[xX][a-fA-F0-9]{2,8}' # hex numbers - close: '[u| |\)]?' - - open: 'kpk[A-Za-z0-9]*' # const pointer const - close: '[\(|\s]' - aspell: - lang: en - camel-case: 1 - dictionary: - wordlists: - - ./conf/spell/dicts/lan_c.txt - - ./conf/spell/dicts/names.txt - - ./conf/spell/dicts/funs-and-vars.txt - - ./conf/spell/dicts/abbreviations.txt - - ./conf/spell/dicts/words.txt - - ./conf/spell/dicts/units.txt - - ./conf/spell/dicts/other.txt - - ./conf/spell/dicts/driver-ti.txt - - ./conf/spell/dicts/prefixes.txt - - ./conf/spell/dicts/freertos.txt - - name: c-adi - group: code - sources: - - ./src/app/driver/afe/adi/**/*.c - - ./src/app/driver/afe/adi/**/*.h - - ./tests/unit/app/driver/afe/adi/**/*.c - - ./tests/unit/app/driver/afe/adi/**/*.h - pipeline: - - pyspelling.filters.context: - context_visible_first: true - delimiters: - - open: '0[xX][a-fA-F0-9]{2,8}' # hex numbers - close: '[u| |\)]?' - - open: '(test_)?adi[_|-]ad[A-Za-z0-9_.-]*' # ADI files - close: '[:\s\)\"$"]' - - open: 'RunSm[A-Za-z0-9]*' - close: '[\(|\s]' - - open: 'kpk[A-Za-z0-9]*' # const pointer const - close: '[\(|\s]' - aspell: - lang: en - camel-case: 1 - dictionary: - wordlists: - - ./conf/spell/dicts/lan_c.txt - - ./conf/spell/dicts/names.txt - - ./conf/spell/dicts/funs-and-vars.txt - - ./conf/spell/dicts/abbreviations.txt - - ./conf/spell/dicts/words.txt - - ./conf/spell/dicts/units.txt - - ./conf/spell/dicts/other.txt - - ./conf/spell/dicts/driver-adi.txt - - ./conf/spell/dicts/prefixes.txt - - ./conf/spell/dicts/freertos.txt - - name: c-maxim - group: code - sources: - - ./src/app/driver/afe/maxim/**/*.c - - ./src/app/driver/afe/maxim/**/*.h - - ./tests/unit/app/driver/afe/maxim/**/*.c - - ./tests/unit/app/driver/afe/maxim/**/*.h - pipeline: - - pyspelling.filters.context: - context_visible_first: true - delimiters: - - open: '0[xX][a-fA-F0-9]{2,8}' # hex numbers - close: '[u| |\)]?' - - open: '(test_)?adi[_|-]ad[A-Za-z0-9_.-]*' # ADI files - close: '[:\s\)\"$"]' - - open: 'RunSm[A-Za-z0-9]*' - close: '[\(|\s]' - - open: 'kpk[A-Za-z0-9]*' # const pointer const - close: '[\(|\s]' - aspell: - lang: en - camel-case: 1 - dictionary: - wordlists: - - ./conf/spell/dicts/lan_c.txt - - ./conf/spell/dicts/names.txt - - ./conf/spell/dicts/funs-and-vars.txt - - ./conf/spell/dicts/abbreviations.txt - - ./conf/spell/dicts/words.txt - - ./conf/spell/dicts/units.txt - - ./conf/spell/dicts/other.txt - - ./conf/spell/dicts/driver-adi.txt - - ./conf/spell/dicts/prefixes.txt - - ./conf/spell/dicts/freertos.txt - - name: c-ltc - group: code - sources: - - ./src/app/driver/afe/ltc/**/*.c - - ./src/app/driver/afe/ltc/**/*.h - - ./tests/unit/app/driver/afe/ltc/**/*.c - - ./tests/unit/app/driver/afe/ltc/**/*.h - pipeline: - - pyspelling.filters.context: - context_visible_first: true - delimiters: - - open: '0[xX][a-fA-F0-9]{2,8}' # hex numbers - close: '[u| |\)]?' - - open: 'kpk[A-Za-z0-9]*' # const pointer const - close: '[\(|\s]' - aspell: - lang: en - camel-case: 1 - dictionary: - wordlists: - - ./conf/spell/dicts/lan_c.txt - - ./conf/spell/dicts/names.txt - - ./conf/spell/dicts/funs-and-vars.txt - - ./conf/spell/dicts/abbreviations.txt - - ./conf/spell/dicts/words.txt - - ./conf/spell/dicts/units.txt - - ./conf/spell/dicts/other.txt - - ./conf/spell/dicts/driver-ltc.txt - - ./conf/spell/dicts/prefixes.txt - - ./conf/spell/dicts/freertos.txt - - name: py - group: code - sources: - - ./**/*.py|!./src/os/freertos/**/*|!./tools/vendor/**/*|!./tests/axivion/qualification-test/**/*|!./tests/axivion/compiler-errata/**/*|!./tools/gui/fgui/misc/logo.py|!./tests/env/packages/**/*|!./tests/scripts/waf-core/**/* - - ./**/wscript|!./src/os/freertos/**/*|!./tools/vendor/**/*|!./tests/axivion/qualification-test/**/*|!./tests/axivion/compiler-errata/**/*|!./tests/scripts/waf-core/**/* - pipeline: - - pyspelling.filters.url: - - pyspelling.filters.context: - context_visible_first: true - delimiters: - - open: '0[xX][a-fA-F0-9]{2,4}' - close: '[u| |\)]?' - - open: '(test_)?adi[_|-]ad[A-Za-z0-9_.-]*' - close: '[:\s\)\"$"]' - aspell: - lang: en - camel-case: 1 - dictionary: - wordlists: - - ./conf/spell/dicts/lan_py.txt - - ./conf/spell/dicts/names.txt - - ./conf/spell/dicts/abbreviations.txt - - ./conf/spell/dicts/words.txt - - ./conf/spell/dicts/units.txt - - ./conf/spell/dicts/other.txt - - ./conf/spell/dicts/prefixes.txt - - name: docs - group: text - pipeline: - - pyspelling.filters.url: - - pyspelling.filters.context: - context_visible_first: true - delimiters: - - open: '0[xX][a-fA-F0-9]{2,4}' - close: '[u| |\)]?' - - open: '(test_)?adi[_|-]ad[A-Za-z0-9_.-]*' - close: '[:\s\)\"$"]' - sources: - - docs/**/*.rst - aspell: - lang: en - camel-case: 1 - dictionary: - wordlists: - - ./conf/spell/dicts/docs.txt - - ./conf/spell/dicts/names.txt - - ./conf/spell/dicts/abbreviations.txt - - ./conf/spell/dicts/words.txt - - ./conf/spell/dicts/units.txt - - ./conf/spell/dicts/other.txt - - ./conf/spell/dicts/prefixes.txt - - ./conf/spell/dicts/freertos.txt - - name: readme - group: text - pipeline: - - pyspelling.filters.url: - - pyspelling.filters.context: - context_visible_first: true - delimiters: - - open: '0[xX][a-fA-F0-9]{2,4}' - close: '[u| |\)]?' - - open: '(test_)?adi[_|-]ad[A-Za-z0-9_.-]*' - close: '[:\s\)\"$"]' - sources: - - ./**/*.md|!./src/os/freertos/**/*|!./tools/vendor/**/*|!./tests/axivion/qualification-test/**/*|!./tests/axivion/compiler-errata/**/* - aspell: - lang: en - camel-case: 1 - dictionary: - wordlists: - - ./conf/spell/dicts/docs.txt - - ./conf/spell/dicts/names.txt - - ./conf/spell/dicts/abbreviations.txt - - ./conf/spell/dicts/words.txt - - ./conf/spell/dicts/units.txt - - ./conf/spell/dicts/other.txt - - ./conf/spell/dicts/prefixes.txt - - ./conf/spell/dicts/freertos.txt - - name: txt - group: text - pipeline: - - pyspelling.filters.url: - - pyspelling.filters.context: - context_visible_first: true - delimiters: - - open: '0[xX][a-fA-F0-9]{2,4}' - close: '[u| |\)]?' - - open: '(test_)?adi[_|-]ad[A-Za-z0-9_.-]*' - close: '[:\s\)\"$"]' - sources: - - ./**/*.txt|!./src/os/freertos/**/*|!./tools/vendor/**/*|!./tests/axivion/qualification-test/**/*|!./tests/axivion/compiler-errata/**/*|!./conf/spell/dicts/*|!./docs/software/configuration/fstartup.c-check.txt|!./docs/macros.txt|!./docs/general/license-tables/license-packages-conda-env-spelling.txt - aspell: - lang: en - camel-case: 1 - dictionary: - wordlists: - - ./conf/spell/dicts/docs.txt - - ./conf/spell/dicts/names.txt - - ./conf/spell/dicts/abbreviations.txt - - ./conf/spell/dicts/words.txt - - ./conf/spell/dicts/units.txt - - ./conf/spell/dicts/other.txt - - ./conf/spell/dicts/prefixes.txt - - ./conf/spell/dicts/freertos.txt diff --git a/conf/tpl/batch.bat b/conf/tpl/batch_script.bat similarity index 96% rename from conf/tpl/batch.bat rename to conf/tpl/batch_script.bat index 1e12267a..e1e8fa41 100644 --- a/conf/tpl/batch.bat +++ b/conf/tpl/batch_script.bat @@ -1,4 +1,4 @@ -@REM Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +@REM Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. @REM All rights reserved. @REM @REM SPDX-License-Identifier: BSD-3-Clause @@ -37,4 +37,4 @@ @SETLOCAL EnableExtensions EnableDelayedExpansion -@echo Put code here. +@echo Hello foxBMS! diff --git a/conf/tpl/c.c b/conf/tpl/c.c index e193fbeb..a6b4cbdd 100644 --- a/conf/tpl/c.c +++ b/conf/tpl/c.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file c.c * @author foxBMS Team * @date 2019-08-27 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup SOME_GROUP * @prefix ABC * * @brief Implementation of some software - * + * @details Some detailed explanation */ /*========== Includes =======================================================*/ diff --git a/conf/tpl/c.h b/conf/tpl/c.h index f7c0855c..12d923d9 100644 --- a/conf/tpl/c.h +++ b/conf/tpl/c.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file c.h * @author foxBMS Team * @date 2019-08-27 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup SOME_GROUP * @prefix ABC * * @brief Header file of some software - * + * @details Some detailed explanation */ #ifndef FOXBMS__C_H_ diff --git a/tests/scripts/waf-tools/f_guidelines/__init__.py b/conf/tpl/pwsh_script.ps1 old mode 100644 new mode 100755 similarity index 87% rename from tests/scripts/waf-tools/f_guidelines/__init__.py rename to conf/tpl/pwsh_script.ps1 index 1e25fcbb..9ef24000 --- a/tests/scripts/waf-tools/f_guidelines/__init__.py +++ b/conf/tpl/pwsh_script.ps1 @@ -1,7 +1,6 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- +#!/usr/bin/env pwsh # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -38,6 +37,13 @@ # - "This product includes parts of foxBMS®" # - "This product is derived from foxBMS®" -# f_guidelines is not a proper python module name, but this is OK since we need -# it just for the unit test discovery -# pylint: disable-all +if ($IsLinux) { + Write-Host "Hello foxBMS!" +} +elseif ($IsMacOS) { + Write-Error "MacOS is currently not supported." + exit 1 +} +elseif ($IsWindows) { + Write-Host "Hello foxBMS!" +} diff --git a/conf/tpl/python_script.py b/conf/tpl/python_script.py old mode 100644 new mode 100755 index fb466a59..76706f56 --- a/conf/tpl/python_script.py +++ b/conf/tpl/python_script.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -40,31 +39,10 @@ """Template for Python scripts""" -import argparse -import logging - def main(): """This script does this and that""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - # code goes here + print("Hello foxBMS!") if __name__ == "__main__": diff --git a/conf/tpl/rst.rst b/conf/tpl/rst.rst index 29e59628..3c5857fc 100644 --- a/conf/tpl/rst.rst +++ b/conf/tpl/rst.rst @@ -7,11 +7,4 @@ Some Heading ############ -.. - Comments: - abc is the abbreviation for "xyz" - -.. spelling:: - abc - Put documentation here diff --git a/conf/tpl/shell.sh b/conf/tpl/shell_script.sh old mode 100644 new mode 100755 similarity index 76% rename from conf/tpl/shell.sh rename to conf/tpl/shell_script.sh index 08236379..c7b8c798 --- a/conf/tpl/shell.sh +++ b/conf/tpl/shell_script.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -33,26 +33,28 @@ # We kindly request you to use one or more of the following phrases to refer to # foxBMS in your hardware, software, documentation or advertising materials: # -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" +# - "This product uses parts of foxBMS®" +# - "This product includes parts of foxBMS®" +# - "This product is derived from foxBMS®" set -e + # MacOS if [ "$(uname)" == "Darwin" ]; then echo "MacOS is currently not supported." exit 1 # Linux -elif [ "$(expr substr $(uname -s) 1 5)" == "Linux" ]; then - echo "Linux is currently not supported." +elif [ "$(printf "%s" "$(uname -s)" | cut -c 1-5)" == "Linux" ]; then + echo "Hello foxBMS!" exit 1 # Windows -elif [ "$(expr substr $(uname -s) 1 9)" == "CYGWIN_NT" ]; then +elif [ "$(printf "%s" "$(uname -s)" | cut -c 1-9)" == "CYGWIN_NT" ]; then echo "Cygwin is not supported." exit 1 -elif [ "$(expr substr $(uname -s) 1 10)" == "MINGW32_NT" ]; then +elif [ "$(printf "%s" "$(uname -s)" | cut -c 1-10)" == "MINGW32_NT" ]; then echo "32bit Windows is not supported." exit 1 -elif [ "$(expr substr $(uname -s) 1 10)" == "MINGW64_NT" ] || [ "$(expr substr $(uname -s) 1 7)" == "MSYS_NT" ] ; then - echo "Put code here." +elif [ "$(printf "%s" "$(uname -s)" | cut -c 1-10)" == "MINGW64_NT" ] || [ "$(printf "%s" "$(uname -s)" | cut -c 1-7)" == "MSYS_NT" ] ; then + echo "Hello foxBMS!" + exit 1 fi diff --git a/conf/tpl/test_c.c b/conf/tpl/test_c.c index aadcc41e..877f7516 100644 --- a/conf/tpl/test_c.c +++ b/conf/tpl/test_c.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_c.c * @author foxBMS Team * @date 2020-08-10 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/conf/tpl/test_c.h b/conf/tpl/test_c.h index 4442f080..4183c870 100644 --- a/conf/tpl/test_c.h +++ b/conf/tpl/test_c.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file test_c.h * @author foxBMS Team * @date 2020-08-10 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * * @brief Test header of the some module - * + * @details TODO */ #ifndef FOXBMS__TEST_C_H_ diff --git a/conf/unit/ceedling.cmd b/conf/unit/ceedling.cmd deleted file mode 100644 index d19af4c9..00000000 --- a/conf/unit/ceedling.cmd +++ /dev/null @@ -1,38 +0,0 @@ -@REM Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -@REM All rights reserved. -@REM -@REM SPDX-License-Identifier: BSD-3-Clause -@REM -@REM Redistribution and use in source and binary forms, with or without -@REM modification, are permitted provided that the following conditions are met: -@REM -@REM 1. Redistributions of source code must retain the above copyright notice, this -@REM list of conditions and the following disclaimer. -@REM -@REM 2. Redistributions in binary form must reproduce the above copyright notice, -@REM this list of conditions and the following disclaimer in the documentation -@REM and/or other materials provided with the distribution. -@REM -@REM 3. Neither the name of the copyright holder nor the names of its -@REM contributors may be used to endorse or promote products derived from -@REM this software without specific prior written permission. -@REM -@REM THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -@REM AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -@REM IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -@REM DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -@REM FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -@REM DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -@REM SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -@REM CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -@REM OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -@REM OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -@REM -@REM We kindly request you to use one or more of the following phrases to refer to -@REM foxBMS in your hardware, software, documentation or advertising materials: -@REM -@REM - "This product uses parts of foxBMS®" -@REM - "This product includes parts of foxBMS®" -@REM - "This product is derived from foxBMS®" - -@ruby ..\..\tools\vendor\ceedling\bin\ceedling %* diff --git a/conf/unit/ceedling.sh b/conf/unit/ceedling.sh deleted file mode 100644 index 439c736b..00000000 --- a/conf/unit/ceedling.sh +++ /dev/null @@ -1,45 +0,0 @@ -#!/usr/bin/env bash -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -set -e - -SCRIPTDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" -pushd $SCRIPTDIR -ruby ../../tools/vendor/ceedling/bin/ceedling $@ -popd diff --git a/conf/unit/project_posix.yml b/conf/unit/project_posix.yml index ceb2913f..0af62a97 100644 --- a/conf/unit/project_posix.yml +++ b/conf/unit/project_posix.yml @@ -1,97 +1,155 @@ -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= --- -############################################################################## -# Important: # -# Paths must be given as seen from the build variant root directory # -############################################################################## - +############################################################################### +# Note: # +# This file is based on the 'project.yml' file created by # +# 'ceedling new --local tmp', so that upgrading is as simple as possible # +# by creating the smallest possible diff. On the other hand this leads to # +# some configuration options that are just commented out, as they are not # +# needed. # +############################################################################### +# Important: # +# Paths must be given as seen from the build variant root directory # +############################################################################### :project: - :use_exceptions: TRUE - :use_test_preprocessor: TRUE + # how to use ceedling. If you're not sure, leave this as `gem` and `?` + :which_ceedling: ../../tools/vendor/ceedling + :ceedling_version: 1.0.0 + + # optional features. If you don't need them, keep them turned off for performance :use_mocks: TRUE + :use_exceptions: TRUE + :use_test_preprocessor: :all + :use_backtrace: :gdb :use_auxiliary_dependencies: TRUE + :use_decorators: :auto #Decorate Ceedling's output text. Your options are :auto, :all, or :none + + # tweak the way ceedling handles automatic tasks :build_root: . :test_file_prefix: test_ - :which_ceedling: ../../tools/vendor/ceedling - :ceedling_version: 0.32.0 :default_tasks: - test:all + + # performance options. If your tools start giving mysterious errors, consider + # dropping this to 1 to force single-tasking :test_threads: 8 :compile_threads: 8 -:environment: [] + # enable release build (more details in release_build section below) + :release_build: FALSE + +# Specify where to find mixins and any that should be enabled automatically +:mixins: + :enabled: [] + :load_paths: [] +# further details to configure the way Ceedling handles test code +:test_build: + :use_assembly: FALSE + +# further details to configure the way Ceedling handles release code +#:release_build: +# :output: MyApp.out +# :use_assembly: FALSE +# :artifacts: [] + +# Plugins are optional Ceedling features which can be enabled. Ceedling supports +# a variety of plugins which may effect the way things are compiled, reported, +# or may provide new command options. Refer to the readme in each plugin for +# details on how to use it. +:plugins: + :load_paths: + - ../../tools/vendor/ceedling/plugins + :enabled: + #- beep # beeps when finished, so you don't waste time waiting for ceedling + - module_generator # handy for quickly creating source, header, and test templates + - gcov # test coverage using gcov. Requires gcc, gcov, and a coverage analyzer like gcovr + #- bullseye # test coverage using bullseye. Requires bullseye for your platform + #- command_hooks # write custom actions to be called at different points during the build process + #- compile_commands_json_db # generate a compile_commands.json file + #- dependencies # automatically fetch 3rd party libraries, etc. + #- subprojects # managing builds and test for static libraries + #- fake_function_framework # use FFF instead of CMock + + # Report options (You'll want to choose one stdout option, but may choose multiple stored options if desired) + #- report_build_warnings_log + #- report_tests_gtestlike_stdout + #- report_tests_ide_stdout + - report_tests_log_factory + - report_tests_pretty_stdout + - report_tests_raw_output_log + #- report_tests_teamcity_stdout + +# Specify which reports you'd like from the log factory +:report_tests_log_factory: + :reports: + - json + - junit + - cppunit + - html + +# override the default extensions for your system and toolchain :extension: + #:header: .h + #:source: .c + #:assembly: .s + #:dependencies: .d + #:object: .o :executable: .out + #:testpass: .pass + #:testfail: .fail + #:subprojects: .a +# This is where Ceedling should look for your source and test files. +# see documentation for the many options for specifying this. :paths: :test: - - +:../../tests/unit/** - - -:../../tests/unit/support + - +:./../../tests/unit/** + # see tests/unit/app/driver/afe/adi/common/ades183x/README.md why this + # directory is excluded + - -:./../../tests/unit/app/driver/afe/adi/common/ades183x/** + - -:./../../tests/unit/support :source: - - ../../src/app/** - - ../../src/opt/** + - +:./../../src/app/** + - +:./../../src/opt/** :include: - +:./include/** - +:./../../src/os/freertos/include - +:./../../src/os/freertos/portable/ccs/arm_cortex-r5 - +:./../../src/app/main/include - +:./../../src/app/main/include/config - - +:./../../src/app/application/config + - +:./../../src/app/application/config # see marker 'CONFIG' - +:./../../src/app/engine/config - +:./../../src/app/engine/database - +:./../../src/app/driver/mcu - +:./../../src/app/task/os + # 'CONFIG': configuration of the battery system for the unit test build + # (see file battery_system_cfg_unit_test.h) + - +:./../../tests/unit/app/application/config :support: - - ../../tests/unit/support/** + - +:./../../tests/unit/support/** + :libraries: [] -:flags: +# You can even specify specific files to add or remove from your test +# and release collections. Usually it's better to use paths and let +# Ceedling do the work for you! +:files: :test: - :compile: - :*: - - -std=c11 - - -Wextra - - -Wall - - -pedantic - - -include test_ignore_list.h - - -Werror + # this file can only be tested on Windows due to HALCoGen availability + - -:./../../tests/unit/app/main/test_fstartup.c + :source: [] +# Compilation symbols to be injected into builds +# See documentation for advanced options: +# - Test name matchers for different symbols per test executable build +# - Referencing symbols in multiple lists using advanced YAML +# - Specifiying symbols used during test preprocessing :defines: :test: &config-test-defines :*: &match-all-tests @@ -100,27 +158,78 @@ - UNITY_INCLUDE_EXEC_TIME - FOXBMS_USES_FREERTOS=1 - _POSIX_C_SOURCE=200809L - :test_adi_ades1830*: + :/test_adi_ades1830.*/: + - FOXBMS_AFE_DRIVER_ADI=1u - FOXBMS_AFE_DRIVER_ADI_ADES1830=1u + - TEST_BS_NR_OF_CELL_BLOCKS_PER_MODULE=16u + :/test_debug_default.*/: + - FOXBMS_AFE_DRIVER_DEBUG=1u + :/test_debug_can.*/: + - TEST_BS_NR_OF_STRINGS=2u + - TEST_BS_NR_OF_MODULES_PER_STRING=4u + :/test_ltc_.*/: + - FOXBMS_AFE_DRIVER_LTC=1u + - TEST_BS_NR_OF_CELL_BLOCKS_PER_MODULE=18u + :/test_mxm.*/: + - FOXBMS_AFE_DRIVER_MAXIM=1u + - TEST_BS_NR_OF_CELL_BLOCKS_PER_MODULE=14u + :/test_nxp_.*/: + - FOXBMS_AFE_DRIVER_NXP=1u + - TEST_BS_NR_OF_CELL_BLOCKS_PER_MODULE=14u + :/test_ti_.*/: + - FOXBMS_AFE_DRIVER_TI=1u + - TEST_BS_NR_OF_CELL_BLOCKS_PER_MODULE=18u + :test_spi_adi.c: + - FOXBMS_AFE_DRIVER_ADI=1u + :test_spi_debug.c: + - FOXBMS_AFE_DRIVER_DEBUG=1u + :test_spi_ltc.c: + - FOXBMS_AFE_DRIVER_LTC=1u + :test_spi_mxm.c: + - FOXBMS_AFE_DRIVER_MAXIM=1u + :test_spi_nxp.c: + - FOXBMS_AFE_DRIVER_NXP=1u + :test_spi_ti.c: + - FOXBMS_AFE_DRIVER_TI=1u + :/test_can_cbs_tx_string.*/: + - TEST_BS_NR_OF_STRINGS=2u + :test_can_cbs_tx_pack-minimum-maximum-values.c: + - TEST_BS_NR_OF_STRINGS=2u + :test_can_cbs_tx_pack-state-estimation.c: + - TEST_BS_NR_OF_STRINGS=2u + :fstartup.c: + - uint32=uint32_t :preprocess: <<: *config-test-defines :*: - *match-all-tests - INC_FREERTOS_H +# :release: [] +# +# # Enable to inject name of a test as a unique compilation symbol into its respective executable build. +# :use_test_definition: FALSE + +# Configure additional command line flags provided to tools used in each build step +:flags: + # :release: + # :compile: # Add '-Wall' and '--02' to compilation of all files in release target + # - -Wall + # - --O2 + :test: + :compile: + :*: + - -std=c11 + - -Wextra + - -Wall + - -pedantic + - -include test_ignore_list.h + - -Werror + :fstartup.c: + - -Wimplicit-fallthrough=4 +# Configuration Options specific to CMock. See CMock docs for details :cmock: - :when_no_prototypes: :warn - :enforce_strict_ordering: TRUE - :mock_prefix: Mock - :weak: "" - :strippables: - [ - "(.FREERTOS_SYSTEM_CALL)", - "(.PRIVILEGED_FUNCTION)", - "(portDONT_DISCARD)", - "(?:TEST_LTC_DECLARE_GET\\s*\\(+.*?\\)+)", - "(?:TEST_LTC_DEFINE_GET\\s*\\(+.*?\\)+)", - ] + # Core conffiguration :includes: - "FreeRTOSConfig.h" - "FreeRTOS.h" @@ -133,60 +242,296 @@ - "stream_buffer.h" - "event_groups.h" - "string.h" - :plugins: + :plugins: # What plugins should be used by CMock? - :ignore - :callback - :ignore_arg - :return_thru_ptr - :treat_externs: :include - :treat_as: + :verbosity: 2 # the options being 0 errors only, 1 warnings and errors, 2 normal info, 3 verbose + :when_no_prototypes: :warn # the options being :ignore, :warn, or :erro + + # File configuration + :mock_path: "./mocks" # Subdirectory to store mocks when generated (default: mocks) + :skeleton_path: "" # Subdirectory to store stubs when generated (default: '') + :mock_prefix: "Mock" # Prefix to append to filenames for mocks + :mock_suffix: "" # Suffix to append to filenames for mocks + + # Parser configuration + :strippables: + [ + "(.FREERTOS_SYSTEM_CALL)", + "(.PRIVILEGED_FUNCTION)", + "(portDONT_DISCARD)", + "(?:TEST_LTC_DECLARE_GET\\s*\\(+.*?\\)+)", + "(?:TEST_LTC_DEFINE_GET\\s*\\(+.*?\\)+)", + ] + :attributes: + - __ramfunc + - __irq + - __fiq + - register + - extern + :c_calling_conventions: + - __stdcall + - __cdecl + - __fastcall + :treat_externs: :include # the options being :include or :exclude + :treat_inlines: :exclude # the options being :include or :exclude + + # Type handling configuration + #:unity_helper_path: '' # specify a string of where to find a unity_helper.h file to discover custom type assertions + :treat_as: # optionally add additional types to map custom types uint8: HEX8 uint16: HEX16 uint32: UINT32 int8: INT8 bool: UINT8 + #:treat_as_array: {} # hint to cmock that these types are pointers to something + #:treat_as_void: [] # hint to cmock that these types are actually aliases of void + :memcmp_if_unknown: true # allow cmock to use the memory comparison assertions for unknown types + :when_ptr: :compare_data # hint to cmock how to handle pointers in general, the options being :compare_ptr, :compare_data, or :smart -#:tools: -# Ceedling defaults to using gcc for compiling, linking, etc. -# As [:tools] is blank, gcc will be used (so long as it's in your system path) -# See documentation to configure a given toolchain for use + # Mock generation configuration + :weak: "" # Symbol to use to declare weak functions + :enforce_strict_ordering: true # Do we want cmock to enforce ordering of all function calls? + :fail_on_unexpected_calls: true # Do we want cmock to fail when it encounters a function call that wasn't expected? + :callback_include_count: true # Do we want cmock to include the number of calls to this callback, when using callbacks? + :callback_after_arg_check: false # Do we want cmock to enforce an argument check first when using a callback? + #:includes: [] # You can add additional includes here, or specify the location with the options below + #:includes_h_pre_orig_header: [] + #:includes_h_post_orig_header: [] + #:includes_c_pre_header: [] + #:includes_c_post_header: [] + #:array_size_type: [] # Specify a type or types that should be used for array lengths + #:array_size_name: 'size|len' # Specify a name or names that CMock might automatically recognize as the length of an array + :exclude_setjmp_h: false # Don't use setjmp when running CMock. Note that this might result in late reporting or out-of-order failures. + +# Configuration options specific to Unity. +#:unity: +# :defines: +# - UNITY_EXCLUDE_FLOAT + +# Configuration options specify to Unity's test runner generator +:test_runner: + :cmdline_args: true -:tools_test_linker: - :arguments: - - -lm - - -flto -:tools_gcov_linker: - :arguments: - - -lm - - -flto +# You can optionally have ceedling create environment variables for you before +# performing the rest of its tasks. +:environment: [] + +# LIBRARIES +# These libraries are automatically injected into the build process. Those specified as +# common will be used in all types of builds. Otherwise, libraries can be injected in just +# tests or releases. These options are MERGED with the options in supplemental yaml files. +:libraries: + :placement: :end + :flag: "-l${1}" + :path_flag: "-L ${1}" + :system: [m] # for example, you might list 'm' to grab the math library + :test: [] + :release: [] + +################################################################ +# PLUGIN CONFIGURATION +################################################################ + +# Add -gcov to the plugins list to make sure of the gcov plugin +# You will need to have gcov and gcovr both installed to make it work. +# For more information on these options, see docs in plugins/gcov :gcov: :utilities: - - gcovr - :reports: + - gcovr # Use gcovr to create the specified reports (default). + #- ReportGenerator # Use ReportGenerator to create the specified reports. + :reports: # Specify one or more reports to generate. + # Make an HTML summary report. + - HtmlBasic - HtmlDetailed - Text - Cobertura + # - SonarQube + # - JSON + # - HtmlInline + # - HtmlInlineAzure + # - HtmlInlineAzureDark + # - HtmlChart + # - MHtml + # - Badges + # - CsvSummary + # - Latex + # - LatexSummary + # - PngChart + # - TeamCitySummary + # - lcov + # - Xml + # - XmlSummary :gcovr: :report_root: "../../" - :report_exclude: ".*vendor.*|.*build.*|.*test.*|.*tests.*|.*lib.*|.*Test.*|.*src.hal.*|.*src.os.*" - :exclude_directories: ".*tests.*|.*src.os.*|.*build.*|.*src.app.driver.sbc.fs8x_driver." - :sort_percentage: true - :sort_uncovered: false - :html_medium_threshold: 60 - :html_high_threshold: 85 - :print_summary: true + :report_exclude: ".*vendor.*|.*/build.*|.*test.*|.*tests.*|.*lib.*|.*Test.*|.*src.hal.*|.*src.os.*" + :exclude_directories: ".*tests.*|.*src.os.*|.*/build.*|.*src.app.driver.sbc.fs8x_driver." + :sort_percentage: TRUE + :sort_uncovered: FALSE + :print_summary: TRUE :threads: 8 - :keep: false + :keep: FALSE + :html_artifact_filename: GcovCoverageResults.html + :html_title: foxBMS 2 Test Coverage Report + :html_medium_threshold: 75 + :html_high_threshold: 90 + :html_absolute_paths: FALSE + :html_encoding: UTF-8 + :merge_mode_function: merge-use-line-min +# :module_generator: +# :project_root: ./ +# :source_root: source/ +# :inc_root: includes/ +# :test_root: tests/ +# :naming: :snake #options: :bumpy, :camel, :caps, or :snake +# :includes: +# :tst: [] +# :src: [] +# :boilerplates: +# :src: "" +# :inc: "" +# :tst: "" -:junit_tests_report: - :artifact_filename: report_junit.xml +# :dependencies: +# :libraries: +# - :name: WolfSSL +# :source_path: third_party/wolfssl/source +# :build_path: third_party/wolfssl/build +# :artifact_path: third_party/wolfssl/install +# :fetch: +# :method: :zip +# :source: \\shared_drive\third_party_libs\wolfssl\wolfssl-4.2.0.zip +# :environment: +# - CFLAGS+=-DWOLFSSL_DTLS_ALLOW_FUTURE +# :build: +# - "autoreconf -i" +# - "./configure --enable-tls13 --enable-singlethreaded" +# - make +# - make install +# :artifacts: +# :static_libraries: +# - lib/wolfssl.a +# :dynamic_libraries: +# - lib/wolfssl.so +# :includes: +# - include/** -:plugins: - :load_paths: - - ../../tools/vendor/ceedling/plugins - :enabled: - - gcov - - stdout_pretty_tests_report - - module_generator - - xml_tests_report - - junit_tests_report +# :subprojects: +# :paths: +# - :name: libprojectA +# :source: +# - ./subprojectA/source +# :include: +# - ./subprojectA/include +# :build_root: ./subprojectA/build +# :defines: [] + +# :command_hooks: +# :pre_mock_preprocess: +# :post_mock_preprocess: +# :pre_test_preprocess: +# :post_test_preprocess: +# :pre_mock_generate: +# :post_mock_generate: +# :pre_runner_generate: +# :post_runner_generate: +# :pre_compile_execute: +# :post_compile_execute: +# :pre_link_execute: +# :post_link_execute: +# :pre_test_fixture_execute: +# :post_test_fixture_execute: +# :pre_test: +# :post_test: +# :pre_release: +# :post_release: +# :pre_build: +# :post_build: +# :post_error: + +################################################################ +# TOOLCHAIN CONFIGURATION +################################################################ + +#:tools: +# Ceedling defaults to using gcc for compiling, linking, etc. +# As [:tools] is blank, gcc will be used (so long as it's in your system path) +# See documentation to configure a given toolchain for use +:tools: + # :test_compiler: + # :executable: + # :arguments: [] + # :name: + # :optional: FALSE + :test_linker: + :executable: gcc + :arguments: + - ${1} + - ${5} + - -o ${2} + - ${4} + - -flto + :gcov_linker: + :executable: gcc + :arguments: + - ${1} + - ${5} + - -o ${2} + - ${4} + - -lgcov + - --coverage + - -flto +# :name: +# :optional: FALSE +# :test_assembler: +# :executable: +# :arguments: [] +# :name: +# :optional: FALSE +# :test_fixture: +# :executable: +# :arguments: [] +# :name: +# :optional: FALSE +# :test_includes_preprocessor: +# :executable: +# :arguments: [] +# :name: +# :optional: FALSE +# :test_file_preprocessor: +# :executable: +# :arguments: [] +# :name: +# :optional: FALSE +# :test_file_preprocessor_directives: +# :executable: +# :arguments: [] +# :name: +# :optional: FALSE +# :test_dependencies_generator: +# :executable: +# :arguments: [] +# :name: +# :optional: FALSE +# :release_compiler: +# :executable: +# :arguments: [] +# :name: +# :optional: FALSE +# :release_linker: +# :executable: +# :arguments: [] +# :name: +# :optional: FALSE +# :release_assembler: +# :executable: +# :arguments: [] +# :name: +# :optional: FALSE +# :release_dependencies_generator: +# :executable: +# :arguments: [] +# :name: +# :optional: FALSE diff --git a/conf/unit/project_win32.yml b/conf/unit/project_win32.yml index 52d7cc1a..34ebd824 100644 --- a/conf/unit/project_win32.yml +++ b/conf/unit/project_win32.yml @@ -1,97 +1,153 @@ -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= --- -############################################################################## -# Important: # -# Paths must be given as seen from the build variant root directory # -############################################################################## - +############################################################################### +# Note: # +# This file is based on the 'project.yml' file created by # +# 'ceedling new --local tmp', so that upgrading is as simple as possible # +# by creating the smallest possible diff. On the other hand this leads to # +# some configuration options that are just commented out, as they are not # +# needed. # +############################################################################### +# Important: # +# Paths must be given as seen from the build variant root directory # +############################################################################### :project: - :use_exceptions: TRUE - :use_test_preprocessor: TRUE + # how to use ceedling. If you're not sure, leave this as `gem` and `?` + :which_ceedling: ../../tools/vendor/ceedling + :ceedling_version: 1.0.0 + + # optional features. If you don't need them, keep them turned off for performance :use_mocks: TRUE + :use_exceptions: TRUE + :use_test_preprocessor: :all + :use_backtrace: :gdb :use_auxiliary_dependencies: TRUE + :use_decorators: :auto #Decorate Ceedling's output text. Your options are :auto, :all, or :none + + # tweak the way ceedling handles automatic tasks :build_root: . :test_file_prefix: test_ - :which_ceedling: ../../tools/vendor/ceedling - :ceedling_version: 0.32.0 :default_tasks: - test:all + + # performance options. If your tools start giving mysterious errors, consider + # dropping this to 1 to force single-tasking :test_threads: 8 :compile_threads: 8 -:environment: [] + # enable release build (more details in release_build section below) + :release_build: FALSE + +# Specify where to find mixins and any that should be enabled automatically +:mixins: + :enabled: [] + :load_paths: [] + +# further details to configure the way Ceedling handles test code +:test_build: + :use_assembly: FALSE + +# further details to configure the way Ceedling handles release code +#:release_build: +# :output: MyApp.out +# :use_assembly: FALSE +# :artifacts: [] + +# Plugins are optional Ceedling features which can be enabled. Ceedling supports +# a variety of plugins which may effect the way things are compiled, reported, +# or may provide new command options. Refer to the readme in each plugin for +# details on how to use it. +:plugins: + :load_paths: + - ../../tools/vendor/ceedling/plugins + :enabled: + #- beep # beeps when finished, so you don't waste time waiting for ceedling + - module_generator # handy for quickly creating source, header, and test templates + - gcov # test coverage using gcov. Requires gcc, gcov, and a coverage analyzer like gcovr + #- bullseye # test coverage using bullseye. Requires bullseye for your platform + #- command_hooks # write custom actions to be called at different points during the build process + #- compile_commands_json_db # generate a compile_commands.json file + #- dependencies # automatically fetch 3rd party libraries, etc. + #- subprojects # managing builds and test for static libraries + #- fake_function_framework # use FFF instead of CMock + + # Report options (You'll want to choose one stdout option, but may choose multiple stored options if desired) + #- report_build_warnings_log + #- report_tests_gtestlike_stdout + #- report_tests_ide_stdout + - report_tests_log_factory + - report_tests_pretty_stdout + - report_tests_raw_output_log + #- report_tests_teamcity_stdout +# Specify which reports you'd like from the log factory +:report_tests_log_factory: + :reports: + - json + - junit + - cppunit + - html + +# override the default extensions for your system and toolchain :extension: + #:header: .h + #:source: .c + #:assembly: .s + #:dependencies: .d + #:object: .o :executable: .out + #:testpass: .pass + #:testfail: .fail + #:subprojects: .a +# This is where Ceedling should look for your source and test files. +# see documentation for the many options for specifying this. :paths: :test: - - +:../../tests/unit/** - - -:../../tests/unit/support + - +:./../../tests/unit/** + # see tests/unit/app/driver/afe/adi/common/ades183x/README.md why this + # directory is excluded + - -:./../../tests/unit/app/driver/afe/adi/common/ades183x/** + - -:./../../tests/unit/support :source: - - ../../src/app/** - - ../../src/opt/** + - +:./../../src/app/** + - +:./../../src/opt/** :include: - +:./include/** - +:./../../src/os/freertos/include - +:./../../src/os/freertos/portable/ccs/arm_cortex-r5 - +:./../../src/app/main/include - +:./../../src/app/main/include/config - - +:./../../src/app/application/config + - +:./../../src/app/application/config # see marker 'CONFIG' - +:./../../src/app/engine/config - +:./../../src/app/engine/database - +:./../../src/app/driver/mcu - +:./../../src/app/task/os + # 'CONFIG': configuration of the battery system for the unit test build + # (see file battery_system_cfg_unit_test.h) + - +:./../../tests/unit/app/application/config :support: - - ../../tests/unit/support/** + - +:./../../tests/unit/support/** + :libraries: [] -:flags: - :test: - :compile: - :*: - - -std=c11 - - -Wextra - - -Wall - - -pedantic - - -include test_ignore_list.h - - -Werror +# You can even specify specific files to add or remove from your test +# and release collections. Usually it's better to use paths and let +# Ceedling do the work for you! +:files: + :test: [] + :source: [] +# Compilation symbols to be injected into builds +# See documentation for advanced options: +# - Test name matchers for different symbols per test executable build +# - Referencing symbols in multiple lists using advanced YAML +# - Specifiying symbols used during test preprocessing :defines: :test: &config-test-defines :*: &match-all-tests @@ -99,27 +155,78 @@ - FAS_ASSERT_LEVEL=2 - UNITY_INCLUDE_EXEC_TIME - FOXBMS_USES_FREERTOS=1 - :test_adi_ades1830*: + :/test_adi_ades1830.*/: + - FOXBMS_AFE_DRIVER_ADI=1u - FOXBMS_AFE_DRIVER_ADI_ADES1830=1u + - TEST_BS_NR_OF_CELL_BLOCKS_PER_MODULE=16u + :/test_debug_default.*/: + - FOXBMS_AFE_DRIVER_DEBUG=1u + :/test_debug_can.*/: + - TEST_BS_NR_OF_STRINGS=2u + - TEST_BS_NR_OF_MODULES_PER_STRING=4u + :/test_ltc_.*/: + - FOXBMS_AFE_DRIVER_LTC=1u + - TEST_BS_NR_OF_CELL_BLOCKS_PER_MODULE=18u + :/test_mxm.*/: + - FOXBMS_AFE_DRIVER_MAXIM=1u + - TEST_BS_NR_OF_CELL_BLOCKS_PER_MODULE=14u + :/test_nxp_.*/: + - FOXBMS_AFE_DRIVER_NXP=1u + - TEST_BS_NR_OF_CELL_BLOCKS_PER_MODULE=14u + :/test_ti_.*/: + - FOXBMS_AFE_DRIVER_TI=1u + - TEST_BS_NR_OF_CELL_BLOCKS_PER_MODULE=18u + :test_spi_adi.c: + - FOXBMS_AFE_DRIVER_ADI=1u + :test_spi_debug.c: + - FOXBMS_AFE_DRIVER_DEBUG=1u + :test_spi_ltc.c: + - FOXBMS_AFE_DRIVER_LTC=1u + :test_spi_mxm.c: + - FOXBMS_AFE_DRIVER_MAXIM=1u + :test_spi_nxp.c: + - FOXBMS_AFE_DRIVER_NXP=1u + :test_spi_ti.c: + - FOXBMS_AFE_DRIVER_TI=1u + :/test_can_cbs_tx_string.*/: + - TEST_BS_NR_OF_STRINGS=2u + :test_can_cbs_tx_pack-minimum-maximum-values.c: + - TEST_BS_NR_OF_STRINGS=2u + :test_can_cbs_tx_pack-state-estimation.c: + - TEST_BS_NR_OF_STRINGS=2u + :fstartup.c: + - uint32=uint32_t :preprocess: <<: *config-test-defines :*: - *match-all-tests - INC_FREERTOS_H +# :release: [] +# +# # Enable to inject name of a test as a unique compilation symbol into its respective executable build. +# :use_test_definition: FALSE +# Configure additional command line flags provided to tools used in each build step +:flags: + # :release: + # :compile: # Add '-Wall' and '--02' to compilation of all files in release target + # - -Wall + # - --O2 + :test: + :compile: + :*: + - -std=c11 + - -Wextra + - -Wall + - -pedantic + - -include test_ignore_list.h + - -Werror + :fstartup.c: + - -Wimplicit-fallthrough=4 + +# Configuration Options specific to CMock. See CMock docs for details :cmock: - :when_no_prototypes: :warn - :enforce_strict_ordering: TRUE - :mock_prefix: Mock - :weak: "" - :strippables: - [ - "(.FREERTOS_SYSTEM_CALL)", - "(.PRIVILEGED_FUNCTION)", - "(portDONT_DISCARD)", - "(?:TEST_LTC_DECLARE_GET\\s*\\(+.*?\\)+)", - "(?:TEST_LTC_DEFINE_GET\\s*\\(+.*?\\)+)", - ] + # Core conffiguration :includes: - "FreeRTOSConfig.h" - "FreeRTOS.h" @@ -132,60 +239,296 @@ - "stream_buffer.h" - "event_groups.h" - "string.h" - :plugins: + :plugins: # What plugins should be used by CMock? - :ignore - :callback - :ignore_arg - :return_thru_ptr - :treat_externs: :include - :treat_as: + :verbosity: 2 # the options being 0 errors only, 1 warnings and errors, 2 normal info, 3 verbose + :when_no_prototypes: :warn # the options being :ignore, :warn, or :erro + + # File configuration + :mock_path: "./mocks" # Subdirectory to store mocks when generated (default: mocks) + :skeleton_path: "" # Subdirectory to store stubs when generated (default: '') + :mock_prefix: "Mock" # Prefix to append to filenames for mocks + :mock_suffix: "" # Suffix to append to filenames for mocks + + # Parser configuration + :strippables: + [ + "(.FREERTOS_SYSTEM_CALL)", + "(.PRIVILEGED_FUNCTION)", + "(portDONT_DISCARD)", + "(?:TEST_LTC_DECLARE_GET\\s*\\(+.*?\\)+)", + "(?:TEST_LTC_DEFINE_GET\\s*\\(+.*?\\)+)", + ] + :attributes: + - __ramfunc + - __irq + - __fiq + - register + - extern + :c_calling_conventions: + - __stdcall + - __cdecl + - __fastcall + :treat_externs: :include # the options being :include or :exclude + :treat_inlines: :exclude # the options being :include or :exclude + + # Type handling configuration + #:unity_helper_path: '' # specify a string of where to find a unity_helper.h file to discover custom type assertions + :treat_as: # optionally add additional types to map custom types uint8: HEX8 uint16: HEX16 uint32: UINT32 int8: INT8 bool: UINT8 + #:treat_as_array: {} # hint to cmock that these types are pointers to something + #:treat_as_void: [] # hint to cmock that these types are actually aliases of void + :memcmp_if_unknown: true # allow cmock to use the memory comparison assertions for unknown types + :when_ptr: :compare_data # hint to cmock how to handle pointers in general, the options being :compare_ptr, :compare_data, or :smart -#:tools: -# Ceedling defaults to using gcc for compiling, linking, etc. -# As [:tools] is blank, gcc will be used (so long as it's in your system path) -# See documentation to configure a given toolchain for use + # Mock generation configuration + :weak: "" # Symbol to use to declare weak functions + :enforce_strict_ordering: true # Do we want cmock to enforce ordering of all function calls? + :fail_on_unexpected_calls: true # Do we want cmock to fail when it encounters a function call that wasn't expected? + :callback_include_count: true # Do we want cmock to include the number of calls to this callback, when using callbacks? + :callback_after_arg_check: false # Do we want cmock to enforce an argument check first when using a callback? + #:includes: [] # You can add additional includes here, or specify the location with the options below + #:includes_h_pre_orig_header: [] + #:includes_h_post_orig_header: [] + #:includes_c_pre_header: [] + #:includes_c_post_header: [] + #:array_size_type: [] # Specify a type or types that should be used for array lengths + #:array_size_name: 'size|len' # Specify a name or names that CMock might automatically recognize as the length of an array + :exclude_setjmp_h: false # Don't use setjmp when running CMock. Note that this might result in late reporting or out-of-order failures. + +# Configuration options specific to Unity. +#:unity: +# :defines: +# - UNITY_EXCLUDE_FLOAT + +# Configuration options specify to Unity's test runner generator +:test_runner: + :cmdline_args: true -:tools_test_linker: - :arguments: - - -lm - - -flto -:tools_gcov_linker: - :arguments: - - -lm - - -flto +# You can optionally have ceedling create environment variables for you before +# performing the rest of its tasks. +:environment: [] + +# LIBRARIES +# These libraries are automatically injected into the build process. Those specified as +# common will be used in all types of builds. Otherwise, libraries can be injected in just +# tests or releases. These options are MERGED with the options in supplemental yaml files. +:libraries: + :placement: :end + :flag: "-l${1}" + :path_flag: "-L ${1}" + :system: [m] # for example, you might list 'm' to grab the math library + :test: [] + :release: [] + +################################################################ +# PLUGIN CONFIGURATION +################################################################ + +# Add -gcov to the plugins list to make sure of the gcov plugin +# You will need to have gcov and gcovr both installed to make it work. +# For more information on these options, see docs in plugins/gcov :gcov: :utilities: - - gcovr - :reports: + - gcovr # Use gcovr to create the specified reports (default). + #- ReportGenerator # Use ReportGenerator to create the specified reports. + :reports: # Specify one or more reports to generate. + # Make an HTML summary report. + - HtmlBasic - HtmlDetailed - Text - Cobertura + # - SonarQube + # - JSON + # - HtmlInline + # - HtmlInlineAzure + # - HtmlInlineAzureDark + # - HtmlChart + # - MHtml + # - Badges + # - CsvSummary + # - Latex + # - LatexSummary + # - PngChart + # - TeamCitySummary + # - lcov + # - Xml + # - XmlSummary :gcovr: :report_root: "../../" - :report_exclude: ".*vendor.*|.*build.*|.*test.*|.*tests.*|.*lib.*|.*Test.*|.*src.hal.*|.*src.os.*" - :exclude_directories: ".*tests.*|.*src.os.*|.*build.*|.*src.app.driver.sbc.fs8x_driver." - :sort_percentage: true - :sort_uncovered: false - :html_medium_threshold: 60 - :html_high_threshold: 85 - :print_summary: true + :report_exclude: ".*vendor.*|.*/build.*|.*test.*|.*tests.*|.*lib.*|.*Test.*|.*src.hal.*|.*src.os.*" + :exclude_directories: ".*tests.*|.*src.os.*|.*/build.*|.*src.app.driver.sbc.fs8x_driver." + :sort_percentage: TRUE + :sort_uncovered: FALSE + :print_summary: TRUE :threads: 8 - :keep: false + :keep: FALSE + :html_artifact_filename: GcovCoverageResults.html + :html_title: foxBMS 2 Test Coverage Report + :html_medium_threshold: 75 + :html_high_threshold: 90 + :html_absolute_paths: FALSE + :html_encoding: UTF-8 + :merge_mode_function: merge-use-line-min +# :module_generator: +# :project_root: ./ +# :source_root: source/ +# :inc_root: includes/ +# :test_root: tests/ +# :naming: :snake #options: :bumpy, :camel, :caps, or :snake +# :includes: +# :tst: [] +# :src: [] +# :boilerplates: +# :src: "" +# :inc: "" +# :tst: "" -:junit_tests_report: - :artifact_filename: report_junit.xml +# :dependencies: +# :libraries: +# - :name: WolfSSL +# :source_path: third_party/wolfssl/source +# :build_path: third_party/wolfssl/build +# :artifact_path: third_party/wolfssl/install +# :fetch: +# :method: :zip +# :source: \\shared_drive\third_party_libs\wolfssl\wolfssl-4.2.0.zip +# :environment: +# - CFLAGS+=-DWOLFSSL_DTLS_ALLOW_FUTURE +# :build: +# - "autoreconf -i" +# - "./configure --enable-tls13 --enable-singlethreaded" +# - make +# - make install +# :artifacts: +# :static_libraries: +# - lib/wolfssl.a +# :dynamic_libraries: +# - lib/wolfssl.so +# :includes: +# - include/** -:plugins: - :load_paths: - - ../../tools/vendor/ceedling/plugins - :enabled: - - gcov - - stdout_pretty_tests_report - - module_generator - - xml_tests_report - - junit_tests_report +# :subprojects: +# :paths: +# - :name: libprojectA +# :source: +# - ./subprojectA/source +# :include: +# - ./subprojectA/include +# :build_root: ./subprojectA/build +# :defines: [] + +# :command_hooks: +# :pre_mock_preprocess: +# :post_mock_preprocess: +# :pre_test_preprocess: +# :post_test_preprocess: +# :pre_mock_generate: +# :post_mock_generate: +# :pre_runner_generate: +# :post_runner_generate: +# :pre_compile_execute: +# :post_compile_execute: +# :pre_link_execute: +# :post_link_execute: +# :pre_test_fixture_execute: +# :post_test_fixture_execute: +# :pre_test: +# :post_test: +# :pre_release: +# :post_release: +# :pre_build: +# :post_build: +# :post_error: + +################################################################ +# TOOLCHAIN CONFIGURATION +################################################################ + +#:tools: +# Ceedling defaults to using gcc for compiling, linking, etc. +# As [:tools] is blank, gcc will be used (so long as it's in your system path) +# See documentation to configure a given toolchain for use +:tools: + # :test_compiler: + # :executable: + # :arguments: [] + # :name: + # :optional: FALSE + :test_linker: + :executable: gcc + :arguments: + - ${1} + - ${5} + - -o ${2} + - ${4} + - -flto + :gcov_linker: + :executable: gcc + :arguments: + - ${1} + - ${5} + - -o ${2} + - ${4} + - -lgcov + - --coverage + - -flto +# :name: +# :optional: FALSE +# :test_assembler: +# :executable: +# :arguments: [] +# :name: +# :optional: FALSE +# :test_fixture: +# :executable: +# :arguments: [] +# :name: +# :optional: FALSE +# :test_includes_preprocessor: +# :executable: +# :arguments: [] +# :name: +# :optional: FALSE +# :test_file_preprocessor: +# :executable: +# :arguments: [] +# :name: +# :optional: FALSE +# :test_file_preprocessor_directives: +# :executable: +# :arguments: [] +# :name: +# :optional: FALSE +# :test_dependencies_generator: +# :executable: +# :arguments: [] +# :name: +# :optional: FALSE +# :release_compiler: +# :executable: +# :arguments: [] +# :name: +# :optional: FALSE +# :release_linker: +# :executable: +# :arguments: [] +# :name: +# :optional: FALSE +# :release_assembler: +# :executable: +# :arguments: [] +# :name: +# :optional: FALSE +# :release_dependencies_generator: +# :executable: +# :arguments: [] +# :name: +# :optional: FALSE diff --git a/conf/unit/vsc-settings.yml b/conf/unit/vsc-settings.yml index 45f999fe..81723e71 100644 --- a/conf/unit/vsc-settings.yml +++ b/conf/unit/vsc-settings.yml @@ -1,4 +1,4 @@ -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 00000000..fab35de3 --- /dev/null +++ b/docs/README.md @@ -0,0 +1,6 @@ +# `docs` Directory Description + +This directory contains the sources of the general documentation generate by +Sphinx.\ +It further contains the configuration for the API documentation generated by +Doxygen. diff --git a/docs/conf.py b/docs/conf.py old mode 100644 new mode 100755 index c1f374fa..45dda62f --- a/docs/conf.py +++ b/docs/conf.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -38,27 +37,25 @@ # - "This product includes parts of foxBMS®" # - "This product is derived from foxBMS®" +# pylint: skip-file + import os import sys import time -import sphinx_rtd_theme - -# pylint: skip-file +import sphinx_rtd_theme # noqa: F401 sys.path = [ os.path.abspath("."), - os.path.abspath("./../tools/gui"), os.path.abspath("./../tools/waf3-2.0.22-1241519b19b496207abef1f72bbf61c2/waflib"), os.path.abspath("./../tools/.waf3-2.0.22-1241519b19b496207abef1f72bbf61c2/waflib"), os.path.abspath("./../tools/waf-tools"), - os.path.abspath("./../tests/scripts/waf-tools/f_guidelines"), os.path.abspath("./../tests/scripts/waf-tools/f_hcg"), ] + sys.path project = "foxBMS 2" copyright = ( - "2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten " + "2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten " "Forschung e.V. All rights reserved. See license section for further " "information" ) @@ -71,8 +68,6 @@ "sphinx.ext.intersphinx", "sphinx.ext.napoleon", "sphinxcontrib.bibtex", - "sphinxcontrib.mermaid", - "sphinxcontrib.spelling", ] @@ -101,36 +96,9 @@ bibtex_bibfiles = ["references.bib"] bibtex_default_style = "alpha" -spelling_lang = "en_US" -tokenizer_lang = "en_US" -spelling_word_list_filename = ["spelling_wordlist.txt"] -spelling_ignore_pypi_package_names = False -spelling_ignore_wiki_words = True -spelling_show_suggestions = True -spelling_exclude_patterns = [ - "misc/bibliography.rst", - "general/team.rst", - "general/team-ad-sc.rst", - "general/team-dev.rst", - "general/team-former.rst", -] -# disable git contributor scanning in spelling module if no git repository -try: - import git - - try: - _ = git.Repo(".").git_dir - spelling_ignore_contributor_names = True - except git.exc.InvalidGitRepositoryError: - spelling_ignore_contributor_names = False -except ImportError: - spelling_ignore_contributor_names = False - autodoc_mock_imports = ["waflib"] - linkcheck_ignore = [ - r".*_static\/doxygen", "https://docs.foxbms.org", r"https:\/\/iisb-foxbms\.iisb\.fraunhofer\.de\/.*[\d|z]\/", # linkcheck can not handle the line highlighting diff --git a/docs/developer-manual/hardware-developer-manual.rst b/docs/developer-manual/hardware-developer-manual.rst index ac22090c..f058ac3d 100644 --- a/docs/developer-manual/hardware-developer-manual.rst +++ b/docs/developer-manual/hardware-developer-manual.rst @@ -70,18 +70,18 @@ This checklist should be used for reviewing a release. Basics: ^^^^^^^ -* Is a layer marker on the PCB? -* Is a white field for marking the assembled board on the PCB? -* Is the name of the component on the PCB? -* Is a release version on the board? Is the version corresponding to the +- Is a layer marker on the PCB? +- Is a white field for marking the assembled board on the PCB? +- Is the name of the component on the PCB? +- Is a release version on the board? Is the version corresponding to the parameter in the Altium project? -* Are fiducial markers on the board? -* Are mounting points specified in the board? +- Are fiducial markers on the board? +- Are mounting points specified in the board? BOM: ^^^^ -* Is everything on the BOM available? -* Is the correct distributor selected for each component? -* Are similar components grouped into one (e.g., reduce amount of different +- Is everything on the BOM available? +- Is the correct distributor selected for each component? +- Are similar components grouped into one (e.g., reduce amount of different footprints for capacitors with same value)? diff --git a/docs/developer-manual/public-release-process.rst b/docs/developer-manual/public-release-process.rst index cd78f4b1..17f001e6 100644 --- a/docs/developer-manual/public-release-process.rst +++ b/docs/developer-manual/public-release-process.rst @@ -28,10 +28,10 @@ The release is internally created by the ``The foxBMS ReleaseBot`` and these steps are automated. The git configuration of the ``The foxBMS ReleaseBot`` is -.. code-block:: console +.. code-block:: powershell - C:\release-bot\foxbms-2-publishing-mirror>git config user.name "The foxBMS ReleaseBot" - C:\release-bot\foxbms-2-publishing-mirror>git config user.mail "info@foxbms.org" + PS C:\release-bot\foxbms-2-publishing-mirror> git config user.name "The foxBMS ReleaseBot" + PS C:\release-bot\foxbms-2-publishing-mirror> git config user.mail "info@foxbms.org" For this documentation we assume that the version to be created and released is ``1.0.0``. @@ -42,136 +42,136 @@ Defining release status of repository #. Defining the version number of the release. #. Creation of a version bump branch ``bump-version`` - .. code-block:: console + .. code-block:: powershell - C:\release-bot\foxbms-2>git checkout -b bump-version + PS C:\release-bot\foxbms-2> git checkout -b bump-version #. Bump the version number in all relevant files and commit the changes to the new branch: - .. code-block:: console + .. code-block:: powershell - C:\release-bot\foxbms-2>tools\utils\cmd\run-python-script.bat tools\utils\update_version.py --from x.y.z --to 1.0.0 - C:\release-bot\foxbms-2>tools\utils\cmd\run-python-script.bat tools\utils\update_doxygen_header.py - C:\release-bot\foxbms-2>git add . - C:\release-bot\foxbms-2>git commit -m "bump version to v1.0.0" - C:\release-bot\foxbms-2>git tag -a v1.0.0-version-bump -m "bump version to v1.0.0" + PS C:\release-bot\foxbms-2> .\fox.ps1 run-script tools\utils\update_version.py --from x.y.z --to 1.0.0 + PS C:\release-bot\foxbms-2> .\fox.ps1 run-script tools\utils\update_doxygen_header.py + PS C:\release-bot\foxbms-2> git add . + PS C:\release-bot\foxbms-2> git commit -m "bump version to v1.0.0" + PS C:\release-bot\foxbms-2> git tag -a v1.0.0-version-bump -m "bump version to v1.0.0" #. Merge the branch back to ``master`` branch and remove the version bumping branch - .. code-block:: console + .. code-block:: powershell - C:\release-bot\foxbms-2>git checkout master - C:\release-bot\foxbms-2>git merge bump-version - C:\release-bot\foxbms-2>git branch -D bump-version + PS C:\release-bot\foxbms-2> git checkout master + PS C:\release-bot\foxbms-2> git merge bump-version + PS C:\release-bot\foxbms-2> git branch -D bump-version #. Tag the ``master`` branch with ``v1.0.0``: - .. code-block:: console + .. code-block:: powershell - C:\release-bot\foxbms-2>git tag -a v1.0.0 -m "v1.0.0" + PS C:\release-bot\foxbms-2> git tag -a v1.0.0 -m "v1.0.0" #. Make the ``master`` branch a development branch again (note the reverted order of ``from`` and ``to``: ``--from 1.0.0 --to x.y.z``): - .. code-block:: console + .. code-block:: powershell - C:\release-bot\foxbms-2>tools\utils\cmd\run-python-script.bat tools\utils\update_version.py --from 1.0.0 --to x.y.z + PS C:\release-bot\foxbms-2> .\fox.ps1 run-script tools\utils\update_version.py --from 1.0.0 --to x.y.z #. Push all this work: - .. code-block:: console + .. code-block:: powershell - C:\release-bot\foxbms-2>git push origin master --follow-tags + PS C:\release-bot\foxbms-2> git push origin master --follow-tags Creation of the release branch ++++++++++++++++++++++++++++++ #. Creation of the release branch at the created version tag ``v1.0.0``: - .. code-block:: console + .. code-block:: powershell - C:\release-bot\foxbms-2>git checkout v1.0.0 - C:\release-bot\foxbms-2>git checkout -b release-v1.0.0 + PS C:\release-bot\foxbms-2> git checkout v1.0.0 + PS C:\release-bot\foxbms-2> git checkout -b release-v1.0.0 #. Run script to remove confidential and non-releasable files and information. #. Commit all changes to the release branch ``release-v1.0.0`` and tag this commit as release: - .. code-block:: console + .. code-block:: powershell - C:\release-bot\foxbms-2>git add . - C:\release-bot\foxbms-2>git commit -m "branch for GitHub release version 1.0.0" - C:\release-bot\foxbms-2>git tag -a gh-1.0.0 -m "gh-1.0.0" + PS C:\release-bot\foxbms-2> git add . + PS C:\release-bot\foxbms-2> git commit -m "branch for GitHub release version 1.0.0" + PS C:\release-bot\foxbms-2> git tag -a gh-1.0.0 -m "gh-1.0.0" #. Make a clean build to make sure everything works as expected: - .. code-block:: console + .. code-block:: powershell - C:\release-bot\foxbms-2>waf configure - C:\release-bot\foxbms-2>waf build_all + PS C:\release-bot\foxbms-2> .\fox.ps1 waf configure + PS C:\release-bot\foxbms-2> .\fox.ps1 waf build_all #. Clean the repository from all generated files: - .. code-block:: console + .. code-block:: powershell - C:\release-bot\foxbms-2>git clean -xdf + PS C:\release-bot\foxbms-2> git clean -xdf Publication of the release branch +++++++++++++++++++++++++++++++++ #. Create release branch in the publishing mirror and check it out: - .. code-block:: console + .. code-block:: powershell - C:\release-bot\foxbms-2-publishing-mirror>git checkout -b gh-release-v1.0.0 - C:\release-bot\foxbms-2-publishing-mirror>git commit -m "update branch for GitHub release version 1.0.0" + PS C:\release-bot\foxbms-2-publishing-mirror> git checkout -b gh-release-v1.0.0 + PS C:\release-bot\foxbms-2-publishing-mirror> git commit -m "update branch for GitHub release version 1.0.0" #. Remove all files from the current checkout: - .. code-block:: console + .. code-block:: powershell - C:\release-bot\foxbms-2-publishing-mirror>git rm -r "*" + PS C:\release-bot\foxbms-2-publishing-mirror> git rm -r "*" #. Copy files from release branch in the internal repository to the release branch of the publishing repository and add them: - .. code-block:: console + .. code-block:: powershell - C:\release-bot\foxbms-2-publishing-mirror>xcopy C:\release-bot\foxbms-2 . /s /e - C:\release-bot\foxbms-2-publishing-mirror>git add . -f - C:\release-bot\foxbms-2-publishing-mirror>git commit -F docs\general\commit-msgs\release-v1.0.0.txt + PS C:\release-bot\foxbms-2-publishing-mirror> Copy-Item C:\release-bot\foxbms-2 -Destination . -Recurse + PS C:\release-bot\foxbms-2-publishing-mirror> git add . -f + PS C:\release-bot\foxbms-2-publishing-mirror> git commit -F docs\general\commit-msgs\release-v1.0.0.txt #. Create a dummy tag (annotated or not does not make a difference here) and make sure everything works as expected (no problems are expected to happen): - .. code-block:: console + .. code-block:: powershell - C:\release-bot\foxbms-2-publishing-mirror>git tag v1.0.0 - C:\release-bot\foxbms-2-publishing-mirror>waf configure - C:\release-bot\foxbms-2-publishing-mirror>waf build_all + PS C:\release-bot\foxbms-2-publishing-mirror> git tag v1.0.0 + PS C:\release-bot\foxbms-2-publishing-mirror> .\fox.ps1 waf configure + PS C:\release-bot\foxbms-2-publishing-mirror> .\fox.ps1 waf build_all #. Delete the temporary tag ``v1.0.0``: - .. code-block:: console + .. code-block:: powershell - C:\release-bot\foxbms-2-publishing-mirror>git checkout master - C:\release-bot\foxbms-2-publishing-mirror>git tag -d v1.0.0 + PS C:\release-bot\foxbms-2-publishing-mirror> git checkout master + PS C:\release-bot\foxbms-2-publishing-mirror> git tag -d v1.0.0 #. Merge the ``gh-release-v1.0.0`` branch to the ``master`` branch and create an annotated tag ``v1.0.0`` on ``master`` branch: - .. code-block:: console + .. code-block:: powershell - C:\release-bot\foxbms-2-publishing-mirror>git merge gh-release-v1.0.0 - C:\release-bot\foxbms-2-publishing-mirror>git branch -D gh-release-v1.0.0 + PS C:\release-bot\foxbms-2-publishing-mirror> git merge gh-release-v1.0.0 + PS C:\release-bot\foxbms-2-publishing-mirror> git branch -D gh-release-v1.0.0 #. Push to the publishing repository: - .. code-block:: console + .. code-block:: powershell - C:\release-bot\foxbms-2-publishing-mirror>git push origin master --follow-tags + PS C:\release-bot\foxbms-2-publishing-mirror> git push origin master --follow-tags #. The ``master`` branch of the publishing mirror is automatically synced to |foxbms_repository|. diff --git a/docs/developer-manual/software/software-development-process.dot b/docs/developer-manual/software/software-development-process.dot index ac3d7f63..bc460f92 100644 --- a/docs/developer-manual/software/software-development-process.dot +++ b/docs/developer-manual/software/software-development-process.dot @@ -1,4 +1,4 @@ -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause diff --git a/docs/developer-manual/style-guide/examples/c-004.c b/docs/developer-manual/style-guide/examples/c-004.c index c9e93be8..588ee7ce 100644 --- a/docs/developer-manual/style-guide/examples/c-004.c +++ b/docs/developer-manual/style-guide/examples/c-004.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,14 +43,13 @@ * @file c-004.c * @author foxBMS Team * @date 2021-06-04 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup GUIDELINES * @prefix NONE * * @brief Example code to show the application of the C coding guidelines * @details This code implements an example for C:004 - * */ /*========== Includes =======================================================*/ diff --git a/docs/developer-manual/style-guide/examples/c-005.c b/docs/developer-manual/style-guide/examples/c-005.c index a018c523..763c54dc 100644 --- a/docs/developer-manual/style-guide/examples/c-005.c +++ b/docs/developer-manual/style-guide/examples/c-005.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,14 +43,13 @@ * @file c-005.c * @author foxBMS Team * @date 2023-01-13 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup GUIDELINES * @prefix NONE * * @brief Example code to show the application of the C coding guidelines * @details This code implements an example for C:005 - * */ /*========== Includes =======================================================*/ diff --git a/docs/developer-manual/style-guide/examples/c-005.h b/docs/developer-manual/style-guide/examples/c-005.h index a3259e44..c4922f25 100644 --- a/docs/developer-manual/style-guide/examples/c-005.h +++ b/docs/developer-manual/style-guide/examples/c-005.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,14 +43,13 @@ * @file c-005.h * @author foxBMS Team * @date 2023-01-13 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup GUIDELINES * @prefix NONE * * @brief Example code to show the application of the C coding guidelines * @details This code implements an example for C:005 - * */ #ifndef FOXBMS__C_005_H_ diff --git a/docs/developer-manual/style-guide/examples/c-006-source.c b/docs/developer-manual/style-guide/examples/c-006-source.c index cde625e2..026d5715 100644 --- a/docs/developer-manual/style-guide/examples/c-006-source.c +++ b/docs/developer-manual/style-guide/examples/c-006-source.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,14 +43,13 @@ * @file c-006-source.c * @author foxBMS Team * @date 2021-06-04 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup GUIDELINES * @prefix NONE * * @brief Example code to show the application of the C coding guidelines * @details This code implements an example for C:006 - * */ /*========== Includes =======================================================*/ diff --git a/docs/developer-manual/style-guide/examples/c-006-source.h b/docs/developer-manual/style-guide/examples/c-006-source.h index ebcedf4a..724de9ae 100644 --- a/docs/developer-manual/style-guide/examples/c-006-source.h +++ b/docs/developer-manual/style-guide/examples/c-006-source.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,14 +43,13 @@ * @file c-006-source.h * @author foxBMS Team * @date 2021-06-04 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup GUIDELINES * @prefix NONE * * @brief Example code to show the application of the C coding guidelines * @details This code implements an example for C:006 - * */ #ifndef FOXBMS__C_006_SOURCE_H_ diff --git a/docs/developer-manual/style-guide/examples/c-006-test.c b/docs/developer-manual/style-guide/examples/c-006-test.c index 2e98c8c8..3396e9ac 100644 --- a/docs/developer-manual/style-guide/examples/c-006-test.c +++ b/docs/developer-manual/style-guide/examples/c-006-test.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,14 +43,13 @@ * @file c-006-test.c * @author foxBMS Team * @date 2021-06-04 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup GUIDELINES * @prefix NONE * * @brief Example code to show the application of the C coding guidelines * @details This code implements an example for C:006 - * */ #ifndef FOXBMS__C_006_TEST_C_H_ diff --git a/docs/developer-manual/style-guide/examples/c-006-test.h b/docs/developer-manual/style-guide/examples/c-006-test.h index ed049e9e..13fa8807 100644 --- a/docs/developer-manual/style-guide/examples/c-006-test.h +++ b/docs/developer-manual/style-guide/examples/c-006-test.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,14 +43,13 @@ * @file c-006-test.h * @author foxBMS Team * @date 2021-06-04 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup GUIDELINES * @prefix NONE * * @brief Example code to show the application of the C coding guidelines * @details This code implements an example for C:006 - * */ #ifndef FOXBMS__C_006_TEST_H_ diff --git a/docs/developer-manual/style-guide/examples/c-007_abc.c b/docs/developer-manual/style-guide/examples/c-007_abc.c index 50fb5428..a4aba2dc 100644 --- a/docs/developer-manual/style-guide/examples/c-007_abc.c +++ b/docs/developer-manual/style-guide/examples/c-007_abc.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,14 +43,13 @@ * @file c-007_abc.c * @author foxBMS Team * @date 2021-06-04 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup GUIDELINES * @prefix NONE * * @brief Example code to show the application of the C coding guidelines * @details This code implements an example for C:007 - * */ /*========== Includes =======================================================*/ diff --git a/docs/developer-manual/style-guide/examples/c-007_abc.h b/docs/developer-manual/style-guide/examples/c-007_abc.h index f046c92d..7cda70e8 100644 --- a/docs/developer-manual/style-guide/examples/c-007_abc.h +++ b/docs/developer-manual/style-guide/examples/c-007_abc.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,14 +43,13 @@ * @file c-007_abc.h * @author foxBMS Team * @date 2021-06-04 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup GUIDELINES * @prefix NONE * * @brief Example code to show the application of the C coding guidelines * @details This code implements an example for C:007 - * */ #ifndef FOXBMS__C_007_ABC_H_ diff --git a/docs/developer-manual/style-guide/examples/c-007_abc_cfg.c b/docs/developer-manual/style-guide/examples/c-007_abc_cfg.c index 996162c2..c4f40e3f 100644 --- a/docs/developer-manual/style-guide/examples/c-007_abc_cfg.c +++ b/docs/developer-manual/style-guide/examples/c-007_abc_cfg.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,14 +43,13 @@ * @file c-007_abc_cfg.c * @author foxBMS Team * @date 2021-06-04 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup GUIDELINES * @prefix NONE * * @brief Example code to show the application of the C coding guidelines * @details This code implements an example for C:007 - * */ /*========== Includes =======================================================*/ diff --git a/docs/developer-manual/style-guide/examples/c-007_abc_cfg.h b/docs/developer-manual/style-guide/examples/c-007_abc_cfg.h index 21f3d92c..95300090 100644 --- a/docs/developer-manual/style-guide/examples/c-007_abc_cfg.h +++ b/docs/developer-manual/style-guide/examples/c-007_abc_cfg.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,14 +43,13 @@ * @file c-007_abc_cfg.h * @author foxBMS Team * @date 2021-06-04 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup GUIDELINES * @prefix NONE * * @brief Example code to show the application of the C coding guidelines * @details This code implements an example for C:007 - * */ #ifndef FOXBMS__C_007_ABC_CFG_H_ diff --git a/docs/developer-manual/style-guide/examples/c-008.c b/docs/developer-manual/style-guide/examples/c-008.c index b7c3e58d..5ea2a165 100644 --- a/docs/developer-manual/style-guide/examples/c-008.c +++ b/docs/developer-manual/style-guide/examples/c-008.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,14 +43,13 @@ * @file c-008.c * @author foxBMS Team * @date 2021-06-04 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup GUIDELINES * @prefix NONE * * @brief Example code to show the application of the C coding guidelines * @details This code implements an example for C:008 - * */ /*========== Includes =======================================================*/ @@ -68,9 +67,7 @@ static uint32_t abc_staticVariable = 0; /*!< File static variable that is used w uint32_t abc_globalVariable; /*!< Important global variable that is used by multiple files/modules */ /*========== Static Function Prototypes =====================================*/ -/** - * @brief Function to do important stuff in this file/module. - */ +/** @brief Function to do important stuff in this file/module. */ static void ABC_StaticImportantFunction(void); /*========== Static Function Implementations ================================*/ @@ -79,8 +76,7 @@ static void ABC_StaticImportantFunction(void) { } /*========== Extern Function Implementations ================================*/ -extern void ABC_GlobalImportantFunction(void) { - /* some code */ +extern void ABC_GlobalImportantFunction(void) { /* some code */ } /*========== Externalized Static Function Implementations (Unit Test) =======*/ diff --git a/docs/developer-manual/style-guide/examples/c-008.h b/docs/developer-manual/style-guide/examples/c-008.h index 5c4a50c5..c8e4407b 100644 --- a/docs/developer-manual/style-guide/examples/c-008.h +++ b/docs/developer-manual/style-guide/examples/c-008.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,14 +43,13 @@ * @file c-008.h * @author foxBMS Team * @date 2021-06-04 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup GUIDELINES * @prefix NONE * * @brief Example code to show the application of the C coding guidelines * @details This code implements an example for C:008 - * */ #ifndef FOXBMS__C_008_H_ diff --git a/docs/developer-manual/style-guide/examples/c-009.c b/docs/developer-manual/style-guide/examples/c-009.c index 1012db32..42cb9aa7 100644 --- a/docs/developer-manual/style-guide/examples/c-009.c +++ b/docs/developer-manual/style-guide/examples/c-009.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,14 +43,13 @@ * @file c-009.c * @author foxBMS Team * @date 2021-06-04 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup GUIDELINES * @prefix NONE * * @brief Example code to show the application of the C coding guidelines * @details This code implements an example for C:009 - * */ /*========== Includes =======================================================*/ diff --git a/docs/developer-manual/style-guide/examples/c-011.c b/docs/developer-manual/style-guide/examples/c-011.c index bfe48472..765f45c0 100644 --- a/docs/developer-manual/style-guide/examples/c-011.c +++ b/docs/developer-manual/style-guide/examples/c-011.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,14 +43,13 @@ * @file c-011.c * @author foxBMS Team * @date 2021-06-04 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup GUIDELINES * @prefix NONE * * @brief Example code to show the application of the C coding guidelines * @details This code implements an example for C:011 - * */ /*========== Includes =======================================================*/ diff --git a/docs/developer-manual/style-guide/examples/c-011.h b/docs/developer-manual/style-guide/examples/c-011.h index 91a6eb0f..b7f5e960 100644 --- a/docs/developer-manual/style-guide/examples/c-011.h +++ b/docs/developer-manual/style-guide/examples/c-011.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,14 +43,13 @@ * @file c-011.h * @author foxBMS Team * @date 2021-06-04 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup GUIDELINES * @prefix NONE * * @brief Example code to show the application of the C coding guidelines * @details This code implements an example for C:011 - * */ #ifndef FOXBMS__C_011_H_ diff --git a/docs/developer-manual/style-guide/examples/c-012.c b/docs/developer-manual/style-guide/examples/c-012.c index f02f59d3..bebe2dad 100644 --- a/docs/developer-manual/style-guide/examples/c-012.c +++ b/docs/developer-manual/style-guide/examples/c-012.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,14 +43,13 @@ * @file c-012.c * @author foxBMS Team * @date 2021-06-04 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup GUIDELINES * @prefix NONE * * @brief Example code to show the application of the C coding guidelines * @details This code implements an example for C:012 - * */ /*========== Includes =======================================================*/ diff --git a/docs/developer-manual/style-guide/examples/c-013.c b/docs/developer-manual/style-guide/examples/c-013.c index 34e5ee5f..8fa136a0 100644 --- a/docs/developer-manual/style-guide/examples/c-013.c +++ b/docs/developer-manual/style-guide/examples/c-013.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,14 +43,13 @@ * @file c-013.c * @author foxBMS Team * @date 2021-06-04 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup GUIDELINES * @prefix NONE * * @brief Example code to show the application of the C coding guidelines * @details This code implements an example for C:013 - * */ /*========== Includes =======================================================*/ diff --git a/docs/developer-manual/style-guide/examples/c-013.h b/docs/developer-manual/style-guide/examples/c-013.h index 3825a653..abde80f1 100644 --- a/docs/developer-manual/style-guide/examples/c-013.h +++ b/docs/developer-manual/style-guide/examples/c-013.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,14 +43,13 @@ * @file c-013.h * @author foxBMS Team * @date 2023-01-13 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup GUIDELINES * @prefix NONE * * @brief Example code to show the application of the C coding guidelines * @details This code implements an example for C:013 - * */ #ifndef FOXBMS__C_013_H_ diff --git a/docs/developer-manual/style-guide/examples/c-015.c b/docs/developer-manual/style-guide/examples/c-015.c index 51871bf2..69b8a896 100644 --- a/docs/developer-manual/style-guide/examples/c-015.c +++ b/docs/developer-manual/style-guide/examples/c-015.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,14 +43,13 @@ * @file c-015.c * @author foxBMS Team * @date 2021-06-04 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup GUIDELINES * @prefix ABC * * @brief Example code to show the application of the C coding guidelines * @details This code implements an example for C:015 - * */ /*========== Includes =======================================================*/ diff --git a/docs/developer-manual/style-guide/examples/c-015.h b/docs/developer-manual/style-guide/examples/c-015.h index e768be2e..45623425 100644 --- a/docs/developer-manual/style-guide/examples/c-015.h +++ b/docs/developer-manual/style-guide/examples/c-015.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,29 +33,28 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ -#ifndef FOXBMS__C_015_H_ -#define FOXBMS__C_015_H_ - /** * @file c-015.h * @author foxBMS Team * @date 2021-06-04 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup GUIDELINES * @prefix ABC * * @brief Example code to show the application of the C coding guidelines * @details This code implements an example for C:015 - * */ +#ifndef FOXBMS__C_015_H_ +#define FOXBMS__C_015_H_ + /*========== Includes =======================================================*/ #include diff --git a/docs/developer-manual/style-guide/examples/c-016.c b/docs/developer-manual/style-guide/examples/c-016.c index 36a890bc..b904561b 100644 --- a/docs/developer-manual/style-guide/examples/c-016.c +++ b/docs/developer-manual/style-guide/examples/c-016.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,14 +43,13 @@ * @file c-016.c * @author foxBMS Team * @date 2021-06-04 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup GUIDELINES * @prefix ABC * * @brief Example code to show the application of the C coding guidelines * @details This code implements an example for C:016 - * */ /*========== Includes =======================================================*/ diff --git a/docs/developer-manual/style-guide/examples/c-017.c b/docs/developer-manual/style-guide/examples/c-017.c index 69a31bca..2159f00a 100644 --- a/docs/developer-manual/style-guide/examples/c-017.c +++ b/docs/developer-manual/style-guide/examples/c-017.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,14 +43,13 @@ * @file c-017.c * @author foxBMS Team * @date 2021-06-04 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup GUIDELINES * @prefix ABC * * @brief Example code to show the application of the C coding guidelines * @details This code implements an example for C:017 - * */ /*========== Includes =======================================================*/ diff --git a/docs/developer-manual/style-guide/examples/c-018.c b/docs/developer-manual/style-guide/examples/c-018.c index fa8f81e3..31c75c08 100644 --- a/docs/developer-manual/style-guide/examples/c-018.c +++ b/docs/developer-manual/style-guide/examples/c-018.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,14 +43,13 @@ * @file c-018.c * @author foxBMS Team * @date 2021-06-04 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup GUIDELINES * @prefix ABC * * @brief Example code to show the application of the C coding guidelines * @details This code implements an example for C:018 - * */ /*========== Includes =======================================================*/ diff --git a/docs/developer-manual/style-guide/examples/c-019.c b/docs/developer-manual/style-guide/examples/c-019.c index 7a88b566..80fe1af3 100644 --- a/docs/developer-manual/style-guide/examples/c-019.c +++ b/docs/developer-manual/style-guide/examples/c-019.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,14 +43,13 @@ * @file c-019.c * @author foxBMS Team * @date 2021-06-04 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup GUIDELINES * @prefix ABC * * @brief Example code to show the application of the C coding guidelines * @details This code implements an example for C:019 - * */ /*========== Includes =======================================================*/ @@ -94,7 +93,7 @@ uint8_t abc_myArrayD[4][3] = { {1}, /* row 0 initialized to {1, 0, 0} */ {0, 1}, /* row 1 initialized to {0, 1, 0} */ {[2] = 1}, /* row 2 initialized to {0, 0, 1} */ -}; /* row 3 initialized to {0, 0, 0} */ +}; /* row 3 initialized to {0, 0, 0} */ ABC_POINT_s abc_myPoint = {1.2, 1.3}; /* p.x=1.2, p.y=1.3, p.z=0.0 */ diff --git a/docs/developer-manual/style-guide/examples/c-020.c b/docs/developer-manual/style-guide/examples/c-020.c index 14b09f8f..a3ebbbaa 100644 --- a/docs/developer-manual/style-guide/examples/c-020.c +++ b/docs/developer-manual/style-guide/examples/c-020.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,14 +43,13 @@ * @file c-020.c * @author foxBMS Team * @date 2021-06-04 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup GUIDELINES * @prefix ABC * * @brief Example code to show the application of the C coding guidelines * @details This code implements an example for C:020 - * */ /*========== Includes =======================================================*/ diff --git a/docs/developer-manual/style-guide/examples/c-021.c b/docs/developer-manual/style-guide/examples/c-021.c index 3aeeb277..d11f47ed 100644 --- a/docs/developer-manual/style-guide/examples/c-021.c +++ b/docs/developer-manual/style-guide/examples/c-021.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,14 +43,13 @@ * @file c-021.c * @author foxBMS Team * @date 2021-06-04 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup GUIDELINES * @prefix ABC * * @brief Example code to show the application of the C coding guidelines * @details This code implements an example for C:021 - * */ /*========== Includes =======================================================*/ diff --git a/docs/developer-manual/style-guide/examples/c-022.c b/docs/developer-manual/style-guide/examples/c-022.c index de0aa2c4..91a9be74 100644 --- a/docs/developer-manual/style-guide/examples/c-022.c +++ b/docs/developer-manual/style-guide/examples/c-022.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,14 +43,13 @@ * @file c-022.c * @author foxBMS Team * @date 2021-06-04 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup GUIDELINES * @prefix ABC * * @brief Example code to show the application of the C coding guidelines * @details This code implements an example for C:022 - * */ /*========== Includes =======================================================*/ diff --git a/docs/developer-manual/style-guide/examples/c-023.c b/docs/developer-manual/style-guide/examples/c-023.c index 9fedd147..eb92fa47 100644 --- a/docs/developer-manual/style-guide/examples/c-023.c +++ b/docs/developer-manual/style-guide/examples/c-023.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,14 +43,13 @@ * @file c-023.c * @author foxBMS Team * @date 2021-06-04 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup GUIDELINES * @prefix ABC * * @brief Example code to show the application of the C coding guidelines * @details This code implements an example for C:023 - * */ /*========== Includes =======================================================*/ diff --git a/docs/developer-manual/style-guide/examples/c-024.c b/docs/developer-manual/style-guide/examples/c-024.c index 970d0304..2b8879ca 100644 --- a/docs/developer-manual/style-guide/examples/c-024.c +++ b/docs/developer-manual/style-guide/examples/c-024.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,14 +43,13 @@ * @file c-024.c * @author foxBMS Team * @date 2021-06-04 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup GUIDELINES * @prefix ABC * * @brief Example code to show the application of the C coding guidelines * @details This code implements an example for C:024 - * */ /*========== Includes =======================================================*/ diff --git a/docs/developer-manual/style-guide/examples/c-025.c b/docs/developer-manual/style-guide/examples/c-025.c index a09dcaa0..fbc6b309 100644 --- a/docs/developer-manual/style-guide/examples/c-025.c +++ b/docs/developer-manual/style-guide/examples/c-025.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,14 +43,13 @@ * @file c-025.c * @author foxBMS Team * @date 2021-06-04 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup GUIDELINES * @prefix ABC * * @brief Example code to show the application of the C coding guidelines * @details This code implements an example for C:025 - * */ /*========== Includes =======================================================*/ diff --git a/docs/developer-manual/style-guide/examples/c-026.c b/docs/developer-manual/style-guide/examples/c-026.c index d342530e..17728d96 100644 --- a/docs/developer-manual/style-guide/examples/c-026.c +++ b/docs/developer-manual/style-guide/examples/c-026.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,14 +43,13 @@ * @file c-026.c * @author foxBMS Team * @date 2021-06-04 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup GUIDELINES * @prefix ABC * * @brief Example code to show the application of the C coding guidelines * @details This code implements an example for C:026 - * */ /*========== Includes =======================================================*/ diff --git a/docs/developer-manual/style-guide/examples/c-027.c b/docs/developer-manual/style-guide/examples/c-027.c index d68de1d0..87bcd3bd 100644 --- a/docs/developer-manual/style-guide/examples/c-027.c +++ b/docs/developer-manual/style-guide/examples/c-027.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,14 +43,13 @@ * @file c-027.c * @author foxBMS Team * @date 2021-06-04 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup GUIDELINES * @prefix ABC * * @brief Example code to show the application of the C coding guidelines * @details This code implements an example for C:027 - * */ /*========== Includes =======================================================*/ @@ -87,9 +86,9 @@ extern void ABC_SwitchFunction(uint8_t var) { /* code */ break; - default: - FAS_ASSERT(FAS_TRAP); - break; /* LCOV_EXCL_LINE */ + default: /* LCOV_EXCL_LINE */ + FAS_ASSERT(FAS_TRAP); /* LCOV_EXCL_LINE */ + break; /* LCOV_EXCL_LINE */ } } diff --git a/docs/developer-manual/style-guide/examples/c-028-battery-defines.c b/docs/developer-manual/style-guide/examples/c-028-battery-defines.c index 7648548f..173a0b93 100644 --- a/docs/developer-manual/style-guide/examples/c-028-battery-defines.c +++ b/docs/developer-manual/style-guide/examples/c-028-battery-defines.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,14 +43,13 @@ * @file c-028-battery-defines.c * @author foxBMS Team * @date 2021-06-04 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup GUIDELINES * @prefix ABC * * @brief Example code to show the application of the C coding guidelines * @details This code implements an example for C:028 - * */ /*========== Includes =======================================================*/ diff --git a/docs/developer-manual/style-guide/examples/c-028.c b/docs/developer-manual/style-guide/examples/c-028.c index 22722992..7db99aed 100644 --- a/docs/developer-manual/style-guide/examples/c-028.c +++ b/docs/developer-manual/style-guide/examples/c-028.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,14 +43,13 @@ * @file c-028.c * @author foxBMS Team * @date 2021-06-04 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup GUIDELINES * @prefix ABC * * @brief Example code to show the application of the C coding guidelines * @details This code implements an example for C:028 - * */ /*========== Includes =======================================================*/ diff --git a/docs/developer-manual/style-guide/examples/python-006.py b/docs/developer-manual/style-guide/examples/python-006.py old mode 100644 new mode 100755 index 98c712ac..6246a3f8 --- a/docs/developer-manual/style-guide/examples/python-006.py +++ b/docs/developer-manual/style-guide/examples/python-006.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause diff --git a/docs/developer-manual/style-guide/examples/python-007.py b/docs/developer-manual/style-guide/examples/python-007.py old mode 100644 new mode 100755 index 713459d1..c053bf20 --- a/docs/developer-manual/style-guide/examples/python-007.py +++ b/docs/developer-manual/style-guide/examples/python-007.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -40,6 +39,7 @@ """Example for platform independent code""" +# ruff: noqa: F841 # pylint: disable=invalid-name,unused-argument,unused-variable import os diff --git a/docs/developer-manual/style-guide/examples/wscript b/docs/developer-manual/style-guide/examples/wscript old mode 100644 new mode 100755 index 12575752..3085f5d3 --- a/docs/developer-manual/style-guide/examples/wscript +++ b/docs/developer-manual/style-guide/examples/wscript @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause diff --git a/docs/developer-manual/style-guide/guidelines_c.rst b/docs/developer-manual/style-guide/guidelines_c.rst index 3ddad72b..ae43f0d7 100644 --- a/docs/developer-manual/style-guide/guidelines_c.rst +++ b/docs/developer-manual/style-guide/guidelines_c.rst @@ -9,16 +9,24 @@ C Coding Guidelines These coding guidelines **MUST** be applied to all ``C`` source and header files. -The source files **MUST** be successfully checked by running the Waf command -``check_guidelines`` before files can be merged into the master branch of the -repository. +The source files **MUST** be successfully checked by running the ``pre-commit`` +check before files can be merged into the master branch of the repository. Generally |foxbms| uses for the embedded code -`1TBS `_. +`1TBS `_. This is checked by ``clang-format``. -The ``clang-format`` configuration is found in ``./.clang-format``. +The ``clang-format`` configuration is found in the root of the repository in +``.clang-format``. +Directories that should not be automatically formatted must include a +``.clang-format`` file to disable automatic formatting: + +.. code-block:: yaml + + DisableFormat: true + SortIncludes: false + The ``C`` source and header files can be checked by running -``waf check_guidelines``. +``pre-commit``. Using VS Code files are automatically saved correctly (see :ref:`CREATING_A_WORKSPACE`) when ``clang-format`` is installed (see :ref:`software_prerequisites`) using :kbd:`Ctrl-S`. @@ -171,7 +179,7 @@ where the include guard would be ``FOXBMS__C_005_H_``. .. literalinclude:: ./examples/c-005.h :language: C - :lines: 56,57,71 + :lines: 55,56,70 :linenos: :emphasize-lines: 1,2,3 :caption: Include guard for ``c-005.h`` @@ -193,7 +201,7 @@ C Sections (``C:006``) .. literalinclude:: ./examples/c-006-source.h :language: C - :lines: 59-67 + :lines: 58-66 :linenos: :emphasize-lines: 1,3,5,7,9 :caption: section markers for ``c-006-source.h`` @@ -203,9 +211,9 @@ C Sections (``C:006``) .. literalinclude:: ./examples/c-006-source.c :language: C - :lines: 59-70 + :lines: 55-69 :linenos: - :emphasize-lines: 1,3,5,7,9,11 + :emphasize-lines: 1,3,5,7,9,11,13,15 :caption: section markers for ``c-006-source.c`` :name: c_section_source @@ -214,9 +222,9 @@ C Sections (``C:006``) .. literalinclude:: ./examples/c-006-test.h :language: C - :lines: 59-61 + :lines: 58-62 :linenos: - :emphasize-lines: 1,3 + :emphasize-lines: 1,3,5 :caption: section markers for ``./test/c-006-test.h`` :name: c_section_test_header @@ -225,9 +233,9 @@ C Sections (``C:006``) .. literalinclude:: ./examples/c-006-test.c :language: C - :lines: 59-65 + :lines: 58-66 :linenos: - :emphasize-lines: 1,3,5,7 + :emphasize-lines: 1,3,5,7,9 :caption: section markers for ``./test/c-006-test.c`` :name: c_section_test_source @@ -288,28 +296,28 @@ includes **MUST** be added. .. literalinclude:: ./examples/c-007_abc_cfg.h :language: C - :lines: 60,61 + :lines: 59,60 :linenos: :caption: Include order for ``c-007_abc_cfg.h`` :name: includes-c-007_abc_cfg-h .. literalinclude:: ./examples/c-007_abc_cfg.c :language: C - :lines: 57-60 + :lines: 56-59 :linenos: :caption: Include order for ``c-007_abc_cfg.c`` :name: includes-c-007_abc_cfg-c .. literalinclude:: ./examples/c-007_abc.h :language: C - :lines: 60-63 + :lines: 59-62 :linenos: :caption: Include order for ``c-007_abc.h`` :name: includes-c-007_abc-h .. literalinclude:: ./examples/c-007_abc.c :language: C - :lines: 57-64 + :lines: 56-63 :linenos: :caption: Include order for ``c-007_abc.c`` :name: includes-c-007_abc-c @@ -333,7 +341,7 @@ Scoping (``C:008``) .. literalinclude:: ./examples/c-008.c :language: C - :lines: 65,66,68,69,71-75,77-80,82-85 + :lines: 63-80 :linenos: :caption: Narrowest variable scope :name: narrowest-variable-scope @@ -357,7 +365,7 @@ Function names (``C:009``) .. literalinclude:: ./examples/c-009.c :language: C - :lines: 65-67,69-73 + :lines: 64-65,68-71 :linenos: :caption: Function names using the uppercase module prefix. :name: function-names @@ -412,14 +420,14 @@ in a header file ``c-011.h`` and source file ``c-011.c``. .. literalinclude:: ./examples/c-011.h :language: C - :lines: 67-75 + :lines: 66-73 :linenos: :caption: Global function declaration in ``c-011.h`` and its doxygen comment :name: function-prototype-and-doxygen .. literalinclude:: ./examples/c-011.c :language: C - :lines: 68-74, 82-86 + :lines: 67-84 :linenos: :caption: Static and global functions in ``c-011.c`` ant their doxygen comments @@ -441,7 +449,7 @@ the return statement. .. literalinclude:: ./examples/c-012.c :language: C - :lines: 71-74,76-84 + :lines: 70-73,75-82 :linenos: :emphasize-lines: 3,7-11 :caption: Correct usage of the ``return`` statement. @@ -488,9 +496,9 @@ function names are given in :numref:`function-call`. .. literalinclude:: ./examples/c-013.c :language: C - :lines: 79-85,88-95,97-100,101-121 + :lines: 78-83,87-93,96-98,100-120 :linenos: - :emphasize-lines: 3-5,10-12,27-31,35-37 + :emphasize-lines: 3-5,9-11,25-29,32-34 :caption: Correct formatting of function calls. :name: function-call @@ -545,7 +553,7 @@ Parameter checking is shown in :numref:`function-input-check`. .. literalinclude:: ./examples/c-015.c :language: C - :lines: 75-91 + :lines: 74-89 :linenos: :emphasize-lines: 2,3,4 :caption: Input check of function parameters @@ -578,7 +586,7 @@ Variable names (``C:016``) .. literalinclude:: ./examples/c-016.c :language: C - :lines: 63-65,67,68,70,71,73 + :lines: 62-63,66,73,74,78 :linenos: :caption: Different examples for correctly named variables and functions. @@ -597,7 +605,7 @@ Constant names (``C:017``) .. literalinclude:: ./examples/c-017.c :language: C - :lines: 63 + :lines: 62 :linenos: :caption: Correct examples for naming constant variables. @@ -631,7 +639,7 @@ Pointer rules (``C:018``) .. literalinclude:: ./examples/c-018.c :language: C - :lines: 61-66,68-70,72-75,80-86 + :lines: 61-65,68-70,73,74,80-85 :linenos: :caption: Correct usage of pointers. @@ -680,7 +688,7 @@ Variable initialization (``C:019``) .. literalinclude:: ./examples/c-019.c :language: C - :lines: 61-74,78-108 + :lines: 60-72,78-106 :linenos: :caption: Initialization examples for variables and complex types @@ -695,7 +703,7 @@ Hexadecimal values (``C:020``) .. literalinclude:: ./examples/c-020.c :language: C - :lines: 65,66 + :lines: 64,65 :linenos: :caption: Correct usage of hexadecimal digits. @@ -730,7 +738,7 @@ Floating-point values (``C:021``) .. literalinclude:: ./examples/c-021.c :language: C - :lines: 63-67 + :lines: 62-65 :linenos: :caption: Usage of floating-point literals. @@ -760,7 +768,7 @@ Example: .. literalinclude:: ./examples/c-022.c :language: C - :lines: 61-67 + :lines: 60-65 :linenos: :caption: Correct struct implementation. @@ -791,7 +799,7 @@ Enums (``C:023``) .. literalinclude:: ./examples/c-023.c :language: C - :lines: 61-69 + :lines: 60-67 :linenos: :caption: Correct enum implementation. @@ -808,7 +816,7 @@ Typedefs (``C:024``) .. literalinclude:: ./examples/c-024.c :language: C - :lines: 61-67,69,70,75-81,83-92 + :lines: 59,91 :linenos: :caption: Correct example for usage of typedefs. @@ -830,7 +838,7 @@ Macros (``C:025``) .. literalinclude:: ./examples/c-025.c :language: C - :lines: 59-62 + :lines: 58-61 :linenos: :caption: Correct naming examples of macros. @@ -853,7 +861,7 @@ Conditionals (``C:026``) .. literalinclude:: ./examples/c-026.c :language: C - :lines: 62-71,79-92 + :lines: 61-69,78-90 :linenos: :caption: Correct implementation of if-else statements. @@ -879,7 +887,7 @@ switch Statements (``C:027``) .. literalinclude:: ./examples/c-027.c :language: C - :lines: 70-95 + :lines: 69-93 :linenos: :caption: Correct implementation of switch-case statement. @@ -897,7 +905,7 @@ loop Statements (``C:028``) .. literalinclude:: ./examples/c-028.c :language: C - :lines: 71-82 + :lines: 70-80 :linenos: :caption: Correct usage of spaces and parentheses in loop statements. diff --git a/docs/developer-manual/style-guide/guidelines_general.rst b/docs/developer-manual/style-guide/guidelines_general.rst index d6e497a8..dadbb6d0 100644 --- a/docs/developer-manual/style-guide/guidelines_general.rst +++ b/docs/developer-manual/style-guide/guidelines_general.rst @@ -6,16 +6,6 @@ General Rules ============= -.. - Comments: - uFEFF is a Unicode zero-width no-break space character - -.. spelling:: - uFEFF - xEF - xBB - xBF - The following rules generally apply and follow the naming schema ``GENERAL:``. diff --git a/docs/developer-manual/style-guide/guidelines_overview.rst b/docs/developer-manual/style-guide/guidelines_overview.rst index 8ce9f2e0..844d4f87 100644 --- a/docs/developer-manual/style-guide/guidelines_overview.rst +++ b/docs/developer-manual/style-guide/guidelines_overview.rst @@ -40,11 +40,4 @@ Batch and Shell-Rules .. csv-table:: :delim: ; - :file: ./guidelines_overview_sh.csv - -YAML-Rules ----------- - -.. csv-table:: - :delim: ; - :file: ./guidelines_overview_yaml.csv + :file: ./guidelines_overview_shell_scripts.csv diff --git a/docs/developer-manual/style-guide/guidelines_overview_sh.csv b/docs/developer-manual/style-guide/guidelines_overview_sh.csv deleted file mode 100644 index 8561dbe7..00000000 --- a/docs/developer-manual/style-guide/guidelines_overview_sh.csv +++ /dev/null @@ -1,5 +0,0 @@ -Rule ; Link ; Automated Check -BATCH:001 ; :ref:`rule_batch_filenames` ; No -BATCH:002 ; :ref:`rule_batch_header` ; Yes -SHELL:001 ; :ref:`rule_shell_filenames` ; No -SHELL:002 ; :ref:`rule_shell_header` ; Yes diff --git a/docs/developer-manual/style-guide/guidelines_overview_shell_scripts.csv b/docs/developer-manual/style-guide/guidelines_overview_shell_scripts.csv new file mode 100644 index 00000000..39204167 --- /dev/null +++ b/docs/developer-manual/style-guide/guidelines_overview_shell_scripts.csv @@ -0,0 +1,7 @@ +Rule ; Link ; Automated Check +BATCH:001 ; :ref:`rule_batch_filenames` ; No +BATCH:002 ; :ref:`rule_batch_header` ; Yes +SHELL:001 ; :ref:`rule_shell_filenames` ; No +SHELL:002 ; :ref:`rule_shell_header` ; Yes +POWERSHELL:001 ; :ref:`rule_powershell_filenames` ; Yes +POWERSHELL:002 ; :ref:`rule_powershell_header` ; Yes diff --git a/docs/developer-manual/style-guide/guidelines_overview_yaml.csv b/docs/developer-manual/style-guide/guidelines_overview_yaml.csv deleted file mode 100644 index 2c3f9a88..00000000 --- a/docs/developer-manual/style-guide/guidelines_overview_yaml.csv +++ /dev/null @@ -1,3 +0,0 @@ -Rule ; Link | automated check -YAML:001 ; :ref:`rule_yaml_filenames` | No -YAML:002 ; :ref:`rule_yaml_header` | Yes diff --git a/docs/developer-manual/style-guide/guidelines_python.rst b/docs/developer-manual/style-guide/guidelines_python.rst index be28435c..793eb4ad 100644 --- a/docs/developer-manual/style-guide/guidelines_python.rst +++ b/docs/developer-manual/style-guide/guidelines_python.rst @@ -8,9 +8,9 @@ Python Coding Guidelines These coding guidelines **MUST** be applied to all ``Python`` files. -The source files **MUST** be successfully checked by running the Waf command -``check_guidelines`` before files can be merged into the master branch of the -repository. + +The source files **MUST** be successfully checked by running the ``pre-commit`` +check before files can be merged into the master branch of the repository. The following rules generally apply and follow the naming schema ``PYTHON:``. @@ -74,8 +74,8 @@ Uniform formatting makes code easier to read to all developers. .. admonition:: Python formatting rules - Python source files are checked for correct formatting by ``black``. The - ``black`` configuration can be found in ``conf/fmt/pyproject.toml``. + Python source files are checked for correct formatting by ``ruff``. + The ``ruff`` configuration can be found in ``pyproject.toml``. .. _rule_python_spa: @@ -116,7 +116,7 @@ platform specific code. ------------------------------------------- ``includes`` and ``source`` or might be less readable if they are split over -multiple lines (as ``black`` would format it like this on default). Therefore +multiple lines (as ``ruff`` would format it like this on default). Therefore ``includes`` and ``source`` might be written as follows, if it increases readability: @@ -127,9 +127,9 @@ readability: :caption: Format ``includes`` in ``wscript`` :name: format-includes-in-wscript -- ``# fmt: off`` disables black on formatting starting from that line and +- ``# fmt: off`` disables formatting starting from that line and ``# pylint: disable=line-too-long`` disables the pylint error message starting from that line. -- ``# fmt: on`` re-activates black on formatting starting from that line and +- ``# fmt: on`` re-activates on formatting starting from that line and ``# pylint: enable=line-too-long`` re-activates the pylint error message starting from that line. diff --git a/docs/developer-manual/style-guide/guidelines_batch_shell.rst b/docs/developer-manual/style-guide/guidelines_shell_scripts.rst similarity index 58% rename from docs/developer-manual/style-guide/guidelines_batch_shell.rst rename to docs/developer-manual/style-guide/guidelines_shell_scripts.rst index 3d7abce3..8b48b97d 100644 --- a/docs/developer-manual/style-guide/guidelines_batch_shell.rst +++ b/docs/developer-manual/style-guide/guidelines_shell_scripts.rst @@ -6,7 +6,8 @@ Batch and Shell Coding Guidelines ================================= -These coding guidelines **MUST** be applied to all batch/shell scripts. +These coding guidelines **MUST** be applied to all batch, pwsh and shell +scripts. .. _rules_batch: @@ -43,13 +44,55 @@ Header (``BATCH:002``) Batch scripts **MUST** start with the following header: - .. literalinclude:: ./../../../conf/tpl/batch.bat + .. literalinclude:: ./../../../conf/tpl/batch_script.bat :language: console :linenos: :lines: 1-37 :caption: File header for batch scripts. :name: file-header-batch +.. _rules_pwsh: + +PowerShell +---------- + +The following rules generally apply and follow the naming schema +``POWERSHELL:``. + +.. _rule_powershell_filenames: + +Filenames (``POWERSHELL:001``) +++++++++++++++++++++++++++++++ + +The following rules apply for filenames of PowerShell scripts. + +.. admonition:: PowerShell script filenames + + - The general file naming rules **MUST** be applied (see + :numref:`rule_general_filenames`). + - Shell scripts **MUST** use ``.ps1`` as file extension. + +For example the valid file names for shell scripts are + +- ``hello.ps1`` +- ``my-script.ps1`` + +.. _rule_powershell_header: + +Header (``POWERSHELL:002``) ++++++++++++++++++++++++++++ + +.. admonition:: PowerShell script header + + PowerShell scripts **MUST** start with the following header: + + .. literalinclude:: ./../../../conf/tpl/pwsh_script.ps1 + :language: console + :linenos: + :lines: 1-37 + :caption: File header for PowerShell scripts. + :name: file-header-powershell + .. _rules_shell: Shell @@ -85,7 +128,7 @@ Header (``SHELL:002``) Shell scripts **MUST** start with the following header: - .. literalinclude:: ./../../../conf/tpl/shell.sh + .. literalinclude:: ./../../../conf/tpl/shell_script.sh :language: console :linenos: :lines: 1-37 @@ -98,5 +141,6 @@ File Templates These file templates below show how these rules are correctly applied. They **SHOULD** be used as basis for new files. -- Batch script :download:`batch.bat <../../../conf/tpl/batch.bat>` -- Shell script :download:`shell.sh <../../../conf/tpl/shell.sh>` +- Batch script :download:`batch_script.bat <../../../conf/tpl/batch_script.bat>` +- Shell script :download:`pwsh_script.ps1 <../../../conf/tpl/pwsh_script.ps1>` +- Shell script :download:`shell_script.sh <../../../conf/tpl/shell_script.sh>` diff --git a/docs/developer-manual/style-guide/guidelines_yaml.rst b/docs/developer-manual/style-guide/guidelines_yaml.rst deleted file mode 100644 index 6b934f6b..00000000 --- a/docs/developer-manual/style-guide/guidelines_yaml.rst +++ /dev/null @@ -1,42 +0,0 @@ -.. include:: ./../../macros.txt -.. include:: ./../../units.txt - -.. _YAML_CODING_GUIDELINES: - -YAML Coding Guidelines -====================== - -These coding guidelines **MUST** be applied to all ``YAML`` files. - -The following rules generally apply and follow the naming schema -``YAML:``. - -.. _rule_yaml_filenames: - -Filenames (``YAML:001``) ------------------------- - -Additional to the general file naming rules the following **MUST** -be applied. - -.. admonition:: File name rules - - - The general file naming rules **MUST** be applied (see - :numref:`rule_general_filenames`). - - ``YAML`` files **MUST** use ``.yaml`` or ``.yml`` as file extension. - -.. _rule_yaml_header: - -Header (``YAML:002``) ---------------------- - -.. admonition:: YAML file header - - YAML source and header files **MUST** start with the following header: - - .. literalinclude:: ./../../../conf/tpl/yaml.yaml - :language: yaml - :linenos: - :lines: 1-35 - :caption: File header for ``YAML`` files. - :name: file-header-yaml diff --git a/docs/developer-manual/style-guide/state-machine-example/state-diagram-complete-simplified.dot b/docs/developer-manual/style-guide/state-machine-example/state-diagram-complete-simplified.dot index df6db6d4..17c2942e 100644 --- a/docs/developer-manual/style-guide/state-machine-example/state-diagram-complete-simplified.dot +++ b/docs/developer-manual/style-guide/state-machine-example/state-diagram-complete-simplified.dot @@ -1,4 +1,4 @@ -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause diff --git a/docs/developer-manual/style-guide/state-machine-example/state-diagram-complete.dot b/docs/developer-manual/style-guide/state-machine-example/state-diagram-complete.dot index af1a6a19..54bbda1e 100644 --- a/docs/developer-manual/style-guide/state-machine-example/state-diagram-complete.dot +++ b/docs/developer-manual/style-guide/state-machine-example/state-diagram-complete.dot @@ -1,4 +1,4 @@ -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause diff --git a/docs/developer-manual/style-guide/state-machine-example/state-diagram-recoverable-error.dot b/docs/developer-manual/style-guide/state-machine-example/state-diagram-recoverable-error.dot index dde03c62..e991e3e0 100644 --- a/docs/developer-manual/style-guide/state-machine-example/state-diagram-recoverable-error.dot +++ b/docs/developer-manual/style-guide/state-machine-example/state-diagram-recoverable-error.dot @@ -1,4 +1,4 @@ -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause diff --git a/docs/developer-manual/style-guide/state-machine-example/state-diagram-top-view.dot b/docs/developer-manual/style-guide/state-machine-example/state-diagram-top-view.dot index f7ad2cee..25b4b323 100644 --- a/docs/developer-manual/style-guide/state-machine-example/state-diagram-top-view.dot +++ b/docs/developer-manual/style-guide/state-machine-example/state-diagram-top-view.dot @@ -1,4 +1,4 @@ -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause diff --git a/docs/developer-manual/style-guide/state-machine-example/state-machine.c b/docs/developer-manual/style-guide/state-machine-example/state-machine.c index 751abc79..0e4849b1 100644 --- a/docs/developer-manual/style-guide/state-machine-example/state-machine.c +++ b/docs/developer-manual/style-guide/state-machine-example/state-machine.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file state-machine.c * @author foxBMS Team * @date 2020-10-29 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup STATE_MACHINE * @prefix EG * @@ -332,9 +332,9 @@ static EG_FSM_STATES_e EG_ProcessInitializationState(EG_STATE_s *pEgState) { } break; - default: - FAS_ASSERT(FAS_TRAP); - break; /* LCOV_EXCL_LINE */ + default: /* LCOV_EXCL_LINE */ + FAS_ASSERT(FAS_TRAP); /* LCOV_EXCL_LINE */ + break; /* LCOV_EXCL_LINE */ } return nextState; } diff --git a/docs/developer-manual/style-guide/state-machine-example/state-machine.h b/docs/developer-manual/style-guide/state-machine-example/state-machine.h index 3ef3149d..cc155627 100644 --- a/docs/developer-manual/style-guide/state-machine-example/state-machine.h +++ b/docs/developer-manual/style-guide/state-machine-example/state-machine.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file state-machine.h * @author foxBMS Team * @date 2020-10-29 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup STATE_MACHINE * @prefix EG * * @brief Header file of some software - * + * @details TODO */ #ifndef FOXBMS__STATE_MACHINE_H_ diff --git a/docs/developer-manual/style-guide/state-machine-example/wscript b/docs/developer-manual/style-guide/state-machine-example/wscript old mode 100644 new mode 100755 index 8b86d32e..ebd6425a --- a/docs/developer-manual/style-guide/state-machine-example/wscript +++ b/docs/developer-manual/style-guide/state-machine-example/wscript @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause diff --git a/docs/developer-manual/style-guide/state-machines_how-to.rst b/docs/developer-manual/style-guide/state-machines_how-to.rst index cd6e6bd3..0ee35586 100644 --- a/docs/developer-manual/style-guide/state-machines_how-to.rst +++ b/docs/developer-manual/style-guide/state-machines_how-to.rst @@ -722,9 +722,9 @@ The ``default`` case is implemented to assert on illegal substates: EG_FSM_STATES_e nextState = EG_FSM_STATE_INITIALIZATION; /* default behavior: stay in state */ switch (pEgState->currentSubstate) { /* ... */ - default: - FAS_ASSERT(FAS_TRAP); - break; /* LCOV_EXCL_LINE */ + default: /* LCOV_EXCL_LINE */ + FAS_ASSERT(FAS_TRAP); /* LCOV_EXCL_LINE */ + break; /* LCOV_EXCL_LINE */ } } @@ -795,9 +795,9 @@ implementation is shown below: } break; - default: - FAS_ASSERT(FAS_TRAP); - break; /* LCOV_EXCL_LINE */ + default: /* LCOV_EXCL_LINE */ + FAS_ASSERT(FAS_TRAP); /* LCOV_EXCL_LINE */ + break; /* LCOV_EXCL_LINE */ } return nextState; } diff --git a/docs/developer-manual/style-guide/style-guide.rst b/docs/developer-manual/style-guide/style-guide.rst index 063fad82..fc1d9514 100644 --- a/docs/developer-manual/style-guide/style-guide.rst +++ b/docs/developer-manual/style-guide/style-guide.rst @@ -22,6 +22,5 @@ guidelines. ./guidelines_c.rst ./guidelines_python.rst ./guidelines_rst.rst - ./guidelines_batch_shell.rst - ./guidelines_yaml.rst + ./guidelines_shell_scripts.rst ./guidelines_overview.rst diff --git a/docs/doxygen_src.conf.in b/docs/doxygen_src.conf.in index 1462a4d6..071f5292 100644 --- a/docs/doxygen_src.conf.in +++ b/docs/doxygen_src.conf.in @@ -1,4 +1,4 @@ -# Doxyfile 1.9.1 +# Doxyfile 1.11.0 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project. @@ -12,6 +12,16 @@ # For lists, items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (\" \"). +# +# Note: +# +# Use doxygen to compare the used configuration file with the template +# configuration file: +# doxygen -x [configFile] +# Use doxygen to compare the used configuration file with the template +# configuration file without replacing the environment variables or CMake type +# replacement variables: +# doxygen -x_noenv [configFile] #--------------------------------------------------------------------------- # Project related configuration options @@ -53,6 +63,12 @@ PROJECT_BRIEF = @PROJECT_BRIEF@ PROJECT_LOGO = @PROJECT_LOGO@ +# With the PROJECT_ICON tag one can specify an icon that is included in the tabs +# when the HTML document is shown. Doxygen will copy the logo to the output +# directory. + +PROJECT_ICON = + # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path # into which the generated documentation will be written. If a relative path is # entered, it will be relative to the location where doxygen was started. If @@ -60,16 +76,28 @@ PROJECT_LOGO = @PROJECT_LOGO@ OUTPUT_DIRECTORY = @OUTPUT_DIRECTORY@ -# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub- -# directories (in 2 levels) under the output directory of each output format and -# will distribute the generated files over these directories. Enabling this +# If the CREATE_SUBDIRS tag is set to YES then doxygen will create up to 4096 +# sub-directories (in 2 levels) under the output directory of each output format +# and will distribute the generated files over these directories. Enabling this # option can be useful when feeding doxygen a huge amount of source files, where # putting all generated files in the same directory would otherwise causes -# performance problems for the file system. +# performance problems for the file system. Adapt CREATE_SUBDIRS_LEVEL to +# control the number of sub-directories. # The default value is: NO. CREATE_SUBDIRS = NO +# Controls the number of sub-directories that will be created when +# CREATE_SUBDIRS tag is set to YES. Level 0 represents 16 directories, and every +# level increment doubles the number of directories, resulting in 4096 +# directories at level 8 which is the default and also the maximum value. The +# sub-directories are organized in 2 levels, the first level always has a fixed +# number of 16 directories. +# Minimum value: 0, maximum value: 8, default value: 8. +# This tag requires that the tag CREATE_SUBDIRS is set to YES. + +CREATE_SUBDIRS_LEVEL = 8 + # If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII # characters to appear in the names of generated files. If set to NO, non-ASCII # characters will be escaped, for example _xE3_x81_x84 will be used for Unicode @@ -81,26 +109,18 @@ ALLOW_UNICODE_NAMES = NO # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. -# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, -# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), -# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, -# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), -# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, -# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, -# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, -# Ukrainian and Vietnamese. +# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Bulgarian, +# Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch, English +# (United States), Esperanto, Farsi (Persian), Finnish, French, German, Greek, +# Hindi, Hungarian, Indonesian, Italian, Japanese, Japanese-en (Japanese with +# English messages), Korean, Korean-en (Korean with English messages), Latvian, +# Lithuanian, Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, +# Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, +# Swedish, Turkish, Ukrainian and Vietnamese. # The default value is: English. OUTPUT_LANGUAGE = English -# The OUTPUT_TEXT_DIRECTION tag is used to specify the direction in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all generated output in the proper direction. -# Possible values are: None, LTR, RTL and Context. -# The default value is: None. - -OUTPUT_TEXT_DIRECTION = None - # If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member # descriptions after the members that are listed in the file and class # documentation (similar to Javadoc). Set to NO to disable this. @@ -248,16 +268,16 @@ TAB_SIZE = 4 # the documentation. An alias has the form: # name=value # For example adding -# "sideeffect=@par Side Effects:\n" +# "sideeffect=@par Side Effects:^^" # will allow you to put the command \sideeffect (or @sideeffect) in the # documentation, which will result in a user-defined paragraph with heading -# "Side Effects:". You can put \n's in the value part of an alias to insert -# newlines (in the resulting output). You can put ^^ in the value part of an -# alias to insert a newline as if a physical newline was in the original file. -# When you need a literal { or } or , in the value part of an alias you have to -# escape them by means of a backslash (\), this can lead to conflicts with the -# commands \{ and \} for these it is advised to use the version @{ and @} or use -# a double escape (\\{ and \\}) +# "Side Effects:". Note that you cannot put \n's in the value part of an alias +# to insert newlines (in the resulting output). You can put ^^ in the value part +# of an alias to insert a newline as if a physical newline was in the original +# file. When you need a literal { or } or , in the value part of an alias you +# have to escape them by means of a backslash (\), this can lead to conflicts +# with the commands \{ and \} for these it is advised to use the version @{ and +# @} or use a double escape (\\{ and \\}) ALIASES = "prefix=\par Prefix ^^" \ "updated=\par Updated ^^" \ @@ -305,8 +325,8 @@ OPTIMIZE_OUTPUT_SLICE = NO # extension. Doxygen has a built-in mapping, but you can override or extend it # using this tag. The format is ext=language, where ext is a file extension, and # language is one of the parsers supported by doxygen: IDL, Java, JavaScript, -# Csharp (C#), C, C++, D, PHP, md (Markdown), Objective-C, Python, Slice, VHDL, -# Fortran (fixed format Fortran: FortranFixed, free formatted Fortran: +# Csharp (C#), C, C++, Lex, D, PHP, md (Markdown), Objective-C, Python, Slice, +# VHDL, Fortran (fixed format Fortran: FortranFixed, free formatted Fortran: # FortranFree, unknown formatted Fortran: Fortran. In the later case the parser # tries to guess whether the code is fixed or free formatted code, this is the # default for Fortran type files). For instance to make doxygen treat .inc files @@ -337,11 +357,22 @@ MARKDOWN_SUPPORT = YES # to that level are automatically included in the table of contents, even if # they do not have an id attribute. # Note: This feature currently applies only to Markdown headings. -# Minimum value: 0, maximum value: 99, default value: 5. +# Minimum value: 0, maximum value: 99, default value: 6. # This tag requires that the tag MARKDOWN_SUPPORT is set to YES. TOC_INCLUDE_HEADINGS = 5 +# The MARKDOWN_ID_STYLE tag can be used to specify the algorithm used to +# generate identifiers for the Markdown headings. Note: Every identifier is +# unique. +# Possible values are: DOXYGEN use a fixed 'autotoc_md' string followed by a +# sequence number starting at 0 and GITHUB use the lower case version of title +# with any whitespace replaced by '-' and punctuation characters removed. +# The default value is: DOXYGEN. +# This tag requires that the tag MARKDOWN_SUPPORT is set to YES. + +MARKDOWN_ID_STYLE = DOXYGEN + # When enabled doxygen tries to link words that correspond to documented # classes, or namespaces to their corresponding documentation. Such a link can # be prevented in individual cases by putting a % sign in front of the word or @@ -354,8 +385,8 @@ AUTOLINK_SUPPORT = YES # to include (a tag file for) the STL sources as input, then you should set this # tag to YES in order to let doxygen match functions declarations and # definitions whose arguments contain STL classes (e.g. func(std::string); -# versus func(std::string) {}). This also make the inheritance and collaboration -# diagrams that involve STL classes more complete and accurate. +# versus func(std::string) {}). This also makes the inheritance and +# collaboration diagrams that involve STL classes more complete and accurate. # The default value is: NO. BUILTIN_STL_SUPPORT = NO @@ -367,9 +398,9 @@ BUILTIN_STL_SUPPORT = NO CPP_CLI_SUPPORT = NO # Set the SIP_SUPPORT tag to YES if your project consists of sip (see: -# https://www.riverbankcomputing.com/software/sip/intro) sources only. Doxygen -# will parse them like normal C++ but will assume all classes use public instead -# of private inheritance when no explicit protection keyword is present. +# https://www.riverbankcomputing.com/software) sources only. Doxygen will parse +# them like normal C++ but will assume all classes use public instead of private +# inheritance when no explicit protection keyword is present. # The default value is: NO. SIP_SUPPORT = NO @@ -453,19 +484,27 @@ TYPEDEF_HIDES_STRUCT = NO LOOKUP_CACHE_SIZE = 0 -# The NUM_PROC_THREADS specifies the number threads doxygen is allowed to use +# The NUM_PROC_THREADS specifies the number of threads doxygen is allowed to use # during processing. When set to 0 doxygen will based this on the number of # cores available in the system. You can set it explicitly to a value larger # than 0 to get more control over the balance between CPU load and processing # speed. At this moment only the input processing can be done using multiple # threads. Since this is still an experimental feature the default is set to 1, -# which efficively disables parallel processing. Please report any issues you +# which effectively disables parallel processing. Please report any issues you # encounter. Generating dot graphs in parallel is controlled by the # DOT_NUM_THREADS setting. # Minimum value: 0, maximum value: 32, default value: 1. NUM_PROC_THREADS = 1 +# If the TIMESTAMP tag is set different from NO then each generated page will +# contain the date or date and time when the page was generated. Setting this to +# NO can help when comparing the output of multiple runs. +# Possible values are: YES, NO, DATETIME and DATE. +# The default value is: NO. + +TIMESTAMP = NO + #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- @@ -547,7 +586,8 @@ HIDE_UNDOC_MEMBERS = NO # If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. If set # to NO, these classes will be included in the various overviews. This option -# has no effect if EXTRACT_ALL is enabled. +# will also hide undocumented C++ concepts if enabled. This option has no effect +# if EXTRACT_ALL is enabled. # The default value is: NO. HIDE_UNDOC_CLASSES = NO @@ -578,14 +618,15 @@ INTERNAL_DOCS = NO # filesystem is case sensitive (i.e. it supports files in the same directory # whose names only differ in casing), the option must be set to YES to properly # deal with such files in case they appear in the input. For filesystems that -# are not case sensitive the option should be be set to NO to properly deal with +# are not case sensitive the option should be set to NO to properly deal with # output files written for symbols that only differ in casing, such as for two # classes, one named CLASS and the other named Class, and to also support # references to files without having to specify the exact matching casing. On # Windows (including Cygwin) and MacOS, users should typically set this option # to NO, whereas on Linux or other Unix flavors it should typically be set to # YES. -# The default value is: system dependent. +# Possible values are: SYSTEM, NO and YES. +# The default value is: SYSTEM. CASE_SENSE_NAMES = YES @@ -603,6 +644,12 @@ HIDE_SCOPE_NAMES = NO HIDE_COMPOUND_REFERENCE= NO +# If the SHOW_HEADERFILE tag is set to YES then the documentation for a class +# will show which file needs to be included to use the class. +# The default value is: YES. + +SHOW_HEADERFILE = YES + # If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of # the files that are included by a file in the documentation of that file. # The default value is: YES. @@ -760,7 +807,8 @@ FILE_VERSION_FILTER = # output files in an output format independent way. To create the layout file # that represents doxygen's defaults, run doxygen with the -l option. You can # optionally specify a file name after the option, if omitted DoxygenLayout.xml -# will be used as the name of the layout file. +# will be used as the name of the layout file. See also section "Changing the +# layout of pages" for information. # # Note that if you run doxygen from a directory containing a file called # DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE @@ -806,27 +854,50 @@ WARNINGS = YES WARN_IF_UNDOCUMENTED = YES # If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for -# potential errors in the documentation, such as not documenting some parameters -# in a documented function, or documenting parameters that don't exist or using -# markup commands wrongly. +# potential errors in the documentation, such as documenting some parameters in +# a documented function twice, or documenting parameters that don't exist or +# using markup commands wrongly. # The default value is: YES. WARN_IF_DOC_ERROR = YES +# If WARN_IF_INCOMPLETE_DOC is set to YES, doxygen will warn about incomplete +# function parameter documentation. If set to NO, doxygen will accept that some +# parameters have no documentation without warning. +# The default value is: YES. + +WARN_IF_INCOMPLETE_DOC = YES + # This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that # are documented, but have no documentation for their parameters or return -# value. If set to NO, doxygen will only warn about wrong or incomplete -# parameter documentation, but not about the absence of documentation. If -# EXTRACT_ALL is set to YES then this flag will automatically be disabled. +# value. If set to NO, doxygen will only warn about wrong parameter +# documentation, but not about the absence of documentation. If EXTRACT_ALL is +# set to YES then this flag will automatically be disabled. See also +# WARN_IF_INCOMPLETE_DOC # The default value is: NO. WARN_NO_PARAMDOC = NO +# If WARN_IF_UNDOC_ENUM_VAL option is set to YES, doxygen will warn about +# undocumented enumeration values. If set to NO, doxygen will accept +# undocumented enumeration values. If EXTRACT_ALL is set to YES then this flag +# will automatically be disabled. +# The default value is: NO. + +WARN_IF_UNDOC_ENUM_VAL = NO + # If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when # a warning is encountered. If the WARN_AS_ERROR tag is set to FAIL_ON_WARNINGS # then doxygen will continue running as if WARN_AS_ERROR tag is set to NO, but # at the end of the doxygen process doxygen will return with a non-zero status. -# Possible values are: NO, YES and FAIL_ON_WARNINGS. +# If the WARN_AS_ERROR tag is set to FAIL_ON_WARNINGS_PRINT then doxygen behaves +# like FAIL_ON_WARNINGS but in case no WARN_LOGFILE is defined doxygen will not +# write the warning messages in between other messages but write them at the end +# of a run, in case a WARN_LOGFILE is defined the warning messages will be +# besides being in the defined file also be shown at the end of a run, unless +# the WARN_LOGFILE is defined as - i.e. standard output (stdout) in that case +# the behavior will remain as with the setting FAIL_ON_WARNINGS. +# Possible values are: NO, YES, FAIL_ON_WARNINGS and FAIL_ON_WARNINGS_PRINT. # The default value is: NO. WARN_AS_ERROR = YES @@ -837,13 +908,27 @@ WARN_AS_ERROR = YES # and the warning text. Optionally the format may contain $version, which will # be replaced by the version of the file (if it could be obtained via # FILE_VERSION_FILTER) +# See also: WARN_LINE_FORMAT # The default value is: $file:$line: $text. WARN_FORMAT = "$file:$line: $text" +# In the $text part of the WARN_FORMAT command it is possible that a reference +# to a more specific place is given. To make it easier to jump to this place +# (outside of doxygen) the user can define a custom "cut" / "paste" string. +# Example: +# WARN_LINE_FORMAT = "'vi $file +$line'" +# See also: WARN_FORMAT +# The default value is: at line $line of file $file. + +WARN_LINE_FORMAT = "at line $line of file $file" + # The WARN_LOGFILE tag can be used to specify a file to which warning and error # messages should be written. If left blank the output is written to standard -# error (stderr). +# error (stderr). In case the file specified cannot be opened for writing the +# warning and error messages are written to standard error. When as file - is +# specified the warning and error messages are written to standard output +# (stdout). WARN_LOGFILE = @@ -864,10 +949,21 @@ INPUT = @INPUT@ # libiconv (or the iconv built into libc) for the transcoding. See the libiconv # documentation (see: # https://www.gnu.org/software/libiconv/) for the list of possible encodings. +# See also: INPUT_FILE_ENCODING # The default value is: UTF-8. INPUT_ENCODING = UTF-8 +# This tag can be used to specify the character encoding of the source files +# that doxygen parses The INPUT_FILE_ENCODING tag can be used to specify +# character encoding on a per file pattern basis. Doxygen will compare the file +# name with each pattern and apply the encoding instead of the default +# INPUT_ENCODING) if there is a match. The character encodings are a list of the +# form: pattern=encoding (like *.php=ISO-8859-1). +# See also: INPUT_ENCODING for further information on supported encodings. + +INPUT_FILE_ENCODING = + # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and # *.h) to filter out the source-files in the directories. @@ -879,12 +975,12 @@ INPUT_ENCODING = UTF-8 # Note the list of default checked file patterns might differ from the list of # default file extension mappings. # -# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp, -# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, -# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, -# *.m, *.markdown, *.md, *.mm, *.dox (to be provided as doxygen C comment), -# *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, *.f18, *.f, *.for, *.vhd, *.vhdl, -# *.ucf, *.qsf and *.ice. +# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cxxm, +# *.cpp, *.cppm, *.ccm, *.c++, *.c++m, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, +# *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, *.h++, *.ixx, *.l, *.cs, *.d, +# *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, *.md, *.mm, *.dox (to +# be provided as doxygen C comment), *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, +# *.f18, *.f, *.for, *.vhd, *.vhdl, *.ucf, *.qsf and *.ice. FILE_PATTERNS = *.c *.h @@ -923,10 +1019,7 @@ EXCLUDE_PATTERNS = # (namespaces, classes, functions, etc.) that should be excluded from the # output. The symbol name can be a fully qualified name, a word, or if the # wildcard * is used, a substring. Examples: ANamespace, AClass, -# AClass::ANamespace, ANamespace::*Test -# -# Note that the wildcards are matched against the file with absolute path, so to -# exclude all test directories use the pattern */test/* +# ANamespace::AClass, ANamespace::*Test EXCLUDE_SYMBOLS = @@ -971,6 +1064,11 @@ IMAGE_PATH = @IMAGE_PATH@ # code is scanned, but not when the output code is generated. If lines are added # or removed, the anchors will not be placed correctly. # +# Note that doxygen will use the data processed and written to standard output +# for further processing, therefore nothing else, like debug statements or used +# commands (so in case of a Windows batch file always use @echo OFF), should be +# written to standard output. +# # Note that for custom extensions or not directly supported extensions you also # need to set EXTENSION_MAPPING for the extension otherwise the files are not # properly processed by doxygen. @@ -1012,6 +1110,15 @@ FILTER_SOURCE_PATTERNS = USE_MDFILE_AS_MAINPAGE = +# The Fortran standard specifies that for fixed formatted Fortran code all +# characters from position 72 are to be considered as comment. A common +# extension is to allow longer lines before the automatic comment starts. The +# setting FORTRAN_COMMENT_AFTER will also make it possible that longer lines can +# be processed before the automatic comment starts. +# Minimum value: 7, maximum value: 10000, default value: 72. + +FORTRAN_COMMENT_AFTER = 72 + #--------------------------------------------------------------------------- # Configuration options related to source browsing #--------------------------------------------------------------------------- @@ -1026,7 +1133,8 @@ USE_MDFILE_AS_MAINPAGE = SOURCE_BROWSER = YES # Setting the INLINE_SOURCES tag to YES will include the body of functions, -# classes and enums directly into the documentation. +# multi-line macros, enums or list initialized variables directly into the +# documentation. # The default value is: NO. INLINE_SOURCES = NO @@ -1109,9 +1217,11 @@ VERBATIM_HEADERS = YES CLANG_ASSISTED_PARSING = NO -# If clang assisted parsing is enabled and the CLANG_ADD_INC_PATHS tag is set to -# YES then doxygen will add the directory of each input to the include path. +# If the CLANG_ASSISTED_PARSING tag is set to YES and the CLANG_ADD_INC_PATHS +# tag is set to YES then doxygen will add the directory of each input to the +# include path. # The default value is: YES. +# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. CLANG_ADD_INC_PATHS = YES @@ -1147,10 +1257,11 @@ CLANG_DATABASE_PATH = ALPHABETICAL_INDEX = YES -# In case all classes in a project start with a common prefix, all classes will -# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag -# can be used to specify a prefix (or a list of prefixes) that should be ignored -# while generating the index headers. +# The IGNORE_PREFIX tag can be used to specify a prefix (or a list of prefixes) +# that should be ignored while generating the index headers. The IGNORE_PREFIX +# tag works for classes, function and member names. The entity will be placed in +# the alphabetical list under the first letter of the entity name that remains +# after removing the prefix. # This tag requires that the tag ALPHABETICAL_INDEX is set to YES. IGNORE_PREFIX = @@ -1229,7 +1340,12 @@ HTML_STYLESHEET = @HTML_STYLESHEET@ # Doxygen will copy the style sheet files to the output directory. # Note: The order of the extra style sheet files is of importance (e.g. the last # style sheet in the list overrules the setting of the previous ones in the -# list). For an example see the documentation. +# list). +# Note: Since the styling of scrollbars can currently not be overruled in +# Webkit/Chromium, the styling will be left out of the default doxygen.css if +# one or more extra stylesheets have been specified. So if scrollbar +# customization is desired it has to be added explicitly. For an example see the +# documentation. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_EXTRA_STYLESHEET = @@ -1244,9 +1360,22 @@ HTML_EXTRA_STYLESHEET = HTML_EXTRA_FILES = @HTML_EXTRA_FILES@ +# The HTML_COLORSTYLE tag can be used to specify if the generated HTML output +# should be rendered with a dark or light theme. +# Possible values are: LIGHT always generates light mode output, DARK always +# generates dark mode output, AUTO_LIGHT automatically sets the mode according +# to the user preference, uses light mode if no preference is set (the default), +# AUTO_DARK automatically sets the mode according to the user preference, uses +# dark mode if no preference is set and TOGGLE allows a user to switch between +# light and dark mode via a button. +# The default value is: AUTO_LIGHT. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE = AUTO_LIGHT + # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen # will adjust the colors in the style sheet and background images according to -# this color. Hue is specified as an angle on a colorwheel, see +# this color. Hue is specified as an angle on a color-wheel, see # https://en.wikipedia.org/wiki/Hue for more information. For instance the value # 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 # purple, and 360 is red again. @@ -1256,7 +1385,7 @@ HTML_EXTRA_FILES = @HTML_EXTRA_FILES@ HTML_COLORSTYLE_HUE = 220 # The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors -# in the HTML output. For a value of 0 the output will use grayscales only. A +# in the HTML output. For a value of 0 the output will use gray-scales only. A # value of 255 will produce the most vivid colors. # Minimum value: 0, maximum value: 255, default value: 100. # This tag requires that the tag GENERATE_HTML is set to YES. @@ -1274,15 +1403,6 @@ HTML_COLORSTYLE_SAT = 100 HTML_COLORSTYLE_GAMMA = 80 -# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML -# page will contain the date and time when the page was generated. Setting this -# to YES can help to show when doxygen was last run and thus if the -# documentation is up to date. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_TIMESTAMP = NO - # If the HTML_DYNAMIC_MENUS tag is set to YES then the generated HTML # documentation will contain a main index with vertical navigation menus that # are dynamically created via JavaScript. If disabled, the navigation index will @@ -1302,6 +1422,33 @@ HTML_DYNAMIC_MENUS = YES HTML_DYNAMIC_SECTIONS = NO +# If the HTML_CODE_FOLDING tag is set to YES then classes and functions can be +# dynamically folded and expanded in the generated HTML source code. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_CODE_FOLDING = YES + +# If the HTML_COPY_CLIPBOARD tag is set to YES then doxygen will show an icon in +# the top right corner of code and text fragments that allows the user to copy +# its content to the clipboard. Note this only works if supported by the browser +# and the web page is served via a secure context (see: +# https://www.w3.org/TR/secure-contexts/), i.e. using the https: or file: +# protocol. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COPY_CLIPBOARD = YES + +# Doxygen stores a couple of settings persistently in the browser (via e.g. +# cookies). By default these settings apply to all HTML pages generated by +# doxygen across all projects. The HTML_PROJECT_COOKIE tag can be used to store +# the settings under a project specific key, such that the user preferences will +# be stored separately. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_PROJECT_COOKIE = + # With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries # shown in the various tree structured indices initially; the user can expand # and collapse entries dynamically later on. Doxygen will expand the tree to @@ -1338,6 +1485,13 @@ GENERATE_DOCSET = NO DOCSET_FEEDNAME = "Doxygen generated docs" +# This tag determines the URL of the docset feed. A documentation feed provides +# an umbrella under which multiple documentation sets from a single provider +# (such as a company or product suite) can be grouped. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_FEEDURL = + # This tag specifies a string that should uniquely identify the documentation # set bundle. This should be a reverse domain-name style string, e.g. # com.mycompany.MyDocSet. Doxygen will append .docset to the name. @@ -1363,8 +1517,12 @@ DOCSET_PUBLISHER_NAME = Publisher # If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three # additional HTML index files: index.hhp, index.hhc, and index.hhk. The # index.hhp is a project file that can be read by Microsoft's HTML Help Workshop -# (see: -# https://www.microsoft.com/en-us/download/details.aspx?id=21138) on Windows. +# on Windows. In the beginning of 2021 Microsoft took the original page, with +# a.o. the download links, offline the HTML help workshop was already many years +# in maintenance mode). You can download the HTML help workshop from the web +# archives at Installation executable (see: +# http://web.archive.org/web/20160201063255/http://download.microsoft.com/downlo +# ad/0/A/9/0A939EF6-E31C-430F-A3DF-DFAE7960D564/htmlhelp.exe). # # The HTML Help Workshop contains a compiler that can convert all HTML output # generated by doxygen into a single compiled HTML file (.chm). Compiled HTML @@ -1421,6 +1579,16 @@ BINARY_TOC = NO TOC_EXPAND = NO +# The SITEMAP_URL tag is used to specify the full URL of the place where the +# generated documentation will be placed on the server by the user during the +# deployment of the documentation. The generated sitemap is called sitemap.xml +# and placed on the directory specified by HTML_OUTPUT. In case no SITEMAP_URL +# is specified no sitemap is generated. For information about the sitemap +# protocol see https://www.sitemaps.org +# This tag requires that the tag GENERATE_HTML is set to YES. + +SITEMAP_URL = + # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and # QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that # can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help @@ -1523,16 +1691,28 @@ DISABLE_INDEX = NO # to work a browser that supports JavaScript, DHTML, CSS and frames is required # (i.e. any modern browser). Windows users are probably better off using the # HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can -# further fine-tune the look of the index. As an example, the default style -# sheet generated by doxygen has an example that shows how to put an image at -# the root of the tree instead of the PROJECT_NAME. Since the tree basically has -# the same information as the tab index, you could consider setting -# DISABLE_INDEX to YES when enabling this option. +# further fine tune the look of the index (see "Fine-tuning the output"). As an +# example, the default style sheet generated by doxygen has an example that +# shows how to put an image at the root of the tree instead of the PROJECT_NAME. +# Since the tree basically has the same information as the tab index, you could +# consider setting DISABLE_INDEX to YES when enabling this option. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_TREEVIEW = YES +# When both GENERATE_TREEVIEW and DISABLE_INDEX are set to YES, then the +# FULL_SIDEBAR option determines if the side bar is limited to only the treeview +# area (value NO) or if it should extend to the full height of the window (value +# YES). Setting this to YES gives a layout similar to +# https://docs.readthedocs.io with more room for contents, but less room for the +# project logo, title, and description. If either GENERATE_TREEVIEW or +# DISABLE_INDEX is set to NO, this option has no effect. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +FULL_SIDEBAR = NO + # The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that # doxygen will group on one line in the generated HTML documentation. # @@ -1557,6 +1737,13 @@ TREEVIEW_WIDTH = 250 EXT_LINKS_IN_WINDOW = NO +# If the OBFUSCATE_EMAILS tag is set to YES, doxygen will obfuscate email +# addresses. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +OBFUSCATE_EMAILS = YES + # If the HTML_FORMULA_FORMAT option is set to svg, doxygen will use the pdf2svg # tool (see https://github.com/dawbarton/pdf2svg) or inkscape (see # https://inkscape.org) to generate formulas as SVG images instead of PNGs for @@ -1577,17 +1764,6 @@ HTML_FORMULA_FORMAT = png FORMULA_FONTSIZE = 10 -# Use the FORMULA_TRANSPARENT tag to determine whether or not the images -# generated for formulas are transparent PNGs. Transparent PNGs are not -# supported properly for IE 6.0, but are supported on all modern browsers. -# -# Note that when changing this option you need to delete any form_*.png files in -# the HTML output directory before the changes have effect. -# The default value is: YES. -# This tag requires that the tag GENERATE_HTML is set to YES. - -FORMULA_TRANSPARENT = YES - # The FORMULA_MACROFILE can contain LaTeX \newcommand and \renewcommand commands # to create new LaTeX commands to be used in formulas as building blocks. See # the section "Including formulas" for details. @@ -1605,11 +1781,29 @@ FORMULA_MACROFILE = USE_MATHJAX = NO +# With MATHJAX_VERSION it is possible to specify the MathJax version to be used. +# Note that the different versions of MathJax have different requirements with +# regards to the different settings, so it is possible that also other MathJax +# settings have to be changed when switching between the different MathJax +# versions. +# Possible values are: MathJax_2 and MathJax_3. +# The default value is: MathJax_2. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_VERSION = MathJax_2 + # When MathJax is enabled you can set the default output format to be used for -# the MathJax output. See the MathJax site (see: -# http://docs.mathjax.org/en/v2.7-latest/output.html) for more details. +# the MathJax output. For more details about the output format see MathJax +# version 2 (see: +# http://docs.mathjax.org/en/v2.7-latest/output.html) and MathJax version 3 +# (see: +# http://docs.mathjax.org/en/latest/web/components/output.html). # Possible values are: HTML-CSS (which is slower, but has the best -# compatibility), NativeMML (i.e. MathML) and SVG. +# compatibility. This is the name for Mathjax version 2, for MathJax version 3 +# this will be translated into chtml), NativeMML (i.e. MathML. Only supported +# for MathJax 2. For MathJax version 3 chtml will be used instead.), chtml (This +# is the name for Mathjax version 3, for MathJax version 2 this will be +# translated into HTML-CSS) and SVG. # The default value is: HTML-CSS. # This tag requires that the tag USE_MATHJAX is set to YES. @@ -1622,15 +1816,21 @@ MATHJAX_FORMAT = HTML-CSS # MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax # Content Delivery Network so you can quickly see the result without installing # MathJax. However, it is strongly recommended to install a local copy of -# MathJax from https://www.mathjax.org before deployment. -# The default value is: https://cdn.jsdelivr.net/npm/mathjax@2. +# MathJax from https://www.mathjax.org before deployment. The default value is: +# - in case of MathJax version 2: https://cdn.jsdelivr.net/npm/mathjax@2 +# - in case of MathJax version 3: https://cdn.jsdelivr.net/npm/mathjax@3 # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest # The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax # extension names that should be enabled during MathJax rendering. For example +# for MathJax version 2 (see +# https://docs.mathjax.org/en/v2.7-latest/tex.html#tex-and-latex-extensions): # MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols +# For example for MathJax version 3 (see +# http://docs.mathjax.org/en/latest/input/tex/extensions/index.html): +# MATHJAX_EXTENSIONS = ams # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_EXTENSIONS = @@ -1810,29 +2010,31 @@ PAPER_TYPE = a4 EXTRA_PACKAGES = -# The LATEX_HEADER tag can be used to specify a personal LaTeX header for the -# generated LaTeX document. The header should contain everything until the first -# chapter. If it is left blank doxygen will generate a standard header. See -# section "Doxygen usage" for information on how to let doxygen write the -# default header to a separate file. +# The LATEX_HEADER tag can be used to specify a user-defined LaTeX header for +# the generated LaTeX document. The header should contain everything until the +# first chapter. If it is left blank doxygen will generate a standard header. It +# is highly recommended to start with a default header using +# doxygen -w latex new_header.tex new_footer.tex new_stylesheet.sty +# and then modify the file new_header.tex. See also section "Doxygen usage" for +# information on how to generate the default header that doxygen normally uses. # -# Note: Only use a user-defined header if you know what you are doing! The -# following commands have a special meaning inside the header: $title, -# $datetime, $date, $doxygenversion, $projectname, $projectnumber, -# $projectbrief, $projectlogo. Doxygen will replace $title with the empty -# string, for the replacement values of the other commands the user is referred -# to HTML_HEADER. +# Note: Only use a user-defined header if you know what you are doing! +# Note: The header is subject to change so you typically have to regenerate the +# default header when upgrading to a newer version of doxygen. The following +# commands have a special meaning inside the header (and footer): For a +# description of the possible markers and block names see the documentation. # This tag requires that the tag GENERATE_LATEX is set to YES. LATEX_HEADER = -# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the -# generated LaTeX document. The footer should contain everything after the last -# chapter. If it is left blank doxygen will generate a standard footer. See +# The LATEX_FOOTER tag can be used to specify a user-defined LaTeX footer for +# the generated LaTeX document. The footer should contain everything after the +# last chapter. If it is left blank doxygen will generate a standard footer. See # LATEX_HEADER for more information on how to generate a default footer and what -# special commands can be used inside the footer. -# -# Note: Only use a user-defined footer if you know what you are doing! +# special commands can be used inside the footer. See also section "Doxygen +# usage" for information on how to generate the default footer that doxygen +# normally uses. Note: Only use a user-defined footer if you know what you are +# doing! # This tag requires that the tag GENERATE_LATEX is set to YES. LATEX_FOOTER = @@ -1875,10 +2077,16 @@ PDF_HYPERLINKS = YES USE_PDFLATEX = YES -# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode -# command to the generated LaTeX files. This will instruct LaTeX to keep running -# if errors occur, instead of asking the user for help. This option is also used -# when generating formulas in HTML. +# The LATEX_BATCHMODE tag signals the behavior of LaTeX in case of an error. +# Possible values are: NO same as ERROR_STOP, YES same as BATCH, BATCH In batch +# mode nothing is printed on the terminal, errors are scrolled as if is +# hit at every error; missing files that TeX tries to input or request from +# keyboard input (\read on a not open input stream) cause the job to abort, +# NON_STOP In nonstop mode the diagnostic message will appear on the terminal, +# but there is no possibility of user interaction just like in batch mode, +# SCROLL In scroll mode, TeX will stop only for missing files to input or if +# keyboard input is necessary and ERROR_STOP In errorstop mode, TeX will stop at +# each error, asking for user intervention. # The default value is: NO. # This tag requires that the tag GENERATE_LATEX is set to YES. @@ -1891,16 +2099,6 @@ LATEX_BATCHMODE = NO LATEX_HIDE_INDICES = NO -# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source -# code with syntax highlighting in the LaTeX output. -# -# Note that which sources are shown also depends on other settings such as -# SOURCE_BROWSER. -# The default value is: NO. -# This tag requires that the tag GENERATE_LATEX is set to YES. - -LATEX_SOURCE_CODE = NO - # The LATEX_BIB_STYLE tag can be used to specify the style to use for the # bibliography, e.g. plainnat, or ieeetr. See # https://en.wikipedia.org/wiki/BibTeX and \cite for more info. @@ -1909,14 +2107,6 @@ LATEX_SOURCE_CODE = NO LATEX_BIB_STYLE = plain -# If the LATEX_TIMESTAMP tag is set to YES then the footer of each generated -# page will contain the date and time when the page was generated. Setting this -# to NO can help when comparing the output of multiple runs. -# The default value is: NO. -# This tag requires that the tag GENERATE_LATEX is set to YES. - -LATEX_TIMESTAMP = NO - # The LATEX_EMOJI_DIRECTORY tag is used to specify the (relative or absolute) # path from which the emoji images will be read. If a relative path is entered, # it will be relative to the LATEX_OUTPUT directory. If left blank the @@ -1981,15 +2171,13 @@ RTF_STYLESHEET_FILE = RTF_EXTENSIONS_FILE = -# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code -# with syntax highlighting in the RTF output. -# -# Note that which sources are shown also depends on other settings such as -# SOURCE_BROWSER. -# The default value is: NO. +# The RTF_EXTRA_FILES tag can be used to specify one or more extra images or +# other source files which should be copied to the RTF_OUTPUT output directory. +# Note that the files will be copied as-is; there are no commands or markers +# available. # This tag requires that the tag GENERATE_RTF is set to YES. -RTF_SOURCE_CODE = NO +RTF_EXTRA_FILES = #--------------------------------------------------------------------------- # Configuration options related to the man page output @@ -2087,27 +2275,44 @@ GENERATE_DOCBOOK = NO DOCBOOK_OUTPUT = docbook -# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the -# program listings (including syntax highlighting and cross-referencing -# information) to the DOCBOOK output. Note that enabling this will significantly -# increase the size of the DOCBOOK output. -# The default value is: NO. -# This tag requires that the tag GENERATE_DOCBOOK is set to YES. - -DOCBOOK_PROGRAMLISTING = NO - #--------------------------------------------------------------------------- # Configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- # If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an -# AutoGen Definitions (see http://autogen.sourceforge.net/) file that captures +# AutoGen Definitions (see https://autogen.sourceforge.net/) file that captures # the structure of the code including all documentation. Note that this feature # is still experimental and incomplete at the moment. # The default value is: NO. GENERATE_AUTOGEN_DEF = NO +#--------------------------------------------------------------------------- +# Configuration options related to Sqlite3 output +#--------------------------------------------------------------------------- + +# If the GENERATE_SQLITE3 tag is set to YES doxygen will generate a Sqlite3 +# database with symbols found by doxygen stored in tables. +# The default value is: NO. + +GENERATE_SQLITE3 = NO + +# The SQLITE3_OUTPUT tag is used to specify where the Sqlite3 database will be +# put. If a relative path is entered the value of OUTPUT_DIRECTORY will be put +# in front of it. +# The default directory is: sqlite3. +# This tag requires that the tag GENERATE_SQLITE3 is set to YES. + +SQLITE3_OUTPUT = sqlite3 + +# The SQLITE3_RECREATE_DB tag is set to YES, the existing doxygen_sqlite3.db +# database file will be recreated with each doxygen run. If set to NO, doxygen +# will warn if a database file is already found and not modify it. +# The default value is: YES. +# This tag requires that the tag GENERATE_SQLITE3 is set to YES. + +SQLITE3_RECREATE_DB = YES + #--------------------------------------------------------------------------- # Configuration options related to the Perl module output #--------------------------------------------------------------------------- @@ -2182,7 +2387,8 @@ SEARCH_INCLUDES = YES # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by the -# preprocessor. +# preprocessor. Note that the INCLUDE_PATH is not recursive, so the setting of +# RECURSIVE has no effect here. # This tag requires that the tag SEARCH_INCLUDES is set to YES. INCLUDE_PATH = @@ -2249,15 +2455,15 @@ TAGFILES = GENERATE_TAGFILE = -# If the ALLEXTERNALS tag is set to YES, all external class will be listed in -# the class index. If set to NO, only the inherited external classes will be -# listed. +# If the ALLEXTERNALS tag is set to YES, all external classes and namespaces +# will be listed in the class and namespace index. If set to NO, only the +# inherited external classes will be listed. # The default value is: NO. ALLEXTERNALS = NO # If the EXTERNAL_GROUPS tag is set to YES, all external groups will be listed -# in the modules index. If set to NO, only the current project's groups will be +# in the topic index. If set to NO, only the current project's groups will be # listed. # The default value is: YES. @@ -2271,25 +2477,9 @@ EXTERNAL_GROUPS = YES EXTERNAL_PAGES = YES #--------------------------------------------------------------------------- -# Configuration options related to the dot tool +# Configuration options related to diagram generator tools #--------------------------------------------------------------------------- -# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram -# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to -# NO turns the diagrams off. Note that this option also works with HAVE_DOT -# disabled, but it is recommended to install and use dot, since it yields more -# powerful graphs. -# The default value is: YES. - -CLASS_DIAGRAMS = YES - -# You can include diagrams made with dia in doxygen documentation. Doxygen will -# then run dia to produce the diagram and insert it in the documentation. The -# DIA_PATH tag allows you to specify the directory where the dia binary resides. -# If left empty dia is assumed to be found in the default search path. - -DIA_PATH = - # If set to YES the inheritance and collaboration graphs will hide inheritance # and usage relations if the target is undocumented or is not a class. # The default value is: YES. @@ -2298,7 +2488,7 @@ HIDE_UNDOC_RELATIONS = YES # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is # available from the path. This tool is part of Graphviz (see: -# http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent +# https://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent # Bell Labs. The other options in this section have no effect if this option is # set to NO # The default value is: NO. @@ -2315,49 +2505,77 @@ HAVE_DOT = YES DOT_NUM_THREADS = 0 -# When you want a differently looking font in the dot files that doxygen -# generates you can specify the font name using DOT_FONTNAME. You need to make -# sure dot is able to find the font, which can be done by putting it in a -# standard location or by setting the DOTFONTPATH environment variable or by -# setting DOT_FONTPATH to the directory containing the font. -# The default value is: Helvetica. +# DOT_COMMON_ATTR is common attributes for nodes, edges and labels of +# subgraphs. When you want a differently looking font in the dot files that +# doxygen generates you can specify fontname, fontcolor and fontsize attributes. +# For details please see Node, +# Edge and Graph Attributes specification You need to make sure dot is able +# to find the font, which can be done by putting it in a standard location or by +# setting the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the +# directory containing the font. Default graphviz fontsize is 14. +# The default value is: fontname=Helvetica,fontsize=10. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_COMMON_ATTR = "fontname=Helvetica,fontsize=10" + +# DOT_EDGE_ATTR is concatenated with DOT_COMMON_ATTR. For elegant style you can +# add 'arrowhead=open, arrowtail=open, arrowsize=0.5'. Complete documentation about +# arrows shapes. +# The default value is: labelfontname=Helvetica,labelfontsize=10. # This tag requires that the tag HAVE_DOT is set to YES. -DOT_FONTNAME = Helvetica +DOT_EDGE_ATTR = "labelfontname=Helvetica,labelfontsize=10" -# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of -# dot graphs. -# Minimum value: 4, maximum value: 24, default value: 10. +# DOT_NODE_ATTR is concatenated with DOT_COMMON_ATTR. For view without boxes +# around nodes set 'shape=plain' or 'shape=plaintext' Shapes specification +# The default value is: shape=box,height=0.2,width=0.4. # This tag requires that the tag HAVE_DOT is set to YES. -DOT_FONTSIZE = 10 +DOT_NODE_ATTR = "shape=box,height=0.2,width=0.4" -# By default doxygen will tell dot to use the default font as specified with -# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set -# the path where dot can find it using this tag. +# You can set the path where dot can find font specified with fontname in +# DOT_COMMON_ATTR and others dot attributes. # This tag requires that the tag HAVE_DOT is set to YES. DOT_FONTPATH = -# If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for -# each documented class showing the direct and indirect inheritance relations. -# Setting this tag to YES will force the CLASS_DIAGRAMS tag to NO. +# If the CLASS_GRAPH tag is set to YES or GRAPH or BUILTIN then doxygen will +# generate a graph for each documented class showing the direct and indirect +# inheritance relations. In case the CLASS_GRAPH tag is set to YES or GRAPH and +# HAVE_DOT is enabled as well, then dot will be used to draw the graph. In case +# the CLASS_GRAPH tag is set to YES and HAVE_DOT is disabled or if the +# CLASS_GRAPH tag is set to BUILTIN, then the built-in generator will be used. +# If the CLASS_GRAPH tag is set to TEXT the direct and indirect inheritance +# relations will be shown as texts / links. Explicit enabling an inheritance +# graph or choosing a different representation for an inheritance graph of a +# specific class, can be accomplished by means of the command \inheritancegraph. +# Disabling an inheritance graph can be accomplished by means of the command +# \hideinheritancegraph. +# Possible values are: NO, YES, TEXT, GRAPH and BUILTIN. # The default value is: YES. -# This tag requires that the tag HAVE_DOT is set to YES. CLASS_GRAPH = YES # If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a # graph for each documented class showing the direct and indirect implementation # dependencies (inheritance, containment, and class references variables) of the -# class with other documented classes. +# class with other documented classes. Explicit enabling a collaboration graph, +# when COLLABORATION_GRAPH is set to NO, can be accomplished by means of the +# command \collaborationgraph. Disabling a collaboration graph can be +# accomplished by means of the command \hidecollaborationgraph. # The default value is: YES. # This tag requires that the tag HAVE_DOT is set to YES. COLLABORATION_GRAPH = YES # If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for -# groups, showing the direct groups dependencies. +# groups, showing the direct groups dependencies. Explicit enabling a group +# dependency graph, when GROUP_GRAPHS is set to NO, can be accomplished by means +# of the command \groupgraph. Disabling a directory graph can be accomplished by +# means of the command \hidegroupgraph. See also the chapter Grouping in the +# manual. # The default value is: YES. # This tag requires that the tag HAVE_DOT is set to YES. @@ -2399,8 +2617,8 @@ DOT_UML_DETAILS = NO # The DOT_WRAP_THRESHOLD tag can be used to set the maximum number of characters # to display on a single line. If the actual line length exceeds this threshold -# significantly it will wrapped across multiple lines. Some heuristics are apply -# to avoid ugly line breaks. +# significantly it will be wrapped across multiple lines. Some heuristics are +# applied to avoid ugly line breaks. # Minimum value: 0, maximum value: 1000, default value: 17. # This tag requires that the tag HAVE_DOT is set to YES. @@ -2417,7 +2635,9 @@ TEMPLATE_RELATIONS = NO # If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to # YES then doxygen will generate a graph for each documented file showing the # direct and indirect include dependencies of the file with other documented -# files. +# files. Explicit enabling an include graph, when INCLUDE_GRAPH is is set to NO, +# can be accomplished by means of the command \includegraph. Disabling an +# include graph can be accomplished by means of the command \hideincludegraph. # The default value is: YES. # This tag requires that the tag HAVE_DOT is set to YES. @@ -2426,7 +2646,10 @@ INCLUDE_GRAPH = YES # If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are # set to YES then doxygen will generate a graph for each documented file showing # the direct and indirect include dependencies of the file with other documented -# files. +# files. Explicit enabling an included by graph, when INCLUDED_BY_GRAPH is set +# to NO, can be accomplished by means of the command \includedbygraph. Disabling +# an included by graph can be accomplished by means of the command +# \hideincludedbygraph. # The default value is: YES. # This tag requires that the tag HAVE_DOT is set to YES. @@ -2466,16 +2689,26 @@ GRAPHICAL_HIERARCHY = YES # If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the # dependencies a directory has on other directories in a graphical way. The # dependency relations are determined by the #include relations between the -# files in the directories. +# files in the directories. Explicit enabling a directory graph, when +# DIRECTORY_GRAPH is set to NO, can be accomplished by means of the command +# \directorygraph. Disabling a directory graph can be accomplished by means of +# the command \hidedirectorygraph. # The default value is: YES. # This tag requires that the tag HAVE_DOT is set to YES. DIRECTORY_GRAPH = YES +# The DIR_GRAPH_MAX_DEPTH tag can be used to limit the maximum number of levels +# of child directories generated in directory dependency graphs by dot. +# Minimum value: 1, maximum value: 25, default value: 1. +# This tag requires that the tag DIRECTORY_GRAPH is set to YES. + +DIR_GRAPH_MAX_DEPTH = 1 + # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # generated by dot. For an explanation of the image formats see the section # output formats in the documentation of the dot tool (Graphviz (see: -# http://www.graphviz.org/)). +# https://www.graphviz.org/)). # Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order # to make the SVG files visible in IE 9+ (other browsers do not have this # requirement). @@ -2503,7 +2736,7 @@ INTERACTIVE_SVG = NO # found. If left blank, it is assumed the dot tool can be found in the path. # This tag requires that the tag HAVE_DOT is set to YES. -DOT_PATH = +DOT_PATH = @DOT_PATH@ # The DOTFILE_DIRS tag can be used to specify one or more directories that # contain dot files that are included in the documentation (see the \dotfile @@ -2512,11 +2745,12 @@ DOT_PATH = DOTFILE_DIRS = -# The MSCFILE_DIRS tag can be used to specify one or more directories that -# contain msc files that are included in the documentation (see the \mscfile -# command). +# You can include diagrams made with dia in doxygen documentation. Doxygen will +# then run dia to produce the diagram and insert it in the documentation. The +# DIA_PATH tag allows you to specify the directory where the dia binary resides. +# If left empty dia is assumed to be found in the default search path. -MSCFILE_DIRS = +DIA_PATH = # The DIAFILE_DIRS tag can be used to specify one or more directories that # contain dia files that are included in the documentation (see the \diafile @@ -2525,10 +2759,10 @@ MSCFILE_DIRS = DIAFILE_DIRS = # When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the -# path where java can find the plantuml.jar file. If left blank, it is assumed -# PlantUML is not used or called during a preprocessing step. Doxygen will -# generate a warning when it encounters a \startuml command in this case and -# will not generate output for the diagram. +# path where java can find the plantuml.jar file or to the filename of jar file +# to be used. If left blank, it is assumed PlantUML is not used or called during +# a preprocessing step. Doxygen will generate a warning when it encounters a +# \startuml command in this case and will not generate output for the diagram. PLANTUML_JAR_PATH = @@ -2545,7 +2779,7 @@ PLANTUML_INCLUDE_PATH = # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes # that will be shown in the graph. If the number of nodes in a graph becomes # larger than this value, doxygen will truncate the graph, which is visualized -# by representing a node as a red box. Note that doxygen if the number of direct +# by representing a node as a red box. Note that if the number of direct # children of the root node in a graph is already larger than # DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that # the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. @@ -2566,18 +2800,6 @@ DOT_GRAPH_MAX_NODES = 200 MAX_DOT_GRAPH_DEPTH = 0 -# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent -# background. This is disabled by default, because dot on Windows does not seem -# to support this out of the box. -# -# Warning: Depending on the platform used, enabling this option may lead to -# badly anti-aliased labels on the edges of a graph (i.e. they become hard to -# read). -# The default value is: NO. -# This tag requires that the tag HAVE_DOT is set to YES. - -DOT_TRANSPARENT = NO - # Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output # files in one run (i.e. multiple -o and -T options on the command line). This # makes dot run faster, but since only newer versions of dot (>1.8.10) support @@ -2590,6 +2812,8 @@ DOT_MULTI_TARGETS = YES # If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page # explaining the meaning of the various boxes and arrows in the dot generated # graphs. +# Note: This tag requires that UML_LOOK isn't set, i.e. the doxygen internal +# graphical representation for inheritance and collaboration diagrams is used. # The default value is: YES. # This tag requires that the tag HAVE_DOT is set to YES. @@ -2598,8 +2822,24 @@ GENERATE_LEGEND = YES # If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate # files that are used to generate the various graphs. # -# Note: This setting is not only used for dot files but also for msc and -# plantuml temporary files. +# Note: This setting is not only used for dot files but also for msc temporary +# files. # The default value is: YES. DOT_CLEANUP = YES + +# You can define message sequence charts within doxygen comments using the \msc +# command. If the MSCGEN_TOOL tag is left empty (the default), then doxygen will +# use a built-in version of mscgen tool to produce the charts. Alternatively, +# the MSCGEN_TOOL tag can also specify the name an external tool. For instance, +# specifying prog as the value, doxygen will call the tool as prog -T +# -o . The external tool should support +# output file formats "png", "eps", "svg", and "ismap". + +MSCGEN_TOOL = + +# The MSCFILE_DIRS tag can be used to specify one or more directories that +# contain msc files that are included in the documentation (see the \mscfile +# command). + +MSCFILE_DIRS = diff --git a/docs/doxygen_tests.conf.in b/docs/doxygen_tests.conf.in index de78622c..9d3bd17d 100644 --- a/docs/doxygen_tests.conf.in +++ b/docs/doxygen_tests.conf.in @@ -1,4 +1,4 @@ -# Doxyfile 1.9.1 +# Doxyfile 1.11.0 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project. @@ -12,6 +12,16 @@ # For lists, items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (\" \"). +# +# Note: +# +# Use doxygen to compare the used configuration file with the template +# configuration file: +# doxygen -x [configFile] +# Use doxygen to compare the used configuration file with the template +# configuration file without replacing the environment variables or CMake type +# replacement variables: +# doxygen -x_noenv [configFile] #--------------------------------------------------------------------------- # Project related configuration options @@ -53,6 +63,12 @@ PROJECT_BRIEF = @PROJECT_BRIEF@ PROJECT_LOGO = @PROJECT_LOGO@ +# With the PROJECT_ICON tag one can specify an icon that is included in the tabs +# when the HTML document is shown. Doxygen will copy the logo to the output +# directory. + +PROJECT_ICON = + # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path # into which the generated documentation will be written. If a relative path is # entered, it will be relative to the location where doxygen was started. If @@ -60,16 +76,28 @@ PROJECT_LOGO = @PROJECT_LOGO@ OUTPUT_DIRECTORY = @OUTPUT_DIRECTORY@ -# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub- -# directories (in 2 levels) under the output directory of each output format and -# will distribute the generated files over these directories. Enabling this +# If the CREATE_SUBDIRS tag is set to YES then doxygen will create up to 4096 +# sub-directories (in 2 levels) under the output directory of each output format +# and will distribute the generated files over these directories. Enabling this # option can be useful when feeding doxygen a huge amount of source files, where # putting all generated files in the same directory would otherwise causes -# performance problems for the file system. +# performance problems for the file system. Adapt CREATE_SUBDIRS_LEVEL to +# control the number of sub-directories. # The default value is: NO. CREATE_SUBDIRS = NO +# Controls the number of sub-directories that will be created when +# CREATE_SUBDIRS tag is set to YES. Level 0 represents 16 directories, and every +# level increment doubles the number of directories, resulting in 4096 +# directories at level 8 which is the default and also the maximum value. The +# sub-directories are organized in 2 levels, the first level always has a fixed +# number of 16 directories. +# Minimum value: 0, maximum value: 8, default value: 8. +# This tag requires that the tag CREATE_SUBDIRS is set to YES. + +CREATE_SUBDIRS_LEVEL = 8 + # If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII # characters to appear in the names of generated files. If set to NO, non-ASCII # characters will be escaped, for example _xE3_x81_x84 will be used for Unicode @@ -81,26 +109,18 @@ ALLOW_UNICODE_NAMES = NO # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. -# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, -# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), -# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, -# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), -# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, -# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, -# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, -# Ukrainian and Vietnamese. +# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Bulgarian, +# Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch, English +# (United States), Esperanto, Farsi (Persian), Finnish, French, German, Greek, +# Hindi, Hungarian, Indonesian, Italian, Japanese, Japanese-en (Japanese with +# English messages), Korean, Korean-en (Korean with English messages), Latvian, +# Lithuanian, Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, +# Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, +# Swedish, Turkish, Ukrainian and Vietnamese. # The default value is: English. OUTPUT_LANGUAGE = English -# The OUTPUT_TEXT_DIRECTION tag is used to specify the direction in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all generated output in the proper direction. -# Possible values are: None, LTR, RTL and Context. -# The default value is: None. - -OUTPUT_TEXT_DIRECTION = None - # If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member # descriptions after the members that are listed in the file and class # documentation (similar to Javadoc). Set to NO to disable this. @@ -248,16 +268,16 @@ TAB_SIZE = 4 # the documentation. An alias has the form: # name=value # For example adding -# "sideeffect=@par Side Effects:\n" +# "sideeffect=@par Side Effects:^^" # will allow you to put the command \sideeffect (or @sideeffect) in the # documentation, which will result in a user-defined paragraph with heading -# "Side Effects:". You can put \n's in the value part of an alias to insert -# newlines (in the resulting output). You can put ^^ in the value part of an -# alias to insert a newline as if a physical newline was in the original file. -# When you need a literal { or } or , in the value part of an alias you have to -# escape them by means of a backslash (\), this can lead to conflicts with the -# commands \{ and \} for these it is advised to use the version @{ and @} or use -# a double escape (\\{ and \\}) +# "Side Effects:". Note that you cannot put \n's in the value part of an alias +# to insert newlines (in the resulting output). You can put ^^ in the value part +# of an alias to insert a newline as if a physical newline was in the original +# file. When you need a literal { or } or , in the value part of an alias you +# have to escape them by means of a backslash (\), this can lead to conflicts +# with the commands \{ and \} for these it is advised to use the version @{ and +# @} or use a double escape (\\{ and \\}) ALIASES = "prefix=\par Prefix ^^" \ "updated=\par Updated ^^" \ @@ -305,8 +325,8 @@ OPTIMIZE_OUTPUT_SLICE = NO # extension. Doxygen has a built-in mapping, but you can override or extend it # using this tag. The format is ext=language, where ext is a file extension, and # language is one of the parsers supported by doxygen: IDL, Java, JavaScript, -# Csharp (C#), C, C++, D, PHP, md (Markdown), Objective-C, Python, Slice, VHDL, -# Fortran (fixed format Fortran: FortranFixed, free formatted Fortran: +# Csharp (C#), C, C++, Lex, D, PHP, md (Markdown), Objective-C, Python, Slice, +# VHDL, Fortran (fixed format Fortran: FortranFixed, free formatted Fortran: # FortranFree, unknown formatted Fortran: Fortran. In the later case the parser # tries to guess whether the code is fixed or free formatted code, this is the # default for Fortran type files). For instance to make doxygen treat .inc files @@ -337,11 +357,22 @@ MARKDOWN_SUPPORT = YES # to that level are automatically included in the table of contents, even if # they do not have an id attribute. # Note: This feature currently applies only to Markdown headings. -# Minimum value: 0, maximum value: 99, default value: 5. +# Minimum value: 0, maximum value: 99, default value: 6. # This tag requires that the tag MARKDOWN_SUPPORT is set to YES. TOC_INCLUDE_HEADINGS = 5 +# The MARKDOWN_ID_STYLE tag can be used to specify the algorithm used to +# generate identifiers for the Markdown headings. Note: Every identifier is +# unique. +# Possible values are: DOXYGEN use a fixed 'autotoc_md' string followed by a +# sequence number starting at 0 and GITHUB use the lower case version of title +# with any whitespace replaced by '-' and punctuation characters removed. +# The default value is: DOXYGEN. +# This tag requires that the tag MARKDOWN_SUPPORT is set to YES. + +MARKDOWN_ID_STYLE = DOXYGEN + # When enabled doxygen tries to link words that correspond to documented # classes, or namespaces to their corresponding documentation. Such a link can # be prevented in individual cases by putting a % sign in front of the word or @@ -354,8 +385,8 @@ AUTOLINK_SUPPORT = YES # to include (a tag file for) the STL sources as input, then you should set this # tag to YES in order to let doxygen match functions declarations and # definitions whose arguments contain STL classes (e.g. func(std::string); -# versus func(std::string) {}). This also make the inheritance and collaboration -# diagrams that involve STL classes more complete and accurate. +# versus func(std::string) {}). This also makes the inheritance and +# collaboration diagrams that involve STL classes more complete and accurate. # The default value is: NO. BUILTIN_STL_SUPPORT = NO @@ -367,9 +398,9 @@ BUILTIN_STL_SUPPORT = NO CPP_CLI_SUPPORT = NO # Set the SIP_SUPPORT tag to YES if your project consists of sip (see: -# https://www.riverbankcomputing.com/software/sip/intro) sources only. Doxygen -# will parse them like normal C++ but will assume all classes use public instead -# of private inheritance when no explicit protection keyword is present. +# https://www.riverbankcomputing.com/software) sources only. Doxygen will parse +# them like normal C++ but will assume all classes use public instead of private +# inheritance when no explicit protection keyword is present. # The default value is: NO. SIP_SUPPORT = NO @@ -453,19 +484,27 @@ TYPEDEF_HIDES_STRUCT = NO LOOKUP_CACHE_SIZE = 0 -# The NUM_PROC_THREADS specifies the number threads doxygen is allowed to use +# The NUM_PROC_THREADS specifies the number of threads doxygen is allowed to use # during processing. When set to 0 doxygen will based this on the number of # cores available in the system. You can set it explicitly to a value larger # than 0 to get more control over the balance between CPU load and processing # speed. At this moment only the input processing can be done using multiple # threads. Since this is still an experimental feature the default is set to 1, -# which efficively disables parallel processing. Please report any issues you +# which effectively disables parallel processing. Please report any issues you # encounter. Generating dot graphs in parallel is controlled by the # DOT_NUM_THREADS setting. # Minimum value: 0, maximum value: 32, default value: 1. NUM_PROC_THREADS = 1 +# If the TIMESTAMP tag is set different from NO then each generated page will +# contain the date or date and time when the page was generated. Setting this to +# NO can help when comparing the output of multiple runs. +# Possible values are: YES, NO, DATETIME and DATE. +# The default value is: NO. + +TIMESTAMP = NO + #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- @@ -547,7 +586,8 @@ HIDE_UNDOC_MEMBERS = NO # If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. If set # to NO, these classes will be included in the various overviews. This option -# has no effect if EXTRACT_ALL is enabled. +# will also hide undocumented C++ concepts if enabled. This option has no effect +# if EXTRACT_ALL is enabled. # The default value is: NO. HIDE_UNDOC_CLASSES = NO @@ -578,14 +618,15 @@ INTERNAL_DOCS = NO # filesystem is case sensitive (i.e. it supports files in the same directory # whose names only differ in casing), the option must be set to YES to properly # deal with such files in case they appear in the input. For filesystems that -# are not case sensitive the option should be be set to NO to properly deal with +# are not case sensitive the option should be set to NO to properly deal with # output files written for symbols that only differ in casing, such as for two # classes, one named CLASS and the other named Class, and to also support # references to files without having to specify the exact matching casing. On # Windows (including Cygwin) and MacOS, users should typically set this option # to NO, whereas on Linux or other Unix flavors it should typically be set to # YES. -# The default value is: system dependent. +# Possible values are: SYSTEM, NO and YES. +# The default value is: SYSTEM. CASE_SENSE_NAMES = YES @@ -603,6 +644,12 @@ HIDE_SCOPE_NAMES = NO HIDE_COMPOUND_REFERENCE= NO +# If the SHOW_HEADERFILE tag is set to YES then the documentation for a class +# will show which file needs to be included to use the class. +# The default value is: YES. + +SHOW_HEADERFILE = YES + # If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of # the files that are included by a file in the documentation of that file. # The default value is: YES. @@ -760,7 +807,8 @@ FILE_VERSION_FILTER = # output files in an output format independent way. To create the layout file # that represents doxygen's defaults, run doxygen with the -l option. You can # optionally specify a file name after the option, if omitted DoxygenLayout.xml -# will be used as the name of the layout file. +# will be used as the name of the layout file. See also section "Changing the +# layout of pages" for information. # # Note that if you run doxygen from a directory containing a file called # DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE @@ -806,27 +854,50 @@ WARNINGS = YES WARN_IF_UNDOCUMENTED = YES # If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for -# potential errors in the documentation, such as not documenting some parameters -# in a documented function, or documenting parameters that don't exist or using -# markup commands wrongly. +# potential errors in the documentation, such as documenting some parameters in +# a documented function twice, or documenting parameters that don't exist or +# using markup commands wrongly. # The default value is: YES. WARN_IF_DOC_ERROR = YES +# If WARN_IF_INCOMPLETE_DOC is set to YES, doxygen will warn about incomplete +# function parameter documentation. If set to NO, doxygen will accept that some +# parameters have no documentation without warning. +# The default value is: YES. + +WARN_IF_INCOMPLETE_DOC = YES + # This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that # are documented, but have no documentation for their parameters or return -# value. If set to NO, doxygen will only warn about wrong or incomplete -# parameter documentation, but not about the absence of documentation. If -# EXTRACT_ALL is set to YES then this flag will automatically be disabled. +# value. If set to NO, doxygen will only warn about wrong parameter +# documentation, but not about the absence of documentation. If EXTRACT_ALL is +# set to YES then this flag will automatically be disabled. See also +# WARN_IF_INCOMPLETE_DOC # The default value is: NO. WARN_NO_PARAMDOC = NO +# If WARN_IF_UNDOC_ENUM_VAL option is set to YES, doxygen will warn about +# undocumented enumeration values. If set to NO, doxygen will accept +# undocumented enumeration values. If EXTRACT_ALL is set to YES then this flag +# will automatically be disabled. +# The default value is: NO. + +WARN_IF_UNDOC_ENUM_VAL = NO + # If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when # a warning is encountered. If the WARN_AS_ERROR tag is set to FAIL_ON_WARNINGS # then doxygen will continue running as if WARN_AS_ERROR tag is set to NO, but # at the end of the doxygen process doxygen will return with a non-zero status. -# Possible values are: NO, YES and FAIL_ON_WARNINGS. +# If the WARN_AS_ERROR tag is set to FAIL_ON_WARNINGS_PRINT then doxygen behaves +# like FAIL_ON_WARNINGS but in case no WARN_LOGFILE is defined doxygen will not +# write the warning messages in between other messages but write them at the end +# of a run, in case a WARN_LOGFILE is defined the warning messages will be +# besides being in the defined file also be shown at the end of a run, unless +# the WARN_LOGFILE is defined as - i.e. standard output (stdout) in that case +# the behavior will remain as with the setting FAIL_ON_WARNINGS. +# Possible values are: NO, YES, FAIL_ON_WARNINGS and FAIL_ON_WARNINGS_PRINT. # The default value is: NO. WARN_AS_ERROR = YES @@ -837,13 +908,27 @@ WARN_AS_ERROR = YES # and the warning text. Optionally the format may contain $version, which will # be replaced by the version of the file (if it could be obtained via # FILE_VERSION_FILTER) +# See also: WARN_LINE_FORMAT # The default value is: $file:$line: $text. WARN_FORMAT = "$file:$line: $text" +# In the $text part of the WARN_FORMAT command it is possible that a reference +# to a more specific place is given. To make it easier to jump to this place +# (outside of doxygen) the user can define a custom "cut" / "paste" string. +# Example: +# WARN_LINE_FORMAT = "'vi $file +$line'" +# See also: WARN_FORMAT +# The default value is: at line $line of file $file. + +WARN_LINE_FORMAT = "at line $line of file $file" + # The WARN_LOGFILE tag can be used to specify a file to which warning and error # messages should be written. If left blank the output is written to standard -# error (stderr). +# error (stderr). In case the file specified cannot be opened for writing the +# warning and error messages are written to standard error. When as file - is +# specified the warning and error messages are written to standard output +# (stdout). WARN_LOGFILE = @@ -864,10 +949,21 @@ INPUT = @INPUT@ # libiconv (or the iconv built into libc) for the transcoding. See the libiconv # documentation (see: # https://www.gnu.org/software/libiconv/) for the list of possible encodings. +# See also: INPUT_FILE_ENCODING # The default value is: UTF-8. INPUT_ENCODING = UTF-8 +# This tag can be used to specify the character encoding of the source files +# that doxygen parses The INPUT_FILE_ENCODING tag can be used to specify +# character encoding on a per file pattern basis. Doxygen will compare the file +# name with each pattern and apply the encoding instead of the default +# INPUT_ENCODING) if there is a match. The character encodings are a list of the +# form: pattern=encoding (like *.php=ISO-8859-1). +# See also: INPUT_ENCODING for further information on supported encodings. + +INPUT_FILE_ENCODING = + # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and # *.h) to filter out the source-files in the directories. @@ -879,12 +975,12 @@ INPUT_ENCODING = UTF-8 # Note the list of default checked file patterns might differ from the list of # default file extension mappings. # -# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp, -# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, -# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, -# *.m, *.markdown, *.md, *.mm, *.dox (to be provided as doxygen C comment), -# *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, *.f18, *.f, *.for, *.vhd, *.vhdl, -# *.ucf, *.qsf and *.ice. +# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cxxm, +# *.cpp, *.cppm, *.ccm, *.c++, *.c++m, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, +# *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, *.h++, *.ixx, *.l, *.cs, *.d, +# *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, *.md, *.mm, *.dox (to +# be provided as doxygen C comment), *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, +# *.f18, *.f, *.for, *.vhd, *.vhdl, *.ucf, *.qsf and *.ice. FILE_PATTERNS = *.c *.h @@ -923,10 +1019,7 @@ EXCLUDE_PATTERNS = # (namespaces, classes, functions, etc.) that should be excluded from the # output. The symbol name can be a fully qualified name, a word, or if the # wildcard * is used, a substring. Examples: ANamespace, AClass, -# AClass::ANamespace, ANamespace::*Test -# -# Note that the wildcards are matched against the file with absolute path, so to -# exclude all test directories use the pattern */test/* +# ANamespace::AClass, ANamespace::*Test EXCLUDE_SYMBOLS = @@ -971,6 +1064,11 @@ IMAGE_PATH = @IMAGE_PATH@ # code is scanned, but not when the output code is generated. If lines are added # or removed, the anchors will not be placed correctly. # +# Note that doxygen will use the data processed and written to standard output +# for further processing, therefore nothing else, like debug statements or used +# commands (so in case of a Windows batch file always use @echo OFF), should be +# written to standard output. +# # Note that for custom extensions or not directly supported extensions you also # need to set EXTENSION_MAPPING for the extension otherwise the files are not # properly processed by doxygen. @@ -1012,6 +1110,15 @@ FILTER_SOURCE_PATTERNS = USE_MDFILE_AS_MAINPAGE = +# The Fortran standard specifies that for fixed formatted Fortran code all +# characters from position 72 are to be considered as comment. A common +# extension is to allow longer lines before the automatic comment starts. The +# setting FORTRAN_COMMENT_AFTER will also make it possible that longer lines can +# be processed before the automatic comment starts. +# Minimum value: 7, maximum value: 10000, default value: 72. + +FORTRAN_COMMENT_AFTER = 72 + #--------------------------------------------------------------------------- # Configuration options related to source browsing #--------------------------------------------------------------------------- @@ -1026,7 +1133,8 @@ USE_MDFILE_AS_MAINPAGE = SOURCE_BROWSER = YES # Setting the INLINE_SOURCES tag to YES will include the body of functions, -# classes and enums directly into the documentation. +# multi-line macros, enums or list initialized variables directly into the +# documentation. # The default value is: NO. INLINE_SOURCES = NO @@ -1109,9 +1217,11 @@ VERBATIM_HEADERS = YES CLANG_ASSISTED_PARSING = NO -# If clang assisted parsing is enabled and the CLANG_ADD_INC_PATHS tag is set to -# YES then doxygen will add the directory of each input to the include path. +# If the CLANG_ASSISTED_PARSING tag is set to YES and the CLANG_ADD_INC_PATHS +# tag is set to YES then doxygen will add the directory of each input to the +# include path. # The default value is: YES. +# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. CLANG_ADD_INC_PATHS = YES @@ -1147,10 +1257,11 @@ CLANG_DATABASE_PATH = ALPHABETICAL_INDEX = YES -# In case all classes in a project start with a common prefix, all classes will -# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag -# can be used to specify a prefix (or a list of prefixes) that should be ignored -# while generating the index headers. +# The IGNORE_PREFIX tag can be used to specify a prefix (or a list of prefixes) +# that should be ignored while generating the index headers. The IGNORE_PREFIX +# tag works for classes, function and member names. The entity will be placed in +# the alphabetical list under the first letter of the entity name that remains +# after removing the prefix. # This tag requires that the tag ALPHABETICAL_INDEX is set to YES. IGNORE_PREFIX = @@ -1229,7 +1340,12 @@ HTML_STYLESHEET = @HTML_STYLESHEET@ # Doxygen will copy the style sheet files to the output directory. # Note: The order of the extra style sheet files is of importance (e.g. the last # style sheet in the list overrules the setting of the previous ones in the -# list). For an example see the documentation. +# list). +# Note: Since the styling of scrollbars can currently not be overruled in +# Webkit/Chromium, the styling will be left out of the default doxygen.css if +# one or more extra stylesheets have been specified. So if scrollbar +# customization is desired it has to be added explicitly. For an example see the +# documentation. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_EXTRA_STYLESHEET = @@ -1244,9 +1360,22 @@ HTML_EXTRA_STYLESHEET = HTML_EXTRA_FILES = @HTML_EXTRA_FILES@ +# The HTML_COLORSTYLE tag can be used to specify if the generated HTML output +# should be rendered with a dark or light theme. +# Possible values are: LIGHT always generates light mode output, DARK always +# generates dark mode output, AUTO_LIGHT automatically sets the mode according +# to the user preference, uses light mode if no preference is set (the default), +# AUTO_DARK automatically sets the mode according to the user preference, uses +# dark mode if no preference is set and TOGGLE allows a user to switch between +# light and dark mode via a button. +# The default value is: AUTO_LIGHT. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE = AUTO_LIGHT + # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen # will adjust the colors in the style sheet and background images according to -# this color. Hue is specified as an angle on a colorwheel, see +# this color. Hue is specified as an angle on a color-wheel, see # https://en.wikipedia.org/wiki/Hue for more information. For instance the value # 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 # purple, and 360 is red again. @@ -1256,7 +1385,7 @@ HTML_EXTRA_FILES = @HTML_EXTRA_FILES@ HTML_COLORSTYLE_HUE = 220 # The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors -# in the HTML output. For a value of 0 the output will use grayscales only. A +# in the HTML output. For a value of 0 the output will use gray-scales only. A # value of 255 will produce the most vivid colors. # Minimum value: 0, maximum value: 255, default value: 100. # This tag requires that the tag GENERATE_HTML is set to YES. @@ -1274,15 +1403,6 @@ HTML_COLORSTYLE_SAT = 100 HTML_COLORSTYLE_GAMMA = 80 -# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML -# page will contain the date and time when the page was generated. Setting this -# to YES can help to show when doxygen was last run and thus if the -# documentation is up to date. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_TIMESTAMP = NO - # If the HTML_DYNAMIC_MENUS tag is set to YES then the generated HTML # documentation will contain a main index with vertical navigation menus that # are dynamically created via JavaScript. If disabled, the navigation index will @@ -1302,6 +1422,33 @@ HTML_DYNAMIC_MENUS = YES HTML_DYNAMIC_SECTIONS = NO +# If the HTML_CODE_FOLDING tag is set to YES then classes and functions can be +# dynamically folded and expanded in the generated HTML source code. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_CODE_FOLDING = YES + +# If the HTML_COPY_CLIPBOARD tag is set to YES then doxygen will show an icon in +# the top right corner of code and text fragments that allows the user to copy +# its content to the clipboard. Note this only works if supported by the browser +# and the web page is served via a secure context (see: +# https://www.w3.org/TR/secure-contexts/), i.e. using the https: or file: +# protocol. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COPY_CLIPBOARD = YES + +# Doxygen stores a couple of settings persistently in the browser (via e.g. +# cookies). By default these settings apply to all HTML pages generated by +# doxygen across all projects. The HTML_PROJECT_COOKIE tag can be used to store +# the settings under a project specific key, such that the user preferences will +# be stored separately. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_PROJECT_COOKIE = + # With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries # shown in the various tree structured indices initially; the user can expand # and collapse entries dynamically later on. Doxygen will expand the tree to @@ -1338,6 +1485,13 @@ GENERATE_DOCSET = NO DOCSET_FEEDNAME = "Doxygen generated docs" +# This tag determines the URL of the docset feed. A documentation feed provides +# an umbrella under which multiple documentation sets from a single provider +# (such as a company or product suite) can be grouped. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_FEEDURL = + # This tag specifies a string that should uniquely identify the documentation # set bundle. This should be a reverse domain-name style string, e.g. # com.mycompany.MyDocSet. Doxygen will append .docset to the name. @@ -1363,8 +1517,12 @@ DOCSET_PUBLISHER_NAME = Publisher # If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three # additional HTML index files: index.hhp, index.hhc, and index.hhk. The # index.hhp is a project file that can be read by Microsoft's HTML Help Workshop -# (see: -# https://www.microsoft.com/en-us/download/details.aspx?id=21138) on Windows. +# on Windows. In the beginning of 2021 Microsoft took the original page, with +# a.o. the download links, offline the HTML help workshop was already many years +# in maintenance mode). You can download the HTML help workshop from the web +# archives at Installation executable (see: +# http://web.archive.org/web/20160201063255/http://download.microsoft.com/downlo +# ad/0/A/9/0A939EF6-E31C-430F-A3DF-DFAE7960D564/htmlhelp.exe). # # The HTML Help Workshop contains a compiler that can convert all HTML output # generated by doxygen into a single compiled HTML file (.chm). Compiled HTML @@ -1421,6 +1579,16 @@ BINARY_TOC = NO TOC_EXPAND = NO +# The SITEMAP_URL tag is used to specify the full URL of the place where the +# generated documentation will be placed on the server by the user during the +# deployment of the documentation. The generated sitemap is called sitemap.xml +# and placed on the directory specified by HTML_OUTPUT. In case no SITEMAP_URL +# is specified no sitemap is generated. For information about the sitemap +# protocol see https://www.sitemaps.org +# This tag requires that the tag GENERATE_HTML is set to YES. + +SITEMAP_URL = + # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and # QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that # can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help @@ -1523,16 +1691,28 @@ DISABLE_INDEX = NO # to work a browser that supports JavaScript, DHTML, CSS and frames is required # (i.e. any modern browser). Windows users are probably better off using the # HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can -# further fine-tune the look of the index. As an example, the default style -# sheet generated by doxygen has an example that shows how to put an image at -# the root of the tree instead of the PROJECT_NAME. Since the tree basically has -# the same information as the tab index, you could consider setting -# DISABLE_INDEX to YES when enabling this option. +# further fine tune the look of the index (see "Fine-tuning the output"). As an +# example, the default style sheet generated by doxygen has an example that +# shows how to put an image at the root of the tree instead of the PROJECT_NAME. +# Since the tree basically has the same information as the tab index, you could +# consider setting DISABLE_INDEX to YES when enabling this option. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_TREEVIEW = YES +# When both GENERATE_TREEVIEW and DISABLE_INDEX are set to YES, then the +# FULL_SIDEBAR option determines if the side bar is limited to only the treeview +# area (value NO) or if it should extend to the full height of the window (value +# YES). Setting this to YES gives a layout similar to +# https://docs.readthedocs.io with more room for contents, but less room for the +# project logo, title, and description. If either GENERATE_TREEVIEW or +# DISABLE_INDEX is set to NO, this option has no effect. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +FULL_SIDEBAR = NO + # The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that # doxygen will group on one line in the generated HTML documentation. # @@ -1557,6 +1737,13 @@ TREEVIEW_WIDTH = 250 EXT_LINKS_IN_WINDOW = NO +# If the OBFUSCATE_EMAILS tag is set to YES, doxygen will obfuscate email +# addresses. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +OBFUSCATE_EMAILS = YES + # If the HTML_FORMULA_FORMAT option is set to svg, doxygen will use the pdf2svg # tool (see https://github.com/dawbarton/pdf2svg) or inkscape (see # https://inkscape.org) to generate formulas as SVG images instead of PNGs for @@ -1577,17 +1764,6 @@ HTML_FORMULA_FORMAT = png FORMULA_FONTSIZE = 10 -# Use the FORMULA_TRANSPARENT tag to determine whether or not the images -# generated for formulas are transparent PNGs. Transparent PNGs are not -# supported properly for IE 6.0, but are supported on all modern browsers. -# -# Note that when changing this option you need to delete any form_*.png files in -# the HTML output directory before the changes have effect. -# The default value is: YES. -# This tag requires that the tag GENERATE_HTML is set to YES. - -FORMULA_TRANSPARENT = YES - # The FORMULA_MACROFILE can contain LaTeX \newcommand and \renewcommand commands # to create new LaTeX commands to be used in formulas as building blocks. See # the section "Including formulas" for details. @@ -1605,11 +1781,29 @@ FORMULA_MACROFILE = USE_MATHJAX = NO +# With MATHJAX_VERSION it is possible to specify the MathJax version to be used. +# Note that the different versions of MathJax have different requirements with +# regards to the different settings, so it is possible that also other MathJax +# settings have to be changed when switching between the different MathJax +# versions. +# Possible values are: MathJax_2 and MathJax_3. +# The default value is: MathJax_2. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_VERSION = MathJax_2 + # When MathJax is enabled you can set the default output format to be used for -# the MathJax output. See the MathJax site (see: -# http://docs.mathjax.org/en/v2.7-latest/output.html) for more details. +# the MathJax output. For more details about the output format see MathJax +# version 2 (see: +# http://docs.mathjax.org/en/v2.7-latest/output.html) and MathJax version 3 +# (see: +# http://docs.mathjax.org/en/latest/web/components/output.html). # Possible values are: HTML-CSS (which is slower, but has the best -# compatibility), NativeMML (i.e. MathML) and SVG. +# compatibility. This is the name for Mathjax version 2, for MathJax version 3 +# this will be translated into chtml), NativeMML (i.e. MathML. Only supported +# for MathJax 2. For MathJax version 3 chtml will be used instead.), chtml (This +# is the name for Mathjax version 3, for MathJax version 2 this will be +# translated into HTML-CSS) and SVG. # The default value is: HTML-CSS. # This tag requires that the tag USE_MATHJAX is set to YES. @@ -1622,15 +1816,21 @@ MATHJAX_FORMAT = HTML-CSS # MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax # Content Delivery Network so you can quickly see the result without installing # MathJax. However, it is strongly recommended to install a local copy of -# MathJax from https://www.mathjax.org before deployment. -# The default value is: https://cdn.jsdelivr.net/npm/mathjax@2. +# MathJax from https://www.mathjax.org before deployment. The default value is: +# - in case of MathJax version 2: https://cdn.jsdelivr.net/npm/mathjax@2 +# - in case of MathJax version 3: https://cdn.jsdelivr.net/npm/mathjax@3 # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest # The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax # extension names that should be enabled during MathJax rendering. For example +# for MathJax version 2 (see +# https://docs.mathjax.org/en/v2.7-latest/tex.html#tex-and-latex-extensions): # MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols +# For example for MathJax version 3 (see +# http://docs.mathjax.org/en/latest/input/tex/extensions/index.html): +# MATHJAX_EXTENSIONS = ams # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_EXTENSIONS = @@ -1810,29 +2010,31 @@ PAPER_TYPE = a4 EXTRA_PACKAGES = -# The LATEX_HEADER tag can be used to specify a personal LaTeX header for the -# generated LaTeX document. The header should contain everything until the first -# chapter. If it is left blank doxygen will generate a standard header. See -# section "Doxygen usage" for information on how to let doxygen write the -# default header to a separate file. +# The LATEX_HEADER tag can be used to specify a user-defined LaTeX header for +# the generated LaTeX document. The header should contain everything until the +# first chapter. If it is left blank doxygen will generate a standard header. It +# is highly recommended to start with a default header using +# doxygen -w latex new_header.tex new_footer.tex new_stylesheet.sty +# and then modify the file new_header.tex. See also section "Doxygen usage" for +# information on how to generate the default header that doxygen normally uses. # -# Note: Only use a user-defined header if you know what you are doing! The -# following commands have a special meaning inside the header: $title, -# $datetime, $date, $doxygenversion, $projectname, $projectnumber, -# $projectbrief, $projectlogo. Doxygen will replace $title with the empty -# string, for the replacement values of the other commands the user is referred -# to HTML_HEADER. +# Note: Only use a user-defined header if you know what you are doing! +# Note: The header is subject to change so you typically have to regenerate the +# default header when upgrading to a newer version of doxygen. The following +# commands have a special meaning inside the header (and footer): For a +# description of the possible markers and block names see the documentation. # This tag requires that the tag GENERATE_LATEX is set to YES. LATEX_HEADER = -# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the -# generated LaTeX document. The footer should contain everything after the last -# chapter. If it is left blank doxygen will generate a standard footer. See +# The LATEX_FOOTER tag can be used to specify a user-defined LaTeX footer for +# the generated LaTeX document. The footer should contain everything after the +# last chapter. If it is left blank doxygen will generate a standard footer. See # LATEX_HEADER for more information on how to generate a default footer and what -# special commands can be used inside the footer. -# -# Note: Only use a user-defined footer if you know what you are doing! +# special commands can be used inside the footer. See also section "Doxygen +# usage" for information on how to generate the default footer that doxygen +# normally uses. Note: Only use a user-defined footer if you know what you are +# doing! # This tag requires that the tag GENERATE_LATEX is set to YES. LATEX_FOOTER = @@ -1875,10 +2077,16 @@ PDF_HYPERLINKS = YES USE_PDFLATEX = YES -# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode -# command to the generated LaTeX files. This will instruct LaTeX to keep running -# if errors occur, instead of asking the user for help. This option is also used -# when generating formulas in HTML. +# The LATEX_BATCHMODE tag signals the behavior of LaTeX in case of an error. +# Possible values are: NO same as ERROR_STOP, YES same as BATCH, BATCH In batch +# mode nothing is printed on the terminal, errors are scrolled as if is +# hit at every error; missing files that TeX tries to input or request from +# keyboard input (\read on a not open input stream) cause the job to abort, +# NON_STOP In nonstop mode the diagnostic message will appear on the terminal, +# but there is no possibility of user interaction just like in batch mode, +# SCROLL In scroll mode, TeX will stop only for missing files to input or if +# keyboard input is necessary and ERROR_STOP In errorstop mode, TeX will stop at +# each error, asking for user intervention. # The default value is: NO. # This tag requires that the tag GENERATE_LATEX is set to YES. @@ -1891,16 +2099,6 @@ LATEX_BATCHMODE = NO LATEX_HIDE_INDICES = NO -# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source -# code with syntax highlighting in the LaTeX output. -# -# Note that which sources are shown also depends on other settings such as -# SOURCE_BROWSER. -# The default value is: NO. -# This tag requires that the tag GENERATE_LATEX is set to YES. - -LATEX_SOURCE_CODE = NO - # The LATEX_BIB_STYLE tag can be used to specify the style to use for the # bibliography, e.g. plainnat, or ieeetr. See # https://en.wikipedia.org/wiki/BibTeX and \cite for more info. @@ -1909,14 +2107,6 @@ LATEX_SOURCE_CODE = NO LATEX_BIB_STYLE = plain -# If the LATEX_TIMESTAMP tag is set to YES then the footer of each generated -# page will contain the date and time when the page was generated. Setting this -# to NO can help when comparing the output of multiple runs. -# The default value is: NO. -# This tag requires that the tag GENERATE_LATEX is set to YES. - -LATEX_TIMESTAMP = NO - # The LATEX_EMOJI_DIRECTORY tag is used to specify the (relative or absolute) # path from which the emoji images will be read. If a relative path is entered, # it will be relative to the LATEX_OUTPUT directory. If left blank the @@ -1981,15 +2171,13 @@ RTF_STYLESHEET_FILE = RTF_EXTENSIONS_FILE = -# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code -# with syntax highlighting in the RTF output. -# -# Note that which sources are shown also depends on other settings such as -# SOURCE_BROWSER. -# The default value is: NO. +# The RTF_EXTRA_FILES tag can be used to specify one or more extra images or +# other source files which should be copied to the RTF_OUTPUT output directory. +# Note that the files will be copied as-is; there are no commands or markers +# available. # This tag requires that the tag GENERATE_RTF is set to YES. -RTF_SOURCE_CODE = NO +RTF_EXTRA_FILES = #--------------------------------------------------------------------------- # Configuration options related to the man page output @@ -2087,27 +2275,44 @@ GENERATE_DOCBOOK = NO DOCBOOK_OUTPUT = docbook -# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the -# program listings (including syntax highlighting and cross-referencing -# information) to the DOCBOOK output. Note that enabling this will significantly -# increase the size of the DOCBOOK output. -# The default value is: NO. -# This tag requires that the tag GENERATE_DOCBOOK is set to YES. - -DOCBOOK_PROGRAMLISTING = NO - #--------------------------------------------------------------------------- # Configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- # If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an -# AutoGen Definitions (see http://autogen.sourceforge.net/) file that captures +# AutoGen Definitions (see https://autogen.sourceforge.net/) file that captures # the structure of the code including all documentation. Note that this feature # is still experimental and incomplete at the moment. # The default value is: NO. GENERATE_AUTOGEN_DEF = NO +#--------------------------------------------------------------------------- +# Configuration options related to Sqlite3 output +#--------------------------------------------------------------------------- + +# If the GENERATE_SQLITE3 tag is set to YES doxygen will generate a Sqlite3 +# database with symbols found by doxygen stored in tables. +# The default value is: NO. + +GENERATE_SQLITE3 = NO + +# The SQLITE3_OUTPUT tag is used to specify where the Sqlite3 database will be +# put. If a relative path is entered the value of OUTPUT_DIRECTORY will be put +# in front of it. +# The default directory is: sqlite3. +# This tag requires that the tag GENERATE_SQLITE3 is set to YES. + +SQLITE3_OUTPUT = sqlite3 + +# The SQLITE3_RECREATE_DB tag is set to YES, the existing doxygen_sqlite3.db +# database file will be recreated with each doxygen run. If set to NO, doxygen +# will warn if a database file is already found and not modify it. +# The default value is: YES. +# This tag requires that the tag GENERATE_SQLITE3 is set to YES. + +SQLITE3_RECREATE_DB = YES + #--------------------------------------------------------------------------- # Configuration options related to the Perl module output #--------------------------------------------------------------------------- @@ -2182,7 +2387,8 @@ SEARCH_INCLUDES = YES # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by the -# preprocessor. +# preprocessor. Note that the INCLUDE_PATH is not recursive, so the setting of +# RECURSIVE has no effect here. # This tag requires that the tag SEARCH_INCLUDES is set to YES. INCLUDE_PATH = @@ -2249,15 +2455,15 @@ TAGFILES = GENERATE_TAGFILE = -# If the ALLEXTERNALS tag is set to YES, all external class will be listed in -# the class index. If set to NO, only the inherited external classes will be -# listed. +# If the ALLEXTERNALS tag is set to YES, all external classes and namespaces +# will be listed in the class and namespace index. If set to NO, only the +# inherited external classes will be listed. # The default value is: NO. ALLEXTERNALS = NO # If the EXTERNAL_GROUPS tag is set to YES, all external groups will be listed -# in the modules index. If set to NO, only the current project's groups will be +# in the topic index. If set to NO, only the current project's groups will be # listed. # The default value is: YES. @@ -2271,25 +2477,9 @@ EXTERNAL_GROUPS = YES EXTERNAL_PAGES = YES #--------------------------------------------------------------------------- -# Configuration options related to the dot tool +# Configuration options related to diagram generator tools #--------------------------------------------------------------------------- -# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram -# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to -# NO turns the diagrams off. Note that this option also works with HAVE_DOT -# disabled, but it is recommended to install and use dot, since it yields more -# powerful graphs. -# The default value is: YES. - -CLASS_DIAGRAMS = YES - -# You can include diagrams made with dia in doxygen documentation. Doxygen will -# then run dia to produce the diagram and insert it in the documentation. The -# DIA_PATH tag allows you to specify the directory where the dia binary resides. -# If left empty dia is assumed to be found in the default search path. - -DIA_PATH = - # If set to YES the inheritance and collaboration graphs will hide inheritance # and usage relations if the target is undocumented or is not a class. # The default value is: YES. @@ -2298,7 +2488,7 @@ HIDE_UNDOC_RELATIONS = YES # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is # available from the path. This tool is part of Graphviz (see: -# http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent +# https://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent # Bell Labs. The other options in this section have no effect if this option is # set to NO # The default value is: NO. @@ -2315,49 +2505,77 @@ HAVE_DOT = YES DOT_NUM_THREADS = 0 -# When you want a differently looking font in the dot files that doxygen -# generates you can specify the font name using DOT_FONTNAME. You need to make -# sure dot is able to find the font, which can be done by putting it in a -# standard location or by setting the DOTFONTPATH environment variable or by -# setting DOT_FONTPATH to the directory containing the font. -# The default value is: Helvetica. +# DOT_COMMON_ATTR is common attributes for nodes, edges and labels of +# subgraphs. When you want a differently looking font in the dot files that +# doxygen generates you can specify fontname, fontcolor and fontsize attributes. +# For details please see Node, +# Edge and Graph Attributes specification You need to make sure dot is able +# to find the font, which can be done by putting it in a standard location or by +# setting the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the +# directory containing the font. Default graphviz fontsize is 14. +# The default value is: fontname=Helvetica,fontsize=10. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_COMMON_ATTR = "fontname=Helvetica,fontsize=10" + +# DOT_EDGE_ATTR is concatenated with DOT_COMMON_ATTR. For elegant style you can +# add 'arrowhead=open, arrowtail=open, arrowsize=0.5'. Complete documentation about +# arrows shapes. +# The default value is: labelfontname=Helvetica,labelfontsize=10. # This tag requires that the tag HAVE_DOT is set to YES. -DOT_FONTNAME = Helvetica +DOT_EDGE_ATTR = "labelfontname=Helvetica,labelfontsize=10" -# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of -# dot graphs. -# Minimum value: 4, maximum value: 24, default value: 10. +# DOT_NODE_ATTR is concatenated with DOT_COMMON_ATTR. For view without boxes +# around nodes set 'shape=plain' or 'shape=plaintext' Shapes specification +# The default value is: shape=box,height=0.2,width=0.4. # This tag requires that the tag HAVE_DOT is set to YES. -DOT_FONTSIZE = 10 +DOT_NODE_ATTR = "shape=box,height=0.2,width=0.4" -# By default doxygen will tell dot to use the default font as specified with -# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set -# the path where dot can find it using this tag. +# You can set the path where dot can find font specified with fontname in +# DOT_COMMON_ATTR and others dot attributes. # This tag requires that the tag HAVE_DOT is set to YES. DOT_FONTPATH = -# If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for -# each documented class showing the direct and indirect inheritance relations. -# Setting this tag to YES will force the CLASS_DIAGRAMS tag to NO. +# If the CLASS_GRAPH tag is set to YES or GRAPH or BUILTIN then doxygen will +# generate a graph for each documented class showing the direct and indirect +# inheritance relations. In case the CLASS_GRAPH tag is set to YES or GRAPH and +# HAVE_DOT is enabled as well, then dot will be used to draw the graph. In case +# the CLASS_GRAPH tag is set to YES and HAVE_DOT is disabled or if the +# CLASS_GRAPH tag is set to BUILTIN, then the built-in generator will be used. +# If the CLASS_GRAPH tag is set to TEXT the direct and indirect inheritance +# relations will be shown as texts / links. Explicit enabling an inheritance +# graph or choosing a different representation for an inheritance graph of a +# specific class, can be accomplished by means of the command \inheritancegraph. +# Disabling an inheritance graph can be accomplished by means of the command +# \hideinheritancegraph. +# Possible values are: NO, YES, TEXT, GRAPH and BUILTIN. # The default value is: YES. -# This tag requires that the tag HAVE_DOT is set to YES. CLASS_GRAPH = YES # If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a # graph for each documented class showing the direct and indirect implementation # dependencies (inheritance, containment, and class references variables) of the -# class with other documented classes. +# class with other documented classes. Explicit enabling a collaboration graph, +# when COLLABORATION_GRAPH is set to NO, can be accomplished by means of the +# command \collaborationgraph. Disabling a collaboration graph can be +# accomplished by means of the command \hidecollaborationgraph. # The default value is: YES. # This tag requires that the tag HAVE_DOT is set to YES. COLLABORATION_GRAPH = YES # If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for -# groups, showing the direct groups dependencies. +# groups, showing the direct groups dependencies. Explicit enabling a group +# dependency graph, when GROUP_GRAPHS is set to NO, can be accomplished by means +# of the command \groupgraph. Disabling a directory graph can be accomplished by +# means of the command \hidegroupgraph. See also the chapter Grouping in the +# manual. # The default value is: YES. # This tag requires that the tag HAVE_DOT is set to YES. @@ -2399,8 +2617,8 @@ DOT_UML_DETAILS = NO # The DOT_WRAP_THRESHOLD tag can be used to set the maximum number of characters # to display on a single line. If the actual line length exceeds this threshold -# significantly it will wrapped across multiple lines. Some heuristics are apply -# to avoid ugly line breaks. +# significantly it will be wrapped across multiple lines. Some heuristics are +# applied to avoid ugly line breaks. # Minimum value: 0, maximum value: 1000, default value: 17. # This tag requires that the tag HAVE_DOT is set to YES. @@ -2417,7 +2635,9 @@ TEMPLATE_RELATIONS = NO # If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to # YES then doxygen will generate a graph for each documented file showing the # direct and indirect include dependencies of the file with other documented -# files. +# files. Explicit enabling an include graph, when INCLUDE_GRAPH is is set to NO, +# can be accomplished by means of the command \includegraph. Disabling an +# include graph can be accomplished by means of the command \hideincludegraph. # The default value is: YES. # This tag requires that the tag HAVE_DOT is set to YES. @@ -2426,7 +2646,10 @@ INCLUDE_GRAPH = YES # If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are # set to YES then doxygen will generate a graph for each documented file showing # the direct and indirect include dependencies of the file with other documented -# files. +# files. Explicit enabling an included by graph, when INCLUDED_BY_GRAPH is set +# to NO, can be accomplished by means of the command \includedbygraph. Disabling +# an included by graph can be accomplished by means of the command +# \hideincludedbygraph. # The default value is: YES. # This tag requires that the tag HAVE_DOT is set to YES. @@ -2466,16 +2689,26 @@ GRAPHICAL_HIERARCHY = YES # If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the # dependencies a directory has on other directories in a graphical way. The # dependency relations are determined by the #include relations between the -# files in the directories. +# files in the directories. Explicit enabling a directory graph, when +# DIRECTORY_GRAPH is set to NO, can be accomplished by means of the command +# \directorygraph. Disabling a directory graph can be accomplished by means of +# the command \hidedirectorygraph. # The default value is: YES. # This tag requires that the tag HAVE_DOT is set to YES. DIRECTORY_GRAPH = YES +# The DIR_GRAPH_MAX_DEPTH tag can be used to limit the maximum number of levels +# of child directories generated in directory dependency graphs by dot. +# Minimum value: 1, maximum value: 25, default value: 1. +# This tag requires that the tag DIRECTORY_GRAPH is set to YES. + +DIR_GRAPH_MAX_DEPTH = 1 + # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # generated by dot. For an explanation of the image formats see the section # output formats in the documentation of the dot tool (Graphviz (see: -# http://www.graphviz.org/)). +# https://www.graphviz.org/)). # Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order # to make the SVG files visible in IE 9+ (other browsers do not have this # requirement). @@ -2503,7 +2736,7 @@ INTERACTIVE_SVG = NO # found. If left blank, it is assumed the dot tool can be found in the path. # This tag requires that the tag HAVE_DOT is set to YES. -DOT_PATH = +DOT_PATH = @DOT_PATH@ # The DOTFILE_DIRS tag can be used to specify one or more directories that # contain dot files that are included in the documentation (see the \dotfile @@ -2512,11 +2745,12 @@ DOT_PATH = DOTFILE_DIRS = -# The MSCFILE_DIRS tag can be used to specify one or more directories that -# contain msc files that are included in the documentation (see the \mscfile -# command). +# You can include diagrams made with dia in doxygen documentation. Doxygen will +# then run dia to produce the diagram and insert it in the documentation. The +# DIA_PATH tag allows you to specify the directory where the dia binary resides. +# If left empty dia is assumed to be found in the default search path. -MSCFILE_DIRS = +DIA_PATH = # The DIAFILE_DIRS tag can be used to specify one or more directories that # contain dia files that are included in the documentation (see the \diafile @@ -2525,10 +2759,10 @@ MSCFILE_DIRS = DIAFILE_DIRS = # When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the -# path where java can find the plantuml.jar file. If left blank, it is assumed -# PlantUML is not used or called during a preprocessing step. Doxygen will -# generate a warning when it encounters a \startuml command in this case and -# will not generate output for the diagram. +# path where java can find the plantuml.jar file or to the filename of jar file +# to be used. If left blank, it is assumed PlantUML is not used or called during +# a preprocessing step. Doxygen will generate a warning when it encounters a +# \startuml command in this case and will not generate output for the diagram. PLANTUML_JAR_PATH = @@ -2545,7 +2779,7 @@ PLANTUML_INCLUDE_PATH = # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes # that will be shown in the graph. If the number of nodes in a graph becomes # larger than this value, doxygen will truncate the graph, which is visualized -# by representing a node as a red box. Note that doxygen if the number of direct +# by representing a node as a red box. Note that if the number of direct # children of the root node in a graph is already larger than # DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that # the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. @@ -2566,18 +2800,6 @@ DOT_GRAPH_MAX_NODES = 200 MAX_DOT_GRAPH_DEPTH = 0 -# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent -# background. This is disabled by default, because dot on Windows does not seem -# to support this out of the box. -# -# Warning: Depending on the platform used, enabling this option may lead to -# badly anti-aliased labels on the edges of a graph (i.e. they become hard to -# read). -# The default value is: NO. -# This tag requires that the tag HAVE_DOT is set to YES. - -DOT_TRANSPARENT = NO - # Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output # files in one run (i.e. multiple -o and -T options on the command line). This # makes dot run faster, but since only newer versions of dot (>1.8.10) support @@ -2590,6 +2812,8 @@ DOT_MULTI_TARGETS = YES # If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page # explaining the meaning of the various boxes and arrows in the dot generated # graphs. +# Note: This tag requires that UML_LOOK isn't set, i.e. the doxygen internal +# graphical representation for inheritance and collaboration diagrams is used. # The default value is: YES. # This tag requires that the tag HAVE_DOT is set to YES. @@ -2598,8 +2822,24 @@ GENERATE_LEGEND = YES # If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate # files that are used to generate the various graphs. # -# Note: This setting is not only used for dot files but also for msc and -# plantuml temporary files. +# Note: This setting is not only used for dot files but also for msc temporary +# files. # The default value is: YES. DOT_CLEANUP = YES + +# You can define message sequence charts within doxygen comments using the \msc +# command. If the MSCGEN_TOOL tag is left empty (the default), then doxygen will +# use a built-in version of mscgen tool to produce the charts. Alternatively, +# the MSCGEN_TOOL tag can also specify the name an external tool. For instance, +# specifying prog as the value, doxygen will call the tool as prog -T +# -o . The external tool should support +# output file formats "png", "eps", "svg", and "ismap". + +MSCGEN_TOOL = + +# The MSCFILE_DIRS tag can be used to specify one or more directories that +# contain msc files that are included in the documentation (see the \mscfile +# command). + +MSCFILE_DIRS = diff --git a/docs/general/changelog.rst b/docs/general/changelog.rst index c82c3347..a0bdcaf1 100644 --- a/docs/general/changelog.rst +++ b/docs/general/changelog.rst @@ -7,32 +7,6 @@ Changelog ######### -.. - Comments: - Axivion is the company that builds the Axivion Bauhaus suite - PEC stands for pack error check - slaveplausibility is the old name of a plausibility module - sym is the file extension of a symbol file - JUnit is a test system (originally for Java) - matcher as in `problem matcher` - Cppcheck is a static program analysis tools - Werror gcc - Wextra gcc - xxxx is the dummy date for x.y.z - -.. spelling:: - Axivion - PEC - slaveplausibility - sym - JUnit - matcher - Cppcheck - Werror - Wextra - xxxx - ba - All notable changes to this project will be documented in this file. |foxbms| uses the following versioning pattern ``MAJOR.MINOR.PATCH`` @@ -48,14 +22,200 @@ Versioning follows then these rules: - increasing ``PATCH`` introduces minor changes, that only require minor and straight forward work to update a project to this version. +******************** +[1.7.0] - 2024-08-08 +******************** + +|foxbms| now ships with a new `venv` environment `2024-08-pale-fox`. +See :ref:`SOFTWARE_INSTALLATION` for information on updating. + +In order to get the unit tests working the Ruby Gems need to the updated. +See :ref:`SOFTWARE_INSTALLATION` for information on installing the Ruby Gems. + +|foxbms| now ships with a set of |code| workspaces that are created at +configuration time: + +- generic: at the root of the repository. + Useful setup for working on the entire repository, but not perfectly setup + for specific tasks (see below what might be suited better). +- ``src``: configured for developing the target/embedded software +- ``tests/unit``: configured for developing the unit tests of the + target/embedded software + +Added +===== + +- Add two can callback functions and an AFE driver to extract the debug cell + temperatures and cell voltages from the related CAN messages and write them + to their relevant database entries. +- Added script to plot periods between CAN messages. +- The CAN driver has been improved. + The implementation of cyclic and asynchronously message is split into + separate files to simplify the maintainability and addition of new messages + (see :ref:`HOW_TO_USE_THE_CAN_MODULE`). +- The implementation of macros that compose a CAN message has been made + consistently (see :ref:`HOW_TO_USE_THE_CAN_MODULE`). +- The ``f_DebugBuildConfiguration`` message was added. + It transmits the contents of the files ``battery_system_cfg.c``, + ``battery_cell_cfg.c`` and ``bms.json``. + It is requested via the ``f_Debug`` message. +- Additional naming conventions have been defined. +- The temperature sensor Semitec 103JT has been implemented. +- Add a short installation summary as markdown document in the repository root + (`INSTALL.md`). + This document shall only serve as a summary while the detailed instructions + are still document at :ref:`SOFTWARE_INSTALLATION`. +- Added energy and charge throughput accumulation in charge and discharge + direction. +- Added more unit tests for ADI ADES1830 AFE driver. + +Changed +======= + +- Changed database definition in struct ``DATA_BLOCK_BALANCING_CONTROL_s`` for + ``balancingState`` and ``deltaCharge_mAs`` from a two-dimensional array + (``xxx[BS_NR_OF_STRINGS][BS_NR_OF_CELL_BLOCKS_PER_STRING]``) to + three-dimensional array + (``xxx[BS_NR_OF_STRINGS][BS_NR_OF_MODULES_PER_STRING][BS_NR_OF_CELL_BLOCKS_PER_MODULE]``). + Renamed ``balancingState`` to ``activateBalancing`` and made it bool. +- Changed the algorithm to activate balancing in |ltc-ltc6813-1|\ -driver. +- Datatype for cell voltage and cell temperature invalid flags has been changed + to boolean (from bit masks). +- Move the interpretation of Bender iso165c can messages from the driver + to the corresponding can callback files and use the ``can_helper`` + functions for the implementation. +- Fix iteration over cell temperature array in ``LTC_InitializeDatabase`` + in the |ltc-ltc6813-1|\ -driver. +- Updated the unit test framework ``Ceedling`` to version ``1.0.0-ba45d2c``. + This fixes the problem, that ``Ceedling`` always exited with error code 0 + despite there were errors. +- Some unit tests for the ADI ADES1830 AFE were broken. + The unit tests do now work as expected. +- Improved documentation. +- Move ``pyproject.toml`` from ``conf/fmt/pyproject.toml`` to the root of the + the repository. +- Renamed defines for NXP PCA9539 port expander pin definitions. +- The definition of the CAN messages has been improved: + + - CAN messages and signals now use a ``f_`` instead of a ``foxBMS_`` prefix. + - Enums are now used for displaying most of the signal values. + - The message definitions have been changed to improve the message layout. + The messages have been changed as follows (an \* for the old message name + and ID indicates, that the message did previously not exist): + + +---------------------------------------+-----------+---------------------------------------+-----------+ + | Old Message Definition | New Message Definition | + +=======================================+===========+=======================================+===========+ + | **Name** | **ID** | **Name** | **ID** | + +---------------------------------------+-----------+---------------------------------------+-----------+ + | ``foxBMS_FatalErrors`` | 0FFh | ``f_CrashDump`` | 0FFh | + +---------------------------------------+-----------+---------------------------------------+-----------+ + | ``foxBMS_BmsStateRequest`` | 230h | ``f_BmsStateRequest`` | 210h | + +---------------------------------------+-----------+---------------------------------------+-----------+ + | ``foxBMS_BmsState`` | 220h | ``f_BmsState`` | 220h | + +---------------------------------------+-----------+---------------------------------------+-----------+ + | ``foxBMS_BmsStateDetails`` | 226h | ``f_BmsStateDetails`` | 221h | + +---------------------------------------+-----------+---------------------------------------+-----------+ + | ``foxBMS_PackMinMaxValues`` | 223h | ``f_PackMinimumMaximumValues`` | 231h | + +---------------------------------------+-----------+---------------------------------------+-----------+ + | ``foxBMS_PackLimits`` | 224h | ``f_PackLimits`` | 232h | + +---------------------------------------+-----------+---------------------------------------+-----------+ + | ``foxBMS_PackValues`` | 222h | ``f_PackValuesP0`` | 233h | + +---------------------------------------+-----------+---------------------------------------+-----------+ + | \* | \* | ``f_PackValuesP1`` | 234h | + +---------------------------------------+-----------+---------------------------------------+-----------+ + | ``foxBMS_CellVoltages`` | 240h | ``f_CellVoltages`` | 250h | + +---------------------------------------+-----------+---------------------------------------+-----------+ + | ``foxBMS_CellTemperatures`` | 250h | ``f_CellTemperatures`` | 260h | + +---------------------------------------+-----------+---------------------------------------+-----------+ + | ``foxBMS_Debug`` | 200h | ``f_Debug`` | 300h | + +---------------------------------------+-----------+---------------------------------------+-----------+ + | ``foxBMS_DebugResponse`` | 227h | ``f_DebugResponse`` | 301h | + +---------------------------------------+-----------+---------------------------------------+-----------+ + | ``foxBMS_PackStateEstimation`` | 225h | ``f_PackStateEstimation`` | 235h | + +---------------------------------------+-----------+---------------------------------------+-----------+ + | ``foxBMS_StringState`` | 221h | ``f_StringState`` | 240h | + +---------------------------------------+-----------+---------------------------------------+-----------+ + | ``foxBMS_StringMinMaxValues`` | 281h | ``f_StringMinimumMaximumValues`` | 241h | + +---------------------------------------+-----------+---------------------------------------+-----------+ + | ``foxBMS_StringValuesP0`` | 280h | ``f_StringValuesP0`` | 243h | + +---------------------------------------+-----------+---------------------------------------+-----------+ + | ``foxBMS_StringValuesP1`` | 283h | ``f_StringValuesP1`` | 244h | + +---------------------------------------+-----------+---------------------------------------+-----------+ + | ``foxBMS_StringStateEstimation`` | 282h | ``f_StringStateEstimation`` | 245h | + +---------------------------------------+-----------+---------------------------------------+-----------+ + | ``foxBMS_CellVoltages`` | 240h | ``f_CellVoltages`` | 250h | + +---------------------------------------+-----------+---------------------------------------+-----------+ + | ``foxBMS_CellTemperatures`` | 250h | ``f_CellTemperatures`` | 260h | + +---------------------------------------+-----------+---------------------------------------+-----------+ + | ``foxBMS_Debug`` | 200h | ``f_Debug`` | 300h | + +---------------------------------------+-----------+---------------------------------------+-----------+ + | ``foxBMS_DebugResponse`` | 227h | ``f_DebugResponse`` | 301h | + +---------------------------------------+-----------+---------------------------------------+-----------+ + | ``foxBMS_PackStateEstimation`` | 225h | ``f_PackStateEstimation`` | 235h | + +---------------------------------------+-----------+---------------------------------------+-----------+ + | ``foxBMS_StringState`` | 221h | ``f_StringState`` | 240h | + +---------------------------------------+-----------+---------------------------------------+-----------+ + | ``foxBMS_StringMinMaxValues`` | 281h | ``f_StringMinimumMaximumValues`` | 241h | + +---------------------------------------+-----------+---------------------------------------+-----------+ + | ``foxBMS_StringValuesP0`` | 280h | ``f_StringValuesP0`` | 243h | + +---------------------------------------+-----------+---------------------------------------+-----------+ + | ``foxBMS_StringValuesP1`` | 283h | ``f_StringValuesP1`` | 244h | + +---------------------------------------+-----------+---------------------------------------+-----------+ + | ``foxBMS_StringStateEstimation`` | 282h | ``f_StringStateEstimation`` | 245h | + +---------------------------------------+-----------+---------------------------------------+-----------+ + | ``foxBMS_CellVoltages`` | 240h | ``f_CellVoltages`` | 250h | + +---------------------------------------+-----------+---------------------------------------+-----------+ + | ``foxBMS_CellTemperatures`` | 250h | ``f_CellTemperatures`` | 260h | + +---------------------------------------+-----------+---------------------------------------+-----------+ + | ``foxBMS_StringState`` | 221h | ``f_StringState`` | 240h | + +---------------------------------------+-----------+---------------------------------------+-----------+ + | ``foxBMS_Debug`` | 200h | ``f_Debug`` | 300h | + +---------------------------------------+-----------+---------------------------------------+-----------+ + | ``foxBMS_DebugResponse`` | 227h | ``f_DebugResponse`` | 301h | + +---------------------------------------+-----------+---------------------------------------+-----------+ + | ``foxBMS_UnsupportedMultiplexerVal`` | 201h | ``f_DebugUnsupportedMultiplexerVal`` | 302h | + +---------------------------------------+-----------+---------------------------------------+-----------+ + +Deprecated +========== + +Removed +======= + +- The GUI has been removed (was implemented in ``tools/gui/*``). + +Fixed +===== + +- Fixed crash in |nxp-mc33775a| driver, which was caused by a wrong stop + condition when iterating over cell voltages in function + ``N775_InitializeDatabase``. +- Fixed bug in |nxp-mc33775a| driver, which caused an out-of-bounce access + when reading out the unique device ID in function ``N775_Enumerate``. +- Fixed bug in |nxp-mc33775a| driver, which caused the daisy-chain to be not + initialized correctly in some cases. No measurement data could be read from + the daisy-chain in these cases. +- Fixed bug in |nxp-mc33775a| driver, which caused the the invalid flags for + cell voltages and cell temperatures to be not set correctly. +- Fixed bug in |nxp-mc33775a| driver, that string voltage was not calculated + correctly. For this reason, diagnosis entry + ``DIAG_ID_PLAUSIBILITY_PACK_VOLTAGE`` was always set. String voltage is now + calculated by adding up the individual valid cell voltage measurements. +- Fixed error in function ``FRAM_ReinitializeAllEntries``, always returned + ``STD_OK``. +- Fixed upper address part calculation from the FRAM address. +- Fixed the Unix time by setting ``RTC_CTIME_YEAR_START`` to 1970. +- Fixed typos. + ******************** [1.6.0] - 2023-10-12 ******************** Starting with this release, |foxbms| now supports the ADI ADES1830 AFE. -This release updates the unit testing framework ``Ceedling`` to 0.32.0-52ba9d2 -and requires an update of Ruby. +This release updates the unit testing framework ``Ceedling`` to +``0.32.0-52ba9d2`` and requires an update of Ruby. To update Ruby and the required Gems see :ref:`ruby_install_and_gem_install`. For information on the unit testing framework see (:ref:`UNIT_TESTS`). @@ -63,7 +223,7 @@ Added ===== - Support for the ADI ADES1830 AFE (see :ref:`ADI_ADES1830`). -- The GUI (:ref:`FOXBMS_2_GUI`) now also displays the *BMS state*. +- The GUI now also displays the *BMS state*. - Documentation of the precharging process (:ref:`PRECHARGING`). - The temperature sensor Vishay NTCLE413E2103F102L has been implemented. - A logging file is created in a post-build process that shows the stack @@ -124,6 +284,8 @@ Changed ``tools\debugger\lauterbach\get_macro_values.py`` script needs to be run. After that, the created file needs to be loaded again in the Lauterbach command line by ``do /build/load_macro_values.cmm``. + - Disabled configuration for Trace32 python API in file + ``tools/debugger/lauterbach/config.t32.cmm.in``. - Renamed driver for *Murata NCU15XH103F6Sxx* temperature sensor to *NCxxxXH103* as the temperature characteristic is identical for multiple @@ -164,7 +326,7 @@ Fixed ******************** |foxbms| now ships with a new conda environment ``2023-02-fennec-fox`` and the -local conda environment needs to be updated (see :numref:`conda_env_update`). +local conda environment needs to be updated. Added ===== @@ -293,7 +455,8 @@ Removed Fixed ===== -- Fixed the hardware readme as it referenced the wrong |master| version. +- Fixed the hardware readme as it referenced the wrong |foxbms-bms-master| + version. - Fixed the regular expression for checking the validity of macro names. - Fixed wrong configured chip select pin for MCU SBC. Chip select 1 instead of chip select 0 was configured. @@ -439,7 +602,7 @@ Fixed Installation instructions are found at :numref:`css_install`. |foxbms| updated to LLVM 13.0.0. -Installation instructions are found at :numref:`llvm_install`. +Installation instructions are found in the LLVM section. Added ===== @@ -581,7 +744,7 @@ Fixed ******************** |foxbms| now ships with a new conda environment ``2021-11-fennec-fox`` and the -local conda environment needs to be updated (see :numref:`conda_env_update`). +local conda environment needs to be updated. Added ===== @@ -676,8 +839,7 @@ Added - Implemented feedback through auxiliary contacts for the contactor driver. - Debug LED is now toggled depending on system state (slow: okay, fast: error) - Added an option to install a pre-commit hook in the repository. - The pre-commit hook runs the guidelines check (see - :ref:`WAF_TOOL_GIT_HOOKS`). + The pre-commit hook runs the guidelines check. - Added a driver module that allows to use the enhanced PWM features of the MCU. - Adapted CAN module to receive/transmit messages either via CAN1 or CAN2. @@ -744,22 +906,22 @@ Added - Added minimal documentation for Axivion setup. - Improved the Axivion configuration: - * use ``FAS_ASSERT`` as assert macro in order to be compliant with the style + - use ``FAS_ASSERT`` as assert macro in order to be compliant with the style guide - * fix some includes (library-inclusions and unnecessary inclusions) - * adds the Axivion example for race condition analysis and a minimal + - fix some includes (library-inclusions and unnecessary inclusions) + - adds the Axivion example for race condition analysis and a minimal configuration of entry points - * updates ``.axivion.preinc`` with missing symbols - * makes cafeCC point to the right compiler library - * excludes vendored code from analysis - * disables all naming conventions (as they are currently not configured and + - updates ``.axivion.preinc`` with missing symbols + - makes cafeCC point to the right compiler library + - excludes vendored code from analysis + - disables all naming conventions (as they are currently not configured and thus horribly noisy) - * disables the NoImplicitTypeConversion check as it is very noisy and better + - disables the NoImplicitTypeConversion check as it is very noisy and better done with appropriate MISRA rules - * detect unsafe variable access by defining task priorities - * make Axivion less noisy, by disabling unused style-checks. - * Made rules for loop-counter variables more strict. - * enabling more detailed computation of findings (Abstract Interpretation in + - detect unsafe variable access by defining task priorities + - make Axivion less noisy, by disabling unused style-checks. + - Made rules for loop-counter variables more strict. + - enabling more detailed computation of findings (Abstract Interpretation in Static Semantic Analysis). Changed @@ -822,7 +984,7 @@ configured in ``conf/env/paths_win32.txt``. For installation instructions see :numref:`css_install`. |foxbms| now ships with a new conda environment ``2021-08-arctic-fox`` and the -local conda environment needs to be updated (see :numref:`conda_env_update`). +local conda environment needs to be updated. Added ===== @@ -879,7 +1041,7 @@ Changed - Reorganized the compiler tests in ``tests/ccs/*``. - Updated the development conda environment to ``2021-06-arctic-fox``. Please run the ``conda-update-env.bat`` script in order to update your local - environment (see :numref:`conda_env_update`). + environment. - CAN callback functions are now defined in separate files to increase readability. - Ring buffer for CAN RX was replaced by a |freertos| queue. A DIAG entry was diff --git a/docs/general/commit-msgs/release-v1.7.0.txt b/docs/general/commit-msgs/release-v1.7.0.txt new file mode 100644 index 00000000..86678b9e --- /dev/null +++ b/docs/general/commit-msgs/release-v1.7.0.txt @@ -0,0 +1,30 @@ +Minor release of foxBMS 2 (v1.7.0) + +The installation process and the overall tooling has been simplified. +foxBMS 2 now ships with a new 'venv' environment named '2024-08-pale-fox'. +See INSTALLATION.md for information on updating the toolchain. + +**The CAN message IDs and some internal definitions have been changed.** + +* The defintion and layout of the CAN messages has been improved and required + some changes. + This is a incompatible change, i.e., control software needs to be adapted in + order to correctly communicate with the BMS. + See the changelog and documentation for details. +* Fixed several bugs in NXP MC33775A driver: + - which was caused by a wrong stop condition when iterating over cell + voltages in function 'N775_InitializeDatabase'. + - which caused an out-of-bounce access when reading out the unique device ID + in function 'N775_Enumerate'. + - which caused the daisy-chain to be not initialized correctly in some cases. + No measurement data could be read from the daisy-chain in these cases. +* Unit tests of the ADI ADES1830 AFE driver have been improved. +* Toolchain updates (see INSTALLATION.md on how to update): + - The Python dependencies have been updated. + - Ceedling has been updated to 1.0.0-ba45d2c. + - The Ruby Gems required for ceedling have been updated. + - The VS Code workspaces have been improved for a better developed + experience. + +For a detailed list of changes, please refer to the documentation at +https://iisb-foxbms.iisb.fraunhofer.de/foxbms/gen2/docs/html/v1.7.0/general/changelog.html. diff --git a/docs/general/license-tables/license-info_ceedling.csv b/docs/general/license-tables/license-info_ceedling.csv index 9db5c8ba..10a0c0b7 100644 --- a/docs/general/license-tables/license-info_ceedling.csv +++ b/docs/general/license-tables/license-info_ceedling.csv @@ -1,6 +1,6 @@ Location in repository; ``./tools/vendor/ceedling`` License ; MIT-like License -License URL ; https://github.com/ThrowTheSwitch/Ceedling/blob/v0.31.1/license.txt -Latest license check ; 2021-07-21 +License file ; ``./tools/vendor/ceedling/license.txt`` +Latest license check ; 2024-07-08 Website ; https://github.com/ThrowTheSwitch/Ceedling Gem ; https://rubygems.org/gems/ceedling diff --git a/docs/general/license-tables/license-info_freertos.csv b/docs/general/license-tables/license-info_freertos.csv index 89c5ba30..6c36e82e 100644 --- a/docs/general/license-tables/license-info_freertos.csv +++ b/docs/general/license-tables/license-info_freertos.csv @@ -1,6 +1,7 @@ Location in repository; ``./src/os/freertos`` License ; MIT License SPDX short identifier ; MIT +License file ; ``./src/os/freertos/LICENSE.md`` License URL ; https://www.freertos.org/a00114.html Latest license check ; 2022-01-17 Website ; https://www.freertos.org/ diff --git a/docs/general/license-tables/license-info_llvm.csv b/docs/general/license-tables/license-info_llvm.csv deleted file mode 100644 index 551233ce..00000000 --- a/docs/general/license-tables/license-info_llvm.csv +++ /dev/null @@ -1,5 +0,0 @@ -License ; LLVM Exceptions to the Apache 2.0 License -SPDX short identifier; LLVM-exception -License URL ; https://releases.llvm.org/13.0.0/LICENSE.TXT -Latest license check ; 2022-11-11 -Website ; https://llvm.org/ diff --git a/docs/general/license-tables/license-info_miniconda.csv b/docs/general/license-tables/license-info_miniconda.csv deleted file mode 100644 index 8452d65c..00000000 --- a/docs/general/license-tables/license-info_miniconda.csv +++ /dev/null @@ -1,5 +0,0 @@ -License ; 3-clause BSD -SPDX short identifier; BSD-3-Clause -License URL ; https://docs.conda.io/en/latest/license.html -Latest license check ; 2020-06-23 -Website ; https://docs.conda.io/en/latest/miniconda.html diff --git a/docs/general/license-tables/license-info_packages-conda-env-linux.csv b/docs/general/license-tables/license-info_packages-conda-env-linux.csv deleted file mode 100644 index dedcb09d..00000000 --- a/docs/general/license-tables/license-info_packages-conda-env-linux.csv +++ /dev/null @@ -1,197 +0,0 @@ -Name; Version; Build; Channel; License; Latest license check -_libgcc_mutex; 0.1; main; defaults; \-; 2021-07-26 -_openmp_mutex; 4.5; 1_gnu; defaults; BSD-3-Clause; 2021-07-26 -alabaster; 0.7.12; pypi_0; pypi; BSD License; 2021-11-15 -appdirs; 1.4.4; pypi_0; pypi; MIT License; 2021-11-15 -argon2-cffi; 21.1.0; pypi_0; pypi; MIT License; 2021-11-15 -argparse-addons; 0.7.0; pypi_0; pypi; MIT License; 2021-11-15 -arpeggio; 1.10.2; pypi_0; pypi; MIT License; 2021-11-15 -astroid; 2.8.4; pypi_0; pypi; GNU Lesser General Public License v2 (LGPLv2); 2021-11-15 -attrs; 21.2.0; pypi_0; pypi; MIT License; 2021-11-15 -babel; 2.9.1; pypi_0; pypi; BSD License; 2021-11-15 -backcall; 0.2.0; pypi_0; pypi; BSD License; 2021-11-15 -beautifulsoup4; 4.10.0; pypi_0; pypi; MIT License; 2021-11-15 -bitstruct; 8.11.1; pypi_0; pypi; MIT License; 2021-11-15 -black; 21.10b0; pypi_0; pypi; MIT License; 2021-11-15 -bleach; 4.1.0; pypi_0; pypi; Apache Software License; 2021-11-15 -bokeh; 2.4.1; pypi_0; pypi; BSD License; 2021-11-15 -bottle; 0.12.19; pypi_0; pypi; MIT License; 2021-11-15 -ca-certificates; 2021.10.26; h06a4308_2; defaults; MPL 2.0; 2021-07-26 -cantools; 36.5.0; pypi_0; pypi; MIT License; 2021-11-15 -certifi; 2021.10.8; py39h06a4308_0; defaults; Mozilla Public License 2.0 (MPL 2.0); 2021-11-15 -cffconvert; 2.0.0; pypi_0; pypi; Apache Software License; 2021-11-15 -cffi; 1.15.0; pypi_0; pypi; MIT License; 2021-11-15 -charset-normalizer; 2.0.7; pypi_0; pypi; MIT License; 2021-11-15 -click; 8.0.3; pypi_0; pypi; BSD License; 2021-11-15 -cloudpickle; 2.0.0; pypi_0; pypi; BSD License; 2021-11-15 -colorama; 0.4.4; pypi_0; pypi; BSD License; 2021-11-15 -coverage; 6.1.1; pypi_0; pypi; Apache Software License; 2021-11-15 -crcmod; 1.7; pypi_0; pypi; MIT License; 2021-11-15 -cycler; 0.11.0; pypi_0; pypi; BSD License; 2021-11-15 -dask; 2021.11.1; pypi_0; pypi; BSD License; 2021-11-15 -debugpy; 1.5.1; pypi_0; pypi; Eclipse Public License 2.0 (EPL-2.0), MIT License; 2021-11-15 -decorator; 5.1.0; pypi_0; pypi; BSD License; 2021-11-15 -defusedxml; 0.7.1; pypi_0; pypi; Python Software Foundation License; 2021-11-15 -diskcache; 5.2.1; pypi_0; pypi; Apache Software License; 2021-11-15 -docopt; 0.6.2; pypi_0; pypi; MIT License; 2021-11-15 -docutils; 0.16; pypi_0; pypi; BSD License, GNU General Public License (GPL), Public Domain, Python Software Foundation License;2021-11-15 -entrypoints; 0.3; pypi_0; pypi; MIT License; 2021-11-15 -et-xmlfile; 1.1.0; pypi_0; pypi; MIT License; 2021-11-15 -filterpy; 1.4.5; pypi_0; pypi; MIT License; 2021-11-15 -fsspec; 2021.11.0; pypi_0; pypi; BSD License; 2021-11-15 -gcovr; 5.0; pypi_0; pypi; BSD License; 2021-11-15 -gitdb; 4.0.9; pypi_0; pypi; BSD License; 2021-11-15 -gitpython; 3.1.24; pypi_0; pypi; BSD License; 2021-11-15 -gprof2dot; 2021.2.21; pypi_0; pypi; GNU Lesser General Public License v3 or later (LGPLv3+); 2021-11-15 -httplib2; 0.20.2; pypi_0; pypi; MIT License; 2021-11-15 -idna; 3.3; pypi_0; pypi; BSD License; 2021-11-15 -imagesize; 1.3.0; pypi_0; pypi; MIT License; 2021-11-15 -ipykernel; 6.5.0; pypi_0; pypi; BSD License; 2021-11-15 -ipython; 7.29.0; pypi_0; pypi; BSD License; 2021-11-15 -ipython-genutils; 0.2.0; pypi_0; pypi; BSD License; 2021-11-15 -ipywidgets; 7.6.5; pypi_0; pypi; BSD License; 2021-11-15 -isort; 5.10.1; pypi_0; pypi; MIT License; 2021-11-15 -jdcal; 1.4.1; pypi_0; pypi; BSD License; 2021-11-15 -jedi; 0.18.0; pypi_0; pypi; MIT License; 2021-11-15 -jinja2; 2.11.3; pypi_0; pypi; BSD License; 2021-11-15 -joblib; 1.1.0; pypi_0; pypi; BSD License; 2021-11-15 -jsonschema; 3.2.0; pypi_0; pypi; MIT License; 2021-11-15 -jupyter; 1.0.0; pypi_0; pypi; BSD License; 2021-11-15 -jupyter-client; 7.0.6; pypi_0; pypi; BSD License; 2021-11-15 -jupyter-console; 6.4.0; pypi_0; pypi; BSD License; 2021-11-15 -jupyter-core; 4.9.1; pypi_0; pypi; BSD License; 2021-11-15 -jupyterlab-pygments; 0.1.2; pypi_0; pypi; BSD; 2021-11-15 -jupyterlab-widgets; 1.0.2; pypi_0; pypi; BSD License; 2021-11-15 -kiwisolver; 1.3.2; pypi_0; pypi; BSD License; 2021-11-15 -latexcodec; 2.0.1; pypi_0; pypi; MIT License; 2021-11-15 -lazy-object-proxy; 1.6.0; pypi_0; pypi; BSD License; 2021-11-15 -ld_impl_linux-64; 2.35.1; h7274673_9; defaults; GPL-3.0-only; 2021-07-26 -libffi; 3.3; he6710b0_2; defaults; https://github.com/libffi/libffi/blob/07f826fdd4d8a23a190f107f7ec6ad830a4864a0/LICENSE;2021-07-26 -libgcc-ng; 9.3.0; h5101ec6_17; defaults; GPL-3.0-only WITH GCC-exception-3.1; 2021-07-26 -libgomp; 9.3.0; h5101ec6_17; defaults; GPL-3.0-only WITH GCC-exception-3.1; 2021-07-26 -libstdcxx-ng; 9.3.0; hd4cf53a_17; defaults; GPL-3.0-only WITH GCC-exception-3.1; 2021-07-26 -locket; 0.2.1; pypi_0; pypi; BSD License; 2021-11-15 -lxml; 4.6.4; pypi_0; pypi; BSD License; 2021-11-15 -markdown; 3.3.4; pypi_0; pypi; BSD License; 2021-11-15 -markupsafe; 2.0.1; pypi_0; pypi; BSD License; 2021-11-15 -matplotlib; 3.4.3; pypi_0; pypi; Python Software Foundation License; 2021-11-15 -matplotlib-inline; 0.1.3; pypi_0; pypi; BSD 3-Clause; 2021-11-15 -mccabe; 0.6.1; pypi_0; pypi; MIT License; 2021-11-15 -mistune; 0.8.4; pypi_0; pypi; BSD License; 2021-11-15 -msgpack; 1.0.2; pypi_0; pypi; Apache Software License; 2021-11-15 -mypy; 0.910; pypi_0; pypi; MIT License; 2021-11-15 -mypy-extensions; 0.4.3; pypi_0; pypi; MIT License; 2021-11-15 -nbclient; 0.5.5; pypi_0; pypi; BSD License; 2021-11-15 -nbconvert; 6.2.0; pypi_0; pypi; BSD License; 2021-11-15 -nbformat; 5.1.3; pypi_0; pypi; BSD License; 2021-11-15 -ncurses; 6.3; heee7806_1; defaults; Free software (MIT-like); 2021-07-26 -nest-asyncio; 1.5.1; pypi_0; pypi; BSD License; 2021-11-15 -notebook; 6.4.5; pypi_0; pypi; BSD License; 2021-11-15 -numpy; 1.22.4; pypi_0; pypi; BSD License; 2023-02-23 -openpyxl; 2.6.4; pypi_0; pypi; MIT License; 2021-11-15 -openssl; 1.1.1l; h7f8727e_0; defaults; OpenSSL; 2021-07-26 -packaging; 21.2; pypi_0; pypi; Apache Software License, BSD License; 2021-11-15 -pandas; 1.3.4; pypi_0; pypi; BSD License; 2021-11-15 -pandas-stubs; 1.2.0.37; pypi_0; pypi; MIT License; 2021-11-15 -pandoc; 2.12; h06a4308_0; defaults; GPL-2.0; 2021-07-26 -pandocfilters; 1.5.0; pypi_0; pypi; BSD License; 2021-11-15 -parso; 0.8.2; pypi_0; pypi; MIT License; 2021-11-15 -partd; 1.2.0; pypi_0; pypi; BSD; 2021-11-15 -pathspec; 0.9.0; pypi_0; pypi; Mozilla Public License 2.0 (MPL 2.0); 2021-11-15 -patsy; 0.5.2; pypi_0; pypi; BSD License; 2021-11-15 -pexpect; 4.8.0; pypi_0; pypi; ISC License (ISCL); 2021-11-15 -pickleshare; 0.7.5; pypi_0; pypi; MIT License; 2021-11-15 -pillow; 8.4.0; pypi_0; pypi; Historical Permission Notice and Disclaimer (HPND); 2021-11-15 -pip; 21.2.4; py39h06a4308_0; defaults; MIT; 2021-07-26 -pip-licenses; 3.5.3; pypi_0; pypi; MIT License (MIT License); 2021-07-26 -plantuml; 0.3.0; pypi_0; pypi; BSD License; 2021-11-15 -plantuml-markdown; 3.4.4; pypi_0; pypi; MIT License; 2021-11-15 -platformdirs; 2.4.0; pypi_0; pypi; MIT License; 2021-11-15 -prometheus-client; 0.12.0; pypi_0; pypi; Apache Software License; 2021-11-15 -prompt-toolkit; 3.0.22; pypi_0; pypi; BSD License; 2021-11-15 -psutil; 5.8.0; pypi_0; pypi; BSD License; 2021-11-15 -ptable; 0.9.2; pypi_0; pypi; BSD License (BSD (3 clause)); 2021-07-26 -ptyprocess; 0.7.0; pypi_0; pypi; ISC License (ISCL); 2021-11-15 -pybtex; 0.24.0; pypi_0; pypi; MIT License; 2021-11-15 -pybtex-docutils; 1.0.1; pypi_0; pypi; MIT License; 2021-11-15 -pycparser; 2.21; pypi_0; pypi; BSD License; 2021-11-15 -pyenchant; 3.2.2; pypi_0; pypi; GNU Library or Lesser General Public License (LGPL); 2021-11-15 -pygments; 2.10.0; pypi_0; pypi; BSD License; 2021-11-15 -pykwalify; 1.8.0; pypi_0; pypi; MIT License; 2021-11-15 -pylint; 2.11.1; pypi_0; pypi; GNU General Public License v2 (GPLv2); 2021-11-15 -pyparsing; 2.4.7; pypi_0; pypi; MIT License; 2021-11-15 -pyrsistent; 0.18.0; pypi_0; pypi; MIT License; 2021-11-15 -pyserial; 3.5; pypi_0; pypi; BSD License; 2021-11-15 -pysimplegui; 4.55.1; pypi_0; pypi; GNU Lesser General Public License v3 or later (LGPLv3+); 2021-11-15 -python; 3.9.7; h12debd9_1; defaults; PSF; 2021-07-26 -python-can; 4.0.0.dev2; pypi_0; pypi; GNU Lesser General Public License v3 (LGPLv3); 2021-11-15 -python-datauri; 0.2.9; pypi_0; pypi; MIT License; 2021-11-15 -python-dateutil; 2.8.2; pypi_0; pypi; Apache Software License, BSD License; 2021-11-15 -python-lin; 0.1.1; pypi_0; pypi; MIT; 2021-11-15 -python-markdown-math; 0.6; pypi_0; pypi; BSD; 2021-11-15 -python-uds; 1.0.2; pypi_0; pypi; MIT; 2021-11-15 -pytz; 2021.3; pypi_0; pypi; MIT License; 2021-11-15 -pyvisa; 1.11.3; pypi_0; pypi; MIT License; 2021-11-15 -pyyaml; 5.4.1; pypi_0; pypi; MIT License; 2021-11-15 -pyzmq; 22.3.0; pypi_0; pypi; BSD License, GNU Library or Lesser General Public License (LGPL); 2021-11-15 -qtconsole; 5.2.0; pypi_0; pypi; BSD License; 2021-11-15 -qtpy; 1.11.2; pypi_0; pypi; MIT License; 2021-11-15 -readline; 8.1; h27cfd23_0; defaults; GPL-3.0; 2021-07-26 -regex; 2021.11.10; pypi_0; pypi; Apache Software License; 2021-11-15 -requests; 2.26.0; pypi_0; pypi; Apache Software License; 2021-11-15 -requests-file; 1.5.1; pypi_0; pypi; Apache Software License; 2021-11-15 -rope; 0.21.0; pypi_0; pypi; GNU Lesser General Public License v3 or later (LGPLv3+); 2021-11-15 -rsinstrument; 1.19.0.75; pypi_0; pypi; MIT License; 2021-11-15 -ruamel-yaml; 0.17.17; pypi_0; pypi; MIT License; 2021-11-15 -ruamel-yaml-clib; 0.2.6; pypi_0; pypi; MIT License; 2021-11-15 -scipy; 1.7.2; pypi_0; pypi; BSD License; 2021-11-15 -seaborn; 0.11.2; pypi_0; pypi; BSD License; 2021-11-15 -send2trash; 1.8.0; pypi_0; pypi; BSD License; 2021-11-15 -setuptools; 58.0.4; py39h06a4308_0; defaults; MIT; 2021-07-26 -six; 1.16.0; pypi_0; pypi; MIT License; 2021-11-15 -smmap; 5.0.0; pypi_0; pypi; BSD License; 2021-11-15 -snowballstemmer; 2.1.0; pypi_0; pypi; BSD License; 2021-11-15 -soupsieve; 2.3; pypi_0; pypi; MIT License; 2021-11-15 -sphinx; 4.3.0; pypi_0; pypi; BSD License; 2021-11-15 -sphinx-copybutton; 0.3.3; pypi_0; pypi; MIT License; 2021-11-15 -sphinx-panels; 0.6.0; pypi_0; pypi; MIT License; 2021-11-15 -sphinx-rtd-theme; 1.0.0; pypi_0; pypi; MIT License; 2021-11-15 -sphinxcontrib-applehelp; 1.0.2; pypi_0; pypi; BSD License; 2021-11-15 -sphinxcontrib-bibtex; 2.4.1; pypi_0; pypi; BSD License; 2021-11-15 -sphinxcontrib-devhelp; 1.0.2; pypi_0; pypi; BSD License; 2021-11-15 -sphinxcontrib-htmlhelp; 2.0.0; pypi_0; pypi; BSD License; 2021-11-15 -sphinxcontrib-jsmath; 1.0.1; pypi_0; pypi; BSD License; 2021-11-15 -sphinxcontrib-mermaid; 0.7.1; pypi_0; pypi; BSD License; 2021-11-15 -sphinxcontrib-plantuml; 0.21; pypi_0; pypi; BSD License; 2021-11-15 -sphinxcontrib-programoutput; 0.17; pypi_0; pypi; BSD License; 2021-11-15 -sphinxcontrib-qthelp; 1.0.3; pypi_0; pypi; BSD License; 2021-11-15 -sphinxcontrib-serializinghtml; 1.1.5; pypi_0; pypi; BSD License; 2021-11-15 -sphinxcontrib-spelling; 7.2.1; pypi_0; pypi; BSD License; 2021-11-15 -sqlite; 3.36.0; hc218d9a_0; defaults; Public-Domain (http://www.sqlite.org/copyright.html); 2021-07-26 -statsmodels; 0.13.0; pypi_0; pypi; BSD License; 2021-11-15 -tabulate; 0.8.9; pypi_0; pypi; MIT License; 2021-11-15 -tenacity; 8.0.1; pypi_0; pypi; Apache Software License; 2021-11-15 -terminado; 0.12.1; pypi_0; pypi; BSD License; 2021-11-15 -testpath; 0.5.0; pypi_0; pypi; BSD License; 2021-11-15 -textparser; 0.23.0; pypi_0; pypi; MIT License; 2021-11-15 -textx; 2.3.0; pypi_0; pypi; MIT License; 2021-11-15 -threadpoolctl; 3.0.0; pypi_0; pypi; BSD License; 2021-11-15 -tk; 8.6.11; h1ccaba5_0; defaults; Tcl/Tk; 2021-07-26 -toml; 0.10.2; pypi_0; pypi; MIT License; 2021-11-15 -tomli; 1.2.2; pypi_0; pypi; MIT License; 2021-11-15 -toolz; 0.11.2; pypi_0; pypi; BSD License; 2021-11-15 -tornado; 6.1; pypi_0; pypi; Apache Software License; 2021-11-15 -traitlets; 5.1.1; pypi_0; pypi; BSD License; 2021-11-15 -typing-extensions; 3.10.0.2; pypi_0; pypi; Python Software Foundation License; 2021-11-15 -tzdata; 2021e; hda174b7_0; defaults; Apache-2.0; 2021-07-26 -uptime; 3.0.1; pypi_0; pypi; BSD License; 2021-11-15 -urllib3; 1.26.7; pypi_0; pypi; MIT License; 2021-11-15 -wcwidth; 0.2.5; pypi_0; pypi; MIT License; 2021-11-15 -webencodings; 0.5.1; pypi_0; pypi; BSD License; 2021-11-15 -wheel; 0.37.0; pyhd3eb1b0_1; defaults; MIT; 2021-07-26 -widgetsnbextension; 3.5.2; pypi_0; pypi; BSD License; 2021-11-15 -wrapt; 1.13.3; pypi_0; pypi; BSD License; 2021-11-15 -wxpython; 4.1.1; pypi_0; pypi; wxWindows Library License (https://opensource.org/licenses/wxwindows.php); 2021-11-15 -xlsxwriter; 1.4.5; pypi_0; pypi; BSD License; 2021-11-15 -xz; 5.2.5; h7b6447c_0; defaults; LGPL-2.1 and GPL-2.0; 2021-07-26 -zlib; 1.2.11; h7b6447c_3; defaults; zlib; 2021-07-26 diff --git a/docs/general/license-tables/license-info_packages-conda-env-win32.csv b/docs/general/license-tables/license-info_packages-conda-env-win32.csv deleted file mode 100644 index b0dcb15e..00000000 --- a/docs/general/license-tables/license-info_packages-conda-env-win32.csv +++ /dev/null @@ -1,194 +0,0 @@ -Name; Version; Build; Channel; License; Latest license check -alabaster; 0.7.12; pypi_0; pypi; BSD License; 2021-11-15 -appdirs; 1.4.4; pypi_0; pypi; MIT License; 2021-11-15 -argon2-cffi; 21.1.0; pypi_0; pypi; MIT License; 2021-11-15 -argparse-addons; 0.7.0; pypi_0; pypi; MIT License; 2021-11-15 -arpeggio; 1.10.2; pypi_0; pypi; MIT License; 2021-11-15 -astroid; 2.8.4; pypi_0; pypi; GNU Lesser General Public License v2 (LGPLv2); 2021-11-15 -attrs; 21.2.0; pypi_0; pypi; MIT License; 2021-11-15 -babel; 2.9.1; pypi_0; pypi; BSD License; 2021-11-15 -backcall; 0.2.0; pypi_0; pypi; BSD License; 2021-11-15 -beautifulsoup4; 4.10.0; pypi_0; pypi; MIT License; 2021-11-15 -bitstruct; 8.11.1; pypi_0; pypi; MIT License; 2021-11-15 -black; 21.10b0; pypi_0; pypi; MIT License; 2021-11-15 -bleach; 4.1.0; pypi_0; pypi; Apache Software License; 2021-11-15 -bokeh; 2.4.1; pypi_0; pypi; BSD License; 2021-11-15 -bottle; 0.12.19; pypi_0; pypi; MIT License; 2021-11-15 -ca-certificates; 2021.10.26; haa95532_2; defaults; MPL 2.0; 2021-07-26 -cantools; 36.5.0; pypi_0; pypi; MIT License; 2021-11-15 -certifi; 2021.10.8; py39haa95532_0; defaults; Mozilla Public License 2.0 (MPL 2.0); 2021-11-15 -cffconvert; 2.0.0; pypi_0; pypi; Apache Software License; 2021-11-15 -cffi; 1.15.0; pypi_0; pypi; MIT License; 2021-11-15 -charset-normalizer; 2.0.7; pypi_0; pypi; MIT License; 2021-11-15 -click; 8.0.3; pypi_0; pypi; BSD License; 2021-11-15 -cloudpickle; 2.0.0; pypi_0; pypi; BSD License; 2021-11-15 -colorama; 0.4.4; pypi_0; pypi; BSD License; 2021-11-15 -console_shortcut; 0.1.1; 4; defaults; BSD; 2021-07-26 -coverage; 6.1.1; pypi_0; pypi; Apache Software License; 2021-11-15 -crcmod; 1.7; pypi_0; pypi; MIT License; 2021-11-15 -cycler; 0.11.0; pypi_0; pypi; BSD License; 2021-11-15 -dask; 2021.11.1; pypi_0; pypi; BSD License; 2021-11-15 -debugpy; 1.5.1; pypi_0; pypi; Eclipse Public License 2.0 (EPL-2.0), MIT License; 2021-11-15 -decorator; 5.1.0; pypi_0; pypi; BSD License; 2021-11-15 -defusedxml; 0.7.1; pypi_0; pypi; Python Software Foundation License; 2021-11-15 -diskcache; 5.2.1; pypi_0; pypi; Apache Software License; 2021-11-15 -docopt; 0.6.2; pypi_0; pypi; MIT License; 2021-11-15 -docutils; 0.16; pypi_0; pypi; BSD License, GNU General Public License (GPL), Public Domain, Python Software Foundation License;2021-11-15 -doxygen; 1.9.1; 1; foxbms; GPLv2; 2021-07-26 -entrypoints; 0.3; pypi_0; pypi; MIT License; 2021-11-15 -et-xmlfile; 1.1.0; pypi_0; pypi; MIT License; 2021-11-15 -filterpy; 1.4.5; pypi_0; pypi; MIT License; 2021-11-15 -fsspec; 2021.11.0; pypi_0; pypi; BSD License; 2021-11-15 -gcovr; 5.0; pypi_0; pypi; BSD License; 2021-11-15 -gitdb; 4.0.9; pypi_0; pypi; BSD License; 2021-11-15 -gitpython; 3.1.24; pypi_0; pypi; BSD License; 2021-11-15 -gprof2dot; 2021.2.21; pypi_0; pypi; GNU Lesser General Public License v3 or later (LGPLv3+); 2021-11-15 -graphviz; 2.38; hfd603c8_2; defaults; EPL v1.0; 2021-07-26 -httplib2; 0.20.2; pypi_0; pypi; MIT License; 2021-11-15 -idna; 3.3; pypi_0; pypi; BSD License; 2021-11-15 -imagesize; 1.3.0; pypi_0; pypi; MIT License; 2021-11-15 -ipykernel; 6.5.0; pypi_0; pypi; BSD License; 2021-11-15 -ipython; 7.29.0; pypi_0; pypi; BSD License; 2021-11-15 -ipython-genutils; 0.2.0; pypi_0; pypi; BSD License; 2021-11-15 -ipywidgets; 7.6.5; pypi_0; pypi; BSD License; 2021-11-15 -isort; 5.10.1; pypi_0; pypi; MIT License; 2021-11-15 -jdcal; 1.4.1; pypi_0; pypi; BSD License; 2021-11-15 -jedi; 0.18.0; pypi_0; pypi; MIT License; 2021-11-15 -jinja2; 2.11.3; pypi_0; pypi; BSD License; 2021-11-15 -joblib; 1.1.0; pypi_0; pypi; BSD License; 2021-11-15 -jsonschema; 3.2.0; pypi_0; pypi; MIT License; 2021-11-15 -jupyter; 1.0.0; pypi_0; pypi; BSD License; 2021-11-15 -jupyter-client; 7.0.6; pypi_0; pypi; BSD License; 2021-11-15 -jupyter-console; 6.4.0; pypi_0; pypi; BSD License; 2021-11-15 -jupyter-core; 4.9.1; pypi_0; pypi; BSD License; 2021-11-15 -jupyterlab-pygments; 0.1.2; pypi_0; pypi; BSD; 2021-11-15 -jupyterlab-widgets; 1.0.2; pypi_0; pypi; BSD License; 2021-11-15 -kiwisolver; 1.3.2; pypi_0; pypi; BSD License; 2021-11-15 -latexcodec; 2.0.1; pypi_0; pypi; MIT License; 2021-11-15 -lazy-object-proxy; 1.6.0; pypi_0; pypi; BSD License; 2021-11-15 -locket; 0.2.1; pypi_0; pypi; BSD License; 2021-11-15 -lxml; 4.6.4; pypi_0; pypi; BSD License; 2021-11-15 -markdown; 3.3.4; pypi_0; pypi; BSD License; 2021-11-15 -markupsafe; 2.0.1; pypi_0; pypi; BSD License; 2021-11-15 -matplotlib; 3.4.3; pypi_0; pypi; Python Software Foundation License; 2021-11-15 -matplotlib-inline; 0.1.3; pypi_0; pypi; BSD 3-Clause; 2021-11-15 -mccabe; 0.6.1; pypi_0; pypi; MIT License; 2021-11-15 -mistune; 0.8.4; pypi_0; pypi; BSD License; 2021-11-15 -mypy; 0.910; pypi_0; pypi; MIT License; 2021-11-15 -mypy-extensions; 0.4.3; pypi_0; pypi; MIT License; 2021-11-15 -nbclient; 0.5.5; pypi_0; pypi; BSD License; 2021-11-15 -nbconvert; 6.2.0; pypi_0; pypi; BSD License; 2021-11-15 -nbformat; 5.1.3; pypi_0; pypi; BSD License; 2021-11-15 -nest-asyncio; 1.5.1; pypi_0; pypi; BSD License; 2021-11-15 -notebook; 6.4.5; pypi_0; pypi; BSD License; 2021-11-15 -numpy; 1.22.4; pypi_0; pypi; BSD License; 2023-02-23 -openpyxl; 2.6.4; pypi_0; pypi; MIT License; 2021-11-15 -openssl; 1.1.1l; h2bbff1b_0; defaults; OpenSSL; 2021-07-26 -packaging; 21.2; pypi_0; pypi; Apache Software License, BSD License; 2021-11-15 -pandas; 1.3.4; pypi_0; pypi; BSD License; 2021-11-15 -pandas-stubs; 1.2.0.37; pypi_0; pypi; MIT License; 2021-11-15 -pandoc; 2.12; haa95532_0; defaults; GPL-2.0; 2021-07-26 -pandocfilters; 1.5.0; pypi_0; pypi; BSD License; 2021-11-15 -parso; 0.8.2; pypi_0; pypi; MIT License; 2021-11-15 -partd; 1.2.0; pypi_0; pypi; BSD; 2021-11-15 -pathspec; 0.9.0; pypi_0; pypi; Mozilla Public License 2.0 (MPL 2.0); 2021-11-15 -patsy; 0.5.2; pypi_0; pypi; BSD License; 2021-11-15 -pickleshare; 0.7.5; pypi_0; pypi; MIT License; 2021-11-15 -pillow; 8.4.0; pypi_0; pypi; Historical Permission Notice and Disclaimer (HPND); 2021-11-15 -pip; 21.2.4; py39haa95532_0; defaults; MIT; 2021-07-26 -pip-licenses; 3.5.3; pypi_0; pypi; MIT License (MIT License); 2021-07-26 -plantuml; 0.3.0; pypi_0; pypi; BSD License; 2021-11-15 -plantuml-markdown; 3.4.4; pypi_0; pypi; MIT License; 2021-11-15 -platformdirs; 2.4.0; pypi_0; pypi; MIT License; 2021-11-15 -powershell_shortcut; 0.0.1; 3; defaults; BSD; 2021-07-26 -prometheus-client; 0.12.0; pypi_0; pypi; Apache Software License; 2021-11-15 -prompt-toolkit; 3.0.22; pypi_0; pypi; BSD License; 2021-11-15 -psutil; 5.8.0; pypi_0; pypi; BSD License; 2021-11-15 -ptable; 0.9.2; pypi_0; pypi; BSD License (BSD (3 clause)); 2021-07-26 -pybtex; 0.24.0; pypi_0; pypi; MIT License; 2021-11-15 -pybtex-docutils; 1.0.1; pypi_0; pypi; MIT License; 2021-11-15 -pycparser; 2.21; pypi_0; pypi; BSD License; 2021-11-15 -pyenchant; 3.2.2; pypi_0; pypi; GNU Library or Lesser General Public License (LGPL); 2021-11-15 -pygments; 2.10.0; pypi_0; pypi; BSD License; 2021-11-15 -pykwalify; 1.8.0; pypi_0; pypi; MIT License; 2021-11-15 -pylint; 2.11.1; pypi_0; pypi; GNU General Public License v2 (GPLv2); 2021-11-15 -pyparsing; 2.4.7; pypi_0; pypi; MIT License; 2021-11-15 -pyrsistent; 0.18.0; pypi_0; pypi; MIT License; 2021-11-15 -pyserial; 3.5; pypi_0; pypi; BSD License; 2021-11-15 -pysimplegui; 4.55.1; pypi_0; pypi; GNU Lesser General Public License v3 or later (LGPLv3+); 2021-11-15 -python; 3.9.7; h6244533_1; defaults; PSF; 2021-07-26 -python-can; 4.0.0.dev2; pypi_0; pypi; GNU Lesser General Public License v3 (LGPLv3); 2021-11-15 -python-datauri; 0.2.9; pypi_0; pypi; MIT License; 2021-11-15 -python-dateutil; 2.8.2; pypi_0; pypi; Apache Software License, BSD License; 2021-11-15 -python-lin; 0.1.1; pypi_0; pypi; MIT; 2021-11-15 -python-markdown-math; 0.6; pypi_0; pypi; BSD; 2021-11-15 -python-uds; 1.0.2; pypi_0; pypi; MIT; 2021-11-15 -pytz; 2021.3; pypi_0; pypi; MIT License; 2021-11-15 -pyvisa; 1.11.3; pypi_0; pypi; MIT License; 2021-11-15 -pywin32; 228; py39hbaba5e8_1; defaults; Python Software Foundation License; 2021-11-15 -pywinpty; 1.1.5; pypi_0; pypi; MIT; 2021-11-15 -pyyaml; 5.4.1; pypi_0; pypi; MIT License; 2021-11-15 -pyzmq; 22.3.0; pypi_0; pypi; BSD License, GNU Library or Lesser General Public License (LGPL); 2021-11-15 -qtconsole; 5.2.0; pypi_0; pypi; BSD License; 2021-11-15 -qtpy; 1.11.2; pypi_0; pypi; MIT License; 2021-11-15 -regex; 2021.11.10; pypi_0; pypi; Apache Software License; 2021-11-15 -requests; 2.26.0; pypi_0; pypi; Apache Software License; 2021-11-15 -requests-file; 1.5.1; pypi_0; pypi; Apache Software License; 2021-11-15 -rope; 0.21.0; pypi_0; pypi; GNU Lesser General Public License v3 or later (LGPLv3+); 2021-11-15 -rsinstrument; 1.19.0.75; pypi_0; pypi; MIT License; 2021-11-15 -ruamel-yaml; 0.17.17; pypi_0; pypi; MIT License; 2021-11-15 -ruamel-yaml-clib; 0.2.6; pypi_0; pypi; MIT License; 2021-11-15 -scipy; 1.7.2; pypi_0; pypi; BSD License; 2021-11-15 -seaborn; 0.11.2; pypi_0; pypi; BSD License; 2021-11-15 -send2trash; 1.8.0; pypi_0; pypi; BSD License; 2021-11-15 -setuptools; 58.0.4; py39haa95532_0; defaults; MIT; 2021-07-26 -six; 1.16.0; pypi_0; pypi; MIT License; 2021-11-15 -smmap; 5.0.0; pypi_0; pypi; BSD License; 2021-11-15 -snowballstemmer; 2.1.0; pypi_0; pypi; BSD License; 2021-11-15 -soupsieve; 2.3; pypi_0; pypi; MIT License; 2021-11-15 -sphinx; 4.3.0; pypi_0; pypi; BSD License; 2021-11-15 -sphinx-copybutton; 0.3.3; pypi_0; pypi; MIT License; 2021-11-15 -sphinx-panels; 0.6.0; pypi_0; pypi; MIT License; 2021-11-15 -sphinx-rtd-theme; 1.0.0; pypi_0; pypi; MIT License; 2021-11-15 -sphinxcontrib-applehelp; 1.0.2; pypi_0; pypi; BSD License; 2021-11-15 -sphinxcontrib-bibtex; 2.4.1; pypi_0; pypi; BSD License; 2021-11-15 -sphinxcontrib-devhelp; 1.0.2; pypi_0; pypi; BSD License; 2021-11-15 -sphinxcontrib-htmlhelp; 2.0.0; pypi_0; pypi; BSD License; 2021-11-15 -sphinxcontrib-jsmath; 1.0.1; pypi_0; pypi; BSD License; 2021-11-15 -sphinxcontrib-mermaid; 0.7.1; pypi_0; pypi; BSD License; 2021-11-15 -sphinxcontrib-plantuml; 0.21; pypi_0; pypi; BSD License; 2021-11-15 -sphinxcontrib-programoutput; 0.17; pypi_0; pypi; BSD License; 2021-11-15 -sphinxcontrib-qthelp; 1.0.3; pypi_0; pypi; BSD License; 2021-11-15 -sphinxcontrib-serializinghtml; 1.1.5; pypi_0; pypi; BSD License; 2021-11-15 -sphinxcontrib-spelling; 7.2.1; pypi_0; pypi; BSD License; 2021-11-15 -sqlite; 3.36.0; h2bbff1b_0; defaults; Public-Domain (http://www.sqlite.org/copyright.html); 2021-07-26 -statsmodels; 0.13.0; pypi_0; pypi; BSD License; 2021-11-15 -tabulate; 0.8.9; pypi_0; pypi; MIT License; 2021-11-15 -tenacity; 8.0.1; pypi_0; pypi; Apache Software License; 2021-11-15 -terminado; 0.12.1; pypi_0; pypi; BSD License; 2021-11-15 -testpath; 0.5.0; pypi_0; pypi; BSD License; 2021-11-15 -textparser; 0.23.0; pypi_0; pypi; MIT License; 2021-11-15 -textx; 2.3.0; pypi_0; pypi; MIT License; 2021-11-15 -threadpoolctl; 3.0.0; pypi_0; pypi; BSD License; 2021-11-15 -toml; 0.10.2; pypi_0; pypi; MIT License; 2021-11-15 -tomli; 1.2.2; pypi_0; pypi; MIT License; 2021-11-15 -toolz; 0.11.2; pypi_0; pypi; BSD License; 2021-11-15 -tornado; 6.1; pypi_0; pypi; Apache Software License; 2021-11-15 -traitlets; 5.1.1; pypi_0; pypi; BSD License; 2021-11-15 -typing-extensions; 3.10.0.2; pypi_0; pypi; Python Software Foundation License; 2021-11-15 -tzdata; 2021e; hda174b7_0; defaults; Apache-2.0; 2021-07-26 -uptime; 3.0.1; pypi_0; pypi; BSD License; 2021-11-15 -urllib3; 1.26.7; pypi_0; pypi; MIT License; 2021-11-15 -vc; 14.2; h21ff451_1; defaults; Modified BSD License (3-clause); 2021-07-26 -vs2015_runtime; 14.27.29016; h5e58377_2; defaults; \-; 2021-07-26 -wcwidth; 0.2.5; pypi_0; pypi; MIT License; 2021-11-15 -webencodings; 0.5.1; pypi_0; pypi; BSD License; 2021-11-15 -wheel; 0.37.0; pyhd3eb1b0_1; defaults; MIT; 2021-07-26 -widgetsnbextension; 3.5.2; pypi_0; pypi; BSD License; 2021-11-15 -wincertstore; 0.2; py39haa95532_2; defaults; Python Software Foundation License; 2021-11-15 -windows-curses; 2.2.0; pypi_0; pypi; Python Software Foundation License; 2021-11-15 -winpty; 0.4.3; 4; defaults; MIT; 2021-07-26 -wrapt; 1.13.3; pypi_0; pypi; BSD License; 2021-11-15 -wxpython; 4.1.1; pypi_0; pypi; wxWindows Library License (https://opensource.org/licenses/wxwindows.php); 2021-11-15 -xlsxwriter; 1.4.5; pypi_0; pypi; BSD License; 2021-11-15 -zlib; 1.2.11; h62dcd97_4; defaults; zlib; 2021-07-26 diff --git a/docs/general/license-tables/license-info_python.csv b/docs/general/license-tables/license-info_python.csv new file mode 100644 index 00000000..978676b6 --- /dev/null +++ b/docs/general/license-tables/license-info_python.csv @@ -0,0 +1,6 @@ +License ; PSF License Agreement +SPDX short identifier; +License file ; /LICENSE.txt +License URL ; https://docs.python.org/license.html +Latest license check ; 2024-07-08 +Website ; https://www.python.org diff --git a/docs/general/license-tables/license-info_python_packages.csv b/docs/general/license-tables/license-info_python_packages.csv new file mode 100644 index 00000000..0cafb530 --- /dev/null +++ b/docs/general/license-tables/license-info_python_packages.csv @@ -0,0 +1,90 @@ +Name;Version;SPDX short identifier;License +alabaster;0.7.16;BSD-3-Clause;BSD License +argparse-addons;0.12.0;MIT;MIT License +astroid;3.2.2;LGPL-2.1;GNU Lesser General Public License v2 (LGPLv2) +attrs;23.2.0;MIT;MIT License +Babel;2.15.0;BSD-3-Clause;BSD License +bitstruct;8.19.0;MIT;MIT License +cantools;39.4.5;MIT;MIT License +certifi;2024.6.2;MPL-2.0;Mozilla Public License 2.0 (MPL 2.0) +cffconvert;2.0.0;Apache-2.0;Apache Software License +cfgv;3.4.0;MIT;MIT License +charset-normalizer;3.3.2;MIT;MIT License +click;8.1.7;BSD-3-Clause;BSD License +colorama;0.4.6;BSD 3-Clause;BSD License +colorlog;6.8.2;MIT;MIT License +contourpy;1.2.1;BSD 3-Clause;BSD License +coverage;7.5.4;Apache-2.0;Apache Software License +crccheck;1.3.0;MIT;MIT License +cycler;0.12.1;BSD 3-Clause;BSD License +dill;0.3.8;BSD-3-Clause;BSD License +diskcache;5.6.3;Apache 2.0;Apache Software License +distlib;0.3.8;PSF-2.0;Python Software Foundation License +docopt;0.6.2;MIT;MIT License +docutils;0.20.1;BSD-2-Clause,GPL-3.0-or-later,ZPL - 2.1;BSD License, GNU General Public License (GPL), Public Domain, Python Software Foundation License +filelock;3.15.4;Unlicense;The Unlicense (Unlicense) +fonttools;4.53.1;MIT;MIT License +gcovr;7.2;BSD 3-Clause;BSD License +gitdb;4.0.11;BSD 3-Clause;BSD License +GitPython;3.1.43;BSD-3-Clause;BSD License +identify;2.5.36;MIT;MIT License +idna;3.7;BSD-3-Clause;BSD License +imagesize;1.4.1;MIT;MIT License +isort;5.13.2;MIT;MIT License +Jinja2;3.1.4;BSD-3-Clause;BSD License +jsonschema;3.2.0;MIT;MIT License +jsonschema-specifications;2023.12.1;MIT;MIT License +kiwisolver;1.4.5;BSD-3-Clause;BSD License +latexcodec;3.0.0;MIT;MIT License +lxml;5.2.2;BSD-3-Clause;BSD License +MarkupSafe;2.1.5;BSD-3-Clause;BSD License +matplotlib;3.9.1.post1;\-;Python Software Foundation License +mccabe;0.7.0;MIT;MIT License +nodeenv;1.9.1;BSD-3-Clause;BSD License +numpy;2.0.0;BSD-3-Clause;BSD License +packaging;24.1;Apache-2.0, BSD-2-Clause;Apache Software License, BSD License +pillow;10.4.0;HPND;Historical Permission Notice and Disclaimer (HPND) +pip-licenses;4.4.0;MIT;MIT License +platformdirs;4.4.2;MIT;MIT License +pre-commit;3.71;MIT;MIT License +prettytable;3.10;BSD-3-Clause;BSD License +pybtex;0.24.0;MIT;MIT License +pybtex-docutils;1.0.3;MIT;MIT License +Pygments;2.18.0;BSD-2-Clause;BSD License +pykwalify;1.8.0;MIT;MIT License +pylint;3.2.5;GPL-2.0;GNU General Public License v2 (GPLv2) +pyparsing;3.1.2;MIT;MIT License +pyserial;3.5;BSD-3-Clause;BSD License +pyrsistent;0.20.0;MIT;MIT License +python-can;4.4.2;LGPL-3.0-only;GNU Lesser General Public License v3 (LGPLv3) +python-dateutil;2.9.0.post0;Apache-2.0, BSD-3-Clause;Apache Software License, BSD License +pywin32;306;\-;Python Software Foundation License +PyYAML;6.0.1;MIT;MIT License +referencing;0.35.1;MIT;MIT License +requests;2.32.3;Apache-2.0;Apache Software License +rpds-py;0.18.1;MIT;MIT License +ruamel.yaml;0.18.6;MIT;MIT License +ruamel.yaml.clib;0.2.8;MIT;MIT License +ruff;0.5.0;MIT;MIT License +setuptools;70.2.0;MIT;MIT License +six;1.16.0;MIT;MIT License +smmap;5.0.1;BSD-3-Clause;BSD License +snowballstemmer;2.2.0;BSD-3-Clause;BSD License +Sphinx;7.3.7;BSD-2-Clause;BSD License +sphinx-rtd-theme;2.0.0;MIT;MIT License +sphinxcontrib-applehelp;1.0.8;BSD-2-Clause;BSD License +sphinxcontrib-bibtex;2.6.2;BSD-2-Clause;BSD License +sphinxcontrib-devhelp;1.0.6;BSD-2-Clause;BSD License +sphinxcontrib-htmlhelp;2.0.5;BSD-2-Clause;BSD License +sphinxcontrib-jquery;4.1;0BSD;BSD License +sphinxcontrib-jsmath;1.0.1;BSD-2-Clause;BSD License +sphinxcontrib-qthelp;1.0.7;BSD-2-Clause;BSD License +sphinxcontrib-serializinghtml;1.1.10;BSD-2-Clause;BSD License +tabulate;0.9.0;MIT;MIT License +textparser;0.24.0;MIT;MIT License +tomlkit;0.12.5;MIT;MIT License +typing_extensions;4.12.2;\-;Python Software Foundation License +urllib3;2.2.2;MIT;MIT License +virtualenv;20.26.3;MIT;MIT License +wcwidth;0.2.13;MIT;MIT License +wrapt;1.16.0;BSD-2-Clause;BSD License diff --git a/docs/general/license-tables/license-info_ruby-installer.csv b/docs/general/license-tables/license-info_ruby-installer.csv index 90ab0563..ebba5de5 100644 --- a/docs/general/license-tables/license-info_ruby-installer.csv +++ b/docs/general/license-tables/license-info_ruby-installer.csv @@ -1,4 +1,4 @@ License ; 3-clause BSD SPDX short identifier; BSD-3-Clause -Latest license check ; 2020-06-23 +Latest license check ; 2024-07-08 Website ; https://rubyinstaller.org/ diff --git a/docs/general/license-tables/license-info_ti-hcg.csv b/docs/general/license-tables/license-info_ti-hcg.csv index 274e972c..eed2ed21 100644 --- a/docs/general/license-tables/license-info_ti-hcg.csv +++ b/docs/general/license-tables/license-info_ti-hcg.csv @@ -1,3 +1,3 @@ License File ; ``/Production_License_Agreement_062612.pdf`` -Latest license check; 2020-06-23 +Latest license check; 2024-07-08 Website ; https://www.ti.com/tool/HALCOGEN diff --git a/docs/general/license-tables/license-info_vs-code.csv b/docs/general/license-tables/license-info_vs-code.csv index a14dd902..eff364e1 100644 --- a/docs/general/license-tables/license-info_vs-code.csv +++ b/docs/general/license-tables/license-info_vs-code.csv @@ -1,4 +1,4 @@ License URL ; https://code.visualstudio.com/License -Latest license check; 2020-06-23 +Latest license check; 2024-07-08 Website ; https://code.visualstudio.com Development ; https://github.com/microsoft/vscode diff --git a/docs/general/license-tables/license-info_vs-code_extensions.csv b/docs/general/license-tables/license-info_vs-code_extensions.csv deleted file mode 100644 index 39dec357..00000000 --- a/docs/general/license-tables/license-info_vs-code_extensions.csv +++ /dev/null @@ -1,10 +0,0 @@ -Name; License; License URL; Latest license check -C/C++; \-; https://marketplace.visualstudio.com/items/ms-vscode.cpptools/license; 2020-06-23 -Python; MIT; https://marketplace.visualstudio.com/items/ms-python.python/license; 2020-06-23 -ASM Code Lens; MIT; https://marketplace.visualstudio.com/items/maziac.asm-code-lens/license; 2020-06-23 -LinkerScript; MIT; https://marketplace.visualstudio.com/items/ZixuanWang.linkerscript/license; 2020-06-23 -Code Spell Checker; MIT; https://marketplace.visualstudio.com/items/streetsidesoftware.code-spell-checker/license; 2020-06-23 -YAML; MIT; https://marketplace.visualstudio.com/items/redhat.vscode-yaml/license; 2020-06-23 -Better TOML; MIT; https://marketplace.visualstudio.com/items/bungcip.better-toml/license; 2020-06-23 -Test Explorer UI; MIT; https://marketplace.visualstudio.com/items/hbenl.vscode-test-explorer/license; 2020-06-23 -Ceedling Test Explorer; MIT; https://marketplace.visualstudio.com/items/numaru.vscode-ceedling-test-adapter/license; 2020-06-23 diff --git a/docs/general/license-tables/license-info_waf-unit-tests.csv b/docs/general/license-tables/license-info_waf-unit-tests.csv deleted file mode 100644 index 02020113..00000000 --- a/docs/general/license-tables/license-info_waf-unit-tests.csv +++ /dev/null @@ -1,5 +0,0 @@ -Location in repository; ``./tests/scripts/waf-core`` -License ; BSD -License URL ; https://gitlab.com/ita1024/waf/-/blob/3f8bb163290eb8fbfc3b26d61dd04aa5a6a29d4a/waf-light#L6-30 -Latest license check ; 2021-03-11 -Website ; https://waf.io/ diff --git a/docs/general/license-tables/license-packages-conda-env-spelling-build-strings.txt b/docs/general/license-tables/license-packages-conda-env-spelling-build-strings.txt deleted file mode 100644 index 4e11d73b..00000000 --- a/docs/general/license-tables/license-packages-conda-env-spelling-build-strings.txt +++ /dev/null @@ -1,14 +0,0 @@ -.. spelling:: - ba - bbff - defaul - dir - eb - ed - fc - fd - GCC - haa - hcd - pyh - pyhd diff --git a/docs/general/license-tables/license-packages-conda-env-spelling.txt b/docs/general/license-tables/license-packages-conda-env-spelling.txt deleted file mode 100644 index c1e6fe05..00000000 --- a/docs/general/license-tables/license-packages-conda-env-spelling.txt +++ /dev/null @@ -1,241 +0,0 @@ -.. spelling:: - addons - aenum - alabaster - Analytics - appdirs - applehelp - argparse - argparse-addons - asn1crypto - ast - astroid - async - asyncio - attrs - babel - backcall - beautifulsoup - bibtex - bitstruct - black - blas - bleach - brotlipy - bzip - ca-certificates - cantools - ccaba - certifi - cfd - cffi - chardet - charset - clib - click - colorama - conda-package-handling - console_shortcut - copybutton - crcmod - cryptography - datauri - dateutil - dbus - dcd - de - debd - decorator - defusedxml - defusedxmlec - dev - devhelp - df - diskcache - docutils - doxygen - eaf - ee - ec - ecd - entrypoints - et - et-xmlfile - fde - fft - freetype - fontconfig - gcovr - genutils - gitpython - gst - gstreamer - gmp - graphviz - hb - hbaba - hbc - hc - hd - hda - heee - hfa - hfd - htmlhelp - icc - icu - idna - imagesize - impl - importlib - importlib - intel - ipykernel - ipython - ipython_genutils - ipywidgets - isort - jedi - jinja2 - jpeg - jsmath - jsonschema - jupyter - jupyter_client - jupyter_console - jupyter_core - jupyterlab - lazy-object-proxy - ld - libarchive - libffi - libgcc - libgfortran - libgomp - libiconv - libpng - libsodium - libstdcxx - libtiff - libuuid - libwinpthread - libxcb - libxml - lin - linux - lz - lzo - markupsafe - matplotlib - mccabe - mdx - menuinst - mistune - mkl - msgpack - msys2-conda-epoch - mypy - nbconvert - ncurses - nbformat - ng - notebook - normalizer - numpy - openmp - openssl - packaging - pandoc - pandocfilters - parso - pathspec - pcre - pexpect - pickleshare - pillow - pip - pip-licenses - plantuml - powershell_shortcut - programoutput - prometheus - prometheus_client - prompt_toolkit - prompt-toolkit - ptable - ptyprocess - py - pybtex - pybtex-docutils - pycosat - pycparser - pyenchant - pygments - pylint - pyopenssl - pyparsing - pypi - pyqt - pyrsistent - pyserial - pysimplegui - pysocks - python - pytz - pywin - pywinpty - pyyaml - pyzmq - qt - qtconsole - qthelp - qtpy - readline - regex - requests - rsinstrument - rstcheck - rtd - ruamel - ruamel_yaml - send2trash - serializinghtml - setuptools - sip - six - snowballstemmer - sphinx - sphinxcontrib - sqlite - tabulate - terminado - testpath - textparser - Tk - toml - tornado - tqdm - traitlets - tzdata - uds - urllib3 - vc - vs2015_runtime - wcwidth - webencodings - wheel - widgetsnbextension - win_inet_pton - wincertstore - windows-curses - winpty - wrapt - wxpython - wxWindows - xmlfile - xz - yaml - zeromq - zipp - zlib - zstd diff --git a/docs/general/license.rst b/docs/general/license.rst index 5d936b77..1330b5f0 100644 --- a/docs/general/license.rst +++ b/docs/general/license.rst @@ -7,32 +7,6 @@ License ####### -.. - Comments: - ccs is the abbreviation for "Code Composer Studio" - gcc is the abbreviation for "GNU Compiler Collection" - GPL is the abbreviation for "GNU General Public License" - SPDX is the abbreviation for "Software Package Data Exchange" - TSPA is the abbreviation for "TECHNOLOGY AND SOFTWARE PUBLICLY AVAILABLE" - -.. spelling:: - ccs - gcc - GPL - GPLv - halcogen - SPDX - TSPA - pdf - txt - Tcl - tk - GCCRLE - LGPL - -.. include:: ./license-tables/license-packages-conda-env-spelling.txt -.. include:: ./license-tables/license-packages-conda-env-spelling-build-strings.txt - ***************** |foxbms| Licenses ***************** @@ -158,15 +132,6 @@ Binary :delim: ; :file: ./license-tables/license-info_waf-binary.csv -Unit Tests -^^^^^^^^^^ - -.. csv-table:: - :name: license-info_waf-unit-tests - :widths: 10 50 - :delim: ; - :file: ./license-tables/license-info_waf-unit-tests.csv - Third Party Software ==================== @@ -188,55 +153,23 @@ Third Party Software :delim: ; :file: ./license-tables/license-info_ti-hcg.csv -Miniconda ---------- +Python +------ .. csv-table:: - :name: license-info_miniconda + :name: license-info_python :widths: 10 50 :delim: ; - :file: ./license-tables/license-info_miniconda.csv - -Miniconda ships a `Python `_ interpreter. -The Python interpreter license is found in -``/LICENSE_PYTHON.txt``. - -The conda environments shipped within the |foxbms| repository -(``conf/enc/conda_env_win32.yaml``) specifies a couple of conda and pip -packages. -These packages and their licenses are listed in -:numref:`license-info_packages-conda-env-win32` and -:numref:`license-info_packages-conda-env-linux`. -This list is generated based on ``conda list --show-channel-urls``. - -- For ``pypi`` packages the license information is taken from - https://pypi.org/. -- For conda packages the license information is obtained by running - ``conda info package_name --info`` or directly looked up in the conda build - recipe. -- As a help for updating the list you can call - ``./tools/utils/bash/run-python-script.sh ./tools/utils/generate_license_list.py -f ./docs/general/license-tables/license-info_packages-conda-env-win32.csv > ./docs/general/license-tables/license-info_packages-conda-env-new.csv``. - -.. csv-table:: Conda and pip packages and licenses in the Windows environment - :name: license-info_packages-conda-env-win32 - :header-rows: 1 - :delim: ; - :file: ./license-tables/license-info_packages-conda-env-win32.csv + :file: ./license-tables/license-info_python.csv -.. csv-table:: Conda and pip packages and licenses in the Linux environment - :name: license-info_packages-conda-env-linux - :header-rows: 1 - :delim: ; - :file: ./license-tables/license-info_packages-conda-env-linux.csv - -LLVM ----- +Python Packages from PyPI +------------------------- .. csv-table:: - :name: license-info_llvm - :widths: 10 50 + :name: license-info_python_packages + :widths: 30 10 10 50 :delim: ; - :file: ./license-tables/license-info_llvm.csv + :file: ./license-tables/license-info_python_packages.csv RubyInstaller ------------- @@ -256,15 +189,6 @@ Visual Studio Code :delim: ; :file: ./license-tables/license-info_vs-code.csv -Visual Studio Code Extensions ------------------------------ - -.. csv-table:: - :name: license-info_vs-code_extensions - :header-rows: 1 - :delim: ; - :file: ./license-tables/license-info_vs-code_extensions.csv - MinGW-w64 - for 32 and 64 bit Windows ------------------------------------- diff --git a/docs/general/releases.csv b/docs/general/releases.csv index 80f85e17..766e3d92 100644 --- a/docs/general/releases.csv +++ b/docs/general/releases.csv @@ -1,4 +1,5 @@ foxBMS 2; Release Date; Permanent link to documentation +v1.7.0; 2024-08-08; https://iisb-foxbms.iisb.fraunhofer.de/foxbms/gen2/docs/html/v1.7.0/ v1.6.0; 2023-10-12; https://iisb-foxbms.iisb.fraunhofer.de/foxbms/gen2/docs/html/v1.6.0/ v1.5.1; 2023-02-23; https://iisb-foxbms.iisb.fraunhofer.de/foxbms/gen2/docs/html/v1.5.1/ v1.5.0; 2023-02-03; https://iisb-foxbms.iisb.fraunhofer.de/foxbms/gen2/docs/html/v1.5.0/ diff --git a/docs/general/releases.rst b/docs/general/releases.rst index 635d56a6..c84cc181 100644 --- a/docs/general/releases.rst +++ b/docs/general/releases.rst @@ -6,15 +6,6 @@ Releases ======== -.. - Comments: - vx version dummy - xxxx is the dummy date for x.y.z - -.. spelling:: - vx - xxxx - |foxbms| Releases ----------------- diff --git a/docs/general/safety/safety.rst b/docs/general/safety/safety.rst index ccb93a82..329f483e 100644 --- a/docs/general/safety/safety.rst +++ b/docs/general/safety/safety.rst @@ -6,6 +6,35 @@ Safety ====== +.. + cSpell:ignore elektrische + cSpell:ignore spannung + cSpell:ignore handschutz + cSpell:ignore benutzen + cSpell:ignore explosionsgefaehrliche + cSpell:ignore stoffe + cSpell:ignore giftige + cSpell:ignore aetzende + cSpell:ignore gefahren + cSpell:ignore batterien + cSpell:ignore feuergefaehrliche + cSpell:ignore fussschutz + cSpell:ignore schutzkleidung + cSpell:ignore gesichtsschutz + cSpell:ignore kopfschutz + cSpell:ignore augenschutz + cSpell:ignore brandfoerdernde + cSpell:ignore metallteile + cSpell:ignore uhren + cSpell:ignore keine + cSpell:ignore atemschutz + cSpell:ignore offene + cSpell:ignore flamme + cSpell:ignore maske + cSpell:ignore gehoerschutz + cSpell:ignore allgemeines + cSpell:ignore gebotszeichen + Risk Assessment --------------- @@ -36,10 +65,6 @@ users: - EN 50156 (Furnaces) - etc ... -A list of standards that might fit to the target application can be found here: - -- https://www.mpoweruk.com/standards.htm - Standards --------- @@ -54,7 +79,6 @@ similar ones should be regarded: Recommended readings: -- http://www.mpoweruk.com - http://batteryuniversity.com Safety Instructions Before Using |foxbms| diff --git a/docs/getting-started/directories/_root.csv b/docs/getting-started/directories/_root.csv new file mode 100644 index 00000000..986ee29f --- /dev/null +++ b/docs/getting-started/directories/_root.csv @@ -0,0 +1,9 @@ +Directory Name ; Long Name ; Content Description +``.`` ; Repository root ; The repository root contains the license information, installation instructions, a link to the changelog, the main build script +``cli`` ; Command line interface ; Program to interact with the repository +``conf`` ; Configuration ; Contains all high level configurations +``docs`` ; Documentation ; Documentation source files +``hardware`` ; Hardware ; Hardware schematics and layouts +``src`` ; Source ; Parent directory for all source files for the BMS embedded software +``tests`` ; Tests ; Tests for embedded sources, the tool chain, the conda environment and scripts +``tools`` ; Tools ; Tools needed to build |foxbms| binaries and additional tools to work with |foxbms| diff --git a/docs/getting-started/directories/conf.csv b/docs/getting-started/directories/conf.csv new file mode 100644 index 00000000..ba09d877 --- /dev/null +++ b/docs/getting-started/directories/conf.csv @@ -0,0 +1,7 @@ +Directory Name ; Long Name ; Content Description +``bms`` ; Battery Management System ; Configuration of the BMS (e.g., which AFE is used) +``cc`` ; C compiler ; Compiler configuration (e.g., compiler flags) +``env`` ; Environment ; Environment specifications configuration files (e.g., Conda package dependencies) +``hcg`` ; |halcogen| ; |halcogen| configuration files for the Hardware Abstraction Layer +``tpl`` ; Templates ; Template files for source files +``unit`` ; Unit tests ; Unit test configuration files diff --git a/docs/getting-started/directories/src.csv b/docs/getting-started/directories/src.csv new file mode 100644 index 00000000..9a7134aa --- /dev/null +++ b/docs/getting-started/directories/src.csv @@ -0,0 +1,5 @@ +Directory Name ; Long Name ; Content Description +``app`` ; Application ; Sources files for the BMS application +``hal`` ; Hardware ; Source files of the Hardware Abstraction Layer +``opt`` ; Optional ; Optional source files (e.g., specific cell parameters) +``os`` ; Operating System ; Source files of the real time operating system diff --git a/docs/getting-started/directories/tests.csv b/docs/getting-started/directories/tests.csv new file mode 100644 index 00000000..d5afdd7e --- /dev/null +++ b/docs/getting-started/directories/tests.csv @@ -0,0 +1,12 @@ +Directory Name ; Long Name ; Content Description +``axivion`` ; Axivion ; Configuration files to describe the software architecture of |foxbms|. Additional static program analysis configurations are stored here (e.g., MISRA-C) +``can`` ; CAN ; Heuristic tests for the correct implementation of DBC file in the code +``ccs`` ; Code Composer Studio ; Compiler setup for different CCS versions to compile foxBMS with +``cli`` ; Command line interface ; Tests for the CLI tool, to interact with the repository +``c-std`` ; C Standard ; Test setup for foxBMS's C standard detection +``dbc`` ; CAN Database ; Check the validity of the DBC/SYM files +``hil`` ; Hardware-in-the-Loop ; Tests and setup of the Hardware-in-the-Loop test (**not published**) +``os-information`` ; OS information ; Information to search the sources for OS relevant includes, names etc. +``re-names`` ; Regex names ; Scripts to verify the regular expressions that are used in Axivion setup +``unit`` ; Embedded code unit tests ; Unit test code for the embedded code +``variants`` ; Variants ; foxBMS build configurations (for testing in e.g., CI) diff --git a/docs/getting-started/directories/tools.csv b/docs/getting-started/directories/tools.csv new file mode 100644 index 00000000..f694f632 --- /dev/null +++ b/docs/getting-started/directories/tools.csv @@ -0,0 +1,11 @@ +Directory Name ; Long Name ; Content Description +``crc`` ; Cyclic redundancy check ; Helper script and information for working with CRC-functions +``dbc`` ; CAN Database ; CAN message and signal description +``debugger`` ; Debugger ; Debugger setups and usage +``deploy`` ; Deploy ; Scripts for deploying the generated documentation internally +``ide`` ; Editor/IDEs ; Setups for editors and Integrated Development Environments +``precharge`` ; Precharge ; Script to help dimensioning the precharge resistor +``utils`` ; Utils ; Unspecific helper tools and scripts +``vendor`` ; Vendor ; Vendored, unchanged files +``waf-tools`` ; Waf tools ; Waf tools that are not part of vendored Waf +``waf`` ; Waf ; Waf binary diff --git a/docs/getting-started/first-steps-on-hardware.rst b/docs/getting-started/first-steps-on-hardware.rst index ac86b1f6..72df5a41 100644 --- a/docs/getting-started/first-steps-on-hardware.rst +++ b/docs/getting-started/first-steps-on-hardware.rst @@ -17,9 +17,9 @@ and to recap the process of setting up the toolchain. embedded target, it is absolutely necessary to have these three components in place: - * the embedded device itself, - * a power supply, - * a debugger. + * the embedded device itself, + * a power supply, + * a debugger. Setup ----- @@ -29,9 +29,9 @@ Details on the software installation can be found in :ref:`SOFTWARE_INSTALLATION`. Most notable parts of the toolchain are: - * the conda environment, - * the compiler toolchain, - * and a debugger. +- the conda environment, +- the compiler toolchain, +- and a debugger. Compilation ----------- @@ -39,9 +39,9 @@ Compilation Details on this step are described in :ref:`BUILDING_THE_APPLICATION`. The following steps should pass and result in the application being built. -.. code-block:: console +.. code-block:: powershell - C:\Users\vulpes\Documents\foxbms-2>waf configure build_bin + PS C:\Users\vulpes\Documents\foxbms-2> .\fox.ps1 waf configure build_bin If any error messages occur, they have to be investigated before continuing. @@ -64,15 +64,10 @@ The following steps go through the most important parts of the workflow. If they work as expected, it can be assumed that the debugger toolchain is functional. - * Connect the debugger to the target. - * Supply power to the target. - * Attach the debugger in the debug tool to the target and download the - built binary to the target. - * Start the target. +- Connect the debugger to the target. +- Supply power to the target. +- Attach the debugger in the debug tool to the target and download the + built binary to the target. +- Start the target. After these steps, it should be possible to halt and re-start the target. -The variable ``os_timer`` should show incremented values when halting the -target. -Central data structures such as ``bms_state``, ``sys_state``, -``cont_contactorStates`` and ``ltc_cellVoltage`` (for -:ref:`AFEs ` of the LTC family). diff --git a/docs/getting-started/fox_py.rst b/docs/getting-started/fox_py.rst new file mode 100644 index 00000000..99f0d70f --- /dev/null +++ b/docs/getting-started/fox_py.rst @@ -0,0 +1,24 @@ +.. include:: ./../macros.txt +.. include:: ./../units.txt + +.. _FOX_PY: + +``fox.py`` +========== + +``fox.py``, in the root of the repository, is the tool to interact with the +repository, to e.g., build the embedded binary or run tests. + +To simplify the usage of this Python module, three shell wrappers are provided +(also at the root of the repository): + +- ``fox.bat`` for Command Prompt (``cmd.exe``) +- ``fox.ps1`` for PowerShell (``pwsh.exe``) +- ``fox.sh`` for Bash (``bash``) + +To simplify and increase the readability of the documentation, the +documentation will use the PowerShell script in example code. +The notation for PowerShell is ``.\fox.ps1``. + +- If you are using ``cmd.exe`` use ``fox.bat`` instead of ``.\fox.ps1``. +- If you are using ``bash`` use ``./fox.sh`` instead of ``.\fox.ps1``. diff --git a/docs/getting-started/llvm-installation/llvm-installation.rst b/docs/getting-started/llvm-installation/llvm-installation.rst deleted file mode 100644 index af899bf0..00000000 --- a/docs/getting-started/llvm-installation/llvm-installation.rst +++ /dev/null @@ -1,31 +0,0 @@ -:orphan: - -.. include:: ./../../macros.txt -.. include:: ./../../units.txt - -.. _MANUAL_LLVM_INSTALLATION: - -######################## -Manual LLVM Installation -######################## - -.. note:: - - The LLVM installer does not support installing different versions of - LLVM. - If there is already some LLVM version installed into - ``C:\Program Files\LLVM\*`` this installation must be copied to some - temporary folder, and then can be copied back into - ``C:\Program Files\LLVM\other-LLVM-version`` after the installation - has finished. - -#. Download LLVM (version |version_llvm|) from - `github.com/LLVM`_ - version 13.0.0 `_ - from the project's GitHub release page. -#. Copy the existing LLVM installation to some temporary directory. -#. Remove the LLVM installation directory. -#. Run the installer. - Choose |path_llvm| as installation directory - Do not add LLVM to ``PATH``. -#. Copy the previous LLVM installations back to the original place. diff --git a/docs/getting-started/mingw64-installation/mingw64-installation.rst b/docs/getting-started/mingw64-installation/mingw64-installation.rst deleted file mode 100644 index 0bcb4d88..00000000 --- a/docs/getting-started/mingw64-installation/mingw64-installation.rst +++ /dev/null @@ -1,16 +0,0 @@ -:orphan: - -.. include:: ./../../macros.txt -.. include:: ./../../units.txt - -.. _MANUAL_MINGW64_INSTALLATION: - -########################### -Manual MinGW64 Installation -########################### - -#. Download MinGW-W64 version ``x86_64-posix-seh`` from - `sourceforge.net `_ -#. Extract the archive -#. Copy the extracted ``mingw64`` directory to - ``C:\mingw64\x86_64-8.1.0-release-posix-seh-rt_v6-rev0``. diff --git a/docs/getting-started/miniconda-installation/conda-configuration.rst b/docs/getting-started/miniconda-installation/conda-configuration.rst deleted file mode 100644 index 0c9d8439..00000000 --- a/docs/getting-started/miniconda-installation/conda-configuration.rst +++ /dev/null @@ -1,76 +0,0 @@ -:orphan: - -.. include:: ./../../macros.txt -.. include:: ./../../units.txt - -.. _MANUAL_CONDA_CONFIGURATION: - -########################## -Manual conda Configuration -########################## - -Setup of the |conda| configuration in |condarc|. - -***************** -Creating the File -***************** - -#. Create the ``.condarc`` file in your user directory (|condarc|). - -.. note:: - - If you are unable to create a file with a leading *dot* (``.``) but no file - extension in the file explorer, see - https://www.hanselman.com/blog/how-to-create-a-file-with-a-dot-prefix-in-windows-explorer - -.. _condarc_configuration: - -************* -Configuration -************* - -#. To add the |conda| channel for ``foxbms``, open the |condarc| file and - add ``foxbms`` (all letters in lowercase) to the ``channels`` section. - If the ``defaults`` channel is missing, add it first: - - .. code-block:: yaml - :caption: ``defaults`` and ``foxbms`` are added to channels section - - channels: - - defaults - - foxbms - - .. note:: - - If the ``foxbms`` channel and the ``defaults`` entries are already - existing in the |conda| channels section this step can be skipped. - -#. If |conda| is used behind a proxy, the |conda| proxy configuration must - be adapted accordingly. Open |condarc| and edit the ``http`` and - ``https`` proxy information, according to your network: - - .. code-block:: yaml - :caption: Example ``proxy_servers`` in |condarc| - - proxy_servers: - http: http://user:pass@corp.com:8080 - https: https://user:pass@corp.com:8080 - - .. note:: - - If the |conda| proxy is already correctly set, this step can be - skipped. - -#. A correct setup |conda| configuration in |condarc| might then look - like that: - - .. code-block:: yaml - :caption: Example |conda| configuration in |condarc| - - channels: - - defaults - - foxbms - - proxy_servers: - http: my-company-http:8030 - https: my-company-https:8030 diff --git a/docs/getting-started/miniconda-installation/img/miniconda-installer-0.png b/docs/getting-started/miniconda-installation/img/miniconda-installer-0.png deleted file mode 100644 index f1fa30ea9f19dac43e32ef2f6fb4516038fe62d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30552 zcmYhi1yoy2*9M9d_d;2ZBBEemQy993De*eAe zX05EONlxa>?Ah|{XYUiPs;q#8PKpi(2Z#0PqntV%9Q+mR{R0&N_D$7iBLM6J-c?;e z2CjO7{17&HVgTwCo?+riXSZVnJIg&gF2rq2%t-VWId11zZieX=^C>!p13CJ~1nVf`UwToFgzi7p zjEUr$Ooe#+xX43!Y2Rm7qBBuv(q>Wz+aZY9A@+H!y6eDRS~@zMldcnDe#YI$9?Ca{ zws%+8S|00$tCJ2?gs5*2daMJJpd^7()VNXTa$qEcK$E{xqy9TjYbDKZ5CWxYj}gne zmZue{s{X&BQ9eX8&p<83g zhvQ|cR`YFkD?``y#w_|R4qVhXS0ttYD@W)iBW2e{bz~QCRZ!*Wu+76x!faq}l$bloBJFl~=Ax#j1>F`CvY5XTn@+Pu$$ zoX_{zFP{m&gyMJm^?hm<^F8KlUiUejoP3hhd0B`o33$>fd0kUE?WP>~+@GEFhA9HA z;-ju9a+EqicAo9alJ*y44AnjkD*mH)yk+^T+SLZ>&7p)s6r`bA-4;pl@JWBCYF#@` z5pFpg#cvmE`DdR zL|tH6tfJF*)d#WFv&weLq2R99m{m*8c-lu7${_S`MEtat2O+wM?cYdc-UjeG#RkfkM%l{Nb!5zRYW`((1>zP07GTmkl}@c}LirpeYM-72K~?Kf1jxX&o|LP|B*n-4h(>#>GB*>rj|V-jYDrhi0)sLR z4-N;GWe#gy2*BO*0Zs|DvTVwMv8nUeN|=qAEavHwqNslWCUn! zqXVnnuWbF5b9NG_9IPx{ux&~EY!y#}=m=MyRhQw%D=$h^E9#WbnknG282x6piCfi} zI&HGWC5Ks51fV2{mOYJH4MIGh&EI}?pDUj<_JcrU#q+Ar7uEt+#}+#G&e_krAZ0_t z={RDe7TG5s_X>9YTTGWTYf`TTD>dsZ_UMj<9<4|wI%wKa=qss)T_GyLyf83*rF=tk z$dbW%)0qb%ujpVT-FL`>Qf|SH?9B|^7v%A=Yf?(qDxS*=UH!>l+mWX=FiM09L^BZ1 zO`;HAvN^RAkdgv}?Yj?qGP|$0Yo2eA0cBlc}_K!WM z(qg`Y5PcV}_l%*}_Ez1tuZh_HFJ+v_IAXg~%?=_fY-wspNbI$ZijD098*MZIs$Oi= zH^Fdnya-F7ecuEYD;Uc(sO zyvE40QEr-(Libbk#y|LC*vXuqjhh~J9}|gC-~7U;f;>6;pXOMdhzluaw^~deg^ytQ zsCjR1T{LQJ&uS!+5vgQ#Efi=l-e!Tx$c>vBXUt2K3Th2Klv|u`grZ05Cj*o#*D=Dp z&7e7hAnWlTpUy<~VwF?^k;c9yX6ZIqs*iQ5dwu;b z)pE-ubz7i`6@5UI7-yc9i)kY=3tW^|0|w^d5a)rG@rX0cZ5u#|J~?G#LS6IOh-u_? zfim$WXS>)*e0O%_z>-GdX}9;qe<0SpA7Do$@jVGTOdAU^0B55{DgA=v;a?2*ou;U{ z#voi=32YeUA4a6HWgn`-&iDZFn$y6e0^u(%46NJc1%hr z9YfEDpA@p{hfRYkxetG*pD}?MTJ@g-N#yYYViim<{W#yUVR-bzCPE?qnOpJQ2T{oi zIkudsU1|!&Ef10m+chw5m8)Q&cBt=ELJfc$c)y9VLS`%SbBu`bXn+7fg!=fsX*B0; zU>%7jP}75O|6Lj(@DA)nO?iUJxUnWbo9-qiTc7c7LTi9=-65O;f_fV9zsuvao#mj% z*R}1F*oYUw*e%TqZkFKPkpH_jVB+v;?$X}&g9#=yggbP&oZ!^k)FYPyX$ytG>Fo2Y zG@m*!oOYB0_ZnUwEKDl9g|JzHuCfsQoA?pK+%BaxU4ZPzs$UakzXzq$nd)qM{ATz+ z;YfqiS;Um;B25lC)EnF+QG%DQ+qRL zSp*u=8ZljlZ7(D6-V*+<=bK34=?5Qq*?&4!stw%h)foIVEatY<+OH=XgxbJo7!uiV!(N~ts;qC2a;9X9i*lo*5={*K04 zr2f)I_TR-eOrkGMcz5@`#C@M@c!wQe=SCZN@A=!$I%A@;Bh)$%QqSr^OWtHtAs|-o zK4&`G@E=fX99gV1qd#BHR2jadU9T6JdO{XzPo?5<5Qb9!8QCmfIGhJ3Tb_OI(=OJE z^f05~#;L=xI-b|s1e!MMD^l!mMA8AmvPdQy>RL*U-K%iJOz&V4q7U>Gp*HH4op+0q zC@!xkV326{K(;~L0KaX>%dx>EGi3I0ezi-tnZI;W+vXhwp44j9GZ`>cP+roiZ%5+3 zI#mX%p!&mcAv}amP)gG=i(dD}00i;xj;MX)y}$X$tPC>#B}6IFea;z4+B45@vK=BmlA{-;iYeaJsz5G*5w%Dt!?z5LZK9Qx{=aRgepKrC z$&nPtDr4((U?9xR-IBLylo;kc;x2}*f4JZp`n+@w0|(~{8($O1mI2eM;GVWEqc31) zrggJTF+K-7Z}gbgsh_eJm5z|QjUDc5QU3c#JGGm>bG&&6iuIvJ$z)4(lm(n zCG%X}f%$gY3CX>7dK6`Bb3c<)`4LQfj_u}+ofB1-4@|@?ipH6#C_*Fc)*EnLXdiUn zbs$ZkWyQXCO^Cp*k;1AY%I3Pp9EU`>sGwe19xNMBeCW~V;<^ZwY zK-fkmoS)=C${fd85m`q0l}@xjE|s#`$f8gfYs`o_F1OlnJ3L-;zjTyaHXk=z?du;- znefTzX}3>vfb#X-X~p5=SDr7Ko!k_aCL%r5zjKf}{0&*C?!IdjS?5=)f}G242gVaP zJJ!b4Z55s1P4FF7!#i6HYcx6N%Tv~qmU70XY~wSIOO+qLv!W`MeDEGt#>SFR2pW9m z!-NM^y0W-D|>LS4iP_yfFE^2Z(DroSq8j<7s-%J`(dGpJ9*&bm*lD&>H zp>LItk0Yun?x7;!-OPB7AScZ{n6w~U^LVUw6*l=nUOvF;WNa*X+9W_D*~xp=1p$D& z7To$6Rvw+GE#uGMb$nANAI28XpYGUS;7Ryl=lFN1?hOgio#iNY@{e=j!Oz;tAD$c~ z4l3IPS04@xH}}C4u8Z#*dxrz|Y9x-^{0v&`RsgQA{g+TI0$(A{Mjc zaUMmGSoG$Zjn(syJ`){2LYs3wQn4SZB zh_S7=RBO(M?Qt*n{6ig&K?^i>>wAcTuwW#COjsRo9~#j5QjcQil~ZPvhi)aRf5^2Z zp_8ELznXJ^ps3@OB>p3dKXw(Ep|FtB4l2#%f-6~z!@g@Q5 zn60V4V}Np^jC45)doY-hZrZfPX;4jSKF$Ldodg}|;A~vkBV-;O!@CwT8>dJ5tLaM2 z{i`ODWs>y592S6`o-JlXl~{%ZwAYubjhhdw5`Qx@)N)*)54H_=QC->e9-8BlF>=}> z-sT(avI7ouuixi(uU%xeQ?>i#)~9ygucS)6TyLw0LHikNo(Np-L~L_wo*@;FTm%=x zF$!G`H)Br|g#OY_E{G@kyGn*GxyK4|zQq+C>0gR1hrPmz70{biZy~-+Sr$c%;YD!h z4{f%0{j~ITpXc=_bNJt`M`1F2FQ~;E4cmNA$3g;wdZM+_dw7&YoW4%*GX<8()_; z&b_P-^v0`OjEV;eCX)yo-*yz0KD*|fd>)ULM91id9vMSFW{R0ec;4*>3@S-;<8RAc z!`Ux%2W6K%|ERgN3HXL2zArM-K1m3JAE-bQO{S;&Yt16vd$<1V6pW2>EL?yd0z*qUH_7^-%?b7U`lclh=n zc#~!pweIh%0#y*Ib5Lxg)pP-{-sV1xNFGCd_R?RWzq&(qXC)u@Q?1_ObX`6#kOwTI z4Xxjv@SciXWrS6)*13jp7zTmuGpAe1D6Pg0G~PcX^S8)LdmOU<{0B6pSf9{$2OsTz zL8v2rd;npUB|qG{oX4DTBpbAmtJJYy)R@V24M~uJfb|ab?}V zYhhKG!yRW~0U=PY`w@k>mnYlU*0YNzN9cG}X0v_I-Z95BwAttqTZ5-p(C?LfLClk# zij<1A<~dKJD=HYP(XlWrHm=quU+Wf)xAfngEF_-5C>;7H5qM%f$ead0e)fF|J2=Qp z9}O&OPM7u2XG4*zkNVI76jR6>py)6aL6!f1n;Jr^;W)=orZU`Mw7G~%_;5o_U-iH` zzh#X{ht_7ELMLESWM}&PG(lNA2_C}{-yg{B+;lZwdz|a*x^pQ}Ogmy=j~1(czPfoW zk5$EET<=;+3g?o*;b*YKpgsN@(%g|CA@^r$H}`+Id}lOfmQv>$cwcmRL}`WvRS!}= zt95t5I>F_V%)o)?NpVxIT;^RI+fw?n?soCD>#@GZ@M@z`<;3@>Dz#%f&eiCr-_s-e zy4z>u5!r&V$O7n>uibx!h6iJ^Mg5Og`mz$FMX=pbvcNu@%-ehFc@U6^jd}Hp#4=O6 zzd*kj>6Tc&`Yl9ZB$$?PluCq#;J6(iEI88=L|V?T{r9(1VonK7KME7>A4!5FiXZBI zPkV0ZpxI*sWsM6$?`eld`Q_0G^4#Kw-$b*YkymeJC%oc2TXxfIU*QMO)?825GE=|< z2vJ?^CL_iB1~0$gwW(pOx9kd)Sj17Vidy*HwD|SEzv74hyM7-h96hxzB{blX%UPJ< zDcJg|Ak+z3!Y#8!P8A>dxp~A~W+OjU$}1IUBJo=bh%2MG>FyYa^3cTc9h-@enC zBoQ)*K2=YOuV#r5rBnmPZ3*CdIG);7LiC4u?OE{`3+@5(y?IHiWEmLQC)dU$lindP z1^^D0VOM^|E}F`yHZVuU7e0Hog|d8~$ZS%i;{hGTZ}-N3jQO$)SWbbdc}%mh_dV-m z0M?iD2`iw#*RjqCg0z_mtt6wF>uUD#!$+`Gta2S(XTAV~1hy4&FJ6U&HDr%yKe%|* zh#o>?5kibM>OhN=qB{y9_~RY>#YYz`p48<=KULQK1Z2Ee#X}7Z44TANz`3j+kXxDa}U!qNKQDRZFc4T>qw3?JbNMW6{W6H`0Q zbC0;P0Rg6sph*!3KRGN@{jGB8i9>F{8PZ~OcgGfVOrTQN`?iZy;;yI!>RUD9F4P5N z(ZXkU@UbJKVhhGN>l|jrryEQcGEBxpp*zT2$lyH}&S=d~2N4Z4mKw7BIqhtpo6&Cu z;TSX7f2r#-CPXD=kCUuMw{Vg(@=)V}>-OuG^ojF#n7e-yRE?*43*$wkU!?RS)vvJH zq!ZG-2dUkiipw>8MqACFCUZR>!@E1K{Yo+PUTXd45P#*^gyDyc?W?E}kb%eg7{Aw7J8? zk80a`;+9D39UhERpakhs<6|g{N!OLGlJQVwPx@qwJ*$20Z&&B9-85yODXbLzT>Nb< zxH=xm>e?)YP1JVk_^;bXOgTO zxmL({rcY*FI>_osUsGAVL2(AoYVMab7N9w9D)jcLXPtVX;A1!-;_m*{h~RDaUzX za3S{!1%|TMjzpEk@3V-WkNI;~ABVLyitvqI&#@k@0WC*871=y^3^o^WaN?s7}Q38Ux=W`V! zWU+M{L$F4_!};*OOheLl<1=K=G579s`)9JQgLcl=67XR1PgI+E;3ev~#$TsZq=YQUbA zU;S2`v6O83yn1)olzYLJI04#k@dxW;zdAj#ljU@8#+lc=CajfM#(W?uNA_?bUnK>OHJ^?ikwAmvjvM(p?cEDiA=>HarP_W%X4&Z}>$1tEn*;@+4M zJR{zZd}T&e+oZPY|41@~Q6rK+*(Y$u+cO|U$J!fgx74ZWY%Q>o+;uZE% zOAqO${vT<0n^Y^*&%OE(Vl80AO+qJcT};>|j`8aEK*Ac+@~rau&=w$Udi;q~e7{*T z;EIT|{q=Huxy$ujn3L;Wu$(&+!xFdt>(GAJu8xXWVQgGT_9Vo&?}MXTIiriO{bs4m z!7L8-tlq?W)W7?|X?Y}P`)i=I})(=)?;_Lg>p53a9wd&a(2uj(e`i z*5w_W-fNcMJiDaH)fF}jJJyK3@&}wl1=%wVP0Qt4t|5Nh^!MGr`tJwFhc-73C~YIy zD1NXFhR7kFwfiw4|Bv&13utc0i&AawPoO3@9h!-9n#=wekCx53+Hf{^_xkhhD7Nc$ zi0n)xaW=|W%v(@yeN8Fs$zJ08toos!V)<<9otVMXl=~EPCN2hjYv>m%+c?2<*=s0| zkD2xV_)%159}v2%t*#a;IGm-->l^7adk|0=9E0sDvs3Op_X`d6N0o;bvwo46A2@|1%F~fcI{i6ot*Ze$3>MVvQMTki{FZE z)&zR5H1wN?tPqhuq<7{94APu+Jx@ybk8^tyEpHYpI7Ijy&uLbC%Yq!ekE%IghDql{Nc?; zef>Q@nscBM1aGg2+BL3()isAGg$LcXa5rZnO633X&Q8gzM56>V^Q$S!+?H`X_sq|=IP`$`bg@(`Cv72e$79oF#{u`LB-aR}zC}-xq@zD=) zOEs?z{7)6&bikRbWx@A@eMndZ+*3RWH!L4y;f=vwpQX%T*)LVgQE3HbhyIxZ0?b;< zaSU%3N_DMkv7IrY=kb2NPFkiF_VmG%HQH|xxvJa#mjJblDo?oo8Z!07`)STsSpi97 z`8bbXKnNIv&qe_l`>$0<`1I{_wA}Tgwl9uxqPBhf~t8TR_c@!IIzF1AOe9cmL9$0Dt#`7$fUcAA_E|NNtSX zgW=!I)I0S=jnvswWjtp*e!bu0;(fmEx8?KUCOyk|9VPjX)6RuAh3l7+bqnK(v9&CH zBr%GvV7eKty=SBUSI01XgqY|lGSum*k34ek4%@vMQI55q6`$niC#*iFh0OLHqZ3_)Bp$!3W=uNszng!^?R+r<=CZ}a)Pca^HxI{T#~{!} ze_9j`(zs4oZghc`REhGGYU1{XWE~poTDFat_8I(t9GroK=4-KDgmjiZ|ix8m!Nmf-(9iVPoe zL>6Vs&%|d{Ruc+5IaKSaMk)!7YF<@_gW#dEVBX^cabsNYHEst@l3hL4Po+TK}W zh0*DuLJKSN)4Wy~MUxHd>s)d1L1DZcWSp#M036P!jiwltX)Z#$W4c3FR}?np;0D(Z#8Yx;}f#9^nNQhAh~re;_46T%qDoLzYLd( zkbJ6)x7&l?bGW1dNL~)pHiAk%S-htK?SC>jc=0*~b~4E1i6P9PnPzwNP~#UQA~kv$aXotvh4hKTW&!WE$J zYX=C{Q`29L%yvJ|V%Z}g3SkSpe@f1!&pz|T!c+xI)5^xtS^1%Y)O!h-6|ce42X?{A zeO;~y-0_9$%XEZ@r$8oTbL;JLG68j<%ETeW?3`#}sY#g|I#AqQdxQ|u^hYq4bc4K5 zdt&dMY`Js@uMkoei}Fa&z+Y2Ud4Z-stbZ^n$Y(1P8FWv|X=_)u@gQkcL$G_K_D<;;qf3w{ccfKbY+_`QCj2j8H)f=DlUr(ff6|Y$ZDP=j$xcmQ}2_L(w1Z+ERiVkrZQrOai$AQmOEfV8sZUQ{!Mk z!3TOOIP1D*PwjyI99zGFMeTqyr7=bLOt$P{zrGIv*H${u1MM6>cc$w;t%kq%SSJE* zq`zXzzxTAjUb%dRrN~0Mw;B~4XW<4N-zCy03~ZCA4=i0hhEZ(Qcn9`#)swl-cKl;wLJ&2zD!2Hsy!s! z;TX9SWIT3atbgwdF%OaDt2VkoRaywE#()V6>ruPnj3wZkYiUi*L&5U8r}AZ)oNt;<9|3DW?f4b3hkrwX4IoOk}_KbwmV=iu#ifo5_A_++OI2l4aHt_&}&! zx=NpBfOWSlp*U5ppbh-_v7XC~o~SHWb}O?KL&e#6-ScbkD#1!H%c(OEQ#H7mKR2Jz9ufky0+7|w#EZ=YkfPZ~33FT&GY_v7@MZLaxp z`hP^J>%g`Hl<@2PT5Arw1ZBYE#pL?)0DUIH30IBZfe3-fz>qo{a(U`Ok=#1JfhW)q};3BV2H|x)(HV1 z-Q^}_6iyLHD1;67?RGRzJmc^#fUtYu0U05xBs9snrE{msN8~0XQ^%B?w_9ke4#f*b z&HOt5kIZ+ZbeV`e^}Z&uQ9$*udwnSLsC-yrU%y}DoLsJRMIn2&I@W19f2w)@4I`95 zcr7P_&Gum61k#<6#nYMOx_=3Uz9|5uD`4^tdaf)7-h?=Ixn6mk3h$Sr)Vz$xtk>c# z!dOyi=YR#k*&YInNsM4f2xz5W?z0}yzPUcGSbKO{55^`1pfs)c#n6u80VE%fVlyzP8(!}gD9!z)pT@p+j{-A^ zR`2{Kkp3ga#qeTkiq1t0FWlTJNMKUCAGECP9w6Z%%OY?t*nm)Vkq097a6+B z@XOY+x&%s%d95=jG}mx261UZu(K=KcF6gT2CQr9h5r0Q2;rjZ_BOM7{Xuc|TFlfwi zOu=DWmaP{JG!!WIopSwd01nRIN!j@t5IH}^>BJ%QEh=kDAIC}lVTh<(>#U!5(if5u zE82>^IqdrB{vMJn>t#P6b{WPRt?>F7`SLxw34};?DiXYpW+?}jbQzeQm_w6)+L={( zkD>7s|LOr6`4VT#4eOrr-+)|Mi|jOV^EUjY2!qwjK~SZ?$fIk7wk876Cd@t_%_@?9Cz5`UFe>8?U@p$fM(JzIVfR|VE=qARk?cCo+H+9%QxA-0 zYRs)GIvJ+wdWB{A-V@-bi#^6_C>??8IvDZgB=of&uq;d#zsd5H&jJ>Pv@ zCg6QOn(P{E9eTO`(ggiuoHcM;LG_Hs_;OV|*{5u4UKt+e@FPnAEnH9qjc)^$>1o5D z;Ne$6@Unum%2W}k4=I$mXST!jDH~>i`}4-HiXNALcvIJX26FvhCzbjirb{UOW(OQM z^(#YR#0aIMj3SliRv;NwYy1};ZRmBkFwrcWz(wj8m(%X&dt>3|sI-qQbox!S0uB9B zZR%b_MQ2-Psgh1eUloa9rIHQ5*wvwL_{!lA5J{m7b^&9bo@3#=2o!&ls4%~?U6@g$ z4~jOuK7YTN^m{%WitmCIU{c4c(^gu9?nOTNFK}bK2Q!V6!}2a_Vi6J5+p_4TRC42r z_3xhhzdZ844ZnYLQCcDSyn&D7V#W9jDU@t|7B}wR&HQNWoU1Kp46b`Prs#fn9yj(q z!-;v$tuprV-k%i(o^H7BHi2Yc;)=(=So8J@8a-QbcFjoR#gyu6+E_vXy@A^J? z)oeLQS`rx;Nwu?5T#0>7tZn$V#@gN%ttE&M|Mol|Zpas-0OL(?koN7ndXyp#OGcge z(?}VmQA(j85SjCj(~c{I2p1`oXi%>6LV7Jk^2wm|2v*0Sv1fhar0mR`{nOpPhtKre z#)0(-=I4U=YA>+$5h*t##!+1Q5l_3*9WghVT^08d7yKf~Ryyo4tiYoavC~^DZ=!!A zKs#XoLP$^zyzV_BDs%_S*i6RiB%yD=c3sZ;_WVh)_wJd5g%r4$rmonG-$_hLWB?qS zU+QKUrfPfdj`i9)m>Mnr=t-AM{^s%p2oj27@MoJL^!$`zed^+U(&@S$WpgXLes2#L z`fs-!Q~iiPs)0M6PFePBT6=DH#YgS^XTQ>4({ z+R$0Z9%xk?XqWN*ounZkt^krdAtR`Ih1e`cMTq|=d;^A+J0TJ_^y5$*(a*Dr;6^d| zHv~V2Esds8+kds9Bbnk{Yl>ikq|TDVCY5$RfJ@14E70H2qE$h@EVS1s2BOO*eVRJ1 zspB1;pfULcsf|M+Rlj|giM_?BIh#!J{MVhJ$4cz>ues{tox#O^z%^9z<$O-T*y$|9 zjxW+_qWcbk1MRPYc>(PaIp65wH9Qex#HQGW$`;`H!bm6hD=UGLmCAP5z4 zwH^P-43_&w%H&fWs%F?=0hTqIR=<_WFyW7_BsX9Zz|;jzxX&axqqqB^zxjm*mFM~e z*#l6d=maYZIq?#1ReZ)9N?=3LZIOuMVr5-B9s&hh{II?eOtdLpBs@9v2bQv6nn;_BEyqt}qE& z&LHsXZ8x6vT?2!wv8&LYikJd-o_XKBC&+DL(U-|Jq8EM_jU?#pN%QOByR#xQULQ^o zz}8@xqgi`6k??a(X4h||`DfpZa=LYe==yPrzdzYz!p(!yb=W=w>tX=4A0)Mv`@Zg@I$9L9zfv(lW6D7@Ezd4ipKuRl_5bF%yZ1Iw!Xju0;V8|9(kq! z{VOaeI>Im~*kkfCg4Ati#qPVR*>B?(uXnrE>sO^z{%>~etGlnRU%`*b9)`CLP#NwU zmj*w!N>w^pwamA^s0_|!*Z50883#H!)I^xeYy(GLJq3o;#M}qgfBbo$H0}rRg9PYs1b1GR%MAxdq9d6hIl!9@3z0HYOJ3{kr&4T`JV=9@>QaIAj5abL#QN)3B;A>u1=a>7sTlM6 zCobAQqfP-fk)wx3RfSSq-opW2!9U6{YNl!x57m>hh3fAL=B~{=7EYaKo+}j;+{}0c zzU1x~eE;Outv@VM@4ffYgcU#~hFsBn+fRcV#pePL#DTcUpbsS7r_sfXXbdm%LE%Eo z-9C=4J)+3iE882WGt2_QhF|%Q5WbFyEROj7^{R#}K`DQp}UMC2}O`0m2>DhM~s@bf$8LMHwmT12`B7MCj3oOk3?% z#2x)srk&Q*V^LHG7-wv|P5f=}GN23FM-$jOn_S7-)E&$6k2flWC{X$Fv5I~iozoAs z4*7HqG*;zfMUB1ro3L*}+q)FhK(vNQ(DC()bHax7vF3cw?VZ~HI;^$DmqsTLY<}dC z(B>06T}BNYAOJQ3gSL-vqX>Ygh8Pnh!Ky&qgp&hLCojeOpYH6(e^PQ|{t>;NqZ5<| zq1xUA8dL{{7pYOy*Vl1L>Rxm#MO?(d60VR&Fb%Be5JMaLjhU+kQ+{6h(M^9v0aizW z^*etD1>2L$4(rjGeNUmK6jAuoIGQV<*H-M5ED9^nh_o0!^fq^ z*wp@ido=~*>ULXgzuUs?`YkR$aN*9M@qw19Qp{ zs!@J{Jf385@d-1k_XAn z4LsGo@C`^KDtXB!+yBvuPCM}mp~)0<52apnDqXIn=ozE$YBgjm?u1OI>$_V~l86@G zoaZr%tn=yO<%f?fj+tMQ0Dgk7&A60Ke@#F-VbSe>4+KP}fn-afe$ewAh%TVll;Dq> z^%CnG+nlF5Hk-Xj8AGNMr)X{MuUlV5__#^1SvT(wN{5{Q*}7K}EZEqi+i4Jwl$T_C zSpR-6?142@;g5HX!TH1yS$xgGs^r*ue6(5C2L#OStz#;V5EqB@CLal2 z83;BuLWNk%#!j7;pPvWj+uPRNAp9W~oFpZ+TZGD7BbE<^il1+2OmO=)1Z*3{c7AcI zV88f&NB{-L;S6onQkO;d9rF@!s9cCklO_;xeOhP{AkWNMg5HNJ_bm3@O?!}@~reIt1U zdFwBF%5-gn8LH8?b|10AT}C*n{6GAKb>-XL_!9CQ6+a-REo z^d8+y*ux`Oq3=YEKP`ZYXQ$}W?C}bz)Oyh@w)Xsk3t0oE*hGO6mOQ`KoPIIGjdDWEzl@zb+I)JyX$@RmoD23X1=})3o6Gnk>+xT|Zn z6Kj$f77u#owuKyE6`SYi1!G&$aTAPecwdeU%vrP`5nhmemXDr#v$+=S)W}GtNbpP9 z3lrm)gHsvcqYfnKvt@CIqU9!!f0Yyo#^77)m7s5Pj__QqBJp=0tKI_^T)s|y;B#{* z4XI3eR8>s%4<>9OAaaWIGIWX^IUxFczB3brVQIMrLCwiSMIVigHf zzvi@klfL5VFcofyRO4d^n#4vH2Uw>AXJ&hkr-=T%Q7tMfKGwA+&Y8A!%F2$Tl+_9k zpNeG-l%2i1R>fS8*+b-E0_g02+Q@Q0VmV`!1-iI!Y!Eh~3x)qQ6r5lJnvUKR8s^}Y z4}1%)dlN~Mzg+kHp#&)?g&aEhjYT4KqgW$HpWUCyqCxGs7Gf})vC3fLsO~iv#4XZl zVAwo-F5!&WPN(xHk~uk>y)G^0(g3MMx@i%u9sM0P<@px;N>N_2-{IpfbNoda>=BBn ziT8MpKeS?f*9bwj9eb$XvXs_CiD@4BZGSLPYxo1W-uS6t4r~Z5hS{2oPMlBtAa(ET zy&c)3V>v-?8sJPciu}j@ZPpMbB$yF8)oM?aOD;NPfbO!{ffzkXCB84r7E}=$W5~&q zmyr1^mRkm`PpZInk&Ul##KE1cviN{IvTJf=kmF7DcUqj+J{i7Z7n)XDCxRqhm9e&9o|1KxsnySNZYZs8 zQPP9v7g#?joDq)ka##1LuRD1Nf>(`OyjLV4SV`jT<#UYK*|@Eg?FXQ54ZcG5M0+bJ^HK4La*{-RZWA;m2#mtY3m)&6=-w$aF1fMc z&9jg*TKvsrv|+D-Xs>5ipo9_IfGcPFt%xvDr=ks&xk3@YT99;o!2K}beOrs+2=o7F zQ#&(BxPDYpWLsN#Jh~Q%J3`|#p6=YE~__OWKcumU>5etdMYY1XaWQ%q3;R{8x-wtE!yhXR=~a~81r`j`xN zOI!h}qT4|HKQvV+5j@(kONMrUnl*HN2j4)mQ`s|mXW3{slaum8V(Y&@>8=NF_vE-( z{HYWDU%k(Jbi#tjzvq+rVOVzOuBd399#R~jFHk`KX9Au)E^(#=dhJp5tD zAL;YGbXn*$FybXzBh%g&n0fek`ooNCY-^MmT0QtX$q&v0aaM&z0|fT^sV~O-Aw{Y| zyst`vhk!7Vi!_$15z;O43wwq&BO&@JBF~Of{gHIV^I9G+_@G+!uQssl$XH46BaO}T z0y7tC(_K5om-oSf%JxlnVEf{Oc8ZA24P99Gpz3Ihqu2g~_hb6(5qbT7;ic7ZyGZm2 zu+1j1r;6X9UV6Y`$g$5+xTr=tig9Ld1K5orHK&p6XR~d_M3Iy&D9iu{aC}bqE>}*L zhL!EW(5MU5Y{O1tsu z#*dXUr5v)U4Azri=HDC0|7}RvbiY6hu>0#Wvq+5Ek%RA}r0LAP?SxfDE?3skgwPdo zG}u822lIgyel*SS+X7EOtB{mZnLVj)N-YN5%Ky{aSB6y;wC$>NBi$k0-GY=fo9+f_ zq&t-E6i~X|bazX`rn|dg0}4op=(hmh_d7q%`FH;9eO+tTnwe+jnJ4b&o|58<);YhI zzj?i;t6|iIxm4n;#QsjFuBgm$o@90whvhC$$~H(#!R_Exs=>746&6ccocEI)^r2FY zN5xQ170qF ziGaAmA|<_fNA7WFCD}+Tu236A&T#AuxN7(ZaUpLjT0MgGW#-4ep`r3V`=nKERH%bj zfp3-l^Eog3M(dqVF(4s#S-LONN5L%G{3kDVZB8ksLeAZlC~sy@>Xwt3um=mjgsTu{ z7TC4g=fahu&;@knN+2svlct@ED10^o8>@r?)DEbYXEjf~y>%z2ov$3T{x;;ij2e?V z%pb;-lA;9EPWQdK`5OIs5?uQ|cCDQM**tEnI~}?ZHkE>_8*Z5;{4snW`4iO5|4H$o^B{Bq*XXesAp#g zlWrmEW#SM&$Z7B{HA<K)&nJ443H}E3~k-^DA4P_?*d7FtzBA>8dzd?ICrUsmzj3 z!ig9(5t8m4sXc0ewtI50HMTa|l0FkS8(aL9c{l%stID_InQu$rchzjRBTGA9Ch;bhzu4w3KD{#f3kP?VX8ky{4+Cx^>IN&4cHYVf#dcfFVl{WqDL*U&FL)V zDDRw0&s^azSTJ@<99lEsZrpedE{zGe(yOe`4-D}eGI?W>}7tCfI(gyF;=ix zBXz*8!On=zO(b=nZq1(i>{~|r2BwBHU3SUsg!g&vA&mn0npi%GTz6g+&OpMKnV6ka z_vG%}Di*M1h4#u$|9ypG;fK#5zOU^I1r$Kg?P2(@!`k`WcxojJqz>c4$dEB6BBt%h zM9p|%%X#rKaO4^9WfE1I(0R^3)1Cd9B~?$!5M(M4%Aeo~1~ z%Ow1z`vXI-uNQDJ`ocf>>MmXj9Y3R&*@{uN(oxnIY)dZreayO#L>rtAf3}FmAuyYK z_?#s!S72`@!s%>CwLz%g^-6OwW_(x3={+UHo&qA`;CP9!_7>7{dFe-r6wZz{eQ>17 zD9|0`RZE~qKtomLwmsvBIczpT5oSapR6B~wDDqJ2+$M03Ux7viSsN;!fu~GxokA?^ zd3@F)EZ6#{(Tn<4~Od>8M1xdK@uxxnx+zJCv3!rV@(|MO8Amx4;_TY zxEQ@FCU=oR#HH)m%~%vU$4j5}mG+vTQTwmm9;ehbDzYs)X??2(yT4YMvW85?s1 zbFYY=B^M!UxTQy;^0AG-r!psdU(Z;aJh|(@I*cA+z2ea2T3V9Tc(lv?aC^a^)I}Fr01HUMoUHA3OM=bJ2 zGp|IgA?9sOCemq|5{Ow|yXh}B3EJhLH{$z^wKLQ2-Bn5p$@+L-FNIykB`K_6 z1AYTE*ay~1+ir3+z1z-NmmQJYoRZk*>W#dUP(aJg7o9*qYk9-yr3qXdC~vuaIhh-_ z&Xfb=48K-k65Mnf$P@QOHv^1nV4<#}v?$y8sSh#4c2(}=oq?j@?RCxa3V(ennT-SX z2P7=RkKWMI)bXrrTqu&YHYmG+eTE@1)8Y4L>_)-)8oj-`_cJ-z^`1m~mX333)&8qQ z=7a38n27_1Fv?too=e2#6gY-<`emP_L4}&wjUoMY-;eoiK z`xq>MDIX4PRExj^5tzkpUFX&?6!e@#6l_Wh4>`c3`l^*Nb}SQh98x&fz*ANM3^ z<6Uz7H|vjlL3kj3MFyM>jATVhgQ+q4+^lg!rN!eFxe$zHMFfds9@I%(WOTGCTH|&!NbJ`pv4g;eH*IgcpmMp93og@=Q~2 zZs5+PAn+t|1pGSQTodZX#;EU-+Z*LmUkL90%#%;;wsX>DpO`JLGaq6qsk_V7rm1yj zM=cE;GXIw6b1h}7T%_@bVF&jfEFQC8{A$o%3aU|Oqk^^jeSEPvK?2QO38Q9Np)FZ= zxYa=_?R8Sy7TeTPkmfb0wk)EbG49BG*h~-u*q?@~r!b9b?taMD3zp$#<0$+4l$nkh zm8T@3up!_26k;{Td6$x5fUaf)qIn4KoHwyfaH?l}JBK+0q>(O# z8q>v^eMZq^vr;g6vl2TJ)=eYfb^-Ap8jZgOm2;e9q!~9N?ewYhSWdH;p^aDH2vw*+ z$4jkH1J2gM^FnJR+K8Gm7$#kcvTDDzF%eyp6tIW$d6G|GzR9)s&1K*h3-K;8q?Y${5&F0;{DO0BqL z?^H3Rg4T=WlKD>mI(D;(P2sA##z_Gl5F)Hf0i#bXMXSkVgy~+&B9y&eyKxR(&Sgl>?^*@8x5BncCce@ZGphTQbCk;2qs*v(mZ=!ZMSP zd#@yrd*8qyxKF!{xGIXeCRE3w>T>&JW>)~c6-Uwy*kHz^wKgR59QbVB$ebE}T*r!W zqo;3CXS7U>iHax-0og1p=~$%c72h1M92~Cz)g71Gm-a15`rs`Fy8&dB2-XK?#OFg-?T z7lImIA`J~+18Vl2QTdPTj_VVvZ;#A`D1Y}!LCdXHJXf?FzBtTMr}`ryp6xmUA#C)?s!XqS&*x{D1=gD z8SHuTryNeg=P!Qkh>4}REU7&5$@i9V<8Q*5d#a)8BEN2IX>MOdOrs?k95#Y1190WU zJQ*~=lMSp)CR&rYt5`IOChte|=Bo6bl^wkZpoq0GFC4y&^|j%TQ%;qw|NYWt_FL(D zg#$B55@PyRa>Hw#+p>?Zth=llQm`UgJm9P}hw~(Wm&=yGGuU<%yUra{CRW)H_VG4+ zA1;S7u83=fiZ(w4+_6fM+XIen-#Kxpj=e`$T-nqaxXwFOoH6!XEo3P+c)8tcRS%(C zPi3FXrG>1a#Ol8qL*VJBa<__l+40QwP0 zQ);W%TDJ#0y?H#?DY%ceOpf@X9{i%>O<(nLZ69oJdlX+_a`lvnC3syjCTt!cPiZQg zGE``$txHj52_(sSD9LD+2&qYQS*2Hn1{;wOWoIJEIx~~jJhUl#lY(VVs*ugFske?$ReFnhIz~7_pW+Ua>{>Hbfx5y=mTUp=+baicc>X_|~fp z^h)0hGS$qYm8V<-P>U96+&cAxLP%~7xs$(6h;e(Szi-qGf2T^zW0TzzyWY=p)zb3$ zH6am~*8%2b-7xK=3Io~|wx7@@-h`^x>)iC2ReHex>B4$?>QE^ zH5Tlb+hRnnmzhZa!`fmngU`K|znJBaOJ!tMqtk*| zM}%P0_ZFo$8zRjCWO#iEaVuT+PbwY&VVsTpIr9Ga>BDC=;hONy%n+l<;4e#d4Mlj@ z?&w0{IstR&=zsdULtp#75*?d={4Z1e@1gROGfWUCr{zs5;PDU&!zI9wi~8 z?c$)`9@zkeW4rVOZJU%{Q<-uu18EW&)WiiU5|@@(!jv3h_k3uAN9C~X1D_W#1g0^O ziKe6YRXDnsufZZ|ljvJ~lq46kmsD8KeMZAT46N@yG{5pGyah;u-Y=4JJB^4rFKA60 zSq5j;=GI)WEpcdCbovqD{NOYX%lwEnZUv9BJFc2=T_3o`p^v@#U>p*l`K`4pTybal}dI4>s6?iMDG*Fpr>?>m!bXXo`_k;BN z>FHV~tuZO;O6Dl&TwL}X)~NBOF3U{!hAtjrC|o&|mIy}toFY@1uz->~(^e4yQXx}O zk#KGm?B^Why-q1zjs4-AdrI9>U5l*C%RFby2gV%ZfW+3Q!oOL*(^M9*^$Q^SfF(Bl8oXX4l)RG zStF*uGwIN;$*@+Tk{y;$VJ`g4svvF~k+1TrO>{16v7yFpM{3I6{;k&NCPCY$OExBd z1+Hg8n_oEKo@Jt+gp0C!0HrjrUGLqfXwLJ@-?%S{g?RxFvr{7n?VASt}{F?IAeP zFR^wzQNNTI#48j7-IxdBt-+uGdo#s?dwgw zD!qqyO4QrYad!rl>_(qoKozzX>?EjanFw~l!TamZ?|N)<7J{VgM~HtQ3&K}Y|4CIz ztt;-u>x^djX3oG@N2SRTU_2Pk&`KK55&U&GP-X;;^mS95d?ZgIbJE^t=5?%to$eRV zE0K~~R4{9+Gax7-Q6h6=*o41$wHHD~a!^++_7Fm;#uM<6scb=Fou1lYj2BhbrzJCq zEVU`J!8F6hM_4R%4uz?Y<%cM6=5(Vh@L%rzqbZU3qO|JT1P*;FV{5n$ z?Mu903|7w@-%DrvPL1v#aHh0edUWDFv9#qtJNEkTHLqebhjKo}__@35-qQ#YNTr62 z{kZNg^*->gYl@3}UdS9&EH8pSO3U(}RC1B3et048dEg+Ch&7kFR))+!pvXONlk}ak+^^S%L{z zT)9+<8`~Ehd<3#u3QlW}a|qP;0vH?V7l;wh2_?Kki+(#zG>vDSejwsibEh@3>Iy-)(Lc zH#|k*u_a8yt@)$*&z?rbaM!XM3(IeZY3aXDPzD#bR_(9Pzhx(dNO?>RpGR(wEUZV| z92e;`&#@1#27>JU#Gvy-Bhar@*< zehIVCq-CLyRpzpgvxE2SL9|j}(%aDwtDEjIr2>al%neoXM=JT*ZKwWfn4smda#FAEuRvvtI6iVP3?W=*M$_Y1lP^$%ihDY$Muv zVO~KL(zP0AbOYVS6QvhYm$Dht1lR$j}m=&z%Vdw;8 zNB@^2vdlnp;*xNR({pZuS(D>tm7cxA-Yu4aoL8v`QDLNF3kqO))MKEx0O?uBM(^7R z@4C4N^gNV-DHbP8{<*q=h^RmF^X^8DQv|%XDeTp@bwQE85b0}b9q81(Uzw^~^W{$A z)?bQgW+;d0CcY6Fk+6Zs%6?#6tgGos9uCpIpC!sI2*^}(mnWSql|T2@ip%$Fc_Ztf zs(xN)fn~r?GaWHUA}?>sXAM^nNgL3H8QyEqd~!1^j&D;!?-(Hp;`*GqmtkYb|{2 zCn7FU%paK8EQH>fFb2wX$968@FD#EJ^c37YP!F=JoAW{V$EFCq@7WG5@Lc@wtSytP zQ^yUp$6+@6+2t&7P(Otb(;UA4RwC2^<}l}sINQ+r1usdW9qqUndVfjB_E3f@q3(Xr z6p51PU&6gCAew`=l700~aX%;;L-$GcxygQgdqH+A1hABWmp0{g971*D;XDFuli|oDHZ%h`8&|tc z3X2?k@i!K#AU-?Wd%Lx0??Uk_7Zqix3Q%i&49Pj#BzL-i&X$r!Bj(f=TP zQs;|=0hY?GGz=8Oc}wbzN-lk=>P#z4nO4pjvx-`~ILA#0idZ_&2`Dd_cV(1Qoh{#p zyY55}Tn6$U5_Ko-tfMgB6@wMFtiMSlc^XZp)*Pukidw7VWf=`6N11H{a_ti^Zz?z_MdVQ<8OuQI zC0A~s6zU7je#m+LCoc=*vk-qq$H+nsgiRxvQ1zH#s;S)g_!%0;us$-%`nDe^<5H!K z^?s1$mIAuLX>Qcn)?TV7N$lxN~$$o(FjWy@ghS;X1(>Pw84K^8uu@a4oH1{WJlX7dr?1 zI0Lcc3z9=e8*cqq5D-2xO{WCxF9bU0rj3R#C+Zogy-aK!M;6X`V6I78zNczW7%g`_ zmmqIxIEe4XM81Mp1L|Ne>3e-q1y6i#*Cq%XgPfKGSVjIdg3arQ%CCnM@LXAny8liQ zp$M7zTp&=uA}VI?0l5igBs7VPPnzKZJKD9p;s*ubE9G+}^zMJ!c#+;h9kI{%u~_t@ zfuiM-N6MolD74&F7b+x9V%K%?@{4fHt%|0T#sLPl`PQjLjIv;rvNlLSSs_BwmL%0e z7yO+Jn{$;W^vR{EfbyTTq77DcTI)fQNVy`*MZ`cF!jKsX3Ygqp-#r3@u_PrKhA{cc zP&+aP&H^7Sq06ijX&qn*PT^|IG@YRgiuk( za>$H09+py4MU#A^a1zak6MfX!$dEOYBGME7i{Oi@IEf=c9h%`hsR&4Hb>Hg8^n^uw z8#6RIqB}!Ak<;4GHD==H7)k%UsP-P^*2)=2T`Dmo94XuZ?f!^Q(y6L1I1h^EVn%P= z6m$?pWKb(BrcbIg-R}B}pUS5J=L?ArDcea_4?wmsVF zjmY|puznp;%^0>e`ZV2}B-Ax=%txajfc|dba;5;kyW*0MA-xX164bwBF+w_020U%hU*x=96T^SsF8&twwu$f9dND z7vS~lCSY6qd>vMr_{)Vdw(1St*Z3r16N^X%**a?Gre{E%bTym z9nz6_sDy#D0g5$SP*6F6$A+(-v>AlhBF67EoV)S=Ybdn9NujpqLAQEOh2IpR{7F7b zpk(Y>PAEfM)vto|79`w5#zGYMHGX`+cp~-r<7Mg{M3Auc`#afGrfRSGz4Q2NWwe?C45~DSkpqG-{qR;|m|7&*DpX*+tz4ZYM z8;-X9BUny+6)%Ik!Af!2^4IjXIGV%>o|7Y%mV{K2aFhS)lPqDANbUB5rEpSxhjs{} zNI}+8^gds&i7elJK9{}Fgq-cXO>H8oQCJ+9rzPcn8koYO2F}+yP4BvZ#i{pU*orLN zk@H*}95YR9X}7(>aj;a##UQ?DW}^B?LEbG3=C)Uoql~&YxD%9CCcV#EF`&LHa?d} z{7?HqNa?`IDF2fUjbdKu-4_1(*Dn-8+tr>r>o^h?Zf(lxk>{1idshN~ydSM>HRp49yUPsaCC!?jUu4!B|gJPE)= z=CNfxObCk_T8XAw^r9GQy^G`~oTxeOK=#_qj~T%vMxo{r>&+0kds3x8CzN5^wzieD zsQk@1p%vJ441c}a5GUCzl8R$4VVRTg)2)L4l!SY2JH9!n4CRJ^q&w{J7?4}4AF-MK znpeBT*L-xHCiQOyH)BhzM7Mo%jSU)w3GgEsa-3NPceru@Io13Ek7>W_Re1^E?N@tkAY zzPdqORQL4LgvwVBB{i*CT=>;m#R*9D;ZU#NSu|IZ_!0{FKzHH*VBTfjKiHOAxzO*& z+bD@7Pe5p~MatM%Gh&r1YJ6>;CV=+O`?ZO5A$<@}6yi``^r3Nierp3wz42odGjorP1s-|_fEea;V(!_1Seu1I9JRBl4e!awrd-vl=jY7vP=v$m z1I5`MalI8aLGB7*<{5OIYPdei)+6QYKm%b@iRX#ukzdQaM>KF{B5x;P)ttZJVk=2r zbEGDeNjos`y_@7KYz2d!yVa(llg5#6>kIY$8cS5HLLQ`fpSylm2J_FPdv5Mw%GqI> z_pDSQzM=FKTUR2_=#9(?eCu3<=Oxg#a=QiA0711Hr}uoX}?!AU78(Un0}up#M%utjlZ*Rp&tT1qpz^BlM_ zf7LxN-^MD2eMw4U5NU4L$SuU#$}zVY>+qU7&9`+~d}o0_=j4OFhv~aZnGDd-Pap&* zlLBz=@bL0&83bJR(-H)v5SDc6KyJo8;G7HU0tdz@SGDf>kiR!QI~Xhq6Q7=4!PHPV zyIQdjdBKCQ-y?B*LrwiSn_nUJzs2ZgK;lNIIt8sqBF(HBrUPWuEr_ggsbzns3~WlY z`xX`RyvJ&%P_9yoz4p@Q9Reb#%%rWYwuZJ;tauyo>D1M8@1E0`&^+!3;Hnel+n@sG z=EPIsGYKrsX^m?nj#p@kh)F{2T-KgH&me+|lhNizX*0g>pUE-ujQd`IZ7L3x82fw% zn?A8yr;%osqG>E-7UBGNa~^+&gMlMS9ICu8zy6qz!|gU3B)QEkE7>>GY5L5-K%UCI z7hQiLhGG~t|JBG$Te-t2CN`=fV;^qbSc}rKCBi6)U822(=fIPf=bW9{?tmpEKdIdj z15~RmH#^E}tI9CY_@G+v}CuMXaAoHvdh$n^BInXWs;J|6$P^KUSJ~R&F#Zc^;-m z0qHJ&sW3wSVY)fCOX0GaTMK}fCE{QlXM<+^yyD8mwcr0>NvxGLMVO>${K?*d|Cg9m=<-7zxv?wOell_ zpm~1sTU+yAghEe+@6vtZ*8<{oFSHmasNw(6Mhf7zzIxMu95$mpLQF{6`~LC^ZSBuG zsrW09LC(z=LhY(@5@ny zo8f?RUu%vJ;>roQ<)#7 zpH`m|lX*3zLZ6kTEPoDv*BA#g-OHWgXTAPYR(S^Ed$Sp>)Y^%^1#)nOMV+ zCP$Q7Spw!NI@A>x%lYb`>3$XAhNF7zAR|t(^)iSO+Z#a%PahEL%5C_uZq#>|li{T2 z&K74OYgAydsbC_V1J(NNu76{(GGDhmsi_(KrkuG*uQM(CF?k%N5$6{o6^l0Xl^hw8 zpKD+7&iv$t9L;I+c6VPjzd8qDl3H^`hLDh zHN@hOGCEM=LS~auwsUpfw)*F{kLLno66q%*q@U;kvEZPc5ypL@i0VWARY9jUg#Ct# z*aD+__1NHoH(l3&Dt@%^lyjkusF|(B68V*f3i=WRZ!f5@STa49*4>X!gL=P;mdlg3 zcz<78J-{?q{V)I%+j+A3RJ{>WGcHRX$|LMq{*0yeq)VGi17j5#MEOpb2BH!bztQp@ ztS@NHr^wC-QgE|Ce=^lmY7$%L1w9R-UMgCu+I1~4w@2|y=#0W==an4xcFdqz7WWtm zV^2^gwFTj*7r-i$9UY6}6zJ&_8GxL0Q5 z8JOLVL)G{C{T6a)CGlfoh5`)jLFy~860`zfY1H+RQ8~_QOvD}w5zFWS_BB)BvFWP% zz}Gm50%p~Z>n@4$j^foAIyO(H^*TRK0sa^@b7%mu;jmX>RM4EQovOXVud-RUmhrJ( zv8Umvnul$mpTh0dbCXKm8k^M6g$gZrDWQ5bdc{P4=&jq#Ep=;F_BiU>{B-@miX~cH zgF%mz&(prA_;$bF8uT-dcwT!fVp=Wp+Cph@VZRcr> z;;UxQ9sZq$KakbE0ibV3EhxNQ4`xI+)+|^uzj~GaEVF{mdN$GhC|hb<-~s2!(ipr?aK?F#IiTHOu~atvmYc*PP%Yse zJ5xu#oE_nt1F4bxN3kMmx{X1X!0n$CTP@?5g!`*)R?k_eMY_{KEifww8nC`*#$6Fn z>@w^>h#v0JIetqJe!On_GSu3Sy^Y{qdwUl&_3| zz2E-%84qo1KY*;Nc-Q_3(+~QGjE*_5*W&}pRAF@vn2Xe$k2>NFE|wAE%zr`|YHJSL z32CVE(_&UukjmbGo&>i!*Q3Ffp`i;BbrC1{NKBR-(t!i6yh8=-cqEt57y5Ern|;G< z4v4Vrq7~2vU5%0TJHRJd$B0h&U;$G9)(Kl7Fb64OL9%S04N-Tm2_<)~fcWNC>sL z7S6v&E1N;5FTnill6Tl!M_dS#{4)n!+g_vQyg46_LT>cMG_e9kJZdX_w5%xE^XJo| z0<4KLotA+{d_hKbZdLs}Mmu4Co%uAwDgNf3A$e2&yqH`~%^#LEpS9#8>{}mY@o+k< z)&Pj#1Zpo`b}Nv*zP=ZglV}Y(zEIwwWQ&KcAIGMn%{JD7U2lj-1&m;X|3eo31x!A4 z*lFqP&q+uZW|t_EiVHJ30_AbRAyOq#D8|~Je^T@Jev>oF=~N&Q@wg2EM+%7aW?ZRR zvM%1=z%^i^rnzpr`YFT-e)%b>X!(mH5k6z7DMkN==hu5KH7=Ya;PM$XwH5b&jbpL1 z#(n9>0O4|qvukUv@}FqVm71}={e|*d&nfgY&Gea1Mw1mVU8^>N4~8HnyFO6aAd-1g zl3dUixa%-~q&!y-p7-Su-}Sy&Qs*MfxE?cN>Q_J-d|DQwi(*YD@3XpOH`Oout+i@m z+jAD=^XFGxh1#8N-m*Pc#i-}~Qy+uKwEEN|K)*HJ{Xh}?SedIhnBihHS%t0Rkbk%# z*-9S7qTGD+N5+w6viafxT!H8h6q3F+`*8}Rw<#jV2kJ>%Hk{M55v*kjYu_ljgD!bh zqW&a7KM9m!&vNro( zp{Itp@cp|?{q0jjd08sEYsLX&tyN2pu?GQD0L7YB%L88^_8GjN-R36j@n1F|_fZ3` zfRNML_CMJGm+J6mwUV#ve9M%aZgpBxm_x`tqc>BhBJpa_C89OcA?5j7$T ziU^w&h2HBh?z4V#ZfnCY{uvxfi(=vD-Dz=bVmT+RnG7|cw6)Xgd}8(=(!8NNC3j_q zZ3zG5TvQG>Gn$V?rZcXMMWr5fDG{R(EbHzM8sIs}xqVIGq9?jH>C24aC5;0iK+Jl~1`CXeWVTQCER)pL>! zjsd6;a1VnYaG9A5@B=pg1t35GJ;d{{C4f87#2)q$q7)ji+JFjTn+JmfHc%z#VO3#9 z69M)O@Sd3m#RD{j|9>{^Dl%zQTH!C5@zD;Mmd5wSD1B%WO+>;&LUSZs_5$a7tjc44 z&8P}d9MOHga@34;F6hkLjv3Y0CYXLmp(_22&-ydaeTdZ9;khtC|iRU1e4U}*gb ze5)MQRb>1{>k8$~MK}J3J@NKQ%!h6AvFnxgvSrvMv_X$mq&}$#WiirtLF5ie8fxL# zi?p=f`Xue{cx)2-@pxCRqkJ-dM*|@tn|i|`1A4&iriky|L2>EzV0#@ zD;l3U^Cjhua6HpVbjwweLJIV{1J6GQ+Zv!wTJp6Th<1dvah1$ia*m5k|5=%(i*ix# zMw@?_y9r>NHXJh2w8FZ}Kfx;A^64_Q#&vZNIe5|CkdU(Yu_ z8>8LOJ9@kk3uu*o2ZhaF5mO?TT3~)Dxmx9%?yhSR?&Mz2G}kdfs(w7E%sO>dJ!K84 zMi1~`4?;-QC?KcyO2C?(V@oz#zecyX&CAZE*KDIrqLF@11+U z@5zs;>DklWGu^xPs#UA1Ba{>*KO*2E004lG(o$k7007h#gK}1p z6amysd_IJHcxNdrFAMoA0C^N?F<~_igOi+( zJ{a>YZkD1`Ms`F<%xI$$I5b7?eu_#PK}3hyQbH; z2`xvRPSIj#-%8>-qBaf9vNZ`w1G^9senI%n3+y}LUGlg6_OY>y#hf)TMO)H_rhwz# z826;-L`KF2pR?PZTsN58nT<&Z{O~8J7n#@RVCsw0T2_bm9iit=f)hE|=lWtWjL0or z51zV-qh{mPaWkTcqO0R1BQ2K8duCX2$TheALjUnCqV)6If_!HJz9S(O*`iyVo zmi<=_?n*p|ynO@!fYWDe^U|+5Ti17je*SCt$3#buYpg#7pQchb7OEaKPPR8Tp6yG2 z{u(585f1O$%~ZJCx9O*Tp74mNe zPk(OUI0Wx2$48q^!JgYeoJ7747reQ;Y!7$)zMCj%wm#mU%z3|^2MjqBH)_yQn!vYA z{1EF&T@qyS=R2~qv)g@B>>Fv+srwqzc5=d=0<<>^ZCGB`nZ?sa9ksWo+U0M*cKlr! zEVg#^ElDXWJG_4tFRuy#aGABA>#e}ReGW?gSk@|vBG{u*Ze#LIYF^*O4Pl9BcrqqvFu( zh()yp4I_~Q2*-QMBr;*_djQ77!*K8ciH%G z+Gu1N*X4r9=PdR{U@)@aP9uIWHam|rDN&6J|8}?%l!>DkM9h>pLL<@ zrg?v3T?#~{j0JSk=%^qkQ^GgB30=qSh4C@2vqKUg;A4^$*zx$zf>97{%oUT)J*nF+ zUUFWAzH%N^-i5Fh^>g_-X`tL`9JXZO<~4Dt!@RIOZ=0gQP9fYpR(vUo!q$MyM^z`U z4~oQ?P4$HTQFp$mQ9SB86)Q)*(=lqDJ$vM6x#>V%!X2LO#g3JPF3M+s#V~xu2LLFF zra8q;aP6r8KYOO9x!Gm;Toy6+PUf4tEnHffB6uN6?N0JGX1`LnJ?0G*eU_(JiIs>TqM@v9jEUL1xvWw>LIn5}8b4>AQ(iwU^KJ&N3jGFvlh zI>TAJf~w^DRBPq$(8JcwF?sgD(G<56(z<R;chcRM4CyNa|j;B6zlV81{5({l4 zk5Y}e|6H^%MH7aGMKj8ln(&e*`h_A$L>Zol|L~;RzD_(_Pa~(06k#XVy>dp_ffliZ zlTz<=e|wCm(ElUxyJz2(9wBfr;2mH`V4kliZxctM)X{j_bSc^LcqsZJIK$ zeIM+5&|06+<13zWU@}J`UK7s9{T?s9mUqA*yR5FBhb1W*3ma}nJ^Wkflw68$-8xYj z#MhZLYBmh01xcU!4{OM7pa2nk1AOrr?}-M8qnYVQIg6siLDFs1GH+w>d46}jce!4T zCpjn^{6&9IWs3a6khvSSb7D|B&R5_mvt4f^@=AP#F52k!px-uYXpXqiw^8(QMs9>Z zK|STn;%sXBWQ|V!LjI)2&Ctto$#%sl>c;t7b<2_eKBk$iyrL3i1=R(UDvmt2q*jgK zs|AdljGt=~W@Jk7s7qt*O)$D7u#R?GW4cy?6E3@9IM3|iC1xXJz*9YfQDeD>H`M)S zaW8#*^P_mASJYeHrzJQ*0O!$CD>L0JwxeOQeU5&Pw4&5tmyg7}u_$s**KN}i2mkpq zFTwTM>$vPs|N7JI^|)gJ)~E0vlC>K;FAg~nPuN{ROToy;X><+zOn?f5niAu45YR0V z>{}p%70h{&t!c&X#1_h*-7~J==ouIeifURNs7J*ZYqKeZTmMq~ap6M@?^cz_>f8tN z;*tnqhubHiKi^t>diE;Q?b1YSmBJb|qF1?Isy{btyV28*@tdyEdWCl*R7fm+jXIbK z#FF$&vBR^#;r z?kkKUbyq7G6&b03iyxg7>6MR zRaqjSuN907O8YAD!bxv4#^!% z2VAtj$p-`b_dz)$0|rAp0Pe^<6>N-J_vC2*1{zLCL>1LtzJkLy zoxnXG?bJS~y#SAWTOTTBLtlL`V^1xWJZO?CGYa1#bWVx9cMPWTciR`Dy+&@;0F zwJGSC951FG2RS%NOceLTY(}|dePt9@z0xiv>#MF!AS!L+M;3otOw?sr+K_1yuyc;q%;Og8*nl*uqvFN;%bl>)RlU5p9mQ*CP=0EFfRJ=nDQlKXuJfQnqE?k>m-PQKp z>qGag<@&wN#W~PxU6IW`_T`$WdBX4L=+Hk`W#e^?{p}ez_VE&?vW#70)QmPI#*Qqs z`XhTWfvdW>IBWt|t}U$%!Q`32^y)-|s=?P^$xWP`?nC3Rzq~Mq)I-#+VB*uRr9ql@ zZ>s%~(p@L7^XI*>S#55&D9faZ?X8dNh(tO}EyhyaN+aL$?}VQ4{WF?tP9r5N37;t6 z(>q5Npkw{upbzhFgMW1~6E2dK#|WC*WnO%s)Hsh3r|+LVvJqp`+tOHInPCX&u+aIT z#h9(pThx(*4vOcU%sw!q)u5|6N^SgIgAl1Yh9V>|n>L-!|0HmKY!lb@w8_hO=5^7& zOMZQ3N#L&XXlURI4otlu5r5%41GW0X-A2^s8^#BrBa0nmevK!kiLTc{lWFEiE{~{w zWcn5DcJl=>)pm4WL!+P0n)rpbQr(vMvnWYTs;^#3Xbic5&F>Orj?{`dWFdizYV8eb zVsnSDUs2(lzTKW~I1g_4U6vP4{&Ja1lO*8JR9WZ%HQkPvzHS6(`GFpQ#rk)Vwh9u2 zzK_1xFR$sMaVf_Dt^BO8f>yVZa+n7r3c$lymw|rP<=3%O-!{LSofRX3|Wj%*pP(CITFAfB+C z`YGy+vXiBCui4PLcz46c%6!z^MnTX53HGqrmx1GU$s|FtScvvl!THgKdf#9Smn?;& z-{MPU%-O4c&0i3rDyQa!ciE{rh>cq>-pza6UVt;uBAI#Nc3m2R>pT~DF!H*b>+feiACgv;{@l^!cRb$V5Y2aVJ(;7%&wJ4RvZUj& z`?jm|HeFBpz52^Sn8OfePTvGJWLZEqP*8k+*=bHr#BC%U^CXKLI`wz2zj!x+m!8uW z34M(R2T*R$Qp*wM)-5-DT2F2$A?wO5qv+}}SJUv}k9kYM)%151!{zy_f%V0{qd_}(o-U3#0(^;eco)VQofZ%6KV?J6|~&z(=gGR+b9tPan+S#k1hKdH-LP+Xfk)Hc zJV!p-ZL}O_9KV|16l?Me_^xHynb6i9cKG|4-k4h>T--J1JuR5d+S@+GYQ3!R9@qG| z&~OVyX!7ZZFO)Q;4(4|0+p7QAi+_3I^=DXwV83f1jra3zYFP8@9V5f@Nv&w?<3(SH zsvx_*y;MlgX8(S+M~$9w_aPR-z-}bxWEb$eiFKrZo4d|BEw1bJ;Wg*w4(1cGADzkv zG(;ls31%g9t_}c51?7*t zj=(W8o@#mIyT4tIE@Zpxl*hd}V~V#q>C&kAj$8`d4Y->;szN{#ek*2A_5Ty%&Czw|^IhYc=7X<$t~Vp~(@CCg`+YmySI?dc zOV!Y~=O_B>J6Y1wCXL3IbKu)+(B$gnpe&K#TQYUB*2ZfG#9^fn;k;3%47Yd{7p59z z=uoJQ2)ys7dgte?x@-*xKK zHoqtrK_YU+JM~-tc3^Iw{k`!Zf$Pw;b8hG3*%_Z?AXRg5PX;N)5c$OI+R9EM9RC?5 zm4%?mK>}H9TzkDpiBoVU3N?-l^NstPQ;5{+Mw=mBS(R7DFnRx)3oet1UF0m0Ozrd! z8(9ng)1oUe5@B~tjILQ|Sg<}XM-Gqe&a-qBGJ#Y2lFaj9%bn7WLceCmGi64Rl_U~> z;H$xtSPYJ{;J2y%7=5BH#x%AQu%g`KCa8HvWZUA3o!NTmv3Y^e_kg+Kvrk#YPnW?F z=aVei!vqykk*T9U@~F<#NZ>)S;O2+{Q+KYM)*eq6k3f4n}n5o_%Z9Cp`dv0mQ01D|tvcT@SKk7-XAe+m zO!$pJ^O4aW88U^Db5lQ4#S|2_iPS)X{xc821-Z9To4CZe&X&8IEwt_3Pz-Lfp)X-r z>7wKVN};r5yOZq~i>Ao@sU}DMxZaq>bf@$jB^K z7>luXgF=y}iESupd>J8`EtkOcQkdNFB=~2AdR0J$ZV5He`*|}DwUTD=BFv}n6W!K& z2#den7$>7ZwG+hu7GHLC@i$~&8#*0luP(ad4$kns4GRNasQX_NFfLMXJegSqgU5t?7gb8&b5THNnzWj5eV%^zgm*hql5bFoaIJJr1p zxMWE=;m3EF-YF7^c;8!@{XLnytp3whsffuzyl9^Y9(eigl~7+Lf)oXpB5f6w6g|!N zs1gGLKKxP%;7TIfGY`w4C7J_JKcUa_uK2hMln0gL8%o{-VKwruBiqI0DK=-i=dyBMLD$yS^{FHndr_D2 zZL#RnD9`!}{@UtPMf&+nl%|_QAuVc)FW8v$>rLl4m@~jxu`}SgC_c~L-e7s&)W$Zn zysF0Tj4clz(-=+ks3YT#92$Hq2|6M3#ZQt8kAc*fYCK2eet`t8$upCwM25(zL_AX0 zL5qdP=0!~9@8Y(pQp~XAUsyp%%S>R}FF3ScY5Re=M4l|q@y8`$N3GwtzSx~N(D8gB z>3rB?pn+a?gY&yOIdQa-&U=g5fN!EYNN~L(cs_U=Zjf-Z!lzozLeDq zJ{%q8$+Z`r&I;zbPx!yyG!E+JEg|-dwi&3w93{o^sWWhUoE5rj+F8PYP#j)vlHd5B zdIaTB6|oTXIZ)jJq{xD=X@(x@$;mR)N2u~LN4{CuvxeyIG=3Lv^3Rz5jn*ewiqm#* zu-nCh{;3+K1c-+t-A>0J>IBY`89%e^#IyetxCCb@M!7(_isNhEj!O877omn>3{~ob z+n-|aGrugH61WX1J4FD`9l+h`ql0?V-MsqeVx~kMn}nA@ll~%i0iP%hyO?o0j61fJ zl%Zq%q<{%e7KC!E++k#+NN+I_2OF!k0xrySZA}`Ilm(SmvR@d?RzHucN56XLCo%J~Wnki#uCY4@8miu=iRPFtt|wh~5Zkm`^)MN%U`&r;ES5 znF^j*rQv@^8n-3`qAQ)kj0~F&ZZ>DYI3XY(^}tkTWv~0Ak`_3mIDpr{V=;axVQwn2 zu)dnE z1@R+E471SM`CDeeMbCYtOJwF-?xRG0Zcs19PXV-q)sI)VZ)^3yq|3#s&IXfyGla4@ z9IqXBnLVXY{N+w(!~Hc#D6#YHI(A>{db|MAIUXIRB?;?%oAKCmP{h5J*2zZvx^9V6)&8bBbB!3XBBF56oaMfzw@lNi+uuNAYOaG4lsH8*FH4vxPm> z#4*?x$)b5R+$JYTd7HkIFxC)DRH@7txwjjqJ%cG{pkyCN+j;u3qM=_aj1pYroo5>cX18Vd9z%2`Efad z>34KH*NALr-wJPzX@2c1_n@XD*ScpDxcgHI-q)Pp&FM?Xgc;WT7D^XWFm8X;5-um4 zqZ^jw;Iq9oCiiAw1O$FHi+}KQjk+o!gM&BxtF*0mp3XZLf^6U zH@>@EMMCzY8~&dRT5qH(E1r`Q(g!F6P6x=Z&~uzooiD`+>J8^ci;SHwebJSKc?^3j zq*x5D zHQqMAt{dTzZ<7zBL-TN5LwHZXtF*|0_4ZpY3z8t5ZE(|fDbgHaYfM_p<;g{}a~05# z#(@%r$8S^Gp37gGV;b5Uzg;qe*Y1(v1`~i~V#jhyO^GBt*ySH)Jtn>MJ{@N?cx5K6+Cjd(Pyy#7tt1sL;HJn4Zevl|xIP?Mr4&16?P6 zebd*ctvCGM!AJL#74DPkpW`_mZ8#uK)EIJaBcinxx zI*kQ#k!TmkogMq4@>nwSk|PMAB&}ZKi(emV{8uSB-~G8;L%}1`M1Na<^C(??|A@wY zWG!S_EcFA{Q)%dY{Jxg$X$MV~xr>e7jw@0MDGPehmQMNYYeK>XIi-3zJPpzmQWlgY~}6k=JHi%CJ>wH(lmxa-!9|hff%{2%~S~ zvS^rFqPUB)?widwFfg(upBsbrSCv4ZmvV06KR$pm)xPWIDgfIlU!pz=XNx}DRBWg% zKd)b{xZSjO?$5KvWu13-u63zHFb%;aLU{afKY{xY=ES_E!QBb#Tb>?7T1)XD z)AY|8gRv-ilrILxK3#hgb?`#6-U+Uf^VKBA`}KSLT(6T0$)=yESC6eC4-USk6j@by zZgW%+CGdCXL%2!G0)qA#47ER8ip%rH;)cs!IJ_o?zVB!&zW5fJXxuYI57^J+DK--; z_Ym`ia5qRS@Ph~%{u?j(kASv6C}{$FSM8(#KtRKfbp9MhJx2eF=C}@YN&(c|# zIPTc4hKGqT2X0vXT8LVaJj?Jm6NcpPBZbU?hn9MdPy1(BtOU#XO1@90X$N_gRoGu) zuP9$I>IKsOC_+tU1K#sn z(eOI5D_=nplD^6x0`Vmq7Y}*;6K(!;(}m{fIA5g{vA;I%soL}GMa?}AGwdg| z>OEF2>6&GGh;??@b=KIS8>*FdK}+2n{`9P5l=5sb4qJ6nI9Jo&$QP(a0!&F8f?y5t zxLx7>?VJ=2$Nwg%$%+Olek0=74kK1+e&*NFXE9yIAnZ4>Ouz1O>``c9IAT`=r9`7o z)%U+kQp#OB`^Sqme5jVPZ;QX_#JsTM-6Dti^aqWT#McTQ|2YnIt)a!O0D1$Q-RPTn zpa5cqDf&#eOIx_6Z#QsxE#}?(CV%tH7hR^7%@Ux)i^X)~7Q1XbZ@kpRTq-xI5xz`2 z0n+Vd?ykNP2Ta%(u>7Mf`(v3rIw#m!AD+%xq0ZGi2LO<;NG8}pqsJW=g2wax9x zQ{@#hPsa8UNA0s(q~SNmDkb{2K)k;!)b@Ssbt2achpZ`C{qCf z-i;sw0LC!?vO)Ye9=D)N-WQ0YU*-(vdf-h0A<}nQyy0k;pnsu(wR z<3Gjh|2G>A{ofw!?KcA~Dln0b)5GP`kd*vZP-z}09qaMocRrcvh`|>H$Iwx$T#6#( z8HxmWAXX5rOY$s=&Vry5ZbRz)G;S7_{gQAWjhTv|=MqYA$rmG~#Flj5dagltu!mMw zLboc(w#COFd@TFS1S>}(wQDjCtL>f{<;HuOpJ_Yo&kS!5%*?d5=$5G1%DEpE zLF?KlCR|?cqPe9??8W-0Q}XfU>c6L}?1{(hrGsag9IBt_$eIwLV6Hz84N1~AkaS%Q zL^O>Y09J-reeb_;u^4r!ww%Ab05+t6)izqiRq@3eCv|9Q5E7Xe*%`9O96o3mHqYBn z{a#lotrVD`RUaeVKksXv@4gEu{vsiCdO%W5BGEx_9{{-qZyclM$EKe7`&RjFJkJwW zl1#00r{2>F8%jVtr-JQuTyUG0cC?#tkhMb(#$`bF)iURX9y=yDplqV$=;xf?F-EZLHlIf4V`k`zW z>?FL9Ut)-(8>Q{HpbcYuhnu#Bq{q=xWZlxloe4lHgaS0+aG$x)=?Mu^ct_ zk-Ij!4qKUJ{4AWYlD^G2pG@#_)>SNRjii{+QQ(pQTv(~<*!7%$WzKo(mf4`z&QI8K zq=_jmTVGfuBwh2#wd$&8mq2smeaM~t`k^gv=#m{JAbN&zM4_UaNGw5(?hseCD5H=r zW>H;BQ{Tidhk0?0&A=kY7I)Gio7M#7SlY#zUd494PK?0U!?G`&chC+MDk~%J<4Gh= zET3K}eBF=!;;aGqwTmF1tbY3|+SF)QW~y3tpXgb2!~GbV`?DksAH+)1OMB&x`WSY&x#L+=`imIbG0Y|MalvK!ZA?Jz}kBHZB(_hsX%=2uiyv>V# zOOQ>>Y)eVD`|kkYlloweC^HD~7udD?sCQq8 zPygcvWN5k}L5i5ae+Q;RI)-{AsFFK)H4F%kQ)x4Zx8Fkn^1G;pLhI9X^9IdPjuU0P ztjyoOQqA||eOi#NlgUc*z2FWiQ3-Mv7M#Znc(vgI!2DiNi#KPH!7{n6UtW%dy{tNk zr9YseEez@Ts;k=&U#fjBGs$KCF~T6|wVVa;vhaM0Ij&<@z0eMAjqsb87{8DiBEYDK zY(*W(*jQ_2hELybq`!_3M1jYb#(h31meAUeWEJO2VH}IQo-73KOj|Jpy{6AcEZZJi zV9vB7^2Iq^*_Gh*WYb5Pu0emg&3rtXaZ_C$e{K)fhUGkKu#h!=AVtf?h#0lIwP$l) z&OVDBud;FYN$Yfj37E31XPGd-$kEhk4xhM#CHQzVYgSOyQ3K2z9ItMa_cEKDe5I*Q zDZRVp&=??v2t+>Y(^Jai?|KcU#zZrg?4aTT9(Z<*Z?4z~YDm$)P(mR+cF##$IMAQS z)o$fn-CH{plz5ith?^EuZAAbd3`$%ag68adLVR_M&0VV*PV8gYJ6v^~UCRs2aPLa3 zODM3+I4PWS-R9~;S^Th5SltyNEn;*pfiieAYU0bxla5=d>~n}Yv^31~Nz`$<3J?|X z0EAFFpUmFKl+c8!cA1VdZK9sEFm0~P>B=TCB#jy*fPs}}Ew9e^zS`Eds%XnLMf8h5 zZ+W#!h~UKDQ#$(k`|>p*1l|pLk!5{+nywN*X=Qn9h!sv(buH2^Wz4Lvv^`D8vh-5_6kOMqqm`ly z1+Kl54&r(%(k-NmhQ7WS>|;iDt}UO?Qi7DHB(%(+nL*QHK&(Z`UH|*?oDEmJg1Xz0 zol1!V&DO@s(b%1?M*>gE_>g60x;R6iG}`@&U;2mJddQ=aq62N*a*87^b~f@mM`={P z(vtybKsf4n1(%=nhfL+|;K0gP5gT>LnBcM=Rs|S@Xz9 zo(TgbLT5D0FyT*^r6t;ollDkM#XTnSnMJ|o(;~B$p_7b3C6rrm?|Og_NSdnMHk8Ji zVO~WgSuy6O6i!*+XLbH8z>Z1tR;GSjzSo8Z6v^&cUZflo8-`0F=u|LULkqnJ)fxxs zA^cvdGiBwCI>|40 z+5`V6+_G9+UEG)fdKC9ka;&6M7M5wP=5<(z$wQ`_n!f(fla3OzEWa*qY_O+*|Hens zA;;#TcIY$+TU#MrC1rinbni9QQJ`H}J)fz$Q_`RcM}apof`{G_lfnWIK-FRS2`>8f z5nfe*2LGX+-lAy!QmQZ4tS5v>vzCc^o!UKLHU0@8B#`83?qJVI-!#~CA*G!2A!8iS(g9iUC?UEw zSz0Q_E(Uf<;b$2~6H!>oxvdk{BgT4^a=az4BYdk9&?-$m2P|mWUVTe?L8axo2vM>t zyq}!)B1{m?7TkW*O=*c74&+PGN^}UBJ`ikK`Tfi7`+FXh4 zK?8QEAq0n!_KSSe)Y`oAf|A3#A(5_87f*8TIgc?pM4u#Fh2vtfNP05&78W7h1XPOYDH;N7jvI>n6Ymy!*Bpu=CRwfD=7g1e3Vxs z_DE7ivGH!IODAMJ{r94+eWb96GU%~Nxx>ZV)@Flet-?K21OC5$c{Su+r!mmD&BP7QcoqoH4- zjqxZ`VycVl(_f!{Ao}#>TB{bvROTv^uZT6VWyy+64MCW7aCMnjQ{R{vC$a|0a05^B z7Y4xzWA96uJ6{V+YLps~BD92}_?CT#*&rCos;{4J(FdzwMBqsfy*6$;=fBg}@E z1IeoNj$!EO>1`Hk^y|$c^zOofElQfk9zK;0dPE>51B<-?eqj7EFI5u8?03ZN;MEpY z23S+b&ZLsDa*fH@z+?N79>y|XAwG<4(ql4h^vG*Ck(Smr9zMT!Ltid?qya*=IK<|R zF8)_#^~}=wR(usKN|SpD+bu*0`yoky0C0ltKbX-8^RF(dfAv+xD?@V0|FYrgU%S>$ zGmfki&@#rkMs=}J<5*$fYCRr&TkZ!gDtk5~0syce6}K6foOFES)HNj8Kqy1lb!aDX0Zx8xjOyoM$X#9Majo^8?3#JYWuj$-LkG10+5 zDAfM?(BR@%kD{^`35v$l$g`wM&k7$#Auc~aZ6c<*WsiZXp`DM#1}33pzt#ax1U_>b zUiqQ&5(0nw&c2(wZOJn~)12<8`v8GL!wf}a_&R&Lx zBK5)0KKqM2ZxlYYLYmn7&>74q9;>xwWn@yCl$b}!H1wR4;(j+}Hqyr-gbXu0RlRz) zaqS;*Fz+p1Lh(zS(b4VS5aSP{x42yc$Dwk^7aoRvEvVODVd9g_L_saJinJI+7k9j* z%f~#G)MTs^rU$pXEA347Ii5!RaO3utORCe$Ef;(F2xeJ8;OxPx zYYOX3OBTDvR3|f~C~QcbhNJPr4>KaGYB%PCqb8JFEbgeM);^XG$u(t+j;zN_CceNJ7Q+dXv!<)tm&(Di}VbU0$r-0x`>%8c<_$O{dlx8E553CIF&;PMU$?3 z9iql0t#7OHS#h$@dt(2gzM<@~nF-c%7BYH@P6=^~&$DYub{5z1Ax zidoX`rjnT4krD0gSUwhZVsA13dJp?h#>TuIkuALwmf~I_uL4kk6f0Omv-vz=?t}U$ zX;dbAb8GZxb$K1hv{8ePGj;Fxq@pmC9zt}T!p>*h{g=L%dYo>=6r=^-k3GVh@)J)E zwb#!+kcWQw^`0zZnSLs!MGqldDag#kDEvbZ10YuA7DBOi#GB7*oR{WA;8T{K~U>829!1ICenaxY@8|7W^Vj z>--@`2UQY$`Qy{0DVZp^qOM10#a*znF_#56oK0^Ww6OaH^f`u_jv+<%+1eIyCkEq! z+2+N`ZhVO#OM7vm%Uq8zLMardZ8EBF+{SyKBtxIEDr+(A1ZznHi0rqy$=za3I@~u_ zsb)NBYgX@@o@LqeScucWYihO|{`~CVv;i&|bJMowtcI7}TZ9L-u4PBGkjE$({W_uG zBwfdxc56~z=;zbSiI&tV2Agisff{;%l@d!V1aKxKyKH2EU)j7=5S&e-O!R`fO1`-qP~Z zvMh4#m$p(fDTmkT_IbR#d0aE3JdJTtETz29M;f0e-7yjyFr$$$W8^oNcVeEgst)uZOGeg!^xewr;o<1hm)hZ zGS~CzaH=AwRLngkMy>ppwk@r}PK*CT0%`USyh;melkXKx?j`sbrpQKnZx+vjFgy>?+o9ts4FuDP)2*K z*v+5iq+(UrX~~OvYW37iG|9Jl4F8sU>k7M5L6!71OLzxh+ziF;QO;6o%eHKs1u0gx zemj4~$0c}!wqX!kUS#-)^_LU5rAmGp=M%VjNWZ@|8y3~{+wUZ$o3T@2Z23=Qu8K2Zt$LLo!fp1sKGIN2*AiF+J7ce$pONVLFQ0S!4cX2((~FteW#`l^ zEjXu>%d}5?7V+6`Z4Ghl`lW?J<&qDnP=8pYuajQp!oz8>%rv=KMJ_q{U zj)dT1wx53%ZCcB+dh6HfKD0>}%tqfv`w63bb2XRf8?LczN>`_+nn*A9nc9|*62|=5 z^uhLZ39pRXi-Kz%;{PqTp#j$-sugahq$vV!fw70_*uyjxRi#f?707uW%=0g_-?-1E zD8apTRg+kB2Sx(*{i#^aK4OX2S|7m%kFG5mn_gsOHyVG~aBSUKZNqRkTcgw!1Kkov zkuQ1uFn~edZDWBz=H^(Mg$F0;o?A$hgH1V3V+Kgu+CU#Mik&-E6nn$mmMRRTMn(BT zHi5u*CrrQM5N|9LY{p-r-3B|0%aOV7zgtp2BVU<^#kVZN_41Dcf4|@$U)f#8rx>xo zD)I838B`#)Z5xgv#!OHdN`Pim0d>8ffKilnY2u|Rusz9?D(WwZMIUv0GgU`l>bO2e za3jOPN+fbo$n$k?hCMb;{kGD7+w=}hGKehW^qg*iOPyomDfM6SR5)V%KGMB2PVEpH z>vH5LdT)WG72dCZRWxcGh(3nL?POL_+@9{-ivq+2!o*vFQTokdPHSQVV7QHhej{JP zjUZn}j12fi&OjQZ!WW%!!NmUmfzmx?;I%E+U$*E)2zh+C7fc^XA4daj2OopWqdij8 zoi;=PPCtO{}O z$}QKrpR@2-E(p0s0oT8Qi2*EL|d(b>!cmE1um+ai{vR(_J2w4IIT=7YB$U&f3EETp%}m^Ni}eSUG^m1?I< zy37_I)#!5#gO109K+}M?amsw7j-=+Q9SNZ;&zFP^4)_GYiD6%=e#=ObEZLp!Jc{w1 zV+Ia8i3}E$KaxG7E(zO!k!ov7%=Ne@>>_+WGZM3xqPbo+@lSrSgZj*E>Otk%_BhlW z2U|v2p<{>A-)uMnwF)aSj!8-$Z!@~GUmTLjM+FFuy#Pl*xvK?ve=^GpDt0ZT_@AR*v>B@T zS^j_%D>bm@p#$>I9s4_mdF*w|c@xJJibcM3uEV=&S@nzhE53WxuW%DbwW(2^fY*C6 z%-2GW)I{qwc8dydbc?62XP%hwBQ;U8ss_6O9X?&0D?8APk7SIBBWHcLD4Nk%am@1z zm-bGw@coZD?6k*u<+XGykQZPjFZbOu?dvDfT+OQ5ZkqRZqv5rnto{BWgUZNsJT&Zx z&CEXcLwnoYIwn+A!dnID-|@Z(`CN?@CJU{m)}JZDlI! zDD?{eY#)CRJ|ohm{JZd{h_17$KK)y-e<=fBgkP==yBx+sBw69i21JX`zL%Fs*Allw zIj19ZzP6gLZnCl7xfR|S)(QsM(N+n=4mA2c7ybW8_%vp>Su(h)x0}6TqvQ~YygVuD zuR2bQ{o7p$(gz;=?i0-CQ52%#YR?4k_>YCRdH^oeKY_* zA?|e=sLTiSFbzFY$bS4r>b+*(+gRXN$jhQ6g%PdxL5?7BM?>M9s#e5q~&W8;r>8uWkqMUcBv7hz_03J=%P>eq0?96Nqi!ngnWhKCH?L zuE~OxPXiCY+RmRyeWNAe{A4@-!o+lyKD=;x3FhyJ1s@63#D6sZ89p5Fbr6}=2gi9$ z9++CQ(^2n5E+~@D7vrBELusq^%PJJiq)3HjtPPJVqO>?M<>5%8VXRBOt!s}?i(kSR zcRpd*Y^6u4=;^VbqOp;Fj8~i|lUztPL0DRy)n;B{5R7ck^EKOoyrQw%z7bKCPYNTK zi4#%|{bQ*hb_>VuII3ZvybY#`BUG4mw%o{MS4l|{r=_@aMPRa~sin?w>F%A`5=Pt|Fy~X>Jr?RoW$wo}CcjLjud+s%r6( zw`iN39;qeWJO{bg5;s*8E4VU3o}`GJs$G9D#EB&b=tJw-BX@4@?}E};x4oo&V!aUI zeG=*2^Qqp7PH8K>;G!y7$=*Dfcs>@rXs4yaVH{6B8l#l@?zXjYn!j{@zG&&TG1B={ zh(4H1?Qs^48vOhLZ6-IN=37B}>>0BL!#Hg4ocVh(L3I{Ak-;ao<_|+t-W$u&_yB} zstf^RTDEVS>nKm%Fk)%>pA-2~%g5h4At-PWwA^HfTko?+->2PHx%CGm>DIjGdc9JB zdmsC%<|bgoX*xjR_);i)&GRsd#9J7=e5@&$+Jh~3Oq-mnD9otHMACE{K;Re-XY-NbH6n?*RTHi<_p%MeLce@C$>(@COd9_K1y{T4ml=aNQ631SXPt z^Y-1qG08^{CUaXAC!lP*-8|a_YH1_VAQkZ}Ar`5%&v~Acc8I9rPFJ>;Bdd*(4*qf4 zcoegErb~Pe`VIU$NlDLy+`W|_bJ)QV==}#(GWqNZDb$;vKOpLlPDIToR7s0oK}zCP{Dis!hW=H2`8N*q6_c&K1BA zi?cm=<8KfX5(Jn}BJ)2t@?2rwjuv>bSY?ohB1`Ipy~zy*=mB)&EB=*BR7g zx`m@4C5sdV0Yeu-YDj zOPWrLkWaJzJ z7YM(@2l0!hIRN8*$C#pPPSHZ76#XJ_BH>i^d^YRg+#W^dGfiFx>-ROV5XKfJwJLoB zY;Z_6rzh7$Qjb`wN9*Ehw9U#UU*8WnSvhZmte%va=&q?n#Tn*E-e-K|Jv(V{>YPix$yA-gtW&>}**h~P z-HILK_}w&WMgEek`~|AY^jl5g{jW=}B@}ybEq^h-n$!@CVZt;_#6#TyOhE?ZaM%cP zMH(4mMQiwULmV_K?w$ifiG&^}no717qY){&?8W$eJi7@Pt*)8`4oUpO1neA(a{|i19QnH;bM!tM^W)8k~#HctnY;hus`8i#AoYr_Qs- z%4a}jPcms<+m3TfqM$4hLSOnsmHtX%m>Lf5IU`T_P}t8$elL_B!{_Pk;?b-&^}=29 za-PQGr0%KPEz0}!Gy_!UK66Whu&V+zB#!CvMTD>N!_X-_{n%w{(gbPCM;Ai9oJ2r0Ji0}tb3jMw)Amt6HKVFsv>nQ+5> zF?pWATWC3ew82G<0A68(SeX7+^Ktz_+YtPl=|5(o|8INUD;hA1AuXYj+BZidHsE&8_3A1Wp6V1@{;3$!9EWFr=3a$k?!f z&zj~CqES3ycnN$_U=@>wev|u>(Mt>SD=9MSvkQQez?9_(b$x-VnBthbPtQc7;F8AL zIK!+KG&l}x9wA~IcmDzhFVmfZ+|c8|kJA2LpjIJavW>CcXVW_IQ+b)`a@ggv9?e%p zXomLq>_rYGGDDl3tvqIP4S-6C$7n)oG`zDVR`*Mpv0jBiA7%xGcCg6h@eFsW7SX^u z0X#Sa%h5NkgX>8P=KyS0^;_kIrY|}dC5~9x;$^MJi-gQNZ4?7Y;AlsVGR_JitjTbR z8k)ZJ!WA~)GzYeEGI4ipLoAFsA{8JHM!;Xe%4CA(Tn>v$u{`O89PPR=FxaGj)r??4 z&dh(N1%#ZJvr60(fo8$>bNQMYD#SZz1q7QBVLjkcjVQ^zEcb-Z+4cg(qx+ZRzENYJGaDRV|(Vjcdk6ZjqA1ecY zfEKmJ*OljIR_2$}4I$r9)Bq`!u7Ah~0L=rB65eZOt6%VuUg_h_p$(ObfY3p3X4T$< zn3U0;dDYgP$rZ(E#4B0#doJ;58uK6VuYsYOkTYe{DW=ig#ghnG>b0!*i&uA4I!snq z^Xyk1I8e#&5lu@Fu*tIa%&VUJ(k8q{yNbYAN_xyyJ7eDHY?+K_(LlLRLWzQP^HHPW z@e*cugJP&!07Am8(Tzin(4Hd5Eg>SqO-B%;eH2OHEJNm5JDhV*GJ}$4PEkY!rjspq z7nN{CZpx%(x&i=5uixtbnsyhFlohhu=aLuu#6>Zd|MBq5oz1i3)|^AiB9pr{cu}Jz z3+o!KG4#`5?VTEDhc6`&bKyuryGnBprdOe?r~}jmzo)aI0ZH-0ChkCqE7-Nvt_OHvfttPE*(LHB!%Wq-NZdr@8>(GeFywLu^|=rAlM39zNV!QOZGu?G&E8@?ymU@2hkAD8cP}b6RPO*07w{$TcET5ewP0*}Xd8F#pk-CPgEPPO@na-@dmN_n z6UKF6wvJd*86l@@$em8yCje zU}9k4PUMg#6xSu4EDl01olWEj*R@BNr*Hs(9?UL0UkEubUU}ARAmnJdS+pjE%qS1! zXE=l4^Xfl$_TRIdUiMmt&*vo&eP)2E?{&vpsr)Rm482O;SK5@kH{HJaZ;*aJs+sm{ zFaQbB1|6UYD8^W8_CxDb&OZpkst}-z6aF9hEVJ1^C~#SX9*AqB@DC{ue}6zks$yro zVI$pVtJjvA5dlG_-(OwP1cSlBgCrVBa~{?9JWJDF3;+q}{PRyp;+fc|EYj;1z#62d LZKPF-y5;|GVs{PW diff --git a/docs/getting-started/miniconda-installation/img/miniconda-installer-2.png b/docs/getting-started/miniconda-installation/img/miniconda-installer-2.png deleted file mode 100644 index e03cf55ec66ff74727a8fc3e0a82c7d1ee00bdee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14486 zcmeIYbyS<(w=Nn=TRyzFLkqASd6q_c>?m-@SXBbMD!H-ap=v@vf1~wX)Wn&wS>ZPlSe=A~69y0RR9Xe*5ON z765>AihaKPbq_mIsbpq@{lM|iQj`T$jWO^tPh!T$b%sleKa=vCmF2Xbs|Z2uq*J~p=O%=lirh->_{T8_jtx%B8q~Rnsc$QA0a@C~1WE=QT!pW3Vnc|M>theUy_aO*Kth)HzKKSm+-(RAasI@U6 zRbM%hWU^Dr?@Zk1-z_i?{SHOW%bioHA1)@FtI5|J!PLQ>D*SZ|ox#D-Y^h!q(;eRY z2ik-&ip;*&$LqZa>=D=>PfkvT7^$m20^}x@1Ttc`+33d&=7Mb=2k>*U&JJo6-|>}8 zWLji;+i@(475jsgb`DU~M|rnLy%T*C90R`{Sm8K;bQz3wagc;OdbezflUMyfs^)P2 zBni|B{OLaA{RISgDP)&`gc%nHp^rWKWu$eEj0QU!nMZ>6qr~FjzRx_nf3CB&1$^~C z@R4}(9ZKbqUh6Bz6q9#4beSk&F?=zJ&fPzr$!*o-8AcJzjJko@4D@X9erc32lUlZs zRftqpIm;jRce`{V9sHMr_pjOyr9O=i1du1uKe&0cAk9WK$ttK#n!u@U8@fxcx1>~_&s}hN&_YnTIW}q(q~Rh2I#f4w6&KjH3cNw(|VeR3k6b^$7WHK0RF{B=f$4HuvmHG&)HSW@=Pk~4#qn&N}d_gAkR55WH4B< znD+oFB3bWoc#tK~*|A*>CkZ$Ki{0&h+}!PS^484;pSeAch}251e11mZ;Xz%~?&z|< zu`wOoT@|HuC&HZ}rtMZ!fnxP;6hfqNTUf^6XPj85s_Mn3vN`o9z&In+y?vP}9D=8x zv%kmC8XUp+?4-f0gLLXk&3F?aIHkpW=(U4gYKo)CG zF|1_@VU{B5al3tdd7pUP3-^4BNl8m6PF1WP_5H@Z7zn2YJ|haF?R!=c-Rww`brHs; zSx!*2hUa}tpE&AYa+y}~TF@@E(5?0G4Id_dAS-89ev>NYt#IrXs->?PlKpf>VM!!~YnZw;=}iDN zuf;j_=%2kvuHm=q>hE6GwDQgCyVOl3HFcbjdS(<$|d&s6h>V9Sucw2Zwlf6)80ly~+Z%hxNWI7iH4* zfi_vY>slGaM>`rGHJ11LH|*zXy%r)`FOZC-jRPd$1vyUqr~om$)jLtZUx?u6;MeTU z??eZK%1(6PRb((hJ2?RYObq!=WmPGO`+cf_rmU`K^+J1N81m%Q3O?hc@|d2>ol_Bd zrM~;}`~4~D;Z+-TC2g*6*d^#TBYqI-7xUo~^Ud*Zi0Sn~YTc}hL|=$9JRXznSqQT& zMJ8;Yf7YB!WUn&VKN&g_tpx|QRvI)Mv<6&4<4hPjR|8D_;ZS;;ZOMRZ0@JC(RDv5R+LSEs=F z)xdfDi`AhAf=%+&c7Z6`(I7X{jZROK-=ouRpz0wke#xZrG$W&KAhmU&nmDiSWkva! z93q(>FMS@6kOy&#<3#XAsTS3R?Y^N!PdFhX4|(A=d~L+lLlmxqWwT-sHQ|{$r31-s zNC}>TR68@?60UQlSA2d!;cfYeKLg+wXk)Hbn$P3O+U;>aOU6{%$rtzQsuleG&;?bD z{nk3vY~Hu|$1TJpQ_6P=<{`3Obo;bYE`tQwp$AVvwnwqQ}y%gdt0fJz9-jLr}Cd83mexj^YhPk+u^}p zKKhtOWYx9qc6k*kg` zYK@xI1tQ(y2FMaZ6P4Ex1uc73fh(*HiCjU96;`7fetA;k08ef2k-;0P(r~90I&|V#smByj%NbA6n*0b z0LK80t| z18`i%md$b*P@>&0rV%Qkw|;V;0N6Z zXpPvOwk>sGNb>sSh5ELWljzzIkZ^mal;jqo!kP`!s$={pgRA`e<~NorZe9gchK_x9 z-x`FI_FfQ??``sQYmL@1$>l6ty@@>hkwRRaM4P|1IGAJ6Zl~?19266ZBMc~>8uSx= zTsb-Ip&ecwVE6Us7=I;q*062($n;lxSX#@%kI?_i! z{FbknX7pRuZxS_!c-n(q8Z!0$e#iYq=092}(wE(BCbg)3hkYAhD<|k zYdn}Ry5M7##6A9!ZsZ7}1w9VpEerxn`#H5G`qW#~f;qFLw3D`J>q~N@rRwZX1MWeK zzANjZHjtvzJs6y=^yF<1*T=>VbI(A`x-Vj>F5R=dej!QOUWWQV+tkEk$1JsY^xjE# zW|c~0wQQt00(YhIw@syh_<8ZMouinYMbcX!qBO=OmK}t>HLRPCZ!K(V_(Sg z{ZO|jSs0Cq9B}EuN=^Uw-yX$h{t`8_Qp+H-Cwfx>p6-VfzS*XXpOU{s%WGC>hX=lQ zys`zyDrN_uCc9*t)fDCb(?X`&_2|!>~*U5W!(fxw)r}f#2D7q?Qs(oqOAnM$oD5 z)F|z~Z}aQ0c8ZD3$;B>IqX1^@a%b9wm?J+?~&qoWa8*_Uk3Lc?Hp z{GhF4USof=$tdQ2*VfLH>lbFSKIWGJs>C^)C7tF+%X;ZP7rZEv&t#Pl2RMPllg55$ zQgfNz#`1L@sD9OQ=Sj7n`F+H|o!8z^DNZkMr^VeWvw{Ra_-uz2DMDL))Zcp1d%avR z#dAk3R;PB)o(%Y8dzTc%6dB_i-759b;oA3&dsjmN+Ouu#_2zNYkhy;l=FsQCG9Dhh zp#N?^FbaAP01NFLyqzu$JSE5hSCtyMZTB58ftRrHhS-m^@r?UW*?$3xia|coUg77< z?&cKr35rT`1vt+&M_(X98LmCVKL-A?dm%M$eu5nCJh>voMu`Mvf970oFyuWBJEkJl z_w*}7c1m;kp+=ZY;0dGDiks>>;!8Vx=_s5t_+%+q!Kt~W{~3=8{Q0rdxna7vxwdNT zp9$5$k5%hauSmS!0UbQz+`Q(d*(UK+{3ZNmLX6EZ7=Go&rWX5i2o(zx`qS*%%)uQ{ zD!W3m#^Es72Osd#^eO|H!z_?ny*CNj>vaaEovbyhleiYVq#Q=9qgS~E3m1aj!Ko+t z*FN0m^Pu|OH*3wP@}zv7-YLm}iLYoFg(w_KSng1E`DFrxF)-2U%uvJiGtWTpf|F_| z@)XfUy&qYI2=PsIHSV%FO1jOoj^~rIs?tR5z1nh70o+#`sz42BmR_(Od@=uxrbPYj z%UGR;B0Tzg6Z45KCvxFLscIC4y$9fki5SX&iwX99fx`E9;bj6kX}pcc zoharKPUraOi_dU{)sP@~_yc(VR%0>ESgT?Y`G%9w{0#sCAwD+m{ROvHk4UXPnwibH z<=Q`=)Yt0^{-6(@uzbaIQ_{T&)29-0GDr&~SP7?*!4OJG2X9=z)!fBX558IZ9o=ps zW_6UgCZ$Nt!k>BlieS`ix|9<*8)&9kkMS97-ebv-vVJlOxturm_1&$BXMw4CTLLk0 zg&~JB`TY}tL4$VDLCo|?B2I^^nteRATN7s zOzq0lPUBlZc9T{!m99hw%$VhQITiyi(Z@s=M6S7aIyg2MHq*nL)33zemX7hmuD{~0 zckkcIEQdLzLR`8JOesqH)kI)!)$NdTnqNgo>@kaZb-u9KC>e#fD{Er*(?ZF9%TN;{ zN}M$oy+|%JBBT>7qVlm|ashOnO+&*j&V9crZBgCE0Vh2VeKrsAZd(+K%e?|}I#=sD zPoB_kyqU;UH#CWf^7-C6nBv_W;vdYA!8!F&ppA0{m%mAw$6be0Z_S#1M z7H(@!?ZEpmMb$L!rInH+;DXBJ65DtB)XP~&?@Fg8#WayZ<9jGjoqTj}m`5VmaUsz$ zr4*T-KO*9VNaok>meLcV9JBR)y44h;vlq2#);Kgrj|o#*5FwN*FnRDtuV&wTtoAKIFc$L-92$FN2=7%+oiSh{aPt20dnmz;#Y0(+NKFOTGx&Ct8jr$ow@iY*sQZ)##f{RJ$%RVy@m4(2hl!-AA5-8&FOr( zNY~^(zE%gHsCaLO8?`*`{l?ra$m(vMi7B6rdwyRLlCUwk)Gs6CibdObKtndqNC0COQtyI;FF$AD1($J4g?U-NsCKJz-kr{^ z*m@QBLGEtoCHxg$#LUUIuE2Q%-EI5Qdb3The>;S%u7laa^FvtENIFyb5q_+dSxOON z7>;FXujdDrGB95IVpx(2&qVXwElNtiG1d3Q6N}(Z+O5J>81@Dh_E*t(?p+k@U^Dxy z=kDU2;)Kr0;F>c={U9&G0UDQC4m`M;bap*?e``poF_20`h*0@VRIcg z3}1Q{%DgMFdh1OwgSG#sS`Qyp9u18Wt;u$W=#Ig?xIi+~~Qjn(JA;NZR= zf8wq`R5Mi5B>(Yqjm(z!U#X58lzT1gXSeWX>R2em$*F0y9!H^QL!-&G zAZcD9@c@yMxYG0kF^RZg?YegD(Ws+7yGv#V`!(D12bt01SPI8zJu9XfZqSzx1<3%I3%rhxP8ReyF9<9HS} z>7Nmz99hkpH(3Z>uIy0NRA3^^MO4%E>20-}j`(JG_--+2wyq#!iWye z`B_yKsQ(vc3NVvA|2P6RfMpfN*V@Uqj;Om>iQXqEUvGDdXsTM9w|`HWL%A;b3-{}; z)CkaCul9Lhz?V1AuV=kY5?)d$D^cH~I|NCcX?qWC6r63BetkV0Oydz_9XzKD97B`+(mFK4U_)%B|QGrFu?(nTl+EL1f;5o)Xp zZhMh&=+vi}U`T<}10w8!HNb}HBCYiKhJ!rSJ{Db8g5%xi?gAUUEsVmZ*RHE}8^Q=z zT{9#nmwvkxJQ0npVPwe~wGcb%sL#F@Cs_%*(Dh2%+M+}e7hC7s+tIN!Z&>#nKwNjc z#WwFUsj<}IaISF*TSpx>bGQwKZ)7h$zuknImuPl=*XD#RiUfJzt&E%dF+>!>ARy}z zZQLSr|F^E1KmGU+gLqvmkQ&UWuxc8p2nr5zpMMGY#^7@meMghT95^2>%rxx`2-~2L zxso#PF`dc7c!b_wpZ@qGguvv;`4bsaH`(fqw71E{<9Wvx_RFlCb%7#Sj-ho4??Z1- zY?snuZ?;wSmt?7!BWdquj=Y8PmqRrJTTN1y?D+2LzsHFByC9Y82?IpihtE6zVo)>& zm0bW2@B>%lAPKvSr_jYanzESloDxaV+Sv|uMd&&kMgme-A7%-8RWs}`T-Z5NnwKri z0O0p1?M%wiijXa=eqCc6c3M|-{+64GQdxD8IjzYheLselPVc*VamgF5dejfDO?&u8 zhnS5Iwbus(eMHelH)sX@6&nB%`&t_lC74EEM!d!822^E6k68_!5W&1c&0r>@D7ALD zg2AW_?=;&x=cT7hX`CzPV)d@EGATLX`7lvR_3ih%-=<8MfxQU5x8bYZ<@mAprRe1XF@?#=@d(Rx6j`A6tO8BXWZso@9=Bs?-VV?8_ z2ftt~s|Xb4$6USQsbAjQv!qy2VoBqv*<%ysy9Y|r>F&ViI*l`V@Nf1fyX>*ZK_PwsiRyFFf-c#1D?69&Fjn*{{F4j7p$nsZD zWRbi%KQ}E<)6Kr_r-`}?8YT}8dNp~ne3z=9%5AH&Q5B4woxRJ!*4X4N8%#pzNHK;X zlNzg}!XmOVy)GX{Bm7eHgBs79ETuS849m^hnAp-yq(P-rP74a-DB*5xM zza?>F#@x^QZJTminfZcb01D)o>ml?I%H(zammn^-Ijp-qLF=M(h_PE1&w=lbe`!Vh zok=Sa*i}Cd6Z_|h63>1}J zs&U=juhW}2%WTZBC}I%^WR;EzG=yy^#{-C~vIo@!_QnH`orjBv(?>h$5x6#fThYN- zKGCwx{v`je^zk1snC$-Wm`xR3nA}`=Rr|7cY2IOfVn)HTa_+|}i0;G0VxdHxZamoi zixlLQ-TqnIQ+wEs`a8In_GS!?7=JaU*8c!mx*%r0dsW}YKzp&cXq!6ETy=TYGDEtH zEBq793G(h2i2#SUCSn*kc$#84etmBlhQ#Y|$d9deQ=Hov|w8x4SRcc?WtPbK)XcUEgg*Uj zB^SIXgES8Q>gqH}kwn=V8W`uL&$NH7Gi+<`oy1e<(&9hRyFp^^v~ryZAm)8GNWxFt zru*g|JGcQ{4v!x2VJLVGW$?U$M3b3MX!J+hi61v-P?28$WQ?_NLYX?o)ne~BwY#GU zJJfTC$BCl_ghCj52`7=hHAbK8Ap&&W{iHDjdY;ncwS5AaL@kb8`Mmsd@|g- zt{_zig0};8{%*iDoR!VzT}R&3XE|r@%^xw`dTmLRgS~lERhBwhq^spd!Lpw?&S~kX z61_6qyR!CRB--Y_nD3cYxObl@p6UAc!x+Nej&km_IWWm;ofF^k?R~PGhE^7qKH9c& zmc6|2nu$Q^Z~RIIWjqVbULm!uGp{_^Py&UqB%mk_>7e|W)TtS+712~ve*1}R-SqbF zu^r=^VJvpif?8IkYM_iE7t|KXhlH$MTD$+)DEU__|F5S19vl?^_twdO z?8^L?4RY9H%jNNq-MLUHv7FZ2^7!FPrS2wo=Ac3UZV1 zE2+807>j(IZI+P1rU@rjdGm|s-Jo=4cvViRBg0aI!8W6IW=ls%^ZIKn7#lp`o1b-o zevimob*_f-19|mWyJdT^iV&YEK!Kn`aKL9;ak4-k9*Wb7ax=&~S%sh=g?fo?v!4Q| zmRUj)Z03W^-Ht7@ni<|Q1)_W9+}M2;84>pnQh3YCAX;jW9WRyf;P}h;fz9^Ewbo7K z5^hfpSM@8hXz3-~DqFws52qeF^Kp)`SK-@dRbNfyx9q3&T3wdPNwW352LR}~=B=Jj z`ShS7zUB3gSHGEAwxwg-uKfaD!C^_Lq)eG!nHB)@&Mc5J3G#6GQ$=~*(BXsh$GPQ3 zZ~*n9#0f}SH-VXMHIv?xjEfo(%Do9*h0?<)Ez-=ahXBB8m#|W83h+a%h3k+vfor94 zwt21bjeZ23i0r<33fM3XObrXE0-W?#6C1O$PaLoUHjsdEr5E>7k=+GX8Tr|!?gGLp z7OpAeh#a8x#?w5CDebw%yzbfWZ(=EjITBx^XYK5)4tkLtuy>*>F?pTk z5oPT9UJ|B=o|pE~Vcqvr-@kVI{ribM!XU5Xu#UL#e_-Xqd~jRahCVWe24#q*Z#r;o2vHP z{urk1(F{%mx01YkSgHd()_w8tK(i4oTM>{!nw&TdX^jFB# z-z4O)ek}n0&>L};EHI{9Bl+AaWX|n;?%vCC>T2s?%zl$%EVC-b-Ygh8Fu(-_f-5S1 zVr_mXb~j2-NGO=uycrsgaOCA_wCg*{M@PJU%bm^7S{d*gxlSu%WGp5lH>i@pKGV`% zuflEx@r#kmVFKJsMuNPM&BuKV?^$_yqf&OLfo3YPp$~}{T0A&`f)~8eH*U^Gdy}Uw z;(K=6+jg%rK$~O{1&LIS2KW!W{*-98!|H3pJ zReoZ}OcW@#dG0AtU@i`~*(J{Z(pMX%cIWlpf~B3h{y6)VTTayOsUS~4S5{*HEC_ulym+2a=qYsSAE zG#=EvS`>=vKcXE2#u&U=Oo^AW4e8>%JP!?QS=Ngnel|1VWo$BPFk3rgA=}M*x+|Us zB>~{5psGyUm|wVm;qXHt2bDjze<3gS*dA;Di3(zWkQ6Vaus_h(5)k{XpIz&V)?A@u zoch}6jIJg)885q%)>)^oRp~07s!x!?OZHJ+g@0y8q&!GQ{w(6#1m~PPaI?|4(Djp< zB5=(~bVMt>fEuO-(xqevj2mGg5RZuVM-H^_Ay&=h8*vb)$eh<75)yKIgE=LaK__8R zgj?05msOQW$A=79V<~z1*m!rwpL|odmvTh#*2SMZ zP!lzIbp?@1xR8%%S`qUH&OGvUdMDeSW#3DE^4XVdj|V0+yOLl{L^Vh4m#uic?oocf zyDwtnU7ba;1kX%T?2a78P95$`?Cd-|JWromW7UZwA|jNV!zn;`t0%A2q;QhP3;yZO z2&EgPK^Bix4f4T0cG+%9loxk|nP8-Y#$eAGrKo^~uQH5hthcXg zx*_6ySaT0$hJ90&fy66IQs0ja+U&E*k;@f|8~ctfsD?+5fxWaXW{3Pceh}Rmd9Bbnq*k z+k5)G%-?lvjpeQaV*51@K5_hwm0w$3N5-;1u`DtxEgsw0vk~jW^i@0AwzeqmrRMi9lNEfLAYqDdnR-Wdp_MTGU2F|Fu`uV_d4t-SDCqsp^fy?t**2eu@Fpfw+VrM#VBF0A z0mrsg1I|2(*{UpB9$Wf}2h!lCX$DL0^~vW+->*h55r4fTkNL%piD3e{v>z)7TG@@~ zz5;n4Pzv!-BMTM|Yb95aLRmVh4 zE6SA~)CjE^oPlNE2TqP)E$?;uyii%_*-(ZS+M-e9`$@n(Z^gkCU@5AulH_Bi{9=vw zMBWN^-`n*k&qqr?B@_?y{>Mh;w`c8F}8 z=s;%_*Z{E;lzUx0CGWRfkVP&#$Xwthv|*CCY}4zcCog5f%q+OT6;)bmWGe@Domx1E z5Aay<-7H{YG0wkm?YHKIRoZMb4s(&o5T5^yo;~-H%-}j|XHzsx4h~r{F@hU<&dtTO1Mloi&EqntW0jF%OJ~OkGc+xb8tX-e zM3m1V95{tJJV3l_D#y;HCcNgA(_t-4Kx5e&<_=3ru+g5#E8Ga>VZI{!;&-!POClAJ zter&7uU|P?g;Z?a6{EN>-(e?9h>u_K+p9d?hDQ0S>!>N0#-!>~5}+u9D%Fzx4;$(T zeJ-ARN$1*gnXg)J5GOKGe(AL#m_ELp$t~@#2%CmI@bmTG2Gs0PI?^}CT%&Uz4J}8w>;D9x63lwo=tKvXc&zqL#dMja44&-VTneJ4FFHDq<~0x( zOhi~yN7Vo>G6F(cYPoEYcp(*)VQMBNNw3Qf?dS=x6w+_k#(3elksZq|*?R9)Hi*x< zYyRm7?2K?^Yn9MS_P^^Pj6ylFFWa`9e`*#}XMEJ@rI(pv=!sP>{ST^Xnp##?Mq?h} zhQ*2kEXNW5@c2eW+q*qC_mkgVhu^s$vZjBb(V4eQl)>ro&!-(EYy$ON_iZc^0)Ev5 z(fftYz6jN4M|%QFw~*iV`FF-~>Q&yy-f_GO^pgFZm7FZfChNLgd45g^^<69%hX8)y9gOkjCP{#MZi z{MVLH|EA3Q|84${yhVfew+2z-KTV1M7gaRXKc=PsQ`7&4+4lb-nfzDJ8Wo)PaCiS( z2?R6UA5?p>c&WKqs7xcM%K-6xJ%Wp+4!5ZJo7e?~cUn)*gMF1w z-Yc2$Yzrz)wZ8@z=nGY@t4EX?cD$nK2!yNu!PTYK#%fTr4-Gt|kB!6PJG!EfNF+V3 z^e{^_RY1y*)~fZ&FX~6+Y#UlE(H|Q5HJAXOs9%3c$x1X=FDZn&ND3MF|Mq)el{2d& zd*k9KJfqTeUSd@KHov5jFNgMAN@kjF)n+eK^+SA>gPFtS%+W5+MGdh6J!`tgM9P zU`PMB#=j|F|MeLEr@u_aLqZ8Ytj&PUfki((uoc{t)e%eQTHQ(M<$jXo5a+J>x=}-Q z8zI0%99_dAZ2u!QZUCzY{(;Oq1G-iIK#n8odl+TEd2U?iE)W3WPSUK|pDBP-Le@#hJ8tJdBc`}cKP`JSlGD(v&mGHj*m%}eXZgyz29U=FM&!MZUD5)ws z!utYWD7dJKeW*Q)oqnQv#EHFkd}<}t&3M-uQkkJp#)P&=%gENA%ht#RGqyxDzWB5D z0!pj{)Z+s^<4e%XERa;g`ziks&OLX9KcBEEZw>so`@!tw*B)|x~!sc#vdO zCK=&4A6uV7=@r{&F9Y?1^KW_<{u!2XDApJaAkHE(ATUrPSGAt==@y^N1}Z1cYG0z@ z3QVVyz|tS=zHgPli+VAc8?&X~wpsTeOMv{8|s=6h!qumm`FhpFWKa)c16ja6Bf%Z(?ny&l{sBy;dq|8DaE z4Jzq=&dufOD7vPWar!BB?$3(RxolWhIx5;d-L;lJpgx1N`ZpeQzZg;l{#?ElVWz*q zT+G!SKHvULFB`b0u;=FJ)XYX(FVM_pp!@|C64$y!#)li|_30B?pfGMtF8d>6X&6aq&pLy#)Y%gmmwIRLc-m9l;r>O8Q=>jK6`rjjh{Y z(y=$)={Hk(i#Is-_Ktj(;2-gOfapWOOWFS!#{Y}UFM)sZ{KpUyCW)v2T%yLnU^>#C ze+J@stC~a9F^wAu>R==t{htrwAv>fP&NnLJAq(|nN!X(5E!WT;?jnqfqPvvW9jn9# Oyp>mbT_yW2Y@3q&Ob3V^A*G#0cq7)i3Au<2}K$DRcR|NoGUBVwf-oJ)_ zQY&j{0e^YrswyQ4sGB4{gui)f^;O|3004|fc{D+QzeoBet>X#+p!fgtcs1-)VGaO@ z{gn~_s_tb7-9Ylg-rYd_yYlV5SJ2`cJIwb;iTE|Us=>0AX!yZQGr#m|>&5M`67jT~ zfw2pC6{fm27Jc+@8PHm7Lt9In$W z1I%TpobjPOU}?!_U&rIFiKO1??Au)s3g3u#UZV}hlds{DtB~Lb9>HaU&8~pOR5>Ef zZj6&HLqJEHQjB`M)Ep8V52v?yG7XdY!{mQ4z0aCIcJ|P+heZRpwnZ+ zKY@j9&ty(k%i_kd^;+Fwu%Caa)}i3DF4J*mdJcH*!~?pzP^-tyi-qDKkz!0o{%x4V zQ{ZkV*^dqYX!c2_R*>a&_X!37$|FX$;kS7@>SVPAC6NU1Qw!vNj7#3g{jv1iYx^84 zmd5-e0PvZ6X=G9qRP;9DqcxUw@<(G{%*|JTq*mXI|omNd&-|Fd$ zh(uLVbJP~5NI$+u%`{*syZu3VR;uvz+L<9iE2?Qht5HkJNUE`RjPPf|$XW=GW^iiR zp8NO#gjDfiH)YNJWdYi8CK!}od-Iu{>aD?#IK2{a-OpB8##;lC_FoJnRI;C64yI2L zT2NlpAFdYt(a6Z|cS>^^cN6p|srDa{!QOEnBdJ(f zwf*&5^>lPbU(muEQ$<;AhN_{4cDhqt2{#EY zMmneW7beV2O0B*XIc{~_;N!K}23Al_@2%!8_BE;u4;-kddmc2Yh5PT;rFVLOeuGZ? z)uxWT1IjP!pj;>EPl3-5)d9Y@2Y)sl-jfJA&u?2MrIs@4S{~47YK&W*Gq3FI?Og=U z`Bc|!UVP7Fe1-&Jpp9jpFnLV!-%{eNZMy_8{AU7 zk}O6wNFZ0A^h^G}2CLW0AqJX)SflP$C>Oq0`;+de3QW=Rr4<>b2tlazfT`u`y9y8e&y> zl`Ic+5^2l_i_Yr50)K$fwDv@&iMqa8^cWM0ZMa+GwdjBkL`?0&R5e)PGZ~kBd3u*K z$56FZHK*KXEbSjw9ctFW!JX1>$$G@A1KZ{P9UJlS^uen>sARHqEl=gV(I<7oKlNYo2tho#0+vL~wZsEa^CBf3#0iW+GyFTbm- z?t~WFU!RZtwKJ~|02N2L0}^(4_e3rEuB}79tTx2xPpg-WC<3#64mX8v8U>94&X2-5 z^8-7|9SWGJW?!JHs}7HTbL?k=>F$nuyZZ)`!$J3FE}V#uc%GCYb(E}-gQ0|4^sM(M zH#w{Cr%u9&!-g~%3&xxY(h|!Ld)dvE-UyUd$wD9D=E*H-;JzF-ZSaX7J0KQRI`rL= z>!6VKGDl`#K5X#Lqs z^S`Op^{%NUY6o9-i|XD0+S%i3?fTg!kWQU??#ej%)C3B70{o{E;Zv{RyIn}LY4CS) zpXl(V+!jnzmv`a5y`uM?G&I3N0>iPC?0nmm)zCLT${i^Ge zRZiA}i2&gb?w-8-)gHtQYbI1&75y;HnDyo3?6po!E+)Oqr5Mh7Yx1yKYsMe3tr65{ z>a=0;yx#M#07a%RsWz7(4?mk-Ut`fI=CE7E$^X`#*LIPT<>A>Wq1K% z4Kp9kKI8@TouJeU%yue^-=tc9z}KL*ruhE& zT=Xk8E=Urk)Ws8B$)8T7#zDKbb$&m&;h@>BTfK-fRK@YZzj9k zj$ra4!2uAN#C1x2+#f6!0O0wn3P~~Re?IWvenZDkbhPss0Js&E?G1SPSL?N;836G3 z?w@$=^kK!nu7^G)mt@);FSP2YI%>J(Hfw$$@K^c1-m+PwBC5=E3%vE*V+{d;c_X!~E_t^#L?*h}?CW zco{8gkjdWfm6evp9`#cus}A$ureu_rAVll5>o!>*s+NmW6|-a;zkwm67;t_)|0Y6r z_+12aumW<_Y_u2L(6oG~q_v=>(x!VABL&Auc1aEULXGz&2zJYv$?Cvj&-hvff zz_O3HueK_65}!g1UdDC!es|mpyE_KL{GH_Q@3M;0g=_MBC)hF2b5cKAixI?elNw!~ zGhlS_?v|xX*4+Z~DW#i#zX`3O%&CjdY+|-<-L^7gyLB*r4k`3Owqq|>mU8>MtWwlz zBZGRWI?KQ&i4%`gjP5^guW@~SBxy>dZD`9dCw&!-cq5}!?5_<-dU zy^&xqh7_4)?jfQF4cJZcJp3sRe}0-7gS+jX%b%^}a`)3O@eY1JW{vK?4KCoMM`3Tj zVASNgT-~YwnLodC4?%32rbJr|Z?wSEbCbTKZNOK;eFs*O<)h{+$>b`owJ&j8usB|1 zYl&lxv(Mtr`4V8zOAk6{=VyjOf76LfZ)t!}&Ksm2Sv#)=)DI$OT(``$!- z)6G)A6A6<9{Vs1+bwTrzi+?zgK4CMo)-@{5OedH(k1?!SHG<9HoNY`6#02sFZBxR zl3P&}Dg@r|4!cO=KyD2C1CI0i{k$K+B#4AC|EJI#EfwTaFhMruFuK!<-ouy_OLv>+ zT%j4FMb#_l*{YIZ^~%!)Vz|fX=Y`XLvYtTe@*EX^_eU@kkx)qJA~ECX{#J`0!?74y zd8;mDt+E-;cLpdrYafn#1Omh-;q%74Iug)zejA$0%qRCG4<^cgd>FPt*yQz0$cUBf zOz|i@Dc?c8flvErrL?2LT|d9pCZm=5)DlaHo7{)Mr){l(M$`G^?EMk%g_j<04EVK% zNR|TK`s*b%EjOPp;!l0eW=UA$Ni=wOmX6P!4*ot+^jCLkZ8UD(6B!bFcuq{6`ajjZ zRFSeeT0Cdx&qtK*Y_L3EZXX@T(Ct8{7B}GC3vvo$H97e|?@h4msvyvw!wpo`#yfST z(9<%aRI-_0{aG#h<?cSub$%f zdLDysNb8@ra)Um4aXgGl)#b<~`VSSXG=(!39M-rpm!tOj`_ex>KDS-aOD#Tb@%KL8 zwUs}c4UAQT(2EDQIJbKRo~aaatOXQ>N2fI7OMO!_6pi=Xp z-o2M8tpDWpz*Vkss(&#wTpuOy>%!ngN*IGwu)%&E?fq|9syW$*5NX>;p*SYoU zpFhTPl44;=vYeRzNxI)~BbvTnomUE^9+wP1Jz%$)z7rFtC@e=l>YaP*zI+Vp@ii%T zQXu-$WFYGcOnKZJ8?M|}tnO{N%x9BP;cGq=5kB+suEBQ|4)|3_h}Z*RDaYQua6-Ku z+?}&2s?mI5XI)La&hK%S>}0p$yDzNbslc$HIjIiMYGAs~ZC^a=XuwO&Ac=Hgh_u(h zC?XtH&iriifkl0AxmSrQ>&bNgo2aMI>WE>2^M03IUiVq7%v2a2 z`o4;h#$L>2-ehSK+|emz8S_{LGz-Z$$e;t?RHk`pd6H;*`xO7br?}&gjgUj`w zmrcS?7u#A6{6ySCH{ruRq}&Q~^+#1ji9~}&d&76W%v<=@S<31h)#66>H8=&2dtxk< z@p`<#G&1&nfMiRy_*;{3-@ytNhEnWyqrtD+~>C@v4R5-}4dA#zk5GNY@CSLe>9slAF zk4F_sPe$ECDq|+ zVJ^tyc~YW-k8=xL*}0)2uN@KOJ884|p-Ix}65}pHsUgA&Z_Ll^NU5%y_U8A@8_#YR za2X3lpstbc!QK6U*45=UC7DXN;N=Mzl%MHi=LE9?UCw7K`vId(N{YHIN>wYRrLCQ+ z?m@A2Mx?U>Hho!H#(v0gW-5|Q>NQ{58@^Hc#uKQK`Fx`cJd0n$)oZ3MsS*{W>~Ct; zB~TXdR|fWshAVdu*p@UVbpKLdRz9C*F=U)j=Kg9Q!NopHxK?ecsA7pzZDPoR@Yfj9KFv3aVqH`D&$0Ftdy)+Q2$_%&W?xbL`QaEo63YYZ! zjU2+7Pk#D4T^F10^g%8(?9E9?d>}C>!Vxg_BmaKzc-y8G?Mx~;7qM+2;5_b@R`7aS z>bgCVddybrs%c;6;G$any79;8d zi>P4qNVoXgJ4 z)_cCVxV~gTnIC1vSFo1bW$eW`|C@p{8ShzyqvGYA-o=FW!IBZ0mIiC@H;zr^)e2w; z(^*?tXvlEf7J|CQv{}(L=1db|w$+&bmhZq?pNl?m+lmX^DOL;D^z<4Xrho&kMP4?a zABu6}@|UBBCf}^ZkQ|}#8Pb;9_uSe}p>!^bz_w}wNnwHMMwe5J=cA&S>6}|g1z?-~ z$Meo;x};fMj_jh5gnM(S{k=?Iu4XUH=;?XjrTHjU$*^=7{V3)}aG#%pX!Z8X2Cueb z>ib18P(T~pwlv6?jUGnrC=3e9D*hxsfgFWD(3LodK%k;xd9$R}s^b%DmC!?%DBoKq zSYHN_s#Dn{|Hj{eNoKDz=PIko*;o02cXSiF9$d`0D|N({6DbqL-gu>r3B8GFq3S+g zsBF)M(kSu`GRJzd`x*Q95O3|xyiO?QLacQE9_obLt)Z`k{%K%p!*K;4G-B7w)Qo1> z)Fu^Z$#;k4BBv0w7}mwK2vs%5^gN=7AEh%N>Cuup{L03GFu56qGFv~{RM@BZjt;#; z3Ug3!Fryn@y%?IEXTkUb?&^#<>_gN>Uo^?ru)mZ3#=)Oq$4?dEF7Yt)XGZhOLIQI6 zh&Jo0UkvTF=I&tx25Q)|hueHebz!)eV8hh@c?MP|P9dQk7tA{gs+0@N2Y{3lQOi`K5mNPGgJG@Pahe43n{T41`#i^W&PgL?U8`BwQJiknVX za&TDE>6#DjnTc10Jo|0HQJT$GyZ7h)qPfl|=YvaAT|eB=B7s4Rtb&i$?({!I@4QKt z<;Diim;%pp5f5nu5!bI~NANtKHq-pG>0XwPFnQ$=Rl`AI*>S?h?3rxq2A54V+*6fn z52uSy?t!&0bM=dj16`-w%HKImv^*wU4fy?&sSk!ess6yg=-q4(?y_)#%AILJdX6N0 zGz+>JMvO5CcF%xqX0uO`RjbF0txa1_2-a3@WXofkag+~~3QNMnzbdNijKOhjv=li2Ly+BX(!Ul1(9T zoNYDM!h8cAVHCgP>%IuuPE$+NYY~sp9S(&Orlb3^SFnU?`m(}ot&LK^q+$!cuk8@y z+4EOFtK`D0DLe7^${@%0N}Ko|GwwHrLbb80a+nJ-1!oHU4UU`@LCM!e= zL!dhpElx1tI)C5rDgDAk4j1*|0ZZ#;x2$=M*7?G&ZBEJAj@L{5{%`Y5nGnsOD+4_MdOgOPL z=-C>U%u(1)B!#*%*ECtn5a{&)7S3ut-FL$~bhc!vVsfYsFxt4(!&40#uJ_5R0{!*1 zw<7DT(m$~uCBo9dJfHK7^?K_hbpG_@M)wiYgqdqMTIqRGHp&2sRQrDDpE6#@)1YK@+T= z%SfHOJnqhn+7)HSC(5zA2EQ7ynDKPM1 z{n<2e8V>EBX{y^dJG7?V7J1XvzIE-dy)fV+!7+E>QIJ%?ve^md^TQOmK{(Txw=*2- z3Lmg~{JvYcy5!apdKQHcZC#$2uLf-j=3kncSpFSDsVhU>W{Y~}dMr%}xHnd>pX?rn zfi(PdCB+uV!cS&UB8aqz64PaC&mR$B&|_Hg;;cy!0!F>c4=z;a zFYsK~s6~QyS=~oL&nU-;R(bj3%qto-*QndQPm*;Gj9LuJR4y3Ij92Sv4iZf98EKhb z2+b0<5?64gfe>XTLVTMd-2UVZ9-B;dbA3_i^pEu_RUUAsdCON?9V0mh+dkFyv?6Fj zVN3IDvqdB4N$3YKBdaAlb4$te55~MDjeJfr%QD>)3!)I zoHrY~cq|qcBffO)jtc8{f5~Ez*6q5UYT`~CBRFl9JH0=odZC1i0g7B)%FTD*+ffnu zjL9-jwt2F!J==!hJ!M)M!3MQ_K{*~CQ|xnfUB8dc(;-hsQVi*5y7Z9akM zZv23CuL>pn`fyguPy7jvJ=f6Z>z{U7_K)!hg?}o#9= zWq{Nd@i@NBcCxSLdUL%LPfYbb&XZ1uA|g%_dd$4%eFFeE<6K(DBy3)m5onELI`K6Z z)ZN2l&tc$j1F7=sxp$A~CM19Y2~MiU&z|31O9(bZP zhg#CZ#WDOcpBQAl8kD)EBqpdV&(ggGoK7eQ<<5vv!!?m;n=ziw4S4V&5;ExAHtz4K z@41cY?fBcwMKWpcxhPTYN#xh3e0~G(F9D$Nh(-@j$JSCmzrz6lk_agH0YRIe8s7kJ z(f&J4U#Icibnw|BA|PndaS&YpC)OAM=%LuW=5bi%$b{#EYu5*iS%+3${fEf>-)s6& z2mOcM{Xa?HbN7_K{p)}F_qihS+2|B?>vpuM#7HO#=sgZU)}*4+{49Hkobuq3kmG{zpCc_m{!AJrm+qOi+KUqy(5Ya^jQ3a z!?xNs6Qv3}KVZz0j2&}brX01aS84U=ag|IP4e1diwsq8tpCJq1L^!dAW%o7a4m>|E z8aUqfxfG>a+V{7&TKO@ozuv-K33*D}xzt>f!!zB`%v>!}9cD2S64IE=@Mg5_`HFzh z!oI8Gkip;NG5sm)+nQ+P35YEv7oI(`O=_;>6jxbP0DDLl&=KcJFjta zK?a~0x^&l*kC;S76EVOc*by(4?BQq58gPtn?Ej!Knd((3R_L_oHx0L$*K(K3Xifu8XiCR$@{WvkC{0Hmi?;qRJ@&Yw9>c{GIc#CTT)#f+Q7Fg1wI7s(KQAX zQ?~OHi4Oxe5p5y6?L78s=G(%xvD5^z8ER6OETER!Yi%t=9lP{+Ot~xjy)6W=stQ9U z^Tk|>PtiqwU3f+Y{YL}NX18lpR_u}JIqoC%KyK1(*A>i5OS9gZb-6{a)M6$q=qFkB zmOp?0OhQMaXWPJShoF>1Uip11wkSRGDTd#*Wn^f!iy%`7%5o=pAd+vEB8jk)2U-rx zMN138rPuSIdfK0cvNDT03#C_REX<>f%4t9Zy<==Wnz@}_XcQsu7%W=n+|Io z;yiSR#&N>hzJC|206m8<$Tz@?6SDXvYZkUSi}P9@foFC+IlIw zTp(kc;l=K)oGgOIyJQGj+y<5Zs0eAHsfK9Qqk4=Su9~%&T2(_<79!ru45ehZo&{B@ z3x!S6_!=!WN_?+#H@h_lDo-|^TJvJOPQyX-cAMnH-WTBP2EO^4jopnr^Gx+b?2E@t z0<)z3ke)$^LtLd&d;0cRp&Bu_C1hAe)M3j@oLFyd64E-8lM@#%v)#Zk8);h~mbTSb zO9)$_8|*QfvHvyV;3}z`X)3klq2o=e+~!hbFB$8};LUO^G?63&Hwqry--kUzQ}3L^ zQ;N>mcn(qv=N(EBpJEK%>Sl2InRClhX&gmXpN4}biJ)2tW&FKOIWj3y=*pj^e-Nr_ zvxd=jNB6VM0lys?46K{boQOtkeUFqt06h~|B^Fal;8U}?;M>~f-R9;<0&^>x)m-QU zbS--+BG)W-=?!<^Lu%bzR=-Tbok_SIqPqUw$>{vyiX4j2(c9zsbEI68bcqVUC zS}AbU0$fBK4YbK1G8fe1!-TJyvj^SO`B*;n(YVl>ig>>2mO@U{*#6dCuMlJJ0pp%R zp?`rL?P>{Y+{I&7eXlh1PK!z;UrEed?p7Pu1kU*si{z^6> zj@%qvNcgCYjXe#0CmuNLa!V6Uth322bF0J1FkE}LdnsSA@UF%LNfxs0PVqE$_~8-LxIEh@ zub{R_zx8w0+}k0HXNa{pbyw1yDOQ7iG6j4^KZr(@F{ewZUCWJ5MDEt}b>{~z7&uTr(s_CdjJ4r zQFi89`AoGKyJ%ZVzfe!;6t-0qySNg)fQyeir#9?udAF{Te`%pRtu!J6CH9*=28vu- zuMLfND9Yp#*`l?7wG51WyNEIyk5W=W60o`=cj#A%e;S`@8V1z~y85k7M{2r&9bPBt z$;Oik?wGR!dpDxa$dbjGIER*yYyu-2`p&6z6KEs(tY~{|&gdwk2aTSSGp2HaqdrrLtS0&uYI$e8|MO0cjq#bs7e8IY7Zk4^W~XS{shk*@$Jnnf ziVgF_?Sy*b$#G0hit{MIv(WQTgxtff7Y1L*Sj0xR7JOj>0uq`M*^6>q>R7tPB9B8W zVp~qbl~VJKEMJP6rvBP8&8@ZP;Er;*_J-zPjc4fIrSp~Dyvk&ldZvzj0uqEG&e`QH z@0$6cB+d0yTnPi03@y$5hZDM;)n^<>@*Eu#h~XDKsLp*IL>Luy;jf1tp86ysO);4{ z61b0johf#kZ-0p6R)Mj`@{Bj^wv)EgH1&tSwTsocx;B(EEyP+F7q)F7#23sNpR3j{ zTD|Z(Kh`7=iTRDC?YfciK&R0p!AUf2a8vSvM_;tHsX$2V*_%d9q2W7DCG2yZ-IbQX z`=GdoqC&75C)Y|r`1Bw!=2y43(SeYe@mz^iF6*c36r}=en8-_G__{UVb@&-p9 z#tVPu_L|3WS#PV8dGI^B>t0oSHEj_wx57*Et0_m9YBDq)ct|c|6^^P+t6!SoVLIXr z;1%TWj3Zn%D%w@|)@*pmiIw8ft!e3x_y_(aDZe)hrgLqNyj07LfWoX>o;#f=Q_4%%V;h^`#GzTxTHfwBgcm>Kb z<5JbNZI@T$^wnh(uRfi?W_{BZ8ya?Uxc9CQW&WA4nD%&YntCE|Gc9qBI)gfg9UYDZ zx$8J2fo}&Yrie+H7!$A-@6|6^P)qzjAp9M%cJeNwfw`>soAO3DqFL;@yYYxsPS|Km z>wZVVq8`s+6`Q0Y0!jYO`V0utmd{CAcfzx-sK54Fe+vLe$&joZk`q3;!@r_(H-`gy zY7zMJUm|h1L+Sncf2WxW_=jA){P%gre}|L&|MJ+Ww;%q$lPIIt|Lhd%`Jd?0|Gvp; z>qSAcANh{Ae?<+>zN^H=VL8ko;}-cC`REMR(8;n|s%iShEK$@{1b{Rt(qR*ZpI5)3 zV}JiyT%@338AQXtU#lu7Qg?1~wrcE$i#a_c%h20yA5d!0<>VZPChv2$_nM;J}i zsqf{)!~Kl@ml2=ME{tb!WlPL9L@^pYXocP)o5dCbZ|e47BS=#2%yTn44O@l4UyOAV z3;<+Nelhv=gMi&~q{H&|q-km=rLSW@PfnQbXX@d`{*iIIg}3iz8Zf_0O&+sBnvOv& z>fWIvy<8nJM3y#%a@Iydu-`wOIgJ-2FzXuvlw+1HwMc8Jn%j3HDE`|*``y7rm1nq? zI86*~PQK4nQ)%sJ&vb!FHOfDJ9<7pC4+#(y5wzl$eEKXQK-sC+LQL@x28rhxoOaZ47hj-|95qCD$R(^7#OP;l~f|fb+QFuC# zJZ8T0l!>;Sk=L~~!nB6AztknSh$($csMDRvU(9}*e=o0j?TEK<&}HqY%)xiy@)h8- zA;mxZ{-+)TnHAh?;D-G>U+?+&FAqZYfAk<-25{tJHW-EDay0J&ZCM(t)E;2{p{O|i zu=47+x=5n`&!AT>d+IHY8z43AM$fwmDHmiw5(Hud&&&vrHzunIHgcyKQdj{#MIy*T z#LVLjlf*q9;ljp0o7(i#d2cO^`fAfiW_L6w$-WK`jWdN+Zx5y zxYqMK>=cxw!A6k9m`UNQp(3KDPKBjm)7@li+iySSayqoFzKG(qYtJuQi}ikBUdRtE z7RrO~)!KD@Zu{;S;+^-UuK9kT-c&MiimDCTD({bq3dQkvrILTCtoHm?UA`#TYTPLw zN-diCemCDO0iB8EOD+MRD%&*Mekm9 zBd|>{glxoZ}#Ty2%c_`HO&7!$dWbf+FUX~!*jU)LGjd4-@SA0+G$NJ+-3*g;ce5yxRjL%#Gb6LbsiJVGb)3pKPCLLT<|9Mfl0rp^R12%tu9cS zE!C(U64_#QveS5TWi4I6v=)VIakljJPD2fp0uB46DkUmnogk!Nt-rLI%JC~hP+C{Z z6b$jl_PTvR=e#G;$LB>GiD<*5NXzf&kPkPUY#E1V-|CcIBAKzQKu*GJ@vJUdh|v|) zb1-m=&)R)ShrBz}79%XnuLM%)veUO_;TavR7!UqxB?^BINwmHviyvC8PStAVzJ5;X zFIIF(7(@ZC8?8|6N%k3A6FQ;-R^w?*m)#APw@D9 zSb}ocjLXZPgR;`N7v1&0zfNE?iXm>OlX*&0uum&CjKRMhN5_etTS?L>ISg&8P}~>7 z(DBPG&S;fxwgH{q^gu zx>|&0;B^>16ooS%kj4<7G>9c7!$*?- z^@#cUJ^Cic_D0ITKo8iPT1rr(Hia3j`9rbG)45usq^lLzXffF@255~nYvbiQ%WPp< zLLA0DRlBauvzp4H@ug*;@v7xR&ZB@f%Y?rt2${2 zAd_ns#ubMF>67;iEz15C<-;C!pKGczlyJVle4%t(tS4RS{(S2HCmif!Eh78$^c0`0HnHh((mesm=pk67AwU`r%K!J;cqlKoHLID#3 zkCNQHL?wFv90R(SVW^;a)t8!-*!reW`!0j4F5fHlMFz%(%TcT2*_F=V*#nW>iB;K26RuTh&0 zi=i#XTqirr%yAU%clg&cshU>(O^sd7Ejl$=*mJnhe+pTsmeLVGE{vIuK6R9m_EMyT zRz4M0-5ikUly0xZfmBn2_>`YwnI-{C-)fksa2rjE$iWxuu+Rnb849uQ*wNP;CL#Sr zZne&IQaqyIi2fZn_-gbh((tvcl?Q&~S!_*_-ihN5?cl5`TB%%blwC2`4TU;X6LCTPaQIm)Q!y^>)i>>qh+HcAm$S`pf=&=yd88f!eS;?S}A z(ro=Fa;K5fjlV#s=e(%3d_YHz!={=?zK1tmah0gABAKZiJM>p$j;zn|U&#jQ!pVfE z8_)CEqEH&uixX+N`4SCc>dhQEn%Dy?6gH%yu(sRRL3mw*+|&n6Z{S&le`5iDdZYmH z4^P%HIeaa-pv^Qy06-ES9`6Ax|8-OP{~l_>_oZV^wV{l_tH&Y?*m}6(TSt>#L5SV} zevAFLJNiGK=|3HCT4Zwi_m3;l4k{d-euQiOg$>auG32a0iK`}7)gf%;+7tT(oD(+S zy~iREa8+}biP%5`G2o}hI)!h;X3`^?Z^vM!yPk#Zg)~X8-`%Y`@0`8fF&kbrzn%*X z#!oZs#71ob%GbPumYfqkyGI53t%c1VG4Gc{kdbYz#`Hw`*E3r}-kr->C|BBRja4zj zxz&f^nT&A`f*u#qLSl#%`nv`6@(2TTL4)q&vC9MA@eO^=)%6ZW29{CsY{R&dBU`zF z=0D|Hyt=ZzNi723%dIUcZ<$@X*|Y%=-L}?GN+mlxI5ifYtw$Cur9|`knhW4Di|2XF zyAa!B?{fn0yRjs^74z$yr13|;G)r-!nN@tiPXqYq48PvtBS%pDK(Vu9-#ee&Gu0i! zRqoB4y39Kz#vEC2ghILtbB>IAL8h!taKYL=)Z**pFRGXLjmaPAS3LY{-q^K!&aBN7c0SVJ6fl+0p0ho1XCc= zdN8I?J)Iu`5cCy(DT)z@16>x3?;@qSq<;uNVsXAJ9b?ARSs^hp5(aCC`Pcq(!uSCi zx9v)PSIJA#NB|ng^iC0@TUABtB)+Mmi4XWDj2XS+Im1rQiuYQ$LbDcw^ZRA*r* zf99vE?DjgUX;QIA_C_X4#nj$m8wWX$EHaoSKrM^jeeGc4_vK}jKy@QpbRo8~iVSP0 zv&-2|t%P}Iad8*FM3X9t!R{aO``+#uIKWvwBYKtll-<3$*mPt~WsAu`wj zggOUl>&UZyNsXn5PT@ah^UfD^f9z6q=r(p&j6l;L(edTcSZN{{!|c7|_*}8p*p!}( zrOQ}-(1Y8*-6Iq;shQf_XQ4zz0Xcrd!8k!!V^u6zDlb=x7KU4tGo!1_01=lAzbTe2!AW#DpU{hzfZaY@C|@ZqdcX@g-`)Rvi3fd0QJDPUgC>Tu#OaNV* zx}_>CY{zEEyPgdID1j#n%>9IYK=y{my{hDUEiD3JrZsYzAYQhKE?&XvtVz{z?}+C# zkMkq9^0qp?%Lp41oN+@DcDj%$jVU@6*}+bNjQMl&%Uq;-Ys4U0_#C%gJ*?Com&LIx z8q!rts_WfRqsuK2I?`$^b5ow%p9uXiL?d#>(oVDTj!i%8j$!t`eLYwGVHrF>uSG`m z2L}rH5Dgy)ZlG|dg@Iw!d+5npv^ZU>05z=C7EK3FZ!O1+bJ?NK*<5O!#k$Qw&?i@q z6lTgw(7X~Rdmp)!c`ngdXNuMZFRC=f9G=0i3x!N6exK}doGh8uUHyRIL0Uj^Y2B5s zJMakc0D&`{#9>+lYnS+W6xylFl6ZI{OYbiwU_M!-@PeY8LHKBHA6A%-*_s2OjRmMD zF=C`|Zb}&?9zZC=whcnfEn1K-+!bXJTIKv*?i*=R*cQaiY(?3r&iW&gOm6@`#o)FI z?#bUUF$fEVxkv=Gsaqxv3Pr zW(%`P6byi%pczCDbq2>Rs^z^^zSTaK+ zhAJxLrT!IgpV)yZ6baHX{Pbwm#QB6cO#tm1{{sh1CCiVyeOowt)(!{Bw~ zxc|c}a?q|r>D*MO_1nJ{MidS~fYRi;MS4+djKF$PTGg|)wkg9J$}!7PrFGlafZtAi zz5xUsQ;H_J!DSgA=&&Ub%%(ZYrj?jN7uhClt0QzwjU>!J!CELj-bHq6yB)pyjXg84 zS)f|O9p;N%FkeZdi~NM`9pS7A7Gb0t5(w^Iwzdw{j-vA81q4lb#||y~j?KT6iXXj1 z(bARCU8sWI7jrPFHVf!-f$3*Tw4)Y~o2SQaAPIZOjw`oU)TC z4B&p^m{jE!SQL#&E2^c%m*ZkyD2pYCIi$b@{Isf=BK_0EYMP)sS2ZqK;VsqL_+`Wg`ABp!Dn6Z#8ua6!ooFHej-Qi~rILoNSQ^9JB$rvR@_ z0~En)=>A{o-~Lm4|L1_(Lnq}|Sx)~b31gmh-7wwzm0fPKNS&9J2QbQR3e6_jR)p@# z8Ui3Ip84U`n|C7wWIAn*@G7<64`Rfa6#O|ZiismVW_~nzCs-T%q-FULCo@tWG4R#- zU$#a39BuONL*rm-`!S#ZbLG|6k2=V|w1W=!->FL>O7e*#RyXAuR2LtTG(E80 z;pj%8wQAtw%)OF9cZi-~%PDXX_vC&v2Y7XQtC6+ke;gfs@=mKDB|4ckR z+#`tkx54@;IQ(TBM#?s5ujl12sigb)!g*CeE4BNcTg zqp*Hix7qCdTm>-%ct*c!A`Vwz|w%tVmHt2KqK&jgz0_)@DqwTj-YBJ+W??&JMyw22ZIpx{%n z^f(`mD!s&r=$Z!zVUh34Ri4Y(PnQpLrM*5Me9LaE2*$$~fEyp-e^v0wrv{5~;e%Lw z9)X*nns@<#Hu&kNlJV{Gb-u3RcQ)@}QiM|#IdHQH1=MhGWDNsK{KCyg!Pxj<(zxEO z4=iqVE8QKDbo~I$S!GIu>rJLu3m^L7>@5mn^rEu4O`-=YP}~Vzr&S&F zYS&IGZ1|nQst`j>^Qwt&V%YV2?_(M!-@%{L*XirRC^j7s!dH{>dUv`6=~O*8dw0OL zyY=yFXfP*~XwXK*g7ns!+sQHnWA9$gXvyw3J@1S&=c)5|HouJiug&aaiyAQa{C8oZ zDl&OdYTNzb4o=jDyw?mC;ul#T5z6|mKTSA7m_2GSy$YYQfeCb?jsngEPOfBdL5s}Y z?+}cCt1SJ5kE)o>r7-#Gc7u*>@>CArDn1~Gr1xv68j1l7Zj>KZ5dJa3f0O0%V_yOO zlK%%x_+NbVe@#22|0{oRR^s<~KI{VjI|)B>Wo>QRGT6zAYaaq$gpHF^_ftMfXKC5n w*Wa=4pF diff --git a/docs/getting-started/miniconda-installation/img/miniconda-installer-4.png b/docs/getting-started/miniconda-installation/img/miniconda-installer-4.png deleted file mode 100644 index 7d77f66fea9274a2bee851569b4288aca8234712..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21607 zcmbTdWmp`+_a-`!03o=$Tks%*O9&7gg1fsD+(~eE*AU!caCdhG28ZA_KyZhh-+%Ys zXYbx;_rreZGf!1_^;B0KdCz;gBfcw2p?xI&2mk=kWTYij006iv*b)2z9@bMOYhVuh zfpbxj`U5L5Fs zIL$%v#oNnxV~7wNK(XqCsBq8@gf=u{m69~1u25pGCN>%StYYh;1P1h%u{M48Sg7i& zcD4V_`k{%ZVbxu(DP$e^lk{TFru=7vI`*VG<~hOpR+7Z$ygN>=^N9{FOGW3zY_12t z(Sy%dQ$AiB9v1#r6FyTyN$QcsNZg$j6`S<#4i0AvO0u0J^&$j@H+{}` zjr(_HC4Sso9Ce=WiXoa2|v#vAE2e32$?U6JicXLO?zKqZWitvj}P$=b@5^l z4OyQze@nM|zfS*)fx4mEs4j>xX==8~l0sxqd-{Qz~zAXEEC@85Ysc0|J zrH2iXcJxijk!dqF!}_M7sG;bNKaT8&1o(L^RRi5ENh+k^|FQf1AYT~C@HsCQDc9>n zTb98utmPfxOJ;$x`z2&lDd4Wtqq+O_+A;I(WOT9VrFhSyo+rS5s-KtV)Q9c+8t-Hg zO5d7-^JJm@!)|5e==kaYw&4tRM%6q z^=o+td^QwA^6*v#EE*!MI}FY`bp)okIGEuPx$IBW*%lBFfTmE3I^t5`5bu-YOLc`U zux-+GZEak0l;+<9GA3im1a}j|ek#1c0n>agoiqzp2L8pD+xogYFHvkf9X`-ZWx3DJ zcW|+Zcnt7s#^qkVjCVazXg)tBOwow0XoHv6iJUkX*?1re%>LWOXtwDaMI_)7rGvMF zIOhGgb}L=~66OAel`w^Ilfh=Tku=-rX9T6|>&jfl#Sf5+jE;mO6x(dmuQ!V|Tox%; zmsvc}a_y7S$b^xf@w@CTjeJcLM`_JGz+`;9@V#dQlmR{f05NEstsTm)B=m}rR8uSD zq4Qf^work(h=4CSN1=v9o1Mbje6edNq5oTAOVS&gKZ(nqgMpOuyyv36v69W_6E4To zKX%EVqWBqgN^Ovl=c_YAQa7~0?|hA0ZPCBx2-RAO?E3!V#QQU0?8#i`qG+%|t?H=} zVf)w%F$`(itIu-K*JoSg{tPrAWQnk6ZMSpc|F%ZPRvUGXkp4D7c`Q44Q2GZnRiLm6Pd6S>j(LK7ss`AGls%3E9(i zDfz@)WY;f0`xAcjxJ_HEZIVsXzw;wf>*U~0XTp#p8agqDF@G+ zQRC(Q5#5pi_~L&o9z3k^Em0Dp#q5>KgEwG7%lz+5od#`~go-tZ)ktVAqf=dWc=k+cEt3yxDoU6InV*h$JrW7`b9&bvC@;q?iB67rFEY{rd5%4l=Gn$hqFoEZ zZo+=R)~86O*}+n=NIf{iOL^|k#&;8&p2~jaZWi=dB;1H26_{IY`58<|+a03cM-6M6 zisw5zRl2^RUxFKH8{hyDLPNgs8KLA5+Grpv4evF67%0g-DeZN(UKDh`BpBB{_wTmO zkHI`gBH}tNE9VKi+U|e#d>%Q?)^?p8HzPv%rjHNq>2Arwy2^<_4rN0v+Aoaw={IdX z`H!Vrl?&+5_g;N!yf#{B@^vbH9qnJTLYDl22RIa1ew+#Bd9RNkYpat-*{qghWq~6v z>+hC?bD2^!>e}cO6TB@|-^x6zIa{|N@UDY5L*7S7`f zB$I%VnDteZp#cp52$*kmv(+hP-|q5za&Hz$%8ic=*xx4V2e~)~98WzFp9k!pS{|Jf zC^Yg4-=5xiZ#>;fRfHX&T5dKXZVD(EYN;M)E6c!ND)ZuxFT-)bargoA1dM8lwg5GW z{9Cr3Q_Djv{3QMU*?kpR>uM~%w}GjG+W3LlUY+ibf6w9DjdDJ>P;Jl;D8zhMInGSK zw%Ei7c2ARw%Ce|$1BNUWqMuZyw_dCW`spQ+>S(0v4uxt)V+P@=F&o#jnn>645ROe} z!`lG>!F^9D)|-QVCa>Dsyz8#uNIYgU_^`63gauHy+mHTk?yi@$+9WNtSDbYQHX`7e zAYI)Y3fuYF5&aE8h8VlGu83Dt9Z#99tm9#~#i7OC6m=fSN5EXR(QJc+JAiW0YB-i` z1Anv+8HYZ;f^{(|zwPma*qotMz~=lgqClyusp@4NU6#n_+s5#89^ZB$R{V{c*dN^) zSKG^^6`3!`<6VY_Y4pFLfI`NuF~twl`qk-QAit24$$oN&B(G~0%Rok5&X12kuLHOp zYp9_DV9mQP5IAYoz+?gDDB%LLm)Y_)SV*PxBSN4c1pxjaCX@Xy^4o1ffz%!~0Pu4n zOilRd9{G7227CUzD-*CVg$=a%vJCgXNVD#xSr!6VB$fz-CMIIHet=zuZN!84Ki$~x zQ?0cFzElU%g3RjWXv5$E>-tNq;YpuKPG@I-Ir{=061d5i?Ih3aa!rib{PXos5C$BN zy%r5V#Ey_slEg}-XwgR4ui6E?Hi}ROL@NT4==yl;@IsP#DkJdj4Zf9d zi_ND%m50S$yr-l%erdfkRQORGZvY8AwnJK|a|HW}oNyHo;%uu>riG2N>oCSdOL7o? z`sY2Xon28S=>D7XH`+|R`4Qql*Wl&&E;k11>Fk*80PU)J)>I1(x~3L1`fMIm#Cnrf z{q4~q@Gb}%Lr9%#3Zl_FDzOj_gB5)3-LW~dj{LZSt_WDnKFXRd_3^f%s*X@- z%IBdeRGFw3wWQl~Mh+{Kd@K=UcE#$lK2QI9x+9+1#q>0bBL(5v^!eNAVIb0RH@f(y z#|J9iS%)kr07W04$QI%ZH81`qhXk~4C8SX#xAp?S8r`vly_cIUC`+{t>ujydA@S~F z){|ecZ(-5hasa}O%T==KN|`itL|K!|nDo?hz2LfMwXVfg;Ypwm{0Q22h$kVWvR9N@ zg#Yw6@#Nk_+;>Y^M~zlPHOf*xIkb1CKxwSY>-;TQ`16*BeK#pTbYf6RJ>ZVrg~E@n z>lml|VQYZG(sJ*6XmxINcgJfj@_RBLPk$SB?3gfZXIObz|6WeYo84Y zO9S3IPFHjEbN;Xp0$Lc3(|-UN91i|Pn3HfNwXQSKSp3G*OIrB@nBLSW*k#S3DPPi} zu}I-BatRKDR?iz#4`*9zSmvcP&41J?N}Zl`L0qm>D;=fpW_3EaZm=X7X(|u;JHSDE zoBj`k|L1EXN~g_A78a^{m&Q#Mi^?s<+x_t6&kvI@9Y}q>fnemiUjPe4xgHxhl0h#q zp(Puh&u@5}msbb=Dyto`W>=TLz-(>j<(qlAKB0O@Mk8V#?7Lk_+&dmIzYXt8PWEYq zNnA>={<7y8E}LEpJzrX=I6a;~&no?&+c+$v>9k?qUf?eIDuC}|7)7L`<@wKap3j&U zD1B5e?AEuW_Xq@Yu+og9jDivOmOT0wQ3nA6+l8v5#uP9esENyZn!0G7CgizXzq?fp zg;r)y$ChO~Zvj(GyPFP8Jzlpm!yH)*()$nASTi@g_DkARNAUomq@I|_*Mg&rPblY2 z{_Yc%n||IjtZ%pA8-%tObkB&xb&AGS)?y$s*YUdFxp55G*;;2!nrecpa|7jW4fHT4{>ckp}y-b|8% zJ%)-b_SoxjLYip%1CA<1I^X%Uq0i3Y2?gKHADIIt!)JzVOU+mB`BBSJynfHUe;cCR zZR*vuftmhSODE2Qg*QD{Wan)Z@A)BacGJDF@6J1E78O2)%PY$=mj^V);KDTykV*%{e8;&ylIRJb)PZIE|;=eFFl}oG9 zAD@+@tNMu2+V}9_BAOr(>0;6oX4xt(9oQt(BmM?jt$=qD{XldUl&Upy>3S2sQY(ngfAPb@*bXpR2>}d zA*@PMZ^QS%dW!0$*U*=%gCURC*P?rFV95Qdu3%Tw&B{5quUzHp&FQJ3S7|ot?*W+Q z2iY)hYUx}}=$ll0bPGFv8*~v(Ie~4Nka3D1IEv(WDggGrsVavnal$c^KPiw z2!*!iGJo1Q-hOsdJQthhv)BG<&aP_G+p2rd#TaC^L|-D$h2qKC^3I1k1hdP@Ln%%R zFTVTjI!kG;Pn^BZ@q=2a=S$Q{S?JtV&EpUquffeLXzFZ=)rZ0}Ygm#}>h(!!qvgry ziIE}ZenQeP+v`F!*JtcuS2du0>ygayRdU|x_Mgj9l1i@6uzy2+)@$8(zUzcfi?FNp z^IEz#mx$KIR=tRO?bZ6*+5KcpQ@2KxG^O0+`Y%$D5Ze0ww3FuVKn zpWf9m)xLi@P&9mfJqUnYPjP8~g9sPht@}MNsob{Hvl@y#`0KEVoT!ZbI}d1&5fOd) zbs57&+;vwM@Ny>Q__PDWF#Pd~E30>(<^@xu*{>c-1b*0?-gfx<6$8%h_#{h7E{YnO zC3>EdeR7V5dd`dGO3(Wxny)rmQ==q?dT;Y5aZy5ntUhmPA{cJum77;m2{1Zo6kB8Y z?e!K+>rNAv<8>@k!s@x**4^0|^j_IPE>!N@g_ShD55{SNoQP}3s;tPQ6A3%v#jjNcmhnk)`X=l*_lM~bmy+!)!)J;NGs1qCQ1HP`+!VIUnf^L4 z7kbxSwH{}*+$QgqPuhkUN<|iQc%YOZ2u30Cg zHszy)ZCH69$=S<*BY~*;%PQoFBK`H=lI`)&T0HGJi9h;7xpRmDbG>0NQZ490>biAz zhuML};C>}RGuQJJE5YHSKjKcF%+DSyIK6T0iC5JXFkl7ieSXzHJ?Am>7=1Q>b7HTm zwtL1%*zo@Sz~|96&OSHIBK!hTy?z+1GsLT4$|K>55;?Mw%F|w>c$4kr?S4t1h+i{& zv!Yvu{V3f+IJXl1FZrwc3yHQ2?8klDNN7R@kW2G)+fUbxhhdKYdh)rd%_ zJPpk*ew2zyBT3vXgeE!HL(8yjnZ!|K9+GO_9*^WJAL`%ed9<^A#t`0| zm)8&CJl_mASDMN%Lr%^^w0bxS~$hS(4%H$5fUIkNMW!X~`JSixY$=-&EzF!(ka)S1sb#V1_AG zut;m}^4em;Wy3-8s?x7#y*vnCV{UZEg|CuYJEj<3^D!bDnl$j0op0&k3`L# zW?p$wXP)1~AcT#onf&c$wbvC9g!B}2L;+p0JkK%kGMG0G`~A3F zf-1+R6h>TIEgEfT0`ajg4f>|+8V6D8ToXc4%?wbAS?ckpSRCT#rsP;XAaUD&A~`CA4AlljabojxOk(3Vgn$JrWS9oa6h3tRwxe^7 z0lP?VzRTTj4+~W*hR~3$!65ch^c$}dJ<2qp4j13e{Z2dT_Ue~K)z`Z@rDvtOd-MDm zbCe%QpO1Iz{a;4~R8*KGE0#l(=btiD!3+_Cc-@b0vi_qKRo=%j!$(a)*%ugjHyk=u zUhc^H{8|n;RFI_UH`;Y$q06yUdq*LvIRtK8G`;1LnAb{aD#fux&GyXE?pg;cP)@%f z4BYHtTaFqoW0;EM-QhWJ90f86_`F?-(g==|r^8qbUTYYqn_OF+@2U57Ga_evu&-uQ zOTJ6$=cqKqG&ob8+61J(CC<<~~8^Q3~^`lF^Y;N{|3O8iow`Ftj z6XXg!9%#N8utaVCi62X11H&(T87#w2ymSezr!?R889(=fhF#0t!5R8n4F&nUHShJf zBnN0bXM&LE6UBvv4w4=Htl-RBTDNrXgq#0(1(?E+(A&c8IE9^Q#2$fPE>j@_dxhvl z`;}Bj9{yn;rONvnQm-;tVwC!#fYI4-K@#Wt>kO~dLp=maUvTS%PnJ}zWOls7rDZu- z4?n-Wj|i^cgwS2!9~IkQ_L@eZ z)(VT$KwqXQoBjB>eeaWa?fObFaH=cnD06metrY>?ck;y|*^h!A)U4JX3-Vg88__^S z^-P{EN~sc(O4ej=Jl%iPvlBQDOqB?q}2 z8$`}M+c3vz*jP(2^9&s`tZBOxwJoXa4j7}*FnGu_oa&CnCJ?$nd&Esk70>z5WZF<;n6w%>-+WLq!9(}BL&B5cRL@L~C zvAX%4Jb_NEyX0C#r`BXAoYALk@d1WUpN0wyJN$+{j+i+2uj|ZM8yDPvKir+#GWJhb z-{WPp-KtjBi?;sJaCM(m<*j2<2?I)Eg@@|^UEZl8Y}MQ%Z0TiORjxg8$vg({2G&{k zSO0+*I6q>sENL%5$HwPy>sgp8X{HTFII%z$WHD?xzwXpo{2NXXe4kLufA{_A3=&*G z{4r4n+eAC{$X71wF1DQaK0R%vfLjHI17KkQ7R^OpuaU+Ggnq1hym8(UOutoziAE>k z?w*!UpZzCZ`E$({uH=!adW{!(`2K5%GRL;`zwqc*`4)sBbvkb^ijhb#t9=H&scp<2h`47r;%yPOr7@80m>we4jeNA>V$JhW`KUfY= zWO_O<`n|61iLUCsCf^GS{&)(ecPOxP^ZK_h}sF^5ziy`B8fGpKS z8IEhkFN?Ch@Vkjs;zxJv$~`P5G~y8i99?-Cw!Vt<&I0#EYhJsBL>2>TuX-8@{EUB$ z>YG?>esxV{Nj_mTF^<7vu2l+BaCrb7336$hy|Es!50r3)z3+ELkR*4vWho)jvM3QR zmON}rb}I5Takb~@ZMmA#pJ23%BH?LC4zk2;J{6~waU7xP-xfXkNCDA@)h2A3aCyqwjaj@nZ$Q{+#wTRA32%4I!Bj2 z%aQH&JS*8gm0lFSM9}FvIQJMsqq_H7)j8Rd-9BHxLm#m>GWyZtp@&d~d)q{}f4F@9 zQnw}oW4cZ+EsPUJ8!0tU%hzJCsJnZZs@YaESX=jTZmIJ?pOl%6|B*r`70)tR>nGSM z>@SA&6e@ta;})zMbeT2?f5Mxv>v44pBn+~tnsk8J)x^G;S2dH>a%JLQvXU=NW^MCV z7)$8jA-^+wSL~_lbp~{JV&+c6|K>QP&bwMlUnz}tsg@n(Sl*ICJx@oN)3UXFTdrnm zbkClSQf&J>D9d0`Z9Gq(Nt16;pYts%?OC)H9w0qZ+^S7tK`-iu5K3yObekh9Y3aY4 zv-9*V$9I3QBjsvn^ZC94!*TiPXZT4)$mM3;4t`ptq35yHhycL2HXwq(|8q$L zK>EwvxfmVU8!VM;HB-AtL#b}JfAWynhM{p0!Q#tElwx12`LIEyc^IiCZniG6B^B=m032$17eEI_ zj0>te4^b!txPGiLMDalE$3UH?ypEV#MWbnt!n*UmZVK>~`>6p_F88PR_t5XDrxtWexL z0Kf=vxW`)xo8VlkfqxLJMoyXY3k0i_&j0+sl14vF**ev_N+-xIX{;f?l(OU%N>!)cweN8IYDuR-FDY=J|7LWZfSAHPz5 zjPs~Op;~il3JW>Atn$YSo0WY~VybRshpddYeeXvlag{Os3RDB%gO>IThH2jKfuHQn zZ`I_GC*W)BD`HxUtuM4DO1Cr~P;mi(^uT3JhsgCrS@S#KIOKcT@D-Y*dR0|1%dn|= z)q*dHssea6w5#hCr35AbpMzhm&orJdGPN9OLO{I>?PJU7Wtpaz90fV_qyV zgYYx$?|WGrgI@yt1BX`j*?bO_dPjohz=_aHZ^#dqV_1dZG4I!RcWifOJvujac||;R z^S0^w1c+jVRb`xvF^qwglO<(lD!Q&G^U0?8hdV9%rsXbCN5!o>~C;*)5A13mq! ztb^)0i*nwkzZ07*Xr$P(QIRp5Ryxdiw6Ou3%F{4mHmHR7b$O9QuAFs`nfYMOK%?J3 zvae&gm34PJ-ihtaHnsEO^79a_iNW4f3WAsmucIrne21&3H;je_zW% z@7ee3N`!7td!*4F{eP{gBcjX7iz3H08fsCWPc&vRv-B4?NOtiELBwr0wcVu%fS<1x zU-p-|P$r)R0f1}v4Bly&y&F;f0{QgRO9OtQB8|b?%J2S5()iq+tvh4EY>ak^5}UPJXz&OjVQLz-d>32zPD(HC|`#*7IEgefgN8 z<#egCpFqH)fw<_5(x09un?GG3b+Y$T^u6<16UIui6DK7ih~T?#NP~6&-|$k9hfvE# zX*nlEbm>I3>Ktf>pOiYr8?;E2lKPb&k;-ucKiBwRPR3%Nbs>b>lqui6X=1$N{+`H& zC;Zc_ntQP{%oHV8?Tnj*rV=GrpH*hiep4pr*EwpWKIS%l(pg3@Nxw}IlC zRliLa(4v~`b=9bOT9}%Rs^ZyMc}Cx}KG>tmfMC zrrd+*#YGL)dGBNV9?(Xls^N0F@+mI_Fetu?s}6KG`%i8n%{(jRZPu> z_-rnaWX6JB(M11FbmJgXqe-z@qT*#>Qv$X=xdS2Bh88WV(IM(PN=XUjREjA(yg74|*w$-&A#xn2YAixDz}S25IxLt7RK3TFO((6dO`> z<+q1aaUg-xC1?M#*^tfC;q^gXCMEH_r<9&`#XmkQ0u!UTZJ50p<*x^;ep(VL6pWP9 z4{K@h_eay_pStmpG+3ctoe@_sp(v0$#C_iApqL{;{1O@d8t?B+ zTW>%r)fpXe(TnL1T#5d{^}Xa;!|q|mz3tzAPZmtME)Ru~kpjHMEF=h|?~{*$k#R8f zDRD2BO3g!@>B#``JcT@MfbAhvR_UdaaiB}vE^v%4=>?Y6&;h=@aqa%6PE4(2lOmkh z{hw$}h4#M|j;ST_|Emk>|8v6c-(fsfXV8bFl5QC!lE*CETMjezcS7aj#tiTwsNZkP zY`(|*eCJw9);@2DR4=t0DVovN0Pe<`jgU#$~<=T)Y z<(;$ot~^5}e?@4vb(Y5ySR%88nFsE%GxxXu$!HQTJ=gzZ=YBN>(XLf^z)rp0{}X}| zRf%`&jBEVvO@7~KM_WQWqxxEI@(?umX)G-*0Ytp7#)r<@p8RR((r8|AnVbGT=s5zNe>4P3x zU6M4USD1M*>vqlEd*cFs4pA`6XXXQsNb>IKZx1cCmfDilijN948PUw;oc9%}(i(%d z2*~E16(}!01lbC_-|0STrB=C&J?2f4Z8OgzX#$u zNlS7q07dGq=#SZjzbQu29ltL#(^Mu&JUw!=LdGXL*cnXW{{&MmLKvwt+6{X4)2jX6 zGEN5VWSOyJjB|yIoq!USEETCa0e$tL*%j*toozBlD*NxCR-_n8tlw?hRH2fR9|hSR zWZHSVSO0$Y0c%Gz#Z}vwGf{O~IA@Gkpe$FUmbQp%;K6&BY&Q-Iey5*D;X&wclZi>3 zs!wU6KhTxNcKG>1|O`bxywl=ei6)431WIckisx>fRP>g^;w= z8*SsZtIf94KMsEW0sojCP>p|N2OZYDrdt%7WBbuhex2Io&&gM-Q(b)VSlm}f8%g_1 z9!1p;69E-hh84NaF8Rn;H_RJ65(sF*`{Q?oWBaVR+39$g+QK(Z-aYgY?DdKFrq`SX{cJ6ESJ^AqfU8~{9-nH2QdfAmqKvGM{Shx)C=B& zy1_^9xJpD)eAw&D{l5pt$?7^_(|IpB+BUs|5a$#6%$aiw^HSo09_TwkYx~W&`>s(_?|9mbA?rfgc zAA3{qXPOZGPS76wFF6H+DUzSKcn~!$LowpEm-xMHer2fefR#wt5fLVy2%jQ%x6o`%y{r+A zOkyc(Xur+P$_Vesc3btJN$l8Ulec5Hc~v8Tlj4(4rpe3q^j?3I^iV9&HZy*Ps50#f zPu{6!$ugr?hH}xvO%}>2)K~jPWsl)F7Vd|U$V`{2NULJ4<(+=;J$z4h#A~lNTiH}; z1MNaxO~2b@Va@H1VB&`axUr3=f4b!u+ZR&MIsd^0dAhSwE%zVFRX*zyNe%+df239j zWz2!Dk+Tu>9mejU65U{yuR`GiDU=4A4X!0mC+bY?l};sb*ua{2yepelj~`J@@pyz7xhovcQyumfq!ngJ+8X41(lcjX_ONY2bi+i^G&0li)=@F~pu_*T?R{38R`5FU7^6fR9 z>0Df>cW#nm-Qc~Edin+*HN!Dzr9e9T>5+_Q9O*H;s*4D8KJsM#L#yo(~ zA)=#S=n`ITbebP7Eya+SuELmrha}BpzW<9Ag5wc0S-5rYx2dcT|-->vNrSRWgUX0RmV%uv$J zpo@1jxgx+$wNaj9AWj`hIgu&w5q!o*wXK`!`A*WU$6Ll<4mTMY`BKYw_Ywf@JCbq7*WY z*OqER8q2i)ldDRbBJ?IRXopHw$c9(Hk8(I)O~EoQNcLa8M2=#bTZ(>=>yOv!3=#gB zww-rHH~gFA%k^fqCO`O_BBUx97uZa6 z>FOiRUo&PD5iDz2`y9R&((?S|wXBYevBCI|I!UC<)IzD7(scFGw<8t7bei1+2V!(t zo-)zxotq#o`|1FtRt_&1xQZo{J<%>qm!mg=l%(H8F+7^U=)KZp> zsq70OW?u(7oOzS_3n--pkSb6^ixwJIp1>8JBQlP%rydW9SI*8>x~@Z7*eiF; zrlE_AsnE$NAD?ijYo+-XuZoY$)gxh>lJ?nMCtb;{{^Mwsj&)RPa{5%}z>^GQOCSlm{u(5FhaMXKiu%>653=kUp6lbJ!q+|I;2 z*Ov@%zT5lM)9Zvg4bYOG60$s+sMm~pqok^{n>$PPIT&E~Z4)rdevt7bx~O0nxJVk{ zyKhbmuM7F+A{e8zrKMs>%v^jSq~kkgCr9R8k+@FtyL$v+ZmAqGFv*%ALREK2=$`S1 zdyBG1bWX>7-=o$2s|NM};j6Wj$E-k6 zlIBIuD45|q`^k+S&+gn?r|5DQ%LuQt+uSrPpY4r?p&)Z#-z5`2;k+oSL{N-a+lk<` zeOA8kTqT@L_*D7s?T15N&M(VgAZ=<+#yUb2Zas1+U)}v0P0>TP1$hN-1u(yu_SaVF z?n?}wot$Ng!oS-0sX!8tsoe4*3a51qF#D>8>RS&U^VkpM*5a>ISiwCcE@LZ#7zQ}F zPx4^0H~qg9tcn4D%cMS}tkYYNFT;Qgl`g8l2jtW5V6q}hEj^^rTWL9`7N&dclzDQv z7ewm7qCihOHNS_S>qsRCyST;Tc8tVc5@=VP;YhT%(vD&hwXVNnjgk4Q#AP91M4tSp zJR{FTE8DrLM^wNPjWxV4jNu{l{aX)XazDV2<)V^}nfkyxew3yd*f`n|A->no#;#YD z%uI(%d_P8x*J1hhcXm>l4Y#kbHJ$K_0}md`)i~bg`ClNZ5FsT(7Drjcg#4kq=4G=c{tSi%I3XuB|Kf{4 zBHY-SCt^x%Hj?8my;v>-t?HK%+LIsr0{R`sRULKN6VEJz<+7{6BS(=1yP%k~)c1p) zHjWU{)aw57;XYX`o=-1xl+*zqj7#VngD^wQP}-s!oQjZ8DHHxJVS3iL>L8O-+a_5k zWn4!sTN4pu6w+nzOe=;F`0!;up?7UmFwlYl!SWwhC0d-6Uu zOyq)F`K`vr-I&0<_rqJi6FqLn!XSvIG|3$^FbiMzom9=;(49benrxrlgr^IW;O}yg zv%B313lcChH~FaFPY-y+6x8qTf=*aof~UEB63FkQ8L2V|t7`%#KFjnPS1nZ*IE_p^ zPXyKJH}ue}b%>R5d)lfBFm}ye-U=Xh)J)n(4&Tn~Dl19VvF z!;j6k3C706j3$6tBG5atNqR8_Fl^h&h*oA1MvkPzYBgjMbh38ZW|Wh|e=7n|S;E-> zkC87leEKY0@7>@j!D14h|7TnHf7wzj8kGNuI{ohi>i<#BQvcV0g#Y73$}~1(A~y4% ze7Ct2MBoTnIRDyvX&U-9>U}gjfmAso0|1;cYF(`7`{(AN(_J)JoD{xv@#KH`-UrFe zTbSOSZ?dO_5|dRFE9x&$X(FZ=$!&9}2vg&yA$JwlO1%@|6Tjnoex`bcrE^95+m$;h#x-y^j+@J2j4?pHF{L5-D*NVbnz$LBX< z4?sm!zFuZPK3eJyupE3$9H`Exb=*j0y}I0$%{%gR>Qq)YuMEJPtDc*MnBne~m?c+r z>RGCx_uz3GIL=4hy0h8q?Aye}lGVkOR&dhe#TFs7qW$cp%n( z@M-e;Jex>RW4+dDwMmk0KeGVazzpwdZ*39dziK9utA!1#{6y5v`Wfbl+k_w?cXWfV znh`lAX0tq&fhtu4?W2mySD;W6jxIX_O|+dmZzgT|`X9Nzr~1;&;?87dUlBmxyK8(WQ^DmWZDSF)NP46_9^SSzY@ z_}JrY;u&E}k&tT{x44-2G>~ROH;K|JH%R(GB2AS(hKtN@2cw#W1cS90gY2j@Ztf;Lj`)9BryN3pQv1M{^Qddh|clxBT&ivyL7gtBB z=Ws`5C=ars4-8-j2WtT`9(`WJ4tsc-wNLVnevud*zb3z>A75T4+c) zj+goG``Vf{q@~fK8V;BB{%t^Rz)?@Id`H&Wj-7EFN~@_juMca3V=~oM*%D&}?L?R#=&$|5NF0t!i$b1QuJ=N_1-JaL)`ZtJA9~a^P-yz(eKg z_~=|p=(_jU#TS|@-b%`ZE@(^<_TRP1@~TZC1-hZlCbKl@`X6rBOVrVSM{0MEl&|En#8n?y{%4A4zYU+-KRcl0C^c#ylSmAWhi_&Imd(=jL32? zWP0*?36dc4co~<2VurC@uIZ|`<_Jyi3`|?s5F*$_*j6h8pGnjhj6)ZP$jg;ezU6rI z<@uTCpSchJ_|Wq+iD(vKzC^xJKK-+p1i^1E_M;>wa+GHcRKENzP*;yM@7z$+25Fd) zRnp2KJXSP`I75oo_lsN$TKJSkle%*BHu6l@F7$0;G|n_C0^U$sK~(DcJ?2)CkhO|D z+LL_XtcoRp z_WzSHsA{*dDJ5xD@)_%Ynu6UzCm@24Wh)aV-w~*l6?a(Y z3_TieXU^5}FP3`Nu&58a`$~*HD*DIp*LGJ|(8+7@Fz}5dM#y(&qDRSy2Ci3U`itF; zaVGGo2p6%|{PLpci=*kLPbE22SW=H+B00P1*HSlOu9>MpZZg_t`bxCVHnq`}jylSMdn`Dp<(u=D}!(h%A=weO&&uvM@-aemgQ@)q9WsvP3=nD4$l(od4e zf4X=7A>mi~`UGS>$Y^_=ECTHl^ZD9FV!yC$J&#RnWEh2)3+f&wqZhmr-eR$nZ`&7> zHonzTa~hf<1y);<0*#bAgOG&wj5s-;C}obSEXx7`oHO|I9`D*}4s$83HAM4k6As4^ zcS~({*P|&hz)SENJJHbX;PPG{d&OAisz{TfzR>FjkDS=(64e#jn%_}5TiL=_@uziNL z=g3cwx}=>Tn0BYUUv`A6{;`SIy@m%x{cB${in&x})=$q~Cqq-xFfotbd%Lsm2arW~yz~wKaOICeQxTvkCjXea33sw) z2UjG*eoM?R-3b|EB0oksINtc&v;D5)J2;iX%5*Jbyw||9%jsa_-G=D%O7b*u2LAQa zSaxZrFsoKVSSii4!Zf|K#rn%#L*&`Y<65wSRV3e!oAC9xE3U}bk-M!lG{LyBfyldo z2zj>h*>rKs=9J0R(nOPjVox8|V}^=K1lemcn~-3yrH)@g|WvkVINkZ2bO5K$Z2=}R-Cdk@FCI}Hp3aFo!62Mvu*7j%%!EZmNjw-h} z^$n&kY1Pb5;lACY!NW2p)#aPyA9sa9X=G(ktENL@OS9%-7m{JOJ%tmy%4vJYqmTZx z@MLF@>p%TB|LBhBu}u`$FGcgfoZ2h8fwvymowu;*efH|h=a}erwq1iB>F;~)5AC!z zMjoSyl#x&%-mz|HxeS95HmH?xw(dN&Cx5-TZNnpT27X}l86Lxew)+TVdXVRh2w9;x z<3zWgPnD%ZSS@HzVjNyKPAKIK`FyUt?+6o^8~iSu&bn%=)S-H^Gr`p##QAm%lAnzu z77r39dt*RlmRA)#tZlGQZZ4cNhSv|)2>31=?NGaO)ghEj}bSOB$;R4XTX7@G~**d`!SKm!+yJ zEKgEt`tq?mjr-*8yb_$305^0^(B2n%8%CG4mxn$gbxD|6evlvJ%4^?Gb#k*D_<*59 zA&oE76+?8BwO)_w(izR<1&=6ZOin`Rvi%Qko}SW`$iysAKQY1_t*I_AmKnypv*DDx zXZVU1kNsu?T(hSng%3EVhR|r84~LzV{C8*brSG`S2;UhE_BT>=0sV zhB6y4o?`u_B}{|e!^eiii?Ey*4b2U}t6Bwg)YKqt!37U5Qpd9HJI7h-Ehw}$$AoKX z`#pbFceGnS0zbEr5^YIDWG=L*?NLkF9v@T0#hT?M_*}3PU^@ERFM4Upvl#i*vX0sT?a0PTZDKiIqmvgrKiH?GF}p&3rYq;xggQbP`gAEHA&2^{fYZ%-yKFwiOB6foeZlihrb& z%u#a!_VfSIv%$?UaQN&B_EqP~i&-89UxRP{3bEzeipnZ-NX=+PiZZeBtPk9zx6_Py zhe%8ZiK>CsfGXOuEw)14Fhj&q7YDh-7AsOI`mPqJaNmBO%z84=5*_}?$*sN(=cKD5 z{1F~{4_A_GX?ks!)iaILr2&`hF7^b#%Oyi@g=kdi@>=6evN)OIzESR=-0zz^taUUJ zIBp4D-q{ixPH!NivXy6OL#o-Qe-XCiiI_z=0UiW{_227#iH(Z5ZUs) z5vV!BuH4Z?s7}T+9XhG$6S$BnkWs(pZjBUd=xP;%^L>IKm(aUK%K!r9oRRP~EFB`g ztj5Vl#LkiTtWl~!rp>2icPr_sgLg=xrv;7DImffv>1+HU)s|A;8_SGsr+f&(FU;Mf zt?maw!H|bpo#_^}NB1^PP7=N;x~OF*ZT3uFJZY{5|bjfM z6h*!Mx?I6%rfrbL1dJ0<=YM}W=gLhd72koRcULqX$0@iDQ)>E)3CD*l#ff}pex^;3 zTawaODC^u`Pt^0HJtu9<5)f$dUlYot^dCNO#e*9;#9vQpQ4?LsVhlV}6+#Exe zRc=kkuMBf^;WIx33WP+lo3*N&oCi3WG)8xS#8c-4Q5_b^#phv6YO10QB4OX4rAd!Q ztxU&i8xLsvKSja>4#)U>mI_+DDm;e8-?jzLkhss6d%ff~L-VkE_9@<6 z4;p6#%Cd7Zx&fV3_H-N2>BH*1T-nh=R(86| zGb^e;#-gszMaxmhC_L2I)hd`?&<0VwM0gRYTKBDpc9*3|_gvH6#N4UH{Eey&Cmj5> z+AF{vwS96{V*P7f!gIs4uc1+fjBE4D$Ia?>b=e*gczrli_5eT9QKT_~y|Hent&&_2 zB7p#8bVO`ZZXEeWK#<# z9S5S1il(J3&7ftT?osfvviry*#O2C*dwErPBv`QrRz2>ia-0PPHBbLV2wG*Q`jp1^ zGxT8E%Km3EDOUM0Ua&E2ae9>&ToMIeq)#t53bwg>(xK*M)}J4diPpa+gb>o_;k2lg zMlDXJvq~7J*AIqj$Q10m1SxQMPofrB_>HoD-;wgKl1)thif`=4yW!`bekuTy|n&(-p3a)A12v9i_v_|D;FCaUMw6B4uO3+;@OUm!R&Z-d_(P>1j2j+o>5_O~`=u^~(4-|PC+(o;oLGUO{#KVbEkuJyLBX2!Rd z6wx0FNr~tev^>Sf!uN0X-Zlb1P4|@nLHCYK71D+T{R;onC^dj;7UDJY zgM-_iA`;l|-6GS2C(8e6CH{NM5m_Ps&)b?uxUEhsp~(QV7gj&>#6aRVq$~g3z%3hz zy@bCMLL}k8C0HOg5Z>iR^n?FP7>E=5TOXkNUn;@B>jv?EI{kaoKiz-+X9)WLbDn=X z=zrcn!3Vle%PHS2M2xRJX_gau2nst_-9#?Y%&UA~1eTOYNN55-9^>ar{X(-9y@iAN z^Hr7I#fdaDQsK2uP7mA~2D|ivVmnGtNl$hR0|UuI_Y$?K9E6Tb4=b45BN{)JOheBR8_FBCHin^uEa~oDG&42;OC4I1QXRFY+9l84Sx2BU@ zIKlR|?9REQQ0fH;3K2`&hBPIcShI+l^MG>D;4FYet$CD0#c>2DRj4%4Nk{@lhQr18 z^ENn3@Fzj9D=XJc7|;u*eGIv`1#Q|TwTb7)?E6q%=#o2aIt5WRrxdkQDsKtYyi@>d zmJVpP2Su#zG(oyIUK#nKzHd5%_$mPCLiI|kX;*PH`>;<6(HPDc@pPZ8HGwg0*sH_V zjHwcC%^(^H>hO?zqfefhtAv^lI|<1tEBtLV3{223vY%PkXlPFh34Y^emdu{ZhH zSzsigEt+L#ME~WIe&l$y6Gb|V;Ru$?a7~%bi-r+CE8{_Clt{^1sdT%*cz?4u@o)3? z|FmtBCruxOobMcLWPnmMcO@o+XnI2FFA*s~01d>3wtO5J=B#(taf*D0BSQ$l;gMNi=Jse2OFr3Wu7b^*|^SA97^U3QI^HVzweLUr~FXY|}slyX8A6ar?QIOnEvYSMh5ST8Q zeAex|rbJ#B`UgkXYu6Tci77Bo)#myBFw0D}b?#Q3QNyk&F8$69R-fj&(d?iSYRdWq zH9G{OG~K@K5bW--Mm^k$jEoqlIPj7G26SL$bryLM+!)C4W<_H=phL)q4<9OWq6ox49BKR|)7vRe`|mCX%v(#Krh zk6&(0T_>QZLPo>T@1*658!F};8%yTaGap*oVto&&``prRS`4bv!Y)y85M#=Gc8$+K z{u`U0Pw)D~-K7Gr$cTP4qqhaMpI1+1kp(p3>n5jOprw~{l;kgY(b(RTjQ-{J;?w@* zWqRzs+r}{*w#XjgIT2lRIho6LiXio9ADq)GU=s|&wSLB&0S*Wg3AfG^mQBYv2(i!O zTDQ8ai?7SLydtieVkY#Q)cFxjKQfF~SKXGS-~{(hZi@-*UW)cpMTb^fEDFX)9;ie` zdxLD8V0y!|zZ(Mo5$&LZJTB z9Nto*y!CmfF!Cj_nc*hgLo~;{^{fH^io&xi0XTc zj5IXj42)t-#8e!Ac8q--F)y7gU6S+)sNf73@=3gNDVqqN3QccomGJ)WCY}AylCA%O zNmW>i`TedFk|QbVXUIk*31$&%odyy;jN8738zLJ4iiP;_?u~`WKSZjzdMRSC)A)y< zJMo&o4^XVR7jowNhg{{{mo1|!wmwzAf!pb4`rLN9=MmCs?_=j@Zf-7r=5zu7994nO k<;o^z^*$8Zvt95OMpj%n=(~v$!v%?+wxJg0wte`20cU*gqW}N^ diff --git a/docs/getting-started/miniconda-installation/img/miniconda-installer-5.png b/docs/getting-started/miniconda-installation/img/miniconda-installer-5.png deleted file mode 100644 index 4be9cf47f4b9e6b4d37925285401543e26079a06..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14980 zcmeIZWl&t-w>H>7fB*r4I|K;9A-GF|1-HiC-KA+fkl+#s9^BpCI>FuDo#4f+ow1EF0xT(o}22_rbAHZ*3S$$Ic1OU{;Vmz84!|&0Yzv#FD09f7sTnPP6 z#pVEjAc?HxC!m+%$ts#L{_GR#`J&=$t7iPyOd!)Y$h)}I*-1>s09Naq*~Zs%C=~(J z)-}Dhy}1Py6|X8Z#90?g36|3uzu*(FzX_sYN_oqhuKJp0a{##o_VUniW9bPS`LL+Z zz8>oW8~w%S6hpV}C*;$^5%32QDea4mtgM29sRp^_WogD*gaH#Aat&L78F=PYj1{Gs#Hoa;>o_54z)9;Zc zXgRUdPVTpR-AQ9OXktfBSxLz#AvftQ&I5^bX&PPXWg#(H^GOJ`4c`Om#psb`i>50o zejPTZXSm@>D3vkl=Zka^<;Zz+ zgy!j2Y?7F4;?k-*0A`+~)lNeJ^pz4-cK3>;3t;haERo7XuFYiHfajtM2zv#?(>DD9 z!7Ksyf_lZ%8xqrUpIJh*RFX0^bqDagLVo@LFb3ir)_fh;v_(xTBBC>Tm$yLSnl+#I zBkU=0dX{_>DT|FazLsJ2AzkIAs*=l6k>JS6@>tI3=q6Be8tWUQ{~tezDas2hCoNA+ z=*BCZ7^CXnu)nVW(d81MSVRU1*4QADBcN=gxgv!Zosf|sAGr|$)tbhwRB{R%{wX(a z@>z6=yOyE*c}6n>aO;`(zYOXHM^Mdh5eQ@A6vip1&dcCldFZwUt_I{wNu?PE>K z^tD!tV@#2s3&%wP;uVYCA~ZEh?LQ6LsrJMt|H%79lP*{Q67QNc+xhx7JynKck1`b0 z=SwCaeF@}coIr9P+!19>U6_04yXvp5eO5qOj-SnF-F|EH>NtyzuD686a5c+Ei+@})NZfmiya~Fo`tRV zyN~TMiC11f5)T_FF#|E(tSKNHoj~TYN5RdU+S2V1U*?IoKPOdyszjqjR<}|7QswtX z6g4@k82&&H6G~?6!a4&4&);_9taN3}{DxMv?_NF$;mC}~#^uV0c9?!sDlA7|%}~63 z0Az;+n13pfR&hdz@5s-6U!q5YIdT^t`6o*?H;W0BIK8>ze~gFT{WSy3PbK#_qtn-_ z#nqdb^46?VT4J!+kjwqfuvJM%w%bpS>EbAfX$Mzw@a!`ZYTNoXSpcl2_Gw5#krVMa zaKAwBg_^s_^~>5g_VE@`xuP;}mSI8ZJW#gS#ao=`6e%$GIT|^Kv_W)EiukBDN>@e8 za8PMcG4D!#tfTpSBz!cqE+&gH%2QIE?y26TaS`l0f7xb4?s~dmBEnYq5ZHHS+W_dn z0I5#}8HS@pQxeCIMt;DBjM*4$>RhM<%5Q(b0(uyPkVOcN+l4&Zi_e%_rUkE$L}|cg zc-WWUdgFgl0$n^P9uuYAA^xoB@QdRkWiB%)l)=d2G9i<>Y+weLLw{?cEFlEw9Mb7r zJbsu#ihjwH+e2Tj3B#jRsv6fzv$u8{MP(G!+tPgPLj`!p|IpxZRIA|E^^_MY3RSck z!W+7`xvQ~ zAd}`f66aQ84Pd-wWbQ3M>eKor5yb?4+bLJyzL-)_*?0a+T@u7+g&k)G`zC_zg7-Q2 zPPb#0^Y-lmD%Ce?&z=B0sBE-?+QppYnt;FGyW>q)=#S%HEoT7c3n>awUGQ#SK!7^i zh-Oie7NJjHkya*kAM=vXW*I9q!5dP+)dOFF+K)z@6#>mgr0c6L`xzin*n(N<=ZzU& zav!DE)6x5DqJB5i+&jHH<}zmXL+{O1+NpS-*b+}I_50yI6&Wyd->Q9i#jKf}0r!gK z-@ze?;9%h#fc4(zfY-$w>$6He@d*j$y{+F(Md;~^9DO(go{s^8O4d6{5;e6$wb&Sq zCn6oOwkRHyUOFoU6uCn0=4iiv=A(Y-Tr!%eM3yu1_sjXj`_&xPx-jU2P#i6Y$Lw=? zFxnv2go0`99d$bgeWF~w) zdWp#a;(T8`0f5zaiwFSsU~^Q!M08z!xdH(KAbU3t2+FMJ5i$e-u0EB-lyLw6t)FU< z0Dn;iu>jd*?}Y$?j_IMW-BKF3@BSlT+VfiD6#&4xVfzOD#}Bw4hxfK)bEAAIP`jg7 zrTufrK1G2fzVmMJPbC&OIt_Cj9aEq~2|pMrscho|Fv3%Oa|FzPM!BSi*KpB9ARy zQB5Aiz!3aR^L3r(?KtJ+M~Cs!s3&$m=;&M**LpGX1WW!}RuV21l^Cn+2m8-kDopk| z{1z~^;7fjHR@IqbP|oRnx?u#qem8Aj-Wt*1EMyhBXJTIQ?GmTjWR0ZCQNKgrU3iro zR808Z-!%EpgHoHOWzow;9qPVQrqK2^T4du245n38Ha9VnU!MP|#jYEwBLQMdkN>fe zlAJ?W-F~&GPFT6b>5de#3}990h<|E$d{NLBJM3+Tc!nQ%p3U8ft#h7bbUO)ydoShL z4Nl!9RfCy8vq^bpt1pvXWb5hBIW4anNw+#feG=t?FX@feNzHGzdlS36uWDq`F1Wpn zAZ#NXZLyLZo<@n(l@)ESk`w^$YHzxS#18sr#}Pbs!;DlTU*j{IPQA1^p}g&14{4y9+g)Z zIXy$DZ-g^0Z_`%jEw}=R+z*@XhmuW~-8C;KB6bSs=_hEv-QBYQxWlN%6)Ub&I+}C; zR<*rs@vi*p^p3_&_h%|)-gC-ahFrdjxV8mpjKf^ulhkSaw?qBGV7<&jcqR?e=Hg9aR192W+nAv6P5fqmwGpJP$Gx{a)oVprt`gS!A<=DWqb+prYExfK@ zsNY?{z(1appF(y1I!j>lagYo3$@=0v^qB`dO(8)j6>fK$bc~nv0-mR}MR8A#PqOIn zm^vBL4d)vKaJMhfJv>iW9^H?7UmRir{WlM_xGKSIM#ti$`C{CHekxXHd?RRB-7aR2 zD**~4?bS!d8g!4eXH{+JVj5fkz+2S@c~A7e;NWScOxAoTm6*@@;%Y$Lbo&=092q5oZq?T7B~U!uHAx;|mE~iCM$)N3 z>eE^rA1G@@LrtgL*5R*Lli$-P%|Aj$i92OX>Yola+2yfHNTwG{xlkiu6s$rtR>Ngu zluT>NLgI;cy{N@awx9<69jCK{6)p`6TNFSxtV+z{D-c@(o~{yW z{dG7S6}{}t{;;E^&ij5HI(BoqD)=%7vQ%9Dc*?hYCZKj-U|-#`aYEJMadKUy+{}Db zbmMzlcLw3O+f(Ecy%&^cqccjsJw|oXH>;w~^1r-@T}$%>%_;95$81xrUhM&w5K7xG zMj2<8XD|m3vcy=DmnJt=UdDGGbw-f@GltEBnP7(P-Hw2O!w4cFNzmhL*t*h*kOXUS z^etOBtxuFHmoWdTM6e4F-pYQzSPlnIbikz&*w02bOX##lqb(6KI!tzJ0aM z?@ZCCLpsl(p_~`~c%@udWfw&${)+ly>`>Q-Gv%5gifoEs4=~KRUd%gDa&P~4R&>l0 zSuo0Bv9^bB_)-yi)1Nn3_VRI0Rt^>_Q>D#us>6hRAR0yb_&kkj?R|}`&ZjVV-+R9P z_!y7+ECQasZAJsOSP!3Am5!<8EE!0tL#IJjlV*u5LKMEH%hC-E<4XJi&|DMwQ;Li8 zpIX8%`@>n0;kIp?6U=(Cj!6#r(RVKeHZD?=WvDN#b^w4a^NRV)@vSF%8ym-}pfpJL z{LhMVY=FYo;-uL=DTC1B_#Z~TDv3c0pd~3Y7#zbelJohu7|x<|j%LI#kgBi4)}m`` zrzkeKDyt~An)6-wMBZqdIgl2Koo$s#G<_JQT6Ie=e}7dT)OQBVM({ZuWcLO&8xI!C zEb*J|s6pE}lqUu`$3k!cD-`4?m zTd~|vCl;}*9OkO<^^A?amUNv|kSr=#GG2d-Cv>(V9BMg!G$Avm=b5$AaN~Zu66p^c zSSYfFu^T?IdESvp7_ zsox)gvPB_pOe*C^+p%@&l&fct>f}vo{PO&Mw9y#z4sD;mZg<=h9*>v{LF68l&+2e4 zzN;~=%NgfIIt^hza@YBuka&tIaaWe!>ss(^)qo}P4I=jhssg{}TVy{H@E=>|S`&hP zkUE*SKn^#66cEm+)pNB*ce|DJv?k!ZmAVU+S&wy?PVJjnr*h|-Enm13Y8jYlT9Jz0|*d<`vrqWjceUL_s-yd~Y5%HTH|}weX*gJE%?sRWIAFE9gabXRU0!>yKY!E}(+i znvITsFA_of-Lp8UzR@W7YY8qIE7(8-dM<2qbgrMz)owGQ6ctxnfD~?q_fr{WcXqBp z6_jy)7}Q+d3-8X*=3VWo>=~4kNgsPfMXez_w&oH{0am|sjdR_%*bh|QX2$VbsFz0Y z*X_rB&2wse<4BH5bC&&A{&;q4{hm&&wQi|7$9dpA3eY^7kdRnU9DPG4-#nrENW=Rcg|#1 zD2e!d<7(D3Y&apmo^VtUlc1!mPHQ5eD?<}<7(n~XB&yqReKdMiAB?gs(S}{Lc$EPu zkil|vh=+%;r^}OLf19wKR$$ktwT8Lsadh!dX`=Ikq_`(4v7QIpnKhXc{2j_pp?_ma z-#>byLOAyBzw%9PWKf>({1I(?KwBCQKa!ykbBnU{!{V*wCluc97y+XR+(cfaE%VrA zc%h6UP*1wql7dS1PiliGaS_XNd+4zUVoAV9^O%Y}oVQv7iDu`Gz7N2y=}bLQP2tq@ zHx)r3Q+u5hE(6c_)*(aT4D>soFM!vSZB_gYqexL&~w zCa3%47T%$n)#3jFaH3(_M72$r5F81=)&< zJiGW`ATR;JMuP$nv#g>jU)iKxA6153#^e%lk%_|@G%0Yb=Odj3)MMD_jgg$XH>LCT zFLlH5m$OWDff@ffvY+&okOY*OliZ~jZW{!ie_&CW8|ARbUGLg-%geySQB|YM?u`Gu zdMNO`2^vAPEtoEY>}~vmXKHhb{U*cn1P%-LlF1yw4=CQ1;xc^naarc&i=*o?va!nb zWx;}%e}=}>jo`ck2YKMC*1p3 z4kMmVOkz~NHG4K#ENlLl{kzn3m z5?dtyyr-;1JPx@|cKJy)$T8CYN)#JmtS)>k{DtD=(n)p}U34|1S)yCuMATOkt%mG< z4@Bdo1KsKRJb&r9^H*q%c2>V%nlvvvS*VsDrc?dxs z4msR>ZUr~-l3z{+hhI7^yO_t7Zs(2IULK+^+)7;kpf*haMeFgkyw;pQ$Ko;fJtd-} zM&4}~f-F|$rc3;+RIuv>J)k=T<5kbRMK4EpFL|F_UKYMWs4jcJ6c2F9*|7B~Iic~! zNj@*zY1`gS%@=SOiYC@_AH)dM{`D}Uyp{^SEF^)pjTDdfcHcoo7|V9bPK=gCX~<5Z z{JFtA1m$OaammLAEn~-u>m9opXRLR(`&SH8VxDhLSRI(pfT!|4^J>BLePS|gtuP_q z>eyH#T5QjYIiZ%w*R_>(4{!R)y`}$TWR5Jd@68ayna6RJH#i)nmpb2<8PH^FFle845W2-Oyi3Z($^I8%nnLzE$}NQuQ_-UvuMToHs=0dxe9g92G+GtQYi;5QH|b zF4~yRV!0CIS$;ce2aq&{3`=?$WLAvyyO(3Y(-z zGHiW3#3*FDH9j408u78b!E?MYN!QJptbD3_fcsaIYUas=C3qAE9`>Hw;z)bnI9*@_5h)dluq{{Nep$TlHT;Xp@Sqv=DRIl`x?(s zbuI^Jrg}ZO>92hAz%vT)x{82Dc&+tToQeT_d*Snij)`Yh^zzbA7X{%}MOaE?(?_nh z&Td=n0ZQI(7q7>Ai$58#rSn)f`Zh&<_w)fnr`=z>^5zUniG^j!`v{r+#;&CDny!!q zO_`0XSKY6RyHr4mw`S`7`BsFsOu!cFG}uWnl~Fzh|FPqnsA+PMi;ZZfsr`$EIDeAA zM)za-v=dAp&{53}rZQF#h`2a+Ebt+sCy#x8pM=n;H@@C(44^+~#WmR%6%CV??$GIE+#mHy-B_VSMpP|tiI))cdYGi)w z#x~CLyzp@dod;!mv150O1f9Px5EZX7u+8MeH!PqGzQLUHEy=WV>eM35>^vY)OV9}yUYSB$sJRBE3!Bv*rG+3+4lP!L%5Ff*((o6&5% znM#n%{-~871Ww;8xfF8NBQrHbz1VKR)@07CX&h`%iV*l&+|alKp*X6?wG*l8Bw@WM zsdMUHlBkPb$xPYyG}O}=6-GUqtqEv)POL?pja?K^awwW9ThA_gwSZ~2UtwYRqFJF- zoSpQG`4_X-sj1_3z!=#|?EYiDXMj56L(e{HB#a<|va@*kM|{K<-OZG&~9W{ zT%XgA^_It$zDSSpHuWN6GF`iJ`G#kq;)HF;qW?HN&RI$Mc=I*(G$|480F34X_HNhk z;#;v2omAN?8J3I^nof?e;Ssl808-mk)u7XNF9o|N`u@CahCQk5LNnXbc&Dz0HjJ3KQq#oEB6nX z=UGXv!yc`zUnd+4v-t@7t#J7XUTgi6KQumc%~)NBd#x<;WzTA_^^!XJu?QzNd$L)! zM#X(NU?f>SlDh-LhqHd=;fqWF0Hjq2b_T%{#iJzg6#tbb#r$s?&u{wPkQF{FiNSN7 z?oJ(-2%R`@;Hl2THp*lcom?gWAp3h8mjg~^-Tz3a{yT5_-#1#4|0mw|-vp{)S-cSu zu$lV#Fr$EE{r6eIZm9xEybh0SC7}KTjy$X$r)uPOC;uF} zvC>h>OOE8U-h2W33g=${hs;4*W+?q-UYRMGqH#_ld0uYL{>xhq%Y?BTcYMOT_1u&y zktWwaZEU~S^ED&sVXrB_IyQ6G*<(uRdpS#&*ZYc-bkV8ZFSkfoOtqrM!Q~V<`MfJ&N0|eg>E8Oo9+{?`6s;K@w49W2 zn_#U_Hhy)CD#lpt#Qa;+7dG8jrR*Icj}|dAvvuOyLQN(6J3x0{f!OgSF6g+2)`sPb!Mz^T_8i$hYoatE}=3gd?Z379}wklJ;5qmVQ7O*iQJQMEa1$~!k~ju_jd@mFMdlT#z-3px2|IuCfu7q_!{cza z?Q0WzS~n4@7d(xr#eNYw@ zW@BKKL3*f*h{@%|l^Jo|Mo*Tj+(wFx4rdHc724>h<`-#)E<;2~IgjE4bt&-y+{~=z zBUk{yrp>7tJkwE(^smGPIlRQcsLnDvtt>QF>{&bUodVYQj6*X8RvM}4VWC`Tw+W#+ zW}>+n(`C87t(`IJE+S}m$NNxb#8rf#Wuz>!FLz_ln@@4n;~=2!>k@}5u7%Fqwyu@- zOj{XbfulmrOsX|rEzN1mUdIbyxzuX7RPDQ8;V79(h^z!+mZ^;ntOUpnmE}ZbDiuo- zftHRl#j2%1F;L+uUd_>Q!m)aUlNOf>8GZ)G7%$LzJ1W9eFawL8h+K72*rPt&7H`*C zO=m=Ul7@{xZ;8Lzp+0yx_v_E3p;;SNTM6U{UR}BI;hu!OjC$64Beq<`iY_{h?uXCF zE%KRGZZwMmbYRki#PmnNZ!pvFR%n>qJtR$jcJ}nJ)HbaEan{*S!^4B8X(NrvFsD_H zrNmWB^{cIQqMYq^WiI0^P*Y1&<1$wcmL~z6oclF?HD0S|63CcRqQV?T^yGofk7SSp@e+yxH{q8;$0Fs z2Z1B*W^pn671xpx7u~q+lp_r!oaywlcHr1l!cwG;5?Cpqb+hCrC3bN`m{&_K)7#X& zM#Qt$FSeOOJ-l`df>O?rR7$onjyOZ)6NxmfQVMQ*wk*k0_q8nk&DpM5(}uHQYv%j4 zbmPEC8RWD)rDE|1@oRl**w@3dSz2_yB%d#l&9CA@%wxm8e0ccW9<=1n-zvGGts`yo z1xcCIc*?6Tw=}oCw7tDF9wo&hao37zJV`T?v4me;UsV(6Qdrzx-kf{o4n8=jGu1WJ z?U}|+W6jNi*2YJu*~&Ut>#C`0>bf*W`S9y$_8O>;*P|W&D=T3gX=*#`w2|q2Uv!^^? z$5tBkGkqxb*KrMGMT;z7(pkbg?c4XE9WMZH@mfB1O_WsCp1b#j?%iloFT)8tFQeyM zqzyl4bfSZh4MX)J!mU54cjB_jxgTwc^m}!*ULGmh&#DtPS#nioTfK7crmF#xQ=IUP z4`c8EWkdTSXIR*`1wIswunZOeDsbXE!gV&c!$lHhp#g5WT^YY7XV5`7zO^G_rZlEM z#SJ`j0 z1Pu2KgaRaYxe+auBZ`K7O)II^eU~F6ngXnj~{EseHCis zW2GpXh20J1@D`)?TT;C+#jnvOmZ%qh;m9$$bgQ2^?;jW7%A^kQJJNP3v*5~0opWU3 z5v5t&yLB`tjH@!V;xtofXi|Js<;5tqR#Qa0v|+WhM!uBNs;Nzhpjs;~CRDG%z%`P= zWrlL9cC+qex~c21zG(5RjOd$h3O)#nmj#(S8JZKPG8T4a45yEAR#=yIWehP5GrlcZ zOXrc$f3pdenoVg{J!z3>2@~Qw>h&Dq@W@E@)7>eQk{uaj9rShq>a#maeZ`Jl9`GyV zBq&b1(JZI8vXJK}5G_CY=u0bjLr_jBF8>8qNWUe!<_ZWWOB>R`0%;H;b4aNBG)IyX zgUHbPvc$cy7lo&fz56r&{jTR%aXIF1q*9}=Z zPXm#g!<;A^FPUr&Dshk#(_DpCP+!70@#LGkVzqm-{!#-@2an|n8gGs4CF3!@ih9q} zjgYcEw}{Dwz4l?;yC^G4_4_a8B3co)9K#l5FQkE*h=Xh8Uh!Yd6JK*aUw}VpppYtp z>xVDf!;bjT8Q?DSIA{Z3W3g#w-n{Us;;F`F@Jf-{#qMKg5Hb@=4DKp;#4u+Pyilt)Y;BMtF4p7@+9%ncy?Gk-ieknB~9sW;YquCcyGj6a14{hBQLQzeG%3K zS9WU)S&RpBkC#sj!?n?3z9>92G!G;*A&M|-8DLv+qeBMAWDGBd z((^MO0U=HJNDxD#sPD=L7bf7KQYOg-L{J{_djK=$$VgiK91hrL$JTWl=(lIQ9sFGHtvFjjnX9I=Xwr=>%J;fsoZQO!aCy z2Aa_q&h4s&$si)BHZbrbu>zf{Nw%O!V7og4n0jy}#GphvdRdYe#NbAQC)f?7n_6V- zM2_N0+v`af-a0b9wd*Zrzw0#t{@Df@erLAH9L}Yh{JBJ(*@W{c8y&c_qH(8GqHiE| zP19pTtb`#@QYO`@o*L0!d7H-O;SomaV)m?R=5`vBt{IJ6A}J6#^1_V zcDLQPpJ!u|elJ8|y|b1S5?T*@uG{#sHKJl-LZFL1CM$@y=dwH=$og4hQ2h_aLI3E! z@*}(5Ul%n?_5eO&D{dLCB2Mh~JDNAEQ{R3Xd>7gmvS=nQ67t$%({-gygysfJ{#sy5 z?2!fnp%nuNE}^CPgtGS1Tt!Gl0`uWHf=2dn-EgR&T_lyufxQ4udfBGjQ89qY>TTGL z!-`qht0Hwil!|a!hA-%ee}T3S`pB$d0QvR&8tV_=g!=FV$SW7LZP|MWAd9T#xUvSp zKWs1am>U=yeJW|Q_UX+6)wlnud5R~buzJ0OZk#y8t zjlflwT6ALu+jbmLzdaI;L=>Z(ewPv7(cao#UwW)Cs}pg}rLoKH&tAfkSF4XPNQpDb zw`fC3KtMo2p{U-)@#pRx^fP|(R}w5kM9m;s$@qE3Eh90PDalXuKZXS$4B@@&1;)UG z4c<~U*d{&(W0%cF8TzBd(NL&CW&xRx7*x|Sc(_(v%4gAv>6!m^Y~`q7Pk~Dd-DyVB zAVoY`ecFYZ@>f{U{!Z4+M&d40F2mxmiqqESw0bt97~(?-Zt*)Z2}$mLcp*>VUSNC% zstr8Q#QPWG{lAVZt$RO-;k@Ll&976a7R;UOu=|wZ0>o+4VwIT?0Dp^e;-5B7C|WBN z95d8C;4yL97YT#toWO^xX=MvVyXmt*wKTZ;0Nmjy?WEJTW_}CRCZ(?c6OyD%i+T>f z8*kGKjuCk9(5?@vE00X!$Xu~fw*NRG^C@9K+I#f#E6@|A@kdM4 zzz_4^%wSDKMlJqJZK&UQ!YiLjTL-TpyX!BV1(387o~T8H>_MIr4_FTZ(E}A zysVmex4ll0;PGZdpf-|iWwK&%{u0w1la^@nYLT=EAOHEW0k-4%^G2fSTAd180eCrO z6*QY>{4Xic`j7EGtX_4I%PIJk)5 zKEt-x&GPzL6Q{L$#)*qEFq>*cplg+1>axnngw-kJ@MJLK@S;cQXS_3j`WFo;ddwz@ zjcAH16jjSxL^>=KFsqZI%=~YknP3J(8xa^U=#C0tRTGEyXFoox%NF{{7y(R69L`7krtM(nkK)G>{z<%G( zc9yQ!hs-mUV>3 zkt>9BdwEcX>LFMe^WP+MH}i}DGBbg*9U!@;TXyV+h=X4hkDAtdaFoD~!p~l(^=DT^ zz0qVHmAzpab56KOPKHvmw}uuba~po|Z=`@eZAjy6du2xnX9@SB+jqbJ&rvB|%Iw}h zSl{H$O1x`GU~rDG|a!U^Jlkqs2b0+Fp?c!n;(pZcr)7fpX*C zwS$rK z(f`d_@@PE5!{no!EL;a5$ z!vCdY|E1dS|L^(#m{OyV{&y9i`!9RB`hUw_+^5NZiqO(ZB*GmT%vQ;BXt6JLiOrz3 zSWR)~6o&^JFmd=@$P!!3mTd9rVA{s}a+Hs6S>zSK+B`<+w0V0oluFah- z^F%i_2R2z#POWKCon~Cu6F~4;*6(nJ@x>7-*HZLEwps)MFrl}!3MmJVDAg$CFk;k( zm;!4<3p+vzH8CqJvKlnw{&{LK@U}{Wb}{o76!}R6P>%~Ij1z0uC~xqyxr^yFF%>Py zOtTtD-)52ekPSkXowYM=-Q{~+;Z*YXR?=-TwZeY@%dJ*nK8re3ts_d6X_&MudUnJr z(b?9wwL$R8}hx@d!#4jmiv*F~MHqTr{ ze23M8TA96*aaA&WUej_od@#?VW6?oczTLHEZA2FQUmcmCZC9ep3bFR zA0Pn4$$02}>OR-7g+2~g00ND>yywj>so9I(%^?6j+sVRB3b6TqYva+KvQj}fbn1_x zD9z8<><*m5b{W$fkPP`>ErLk_|2oqIg12b~u}W za9F;8|rXS3U|CN$+|y7lv|VAs2egor#?O{PVpH z1d#K6e8+7;X^M3LT($z*>`J-=x69`3Tww} zOP;1U2_xF4Yjl?}ya4+xQ`W9mWT1;)3OIGxRFU#5y6~X9^G!HRmGPOJc9-MU*zI-W z`JiO5kbRNaZrZk8tqRmvbN$9CCaTm(7@>dGp@o~}8s1Tf*4w*WNt=jIL=p-bcnTQT z00Pw{6DhVs>G4kne5>9$dTspN$TNHN5~S{kX^e`TtD!*h^`6~V%1_h2R7yDUJDm&M zuW+GWMCc*{g^w^S+eLr%IL4QUj3>Ot59B&?O|tf4(TZ~PS(WU$Ok`hHDB zNhp;dzY7^9N#vu~f<9$O(3VfdM%cIr*;vM3_6e|^!WYlLrA>Eb636o&EMAmE<@e9MW zBC^PEe$gxxZp1zcH^i47ja{DmjjXW;t9)#yiYIJh9(MPE*h&#dKbFJU@V#I+gqiX5YIaXBhjL6mem@w&~fHs?zz!3|JmEk>$YZl zo2aAXE&m28mrwSO=c0aoXOa(6ZXRpxXLAdi$@+i&)<~ZOg*uOLbcuZD%`m>7d6$oZ zMA-Ufi37t1ukr}%U)jcXlvqqm!O?mJM&B_je&2BeSzW;Otd=c&->Kg?UWY)K5CMUN z&O9i(MBb&9a!WOpeFHjA-vW4~6YKGwXNms_gf!3Bh~bAn;VS(10}uZVlOg1;m0DxF=A$BfI3VpEXT8D$t`An_soqJ>3!DG| z;G}`RjwJxVw#j;49XrJ0lo~oeVHIqFmU?#qW!)DSS(U?XcTDa80F?<`dk>GW>c{=` z?E?XTQ!NJ%Tbu7E5CCvh+d$`zb*S^oI6cdHC}-6lrq(pyw#PQFIxi|8c$Q}~(Y^Jj zqsi0w)=y`8_#1mU9|eiaOMnr$*!axjqVaVCDf}jHTd%#4eiy)V_$%9yI{lX&`=)Fa(1VZP&t{wt> zl{28o*Nlf``Pu{|Ip4;z-;PPPmNg3@6m_$^G7N!V{e~+q#YmeCD&qWG_iO7QPh@nE&eWgd1CK1-R; z9QW}KqH~?CwZ2`VVU802SiOnf&z(+wARbJ}GICqZn6Pp)HQ1alf%|t~6<++)V7SyT zDJM=1O#bkM+v=!#j@7eHIUoPi_uV70o z!!E>l*S$k-x@xnnDsO2>Y}X`MMU=#MoViN@3d2AiNQLRKZAv^w4(#GJ;w6|CMVy!CZU8 zY+SU!TPYL9;SupPyW&`O7XxIQjkbxN({Fd_RFiicCDKz~K977dNas9KXu6LX`7Lm+ z&!i%E8XxQ`1D$#uQZMPoveL!c@mSLAUc~0l+s#juS;l@w+iX!_c#P}}r!q?So=6La^a(IzL!mnM1g|bTX{G8TBP?UF7`d2lMec)g+?Ra7R zf0yNQNVEp|Oi~H8G#BgBx&f3m+8@lY%3Nfjrht}Jz1^7$C6IY7%Tr02;v2|%IGJzy za(C3-BCgDi51&X$VFpO=q?zB?a?tm84^ztu3v48{#-%O7{43onKRvkRMf+NiJCSjm zlP~c%7iO|Dsyo#Br$qba(KpHp2cJ`0H52+FHTbI?+UrYaoB2BXNt{GOBD8*H2Pjp< z@E-cgK7JJH`=~3jnooneC^gR@k|%s>GGu8sg$o3kp&Kdh{7=u{tsD^3HSIhR)Y#R0XyH2eI6m_&;S$rqvR;=OV zpG5WW7!}GsagQr}U8FDS2@g^`-``bd!5szaLD8C9FrtLuQS5rJU{eGIi{oO_z~yG} zmF5eQO)lGiiCT<|1YkI0W86o!e1J2+|8(xk$0obtzD1giW5lPa$W+Q!?*i}O*59@6 z9PjF-4AH&3k>q`c+cL=FF153AOdByrW&py1i z`^w!7b|w|mWl;a_ADBxglTfOf&3>{5As@>#vHqb0PgoxV*W3aN?+xgo8doQ|p-;L~ zCr>KkbWYqJ8uTgquFkT$S3&{Ju8BKk-_0(Z4XE!woZkJqyg-8xHQ}M^zw~o&g=^Ji z`}w)zpqzjriQz1iRS527BR<$+<-6Ju+^MghKI3G5(1jlVRI?OS@6GoVYe>w2u(aO1 z!&%`7;A@&DLI@x?^`Dl$79^|%YxHFU+|x`a**f}1{X3Z~Zn7Z_Xl`$Vh5#yFgN_2c z^#2Rth;C#4PzJabbTYZ{fagi^4e|&6!zYjKmYPZ9mWrZeV*E^UR;=3MgXgUtj~0GY znHS#Y@7H5HaS}0(RYR8aEbbdqL%((#UF$yriW2QouT~B5R77K#35WRQ^+V`OCyF$S z-W=CXi_Wnc_ra*%ah3zIn$$!apdPmt;fjw(5udz$JADFTbJUcxQhwS)&VG(G!k-SY zSmG_TDdXu%*$)ZAf_R)~e<<`#szS@olmE86GIYXoL)SxCR@NPvt49f9kzQQD40@;vX@J2F4IqfMEmq{&}HO za1Yu{vhdEZkxDmF9^ccNXtY_bbX57a*n6>zala>NQGP)KpLIT3dz$e)e7dNd!r_xm zdIB|F8Txv)#75O(ee&m2cmMI*QWxCOT2(6s(W^Z@s%A_0M!)F6yz!e3OJ`^KG-#2D ztCrZCt1&&Re+}eM^xyuR^s+x|;;1A6C7!f25&S9c(YfK=^TSE?W)3RKaHfviYpxPw z{~VD(1bOSeepVCF5}T=I`w5k9P4_WY7!!Cst!JTjg*ndQeuUj5giz5`3t@arK3XFL zG2+>qs0JG`r<`OR*JkM2U*2rAq%&!Qi&o(`Uf;Xmbmd3(joZ_FN5;KgXg2Nr4pp*9 zBcTR<#C%Rw5aR`cOM7seA_L5-xrL3(501VZd9&uEf+I&5$8ASh6EkzeRshu z1Q!&&NXIiR6`UZ>6AfFeR~qQ51x8*bD! zB;dp1k||Z?R5_jI#XL`L-pYpAN>#5cjlfo3bOuafsee7SP5|6<>yw>=a@4SM&4$He zn@b7sDxc3G)V5bqwyiiAEiiAB9q@dvSe5_|UfFr$Ce!OU0eRGur!MSR4UZCDe#2Ub zizib@KSVMH3|wv76)75~?^K$sdjAOkCHofCLmG&h^|Lu(Zd!<8cmYv`(=>YtA*^?P zC9`I7ZDhJAo;LATV}ciweq$Wt+P3}-D^=a#HBX&(fL;wo*U(Fm4%F;Fs4g(X%m+v< zbbKDvVWxo|SyU_v{^ZVD_Bci&f*r7At%u&uT}(}|)nbaBoGqGw8Pk{hY2B@-mo3Y} zCYd{t*oddpI+qN(2T_0j>$EyrU*;ztDdN7`?EG<}DfBU}x_?zLNztumta1aw*S)Kb z5tU>Wf6dfKvGZ8e1o9lDKN(x(!9nG}|6HHHJXs;ad5v6ScmgI<-}JU7n~V(F1f z&gvDG5}hg>#MJkd>-he#*}%L6-|eP~X@SK?FUmQhX*l^l$iUV~ zCI!Pw>@CEexGWgN_qiHkAHNKfiN31d!4gg|$wAYX zevz=UTN(a){HBq%NoU~b`0AJ8oBr!VYP6cv8jA4Pj?_vzFu1m^(r-Sne{-{AWi3xl zxHn_tSu02ltFEnwQ$SH@12S(yvtBpZCTSqUR@1q9(pplba?=2BH2W#uh-EH5;$ za8Q{bYnX(Uz9m$t3=R=w ztM)+!)?8Sx$9*u zo1IU9523OcwvRDxn}{Q*j9g6VcmmC%t|S0R)3fUDPH3H`d6m4Eij&J6l9I(PJzlR0 z6iV$P*-3!Qb{+>f2B=v;vl1+j@gSGlO;v-QCZDiS^0%T(V>>1NU=l^|kEB=9k^S4> zS>AIx49VO51Y0rvD%tiF^ku>^^O>21mILC0-6C|ol5OD0r58$%ZX#`vy_{{Dem6t(^F z@|lP*zsFfoA&(XbU3;-Xr`Q4~pHlCS6)DCZJU$;V(ih8u-Z}gfwxhk&R{9H)SYw|g z`G}ULIHzvao&vi3*w#r!SO9O44Ga{8{P7nPcEgogaLQcs?^^d?_**fM15<{d+JsSx zUxacFBkv30%6xU~!3)a8M(>=IS051`ESWorj!(@z2=q%8zP7VcU#xJ4`uD(uuuM)} z2*dVA7HF$SP+!~-DB5t$*K!bYbrSOO%jGwnB4=mAweQvZ@kPnbJ5x!zfi+#>(>at) zu%^@<=3tOXpmO$ZpwrZXSu2u8tz7$ zk=DD3)9oH*e05CNYDX@sj$h^38rVS1e0Sb_0jWrK*{k2u4_jV%>QsPpd?6+vzL=;3 z{S42@2l}LbxuVn#HC>##pk%qe+$Pw6_n6HM=UWZGxq)?t8dl{U`&~{ZJ$93QG?+~$ z{?4p2pWECVUlvZ)5^YLOHs8s9#XE)idI=tc3HYMk%RGv75W>NxtkVl(XCQ6Z*-q*W zXAEC*Plib<38mzQyox0GM>3M9-8=(Kb49_{=< zcUUXyv32UzS2pexb{6Zj9t(<5N+H?9KiBG?-cGqBSXOsSQKczFF_|u^)8(fh@nv{A z!Jy`1+8!_Lg;4N>TVB&+GAqhZehJdcXn5HtOf;Q1eyL-B8NPUwQ#54t!9LR77q~Q9 zd=L|C?*hYH!doV*2ZqNi_5_pBrHsJ&mzFd_iB^(dM9p>q^=QwtJSfYjuIC+2oWZbs zwt*YXE<&#(etML#*6Q0tv&=Hy8Q=A2Xb9Pj{F%$s0IQtqKBCU@ErXqq^bYOb-R|j8 zvJ<4nvDC32j-^`BI0Tp#A`J|6+x@?bGe=&&*Zfn+bTV#=KCj8=m@>0@`}N)0f|q3v zGQ`Qf=C(QHJe?uUVouw*Q^#XO*+dlYCTBn_SgO1(H+C?}mls=Qh%hVb# zL9uS~)buX+v5c}P_>0GOwScw$i~4uJ8_^w4iIvJNxR}IAq=WR*V(UI{#DIhz8eV@u zEX`F;4m7ahZnw!t8a~}+AoOe%GMyiU7vEuIwtOV~cCYS;=}}1*3*b7hDWO2bbI$jF zbiez{d-9aNCO1En6}$$&arPqa{$v*K8)e4#DD&Di1H z&eHL(d!aR{9*{(mHh7UEt!8}{C!;FU7qS1Mld>}LKqh>trO7UEzGJ_$rQFJpT&`Mc zcylf&cfUqau}se%g%p!rPBwo@iN`F!Hbe`X(9-|o_GBS z;6yGiSwcmEzy^@cFD;E@9mcK1O|$jU?9U}x$8-?_TXRa5FE-v{ zv#Oah&~I_yo%S^#@wH8~~(&Vlt2bq1UH(5?T?!WiwvB<5Ri)kJ*~*zr&6wH>gbAL!Ixx zX?xrx=`du3XWZ#HsC}DPkK$?@SoI?lAm^#1NQmMZxNNlbX=StCT=J5D+1frqDqp5= zv;0FLQcb*ceR`i0AeX76N)Y4=xCoGw6IBP;4Jfeo&;2YbP4ndnOB|U`#p#=X=WJ^a z)m%+XsZ8n&yvY38IYag+&_U_-?*%Fvr|CbXgUGr2(foB&h1)-EEGBHTOC_0fjx$PO z?|&cg|5{_sIWg08j052Qo_m1J>nWNY@ZgT(YAb+MI5-F%$lmz9T;x9>HFoVe1^8zC z*XIO)zh#`Cl}Ord1+XyU{4b0+1`pYEnNi!4*78mP_#dc@`L%oyr4L&qfR4&Jiksyc zqq#W|Ld||j))IuHtlXAsZ6fI<3)^yz`qb}tS#Xh&P9wz>W<$s+y4b!G?Dl@HeA)-> zmK+iy_pwHLzIFx)dg>(U5euv>PePNSt+k>(Q0Q3feS;8PR>zFjK!RBJRfG4Y0`uT? zn6cV){OQ^Yrig+y@`1!XG!;!u%koCw&*0-teFqWpBNSEq?ulh~ICAov|-jKMm zdBx-DzzO~QF`pCJNNX>POK?+ba=j@vBZ-3&ihMQdv<*;qUz5l6&fMb zl$a^e*y*ov)5=?-S4!@X1MY`!eYzD8_+~)_2TrtBP*>^VMnQJgNU7^1o=)Cx*p zIALLb!pa4l^tr0w>R@ZmvV@_{D}ZVH6&NpAe^w-;!ZFBF%LUS(u(;IM2)lf+yzSh; zbvZJ@DX|dI8{48dSY>}DyNVQFB9K1QT{k`BaN8$|6lIRzNZ0B*44~Ce|=RI;~fl zO(qeluzh?Ojmc4fT>VfIX+L2kvSd3*4SucsG~mH~B2MO`q_CJ$bv`hXdW={$F)g_7 zpyO^#zo%4`V%*-vrzRTFP_7GTehm|Y9P6shpQ??8Y$2&{YX!vJtLCI zl^cacgQ$GUn#KIve(l|XtHH(YPMS;Z7W~pq1+9^h#_Z3N@L9yerYakjm#RP*Uv|0sMC&LQ@xQ(e!)v_g~jrzi>2DsLUrci->H!Vo#0dEXCX1 z#B&40DM=&|z8530>e^1%@01liu#yrXpD=_N2HNXI4Od&e3RhToRd^rJoQqAypcb%M zjvUV~+_PiZlwBQGoTPlOV+blZl-Qa=4GvF$FJ3nBE$Gexw4 zTUSay+#{now6Q!U`E$fEHcTeYggeAO($udE9GCuO~lG7u^N@%nnA*- z3?)Tq{A$^gUIc~=q~}Y{#|s3qe4M?a*A}V_M-f~C(z6#CM%Q*JHl(8nA%1HU6RPUK zbdlE{X=Pq9tQRr<<`J_l=#q+zXb=y=DZH&~jS_hQ4N8~Qzc?RQs3JLH5aMdCEJ;W{ z+`h6f^DEOcH6666V2*mpM6MAglQnv;QH9O*z4B;Z=c z->M0d4(yc$9xS?Cz7Dkg@ekZ1h3>uGmAF;+CB3^h{L%Amm!C6S zEAs{kbj$hpEf;Tzi0Dp6dNJ3*7FB@2#m`?IfBab&Oj>nknPjDp8ft`U>FIqMp3R3|&#tMcVMc_ANU2L8+I z2|p796v3bSmAjk7l0Ul{^_7NIGUmOnIBQey=?qSv@(bQ3k}87k+UE~Sq?6)S2|0;l zDD`I;-K)X_?2aMn;$X7+?U%3DG#g+}RpkkgBh@>)vElvY9|WTrzJA1gDaQO;ZjW;Z zxG4bHMs2r>YC$CSHb;QJcm@j1wtH6GA5b|x75p#v>^q|A=A@=EtoqD1a;=Tba^O(J z>&_&UKk@AqqY#Tdg}J7;{>E>@_nxG_oU#dcqx24R^s}cYx+c*PjmNn8KGd#r^L=t4 zw-1^t`bt+*51Np8OTV^-G8 zO3ut2+50`uyA%FRMHUO49R1CkH(2s=QtEHsAY8+bU+><+uT&`*o5Md4T-9YI-c(Oe z9>GtLEX9?@-@K`d!FVx2hM%K3$?3Vid4t{i-+?gbSZem>O(;}eN?g;^_$&)8mr6Pf zqMCDCZGtA(6MVK2@HN7Ym6z1b4aFhf)QzheS6ta}s*jA*fiD`{0cTKtgHIrwj@;6a zK4KtP3Rf-GkQkX7KZu@0O6-oM?L_bS6}7XFKpdI)?+Od~ z=MFS=i}}ihv2^qwq#-62Jb5E3@z@2_g^`hQ@)U0LCxX4~V`B`u%O)j~GlR@K1$)z? zF>B8S9sW-pgXdy=H(C8zCZrZ21i7cR3nnErU#MQjds}=@Vm7-j^D@9q5Wx!nyM?C3 zP7eryhfKtCwfkq>g)?;@;@*rDvVr>XUKd3>Bz(U{ve@j}chdPt-8W1x!)1Vi3nK-x zfA0t%5#ADr*XbRgWRqsoh))u^0S~VY?lJtmL()dq@WTbH6?)DF1_$S(5s{h`X4tu`5Gg19c=x+N!y_vZx~yZyV{keFihQcvASw7gmf49 zje~MAw2*@q;e*cSOj*BSqzTy#u(ifiFK;_?@0bJVd3Cd#g$6Hl<&U?Wat14<{p{-1Cln?5 zX7sH4_QYHSK4+-h+}*Q$ujKt7dTH!OsVJ7D-(wHQ(mOEK50Ay&EuKOT3!!&Q5 zLtj~+2Q?@M+;hB&+CNwumX=ccolgBnvmW$Skx1}WmOk1lbHeN(#$QnEbXf<#o6a)X$nL&*9&DLs#hv#QiWpuw`Vf2xlR)OTOaGSg}3a;X?lbx2{F zilPZxo<@A=fQj8ql8)55hsN);|9m7}sr4Y5rvyq^3Tb~bEB1f3*~3_pKySA-f`t^# zIM({lW)n5XKhTxsw6Qe#Rq&xcYPSscT*y)^`p2X6hIGYA-iD%j8O*q+ZY@;0Cl@!l$E?-I|E%K}Y9}}%CkXZ^ zW?f!`M14%H{ ztNmf?=7xPU+ry52`3XZhtFKWhpgtyPFxziQo_%b1FFyaP!h`0x&5GRS)nOHGF9C5Z zKaKR}$b8wE&MAI&>bnfbkpPZrIW$2Kc+p+B6?wl~GU*#B7GvBAiGheLB3j3!|IVN_ zv!F0%)Dm9o8!dDMFq(2XWq1eZU!mh`vofOg?Z|W_rFjYJ3_BKP!MDvi+&TGcoK-Z_ z4)eJ{3ui{bMhfjGMp+?9_%K6_|M$boVTO7c;=qU9nKnV{&Fd;rU&|vr#ccoG>kI7f z;EK_=xL6*{JiokuP{&wB~rS$*WD zkzlic)}qVmo5Z(>8F!Eny<<17grH&P?(0~Jr4gp#&n!axTeStl9-nfwM3$0sksip@ zmFx3C1X@!Mib+NpRFkwEGG;Z*y+-he^C5T*ABNrt?@lE?mCg3EWNWpxu47E$z-aLC z1JR?~d5&ZIZUq>8>JhUUIJtNS+VNWi<(egnIE_3Da!}1JkQ=#^!^gkpOf4M2ZZ1nP z$wN%wJxa^FMFer`t#=jikr!3lW87u)BNUQZ8d7eycdSV~KCo`ZL&7(vBD#W-?|1`+ zrz8udBwku#lgP^oJ-Lo)3Z61<8SAeE(|mwWqDC94iD>a-axhmd!^Zefa+(7b&#@G8mgy~O;M1g zNQUh9B5nT1seYK#N=RS_>QpsFJt;tyRn=`RouhGV)1Lf{755vp1X? z$?fT=q@wCBC{gHnd9vAj9i<+0kmbRX5`WERNRoT{CRtFaE_|df3TNGS@lOYy%l1zK zy60LAHvWYe##9#jfMd`IK|=@D4QT%QRm7xFoysVSpkRl4cFclvZkaxVB}G9_ zCa)j>*ZsJWLxd+=_6G+i?bmTNrliq+b=I6wk}K1KopoWZcW)mz6Hb=>&fTvl;SDp* z<-ERNENpaoTNP%FI4q1^Suw7rDIah&l53Qub7&mBZ63F&i-$1&%T%aSXV!^oj5{0K zs_ArU|4g0vUU z*{f43MCk8~Of@r3c<8(yIkWh7p7Pb-vS00&2b@X6)~)UYNH*<-`qkUwbJ)G?*C9Yg z!7-;HW%`r}_dU(nzWP2ql@NY*^;nnBA`uAAzt}mBd~xK3(BB*iemT@H`r|?~{5HIg zDvqg1lrDVA?Pt9=v3DYAh;>@?=Z--{f_G!C`lj==t7$JXJUh3Hpt|H7*{ZHNdIR}+ z@Mx0irTAl{dM7ZB%5*OJO$W6zj$6lb8i(wQl2hy8jGMf9e&kcs3S4t#$3@oLdVkN2 zp@xYy(@|LAg|@A~Dh1Mk$f?eit=fOt-5pUA_ppz-O_$g6-t@G-!yqw%#VP|EAZ`#hhz>u_i&m!&Cl3@=u=MJm%>z>vyuGkML`rhl6@Q0a= z_AGV!jeXy2)gE9;_?;Bx7wI(0_>y!vgCW;L;|9DxY7e=anuy>JLQi?AEV#B>a)h6) z24C`1V#tNRQ4}nTS48xUl;{dcms4$7#W%4Z;1_}ig3o(j?>z-Q-g zREBww@7P83S9i=ORq&1it%HYXdbFos=rbXFtp2;ZOum7uEESl@Ipz@FXRAp;LSv5-fOJJN0h50GUn?&3c_5?^0byK~S_xtKADCfieM zBaGugwlaCKR#oDk6z`?%KT(7wo-pJZ$wz(MP|n&UsI@bCt-tddU6nO85A~E^v}fMN zew@98Nu=J`12fFl&q1`5mnPWvj0l z;Kp|WE%DK`AM1Sla?n#%R&rAF&UE-RogX63hU8J7&{EYNiQhDKq{;j^h9T{x=;;cE7~FE~3-iP+3L zr|?fY8J-|rmhSwGyqe3TifhmPt!+n?AxZIcw$jL;7X6#*93{L3dRF<5SHWMGc34D{ zyv;q>{dZ|3I-Saomtj1vW`&mXZ+f-1p=1BOzf-onCm?Y4cKYJ%P^7^7HlmdB+yHDa z$9O8R4(*zdsC2wkZ{qf`Du!-=obQ!as>7W+bbb?&);_GB$G8QEZH_1Mdws7LQsb!2 z$O^g4;W~Fa9>r&nlq_q~7A7WICbI2gbN9R^*K~H4^K!cD#V413rAoM#7IdVJrTTKZRte;me;?nL+IdbZ%yqy;XXEX8d@5 zyRa(7j+$Cqe=+s2MZVP-AxqaEvE7jY%4xG-TWWAqlbiaj)o%7lVO$Bm8J1sXnQKP% zb6$jptzYTts|R0I-#8Sa3y`VD+PiFk^!bNXFcvO^N1{}Mv<`Wm*h=a7Zgr);K9M)YgdmJ+e3Lh=o)u{8ax z=#umJz-cqLTsG_p9eMvKvoRsVjLUz!mG=3d{pegq!1!^6`T0#983=XbmBwja8r)l@af{@%`^>al`MY9VEE8&?_b#2ak)?bD{)X) z2H1z@L6XCzd*xRV!>i2#HtZ(-v!OJ+-M+jcV7})OnBQ~@o8D6yukZ=h_p!d!(wH(D1$Q91j6{Pu%q+({d_7jvF}?U4zE7h`K*>3gm#)A@ZZqq@JtJ2Y{!}$;}I$ML?79VmrY`+xr$V;}hiK zCo44h5w_1_Sz5V>NZV%>RKkYT855LgOEbxf+Fr28x9{+@&?SLgI(f4{%X_y6=`(RP zDHiNQum8;e=Yz1pl9v?J&EEDyG$x2BNhhAYlkw+^rWFEdfAZj;x_Jl5T!M+ z;XdjE_FdGOD#J^+F`B9`>R(0^}!DMBaTAYDLNyl4(k3^lsPsy(t48h9kB?DD#uk~5b=<_pM8 zP12{I@ZD@J6f$P|a`^4}huudh(J{O=Tsfk)hTER?4}X?b6fP=ayyj1`FFhI(~M#XS&R76@Y?{Hwp)3$Y3{fWYi zdwK7i?)969*R#n;8Z5LG=k<%2Ft8JWK#PcjDvPV-D=9SDxW7Fkzmy%D?HQmDL|F~N7!C!mKE8u10u>ovu{W>l2x&Nr}5r`1qm$I8gW55?&xQDF#; z@+v}TUktj%ntfA7li9-MN0<`!e0iy&;Jc_Yg3+M1Tko-I5$4g{&pVWM@HjB_98Y}=TRjo&ROC;ytfNS?7Q0?> zLo#-DMAlslSwMtlhjUUocYNd%mSc|;HRNs8iCi^S=_6;9X4N!15V(}o-Cy8 zHa~8}3NRTSth9ATI!pqHoNeN@tvE^vWK7qXaVb|BN+W+- zl;p&0F-0-8aM-$g!k}q9Td~;xSa>>qL*Xd(bGw?~`ni7+ddQs9CUK@~cz;-fGfHz8 z{)xo@+$*Q3~tttJtBT-u3yKQmI%^s zG>MB0;Sub+&tmAz`tqV_Q_u6LdwD4u^?GE9WArF@8CM`k+yxEct?u4ZzK_~uQ@vx? zCVM^#(&>CGzBcxIwe`O@b3)t+9t6~0Svl6>MT)O$&H*XdE4UL~AG0N@iUp|DGHh5i z$jzNCNoB@YIAM57|r0%A3KHgystiieU~-% zO6EX(wYh4OJq;DFyJBcMPS|``z_pf^vkg-|L!8Rais{;p+#A(T^&tK7 zv>>ufNgKCn#Y3Y!3G~vVTHOU{m$i-Aik97t;e)ldKyTG*T0LI65%&;}3*TA2Q^%9W zn+fMQT9K`xsEW+?+jViD%jcYh$Mb*3vg9e0ax6{u^uogki>uzaa*z1M-U3A82aGI8d#FEtJy?Lmr zb{}gW_WsAY61S<2^iulIOj5&J$hQ%*ID%)UlhC3014Fc+n?^}hZVm3!{h2nOL5LPZ za1h^~9YUhZ?U|9w7KKN?GKxt;da+yY@_CiT$^ehd^U%QQw&Tq!5 zt4-W&8DJml%y+mEUp6u0wR`2P;9gE3ua8zV6SXa=qd~|5=f3eFPT_US@)>eNYEfbx zW9#(&{@kHzc;DHZo$-}};g%KD_^>pO1KZ~G0I6i*$?V!803LQo9KE+KnoQ%k>mht1 zJ!-SSF~Xbl2$|8|AQ#@L)u4I;$3jo1`l@aa+_m6i-3+6gGiKHpEs^CNYA!=> zVYI*)3VA%Qu(+l3@Wu3>@9wwF?nZyA2L2Vt3abD5!Roz($AuX;sMNbL_YI<`!}2iu zSY}|Mmy4TvwDm7i@fz#0Hhg8YH);bsj|MWoYw@qwy{=l^=%;w(j%PLG4mfdh#b^}Y zLzig)o(~wtofp!8?h|J9pW}&Wd4mJG=1P<}D5?>tU%niMv8LTcox-*N$L1lsVSoQ} z;)qI~{Yn_NWbQXhG~)a1GSTJ{YdW3uvGctUl~$z1%kd}7-bTdu=ICr}eitLRuJ&#qTy{SP&(%rdlZUa57$x=C(2E#3>>P~5h{l9zOR6AnB?z`js zYC1vlmaq#i_b=}n^qHwM2^)~Ds>Clh{h`S#E*J516Y2(djrw(NP{_{GF^$OpqIm}99T3Z}4Jwp;qF+gBMThLGBdUVFM#`Gow$!O_?cM1;}ot0yH{ z-b>ej#*5$sp)*I3t^?Nt=u=V*G0o$m2CLSfuO|ISQaJjJ3M|jT>uMpCoWixwSB;oP$u{ zu+D6lpTJ9lZbzTy_SZRqLX&#AO*F-hEFrP6>)kwtOV@EKV)<{%FA}tB+SbtFO0$uBn4|Z^mDpwQbx2}3g1v+NLWa&R027 z|J#x~(9=k0O?(Lg$GmJrtrMP!p~m|D<@S!vXrQH0v{QN;vwW?!!1JPDnU)nuwy8k5 zS`bi?z9*k87-_PPtUxD+G+4>anp+|fH*}pn*|@F#KArsuOFiFCwwg;Hvs17zs+`1P z4~NeGQSUe7Yi~&9vbar*lJU)iRY=fg~n{ zrWB_9J<;4ZqQ$d^HoeRAw{!!}Er?M$JO^}d4Vpki7bfU?oNd=*^QqP9YK~5eEL&i>P>2Aw>M~4Z9B>bNGt)jU^XbQO}qPeE2rXGzkp#iY9(N$PV8kd zq^5%8T@scF*?R$qM#@Jl5=CySed7=lQc>{{>U@sB45r7PQAUNDJ~71Z z{8N+YZu2U@D^P8kFoVO_9gRCV@iC7<>JB6pj#YMh`6|Pr{w?n-nvU0pUku5W88IgU6VB65U?CZxfwAIsjbt0N+jaj}_GQIYH{Ic#s%2Yx1 zIyw4FUVRIJEG3k#3e^lXB1T*pLWxxP5cL=5bdCNUHi5SL-J0yWPxhYITgeQLU0atF z^D4Hn1R?aTi$o_jZGXnP;AH{CB9|N#+_TdX#l>ZgFFbY-;J>^BW zmTuX1uOu)>$7We$OVi@97|5e#6G4I-{mxk3j1?ZTnI_sXV!!H6nh)G9flKnh@pH;z z!gqajLe*yp9}x>8&7JESUvCM8>f*S^l`%m3u&=y6X7|@PkbG_O#BzRy>wja9)~eN0M4q zUX*0l=c5%Q>0>15Ln@h<$a>i$ssG!_b$H#L$Bl%orMOlNoxRI-h-J#+M8GsTEMBn= zyz(TIIHfd<;Oe;wR@jev*<)J)9ZTplL9`ZYyaz8yx}T2xnI{o&l!P8=Jp3L}?;*7` zvyvXo&+~&XXK)b*(q3%PjLi_lK84?8F}eIxqOT`Vf8sCWdA>w|>Mt^5a+W=xZ?ws? zY5(LY>BLO5$=Gc7fk<7;8-kNvl4tN7E34+@hq%#Bb$o`FTH`HSIpR#wa1wp>UA&pCc}4>ImY;L!F2P>WF6x|#G+{P^M8}T_U61~M0I{_x2>-_&A1 zg|0XfYr_dUPGjL|E?kP$zMq>mnQb3eiMCFp6_IVobR2ci_w_zbrRmy6O<8+POYl+c zE`>+(YkWZ@_M;m;AZSH5=#O!%kkIHLL7z zQSMfodNL9$Kr2M&5jj_|Z>j@(Jnk64uT=uOLOgVgVaM+nln|9{NOM6&Y ziNAXp5;WKp8>IfjEN<7I>o5-`g}06@*Rb+-?kjyUCrQ1c26i6-vv41-@}ZhkLm?^3 zUOTUnkK6%P%-Y2O#b&*uSq^#>8mn(_l;g%j2ac*XgVr~tSca(^B@szUB~FxEJwnz3 zL)C5}{F-D9Ms1Gq2|1-=?=pQ|TvIhixa<)QS+xlDBdJJeLfSTnxEt)i zVBu;0S<2I$n}sRXEr%^vUD3*Pu|s)i&CVb8F~k0%oosGiuE2-lV7>A?gMrGKn^3be z9!;*CaTU@=Pu#f%iv`eCk17m!Z<`FeGSBJ0ZderYUMDDGnB&K$W)^`~$kuf2!c*OD z3Y!mn`a=%`bN)%Vf5D#5pK_}sOk9)!dVV(x5?B7Rw?eFBQ*WX1pQ!|2lGPoLx8;sX z%vrjnIZ8vCjeC4u)N1XCgMAXK-as4OT~A`&K`7JEhc?ORW4?0ES?lzDUGtkj1{jAr z*?6$0NAFJ^8Cn@y`bY)o^AB^P*6cqR1$n)<_$_G|EZmjBioBqxmtE~_+K8Ah05Z6e@B>->kdc|JGTMXmX0o2A1i$3< zF;AN$mcHOzrCzlBRWi4}Ru|0*iCA-V-fefR>od`>vTRu)rZ5xIfwI%7`h^blSXKH1 z1BuUTl_*@ECHtw}U+J;d8U8X56kzbXO8~yTpQdD4W|T!&`w`wGf}W^3P8-YW=)}~d z`YSP5E@)G{2DezCoX)PC6LV)U@ANX15jp;BNFv@4+xD|+7&M+{ja~mMzvSyF@m~hX zz2uce#H*+n&FibrEK>;AIW|PjnuLoy=L@u}h(DQ$|FqF7WYJcqHxxfz?3<7B;8bKS z$g!6n&7o!-r!JYUJ>NCCPBpZ#qrdAmig^uJErJw5Zp8lbm zVj%Kqn&$;srE6pi*N6ZzLTd;t=4-0jbXaLvObReM(LP;nqyekBj^?7LTl2ZeO44!% z9-3W|*(hs0H;RO;GzZM5O_=9JMn-RZP?jkB%dzbZRs#4?POW!!YNUyGN|6=C`C#`?Pl8CT#eS56NrQg zR;GJ)oJxvyMmGjy5|!LJxtogHfBy2j9new?O>D&2F>ff3WNN@Qu>m`*8r*7msk~x3 zOMm-#>-xky)JF9)pD1h;@0;i!cVExzbSz1@0f*;%WPA$10~Q2WEmjc>!fOZ_9$C>M zd!1zkWn}H%^HIb234cg$tpSah9BHE?gfyLf$PAl+RuGVLmOF|udiDGyjbL1Nin(bH z<IL zH|YT-*e`2EwIh*g>QraO4>Mz(_&qs<9;b>(!PCv)|L8IFo22_)&XanD!!Hj-o#0uS zC$CTu9bkv1c(N=_vB2AsKbku4OaRNWOeO|rk`#B<@!DG}RVh=vG{i|uvP1Cty%Cz( zh&dIaW^*SJ5T;`PIaJw4d&secH~xvA&suD4kfe&@sjZ9|$Qt}>8E%+1TZ^Suckr^J zwNG#SmJVq1zrEwGrtz_{nvA#K9wV|ClR0<<(D1hFdwef42^7Q} zN@X#CXqb-OW+y%IAVZJKl`6r$#}1&Kk(=0+@W<*}*Tc+ICqCP!hZ8QMMz!U<@HAiIV&=3o_2vGX zsK@hI-(l6}u7CBA&O`qY=y5v$e40W+*+QRkx3UOxJ_h^y|LcH@s2=TEu+M-k_DVB@$RMsaKAu{ zAF$Soc#1xTde2`y*LrynB03nr&LR%Gn}0Uv4@&Ltl3UVwWW6|06{B50SmL@|_#5qA zKX*+OkJK&b_~f_Q6;eat$sziLXP1ACjs(goMyluraGLOroFNSpax^I_+9CHg#6c(qMXj{N*d9wYf_?*0aSi2kl{_xw7*C3 ziAQ5yiKvP}Q;0Ox?{Ao;s?{VhA-i1{7bLz9yZ)Wf8qjTE{|To|>HX07z)2@{}Uw&W_fU#-nGUCfyO02BGGDreDFv)Fsp> zMbotI-M|zY_#Ro}@M3G0a5T-(yT-pZM4hJ4YxIE8>c zJ2snKj`JpAIeV*b*9A>Z`7fSx)?p15)X>K&)eRnPGD*1)Mh~I=G)pc|I&b@5Kgnj^ zu1O~U*wGrSlrj;+zW@5QlCZel0?~Ojpth!osku}!M6Sa;#i6VsGaIr6&|`QgkQ9~)$chP3<|ylp56>=6=KdqP1A~rFTL4hu9o^&Rb29{Fceog1%;q5q z>ztHhrVxN$3d4LC*e3szy|B>@)g1q8ER1CoRH-hKd~)cI4!7I+VivMCL%trtOEd? zH+LBR*Aw9N*YpEp_v28=!=a};<<Oi+{u}k~2JQpMu7V|F8&Z zePN0Zuv))iQJJU0Sv3@9_~l5(o5=FZ;W+%mT9nO)hZzXC$xqhOH`%mLH*Q6q*zKE$ z=Y;ca=1CdFz6{sym)hM3VAB=Di}~_l7xyzzrxMc-{r@pkXDGpK!|2c>=E88>PyFYh ztdle@b4@WJ_iqRRD)r>2u5|q--LmBJT?bw(CoBc*ciOp=?PwExr#DoitSPG${`Yy1 zwP&!4U~CNA;}YCL4vzvW3DsUb=?H84QqG4diI|dD9Iy%;R9L>0Btl*NyYOXrd8+lh zF+w`|R9-IF1ULLwQI#tAiJGGPK@*}TJGTDqrvzXaArJKI5%%y|C;VR%{Nc5>S(W<89ulbP;Z?7U!T(NbKhzKUI{G9;`xOWC zbY#Y=j7#75Al%U(7JqNV>3N$n`7$G#ee%W3Y=mr08D0#$7(row5p9H8ewL8-@T%Ty5 zKzF-yhN9S`kA%F{25Iet)V#NkWkDYh11*)nMnX&04UhlMU=K^Xrb~RVr54ccF3xbz zySFSSqYzl$n&;(Tl3}ci%4*9hp>!Lk`{>R4WZMbmg;Itw}v)64PNuds>e4+AN+q` zj#XPG+7!9BbROidZotfrhDoR&e>!I0MnPbYsE*x7op5hT$Flg^lp&ZWjXGQOg)D3G zWzi1?{NuQBS+vErIJN@EEBss@r2=-Bjelo%2XY3_lPF9m=baPR9%h$>C(JK~h)ll) ze)PDHVY*+QMVB4H%J3OD_u6T4Oiq6GdESVM!Nj4XTj;%ZT3j-6*&&rpGG9l7B%VLl zoW4#XE+fL-=odw}bpTzT1!PPV+KOM}%%WEaBbzm4CQxzX9542kMwX%zEhvwYtJ>k&gPvx^s!gR{~QN)uzC;TwKYqjzM^y=lW3OziQI5 z#)z7@-2Hx$nU}si!KHVYO7%><+)R>r3`h#$5K7IR;jk=)UTNW>>86UlL`~{PMIja; zrob00UBZU6lzu1P`-lyWwUcR1S*3`Y%xW8bqv zb+Diq3rKj`q0QEH^TE$$=d>VsG>V-%)ic*-=H|_BA7UCkJ_(eSo`)onw1#M1ddYJt zoKmD7^={~&bx7Ck>&!9i#ua9Map=1DLD>u}6Hp$s)_U=PVTRb-0)07ic703X5%YRf z9$GyxaJfF1({V_tem0Eax<1#%m5+$;V@(=@PQ`p5GPQE=Me@g~|>-wowgPnV;@6 zfP%1e|G;W>+fMDRxGGKD(u{zL`|~)9ewREhccgPdtQ(TACXtDke|rJ%ajadoE*%pn z;0-aqoJ|00_|JvN>Ywx~9DN@h9=)a|h|W4xbeZj7|Jtx#YE$6onxgEq$!*BVKOU_f z>36K?JMV6W&00*Sx6XAe-syB>EgY0L@BEopMyZ#5A<$7-Cc347NB?DvZf`iw=UCg% zl=ip(4bg!>)7Lyt>Ks9f;kJ9t<9{WIp^Iq-yL?OkS)aS&^X?01x9)fXkK>}SNs@be ze3P%9&zB_CLf*(c*-WDDkFTOV0~y(mC>@vovE4Nz5cV(?EuyO6=^P0qsJMix>1%UJ zagQ;1NE-N^d5zaW_0NUTXjY5)kBYS=Q+=J0A5Wrn={g6FB$_?hdpHUHzzGm^k_M{f zK(l&VS&;%eO_+QvNfACPDxrRQSrmEY-t^w$1p^0kE_HxzZE(>4Ux~}!Fp21M0bGp3 zIxIWy;F~GPSns4KVAH3@?}#m#%{yG^X}Bw8NUZ=tck-<{Y@usYTM+vNqZ()-@SnSA zpaSEVp_hbOPcq;n;+SbHdr-r$PtzH%;lkv~*UZuTBAZ~7Xd!w9xAWUkk$7I;f3M@% zis@ukS5lx@9Q=rUTT&N%C>i7g;C4=>27nJJ0AS0Eweumj9#%N^_T6EyJbM6_Kv$P# zzWRirV)MXX6ph%WE1J{=jY6N1B(t&@jurtsqrMJ~ao}^C5k4 z{Q_mua(-%4*x386EWmkg^x5Yre?^U3EY8lynqGD|V-oI3hbB@DaJajXCff~FTB{!$dwf6vk- z7vjHH%>s`=X6{!f{!bxm#va@HS-`o0cWlbCsy%ZSaQ97EZds9_-|hpV_@w*ZEBxss zTYq$_O-m>ieQv4g^ck+3F_!FhpY#AcG?>$LzS7iqIvv0{TeqVbtO*_~G5lY)uK>__ z1`v#q|4x>}m3>yeI|04P%6WxH%$?ng?AFKUdjM$K9^yaD2DsZn1u@aHRcw;u z89z=}r$-B=O3v<0KygZ=4Qp2kXXMcIqaLdK=oIb;Ovk#tBT&Vv#pJ02N6oV-u_ z|Ibm~+niPMXK3-NQ5 zpvQ2Cy%s&f9!c!pA1D;}x>_%~SQ*m(<6S8Mmq4_{pD_BCXWe1ZUqs*1SJ@*)EXNsk z`eub?-f9T6F8cqhXAKjkZlc0;G%jv>H*HtYc95RFmRjMpL7T}E*D58OdRAqF>K=jP zA&}6pB$wy%exNm(DS?Q^h{x&`)S!+bXG~!S4A@4ZQPrchj8PLL_RJ4xBa2UVXBR#z zeR%yAt~&O#iDxUmeQ0?!HuhpIKcBcZS0xx?Rd$_LR2SydF9yjynsd%ZX`MlB32IeL z3bm14B&|2%&xCk%FdSRdB%Bde+sp2LVzs7&aiXh+g*H``$`Jsm_yHQQO0&z^SbI25Ez zf;+0Qe2}Utt+L+S=EdcYtKhyX8g)bI_;L76gurG(l5-YigsAAsh(EPgVNX_Z{>MB| zvNL(xI>X4VRP&$(>YOTl0`SpHh{tDMI7mX!JS*2g*;??Jsm{3LwuuPSeyKx&{L;3? zSOOrsB>W?1>Wv@l!j$J>wM=kt6NTdC(VS^a_VERs;8kEJXE{JD~4%YJ$s{d)a z9u{A&zCSERRA4r$;GE=_A_9B7{q@28N0r~NR+`wG!nDRVK+*FhYRj*UiR*Vk(PIEF zXITr93W|i3j2df|{4iEhr;N1|2&cCp z-~DHzuvNQ}@{k~&nZzO!cZ0g*m<<>&42eN8sl+6Qda+ZU^V_y@c^qeBt=t9Am-tMU<$}b{TFQu=#wAr9s@26bbJinw}7zy6B(nf%k076U!wYHA$zp-Jta{&}IkZf`1 zpLRx3n?9icPl(TN4GZLvCB7yS$e;_i?K6zTKIkV2{3F5X%Ye3^#k%;M#y9vxR;)r3 zhXhiyftvW9sgw?WiT@U@p0~R!62(#(h_h>IUh=%gN*F&dX*rWFH8wbaM_s1$Fl}nV zYAA0Hj9$pP{c9H45IS*|G*@oI<8nSQT0cnJgsG7Khf{)TzW!Qg>W%-jabF(A_DMIS zltAv~5v81qkn_6(0obRDXo%afOz70Ru)&Vseq_h|YJ#EaT4qJg;MFX1-Sk2w(bc-# z%xK0;kZEKwd})U$d3lq!-aPrHf{Hge4^?uU`D?90h-SY4?o(csZr&Kf;4op5rjPXl zk_@%@cTKSY;xs1rZqblfzUM{AMw-63!_3zBNhvfchdEJxCDSZ8#QU3C{)dy;l5EUh zRjF6>H6W6I{4{$zQ+LdnyqBWiXRRC1M%Dj;ji%^I$8hArrTa+aC3w|UkA(+wLcYh= z3kxm;WBiY*w~ULbYyY?D?(Syj9+0jfhVBmO?r!PsZfO`wx)GD_ z&+oG zvM9NNoDNfU#!s*b$EMhS?(>?iD9}DI0Z($wO6(6Ep9fA z(5tP%As#wJ>NISVIVYLU>$XMzA#sMt-?se~Jew~hZ?c4l+0jG)gl`7Yz+2hdhe>mz zQ-owNJ+eHO9BM##nXXK9NKr%cknz*j@dm-*nM9_tUK;nHSGV5#V${iqzXL;fnyhF< znpc>3XfiH4xQB=%W(BN=JV?~YC|9X@QziubD-}>ZHNUC|I!LbNZH@PAHn?p@`nXbD zU$z>4T%k+MzABk5*B3ppdB7nozO2-sHP1@mL#>Ra2EE~DR__q>o=YS6!d{PA)# zxtBy;KbgOCu_tl-g!-EUlfCUZ1~E=GSfoR5G$IO9Pm0{Jy>{k2(-&_g)kzx>?l`A2 zRha|Rx|7nYHLggby#&Y^S*@HDp&&GbH#OPYbrlPFekBeTVs>%npTe_kM?`zu#n@13 zY9rq#Pj!H>+2t#R<%3br1>Vr}f)-^5&7qCVJUOT?$rVIw#BO60#mc<@qWR%ZS#%x_ zNlJ2rS4=%)^+m^I-`IZx0f`uoNP@T1>1OQ9@L#{q@&1TF5fYm(c85DS%g9{a{(kft zZX}@{JtsRN-iA}R?8&JR5nP~$y}5}!gHyHSmO0L%Gg-J&=(C!o#q(lhysc&N0$Ivn zS>pH(N6y{AmaS#=XzVQFbs@?06)3q3TZAG!oKTjbPg94klnb{8eFzSBkgc^ygY=Z2 zM~KS*NKIgySsvnyK6rk;jdIBFGWkw_425G>s{a!}ZYN31ULunJD`4^bciAThvaIcL z@^fEDh9zIJ=9Pm$jsf3H_R_bWC?|)9F^`8t$BjX^MJwO*dfnM*b@^bgGZM3F6Ed6d z(Qv)~DR^6!b0YRM4bc0T`pl>yXxATb*zF{?fYWruPx(jHe4&fxGp0VAB^}Tfe1Ro_ zT*F3bLa{rbsZ(F>UlLphrbZF&mHeFOI9U^Wg`SkNMJFj(DO-2k%U&rnWx49q+iW^v zSpr3L33NQvctuT+v1HV#R;vECGeaNy;ajP3ztHiuxx{ul&e}v@k(iDQr1^kgwg0`P z9bC{fjmU2J5;5W0U@Ah?AM|nM(gE7xR8pyB4~h<&H`mVEMGp6N{n)C$PVL10lYTZ@ zI4hc*DMVTW35Pn0#K=y?f6rOPil)dcBiFFa_ET@w7mvdKmp6R8V}d_jt8CnS@=Yq7 zTj+&_rd|wFlQl&XbSgb)<@G3dp>C^~xw^kxkMjypaWNxK zdD$|5qnnF&;c%l&XISB6=K$|x)4nTd13mEB)4%^uzGUdyEdR1VA}UM9oasE;zC(wd zVm)JYsO@`a&8nL}D1;W+7phZ4yaKwPLbM4elpVerp3|S1nHF;ywjGa+%k6k=cP{ zKRz88{$#JjK{%zPdrsnAr0iRB3`y4<40-c7S@o9L37J22<<=*@!JeHE^Nc5DS7QSyHGY+E9c^@m5Xy|XjXX&*##&K8 zL{PftdB7M;r*Y+54s8b}xJD&z0biXP@J_W?;zGL%;6H_6N&b60Ux81pj! z-k~GBt58NwDk%03FfcusNo7)REoMJazv0yL6(^J$HujsNsTN?)f;8$e(fLTihEs~P zDSv-&&Nchqc=ahb@PrO?z`)4^6BlN0$E#hBbupxtTLRA)i5FLJYqh7n?V_kAl~uV; zg1G(NNfNH1+qdy#NZLbe7V0rkryudNE>?#nWxDq1JQ!kt)jOb&xJ>x*SUinSjKJpW zxo!pyIV?k+LOr}w#a{3Ra@Yzn1m1X=^Ei(B$lSEzA{6#WsFerqbkK4||CB^#ae^ zilJDQGluKLvmb?J zwOsRIJ8JDB29MLdnWQC7_U$)w-y*qVver5I8Pbwaz;=t!(L* zhZS`lByh1YSq9LF#mJ%H&VEjmyiAQ`J%Ah}5>zp-n!4dss#M z9*bL-QGL|GNa^sRe}XuQUH)#5DN%2%G7_K^9k7dK#{?;nI#|X5e1Ug++G62H<4$6} z2vg2|)PgR{(V-)RHoBF2Nev6W}L7KQ?b!RtB_XSv9YRg`r%_beR7$l zlNWWqBkjd;7WT!j4OWFbJecVbP9GlOjsCg>@D-oaV%v1q6pRhfL=Wx~15mg-5idx0 zjcGmBdCUAB;vIy27v-MwW982Jy~g)^sF#4ZC2Hs+ew&ZST57I+WTP4 z7)#=O%S*F+Ox|1Oizu0i!W0jo8RBpfzIlD`3$JYa(*tzatyH>VG=mH(X8mSkbx0HZ z((a_ah2kY^?o;9ePgQg@bAf5RNl)CM2bF2bc&nL?5`d)65?mrzr0wYEzT}dh*&|I} zDK_OGR4nSK_)JDeZS|AmCBI(Nc(G5DqWaA^K*NEDDfH?_L^`DYco1H9C2&!0O3u?l z*A$zwtio>l0MV}7^|+{_-nPEL;d`qXCN66t#t7gH-q6|d_%I8k1v03?cy*^N+%=wY z7nDH4F?Ya-W?s=8dVWNbWp;p3T3p+lyQq^ zm@FW%QQd$R2(GZ)9dXV~nb&sK=+@~qi%oI!g<0T30H#%00x)7+K4}a8T5^b`+Me*s z16XUgVCTBnB_ADj7kda6oA!$T?85IfgkN3>(3BbLX*x}U-BHaaE#WE*oqpGhHKlbFSc^P-*@NX-+cgO_y6wh{ zqrF#8eF(VPT>8dN!kzIe5;cxMFBLwA4}LA7BagkqgRD~mog8yjX2yNVCcDg3r3b`` zz;AskGPs)h-y%e;NO_CODA$twSK|JzfIPnSWW@K)VA%7&`p9S<3a*T5n3``J!qgHu zoL{T|0cpkBqlF*%Q)+KAD$O2Cn+EeA*BctM++-+tQK3Z^}wI*A_1!k(6` zX;Js;5!62DUm6^@v2d6yFsEsf@#m@gqn^o(IO4&M4=zHD+Q8M-&7$6uaRC;Dy1-9c z)NsbR@deR3SKXOKH-L!aC(6iVx+qR(%vJH#j8WX#=6dloW4((3_k5U4LJR?pB4NkU zYx=r*li&lVVC^Ng-lk;SyCWmD|44sy^0Q3?0%Cosy@VVVeNOjW$HTYg4UpmxQI`~@ioMMKYvNrtrL-4 z#vE7vIPV-nkNvK#P$%%+bADCO$1{P)61toIo1x+1VU7<2+E+>9C65Q+kjkgy5hpVW z^62|l7rNiJx#eNFkTh4%s%|)|M4r{?qFFIKxkLvx&v{6r^eY%ue7OG^@hvlPS}k($ ztyM-`kA@x#bn^E`r?ZCm-PrM$yau|z8Np;jR>4kJ8vvcmF0(_&v7Mol@Pl%TKxd`A zV=a%Az>j%ty|WK?8c%Qxiq*2ICg=X&=Ea{YvHbRxH0-fvn+sC(Xf`BcuJfcdA^iL( zi6ou7LM}!h9~M=_#KiO*_R>uAn-FaKR}pREc>~^L;rF^3gcf-iW%)R4i+aL@zk13_ zDB$lU&-*Sri?5|E<6aHw#u(AdWHflMJl&oMQpUy#J-oO{j|>GJ)>lK6H^zUJ)?z9{ zwkvA9BMJ6q8D5J2VneROKgqdne6-cPszK>q?nb;h4l|q(Ssm0AkAGKC5R(fhcxuy) zPMMSFP@d_eNEwp#FzYQ<5nRo#!v9OPlc--HplrI5MpK+OVNA8)g&B`1%g@BjHHjkgDajA}f?#%d(;vo)^2rHftgx z)LzuQpMOgdEBup+z3FjkV!ndcI8{N6Zg`3E#3)E(Miw?h)JCXVPBMbOUt&MT1vc_>F$&C@00 z6y>*$g)YjgtG~?J!WUT5Eb={r5z<>DeO2zq7ZFV(-4==j`EW(y+41?dy22v7UTWDb zqwIdr{{PO!9q~Y&qNs9GB|NAXKWS&}{^3BpDu1-dJV#D8aM^(}+_c&R@7`38B*slO z`pJIEt0Dfeg?s6o_M`UEomn|)T2B5#Y#Phx2;dtnqu5MqRngyFTs}pC_pSr9J9qgt zJ1A3V6f<%;60{4f|mP$nDm)G5GhLxoA2g16SUa$TY37$4u| z-g-r)j3HjWVP%IC8#}v`nY9h?v+me6Y7qwqqkfZ+e;QT=5qEq07(35fZB9`WJ;BEz z$ac`Os}*g?R?GcE`FKKEr$t%NH?py?CRq84e#^Lo>}tfbqPpmT7Ybgknd$}$g7Jta zW}?Rxd!7tAFgUl_b#(}g-B|C|^h!6v#kalc^Tnuf$Z<=-pN!Q-2&i6t2t*af%{8>o zDzV+RvNz`6`gdL$+q-@jcbOl&4LNvgXSZP3X5!Pf<_WIOZ0vvK{TasOT>8S6hB`w~ zxf@RrA1~m{Vcg78_MLv3fJjCA_|DX>sri0+W4&}2xs7{$YNYJsEkX2@Xc=uUzb-tJ zwFhRe%ZjAn$z#*U0GO!d>`t|kA?(p49rc@KHf9LA<~|;*EZZ=FB`dGuUS3_@m-y`~ zyIf~(h~(oLeXx3MqR(Vc=X*40)FDcC)Pe>J`Bt0Gcm+ek%+b(ee~D2WgKZv(DDL9S*s5?AiiA5@Iv?&7uu5-xk<@_sAt{Y7&F zH6ZIsUpx7IS|+5!Rf*@-@9$CBnz@>8oTaQLXH}!>_4jm9Hxl$LkP(QPVDKW2l4E&- z>K;7NUt_#pUNxR!CE6fZ!`A!!1*M{GLm*&>4CL7({5}G#@7Kn9s6k2ye`yrrB@qKF_)mqvu0^Gg zqfhhKUiCh_FW{42rO zhJW=d;`TgEPX3qN;F_SR(p9>yfxR-{e;#JXqXw5>h}t@pJ9D_DfutXIMK-n7g0jX_ z-^;kfn_RPqs8z^c0xF$DR1`5c(yOXeL4uX*!RDy;xZs1m@~sj!wd(sy_!749M3~M| z77%>dNFcbbDY>M1PQvK)2&yfA(PYgpc9L?WptvMZGjl&Pe_pB>H6vZH*M$w7ofr~8 z25(^`96tV03W>xMpyP9(4Xzd0gCZ>byRQesUF*#0RX*HHIG!xQgLVp(m%knQ)?S&8 zJ=T!f-+zVXOvGW#d1n3u>LQFCU%=_WpOK*JU$UltLPoZDX#RkBvg5}j76KdL$S+ep zMe)Hdax4BHULv~GttmnLBn5at!UHG+q0oME5|Q??5?Qa@<`I>C;g7*mRRK1hRxH0Q zi9US6+~92u6Y6XHd_6wIuTXq|r_VnSb+5#)r{~@Y+{O=g5P!49X}&%cY;V0vIm4CS|42DdB3sOhis^I~D!$7l&O` z-B0Z~DeqQ5X-mwjg>NNnDc`1j;=UzL$!!UE#Fbx9R#{qJMlf-!HnCgY_vubUI>0=p z)G8&6r}L3<`yQTEKG53;45ZCVOZ6wvHji5c;A~_lE$vYlUf+$IkzKYn zxx8a^VgMT7B)Ua^22N3J1?wxH^4pX{=8K#G{4@+Z4gd$fE8SAhP_m*UYurtm5-fSrnx}LX0MzX#bR$qwty5@-&@nM z499pem&Jq0Dwy>tW}(10<|m0v-w!V`!<9E4wLt_aAg%-UBNX%?f+W&^uA8SLlB#Ze z|I$=x{L47HuTjF`E}ckJOmIsb^Yx;I`?_F85Aew$abi0Ny`~l$MJ;zfCZmP)=ztFv zoQ|eHwowHK62VeBx6zn?Jz%y&mpK>;54naWV_=jMM^R5IEDQCny&{QjIotAuR?Y-^ z^%C(TllTBGu}r3Gm7^Jb2mti6Au2=|SDJY}h+P&La*(zEF?dvzO7NVE{RCuROUq*Wqo@lB0(&rpnG~DY!RyU@WZGZ0jW1L?C_Xx z1A5AzlfeJ*#+obmJrSPHA6GVG0X?dM=$P+51L@ua>5gZK5rc2p^s7`*^-#sj6jkXT zSc7X6wg9+-54S6+*JNN7ER@^AXW2_4*S8Ss+2ItVd&`8Glwv0_B`W>lloWDam+_;E(G#cR$(@*~J6Z#qhlVC6EQgm*lbimYZZSVUR*SaBT(7Lj;PYa7w< zz1+I3Er6oXdV;UTm3x08M&y*bG~h->dqv{EOa??Ly=4xQ@iO0PO1Fvors^9h7*v_SLDRc<0@DivZ3N-bMjbBfd&awJN5i23eD1yq< z4zhEVn$yG4^g)*C22&OqlxJChZda!N#YB48CrFTh?B8cp#xS>+jgSe%Gh;wOH3-02IV6BT@ajX4`J&TuoNV`hMI*<95_w`U z+BO1n+}5WOEu)^VUL}X|+NKeqFT)b8fj7tT-S0-z(KO?sjYlFhMloU)gFZZ|fdcdJ z=r0#34Y@dMj--46JILE|mdu=;Uqt1Lb)+Ds_(V#tRNsvvD{PI&t1lnVtvKV7)rM-r z;hc`0OQNGoP#%*t-{qUy&ovgJ8~2R3Xc%g95ZW$tY2Ma_V%x>vg&pS@;NalM&K|pA z8BKg0dUrGa6BO~<(EXwOJy)X=xy7|<-@f*p3GM$}gKn(VZcm@9Rh2C%?;Co#A>gA@f}bI5&EJN6T%AzI2j96nDSaF$J~R2~y7cK&&1+3>@N3x3vF`=n z;kR&%JMnk{_AkO9dcCzP)5Pqaxr7i8jS=zZ``U?$VMeiv?H(p}_v)4pmz1WRtC>&X z{`$eHz`PR1h<^zk z53|m>1|G9JPl)azL6?)jzmu^OYAzJ^F|WX4famQHl_-v2T+Kv=@1NV}D9>EKc>F}dL!Hi?bX}w zhEDO%*cC^p&KvDvESaC|?@qCn_8Wpo-bFD@*^#X?n)qaTc*ry|BT>JPYeI8K5Ov@yao#gZvhjm4{#n0VB9XA)it7s~*C}Tpe9D%oUX_ zI_$*Sc3Q=knHq##Jt)qDVTnXS>kV-Sa{D0v!U%$`I!aa3nuUP4!gosZ(yKY=s1_YK zZuD^t8?`5`Lyx39dMu6W{T+gcO*A5bZq<&P-NJ%Q+ZY|azF!I0$bHkpJCD8_0*T!{ zAoQABqR;+f%kln322Ve2I#XtAvCrk@!u2Su`)jY2Z4@f5GMP;4+7h9M>jUHF0swNg zpsNGi5YBIZs^Kf{B@uqzT~#%25lxsH%y@@L#(#N#Ro_UGENZM=vtgtQc-j~32U>$8 zN1+G$;M1WE{)-$gL(ZHn1)z317jT@Z-@s+bZToImvoe*K;aYY{ zKxB4&#~&?mtAq%!j26iY+zEYrE*Uj(EOp{R6_7t!`-(R)%&?}Vxkxaq>ttpnl1@;6g%yq=baK$Me`;K2)aa4~hQutaZ-_=Wmj zp8~ryj&5XtJ1q-_^TT_3#(Y`8L#zt@slQlw2iN7#Sy&cSK$#yu4WoejTL3_2U;q>O z`9!mm!;CxaJ{M@wEoIF5MbAL+h_Gi=@9R&C_*Sf$Iq~xQT6XbqA0#|nxG=(7WSW+J zR8_RPyJPV&g?7ke9WAIK3uXA{E+}@6fgRDf$(}B6mUX_R#q8kl;YOGchRUO1spc2( z4O~bP+(pz4s}WOd9W9Kt`03gpyGaOQ@{UKQ0JN0T^nAO>phqROxX&_-US=Y{ACB%K zLNWGRVrbqw<TQHQ@#_OV~D|yE=8#!wso%{8*zanVfb}5eFK! zZ}NLu?tt_;iT0Dru&uACpu{{~OxvcchWR5Fx&)SC2=uHeMuAzFkVTp`hxW55f_EFg zjPt#qYkfE7#jX19R0MPlruWR7@=2Os4$+jHg!27HKZ}jdXqav+Yc3%wokGtnzZ^nj z-wRcNGUt>2Ciz4T@@C1@hz736^C*4v25}db@LMB>-pn2LmL*t$)4k3Zy)}cF#VA$# zJ;`pG)FS}UQlm6muy-L1ny*W@em!BO1U9QRV39xwHB_aqE%yK!B;E7ABKn zy<`-DS1z$$`ugE-6c*rAHdmaau=)5;c4^*oCVgz#y^HX~IF3A#-A+zksA$ZZ&xg54 zCSh+?fc2;SG$G7gjzW7243f*e^Yn_M%Q=mXs)arVJ;}Q7)$h&F+zEQEMB4zfTbYr_ zeGd$ zDoX>&BPZ26*VfDwzZ~Z$K~QnY`O5nqr=S#?Uyh6yM6IwKXJ}fs*A~9xr0=>bVsoHp z`L-pHf2o)GOAHtpK1ZwOW07` z@o>r6SB*{58MymH*;NDDvirT3VZ~U17iNTO>CaJ45!=?Nv_zC(u#$4`nP}ugKt{=` zn0H+#-SJUsTM(edMd44R4Xnug>DH?J9_r2UeGHVe>_a31wQTlANy)J#s|ihSOVVF> zl5Mb;*7u;j-(ZwhD?>vhCqNghqDGz9tgGccg88c{Jv2w;V8`g$gAoW+UwgRNCWMYm zltm;{DBWkXy{{EaQ#0WxmpAA#=}h&E;_W1UVDY6BJ6_MN)mPQ_^k02=A5>hZuFeGH zjIfzZj<($dY<`I9FMsj1yFw?T&zLXSQ?f(KWgwkAmO$^{Jl^o@TgNx_&r8cI-)=(* z$7P3)?aCu(i)cJd^((YY{_;g2Mzyo5O~vPk^z}hvD2(l{C4>G>)|_ovhxN{~(44AB z*8~WAI6|8?B*LrtwQ_%Jce@EV)>2B8l#BS%uP@vyDy!{y@F&s_$qpxVW>Wl3#6>9I z)1IE%nnV6&NI_rZolz=XN#m(cT}mRdDP}`t0Hb5c9m^tq3pyphDD6@X$*)1wWn3l! zI0)2c0$s#(Zx(C!b(IYdmP4E@$(-E$@9W=;;WfKjPS&>L(5ldHnnu-QXJXt{7pzj> zmEkG(=id4y2v-kuSBle|o5YP_o)Rd7GJoP{2F!x2)EEHvIynbvpV&WEyf;Ppr2;`H zDkR(x;?XKIM-oSzEd4QFr<+ix@d}pWk;bHR8qQe}l<_>PgBg6clPM4 z(&AJ~i2FGWvSPmDvJHc%p%M=uFQ@}hl92Fh34=+!q${sU-7k6Z2tOj(%?hd6s2sR))y*%BS+%K&i?ZCqs6hhZu=!-+Cau7o-Wu%o#@qP?I z&xb$ME;(w<0T{AwtwP(5;T0V0d$RMe=){;Fp6DMN(R|wuZg=`r{H)?-LHGnlfW8cY zMK?D(?G)<@8y1%ta9&rwpjXfM&QvW=bD}C;HVFu}Bx;+}r=s_7DCvk&IAB!KMppYp zmW7=eO^i?{0G3yEJGeG+12=Mc-Tp?Xkr{l34MSBDf1Kd4!8H1IGx^o95J!{svnY^% z?v2oXip8KLUAd^+M}#i@UeM}}O&*D5CKTR!*@}jsv~d_aGj0+qtrR_23kN~EjBP54 zClfjwmWOC;PS%{1W}|?r3C;>LsbJQ^8bY{xii`Bt@VX4;*sl`=U+Eb^(K3z;^G3Q{ z221pdXSc8D?nA|?FWzB$KD(M zJGon!6k!qN$J-^OSk^f5$My7~v@om3SXGQFsvP=L4q#{gt7*`UWOkKv*H+u0c*Nlx_0$S&!yQz*l~A;Z&60 zu>F8@1s}hTX5hzFw9T+2vyI`1!sm}&Sq?#Yj9qkC5b%~pivPHfz?X>1giHI1ZwT+O zi_J{?90#DvRIStGOs6BZFCE~&vf473t@^c>;Y~kJma_E8<0s|<(4)5I4{3G7bb3xK z@v7X^4ePl<5Wl3IbUulb*0LR8kZr~WVCVha|NROHHu3LVGFIkZS#Mns`N%f7)x~n z>pJ#!CQp_#gl#>qy>T$^($3@O6(I<9- zOa#Q)h8KV@;0|SUmfO5sju=dO1uoV~Z|j%qCN>c3MTlI+3#wW#J2jQ(AyH815&rBz zK*rYjP2E1Z#tdQ=D2`oJBF>~{M;gCEnORsi8dJhUar8;>m{{Q>axbfw(M&k~@ zy1z0Z)Hf<{v!kC@ldZbMqHtT%Yo{od?rX-Seh@?-6fgxGCl_ZI2H^Q?Rw=j#Cq+ zWLilgBgpwaoikBHJDpa$c1~6abr_;<+DVs5sEE~h0;*yT>7>^W`!>o)z$>m^YX0l# zdJjHzXx>GC9<4GFi8t)(Tm>>r&L3iZcH{dB?Ecp>QzX`4Qv)%soAfhIX1wW|rab^| zOz8zcHObofc}eD{RcAzIwQ|ekw8Xe7gCHn5u78J>!Fh-unud9kivkEp;6yqqQ6AIx zsdg(|+?F#x_2tng*8OZSk2n8yXUtgS=7$p%1hGrb{P2d!?Z{^=&rw}XLMmA)stcqD zTIL4MjY13CHUG{$7Uf=OQO56rvG*nQB27$Me)*df0r9TNOWqUDuF@V_L|QVL@g@q( zh;2hV>0tP%94=P=JIC~H*?ASl@kK-YHNOYHdJo{_1`qd@-8j8*l+(!W$yZ|&bEtSj z&(`0sq0%Klsj-DfBH@aa>|Dpo847g`9Eje&ulp&cUr)lJ>+FbeRMh>ZiqSJ(oOadY zg5)8@oqktm&-Mqfs??Ek{qB=PHNP*`nIs5&Fm65 zU@@Z$sHmny1ve>vVsgzrA9+h0xEs)X#qrED=8l&3uK&TrWzI^efTK|jSYwA9f63a>ZYl|vxorBCiOQ(6* zLE#hpAidgirjqhJ8%-6`xuuMKejv{4UrY&V-iM{v!x)E9+2fo$0itZ67NxxD%v*AYiziH1f0%ZhSqvgj#6uKcAfe@7nqL{9+)Pj9ZdtguYV*9c-bkOS!7&Q z80Cp@v6%%C3h7iUHTrJF6g!W#7gp+`9mF?V3PuR4+Y4g9mcoI4A=&$1x9i6UwYy7;!$(1ow@l zlGXf;ZvCX~ZLKhW~LW=ay^BE7FYNQGD?aT=f*K&TfH=kJ#-io-npOi~qxv~UuPku${)(+dgw z>UToHIU(aIHFt|`)F_^2?-dpc?%zk%L z@9O>dh+t$)sM32taKv5@s=8$LQPDfX($?cztDAg?5EzvGu)hY#xN!FL{61=YhKShw z<@pG^Mm1*qokdn1b@a}loT4ld&$7#aqi?o1K$KBUVi!1e^{js3)wrc(Zd258^tgIo ztjcx;rWbBbR-1Y=jM5*gE8^v7SBzqb#AB=<3{RbL%Ac?ZFY%A^3KYQYMgp@d!LN_! zsOxPHMD3A|KSuRmtsO%F=8u#BUSlKquWG@W zR2U5!5s8+JD8y$q$%RH&495w4-kdw^2GQze(GBk`n(Jfa)2TDG8S8*&m%~+=jd2bh zz?#j8k`-LpLg`KP+3+WIE~+c;ZZDYL(_Z1G_DoXc#y+Ixk&gv5dQ#}C6q_uEUY$vu zoWd}QJ zU4fX4vKa*Ix?34^VFvb0ihXrhbA6lgx7tBx)!-Qo;3e!#wA2zM%MI>TP^;4p)EEtv zM3(O_BepW9-46Ar48fjs@c5-x@8W#gDa0`iA-8mPO(%Gg%(<*H^;yK(;D~Bu*e^Mw zZzo-a-4;bJ(tiRlbq)JoPJ&VKdX6{Vq9E$ZREf|UEsTjc}71)R(j34e7f!I*sE ztqtx8f6HGB0@>N}L+u~}zLi%x**Y80dp2rLl)h!p$Sa-PNnKb;{k&zS0yT-Q_zl=YJYSTD9RTQ<3_frot~w6q@^&X?3*Qj=W#q-aS^xZi`J;_(bf z*Lzbg)*O6e0w;~>;sjlCeFKF6wfivh23^O*%)){m*mWG%J~EgI75x_1B*rnVs-C*8 zeEsO?1`YuOl3$t{L}=$Jwq@K`Wa^YUf;g^L(bY>!R6Th$5{dK9EMfz0i~8zrvb0!B zvY_k$&$i26nhHw-O*}7l4 zx{Af~QTZUZrl(M(jZ3t{9U;ll;Yzy0HoLq&;-;8fPtp3yvR;_2F~4kpzDWh-P$#0R#l?;!>&-oT z{cvVkU(^VrNqb1bCfif~t%7sj{U-V$>!U1GDu>qU8~YJiLN=_zS*x2&2SfecgbLbB zdae1n@OB+zQud^7AaEJl0Z;Wdd-Z~qr~$1N1zIV^X&p80ekZ1lOEj+tY z%B!jdX6LdANDX(De~VEsy1S#DPoQ@_7=WgGl9ou;ScLRbf8?LC-%-(=5`>JFtsY>UhN^dV5|w=M`hoJifBa z+#EIY!jKyIL+TSLWwg#LFw`)x*p7UO6QmX4V6oP)BcnAB7W>zkK&5OC$oU9Ky7QYb zwLBn&H1Fx6X&nyvOvtxmsrDxO3+R&$aG@P|Ojl!-ZId$a(-`maXC-;_a=@+zj%mt@ zY_lgS12LVLg8$OxcFN;=;5GG%eUesQ?NK_D;1-l#{N8^^&5>c!l}(& z#3Z~GaB~1Zu!h#O%~#bfHahyDGGQ7-)yXf%B+DgSW3D^ zY>_s(-40&k<;p5(G6j@dgV?sZ1dm<2e5VD8w2b9AH2dJ&QSE3mL!^v9$(l$=On@4s z{hA|Tl{?V!7v+CNZBZ7~uoWxS^oF!WpLK=$^7G8;0FhgpZQg+hU?ogdE3ZW9rPEzaE<;mbQw-e3kGkz8V%)m=#>2;0-9L>nWr3&&pL29Ho z#a)pZnL>hz1@Snk!u0xS0ZeV;3J}#Ix8kzclpcB6kr*Ce2aAKV&HK?>S3;s$Xbw9j z9b5HLvKV#z{wW}CC~u-N*}u3_Bn69x@NSRXB*R!sFdCgY^`+~0Mv2B1M8^I?L!ExA*1MgbJeh%?f^>sx-< zk>wv0Q}r4@BjVM3l3V7|nWVcr3iKzt!50#n`Q!5$dSrQ5rKXMB7q%|$n1<~y}%MtX@Gt1B0i`8&-pMQn9xSXP2*u`w-$|Ar57?FtG$&_58j z?b=()G_Y9@Pv(jb9fdk}$Z{B?YI<=$c~Hss@?Y&XKVbe8omguCo6w3Khs= zBMvYq7X!Mt*W+cpJ)J_wW>RO5EIV0E>S1$oD|1@Pa4tef(W4;hqZfx0ptI5a7CF3)E}f5gn2)fW%QXkPM?{Y8GcZm??T-Y(;5 zvJTB10acJQ@nXag%RnN%JN-L1T?v$!*}Wq^GKIO+l1wu%$ElS-Xrb((wp(urT}Sx$ zW6%lI$bGL|$U&>zhdT;fNmF*Tvl@Cw8kg)sk!DBvx9fUzrxs(FX=IAq%{JbVZgRzN zJH5D&d+<*|B!#;C?;RcK;m-tLd9i>?6n=4pj4%sQPY^uUzAU&4uVng4lx?58P)s{e z{#D;r6wbk3$C`_aC=Kp>_z*%upB)fVCoZy!jTq5#R$g>5U?+nmio2<~B+$EOga!gWBDNbrdr2?x4-5oH2oR)gQBqWY?N6A-4otA~clXZLoY- zUV`KX%Gy@!k5t)=Jg1}cNNhms$=(sgeEj4vuI|2<4%ozhWqu>%@U=N+RNZJ5IQ#ATb#^d>YIFKNV%OJ4!q1rH_;gRtfyI$5J z=TM})yh`_7^buL{$gja<->3e=2=GTF7o)q)_|Tn1#Q>wmQ+B$PxV_AWW=HVXQ4d-% zL)|`Ddx0SDv9HEiRWLb=vG@|ZRrM!U!EL3F4$^e&(%6-c-y{&Hl4A{y0M9`wV~|S- z(=>8=zQiucI*dBDwW$|M5?CwYUF_{{9rd~4p%>h4BNv2Ev9L_Sj}MW?T5cq$43xDO zgrFc)J#8ul4iGIwNXQr&6mr*6tfp%IRL#^e7f2%$fU~uPaUX?|s&Xf-3ay z@Z$ZPql+c@T>P4V{)VxznoKF1&eo%|T=*ENIN{l5+uoQ`Qe`3RLGP#reF+KIN5kqppcrXG=X>!AiSBGKRr?`H ztnV~@{af(w?&DOieX(80bl8&-k1jmWwHeOSjqmOZ|KC#gzgZn01`%+-`R4z(*7K_v zfCs9jP5a!)Uzeh`s~;E-Gs3W5(+#`@99R(Y0&g?`P93mmTLTS^X`TvPFp{?J;3+J( zdjnVdr_~kS&fUIpt>y8R%jb3NZ?AjjxYPQ3#jC^atJiuw`=gzAg5BL%s*UQTVTNk%h>s7za*5B>^)}TqV{vyx^lLdZ! zeYdLkx3gBoH^xl6YbV|7B-O4J2OW{$6}#8TAp5=&&|@ZNowrx>Y`pjHX>-%lzsiR< z-;}WbD}4Rm&1akSt=}Dz|MTF`<12>ji4Ql6Y0b^|o~srA=)r@PE8EjoZrQxa*hkpo z_n(K0&%JsbrkLk;%&n@r;6&o_+pP|F)%M(dSLK&zd_!M3xA^1tP5n2f)!a=xzF+H# z(ZltH^USg(sy{3Y`Tr?cY~|f6i-I$5{}$R<|M$a&uVT8J?|qCC4BDSo6{ih!;1TCP zO-p0Lr!yQq@$dDM^FOyu{AXu%<8JvhV0+mA?Ol7F`j4fvKZxA4k8W+9Ds=gv?tGhQ zP2+-&&${#P{5L<;_y5@J{eRz2lYchv^uK?T)oY#E=5P7$pSb*Njl!Ev4rPz4JHISC z-Zx3{xQ)Y9i`bujyKMK{ z#w#aY%rM|;eHOjIKtc3_sLE$ zZhh~n8+UE@{;+ixTvwejQRMg2zXuO1RsZ&XE59>WZ2R`6>9y0i8usrzmHgnm)r+;Z zUlu$+`)ZGieVL@ckMqW}z-0PSp;X?+)Kx8Vhn)SF56qWly^bx}vf{^Ix6`4)fs>y^sS=%fb5*Ju4N{d)b^g||t!KMVb> zh|``baBsWKQQ)2Sz?i@OI*`Bm%Z_*H{&TCs;>*k9!=IZ5Kz;mIZoN zPebNdL?8XT<8kmQ-TH6-@js7p_lFQ6*i*(_U7r zKi2xb=DfK6-=15^Gj{Tw=P(2Ai9FcwuP32?|Hs8Sn~i;vG^EcqS{d9HVB5i6+AvcU zWCA)G92#c;W&k=l1~r8?Ej$W2WdJ#k06LICE;BMTF+4c} zH8X$w00KBQU;Y39GdGC-05du{X#W6UIysVMH~=k0Lt!~OhBg32ML}aXi;*}0IZkDb zI5&zoWJXX|0bi&9XJ=4SPXK4OXjDHpV`DLAkNGtMPhxF2WwQA+HC$n1TViSaGhb(A zJYi&DU}R(K z5}pw=hRg(}6Zc;LUxS4;kdFtn=KDX!nM8Qoc@?qNARnoE|Afq{s9a*T+Em6=O~`3vxBkhadX2P?QOsj&#bDu~TC1(9!>Ep5 z%VnCe$z9BEPtskDw%vEfX0x_ulC}P6&U0|gbbP_%eamt4s$RCZwSmul+_hx5wg0-j zxv0U+jnICK%ge#Re`(%u`l`*nzr4P|rTnptsLY0l&G3=ai2kpx&A+DqwqyFN?z_ag zm(!bj-i6=6fV#`KnAwz-*|50G%AwemkKmKQ%+1iwg~`pf$;`sa%*nabwT;~Uq28g( z&da#lkF4IMo8iK*-LH!6hxE;d@6U&v;p400t<%-gwcGu};GClBqutw)x8$?1=)3pM z@WJ5YzvZ~o-O|J6!`j{2;^3YB+>PSlzW>^_-{Ib?@bb&-$jk7l<>%zo?$OEc^0fT4 z-0#!d@!Yfj+41nJ@bJvC|Nr;z&EfXp_3!TQ@$TpK;o1MU?Dy;5|Jv98|MvU#|Npc9 z|J(il{Qv*|A^!_bMO0HmK~P09E-(WD0000X{t-iRWnpw>WFU8GbZ8()Nlj1yA^8LV z`T+j`EC2ui0P_Ka0RRa80FwwDNU)&6g9sBUT*$DY!-o(fN}NcsqQ#3CGiuz(v7^V2 z1pSE|NwTELlPFWFT*fZK!qslEtT16Dn-r~qG-csNjju0-d;x8el!^0Z?$2}#3AFJ8pnM~R zLxO9|71w}%BN15KX#KTtTsZb2$H{sSPNyMV+nv-QQQdv$Pl(@1RZ=tF;6su(kWB`G z5B${5r5mx!IYF4FEtKqmDlK2%o#H+3BIk?Ko)z zLkdd3I{v55AfKENj0z~0xL(C2bx4Ki<#%e0hl?`pix@dX{yN= z>8udSS#NT=7VOlnBPP`ym^6XsPdlR&OHw*vAX}xQ%i;_0F~(8YqsJm;9PntN`imO4 zwSZgXyancb7ikhq=cZP4ssu_%BY)r>i6v7Dq zv~bicIh+nIWtMbi)(;-z<|7AcTy)13E?V}^;g(FYeLf?-D$`Wzk#uoC25D{GxW#ZP z{%TapXIdjiyW69ZGk`p4(c${N!rV$XZWPqLYWHhQ4*N5n#1Dr-h>M%vDz?$jdcA_R z4d`j##@=FfOf9W_HcNm{E*kco5+0r}jvhOhF13pnc zW_+gR+3ZH+81AJ0a}MLywJ1I*ie-oML7(IUoNXzJGD9n11REGX0L+MI3e?~9Hb^}W zJ&s}20ipJSMUr+r20fY^9|wQ-yPdQRCpKE440Cdw8d@(WA`Bt0P_hrkU~M1%Gek*m ze!>KDg(h}EOk%;75CJ6~CWcOoqK1}WA}Lz&idfW2<+8}dE_!h&Tl}IJ$4Ew)P_c|? zOrsi4!o)SY@r`2)BOK>QM;WGt4|B+)9{0${KKhZ5Z+OET0vX6b3i6MLOr#?Hc*sRM z@{y24UH+$*~xzX^P*XyqB-q}%unt!o1E2l_ zh<4JJCgr9)L%Gn3V)Ug~@ybTeiBOM*l%S)8CMcx|%anovn?BX0L|N)di^BA%O$q2W z-5E-XauTGXTxnC|$xwmTGpMp0>Qsx0)UGl`sVXgLLJ4}+gYGky3a#oqdy3UvN_CcO z<)>HYiWIOKv!+C?B|cFqOIOBqo_uX97_>S|sDhKOh?Pq@t;tlldQ_~@d?qe=3fXD` zRj`Der5DaB*Ti}jEsLdRU}MQyQ2 zs?W;$a<^H1C2M2r+jGM9mWDm7ZI@edmSjlHE)Ckoubj#j!PwdQrV`CMAMwzJF) zuNfDc-B613n5j+fCv&Pz%Ifm65q+yR)eBzn+IJ;NJ*8~%ic8>rccSt&=4x9zT<->$ zvAd=1eHUC3yAF7u)~qglJzCvk3ip<>y=8ZG*-}s{n86^nYe=O);^I1%v;|h?b_HDC zSgzQ-2c~H(KMdjpi}<7y#&BON995m#)4iaCuV!O>&gp)V#x=I@jSsp?1jE(D&?Pd0 z5By(mN|~m`MRJnEyX1m4nVtnUa%_2A&9wFw#wk8${*Gr06X56vHmK^)X{e;2TUA9+ z17wMz7$h{nbxKlo26Rs#DCm-qB7Xp|!J|%+8*mi}(M*GmNv`o{l7yoKu~D>Lx?ImM z=aS58-Yb+D+v3q~IHJ|nvPl{ZnmxOQ&?A@f@dS0N;u_C z39qM;?w1%U&JgTVR@QA2Jo#o%j^5YFj=i2rPsZQN{uHh2(q+zG`^2;i^-f9I%7#1q z;Si5_#8*k;g>WP=Y(RgofetDDK8_j@P{Z7I9(ksdr1FxVJl?U%K@(!b zpOyo_Hy$qcN0tq44|hVkE+x#CZy1xMts@&kwS;S+!CbVFY9#|BQ(_4n@7 z4E;0!$bmlm(DlU!r}5GLeAn@m`qg*+>%Z>D%mIZbP5atPQm}gqF3S4B>C|m;e2M zGJmE{W5jZso&G-el&~*w4M_W$_xP7|>6d(b!hUvUZ)Z1vc1CYW*C3~20VmgQsljS1 z5pv2#FLtJU!-jUv2VJ{$aJ!UdzLa;^7F3OOR{DiX+NVp=H&QVnC{;jfg7R^~AwaM3 z9Iyf?6j&R#ClVo-gQWt0;wNukCutI-8ar5o(c@?^5uu{ZKs1Ncd zj_rtwRoIdlSb*(E{(n>$iVG-;@Ih$lc6KN+jW=j~Yxs?9s6qTleFjF9x-@+URZ*U> z2w>m|d;kVykPRl04x_M(rUhI88BLpoN+}jsRCQ!B0YNv}Dd0j1ulEgPD22Dec#a2- zM;CdmhmEjimT#GsdFE_Bc$T1dlG~`3S}>C$S!rw;dwMy0KKn8Ol5}vS0yl@iuzzZ|A zN+hUG!MIaf*>}Ihb&5rI@SsEzzw6Y zkWd*3(x6GN$r92aq9y24UH}E!CZjXzRW)j(9_mY@CJkUP3I|%HPq|5afDFhW4GNkP z*}!&4DqLj7q)m!cPpXGe8j!Mt4ERu`BQXczWDY*+Nn{WSDnt^=^MDOtzz0k@ON;QOCDEXLPl0-&gL+?? zlwA9{OK#Unsme_Wh7G*HsiIY&uxXWN)=;CAOlReb^);%?l}Vv0rL^Rt3sq9TG)f-2 zW>&xksyPb0P^YRTRaR;ed#YJ|3Si0PTIa=8yvk+dwNKTRf~f_nD=LSevMIC?#9iR9R*^E+PS$(0Ob;sgq$CJSEuxmI;}NHUW;w679CFRuNDg zc3LS2Wt?T9xujmJITEeO4MzHqp=1uy+NnRbhfQ@|O!^+i=_%jvd&Opp{^}WRi2koE zTYLU+4VadTeW_~-n^e>`thu_XM|zB(MuO5X5>%S8q83Y)q!>htPmB6Vl9iMpD^^TO zK}slR`$&7nx3W3ch7eS1*O{;{YqK}I6wbw!U_eUDw3Wp##X>!4h5PHc)M_Ewg@I6w{uHV48@_h>bER0egQ(3&?%pdR($+M zdpU5jLRV?+CcCRva+yGEnumC|S8kGvdb{hG_CQP4%ehr`s2){H7r_x2ueXFvRn<~tz_B8Mx7lh;eOwZM zd{eE3mE2UwH4GfLv9j_TXY?DCb3jwIZ^-RwM$+-xY^lUQ(a!B;=DL6?VTmqE!K zA$JUlsT+6#&XwtP!;Bb(`cPNZOq@$oY?Vr600=5lq@!@mw}hhMLCw@Ux3wv#Faf;z zigku7pR#zhgCj&f9aRWtOfm|%RUx%ZAJlhQ5v<3>l8}e)HVFnHIV_$S6cr3X}3AIq!bDMfDaE029*G- z+awDnQN#?rUdP1u$txo3HHPW;p-2p zT&vbfzSeZFWxW(6`xJ`3*e%i6fb3C44a5zVq|NXK?y8V+-AV2`5|m0{fUSLNYNn{2 zMyhR43#Z#w#g$edF_FLvgaCJ)3<)Pux=sAUJN~v!zWv)}6x@R~huRj|4V_AWKoX09 z4EvC!rnF3Pm$sb52S8L3L#?(awSwHOt=8>N*u9_TyHy;uPN}p^kT43%FbAQF4XZ4y zs6+^x?GMn6VefR`q*dFnJKvY2R2({e*NkDHT1uXfkdUxUY%m9wnzW!q21|Sr$Z&nZ z=u`}j%-U4l5dK9Ho^4J1hvZ5I3c3gtT-TmJt7PB_Bzh9*KnALmo5)yPzm($mz2YrC zPA?u?UCFv*wMlcJB9NfaB*6``Pzi2Z38TOb>kXS+ElNT@uTFTL1|` z-4di*zAN=jZw=ZUwofc>>Qt0PQNM`%q=(oPMLPcb59ctgJU)bF5Z}jgP9PHZuY34;{a~xdX zdRp}^@d+i}z3K34!~>zVrlVE{DzN1L}a^EAIf#Z>0xTJHMfp*f$2602V;2=nyChjiQUM~_A#uSw{= zO?%kx2wY+0KEW5y#LL+E?5BVhE_HKXoId?9TZxfEP`IIkhov-(n zCi=va`In#h_CoqA!4D2V8he5$Ou&CF|Lh41IYUFX`y zSD2poX3i3=ZzMyoKbZbc`KM3!sxSSi|NL-2_n~k7*H3JD&;8Snuw{cBB5*&*p#k6j zf^T07s_{Zaq5HfqP_|T7#7(Sicnj0MsC%&tEta z*F=;s*vQ{RhWf%Sh}X}BvW6WMQaoVr!nK48J%$Sj;DW`F0w?+-D3PCoV<-U-h*#0% zM}h_s5{bx=2u_XxR!tAVZS+!U}|n zkmb#sQX{@x7!oJH1|k(Qbfd)|6EPi^22DsesNA+$lde2_3@$$j@!&p&99i;Y9zWQC zu>wZ(X3m{GcmCcY1&kLjnnQ2-oLY5eFmo0`;zQ=MXfk{%L7J0#&Sln|*(_Rg*|TWX zo%wiS&Dx6;)Ww~%nH-r3fEg1RJ4TvNCs_oFYvHusSkI3}{8W%cU(z34svb>}yw{-p zy~aCV)~b%5z1A7q)$c?}qFP2eKqmS4^Dn;kt|`!;0Y3t;!2#*RPCc?D90?<>c|Tm0~;6~K!wNFgDsj5p_w z-)?9NQb7Z+P zwMhIq{?3amtO%{NCsl)PNVsaDE-ALMyUV?q6q~4tW1LVXhj1MA%fh4FBa708Qex|+ z>zHU{y9GEZ6hcDZoAj=%R0;=?I=BURr@aLkky2y z>on3r)BDI%P-8{PRtOLEGur5uuxtx5_goFR(|q$JPSxh{a%kI zjg3`0LmE@I)Pwy?wc|obvA9xSNle(ot3p<|0i!JHj#TtwCe-AGdbRIYjCe$9XN)WU zO;zV*ZRSof9`|x;V5KLbmW?F?E-tixo7)T+fA)3G9Dh8~Yz})~ng2^ z8*kM0XCC3eAlI8O%bdt;d;LiV8*b8J8=KD{d1;OR+RSOLY zsyE}qoO7M)#2Y>|BYUDzu=EB^FxXIc9za+lLtcNf*$lb-;Wy66%Wf0#1pod#p)Rv= z#v3m|M!)`L1wD;VGl(0KS6q^-y?iAs2w{*xfMgxcJ?ME50+d}o=#dnvg@Z5Yhwng= zsTF!?I%>&SQ5;jl6e=Zo6S-ljUP!z67(_1})WUS4f-EKCFo zVf>?y77oiN3F%?dzBjP&SBuJV$uZ97cdNtQAkH~WRD{0Ak|Isdn2-BCN;T9PIl6fWn|+h5*P_t zRKj0#7{w^!R0&{w$rGbs!zi#JjYyym81F;IMAG3Ld`x70{Nl{r%>G6$b=faob^GJi zJR?Vc;A=B?BbO{NLp5tjp@P_Iq$is$)nx7vdI+0Fzh71|qOfLN~iY;iBYlQ=i zB9Sywm6p}4XGLpTP0CW|Sj%7Mo5wzcW2S7dW=hP_X;bg1{+V1t;%xpnS4@?unu;Qo zGsKyLE}KdxD+qFHQoUPMJJY9mT#%q?07FG9t5ov+E2N$wYf1@H9X~JTniZZh;V6WsOdykXN`BbTgg+>|f9IKz}r&IEZ_jX)*)c0WP*qceE%( zBkLJKazis#bEsyp;Y*J?2c)S9ZFHDWNv*t!I*>7sLImSY{)otka2cR?`CMLna1K4HF;fzKk`}G&2%ETLiJxBQ=>J17;`gLNP}SENG?7g zlDTC|reryj4f%nA3=PG{JLl2RU5XD$uw7($CBp>%97^YiFWHL4z{xyKm5{wOo-br{ z5)=Iv*~mwJ47Kd^neQHHz?gC4D3+90d+8}14AzW;&m~kgG;|)`I@?~ME6~lbfw=hi z5{EH!UAP?3A0mFJKk#uG|4C*M-F=cvD=1^g=s^pny%{-k7nu6+XmW~rjGuY-5V2&g zEARC)k|jN9)++g<{t9qv25hY;ubImJNCR`O%o!~UH_mmd#3I@^k-f&xqMZPaEE?*M zqUw=OYvwD6r}}2ikYN!drmBe>Y7Sx-n_SifE4Dz&XShTf&`h}Tp!IQ`_0)%9rmM?a zoL#$^Wp7s>!6c={J?@lNMo%z?+JIx*>CFCo`jAo>b%P%q++0rvYi!^rWSr?-Tx$l{ zW=rs7=C=jrTDLPN#v^A9XDu&C%PV$y4C;hTXva|d+SSI+0^IR%mAK)HrUF%q08MU^ zmz)7=WiG8jrN)Zfm!&2wXeRv%-JNUYJ;?{l$%;Q|4iKjpI z+8J3)L>hQD9J42GUua9FBGl$lq^TW4L{Sms-xd*RO+I$AXOddxV1r^R2sBb3Op!xlab-yR6M_fA^BFK$n|EluT#hcLT32LQi7oAK;3q&@( z?ZrR-mlP@a<2!!8$!AUPW*S@PSN~>;FMs$SDgDe(Esr%hIr8`4|3#X=fSEtuOAUW1 zj^MK(!t)H>LqPglq&*ovMoO*G+CS~{zYDCrBAF&OBEZpbzyEqb%}~I!i@^BPjQiV` z@d?1O!oU`E!Lrl96?_sDT)xl90{D}`fJr{yo4*tkz7S-=7Zk!FoHQO-0^#VuJgdR_ zdoA`0tF+sU5v;qAB0wLs{-7Kb7$VfdExfNKI6~97KO{*)G{Q6>>*<7d~X8R#c;F#1@Zwnq~AvHi|>=n#OZP$CvnlYBWAvJi`YZ$AIwyD1ZV#EJiiN zjMDHZ)@VjGOvF9@Y`An3$Y@;0G^k61!fMjT%t*ghEJFdzjFsGie#FNO>?|j2K8~bG4D`rV6h_d~Ml(XA zOEkt0bjXLiN9Uj*maNE;)ID@7vzlZ|I=smRbjSER$^z_{Cp>jOBXE5GjzY8Lk@O& zsnn3di+mE4lmaMFlEq}q#&pcbgiO*P9FVlE7aX~5x(fR`r^}QUn+X!moFvffzrO5@ zIP8s`d=mbWbdDXQOIe)E$b`+&zcQGTodn&IHbA3D4*-&Z!$urSZ-4 zEHdT%MW~#@!yHT`fj`PL9Omc^>zvMygus9-t%QJzBdUn7P#vKlik9e}Y|ElSVKhZ3 zh)!A1291kG6N2g@_#W2*GFy4)qEby3GxRxcf>0b__=S#KXs*YZXr z3I0sb!_WM@uottYnH15L(GU&+37IIg=$W47>5uNH1%VilYcNwZy#NY%4;?uWhHz6k zjnnT$k^5kg|L76@pq?!yGFj=_IP6OMd(V%;%eu@?Qv?_-{UJK_rdoNG zNR^bYLl~3Ejt~-|p|KQTy$NBJFZya0?$gsvDHdMM8Ij|ab#NK%z?2a>42sd24gr~J zH5gX0l~kFDM^G3C5LaxCP?hLaUJ=$=`Bc^l)uHUH(mX*k>`8VKM8kxVb6dVD{(Z?< zM8o^p&Xdszx}cR>-PM~3xn02(g$**@Y1r>X6`Da#AljHy;%#}F`4I$WWWfh6V zR!`AZ=sDKh0oidCSM?%S%?SsIP1lgYnSq^F{5sMxc~$qk(o<|w^kY?|OsWICSq_Yv zSEW@`5j3*k9j?pR{qRuh=+kfW)m<5#Un!B$X;a*R7UF3fi**m;3BS0&HZqMJ)%jC8 z72Bk3fnLC!g9)AxK~&qBl&L)$o$xlvi5yBw4;#r?uQi^hJr=a>y49kAQmj|$oWdvl zFZw)7?~2mY2*e}dSDwtY<%luc%oOiiocGGub6ts~NYI!0RjAdDZ!MMnE?Nt8HC_0M zico2ylE7RTlA#C%j~en;gD6oQ@=?~qP$2pubJZc<#i3;NA(d%eU@cG)Y71P!qSjT2 zCkoNH&9-P;t+L$N3u_KMNwx`6L)yH`ZM+s_j9gh<4c(i`jpRQe+)YMQ&cdb06I`R} z-Nx&TRr$nODGgeLT*dnZ*u8`da3aF=UBsG=Nj;$;@#Lt@FGt%D!{H!L) zMgFB=@ng@#mCH1`PI=s54^+XVY~0a!U?nvuTrA%TMqwkn;IK+e#pPLGtWO{eVL-gj z?^Vc|)YHgFp+?<8^>n_V=}*l>Cjd4lA1D^pufr?kDG0Y@S%?aYqoY*lkPVW@r-^5}g?j$6p;i9xsV5-k# zERHDtuS~noqr~Ai4m3;RVk{04XyJz;7*0V}Oe1y(D?qKM2VaUDTs=V7iruxi z8A6L7MHL+7VYZ!69yN<19X*Yx)S%H(0ASDyP_$R&*`#wKa$wl*cytLxJS z!8!}^)T1%f1|bm{p`;!8kLe(-f=<_CnN;>NW(+|OPYsWF7?1Ke50+iiV>n+!Z3v8z z=*;Aqik4Qf?NViE>4x}c_#o7SK~!^wX-Hk^=D}2oGh=je=cM|*r)l7T31y;e&2hw6 z_#|M;g_=M{*lHbFXB8A6Az0Eo3ers$hHV{40+bxd)u@gYEtWQ_g^!tq3q@fRM}d@( z72VS%5b&64tL9Dn2-l63R`955W;qpNwN|hzJ(As=l#LK&JzZE?D^U$!nBR}r zODWAsE49w51jQ?M){og(jE#({Mv9ZoYF%L&{*rOz@bK7HF%-^OWU_9V5o(x+iI|BA zk(#+_QgMSkwXZIw>y<72A!s z6*At8YgZAilp^|y#VDc9W!bha-oR-7fIr*a?i=!Rg=@md-Q0B*bQNCm^1gCrnBGkZ z@GxEGMWPov?8Ng#1eE99W9&UPL&Gd(rEbT{?!R!`;!L(ZIo?bGveo=mB7%1^!(ak zM;~i89(I&6b}giJgDk)`|L}W;)j|y6D1NKMOyxxvc1BO_fjJaN4%p<5q?iI`?EJcP<=UXD8u$ zX6#LOQawRj4*tdwE)GDJmRQaS15MVk;8^jv7qGPk*=iB zUDQr>3@^pFjy8{lWeG*~Ta@uuv&U1U`H&0Y`}R22nvM&vKW^-~S~7iGJyrV|;O=8l z=%-(I>lH&>H}yOA!2Y7%WBc`VTUSKvz6)->l&>BUM7vfY`j5QEI8JeW;Vss-#%%Pc z*1K+3v~H9~k?pOHS>)WJTuFWX2JGD&?q4x|sg7CTA((jJ6p_i8k~{e6#?l#l_xF2l zO#Jn6wQ$i$F@cnUFIBylZb z$CN5pvTW({CCrvfmaqY1^CnK4R&w&h>BURWoL+VYEozkKmZ4CjSh2F@Xi=g;n?8kV z)#er{P}#&x{`rt!gGL<(-V3Wz&krpS3+lOWaw0*B4G)^}*RRDffd|xvt9$pDT(Dv# zBILMs;K{Os1^UH1_JmqLKLE$wSW>Y+Ju~EHzL1dN*phEMvrP+eG+76E4F@)>Idnn6 zurtq)t=aaBg>%R5^@p2t+tFQz6E8k|W=*3%uiBJSwWwC+(uX$nl65C_s?weI^dbeQ z^s7UUawQ%y+yMXp+{R76UgKOQ>T8%RSx~-O-wo8~|Er(BM*wJno_g#h6cRNXZhUQbC?_ncEtW~Zcb;N6s!mQY${ zMVCC4XC#?rR#;G(X{xzqnziJ{CYxu%IVYVeA!*c;UuFTFmrhoP)J}Qcbmen7F^Q9Q zeKO}Vz}{`zUMsZWA@RJb^AjO@uheG5jzE`g<9BRYm7LJ0sUvH}1}GmZ2}B;*6N zfCLIa84;Pn{59BNrzA5NLmvwiu~<=O?#V-A3?m z^i3fF868FtKOvoVz@%b3{ptbc`JhF|5BK7&}|ESF7 zPv_j9bho>yY)50_6IjU*c9grNZzTkZn$p~7688WJMEA*BgM`DG{c*5^W$K^ZqE)uC zk&j;ldmB_l7bVXrie$k{Ay68aCYE`yhBnj`2#1FyqNp%v{@YmZ?sk;4o$ORTLsS-I zSSA|Yu!&A&Q^knrEb&RDhwk#;zIawQp_NcnpxcrZl=#FklJQy<`yshRm_?C+FMC`3 z9#oEKlmqI{i01l98S|*eZJjYZiSm|E+PFX#0#Z4G6rupjx5q^?{_NO)GP9Y;@!ZZNc`lT((kfUaV5@@ZyEu1vw6ADfw8Ov|m8=xDm)NZ= z5hXGrENFX0PMAtzs^PioAQgDcDADaZmwhd4CtKQB^|hlbQqN|F^x1>-CVDV=7!!^3 zywKW`lvSzDTBU{BL4NF#F5D=rSeiX8@l}A!)I+A65WAGHY-uN0jb~c|-0*f5dc+ka zsH#*p=?dkn&8doBuhiJ^_4TW;N-kTA^q~S;;Bp?FP`hhk2oCL!VY+ZV`c3uyrmy%3X)N;=U6qDJJopS8nF{^vB zWrBvkR$Jd`YD}V}k>DPRE6f7i;h6F212-Mf@ZMar8OBk_LI|pnSORyMACq^)(o5=! z!6Vi_rT9yd{GxPL%jJpEHet*3?E5r$0IwbHBsF4D1@lAXk<^$YbT-`c-Uk=dOc2hy zu`*Jv=U5<)?_%=}^I>1?v7o8aTkO5bGACqX4U)hOZyJ#v04$u2tVqsiMjig_Y&twk zkk6*BGN7k-C#hITy1pFZce?4`mA0*oW&S2=aj-iV?bhdNgFy%r@)JFVY#NLhu2>`i$ z%L4&ijx>QwECza6SmG!lYmL_IP{`Y$0m_3kndF;dLBHZ0|@}aZ6@3X`AfFEuipdN)gv$Zd@Ugj$;!JH(ZP9Sk4)%$r#0d9dm zLCdUB66TDZRtz2lPEi{EP@oCM#MWKl6{%HbX_nsAS82`GWMzQ{%ANpu!3pM|Ogs|( zX`p0r9}os%@F>OhDBuEO4s{$BO#Pq`HlY(fp%7kH3F;sfb_6K}p=8mZqLdcTy%5|K z5#4kX7edzvVnq!m#bs5Y8j{TweMjXq;M(jH%N5}G%vHIWUm4oO6sn;PvZ1utp?zh? zD+y8t_C&O(my8Wy2Qu1s@F5lYVa|9}0s>0zP~K5ISNEL~q47|YluI7I)K2`LBLW&E z4iD@dUZV*j;r&d>pcG^2#8W53HA+9>8=`(ch&5JkE?;Ffq{6_tzuRvwki z%uSpWYtXQlK;@ z%uQvCs&rA=rI6gD%Sag>)EOb#u}T=7BRW2k4YmqU^a~3$T6T{;oW zPl%#Ef>vBDBKaYsLB7;5y(2JLqSTq)k{rwwb)8l?ZT4V>gCR-RvJl`Vp&0k^hL`0?}2fIO7lzg-zaMR*_RbM%PY4 zCCTwj#$}$kBwf@g3soQ`R2a)rGNn;%okU92F&0bg@ks&UiAJu_N*aYkVI&FRB3Rnq z(Sa2|4gO?N0ArVhkJ$0vAkCVXA)Q>#rRde=AAU?wyi@%x-c;?}AkG^2$jw(0rbmgK z4fe}5`H~#D6foXpPMl(rxSDu`$z)PyLP6YNUS;47i}Q)y&7BbEL{(Qlo@w^os)f)1 zC8l_YPc?O>Cc)-z_MDf|W^JzBZI)E?DV8zf1S=7xKcY+*apN>yqM(#!afZ{XZC3eF z<+*5yDGB5ew$hShB`?vDbzY}43EE!%&P!Hg1PY&2PG_iunc=DC^;8Rb8mFLnqjV6` z&IIPqJ;lO+r+7w1&y^5r>6HZLC)SnN*%YXOhQ~>XR6(JT?oCS&ozS73CxaH(e%d1; z{?%PDaY-*;RPV49f$}G<@m+@!9jL75isB`A!VNQiq1=txCE+7NwWy2kr;5&KZVu5| zkt6WjT?MBL7$*5%5-!ITnZ9Q^&?X`VAm-kqGGBO zbxW72lM&)!t6hbdLTVOVi8eBabP@#}(IWAvYN|=&g=kzQqisN`N z7MNIvxnZIe?4i-(>P*M@ zlNl*W;)@Sc^nEiBp0PTbA&*@Vl|?Zas*0_vah0bRyU^MF>(?q3A7A5Gi}wCk&~s>1vYTQV!|16TFC^=YHKD>2~ZYtH}{nFGGvdsWqhZ|Du&nZyKnA}j1)X>gp(Ed?t_vRCq*lz>3%sts^ z3@*i3R_V7y$E+ISY_;O~S<&X0QjE>*2%n~=f>AbhtG7yv*+S~3hM9LPg@ra_@6oU3 z5RBK}us!AQ-UW=ThXH=#hell@Av1+uyXgS&{F?xYQQiXaU zg{|&f3Ma|9>|A2jjR=D=zJSVgbnyzB@euBb1pi|j4^shdA3GN)(g%4{-anEw47-;5lHk*+XH}gX3EI4~F0*$k$Dkq-! zUpnKGz94erp)PzvaVU%IAA*lQ3nq7>^F6oSHV5%1WAZV(-_4@jAD-=v7UhB-G$`o{ zJI^FkA<7$#+dL0XCuQq&8MH;~O1BL1N5;`n(u~b!?z_Yi>P03=m-OFhDhE>&0Tyae zP7X?cqffnKB-t=c@6n<%Vq~sn(4}!jz3Y0~+E6#CkM{IErlldH@6%p|boQrwa@12Z z(we#pS61H61}9p=BU!bu)pa$O`skyDwHuB8wXAM&mw5+rp36hev|7(x=n6AGv!+^N zARWC^ik7vJ9%^3e(TiS`TWhs7uhQS5D|?YKjNmy)jERofA$m^KpktqFY7{@oaIHaxZsHq+)IlY8;tUt@3eopmFD9 z@cB-2X)lLWY3z2}kYyI0bBk{ASuA-QY|pMI#x+TMC-ZxAkYT#td~>s-dEO9@pSzTu zDcPnwv!#(wryKGZ`Zl+r(5?Q-184s)vB6nt~thdrhPz5>P8+A*j7E zuzx-Vif4kc*Z7bWkFf2ijG;0w{#edS9h)Hudd-A7Ax*oDt%OOVqBV=N&2H^Hm5EVF z91F7jtnlek(Z(Pz?YgoEC$8m{TVQTTIEX10KHc)wPI6Bu7&iL&qT%i}xr{nD$BqM$ zSAm>pQG^igeI}9Z?IKXd`e!!Fv&!S{rmD=1SPf%_ZTmg|J`-NaLh{M;i*}78x3Hzv zr-1js4c-J6g>bU{9CLv==UFzH7o^A3UbS6a?A=?yhDVWSmEYek0Y$W!x0H>|cXjB* z^$k(!_HFAZstm_K)^MUsl@G+rlJ%}kb<3NY%4!5(-+a!(8R=7ge^<_>9%Skf>=W)x zoLk#qTGju)JTier@s7orQ$_jadbFY4!dD^3*OZ7@zrM&Qk z;>z7|mA~!4`%Gf!D20|^%j{eCz6*?GD~0eRd)4deH!agF8S2Lz-WIQx4O<}k+5SAr zmjHwvweDW#hu!9{g!y+7irVQ&Ggal6Vp=+Lzi!s^CCVj40@n2-<2A-Y3$l!0_Ulc~+e=v)&koz2L0?N%&kZ*F!|~LX zlk@I&$J6jS38&y)I!A7ZqLuL zrpPJ;0ib}z8}x+OF0gsl>23&VRYlS#6n+J4q~={D;op!HGop1DuC;+Q!amG>3;Y*~ zLZH$_$Ut;sZYJ?_D*n@?9#sSF_Vww zAk%t90F4(%pPsQk769BRsEJnuo-Ap}K1>utTy{M-7{XHG8;O>!M1N9;JnGp4w-d>q z1~Evd-%qQ~1x*@S`?ZumbREE+Mwi4HBpUFbG`=BbLVJaCNhwK*smh_~L<5t19U<$_(=!^#Md3|%_k5Q9J zIm|Mx$J|eLzHvV-A~az(F3t2wHzu#B@1BEVxcRu;ElT*bYRx6{wB|gmU$EqUz3I8- zhur0{6T-CRz89_7<#v$lDCm5Y6>DI7Qd9#vh^w78c)x7BHh8B1A{&0(jxue3+|Mc+ zem<@`Zht=S#u|cNPiwkCf&U;I|1X|K>i^BtfDQmii`L~!LS7(qb^5-56^yzOYmw8zWvLtyOtw zltQD7Jz6KxI0)1b;=BKh{l)A>?W_~y#?rt{@m({afO@8-+( zR@ZY*eZI>szstW(>+-R{A!EeeO`E5DTcprZ60B`v5*B9=)O)=*T^kEcpWt zQa65MWUEhv;8?Wc00t}75dfYHVaSZFjq{oG#=k{2bq=hJvfUvWLrEfwXj%jPthFt3 z1CZW+86cpo3@gU5NeC(Upe2i-L-#}xDPlnlmEg5^VwT+mD3yu@A)Fx#(eE#eCncr{=#8W;9s{p>tgRfGq1CWVpww7K!L zN;)YUHsFRn@wTl3aF2WksEgB*003vH7uvfAPK5mJzxU>Lx@KUV5MiXsLjPMmJ*%h|f9mae6_*x9o%JW}(qF4Ya5O=P4&NPO z?L5yUlo?j7xt$E=|#VD@mT}h0Um(?&F5=LkL!X zTYc2lg4WM&6|8`EVIaZhZHVWo{CnKQaGq(OYeW9(Fsu{W*#t_Vtr)Z=?=R=7S=ru2 z;PjESJP8UNTY)_R-PVT8E?1Qp7ez|B)vdz?9*Dk2+m<1; zA6e47;LvLQ#|UAa{uJ*BOhJIw4&=t^qIVB@ci$nc8ED~+^mj@NtHq;@wk=yWvM&cY zn7y6$5^5%D(TO-Nc%Xuh?j925$RMo$=uf!@C7e^yUx+TuytHFPupK8{Utpo`er@RZ z$0w->t98NtxCJ=ZCXj69=EPHN8-gb*DPJg|uoU>nA26dM`Hyw+qw(Yv)NMslDt8HK z69<;`W&h!6L}??@NJ)>WC``u|%N5aSYU8Ta-zC>x6w;VVkL%3U(Kk;NF|NM+BD}au z?V(>o^2MDn!DHj;=PzbWP0ui6y-%O9i)Jg3p0x3|fTsP&(`X4#C!`O`*g>!~1=3Er z{8eTC*J<%Cho`!wpbL;B%3+|7PARvmX5N4%v>_-KaA0l|S(jcd1q@xMosRBVhu8MZ z!Qpy?WbQML_)qelaAW;Rj0HJopoL_Za|kxXJOLwC3~n#k(HE>dFrN?}0yNm!r(TwoD6 zCcNV0@4#9(^|HNl!QS9m7RUwSS0#1So2WC5hBNhYyx;;JEnCf!GlmMZ$b7L7dF9&# zB()C{+@soTy4dzuDgMtt$gb}E9;S1lCr-(oF6r<+JjW?0v4C_ z24df5fM}Tco~y%5H^#`WFXU*}e?XV`?7fH@Xjleb=F7%Xkv0C6K?M<*<-tgRY6!U< zKw78WunXVpCfZIzG)Ywsj!x+W+;U^#s;ypad??pT0g81`s8H)|=*kclN|XGdy->$O zG2J7+n|yT(#%@?#S88SCn~gb`5mW%TMq8WCnN9`V_JpXWpcbW*Z&0sk;*%{Suim9S7l-CA=e zQ`~|PvBddY0lI=gL|zPGP{5>|)c1-aAP6vkF9!+dQTq)ShqESRb>djM9hc!E?pwmK z3G$7Fmb#yUTZS@zs$VG_CNK@2lr?I9@_^dh48y* zWcWgGtlE1h;l>Z>q+4SohZQk~r&bPV_siIyjRl1FfvmYq@)r$eZyj~|q55m_yP_k9 zh{+1$G`v|@4uxQtHnZY*E36Ux-C!8)N1=J9x-d$yT!=?cVLWp?cJ5rSh&~GNf^#U> zCe&}!D_T&3TO?Z@R_j2ZgDkH}#+hLu>6&HT6U_mku1b#iob?POlQ62TdYxEvf$+By z5rG?alC{miA9uYVWfr)VV&h%w-D=OvsuQ8{{Q1T!PyJR~gY=fcgGWy8j#-mSZ*uZx zm}lt3Z6gO)BP1ZcWMs2umqTzQaPvH-g=Z|oA#pwP&;rCpI_7)X!MqNP_keHM23$5G zWKF=9cyzu(&QHly#K7RQg zrjhISM`tMeT7oWglt>_miA%=29zU?`Gxm=QEm*l|h+qQ{__rXA2iw;-osGW;aBW#$ zLYF5a&E1xX?~nM#HnT%Tx;POpXPW!p^ZVa^5U~t9jyEI_cMp?qF-?@n-o5Sy%1(y7 zhI;bDW`Y7fAt)kYv3LA+@@srY$WyZ8MjP`kqf+@zJN{i)rx0WS7FC7JL_N;S`zMQa zdr9wSi2ld;9D)utoDVVNCefJZ_;eCon=|GR1{ZD;>j!6DD^X@h3ZrrjyC5YtI|-wiH`dt+ z14#vkj*);96v6PT>YI(wN1cTBABO(H^zStB^+*d%TJiNb`5x>A_Gj=u;!govj3?mR&wnK> z_MSTqq0JAejAW}<7z-z!yPo9AISzLuEa(S6ws!o3RXp-&ymVn~y%!>On;`KZh?#mc z#$Y9Z3D=(@H|~Np;SnbB;8)xjYnX6~f7B8dR0&-Hii^js%TZB?)vb%8FieON3{{w! zpcfW)iN^#@vKp-g{*(L9K*ZA?#Gi4Vpc_}~9{AH9B&%>2l{739s2J2`q}m}5OR!`; zYZs0*YzlKWEFR*_7Y0fT;vjTV!cpoFZQ{f^NUHsWKwRXgQ^>I$dV99Gy}7v9)9}62 zGy@o7Db}7Mqrc%l(>9*d+uYMB7858=(mP<2 zrpZVG#e$n?GtXVp>%!AI+kE{_DHfOIB}TDyp5Tv+kQ8vSx0<8sIIKKDv|dalc2;!` z&@cvwBT=@ZDc7M^3u(q3$A}VturQkKkC)6sm|ms11V~K0#gygaZyC7UaSfF#A5;!2ivKtw(WsB7yI>M55s;t`CIs ze{{Bx39M%>`k9x5c%R5w9`pG~*C|}G@0ln55DQ>0LGlLw+=T`S2~)C0WU{mcQIsa4 zQ}SVXBYMJp_vZCKDkvfN8x*I*>dwoQs1qslN=zgpjuKH2KSme^M|}3<-&v6-dD!sB z@(adFPsI5DtYwx(lwa>chsnq3URJB?vAryBP`$++l*cDQn!DTfi8e+T}^ zQ^g23EXW*}@!L?L1p^1T)8x*cg^$TZwuP6TfD4a@W0?&`_OIr-+I*ka(HoD*2t6%7 z_Rhb2Q#W&`cQ4I2ha;_gDd%Vp3v!LTkH~xjkZzXO{Mf6>$HN^?K^oMu4RNZpR<1M( zbN{)>YUgHW*@jSTfwU5cI2?g|3hRc$r!>r(G}&LbApwF}U(v5OLh1_p2_&(p!*rs~ zXc+3P`-TH+m2T_^fN|lpKrCsH^daDn^x>6i6n}^6FHtxN@((-4LU3zriEnJ>a*(q% z_?w&62K-gUAFUDJw zL0xA{gU|-Z;ULD|ftrNN&pIuqZ|x9W>Nqp=ss`}^fB$41I;VRuE#Q>N_h?{j|K3?L z+q&53Td2xUO2Zh~LGOr90-ylaM3gt$uoV_?_Q`gwN^~Co?s`&Yk#y<4zvbJyQ(QSC zKSfoDqlv;N z&+MZIb~AkRb?nLqGxxLW^>h06b7%JR0{i(l`UOAwg$V{k`3J=H1|)q4eq;{F00-nY z1{6L9l;~l;BlN3f;%=!SYh@1V00;Fp1`R$2jR=NJ_=n8&hAe!CtTKmefJ1g0Lk=H9 zP6Wd){KIZ~!;emb9+|`5z+vBwVgHX|P$0obF#pK!s6j8ikw2Lu5x|kCjggp-kvQLx zIR4Qjz0nlk(X`A_Z~D={8>87DqqziQ`4_{P{A0zwW2Kp6~_F-0&r$3Iy=0U;|q zxso~g&zZjjoZR}D-0>aVB$ztTn>wN&+4r3~15RCh44rOF*&!g3(Wm@ zAWVO3j9h09K?xHd&J4|<%%HN)*yzpN2TeOvPPilSbB+_UdI*ScfiqekbNHKcgqO3+6GM2P zNXP(qlEBcz+!-*ZS^Hcf@~j1b)7<0EjIchEoZo_?{S3MN0=C~g1L7>0JU~KVnq431 zW(Qol)u5c;BAEQ5R@R`^W~G?lv^pX{t!hzRVA;_g$r=%$95-mE zk96GwkddEupRDpk1ibJsYx6H+SIx*XAc$Qqx<)U~Fo#FPEyWTp*O5$HbgumBoL~5u zwXB@A7Y6Gy0=y6`Dk6gSDa}9bK-LPcD+JCUb*@nm!ZACo#3F(p-vA&8XHgLsmU;j$ z8&KWy8}>I4em6*TpqaH7`Z$FT`nXSB`(Kx9DL+ecg? zQCL5p1lZf}LIU8)x^_?Wcj1uI+7b8oVs=IRH`zdo%+d3tNCyPf3n^K1^$Z7rW&5g( z`xv182j@M3s~zO42~>k27NkRF{e4`AeF=pXNTT&Zr@70?!;`8-MbHArCKRj<5@Q^U z-_E|I{~?IRVcx9zkYa04hUm}~bi`V<`$J(xN?}`LYuf<{(VB7E7U|Gga5lx^(7x+f z*Wg6IYr;@r$k<^2J0hZm67tOqc&yS{N%mr@!gPfn5*FgtN7l4Z)y5qngrXn#F9v8K zlr?7mO%A{F-&JR|tmpZRCmfgi$3_{uf#w z7a2r5L)FK|49EUkr$Zm7rUYk14qJa1R>G>5CaVV}jF!)gro-h|735ca^jFRa&zGu> z9~f6apv!B)l{bZ5!tB9E1BmYIo1m?$amMRMrR$=sWv;11#IGB8!`r8rYvSxJ^y+Ix z5NM9#>zt^2X+GxabZb86Vx9hah?)2wG-L1#H1a68#}P2ZGriBJc+d59FDmpNcB=o2e@aV1gsMY>ou47Enny@K@sU!&O}JgP?+IhWx$)6 z-P`Z&p$cTOs;@o^g!fXWcc~rZM#Fb{-}mb7A@}aVhU<3*gpa!Ep+UzF+Nh5tK(-`>`;XefTTz}(i9X+s~uVfIw4lO=+-+%{yH@T z-CctozCbSlUvI=;uhU=eLSFzdVG;oN?F$Faj~SA_pl`@jZX-%Y;(y@33))$+kPn69 z@wuqMB$!ABP|9bEr>h*wq%i1r{l-;2l1qEE+xm#VKT>c3d4M4C7LH;lMWewn-3EvO zf910TL-5qk)cz5u3?zlwgN^q=? zR3xVihCNQ`8@AaD>(>;-4QCTlS}z3^V{5T+5{hqxSaKha5eZm~@u(O&N9O4OWW$+d z2)qXSWIvSU?;0F@#{rgM@5*^b(X|D%T}ZV4S-@b0*~ZLBiW)tvbXw*HT_%aNIHC+* z4J4BkgY(8Lkm$TafdOq}rjM9vfP}OkAsnR?6_Uk;Z6FxN41^vi`2nV!i~WdVC7x(j z*dWg@2Dvjxr7RvdE&4d>D$Wbf%iha{8-Wgxk}kbhkTA4Ml1Y4+2@Yq4UUZ%05qoG* zrIiH;$75blJkH7KVpyrsJAOLI>UU%!3otLLM*Q}nP@M|3(qX0`&B45SI3|&| z1Sqe-c;M$heN{hlvEa})aNi=TQV*ME=re2CC(FgArI2E_dJ1o)XpO;(8F`t(A z)b}yJC{{IA=0%I& zi6@a);htOJx8e^eqR$2I{IWMdRVv5c&bTgbI^uQN0xrc5pZh|}PYlG``)nm3EdA2S zxHeuR7D(f`c}U{&Om{<5{{p(rmvQvx1p16NU+1VkeK=YjDl|N;yGoTwSdlaOIs6i$ zCOR4(UhK4Sqb%v-8f$CR55yRAgYJ3j}|Z&4j$*8neihcA{G_hA<5nBe`oO;7r|cuZzJ$ zdvc4D$yA4}z8fR9dG?cW&W5+}=BLWFicks8Mrdv*V)%R;sE0v~G=wzuYFuHV3!RO! ze3-)N*BBZ>C}#QB6`2str*e12$As4v;2)Ptaql_Dx_=Z9ztaqNbrlGjj)%Ni)8=CYPnGPp~K`3*-=QaVDHKbKsS8AWHU zC8@PEm!chSj%NK+*5K)mwhf4gJrA0bF~pirO9ewj`&BkTf_9%a%}&K^O+HaTkM?&N zSi~+OCSRb1p0Vv##L3q`Im3;fd2Cn6Ju5nu>xG_mjZnZl-ltHQhMxUAkk3CVs<^R& zp7UjwFDTGI!T5%r3%!^pY%4ZnOtz4xs8*`<(uVFSxR6g6Wu-*rofu)TP>?WA{0y@5uAk@9E0jdGTkT6(zzGJ~7wT;-h_&f=be zEFTnlu{xR{E}b!Bd_r8iC`fHHd@;g|(3&fmtQK)})Q-$3IV(z2_ysj6fK^vD!-}#u zX(PtCA~K~@2b@lM^Sf&CIePdGq(+0WjMB?|SbqK6;-DXvg1 z;7FCtA-$(Yg9e09W3Ag}vIS21jx;zYv%=xH6Xoubi62+TmgGf?; z(jL9`DROCfl)a|8PT#>VLnUu6+aehRi^#jM)!o#1 zfKbAQ57A;v?nFALDe|NYtH{FSX1pP5)Z>|`s2d&8kD)%aUJtpVnZvTVA zQEmex><;!$hvK?q{q%yn+_^_RkH%5*i+gVT(z&50wZESi{ub-&YO7C8-2x8jzcW@2 zBt6^8st9dCIeeSf4&iMr2#(%0;#*-vSAn-@>YF#}9khEbsvr8-ph}UzDdzE_ zy@R=1Qy7JDY%tguIm|H4)PbXmX#D5W6agoVnuMKVl_RZ&yfb$=HO%5r&d%TNGJ$O9 zwbsTVYo%<2{Xe9(EvvH8_E{B4tYqx1ZYv(@=A(4Yhtne@&mV+)BQ6z&Rbv$y?m`(` zOqlR7+H#@w{G20f=4C5dw#JzK%OdsB$6sT&r)qnzQ*V|q`S)EJosSL9>&Ns(w2C?y zW`q7k3u8<0^FAo*9e!GM9h%f1RV{i2&_*eHb8&1-!!^8v3!cM$IR;$}S!Z%l4Dof~ zxqV;wT}+uHO$H+F!rNn`D?qe1v;3RCf?WpPjN~Lm4ts-U)-@NP(BLg=G%fk;2S!)8 z)Q(MW1>NVoy^he=<4F_|dd*$68vW*U4vnn^U7uRkKTH;~sc@@(AC4}vRbz+i|*Uy3$DJUtD>V!hnch<9QEV6D5wh<&k zKKqL}uKcKsX$6;+CbEl~kMLx+jY_-s@tr;K24YsUcGf3--kP7EJ^qA5Er(wB~w}I%X`oZbJsYhwS$_^)n^)Dunt`P!1m5#vl_;X(Zo5WIb3 zH^ap=BM`leB5h?(^pTz$tTG#1ev$Zzy0EEy3CX%>QF_tvd?U#x4WntbF~7N?=SD~i z!%I#D{F7P}HV}OYnC|x)X_H1bM}H)X|Mo1q z&gdxThh40fsUsKX&l{5sr|(eZD{~D){mmBDgTkN4Yo05k**gvM%qjY-8794a~*|$Hvahnt!9&NpnJJ6Ug#6k#+ zN3_$E-Gc0K(KQpiB#F=z6!3U@M8b@(#X3&XY3zrvL%tHj>g zRPMp&kY{Ic8D#7uCkuL%)cN?~4u$AH1kuT7>C6e3^yluyduiooEAD#Wl9Z2jXXrVE zY5t8ala+A>m2YmDd)N}8$OUr?=Kz@1pR%w5%#fHP(AX=GT*`Ao$*R5aYBEh~a+J~^ zwhKF^S&W~v6l{xBJZcF8b4;6YVw~L@AeTPMrkD;gOefRL26;^}vmn*#8RQx7AeB`7QuVXy zg?NHkZ+{Wj$_xxJy%Q`WN^1saEqh>UkQY{4OH3q#Ch(vq7eN$pTf1>a45HA3HLgXt zc9Wvo45|g(^O|C)0%_vk&iWB>CzWBv&*5by+2f)XWwxU5CFFVq^-v{&D;2W1xDt#) zve=RYymFc2Fl+tsiw(mRvd?JRy4`R>z zD=>Q#a+C~y@x+1lI(*9F`4aLY1Ak*DR-a&HE7KNL#yKV6MorK(nCV`Q=o+r;{sgY)zO0+6^5n6P1VX5#6iTO|jO4_RM4RcE z66od9Y{X~qNcwTd^G|do@Z@Al6NiMy0!2Yl2YTtkO1T%&^U=j)pW);7rR83l1p{z- z^>dRFZ9yHZBUu}{YfL*vnIGv}1sy#E6VnJ$@w?2A-lCI42+_48EqcS zyGyw~$nk6UEn$JuT|bTuGQa{kKd-#v(V5~_0sp0%I@%~h+0Tkyc64*ptg%F#ZL(CA z$Elml5fO~kqXU6ccB}yRY2rY|*MZcFi=CPR>{Icn^Lm|Mm;7trWnd>2+i{hS){M9= z2YkqkbQ*ft+yogGH$KQz30@Fxn(dcUpLVC=eQH_*Vlld@L1tyw zkM`*e(o^)$x3LluOe`(qn(Hkt4V*5blWXmD92z$A|7Y1eIkyMfOwqW6qhd% zSNVD5Zn5^USH4G1{NOH>2jbxWi>M2RM;s?`T)v1BE1+|o(eIwU`mnyF^sSby<0xS4 zDE@piM_i9gWxdBQJj|i=Pl|r@6^UA-)!&|z&37v!_|q4BYY*{AObEmk%+tiBrUVa` zRDbK`P1qDp>vWC5u1=(k80*ZKrd_~UhSKTOjOkY_(BkUI!{K1-;yC5%wD{_*`RaV=>SD>^H0J8^ z>FOHl`UdOzmdf$=>grDN`a$FR(c=0E>H6N|`X%N1wfOq2`MR@s_@)81Cx3KD`X4TasxkngFt)*y?lf8e1m-K2#NeH z=;YU9C=`kk^fi$)faW%f`xfK+8XFo87y1^aMNqJ+YB6#3kH`n6?G&!HWYOWELj*7A$6e33apnf7+m1(4yVhd)*a(=jM9z^sZ=0^ z)D_dS3oW(_hUWccj00{M)VCg&8>BmCsYtHtWS*LP+JA;GCP#s1R~F(2Txd5d7&P{6 zS79M!k?v?Rnp?6z!G|6X=dJfb)NVI1t{4H(P$+*`m+#P|?&!9ic~b8f_Q12wWRL#V!;iCoQH!$dd0!8YM|Ai16gxiz8^a) z8a`o6KjN*pqhY%cYCdKuJ=sw|n#Z~f(?J_{djS5pn@V{Y*LYw-Kjk{P(*c5LG{Zck zZk0eIPom3DG;t3WUk{GmF3#AV82}HJ?z=3fM?sVqCq+*kArJj84>T@!_ZLqwY$#sh zXMalt>?tzA0Hph?7HJ%q+4;aXI zN`XP%J+BH(x151NVbE}y$nL3*x1L@A`mj5;<)4w*_oQ5bXw>(v+;5!Mci3Fsg#phc zT=!bJp4BCR;lnP}rLNhEPnq3rf0o}$bG*s7e?px+R$@OkL4%bIdmD4#S8KkvEBY{g z-Q_vn(;&ZMg}Fp%x^RYtVcooWdA@fqzg0N8wwJv1X?|o+|IBZJt$%){3-j*!as?T$ z_;>~QwoSWb(10VNJPuBO#DqCpwfd-2yUq}Q)Jna~VtZp)Id^-06n@<*8F^!S-gkz5 z$Y@^ujs3`I_5P9S`YrI=qNWSsvj_FC*D>{wk?W^Z%}+`pXs8vC z=<$66m;1EiAHnOVnrp9>Wq&QN0J&*UXs&Ou^8NM zp1ZqJ<-op&7KpMb6UGJlbvxoaU_pzPK;f6Iu>kyrwxDrWocCdgyyU z548s0zg^jUaBEhLRE;t6&j=@Z`@K7b?y{KR&ssHPh>3I(@n55ra3SfV?vJ0>yZaAE z#sinoj;F&g@x{kqHtyt-;MbV^j)AlXGNm5H(O?07ISz;=2;m%3j;*OIab% zm@LNDJK>s&R*=<)8NqPH&qTrRZECw-v^r9W-YN0Fw*p}}Lkzq@y=`8EmTOHKDA6Lb z(6N5}NQ0YU^n1(M5=Xc^@c}%mtpv&Aw3>&qaHq}Me$SMRXddv3PMWAD5f4hlhTw5j zN=iYr%IO44sz+%)VCq_#Hc;P8^?4a6j#K$zIjI5eYi`t97Uk$N%05elmJ;@3o=2iF z`Iwe^rvl>N6l`3|6%5g#{_4m(v*=js#)-bEWa~6PY>3(guM*^$!bvDwhN!>=nka&f z=qw}FJano}-(GPuN2n@n3+u{hzt=d(U{Y615b2b;YT2C6C9iv!XSa+a;xV=zCg96h z91(?8x2x5!GXihN@UL6%*Tye3p0Q@PIticNncB>|U~56L_BZggJu0X`=KcqlRi}y((SGKXG?JcEd&!t~qhb#W4N5Ctq`=b< z@BTj#S1m@DfSoLpIUmY8jL(5)0acqVGgPB#S1l{N+0mWJ9515p=XTSRq)b95_da4q zv|crPKOO^&_(^fxf#KYS$3JFAaNplr2ZNuLyPwjeCppnFsUqS7c=R=!pSW#$Wx+d= zZW2y5O6OBVjSqhd&gz>DUAP~ou*TU ziSU91Mxa&jn;E%#vdgd92^YM8rrIbAIfbs~MSK(r$p75638Ty$?078fmej9808#Rt+2r~O%BG^qDa^>^>Ik;5XdFhyh#PdbTy#X>SnTEW`g5qYi zlbLX+YJKAZ8cE{6lCG4M5xAQN;|rMGXMT-^w7*KFRmmMj->}lmp>E`9S+=@9n zX%(C`<}>daO9VSt6awfL^3XUy1|ke}Dv9N4`vmS~3V!7(8E}hbD#`zlz3f&6beLBskUiWH`&hNcv5zC!-947de-~UqHWEYDzqCdJQ}h;Z7hYp>r{rOd=JK9 zu<_v)6v=Eh4893-)>>a%m}}0f@T;;l#@7uvX>RT+IyE$O(FthOXl_WZ`nTEw`4Eq* ztv;m6r7C#+NQR=lyR&+Qh)e(E-#$IY-An5*_$}|K=cYqSCTDj(gHxAh;N~EsuRGqx zfs1Ebd)Ae!v+m}5v1d2vZIH>ZSv=fsYUBSEhA`6>q&Mex;me=guY!?l^F&*oDXSJ%CK zjE85@QZrOb7X;&t?>*ltgb;V%xcqfBfPWWBio1LEbo-UNDB+Jt47bIQ5i0du#^ln?0UukPSM zJyQFWdvB1v@W!Sn^6PX}@I&_ZtW$7mZ;f_8S1);iopu^w<&)g2a;{DysP5-wO|)p| zNQiG3wV?Ky0)yo099=YtAd$XNe|HDREMqrKE^aj=_xkhCjgak*RgReJ{zNfsBJN)5 zYz3q?)x+xp2MDkw1te-K|DC8|uB9@Q2Tk3r4f|nI~EP>S(xhnpHuTI(haNpc5v z%(Is2|I=NPbi?{MnU342&8o2TDH^)t_EG+|EJ<)<&noD0aMQa8UGbvE5QZ?~D|~vJ z??Dx}vm!(2ii|?&(Fj`jb+qoSIkNMXKq&;AH`cj?$>4dYKvHR>fE;wv40mtpf7 zq%3@cXaJVG)w7%3NocSb1OaK6b7f94|Cz0vnX^Wl1J0VcY@K_Zl>=PM?Atj&I zKjUCFlQeYWtcid{29ii&e*_mAdBK?7W}GuS!;=2@xV3Rl^1diV)Q89>l0O00RVG)k zDYwQb_t1W89=RZt9_LcOz}0@&&jN&nec;Ew;2F8_o~{rch2T`4tS`C97`)h!>Cj|` zguwwY-B=XMMDwNxRoo0{mGL9yA2b7BGMhq1P`4?bLbmy!_UFD-aG{)kl+;wAyp5dv zR-uB1oWfP1BCDJts8H!iRtc#{c}P~7s7NJ6R)w)h)kaoTut<$eN=>0iJw;E>ph)9s zUD%;WlWYn3cM$>sn088$c8WRNO`y&d0Qn+N7aUA)s7P;$Qh%vPe~W_B;Hb#piqi0@ z$Ph$n1XXN=L}iRsY)nLDLRDAtfF@PVUpy1%97liycxK9WKGM44$sT2zG5D9N+!wbXk$RSLaR&BeOJ z5x*y!{ZBBg@I+UfcQ%^UDw3Roc9QW-DdDcDfJk0mq(8laz_(xeR!tG`Y#n$lK?~n(hUHrRILdnFl zs(!qtT3<{hOtrIEs*mI%>$(dwYN(Y5D^dbP6k#U3cfEg2T7Lmh zl^&{?Ca@3!vs){arxJSHxzMscO4SY+Y^#!*A5!-kAB#o*9e{5qR=6)5tj=}5=q2vi zE^uk-4)3mQyZb#~cVik7DNy?r;OQKm$zU(yo$B`iPW;3iCPWq=`qm|azEN7F6Ir1T zTAOdRP`7cpU5w=zP_4V=rtvIW*9Op-^sX{Edbatj#l*N9pl~pmFOH|J4SmD6_WC6R z7Y}9k@(bUw)X@(tep~J87<_@d)VP~;6^b~emQCRzH2z$FhprD!8EuE9vYrGGaC)#|70w;0z{0P^_o=+m1H}-PR#itb3qY5BRWcOY#Pt>YyE0>&P0@ zN|(MpBl5Mz$7t;L6KvFm>0FRHBWY|9-&;xX9nGFO%)jqjNIzIS9^`+m&V!qvN_}o@q)2oT$2_(NY7Is^%I@S5JrxvC9w|vl`VC*j zs&$i|9Q6={FGr>P#oszHyylyWo^o?7OgjmR{n!nkv=>FtJ@Vvfi`cwON$fU0w7vz_ zj)EQ<<6a)Eq;Hv4$ULWVzO7Jlc}HxM+@{qS-286&(Dnr}Jq=LQF>n75dvCcFSHLY= z7Va8?dk7GMg#-=m?iNDf?(XjH?k)))+})i*gKOdLP;})x=XT%j`v`qrphk_c|Lnci zoO4ynJdl0u?<74WwvnA!F`=!x{9N+l?%$=`%%uCzL-Qz&oUeXO$;cGB2Bca*vySnb zSUN*aIzwpUp-yg#_8Fn*mN+h!CQj`&=v4by@~+;2sb1!+lGn+Ir;3i|iv&EX6lVm4 zbXBpx#E|XFm%(R=^O+>0Jc-9h;tzxWT_T)2Uz%JD2SR~@MhlLP5!3w z29~hFD}Vg_d+3gL0waY2A%TGc$U&ZN1Op-j?2@o9OXA*PMBmHkA*TdEUJnGmVFb}! zzLHD$TB&x9wZ6vt_{^c!>>4%(Vg7R(UWA-p*+VXbn!1*vUPY<+?4~B-5*}Km-r_?c zie_%i2R6?DtH&V%FE*M{Jx&%HHWRq04TG;;&Gc;|QE&$AeXt_n0_4L>U<)h&Dx@jz z36F%aO=)WK?EqpaVY!W?DGMn(dVdU+F@rUtS8tg-@ENb-qd3a2PMgVQxT1&60zlx; zE4>0DZk*v^VJ?4o==x*5u44TEeBcYCL9dV6$BE8mkI~tQ?ktFt5QcxL|Gu~x_f85h z3W%Q!Q#N#lA>dXc`k`dkV{PysF-?(^piIKSddsOt9pYCQ=6vU8vUKOt(@1->=S3>% z^aUwEs>y$c!>S?`|7OpIwcLX3@Sm9m{@=_rrSLFy`RbvPlawIFRhSTf8Ak!Ve-Wsc*>v^vQPSoERef!NR--;Y@ODpZu>IoLo|bKP35#__&ArEb8%V90u5$)2vf{u`-YGFK2$zOYZmS?u3SXq{M{Yv$937$81mK&J-g7gAPiyXG20M=h&ABn;({Vlun zF!%K`$4d-Cn($dsY&Mp?p_>jfeJ2x111sc2%ib($4I8d>6A~~+Q5e3FiKB3-1=LV$ z)v$}8%Y+(g=fmk6LL9HV1&j$LMj5HMk0oA&>D*jjW%ZDS>IyhD^IeupFk2%r1_H9( z;})^YAoo8?uow!^4N5&Da`7X|O!JZc+h+rCQE26%M&$Am7TDCJW|xFw6$N~G;I?}z zNc~mL<`KrO6=of8gQKAZR|{#W^8P1UOXhwbeoDpZOy{jZ3B zQ)8ugV=P4Xud4eEKcZRE&`neLT)<)6)aVA*+*1bb@)X#tP?G<_e-NqNkxn@!hU6ER zr%|K+f`k84F^W%}Y9TR%wlRv2pJqaaByAlL)#t`IH>}dA92dc+4oJ#Fs zzIiCvb60+iXY)^_khG-1JgnQ-%oBeGqKeg{$TUh(N26K9mU)oh^yR>XG{zVNl^r&& z2RHH~Q>i>R@P`Th^wgGJXi%v)Mc@uYW=QzrnY+Uf$KD401DKys?1L}wsVHq>pyb^}G~Hq!jZ?bR!E$MN~+_To{xlPJwmQy|W^hV0T%k9|>6@9{^b=!EO6 zd~9*-!ThJXZC3nK-B@#~MPY5GDP(KtP_?3eEepej$4HXILOt5c%O8#m)fwsOPz8=C zgG@Lp1G|MxqAupuo{7e*&|#hxcRCW4AvGY}M`whYoFt8Lj5Q{K3B0A?JZCN)P?wiT zC#Wr&dYAT;k&zu<^EDzxg_Hn}R8BHL0oq5fVaS6-9}ShQG=);v@n1#lH3vXtGvO-{ z8!rL08l#_kh(})A#vXN6RQzN&`JgAaHGwgvNEn8R9R)cRf6& z?jv94*j!hC(Q3Xz4WRGU>V2+r;;r*h%Pi zG)}`kkoh9pB0DOF#zpw4z^!d4IV$eDCxg-K<9kDzqPdu395IMdPz!F%u}02zf#Qdk zu!a+?MX#yo+8)2!mZ$ONrkAPo+KyM!7}#k1N3UsAYZ8=>Y0Ot*jMr)0Xkr|`8GJtC z_ueza6GZDY$mFjxlw`BiP~rnPOY1#LpADI1=$K_(n`M5TWhI+q6ix>$=2e07>fTVdYhJ5kUVCj` z=XG8Wh$T$6U<6z+@m?^?Ua;s`uv%NNd0i0UTd?C>bOJ8AcrUtTFM4z=I&>`hye|5Y zEd}r`1pyblflFc8OVC5fQEN-)-b*oL%L#nTNxm0ukzF5W8@uPZfVf9s;>tN8vldjD;PwyLuKwy*u|TwCU?f$!p5?FX)= zkgX18ua0)C21KupzphS`tyx1(S7(813*Kv5a%)Q+YpZK(Qk84#Wb513Yny!Q``+t= zz;$rP`ib}7qqX%5vW@cB^()}UUB~i`_r_DlMs)VZ%j*V!d3E2d$ZDR9p;qlMo>TD6_Y;7>D60dKOpMiLx?@|2QG&Udtoo#xXOto%D1XPfLkJ3Km@+?_l8lN)@H9bugfA^u(Q$#pTGU1|Pxsm@*b$u&91 zuCmUW691n1)`xf&1mh1a}$o5SzFeoX} zp&p?a**}lart<)zk8vPl4Zu;xlw~?_u>m>A9|Y@QodaNMyANU@^FCFepmk894cJlV zKokQ5l@c7geyBxuC?yAWU{>>3M?4aO+4qAz!a*qEr>wODr&WQ`?T&f@V0cB$LZ9Pl zKS1=^VP^~|F9uX#1Mnb6#iK;e)WMSXJFeviVA0a#2IN16PG)-`7U-?JmZ(*>Qw6`u>J8YXUij4*Yv z+X*=m0m1{Y5$IW>Q++PcW6v8WPlDGk$)uGd9g08|Fxv%*4d{Y+UV-9Pbqb`Sd#mXS(#XBlW?7KgxYc_D{iL{46}U6Px;62= zlg+)eh`q7exD$Q5v%|V^5V+^ny?2SdhFW0cPzy}q9BP5Bkv{~yUFzyS02Lm>HV%WZ z0JobDac>U^6pu*)k14v3X}*scxsO?0k2xEUdDV}Rxhp?6P!;mteY$|JWPJ*$o(EpQ z75HI7{4fhH;DCyt7_7CHsiz{oTi`T;)#bAt)W-zCxdRV-F=2}+0e>f-iy^N!m3sIP zJyfI-L^6PM2CNs1MPH~0e9 zS7N)j``Fil3-}Zp$ZPH)U~5aX!ejcIpQ47sR&Ve*CAJZv(za;CdnV?fkQxJV=L^M~ z7DDA+$%Oxx0#@!Ygp=~==rJ*0s8pT^GQC`ZB&aX0Pt4s21Mmyr#*->UN7&jo$6-Lu zCjw9c3VIdsK*lt}d8_jk@EczwS3)Z^&B&zziXhd>pUnos(J5%52X5xffFIeFpkg)$QsV6&|UsC_NdD=ltZ(FwJ_3dj2< zxfTAo@0$L*ZuFlkC0_EyxU{Z3QQWa`2cJe--yIFU{3yHZLnJAqJNJ z9^^UJtzKxgtd8H!Kd2s}{kvE*CjQ-8cuKv^x{1Z8tysN&Z{cs#`Cw*2v&K=ulHrV$ z%W^x?kmtD=i8r2d&nHynTDz|=pxR+2>QuWj41tl6eu{kI~<2ba{7?1!1Ma z=N-yj7u4((4i%+Jay3i6{7teAFG}pEZ`5JWiwUsk>aE+-^DiAC1)m``%7587LGq#k zHOFJybCnPEpLRdWxhI+Hm_Sx(XwS2UWkq44%_@XQ5WgIV=Mzm>mYDV|gZ4Sv92J#< zdW2Agu>*|_kX=?pleUpVy*^mQl%ZZ_dIZ4=;_pi0WXzGw%Oa`F{E$Q8d)I@GTkeO5 zM6ry^<=itYbq?^Z;u-yw_`Clq z*mmNT=;VD;Xv3QmCWfR@>t2lpd3of&zl6uo6YgjChE*kY@0a3SV2x(C=))>m6w%#I z;2E>p2mJi;ZErqMsUZ?1EWH!Ql`-pk#1*OXvRLS55kaNE_@3DMW12K@G{y8}%yG8` z`w5JyQNO)G`xklorGh~Lhc}Mj@nf1I3MglY{Yvv!lu)LL*bZKw>cG}Iyaxk78w*f4M^W0U!F{g+Ww z2ZD{14~h1+j#2Y~Se0l@ruP1VVatTrnPa|;_MtpM^LzudZEYrS)h4yA{`SmOpG4=f zE~R}>?9_cmM(ehUp#IdE#dM2AcYHFnGpXU+n<`WHl`W;~RqVtUMphFBi?9ZPgH;zN zORt?dt;fmvB5;FPAEi3E_dWk{@E2Zn4BLm_WOoCzCRPj*Z`m9Ze$cv~5oWeFrnU+j>-s`j5S(#Lup z888W_jIuVBMH60*#t9M--99m8$(+TvZ>%SJcN#DH^X~%rvT^chtf@-d3P=aJ^*G>?#%c4=U+(5eJ2Y4+30Gf!J|%7 z=P|~)tE1=kyC%2#ukx2xbiCVyZ;gGId>W45pLcLfn+Ll(>{Bd%?f{yaMfXn~974UQ zKMuK1I(Ite+^-%8AbCs&^E(v~tbrvYJZ6)jybkBu;m0O!5!&w;8BL_Shb1lZO7hpf z5=Q$P3QeN8TrPE~YbT}>o-6a6E{#oVr?#Py&?7nWno8DL1whwZoQ>;X>5YL-< z@w>ymERXrb^xH~->tp?DljW(-iH0V=Ec@JN?(>}caY#q?+IN&~f{h30A&{%&F0Xw~ zfk#vn;hSOs?<0+kr^O+ky9QhDc&?4-4J6-(NETeFXM5aTLEoqOE}y%mjo0%~-me)>y7?>=>DEIm z+Vg(=JH|-`DM$z>tA|pyhol0Tl13P9S17_vXjiD05`=)c6oOXKMI#Ck`cM=`N7GB6 z)eEoP8*V1NG$RZT3Wn{*;t3OAF6#9#>wf#(M=vPAE-Uh>y_a&c3qA?{#SaEKNd*2y zc<)MRl33&s4(UBunEj;hPDWIqLYNaTOo1{~OjVReR>0oQ-^@>tF)K{SsEdOVAWMTp z2M|L@5`BB_3quwe+Y-HhhlKagf1@HIwbUn#0+56cmCc9!loX_O(<^?{MNbpVx7*7G z@2Ax+#sxxvmkchM#=C73Lk0K3gG9qM2c)fFBvl2pUV`Xp0*VCte%^>1R17Gebg3k@ z3POQI?Jnv~vD*)W2L0kUi394QeUiHXHAO$A7eU<<0cJ*69!OZPg&RPYR2)Gs#Ik@%0S|2f(WGA2 zBEMMPepoj#1kzqz?Gev*iLWnMvZAP5vcva@L22;a=22k@+M+2=Qn5w-u0hyws}k{~ z{76PaZc!pUyONrM0LiG{!g>i#vtb>hK5Qou9;-lY(CE#WNDkuw+sP;ZPdbEN%FYi^ zE-PM9Kk{jOvAC)V<%zh}&pi!G0%b%g`;GiFnuR}CD5GkA_Gd5*hyj;CSn`@kIU{2brj9RKZ{00KzxJxIuU z?tdD>|I-lupN8=NG=%^E+Yru}!y!qF#b}-ZpnMenZ-7KiVJjcW=wvtH`#=i?tYRNU z5uh6$Q%|9P^DFan5M|rL^0cpxbna`EnV`(qX}c;w9x>YI0 zXD;itXnETzFV;S(+bZHBRL(wviL5h}f>RC3tGuTK5DL2j^30jMq~V|Xci!{7Ebtu> zRY#QIF?}aflz;YzcRzyrb=@MU@%TT|_$-D~_n;*6~{>6XvTj#NL$u>&1 zE-71+Z!P}^%#CoB(*VIwiXHX;f<_=vYNS+pjGUq5%HPVzA@Z-DoH~GGDMaf)q^|!? z9jyzaN_@yasO+e*;(KJgxcgtleICxj3GzwE34#P&6B;nddE>=f5`b1ThyA24h$ zB&cTnFnsNHFb?HdC|5E^p(k(h(dMgwfqNR0+iKONz#58#jGPv7^)B&KCL?2Xy%`%* z(nI$uYbK8$__mFMIS3cAfl)x%xP{@8;&W)PNx%6dkmMmv!ozq=A3Kz*BTw-o?|}%c z#}z>tuh<`my5}!)G{ry)rnD(VdoNW8bHl`6Nd@mSUJ9z8$@U@03|ihGwOe}jUy<{U zKjx#<;bq)LgUTI#-oZdQjvdDRO*WR!@k8Ee{Mo#PqN4eLSltu2@dKtMw&vO>rCt9y z^J$$jQznaxL4^MQEmN$6`6bm{?nEkv7@8>_C_XTV#qj;1HW0%>78{-NzcR(0SxDxd zZIPhHq2F_USVn2C%sujO;adh+D|LoqW?yj1w@yi1>^_h|b6VWZ`dAH1g&U;s%>w%~ zF)rgfbHk9v-YH>gj8a!37xST1G^$iir|(RKl&)IM@rbHrV(-lL#^@mduZW6(ERsoi zTdK*^t#37}6#J5J1NxJPoao<~9whrF2*^(j4GoDN+(bgpVXv^!+L;a|S=xQ$Ln3p7 zcM7}RJr=!FtV@O7wFAUF)CMqbV_@I!@Vm~=0jx9NVCUo{2I!|VL&{3`dWrU1>SLME z9F9G~&MkIfm+SbA=UInr5@YZRG2aAOnxEf}FhOq8*nEKuVxXi+f(5Q3h4dniDH1jZV6 z#m_8ZsHR1ef&wHp)~%_CogD7SP3GALScqjPcSxQ$1YTxMex@-01(5jq=Of{6!;fD0 zd&T>^fjNt=z3AQry4w4HYz}qw51_dSfQ(cBXZI->=HBD=U%O9szfkEq`i%sdlgmI* zuRkuFkgQ_(hcxf)?eAei)?yO2jh2vV7Rs#vUY{~7ocZMMNn*U)+zH<^J-rHHnJJzWCws1M!Z5sELIM+1Nf|EVb9~?-L{J%B% zP10JXrs9K>t$9bx`40)a&7z^uh)P5FweUYCM133n*iOLLj1#FQnZORqggb%~CFRYY z23XE)Wlph}n&RVz;l`cNQ}`cTBrnw>+#5EW%Quio4mVzBIo9(qz|cGf@{S&fNWjWH z6w^H{S}N_u@u!Y^nl?%bH3}v4_PeuVP%3=@Phq^+H|Rg@OA(+eaiHeaA?r! z7aOXnDS5OyDP-5SYtZICd;#8!iILy^Jq^<+3;8etR zNF3%#T(*sCl=-EFqPz2{o^72ge$R52RcVC#mcTY!x|&1ih0@3A_gwSHv0e_T*ZK+` zT)Aj^>5t**&!2MLiSlBU6I{TIlel@Q;ckXtd2m4rpTfdOeg)u2 z=e^5_Y1^TH*$jUoRA)^~2Bl^Q)MwoP0Vv?B+vJfKn0>h7{_5vOFyvzKk0H6pY{ECN zZ^Gwou>yyCIV0Jd;W$DE=T^gsmde@eNYb0|YnjAZNFl|e8-k7@Ch6Smw;tL$hymr|>2@xBc5ht*cgyEHt*x+T6xg-yh)%p#&J zLOBzRm&k?^Y;KqAs1&u*l318m1dSalL1V`?LD1MSAPklB@L%j0cIdxi$Nv8vJGOIz z#*W{aVcKw3LSx4@YAy>rA$6=3?n0ql2B9!Ksc-)L{f3Cj4qA^lg6C5Cr@zwlKc(h? z$sN;6BU(#Q9saeC1@zdHwbDYKLigcPN7(Wg^QzdsmO~LILXUEf*0PLnF7Q*;y<&A8 z3dLDI7IcYkA{~TFT&L4Vmopk3mQDizg@*D}yNEz|ED8&}XY4X*9oqp_R{DOrA$Em9 zf%s;5FK(O`2!h~Y$~EvG5zDf@2S#k_2>kHUN8(bNqj2$uDi%VnXxLgad(D@JdZ%z^ zOb5*&<#4QHe?pHqe>g5F%RHG#8vRI`_k`6MOwSx@ z96|m_fRT#H-eMb^_s87-PsxFMOe6uVjDPa%FDHNWv1yxqKa8ckKM#t3W|&WVoXw%LQ~uAk))_m~T6E}_yzU*MU!G+RhjZii_BQ{v zaTvEAl6G5G|Ng)2wfgPj@eU&-1{r!qlMv628ki0H_Ubp` z9dhv+a{Ip2ItKAbfk zuRT7xIzIU_?mIp{%{u|op0Hw^Soqfvp7;?p5dsYb|7XV!gd%6MlQ!s+;H;qwKUh}Q zfuq&_d`dvA-M}U3Kz<&%w_pE0@1#-I6rg5G!fWbQaN2Wq>bQLX9%I_Odphl8;?4>H z-R#R)P2Z7D5=KwrSN4-cPm7~tAYM$0Ys2H&O-i-TD7Qmqpyl2ps#z)7S(G)z$eme< z7fc4h$LzR62cXnlB+9tb+B0ZF}JVk=J3WzQ&`fTYpq zl_#b|fzv-R22RJh1Se*Iz!}4ddD@A26yN}I^!#l%G!!{+gFd59I&aMfZbbNx9(@l2E}$v@kRGrk)guZ%t>m) zM^}QpPNz;8r`4=MG2XMN-OF0u3;O6768h)0OX)e^I?xY#A5T zUI4#<)3|a|x@*x8t4VTf)uPJDRtzj=02(30d*PK=J*AQyPY;uxb%u?PvUYlrauX2` z2(QYzMya=Ulr;x~G0TH7xgfW?REfDJHeTF*5D(7SPyd3 zK9va@7_cjRGw|dK^OexYvKsxmej>LaUa|g>X(lsz`lMq^JbPuDX>D6}3l{^Bw6?%# zz1^F)wYRzYF$eTMXY+(>RjYD_kstH{b88KnEQaQlSvOGR*9c$NCD3u>Qi{8^?4|}vFVM8MY#=`d)>dqK0u9uh3%M4i9Ya&0ZDgGp)t*#wlCky&Cp{k zyF!1(dLuz@=7?+>BW3}PX&+u^R>!8_HD)K&XWI;8)=nPAV|}ky4h$c2K$s1#w%IqU z+PBF$s{cW@0v)+F>e#~q=S{5PK~u|@HtWQ4^PQ7`n90MF z%5Bx?g&*rkuU4}#8~aC9fZ58kI~x#7=cJAI>SgrGw@FZv{9)?kDMBS+d3tAwuW%T6 zf#f?ynR`(ieQM(aITOh~BbYjX&0RUeJij`dVeOiq%w9#zz4+Xji*(*kqkEA>b}gNA zz7(_jN`5WfaUpBHkbkz#mAm?poQhlEx{ho}!)5@IeNCruMLTh3y;-`y2^$W$xX}T@ zo=<%~-I6;!gws8j%U&^$y%9dU)Z@SF^}7QC;fuVlq!|wrt4@!jHt=(oepDXY#a{XP zoKXAT+AAz6=3ePn|NU7F3w*o%qJWyj^suCJ?Z9%~*>O#TkC{^>&N;cK1 z@Fc-<#{r=L2kM+w%U>M`E{>f~wN_&~C{CUD+*YqWQoO!q+1yvh^mn{1#W6#wHjXJK zmwnD(kgGvfSo@7r8-wdpbw10}7tgoYFMY8W0DDYfC_o}u_B(YtuhkX(31kV^mnRrt zO`qkMRqAavb~O^uL5k7HBca#}%Wv;T{ z8&4}{f*x*1H6Ba(-wk1MnGzkjFjxQp20ou?Ng75U2cWcKRS6?Zs0o12pnZ{IORkzSsTdedZY$Nkv#ajvVpZk@$N_eCk%cyh%IbFK3 z+6l4VScp7M|14Cn8nO+yUH!RW`(w<-aa-=Bwf*=g;=|`)Z-|F{x^M0Jkixu$4@48= z9*I>D28pIdFix5cn`RH!D6U&k&x}oUwF-b zK*N(b@=eI`dX%%4mwuWVi#<+~y8((2KBL$4~i7a;U#f{az8ALD9U@ z#wEs*zZjkSvQw|BqJ|UPAVeNR9|yf8NL;136!CL{l3LN}*Ec|!qO7LDmk*btNZ!G+ zJd>mTL%|N>g=iH$0~^vRk;%t1r$g{&^1&tH;IqTiN?D;OC)PVZ|DIupxn% zzPW??>H*>J`}!a)gHw)>Q9c*Z1$1hJ-r|br;{47$=nY6Gp}?k!GeO*iTCcs+!tEZx z%?CaoxR{3BGMBt$!2-4jvw|pEkIlkFbiH>pD^|b9vQ{t+L7dj+5ZY84!u9Z$Xo@E{ z2?Tu}$KH%I1T{tKyn|ja)mfU0mPy;B`wC@tY>>lpIg7y$eIP|at7U^<=by5aTaO9;Zk0ccE~$Tm>o8I&l}{ z5vn<8H&N?>WD_f7_~HCIuG;c>EvWI89Q|lRLt?Hc>c81e$T;K@<^d1uH&O394ou; zvlAzcoI#qR4*ZN#2-n*p==<2zUZVzBzug+<{C<5Zs6)dcFzDa>7Gz~box$!m+dEAt z|G@x#g+wfbcgk5j#){eqL*H5CV=;|xT0VNUk7Ewj(_qjOPf8zNFa9u|IL~l=q-M}< z4bZ%Zx7Bj$?14HFNFjKyf zAF7hu*v11Z-q6UNTY+8e-^%ju2~Wjm;)dBkG3A8Nf}$vLCwZ5~x$N^*B_2aiNNdj= zv>|NDk4B^5eK(i;245EaK%^Le56VN5n-;`rRSe;%&qsAO6aC1eK}h<-!I>D#bi%{tijMGzJ*r3NqBHTyBfhZ!I(jG72hV<||A) z6rcc!dZUGCrFHP{9~;CPtuD?`faJ5<`9FY!!x;*YFe<%40g^K(C_us}hXn;ls+|4- zBvKSmfW*ZK3Xm|0u|NS5e!Plo1Zz1?C_n=1^ba86SAYT}osRzi5*l47KvH-9r(vK{ z#1smU2;VkB0TM-DC_r-L*fbz^7WEGxsWWSt2tEtVApss~nYGRj*aTH&0?*DIo7WI* zCA&y;uGY=k_QcLrCo^^Kc#JzvgU>y;#&jMh2|8{YSlll&buZ3RyH;<{eQQbdU{q4O z5kk)VamKX~SO{A%Tv+X?NcA`6(|X$*E`sed^)cpB`p7~~Lxsk*aAFA?K5~39SIRP& zo{Sh^iHV5R=QV^x52p=&ZM=-u%`zk_O&j7Pzl`-?)u+OG?ETEaW)Poc)XSVc;^%yo z_(*L0X(xG9t>iel7F~nMHoX!!m=CABx0l4ME_b^Ndj3{q@@8hM=9WR8uGXq4Q_!OH zVE!KQd{u~h%Do*9m8u$6F}?;I#YVqHDB8$o790LMDZFHz)A|!Q)eqg-yYVEq`U*qd z^@#+fMTYWVu>O$d+#XFhe>o*ky!?v|UFRS1Wo?s&k%=g|oI&W*>#)?hhbBM}U21~) ztPBYLE)7AmCCMFDCY(PP5gCq4^Kp-mx?vaE(Q?cEiSQ@NnSBoZ^AP!(+P@gCWY5wn z))(SJ>8Z&oP|R31{FrN}ZJXkFrsq2PxwVaNfv4b64u`O~GG4IV<;SR`e0=ESTuMmJ z-osu{3<9S2>6_btg?&(2VgoCMeB{kTp|e>iBr%jGUJd%{&KOB>5YcqK4KwOCM)K?c z7|`AiFLw8}^11Ha&l324;I8MLLqTcg!61UgqZ99wTR>oTC>47=S3T)zGS1 z#-CTA`&t1E9bG_xcd3p{K9R@q^qbVVtEvKiFh`2}yBwp|vIuwfTK>Gs_YI}X6qyd)MQb0`(<=mX}WvIs9xY zWc{X8!uv?A%VVKw{kA&P`@~qlb7gV;u4%~o%$ef(Sup3i3(4mqIM;n@2Y4x-ItqTR zg#siSk5i#O|1W@~%lpjrzW|a-ilB9@jh6!n-va@Kyy+c@$89J;vM1pCwD=Do>AD+< zeZNuq4Hf-N<PB=DJowx78!P}Q>P9W%g~8*4t>A(4>c+h3 z#)9v`HtI&sia@FFeg`jz?j(S*%Y)g^&o>?L7$}4@-bv&oNOIF@M+xKIEkt}G1P>DO z#umU$LVdT(3#9kk%!k7>5_VARc`j?a3lt`>>eNDp|=f6P`?B^HS4Mptk zJO0pH#@ahE2W3+b9nAVAtc20Lge$^?cOxV24f**f{oFM9=`KX~caTuRkXZ2gk4Xj; zt@wQuVZPmT``E##X?Log2;*@18`khMtM+lch;Vy#s`85QfsnLz`xW8E^s@xCR0V}9 zf;mn?@w*3(WJJp}MJFOf9pc~#&H8o25oxR{n!&5A3h^yPe1)irRB<7ay(GI`NC3D*e5Z%@KljOl27F#5 zypbhg2qkeJ-W%5pSDN(&77g2B`{S~vz6bbmWDT1!_6Het2HzkN8U+yENXC(lq=F=U zc6*$;L)cbPnKp;LRwZ=N``J%Ked$G`SEZOi5*|*Seon(tq*7UU=(x>@B_~o;pq{cK z=`!erBGQq)If-;t`1q5NvZT~<($O^dQRSr3+^FGfZ82zL`sy9OExezzXzxdOBt*^L zFhD30*APV>oShe+ zl#oZeTzJvA7A3%#aB}-b%s6U7@MdK1MvjHCKRU~wZFhhnNshaId>n58F>Vs*B^SOb zQsy-Aw_bXmaq3t9&`QxnQ2qE#{RCRrs3oDo1C76zCX7zhWOCBPV>{BBk-P?JUr3Vd zVdh|I+2DBFptx#qzwETVRe*vU8F1LYjmFQ+ub&2<49&QAK(=#GyX!ZXpr_TO4x_^U z$y6S?W+4@Z2h7<~O4fP}}c)!w?ytLYbBP=Yd&DcopViWzsd}-{^B+PG^4M zsa$K%y`lGi{y0Y(tgK-)>ygz7>l^_$&~CXZqp7EeNH)arKw*oW_mKt(^;ShHOO)x*6EnP@*31(o!vj4|1CSu7OnD)Z_eGyUm9cXA!?3+ zPmW7W<+@!>Lv{G5U8Nbl(-Mk1X--Q(hfP5+l2+6XZUqX{2wy3Y?7`ISS-kf3itfSv zJ-h;#6QWq`ozD>D8965<#c{Q&Z$bL=Q+BLyCa1xK2=jrbs>xYH@9l=iL2wU7OU%kk z%El^GS(;xlrXV2od@I1x?r8O{*j189;(OsFgynK=DZeOL<}A%`MzCKb<=;SohwTb- zYnr;CA%mBG=bGi?Z|cLMV{FNq54>72r%F{t%Z5M|_6CI)^p()|Q2n(Z(R?BT-C|P7 z;x-8UEfv$2?bEirs>pgnwre46yOFi8(N3hY9>t5E)*yg8$aQz|z;m9dXnb$3mzzl@ z6*T*iT@(-|)OkAb!)hR~0tOd6m8B{Zw5n`q3|o&q_cdEZlT`70mfx=98bXz&%|y92Al9dq2AEbGC7vG!S*x&)|7_5fHdGrfjnWB7_f>kyKz@S2@AInl+>ch=8HHn12s z&b;|~5m5LLIyYeehhhRp-l)fGf+zExv^6T1eY!W5ov$Ak)<~6JCv?xRH&_|C>8;B{orFk3p^}6sSo2ZSOXyn4x)|(ie-7N@lt;XXhgPS z$yTg$h8W%@?mQOnG)NnAP8$AM*?E6rC}3lF@7O5Ju`43JE2_RLX0j{pvMUj?Ye=#y z7*okmVl-Q~D}z`myI?fAy(>Rhp@3*Sio2&2QlZRYJSe=UDqf*xV%+Pnr-4|ZnPLn* zj-fU9`{$r>>+Bvd`BIP6XM6HOdy z$%fNEA`)Z5ab;0=r*78%F)hJXMT~GI3}8md41GWew{NgirdXTKSGh#R*!<`Kfnclp z5C>lX(rCh+sluX&hzcK)5A_JGsy=#))SD2c+V~SDa2GLq5Epz3UGPVZ7)0X)M^Zn~ z1ZmQF-C?WJMq<004a1}$3DHFDW9BKDV-J&DkC3~llTc`(qDcQ?%qVb3C&0=8TO?*4 zJZ4$K9HQIrjcmU2CkabF=9(VicnHg>$fvv}q@CWPNRh$VpahiB(nPK2j$V{_l3NsX z?v#NoihSVRzrT~@<_4va?960u#wB3E#+Jem<}48B3v&7YJ*cU|R-J_L_a`-~L#C!~ z7XM`Rg$G5VHztez1OyIG;6TabFPfT;4h;{Vq=zNL{gWlg-pPDWi--bodL$~LZAmah zi{9d(wFd)<=*oTAZB)2N)ay6H1IF_RD=FjUK1D0{CQh|{n~I71Ir)dxkb9G#eyhp^ z4tkMnfzHIlrr6=^K>Qat#ipR(>>2u}WbeOcju9q}Y5REYl;6JK>HEj6 zL6D(kNjv5bD^=O{n6@Qw*3n!CP9^)Yhe_KDVTx|Zej_KG0a*YF(o*_>F)&JsVn9=s ztwhIp(2}Lf<-sy7jz7Oy^l(a`<#_>&+4hnh>iK*75$olB^U6ltDE>I>S+qRlm{=dX z)@Zwg59TNV2X7(%N$Qz1KT2Uj?T5{2KmWi-VJp=7jQ6e-qiGXj(JJmQV;LBF_)ZJ= zh_G~xhT#J$ zY3WUxQsMS`HSYD7`6=EXVqL~;mA75_AqvN%=~ zYeVq#z^+&}Ah*QrGP_FXX4P~+Qw6c!t-Y8<3y+@AxcN(n_Eh? z$G!|Q_~7}M?<+VJvJdyXsM}dm4LOX3>^8-RhPq!gWrfnc5wpErv%E!Uy!o2G-4Q(8 zhrR`*zCB7jJT<*VO}(W_zrCI(K#;;bV3BYc%`PZ=gHQ?BtiTsk{b9It3z> zMbfEk)<<}UH1SOT8p6)IW2IV64yO=lW`@2@;h_X3%R9!EaM6xB>%Z?$B%2%#Xa`2^ znAX}IdzkSu?^rgw1CTc6Eti;9DMJZt8``j0c7|mi8E#}A*!IUWT!m9k9?iC=3L<&b zm)z@(Mp2k-ZBCz@kLSvWLUWi}oP?JfF@B2=6LVZ__KqAiRz~(Ub|||_3`W;Hob8PK zz2krI37Yp#IZ<{gh#$~aWitx8i+ z44&*_N(f?$TM`$Opc^P!+Q)$uXFL8+p_|mcW`Q~#ZW48*{phEq6sh+(yGl|K?yAwO zF$7ddzvx*DG#YTiwQ-zCH74K)smlRhbznV=a}ZWTjlF{1i^uY0<{#GF5)?NvP<;dD z=<|LlHtT6}O*}GG_{~dwg!83#rgZR7&imz$FdViNr$t3%mbV#9w-c>WCly1}<&wOo zX!WV=b9K3L865z=yUrq?qlNf$^A;lev68C~_l{?2ZvY@@NDZxwBo);?$KbGIF(me! zSS+`0b<(W-=QOS;GlUB}i-f9ef%f36;WzVfQYKu_C+30oV+Z(Ale5jo9fc{Q9L1!zrb+`O7E2Yaw z;NL+WsgJWYANRYK-==T3od!)Nzw9qK!l8^!oT)B2$e`6pLw`j=9t4mDG9?T$SX4}P zH~#vz?v6FCZP9a;O)vqw{Nk#DgVx{I?R@Et^3Ag4hLXq_=NsR{R^(gU{Z6JY|5ImbF8}js8_U_# z`Ivyf>+*oE0OawQW$E?#`Aq=eKHK$wvG-2jl{E~%Wo+BFZ6_5~Do!d%#Yx53v2EM- zj%^zi+pgGF?dm-5^PV$K-}GJgO@BA*A6R3JrTLo^45Q8;MraHS71#&;#u|X+O$N1f z+y|#x7r2|14$TP^p9SxCA^aeN<9`W4pV)vL3Bgp81>=OLKGNDz#(dm`Uu4#qyLc_{tuJ>KTP`nFzNsQWzusw zBO{V$nlLDpn&HC3-9YsyT?Az01Hna5_x0dStEYHwnV1rPguV(BHYzu5aKPRE&_V#HqJSXXZ^cQ;%2=+fa0N#)HYb01P!hrXo zsbHT-yUBb)>qX`F?O^Kko|)|>fm$~k(w?T(nT&`w&44aMvWQurd(I* z&P=Mvp(}KP5vKoGfJ={RS!p--RU+yhfWg~B)OUr1*e7Eno}N~D+tdZdJ{6TE`p~cT zOlZ$QfHe_ggOstKGI6G+Q>&Y|E{0xCV;_`Tz#&e)Skqb;LvmS)V(wbdjDYLzU8RC` zBWvi>1VL-7zuzX%WYNec*OiPa&&%h zIX4?N+t+dZqeUz#zHqVs#!j&Nn*BY`@$&}^;oHKWMci&!k~&}9t{w2#@0}ZeX!M_M z5xrLji9q2}1kxWc-vB`=DIut}iIqE`F>^6)_29r~hP-DT^;+f@T5G4xIBu|q{`N$N z7-}Lt@=@G=u2@!YuO_v0Rlb2XVvabUY!;;VpiV%)G{N?6oJ27=A!v7mP+G`XESoO{ zQKJ@w4};jJ-woSvAd4Cz{=RM>&C|4lhL*E}G;0Y@*NgU)O7StfvSmj*-O+5>g~Du} zc(>fTfNYlt->k9_s9xQt$KsMlxV0niIS@$WOz|!9ck6!;_|fp6=tt~H9z*%EKP{&y zNf80q2JOZfYAH-g6*?)T%wrWIFj?xvke=h=&3!!cYNSKc$^*B67MBD0`3@YOQOnok z+CLTHy7kzVkR3dp&G9x?TCWoXrN2bP`lCFuhl#3=hAWSA!fta3`9-^*|M4c) zp*Z|6Z{q!@H}OHZz?-v+wM6q*`XBIc-tA%*Cjfc5ZcP>yKR5tu5*(BGoB}WOffpb zadQj9w)6Aa^vUzbJo|phUkYSL(O+9K?62sAf0%fbf@s{qBhf1(iK$4S8N6AX=gW+K z$H5MDs>DUAg!3U+DMh8Wdwb+W>EejCb{wA<{^U^VWgcz)I3)zdrFQ-x!KYO07CrnE zI+z9Nq#w(z^EB-}lIHsoYuZ`&ArJ)mo+TdD`qwVH)8|FPR>SHeM4|F4v<07D@BcyG^rC3V+FnxyXvKNH=#}2Rc=O zB3Obxw#x9Z_y@;)SQjVppvog0=VJ%2R>x$#5d1cOgEapGS}zqoW9wr7vosv9QLE@O z-+b7>=;MgMF>hxXr+0q<#~ALzLDbBh@jui#xn8#_=^hybSP7hv6V(+TssFvikpmUr zw*)!{Dxgh(wuw$2T8!!@?grX~vV_s?Ag%|4@A}r5%!z6xKE6X$KY2I~p-?h4CH_%7 zfg36gX*@QPBmQ<4mBldZ6%LHsKY@J-1humVl{HH`Z=ApeA5Z=m? ztDee>d&O&PJ&Kc@1`xrE$u&o}6G@@%ez9|>gvbVwXMpJW9q($O<)^%Gsqh~%JtB}ptwDsx3G5;u zeU1aNXOP8DPAGCMO?fyfW=%A$IsF1sz*9TJhCkyufEZAoW@||b#FG-`PY*Xv1Mp=; zmn-YcqRInMBO2InPBVSWS#sgi#VOK*wKGA0OkE1cvQO(FnYSyrkEv^{1-Q?@*2B?b zyI<}&ZLR*_;B)3d5rBFa|Nm+a^8-L&zW-_uk21V>(sAH$QyW%LR9F1X_p;YLya&>8 zL7ZX8l0RB4C|xZ$T_qu0%gMIU`M}##`O1xXDU$wC7|!#!k8yj?XLhRPpAF=LPo!d7 z@sfBXLai4-WTxMXgAsP*t2HH&=oG?h{usTBOV!|OycAEt>ApKbbRCwoNY}W42#e|iul$}vk&jV_&udoI%JzH#-hN= zJIwuF6K)XP|0}G|*cxs;M-d-&JY+?ILq~pGdnmC^zFyJ)QWn+;v5t^_cp!te`wPez z${0q9Y_x%#jYX6lJkjMv(E??54{DwhWxfb}$(g`d4l2JhRNq;|h=wBf3ZO?vna^9f zJwfuv5sntGu?0WwmV2&(0D|gzcGV}4J{$H4q|1dP$ovOL*Z&tt?+f`akWS|L38d>< zpp4`G1ElXjdoSulG@w;^7)A2kOvb&|ZNTmRNBfCDlBd0P%I`E|TgRFj0;s1op&g^F3?nPD?H3 zpjZN#3H;+r&e$lDvO?ACA0z8AvtobTInJ$u+`D$GZEk~WrCp1#fUCF0tneCoOKL)| zK=O)4aQcL>%mOz^soJ%=);s=ePbOBm!t=RCd<61uznZ)(E4&99NzXz^%jwj!sHk4m zPbBC>8Z-1anq(`LcR4a*8JZb0Nlm;ojI!vNvQWNwxP*u`T9P+{r~9SPbC``b{BB2* z{g0%OD+*PYz}Nc+c|b}e8El)5G@Nex&rja`J6=$im@_4fXVgaf7IH;MJRK)cexe8&}Z#@!lJ`*9#`p7xW3613v$q_aSukA#L`deDt9a z^EHq-;HT-`v>54WZc0{9&LZi;Q zqpnQD0Pj)Hu2JvJQD34_kjMXK(iMgRyvHKD{$bMnvd3bH#uJ6clRt*zb;r}Q$1}Ue z#l6R~KgRQkCh{)+%cO@+LVorCmq{P3_?T$;WYW7v>UDp$W&i518E)rfu1#9&b>P`li^bruTJcp1cPSb%$)xpudpK%o>7yisc6K!G7ONqbj4U ze+sD45QmYz``k<;eRAtJGYB!$Sjb>kAJZuQ(@eUP17dL)#8YP~kRu9npXNDaX3*SY z{4BoD3`_T~*Q&uCwgs*~$V^D6%xH)OY*RNMv*Wr@sKf|ty8{w`X2idNe=6)yZD*nN zCXf5TL}I2M^QW(G!0P?E7E!lg*bEmR>lPsOW)+oZAC(vWx6}|oyyEzO zml}F+{UbHBW*%bC8RQ`z9RENew4EAfT6~;^!a<(JV@6uNm{awcLx(_2(pyutolWuYz@dy4G8+65O&XB zZNiB5O)YOuPa{LfbuS8U4UBC~FCy)r`E0CqE%bbwRYYE5Bwo&7Mlw@I<(ryY65b8z z+7im%;<4F%BwNZOMxYd4gPI!nan zrewPT)w3U5wJQ+4%YCtLsW8K&e~`^|z=w3e6@6f?aKHmPs9|2ML>dx8Ih6K2WYIn3 zt~%hXI+O(+@?0HqP9AbF{Z{t_B+v2 ztLG>?mU(lL$ZOy}n{3x}Fo4A~utk%poq^dGv_DHm-(F3(p8b@bqgdC|MW-H+UIYD} zjjN}>Aa9;*E#+KaMqfP!BR|<1U4?Dkwdw77D7|M)-9UWXRI^?Glk-l9deeivXEC)j zSc{^J`byk=GdX?70?K>;uv>!y+Zvf%js3P(jJ&rfx;_>2vVi(QZ1*RQcow_ocKY%? z$)M1}=d^}(qizQ0NPpv-!TapYz@5_08Y@y?%%5}6W^dkKumCbmVGFXwB}pyi9Em`L z32H82ywPV$kwii$yiT7Gj2K+1Uv}0|HUa-@YVh$uW@HFiaEvM3H*ltO7RqgJOOB&& zNsp>Ex^&8>(*+WU7%6f|K_UUfPh6BQ#N*7l%0$mHkDQzKR_94xif&Fdmex40Q=a)@Hd z(tUM2no3JzM&#jlJ~Cgav5mU9@9ZcLSY|sR276i9AQ!4AuNiv|hY@%RILZ~{U)Ue7 zCH;%P_eOUMK54+*7_@6?l)r=`#KgKFyIw^(ro|Y;yQ-KJ*R$@PI3^56A`~H7YT5xO zdIO;rCv3#E$tVfy}a;;`W>YcJG&1x>xqd?ov!6z4bY71PFVyk!Cl6&$UR zp!;uv*F&62!q3SSiWNtT6G|em)c;5gT~w6I!KUO@q)0=!ROJv|uo$F&W^<{1f6blv;4q|7^1vGOMBmNne>^-38)4hBFQygX74=thzs z@x|=-@I-H1OU&7(VhQrE5gcJYqkPlHYSkYu!^mmd-spDd1pdgu35L$xS#8uI8J^Dt zJY4?gx)FK%cKL3heYh2IoWI>VaKy=eb6_8zR~AhpP#BB+g+j{+cC6bQPanrH4<0|rA9aqzx)a#99b#_}*J9A#ae!5x?W`qC;9=10;YULp?cuqj;+ zFAQIqZRt4AcEcgOYPj4wx2k1_V5iP(m}a#-G)BojtFYo=PLtJzv69q zane=B4ZOufuT`FPJ1{_DgQF?P(@=}+P|S{oG7sz4`)v!myKzd0BNDD5`u=HY#Ykg z&!EXpy#@#f33e)gOQHOX=1~}TEn!`^A<+nZOpenGi*tGaDAmyvBpKZD(MQl}6if>c z(i{`ogzF7v5s~e)=QbCA( z57wi&KS_4WXdrPsf&Pl{Iwm7P_1W4hxx}lJjxklB$b2{$mIZy05m-ZKcT$-$esCvS z^B-Zm#4JY8bCVrC`I!mt8U33^D=`Od5a|$+_@^TzQI}~WYmQvZPrN&kLv=@=eZm7n zI%UBp>Li}3avF!j@+3@uDHKsSJt--zpa6mI$Ti{kbb^I(=I`vpR=F0eFN;&gnDV$p;$M$Mly zLnG`?tr3Ls+H@-$Q)Yf+r3_jEovyJ$JTXN4Zme(bxQQZZ6(QxR{Eg5ojl6hbg@t$yL}so>M*O z#JLXeT4-tgg5q3WK=_-DsU6cAN;ZP<7B0$_2hTBSNVBN`JyuAy`G;T>jM1{_= z^P=9YJ{lhUuI@hY@NUdHA`$5XmOtW)9mqI53`X`0tvcaS#RXrB1nICOtU=w7r+%QE zoZ>Ic=?;nYsl&I6=Xya8EE$;iHPkr^zm@KjSrG2H)E;*$#BTqZrRtB&t-}~oi9)3WsRu56TXEKr@~(b-vkXNK^J@XQ zbdkzN8g%06++R!DJl|XSI@`x$M6pyM-Z!##ANKSp&YUL0oeGiUJ+(BZ6=nj>*-9`TPDh}*9d0#yO1r(H#Sw)9_T6A1}z^u%IIHs>4I2u7}hD`z7s&29Jhc@I_owS;U?a#+Cy)zCz4iGTL*_!@JnwZ84nz| zP{=*6HB>{?Mxk*%In8>jjc%jt*@zT`j8_2>MHZEeQ-Nb!%- z5VKfX^cO#hC2 znt`Eqi0%%(BZ5FS@~$i@5(&lQm(x7g2;J9g&oR9D_7|`oiR2063jSXUzY_h0koUx? z)WfqXDnM;FaJ-uwBa{WsSVB4!l@sq3DXOwm$wYu8;S>a3_;Px%h^d{*S_q?5Z*@ix znb1Z&!6IYR3NYSwFRn3D05hT}oTzm(dMe1DakH`_oUtl0dxYDlNzOsMQn^PBUx}1o zX&S5N*PX(*{YS(8CP!nL^^*3^=uN2BLCr=8R!fKZvW? z6J8ucw}hfV3Cvb$JrFC969Z|f7xr7abXGc?woSB$)8blMQr4 zprSM&e#uQgHPKL#Q@QPJ_R@JN9it>scG>(Z5hEd$p!$FZd6*C!&I$i>TbP{^&sIn61NTs9n#yk(-cPi|>o*SFW)asZ>PH-H3d>k2bXr63?@* zPz1S9`%=;hEEYO)3POT*Oq>dr#5$AA>tHHK>qD{SiYnQhXqjK+s=uf&#Yx$a92!f> zJTz(`H<>3_iI#BZ?6!CWH!`b^&N8(pJ;)d|^7||zdk{7v&T+>wjyUp>{rscu^wAd5 z7~wrc9>O&M*DW3EHRV@Kz4@Z)inNkTRgv_y1;EUkaxs<(!Hs`72lK8FxZ1V~TBS}l z9e1HBc2XdB)k}-6EVjy7@nw=rRq4zH$_3htC0BK@K6X${jE95KP_KXI6kN6IT+Qd3 z;N)(zlW+5=3nyGwBi$j6oh4umfSJupBqgY z`=->V^2wQBx#)-dt7x%Zkdve8t2vy%pe25}cX#$U>%>vSmdFa~4NiE@PvlDe0ya(> z=&gA<+0NtMhpEe=A=X^7M({u=oL`B2*SJ1tey?1%9uyM%%3t%F_{MCPcUN z>F6xUkCRpWL)JB3B%G+saKJ@;SUmmBO4wf`d`^LV0gGWhNT}w$r?I3R^qMt?B&_#T z+4jgZyBvcvA0o1_GzXo%HT+GcbXI9)NpCc8>vCgj2U?#Oe0i68d;c=tq%pgbH{C9sg82xvVH&4;38-H z_UGJFiouD`&Q;FNJNNdRp25fOot>qfp7R|rSG_~*T?mj81kWxMi71rjF3eHyHnJ#e z>h6`vE_}=GaK$d-vLSM?;X@?`7!Vc>XAg~L51nTZLwXNWa}UdG58HJQCv*=tbq}v} z55HxPU}TSQ*$8Lb(7T!GeHfh{-I(NbkHRhqX*-f=4!uPT4vhz7OyRIk`?N*6y>qB+ zOiaG7D5u?3nD&7wUb|{cFa3i7#*j#RpV-nExx9z9r4cw*LsWus(LVi`px|6SeU+gp z5|JM-+?f5T7X@T;+_rzdiyjAQf-*dZT)hQO#XlD!{#QroW+GDAAMu*0d+Omp(q@~Z zWuH?z>H^GvRW_G9nVye&fw^nYwr~Mku%0-$flDtz1X-#Eyty8}USv!)Ttz55Lc-E| z0r7M&$sKn-ff!CUWF8z7(Zh&t;KC+y_l6LRNR-u{hedNB*vx)F7%LMEHESk?4ZpE&iwREj4mS8+3kZ3EH#g8Ic$Jq%=H&T+>&o_~xqr|vS}n0tcw zx{0cgY8JJ5XvJfq1oIov*o-K?VjIF>meOZ+NMpjOZ5L9pFOd+Qi>urezIj>dsJ>D@ zMQXIf7SS{m8@;NWWuiy57gX9G>^pOIV@k7(lC5LjJlJNFbZF8qnLHd(K3<{%PXRef~1YB z+svBj4x=p~nHtMKqX@$q!qGGlshgVxkzLHf-#`;ly2%r9JNGSnAAJp(KQ4(Xx~CWt zOwhkxG1y-8r#x)L?jetFo{3#qoi|&C+8I|Fn(G;DQPSIyYTH=aT~y&2lTTwXpN7vT zb@xu_v6f$Ll_vi7O&~tHB6_;Ig1NrNxxS&fzU8^b9=S3Ehj_VExp1|=SBrgw*?%sz z7g4c)dfIziz7}r3e%-$QE3*GGVxJ0q1A(g#{%jBV9l&~e&49v6o*xE|6=?1cNXocD zFhH^ByHT0DfqPCsLB&7|i&TE`N39D%+qtPmb9iDxe02rX)7|172O=9dxV8fjo&nD7 zH$<=|aJ3GKueaA{{urd-B%?^AO1BmMpfJMlTMQYfMfp2@1aRBFdW0}oV)qcbzc>V> zcc|`nWPjs{%^m6i4vMKaaIp8D=uXDk_fV3Klsm~>t+#NfA#~RO{xC;Ab0=ZiaEkAa z#QBawtpHTNFnZBwPBJ)VQAZJ6dMG~!UKuCy^gxW(5R~2^jL{oGR!8>}aD?Xvan*dvklvApcflGdvX_RTXrP~R`K zSo8%s?hQN7SxU(ZZRMs0^|fZlBh<|~EX>(b$r+){HBcs;aTbQf9VQ<3HP-wwIP62D z40hPud(^;rqW8YN_Z5WK`ik}Zgf@03D|0^+_h3=$qQL4xCF(6=?=yhVaJ^l#d^%{N=Dp48vv^GnxCVFe^XYze80U4wSb5`R{n&gKjf$vS53N|NAgM>V9|paF6P%-U?cs`IuyVm<#)Z z4)=a8bN>hnM?Mog8zenT*6n#M5G|{9O)eFJ1WUsudrLmxiO(H6TbhtR6pAM+WoFG?>=_;o{}iSSkcrtpRJ*dG~9!+&@hE zBg1l)PNnY#$P;@Ey;gVFPUBUbtkCnu*?kB|c}dE$u1PWFK6=_0(sH&1j&Nz)-DXRD zby?|Psn(5V1XGPWQ9g?jGSkJ`p=vhJiIpMpwNsO@i_ntYbNN>OaBJ3!(7q{3lX)Xu zuD}IvtHIEC+Gn-N{+NCsBePxD zMI)@8fHr>9eA!>)GQ@tQFRl2#h~sIgK9Az*%fx?(q4r3x#FGpBNT$uR?dyp01&f)I|yM0`w&*I-Zt=9)WIU?wQ7K^uU5h0fur1PX?T_y&U=D_>vBWERX6d z`twR{eN9G>*wR)jcQgosgb-3BbF(TY{KsjciH2xw&OXk1_wb(^B78!|pSJ?+Q)-xENl zM`ot>u}wxlSmb6O&^8RViOTe92>4t`I z^QWPywJi=Jlh&!;51{Jpq2m@5|Gt-J{_*3skMdGbLwYPX+Yzpo%jT!d+T&M^WR+3x z%UMhW2N@l;Vm_Bxyg4G~Nl17-?nw^T>i8s-l?$eIjPW!I;m;Qj-XLWsw}K1>-whKf zi>%+g6g(ZaoYOLim#u*;>lAHj74^b+V`}|bDP5*|EI6`mOUPK6Ys{sD0|nZe^H0MXHk$gaDJ=T6_VyF~ykpg4h!6lv6L^QZ4K4IVljjpXETX zfSdc=wA$T7086(@!KW(!PzF4b=6<@D76W&P;$cg@kJUZf&PS!z^AzgCD{ zg|_+iJ4pyFyEq)xpG4wz&m`VLS)j)3?iBv+9Hhqs7_XEOSu{^zRnb(bKlRr{X0DS& zGj7vwf|U~xGl3cDH?+Z2+OdByp1KII(dc1`)aMH|2SeFSB?P@u;q4o0&L@Lu>AiPi zbOs7wJmWdBH^{%(o%Gfh(>l3OXsasB$D@spP^2crcIbpuDPR0XJ?KMK+2rajBo1*~ zKuE`Nc&-nVy&<+M)+gL4Dm*6(rTwF0^2O{Wm$ij4mcL?>5$=_1a2GU3X5}0oUh!o} zOi?yLc5xh|`y_!)wJhQ9+KgPN7C)HIa3uNQev{Qbnm50c0Yf$lLPr$k z;`oS&EBq0*4X%7l$QDwZ)yyMGo(JAARwx70_)J>t-Sk%LghPt}cUu{PF3~z75Iw-T6$3}(^vBJb{?{|%e?vz72!sL}W3(-DG z2N{1)1zwTUE1^^r5!1tqIR%kYSjnqo@r=o$`l#-KwNg-hkpqc~ac}m8hZWP(hl{t6 zoqjPrn+ZpAW`J0d*BBoVV6TS%s)s!Dy}Ci8J{a4y>R?rKLLR&M&Av))%1Wvx6T8i` z#N8f4-4jG5U$u+P=!&gm@aK62@LNM9vFrOZ1Mg}%NX-<|l*yEmac#UKs^%Eou#B#9 zZOXBwF}%S>_%ITCws1D4Na9>WS&)7y*19&==khO6mNp0SxG_<8fTeB9Mnj#7P}OC6 z?c&Oh`Zl1SO5$fXEL4#B4^B%oM72e&#Cq)QbPKrC>O@2HkKa6LMw?YvfNlwCeC&!m z?E9KKS7QrD5@dL^KIf(b}AI`2QM4h zFS6$Vu-LWx5m$q>gefvBNb~SSGY%xTLt7AfT|AZocHNXT1NaC5u`rYI8_bnN;>L8q z@vq%>Sw4sJ94u${^KG^@J9m^Xa`N}|H8W_kM$i5FQ1=l;>nW(?*1wV8lo7~&XQ0Zs zKaeznJw-2;D2lFelB8$wmt5+FjbCzcoJ%-q{gE&oS5M{0tlZ3`yJrsZg%53puQQ#U^^~ta6@lU zWy()!vR^oL8=tXk0vV+`EfIRRk`L7YEJ{3MVu_vtZXZzHYo*8$a!}2MI=S0_qZ5l$ z_&URNEO6?e&*_IaJBSK6bMHG?c z%(wQ2+z)8K2r#xExG3d~Vt-+A;Usjv3r|1kn(E@$jvuVpP;Xx*`kwG$34%(oSA=G$ zLVH!skfaMHABmPrYFZ4V8<(X{m@jUTVLQ5p-EjYH@DD`u^BMQrXxmd`17`z5S@?x#xN3O6L8253~1%mDcArsn%N#+Mwf? zpU8u#m-muP@7r?T$AgjIpG&7a;i+ry=RsEA!>F)(b)wI4An69f+3M|?U++t=pYO{; z-uqoySBKH>=3M}I!j^6txAKJwA- z(_TKx6WPOUJ}QjSEqDPMj?p!G0Xj{=1$hAm&)z9}0jBicv3LQNX2GFK0k&DezEJ^= z>)w__0dDACbwB}LD!ENU!RIF2te}9P#mKb2fN*3FtG|F~nY?DUfcS{K{GTBCUfE3n zDGWskSmEbTyb!IBoQ5KgtdN4IFq^HAQko(|tdL66I90ij+RQkuDUZf=zr?VRHk9HB zP)L_rSm<9!UrHgBU&v5O!PsI<-$TI^TF5kQOuJmjY(~LyWK4ZU!75$I3NohbDI|j{ zqC!X}!!pT+3lz2Z0^(pOVy__Q;5gvmDdKz!;+8JL&s1f93*r!=#_;t?R{t)LV(rsP^T;a`U2@hlR#qvYH-;q@%y-lr5?E)sn*;Tb8y zm^R^`KM<@i5l}sl6e*VCF!>^3%0Xi))l|f-Q!LGJD3M6PM`I$XYAWh^$md!trdliy zQ!J$jEz>}y8BO(Vx%k^QmEuvc;uV$BQ?U|=N*Sg^8HHK}r$mK>T9u|mHTF=Zrcm~( zNKC(2-RwYp!cg8okl2}&t3YOT-`typU9)DrDnYMs&&of_&NEhRsCsC7q5 zbf>BHmP_=uLDW2{^J=A3nt_zkJ(O}argCpT`AbdY3QgFbsO3m#WDyGJsZBY}4#chw zB$a6-G>^V(mj0BWHnB1@H9PuwW@3V4#MV<}5o<=6N@KNLU{zyA)KY3)N<%+FV>Liy zYjq5+r{06h1oh-e*Y${bl}op{QeL};BkjwPYMT{O#F^l4qq z%3SSe-CWIGt-d&imbu5$dQg~m9n#1uLhx77dbN~!_0W2clzC6n`g9yqDU`V#mHA%L z`l-^oFVp(N0R2(u_&1N~o=QD2fPpM0{seR`9CX3bCth#nnpD7GeT!fMI!!EdTphYl zU%CL0fCZXAT?7nWh;c|*Dll@SEEEPUu!b(WfzEe?E~e%&Se^{U2_)q#fIc46Pa4S5OQf7Zj6Mj%QiF>=MZ_|h#Uin0H*thA zjRVMn1qN13PdrFwgZp&4uarW3V8cJ@ph2&ylbwL9j^ISxUDm z%9}6a%LfD2m}kiksF;^^ktgBz(`5NO)D>vb6T{@`lE`>3Hl~|t00mJyP67boc>x(`b-G1j+(Nn zmb1*npcIBaAcIA`>RBC5U#2_+G!UXYF$gG8Q6+sIcz3Fv&X@~g^hT-bNrdcWvF-{S zgj}TWUuSIJrWxokuNh&?H7-w^ux!w$FT&}ogg7roIOpMFfK`Wt?6NAVvF>&BACtE( zL$N3cw3(Eq?+?7l9tdp9JR6=j8|k6#FlH<@E*~0zfY>~ncJwDiVhGx1oT#u#K4Qr6 zy_lbeb0ab0W;E;`_mUm5>=}lV52q6 z{w=n;C01M`mtG8KW2N*!9P!VnTF(_j@{!e!PF1lgLncPwp%wElo^#JaJFI*bFyK`R z%T?(zQvgL}ej?=co84~dMaMk&G=zOPjIB*1OUiQDq9SXkudS49?c+q*u>=&Ve+|1; z?dL;b{<6g*3f-$+Z43`fYz1qg)$lV##k>5;>$LriYUQ7K){hDQkE7c0H`b|rRxlX` z&6_@qhifp%>f$F_NM3*+f;|Ky06eIcEwv2V;0F4j4APzrHp-gT-Ixt7tj=kG6&jV6 zX`~juhz6kyU{b?|$XJZnTgNj}heSw;ymG_3&4zMZh;n_y^i+r1y1xNaj{*Vy7vq){ zq92v19*HObQxUL4Eq`k^#TkBG62V(9oMZM*N+`9tR63p9Y3ueKaZWDte&8j zov^i@u$P@^w4P{&op`05ILP6DR;K?itxUDpAFDK!*xi`JP+8iV7P6U)g2lIV4lNCH zU7%P($)ZZ=+WdViwaxSWP~L*{kuX+AmEt)Iu~Fb}xZMpQ1q(F}1Af1*N(An00?BBZ zq_y`_TLQ*X(;|FU$#slF(}#4X+=G;Kwq?H)Ly0_SeMQn?c%q6DH=~6~bl*QQ&20t) z%EW4*pPV0G#njWP2E2j|8tRGB4Z%JH6q>jMv_LtGd0G-p| zgu0R$j%=sdQ8KNPJcGQF=Gos7?~R`1D;Nz0T!a~e6(0KMchhSy6FiC6o>jj=t9sVu z4LV&s995q8iGTE_jT_yZOYgZw@{HwJg|!w;_LqJLw53Ai@O8#~uL#?Rg^Rd9p!AF(12yDDO{4KNhemz8BQ&vIeT3S| zk>K?y{tyA^P$^z22^yi@(X_tA`tl9s)dCzKJGaLkN7sqfetGRpQBW06M#i2ekDX^9 zuP9aMvfoQf;CH?airy{FsMNm14p%v`>w+uW>RG47gg5zpD406b76Zln}Rp zL9@&Uv}3tUJBc{iXc@7Ahb8M}0wIzmmp))KYNV zaX%-|mKxSWg-Bnlq#^cK8>%GRs5IFlxuL*v-j1Y5b#9_?qqmJATEyFD`+`WL6(c*` zB-kJn{rw&E46Y7G1m376-IKS88D(gMYlh)0q<)EHC$;;m)-(SlN5YinA$cRdOOS@7 zqDqn+mD6$jn%GrL!#h4cW7?3Ek5od3-#clj6FUSzK8>y5nrUlXvvnX5N}OLf!b3 zov|70*PBwl(KS3k;(hiBRy6;@__XW(&zuviS@dgTVs~yai7Su|jnEAJOxt2o;6+23 z73i@XWK z@jxgtiKY||fwnRZ%Ov4^87!061KH57yrud8AW84@E18(0)+Xn%v2virzRXlW$5f0$ z{F4ES7R+0WbZOSX3zI*_{IO=2*kZE=OXtoW*O+e7+I3UyelND@~3WP?Q|I1J(asJHGIsk|^Gii`&G#mwv7t!_RdIvSFqNhDp>v*N!5x8r~PH zycfID0uxcFPJlrYt9sbPrTJLu|E?V;qHv%qUnZ=;>rGEPkUEaB=)GFTO(jId?P>LClm9KOv|b9?yx-LH`$1Kx-H$jMr?28istIx6mLYlKou)>g)0zTq`Ak8v z&d7YFUk-z{?RCXJ?Fq-fsj*)HXU-3N>d<+sC!!!fI*Q4=@C>N zwX7DMg5qDa2P!MxCj#eFp2H&Gb77#}vL^O~TSe1r;B(J^93!SRFU|z6aqDe+iK9;L z&MCSM2NTDVpoYP@0?Cjcd|7d8p}h|A@(CXF<)Yp+6IYXDY5Dzsc$x>^BZ6jJ9l(`X z!cixO@po?|$0PNvAvI=XvD8rSloY;4oYfV32a#aG-jPC$U%x_-ElL z7C_ug65Sf`xtFw?B~_@SrT*^7NXJ(QDe2)v#S0`OEI}npClkaZ)rof)b#g3h6s41N zuXUjhqHv|iS0$H)ptN9IX>fIJr5vCQ+1U#;SqTa%3ZXI#>PZaIz+)0$4a7MK>RxaU zuh(yFMq0f=4CTSy8u@8^>-^H}^mc6VH2VWp+Ulj5#)%uC)@ly2aCPygaUm!**h|H6 z`eN)!r|*4&`&m(;c0-jvp$ov^QLIDBl9js6hZRK=iojqV3F4(wV=lIcTmgVx+=_6Y zuoVDVGGzlAUn1+ryeNTu7bZe=;mo*fs>p*8V1Xp4F1#_YKK8|^f}Fv!53VA`(bD_G zAp>5#jVvsZj-S0Cz6P?Zf`}(}*ABYqp*Gh?wb+K$nA<+79KO&dzF3qXk&_qqlTngtX0x* zo_~iIETf2z*qf8bqgYy>r{RjqI+8DeTnM>UU)lN4_i4WYkp7uT-ticvyDB6n39cpW zOT?PsCGCV$-I*re^e4lbQev$p-_WJ--UltylC*P>rf`Uh9!7gW#Dq3*YV4y>tqOi- zd^TWHDu8rcPE=fSLSNd!CeV`F#%K>$Qq?S@OhaNt;p1xgNTJYD9<>yo+i=QrNd0E0R@UGy(Vj5q;NIHV6>$^88t@#pG=@%Cgy)tzSB zY2lH%nmTJlI2rj9W`q@qWqd|{vQtqS$UMvgkfg&9Tu%Op{3wq6C-Rf;0y0GH&4wm)IJqd&>|vc;@*42Dn&%pJTi2P#V!6jq6Bc<1Vp%-2uw;8 zfeefIJaccx3T3t28|hN0SE4Q?e9Gxko&i29;kp0Bd;omPk=dnALNatL3)((!Mr860 zCHEOcpIXiDvW~11Is12{q)D;Uuf=*}xikEsmJ`Ih4W(Ua5geX$$^s=a>3BLg`o1HG zAo>X$h2tOUJn|+4p>F`DXZ1hZdIt#fn>TcXxNU;>C-* zLn-dT-3jhaad$6JG@P{m@64RN=j?rx`&?w^ee+w-S`qQoCG7A1z_vs_n)Jl=?GS;*e>=>;pLwjv-P4I|&-FDT^}>7&i0yS^J`Il_8l>7Arpy}T zo*RaLHYo8mR=;ml^Jy$GZq#aT%=_7>_uQDZ-Dt$ul>ENQ%%>^NxXG%$De`BN-E-4i z8*C73vzu_R@cdD=YD(F#dFscarX^M`#Ge1_J7RofA`W?hJps4N2Wa8%B|PWE!WSc2da$% zbyR?O*FbRN{iP^SwMrP5tgxa?{dYZ}I$4lb$AJD?yUrQNWUX7tw+%A7%slOf!9sz| zIZwX9IiLbK0nmK_XvSp(?U#OlFccR*$n6XYJQq5YzB*`SJ#_MI$c71^8r?b#7!KFN zun*)?eL;t8HPtBkf94G*bPRs2B=gN4j*4zg_8rcu99GjC0XU6#u8kD)4_1?Oo7=TP z@-wUyqn6nNlFeAIzJDYOn@4uuN$QT=7Uz_kIc|R824@ZjfAO{6AF%0iCk<&4RT{Ru} zYub=x20La9Nqz{$e&$ARc2{<)7RAFoWSY-KsZtB{!#L z$FlG;JAMY=C^w->(*LPyjw^c*^fLEGGA(64tK`>3C(y>zGv3QI9Q`t({W2j;+J9&? zJy*G4PcftQGA50NrguK2Inm1fGKMX%2wAAEG4+dM!g2F28tTte)GTJTPkPEjISVYk zpIFL@T0E#+2qRsH?Cene*ye0E`c9y~o&;3SKSUTa^85WTjVR!%^QKuTm8*@zs-l7&8N=I=XGT8>t>Y`3bf!BY!?c={}!Ud)?m#R z>c$qzBpN2!_QW*miOx2j|29D^+B>ps^o?zl+${=)tq;swfQ!u+za6^V9fqzQri~qD z@DA(bPIc5qjxDmb(=K=JE^pT^|HiH$cvqNgPgHQvRB2Cw3_*$v!K-F3e0ncD5J`z_ zzk+pN&0xP`3soz3U#DwdZ)4v8yl>#JZ_$}SH26yUpa&sQ!^ znl{ciz~>DPM@W^Y6=SEX{uf8NaEt!u0|t9@{>SNLC+X8?w}Sh>!Dj^qCqo8jr{JUh z+zSBtl_2^Btl<@W+~Lk-TWjtSGz3K3xCASlmHD5I8!#9U^tNp>&^$zuk(Go%IQxor5p9-u7;)fAg_iKIR_GZCu1VoGS_4$K>8x z1l%9h+?KE2?kn6o0Cy9}?iUU2I0Npqfp?RWclwvt$z-=n;QK(9Lo1;NI^ccT*gX^Z zLm>GdW5v4xg=>$1YcHXLn^>fD@Ne6TKOcY(*%*5vZ;$Yf52aBLWve$iZ@1A?7jcTm znsIkof{!NEe*`b@gjtS11w6G(?dEkqZ!$lX$Uc?YKDEBxyxV-hy1a0o+EeiVQ=_>5 z0QP?@-uOfD_NU+QwIkrQ@#47{<)wu2g-7uB7CCrF2)t(qJ_rD_0}qNO5zaRE+_#>T z(2;I7kBxHobD7_6;*g>!P822)iX2V=pCq<~gW%A}#L|_vMZ?fY1v%2icf=yGX7oYn z%DWP=qyql1gerT((Zwe@Vi_v?GRb_gH6ciIYU1Bv4zGH(!xc$$1^mFUL~2J$`QkBT z;>d2(D#h{Hf}v{CC-Zv$voc*Q(`OX%8+B94sg<6{6^E=$wX739NYeUh2%6byT@%p-5R-9T6{V;s<2d~qo`N`%* z22$1t!+gS;hWRkFVO8r5dZ6H}ghrW1(CMknPhQ6e*PKFT( zVw3#{DIdwQ6ui)kI}B3Qk9$nog_C;B8bem5n<2mDIcMy^C31XYsJ~?e{_NE&3O&mW zj?kppQA>Zp5a&=9$2V_KmV~TKXT{_6zKh7P4E$S}HmE8J!Evf7|67^LH{PnLYnnHz zLsq7o8rqhAoa#D`e^;iS`;D50(v5eT#^KaWTBdR08ofqI=1tm`KSH^5dj!iW0E6fW^ zirZ{5(mZ%=t6W39fj^@bLxb%r{dvx6W4KnWih`Hh?3+!`by&(A7mEM@K*R_8y1Up6 z$Mk*;@w0+j|8}Q-@ff~hpe;N?km4|uC1Q73Zg%$Q7+%LwBgSFJZw2gdYllJdhyzFT zh?Xq$v2z*^?9y5+_JhR4XW;yq5Jhe%Jf3NBbh$KP^wJ#=gY1qV!kVmV1#izme=%iQuIT zaZxrUxYEcWA)DXx?fC5knyiu{HcO$OA4AL)5OwHh?xqv*pWcC$Mju-7JF?%+#KhSV zlPKql)v3=WvSYue;yh-T&J~MItNgVth6GT$U`fgn+wbSq#*j&!O;O`BXE3L)QCEmI zqwL@R=$;{K5X6*P4{OnG18!wC!JA8eMz&x>;2JmOn#({|wcyxnl(E*B%goI`;B0J_ z|6rb!wFyfLNFY#fNp;oP<*?*k;Hh?pl#ftE5Bc`36&xq$avdrU1@3tId@tsHOr9PJ z!Fjg?qR;0gL?4RaJ`D#k&;Jy#J^Dg@QWK#tpAS`WB+iLk8{#lufcR=9g|woakcyK} z1t}lVN2;VW;S?~rTg&ktt5106C|b5Cqa1mI38{fX4_+iW1^qm#1OOts<< z=*9A(hD1>qoZ6KFYr)J@OkH&%Zclt%hEt zHY41fJ0cM2ZG*89BR)E)#$~N_FsHS;yI;8O66qf|rL--`pSst|YMeXZSFYbNYxWWw zRK})tsBvC?{h4WS$ClE0E`H*(Evp78AC*GNM~aa0Q8uJ}!~rQEnGzX6H7EDLDI9-$ zr>6qP!d-~wQ6mW{AH_h*M|hC(5p||98eeihsm4*bh@H~AIITQtu38~T`N*$2ec;~h zI%=QL6inEjG{|Xi7~`C+KziAdEpYG5{f%VL5j|sgmE$G>m|;e(nKU9Fdyw=qTaI3l zFkQW=j;S`=T+Jb4Ec5mzjhxWpQ**+&IrC1&48JHR@K=Dn$M4@;B!>qR8Iw8nzjH9s zECujmr~Eute?WC|ieT{ChH|;hVdfnD_?S5(;Cfr2jAtz^6g`{buw3*>fK}d+*C^-y zwq2O?#3Lqi{+R8qY%0Y@JuPaX3Vo@<`1PaqRGV&NlY5g>&Z+Hr=F-B=9k2k`&R8gF zdB9<@HX(<}oaI?-!o#CBkM!JFK5M1B?!M6{#oqoha&>)jp}E(O(K*gXW1q{jaysWi z6I_+GUgh$qT@%;w>yOBdJLZMXYXJtoOFp&N`#&WBvMU8+ZA{n_cS$&BCsm|A@_udZ z{&&pwp?n?N7~w5Ktb*4zw6|MeBQFp&nR9Y{2N@0i*AYsvQ&K-@hh9i}jK|+0u72%+ zD2;nk(EuYRIQvl0vt?2U-6i^TZT~aE)6{1{SNEltJ+3&OF-?c-QpubX^zOEK{I1*N z4w7B1L*BWp3zr0P{!@r%VWeBZtpW)7R=}rU+Z%UvOY0Y&Lp~dKU7r72`6yh{cL%rI zD`BdWYzvKd@)y{xwW9Mpt>k6JvlU|0Yo=KQT2qNd=ypwuYA;l z5YmGf(vuY5gWS-A0umM_j78n+K|kx+Cg3(V!4i4ji^b84E!K;p){A2Yhpg9&AJR*Z z+-qVb(oN7y2M5h(t{+`JrFiM2xU7l>9}ANKAnW#1swsk}V=L3}UVce$ONh*})7&iIzi)j5-}YwamfxbSN>49HIVFWsKB(C2v}ND zU#<@gBx3F>X*CXVB@qia3zC;%vUCFp)P#tTge7uF=+KRD(hb^D4X}9)d}|OP36V~s>UG8$Fv)}EMjWBBmbM@n z`JUVxSvgSJC*^l5Za@W!4S~^|9*~8V%oc-mDo4vekd%^y299*$%Wy@ZR8X>HVX{m) z6R5x!6w4vm2pS>NlPT>RrkRn#Is>J;!I`Xyx2z2~qxSJe_bL>^dfdu}ppKd1B+GV4 zOL52&$_>SIfHKxb8!P2vailVRMT&6xDQ+d|sK&=oM}Kliq<}{2nLyw`HyK*%5&d{+ z6*uWXJ(ya#(V^sCE67qba4aumOoVD;fn%^`9wkbws10_w{7lBlOv(c_EY?h6t8&7t zK};WY^x#Z}+ev1P2|j>iz(h$R7e|44zSqTV;9PHLtYN5HZ{(DJyl#B3)sA6TObiES z{LxO-vO$p{TfEPN>5;!z!%m#7Qjq|58Ze>AIz9qZ)W5wo1-em$BTY66Q5uq)MnaQ= zPx&_4Fg>?6eWliqey5bW^^JO32{UFAAynywL;25I6g(#rM#v07PLE>p3{m3@TEh%U zs4{%$6ifpi{@qMC)GUR4`g`ixZ=Yr<(bB2ZXFZK)Y3$QzL-l9f5@zWI(ij?5pvGsD zpn_1>Rl=cy$T3w3xr5j^=h!(_(YC&Eu0xS6fBOs<#GNw7Q#8lhIL9|I$Gf3scmlium>^GvfZtFdPyj?QAPJE~ zswS^D7!jL6Z@A{?moOnRnQW=reDPooEkNsVZNX3+1%d>sbX}oz2w0_DZv+xxO=C43 z&6ch&p2*^MJy{#6FPZuw9E?mV(@?4$03FAmKiW_>SE5uPlOxkuK3b?zZ?itySg`~& z>i;1Bp{ep$z13W~zAVQGMw8R-XpU?%^BlSC*~$7?GjOv}_NHyE8K__H5rEBTFy8WM zqKEnVYyU#D5`kib;f*b8a1j~QP~Us*0~HSIA1@Ty2EQEP0Du_1lh!=NqTD4Q5=d8D z)^k(`*w`>X_lq1GkY_(TAaG{=~MXo*A;=s2`oU&1ul+5V?^-~`-QsmVlZmipkd zZ9}WAk^mkZ@9L@C%+$2>(SKV6ss^ksnRGM zmW52wZ8U_)5*)WA>#zvj&xx{>bEahy^>ThShPc65sUn$1x(t<|_D{!(sr0|3bz;!~H6%r;IuD3H`zEwc3cyoHt=2Fy3^F~uz{&U@ zxtNuaM`=ACoW(NzWT875R$bJl?4Rm5Oxaz^2Sf6x){-o9v;E3-U8~SqGV%)S7quO) zecSi^{1ZL03JJn!DrEA}Tld`ZxU9`wX1`~i1Yn(*5&=t`M>B0}_tTE6@lSrSxb<@B zsn>#q?Qp(sUx(n!o=4A~$sC73eN0PLKw<40;%I)KKwCoP(pO$&b7gz97{r|P%$6RU zE#$2O?8zgOt`BZXMcEmp4kloc4d%)}vTduABkExoI=D(}QI8>3#gx^<8K6H&wvajA znx&C-jJ4nX|zFp{uol`yb@sFq5e7#0z5tvMc-I6MC1N^Fs3hZh!_pjoF zZtN73;Q2C|#hb&t!+0xjx4+d{c&9X^apoSyP}W>4bRHri6;l8ny`Njk?+j{2LtG&r zIq>(8``D1dg%YHp(02cWP=f3#j#iU^r8$ND;i9q+ceCwMtxHs=IqU1QZ@N38n)PzCa6~ZlH z4Bf6Y$49GEYb@2VW9U^nz#K*wWq?{hFw}y}ns^;;C0C$4UOLFtb{)fMOi6MmCCSY! zqU}CjK(^TeOL%r27f7{>6^l76N;Lc3g}?9venyTM+f73JSrjFu^oUHKd1C5#Ax(eK zh`jerlKL?fouu?=(OPYCsa%m7bMdG~n@bFfZxNH_NWM1N;WwUN<5fgXqy^k2FfFxE zoZk6k7c(k}wQ~C(Emh=ruCX*b3o%*7I480J;edXs&@$%GBnt_;%%Ki5Hsw~i46ol= z(;NppuCqjL=QWv|92VRQA7o_7hA>0HFo9^d%2Ch;frzc&hZvEq%6<41i*rhMu_YwlLRo&yZ?b6;L|J2|^M<;Zun`;s%LVwwlnQ>=|Z+T+& zM~2Q{)NC$htA)jx&hmeauVUVn);Qa7Qn$-iysIwN$jaAg?_2bHfhNCa4Hx>55H{N- zg1t6vs?T><;a|D^Gc5*;kcU%S2olAvYbdHTp3`3KTl5e$C0x?O!+;<&|BA)OVB#?XakAX( zusQ8t^tb}9V13pM{Q$rY+8GoapI%TjvaM&I&7>;ATn2TNnaywP2Xs5>SrT}&HKIiKbyDF zcL9@_Pdfj@w-i<;^2k0dF=Q0xrF~2C&}zZt_zF{~$rdRK41w@1aIz4*B`vyd(h&ex z)%yNu7Eg3;Ngk%%(+aJ+Iq)p95D(ObeL9)J4w|(^fZ0ggjf9 z>|@VjiT7APf6c{~Mr4=dqa9piE-*GZ`%LFUEx_`-XT1~agjb*X*K4Tkhpykr(HYD8 zlNZD$X!b?nzI&WPhHfza;>atYOL^xl86r0{5*?m|d^k9^s|4q)`RB<`Kbv@5F05%? z`?nLWB)gZ^9SxG7*YFSBClh9{0!>@iI2q$v#uxYjp}e zY)mS+z*w*q{cSenyUqiCN;dl}F(b5o7%uukgSH(wj1YAh4D5KphjZ!i^bI|bdi1d2 zy!OI^$DRnYoR_fL9rAXO^k}B>fK0k8HFY>SJiatz&2t&=bGbdHdhRd!&uF?#3|c+2 zTErY;BkzgiLD2z}U_?c|J_xJ$nbOnFVcfV95C3Ei`=b1S&9SW%ye-c9#VVM)R0t44 z7nw*R%l@9<3kuqb9;=93q%@?lQC`_f30a*uL=rmm&=gKJKrB@XwmAXMgErSzc*`n4W&`vCHkTkV*&7K3u>IX6I@mrgBTKA{zE}1 zO3X0QvEE5~L|Vlxb6XIky8jOf!s-c*cl{3qIiqu-Y{4?sh(K9FFSqcZ7m3+Ibb(*S z?z!fMEh6r-@)c$Ct(buwQi@7(VOO+LnrUDut9#!>@Ew}l*TxkMhA>)~J-(^Mr+$YR z8!4>rLjuf*?uJ^tp_gwq+sE*0Pntc5Bp5BhNnIxCMO z`H1a`DuKNPfO{NikdZK^8b1w_I4cGqe+;eHO5~oG8z@Yqq7RfaLi`vJ%>iXwG!Vi0 zF6cZxso*MUPRr?-0%bf6YgpL3v?dH3h*oN3yT*!~$%@=;`9FZhGX&6Z@;RVzDWyj# zz0x3T&fKF#NpHpejLlff?e&_#R{uV*LV5^ zZQ>HGkF^C^^Yfn(TdAPHSm+}eTqJD7tx^>2R?JDWIUlbO53I90=tE~7Nf6@c91Ap( z_RJ0jQ5ui2$}NpMiY2ONf-fF}2fxwr(*+X|D!nNObQ9)%lFISxqkt>q2oa5+lJ
>|*q{gBqfmuoTR>y&9!>t!VM~Y zBq}eA~X{)d>uIPBG5HGIi;jJ{M zsswpgs=Xr!s;L}bshoVOoF=N8<*l06sao`|TF$ImX{%aWsoHp|+9Imn;jP}&sXp+o zK4L)ZimW`dk&#uxxFQ1H@B(jjfcM_OhfLs88}MZX2z~+rh-;wvYG8G1;C*Tkvucpr zYfx8f?l1|^iEFX=YH@UH@qB6tvTBLiYe|TKUNf~6#C0F|>Zo+`T3=V-A;Rga6WC&unjB(aMMY~Q%3q!YpRw&_1-h0M2vJ!tDx*(tL17dj z{?+nMw^MO;L}s-QzeBmg>;PcG4Ko6oqdFi+MJ!|cU!DY6w*9#rP=*4$>;d>GVb}v; zrUL=Bn8?$_$T$?J2f7##4x$DCeRu^ZUTukaM!(g?`0j(gRnZNM>I9JVKv#4=J#}AY zwn9wO*A?jZDA0XZZI{!G=#}lQz3oG?y^FOyVBJn=h_&1o2%8PWbZW1BZbRzmL3`Vfa*&57z^dFkbl>wg~&EX-p~mvVeV)-dG2{3?y4N?+_VMVVfHq! z!q4mWE7|p5>eSd9wLVp}7d`iXXGF!x9>9MgQq+T;V1$4&t)IC2m9qyIefm*W+iYG2 zo$P>il{FA|xd+LR>pyGxFTMfammzQB<_8wX!&R=0R=G%rCV|*n7Gf>uA3No*IVS;L`c8pgrU0bV&;rv9*;6oQ z6K^Y1u$|MW>(l73(Y84A+b4+67$9W#K{nY%0S z3{~eW)A}s)`54VBkgjT$MSqUVZ|)=MTv*gJSZ0pOl;*6Icdk^fuT)R0{2*P0U;XvWi?rvo+LE){ z*16iTzS{M=+C#e5DS%X`zlIP~)AVs|v~z8IeXU!5ZIE>R6^vYqkhM1Hx4xXS-j23D zyT1M)vkq^&z9O)(SGBfwzJ4SC+|sYv(cidu-DvgOI2PDEm9IJfxYpJKwJN;v*tt2r zzB&1E^LNa~oj}c>iPbhG0Pr0gKyU*scNHUc^|1>1iF6Cbe;bau2BCU&3jp;)7=4Qs z_Fe2cr2;y&|0*r|8nplRY|b`R`*tfDItC^h)+7|II08-e7Az*(YZVGICfd#xG)L?X zvS8==^gaYwoHEDvVg{ZlW;MLJxpj zu#1fh&Hf6;4S>$DwYg<APT(ZMrvbECOlON|$l?JQ5 ze#adbr>+JEmgomIq;B5uDb4>6q-~v?8b!;JwzB3KIE_gIbwvIP_ z_H=S02PTq1-x8?a*ZncqgH_iBXy6+fp$&YNn?(5=J^vf#fOUG{P3*)?IQWJu z;Dn8Qm1FY+xc*!4?YHpd3eVdwKA~F)@&@sMTNz-zboZ@-P`&)yt;%Jcve2DIK%IKP zoeoQ#cK4k@cdh>0orzFEB@9MWF2J+{+xa$VP=S%c47&VYBiElb zuZ;R+Velb5N$o^`6sb@cf1R`0Xv#;SY+vo)784mf5T2xJ+0|;c=rNWnN2gJDzCynn zewFCnZbij>X)q_NN_)N2?@Q;a?!#4D?{{)Z<_u4WwOpUblT6?H%h6nwAxo70^L@lZ zYk<%N>5JFq&d3j-J=v@G(#fxGmUA+&@8r$#CeV)j&41|W@r`9%2!L=aD-4a%F(wR) zA0jIPPcAnmf=CN%$AiqGCnt*fxkCnWdxxDA#gqh%eZf*>8WqFQypKOiG5OYQ${9s#}SpHGN zdZ&J4l7h>xW4nK$q1QO)zI5t+=gw;s9OIy6lEr?%yqBoX)xnh2n5b4xjw(*{#np{x3gASrwZXP^QvEyneGhqg{#zjgtnx^WsGHr-*w{iVTbFK5Q2c)j3jNR+nl1L zz}@`Eo9k1M(8j}#-cBU>K;@6xc@*}U%BuTLC zQIw;<_d&4c`9yfFC%VA}97H%_g`)#v(Y!E!-X1*(cekM!eY)u zh>PvKOGy`_VV?OeAF_j;LhvQ*7BfN1?k_$h)I7MJwAWe7X=Iwke%7Jw0%J?M9gXD1;5qTg}(*f&%inRb0M{; zAU%msW;}tH`3 z%%8k>M#?eBqG4poX`3OzjMLMKG1X4-V@%MbvDz^R!>$>SClPj?JOz((=XCNaDglgH zHOyI)ia!l7%wMI!NZeWr!Tl|a^!nQq)eH-%g4svvUl1o%WH>7}K<1(&--Tnlt}98D z;4Dz4RUi_ATzjXoPwOKR(q0~koH+#;2`9_FnJP8$6GhD3(>g9L*EK@ECnn}dTAIo4 z^MS9_^n}RcF7VqG7j`hXtb8l%G9MZ!a_EURGi6$dLaNEL>C~JbSBKh~+Lfu9RBQ>R zgHdlkFX3*BP)99<`lkW?%`eGtP^OLG6LUUQ!NVK{N;vTc;$s?BK<|wh!Vhz#lydH2 zT>qNloK6KcP*eM2S4^*XyOi08ULv*=t}WBtmgv`5u@(~TAmJ}&-;-8RnK7sUlqkBN zKUVQaUFm^cdR%+TD;-4G&P2jh>Iul3=t78zb@K=B+l8orBIBo7r2Q@(clH*^)|sY3 z9KS}`K=k*F_I$l?>RJ}6$I4u8 zEJu;JzzLGZ^<0TWBY@Da`<;E}f}`_Y#S)gSwxrcq;|4~Rvpk;uWt(UhSPA&;71tQU zhjD<*LnA)tj7%T&Ybwm6q3Gi|mE7ve(x69EW2e1?=j!Svyl2aRfP+ig>e``%XWK&O zg)1}y?EnAe^Xvb5`RotJr2KdJ9Ec)dw^{pl`GkG_P6D}njwI2k{vR)&U|8tCm(Q63 zsigldp9%aP{C_W>3l&AvU!Bn~aSX0$%v-n&eGa> zz()dn1-~KZ{EgsQb8byfT4yO7&y^V1d{4uKzxU4gy$RDq$i36Q5fo^wj8^{Vhq(!X zRe>MshL)_O_t~Lh{NH=0E!A-XWg_aN7kQY_Y|~cgptV(z4q0mQz7plroVncQHhbh} z8i=r#mo{{9EatUgI?8Gwv{=GHTu^Jpx-8Tckn28))Z^j}tuzqa4K=-LA0COLfDXsT zqw-NS5@*X!>jtj(b7Ty*|fJ2y*SL)-pZk8jV% z-Q`{5u2!mU1E0gkK+uQ7$JdBNBY%GIX<`Qd`059TB_R(Vf8L@kYhvU?q{2k{3nDNPlZ zMMBkfMiuKObZkQe#kz^PF|gh`m6Wbwj>BbyzSMSd{TeuZ$j>0B2zI|TbY`ySq&c#oVvWj6&^(2AASrFRVe!Y3X=mc!7I;g2bDcL?|n#dl= zWIeO})Y-Qt^EsAOM)~)iZNEAKW1<(<^PB=fNJD8^l?m}{P5laWpM3Li*!Mv6I@gg}g)+GH!voCTGqk!d`2<5!gYQ!RUOsoF`~F@&l_TwZ3rG&N z1b|n@=w6V^=bzyr!Ha7&$8;D9DEeXHr|b9#IWuy!vSA6{n}l$VLaImMA(_4bMms?8 z-zB{QYnji>!MUgwqr+L!XD0TmxCs^R6W{oWZnkhi)qWyn~5Y9yHT@6Ny{r(h#)VFTX1@gNSiw(qV=JcXh)PyDCQ<6 zb;0&CijT-z=@=*PGZlZ{m7Y>`sZTlv&r@*^j7-(U*XN#rO87p1om42FMLw^jWil+A z_TH#ZD&E@@e3qW6d|}TWx-}E5Z5@dgz0I4mE2XuipS2TID?rMz64xvrAT>+OgUN{YXzxU8efAk3IEqo>n%THzi7gJ?}FbgXEV-RV4}bpJ+LjisoNcO5kx( z8K}!O5=_*7gsG(=r7(y9Z4@;{af=Oe%0;pm#*(I&R^-Njs}wpC!%P<48)Ee7wApPn?7LEP(+8-HQ5aWuG?-fo z?W@$2h*r8K@Cp~)9C#9J#}`}{Tb9j{KK(?InORY(%qC$Ld+#&v3C2rJ87Oser8ii% z_|r-0YfZ0syu8|mm%1f?VdI>!a-!hb*~(N!3q;w3jsumx>f14UwvXKJB=xrPANgPN zXm2Q_XClH;e?!yT0+p*E&vsIWEPUOL4QomFt#S%h*IUFgB}gScxbhJ}fyaFI08$>9 z$>TC;D;1}e115_D5tw#Acn%Z^tDApa9W^0EARM^Vv-e***|E!A>XbNOjqxip`^Psgr{TE4+-DHkTA*aQW zY-=o$G=ZWiMkJ1WKNY%^-oYtV9?o~)lD_+6{#32XxV^20)?r+}t;@o*vT)5_Gfh*g zJH~Ak1y&yLPZ6n>O^%dX=Gzwc=up=ga40UXWg*_sGp;j_G~MBl7`qlN+fFnTmyIZB ztUPZ#Og4Ajy&BgGw*JgwZZxZou>r^l2S6)@NDVqe7t0H8d-6VvP~@ICJ4JHt(m~n5 z#=}TzvvSqHAAkoNQ9|3`kZ@s&xq;qQI|Z2e?vmoKlo4Dwg@)^*cpE%|ByX&W&od^P ztkH8_9EiTd3>_@t@f0Q$-p(a=Y)L3`Pu(F9uTPV3VF)2P1O*ez=;DlcEST5%92?rS z-6UHnwy!Kr-Zyn)BUig|8I>?8J7B*k0FGM7168}FFuq@UE%9w_+c|$ZrVL`QSt^}( zJzt`FA(kiT$Rd0z={YsMOc&|cv4=b5dtASshT+Kn?oZU)oVD~C(a|D#L;SrYY@+nN z-v-N+rwE_HJ5Q5|^Y<)|zf2AEN;Nz2_{r_M(#%MT2^E&Y?Qy-L^lQf*oHz@}r&Jl{ zlC3V?c#^;$uQ=8PR*z}?TGbthP@EX9hkjvK6LOqNOnqGqAQOCe_iCRwZ#ctE-U((D z3YcNxUGH{=>h^$I5_YeZ^e<7NdQJ<7!lMgwvcFskKy4w}mUKF>fTE!lG6={04rf6l zp{~9t>*8r>6RIW>>UVo*$CE1KLF=%p@$Drou;FI-5y#4i` zpl1ZY=V7WpCBfKUuA&dLXQ?c(L*6+mfzWwS%BB80f4H!RgU5}1KWqnMEr)1HeNC9f zaOk0J`9w{E=wTFUXf5FfgKOjnM#%a8~(ufK2UsOE z5uPTH|4So-mm_DSkPpL{V{2%w=&VYPLgOL=f~1I+5bbg_{inQKW$3;ETfE=H*a3Sz z^CJRhOD#*hh|7j!X47MXkD{l&u%N7>c$R%zBNRGtJ)ByM7zW{ISuuXcqi+PF=CUGm z>}!!BLYAfRwzz8E1OdKu!4Y9`-D#Cd;QPPh}T9%8u(A;lM;Mys?$+L(ZF!iX}sZ;7e4 z(zM;*(##Q=#miElzb9iBC8w!JAB(}))nMEU!@E*o<>pCuIAJ~Xpy-szP-Wl#TYbul((+N~!c)rSsi^3m<<_t4FwY-m6Z7!0ZUnr6eN z5wrYCe?G$S&l4KXNPm4`*Fa2~UbdP%_5`!$(EN$nvkuHY%sDJ0PL*<3EQuV~#B~+- zG+&S(ATStAR!HbUGl7O5X2r_MleTifx>rK#1ld7HniysnkC@rfBbsU#C)9CjdJs73 ze>YZN)HDOY|E6G~U&&+WMR_Y$;2p>+fi=9+Zj`h|4-F-&&!)t+WwGE&X1)j<NhYs( zR1b<(9pV-U<=ro7SsknmnfO~OnYmk?B@XS0w(3_g1)?_Hwn$x5_sageOv-mzYg>gH z14aiF)s;jw-s0i2?lp*v3U47wUs8W|Nog!gYEsgnQC@?K@W!lb#H6XeVX)XLWF+0wgp1CN)MPBm-82=bqx- zqB0detb0~je?C7;cZgRZIuS*4uh6VZtcf@(x%F#iW(Y=<5nMt~o>Tiz2^9DqBP_*8 zSyhjUhdsE2)iy^lxs-j`aWiwL2i;{c_$Xm`GcXp?{FquQaSDxcB^$0WszoMZQAbXw zw7ag(AWBV(n|!RSj9Gl`2a(3(OxfJ&&J6YFnWxShv956Sia9Fvy0NHLDy`-DGD?x3 z#SNWVIMr0|O%QY%7m_<(vLsT7R8;Odn$#6Y8KTVqi1f3C1(-ced-;^xCH+x`loodH z_*x&D>j9D&^Ox z;Lwm!%R^}1bmXzJN)zs?p(;zn?Lej>ppk{BIWC!mEsTfhRwE^(-g5amBdqq*9tGT< zM^8kPZz6HU5KgHOv)l5=vmP?h_%M16A(2tZO zbuo(0pi~*5i!i!m>RY<()`OY@AW7Ry)u0 zGzTdH2_#Gs+#m~;u(Xvh3fvIQv^mA0w9+iCPA?6DF+J1#RMVggOUYKQFD+GXfDf#U z6ZoLa{PmSk00l8@QdS_<;zZTd2h7T5c2d?(Tkr;zP`@^j4oaQ0=B24vZ3Qxo)-zPo z{ESZBOm8P9R+{CuHGvEVowSgJO`ohur`w~X)YpE!LQ(Nj*9>X`%wIW6T33ZikkG>| zp|)1`Q{H6C^t@pCMA?o7_EFTCWDL*M0(d2{x(vAP0LlgS;JjP3L9OMMSX}o#Q8j6rOLFvjg)Uq zOHCHX^UJ!~O~GLIqZ1i@>;2nKHr)}nUMRb1Bbu@r*4}fp-KeX-D7;|ZmC=WLP~VKJ zaob#wEZqLxMDMLl&Xr^3t-iXbSTp>s7V4Y(rMmnbs}H`sNEX=N+Sc|YzOlrV$aYrO zbhslHV!zzk9vb3pv|Yk1RuIOO;62QA#ZcJiiyoeo7mG^{PUBXxU6@?W;k~+In`8kt zN*f%{-JhW*%`M5W;%0{BA|i_SlV{*Qfb=vuDo#$zeB*eIp0=wTk~Nzv%7 zVK@MJ<_c9yVilvC?d1HWlq!s@7afebM5RH3AO-Sk`_qo_(>^$}?0h0Lx_2_8(J1Yh zA9z;-B*5(MlZv6Pac{OiIP-U&2#SCr0>=66vJvih0xAV^4F=-u=0XI|Q8E(ngZ%;l z(Ey6v?(H_&?%iIEHp!0Gj(1u>?@7Wphi58F5-6AuI}$X?*|WxRbVOv zxF-T{@5+Gj#2vya6<>eh;TZ=t>Vf*FYgo@G&=Y07!oU_ns%l8Q~&gRpY#gIEKIWZ z!P71v;{^InJ6}H=@gDdW@QF#IFZ1&DabNhA0qB*!_q@=ag z=LxC056JMZb07^!?GN+d2{ju&Y(Q4wIj^+KM z`I{GoVg4`o3vl_UBJa1p^$gGW4X}Z*F83r*fUt4zdtT_&Pam%W{zmBNv;zIo9~xj& z{nStG;~(hPKPk&X=$b$N6C(YU&;8B+I&!Z+0C7Q|KY#oh5Qyh59EpJnNnASsKq3KU z3>{vxs4(KhgboMtgYbx9xQzlA4m^2M;ev`NN4{)GQ07dUHEqh=v4hPPD`0&71R7N6 zP%B=nY>~1BC>u|6h6bJEiOkPA>2Bhy^fS`Fo9UeXw3@DG&`|_=`IL6kAF!ujtV#nT z#fp`rZS4wWqt>P#i4wJ_TzCz^v5Of2v$PmE@x#F$392-RP-e=-7-LR`sTk#ggpuQ^ z{(Ni^q{z)J3x=%Bn6T!Vpk*>KBq1SXmzGzW1`SxX$CQm-7d&XXa7^8{9n*x2TJUO^ zyb~jKsgJf^>eO?x@#5v~_Mk}VDg_G6AKbg<{CV;@$DYi2$ary+c@|8ine(uD<4SNI z8?XeuO$Dkff8fLBCZNA%n2>huAGO;s{-4H1DwK7hFt8G_Qe3m<|ejSHv(<+IA4{65XuRWJ%%8K{=mGW>6XWC24_ zpODt>WTwLgJ@nAOrdM<(coaQ#u1QxNbdbvi!ze4}nWr6@ys0F=eHM9@KezBnoFKO5 z^CzpsH*ISUg75*#sGoi|$EUYEo?n~_19;= zefQs2eFq@eAbZg)c2#N~11pK7dSoDJnfKD-JFDyi7?qeDfBxu`mFnfKEk6SsP-3P$ zf6POAGy_C_Hl?#y`J)p;A%lK?;x~VcVhbch4~2$;G|k=RbMS*<3}rY&8rBd)K$u_s z?!uF~^lTnQYg{(QVwI!}@PfSaiQgbWysYT&Ja*w;1c9PL3Pvz-e6YgL&cng%c@Qrm z1jB{!kp?hu&w?>~3g=vCLpHY2jcFj5E8qQue1v4s1^vN??98ltjw{dygYq+O_(VL|0|Pb&N51Wt?;)ThiN$9P)3GEJVr2!eN>7Om*EcrTJR^GDC7dc{&1?AJ;gl!V4MWg;KY?(@sTvy znHPhS4NZZ84AsL2?dDNEz_oCP_zMauTRBd0meZUb!=V@MSiZT$vMqV^$t_2bo$T=^ zEuBk;FMR^ctO%10)tg7qWQIgbBJU?`KqNi@bj8ehawgH#7XXbun1}r)x>pDg(ov#M?<<*u6EUxKUrGMI%ts#?gyhTz#`c#^zS{hBKNpIxeDQ(J&!CxZgjNzyW8Jn@286}wo* zrZ1h~gk4#ER>I6}L9M-v>01d022TX_p#Taa329=FNSKVMd3_Wa%){54%p)sEv7JAV z7!+9$L>d`|omLyWTi*6oEjV-(?0}L-@}V_5mzCZ;$R<-^{=^Gu@I*G!(GG9OLZDO` zMS{$Mx2fFkC$hjsHuyu&gQkNmUg!ii)T>@;@B$K3K}s63fsI;)QySR#ls7%+TmJUf zzcP8H4uz{_P-a#usP=_Vc|mfClm$>QWQ+m z5uc31@mwK@4_r16FD=6_hOtNIh+F>H(Kwz67Rp@gLSEte#Jf3`Wr<$yeJ!2Sjk@oa}Al? zT^{m)alD-)huO||?i!PyTsA5TWy@)lf`Zu`vOdSoodk}va0l(HsIjh5lD`dv3(V0;2l{AzX7lzeIeX0$^v*eL{Nf)uZH33+E*!x?Tqf?yxWG{kG2+lX;1W+( zlK3HkieTj7`igkJaSni?PaIuIhq}cLX7sC-+t4Q?@Y(AqyP`Y_u_&%`P|#RE2s^vV zXH@r#EO>`6c;C3S4}GzmOO z{C_~hE7=!>Sr*)Yj@x(+WjFxI@Qj;C zj)h|w;~)vrgP0F_2>T;|bvTIaQs2qzs4%LH_%e5|krfYo7D-iSV1ZDr38n;lW-ZCGyf7yNf&T>lJ*PiK*ki<@i6+ zfeqQ%KNR%-Ki2rb=AaiOA;2yq0XN{g63M_j5si@Wjs9~8FjR;$B!!4!jV2t!NaH|3 z0l+srj^il7a5zH>guz&AmVR)7bx?sp=|e7*!IzkqW--1vl$!2~3r~}~v0^{0f&wTg zHu6hCD?78X7z-p!LTEFv#5$B52n{|w6Wg$psX2fx*}N%fm@BjvCjr1zbPUaVzRio4 zzhIMNK)7>pj6B&B5qXo7U;AEmYJ{@kW0CDnHLXS7}7JB2~0?R0XY(EfGW5agE@^Gi8;v_ z7=&p#gV2J3c@~C|j*$Jn_iLBfLPt3$UOR+!$l^XiHtwOvF z44bml3$(mL>KIEr6CFp~$L;W@Ve7G3YPa$OwlllOwv$WeIf{NvLO6r0u%w~o<0?Hs zowbx2X(2tmKurIm4udc_w@e+l^vb6oHAuXRUFi<8LA5m6OHA~$qWF%k+zt;bss3=H z%++Mgb_6t$i6wa?!m0GLc3Y1%hbfSXrZTE6uW$i zKKsWgvq~v|g6yEq>a@=5#Ln#0&I!T0rP!)j1J7?GPU199B_xXV!%DEU3l8f}C$j?X z)Xw;n&-wgJ)f63sE4kEhw37q?#xs0z z3TsfO)XL^jPZ|9%?hr91d_Lhzy!h&Ql((R1EfPaQ8-03N^dbhb7WGPvsBFZ zkOIWQKN-Y5B~P$|L>f~edSgzk3bib?iHnr=_E@iRP49s{twg~N&RfSeDbrNu-kvDlp5D~^Y z8B;Ie##ih{g5c1O@K8J*5?4gVGC5Xc#WOui)y_0fDXmx7VN_!Ni#ud1C1@2cMwK%A z{Ldjx!C*m+=m^P&F<6h_$!PHx9qo%Su}F8JmWK^dd1Xzrvr-eiF%RR+emzttQ_k~) zRoDTsStVGFW!W!-%X%F)-fS>{txIclRu|2&-t0k|rO^m0F(z!;pxrIww9=w53hl^O zktNh;OH`Y6E}n(WDwTpkU0I>E+6(JbyA;A@&BT3$vU77VR*fB~ol%l%PoTZpv<;~~ zomorN*=YSf7sautTSQ$yYen0=W!zR` zTL>jhFEux~EwfgQyOWi>r`6fTZQRa{BN7!c6q7d@#oPYP6x`Bn(dFb>P8>qc_1xEG zBce4n6r;jnxfu&G)s$ETsyY76>)aBhS)m~an z;0%VLS32DE`_uLV-!uX-Lq%Rj0oVsd9}QOF_Zg}0eTobASoTFQDwWDlOuG`!+ZEPf z_32wI4dJ-V#4h{a0S?&1)n3=#;UvBx;%#8$?Ec>hq2RccJHaL5llff$9%3X`;w`=j zww2%^RzDeiO0oT6{S8#$<>EBv8ZVC87NOyr#X-X~5m$u&>|F5Bm& zVnt51OEzWd=+pB<;TL{m7W?5UmfBHni+;Rgn*acRxaC~NA0n{ve23F6Zhc(MD!7YPMqYxl0{_=Rod`d1l&0 z@)&&93x+PIaeJTejMqrh=hy9LwBzIw4cJSp(yXLVtHd$fGGoc5H+!}Ta!3JDU}ykv zQZ}-+EWyu-zMB1Ntst_FMv$c1rF0sGm7t_h{)ij^Kgr~A>T z6G0z+jFam+iW}0agX^PHxvev}C3T1q!AT+EQHSu+BMmy8%j>1<7R07TcI>@|l}Sy# zX>|5r^h;+V>}e#~6(1i@a^U zz1FUY;JZ9H-PVn1wKJW$*e*Rb-Mr*0KC7A20ELrrb&2EF2d(bh^88^_g-!*{T?wko zT`9KE?#fmE=6yH<(@t&G&S%50z|W{ui1d~jBvus!y$Nh@Pt`(6Wf4mK$t{#`7-YIw zi^BYlRM?g7XS>aPwPwCV*=F@$wYwjV_GGAhzoS;1@J@lHo{81=!(9bRUImx_GsIh+ z3=F^25T6dd?h9l5)&KKA|E`TQ4Auizf#LYsu9w zlLl`Juki9Fm}#uVSLFUyj$v2Eqs0x>MqAugSCozbWz%o%zYyWQHVu^KF4q^y&vYe- zb+yxu!Mt*n>8mwPNrp0cEO60`U^nA#qKKt*8$WJ-%^b!Mq_zo%e#vgp$qZlb%xKt{ z%g=+X$d9wwfZ<3yOjwUtSgn(6hQQd0A@Tl{$#(G{njDOT_c#-Cq+XVQ?Pzy*w_kW4uofDNoj&jyt|RU>_O;9L9Ls`# z2l(=R*{)_!el^Vi<_-h}W$~l+d4u?fr(U>}`P`(_5$b2>;UI3fuVF^kj8=l&$Cb8J{1JecrbPv5`?UcqD5l zJ9Q9N(W-6xG*(sw_u1q!gcWO{@+;| z<;8b>tJO0ViZ?bNH52YlHt$4sZsP?#dp-aCB&JvD+*!;A;)E~NM;;4wPkFL#{s(`4 z=m)DfK8o3|HzH&|;y0`AC)A!X3WQGK?+5=hXeaHa{-`e51_y-7o z0tXT-Xz(DygbEijZ0L|75Fl*8fbjwa$`*-R6u-p zQ#6?s3{R3-%%0`=l5yOs8qH$vIoF|vg`oqJE^YcW>eNA_ZWar9Y-h`eF=K5k<>O1r zU_aiDO){^x#pfmR+$$ZhOxmX+ClUkvCn-CCiP%LFvf_WK{EOyqmBLo9q3|# zBAjqcUpYoNWOh7#SXhaf?H1b>7oithWbR$&Q+vamsE~aAsJM?mEe;gU0RRX9q#gi> zdCYP|5TFbRM3~vgmuCJLmWhen5|o-VK%shKs%2>_e~>7fM^jixy#r9kr2z?*{F`6{Y( zn#o|SL;6}!k(*ft8)i{<_SRHMCN^byRc(cPx;w)_`rb&wJ>CARkN$q)+>>27%b2tXX|T@`)nc3NK>l?)=$(dMfN^uvRcAE`RNt6q6UR8A zOb+4XP+-RR8QiDK%UxqA)cVazXxdV1J@C_OnvG!BUxyub*#zH>FLV4rfac$wPVKbW z3$R&r)`d&WW6amF_T7;h0hbuDjEM*mVm)W5Y|hYP<~h+pg@$wrDXd74wgn@=Y2%E` zuH)TWpRI=>D&*tBCaKcychv`T%=p~D7xcEm1i$|8+&jiO{<}c9>&|;4J7V47qkv+4 z&GKp^9{l3W*WNvikxMQSWRGRO(a=4uFLdVLaR>Tu?~}D2l=gdOxp7leB&MwbjIOL=ZmI-UUdZbh`;In@sORWUKy_k$U`==d_o)|`qo!D zj%48^T2bOh+E)=}iDil-+2mG0nITnj#tURK! zbQu=2;LIaG`{XaBNWYD^Qj2(bCM<2KN4VXxn${#uRE$Nl^RP0Rq72b8OG3=8gmW|H z^vyS0dChgQvz_eBW=mMf#8CExbfGLJC#m9-WAgHx-sxpWn(5Ag611S$l!*R*dAXD% z@t4|UiB(kjQ1##wMC=2lKn<$VjdJuT5lMrxj2Oz0Dh8nU)SO8vGMOcs(xM)*Co?-L z)0xr~J3#1AM^LF4`z17)g{f#smBr5{`qciVo3UR;YpT?x8gwuuX=z91sT~qw4yY_G zkucL~)T^qKsb2kRN1ggos!*mpELrF-k6JAEB#R?M73o%y8B?&*wXW?HYZLW3EXv@N zBUK_6S~CNpQf4JefsO03pp{g+GPbdpoX8P>NglHvF(a@UXNFv=vy6PmLWl+0SQhKp z(UR6L6Vj{Z%8C}ps3fIA+v;X-Bh}Bw#wuwjEpBsrnp~oGIAyttldPIV#G2$PhoMOp zwxC?vYEHM#eJ)=H16bwGq^#Dx?sY=~lbuZTwOh^2MW{j(?2@;<<~{FOZgN}bvbViR zk#2Tnl3egm1uJ}At9#0FmQr5jzW&Vph;jq07WWdkzz@kzT+@P;+UU2h!|jZID`U>H zXeOfm{O?BAYv2uYm>>w=DuvNfMe+c(s1;GI&BEiFDp?rA&+i&|l&=@ar!F)OT`PFA>I`RS7@f<%{yx5!#1 zmS~eKX0PJasJDU5kvt1v{}OAm4(^GXVe_3%+KkI^wP-{wGv+<#w#-Zx39*iOSSp)^ zyELN5pB%mAcWe?yYQ8&FW#l69^zRGw0YhqS^AsH?&@~ zI8)-&9Q(SYpfm{>giY*i-x8j9hKsRudS#Y)S}V_nc3Ow!A@Kt6Tx#>Udx@}#_q-GCt8Bg+qQrXNxz+kq#@tz(!c-|#>qpFj zllwgi|M)<2$#32i)|f0UX1RSyKc4=^ldP$-!jLtF3uI^3HwxsfY--)l}~RD+)JsWKGr`0dG1-yZkDzZZS!W(>CL{`7hx zG38S~r4oG_@CTDUpoG7?b7qzy^MLZ_VZmRyC!cr4_%qRhWr^D7iuu)-rbuAl$Xh!u zw9a9*sMjv)%W`g=j3_fi4*k%$Ywb% zp7wmSdB|a$*~mH6u^8Y>VHEx?;8F0v{(;l7>|8mSoiBCS-z6UvRTQeR#Pc!W>Nz0) zQJ?JL8ae)T2C%`JWYHZMm>xZ`$1-)G2VNcsDjHcNRP`0h-lc?9>D2uc)BA+qPsE@Q zI>ZdNhS1=QPg&iX@u2cGA>yUf`zWFP4IvdKL=mE&!1+=QY7U^iUJ|~Z3+fI z9VTKPN};I%pj*X-{LtaOk=vnVAg__yZ&;WeCL+k?Appjl6#A7vt{*o~mV`+~n2$+ackB#?5Ls8nVih`|gQ=3)onQYM z-2NU?N$9*9Dq7c@*+v)s3^9tIF&^Xo@lzu%6EpUq5wb`9O=48#;3=h|j#Y(?ZrcpvkH3Y}J$fD!{@kv)UwZsj zcu5%t7UU4}0Qvyo2DaR&P272uBPc@MXGK^}7#CVtS1}Q!MY3A(jbr@bMr~L{IgVWm z?$jFUBN(0)heTFRyhK*y7)7e&N>&;G1Qs5-M^f1AbWhk!4PG{v=Fs z-;PlUElQhjkfi&-MW*rM{E&oD%H^2RSZx><#GxZajzqcnRP2c&W&q|V!NrYXVLBZq zVkQ}lVOt@B+E}WGJYf~{&4&CCom4(r)*(h@1X@-E9A|c>j4fGP5@uyl(K5YN!yS`h z<)CFgA!3BuCGuK{%qDGi*kF{1eQlF!eo{+mlZi1)n?Y4@LYT{8SsFT#R3T?_ZWwR< zCQtN+=&hUnR1QCq;4UE_P^utBJtDeondo@ucNSQ7loDLLgiJiAGMSu9-p?q#hNH1& zej$S9lC%I-9R;E=z0aeT-o+Xrd zpb`^q<&6?vjv|Xxsv}?ZDB}sH9_Af2x*>C=lc({NvWRGt>K2Xl%r1t7c9B;|%p@_X zg#DOkR=HGrJfQO zpH2ml?$_qgmTDqjAqVDO#ULJf*6xYGdW-mC_c3LWWHATW!H~vD_DW6i*Z~(rXhEL zU5nO}WY$_>!lJt--I6_}r=B21_+~tr*tK#~R{-p-dStuyD^o4mxk}Nc(%@JbDFmX^ zg)ySk9ht+{9K?Q>yndctu35f9$%Un-H+ezBc5F?3CbSxv`pE`|S}a5wldVCdWUegB z&J>MB?6XLg910vO-K*tHs76Sl*ka-*$^OOJ&fABL>e{MdP1aySG9Hw? zTC!SE-7@X;{VInpBq%N96q#Kq0v;p|TKi^l=-0) zobDRs*33&%rsb|%S9tE{x>M->nz3r>Gydh1bSa!RF0NK&>$0Tb?P9eSi&ecW6FJeW z`jQu}?(Xs~WJ%%gj!rU_Dw9A9HWu&QF~+sBZt`A}=E0<~!l(P3S4g~?h!_dF_Eyv6C{gnkE0ypeDoSa3HCkG<)`r5~`HBS3NLZb&Z(@GkSat7R#_yieZ$Ren z#a1cBo|qA-F96pP)8!QbyDGvW){wSUdeC8B{_dOwPGJO#SyZIn`wn6^y{wUa$hcOf zD*f)o*_q0QZ~#liN|dmB*dq!D$7O+<23J*3IiaK}tqdzCLTOnAFA+HAaOIM13i}`T zUaescv1i_tTez6)UX)RBTq)uwU!LP>?vE7LCJtm2-8{1tJ19BXTM3ej% z&z&*cveLosp=O8$AEVtPL$ZNQ2oz9i%2_hw{gT42TR>K@D*Z7ipAY|C#b*UBd*JP? z`YeFem&L+i5Wcc~7A_&fR!=z_^=2~uOmdbf&uuUJa)TD`AS-aE*-SDIFc-}W5jx*<>#Z|I1T*c{a$ScMbT05>jhIV4r-}+#7 zW-CQR@WC9kwrjsOY`69s#P(~?Hf_7MZQr(T?>2AO_HE~OZwI$<>-HM}w{O2TAEY*8 zMT8(Uw{t%?bVs*zPd9Z}w{>4Pc4xPCZ#Q>$w|9Rxc!#%mk2iUjw|Sp8dZ)K~3qnLF zw|fI05Y&Tw&o_P7w|(C?e&@G-?>B$*ArxPc!yf+x6wFF1oYxPw1< zJwybAPdJ5FxP@OhhW=-`hHp5Bcesbow}gMVh>tjlm$-?aIEtsZibr^Suegi9IE=@* zjL$fYGkA#CIF9GIj_){+_xOb0xQ_?9kPkVL7kP{WxsfNik}o-vH@Sf$xsyk^lutR8 z3ptcmIhJR+mT$R;Upbe5IhcpJm=m~{kGYwjIhu!gnWs6Mx4D}u`I^7EoHuwY)VZDC zIiBaap6@xI_qm_zxqJtKpbt8s7rLPzI-)1KqA&WP_xGPaI;2Osq}zFa$N8LJI)b-C zF>E@gcemy0lOGr`!5|>z}S?`+`S1wRgL; z2YV1SySR@#xs&^|?>D!5ySf8=e>44ywkhCS9`m+ zIJ^&hfcN{qAAGH&dcH3_!z=r~=eNNlyuVw!e&ag9U%Y%ryu@=lExso*V}j0llm~Yd@*1>){A=CXMH^g zd(a>L{k=2&$v?f<`#L3jfiGr^I z0rPMAFt~rmyMowH|L+IC|JMURv??}`U_pZghpn-6uox{k!5TiKRi;Z9IIbQJocR95 z7ekK+Th*%Wm@q|)T2j364hD{2#~E`!G;w(mTXzGXVIoryOwR+v_`Lb-1Fs>!KB58 zp>b8FF4T+>DcOnpF)PWRhhNGxNz)}`a^P;l+Nl`v;h0L_ znhRzX+tqDr*RNs6mOY#H*37605}VsmV@67$i~ZKU(DWYSxCa(4S@|c=#4#Ilh^fj9 zIdLr>P43AYXb`fuHB;g^aE;a9RvixCtk835n0&c%z z-~&s({9uex#u;byaK#&OOid)iH0;sGA5G#gEE{tya=#Y8dXdH@nQYQYw1~tJL=cU< zia{XBsZdJ*u&z-)z({arFF+qdF|ELUlY|T*I|h*)>v50j`XV4WtnZ(*=M1J zP1R_rt=8IWv2}9VY`N{$+i$^LP1$hCE!W(0q1_hUb=hs#-TTyiSKfK)tyf%o@y%CX zeB<5M-+uv)w%>pWF4*8c2R>Ngg&Br-+=d~JSmN3ep4j4xF&?U`jXCbv%yP gF4^RhQBGOqm051t<(FZOS>~B(uG!|BI}Qi{JJ%Vjc>n+a diff --git a/docs/getting-started/miniconda-installation/miniconda-installation.rst b/docs/getting-started/miniconda-installation/miniconda-installation.rst deleted file mode 100644 index b15f2e46..00000000 --- a/docs/getting-started/miniconda-installation/miniconda-installation.rst +++ /dev/null @@ -1,41 +0,0 @@ -:orphan: - -.. include:: ./../../macros.txt -.. include:: ./../../units.txt - -.. _MANUAL_MINICONDA_INSTALLATION: - -############################# -Manual Miniconda Installation -############################# - -Installing Miniconda consists of two steps, the actual miniconda installation -and setting up the ``.condarc`` file. - -#. Download `Miniconda`_ (any Python 3.x 64bit version) and install it into - the default installation directory. - - - If your **user name does NOT include whitespace**: During installation - select ``Just Me`` and **do not change** the ``Destination Folder`` - (``%USERPROFILE%\miniconda3``). - - If your **user name does include whitespace**: During installation - select ``Just Me`` and **change** the ``Destination Folder`` to - ``C:\miniconda3``. - - Unselect ``Register Anaconda as my default Python 3.x`` when prompted. - - The installation is illustrated in the figure below. - - .. note:: - - - If any Miniconda x64 version with a Python version greater than 3.x is - already installed **in the indicated directory**, this step can be - skipped. - - .. figure:: img/miniconda-installer.gif - :alt: Miniconda installation routine - :name: miniconda-installation-routine - :align: center - - Miniconda installation routine - -#. Proceed with :ref:`MANUAL_CONDA_CONFIGURATION`. diff --git a/docs/getting-started/repository-structure.rst b/docs/getting-started/repository-structure.rst index 04a08551..b84fdded 100644 --- a/docs/getting-started/repository-structure.rst +++ b/docs/getting-started/repository-structure.rst @@ -6,180 +6,79 @@ Repository Structure ******************** -.. - Comments: - Jupyter is a python tool +All directory names are abbreviated (e.g., ``conf`` for ``configuration``) to +ensure a compact repository structure and avoid long command lines during build +steps. -.. spelling:: - Jupyter +Repository root ``.`` +===================== -The |foxbms| repository is structured into the following parts (see -:numref:`introduction-repository-structure`). All directory names are -abbreviated (e.g., ``conf`` for ``configuration``) to ensure a compact -repository structure and avoid long command lines during build steps. +The repository is generally structured as shown below: -.. table:: |foxbms| repository structure +.. csv-table:: Detailed description of the repository root + :file: ./directories/_root.csv + :header-rows: 1 + :delim: ; + :widths: 14 20 66 :name: introduction-repository-structure - :widths: grid - - +-----------------+-----------------------------+--------------------------------------+ - | directory | long name | content description | - +=================+=============================+======================================+ - | ``.`` | repository root | the repository root contains the | - | | | license information, a changelog | - | | | and the main build script | - +-----------------+-----------------------------+--------------------------------------+ - | ``conf`` | Configuration | contains all high level | - | | | configurations | - +-----------------+-----------------------------+--------------------------------------+ - | ``docs`` | Documentation | documentation source files | - +-----------------+-----------------------------+--------------------------------------+ - | ``hardware`` | Hardware | hardware schematics and layouts | - +-----------------+-----------------------------+--------------------------------------+ - | ``src`` | Source | parent directory for all source | - | | | files for the BMS embedded software | - +-----------------+-----------------------------+--------------------------------------+ - | ``tests`` | Tests | tests for embedded sources, the tool | - | | | chain, the conda environment and | - | | | scripts | - +-----------------+-----------------------------+--------------------------------------+ - | ``tools`` | Tools | tools needed to build |foxbms| | - | | | binaries and additional tools to | - | | | work with |foxbms| | - +-----------------+-----------------------------+--------------------------------------+ Configuration directory ``conf`` ================================ -The ``conf`` directory is structured into the following parts (see -:numref:`introduction-repository-structure-conf-details`). +The ``conf`` directory is structured as shown below: -.. table:: Detailed description of the ``conf`` directory +.. csv-table:: Detailed description of the ``conf`` directory + :file: ./directories/conf.csv + :header-rows: 1 + :delim: ; + :widths: 14 20 66 :name: introduction-repository-structure-conf-details - :widths: grid - - +-----------------------+-----------------------------+--------------------------------------+ - | directory | long name | content description | - +=======================+=============================+======================================+ - | ``conf/bms`` | Battery Management System | configuration of the BMS | - | | | (e.g., which AFE is used) | - +-----------------------+-----------------------------+--------------------------------------+ - | ``conf/cc`` | C compiler | compiler configuration | - | | | (e.g., compiler flags) | - +-----------------------+-----------------------------+--------------------------------------+ - | ``conf/env`` | Environment | environment specifications | - | | | configuration files | - | | | (e.g., Conda package dependencies) | - +-----------------------+-----------------------------+--------------------------------------+ - | ``conf/fmt`` | Formatting | formatting rules for source files | - +-----------------------+-----------------------------+--------------------------------------+ - | ``conf/guidelines`` | Guidelines | Guideline check configuration | - +-----------------------+-----------------------------+--------------------------------------+ - | ``conf/hcg`` | |halcogen| | |halcogen| configuration files for | - | | | the Hardware Abstraction Layer | - +-----------------------+-----------------------------+--------------------------------------+ - | ``conf/spa`` | Static Program Analysis | configuration and template files for | - | | | static program analysis | - +-----------------------+-----------------------------+--------------------------------------+ - | ``conf/tpl`` | Templates | template files for source files | - +-----------------------+-----------------------------+--------------------------------------+ - | ``conf/unit`` | Unit tests | unit test configuration files | - +-----------------------+-----------------------------+--------------------------------------+ Documentation directory ``docs`` ================================ -This directory contains the general documentation and links the API -documentation generated by Doxygen. +This directory contains the sources of the general documentation generate by +Sphinx. +It further contains the configuration for the API documentation generated by +Doxygen. Hardware directory ``hardware`` =============================== -This directory contains the hardware schematics and layouts. +This directory contains information about the hardware schematics and layouts. Source directory ``src`` ======================== -The ``src`` directory is structured into the following parts (see -:numref:`introduction-repository-structure-src-details`). +The ``src`` directory is structured as shown below: -.. table:: Detailed description of the ``src`` directory +.. csv-table:: Detailed description of the ``src`` directory + :file: ./directories/src.csv + :header-rows: 1 + :delim: ; + :widths: 14 20 66 :name: introduction-repository-structure-src-details - :widths: grid - - +-----------------+-----------------------------+--------------------------------------+ - | directory | long name | content description | - +=================+=============================+======================================+ - | ``src/app`` | Application | sources files for the BMS | - | | | application | - +-----------------+-----------------------------+--------------------------------------+ - | ``src/hal`` | Hardware | source files of the Hardware | - | | Abstraction | Abstraction Layer | - | | Layer | | - +-----------------+-----------------------------+--------------------------------------+ - | ``src/opt`` | Optional | optional source files (e.g., | - | | | specific cell parameters) | - +-----------------+-----------------------------+--------------------------------------+ - | ``src/os`` | Operating System | source files of the real time | - | | | operating system | - +-----------------+-----------------------------+--------------------------------------+ Tests directory ``tests`` ========================= -The ``tests`` directory is structured into the following parts (see -:numref:`introduction-repository-structure-tests-details`). +The ``tests`` directory is structured as shown below: -.. table:: Detailed description of the ``tests`` directory +.. csv-table:: Detailed description of the ``tests`` directory + :file: ./directories/tests.csv + :header-rows: 1 + :delim: ; + :widths: 14 20 66 :name: introduction-repository-structure-tests-details - :widths: grid - - +--------------------+--------------------------+--------------------------------------+ - | directory | long name | content description | - +====================+==========================+======================================+ - | ``tests/axivion`` | Axivion | configuration files to describe the | - | | | architecture of |foxbms|. Additional | - | | | static program analysis | - | | | configurations are stored here | - | | | (e.g., MISRA-C) | - +--------------------+--------------------------+--------------------------------------+ - | ``tests/hil`` | Hardware in the Loop | scripts and configurations to run | - | | | HIL tests | - +--------------------+--------------------------+--------------------------------------+ - | ``tests/scripts`` | scripts | unit test of scripts (e.g., Python, | - | | | shell) | - +--------------------+--------------------------+--------------------------------------+ - | ``tests/unit`` | unit tests | unit tests for embedded sources | - +--------------------+--------------------------+--------------------------------------+ Tools directory ``tools`` ========================= -The ``tools`` directory is structured into the following parts (see -:numref:`introduction-repository-structure-tools-details`). +The ``tools`` directory is structured as shown below: -.. table:: Detailed description of the ``tools`` directory +.. csv-table:: Detailed description of the ``tools`` directory + :file: ./directories/tools.csv + :header-rows: 1 + :delim: ; + :widths: 14 20 66 :name: introduction-repository-structure-tools-details - :widths: grid - - +---------------------+----------------------------+--------------------------------------+ - | directory | long name | content description | - +=====================+============================+======================================+ - | ``tools/src`` | Cyclic redundancy check | Jupyter notebooks to help generate | - | | | CRC-functions | - +---------------------+----------------------------+--------------------------------------+ - | ``tools/debugger`` | Debugger | Debugger setups and usage | - +---------------------+----------------------------+--------------------------------------+ - | ``tools/gui`` | Graphical User Interface | GUI to interact with |foxbms| and | - | | | |foxbms| generated data | - +---------------------+----------------------------+--------------------------------------+ - | ``tools/ide`` | Editor/Integrated | Setups for editors and IDE | - | | Development Environment | | - +---------------------+----------------------------+--------------------------------------+ - | ``tools/utils`` | utils | unspecific helper tools and scripts | - +---------------------+----------------------------+--------------------------------------+ - | ``tools/waf-tools`` | Waf tools | Waf tools that are not part of | - | | | vendored Waf | - +---------------------+----------------------------+--------------------------------------+ - | ``tools/waf`` | Waf | Waf binary | - +---------------------+----------------------------+--------------------------------------+ diff --git a/docs/getting-started/ruby-installation/img/ruby-installer-0.png b/docs/getting-started/ruby-installation/img/ruby-installer-0.png deleted file mode 100644 index a6b498a0005edae5d1b4473743206d03c758e52e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17746 zcmc(Hby!>7w`M3U6mOvvC|2Cvy%aC*rFfCx6n8?QxVsbFHMo~z#jUs&m*5hd3GH{s zp83r)_uiRj{>V?Rgj4v-@A(t>nMy^Q zMfe+ngNoF9K>0Ay4*cLLP*h$N0H}&YyES|UKSuc?t>pj!V0J#f5PEG3jR64hEg5l9 zHCMg;R+J>&Zl}YNL+_E#>>U?eNQh4;vk;DIV*@dKU4z!xdYqxWf;iY)7aY!8F(V3T zPd&Z7*7jV38oAwGj?6^R80x)$q9SX+!6_Zo_Zq41z1(|M*(dUgF;U<0r$+r;ODxKY zTbjoKBvp6ju5RuREI6It(3EF3NEHK- zI>0T0#GDpKFL8;ce~Qu=hGDgQ{+1X;<$&p!ZXA7`H`rb(A)E9fWKcJLwj^gi=F&fn z?MrwM1NTNB=?7m=o7XnClC$~<0Dux+CKTTCFoU)PvK~J%d>O$60Gv8$Z#>Gaa-qxD zQ}r78Zyy@$)+nC?0Pjp_^PpvAvMl`~Ggv0b03THLqZ?=`lybAIVy1Uolll5(95Db; zj8^2H1&MX$kerP#jkGLSp=L_CP~w{Dbb#Z6s}b!pxrV(!6!ob>iCi%PdG07;Y4R#j zrWA|OZ_kY^_W;TvzO_Gvcy)iBzac_4G!6Fj(M_ygo!0dj%w#R?Xnba{{_zvzGDg1S zlTQcgy~L!9DUJy=Sy0N^3@H+~Zy8sM_$+(jOF))dAt^JgJxF*Wz9S-Wwi3a9S$F)K zArmDIs(2yYNOy}?w%w9fL+MphQ@7;#cGq>rUPaJBAo)I7{tu#K_+y@$zfJL*nh+IZ zupq_?@O!J~JZ@I-1zIDe1-JE4e00dy&3c+7QSNUwZ(3f8W&lN@-fB0NO~S z;&ItY474Dt=(VYg=9vT!4j$0a4j`G9r>^4c``UyH79fWn^25VC#0lGE67RL4}N{;LFHV-`;p8v)mE z$|V-J+DtEt9fud^X_@;?fJpP@Eo^=Xlre2Tzx^7=9V{A5_egzxCm8*l!jTLh`85w$ z)!BE7N}jZ-6vy18066DS3N^)}|2P%=*`$8v&eFMpi#<&Ca5Xo5ev|WO(L0UGcSLeN zV0!&!FDi=Ev!ra4dPP*IAVjapA^tV;XfCO^rE)_}oEGL58?uK>U3<+_@{reXeCJ@+XX6%xUXbJUajT@i|21Nc1V=P1V{SkaT~~v+ruj7q#&L_L!t|A;jf3;bYUf>#lZw67CT@>KR z(1~2&040)ZgGe)t>srRXo3`|7MBC!dfkj{L`d}l3p$*JEG2qnt#AZ?;p*7J;hU4d} z)~YnCH5KklSnqb?JB;u0?k3zO(Rp;ZRy*Osxw7%xhQ~13K3G4m@apTRN$aAV7bHg? z=MAl(RmXHB-U&%yaO!7|UWH6Ct05{C>ZcW)K+QA?&GpulTcatgLAf7PeePToXz>MJK9P zf&UQrS_4x$s7u#*EtQdl+*Dp)4i!UZxl3|y=K@9hec46<)tKUyKOyN8f2yr&il5p= zA?q&t#>VDu+FUGf+e_xK<(Lzzy**iCiAQf-@>MZR5_wDg5!WZ$$lN3@Jt5RdaEDQm z&V**Lj>4_J{-B3Q>j@veklF8d90-8gZ{pPm*qroH+0>epTbbQ;agf*vS3Nq15n;x# zXo$-SlRn@bu~{yZ@c>F0c{TNUIo@zYn*F+8AzMKTNf#OL>uY4|X?hlf@VM@&SU@^F zV$cutE?s?9nuYs9qRDsgw@jPAE#(pr836dA=I7xI02C4`{dcV^81CbCk&5^qeVxU# z$95O#|G4c*q8AX(F4wxuc{nCp01({~DF<0z;@g-2tA@>J=lztOr?|wz@=3^sw%3rCobyeZY)X+GtOLUbehg<_Q!ravZ@3oG>{w_?LHiR7vU`v`Py-RC z&38_P0>o)Bf8o5ey?!5ge}CV$)Yd5^6o^Uaesg_tEsXwNguQ>5@Kap&Wij#KfvxS( z&ZrM+4qbI<8vP6TeicI}eaLaY`H4Cq>DM%DUx5NPLmkt!L3IUgc{BI;0AQP)Q4SjH zbD^XNM$vdMB84xm0~(6EqU}hBA2RGJw}=Kb)}saHbaYAdG!|-{y^) zEiFU*grW#~T`ZqM1ZC55o0K*WqN$>J)5B90%3JxnNsvzJonLldS$l1*VMX2NVf*wG z%|OCx9YTusGzK@L65Wu1GM;O7)Hi1brNO>G(WleVF{)%eW=tDwqG|YRcv&~bXUwnM zC{w3ozNL{uXuAeyC1c}_3MiX2=%#x)e|}cH2RNzSpMB;3?!GiVJw4%Y`TZ+mv&-RP zlh;i?2BF5??(~4o{j3=1e&?BOqgfxa$n6=^LzDN_sjhbY{%keuD67-UtCibM`dat| z26eYB*^iz7G^ZBb^zQjc--n1>NfheT87U(CeBg{*inD$?gP6T_V$F+@P0ceYn!r`Y z*p%)q4maaanh*A52Lr|Omd!5y#2@^GWp6^r34%wO*KAq>F;EU0s?^)iLOO@vX!~EO zO}0`bmmJYG>gX${Vt1%86wsIIK!0(?#CI}g)GaZpq-HYX^Bo=@?(YjZZjZLzEeg1_ zE=<;*cgL6Lf2=Xv7r8riAie3rnOKG#eVY~%ypPMP;NO|mOs~1D*L&D=X>*x<;BeTF z9jLR~ad(5+G*uKh(zBa+krJ4|E*ZGpm>gISeFpcKGA^iIdE?Fs`IZ;#KkpmS;3)j) z>@G##O@oED-Z>z8=&&oKDDNt+ia`y{Nmt_b@%p{qURAI@xt;Ggje~fcNbQd}vU0 z8lltTSdB0d!;MQEFe&KC&W&wPyZg?St@nX#d&32fERW4xi^Fs|;v#Zb8|hAcUTW;+ z%Vwa9X1z{zpCw--Q(EeB$4Va&k$KRC-xBp)#3%#J%EAxxA3VQbOEV4~ep~OGtg%Zj zJQa9eC$1qsJrsU|lhCD%OJugRxNWt~r#Bv@J@vw6P4HOGoewur_BTT84FTmd#VyvV zCIizgODcwfL{&ZF6^4RpH5_vsqHg>RDimSQOV&j@+okcV)qXBQ5^ad}L2G*Ao#=G( zmW|L_+AzoPzWZ8ZdO?e6=jECPA(x09U6jMWSst(#p`u`U&Ldv{gDvlF^neEGOn|FgRGho4zu z$og|_4&AGHgc-UMi;YDdeKCo^#VNOYD&5>2pd6HcEse>R*Qm3vebR0Lg`u>x0$&jZ zJ^5&!q4<&OzH72Kz4G7^ho}AE*HG+o-S0b4`+b2+Dd@U!xV&8G=HlY)>>LK`i$P?I z=|8CW!m$~Q?!bgB?BqsMA3(-vWRY6WahpQ#Bcvr&PMB}NvEhep2m#!fWNJdBIWm0j zN-XVyD2rXyxm*y_X#27nYdP?GJsj1d5+l^So;Qi7<=jkEr^Q#8deSeYHqy51q%l10 z{Y}yN;hPo>s-k8@I=%Ars8rg|55xw-N-7=7z0uyMn1dII&Vt7)IiS;Uu-Cy7*F&9| z`c~}7L59c3l#6HX-dT0Cp3822tb(4)?J@CMq`ryGxJ+*=WFlRFPCy9U;C_p;*Aof) z-Ed48A>uvISFz8(wwO+O1J-VTsK%QEwb^us5VP!W3xA1v5LbE4Y}yd-T zcz4=Wd=j|lRk`4TcgC8u1j>PNC91mDOIi=_L#iTg+i4e0U7F)~LUn%oZRGMo{e8iW zUPIBE)PvF0BFtu?(j1l{6o^Gia+FvSujcGU@$@_Ecb7hNW=2-@B$ugu{f@Je6~AO;eDQ<30}C;u9!VZnYM9T+!Ig~%GonCHTYOjF~ebPBDSslwgsehACa2)FmcOO!o5FNUGH(%8Crik z3#@P5DAQ)S+%Gq`UE)6<(jIx(FGqVADM#}LG6*f5)s+(*e)PEVM{7HoqXFNYmM>x* zh}0x&WRju{eyBJjj6XaSZgH7_RDgE$hxuHV65CtcWVbr}04#}{*ElZAtwy~O86-^= ziY*L?k84ZwCh5yB3c9MPDpEDuyf|C z#KXHIp+oKS!DYPJUI9Q*OqEjeFLlL(#`C@QvE z?#DgbD`3{~==kAe`>Ekz5v%mBzta-zYPUD1>oE^rvY(D&8fj~=UheSI01wUcu^hJD z9B;8SZ1Ftwf^M%xmMf1iKwdBc%_X)S4iWIXlzaU{!7atZq)VDpYVQ~l2O52+ts2WY zmiwic5s^B(rHi|g8xJg&#&cl%zEti+t&O{cgE-zC__|Fdy_)hx;sJ#oV`*BaHANq)KWL7I$j813{ zlWsvnsp1)mgXy<{4h5soz%AWT`{m}g^Dcd1i1)!Qc=>EFMgsYQG}jjUqFLe(c2CKv zuK@N&BtD!-p()&K1un7LcJ9sBgPRQI-OvOIL>jJI{0V88J?+L3S>&1@{CSqE53&WO z@9tY7+8crUfwp>X=R*VS52up@Q%(mWXZE1wDa7Wsmg>FYK(Je9BnjVnlgIKU&_&@^ zdOmJoe)#6+!fAOD&rYn1Tur1*E)>LR%g!hA%X#T$Q|_vDR+S}H=&r0@vDxwBN^|i( zqBmhlQAFtM^zakzUp=_#jkqE8Zd&tm0E^rW57{=9?484GK%Ks2K;hA=fM?nY>Fqnv z3%r8c&v*U~(_j&g{kZvQ#dfFtvs8g4*u+-F-RueY!F@kJk%xG}#RC>$d2!gV=^sw| zaC0+!`73?Pv&Q;l!&)^QQlBnmaSvAjJwDrU($huvc{kD&j*V7_{FV~yIg{#ww*3op zyhZN)aS&)gk@Wt)Zl8sif1%U%aJzo)kyRQcl7c?CG+9m`6il@oCBiEBU54{f9Jn+1 zTuygfZ20#hmEc@5X`6`q!aeEM7JT5RuEvg;VJX5l)x>!1;W*KF}BO1q<}?FP4F7hFVZg+xRAy zxPZHd!^zHl`x8sW#qn?2~R;FpzmCs?F^ddVqu9SM&|(4}hNBwA|w`ARX* zV$0|8NKJ*?u@DDu$SxFI$`72{?Gw@C+wWzd9{I$v10+^8Ez7u`n4B;zyZZT1zZ>9@ zq1*nu8CmZ-O!W44gzevl{E@IWUhCZE^Yir)EWIgk!_gY%2 ztp8;4P;x*#UA}NRo8aLc$ayE`xV6N+(dkfd`+MP3c$|9!YcBu(KF$0viQ^nHJHebR zbiO)Y;I&!@Tc|&?Ii()Vdap(E$Qq7PmKIz*V8NYJfyY+4_57iS)m3xb)u_3?j_WlZ zDevCgGvGbUALw-z&2!&bLG9_$w|*$ZvoFO!v)pp6TMgD~xxPNwXS&h1*zw-ky*ryZ zUf!~@Xue$|P3MX4y7RlJOFz52bI8B-ChWVesUOMUHoB+@1u8b%Um%0-7Aoov zXY95|$x3$3|8|P?c}sB$R6mdR49um57D?M!I z0qzQzDi$=K%K{a_Y#zH?2lu~J2fz!B4w@r|r=ms0U!OkOCO$o7t&mV_GYqO*ZL_B7 zeLa9CJkMQaGTg}IFmg9Yyrp-Fh7EIQdswJR1-scF_g-s&=i4_I+9IlN_^BIuXT2<` z&&v33^0ufw?=$*Htx~VQ@~JK@a>pM`X-zE)-}tuQbWaXU3)Y`*B*s4ItDrw(f&c{U zg{7q>ubYbsklmX6!|~5c2#q=z}L?v!)=w&Qyj&}PrpW?S>t7}`xn!_m>&1Wbt4=@4<^LYUQQ zS!@f&+*)&3v@CSnWr9rFeD*zipouiS3i$i5H0fcgV&PN@Cdgqcs|kdCJ!rEBdli3$ zAOgN0iG3QhZML0j+29FHw9#)im=48iX|cO6$3Sb+Se&l45EkMV0@+Sq2MXwWI?DD^ zq-qMam~V6vCWxG^I$+s+JRiWDu2`yactl-qJin+QKAI$}%8ZMt`*xeh;gZ+cOsmV` zL953FbWv=?IJOFS*d}BQ%>v>W1aL0ZKYZ`-Yi$*}ySr6{@L)XZk7Ni%#o7FW)}&x` zKh8y{8^=3$ay004erC|@kXDZ1S!kKOxsFl_&OE>5yL&TIA@Pv7&7oj}b8=?*=6vM#|c zA%WZOxlXY~FXkI1f4mZMJh?0Gka7^~ldvj?{vbt;c-Gg?;8lY3=P7G*g49}7^gF?@;bgh;)%2kY*7rh*jIxGC z_SM4grF7lsbD)xQ+HlM z(;s{h3Bu-#^)CXeT_y(}mtMLNLlzn#Bi+{Pguh=AY#UBx6h-CD@BG3RmF67o*jqoC zg}A!Bf72$J)!Q|JX3%pXUa9L`S)A# z7m{$EEIeJfUNk0iwK|y9ab>T4tOTs=i0Q{aMM&Qd?ijrKg(=g%V6VS#)H_NLs_+5ln^KzxCscZw&3kg1p?TRUDN@-){nMrhaF*DG=I)VZHT~V^=9l ziZ7!#DubTvk9Z-fZK)Y5<~ui4Lq{BJrdDphd1LgeVXn3gxhfJ#j;Q!63%!sCeziGq zSDnE%9dDPsFHT~Axy38IW0)$9X;g4F(r|HGS|tniB$rLR%Mu*M6jTX3=7}JgR59QT z3iF%Y8Ee#`mktxM;=mXWcBRddYa3Y)K5;F`FiFkGd#if%zRS?A=vy>sOh}Yjv)YN6 zo2u0G_?RzJlBu9G2w|_17~f7Vxhy^Fl()6HksF?Bi=E)C!fSS{d2#z0-hk1J1*_m#TMoIn&Zj-ZubBcLv8}bR*_JWOD=0BABnX5P!?(~Eq4I5o3%|jBvtJN3V^AKqK0Ryx=MR->9ahUsE?o$ZALAie zCn@%CU~nmW)`4BzGGkHaxU4bSPr0biMi~6lD@|DZ=s#91zV`OgU<8NKGo((#IKCZ9 z>&+TxqlK`9v8L-3$F9I3B?SHXLlez4W!Eeex3HwUghqA)9Tar+L$rvzpdul)R;sul z$XHZTeq+Q?O=`ArB0l8U#Gb84+6gmziM|J)K>%NC`~9F=c8pqk=a}f;^FrbHcAG3H zm-ymGwX@w4@4y_4xI42I+9vqP$4v3xd@dft@MOb#?K0)0RTNgRT|DNev1ntwp|FqgC4m_9V60S_sA$reIOW3 z+GHaJ$S=j##|S=SK2^rhcz6)|e)QxKUo;{7r(3q3es6dme#L3(xk<#?{37r$X-9%* zqk8k@QzM*A3fAC{p{Gbue?uz(kDf|S;?*AzO&;TSafF$Mc_uWc97@c=(&}g$h>r9v zyEoj@I`QSi62FZO4poG3ihzVzKqBFW1cDjTSn2q?*>nhDqvO*L{JbG?-?VD|gE zx&kYDfZu!05>6%O9H?`F>65XgPYR4kQYxb3keFY#JvBtm$>&VLXZ}LM{1;}}d+~*I z&eXP?_9ng|7SxLfIh}8m*u%_U464ej8zDtM`JVY=h#n&@J+9TjFJ^uzB6vHsaB6CF zqr1=IV{;Mb#KJ^f-A%C;af#QItr2<~X6zmXO(^FJR|$RLXNvAGFUG2*44b}Gql8%S zL$Xq6!^m{#_KoKSZ&ZgI)=$t>vz@NRE!P!`D9Xx)etfBPVF|qth2ixDjz5PC;?+mq<>K*kLv2g~7kgf1Oumea z$dX~E>)?wUS(gs!Wg(_W=J(y7i4|Qdd?sNiFLm(3ETk{-7n`@xzHw@X?q}2M$(G+Z z@==!l18*W-K6WBoHoQ`l@u?_JJuVk)Oi?DE57Q6A3J6$wPL3c=mXh~Y3uv5%+;0;v zw4^&{&YjzY%yUUhccazzRLeN=*i0>f^Zn8UH^3&oD0(nKcX|c%G;fp(WF!E_%OU%q zLV>OlABetDE%}_D`#|!Y7CiIHsbKBP2ywE$=wh2wGH&}-s=^ztrzj!qKSQxy6V$^+ z?45MF<>x2|M+IMdCFW{XF}iSPxCy?6Pj}pZnIRCFmm#}wJyT<6Ym6ebK=cU+GSw0v zF3SwX4Hk%N-R3Ejd^KZY+BcpWMcry0Ym#f!rI7`d>G~2~ia;hSFSp0;8{B_Y`0n6^ zN`_fffw=tF9&Bkc8|vr%pVi_**r=ZsR_Y*dC@o&H;<7mR4o;Q&q;oXd@Zni`awn;l z>T``0UPdjz6CCUgz44qUvj8*kYR0c|$YMzS%%F2K=Y+uekDK-(Z^ho*zHb+BFf~nO zI()0h-Xn2EfOeJUM{bSq!v%--D=OQJTzg$)xDYiT7T0-nHo zQ57LJ>tJR=iruSkc4%ZQ%Id8xfE z01#^C%qP8&3C)I<+RlO}k9n1Z1c+8eF5?MjiUSxKhNG_1DDd|jIW``?b=~pFs42Of zq{Hil0{^+J6sqw?W~rs7y0h_FNkDcAyUG0%wyiNXQ7&$X3>!NCzyMqH~bhZov+?9+0GF2pfIzMB@q&+d~{7{T-C>3RLm`nUBZ6pNI zk^gs`jxbt|oo5spppYbccH?m%geF+IBhQKVbTi$n-Zt4jO{R$$3wW{P!OqZS(v6T6 z*mH4%AVApLTMh6DAxqK4#O9%e=VQ!MRkU7PPBp(f$M!AE6;e3nCTMwo%c9QK7_Iyz z@7hj-{2d;}&#}2(kyhpqO>5QMq@I2$1VHiEf5v*;K4POj;?1vuVgj6Xd`j29NqgR` zUQjC65+!b@Qx_oq3_+CN@JXCp;IrzwYLVxt@N&3#QO;%}N*g8TtNA2DpBn5R@Omf& z@#+E5RU{MAVn~U$^EN-gK>WoJGjcFtoY&>S<3io|pTkFDzL5W)F+Vc2>QevQjaC4V zxf^7f=+}kuZ+h`}M&TjfrQ?qvJ4eRdv3!Wr@S= z$k2e4u@eB!PX9A)kxSu*S6m9?K#Cc6s1n$8h|F{erT*&mO3h+uBb;{dG5u%yT8|d- zDY~zRb$gF=BrQFdeR3BuQR(5UU)6tRPVZK@*$XCN`q>0aPuX2Het_e> ziKy6LC#U2L+D~a!`%>V_skhpfAxk1nG_|shPT?LOQ-rd`I? z`kZPoik6nQt2P8b3zA8e{Wxb>xlnI3OPcx3tlI>a9qRW$yt8RAlx*I@v@N_ z)^c$Q`UQSfB&`68rN~Z%z%OyG>ofa#odIa96o)^1@+EoEBvJo3aby+e_MF;SYX_}R z296<{YP?3CBu0sr{j!c4OrFo*#gc!%R*LQTL@h}KNh_uxAr_0(QSqIniuK1WrE`sB zPG!b+C8Ac&hobZ)44688FqM_Jufe9SY*p8!=IwfAZ`r`;$1Iz~N&w8q(sUy^8N;Y< zaN?@F;{ck9Y4)w}v9>>v58AJOhPi3unSD&_S>pXcosCAT;F8?)yQv8&cWnE=uM=?;5Gp~4T=jDGNMpSM(% z@-J(@x%3#ywAZW3n*xWBQ>6o8(&+&-$yU1Jgrbz1L4LDSUcSF2AJOPV01SHVj!|v| zL5vKop?@Ls6%*6>O>}DbRQ69+U8KfZIHIY3w-sy@6F@_7C_~N79Mh8?m8mdh$2URL zOb}w8EuRqbRyA+?Eb47oBC|VJa(2Jf{Fbx64BuMi59+=t*&Dh;U?f2k5%Jm{KB@wH z0W#fJu#mfib!FMj)6Vceh@5IE{1~sM**QG9{lEdQj=(sC{>v9QL}3&QTt_WbU;Kty zAY+?q&NI&TxkTxL@^i!UiiEPgpY%zz;DK$_Sv83CirqIF%Fw}-@otWaA*Xg>%2?KX zRPHL{y|aMyb!@LFf^WS{+x_&tNfx?%euC&KEmAk?vFpRNsc6;WJJkNxV4}2jXmdE) z#ZH#;k$upl>uYqHzvggBsOC}D)M{?yZuY&s?bPUfci>gn<)Ep-kLT(`&@d}ASg;;L zy~D3h{ew^|(Pm>fB1(SAXI)CBPj-`+*Q+^d65JpSeVL6DBhl13h&S?yD?jyTs@w&8 z(b*3LQ~~r8+$#e8x1XjRiY9#}{Dht5_qTcb$VMJ#ymQ|mv(?6{z_NjJxxmpT$27OnSXdwU z6EN_C%`y>nrT3Hr%${MT3&K{*O%BIt=I!{66U&+L?5+Rb1z8q!zZx=Bu|Jlh#YJFw zZhpa->^i=Y33Pfzd6(Rkdg-)(%=TuaX{w?zkIFz3o{Vn(bfx`%Ep~#};JYJ${IBm* zyGX8H&o4cvvnNiw;v&$SYh$P$@*+3?if)}NKeE^x&FLy%Rku7(9aB)~ed=w*YZbQ7 zSD|H<3S6dvnMO#z84gbDR#fU3hd#;>>W=pMkOI8AcbzFKNv#XPE8gREy z(6RCgkuqd;XDVZT9?O9ROr25Y_&PSbCXIJzg{L zDfiUP>^wxbY~r@^@LYN)NHb*cb=BKNtMuAo=9&`qU}^LA_b{UR;!o_KhpOAy7RhoL zSc!5p$s&WZmQ?moXG^ts3YFqgMP!jOcW{#SUs}i8!8pwgBQs^=WlKNT4=r(8~f*Ifsou* zFItFQ#W%(Iy)-2~%RZSLYNZ-b86s+2aN`V)+e;kx4}Y6vu_p0v)M^2nw9sUbBZXl- z*}g%p?Vu4U&+kJ%(volS!g^=^*TVUs_7ojg(>1buJ*?M`VK>z5 z=K(Ce$XafZ+RDNCU@EaUnOf(FqOP6VQ49!L<(Up^u0jK}ky?xGo}1dAK4dzOR5uYp zgms}P*eLeb*K^!XKZi++cAxtEg&umJX7`E9+pn-arufezzAnu`!ex|NY%Bz5EUu?& zwb~O=7OS5p??v5G51tqOI1y2y)!`Bz)FB2RSbHd@FxVta0R4bCUOkPC)o~mA(dUiB z!>dlLW$_q!I3R^VzxLkCEH`nGF2z=|LUc%$11?R-1hKtyQPOf|KM##VE_NmhC7}Q9 zBe4Ou(gCp>Elbg-`-Y(DqW$8`b{TZy;!RuI)b0&#kAz}Z4Fr6fKeA9{Xl|nDM2w7f z|2c{D{oP+sRr6Tci|_X52mc*2@}I;z|7*JCKXlW;{J$K{W~G9kz3O;A+tn8)nMUv!OWRr)=z0mq#i}pOc?1A{BD| zu^BvC504U+>eWS6dt~lRxo5;2XSk^pI9Q*wcBHA@{oY$*gZF+;K%?!y8f)~aP?y$D z2BwgS<}_%ptuk~CQGLFhzO_Q>ClTl-UKEl48uNGZSDM+J(dN^+Cl-3c7id5a)mtv!zoKEdrStXZ5SVH?1=3TDV=8K1H%SyBcUc~;K z!qV{}!IiH(v!uGWD~P6fphjA9_+*BkdRjiJ^Owxj$m^ed@t>H^C^ZKRScVNN$d~i-h8Zq)xHmjuhh5;+5XINVk2;*-J`_Cywb=) zEL9q@numBD|82L`#Fu*eFz*X*)IoK#2BLZX@9$*Ce67A2&o)IE%nx4elcj=%IIog2 z6;dgrDs8j z@csnYiT)+F>dAeYW)267_Llw|R&RMq9%6nNIHyb1 zfh#CG#`M+!Te8;b7gs>-q3>U>!XyXW1Q=t8%Zj^3)ix*G>|N(JaA^t;r#I+~kYCy< zK#2fSC z#Ta7#DfaC9axl9rGTVZW*c)X9oYb)6u4l;5tOz)zDBWB8ht)ecm_5hkz}Adx^jwtC z_AjZn!@@9?IXmb=;523?HT{p0*eGdGAnr zzf6rc2&GGi*0mJgZ9_VmC)$W6EN~chf>_u(yinSD#CTQ0bOtnP`!G}%W8j>^UhNt| zDf>F^ty8nHHpFn&@mC<4;_zORDLrw8WSy8+qTf)p$kRlt_78WN?>S>wkBx=Jbozz2 z^w2V}17$}9ozqNY0wkW9^qK_q?`8zuiu=`uG12sbX1MXNV%Q-ln7fk-SJ8N#&c?bKm7IY` z36{}+TO%HgK9zk}t{A&b?P<)Oac9*Udsm>2Cgq({ZIAb7w6W3&<78Ze(s^O5IN zIzhZRMa!mAC(cqH5ko=P-t)79rjc*k+e}SK8ucqA@4vVEkDKjFX&jT=f3ma#8;hoPbS(V$68E^!m!Oj z8xtSC>Sb&ga;l_3goB^oQ1CV*xZs0(E^n;<`?WihkR!$%94a3=yUQM0SjZP2XZIhz z{pQ$Q!P9KoO9k8HeK|)N-!p;DVL5$xan?UzuP%qgS6@6O=~0*up_o;c^VK&)UclS<|U#f>IeRgj6ggHN$TZ`UTE3c{|_dDhb?K<@Yam5*dMlPTXgv z$eKzx{=3A8=c8gyoUh>;{(BGm>H~NuivKP@hiE-|2Q}=rDndtX%Sqb4nWt$r<+pdy zP2VYm%Kb>9pXrJzo7kTuuzLBmGvt~xn0+uld~K*kR}}9{#}b9IaFUQ{7QF%>LYTp4Y@7*En)TTWX0Z=HbLe{sZE;|d4?`_4>P6$)4mtK9{nh- z0?J(FvE0WHymJSMoepe%2F2fYRfcHz*=IjG$1HbL_&S}4@P>=?Sa3%S_#^kxyZMUcY0wi!a3;s?W;~2A`vl;_9@YvuTxdMq(|@?0)YSJ{ z_JUc@*Oe6%1ZMP6V_msGXUOa_pI&Yv1K#%N&9BQh< zu!A#dCe!+!$L9m^jn;t4&tdUiW7!hm`?CVAemusHU%GKM2b0+RGWtwuhIZ>sm=hE` zt<74B}#cu(aK~YpQwsN>jhgZ?iYjDgDMUl!)H+7XM>YTY7qg+y6 zY5J>#anKKNN0X#rBRa+Fzc;C=jZ$tQ2dvEGW5S>sl*FYz{L~~LXeY)K&|ai7>jb5{ zCs?~D_=ZjBkkf9gAr?@wUzK;|FG1s6=9B`D*WjGQyT`I4kNsNMq6;bAB_fvK+mM4K z5s>hexw8*!HvBsu-Ut#~c%b+&$5WHYwPXW&0@4CYMVqM|k2LsR`2;qN3yILzx?bm# zcXxM`tCSm{+g^}oA64Qg#{mD8IXA4GkxT6zdl_SD#g&Jt5NCg3z*UOEOebZJfK$kf zvQ{J}wehwk8%FbI4|o;E>WbZGi3RxPh#+_hf0c0gvIm1_LFo(zg=>ID-NFqPpC|_^ z@VCAdzwT=}v*Xe229n}_ov9KA3WfF;9qa=E$u-+Gncnomi|P&EM3gjzrK_qQbN2mh zM!lF151H`oNv)5HCw2ZHI{C&u?$4G>wu}B@M#zKB;LY;GJzN^24yq3}VGA|%#@Uoy zDsYu~TbvE0GPLV;SOWsSvkk+kOSlRmJ$)<{bVB?WZ4Q0^Flc1y(m@GsadC$5oIKbM z{%-@F12YUBS0kdtNih#RJC(PJ1(zb4@cf7gT%V(_iGEQId0|?>X(nFt3oZFPX+>*;omuhWC6&vgB*IvB$^q zRJ#U0dXW`mjFGOC3*j>jH?Fc9qF>}@kIG|oWl1Eq%_@ZJ@%h$DHMm2KU07i{W1(~c z#tW~#>(QCTD;g0Er#t5>JQ4P zrV>WQgcXzA%-3WtrKrj9REtqeF+4>9@cI3x;PYQf@n1<-Ebi_#TnC&)<8<%6 zB;cQYch&^3ym%+CpD($M^}M1f7~#p(ch)GsDiyH! zegs54u_>g0JMIYck547A9%~o-F~756#Od1a!gmV$7`>rwUjKy#A7(E+A=6ic_vfdX z&=^%>lDl0AJg;+Q0(9&@U;C*!tAOp+*ze3ggawE-zTt51_a0DR6VzNJA0~UOBSDYu zV7QUc)ZM@}!;edE>7)wJ$%X!^N;uUnf0KWo%AfoUo)zQGC-8-U&Xt>tOt?-z8&3}Z zFmh02U^mJCiB9qA0*Uto(^py988pZT>0G0zQr35Jxlp*N*7jOMQIKi+;_&wlF%a!w zY-@J0in9+HVOG(qeevu#Ntan|)ogG2nS0gI!RQ{m*is}8E25^30}w_GxiN zKIeduaZ?RsqI8mn05fDv$=L-tqm%P6%`@rRzzFLldhpDI;Gd}rD2IM%jCGk?rv#6S z_RBNWS8%9FO3d!t6(X{=i>eoN55|-!#?6>Y5`!Ga9s3R7)wf^dIEeafCW8YdYl(Vt zj2T$PFbW3K+A#dbl%3y`GLsUKz99qg=PJh4tEb3}tNX@vz-N0U$uz28&stJ`mI3Wi zjwzxH%?n1G(T!Dqa_R7|NBi|mGNJ!fo-FVjAkjqS^QjXushJm#WjH=>unP^-N$kI2 zkUcA9u>aQmn6&)2{pSC%&q45t9zY?M{^gGcEEP)`e`gdIc!UH1WF!>C%ikOL{ujKb B>7oDt diff --git a/docs/getting-started/ruby-installation/ruby-installation.rst b/docs/getting-started/ruby-installation/ruby-installation.rst deleted file mode 100644 index 1ea2215e..00000000 --- a/docs/getting-started/ruby-installation/ruby-installation.rst +++ /dev/null @@ -1,40 +0,0 @@ -:orphan: - -.. include:: ./../../macros.txt -.. include:: ./../../units.txt - -.. _MANUAL_RUBY_INSTALLATION: - -######################## -Manual Ruby Installation -######################## - -.. note:: - - The RubyInstaller does not support installing different versions of Ruby. - If there is already some Ruby version installed into - ``C:\Ruby\RubyX.Y.Z.\*`` this installation must be copied to some - temporary folder, and then can be copied back into - ``C:\Ruby\RubyX.Y.Z.`` after the installation has finished. - -#. Download the |ruby| installer version ``3.1.3-x64`` without the Devkit from - `rubyinstaller.org `_. Use - ``C:\Ruby\Ruby3.1.3-x64`` as installation directory and do not add Ruby to - ``PATH``. - - .. figure:: img/ruby-installer-0.png - :alt: |ruby| installation routine - :align: center - - |Ruby| installation routine - -#. Install the required gems for ``Ceedling``: - - .. code-block:: console - :caption: Installing required gems for Ceedling - - C:\Users\vulpes\Documents\foxbms-2>cd tools\vendor\ceedling - C:\Users\vulpes\Documents\foxbms-2>C:\Ruby\Ruby3.1.3-x64\bin\bundle install - - Add ``--http-proxy=http://user:password@server:port`` (adapted to your - settings) to the shown command if you are behind a proxy. diff --git a/docs/getting-started/software-installation.rst b/docs/getting-started/software-installation.rst index 1f377671..1bb54090 100644 --- a/docs/getting-started/software-installation.rst +++ b/docs/getting-started/software-installation.rst @@ -13,39 +13,42 @@ Software Installation Otherwise, the configuration workload in later points of the setup or the development will be significantly higher. -.. note:: - - For some installation tasks, batch scripts are provided to automate the - installation process as much as possible. However, if you do not want to use - these scripts, the manual installation process is also described. - Getting started with |foxbms| requires getting the sources and installing -all required software dependencies. These are the required steps: - -#. getting the |foxbms| sources, -#. installing the software dependencies: - - #. installing |git| - #. installing |ti| (TI)'s |code-composer-studio| (required for compiling) - #. installing |ti| (TI)'s |halcogen| (required for code generation) - #. installing Continuum's Miniconda (furnishes the Python environment used - by |foxbms|), - #. installing LLVM (required for code formatting) - #. installing Ruby and the Ceedling package (required for unit testing) - #. installing GCC (required for unit testing) - #. installing VS Code (required for developing) -#. setting up a development environment +all required software dependencies. +These are the required steps: + +#. Install |git| +#. Get the |foxbms| sources +#. Install the software dependencies: + + #. Install |ti| (TI)'s |code-composer-studio| (required for compiling) + #. Install |ti| (TI)'s |halcogen| (required for code generation) + #. Install Python and an virtual environment (furnishes the Python + environment used by |foxbms|) + #. Install Ruby and the Ceedling package (required for unit testing) + #. Install GCC (required for unit testing) + #. Install VS Code (required for developing) + #. Check the installation + #. (Optional) Install VS Code These steps are described below in detail. +.. _git_install: + +************* +Install |git| +************* + +Download the latest version of `Git`_ and run the installer. + ******************* Getting the Sources ******************* The sources are available from a |git| repository at |github_foxbms| in |foxbms_repository|. -The following example shows how to clone (see :numref:`clone-foxbms-2`) or -download (see :numref:`download-foxbms-2`) the |foxbms| sources from GitHub . +The following example shows how to clone (see :numref:`clone-foxbms-2`) the +|foxbms| sources from GitHub . In the case that you have been supplied with a "library-project" by a partner, please use this archive equivalent to the "cloned |foxbms| repository" in the @@ -54,24 +57,15 @@ later steps of this manual. .. warning:: If your user name contains whitespace (e.g., ``vulpes vulpes``, you **MUST** - clone or download the repository to another path, that does not contain - whitespace, e.g., ``C:\foxbms-2``). + clone the repository to another path, that does not contain whitespace, + e.g., ``C:\foxbms-2``). -.. code-block:: console +.. code-block:: powershell :caption: Cloning the |foxbms| repository :name: clone-foxbms-2 - C:\Users\vulpes\Documents>git clone https://github.com/foxBMS/foxbms-2 - C:\Users\vulpes\Documents>cd foxbms-2 - -.. code-block:: console - :caption: Downloading a release - :name: download-foxbms-2 - - C:\Users\vulpes\Documents>curl --silent --show-error -L -o foxbms-2-v1.6.0.zip https://github.com/foxBMS/foxbms-2/archive/v1.6.0.zip - C:\Users\vulpes\Documents>tar -x -f foxbms-2-v1.6.0.zip - C:\Users\vulpes\Documents>ren foxbms-2-1.6.0 foxbms-2 - C:\Users\vulpes\Documents>cd foxbms-2 + PS C:\Users\vulpes\Documents> git clone https://github.com/foxBMS/foxbms-2 + PS C:\Users\vulpes\Documents> cd foxbms-2 .. note:: @@ -103,22 +97,16 @@ Software Prerequisites .. admonition:: General Hint No software installation here should alter the ``PATH`` environment - variable. When an installer asks during the setup to add something to - ``PATH``, always remove that option, whether it is explicitly mentioned in - that step or not. The only exception to that rule **MAY** be |git| and - ``VS Code``. - -.. _git_install: - -Installing |git| -================ - -Download the latest version of `Git`_ and run the installer. + variable. + When an installer asks during the setup to add something to ``PATH``, always + remove that option, whether it is explicitly mentioned in + that step or not. + The only exception to that rule **MAY** be |git| and ``VS Code``. .. _css_install: -Installing |code-composer-studio| -================================= +Install |code-composer-studio| +============================== Download `Code Composer Studio`_ (CCS) version |version_ccs| and run the installer (chose ``Windows single file installer for CCS IDE``). @@ -129,206 +117,215 @@ Select the ``Hercules™ Safety MCUs`` option during the installation. Installing Code Composer Studio may take a while. -Installing |halcogen| ---------------------- +Install |halcogen| +------------------ Download `HALCoGen`_ version |version_hcg| and run the installer. Do **not** change the default installation directory chosen by the installer and let the installer proceed with the installation into the installation -directory (i.e. ``C:\ti\...`` for |halcogen| ``04.07.01`` that means into +directory (i.e., ``C:\ti\...`` for |halcogen| ``04.07.01`` that means into ``C:\ti\Hercules\HALCoGen\v04.07.01``). Installing |halcogen| may take a while. -.. _miniconda_install_and_configuration: +.. _python_installation_and_configuration: -Installing Miniconda and Configuration -====================================== +Install Python and Configuration +=================================== -.. note:: +Install Python +-------------- - If you already have installed miniconda3 in one of the default miniconda3 - installation directories (``%USERPROFILE%\miniconda3``, - ``%LOCALAPPDATA%\Continuum\miniconda3``) or ``C:\miniconda3`` you can skip - this installation of miniconda3 and go on to ``conda configuration`` - -#. Installation of miniconda3 - - +--------------------------------------------------------------------------------+-----------------------------------------+ - | Automated Installation | Manual Installation | - +================================================================================+=========================================+ - | For automated installation of miniconda3 according to |foxbms| requirements | The manual installation | - | just run: | of miniconda3 is | - | | described in | - | .. code-block:: console | :ref:`MANUAL_MINICONDA_INSTALLATION`. | - | :caption: Running the automated ``miniconda3-install.bat`` installer script | | - | for miniconda3 | | - | | | - | C:\Users\vulpes\Documents\foxbms-2>tools\utils\miniconda3-install.bat | | - | | | - +--------------------------------------------------------------------------------+-----------------------------------------+ - -#. conda configuration - - +--------------------------------------------------------------------------------+-----------------------------------------+ - | Automated Configuration | Manual Configuration | - +================================================================================+=========================================+ - | For automated configuration of conda according to |foxbms| requirements just | The manual configuration | - | run: | of conda is described in | - | | :ref:`MANUAL_CONDA_CONFIGURATION`. | - | .. code-block:: console | | - | :caption: Running the automated ``conda-init.bat`` configuration script | | - | | | - | C:\Users\vulpes\Documents\foxbms-2>tools\utils\conda-init.bat | | - | | | - | .. note:: | | - | | | - | If the script returns | | - | "Maybe you need to add "foxbms" to your channels list." | | - | please follow the instructions at :ref:`condarc_configuration`. | | - | | | - +--------------------------------------------------------------------------------+-----------------------------------------+ - -.. _llvm_install: - -Installing LLVM -=============== +#. Install `Python `_. + If you have already installed Python from https://www.python.org this step + can be skipped. +#. Open a terminal and run `py --version`, this should print something like + `Python 3.12.4` or similar to the terminal: + + .. code-block:: powershell + + py --version + Python 3.12.4 + +Virtual Environment Creation +---------------------------- + +#. Create a virtual environment **2024-08-pale-fox** by running in ``cmd.exe`` or + ``PowerShell``. + + - ``cmd.exe``: + + .. code-block:: bat + + py -m venv %USERPROFILE%\foxbms-envs\2024-08-pale-fox + + - ``PowerShell``: + + .. code-block:: powershell + + py -m venv $env:USERPROFILE\foxbms-envs\2024-08-pale-fox + +#. Activate the virtual environment by running in ``cmd.exe`` or + ``PowerShell``. + + - ``cmd.exe``: + + .. code-block:: bat + + %USERPROFILE%\foxbms-envs\2024-08-pale-fox\Scripts\activate.bat + + - ``PowerShell``: + + .. code-block:: powershell + + &"$env:USERPROFILE\foxbms-envs\2024-08-pale-fox\Scripts\activate.ps1" + +#. Install the required packages by running: + + .. code-block:: powershell + + cd path\to\foxbms-2 # cd into the root of the repository + python -m pip install -r requirements.txt --no-deps -+--------------------------------------------------------------------------------+-----------------------------------------+ -| Automated Installation | Manual Installation | -+================================================================================+=========================================+ -| For a semi-automated installation of LLVM according to |foxbms| | The manual installation | -| requirements just run in an elevated command prompt (known as "Run as | of LLVM is described in | -| administrator"): | :ref:`MANUAL_LLVM_INSTALLATION`. | -| | | -| .. code-block:: console | | -| :caption: Running the automated ``llvm-install.bat`` installer script | | -| for LLVM | | -| | | -| C:\Users\vulpes\Documents\foxbms-2>tools\utils\llvm-install.bat | | -| | | -+--------------------------------------------------------------------------------+-----------------------------------------+ .. _ruby_install_and_gem_install: -Installing Ruby and Required Gems -================================= - -+--------------------------------------------------------------------------------+-----------------------------------------+ -| Automated Installation | Manual Installation | -+================================================================================+=========================================+ -| For automated installation of Ruby according to |foxbms| requirements just | The manual installation | -| run: | of Ruby is | -| | described in | -| .. code-block:: console | :ref:`MANUAL_RUBY_INSTALLATION`. | -| :caption: Running the automated ``ruby-install.bat`` installer script for | | -| Ruby | | -| | | -| C:\Users\vulpes\Documents\foxbms-2>tools\utils\ruby-install.bat | | -| | | -| Add ``--http-proxy=http://user:password@server:port`` (adapted to your | | -| settings) to the installer script if you are behind a proxy. | | -+--------------------------------------------------------------------------------+-----------------------------------------+ - -Installing GCC -============== +Install Ruby and Add Required Gems +================================== + +#. Download the installer version for + `Ruby 3.1.3-x64 without Devkit `_. + +#. Use ``C:\Ruby\Ruby3.1.3-x64`` as installation directory +#. Do **NOT** add Ruby to ``PATH``. +#. Install the required packages, i.e., Gems by running: + + .. code-block:: powershell + + cd path\to\foxbms-2 # cd into the root of the repository + cd tools\vendor\ceedling + C:\Ruby\Ruby3.1.3-x64\bin\bundle install # install the Ruby Gems + +Install GCC +=========== .. note:: - Installing MinWG64 requires 7-Zip to be installed. 7-Zip can be download - from https://7-zip.org/ and should be installed in the default directory. - -+--------------------------------------------------------------------------------+-----------------------------------------+ -| Automated Installation | Manual Installation | -+================================================================================+=========================================+ -| For automated installation of MinGW64 according to |foxbms| requirements | The manual installation | -| just run: | of MinGW64 is | -| | described in | -| .. code-block:: console | :ref:`MANUAL_MINGW64_INSTALLATION`. | -| :caption: Running the automated ``mingw64-install.bat`` installer script | | -| for MinGW64 | | -| | | -| C:\Users\vulpes\Documents\foxbms-2>tools\utils\mingw64-install.bat | | -| | | -+--------------------------------------------------------------------------------+-----------------------------------------+ - -Installing VS Code and Extensions -================================= + Installing MinWG64 requires 7-Zip to be installed. + 7-Zip can be download from https://7-zip.org. + + +#. Download MinGW-W64 version x86_64-posix-seh from + `sourceforge.net `_ + (use this + `7z-archive `_). + +#. Extract the archive. +#. Copy the extracted mingw64 directory to ``C:\mingw64\x86_64-8.1.0-release-posix-seh-rt_v6-rev0``. +#. Verify that GCC is available at ``C:\MinGW64\x86_64-8.1.0-release-posix-seh-rt_v6-rev0\mingw64\bin\gcc.exe``. + +Install Doxygen +=============== + +#. Download Doxygen version 1.11.0 from + `GitHub `_. + (use this + `zip-archive `__). + +#. Extract the archive. +#. Copy the extracted archive to ``C:\Users\\doxygen\1.11.0``. +#. Verify that ``doxygen.exe`` is available at ``C:\Users\\doxygen\1.11.0\doxygen.exe``. + +Install Graphviz +================ + +#. Download GraphViz version 11.0.0 from + `https://graphviz.org/download `_. + (use this + `zip-archive `__). + +#. Extract the archive. +#. Copy the extracted archive to ``C:\Users\\graphviz\11.0.0``. +#. Verify that ``dot.exe`` is available at ``C:\Users\\graphviz\11.0.0\bin\dot.exe``. + +Check Installation +================== + +Check that all required software is installed by running in ``cmd.exe`` or +``PowerShell``. + +- ``cmd.exe``: + + .. code-block:: bat + + fox.bat install --check + +- ``PowerShell``: + + .. code-block:: powershell + + .\fox.ps1 install --check + +(Optional) Install VS Code +========================== |foxbms| supports developing with `Visual Studio Code`_ (hereinafter |code|). #. Download |code| from the project website at `Visual Studio Code`_. -#. Install code: |foxbms| recommends installing |code| with the - ``User Installer``, which does not require elevated rights. -#. *Optional:* Let the installer add code to the PATH variable. -#. Install extensions: To get the best development experience the following - extensions are recommended. |code| will list these among the recommended - extensions after you have run ``waf configure``. - - .. table:: VS Code extensions - :name: vs-code-extensions - :widths: grid - - +------------------------+-------------------------------------+ - | Name | Marketplace Link | - +========================+=====================================+ - | C/C++ | `C/C++ extension`_ | - +------------------------+-------------------------------------+ - | Python | `Python extension`_ | - +------------------------+-------------------------------------+ - | Assembler | `ASM extension`_ | - +------------------------+-------------------------------------+ - | Linker script | `Linker script extension`_ | - +------------------------+-------------------------------------+ - | Code Spell Checker | `Code Spell Checker extension`_ | - +------------------------+-------------------------------------+ - | YAML | `YAML extension`_ | - +------------------------+-------------------------------------+ - | TOML | `TOML extension`_ | - +------------------------+-------------------------------------+ - | Test Explorer | `Test Explorer extension`_ | - +------------------------+-------------------------------------+ - | Test Explorer Ceedling | `Test Explorer Ceedling extension`_ | - +------------------------+-------------------------------------+ - -All required software is now installed. - -.. _conda_env_update: - -***************************** -Development Environment Setup -***************************** - -Open a terminal and navigate into the cloned |foxbms| repository and install -the development environment. The development environment is installed with the -following command: - -.. code-block:: console - :caption: Updating the miniconda environment - :name: updating-the-miniconda-environment - - C:\Users\vulpes\Documents\foxbms-2>tools\utils\conda-update-env.bat - -This scripts creates a development environment inside the miniconda -installation. +#. Install code: |foxbms| recommends installing |code| with the ``User Installer``, which does not require elevated rights. +#. *Optional:* Let the installer add code to the ``PATH`` variable. + +.. _environment_updates: + +Environment Updates +=================== + +Sometimes it might be required to update the build environment. +It that is the case, it is then mentioned in the :ref:`CHANGELOG`. + +To update the build environment the following steps must be done: .. note:: - An update of the |foxbms| development environment needs to be done - - the first time a |foxbms| project is setup on a computer. - - each time a new development environment is released. If that is the case - it is mentioned in the :ref:`CHANGELOG`. + The placeholder ```` must be replaced + with the actual name of the new build environment, which is + then documented in the :ref:`CHANGELOG`. + +1. Create a virtual environment **** by running in ``cmd.exe`` or + ``PowerShell``. + - ``cmd.exe``: + + .. code-block:: bat + + py -m venv %USERPROFILE%\foxbms-envs\ + + - ``PowerShell``: + + .. code-block:: powershell -**OPTIONAL**: Verify the miniconda environment by running the following script: + py -m venv $env:USERPROFILE\foxbms-envs\ -.. code-block:: console - :caption: Verifying the miniconda environment - :name: verifying-the-miniconda-environment +1. Activate the virtual environment by running in ``cmd.exe`` or + ``PowerShell``. - C:\Users\vulpes\Documents\foxbms-2>tools\utils\cmd\run-python-script.bat tests\env\packages_test.py -f tests\env\conda_env_win32.json + - ``cmd.exe``: -**If all the indicated steps have been followed, at this point all the -required dependencies have been installed/updated.** + .. code-block:: bat + + %USERPROFILE%\foxbms-envs\\Scripts\activate.bat + + - ``PowerShell``: + + .. code-block:: powershell + + &"$env:USERPROFILE\foxbms-envs\\Scripts\activate.ps1" + +1. Install the required packages by running: + + .. code-block:: powershell + + cd path\to\foxbms-2 # cd into the root of the repository + python -m pip install -r requirements.txt --no-deps ************************ Debugger toolchain setup @@ -336,23 +333,12 @@ Debugger toolchain setup For the development of an embedded system both a way of downloading the software into the target and debugging the running software in the target is -necessary. Since the setup is highly dependent on the selected toolchain, this +necessary. +Since the setup is highly dependent on the selected toolchain, this manual does not give any details on the installation of such a debugger -toolchain. The manuals of the tool vendors are exhaustive on the topic of +toolchain. +The manuals of the tool vendors are exhaustive on the topic of installation and setup. More details on the selection and usage of debugger toolchains can be found in :ref:`DEBUGGING_THE_APPLICATION`. - -********************************* -Optional: CAN-Driver installation -********************************* - -One way of communicating with the BMS is through the CAN protocol. -The toolchain of |foxbms| is targeted on the usage of CAN interfaces of the -PCAN series by PEAK System. -In order to use these probes, the required driver has to be downloaded from the -`website of the vendor `_. - -When installing, please make sure that the option for "PCAN-Basic API" is -selected, as this is required for the |foxbms| GUI application. diff --git a/docs/getting-started/workspace.rst b/docs/getting-started/workspace.rst index 03e6ee27..dcba7d7a 100644 --- a/docs/getting-started/workspace.rst +++ b/docs/getting-started/workspace.rst @@ -7,17 +7,17 @@ Creating a Workspace ==================== If |code| is available, a ``.vscode`` directory with all needed -configurations is generated when running ``waf configure``. The -generated workspace is properly configured. +configurations is generated when running ``.\fox.ps1 waf configure``. +The generated workspace is properly configured. Launching |code| ---------------- -It is best to use the provided launcher script ``ide.bat`` to open |code| as -then all environment variables are automatically correctly set. +It is best to use the provided launcher script ``.\fox.ps1 ide`` to open +|code| as then all environment variables are automatically correctly set. -If using the launcher scripts is not desired the following steps need to be -taken into account: +If using ``fox.py`` is not desired the following steps need to be taken into +account: #. All required build tools etc. need to be in path and environment variables need to be correctly set. @@ -26,17 +26,14 @@ taken into account: Build Tasks ----------- -Build commands are executed by running ``Build Tasks``. A ``Build Task`` is -executed either selecting ``Terminal->Run Build Task`` from the menu or -pressing :kbd:`Ctrl + Shift + B`. A list of possible build commands is shown -and the desired one can be executed by clicking with the cursor or navigating -with the arrow keys and pressing :kbd:`Enter`. - -Test Explorer -------------- -With the Test Explorer (which is listed among the recommended extensions) -you can directly interact with the :ref:`Ceedling unit tests `. -The Test Explorer is found in the activity bar under ``Test``. +Build commands are executed by running ``Build Tasks``. + +A ``Build Task`` is executed either selecting ``Terminal->Run Build Task`` from +the menu or pressing :kbd:`Ctrl + Shift + B`. + +A list of possible build commands is shown and the desired one can be executed +by clicking with the cursor or navigating with the arrow keys and pressing +:kbd:`Enter`. Hints ----- diff --git a/docs/hardware/connectors.rst b/docs/hardware/connectors.rst index aae15519..98cbf7e7 100644 --- a/docs/hardware/connectors.rst +++ b/docs/hardware/connectors.rst @@ -68,7 +68,7 @@ Convention for Wuerth WR-MJ connector Debug adapters -------------- -The |master| is connected to the debugger through a debug port. +The |foxbms-bms-master| is connected to the debugger through a debug port. On the standard design, a Mictor 38 pin connector is used with the pin numbering described in :ref:`CONVENTION_FOR_MICTOR_CONNECTOR_PIN_NUMBERING`. @@ -81,8 +81,8 @@ from Segger can be used. This is just an example, other manufacturers such as Lauterbach have similar adapters. -On more compact, derived designs of the |master| a connector according to the -compact TI 20 pin connector is used. +On more compact, derived designs of the |foxbms-bms-master| a connector +according to the compact TI 20 pin connector is used. On this connector, only JTAG connections are supported. This connector can be interfaced for example with part number `8.06.06 `_ diff --git a/docs/hardware/design-resources.rst b/docs/hardware/design-resources.rst index d9ff510b..46588f61 100644 --- a/docs/hardware/design-resources.rst +++ b/docs/hardware/design-resources.rst @@ -7,27 +7,25 @@ Design Resources ################ -The hardware design packages for the |bms-master|, the |bms-extension|, the -|bms-interface| and the |bms-slaves| are available from the +The hardware design packages for the +- |foxbms-bms-master|, +- |bms-interface| and the +- |bms-slaves| are available from the |foxbms_repository|. -The packages include: - -* Altium Designer Source Files - - * schematics - * layout - * active bill of materials -* Assembly files - - * BOM in Excel format - * 3D model of PCB in step format - * schematics in PDF format - -* Fabrication files +The packages include: - * PCB manufacturing data in ODB++ format - * PCB layer stack in PDF format +- Altium Designer Source Files + - schematics + - layout + - active bill of materials +- Assembly files + - BOM in Excel format + - 3D model of PCB in step format + - schematics in PDF format +- Fabrication files + - PCB manufacturing data in ODB++ format + - PCB layer stack in PDF format .. note:: diff --git a/docs/hardware/master/ti-tms570lc4357-vx.x.x/ti-tms570lc4357-v1.1.1/ti-tms570lc4357-v1.1.1_pinout.rst b/docs/hardware/master/ti-tms570lc4357-vx.x.x/ti-tms570lc4357-v1.1.1/ti-tms570lc4357-v1.1.1_pinout.rst index 1db6317c..38fd7116 100644 --- a/docs/hardware/master/ti-tms570lc4357-vx.x.x/ti-tms570lc4357-v1.1.1/ti-tms570lc4357-v1.1.1_pinout.rst +++ b/docs/hardware/master/ti-tms570lc4357-vx.x.x/ti-tms570lc4357-v1.1.1/ti-tms570lc4357-v1.1.1_pinout.rst @@ -123,12 +123,12 @@ The pinout and pin usage is described in Extension connector ################### -For the connection to the |bms-extension|, a 120-pole Samtec Edge Rate +For the connection to an optional |bms-extension|, a 120-pole Samtec Edge Rate mezzanine connector (J9002) is used. The pinout and pin usage is described in :numref:`Table %s `. -.. csv-table:: Signal connector to |bms-extension| (J9002) +.. csv-table:: Signal connector to an optional |bms-extension| (J9002) :name: ti-tms570lc4357-v1.1.1_extension :header-rows: 1 :delim: , diff --git a/docs/hardware/slaves/12-ltc-ltc6804-1-vx.x.x/12-ltc-ltc6804-1-v1.x.x.rst b/docs/hardware/slaves/12-ltc-ltc6804-1-vx.x.x/12-ltc-ltc6804-1-v1.x.x.rst index 7c6a28b0..c2c412b8 100644 --- a/docs/hardware/slaves/12-ltc-ltc6804-1-vx.x.x/12-ltc-ltc6804-1-v1.x.x.rst +++ b/docs/hardware/slaves/12-ltc-ltc6804-1-vx.x.x/12-ltc-ltc6804-1-v1.x.x.rst @@ -84,9 +84,9 @@ In case a second |BMS-Slave| must be connected to the daisy chain, the |OUT+| and |OUT-| pins of the first |BMS-Slave| must be connected to the |IN+| and |IN-| pins of the second |BMS-Slave|. --------------------------------------- -Cell Voltage Connector on the |slaves| --------------------------------------- +------------------------------------------ +Cell Voltage Connector on the |bms-slaves| +------------------------------------------ The connector indicated as ``Battery cell connector (16 pin)`` in :numref:`Fig. %s ` has two purposes: @@ -136,9 +136,9 @@ The voltage of 30V is chosen so that every simulated cell voltage lies around 2.5V, which lies in the center of the safe operating area defined by default in the |foxbms| software. ------------------------------------------- -Cell Temperature Connector on the |slaves| ------------------------------------------- +---------------------------------------------- +Cell Temperature Connector on the |bms-slaves| +---------------------------------------------- The connector indicated as ``Temperature sensor connector (24 pin)`` in :numref:`Fig. %s ` is used to connect @@ -185,5 +185,5 @@ If sensors are added, they must be connected between the connector pins corresponding to the sensors 0 to 5, as shown in :numref:`Table %s `. -.. [ltc_data_sheet_6804] LTC6804 data sheet http://cds.linear.com/docs/en/datasheet/680412fb.pdf -.. [ltc_data_sheet_6811] LTC6811 data sheet http://cds.linear.com/docs/en/datasheet/68111f.pdf +.. [ltc_data_sheet_6804] LTC6804 data sheet https://www.analog.com/media/en/technical-documentation/data-sheets/680412fc.pdf +.. [ltc_data_sheet_6811] LTC6811 data sheet https://www.analog.com/media/en/technical-documentation/data-sheets/ltc6811-1-6811-2.pdf diff --git a/docs/index.rst b/docs/index.rst index f1a67847..dc7fa921 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -122,6 +122,7 @@ All sections are listed here: ./getting-started/getting-started.rst ./getting-started/repository-structure.rst ./getting-started/software-installation.rst + ./getting-started/fox_py.rst ./getting-started/workspace.rst ./getting-started/first-steps-on-hardware.rst @@ -143,7 +144,6 @@ All sections are listed here: ./software/how-to/how-to.rst ./software/linker-script/linker-script.rst ./software/architecture/architecture.rst - ./software/api/overview.rst .. _HARDWARE_DOCUMENTATION_OVERVIEW: @@ -171,6 +171,7 @@ All sections are listed here: ./system/system-introduction.rst ./system/system-voltage-and-current-monitoring.rst ./system/precharging.rst + ./system/imd-testing.rst .. _TOOLS_DOCUMENTATION_OVERVIEW: @@ -181,7 +182,6 @@ All sections are listed here: :caption: Tools Documentation ./tools/dbc.rst - ./tools/gui/gui.rst ./tools/waf-tools/waf-tools.rst ./tools/debugger/debug-application.rst ./tools/halcogen/halcogen.rst diff --git a/docs/introduction/bms-overview.rst b/docs/introduction/bms-overview.rst index 155c655c..a4153b6d 100644 --- a/docs/introduction/bms-overview.rst +++ b/docs/introduction/bms-overview.rst @@ -9,45 +9,47 @@ The foxBMS 2 Platform The |foxbms| platform consists of two main elements: -- the |master| and -- the |slave|. +- the |foxbms-bms-master| and +- the |bms-slaves|. -The |master| consists of 3 boards: +The |foxbms-bms-master| consists of 2 boards: - the |bms-master|, -- the |bms-interface| and -- the |bms-extension|. +- the |bms-interface|. -An ARM-based microcontroller (`Cortex-R5`_) is used on the |bms-master|. +Optionally the |foxbms-bms-master| can be extended with the |bms-extension|. -The |bms-master| communicates with the outside world via a CAN bus. +An ARM-based microcontroller (`Cortex-R5`_) is used on the |foxbms-bms-master|. + +The |foxbms-bms-master| communicates with the outside world via a CAN bus. The current flowing through the battery system is measured via a current sensor connected to a CAN bus. -The current sensor is controlled via CAN by the |bms-master| and sends the -resulting measurement via CAN. +The current sensor is controlled via CAN by the |foxbms-bms-master| and sends +the resulting measurement via CAN. -The |slaves| (based on |bms-slaves|) are used for measuring cell voltages and +The |bms-slaves| (based on |bms-slaves|) are used for measuring cell voltages and cell temperatures, as well as for passive balancing in battery modules. -The |slaves| can be connected in series as a daisy-chain. +The |bms-slaves| can be connected in series as a daisy-chain. -In order for the |master| to communicate with the |slaves|, an interface board -(|bms-interface|) is needed. -It implements the physical layer of the communication between the |bms-master| -and the |slaves|. +In order for the |foxbms-bms-master| to communicate with the |bms-slaves|, a +|bms-interface| is needed. +It implements the physical layer of the communication between the +|foxbms-bms-master| and the |bms-slaves|. -Control requests to the |master| are made via CAN messages. +Control requests to the |foxbms-bms-master| are made via CAN messages. They control the externally facing BMS behavior of the system such as opening and closing the contactors. This behavior based on the internal implementation and application dependent. -The |master| monitors the state of the battery system to ensure a safe -operation of the system. +The |foxbms-bms-master| monitors the state of the battery system to ensure a +safe operation of the system. The measurement data and all relevant information of the system is communicated through a CAN interface to a superior control unit. -The |bms-master| also provides an interlock line that is closely monitored. +The |foxbms-bms-master| also provides an interlock line that is closely +monitored. This fast acting interface that can be connected through crucial system -components such as the |master|, emergency stop switch, service disconnect -switches, high voltage connectors and similar devices. +components such as the |foxbms-bms-master|, emergency stop switch, service +disconnect switches, high voltage connectors and similar devices. The interlock line can be opened by any connected device. It is possible to define a system behavior in the case that the interlock line has been opened such as the transition to an application-specific safe-state. @@ -66,16 +68,15 @@ See :numref:`start-high-level`. In case that an application requires more inputs, outputs or specific hardware functions, these can be implemented through a |bms-extension|. This is a specialized board that connects through a set of connectors to -the |bms-master| and can implement application-specific hardware for the -|master|. +the |foxbms-bms-master| and can implement application-specific hardware. This description reflects the current state of |foxbms|. Due to the open nature of the system, many other possibilities can be implemented, like for example: - Use of other types of current sensors (e.g., shunt-based or Hall-effect based) -- No |slave| needs to be used: a direct measurement of the cell voltages and - cell temperatures can be performed by the |master| +- No |bms-slave| needs to be used: a direct measurement of the cell voltages and + cell temperatures can be performed by the |foxbms-bms-master| - A higher number of contactors can be controlled (e.g., up to 9) - etc... diff --git a/docs/introduction/img/bms-components.png b/docs/introduction/img/bms-components.png new file mode 100644 index 0000000000000000000000000000000000000000..3b315c8d639524dbb3762883875f4ad60f788cd8 GIT binary patch literal 34149 zcmeFZ1yogA`#!ohAR(oqf~1Oo0uoB6iinabEiK(hH`@SI1QZ0MQ3RyBYYPI>9U?8= z-LUW6gn;_}?)Sgr#<+LfGsYSFcwB4EIp6ud&s)!&ukK5V;2$SF4nYw9y}P#`LeMer zpJ)x(XyE4tl_(7Sz$_k$+=7zo$j87RFm!K9+=QT1Z`@4{)T20NcNHxlh@cepFRa4! zixvdESig7sri`uXRJY69Gp(UW7a8(0wU;HLZ*JbZbbDvtfTv|oqbj5ex)9-^=wKEu9zOD!q z8C-_VxwWFPh3K)d>0FB$%N6c!i!g6{Vs;CY-Xa^xaECm##X_fzEkQ6t2;#c|VWNI* zpF()3-&r&m3F^1+7#a)e7lDhRj{1cYVBF0vnMcg++Bd zLIn@HTgr%ophq*qISJPYClEM&BcB9%>!x@LF53t(3K}vbOiWI;)ZT#HaCuhII$z*r zFras0{C?}+33$IhK@pte0{T=HoCEfI*i#tlIZ@Ad5ghz5w zl8a+_M7qI^UXK7Zk0)QQk!Yi zb|NV`hh|*Xx~fTu_-Cu!+68%?dWs#9y_vXiQo5~&Y=GR}W+q&~dJLaV`6qexi=x&i zoRXWfW!E{3IzMfp<#U++pdHIj4x3Lj?!0P~VN>v#;=vQ1c+3o(J^RDxYmitd;s>i% zAYDwyRPA=`|J+uzl3F90GoH7m8oJ@RZamV)TB~LU#>rrg6F)M#(dM`-evBGl_fH!E zx(Ok9@r_2QHp3Z&f93>_PPe^x`Az2TLakOCe}RPV2iix*RsWSwxNSLmTM|hb_f($K zWqW42t>@`g+?ln0r(R^B&Q0d6cB0~-?d;x`=`YtpWe)*D3hR)+tK&N7ql#{>xex|j z{TamB@Lr^m(a-H+5y36HDKGkFMfO8@K&I;z_@s-m2iX-Rxm6w8$(y3xVb{D_uqoSe zB|PNssR?=IYR-9&lW~83^tqn>nEe|7ovORA)^Q%9^MH(~Ux5e&O{Lx$0(brL>B z4dDVzwRJ_|8ix9FD1;F$#R)_GCIH~%U7$2N0rwS#vb-Ti0JeQ+bnZcNC*k;LW@*@n z<&*GZ0GSI)c91gVCM0R zt|o-rVs4-;?}f_W3!21IzgK)MBro0Q$2FC@i-!aoISM%rs(FqI&Sy~9Q@z_rE;|Dx zwE?pot_fUUmul|nN~l)6eMso1Dd6!6|DBA=j`eL*2~MRDd2vs!!gAaDpG%Djj=zDW zC%xo6OoulLTx{DZCfS8B2z_0S4U8`|u%W4Mbe>ls;DRfX7yrDl`khtSw96Y63!kueH% ziyND_Sf{Z5ki>8Unie~%;a~+5j<^{(2y~MobHvgw()hj&XG0A29<*+(6TdAfLc_FR zt{iAt`R8+j&YN|iyjHnv80ypxP}0Ih1yZ;v32}8QKk4jRs(A$|?1P8;670ZU^~6O) zDk5$^U*uxw@6hz7f!e`)CX;w(FxZFd2q)+O0!UL_klXisX)9rE5}e&FKYqj}dY*^K zexREf{J=xx5+5;SHuc^jr&2e3Lw)_mUNRBrFRO-Qo`5g-@Iwn{^|TIb9bTT1nYpxj zvzHVb0o0&IIOQ$Hp&6uWSNq?5j+vQ}QLxhE(Ak2Gmhz4tvcM$yaeylku#J@&wG6$+ zj#SMdlK9xzd&L`1YWCm9dT9~FL~=6z26(Eo(@bQHU|I5=z=XLoZrEKl;z z6fF43t2UC^--0;Ou=-jCt|RoY4=ppxd21akbL?Z=P2F&(<%N2|WHC!`=x<#0WbH*~ ztWfZ=C1zGFFzL<%;t6EFGd_2!;n_cC9KmXAY-|qCG-##Y+KO13Xcu!36Z6>a!T-lX z;Fup~V3HEKK$hWb`c1hbVH-UTGy2k`JI``jW3CP}U?~eGr3P8KcD)0NLUw5W_o*R| ztgI}`-eVHG3mj*HR`OQy%zE$qM)jTje|!~ML3Zd%1b7~b;Ew>QZ9qR)V8TFJ1=BN$4 zK2oqy=leV{Iyzd6xzKW|Gt*v4V#mxR6HDFkTI#Oig~R@|;LDdGsx^5kX%`ojPicc=G7hfs&rmA0o+W+#-qhI~6Dq-T2T27``h^DctEyrUi>eoEBuLpQ> z$m7gXRC8}XQa->%T*rITIBGD<&L-0Ca!lTEiLDlF5-STQ@&mLJp;MkUQEfR_cnps@me>(vZrpx z2}4+p%@Np#=Y23#Gw#f&ByR{7Qx(q4&UPpEXxsRFVSlXv`YIJfbslIm{R(0?9MrX7 zT`>E8ukU?uNxy+JyI7FXxupAYr?ztQ&yc3xQFI>s{_aQ_Q@4R6lJgs730C@@MdAd(bpId(B3NcD$wqp{IfBD08+S6in z$*VanePGqB)uHb=H#JW)hh_BMdaapZxK_V@u^g>FD9b z*v7`jlWsi<)}GO|X0oYsiVm(HM}vqN70zdi3UIExW(vncq{_D1=1hlaFrPjRkJL3; z0EG&PLrSAA$uC?l$__#h5O(_UyMLI|fA|UKEl&%eXyQBh+N z&w?MO&|ur~(+Kv4IR10TwBf2)zM`$bRC`09ka35~NHQ zuJqIfb7p5|-WzZl@{_NrUvfP04l;Vr0m)C}v80_p3^WeBr8ee4kdfqCxyd*Itiz0K zM`)ZkIZ5HQ+NoiVQ?8>vZD80#2@~lFvD{R`hj$jt01CJ*Kt|@tv~X zTtxt*;zeeKtwOQ`N27OR{?X0GY z9ZC@ts%PU(2jBYKRmBjy9hrRdK(3gRAo}Y_(deg%&|IbLTjwT35O=k%4^OKEL0zFs zo@ZfPBB@ZwntE_j7%Q4`Wg&36jwg3(=Jh*#Ozp)KvIdjV_1;E@3H2NJs>z+K+W+ z8ajv(YqV4z)LZ^5ynORIP(f`?}MoU_N4 zdeb=)LHap%L9~>OaJSO_+EVF8Y zScmW)uIFFA#W@h{X|m*Sgyv1YfiJQbX;TXZf56MP65YXeyku05~?agsjz z2Gvw5xNcoYY%-Fqwzf7eMEFp43(P^eMnB7KQKLP|&b+BnsQNk{!a0o%8caIDX6VR&q2>D|zfDn{SBKIgH$>fjB{ zEKq#WYl!go_XkO(R50mHhy&Dao?6iI7tTfD7jM*JndF!6yW-ij`r&puHHWWV2DwK9 z`Tv-A`U1B%KQ+HBQhIh_cto$d%4^9H-{-KBLks8B`M-;nwx4f}#e;Q(obW1BdG!rL z-Q~dcjwYjAIEd8j8^O)RshoTkm>moUE(G)`jKJSMOchftOJfR$E#n`+6Uro$&{AYp zqeLpN7Y;{fv5Q4|{^7Pz&k&%S=^r&_(v;oI;!*Nyh#SzUSUy;XBMX=P1w8<7hYNl9 zK>6)1{8>CCO?N>$7YmG(R!91mxJq<3|St#2nd~^Hcz4Ltsfne-;rN;9DCj%#SkktmV}< z2Z-xYk!xS8W;6{%7Ihqjff_!D-#~8o$4b9!vESwFwj`2&n&cY~F)DKUo5%2_+_kuY z(7>cUT)%{u8}$~c6mNWCD9ok9P%pg)akS@m?gd=p)qT0Xyf#KZ*OsSGsuc@tE>*Ux zvSdF(VcK82O51yfdDW zw4V7JT{Qwmkl|ss$NAM8T9-ywKrccG3UjM3j=o=dT!ZWk}vl{)|j#YK#0VH4A zkEF*QxUA$H&p2#vDYEf$m8@-6?JAtS8q;05nNkEqf9qNV>o8slr7q1Z`(2ce?zOX# zs@}rY%;sS}vNw8f)<{3615ni!+z51Dd4PecCDFk;WLDYlmbA)mM<1?{W4jDX(<`xhB|N&wC_-&U`@4MeNYb7K0Q_k_jY$e|!W@Q=pk`Wdx(` zH8CS#!`Bh^Z~fdrt<4wAeM7PjfyioF6~ucx2+&UtRWNN&F2~8I z0xi%58IaG{FApLuuVVCt>HS7&RIdT(EJ6Kxo>RPq4Y0-J2#B2DBA6J>%=jRm2Q67t zbZ+?TqQW*Py_k0AvD?pcs8%&{(udMAK^8L>D2(L&LK;~>Dktvmbz#l%>&*%A@C510Cu z#~c2TV^$VN9i%%#4~Z0GbvWXfeQ?HiKlkBi7P40{UE;|HXetl01%Vd-IH6I`@&>2P zjQxBjaZTdzwZ{JBKcIv(3ls^t%k!r5CUod(LV2^7D>ZhEif}g}W$6u4(^Rw105RQg zjakRzKb7*3<(z`o;`9JlQ|hnP<#)CStApwghWyKR(+=s$pl;Pn1 z1>sN;<`w27v{{fdqbwa8v3)3Y(_AI}to&Cu%9EA&tAW1$m1|2J0tR7J<0^QS23fbs`&M#ZJBVh`;=Dh)x z0^7Mfs|iqU)F~o~tq{9`ip>y{+}7rXG}cumLhfwYmkL{2-Rf@%Kewjpry5Ng-P@ zO*i|mPEmBswWuqF*ZW2lvM?Vi=qwH&WpTFDPKzSxqbixsJ z0diM$Tv}>o{$M>>>v+nxWOnYl^P=xkCv%G7RGwGx&!WUv4cAe9@z5wjLlK#fy14!B zQv;k7rm)k=VA4Y~Ysn5st5BPnu~V-^Qmxgz@mEBC;YTALcCt{MX!i#_-RR+4 zf?XTQhD9tR;k_=%`cB+4F^9woheGm~y#neA^oARTW5G7tP6qJtkTJT(lEaXjJGqJC~SQv3J(>SNum*)zCI>Dnn1eW%JO{o z{%1?e`+~mo%JPC^dBi>48+15N1JrDOo(s>j?pSMyN9;Rxhfh=$Y86ZL`EG+C+#?Gq{7lW9*uh(%2W#2A#){#bQ8~uKi z;sQTfuUDqTQ0Mwg{RcnBUb8t`!eY3F8}wQR)j=0%tVxVn1!U4aazwBkK5T^9T@lqA z!Ec{hYwtTgKw4lTL}MXudPm$qs}-SgZeK=gsP@fNwc0t1zWMV|=>-ZqnDH&lPQTx~ zoqkm*3#3qAmPH(Yc6JUT3~Phf*Bv;q5kr89Bg8X*lGQ!wqpj z{GcqXY}1gYUAs4@+8>NQ;H7QUM zDPApO_TnBz?QenYldZW|(7#mzgvb9B5~@b^&y7NHx&ApaiVXHot^5DX5HTqB&hz+f zi}Da&5tS#+fIwmtBe^~s_1sPE@i?=_o|&~fe!esGpvF(Ro}DeK<)RD6u1VKAUkO;IrGA8{2R zV&$@IE-(eF=JvGlHC>xo;0~dvglvk&p3sUgCYc6&-=xePF zN9N~e+Nf6pShww6afw!J5JN6~OO8fPaUS)@s2YQKuJ(oSZO=A9#Nr#NQUq?iY-B}{ z>}OW-TBDSUYJOzZQTADRpr#Hvr^kw*O{_H1JPw2s=RhnX$n0{)s)~-z@UN-8)tpw? zj9kA%5PNpaLgFdqe*Fo6^j}m0lmY+WL=gIalEno2vt3Bd7z*o6IJH~2&mJS_AV5Zm z<~0FA#Bo+@Ok<661$1MNB&w)w+l__m??I}C_Er`pHG$UwbKp>|6!lC8Ho~2vjpp0% zqT!R>La6^@Jg8)Xx=iyBEu= zge}l2mQOvBzM{Iq5A+~PmWkJ}a4MzSWt5kDkJJKo2o*PB3fIOpDhM04uOj+m!eo>| zN8_iwGHMY^h^OdQU0T6i#m9~B#qROV7 z5-86foFm6Rr@D97JYB=K*#|Ee@I7VRO)@tDD`w2B(mO%AJ&f~rBWCGb?NS5jKLq@d*0|P(+N1!rEn!@0ieLzc-iA zy{-N)m`N#X_Nvk%*~)sP(rB|^-*j$_)8ipfl6OSQbrfR(6$H@f{#EWdFSG^fqXC-{ zf7D=6^&u2nhXy@maIoVVzF(J$yybloxCN@9@xQ}Y0yB2(Ym$CtIx2yK2=F{U)8yfk zKk=I2IJ((5(RUOX>!4_lf)+rv$XCXQ->8RzAx4d*?+f)tUus-K0e6Y%S?eM05=sF8 zg{R%_BqKhe-MhJWg4X68Z`*MMczJ#Ald1e-MRV@iC}88P-3WNnTSI!4Om({kA*sGT z*_^cZi?09%y%T6Z{Q+eqdliIKPO&7F_6s5-y2@;Zqu*R8S(Zd3u2W9Al&(7`Cf`5p zC%;rYS3Klrwb+W>`1Y!IYc?m@i`=2Q$=!K-d&8xTScCfne1{rlgxS}1D6QnssRZsI zMDWS9JMAVRH;*?(vh-TD?|Y-f_x-fwHyzGZ63&f9s;cF(=H`^GwfV zAMB;ur+LMySXa&wAuBZ0>{+dEOFno%w60!V7+$>OuwG>e3?ERORG6MEJz;w0+OwBL zMQz{x2O2pO<&B9)l%3=#NPC2{X-A;-nc0CIZ* ztmG0u(B<4Ax#WZZhH$(Q>Fd}2Z;n$?-M|#C^I&^Q((l*e_0iPouv++*VR8 z$_q3Uf4r+0P-D`*4vp-lzQXIu(&|azTc~<{?7(r-kS}c3MBjxUqz|qUjm+n&y{1>9 za9&8KDqPgbZg&Owd>XNLS@E5TQGH^nr5_fV+rwzhdP{g_oj^&+e{{&-FFz0ci~&@> z=+_K-W}limB+e7N*7yiI4;BlujU{!w;}m|NeR;(6#qUqW%MgDB1g$f&|KU~YiXQWC z2{D@P-KT~9J`!v+d6d?L_s?De_V~8YmT{Z?(KPdpP-X3oY2)qbT3pUEOgehcZVdBx zNXA^d>a2d3t?X1ylh>cBq)P=C*xh^a#DNksQ+l{~wmmhxPmuuQRMQ6<+y~=)!@Gz< zpz6vX_C!ll?dCa<1@Bbv=#wJ8z7o~se5yPsDCWHK)rE?0EI$=}=acBP$i8^wYV!K) zOi)t&uF7{7X?`Ub#>D0iTuh<&~m@K_=h-FcZ;ZOm`%ci zKYf{(L6WtBOgpLQaU%6^A%7{(jnMD9EG-FadI-mHS-JT`6jxema>SdPP?i*mqj5&Q zq3?E7YVZxF`EZ&F@ojhNWMpy&3x-8r`iwT znehD-KcaB1;UkJo826v%rma^_ka-1Y6L%LV>EZvtNL_8$yBF>0uRl4BXO4H{7bI{06{ zZNz{wU~Qy{Rp zfT1qLaTBF=R;m~bHX0D90XxALb1CJAfrbB}C@0`osw&KLZ~+4;4d*cszi2Ub8%~AZ z$l2lhs25xR%c)jJ5l}fkLwQ3>~b7B8AD-jXgO`Q`u1tAz#hW?yOlEc9tV82-q-x1 zMP=_iotj4Ml>_(Pz=3JrgrYA~RrfQ2+S+&8mt}&lsmV4z*DvKDZU$rc^OUm{&)K}q%^GbtkjgQYOa0Ye`&m_6Tw66 z16A?V!Jwxl6~y+t#9VpoAA2#}YJygF;g8KIlI8uTvzD1NzLcVz`q-6EsMPLr0;ra7 zpqWJ;Eca2bZDtAgAL=%wv?b`=*)N3Y*83y)S8|!`j2rM7fGIf=?jo?+I`X9T@;_$L z#;KZU=Jki@WSHHCikvpw@X6XxRldlZJG&FFg=)wD_;QC)wLsx_$6^=rCdiWIxJ3Tg ztT^J*CX7B((@WE%qYaI1$!ctL$$%{~o$0V*lAE8)4#<2Pz7iXNf}U?NB3bxx1CZ*P z8!H`|P?WwNG~-T}tqCT@ z=wC~D8Ft(&>h{SnCw4(Psn#Iaxh?Lv<>Q_m*U}K1YYQT8NHi!f=MA?&#NGZ9#)P893?{Uq~ z`BPvCat8A~CvDY)IBG;|d@|)pj`xN$RtHNVgQ&JwD+H^AUT78(>%ygl!#{Gc-&$Ap zW>}y-XA1~9*B2T(JLwIZm(C*k9Y0WCk0k}LQ3hZ`{$FPIT|+Ho^+`woymIPW>I_eGGBP9}v%+_Zp5k0U2_IB>p~IpSasX z2=FZuK8v2y>AxqV$VJMPkBew5^I^@*KXWHgmtC_QFa5J(C18O1cq;$`_^!>oU(EG_ zytzXNEiBbV`R@kPdwqTNd2f5;(%ALwim9>4Pm21HaA%0 zbzLfUMh(PH%6>MgypdC6}bA{jcULX}ssQBg4IFODr^xF>|>u`#&P$E_h*QP(RVNtj6S@fSvWXAu;a#pWvO>L zjwq85^3LgmifH}w^w~=!~k0%rr1VkU753> zV!a&U5Ld5ZcJUR6tbzNcS3)iQceoMmi=tE#GN2{ZZ3PW{rxhXOUwm8e&5eNK5ih1# z_(awU33_q}Nyy!S*4LnI7+VEMenJNUp~w?0Uuq(_Cn>7}%E0-{5e#%-D{M0_5@V>x zrCCkYuREzPehg}TG8)Y=!`-s|b%8KbEL3o#L4qpxQ?v)3|=OMd$y1;I++kKI2{@6NT8Xn zjH2>lorYzbI&)a5uRMKL_BdtV>>i*4i!XTe?$7uzH%{S{YR|Tw5zG+00%Irv!z7XQ zXcCMFwIKR#pGubdE2gPq5HBGp#!?W$eBIvEG(TU>EEXQ@Iep!I;evrW5V<@9O5{f( zrV(Li`NgZEel9k$Zr!7wmQ9S_`rI2+)M7eYA^NDaVu@E*CqV3BK-xhBZ6OOtPP_$- zXGJ);MRy6B7j`CzS7845_ki@W#I+MPEpzsl<;~}1G^L8f4{i8RUSCoh=yW$}9=FkT ziY$94;q@5CbORiD*_!ptV6E=wG2yKZ_(@=g1ZZvLw) z%x}8KGovHe6Sc1O- zeakZ0h{B71Z$K5OFytSSc`YfIZc{Uv8j4*|5+0B(NG}-d zp&1xHMf{(ZgN?906lMo&KQs9m6g6+b28p3Yj`v0EX9j=lm={RGt{%1>@CG1sn$}^8 z0cUm+u;1Kw@aN4_c}alca|Xgp*a#W!aa^h8d}oyc9V<)4=y90Bc1Q=+Wf~V-%X3PH zmmwOqgfC>es9U|CBIq~%Nii)02tfCoh^8X`OfE=mT4O2EXN4Emw`vI|{rHrPQz7N( z!*V=IHuYv+p2n}oRASoA4iZhOL3eC%DZKn1rcR%q@7C8>^S^d+XdIj`P`IT($>iFW z5kC6M+8qjU+XM4z?OUd+Oruu_8Lzn$D@cf_(xh$xf`285{1HFg}Uvh7Zsb{<2%KsoIs(tAw!U4b3MEvbb zRIS)No~hk0DU}3RD!rxIr%!trN$yuI8xaXx?F?TcLndyD$&m@%j)Z-Pzk#)vG&AHq zrdmvV>Y=^{06p8j$H1j6`vKtM(ht1|P(=de+gOggB{X*b$rt7Xe zia&WkZ!V2lbdTqD=2^uTeP37r4C?XD1puEhJ0+K0l=?$we=j01zJk(0Ty1deoz=fy z5}|N8f4qGB`H0PbR-8lM(t}h})W44RJOXr}Bv)uM{Ll>Iq-6;a+Vlt7d-->gD2#6A zpUqV5WOWro9eEm+;G+P%0=DYopr*DmUZ-%?VVn?m``1coQ7UUzO00L!9MV;+>T#-) z^u%axvhz%(;D`Lp3J=pz^9{ESH1waUzOq~6OWo`9o%!<4+r!LRv;he!!hD?L_fNtX z7!IaD-iD$Y#mNpzMhpOTE&W z=Tr0dL?1%K-YC1V;SRJ)gRN{y6&@BVyMX+=2HklJDus#hwJse*Drpr}Te)W*G(`n; zZRE)$6rurgeDVR{r%U@-XGwrzH9qlytODR9!L@tsNMLrM_nI z*d^lqW`Co$(V>dh*{Z>xfNAG;b-1>^(ch0^VvY2Y%iZu`{#!-Zi0_~*sEEmHGtD=Z z(QK(jWjR+yoUB^-DB$I)AaVrxJrNMp*BzeQ%xI!)lm;L1uy@l{r=)}IRcZcR77oEn z^`}G(mn?X-0+&7WOZtfM12yJ1M=6kM9UT)@E4gQ6z$+s2?04l3Avo?C+(Rr>q4loG zlk>vR9qVKGb=O#MvH%-kJU)5*ai5PE6YH-{cfrk%OqTa;U^#X9E381(J?1g{rmtx% zG9l*%l;%r^1t;%0%XG9{$u?!dtrmSKPm+|l9NWpm&^w}Ip#Iaa>9Qd~a-vmpRj+ln zq~dB@xTQ05PMm*N)KV``6itEE=89@SesIfGE!bMC%y?P$r3=ABwQ+e97wrVnKCDq; zC=P$rwfP&X zdu~sohk6Fz@u;Hq*Wr&NNI;P}w=#37zPHNBSAN0ApXFtiX;)MtPHKf8Ur1ic=F`ea zV-p|tyTakdnz|owj<`(TGx>wEj1%+c)O&%8zyJNr-W<=fe~spN4bGq09PF=8T1mW6 z*(v!&CUf6cjuWcg=TyqychTDfC`sh_*`Do67VF^Ms6&$JaNG;7v~0gWw9!?v@}PM2 zXLhM{CLw?Ph^Zz&(e{N?%E199{4d^D0QdpY(gJGp1(3V`V&=#zigl` z6S9ih3)wTlnYd|e+oRBSj!C~N!##lMdc0paIGiO^Kej>~{<2*pX*5l|6+LB>J5}($ z==SXBwXCXxs+-{%=dlO#;>o$O#>z6u^yVAjihvt%JP-V#kV}dtn=21bJz~@n zMO-hY?JX^sZVhc>LI$Zx3q{AydN$li)-*d=e^qh*TTMytX4%KqAouOoiTqOk={ReM zAlza;^yhp|nse?I$Ij@Q`HO41!^+_BP&_#{Li_T<*S=BL2$eHOCqw&{Hu*8T)B55d zo$W+1w%mC41_|)-!glB>7jVBl(*sipl<{{IOHpLRGtU%?W~3^rZhzZKTi?}|^ejv% zP0KYcg-^NTRM=U`Ew$%*tptdE`^ViTRhv)AT#%9(jf}_v(_YC!u`qzZ&r~K^qM3R?%gV4x9;#uGeHgF1Jt|6VbL@CP0 z2B*IFPH&K5k2ASM*wPE}djwUJI*<|N!A!TdZF@DUp!z;Idf1pJ-K&FATO z4}tuxr#gwG_#U{~PsYC)cf_^)Z7YS?{_kIu&YDZ;iU@oUD)7+Ku~>^j+Rj~VzPQ4! z&$1rf#Um8m5_8t{_^*}m5jJP{7-P*(h71F_oE-HZ7R~H@`W=r@#Gxh|2<=V_HZ{rm;H9GH40T2gsTl` zez;9Nq#d}EPa{_=#_2v%Pm^}XG>!sZnth|9)9}5bk|&+CJm_|u%|9`M>KIU!rDRC0 zch&T-U4*FfpJD2r1Hqps%C^QK@;eoy`L4k6SH1{Fri@5?a0VWG+}qYX0g>Z|v(p22 z(dHi{?0|=OIG<6=`-#R}WJBz6yg4%AsQdyW07(DX)*X6xgbdze&7lKJ!#$ ze3;jv6lr<4kUg_zo?jr4ay;S6)*WXi)sgz?Kk@Rl%1aAW3#VQKl`+{}C|;Nj^WPvY zH_4R469Y|)+UWX2ert4v1jhm=UdnNR=#(K%t*TY4?EJ)NBi8nWvcKbaY|LVvRhLS@ zgvVY);3HTYqz?aq)9TxTh50u80^S_F zr4#bT9VuTO^OG^UkxRwf0s3s?xejV&ASt^n2C0IGIi*Jbq0nQ6N$Q+#SMgYu%-5rt zvEnpB(YJ3mUsTr*{%VY^~aUok>^ChSf3raQlnsp+FNrM32u4Nsb% zkt0QkvZ-Ky1ub~jNRNN<$ zsJ5ZvWna@sVn+^BXRoXTa5QpQqxuhn16^xiZ6NR#D>B~7uA3!~yn>?%!g>2i=`@W> zi8S$XI+-CR9pl*WNxzC~6W*={xd9lr^aJqp>mo$yB{660=~qT*X{yEYzg3rcoBFXC z)=`E#jUfHXJ7g2Yf31XVK3`)P>^H!$O@FlJt6iJcsbwnWv1U=D_~g~Vyv4j$+I!1@ zuG0?JTv2)KJ~E}>PX))bu`33WZa+p#5!~<69Yo?FPkG(MGro%6F67mURX_6|4d_-G zX#Pkd%X?e)ST>_(%E=^OXX#>PAjD0r={B7iotoij60k<>V2&p_4p1IyiP4~<3EtBM~|+ek;( zU|;cRbt44c6cc6Q-j5YJ_xrLaYdACtas9-~n9?t+A$}Eq{mYQjmpey-s(q07k6+l! zNv$u`RqpgVcT{nwbNpsn9`X(X@J;;_DhcB)@w(X3YS zM0=T`oJfE+xX(bF2p2Iw@@@OZm9^5y>JIwf=-DbnN{C0h!x@MFkHeWT*xv$IHGw)vm(k*1 z8u;a2^@c=&plbVeLiIIJNcfjvve|bLrsgEzcTj=4P~-^1Ik;)@)-pBOh3aZ>CzZgF zEs|XV<*I#yvXE^we4Jaz!?p{(%ekVMeLWXYVI3fu?3blLt#gU%3q9~j+jQ@vJ6yST zw^V+T_bDj*kt!jacb9tdFUj&)ZSn9E#Jw(FySWL9t^4rvBetU~yjyjNe%C0hE)UX^ z!kH`8LCY@hELw`oVI`Dt8W*#_EaN;<^G0y(+L^uhAl&u%-Vw1~+#;77X0RXTV8&4I z{ar}`wv`ELz34yYpN~+jzA)xCT+O)_zQO+6LO(t>b(kg~{yGoJhbBwPplNvM6dB@Z zCFwGi$G-2qbrOD(+9^qi-;|8gL^(zMrUm6AB_)~%6ZW{Mmj*ED;yiZCPX{mkw#B2R zO~B>Y*Spg@JHVf`c%(N0h#UJ`wHv1VT~p3V+EOegd?O%}&O^{`ImGYYDQLU>(K>cP zmnv_JTHZ4Eo-@AbZWF2`SZhclpHHuYiAL&5L2TE)Bt}xsfrWi?oXO?#fYSRTKp&?DV;Qi%e4Z@X@s$ z+cmNEW}U5i_4U=IJ+v`83BP`Ne|tkw9UO0JwBYQm?b_~qaP`J9i}+k|%hmXyU0f9U zs(G|MfNBBluSfSIW_@T^uBOrl)7s=zX8uR3-;Z19a2ciU>f2II)BpH#%^wHZb~=Tr zMXa-yoGtDwT<8WsCTKW?XEc-nUKqkBf?v%F2&TrL(iB9Wh`{anE6WO}*! z;@NgXgi8=oV2Ou@P9@PUUB90%U>^tsYUHL6kP2dv_#-0 zsG$v1c{dN$uWQz95_kbN``j5GfjA+xqg~8HeO3sTfqiFPQcLIn^96lgaah71jSXUOJl_)Z-^hTX500&AI3~l(oxcjR< z0teLAkQvJ0pun#9un~6$MvtMoDDS<2x#q6)A{XeGHo&#C=BHL~pf0E#3(s5j6fB4W zSDEy5W{!ZvW!qU6@suimp6uJ*T+jyaQr)A)P2Q^NE0b3f+HQCwJZmovzg+gwUQ7QXXKWkA+t<~PA`gj0VBCbUie#&-iv?> ze8C}23%!MwU%KLa%VLzF`2NKTP@&PG(eF8)Xi6Q1oWo z_@Y*vqp?ISYJR#$@E&%-X5P=b)s{@aNu^b)kfh+B&4|{- z3MRca9|unG_^pvK2lr&nhEbXHq)9lyk_s~o>o;8+T&_FT(TaJ9MzgTj%Sze&O+}PPZqgr%Nlr7%T_D zEgR?b%|oWIe-N#g`&CF z7Y$Uezjm!Sda#e)3s@E!3yQbQjhsGH;b>yF%MfmP&@RBY=AXZG2G{%Kk>h$hs*j;Q zcoC^MFVAd5;#?;9ZFiVZp1CAh(k_op-AWV^xC?F_OL`90 zo!HD=(4VN{u=pQG`SeyXZK{qcgk|k(2kQ=-y9fE^#F2B1(q-V&x1l>s#{+44!QriU z0ZwbP!Qq}1cG9PZvQQLms@z2})G1=8#1e2y=Et9KJRYW_3Aq1gO5D@RB~QohTVLpZqJ@C3F!Na`HoA61Zc&;{#1`_CO<{n)w2b zeDX_*_uyE9C56>gX(@8ul$cR9Hu(;8L+vvPVZeRr{yLS})>CWq?Z~A?TvINq0TmIo ztzz#FOO}%?p`X4Ki~}he2W`(h4=%PS7fz?`HD4LN`g73=8yby7!918<`8eYh*42KI zpUJ@sq3<+JUpal*c@r?f&02}4ZOvL;=B-4aJ{*)|*}cmbg1&J4$3ICWDyHjnvUU22=y9S369JC1+#dn1jF2KmJHF5&EroyX+GlWBoM(Q0 ziFa+#*JXPle49lNFX*81_mYu%yS?2`OTGAaa@%dcj4o#J01W7jCbP{GD;qWpcs|0>OTW3Nme z`TaNjrS22=#YkAx;Y=?u^$GXyJBK!}nGfFO7nh`-QwTtR&1yTVPGO7#Xu<8S4dX{`ylTNpqt=i~XYBAERl5i!WjW&YuD|e_rf;@#0hA=6p3> zxMP}EF7`QRz`@EvjZOD^>;h^Wt?zFyh)~*nrewwf>%3Itj%n>Uq15Y>6Hm>2z8G9j zEN^<}R|eJoUFVQMC%7^LoEgKyBRTJ04dzM3X+qw613fqloW*a96bVLfIIf!2ZRu#) zH|?LvhTsOMcxvxL=A(a_Z2?4za&VQ0{o*JtbAef<4-L49p_vSl@!ZpTa8EhhhKHBe zosi18hP7fxFGMJ;TJF(>E&^WD#Hkx!!R-nQo~DkPmVMP~+w)!&yo;ENuZw(sPulqh zxEwe|qjV9d#|0rba7j!`Uu;a6&)2hC0^`0?0)ZZHbw6&A?9Xtv8nvJJl&nOw;tjj1 zK)n?FMGDA=Nw~+b^VM%@wF zD<-Vdk>xI5XOYZ>(fo%7dx1l=$iiJa+8AlY9YMmrjq8SV8Dl@Z_o&t5o%;k7G}LzB zl@$Nd`~UE*x_Y4CM3P)L3H=F4xy<^SqQrpVurL>I&R5cfCzLV`fO}LN!G(ra7ufFd zvhH7|-4{v0Yc2kPMFRncndfwY^XyN4mCw;2Qihd!*Zse#__pD#S%JHE?5~r?9Eb^0 z|7lUr4>nGZsKbqrsxG(pjkpx)-UTxdbl*70>GuvC{ZrT@Ko8FWmv(zoI`z8}GbyHN z0mZdPhsQM@=*g_4uI|Wef2lY3FbOJ5nfVgw1uW4whv00&51@pcMRT5wPnliTs(Gy^ z8^{_M)$m^?e$PL>GS577KlkCf zulv5Q>;1t70uZe$mNh5&%~`m#7RDCa928PIUghTp-SZwZ+%nu0H8I*se5Yxeo^1tK ze`N&<{KcvZnl_MU&cS-h^Px2h#wTK`Zwq~TbMJ+k?kTb><9@dP^(pDmZ@qS^qZ9hc z1Oot80}Q}=Y&eT5=mt)lX`HY-W#Fm$sd=tFd-e?aZQIYs&0u7|Ha60Vnf_V#`upLX z&Pf=So^3u0=+~?hZ}-{=C=>yT(F=M&M@oQt??VYWpV4EO;V|Txse`~Ogx-#sCmEFw z-LHJWN_)*xO&G4q%v*7+`sT)M-oQ3UYWV4~llCX`focYUjT0!V^+NCtm^WJ2rezgZ z{5WbT2z?*M8^Qn1|LAcv9RHg*enCLxBYLc*4 zO^0OYfvwOf1PA1Pk>Ds#Dq0}T9Rzo2Qbh*+e{nHsoat+qdUT4eN?OF`w*}WkrM)lQ z${%{zih)gFL6$!JIQg{W+XBd|KRZ6A;1ARl`<&Z#L%{{l!sfp`lx?Oyc=Lx%l4eun zRyYn02>u{zOt0if_LxuPv9f_B5-Y{RUwGAtNCZ1YlxB8dkeaMJ9;FXUPP=#hlpi_b z7MAH;kw^bJO%f9R$8TG8WqB6(VY6P3U%HEs~FGz$cl!JL%=UmjPufYn|KO@YeesjJ)FHk1fiioQ z%UeSQv~)RH>2xwbvku8j5n5p(e#8}m;K)KaRN$#3Aaxyn*c21C{)qZ2NOTJLiV74V zqFT$pSft%25T=N(NZ5AnDVg4 zcwlap>Sf>kVxd?_!)g`OK`p#s{}wbJOwA&=Yyl(#x$|Q8N;LMyrj}OZ`)O_ul)r?f zQ%inHm-Fmg`<2RMa4N4?)slOFif~ge2e>()rVv|p09_TTj14ywo)kL)5^Z*LCLBdT zKq;Q7$NnWyNC|D%F5iJw-l&7>3-raDL~X6GceMXN%( zH`E|7T4xB)Z|i>V1ZZ@KGVQ<;Y&jl2b+ISfLVbJd;iiFDLDo~<^KNf<6xO@$5IPS* zC$sEVL7{nAIXW3I2iF29t`iF>67&@bvL55tMgEhWLJP!lfJYFInZfk!gs{T^iWAE7 z4j;GOlpRo)YRXQ1#gDd2T1c+`c;g<4XX{-d#XUqfjASl5P%5GBE}4W;B5+DaSUC-q zvD9k55ev@{gAT<=&i>QAzOiknQy=IfVnRUqC}x{dYV+s8p#2Qlp?d}jo+QwIswr@pWb z>2an(+ARO4nyi-9!Rqfytr)aq&@d@#UKG3+hpoW8DV=Ws!rs&2(VtkuXtLrn+Q6GJ z;h#~!qQ*Ye{R+n1w00i8f=h8GP7&DLXFG#6C4(6^V6l1bRKzyZ1oI^&rBvBf9otb- zAgWWq(s4PSIA+r^eXE`&p9TZ&ryoDJFxW>PF@8#FmdnP2jl&}?@j_t}z_$M7OQ|8i}Zw;ajIT zTvxaHuGc#B#MI+PHqgrenTQg7xulpWH7gURe^Y`+fmkBz<1GJrwi72l=OcEfx7K{@UZc!F_WZ zHD20=lME&QNzsE&1{yO*G+-t9cA|x%^4V6yuDVngkB^M9M+qh>8q2@CoT05?<%s4t zE(-3LXiEGHH4h|1m8E0IX|W0NN_OH?exqCdFw>>_oW5neZPVOB?=qRghW>sUrh8+~ z`SvXTT}ehHynY6&?T5mU7xl9lMd_hy_xo9tC)gK-tS!__5U1~O6El0WQ0*elIx$_4 z>|{RIx^Jq(-;0nj9BrqU=Z7DY?c`LP6Hi^+wp^rrkI&+he{T36CfMR9YQXq!7O7)}Ik1T@ZrciVM=oASv)10O~8-Ahao4sp?8{?p&L4B4C_jRi5JYSbysBk0B|d4dAyJSTY5W*vgT)cS=U<92bq^7~iHU{8PPWpKSEJ6mMz#mP z+7n_#tSW0BvVyyzIFtfEryFtGI zGP^#}Z>hY_I5oMD2S@@PNhT?iR3lgq*x}~ZgOJb;k290^1?QBf6Nf~9k>^hr#EHqU z=r2*YX2&AGhPDz6jvRG`Es5CD(xQL&^3_KHQXTV7ay1UIdzGLcogOl6<>c=hkUc;6 zIi6L)s)NtT1G-hd&lUH6~aZf)Q+ zMJ|HM^hQCaOEYJxoM{dQRyE`&tNoslVNz|yl{Mn7KkdFDxp!10N66mkwEUXj{O~AMkq%ztofXqa6!tIqgWu@osdo1dRCB1+j{uYDBk(r4QZIXs8hV> z28eJ%>JZMZk>p9{iYE)>&8wQ%GxK=heXv`S^ccS2P`)C`%w(1GFGu?XDcrmdzA^Bx zZ3!qCAr;v5B)I2OcP@0etn!{`Ii8kXb_;SUr`q&bMyMxo`#^J{K!^`Y#d*x_Ey zdIteNj1-X=|Re;pzEmFP~>L3u=R zRC;-1`)VI!KDVA;@b?k~Oj0ZO{g78&E|WrtUgdi!=o)I0T1#MEO&l3_kmh9g>36b= z(Z>Qyls7i`GT8Z?(i&J9SF_<@oXv2Zzn2w2qG110y9Fm{1t0m=FiaB^WHVa(&LsH< z_ykN$-tx117`kt{=o-$}q&oBwf5+4Hd6n5Y(0k0L_bqifV~V3Tu= zDxZ^xS>hQpD5-Fq1-lg+T5o_wotKf6iMSd+*l%6Chi%wM(N~}2;4iuRTlnSM)J;6! zy)#(ngA-JDGT&9+;G30Ad=eutohYK@PV;2FG2h~s-V>lwWt2B~ zCcDyl<>t}K<9tm9-CF1`!XWv~4Ol?hnM}yLOIfkdE#`bTiO?JA@o3aP;;63nYkf2* zGsPXj5h0O~^$ZqcqE^{c5W>&j){>kdIfY`t7)yx2_dN$wwau1*;#~(V_X*OCK3dsHT z=70gj232E-Ozd~9at5s-UhCD#BbDlH*8%!J-Z|j0NX?~;6RgMi^-Z70w&xwY(bvDS zz0)!f5GUu8o8RiYV#23s{d&s-V+_D1hkPh@NVKy`bNLt+Dm-l%9A^U82M%(CM_JL0 zV&mYbwY@cKJWi;Yk2fq)R+bwdaQ!gG5`QP0)!)N-2Vsk8Pz(89T@E5Yo_?NeSC=yK zv-}p|_}l1v*EyCam*QHY6OJz~&vhSm&5Y>1b=W^b``s@_hFvcm#veb8%~ZbE>W>|? z*wPOlefMJhMATI~*ZR@6$L*f3aIWGwQIHE<%DdyWr_b}=6`_}e&>HM)2i3${C`TLo zp_8+YdzgxtYQ=|$On8LuIGGZ;^$4XHq+1f1^N8*eT1mviBjj9>FrP@EN0hJw8AST| z|E;1?l-5-w%{eGVM&%H@!G8A}=*6SS8H8Q^3iOj}(P9yhi^r;2dUmwU9Q190(k!S> z&)Mh8RAwR&S|ua6?qQ0XaJl<}ZHB8y0FDmeV$A@$FI-Gvu;g&jr9gE9yViil3-+(< dkk3T-gpfeY?UJ&-3N`FcJ9ijvPufa3^Ir%lXY2p~ literal 0 HcmV?d00001 diff --git a/docs/introduction/img/bms-components.pptx b/docs/introduction/img/bms-components.pptx new file mode 100644 index 0000000000000000000000000000000000000000..34a076e26bf5ea57a1109a84dcc0272ca2031355 GIT binary patch literal 54037 zcmeEtW0WrKl4aSpZQDL&pR!$b%C>FWwr$(CPua#PPkrC*p1Iw9*Xlp>YkKlWzAN7+ zbFIu+5j%G5h(}%u7z70X3;+TE0DusHXy?hG6A%EP8U_FW82|!E^M{SKqp`K4u9BOr zv4b|9tCb}|J_ry+E&$N?{r~^?A8diilnq%RMugyN8P5Cp0~W7t z0jg9hV6muA1=_VxMm;Fa3^)sW5>*uA6m&HQIc}C#cnt!F%7W?C-F#moBQ$|ydVO{9jt;ft3m^B{e zZ9r)#U5+*fMssqrZe1%Y6kNK#$3Q}jQAiA&Fe&@P2%|WB*cs-;pt5^_+yK|IdY9{L zT2FeNm1@E=@_SV@)~sFB%p>w~EUE=DlG776NKd~rs`s}#;E>Cg$f#AbiqSQY&X!Vd zUx!Zpw%IdpeHm8U8XgVU$XZy?vu@fM9#fXbsN-+Kg`yB?SopMR9wT%2QO8R{#i}#n zMW3t#iWwUnPhIRkyaVrM8D-R1QN0}9FMOIx!slHX!51GH0tyNlM?Tn>HsAjG^#u$d z{~v%@9koxb{V!Pu2P zwH<0#Ykag80;U3X4lp?=xJ3O0EuG37Q(?LvZncaNLbvLDy*Sr}lkNl|ZBTKZr;dc2 z2lmokk)=De&$LHjvfm1BXdOU@0c^-|7FZz)3JiXe8OnA*x@^4>N}d*SpStT|2>WXzmw+o1OKy+$^=2#0R{w-XYtLxbY44!T%l4~c8D@) z5|G~jWN9R5(N=EKge@cHc_hlHPH~4{Pw#H&b*ksrvJJHE3d<0q@hBMS^D5&kK-=LX z72J9#g=K}!V4x4;wbS(UD)gnsp(2Y^Vl>4VNVCDaSDYpFL$V46xaqD6nmc0%MK-Mo zhar}+^z)8m9}K{EKgl+ffZmJS!BigLX2zPGsw6#Y4}XP_Wt#S7iMck%t#n$O-spHoSBx+ zzR}@T_km3y5KcrXo@_8GT5jM+05^5@+5NTZ^L09tWBscjMx-sB?#O0()a8$*(jcM|U?n z@9y+Xl$QM^mk49Vkn3u+!%J6K{E74X3Hx_!o=0bAS;pk!mi^OrO9!8|!_T3mB}aw8 zp@RV{M%@*7%7`^rSX$jJ>6D5ivk5vm&Ez2{JjE@q5{aDw`i#yj?W3NGLwe(%2L&%9 z_~VBghjPY`k3L@SWjHeQc|Fsj_qVi;6KgL=5mUxXBQGOoyPnri=SQ}lx2NTuQ$D|2 zqWHQv1E#-tzdW*MP;-_GB)shFdAZwOHvBBe*>8K7j;ElfU3A(xd2S0ZEWDTC4?_;^ zH4=wB2T#_DfBI-wWgK}?l-NvvrXe{Ikwqin5JuyQ(b)$e8FMKl@fhFfzE~5{lNtYX zdeL1k`*G0qyFE*Ge8}9c>C?Ktbt}??*-NhwVn;fAbJfRS2q$`yc$`s8g*ptP8S4cB z=_r_c;HHPI3((5?Q>ACm^S&X+@S-#}J=I*k6eZl&%LSwCCla+HJUk*0Gv!loqM5$^ z@v)fvGzQsQ!2}AT==jtR7-Xz_Wa6%MnEMaL zRX!AGEd`!8N0nLvJp#`In-9;AhbFPZDPLY}?d@5BGu}8eq8f2$NynE>#~Wft z*s2k04@@$@8qR*WeN4}cBW^-=`WC^$a$aaTZ@+8&>G58p&*R>AV5S_f-;wEl%LzS*JVi4oO>XJT)*b{Z9A)8BH3d-y}23~ z9hA1c6dyZZ(AyAx~0@V|K{hET>h`6>F@wnTvY_}vxi4i*#v3slb1xxX10Mj9TLb%+yicd$k_lxf9K&D`Kzd)08X6N&DpxC&BcO)9tXlnx1b;YIUb~iK7c^}wD(;r3f44o~r?mcAJ{;9$V2&#Y0f#0v^*g(Wx zQqoz6w{RUjT6@IJDiU`xb`uYtrTHP6vS6>h2KMX}*l~BgBLrQkkMY-R9t>QtTCQ6WMEJ4-f_@?aRwe|EJJ88#Xmqm;(^6l^x;yfV zh}%<3xyXIe=0~yjvh4E}kj3!>U9;#RQG_t$vVAs80X4zWS83(0=YvJTM3X0!sDgZFX{*2nF%GW*aUrfGVy^PQC0z!w9!KOw)i(NcaDs592Ylsi|C zEU2eYQy0AoUUmfpd#SNr=W2h=mA^Dwz?UAm$+9orGK7SNa0ovn{RoU+R>O`R%H;$j z#I#3a(K`Ze9%LldR?Qg^gqy?8H|6=M2}QV8Gq)NzGeyL`Nyw?Ju*gR@#i6$5k*|qp z7P>AULZlT2Zh2AiGvuhy{R;97AR0L;nM;0zT?qGq@T`=(+GmlF7J>`zRg__skV;#a z&*CJ$?SLc!g(hc2QEbUD2~c~gk2V28=!Q=BA|cETj|s6eL9~8?Dig79Nl?R#CEia3 zOv6o7!;RufD0KaHxhW2vLwlwIFCLO5DlHT-frKbufcST~JW8fxuzf!2*AD}F4g2Ay zN?Na=Jp5-K_Cu0Nr(8c#wi%$wBn7K_z zGUe?;k`IeQ(YmTsFr4!*EtV3#gA825*)S9f!%Zqf`6Dc*c69#S2nkUrxQZLL>3&+vkWEG;hbZws3XqK5Wj8M zPy1=WvBf+Oj>)6<#9=ZeF?p74usj&sxd+L4No=1gTF5I)Q5V>h561l!XcYaa=N#Jy zoDIMGk~lzp41U4g>8g9FL)OTY__Gia^ikdSc7l{Gl$6XkHx5BsXZE)f`4Iz0Gq}$R zwY}x>><4e=v$AYJtgN4Fun-aqWB{+Ef~~OegAR68;f)W%GbG{QbE(=c%0PkR#ik7b@~J878SJ1!%@&Ut+AhETNoVLQ^u!O|{fw`yZ=y zR?cS!y$s9OET>|*r(=j=J-o#R0NaqZwF*H1a#V}@BYfNA%H=~>cdrH+>#C8v!%S|M z52kZ_s7-ciFu6%&UdAfyBc-5_?pI?ytTX}~!9@2cnrNIC4Ak)DT8cCoi92+q{X&94 zqm&0k(PdjI3%AF1)}b=9;PVI+SB%8&zCdneU?O_cRz(n^2wxf0P+jx}^`FrfZ_oHT znz#^_YP02ISFbAId#-!O^5A=pxS{1L^U%wFtD1?e)G#EW zz-3hW1g!@qip^zF7K+M62+ATLXZy!hkakGx8?C2c>#r8R%||~$a6sZy{RGKO>Fz<& z+w-y^Iu^XPco;@XKu6*klsD$W?M$BXS)0at($F-1hO;l2 zoW~$SN&jAlp9D<>zthPZ{zZM5k_8Q~>0Vi5A?t6#BwrLKFGLJ<4{8Q@SxW^X{iNPL7 zh=+m10q$p#C^WLCkPrht)QVeWeS5Ud>p@4@OA<@Dh+=s_62Fp>r%3_uptwI;LIVK# zIE+96@Z`q!p~1to;DdwTuD&$=-S^g!3v4*yP>yMcQHEpGsG^6GxHtz%UFwC!gNHp0 z@S%()b7r71e&VH##u2R=B*zScp;Atl^4!#$n_AG*v-Pu~nW6N)ug6DoQg!I0#Z0}D zOJ)fU8mo4V>_;X=V=XW!nW?TS5VTO2F@{oYE^I!X@BxdI8*E;J-%qJa zscM7OsAR=*&=C*BctR~cS4ADg*38{zCQD@H3h}+iktMZxKW-Q@jYvqld`1JI;!TV= zm?MdZYEbXs)^!Bcb0pP*O<(aP%H(Q`PkL|ZzAY=4+?BG^jwEr;wS_FM1xMO3=VT3Y>C3AGD znDIyEoo1xsQQK0V0_f?S>UE)QHln;}7doQbl!0}~*jXkk!Aq%YV(MEa2Pt@1#8|ef zd#ECu=y^rBV*H!kxHM7?f3!ZusPzaB5g`ak>q9Q8M@E`IrHC(eBjz5)51f6@lqUlO z2>TwB$CN0=qj0{rKc7^4iByt#iX@?Rv9aSG=(`x4;ef(0h&S#lPS^f`JHXxCzcn!# z48Bg9-r!YbCajZyl^6c{tlSP{v-@ab9Oyz2irZ9DNO3ehtN^3rtOVFMq!JV*Q<|q1 z{8QD;dV6li`p;Lal0gmZU7RSI0J7aqB!8o!XxHBf#f)Zata+Z_pI|p`!^--olUZ*N ztlG1h;{PWUZF>w@kVPUgkrd2LhEso@Icf=^1ZOW%S3Q&I&HQ?Zl6lyp{EZTxN=K(Z zwN#9#1Pd_}W|F9?>25M&`gH$CrhTX)ADOHK*D$5T_uH~SkRl=Xc1RN1r2Xgvi9tbL z97i#J(5`DhF4-(&+zceeMqidyv+roGFW#Pkma?}>WMD1v*DoU3sfaN;0n=BaB*kvN zmeR6cr7TzF?ul#mTmtUBvH+yU0Yw+WCfUU%Y51fkuL*bE< zCCO+fTW}V1Z(!{mbBAd1e{y3;2|gPK<06}7*O`^fITmWon7Ca`wL(Z^L#NCqS16p=bYXa9>frX_>**zWomU_>BvVVHoXNfhq@ zmT4O)*G{N(=J1coLg4o4|FIEFLW@6-44A zkrB)g1hS~S5=+0EMV7a;-{uTpJHd?^z$?ImD)0lFl`Hs(*A!;4^w3G5P#jimFKkI0 ziim)g{4d;lLH=^2r(*zZDjKj{c!6ug*_JSdm<=0Va#DQzzQ-ic_`y_tDuf~$f5{pc zCV$F7iS5dCE_16DA>|z7R*9lMrOirUvh=VI zHt(uMQYsu2f@jcB`eQ8Nr~|tv)T<%irBclWKwAU6s$TnZLw+{1%uM&oD98MOAL^{f zayW`(TFoO6Sa!g6h;pUt(~CHhvJ{bEC6=_7uGgm@FS!zNvrpdMp=(NS_oAgOAVOaz z(l^_llnv^{3>KN+I0#q~9UM`DaLZPw;s6_KqOT5Ce=SvCPgCBA9lr9sw4x+2N1Dq7 zic*M%i2#u(?u+cl(Xg^wcF?iz#;dUc;m@hq!3W0375 z)qg$HW4t1SKQUw@(xxSSeD2Z2hcSk|YEV|L(0r`Ck=}F3L zYkZ#nuvBK8z4=(QA$4aH^7e`Uuli2KEGP4~-%_XIw}wveA0^L!Na=s;pMMLVe~ajy z2{Pv2;<4y+(6-=Ycl>2xQR3)Ypg?X#Jf47>q59&hU_s#P6KbLmjKpcaYgycp7d&jk zns<9#7GoT&j?fgf-bqJp6+6;)%v;DWy~Lyya~M2QY4KXC>uWX}j&iMZ)7m(-JlA-J z103DJTx)@n(2&sX%?CoxqzOh$MCIo^nDFBAY~gkz0dB+kfaF*>chCzCk#}hBhptOo z^!9`wIW@u%=aSBV{uMW+gS%6@*8fJLe7SETn-&KS|1 zHHfj&BeqQ9p}*xm+Bj&?7uUU}C8Smfy@CEKa~Z8-m{WbX=pw&+^WQ@8-wN@6ZZ=$` zY(?iYpp0Czr@5HAbK4;Z3lPiJb6eDhWu(q|`NH8ONmCY9RZlNmn^pPBvZaCVMnApJ ztkjT$n#`2MClHG(D-jiaF2o`ss3)Ntq|EbY3=!lBn~~WMQv*`+2ISA&huAc@Ye>lx zuq>QNGDONNCeL>*KQ7)YHHXBPm6U_|HCvHN728p|=+Ld{!sy!5W55yD7zO1{>v|9M ztXoIG=#*c`8@x&(KyEJQJ&9CR&z;o>pF7)W#v6#K;cugyh>$i4aXCg?QD=XdNCvzo z(I<6p5Q=2a_rmWpV2TjdCnz=qpyjyVr#<68ZyZa-+AZF~XM#RFvv}i#v^60>X;@)co0MGFZ&gf}|&PtKE%VJ(!toE5&ljh#Eb5 zM!@9tds``wAwDOSsC?+w+}0HqK7`D4E^vPpW%IsH9w+DL#4%Lfv0*L;pZ>%M z{*d<~aJzz??=Y@_MC|IBhd^*RFiMlJKS9`qW-hoKuN?t_|JL7yfV0`L8YDT}cEMln%wAfxZ# zXl(y)J&1o?{G$`0v1PsAj@V5<>%!ouNr6VGz(33do=loW7u!J2vG$bj(kMN0c2Nv{x8JH>!HgSA@rS+ivNh^>pZWB$W4TcJ1%LrHEz?a-8oL zD1pdloQn^kGE=knrItu&a4+-2K%Q6C?q~zfXI3y=(r0It(tJw+`5==h zgRp@XQDCZ0Rms3^ih`|1RLt9Ftn80^$T#3~PnPgZsspCnDEjSD-1QXs(F*duMA(XF ztD3d-KS|ABi0SYBup(jmkjwlGR2c?Dn-u5xShJOg-Eb4{v5PnZsB__!fM)2W>?~mF zpGA1tJcS`THP7G!+cEe;KeN`Banocbq)YIrk!qRQkSH7JK~b)ZNGC+r-4{C*w#Lof z2yK|EkG0EuG-!JBA}Pr-9GD~1YeyG?n+heTf?>dzrw1bga^;<|9hGmI>VBJ~yC1zN z?&y^84ff=`{1ITrkKbqtLrxndjFu>lw&GF*Pct=_@%JU7CP_${@eC@m7e74zQUn+s zSX|Qul;0g~?i#4^{YCCoboU|2UlAln0R%CpXuf*|%_91yd($#AzDkgO>(Adu9*~^F@p1A$oQ$UdNqRd_F%~ zm@vvpUdPV5Pcev$HQdbKM=wY20BLnjI~iykk*wnA|DmH{XQ{?~niUMyF}MsBuFOV# zO|7Bw=*WdPw_gEM=J;!k)DoQO@*7ioRHB1 zz=&=n9eL^j)0A7LPBqAv+me7?OEkC>T?yu|p>&bMvcnt#M}JyN8!GoaHt<;Jq4!M4 zVj#y5SZ}$mh3f77C7Z9#L$l!s@2LdfDmNcVgAr&P=3G0|;p*$Ox~MQtCm?DVyIr^F zk2}^L-@s+{*BDe_6?CgD_Nps~vuw5Il8zwlAUOo0ZB4rO>O;QH`LFKBqsnvG%-1&{?%U?) z1Qs?+T`z}E@)p)zoB6X%vDgF-{+VGCLVM|c`@tq41HE}aIr5CUHkWUx;7}hAl%FM&scgxUI0f}Zg1G~)?am|Mp$&9dE6UuPQ&Z-dF zbh`*VH6B$Cf6Y_ygz; zn0`WvHb_+(sg2df_l1%|(vz4r2FUtzk7; z5kr4;bP}r-Lw|N;jk%m_@@U5z=WQ=6Ip@ij@@T&zZkLr)#kaVabMk2aByQKiht@9k zNNn*vUygq3ov@gqZNjTqn9kCS0i0bBW9w+OqHNAno+``CLiPJo7&Emr=QHOWs42Az zu0}tjDnhj6W!2VN8gCLLHJy-5;$`t8-YZA|chjb#y3NtcrTJAJZK_WyrW%`^Ul9Bj z=FD2=x#=O1C4x>3Ncy$p{n~_VV<>j3txw&uX zF}5u9t^-8*8YCPzrFu)@y5=8uy&+PXsEiY7;ql({a8zShd|FG;SvQ1MXCL`8WvT?@ z$vYOsEij09Qe@VYb5M)sbbsN9k>Qq_FZ04K$6oh{8>CbD3&{`zRW6jb1wr^*F#C~$ z^%qqDPF|8h-AI6L;ytJ%G&_#~jtf&O)O+HCnLsV@%U(iNj+WR2yaRxmZ8=;*AGCuL z)|>YJwxG4TL3 zH}lY#xj4CIKx;Sghha#yLoi$)582&|Sm55AIv4RT$)KS{#bts+7oTRO2_(RBtHq10 zr|&A}|ArO*PrdX1jum!2ROHJ+0068I004;ol`s607cl;9fJwC}>rFOj2||QgO5;ix|CNYSp)*xBr|jQEu9kCg+CTv=RJ8O=LeFN%W4*+8CfHuxB-PUX3dCrUmn~P>|!} zK93LQ^b(olf^F;<<;-y)N)2aqDq`~6JapFGL-=R#7UA_A=n^tmc$N#ce2Vq1% zB3QMG_jJPRp<}6>N_ZVLL$uMHg-B!y^$&k#g?DPz)Ao{glb_yr$m>!L zQ4Se?EQV2rGh^jvwhD^A^AOU#68`{_Dl;4 zLG0&N^ZOAf5}3Ue>dv&CU#X*&dZy`#G7_Nr$yuGd0-?I? zil|7yjBUKU;Mh|>9Z4Xl4xvi1@371_NX3JJOhwE*l9o=JL1$~4>zQm>aFzEV#Kl5q zU>eP>@ckZ`{-K{huvRwq2ZabtKHncdVjOwtdlnDZPqW0DS@_KjZK|DsU~2(u{k-dr zMK5u*r*z+q*ZhXdKFJ#^dg26>Bf#eDbVU+4!eJR^PYp z|Dy_ui&=5n)9hUHyz$Nq#fomV%TuM|y((5feSqMholrT4{ zH~#Tx->Q+{6VB_-Z`nx{dQ<@p@@)Kjq7rC(dM1LFWLm1q$c6_={IBMnl=wpl`mK(MBmF0x;@?TdKPQsE=)|O&=64=J`JkWW zg?KFyE2Ic#VuE|XKn2AiFUy3JFY!{E_YVPrND^=+ve*E0%(Ru!u1ibl#Cp>1BI?r)EC zGyGj=aBt-t)79%u^#BE@@C|KU3gz6HQ?H(+XO;Y>+;hEM#?6O8L4GNIHm6G~b4_j#{LeJ?_^!41A+Y$}CM)$HB#(99l zK~I*QjIzurQ^SrX?8&;)TNgL>lone;xRn!au#VcNJ85{xDdXcIeV*LuHQU>a?7Fm9 zsk|9%sh5`J4OspiS#W9dj83(VZqhg-UFk#`6ZY0V(uzoK5sCRI?x9?WB6I#=6r^;z z2>elD6MUyjsklc97^2>^WXAf=5mW7x#v3hCPO&YI6cG~I0wl%6aa`julQFKlC5ZM~ z!wAuKzWE#w@_RvfDX%nr);DG}0E0YDWD#qr*QtMmg?DgUUaq^A8U+%MoOUnWhXsnQ zJC;g|wZ@o!8&)M&W=nFgOMS1ma!M=I_qvn?r6LXQgDxzP+gv|(8FN!^gX=CWj&#(m|+ z$ogbdmrzqOURQ(iiyx}Z;&M-TloV&>5r184oE9OQ0fk|~vdlFExRRz)gd(f3fnLl4 zdF@VPs~d$@rj#X?b-N%wLWrE_5SQO|qswOjy?sqze0Zy9)XjmX3d(JK$}UtvSFqFi zgl#f7a^oX@Rz6oH)%bO{nyS8rqIX){LBDbT2-(>W(;MyYRLPEN*=`ge$(wWHiVxNG zY-`$yxV|L>-{i``a?~-4WfNGeX?pRh_SPFv*K))N6ur6)$40Ida>HT?%VE$!%SO1l zI=)cLx*K|Vt@pO*1(Wo)ie)=^q-hEJPC@tl*8=W^9`lUr>t8n+eqdU`KD=nB%hF{T znQK4eW*+lZ)o|e0@x{%QyeV3~$PW z@gR7wh_-@D-)U5K&^M|Jbf_Li!w}POL=+t~)aiwU9E(BNLZTTdy^3)n%hO7@ z`8+PYLHNx}zj2Xn^^v#Ca^8++A7gtRgmi_>P6GYMBupzeO@vVtXCI{7Ff);xW;fBD ze^*=$mHhlwb~+?r<31f$))V|K)+SUv)Ktg|g^^zn`b2b6lO#{9W~#VG(v?`q@%b^8 zKIe-s4qTV->mCNpF#R;br@Z4d>MShZH!f9-q94VR8FE)SjtM?nBW0drPyd3h(Va`$ zrUD%7x+J^$Lvgg4b_$H0e*JQ=U=9%R4a==DlgTDzi2ge6bU=t=czcl;+xOM?Jco2S!uByGH2k^ zcIZ-!r{~#pS1J($5T~iA3co(eFJ8wqTtb_o8+6j=8m`+(oU(38haw@B$!s9XirX{RF9XT55eM_L8N!3Vr}v*>2=kBjmQFMFZvp3)mA_PI$11Z!&^M~Q4 z^u0Szppn>P>BM9gc;#v0g0hHof$;>&zusoT9rx>9%sscanwiLl!SCM+z+pBm+~9IHg`n?x@Uat-gnW7kqtETqbkL+#xOidWE6lsT>x z(#-e->^}%dMuF*`Aa8(n{4gVhM&xpO%F%?j6{?L%8a1d!l(Jz%))Gk874ZIWt%C&F z30wda#{B^BHv{sgiS|7wBazHIAA)O3qk{)Ul}=9J?9Yot3yP=SR*nVL1XNDwb0F%c+1zl8X^Zk$x{3BmN z9f*9mCxRhAXc~&)g|XQ|-iE<~s&OAlKKM%N4E`tAQN#Dy+aIYQ<8+SsvLjjaY0xe- zizHMKCayBW>?9ymFReX0LLLeH=blM8FRt+O8ZkJ$q1=iN<91V#H@c7q$!u`>IoL3S zA$&+5#A0uJR}0iDGir||^=Gs*IkrrK#!dzj?;@o+T)77->e~YX-z)mRB6b*1!JKm6 z#7_Eq@5_G&O3eQtc3ajPY$)CMwJr!OdM=S7;qjxDvUxk!0_kW{&j69aBmEET;m%oT zps!>e(Xbuo84nVo3h|dLX2(`CyV!C0aPU0?*ZXsE**sf|Nli!j^cyDD1IQ!It_dw7 zYg#jxx;nS^+cYQouY}jNwmUt;=He@)H(jFF^%B^kcNUmi~n|O5} zu%64UN3)-;<)gADoT+HdK=tWR?>Mpkh~A$uS7CeN(8Xcu(WV*CB)94=cOwQT_g9ss zdjF{Zh9ymx&=%Pnoi@e>n;-G)S>escFEN>@&Boud1FYbi^ia00O3+fR25g|JxnFT& zJ@}4K3#8AVo0X*XX-~@WAeLsYXGz;?kEz$R6S|I+{?=Bt9uyUI)06^g4>mrGsY$B_ zwyZVsg_;sN?kyVOD$OSLWfN;^D4PeT;*me18ZQi~*P{1_5gwNJ#_lnXmKu7^Ev3=s z050q}EJ63>iJkQi!I(J5U6}|~!kjHTCYa%!ECU3JyuMiw0Te?hMx&&ZQ1uvXpWM9I zuO)4}!9_XY5>~T41Gd^n`Ij3(JYyT~iQ|PFB6NeqZCHmJv3r3;?4arZ+Oe(-U<@*h zy_6CL{0<5+CfCET@~I`u!i?DaxWGA~Cmr`}UrjCPDu_jHxUL%-Fh*z1n$b`RMU{U{ z*?Cy9w&-@G80`pe!LIanXM0Io)`FwKd3P|)ga?24VS7p*?RIb{Wt7rdKRi$`Q6Z@( z&}%wj)qs^K)6*Zy49WOt_aQ3uq4QJke@<bmIs^&me)q-VNUlZuvZDsyLzDbryFEzg$iyQOWkers0!M~n5#nXAT=bFAR7TnfNG<_J?(*(trFDzAEU8(tbqf|g5 zU47==BWV}YC~0RaozDU*fMftKOjzg(!U8gzM-fdK6efn(ElF8u^-#!W!Kh3fAi$?t zoeEz;zl?G;d}5f_{UF`QSd2J^lbDUEP1|JNGlAx8$Ix~Kr zv`eq@s(4dfS=pUzH>BR6oWtXA0vSj?DtINU02T1Ni&BTF?*Z^tIP*)ycAKQt^6~dG zduOF<13i~#Wf9|(;mI$;+~_?bVF@U49B=@_AhO3=@34#Yq0CfzR+x zcRh&PE5;i;^;PvGHtEXR4t5c?*W!>Pgfd#>(Sni8;2@Y1f(K-fxgbdV1%d5!?ymiB z<*jN<&-T%H1Z%w{wt5JH2<38uzQ{Pfqwq+v<<YtsiuV^`1nR!DA{X&T?!^n-nm4<|y)QwN;V{6h((mMO2tQmG(=~2hVR5o?a$Mz#D z`ADywd9F^*M{wp7>|ddAdNnFY`!_|jME>v5nB^}tzEGR^tIXa)KjDX1UqHf-ryzDF zIQt1AevvENaUz?{f!E}ov==!72Xi2IhfCW&k#is=sSuCLj})`edP9^!C=!?Qe3$8P ztT2;plfJIuz^J6%@oNBgrP)=}(ReBQVy&lh44|n>@W?7{MSJ4;f|+l1=Go`{w|Wov z;^D-5rKW_`nrXj~?g`(D zZ58@P;1Lyb25zn+n+9py zj2mg}wtQ3xn+HHlejPabCsWdL-Z!gc!lNQgz_c^KJtiPENugLm zX+;zx#{SPB9oUa8AzR?_2zxU02OGe3rJ$2wYeJXs>aP(_z~7fm)LZ!%h{r8_A5hHJojLH5WBM`!Z2tfX}P!Q1isq#occ7IY~Fs75f+`4A3EUU?Ug27xUvJA?Z65|*O zNAKfYv>)&aXIGFLQz4%Sh98Ox#TGP?D_1r(R#G?(q5COqntyLh!A{zFx&ddIleWwo zZr{<;tm0{B|Jc|HCiH~wgHNYJ; zD89!5N;$@ZfWWTE^`w9HN|+Dn_MTpm_*C_^UAOo_#=0t`4f+jwkeE|iQ1KAPz5=N1 zGU^}<(G3)StA-REsWxcFbZwPb*~;Y9eekOD0UvdX5 z2n8eQEeG@ToTn|sP=7wAQZ*Bq9PB7L^MJVRrd{tNUDwvWZPsRmMPC7U&Y{>%43s$Y zfU-CeA&6YMLMT7SHL^nyu0}7Sar5jAY3EU6busXk>$_1N10(Z;1_l!Z`G6>$umDKK zC!rc63oIKDCyLP`%gC#itVY=48u9deUh!Lf`Ezw`6Kf#N?1Pjxv-Lps#DMlnQ4GT% zuCy)P4KuOjUjLSFofIvD-DRfi&X!Pc-`z0L8f$Y1$QOxKt`sN!Q$9z*6~7T^diUKaIKz zNl4dZ_lz_U5+V}r?@k_C;*2BDgRp`Nyqdno?2^?)GAsO^>-i>( zxYE+VWt=pK=3!-33KG`lz&6HcHuZS%&@gIf%UzZ@T|Br=SEnV`$0z4Y z4Bt6S*ZT_GvaX`|gc0vD8HflJcm*tD0O(18gdy$`>PE#KEevB*4UprrWiAiFH|n%=z!80`Lw%tULFod3a(iJx^5XDCZw!3^ z#*gz@J20N#F4_4I=9It>51xmqBt;UBn)a>C=HkjW%-O`LteDp}oZ$Z#dv5_1SCcJ_ zHo+yh1#R5j-66PZa3^?hCj|H4l0fhff(8xJxP;*D?jGE_Uz7Rf&di;8|9tnYx7J(h z&O3do`kXrZ)TzCzYS*q^yQ-9JJbn-}Z0oTPKljQI#1xnr2(O1FeSOU=8A}qeo^9wk zI_2cImO4{h-Rzz z!HqERFEI&$oz(~HB?M`-nnHzJr!03NDN?hgHZ<%sY`y#k7d=?`n2tdc$nuP+CqRnPC6~1aEb&B9BG*a2a8c-32cl`jkBaxoO4>m`dVx#DTg`vX2ikv62 zQ8m${an#i*e`F6?TG$q{m~BB@;T$d2ABWsfb#A;Ll32}0!X&&2j>th}zoOy`)|<*; z)O@beQ|>TfD7!b;k|uXP4b{57)Jbj#q}?!o(RF_tC0(3-gWQ9Oy#f0fUSLOJ)Uwq&-uhLfD9|Pn%7vs4ZXC zvcTKte|s@w)_T4*v9dzZlVN?M`-b0Z;$UjSCxkNBul=3$){r>+s_djXJUMOmb>qQ? zT3JcRW<6A#_S`T1;ij)^^%~q1=E?R+=4<7fNFW^{j%I3HoU>H3)1-Hi~8@I72e<44IQH=^M^pT zQ6VJXo#;X^fj(kBH9kD{!sjK}QS2Eet)QaMaZrWpBK3}~iC^*uXrtouaTY$d6XAgp zJ%VfVr$4!z|24R{v|NNhYO0QyxcrmjS^e&hFRjb7AQKJDxoM#OtD5ijx4ojL9f3i= z&Q(wDF4fY>XY+`Qimq%Ucot@b81Cyf(0bze9P~UyoTujNah@l?W~}(AQKkC&q}Y=^ z^zB5|mpYrEGZKhXb2&=mbMxiMTseWi+5+LpiBwXAu@w`O z{`t3h(b+T(Jij98tEeAsjh_|Etl~62#CLxGN?keBIckD3TsL_fg!L#B#2Wj!2R78x zE`78STgW7^=Hha^mURhq0U1lzx6MV%CVau29_rPJB)ym!6AYv(H`l#U#M zQq>b0gc*J(<)NeLk}%PsC|C@aRuLby(FIJ8lvQ^;97!=>-#4>F0gh;q@WY5+y5!*OPcZugJWJ8IoOqRrT-G4S?r}freqtPo`D!XfslJpTIkFSU z61litN*^Wv19iKHW|n3DC33NsVm4FeX3cB<@(Q_*5m`In!+Tw*@L9Y4weNJi-`qO1FMo`Srp=J6(ZbDx+)>8X*Z>0bt?mx7p) zJJB{3sNd$=M4c@0{YC5y@JzV9+N#v7zPs8wA+Y7J)?2nwT#DoV7Lmx`ZYK?p$l1@< zCkY8f5dGA4;KLA=G&uwnJ2yqF6Es8s>1wUg$!|FBThvli> zBrFdHOYT(m8u(j2&Mia5PRRY_XQZ!Xs5kHK1{tgI_g9+ z+bdE%5D;*6u3CBHyPxIeOLRT1ZjUyR<+S)Q#sA1hv(-Z6qYjnLJKuUz8P%ficzniG zyNGq3D?V>e`ixZdW;7rtfo}zcH4sidRU5)Y{)#>TZna$D#6;S}9%3 zFbv@6PPHBEo-TXDX7kg-x{qjWU3$#$!ycusec&*2zzJd^ocOkO8nZg{pg=ei)0OHn zFB`#1QPCi*xA^nOg&pT4`;=Iy=wL(V!dHvbC7xLKt>9i+iQ^&tM_=A)jA>u5+fe7$ zvYgYaLxg35?ENp>n`G%Yvu_j_uOGYdLKaAmsBz+*k_PttlX#n3ZTXJnB%hIJ!@=ZR z18xan4D-+ufl6gS3K`5^FF~T-0|WN1t(o3^)ZT=QD@T@IyTu>cB3Ci|Uwd&?BJn>6 zZY0QSP-;j(=cjiAus{F_9Xz0_nT|OqR6lWvWk^k6VN7d{rH)OxN{u#9bozwOh7gZ? z$lKccgyY>5)e1}2>q6fGCvBSAh5c?^Bz~%@Ve4Pwrs|Qx>(v5#$}6Q~gnQq!H|vBw zelEHM%rV+!y+%!0OSxg7KMw}L4L&Qx8*&*RhLoV$vx<@4)cy&ebR zM%VemPRft6tLZSF7~_)`bhTz|X6BXy4dDYZ_dSP{H3bNdrQBrTACI!Nw-MYlOIUt< z)3|r;2-9(~gpA}id_9^yE!qts*K%(>ov3B>$4pENMoLD)RS%ZH59g4eM&96l0Ov0# zaFiV8c9?(|E^ka(GXdiMX;>_10>=3r;Griy!f`G;+JEMu>v4D~YxhS>An@_5OS~ zL;i@Ug=o;-f#g@He-9r|$Th24chsE8vfsfU^Nz9yAXPX##HlE*vW}EUFa5dQ&Nwtx z2P0y)+BfCQXMb%2k@jXbD~NEH?U~@HN`O9vBz+90n6dZ}qfft10ciTNtQyCe9wbbd z`FRL;yECIPZTs+UHQ&BL%+cmw*Jr(2?<){=FhdwR)bZ~IGx&ekXT84-X84cjQPaFf z$-=$cUv@E%q;kJG)7myh2ltWE|q^G#zto=pe{ zlaJ(G9NvCmET~E@itXuHnveVo=lfZ&K-I238yUC?qi9S=6S&Y-U;nU0tj-f z?>C!zEAKnSTv)`vf6OkD^|QzUqhx|L`<(FzJu7WyAEZz9MeEBeSAij!I|EnUE!??! zzVh+>9JKQu(ev!Nul?SOmNC&YHFQ`lN=3gw*#wS!HFft@bs=8Sy+7Obl3HGC*ADeK z@03MZnVOd(tZwSba$KIdk&fX&->A;c}dCqI@sCAd{@ZI)7ZZj(&RIHvf%RQBa9*Y-M5U z<-55{TizfaMBZ#VuTLc#u*Jj}Q|gz)OX!GkYaa-b($kEYHu~i02Z(rLh@IVp2^{! zJNc;1$EYq?8L&JZDVljVKa6NMAerXhei=lx;hTD*#L**~H@P|N8Z~|}WNAT86)K-A zy*qamJga0ivPkwrdv;UT_bTlB7u;eGUgt^LmR*5Cm7IaHBw|1P&W^kfBY_&L$8o;% zJoiMOj^d)q!5rtISz5*4zig6p%R|t79w?8XDmc{Qm5gb4)gE|V*gD#SbP%0W9Hd}{ zHsu~ZN>1Xcxz=9$qjv!dD^vwHWhYlXL}(2RaROk{pxs1~14z8tuSj~IW%(<6;NR{O z)qvQIUUHD6>}jq8uZuZFUM8l+s2593Ask}e)1Px~+A6sd$L!L2!qMZby!GI%rV`H_ zCe`!95qg%gcib5du<~uLf`(ZVKp~QU2i!GRiL6!}E$@G9W1d;EN;s<2su?+62@HO} z_lR+GSx5UV3Dx*qgmBEMR}c3WOsqHG23weMNb8G_ORG89(@!7w3RgpJJ607_(dEJ^BGsszf1=YlP)#yH>HCf^Lz+LuX~COF>qdk(0@ zijJLggpF$Nj(q*9lNycVM#Q{tNSat@XU(EA^(r{CPMz>VVk0@s>l2X*)BV{JedDVh zpVjlc0(Iz(E!r!1|J8RH8PI-JOXZJ*P+avTOEQVZDHH_B(9b1i3BbjD0xAkur9pqV zH66_tNIVN*`KHSA*w7qBvdk1nfr!Z0FW)V+<20K-JAF|8NN1o6n{gBM2CzEY2c*S? zRd|OP3Ui)uv`YPe@2t|)qOEO~d#jqJeJ&c{e8$BmOU`xaJGuiyliQ zo~-t<+qFA{(40^DaOtK9s7jMA)1&X&g!!-~83fbF!cTA9l4V)&(uNanc9@q9%QNGF5V*Nj&b0XRF=l zFnMz3iS%3-i`3|bHbxHLYt$aqd>WkNZg0RRny#m3k76dDx-$lE%-jsUES~QpORY#@ zX*pSayH?%k7tAR9Dr(KBi8S$YpN)(7CtO1S`Y+#B6g&>8)Fc^e zj0>C7WeRR|icv+o`M9%E;572nq*8M;QASmQ z1D6Vep?$hBBM;|LGQTEYs@NJeJ*sd4VhCZ^h2yvJxH+3H=MrmAs4aqlk(om5WhU~^ zrP7tm{SAA&O(~nUqalJy^2i~A0obu`dobTVMtu1azImK3Rs5zxaezr`C}nsfKV4H+ zQ9UQ~WIQF*Gl?@r5|x9=l3pnzK|``Nw9!ub^SNf z>)Y2!M|pRgKNNHjR}7zzTM6r&9r;$t;|RZ?%94RewD)QJ!$Me*qgSY%0=W zXS?t-$k#4pr__IXVYdtZwMD|ZdS2TOr}+ufWCyEy%@~SRj^am(b-(2CF>x*hDlhByAPH-?G0$B^4<_#O>b52kZRv1bZhscWv<%* zS)JXaT{b? zc4zsZeLlfwK<>t$fl)d26QgzVml{cXb;26Iq%k%^|yRq4E<|23yoaJtVV$k2P|w%%ZJg!fyMb< zfiFK>nWfCXjeC~fF3@*Qui${MhbF|2yjVi8WEd^s0b=7~hvPs#A-4Glp={ZxIdYnH zDof%Us;Ow2rCRhU4n?fS^R`1mo4`b`_QcH3kcLr!rTfJ)81o`3C+D<{kv0AD-G`tJ z(qnb&cNR09tdqp1bmGj`tSF>>2qkg)yR-5nvkn%#0ot8`NOPq79J!(o0Sqdl0XI8H z_yueebU*BtJ?ynq3GdLOS}?;h-a7ZT#e_^&n>}ju=8vLMX3<}|XDsPrxRVt_O(fsN zRIpt389Ky0Gq6hat*(wd^6t*{Cex}J(oqj8+K;fOF}7MdNKKP3Z@7Qy<)M%zwaY6# zB^uBw3W4(Ie^%Gkw$t_cLWjR&pcazgm>yiie0`HUL(6;?ex zKiGn}E<2)a463n{ZqQh~gm%bpll|pl+O|}G(aI&l55-cg zqS;GgWss`Pwq&H!O3j^r$Lsl%I#T=1W}iWO#!V_v6^aU5(b4xBl7*}Cth6|Rik;@K zPdwa49?HX~BRi06@bJbVf$E-*mgNgQ27UT$L%UO6M%dXZvP?Ks!_&oimp2LupL~E) zBdTScwze$rHbthX)eb1BGU|b!@HTp1yh1IX^|JZE!DFujIyNy__Eh$T|_s{H^^4Zuw*jgQ!blHU?IXq<4=6)%#i8c*^g+}mbx9Yf#`lNa~E9C z<7m1xuO-97?TN%qsX|Wc{Ut=K9=6rmYk4|&?;JC-VQ9T z>9d-4^tS}Qn11Xb6v!2Qa4&O9)aA_L&f?#yieD_5We4rX6{m_b7$Pn@aU-x#&9caP zMrmj{OcERK5AY6Bp>}80_Q*QEVU=Skyw_$^=_xk9%hL>+f6n^$^Jm88khj#N?RbbM zwrsc}H1x2LI5*i_f#eWbc)rlj!lS)kkBX<^uCFD$=tfsopbK)OZB2#fys_!>DN<_h zMn&pis4^pj6;l+(ObP`ENjc%03bix%`_R%GDi>@OImk-Qs2`U%#N!V&pCO9zX4W$DH0B2nnzIc)uOI}AJ(wTem?@5(F{C)+T(0B&Rkg3J7H`y zK9!C1%2vr~gCH8Jyea=L-`7t4(kg`0`QS+%W7(0peEO;1C&R!c6NWNG1t0Y4r-^4eK9%-A1S4**hhpw`z>P=MJ^o6$D;t5L2^vw)eh$z8Gw}X&Os|%clChX%+SW zY^*V-b0gi7yLY`pv3#C?wDM_5=U2+>G>@Sh()Lze6n^RIcU4Eh{b%ezvk$@CRhp}f zp4NSY;r+-aWG=VW?zLaZyA8>0Miw1Rv1i$Vn9`#O00lKbBzb@TR?3ZWmNeOSJ1FbI zSEBsxmT-HwmrK=leK`Rd88yFP51>}|nfdl!tX;`lA;|Nmt8 z-?Kmk3N+uJ4hp~zzh82eP@UbA`|H|zj#id-W^8tjW;RxwtZtq*!cYhFw6pS(boLgZ zWCyYX1$dz+B@k-=?BpgwY3uIpBFM((<>kfd#l`CU#)gfPot>Qx`qm#Hg5C~xPWJx_ zkV8N~fbI8FN}!#k2&KG*vy+>N+8bvJD>paiH`l>@3}FMJV|wfwoq5Hn#2}l-!hT{{+biP4b_EKLPm%Mt=hG z56b@;$iL9@PeA^WM}Gp6i|03$p8o#8{RzjvW<2y7TH{^J+--qSKBCOW0px_9JWyYX zlarNCfL-8s05t6H?s$}-KzvXLsL#d9$u97>$9&LNd4PO8O3;}2c%=UN7#jR^{sH`S z$)WTcRO-q9BkI3C{vA2=vj)n%JV5Bl#qo##*9(KEG(Ry)(Wi|G|HhSr_u&DbU;w|} zzu?N;|DSMWSq}#XNi%oos+d0ik}v-k?fLnETmnFT?mv7^ektfRCl4z>ke`#46UfO8 zM0l+@&^F)k6(!!$jdLq4di2o0zWXRae=a4c&&?(Et?v@X*vgCHRj6 z<{31N2#83?D5y|?I!wSb7+Bb6aIjCQhC&BGp9A2q;ISzbJXLoP^?AQ6l<<<4g?cEbzPk8?I_zPnH4KFMxUeDm* zVBrv-@Pc{f1$D4kaPSly2-p(ph-R)hl$>voa3$a8Rd*m$acP|5nZFrB!Kdb4qd9v* z?KftB4zZB`N0|K=Vt>PH9)Jej^7I)NEEYfv@Ti#|O%M2cSIK_!4!^w8U+**_g84!5 z%Z-;x;}}nX9&1LrBnb!*u~W=JXZD!M$+wwG^ePW9PFdqWz5 zn(@5inxl80t1~c(uV*_Eosfh~;uEUaX{iU>9YY`&1OS>gd5F>S0Kq^2om@pDrS{|m z!s@ ze`McBi}K#YtvRFZR=qZ$J3^SRdk~BZ=6z$Ir8U6J;)U|_g$8iJzc?`osU2?9yfuwH zAs5Yw_GLcw9RaKNA^EgTul1u=0dOC(9vIGSx(Qo&d|BFt$2nu0zfpefC*1lNVE?KU zOlg8`x9y7Bx&JdhE*{C+xEliSn$C&n9~9}4Oe$w&O1;g6nyQnc?MP1yY(D0QJ;G`4 z%PoZ246Ktfz98e9JRBQ~uBqKc0-{;7IohmhH8MeO9f@oRmlkN8jtLux`(0yrV$}c4is9 zg>9`?e6`dL7?98eywCx)TVSf<>E?Xck9$WE+|C8vS*V{t&(#ehO4 zFmo$xGB?Hg<+{tgLK3edaihh%gaTn92!Mn9?w0(HQ4ql=qB|GnAP4`(WBudnzIB^e z_~Yy%BV&nedCS3VIaI;Tfb{o?Ow+aco8QL{X;T{psj-^*N*R%Pe)>B=07+aMEB62s z2w+b*b==zvEc3_(ZZ(GhM&W_n^!d?%f9J}+C|%uIZB|R$B=H-i(O7A0GElr(M7zro zvF{MY7$9k5xiJ{+AgwhyjlM~?RDW5+m~ceOMrcKib(3{{-@ZNWN`UR)*aUYTFNhhW zZj5ybIx;!^_`rSdjxc`>#>&OcTr-7{7ptvpZ4Xuz7!KGyMr@lI$~{#Jy5(I`1b5=+ z-f^}iS7wW?eu4mgIsUcWaSi_rT095}1IumlHl60|tdq6E@uDReE74VeIEA6Q&e$uylux*YE><++MID0y#u>sqD2rj zrq;8@^ae^~E4LDH%^L7Xkwx740Am>4$X4NY7-7OPgmLdZTMPZNJ$=-uHvtH$j_n@( zB-=6ff)DiRa#db87OOL!A)G(w;q$1ENOG5^R&H#_Lsu>oA6`HJp^qgH0CCCWV{Tq^ zf%odZZa8WyqRyDbe9(9uQo&19Cm9q%0Ri(3C-Gs7K&FVBg8Y@6nAPEi5T_jvV4U z^_#NpmD9>Vf@OQ1X{;p(z-n(@?`z8l1^MgX(ncl+QUMefAtFIU%}og4h8A=;_kCbVkq)L?H?;57$4}ssdav6QZ&A7Mq-ZBxw$fMd(#>zs#H%F ze1CO-1S@i1HOI2a!QXKyXLe-tLF`l&^sZVdeqN`DvFw>efUI))p^HS{=%_!&U3099 zT8q~)1kitnDhUB3lI21G#%B<~E@h>rMVwijg$z>kvoD`lVMaAe$qU1L#JbtgR=fw- zc+2wl+Ef=#+)o%WY6V^n9>F1)BE!Zv@*LnLKmbUKuU|(0+D1B0jpM~LF-xT*n_JIF zh=%}7L34=Rpqe;Pl*8qaMwfQOq`pPFLTaQw}*2pf+~yRF2{8M9p_pFa_2G4{IRUUgz)BF|FR zhIwIG9*KDPIQ)NeNI!A0RREjGTA&8^l{+K@2w>$B z0w6jiUs%v;o(Qs8D6DHtT5_sG_49eCr}`OtY#uS2O5&%xEfcUT*Lfn)C9GIJP^Poh zHhpe15;N@m-ikjgLaV8^^~4FRT77T-*jxXI{HC>3tT{^4$BT^sMhWFG@Mon2v5P$@#$vqgfA@}z;CQ(|kgG6cOcybyl@NAdxL8H20 zc?e(u@eZ2*yTlLxEd+3+y5M}Y#0L(+2VFk~^(Oq?H3&;|4)NhS0enxkvM$D>0qNxx*R&mf0-bGsz1VHzEwelXX z?&Oha?BM*v1mM?CD;2q~*i)t)lmZ2~JC){X_93_mf7s8QLXb@z^{J1NSN= zClzs2Lj|+_heq>AbD8n-G_uNu6|&BxcA~gdV~%xnIkb(nx^emSNv1Bin3B)r40j0I zg~u>@oY98R#)~e%hRl(N(|iC1|09yV6+1B{vQSItQW>KMWkWn=M;KjX*iC2X-<%2N z939)HJlN~cEuA>~0QlC_kMcYdH$m(85$pEnR%XIS?pPlRr<0}Go4w33pC$2CO8RcP z8vC4uO#7|8ZKDXEUbb&qP`ov3h$?!2`e{vDg4uf)!FHEa#d(#j?<4|LE7SHFOjx6x zu98?drcBxrT(OP^-I_6~zhj}<1&y6sZ-V>1B5Fmt$mkpBsdvOZTbpw@Q zscrf|R{#(MFz&-t2yJ9y?ra`?dmw;MDBIwFtopfKVBymryMnf&l;aZkVD8&;vOAD^a z7;Y+#f{Q~|t?NrXxK4kuFBG4jI26s8ll@iC9`m-Ip#FNyLe#3ZjPg8ZHCO6Z`v>5* z1dM_Vr4Ax^eR}1G!ox%QT2NG8?-8FEH}Wq-=~*tJLZ2=dRM~@^U}!sMbAj=X;E&1c z>CrUtT7t#cdMy#!Av9>YVu+|S*A;Fv)MTHq?t>8TgAPH9uQt3|@8uePK6phxCR`<) zRGyX@ENv~8({(KclD?Udwa4TUO0|hzRDD6Cg{|Uc>QYj=L!#~DPf*c=_ceD;SEFbW zYq8rbb|7Qv2ZfMZgBt^Y1gDQAcDC{6-8yOr*XLS`>+Y`{)UTC3MG=Onp<=4iy`MCl z8W3gn{$f(=GzD}1g8%}MjkvMqq9>>O0sA4C9TE0ZPr%5%b(Y*n(1G(oLvK)x{h5#B zqw}NJU=Z9*7_}C-d-6plR$scqQR4m!U-Y$z9b@^kpl;vrumYnl+p+Fm{_}0|%8>Ce zU^rcad2Yh%tEe`bo1}GQvjAxyjUC_e76oE@%pKInDfJ8WU8bHk)*B}Xz+lX&uqIvr zrH>q2>HXuJ6nRSlEa@Pa^k8U6wBZtE`sVA=px+_bCNJ$#_n@}&bjc)ZdWp;sOxp^c zX`HZ_=~|W??>o2k>_DYO-Vx~FVB-g4?HTu+c6AeET}K?{oE3PzvVFyXT|(y~Lj3r? zcd8HMOd5o?9Av-v+I1I(jn>Zcwr;`vZ7$#}cJ+mBEChggS!s4-wst>+*mX7FU0qOD z%M_Yw^1d-A20XgsX0reqa5N3)*d;a8g{U?3%EE z77S!irQLVt6|A6I58_uC9PUfGuRmHWz4Q9uM8)6#aIkm((NAd_Wb2IhTui+d#BuY= zXyr7h`wwR*AMNwOBS+-Lct8-mOf!1flE) z;>{KpY%tjx&l)|CUB&tsTkxh4DwVyRNigQGFgWvE8s_!!_9PZ-9#N3nIJr@r0!JKL z$DA^Cy|KMQ_h5VRY*bcdh4?@`U~Ck%1*I9vGswG4E^y9r!32UU5CF}LV_r}{hAOnV z_l627Sh}UHBa8TbX$NB8(!(yxMUKez&$>~D6Sk!`;%r00$@#LDCnINq0s(aJK-=3~GVriYAWQXGMJ8$Pf~Eea9OUVjD-;sO zL+`7Sd)d2^`^i0^eO7a^%U@y_TJC65S%k+F-bFHL47g*huFD={peD#I?L zw1Io~Zsy_oOAhcfFk!uvrErQl?dT{?CNkY>o&>P5MFk8Nywi?D?E3B%&K%fRY*1cQ ze*`v2@@aoDKz#w-h#5EBc8Z0(J@7?aZPNNq*LUTf?gpHeq(KWDq3YCM@=Qsuk2Ibd zj%;FimScaJ!i7Z{S3!B)hB2lBWD{V>973*y2e-vd(3-b~RzjDrBy(Af%qzlRkA4U8 z^!KTV`|v9M#Gkl}rSkTQrKprl4&QG!2W$@u=IoSyrn-5%=98qG(48gqRk2O>)o!Fr zzhQ3n+cemH85Mu4Pt3(!6?XX&RFaxUuA737TfM&V8=ng~x3ddoZBK7?@O7>@EXa&% z6^YJr+A%b5r+$mz8Au*_`lckp4j?&|3HCv8P2h?U#hGyf8L{T)Yh0*OJe`OT3Yw&Tpqdk0@E> zVAMPaVBP+thLt{EHO$*iV|%K3d0}DTN|Z`)t;u>eH8RfFh{fK-{>RqixU)>r(+L0ORGpgG#tsqY%KU5e5W+V)Jx?^7)`zUHM|!ddDbLI4j;Vu(;dycC*<)$inB+JqaOKxh=+`;-u+INt?BS zCXVeF`CY2|NhAa?0F9Co`bn;@J1+w%m$+3}3LOQhQxZ}$Wd^JeClMusmdWa_9V?2o74aaOe_oc}*3z%buMq}Xv(i&Qq@cFxUC-01#?(OVnjENsV3d?`iKbRpSYK&fQXDzZT<4vc2 zRY{=%-`T^U+@4Bh)^E-~Y`@5mqkAQb2o7NDj$ekWYltT7rHYfJA9ew>m(u6IKZG}9 zi>NR)VMU!y!&}2weDkwx){=i%(EaFDttRY9AldS3F#D)e7G zL8{yMd(RLTMA#2#Fv~3sSLSDUBT@c1>%=kT z1_9L4|!cxuO} zjJP%vMl3ZEb=n&%Umu&~egpb0Huo9K7c@X{cKsN07XeO|H{yK@0RTz)z^w()vL^!+ zXnob$Ms|8Q?{SoqP;8e}-l6FV|J9`mfq{P!uzIEu`Na+3Kxfj&lM&HtZ-_>iYywd zjom(MH>1#Fy(RC008l%V3ImD9v8;@e7-zd-E2K;xT4FzosWG~(F2NLWl42-xz92G( z04x(|7EX9wC$B}69n@c1iSWr)jjjFq%3OYE-YeW}o5r&t5=>TdUY7FDJ?h^*Y`10M zv#YnKgI#>a6lc8oS;p@jwB%j-PeOj;iEF`UB>4jD^Zu#-#+8nzKiW0?)hpWhnBHIh zv9S$z*;_@gMPx(HQEh3iCT!f9;97EzD47ZnbY7s9022&6)JH*^h$RrfOiR!m zQrToe3(9~quH9M&LZd%6A5G!c62xlM5RpE-a$}PXHoU>rpm2lmR`@T*BPFvwV+#Wm zah9e9fGR{-(cX+W@(7}>p@fJNsu}af@Y}jL4ZSIc4C}edW1>m$5l6C!?w`<2Kk2TS{z+hy|L^MK%pGg7V-HX#1VHu65sWW!hSRN+Ha1+J z?zY9(Ka5qy3DdE0yiwwtEOWX^M$q6#uh*|5w?e^kp46RuPI5`xoDiNYW50p=qDcQk zfqxX5B7?O9y~bChjzu}DQc}SgA@7cg9Y*$|*@P6fAc={+mk(*$`wAh&TSZr5ubhJH zM&R~5eT98>+&a127+y|CJhF|q znx5YT!y46)f%>^yt?IZGxg(RZH)6rMlfg^MmcBLZp7ZqVVHi@m#O^ z{f+EgywYUUEZ{KFH-=S~TF!=Ed!Kh*8w=b>mD(9dr~NY8C$d%4&62EY#)E&ePYk#V z_MItR)?0Y3v%P%0%=DSCjIdaIUm@{_i+4W|>lofAs2c-k`G#vvw5)uu%xUII&?_78 zUDmrHjBxSGkC!{2%yQM`#P|I#@8QAyqBM^wre{3GO{IHxMQw$H%v=We=)?fdR4M=< zct`kH7|rrA3aYb(woNnr5WtxFOwY=xD%`g)YVA~jcE$s!h9_!4yavT%AO zGqq3XUqG}cDaY0$W3LVZ#x9LvE&a z!SR)1V_&wt7oocYrbNdv5*%5#rhu!KF=gl;os;Fvav=KyQ)9?X&zQ*6R%;w6nR0+; zFiaNSwKn;{ux@Q=bF(q|I_|u*-^n-nF&qL2*SwK|0HmQ3GL#P^KG>at2gQ(qnbfKg zceI2;lDeH|oBLuI;ND<6@F1zaW4Y z-YTl3{#=vXNKR?Jj*?ydicwUY%nn+nsc@Dy^)kL;)}ROnV_CkG`=b1;8T=BI06H|86uZb$*sI031?+(?kI2CxOass!^}XJi zZdWdzZN1p@2UBMc7TV)s7@F2Em6_D6G09i)2rsu=-Q>cKYGVj3jgsWxYzKEGgJpoM z>N2>1|K?yIb5DjIxBvtIbk9+!`JHXkC&Mo2vU>x-znR~;+gdqVLG1#d{%?!JL;ax` zVm@3D!JQbIo7V%+Mgq;UX~L01(voG=#}tySYT<%9YfEY$FJ+{Z%}K?)#57}+)=M=7 z*yr3A<6_nndCHJT1)>G68lEM82gy$d@UO-nmM2tCL_}Jr3|l>k%nk@O!e1`d4C*S> z!&~IWs*}_n`gH~7nZ1gA=Z(f5Wj1ImZf&yg`0%aFG$MjMBrP#v4&8Q+V&~gO^Y^#r zgjGzI2o`4!lD2S-yW^kui&v$0<6NpW7^kAK#H$^9fY`53lxX`Su8tKPF=8q+xCB-$ z1QQk3cs+$#2FdG9$%>~r+F4%xWT&N*^8Vq73ftTBF3m`Tyt&b@t`WaeSdN!!MmM); zQNvWYoL+z^b~+?}L$L130QAhXE$(2-ug=)9TooqxBqo*C(Ea0O^bT|N3$=0X-Q(%z zshaSS-Abpmg^GuXQ!z$C~jY=xk@aVhg zbDZ)Noyzyib(+JKke0bRvnwVlb<<99wSP+MQj(vy=*6^S9`EAo*J#h;?Tw8=0+Fff4QF^ z22m85u?@IBoI1B*13~U8b90GS9Z_WUZ!l#N^&8frJkq7j--aWvMz($IW{0C^8jFWT zFb7(p?UG^eTpYo-w+A1HFU4P%z9gVsy}W%d>y0@sAcwG8&ORQD7`lp{*UPh%7LWG1iw1V-O#YMwd_y3PL`?VOEGCnX1?|Yvz_pbq9~On(sOeR%<)6tV1EU| zOqT#)-+iml84I}(G8uF z$^vtZ`3?E$sPvnvPi@vNya{N`c{92L|UK< zs@)6m@ki>hd!s*RsKX2C`$6k0W-`r{e)-c%wP9L7SaFh zny6+E2996QBEh>a1)+)32ET$%6oaBT9}8y}Bm1~`CfpUiC?5kU`;s;vFx1(9>P@#Qm*rSFtLtCetRYtE0- zQ{wq;M8XlF26JImwnTc|g?EPd`!;)cuKfDq#!<~Goi9VPk@l)DG$}#9j>G%}M>6he zn8LSsXl7#0YGo;LoCKqk2*cM;XGz*jP53m^Utbh5)Z0xGlXuQ=MmcOEkQ|5{NFO$R zVVb-#ovxuHu?Z-G)JHdsG_q#|MBADk z91phWzM0Rmkml<6Xy8g^#L|#|HBGaW4;YcG5>~Gn5Pn;Bm8D`$8ojsu=H7H(rkAYYg2~)o`T>56m#!GK{$Ld9Tj*mjY+ph=;&b3xYbPB}SJY3@X(>r;1drPAVh?7U+K#N>x}WZ6FpY zd9<~&ul_Z4@}nhs<`@KRJ-L5j-N?b};`D#DcP8*qZhr$G zNsFY?u4HLs$yRA22E`bZER$r*PB*&Qg^*+oNfX8_ z@0l6Qm|K1P-}m;u_r15LnU8tS%T^|=vO?%UPZ zWPL>pXp$PQPd3}bD3vLbBA#0rLQ<+q)y~@e_uEU5v-&tkMBBINBk_!NeMI7X)CGrw} zf|>iINaVho;e9j3K`s)(DuN9&#eXTx;*`I$g=bTPsj?JGI+auhBY$y$ktcMiWHBPF zA%ker>+wFpg!(FhGM-+u^LNq~W!xteFV5m4mXchvb2#C&7G)D*5vqauux2Nkw11q` zK^>Qt6*z??5BXDqdPb_DC?D#lI@ClkZ!spnW+)QYcHnaiVO*kXq>e}6B$C|Pjhai0 zSD~PZ)(Mhr-Saa#WxGdSDfZsP_BD2!Xi>H*!^oo#{4phU-6nlGL0z)R2^4HeGmaEV z68-YvG^V7v+nb}Z2t^9!&BvHhKcw3nL6HmyX_PhMBSdTh(uGKZFOP5}hgcw8`Vu&8 z%&Cz4zWwASDqXej4mEgdrPbE{>CZF43zyq%S2=+%Kqa@m(xYc#S8Ip#7Yo^8u_|~2 z;s5Pd(J&qXRiuBq4ZncXxBd+1SGx4rMbnHT6Ggh8N88g|(Wl!LAU z-Jw$jsgze}nlgvvRSkF{FaTY5(YhXoDGM+hKdJ6d%VgT=e}!EpTjt--VSlM&aLIs8)L7uVU18ME+yY*-v2*xoN}X<{MPql3%!G+5 z@_}-j4r*WzP*o%2F@?%)DzIU(S=M{ zmU&hKVqVbR-76>7l9xgGe7#R*vSw6Dm z!2!_Ef9TjuDyN34U#Jdm#^k=C=X)q>hiG+%q>~q2HDv03 z#5Rmp97B7gqX9k?gSVsW@^26u*COW=y$B!r>KZ1ndUzP-9wt}9Q3L7dq1GQ#wxIV@ z{FH$rh$jhne4-*&D-LaE7_}oERAOI00vdmII!Wv+xi1_W6T#a&WxCyYghlUTCJ;gb zxzk{GiyU(;1snTGTX%gi?_2%2_sn!gbtZyb#f82LS&|gLjQ5GAJU%hyy1|!3iS`)@ z_>0(z)BxrW@Y<(%B6%C9^mwQ(J1myidvrRJ!Y_Qd`I__lGbNq0uIVA0T0|`%l(UmX zPu~#3+b}I^5Uzc(Z~Aw)DpEl#o5?CPSpOcMs4!&_?>@KQgVQ-E67oGWUSRNPDQl6b z)$zWj3Wn1~KAH3}1>N|!rE&k|D zMnzFLn923NA79COzpB{NUu%&tg8Sl4!f8{P4T0VZOcn1Qy`z}Q=p(%^nQBdn^qyg= z{rnTfesZt(m-Wvp5DJN)L%));T*16xRwu3DSkEo!T)&D5uP7M}wAbK7!*Gdt>hmip z@g{Ag4MTOvg7si@Qe#vx;Tk0aM|(LJ`lBdf16A{V;e+NJL6y)`My|jQU4` zki}f+Ks~XAN?u7VB_c{IRMB1z{vY2fQrA(6v{p+Za$1SmsA5ay5!u5r-PDDe*YLCo zJ)VtwL(Hk`haJoezeu{Fg0IV}I9;sXZ+(N%lT$P9UjcTa{yQDVyQBsD8(>BQaIp9DSssIDfr^wMjnb1->g)Lv{v-NeX-vk{S{udv~K z<+>C4(Nx@gCc>QmL`oq>lhX78f0Bt-pE7#VXNi!#gvHFvW*g zO^F77ZRaOq!od@JBKu@5el_ZBBts3x6#(=IFX!-jog`{vhs9a0?zSG&&dRLQ`>k1SDWrY0j1o{=XjK{g;dQx$ zduQpZ9eYw*O$Qu(yCYVz@cH_CRm6^pg;1Vmq2=MyW^ZdiV6 zSbW&eiEOZa;>NKU|01C*>j-yGix$gbzC7>3=IS1_;+7qdEzcHk_Vz=PLX#_0h+=OV z`-D$@eMgE~f8DvXCOaiATZBhH(nY8Y8sOBB_q+S`m<5*QcR#<{I47dul{xn-)V1;h zCyIGZ=ML9z+>}#rJ=gO|oUl~N)fexzvK|_};P=12Mx*;qLcP6fd9nQG_1pGsoA>-! zrBLNP?z_<*ukRl>K6ov0PO^P6f4Ls0kS1u~;| zUkJQ!-0J04Ss8q|-d)x--%agw_^Tl-|B-h{DvvaU>zbL`u;}O94Jbe2=x@fp^RYJXHwZb8>4`-W3OXJ5cp|Sj zb>M-QrH}<2)0;|Jy1LRzCX_UnL;NOWdRry{`Bxq(hGou8Docxv`e27k0)(CPLRP^g z7Pu`46J76X{_&1dpYN-tc=XGm-h?j|Tkl(QF1{2Qy~xGxM%(4KkB3cR(a)L#PB?t2 z5?lf=nXj-#qVH5!TgCG-`!)~g3CXBhxsfI9r2bE2#bw3@XGQ0B-wE{Eh7-c1skWo% zX!Tw&Z8WV6l@@h#7%8<`yXm%EWeuM^mr-&p^bCAXyqZFWuPP3CeX!R;-5{c#{LtxC z#$nkNcZ6?QNeQnHZeJ5L^dwDYy+!a%^^P>micRR(mtDhxx4*FIe7oKLFC-fsL4g68zZtH`AmfI9# zKc#Eh=M_V88j4J+78N{oaGCf6@5VXr3VEau*C?ygXFi&<`g+`5G_myjhPO$ScZ1m1 zQczWISWSeLf#xEKp_3@oMBw2&yAL&xe1uQ%I#&1?XFTw0KHdLl*k)IU#l5Fy+2##{ z8&@cUR`KVaplFbM@;LaW0JN%QtS!pg#ohK-lVV;yLeaGc9?7k^Ftq>F#ne}qvpGYh ztf9y9(SiGTo)o4jsl0EL8Msn5F~(B@k+s`-RHgIL^DgR(2X#1Yc$~Ibr6&ZmEJ{6Hp8PsbW7&)!)ukKArCvBI!g0AZ`9<~k~m^JZabnO#C3i> z_sbsfemP&OWyjxT^U7DQH5PA)c3r7-LAuxt!-d848NQuInAk>C_VIDb=9e_{7CmEg zYsEszD&e?m+#l=3!`{^omc(0JO?FXCmDYd!Xb#-^-tL+Y$40G(&KU)AwOLo(c2?@< z6{DP8#ohV-D>pUfR)th1lKj-TW$C~cCHec*c~48*vX+M?|u_&+k?~_Lk za@NIxga}G|viXn|1uDh6h}8VLf0LB*whdgy_l7^TMU$sPDs#+{2Ght>iv~p6zFHN5 zN}A2X=+l^9p?xyh>*DNb>+ES^=;LbZVMeR82eoGc9L78o!6tB!4v+zupk_G;U8QuU}XmwVu8gStj8EQoi5UTOAoM%=48Pb zC*Ld{dpHLsP+O7($JnLYW776?qcM`Ue%JQjC+lsV4f*>^n;{2}ixYyU#Sc zjo8)pK=P<<~ki1eBPfkwmuuIRp gb!C;FU(O;ubt8LFn~S!T3L*jiA;Ewb^MrQxU#>KT$^ZZW literal 0 HcmV?d00001 diff --git a/docs/introduction/naming-conventions.rst b/docs/introduction/naming-conventions.rst index fab4ae5f..c0a17fd3 100644 --- a/docs/introduction/naming-conventions.rst +++ b/docs/introduction/naming-conventions.rst @@ -30,3 +30,21 @@ battery system are illustrated in :numref:`battery-elements-naming`. of a **battery pack** and a **battery junction box (BJB)**. The BJB contains the elements used to control the current flow like power contactors and fuses. + +The BMS consists of two main components, + +- one **BMS-Master** and +- one or more **BMS-Slave**\ (s). + +Generally, the |bms-master| is connected to the |bms-slaves| via an +communication interface. +The |bms-slaves| are wired to the battery cells of a module, so that the +|bms-slaves| are able to measure specific physical quantities on the module +(see :numref:`bms-components-naming`). + +.. figure:: img/bms-components.png + :alt: Naming conventions for BMS components + :name: bms-components-naming + :width: 100 % + + Naming conventions for BMS components diff --git a/docs/macros.txt b/docs/macros.txt index 29b7120e..1d10613d 100644 --- a/docs/macros.txt +++ b/docs/macros.txt @@ -3,7 +3,7 @@ .. |timestamp| date:: %Y-%m-%d %H:%M:%S .. |foxbms| replace:: foxBMS 2 -.. |version_foxbms| replace:: ``1.6.0`` +.. |version_foxbms| replace:: ``1.7.0`` .. |foxbms.org| replace:: https://foxbms.org .. |docs.foxbms.org| replace:: https://docs.foxbms.org .. |github_foxbms| replace:: https://github.com/foxBMS/ @@ -20,7 +20,6 @@ .. |doxygen| replace:: Doxygen .. |version_python| replace:: ``3.7.x`` -.. _Miniconda: https://docs.conda.io/en/latest/miniconda.html .. |conda| replace:: ``conda`` .. |condarc| replace:: ``C:\Users\\.condarc`` .. |conda_env_config_win32| replace:: ``conf\env\conda_env_win32.yaml`` @@ -39,11 +38,6 @@ .. _HALCoGen: https://www.ti.com/tool/HALCOGEN .. |version_hcg| replace:: ``04.07.01`` -.. _LLVM: https://releases.llvm.org -.. _github.com/llvm: https://github.com/llvm/llvm-project/releases/tag/llvmorg-13.0.0 -.. |version_llvm| replace:: ``13.0.0`` -.. |path_llvm| replace:: ``C:\Program Files\LLVM\13.0.0`` - .. |version_pcan_symbol_editor| replace:: ``Version 6.5.2`` .. |version_sym_file| replace:: ``Version 6.0`` @@ -58,42 +52,6 @@ .. _Visual Studio Code: https://code.visualstudio.com/ .. |code| replace:: ``code`` -.. _C/C++ extension: https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools - -.. _C/C++ extension license: https://marketplace.visualstudio.com/items/ms-vscode.cpptools/license - -.. _Python extension: https://marketplace.visualstudio.com/items?itemName=ms-python.python - -.. _Python extension license: https://marketplace.visualstudio.com/items/ms-python.python/license - -.. _ASM extension: https://marketplace.visualstudio.com/items?itemName=maziac.asm-code-lens - -.. _ASM extension license: https://marketplace.visualstudio.com/items/maziac.asm-code-lens/license - -.. _Linker script extension: https://marketplace.visualstudio.com/items?itemName=ZixuanWang.linkerscript - -.. _Linker script extension license: https://marketplace.visualstudio.com/items/ZixuanWang.linkerscript/license - -.. _Code Spell Checker extension: https://marketplace.visualstudio.com/items?itemName=streetsidesoftware.code-spell-checker - -.. _Code Spell Checker extension license: https://marketplace.visualstudio.com/items/streetsidesoftware.code-spell-checker/license - -.. _YAML extension: https://marketplace.visualstudio.com/items?itemName=redhat.vscode-yaml - -.. _YAML extension license: https://marketplace.visualstudio.com/items/redhat.vscode-yaml/license - -.. _TOML extension: https://marketplace.visualstudio.com/items?itemName=bungcip.better-toml - -.. _TOML extension license: https://marketplace.visualstudio.com/items/bungcip.better-toml/license - -.. _Test Explorer extension: https://marketplace.visualstudio.com/items?itemName=hbenl.vscode-test-explorer - -.. _Test Explorer extension license: https://marketplace.visualstudio.com/items/hbenl.vscode-test-explorer/license - -.. _Test Explorer Ceedling extension: https://marketplace.visualstudio.com/items?itemName=numaru.vscode-ceedling-test-adapter - -.. _Test Explorer Ceedling extension license: https://marketplace.visualstudio.com/items/numaru.vscode-ceedling-test-adapter/license - .. _MISRA C: https://www.misra.org.uk/ .. |soa| replace:: *SOA* @@ -123,17 +81,14 @@ .. |nxp-mc33775a| replace:: NXP MC33775A .. |adi-ades1830| replace:: ADI ADES1830 -.. |master| replace:: foxBMS Master Unit -.. |masters| replace:: foxBMS Master Units -.. |slave| replace:: foxBMS Slave Unit -.. |slaves| replace:: foxBMS Slave Units -.. |bms-master| replace:: BMS-Master Board -.. |bms-extension| replace:: BMS-Extension Board -.. |bms-interface| replace:: BMS-Interface Board -.. |bms-slave| replace:: BMS-Slave Board -.. |bms-slaves| replace:: BMS-Slave Boards -.. |bms-12-slave| replace:: Slave 12-cell board -.. |bms-18-slave| replace:: Slave 18-cell board +.. |bms-master| replace:: BMS-Master +.. |bms-interface| replace:: BMS-Interface +.. |bms-slave| replace:: BMS-Slave +.. |bms-slaves| replace:: BMS-Slaves +.. |bms-extension| replace:: BMS-Extension + +.. |foxbms-bms-master| replace:: foxBMS BMS-Master +.. |foxbms-bms-masters| replace:: foxBMS BMS-Masters .. |I2C| replace:: I\ :sup:`2`\ C .. |SPI| replace:: SPI diff --git a/docs/misc/bibliography.rst b/docs/misc/bibliography.rst index 5d64b3e4..76cad453 100644 --- a/docs/misc/bibliography.rst +++ b/docs/misc/bibliography.rst @@ -6,28 +6,6 @@ Bibliography ============ -.. - Comments: - Bradner is the author of RFC2119 - Leiba is the author of RFC8174 - Michael Medoff and Rainer Faller are authors of a book published by exida in Sellersville - MIRA is the publisher of MISRA, published in Nuneaton - -.. spelling:: - Bradner - Leiba - Michael - Medoff - Rainer - Faller - exida - Sellersville - MISRA - MIRA - MIRALimited13 - Nuneaton - Limited - .. bibliography:: :cited: diff --git a/docs/misc/indices-and-tables.rst b/docs/misc/indices-and-tables.rst index 9b458d14..510c8140 100644 --- a/docs/misc/indices-and-tables.rst +++ b/docs/misc/indices-and-tables.rst @@ -7,6 +7,6 @@ Indices and Tables ################## -* :ref:`genindex` -* :ref:`modindex` -* :ref:`search` +- :ref:`genindex` +- :ref:`modindex` +- :ref:`search` diff --git a/docs/software/api/overview.rst b/docs/software/api/overview.rst deleted file mode 100644 index 66a5b4ea..00000000 --- a/docs/software/api/overview.rst +++ /dev/null @@ -1,21 +0,0 @@ -.. include:: ./../../macros.txt -.. include:: ./../../units.txt - -.. _API: - -*** -API -*** - -The API documentation of the embedded software is found |doxygen_src_link|. - -The API documentation of the unit test implementation is found -|doxygen_tests_link|. - -.. |doxygen_src_link| raw:: html - - here - -.. |doxygen_tests_link| raw:: html - - here diff --git a/docs/software/architecture/img/axivion_architecture.svg b/docs/software/architecture/img/axivion_architecture.svg index 2ef2ee2f..82dbd76c 100644 --- a/docs/software/architecture/img/axivion_architecture.svg +++ b/docs/software/architecture/img/axivion_architecture.svg @@ -3,39 +3,39 @@ viewBox="0 0 707.405 537.379" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.2" baseProfile="tiny"> Architecture (Hier.) -Exported from Gravis 7.4.7 (2022-11-09) +Exported from Gravis 7.5.2 (2023-02-10) @@ -54,41 +54,41 @@ font-family="Consolas" font-size="10.6667" font-weight="400" font-style="normal" @@ -107,17 +107,17 @@ font-family="Consolas" font-size="10.6667" font-weight="400" font-style="normal" - - @@ -125,28 +125,28 @@ font-family="MS Shell Dlg 2" font-size="11" font-weight="400" font-style="normal - + -Power Supply +MCU - - - @@ -154,28 +154,28 @@ font-family="MS Shell Dlg 2" font-size="11" font-weight="400" font-style="normal - + -FRAM +Interlock - - - @@ -183,28 +183,28 @@ font-family="MS Shell Dlg 2" font-size="11" font-weight="400" font-style="normal - + -Temperature Sensors +ADC - @@ -223,17 +223,17 @@ font-family="Consolas" font-size="10.6667" font-weight="400" font-style="normal" - - @@ -241,28 +241,28 @@ font-family="MS Shell Dlg 2" font-size="11" font-weight="400" font-style="normal - + -SPI +Temperature Sensors - - - @@ -270,28 +270,28 @@ font-family="MS Shell Dlg 2" font-size="11" font-weight="400" font-style="normal - + -MCU +Common - - - @@ -299,28 +299,28 @@ font-family="MS Shell Dlg 2" font-size="11" font-weight="400" font-style="normal - + -Measurement +DMA - - - @@ -328,28 +328,28 @@ font-family="MS Shell Dlg 2" font-size="11" font-weight="400" font-style="normal - + -Common +Power Supply - - - @@ -357,28 +357,28 @@ font-family="MS Shell Dlg 2" font-size="11" font-weight="400" font-style="normal - + -Analog Front-End +SPI - - - @@ -386,28 +386,28 @@ font-family="MS Shell Dlg 2" font-size="11" font-weight="400" font-style="normal - + -ADC +Contactor - - - @@ -415,28 +415,28 @@ font-family="MS Shell Dlg 2" font-size="11" font-weight="400" font-style="normal - + -Interlock +CAN - - - @@ -444,28 +444,28 @@ font-family="MS Shell Dlg 2" font-size="11" font-weight="400" font-style="normal - + -CAN +Measurement - - - @@ -473,28 +473,28 @@ font-family="MS Shell Dlg 2" font-size="11" font-weight="400" font-style="normal - + -Contactor +Analog Front-End - - - @@ -502,28 +502,28 @@ font-family="MS Shell Dlg 2" font-size="11" font-weight="400" font-style="normal - + -DMA +FRAM - @@ -542,41 +542,41 @@ font-family="Consolas" font-size="10.6667" font-weight="400" font-style="normal" @@ -595,17 +595,17 @@ font-family="Consolas" font-size="10.6667" font-weight="400" font-style="normal" @@ -624,17 +624,17 @@ font-family="Consolas" font-size="10.6667" font-weight="400" font-style="normal" - - @@ -642,28 +642,28 @@ font-family="MS Shell Dlg 2" font-size="11" font-weight="400" font-style="normal - + -SOX +BMS - - - @@ -671,28 +671,28 @@ font-family="MS Shell Dlg 2" font-size="11" font-weight="400" font-style="normal - + -BMS +Plausibility - - - @@ -700,144 +700,144 @@ font-family="MS Shell Dlg 2" font-size="11" font-weight="400" font-style="normal - + -Plausibility +SOX - - + - + - + - + - + - + @@ -856,17 +856,17 @@ font-family="Consolas" font-size="10.6667" font-weight="400" font-style="normal" - - @@ -874,28 +874,28 @@ font-family="MS Shell Dlg 2" font-size="11" font-weight="400" font-style="normal - + -Diagnosis +Database - - - @@ -903,28 +903,28 @@ font-family="MS Shell Dlg 2" font-size="11" font-weight="400" font-style="normal - + -Database +Diagnosis - @@ -943,17 +943,17 @@ font-family="Consolas" font-size="10.6667" font-weight="400" font-style="normal" @@ -972,41 +972,41 @@ font-family="Consolas" font-size="10.6667" font-weight="400" font-style="normal" @@ -1025,17 +1025,17 @@ font-family="Consolas" font-size="10.6667" font-weight="400" font-style="normal" - - @@ -1043,28 +1043,28 @@ font-family="MS Shell Dlg 2" font-size="11" font-weight="400" font-style="normal - + -fassert +core components - @@ -1083,17 +1083,17 @@ font-family="Consolas" font-size="10.6667" font-weight="400" font-style="normal" - - @@ -1101,28 +1101,28 @@ font-family="MS Shell Dlg 2" font-size="11" font-weight="400" font-style="normal - + -core components +version information - - - @@ -1130,98 +1130,98 @@ font-family="MS Shell Dlg 2" font-size="11" font-weight="400" font-style="normal - + -version information +fassert - - + - + - + - + @@ -1240,17 +1240,17 @@ font-family="Consolas" font-size="10.6667" font-weight="400" font-style="normal" - - @@ -1258,28 +1258,28 @@ font-family="MS Shell Dlg 2" font-size="11" font-weight="400" font-style="normal - + -Task Setup +OS Interface - - - @@ -1287,1136 +1287,1136 @@ font-family="MS Shell Dlg 2" font-size="11" font-weight="400" font-style="normal - + -OS Interface +Task Setup - - + - + - + - + - - + - - - - + - - + + - + - + - - + - + + - - - - - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + diff --git a/docs/software/build-environment/build-environment_how-to.rst b/docs/software/build-environment/build-environment_how-to.rst index 64088e1a..343732a9 100644 --- a/docs/software/build-environment/build-environment_how-to.rst +++ b/docs/software/build-environment/build-environment_how-to.rst @@ -8,62 +8,37 @@ Changing and Extending the Build Environment If packages are needed that are not included in development environment they can simply be added. -This how-to explains it for Windows. -If there is a reference to |conda_env_config_win32| and you are on Linux -replace it by |conda_env_config_linux|. -The basic required packages are listed in -``conf/env/conda_env_win32-pkgs.yaml``. -If a package should be added or removed, it needs to be done here. -This file only defines the major Python version that should be used. - -The steps are basically: - -- Add new packages and/or remove no longer needed packages and update the - environment name, for this example ``example-env``. -- Create a new pseudo-base environment that includes all needed Python packages - for the project. -- Export the exact environment definition. -- Update the test suite. -- Commit the new environment to the repository. -- Add a changelog entry that tells the user to run the environment update - script. - -These steps in details: - -#. Add packages/remove packages and update environment name. -#. Create a new pseudo-base environment and wait for the solver to succeeded. - - .. code-block:: console - - C:\Users\vulpes>%USERPROFILE%\miniconda3\Scripts\activate base - (base) C:\Users\vulpes>conda env create -f conf\env\conda_env_win32-pkgs.yaml - -#. Export the new development environment: - - .. code-block:: console - - (base) C:\Users\vulpes>conda env export -n example-env > conf\env\conda_env_win32.yaml - -#. Remove the ``Prefix`` entry from |conda_env_config_win32|. -#. Adapt the test suite as needed and run it afterwards. -#. Commit the new environment file to the repository. -#. Add changelog entry. +- Chose a new name for the environment +- Create the new virtual environment + ``py -m venv %USERPROFILE%\foxbms-envs\`` +- Activate the new environment. +- Install the rewquried packages in the environment using ``python -m pip install ...`` +- Run ``python -m pip freeze > requirements.txt`` +- Update the license list in ``docs/general/license-tables/license-info_python_packages.csv`` +- Commit all changes. +- Add a changelog entry that tells the user to update the environment. Existing Environments ===================== -+---------------------+-------+-------+ -| Environment Name | From | To | -+=====================+=======+=======+ -| 2023-02-fennec-fox | 1.5.1 | \- | -+---------------------+-------+-------+ -| 2021-11-fennec-fox | 1.2.1 | 1.5.0 | -+---------------------+-------+-------+ -| 2021-08-arctic-fox | 1.1.0 | 1.2.0 | -+---------------------+-------+-------+ -| 2021-04-red-fox | 1.0.0 | 1.0.2 | -+---------------------+-------+-------+ +Until version 1.6.0 |foxbms| used `conda` environments. +Starting with version 1.7.0 |foxbms| uses now `venv` to create virtual +environments. + ++---------------------+-------+-------+-------+ +| Environment Name | From | To | Type | ++=====================+=======+=======+=======+ +| 2024-08-pale-fox | 1.7.0 | \- | venv | ++---------------------+-------+-------+-------+ +| 2023-02-fennec-fox | 1.5.1 | 1.6.0 | conda | ++---------------------+-------+-------+-------+ +| 2021-11-fennec-fox | 1.2.1 | 1.5.0 | conda | ++---------------------+-------+-------+-------+ +| 2021-08-arctic-fox | 1.1.0 | 1.2.0 | conda | ++---------------------+-------+-------+-------+ +| 2021-04-red-fox | 1.0.0 | 1.0.2 | conda | ++---------------------+-------+-------+-------+ Further Reading --------------- diff --git a/docs/software/build-process/build-process.rst b/docs/software/build-process/build-process.rst index 4d514ad0..cd08060b 100644 --- a/docs/software/build-process/build-process.rst +++ b/docs/software/build-process/build-process.rst @@ -6,13 +6,6 @@ Build Process ============= -.. - Comments: - none - -.. spelling:: - SWI - This section addresses relevant steps in the build process that are important to know when interacting with it. diff --git a/docs/software/build-process/library-project_how-to.rst b/docs/software/build-process/library-project_how-to.rst index 56832c1d..b109b2d4 100644 --- a/docs/software/build-process/library-project_how-to.rst +++ b/docs/software/build-process/library-project_how-to.rst @@ -16,24 +16,24 @@ The following example describes the workflow. In this scenario partner **A** develops on |foxbms| while Part **B** should only provide a library to **A**. - **A** bootstraps a minimal development project. This minimal project is named - ``library-project.tar.bz2``. + ``library-project.tar.gz``. - .. code-block:: console + .. code-block:: powershell :caption: Bootstrapping the minimal library project - C:\Users\Partner_A\Documents\foxbms-2>waf.bat bootstrap-library-project + PC C:\Users\Partner_A\Documents\foxbms-2> .\fox.ps1 waf bootstrap-library-project -- **A** shares the archive ``library-project.tar.bz2`` with **B**. +- **A** shares the archive ``library-project.tar.gz`` with **B**. - **B** installs a |code-composer-studio| as described in :ref:`css_install`. - **B** installs a Python environment as described in - :ref:`miniconda_install_and_configuration`. + :ref:`python_installation_and_configuration`. - **B** builds a library by adding sources etc. to the minimal project as needed and builds the library. - .. code-block:: console + .. code-block:: powershell :caption: Building the Library - C:\Users\Partner_B\Documents\foxbms-2>waf.bat build + PS C:\Users\Partner_B\Documents\foxbms-2> .\fox.ps1 waf build - **B** shares the library and accompanying headers with **A**. - **A** saves the library and accompanying headers and adds the path to the diff --git a/docs/software/build-process/misc/libcc-options.yaml b/docs/software/build-process/misc/libcc-options.yaml index 57563f97..b75b3305 100644 --- a/docs/software/build-process/misc/libcc-options.yaml +++ b/docs/software/build-process/misc/libcc-options.yaml @@ -1,4 +1,4 @@ -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -65,7 +65,7 @@ CFLAGS: - --emit_warnings_as_errors # additional flags for the library foxbms: - - -Ooff + - -O0 - -DASSERT_LEVEL=0 - --issue_remarks - --strict_ansi diff --git a/docs/software/build-process/misc/libproject-example.c b/docs/software/build-process/misc/libproject-example.c index 744ece08..7d9c856c 100644 --- a/docs/software/build-process/misc/libproject-example.c +++ b/docs/software/build-process/misc/libproject-example.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file libproject-example.c * @author foxBMS Team * @date 2020-10-06 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup USER_LIB * @prefix SUPER * * @brief Example on how to create a user library that is included in foxBMS - * + * @details TODO */ /*========== Includes =======================================================*/ diff --git a/docs/software/build-process/misc/libproject-example.h b/docs/software/build-process/misc/libproject-example.h index 8054b544..9a1852d6 100644 --- a/docs/software/build-process/misc/libproject-example.h +++ b/docs/software/build-process/misc/libproject-example.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file libproject-example.h * @author foxBMS Team * @date 2020-10-06 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup USER_LIB * @prefix SUPER * * @brief Example on how to create a user library that is included in foxBMS - * + * @details TODO */ #ifndef FOXBMS__LIBPROJECT_EXAMPLE_H_ diff --git a/docs/software/build-process/misc/wscript b/docs/software/build-process/misc/wscript old mode 100644 new mode 100755 index bf9417fd..95ac55e9 --- a/docs/software/build-process/misc/wscript +++ b/docs/software/build-process/misc/wscript @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -44,46 +43,32 @@ import os -from waflib import ( - Build, - Configure, - Context, - Errors, - Logs, - Options, - Scripting, - Task, - TaskGen, - Utils, -) -from waflib.Build import BuildContext, CleanContext, ListContext, StepContext +from waflib import Build, Context, Utils Context.Context.line_just = 50 -Configure.autoconfig = 1 out = "build" # pylint:disable=invalid-name -"""output directory""" top = "." # pylint:disable=invalid-name -"""waf top directory""" +# name of the application. This is used in various waf functions APPNAME = "MY_LIB" -"""name of the application. This is used in various waf functions""" +# version of the application. This is used in various waf functions. This +# version must match the version number defined in ``macros.txt``. Otherwise a +# configuration error is thrown. VERSION = "0.0.12" -"""version of the application. This is used in various waf functions. This \ -version must match the version number defined in ``macros.txt``. Otherwise a \ -configuration error is thrown.""" + tooldir = os.path.join("tools", "waf-tools") # pylint:disable=invalid-name +# Files and directories that are excluded when running dist commands dist_exclude = ( # pylint:disable=invalid-name f"{out}/** **/.git **/.gitignore .gitlab/** **/.gitattributes " "**/*.tar.bz2 **/*.tar.gz **/*.pyc __pycache__ " "tools/waf*.*.**-* .lock-* " f".ws *eclipse* .vs* { APPNAME.lower()}/**" ) -"""Files and directories that are excluded when running dist commands""" def options(opt): @@ -121,11 +106,6 @@ def options(opt): help="Use a configuration cache", ) - opt.load("f_miniconda_env", tooldir=tooldir) - opt.add_option( - "--why", dest="WHY", action="store_true", help="Loads the 'why' tool." - ) - def configure(conf): """Configures the library project""" @@ -153,9 +133,6 @@ def configure(conf): msg="Checking for code snippet (library)", ) - if conf.options.WHY: - conf.load("why", tooldir=tooldir) - def build(bld): """Builds the library project""" diff --git a/docs/software/build/build.rst b/docs/software/build/build.rst index 8b0012c9..a209428f 100644 --- a/docs/software/build/build.rst +++ b/docs/software/build/build.rst @@ -8,31 +8,32 @@ Building the Application .. note:: - There are shell scripts ``waf.bat``/``waf.sh`` that activate the correct - build environment before starting the build process. - It is recommended to use these scripts to interact with the build system. + As mentioned in :ref:`FOX_PY` it is recommended to use one of the shell + scripts to interact with the repository, as these activate the correct build + environment and prepare the ``PATH`` variable before starting the build + process. If these shell scripts are not used to call the build tool the following steps are required: - activating the correct environment + - make all tools available in ``PATH`` - the current working directory must be the repository root - - instead of ``waf `` use ``python3 tools/waf `` + - instead of ``.\fox.ps1 waf `` use ``python3 tools/waf `` - The following examples are using the shell script ``waf.bat`` #. Open a terminal and change into a checkout of the foxbms repository #. Configuration of the project - .. code-block:: console + .. code-block:: powershell - C:\Users\vulpes\Documents\foxbms-2>waf configure + PS C:\Users\vulpes\Documents\foxbms-2> .\fox.ps1 waf configure #. Now all build variants are available, e.g., to build the binaries (``build_bin``) and the documentation (``build_docs``): - .. code-block:: console + .. code-block:: powershell - C:\Users\vulpes\Documents\foxbms-2>waf build_bin build_docs + PS C:\Users\vulpes\Documents\foxbms-2> .\fox.ps1 waf build_bin build_docs Waf commands can be concatenated and are executed in the order of their appearance. @@ -46,16 +47,9 @@ Important available commands are listed in :numref:`waf-available-commands`. :delim: ; :file: ./waf-available-commands.csv -You can profile the build process by running the following command: - -.. code-block:: console - - C:\Users\vulpes\Documents\foxbms-2>waf build_bin --profile - C:\Users\vulpes\Documents\foxbms-2>gprof2dot -f pstats profile.txt | dot -Tpng -o profile.png - There are additional commands that are not typically needed when developing. This and other help on the build system is obtained by running -.. code-block:: console +.. code-block:: powershell - C:\Users\vulpes\Documents\foxbms-2>waf --help + PS C:\Users\vulpes\Documents\foxbms-2> .\fox.ps1 waf --waf-help diff --git a/docs/software/build/waf-available-commands.csv b/docs/software/build/waf-available-commands.csv index 7b228c9b..50f7437b 100644 --- a/docs/software/build/waf-available-commands.csv +++ b/docs/software/build/waf-available-commands.csv @@ -2,6 +2,8 @@ Command/Option; Description ``build_all``; Shortcut to run all available build commands ``build_bin``; Builds the binaries ``build_docs``; Builds the documentation +``build_doxygen_src``; Builds the doxygen documentation for the sources +``build_doxygen_tests``; Builds the doxygen documentation for the tests ``build_unit_test``; Builds and runs all unit tests for the embedded sources ``clean_all``; Shortcut to run all available clean commands ``clean_bin``; Cleans all binaries diff --git a/docs/software/configuration/compiler/linker_pulls/example_linker_pulls.json b/docs/software/configuration/compiler/linker_pulls/example_linker_pulls.json index fc2946c9..298b29e4 100644 --- a/docs/software/configuration/compiler/linker_pulls/example_linker_pulls.json +++ b/docs/software/configuration/compiler/linker_pulls/example_linker_pulls.json @@ -1,3 +1,3 @@ { - "_c_int00": "src/app/main/fstartup.c.1.obj" + "_c_int00": "src/app/main/fstartup.c.1.obj" } diff --git a/docs/software/configuration/compiler/linker_pulls/wscript b/docs/software/configuration/compiler/linker_pulls/wscript old mode 100644 new mode 100755 index e1f4d690..f5746f4e --- a/docs/software/configuration/compiler/linker_pulls/wscript +++ b/docs/software/configuration/compiler/linker_pulls/wscript @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause diff --git a/docs/software/configuration/configuration.rst b/docs/software/configuration/configuration.rst index fb37b56b..2bb281cd 100644 --- a/docs/software/configuration/configuration.rst +++ b/docs/software/configuration/configuration.rst @@ -153,9 +153,7 @@ battery system that is built up need to be defined: However, the actual behavior of the battery system in the target application is highly dependent on the target application and can therefore not simply be configured through some switches. -This needs to be implemented in e.g., the -`BMS_Trigger() <./../../_static/doxygen/src/html/bms_8c.html#a954a05b20669dc00663c4f0f2a729fcd>`__ -function. +This needs to be implemented in e.g., the ``BMS_Trigger()`` function. It is up to the developer to familiarize with the hardware, code and documentation and adapt the source code to the application specific requirements. @@ -229,8 +227,8 @@ Battery Cell Configuration The basic parameters of the used battery cell of the battery system are defined in: -- ``src/app/application/config/battery_cell_cfg.c`` `🔗 <./../../_static/doxygen/src/html/battery__cell__cfg_8c.html>`__ -- ``src/app/application/config/battery_cell_cfg.h`` `🔗 <./../../_static/doxygen/src/html/battery__cell__cfg_8h.html>`__ +- ``src/app/application/config/battery_cell_cfg.c`` +- ``src/app/application/config/battery_cell_cfg.h`` The following parameters need to be defined (the links lead to the doxygen documentation for the explanation of the specific parameter) in @@ -251,8 +249,8 @@ Battery System Configuration The basic, top level view on the battery system configuration is defined at: -- ``src/app/application/config/battery_system_cfg.c`` `🔗 <./../../_static/doxygen/src/html/battery__system__cfg_8c.html>`__ -- ``src/app/application/config/battery_system_cfg.h`` `🔗 <./../../_static/doxygen/src/html/battery__system__cfg_8h.html>`__ +- ``src/app/application/config/battery_system_cfg.c`` +- ``src/app/application/config/battery_system_cfg.h`` .. csv-table:: :name: battery-system-configuration diff --git a/docs/software/configuration/without-halcogen/wscript b/docs/software/configuration/without-halcogen/wscript old mode 100644 new mode 100755 index f1fd3f45..70d616df --- a/docs/software/configuration/without-halcogen/wscript +++ b/docs/software/configuration/without-halcogen/wscript @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause diff --git a/docs/software/modules/application/algorithm/state-estimation/soc/soc_counting.rst b/docs/software/modules/application/algorithm/state-estimation/soc/soc_counting.rst index b1b86727..1c12beeb 100644 --- a/docs/software/modules/application/algorithm/state-estimation/soc/soc_counting.rst +++ b/docs/software/modules/application/algorithm/state-estimation/soc/soc_counting.rst @@ -12,17 +12,17 @@ Module Files Driver ^^^^^^ -- ``src/app/application/algorithm/state_estimation/soc/counting/soc_counting.c`` (`API <./../../../../../../_static/doxygen/src/html/soc__counting_8c.html>`__, `source <./../../../../../../_static/doxygen/src/html/soc__counting_8c_source.html>`__) +- ``src/app/application/algorithm/state_estimation/soc/counting/soc_counting.c`` Configuration ^^^^^^^^^^^^^ -- ``src/app/application/algorithm/state_estimation/soc/counting/soc_counting_cfg.h`` (`API <./../../../../../../_static/doxygen/src/html/soc__counting__cfg_8h.html>`__, `source <./../../../../../../_static/doxygen/src/html/soc__counting__cfg_8h_source.html>`__) +- ``src/app/application/algorithm/state_estimation/soc/counting/soc_counting_cfg.h`` Unit Test ^^^^^^^^^ -- ``tests/unit/app/application/algorithm/state_estimation/soc/counting/test_soc_counting.c`` (`API <./../../../../../../_static/doxygen/tests/html/test__soc__counting_8c.html>`__, `source <./../../../../../../_static/doxygen/tests/html/test__soc__counting_8c_source.html>`__) +- ``tests/unit/app/application/algorithm/state_estimation/soc/counting/test_soc_counting.c`` Detailed Description -------------------- @@ -41,3 +41,26 @@ made in the :ref:`cc-function-name`. :end-before: /* INCLUDE MARKER FOR THE DOCUMENTATION; DO NOT MOVE cc-documentation-stop-include */ :caption: Function implementing Coulomb-counting :name: cc-function-name + +SE_CalculateStateOfCharge +------------------------- + +Charge and Discharge Throughput can be calculated in two ways, depending if an +external analog current counting value is available or not. The algorithm is +implemented as follows: + +If analog current counting value is available: + +1. Calculate the charge difference between the latest and the previous current counting value. +1. Check current flow direction to evaluate if charge/discharge is ongoing. +1. Accumulate either charge or discharge throughput in |soc| database entry. +1. Save time step +1. Save current counting value + + +If analog current counting value is *NOT* available: + +1. Manually integrate current to calculate amount of charge since last call. +1. Check current flow direction to evaluate if charge/discharge is ongoing. +1. Accumulate either charge or discharge throughput in |soc| database entry. +1. Save time step diff --git a/docs/software/modules/application/algorithm/state-estimation/soc/soc_debug.rst b/docs/software/modules/application/algorithm/state-estimation/soc/soc_debug.rst index afbda8d4..4dcdba75 100644 --- a/docs/software/modules/application/algorithm/state-estimation/soc/soc_debug.rst +++ b/docs/software/modules/application/algorithm/state-estimation/soc/soc_debug.rst @@ -12,7 +12,7 @@ Module Files Driver ^^^^^^ -- ``src/app/application/algorithm/state_estimation/soc/debug/soc_debug.c`` (`API <./../../../../../../_static/doxygen/src/html/soc__debug_8c.html>`__, `source <./../../../../../../_static/doxygen/src/html/soc__debug_8c_source.html>`__) +- ``src/app/application/algorithm/state_estimation/soc/debug/soc_debug.c`` Configuration ^^^^^^^^^^^^^ @@ -20,7 +20,7 @@ Configuration Unit Test ^^^^^^^^^ -- ``tests/unit/app/application/algorithm/state_estimation/soc/debug/test_soc_debug.c`` (`API <./../../../../../../_static/doxygen/tests/html/test__soc__debug_8c.html>`__, `source <./../../../../../../_static/doxygen/tests/html/test__soc__debug_8c_source.html>`__) +- ``tests/unit/app/application/algorithm/state_estimation/soc/debug/test_soc_debug.c`` Detailed Description -------------------- diff --git a/docs/software/modules/application/algorithm/state-estimation/soc/soc_none.rst b/docs/software/modules/application/algorithm/state-estimation/soc/soc_none.rst index 218ed341..f026e71c 100644 --- a/docs/software/modules/application/algorithm/state-estimation/soc/soc_none.rst +++ b/docs/software/modules/application/algorithm/state-estimation/soc/soc_none.rst @@ -12,7 +12,7 @@ Module Files Driver ^^^^^^ -- ``src/app/application/algorithm/state_estimation/soc/none/soc_none.c`` (`API <./../../../../../../_static/doxygen/src/html/soc__none_8c.html>`__, `source <./../../../../../../_static/doxygen/src/html/soc__none_8c_source.html>`__) +- ``src/app/application/algorithm/state_estimation/soc/none/soc_none.c`` Configuration ^^^^^^^^^^^^^ @@ -20,7 +20,7 @@ Configuration Unit Test ^^^^^^^^^ -- ``tests/unit/app/application/algorithm/state_estimation/soc/none/test_soc_none.c`` (`API <./../../../../../../_static/doxygen/tests/html/test__soc__none_8c.html>`__, `source <./../../../../../../_static/doxygen/tests/html/test__soc__none_8c_source.html>`__) +- ``tests/unit/app/application/algorithm/state_estimation/soc/none/test_soc_none.c`` Detailed Description -------------------- diff --git a/docs/software/modules/application/algorithm/state-estimation/soe/soe_counting.rst b/docs/software/modules/application/algorithm/state-estimation/soe/soe_counting.rst index 95bb90c5..fec44586 100644 --- a/docs/software/modules/application/algorithm/state-estimation/soe/soe_counting.rst +++ b/docs/software/modules/application/algorithm/state-estimation/soe/soe_counting.rst @@ -12,19 +12,40 @@ Module Files Driver ^^^^^^ -- ``src/app/application/algorithm/state_estimation/soe/counting/soe_counting.c`` (`API <./../../../../../../_static/doxygen/src/html/soe__counting_8c.html>`__, `source <./../../../../../../_static/doxygen/src/html/soe__counting_8c_source.html>`__) +- ``src/app/application/algorithm/state_estimation/soe/counting/soe_counting.c`` Configuration ^^^^^^^^^^^^^ -- ``src/app/application/algorithm/state_estimation/soe/counting/soe_counting_cfg.h`` (`API <./../../../../../../_static/doxygen/src/html/soe__counting__cfg_8h.html>`__, `source <./../../../../../../_static/doxygen/src/html/soe__counting__cfg_8h_source.html>`__) +- ``src/app/application/algorithm/state_estimation/soe/counting/soe_counting_cfg.h`` Unit Test ^^^^^^^^^ -- ``tests/unit/app/application/algorithm/state_estimation/soe/counting/test_soe_counting.c`` (`API <./../../../../../../_static/doxygen/tests/html/test__soe__counting_8c.html>`__, `source <./../../../../../../_static/doxygen/tests/html/test__soe__counting_8c_source.html>`__) +- ``tests/unit/app/application/algorithm/state_estimation/soe/counting/test_soe_counting.c`` Detailed Description -------------------- +SE_CalculateStateOfCharge +------------------------- + +Charge and Discharge energy throughput can be calculated in two ways. + +If external energy counting value is available: + +1. Calculate the energy difference between the latest and the previous energy counting value. +1. Check current flow direction to evaluate if charge/discharge is ongoing. +1. Accumulate energy throughput value in either charge or discharge direction in |soe| database entry. +1. Save time step +1. Save energy counting value + + +If external energy counting value is *NOT* available: + +1. Manually calculate energy throughput since last call. +1. Check current flow direction to evaluate if charge/discharge is ongoing. +1. Accumulate energy throughput value in either charge or discharge direction in |soe| database entry. +1. Save time step + |tbc| diff --git a/docs/software/modules/application/algorithm/state-estimation/soe/soe_debug.rst b/docs/software/modules/application/algorithm/state-estimation/soe/soe_debug.rst index 898e1b1b..4968a31a 100644 --- a/docs/software/modules/application/algorithm/state-estimation/soe/soe_debug.rst +++ b/docs/software/modules/application/algorithm/state-estimation/soe/soe_debug.rst @@ -12,17 +12,17 @@ Module Files Driver ^^^^^^ -- ``src/app/application/algorithm/state_estimation/soe/debug/soe_debug.c`` (`API <./../../../../../../_static/doxygen/src/html/soe__debug_8c.html>`__, `source <./../../../../../../_static/doxygen/src/html/soe__debug_8c_source.html>`__) +- ``src/app/application/algorithm/state_estimation/soe/debug/soe_debug.c`` Configuration ^^^^^^^^^^^^^ -- ``src/app/application/algorithm/state_estimation/soe/debug/soe_debug_cfg.h`` (`API <./../../../../../../_static/doxygen/src/html/soe__debug__cfg_8h.html>`__, `source <./../../../../../../_static/doxygen/src/html/soe__debug__cfg_8h_source.html>`__) +- ``src/app/application/algorithm/state_estimation/soe/debug/soe_debug_cfg.h`` Unit Test ^^^^^^^^^ -- ``tests/unit/app/application/algorithm/state_estimation/soe/debug/test_soe_debug.c`` (`API <./../../../../../../_static/doxygen/tests/html/test__soe__debug_8c.html>`__, `source <./../../../../../../_static/doxygen/tests/html/test__soe__debug_8c_source.html>`__) +- ``tests/unit/app/application/algorithm/state_estimation/soe/debug/test_soe_debug.c`` Detailed Description -------------------- diff --git a/docs/software/modules/application/algorithm/state-estimation/soe/soe_none.rst b/docs/software/modules/application/algorithm/state-estimation/soe/soe_none.rst index 11757889..36fc88a9 100644 --- a/docs/software/modules/application/algorithm/state-estimation/soe/soe_none.rst +++ b/docs/software/modules/application/algorithm/state-estimation/soe/soe_none.rst @@ -12,17 +12,17 @@ Module Files Driver ^^^^^^ -- ``src/app/application/algorithm/state_estimation/soe/none/soe_none.c`` (`API <./../../../../../../_static/doxygen/src/html/soe__none_8c.html>`__, `source <./../../../../../../_static/doxygen/src/html/soe__none_8c_source.html>`__) +- ``src/app/application/algorithm/state_estimation/soe/none/soe_none.c`` Configuration ^^^^^^^^^^^^^ -- ``src/app/application/algorithm/state_estimation/soe/none/soe_none_cfg.h`` (`API <./../../../../../../_static/doxygen/src/html/soe__none__cfg_8h.html>`__, `source <./../../../../../../_static/doxygen/src/html/soe__none__cfg_8h_source.html>`__) +- ``src/app/application/algorithm/state_estimation/soe/none/soe_none_cfg.h`` Unit Test ^^^^^^^^^ -- ``tests/unit/app/application/algorithm/state_estimation/soe/none/test_soe_none.c`` (`API <./../../../../../../_static/doxygen/tests/html/test__soe__none_8c.html>`__, `source <./../../../../../../_static/doxygen/tests/html/test__soe__none_8c_source.html>`__) +- ``tests/unit/app/application/algorithm/state_estimation/soe/none/test_soe_none.c`` Detailed Description -------------------- diff --git a/docs/software/modules/application/algorithm/state-estimation/sof/sof_trapezoid.rst b/docs/software/modules/application/algorithm/state-estimation/sof/sof_trapezoid.rst index 2070cbc3..44f189ff 100644 --- a/docs/software/modules/application/algorithm/state-estimation/sof/sof_trapezoid.rst +++ b/docs/software/modules/application/algorithm/state-estimation/sof/sof_trapezoid.rst @@ -12,20 +12,20 @@ Module Files Driver ^^^^^^ -- ``src/app/application/algorithm/state_estimation/sof/trapezoid/sof_trapezoid.c`` (`API <./../../../../../../_static/doxygen/src/html/sof_8c.html>`__, `source <./../../../../../../_static/doxygen/src/html/sof__trapezoid_8c_source.html>`__) -- ``src/app/application/algorithm/state_estimation/sof/trapezoid/sof_trapezoid.h`` (`API <./../../../../../../_static/doxygen/src/html/sof_8h.html>`__, `source <./../../../../../../_static/doxygen/src/html/sof__trapezoid_8h_source.html>`__) +- ``src/app/application/algorithm/state_estimation/sof/trapezoid/sof_trapezoid.c`` +- ``src/app/application/algorithm/state_estimation/sof/trapezoid/sof_trapezoid.h`` Configuration ^^^^^^^^^^^^^ -- ``src/app/application/algorithm/state_estimation/sof/trapezoid/sof_trapezoid_cfg.c`` (`API <./../../../../../../_static/doxygen/src/html/sof__cfg_8c.html>`__, `source <./../../../../../../_static/doxygen/src/html/sof__trapezoid__cfg_8c_source.html>`__) -- ``src/app/application/algorithm/state_estimation/sof/trapezoid/sof_trapezoid_cfg.h`` (`API <./../../../../../../_static/doxygen/src/html/sof__cfg_8h.html>`__, `source <./../../../../../../_static/doxygen/src/html/sof__trapezoid__cfg_8h_source.html>`__) +- ``src/app/application/algorithm/state_estimation/sof/trapezoid/sof_trapezoid_cfg.c`` +- ``src/app/application/algorithm/state_estimation/sof/trapezoid/sof_trapezoid_cfg.h`` Unit Test ^^^^^^^^^ -- ``tests/unit/app/application/algorithm/state_estimation/sof/trapezoid/test_sof_trapezoid.c`` (`API <./../../../../../../_static/doxygen/tests/html/test__sof_8c.html>`__, `source <./../../../../../../_static/doxygen/tests/html/test__sof__trapezoid_8c_source.html>`__) -- ``tests/unit/app/application/algorithm/state_estimation/sof/trapezoid/test_sof_trapezoid_cfg.c`` (`API <./../../../../../../_static/doxygen/tests/html/test__sof__cfg_8c.html>`__, `source <./../../../../../../_static/doxygen/tests/html/test__sof__trapezoid__cfg_8c_source.html>`__) +- ``tests/unit/app/application/algorithm/state_estimation/sof/trapezoid/test_sof_trapezoid.c`` +- ``tests/unit/app/application/algorithm/state_estimation/sof/trapezoid/test_sof_trapezoid_cfg.c`` Detailed Description -------------------- diff --git a/docs/software/modules/application/algorithm/state-estimation/soh/soh_debug.rst b/docs/software/modules/application/algorithm/state-estimation/soh/soh_debug.rst index b7b39bfc..5d8b9ebf 100644 --- a/docs/software/modules/application/algorithm/state-estimation/soh/soh_debug.rst +++ b/docs/software/modules/application/algorithm/state-estimation/soh/soh_debug.rst @@ -12,7 +12,7 @@ Module Files Driver ^^^^^^ -- ``src/app/application/algorithm/state_estimation/soh/debug/soh_debug.c`` (`API <./../../../../../../_static/doxygen/src/html/soh__debug_8c.html>`__, `source <./../../../../../../_static/doxygen/src/html/soh__debug_8c_source.html>`__) +- ``src/app/application/algorithm/state_estimation/soh/debug/soh_debug.c`` Configuration ^^^^^^^^^^^^^ @@ -20,7 +20,7 @@ Configuration Unit Test ^^^^^^^^^ -- ``tests/unit/app/application/algorithm/state_estimation/soh/debug/test_soh_debug.c`` (`API <./../../../../../../_static/doxygen/tests/html/test__soh__debug_8c.html>`__, `source <./../../../../../../_static/doxygen/tests/html/test__soh__debug_8c_source.html>`__) +- ``tests/unit/app/application/algorithm/state_estimation/soh/debug/test_soh_debug.c`` Detailed Description -------------------- diff --git a/docs/software/modules/application/algorithm/state-estimation/soh/soh_none.rst b/docs/software/modules/application/algorithm/state-estimation/soh/soh_none.rst index 476b67a3..01323634 100644 --- a/docs/software/modules/application/algorithm/state-estimation/soh/soh_none.rst +++ b/docs/software/modules/application/algorithm/state-estimation/soh/soh_none.rst @@ -12,7 +12,7 @@ Module Files Driver ^^^^^^ -- ``src/app/application/algorithm/state_estimation/soh/none/soh_none.c`` (`API <./../../../../../../_static/doxygen/src/html/soh__none_8c.html>`__, `source <./../../../../../../_static/doxygen/src/html/soh__none_8c_source.html>`__) +- ``src/app/application/algorithm/state_estimation/soh/none/soh_none.c`` Configuration ^^^^^^^^^^^^^ @@ -20,7 +20,7 @@ Configuration Unit Test ^^^^^^^^^ -- ``tests/unit/app/application/algorithm/state_estimation/soh/none/test_soh_none.c`` (`API <./../../../../../../_static/doxygen/tests/html/test__soh__none_8c.html>`__, `source <./../../../../../../_static/doxygen/tests/html/test__soh__none_8c_source.html>`__) +- ``tests/unit/app/application/algorithm/state_estimation/soh/none/test_soh_none.c`` Detailed Description -------------------- diff --git a/docs/software/modules/application/algorithm/state-estimation/state-estimation.rst b/docs/software/modules/application/algorithm/state-estimation/state-estimation.rst index 09b9e0a5..7b9acaa2 100644 --- a/docs/software/modules/application/algorithm/state-estimation/state-estimation.rst +++ b/docs/software/modules/application/algorithm/state-estimation/state-estimation.rst @@ -70,8 +70,6 @@ State estimation API The state estimation API is defined in ``state_estimation.h`` and shown below in :ref:`se-state-estimation-api`. The summary of all state-estimation-functions has to implement this API. -For more details refer to the -`API documentation <./../../../../../_static/doxygen/src/html/group__state-estimation-api.html>`__. .. literalinclude:: ./../../../../../../src/app/application/algorithm/state_estimation/state_estimation.h :language: C diff --git a/docs/software/modules/application/bal/bal.rst b/docs/software/modules/application/bal/bal.rst index 627e43fd..26887a3d 100644 --- a/docs/software/modules/application/bal/bal.rst +++ b/docs/software/modules/application/bal/bal.rst @@ -12,24 +12,24 @@ Module Files Driver ^^^^^^ -- ``src/app/application/bms/history/bal_strategy_history.c`` (`API <../../../../_static/doxygen/src/html/bal__strategy__history_8c.html>`__, `source <../../../../_static/doxygen/src/html/bal__strategy__history_8c_source.html>`__) -- ``src/app/application/bms/none/bal_strategy_none.c`` (`API <../../../../_static/doxygen/src/html/bal__strategy__none_8c.html>`__, `source <../../../../_static/doxygen/src/html/bal__strategy__none_8c_source.html>`__) -- ``src/app/application/bms/voltage/bal_strategy_voltage.c`` (`API <../../../../_static/doxygen/src/html/bal__strategy__voltage_8c.html>`__, `source <../../../../_static/doxygen/src/html/bal__strategy__voltage_8c_source.html>`__) -- ``src/app/application/bms/voltage/bal_strategy_voltage.h`` (`API <../../../../_static/doxygen/src/html/bal__strategy__voltage_8h.html>`__, `source <../../../../_static/doxygen/src/html/bal__strategy__voltage_8h_source.html>`__) -- ``src/app/application/bms/bal.c`` (`API <../../../../_static/doxygen/src/html/bal_8c.html>`__, `source <../../../../_static/doxygen/src/html/bal_8c_source.html>`__) -- ``src/app/application/bms/bal.h`` (`API <../../../../_static/doxygen/src/html/bal_8h.html>`__, `source <../../../../_static/doxygen/src/html/bal_8h_source.html>`__) +- ``src/app/application/bms/history/bal_strategy_history.c`` +- ``src/app/application/bms/none/bal_strategy_none.c`` +- ``src/app/application/bms/voltage/bal_strategy_voltage.c`` +- ``src/app/application/bms/voltage/bal_strategy_voltage.h`` +- ``src/app/application/bms/bal.c`` +- ``src/app/application/bms/bal.h`` Configuration ^^^^^^^^^^^^^ -- ``src/app/application/config/bal_cfg.h`` (`API <../../../../_static/doxygen/src/html/bal__cfg_8h.html>`__, `source <../../../../_static/doxygen/src/html/bal__cfg_8h_source.html>`__) +- ``src/app/application/config/bal_cfg.h`` Unit Test ^^^^^^^^^ -- ``tests/unit/app/application/bal/history/test_bal_strategy_history.c`` (`API <../../../../_static/doxygen/tests/html/test__bal__strategy__history_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__bal__strategy__history_8c_source.html>`__) -- ``tests/unit/app/application/bal/none/test_bal_strategy_none.c`` (`API <../../../../_static/doxygen/tests/html/test__bal__strategy__none_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__bal__strategy__none_8c_source.html>`__) -- ``tests/unit/app/application/bal/voltage/test_bal_strategy_voltage.c`` (`API <../../../../_static/doxygen/tests/html/test__bal__strategy__voltage_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__bal__strategy__voltage_8c_source.html>`__) -- ``tests/unit/app/application/bal/test_bal.c`` (`API <../../../../_static/doxygen/tests/html/test__bal_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__bal_8c_source.html>`__) +- ``tests/unit/app/application/bal/history/test_bal_strategy_history.c`` +- ``tests/unit/app/application/bal/none/test_bal_strategy_none.c`` +- ``tests/unit/app/application/bal/voltage/test_bal_strategy_voltage.c`` +- ``tests/unit/app/application/bal/test_bal.c`` Detailed Description -------------------- diff --git a/docs/software/modules/application/bms/bms.rst b/docs/software/modules/application/bms/bms.rst index 32b87425..b2b01272 100644 --- a/docs/software/modules/application/bms/bms.rst +++ b/docs/software/modules/application/bms/bms.rst @@ -12,18 +12,18 @@ Module Files Driver ^^^^^^ -- ``src/app/application/bms/bms.c`` (`API <../../../../_static/doxygen/src/html/bms_8c.html>`__, `source <../../../../_static/doxygen/src/html/bms_8c_source.html>`__) -- ``src/app/application/bms/bms.h`` (`API <../../../../_static/doxygen/src/html/bms_8h.html>`__, `source <../../../../_static/doxygen/src/html/bms_8h_source.html>`__) +- ``src/app/application/bms/bms.c`` +- ``src/app/application/bms/bms.h`` Configuration ^^^^^^^^^^^^^ -- ``src/app/application/config/bms_cfg.h`` (`API <../../../../_static/doxygen/src/html/bms__cfg_8h.html>`__, `source <../../../../_static/doxygen/src/html/bms__cfg_8h_source.html>`__) +- ``src/app/application/config/bms_cfg.h`` Unit Test ^^^^^^^^^ -- ``tests/unit/app/application/bms/test_bms.c`` (`API <../../../../_static/doxygen/tests/html/test__bms_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__bms_8c_source.html>`__) +- ``tests/unit/app/application/bms/test_bms.c`` Detailed Description -------------------- diff --git a/docs/software/modules/application/plausibility/plausibility.rst b/docs/software/modules/application/plausibility/plausibility.rst index 998f422d..5d740554 100644 --- a/docs/software/modules/application/plausibility/plausibility.rst +++ b/docs/software/modules/application/plausibility/plausibility.rst @@ -12,17 +12,17 @@ Module Files Driver ^^^^^^ -- ``src/app/application/plausibility/plausibility.c`` (`API <../../../../_static/doxygen/src/html/plausibility_8c.html>`__, `source <../../../../_static/doxygen/src/html/plausibility_8c_source.html>`__) -- ``src/app/application/plausibility/plausibility.h`` (`API <../../../../_static/doxygen/src/html/plausibility_8h.html>`__, `source <../../../../_static/doxygen/src/html/plausibility_8h_source.html>`__) +- ``src/app/application/plausibility/plausibility.c`` +- ``src/app/application/plausibility/plausibility.h`` Configuration ^^^^^^^^^^^^^ -- ``src/app/application/config/plausibility_cfg.h`` (`API <../../../../_static/doxygen/src/html/plausibility__cfg_8h.html>`__, `source <../../../../_static/doxygen/src/html/plausibility__cfg_8h_source.html>`__) +- ``src/app/application/config/plausibility_cfg.h`` Unit Test ^^^^^^^^^ -- ``tests/unit/app/application/plausibility/test_plausibility.c`` (`API <../../../../_static/doxygen/tests/html/test__plausibility_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__plausibility_8c_source.html>`__) +- ``tests/unit/app/application/plausibility/test_plausibility.c`` Detailed Description -------------------- diff --git a/docs/software/modules/application/redundancy/redundancy.rst b/docs/software/modules/application/redundancy/redundancy.rst index 9e41e280..ae5165f6 100644 --- a/docs/software/modules/application/redundancy/redundancy.rst +++ b/docs/software/modules/application/redundancy/redundancy.rst @@ -12,8 +12,8 @@ Module Files Driver ^^^^^^ -- ``src/app/application/redundancy/redundancy.c`` (`API <../../../../_static/doxygen/src/html/redundancy_8c.html>`__, `source <../../../../_static/doxygen/src/html/redundancy_8c_source.html>`__) -- ``src/app/application/redundancy/redundancy.h`` (`API <../../../../_static/doxygen/src/html/redundancy_8h.html>`__, `source <../../../../_static/doxygen/src/html/redundancy_8h_source.html>`__) +- ``src/app/application/redundancy/redundancy.c`` +- ``src/app/application/redundancy/redundancy.h`` Configuration ^^^^^^^^^^^^^ @@ -23,9 +23,40 @@ Configuration Unit Test ^^^^^^^^^ -- ``tests/unit/app/application/redundancy/test_redundancy.c`` (`API <../../../../_static/doxygen/tests/html/test__redundancy_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__redundancy_8c_source.html>`__) +- ``tests/unit/app/application/redundancy/test_redundancy.c`` Detailed Description -------------------- |tbc| + +FAQs +---- + +**Question:** + +The database entries ``XXX_BASE`` and ``XXX_REDUNDANCY0`` for cell voltages and +cell temperatures are only read and not written in function +``MRC_ValidateAfeMeasurement()``. +Is that correct? + +**Answer:** + +It is correct that the cell voltage and cell temperature measurements from the +AFE is just read by the redundancy module. +Function ``MRC_ValidateCellVoltageMeasurement()`` receives the cell voltage +measurement values of the base and the redundant measurement as an input and +validates the measurements. +The validated cell voltages are then written into database entry +``DATA_BLOCK_ID_CELL_VOLTAGE``. +This database entry contains the validated measurements and is consecutively +used from all other modules throughout the BMS. + +The same logic is applied to the cell temperature measurement values. +Here, the validated measurements are written into the database entry +``DATA_BLOCK_ID_CELL_TEMPERATURE``. + +The database entries ``XXX_BASE`` and ``XXX_REDUNDANCY0`` are only intended to +be used by the redundancy module. All other modules **SHALL** only use the +validated database entries ``DATA_BLOCK_ID_CELL_VOLTAGE`` and +``DATA_BLOCK_ID_CELL_TEMPERATURE``. diff --git a/docs/software/modules/application/soa/soa.rst b/docs/software/modules/application/soa/soa.rst index eae54286..784daa67 100644 --- a/docs/software/modules/application/soa/soa.rst +++ b/docs/software/modules/application/soa/soa.rst @@ -12,19 +12,19 @@ Module Files Driver ^^^^^^ -- ``src/app/application/soa/soa.c`` (`API <../../../../_static/doxygen/src/html/soa_8c.html>`__, `source <../../../../_static/doxygen/src/html/soa_8c_source.html>`__) -- ``src/app/application/soa/soa.h`` (`API <../../../../_static/doxygen/src/html/soa_8h.html>`__, `source <../../../../_static/doxygen/src/html/soa_8h_source.html>`__) +- ``src/app/application/soa/soa.c`` +- ``src/app/application/soa/soa.h`` Configuration ^^^^^^^^^^^^^ -- ``src/app/application/config/soa_cfg.c`` (`API <../../../../_static/doxygen/src/html/soa__cfg_8c.html>`__, `source <../../../../_static/doxygen/src/html/soa__cfg_8c_source.html>`__) -- ``src/app/application/config/soa_cfg.h`` (`API <../../../../_static/doxygen/src/html/soa__cfg_8h.html>`__, `source <../../../../_static/doxygen/src/html/soa__cfg_8h_source.html>`__) +- ``src/app/application/config/soa_cfg.c`` +- ``src/app/application/config/soa_cfg.h`` Unit Test ^^^^^^^^^ -- ``tests/unit/app/application/soa/test_soa_cfg.c`` (`API <../../../../_static/doxygen/tests/html/test__soa__cfg_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__soa__cfg_8c_source.html>`__) -- ``tests/unit/app/application/soa/test_soa.c`` (`API <../../../../_static/doxygen/tests/html/test__soa_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__soa_8c_source.html>`__) +- ``tests/unit/app/application/soa/test_soa_cfg.c`` +- ``tests/unit/app/application/soa/test_soa.c`` Detailed Description -------------------- diff --git a/docs/software/modules/driver/adc/adc.rst b/docs/software/modules/driver/adc/adc.rst index cf62c38d..59f144f2 100644 --- a/docs/software/modules/driver/adc/adc.rst +++ b/docs/software/modules/driver/adc/adc.rst @@ -12,8 +12,8 @@ Module Files Driver ^^^^^^ -- ``src/app/driver/adc.h/adc.c`` (`API <../../../../_static/doxygen/src/html/adc_8c.html>`__, `source <../../../../_static/doxygen/src/html/adc_8c_source.html>`__) -- ``src/app/driver/adc.h/adc.h`` (`API <../../../../_static/doxygen/src/html/adc_8h.html>`__, `source <../../../../_static/doxygen/src/html/adc_8h_source.html>`__) +- ``src/app/driver/adc.h/adc.c`` +- ``src/app/driver/adc.h/adc.h`` Configuration ^^^^^^^^^^^^^ @@ -23,7 +23,7 @@ Configuration Unit Test ^^^^^^^^^ -- ``tests/unit/app/driver/test_adc.c`` (`API <../../../../_static/doxygen/tests/html/test__adc_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__adc_8c_source.html>`__) +- ``tests/unit/app/driver/test_adc.c`` Description ----------- diff --git a/docs/software/modules/driver/afe/adi/adi_ades1830.rst b/docs/software/modules/driver/afe/adi/adi_ades1830.rst index 4ae14a35..f27e2b44 100644 --- a/docs/software/modules/driver/afe/adi/adi_ades1830.rst +++ b/docs/software/modules/driver/afe/adi/adi_ades1830.rst @@ -31,9 +31,7 @@ word must only contain one byte (i.e., the value must not be greater than A common parameter to all AFE functions has the type ``ADI_STATE_s``. This structure is used to control the flow of the AFE driver. -The structure holds the following information -(for implementation details see -`here <../../../../_static/doxygen/src/html/structADI__STATE__s.html>`__): +The structure holds the following information: - A boolean indicating if the driver has been initialized or not, i.e., whether the first measurement has been started or not. @@ -51,9 +49,7 @@ The structure holds the following information It also stores the command counter for each string and an error table with all error flags. -The ``ADI_DATA_s`` structure contains the following data -(for implementation details see -`here <../../../../_static/doxygen/src/html/structADI__DATAPTR__s.html>`__): +The ``ADI_DATA_s`` structure contains the following data: - A pointer to the SPI receive and the transmit buffer - All measurements (e.g., cell voltages, cell temperatures, GPIO voltages) @@ -62,9 +58,7 @@ The ``ADI_DATA_s`` structure contains the following data - An internal variable of the driver used for redundant auxiliary voltage check. -The ``ADI_ERROR_TABLE_s`` structure contains the error status of the driver -(for implementation details see -`here <../../../../_static/doxygen/src/html/structADI__ERROR__TABLE__s.html>`__): +The ``ADI_ERROR_TABLE_s`` structure contains the error status of the driver: - Flag indicating if PEC correct or not - Flag indicating if the command counter of the driver matches the internal @@ -121,8 +115,8 @@ If they are not defined, the following definitions must be added: /** data block struct of balancing control */ typedef struct { - uint8_t balancingState[ADI_NR_OF_STRINGS] - [ADI_NR_OF_CELL_BLOCKS_PER_STRING]; /*!< 0: no balancing, 1: balancing active */ + bool activateBalancing[ADI_NR_OF_STRINGS][ADI_NR_OF_MODULES_PER_STRING] + [ADI_NR_OF_CELL_BLOCKS_PER_MODULE]; /*!< 0: no balancing, 1: balancing active */ } DATA_BLOCK_BALANCING_CONTROL_s; /** data block struct of cell open wire */ diff --git a/docs/software/modules/driver/afe/maxim/max1785x.rst b/docs/software/modules/driver/afe/maxim/max1785x.rst index 70fd54cd..07bcfbd7 100644 --- a/docs/software/modules/driver/afe/maxim/max1785x.rst +++ b/docs/software/modules/driver/afe/maxim/max1785x.rst @@ -6,14 +6,6 @@ MAX1785x ======== -.. - Comments: - uphost and downhost are terms in Maxim driver to describe the communication path - -.. spelling:: - uphost - downhost - This module supports the `MAX17852` and `MAX17853` monitoring ICs by Maxim Integrated. Communication with these ICs is handled through a `MAX17841B` bridge IC. @@ -33,13 +25,13 @@ Driver structure The driver is separated into three main modules with additional helper modules. The three main modules are: - * MAX17841B bridge IC driver that interacts with the interface - from :ref:`INTERFACE_MAX17841B___V1_0_0__` in ``mxm_17841b.c``, - * Battery Management UART protocol abstraction in - ``max_battery_management.c`` and - * MAX1785x device driver in ``mxm_1785x.c``. - * Implementation of the operation state machine in ``mxm_17852.c``. - This implementation is selected by the driver variant in ``bms.json``. +- MAX17841B bridge IC driver that interacts with the interface + from :ref:`INTERFACE_MAX17841B___V1_0_0__` in ``mxm_17841b.c``, +- Battery Management UART protocol abstraction in + ``max_battery_management.c`` and +- MAX1785x device driver in ``mxm_1785x.c``. +- Implementation of the operation state machine in ``mxm_17852.c``. + This implementation is selected by the driver variant in ``bms.json``. Configuration ------------- @@ -52,17 +44,17 @@ Adaption to new hardware In order to adapt the driver to new interface hardware, it is necessary to adapt the following: - * Ensure that the functions that interact with the shutdown pin of - the |max-max17841b| bridge IC are correct. - They are implemented in ``mxm_cfg.c``. - * Check the |spi| configuration of the system and that it aligns with - the capabilities of the bridge IC. - * The driver is intended to be implemented as generic as possible. - That means that the main modules should not be necessary to be changed. - In order to implement new behavior during the measurement cycle the - implementation of the ``MXM_StateMachineOperation`` has to be adapted. - This can be achieved by implementing a new variant in parallel to the - current ``max17852`` variant. +- Ensure that the functions that interact with the shutdown pin of + the |max-max17841b| bridge IC are correct. + They are implemented in ``mxm_cfg.c``. +- Check the |spi| configuration of the system and that it aligns with + the capabilities of the bridge IC. +- The driver is intended to be implemented as generic as possible. + That means that the main modules should not be necessary to be changed. + In order to implement new behavior during the measurement cycle the + implementation of the ``MXM_StateMachineOperation`` has to be adapted. + This can be achieved by implementing a new variant in parallel to the + current ``max17852`` variant. .. _Startup_behavior: @@ -80,87 +72,43 @@ Main flow The following flow chart describes the main flow of this ``AFE`` driver. -.. mermaid:: - - stateDiagram-v2 - uninitialized: Uninitialized - pre_init: Pre-Initialization Self Check - init: Initialization - post_init: Post-Initialization Self Check - idle: Idle - operation: Operation - - [*] --> uninitialized - uninitialized --> pre_init: Initialization - pre_init --> init: Success - init --> post_init: Success - post_init --> idle: Success - idle --> operation: Operation Requested - operation --> idle: Halt Requested - operation --> uninitialized: Error - pre_init --> uninitialized: Error - init --> uninitialized: Error - post_init --> uninitialized: Error - - state operation { - op_init: Initialization of AFE - op_mux_control: Multiplexer control - op_measurement: Measurement - op_diagnostic: Diagnostic measures - op_balancing: Balancing control - - [*] --> op_init - op_init --> op_mux_control - op_mux_control --> op_measurement - op_measurement --> op_diagnostic - op_diagnostic --> op_balancing - op_balancing --> op_mux_control - } - -* State `Uninitialized`: This is the default state of the driver. +- State `Uninitialized`: This is the default state of the driver. The driver transitions with the next execution into the `Pre-Initialization Self Check` state. - -* State `Pre-Initialization Self Check`: In this state, the driver checks +- State `Pre-Initialization Self Check`: In this state, the driver checks assumptions on its functions. If this step fails, the driver is not able to conclude its work. - -* State `Initialization`: In this state, the daisy-chain of the driver is +- State `Initialization`: In this state, the daisy-chain of the driver is initialized and each ``AFE`` is assigned an address. - -* State `Post-Initialization Self Check`: During this state, the number of +- State `Post-Initialization Self Check`: During this state, the number of found ``AFE`` is compared to the expected number of devices. If these mismatch the driver can halt in this state depending on the configuration described in :ref:`Startup_behavior`. - -* State `Idle`: The driver rests in this state as long as the system requests +- State `Idle`: The driver rests in this state as long as the system requests the driver to start. -* State `Operation`: This is the main state during which the ``AFE`` devices +- State `Operation`: This is the main state during which the ``AFE`` devices are controlled. - * State `Initialization of AFE`: In this chain of substates the ``AFE`` is + - State `Initialization of AFE`: In this chain of substates the ``AFE`` is initialized and programmed with the expected configuration. - - * State `Multiplexer control`: In this chain of substates the temperature - multiplexer of the |slave| is controlled and switched to the next channel. - - * State `Measurement`: In this chain of substates the measurement the driver + - State `Multiplexer control`: In this chain of substates the temperature + multiplexer of the |bms-slave| is controlled and switched to the next + channel. + - State `Measurement`: In this chain of substates the measurement the driver requests a measurement and retrieves each measurement value. - - * State `Diagnostic measures`: In this chain of substates diagnostic + - State `Diagnostic measures`: In this chain of substates diagnostic registers are read. When a power on reset condition is recognized (indicating a loss of power and potentially undefined state in one of the ``AFE`` devices), a reset of the driver is triggered. - - * State `Balancing control`: In this chain of substates the balancing + - State `Balancing control`: In this chain of substates the balancing switches are controlled. The driver alternates between even and odd switches in order to not create a connection between adjacent switches. -* If any state except `Idle` or `Unitialized` is stuck and does not advance to - the next state during a predefined time frame, the driver resets itself to +- If any state except `Idle` or `Uninitialized` is stuck and does not advance + to the next state during a predefined time frame, the driver resets itself to the `Uninitialized` state. Requests for operation are preserved during this reset as the system assumes that the driver has been already asked to start. @@ -170,12 +118,12 @@ Diagnostic signals generated This driver uses the following diagnostic messages of the ``diag``-module: -* ``DIAG_ID_AFE_CONFIG``: This signal is issued when the self check of the +- ``DIAG_ID_AFE_CONFIG``: This signal is issued when the self check of the driver that is executed before the initialization fails. If this happens, it is very likely due to an implementation error. -* ``DIAG_ID_AFE_COM_INTEGRITY``: This signal is issued when the CRC of a +- ``DIAG_ID_AFE_COM_INTEGRITY``: This signal is issued when the CRC of a received message is not correct. -* ``DIAG_ID_AFE_SPI``: This signal is issued when the SPI API returns an +- ``DIAG_ID_AFE_SPI``: This signal is issued when the SPI API returns an unsuccessful transmission. If this happens, it is very likely due to implementation issues with the ``SPI`` interface. @@ -191,8 +139,8 @@ String mapping ^^^^^^^^^^^^^^ The driver assumes, that it has to service all strings in the system and that -all strings are connected into one daisy-chain. -(It expects a chain of strings of modules.) +all strings are connected into one daisy-chain +(It expects a chain of strings of modules). If only one string is defined, the driver maps the modules onto this string as expected. @@ -204,7 +152,7 @@ Automatic reset ^^^^^^^^^^^^^^^ When a communication issue occurs, the slave boards might get stuck in a state -that is unknown to the |master|. +that is unknown to the |foxbms-bms-master|. In order to prevent this situation, the driver has an error counter. This error counter is automatically reset after `MXM_TIMEOUT_RESET_ERROR_COUNTER_ms` milliseconds without any new error. @@ -213,8 +161,8 @@ starts an automatic reset of the whole daisy-chain. This is achieved by pulling down the shutdown line of the bridge IC, effectively resetting it to default condition. -During this shutdown, the |slave| will go into deep sleep and thus loose their -non-persistent configuration (and also disable the on-board supply). +During this shutdown, the |bms-slave| will go into deep sleep and thus loose +their non-persistent configuration (and also disable the on-board supply). The driver resets itself to initial condition restores flags indicating whether it may start and then restart the daisy-chain. The user can register this by checking for the freshness of measurement values. diff --git a/docs/software/modules/driver/afe/nxp/mc33775a.rst b/docs/software/modules/driver/afe/nxp/mc33775a.rst index 2522fb7f..f0c9cd6b 100644 --- a/docs/software/modules/driver/afe/nxp/mc33775a.rst +++ b/docs/software/modules/driver/afe/nxp/mc33775a.rst @@ -6,19 +6,6 @@ NXP MC33775A ============ -.. - Comments: - IC is used in this document for AFEs - xC is a prefix in some numbers - FFF is part of a number - Tx is an abbreviation for transmit - -.. spelling:: - IC - xC - FFF - Tx - Description ----------- @@ -428,22 +415,22 @@ First, the measurement units must be activated: - Enable cell measurement channels by writing ones to the VCBCxEN fields in the ``ALLM_VCVB_CFG`` register (address 0x1408). - * ``ALLM_VCVB_CFG`` |larr| ``0x3FFF`` + - ``ALLM_VCVB_CFG`` |larr| ``0x3FFF`` - Enable AIN0 to AIN 3 and module voltage channels by writing ones to the AINx fields in the ``PRMM_AIN_CFG`` register (address 0x1809). - * ``PRMM_AIN_CFG`` |larr| ``0x1F`` + - ``PRMM_AIN_CFG`` |larr| ``0x1F`` - Enable AIN4 to AIN 7 channels by writing ones to the AINx fields in the ``SECM_AIN_CFG`` register (address 0x1C09). - * ``PRMM_AIN_CFG`` |larr| ``0x0F`` + - ``PRMM_AIN_CFG`` |larr| ``0x0F`` - Enable the measurements units simultaneously by setting bit 0 to 1 in the ``ALLM_CFG`` register (address 0x1400). - * ``ALLM_CFG`` register |larr| ``0x01`` + - ``ALLM_CFG`` register |larr| ``0x01`` Once the measurement units have been activated, measurement captures can be started. @@ -458,25 +445,25 @@ Application-driven measurements Writing a number between 0 to 13 would activate open load detection for the corresponding cell measurement input. - * ``ALLM_APP_CTRL`` |larr| (``0x1F`` << ``10``) | ``0x3FF`` + - ``ALLM_APP_CTRL`` |larr| (``0x1F`` << ``10``) | ``0x3FF`` - In the ``PRMM_MEAS_STAT`` register (address 0x183E), the status of the primary measurements can be checked. If at least 16 measurements have been captured, the corresponding bit for each of the 6 measurement possibilities is set to 1: - * cell inputs VC0 to VC13 - bit 0 - * analog inputs AIN0 to AIN3 - bit 1 to bit 4 - * module voltage - bit 5 + - cell inputs VC0 to VC13 - bit 0 + - analog inputs AIN0 to AIN3 - bit 1 to bit 4 + - module voltage - bit 5 - In the ``PRMM_APP_VC_CNT register`` (address 0x183F), the number of captured values for the cell input measurements can be read. Starting from address 0x1840, the results of the measurements can be read, with one value per register, in the following order: - * cell inputs VC0 to VC13 - * module voltage. - * analog inputs AIN0 to AIN3 + - cell inputs VC0 to VC13 + - module voltage. + - analog inputs AIN0 to AIN3 - Starting from address 0x1C4F, the results of the secondary measurements can be read, with one value per register, in the order analog inputs AIN4 to AIN7. @@ -489,7 +476,7 @@ Periodic measurements bits 0 to 8 (PERLEN). The number must lie between 16 and 511. - * ``ALLM_PER_CTRL`` |larr| ``0x10`` for 16 measurements + - ``ALLM_PER_CTRL`` |larr| ``0x10`` for 16 measurements - In the ``PRMM_MEAS_STAT`` register (address 0x183E), the status of the periodic measurements can be checked. @@ -500,9 +487,9 @@ Periodic measurements Starting from address 0x1860, the results of the measurements can be read, with one value per register, in the following order: - * cell inputs VC0 to VC13 - * module voltage. - * analog inputs AIN0 to AIN3 + - cell inputs VC0 to VC13 + - module voltage. + - analog inputs AIN0 to AIN3 - Starting from address 0x1C6E, the results of the secondary measurements can be read, with one value per register, in the order analog inputs AIN4 to AIN7. @@ -516,7 +503,7 @@ Synchronous measurements Writing a number between 0 to 13 would activate open load detection for the corresponding cell measurement input. - * ``ALLM_SYNC_CTRL`` |larr| (``0x1F`` << ``10``) | ``0x01`` + - ``ALLM_SYNC_CTRL`` |larr| (``0x1F`` << ``10``) | ``0x01`` - In the ``PRMM_MEAS_STAT`` register (address 0x183E), the status of the synchronous measurements can be checked. @@ -563,10 +550,10 @@ There are three prerequisites for balancing to start: - In the BAL_GLOB_CFG register (address 0x1000), the global balancing enable flag BALEN must be set to 1. - * ``BAL_GLOB_TO_TMR`` |larr| ``0xYYYY`` with YYYY>0 and high enough - * Set all individual channels to values high enough - * ``BAL_PRE_TMR`` |larr| ``0x00`` - * ``BAL_GLOB`` |larr| ``0x01`` + - ``BAL_GLOB_TO_TMR`` |larr| ``0xYYYY`` with YYYY>0 and high enough + - Set all individual channels to values high enough + - ``BAL_PRE_TMR`` |larr| ``0x00`` + - ``BAL_GLOB`` |larr| ``0x01`` Once this is done, setting bits CHEN0-CHEN13 to 1 in the BAL_CH_CFG register (address 0x1002) activates the corresponding balancing channel. diff --git a/docs/software/modules/driver/can/can.rst b/docs/software/modules/driver/can/can.rst index 3f120fb0..7d9ca7ae 100644 --- a/docs/software/modules/driver/can/can.rst +++ b/docs/software/modules/driver/can/can.rst @@ -12,88 +12,94 @@ Module Files Driver ^^^^^^ -- ``src/app/driver/can/can.c`` (`API <../../../../_static/doxygen/src/html/can_8c.html>`__, `source <../../../../_static/doxygen/src/html/can_8c_source.html>`__) -- ``src/app/driver/can/can.h`` (`API <../../../../_static/doxygen/src/html/can_8h.html>`__, `source <../../../../_static/doxygen/src/html/can_8h_source.html>`__) -- ``src/app/driver/can/cbs/can_cbs.h`` (`API <../../../../_static/doxygen/src/html/can__cbs_8h.html>`__, `source <../../../../_static/doxygen/src/html/can__cbs_8h_source.html>`__) -- ``src/app/driver/can/cbs/can_helper.c`` (`API <../../../../_static/doxygen/src/html/can__helper_8c.html>`__, `source <../../../../_static/doxygen/src/html/can__helper_8c_source.html>`__) -- ``src/app/driver/can/cbs/can_helper.h`` (`API <../../../../_static/doxygen/src/html/can__helper_8h.html>`__, `source <../../../../_static/doxygen/src/html/can__helper_8h_source.html>`__) +- ``src/app/driver/can/can.c`` +- ``src/app/driver/can/can.h`` +- ``src/app/driver/can/cbs/can_cbs.h`` +- ``src/app/driver/can/cbs/can_helper.c`` +- ``src/app/driver/can/cbs/can_helper.h`` Configuration ^^^^^^^^^^^^^ -- ``src/app/driver/can/cbs/rx/can_cbs_rx.h`` (`API <../../../../_static/doxygen/src/html/can__cbs__rx_8h.html>`__, `source <../../../../_static/doxygen/src/html/can__cbs__rx_8h_source.html>`__) -- ``src/app/driver/can/cbs/rx/can_cbs_rx_aerosol-sensor.c`` (`API <../../../../_static/doxygen/src/html/can__cbs__rx__aerosol-sensor_8c.html>`__, `source <../../../../_static/doxygen/src/html/can__cbs__rx__aerosol-sensor_8c_source.html>`__) -- ``src/app/driver/can/cbs/rx/can_cbs_rx_bms-state-request.c`` (`API <../../../../_static/doxygen/src/html/can__cbs__rx__bms-state-request_8c.html>`__, `source <../../../../_static/doxygen/src/html/can__cbs__rx__bms-state-request_8c_source.html>`__) -- ``src/app/driver/can/cbs/rx/can_cbs_rx_current-sensor.c`` (`API <../../../../_static/doxygen/src/html/can__cbs__rx__current-sensor_8c.html>`__, `source <../../../../_static/doxygen/src/html/can__cbs__rx__current-sensor_8c_source.html>`__) -- ``src/app/driver/can/cbs/rx/can_cbs_rx_debug.c`` (`API <../../../../_static/doxygen/src/html/can__cbs__rx__debug_8c.html>`__, `source <../../../../_static/doxygen/src/html/can__cbs__rx__debug_8c_source.html>`__) -- ``src/app/driver/can/cbs/rx/can_cbs_rx_imd-info.c`` (`API <../../../../_static/doxygen/src/html/can__cbs__rx__imd-info_8c.html>`__, `source <../../../../_static/doxygen/src/html/can__cbs__rx__imd-info_8c_source.html>`__) -- ``src/app/driver/can/cbs/rx/can_cbs_rx_imd-response.c`` (`API <../../../../_static/doxygen/src/html/can__cbs__rx__imd-response_8c.html>`__, `source <../../../../_static/doxygen/src/html/can__cbs__rx__imd-response_8c_source.html>`__) -- ``src/app/driver/can/cbs/tx/can_cbs_tx.h`` (`API <../../../../_static/doxygen/src/html/can__cbs__tx_8h.html>`__, `source <../../../../_static/doxygen/src/html/can__cbs__tx_8h_source.html>`__) -- ``src/app/driver/can/cbs/tx/can_cbs_tx_bms-state-details.c`` (`API <../../../../_static/doxygen/src/html/can__cbs__tx__bms-state-details_8c.html>`__, `source <../../../../_static/doxygen/src/html/can__cbs__tx__bms-state-details_8c_source.html>`__) -- ``src/app/driver/can/cbs/tx/can_cbs_tx_bms-state.c`` (`API <../../../../_static/doxygen/src/html/can__cbs__tx__bms-state_8c.html>`__, `source <../../../../_static/doxygen/src/html/can__cbs__tx__bms-state_8c_source.html>`__) -- ``src/app/driver/can/cbs/tx/can_cbs_tx_cell-temperatures.c`` (`API <../../../../_static/doxygen/src/html/can__cbs__tx__cell-temperatures_8c.html>`__, `source <../../../../_static/doxygen/src/html/can__cbs__tx__cell-temperatures_8c_source.html>`__) -- ``src/app/driver/can/cbs/tx/can_cbs_tx_cell-voltages.c`` (`API <../../../../_static/doxygen/src/html/can__cbs__tx__cell-voltages_8c.html>`__, `source <../../../../_static/doxygen/src/html/can__cbs__tx__cell-voltages_8c_source.html>`__) -- ``src/app/driver/can/cbs/tx/can_cbs_tx_crash-dump.c`` (`API <../../../../_static/doxygen/src/html/can__cbs__tx__crash-dump_8c.html>`__, `source <../../../../_static/doxygen/src/html/can__cbs__tx__crash-dump_8c_source.html>`__) -- ``src/app/driver/can/cbs/tx/can_cbs_tx_crash-dump.h`` (`API <../../../../_static/doxygen/src/html/can__cbs__tx__crash-dump_8h.html>`__, `source <../../../../_static/doxygen/src/html/can__cbs__tx__crash-dump_8h_source.html>`__) -- ``src/app/driver/can/cbs/tx/can_cbs_tx_debug-response.c`` (`API <../../../../_static/doxygen/src/html/can__cbs__tx__debug-response_8c.html>`__, `source <../../../../_static/doxygen/src/html/can__cbs__tx__debug-response_8c_source.html>`__) -- ``src/app/driver/can/cbs/tx/can_cbs_tx_debug-response.h`` (`API <../../../../_static/doxygen/src/html/can__cbs__tx__debug-response_8h.html>`__, `source <../../../../_static/doxygen/src/html/can__cbs__tx__debug-response_8h_source.html>`__) -- ``src/app/driver/can/cbs/tx/can_cbs_tx_debug-unsupported-multiplexer-values.c`` (`API <../../../../_static/doxygen/src/html/can__cbs__tx__debug-unsupported-multiplexer-values_8c.html>`__, `source <../../../../_static/doxygen/src/html/can__cbs__tx__debug-unsupported-multiplexer-values_8c_source.html>`__) -- ``src/app/driver/can/cbs/tx/can_cbs_tx_debug-unsupported-multiplexer-values.h`` (`API <../../../../_static/doxygen/src/html/can__cbs__tx__debug-unsupported-multiplexer-values_8c.html>`__, `source <../../../../_static/doxygen/src/html/can__cbs__tx__debug-unsupported-multiplexer-values_8c_source.html>`__) -- ``src/app/driver/can/cbs/tx/can_cbs_tx_imd-request.c`` (`API <../../../../_static/doxygen/src/html/can__cbs__tx__imd-request_8c.html>`__, `source <../../../../_static/doxygen/src/html/can__cbs__tx__imd-request_8c_source.html>`__) -- ``src/app/driver/can/cbs/tx/can_cbs_tx_pack-limits.c`` (`API <../../../../_static/doxygen/src/html/can__cbs__tx__pack-limits_8c.html>`__, `source <../../../../_static/doxygen/src/html/can__cbs__tx__pack-limits_8c_source.html>`__) -- ``src/app/driver/can/cbs/tx/can_cbs_tx_pack-minimum-maximum-values.c`` (`API <../../../../_static/doxygen/src/html/can__cbs__tx__pack-minimum-maximum-values_8c.html>`__, `source <../../../../_static/doxygen/src/html/can__cbs__tx__pack-minimum-maximum-values_8c_source.html>`__) -- ``src/app/driver/can/cbs/tx/can_cbs_tx_pack-state-estimation.c`` (`API <../../../../_static/doxygen/src/html/can__cbs__tx__pack-state-estimation_8c.html>`__, `source <../../../../_static/doxygen/src/html/can__cbs__tx__pack-state-estimation_8c_source.html>`__) -- ``src/app/driver/can/cbs/tx/can_cbs_tx_pack-values-p0.c`` (`API <../../../../_static/doxygen/src/html/can__cbs__tx__pack-values-p0_8c.html>`__, `source <../../../../_static/doxygen/src/html/can__cbs__tx__pack-values-p0_8c_source.html>`__) -- ``src/app/driver/can/cbs/tx/can_cbs_tx_pack-values-p1.c`` (`API <../../../../_static/doxygen/src/html/can__cbs__tx__pack-values-p1_8c.html>`__, `source <../../../../_static/doxygen/src/html/can__cbs__tx__pack-values-p1_8c_source.html>`__) -- ``src/app/driver/can/cbs/tx/can_cbs_tx_string-minimum-maximum-values.c`` (`API <../../../../_static/doxygen/src/html/can__cbs__tx__string-minimum-maximum-values_8c.html>`__, `source <../../../../_static/doxygen/src/html/can__cbs__tx__string-minimum-maximum-values_8c_source.html>`__) -- ``src/app/driver/can/cbs/tx/can_cbs_tx_string-state-estimation.c`` (`API <../../../../_static/doxygen/src/html/can__cbs__tx__string-state-estimation_8c.html>`__, `source <../../../../_static/doxygen/src/html/can__cbs__tx__string-state-estimation_8c_source.html>`__) -- ``src/app/driver/can/cbs/tx/can_cbs_tx_string-state.c`` (`API <../../../../_static/doxygen/src/html/can__cbs__tx__string-state_8c.html>`__, `source <../../../../_static/doxygen/src/html/can__cbs__tx__string-state_8c_source.html>`__) -- ``src/app/driver/can/cbs/tx/can_cbs_tx_string-values-p0.c`` (`API <../../../../_static/doxygen/src/html/can__cbs__tx__string-values-p0_8c.html>`__, `source <../../../../_static/doxygen/src/html/can__cbs__tx__string-values-p0_8c_source.html>`__) -- ``src/app/driver/can/cbs/tx/can_cbs_tx_string-values-p1.c`` (`API <../../../../_static/doxygen/src/html/can__cbs__tx__string-values-p1_8c.html>`__, `source <../../../../_static/doxygen/src/html/can__cbs__tx__string-values-p1_8c_source.html>`__) -- ``src/app/driver/config/can_cfg.c`` (`API <../../../../_static/doxygen/src/html/can__cfg_8c.html>`__, `source <../../../../_static/doxygen/src/html/can__cfg_8c_source.html>`__) -- ``src/app/driver/config/can_cfg.h`` (`API <../../../../_static/doxygen/src/html/can__cfg_8h.html>`__, `source <../../../../_static/doxygen/src/html/can__cfg_8h_source.html>`__) -- ``src/app/driver/config/can_cfg_rx-message-definitions.h`` (`API <../../../../_static/doxygen/src/html/can__cfg__rx-message-definitions_8h.html>`__, `source <../../../../_static/doxygen/src/html/can__cfg__rx-message-definitions_8h_source.html>`__) -- ``src/app/driver/config/can_cfg_rx.c`` (`API <../../../../_static/doxygen/src/html/can__cfg__rx_8c.html>`__, `source <../../../../_static/doxygen/src/html/can__cfg__rx_8c_source.html>`__) -- ``src/app/driver/config/can_cfg_tx-message-definitions.h`` (`API <../../../../_static/doxygen/src/html/can__cfg__tx-message-definitions_8h.html>`__, `source <../../../../_static/doxygen/src/html/can__cfg__tx-message-definitions_8h_source.html>`__) -- ``src/app/driver/config/can_cfg_tx.c`` (`API <../../../../_static/doxygen/src/html/can__cfg__tx_8c.html>`__, `source <../../../../_static/doxygen/src/html/can__cfg__tx_8c_source.html>`__) +- ``src/app/driver/can/cbs/rx/can_cbs_rx.h`` +- ``src/app/driver/can/cbs/rx/can_cbs_rx_aerosol-sensor.c`` +- ``src/app/driver/can/cbs/rx/can_cbs_rx_bms-state-request.c`` +- ``src/app/driver/can/cbs/rx/can_cbs_rx_current-sensor.c`` +- ``src/app/driver/can/cbs/rx/can_cbs_rx_debug.c`` +- ``src/app/driver/can/cbs/rx/can_cbs_rx_imd-info.c`` +- ``src/app/driver/can/cbs/rx/can_cbs_rx_imd-response.c`` +- ``src/app/driver/can/cbs/tx-async/can_cbs_tx_crash-dump.c`` +- ``src/app/driver/can/cbs/tx-async/can_cbs_tx_crash-dump.h`` +- ``src/app/driver/can/cbs/tx-async/can_cbs_tx_debug-build-configuration.c`` +- ``src/app/driver/can/cbs/tx-async/can_cbs_tx_debug-build-configuration.h`` +- ``src/app/driver/can/cbs/tx-async/can_cbs_tx_debug-response.c`` +- ``src/app/driver/can/cbs/tx-async/can_cbs_tx_debug-response.h`` +- ``src/app/driver/can/cbs/tx-async/can_cbs_tx_debug-unsupported-multiplexer-values.c`` +- ``src/app/driver/can/cbs/tx-async/can_cbs_tx_debug-unsupported-multiplexer-values.h`` +- ``src/app/driver/can/cbs/tx-async/can_cbs_tx_imd-request.c`` +- ``src/app/driver/can/cbs/tx-async/can_cbs_tx_imd-request.h`` +- ``src/app/driver/can/cbs/tx-async/can_cbs_tx_imd-request.c`` +- ``src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_bms-state-details.c`` +- ``src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_bms-state.c`` +- ``src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_cell-temperatures.c`` +- ``src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_cell-voltages.c`` +- ``src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_cyclic.h`` +- ``src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_pack-limits.c`` +- ``src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_pack-minimum-maximum-values.c`` +- ``src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_pack-state-estimation.c`` +- ``src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_pack-values-p0.c`` +- ``src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_pack-values-p1.c`` +- ``src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_string-minimum-maximum-values.c`` +- ``src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_string-state-estimation.c`` +- ``src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_string-state.c`` +- ``src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_string-values-p0.c`` +- ``src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_string-values-p1.c`` +- ``src/app/driver/config/can_cfg.c`` +- ``src/app/driver/config/can_cfg.h`` +- ``src/app/driver/config/can_cfg_rx-message-definitions.h`` +- ``src/app/driver/config/can_cfg_rx.c`` +- ``src/app/driver/config/can_cfg_tx-async-message-definitions.h`` +- ``src/app/driver/config/can_cfg_tx-cyclic-message-definitions.h`` +- ``src/app/driver/config/can_cfg_tx_cyclic.c`` Unit Test ^^^^^^^^^ -- ``tests/unit/app/driver/can/cbs/rx/test_can_cbs_rx_aerosol-sensor.c`` (`API <../../../../_static/doxygen/tests/html/test__can__cbs__rx__aerosol-sensor_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__can__cbs__rx__aerosol-sensor_8c_source.html>`__) -- ``tests/unit/app/driver/can/cbs/rx/test_can_cbs_rx_bms-state-request.c`` (`API <../../../../_static/doxygen/tests/html/test__can__cbs__rx__bms-state-request_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__can__cbs__rx__bms-state-request_8c_source.html>`__) -- ``tests/unit/app/driver/can/cbs/rx/test_can_cbs_rx_current-sensor.c`` (`API <../../../../_static/doxygen/tests/html/test__can__cbs__rx__current-sensor_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__can__cbs__rx__current-sensor_8c_source.html>`__) -- ``tests/unit/app/driver/can/cbs/rx/test_can_cbs_rx_debug.c`` (`API <../../../../_static/doxygen/tests/html/test__can__cbs__rx__debug_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__can__cbs__rx__debug_8c_source.html>`__) -- ``tests/unit/app/driver/can/cbs/rx/test_can_cbs_rx_imd-info.c`` (`API <../../../../_static/doxygen/tests/html/test__can__cbs__rx__imd-info_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__can__cbs__rx__imd-info_8c_source.html>`__) -- ``tests/unit/app/driver/can/cbs/rx/test_can_cbs_rx_imd-response.c`` (`API <../../../../_static/doxygen/tests/html/test__can__cbs__rx__imd-response_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__can__cbs__rx__imd-response_8c_source.html>`__) -- ``tests/unit/app/driver/can/cbs/test_can_helper.c`` (`API <../../../../_static/doxygen/tests/html/test__can__helper_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__can__helper_8c_source.html>`__) -- ``tests/unit/app/driver/can/cbs/test_can_helper.h`` (`API <../../../../_static/doxygen/tests/html/test__can__helper_8h.html>`__, `source <../../../../_static/doxygen/tests/html/test__can__helper_8h_source.html>`__) -- ``tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_bms-state-details.c`` (`API <../../../../_static/doxygen/tests/html/test__can__cbs__tx__bms-state-details_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__can__cbs__tx__bms-state-details_8c_source.html>`__) -- ``tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_bms-state.c`` (`API <../../../../_static/doxygen/tests/html/test__can__cbs__tx__bms-state_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__can__cbs__tx__bms-state_8c_source.html>`__) -- ``tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_cell-temperatures.c`` (`API <../../../../_static/doxygen/tests/html/test__can__cbs__tx__cell-temperatures_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__can__cbs__tx__cell-temperatures_8c_source.html>`__) -- ``tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_cell-voltages.c`` (`API <../../../../_static/doxygen/tests/html/test__can__cbs__tx__cell-voltages_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__can__cbs__tx__cell-voltages_8c_source.html>`__) -- ``tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_crash-dump.c`` (`API <../../../../_static/doxygen/tests/html/test__can__cbs__tx__crash-dump_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__can__cbs__tx__crash-dump_8c_source.html>`__) -- ``tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_debug-response.c`` (`API <../../../../_static/doxygen/tests/html/test__can__cbs__tx__debug-response_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__can__cbs__tx__debug-response_8c_source.html>`__) -- ``tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_debug-unsupported-multiplexer-values.c`` (`API <../../../../_static/doxygen/tests/html/test__can__cbs__tx__debug-unsupported-multiplexer-values_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__can__cbs__tx__debug-unsupported-multiplexer-values_8c_source.html>`__) -- ``tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_imd-request.c`` (`API <../../../../_static/doxygen/tests/html/test__can__cbs__tx__imd-request_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__can__cbs__tx__imd-request_8c_source.html>`__) -- ``tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_pack-limits.c`` (`API <../../../../_static/doxygen/tests/html/test__can__cbs__tx__pack-limits_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__can__cbs__tx__pack-limits_8c_source.html>`__) -- ``tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_pack-minimum-maximum-values.c`` (`API <../../../../_static/doxygen/tests/html/test__can__cbs__tx__pack-minimum-maximum-values_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__can__cbs__tx__pack-minimum-maximum-values_8c_source.html>`__) -- ``tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_pack-state-estimation.c`` (`API <../../../../_static/doxygen/tests/html/test__can__cbs__tx__pack-state-estimation_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__can__cbs__tx__pack-state-estimation_8c_source.html>`__) -- ``tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_pack-values-p0.c`` (`API <../../../../_static/doxygen/tests/html/test__can__cbs__tx__pack-values-p0_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__can__cbs__tx__pack-values-p0_8c_source.html>`__) -- ``tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_pack-values-p1.c`` (`API <../../../../_static/doxygen/tests/html/test__can__cbs__tx__pack-values-p1_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__can__cbs__tx__pack-values-p1_8c_source.html>`__) -- ``tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_string-minimum-maximum-values.c`` (`API <../../../../_static/doxygen/tests/html/test__can__cbs__tx__string-minimum-maximum-values_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__can__cbs__tx__string-minimum-maximum-values_8c_source.html>`__) -- ``tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_string-state-estimation.c`` (`API <../../../../_static/doxygen/tests/html/test__can__cbs__tx__string-state-estimation_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__can__cbs__tx__string-state-estimation_8c_source.html>`__) -- ``tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_string-state.c`` (`API <../../../../_static/doxygen/tests/html/test__can__cbs__tx__string-state_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__can__cbs__tx__string-state_8c_source.html>`__) -- ``tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_string-values-p0.c`` (`API <../../../../_static/doxygen/tests/html/test__can__cbs__tx__string-values-p0_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__can__cbs__tx__string-values-p0_8c_source.html>`__) -- ``tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_string-values-p1.c`` (`API <../../../../_static/doxygen/tests/html/test__can__cbs__tx__string-values-p1_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__can__cbs__tx__string-values-p1_8c_source.html>`__) -- ``tests/unit/app/driver/can/test_can.c`` (`API <../../../../_static/doxygen/tests/html/test__can_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__can_8c_source.html>`__) -- ``tests/unit/app/driver/can/test_can_1.c`` (`API <../../../../_static/doxygen/tests/html/test__can__1_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__can__1_8c_source.html>`__) -- ``tests/unit/app/driver/can/test_can_2.c`` (`API <../../../../_static/doxygen/tests/html/test__can__2_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__can__2_8c_source.html>`__) -- ``tests/unit/app/driver/config/test_can_cfg.c`` (`API <../../../../_static/doxygen/tests/html/test__can__cfg_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__can__cfg_8c_source.html>`__) -- ``tests/unit/app/driver/config/test_can_cfg_rx.c`` (`API <../../../../_static/doxygen/tests/html/test__can__cfg__rx_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__can__cfg__rx_8c_source.html>`__) -- ``tests/unit/app/driver/config/test_can_cfg_tx.c`` (`API <../../../../_static/doxygen/tests/html/test__can__cfg__tx_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__can__cfg__tx_8c_source.html>`__) -- ``tests/unit/app/engine/diag/cbs/test_diag_cbs_can.c`` (`API <../../../../_static/doxygen/tests/html/test__diag__cbs__can_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__diag__cbs__can_8c_source.html>`__) -- ``tests/unit/support/test_can_mpu_prototype_queue_create_stub.h`` (`API <../../../../_static/doxygen/tests/html/test__can__mpu__prototype__queue__create__stub_8h.html>`__, `source <../../../../_static/doxygen/tests/html/test__can__mpu__prototype__queue__create__stub_8h_source.html>`__) +- ``tests/unit/app/driver/can/cbs/rx/test_can_cbs_rx_aerosol-sensor.c`` +- ``tests/unit/app/driver/can/cbs/rx/test_can_cbs_rx_bms-state-request.c`` +- ``tests/unit/app/driver/can/cbs/rx/test_can_cbs_rx_current-sensor.c`` +- ``tests/unit/app/driver/can/cbs/rx/test_can_cbs_rx_debug.c`` +- ``tests/unit/app/driver/can/cbs/rx/test_can_cbs_rx_imd-info.c`` +- ``tests/unit/app/driver/can/cbs/rx/test_can_cbs_rx_imd-response.c`` +- ``tests/unit/app/driver/can/cbs/tx-async/test_can_cbs_tx_crash-dump.c`` +- ``tests/unit/app/driver/can/cbs/tx-async/test_can_cbs_tx_debug-build-configuration.c`` +- ``tests/unit/app/driver/can/cbs/tx-async/test_can_cbs_tx_debug-response.c`` +- ``tests/unit/app/driver/can/cbs/tx-async/test_can_cbs_tx_debug-unsupported-multiplexer-values.c`` +- ``tests/unit/app/driver/can/cbs/tx-async/test_can_cbs_tx_imd-request.c`` +- ``tests/unit/app/driver/can/cbs/test_can_helper.c`` +- ``tests/unit/app/driver/can/cbs/test_can_helper.h`` +- ``tests/unit/app/driver/can/cbs/tx-cyclic/test_can_cbs_tx_bms-state-details.c`` +- ``tests/unit/app/driver/can/cbs/tx-cyclic/test_can_cbs_tx_bms-state.c`` +- ``tests/unit/app/driver/can/cbs/tx-cyclic/test_can_cbs_tx_cell-temperatures.c`` +- ``tests/unit/app/driver/can/cbs/tx-cyclic/test_can_cbs_tx_cell-voltages.c`` +- ``tests/unit/app/driver/can/cbs/tx-cyclic/test_can_cbs_tx_pack-limits.c`` +- ``tests/unit/app/driver/can/cbs/tx-cyclic/test_can_cbs_tx_pack-minimum-maximum-values.c`` +- ``tests/unit/app/driver/can/cbs/tx-cyclic/test_can_cbs_tx_pack-state-estimation.c`` +- ``tests/unit/app/driver/can/cbs/tx-cyclic/test_can_cbs_tx_pack-values-p0.c`` +- ``tests/unit/app/driver/can/cbs/tx-cyclic/test_can_cbs_tx_pack-values-p1.c`` +- ``tests/unit/app/driver/can/cbs/tx-cyclic/test_can_cbs_tx_string-minimum-maximum-values.c`` +- ``tests/unit/app/driver/can/cbs/tx-cyclic/test_can_cbs_tx_string-state-estimation.c`` +- ``tests/unit/app/driver/can/cbs/tx-cyclic/test_can_cbs_tx_string-state.c`` +- ``tests/unit/app/driver/can/cbs/tx-cyclic/test_can_cbs_tx_string-values-p0.c`` +- ``tests/unit/app/driver/can/cbs/tx-cyclic/test_can_cbs_tx_string-values-p1.c`` +- ``tests/unit/app/driver/can/test_can.c`` +- ``tests/unit/app/driver/can/test_can_1.c`` +- ``tests/unit/app/driver/can/test_can_2.c`` +- ``tests/unit/app/driver/config/test_can_cfg.c`` +- ``tests/unit/app/driver/config/test_can_cfg_rx.c`` +- ``tests/unit/app/driver/config/test_can_cfg_tx_cyclic.c`` +- ``tests/unit/app/engine/diag/cbs/test_diag_cbs_can.c`` +- ``tests/unit/support/test_can_mpu_prototype_queue_create_stub.h`` Description ----------- @@ -247,16 +253,22 @@ with an extended 29-bit identifier. This configuration is done in function Configuration errors in |halcogen| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -When using the CAN interface ``CAN4``, special care has to be taken because of -a bug in |halcogen|. For more information, refer to -:ref:`HALCOGEN_TOOL_DOCUMENTATION`. +Using the CAN1 mailbox 42 +------------------------- Additionally, there is a bug in |halcogen| regarding the CAN1 mailbox 42 as described in :ref:`HALCOGEN_TOOL_DOCUMENTATION`. The missing configuration for this mailbox is also done in function ``CAN_ConfigureRxMailboxesForExtendedIdentifiers()``. -Mailbox 42 is configured -to receive all CAN messages with a standard 11-bit identifier. +Mailbox 42 is configured to receive all CAN messages with a standard 11-bit +identifier. + +Using the CAN4 interface +------------------------ + +If the CAN Module should be extended to the CAN4 interface, a workaround for a +bug in |halcogen| has to be applied. +For details, please refer to :ref:`HALCOGEN_TOOL_DOCUMENTATION`. Callback definition ^^^^^^^^^^^^^^^^^^^ diff --git a/docs/software/modules/driver/can/can_how-to.rst b/docs/software/modules/driver/can/can_how-to.rst index 0675f596..dfafb20d 100644 --- a/docs/software/modules/driver/can/can_how-to.rst +++ b/docs/software/modules/driver/can/can_how-to.rst @@ -15,181 +15,151 @@ How to add a new CAN Message #. Set the DLC #. Add a comment that follows the pattern - - ``optional comment text (in:, fv:tx) optional comment text`` - for files that are transmitted and - - ``optional comment text (in:, fv:rx) optional comment text`` - for files that are received as seen by the |foxbms| hardware. - -#. Export the symbol file as dbc file. -#. Declare the callback function in - - - in file ``src\app\driver\can\cbs\tx\can_cbs_tx.h`` for - the transmit callbacks - - in file ``src\app\driver\can\cbs\rx\can_cbs_rx.h`` for - the receive callbacks - -#. Implement a callback. - If the message handling suites in any of the existing callback - implementation files (``src/app/driver/can/cbs/tx/*`` or respectively - ``src/app/driver/can/cbs/rx/*``), implement the callback there, otherwise - create a new file (and accompanying test file) and implement the callback - there. - -#. Add the message ID and message details: - - - in file ``src/app/driver/config/can_cfg_tx-message-definitions.h`` for - transmit messages - - in file ``src/app/driver/config/can_cfg_rx-message-definitions.h`` for - receive messages - -#. Add the message to the callback array in - - - in file ``src/app/driver/config/can_cfg_tx.c`` for transmit messages in - the array ``can_txMessages`` - - in file ``src/app/driver/config/can_cfg_rx.c`` for receive messages in the - array ``can_rxMessages`` - -#. Verify that the CAN message is defined and implemented as expected by - |foxbms| guidelines: - - .. code-block:: console + +-------------------+------------------------------------------------------------------------------+ + | Message direction | Comment | + +===================+==============================================================================+ + | transmit | ``optional comment text (in:, fv:tx) optional comment text`` | + +-------------------+------------------------------------------------------------------------------+ + | receive | ``optional comment text (in:, fv:rx) optional comment text`` | + +-------------------+------------------------------------------------------------------------------+ + + The message direction is specified as seen from the BMS view. + +#. Export the symbol file as dbc file to ``tools/dbc/foxbms.dbc``. +#. Declare the callback function for the message in the appropriate file: + + +---------------------------------+-----------------------------------------------------------------+ + | Message type | File | + +=================================+=================================================================+ + | cyclic transmit callbacks | ``src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_cyclic.h`` | + +---------------------------------+-----------------------------------------------------------------+ + | asynchronous transmit callbacks | ``src/app/driver/can/cbs/tx-async/can_cbs_tx_.h`` | + +---------------------------------+-----------------------------------------------------------------+ + | receive callbacks | ``src/app/driver/can/cbs/rx/can_cbs_rx.h`` | + +---------------------------------+-----------------------------------------------------------------+ + + **Note 1**: every asynchronous transmit callback is implemented in an + separate file, that **only** consists of this one, specific callback. + + **Note 2**: the name *callback* is kept for the asynchronous transmit + callbacks for consistency reasons although they are not callbacks in the + classical meaning of the word. + + **Note 3**: Only the transmitted messages are separated in cyclic and + asynchronous callbacks, therefore there is only one file for receive + callbacks. + This file includes the callbacks for the cyclic and asynchronously received + messages. + The same reason applies for splitting things between + *asynchronous transmit*, *cyclic transmit* and *receive* is consistently + through the document and code. + +#. Implement a callback in a new file and the accompanying test file/files in + the appropriate directories at: + + +---------------------------------+------------------------------------------------------------------------------------------+ + | Message type | New file | + +=================================+==========================================================================================+ + | cyclic transmit callbacks | ``src/app/driver/can/cbs/tx-cyclic/*`` and ``tests/unit/app/driver/can/cbs/tx-cyclic/*`` | + +---------------------------------+------------------------------------------------------------------------------------------+ + | asynchronous transmit callbacks | ``src/app/driver/can/cbs/tx-async/*`` and ``tests/unit/app/driver/can/cbs/tx-async/*`` | + +---------------------------------+------------------------------------------------------------------------------------------+ + | receive callbacks | ``src/app/driver/can/cbs/rx/*`` and ``tests/unit/app/driver/can/cbs/rx/*`` | + +---------------------------------+------------------------------------------------------------------------------------------+ + +#. Add the message ID and message details + + +---------------------------------+-------------------------------------------------------------------+ + | Message type | Declaration file | + +=================================+===================================================================+ + | cyclic transmit callbacks | ``src/app/driver/config/can_cfg_tx-cyclic-message-definitions.h`` | + +---------------------------------+-------------------------------------------------------------------+ + | asynchronous transmit callbacks | ``src/app/driver/config/can_cfg_tx-async-message-definitions.h`` | + +---------------------------------+-------------------------------------------------------------------+ + | receive callbacks | ``src/app/driver/config/can_cfg_rx-message-definitions.h`` | + +---------------------------------+-------------------------------------------------------------------+ + +#. Add the message to the respective callback array: + ++---------------------------------+-------------------------------------------------------------------------------------+ +| Message type | | ++=================================+=====================================================================================+ +| cyclic transmit callbacks | array ``can_txMessages`` in the file ``src/app/driver/config/can_cfg_tx_cyclic.c`` | ++---------------------------------+-------------------------------------------------------------------------------------+ +| asynchronous transmit callbacks | The callbacks for asynchronous transmit messages are not stored in some array. | +| | These callbacks are only called asynchronously in some specific code paths and | +| | so there is no central "processing" function for these callbacks. | ++---------------------------------+-------------------------------------------------------------------------------------+ +| receive callbacks | array ``can_rxMessages`` in the file ``src/app/driver/config/can_cfg_rx.c`` | ++---------------------------------+-------------------------------------------------------------------------------------+ + +#. Verify that the CAN message is defined and implemented as expected: + + .. code-block:: powershell :caption: Verify CAN message definition and callback implementation :name: can-message-implementation-verification - C:\Users\vulpes\Documents\foxbms-2>python tests/can/check_ids.py - C:\Users\vulpes\Documents\foxbms-2>python tests/can/check_implemented.py + PS C:\Users\vulpes\Documents\foxbms-2> .\fox.ps1 run-script tests/can/check_ids.py + PS C:\Users\vulpes\Documents\foxbms-2> .\fox.ps1 run-script tests/can/check_implemented.py .. warning:: These script do no syntactical or similar checks of the implementation. These scripts do text based comparisons in order to help to get a consistent style for the CAN message implementations. - **The correct implementation etc. must be checked by compiling and debugging.** - -Example for a Transmit Message -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Creating the Transmit Message -""""""""""""""""""""""""""""" - -In this example a message to transmit the |foxbms| system status is -implemented. -The name of the message is therefore ``BmsState`` (following PascalCase naming -convention). -In the symbol file the message is implemented as ``foxBMS_BmsState`` (prefix -``foxBMS`` followed by the message name) with the ID ``0x220``. -As the message is transmitted from the point of view of the BMS, the comment in -the symbol file must be -``Message containing the foxBMS system state (in:can_cbs_tx_bms-state.c:CANTX_BmsState, fv:tx)``. -The new dbc file must be exported. - -Required Macros -""""""""""""""" - -The name of the macro to be implemented in -``src/app/driver/config/can_cfg_tx-message-definitions.h`` needs to be prefixed -with ``CANTX_ID`` (``CANTX`` is the module prefix) followed by the message name -in uppercase (``BMS_STATE``), i.e., the full macro name is -``CANTX_BMS_STATE_ID``. -The macro for the period of the transmitted message must be defined: Module -prefix ``CANTX`` followed by the message name (``BMS_STATE``) and the period in -milliseconds (``PERIOD_ms``), i.e., the full macro name is -``CANTX_BMS_STATE_PERIOD_ms``. -Last, the macro for the phase of the transmitted message must be defined: -Module prefix ``CANTX`` followed by the message name (``BMS_STATE``) and the -phase in milliseconds (``PHASE_ms``) i.e., the full macro name is -``CANTX_BMS_STATE_PHASE_ms``. - -.. literalinclude:: ./can_how-to_tx.c - :language: C - :linenos: - :start-after: example-can-message-id-macro-start - :end-before: example-can-message-id-macro-end - :caption: Adding the new message ID to the transmit message definition file - ``src/app/driver/config/can_cfg_tx-message-definitions.h`` - :name: adding-the-new-message-id - -Now the details of the ID need to be added in an additional macro, that is then -used for the initialization of the transmitted messages macro. -The macro must be named Module prefix (``CANTX``) followed by the message name -(``BMS_STATE``) and suffixed with ``MESSAGE``. - -.. literalinclude:: ./can_how-to_tx.c - :language: C - :linenos: - :start-after: example-can-message-id-details-start - :end-before: example-can-message-id-details-end - :caption: Adding the details of the new message ID to the transmit message - definition file - ``src/app/driver/config/can_cfg_tx-message-definitions.h`` - :name: adding-the-details-to-the-new-message + **The correct implementation etc. must be checked by compiling and ** + **debugging.** -Callback Function -""""""""""""""""" +Example for a Cyclic Transmit Message +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -The callback declaration must be done in file -``src\app\driver\can\cbs\tx\can_cbs_tx.h``. +.. include:: ./can_how-to_tx_cyclic.rst -.. literalinclude:: ./can_how-to_tx.c - :language: C - :linenos: - :start-after: example-can-tx-messages-callback-declaration-start - :end-before: example-can-tx-messages-callback-declaration-end - :caption: Declaration of the callback function in - ``src\app\driver\can\cbs\tx\can_cbs_tx.h`` - :name: callback-declaration - -The callback definition must be done in the appropriate implementation file, -i.e., for the BMS state message in -``src\app\driver\can\cbs\tx\can_cbs_tx_bms-state.c``. - -.. literalinclude:: ./can_how-to_tx.c - :language: C - :linenos: - :start-after: example-can-tx-messages-callback-definition-start - :end-before: example-can-tx-messages-callback-definition-end - :caption: Definition of the callback function in - ``src\app\driver\can\cbs\tx\can_cbs_tx_bms-state.c`` - :name: callback-definition +Example for an Asynchronous Transmit Message +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Required Variables Adaptations -"""""""""""""""""""""""""""""" +.. include:: ./can_how-to_tx_async.rst -The message needs to be added the transmitted messages array as follows: +Example for a Receive Message +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -.. literalinclude:: ./can_how-to_tx.c - :language: C - :linenos: - :start-after: example-can-tx-messages-configuration-start - :end-before: example-can-tx-messages-configuration-end - :caption: Adding the new message to the registry of transmitted messages - ``src/app/driver/config/can_cfg_tx.c`` - :name: adding-the-the-new-message-to-the-tx-registry +.. include:: ./can_how-to_rx.rst -Verification -"""""""""""" -Run the check scripts to verify that the messages are implemented as described -in this how-to. +Multi-string Support when using Isabellenhuette IVT Current Sensors +------------------------------------------------------------------- -.. code-block:: console - :caption: Verify CAN transmit message definition and callback implementation +In Multi-string systems multiple current sensors must be used in order to +measure the current in each string. +In case CAN-based Isabellenhuette IVT current sensors are used, the CAN message +IDs indicate which current sensor is in which string. - C:\Users\vulpes\Documents\foxbms-2>python tests/can/check_ids.py - C:\Users\vulpes\Documents\foxbms-2>python tests/can/check_implemented.py +.. note:: -Example for a Receive Message -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + This of course means, that the current sensors must be correctly configured, + i.e., that all current sensors in the system use unique CAN messages IDs. + Furthermore, the current sensors must be placed in the correct string + (accordingly to their CAN message IDs), as otherwise the current + measurements would be assigned to the wrong strings. -The implementation of a receive message is done analogous, by replacing ``tx`` -with ``rx`` in paths, prefixes, function names etc. +The *string-selection* code in the function ``CANRX_CurrentSensor`` right at +the beginning of the function must be adapted as shown in +:numref:`current-sensor-string-selection`. -Using the CAN4 interface ------------------------- +.. code-block:: c + :linenos: + :caption: String selection for the current sensor measurement in + multi-string systems based on the CAN message ID + :name: current-sensor-string-selection + + if (message.id <= CANRX_STRING0_ENERGY_COUNTER_ID) { + stringNumber = 0u; + } else if (message.id <= CANRX_STRING1_ENERGY_COUNTER_ID) { + stringNumber = 1u; + } else { + FAS_ASSERT(FAS_TRAP); + } -If the CAN Module should be extended to the CAN4 interface, a workaround for a -bug in |halcogen| has to be applied. -For details, please refer to :ref:`HALCOGEN_TOOL_DOCUMENTATION`. Further Reading --------------- diff --git a/docs/software/modules/driver/can/can_how-to_rx.rst b/docs/software/modules/driver/can/can_how-to_rx.rst new file mode 100644 index 00000000..20259d65 --- /dev/null +++ b/docs/software/modules/driver/can/can_how-to_rx.rst @@ -0,0 +1,3 @@ +The implementation of a receive message is done analogous for cyclic transmit +functions, by replacing ``tx`` with ``rx`` in paths, prefixes, function names +etc. diff --git a/src/app/driver/can/cbs/tx/can_cbs_tx_string-minimum-maximum-values.c b/docs/software/modules/driver/can/can_how-to_tx_async.c similarity index 62% rename from src/app/driver/can/cbs/tx/can_cbs_tx_string-minimum-maximum-values.c rename to docs/software/modules/driver/can/can_how-to_tx_async.c index 1603fe25..f2322ae6 100644 --- a/src/app/driver/can/cbs/tx/can_cbs_tx_string-minimum-maximum-values.c +++ b/docs/software/modules/driver/can/can_how-to_tx_async.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,36 +33,50 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ /** - * @file can_cbs_tx_string-minimum-maximum-values.c + * @file can_how-to_tx_async.c * @author foxBMS Team - * @date 2021-04-20 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup DRIVER - * @prefix CANTX + * @date 2023-09-28 (date of creation) + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup SOME_GROUP + * @prefix CAN + * + * @brief Documentation file to show how a new asynchronous transmitted CAN + * message is added to the project. * - * @brief CAN driver Tx callback implementation - * @details CAN Tx callback for min/max values */ /*========== Includes =======================================================*/ -#include "bms.h" -#include "can_cbs_tx.h" -#include "can_cfg_tx-message-definitions.h" -#include "can_helper.h" -#include -#include +#include "can_how-to_tx_async.h" + +#include "can_cfg.h" + +#include "can_cbs_tx_debug-response.h" +#include "fstd_types.h" /*========== Macros and Definitions =========================================*/ +/* example-can-tx-asynchronous-message-id-macro-start */ +/** CAN message properties for BMS state message. Required properties are: + * - Message ID + * - Identifier type (standard or extended) + * - Endianness of message data + * - data length of the message @{*/ +#define CANTX_DEBUG_RESPONSE_ID (0x301u) +#define CANTX_DEBUG_RESPONSE_ID_TYPE (CAN_STANDARD_IDENTIFIER_11_BIT) +#define CANTX_DEBUG_RESPONSE_ENDIANNESS (CAN_BIG_ENDIAN) +#define CANTX_DEBUG_RESPONSE_DLC (CAN_DEFAULT_DLC) +/**@}*/ +/* example-can-tx-asynchronous-message-id-macro-end */ + /*========== Static Constant and Variable Definitions =======================*/ /*========== Extern Constant and Variable Definitions =======================*/ @@ -73,6 +87,14 @@ /*========== Extern Function Implementations ================================*/ +/* example-can-tx-asynchronous-messages-callback-definition-start */ +extern STD_RETURN_TYPE_e CANTX_DebugResponse(CANTX_DEBUG_RESPONSE_ACTIONS_e action) { + STD_RETURN_TYPE_e success = STD_NOT_OK; + /* Do message handling stuff */ + return success; +} +/* example-can-tx-asynchronous-messages-callback-definition-end */ + /*========== Externalized Static Function Implementations (Unit Test) =======*/ #ifdef UNITY_UNIT_TEST #endif diff --git a/src/app/driver/config/nxpfs85xx_cfg.h b/docs/software/modules/driver/can/can_how-to_tx_async.h similarity index 70% rename from src/app/driver/config/nxpfs85xx_cfg.h rename to docs/software/modules/driver/can/can_how-to_tx_async.h index 6205f6a6..73b05626 100644 --- a/src/app/driver/config/nxpfs85xx_cfg.h +++ b/docs/software/modules/driver/can/can_how-to_tx_async.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,33 +33,32 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ /** - * @file nxpfs85xx_cfg.h + * @file can_how-to_tx_async.h * @author foxBMS Team - * @date 2020-03-18 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup DRIVERS_CONFIGURATION - * @prefix SBC - * - * @brief Config header file for SBC module - * - * @details It must always be used when creating new c header files. + * @date 2023-10-10 (date of creation) + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup SOME_GROUP + * @prefix CAN * + * @brief Documentation file to show how a new asynchronous transmitted CAN + * message is added to the project. + * @details TODO */ -#ifndef FOXBMS__NXPFS85XX_CFG_H_ -#define FOXBMS__NXPFS85XX_CFG_H_ +#ifndef FOXBMS__CAN_HOW_TO_TX_ASYNC_H_ +#define FOXBMS__CAN_HOW_TO_TX_ASYNC_H_ /*========== Includes =======================================================*/ - -#include +#include "can_cbs_tx_debug-response.h" +#include "fstd_types.h" /*========== Macros and Definitions =========================================*/ @@ -67,8 +66,12 @@ /*========== Extern Function Prototypes =====================================*/ +/* example-can-tx-asynchronous-messages-callback-declaration-start */ +extern STD_RETURN_TYPE_e CANTX_DebugResponse(CANTX_DEBUG_RESPONSE_ACTIONS_e action); +/* example-can-tx-asynchronous-messages-callback-declaration-end */ + /*========== Externalized Static Functions Prototypes (Unit Test) ===========*/ #ifdef UNITY_UNIT_TEST #endif -#endif /* FOXBMS__NXPFS85XX_CFG_H_ */ +#endif /* FOXBMS__CAN_HOW_TO_TX_ASYNC_H_ */ diff --git a/docs/software/modules/driver/can/can_how-to_tx_async.rst b/docs/software/modules/driver/can/can_how-to_tx_async.rst new file mode 100644 index 00000000..a8092538 --- /dev/null +++ b/docs/software/modules/driver/can/can_how-to_tx_async.rst @@ -0,0 +1,83 @@ +Creating the Asynchronous Transmit Message +"""""""""""""""""""""""""""""""""""""""""" + +In this example a message to asynchronously transmit some debug information on +request is implemented. +The name of the message is therefore ``DebugResponse`` (following PascalCase +naming convention). +In the symbol file the message is implemented as ``foxBMS_DebugResponse`` +(prefix ``foxBMS`` followed by the message name) and the message ID ``0x227``. +As the message is transmitted (``tx``) from the point of view of the BMS, the +comment in the symbol file must be +``Message containing some debug information (in:can_cbs_tx_debug-response.c:CANTX_DebugResponse, fv:tx)``. +The changed symbol file must be saved and - as changes are applied - the dbc +file must be exported again. + +Required Macros +""""""""""""""" + +The name of the macros to be implemented in +``src/app/driver/config/can_cfg_tx-async-message-definitions.h`` need to be +prefixed with ``CANTX`` (as ``CANTX`` is the module prefix) and the message +name in uppercase (``DEBUG_RESPONSE``), i.e., all macro names start with +``CANTX_DEBUG_RESPONSE``. +The message's + +- ID with suffix ``_ID``, +- ID type with suffix ``_ID_TYPE``, +- endianness with suffix ``_ENDIANNESS`` and +- DLC with suffix ``_DLC`` + +need to be defined through macros: + +.. literalinclude:: ./can_how-to_tx_async.c + :language: C + :linenos: + :start-after: example-can-tx-asynchronous-message-id-macro-start + :end-before: example-can-tx-asynchronous-message-id-macro-end + :caption: Adding the new message ID to the cyclic transmit message + definition file + ``src/app/driver/config/can_cfg_tx-async-message-definitions.h`` + +Callback Function +""""""""""""""""" + +The callback declaration must be done in file +``src/app/driver/can/cbs/tx-async/can_cbs_tx_debug-response.h``. + +.. literalinclude:: ./can_how-to_tx_async.h + :language: C + :linenos: + :start-after: example-can-tx-asynchronous-messages-callback-declaration-start + :end-before: example-can-tx-asynchronous-messages-callback-declaration-end + :caption: Declaration of the callback function in + ``src/app/driver/can/cbs/tx-async/can_cbs_tx_debug-response.h`` + +The callback definition must be done in the appropriate implementation file, +i.e., for the BMS state message in +``src/app/driver/can/cbs/tx-async/can_cbs_tx_debug-response.c``. + +.. literalinclude:: ./can_how-to_tx_async.c + :language: C + :linenos: + :start-after: example-can-tx-asynchronous-messages-callback-definition-start + :end-before: example-can-tx-asynchronous-messages-callback-definition-end + :caption: Definition of the callback function in + ``src/app/driver/can/cbs/tx-async/can_cbs_tx_debug-response.c`` + +As last step, the function ``CANTX_DebugResponse`` needs to be called in the +appropriate code path of the user code. +This cannot be covered by the how to as this is too user specific. +See already implemented asynchronous transmitted messages as starting point. + +Verification +"""""""""""" + +Run the check scripts to verify that the messages are implemented as described +in this how-to. + +.. code-block:: powershell + :caption: Verify CAN transmit message definition and callback implementation + + PS C:\Users\vulpes\Documents\foxbms-2> .\fox.ps1 run-script tests/can/check_ids.py + PS C:\Users\vulpes\Documents\foxbms-2> .\fox.ps1 run-script tests/can/check_implemented.py diff --git a/docs/software/modules/driver/can/can_how-to_tx.c b/docs/software/modules/driver/can/can_how-to_tx_cyclic.c similarity index 78% rename from docs/software/modules/driver/can/can_how-to_tx.c rename to docs/software/modules/driver/can/can_how-to_tx_cyclic.c index 5a3259c0..5a86c891 100644 --- a/docs/software/modules/driver/can/can_how-to_tx.c +++ b/docs/software/modules/driver/can/can_how-to_tx_cyclic.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,23 +33,23 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ /** - * @file can_how-to_tx.c + * @file can_how-to_tx_cyclic.c * @author foxBMS Team * @date 2022-09-12 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup SOME_GROUP * @prefix CAN * - * @brief Documentation file to show how a new CAN message is added to the - * project. + * @brief Documentation file to show how a new cyclic transmitted CAN + * message is added to the project. * */ @@ -59,57 +59,59 @@ /*========== Macros and Definitions =========================================*/ -/* example-can-message-id-macro-start */ +/* example-can-tx-cyclic-message-id-macro-start */ /** CAN message properties for BMS state message. Required properties are: * - Message ID * - Identifier type (standard or extended) * - Message period and phase in ms - * - Endianness of message data @{*/ + * - Endianness of message data + * - data length of the message @{*/ #define CANTX_BMS_STATE_ID (0x220u) #define CANTX_BMS_STATE_ID_TYPE (CAN_STANDARD_IDENTIFIER_11_BIT) #define CANTX_BMS_STATE_PERIOD_ms (100u) #define CANTX_BMS_STATE_PHASE_ms (0u) #define CANTX_BMS_STATE_ENDIANNESS (CAN_BIG_ENDIAN) +#define CANTX_BMS_STATE_DLC (CAN_DEFAULT_DLC) /**@}*/ -/* example-can-message-id-macro-end */ +/* example-can-tx-cyclic-message-id-macro-end */ -/* example-can-message-id-details-start */ +/* example-can-tx-cyclic-message-id-details-start */ #define CANTX_BMS_STATE_MESSAGE \ { \ - .dlc = CAN_DEFAULT_DLC, \ .id = CANTX_BMS_STATE_ID, \ - .endianness = CANTX_BMS_STATE_ENDIANNESS, \ .idType = CANTX_BMS_STATE_ID_TYPE, \ + .dlc = CANTX_BMS_STATE_DLC, \ + .endianness = CANTX_BMS_STATE_ENDIANNESS, \ }, \ { \ .period = CANTX_BMS_STATE_PERIOD_ms, .phase = CANTX_BMS_STATE_PHASE_ms \ } -/* example-can-message-id-details-end */ +/* example-can-tx-cyclic-message-id-details-end */ /*========== Static Constant and Variable Definitions =======================*/ /*========== Extern Constant and Variable Definitions =======================*/ -/* example-can-tx-messages-callback-declaration-start */ +/* example-can-tx-cyclic-messages-callback-declaration-start */ extern uint32_t CANTX_BmsState( CAN_MESSAGE_PROPERTIES_s message, uint8_t *pCanData, uint8_t *pMuxId, const CAN_SHIM_s *const kpkCanShim); -/* example-can-tx-messages-callback-declaration-end */ +/* example-can-tx-cyclic-messages-callback-declaration-end */ -/* example-can-tx-messages-configuration-start */ +/* example-can-tx-cyclic-messages-configuration-start */ const CAN_TX_MESSAGE_TYPE_s can_txMessages[] = { /* other messages */ {CAN_NODE_1, CANTX_BMS_STATE_MESSAGE, &CANTX_BmsState, NULL_PTR}, /*!< BMS state */ }; -/* example-can-tx-messages-configuration-end */ +/* example-can-tx-cyclic-messages-configuration-end */ /*========== Static Function Prototypes =====================================*/ /*========== Static Function Implementations ================================*/ /*========== Extern Function Implementations ================================*/ -/* example-can-tx-messages-callback-definition-start */ +/* example-can-tx-cyclic-messages-callback-definition-start */ extern uint32_t CANTX_BmsState( CAN_MESSAGE_PROPERTIES_s message, uint8_t *pCanData, @@ -118,7 +120,7 @@ extern uint32_t CANTX_BmsState( /* Do message handling stuff */ return 0; } -/* example-can-tx-messages-callback-definition-end */ +/* example-can-tx-cyclic-messages-callback-definition-end */ /*========== Externalized Static Function Implementations (Unit Test) =======*/ #ifdef UNITY_UNIT_TEST diff --git a/docs/software/modules/driver/can/can_how-to_tx_cyclic.rst b/docs/software/modules/driver/can/can_how-to_tx_cyclic.rst new file mode 100644 index 00000000..2a96ab63 --- /dev/null +++ b/docs/software/modules/driver/can/can_how-to_tx_cyclic.rst @@ -0,0 +1,106 @@ +Creating the Cyclic Transmit Message +"""""""""""""""""""""""""""""""""""" + +In this example a message to transmit the system status is implemented. +The name of the message is therefore ``BmsState`` (following PascalCase naming +convention). +In the symbol file the message is implemented as ``foxBMS_BmsState`` (prefix +``foxBMS`` followed by the message name) and the message ID ``0x220``. +As the message is transmitted (``tx``) from the point of view of the BMS, the +comment in the symbol file must be +``Message containing the foxBMS system state (in:can_cbs_tx_bms-state.c:CANTX_BmsState, fv:tx)``. +The changed symbol file must be saved and - as changes are applied - the dbc +file must be exported again. + +Required Macros +""""""""""""""" + +The name of the macros to be implemented in +``src/app/driver/config/can_cfg_tx-cyclic-message-definitions.h`` need to be +prefixed with ``CANTX`` (as ``CANTX`` is the module prefix) and the message +name in uppercase (``BMS_STATE``), i.e., all macro names start with +``CANTX_BMS_STATE``. +The message's + +- ID with suffix ``_ID``, +- ID type with suffix ``_ID_TYPE``, +- period with suffix ``_PERIOD_ms``, +- phase with suffix ``_PHASE_ms``, +- endianness with suffix ``_ENDIANNESS`` and +- DLC with suffix ``_DLC`` + +need to be defined through macros: + +.. literalinclude:: ./can_how-to_tx_cyclic.c + :language: C + :linenos: + :start-after: example-can-tx-cyclic-message-id-macro-start + :end-before: example-can-tx-cyclic-message-id-macro-end + :caption: Adding the new message ID to the cyclic transmit message + definition file + ``src/app/driver/config/can_cfg_tx-cyclic-message-definitions.h`` + +Now the details of the ID need to be added in an additional macro, that is then +used for the initialization of the transmitted messages macro. +The macro must be named Module prefix (``CANTX``) followed by the message name +(``BMS_STATE``) and suffixed with ``MESSAGE``. + +.. literalinclude:: ./can_how-to_tx_cyclic.c + :language: C + :linenos: + :start-after: example-can-tx-cyclic-message-id-details-start + :end-before: example-can-tx-cyclic-message-id-details-end + :caption: Adding the details of the new message ID to the cyclic transmit + message definition file + ``src/app/driver/config/can_cfg_tx-cyclic-message-definitions.h`` + +Callback Function +""""""""""""""""" + +The callback declaration must be added to the file +``src/app/driver/can/cbs/tx/can_cbs_tx_cyclic.h``. + +.. literalinclude:: ./can_how-to_tx_cyclic.c + :language: C + :linenos: + :start-after: example-can-tx-cyclic-messages-callback-declaration-start + :end-before: example-can-tx-cyclic-messages-callback-declaration-end + :caption: Declaration of the callback function in + ``src/app/driver/can/cbs/tx/can_cbs_tx_cyclic.h`` + +The callback definition must be done in the appropriate implementation file, +i.e., for the BMS state message in +``src/app/driver/can/cbs/tx/can_cbs_tx_bms-state.c``. + +.. literalinclude:: ./can_how-to_tx_cyclic.c + :language: C + :linenos: + :start-after: example-can-tx-cyclic-messages-callback-definition-start + :end-before: example-can-tx-cyclic-messages-callback-definition-end + :caption: Definition of the callback function in + ``src/app/driver/can/cbs/tx/can_cbs_tx_bms-state.c`` + +Required Variables Adaptations +"""""""""""""""""""""""""""""" + +The message needs to be added the transmitted messages array as follows: + +.. literalinclude:: ./can_how-to_tx_cyclic.c + :language: C + :linenos: + :start-after: example-can-tx-cyclic-messages-configuration-start + :end-before: example-can-tx-cyclic-messages-configuration-end + :caption: Adding the new message to the registry of transmitted messages + ``src/app/driver/config/can_cfg_tx_cyclic.c`` + +Verification +"""""""""""" + +Run the check scripts to verify that the messages are implemented as described +in this how-to. + +.. code-block:: powershell + :caption: Verify CAN transmit message definition and callback implementation + + PS C:\Users\vulpes\Documents\foxbms-2> .\fox.ps1 run-script tests/can/check_ids.py + PS C:\Users\vulpes\Documents\foxbms-2> .\fox.ps1 run-script tests/can/check_implemented.py diff --git a/docs/software/modules/driver/can/wscript b/docs/software/modules/driver/can/wscript old mode 100644 new mode 100755 index 528bd612..b6fe0147 --- a/docs/software/modules/driver/can/wscript +++ b/docs/software/modules/driver/can/wscript @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -52,7 +51,6 @@ import os def build(bld): """Build the database object""" - source = ["can_how-to_tx.c"] dummy_txt = "/* dummy file */\n" dummy_headers = ["mcu", "HL_can", "os"] for i in dummy_headers: @@ -68,15 +66,10 @@ def build(bld): ), ] cflags = bld.env.CFLAGS_FOXBMS - bld.path.find_or_declare("needed-for-build.h").write( - "/* dummy file */\n" - "extern void OS_EnterTaskCritical();\n" - "extern void OS_ExitTaskCritical();\n" - ) - bld.add_group() + bld( features="c", - source=source, + source="can_how-to_tx_cyclic.c", defines=[ "MCU_ADC1_MAX_NR_CHANNELS=1", "OS_QUEUE=void", @@ -87,3 +80,32 @@ def build(bld): cflags=(cflags + ["--diag_suppress=179", "--diag_suppress=552"]), idx=1, ) + + async_extra_includes = [ + os.path.join( + "..", + "..", + "..", + "..", + "..", + "src", + "app", + "driver", + "can", + "cbs", + "tx-async", + ) + ] + bld( + features="c", + source="can_how-to_tx_async.c", + defines=[ + "MCU_ADC1_MAX_NR_CHANNELS=1", + "OS_QUEUE=void", + "canBASE_t=void", + 'canREG1="((uint32_t *)0xFFF7DC00U)"', + ], + includes=includes + async_extra_includes, + cflags=(cflags + ["--diag_suppress=179", "--diag_suppress=552"]), + idx=2, + ) diff --git a/docs/software/modules/driver/contactor/contactor.rst b/docs/software/modules/driver/contactor/contactor.rst index 85f0b447..0942a145 100644 --- a/docs/software/modules/driver/contactor/contactor.rst +++ b/docs/software/modules/driver/contactor/contactor.rst @@ -12,20 +12,20 @@ Module Files Driver ^^^^^^ -- ``src/app/driver/contactor/contactor.c`` (`API <../../../../_static/doxygen/src/html/contactor_8c.html>`__, `source <../../../../_static/doxygen/src/html/contactor_8c_source.html>`__) -- ``src/app/driver/contactor/contactor.h`` (`API <../../../../_static/doxygen/src/html/contactor_8h.html>`__, `source <../../../../_static/doxygen/src/html/contactor_8h_source.html>`__) +- ``src/app/driver/contactor/contactor.c`` +- ``src/app/driver/contactor/contactor.h`` Configuration ^^^^^^^^^^^^^ -- ``src/app/driver/config/contactor_cfg.c`` (`API <../../../../_static/doxygen/src/html/contactor__cfg_8c.html>`__, `source <../../../../_static/doxygen/src/html/contactor__cfg_8c_source.html>`__) -- ``src/app/driver/config/contactor_cfg.h`` (`API <../../../../_static/doxygen/src/html/contactor__cfg_8h.html>`__, `source <../../../../_static/doxygen/src/html/contactor__cfg_8h_source.html>`__) +- ``src/app/driver/config/contactor_cfg.c`` +- ``src/app/driver/config/contactor_cfg.h`` Unit Test ^^^^^^^^^ -- ``tests/unit/app/driver/contactor/contactor.c`` (`API <../../../../_static/doxygen/tests/html/tests__contactor_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__contactor_8c_source.html>`__) -- ``tests/unit/app/driver/config/contactor_cfg.c`` (`API <../../../../_static/doxygen/tests/html/tests__contactor__cfg_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__contactor__cfg_8c_source.html>`__) +- ``tests/unit/app/driver/contactor/contactor.c`` +- ``tests/unit/app/driver/config/contactor_cfg.c`` Description ----------- diff --git a/docs/software/modules/driver/crc/crc.rst b/docs/software/modules/driver/crc/crc.rst index 417378f9..d811918e 100644 --- a/docs/software/modules/driver/crc/crc.rst +++ b/docs/software/modules/driver/crc/crc.rst @@ -12,13 +12,13 @@ Module Files Driver ^^^^^^ -- ``src/app/driver/crc/crc.c`` (`API <../../../../_static/doxygen/src/html/crc_8c.html>`__, `source <../../../../_static/doxygen/src/html/crc_8c_source.html>`__) -- ``src/app/driver/crc/crc.h`` (`API <../../../../_static/doxygen/src/html/crc_8h.html>`__, `source <../../../../_static/doxygen/src/html/crc_8h_source.html>`__) +- ``src/app/driver/crc/crc.c`` +- ``src/app/driver/crc/crc.h`` Unit Test ^^^^^^^^^ -- ``tests/unit/app/driver/crc/test_crc.c`` (`API <../../../../_static/doxygen/tests/html/test__crc_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__crc_8c_source.html>`__) +- ``tests/unit/app/driver/crc/test_crc.c`` Description ----------- diff --git a/docs/software/modules/driver/dma/dma.rst b/docs/software/modules/driver/dma/dma.rst index e74771e4..d323c37a 100644 --- a/docs/software/modules/driver/dma/dma.rst +++ b/docs/software/modules/driver/dma/dma.rst @@ -3,33 +3,26 @@ .. _DMA: -DMA -=== - -.. spelling:: - cacheable - kB - Module Files ------------ Driver ^^^^^^ -- ``src/app/driver/dma/dma.c`` (`API <../../../../_static/doxygen/src/html/dma_8c.html>`__, `source <../../../../_static/doxygen/src/html/dma_8c_source.html>`__) -- ``src/app/driver/dma/dma.h`` (`API <../../../../_static/doxygen/src/html/dma_8h.html>`__, `source <../../../../_static/doxygen/src/html/dma_8h_source.html>`__) +- ``src/app/driver/dma/dma.c`` +- ``src/app/driver/dma/dma.h`` Configuration ^^^^^^^^^^^^^ -- ``src/app/driver/config/dma_cfg.c`` (`API <../../../../_static/doxygen/src/html/dma__cfg_8c.html>`__, `source <../../../../_static/doxygen/src/html/dma__cfg_8c_source.html>`__) -- ``src/app/driver/config/dma_cfg.h`` (`API <../../../../_static/doxygen/src/html/dma__cfg_8h.html>`__, `source <../../../../_static/doxygen/src/html/dma__cfg_8h_source.html>`__) +- ``src/app/driver/config/dma_cfg.c`` +- ``src/app/driver/config/dma_cfg.h`` Unit Test ^^^^^^^^^ -- ``tests/unit/app/driver/dma/dma.c`` (`API <../../../../_static/doxygen/tests/html/test__dma_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__dma_8c_source.html>`__) -- ``tests/unit/app/driver/config/dma_cfg.c`` (`API <../../../../_static/doxygen/tests/html/test__dma__cfg_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__dma__cfg_8c_source.html>`__) +- ``tests/unit/app/driver/dma/dma.c`` +- ``tests/unit/app/driver/config/dma_cfg.c`` Description ----------- diff --git a/docs/software/modules/driver/foxmath/foxmath.rst b/docs/software/modules/driver/foxmath/foxmath.rst index 465893ae..b8048d13 100644 --- a/docs/software/modules/driver/foxmath/foxmath.rst +++ b/docs/software/modules/driver/foxmath/foxmath.rst @@ -12,8 +12,8 @@ Module Files Driver ^^^^^^ -- ``src/app/driver/foxmath/foxmath.c`` (`API <../../../../_static/doxygen/src/html/foxmath_8c.html>`__, `source <../../../../_static/doxygen/src/html/foxmath_8c_source.html>`__) -- ``src/app/driver/foxmath/foxmath.h`` (`API <../../../../_static/doxygen/src/html/foxmath_8h.html>`__, `source <../../../../_static/doxygen/src/html/foxmath_8h_source.html>`__) +- ``src/app/driver/foxmath/foxmath.c`` +- ``src/app/driver/foxmath/foxmath.h`` Configuration ^^^^^^^^^^^^^ @@ -23,7 +23,7 @@ Configuration Unit Test ^^^^^^^^^ -- ``tests/unit/app/driver/foxmath/test_foxmath.c`` (`API <../../../../_static/doxygen/tests/html/test__foxmath_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__foxmath_8c_source.html>`__) +- ``tests/unit/app/driver/foxmath/test_foxmath.c`` Description ----------- diff --git a/docs/software/modules/driver/foxmath/utils.rst b/docs/software/modules/driver/foxmath/utils.rst index 838bfa7b..b9dcbbff 100644 --- a/docs/software/modules/driver/foxmath/utils.rst +++ b/docs/software/modules/driver/foxmath/utils.rst @@ -12,7 +12,7 @@ Module Files Driver ^^^^^^ -- ``src/app/driver/foxmath/utils.h`` (`API <../../../../_static/doxygen/src/html/utils_8h.html>`__, `source <../../../../_static/doxygen/src/html/utils_8h_source.html>`__) +- ``src/app/driver/foxmath/utils.h`` Configuration ^^^^^^^^^^^^^ diff --git a/docs/software/modules/driver/fram/fram.rst b/docs/software/modules/driver/fram/fram.rst index 5d62f59a..e7250be1 100644 --- a/docs/software/modules/driver/fram/fram.rst +++ b/docs/software/modules/driver/fram/fram.rst @@ -12,19 +12,19 @@ Module Files Driver ^^^^^^ -- ``src/app/driver/fram/fram.c`` (`API <../../../../_static/doxygen/src/html/fram_8c.html>`__, `source <../../../../_static/doxygen/src/html/fram_8c_source.html>`__) -- ``src/app/driver/fram/fram.h`` (`API <../../../../_static/doxygen/src/html/fram_8h.html>`__, `source <../../../../_static/doxygen/src/html/fram_8h_source.html>`__) +- ``src/app/driver/fram/fram.c`` +- ``src/app/driver/fram/fram.h`` Configuration ^^^^^^^^^^^^^ -- ``src/app/driver/config/fram_cfg.c`` (`API <../../../../_static/doxygen/src/html/fram__cfg_8c.html>`__, `source <../../../../_static/doxygen/src/html/fram__cfg_8c_source.html>`__) -- ``src/app/driver/config/fram_cfg.h`` (`API <../../../../_static/doxygen/src/html/fram__cfg_8h.html>`__, `source <../../../../_static/doxygen/src/html/fram__cfg_8h_source.html>`__) +- ``src/app/driver/config/fram_cfg.c`` +- ``src/app/driver/config/fram_cfg.h`` Unit Test ^^^^^^^^^ -- ``tests/unit/app/driver/fram/test_fram.c`` (`API <../../../../_static/doxygen/tests/html/test__fram_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__fram_8c_source.html>`__) +- ``tests/unit/app/driver/fram/test_fram.c`` Description ----------- diff --git a/docs/software/modules/driver/htsen/htsen.rst b/docs/software/modules/driver/htsen/htsen.rst index 2da88b8d..aa6d432c 100644 --- a/docs/software/modules/driver/htsen/htsen.rst +++ b/docs/software/modules/driver/htsen/htsen.rst @@ -12,13 +12,13 @@ Module Files Driver ^^^^^^ -- ``src/app/driver/htsen/htsen.c`` (`API <../../../../_static/doxygen/src/html/htsen_8c.html>`__, `source <../../../../_static/doxygen/src/html/htsen_8c_source.html>`__) -- ``src/app/driver/htsen/htsen.h`` (`API <../../../../_static/doxygen/src/html/htsen_8h.html>`__, `source <../../../../_static/doxygen/src/html/htsen_8h_source.html>`__) +- ``src/app/driver/htsen/htsen.c`` +- ``src/app/driver/htsen/htsen.h`` Unit Test ^^^^^^^^^ -- ``tests/unit/app/driver/htsen/test_htsen.c`` (`API <../../../../_static/doxygen/tests/html/test__htsen_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__pex_8c_source.html>`__) +- ``tests/unit/app/driver/htsen/test_htsen.c`` Detailed Description -------------------- diff --git a/docs/software/modules/driver/i2c/i2c.rst b/docs/software/modules/driver/i2c/i2c.rst index cf8d13d0..dac218b6 100644 --- a/docs/software/modules/driver/i2c/i2c.rst +++ b/docs/software/modules/driver/i2c/i2c.rst @@ -6,22 +6,19 @@ I2C Module ========== -.. spelling:: - cacheable - Module Files ------------ Driver ^^^^^^ -- ``src/app/driver/i2c/i2c.c`` (`API <../../../../_static/doxygen/src/html/i2c_8c.html>`__, `source <../../../../_static/doxygen/src/html/i2c_8c_source.html>`__) -- ``src/app/driver/i2c/i2c.h`` (`API <../../../../_static/doxygen/src/html/i2c_8h.html>`__, `source <../../../../_static/doxygen/src/html/i2c_8h_source.html>`__) +- ``src/app/driver/i2c/i2c.c`` +- ``src/app/driver/i2c/i2c.h`` Unit Test ^^^^^^^^^ -- ``tests/unit/app/driver/can/test_i2c.c`` (`API <../../../../_static/doxygen/tests/html/test__i2c_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__i2c_8c_source.html>`__) +- ``tests/unit/app/driver/can/test_i2c.c`` Detailed Description -------------------- diff --git a/docs/software/modules/driver/imd/bender/bender_ir155.rst b/docs/software/modules/driver/imd/bender/bender_ir155.rst index 86cb4dfd..6d5656f7 100644 --- a/docs/software/modules/driver/imd/bender/bender_ir155.rst +++ b/docs/software/modules/driver/imd/bender/bender_ir155.rst @@ -12,21 +12,21 @@ Module Files Driver ^^^^^^ -- ``src/app/driver/imd/bender/ir155/bender_ir155.c`` (`API <../../../../../_static/doxygen/src/html/bender__ir155_8c.html>`__, `source <../../../../../_static/doxygen/src/html/bender__ir155_8c_source.html>`__) -- ``src/app/driver/imd/bender/ir155/bender_ir155.h`` (`API <../../../../../_static/doxygen/src/html/bender__ir155_8h.html>`__, `source <../../../../../_static/doxygen/src/html/bender__ir155_8h_source.html>`__) -- ``src/app/driver/imd/bender/ir155/bender_ir155_helper.c`` (`API <../../../../../_static/doxygen/src/html/bender__ir155__helper_8c.html>`__, `source <../../../../../_static/doxygen/src/html/bender__ir155__helper_8c_source.html>`__) -- ``src/app/driver/imd/bender/ir155/bender_ir155_helper.h`` (`API <../../../../../_static/doxygen/src/html/bender__ir155__helper_8h.html>`__, `source <../../../../../_static/doxygen/src/html/bender__ir155__helper_8h_source.html>`__) +- ``src/app/driver/imd/bender/ir155/bender_ir155.c`` +- ``src/app/driver/imd/bender/ir155/bender_ir155.h`` +- ``src/app/driver/imd/bender/ir155/bender_ir155_helper.c`` +- ``src/app/driver/imd/bender/ir155/bender_ir155_helper.h`` Configuration ^^^^^^^^^^^^^ -- ``src/app/driver/imd/bender/ir155/config/bender_ir155_cfg.h`` (`API <../../../../../_static/doxygen/src/html/bender__ir155__cfg_8h.html>`__, `source <../../../../../_static/doxygen/src/html/bender__ir155__cfg_8h_source.html>`__) +- ``src/app/driver/imd/bender/ir155/config/bender_ir155_cfg.h`` Unit Test ^^^^^^^^^ -- ``tests/unit/app/driver/imd/bender/ir155/test_bender_ir155.c`` (`API <../../../../../_static/doxygen/tests/html/test__bender__ir155_8c.html>`__, `source <../../../../../_static/doxygen/tests/html/test__bender__ir155_8c_source.html>`__) -- ``tests/unit/app/driver/imd/bender/ir155/test_bender_helper_ir155.c`` (`API <../../../../../_static/doxygen/tests/html/test__bender__ir155__helper_8c.html>`__, `source <../../../../../_static/doxygen/tests/html/test__bender__ir155__helper_8c_source.html>`__) +- ``tests/unit/app/driver/imd/bender/ir155/test_bender_ir155.c`` +- ``tests/unit/app/driver/imd/bender/ir155/test_bender_helper_ir155.c`` Description of the IMD state machine ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -35,10 +35,10 @@ The Bender IR155 driver is interfaced and controlled by the superimposed :ref:`IMD state machine`. The required functionality, that needs to be provided by this driver is: -* Initialize the Bender IR155 device -* Activate the insulation measurement -* Deactivate the insulation measurement -* Measurement of the insulation resistance +- Initialize the Bender IR155 device +- Activate the insulation measurement +- Deactivate the insulation measurement +- Measurement of the insulation resistance Each functionality is implemented in a dedicated state machine that is explained in detail in the following. diff --git a/docs/software/modules/driver/imd/bender/bender_iso165c.rst b/docs/software/modules/driver/imd/bender/bender_iso165c.rst index 6319a51d..27adffbf 100644 --- a/docs/software/modules/driver/imd/bender/bender_iso165c.rst +++ b/docs/software/modules/driver/imd/bender/bender_iso165c.rst @@ -12,23 +12,29 @@ Module Files Driver ^^^^^^ -- ``src/app/driver/imd/bender/iso165c/bender_iso165c.c`` (`API <../../../../../_static/doxygen/src/html/bender__iso165c_8c.html>`__, `source <../../../../../_static/doxygen/src/html/bender__iso165c_8c_source.html>`__) -- ``src/app/driver/imd/bender/iso165c/bender_iso165c.h`` (`API <../../../../../_static/doxygen/src/html/bender__iso165c_8h.html>`__, `source <../../../../../_static/doxygen/src/html/bender__iso165c_8h_source.html>`__) +- ``src/app/driver/imd/bender/iso165c/bender_iso165c.c`` +- ``src/app/driver/imd/bender/iso165c/bender_iso165c.h`` Configuration ^^^^^^^^^^^^^ -- ``src/app/driver/imd/bender/iso165c/bender_iso165c.c`` (`API <../../../../../_static/doxygen/src/html/bender__iso165c__cfg_8c.html>`__, `source <../../../../../_static/doxygen/src/html/bender__iso165c_8c_source.html>`__) -- ``src/app/driver/imd/bender/iso165c/bender_iso165c.h`` (`API <../../../../../_static/doxygen/src/html/bender__iso165c__cfg_8h.html>`__, `source <../../../../../_static/doxygen/src/html/bender__iso165c_8h_source.html>`__) +- ``src/app/driver/imd/bender/iso165c/bender_iso165c.c`` +- ``src/app/driver/imd/bender/iso165c/bender_iso165c.h`` Unit Test ^^^^^^^^^ -- ``tests/unit/app/driver/imd/bender/iso165c/test_bender_iso165c.c`` (`API <../../../../../_static/doxygen/tests/html/test__bender__iso165c_8c.html>`__, `source <../../../../../_static/doxygen/tests/html/test__bender__iso165c_8c_source.html>`__) +- ``tests/unit/app/driver/imd/bender/iso165c/test_bender_iso165c.c`` Description ----------- +Communication +^^^^^^^^^^^^^ + +The Bender iso165C is connected to the BMS via CAN-bus, the handling +of the messages is implemented in the can callback files. + Description of the IMD state machine ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -36,10 +42,10 @@ The Bender iso165C driver is interfaced and controlled by the superimposed :ref:`IMD state machine`. The required functionality, that needs to be provided by this driver is: -* Initialize the Bender iso165C device -* Activate the insulation measurement -* Deactivate the insulation measurement -* Measurement of the insulation resistance +- Initialize the Bender iso165C device +- Activate the insulation measurement +- Deactivate the insulation measurement +- Measurement of the insulation resistance Each functionality is implemented in a dedicated state machine that is explained in detail in the following. diff --git a/docs/software/modules/driver/imd/bender/state-diagrams/iso165c_state_diagram_disable.dot b/docs/software/modules/driver/imd/bender/state-diagrams/iso165c_state_diagram_disable.dot index 0eeaa00e..906c6569 100644 --- a/docs/software/modules/driver/imd/bender/state-diagrams/iso165c_state_diagram_disable.dot +++ b/docs/software/modules/driver/imd/bender/state-diagrams/iso165c_state_diagram_disable.dot @@ -1,4 +1,4 @@ -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause diff --git a/docs/software/modules/driver/imd/bender/state-diagrams/iso165c_state_diagram_enable.dot b/docs/software/modules/driver/imd/bender/state-diagrams/iso165c_state_diagram_enable.dot index 12496420..93c7f684 100644 --- a/docs/software/modules/driver/imd/bender/state-diagrams/iso165c_state_diagram_enable.dot +++ b/docs/software/modules/driver/imd/bender/state-diagrams/iso165c_state_diagram_enable.dot @@ -1,4 +1,4 @@ -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause diff --git a/docs/software/modules/driver/imd/bender/state-diagrams/iso165c_state_diagram_initialization.dot b/docs/software/modules/driver/imd/bender/state-diagrams/iso165c_state_diagram_initialization.dot index 35b41f15..1d856424 100644 --- a/docs/software/modules/driver/imd/bender/state-diagrams/iso165c_state_diagram_initialization.dot +++ b/docs/software/modules/driver/imd/bender/state-diagrams/iso165c_state_diagram_initialization.dot @@ -1,4 +1,4 @@ -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause diff --git a/docs/software/modules/driver/imd/bender/state-diagrams/iso165c_state_diagram_running.dot b/docs/software/modules/driver/imd/bender/state-diagrams/iso165c_state_diagram_running.dot index 27832ddb..2aa6d743 100644 --- a/docs/software/modules/driver/imd/bender/state-diagrams/iso165c_state_diagram_running.dot +++ b/docs/software/modules/driver/imd/bender/state-diagrams/iso165c_state_diagram_running.dot @@ -1,4 +1,4 @@ -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause diff --git a/docs/software/modules/driver/imd/imd-state-diagram.dot b/docs/software/modules/driver/imd/imd-state-diagram.dot index 757f8829..0815a3bb 100644 --- a/docs/software/modules/driver/imd/imd-state-diagram.dot +++ b/docs/software/modules/driver/imd/imd-state-diagram.dot @@ -1,4 +1,4 @@ -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause diff --git a/docs/software/modules/driver/imd/none/no-imd.rst b/docs/software/modules/driver/imd/none/no-imd.rst index 619291f2..a6508245 100644 --- a/docs/software/modules/driver/imd/none/no-imd.rst +++ b/docs/software/modules/driver/imd/none/no-imd.rst @@ -12,8 +12,8 @@ Module Files Driver ^^^^^^ -- ``src/app/driver/imd/none/no-imd.c`` (`API <../../../../_static/doxygen/src/html/no__imd_8c.html>`__, `source <../../../../_static/doxygen/src/html/no__imd_8c_source.html>`__) -- ``src/app/driver/imd/none/no-imd.h`` (`API <../../../../_static/doxygen/src/html/no__imd_8h.html>`__, `source <../../../../_static/doxygen/src/html/no__imd_8h_source.html>`__) +- ``src/app/driver/imd/none/no-imd.c`` +- ``src/app/driver/imd/none/no-imd.h`` Configuration ^^^^^^^^^^^^^ @@ -23,7 +23,7 @@ Configuration Unit Test ^^^^^^^^^ -- ``tests/unit/app/driver/imd/none/test_no-imd.c`` (`API <../../../../_static/doxygen/tests/html/test__no__imd_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__no__imd_8c_source.html>`__) +- ``tests/unit/app/driver/imd/none/test_no-imd.c`` Description ----------- diff --git a/docs/software/modules/driver/interlock/interlock-schematic.dot b/docs/software/modules/driver/interlock/interlock-schematic.dot index d64d23dd..860cc8b2 100644 --- a/docs/software/modules/driver/interlock/interlock-schematic.dot +++ b/docs/software/modules/driver/interlock/interlock-schematic.dot @@ -1,4 +1,4 @@ -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause diff --git a/docs/software/modules/driver/interlock/interlock.rst b/docs/software/modules/driver/interlock/interlock.rst index a1dbb64b..be86b940 100644 --- a/docs/software/modules/driver/interlock/interlock.rst +++ b/docs/software/modules/driver/interlock/interlock.rst @@ -12,18 +12,18 @@ Module Files Driver ^^^^^^ -- ``src/app/driver/interlock/interlock.c`` (`API <../../../../_static/doxygen/src/html/interlock_8c.html>`__, `source <../../../../_static/doxygen/src/html/interlock_8c_source.html>`__) -- ``src/app/driver/interlock/interlock.h`` (`API <../../../../_static/doxygen/src/html/interlock_8h.html>`__, `source <../../../../_static/doxygen/src/html/interlock_8h_source.html>`__) +- ``src/app/driver/interlock/interlock.c`` +- ``src/app/driver/interlock/interlock.h`` Configuration ^^^^^^^^^^^^^ -- ``src/app/driver/config/interlock_cfg.h`` (`API <../../../../_static/doxygen/src/html/interlock__cfg_8h.html>`__, `source <../../../../_static/doxygen/src/html/interlock__cfg_8h_source.html>`__) +- ``src/app/driver/config/interlock_cfg.h`` Unit Test ^^^^^^^^^ -- ``tests/unit/app/driver/interlock/test_interlock.c`` (`API <../../../../_static/doxygen/tests/html/test__interlock_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__interlock_8c_source.html>`__) +- ``tests/unit/app/driver/interlock/test_interlock.c`` Description ----------- @@ -46,7 +46,7 @@ Circuit description ^^^^^^^^^^^^^^^^^^^ The interlock circuit consists of a main path that is continuously supplied by -the static power supply of the |master|. +the static power supply of the |foxbms-bms-master|. In :numref:`interlock-circuit-simplified` this is called ``static low-power supply``. This supply does not have to be enabled and is powered by the 5V rail of the diff --git a/docs/software/modules/driver/io/io.rst b/docs/software/modules/driver/io/io.rst index 94cd4598..a9a0387b 100644 --- a/docs/software/modules/driver/io/io.rst +++ b/docs/software/modules/driver/io/io.rst @@ -12,7 +12,7 @@ Module Files Driver ^^^^^^ -- ``src/app/driver/io/io.h`` (`API <../../../../_static/doxygen/src/html/io_8h.html>`__, `source <../../../../_static/doxygen/src/html/io_8h_source.html>`__) +- ``src/app/driver/io/io.h`` Configuration ^^^^^^^^^^^^^ diff --git a/docs/software/modules/driver/mcu/mcu.rst b/docs/software/modules/driver/mcu/mcu.rst index b0aafa66..2bc3b993 100644 --- a/docs/software/modules/driver/mcu/mcu.rst +++ b/docs/software/modules/driver/mcu/mcu.rst @@ -12,8 +12,8 @@ Module Files Driver ^^^^^^ -- ``src/app/driver/mcu/mcu.c`` (`API <../../../../_static/doxygen/src/html/mcu_8c.html>`__, `source <../../../../_static/doxygen/src/html/mcu_8c_source.html>`__) -- ``src/app/driver/mcu/mcu.h`` (`API <../../../../_static/doxygen/src/html/mcu_8h.html>`__, `source <../../../../_static/doxygen/src/html/mcu_8h_source.html>`__) +- ``src/app/driver/mcu/mcu.c`` +- ``src/app/driver/mcu/mcu.h`` Configuration ^^^^^^^^^^^^^ @@ -23,7 +23,7 @@ Configuration Unit Test ^^^^^^^^^ -- ``tests/unit/app/driver/mcu/test_mcu.c`` (`API <../../../../_static/doxygen/tests/html/test__mcu_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__mcu_8c_source.html>`__) +- ``tests/unit/app/driver/mcu/test_mcu.c`` Description ----------- diff --git a/docs/software/modules/driver/meas/meas.rst b/docs/software/modules/driver/meas/meas.rst index 4fb88ec8..04b7d7c4 100644 --- a/docs/software/modules/driver/meas/meas.rst +++ b/docs/software/modules/driver/meas/meas.rst @@ -12,8 +12,8 @@ Module Files Driver ^^^^^^ -- ``src/app/driver/meas/meas.c`` (`API <../../../../_static/doxygen/src/html/meas_8c.html>`__, `source <../../../../_static/doxygen/src/html/meas_8c_source.html>`__) -- ``src/app/driver/meas/meas.h`` (`API <../../../../_static/doxygen/src/html/meas_8h.html>`__, `source <../../../../_static/doxygen/src/html/meas_8h_source.html>`__) +- ``src/app/driver/meas/meas.c`` +- ``src/app/driver/meas/meas.h`` Configuration ^^^^^^^^^^^^^ @@ -23,7 +23,7 @@ Configuration Unit Test ^^^^^^^^^ -- ``tests/unit/app/driver/meas/test_meas.c`` (`API <../../../../_static/doxygen/tests/html/test__meas_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__meas_8c_source.html>`__) +- ``tests/unit/app/driver/meas/test_meas.c`` Description ----------- diff --git a/docs/software/modules/driver/pex/pex.rst b/docs/software/modules/driver/pex/pex.rst index f739b332..d2ffaa55 100644 --- a/docs/software/modules/driver/pex/pex.rst +++ b/docs/software/modules/driver/pex/pex.rst @@ -12,19 +12,19 @@ Module Files Driver ^^^^^^ -- ``src/app/driver/pex/pex.c`` (`API <../../../../_static/doxygen/src/html/pex_8c.html>`__, `source <../../../../_static/doxygen/src/html/pex_8c_source.html>`__) -- ``src/app/driver/pex/pex.h`` (`API <../../../../_static/doxygen/src/html/pex_8h.html>`__, `source <../../../../_static/doxygen/src/html/pex_8h_source.html>`__) +- ``src/app/driver/pex/pex.c`` +- ``src/app/driver/pex/pex.h`` Configuration ^^^^^^^^^^^^^ -- ``src/app/driver/config/pex_cfg.c`` (`API <../../../../_static/doxygen/src/html/pex__cfg_8c.html>`__, `source <../../../../_static/doxygen/src/html/pex__cfg_8c_source.html>`__) -- ``src/app/driver/config/pex_cfg.h`` (`API <../../../../_static/doxygen/src/html/pex__cfg_8h.html>`__, `source <../../../../_static/doxygen/src/html/pex__cfg_8h_source.html>`__) +- ``src/app/driver/config/pex_cfg.c`` +- ``src/app/driver/config/pex_cfg.h`` Unit Test ^^^^^^^^^ -- ``tests/unit/app/driver/pex/test_pex.c`` (`API <../../../../_static/doxygen/tests/html/test__pex_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__pex_8c_source.html>`__) +- ``tests/unit/app/driver/pex/test_pex.c`` Detailed Description -------------------- diff --git a/docs/software/modules/driver/pwm/pwm.rst b/docs/software/modules/driver/pwm/pwm.rst index 1d670321..735242b2 100644 --- a/docs/software/modules/driver/pwm/pwm.rst +++ b/docs/software/modules/driver/pwm/pwm.rst @@ -12,8 +12,8 @@ Module Files Driver ^^^^^^ -- ``src/app/driver/pwm/pwm.c`` (`API <../../../../_static/doxygen/src/html/pwm_8c.html>`__, `source <../../../../_static/doxygen/src/html/pwm_8c_source.html>`__) -- ``src/app/driver/pwm/pwm.h`` (`API <../../../../_static/doxygen/src/html/pwm_8h.html>`__, `source <../../../../_static/doxygen/src/html/pwm_8h_source.html>`__) +- ``src/app/driver/pwm/pwm.c`` +- ``src/app/driver/pwm/pwm.h`` Configuration ^^^^^^^^^^^^^ @@ -23,7 +23,7 @@ Configuration Unit Test ^^^^^^^^^ -- ``tests/unit/app/driver/test_pwm.c`` (`API <../../../../_static/doxygen/tests/html/test__pwm_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__pwm_8c_source.html>`__) +- ``tests/unit/app/driver/test_pwm.c`` Description ----------- diff --git a/docs/software/modules/driver/rtc/rtc.rst b/docs/software/modules/driver/rtc/rtc.rst index 74e63c6c..fda17671 100644 --- a/docs/software/modules/driver/rtc/rtc.rst +++ b/docs/software/modules/driver/rtc/rtc.rst @@ -12,8 +12,8 @@ Module Files Driver ^^^^^^ -- ``src/app/driver/rtc/rtc.c`` (`API <../../../../_static/doxygen/src/html/rtc_8c.html>`__, `source <../../../../_static/doxygen/src/html/rtc_8c_source.html>`__) -- ``src/app/driver/rtc/rtc.h`` (`API <../../../../_static/doxygen/src/html/rtc_8h.html>`__, `source <../../../../_static/doxygen/src/html/rtc_8h_source.html>`__) +- ``src/app/driver/rtc/rtc.c`` +- ``src/app/driver/rtc/rtc.h`` Configuration ^^^^^^^^^^^^^ @@ -23,7 +23,7 @@ Configuration Unit Test ^^^^^^^^^ -- ``tests/unit/app/driver/rtc/test_rtc.c`` (`API <../../../../_static/doxygen/tests/html/test__rtc_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__rtc_8c_source.html>`__) +- ``tests/unit/app/driver/rtc/test_rtc.c`` Description ----------- diff --git a/docs/software/modules/driver/sbc/sbc.rst b/docs/software/modules/driver/sbc/sbc.rst index 3376c91e..a24abd57 100644 --- a/docs/software/modules/driver/sbc/sbc.rst +++ b/docs/software/modules/driver/sbc/sbc.rst @@ -19,32 +19,32 @@ Vendor Driver parameter into the functions to enable the usage of multiple ICs in the system. -- ``src/app/driver/sbc/fs8x_driver/sbc_fs8x_assert.h`` (`API <../../../../_static/doxygen/src/html/sbc__fs8x__assert_8h.html>`__, `source <../../../../_static/doxygen/src/html/sbc__fs8x__assert_8h_source.html>`__) -- ``src/app/driver/sbc/fs8x_driver/sbc_fs8x_common.h`` (`API <../../../../_static/doxygen/src/html/sbc__fs8x__common_8h.html>`__, `source <../../../../_static/doxygen/src/html/sbc__fs8x__common_8h_source.html>`__) -- ``src/app/driver/sbc/fs8x_driver/sbc_fs8x_communication.c`` (`API <../../../../_static/doxygen/src/html/sbc__fs8x__communication_8c.html>`__, `source <../../../../_static/doxygen/src/html/sbc__fs8x__communication_8c_source.html>`__) -- ``src/app/driver/sbc/fs8x_driver/sbc_fs8x_communication.h`` (`API <../../../../_static/doxygen/src/html/sbc__fs8x__communication_8h.html>`__, `source <../../../../_static/doxygen/src/html/sbc__fs8x__communication_8h_source.html>`__) -- ``src/app/driver/sbc/fs8x_driver/sbc_fs8x_map.h`` (`API <../../../../_static/doxygen/src/html/sbc__fs8x__map_8h.html>`__, `source <../../../../_static/doxygen/src/html/sbc__fs8x__map_8h_source.html>`__) -- ``src/app/driver/sbc/fs8x_driver/sbc_fs8x.c`` (`API <../../../../_static/doxygen/src/html/sbc__fs8x_8c.html>`__, `source <../../../../_static/doxygen/src/html/sbc__fs8x_8c_source.html>`__) -- ``src/app/driver/sbc/fs8x_driver/sbc_fs8x.h`` (`API <../../../../_static/doxygen/src/html/sbc__fs8x_8h.html>`__, `source <../../../../_static/doxygen/src/html/sbc__fs8x_8h_source.html>`__) +- ``src/app/driver/sbc/fs8x_driver/sbc_fs8x_assert.h`` +- ``src/app/driver/sbc/fs8x_driver/sbc_fs8x_common.h`` +- ``src/app/driver/sbc/fs8x_driver/sbc_fs8x_communication.c`` +- ``src/app/driver/sbc/fs8x_driver/sbc_fs8x_communication.h`` +- ``src/app/driver/sbc/fs8x_driver/sbc_fs8x_map.h`` +- ``src/app/driver/sbc/fs8x_driver/sbc_fs8x.c`` +- ``src/app/driver/sbc/fs8x_driver/sbc_fs8x.h`` Driver ^^^^^^ -- ``src/app/driver/sbc/sbc.c`` (`API <../../../../_static/doxygen/src/html/sbc_8c.html>`__, `source <../../../../_static/doxygen/src/html/sbc_8c_source.html>`__) -- ``src/app/driver/sbc/sbc.h`` (`API <../../../../_static/doxygen/src/html/sbc_8h.html>`__, `source <../../../../_static/doxygen/src/html/sbc_8h_source.html>`__) -- ``src/app/driver/sbc/nxpfs85xx.c`` (`API <../../../../_static/doxygen/src/html/nxpfs85xx_8c.html>`__, `source <../../../../_static/doxygen/src/html/nxpfs85xx_8c_source.html>`__) -- ``src/app/driver/sbc/nxpfs85xx.h`` (`API <../../../../_static/doxygen/src/html/nxpfs85xx_8h.html>`__, `source <../../../../_static/doxygen/src/html/nxpfs85xx_8h_source.html>`__) +- ``src/app/driver/sbc/sbc.c`` +- ``src/app/driver/sbc/sbc.h`` +- ``src/app/driver/sbc/nxpfs85xx.c`` +- ``src/app/driver/sbc/nxpfs85xx.h`` Configuration ^^^^^^^^^^^^^ -- ``src/app/driver/config/nxpfs85xx_cfg.h`` (`API <../../../../_static/doxygen/src/html/nxpfs85xx__cfg_8h.html>`__, `source <../../../../_static/doxygen/src/html/nxpfs85xx__cfg_8h_source.html>`__) +*none* Unit Test ^^^^^^^^^ -- ``tests/unit/app/driver/sbc/test_sbc.c`` (`API <../../../../_static/doxygen/tests/html/test__sbc_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__sbc_8c_source.html>`__) -- ``tests/unit/app/driver/sbc/test_nxpfs85xx.c`` (`API <../../../../_static/doxygen/tests/html/test__nxpfs85xx_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__nxpfs85xx_8c_source.html>`__) +- ``tests/unit/app/driver/sbc/test_sbc.c`` +- ``tests/unit/app/driver/sbc/test_nxpfs85xx.c`` Description ----------- @@ -63,3 +63,18 @@ This sequence is shown in :numref:`sbc_state_machine_wakeup`. .. graphviz:: sbc_state_machine_wakeup.dot :caption: SBC wakeup state chart :name: sbc_state_machine_wakeup + + +FAQs +---- + +**Question:** + +The MC33FS830A0ES needs to be programmed. +Can the programming procedure for NXP MC33FS8530A0ES be shared? + +**Answer:** + +Unfortunately not. +The details of how to program the MC33FS830A0ES cannot be shared due to NDAs. +You need to get in contact with the manufacturer for this information. diff --git a/docs/software/modules/driver/sbc/sbc_state_machine_wakeup.dot b/docs/software/modules/driver/sbc/sbc_state_machine_wakeup.dot index 183be900..9525216a 100644 --- a/docs/software/modules/driver/sbc/sbc_state_machine_wakeup.dot +++ b/docs/software/modules/driver/sbc/sbc_state_machine_wakeup.dot @@ -1,4 +1,4 @@ -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause diff --git a/docs/software/modules/driver/spi/spi.rst b/docs/software/modules/driver/spi/spi.rst index a25a11b6..af905d6f 100644 --- a/docs/software/modules/driver/spi/spi.rst +++ b/docs/software/modules/driver/spi/spi.rst @@ -12,21 +12,21 @@ Module Files Driver ^^^^^^ -- ``src/app/driver/spi/spi.c`` (`API <../../../../_static/doxygen/src/html/spi_8c.html>`__, `source <../../../../_static/doxygen/src/html/spi_8c_source.html>`__) -- ``src/app/driver/spi/spi.h`` (`API <../../../../_static/doxygen/src/html/spi_8h.html>`__, `source <../../../../_static/doxygen/src/html/spi_8h_source.html>`__) +- ``src/app/driver/spi/spi.c`` +- ``src/app/driver/spi/spi.h`` Configuration ^^^^^^^^^^^^^ -- ``src/app/driver/config/spi_cfg.c`` (`API <../../../../_static/doxygen/src/html/spi__cfg_8c.html>`__, `source <../../../../_static/doxygen/src/html/spi__cfg_8c_source.html>`__) -- ``src/app/driver/config/spi_cfg.h`` (`API <../../../../_static/doxygen/src/html/spi__cfg_8h.html>`__, `source <../../../../_static/doxygen/src/html/spi__cfg_8h_source.html>`__) -- ``src/app/driver/spi/spi_cfg-helper.h`` (`API <../../../../_static/doxygen/src/html/spi__cfg_helper_8h.html>`__, `source <../../../../_static/doxygen/src/html/spi__cfg_helper_8h_source.html>`__) +- ``src/app/driver/config/spi_cfg.c`` +- ``src/app/driver/config/spi_cfg.h`` +- ``src/app/driver/spi/spi_cfg-helper.h`` Unit Test ^^^^^^^^^ -- ``tests/unit/app/driver/spi/test_spi.c`` (`API <../../../../_static/doxygen/tests/html/test__spi_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__spi_8c_source.html>`__) -- ``tests/unit/app/driver/config/test_spi_cfg.c`` (`API <../../../../_static/doxygen/tests/html/test__spi__cfg_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__spi__cfg_8c_source.html>`__) +- ``tests/unit/app/driver/spi/test_spi.c`` +- ``tests/unit/app/driver/config/test_spi_cfg.c`` Description ----------- diff --git a/docs/software/modules/driver/sps/sps.rst b/docs/software/modules/driver/sps/sps.rst index 4eadda29..64e8bfb2 100644 --- a/docs/software/modules/driver/sps/sps.rst +++ b/docs/software/modules/driver/sps/sps.rst @@ -12,20 +12,20 @@ Module Files Driver ^^^^^^ -- ``src/app/driver/sps/sps.c`` (`API <../../../../_static/doxygen/src/html/sps_8c.html>`__, `source <../../../../_static/doxygen/src/html/sps_8c_source.html>`__) -- ``src/app/driver/sps/sps.h`` (`API <../../../../_static/doxygen/src/html/sps_8h.html>`__, `source <../../../../_static/doxygen/src/html/sps_8h_source.html>`__) +- ``src/app/driver/sps/sps.c`` +- ``src/app/driver/sps/sps.h`` Configuration ^^^^^^^^^^^^^ -- ``src/app/driver/config/sps_cfg.c`` (`API <../../../../_static/doxygen/src/html/sps__cfg_8c.html>`__, `source <../../../../_static/doxygen/src/html/sps__cfg_8c_source.html>`__) -- ``src/app/driver/config/sps_cfg.h`` (`API <../../../../_static/doxygen/src/html/sps__cfg_8h.html>`__, `source <../../../../_static/doxygen/src/html/sps__cfg_8h_source.html>`__) +- ``src/app/driver/config/sps_cfg.c`` +- ``src/app/driver/config/sps_cfg.h`` Unit Test ^^^^^^^^^ -- ``tests/unit/app/driver/sps/sps.c`` (`API <../../../../_static/doxygen/tests/html/test__sps_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__sps_8c_source.html>`__) -- ``tests/unit/app/driver/config/sps_cfg.c`` (`API <../../../../_static/doxygen/tests/html/test__sps__cfg_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__sps__cfg_8c_source.html>`__) +- ``tests/unit/app/driver/sps/sps.c`` +- ``tests/unit/app/driver/config/sps_cfg.c`` Description ----------- diff --git a/docs/software/modules/driver/ts/adding-a-new-ts_how-to.rst b/docs/software/modules/driver/ts/adding-a-new-ts_how-to.rst index c98c1a8a..519309cb 100644 --- a/docs/software/modules/driver/ts/adding-a-new-ts_how-to.rst +++ b/docs/software/modules/driver/ts/adding-a-new-ts_how-to.rst @@ -17,12 +17,12 @@ The sensor is a NTC thermistor with a resistance value of 10k at room temperature. The steps of adding the sensor contain: - * explanation of the directory structure, - * adding the sensor to the documentation, - * adding the sensor to the codebase (with lookup table and polynomial), - * adding the sensor to the unit tests, - * making known the relevant paths to |code| and - * using the sensor through ``bms.json``. +- explanation of the directory structure, +- adding the sensor to the documentation, +- adding the sensor to the codebase (with lookup table and polynomial), +- adding the sensor to the unit tests, +- making known the relevant paths to |code| and +- using the sensor through ``bms.json``. Basic Directory Structure ------------------------- @@ -127,11 +127,11 @@ Updating the IDE configuration ------------------------------ In order to be able to discover the new files in |code|, it is necessary to -add the path to new sensor to the ``env`` node in -``tools/ide/vscode/c_cpp_properties.json.jinja2`` and rerun the ``configure`` +add the path to new sensor to the +``tools/ide/vscode/src/project-include-path.txt`` and rerun the ``configure`` step of the build system. For the aforementioned example the following line would have to be added: -``"${workspaceFolder}/src/app/driver/ts/good-sensor/temp123",``. +``@@ROOT@@/src/app/driver/ts/good-sensor/temp123``. Using the sensor ---------------- diff --git a/docs/software/modules/driver/ts/epcos/b57251v5103j060.rst b/docs/software/modules/driver/ts/epcos/b57251v5103j060.rst index edd449e9..a445b6b2 100644 --- a/docs/software/modules/driver/ts/epcos/b57251v5103j060.rst +++ b/docs/software/modules/driver/ts/epcos/b57251v5103j060.rst @@ -1,13 +1,6 @@ .. include:: ./../../../../../macros.txt .. include:: ./../../../../../units.txt -.. - Comments: - Epcos is the name of the sensor manufacturer - -.. spelling:: - Epcos - .. _EPCOS_B57251V5103J060: Epcos B57251V5103J060 diff --git a/docs/software/modules/driver/ts/epcos/b57861s0103f045.rst b/docs/software/modules/driver/ts/epcos/b57861s0103f045.rst index ddd5750f..0fe0ff0a 100644 --- a/docs/software/modules/driver/ts/epcos/b57861s0103f045.rst +++ b/docs/software/modules/driver/ts/epcos/b57861s0103f045.rst @@ -1,13 +1,6 @@ .. include:: ./../../../../../macros.txt .. include:: ./../../../../../units.txt -.. - Comments: - Epcos is the name of the sensor manufacturer - -.. spelling:: - Epcos - .. _EPCOS_B57861S0103F045: Epcos B57861S0103F045 diff --git a/docs/software/modules/driver/ts/murata/ncxxxxh103.rst b/docs/software/modules/driver/ts/murata/ncxxxxh103.rst index 1a5a7d86..a9900661 100644 --- a/docs/software/modules/driver/ts/murata/ncxxxxh103.rst +++ b/docs/software/modules/driver/ts/murata/ncxxxxh103.rst @@ -1,13 +1,6 @@ .. include:: ./../../../../../macros.txt .. include:: ./../../../../../units.txt -.. - Comments: - Murata is the name of the sensor manufacturer - -.. spelling:: - Murata - .. _MURATA_NCXXXXH103: MURATA NCXXXXH103 diff --git a/docs/software/modules/driver/ts/ts-sensors.rst b/docs/software/modules/driver/ts/ts-sensors.rst index bf5e9ad2..6842a76e 100644 --- a/docs/software/modules/driver/ts/ts-sensors.rst +++ b/docs/software/modules/driver/ts/ts-sensors.rst @@ -6,19 +6,6 @@ Supported Temperature Sensors ============================= -.. - Comments: - Manufacturer names and their short names - -.. spelling:: - Epcos - Epc - Fak - Murata - Mur - Vishay - Vis - |foxbms| supports various Temperature sensors from different manufacturers as the list below shows. diff --git a/docs/software/modules/driver/ts/ts-short-names.csv b/docs/software/modules/driver/ts/ts-short-names.csv index b95178a7..e4f4d589 100644 --- a/docs/software/modules/driver/ts/ts-short-names.csv +++ b/docs/software/modules/driver/ts/ts-short-names.csv @@ -3,6 +3,7 @@ Epcos;B57251V5103J060;Epc00 Epcos;B57861S0103F045;Epc01 Fake;none;Fak00 Murata;NCXXXXH103;Mur00 +Semitec;103JT;Sem00 Vishay;NTCALUG01A103G;Vis00 Vishay;NTCLE317E4103SBA;Vis01 Vishay;NTCLE413E2103F102L;Vis02 diff --git a/docs/software/modules/driver/ts/vishay/ntcalug01a103g.rst b/docs/software/modules/driver/ts/vishay/ntcalug01a103g.rst index 7c0fa889..cfe84ff2 100644 --- a/docs/software/modules/driver/ts/vishay/ntcalug01a103g.rst +++ b/docs/software/modules/driver/ts/vishay/ntcalug01a103g.rst @@ -1,13 +1,6 @@ .. include:: ./../../../../../macros.txt .. include:: ./../../../../../units.txt -.. - Comments: - Vishay is the name of the sensor manufacturer - -.. spelling:: - Vishay - .. _VISHAY_NTCALUG01A103G: Vishay NTCALUG01A103G diff --git a/docs/software/modules/driver/ts/vishay/ntcle317e4103sba.rst b/docs/software/modules/driver/ts/vishay/ntcle317e4103sba.rst index 3d168dee..c9acddfe 100644 --- a/docs/software/modules/driver/ts/vishay/ntcle317e4103sba.rst +++ b/docs/software/modules/driver/ts/vishay/ntcle317e4103sba.rst @@ -1,13 +1,6 @@ .. include:: ./../../../../../macros.txt .. include:: ./../../../../../units.txt -.. - Comments: - Vishay is the name of the sensor manufacturer - -.. spelling:: - Vishay - .. _VISHAY_NTCLE317E4103SBA: Vishay NTCLE317E4103SBA diff --git a/docs/software/modules/driver/ts/vishay/ntcle413e2103f102l.rst b/docs/software/modules/driver/ts/vishay/ntcle413e2103f102l.rst index 5480901c..f5a31ff6 100644 --- a/docs/software/modules/driver/ts/vishay/ntcle413e2103f102l.rst +++ b/docs/software/modules/driver/ts/vishay/ntcle413e2103f102l.rst @@ -1,13 +1,6 @@ .. include:: ./../../../../../macros.txt .. include:: ./../../../../../units.txt -.. - Comments: - Vishay is the name of the sensor manufacturer - -.. spelling:: - Vishay - .. _VISHAY_NTCLE413E2103F102L: Vishay NTCLE413E2103F102L diff --git a/docs/software/modules/engine/database/database.rst b/docs/software/modules/engine/database/database.rst index bf206333..01000555 100644 --- a/docs/software/modules/engine/database/database.rst +++ b/docs/software/modules/engine/database/database.rst @@ -12,14 +12,14 @@ Module Files Driver ^^^^^^ -- ``src/app/engine/database/database.c`` (`API <../../../../_static/doxygen/src/html/database_8c.html>`__, `source <../../../../_static/doxygen/src/html/database_8c_source.html>`__) -- ``src/app/engine/database/database.h`` (`API <../../../../_static/doxygen/src/html/database_8h.html>`__, `source <../../../../_static/doxygen/src/html/database_8h_source.html>`__) +- ``src/app/engine/database/database.c`` +- ``src/app/engine/database/database.h`` Configuration ^^^^^^^^^^^^^ -- ``src/app/engine/config/database_cfg.c`` (`API <../../../../_static/doxygen/src/html/database__cfg_8c.html>`__, `source <../../../../_static/doxygen/src/html/database__cfg_8c_source.html>`__) -- ``src/app/engine/config/database_cfg.h`` (`API <../../../../_static/doxygen/src/html/database__cfg_8h.html>`__, `source <../../../../_static/doxygen/src/html/database__cfg_8h_source.html>`__) +- ``src/app/engine/config/database_cfg.c`` +- ``src/app/engine/config/database_cfg.h`` Unit Test ^^^^^^^^^ diff --git a/docs/software/modules/engine/database/database_how-to.c b/docs/software/modules/engine/database/database_how-to.c index 7a22a35f..a58b0e5a 100644 --- a/docs/software/modules/engine/database/database_how-to.c +++ b/docs/software/modules/engine/database/database_how-to.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file database_how-to.c * @author foxBMS Team * @date 2021-04-12 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup SOME_GROUP * @prefix DATA * @@ -97,8 +97,8 @@ typedef struct { */ typedef struct { /* This struct needs to be at the beginning of every database entry. During - * the initialization of a database struct, uniqueId must be set to the - * respective database entry representation in enum DATA_BLOCK_ID_e. */ + * the initialization of a database struct, uniqueId must be set to the + * respective database entry representation in enum DATA_BLOCK_ID_e. */ DATA_BLOCK_HEADER_s header; uint16_t dummyValue; } DATA_BLOCK_EXAMPLE_s; @@ -109,8 +109,8 @@ typedef struct { */ typedef struct { /* This struct needs to be at the beginning of every database entry. During - * the initialization of a database struct, uniqueId must be set to the - * respective database entry representation in enum DATA_BLOCK_ID_e. */ + * the initialization of a database struct, uniqueId must be set to the + * respective database entry representation in enum DATA_BLOCK_ID_e. */ DATA_BLOCK_HEADER_s header; uint16_t dummyValue; } DATA_BLOCK_EXAMPLE_0_s; @@ -120,8 +120,8 @@ typedef struct { */ typedef struct { /* This struct needs to be at the beginning of every database entry. During - * the initialization of a database struct, uniqueId must be set to the - * respective database entry representation in enum DATA_BLOCK_ID_e. */ + * the initialization of a database struct, uniqueId must be set to the + * respective database entry representation in enum DATA_BLOCK_ID_e. */ DATA_BLOCK_HEADER_s header; uint16_t dummyValue; } DATA_BLOCK_EXAMPLE_1_s; @@ -131,8 +131,8 @@ typedef struct { */ typedef struct { /* This struct needs to be at the beginning of every database entry. During - * the initialization of a database struct, uniqueId must be set to the - * respective database entry representation in enum DATA_BLOCK_ID_e. */ + * the initialization of a database struct, uniqueId must be set to the + * respective database entry representation in enum DATA_BLOCK_ID_e. */ DATA_BLOCK_HEADER_s header; uint16_t dummyValue; } DATA_BLOCK_EXAMPLE_2_s; @@ -142,8 +142,8 @@ typedef struct { */ typedef struct { /* This struct needs to be at the beginning of every database entry. During - * the initialization of a database struct, uniqueId must be set to the - * respective database entry representation in enum DATA_BLOCK_ID_e. */ + * the initialization of a database struct, uniqueId must be set to the + * respective database entry representation in enum DATA_BLOCK_ID_e. */ DATA_BLOCK_HEADER_s header; uint16_t dummyValue; } DATA_BLOCK_EXAMPLE_3_s; @@ -227,3 +227,5 @@ void DATA_ExampleWriteDataMultipleEntries(void) { /*========== Extern Function Implementations ================================*/ /*========== Externalized Static Function Implementations (Unit Test) =======*/ +#ifdef UNITY_UNIT_TEST +#endif diff --git a/docs/software/modules/engine/database/wscript b/docs/software/modules/engine/database/wscript old mode 100644 new mode 100755 index 197a3046..d54687dd --- a/docs/software/modules/engine/database/wscript +++ b/docs/software/modules/engine/database/wscript @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause diff --git a/docs/software/modules/engine/diag/diag.rst b/docs/software/modules/engine/diag/diag.rst index 66e83d16..39020fcf 100644 --- a/docs/software/modules/engine/diag/diag.rst +++ b/docs/software/modules/engine/diag/diag.rst @@ -12,50 +12,50 @@ Module Files Driver ^^^^^^ -- ``src/app/engine/diag/diag.c`` (`API <../../../../_static/doxygen/src/html/diag_8c.html>`__, `source <../../../../_static/doxygen/src/html/diag_8c_source.html>`__) -- ``src/app/engine/diag/diag.h`` (`API <../../../../_static/doxygen/src/html/diag_8h.html>`__, `source <../../../../_static/doxygen/src/html/diag_8h_source.html>`__) +- ``src/app/engine/diag/diag.c`` +- ``src/app/engine/diag/diag.h`` Configuration ^^^^^^^^^^^^^ -- ``src/app/engine/config/diag_cfg.c`` (`API <../../../../_static/doxygen/src/html/diag__cfg_8c.html>`__, `source <../../../../_static/doxygen/src/html/diag__cfg_8c_source.html>`__) -- ``src/app/engine/config/diag_cfg.h`` (`API <../../../../_static/doxygen/src/html/diag__cfg_8h.html>`__, `source <../../../../_static/doxygen/src/html/diag__cfg_8h_source.html>`__) -- ``src/app/engine/diag/cbs/diag_cbs_can.c`` (`API <../../../../_static/doxygen/src/html/diag__cbs__can_8c.html>`__, `source <../../../../_static/doxygen/src/html/diag__cbs__can_8c_source.html>`__) -- ``src/app/engine/diag/cbs/diag_cbs_contactor.c`` (`API <../../../../_static/doxygen/src/html/diag__cbs__contactor_8c.html>`__, `source <../../../../_static/doxygen/src/html/diag__cbs__contactor_8c_source.html>`__) -- ``src/app/engine/diag/cbs/diag_cbs_current.c`` (`API <../../../../_static/doxygen/src/html/diag__cbs__current_8c.html>`__, `source <../../../../_static/doxygen/src/html/diag__cbs__current_8c_source.html>`__) -- ``src/app/engine/diag/cbs/diag_cbs_current-sensor.c`` (`API <../../../../_static/doxygen/src/html/diag__cbs__current-sensor_8c.html>`__, `source <../../../../_static/doxygen/src/html/diag__cbs__current-sensor_8c_source.html>`__) -- ``src/app/engine/diag/cbs/diag_cbs_deep-discharge.c`` (`API <../../../../_static/doxygen/src/html/diag__cbs__deep-discharge_8c.html>`__, `source <../../../../_static/doxygen/src/html/diag__cbs__deep-discharge_8c_source.html>`__) -- ``src/app/engine/diag/cbs/diag_cbs_dummy.c`` (`API <../../../../_static/doxygen/src/html/diag__cbs__dummy_8c.html>`__, `source <../../../../_static/doxygen/src/html/diag__cbs__dummy_8c_source.html>`__) -- ``src/app/engine/diag/cbs/diag_cbs_interlock.c`` (`API <../../../../_static/doxygen/src/html/diag__cbs__interlock_8c.html>`__, `source <../../../../_static/doxygen/src/html/diag__cbs__interlock_8c_source.html>`__) -- ``src/app/engine/diag/cbs/diag_cbs_afe.c`` (`API <../../../../_static/doxygen/src/html/diag__cbs__afe_8c.html>`__, `source <../../../../_static/doxygen/src/html/diag__cbs__afe_8c_source.html>`__) -- ``src/app/engine/diag/cbs/diag_cbs_plausibility.c`` (`API <../../../../_static/doxygen/src/html/diag__cbs__plausibility_8c.html>`__, `source <../../../../_static/doxygen/src/html/diag__cbs__plausibility_8c_source.html>`__) -- ``src/app/engine/diag/cbs/diag_cbs_power-measurement.c`` (`API <../../../../_static/doxygen/src/html/diag__cbs__power-measurement_8c.html>`__, `source <../../../../_static/doxygen/src/html/diag__cbs__power-measurement_8c_source.html>`__) -- ``src/app/engine/diag/cbs/diag_cbs_sbc.c`` (`API <../../../../_static/doxygen/src/html/diag__cbs__sbc_8c.html>`__, `source <../../../../_static/doxygen/src/html/diag__cbs__sbc_8c_source.html>`__) -- ``src/app/engine/diag/cbs/diag_cbs_sys-mon.c`` (`API <../../../../_static/doxygen/src/html/diag__cbs__sys-mon_8c.html>`__, `source <../../../../_static/doxygen/src/html/diag__cbs__sys-mon_8c_source.html>`__) -- ``src/app/engine/diag/cbs/diag_cbs_temperature.c`` (`API <../../../../_static/doxygen/src/html/diag__cbs__temperature_8c.html>`__, `source <../../../../_static/doxygen/src/html/diag__cbs__temperature_8c_source.html>`__) -- ``src/app/engine/diag/cbs/diag_cbs_voltage.c`` (`API <../../../../_static/doxygen/src/html/diag__cbs__voltage_8c.html>`__, `source <../../../../_static/doxygen/src/html/diag__cbs__voltage_8c_source.html>`__) -- ``src/app/engine/diag/cbs/diag_cbs_aerosol-sensor.c`` (`API <../../../../_static/doxygen/src/html/diag__cbs__aerosol-sensor_8c.html>`__, `source <../../../../_static/doxygen/src/html/diag__cbs__aerosol-sensor_8c_source.html>`__) +- ``src/app/engine/config/diag_cfg.c`` +- ``src/app/engine/config/diag_cfg.h`` +- ``src/app/engine/diag/cbs/diag_cbs_can.c`` +- ``src/app/engine/diag/cbs/diag_cbs_contactor.c`` +- ``src/app/engine/diag/cbs/diag_cbs_current.c`` +- ``src/app/engine/diag/cbs/diag_cbs_current-sensor.c`` +- ``src/app/engine/diag/cbs/diag_cbs_deep-discharge.c`` +- ``src/app/engine/diag/cbs/diag_cbs_dummy.c`` +- ``src/app/engine/diag/cbs/diag_cbs_interlock.c`` +- ``src/app/engine/diag/cbs/diag_cbs_afe.c`` +- ``src/app/engine/diag/cbs/diag_cbs_plausibility.c`` +- ``src/app/engine/diag/cbs/diag_cbs_power-measurement.c`` +- ``src/app/engine/diag/cbs/diag_cbs_sbc.c`` +- ``src/app/engine/diag/cbs/diag_cbs_sys-mon.c`` +- ``src/app/engine/diag/cbs/diag_cbs_temperature.c`` +- ``src/app/engine/diag/cbs/diag_cbs_voltage.c`` +- ``src/app/engine/diag/cbs/diag_cbs_aerosol-sensor.c`` Unit Test ^^^^^^^^^ -- ``tests/unit/app/engine/config/test_diag_cfg.c`` (`API <../../../../_static/doxygen/tests/html/test__diag__cfg_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__diag__cfg_8c_source.html>`__) -- ``tests/unit/app/engine/diag/cbs/test_diag_cbs_aerosol-sensor.c`` (`API <../../../../_static/doxygen/tests/html/test__diag__cbs__aerosol-sensor_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__diag__cbs__aerosol-sensor_8c_source.html>`__) -- ``tests/unit/app/engine/diag/cbs/test_diag_cbs_afe.c`` (`API <../../../../_static/doxygen/tests/html/test__diag__cbs__afe_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__diag__cbs__afe_8c_source.html>`__) -- ``tests/unit/app/engine/diag/cbs/test_diag_cbs_can.c`` (`API <../../../../_static/doxygen/tests/html/test__diag__cbs__can_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__diag__cbs__can_8c_source.html>`__) -- ``tests/unit/app/engine/diag/cbs/test_diag_cbs_contactor.c`` (`API <../../../../_static/doxygen/tests/html/test__diag__cbs__contactor_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__diag__cbs__contactor_8c_source.html>`__) -- ``tests/unit/app/engine/diag/cbs/test_diag_cbs_current.c`` (`API <../../../../_static/doxygen/tests/html/test__diag__cbs__current_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__diag__cbs__current_8c_source.html>`__) -- ``tests/unit/app/engine/diag/cbs/test_diag_cbs_current-sensor.c`` (`API <../../../../_static/doxygen/tests/html/test__diag__cbs__current-sensor_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__diag__cbs__current-sensor_8c_source.html>`__) -- ``tests/unit/app/engine/diag/cbs/test_diag_cbs_deep-discharge.c`` (`API <../../../../_static/doxygen/tests/html/test__diag__cbs__deep-discharge_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__diag__cbs__deep-discharge_8c_source.html>`__) -- ``tests/unit/app/engine/diag/cbs/test_diag_cbs_dummy.c`` (`API <../../../../_static/doxygen/tests/html/test__diag__cbs__dummy_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__diag__cbs__dummy_8c_source.html>`__) -- ``tests/unit/app/engine/diag/cbs/test_diag_cbs_interlock.c`` (`API <../../../../_static/doxygen/tests/html/test__diag__cbs__interlock_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__diag__cbs__interlock_8c_source.html>`__) -- ``tests/unit/app/engine/diag/cbs/test_diag_cbs_plausibility.c`` (`API <../../../../_static/doxygen/tests/html/test__diag__cbs__plausibility_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__diag__cbs__plausibility_8c_source.html>`__) -- ``tests/unit/app/engine/diag/cbs/test_diag_cbs_power-measurement.c`` (`API <../../../../_static/doxygen/tests/html/test__diag__cbs__power-measurement_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__diag__cbs__power-measurement_8c_source.html>`__) -- ``tests/unit/app/engine/diag/cbs/test_diag_cbs_sbc.c`` (`API <../../../../_static/doxygen/tests/html/test__diag__cbs__sbc_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__diag__cbs__sbc_8c_source.html>`__) -- ``tests/unit/app/engine/diag/cbs/test_diag_cbs_sys-mon.c`` (`API <../../../../_static/doxygen/tests/html/test__diag__cbs__sys-mon_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__diag__cbs__sys-mon_8c_source.html>`__) -- ``tests/unit/app/engine/diag/cbs/test_diag_cbs_temperature.c`` (`API <../../../../_static/doxygen/tests/html/test__diag__cbs__temperature_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__diag__cbs__temperature_8c_source.html>`__) -- ``tests/unit/app/engine/diag/cbs/test_diag_cbs_voltage.c`` (`API <../../../../_static/doxygen/tests/html/test__diag__cbs__voltage_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__diag__cbs__voltage_8c_source.html>`__) -- ``tests/unit/app/engine/diag/test_diag.c`` (`API <../../../../_static/doxygen/tests/html/test__diag_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__diag_8c_source.html>`__) +- ``tests/unit/app/engine/config/test_diag_cfg.c`` +- ``tests/unit/app/engine/diag/cbs/test_diag_cbs_aerosol-sensor.c`` +- ``tests/unit/app/engine/diag/cbs/test_diag_cbs_afe.c`` +- ``tests/unit/app/engine/diag/cbs/test_diag_cbs_can.c`` +- ``tests/unit/app/engine/diag/cbs/test_diag_cbs_contactor.c`` +- ``tests/unit/app/engine/diag/cbs/test_diag_cbs_current.c`` +- ``tests/unit/app/engine/diag/cbs/test_diag_cbs_current-sensor.c`` +- ``tests/unit/app/engine/diag/cbs/test_diag_cbs_deep-discharge.c`` +- ``tests/unit/app/engine/diag/cbs/test_diag_cbs_dummy.c`` +- ``tests/unit/app/engine/diag/cbs/test_diag_cbs_interlock.c`` +- ``tests/unit/app/engine/diag/cbs/test_diag_cbs_plausibility.c`` +- ``tests/unit/app/engine/diag/cbs/test_diag_cbs_power-measurement.c`` +- ``tests/unit/app/engine/diag/cbs/test_diag_cbs_sbc.c`` +- ``tests/unit/app/engine/diag/cbs/test_diag_cbs_sys-mon.c`` +- ``tests/unit/app/engine/diag/cbs/test_diag_cbs_temperature.c`` +- ``tests/unit/app/engine/diag/cbs/test_diag_cbs_voltage.c`` +- ``tests/unit/app/engine/diag/test_diag.c`` Detailed Description -------------------- diff --git a/docs/software/modules/engine/hw_info/hw_info.rst b/docs/software/modules/engine/hw_info/hw_info.rst index b3215c70..d4e66001 100644 --- a/docs/software/modules/engine/hw_info/hw_info.rst +++ b/docs/software/modules/engine/hw_info/hw_info.rst @@ -12,8 +12,8 @@ Module Files Driver ^^^^^^ -- ``src/app/engine/hw_info/master_info.c`` (`API <../../../../_static/doxygen/src/html/master__info_8c.html>`__, `source <../../../../_static/doxygen/src/html/master__info_8c_source.html>`__) -- ``src/app/engine/hw_info/master_info.h`` (`API <../../../../_static/doxygen/src/html/master__info_8h.html>`__, `source <../../../../_static/doxygen/src/html/master__info_8h_source.html>`__) +- ``src/app/engine/hw_info/master_info.c`` +- ``src/app/engine/hw_info/master_info.h`` Configuration ^^^^^^^^^^^^^ @@ -23,7 +23,7 @@ Configuration Unit Test ^^^^^^^^^ -- ``tests/unit/app/engine/hw_info/test_master_info.c`` (`API <../../../../_static/doxygen/tests/html/test__master_info_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__master__info_8c_source.html>`__) +- ``tests/unit/app/engine/hw_info/test_master_info.c`` Detailed Description -------------------- diff --git a/docs/software/modules/engine/sys/sys.rst b/docs/software/modules/engine/sys/sys.rst index d9b1ab90..67a9077f 100644 --- a/docs/software/modules/engine/sys/sys.rst +++ b/docs/software/modules/engine/sys/sys.rst @@ -12,22 +12,22 @@ Module Files Driver ^^^^^^ -- ``src/app/engine/sys/reset.c`` (`API <../../../../_static/doxygen/src/html/reset_8c.html>`__, `source <../../../../_static/doxygen/src/html/reset_8c_source.html>`__) -- ``src/app/engine/sys/reset.h`` (`API <../../../../_static/doxygen/src/html/reset_8h.html>`__, `source <../../../../_static/doxygen/src/html/reset_8h_source.html>`__) -- ``src/app/engine/sys/sys.c`` (`API <../../../../_static/doxygen/src/html/sys_8c.html>`__, `source <../../../../_static/doxygen/src/html/sys_8c_source.html>`__) -- ``src/app/engine/sys/sys.h`` (`API <../../../../_static/doxygen/src/html/sys_8h.html>`__, `source <../../../../_static/doxygen/src/html/sys_8h_source.html>`__) +- ``src/app/engine/sys/reset.c`` +- ``src/app/engine/sys/reset.h`` +- ``src/app/engine/sys/sys.c`` +- ``src/app/engine/sys/sys.h`` Configuration ^^^^^^^^^^^^^ -- ``src/app/engine/config/sys_cfg.c`` (`API <../../../../_static/doxygen/src/html/sys__cfg_8c.html>`__, `source <../../../../_static/doxygen/src/html/sys__cfg_8c_source.html>`__) -- ``src/app/engine/config/sys_cfg.h`` (`API <../../../../_static/doxygen/src/html/sys__cfg_8h.html>`__, `source <../../../../_static/doxygen/src/html/sys__cfg_8h_source.html>`__) +- ``src/app/engine/config/sys_cfg.c`` +- ``src/app/engine/config/sys_cfg.h`` Unit Test ^^^^^^^^^ -- ``tests/unit/app/engine/config/test_sys_cfg.c`` (`API <../../../../_static/doxygen/tests/html/test__sys__cfg_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__sys__cfg_8c_source.html>`__) -- ``tests/unit/app/engine/sys/test_sys.c`` (`API <../../../../_static/doxygen/tests/html/test__sys_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__sys_8c_source.html>`__) +- ``tests/unit/app/engine/config/test_sys_cfg.c`` +- ``tests/unit/app/engine/sys/test_sys.c`` Detailed Description -------------------- diff --git a/docs/software/modules/engine/sys/sys_state-machine-detailed.dot b/docs/software/modules/engine/sys/sys_state-machine-detailed.dot index d351535b..59f119f7 100644 --- a/docs/software/modules/engine/sys/sys_state-machine-detailed.dot +++ b/docs/software/modules/engine/sys/sys_state-machine-detailed.dot @@ -1,4 +1,4 @@ -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause diff --git a/docs/software/modules/engine/sys/sys_state-machine-top-view.dot b/docs/software/modules/engine/sys/sys_state-machine-top-view.dot index 7c897205..8fc69203 100644 --- a/docs/software/modules/engine/sys/sys_state-machine-top-view.dot +++ b/docs/software/modules/engine/sys/sys_state-machine-top-view.dot @@ -1,4 +1,4 @@ -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause diff --git a/docs/software/modules/engine/sys_mon/sys_mon.rst b/docs/software/modules/engine/sys_mon/sys_mon.rst index d79f2841..edc2848d 100644 --- a/docs/software/modules/engine/sys_mon/sys_mon.rst +++ b/docs/software/modules/engine/sys_mon/sys_mon.rst @@ -12,20 +12,20 @@ Module Files Driver ^^^^^^ -- ``src/app/engine/sys_mon/sys_mon.c`` (`API <../../../../_static/doxygen/src/html/sys__mon_8c.html>`__, `source <../../../../_static/doxygen/src/html/sys__mon_8c_source.html>`__) -- ``src/app/engine/sys_mon/sys_mon.h`` (`API <../../../../_static/doxygen/src/html/sys__mon_8h.html>`__, `source <../../../../_static/doxygen/src/html/sys__mon_8h_source.html>`__) +- ``src/app/engine/sys_mon/sys_mon.c`` +- ``src/app/engine/sys_mon/sys_mon.h`` Configuration ^^^^^^^^^^^^^ -- ``src/app/engine/config/sys_mon_cfg.c`` (`API <../../../../_static/doxygen/src/html/sys__mon__cfg_8c.html>`__, `source <../../../../_static/doxygen/src/html/sys__mon__cfg_8c_source.html>`__) -- ``src/app/engine/config/sys_mon_cfg.h`` (`API <../../../../_static/doxygen/src/html/sys__mon__cfg_8h.html>`__, `source <../../../../_static/doxygen/src/html/sys__mon__cfg_8h_source.html>`__) +- ``src/app/engine/config/sys_mon_cfg.c`` +- ``src/app/engine/config/sys_mon_cfg.h`` Unit Test ^^^^^^^^^ -- ``tests/unit/app/engine/config/test_sys_mon_cfg.c`` (`API <../../../../_static/doxygen/tests/html/test__sys__mon__cfg_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__sys__mon__cfg_8c_source.html>`__) -- ``tests/unit/app/engine/sys_mon/test_sys_mon.c`` (`API <../../../../_static/doxygen/tests/html/test__sys__mon_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__sys__mon_8c_source.html>`__) +- ``tests/unit/app/engine/config/test_sys_mon_cfg.c`` +- ``tests/unit/app/engine/sys_mon/test_sys_mon.c`` Detailed Description -------------------- diff --git a/docs/software/modules/main/fassert.rst b/docs/software/modules/main/fassert.rst index 4ea11e03..cefdd10a 100644 --- a/docs/software/modules/main/fassert.rst +++ b/docs/software/modules/main/fassert.rst @@ -12,7 +12,7 @@ Module Files Driver ^^^^^^ -- ``src/app/main/include/fassert.h`` (`API <./../../../_static/doxygen/src/html/fassert_8h.html>`__, `source <./../../../_static/doxygen/src/html/fassert_8h_source.html>`__) +- ``src/app/main/include/fassert.h`` Configuration ^^^^^^^^^^^^^ diff --git a/docs/software/modules/task/ftask/ftask.rst b/docs/software/modules/task/ftask/ftask.rst index be70c9e4..79a0a106 100644 --- a/docs/software/modules/task/ftask/ftask.rst +++ b/docs/software/modules/task/ftask/ftask.rst @@ -12,19 +12,19 @@ Module Files Driver ^^^^^^ -- ``src/app/task/ftask/ftask.c`` (`API <../../../../_static/doxygen/src/html/ftask_8c.html>`__, `source <../../../../_static/doxygen/src/html/ftask_8c_source.html>`__) -- ``src/app/task/ftask/ftask.h`` (`API <../../../../_static/doxygen/src/html/ftask_8h.html>`__, `source <../../../../_static/doxygen/src/html/ftask_8h_source.html>`__) +- ``src/app/task/ftask/ftask.c`` +- ``src/app/task/ftask/ftask.h`` |freertos| """""""""" -- ``src/app/task/ftask/freertos/ftask_freertos.c`` (`API <../../../../_static/doxygen/src/html/ftask__freertos_8c.html>`__, `source <../../../../_static/doxygen/src/html/ftask__freertos_8c_source.html>`__) +- ``src/app/task/ftask/freertos/ftask_freertos.c`` Configuration ^^^^^^^^^^^^^ -- ``src/app/task/config/ftask_cfg.c`` (`API <../../../../_static/doxygen/src/html/ftask__cfg_8c.html>`__, `source <../../../../_static/doxygen/src/html/ftask__cfg_8c_source.html>`__) -- ``src/app/task/config/ftask_cfg.h`` (`API <../../../../_static/doxygen/src/html/ftask__cfg_8h.html>`__, `source <../../../../_static/doxygen/src/html/ftask__cfg_8h_source.html>`__) +- ``src/app/task/config/ftask_cfg.c`` +- ``src/app/task/config/ftask_cfg.h`` Unit Test ^^^^^^^^^ diff --git a/docs/software/modules/task/ftask/ftask_how-to.c b/docs/software/modules/task/ftask/ftask_how-to.c index 04e47a3a..15abbacb 100644 --- a/docs/software/modules/task/ftask/ftask_how-to.c +++ b/docs/software/modules/task/ftask/ftask_how-to.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file ftask_how-to.c * @author foxBMS Team * @date 2019-08-27 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup SOME_GROUP * @prefix FTSK * @@ -86,8 +86,8 @@ typedef struct { */ typedef struct { /* This struct needs to be at the beginning of every database entry. During - * the initialization of a database struct, uniqueId must be set to the - * respective database entry representation in enum DATA_BLOCK_ID_e. */ + * the initialization of a database struct, uniqueId must be set to the + * respective database entry representation in enum DATA_BLOCK_ID_e. */ DATA_BLOCK_HEADER_s header; uint16_t dummyValue; } DATA_BLOCK_EXAMPLE_s; @@ -118,3 +118,5 @@ void FTSK_RunUserCodeCyclic100ms(void) { /* ftask-example-cyclic-100ms-end */ /*========== Externalized Static Function Implementations (Unit Test) =======*/ +#ifdef UNITY_UNIT_TEST +#endif diff --git a/docs/software/modules/task/ftask/wscript b/docs/software/modules/task/ftask/wscript old mode 100644 new mode 100755 index af005b7d..c0e477a1 --- a/docs/software/modules/task/ftask/wscript +++ b/docs/software/modules/task/ftask/wscript @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause diff --git a/docs/software/modules/task/os/os.rst b/docs/software/modules/task/os/os.rst index e185f527..d809651d 100644 --- a/docs/software/modules/task/os/os.rst +++ b/docs/software/modules/task/os/os.rst @@ -12,13 +12,13 @@ Module Files Driver ^^^^^^ -- ``src/app/task/os/os.c`` (`API <../../../../_static/doxygen/src/html/os_8c.html>`__, `source <../../../../_static/doxygen/src/html/os_8c_source.html>`__) -- ``src/app/task/os/os.h`` (`API <../../../../_static/doxygen/src/html/os_8h.html>`__, `source <../../../../_static/doxygen/src/html/os_8h_source.html>`__) +- ``src/app/task/os/os.c`` +- ``src/app/task/os/os.h`` |freertos| """""""""" -- ``src/app/task/os/freertos/os_freertos.c`` (`API <../../../../_static/doxygen/src/html/os__freertos_8c.html>`__, `source <../../../../_static/doxygen/src/html/os__freertos_8c_source.html>`__) +- ``src/app/task/os/freertos/os_freertos.c`` Configuration ^^^^^^^^^^^^^ @@ -28,7 +28,7 @@ Configuration Unit Test ^^^^^^^^^ -- ``tests/unit/app/task/os/test_os.c`` (`API <../../../../_static/doxygen/tests/html/test__os_8c.html>`__, `source <../../../../_static/doxygen/tests/html/test__os_8c_source.html>`__) +- ``tests/unit/app/task/os/test_os.c`` Detailed Description -------------------- diff --git a/docs/software/unit-tests/abc.c b/docs/software/unit-tests/abc.c index 7e5ce901..7c1effe5 100644 --- a/docs/software/unit-tests/abc.c +++ b/docs/software/unit-tests/abc.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file abc.c * @author foxBMS Team * @date 2022-12-13 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup SOME_GROUP * @prefix ABC * diff --git a/docs/software/unit-tests/abc.h b/docs/software/unit-tests/abc.h index c12ad679..87235b12 100644 --- a/docs/software/unit-tests/abc.h +++ b/docs/software/unit-tests/abc.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file abc.h * @author foxBMS Team * @date 2022-12-13 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup SOME_GROUP * @prefix ABC * * @brief Header file of some software - * + * @details TODO */ #ifndef FOXBMS__ABC_H_ diff --git a/docs/software/unit-tests/build-and-run-abc.bat b/docs/software/unit-tests/build-and-run-abc.bat deleted file mode 100644 index 38a9eaf8..00000000 --- a/docs/software/unit-tests/build-and-run-abc.bat +++ /dev/null @@ -1,87 +0,0 @@ -@REM Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -@REM All rights reserved. -@REM -@REM SPDX-License-Identifier: BSD-3-Clause -@REM -@REM Redistribution and use in source and binary forms, with or without -@REM modification, are permitted provided that the following conditions are met: -@REM -@REM 1. Redistributions of source code must retain the above copyright notice, this -@REM list of conditions and the following disclaimer. -@REM -@REM 2. Redistributions in binary form must reproduce the above copyright notice, -@REM this list of conditions and the following disclaimer in the documentation -@REM and/or other materials provided with the distribution. -@REM -@REM 3. Neither the name of the copyright holder nor the names of its -@REM contributors may be used to endorse or promote products derived from -@REM this software without specific prior written permission. -@REM -@REM THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -@REM AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -@REM IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -@REM DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -@REM FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -@REM DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -@REM SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -@REM CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -@REM OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -@REM OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -@REM -@REM We kindly request you to use one or more of the following phrases to refer to -@REM foxBMS in your hardware, software, documentation or advertising materials: -@REM -@REM - "This product uses parts of foxBMS®" -@REM - "This product includes parts of foxBMS®" -@REM - "This product is derived from foxBMS®" - -@SETLOCAL EnableExtensions EnableDelayedExpansion - -@pushd %~dp0 -@ECHO Build and link 'abc'-driver - -@gcc -DUNITY_UNIT_TEST -c abc.c -o abc.o -@IF %ERRORLEVEL% neq 0 ( - @POPD - @EXIT /b 1 -) - -@gcc -DUNITY_UNIT_TEST -c run_abc.c -o run_abc.o -@IF %ERRORLEVEL% neq 0 ( - @POPD - @EXIT /b 1 -) - -@gcc -o run_abc.exe abc.o run_abc.o -@IF %ERRORLEVEL% neq 0 ( - @POPD - @EXIT /b 1 -) - -@run_abc.exe -@IF %ERRORLEVEL% neq 0 ( - @POPD - @EXIT /b 1 -) - -@ECHO Build and link test file for 'abc'-driver - -@gcc -DUNITY_UNIT_TEST -c test_abc.c -o test_abc.o -@IF %ERRORLEVEL% neq 0 ( - @POPD - @EXIT /b 1 -) - -@gcc -o test_abc.exe test_abc.o abc.o -@IF %ERRORLEVEL% neq 0 ( - @POPD - @EXIT /b 1 -) - -@test_abc.exe -@IF %ERRORLEVEL% neq 0 ( - @POPD - @EXIT /b 1 -) - -@popd diff --git a/docs/software/unit-tests/run_abc.c b/docs/software/unit-tests/run_abc.c index 571249da..df78caa5 100644 --- a/docs/software/unit-tests/run_abc.c +++ b/docs/software/unit-tests/run_abc.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file run_abc.c * @author foxBMS Team * @date 2022-12-13 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup SOME_GROUP * @prefix ABC * diff --git a/docs/software/unit-tests/test_abc.c b/docs/software/unit-tests/test_abc.c index e1fe5e7b..744b20f6 100644 --- a/docs/software/unit-tests/test_abc.c +++ b/docs/software/unit-tests/test_abc.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_abc.c * @author foxBMS Team * @date 2022-12-13 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * @@ -79,7 +79,8 @@ void testABC_DoSomethingElse() { } /* stop-include-in-doc */ -void main() { +int main() { testABC_DoThis(); testABC_DoSomethingElse(); + return 0; } diff --git a/docs/software/unit-tests/unit-tests.rst b/docs/software/unit-tests/unit-tests.rst index 03bb9e90..2f4447f7 100644 --- a/docs/software/unit-tests/unit-tests.rst +++ b/docs/software/unit-tests/unit-tests.rst @@ -503,9 +503,9 @@ Further reading .. _CEEDLING_FURTHER_READING: -* `Ceedling command line interface `_ -* `Introduction to CMock and mocking `_ -* `API of CMock `_ -* `Assertion summary of Unity `_ -* Further tutorials can be found in the +- `Ceedling command line interface `_ +- `Introduction to CMock and mocking `_ +- `API of CMock `_ +- `Assertion summary of Unity `_ +- Further tutorials can be found in the `GitHub-project of ceedling `_ diff --git a/docs/software/unit-tests/unit-tests_how-to.rst b/docs/software/unit-tests/unit-tests_how-to.rst index ee3edbad..3f7f17b5 100644 --- a/docs/software/unit-tests/unit-tests_how-to.rst +++ b/docs/software/unit-tests/unit-tests_how-to.rst @@ -6,47 +6,65 @@ How to use Unit Tests ===================== -.. spelling:: - Ootpa - gcc - el - bb - linux - Verify that the unit testing framework is working as expected: -.. code-block:: console +.. code-block:: powershell - waf build_unit_test - waf build_unit_test --coverage + PS C:\Users\vulpes\Documents\foxbms-2> .\fox.ps1 waf build_unit_test + PS C:\Users\vulpes\Documents\foxbms-2> .\fox.ps1 waf build_unit_test --coverage Typical usage and more information on the unit tests can be found in :ref:`Unit tests `. +Default Includes +---------------- + +The default include paths are defined in `project_win32.yml` and +`project_posix.yml` in the key ``:paths:`` |rarr| ``:include:``. + +When a tests requires specific include-paths to be added the macro +``TEST_INCLUDE_PATH("../../path/to/directory")`` can be used. +The include needs to start with ``../../`` and then specifies the path to the +directory as seen from the repository root, e.g., to include the directory +``src/app/driver/config`` use +``TEST_INCLUDE_PATH("../../src/app/driver/config")``. +The path must be provided in POSIX form (i.e., forward slashes). + +Additional Source files +----------------------- + +If a test requires additional files to be compiled that cannot be derived from +the list of included files, then the macro ``TEST_SOURCE_FILE("file-name.c")`` +can be used. + Guidelines for the Unit Test Skeleton ------------------------------------- -In this example a driver that resides in `src/app/driver/abc/abc.c` and -`src/app/driver/abc/abc.h` is added and therefore the accompanying unit tests +.. note:: + + This example + +In this example a driver that resides in ``src/app/driver/abc/abc.c`` and +``src/app/driver/abc/abc.h`` is added and therefore the accompanying unit tests need to be added also. -The module `abc.c` implements the public function -`extern uint8_t ABC_DoThis(void)` and the static function -`static uint8_t ABC_DoSomethingElse(uint8_t someArgument)`. +The module ``abc.c`` implements the public function +``extern uint8_t ABC_DoThis(void)`` and the static function +``static uint8_t ABC_DoSomethingElse(uint8_t someArgument)``. Therefore, there are now two functions that need to be united tested. At first the accompanying unit test file needs to be created in -`tests/unit/app/driver/abc/test_abc.c` (notice the prefix `test`) based on the -template in `conf/tpl/test_c.c`. -The helper script `tools/utils/generate_missing_test_files.py` can be used to +``tests/unit/app/driver/abc/test_abc.c`` (notice the prefix ``test``) based on +the template in ``conf/tpl/test_c.c``. +The helper script ``tools/utils/generate_missing_test_files.py`` can be used to automatically create the file. Public/Extern Function Tests ---------------------------- -#. Add a function `uint8_t testABC_DoThis()` in the appropriate section in the - test file `tests/unit/app/driver/abc/test_abc.c`. - This function implements the tests for `ABC_DoThis()`. - The prefix `test` (**no** trailing underscore) is required for ceedling to +#. Add a function ``uint8_t testABC_DoThis()`` in the appropriate section in the + test file ``tests/unit/app/driver/abc/test_abc.c``. + This function implements the tests for ``ABC_DoThis()``. + The prefix ``test`` (**no** trailing underscore) is required for ceedling to detect the function as a *test*-function. #. Write the test code. @@ -57,12 +75,12 @@ Static Function Tests static functions must be made callable from other modules by creating a wrapper. For this example the wrapper will be - `extern uint8_t TEST_ABC_DoSomethingElse(uint8_t someArgument)` (notice - the `TEST_` prefix followed by the name of the static function). + ``extern uint8_t TEST_ABC_DoSomethingElse(uint8_t someArgument)`` (notice + the ``TEST_`` prefix followed by the name of the static function). #. The declaration of the wrapper needs to be placed in the appropriate section - in the header of the driver (`src/app/driver/abc/abc.h`). + in the header of the driver (``src/app/driver/abc/abc.h``). #. The definition of the wrapper needs to be placed in the appropriate section - in the source of the driver (`src/app/driver/abc/abc.c`). + in the source of the driver (``src/app/driver/abc/abc.c``). The only thing this wrapper needs to do, is to verbatim pass all arguments to the original function (i.e., the static function) and return its result. The definition of the wrapper looks therefore like this @@ -74,21 +92,15 @@ Static Function Tests return ABC_DoSomethingElse(someArgument); } -#. Add a function `void testABC_DoSomethingElse(void)` in the appropriate - section in the test file `tests/unit/app/driver/abc/test_abc.c`. - This function implements the tests for `ABC_DoSomethingElse()`. - The prefix `test` (**no** trailing underscore) is required for ceedling to +#. Add a function ``void testABC_DoSomethingElse(void)`` in the appropriate + section in the test file ``tests/unit/app/driver/abc/test_abc.c``. + This function implements the tests for ``ABC_DoSomethingElse()``. + The prefix ``test`` (**no** trailing underscore) is required for ceedling to detect the function as a *test*-function. - Note: The `TEST_` prefix of the *externalization* wrapper is removed and not + Note: The ``TEST_`` prefix of the *externalization* wrapper is removed and not part of the test function name. #. Write test code. -.. note:: - - `void`-returning functions that are externalized shall use - `return ` nevertheless, as this makes the intention of the - wrapper even more clear. - Result ------ @@ -97,25 +109,25 @@ Result :linenos: :start-after: start-include-in-doc :end-before: stop-include-in-doc - :caption: Header of the `abc`-driver (`src/app/driver/abc/abc.h`) + :caption: Header of the ``abc``-driver (``src/app/driver/abc/abc.h``) -The wrapper function `TEST_ABC_DoSomethingElse` needs to be put inside the -`UNITY_UNIT_TEST` guard, so that it is not build during target builds. +The wrapper function ``TEST_ABC_DoSomethingElse`` needs to be put inside the +``UNITY_UNIT_TEST`` guard, so that it is not build during target builds. .. literalinclude:: ./abc.c :language: C :linenos: :start-after: start-include-in-doc :end-before: stop-include-in-doc - :caption: Implementation of the `abc`-driver (`src/app/driver/abc/abc.c`) + :caption: Implementation of the ``abc``-driver (``src/app/driver/abc/abc.c``) .. literalinclude:: ./test_abc.c :language: C :linenos: :start-after: start-include-in-doc :end-before: stop-include-in-doc - :caption: Implementation of the `abc`-driver test - (`tests/unit/app/driver/abc/test_abc.c`) + :caption: Implementation of the ``abc``-driver test + (``tests/unit/app/driver/abc/test_abc.c``) How to exclude files from unit tests ==================================== @@ -125,11 +137,6 @@ If a certain file is not meant to be covered by unit tests, it has to be excluded in several locations in order to suppress checking mechanisms in the toolchain. -The configuration of ceedling is stored in a file called ``project.yml``. -In this file the files that will not receive any coverage must be added to -``:uncovered_ignore_list:``. -Otherwise, ceedling will report uncovered files. - Additionally, the main wscript contains a mechanism that checks that every file has a corresponding test file in the proper location. Untested files have to be added to ``excl`` in ``check_test_files(ctx)``. @@ -167,20 +174,11 @@ ceedling is run by it. After this step (it does not matter whether the task completes or is imported after it has generated the dependencies) the following example can be executed. -.. code-block:: console - :emphasize-lines: 3, 7, 11 - - # go to the build directory of ceedling, assuming the current directory is - # the project root (IMPORTANT, otherwise it will not work correctly) - cd build/unit_test/ +.. code-block:: powershell - # interact directly with ceedling (refer to ceedling manual for details) - # this line executes test_plausibility.c with coverage - ceedling gcov:test_plausibility.c - - # should the current shell not be able to directly follow the ceedling.cmd - # file, it might be necessary to access the vendored ceedling directly: - ruby ../../tools/vendor/ceedling/bin/ceedling gcov:test_plausibility.c + # should the current shell not be able to directly follow the ceedling.cmd + # file, it might be necessary to access the vendored ceedling directly: + PS C:\Users\vulpes\Documents\foxbms-2> .\fox.ps1 ceedling gcov:test_plausibility.c .. _linux_specific_usage: @@ -198,12 +196,3 @@ Internally it is tested with the following setup: - ``gcc --version``: gcc (GCC) 8.5.0 20210514 (Red Hat 8.5.0-18) - ``ruby --version``: ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [x86_64-linux] - -Running ``./waf.sh build_unit_test`` works the same as on Windows. -There is also a wrapper to use ceedling directly, that is generated at -``build/unit_test/ceedling.sh``. -It can be used from the root of the repository as follows: - -.. code-block:: console - - ./build/unit_test/ceedling.sh test:test_adc diff --git a/tests/env/packages/env_test_argon2-cffi.py b/docs/software/unit-tests/wscript old mode 100644 new mode 100755 similarity index 64% rename from tests/env/packages/env_test_argon2-cffi.py rename to docs/software/unit-tests/wscript index 90d2c1c1..7d780fc5 --- a/tests/env/packages/env_test_argon2-cffi.py +++ b/docs/software/unit-tests/wscript @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -38,45 +37,33 @@ # - "This product includes parts of foxBMS®" # - "This product is derived from foxBMS®" -# pylint: disable=invalid-name +"""Build documentation code to ensure that the documentation is correct""" -"""Testing 'argon2-cffi' package""" +# pylint: disable=missing-function-docstring -import argparse -import logging +from waflib.Build import BuildContext +from waflib.Configure import ConfigurationContext +from waflib.Options import OptionsContext +from waflib.Tools import waf_unit_test -# package to test -import argon2 -from argon2 import PasswordHasher +def options(opt: OptionsContext): + opt.top = "." + opt.load("compiler_c") -def main(): - """Testing 'argon2-cffi' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) +def configure(cnf: ConfigurationContext): + cnf.options.check_c_compiler = "gcc" + cnf.load("compiler_c") + cnf.env.append_unique("CFLAGS", ["-Wall", "-Wextra"]) + cnf.define("UNITY_UNIT_TEST", 1) + cnf.check_cc(fragment="int main() {}\n", execute=True) + cnf.load("waf_unit_test") - logging.debug(f"{argon2.__name__} {argon2.__version__}") - ph = PasswordHasher() - dummy_hash = ph.hash("s3kr3tp4ssw0rd") - ph.verify(dummy_hash, "s3kr3tp4ssw0rd") - ph.check_needs_rehash(dummy_hash) - - -if __name__ == "__main__": - main() +def build(bld: BuildContext): + bld.objects(source="abc.c", target="abc") + bld(features="c cprogram test", source="run_abc.c", use="abc", target="run_abc") + bld(features="c cprogram test", source="test_abc.c", use="abc", target="test_abc") + bld.add_post_fun(waf_unit_test.summary) + bld.options.clear_failed_tests = True diff --git a/docs/spelling_wordlist.txt b/docs/spelling_wordlist.txt deleted file mode 100644 index 1a343b54..00000000 --- a/docs/spelling_wordlist.txt +++ /dev/null @@ -1,268 +0,0 @@ -acknowledgement -acknowledgements -addon -addons -ADI -AFE -AFEs -alphanumericals -Altium -armcl -armnm -Artech -asm -axivion -Axivion -BMS -boolean -bugfix -busbar -bz -cafeCC -ceedling -cfg -changelog -chemistries -cmd -CMock -codebase -comparator -conda -config -const -contactor -contactors -CRC -creepage -criticality -dask -Davide -dbc -deci -decodable -derating -designators -devel -Devkit -diffs -dimensioning -Dimensioning -distcheck -dlc -Doxygen -doxygen -draftman -electrochemical -endian -endianness -enum -enums -expander -expanders -extern -Farnell -fennec -ferroelectric -FFh -fgui -fiducial -filename -filenames -filterpy -formatters -foxbms -foxBMS -foxmath -fram -Fraunhofer -freertos -freeRTOS -functionalities -galvanically -getter -GitLab -goto -graphviz -gravis -gui -GUI -halcogen -HALCoGen -hotfix -hydrofluoric -ifndef -incrementing -inductor -initialisms -initialization -initializations -initializer -initializers -intrinsics -inverter -iso -isolator -isoSPI -isospi -jpeg -json -kiwisolver -kOhm -Lauterbach -layermarker -libs -lightpipe -linelength -Linkerscript -linters -locknuts -logfile -logfiles -LTC -ltc -LTS -lvac -mA -mAh -Mbit -MCU -microcontroller -microcontrollers -Mictor -milliampere -milliamperes -Miniconda -miniconda -misconfiguration -MISRA -misra -Molex -msys -multi -mutex -mV -namings -netclass -nF -NXP -ok -opamp -opamps -optocoupler -optocouplers -overcurrent -overline -overvoltage -pandoc -phosphane -phy -pinout -pinouts -posix -postprocess -postprocessed -postprocessing -powerline -powershell -pre -precharge -precharged -precharging -precomputed -preinc -prepending -preprocess -preprocessed -preprocessor -programmatically -pylint -radix -readme -readmes -recalibrate -recalibrated -recalibrates -recalibrating -receptable -redox -refactored -reStructuredText -roadmap -rst -rtr -runnable -runtime -Samtec -scikit -scipy -Segger -seh -Sensirion -shrinked -SOE -SOH -solderabilty -SPI -sqlite -startup -stderr -strippable -struct -structs -subdirectories -subdirectory -subfunction -subfunctions -submodule -substate -substates -subsubsections -supercapacitor -supercapacitors -superset -suppressions -teardown -thermistor -throughs -timestamp -timestamps -toolchain -toolchains -toolset -tuple -tuples -TX -txt -typedef -typedefs -UART -uint -undervoltage -unenumerated -uninitialization -unique -unrestrictedly -Unselect -unstage -unstaged -untestable -utf -utils -Vdd -vendored -versioned -versioning -viewable -Vishay -VSUP -waf -Wh -whitespace -workflow -workflows -workspace -wscript -Wuerth -xEFxBBxBF -xml -Zener diff --git a/docs/system/imd-testing.rst b/docs/system/imd-testing.rst new file mode 100644 index 00000000..7c98a97e --- /dev/null +++ b/docs/system/imd-testing.rst @@ -0,0 +1,62 @@ +.. include:: ./../macros.txt +.. include:: ./../units.txt + +.. _IMD_Testing: + +########### +IMD Testing +########### + +The :ref:`INSULATION_MEASUREMENT_DEVICE` measures the insulation +resistance between the high voltage potentials. +Low insulation resistance induces a high safety risk, to sense this danger the +IMD is used. +To ensure the correct functionality testing the IMD on the actually implemented +system is very important. + +.. figure:: img/imd-testing.png + :alt: simplified diagram of imd + :name: simplifies-diagram-of-imd + :align: center + + Resistance measured by the IMD (in red) + +**************** +Test preparation +**************** + +Needed to test the IMD are: + +- |foxbms| workspace as described in :ref:`GETTING_STARTED_WITH_FOXBMS_2` +- resistors with different values are required + +.. table:: important resistance values + :name: important-resistance-values + :widths: grid + + +-------------------+-------------------+--------------------+ + | R\ :sub:`max` * | R\ :sub:`warning` | V\ :sub:`critical` | + +===================+===================+====================+ + | 50\ |MOhm| | 750\ |kOhm| | 500\ |kOhm| | + +-------------------+-------------------+--------------------+ + +\* maximum resistance measurable by the supported IMD devices (see +:ref:`INSULATION_MEASUREMENT_DEVICE`). + +****************** +Testing resistance +****************** + +First ``data_blockInsulationMonitoring`` and ``data_blockErrors`` is added to +the watch window of the debugger to observe the output of the IMD. + +To test if resistance is read correctly put a resistor between the high voltage +connectors and the ground/chassis potential. + +After a slight delay it reports the resistance of the resistor which can be +read in the insulation monitoring data table. + +If the resistance is lower than the warning threshold of 750\ |kOhm| the +``warnableLowInsulationResistanceError`` will be set. +If the resistance is lower than the critical threshold of 500\ |kOhm| the +``criticalLowInsulationResistanceError`` will be set. diff --git a/docs/system/img/imd-testing.png b/docs/system/img/imd-testing.png new file mode 100644 index 0000000000000000000000000000000000000000..a995e874d39dc8e880d75394a9320e343c6a3a2c GIT binary patch literal 8221 zcmeHMcT`i^x<8>rK#GkbB|*K4g^oxO2*nW##Ss*d4l1HTqM)=iMZvKU8%7Cbbc762 zqJV-BNH8N25l{h92nhj!0fYb%lhDpRK}Vf?ee1pZ{Wd}3lEGc(i8%`H4U90UNcrUsmt0NdKYhY!J)7O=Y;oIf8N z90a*saN$DG$Ox>f1E;3I_;}FP7A!9Z;c)QwZSdGJ(A*q!cLxasFf$Vj4F#!Gki`P8 zTmeNQ5P<*_6IZWZefI3xq@<+s^75*xs=mHHGMQ{^Ya0*{(9+V<*4BnXp=dN(Z*OmW ze7up7QB6(F-o1Mh6BBRWzFkpKQCwUc5)yLd$`xN<-xn`lSXfvbIB+08Kc7OO0rd90f?HNmIemQ*l+Ovq&A4)7u9-d&Kh_ts0w4ib0h|7{0INi}B7+Q?o38XwzIfO^~j{%wIw* zOZl)S(JpYMoK$vsxdSI-J@Y)3)sGc+_c;VDQX-DXdiaK?A znG~t!nvvbLIBxyG8(xpuQbp&vW=gQQSgod6uD@#bPn+hRRNKREWUGd$S?kY1v9^a> z%Xh_TzdLFzf6PkVp9oG2>qHS_b98#P7g6s zYw`HEIjd^sz;B%6HIt`$>px@32iy{?Z2&J#yXxgPtmnpe`wd`%P-W8=rOYYF$db<@ zO$8wB6it`^gMRpj9rvHmA^brmD(Wc;j>>={mM&u&RP6|iAAl?;GZ&lx%wK!CF5Y+! z@U8*MhQ{>(VWy`IJKRl1p=Qkk78B`9VOlI-co&VuV@|JEXYiVL!JhgpCYoi00ke}G zY!boak%+zE3}}Y)1;$T6Bk0#6G6>TaxY;%mfgvtiLI53bW(z+FvVnI6)i#RCNZC7Q zaeGtcl^nU3AOq;ij+XI~lklw6Q8tfCbCc6YL)m~yg^434HFu0quP#+48IHIB{o(|i{MXlxsQK-5|;>xS_p|+#cBoKw)kn4YN655QD)tZ zeVl#e+WM4)`AHf*!;y_fn>lYYD9S#v`@GO0FGA^64Ue9j-AIYP%0EOrGH9f{_d;2j zO_|ow@aQOWf0aw_RcD;ek9~w7{uk7@mTE71l{KCnY449~43gCL)2QT&590R4Xu!A5 ze6c3f<~raOC2aHH=&6Q{Hjo>>*Th(j+?-aq)}hr?uoK{PVOPO*OpEvM3?JE-C2_HDq4)3N)P=Wur~lLx~9^G)6|LHQd~N; z5qlhG6H}GKx{)z}Qn3;wb0{9m32R2SfU-u2rS6CT^j-XycpvtQsNZ_2lFGuV((`I^ z&gv|WbeN(r@b&_}$4_MK;3&LLJTgvzz+C-%i$qS?G4t1m4?JpaIC;Yar8|=1S69x? z&<@7SOpph3Dn&$!ow@D&q&t67*Rzm*WLIaAAQ@dCYideH<@FK6l zLuNF@TDzQ}R$jN_mlD%0gRXz1YIAkk!vsWEjGc*mr&yVZCc$zaTfP51iyrY9I~Ye# zh@LuU-?fT#q4BYP9`Z}-PVH_Vj3=()yz+RzQ_*W&{lrNh6lx0?{_U~5c znz$dwS2gi5jLK%s2XCHh>vupAoC6D_u0;8}tD~(c8y$e;ob0AEhU9@MXftOkUxT^N z?RV$3Gv;yLUH&l^ncwg15v|KGM|Fl9G9+c!@QS|pNl|`lQ^h!o!J0;SlG9AC> z_}(K2R4zqAMw*N#_N;U26ViRunx}N`oYg@t6ZYQMQTB~pM0APZRDBlAt2XG~KUmB@ zt79Ho@I%BY9~aToWJo;h`QcBp;o`^M!uhObf5EF{^d+Lv252$;5VtOJ&)8L}O&y~7 z9P$J_+C~=vxIm?#Stv)VzOePa1H9Z8U+xNJO(#xQP4 z)A6I~UIBCVF|1_v<~bNMu7;F&q@2tzowHARL8;G8q}LQw@F5Y=k=2ti;%Vz2LdN-{ z)<5jqR<$2bY6`L`_nIkKC*W%lbMg>6!RGe%KkvM{KM$H=>b51OO&{yZgzEl?!*19O zUhBG?$HV3~sjT7Bt8`Un$FtqusG(LJTUi}1vQ}E$gSp*PS;xX!4|2}Q`x|FFZ&20t>7ay-EccJr?~HKkLr=U zG?COA8`b(jE^|qgTG+6emw`8 z?N+UeENe*(jNc1QdP5^&Hj3s9gV4!m{nr*W*S#$DE06hY;M&VxmQBXuU+F2WX3SUK zp4wgG2T1DLNBRf}lOWq5)7kgDWBm58+?Hpe30t-WUwHH4Esfq4_#Rks&I;A=r>+l{ z-Vo$&uBQ6fLZkLLj?)mQQAM7;PCnuc6GDNVf5l2bH2KkfVane12tA!E`nW*b(7P3+ zp2JRSJ!QaYz)srj0Zz8yV;fcy*2{lYI07wHU;kQ3%HbIaezI=4eSV;U#tu&~L76?$ z3pDsKHndba+)L1ABB5F{H{qD_s3Z}n+B|cbeLGMxEi{t3N2rQ?tkF|gN!rDzheW)- zeUxq5yXkI16Ia$CUKc#b9hwWnowB-M@qiYQ=P_{yR>TwbKY+#!N`?q1o^qigb9UmP zqTigWXGRii(=2iyi{q6}4H$T2srgIZbxr#Ea9xy`9H3v3Monl3`g_h;rW@8H@fv%8 zkF+xPH&RdEAB>g!pyst!S#Z?;cy`{3qV(?R6|~*bD7m526(bf%yghZg#$B`5t@pi- znvN%a3trYOAbbQ`uJYaSi|-8>I24@Q(H>FIzOF!80G<~{DUGksj8Kc4-CxioQx>Nk zOp!)uMB6HC1uA}LM@oI~MZvaLVf&7#7`$Tj7$8;ht4O;_5;H=VwN>)(O=-=0v?9^Q4cT~_My;6bfLo;*U^jnC&HxG~?kq`-_;T!`;MqC$DLh{D zZWSp9)(F{`>Re&dU<7Vby2$EZCL-$|hplS^JD8A6C|j7VYcL$mqsOW|_;?cF-VZui>NF>yh8AXC5e~ z;HoItL$MQ4nEGWu*AIxhK8&}yw40@RScAO zeQ4n=i3#h*Wo9k7PdAS_L~L$YseYcV2wv9MUc}h%_s!Dh$YYv|tlLqmO|LsKhL}Ud zHKJOyT0h)tBQ}GyD0fxdjI(S8*K;3c(&JdicNDYx6S2Z53_H4}C*P4wq0XD}h-&oI zUHS{A?MLR{DmxMRc+5ALN7vy@bM6iJMIfzs*c0usIH6dXzX^!C`*l{X+`!*6TZ`+u zc3@3eZWxhm1$b;^1(B@0mU#RmdT)rSh)*j){{^sW{kpb;;e8L~KhzbH&DjC#g@O zY*IN@09cIw|ZHx;~hNVF>V9?bm(-z)@Z!iE?d4!!(Yq~OqOloIoUjSsUb z;NExop%Paff0Wl+7^rx~Hu&!Go`#s4`1euP3^Tdl$q`I+9FDU?fok8)4^QzM$Y(WS z8Q(E12S9sWzqqj~8n^xE25li)Jbtjfze=3$DamqJcVO0}xlqvdorpsbBowRaN*!MN z{&<7uw?+bRnT-i|o=;slk<7@*kVoJTh)sN4qB%K#3!A$k1lsa^8^B&@$~|an=J)Vx z4&}`i!x^KFuM72-j#Wp@xPMBS!N|oAwa|q6hhJBip9=7wA~m7oG_O} z`2F>v5ar2ybymuIY+oUzISnsL3C?@}{1?e3N=%Z@IO#!Hnh?U0EL37*B{C4f0)bpW z+z}k{8^pUvp#sh)a~386bAVwA^4B*@888U8oc@wM+GY?71A#xQNff1!u}@Jj8B>K% zqx$ysxAK-905lrqc)jSF&(!aCg(oO5QRDl20RP6*oPHA~M4n=DVd5bqqwlaLV_MQ- z(){3~%7Q?M>b0&1ruU0=Ze-7H2n6i|)QM8^Man4A)(B@ajtNN1l)$jbV&L7dlsz*8 z2%tE8a+-z&@nh&Uv$MF#(B+@Fsc2;;<3gqYjRf5!q6iy})j+%pL|H+PJ$sxOL4@rS z0@1*_KS(Z!TicNN(H&-;Iq&9Yq6@1NTydibzfb0p)d~m~4=&zre9HCn-4J{=An}FB zw{VDj!#-mJmX3JsKUkvV5<9pxeLBo&-mT9pUkS`%1rUGulYX+o9Fr#X1Vq*TOMf9I z6yq{$Cgw{=qE5sZORsvwwMZ$k|No%y{}Y(t|Lqv!-*gO*JDZzRuoKD=#A!pBd-p3l zDskY5^o&S+3@jD)jA0s$g}sj|>L}M^f5*y<#+x3QO-y3jzhfd9_n*n8JIAM} zrYwQZe2m-jJ{=HUUBwXanr&}0hI&|$&p^Sf*6c+me43Sw>Bj6-p`qqOFrdhVUkM!o z)kqJ4%37-GDJ-vQC0*Pe`QOeXr)=4yW0pMoZ%^Eq`Tj^%;n1~eu5Oe`bwS|DxPJ8{ zX5tB4iCou{T}sRjm&t4P2$~EXH3aBtcRgw5M_0!mjn1Y4bk`=Gt|u)1S_1#$sCB^B zIx#qINfd>t6NAvTsI+6zaW|p}H$_BtQW79&uu>WAKI$-Wlp~u}4I8b_*uY%Y-$&y# zxMNnI0dLY^bfoma=60-&-c%wsPzA;%I|E$3S{#p3&le7&*GnwcGN;Ce&6xc0sJF6# zGb%5qdgsBoNlS>5cFeD6>-l!2)!wrRpEFIq!Cm%iEtxb{TT!0@Y*i{uM)1-WAm0|n z#FhJnbNwONS9i+N%kAxOzS-k1fRmzw>O{6C_Re9pk6hwPg;5W6>A1$+ivezaa~M&0 pt9oc)EAd;S{k#3gco-YcY8LW7{Fn%mM^#_klMb5#e{t9myRu}*P literal 0 HcmV?d00001 diff --git a/docs/system/img/imd-testing.pptx b/docs/system/img/imd-testing.pptx new file mode 100644 index 0000000000000000000000000000000000000000..1bec9b5eab94298719f64667c4f9808897eab684 GIT binary patch literal 37861 zcmeFYb9Ze|w=KM4J3F>*?bx=lW81dvWXH*lZQIU{ZQFKke$P4YdvTuD&Ih=6{!z2l zs#>UOWAxd3AGPGAKtNFe-~dPf06+-Xn!tFd1Ofm=VF3UX03@)MkgbiAv5k|ivb&wJ zqc)wJwG}}gC@{qz0Py$x|9AagyaN*{T5^31sKZ+_@9^#vs$##5@#n&)IUcqqZK@i#UgVR9DRQZ(KmDw+rt3K$esOON4%nDDbk@~r^O zIyJ4Q)g>TiRel``tX6Uz*T>uSet_Ddli*{4leEx6*Xtndn483rA4^69>8G$rTlN|r zGRO@xX%LksDHBrNVR7xRX6yH+!)us$2P!@V#LiuV2GB8IrWLA-G`c8b*OZJ~_WzZo zmRISXG89+lmQ+BdOE26N!zhXxUm;lRRrhDlNpx6(?d13cA60uGH0&D30&gHK!5P!xj`Vc@wEr)=|1VDI|7GbF32TxdjEEsuU|WO}-t22sM6*`5!pB)7uK+`)cI*ut z@uJzT&fIN%ecFJ|i3vXZEfNjeM;p|uq&hgA-nue@xTRk8EowI#e6(f)rhIk|a5-rB zB>lNxIu$u)!gNCJHH?vhHyXV?I9CM|9t5GS(D7a;PJ}=A9i%&>O15gqTg%R{(|nlz zq%jOGQiy9gg5~iDzv63g8nBE|IEy!gl}eL08Kch_oQD5M{ev&{6CXu|FfbEcGfOQj zG|ThGY#1}STIT_)^h?I<#Wi=@S#{2PnoBJEsG}&{wirWWNVpX>_C$%@$y=6imDyeB z@IGHZDo51emN^6AdmH|1&J%4;J={Y`W8G`xS=tpHi|1pq9SJ zmoKZdy}^fCgGql$73gdtFIEBggH{U3&&<57*t84+G4no{KG0%HPKDsA6y0u`Q+L|Z zyk97AMer><7P5*Bb8Xq4*<-E^M5mJTNr6_>Mj|ZI2lZ;=x6qf=hcAf|=PCvJBdg<6 z%aIpN6DO4;Pd|cev&6^Jx#z1YRE{b?qnh=9Tq!B;^RvH^i#U_DsPaS5=2{I#=n9)t z`Jz2Z>Q-zC(t;xPgcF zZypq*4oW1YhMOj}OeDT0pN@Z4% ze|oGMH7V(Xhh6%kgyfz>1Szo0oJk&nGwn_ym(ff|gj%SPFF4AhJBr@Fz}P-~fhx=e z2_|OLdDLptno}>o4MjdQ1(SR@BDfR%3rZDDV^p1)5nHyK`2+`2cy1W&D_9j}VWt>s zY--2Ox4dP%VTQy}k`6SfA>fxbq{G6V8v{oNGeYFh)lAULJPG%$`5$#&fvMs^hFeB? znw*-Wz(C3vF@D@1Fceq-$@hX$A5fzbb$)w0Wr@PId58}A!g8D|ply{yZyI)L!!3J;us`%u{@ zyPk72ZPthradQqNXZMvMjv<}{`dUr_10&ZSkIhGr@l`ogq^Mm`Yb`lH>n$IoPHv>g zfB=15``vv}OPF%GW^~l)drI^5ZvkHxar#p1o6_~!0RTV#Gk6`X%#Dm4>Hl?O{8#j9 zYdNm5q4{j3eIQ_UUj7;S*ezWn1ms;v*I$rqbTK32S_(;NM%X8~yly@Dp|2zuYt){n znscOuQ$Q2&Z+mUEZUa6a-w;v;kE!U@>IdJgq`P|e6nJxJit1l7>Ti5~V8mm^%BeEs z>J1pDriSqE7M|a(K3`&OQ;N$CI0IJi7R+7Px=P9pPDV#99O89N%5Blcz2LjE=*Pw@ z0;&%(63x>(LyL9L$Waa59n$_D?lt+ii+>EhyjUf?4eoCk^H!&aCb`F}Oy4aGTD6{L zH*xQqk2C4^8lJ9VYrn#8THThV4oxlGHZx7_ExezGI=ooCSZaK|UzO{Q&sah4vEu!$ zm%{jcBk?ArRq@H$T}Ch4RMve$S3ievbYT1*zOhJ@X${o=0ToaLc5IXUDT!e1#4 zA_i22IQ*M9!yypZn6r?IV{BiymMy+Gk*ONuwYaed(cLnE&NR`XRx?v=OByZZ!pc<; zt|3lHF&g<+ytu*jG3cN|d=&3xy-9t4hRN%`d!9N2PO2~DGIMl|-k)Dh04b>)f* z&dIBF4^mkR1Ng>Fd(M3^>N=fdiqaP}$BgKYKD|mnfFz9roxV6lA7(z&AP^s+FJdl->M8Fh0f?{H&O77S zxC4)}E?DexMcM7`9(YPm!DMl_iSeVupY;sGncDL|CA+Jg;9n#bO4V|IDVf6BqNo}^|J=yh;M@Dma4 z)M$fS+*W>sZ8$PZFnOxnLH3W+0x+Coiv$py6gy&wbzHO>g^@!58dx4_`% zl2y1IKV6$OV* z;U*bRFx{5GBr*U&O{+I>3Zbrw{l`ss#uS`6_kiFvN8|nqUSir=nuwM^rTP}>!cw|V z$#|B41X&QKfYCIJ5(g3N1wn^{enF|Ko08$9G>JACW$+j+*fEzVSXje`?n%;N6ZUCu znB;T~y+`*iEs^FM_3O0ui5#33cdXkM-7LY>b_9y`aBR>P<{TAMl{Q#+`ZdSD%*}9;7(P zJTlBl2B{>4_OT=zTS6_t@!ur+q>y}E^@AQ*k62mZQLb2sxRWUeIYo51{Bcw_wR(GC zc$FjZLXbZ8G5lqf0-9+bQnjh){o+lBMzRrU&dLi+61Fe!hL|`(*f4kS0Xq+N12<+#9${$$ z5{aJ8TfxFG&+)h?LIE6U^%Tk2EJ=JMM$7(kDWdi)yxZll(xqqhO5scOV~p)v9J_c= zoF6l4Vx$iVrSruU9Ov=d$i#a}A*uPR%v4}a2n>BTmPuqkj))U+cWjz(NJt!~Eux^E_)c#ULw$Cpmh$8J&7Hd$1!lvEE{2`cVIHB$_Z5gjy$ zZr^AaB@x<1jv_wa)gVDo^%b$PK(Jvgo9X4}FLLZ>KUbbxzAt)K%9P}q}fNRR( z2& z)MhqT$y@cFr#Uy*zaAUnfVUlBrRs$^^U$ZHYkR&0)ZArrL%wRCvFr!=1Ae=R1NhlK zNGXeigS6B;h;$I!zjBi23g^Uf${TJ1!q%&8bIqP!xD@!Ag%Xy1w;xWp5JF&rq* zmpbfnC7j|dotZ*CF5CsxAa@5@ydSkSO z;6n2dFi{PWdV`q4)eQN>T9(3b8AJ$$%*L?~S5Ki=^oMzftXI?eCfDa)pcLHF2(Os% zsW+Bd8nhhuT&t*D*;%v?(A|yyevjp2xttZVxliz5dzXiG(nTZ>3M{_|R0xF@rc@~) zp%{)#-Li{;QezQokG2F|4IhW!nqClW6yj6p!{jT+(~zj zWl@PXU{>56=ONojobw9tNR_!XiE)hkicPj3R<&j2ysuPW)4FmKnbho;j&H}pnr1az zd2^`Lrw9EJ{OHwLm2Aq`wscuM@hZVpwAh40K+-jnL=D^+Zd>Y`Q35@QZL_;Q28u-U zZ)FNoPK!K&+Z>tOCt)HdU1FrtJ*;$?5e#X>9Wny5C1C(S1SwSES@LpfGUUtt}J{euL3Dz5FbqNJ3XZ}g%s4y2OqL2jT!gTJs;_k^vpPH@O zyG-KXI+9D2p3T3z=n?GZvkrhdh(GZ_l zSZ9Hx6(3MfW`=tWxe&pxV`5}C5_|YT!F-Ds;DqY#?r;K{uTVQS@dAtW^9otF88L$6 zW7~m%UGxM=sVEXSA|7(Zn0>)_wyZJW`o6rJBlwIgnJt@d+W&pPfc z&_6Fh8LgjtAqx3o7kO39K7M1;%8pk1@=Qs7c@|wXqvagm*9Jo{&)Jw?&f@prZ#qU# zeR6EZXXGRtiy z78At6o12GdxQC!UCTN()-`FZS3o7oiAk?djpEr-B*_knCg(ek%Mid-st>?6-iAGdM z_Q3|WyJLW)LBG0lXiZ)4{T;iF2KJXwGz1CJEx)~BUv$3O6I-P7!_hM_&nuqRx3vrc z2&?>dcA@z9=6COQTgE< zfAIDA?w($&c6KFOPwSz$2sx5~ijh96I>rLL88KYWrH5KjTF?Xzb}wEtNl&jzUt%04 zGEXH&Q-py$9kPA-v$$?hR?z@A-Az$zYZS52wk7c()GCgC)@k&E0pwPJY)u*Xy{HXb z^&Wm|w8^c~X}L9I(oLDqUkVt-3oqJH`H*>NLY z1s^2uYv{|r_hAfw5jXUF2M7Cij1YX^{|Tu7l(PR3SN~Jc{wt!QraCRYcM{^7XWA99 zS*?yM2$9B^5=^K#j<<&}%UVGTnX`4k7C)NNX~a#pn{P?`a-8OqqCQqYh#DIa)yj!C z3d_ev_lg|x7XwG8ApsmVrNy*wQGlAcX3MGkzhhS2) zcO}THx;PTvEPoXaOhG0lQ9I}2JeLAmtiyF`_ZZxya%QSvf^X%5c2~GwhiIz`>r%z2 zunN2`uYPN45c8+WUTm`d`_)UGc%7qsmui^U{;AgdFRPc)cXTp#_)j_iAD#aY^_m+t zdo4e@=)YI*q(y;7smM3P0VCDa1Y%?w_}7ZwLu}lsBIc87CXFN#=uigjSgYZ9qid9V z6fYrxmb^C6iaeN{0akr}XJ%&SW%A|Ou>0kbb1I5jhuvHwO4`XF1Drm=Asa1)`0nVb z_8>!)Se?;SL*qK$y&wCoeU9(zM26L>?ggO&se`RYbOv^1-`DYE)rqati6ODlz+pW*aTPCjr7b=II*RwXod6y?#>zoREsNSPpt zZNV!Y))Eld7v9nxSE#DGs>>r!J5+7mT%C0SWf;t{z{Ux?X8lgh7Ur$(3$X&ZVs%|) z*gACPTRQ~ZV6PG7JL0!MDEF57#2Xk^#1ju<5st~mPe4`!FTnygr4C9O9G^l1+jlzT zz^17Dj$B5W(x^D?wr4enIgeDGIhlOJ4RL18r7JKr(Q1VZf|Zcf8C~8fA9o?SF3De5 z96}}j{xGpU(!L~o!rOFDpEp*b8<0>uwBB`kfsiMjHOX;$Mn4VZaCx7u3p^Qs7GiH8 zLRdi)Tz(wNwie6&DvbtvUe{ir0Kb@C!*EJvST3)cQqd_dB($M| zOc56u(&E`D#meyG3v0T1j%$S$9WI2NvtEyvL2@n(07d?F-H?oQLcLWxZ@Y*KV2J(Sn zef}eRMKyLLk4fodI0E!MYC?E^ECm?awFCKp$eL%iI!RlDm~KF3XrYDrrEq|iBZ+a; z$k9foh?8blx&C)tY3XQBs=ewI2PCw)T0V7Pbrc+1zcTSw&g&%S1L5b##4tqq3s87K zcqBK>o4($RJ)$}iW^CoMD-zk~eAe>LxM|mbA}7h+gD)ju-|+OZ8n7$B&+)mV)>EI@ zmGI(In61)BjtUfXOv!5Z1O}b|LI3DHU0hs0-NuUNc`iS}doqWQU5Ib?ej zZFCQ9Z|hTw<}uX^FD))cnoPRlwn&bA(tlQh!c~Fb7=b2muu*3}ya7>jS7GfEEy2>*ySbM6c(WkA zlDKWdQU1q1QO223q?N@S== zODr|q;07mK`Y&Nj)4_C+LCPZXCdUA4X|^AoaTy>Z!3I8)7Gxk!p>Ut#opV*2dkePR zo3|``BHf3h{)^l(Lo5Ss1~UwKsw`02)S`@yg6D0$95vosUwrfLz{r}$CwywK>YX-c zI`qytN>2kWUX7Z|D$k&VyWNL+*gbQA^jI&Steb zyH{&kKZNLS?~Wi;A|hdokz7~UpDR)q!4oPR#}b=Tl{X9S`#c0(n=fc3>Zff(Ah93R!*vY1T{87^{!fBnd>4 zLeYboHAKq>aE)pXpODCs6J`ZDA+Ji9k=t`YO&>8yMIs==x-&+Lqz24P~m&#wg zZE-x>><9RGOqrlJ(+*qcs1%H?Xdo@(&$qU6ztOL19cuy$^aQzgQ6Uq)B_HhON#3KT zWRlZLfj@?jzCq`5w{EFwC!VyqHhHL_z3vwdFRhLu)C9SKyEYfSX85KP&laO01c?qht2^*;s#ha2lNX_vS|Kz zFzLcmw}*1vBjeoTG~RX|jHvV1!d@e!;eq_sj-YIj9ASi6&;57b0R(h3VF3>P4AZhH zfQw`P^NLzok_eKvPF8Gi87NnWPIfBm7<;S<|06AyWpUKF5<^!@pf zE%gF8O${+oFG#nhf>i-7+i_BvS|bt&4t{FZB{6Y)Fb?;$*KGr>!I_Um4jCTML&W>l z2oB+nFs*BWnM5zt6G*p9kgeb2>t_OZZmVzq|8TeeI-xrF2jq)o(68NfLA-l{C-0{g zFVDj7FL=NgXFpSgtKKf5-T<@s@F!1Nf&8=hrTlu-WY5QtC=_ za*=G}YhU`QF!Lc_?mN8Ti^2DS`|s*nzIl)}&|m<7IP(9&D5Uk>ZJnL|lTrLf=UEcaMQUCX&<}Ad+XO&l#P!K_cSUHJWYMzL9Y+A*!fo zMQ)y=6uPd?BJ%m{{r>e3{+Q8>?rdz`ay;Iov3v|zMYFwaqR6-l{smXcyj_sOO`PfptKVmrJ0QCRMGp# zQN5s14r+Uq35KAls;RMI?A@TyVe`0g+Fi@vC05&g08+bz6=<-pE1$#}&syLO=zgb;eKQhl$>t95i$TuML z$#86WA3++t?aC4Gv@mVudYL0iy(>)nunkUL5BuDO3q<%se4Dbj#;(D#{H#9<^MDNv^A z*B2MSkjpF1c!PXighV#km>r$zPS>KazhvNm=5Se}kzHhi_Kfk!8d|!Cb7p51P7|3fi-mqyHimMY?2++^jK?CuEIh?5b~2xQ+uoG!(#cN? zeJ+m${apL==}mp7*M1|?`2woB;KFSJ*^q<%o%V{9Un4sLvr|RRL(KL=Dq{KifjA&7 z%%#$lsTEze@=TcbhRn1EJ8Gwjk_s3hK|u7^Ac#X%2mt`0?LzZohSS8JJKqkew}+K& z#UDwJoAv9GIAMf0U3;qg42PW0xi%j~B4^S#X$Gon!Bi(jt+s3R549e_m_0Fp&K1qL zR_Sh1g%g9Eo5Oiec<_I*XN)589(QNV_Al~SZH4D(v5?SDIIqnfo7|#$;{UoV<2^b- zP8nKmkGM2hMe!)9W)Cm+#9v(2XiH`j9q?*_h&44ETV5wNtp79T(RCS~nf1fn3eL;I z8+;A;^;RWaR)uqNzwMICIlEocI9YR=sJcNte>o8K&B9p{2eE(y5Pk}b1j~cpKOOD$ zG>m>GxGHMes4-ruhY;XfZ;%mq=sI5ZVqjIPeDo{P8WhtA%27ai7j+u+wdZaFk|Q?< zG30&Of8T?X6+LaguEJe2yBf^5`?qM{+GX9Vrs$8U^bF=w?tyba0thVQhNk48o|A0^ zLfS|}t*!e#Wr$(o&g=u9ug*=~?%%4DV`^61UYmU|3Q)Res6W|4K)nKhd6jxP=>?jbk&@+QaprqA3(mb11)139}#NiaENXFmfQ*nk0Y zf;=0@-J}+Rf}mgq0ocKPUk+r|!JD=&wY#0|$GX7~H=Q2&B;ef=1W7~mXG#hFB%%>S z=(wB^_Q9fR$p=y88J>nAuaDcMT8`(}gDZ3j#zUr$-JHjb2GOUW+^g*o7=f@7NzzB{ zhcY`1am-v6=uQHna2L7IW9_Gs$KnSVP1`6Li@U{GX|>|YpRgP7Gp%x80NhWQe+Q(rGb=;mrEZCTvE0}fhKi=ocT~?D{7&q9c^~Ld>*$bH+DTTQjE9kW9B3u%S zj2qvZ&D=zSt!}BQkM1>Jt0c#3t*6S&6f*kVx~85@YAKk0v#gXEG#+Q!sVWlgUHukW zi{4!I?r6+(o{h%y<|C=KCS5(eMVOlw^`gy~=1yp-|JD%}nxiq1f;F@13#~UrI?s5bVOVZ9*)KQPT^(Nep%3)6>H^~9-uJDKW06C)#y zl5(xAy6|;b6hmVx?ZTt};Doqog~@wh6^p#4D_uGFG|&@r7<1>oJQq!3*nT~nG4BVx z$)TrU=7ab#d4R{C0 zb$nPAk4+sPSH2C2Lc~&bGgoA`v`W*sfI=Q3DfanmPFtPUfdH5R3hRrij02_AhD5P3 z`Q%`eQQJ&eEPS98kz^S%n<;^Wr^Dck)+*FcFj3)Bhy5r;w^3cb>b6H174XHxs*FXn z(--@R8A&I)&(aubhXU&m+)*$U;BPI$(I}3aIjY~!a7a7BV}F9IVwVK|fRF8;Kjil_ zvPOYMY=2yx-O}YeAqEE3$D(y*@k4xkK>2j5PDb4)ELb7LPR`+>=!D^4hh;xLYvumd zvyFW=kKMm3_PD`K;rp%ZCS4X3q2f$mJPq@glBSqUC(J*S33#Lzayb_t*3L4F&Eoe1xB#xPn>-DnO&X~ z!(YT4uBbQ~-k)y$5eW;rk?`H}Ga@dWVjSWA_@mJ{#r6P$VK{+I0#J~BA%x&5`nKTh z&eKm#h1SYz1viNG9fa{F*I^eWw2CSm7ECEw;Ene4|6=h;SmxfpT*|7^Q3mM1&?zhD8uLL9%V2u7vFgrLQByDR}ZFM7Q zMow2ehvT8$a?ktYp}z1ngU1G5_fcn6mVq956!)1NVf>)AK?y-!9X{@K1ay5IF#+yT ziiO!|yP>D?S#PDq)>W9c8G_v~xjc|&G7ASiu6h{Dk8TwAL@QwBseEeJ#u~TH4LsVG z$;z**sApBGl=bWzX%xqMT+he4-)7K%J+$<*L^WReo7_o%ANu(3Fp2qJn53@t4<>!k zPxC-hP4jt(N6h#C<(Q5%2O5StbpomzxPe?KM>S=VMI_)l;ncjR=NgriRGgjQaG5p7 z#=av~m_ImZ-q?6S&ejh6jmeM4p&S=XAq*4<&y(_E=zA``D--GB55 zcXd&0y5)0Mz;#i+%iV6SHmk^+{>hTDCPmpkw^A{c(lPm(*t8ez(QGD?CGkK}Wg0x9 zL%rq9+K<>)&qy3d#%&Tm~ShT zz@8P+bo3I-O>H%f5z%-m_?Q;K(_Qf|j)$aE3YD%nhUfLQLH54Wud8P9^RAEreRlbA zgSxlXhV{%eul-yHdT-a@Ls8v0S39QaeC64Ig*o=`DvL=DYtszGqC9z*A8UX_lfusZg!{r^-lV&L9O*U5a(wweE|D@PJ5!>O4;n%-NAEDeg z=__QSl#P!Z5w8+`K_jPx*EsbLD_H^A5&|G60obn@pv1@Qu)49)`Sr6e$s$%Tt}vd3 zg}1VrU#dG78X_qEp7pFP8W1RLwI7r)XpBX~y7WuUEmz)lqQ1f3p7h|}>TUo0v~EHw z2y3$|Kzc*e7IHIR92hnrnstsOxzgX}3hw-VFbc&&KKbNc(Jro_ALsVmeNl?8;P*t0P$hMCICT{#)`b;; zp4~d;JBkg;SPJQh6=|tziPFmMU#9YTCp2DFdm?cHGT0ytCPc9$f7GE`#S&~PZq%We zuj}1;k7>V#yw6xss0WZ;PTg6GJVc@|y=WiVRMo6-$HeZjBKb6J_P-?y!LMFv3Z89) zpzzgiO;j+ds>$xtK{qYPi=5^2@Efq0(!Zl|Jh;OazqC%(lZRD=KAeR#a~82IVd&O@aG=P+<~b!|}-deuBU@Xy3Ro({T) z7{_k&xF>W{tWKt7)m{ix%2Slb2TN3@1qul=HRo>KLJl#_LU~cc-^l2oNYea*sSsY^ zls)!X`7F*tNpYdoiqPiRJf(x0(hFk*aZ|sk5A_}f)BCtFylLhori8JDpv@(D;y9o{ zNP>Z`LFmD4Pz&Hi1a<|FHk=%2m`05?994CyL49jy#d_Q8zIo!%H&3j5-N!5pBi?(ww4iyR& zok$`HB(;vne`wfwrO1!iw;Y{_=sDAmvZ*#WSk{%|_zoByy7`F9O9dKMK^H_u0G*IX z-h60<3Z~GTVOzOBZ6E%T4{?+ld-c_VNRGet_3}e8s#V6frO27RQh`SSwS_}bz%=6$L?Ic;Epn9B-}@qUHzcx3;#Pz+akchmAs4=qvtdnji4 z*Ks`c|AijTA&W@nMJ@M=6GZ|`;LMw&Z_FSM=c`sLX4YmA@P8I;&E&PeOLP^Gkh<@R z?b>6Z>liT-g?=lCZOO&pY<$)RgMa>k#da~k2*Ad*HB#YPbna9kj=eR7}uaoZE zd1_L=xvq>=7%#qCES<(n7TrsxZY{cU!F}yo8{u+Ma>e;yC(ofO3kdbiKIpccsDUnq zrn+zv+V`AV&WpHN?}wa=vNrdSP6*DYgZA2-w6^y>)uwq4K2~ZSs(qW-uWE{rbC&FU zBcCn4lov_p87Z@+l6wZ}ryg_BqZ6Oj>`i;x89tn@FP|@pY()!NJDK<`ShX;Y4-=^z zYO;**XlpYD&Q6imwRz3zo_D~TVv*?;L)$h*C=(|gWl1Ht^#W`$rh)0in&YQE-u>!v zAxZi@P6&E@g9L>fKs5Y8;EdzIsGY3!`VG3``T{StnWJF&*nVs(gzdRnWu1AJWF`}! zbLxWJ`sR6FiHH+u48#P30-*9i%zp3OfS>St6oIMJ+}>Q)elhMg)@YkaS4q#X1JitG z5nB+&7cBDNOGwR9kx0^WkL79d$z_8^?3)c)7j$wo@<--sI;kSEPL>caK0GCc&I&MZ z#q8+VA@lt6>&K0#1jWQHr`JF6lj6qwm=rgEBK^vSRwgl^H!itl<7RQY1r7#Xt*gnz+PGA@j7*i~xm-t;sdG~Ndh{@2gcys4r-uH70 z%QpbLnIelIk2)!tfkXfUY)54#G_Gd^1B1~JRWNA8St7Q|l}z2XrLmOWatJ~K&3E;{^w*|b%QJJI zNUU;8WR!^lzz{$g+=E~bk4REmwI4^T*w;r<_?2%*TYX8o4ms4ze&C~Y>8ohNLCt<- zvGEIu&ZnSnA+(GG1_~7RfR{iaJ1`YFFQ?Nddx!+)oyGl`S*>&(dusEhzO8!1Tizd?p)PrhAfDzvMy66m~&voEO3 zWust!Eq>GD@Biq@7lU?_MAH`(hZlz=Mx-+XEF1U(O*Z0~2PonjBOpA>r_e9{txVmr*L%)0 z2n?IVGLh~cJ%t%^heZyd7{Ry~f<$M~KQXSwJS{`Tn#r=92zB-CjPu0b{P_4G8D)Ja zM|9Vr~aW?8!Kb!6#gju z*Ei4nuMCvUDy9w-900h%`|n|o^Eu4r(UG9n$wqH&Op?h^IoJff zTt<=lEs<<;aI(3-WC-*;VA0+pz1Kl?u(>bTl$i3y_j#SSX?=IE;-x^#DW#uuVbj5$ z=BnMvmDM!*3(dY=X`xQ}$wWnIAnSE4Q+AGwS7}*5)#D+*^$HipX-rZjP>Gl3oxG^}p)B+s& z+t}AWgh;2yJmw~UFWDLVVoS%4j@;vr`8+dIerh=pCJ|z1*q>n zFdOc~W>#EieCmXPUffn*(?~+8aiL;OqRe1=h=OsD%n6*WG5Kl(02WlnDs<@R$57x0 zZ3HsJ5W_tc&JoKCi~Yw6uX-r*WczCSSzK7FyDWiEv%CUTA^lq>k0bGL> zh1!3}%&A}8ibni&!8{7#l7|(*ChzzcyMl=k&B=lr_@wGrlZ;-tsY{*qd2z zZXs_dru`s@{-9vJT*a(AW4KjwQczA=9qG0c5($(DU##b_4`iYr2oVStGD`3m@&37Q z*2p5T0jEn;H_idl^PvK?XnzpHw6lw&k4|`PY&>GzNT+n)XI3ailKH|Ieu1StEJKY9 z%GkK zIHpz)TY1Db&!PlqK_gdi;!pT?rQY9>@)|5lKT^vY9DBolA$`_GfRtJdq`d{(dG0?0 z#+Ee`y;{soP^yM-HC|xljLpSXAQeMcdK;|jlFMoeMYXSwn$oHJ<>(3^baJP(3ANA* zwmFemjObs#PD$3QiVfd|=NQQ+e#A!u%}As|;R9np!uBx;^CB?7^L(bBsMl9EnX!@V z@hb2#U=kakWN33;RFfD=w+hW4S96`?%h@iWGkCf_0e5GaGf;EJ7p?=(SY2;~=_fir z@#DaEwTs7yvNb!$>oF}d(}M+v8`1s-&zpX{VRI`a#N zfa6#6D66j5+%C*cl0+}`ey67Q^Y)a}L@>7)6Q0jil<7dX%QkE|w-#ThM{8F`s z)L{d+#c++>l{}v%$7<)@IV~M7^b0`+CNJQ%%e?|ZvSW8xcQ?oL)6C~CIpl@;sWHV0Vuf=P32E6vwGL}>dYC+I=DW!({AECAr%8lqZ2gjz z9^V$hVCwj@io?3=9M=5a8=VNylRpCPf#fmMHk70v!LmJYjwet|gNMcOx^nF4x-5^g zGg(I4*!Les%@BY!huS!{+rONR-y1dsY^cLm)DO6bPk2@!co-K( ztl+;?R%PZO(@(cK7ga7B zky^<)-`?}6GDDVD?Ks7c>Xh^9P`q6!gBkKoz9P@*+8oV4<&y2KG(x zGdgkI_-MMbL%p2qlN(PSR5;iz)u>$3M(xi-Yjj6M)0MDTJiZ^zybcmm_H$ zD5@*?(3-R$x|5h`AJ$#0Rch{A^TacP6g3L>78HixItDNWlbzog$4X zj;JRU0JUY%@egx9vBB7mxk`GWsMgjj+EwP^oC}{^gOFuzg`o(eV1L(z23)X0QN{T(;z?S-lovI^r4}$w zoeLK&VIw^wtjB&A6Y5dF{zcoy7n$wAI`3Vq+p~sSeeVzNlMnbaVhTkFY9&6xFWQgz zhaw0Nnp%hyHG@oEjliGl#M8Nuc5Pt^JZFoKwbhOeWKbSC8^#5zpBgL`_eu#O0B(pl zI4;bLZ|W1ao5cTRL+1#lCYao)ckno8#Q`@LM%eaUC&2E} z8vqo61`vodkZB}XQFwdzK2)!q$n%x{^a(cD6PqCuhMMy`BZHhJ4NJ@M4m#}9oYW^9kjoFPsHIZ zn0xqu%~qm^N|8nXE_GBp>wH;+9`Rq*h~71*uJva<{5G?W4b`0zva^JwD-!3xJ~jRw zVe@7onQ2?PNt+!!E|t#P4pt#PhKWC#XgAe_HtyN6-(p=+2b)-_7MCh;J-TY;yc)K$ zzbi4=wRmfD8)ulndtCCLh0(+Zak!#xYcj!@Gz0T=1s$_{&rQQp2)?Xwn) zP}$-1&FsAc$KBA2rcyUX<+qq83r*qM-;^W1>#PR9R8gihWW;&fvFJGNlZ$2f0RDvmZir3tG_BW?OV{stOk7Ii28ZvtD}7 zO>Eu*(>S(*w`i1_cx{Y}#g6@)*OvjO1=TT4H~DpCqv|~Bz==_#%E zK;cqfWC3P7PpjOwS}6<59|zUDYej|tY7$&x$Tm;jdE$u?9bdVopk1ys{x^C$g;sn{ zIb#n1VT_pDM@?}nmHCGw+yT`@;slI@Qt*6(RT zZC_8-TAK|WUz$#r2vlt(GT!({c5&eD{uHtd4pI>cX~GhS`x1x2H)oMH<@*I~d{5GX z?Pxo+we$oXDTNnXb9k#EPaj=pE$`qhPx-*)_CbLy{5nbGCDMtAFACXt1q5jsDM*C+ zx34`rdtS9y*+!RLefoQY_E?DWt>}G&Pmz$M^VABmQ1Flv5`y(_{U%l!=^!(vIgH<@ zrMwB%zS}!su_(;nau2hv%oz)b#uCSe_90BWLX;xNxk({FdHzRl?r6oWY8DTWyL_q$ z7&*mwj9&YSu+cA}gl=fl{*3@gUOA-Y1UGQj(tSd$=ugch1Vd_H!`)jwBj606!}Zjl z--r9J+j*9{KC6?T-%0ylMdT+7GGp&|qI0AF_vy^>uXI-5_&%e8+J#@^is&_^j!GF0 zosPPQ5DILqNwY%dQmpP&A>*5Gwq&mG2Z2d%s#f3CJCS!3o^sSalf`A$WIWoL#P{6^ zerniJoX4|^3dWMsC}U}11`>anSW0=0bG$qdP8}An427H7Uv`k{?cD9aD!-ejPF!>sdRJ1y8Fsz6-Dw z|HU>J&7s*6r=DWbnqtCw^1Wwp)S``M+{E%>Og-7LAd~VAmZ((~BOci({KP#oH7Kkw zf3ovGPvk{05MUP_FDa$|2Y{!gY4s!fWt)T8v6@^c)#p>1&_cC+Lb0m9A zmPrJUmggd_kU9;p53L!vao@P(n;q*T)VfVQw(``cy9|4tsWZl zd{j1;VIddZtsYoMA19Pn|LsWmJ*GnF@$0FWvC8CS5tSMFIVx>kVF{vBM~)3DY!9(p zis;d*UCgSe&d>&afvTcjisu!lDz2{~ebQ1r=m^(zrcB9M1JaNlW}Pc3d?glOv(>v+ zwY&tdwuQC2kHsX{mybU!OMpTp-{AT-fg4l=sc2Je^fix&l8=D#l+!CRK4V%KKM{N~ z;F?&0iKn|6LJFBD--eP`7Dv%lT-f#}^j=e+w#F}djcU~rQ0r*MS^v=qh0|1Ge z0gddnAOLAs^zTU;)ZeT0Rq*E>4R-| z&&d5H`unYFqQ+=z$pBu|q|K1};VE8}5&Pa$Yj!{<=828y=Shx*3&g?47=`we^T?bD z9I0GGh^$@D|7huxo_RI-dgX!4IQA<`#Za;dskQ2{;D<~mTc7CG-IOQl;~>=_oX(9ECq>2 zgUCe9?K>+Rtn@Hh)>*pRXW*|a`dpt+9)u2KyYn03)O+85{%jSO>tX5Q>lW7vt(jyt zwgM>!W;P~fID{Y0gthP?Z?SN<+qH1X7IWhRQ;SN*`D*Q6F^&`+R!6zy6jWKf3A|04W>PMBH=b{Wo<;c{ zx+KT$gWmR%Y`jwT>Uu;~89+X=HQdDqi#9$iHtJJYGJ>*!rKKRB1gAA2m{VMrVC*{> zIJ?kY6UBwZ6T(+DFqrslQyraX;;4ie_;@!8`f#yo5jNPyjTuOjommWyn}JL7O&niO zx|`+JS~nuSynNA(8QTN<4Hv@4^QjRb27@(%gk(r#xekZ@UNNpPg19x)6lB3_^1fTL zXD#h_W20ks{?E7PJRrMVm_C~3p*WNnQ-M8i`XXuh+ylSJIxczpa#^cK-4YaUHc?7+ zA$~6&9&ZNI=(9N$SiH~;1XbAhtNnM)#Jlzb*?-7iu>Vhgv;RM)v9GhmF;ZELV93K& zFzk~*x?q!lVu%WjQVvw07^0?xcTvV&zg!t8hR7Z{C6_f&a~LV%z!fZbv&z)vVXN5{vu?~ z010Q`am5K0Um>wHOF2>^E)LD6zy!HQ zT*PPSqqqhv!rV~cV5=-4LfrloA3Sle1UGoAszQ1d4irG~!^saE)5IytPZDX`tp{hh z)2T-*_KZ;D=~QR~YVO5nrwc&S*G?GB0}QSS%!L!WWs2S&#HAlZB>3!trn1V!Z6n8J zr`D>?&f{!3{4G-$@EW0t-M^G6V{cbsR5jBrM=3CVZQfeiPkB89?MY~Gt^G*bsr2O2 z2bHWYWk)bG2Oy&JHQgR);srKqF@7LUVm)pMq7rQ9T{DcW&AstLRjeHXdbkh!tBP@~ zBipy}*A5Xtnatp~#GS$2&rqXjVTEJ8A%_7ki82&r$idq;w=#422G^X*gBSEaLOMdi z_(LZfrtZ?k3Vp?&*6=qPK;0uhSKJgXdy%K|LGyraTPLY@Yeuur$|WJ7}95eL=~WRP?j(f0Low_ znFn0+XH)H>c|)55OtifbwZ9U9StvjYHi5BQ+{BbYfPQZ=K!`#=mrz3de78WmeJe|+ z%(h2=;Sol%46=`ib z+Q&iMFbsU#K6?R+e|`m#{bU6do$#*NJ%b|-!kv8XsEqhRtY&o{=1}aVh20z!ulJLE zaH1A`S1^>N@Op2U!!F&Hz{cU09q%*qFGL6L-SY|WIbyR_IK5wOTV@4HO;YHnA+|Mj|kP7U9!gPg_C zAixZ+r4$=LR02E19EA3!HOzgp{jxJPTPi0VUDBa3cI9luqi-=TZd8?yPE@OSJX_Aw zaV?E}@#IKMi94{Jc=ZK_PTB44B#&Zj`T`cATUL4~i?jl&J)m(KQ6?MFmzJ6c76%S3 zn6xvNuW|FM)Op^G(|ar7sEos=lfn~yKUa;a>BPOP$0E8+`BFWEZCg%v$)n zIjWptl%I9^)@PyAK<;`^5D}@nd2oIBT_lj8#ppTPz39`T`aPs=xOVSrG?ZtsrHrOn z%*?VhU~tcH#7R@dXgIemNt^PC_-az!XTBCj*(gs5IHf&-wTRpHC1m+RVy-vT3^O~| z2FjdPo^O+)KfX@3{LV@LHtng2%9lmqH8gb4M(-f3oHB+M9^1#cVcDQjuyq9M2{Lj=hVS z2#!OWh2uo{m+RPKty`3vMfB~QvV%F6)0?XvO?|g6{7g>qRaa$Z;W)AOYKma@7olZ4 z)Hd^sGu#923K?dL&XUi$gRro~k_(+>dyg=~G_Jw?KBTJoPYmHf4@kAr*-T?NVv1fx zsD)XZKWB(FSWI!~GAY))>#85!_shQ$&wo@D=RfvjdpP{4ohC~!DQ+7_U#2;s?u8fM zM&)xu-HJ0Am`l!M%N`bcp}xRY51vG(2;!)I>}iORE|ZoTQx!1|E>{79SMcTb4bQCL0o-3S$XjBOo*4d1iJ)QA&8AHBi-Xm(1orbkNzs-d7)J ztNXQKZ?<--Z`S=&ZwDt}qK&*{r0;@X!?~SA#02rIb!$#C z!7$sZk#3!7<1DA2T2CS4?R9fxHDJgOZSoc!+0ec-Fb}_U2wxlZ>c7ROOO5w?Db*Gm zVmiM#z_;Q5^~1aOL=nQo%Poj+Wx-4KZ%99b?{+w>iOcN*FX!kv({M1fpcLMqk zH1m!L=aq^7irhUfc8|6DBAB7$GepSnG`~AS#i$j_mgY*JiTBi79LZ)@g z75=vsO<0nh7EUo;D=jV;GUkJvHVv5=mmlrzLLPnIBEHzVsRB_B?|{+gYmX0IADeg zgTg%PM2K%ehUu@KCoIpi);y5edXD-FX6v`~m_O5Y^xbiAVcfBx2&i-BAJ=72Mu-RL zfy`E^FKGJO<6qO)Ce&5Nk)bt*W)h0;0xuSv7$y5d-_2%Kaq1wdPBK2P*#ITTgccRd zl>6V^NFsyJ;!#*jtGP1hPhoqM=o8)Ej)uPW%IOn!87|DsWS%ih{gxne*R+b*8S>;g zh_bVg=h`R7E|Vwj@HN&ag?=~7C2GfAu03z!!`DzR|=_1d`o4EZNKcPsd&w zs&~v8XZ0V?d{E%KzT8hxx((-Bs2Z(FQd$#LuJ=w* z-6qVhEg3`9)8477kh@gFYflqEOWx6|zY;y|zQZ^CN^G+Ln@`8F;AhM;8ru7Xw+esM z!B$2fss6cFJw~{#>g$5NHZ^v=O?~l5TIvELg2zSTq2oI|&qGyR0xQ{=mOLtRBCKBQ zyKq?`Z>VX#SP7F3^i59D4z)6D9(2MOeN0WF&L=pR;LSx&+JlD7y0!t=wgAJ2?|$RI z6i}hxr|B_NFZxm$GabJ!bB?~wOljb;U?&H~qsf`&i`RmdGOLI!s6wb|Juu8dEQh-2 zYo+h9V6TX?bZAmHCPbEH(&V2eJjK0kFM9bz!zP<+6eAKtPcy7xyGmcyCr0ae)p)Q} zujAMvyEQvU%FgLxujdjudL4QGR0is>ovAl3M#4p+9-bi1(h^lK`HN&7Y z3#P;FTIljJ<%MHH)ZzA^+?+LX)T8zwJNgu#6tv#T49Hwa1uuKdkx;e^@Z8raJ%-h-J_BYl*D57QZJdCqF z@LO{_Zah;5A`1SX3@*T1{2XBlAKIXXxsx+o;i!w#bZse?y!}BA<=Kz~|BIGq$2iM( z8dZ(-RrOkgUVC+xHJ1VQ*D`Rf#(oC-S>A1r0YzUEyI7zZyO<+A{7CPJi;A|L4lU;A zdTXB!ygoGZ^(9GX?gcv^Lm|yYX(KQv=}nU+4KqmSR!{0zP^VN6+i&RhxVoHtJ9Tq> zbU<9vnP7H*n{;C99^<~kb*g~gK@uS1A05CSuYZ`&YGg=KscRS&VlEy`{!MNL%tm32A zj|i`CnOa+$|8_#vGF_h(6Xd#e!vFw}e|FIRs4VbPb%mem3w*D!&@nFit;Pb>l4qJL zb9p2sPjF0Z&$OS=$NXp_L5)>nD`_z$DbJgbcp*eX3(}9_EzxIRS8XZ;Jdiz)-%L1* zA@nFA!)<>CmAC+37#Iv?pcs%YG_hlcPZ(-V^YEBzHe&LuS(~waAt^B|C%AKW*^!X1 zMes?wKZrYdtP6Q0P=2;VQSG4YS-g`T^Q#oF^~Y>aX~E7vwcVbuujrS_>bhbQ$vWdI z+~AWZ?C|(AIkI9C8)e!IAxMnw+)c~RvWEd&w5!5swUx?bWu^n7O|SSY`R6)uw_k0T z_tSLi;sR}GsPRK+$$99FKEs!l*JQpeEHoaOFtO&fvQ925G#XKheU7bMbrV-QeWLyP zZ~fo#;pn3VkXpZ$t@x9A|L}i*Qtwa6mVcD6fN%R&!b10uux*d3&^L(P8LhQd^b{;& zZ3cRlVl91hHfh+$ch&RmUZ>nkHshs|5q3j>mKsS42y7C8kVxAIaQUy1vz3~O?en@jn3jww%&th;(usq~?P<=Kqw&Y%Bn zApgIwh3}bC|M6P*o}2L>uZ8cl=>K>vd}m4i$7|s`r{_Oj3*Wg5|M6P*KIQu#uZ8au zAO9a~f#GMT^xu0;-(!dWtA_8fi2u*jU{U)~ryZ0_&`a{81pf;QQyWvJ@BjW*?@Y5l z6#ofEGxoIrqLb?_$7&?yfx> zm^(^pnbU=rp^v!AfGBH%rG-KJ3o{k9@XOCO2oPPJzVW(B#Pv0=Dr>OXc*Qx%C)HCk z=adY13u&I>g-!TGta4YLYc+!#G==YszpB);DU=8EJ_wDY(s_|`7P9fU6jxz{eRF@J ze!MJTaI@HUdA8_w^bkIlJ%z!e`5=??i+6NZy}v6@znuDHv7lsmm4ETO8QtunWlWk5 znh&;V(zb=$g=+NyGO!D5ZAnF=#p>~g7^+`H)X9iX8Z<&%(9%4?6b7IOIEJ0p^ zZ-9k~VQAjaz=|&Q3(6$mFse%3DXDt&35Zw5ink&|;%=Grm}?71M|OIIm^GL#VrcCl zuC0e+n@6Um^4;I<_QsTVH#2T5#Lq%FM8&~Xdo zDFBq_o3!w}*d0GHXKDss7pJD;E!n_}X)zadus0W0GM;L5U!kTWDIrSW0FH9wYt^l#>vC77$`hD;iBT`rBlcm-h)BNfEKrU&DM zOh#^uy8PIY_;5(XvE*ZunSGakHbhYHIKFU~46Ey=P{u3iPq^i?D2HStZ(}oZ;c8J} zd&%lew*5&Gai3;zeKE2t$%R!kAVjyNcy>xicGHGJGT?mS3CZD_+FX4Q%x;2=dSxOf zs|}9sDZqFLDHwCi8D4=go7ICunBw-)|D4|sC)u0DZ=w;Oiub)Gr@Z7MqNv)mFV*ZE zqkBzi?kPQSKF9{xVq7Q<1pnY^pw39!J+6vBKWbL9q&(@+7Rk77# z3+8z|GVw0|j2Ti(qnDqpd&kG>{#6Vgl}W_HGw7zuFo|8e=Sie3Gmw@oh;MROWwz9U zEcWF^*Ibm0oHFJ_7Atb`L-0jG^%I@wKZehA-*HtA!sNR%HZAl@($tm_atF3 z9&eWUl{--$z4DsF_RY)in^2c6S73iPYFXnAK3+w$tWQFOEX4e1G|gcWYaq=X4uiqxtTf%mBT55CIkH^%I~aBKhaiMj^PuxO|k|*UxOyt;oA|} zt<9q!yEK?6qh2AV9u6}TB93_vzeHj?&99Glt;^aM#<~FYSjJ#mvFsk!L4qNS3~fjA z$r9JPTG7}#o`9lb|46p^)3X?7)?}HFgHB>2MK9xNSol5VOLn7bN%&y9sV86uw{%Gm z*C+Z$yp209XA+G?*jiJx9LRMUs?*OWDCg4wgF+>|ief@nY01EafNK=pINOnP6 zxtVuEVL`s%nn-)^DyDO4S%O=6?5!~#msfq}o)i`#vgRsU$=#hyiEWadetWLQL=_|R zQA~Y$JyzQ(MC-ggde)^OWCv3UsaoAWPcC=Jes)}F);WLugEpfxPn>ug4R6?ITUJ;7 z+ww^4zKe4!kDYnX3cAYTOA0!4RT%8J5_ebqBAkVJZQ-lAs;H7L?OK_O1)MyULgh32 z*vYopiWcsba%tKp+w-p{o$&kb$!EFM46=34lC_EzbK>}lm&T-`UuS6M@We^Y=2qkL zW#3s?T9+P=AAD{IncV+5E(Z^CcD`+(; z&E40}KOitDI3zkIHZJ~M!u!PZj8BRn;}Mb#3h(on75My`M)$$Hpfn zr>19?S60{7ziw=9Z66(WQVYleZNL7)Ky0C&piAvA#hvAyJ=!8B`1U*4k6llKs{>@HHawnoJ$%_lyB z6R>B>HDKR9kp=|#oyY=m@HFXv*`LlHT+wJz-}!)KJ#|ibp*pbW)hjeC zu#4>l1Y{KKq<;htq4@}_elI`?1Qc1`&SVuNIGaUvJ3cQ$hnt{OHzvkU0z?rDbkJ*M z@+6LhhK|t>9NZGGN{37IqlBpOsDCgpXvHUq*5p!xVJxkSqs|b65t4PM#1s=z>tmhm zs78(+zMFfF_8? zuIBn@Xo2d&=8d?6d%z$N(4hbwj+shSYt7KXY_v@AJ|sKInhsnjzDrYZGyAv@9zauY z<=m%XOX(LH7)=F#uUb$BkOEZ}me>^Eki2WO0Rni7y$+$h?#aB_iksKcEK<)Ant_1f z3Fl#TT4xW6qxg3oRg+m0_y{!=F}uq42bAR`U316eUVU?aBXRlaWT8oo52DVe7#4}! zK1l_1jH)NB-dxIK=b)~vu!ldTBgsBGZN?MZfDhQP?n#7YMYt+1QT>tL?Va zEZO2bnztdcjNk~5=1lnv4%huzjtAv)MLxH~x*CszYMiAmQ`@{x2u&d}$={eU2%cv^ zKqRi$&h`cnAl~R!9QK;@gw_ICWZ}( z!-$S{nhjaU3!+PeS)x&l?l~}xZYkXXO{~3kIS@sb2Tsn0P&uYGa0INuIKAu!g7B%2 z_o$zmKgGvXK@mNKN)6d9sKh)ny~|2-yofk2w8ZL+ScI^8v5|b%yAf^qCN0+rtIjLv zG2Zr9e1nN5O|K;(uWAj>ZJ%_D_SKER zEUWHYa(DSV@ZIJ^LV>m@v`e!U`a*{F0Fgwhy4sne5>tWZm^6$JG)HRhmKu>g^)+j6 zh*A*5qGi_`5}3%ke64)sG{;^XY)LOCy)1lD9fA{$6TiJ-C6=c0`d-dkrS9C2o9F_;}i8>C&CeDqhGEC_tI z3+kYa?EZ+4Z{{`hMRPS~7qsJ&`0V2*iwQms)WsBq1ERF?- zDI^Kr>g#~sICRw!DSCKx-#qPesOM293<%AbzI-KKHgb9?TInB4Yi9>bStS;NsZJ4X z4_Hecg0gYhM&Jo2(+4cC^9)I0Re52pMZcNr9L14{L!rygUbX$UpN_k zknsm{7fDGB=5MDNe>?5Tx6>Fwr-6;$(tr~}A0zCf=xMuU)I{zX*af#EUZJ^SW;#1# zh8Ik-RrMH(y`6QV-)V>Fa&%Wf_?AR5m5i~iqNvcQsWNfKc@eQ^ zxNa>h7l)jD#+%FHHP1_`?d^eyS+&Id{e9`2w5rO{BGb6U1$jmVMdQcJ^Q_QI2#o8v zMYD2a3}-g{6W0T(H5GNiW&x&~n=P1zyU(C&a$ZAS(oHI8-*{44ORq;us(qbRs0|S{ zzgc7LfgL<6nv@&eJ5AxA=o-MRuBZ$)48XX_2?3}QwE$?}i0jk^46I7VuV^d<+eYY# z!Dn2sUT`qoQY6aXK|O9hBo*jNpJXs>s2MS;33$3wu1!`iHZ`whe9(#5pcB2f?lD5*SGre_7&S2;DV4h#`>UqFQJfP@ z_&Y4{4!!8%rGG`??)=G-HY~pY9+uze7@58_OF~f;1Mpx6OGtbib>%}Sw~sR;9@D29 zV8-emvygK4&It&37P@$|f^z>vi(LVRK8-QMGw)>xZe@N~#K4__pPM~Wj*UT7 zum*Cq?d!|?!_o30(6HXz`b;K=LFpBxAnq1W2X0S_-qFs#EypC5Fk z%Mc4N@U@_L6rRVur`Htc9zp~0wQpy^iXJ)4kbNM|50$&Y`h26goX+PBTe`^7xMuD1 zU8iQ$<~0S-6RyhZn#DT3fC=|f=ViO_JGmR@u4J9uN7^iq2EIOQJu8*Fd-vVe7-W)^ z$74+I>9JfcC@u<-$*lgy|M}(&^o=y^)J`<@BOa7XhUc3 z;x?Ay(S55c5OB>sP)GOOmFW$XG&$arJ!@~bEoIGzy_%T@M5XSAOyvCJSmjD}RZ^{; zfqInF^B4E$cXz10>CiUG)01zO4M1u z0tN>vfdJpW#d|(oOboDr??=4`2g+X8t%H0$qKtb~2Kt6XkcaWLWUU=syOW_g9NBOOud7@X1YgM z1_D;BfB!W8M?gTDz9`6F_Yk<1B|a?jpauejnnHm9pG&XH#Lb+K$gcO8-F`s8ruwkg zp*{)_@JRfYJ{1mR-HX#fUSkvSJ=O2h`#UWQTw|W<-(t6e+_T9Kx?7P%IW{Yox*3)E zI+D-dQOk!#m_~DD8eo$`PfgeFIkvyi>jNp}9dv4Mjtv+%s z$w8%YElXevmJ8d#QH$a}r@*VwOh9R`F4Far&2uGw|6+a}wcg%bJYH9*S!dG;!GJAf zGYV-#Z5IZUU3*F5daNF~qT#rzf zeO2VP9vh)+eRtuGs*J=eIE$oZe-NG=4P9RGMzq$}Kx`D9lVPL8Cdqj~BgDyPG0YJo zoA$Ao?YP(4aD_qVV$iD(t~XiBsIK+MW>5DFYO^5C3S=#3I|a+xScsv-j1R}6E21Hx0J!M>scujn=Cl9(Ze)TN!8={H@kKpxO5k(0M6cuMN&RR`1z7m6mW_x?$ z49h5u9&4QgiCh37TpM>52YY%dn%*$=))gk}r@#zn6xMzgO`)9rBQ|P6|2egJkjFl zVwpCr@}m)z3~I;e{>qXRf@nQ)J2(4kAjcx1D+^;mAC|hC`<-Snf{jMX37l*Nb^jX8 zb|Pn)k#K<%qV7u2OyU^~3nzdv4cWXrMfNVV25M*cgU~z4QP}H1)}l-K9iOTid!Z3U zR>@9dZgB3GwZNSkO z4)Kd5vJW$k;BsTItHr%1gRmk6MjHve>oyo&Ea{e@MF#rnyy?|(G*iETRQfxOT@!W) z;1U>m9mo7980g4XzQ%$R4)YF{6$T~n2yRu2nY<42Zch0a>N`VO7D@Kd8BR_@K{n!P zHGB!0n|o(wigPx#h@Z4CUya65yxAZOUWtJo3;xjhB+rK=y`m+%Z#~FT0z$`~y~{ym zV!Sr@j_&bm!Lq-v@q%V!QuQ2kKem990?|Nghy5$`X>8|c`b{*@V)g&KS{Uf6heZ#| zwJ~D^9LRbEW=`792ar#Nz0FyMkES$YU*OmS!>g{cr1!lzlJ#Jz2ZJEP*5d@aHl^I_ z@=s5wmVg=iM;phAu)qtlcKYjt5APV^MJN~$#wDvswc+fwq)R%yieZyYU{%1&Y~=#u zJfyOO8#S(Qk$V)zpe-zGvj(@-p2^DLd~czqp?of>?mfyyw1P*lKBhPaFFcPw{H#~A zcuYTQ8#382=OgsiW4Uz5R1KJ{Ds>ppi${U~tYu9IQTvAltzlo;QIYhc4Gs&rWdMF(&l+Ef){^T3qpNOd(5Q|)%tvj(bDR*5VPK@mVxcsnb>f}Ca7R>W8} z%!3}|1uT8Vov-)d@!*%M``11C1u5($XnV@omg1+~w?nh{Y%LI8`ek+-2@OaeK42@W zd~$Fn?(${s$LjU|Bpe;iKZC^dRle=Iq@_7rQ*0%WZB1-|~hQzsKh&wm|%Df#Pe z1fbg!50ssX`tvPnXm9_&cPL0@zi*#ZW^HE#Q9X;tyh?771N0O^;=`3tS4i38?Ke-1 zBKH*E=~}x=2{mVXjS%-uAw%O~&@wP3zkkZl!(VRfa91^tqeVH zf+F5rf|8!rvC%38=TzdlRM6^4-z9MG*vPf&I*Fjp!q}IJ3X^eDmSHbl?NTK^DeMI; z3d)(ohNhbnqVZIfOEpeUk7X4nIIat^fgofPH`p%zGV;dujfO$|8@D3I>&IAq>ng_M z7|03*N|}bA1A25UQ6A4zc7Ut!?P{bMe~swkk?5^!S!E)+ph4vPENrt%F-IHtSz&5q z=3{H!@!A^RoG_o1k3n2KvXfGTIemJ>aLXu+Jj?57VtjC4_29w@L|!aAG~%Xb9=06E zJyC){Ae`(_!spAmeMm{)=DsWNA*c(1)VjsfA@{{9r}k^}J!gwNc3XlbH3ZvInk}-7 z#yxE5Zlul5{lSBMt!Cz}!#c0Vr7>H2({r88A%;Za`zEPf88m|Z4L79%sdbW7%!7Tq zcc=)Q-CKzQ3~{t1Job86+k1M|soYNq&R}k>v96->)z1!*qJKCcVBib@3;;9$w6Gm$ z#%u8l&RHSI?294(_DuWZ9{TO4wy>S;3sc({`YLYrrcS!w2AP8Np8+f`U!;MiDgY~> zfe9)P_S5zi^bq}xX#JfU^RQu7;mh}-phoOSzY$D+w8R6k;{R}EK_71T!qU$6?><@% zb!cB4)bBQX002~T{ikgbREp>u!uRC~e_vJSJ7eWxC;q%*=1&L!MXcW-ev{yD*Ux+i z_HebtA8_e7f9lUq^z$Fop@(P>S0DU=_7V3dv_CQizKi-(uE0aMhf5FrfIBAr3GNTB z*LS#|xbY9+9xlM~1CEFKpW(if%pbx%teyV@Zjk<;;l8uAAHqGX|NH|^i{+o;zSEu` z!ac03`U6f8v^3pghd%`GI$>`4iqBqxL6D@YC4+TYLF1o#O|xruI+Bf82yWA^$Xt|C`AAI=_Pa zBW>iNcK>~!O?7_-`9~_ouOnOQ{R;Ar^oCzYcF_M7}mKb z$Ums#{IaK}(9dG(e(Et8< z|B!I|qt_{Bzd=8w-~J}|zh^J~K!~>aw_K)&%6k}7`~mXp^>5wy<_rBRO7*b$!?4zm z=67DdHUCqP>tXYUA(kJ_OWyphgg*yd9s>M1jPav601)o;lMem}YCLTI=U2?1n=||W c)cp4sP6cTw5JMUOpagx%f}CHUpl^TuA2LqSjsO4v literal 0 HcmV?d00001 diff --git a/docs/system/precharging.rst b/docs/system/precharging.rst index 19d80cbc..1c32e8c2 100644 --- a/docs/system/precharging.rst +++ b/docs/system/precharging.rst @@ -24,8 +24,8 @@ components or weld shutting of the main contactor by limiting the inrush current As shown in :numref:`battery-system-precharging`, a precharge circuit consists of: -* a precharge resistor to limit the inrush current -* a switch or contactor in series to the precharge resistor to +- a precharge resistor to limit the inrush current +- a switch or contactor in series to the precharge resistor to activate/deactivate precharging .. figure:: img/battery-system-precharging.png @@ -42,11 +42,11 @@ Operation modes Basically, a battery system has three operating modes. -* *Off*: All contactors connecting the battery system with the application are +- *Off*: All contactors connecting the battery system with the application are open. -* *On*: All contactors connecting the battery system with the application are +- *On*: All contactors connecting the battery system with the application are closed, i.e., power can be drawn from the system. -* *Precharge*: The application is electrically connected to the battery system. +- *Precharge*: The application is electrically connected to the battery system. The precharging contactor is closed to start the precharging process until the inrush current meets a defined threshold in the maximum specified time. If the application could be not precharged within the expected maximum time, diff --git a/docs/system/system-voltage-and-current-monitoring.rst b/docs/system/system-voltage-and-current-monitoring.rst index 9be5875e..cf37a6ef 100644 --- a/docs/system/system-voltage-and-current-monitoring.rst +++ b/docs/system/system-voltage-and-current-monitoring.rst @@ -76,7 +76,8 @@ Measurements Inside the Battery Pack The strings are depicted in ascending order from right to left starting with string 1 (``S1``) until left-most string m (``Sm``). -Each string consists of ``n`` modules, where every module has its own |slave|. +Each string consists of ``n`` modules, where every module has its own +|bms-slave|. Each string features a current sensor, a string fuse and one or two string contactors. Thus, the following voltages need to be measured in each string: diff --git a/docs/tools/dbc.rst b/docs/tools/dbc.rst index 7755ba7c..5b1d50a3 100644 --- a/docs/tools/dbc.rst +++ b/docs/tools/dbc.rst @@ -6,12 +6,6 @@ DBC File ======== -.. - Comments: - -.. spelling:: - sym - These files describe the CAN interface used by |foxbms|. The .dbc-file has been created using PCAN Symbol Editor |version_pcan_symbol_editor| from symbol file |version_sym_file|. diff --git a/docs/tools/debugger/debug-application.rst b/docs/tools/debugger/debug-application.rst index 54133898..d961853a 100644 --- a/docs/tools/debugger/debug-application.rst +++ b/docs/tools/debugger/debug-application.rst @@ -104,7 +104,7 @@ these toolchains if you have to rely on our support for the setup of the debugger, as we cannot support debugger toolchains that we do not know or cannot recommend. Feel free to contact us, if you need more information. -* The first one is the +- The first one is the `Segger J-Link PLUS `_. A cheaper debugger solution is the `Segger J-Link BASE `_. @@ -112,7 +112,7 @@ cannot recommend. Feel free to contact us, if you need more information. `Ozone `_ is not licensed with the base version of J-Link. -* The second type of debugger are the debugger by +- The second type of debugger are the debugger by `Lauterbach `_. The Lauterbach debugger performs under certain conditions better, but is also more expensive than the J-Link. diff --git a/docs/tools/debugger/debugger-lauterbach.rst b/docs/tools/debugger/debugger-lauterbach.rst index c220be74..2dfb4145 100644 --- a/docs/tools/debugger/debugger-lauterbach.rst +++ b/docs/tools/debugger/debugger-lauterbach.rst @@ -6,13 +6,6 @@ Lauterbach Trace32 Debugger =========================== -.. - Comments: - Mictor is a connector - -.. spelling:: - Mictor - Required Hardware ^^^^^^^^^^^^^^^^^ diff --git a/docs/tools/debugger/debugger-ozone.rst b/docs/tools/debugger/debugger-ozone.rst index b051d1e1..128bfd36 100644 --- a/docs/tools/debugger/debugger-ozone.rst +++ b/docs/tools/debugger/debugger-ozone.rst @@ -6,13 +6,6 @@ Segger Ozone Debugger ===================== -.. - Comments: - Mictor is a connector - -.. spelling:: - Mictor - Required Hardware ^^^^^^^^^^^^^^^^^ @@ -61,13 +54,13 @@ be written to ``fas_assertLocation.pc`` as mentioned in With Ozone, the location of this assertion in the program code can be looked up as follows: -* The variable ``fas_assertLocation`` has to be viewable in ``Global Data`` or +- The variable ``fas_assertLocation`` has to be viewable in ``Global Data`` or in ``Watched Data``. -* It has to be updated (ideally by pausing program execution). -* Unfold ``fas_assertLocation`` so that the members are shown. +- It has to be updated (ideally by pausing program execution). +- Unfold ``fas_assertLocation`` so that the members are shown. Do not unfold ``pc``. -* Right-click on the ``Value`` of ``pc`` and select "Show Value in Source". -* Ozone will show the code location from where the failing assertion originated. +- Right-click on the ``Value`` of ``pc`` and select "Show Value in Source". +- Ozone will show the code location from where the failing assertion originated. Break on an assertion ^^^^^^^^^^^^^^^^^^^^^ @@ -114,5 +107,3 @@ This allows the user to call waf with the ``install_bin`` command in order to build and directly download in the connected target. This feature can be used for integrated tests that have to download the compiled software into a target. -For the user's convenience, the |code| workspace contains a ``Flash:Binary`` -build target that allows to call this action directly from the IDE. diff --git a/docs/tools/gui/gui-implementation.rst b/docs/tools/gui/gui-implementation.rst deleted file mode 100644 index 8be397d0..00000000 --- a/docs/tools/gui/gui-implementation.rst +++ /dev/null @@ -1,22 +0,0 @@ -:orphan: - -.. include:: ./../../macros.txt -.. include:: ./../../units.txt - -.. _FOXBMS_2_GUI_IMPLEMENTATION_DETAILS: - -foxBMS 2 GUI Implementation Details -=================================== - -The implementation details of each GUI component are found in the following -sections: - -.. toctree:: - :maxdepth: 1 - - impl/fgui.rst - impl/entry/entry.rst - impl/log_parser/log_parser.rst - impl/lvac/lvac.rst - impl/misc/misc.rst - impl/workers/workers.rst diff --git a/docs/tools/gui/gui.rst b/docs/tools/gui/gui.rst deleted file mode 100644 index b0709df9..00000000 --- a/docs/tools/gui/gui.rst +++ /dev/null @@ -1,41 +0,0 @@ -.. include:: ./../../macros.txt -.. include:: ./../../units.txt - -.. _FOXBMS_2_GUI: - -foxBMS 2 GUI -============ - -This tool helps to - -- view battery system parameters during operation and control the BMS and -- parse and visualize CAN logs generated by |foxbms|. - -Using the GUI -------------- - -In order to start the GUI run the helper script ``gui.bat`` - -.. code-block:: console - - C:\Users\vulpes\Documents\foxbms-2>tools\gui\gui.bat - -and then the tool selection window opens. - -.. _gui_entry_frame: -.. figure:: ../../../tools/gui/entry-frame.png - :width: 50 % - - The GUI wrapper to start different sub-tools. - -The tool implements two sub-tools that are available under the ``File`` menu. - -.. _gui_entry_frame_select_sub_tool: -.. figure:: ../../../tools/gui/entry-frame-select-sub-tool.png - :width: 50 % - -Implementation --------------- - -The details of the GUI implementation are explained in -:ref:`FOXBMS_2_GUI_IMPLEMENTATION_DETAILS`. diff --git a/docs/tools/gui/impl/entry/entry.rst b/docs/tools/gui/impl/entry/entry.rst deleted file mode 100644 index ab2fd7e8..00000000 --- a/docs/tools/gui/impl/entry/entry.rst +++ /dev/null @@ -1,35 +0,0 @@ -.. include:: ../../../../macros.txt -.. include:: ../../../../units.txt - -.. _SUB_MODULE___ENTRY__: - -Sub Module ``entry`` -==================== - -The entry frame is shown when the module is called, e.g., by -``python -m fgui``. - -.. _details_gui_entry_frame: -.. figure:: ../../../../../tools/gui/entry-frame.png - :width: 50 % - -********** -fgui.entry -********** - -.. automodule:: fgui.entry - :members: - -********************** -fgui.entry.entry_frame -********************** - -.. automodule:: fgui.entry.entry_frame - :members: - -***************** -fgui.entry.helper -***************** - -.. automodule:: fgui.entry.helper - :members: diff --git a/docs/tools/gui/impl/fgui.rst b/docs/tools/gui/impl/fgui.rst deleted file mode 100644 index 605943d3..00000000 --- a/docs/tools/gui/impl/fgui.rst +++ /dev/null @@ -1,21 +0,0 @@ -.. include:: ../../../macros.txt -.. include:: ../../../units.txt - -.. _MAIN_MODULE___FGUI__: - -Main Module ``fgui`` -==================== - -**** -fgui -**** - -.. automodule:: fgui - :members: - -*************** -fgui.foxbms_gui -*************** - -.. automodule:: fgui.foxbms_gui - :members: diff --git a/docs/tools/gui/impl/log_parser/log_parser.rst b/docs/tools/gui/impl/log_parser/log_parser.rst deleted file mode 100644 index 01df25dc..00000000 --- a/docs/tools/gui/impl/log_parser/log_parser.rst +++ /dev/null @@ -1,21 +0,0 @@ -.. include:: ../../../../macros.txt -.. include:: ../../../../units.txt - -.. _SUB_MODULE___LOG_PARSER__: - -Sub Module ``log_parser`` -========================= - -*************** -fgui.log_parser -*************** - -.. automodule:: fgui.log_parser - :members: - -************************** -fgui.log_parser.log_parser -************************** - -.. automodule:: fgui.log_parser.log_parser - :members: diff --git a/docs/tools/gui/impl/lvac/lvac.rst b/docs/tools/gui/impl/lvac/lvac.rst deleted file mode 100644 index e366874b..00000000 --- a/docs/tools/gui/impl/lvac/lvac.rst +++ /dev/null @@ -1,42 +0,0 @@ -.. include:: ../../../../macros.txt -.. include:: ../../../../units.txt - -.. _SUB_MODULE___LVAC__: - -Sub Module ``lvac`` -=================== - -********* -fgui.lvac -********* - -.. automodule:: fgui.lvac - :members: - -******************** -fgui.lvac.lvac_frame -******************** - -.. automodule:: fgui.lvac.lvac_frame - :members: - -************************** -fgui.lvac.default_messages -************************** - -.. automodule:: fgui.lvac.default_messages - :members: - -*************************** -fgui.lvac.cell_temperatures -*************************** - -.. automodule:: fgui.lvac.cell_temperatures - :members: - -*********************** -fgui.lvac.cell_voltages -*********************** - -.. automodule:: fgui.lvac.cell_voltages - :members: diff --git a/docs/tools/gui/impl/misc/misc.rst b/docs/tools/gui/impl/misc/misc.rst deleted file mode 100644 index e0a5257b..00000000 --- a/docs/tools/gui/impl/misc/misc.rst +++ /dev/null @@ -1,70 +0,0 @@ -.. include:: ../../../../macros.txt -.. include:: ../../../../units.txt - -.. _SUB_MODULE___MISC__: - -Sub Module ``misc`` -=================== - -********* -fgui.misc -********* - -.. automodule:: fgui.misc - :members: - -************* -fgui.misc.can -************* - -.. automodule:: fgui.misc.can - :members: - -*************************** -fgui.misc.can.can_constants -*************************** - -.. automodule:: fgui.misc.can.can_constants - :members: - -*************************** -fgui.misc.can.can_helpers -*************************** - -.. automodule:: fgui.misc.can.can_helpers - :members: - -********************* -fgui.misc.gui_helpers -********************* - -.. automodule:: fgui.misc.gui_helpers - :members: - -********************* -fgui.misc.info_dialog -********************* - -.. automodule:: fgui.misc.info_dialog - :members: - -************** -fgui.misc.logo -************** - -.. automodule:: fgui.misc.logo - :members: - -************** -fgui.misc.misc -************** - -.. automodule:: fgui.misc.misc - :members: - -*************************** -fgui.misc.program_arguments -*************************** - -.. automodule:: fgui.misc.program_arguments - :members: diff --git a/docs/tools/gui/impl/workers/workers.rst b/docs/tools/gui/impl/workers/workers.rst deleted file mode 100644 index 6cd17384..00000000 --- a/docs/tools/gui/impl/workers/workers.rst +++ /dev/null @@ -1,35 +0,0 @@ -.. include:: ../../../../macros.txt -.. include:: ../../../../units.txt - -.. _SUB_MODULE___WORKERS__: - -Sub Module ``workers`` -====================== - -************ -fgui.workers -************ - -.. automodule:: fgui.workers - :members: - -**************************** -fgui.workers.can_node_worker -**************************** - -.. automodule:: fgui.workers.can_node_worker - :members: - -**************************** -fgui.workers.gui_sync_worker -**************************** - -.. automodule:: fgui.workers.gui_sync_worker - :members: - -************************ -fgui.workers.send_worker -************************ - -.. automodule:: fgui.workers.send_worker - :members: diff --git a/docs/tools/static-analysis/axivion.rst b/docs/tools/static-analysis/axivion.rst index 5898f0ec..15d9613b 100644 --- a/docs/tools/static-analysis/axivion.rst +++ b/docs/tools/static-analysis/axivion.rst @@ -6,17 +6,6 @@ Axivion Bauhaus Suite ===================== -.. - Comments: - Axivion is the company that builds the Axivion Bauhaus suite - cafeCC is the Axivion compiler - dashserver is the command to run the Axivion Bauhaus Suite dashserver - -.. spelling:: - Axivion - cafeCC - dashserver - Static Analysis tries to uncover potential errors in software by analyzing the source code. In this project one of the tools that are used is the Axivion Bauhaus Suite. @@ -50,9 +39,9 @@ the following command has to be run once inside a terminal (please make sure that the terminal is freshly spawned so that it inherits the previously set environment variables): -.. code-block:: console +.. code-block:: powershell - C:\Users\vulpes\Documents\foxbms-2>tests\axivion\scripts\start_local_analysis.bat + PS C:\Users\vulpes\Documents\foxbms-2> .\fox.ps1 axivion local-analysis Local Builds And Results ------------------------ @@ -61,57 +50,16 @@ Local Builds And Results the terminal afterwards (follow the instructions printed on the terminal to see the results): - .. code-block:: console + .. code-block:: powershell - C:\Users\vulpes\Documents\foxbms-2>tests\axivion\scripts\start_local_dashserver.bat + PS C:\Users\vulpes\Documents\foxbms-2> .\fox.ps1 axivion local-dashserver - Run the following command to update the analysis result (the local dashboard will not be available during the execution of the local analysis): - .. code-block:: console - - C:\Users\vulpes\Documents\foxbms-2>tests\axivion\scripts\start_local_analysis.bat - -VS Code Setup -------------- - -Usage -+++++ - -Running the Tests -^^^^^^^^^^^^^^^^^ - -Press :kbd:`Ctrl + Shift + B` and run the task *axivion analysis*. This task -runs the Axivion analysis script -``tests/axivion/scripts/start_local_analysis.bat``. - -Issues -^^^^^^ - -Open command palette by pressing :kbd:`Ctrl + Shift + P` and search for -*axivion*. - -Local Builds -++++++++++++ - -If VS Code is installed the VS Code's ``settings.json`` is automatically -correctly configured for Axivion usage. - -CI Builds -+++++++++ - -To get CI build results in VS Code add the following configuration to the -VS Code User settings: - -.. code-block:: json + .. code-block:: powershell - "axivion.dashboards": [ - { - "id": "user friendly Dashboard name", - "url": "", - "username": "" - } - ] + PS C:\Users\vulpes\Documents\foxbms-2> .\fox.ps1 axivion local-analysis Advanced Usage -------------- @@ -141,9 +89,9 @@ This can be done through the export feature of `gravis`. For the developer's convenience a helper script has been created. Call -.. code-block:: bash +.. code-block:: powershell - gravis --script tests/axivion/gravis_export_architecture_svg.py + PS C:\Users\vulpes\Documents\foxbms-2> .\fox.ps1 run-program gravis --script tests\axivion\scripts\gravis_export_architecture_svg.py from a shell in the root of the project and the image will be automatically updated. diff --git a/docs/tools/waf-tools/compiler-tool/f_ti_arm_cgt.rst b/docs/tools/waf-tools/compiler-tool/f_ti_arm_cgt.rst index d9dde323..a6a5e574 100644 --- a/docs/tools/waf-tools/compiler-tool/f_ti_arm_cgt.rst +++ b/docs/tools/waf-tools/compiler-tool/f_ti_arm_cgt.rst @@ -6,30 +6,6 @@ TI ARM CGT ========== -.. - Comments: - bld is the waf object - env is an abbreviation for environment - preproc, ppi, ppp are TI ARM CGT flags - nm is a TI ARM CGT tool - -.. spelling:: - bld - crl - hexgen - preproc - ppd - ppi - ppp - rl - nm - env - swi - waflib - config - testbuild - confcache - The tool is located in ``tools/waf-tools``. Tool Documentation diff --git a/docs/tools/waf-tools/compiler-tool/f_ti_arm_helper.rst b/docs/tools/waf-tools/compiler-tool/f_ti_arm_helper.rst index f617f8d6..471bde2f 100644 --- a/docs/tools/waf-tools/compiler-tool/f_ti_arm_helper.rst +++ b/docs/tools/waf-tools/compiler-tool/f_ti_arm_helper.rst @@ -6,15 +6,6 @@ TI ARM CGT Helper Tools ======================= -.. - Comments: - some waf specific words - -.. spelling:: - config - testbuild - confcache - The tool is located in ``tools/waf-tools``. Tool Documentation diff --git a/docs/tools/waf-tools/compiler-tool/f_ti_color_arm_cgt.rst b/docs/tools/waf-tools/compiler-tool/f_ti_color_arm_cgt.rst index 6329338e..5988efd2 100644 --- a/docs/tools/waf-tools/compiler-tool/f_ti_color_arm_cgt.rst +++ b/docs/tools/waf-tools/compiler-tool/f_ti_color_arm_cgt.rst @@ -6,9 +6,6 @@ TI ARM CGT Console Colorizer Tool ================================= -.. spelling:: - Colorizer - The tool is located in ``tools/waf-tools``. Tool Documentation diff --git a/docs/tools/waf-tools/f_axivion.rst b/docs/tools/waf-tools/f_axivion.rst index 87dc63b9..b0d219b1 100644 --- a/docs/tools/waf-tools/f_axivion.rst +++ b/docs/tools/waf-tools/f_axivion.rst @@ -6,18 +6,6 @@ Axivion ======= -.. - Comments: - Axivion is the company that builds the Axivion - bld is the waf object - cafeCC is the Axivion compiler - -.. spelling:: - Axivion - axivion - bld - cafeCC - The tool is located in ``tools/waf-tools``. .. automodule:: f_axivion diff --git a/docs/tools/waf-tools/f_black.rst b/docs/tools/waf-tools/f_black.rst deleted file mode 100644 index 37762ccb..00000000 --- a/docs/tools/waf-tools/f_black.rst +++ /dev/null @@ -1,27 +0,0 @@ -.. include:: ./../../macros.txt -.. include:: ./../../units.txt - -.. _WAF_TOOL_BLACK: - -Black -===== - -.. - Comments: - py is the Python file extension and not properly recognized by the spellchecker - pyproject is the configuration file of black - bld is the waf object - -.. spelling:: - py - pyproject - bld - -The tool is located in ``tools/waf-tools``. - -Tool Documentation ------------------- - -.. automodule:: f_black - :members: - :show-inheritance: diff --git a/docs/tools/waf-tools/f_bootstrap_library_project.rst b/docs/tools/waf-tools/f_bootstrap_library_project.rst index 7984d3b9..9c4a1d7f 100644 --- a/docs/tools/waf-tools/f_bootstrap_library_project.rst +++ b/docs/tools/waf-tools/f_bootstrap_library_project.rst @@ -6,11 +6,6 @@ Bootstrap Library Project ========================= -.. - Comments: - -.. spelling:: - The tool is located in ``tools/waf-tools``. Tool Documentation diff --git a/docs/tools/waf-tools/f_check_db_vars.rst b/docs/tools/waf-tools/f_check_db_vars.rst index ce8d0fe1..4575987d 100644 --- a/docs/tools/waf-tools/f_check_db_vars.rst +++ b/docs/tools/waf-tools/f_check_db_vars.rst @@ -6,15 +6,6 @@ Check DB Vars ============= -.. - Comments: - py is the Python file extension and not properly recognized by the spellchecker - bld is the waf object - -.. spelling:: - py - bld - The tool is located in ``tools/waf-tools``. Tool Documentation diff --git a/docs/tools/waf-tools/f_clang_format.rst b/docs/tools/waf-tools/f_clang_format.rst deleted file mode 100644 index c8f64b31..00000000 --- a/docs/tools/waf-tools/f_clang_format.rst +++ /dev/null @@ -1,16 +0,0 @@ -.. include:: ./../../macros.txt -.. include:: ./../../units.txt - -.. _WAF_TOOL_CLANG_FORMAT: - -Clang Format -============ - -The tool is located in ``tools/waf-tools``. - -Tool Documentation ------------------- - -.. automodule:: f_clang_format - :members: - :show-inheritance: diff --git a/docs/tools/waf-tools/f_git_hooks.rst b/docs/tools/waf-tools/f_git_hooks.rst deleted file mode 100644 index 4cc98bbe..00000000 --- a/docs/tools/waf-tools/f_git_hooks.rst +++ /dev/null @@ -1,20 +0,0 @@ -.. include:: ./../../macros.txt -.. include:: ./../../units.txt - -.. _WAF_TOOL_GIT_HOOKS: - -|git| Hooks -=========== - -The tool is located in ``tools/waf-tools``. - -For skipping the pre-commit |git| hook in certain cases, please refer to the -`documentation of git commit `_. -(Use ``--no-verify`` with ``git commit``.) - -Tool Documentation ------------------- - -.. automodule:: f_git_hooks - :members: - :show-inheritance: diff --git a/docs/tools/waf-tools/f_guidelines.rst b/docs/tools/waf-tools/f_guidelines.rst deleted file mode 100644 index 85ae282e..00000000 --- a/docs/tools/waf-tools/f_guidelines.rst +++ /dev/null @@ -1,32 +0,0 @@ -.. include:: ./../../macros.txt -.. include:: ./../../units.txt - -.. _WAF_TOOL_GUIDELINES: - -Guidelines -========== - -.. - Comments: - bld is the waf object - -.. spelling:: - bld - endif - -The tool is located in ``tools/waf-tools``. - -Tool Documentation ------------------- - -.. automodule:: f_guidelines - :members: - -Test Documentation ------------------- - -The unit tests of the module are implemented in -``tests/scripts/waf-tools/f_hcg/test_f_guidelines.py`` - -.. automodule:: test_f_guidelines - :members: diff --git a/docs/tools/waf-tools/f_hcg.rst b/docs/tools/waf-tools/f_hcg.rst index 6102da40..206f4b14 100644 --- a/docs/tools/waf-tools/f_hcg.rst +++ b/docs/tools/waf-tools/f_hcg.rst @@ -14,16 +14,6 @@ HALCoGen to use a pre-generated HAL instead of generating it in the compilation step in :ref:`HOW_TO_USE_GENERATED_SOURCES_FROM_HALCOGEN`. -.. - Comments: - bld is the waf object - hcg and dil are file extensions for HALCoGen projects - -.. spelling:: - bld - hcg - dil - The tool is located in ``tools/waf-tools``. .. automodule:: f_hcg diff --git a/docs/tools/waf-tools/f_j_flash.rst b/docs/tools/waf-tools/f_j_flash.rst index a2b6fe57..7e17cee9 100644 --- a/docs/tools/waf-tools/f_j_flash.rst +++ b/docs/tools/waf-tools/f_j_flash.rst @@ -6,13 +6,6 @@ J-Flash ======= -.. - Comments: - Segger is the company that builds Ozone and J-Link - -.. spelling:: - Segger - The tool is located in ``tools/waf-tools``. Tool Documentation diff --git a/docs/tools/waf-tools/f_lauterbach.rst b/docs/tools/waf-tools/f_lauterbach.rst index 7721458b..e8152f0e 100644 --- a/docs/tools/waf-tools/f_lauterbach.rst +++ b/docs/tools/waf-tools/f_lauterbach.rst @@ -6,13 +6,6 @@ Lauterbach ========== -.. - Comments: - Lauterbach is the company that builds Lauterbach debugger - -.. spelling:: - Lauterbach - The tool is located in ``tools/waf-tools``. Tool Documentation diff --git a/docs/tools/waf-tools/f_miniconda_env.rst b/docs/tools/waf-tools/f_miniconda_env.rst deleted file mode 100644 index 3f5d33db..00000000 --- a/docs/tools/waf-tools/f_miniconda_env.rst +++ /dev/null @@ -1,24 +0,0 @@ -.. include:: ./../../macros.txt -.. include:: ./../../units.txt - -.. _WAF_TOOL_MINICONDA_ENVIRONMENT: - -Miniconda Environment -===================== - -.. - Comments: - env is an abbreviation for environment - bld is the waf object - -.. spelling:: - bld - env - -The tool is located in ``tools/waf-tools``. - -Tool Documentation ------------------- - -.. automodule:: f_miniconda_env - :members: diff --git a/docs/tools/waf-tools/f_ozone.rst b/docs/tools/waf-tools/f_ozone.rst index 6bf46978..4653e14c 100644 --- a/docs/tools/waf-tools/f_ozone.rst +++ b/docs/tools/waf-tools/f_ozone.rst @@ -6,13 +6,6 @@ Ozone ===== -.. - Comments: - Segger is the company that builds Ozone - -.. spelling:: - Segger - The tool is located in ``tools/waf-tools``. Tool Documentation diff --git a/docs/tools/waf-tools/f_pylint.rst b/docs/tools/waf-tools/f_pylint.rst deleted file mode 100644 index 13b6aa79..00000000 --- a/docs/tools/waf-tools/f_pylint.rst +++ /dev/null @@ -1,25 +0,0 @@ -.. include:: ./../../macros.txt -.. include:: ./../../units.txt - -.. _WAF_TOOL_PYLINT: - -Pylint -====== - -.. - Comments: - bld is the waf object - py is the Python file extension - -.. spelling:: - bld - py - -The tool is located in ``tools/waf-tools``. - -Tool Documentation ------------------- - -.. automodule:: f_pylint - :members: - :show-inheritance: diff --git a/docs/tools/waf-tools/f_sphinx_build.rst b/docs/tools/waf-tools/f_sphinx_build.rst index 6177ed64..d5e95959 100644 --- a/docs/tools/waf-tools/f_sphinx_build.rst +++ b/docs/tools/waf-tools/f_sphinx_build.rst @@ -6,16 +6,6 @@ Sphinx ====== -.. - Comments: - py is the Python file extension and not properly recognized by the spellchecker - linkcheck is the name of the builder - -.. spelling:: - conf - py - linkcheck - The tool is located in ``tools/waf-tools``. Tool Documentation diff --git a/docs/tools/waf-tools/f_unit_test.rst b/docs/tools/waf-tools/f_unit_test.rst index cfb32ae3..2590c996 100644 --- a/docs/tools/waf-tools/f_unit_test.rst +++ b/docs/tools/waf-tools/f_unit_test.rst @@ -6,22 +6,6 @@ Unit Test ========= -.. - Comments: - gcc is the abbreviation for "GNU Compiler Collection" - gcov is a source code coverage analysis tool - py is the Python file extension and not properly recognized by the spellchecker - linkcheck is the name of the builder - -.. spelling:: - conf - env - gcc - gcov - gcovr - py - linkcheck - The tool is located in ``tools/waf-tools``. Tool Documentation diff --git a/docs/tools/waf-tools/waf-tools.rst b/docs/tools/waf-tools/waf-tools.rst index b047705b..73cfdbda 100644 --- a/docs/tools/waf-tools/waf-tools.rst +++ b/docs/tools/waf-tools/waf-tools.rst @@ -21,18 +21,12 @@ Waf Tools Implementation Documentation ./ti-arm-compiler-tools ./f_axivion.rst - ./f_black.rst ./f_bootstrap_library_project.rst ./f_check_db_vars.rst - ./f_clang_format.rst - ./f_git_hooks.rst - ./f_guidelines.rst ./f_hcg.rst - ./f_miniconda_env.rst ./f_ozone.rst ./f_lauterbach.rst ./f_j_flash.rst - ./f_pylint.rst ./f_sphinx_build.rst ./f_unit_test.rst ./f_vscode.rst diff --git a/docs/units.txt b/docs/units.txt index 3b0baca2..02c3d746 100644 --- a/docs/units.txt +++ b/docs/units.txt @@ -11,6 +11,7 @@ .. |ms| replace:: ms .. |Ohm| replace:: :math:`{\Omega}` .. |kOhm| replace:: :math:`{k\Omega}` +.. |MOhm| replace:: :math:`{M\Omega}` .. |g| replace:: g .. |W| replace:: W .. |V| replace:: V diff --git a/tools/gui/gui.bat b/fox.bat similarity index 63% rename from tools/gui/gui.bat rename to fox.bat index 70b77375..8f3c901c 100644 --- a/tools/gui/gui.bat +++ b/fox.bat @@ -1,4 +1,4 @@ -@REM Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +@REM Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. @REM All rights reserved. @REM @REM SPDX-License-Identifier: BSD-3-Clause @@ -36,26 +36,51 @@ @REM - "This product is derived from foxBMS®" @SETLOCAL EnableExtensions EnableDelayedExpansion -@SET CONDA_BASE_ENVIRONMENT_ACTIVATE_SCRIPT="" -@CALL %~dp0\..\utils\cmd\find_base_conda.bat -@CALL %~dp0\..\utils\cmd\add_pcan_to_path.bat +@PUSHD %~dp0 + +@SET "ENV_NAME=2024-08-pale-fox" + +@SET "FOXBMS_PYTHON_ENV_DIRECTORY_USER=%USERPROFILE%\foxbms-envs\%ENV_NAME%" +@SET "FOXBMS_PYTHON_ENV_DIRECTORY_ROOT=C:\foxbms-envs\%ENV_NAME%" + +@SET "FOXBMS_PYTHON_ENV_DIRECTORY=%FOXBMS_PYTHON_ENV_DIRECTORY_USER%" + +@REM Prefer the user installation -@IF %CONDA_BASE_ENVIRONMENT_ACTIVATE_SCRIPT%=="" ( +@IF NOT EXIST %FOXBMS_PYTHON_ENV_DIRECTORY_USER% ( + @SET "FOXBMS_PYTHON_ENV_DIRECTORY=%FOXBMS_PYTHON_ENV_DIRECTORY_ROOT%" +) + +@IF NOT EXIST %FOXBMS_PYTHON_ENV_DIRECTORY% ( + @ECHO '%FOXBMS_PYTHON_ENV_DIRECTORY_USER%' and + @ECHO '%FOXBMS_PYTHON_ENV_DIRECTORY_ROOT%' do not exist. + @ECHO One of both must be available. See Installation instructions in + @ECHO '%~dp0\INSTALL.md' @EXIT /b 1 ) -@CALL %CONDA_BASE_ENVIRONMENT_ACTIVATE_SCRIPT% %CONDA_DEVELOPMENT_ENVIRONMENT_NAME% +@CALL %FOXBMS_PYTHON_ENV_DIRECTORY%\Scripts\activate.bat -@PUSHD %~dp0 -@SET PYEXE=python -@WHERE %PYEXE% 1>NUL 2>NUL -@IF %ERRORLEVEL% neq 0 SET PYEXE=py -@%PYEXE% -m fgui %* -vvvv -@POPD +@REM If the activation script failed, exit with error @IF %ERRORLEVEL% NEQ 0 ( + @ECHO The activation script of the environment is missing. @EXIT /b %ERRORLEVEL% -) ELSE ( - @conda deactivate +) + +@REM Check if Python executable exists +@SET PYTHON_EXE=python +@WHERE %PYTHON_EXE% 1>NUL 2>NUL +@IF %ERRORLEVEL% NEQ 0 ( @EXIT /b %ERRORLEVEL% ) + + +@REM @REM The environment is setup, so let's run the application +@%PYTHON_EXE% "%~dp0\fox.py" %* + +@REM if fox.py failed, exit with this error +@IF %ERRORLEVEL% NEQ 0 ( + @EXIT /b %ERRORLEVEL% +) +@POPD diff --git a/fox.ps1 b/fox.ps1 new file mode 100755 index 00000000..78dc1181 --- /dev/null +++ b/fox.ps1 @@ -0,0 +1,111 @@ +#!/usr/bin/env pwsh +# +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# All rights reserved. +# +# SPDX-License-Identifier: BSD-3-Clause +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# We kindly request you to use one or more of the following phrases to refer to +# foxBMS in your hardware, software, documentation or advertising materials: +# +# - "This product uses parts of foxBMS®" +# - "This product includes parts of foxBMS®" +# - "This product is derived from foxBMS®" + +# Make all error terminating errors +$ErrorActionPreference = "STOP" + +Push-Location "$PSScriptRoot" + +$env:ENV_NAME = "2024-08-pale-fox" +$env:ENV_DIR = "foxbms-envs" + +if ($IsLinux) { + $env:FOXBMS_PYTHON_ENV_DIRECTORY_USER = "$env:HOME/$env:ENV_DIR/$env:ENV_NAME" + $env:FOXBMS_PYTHON_ENV_DIRECTORY_ROOT = "/opt/$env:ENV_DIR/$env:ENV_NAME" + $env:FOXBMS_PYTHON_ACTIVATION_SCRIPT_REL_PATH = "bin/activate" +} +elseif ($IsMacOS) { + Write-Error "MacOS is currently not supported." + exit 1 +} +elseif ($IsWindows) { + $env:FOXBMS_PYTHON_ENV_DIRECTORY_USER = "$env:USERPROFILE\$env:ENV_DIR\$env:ENV_NAME" + $env:FOXBMS_PYTHON_ENV_DIRECTORY_ROOT = "C:\$env:ENV_DIR\$env:ENV_NAME" + $env:FOXBMS_PYTHON_ACTIVATION_SCRIPT_REL_PATH = "Scripts\activate.ps1" +} +else { + # assume Windows anyway + $env:FOXBMS_PYTHON_ENV_DIRECTORY_USER = "$env:USERPROFILE\$env:ENV_DIR\$env:ENV_NAME" + $env:FOXBMS_PYTHON_ENV_DIRECTORY_ROOT = "C:\$env:ENV_DIR\$env:ENV_NAME" + $env:FOXBMS_PYTHON_ACTIVATION_SCRIPT_REL_PATH = "Scripts\activate.ps1" +} + +$env:FOXBMS_PYTHON_ENV_DIRECTORY = "$env:FOXBMS_PYTHON_ENV_DIRECTORY_USER" + +# if the user env directory does not exist, use root +if (-not (Test-Path -Path "$env:FOXBMS_PYTHON_ENV_DIRECTORY_USER")) { + $env:FOXBMS_PYTHON_ENV_DIRECTORY = "$env:FOXBMS_PYTHON_ENV_DIRECTORY_ROOT" +} + +$env:FOXBMS_PYTHON_ACTIVATION_SCRIPT = Join-Path "$env:FOXBMS_PYTHON_ENV_DIRECTORY" "$env:FOXBMS_PYTHON_ACTIVATION_SCRIPT_REL_PATH" +# check if the activation script exists +if (-not (Test-Path -Path "$env:FOXBMS_PYTHON_ACTIVATION_SCRIPT")) { + Write-Error "Could not find expected Python venv '$env:ENV_NAME'. Exiting..." + exit 1 +} + +&"$env:FOXBMS_PYTHON_ACTIVATION_SCRIPT" + +try { + get-command "python" | out-null +} +catch { + deactivate + Pop-Location + exit 1 +} + +if ($args.Contains("gui")) { + pythonw "$PSScriptRoot\fox.py" "gui" + if ($LastExitCode -ne 0) { + deactivate + Pop-Location + exit 1 + } +} +else { + python "$PSScriptRoot\fox.py" $args + if ($LastExitCode -ne 0) { + deactivate + Pop-Location + exit 1 + } +} +deactivate +Pop-Location diff --git a/fox.py b/fox.py new file mode 100755 index 00000000..ead3a937 --- /dev/null +++ b/fox.py @@ -0,0 +1,65 @@ +#!/usr/bin/env python3 +# +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# All rights reserved. +# +# SPDX-License-Identifier: BSD-3-Clause +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# We kindly request you to use one or more of the following phrases to refer to +# foxBMS in your hardware, software, documentation or advertising materials: +# +# - "This product uses parts of foxBMS®" +# - "This product includes parts of foxBMS®" +# - "This product is derived from foxBMS®" + + +"""TODO""" + +import sys +from pathlib import Path + +expected_cwd = Path(__file__).parent +if Path.cwd() != expected_cwd: + sys.exit( + f"{__file__} needs to be run in the root of the repository ({expected_cwd})." + ) + +# pylint: disable-next=wrong-import-position +from cli.cli import main # noqa: E402 + +if sys.version_info[0] != 3: + sys.exit(f"Running '{__file__}' requires Python3.") + + +def wrapper(): + """Wrapper script to call the cli application""" + main.main() + + +if __name__ == "__main__": + wrapper() diff --git a/fox.sh b/fox.sh new file mode 100755 index 00000000..ebd6eb3a --- /dev/null +++ b/fox.sh @@ -0,0 +1,127 @@ +#!/usr/bin/env bash +# +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# All rights reserved. +# +# SPDX-License-Identifier: BSD-3-Clause +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# We kindly request you to use one or more of the following phrases to refer to +# foxBMS in your hardware, software, documentation or advertising materials: +# +# - "This product uses parts of foxBMS®" +# - "This product includes parts of foxBMS®" +# - "This product is derived from foxBMS®" + +set -e + +SCRIPTDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" + +ENV_NAME="2024-08-pale-fox" +# MacOS +if [ "$(uname)" == "Darwin" ]; then + echo "MacOS is currently not supported." + exit 1 +# Linux +elif [ "$(printf "%s" "$(uname -s)" | cut -c 1-5)" == "Linux" ]; then + pushd "$SCRIPTDIR" > /dev/null + FOXBMS_PYTHON_ENV_DIRECTORY_USER="$HOME/foxbms-envs/${ENV_NAME}" + FOXBMS_PYTHON_ENV_DIRECTORY_ROOT="/opt/foxbms-envs/${ENV_NAME}" + + FOXBMS_PYTHON_ENV_DIRECTORY="$FOXBMS_PYTHON_ENV_DIRECTORY_USER" + + # Prefer the user installation + if [ ! -d "$FOXBMS_PYTHON_ENV_DIRECTORY_USER" ]; then + FOXBMS_PYTHON_ENV_DIRECTORY="$FOXBMS_PYTHON_ENV_DIRECTORY_ROOT" + fi + + if [ ! -d "$FOXBMS_PYTHON_ENV_DIRECTORY" ]; then + echo "'$FOXBMS_PYTHON_ENV_DIRECTORY_USER' and" + echo "'$FOXBMS_PYTHON_ENV_DIRECTORY_ROOT' do not exist." + echo "One of both must be available. See Installation instructions in" + echo "'$SCRIPTDIR/INSTALL.md'" + exit 1 + fi + + # shellcheck source=/dev/null + source "$FOXBMS_PYTHON_ENV_DIRECTORY/bin/activate" + + # Check if Python executable exists + if ! command -v python &> /dev/null + then + echo "Could not find python executable" + exit 1 + fi + + python "${SCRIPTDIR}/fox.py" "$@" || rc="$?" + deactivate + popd > /dev/null + exit $((rc)) +# Windows +elif [ "$(printf "%s" "$(uname -s)" | cut -c 1-9)" == "CYGWIN_NT" ]; then + echo "Cygwin is not supported." + exit 1 +elif [ "$(printf "%s" "$(uname -s)" | cut -c 1-10)" == "MINGW32_NT" ]; then + echo "32bit Windows is not supported." + exit 1 +elif [ "$(printf "%s" "$(uname -s)" | cut -c 1-10)" == "MINGW64_NT" ] || [ "$(printf "%s" "$(uname -s)" | cut -c 1-7)" == "MSYS_NT" ] ; then + pushd "$SCRIPTDIR" > /dev/null + UNIX_USERPROFILE="${USERPROFILE//\\//}" # replace backslashes with forward slashes + UNIX_USERPROFILE="${UNIX_USERPROFILE//\:/}" # remove drive colon + FOXBMS_PYTHON_ENV_DIRECTORY_USER="/${UNIX_USERPROFILE}/foxbms-envs/${ENV_NAME}" + FOXBMS_PYTHON_ENV_DIRECTORY_ROOT="/C/foxbms-envs/${ENV_NAME}" + + FOXBMS_PYTHON_ENV_DIRECTORY="$FOXBMS_PYTHON_ENV_DIRECTORY_USER" + + # Prefer the user installation + if [ ! -d "$FOXBMS_PYTHON_ENV_DIRECTORY_USER" ]; then + FOXBMS_PYTHON_ENV_DIRECTORY="$FOXBMS_PYTHON_ENV_DIRECTORY_ROOT" + fi + + if [ ! -d "$FOXBMS_PYTHON_ENV_DIRECTORY" ]; then + echo "'$FOXBMS_PYTHON_ENV_DIRECTORY_USER' and" + echo "'$FOXBMS_PYTHON_ENV_DIRECTORY_ROOT' do not exist." + echo "One of both must be available. See Installation instructions in" + echo "'$SCRIPTDIR/INSTALL.md'" + exit 1 + fi + + # shellcheck source=/dev/null + source "$FOXBMS_PYTHON_ENV_DIRECTORY/Scripts/activate" + + # Check if Python executable exists + if ! command -v python &> /dev/null + then + echo "Could not find python executable" + exit 1 + fi + + python "${SCRIPTDIR}/fox.py" "$@" || rc="$?" + deactivate + popd > /dev/null + exit $((rc)) +fi diff --git a/hardware/README.md b/hardware/README.md index 96dd90e1..9a6e34d3 100644 --- a/hardware/README.md +++ b/hardware/README.md @@ -1,7 +1,7 @@ # Hardware The hardware designs of foxBMS 2 can be found at the following address: -https://iisb-foxbms.iisb.fraunhofer.de/foxbms/gen2/hardware/release + The hardware design files belonging to this release are: @@ -11,7 +11,7 @@ The hardware design files belonging to this release are: | Item | Version | File | |-------------------------------|---------|-------------------------------------------------------------------------------------------------------------------------------------------------| -| TI BMS-Master | 1.1.5 | [TI TMS570LC4357 Master v1.1.3](https://iisb-foxbms.iisb.fraunhofer.de/foxbms/gen2/hardware/release/master-v1.1.5.zip) | +| TI BMS-Master | 1.1.5 | [TI TMS570LC4357 Master v1.1.5](https://iisb-foxbms.iisb.fraunhofer.de/foxbms/gen2/hardware/release/master-v1.1.5.zip) | ## BMS-Interfaces @@ -27,7 +27,6 @@ The hardware design files belonging to this release are: |-------------------------------|-----------|-----------------------------------------------------------------------------------------------------------------------------------------------| | NXP Interface (MC33664) | 1.0.2 | [NXP MC33664 Interface v1.0.2](https://iisb-foxbms.iisb.fraunhofer.de/foxbms/gen2/hardware/release/interface-nxp-mc33664-v1.0.2.zip) | - ### MAXIM-based BMS-Interfaces | Item | Version | File | diff --git a/ide.bat b/ide.bat deleted file mode 100644 index 6887421d..00000000 --- a/ide.bat +++ /dev/null @@ -1,96 +0,0 @@ -@REM Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -@REM All rights reserved. -@REM -@REM SPDX-License-Identifier: BSD-3-Clause -@REM -@REM Redistribution and use in source and binary forms, with or without -@REM modification, are permitted provided that the following conditions are met: -@REM -@REM 1. Redistributions of source code must retain the above copyright notice, this -@REM list of conditions and the following disclaimer. -@REM -@REM 2. Redistributions in binary form must reproduce the above copyright notice, -@REM this list of conditions and the following disclaimer in the documentation -@REM and/or other materials provided with the distribution. -@REM -@REM 3. Neither the name of the copyright holder nor the names of its -@REM contributors may be used to endorse or promote products derived from -@REM this software without specific prior written permission. -@REM -@REM THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -@REM AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -@REM IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -@REM DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -@REM FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -@REM DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -@REM SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -@REM CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -@REM OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -@REM OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -@REM -@REM We kindly request you to use one or more of the following phrases to refer to -@REM foxBMS in your hardware, software, documentation or advertising materials: -@REM -@REM - "This product uses parts of foxBMS®" -@REM - "This product includes parts of foxBMS®" -@REM - "This product is derived from foxBMS®" - -@SETLOCAL EnableExtensions EnableDelayedExpansion - -@TITLE foxBMS Development Console - -@CALL %~dp0\tools\utils\cmd\find_git.bat - -@IF DEFINED GIT_DIR ( - @set "PATH=%GIT_DIR%;%PATH%" -) - -@FOR /F "usebackq tokens=*" %%A in ("%~dp0\conf\env\paths_win32.txt") do @( - @IF exist %%A ( - @CALL set "NewPath=%%NewPath%%;%%A" - ) -) -@IF DEFINED NewPath ( - @SET "PATH=%NewPath:~1%;%PATH%" -) - -@SET CONDA_BASE_ENVIRONMENT_ACTIVATE_SCRIPT="" -@CALL %~dp0\tools\utils\cmd\find_base_conda.bat - -@IF %CONDA_BASE_ENVIRONMENT_ACTIVATE_SCRIPT%=="" ( - pause - @EXIT /b 1 -) - -@CALL %CONDA_BASE_ENVIRONMENT_ACTIVATE_SCRIPT% %CONDA_DEVELOPMENT_ENVIRONMENT_NAME% - -@REM Check for VS Code -@CALL %~dp0\tools\utils\cmd\find_vs-code.bat -@IF NOT DEFINED VS_CODE @( - @ECHO Could not find VS Code. - @ECHO VS Code can be downloaded at https://code.visualstudio.com/. - @PAUSE - @EXIT /b 2 -) -@IF %VS_CODE%=="" @( - @ECHO Could not find VS Code. - @ECHO VS Code can be downloaded at https://code.visualstudio.com/. - @PAUSE - @EXIT /b 1 -) - -@IF NOT EXIST %~dp0\.vscode\settings.json ( - @ECHO VS code settings do not exist. - @ECHO Creating VS Code setup^.^.^. - @%~dp0\waf configure - @ECHO Done^.^.^. -) - -@PUSHD %~dp0 -@start "foxBMS Development" /b %VS_CODE% . -@IF %ERRORLEVEL% NEQ 0 ( - @EXIT /b %ERRORLEVEL% -) ELSE ( - @conda deactivate -) -@POPD diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 00000000..23f45631 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,732 @@ +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# All rights reserved. +# +# SPDX-License-Identifier: BSD-3-Clause +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# We kindly request you to use one or more of the following phrases to refer to +# foxBMS in your hardware, software, documentation or advertising materials: +# +# - "This product uses parts of foxBMS®" +# - "This product includes parts of foxBMS®" +# - "This product is derived from foxBMS®" + +[tool.pyright] +reportMissingImports = false + +[tool.ruff] +# Exclude a variety of commonly ignored directories. +exclude = [ + ".bzr", + ".direnv", + ".eggs", + ".git", + ".git-rewrite", + ".hg", + ".ipynb_checkpoints", + ".mypy_cache", + ".nox", + ".pants.d", + ".pyenv", + ".pytest_cache", + ".pytype", + ".ruff_cache", + ".svn", + ".tox", + ".venv", + ".vscode", + "__pypackages__", + "_build", + "buck-out", + "build", + "dist", + "node_modules", + "site-packages", + "venv", +] + +# Same as Black. +line-length = 88 +indent-width = 4 + +# Assume Python 3.8 +target-version = "py38" + +[tool.mypy] +disable_error_code = "import-untyped" # TODO +# strict = true # TODO + +[tool.coverage.run] +branch = true + +[tool.coverage.report] +fail_under = 48 +exclude_also = ["if __name__ == .__main__.:"] + +[tool.ruff.lint] +# Enable Pyflakes (`F`) and a subset of the pycodestyle (`E`) codes by default. +# Unlike Flake8, Ruff doesn't enable pycodestyle warnings (`W`) or +# McCabe complexity (`C901`) by default. +select = ["E4", "E7", "E9", "F"] +ignore = [] + +# Allow fix for all enabled rules (when `--fix`) is provided. +fixable = ["ALL"] +unfixable = [] + +# Allow unused variables when underscore-prefixed. +dummy-variable-rgx = "^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$" + +[tool.ruff.format] +# Like Black, use double quotes for strings. +quote-style = "double" + +# Like Black, indent with spaces, rather than tabs. +indent-style = "space" + +# Like Black, respect magic trailing commas. +skip-magic-trailing-comma = false + +# Like Black, automatically detect the appropriate line ending. +line-ending = "auto" + +# Enable auto-formatting of code examples in docstrings. Markdown, +# reStructuredText code/literal blocks and doctests are all supported. +# +# This is currently disabled by default, but it is planned for this +# to be opt-out in the future. +docstring-code-format = false + +# Set the line length limit used when formatting code snippets in +# docstrings. +# +# This only has an effect when the `docstring-code-format` setting is +# enabled. +docstring-code-line-length = "dynamic" + +[tool.pylint.main] +# Analyse import fallback blocks. This can be used to support both Python 2 and 3 +# compatible code, which means that the block might have code that exists only in +# one or another interpreter, leading to false positives when analysed. +# analyse-fallback-blocks = + +# Clear in-memory caches upon conclusion of linting. Useful if running pylint in +# a server-like mode. +# clear-cache-post-run = + +# Always return a 0 (non-error) status code, even if lint errors are found. This +# is primarily useful in continuous integration scripts. +# exit-zero = + +# A comma-separated list of package or module names from where C extensions may +# be loaded. Extensions are loading into the active Python interpreter and may +# run arbitrary code. +extension-pkg-allow-list = "axivion" + +# A comma-separated list of package or module names from where C extensions may +# be loaded. Extensions are loading into the active Python interpreter and may +# run arbitrary code. (This is an alternative name to extension-pkg-allow-list +# for backward compatibility.) +# extension-pkg-whitelist = + +# Return non-zero exit code if any of these messages/categories are detected, +# even if score is above --fail-under value. Syntax same as enable. Messages +# specified are enabled, while categories only check already-enabled messages. +# fail-on = + +# Specify a score threshold under which the program will exit with error. +fail-under = 10 + +# Interpret the stdin as a python script, whose filename needs to be passed as +# the module_or_package argument. +# from-stdin = + +# Files or directories to be skipped. They should be base names, not paths. +ignore = ["CVS", "waflib"] + +# Add files or directories matching the regular expressions patterns to the +# ignore-list. The regex matches against paths and can be in Posix or Windows +# format. Because '\\' represents the directory delimiter on Windows systems, it +# can't be used as an escape character. +# ignore-paths = + +# Files or directories matching the regular expression patterns are skipped. The +# regex matches against base names, not paths. The default value ignores Emacs +# file locks +ignore-patterns = ["^\\.#"] + +# List of module names for which member attributes should not be checked and will +# not be imported (useful for modules/projects where namespaces are manipulated +# during runtime and thus existing member attributes cannot be deduced by static +# analysis). It supports qualified module names, as well as Unix pattern +# matching. +# ignored-modules = + +# Python code to execute, usually for sys.path manipulation such as +# pygtk.require(). +init-hook = 'import sys; sys.path.extend(["cli", "tools/waf3-2.0.22-1241519b19b496207abef1f72bbf61c2", "tools/.waf3-2.0.22-1241519b19b496207abef1f72bbf61c2", "tests/hil"])' + +# Use multiple processes to speed up Pylint. Specifying 0 will auto-detect the +# number of processors available to use, and will cap the count on Windows to +# avoid hangs. +jobs = 1 + +# Control the amount of potential inferred values when inferring a single object. +# This can help the performance when dealing with large functions or complex, +# nested conditions. +limit-inference-results = 100 + +# List of plugins (as comma separated values of python module names) to load, +# usually to register additional checkers. +# load-plugins = + +# Pickle collected data for later comparisons. +persistent = true + +# Resolve imports to .pyi stubs if available. May reduce no-member messages and +# increase not-an-iterable messages. +# prefer-stubs = + +# Minimum Python version to use for version dependent checks. Will default to the +# version used to run pylint. +py-version = "3.12" + +# Discover python modules and packages in the file system subtree. +# recursive = + +# Add paths to the list of the source roots. Supports globbing patterns. The +# source root is an absolute path or a path relative to the current working +# directory used to determine a package namespace for modules located under the +# source root. +# source-roots = + +# When enabled, pylint would attempt to guess common misconfiguration and emit +# user-friendly hints instead of false-positive error messages. +suggestion-mode = true + +# Allow loading of arbitrary C extensions. Extensions are imported into the +# active Python interpreter and may run arbitrary code. +# unsafe-load-any-extension = + +[tool.pylint.basic] +# Naming style matching correct argument names. +argument-naming-style = "snake_case" + +# Regular expression matching correct argument names. Overrides argument-naming- +# style. If left empty, argument names will be checked with the set naming style. +# argument-rgx = + +# Naming style matching correct attribute names. +attr-naming-style = "snake_case" + +# Regular expression matching correct attribute names. Overrides attr-naming- +# style. If left empty, attribute names will be checked with the set naming +# style. +# attr-rgx = + +# Bad variable names which should always be refused, separated by a comma. +bad-names = ["foo", "bar", "baz", "toto", "tutu", "tata"] + +# Bad variable names regexes, separated by a comma. If names match any regex, +# they will always be refused +# bad-names-rgxs = + +# Naming style matching correct class attribute names. +class-attribute-naming-style = "any" + +# Regular expression matching correct class attribute names. Overrides class- +# attribute-naming-style. If left empty, class attribute names will be checked +# with the set naming style. +# class-attribute-rgx = + +# Naming style matching correct class constant names. +class-const-naming-style = "UPPER_CASE" + +# Regular expression matching correct class constant names. Overrides class- +# const-naming-style. If left empty, class constant names will be checked with +# the set naming style. +# class-const-rgx = + +# Naming style matching correct class names. +class-naming-style = "PascalCase" + +# Regular expression matching correct class names. Overrides class-naming-style. +# If left empty, class names will be checked with the set naming style. +# class-rgx = + +# Naming style matching correct constant names. +const-naming-style = "UPPER_CASE" + +# Regular expression matching correct constant names. Overrides const-naming- +# style. If left empty, constant names will be checked with the set naming style. +# const-rgx = + +# Minimum line length for functions/classes that require docstrings, shorter ones +# are exempt. +docstring-min-length = -1 + +# Naming style matching correct function names. +function-naming-style = "snake_case" + +# Regular expression matching correct function names. Overrides function-naming- +# style. If left empty, function names will be checked with the set naming style. +# function-rgx = + +# Good variable names which should always be accepted, separated by a comma. +good-names = ["i", "j", "k", "ex", "Run", "_"] + +# Good variable names regexes, separated by a comma. If names match any regex, +# they will always be accepted +# good-names-rgxs = + +# Include a hint for the correct naming format with invalid-name. +# include-naming-hint = + +# Naming style matching correct inline iteration names. +inlinevar-naming-style = "any" + +# Regular expression matching correct inline iteration names. Overrides +# inlinevar-naming-style. If left empty, inline iteration names will be checked +# with the set naming style. +# inlinevar-rgx = + +# Naming style matching correct method names. +method-naming-style = "snake_case" + +# Regular expression matching correct method names. Overrides method-naming- +# style. If left empty, method names will be checked with the set naming style. +# method-rgx = + +# Naming style matching correct module names. +module-naming-style = "snake_case" + +# Regular expression matching correct module names. Overrides module-naming- +# style. If left empty, module names will be checked with the set naming style. +# module-rgx = + +# Colon-delimited sets of names that determine each other's naming style when the +# name regexes allow several styles. +# name-group = + +# Regular expression which should only match function or class names that do not +# require a docstring. +no-docstring-rgx = "^_" + +# List of decorators that produce properties, such as abc.abstractproperty. Add +# to this list to register other decorators that produce valid properties. These +# decorators are taken in consideration only for invalid-name. +property-classes = ["abc.abstractproperty"] + +# Regular expression matching correct type alias names. If left empty, type alias +# names will be checked with the set naming style. +# typealias-rgx = + +# Regular expression matching correct type variable names. If left empty, type +# variable names will be checked with the set naming style. +# typevar-rgx = + +# Naming style matching correct variable names. +variable-naming-style = "snake_case" + +# Regular expression matching correct variable names. Overrides variable-naming- +# style. If left empty, variable names will be checked with the set naming style. +# variable-rgx = + +[tool.pylint.classes] +# Warn about protected attribute access inside special methods +# check-protected-access-in-special-methods = + +# List of method names used to declare (i.e. assign) instance attributes. +defining-attr-methods = [ + "__init__", + "__new__", + "setUp", + "asyncSetUp", + "__post_init__", +] + +# List of member names, which should be excluded from the protected access +# warning. +exclude-protected = [ + "_asdict", + "_fields", + "_replace", + "_source", + "_make", + "os._exit", +] + +# List of valid names for the first argument in a class method. +valid-classmethod-first-arg = ["cls"] + +# List of valid names for the first argument in a metaclass class method. +valid-metaclass-classmethod-first-arg = ["mcs"] + +[tool.pylint.design] +# List of regular expressions of class ancestor names to ignore when counting +# public methods (see R0903) +# exclude-too-few-public-methods = + +# List of qualified class names to ignore when counting class parents (see R0901) +# ignored-parents = + +# Maximum number of arguments for function / method. +max-args = 5 + +# Maximum number of attributes for a class (see R0902). +max-attributes = 7 + +# Maximum number of boolean expressions in an if statement (see R0916). +max-bool-expr = 5 + +# Maximum number of branch for function / method body. +max-branches = 20 + +# Maximum number of locals for function / method body. +max-locals = 25 + +# Maximum number of parents for a class (see R0901). +max-parents = 7 + +# Maximum number of public methods for a class (see R0904). +max-public-methods = 20 + +# Maximum number of return / yield for function / method body. +max-returns = 6 + +# Maximum number of statements in function / method body. +max-statements = 80 + +# Minimum number of public methods for a class (see R0903). +min-public-methods = 2 + +[tool.pylint.exceptions] +# Exceptions that will emit a warning when caught. +overgeneral-exceptions = ["builtins.BaseException", "builtins.Exception"] + +[tool.pylint.format] +# Expected format of line ending, e.g. empty (any line ending), LF or CRLF. +# expected-line-ending-format = + +# Regexp for a line that is allowed to be longer than the limit. +ignore-long-lines = "^\\s*(# )??$" + +# Number of spaces of indent required inside a hanging or continued line. +indent-after-paren = 4 + +# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1 +# tab). +indent-string = " " + +# Maximum number of characters on a single line. +max-line-length = 100 + +# Maximum number of lines in a module. +max-module-lines = 1000 + +# Allow the body of a class to be on the same line as the declaration if body +# contains single statement. +# single-line-class-stmt = + +# Allow the body of an if to be on the same line as the test if there is no else. +# single-line-if-stmt = + +[tool.pylint.imports] +# List of modules that can be imported at any level, not just the top level one. +# allow-any-import-level = + +# Allow explicit reexports by alias from a package __init__. +# allow-reexport-from-package = + +# Allow wildcard imports from modules that define __all__. +# allow-wildcard-with-all = + +# Deprecated modules which should not be used, separated by a comma. +# deprecated-modules = + +# Output a graph (.gv or any supported image format) of external dependencies to +# the given file (report RP0402 must not be disabled). +# ext-import-graph = + +# Output a graph (.gv or any supported image format) of all (i.e. internal and +# external) dependencies to the given file (report RP0402 must not be disabled). +# import-graph = + +# Output a graph (.gv or any supported image format) of internal dependencies to +# the given file (report RP0402 must not be disabled). +# int-import-graph = + +# Force import order to recognize a module as part of the standard compatibility +# libraries. +# known-standard-library = + +# Force import order to recognize a module as part of a third party library. +known-third-party = ["enchant"] + +# Couples of modules and preferred modules, separated by a comma. +# preferred-modules = + +[tool.pylint.logging] +# The type of string formatting that logging methods do. `old` means using % +# formatting, `new` is for `{}` formatting. +logging-format-style = "old" + +# Logging modules to check that the string format arguments are in logging +# function parameter format. +logging-modules = ["logging"] + +[tool.pylint."messages control"] +# Only show warnings with the listed confidence levels. Leave empty to show all. +# Valid levels: HIGH, CONTROL_FLOW, INFERENCE, INFERENCE_FAILURE, UNDEFINED. +confidence = [ + "HIGH", + "CONTROL_FLOW", + "INFERENCE", + "INFERENCE_FAILURE", + "UNDEFINED", +] + +# Disable the message, report, category or checker with the given id(s). You can +# either give multiple identifiers separated by comma (,) or put this option +# multiple times (only on the command line, not in the configuration file where +# it should appear only once). You can also use "--disable=all" to disable +# everything first and then re-enable specific checks. For example, if you want +# to run only the similarities checker, you can use "--disable=all +# --enable=similarities". If you want to run only the classes checker, but have +# no Warning level messages displayed, use "--disable=all --enable=classes +# --disable=W". +disable = [ + "raw-checker-failed", + "bad-inline-option", + "locally-disabled", + "file-ignored", + "suppressed-message", + "useless-suppression", + "deprecated-pragma", + "use-symbolic-message-instead", + "use-implicit-booleaness-not-comparison-to-string", + "use-implicit-booleaness-not-comparison-to-zero", + "similarities", +] + +# Enable the message, report, category or checker with the given id(s). You can +# either give multiple identifier separated by comma (,) or put this option +# multiple time (only on the command line, not in the configuration file where it +# should appear only once). See also the "--disable" option for examples. +# enable = + +[tool.pylint.method_args] +# List of qualified names (i.e., library.method) which require a timeout +# parameter e.g. 'requests.api.get,requests.api.post' +timeout-methods = [ + "requests.api.delete", + "requests.api.get", + "requests.api.head", + "requests.api.options", + "requests.api.patch", + "requests.api.post", + "requests.api.put", + "requests.api.request", +] + +[tool.pylint.miscellaneous] +# List of note tags to take in consideration, separated by a comma. +notes = ["FIXME", "XXX"] +# TODO: add "TODO" back + +# Regular expression of note tags to take in consideration. +# notes-rgx = + +[tool.pylint.refactoring] +# Maximum number of nested blocks for function / method body +max-nested-blocks = 5 + +# Complete name of functions that never returns. When checking for inconsistent- +# return-statements if a never returning function is called then it will be +# considered as an explicit return statement and no message will be printed. +never-returning-functions = ["sys.exit", "argparse.parse_error"] + +# Let 'consider-using-join' be raised when the separator to join on would be non- +# empty (resulting in expected fixes of the type: ``"- " + " - ".join(items)``) +# TODO: suggest-join-with-non-empty-separator = true + +[tool.pylint.reports] +# Python expression which should return a score less than or equal to 10. You +# have access to the variables 'fatal', 'error', 'warning', 'refactor', +# 'convention', and 'info' which contain the number of messages in each category, +# as well as 'statement' which is the total number of statements analyzed. This +# score is used by the global evaluation report (RP0004). +evaluation = "max(0, 0 if fatal else 10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10))" + +# Template used to display messages. This is a python new-style format string +# used to format the message information. See doc for all details. +# msg-template = + +# Set the output format. Available formats are: text, parseable, colorized, json2 +# (improved json format), json (old json format) and msvs (visual studio). You +# can also give a reporter class, e.g. mypackage.mymodule.MyReporterClass. +# output-format = + +# Tells whether to display a full report or only the messages. +# reports = + +# Activate the evaluation score. +score = true + +[tool.pylint.similarities] +# Comments are removed from the similarity computation +ignore-comments = true + +# Docstrings are removed from the similarity computation +ignore-docstrings = true + +# Imports are removed from the similarity computation +ignore-imports = true + +# Signatures are removed from the similarity computation +ignore-signatures = true + +# Minimum lines number of a similarity. +min-similarity-lines = 10 + +[tool.pylint.spelling] +# Limits count of emitted suggestions for spelling mistakes. +max-spelling-suggestions = 4 + +# Spelling dictionary name. No available dictionaries : You need to install both +# the python package and the system dependency for enchant to work. +# spelling-dict = + +# List of comma separated words that should be considered directives if they +# appear at the beginning of a comment and should not be checked. +spelling-ignore-comment-directives = "fmt: on,fmt: off,noqa:,noqa,nosec,isort:skip,mypy:" + +# List of comma separated words that should not be checked. +# spelling-ignore-words = + +# A path to a file that contains the private dictionary; one word per line. +# spelling-private-dict-file = + +# Tells whether to store unknown words to the private dictionary (see the +# --spelling-private-dict-file option) instead of raising a message. +# spelling-store-unknown-words = + +[tool.pylint.typecheck] +# List of decorators that produce context managers, such as +# contextlib.contextmanager. Add to this list to register other decorators that +# produce valid context managers. +contextmanager-decorators = ["contextlib.contextmanager"] + +# List of members which are set dynamically and missed by pylint inference +# system, and so shouldn't trigger E1101 when accessed. Python regular +# expressions are accepted. +# generated-members = + +# Tells whether missing members accessed in mixin class should be ignored. A +# class is considered mixin if its name matches the mixin-class-rgx option. +# Tells whether to warn about missing members when the owner of the attribute is +# inferred to be None. +ignore-none = true + +# This flag controls whether pylint should warn about no-member and similar +# checks whenever an opaque object is returned when inferring. The inference can +# return multiple potential results while evaluating a Python object, but some +# branches might not be evaluated, which results in partial inference. In that +# case, it might be useful to still emit no-member and other checks for the rest +# of the inferred objects. +ignore-on-opaque-inference = true + +# List of symbolic message names to ignore for Mixin members. +ignored-checks-for-mixins = [ + "no-member", + "not-async-context-manager", + "not-context-manager", + "attribute-defined-outside-init", +] + +# List of class names for which member attributes should not be checked (useful +# for classes with dynamically set attributes). This supports the use of +# qualified names. +ignored-classes = [ + "optparse.Values", + "thread._local", + "_thread._local", + "argparse.Namespace", +] + +# Show a hint with possible names when a member name was not found. The aspect of +# finding the hint is based on edit distance. +missing-member-hint = true + +# The minimum edit distance a name should have in order to be considered a +# similar match for a missing member name. +missing-member-hint-distance = 1 + +# The total number of similar names that should be taken in consideration when +# showing a hint for a missing member. +missing-member-max-choices = 1 + +# Regex pattern to define which classes are considered mixins. +mixin-class-rgx = ".*[Mm]ixin" + +# List of decorators that change the signature of a decorated function. +# signature-mutators = + +[tool.pylint.variables] +# List of additional names supposed to be defined in builtins. Remember that you +# should avoid defining new builtins when possible. +# additional-builtins = + +# Tells whether unused global variables should be treated as a violation. +allow-global-unused-variables = true + +# List of names allowed to shadow builtins +# allowed-redefined-builtins = + +# List of strings which can identify a callback function by name. A callback name +# must start or end with one of those strings. +callbacks = ["cb_", "_cb"] + +# A regular expression matching the name of dummy variables (i.e. expected to not +# be used). +dummy-variables-rgx = "_+$|(_[a-zA-Z0-9_]*[a-zA-Z0-9]+?$)|dummy|^ignored_|^unused_" + +# Argument names that match this expression will be ignored. +ignored-argument-names = "_.*|^ignored_|^unused_" + +# Tells whether we should check for unused import in __init__ files. +# init-import = + +# List of qualified module names which can have objects that can redefine +# builtins. +redefining-builtins-modules = [ + "six.moves", + "past.builtins", + "future.builtins", + "builtins", + "io", +] diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 00000000..1318589d --- /dev/null +++ b/requirements.txt @@ -0,0 +1,89 @@ +alabaster==0.7.16 +argparse-addons==0.12.0 +astroid==3.2.2 +attrs==23.2.0 +Babel==2.15.0 +bitstruct==8.19.0 +cantools==39.4.5 +certifi==2024.6.2 +cffconvert==2.0.0 +cfgv==3.4.0 +charset-normalizer==3.3.2 +click==8.1.7 +colorama==0.4.6 +colorlog==6.8.2 +contourpy==1.2.1 +coverage==7.5.4 +crccheck==1.3.0 +cycler==0.12.1 +dill==0.3.8 +diskcache==5.6.3 +distlib==0.3.8 +docopt==0.6.2 +docutils==0.20.1 +filelock==3.15.4 +fonttools==4.53.1 +gcovr==7.2 +gitdb==4.0.11 +GitPython==3.1.43 +identify==2.5.36 +idna==3.7 +imagesize==1.4.1 +isort==5.13.2 +Jinja2==3.1.4 +jsonschema==3.2.0 +jsonschema-specifications==2023.12.1 +kiwisolver==1.4.5 +latexcodec==3.0.0 +lxml==5.2.2 +MarkupSafe==2.1.5 +matplotlib==3.9.1.post1 +mccabe==0.7.0 +nodeenv==1.9.1 +numpy==2.0.0 +packaging==24.1 +pillow==10.4.0 +pip-licenses==4.4.0 +platformdirs==4.2.2 +pre-commit==3.7.1 +prettytable==3.10.0 +pybtex==0.24.0 +pybtex-docutils==1.0.3 +Pygments==2.18.0 +pykwalify==1.8.0 +pylint==3.2.5 +pyparsing==3.1.2 +pyrsistent==0.20.0 +pyserial==3.5 +python-can==4.4.2 +python-dateutil==2.9.0.post0 +pywin32==306; platform_system == "Windows" +PyYAML==6.0.1 +referencing==0.35.1 +requests==2.32.3 +rpds-py==0.18.1 +ruamel.yaml==0.18.6 +ruamel.yaml.clib==0.2.8 +ruff==0.5.0 +setuptools==70.2.0 +six==1.16.0 +smmap==5.0.1 +snowballstemmer==2.2.0 +Sphinx==7.3.7 +sphinx-rtd-theme==2.0.0 +sphinxcontrib-applehelp==1.0.8 +sphinxcontrib-bibtex==2.6.2 +sphinxcontrib-devhelp==1.0.6 +sphinxcontrib-htmlhelp==2.0.5 +sphinxcontrib-jquery==4.1 +sphinxcontrib-jsmath==1.0.1 +sphinxcontrib-qthelp==1.0.7 +sphinxcontrib-serializinghtml==1.1.10 +tabulate==0.9.0 +textparser==0.24.0 +tomlkit==0.12.5 +typing_extensions==4.12.2 +urllib3==2.2.2 +virtualenv==20.26.3 +wcwidth==0.2.13 +wrapt==1.16.0 diff --git a/src/README.md b/src/README.md new file mode 100644 index 00000000..1ff81fa9 --- /dev/null +++ b/src/README.md @@ -0,0 +1,8 @@ +# `src` Directory Description + +| Directory Name | Long Name | Content Description | +| ---------------- | --------------------------- | ------------------------------------------------------------------------ | +| `app` | Application | Sources files for the BMS application | +| `hal` | Hardware | Source files of the Hardware Abstraction Layer | +| `opt` | Optional | Optional source files (e.g., specific cell parameters) | +| `os` | Operating System | Source files of the real time operating system | diff --git a/src/app/application/algorithm/algorithm.c b/src/app/application/algorithm/algorithm.c index 1145184e..5f28ae6a 100644 --- a/src/app/application/algorithm/algorithm.c +++ b/src/app/application/algorithm/algorithm.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,14 +43,13 @@ * @file algorithm.c * @author foxBMS Team * @date 2017-12-18 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup ALGORITHMS * @prefix ALGO * * @brief Main module to handle the execution of algorithms - * - * + * @details TODO */ /*========== Includes =======================================================*/ diff --git a/src/app/application/algorithm/algorithm.h b/src/app/application/algorithm/algorithm.h index deb59b06..701119b7 100644 --- a/src/app/application/algorithm/algorithm.h +++ b/src/app/application/algorithm/algorithm.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,15 +43,13 @@ * @file algorithm.h * @author foxBMS Team * @date 2017-12-18 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup ALGORITHMS * @prefix ALGO * * @brief Headers for the driver for the storage in the EEPROM memory - * * @details Header file driver of external EEPROM device - * */ #ifndef FOXBMS__ALGORITHM_H_ diff --git a/src/app/application/algorithm/config/algorithm_cfg.c b/src/app/application/algorithm/config/algorithm_cfg.c index 4d776a57..cdc2ca7f 100644 --- a/src/app/application/algorithm/config/algorithm_cfg.c +++ b/src/app/application/algorithm/config/algorithm_cfg.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file algorithm_cfg.c * @author foxBMS Team * @date 2017-12-18 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup ALGORITHMS_CONFIGURATION * @prefix ALGO * * @brief Configuration for the algorithm module - * + * @details TODO */ /*========== Includes =======================================================*/ @@ -68,7 +68,7 @@ /*========== Extern Constant and Variable Definitions =======================*/ /** array of algorithms that should be executed */ ALGO_TASKS_s algo_algorithms[] = { - {ALGO_UNINITIALIZED, 100, 1000, 0, NULL_PTR, &ALGO_MovAverage}, + {ALGO_UNINITIALIZED, 100, 1000, 0, NULL_PTR, &ALGO_MovingAverage}, }; const uint16_t algo_length = sizeof(algo_algorithms) / sizeof(algo_algorithms[0]); diff --git a/src/app/application/algorithm/config/algorithm_cfg.h b/src/app/application/algorithm/config/algorithm_cfg.h index bbbec6bc..0b20d992 100644 --- a/src/app/application/algorithm/config/algorithm_cfg.h +++ b/src/app/application/algorithm/config/algorithm_cfg.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file algorithm_cfg.h * @author foxBMS Team * @date 2017-12-18 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup ALGORITHMS_CONFIGURATION * @prefix ALGO * * @brief Headers for the configuration of the algorithm module - * + * @details TODO */ #ifndef FOXBMS__ALGORITHM_CFG_H_ diff --git a/src/app/application/algorithm/moving_average/moving_average.c b/src/app/application/algorithm/moving_average/moving_average.c index e27d812d..5502976d 100644 --- a/src/app/application/algorithm/moving_average/moving_average.c +++ b/src/app/application/algorithm/moving_average/moving_average.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file moving_average.c * @author foxBMS Team * @date 2017-12-18 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup ALGORITHMS * @prefix ALGO * * @brief moving average algorithm - * + * @details TODO */ /*========== Includes =======================================================*/ @@ -179,7 +179,7 @@ static float_t *pMovingAveragePower_cfg = &powValues[0]; /*========== Static Function Implementations ================================*/ /*========== Extern Function Implementations ================================*/ -extern void ALGO_MovAverage(void) { +extern void ALGO_MovingAverage(void) { static uint8_t curCounter = 0u; static uint8_t powCounter = 0u; static DATA_BLOCK_CURRENT_SENSOR_s curPow_tab = {.header.uniqueId = DATA_BLOCK_ID_CURRENT_SENSOR}; diff --git a/src/app/application/algorithm/moving_average/moving_average.h b/src/app/application/algorithm/moving_average/moving_average.h index ab78824f..33ad4650 100644 --- a/src/app/application/algorithm/moving_average/moving_average.h +++ b/src/app/application/algorithm/moving_average/moving_average.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file moving_average.h * @author foxBMS Team * @date 2017-12-18 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup ALGORITHMS * @prefix ALGO * - * @brief moving average algorithm - * + * @brief Moving average algorithm + * @details TODO */ #ifndef FOXBMS__MOVING_AVERAGE_H_ @@ -71,7 +71,7 @@ /*========== Extern Function Prototypes =====================================*/ /** moving average function for the algorithm module */ -extern void ALGO_MovAverage(void); +extern void ALGO_MovingAverage(void); /*========== Externalized Static Functions Prototypes (Unit Test) ===========*/ #ifdef UNITY_UNIT_TEST diff --git a/src/app/application/algorithm/state_estimation/soc/counting/soc_counting.c b/src/app/application/algorithm/state_estimation/soc/counting/soc_counting.c index 79844544..4ee5436e 100644 --- a/src/app/application/algorithm/state_estimation/soc/counting/soc_counting.c +++ b/src/app/application/algorithm/state_estimation/soc/counting/soc_counting.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file soc_counting.c * @author foxBMS Team * @date 2020-10-07 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup APPLICATION * @prefix SOC * * @brief SOC module responsible for calculation of SOC - * + * @details TODO */ /*========== Includes =======================================================*/ @@ -72,9 +72,12 @@ typedef struct { bool socInitialized; /*!< true if the initialization has passed, false otherwise */ bool sensorCcUsed[BS_NR_OF_STRINGS]; /*!< bool if coulomb counting functionality from current sensor is used */ - float_t ccScalingAverage[BS_NR_OF_STRINGS]; /*!< current sensor offset scaling for average SOC */ - float_t ccScalingMinimum[BS_NR_OF_STRINGS]; /*!< current sensor offset scaling value for minimum SOC */ - float_t ccScalingMaximum[BS_NR_OF_STRINGS]; /*!< current sensor offset scaling value for maximum SOC */ + float_t ccScalingAverage[BS_NR_OF_STRINGS]; /*!< current sensor offset scaling for average SOC */ + float_t ccScalingMinimum[BS_NR_OF_STRINGS]; /*!< current sensor offset scaling value for minimum SOC */ + float_t ccScalingMaximum[BS_NR_OF_STRINGS]; /*!< current sensor offset scaling value for maximum SOC */ + float_t chargeThroughput_As[BS_NR_OF_STRINGS]; /*!< Charge throughput */ + float_t dischargeThroughput_As[BS_NR_OF_STRINGS]; /*!< Discharge throughput */ + float_t previousCurrentCountingValue_As[BS_NR_OF_STRINGS]; /*!< Charge throughput */ uint32_t previousTimestamp[BS_NR_OF_STRINGS]; /*!< timestamp buffer to check if current/CC data has been updated */ } SOC_STATE_s; @@ -86,12 +89,15 @@ typedef struct { /*========== Static Constant and Variable Definitions =======================*/ /** state variable for SOC module */ static SOC_STATE_s soc_state = { - .socInitialized = false, - .sensorCcUsed = {GEN_REPEAT_U(false, GEN_STRIP(BS_NR_OF_STRINGS))}, - .ccScalingAverage = {GEN_REPEAT_U(0.0f, GEN_STRIP(BS_NR_OF_STRINGS))}, - .ccScalingMinimum = {GEN_REPEAT_U(0.0f, GEN_STRIP(BS_NR_OF_STRINGS))}, - .ccScalingMaximum = {GEN_REPEAT_U(0.0f, GEN_STRIP(BS_NR_OF_STRINGS))}, - .previousTimestamp = {GEN_REPEAT_U(0u, GEN_STRIP(BS_NR_OF_STRINGS))}, + .socInitialized = false, + .sensorCcUsed = {GEN_REPEAT_U(false, GEN_STRIP(BS_NR_OF_STRINGS))}, + .ccScalingAverage = {GEN_REPEAT_U(0.0f, GEN_STRIP(BS_NR_OF_STRINGS))}, + .ccScalingMinimum = {GEN_REPEAT_U(0.0f, GEN_STRIP(BS_NR_OF_STRINGS))}, + .ccScalingMaximum = {GEN_REPEAT_U(0.0f, GEN_STRIP(BS_NR_OF_STRINGS))}, + .chargeThroughput_As = {GEN_REPEAT_U(0.0f, GEN_STRIP(BS_NR_OF_STRINGS))}, + .dischargeThroughput_As = {GEN_REPEAT_U(0.0f, GEN_STRIP(BS_NR_OF_STRINGS))}, + .previousCurrentCountingValue_As = {GEN_REPEAT_U(0u, GEN_STRIP(BS_NR_OF_STRINGS))}, + .previousTimestamp = {GEN_REPEAT_U(0u, GEN_STRIP(BS_NR_OF_STRINGS))}, }; /** local copies of database tables */ @@ -235,9 +241,11 @@ static void SOC_CheckDatabaseSocPercentageLimits(DATA_BLOCK_SOC_s *pTableSoc, ui static void SOC_UpdateNvmValues(DATA_BLOCK_SOC_s *pTableSoc, uint8_t stringNumber) { FAS_ASSERT(pTableSoc != NULL_PTR); FAS_ASSERT(stringNumber < BS_NR_OF_STRINGS); - fram_soc.averageSoc_perc[stringNumber] = pTableSoc->averageSoc_perc[stringNumber]; - fram_soc.minimumSoc_perc[stringNumber] = pTableSoc->minimumSoc_perc[stringNumber]; - fram_soc.maximumSoc_perc[stringNumber] = pTableSoc->maximumSoc_perc[stringNumber]; + fram_soc.averageSoc_perc[stringNumber] = pTableSoc->averageSoc_perc[stringNumber]; + fram_soc.minimumSoc_perc[stringNumber] = pTableSoc->minimumSoc_perc[stringNumber]; + fram_soc.maximumSoc_perc[stringNumber] = pTableSoc->maximumSoc_perc[stringNumber]; + fram_soc.chargeThroughput_As[stringNumber] = pTableSoc->chargeThroughput_As[stringNumber]; + fram_soc.dischargeThroughput_As[stringNumber] = pTableSoc->dischargeThroughput_As[stringNumber]; } /*========== Extern Function Implementations ================================*/ @@ -251,6 +259,8 @@ void SE_InitializeStateOfCharge(DATA_BLOCK_SOC_s *pSocValues, bool ccPresent, ui if (ccPresent == true) { soc_state.sensorCcUsed[stringNumber] = true; + soc_state.previousCurrentCountingValue_As[stringNumber] = + soc_tableCurrentSensor.currentCounter_As[stringNumber]; float_t scalingOffset_perc = SOC_GetStringSocPercentageFromCharge((uint32_t)abs(soc_tableCurrentSensor.currentCounter_As[stringNumber])); @@ -271,9 +281,11 @@ void SE_InitializeStateOfCharge(DATA_BLOCK_SOC_s *pSocValues, bool ccPresent, ui soc_state.sensorCcUsed[stringNumber] = false; } - pSocValues->averageSoc_perc[stringNumber] = fram_soc.averageSoc_perc[stringNumber]; - pSocValues->minimumSoc_perc[stringNumber] = fram_soc.minimumSoc_perc[stringNumber]; - pSocValues->maximumSoc_perc[stringNumber] = fram_soc.maximumSoc_perc[stringNumber]; + pSocValues->averageSoc_perc[stringNumber] = fram_soc.averageSoc_perc[stringNumber]; + pSocValues->minimumSoc_perc[stringNumber] = fram_soc.minimumSoc_perc[stringNumber]; + pSocValues->maximumSoc_perc[stringNumber] = fram_soc.maximumSoc_perc[stringNumber]; + pSocValues->dischargeThroughput_As[stringNumber] = fram_soc.dischargeThroughput_As[stringNumber]; + pSocValues->chargeThroughput_As[stringNumber] = fram_soc.chargeThroughput_As[stringNumber]; SOC_CheckDatabaseSocPercentageLimits(pSocValues, stringNumber); @@ -288,6 +300,7 @@ void SE_CalculateStateOfCharge(DATA_BLOCK_SOC_s *pSocValues) { /* INCLUDE MARKER FOR THE DOCUMENTATION; DO NOT MOVE cc-documentation-stop-include */ FAS_ASSERT(pSocValues != NULL_PTR); bool continueFunction = true; + if (soc_state.socInitialized == false) { /* Exit if SOC not initialized yet */ continueFunction = false; @@ -316,6 +329,9 @@ void SE_CalculateStateOfCharge(DATA_BLOCK_SOC_s *pSocValues) { SOC_STRING_CAPACITY_mAs) * 100.0f / 1000.0f; /* ((mA) * 1s) / 1As) * 100% */ + float_t charge_As = + fabs((float_t)soc_tableCurrentSensor.current_mA[s] * timeStep_s / 1000.0f); + #if BS_POSITIVE_DISCHARGE_CURRENT == false deltaSOC_perc *= (-1.0f); #endif /* BS_POSITIVE_DISCHARGE_CURRENT == false */ @@ -323,7 +339,13 @@ void SE_CalculateStateOfCharge(DATA_BLOCK_SOC_s *pSocValues) { pSocValues->averageSoc_perc[s] = pSocValues->averageSoc_perc[s] - deltaSOC_perc; pSocValues->minimumSoc_perc[s] = pSocValues->minimumSoc_perc[s] - deltaSOC_perc; pSocValues->maximumSoc_perc[s] = pSocValues->maximumSoc_perc[s] - deltaSOC_perc; - + if (BMS_GetCurrentFlowDirection(soc_tableCurrentSensor.current_mA[s]) == BMS_CHARGING) { + pSocValues->chargeThroughput_As[s] = pSocValues->chargeThroughput_As[s] + charge_As; + } else { + /* When BMS_DISCHARGING and BMS_AT_REST add charge to dischargeThroughput*/ + pSocValues->dischargeThroughput_As[s] = pSocValues->dischargeThroughput_As[s] + + charge_As; + } /* Limit SOC calculation to 0% respectively 100% */ SOC_CheckDatabaseSocPercentageLimits(pSocValues, s); @@ -339,6 +361,10 @@ void SE_CalculateStateOfCharge(DATA_BLOCK_SOC_s *pSocValues) { float_t deltaSoc_perc = ((float_t)soc_tableCurrentSensor.currentCounter_As[s] / SOC_STRING_CAPACITY_As) * 100.0f; + float_t chargeDifference_As = fabs( + (float_t)soc_tableCurrentSensor.currentCounter_As[s] - + soc_state.previousCurrentCountingValue_As[s]); + #if BS_POSITIVE_DISCHARGE_CURRENT == false deltaSoc_perc *= (-1.0f); #endif /* BS_POSITIVE_DISCHARGE_CURRENT == false */ @@ -346,13 +372,21 @@ void SE_CalculateStateOfCharge(DATA_BLOCK_SOC_s *pSocValues) { pSocValues->averageSoc_perc[s] = soc_state.ccScalingAverage[s] - deltaSoc_perc; pSocValues->minimumSoc_perc[s] = soc_state.ccScalingMinimum[s] - deltaSoc_perc; pSocValues->maximumSoc_perc[s] = soc_state.ccScalingMaximum[s] - deltaSoc_perc; + if (BMS_GetCurrentFlowDirection(soc_tableCurrentSensor.current_mA[s]) == BMS_CHARGING) { + pSocValues->chargeThroughput_As[s] = pSocValues->chargeThroughput_As[s] + + chargeDifference_As; + } else { + /* When BMS_DISCHARGING and BMS_AT_REST add charge to dischargeThroughput*/ + pSocValues->dischargeThroughput_As[s] = pSocValues->dischargeThroughput_As[s] + + chargeDifference_As; + } /* Limit SOC values to [0.0, 100.0] */ SOC_CheckDatabaseSocPercentageLimits(pSocValues, s); /* Update values in non-volatile memory */ SOC_UpdateNvmValues(pSocValues, s); - + soc_state.previousCurrentCountingValue_As[s] = soc_tableCurrentSensor.currentCounter_As[s]; soc_state.previousTimestamp[s] = soc_tableCurrentSensor.timestampCurrentCounting[s]; } /* end check if cc measurement has been updated */ } @@ -399,4 +433,10 @@ extern float_t SE_GetStateOfChargeFromVoltage(int16_t voltage_mV) { /*========== Externalized Static Function Implementations (Unit Test) =======*/ #ifdef UNITY_UNIT_TEST +extern void TEST_SOC_CheckDatabaseSocPercentageLimits(DATA_BLOCK_SOC_s *TableSoc, uint8_t stringNumber) { + SOC_CheckDatabaseSocPercentageLimits(TableSoc, stringNumber); +} +extern void TEST_SOC_UpdateNvmValues(DATA_BLOCK_SOC_s *TableSoc, uint8_t stringNumber) { + SOC_UpdateNvmValues(TableSoc, stringNumber); +} #endif diff --git a/src/app/application/algorithm/state_estimation/soc/counting/soc_counting_cfg.h b/src/app/application/algorithm/state_estimation/soc/counting/soc_counting_cfg.h index 9203ee5b..232b28ee 100644 --- a/src/app/application/algorithm/state_estimation/soc/counting/soc_counting_cfg.h +++ b/src/app/application/algorithm/state_estimation/soc/counting/soc_counting_cfg.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file soc_counting_cfg.h * @author foxBMS Team * @date 2020-10-07 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup APPLICATION * @prefix SOC * * @brief Header for SOC configuration - * + * @details TODO */ #ifndef FOXBMS__SOC_COUNTING_CFG_H_ @@ -60,6 +60,8 @@ #include "battery_cell_cfg.h" #include "battery_system_cfg.h" +#include "database.h" + #include /*========== Macros and Definitions =========================================*/ @@ -81,6 +83,8 @@ /*========== Externalized Static Functions Prototypes (Unit Test) ===========*/ #ifdef UNITY_UNIT_TEST +extern void TEST_SOC_CheckDatabaseSocPercentageLimits(DATA_BLOCK_SOC_s *TableSoc, uint8_t stringNumber); +extern void TEST_SOC_UpdateNvmValues(DATA_BLOCK_SOC_s *TableSoc, uint8_t stringNumber); #endif #endif /* FOXBMS__SOC_COUNTING_CFG_H_ */ diff --git a/src/app/application/algorithm/state_estimation/soc/debug/soc_debug.c b/src/app/application/algorithm/state_estimation/soc/debug/soc_debug.c index 419e76d7..6546b98e 100644 --- a/src/app/application/algorithm/state_estimation/soc/debug/soc_debug.c +++ b/src/app/application/algorithm/state_estimation/soc/debug/soc_debug.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file soc_debug.c * @author foxBMS Team * @date 2020-10-14 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup APPLICATION * @prefix SOC * * @brief SOC module responsible for calculation of state-of-charge (SOC) - * + * @details TODO */ /*========== Includes =======================================================*/ diff --git a/src/app/application/algorithm/state_estimation/soc/none/soc_none.c b/src/app/application/algorithm/state_estimation/soc/none/soc_none.c index 127802dc..21f49af5 100644 --- a/src/app/application/algorithm/state_estimation/soc/none/soc_none.c +++ b/src/app/application/algorithm/state_estimation/soc/none/soc_none.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file soc_none.c * @author foxBMS Team * @date 2020-10-14 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup APPLICATION * @prefix SOC * * @brief SOC module responsible for calculation of state-of-charge (SOC) - * + * @details TODO */ /*========== Includes =======================================================*/ @@ -71,6 +71,7 @@ /*========== Extern Function Implementations ================================*/ extern void SE_InitializeStateOfCharge(DATA_BLOCK_SOC_s *pSocValues, bool ccPresent, uint8_t stringNumber) { FAS_ASSERT(pSocValues != NULL_PTR); + FAS_ASSERT((ccPresent == true) || (ccPresent == false)); /* LCOV_EXCL_LINE */ FAS_ASSERT(stringNumber < BS_NR_OF_STRINGS); } @@ -79,6 +80,7 @@ extern void SE_CalculateStateOfCharge(DATA_BLOCK_SOC_s *pSocValues) { } extern float_t SE_GetStateOfChargeFromVoltage(int16_t voltage_mV) { + /* AXIVION Routine Generic-MissingParameterAssert: voltage_mV: parameter accepts whole range */ return 0.0f; } diff --git a/src/app/application/algorithm/state_estimation/soe/counting/soe_counting.c b/src/app/application/algorithm/state_estimation/soe/counting/soe_counting.c index 4d976c93..170ee6e6 100644 --- a/src/app/application/algorithm/state_estimation/soe/counting/soe_counting.c +++ b/src/app/application/algorithm/state_estimation/soe/counting/soe_counting.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file soe_counting.c * @author foxBMS Team * @date 2020-10-07 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup APPLICATION * @prefix SOE * * @brief SOE module responsible for calculation of SOE - * + * @details TODO */ /*========== Includes =======================================================*/ @@ -77,8 +77,11 @@ typedef struct { float_t ecScalingAverage[BS_NR_OF_STRINGS]; /*!< current sensor offset scaling for average SOE */ float_t ecScalingMinimum[BS_NR_OF_STRINGS]; /*!< current sensor offset scaling for minimum SOE */ float_t ecScalingMaximum[BS_NR_OF_STRINGS]; /*!< current sensor offset scaling for maximum SOE */ - uint32_t previousTimestamp - [BS_NR_OF_STRINGS]; /*!< last used timestamp of current or energy counting value for SOE estimation */ + float_t chargeEnergyThroughput_Wh[BS_NR_OF_STRINGS]; /*!< inflow of energy */ + float_t dischargeEnergyThroughput_Wh[BS_NR_OF_STRINGS]; /*!< outflow of energy */ + float_t previousEnergyCount_Wh[BS_NR_OF_STRINGS]; + uint32_t previousTimestamp[BS_NR_OF_STRINGS]; /*!< last used timestamp of current or energy counting value for SOE + estimation */ } SOE_STATE_s; /** defines for maximum and minimum SOE */ @@ -91,12 +94,15 @@ typedef struct { * contains the state of the SOE estimation */ static SOE_STATE_s soe_state = { - .soeInitialized = false, - .sensorEcUsed = {GEN_REPEAT_U(false, GEN_STRIP(BS_NR_OF_STRINGS))}, - .ecScalingAverage = {GEN_REPEAT_U(0.0f, GEN_STRIP(BS_NR_OF_STRINGS))}, - .ecScalingMinimum = {GEN_REPEAT_U(0.0f, GEN_STRIP(BS_NR_OF_STRINGS))}, - .ecScalingMaximum = {GEN_REPEAT_U(0.0f, GEN_STRIP(BS_NR_OF_STRINGS))}, - .previousTimestamp = {GEN_REPEAT_U(0u, GEN_STRIP(BS_NR_OF_STRINGS))}, + .soeInitialized = false, + .sensorEcUsed = {GEN_REPEAT_U(false, GEN_STRIP(BS_NR_OF_STRINGS))}, + .ecScalingAverage = {GEN_REPEAT_U(0.0f, GEN_STRIP(BS_NR_OF_STRINGS))}, + .ecScalingMinimum = {GEN_REPEAT_U(0.0f, GEN_STRIP(BS_NR_OF_STRINGS))}, + .ecScalingMaximum = {GEN_REPEAT_U(0.0f, GEN_STRIP(BS_NR_OF_STRINGS))}, + .chargeEnergyThroughput_Wh = {GEN_REPEAT_U(0.0f, GEN_STRIP(BS_NR_OF_STRINGS))}, + .dischargeEnergyThroughput_Wh = {GEN_REPEAT_U(0.0f, GEN_STRIP(BS_NR_OF_STRINGS))}, + .previousEnergyCount_Wh = {GEN_REPEAT_U(0.0f, GEN_STRIP(BS_NR_OF_STRINGS))}, + .previousTimestamp = {GEN_REPEAT_U(0u, GEN_STRIP(BS_NR_OF_STRINGS))}, }; /** local copies of database tables */ @@ -317,9 +323,11 @@ extern void SE_InitializeStateOfEnergy(DATA_BLOCK_SOE_s *pSoeValues, bool ec_pre FAS_ASSERT(stringNumber < BS_NR_OF_STRINGS); FRAM_ReadData(FRAM_BLOCK_ID_SOE); - pSoeValues->averageSoe_perc[stringNumber] = fram_soe.averageSoe_perc[stringNumber]; - pSoeValues->minimumSoe_perc[stringNumber] = fram_soe.minimumSoe_perc[stringNumber]; - pSoeValues->maximumSoe_perc[stringNumber] = fram_soe.maximumSoe_perc[stringNumber]; + pSoeValues->averageSoe_perc[stringNumber] = fram_soe.averageSoe_perc[stringNumber]; + pSoeValues->minimumSoe_perc[stringNumber] = fram_soe.minimumSoe_perc[stringNumber]; + pSoeValues->maximumSoe_perc[stringNumber] = fram_soe.maximumSoe_perc[stringNumber]; + pSoeValues->chargeEnergyThroughput_Wh[stringNumber] = fram_soe.chargeEnergyThroughput_Wh[stringNumber]; + pSoeValues->dischargeEnergyThroughput_Wh[stringNumber] = fram_soe.dischargeEnergyThroughput_Wh[stringNumber]; /* Limit SOE values [0.0f, 100.0f] */ SOE_CheckDatabaseSoePercentageLimits(pSoeValues, stringNumber); @@ -380,13 +388,13 @@ void SE_CalculateStateOfEnergy(DATA_BLOCK_SOE_s *pSoeValues) { /* check if current measurement has been updated */ if (soe_state.previousTimestamp[s] != timestamp) { - float_t timestep_s = (((float_t)timestamp - (float_t)previous_timestamp)) / 1000.0f; - if (timestep_s > 0.0f) { + float_t time_step_s = (((float_t)timestamp - (float_t)previous_timestamp)) / 1000.0f; + if (time_step_s > 0.0f) { /* Current in charge direction negative means SOE increasing --> BAT naming, not ROB */ float_t deltaSOE_Wh = ((((float_t)soe_tableCurrentSensor.current_mA[s] / 1000.0f) * /* convert to A */ ((float_t)soe_tableCurrentSensor.highVoltage_mV[s][0] / 1000.0f)) / /* convert to V */ - timestep_s) / /* unit: s */ + time_step_s) / /* unit: s */ 3600.0f; /* convert Ws -> Wh */ #if BS_POSITIVE_DISCHARGE_CURRENT == false @@ -398,6 +406,15 @@ void SE_CalculateStateOfEnergy(DATA_BLOCK_SOE_s *pSoeValues) { pSoeValues->minimumSoe_Wh[s] -= (uint32_t)deltaSOE_Wh; pSoeValues->maximumSoe_Wh[s] -= (uint32_t)deltaSOE_Wh; + if (BMS_GetCurrentFlowDirection(soe_tableCurrentSensor.current_mA[s]) == BMS_CHARGING) { + pSoeValues->chargeEnergyThroughput_Wh[s] = pSoeValues->chargeEnergyThroughput_Wh[s] + + fabs(deltaSOE_Wh); + } else { + /* When BMS_DISCHARGING and BMS_AT_REST add charge to dischargeThroughput*/ + pSoeValues->dischargeEnergyThroughput_Wh[s] = + pSoeValues->dischargeEnergyThroughput_Wh[s] + fabs(deltaSOE_Wh); + } + pSoeValues->averageSoe_perc[s] = SOE_GetStringSoePercentageFromEnergy(pSoeValues->averageSoe_Wh[s]); pSoeValues->minimumSoe_perc[s] = @@ -417,6 +434,9 @@ void SE_CalculateStateOfEnergy(DATA_BLOCK_SOE_s *pSoeValues) { (((float_t)soe_tableCurrentSensor.energyCounter_Wh[s] / SOE_STRING_ENERGY_Wh) * UNIT_CONVERSION_FACTOR_100_FLOAT); + float_t energyDifference_Wh = fabs( + (float_t)soe_tableCurrentSensor.energyCounter_Wh[s] - soe_state.previousEnergyCount_Wh[s]); + #if BS_POSITIVE_DISCHARGE_CURRENT == false /* negate calculated delta SOE_perc */ deltaSoe_perc *= (-1.0f); @@ -425,7 +445,14 @@ void SE_CalculateStateOfEnergy(DATA_BLOCK_SOE_s *pSoeValues) { pSoeValues->averageSoe_perc[s] = soe_state.ecScalingAverage[s] - deltaSoe_perc; pSoeValues->minimumSoe_perc[s] = soe_state.ecScalingMinimum[s] - deltaSoe_perc; pSoeValues->maximumSoe_perc[s] = soe_state.ecScalingMaximum[s] - deltaSoe_perc; - + if (BMS_GetCurrentFlowDirection(soe_tableCurrentSensor.current_mA[s]) == BMS_CHARGING) { + pSoeValues->chargeEnergyThroughput_Wh[s] = pSoeValues->chargeEnergyThroughput_Wh[s] + + energyDifference_Wh; + } else { + /* When BMS_DISCHARGING and BMS_AT_REST add charge to dischargeThroughput*/ + pSoeValues->dischargeEnergyThroughput_Wh[s] = pSoeValues->dischargeEnergyThroughput_Wh[s] + + energyDifference_Wh; + } /* Limit SOE values to [0.0, 100.0] */ SOE_CheckDatabaseSoePercentageLimits(pSoeValues, s); @@ -438,13 +465,16 @@ void SE_CalculateStateOfEnergy(DATA_BLOCK_SOE_s *pSoeValues) { SOE_GetStringEnergyFromSoePercentage(pSoeValues->minimumSoe_perc[s]); /* Update timestamp for next iteration */ - soe_state.previousTimestamp[s] = soe_tableCurrentSensor.timestampEnergyCounting[s]; + soe_state.previousEnergyCount_Wh[s] = soe_tableCurrentSensor.energyCounter_Wh[s]; + soe_state.previousTimestamp[s] = soe_tableCurrentSensor.timestampEnergyCounting[s]; } } - fram_soe.averageSoe_perc[s] = pSoeValues->averageSoe_perc[s]; - fram_soe.minimumSoe_perc[s] = pSoeValues->minimumSoe_perc[s]; - fram_soe.maximumSoe_perc[s] = pSoeValues->maximumSoe_perc[s]; + fram_soe.averageSoe_perc[s] = pSoeValues->averageSoe_perc[s]; + fram_soe.minimumSoe_perc[s] = pSoeValues->minimumSoe_perc[s]; + fram_soe.maximumSoe_perc[s] = pSoeValues->maximumSoe_perc[s]; + fram_soe.chargeEnergyThroughput_Wh[s] = pSoeValues->chargeEnergyThroughput_Wh[s]; + fram_soe.dischargeEnergyThroughput_Wh[s] = pSoeValues->dischargeEnergyThroughput_Wh[s]; } /* Update database and FRAM value */ diff --git a/src/app/application/algorithm/state_estimation/soe/counting/soe_counting_cfg.h b/src/app/application/algorithm/state_estimation/soe/counting/soe_counting_cfg.h index dcf3695c..9685e54a 100644 --- a/src/app/application/algorithm/state_estimation/soe/counting/soe_counting_cfg.h +++ b/src/app/application/algorithm/state_estimation/soe/counting/soe_counting_cfg.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file soe_counting_cfg.h * @author foxBMS Team * @date 2020-10-07 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup APPLICATION * @prefix SOE * * @brief Header for SOE configuration - * + * @details TODO */ #ifndef FOXBMS__SOE_COUNTING_CFG_H_ diff --git a/src/app/application/algorithm/state_estimation/soe/debug/soe_debug.c b/src/app/application/algorithm/state_estimation/soe/debug/soe_debug.c index b868970d..1dee9445 100644 --- a/src/app/application/algorithm/state_estimation/soe/debug/soe_debug.c +++ b/src/app/application/algorithm/state_estimation/soe/debug/soe_debug.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file soe_debug.c * @author foxBMS Team * @date 2020-10-14 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup APPLICATION * @prefix SOE * * @brief SOE module responsible for calculation of state-of-energy (SOE) - * + * @details TODO */ /*========== Includes =======================================================*/ diff --git a/src/app/application/algorithm/state_estimation/soe/debug/soe_debug_cfg.h b/src/app/application/algorithm/state_estimation/soe/debug/soe_debug_cfg.h index 78a8d3fc..1a664cc4 100644 --- a/src/app/application/algorithm/state_estimation/soe/debug/soe_debug_cfg.h +++ b/src/app/application/algorithm/state_estimation/soe/debug/soe_debug_cfg.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file soe_debug_cfg.h * @author foxBMS Team * @date 2020-10-07 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup APPLICATION * @prefix SOE * * @brief Header for SOE configuration - * + * @details TODO */ #ifndef FOXBMS__SOE_DEBUG_CFG_H_ diff --git a/src/app/application/algorithm/state_estimation/soe/none/soe_none.c b/src/app/application/algorithm/state_estimation/soe/none/soe_none.c index e1fb669c..ae93f342 100644 --- a/src/app/application/algorithm/state_estimation/soe/none/soe_none.c +++ b/src/app/application/algorithm/state_estimation/soe/none/soe_none.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file soe_none.c * @author foxBMS Team * @date 2020-10-14 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup APPLICATION * @prefix SOE * * @brief SOE module responsible for calculation of state-of-energy (SOE) - * + * @details TODO */ /*========== Includes =======================================================*/ @@ -70,6 +70,7 @@ /*========== Extern Function Implementations ================================*/ extern void SE_InitializeStateOfEnergy(DATA_BLOCK_SOE_s *pSoeValues, bool ec_present, uint8_t stringNumber) { FAS_ASSERT(pSoeValues != NULL_PTR); + FAS_ASSERT((ec_present == true) || (ec_present == false)); /* LCOV_EXCL_LINE */ FAS_ASSERT(stringNumber < BS_NR_OF_STRINGS); } diff --git a/src/app/application/algorithm/state_estimation/soe/none/soe_none_cfg.h b/src/app/application/algorithm/state_estimation/soe/none/soe_none_cfg.h index 20887e3e..58cacdaf 100644 --- a/src/app/application/algorithm/state_estimation/soe/none/soe_none_cfg.h +++ b/src/app/application/algorithm/state_estimation/soe/none/soe_none_cfg.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file soe_none_cfg.h * @author foxBMS Team * @date 2020-10-07 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup APPLICATION * @prefix SOE * * @brief Header for SOE configuration - * + * @details TODO */ #ifndef FOXBMS__SOE_NONE_CFG_H_ diff --git a/src/app/application/algorithm/state_estimation/sof/trapezoid/sof_trapezoid.c b/src/app/application/algorithm/state_estimation/sof/trapezoid/sof_trapezoid.c index a29211ad..919fa2f3 100644 --- a/src/app/application/algorithm/state_estimation/sof/trapezoid/sof_trapezoid.c +++ b/src/app/application/algorithm/state_estimation/sof/trapezoid/sof_trapezoid.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file sof_trapezoid.c * @author foxBMS Team * @date 2020-10-07 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup APPLICATION_CONFIGURATION * @prefix SOF * * @brief SOF modules responsible for current derating calculation - * + * @details TODO */ /*========== Includes =======================================================*/ diff --git a/src/app/application/algorithm/state_estimation/sof/trapezoid/sof_trapezoid.h b/src/app/application/algorithm/state_estimation/sof/trapezoid/sof_trapezoid.h index b96de49d..e05d1c37 100644 --- a/src/app/application/algorithm/state_estimation/sof/trapezoid/sof_trapezoid.h +++ b/src/app/application/algorithm/state_estimation/sof/trapezoid/sof_trapezoid.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file sof_trapezoid.h * @author foxBMS Team * @date 2020-10-07 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup APPLICATION * @prefix SOF * * @brief Header for SOX module, responsible for current derating calculation - * + * @details TODO */ #ifndef FOXBMS__SOF_TRAPEZOID_H_ diff --git a/src/app/application/algorithm/state_estimation/sof/trapezoid/sof_trapezoid_cfg.c b/src/app/application/algorithm/state_estimation/sof/trapezoid/sof_trapezoid_cfg.c index e271523c..84276880 100644 --- a/src/app/application/algorithm/state_estimation/sof/trapezoid/sof_trapezoid_cfg.c +++ b/src/app/application/algorithm/state_estimation/sof/trapezoid/sof_trapezoid_cfg.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file sof_trapezoid_cfg.c * @author foxBMS Team * @date 2020-10-07 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup APPLICATION * @prefix SOF * * @brief SOF module configuration file - * + * @details TODO */ /*========== Includes =======================================================*/ diff --git a/src/app/application/algorithm/state_estimation/sof/trapezoid/sof_trapezoid_cfg.h b/src/app/application/algorithm/state_estimation/sof/trapezoid/sof_trapezoid_cfg.h index a825d466..58c196f9 100644 --- a/src/app/application/algorithm/state_estimation/sof/trapezoid/sof_trapezoid_cfg.h +++ b/src/app/application/algorithm/state_estimation/sof/trapezoid/sof_trapezoid_cfg.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file sof_trapezoid_cfg.h * @author foxBMS Team * @date 2020-10-07 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup APPLICATION_CONFIGURATION * @prefix SOF * * @brief Header for SOF configuration - * + * @details TODO */ #ifndef FOXBMS__SOF_TRAPEZOID_CFG_H_ diff --git a/src/app/application/algorithm/state_estimation/soh/debug/soh_debug.c b/src/app/application/algorithm/state_estimation/soh/debug/soh_debug.c index f4e6ccf2..db526c7d 100644 --- a/src/app/application/algorithm/state_estimation/soh/debug/soh_debug.c +++ b/src/app/application/algorithm/state_estimation/soh/debug/soh_debug.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file soh_debug.c * @author foxBMS Team * @date 2020-10-14 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup APPLICATION * @prefix SOH * * @brief SOH module responsible for calculation of state-of-health (SOH) - * + * @details TODO */ /*========== Includes =======================================================*/ @@ -71,11 +71,9 @@ extern void SE_InitializeStateOfHealth(DATA_BLOCK_SOH_s *pSohValues, uint8_t stringNumber) { FAS_ASSERT(pSohValues != NULL_PTR); FAS_ASSERT(stringNumber < BS_NR_OF_STRINGS); - if (stringNumber < BS_NR_OF_STRINGS) { - pSohValues->averageSoh_perc[stringNumber] = 0u; - pSohValues->minimumSoh_perc[stringNumber] = 0u; - pSohValues->maximumSoh_perc[stringNumber] = 0u; - } + pSohValues->averageSoh_perc[stringNumber] = 0.0f; + pSohValues->minimumSoh_perc[stringNumber] = 0.0f; + pSohValues->maximumSoh_perc[stringNumber] = 0.0f; } extern void SE_CalculateStateOfHealth(DATA_BLOCK_SOH_s *pSohValues) { diff --git a/src/app/application/algorithm/state_estimation/soh/none/soh_none.c b/src/app/application/algorithm/state_estimation/soh/none/soh_none.c index 479925f5..50e83710 100644 --- a/src/app/application/algorithm/state_estimation/soh/none/soh_none.c +++ b/src/app/application/algorithm/state_estimation/soh/none/soh_none.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file soh_none.c * @author foxBMS Team * @date 2020-10-14 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup APPLICATION * @prefix SOH * * @brief SOH module responsible for calculation of state-of-health (SOH) - * + * @details TODO */ /*========== Includes =======================================================*/ diff --git a/src/app/application/algorithm/state_estimation/state_estimation.c b/src/app/application/algorithm/state_estimation/state_estimation.c index 6244150e..fb7befbf 100644 --- a/src/app/application/algorithm/state_estimation/state_estimation.c +++ b/src/app/application/algorithm/state_estimation/state_estimation.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file state_estimation.c * @author foxBMS Team * @date 2020-10-07 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup APPLICATION * @prefix SE * @@ -52,7 +52,7 @@ * charge (SOC), state-of-energy (SOE) and state-of-health (SOH). * Functions as a wrapper for the individual state-estimation * algorithms. - * + * @details TODO */ /*========== Includes =======================================================*/ diff --git a/src/app/application/algorithm/state_estimation/state_estimation.h b/src/app/application/algorithm/state_estimation/state_estimation.h index 7e40afc2..06e65030 100644 --- a/src/app/application/algorithm/state_estimation/state_estimation.h +++ b/src/app/application/algorithm/state_estimation/state_estimation.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file state_estimation.h * @author foxBMS Team * @date 2020-10-14 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup APPLICATION * @prefix SE * @@ -52,7 +52,7 @@ * of state-of-charge (SOC), state-of-energy (SOE) and state-of-health * (SOH). Functions as a wrapper for the individual state-estimation * algorithms. - * + * @details TODO */ #ifndef FOXBMS__STATE_ESTIMATION_H_ diff --git a/src/app/application/algorithm/wscript b/src/app/application/algorithm/wscript old mode 100644 new mode 100755 index eb248226..1e7961e3 --- a/src/app/application/algorithm/wscript +++ b/src/app/application/algorithm/wscript @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause diff --git a/src/app/application/bal/bal.c b/src/app/application/bal/bal.c index ca5366b1..620f43bd 100644 --- a/src/app/application/bal/bal.c +++ b/src/app/application/bal/bal.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file bal.c * @author foxBMS Team * @date 2020-02-24 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup APPLICATION * @prefix BAL * * @brief Driver for the Balancing module - * + * @details TODO */ /*========== Includes =======================================================*/ @@ -126,7 +126,7 @@ extern BAL_RETURN_TYPE_e BAL_CheckStateRequest(BAL_STATE_s *pCurrentState, BAL_S pCurrentState->balancingGlobalAllowed = false; return BAL_OK; } - if ((stateRequest == BAL_STATE_NO_BALANCING_REQUEST) || (stateRequest == BAL_STATE_ALLOWBALANCING_REQUEST)) { + if ((stateRequest == BAL_STATE_NO_BALANCING_REQUEST) || (stateRequest == BAL_STATE_ALLOW_BALANCING_REQUEST)) { return BAL_OK; } @@ -151,13 +151,13 @@ extern BAL_RETURN_TYPE_e BAL_CheckStateRequest(BAL_STATE_s *pCurrentState, BAL_S extern STD_RETURN_TYPE_e BAL_Init(DATA_BLOCK_BALANCING_CONTROL_s *pControl) { FAS_ASSERT(pControl != NULL_PTR); DATA_READ_DATA(pControl); - pControl->enableBalancing = 0; + pControl->enableBalancing = false; DATA_WRITE_DATA(pControl); return STD_OK; } -#pragma WEAK(BAL_ProcessStateUninitalized) -extern void BAL_ProcessStateUninitalized(BAL_STATE_s *pCurrentState, BAL_STATE_REQUEST_e stateRequest) { +#pragma WEAK(BAL_ProcessStateUninitialized) +extern void BAL_ProcessStateUninitialized(BAL_STATE_s *pCurrentState, BAL_STATE_REQUEST_e stateRequest) { FAS_ASSERT(pCurrentState != NULL_PTR); if (stateRequest == BAL_STATE_INIT_REQUEST) { pCurrentState->timer = BAL_STATEMACH_SHORTTIME_100ms; @@ -188,7 +188,5 @@ extern void BAL_ProcessStateInitialized(BAL_STATE_s *currentState) { } /*========== Externalized Static Function Implementations (Unit Test) =======*/ - -/*========== Getter for static Variables (Unit Test) ========================*/ #ifdef UNITY_UNIT_TEST #endif diff --git a/src/app/application/bal/bal.h b/src/app/application/bal/bal.h index 3c41cf18..fca74d47 100644 --- a/src/app/application/bal/bal.h +++ b/src/app/application/bal/bal.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file bal.h * @author foxBMS Team * @date 2020-02-24 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup APPLICATION * @prefix BAL * * @brief Header for the driver for balancing - * + * @details TODO */ #ifndef FOXBMS__BAL_H_ @@ -76,9 +76,9 @@ typedef enum { BAL_STATEMACH_CHECK_BALANCING, /*!< */ BAL_STATEMACH_BALANCE, /*!< */ BAL_STATEMACH_NO_BALANCING, /*!< */ - BAL_STATEMACH_ALLOWBALANCING, /*!< */ - BAL_STATEMACH_GLOBALDISABLE, /*!< */ - BAL_STATEMACH_GLOBALENABLE, /*!< */ + BAL_STATEMACH_ALLOW_BALANCING, /*!< */ + BAL_STATEMACH_GLOBAL_DISABLE, /*!< */ + BAL_STATEMACH_GLOBAL_ENABLE, /*!< */ BAL_STATEMACH_UNDEFINED, /*!< undefined state */ BAL_STATEMACH_RESERVED1, /*!< reserved state */ BAL_STATEMACH_ERROR, /*!< Error-State: */ @@ -100,13 +100,13 @@ typedef enum { * State requests for the BAL state machine */ typedef enum { - BAL_STATE_INIT_REQUEST, /*!< */ - BAL_STATE_ERROR_REQUEST, /*!< */ - BAL_STATE_NO_BALANCING_REQUEST, /*!< */ - BAL_STATE_ALLOWBALANCING_REQUEST, /*!< */ - BAL_STATE_GLOBAL_DISABLE_REQUEST, /*!< */ - BAL_STATE_GLOBAL_ENABLE_REQUEST, /*!< */ - BAL_STATE_NO_REQUEST, /*!< default state: no request to the state machine */ + BAL_STATE_INIT_REQUEST, /*!< */ + BAL_STATE_ERROR_REQUEST, /*!< */ + BAL_STATE_NO_BALANCING_REQUEST, /*!< */ + BAL_STATE_ALLOW_BALANCING_REQUEST, /*!< */ + BAL_STATE_GLOBAL_DISABLE_REQUEST, /*!< */ + BAL_STATE_GLOBAL_ENABLE_REQUEST, /*!< */ + BAL_STATE_NO_REQUEST, /*!< default state: no request to the state machine */ } BAL_STATE_REQUEST_e; /** @@ -184,7 +184,7 @@ extern BAL_RETURN_TYPE_e BAL_CheckStateRequest(BAL_STATE_s *pCurrentState, BAL_S * @param pCurrentState pointer to the current state * @param stateRequest state request to set */ -extern void BAL_ProcessStateUninitalized(BAL_STATE_s *pCurrentState, BAL_STATE_REQUEST_e stateRequest); +extern void BAL_ProcessStateUninitialized(BAL_STATE_s *pCurrentState, BAL_STATE_REQUEST_e stateRequest); /** * @brief State machine subfunction to initialize the balancing state machine @@ -193,7 +193,7 @@ extern void BAL_ProcessStateUninitalized(BAL_STATE_s *pCurrentState, BAL_STATE_R extern void BAL_ProcessStateInitialization(BAL_STATE_s *currentState); /** - * @brief State machine subfunction to transfer from an initalized state to + * @brief State machine subfunction to transfer from an initialized state to * "running" states of th state machine * @details TODO */ diff --git a/src/app/application/bal/history/bal_strategy_history.c b/src/app/application/bal/history/bal_strategy_history.c index 8c51cf01..8d3e6ebf 100644 --- a/src/app/application/bal/history/bal_strategy_history.c +++ b/src/app/application/bal/history/bal_strategy_history.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file bal_strategy_history.c * @author foxBMS Team * @date 2020-05-29 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup APPLICATION * @prefix BAL * * @brief Driver for the Balancing module - * + * @details TODO */ /*========== Includes =======================================================*/ @@ -130,27 +130,28 @@ static void BAL_ActivateBalancing(void) { for (uint8_t s = 0u; s < BS_NR_OF_STRINGS; s++) { uint16_t nrBalancedCells = 0u; - for (uint16_t c = 0u; c < BS_NR_OF_CELL_BLOCKS_PER_STRING; c++) { - if (bal_state.balancingAllowed == false) { - bal_balancing.balancingState[s][c] = 0; - } else { - if (bal_balancing.deltaCharge_mAs[s][c] > 0) { - bal_balancing.balancingState[s][c] = 1; - nrBalancedCells++; - uint8_t moduleNumber = c / BS_NR_OF_CELL_BLOCKS_PER_MODULE; - cellBalancingCurrent = ((float_t)(bal_cellVoltage.cellVoltage_mV[s][moduleNumber][c])) / - BS_BALANCING_RESISTANCE_ohm; - difference = (BAL_STATEMACH_BALANCINGTIME_100ms / 10u) * (uint32_t)(cellBalancingCurrent); - bal_state.active = true; - bal_balancing.enableBalancing = 1; - /* we are working with unsigned integers */ - if (difference > bal_balancing.deltaCharge_mAs[s][c]) { - bal_balancing.deltaCharge_mAs[s][c] = 0; + for (uint8_t m = 0u; m < BS_NR_OF_MODULES_PER_STRING; m++) { + for (uint16_t cb = 0u; cb < BS_NR_OF_CELL_BLOCKS_PER_MODULE; cb++) { + if (bal_state.balancingAllowed == false) { + bal_balancing.activateBalancing[s][m][cb] = false; + } else { + if (bal_balancing.deltaCharge_mAs[s][m][cb] > 0u) { + bal_balancing.activateBalancing[s][m][cb] = true; + nrBalancedCells++; + cellBalancingCurrent = ((float_t)(bal_cellVoltage.cellVoltage_mV[s][m][cb])) / + BS_BALANCING_RESISTANCE_ohm; + difference = (BAL_STATEMACH_BALANCING_TIME_100ms / 10u) * (uint32_t)(cellBalancingCurrent); + bal_state.active = true; + bal_balancing.enableBalancing = true; + /* we are working with unsigned integers */ + if (difference > bal_balancing.deltaCharge_mAs[s][m][cb]) { + bal_balancing.deltaCharge_mAs[s][m][cb] = 0u; + } else { + bal_balancing.deltaCharge_mAs[s][m][cb] -= difference; + } } else { - bal_balancing.deltaCharge_mAs[s][c] -= difference; + bal_balancing.activateBalancing[s][m][cb] = false; } - } else { - bal_balancing.balancingState[s][c] = 0; } } } @@ -162,13 +163,15 @@ static void BAL_ActivateBalancing(void) { static void BAL_Deactivate(void) { for (uint8_t s = 0u; s < BS_NR_OF_STRINGS; s++) { - for (uint16_t c = 0u; c < BS_NR_OF_CELL_BLOCKS_PER_STRING; c++) { - bal_balancing.balancingState[s][c] = 0; - bal_balancing.deltaCharge_mAs[s][c] = 0; + for (uint8_t m = 0u; m < BS_NR_OF_MODULES_PER_STRING; m++) { + for (uint16_t cb = 0u; cb < BS_NR_OF_CELL_BLOCKS_PER_MODULE; cb++) { + bal_balancing.activateBalancing[s][m][cb] = false; + bal_balancing.deltaCharge_mAs[s][m][cb] = 0u; + } } bal_balancing.nrBalancedCells[s] = 0u; } - bal_balancing.enableBalancing = 0; + bal_balancing.enableBalancing = false; bal_state.active = false; DATA_WRITE_DATA(&bal_balancing); @@ -229,13 +232,13 @@ static void BAL_ProcessStateBalancing(void) { bal_state.timer = BAL_STATEMACH_SHORTTIME_100ms; return; } else if (bal_state.substate == BAL_ACTIVATE_BALANCING) { - DATA_BLOCK_MIN_MAX_s bal_minmax = {.header.uniqueId = DATA_BLOCK_ID_MIN_MAX}; - DATA_READ_DATA(&bal_minmax); - bal_state.timer = BAL_STATEMACH_BALANCINGTIME_100ms; + DATA_BLOCK_MIN_MAX_s bal_minMax = {.header.uniqueId = DATA_BLOCK_ID_MIN_MAX}; + DATA_READ_DATA(&bal_minMax); + bal_state.timer = BAL_STATEMACH_BALANCING_TIME_100ms; /* do not balance under a certain voltage level */ for (uint8_t s = 0u; s < BS_NR_OF_STRINGS; s++) { - if ((bal_minmax.minimumCellVoltage_mV[s] <= BAL_LOWER_VOLTAGE_LIMIT_mV) || - (bal_minmax.maximumTemperature_ddegC[s] >= BAL_UPPER_TEMPERATURE_LIMIT_ddegC) || + if ((bal_minMax.minimumCellVoltage_mV[s] <= BAL_LOWER_VOLTAGE_LIMIT_mV) || + (bal_minMax.maximumTemperature_ddegC[s] >= BAL_UPPER_TEMPERATURE_LIMIT_ddegC) || (BAL_CheckImbalances() == false) || (bal_state.balancingGlobalAllowed == false)) { activateBalancing = false; if (bal_state.active == true) { @@ -254,26 +257,27 @@ static void BAL_ProcessStateBalancing(void) { } } static bool BAL_CheckImbalances(void) { - bool retVal = false; + bool returnValue = false; for (uint8_t s = 0u; s < BS_NR_OF_STRINGS; s++) { - for (uint16_t c = 0u; c < BS_NR_OF_CELL_BLOCKS_PER_STRING; c++) { - if (bal_balancing.deltaCharge_mAs[s][c] > 0) { - retVal = true; + for (uint8_t m = 0u; m < BS_NR_OF_MODULES_PER_STRING; m++) { + for (uint16_t cb = 0u; cb < BS_NR_OF_CELL_BLOCKS_PER_MODULE; cb++) { + if (bal_balancing.deltaCharge_mAs[s][m][cb] > 0) { + returnValue = true; + } } } } - - return retVal; + return returnValue; } static void BAL_ComputeImbalances(void) { int16_t voltageMin_mV = 0; - uint16_t minVoltageModuleIndex = 0; - uint16_t minVoltageModuleCellBlockIndex = 0; + uint16_t minVoltageModuleIndex = 0u; + uint16_t minVoltageModuleCellBlockIndex = 0u; float_t SOC = 0.0f; - uint32_t DOD = 0; - uint32_t maxDOD = 0; + uint32_t DOD = 0u; + uint32_t maxDOD = 0u; DATA_READ_DATA(&bal_balancing, &bal_cellVoltage); @@ -296,9 +300,7 @@ static void BAL_ComputeImbalances(void) { ((float_t)(bal_cellVoltage.cellVoltage_mV[s][minVoltageModuleIndex][minVoltageModuleCellBlockIndex])) / 1000.0f); maxDOD = BC_CAPACITY_mAh * (uint32_t)((1.0f - SOC) * 3600.0f); - bal_balancing.deltaCharge_mAs[s] - [(minVoltageModuleIndex * BS_NR_OF_CELL_BLOCKS_PER_MODULE) + - minVoltageModuleCellBlockIndex] = 0u; + bal_balancing.deltaCharge_mAs[s][minVoltageModuleIndex][minVoltageModuleCellBlockIndex] = 0u; /* update balancing threshold */ bal_state.balancingThreshold = BAL_GetBalancingThreshold_mV() + BAL_HYSTERESIS_mV; @@ -309,8 +311,8 @@ static void BAL_ComputeImbalances(void) { if (bal_cellVoltage.cellVoltage_mV[s][m][cb] >= (voltageMin_mV + bal_state.balancingThreshold)) { SOC = SE_GetStateOfChargeFromVoltage( ((float_t)(bal_cellVoltage.cellVoltage_mV[s][m][cb])) / 1000.0f); - DOD = BC_CAPACITY_mAh * (uint32_t)((1.0f - SOC) * 3600.0f); - bal_balancing.deltaCharge_mAs[s][(m * BS_NR_OF_CELL_BLOCKS_PER_MODULE) + cb] = (maxDOD - DOD); + DOD = BC_CAPACITY_mAh * (uint32_t)((1.0f - SOC) * 3600.0f); + bal_balancing.deltaCharge_mAs[s][m][cb] = (maxDOD - DOD); } } } @@ -326,17 +328,17 @@ extern STD_RETURN_TYPE_e BAL_GetInitializationState(void) { } extern BAL_RETURN_TYPE_e BAL_SetStateRequest(BAL_STATE_REQUEST_e stateRequest) { - BAL_RETURN_TYPE_e retVal = BAL_OK; + BAL_RETURN_TYPE_e returnValue = BAL_OK; OS_EnterTaskCritical(); - retVal = BAL_CheckStateRequest(&bal_state, stateRequest); + returnValue = BAL_CheckStateRequest(&bal_state, stateRequest); - if (retVal == BAL_OK) { + if (returnValue == BAL_OK) { bal_state.stateRequest = stateRequest; } OS_ExitTaskCritical(); - return retVal; + return returnValue; } extern void BAL_Trigger(void) { @@ -358,7 +360,7 @@ extern void BAL_Trigger(void) { case BAL_STATEMACH_UNINITIALIZED: BAL_SaveLastStates(&bal_state); stateRequest = BAL_TransferStateRequest(&bal_state); - BAL_ProcessStateUninitalized(&bal_state, stateRequest); + BAL_ProcessStateUninitialized(&bal_state, stateRequest); break; case BAL_STATEMACH_INITIALIZATION: BAL_SaveLastStates(&bal_state); diff --git a/src/app/application/bal/none/bal_strategy_none.c b/src/app/application/bal/none/bal_strategy_none.c index b4e2a602..98fc5004 100644 --- a/src/app/application/bal/none/bal_strategy_none.c +++ b/src/app/application/bal/none/bal_strategy_none.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,14 +43,14 @@ * @file bal_strategy_none.c * @author foxBMS Team * @date 2020-07-02 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup APPLICATION * @prefix BAL * * @brief WEAK Driver for the Balancing module for ICs that to not support * balancing - * + * @details TODO */ /*========== Includes =======================================================*/ diff --git a/src/app/application/bal/voltage/bal_strategy_voltage.c b/src/app/application/bal/voltage/bal_strategy_voltage.c index 954ed683..3ed71bb1 100644 --- a/src/app/application/bal/voltage/bal_strategy_voltage.c +++ b/src/app/application/bal/voltage/bal_strategy_voltage.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file bal_strategy_voltage.c * @author foxBMS Team * @date 2020-05-29 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup APPLICATION * @prefix BAL * * @brief Driver for the Balancing module - * + * @details TODO */ /*========== Includes =======================================================*/ @@ -134,15 +134,15 @@ static bool BAL_ActivateBalancing(void) { for (uint8_t m = 0u; m < BS_NR_OF_MODULES_PER_STRING; m++) { for (uint8_t cb = 0u; cb < BS_NR_OF_CELL_BLOCKS_PER_MODULE; cb++) { if (cellVoltage.cellVoltage_mV[s][m][cb] > (min + bal_state.balancingThreshold)) { - bal_balancing.balancingState[s][(m * BS_NR_OF_CELL_BLOCKS_PER_MODULE) + cb] = 1u; - finished = false; + bal_balancing.activateBalancing[s][m][cb] = true; + finished = false; /* set without hysteresis so that we now balance all cells that are below the initial threshold */ bal_state.balancingThreshold = BAL_GetBalancingThreshold_mV(); bal_state.active = true; - bal_balancing.enableBalancing = 1; + bal_balancing.enableBalancing = true; nrBalancedCells++; } else { - bal_balancing.balancingState[s][(m * BS_NR_OF_CELL_BLOCKS_PER_MODULE) + cb] = 0; + bal_balancing.activateBalancing[s][m][cb] = false; } } } @@ -155,13 +155,15 @@ static bool BAL_ActivateBalancing(void) { static void BAL_Deactivate(void) { for (uint8_t s = 0u; s < BS_NR_OF_STRINGS; s++) { - for (uint16_t i = 0u; i < BS_NR_OF_CELL_BLOCKS_PER_STRING; i++) { - bal_balancing.balancingState[s][i] = 0; - bal_balancing.deltaCharge_mAs[s][i] = 0; + for (uint8_t m = 0u; m < BS_NR_OF_MODULES_PER_STRING; m++) { + for (uint16_t cb = 0u; cb < BS_NR_OF_CELL_BLOCKS_PER_MODULE; cb++) { + bal_balancing.activateBalancing[s][m][cb] = false; + bal_balancing.deltaCharge_mAs[s][m][cb] = 0u; + } } bal_balancing.nrBalancedCells[s] = 0u; } - bal_balancing.enableBalancing = 0; + bal_balancing.enableBalancing = false; bal_state.active = false; DATA_WRITE_DATA(&bal_balancing); @@ -171,7 +173,7 @@ static void BAL_ProcessStateCheckBalancing(BAL_STATE_REQUEST_e state_request) { if (state_request == BAL_STATE_NO_BALANCING_REQUEST) { bal_state.balancingAllowed = false; } - if (state_request == BAL_STATE_ALLOWBALANCING_REQUEST) { + if (state_request == BAL_STATE_ALLOW_BALANCING_REQUEST) { bal_state.balancingAllowed = true; } @@ -192,7 +194,7 @@ static void BAL_ProcessStateBalancing(BAL_STATE_REQUEST_e state_request) { if (state_request == BAL_STATE_NO_BALANCING_REQUEST) { bal_state.balancingAllowed = false; } - if (state_request == BAL_STATE_ALLOWBALANCING_REQUEST) { + if (state_request == BAL_STATE_ALLOW_BALANCING_REQUEST) { bal_state.balancingAllowed = true; } @@ -236,7 +238,7 @@ static void BAL_ProcessStateBalancing(BAL_STATE_REQUEST_e state_request) { bal_state.substate = BAL_ENTRY; } } - bal_state.timer = BAL_STATEMACH_BALANCINGTIME_100ms; + bal_state.timer = BAL_STATEMACH_BALANCING_TIME_100ms; return; } else if (bal_state.substate == BAL_CHECK_CURRENT) { if (BMS_GetBatterySystemState() == BMS_AT_REST) { @@ -248,7 +250,7 @@ static void BAL_ProcessStateBalancing(BAL_STATE_REQUEST_e state_request) { bal_state.state = BAL_STATEMACH_CHECK_BALANCING; bal_state.substate = BAL_ENTRY; } - bal_state.timer = BAL_STATEMACH_BALANCINGTIME_100ms; + bal_state.timer = BAL_STATEMACH_BALANCING_TIME_100ms; return; } else if (bal_state.substate == BAL_ACTIVATE_BALANCING) { if (bal_state.balancingAllowed == false) { @@ -260,7 +262,7 @@ static void BAL_ProcessStateBalancing(BAL_STATE_REQUEST_e state_request) { bal_state.substate = BAL_ENTRY; } else { if (BAL_ActivateBalancing() == true) { - /* set threshold with hysteresis in order to prevent too early reenabling of balancing */ + /* set threshold with hysteresis in order to prevent too early re-enabling of balancing */ bal_state.balancingThreshold = BAL_GetBalancingThreshold_mV() + BAL_HYSTERESIS_mV; bal_state.state = BAL_STATEMACH_CHECK_BALANCING; bal_state.substate = BAL_ENTRY; @@ -269,7 +271,7 @@ static void BAL_ProcessStateBalancing(BAL_STATE_REQUEST_e state_request) { bal_state.substate = BAL_ENTRY; } } - bal_state.timer = BAL_STATEMACH_BALANCINGTIME_100ms; + bal_state.timer = BAL_STATEMACH_BALANCING_TIME_100ms; return; } } @@ -280,17 +282,17 @@ extern STD_RETURN_TYPE_e BAL_GetInitializationState(void) { } extern BAL_RETURN_TYPE_e BAL_SetStateRequest(BAL_STATE_REQUEST_e stateRequest) { - BAL_RETURN_TYPE_e retVal = BAL_OK; + BAL_RETURN_TYPE_e returnValue = BAL_OK; OS_EnterTaskCritical(); - retVal = BAL_CheckStateRequest(&bal_state, stateRequest); + returnValue = BAL_CheckStateRequest(&bal_state, stateRequest); - if (retVal == BAL_OK) { + if (returnValue == BAL_OK) { bal_state.stateRequest = stateRequest; } OS_ExitTaskCritical(); - return retVal; + return returnValue; } extern void BAL_Trigger(void) { @@ -312,7 +314,7 @@ extern void BAL_Trigger(void) { case BAL_STATEMACH_UNINITIALIZED: BAL_SaveLastStates(&bal_state); stateRequest = BAL_TransferStateRequest(&bal_state); - BAL_ProcessStateUninitalized(&bal_state, stateRequest); + BAL_ProcessStateUninitialized(&bal_state, stateRequest); break; case BAL_STATEMACH_INITIALIZATION: BAL_SaveLastStates(&bal_state); diff --git a/src/app/application/bal/voltage/bal_strategy_voltage.h b/src/app/application/bal/voltage/bal_strategy_voltage.h index 2db6fad6..0a03bf5e 100644 --- a/src/app/application/bal/voltage/bal_strategy_voltage.h +++ b/src/app/application/bal/voltage/bal_strategy_voltage.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file bal_strategy_voltage.h * @author foxBMS Team * @date 2020-05-29 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup APPLICATION * @prefix BALS * * @brief Header for the voltage-based balancing strategy module - * + * @details TODO */ #ifndef FOXBMS__BAL_STRATEGY_VOLTAGE_H_ diff --git a/src/app/application/bms/bms.c b/src/app/application/bms/bms.c index a4238baf..e6b3b68b 100644 --- a/src/app/application/bms/bms.c +++ b/src/app/application/bms/bms.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,12 +43,13 @@ * @file bms.c * @author foxBMS Team * @date 2020-02-24 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup ENGINE * @prefix BMS * * @brief bms driver implementation + * @details TODO */ /*========== Includes =======================================================*/ @@ -77,9 +78,9 @@ /** * Saves the last state and the last substate */ -#define BMS_SAVELASTSTATES() \ - bms_state.laststate = bms_state.state; \ - bms_state.lastsubstate = bms_state.substate +#define BMS_SAVE_LAST_STATES() \ + bms_state.lastState = bms_state.state; \ + bms_state.lastSubstate = bms_state.substate /*========== Static Constant and Variable Definitions =======================*/ @@ -91,8 +92,8 @@ static BMS_STATE_s bms_state = { .stateRequest = BMS_STATE_NO_REQUEST, .state = BMS_STATEMACH_UNINITIALIZED, .substate = BMS_ENTRY, - .laststate = BMS_STATEMACH_UNINITIALIZED, - .lastsubstate = BMS_ENTRY, + .lastState = BMS_STATEMACH_UNINITIALIZED, + .lastSubstate = BMS_ENTRY, .triggerentry = 0u, .ErrRequestCounter = 0u, .initFinished = STD_NOT_OK, @@ -106,9 +107,9 @@ static BMS_STATE_s bms_state = { .deactivatedStrings = {0}, .firstClosedString = 0u, .stringOpenTimeout = 0u, - .nextstringclosedtimer = 0u, + .nextStringClosedTimer = 0u, .stringCloseTimeout = 0u, - .nextstate = BMS_STATEMACH_STANDBY, + .nextState = BMS_STATEMACH_STANDBY, .restTimer_10ms = BS_RELAXATION_PERIOD_10ms, .currentFlowState = BMS_RELAXATION, .remainingDelay_ms = BMS_NO_ACTIVE_DELAY_TIME_ms, @@ -218,9 +219,9 @@ static STD_RETURN_TYPE_e BMS_CheckPrecharge(uint8_t stringNumber, const DATA_BLO /** * @brief Returns ID of string with highest total voltage * @details This is used to close the first string when drive-off is requested. - * @param[in] precharge If #BMS_DO_NOT_TAKE_PRECHARGE_INTO_ACCCOUNT, + * @param[in] precharge If #BMS_DO_NOT_TAKE_PRECHARGE_INTO_ACCOUNT, * precharge availability for string is ignored. - * if #BMS_TAKE_PRECHARGE_INTO_ACCCOUNT, only select + * if #BMS_TAKE_PRECHARGE_INTO_ACCOUNT, only select * string that has precharge available. * @param[in] pPackValues pointer to pack values database entry * @return index of string with highest voltage If no string is available, @@ -231,9 +232,9 @@ static uint8_t BMS_GetHighestString(BMS_CONSIDER_PRECHARGE_e precharge, DATA_BLO /** * @brief Returns ID of string with voltage closest to first closed string voltage * @details This is used to close further strings in drive. - * @param[in] precharge If #BMS_DO_NOT_TAKE_PRECHARGE_INTO_ACCCOUNT, + * @param[in] precharge If #BMS_DO_NOT_TAKE_PRECHARGE_INTO_ACCOUNT, * precharge availability for string is ignored. - * if #BMS_TAKE_PRECHARGE_INTO_ACCCOUNT, only select + * if #BMS_TAKE_PRECHARGE_INTO_ACCOUNT, only select * string that has precharge available. * @param[in] pPackValues pointer to pack values database entry * @return index of string with voltage closest to the first closed string voltage. @@ -280,7 +281,7 @@ static int32_t BMS_GetAverageStringCurrent(DATA_BLOCK_PACK_VALUES_s *pPackValues * current values * @param[in] pPackValues recent measured values from current sensor */ -static void BMS_UpdateBatsysState(DATA_BLOCK_PACK_VALUES_s *pPackValues); +static void BMS_UpdateBatterySystemState(DATA_BLOCK_PACK_VALUES_s *pPackValues); /** * @brief Get first string contactor that should be opened depending on the @@ -288,7 +289,7 @@ static void BMS_UpdateBatsysState(DATA_BLOCK_PACK_VALUES_s *pPackValues); * @details Check the mounting direction of the contactors and open the * contactor that is mounted in the preferred current flow direction. * Open the plus contactor first if, there is no contactor in - * preferred direction to the curren flow to open available. This may + * preferred direction to the current flow to open available. This may * be either because both contactors are installed in the same * direction or because the contactors are bidirectional. * @param stringNumber string that will be opened @@ -545,7 +546,7 @@ static uint8_t BMS_GetHighestString(BMS_CONSIDER_PRECHARGE_e precharge, DATA_BLO if ((pPackValues->stringVoltage_mV[s] >= max_stringVoltage_mV) && (pPackValues->invalidStringVoltage[s] == 0u)) { if (bms_state.deactivatedStrings[s] == 0u) { - if (precharge == BMS_DO_NOT_TAKE_PRECHARGE_INTO_ACCCOUNT) { + if (precharge == BMS_DO_NOT_TAKE_PRECHARGE_INTO_ACCOUNT) { max_stringVoltage_mV = pPackValues->stringVoltage_mV[s]; highest_string_index = s; } else { @@ -590,7 +591,7 @@ static uint8_t BMS_GetClosestString(BMS_CONSIDER_PRECHARGE_e precharge, DATA_BLO int32_t voltageDifference_mV = labs(closedStringVoltage_mV - pPackValues->stringVoltage_mV[s]); if (voltageDifference_mV <= minimumVoltageDifference_mV) { if (bms_state.deactivatedStrings[s] == 0u) { - if (precharge == BMS_TAKE_PRECHARGE_INTO_ACCCOUNT) { + if (precharge == BMS_TAKE_PRECHARGE_INTO_ACCOUNT) { if (bs_stringsWithPrecharge[s] == BS_STRING_WITH_PRECHARGE) { minimumVoltageDifference_mV = voltageDifference_mV; closestStringIndex = s; @@ -616,7 +617,7 @@ static uint8_t BMS_GetLowestString(BMS_CONSIDER_PRECHARGE_e precharge, DATA_BLOC if ((pPackValues->stringVoltage_mV[s] <= min_stringVoltage_mV) && (pPackValues->invalidStringVoltage[s] == 0u)) { if (bms_state.deactivatedStrings[s] == 0u) { - if (precharge == BMS_DO_NOT_TAKE_PRECHARGE_INTO_ACCCOUNT) { + if (precharge == BMS_DO_NOT_TAKE_PRECHARGE_INTO_ACCOUNT) { min_stringVoltage_mV = pPackValues->stringVoltage_mV[s]; lowest_string_index = s; } else { @@ -660,7 +661,7 @@ static int32_t BMS_GetAverageStringCurrent(DATA_BLOCK_PACK_VALUES_s *pPackValues return average_current; } -static void BMS_UpdateBatsysState(DATA_BLOCK_PACK_VALUES_s *pPackValues) { +static void BMS_UpdateBatterySystemState(DATA_BLOCK_PACK_VALUES_s *pPackValues) { FAS_ASSERT(pPackValues != NULL_PTR); /* Only update system state if current value is valid */ @@ -675,7 +676,7 @@ static void BMS_UpdateBatsysState(DATA_BLOCK_PACK_VALUES_s *pPackValues) { bms_state.restTimer_10ms = BS_RELAXATION_PERIOD_10ms; } else { /* Current below rest current: either battery system is at rest - * or the relaxation process is still ongoing */ + * or the relaxation process is still ongoing */ if (bms_state.restTimer_10ms == 0u) { /* Rest timer elapsed -> battery system at rest */ bms_state.currentFlowState = BMS_AT_REST; @@ -694,7 +695,7 @@ static void BMS_UpdateBatsysState(DATA_BLOCK_PACK_VALUES_s *pPackValues) { bms_state.restTimer_10ms = BS_RELAXATION_PERIOD_10ms; } else { /* Current below rest current: either battery system is at rest - * or the relaxation process is still ongoing */ + * or the relaxation process is still ongoing */ if (bms_state.restTimer_10ms == 0u) { /* Rest timer elapsed -> battery system at rest */ bms_state.currentFlowState = BMS_AT_REST; @@ -824,7 +825,7 @@ BMS_RETURN_TYPE_e BMS_SetStateRequest(BMS_STATE_REQUEST_e statereq) { void BMS_Trigger(void) { BMS_STATE_REQUEST_e statereq = BMS_STATE_NO_REQUEST; - DATA_BLOCK_SYSTEM_STATE_s systemstate = {.header.uniqueId = DATA_BLOCK_ID_SYSTEM_STATE}; + DATA_BLOCK_SYSTEM_STATE_s systemState = {.header.uniqueId = DATA_BLOCK_ID_SYSTEM_STATE}; uint32_t timestamp = OS_GetTickCount(); static uint32_t nextOpenWireCheck = 0; STD_RETURN_TYPE_e retVal = STD_NOT_OK; @@ -836,7 +837,7 @@ void BMS_Trigger(void) { if (bms_state.state != BMS_STATEMACH_UNINITIALIZED) { BMS_GetMeasurementValues(); - BMS_UpdateBatsysState(&bms_tablePackValues); + BMS_UpdateBatterySystemState(&bms_tablePackValues); SOA_CheckVoltages(&bms_tableMinMax); SOA_CheckTemperatures(&bms_tableMinMax, &bms_tablePackValues); SOA_CheckCurrent(&bms_tablePackValues); @@ -849,8 +850,8 @@ void BMS_Trigger(void) { return; } - if (bms_state.nextstringclosedtimer > 0u) { - bms_state.nextstringclosedtimer--; + if (bms_state.nextStringClosedTimer > 0u) { + bms_state.nextStringClosedTimer--; } if (bms_state.stringOpenTimeout > 0u) { bms_state.stringOpenTimeout--; @@ -878,7 +879,7 @@ void BMS_Trigger(void) { /* waiting for Initialization Request */ statereq = BMS_TransferStateRequest(); if (statereq == BMS_STATE_INIT_REQUEST) { - BMS_SAVELASTSTATES(); + BMS_SAVE_LAST_STATES(); bms_state.timer = BMS_STATEMACH_SHORTTIME; bms_state.state = BMS_STATEMACH_INITIALIZATION; bms_state.substate = BMS_ENTRY; @@ -891,7 +892,7 @@ void BMS_Trigger(void) { /****************************INITIALIZATION***************************/ case BMS_STATEMACH_INITIALIZATION: - BMS_SAVELASTSTATES(); + BMS_SAVE_LAST_STATES(); /* Reset ALERT mode flag */ DIAG_Handler(DIAG_ID_ALERT_MODE, DIAG_EVENT_OK, DIAG_SYSTEM, 0u); bms_state.initFinished = STD_OK; @@ -902,7 +903,7 @@ void BMS_Trigger(void) { /****************************INITIALIZED******************************/ case BMS_STATEMACH_INITIALIZED: - BMS_SAVELASTSTATES(); + BMS_SAVE_LAST_STATES(); if (IMD_RequestInsulationMeasurement() == IMD_ILLEGAL_REQUEST) { /* Initialization of IMD device not finished yet -> wait until this is finished before moving on */ bms_state.timer = BMS_STATEMACH_LONGTIME; @@ -915,12 +916,12 @@ void BMS_Trigger(void) { /****************************IDLE*************************************/ case BMS_STATEMACH_IDLE: - BMS_SAVELASTSTATES(); + BMS_SAVE_LAST_STATES(); if (bms_state.substate == BMS_ENTRY) { - DATA_READ_DATA(&systemstate); - systemstate.bmsCanState = BMS_CANSTATE_IDLE; - DATA_WRITE_DATA(&systemstate); + DATA_READ_DATA(&systemState); + systemState.bmsCanState = BMS_CAN_STATE_IDLE; + DATA_WRITE_DATA(&systemState); bms_state.timer = BMS_STATEMACH_SHORTTIME; bms_state.substate = BMS_CHECK_ERROR_FLAGS; break; @@ -928,7 +929,7 @@ void BMS_Trigger(void) { if (BMS_IsBatterySystemStateOkay() == STD_NOT_OK) { bms_state.timer = BMS_STATEMACH_SHORTTIME; bms_state.state = BMS_STATEMACH_OPEN_CONTACTORS; - bms_state.nextstate = BMS_STATEMACH_ERROR; + bms_state.nextState = BMS_STATEMACH_ERROR; bms_state.substate = BMS_ENTRY; break; } else { @@ -939,7 +940,7 @@ void BMS_Trigger(void) { } else if (bms_state.substate == BMS_CHECK_STATE_REQUESTS) { bms_state.timer = BMS_STATEMACH_SHORTTIME; bms_state.state = BMS_STATEMACH_OPEN_CONTACTORS; - bms_state.nextstate = BMS_STATEMACH_STANDBY; + bms_state.nextState = BMS_STATEMACH_STANDBY; bms_state.substate = BMS_ENTRY; break; } @@ -947,14 +948,14 @@ void BMS_Trigger(void) { /****************************OPEN CONTACTORS**************************/ case BMS_STATEMACH_OPEN_CONTACTORS: - BMS_SAVELASTSTATES(); + BMS_SAVE_LAST_STATES(); if (bms_state.substate == BMS_ENTRY) { BAL_SetStateRequest(BAL_STATE_NO_BALANCING_REQUEST); bms_state.timer = BMS_STATEMACH_SHORTTIME; - bms_state.substate = BMS_OPEN_ALL_PRECHARGES; + bms_state.substate = BMS_OPEN_ALL_PRECHARGE_CONTACTORS; break; - } else if (bms_state.substate == BMS_OPEN_ALL_PRECHARGES) { + } else if (bms_state.substate == BMS_OPEN_ALL_PRECHARGE_CONTACTORS) { /* Precharge contactors can always be opened as the precharge * resistor limits the maximum current */ CONT_OpenAllPrechargeContactors(); @@ -973,7 +974,7 @@ void BMS_Trigger(void) { /* Current is below maximum break current -> open first contactor * Check the mounting direction of the contactors and open the contactor that is mounted in the * preferred current flow direction. Open the plus contactor first if, there is no contactor - * in preferred direction to the curren flow to open available. This may be either because both + * in preferred direction to the current flow to open available. This may be either because both * contactors are installed in the same direction or because the contactors are bidirectional. */ const BMS_CURRENT_FLOW_STATE_e flowDirection = @@ -1071,7 +1072,7 @@ void BMS_Trigger(void) { break; } } else if (bms_state.substate == BMS_OPEN_STRINGS_EXIT) { - if (bms_state.nextstate == BMS_STATEMACH_STANDBY) { + if (bms_state.nextState == BMS_STATEMACH_STANDBY) { /* Opening due to STANDBY request -> switch to BMS_STATEMACH_STANDBY */ bms_state.timer = BMS_STATEMACH_SHORTTIME; bms_state.state = BMS_STATEMACH_STANDBY; @@ -1090,23 +1091,23 @@ void BMS_Trigger(void) { /****************************STANDBY**********************************/ case BMS_STATEMACH_STANDBY: - BMS_SAVELASTSTATES(); + BMS_SAVE_LAST_STATES(); if (bms_state.substate == BMS_ENTRY) { - BAL_SetStateRequest(BAL_STATE_ALLOWBALANCING_REQUEST); + BAL_SetStateRequest(BAL_STATE_ALLOW_BALANCING_REQUEST); #if BS_STANDBY_PERIODIC_OPEN_WIRE_CHECK == TRUE nextOpenWireCheck = timestamp + BS_STANDBY_OPEN_WIRE_PERIOD_ms; #endif /* BS_STANDBY_PERIODIC_OPEN_WIRE_CHECK == TRUE */ - bms_state.timer = BMS_STATEMACH_MEDIUMTIME; + bms_state.timer = BMS_STATEMACH_MEDIUM_TIME; bms_state.substate = BMS_CHECK_ERROR_FLAGS_INTERLOCK; - DATA_READ_DATA(&systemstate); - systemstate.bmsCanState = BMS_CANSTATE_STANDBY; - DATA_WRITE_DATA(&systemstate); + DATA_READ_DATA(&systemState); + systemState.bmsCanState = BMS_CAN_STATE_STANDBY; + DATA_WRITE_DATA(&systemState); break; } else if (bms_state.substate == BMS_CHECK_ERROR_FLAGS_INTERLOCK) { if (BMS_IsBatterySystemStateOkay() == STD_NOT_OK) { bms_state.timer = BMS_STATEMACH_SHORTTIME; bms_state.state = BMS_STATEMACH_OPEN_CONTACTORS; - bms_state.nextstate = BMS_STATEMACH_ERROR; + bms_state.nextState = BMS_STATEMACH_ERROR; bms_state.substate = BMS_ENTRY; break; } else { @@ -1122,7 +1123,7 @@ void BMS_Trigger(void) { if (BMS_IsBatterySystemStateOkay() == STD_NOT_OK) { bms_state.timer = BMS_STATEMACH_SHORTTIME; bms_state.state = BMS_STATEMACH_OPEN_CONTACTORS; - bms_state.nextstate = BMS_STATEMACH_ERROR; + bms_state.nextState = BMS_STATEMACH_ERROR; bms_state.substate = BMS_ENTRY; break; } else { @@ -1133,7 +1134,7 @@ void BMS_Trigger(void) { } else if (bms_state.substate == BMS_CHECK_STATE_REQUESTS) { if (BMS_CheckCanRequests() == BMS_REQ_ID_NORMAL) { bms_state.powerPath = BMS_POWER_PATH_0; - bms_state.nextstate = BMS_STATEMACH_DISCHARGE; + bms_state.nextState = BMS_STATEMACH_DISCHARGE; bms_state.timer = BMS_STATEMACH_SHORTTIME; bms_state.state = BMS_STATEMACH_PRECHARGE; bms_state.substate = BMS_ENTRY; @@ -1141,7 +1142,7 @@ void BMS_Trigger(void) { } if (BMS_CheckCanRequests() == BMS_REQ_ID_CHARGE) { bms_state.powerPath = BMS_POWER_PATH_1; - bms_state.nextstate = BMS_STATEMACH_CHARGE; + bms_state.nextState = BMS_STATEMACH_CHARGE; bms_state.timer = BMS_STATEMACH_SHORTTIME; bms_state.state = BMS_STATEMACH_PRECHARGE; bms_state.substate = BMS_ENTRY; @@ -1164,21 +1165,21 @@ void BMS_Trigger(void) { /****************************PRECHARGE********************************/ case BMS_STATEMACH_PRECHARGE: - BMS_SAVELASTSTATES(); + BMS_SAVE_LAST_STATES(); if (bms_state.substate == BMS_ENTRY) { - DATA_READ_DATA(&systemstate); - systemstate.bmsCanState = BMS_CANSTATE_PRECHARGE; - DATA_WRITE_DATA(&systemstate); - if (bms_state.nextstate == BMS_STATEMACH_CHARGE) { - stringNumber = BMS_GetLowestString(BMS_TAKE_PRECHARGE_INTO_ACCCOUNT, &bms_tablePackValues); + DATA_READ_DATA(&systemState); + systemState.bmsCanState = BMS_CAN_STATE_PRECHARGE; + DATA_WRITE_DATA(&systemState); + if (bms_state.nextState == BMS_STATEMACH_CHARGE) { + stringNumber = BMS_GetLowestString(BMS_TAKE_PRECHARGE_INTO_ACCOUNT, &bms_tablePackValues); } else { - stringNumber = BMS_GetHighestString(BMS_TAKE_PRECHARGE_INTO_ACCCOUNT, &bms_tablePackValues); + stringNumber = BMS_GetHighestString(BMS_TAKE_PRECHARGE_INTO_ACCOUNT, &bms_tablePackValues); } if (stringNumber == BMS_NO_STRING_AVAILABLE) { bms_state.timer = BMS_STATEMACH_SHORTTIME; bms_state.state = BMS_STATEMACH_OPEN_CONTACTORS; - bms_state.nextstate = BMS_STATEMACH_ERROR; + bms_state.nextState = BMS_STATEMACH_ERROR; bms_state.substate = BMS_ENTRY; break; } @@ -1194,14 +1195,14 @@ void BMS_Trigger(void) { /* Invalid contactor requested */ bms_state.timer = BMS_STATEMACH_SHORTTIME; bms_state.state = BMS_STATEMACH_OPEN_CONTACTORS; - bms_state.nextstate = BMS_STATEMACH_ERROR; + bms_state.nextState = BMS_STATEMACH_ERROR; bms_state.substate = BMS_ENTRY; } } else if (BMS_IsBatterySystemStateOkay() == STD_NOT_OK) { /* If precharge re-enter timeout not elapsed, wait (and check errors while waiting) */ bms_state.timer = BMS_STATEMACH_SHORTTIME; bms_state.state = BMS_STATEMACH_OPEN_CONTACTORS; - bms_state.nextstate = BMS_STATEMACH_ERROR; + bms_state.nextState = BMS_STATEMACH_ERROR; bms_state.substate = BMS_ENTRY; break; } @@ -1215,18 +1216,18 @@ void BMS_Trigger(void) { bms_state.closedPrechargeContactors[stringNumber] = 1u; if (contRetVal == STD_OK) { bms_state.timer = BMS_TIME_WAIT_AFTER_CLOSING_PRECHARGE; - bms_state.substate = BMS_CHECK_ERROR_FLAGS_CLOSINGPRECHARGE; + bms_state.substate = BMS_CHECK_ERROR_FLAGS_CLOSING_PRECHARGE; } else { bms_state.timer = BMS_STATEMACH_SHORTTIME; bms_state.state = BMS_STATEMACH_OPEN_CONTACTORS; - bms_state.nextstate = BMS_STATEMACH_ERROR; + bms_state.nextState = BMS_STATEMACH_ERROR; bms_state.substate = BMS_ENTRY; } } else if (bms_state.stringCloseTimeout == 0u) { /* String takes too long to close */ bms_state.timer = BMS_STATEMACH_SHORTTIME; bms_state.state = BMS_STATEMACH_OPEN_CONTACTORS; - bms_state.nextstate = BMS_STATEMACH_ERROR; + bms_state.nextState = BMS_STATEMACH_ERROR; bms_state.substate = BMS_ENTRY; } else { /* String not closed, re-issue closing request */ @@ -1234,11 +1235,11 @@ void BMS_Trigger(void) { bms_state.timer = BMS_STATEMACH_SHORTTIME; } break; - } else if (bms_state.substate == BMS_CHECK_ERROR_FLAGS_CLOSINGPRECHARGE) { + } else if (bms_state.substate == BMS_CHECK_ERROR_FLAGS_CLOSING_PRECHARGE) { if (BMS_IsBatterySystemStateOkay() == STD_NOT_OK) { bms_state.timer = BMS_STATEMACH_SHORTTIME; bms_state.state = BMS_STATEMACH_OPEN_CONTACTORS; - bms_state.nextstate = BMS_STATEMACH_ERROR; + bms_state.nextState = BMS_STATEMACH_ERROR; bms_state.substate = BMS_ENTRY; break; } else { @@ -1250,7 +1251,7 @@ void BMS_Trigger(void) { if (BMS_CheckCanRequests() == BMS_REQ_ID_STANDBY) { bms_state.timer = BMS_STATEMACH_SHORTTIME; bms_state.state = BMS_STATEMACH_OPEN_CONTACTORS; - bms_state.nextstate = BMS_STATEMACH_STANDBY; + bms_state.nextState = BMS_STATEMACH_STANDBY; bms_state.substate = BMS_ENTRY; break; } else { @@ -1275,13 +1276,13 @@ void BMS_Trigger(void) { if (bms_state.prechargeTryCounter < (BMS_PRECHARGE_TRIES - 1u)) { bms_state.closedPrechargeContactors[stringNumber] = 0u; if (contRetVal == STD_OK) { - bms_state.timer = BMS_TIME_WAIT_AFTERPRECHARGEFAIL; + bms_state.timer = BMS_TIME_WAIT_AFTER_PRECHARGE_FAIL; bms_state.substate = BMS_PRECHARGE_CLOSE_PRECHARGE; bms_state.prechargeTryCounter++; } else { bms_state.timer = BMS_STATEMACH_SHORTTIME; bms_state.state = BMS_STATEMACH_OPEN_CONTACTORS; - bms_state.nextstate = BMS_STATEMACH_ERROR; + bms_state.nextState = BMS_STATEMACH_ERROR; bms_state.substate = BMS_ENTRY; } break; @@ -1289,7 +1290,7 @@ void BMS_Trigger(void) { bms_state.closedPrechargeContactors[stringNumber] = 0u; bms_state.timer = BMS_STATEMACH_SHORTTIME; bms_state.state = BMS_STATEMACH_OPEN_CONTACTORS; - bms_state.nextstate = BMS_STATEMACH_ERROR; + bms_state.nextState = BMS_STATEMACH_ERROR; bms_state.substate = BMS_ENTRY; break; } @@ -1300,13 +1301,13 @@ void BMS_Trigger(void) { bms_state.closedStrings[bms_state.firstClosedString] = 1u; bms_state.numberOfClosedStrings++; bms_state.timer = BMS_WAIT_TIME_AFTER_CLOSING_STRING_CONTACTOR; - bms_state.substate = BMS_CHECK_ERROR_FLAGS_PRECHARGE_CLOSINGSTRINGS; + bms_state.substate = BMS_CHECK_ERROR_FLAGS_PRECHARGE_CLOSING_STRINGS; break; } else if (bms_state.stringCloseTimeout == 0u) { /* String takes too long to close */ bms_state.timer = BMS_STATEMACH_SHORTTIME; bms_state.state = BMS_STATEMACH_OPEN_CONTACTORS; - bms_state.nextstate = BMS_STATEMACH_ERROR; + bms_state.nextState = BMS_STATEMACH_ERROR; bms_state.substate = BMS_ENTRY; break; } else { @@ -1320,7 +1321,7 @@ void BMS_Trigger(void) { if (BMS_IsBatterySystemStateOkay() == STD_NOT_OK) { bms_state.timer = BMS_STATEMACH_SHORTTIME; bms_state.state = BMS_STATEMACH_OPEN_CONTACTORS; - bms_state.nextstate = BMS_STATEMACH_ERROR; + bms_state.nextState = BMS_STATEMACH_ERROR; bms_state.substate = BMS_ENTRY; break; } else { @@ -1328,12 +1329,12 @@ void BMS_Trigger(void) { bms_state.substate = BMS_CHECK_CLOSE_SECOND_STRING_CONTACTOR_PRECHARGE_STATE; break; } - } else if (bms_state.substate == BMS_CHECK_ERROR_FLAGS_PRECHARGE_CLOSINGSTRINGS) { + } else if (bms_state.substate == BMS_CHECK_ERROR_FLAGS_PRECHARGE_CLOSING_STRINGS) { /* Always make one error check after the first string was closed successfully */ if (BMS_IsBatterySystemStateOkay() == STD_NOT_OK) { bms_state.timer = BMS_STATEMACH_SHORTTIME; bms_state.state = BMS_STATEMACH_OPEN_CONTACTORS; - bms_state.nextstate = BMS_STATEMACH_ERROR; + bms_state.nextState = BMS_STATEMACH_ERROR; bms_state.substate = BMS_ENTRY; break; } else { @@ -1350,7 +1351,7 @@ void BMS_Trigger(void) { } else { bms_state.timer = BMS_STATEMACH_SHORTTIME; bms_state.state = BMS_STATEMACH_OPEN_CONTACTORS; - bms_state.nextstate = BMS_STATEMACH_ERROR; + bms_state.nextState = BMS_STATEMACH_ERROR; bms_state.substate = BMS_ENTRY; } break; @@ -1365,7 +1366,7 @@ void BMS_Trigger(void) { /* Precharge contactor takes too long to open */ bms_state.timer = BMS_STATEMACH_SHORTTIME; bms_state.state = BMS_STATEMACH_OPEN_CONTACTORS; - bms_state.nextstate = BMS_STATEMACH_ERROR; + bms_state.nextState = BMS_STATEMACH_ERROR; bms_state.substate = BMS_ENTRY; break; } else { @@ -1382,28 +1383,28 @@ void BMS_Trigger(void) { /****************************NORMAL**************************************/ case BMS_STATEMACH_NORMAL: - BMS_SAVELASTSTATES(); + BMS_SAVE_LAST_STATES(); if (bms_state.substate == BMS_ENTRY) { #if BS_NORMAL_PERIODIC_OPEN_WIRE_CHECK == TRUE nextOpenWireCheck = timestamp + BS_NORMAL_OPEN_WIRE_PERIOD_ms; #endif /* BS_NORMAL_PERIODIC_OPEN_WIRE_CHECK == TRUE */ - DATA_READ_DATA(&systemstate); - if (bms_state.nextstate == BMS_STATEMACH_CHARGE) { - systemstate.bmsCanState = BMS_CANSTATE_CHARGE; + DATA_READ_DATA(&systemState); + if (bms_state.nextState == BMS_STATEMACH_CHARGE) { + systemState.bmsCanState = BMS_CAN_STATE_CHARGE; } else { - systemstate.bmsCanState = BMS_CANSTATE_NORMAL; + systemState.bmsCanState = BMS_CAN_STATE_NORMAL; } - DATA_WRITE_DATA(&systemstate); + DATA_WRITE_DATA(&systemState); bms_state.timer = BMS_STATEMACH_SHORTTIME; bms_state.substate = BMS_CHECK_ERROR_FLAGS; - bms_state.nextstringclosedtimer = 0u; + bms_state.nextStringClosedTimer = 0u; break; } else if (bms_state.substate == BMS_CHECK_ERROR_FLAGS) { if (BMS_IsBatterySystemStateOkay() == STD_NOT_OK) { bms_state.timer = BMS_STATEMACH_SHORTTIME; bms_state.state = BMS_STATEMACH_OPEN_CONTACTORS; - bms_state.nextstate = BMS_STATEMACH_ERROR; + bms_state.nextState = BMS_STATEMACH_ERROR; bms_state.substate = BMS_ENTRY; break; } else { @@ -1415,7 +1416,7 @@ void BMS_Trigger(void) { if (BMS_CheckCanRequests() == BMS_REQ_ID_STANDBY) { bms_state.timer = BMS_STATEMACH_SHORTTIME; bms_state.state = BMS_STATEMACH_OPEN_CONTACTORS; - bms_state.nextstate = BMS_STATEMACH_STANDBY; + bms_state.nextState = BMS_STATEMACH_STANDBY; bms_state.substate = BMS_ENTRY; break; } else { @@ -1430,9 +1431,9 @@ void BMS_Trigger(void) { break; } } else if (bms_state.substate == BMS_NORMAL_CLOSE_NEXT_STRING) { - if (bms_state.nextstringclosedtimer == 0u) { + if (bms_state.nextStringClosedTimer == 0u) { nextStringNumber = - BMS_GetClosestString(BMS_DO_NOT_TAKE_PRECHARGE_INTO_ACCCOUNT, &bms_tablePackValues); + BMS_GetClosestString(BMS_DO_NOT_TAKE_PRECHARGE_INTO_ACCOUNT, &bms_tablePackValues); if (nextStringNumber == BMS_NO_STRING_AVAILABLE) { bms_state.timer = BMS_STATEMACH_SHORTTIME; bms_state.substate = BMS_CHECK_ERROR_FLAGS; @@ -1441,9 +1442,10 @@ void BMS_Trigger(void) { (BMS_GetStringVoltageDifference(nextStringNumber, &bms_tablePackValues) <= BMS_NEXT_STRING_VOLTAGE_LIMIT_MV) && (BMS_GetAverageStringCurrent(&bms_tablePackValues) <= BMS_AVERAGE_STRING_CURRENT_LIMIT_MA)) { - /* Voltage/current conditions suitable to close a further string. Close first string contactor */ + /* Voltage/current conditions suitable to close a further string. Close first string contactor + */ CONT_CloseContactor(nextStringNumber, CONT_MINUS); - bms_state.nextstringclosedtimer = BMS_STRING_CLOSE_TIMEOUT; + bms_state.nextStringClosedTimer = BMS_STRING_CLOSE_TIMEOUT; bms_state.timer = BMS_WAIT_TIME_AFTER_CLOSING_STRING_CONTACTOR; bms_state.substate = BMS_NORMAL_CLOSE_SECOND_STRING_CONTACTOR; break; @@ -1464,7 +1466,7 @@ void BMS_Trigger(void) { /* String takes too long to close */ bms_state.timer = BMS_STATEMACH_SHORTTIME; bms_state.state = BMS_STATEMACH_OPEN_CONTACTORS; - bms_state.nextstate = BMS_STATEMACH_ERROR; + bms_state.nextState = BMS_STATEMACH_ERROR; bms_state.substate = BMS_ENTRY; break; } else { @@ -1478,7 +1480,7 @@ void BMS_Trigger(void) { if (contactorState == CONT_SWITCH_ON) { bms_state.numberOfClosedStrings++; bms_state.closedStrings[nextStringNumber] = 1u; - bms_state.nextstringclosedtimer = BMS_WAIT_TIME_BETWEEN_CLOSING_STRINGS; + bms_state.nextStringClosedTimer = BMS_WAIT_TIME_BETWEEN_CLOSING_STRINGS; /* Go to begin of NORMAL case to redo the full procedure with error check and request check */ bms_state.substate = BMS_CHECK_ERROR_FLAGS; break; @@ -1486,19 +1488,19 @@ void BMS_Trigger(void) { /* String takes too long to close */ bms_state.timer = BMS_STATEMACH_SHORTTIME; bms_state.state = BMS_STATEMACH_OPEN_CONTACTORS; - bms_state.nextstate = BMS_STATEMACH_ERROR; + bms_state.nextState = BMS_STATEMACH_ERROR; bms_state.substate = BMS_ENTRY; break; } else if (BMS_IsBatterySystemStateOkay() == STD_NOT_OK) { bms_state.timer = BMS_STATEMACH_SHORTTIME; bms_state.state = BMS_STATEMACH_OPEN_CONTACTORS; - bms_state.nextstate = BMS_STATEMACH_ERROR; + bms_state.nextState = BMS_STATEMACH_ERROR; bms_state.substate = BMS_ENTRY; break; } else if (BMS_CheckCanRequests() == BMS_REQ_ID_STANDBY) { bms_state.timer = BMS_STATEMACH_SHORTTIME; bms_state.state = BMS_STATEMACH_OPEN_CONTACTORS; - bms_state.nextstate = BMS_STATEMACH_STANDBY; + bms_state.nextState = BMS_STATEMACH_STANDBY; bms_state.substate = BMS_ENTRY; break; } else { @@ -1514,13 +1516,13 @@ void BMS_Trigger(void) { /****************************ERROR*************************************/ case BMS_STATEMACH_ERROR: - BMS_SAVELASTSTATES(); + BMS_SAVE_LAST_STATES(); if (bms_state.substate == BMS_ENTRY) { /* Set BMS System state to error */ - DATA_READ_DATA(&systemstate); - systemstate.bmsCanState = BMS_CANSTATE_ERROR; - DATA_WRITE_DATA(&systemstate); + DATA_READ_DATA(&systemState); + systemState.bmsCanState = BMS_CAN_STATE_ERROR; + DATA_WRITE_DATA(&systemState); /* Deactivate balancing */ BAL_SetStateRequest(BAL_STATE_NO_BALANCING_REQUEST); /* Change LED toggle frequency to indicate an error */ @@ -1552,7 +1554,7 @@ void BMS_Trigger(void) { } else if (bms_state.substate == BMS_CHECK_STATE_REQUESTS) { if (BMS_CheckCanRequests() == BMS_REQ_ID_STANDBY) { /* Activate balancing again */ - BAL_SetStateRequest(BAL_STATE_ALLOWBALANCING_REQUEST); + BAL_SetStateRequest(BAL_STATE_ALLOW_BALANCING_REQUEST); /* Set LED frequency to normal operation as we leave error state subsequently */ LED_SetToggleTime(LED_NORMAL_OPERATION_ON_OFF_TIME_ms); @@ -1560,7 +1562,7 @@ void BMS_Trigger(void) { /* Verify that all contactors are opened and switch to * STANDBY state afterwards */ bms_state.state = BMS_STATEMACH_OPEN_CONTACTORS; - bms_state.nextstate = BMS_STATEMACH_STANDBY; + bms_state.nextState = BMS_STATEMACH_STANDBY; bms_state.substate = BMS_ENTRY; break; } else { @@ -1682,8 +1684,8 @@ extern int32_t TEST_BMS_GetStringVoltageDifference(uint8_t string, DATA_BLOCK_PA extern int32_t TEST_BMS_GetAverageStringCurrent(DATA_BLOCK_PACK_VALUES_s *pPackValues) { return BMS_GetAverageStringCurrent(pPackValues); } -extern void TEST_BMS_UpdateBatsysState(DATA_BLOCK_PACK_VALUES_s *pPackValues) { - BMS_UpdateBatsysState(pPackValues); +extern void TEST_BMS_UpdateBatterySystemState(DATA_BLOCK_PACK_VALUES_s *pPackValues) { + BMS_UpdateBatterySystemState(pPackValues); } #endif diff --git a/src/app/application/bms/bms.h b/src/app/application/bms/bms.h index 7ac8135a..0fdf324c 100644 --- a/src/app/application/bms/bms.h +++ b/src/app/application/bms/bms.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,14 +43,13 @@ * @file bms.h * @author foxBMS Team * @date 2020-02-24 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup ENGINE * @prefix BMS * - * @brief bms driver header - * - * + * @brief BMS driver header + * @details TODO */ #ifndef FOXBMS__BMS_H_ @@ -76,17 +75,17 @@ typedef enum { BMS_AT_REST, /*!< battery is resting */ } BMS_CURRENT_FLOW_STATE_e; -/** Symbolic names for busyness of the syscontrol */ +/** Symbolic names for busyness of the BMS control */ typedef enum { - BMS_CHECK_OK, /*!< syscontrol ok */ - BMS_CHECK_BUSY, /*!< syscontrol busy */ - BMS_CHECK_NOT_OK, /*!< syscontrol not ok */ + BMS_CHECK_OK, /*!< BMS control ok */ + BMS_CHECK_BUSY, /*!< BMS control busy */ + BMS_CHECK_NOT_OK, /*!< BMS control not ok */ } BMS_CHECK_e; /** Symbolic names to take precharge into account or not */ typedef enum { - BMS_DO_NOT_TAKE_PRECHARGE_INTO_ACCCOUNT, /*!< do not take precharge into account */ - BMS_TAKE_PRECHARGE_INTO_ACCCOUNT, /*!< do take precharge into account */ + BMS_DO_NOT_TAKE_PRECHARGE_INTO_ACCOUNT, /*!< do not take precharge into account */ + BMS_TAKE_PRECHARGE_INTO_ACCOUNT, /*!< do take precharge into account */ } BMS_CONSIDER_PRECHARGE_e; /** States of the SYS state machine */ @@ -110,17 +109,17 @@ typedef enum { /** CAN states of the BMS state machine */ typedef enum { /* Init-Sequence */ - BMS_CANSTATE_UNINITIALIZED, - BMS_CANSTATE_INITIALIZATION, - BMS_CANSTATE_INITIALIZED, - BMS_CANSTATE_IDLE, - BMS_CANSTATE_OPENCONTACTORS, - BMS_CANSTATE_STANDBY, - BMS_CANSTATE_PRECHARGE, - BMS_CANSTATE_NORMAL, - BMS_CANSTATE_CHARGE, - BMS_CANSTATE_ERROR, -} BMS_CANSTATE_e; + BMS_CAN_STATE_UNINITIALIZED, + BMS_CAN_STATE_INITIALIZATION, + BMS_CAN_STATE_INITIALIZED, + BMS_CAN_STATE_IDLE, + BMS_CAN_STATE_OPEN_CONTACTORS, + BMS_CAN_STATE_STANDBY, + BMS_CAN_STATE_PRECHARGE, + BMS_CAN_STATE_NORMAL, + BMS_CAN_STATE_CHARGE, + BMS_CAN_STATE_ERROR, +} BMS_CAN_STATE_e; /** Substates of the SYS state machine */ typedef enum { @@ -146,12 +145,12 @@ typedef enum { BMS_PRECHARGE_CLOSE_NEXT_STRING, BMS_CLOSE_SECOND_CONTACTOR_PLUS, BMS_CHECK_STRING_CLOSED, - BMS_CHECK_ERROR_FLAGS_PRECHARGE_CLOSINGSTRINGS, - BMS_CHECK_ERROR_FLAGS_CLOSINGPRECHARGE, + BMS_CHECK_ERROR_FLAGS_PRECHARGE_CLOSING_STRINGS, + BMS_CHECK_ERROR_FLAGS_CLOSING_PRECHARGE, BMS_NORMAL_CLOSE_NEXT_STRING, BMS_NORMAL_CLOSE_SECOND_STRING_CONTACTOR, - BMS_OPEN_ALL_PRECHARGES, - BMS_CHECK_ALL_PRECHARGES_OPEN, + BMS_OPEN_ALL_PRECHARGE_CONTACTORS, + BMS_CHECK_ALL_PRECHARGE_CONTACTORS_OPEN, BMS_OPEN_STRINGS_ENTRY, BMS_OPEN_FIRST_STRING_CONTACTOR, BMS_OPEN_SECOND_STRING_CONTACTOR, @@ -191,8 +190,8 @@ typedef struct { BMS_STATE_REQUEST_e stateRequest; /*!< current state request made to the state machine */ BMS_STATEMACH_e state; /*!< current state of State Machine */ BMS_STATEMACH_SUB_e substate; /*!< current substate of the state machine */ - BMS_STATEMACH_e laststate; /*!< previous state of the state machine */ - BMS_STATEMACH_SUB_e lastsubstate; /*!< previous substate of the state machine */ + BMS_STATEMACH_e lastState; /*!< previous state of the state machine */ + BMS_STATEMACH_SUB_e lastSubstate; /*!< previous substate of the state machine */ uint32_t ErrRequestCounter; /*!< counts the number of illegal requests to the LTC state machine */ STD_RETURN_TYPE_e initFinished; /*!< #STD_OK if the initialization has passed, #STD_NOT_OK otherwise */ uint8_t triggerentry; /*!< counter for re-entrance protection (function running flag) */ @@ -204,9 +203,9 @@ typedef struct { BMS_POWER_PATH_TYPE_e powerPath; /*!< power path type (discharge or charge) */ uint8_t numberOfClosedStrings; /*!< number of closed strings */ uint16_t stringOpenTimeout; /*!< timeout to abort if string opening takes too long */ - uint32_t nextstringclosedtimer; /*!< timer to wait if the next string was closed */ + uint32_t nextStringClosedTimer; /*!< timer to wait if the next string was closed */ uint16_t stringCloseTimeout; /*!< timeout to abort if a string takes too long to close */ - BMS_STATEMACH_e nextstate; /*!< next state of the State Machine */ + BMS_STATEMACH_e nextState; /*!< next state of the State Machine */ uint8_t firstClosedString; /*!< strings with highest or lowest voltage, that was closed first */ uint16_t prechargeOpenTimeout; /*!< timeout to abort if string opening takes too long */ uint16_t prechargeCloseTimeout; /*!< timeout to abort if a string takes too long to close */ @@ -271,11 +270,11 @@ extern void BMS_Trigger(void); extern BMS_CURRENT_FLOW_STATE_e BMS_GetBatterySystemState(void); /** - * @brief Get current flow direction, current value as function parameter - * @param[in] current_mA current that is flowing - * @return #BMS_DISCHARGING or #BMS_CHARGING depending on current direction. - * Return #BMS_AT_REST. ((type: #BMS_CURRENT_FLOW_STATE_e) - */ + * @brief Get current flow direction, current value as function parameter + * @param[in] current_mA current that is flowing + * @return #BMS_DISCHARGING or #BMS_CHARGING depending on current direction. + * Return #BMS_AT_REST. ((type: #BMS_CURRENT_FLOW_STATE_e) + */ extern BMS_CURRENT_FLOW_STATE_e BMS_GetCurrentFlowDirection(int32_t current_mA); /** @@ -325,7 +324,7 @@ extern uint8_t TEST_BMS_GetClosestString(BMS_CONSIDER_PRECHARGE_e precharge, DAT extern uint8_t TEST_BMS_GetLowestString(BMS_CONSIDER_PRECHARGE_e precharge, DATA_BLOCK_PACK_VALUES_s *pPackValues); extern int32_t TEST_BMS_GetStringVoltageDifference(uint8_t string, DATA_BLOCK_PACK_VALUES_s *pPackValues); extern int32_t TEST_BMS_GetAverageStringCurrent(DATA_BLOCK_PACK_VALUES_s *pPackValues); -extern void TEST_BMS_UpdateBatsysState(DATA_BLOCK_PACK_VALUES_s *pPackValues); +extern void TEST_BMS_UpdateBatterySystemState(DATA_BLOCK_PACK_VALUES_s *pPackValues); #endif #endif /* FOXBMS__BMS_H_ */ diff --git a/src/app/application/config/bal_cfg.c b/src/app/application/config/bal_cfg.c index 4f6e1679..73aa0688 100644 --- a/src/app/application/config/bal_cfg.c +++ b/src/app/application/config/bal_cfg.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file bal_cfg.c * @author foxBMS Team * @date 2022-02-26 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS_CONFIGURATION * @prefix BAL * * @brief implementation for the configuration for the driver for balancing - * + * @details TODO */ /*========== Includes =======================================================*/ diff --git a/src/app/application/config/bal_cfg.h b/src/app/application/config/bal_cfg.h index b3c4d1ee..627f5bd5 100644 --- a/src/app/application/config/bal_cfg.h +++ b/src/app/application/config/bal_cfg.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file bal_cfg.h * @author foxBMS Team * @date 2020-02-24 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS_CONFIGURATION * @prefix BAL * * @brief Header for the configuration for the driver for balancing - * + * @details TODO */ #ifndef FOXBMS__BAL_CFG_H_ @@ -69,7 +69,7 @@ #define BAL_STATEMACH_LONGTIME_100ms (50u) /** BAL state machine balancing time in 100*ms */ -#define BAL_STATEMACH_BALANCINGTIME_100ms (10u) +#define BAL_STATEMACH_BALANCING_TIME_100ms (10u) /** default value for the BAL voltage threshold */ #define BAL_DEFAULT_THRESHOLD_mV (200) diff --git a/src/app/application/config/battery_cell_cfg.c b/src/app/application/config/battery_cell_cfg.c index b214fced..79acc63e 100644 --- a/src/app/application/config/battery_cell_cfg.c +++ b/src/app/application/config/battery_cell_cfg.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,12 @@ * @file battery_cell_cfg.c * @author foxBMS Team * @date 2020-10-08 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup BATTERY_CELL_CONFIGURATION * @prefix BC * * @brief Configuration of the battery cell - * * @details This files contains battery cell lookup tables * */ diff --git a/src/app/application/config/battery_cell_cfg.h b/src/app/application/config/battery_cell_cfg.h index 6f3b8ce8..0a7712dd 100644 --- a/src/app/application/config/battery_cell_cfg.h +++ b/src/app/application/config/battery_cell_cfg.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,14 +43,13 @@ * @file battery_cell_cfg.h * @author foxBMS Team * @date 2017-03-14 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup BATTERY_CELL_CONFIGURATION * @prefix BC * * @brief Configuration of the battery cell (e.g., minimum and maximum cell * voltage) - * * @details This files contains basic macros of the battery cell in order to * derive needed inputs in other parts of the software. These macros * are all depended on the hardware. @@ -159,9 +158,9 @@ * @unit mV */ /**@{*/ -#define BC_VOLTAGE_MIN_MSL_mV (1700) -#define BC_VOLTAGE_MIN_RSL_mV (1750) -#define BC_VOLTAGE_MIN_MOL_mV (1780) +#define BC_VOLTAGE_MIN_MSL_mV (1500) +#define BC_VOLTAGE_MIN_RSL_mV (1550) +#define BC_VOLTAGE_MIN_MOL_mV (1580) /**@}*/ /** diff --git a/src/app/application/config/battery_system_cfg.c b/src/app/application/config/battery_system_cfg.c index 42f8b928..830c8f22 100644 --- a/src/app/application/config/battery_system_cfg.c +++ b/src/app/application/config/battery_system_cfg.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file battery_system_cfg.c * @author foxBMS Team * @date 2019-12-10 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup BATTERY_SYSTEM_CONFIGURATION * @prefix BS * * @brief Configuration for the battery system. - * + * @details TODO */ /*========== Includes =======================================================*/ diff --git a/src/app/application/config/battery_system_cfg.h b/src/app/application/config/battery_system_cfg.h index 2177e7bd..3b88ba58 100644 --- a/src/app/application/config/battery_system_cfg.h +++ b/src/app/application/config/battery_system_cfg.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,18 +43,16 @@ * @file battery_system_cfg.h * @author foxBMS Team * @date 2019-12-10 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup BATTERY_SYSTEM_CONFIGURATION * @prefix BS * * @brief Configuration of the battery system (e.g., number of battery * modules, battery cells, temperature sensors) - * * @details This files contains basic macros of the battery system in order to - * derive needed inputs in other parts of the software. These macros - * are all depended on the hardware. - * + * derive needed inputs in other parts of the software. + * These macros are all depended on the hardware. */ #ifndef FOXBMS__BATTERY_SYSTEM_CFG_H_ @@ -68,6 +66,10 @@ #include #include +/* if the application is *not* build for unit testing, i.e., the target build + is built use these settings */ +#ifndef UNITY_UNIT_TEST + /*========== Macros and Definitions =========================================*/ /** Symbolic identifiers for strings with precharge */ @@ -154,11 +156,13 @@ typedef enum { #error "Number of temperature inputs cannot be higher than number of GPIOs" #endif -/** number of battery cells in the system */ +/** number of battery cells in a string */ #define BS_NR_OF_CELL_BLOCKS_PER_STRING (BS_NR_OF_MODULES_PER_STRING * BS_NR_OF_CELL_BLOCKS_PER_MODULE) +/** number of battery cells in the battery system*/ +#define BS_NR_OF_CELL_BLOCKS (BS_NR_OF_CELL_BLOCKS_PER_STRING * BS_NR_OF_STRINGS) /** number of temperature sensors in a string */ #define BS_NR_OF_TEMP_SENSORS_PER_STRING (BS_NR_OF_MODULES_PER_STRING * BS_NR_OF_TEMP_SENSORS_PER_MODULE) -/** number of temperature sensors in the battery system */ +/** total number of temperature sensors in the battery system */ #define BS_NR_OF_TEMP_SENSORS (BS_NR_OF_TEMP_SENSORS_PER_STRING * BS_NR_OF_STRINGS) /** @@ -168,7 +172,7 @@ typedef enum { * sensor. If sensor stops responding during runtime, an error is * raised. */ -#define BS_CURRENT_SENSOR_PRESENT (false) +#define BS_CURRENT_SENSOR_PRESENT (true) #if BS_CURRENT_SENSOR_PRESENT == true /** @@ -208,15 +212,15 @@ typedef enum { * contactors. After this time, the BMS will nevertheless try to open * the contactors. */ -#define BS_MAIN_FUSE_MAXIMUM_TRIGGER_DURATION_ms (30000u) +#define BS_MAIN_FUSE_MAXIMUM_TRIGGER_DURATION_ms (3000u) /** * @brief Maximum string current limit in mA that is used in the SOA module * to check for string overcurrent -* @details When maximum safety limit (MSL) is violated, error state is + * @details When maximum safety limit (MSL) is violated, error state is * requested and contactors will open. */ -#define BS_MAXIMUM_STRING_CURRENT_mA (10000u) +#define BS_MAXIMUM_STRING_CURRENT_mA (2400u) /** * @brief Maximum pack current limit in mA that is used in the SOA module @@ -224,7 +228,7 @@ typedef enum { * @details When maximum safety limit (MSL) is violated, error state is * requested and contactors will open. */ -#define BS_MAXIMUM_PACK_CURRENT_mA (10000u * BS_NR_OF_STRINGS) +#define BS_MAXIMUM_PACK_CURRENT_mA (2400u * BS_NR_OF_STRINGS) /** * @brief Define if interlock feedback should be discarded or not @@ -237,7 +241,7 @@ typedef enum { * @brief Defines whether CAN timing shall be evaluated or not * @details - If set to false, foxBMS does not check CAN timing. * - If set to true, foxBMS checks CAN timing. A valid request must - * come every 100ms, within the 95-150ms window. + * come every 100ms, within the 95-105ms window. */ #define BS_CHECK_CAN_TIMING (true) @@ -362,6 +366,13 @@ extern BS_STRING_PRECHARGE_PRESENT_e bs_stringsWithPrecharge[BS_NR_OF_STRINGS]; /*========== Extern Function Prototypes =====================================*/ /*========== Externalized Static Functions Prototypes (Unit Test) ===========*/ +#else +/* in case of running the unit test suite, the configuration shall be entirely + be read from the unit test specific configuration files. + How the unit test configuration file is then actually used, is described + in the unit test configuration directory at */ +#include "battery_system_cfg_unit_test.h" +#endif #ifdef UNITY_UNIT_TEST #endif diff --git a/src/app/application/config/bms_cfg.h b/src/app/application/config/bms_cfg.h index 1fb1868d..81deaad2 100644 --- a/src/app/application/config/bms_cfg.h +++ b/src/app/application/config/bms_cfg.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,12 +43,13 @@ * @file bms_cfg.h * @author foxBMS Team * @date 2020-02-24 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup ENGINE_CONFIGURATION * @prefix BMS * - * @brief bms driver configuration header + * @brief BMS driver configuration header + * @details TODO */ #ifndef FOXBMS__BMS_CFG_H_ @@ -87,7 +88,7 @@ * This sets the minimum time between two subsequent executed * states/substates. * Define is only used for compile-time assertion, it has no - * programatic influence on the actual code. + * programmatic influence on the actual code. */ #define BMS_STATEMACHINE_TASK_CYCLE_CONTEXT_MS (10u) @@ -105,7 +106,7 @@ * @brief BMS state machine medium time definition in #BMS_Trigger() calls * until next state/substate is processed */ -#define BMS_STATEMACH_MEDIUMTIME (5u) +#define BMS_STATEMACH_MEDIUM_TIME (5u) /** * @brief BMS state machine long time definition in #BMS_Trigger() calls until @@ -144,7 +145,7 @@ #define BMS_AVERAGE_STRING_CURRENT_LIMIT_MA (20000) /** Delay after closing precharge in #BMS_Trigger() calls */ -#define BMS_TIME_WAIT_AFTER_CLOSING_PRECHARGE (100u) +#define BMS_TIME_WAIT_AFTER_CLOSING_PRECHARGE (200u) /** Delay after opening precharge in #BMS_Trigger() calls */ #define BMS_TIME_WAIT_AFTER_OPENING_PRECHARGE (50u) @@ -153,7 +154,7 @@ * @brief Time to wait in #BMS_Trigger() calls after precharge opened because * precharge failed */ -#define BMS_TIME_WAIT_AFTERPRECHARGEFAIL (300u) +#define BMS_TIME_WAIT_AFTER_PRECHARGE_FAIL (300u) /** * @brief Timeout in 1*10ms to wait before re-entering to precharge @@ -175,7 +176,7 @@ * @details Time to wait after contactors opened because precharge failed in * #BMS_Trigger() calls */ -#define BMS_STATEMACH_TIMEAFTERPRECHARGEFAIL (100u) +#define BMS_STATEMACH_TIME_UNTIL_PRECHARGE_FAIL (100u) /** * @details Timeout in #BMS_Trigger() calls when closing precharge after which diff --git a/src/app/application/config/plausibility_cfg.h b/src/app/application/config/plausibility_cfg.h index ef280d0b..00717131 100644 --- a/src/app/application/config/plausibility_cfg.h +++ b/src/app/application/config/plausibility_cfg.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file plausibility_cfg.h * @author foxBMS Team * @date 2020-02-24 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup APPLICATION_CONFIGURATION * @prefix PL * - * @brief plausibility checks for cell voltage and cell temperatures - * + * @brief Plausibility checks for cell voltage and cell temperatures + * @details TODO */ #ifndef FOXBMS__PLAUSIBILITY_CFG_H_ diff --git a/src/app/application/config/soa_cfg.c b/src/app/application/config/soa_cfg.c index 1876994e..58c276d3 100644 --- a/src/app/application/config/soa_cfg.c +++ b/src/app/application/config/soa_cfg.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,12 +43,13 @@ * @file soa_cfg.c * @author foxBMS Team * @date 2020-10-14 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup APPLICATION_CONFIGURATION * @prefix SOA * * @brief Configuration for safe-operating area check + * @details TODO * */ diff --git a/src/app/application/config/soa_cfg.h b/src/app/application/config/soa_cfg.h index 97a10f36..438d51b2 100644 --- a/src/app/application/config/soa_cfg.h +++ b/src/app/application/config/soa_cfg.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,12 +43,13 @@ * @file soa_cfg.h * @author foxBMS Team * @date 2020-10-14 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup APPLICATION_CONFIGURATION * @prefix SOA * * @brief Configuration header for SOA + * @details TODO * */ diff --git a/src/app/application/plausibility/plausibility.c b/src/app/application/plausibility/plausibility.c index b5737c9b..5dbcf02b 100644 --- a/src/app/application/plausibility/plausibility.c +++ b/src/app/application/plausibility/plausibility.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,12 +43,13 @@ * @file plausibility.c * @author foxBMS Team * @date 2020-02-24 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup APPLICATION * @prefix PL * - * @brief plausibility checks for cell voltage and cell temperatures + * @brief Plausibility checks for cell voltage and cell temperatures + * @details TODO * */ @@ -103,22 +104,22 @@ extern STD_RETURN_TYPE_e PL_CheckCellVoltage( return retval; } -extern STD_RETURN_TYPE_e PL_CheckCelltemperature( - int16_t baseCelltemperature, - int16_t redundancy0Celltemperature, - int16_t *pCelltemperature) { - /* AXIVION Routine Generic-MissingParameterAssert: baseCelltemperature: parameter accepts whole range */ - /* AXIVION Routine Generic-MissingParameterAssert: redundancy0Celltemperature: parameter accepts whole range */ +extern STD_RETURN_TYPE_e PL_CheckCellTemperature( + int16_t baseCellTemperature, + int16_t redundancy0CellTemperature, + int16_t *pCellTemperature) { + /* AXIVION Routine Generic-MissingParameterAssert: baseCellTemperature: parameter accepts whole range */ + /* AXIVION Routine Generic-MissingParameterAssert: redundancy0CellTemperature: parameter accepts whole range */ /* Pointer validity check */ - FAS_ASSERT(pCelltemperature != NULL_PTR); + FAS_ASSERT(pCellTemperature != NULL_PTR); STD_RETURN_TYPE_e retval = STD_OK; - if (abs(baseCelltemperature - redundancy0Celltemperature) > PL_CELL_TEMPERATURE_TOLERANCE_dK) { + if (abs(baseCellTemperature - redundancy0CellTemperature) > PL_CELL_TEMPERATURE_TOLERANCE_dK) { retval = STD_NOT_OK; } /* Take the average value of base and redundant measurement value */ - *pCelltemperature = (baseCelltemperature + redundancy0Celltemperature) / 2; + *pCellTemperature = (baseCellTemperature + redundancy0CellTemperature) / 2; return retval; } @@ -137,14 +138,14 @@ extern STD_RETURN_TYPE_e PL_CheckVoltageSpread( for (uint8_t m = 0u; m < BS_NR_OF_MODULES_PER_STRING; m++) { for (uint8_t cb = 0u; cb < BS_NR_OF_CELL_BLOCKS_PER_MODULE; cb++) { /* Only do check for valid voltages */ - if ((pCellVoltages->invalidCellVoltage[s][m] & (0x01uLL << cb)) == 0uLL) { + if (pCellVoltages->invalidCellVoltage[s][m][cb] == false) { if (abs(pCellVoltages->cellVoltage_mV[s][m][cb] - pMinMaxAverageValues->averageCellVoltage_mV[s]) > PL_CELL_VOLTAGE_SPREAD_TOLERANCE_mV) { /* Voltage difference too large */ plausibilityIssueDetected = STD_NOT_OK; retval = STD_NOT_OK; /* Set this cell voltage invalid */ - pCellVoltages->invalidCellVoltage[s][m] |= (0x01u << cb); + pCellVoltages->invalidCellVoltage[s][m][cb] = true; } } } @@ -169,7 +170,7 @@ extern STD_RETURN_TYPE_e PL_CheckTemperatureSpread( for (uint8_t m = 0u; m < BS_NR_OF_MODULES_PER_STRING; m++) { for (uint8_t ts = 0u; ts < BS_NR_OF_TEMP_SENSORS_PER_MODULE; ts++) { /* Only do check for valid temperatures */ - if ((pCellTemperatures->invalidCellTemperature[s][m] & (0x01u << ts)) == 0) { + if (pCellTemperatures->invalidCellTemperature[s][m][ts] == false) { if (abs(pCellTemperatures->cellTemperature_ddegC[s][m][ts] - (int16_t)pMinMaxAverageValues->averageTemperature_ddegC[s]) > PL_CELL_TEMPERATURE_SPREAD_TOLERANCE_dK) { @@ -177,7 +178,7 @@ extern STD_RETURN_TYPE_e PL_CheckTemperatureSpread( plausibilityIssueDetected = STD_NOT_OK; retval = STD_NOT_OK; /* Set this cell temperature invalid */ - pCellTemperatures->invalidCellTemperature[s][m] |= (0x01u << ts); + pCellTemperatures->invalidCellTemperature[s][m][ts] = true; } else { pCellTemperatures->nrValidTemperatures[s]++; } diff --git a/src/app/application/plausibility/plausibility.h b/src/app/application/plausibility/plausibility.h index 73fa1254..f5aa25ae 100644 --- a/src/app/application/plausibility/plausibility.h +++ b/src/app/application/plausibility/plausibility.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,12 +43,13 @@ * @file plausibility.h * @author foxBMS Team * @date 2020-02-24 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup APPLICATION * @prefix PL * - * @brief plausibility checks for cell voltage and cell temperatures + * @brief Plausibility checks for cell voltage and cell temperatures + * @details TODO * */ @@ -98,16 +99,16 @@ extern STD_RETURN_TYPE_e PL_CheckCellVoltage( /** * @brief Cell temperature plausibility check between two redundant cell temperature measurement values * - * @param[in] baseCelltemperature cell temperature from base measurement - * @param[in] redundancy0Celltemperature cell temperature from redundant measurement - * @param[out] pCelltemperature output cell temperature after plausibility check + * @param[in] baseCellTemperature cell temperature from base measurement + * @param[in] redundancy0CellTemperature cell temperature from redundant measurement + * @param[out] pCellTemperature output cell temperature after plausibility check * * @return #STD_OK if cell voltage valid, otherwise #STD_NOT_OK */ -extern STD_RETURN_TYPE_e PL_CheckCelltemperature( - int16_t baseCelltemperature, - int16_t redundancy0Celltemperature, - int16_t *pCelltemperature); +extern STD_RETURN_TYPE_e PL_CheckCellTemperature( + int16_t baseCellTemperature, + int16_t redundancy0CellTemperature, + int16_t *pCellTemperature); /** * @brief Cell voltage spread plausibility check diff --git a/src/app/application/redundancy/redundancy.c b/src/app/application/redundancy/redundancy.c index 2a3d54a4..10ec9218 100644 --- a/src/app/application/redundancy/redundancy.c +++ b/src/app/application/redundancy/redundancy.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,14 +43,14 @@ * @file redundancy.c * @author foxBMS Team * @date 2020-07-31 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup APPLICATION * @prefix MRC * * @brief Source file for handling redundancy between redundant cell voltage * and cell temperature measurements - * + * @details TODO */ /*========== Includes =======================================================*/ @@ -82,8 +82,8 @@ static DATA_BLOCK_PACK_VALUES_s mrc_tablePackValues = {.header.unique static MRC_STATE_s mrc_state = { .lastBaseCellVoltageTimestamp = 0u, .lastRedundancy0CellVoltageTimestamp = 0u, - .lastBaseCelltemperatureTimestamp = 0u, - .lastRedundancy0CelltemperatureTimestamp = 0u, + .lastBaseCellTemperatureTimestamp = 0u, + .lastRedundancy0CellTemperatureTimestamp = 0u, .lastStringCurrentTimestamp = {0u}, }; @@ -102,7 +102,7 @@ static bool MRC_MeasurementUpdatedAtLeastOnce(uint32_t timestamp, uint32_t previ * @brief Check timestamp if measurement has been updated recently. * @param[in] timestamp timestamp of last measurement update * @param[in] previousTimestamp timestamp of previously updated measurement - * @param[in] timeInterval in systicks (type: uint32_t) + * @param[in] timeInterval in sys ticks (type: uint32_t) * @return true if measurement has recently been updated, otherwise false */ static STD_RETURN_TYPE_e MRC_MeasurementUpdatedRecently( @@ -218,15 +218,15 @@ static STD_RETURN_TYPE_e MRC_UpdateCellVoltageValidation( /** * @brief Function compares cell temperature measurements from base measurement * with one redundant measurement and writes result in pValidatedTemperatures. - * @param[in] pCelltemperatureBase base cell temperature measurement - * @param[in] pCelltemperatureRedundancy0 redundant cell temperature measurement + * @param[in] pCellTemperatureBase base cell temperature measurement + * @param[in] pCellTemperatureRedundancy0 redundant cell temperature measurement * @param[out] pValidatedTemperatures validated temperatures from redundant measurement values * @return #STD_NOT_OK if not all cell voltages could be validated, otherwise * #STD_OK */ static STD_RETURN_TYPE_e MRC_ValidateCellTemperature( - DATA_BLOCK_CELL_TEMPERATURE_s *pCelltemperatureBase, - DATA_BLOCK_CELL_TEMPERATURE_s *pCelltemperatureRedundancy0, + DATA_BLOCK_CELL_TEMPERATURE_s *pCellTemperatureBase, + DATA_BLOCK_CELL_TEMPERATURE_s *pCellTemperatureRedundancy0, DATA_BLOCK_CELL_TEMPERATURE_s *pValidatedTemperatures); /** @@ -279,7 +279,7 @@ static bool MRC_ValidateCellVoltageMeasurement( FAS_ASSERT(pCellVoltageBase != NULL_PTR); FAS_ASSERT(pCellVoltageRedundancy0 != NULL_PTR); - bool updatedValidatedVoltageDatbaseEntry = false; + bool updatedValidatedVoltageDatabaseEntry = false; bool baseCellVoltageUpdated = false; @@ -291,9 +291,11 @@ static bool MRC_ValidateCellVoltageMeasurement( * * - Use redundancy only if timestamp of redundant database entry != 0 * - Perform redundant check if both timestamps have been updated - * - Add timeout and trigger error if timestamps have not been updated in the last XXXXms - * - If timeout reached and only one of the two redundant measurements has been updated use this measurement value - * but throw an error that one measurement has not been updated recently. + * - Add timeout and trigger error if timestamps have not been updated in + the last x milliseconds + * - If timeout reached and only one of the two redundant measurements has + been updated use this measurement value but throw an error that one + measurement has not been updated recently. */ /* -------------- Check if cell voltage redundant measurement is used -- */ @@ -331,15 +333,15 @@ static bool MRC_ValidateCellVoltageMeasurement( /* ----------------- Validate cell voltages ---------------------------- */ if (useCellVoltageRedundancy == true) { - bool redundany0CellVoltageUpdated = false; + bool redundancy0CellVoltageUpdated = false; /* Check if redundant measurement values have been updated since last MRC */ if (mrc_state.lastRedundancy0CellVoltageTimestamp != pCellVoltageRedundancy0->header.timestamp) { - redundany0CellVoltageUpdated = true; + redundancy0CellVoltageUpdated = true; } else { - redundany0CellVoltageUpdated = false; + redundancy0CellVoltageUpdated = false; } /* Make sure cell voltage timestamps have been updated since last call */ - if ((baseCellVoltageUpdated == true) && (redundany0CellVoltageUpdated == true)) { + if ((baseCellVoltageUpdated == true) && (redundancy0CellVoltageUpdated == true)) { /* Update timestamp */ mrc_state.lastBaseCellVoltageTimestamp = pCellVoltageBase->header.timestamp; mrc_state.lastRedundancy0CellVoltageTimestamp = pCellVoltageRedundancy0->header.timestamp; @@ -347,8 +349,8 @@ static bool MRC_ValidateCellVoltageMeasurement( /* Validate cell voltages */ MRC_ValidateCellVoltage(pCellVoltageBase, pCellVoltageRedundancy0, &mrc_tableCellVoltages); /* Set to true for following minimum, maximum and average calculation */ - updatedValidatedVoltageDatbaseEntry = true; - } else if ((baseCellVoltageUpdated == true) || (redundany0CellVoltageUpdated == true)) { + updatedValidatedVoltageDatabaseEntry = true; + } else if ((baseCellVoltageUpdated == true) || (redundancy0CellVoltageUpdated == true)) { /* At least one measurement has been updated */ if (baseCellVoltageUpdated == true) { /* Has redundant measurement timeout been reached? If yes, update. */ @@ -356,15 +358,15 @@ static bool MRC_ValidateCellVoltageMeasurement( /* Copy cell voltage base measurement values into validated database struct */ MRC_UpdateCellVoltageValidation(pCellVoltageBase, &mrc_tableCellVoltages); /* Set to true for following minimum, maximum and average calculation */ - updatedValidatedVoltageDatbaseEntry = true; + updatedValidatedVoltageDatabaseEntry = true; } - } else if (redundany0CellVoltageUpdated == true) { + } else if (redundancy0CellVoltageUpdated == true) { /* Has base measurement timeout been reached? If yes, update. */ if (baseCellVoltageMeasurementTimeoutReached == true) { /* Copy cell voltage base measurement values into validated database struct */ MRC_UpdateCellVoltageValidation(pCellVoltageRedundancy0, &mrc_tableCellVoltages); /* Set to true for following minimum, maximum and average calculation */ - updatedValidatedVoltageDatbaseEntry = true; + updatedValidatedVoltageDatabaseEntry = true; } } else { FAS_ASSERT(FAS_TRAP); @@ -382,11 +384,11 @@ static bool MRC_ValidateCellVoltageMeasurement( MRC_UpdateCellVoltageValidation(pCellVoltageBase, &mrc_tableCellVoltages); /* Set to true for following minimum, maximum and average calculation */ - updatedValidatedVoltageDatbaseEntry = true; + updatedValidatedVoltageDatabaseEntry = true; } } - if (updatedValidatedVoltageDatbaseEntry == true) { + if (updatedValidatedVoltageDatabaseEntry == true) { /* Calculate min/max/average cell voltages */ MRC_CalculateCellVoltageMinMaxAverage(&mrc_tableCellVoltages, &mrc_tableMinimumMaximumValues); @@ -397,7 +399,7 @@ static bool MRC_ValidateCellVoltageMeasurement( } } - return updatedValidatedVoltageDatbaseEntry; + return updatedValidatedVoltageDatabaseEntry; } static bool MRC_ValidateCellTemperatureMeasurement( @@ -406,9 +408,9 @@ static bool MRC_ValidateCellTemperatureMeasurement( FAS_ASSERT(pCellTemperatureBase != NULL_PTR); FAS_ASSERT(pCellTemperatureRedundancy0 != NULL_PTR); - bool baseCelltemperatureUpdated = false; - bool useCelltemperatureRedundancy = false; - bool updatedValidatedTemperatureDatbaseEntry = false; + bool baseCellTemperatureUpdated = false; + bool useCellTemperatureRedundancy = false; + bool updatedValidatedTemperatureDatabaseEntry = false; bool baseCellTemperatureMeasurementTimeoutReached = true; bool redundancy0CellTemperatureMeasurementTimeoutReached = true; @@ -417,14 +419,16 @@ static bool MRC_ValidateCellTemperatureMeasurement( * * - Use redundancy only if timestamp of redundant database entry != 0 * - Perform redundant check if both timestamps have been updated - * - Add timeout and trigger error if timestamps have not been updated in the last XXXXms - * - If timeout reached and only one of the two redundant measurements has been updated use this measurement value - * but throw an error that one measurement has not been updated recently. + * - Add timeout and trigger error if timestamps have not been updated in + the last x milliseconds + * - If timeout reached and only one of the two redundant measurements has + been updated use this measurement value but throw an error that one + measurement has not been updated recently. */ /* -------------- Check if cell cell temperature redundant measurement is used ---------- */ /* Use redundant cell voltage measurements if measurement values have been acquired once */ - useCelltemperatureRedundancy = DATA_DatabaseEntryUpdatedAtLeastOnce(pCellTemperatureRedundancy0->header); + useCellTemperatureRedundancy = DATA_DatabaseEntryUpdatedAtLeastOnce(pCellTemperatureRedundancy0->header); /* ----------------- Check timestamp of base measurements--------------- */ if (DATA_EntryUpdatedWithinInterval(pCellTemperatureBase->header, MRC_AFE_MEASUREMENT_PERIOD_TIMEOUT_ms) == true) { @@ -436,16 +440,16 @@ static bool MRC_ValidateCellTemperatureMeasurement( (void)DIAG_Handler(DIAG_ID_BASE_CELL_TEMPERATURE_MEASUREMENT_TIMEOUT, DIAG_EVENT_NOT_OK, DIAG_SYSTEM, 0u); } /* Check if base measurement values have been updated since last MRC */ - if (mrc_state.lastBaseCelltemperatureTimestamp != pCellTemperatureBase->header.timestamp) { - baseCelltemperatureUpdated = true; + if (mrc_state.lastBaseCellTemperatureTimestamp != pCellTemperatureBase->header.timestamp) { + baseCellTemperatureUpdated = true; } else { - baseCelltemperatureUpdated = false; + baseCellTemperatureUpdated = false; } /* ----------------- Check timestamp of redundant measurements --------- */ if ((DATA_EntryUpdatedWithinInterval(pCellTemperatureRedundancy0->header, MRC_AFE_MEASUREMENT_PERIOD_TIMEOUT_ms) == false) && - (useCelltemperatureRedundancy == true)) { + (useCellTemperatureRedundancy == true)) { redundancy0CellTemperatureMeasurementTimeoutReached = true; /* Set error flag */ (void)DIAG_Handler( @@ -456,41 +460,41 @@ static bool MRC_ValidateCellTemperatureMeasurement( } /* ----------------- Validate cell temperatures ------------------------ */ - if (useCelltemperatureRedundancy == true) { - bool redundancy0CelltemperatureUpdated = false; + if (useCellTemperatureRedundancy == true) { + bool redundancy0CellTemperatureUpdated = false; /* Check if redundant measurement values have been updated since last MRC */ - if (mrc_state.lastRedundancy0CelltemperatureTimestamp != pCellTemperatureRedundancy0->header.timestamp) { - redundancy0CelltemperatureUpdated = true; + if (mrc_state.lastRedundancy0CellTemperatureTimestamp != pCellTemperatureRedundancy0->header.timestamp) { + redundancy0CellTemperatureUpdated = true; } else { - redundancy0CelltemperatureUpdated = false; + redundancy0CellTemperatureUpdated = false; } /* Make sure cell voltage timestamps have been updated since last call */ - if ((baseCelltemperatureUpdated == true) && (redundancy0CelltemperatureUpdated == true)) { + if ((baseCellTemperatureUpdated == true) && (redundancy0CellTemperatureUpdated == true)) { /* Update timestamp */ - mrc_state.lastBaseCelltemperatureTimestamp = pCellTemperatureBase->header.timestamp; - mrc_state.lastRedundancy0CelltemperatureTimestamp = pCellTemperatureRedundancy0->header.timestamp; + mrc_state.lastBaseCellTemperatureTimestamp = pCellTemperatureBase->header.timestamp; + mrc_state.lastRedundancy0CellTemperatureTimestamp = pCellTemperatureRedundancy0->header.timestamp; /* Validate cell temperatures */ MRC_ValidateCellTemperature(pCellTemperatureBase, pCellTemperatureRedundancy0, &mrc_tableCellTemperatures); /* Set to true for following minimum, maximum and average calculation */ - updatedValidatedTemperatureDatbaseEntry = true; - } else if ((baseCelltemperatureUpdated == true) || (redundancy0CelltemperatureUpdated == true)) { + updatedValidatedTemperatureDatabaseEntry = true; + } else if ((baseCellTemperatureUpdated == true) || (redundancy0CellTemperatureUpdated == true)) { /* At least one measurement has been updated */ - if (baseCelltemperatureUpdated == true) { + if (baseCellTemperatureUpdated == true) { /* Has redundant measurement timeout been reached? If yes, update. */ if (redundancy0CellTemperatureMeasurementTimeoutReached == true) { /* Copy cell temperature base measurement values into validated database struct */ MRC_UpdateCellTemperatureValidation(pCellTemperatureBase, &mrc_tableCellTemperatures); /* Set to true for following minimum, maximum and average calculation */ - updatedValidatedTemperatureDatbaseEntry = true; + updatedValidatedTemperatureDatabaseEntry = true; } - } else if (redundancy0CelltemperatureUpdated == true) { + } else if (redundancy0CellTemperatureUpdated == true) { /* Has base measurement timeout been reached? If yes, update. */ if (baseCellTemperatureMeasurementTimeoutReached == true) { /* Copy cell temperature redundant measurement values into validated database struct */ MRC_UpdateCellTemperatureValidation(pCellTemperatureRedundancy0, &mrc_tableCellTemperatures); /* Set to true for following minimum, maximum and average calculation */ - updatedValidatedTemperatureDatbaseEntry = true; + updatedValidatedTemperatureDatabaseEntry = true; } } else { FAS_ASSERT(FAS_TRAP); @@ -498,21 +502,21 @@ static bool MRC_ValidateCellTemperatureMeasurement( } else { /* No cell temperature measurement has been updated -> do nothing */ } - } else { /* useCelltemperatureRedundancy == true */ - if (baseCelltemperatureUpdated == true) { + } else { /* useCellTemperatureRedundancy == true */ + if (baseCellTemperatureUpdated == true) { /* Only update database entries if new raw data has been acquired */ /* Update timestamp */ - mrc_state.lastBaseCelltemperatureTimestamp = pCellTemperatureBase->header.timestamp; + mrc_state.lastBaseCellTemperatureTimestamp = pCellTemperatureBase->header.timestamp; /* Copy cell temperature base measurement values into validated database struct */ MRC_UpdateCellTemperatureValidation(pCellTemperatureBase, &mrc_tableCellTemperatures); /* Set to true for following minimum, maximum and average calculation */ - updatedValidatedTemperatureDatbaseEntry = true; + updatedValidatedTemperatureDatabaseEntry = true; } } - if (updatedValidatedTemperatureDatbaseEntry == true) { + if (updatedValidatedTemperatureDatabaseEntry == true) { /* Calculate min/max/average cell temperatures */ MRC_CalculateCellTemperatureMinMaxAverage(&mrc_tableCellTemperatures, &mrc_tableMinimumMaximumValues); @@ -523,7 +527,7 @@ static bool MRC_ValidateCellTemperatureMeasurement( } } - return updatedValidatedTemperatureDatbaseEntry; + return updatedValidatedTemperatureDatabaseEntry; } static void MRC_ValidateCurrentMeasurement(DATA_BLOCK_CURRENT_SENSOR_s *pTableCurrentSensor) { @@ -597,7 +601,8 @@ static void MRC_ValidateStringVoltageMeasurement( pTableCellVoltage->stringVoltage_mV[s], pTableCurrentSensor->highVoltage_mV[s][0u]); (void)DIAG_CheckEvent(voltagePlausible, DIAG_ID_PLAUSIBILITY_PACK_VOLTAGE, DIAG_STRING, s); - /* Use current sensor measurement */ /* TODO: use really current sensor? Average of both? AFE measurement? */ + /* Use current sensor measurement */ /* TODO: use really current sensor? Average of both? AFE measurement? + */ mrc_tablePackValues.stringVoltage_mV[s] = pTableCurrentSensor->highVoltage_mV[s][0u]; if (voltagePlausible == STD_OK) { @@ -650,7 +655,8 @@ static void MRC_ValidateBatteryVoltageMeasurement(void) { for (uint8_t s = 0u; s < BS_NR_OF_STRINGS; s++) { bool isStringConnected = BMS_IsStringClosed(s); if ((mrc_tablePackValues.invalidStringVoltage[s] == 0u) && (isStringConnected == true)) { - /* AXIVION Disable Style MisraC2012Directive-4.1: Values start with 0, iteration is less than UINT8_MAX; overflow impossible */ + /* AXIVION Disable Style MisraC2012Directive-4.1: Values start with 0, iteration is less than UINT8_MAX; + * overflow impossible */ sumOfStringValues_mV += mrc_tablePackValues.stringVoltage_mV[s]; numberOfValidStringVoltages++; /* AXIVION Enable Style MisraC2012Directive-4.1: */ @@ -660,7 +666,8 @@ static void MRC_ValidateBatteryVoltageMeasurement(void) { /* Take average of all strings if no strings are connected */ for (uint8_t s = 0u; s < BS_NR_OF_STRINGS; s++) { if (mrc_tablePackValues.invalidStringVoltage[s] == 0u) { - /* AXIVION Disable Style MisraC2012Directive-4.1: Values start with 0, iteration is less than UINT8_MAX; overflow impossible */ + /* AXIVION Disable Style MisraC2012Directive-4.1: Values start with 0, iteration is less than UINT8_MAX; + * overflow impossible */ sumOfStringValues_mV += mrc_tablePackValues.stringVoltage_mV[s]; numberOfValidStringVoltages++; /* AXIVION Enable Style MisraC2012Directive-4.1: */ @@ -795,7 +802,7 @@ static STD_RETURN_TYPE_e MRC_CalculateCellVoltageMinMaxAverage( /* Iterate over all cells in each string */ for (uint8_t m = 0u; m < BS_NR_OF_MODULES_PER_STRING; m++) { for (uint8_t cb = 0u; cb < BS_NR_OF_CELL_BLOCKS_PER_MODULE; cb++) { - if ((pValidatedVoltages->invalidCellVoltage[s][m] & (0x01u << cb)) == 0u) { + if (pValidatedVoltages->invalidCellVoltage[s][m][cb] == false) { /* Cell voltage is valid -> use this voltage for subsequent calculations */ nrValidCellVoltages++; sum += pValidatedVoltages->cellVoltage_mV[s][m][cb]; @@ -846,16 +853,16 @@ static STD_RETURN_TYPE_e MRC_CalculateCellTemperatureMinMaxAverage( uint16_t sensorNumberMinimum = 0u; uint16_t moduleNumberMaximum = 0u; uint16_t sensorNumberMaximum = 0u; - uint16_t nrValidCelltemperatures = 0u; + uint16_t nrValidCellTemperatures = 0u; int16_t min = INT16_MAX; int16_t max = INT16_MIN; float_t sum_ddegC = 0.0f; for (uint8_t m = 0u; m < BS_NR_OF_MODULES_PER_STRING; m++) { for (uint8_t ts = 0u; ts < BS_NR_OF_TEMP_SENSORS_PER_MODULE; ts++) { - if ((pValidatedTemperatures->invalidCellTemperature[s][m] & (0x01u << ts)) == 0u) { + if (pValidatedTemperatures->invalidCellTemperature[s][m][ts] == false) { /* Cell temperature is valid -> use this voltage for subsequent calculations */ - nrValidCelltemperatures++; + nrValidCellTemperatures++; sum_ddegC += (float_t)pValidatedTemperatures->cellTemperature_ddegC[s][m][ts]; if (pValidatedTemperatures->cellTemperature_ddegC[s][m][ts] < min) { @@ -877,11 +884,11 @@ static STD_RETURN_TYPE_e MRC_CalculateCellTemperatureMinMaxAverage( pMinMaxAverageValues->maximumTemperature_ddegC[s] = max; pMinMaxAverageValues->nrSensorMaximumTemperature[s] = sensorNumberMaximum; pMinMaxAverageValues->nrModuleMaximumTemperature[s] = moduleNumberMaximum; - pMinMaxAverageValues->validMeasuredCellTemperatures[s] = nrValidCelltemperatures; + pMinMaxAverageValues->validMeasuredCellTemperatures[s] = nrValidCellTemperatures; /* Prevent division by 0, if all cell temperatures are invalid */ - if (nrValidCelltemperatures > 0u) { - pMinMaxAverageValues->averageTemperature_ddegC[s] = (sum_ddegC / (float_t)nrValidCelltemperatures); + if (nrValidCellTemperatures > 0u) { + pMinMaxAverageValues->averageTemperature_ddegC[s] = (sum_ddegC / (float_t)nrValidCellTemperatures); } else { pMinMaxAverageValues->averageTemperature_ddegC[s] = 0.0f; retval = STD_NOT_OK; @@ -908,39 +915,37 @@ static STD_RETURN_TYPE_e MRC_ValidateCellVoltage( int32_t sum = 0; for (uint8_t m = 0; m < BS_NR_OF_MODULES_PER_STRING; m++) { for (uint8_t cb = 0; cb < BS_NR_OF_CELL_BLOCKS_PER_MODULE; cb++) { - if (((pCellVoltageBase->invalidCellVoltage[s][m] & (1u << cb)) == 0u) && - ((pCellVoltageRedundancy0->invalidCellVoltage[s][m] & (1u << cb)) == 0u)) { + if ((pCellVoltageBase->invalidCellVoltage[s][m][cb] == false) && + (pCellVoltageRedundancy0->invalidCellVoltage[s][m][cb] == false)) { /* Check if cell voltage of base AND redundant measurement is valid -> do plausibility check */ if (STD_OK == PL_CheckCellVoltage( pCellVoltageBase->cellVoltage_mV[s][m][cb], pCellVoltageRedundancy0->cellVoltage_mV[s][m][cb], &pValidatedVoltages->cellVoltage_mV[s][m][cb])) { /* Clear valid flag */ - pValidatedVoltages->invalidCellVoltage[s][m] = pValidatedVoltages->invalidCellVoltage[s][m] & - (~(1u << cb)); + pValidatedVoltages->invalidCellVoltage[s][m][cb] = false; numberValidMeasurements++; sum += pValidatedVoltages->cellVoltage_mV[s][m][cb]; } else { /* Set invalid flag */ - noPlausibilityIssueDetected = STD_NOT_OK; - pValidatedVoltages->invalidCellVoltage[s][m] |= (1u << cb); + noPlausibilityIssueDetected = STD_NOT_OK; + pValidatedVoltages->invalidCellVoltage[s][m][cb] = true; /* Set return value to #STD_NOT_OK as not all cell voltages have a valid measurement value */ retval = STD_NOT_OK; } - } else if ((pCellVoltageBase->invalidCellVoltage[s][m] & (1u << cb)) == 0u) { + } else if (pCellVoltageBase->invalidCellVoltage[s][m][cb] == false) { /* Only base measurement value is valid -> use this voltage without further plausibility checks */ pValidatedVoltages->cellVoltage_mV[s][m][cb] = pCellVoltageBase->cellVoltage_mV[s][m][cb]; /* Reset valid flag */ - pValidatedVoltages->invalidCellVoltage[s][m] = pValidatedVoltages->invalidCellVoltage[s][m] & - (~(1u << cb)); + pValidatedVoltages->invalidCellVoltage[s][m][cb] = false; numberValidMeasurements++; sum += pValidatedVoltages->cellVoltage_mV[s][m][cb]; - } else if ((pCellVoltageRedundancy0->invalidCellVoltage[s][m] & (1u << cb)) == 0u) { - /* Only redundant measurement value is valid -> use this voltage without further plausibility checks */ + } else if (pCellVoltageRedundancy0->invalidCellVoltage[s][m][cb] == false) { + /* Only redundant measurement value is valid -> use this voltage without further plausibility checks + */ pValidatedVoltages->cellVoltage_mV[s][m][cb] = pCellVoltageRedundancy0->cellVoltage_mV[s][m][cb]; /* Reset valid flag */ - pValidatedVoltages->invalidCellVoltage[s][m] = pValidatedVoltages->invalidCellVoltage[s][m] & - (~(1u << cb)); + pValidatedVoltages->invalidCellVoltage[s][m][cb] = false; numberValidMeasurements++; sum += pValidatedVoltages->cellVoltage_mV[s][m][cb]; } else { @@ -950,7 +955,7 @@ static STD_RETURN_TYPE_e MRC_ValidateCellVoltage( pCellVoltageRedundancy0->cellVoltage_mV[s][m][cb]) / 2; /* Set invalid flag */ - pValidatedVoltages->invalidCellVoltage[s][m] |= (1u << cb); + pValidatedVoltages->invalidCellVoltage[s][m][cb] = true; /* Set return value to #STD_NOT_OK as not all cell voltages have a valid measurement value */ retval = STD_NOT_OK; } @@ -984,12 +989,12 @@ static STD_RETURN_TYPE_e MRC_UpdateCellVoltageValidation( } static STD_RETURN_TYPE_e MRC_ValidateCellTemperature( - DATA_BLOCK_CELL_TEMPERATURE_s *pCelltemperatureBase, - DATA_BLOCK_CELL_TEMPERATURE_s *pCelltemperatureRedundancy0, + DATA_BLOCK_CELL_TEMPERATURE_s *pCellTemperatureBase, + DATA_BLOCK_CELL_TEMPERATURE_s *pCellTemperatureRedundancy0, DATA_BLOCK_CELL_TEMPERATURE_s *pValidatedTemperatures) { /* Pointer validity check */ - FAS_ASSERT(pCelltemperatureBase != NULL_PTR); - FAS_ASSERT(pCelltemperatureRedundancy0 != NULL_PTR); + FAS_ASSERT(pCellTemperatureBase != NULL_PTR); + FAS_ASSERT(pCellTemperatureRedundancy0 != NULL_PTR); FAS_ASSERT(pValidatedTemperatures != NULL_PTR); uint16_t numberValidMeasurements = 0u; @@ -1000,49 +1005,49 @@ static STD_RETURN_TYPE_e MRC_ValidateCellTemperature( for (uint8_t s = 0u; s < BS_NR_OF_STRINGS; s++) { for (uint8_t m = 0u; m < BS_NR_OF_MODULES_PER_STRING; m++) { for (uint8_t ts = 0u; ts < BS_NR_OF_TEMP_SENSORS_PER_MODULE; ts++) { - if (((pCelltemperatureBase->invalidCellTemperature[s][m] & (1u << ts)) == 0u) && - ((pCelltemperatureRedundancy0->invalidCellTemperature[s][m] & (1u << ts)) == 0u)) { + if ((pCellTemperatureBase->invalidCellTemperature[s][m][ts] == false) && + (pCellTemperatureRedundancy0->invalidCellTemperature[s][m][ts] == false)) { /* Check if cell voltage of base AND redundant measurement is valid -> do plausibility check */ - if (STD_OK == PL_CheckCelltemperature( - pCelltemperatureBase->cellTemperature_ddegC[s][m][ts], - pCelltemperatureRedundancy0->cellTemperature_ddegC[s][m][ts], + if (STD_OK == PL_CheckCellTemperature( + pCellTemperatureBase->cellTemperature_ddegC[s][m][ts], + pCellTemperatureRedundancy0->cellTemperature_ddegC[s][m][ts], &pValidatedTemperatures->cellTemperature_ddegC[s][m][ts])) { - /* Clear valid flag */ - pValidatedTemperatures->invalidCellTemperature[s][m] = - pValidatedTemperatures->invalidCellTemperature[s][m] & (~(1u << ts)); + /* Reset invalid flag */ + pValidatedTemperatures->invalidCellTemperature[s][m][ts] = false; numberValidMeasurements++; } else { /* Set invalid flag */ - noPlausibilityIssueDetected = STD_NOT_OK; - pValidatedTemperatures->invalidCellTemperature[s][m] |= (1u << ts); - /* Set return value to #STD_NOT_OK as not all cell temperatures have a valid measurement value */ + noPlausibilityIssueDetected = STD_NOT_OK; + pValidatedTemperatures->invalidCellTemperature[s][m][ts] = true; + /* Set return value to #STD_NOT_OK as not all cell temperatures have a valid measurement value + */ retval = STD_NOT_OK; } - } else if ((pCelltemperatureBase->invalidCellTemperature[s][m] & (1u << ts)) == 0u) { - /* Only base measurement value is valid -> use this temperature without further plausibility checks */ + } else if (pCellTemperatureBase->invalidCellTemperature[s][m][ts] == false) { + /* Only base measurement value is valid -> use this temperature without further plausibility checks + */ pValidatedTemperatures->cellTemperature_ddegC[s][m][ts] = - pCelltemperatureBase->cellTemperature_ddegC[s][m][ts]; - /* Reset valid flag */ - pValidatedTemperatures->invalidCellTemperature[s][m] = - pValidatedTemperatures->invalidCellTemperature[s][m] & (~(1u << ts)); + pCellTemperatureBase->cellTemperature_ddegC[s][m][ts]; + /* Reset invalid flag */ + pValidatedTemperatures->invalidCellTemperature[s][m][ts] = false; numberValidMeasurements++; - } else if ((pCelltemperatureRedundancy0->invalidCellTemperature[s][m] & (1u << ts)) == 0u) { - /* Only redundant measurement value is valid -> use this temperature without further plausibility checks */ + } else if (pCellTemperatureRedundancy0->invalidCellTemperature[s][m][ts] == false) { + /* Only redundant measurement value is valid -> use this temperature without further plausibility + * checks */ pValidatedTemperatures->cellTemperature_ddegC[s][m][ts] = - pCelltemperatureRedundancy0->cellTemperature_ddegC[s][m][ts]; - /* Reset valid flag */ - pValidatedTemperatures->invalidCellTemperature[s][m] = - pValidatedTemperatures->invalidCellTemperature[s][m] & (~(1u << ts)); + pCellTemperatureRedundancy0->cellTemperature_ddegC[s][m][ts]; + /* Reset invalid flag */ + pValidatedTemperatures->invalidCellTemperature[s][m][ts] = false; numberValidMeasurements++; } else { /* Both, base and redundant measurement value are invalid */ /* Save average cell voltage value of base and redundant */ pValidatedTemperatures->cellTemperature_ddegC[s][m][ts] = - (pCelltemperatureBase->cellTemperature_ddegC[s][m][ts] + - pCelltemperatureRedundancy0->cellTemperature_ddegC[s][m][ts]) / + (pCellTemperatureBase->cellTemperature_ddegC[s][m][ts] + + pCellTemperatureRedundancy0->cellTemperature_ddegC[s][m][ts]) / 2u; /* Set invalid flag */ - pValidatedTemperatures->invalidCellTemperature[s][m] |= (1u << ts); + pValidatedTemperatures->invalidCellTemperature[s][m][ts] = true; /* Set return value to #STD_NOT_OK as not all cell temperatures have a valid measurement value */ retval = STD_NOT_OK; } @@ -1080,10 +1085,14 @@ extern STD_RETURN_TYPE_e MRC_Initialize(void) { for (uint8_t s = 0u; s < BS_NR_OF_STRINGS; s++) { for (uint8_t m = 0u; m < BS_NR_OF_MODULES_PER_STRING; m++) { /* Invalidate cell voltage values */ - mrc_tableCellVoltages.invalidCellVoltage[s][m] = 0xFFFFFFFFFFFFFFFFuLL; + for (uint8_t cb = 0; cb < BS_NR_OF_CELL_BLOCKS_PER_MODULE; cb++) { + mrc_tableCellVoltages.invalidCellVoltage[s][m][cb] = true; + } mrc_tableCellVoltages.validModuleVoltage[s][m] = false; /* Invalidate cell temperature values */ - mrc_tableCellTemperatures.invalidCellTemperature[s][m] = 0xFFFF; + for (uint8_t ts = 0; ts < BS_NR_OF_TEMP_SENSORS_PER_MODULE; ts++) { + mrc_tableCellTemperatures.invalidCellTemperature[s][m][ts] = true; + } } /* Invalidate string values */ mrc_tablePackValues.invalidStringVoltage[s] = 0x01; @@ -1108,17 +1117,17 @@ extern STD_RETURN_TYPE_e MRC_ValidateAfeMeasurement(void) { static DATA_BLOCK_CELL_VOLTAGE_s mrc_tableCellVoltageRedundancy0 = { .header.uniqueId = DATA_BLOCK_ID_CELL_VOLTAGE_REDUNDANCY0}; - static DATA_BLOCK_CELL_TEMPERATURE_s mrc_tableCelltemperatureBase = { + static DATA_BLOCK_CELL_TEMPERATURE_s mrc_tableCellTemperatureBase = { .header.uniqueId = DATA_BLOCK_ID_CELL_TEMPERATURE_BASE}; - static DATA_BLOCK_CELL_TEMPERATURE_s mrc_tableCelltemperatureRedundancy0 = { + static DATA_BLOCK_CELL_TEMPERATURE_s mrc_tableCellTemperatureRedundancy0 = { .header.uniqueId = DATA_BLOCK_ID_CELL_TEMPERATURE_REDUNDANCY0}; /* Get measurement values */ DATA_READ_DATA( &mrc_tableCellVoltageBase, &mrc_tableCellVoltageRedundancy0, - &mrc_tableCelltemperatureBase, - &mrc_tableCelltemperatureRedundancy0); + &mrc_tableCellTemperatureBase, + &mrc_tableCellTemperatureRedundancy0); /* Perform validation of cell voltage measurement */ bool updateCellVoltages = @@ -1126,7 +1135,7 @@ extern STD_RETURN_TYPE_e MRC_ValidateAfeMeasurement(void) { /* Perform validation of cell temperature measurement */ bool updateCellTemperatures = - MRC_ValidateCellTemperatureMeasurement(&mrc_tableCelltemperatureBase, &mrc_tableCelltemperatureRedundancy0); + MRC_ValidateCellTemperatureMeasurement(&mrc_tableCellTemperatureBase, &mrc_tableCellTemperatureRedundancy0); /* Update database entries if necessary */ if ((updateCellVoltages == true) && (updateCellTemperatures == true)) { @@ -1220,10 +1229,10 @@ extern STD_RETURN_TYPE_e TEST_MRC_UpdateCellVoltageValidation( return MRC_UpdateCellVoltageValidation(pCellVoltage, pValidatedVoltages); } extern STD_RETURN_TYPE_e TEST_MRC_ValidateCellTemperature( - DATA_BLOCK_CELL_TEMPERATURE_s *pCelltemperatureBase, - DATA_BLOCK_CELL_TEMPERATURE_s *pCelltemperatureRedundancy0, + DATA_BLOCK_CELL_TEMPERATURE_s *pCellTemperatureBase, + DATA_BLOCK_CELL_TEMPERATURE_s *pCellTemperatureRedundancy0, DATA_BLOCK_CELL_TEMPERATURE_s *pValidatedTemperatures) { - return MRC_ValidateCellTemperature(pCelltemperatureBase, pCelltemperatureRedundancy0, pValidatedTemperatures); + return MRC_ValidateCellTemperature(pCellTemperatureBase, pCellTemperatureRedundancy0, pValidatedTemperatures); } extern STD_RETURN_TYPE_e TEST_MRC_UpdateCellTemperatureValidation( DATA_BLOCK_CELL_TEMPERATURE_s *pCellTemperature, diff --git a/src/app/application/redundancy/redundancy.h b/src/app/application/redundancy/redundancy.h index c79fb0a2..3cd76afa 100644 --- a/src/app/application/redundancy/redundancy.h +++ b/src/app/application/redundancy/redundancy.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,14 @@ * @file redundancy.h * @author foxBMS Team * @date 2020-07-31 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup APPLICATION * @prefix MRC * - * @brief Header fileS for handling redundancy between redundant cell voltage + * @brief Header files for handling redundancy between redundant cell voltage * and cell temperature measurements + * @details TODO * */ @@ -69,7 +70,7 @@ * measurement is not updated anymore. * * The redundancy module will wait a maximum of this time for new current - * values. If no new values are updated within this timeframe it + * values. If no new values are updated within this time frame it * will invalidate the measurement values. */ #define MRC_CURRENT_MEASUREMENT_PERIOD_TIMEOUT_ms (250u) @@ -82,7 +83,7 @@ * The redundancy module will wait a maximum of this * time for new values from the base AFE measurement and * AFE redundant measurements. If no new values are updated - * from both measurement sources within this timeframe + * from both measurement sources within this time frame * it will validate the measurement values it has up to * this point if possible. */ @@ -95,7 +96,7 @@ * * The redundancy module will wait a maximum of this * time for new values from the current sensor. If no - * new values are updated within this timeframe it will + * new values are updated within this time frame it will * validate the measurement values it has up to this point * if possible. */ @@ -106,7 +107,7 @@ * we try to construct the string voltage by replacing invalid cell voltage * measurements with the average cell voltage in this string. The result of * this estimation will be flagged as invalid if more than the number of - * allowed invalid cell voltages are detected. The result will be markes as + * allowed invalid cell voltages are detected. The result will be marked as * valid if less then this number of cells are detected as invalid. */ #define MRC_ALLOWED_NUMBER_OF_INVALID_CELL_VOLTAGES (5u) @@ -118,15 +119,15 @@ typedef struct { uint32_t lastBaseCellVoltageTimestamp; uint32_t lastRedundancy0CellVoltageTimestamp; - uint32_t lastBaseCelltemperatureTimestamp; - uint32_t lastRedundancy0CelltemperatureTimestamp; + uint32_t lastBaseCellTemperatureTimestamp; + uint32_t lastRedundancy0CellTemperatureTimestamp; uint32_t lastStringCurrentTimestamp[BS_NR_OF_STRINGS]; uint32_t lastStringPowerTimestamp[BS_NR_OF_STRINGS]; } MRC_STATE_s; /*========== Extern Function Prototypes =====================================*/ /** - * @brief Function to initalize redundancy module + * @brief Function to initialize redundancy module * * @return #STD_OK if module has been initialized successfully, otherwise #STD_NOT_OK */ @@ -184,8 +185,8 @@ extern STD_RETURN_TYPE_e TEST_MRC_UpdateCellVoltageValidation( DATA_BLOCK_CELL_VOLTAGE_s *pCellVoltage, DATA_BLOCK_CELL_VOLTAGE_s *pValidatedVoltages); extern STD_RETURN_TYPE_e TEST_MRC_ValidateCellTemperature( - DATA_BLOCK_CELL_TEMPERATURE_s *pCelltemperatureBase, - DATA_BLOCK_CELL_TEMPERATURE_s *pCelltemperatureRedundancy0, + DATA_BLOCK_CELL_TEMPERATURE_s *pCellTemperatureBase, + DATA_BLOCK_CELL_TEMPERATURE_s *pCellTemperatureRedundancy0, DATA_BLOCK_CELL_TEMPERATURE_s *pValidatedTemperatures); extern STD_RETURN_TYPE_e TEST_MRC_UpdateCellTemperatureValidation( DATA_BLOCK_CELL_TEMPERATURE_s *pCellTemperature, diff --git a/src/app/application/soa/soa.c b/src/app/application/soa/soa.c index 702865b9..dd97c5a3 100644 --- a/src/app/application/soa/soa.c +++ b/src/app/application/soa/soa.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,14 +43,14 @@ * @file soa.c * @author foxBMS Team * @date 2020-10-14 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup APPLICATION * @prefix SOA * * @brief SOA module responsible for checking battery parameters against * safety limits - * + * @details TODO */ /*========== Includes =======================================================*/ diff --git a/src/app/application/soa/soa.h b/src/app/application/soa/soa.h index efc5cc38..7b255bb6 100644 --- a/src/app/application/soa/soa.h +++ b/src/app/application/soa/soa.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,14 +43,14 @@ * @file soa.h * @author foxBMS Team * @date 2020-10-14 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup APPLICATION * @prefix SOA * * @brief Header for SOA module, responsible for checking battery parameters * against safety limits - * + * @details TODO */ #ifndef FOXBMS__SOA_H_ diff --git a/src/app/application/wscript b/src/app/application/wscript old mode 100644 new mode 100755 index db6ae4a4..164c9f05 --- a/src/app/application/wscript +++ b/src/app/application/wscript @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause diff --git a/src/app/driver/adc/adc.c b/src/app/driver/adc/adc.c index 22e5112f..b46bbbd1 100644 --- a/src/app/driver/adc/adc.c +++ b/src/app/driver/adc/adc.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file adc.c * @author foxBMS Team * @date 2019-01-07 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix ADC * * @brief Driver for the ADC module. - * + * @details TODO */ /*========== Includes =======================================================*/ @@ -92,9 +92,10 @@ static float_t ADC_ConvertVoltage(uint16_t adcCounts); static float_t ADC_ConvertVoltage(uint16_t adcCounts) { /* AXIVION Routine Generic-MissingParameterAssert: adcValue_mV: parameter accepts whole range */ - /** For details to equation see Equation 28 in Technical Reference Manual SPNU563A - March 2018 page 852 */ - float_t result_mV = (((adcCounts + ADC_CONV_OFFSET) * (ADC_VREFHIGH_mV - ADC_VREFLOW_mV)) / ADC_CONV_FACTOR_12BIT) + - ADC_VREFLOW_mV; + /** docref: For details to equation see Equation 28 in Technical Reference Manual SPNU563A - March 2018 page 852 */ + float_t result_mV = + (((adcCounts + ADC_CONVERSION_OFFSET) * (ADC_VREFHIGH_mV - ADC_VREFLOW_mV)) / ADC_CONVERSION_FACTOR_12BIT) + + ADC_VREFLOW_mV; return result_mV; } @@ -130,13 +131,21 @@ extern void ADC_Control(void) { adc_conversionState = ADC_START_CONVERSION; break; - default: - /* invalid state */ - FAS_ASSERT(FAS_TRAP); - break; + default: /* invalid state */ /* LCOV_EXCL_LINE */ + FAS_ASSERT(FAS_TRAP); /* LCOV_EXCL_LINE */ + break; /* LCOV_EXCL_LINE */ } } /*========== Externalized Static Function Implementations (Unit Test) =======*/ #ifdef UNITY_UNIT_TEST +extern float_t TEST_ADC_ConvertVoltage(uint16_t adcCounts) { + return ADC_ConvertVoltage(adcCounts); +} +extern void TEST_ADC_SetAdcConversionState(ADC_STATE_e state) { + adc_conversionState = state; +} +extern ADC_STATE_e TEST_ADC_GetAdcConversionState(void) { + return adc_conversionState; +} #endif diff --git a/src/app/driver/adc/adc.h b/src/app/driver/adc/adc.h index fb0082ff..620b14d2 100644 --- a/src/app/driver/adc/adc.h +++ b/src/app/driver/adc/adc.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file adc.h * @author foxBMS Team * @date 2019-01-07 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix ADC * * @brief Headers for the driver for the ADC module. - * + * @details TODO */ #ifndef FOXBMS__ADC_H_ @@ -63,6 +63,10 @@ #include +#ifdef UNITY_UNIT_TEST +#include +#endif + /*========== Macros and Definitions =========================================*/ /** ADC voltage reference, high */ @@ -70,11 +74,11 @@ /** ADC voltage reference, low */ #define ADC_VREFLOW_mV (0.0f) /** ADC conversion factor, 12 bit conversion */ -#define ADC_CONV_FACTOR_12BIT (4096.0f) +#define ADC_CONVERSION_FACTOR_12BIT (4096.0f) /** ADC conversion factor, 10 bit conversion */ -#define ADC_CONV_FACTOR_10BIT (1024.0f) +#define ADC_CONVERSION_FACTOR_10BIT (1024.0f) /** ADC conversion offset */ -#define ADC_CONV_OFFSET (0.5f) +#define ADC_CONVERSION_OFFSET (0.5f) /** End bit position in ADC Groupx Interrupt Flag Register */ #define ADC_CONVERSION_ENDDBIT (8u) @@ -100,6 +104,9 @@ extern void ADC_Control(void); /*========== Externalized Static Functions Prototypes (Unit Test) ===========*/ #ifdef UNITY_UNIT_TEST +extern float_t TEST_ADC_ConvertVoltage(uint16_t adcCounts); +extern void TEST_ADC_SetAdcConversionState(ADC_STATE_e state); +extern ADC_STATE_e TEST_ADC_GetAdcConversionState(void); #endif #endif /* FOXBMS__ADC_H_ */ diff --git a/src/app/driver/afe/adi/ades1830/adi_ades1830.json b/src/app/driver/afe/adi/ades1830/adi_ades1830.json index 5428fc6b..ddebf84e 100644 --- a/src/app/driver/afe/adi/ades1830/adi_ades1830.json +++ b/src/app/driver/afe/adi/ades1830/adi_ades1830.json @@ -1,11 +1,11 @@ { - "include": [ - ".", - "config", - "../common/ades183x", - "../common/ades183x/api", - "../common/ades183x/config", - "../common/ades183x/pec", - "../../api" - ] + "include": [ + ".", + "config", + "../common/ades183x", + "../common/ades183x/api", + "../common/ades183x/config", + "../common/ades183x/pec", + "../../api" + ] } diff --git a/src/app/driver/afe/adi/ades1830/adi_ades1830_balancing.c b/src/app/driver/afe/adi/ades1830/adi_ades1830_balancing.c index c4df14ee..f2ee1af9 100644 --- a/src/app/driver/afe/adi/ades1830/adi_ades1830_balancing.c +++ b/src/app/driver/afe/adi/ades1830/adi_ades1830_balancing.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file adi_ades1830_balancing.c * @author foxBMS Team * @date 2019-08-27 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup SOME_GROUP + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS * @prefix ADI * - * @brief Implementation of some software - * + * @brief Implementation of helpers for the balancing functionality + * @details TODO */ /*========== Includes =======================================================*/ @@ -76,33 +76,33 @@ /*========== Static Function Implementations ================================*/ /*========== Extern Function Implementations ================================*/ -extern void ADI_DeactivateBalancing(ADI_STATE_s *adiState) { - FAS_ASSERT(adiState != NULL_PTR); +extern void ADI_DeactivateBalancing(ADI_STATE_s *pAdiState) { + FAS_ASSERT(pAdiState != NULL_PTR); /* Deactivate balancing before sending unmute command */ for (uint16_t m = 0; m < BS_NR_OF_MODULES_PER_STRING; m++) { const uint16_t reverseModuleNumber = BS_NR_OF_MODULES_PER_STRING - m - 1u; ADI_WriteDataBits( - &adi_configurationRegisterBgroup[adiState->currentString] + &adi_configurationRegisterBgroup[pAdiState->currentString] [(reverseModuleNumber * ADI_WRCFGB_LEN) + ADI_REGISTER_OFFSET4], 0u, ADI_CFGRB4_DCC_1_8_POS, ADI_CFGRB4_DCC_1_8_MASK); ADI_WriteDataBits( - &adi_configurationRegisterBgroup[adiState->currentString] + &adi_configurationRegisterBgroup[pAdiState->currentString] [(reverseModuleNumber * ADI_WRCFGB_LEN) + ADI_REGISTER_OFFSET5], 0u, ADI_CFGRB5_DCC_9_16_POS, ADI_CFGRB5_DCC_9_16_MASK); } - ADI_StoredConfigurationWriteToAfeGlobal(adiState); + ADI_StoredConfigurationWriteToAfeGlobal(pAdiState); /* Send Unmute command */ ADI_CopyCommandBits(adi_cmdUnmute, adi_command); - ADI_TransmitCommand(adi_command, adiState); + ADI_TransmitCommand(adi_command, pAdiState); } -extern void ADI_DetermineBalancingRegisterConfiguration(ADI_STATE_s *adiState) { - FAS_ASSERT(adiState != NULL_PTR); +extern void ADI_DetermineBalancingRegisterConfiguration(ADI_STATE_s *pAdiState) { + FAS_ASSERT(pAdiState != NULL_PTR); uint16_t storedVoltageIndex = 0u; for (uint16_t m = 0; m < BS_NR_OF_MODULES_PER_STRING; m++) { @@ -112,9 +112,8 @@ extern void ADI_DetermineBalancingRegisterConfiguration(ADI_STATE_s *adiState) { for (uint8_t c = 0u; c < ADI_MAX_SUPPORTED_CELLS; c++) { if (adi_voltageInputsUsed[c] == 1u) { storedVoltageIndex = ADI_GetStoredVoltageIndex(c); - if (adiState->data.balancingControl - ->balancingState[adiState->currentString] - [(m * (BS_NR_OF_CELL_BLOCKS_PER_MODULE)) + storedVoltageIndex] == 1u) { + if (pAdiState->data.balancingControl + ->activateBalancing[pAdiState->currentString][m][storedVoltageIndex] == true) { if (c < ADI_CFGRB_NUMBER_OF_DCC_BITS_PER_BYTE) { /* 0 - 7 cells */ dccRegisterLow |= (uint8_t)(1u << c); } else { /* 8 - 15 cells */ @@ -124,19 +123,19 @@ extern void ADI_DetermineBalancingRegisterConfiguration(ADI_STATE_s *adiState) { } } ADI_WriteDataBits( - &adi_configurationRegisterBgroup[adiState->currentString] + &adi_configurationRegisterBgroup[pAdiState->currentString] [(reverseModuleNumber * ADI_WRCFGB_LEN) + ADI_REGISTER_OFFSET4], dccRegisterLow, ADI_CFGRB4_DCC_1_8_POS, ADI_CFGRB4_DCC_1_8_MASK); ADI_WriteDataBits( - &adi_configurationRegisterBgroup[adiState->currentString] + &adi_configurationRegisterBgroup[pAdiState->currentString] [(reverseModuleNumber * ADI_WRCFGB_LEN) + ADI_REGISTER_OFFSET5], dccRegisterHigh, ADI_CFGRB5_DCC_9_16_POS, ADI_CFGRB5_DCC_9_16_MASK); } - ADI_StoredConfigurationWriteToAfeGlobal(adiState); + ADI_StoredConfigurationWriteToAfeGlobal(pAdiState); } /*========== Externalized Static Function Implementations (Unit Test) =======*/ diff --git a/src/app/driver/afe/adi/ades1830/adi_ades1830_defs.h b/src/app/driver/afe/adi/ades1830/adi_ades1830_defs.h index 768d828e..f25343b1 100644 --- a/src/app/driver/afe/adi/ades1830/adi_ades1830_defs.h +++ b/src/app/driver/afe/adi/ades1830/adi_ades1830_defs.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file adi_ades1830_defs.h * @author foxBMS Team * @date 2015-09-01 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix ADI * * @brief Headers for the driver for the ADES1830 analog front-end. - * + * @details TODO */ #ifndef FOXBMS__ADI_ADES1830_DEFS_H_ diff --git a/src/app/driver/afe/adi/ades1830/adi_ades1830_gpio_voltages.c b/src/app/driver/afe/adi/ades1830/adi_ades1830_gpio_voltages.c index 41677245..c74bf3c6 100644 --- a/src/app/driver/afe/adi/ades1830/adi_ades1830_gpio_voltages.c +++ b/src/app/driver/afe/adi/ades1830/adi_ades1830_gpio_voltages.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,16 +43,20 @@ * @file adi_ades1830_gpio_voltages.c * @author foxBMS Team * @date 2019-08-27 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup SOME_GROUP + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS * @prefix ADI * - * @brief Implementation of some software - * + * @brief Reading and the GPIO voltage registers of the ADI ADES1830 + * @details Implements all required functionalities for reading the GPIO + * voltage registers in the of the ADI ADES1830. */ /*========== Includes =======================================================*/ +/* AXIVION Next Codeline Generic-LocalInclude: 'adi_ades183x_gpio_voltages.h' + * declares the prototype for the callback 'ADI_GetGpioVoltages', i.e., it is + * own header file for this compilation unit */ /* clang-format off */ #include "adi_ades183x_gpio_voltages.h" /* clang-format on */ @@ -84,27 +88,27 @@ * GPIO voltages. * This function is called to store the result from the transmission * buffer to the appropriate location in the driver. - * @param adiState state of the ADI driver - * @param data receive buffer + * @param pAdiState state of the ADI driver + * @param pData receive buffer * @param registerSet auxiliary register that was read (voltage register * A, B, C or D). * @param storeLocation location where read data has to be stored */ static void ADI_SaveRxToGpioVoltageBuffer( - ADI_STATE_s *adiState, - uint8_t *data, + ADI_STATE_s *pAdiState, + uint8_t *pData, uint8_t registerSet, ADI_AUXILIARY_STORE_LOCATION_e storeLocation); /*========== Static Function Implementations ================================*/ -/* RequirementId: D7.1 V0R4 FUN-2.10.01.02 */ +/* RequirementId: D7.1 V1R0 FUN-2.10.01.02 */ static void ADI_SaveRxToGpioVoltageBuffer( - ADI_STATE_s *adiState, - uint8_t *data, + ADI_STATE_s *pAdiState, + uint8_t *pData, uint8_t registerSet, ADI_AUXILIARY_STORE_LOCATION_e storeLocation) { - FAS_ASSERT(adiState != NULL_PTR); - FAS_ASSERT(data != NULL_PTR); + FAS_ASSERT(pAdiState != NULL_PTR); + FAS_ASSERT(pData != NULL_PTR); FAS_ASSERT( (registerSet == ADI_AUXILIARY_RESULT_REGISTER_SET_A) || (registerSet == ADI_AUXILIARY_RESULT_REGISTER_SET_B) || (registerSet == ADI_AUXILIARY_RESULT_REGISTER_SET_C) || (registerSet == ADI_AUXILIARY_RESULT_REGISTER_SET_D) || @@ -127,13 +131,13 @@ static void ADI_SaveRxToGpioVoltageBuffer( switch (storeLocation) { case ADI_AUXILIARY_VOLTAGE: - pGpioVoltageTable = adiState->data.allGpioVoltages; + pGpioVoltageTable = pAdiState->data.allGpioVoltages; break; case ADI_REDUNDANT_AUXILIARY_VOLTAGE: - pGpioVoltageTable = adiState->data.allGpioVoltagesRedundant; + pGpioVoltageTable = pAdiState->data.allGpioVoltagesRedundant; break; case ADI_AUXILIARY_VOLTAGE_OPEN_WIRE: - pGpioVoltageTable = adiState->data.allGpioVoltageOpenWire; + pGpioVoltageTable = pAdiState->data.allGpioVoltageOpenWire; break; default: /* LCOV_EXCL_LINE */ FAS_ASSERT(FAS_TRAP); /* LCOV_EXCL_LINE */ @@ -171,28 +175,28 @@ static void ADI_SaveRxToGpioVoltageBuffer( for (uint16_t gpio = voltageStartNumber; gpio < numberOfVoltagesInRegister; gpio++) { voltageIndex = gpio + cellOffset; if (voltageIndex < BS_NR_OF_GPIOS_PER_MODULE) { - bufferMSB = (uint16_t)(data + bufferMSB = (uint16_t)(pData [(ADI_RAW_VOLTAGE_SIZE_IN_BYTES * gpio) + (m * ADI_MAX_REGISTER_SIZE_IN_BYTES) + 1u]); bufferLSB = - (uint16_t)(data[(ADI_RAW_VOLTAGE_SIZE_IN_BYTES * gpio) + (m * ADI_MAX_REGISTER_SIZE_IN_BYTES)]); + (uint16_t)(pData[(ADI_RAW_VOLTAGE_SIZE_IN_BYTES * gpio) + (m * ADI_MAX_REGISTER_SIZE_IN_BYTES)]); rawValue = bufferLSB | (bufferMSB << ADI_BYTE_SHIFT); signedValue = (int16_t)rawValue; floatVoltage = ((float_t)signedValue * ADI_VOLTAGE_CONVERSION_FACTOR * ADI_VOLTAGE_CONVERSION_UNIT) + ADI_VOLTAGE_CONVERSION_OFFSET; voltage = (int16_t)floatVoltage; /* Unit mV */ - /* RequirementId: D7.1 V0R4 SIF-4.40.02.01 */ + /* RequirementId: D7.1 V1R0 SIF-4.40.02.01 */ /* Check that register does not contain cleared value */ if (rawValue != ADI_REGISTER_CLEARED_VALUE) { - adiState->data.errorTable->auxiliaryRegisterContentIsNotStuck[adiState->currentString][m] = true; + pAdiState->data.errorTable->auxiliaryRegisterContentIsNotStuck[pAdiState->currentString][m] = true; /* Check PEC for every IC in the daisy-chain */ - if (adiState->data.errorTable->crcIsOk[adiState->currentString][m] == true) { - pGpioVoltageTable->gpioVoltages_mV[adiState->currentString] + if (pAdiState->data.errorTable->crcIsOk[pAdiState->currentString][m] == true) { + pGpioVoltageTable->gpioVoltages_mV[pAdiState->currentString] [voltageIndex + (m * BS_NR_OF_GPIOS_PER_MODULE)] = voltage; } } else { - adiState->data.errorTable->auxiliaryRegisterContentIsNotStuck[adiState->currentString][m] = false; + pAdiState->data.errorTable->auxiliaryRegisterContentIsNotStuck[pAdiState->currentString][m] = false; } } } @@ -201,10 +205,10 @@ static void ADI_SaveRxToGpioVoltageBuffer( /*========== Extern Function Implementations ================================*/ extern void ADI_GetGpioVoltages( - ADI_STATE_s *adiState, + ADI_STATE_s *pAdiState, ADI_AUXILIARY_REGISTER_TYPE_e registerType, ADI_AUXILIARY_STORE_LOCATION_e storeLocation) { - FAS_ASSERT(adiState != NULL_PTR); + FAS_ASSERT(pAdiState != NULL_PTR); FAS_ASSERT((registerType == ADI_AUXILIARY_REGISTER) || (registerType == ADI_REDUNDANT_AUXILIARY_REGISTER)); FAS_ASSERT( (storeLocation == ADI_AUXILIARY_VOLTAGE) || (storeLocation == ADI_REDUNDANT_AUXILIARY_VOLTAGE) || @@ -235,29 +239,29 @@ extern void ADI_GetGpioVoltages( } ADI_CopyCommandBits(registerA, adi_command); - ADI_ReadRegister(adi_command, adi_dataReceive, adiState); - ADI_SaveRxToGpioVoltageBuffer(adiState, adi_dataReceive, ADI_AUXILIARY_RESULT_REGISTER_SET_A, storeLocation); + ADI_ReadRegister(adi_command, adi_dataReceive, pAdiState); + ADI_SaveRxToGpioVoltageBuffer(pAdiState, adi_dataReceive, ADI_AUXILIARY_RESULT_REGISTER_SET_A, storeLocation); ADI_CopyCommandBits(registerB, adi_command); - ADI_ReadRegister(adi_command, adi_dataReceive, adiState); - ADI_SaveRxToGpioVoltageBuffer(adiState, adi_dataReceive, ADI_AUXILIARY_RESULT_REGISTER_SET_B, storeLocation); + ADI_ReadRegister(adi_command, adi_dataReceive, pAdiState); + ADI_SaveRxToGpioVoltageBuffer(pAdiState, adi_dataReceive, ADI_AUXILIARY_RESULT_REGISTER_SET_B, storeLocation); ADI_CopyCommandBits(registerC, adi_command); - ADI_ReadRegister(adi_command, adi_dataReceive, adiState); - ADI_SaveRxToGpioVoltageBuffer(adiState, adi_dataReceive, ADI_AUXILIARY_RESULT_REGISTER_SET_C, storeLocation); + ADI_ReadRegister(adi_command, adi_dataReceive, pAdiState); + ADI_SaveRxToGpioVoltageBuffer(pAdiState, adi_dataReceive, ADI_AUXILIARY_RESULT_REGISTER_SET_C, storeLocation); ADI_CopyCommandBits(registerD, adi_command); - ADI_ReadRegister(adi_command, adi_dataReceive, adiState); - ADI_SaveRxToGpioVoltageBuffer(adiState, adi_dataReceive, ADI_AUXILIARY_RESULT_REGISTER_SET_D, storeLocation); + ADI_ReadRegister(adi_command, adi_dataReceive, pAdiState); + ADI_SaveRxToGpioVoltageBuffer(pAdiState, adi_dataReceive, ADI_AUXILIARY_RESULT_REGISTER_SET_D, storeLocation); } /*========== Externalized Static Function Implementations (Unit Test) =======*/ #ifdef UNITY_UNIT_TEST extern void TEST_ADI_SaveRxToGpioVoltageBuffer( - ADI_STATE_s *adiState, - uint8_t *data, + ADI_STATE_s *pAdiState, + uint8_t *pData, uint8_t registerSet, ADI_AUXILIARY_STORE_LOCATION_e storeLocation) { - ADI_SaveRxToGpioVoltageBuffer(adiState, data, registerSet, storeLocation); + ADI_SaveRxToGpioVoltageBuffer(pAdiState, pData, registerSet, storeLocation); } #endif diff --git a/src/app/driver/afe/adi/ades1830/config/adi_ades1830_cfg.c b/src/app/driver/afe/adi/ades1830/config/adi_ades1830_cfg.c index b953d82b..b8cd1f33 100644 --- a/src/app/driver/afe/adi/ades1830/config/adi_ades1830_cfg.c +++ b/src/app/driver/afe/adi/ades1830/config/adi_ades1830_cfg.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file adi_ades1830_cfg.c * @author foxBMS Team * @date 2020-12-09 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS_CONFIGURATION * @prefix ADI * * @brief Configuration for the ADI analog front-end - * + * @details TODO */ /*========== Includes =======================================================*/ @@ -101,3 +101,5 @@ const uint8_t adi_temperatureInputsUsed[BS_NR_OF_GPIOS_PER_MODULE] = { /*========== Extern Function Implementations ================================*/ /*========== Externalized Static Function Implementations (Unit Test) =======*/ +#ifdef UNITY_UNIT_TEST +#endif diff --git a/src/app/driver/afe/adi/ades1830/wscript b/src/app/driver/afe/adi/ades1830/wscript old mode 100644 new mode 100755 index e4c91cbf..675cf63f --- a/src/app/driver/afe/adi/ades1830/wscript +++ b/src/app/driver/afe/adi/ades1830/wscript @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause diff --git a/src/app/driver/afe/adi/common/ades183x/adi_ades183x.c b/src/app/driver/afe/adi/common/ades183x/adi_ades183x.c index 70354abf..23256e20 100644 --- a/src/app/driver/afe/adi/common/ades183x/adi_ades183x.c +++ b/src/app/driver/afe/adi/common/ades183x/adi_ades183x.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file adi_ades183x.c * @author foxBMS Team * @date 2020-12-09 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix ADI * * @brief Driver for the ADI analog front-end. - * + * @details TODO */ /*========== Includes =======================================================*/ @@ -83,10 +83,12 @@ * PEC buffer for RX and TX * @{ */ +/* AXIVION Disable Style MisraC2012-1.2: The Pec buffer must be put in the shared RAM section for performance reasons */ #pragma SET_DATA_SECTION(".sharedRAM") static uint16_t adi_bufferRxPec[ADI_N_BYTES_FOR_DATA_TRANSMISSION] = {0}; static uint16_t adi_bufferTxPec[ADI_N_BYTES_FOR_DATA_TRANSMISSION] = {0}; #pragma SET_DATA_SECTION() +/* AXIVION Enable Style MisraC2012-1.2 */ /**@}*/ /** local copies of database tables */ @@ -143,10 +145,10 @@ ADI_STATE_s adi_stateBase = { /** * @brief Read local variables from database and write local variables to * database. - * @param adiState state of the ADI driver + * @param pAdiState state of the ADI driver */ -static void ADI_AccessToDatabase(ADI_STATE_s *adiState); +static void ADI_AccessToDatabase(ADI_STATE_s *pAdiState); /** * @brief Sets the balancing according to the control values read in the @@ -155,9 +157,9 @@ static void ADI_AccessToDatabase(ADI_STATE_s *adiState); * written in the configuration register. * The ades183x driver only executes the balancing orders written by * the BMS in the database. - * @param adiState state of the ADI driver + * @param pAdiState state of the ADI driver */ -static void ADI_BalanceControl(ADI_STATE_s *adiState); +static void ADI_BalanceControl(ADI_STATE_s *pAdiState); /** * @brief Checks the requests made to the ades183x driver. @@ -168,44 +170,45 @@ static STD_RETURN_TYPE_e ADI_GetRequest(AFE_REQUEST_e *request); /** * @brief Runs the initialization sequence of the driver. - * @param adiState state of the ADI driver + * @param pAdiState state of the ADI driver * @param request request to be made with string addressed * @return true if measurement has been started, false otherwise * */ -static bool ADI_ProcessMeasurementNotStartedState(ADI_STATE_s *adiState, AFE_REQUEST_e *request); +static bool ADI_ProcessMeasurementNotStartedState(ADI_STATE_s *pAdiState, AFE_REQUEST_e *request); /** - * @brief sets the measurement initialization status. + * @brief Sets the measurement initialization status. + * @param pAdiState state of the ADI driver */ -static void ADI_SetFirstMeasurementCycleFinished(ADI_STATE_s *adiState); +static void ADI_SetFirstMeasurementCycleFinished(ADI_STATE_s *pAdiState); /*========== Static Function Implementations ================================*/ -static void ADI_AccessToDatabase(ADI_STATE_s *adiState) { - FAS_ASSERT(adiState != NULL_PTR); +static void ADI_AccessToDatabase(ADI_STATE_s *pAdiState) { + FAS_ASSERT(pAdiState != NULL_PTR); /* Increment state variable each time new values are written into database */ (void)DATA_WRITE_DATA( - adiState->data.cellVoltage, - adiState->data.cellVoltageFiltered, - adiState->data.allGpioVoltages, - adiState->data.cellTemperature); + pAdiState->data.cellVoltage, + pAdiState->data.cellVoltageFiltered, + pAdiState->data.allGpioVoltages, + pAdiState->data.cellTemperature); ADI_Wait(2u); /* Block task to leave CPU time for the other tasks */ - (void)DATA_READ_DATA(adiState->data.balancingControl); + (void)DATA_READ_DATA(pAdiState->data.balancingControl); } -/* RequirementId: D7.1 V0R4 FUN-6.10.01.01 */ -static void ADI_BalanceControl(ADI_STATE_s *adiState) { - FAS_ASSERT(adiState != NULL_PTR); +/* RequirementId: D7.1 V1R0 FUN-6.10.01.02 */ +static void ADI_BalanceControl(ADI_STATE_s *pAdiState) { + FAS_ASSERT(pAdiState != NULL_PTR); /* Unmute balancing, cell voltage measurements must have been stopped before */ ADI_CopyCommandBits(adi_cmdUnmute, adi_command); - ADI_TransmitCommand(adi_command, adiState); + ADI_TransmitCommand(adi_command, pAdiState); /* Write the balancing registers of the ades183x */ - ADI_DetermineBalancingRegisterConfiguration(adiState); + ADI_DetermineBalancingRegisterConfiguration(pAdiState); /* Wait ADI_BALANCING_TIME_ms milliseconds in order to balance Measurements are stopped during this time */ @@ -213,7 +216,7 @@ static void ADI_BalanceControl(ADI_STATE_s *adiState) { /* Mute balancing, so that cell voltage measurements can be restarted */ ADI_CopyCommandBits(adi_cmdMute, adi_command); - ADI_TransmitCommand(adi_command, adiState); + ADI_TransmitCommand(adi_command, pAdiState); } static STD_RETURN_TYPE_e ADI_GetRequest(AFE_REQUEST_e *request) { @@ -228,15 +231,15 @@ static STD_RETURN_TYPE_e ADI_GetRequest(AFE_REQUEST_e *request) { return requestReceived; } -static bool ADI_ProcessMeasurementNotStartedState(ADI_STATE_s *adiState, AFE_REQUEST_e *request) { - FAS_ASSERT(adiState != NULL_PTR); +static bool ADI_ProcessMeasurementNotStartedState(ADI_STATE_s *pAdiState, AFE_REQUEST_e *request) { + FAS_ASSERT(pAdiState != NULL_PTR); FAS_ASSERT(request != NULL_PTR); bool measurementStarted = false; STD_RETURN_TYPE_e requestReceived = ADI_GetRequest(request); if (requestReceived == STD_OK) { /* request queue was not empty */ if (*request == AFE_START_REQUEST) { - ADI_InitializeMeasurement(adiState); + ADI_InitializeMeasurement(pAdiState); measurementStarted = true; } else { /* Until requested to start, block task to leave CPU time for the other tasks */ ADI_Wait(1u); @@ -247,8 +250,8 @@ static bool ADI_ProcessMeasurementNotStartedState(ADI_STATE_s *adiState, AFE_REQ return measurementStarted; } -static void ADI_RunCurrentStringMeasurement(ADI_STATE_s *adiState) { - FAS_ASSERT(adiState != NULL_PTR); +static void ADI_RunCurrentStringMeasurement(ADI_STATE_s *pAdiState) { + FAS_ASSERT(pAdiState != NULL_PTR); /* Start auxiliary voltage measurement, all channels */ ADI_CopyCommandBits(adi_cmdAdax, adi_command); @@ -256,62 +259,62 @@ static void ADI_RunCurrentStringMeasurement(ADI_STATE_s *adiState) { ADI_WriteCommandConfigurationBits(adi_command, ADI_ADAX_PUP_POS, ADI_ADAX_PUP_LEN, 0u); ADI_WriteCommandConfigurationBits(adi_command, ADI_ADAX_CH4_POS, ADI_ADAX_CH4_LEN, 0u); ADI_WriteCommandConfigurationBits(adi_command, ADI_ADAX_CH03_POS, ADI_ADAX_CH03_LEN, 0u); - ADI_TransmitCommand(adi_command, adiState); + ADI_TransmitCommand(adi_command, pAdiState); /* Start redundant auxiliary voltage measurement, one channel */ ADI_CopyCommandBits(adi_cmdAdax2, adi_command); ADI_WriteCommandConfigurationBits( adi_command, ADI_ADAX2_CH03_POS, ADI_ADAX2_CH03_LEN, - adiState->redundantAuxiliaryChannel[adiState->currentString]); - ADI_TransmitCommand(adi_command, adiState); + pAdiState->redundantAuxiliaryChannel[pAdiState->currentString]); + ADI_TransmitCommand(adi_command, pAdiState); ADI_Wait(ADI_WAIT_TIME_1_FOR_ADAX_FULL_CYCLE); /* Snapshot to freeze cell voltage measurement result registers */ ADI_CopyCommandBits(adi_cmdSnap, adi_command); - ADI_TransmitCommand(adi_command, adiState); + ADI_TransmitCommand(adi_command, pAdiState); /* Retrieve filtered cell voltages */ - ADI_GetVoltages(adiState, ADI_CELL_VOLTAGE_REGISTER, ADI_CELL_VOLTAGE); - ADI_GetVoltages(adiState, ADI_FILTERED_CELL_VOLTAGE_REGISTER, ADI_FILTERED_CELL_VOLTAGE); + ADI_GetVoltages(pAdiState, ADI_CELL_VOLTAGE_REGISTER, ADI_CELL_VOLTAGE); + ADI_GetVoltages(pAdiState, ADI_FILTERED_CELL_VOLTAGE_REGISTER, ADI_FILTERED_CELL_VOLTAGE); /* Release snapshot to refresh cell voltage measurement result registers again */ ADI_CopyCommandBits(adi_cmdUnsnap, adi_command); - ADI_TransmitCommand(adi_command, adiState); + ADI_TransmitCommand(adi_command, pAdiState); /* Wait until auxiliary measurement cycle is finished */ ADI_Wait(ADI_WAIT_TIME_2_FOR_ADAX_FULL_CYCLE); /* Retrieve GPIO voltages (all channels) */ - ADI_GetGpioVoltages(adiState, ADI_AUXILIARY_REGISTER, ADI_AUXILIARY_VOLTAGE); + ADI_GetGpioVoltages(pAdiState, ADI_AUXILIARY_REGISTER, ADI_AUXILIARY_VOLTAGE); /* Get temperatures via GPIO voltages */ - ADI_GetTemperatures(adiState); + ADI_GetTemperatures(pAdiState); - ADI_AccessToDatabase(adiState); + ADI_AccessToDatabase(pAdiState); /* If at least one cell is balanced, measurements are stopped before activating balancing */ - if (adiState->data.balancingControl->nrBalancedCells[adiState->currentString] > 0u) { + if (pAdiState->data.balancingControl->nrBalancedCells[pAdiState->currentString] > 0u) { /* Stop cell voltage measurements before activating balancing */ - ADI_StopContinuousCellVoltageMeasurements(adiState); + ADI_StopContinuousCellVoltageMeasurements(pAdiState); /* Activate balancing (if necessary) */ - ADI_BalanceControl(adiState); + ADI_BalanceControl(pAdiState); /* Wait ADI_BALANCING_TIME_ms milliseconds in order to balance Measurements are stopped during this time */ ADI_Wait(ADI_BALANCING_TIME_ms); /* Restart cell voltage measurements before activating balancing */ - ADI_RestartContinuousCellVoltageMeasurements(adiState); + ADI_RestartContinuousCellVoltageMeasurements(pAdiState); } - ADI_Diagnostic(adiState); + ADI_Diagnostic(pAdiState); /* Cycle finished for string, clear values to check that they are not stuck during next reading */ ADI_CopyCommandBits(adi_cmdClrcell, adi_command); - ADI_TransmitCommand(adi_command, adiState); + ADI_TransmitCommand(adi_command, pAdiState); } -static void ADI_SetFirstMeasurementCycleFinished(ADI_STATE_s *adiState) { - FAS_ASSERT(adiState != NULL_PTR); +static void ADI_SetFirstMeasurementCycleFinished(ADI_STATE_s *pAdiState) { + FAS_ASSERT(pAdiState != NULL_PTR); OS_EnterTaskCritical(); - adiState->firstMeasurementMade = true; + pAdiState->firstMeasurementMade = true; OS_ExitTaskCritical(); } @@ -321,22 +324,22 @@ static void ADI_SetFirstMeasurementCycleFinished(ADI_STATE_s *adiState) { extern void ADI_ActivateInterfaceBoard(void) { /* Set 3rd PE pins to enable daisy chains */ - PEX_SetPinDirectionOutput(PEX_PORT_EXPANDER3, PEX_PIN10); - PEX_SetPinDirectionOutput(PEX_PORT_EXPANDER3, PEX_PIN11); - PEX_SetPinDirectionOutput(PEX_PORT_EXPANDER3, PEX_PIN12); - PEX_SetPinDirectionOutput(PEX_PORT_EXPANDER3, PEX_PIN13); - PEX_SetPinDirectionOutput(PEX_PORT_EXPANDER3, PEX_PIN14); - PEX_SetPinDirectionOutput(PEX_PORT_EXPANDER3, PEX_PIN15); - PEX_SetPinDirectionOutput(PEX_PORT_EXPANDER3, PEX_PIN16); - PEX_SetPinDirectionOutput(PEX_PORT_EXPANDER3, PEX_PIN17); - PEX_SetPin(PEX_PORT_EXPANDER3, PEX_PIN10); - PEX_SetPin(PEX_PORT_EXPANDER3, PEX_PIN11); - PEX_SetPin(PEX_PORT_EXPANDER3, PEX_PIN12); - PEX_SetPin(PEX_PORT_EXPANDER3, PEX_PIN13); - PEX_SetPin(PEX_PORT_EXPANDER3, PEX_PIN14); - PEX_SetPin(PEX_PORT_EXPANDER3, PEX_PIN15); - PEX_SetPin(PEX_PORT_EXPANDER3, PEX_PIN16); - PEX_SetPin(PEX_PORT_EXPANDER3, PEX_PIN17); + PEX_SetPinDirectionOutput(PEX_PORT_EXPANDER3, PEX_PORT_1_PIN_0); + PEX_SetPinDirectionOutput(PEX_PORT_EXPANDER3, PEX_PORT_1_PIN_1); + PEX_SetPinDirectionOutput(PEX_PORT_EXPANDER3, PEX_PORT_1_PIN_2); + PEX_SetPinDirectionOutput(PEX_PORT_EXPANDER3, PEX_PORT_1_PIN_3); + PEX_SetPinDirectionOutput(PEX_PORT_EXPANDER3, PEX_PORT_1_PIN_4); + PEX_SetPinDirectionOutput(PEX_PORT_EXPANDER3, PEX_PORT_1_PIN_5); + PEX_SetPinDirectionOutput(PEX_PORT_EXPANDER3, PEX_PORT_1_PIN_6); + PEX_SetPinDirectionOutput(PEX_PORT_EXPANDER3, PEX_PORT_1_PIN_7); + PEX_SetPin(PEX_PORT_EXPANDER3, PEX_PORT_1_PIN_0); + PEX_SetPin(PEX_PORT_EXPANDER3, PEX_PORT_1_PIN_1); + PEX_SetPin(PEX_PORT_EXPANDER3, PEX_PORT_1_PIN_2); + PEX_SetPin(PEX_PORT_EXPANDER3, PEX_PORT_1_PIN_3); + PEX_SetPin(PEX_PORT_EXPANDER3, PEX_PORT_1_PIN_4); + PEX_SetPin(PEX_PORT_EXPANDER3, PEX_PORT_1_PIN_5); + PEX_SetPin(PEX_PORT_EXPANDER3, PEX_PORT_1_PIN_6); + PEX_SetPin(PEX_PORT_EXPANDER3, PEX_PORT_1_PIN_7); } extern STD_RETURN_TYPE_e ADI_MakeRequest(AFE_REQUEST_e request) { @@ -351,40 +354,40 @@ extern STD_RETURN_TYPE_e ADI_MakeRequest(AFE_REQUEST_e request) { return requestSubmitted; } -extern bool ADI_IsFirstMeasurementCycleFinished(ADI_STATE_s *adiState) { - FAS_ASSERT(adiState != NULL_PTR); - return (adiState->firstMeasurementMade); +extern bool ADI_IsFirstMeasurementCycleFinished(ADI_STATE_s *pAdiState) { + FAS_ASSERT(pAdiState != NULL_PTR); + return (pAdiState->firstMeasurementMade); } /* END extern functions to adapt if running in other environment (e.g., bare metal) */ -/* RequirementId: D7.1 V0R4 FUN-1.10.01.03 */ -/* RequirementId: D7.1 V0R4 FUN-2.10.01.03 */ -/* RequirementId: D7.1 V0R4 FUN-4.10.01.03 */ -extern void ADI_MeasurementCycle(ADI_STATE_s *adiState) { - FAS_ASSERT(adiState != NULL_PTR); +/* RequirementId: D7.1 V1R0 FUN-1.10.01.03 */ +/* RequirementId: D7.1 V1R0 FUN-2.10.01.03 */ +/* RequirementId: D7.1 V1R0 FUN-4.10.01.03 */ +extern void ADI_MeasurementCycle(ADI_STATE_s *pAdiState) { + FAS_ASSERT(pAdiState != NULL_PTR); STD_RETURN_TYPE_e requestReceived = STD_OK; AFE_REQUEST_e request = AFE_NO_REQUEST; /* AXIVION Next Line Style MisraC2012-2.2 FaultDetection-DeadBranches: non-blocking driver requires an infinite - * loop for the driver implementation */ + * loop for the driver implementation */ while (FOREVER()) { - if (adiState->measurementStarted == false) { /* Wait until requested to start */ - adiState->measurementStarted = ADI_ProcessMeasurementNotStartedState(adiState, &request); + if (pAdiState->measurementStarted == false) { /* Wait until requested to start */ + pAdiState->measurementStarted = ADI_ProcessMeasurementNotStartedState(pAdiState, &request); } else { - while (adiState->currentString < adiState->spiNumberInterfaces) { - ADI_RunCurrentStringMeasurement(adiState); - ++adiState->currentString; + while (pAdiState->currentString < pAdiState->spiNumberInterfaces) { + ADI_RunCurrentStringMeasurement(pAdiState); + ++pAdiState->currentString; } - adiState->currentString = 0u; - if (ADI_IsFirstMeasurementCycleFinished(adiState) == false) { - ADI_SetFirstMeasurementCycleFinished(adiState); + pAdiState->currentString = 0u; + if (ADI_IsFirstMeasurementCycleFinished(pAdiState) == false) { + ADI_SetFirstMeasurementCycleFinished(pAdiState); } requestReceived = ADI_GetRequest(&request); if (requestReceived == STD_OK) { /* request queue was not empty */ if (request == AFE_STOP_REQUEST) { - adiState->measurementStarted = false; + pAdiState->measurementStarted = false; } } } @@ -397,22 +400,22 @@ extern void ADI_MeasurementCycle(ADI_STATE_s *adiState) { /*========== Externalized Static Function Implementations (Unit Test) =======*/ #ifdef UNITY_UNIT_TEST -extern void TEST_ADI_AccessToDatabase(ADI_STATE_s *adiState) { - ADI_AccessToDatabase(adiState); +extern void TEST_ADI_AccessToDatabase(ADI_STATE_s *pAdiState) { + ADI_AccessToDatabase(pAdiState); } -extern void TEST_ADI_BalanceControl(ADI_STATE_s *adiState) { - ADI_BalanceControl(adiState); +extern void TEST_ADI_BalanceControl(ADI_STATE_s *pAdiState) { + ADI_BalanceControl(pAdiState); } extern STD_RETURN_TYPE_e TEST_ADI_GetRequest(AFE_REQUEST_e *request) { return ADI_GetRequest(request); } -extern bool TEST_ADI_ProcessMeasurementNotStartedState(ADI_STATE_s *adiState, AFE_REQUEST_e *request) { - return ADI_ProcessMeasurementNotStartedState(adiState, request); +extern bool TEST_ADI_ProcessMeasurementNotStartedState(ADI_STATE_s *pAdiState, AFE_REQUEST_e *request) { + return ADI_ProcessMeasurementNotStartedState(pAdiState, request); } -extern void TEST_ADI_RunCurrentStringMeasurement(ADI_STATE_s *adiState) { - ADI_RunCurrentStringMeasurement(adiState); +extern void TEST_ADI_RunCurrentStringMeasurement(ADI_STATE_s *pAdiState) { + ADI_RunCurrentStringMeasurement(pAdiState); } -extern void TEST_ADI_SetFirstMeasurementCycleFinished(ADI_STATE_s *adiState) { - ADI_SetFirstMeasurementCycleFinished(adiState); +extern void TEST_ADI_SetFirstMeasurementCycleFinished(ADI_STATE_s *pAdiState) { + ADI_SetFirstMeasurementCycleFinished(pAdiState); } #endif diff --git a/src/app/driver/afe/adi/common/ades183x/adi_ades183x.h b/src/app/driver/afe/adi/common/ades183x/adi_ades183x.h index 43dbd9a6..55c74ab9 100644 --- a/src/app/driver/afe/adi/common/ades183x/adi_ades183x.h +++ b/src/app/driver/afe/adi/common/ades183x/adi_ades183x.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,17 @@ * @file adi_ades183x.h * @author foxBMS Team * @date 2015-09-01 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix ADI * - * @brief Headers for the driver for the ADI analog front-end. - * + * @brief Declarations for the driver of the ADI ADES18x family of + * analog front-ends. + * @details Declares the high-level functions for the ADI ADES18x family driver + * The #ADI_ActivateInterfaceBoard function is specific to the + * hardware that communicates with the daisy-chain, i.e., for foxBMS 2 + * it defines the setup of the port expander. */ #ifndef FOXBMS__ADI_ADES183X_H_ @@ -95,25 +99,25 @@ extern STD_RETURN_TYPE_e ADI_MakeRequest(AFE_REQUEST_e request); /** * @brief Implements the actual measurement sequence for the ADI driver. * @details This function contains the sequence of events - * @param adiState state of the adi driver + * @param pAdiState state of the adi driver */ -extern void ADI_MeasurementCycle(ADI_STATE_s *adiState); +extern void ADI_MeasurementCycle(ADI_STATE_s *pAdiState); /** * @brief Gets the measurement initialization status. - * @param adiState state of the adi driver + * @param pAdiState state of the adi driver * @return true if a first measurement cycle was made, false otherwise */ -extern bool ADI_IsFirstMeasurementCycleFinished(ADI_STATE_s *adiState); +extern bool ADI_IsFirstMeasurementCycleFinished(ADI_STATE_s *pAdiState); /*========== Externalized Static Functions Prototypes (Unit Test) ===========*/ #ifdef UNITY_UNIT_TEST -extern void TEST_ADI_AccessToDatabase(ADI_STATE_s *adiState); -extern void TEST_ADI_BalanceControl(ADI_STATE_s *adiState); +extern void TEST_ADI_AccessToDatabase(ADI_STATE_s *pAdiState); +extern void TEST_ADI_BalanceControl(ADI_STATE_s *pAdiState); extern STD_RETURN_TYPE_e TEST_ADI_GetRequest(AFE_REQUEST_e *request); -extern bool TEST_ADI_ProcessMeasurementNotStartedState(ADI_STATE_s *adiState, AFE_REQUEST_e *request); -extern void TEST_ADI_RunCurrentStringMeasurement(ADI_STATE_s *adiState); -extern void TEST_ADI_SetFirstMeasurementCycleFinished(ADI_STATE_s *adiState); +extern bool TEST_ADI_ProcessMeasurementNotStartedState(ADI_STATE_s *pAdiState, AFE_REQUEST_e *request); +extern void TEST_ADI_RunCurrentStringMeasurement(ADI_STATE_s *pAdiState); +extern void TEST_ADI_SetFirstMeasurementCycleFinished(ADI_STATE_s *pAdiState); #endif #endif /* FOXBMS__ADI_ADES183X_H_ */ diff --git a/src/app/driver/afe/adi/common/ades183x/adi_ades183x_balancing.h b/src/app/driver/afe/adi/common/ades183x/adi_ades183x_balancing.h index 8ff444a9..e05a6326 100644 --- a/src/app/driver/afe/adi/common/ades183x/adi_ades183x_balancing.h +++ b/src/app/driver/afe/adi/common/ades183x/adi_ades183x_balancing.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file adi_ades183x_balancing.h * @author foxBMS Team * @date 2015-09-01 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix ADI * * @brief Headers for the driver for the ADI analog front-end. - * + * @details TODO */ #ifndef FOXBMS__ADI_ADES183X_BALANCING_H_ @@ -65,17 +65,17 @@ /*========== Extern Function Prototypes =====================================*/ /** * @brief Disable balancing - * @param adiState state of the driver + * @param pAdiState state of the driver */ -extern void ADI_DeactivateBalancing(ADI_STATE_s *adiState); +extern void ADI_DeactivateBalancing(ADI_STATE_s *pAdiState); /** * @brief Determines how the balancing registers need to be set * @details Dependent on the actually used cell inputs this functions sets the * registers accordingly. - * @param adiState state of the driver + * @param pAdiState state of the driver */ -extern void ADI_DetermineBalancingRegisterConfiguration(ADI_STATE_s *adiState); +extern void ADI_DetermineBalancingRegisterConfiguration(ADI_STATE_s *pAdiState); /*========== Externalized Static Functions Prototypes (Unit Test) ===========*/ #ifdef UNITY_UNIT_TEST diff --git a/src/app/driver/afe/adi/common/ades183x/adi_ades183x_buffers.c b/src/app/driver/afe/adi/common/ades183x/adi_ades183x_buffers.c index 1d1d2cb4..6c1a1e37 100644 --- a/src/app/driver/afe/adi/common/ades183x/adi_ades183x_buffers.c +++ b/src/app/driver/afe/adi/common/ades183x/adi_ades183x_buffers.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,18 +43,16 @@ * @file adi_ades183x_buffers.c * @author foxBMS Team * @date 2022-12-07 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix ADI * * @brief Buffers used by the driver for the ADI analog front-end. - * * @details The buffer are defined here and used throughout the driver. * This is to avoid either allocation on the stack or static * definition in each function: as the table size is proportional * to the number of modules, its size can be huge. - * */ /*========== Includes =======================================================*/ diff --git a/src/app/driver/afe/adi/common/ades183x/adi_ades183x_buffers.h b/src/app/driver/afe/adi/common/ades183x/adi_ades183x_buffers.h index e6d9e211..e2470954 100644 --- a/src/app/driver/afe/adi/common/ades183x/adi_ades183x_buffers.h +++ b/src/app/driver/afe/adi/common/ades183x/adi_ades183x_buffers.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,16 +43,15 @@ * @file adi_ades183x_buffers.h * @author foxBMS Team * @date 2022-12-07 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix ADI * - * @brief Header for the buffers used by the driver for the ADI analog front-end. - * + * @brief Header for the buffers used by the driver for the ADI analog + * front-end. * @details The buffer are defined in a separate file and used throughout the * driver. Their definition is included with this header. - * */ #ifndef FOXBMS__ADI_ADES183X_BUFFERS_H_ @@ -69,7 +68,7 @@ /*========== Extern Constant and Variable Declarations ======================*/ -/* RequirementId: D7.1 V0R4 SIF-4.20.01.01 */ +/* RequirementId: D7.1 V1R0 SIF-4.20.01.01 */ /** Driver copy of the configuration stored in the AFE configuration registers */ extern uint8_t adi_configurationRegisterAgroup[BS_NR_OF_STRINGS] [BS_NR_OF_MODULES_PER_STRING * ADI_MAX_REGISTER_SIZE_IN_BYTES]; diff --git a/src/app/driver/afe/adi/common/ades183x/adi_ades183x_commands.c b/src/app/driver/afe/adi/common/ades183x/adi_ades183x_commands.c index 926e2793..a7dead0b 100644 --- a/src/app/driver/afe/adi/common/ades183x/adi_ades183x_commands.c +++ b/src/app/driver/afe/adi/common/ades183x/adi_ades183x_commands.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file adi_ades183x_commands.c * @author foxBMS Team * @date 2019-08-27 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix ADI * * @brief Implementation of some software - * + * @details TODO */ /*========== Includes =======================================================*/ diff --git a/src/app/driver/afe/adi/common/ades183x/adi_ades183x_commands.h b/src/app/driver/afe/adi/common/ades183x/adi_ades183x_commands.h index df58d0b1..3c1b8726 100644 --- a/src/app/driver/afe/adi/common/ades183x/adi_ades183x_commands.h +++ b/src/app/driver/afe/adi/common/ades183x/adi_ades183x_commands.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file adi_ades183x_commands.h * @author foxBMS Team * @date 2022-12-07 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix ADI * * @brief Header file of some software - * + * @details TODO */ #ifndef FOXBMS__ADI_ADES183X_COMMANDS_H_ diff --git a/src/app/driver/afe/adi/common/ades183x/adi_ades183x_commands_voltages.c b/src/app/driver/afe/adi/common/ades183x/adi_ades183x_commands_voltages.c index 516afdd2..34aed8a5 100644 --- a/src/app/driver/afe/adi/common/ades183x/adi_ades183x_commands_voltages.c +++ b/src/app/driver/afe/adi/common/ades183x/adi_ades183x_commands_voltages.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,14 +43,14 @@ * @file adi_ades183x_commands_voltages.c * @author foxBMS Team * @date 2022-12-06 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix ADI * * @brief Command definitions related to voltage measurement only specific to - * the driver for the ADI ades183x. - * + * the driver for the ADI ADES183x. + * @details TODO */ /*========== Includes =======================================================*/ diff --git a/src/app/driver/afe/adi/common/ades183x/adi_ades183x_commands_voltages.h b/src/app/driver/afe/adi/common/ades183x/adi_ades183x_commands_voltages.h index 959ce798..99bb0792 100644 --- a/src/app/driver/afe/adi/common/ades183x/adi_ades183x_commands_voltages.h +++ b/src/app/driver/afe/adi/common/ades183x/adi_ades183x_commands_voltages.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file adi_ades183x_commands_voltages.h * @author foxBMS Team * @date 2022-12-07 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix ADI * * @brief Header file of some software - * + * @details TODO */ #ifndef FOXBMS__ADI_ADES183X_COMMANDS_VOLTAGES_H_ diff --git a/src/app/driver/afe/adi/common/ades183x/adi_ades183x_defs.h b/src/app/driver/afe/adi/common/ades183x/adi_ades183x_defs.h index 6dc86626..f4500edd 100644 --- a/src/app/driver/afe/adi/common/ades183x/adi_ades183x_defs.h +++ b/src/app/driver/afe/adi/common/ades183x/adi_ades183x_defs.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file adi_ades183x_defs.h * @author foxBMS Team * @date 2015-09-01 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix ADI * * @brief Headers for the driver for the ades183x analog front-end. - * + * @details TODO */ #ifndef FOXBMS__ADI_ADES183X_DEFS_H_ @@ -141,8 +141,8 @@ typedef enum { #define ADI_DEFAULT_MUTE_ST_SETUP (0u) #define ADI_DEFAULT_SNAP_ST_SETUP (0u) #define ADI_DEFAULT_VUV_0_7_SETUP (0u) -#define ADI_DEFAULT_VUV_8_11_SETUP (0x8u) -#define ADI_DEFAULT_VOV_0_3_SETUP (0xFu) +#define ADI_DEFAULT_VUV_8_11_SETUP (0x08u) +#define ADI_DEFAULT_VOV_0_3_SETUP (0x0Fu) #define ADI_DEFAULT_VOV_4_11_SETUP (0x7Fu) #define ADI_DEFAULT_DCT0_0_5_SETUP (0u) #define ADI_DEFAULT_DTRNG_SETUP (0u) @@ -388,20 +388,20 @@ typedef enum { #define ADI_FCOM_MASTER_NACK_STOP (0x09u) /**@}*/ -/* RequirementId: D7.1 V0R4 SIF-4.30.03.01 */ +/* RequirementId: D7.1 V1R0 SIF-4.30.03.01 */ /** error table for the driver */ typedef struct { bool spiIsOk[BS_NR_OF_STRINGS]; - /* RequirementId: D7.1 V0R4 SIF-4.10.02.02 */ - /* RequirementId: D7.1 V0R4 SIF-4.20.03.01 */ + /* RequirementId: D7.1 V1R0 SIF-4.10.02.04 */ + /* RequirementId: D7.1 V1R0 SIF-4.20.03.01 */ bool crcIsOk[BS_NR_OF_STRINGS][ADI_N_ADI]; bool commandCounterIsOk[BS_NR_OF_STRINGS][ADI_N_ADI]; - /* RequirementId: D7.1 V0R4 SIF-4.20.02.01 */ + /* RequirementId: D7.1 V1R0 SIF-4.20.02.01 */ bool configurationAIsOk[BS_NR_OF_STRINGS][ADI_N_ADI]; bool configurationBIsOk[BS_NR_OF_STRINGS][ADI_N_ADI]; - /* RequirementId: D7.1 V0R4 SIF-4.40.01.03 */ + /* RequirementId: D7.1 V1R0 SIF-4.40.01.02 */ bool voltageRegisterContentIsNotStuck[BS_NR_OF_STRINGS][ADI_N_ADI]; - /* RequirementId: D7.1 V0R4 SIF-4.40.02.03 */ + /* RequirementId: D7.1 V1R0 SIF-4.40.02.02 */ bool auxiliaryRegisterContentIsNotStuck[BS_NR_OF_STRINGS][ADI_N_ADI]; bool adcComparisonIsOk[BS_NR_OF_STRINGS][ADI_N_ADI]; bool compFlagIsCleared[BS_NR_OF_STRINGS][ADI_N_ADI]; @@ -446,7 +446,7 @@ typedef struct { bool initClearedAuxValuesAreOk[BS_NR_OF_STRINGS][ADI_N_ADI]; bool pecCheckHasNoLatentFault[BS_NR_OF_STRINGS][ADI_N_ADI]; bool compareLogicFaultFlagHasNoLatentFault[BS_NR_OF_STRINGS][ADI_N_ADI]; - /* RequirementId: D7.1 V0R4 SIF-4.40.01.03 */ + /* RequirementId: D7.1 V1R0 SIF-4.40.01.02 */ bool noClockFreezeDetectorIsOk[BS_NR_OF_STRINGS][ADI_N_ADI]; } ADI_ERROR_TABLE_s; @@ -946,7 +946,7 @@ typedef struct { #define ADI_CFGRB0_VUV_0_7_MASK (0xFFu) /* CFGRB1 */ #define ADI_CFGRB1_VUV_8_11_POS (0u) -#define ADI_CFGRB1_VUV_8_11_MASK (0xFu) +#define ADI_CFGRB1_VUV_8_11_MASK (0x0Fu) #define ADI_CFGRB1_VOV_0_3_POS (4u) #define ADI_CFGRB1_VOV_0_3_MASK (0xF0u) /* CFGRB2 */ @@ -1204,11 +1204,11 @@ typedef struct { bool firstDiagnosticMade; /*!< flag indicates if all diagnostics made at least one time for all strings */ uint8_t spiNumberInterfaces; /*!< number of SPI channels that have to be measured */ uint8_t currentString; /*!< string currently being addressed */ - uint8_t redundantAuxiliaryChannel - [BS_NR_OF_STRINGS]; /*!< auxiliary channel for which a redundant measurement must be made */ - uint64_t serialId[BS_NR_OF_STRINGS][ADI_N_ADI]; /*!< serial ID of the IC */ - uint8_t revision[BS_NR_OF_STRINGS][ADI_N_ADI]; /*!< revision of the IC */ - ADI_DATA_s data; /*!< contains pointers to the local data buffer */ + uint8_t redundantAuxiliaryChannel[BS_NR_OF_STRINGS]; /*!< auxiliary channel for which a redundant measurement must + be made */ + uint64_t serialId[BS_NR_OF_STRINGS][ADI_N_ADI]; /*!< serial ID of the IC */ + uint8_t revision[BS_NR_OF_STRINGS][ADI_N_ADI]; /*!< revision of the IC */ + ADI_DATA_s data; /*!< contains pointers to the local data buffer */ } ADI_STATE_s; /*========== Extern Function Prototypes =====================================*/ diff --git a/src/app/driver/afe/adi/common/ades183x/adi_ades183x_diagnostic.h b/src/app/driver/afe/adi/common/ades183x/adi_ades183x_diagnostic.h index dd8dc0e8..72200361 100644 --- a/src/app/driver/afe/adi/common/ades183x/adi_ades183x_diagnostic.h +++ b/src/app/driver/afe/adi/common/ades183x/adi_ades183x_diagnostic.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file adi_ades183x_diagnostic.h * @author foxBMS Team * @date 2022-12-06 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix ADI * * @brief Headers for the diagnostic driver for the ADI analog front-end. - * + * @details TODO */ #ifndef FOXBMS__ADI_ADES183X_DIAGNOSTIC_H_ @@ -86,8 +86,6 @@ extern bool ADI_EvaluateDiagnosticCellVoltages(ADI_STATE_s *adiState, uint16_t m /*========== Externalized Static Functions Prototypes (Unit Test) ===========*/ #ifdef UNITY_UNIT_TEST -extern bool TEST_ADI_IsFirstDiagnosticCycleFinished(ADI_STATE_s *adiState); -extern void TEST_ADI_SetFirstDiagnosticCycleFinished(ADI_STATE_s *adiState); #endif #endif /* FOXBMS__ADI_ADES183X_DIAGNOSTIC_H_ */ diff --git a/src/app/driver/afe/adi/common/ades183x/adi_ades183x_diagnostic_w.c b/src/app/driver/afe/adi/common/ades183x/adi_ades183x_diagnostic_w.c index 374f0085..f4df73b1 100644 --- a/src/app/driver/afe/adi/common/ades183x/adi_ades183x_diagnostic_w.c +++ b/src/app/driver/afe/adi/common/ades183x/adi_ades183x_diagnostic_w.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file adi_ades183x_diagnostic_w.c * @author foxBMS Team * @date 2023-10-09 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix ADI * * @brief Dummy diagnostics driver for the ADI analog front end. - * + * @details TODO */ /*========== Includes =======================================================*/ diff --git a/src/app/driver/afe/adi/common/ades183x/adi_ades183x_gpio_voltages.h b/src/app/driver/afe/adi/common/ades183x/adi_ades183x_gpio_voltages.h index 1d7c4073..3fe8457b 100644 --- a/src/app/driver/afe/adi/common/ades183x/adi_ades183x_gpio_voltages.h +++ b/src/app/driver/afe/adi/common/ades183x/adi_ades183x_gpio_voltages.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,15 @@ * @file adi_ades183x_gpio_voltages.h * @author foxBMS Team * @date 2022-12-07 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix ADI * - * @brief Header file of some software - * + * @brief Declarations for reading the GPIO voltage part of the driver of the + * ADI ADES18x family of analog front-ends. + * @details Declares a function for reading the GPIO voltage registers in ICs + * of the ADI ADES18x family. */ #ifndef FOXBMS__ADI_ADES183X_GPIO_VOLTAGES_H_ @@ -72,20 +74,20 @@ * @details This function, reads the raw values from the registers, and * calls ADI_SaveRxToGpioVoltageBuffer() which convert them into * voltages and stores them. - * @param adiState state of the ADI driver + * @param pAdiState state of the ADI driver * @param registerType type of auxiliary register to read * @param storeLocation location where read data has to be stored */ extern void ADI_GetGpioVoltages( - ADI_STATE_s *adiState, + ADI_STATE_s *pAdiState, ADI_AUXILIARY_REGISTER_TYPE_e registerType, ADI_AUXILIARY_STORE_LOCATION_e storeLocation); /*========== Externalized Static Functions Prototypes (Unit Test) ===========*/ #ifdef UNITY_UNIT_TEST extern void TEST_ADI_SaveRxToGpioVoltageBuffer( - ADI_STATE_s *adiState, - uint8_t *data, + ADI_STATE_s *pAdiState, + uint8_t *pData, uint8_t registerSet, ADI_AUXILIARY_STORE_LOCATION_e storeLocation); #endif diff --git a/src/app/driver/afe/adi/common/ades183x/adi_ades183x_helpers.c b/src/app/driver/afe/adi/common/ades183x/adi_ades183x_helpers.c index b0e1ffc6..95d41e3c 100644 --- a/src/app/driver/afe/adi/common/ades183x/adi_ades183x_helpers.c +++ b/src/app/driver/afe/adi/common/ades183x/adi_ades183x_helpers.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file adi_ades183x_helpers.c * @author foxBMS Team * @date 2022-12-06 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix ADI * * @brief Helper functionalities specific to the driver for the ADI ades183x - * + * @details TODO */ /*========== Includes =======================================================*/ @@ -276,20 +276,20 @@ extern void ADI_ReadDataBits(uint8_t receivedData, uint8_t *pDataToRead, uint8_t *pDataToRead = (receivedData & mask) >> position; } -/* RequirementId: D7.1 V0R4 FUN-0.0.01.01 */ -/* RequirementId: D7.1 V0R4 SIF-4.10.01.01 */ -/* RequirementId: D7.1 V0R4 SIF-4.10.02.01 */ -/* RequirementId: D7.1 V0R4 SIF-4.10.11.02 */ -/* RequirementId: D7.1 V0R4 SIF-4.10.12.01 */ +/* RequirementId: D7.1 V1R0 FUN-0.0.01.01 */ +/* RequirementId: D7.1 V1R0 SIF-4.10.02.02 */ +/* RequirementId: D7.1 V1R0 SIF-4.10.04.02 */ +/* RequirementId: D7.1 V1R0 SIF-4.10.04.03 */ +/* RequirementId: D7.1 V1R0 SIF-4.10.05.01 */ extern void ADI_ReadRegister(uint16_t *registerToRead, uint8_t *data, ADI_STATE_s *adiState) { FAS_ASSERT(registerToRead != NULL_PTR); FAS_ASSERT(data != NULL_PTR); FAS_ASSERT(adiState != NULL_PTR); - uint8_t PEC_Check[ADI_SIZE_OF_DATA_FOR_PEC_COMPUTATION_WITH_COUNTER] = {0}; - uint16_t PEC_result = 0u; - uint8_t PEC_RX[ADI_PEC_SIZE_IN_BYTES] = {0}; - uint8_t afeCommandCounter = 0u; + uint8_t receivedDataBytes[ADI_SIZE_OF_DATA_FOR_PEC_COMPUTATION_WITH_COUNTER] = {0}; + uint16_t calculatedPec = 0u; + uint8_t pecAsByteArray[ADI_PEC_SIZE_IN_BYTES] = {0}; + uint8_t afeCommandCounter = 0u; uint16_t registerLengthInBytes = registerToRead[ADI_COMMAND_DATA_LENGTH_POSITION]; uint16_t byte = 0u; /* variable to parse data bytes */ @@ -307,15 +307,15 @@ extern void ADI_ReadRegister(uint16_t *registerToRead, uint8_t *data, ADI_STATE_ * Calculate PEC for command. */ /* Compute PEC of the two command bytes */ - PEC_Check[ADI_COMMAND_FIRST_BYTE_POSITION] = (uint8_t)registerToRead[ADI_COMMAND_FIRST_BYTE_POSITION]; - PEC_Check[ADI_COMMAND_SECOND_BYTE_POSITION] = (uint8_t)registerToRead[ADI_COMMAND_SECOND_BYTE_POSITION]; - PEC_result = ADI_Pec15(ADI_COMMAND_SIZE_IN_BYTES, PEC_Check); + receivedDataBytes[ADI_COMMAND_FIRST_BYTE_POSITION] = (uint8_t)registerToRead[ADI_COMMAND_FIRST_BYTE_POSITION]; + receivedDataBytes[ADI_COMMAND_SECOND_BYTE_POSITION] = (uint8_t)registerToRead[ADI_COMMAND_SECOND_BYTE_POSITION]; + calculatedPec = ADI_Pec15(ADI_COMMAND_SIZE_IN_BYTES, receivedDataBytes); adiState->data.txBuffer[ADI_COMMAND_FIRST_BYTE_POSITION] = registerToRead[ADI_COMMAND_FIRST_BYTE_POSITION]; adiState->data.txBuffer[ADI_COMMAND_SECOND_BYTE_POSITION] = registerToRead[ADI_COMMAND_SECOND_BYTE_POSITION]; adiState->data.txBuffer[ADI_COMMAND_PEC_FIRST_BYTE_POSITION] = - (uint8_t)((PEC_result >> ADI_BYTE_SHIFT) & ADI_ONE_BYTE_MASK); - adiState->data.txBuffer[ADI_COMMAND_PEC_SECOND_BYTE_POSITION] = (uint8_t)(PEC_result & ADI_ONE_BYTE_MASK); + (uint8_t)((calculatedPec >> ADI_BYTE_SHIFT) & ADI_ONE_BYTE_MASK); + adiState->data.txBuffer[ADI_COMMAND_PEC_SECOND_BYTE_POSITION] = (uint8_t)(calculatedPec & ADI_ONE_BYTE_MASK); /* 4u: two bytes command + two bytes command PEC */ /* Register length + 2u: The two additional bytes correspond to the PEC */ @@ -330,22 +330,23 @@ extern void ADI_ReadRegister(uint16_t *registerToRead, uint8_t *data, ADI_STATE_ (uint8_t)(adiState->data.rxBuffer [(ADI_FIRST_DATA_BYTE_POSITION_IN_TRANSMISSION_FRAME + byte) + (i * spiFrameLength)]); } - /* PEC_Check is a local variable holding read data and used to compute the PEC */ + /* receivedDataBytes is a local variable holding read data and used to compute the PEC */ for (byte = 0u; byte < registerLengthInBytes; byte++) { - PEC_Check[byte] = + receivedDataBytes[byte] = (uint8_t)(adiState->data.rxBuffer [(ADI_FIRST_DATA_BYTE_POSITION_IN_TRANSMISSION_FRAME + byte) + (i * spiFrameLength)]); } /* Data PEC is also computed on command counter, so one byte with command counter is added */ - PEC_Check[byte] = + receivedDataBytes[byte] = (uint8_t)(adiState->data.rxBuffer [(ADI_FIRST_DATA_BYTE_POSITION_IN_TRANSMISSION_FRAME + byte) + (i * spiFrameLength)]) & ADI_COMMAND_COUNTER_MASK; - PEC_result = - ADI_Pec10((uint8_t)(registerToRead[ADI_COMMAND_DATA_LENGTH_POSITION] & ADI_ONE_BYTE_MASK), PEC_Check, true); - PEC_RX[ADI_DATA_PEC_FIRST_BYTE_POSITION] = (uint8_t)((PEC_result >> ADI_BYTE_SHIFT) & ADI_ONE_BYTE_MASK); - PEC_RX[ADI_DATA_PEC_SECOND_BYTE_POSITION] = (uint8_t)(PEC_result & ADI_ONE_BYTE_MASK); + calculatedPec = ADI_Pec10( + (uint8_t)(registerToRead[ADI_COMMAND_DATA_LENGTH_POSITION] & ADI_ONE_BYTE_MASK), receivedDataBytes, true); + pecAsByteArray[ADI_DATA_PEC_FIRST_BYTE_POSITION] = + (uint8_t)((calculatedPec >> ADI_BYTE_SHIFT) & ADI_ONE_BYTE_MASK); + pecAsByteArray[ADI_DATA_PEC_SECOND_BYTE_POSITION] = (uint8_t)(calculatedPec & ADI_ONE_BYTE_MASK); /* Position of the PEC (two bytes) in the first read frame */ /* 4u: two bytes command + two bytes command PEC, followed by number of bytes in register */ @@ -357,20 +358,18 @@ extern void ADI_ReadRegister(uint16_t *registerToRead, uint8_t *data, ADI_STATE_ * PEC check on read value. */ /* if calculated PEC not equal to received PEC */ - if ((PEC_RX[ADI_DATA_PEC_FIRST_BYTE_POSITION] != - (adiState->data.rxBuffer[crcByte0Position + (i * spiFrameLength)] & - ADI_PEC10_MSB_EXCLUDE_COMMAND_COUNTER)) || - (PEC_RX[ADI_DATA_PEC_SECOND_BYTE_POSITION] != - (adiState->data.rxBuffer[crcByte1Position + (i * spiFrameLength)] & ADI_ONE_BYTE_MASK))) { -/* update error table of the corresponding ades183x only if PEC check is activated */ -#if (ADI_DISCARD_PEC == false) - adiState->data.errorTable->crcIsOk[adiState->currentString][i] = false; -#else + const uint8_t pecLowByte = adiState->data.rxBuffer[crcByte0Position + (i * spiFrameLength)] & + ADI_PEC10_MSB_EXCLUDE_COMMAND_COUNTER; + const uint8_t pecHighByte = + (adiState->data.rxBuffer[crcByte1Position + (i * spiFrameLength)] & ADI_ONE_BYTE_MASK); + + const bool pecLowByteOk = (bool)(pecAsByteArray[ADI_DATA_PEC_FIRST_BYTE_POSITION] == pecLowByte); + const bool pecHighByteOk = (bool)(pecAsByteArray[ADI_DATA_PEC_SECOND_BYTE_POSITION] == pecHighByte); + /* update error table of the corresponding ades183x */ + if (pecLowByteOk && pecHighByteOk) { adiState->data.errorTable->crcIsOk[adiState->currentString][i] = true; -#endif } else { - /* update error table of the corresponding ades183x */ - adiState->data.errorTable->crcIsOk[adiState->currentString][i] = true; + adiState->data.errorTable->crcIsOk[adiState->currentString][i] = false; } /* CRC is placed after the data bytes */ @@ -394,7 +393,7 @@ extern void ADI_ReadRegister(uint16_t *registerToRead, uint8_t *data, ADI_STATE_ } } -/* RequirementId: D7.1 V0R4 FUN-0.0.01.04 */ +/* RequirementId: D7.1 V1R0 FUN-0.0.01.04 */ extern void ADI_SpiTransmitReceiveData( ADI_STATE_s *adiState, uint16_t *pTxBuff, @@ -474,9 +473,9 @@ extern void ADI_StoredConfigurationFillRegisterDataGlobal( } } -/* RequirementId: D7.1 V0R4 FUN-0.0.01.03 */ -/* RequirementId: D7.1 V0R4 SIF-4.10.01.01 */ -/* RequirementId: D7.1 V0R4 SIF-4.10.11.01 */ +/* RequirementId: D7.1 V1R0 FUN-0.0.01.03 */ +/* RequirementId: D7.1 V1R0 SIF-4.10.02.02 */ +/* RequirementId: D7.1 V1R0 SIF-4.10.04.01 */ extern void ADI_TransmitCommand(uint16_t *command, ADI_STATE_s *adiState) { FAS_ASSERT(command != NULL_PTR); FAS_ASSERT(adiState != NULL_PTR); @@ -501,9 +500,9 @@ extern void ADI_TransmitCommand(uint16_t *command, ADI_STATE_s *adiState) { ADI_SpiTransmitReceiveData(adiState, adiState->data.txBuffer, NULL_PTR, ADI_COMMAND_AND_PEC_SIZE_IN_BYTES); /** - * SM_SPI_CNT: SPI Frame Counter - * Increment driver stored value of command counter if command causes increase. - */ + * SM_SPI_CNT: SPI Frame Counter + * Increment driver stored value of command counter if command causes increase. + */ /** If command increments AFE command counter, increment driver command counter */ if (command[ADI_COMMAND_INC_POSITION] == 1u) { ADI_IncrementCommandCounter(adiState); @@ -527,7 +526,7 @@ extern void ADI_WriteRegisterGlobal( ADI_WriteRegister(registerToWrite, adi_dataTransmit, pecFaultInjection, adiState); } -/* RequirementId: D7.1 V0R4 SIF-4.20.01.03 */ +/* RequirementId: D7.1 V1R0 SIF-4.20.01.03 */ extern void ADI_StoredConfigurationWriteToAfeGlobal(ADI_STATE_s *adiState) { FAS_ASSERT(adiState != NULL_PTR); STD_RETURN_TYPE_e returnValue = STD_OK; @@ -582,9 +581,10 @@ extern void ADI_WriteDataBits(uint8_t *pSentData, uint8_t dataToWrite, uint8_t p *pSentData |= tempData & mask; } -/* RequirementId: D7.1 V0R4 FUN-0.0.01.02 */ -/* RequirementId: D7.1 V0R4 SIF-4.10.01.01 */ -/* RequirementId: D7.1 V0R4 SIF-4.10.11.01 */ +/* RequirementId: D7.1 V1R0 FUN-0.0.01.02 */ +/* RequirementId: D7.1 V1R0 SIF-4.10.02.02 */ +/* RequirementId: D7.1 V0R11 SIF-4.10.03.03 */ +/* RequirementId: D7.1 V1R0 SIF-4.10.04.01 */ extern void ADI_WriteRegister( const uint16_t *registerToWrite, uint8_t *data, diff --git a/src/app/driver/afe/adi/common/ades183x/adi_ades183x_helpers.h b/src/app/driver/afe/adi/common/ades183x/adi_ades183x_helpers.h index 289ccaf7..ea43c262 100644 --- a/src/app/driver/afe/adi/common/ades183x/adi_ades183x_helpers.h +++ b/src/app/driver/afe/adi/common/ades183x/adi_ades183x_helpers.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file adi_ades183x_helpers.h * @author foxBMS Team * @date 2022-12-06 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix ADI * * @brief Headers for the diagnostic driver for the ADI analog front-end. - * + * @details TODO */ #ifndef FOXBMS__ADI_ADES183X_HELPERS_H_ diff --git a/src/app/driver/afe/adi/common/ades183x/adi_ades183x_initialization.c b/src/app/driver/afe/adi/common/ades183x/adi_ades183x_initialization.c index b0250143..ced7863d 100644 --- a/src/app/driver/afe/adi/common/ades183x/adi_ades183x_initialization.c +++ b/src/app/driver/afe/adi/common/ades183x/adi_ades183x_initialization.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file adi_ades183x_initialization.c * @author foxBMS Team * @date 2019-08-27 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup DRIVER + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS * @prefix ADI * * @brief Implementation of some software - * + * @details TODO */ /*========== Includes =======================================================*/ @@ -505,10 +505,10 @@ static void ADI_WakeUpDaisyChain(ADI_STATE_s *adiState) { } /*========== Extern Function Implementations ================================*/ -/* RequirementId: D7.1 V0R4 FUN-4.10.01.01 */ -/* RequirementId: D7.1 V0R4 FUN-4.10.01.02 */ -/* RequirementId: D7.1 V0R4 FUN-4.10.02.01 */ -/* RequirementId: D7.1 V0R4 FUN-6.10.02.01 */ +/* RequirementId: D7.1 V1R0 FUN-4.10.01.01 */ +/* RequirementId: D7.1 V1R0 FUN-4.10.01.02 */ +/* RequirementId: D7.1 V1R0 FUN-4.10.02.01 */ +/* RequirementId: D7.1 V1R0 FUN-6.10.02.02 */ extern void ADI_InitializeMeasurement(ADI_STATE_s *adiState) { FAS_ASSERT(adiState != NULL_PTR); diff --git a/src/app/driver/afe/adi/common/ades183x/adi_ades183x_initialization.h b/src/app/driver/afe/adi/common/ades183x/adi_ades183x_initialization.h index 713c9669..36ac8dd8 100644 --- a/src/app/driver/afe/adi/common/ades183x/adi_ades183x_initialization.h +++ b/src/app/driver/afe/adi/common/ades183x/adi_ades183x_initialization.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file adi_ades183x_initialization.h * @author foxBMS Team * @date 2022-12-07 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix ADI * * @brief Header file of some software - * + * @details TODO */ #ifndef FOXBMS__ADI_ADES183X_INITIALIZATION_H_ diff --git a/src/app/driver/afe/adi/common/ades183x/adi_ades183x_temperatures.c b/src/app/driver/afe/adi/common/ades183x/adi_ades183x_temperatures.c index 08b5780d..35623fe6 100644 --- a/src/app/driver/afe/adi/common/ades183x/adi_ades183x_temperatures.c +++ b/src/app/driver/afe/adi/common/ades183x/adi_ades183x_temperatures.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,14 @@ * @file adi_ades183x_temperatures.c * @author foxBMS Team * @date 2019-08-27 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup DRIVER + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS * @prefix ADI * - * @brief Implementation of some software - * + * @brief Helper functions related to temperature measurement + * @details This driver implements a helper function to convert the voltages + * that are measured on the GPIOs into a temperature. */ /*========== Includes =======================================================*/ @@ -95,20 +96,20 @@ static uint16_t ADI_GetStoredTemperatureIndex(uint16_t registerGpioIndex) { } /*========== Extern Function Implementations ================================*/ -/* RequirementId: D7.1 V0R4 FUN-2.10.01.01 */ -extern void ADI_GetTemperatures(ADI_STATE_s *adiState) { - FAS_ASSERT(adiState != NULL_PTR); +/* RequirementId: D7.1 V1R0 FUN-2.10.01.01 */ +extern void ADI_GetTemperatures(ADI_STATE_s *pAdiState) { + FAS_ASSERT(pAdiState != NULL_PTR); for (uint16_t m = 0u; m < BS_NR_OF_MODULES_PER_STRING; m++) { for (uint16_t registerGpioIndex = 0u; registerGpioIndex < BS_NR_OF_GPIOS_PER_MODULE; registerGpioIndex++) { if (adi_temperatureInputsUsed[registerGpioIndex] == 1u) { + uint16_t gpioIndex = (m * BS_NR_OF_GPIOS_PER_MODULE) + registerGpioIndex; uint16_t storedTemperatureIndex = ADI_GetStoredTemperatureIndex(registerGpioIndex); - int16_t temperature = ADI_ConvertGpioVoltageToTemperature( - adiState->data.allGpioVoltages->gpioVoltages_mV[adiState->currentString] - [(m * BS_NR_OF_GPIOS_PER_MODULE) + - registerGpioIndex]); /* unit: decidegree C */ - adiState->data.cellTemperature - ->cellTemperature_ddegC[adiState->currentString][m][storedTemperatureIndex] = temperature; + /* temperature: unit is in deci-degree C */ + int16_t temperature = ADI_ConvertGpioVoltageToTemperature( + pAdiState->data.allGpioVoltages->gpioVoltages_mV[pAdiState->currentString][gpioIndex]); + pAdiState->data.cellTemperature + ->cellTemperature_ddegC[pAdiState->currentString][m][storedTemperatureIndex] = temperature; } } } diff --git a/src/app/driver/afe/adi/common/ades183x/adi_ades183x_temperatures.h b/src/app/driver/afe/adi/common/ades183x/adi_ades183x_temperatures.h index 573e27e4..7d410b20 100644 --- a/src/app/driver/afe/adi/common/ades183x/adi_ades183x_temperatures.h +++ b/src/app/driver/afe/adi/common/ades183x/adi_ades183x_temperatures.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file adi_ades183x_temperatures.h * @author foxBMS Team * @date 2022-12-07 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix ADI * * @brief Header file of some software - * + * @details TODO */ #ifndef FOXBMS__ADI_ADES183X_TEMPERATURES_H_ @@ -70,9 +70,9 @@ * @brief Store temperatures converted from GPIO voltages. * @details This function takes the GPIO voltages, converts them to * temperatures and stores the temperatures. - * @param adiState state of the ADI driver + * @param pAdiState state of the ADI driver */ -extern void ADI_GetTemperatures(ADI_STATE_s *adiState); +extern void ADI_GetTemperatures(ADI_STATE_s *pAdiState); /*========== Externalized Static Functions Prototypes (Unit Test) ===========*/ #ifdef UNITY_UNIT_TEST diff --git a/src/app/driver/afe/adi/common/ades183x/adi_ades183x_voltages.c b/src/app/driver/afe/adi/common/ades183x/adi_ades183x_voltages.c index 9dfa3e75..51c4fe28 100644 --- a/src/app/driver/afe/adi/common/ades183x/adi_ades183x_voltages.c +++ b/src/app/driver/afe/adi/common/ades183x/adi_ades183x_voltages.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file adi_ades183x_voltages.c * @author foxBMS Team * @date 2019-08-27 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup SOME_GROUP + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS * @prefix ADI * * @brief Implementation of some software - * + * @details TODO */ /*========== Includes =======================================================*/ @@ -209,7 +209,7 @@ static void ADI_ReadAndStoreVoltages( ADI_SaveRxToCellVoltageBuffer(adiState, adi_dataReceive, ADI_RESULT_REGISTER_SET_F, storeLocation); } -/* RequirementId: D7.1 V0R4 FUN-1.10.01.03 */ +/* RequirementId: D7.1 V1R0 FUN-1.10.01.03 */ static void ADI_SaveRxToCellVoltageBuffer( ADI_STATE_s *adiState, uint8_t *data, @@ -317,7 +317,7 @@ static void ADI_SaveRxToCellVoltageBuffer( voltage = (int16_t)floatVoltage; /* Unit mV */ pVoltageTable->cellVoltage_mV[adiState->currentString][m][storedVoltageIndex] = voltage; - /* RequirementId: D7.1 V0R4 SIF-4.40.01.01 */ + /* RequirementId: D7.1 V1R0 SIF-4.40.01.01 */ /* Check that register does not contain cleared value */ if (rawValue != ADI_REGISTER_CLEARED_VALUE) { adiState->data.errorTable->voltageRegisterContentIsNotStuck[adiState->currentString][m] = @@ -329,11 +329,11 @@ static void ADI_SaveRxToCellVoltageBuffer( if (storeLocation == ADI_CELL_VOLTAGE) { if (ADI_EvaluateDiagnosticCellVoltages(adiState, m) == false) { - adiState->data.cellVoltage->invalidCellVoltage[adiState->currentString][m] |= - (0x01u << storedVoltageIndex); + adiState->data.cellVoltage + ->invalidCellVoltage[adiState->currentString][m][storedVoltageIndex] = true; } else { - adiState->data.cellVoltage->invalidCellVoltage[adiState->currentString][m] &= - (~0x01u << storedVoltageIndex); + adiState->data.cellVoltage + ->invalidCellVoltage[adiState->currentString][m][storedVoltageIndex] = false; numberValidMeasurements++; } } @@ -348,7 +348,7 @@ static void ADI_SaveRxToCellVoltageBuffer( } /*========== Extern Function Implementations ================================*/ -/* RequirementId: D7.1 V0R4 FUN-1.10.01.01 */ +/* RequirementId: D7.1 V1R0 FUN-1.10.01.01 */ extern void ADI_GetVoltages( ADI_STATE_s *adiState, ADI_VOLTAGE_REGISTER_TYPE_e registerType, diff --git a/src/app/driver/afe/adi/common/ades183x/adi_ades183x_voltages.h b/src/app/driver/afe/adi/common/ades183x/adi_ades183x_voltages.h index 239dfe32..b95ea6dc 100644 --- a/src/app/driver/afe/adi/common/ades183x/adi_ades183x_voltages.h +++ b/src/app/driver/afe/adi/common/ades183x/adi_ades183x_voltages.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file adi_ades183x_voltages.h * @author foxBMS Team * @date 2022-12-07 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix ADI * * @brief Header file of some software - * + * @details TODO */ #ifndef FOXBMS__ADI_ADES183X_VOLTAGES_H_ diff --git a/src/app/driver/afe/adi/common/ades183x/api/adi_ades183x_afe.c b/src/app/driver/afe/adi/common/ades183x/api/adi_ades183x_afe.c index d27f6ac6..b0e5fe54 100644 --- a/src/app/driver/afe/adi/common/ades183x/api/adi_ades183x_afe.c +++ b/src/app/driver/afe/adi/common/ades183x/api/adi_ades183x_afe.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,12 +43,13 @@ * @file adi_ades183x_afe.c * @author foxBMS Team * @date 2020-05-08 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup DRIVER + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS * @prefix AFE * * @brief AFE driver implementation for ADI ICs + * @details TODO */ /*========== Includes =======================================================*/ diff --git a/src/app/driver/afe/adi/common/ades183x/api/adi_ades183x_afe_dma.c b/src/app/driver/afe/adi/common/ades183x/api/adi_ades183x_afe_dma.c index 1347db4d..05320109 100644 --- a/src/app/driver/afe/adi/common/ades183x/api/adi_ades183x_afe_dma.c +++ b/src/app/driver/afe/adi/common/ades183x/api/adi_ades183x_afe_dma.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,12 +43,13 @@ * @file adi_ades183x_afe_dma.c * @author foxBMS Team * @date 2020-05-27 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix AFE * * @brief Driver for the DMA module for the ADI driver. + * @details TODO * */ @@ -82,3 +83,5 @@ void AFE_DmaCallback(uint8_t spiIndex) { } /*========== Externalized Static Function Implementations (Unit Test) =======*/ +#ifdef UNITY_UNIT_TEST +#endif diff --git a/src/app/driver/afe/adi/common/ades183x/config/adi_ades183x_cfg.c b/src/app/driver/afe/adi/common/ades183x/config/adi_ades183x_cfg.c index 7872bde6..5abea5d0 100644 --- a/src/app/driver/afe/adi/common/ades183x/config/adi_ades183x_cfg.c +++ b/src/app/driver/afe/adi/common/ades183x/config/adi_ades183x_cfg.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file adi_ades183x_cfg.c * @author foxBMS Team * @date 2020-12-09 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS_CONFIGURATION * @prefix ADI * * @brief Configuration for the ADI analog front-end - * + * @details TODO */ /*========== Includes =======================================================*/ @@ -77,3 +77,5 @@ int16_t ADI_ConvertGpioVoltageToTemperature(int16_t voltage_mV) { } /*========== Externalized Static Function Implementations (Unit Test) =======*/ +#ifdef UNITY_UNIT_TEST +#endif diff --git a/src/app/driver/afe/adi/common/ades183x/config/adi_ades183x_cfg.h b/src/app/driver/afe/adi/common/ades183x/config/adi_ades183x_cfg.h index 89ae9654..a9b63d02 100644 --- a/src/app/driver/afe/adi/common/ades183x/config/adi_ades183x_cfg.h +++ b/src/app/driver/afe/adi/common/ades183x/config/adi_ades183x_cfg.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file adi_ades183x_cfg.h * @author foxBMS Team * @date 2020-12-09 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS_CONFIGURATION * @prefix ADI * * @brief Header for the configuration for the ADI analog front-end. - * + * @details TODO */ #ifndef FOXBMS__ADI_ADES183X_CFG_H_ diff --git a/src/app/driver/afe/adi/common/ades183x/pec/adi_ades183x_pec.c b/src/app/driver/afe/adi/common/ades183x/pec/adi_ades183x_pec.c index 187580f9..4f049a56 100644 --- a/src/app/driver/afe/adi/common/ades183x/pec/adi_ades183x_pec.c +++ b/src/app/driver/afe/adi/common/ades183x/pec/adi_ades183x_pec.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,14 +43,13 @@ * @file adi_ades183x_pec.c * @author foxBMS Team * @date 2019-12-12 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix ADI * * @brief PEC computations * @details The CRC polynomials used are defined in the data sheets of the ICs. - * */ /*========== Includes =======================================================*/ @@ -176,3 +175,5 @@ uint16_t ADI_Pec10(uint8_t length, uint8_t *data, bool receive) { } /*========== Externalized Static Function Implementations (Unit Test) =======*/ +#ifdef UNITY_UNIT_TEST +#endif diff --git a/src/app/driver/afe/adi/common/ades183x/pec/adi_ades183x_pec.h b/src/app/driver/afe/adi/common/ades183x/pec/adi_ades183x_pec.h index 23b5c07d..9c3ebd84 100644 --- a/src/app/driver/afe/adi/common/ades183x/pec/adi_ades183x_pec.h +++ b/src/app/driver/afe/adi/common/ades183x/pec/adi_ades183x_pec.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,14 +43,13 @@ * @file adi_ades183x_pec.h * @author foxBMS Team * @date 2019-12-12 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix ADI * * @brief Headers for the PEC computations. * @details The CRC polynomials used are defined in the data sheets of the ICs. - * */ #ifndef FOXBMS__ADI_ADES183X_PEC_H_ diff --git a/src/app/driver/afe/adi/common/ades183x/wscript b/src/app/driver/afe/adi/common/ades183x/wscript old mode 100644 new mode 100755 index ed95ef6e..2a2c2b11 --- a/src/app/driver/afe/adi/common/ades183x/wscript +++ b/src/app/driver/afe/adi/common/ades183x/wscript @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause diff --git a/src/app/driver/afe/adi/wscript b/src/app/driver/afe/adi/wscript old mode 100644 new mode 100755 index 0c053f2d..2c037aa5 --- a/src/app/driver/afe/adi/wscript +++ b/src/app/driver/afe/adi/wscript @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause diff --git a/src/app/driver/afe/api/afe.h b/src/app/driver/afe/api/afe.h index 334981ea..943b4737 100644 --- a/src/app/driver/afe/api/afe.h +++ b/src/app/driver/afe/api/afe.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,12 @@ * @file afe.h * @author foxBMS Team * @date 2020-05-08 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup DRIVER + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS * @prefix AFE * * @brief AFE driver header - * * @details TODO */ @@ -99,11 +98,15 @@ typedef struct { /** period for open wire measurement */ #define AFE_ERROR_OPEN_WIRE_PERIOD_ms (30000u) +/** default cell voltage value if no valid measurement result can be read from AFE */ +#define AFE_DEFAULT_CELL_VOLTAGE_INVALID_VALUE (INT16_MAX) + /*========== Extern Constant and Variable Declarations ======================*/ /*========== Extern Function Prototypes =====================================*/ /** tick function, this function is called to advance the state machine */ extern STD_RETURN_TYPE_e AFE_TriggerIc(void); + /** initializer, this function is called in order to initialize the AFE */ extern STD_RETURN_TYPE_e AFE_Initialize(void); diff --git a/src/app/driver/afe/api/afe_dma.h b/src/app/driver/afe/api/afe_dma.h index f757b186..fd522e2f 100644 --- a/src/app/driver/afe/api/afe_dma.h +++ b/src/app/driver/afe/api/afe_dma.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file afe_dma.h * @author foxBMS Team * @date 2020-06-18 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix AFE * * @brief Headers for the driver for the general DMA module of monitoring ICs. - * + * @details TODO */ #ifndef FOXBMS__AFE_DMA_H_ diff --git a/src/app/driver/afe/api/afe_plausibility.c b/src/app/driver/afe/api/afe_plausibility.c index 37a2fa47..b31e4a4a 100644 --- a/src/app/driver/afe/api/afe_plausibility.c +++ b/src/app/driver/afe/api/afe_plausibility.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file afe_plausibility.c * @author foxBMS Team * @date 2019-01-24 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup MODULES + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS * @prefix AFE * * @brief AFE plausibility checks for cell voltage and cell temperatures - * + * @details TODO */ /*========== Includes =======================================================*/ diff --git a/src/app/driver/afe/api/afe_plausibility.h b/src/app/driver/afe/api/afe_plausibility.h index 846d83e2..75392348 100644 --- a/src/app/driver/afe/api/afe_plausibility.h +++ b/src/app/driver/afe/api/afe_plausibility.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file afe_plausibility.h * @author foxBMS Team * @date 2019-01-24 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup MODULES + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS * @prefix AFE * - * @brief plausibility checks for cell voltage and cell temperatures - * + * @brief Plausibility checks for cell voltage and cell temperatures + * @details TODO */ #ifndef FOXBMS__AFE_PLAUSIBILITY_H_ @@ -73,12 +73,12 @@ typedef struct { /** largest cell voltage value that is considered plausible in mV * * This value should be the maximum operating limit of the AFE. - */ + */ const int16_t maximumPlausibleVoltage_mV; /** smallest cell voltage value that is considered plausible in mV * * This value should be the minimum operating limit of the AFE. - */ + */ const int16_t minimumPlausibleVoltage_mV; } AFE_PLAUSIBILITY_VALUES_s; diff --git a/src/app/driver/can/cbs/tx/can_cbs_tx_pack-values-p1.c b/src/app/driver/afe/debug/can/api/debug_can_afe.c similarity index 54% rename from src/app/driver/can/cbs/tx/can_cbs_tx_pack-values-p1.c rename to src/app/driver/afe/debug/can/api/debug_can_afe.c index b5939da6..1b81254b 100644 --- a/src/app/driver/can/cbs/tx/can_cbs_tx_pack-values-p1.c +++ b/src/app/driver/afe/debug/can/api/debug_can_afe.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,37 +33,33 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ /** - * @file can_cbs_tx_pack-values-p1.c + * @file debug_can_afe.c * @author foxBMS Team - * @date 2023-05-31 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup DRIVER - * @prefix CANTX + * @date 2020-09-17 (date of creation) + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS + * @prefix DECAN * - * @brief CAN driver Tx callback implementation - * @details CAN Tx callback for pack value and string value messages + * @brief Implementation of the fake AFE driver + * @details TODO */ /*========== Includes =======================================================*/ -#include "can_cbs_tx.h" -#include "can_cfg_tx-message-definitions.h" -#include "can_helper.h" -#include +#include "afe.h" +#include "debug_can.h" + #include /*========== Macros and Definitions =========================================*/ -/* configuration of the PackP1 message bits */ -#define CANTX_PACK_P1_INSULATION_RESISTANCE_START_BIT (7u) -#define CANTX_PACK_P1_INSULATION_RESISTANCE_LENGTH (13u) /*========== Static Constant and Variable Definitions =======================*/ @@ -74,6 +70,63 @@ /*========== Static Function Implementations ================================*/ /*========== Extern Function Implementations ================================*/ +extern STD_RETURN_TYPE_e AFE_TriggerIc(void) { + return DECAN_TriggerAfe(); +} + +extern STD_RETURN_TYPE_e AFE_Initialize(void) { + return DECAN_Initialize(); +} + +extern STD_RETURN_TYPE_e AFE_StartMeasurement(void) { + return STD_OK; +} + +extern bool AFE_IsFirstMeasurementCycleFinished(void) { + return true; +} + +extern STD_RETURN_TYPE_e AFE_RequestIoWrite(uint8_t string) { + /* this is a dummy implementation and not using the argument here is fine */ + (void)string; + return STD_OK; +} + +extern STD_RETURN_TYPE_e AFE_RequestIoRead(uint8_t string) { + /* this is a dummy implementation and not using the argument here is fine */ + (void)string; + return STD_OK; +} + +extern STD_RETURN_TYPE_e AFE_RequestTemperatureRead(uint8_t string) { + /* this is a dummy implementation and not using the argument here is fine */ + (void)string; + return STD_OK; +} + +extern STD_RETURN_TYPE_e AFE_RequestBalancingFeedbackRead(uint8_t string) { + /* this is a dummy implementation and not using the argument here is fine */ + (void)string; + return STD_OK; +} + +extern STD_RETURN_TYPE_e AFE_RequestEepromRead(uint8_t string) { + /* this is a dummy implementation and not using the argument here is fine */ + (void)string; + return STD_OK; +} + +extern STD_RETURN_TYPE_e AFE_RequestEepromWrite(uint8_t string) { + /* this is a dummy implementation and not using the argument here is fine */ + (void)string; + return STD_OK; +} + +extern STD_RETURN_TYPE_e AFE_RequestOpenWireCheck(uint8_t string) { + /* this is a dummy implementation and not using the argument here is fine */ + (void)string; + return STD_OK; +} /*========== Externalized Static Function Implementations (Unit Test) =======*/ #ifdef UNITY_UNIT_TEST diff --git a/src/app/driver/can/cbs/tx/can_cbs_tx_string-state.c b/src/app/driver/afe/debug/can/api/debug_can_afe_dma.c similarity index 78% rename from src/app/driver/can/cbs/tx/can_cbs_tx_string-state.c rename to src/app/driver/afe/debug/can/api/debug_can_afe_dma.c index 1ff95da7..2f67cd9b 100644 --- a/src/app/driver/can/cbs/tx/can_cbs_tx_string-state.c +++ b/src/app/driver/afe/debug/can/api/debug_can_afe_dma.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,34 +33,28 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ /** - * @file can_cbs_tx_string-state.c + * @file debug_can_afe_dma.c * @author foxBMS Team - * @date 2023-05-31 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup DRIVER - * @prefix CANTX + * @date 2024-04-08 (date of creation) + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS + * @prefix DECAN * - * @brief CAN driver Tx callback implementation - * @details CAN Tx callback for state messages + * @brief Driver for the DMA module for the fake driver. + * @details TODO */ /*========== Includes =======================================================*/ -#include "bms.h" -#include "can_cbs_tx.h" -#include "can_cfg_tx-message-definitions.h" -#include "can_helper.h" -#include "diag.h" -#include "sys_mon.h" +#include "afe_dma.h" -#include #include /*========== Macros and Definitions =========================================*/ @@ -75,6 +69,12 @@ /*========== Extern Function Implementations ================================*/ +/* Function called on DMA complete interrupts (TX and RX). */ +void AFE_DmaCallback(uint8_t spiIndex) { + /* this is a dummy implementation and not using the argument here is fine */ + (void)spiIndex; +} + /*========== Externalized Static Function Implementations (Unit Test) =======*/ #ifdef UNITY_UNIT_TEST #endif diff --git a/src/app/driver/afe/debug/can/debug_can.c b/src/app/driver/afe/debug/can/debug_can.c new file mode 100644 index 00000000..65002b98 --- /dev/null +++ b/src/app/driver/afe/debug/can/debug_can.c @@ -0,0 +1,438 @@ +/** + * + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * We kindly request you to use one or more of the following phrases to refer to + * foxBMS in your hardware, software, documentation or advertising materials: + * + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" + * + */ + +/** + * @file debug_can.c + * @author foxBMS Team + * @date 2024-04-08 (date of creation) + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS + * @prefix DECAN + * + * @brief Driver implementation of the fake CAN to AFE driver to receive + * CAN messages (cell temperatures and cell voltages) from can via + * queues and write the relevant data back to the database. + * @details TODO + */ + +/*========== Includes =======================================================*/ +#include "debug_can.h" + +#include "can_helper.h" +#include "database.h" +#include "ftask.h" +#include "os.h" + +#include + +/*========== Macros and Definitions =========================================*/ + +/*========== Static Constant and Variable Definitions =======================*/ +/** local copies of database tables */ +/**@{*/ +static DATA_BLOCK_CELL_VOLTAGE_s decan_cellVoltage = {.header.uniqueId = DATA_BLOCK_ID_CELL_VOLTAGE_BASE}; +static DATA_BLOCK_CELL_VOLTAGE_s decan_cellVoltageFromRead = {.header.uniqueId = DATA_BLOCK_ID_CELL_VOLTAGE_BASE}; +static DATA_BLOCK_CELL_TEMPERATURE_s decan_cellTemperature = {.header.uniqueId = DATA_BLOCK_ID_CELL_TEMPERATURE_BASE}; +static DATA_BLOCK_CELL_TEMPERATURE_s decan_cellTemperatureFromRead = { + .header.uniqueId = DATA_BLOCK_ID_CELL_TEMPERATURE_BASE}; +/**@}*/ + +/*========== Extern Constant and Variable Definitions =======================*/ + +/*========== Static Function Prototypes =====================================*/ +/** + * @brief A modified modulo operation: the input a can not be 0; if the result of a modulo operation is zero, + * the returned value will be b + * @param a First input of a modulo operation + * @param b Second input of a modulo operation + * @return a modified modulo result (uint16_t) + */ +static uint16_t DECAN_ModifiedModuloFunction(uint16_t a, uint16_t b); + +/** + * @brief Convert the one number index of the cell voltage into the indexes of cellVoltage_mV + * @param s Pointer of string number of the cellVoltage_mV in the database entry structure DATA_BLOCK_CELL_VOLTAGE_s + * @param m Pointer of module number of the cellVoltage_mV in the database entry structure DATA_BLOCK_CELL_VOLTAGE_s + * @param cb Pointer of cell number of the cellVoltage_mV in the database entry structure DATA_BLOCK_CELL_VOLTAGE_s + * @param oneNumIdxOfVoltage One number index of cellVoltage + */ +static void DECAN_ConvertIndexForVoltage(uint16_t *s, uint16_t *m, uint16_t *cb, uint16_t oneNumIdxOfVoltage); + +/** + * @brief Convert the one number index of the cell temperature into the indexes of cellTemperature_ddegC + * @param s Pointer of string number of the cellTemperature_ddegC in the database entry structure + * DATA_BLOCK_CELL_TEMPERATURE_s + * @param m Pointer of module number of the cellTemperature_ddegC in the database entry structure + * DATA_BLOCK_CELL_TEMPERATURE_s + * @param ts Pointer of temperature sensor number of the cellTemperature_ddegC in the database entry structure + * DATA_BLOCK_CELL_TEMPERATURE_s + * @param oneNumIdxOfTemperature One number index of cellTemperature + */ +static void DECAN_ConvertIndexForTemperature(uint16_t *s, uint16_t *m, uint16_t *ts, uint16_t oneNumIdxOfTemperature); + +/** + * @brief Receive can voltage data from queue and write into database + * @return #STD_OK if successful, #STD_NOT_OK otherwise + */ +static STD_RETURN_TYPE_e DECAN_ReceiveCanCellVoltages(void); + +/** + * @brief Receive can temperature data from queue and write into database + * @return #STD_OK if successful, #STD_NOT_OK otherwise + */ +static STD_RETURN_TYPE_e DECAN_ReceiveCanCellTemperatures(void); + +/*========== Static Function Implementations ================================*/ +static uint16_t DECAN_ModifiedModuloFunction(uint16_t a, uint16_t b) { + FAS_ASSERT(a > 0); + FAS_ASSERT(b > 0); + + int16_t c = a % b; + if (c == 0) { + c = b; + } + return c; +} + +static void DECAN_ConvertIndexForVoltage(uint16_t *s, uint16_t *m, uint16_t *cb, uint16_t oneNumIdxOfVoltage) { + /* oneNumIdxOfVoltage can not be bigger than + BS_NR_OF_STRINGS * BS_NR_OF_MODULES_PER_STRING * BS_NR_OF_CELL_BLOCKS_PER_MODULE -1 */ + FAS_ASSERT(oneNumIdxOfVoltage < BS_NR_OF_STRINGS * BS_NR_OF_MODULES_PER_STRING * BS_NR_OF_CELL_BLOCKS_PER_MODULE); + + /* The number of cell voltages starts from 1 while the index of the cell voltage starts from 0 */ + uint16_t num_cellVoltages = oneNumIdxOfVoltage + 1; + + /* Initialize the number of cell blocks(in the last string and the last module), + modules(in the last string), strings */ + uint16_t num_cb = 1; + uint16_t num_m = 1; + uint16_t num_s = 1; + + /* Initialize a temporal variable for calculating the minimum number of modules*/ + uint16_t temp_m = 1; + + /* Get the number of cell blocks */ + num_cb = (uint16_t)(DECAN_ModifiedModuloFunction(num_cellVoltages, BS_NR_OF_CELL_BLOCKS_PER_MODULE)); + + /* In the case that more than one module exists */ + if (num_cellVoltages > BS_NR_OF_CELL_BLOCKS_PER_MODULE) { + /* Get the number of module while ignoring the exist of string*/ + if ((num_cellVoltages % BS_NR_OF_CELL_BLOCKS_PER_MODULE) == 0) { + temp_m = (uint16_t)(num_cellVoltages / BS_NR_OF_CELL_BLOCKS_PER_MODULE); + } else { + temp_m = (uint16_t)(num_cellVoltages / BS_NR_OF_CELL_BLOCKS_PER_MODULE) + 1; + } + num_m = temp_m; + + /* If more than one string exists */ + if (temp_m > BS_NR_OF_MODULES_PER_STRING) { + num_m = (uint16_t)(DECAN_ModifiedModuloFunction(temp_m, BS_NR_OF_MODULES_PER_STRING)); + /* Get the number of strings */ + if ((temp_m % BS_NR_OF_MODULES_PER_STRING) == 0) { + num_s = (uint16_t)(temp_m / BS_NR_OF_MODULES_PER_STRING); + } else { + num_s = (uint16_t)(temp_m / BS_NR_OF_MODULES_PER_STRING) + 1; + } + } + } + + /* Get the indexes *s, *m, *cb of cell voltage */ + *cb = num_cb - 1; + *m = num_m - 1; + *s = num_s - 1; +} + +static void DECAN_ConvertIndexForTemperature(uint16_t *s, uint16_t *m, uint16_t *ts, uint16_t oneNumIdxOfTemperature) { + /* oneNumIdxOfTemperature can not be bigger than + BS_NR_OF_STRINGS * BS_NR_OF_MODULES_PER_STRING * BS_NR_OF_TEMP_SENSORS_PER_MODULE -1 */ + FAS_ASSERT( + oneNumIdxOfTemperature < BS_NR_OF_STRINGS * BS_NR_OF_MODULES_PER_STRING * BS_NR_OF_TEMP_SENSORS_PER_MODULE); + + /* The number of cell temperature (num_cellTemperature) starts from 1 + while the index of cell temperature (oneNumIdxOfTemperature) starts from 0 */ + uint16_t num_cellTemperatures = oneNumIdxOfTemperature + 1; + + /* Initialize the number of temperature sensors (in the last string and the last module), + modules(in the last string), strings */ + uint16_t num_ts = 1; + uint16_t num_m = 1; + uint16_t num_s = 1; + + /* Initialize a temporal variable for calculating the minimum number of modules*/ + uint16_t temp_m = 1; + + /* Get the number of temperature sensors s */ + num_ts = (uint16_t)(DECAN_ModifiedModuloFunction(num_cellTemperatures, BS_NR_OF_TEMP_SENSORS_PER_MODULE)); + + /* In the case that more than one module exists */ + if (num_cellTemperatures > BS_NR_OF_TEMP_SENSORS_PER_MODULE) { + /* Get the number of module while ignoring the exist of string*/ + if ((num_cellTemperatures % BS_NR_OF_TEMP_SENSORS_PER_MODULE) == 0) { + temp_m = (uint16_t)(num_cellTemperatures / BS_NR_OF_TEMP_SENSORS_PER_MODULE); + } else { + temp_m = (uint16_t)(num_cellTemperatures / BS_NR_OF_TEMP_SENSORS_PER_MODULE) + 1; + } + num_m = temp_m; + + /* If more than one string exists */ + if (temp_m > BS_NR_OF_MODULES_PER_STRING) { + num_m = (uint16_t)(DECAN_ModifiedModuloFunction(temp_m, BS_NR_OF_MODULES_PER_STRING)); + /* Get the number of strings */ + if ((temp_m % BS_NR_OF_MODULES_PER_STRING) == 0) { + num_s = (uint16_t)(temp_m / BS_NR_OF_MODULES_PER_STRING); + } else { + num_s = (uint16_t)(temp_m / BS_NR_OF_MODULES_PER_STRING) + 1; + } + } + } + + /* Get the indexes *s, *m, *cb of cell voltage */ + *ts = num_ts - 1; + *m = num_m - 1; + *s = num_s - 1; +} + +static STD_RETURN_TYPE_e DECAN_ReceiveCanCellVoltages(void) { + STD_RETURN_TYPE_e isSuccessful = STD_NOT_OK; + CAN_CAN2AFE_CELL_VOLTAGES_QUEUE_s decan_canCellVoltagesFromQueue = {0}; + + /* Get decan_canCellVoltagesFromQueue from queue */ + OS_STD_RETURN_e receivedFromQueue = OS_ReceiveFromQueue( + ftsk_canToAfeCellVoltagesQueue, (void *)&decan_canCellVoltagesFromQueue, DECAN_CAN2AFE_QUEUE_TIMEOUT_MS); + if (receivedFromQueue == OS_SUCCESS) { + /* Initialize the indexes for cellVoltage_mV */ + uint16_t s = 0u; + uint16_t m = 0u; + uint16_t cb = 0u; + uint16_t oneNumIdxOfVoltage = decan_canCellVoltagesFromQueue.muxValue * + CAN_NUM_OF_VOLTAGES_IN_CAN_CELL_VOLTAGES_MSG; + uint16_t upperBoundOneNumIdxOfVoltage = + BS_NR_OF_STRINGS * BS_NR_OF_MODULES_PER_STRING * BS_NR_OF_CELL_BLOCKS_PER_MODULE - 1; + + /* Loop through all voltages in the received can message */ + for (uint8_t i = 0u; i < CAN_NUM_OF_VOLTAGES_IN_CAN_CELL_VOLTAGES_MSG; i++) { + /* Check if the one number index of voltage surpass its upper bound */ + if (oneNumIdxOfVoltage > upperBoundOneNumIdxOfVoltage) { + break; + } + /* Convert the one number index of temperature into s, m, ts */ + DECAN_ConvertIndexForVoltage(&s, &m, &cb, oneNumIdxOfVoltage); + + /* Write the received data */ + decan_cellVoltage.cellVoltage_mV[s][m][cb] = (int16_t)decan_canCellVoltagesFromQueue.cellVoltage[i]; + if (decan_canCellVoltagesFromQueue.invalidFlag[i] == DECAN_DATA_IS_VALID) { + decan_cellVoltage.invalidCellVoltage[s][m][cb] = false; + } else { + decan_cellVoltage.invalidCellVoltage[s][m][cb] = true; + } + + /* Update one number index of the cell voltage */ + oneNumIdxOfVoltage++; + } + + /* Write this part of cell voltages and invalid flags to database, + read the total cell voltages and invalid flags, count the number of + invalid cell voltages and then write them back to database */ + uint16_t nrValidCellVoltagesPerString = 0u; + int32_t stringVoltage_mV = 0; + int32_t moduleVoltage_mV = 0; + if ((DATA_WRITE_DATA(&decan_cellVoltage) == STD_OK) && (DATA_READ_DATA(&decan_cellVoltageFromRead) == STD_OK)) { + for (uint16_t idxString = 0u; idxString < BS_NR_OF_STRINGS; idxString++) { + nrValidCellVoltagesPerString = 0u; + stringVoltage_mV = 0; + for (uint16_t idxModule = 0u; idxModule < BS_NR_OF_MODULES_PER_STRING; idxModule++) { + moduleVoltage_mV = 0; + for (uint16_t idxCellBlocks = 0u; idxCellBlocks < BS_NR_OF_CELL_BLOCKS_PER_MODULE; + idxCellBlocks++) { + if (decan_cellVoltageFromRead.invalidCellVoltage[idxString][idxModule][idxCellBlocks] == + false) { + nrValidCellVoltagesPerString++; + moduleVoltage_mV += + (int32_t)decan_cellVoltageFromRead.cellVoltage_mV[idxString][idxModule][idxCellBlocks]; + } + } + decan_cellVoltageFromRead.moduleVoltage_mV[idxString][idxModule] = moduleVoltage_mV; + stringVoltage_mV += moduleVoltage_mV; + } + decan_cellVoltageFromRead.stringVoltage_mV[idxString] = stringVoltage_mV; + decan_cellVoltageFromRead.nrValidCellVoltages[idxString] = nrValidCellVoltagesPerString; + } + isSuccessful = DATA_WRITE_DATA(&decan_cellVoltageFromRead); + } + } + + return isSuccessful; +} + +static STD_RETURN_TYPE_e DECAN_ReceiveCanCellTemperatures(void) { + STD_RETURN_TYPE_e isSuccessful = STD_NOT_OK; + + /* Get can cell temperatures from queue */ + CAN_CAN2AFE_CELL_TEMPERATURES_QUEUE_s decan_canCellTemperaturesFromQueue = {0}; + OS_STD_RETURN_e receivedFromQueue = OS_ReceiveFromQueue( + ftsk_canToAfeCellTemperaturesQueue, + (void *)&decan_canCellTemperaturesFromQueue, + DECAN_CAN2AFE_QUEUE_TIMEOUT_MS); + if (receivedFromQueue == OS_SUCCESS) { + /* Initialize the indexes for cellTemperature_ddegC */ + uint16_t s = 0u; + uint16_t m = 0u; + uint16_t ts = 0u; + uint16_t oneNumIdxOfTemperature = decan_canCellTemperaturesFromQueue.muxValue * + CAN_NUM_OF_TEMPERATURES_IN_CAN_CELL_TEMPERATURES_MSG; + uint16_t upperBoundOneNumIdxOfTemperature = + BS_NR_OF_STRINGS * BS_NR_OF_MODULES_PER_STRING * BS_NR_OF_TEMP_SENSORS_PER_MODULE - 1; + + /* Loop through all temperatures in the received can message */ + for (uint16_t i = 0u; i < CAN_NUM_OF_TEMPERATURES_IN_CAN_CELL_TEMPERATURES_MSG; i++) { + /* Check if the one number index of temperature surpass its upper bound */ + if (oneNumIdxOfTemperature > upperBoundOneNumIdxOfTemperature) { + break; + } + + /* Convert the one number index of temperature into s, m, ts */ + DECAN_ConvertIndexForTemperature(&s, &m, &ts, oneNumIdxOfTemperature); + + /* Write the received data */ + decan_cellTemperature.cellTemperature_ddegC[s][m][ts] = + decan_canCellTemperaturesFromQueue.cellTemperature[i] * 10; + if (decan_canCellTemperaturesFromQueue.invalidFlag[i] == DECAN_DATA_IS_VALID) { + decan_cellTemperature.invalidCellTemperature[s][m][ts] = false; + } else { + decan_cellTemperature.invalidCellTemperature[s][m][ts] = true; + } + + /* Update one number index */ + oneNumIdxOfTemperature++; + } + + /* Write this part of cell temperatures and invalid flags to database, + read the total cell temperatures and invalid flags, count the number of + invalid cell temperatures and then write them back to database */ + if ((DATA_WRITE_DATA(&decan_cellTemperature) == STD_OK) && + (DATA_READ_DATA(&decan_cellTemperatureFromRead) == STD_OK)) { + for (uint16_t idxString = 0u; idxString < BS_NR_OF_STRINGS; idxString++) { + uint16_t nrValidCellTemperaturesPerString = 0u; + for (uint16_t idxModule = 0u; idxModule < BS_NR_OF_MODULES_PER_STRING; idxModule++) { + for (uint16_t idxTemperatureSensor = 0u; idxTemperatureSensor < BS_NR_OF_TEMP_SENSORS_PER_MODULE; + idxTemperatureSensor++) { + if (decan_cellTemperatureFromRead + .invalidCellTemperature[idxString][idxModule][idxTemperatureSensor] == false) { + nrValidCellTemperaturesPerString++; + } + } + } + decan_cellTemperatureFromRead.nrValidTemperatures[idxString] = nrValidCellTemperaturesPerString; + } + isSuccessful = DATA_WRITE_DATA(&decan_cellTemperatureFromRead); + } + } + + return isSuccessful; +} + +/*========== Extern Function Implementations ================================*/ +extern STD_RETURN_TYPE_e DECAN_Initialize(void) { + /* Initialize entry of cell voltage and cell temperature in database */ + for (uint16_t s = 0u; s < BS_NR_OF_STRINGS; s++) { + for (uint16_t m = 0u; m < BS_NR_OF_MODULES_PER_STRING; m++) { + for (uint16_t cb = 0u; cb < BS_NR_OF_CELL_BLOCKS_PER_MODULE; cb++) { + decan_cellVoltage.cellVoltage_mV[s][m][cb] = 0; + decan_cellVoltage.invalidCellVoltage[s][m][cb] = true; + } + } + } + for (uint16_t s = 0u; s < BS_NR_OF_STRINGS; s++) { + for (uint16_t m = 0u; m < BS_NR_OF_MODULES_PER_STRING; m++) { + for (uint16_t ts = 0u; ts < BS_NR_OF_TEMP_SENSORS_PER_MODULE; ts++) { + decan_cellTemperature.cellTemperature_ddegC[s][m][ts] = 0; + decan_cellTemperature.invalidCellTemperature[s][m][ts] = true; + } + } + } + /* Give other tasks time to execute */ + uint32_t current_time = OS_GetTickCount(); + OS_DelayTaskUntil(¤t_time, 10u); + return STD_OK; +} + +extern STD_RETURN_TYPE_e DECAN_TriggerAfe(void) { + STD_RETURN_TYPE_e isSuccessful = STD_NOT_OK; + STD_RETURN_TYPE_e isSuccessful_receiveCanCellVoltages = STD_NOT_OK; + STD_RETURN_TYPE_e isSuccessful_receiveCanCellTemperatures = STD_NOT_OK; + + isSuccessful_receiveCanCellVoltages = DECAN_ReceiveCanCellVoltages(); + isSuccessful_receiveCanCellTemperatures = DECAN_ReceiveCanCellTemperatures(); + if ((isSuccessful_receiveCanCellVoltages == STD_OK) && (isSuccessful_receiveCanCellTemperatures == STD_OK)) { + isSuccessful = STD_OK; + } + + uint32_t currentTime = OS_GetTickCount(); + + /* Block task without possibility to wake up */ + /* +1: to wait at least waitTime*/ + OS_DelayTaskUntil(¤tTime, 10u); + return isSuccessful; +} + +/*========== Externalized Static Function Implementations (Unit Test) =======*/ +#ifdef UNITY_UNIT_TEST +extern uint16_t TEST_DECAN_ModifiedModuloFunction(uint16_t a, uint16_t b) { + return DECAN_ModifiedModuloFunction(a, b); +} +extern void TEST_DECAN_ConvertIndexForVoltage(uint16_t *s, uint16_t *m, uint16_t *cb, uint16_t oneNumIdxOfVoltage) { + DECAN_ConvertIndexForVoltage(s, m, cb, oneNumIdxOfVoltage); +} +extern void TEST_DECAN_ConvertIndexForTemperature( + uint16_t *s, + uint16_t *m, + uint16_t *ts, + uint16_t oneNumIdxOfTemperature) { + DECAN_ConvertIndexForTemperature(s, m, ts, oneNumIdxOfTemperature); +} +extern STD_RETURN_TYPE_e TEST_DECAN_ReceiveCanCellVoltages(void) { + return DECAN_ReceiveCanCellVoltages(); +} +extern STD_RETURN_TYPE_e TEST_DECAN_ReceiveCanCellTemperatures(void) { + return DECAN_ReceiveCanCellTemperatures(); +} +#endif diff --git a/src/app/driver/afe/debug/can/debug_can.h b/src/app/driver/afe/debug/can/debug_can.h new file mode 100644 index 00000000..f2d4c4da --- /dev/null +++ b/src/app/driver/afe/debug/can/debug_can.h @@ -0,0 +1,107 @@ +/** + * + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * We kindly request you to use one or more of the following phrases to refer to + * foxBMS in your hardware, software, documentation or advertising materials: + * + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" + * + */ + +/** + * @file debug_can.h + * @author foxBMS Team + * @date 2024-04-08 (date of creation) + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS + * @prefix DECAN + * + * @brief Header for the driver implementation of the fake CAN to AFE driver. + * @details TODO + */ + +#ifndef FOXBMS__DEBUG_CAN_H_ +#define FOXBMS__DEBUG_CAN_H_ + +/*========== Includes =======================================================*/ +#include "database_cfg.h" + +#include "fstd_types.h" +#include "os.h" + +#include +#include + +/*========== Macros and Definitions =========================================*/ + +/** Maximum queue timeout time in milliseconds */ +#define DECAN_CAN2AFE_QUEUE_TIMEOUT_MS ((TickType_t)0u) + +/** Define the invalid and valid of data */ +#define DECAN_DATA_IS_INVALID (0u) + +/** Define the invalid and valid of data */ +#define DECAN_DATA_IS_VALID (1u) + +/** Handle of the queue to transmit the received can message (cell temperature / cell voltage) to the debug/can afe */ +extern OS_QUEUE ftsk_canToAfeCellTemperaturesQueue; + +/** Handle of the queue to transmit the received can message (cell temperature / cell voltage) to the debug/can afe */ +extern OS_QUEUE ftsk_canToAfeCellVoltagesQueue; + +/*========== Extern Constant and Variable Declarations ======================*/ + +/*========== Extern Function Prototypes =====================================*/ + +/** @brief initialize driver */ +extern STD_RETURN_TYPE_e DECAN_Initialize(void); + +/** @brief afe trigger function */ +extern STD_RETURN_TYPE_e DECAN_TriggerAfe(void); + +/*========== Externalized Static Functions Prototypes (Unit Test) ===========*/ +#ifdef UNITY_UNIT_TEST +extern uint16_t TEST_DECAN_ModifiedModuloFunction(uint16_t a, uint16_t b); +extern void TEST_DECAN_ConvertIndexForVoltage(uint16_t *s, uint16_t *m, uint16_t *cb, uint16_t oneNumIdxOfVoltage); +extern void TEST_DECAN_ConvertIndexForTemperature( + uint16_t *s, + uint16_t *m, + uint16_t *ts, + uint16_t oneNumIdxOfTemperature); +extern STD_RETURN_TYPE_e TEST_DECAN_ReceiveCanCellVoltages(void); +extern STD_RETURN_TYPE_e TEST_DECAN_ReceiveCanCellTemperatures(void); +#endif + +#endif /* FOXBMS__DEBUG_CAN_H_ */ diff --git a/src/app/driver/afe/debug/can/debug_can.json b/src/app/driver/afe/debug/can/debug_can.json new file mode 100644 index 00000000..136b26c4 --- /dev/null +++ b/src/app/driver/afe/debug/can/debug_can.json @@ -0,0 +1,7 @@ +{ + "include": [ + "../../api", + ".", + "api" + ] +} diff --git a/tools/waf-tools/f_git_hooks.py b/src/app/driver/afe/debug/can/wscript old mode 100644 new mode 100755 similarity index 55% rename from tools/waf-tools/f_git_hooks.py rename to src/app/driver/afe/debug/can/wscript index 027beb9c..0bf29c35 --- a/tools/waf-tools/f_git_hooks.py +++ b/src/app/driver/afe/debug/can/wscript @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -38,43 +37,44 @@ # - "This product includes parts of foxBMS®" # - "This product is derived from foxBMS®" -"""Implements a waf tool to configure a git repository to use the foxBMS -specific git hooks. -""" +"""Build Script: ./src/app/driver/afe/debug/can -import os -import shutil -import git -from git.exc import InvalidGitRepositoryError - - -def options(opt): - """Options to enable using the foxBMS git hooks. The hook can either be - globally enabled by defining the environment variable - ``FOXBMS_USE_GIT_HOOKS`` or passing --use-git-hooks during the configure - step.""" - opt.add_option( - "--use-git-hooks", - dest="USE_GIT_HOOKS", - action="store_true", - help="Apply foxBMS git hooks to that repository.", - ) +builds the can-variant of the debug AFE""" +import os -def configure(conf): # pylint: disable=too-many-statements,too-many-branches - """Use foxBMS specific git hooks in that repository.""" - try: - _ = git.Repo(os.path.realpath(__file__)).git_dir - except InvalidGitRepositoryError: - return - # create a VS Code workspace if code is installed on this platform - if not (os.environ.get("FOXBMS_USE_GIT_HOOKS") or conf.options.USE_GIT_HOOKS): - return - conf.start_msg("Applying git hooks.") - hooks = [ - conf.path.find_node(os.path.join("tools", "utils", "git-hooks", "pre-commit")) +def build(bld): + """builds the AFE driver library for Maxim""" + source = [ + os.path.join("api", "debug_can_afe.c"), + os.path.join("api", "debug_can_afe_dma.c"), + os.path.join("debug_can.c"), + ] + includes = [ + os.path.join("..", "..", "..", "config"), + os.path.join("..", "..", "..", "io"), + os.path.join("..", "..", "..", "spi"), + os.path.join("..", "..", "..", "ts"), + os.path.join("..", "..", "..", "ts", "api"), + os.path.join("..", "..", "..", "mcu"), + os.path.join("..", "..", "..", "rtc"), + os.path.join("..", "..", "..", "can", "cbs"), + os.path.join("..", "..", "..", "..", "application", "config"), + os.path.join("..", "..", "..", "..", "main", "include"), + os.path.join("..", "..", "..", "..", "engine", "config"), + os.path.join("..", "..", "..", "..", "engine", "database"), + os.path.join("..", "..", "..", "..", "task", "os"), + os.path.join("..", "..", "..", "..", "task", "ftask"), + os.path.join("..", "..", "..", "..", "task", "config"), ] - for i in hooks: - shutil.copyfile(i.abspath(), os.path.join(".git", "hooks", i.name)) - conf.end_msg("ok") + includes.extend(bld.env.INCLUDES_AFE) + includes.extend(bld.env.INCLUDES_RTOS) + cflags = bld.env.CFLAGS_FOXBMS + target = f"{bld.env.APPNAME.lower()}-afe-driver" + bld.stlib( + source=source, + includes=includes, + cflags=cflags, + target=target, + ) diff --git a/src/app/driver/afe/debug/default/api/debug_default_afe.c b/src/app/driver/afe/debug/default/api/debug_default_afe.c index 37bec927..e8e0ce99 100644 --- a/src/app/driver/afe/debug/default/api/debug_default_afe.c +++ b/src/app/driver/afe/debug/default/api/debug_default_afe.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,12 +43,13 @@ * @file debug_default_afe.c * @author foxBMS Team * @date 2020-09-17 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup DRIVER + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS * @prefix FAKE * * @brief Implementation of the fake AFE driver + * @details TODO */ /*========== Includes =======================================================*/ diff --git a/src/app/driver/afe/debug/default/api/debug_default_afe_dma.c b/src/app/driver/afe/debug/default/api/debug_default_afe_dma.c index 3fb93b48..2dcb76fe 100644 --- a/src/app/driver/afe/debug/default/api/debug_default_afe_dma.c +++ b/src/app/driver/afe/debug/default/api/debug_default_afe_dma.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file debug_default_afe_dma.c * @author foxBMS Team * @date 2020-09-17 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix FAKE * * @brief Driver for the DMA module for the fake driver. - * + * @details TODO */ /*========== Includes =======================================================*/ diff --git a/src/app/driver/afe/debug/default/debug_default.c b/src/app/driver/afe/debug/default/debug_default.c index 8fcab6bf..e6edc6a5 100644 --- a/src/app/driver/afe/debug/default/debug_default.c +++ b/src/app/driver/afe/debug/default/debug_default.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file debug_default.c * @author foxBMS Team * @date 2020-09-17 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup DRIVER + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS * @prefix FAKE * * @brief Driver implementation for the fake AFE - * + * @details TODO */ /*========== Includes =======================================================*/ @@ -175,7 +175,6 @@ static void FAKE_SetSubstate(FAKE_STATE_s *pFakeState, FAKE_FSM_SUBSTATES_e next /** * @brief Sets the indicator that one full measurement cycles was successful * @param pFakeState state of the fake state machine - * @return true if it is a reentrance, false otherwise */ static void FAKE_SetFirstMeasurementCycleFinished(FAKE_STATE_s *pFakeState); @@ -297,8 +296,10 @@ static void FAKE_SetFirstMeasurementCycleFinished(FAKE_STATE_s *pFakeState) { } pFakeState->data.balancingFeedback->state = 0; - for (uint16_t cb = 0u; cb < BS_NR_OF_CELL_BLOCKS_PER_STRING; cb++) { - pFakeState->data.balancingControl->balancingState[s][cb] = 0u; + for (uint8_t m = 0u; m < BS_NR_OF_MODULES_PER_STRING; m++) { + for (uint16_t cb = 0u; cb < BS_NR_OF_CELL_BLOCKS_PER_MODULE; cb++) { + pFakeState->data.balancingControl->activateBalancing[s][m][cb] = false; + } } pFakeState->data.balancingControl->nrBalancedCells[s] = 0u; for (uint8_t m = 0u; m < BS_NR_OF_MODULES_PER_STRING; m++) { diff --git a/src/app/driver/afe/debug/default/debug_default.h b/src/app/driver/afe/debug/default/debug_default.h index b53f5300..dccd60f4 100644 --- a/src/app/driver/afe/debug/default/debug_default.h +++ b/src/app/driver/afe/debug/default/debug_default.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file debug_default.h * @author foxBMS Team * @date 2020-09-17 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix FAKE * * @brief Header for the driver of the fake AFE driver - * + * @details TODO */ #ifndef FOXBMS__DEBUG_DEFAULT_H_ @@ -81,7 +81,8 @@ typedef enum { FAKE_FSM_SUBSTATE_DUMMY, /*!< dummy state - always the first substate */ FAKE_FSM_SUBSTATE_ENTRY, /*!< entry state - always the second substate */ FAKE_FSM_SUBSTATE_INITIALIZATION_FINISH_FIRST_MEASUREMENT, /*!< finish the first fake measurement */ - FAKE_FSM_SUBSTATE_INITIALIZATION_FIRST_MEASUREMENT_FINISHED, /*!< cleanup substate after the first fake measurement */ + FAKE_FSM_SUBSTATE_INITIALIZATION_FIRST_MEASUREMENT_FINISHED, /*!< cleanup substate after the first fake measurement + */ FAKE_FSM_SUBSTATE_INITIALIZATION_EXIT, /*!< last initialization substate */ FAKE_FSM_SUBSTATE_RUNNING_SAVE_VOLTAGE_MEASUREMENT_DATA, /*!< state to continuously save the measurement data */ FAKE_FSM_SUBSTATE_RUNNING_SAVE_TEMPERATURE_MEASUREMENT_DATA, /*!< state to continuously save the measurement data */ diff --git a/src/app/driver/afe/debug/default/debug_default.json b/src/app/driver/afe/debug/default/debug_default.json index d563cd5b..136b26c4 100644 --- a/src/app/driver/afe/debug/default/debug_default.json +++ b/src/app/driver/afe/debug/default/debug_default.json @@ -1,7 +1,7 @@ { - "include": [ - "../../api", - ".", - "api" - ] + "include": [ + "../../api", + ".", + "api" + ] } diff --git a/src/app/driver/afe/debug/default/wscript b/src/app/driver/afe/debug/default/wscript old mode 100644 new mode 100755 index 05f29a0a..5e3aaff0 --- a/src/app/driver/afe/debug/default/wscript +++ b/src/app/driver/afe/debug/default/wscript @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause diff --git a/src/app/driver/afe/debug/wscript b/src/app/driver/afe/debug/wscript old mode 100644 new mode 100755 index d6568464..37be8fcd --- a/src/app/driver/afe/debug/wscript +++ b/src/app/driver/afe/debug/wscript @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause diff --git a/src/app/driver/afe/ltc/6804-1/wscript b/src/app/driver/afe/ltc/6804-1/wscript old mode 100644 new mode 100755 index 0b11491f..e0ce1633 --- a/src/app/driver/afe/ltc/6804-1/wscript +++ b/src/app/driver/afe/ltc/6804-1/wscript @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause diff --git a/src/app/driver/afe/ltc/6806/config/ltc_6806_cfg.c b/src/app/driver/afe/ltc/6806/config/ltc_6806_cfg.c index 55d007ba..d8c8aa8d 100644 --- a/src/app/driver/afe/ltc/6806/config/ltc_6806_cfg.c +++ b/src/app/driver/afe/ltc/6806/config/ltc_6806_cfg.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file ltc_6806_cfg.c * @author foxBMS Team * @date 2015-02-18 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS_CONFIGURATION * @prefix LTC * * @brief Configuration for the LTC analog front-end - * + * @details TODO */ /*========== Includes =======================================================*/ diff --git a/src/app/driver/afe/ltc/6806/config/ltc_6806_cfg.h b/src/app/driver/afe/ltc/6806/config/ltc_6806_cfg.h index 065fc0bf..af4a5d18 100644 --- a/src/app/driver/afe/ltc/6806/config/ltc_6806_cfg.h +++ b/src/app/driver/afe/ltc/6806/config/ltc_6806_cfg.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file ltc_6806_cfg.h * @author foxBMS Team * @date 2015-02-18 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS_CONFIGURATION * @prefix LTC * * @brief Header for the configuration for the LTC 6806 monitoring IC - * + * @details TODO */ #ifndef FOXBMS__LTC_6806_CFG_H_ @@ -114,6 +114,9 @@ /** Number of LTC-ICs per battery module */ #define LTC_NUMBER_OF_LTC_PER_MODULE (1u) +/** Number of LTC cell voltages to be read per register */ +#define LTC_NUMBER_OF_CELL_VOLTAGES_PER_REGISTER (4u) + /** * Voltage measurement range for fuel cells * LSB = 1.5 mV if HIRNG = 0u @@ -128,7 +131,7 @@ #define LTC_ADOW_THRESHOLD (-200) /** - * Measurement modus for voltages, possible values: + * Measurement mode for voltages, possible values: * - LTC_ADCMODE_NORMAL_DCP0 * - LTC_ADCMODE_FILTERED_DCP0 * - LTC_ADCMODE_FAST_DCP0 @@ -136,7 +139,7 @@ #define LTC_VOLTAGE_MEASUREMENT_MODE (LTC_ADCMODE_NORMAL_DCP0) /** - * Measurement modus for GPIOs, possible values: + * Measurement mode for GPIOs, possible values: * - LTC_ADCMODE_NORMAL_DCP0 * - LTC_ADCMODE_FILTERED_DCP0 * - LTC_ADCMODE_FAST_DCP0 @@ -144,7 +147,7 @@ #define LTC_GPIO_MEASUREMENT_MODE (LTC_ADCMODE_NORMAL_DCP0) /** - * Measurement modus for Open-wire check, possible values: + * Measurement mode for Open-wire check, possible values: * - LTC_ADCMODE_NORMAL_DCP0 * - LTC_ADCMODE_FILTERED_DCP0 */ @@ -237,21 +240,15 @@ #define LTC_STATEMACH_MEAS_SINGLE_FILTERED_TCYCLE (35) /** LTC state machine sequence error timing in ms */ -#define LTC_STATEMACH_SEQERRTTIME (5) +#define LTC_STATEMACH_SEQ_ERR_TIME (5) /** LTC state machine CRC-transmission error timing in ms */ -#define LTC_STATEMACH_PECERRTIME (1) +#define LTC_STATEMACH_PEC_ERR_TIME (1) /** * Maximum number of re-tries in case of CRC error during the communication with daisy chain * before going into error state */ -#define LTC_TRANSMIT_PECERRLIMIT (10) - -/** - * Maximum number of re-tries in case of SPI error during the communication with daisy chain - * before going into error state - */ -#define LTC_TRANSMIT_SPIERRLIMIT (3) +#define LTC_TRANSMIT_PEC_ERR_LIMIT (10) /** If set to 1, check if multiplexers acknowledged transmission */ #define LTC_READCOM (0) @@ -270,7 +267,7 @@ * | C | 1.5+(C/10nF) | 2 | | | * +----------------+--------------+---------------+----------+----------+ */ -#define LTC_NMBR_REQ_ADOW_COMMANDS (2) +#define LTC_NUMBER_REQ_ADOW_COMMANDS (2) /** * Transmit functions @@ -295,7 +292,7 @@ * sensors by default. * Lookup table between temperature sensors and battery cells */ -extern const uint8_t ltc_muxsensortemperatur_cfg[BS_NR_OF_TEMP_SENSORS_PER_MODULE]; +extern const uint8_t ltc_muxSensorTemperature_cfg[BS_NR_OF_TEMP_SENSORS_PER_MODULE]; /** Lookup table to indicate which voltage inputs are used */ extern const uint8_t ltc_voltage_input_used[LTC_6806_MAX_SUPPORTED_CELLS]; diff --git a/src/app/driver/afe/ltc/6806/ltc_6806.c b/src/app/driver/afe/ltc/6806/ltc_6806.c index 8acfd335..f4b313fc 100644 --- a/src/app/driver/afe/ltc/6806/ltc_6806.c +++ b/src/app/driver/afe/ltc/6806/ltc_6806.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file ltc_6806.c * @author foxBMS Team * @date 2019-09-01 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix LTC * * @brief Driver for the LTC analog front-end. - * + * @details TODO */ /*========== Includes =======================================================*/ @@ -94,12 +94,12 @@ /** * Value for positive full scale measurement for fuel cell */ -#define LTC_FUELCELL_POSITIVE_FULLSCALE_RANGE_mV ((int16_t)((0x7FF * LTC_FUEL_CELL_LSB_RESOLUTION_mV))) +#define LTC_FUELCELL_POSITIVE_FULL_SCALE_RANGE_mV ((int16_t)((0x7FF * LTC_FUEL_CELL_LSB_RESOLUTION_mV))) /** * Value for negative full scale measurement for fuel cell */ -#define LTC_FUELCELL_NEGATIVE_FULLSCALE_RANGE_mV \ +#define LTC_FUELCELL_NEGATIVE_FULL_SCALE_RANGE_mV \ ((int16_t)((((~0x001) + 1) & 0x7FF) * (-LTC_FUEL_CELL_LSB_RESOLUTION_mV))) /*========== Static Constant and Variable Definitions =======================*/ @@ -120,8 +120,8 @@ static uint16_t ltc_used_cells_index[BS_NR_OF_STRINGS] = {0}; /** local copies of database tables */ /**@{*/ static DATA_BLOCK_CELL_VOLTAGE_s ltc_cellVoltage = {.header.uniqueId = DATA_BLOCK_ID_CELL_VOLTAGE_BASE}; -static DATA_BLOCK_CELL_TEMPERATURE_s ltc_celltemperature = {.header.uniqueId = DATA_BLOCK_ID_CELL_TEMPERATURE_BASE}; -static DATA_BLOCK_ALL_GPIO_VOLTAGES_s ltc_allgpiovoltage = {.header.uniqueId = DATA_BLOCK_ID_ALL_GPIO_VOLTAGES_BASE}; +static DATA_BLOCK_CELL_TEMPERATURE_s ltc_cellTemperature = {.header.uniqueId = DATA_BLOCK_ID_CELL_TEMPERATURE_BASE}; +static DATA_BLOCK_ALL_GPIO_VOLTAGES_s ltc_allGpioVoltage = {.header.uniqueId = DATA_BLOCK_ID_ALL_GPIO_VOLTAGES_BASE}; static DATA_BLOCK_OPEN_WIRE_s ltc_openWire = {.header.uniqueId = DATA_BLOCK_ID_OPEN_WIRE_BASE}; /**@}*/ /** stores information on the detected open wires locally */ @@ -141,11 +141,11 @@ LTC_STATE_s ltc_stateBase = { .statereq = {.request = LTC_STATE_NO_REQUEST, .string = 0xFFu}, .state = LTC_STATEMACH_UNINITIALIZED, .substate = 0, - .laststate = LTC_STATEMACH_UNINITIALIZED, - .lastsubstate = 0, - .adcModereq = LTC_ADCMODE_FAST_DCP0, + .lastState = LTC_STATEMACH_UNINITIALIZED, + .lastSubstate = 0, + .adcModeRequest = LTC_ADCMODE_FAST_DCP0, .adcMode = LTC_ADCMODE_FAST_DCP0, - .adcMeasChreq = LTC_ADCMEAS_UNDEFINED, + .adcMeasChannelRequest = LTC_ADCMEAS_UNDEFINED, .adcMeasCh = LTC_ADCMEAS_UNDEFINED, .numberOfMeasuredMux = 32, .triggerentry = 0, @@ -170,13 +170,13 @@ LTC_STATE_s ltc_stateBase = { .ltcData.rxBuffer = ltc_RxPecBuffer, .ltcData.frameLength = LTC_N_BYTES_FOR_DATA_TRANSMISSION, .ltcData.cellVoltage = <c_cellVoltage, - .ltcData.cellTemperature = <c_celltemperature, + .ltcData.cellTemperature = <c_cellTemperature, .ltcData.balancingFeedback = NULL_PTR, .ltcData.balancingControl = NULL_PTR, .ltcData.slaveControl = NULL_PTR, .ltcData.openWireDetection = <c_openWireDetection, .ltcData.errorTable = <c_errorTable, - .ltcData.allGpioVoltages = <c_allgpiovoltage, + .ltcData.allGpioVoltages = <c_allGpioVoltage, .ltcData.openWire = <c_openWire, .ltcData.usedCellIndex = ltc_used_cells_index, .currentString = 0u, @@ -216,16 +216,20 @@ static uint16_t ltc_cmdADCV_normal_Fuelcell[4] = {0x04, 0x40, 0xED, 0xB0}; /*!< /* static uint16_t ltc_cmdADAX_normal_GPIO3[4] = {0x05, 0x63, 0xC5, 0xC4}; !< Single channel, GPIO 3, normal mode */ /* static uint16_t ltc_cmdADAX_filtered_GPIO3[4] = {0x05, 0xE3, 0x81, 0xE2}; !< Single channel, GPIO 3, filtered mode */ /* static uint16_t ltc_cmdADAX_fast_GPIO3[4] = {0x04, 0xE3, 0x09, 0xAE}; !< Single channel, GPIO 3, fast mode */ -/* static uint16_t ltc_cmdADAX_normal_GPIO4[4] = {0x05, 0x64, 0x62, 0x3E}; !< Single channel, GPIO 4, normal mode */ -/* static uint16_t ltc_cmdADAX_filtered_GPIO4[4] = {0x05, 0xE4, 0x26, 0x18}; !< Single channel, GPIO 4, filtered mode */ -/* static uint16_t ltc_cmdADAX_fast_GPIO4[4] = {0x04, 0xE4, 0xAE, 0x54}; !< Single channel, GPIO 4, fast mode */ -/* static uint16_t ltc_cmdADAX_normal_GPIO5[4] = {0x05, 0x65, 0xE9, 0x0C}; !< Single channel, GPIO 5, normal mode */ -/* static uint16_t ltc_cmdADAX_filtered_GPIO5[4] = {0x05, 0xE5, 0xAD, 0x2A}; !< Single channel, GPIO 5, filtered mode */ -/* static uint16_t ltc_cmdADAX_fast_GPIO5[4] = {0x04, 0xE5, 0x25, 0x66}; !< Single channel, GPIO 5, fast mode */ -/* static uint16_t ltc_cmdADAX_normal_ALLGPIOS[4] = {0x05, 0x60, 0xD3, 0xA0}; !< All channels, normal mode */ -/* static uint16_t ltc_cmdADAX_filtered_ALLGPIOS[4] = +/* static uint16_t ltc_cmdADAX_normal_GPIO4[4] = {0x05, 0x64, 0x62, 0x3E}; !< Single channel, GPIO 4, normal mode + */ +/* static uint16_t ltc_cmdADAX_filtered_GPIO4[4] = {0x05, 0xE4, 0x26, 0x18}; !< Single channel, GPIO 4, filtered mode + */ +/* static uint16_t ltc_cmdADAX_fast_GPIO4[4] = {0x04, 0xE4, 0xAE, 0x54}; !< Single channel, GPIO 4, fast mode */ +/* static uint16_t ltc_cmdADAX_normal_GPIO5[4] = {0x05, 0x65, 0xE9, 0x0C}; !< Single channel, GPIO 5, normal mode + */ +/* static uint16_t ltc_cmdADAX_filtered_GPIO5[4] = {0x05, 0xE5, 0xAD, 0x2A}; !< Single channel, GPIO 5, filtered mode + */ +/* static uint16_t ltc_cmdADAX_fast_GPIO5[4] = {0x04, 0xE5, 0x25, 0x66}; !< Single channel, GPIO 5, fast mode */ +/* static uint16_t ltc_cmdADAX_normal_ALL_GPIOS[4] = {0x05, 0x60, 0xD3, 0xA0}; !< All channels, normal mode */ +/* static uint16_t ltc_cmdADAX_filtered_ALL_GPIOS[4] = {0x05, 0xE0, 0x97, 0x86}; !< All channels, filtered mode */ -/* static uint16_t ltc_cmdADAX_fast_ALLGPIOS[4] = {0x04, 0xE0, 0x1F, 0xCA}; !< All channels, fast mode */ +/* static uint16_t ltc_cmdADAX_fast_ALL_GPIOS[4] = {0x04, 0xE0, 0x1F, 0xCA}; !< All channels, fast mode */ /* Open-wire */ static uint16_t ltc_BC_cmdADOW_PUP_100ms_fuelcell[4] = @@ -265,7 +269,7 @@ static STD_RETURN_TYPE_e LTC_StartOpenWireMeasurement( LTC_ADCMODE_e adcMode, uint8_t PUP); -static void LTC_SaveRXtoVoltagebuffer_Fuelcell( +static void LTC_SaveRXToVoltageBuffer_Fuelcell( LTC_STATE_s *ltc_state, uint16_t *pRxBuff, uint8_t registerSet, @@ -338,8 +342,8 @@ static void LTC_InitializeDatabase(LTC_STATE_s *ltc_state) { * @param ltc_state: state of the ltc state machine */ static void LTC_SaveLastStates(LTC_STATE_s *ltc_state) { - ltc_state->laststate = ltc_state->state; - ltc_state->lastsubstate = ltc_state->substate; + ltc_state->lastState = ltc_state->state; + ltc_state->lastSubstate = ltc_state->substate; } /** @@ -415,16 +419,16 @@ extern void LTC_SaveVoltages(LTC_STATE_s *ltc_state, uint8_t stringNumber) { for (uint8_t m = 0u; m < BS_NR_OF_MODULES_PER_STRING; m++) { for (uint8_t cb = 0u; cb < BS_NR_OF_CELL_BLOCKS_PER_MODULE; cb++) { /* ------- 1. Check open-wires ----------------- - * Is cell N input not open wire && - * Is cell N+1 input not open wire && - * Is cell voltage valid because of previous PEC error - * If so, everything okay, else set cell voltage measurement to invalid. - */ + * Is cell N input not open wire && + * Is cell N+1 input not open wire && + * Is cell voltage valid because of previous PEC error + * If so, everything okay, else set cell voltage measurement to invalid. + */ if ((ltc_state->ltcData.openWire ->openWire[stringNumber][(m * (BS_NR_OF_CELL_BLOCKS_PER_MODULE + 1u)) + cb] == 0u) && (ltc_state->ltcData.openWire ->openWire[stringNumber][(m * (BS_NR_OF_CELL_BLOCKS_PER_MODULE + 1u)) + cb + 1u] == 0u) && - ((ltc_state->ltcData.cellVoltage->invalidCellVoltage[stringNumber][m] & (0x01u << cb)) == 0u)) { + (ltc_state->ltcData.cellVoltage->invalidCellVoltage[stringNumber][m][cb] == false)) { /* Cell voltage is valid -> perform minimum/maximum plausibility check */ /* ------- 2. Perform minimum/maximum measurement range check ---------- */ @@ -437,13 +441,13 @@ extern void LTC_SaveVoltages(LTC_STATE_s *ltc_state, uint8_t stringNumber) { numberValidMeasurements++; } else { /* Invalidate cell voltage measurement */ - ltc_state->ltcData.cellVoltage->invalidCellVoltage[stringNumber][m] |= (0x01uLL << cb); - cellVoltageMeasurementValid = STD_NOT_OK; + ltc_state->ltcData.cellVoltage->invalidCellVoltage[stringNumber][m][cb] = true; + cellVoltageMeasurementValid = STD_NOT_OK; } } else { /* Set cell voltage measurement value invalid, if not already invalid because of PEC Error */ - ltc_state->ltcData.cellVoltage->invalidCellVoltage[stringNumber][m] |= (0x01uLL << cb); - cellVoltageMeasurementValid = STD_NOT_OK; + ltc_state->ltcData.cellVoltage->invalidCellVoltage[stringNumber][m][cb] = true; + cellVoltageMeasurementValid = STD_NOT_OK; } } } @@ -463,10 +467,10 @@ extern void LTC_SaveTemperatures(LTC_STATE_s *ltc_state, uint8_t stringNumber) { for (uint8_t m = 0u; m < BS_NR_OF_MODULES_PER_STRING; m++) { for (uint8_t ts = 0u; ts < BS_NR_OF_TEMP_SENSORS_PER_MODULE; ts++) { /* ------- 1. Check valid flag ----------------- - * Is cell temperature valid because of previous PEC error - * If so, everything okay, else set cell temperature measurement to invalid. - */ - if ((ltc_state->ltcData.cellTemperature->invalidCellTemperature[stringNumber][m] & (0x01u << ts)) == 0u) { + * Is cell temperature valid because of previous PEC error + * If so, everything okay, else set cell temperature measurement to invalid. + */ + if (ltc_state->ltcData.cellTemperature->invalidCellTemperature[stringNumber][m][ts] == false) { /* Cell temperature is valid -> perform minimum/maximum plausibility check */ /* ------- 2. Perform minimum/maximum measurement range check ---------- */ @@ -475,8 +479,8 @@ extern void LTC_SaveTemperatures(LTC_STATE_s *ltc_state, uint8_t stringNumber) { numberValidMeasurements++; } else { /* Invalidate cell temperature measurement */ - ltc_state->ltcData.cellTemperature->invalidCellTemperature[stringNumber][m] |= (0x01u << ts); - cellTemperatureMeasurementValid = STD_NOT_OK; + ltc_state->ltcData.cellTemperature->invalidCellTemperature[stringNumber][m][ts] = true; + cellTemperatureMeasurementValid = STD_NOT_OK; } } else { /* Already invalid because of PEC Error */ @@ -496,7 +500,7 @@ extern void LTC_SaveTemperatures(LTC_STATE_s *ltc_state, uint8_t stringNumber) { * @brief stores the measured GPIOs in the database. * * This function loops through the data of all modules in the LTC daisy-chain that are - * stored in the ltc_allgpiovoltage buffer and writes them in the database. + * stored in the ltc_AllGpioVoltage buffer and writes them in the database. * At each write iteration, the variable named "state" and related to voltages in the * database is incremented. * @@ -576,7 +580,7 @@ extern LTC_STATEMACH_e LTC_GetState(LTC_STATE_s *ltc_state) { * * @param ltc_state state of the ltc state machine * @param pBusIDptr bus ID, main or backup (deprecated) - * @param pAdcModeptr LTC ADCmeasurement mode (fast, normal or filtered) + * @param pAdcModeptr LTC ADCMeasurement mode (fast, normal or filtered) * @param pAdcMeasChptr number of channels measured for GPIOS (one at a time for multiplexers or all five GPIOs) * * @return retVal current state request, taken from LTC_STATE_REQUEST_e @@ -593,8 +597,8 @@ LTC_REQUEST_s LTC_TransferStateRequest( retval.request = ltc_state->statereq.request; retval.string = ltc_state->statereq.string; ltc_state->requestedString = ltc_state->statereq.string; - *pAdcModeptr = ltc_state->adcModereq; - *pAdcMeasChptr = ltc_state->adcMeasChreq; + *pAdcModeptr = ltc_state->adcModeRequest; + *pAdcMeasChptr = ltc_state->adcMeasChannelRequest; ltc_state->statereq.request = LTC_STATE_NO_REQUEST; ltc_state->statereq.string = 0x0u; OS_ExitTaskCritical(); @@ -719,7 +723,7 @@ void LTC_Trigger(LTC_STATE_s *ltc_state) { ltc_state->ltcData.txBuffer, ltc_state->ltcData.rxBuffer, ltc_state->ltcData.frameLength); /* Initialize main LTC loop */ - ltc_state->lastsubstate = ltc_state->substate; + ltc_state->lastSubstate = ltc_state->substate; DIAG_CheckEvent(retVal, DIAG_ID_AFE_SPI, DIAG_STRING, ltc_state->currentString); LTC_StateTransition( ltc_state, @@ -765,7 +769,7 @@ void LTC_Trigger(LTC_STATE_s *ltc_state) { case LTC_STATEMACH_STARTMEAS: ltc_state->adcMode = LTC_VOLTAGE_MEASUREMENT_MODE; - ltc_state->adcMeasCh = LTC_ADCMEAS_ALLCHANNEL_CELLS; + ltc_state->adcMeasCh = LTC_ADCMEAS_ALL_CHANNEL_CELLS; ltc_state->spiSeqPtr = ltc_state->ltcData.pSpiInterface; ltc_state->spiNumberInterfaces = BS_NR_OF_STRINGS; @@ -793,7 +797,7 @@ void LTC_Trigger(LTC_STATE_s *ltc_state) { case LTC_STATEMACH_STARTMEAS_CONTINUE: ltc_state->adcMode = LTC_VOLTAGE_MEASUREMENT_MODE; - ltc_state->adcMeasCh = LTC_ADCMEAS_ALLCHANNEL_CELLS; + ltc_state->adcMeasCh = LTC_ADCMEAS_ALL_CHANNEL_CELLS; ltc_state->check_spi_flag = STD_NOT_OK; retVal = LTC_StartVoltageMeasurement(ltc_state->spiSeqPtr, ltc_state->adcMode, ltc_state->adcMeasCh); @@ -837,7 +841,7 @@ void LTC_Trigger(LTC_STATE_s *ltc_state) { } else if (ltc_state->substate == LTC_READ_VOLTAGE_REGISTER_B_RDCVB_READVOLTAGE) { retVal = LTC_CheckPec(ltc_state, ltc_state->ltcData.rxBuffer, ltc_state->currentString); DIAG_CheckEvent(retVal, DIAG_ID_AFE_COM_INTEGRITY, DIAG_STRING, ltc_state->currentString); - LTC_SaveRXtoVoltagebuffer_Fuelcell( + LTC_SaveRXToVoltageBuffer_Fuelcell( ltc_state, ltc_state->ltcData.rxBuffer, 0u, ltc_state->currentString); AFE_SetTransmitOngoing(ltc_state); @@ -861,7 +865,7 @@ void LTC_Trigger(LTC_STATE_s *ltc_state) { } else if (ltc_state->substate == LTC_READ_VOLTAGE_REGISTER_C_RDCVC_READVOLTAGE) { retVal = LTC_CheckPec(ltc_state, ltc_state->ltcData.rxBuffer, ltc_state->currentString); DIAG_CheckEvent(retVal, DIAG_ID_AFE_COM_INTEGRITY, DIAG_STRING, ltc_state->currentString); - LTC_SaveRXtoVoltagebuffer_Fuelcell( + LTC_SaveRXToVoltageBuffer_Fuelcell( ltc_state, ltc_state->ltcData.rxBuffer, 1u, ltc_state->currentString); AFE_SetTransmitOngoing(ltc_state); @@ -885,7 +889,7 @@ void LTC_Trigger(LTC_STATE_s *ltc_state) { } else if (ltc_state->substate == LTC_READ_VOLTAGE_REGISTER_D_RDCVD_READVOLTAGE) { retVal = LTC_CheckPec(ltc_state, ltc_state->ltcData.rxBuffer, ltc_state->currentString); DIAG_CheckEvent(retVal, DIAG_ID_AFE_COM_INTEGRITY, DIAG_STRING, ltc_state->currentString); - LTC_SaveRXtoVoltagebuffer_Fuelcell( + LTC_SaveRXToVoltageBuffer_Fuelcell( ltc_state, ltc_state->ltcData.rxBuffer, 2u, ltc_state->currentString); AFE_SetTransmitOngoing(ltc_state); @@ -909,7 +913,7 @@ void LTC_Trigger(LTC_STATE_s *ltc_state) { } else if (ltc_state->substate == LTC_READ_VOLTAGE_REGISTER_E_RDCVE_READVOLTAGE) { retVal = LTC_CheckPec(ltc_state, ltc_state->ltcData.rxBuffer, ltc_state->currentString); DIAG_CheckEvent(retVal, DIAG_ID_AFE_COM_INTEGRITY, DIAG_STRING, ltc_state->currentString); - LTC_SaveRXtoVoltagebuffer_Fuelcell( + LTC_SaveRXToVoltageBuffer_Fuelcell( ltc_state, ltc_state->ltcData.rxBuffer, 3u, ltc_state->currentString); AFE_SetTransmitOngoing(ltc_state); @@ -933,7 +937,7 @@ void LTC_Trigger(LTC_STATE_s *ltc_state) { } else if (ltc_state->substate == LTC_READ_VOLTAGE_REGISTER_F_RDCVF_READVOLTAGE) { retVal = LTC_CheckPec(ltc_state, ltc_state->ltcData.rxBuffer, ltc_state->currentString); DIAG_CheckEvent(retVal, DIAG_ID_AFE_COM_INTEGRITY, DIAG_STRING, ltc_state->currentString); - LTC_SaveRXtoVoltagebuffer_Fuelcell( + LTC_SaveRXToVoltageBuffer_Fuelcell( ltc_state, ltc_state->ltcData.rxBuffer, 4u, ltc_state->currentString); AFE_SetTransmitOngoing(ltc_state); @@ -957,7 +961,7 @@ void LTC_Trigger(LTC_STATE_s *ltc_state) { } else if (ltc_state->substate == LTC_READ_VOLTAGE_REGISTER_G_RDCVG_READVOLTAGE) { retVal = LTC_CheckPec(ltc_state, ltc_state->ltcData.rxBuffer, ltc_state->currentString); DIAG_CheckEvent(retVal, DIAG_ID_AFE_COM_INTEGRITY, DIAG_STRING, ltc_state->currentString); - LTC_SaveRXtoVoltagebuffer_Fuelcell( + LTC_SaveRXToVoltageBuffer_Fuelcell( ltc_state, ltc_state->ltcData.rxBuffer, 5u, ltc_state->currentString); AFE_SetTransmitOngoing(ltc_state); @@ -981,7 +985,7 @@ void LTC_Trigger(LTC_STATE_s *ltc_state) { } else if (ltc_state->substate == LTC_READ_VOLTAGE_REGISTER_H_RDCVH_READVOLTAGE) { retVal = LTC_CheckPec(ltc_state, ltc_state->ltcData.rxBuffer, ltc_state->currentString); DIAG_CheckEvent(retVal, DIAG_ID_AFE_COM_INTEGRITY, DIAG_STRING, ltc_state->currentString); - LTC_SaveRXtoVoltagebuffer_Fuelcell( + LTC_SaveRXToVoltageBuffer_Fuelcell( ltc_state, ltc_state->ltcData.rxBuffer, 6u, ltc_state->currentString); AFE_SetTransmitOngoing(ltc_state); @@ -1005,7 +1009,7 @@ void LTC_Trigger(LTC_STATE_s *ltc_state) { } else if (ltc_state->substate == LTC_READ_VOLTAGE_REGISTER_I_RDCVI_READVOLTAGE) { retVal = LTC_CheckPec(ltc_state, ltc_state->ltcData.rxBuffer, ltc_state->currentString); DIAG_CheckEvent(retVal, DIAG_ID_AFE_COM_INTEGRITY, DIAG_STRING, ltc_state->currentString); - LTC_SaveRXtoVoltagebuffer_Fuelcell( + LTC_SaveRXToVoltageBuffer_Fuelcell( ltc_state, ltc_state->ltcData.rxBuffer, 7u, ltc_state->currentString); AFE_SetTransmitOngoing(ltc_state); @@ -1029,11 +1033,11 @@ void LTC_Trigger(LTC_STATE_s *ltc_state) { } else if (ltc_state->substate == LTC_EXIT_READVOLTAGE) { retVal = LTC_CheckPec(ltc_state, ltc_state->ltcData.rxBuffer, ltc_state->currentString); DIAG_CheckEvent(retVal, DIAG_ID_AFE_COM_INTEGRITY, DIAG_STRING, ltc_state->currentString); - LTC_SaveRXtoVoltagebuffer_Fuelcell( + LTC_SaveRXToVoltageBuffer_Fuelcell( ltc_state, ltc_state->ltcData.rxBuffer, 8u, ltc_state->currentString); /* Switch to different state if read voltage state is reused - * e.g. open-wire check... */ + * e.g. open-wire check... */ if (ltc_state->reusageMeasurementMode == LTC_NOT_REUSED) { LTC_SaveVoltages(ltc_state, ltc_state->currentString); @@ -1048,9 +1052,10 @@ void LTC_Trigger(LTC_STATE_s *ltc_state) { if (statereq.string < BS_NR_OF_STRINGS) { ltc_state->spiSeqPtr = ltc_state->ltcData.pSpiInterface + statereq.string; ltc_state->requestedString = statereq.string; - /* This is necessary because the state machine will go through read voltage measurement registers */ + /* This is necessary because the state machine will go through read voltage + * measurement registers */ ltc_state->currentString = statereq.string; - ltc_state->resendCommandCounter = LTC_NMBR_REQ_ADOW_COMMANDS; + ltc_state->resendCommandCounter = LTC_NUMBER_REQ_ADOW_COMMANDS; LTC_StateTransition( ltc_state, LTC_STATEMACH_OPENWIRE_CHECK, @@ -1067,13 +1072,13 @@ void LTC_Trigger(LTC_STATE_s *ltc_state) { ltc_state, LTC_STATEMACH_STARTMEAS_CONTINUE, LTC_ENTRY, LTC_STATEMACH_SHORTTIME); ltc_state->check_spi_flag = STD_NOT_OK; } - } else if (ltc_state->reusageMeasurementMode == LTC_REUSE_READVOLT_FOR_ADOW_PUP) { + } else if (ltc_state->reusageMeasurementMode == LTC_REUSE_READVOLTAGE_FOR_ADOW_PUP) { LTC_StateTransition( ltc_state, LTC_STATEMACH_OPENWIRE_CHECK, LTC_READ_VOLTAGES_PULLUP_OPENWIRE_CHECK, LTC_STATEMACH_SHORTTIME); - } else if (ltc_state->reusageMeasurementMode == LTC_REUSE_READVOLT_FOR_ADOW_PDOWN) { + } else if (ltc_state->reusageMeasurementMode == LTC_REUSE_READVOLTAGE_FOR_ADOW_PDOWN) { LTC_StateTransition( ltc_state, LTC_STATEMACH_OPENWIRE_CHECK, @@ -1113,7 +1118,7 @@ void LTC_Trigger(LTC_STATE_s *ltc_state) { (ltc_state->commandDataTransferTime + LTC_FUEL_CELL_ADOW_TIME_MS)); /* Reuse read voltage register */ - ltc_state->reusageMeasurementMode = LTC_REUSE_READVOLT_FOR_ADOW_PUP; + ltc_state->reusageMeasurementMode = LTC_REUSE_READVOLTAGE_FOR_ADOW_PUP; } } else { DIAG_Handler(DIAG_ID_AFE_SPI, DIAG_EVENT_NOT_OK, DIAG_STRING, ltc_state->requestedString); @@ -1134,7 +1139,7 @@ void LTC_Trigger(LTC_STATE_s *ltc_state) { } /* Set number of ADOW retries - send ADOW command with pull-down two times */ - ltc_state->resendCommandCounter = LTC_NMBR_REQ_ADOW_COMMANDS; + ltc_state->resendCommandCounter = LTC_NUMBER_REQ_ADOW_COMMANDS; LTC_StateTransition( ltc_state, LTC_STATEMACH_OPENWIRE_CHECK, @@ -1168,7 +1173,7 @@ void LTC_Trigger(LTC_STATE_s *ltc_state) { (ltc_state->commandDataTransferTime + LTC_FUEL_CELL_ADOW_TIME_MS)); /* Reuse read voltage register */ - ltc_state->reusageMeasurementMode = LTC_REUSE_READVOLT_FOR_ADOW_PDOWN; + ltc_state->reusageMeasurementMode = LTC_REUSE_READVOLTAGE_FOR_ADOW_PDOWN; } } else { DIAG_Handler(DIAG_ID_AFE_SPI, DIAG_EVENT_NOT_OK, DIAG_STRING, ltc_state->requestedString); @@ -1195,9 +1200,10 @@ void LTC_Trigger(LTC_STATE_s *ltc_state) { /* Take difference between pull-up and pull-down measurement */ for (uint16_t i = 1u; i < BS_NR_OF_CELL_BLOCKS_PER_STRING; i++) { - ltc_state->ltcData.openWireDetection->openWireDelta[ltc_state->requestedString][i] = (int32_t)( - ltc_state->ltcData.openWireDetection->openWirePup[ltc_state->requestedString][i] - - ltc_state->ltcData.openWireDetection->openWirePdown[ltc_state->requestedString][i]); + ltc_state->ltcData.openWireDetection->openWireDelta[ltc_state->requestedString][i] = + (int32_t)(ltc_state->ltcData.openWireDetection->openWirePup[ltc_state->requestedString][i] - + ltc_state->ltcData.openWireDetection + ->openWirePdown[ltc_state->requestedString][i]); } /* PDOWN or PUP positive or negative full scale value: C(N) or C(N-1) open*/ @@ -1207,11 +1213,11 @@ void LTC_Trigger(LTC_STATE_s *ltc_state) { if ((ltc_state->ltcData.openWireDetection ->openWirePup[ltc_state->requestedString] [p + (m * BS_NR_OF_CELL_BLOCKS_PER_MODULE)] == - LTC_FUELCELL_POSITIVE_FULLSCALE_RANGE_mV) || + LTC_FUELCELL_POSITIVE_FULL_SCALE_RANGE_mV) || (ltc_state->ltcData.openWireDetection ->openWirePup[ltc_state->requestedString] [p + (m * BS_NR_OF_CELL_BLOCKS_PER_MODULE)] == - LTC_FUELCELL_NEGATIVE_FULLSCALE_RANGE_mV)) { + LTC_FUELCELL_NEGATIVE_FULL_SCALE_RANGE_mV)) { ltc_state->ltcData.openWire->openWire[ltc_state->requestedString] [p + (m * (BS_NR_OF_CELL_BLOCKS_PER_MODULE))] = 1; ltc_state->ltcData.openWire @@ -1221,11 +1227,11 @@ void LTC_Trigger(LTC_STATE_s *ltc_state) { if ((ltc_state->ltcData.openWireDetection ->openWirePdown[ltc_state->requestedString] [p + (m * BS_NR_OF_CELL_BLOCKS_PER_MODULE)] == - LTC_FUELCELL_POSITIVE_FULLSCALE_RANGE_mV) || + LTC_FUELCELL_POSITIVE_FULL_SCALE_RANGE_mV) || (ltc_state->ltcData.openWireDetection ->openWirePdown[ltc_state->requestedString] [p + (m * BS_NR_OF_CELL_BLOCKS_PER_MODULE)] == - LTC_FUELCELL_NEGATIVE_FULLSCALE_RANGE_mV)) { + LTC_FUELCELL_NEGATIVE_FULL_SCALE_RANGE_mV)) { ltc_state->ltcData.openWire->openWire[ltc_state->requestedString] [p + (m * (BS_NR_OF_CELL_BLOCKS_PER_MODULE))] = 1; ltc_state->ltcData.openWire @@ -1235,7 +1241,8 @@ void LTC_Trigger(LTC_STATE_s *ltc_state) { } } - /* data sheet page 28: "for all values of n from 1 to 36: If CELL Delta(n+1) < -200mV then C(n) is open" */ + /* data sheet page 28: "for all values of n from 1 to 36: If CELL Delta(n+1) < -200mV then C(n) is + * open" */ for (uint8_t m = 0u; m < BS_NR_OF_MODULES_PER_STRING; m++) { /* ltc_state->ltcData.openWireDelta parsed from 1 to (BS_NR_OF_CELL_BLOCKS_PER_MODULE-1) */ for (uint8_t c = 1u; c < BS_NR_OF_CELL_BLOCKS_PER_MODULE; c++) { @@ -1272,7 +1279,7 @@ void LTC_Trigger(LTC_STATE_s *ltc_state) { } ltc_state->triggerentry--; /* reentrance counter */ - } /* continueFunction */ + } /* continueFunction */ } /** @@ -1290,7 +1297,7 @@ void LTC_Trigger(LTC_STATE_s *ltc_state) { * @param stringNumber string addressed * */ -static void LTC_SaveRXtoVoltagebuffer_Fuelcell( +static void LTC_SaveRXToVoltageBuffer_Fuelcell( LTC_STATE_s *ltc_state, uint16_t *pRxBuff, uint8_t registerSet, @@ -1298,25 +1305,21 @@ static void LTC_SaveRXtoVoltagebuffer_Fuelcell( uint16_t cellOffset = 0; uint16_t val_ui = 0; int16_t voltage_mV = 0; - uint64_t bitmask = 0; uint16_t buffer_LSB = 0; uint16_t buffer_MSB = 0; - cellOffset = registerSet * 4u; + cellOffset = registerSet * LTC_NUMBER_OF_CELL_VOLTAGES_PER_REGISTER; - /* Calculate bitmask for valid flags */ - bitmask |= 0x0Full << cellOffset; /* 0x0F: four voltages in each register */ - - /* reinitialize index counter at begin of cycle */ + /* Reinitialize index counter at begin of cycle */ if (cellOffset == 0u) { (ltc_state->ltcData.usedCellIndex[stringNumber]) = 0u; } /* Retrieve data without command and CRC*/ for (uint8_t m = 0u; m < LTC_N_LTC; m++) { - uint8_t incrementations = 0u; + uint8_t increment = 0u; - /* parse all four voltages (4 * 12bits) contained in one register */ + /* Parse all four voltages (4 * 12bits) contained in one register */ for (uint8_t c = 0u; c < 4u; c++) { switch (c) { case 0u: @@ -1353,17 +1356,20 @@ static void LTC_SaveRXtoVoltagebuffer_Fuelcell( if (ltc_state->ltcData.errorTable->PEC_valid[stringNumber][m] == true) { ltc_state->ltcData.cellVoltage ->cellVoltage_mV[stringNumber][m][ltc_state->ltcData.usedCellIndex[stringNumber]] = voltage_mV; - bitmask = ~bitmask; /* negate bitmask to only validate flags of this voltage register */ - ltc_state->ltcData.cellVoltage->invalidCellVoltage[stringNumber][(m / LTC_NUMBER_OF_LTC_PER_MODULE)] &= - bitmask; + for (uint8_t i = 0u; i < LTC_NUMBER_OF_CELL_VOLTAGES_PER_REGISTER; i++) { + ltc_state->ltcData.cellVoltage + ->invalidCellVoltage[stringNumber][(m / LTC_NUMBER_OF_LTC_PER_MODULE)][cellOffset + i] = false; + } } else { /* PEC_valid == false: Invalidate only flags of this voltage register */ - ltc_state->ltcData.cellVoltage->invalidCellVoltage[stringNumber][(m / LTC_NUMBER_OF_LTC_PER_MODULE)] |= - bitmask; + for (uint8_t i = 0u; i < LTC_NUMBER_OF_CELL_VOLTAGES_PER_REGISTER; i++) { + ltc_state->ltcData.cellVoltage + ->invalidCellVoltage[stringNumber][(m / LTC_NUMBER_OF_LTC_PER_MODULE)][cellOffset + i] = true; + } } (ltc_state->ltcData.usedCellIndex[stringNumber])++; - incrementations++; + increment++; if ((ltc_state->ltcData.usedCellIndex[stringNumber]) > BS_NR_OF_CELL_BLOCKS_PER_MODULE) { break; @@ -1374,7 +1380,7 @@ static void LTC_SaveRXtoVoltagebuffer_Fuelcell( * decrement used cell index if current module is not the last * module in the daisy-chain. */ if ((m + 1u) < LTC_N_LTC) { - (ltc_state->ltcData.usedCellIndex[stringNumber]) -= incrementations; + (ltc_state->ltcData.usedCellIndex[stringNumber]) -= increment; } } } @@ -1464,7 +1470,7 @@ static void LTC_ResetErrorTable(LTC_STATE_s *ltc_state) { * This function sends an instruction to the daisy-chain via SPI, in order to start voltage measurement for all cells. * * @param pSpiInterface pointer to SPI configuration - * @param adcMode LTC ADCmeasurement mode (fast, normal or filtered) + * @param adcMode LTC ADCMeasurement mode (fast, normal or filtered) * @param adcMeasCh number of cell voltage measured (2 cells or all cells) * * @return retVal #STD_OK if dummy byte was sent correctly by SPI, #STD_NOT_OK otherwise @@ -1487,7 +1493,7 @@ static STD_RETURN_TYPE_e LTC_StartVoltageMeasurement( * This function sends an instruction to the daisy-chain via SPI to start the measurement. * * @param pSpiInterface pointer to SPI configuration - * @param adcMode LTC ADCmeasurement mode (fast, normal or filtered) + * @param adcMode LTC ADCMeasurement mode (fast, normal or filtered) * @param PUP pull-up bit for pull-up or pull-down current (0: pull-down, 1: pull-up) * * @return retVal #STD_OK if command was sent correctly by SPI, #STD_NOT_OK otherwise @@ -1641,18 +1647,22 @@ static uint32_t LTC_GetSpiClock(SPI_INTERFACE_CONFIG_s *pSpiInterface) { /* Reference manual p.909 */ /* The shift by 3 puts the bits 5:3 to the first position */ /* Division are made by powers of 2 which corresponds to shifting to the right */ - /* Then 0 corresponds to divide by 2, 1 corresponds to divide by 4... so 1 has to be added to the value of the configuration bits */ + /* Then 0 corresponds to divide by 2, 1 corresponds to divide by 4... so 1 has to be added to the value of the + * configuration bits */ /* SPI_Clock = HAL_RCC_GetPCLK1Freq()>>((LTC_SPI_PRESCALER>>3)+1); } */ - /* if (LTC_SPI_INSTANCE == SPI1 || LTC_SPI_INSTANCE == SPI4 || LTC_SPI_INSTANCE == SPI5 || LTC_SPI_INSTANCE == SPI6) { */ + /* if (LTC_SPI_INSTANCE == SPI1 || LTC_SPI_INSTANCE == SPI4 || LTC_SPI_INSTANCE == SPI5 || LTC_SPI_INSTANCE == SPI6) + * { + */ /* SPI1, SPI4, SPI5 and SPI6 are connected to APB2 (PCLK2) */ /* The prescaler setup bits LTC_SPI_PRESCALER corresponds to the bits 5:3 in the SPI_CR1 register */ /* Reference manual p.909 */ /* The shift by 3 puts the bits 5:3 to the first position */ /* Division are made by powers of 2 which corresponds to shifting to the right */ - /* Then 0 corresponds to divide by 2, 1 corresponds to divide by 4... so 1 has to be added to the value of the configuration bits */ + /* Then 0 corresponds to divide by 2, 1 corresponds to divide by 4... so 1 has to be added to the value of the + * configuration bits */ /* SPI_Clock = HAL_RCC_GetPCLK2Freq()>>((LTC_SPI_PRESCALER>>3)+1); } */ @@ -1751,22 +1761,22 @@ static void LTC_SetFirstMeasurementCycleFinished(LTC_STATE_s *ltc_state) { extern void LTC_InitializeMonitoringPin(void) { /* Set 3rd PE pins to enable daisy chains */ - PEX_SetPinDirectionOutput(PEX_PORT_EXPANDER3, PEX_PIN10); - PEX_SetPinDirectionOutput(PEX_PORT_EXPANDER3, PEX_PIN11); - PEX_SetPinDirectionOutput(PEX_PORT_EXPANDER3, PEX_PIN12); - PEX_SetPinDirectionOutput(PEX_PORT_EXPANDER3, PEX_PIN13); - PEX_SetPinDirectionOutput(PEX_PORT_EXPANDER3, PEX_PIN14); - PEX_SetPinDirectionOutput(PEX_PORT_EXPANDER3, PEX_PIN15); - PEX_SetPinDirectionOutput(PEX_PORT_EXPANDER3, PEX_PIN16); - PEX_SetPinDirectionOutput(PEX_PORT_EXPANDER3, PEX_PIN17); - PEX_SetPin(PEX_PORT_EXPANDER3, PEX_PIN10); - PEX_SetPin(PEX_PORT_EXPANDER3, PEX_PIN11); - PEX_SetPin(PEX_PORT_EXPANDER3, PEX_PIN12); - PEX_SetPin(PEX_PORT_EXPANDER3, PEX_PIN13); - PEX_SetPin(PEX_PORT_EXPANDER3, PEX_PIN14); - PEX_SetPin(PEX_PORT_EXPANDER3, PEX_PIN15); - PEX_SetPin(PEX_PORT_EXPANDER3, PEX_PIN16); - PEX_SetPin(PEX_PORT_EXPANDER3, PEX_PIN17); + PEX_SetPinDirectionOutput(PEX_PORT_EXPANDER3, PEX_PORT_1_PIN_0); + PEX_SetPinDirectionOutput(PEX_PORT_EXPANDER3, PEX_PORT_1_PIN_1); + PEX_SetPinDirectionOutput(PEX_PORT_EXPANDER3, PEX_PORT_1_PIN_2); + PEX_SetPinDirectionOutput(PEX_PORT_EXPANDER3, PEX_PORT_1_PIN_3); + PEX_SetPinDirectionOutput(PEX_PORT_EXPANDER3, PEX_PORT_1_PIN_4); + PEX_SetPinDirectionOutput(PEX_PORT_EXPANDER3, PEX_PORT_1_PIN_5); + PEX_SetPinDirectionOutput(PEX_PORT_EXPANDER3, PEX_PORT_1_PIN_6); + PEX_SetPinDirectionOutput(PEX_PORT_EXPANDER3, PEX_PORT_1_PIN_7); + PEX_SetPin(PEX_PORT_EXPANDER3, PEX_PORT_1_PIN_0); + PEX_SetPin(PEX_PORT_EXPANDER3, PEX_PORT_1_PIN_1); + PEX_SetPin(PEX_PORT_EXPANDER3, PEX_PORT_1_PIN_2); + PEX_SetPin(PEX_PORT_EXPANDER3, PEX_PORT_1_PIN_3); + PEX_SetPin(PEX_PORT_EXPANDER3, PEX_PORT_1_PIN_4); + PEX_SetPin(PEX_PORT_EXPANDER3, PEX_PORT_1_PIN_5); + PEX_SetPin(PEX_PORT_EXPANDER3, PEX_PORT_1_PIN_6); + PEX_SetPin(PEX_PORT_EXPANDER3, PEX_PORT_1_PIN_7); } /*========== Externalized Static Function Implementations (Unit Test) =======*/ diff --git a/src/app/driver/afe/ltc/6806/ltc_6806.json b/src/app/driver/afe/ltc/6806/ltc_6806.json index 2183cc4a..c7db9b67 100644 --- a/src/app/driver/afe/ltc/6806/ltc_6806.json +++ b/src/app/driver/afe/ltc/6806/ltc_6806.json @@ -1,9 +1,9 @@ { - "include": [ - ".", - "config", - "../common", - "../common/config", - "../../api" - ] + "include": [ + ".", + "config", + "../common", + "../common/config", + "../../api" + ] } diff --git a/src/app/driver/afe/ltc/6806/wscript b/src/app/driver/afe/ltc/6806/wscript old mode 100644 new mode 100755 index db99a008..1c1d8e01 --- a/src/app/driver/afe/ltc/6806/wscript +++ b/src/app/driver/afe/ltc/6806/wscript @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause diff --git a/src/app/driver/afe/ltc/6811-1/wscript b/src/app/driver/afe/ltc/6811-1/wscript old mode 100644 new mode 100755 index 1384851c..e66ecc94 --- a/src/app/driver/afe/ltc/6811-1/wscript +++ b/src/app/driver/afe/ltc/6811-1/wscript @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause diff --git a/src/app/driver/afe/ltc/6812-1/wscript b/src/app/driver/afe/ltc/6812-1/wscript old mode 100644 new mode 100755 index c6b0fb9d..26a66a63 --- a/src/app/driver/afe/ltc/6812-1/wscript +++ b/src/app/driver/afe/ltc/6812-1/wscript @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause diff --git a/src/app/driver/afe/ltc/6813-1/config/ltc_6813-1_cfg.c b/src/app/driver/afe/ltc/6813-1/config/ltc_6813-1_cfg.c index 1567aad3..a8f6fb1a 100644 --- a/src/app/driver/afe/ltc/6813-1/config/ltc_6813-1_cfg.c +++ b/src/app/driver/afe/ltc/6813-1/config/ltc_6813-1_cfg.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file ltc_6813-1_cfg.c * @author foxBMS Team * @date 2015-02-18 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS_CONFIGURATION * @prefix LTC * * @brief Configuration for the LTC analog front-end - * + * @details TODO */ /*========== Includes =======================================================*/ @@ -183,7 +183,7 @@ LTC_MUX_SEQUENCE_s ltc_mux_seq = { .seqptr = <c_mux_seq_main_ch1[0], .nr_of_steps = (sizeof(ltc_mux_seq_main_ch1) / sizeof(LTC_MUX_CH_CFG_s))}; -const uint8_t ltc_muxsensortemperatur_cfg[BS_NR_OF_TEMP_SENSORS_PER_MODULE] = { +const uint8_t ltc_muxSensorTemperature_cfg[BS_NR_OF_TEMP_SENSORS_PER_MODULE] = { 1 - 1, /*!< index 0 = mux 0, ch 0 */ 2 - 1, /*!< index 1 = mux 0, ch 1 */ 3 - 1, /*!< index 2 = mux 0, ch 2 */ @@ -192,14 +192,14 @@ const uint8_t ltc_muxsensortemperatur_cfg[BS_NR_OF_TEMP_SENSORS_PER_MODULE] = { 6 - 1, /*!< index 5 = mux 0, ch 5 */ 7 - 1, /*!< index 6 = mux 0, ch 6 */ 8 - 1, /*!< index 7 = mux 0, ch 7 */ - /* 9-1 , !< index 8 = mux 1, ch 0 */ - /* 10-1 , !< index 9 = mux 1, ch 1 */ - /* 11-1 , !< index 10 = mux 1, ch 2 */ - /* 12-1 , !< index 11 = mux 1, ch 3 */ - /* 13-1 , !< index 12 = mux 1, ch 4 */ - /* 14-1 , !< index 13 = mux 1, ch 5 */ - /* 15-1 , !< index 14 = mux 1, ch 6 */ - /* 16-1 !< index 15 = mux 1, ch 7 */ + /* 9-1 , !< index 8 = mux 1, ch 0 */ + /* 10-1 , !< index 9 = mux 1, ch 1 */ + /* 11-1 , !< index 10 = mux 1, ch 2 */ + /* 12-1 , !< index 11 = mux 1, ch 3 */ + /* 13-1 , !< index 12 = mux 1, ch 4 */ + /* 14-1 , !< index 13 = mux 1, ch 5 */ + /* 15-1 , !< index 14 = mux 1, ch 6 */ + /* 16-1 !< index 15 = mux 1, ch 7 */ }; const uint8_t ltc_voltage_input_used[LTC_6813_MAX_SUPPORTED_CELLS] = { @@ -230,7 +230,28 @@ const uint8_t ltc_voltage_input_used[LTC_6813_MAX_SUPPORTED_CELLS] = { /*========== Extern Function Implementations ================================*/ int16_t LTC_ConvertMuxVoltagesToTemperatures(uint16_t adcVoltage_mV) { - return TSI_GetTemperature(adcVoltage_mV); /* Convert degree celsius to deci degree celsius */ + return TSI_GetTemperature(adcVoltage_mV); /* Convert degree Celsius to deci degree Celsius */ +} + +uint8_t LTC_GetVoltageInputIndexFromCellBlockIndex(uint8_t indexCellBlock) { + FAS_ASSERT(indexCellBlock < BS_NR_OF_CELL_BLOCKS_PER_MODULE); + uint8_t voltageInputIndex = 0u; + uint8_t usedVoltageIndices = 0u; + for (uint8_t index = 0u; index < LTC_6813_MAX_SUPPORTED_CELLS; index++) { + /* Cell is connected to this input */ + if (ltc_voltage_input_used[index] == 1u) { + /* Increment the count of the used cell voltage inputs for each + * array index of ltc_voltage_input_used that indicates a used input. + * Check before incrementing we have already found correct index + * of the requested cell block index */ + if (indexCellBlock == usedVoltageIndices) { + voltageInputIndex = index; + break; + } + usedVoltageIndices++; + } + } + return voltageInputIndex; } /*========== Externalized Static Function Implementations (Unit Test) =======*/ diff --git a/src/app/driver/afe/ltc/6813-1/config/ltc_6813-1_cfg.h b/src/app/driver/afe/ltc/6813-1/config/ltc_6813-1_cfg.h index 31fc257a..955405c9 100644 --- a/src/app/driver/afe/ltc/6813-1/config/ltc_6813-1_cfg.h +++ b/src/app/driver/afe/ltc/6813-1/config/ltc_6813-1_cfg.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,14 +43,14 @@ * @file ltc_6813-1_cfg.h * @author foxBMS Team * @date 2015-02-18 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS_CONFIGURATION * @prefix LTC * * @brief Header for the configuration for the LTC 6804-1 6811-1, 6812-1, * and 6813-1 monitoring IC. - * + * @details TODO */ #ifndef FOXBMS__LTC_6813_1_CFG_H_ @@ -126,11 +126,14 @@ /** Number of LTC-ICs per battery module */ #define LTC_NUMBER_OF_LTC_PER_MODULE (1u) +/** Number of LTC cell voltages to be read per register */ +#define LTC_NUMBER_OF_CELL_VOLTAGES_PER_REGISTER (3u) + /** Open-wire detection threshold */ #define LTC_ADOW_THRESHOLD (-400) /** - * Measurement modus for voltages, possible values: + * Measurement mode for voltages, possible values: * - LTC_ADCMODE_NORMAL_DCP0 * - LTC_ADCMODE_FILTERED_DCP0 * - LTC_ADCMODE_FAST_DCP0 @@ -138,7 +141,7 @@ #define LTC_VOLTAGE_MEASUREMENT_MODE (LTC_ADCMODE_NORMAL_DCP0) /** - * Measurement modus for GPIOs, possible values: + * Measurement mode for GPIOs, possible values: * - LTC_ADCMODE_NORMAL_DCP0 * - LTC_ADCMODE_FILTERED_DCP0 * - LTC_ADCMODE_FAST_DCP0 @@ -146,7 +149,7 @@ #define LTC_GPIO_MEASUREMENT_MODE (LTC_ADCMODE_NORMAL_DCP0) /** - * Measurement modus for Open-wire check, possible values: + * Measurement mode for Open-wire check, possible values: * - LTC_ADCMODE_NORMAL_DCP0 * - LTC_ADCMODE_FILTERED_DCP0 */ @@ -272,21 +275,15 @@ #define LTC_STATEMACH_MEAS_SINGLE_GPIO_FILTERED_TCYCLE (68) /** LTC state machine sequence error timing in ms */ -#define LTC_STATEMACH_SEQERRTTIME (5) +#define LTC_STATEMACH_SEQ_ERR_TIME (5) /** LTC state machine CRC-transmission error timing in ms */ -#define LTC_STATEMACH_PECERRTIME (1) +#define LTC_STATEMACH_PEC_ERR_TIME (1) /** * Maximum number of re-tries in case of CRC error during the communication with daisy chain * before going into error state */ -#define LTC_TRANSMIT_PECERRLIMIT (10) - -/** - * Maximum number of re-tries in case of SPI error during the communication with daisy chain - * before going into error state - */ -#define LTC_TRANSMIT_SPIERRLIMIT (3) +#define LTC_TRANSMIT_PEC_ERR_LIMIT (10) /** If set to 1, check if multiplexers acknowledged transmission */ #define LTC_READCOM (0) @@ -305,7 +302,7 @@ * | C | 1.5+(C/10nF) | 2 | | | * +----------------+--------------+---------------+----------+----------+ */ -#define LTC_NMBR_REQ_ADOW_COMMANDS (2) +#define LTC_NUMBER_REQ_ADOW_COMMANDS (2) /** * Transmit functions @@ -335,7 +332,7 @@ extern LTC_MUX_SEQUENCE_s ltc_mux_seq; * sensors by default. * Lookup table between temperature sensors and battery cells */ -extern const uint8_t ltc_muxsensortemperatur_cfg[BS_NR_OF_TEMP_SENSORS_PER_MODULE]; +extern const uint8_t ltc_muxSensorTemperature_cfg[BS_NR_OF_TEMP_SENSORS_PER_MODULE]; /** Lookup table to indicate which voltage inputs are used */ extern const uint8_t ltc_voltage_input_used[LTC_6813_MAX_SUPPORTED_CELLS]; @@ -354,6 +351,15 @@ extern const uint8_t ltc_voltage_input_used[LTC_6813_MAX_SUPPORTED_CELLS]; */ extern int16_t LTC_ConvertMuxVoltagesToTemperatures(uint16_t adcVoltage_mV); +/** + * @brief Get connected cell voltage input from an cell block index. + * @details This function returns the AFE cell voltage input from cell block + * index. + * @param indexCellBlock cell block index + * @return AFE voltage input where this cell block is connected to + */ +extern uint8_t LTC_GetVoltageInputIndexFromCellBlockIndex(uint8_t indexCellBlock); + /*========== Externalized Static Functions Prototypes (Unit Test) ===========*/ #ifdef UNITY_UNIT_TEST #endif diff --git a/src/app/driver/afe/ltc/6813-1/ltc_6813-1.c b/src/app/driver/afe/ltc/6813-1/ltc_6813-1.c index 7150535f..ce9c6f63 100644 --- a/src/app/driver/afe/ltc/6813-1/ltc_6813-1.c +++ b/src/app/driver/afe/ltc/6813-1/ltc_6813-1.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file ltc_6813-1.c * @author foxBMS Team * @date 2019-09-01 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix LTC * * @brief Driver for the LTC analog front-end. - * + * @details TODO */ /*========== Includes =======================================================*/ @@ -96,8 +96,13 @@ #define LTC_FCOM_MASTER_NACK_STOP (0x09u) /**@}*/ -/** maximum number of supported cells */ -#define LTC_MAX_SUPPORTED_CELLS (12u) +/* Balancing outputs 0 - 11 in CONFIGURATION REGISTER A */ +#define LTC_LOWER_INDEX_FOR_BALANCING_OUTPUTS_IN_REGISTER_WRCFG (0u) +#define LTC_UPPER_INDEX_FOR_BALANCING_OUTPUTS_IN_REGISTER_WRCFG (11u) + +/* Balancing outputs 12 - 15/18 in CONFIGURATION REGISTER A */ +#define LTC_LOWER_INDEX_FOR_BALANCING_OUTPUTS_IN_REGISTER_WRCFG2 (12u) +#define LTC_UPPER_INDEX_FOR_BALANCING_OUTPUTS_IN_REGISTER_WRCFG2 (17u) /*========== Static Constant and Variable Definitions =======================*/ /** @@ -117,12 +122,12 @@ static uint16_t ltc_used_cells_index[BS_NR_OF_STRINGS] = {0}; /** local copies of database tables */ /**@{*/ static DATA_BLOCK_CELL_VOLTAGE_s ltc_cellVoltage = {.header.uniqueId = DATA_BLOCK_ID_CELL_VOLTAGE_BASE}; -static DATA_BLOCK_CELL_TEMPERATURE_s ltc_celltemperature = {.header.uniqueId = DATA_BLOCK_ID_CELL_TEMPERATURE_BASE}; +static DATA_BLOCK_CELL_TEMPERATURE_s ltc_cellTemperature = {.header.uniqueId = DATA_BLOCK_ID_CELL_TEMPERATURE_BASE}; static DATA_BLOCK_BALANCING_FEEDBACK_s ltc_balancing_feedback = { .header.uniqueId = DATA_BLOCK_ID_BALANCING_FEEDBACK_BASE}; static DATA_BLOCK_BALANCING_CONTROL_s ltc_balancing_control = {.header.uniqueId = DATA_BLOCK_ID_BALANCING_CONTROL}; static DATA_BLOCK_SLAVE_CONTROL_s ltc_slave_control = {.header.uniqueId = DATA_BLOCK_ID_SLAVE_CONTROL}; -static DATA_BLOCK_ALL_GPIO_VOLTAGES_s ltc_allgpiovoltage = {.header.uniqueId = DATA_BLOCK_ID_ALL_GPIO_VOLTAGES_BASE}; +static DATA_BLOCK_ALL_GPIO_VOLTAGES_s ltc_AllGpioVoltage = {.header.uniqueId = DATA_BLOCK_ID_ALL_GPIO_VOLTAGES_BASE}; static DATA_BLOCK_OPEN_WIRE_s ltc_openWire = {.header.uniqueId = DATA_BLOCK_ID_OPEN_WIRE_BASE}; /**@}*/ /** stores information on the detected open wires locally */ @@ -142,11 +147,11 @@ LTC_STATE_s ltc_stateBase = { .statereq = {.request = LTC_STATE_NO_REQUEST, .string = 0xFFu}, .state = LTC_STATEMACH_UNINITIALIZED, .substate = 0, - .laststate = LTC_STATEMACH_UNINITIALIZED, - .lastsubstate = 0, - .adcModereq = LTC_ADCMODE_FAST_DCP0, + .lastState = LTC_STATEMACH_UNINITIALIZED, + .lastSubstate = 0, + .adcModeRequest = LTC_ADCMODE_FAST_DCP0, .adcMode = LTC_ADCMODE_FAST_DCP0, - .adcMeasChreq = LTC_ADCMEAS_UNDEFINED, + .adcMeasChannelRequest = LTC_ADCMEAS_UNDEFINED, .adcMeasCh = LTC_ADCMEAS_UNDEFINED, .numberOfMeasuredMux = 32, .triggerentry = 0, @@ -176,13 +181,13 @@ LTC_STATE_s ltc_stateBase = { .ltcData.rxBuffer = ltc_RxPecBuffer, .ltcData.frameLength = LTC_N_BYTES_FOR_DATA_TRANSMISSION, .ltcData.cellVoltage = <c_cellVoltage, - .ltcData.cellTemperature = <c_celltemperature, + .ltcData.cellTemperature = <c_cellTemperature, .ltcData.balancingFeedback = <c_balancing_feedback, .ltcData.balancingControl = <c_balancing_control, .ltcData.slaveControl = <c_slave_control, .ltcData.openWireDetection = <c_openWireDetection, .ltcData.errorTable = <c_errorTable, - .ltcData.allGpioVoltages = <c_allgpiovoltage, + .ltcData.allGpioVoltages = <c_AllGpioVoltage, .ltcData.openWire = <c_openWire, .ltcData.usedCellIndex = ltc_used_cells_index, .currentString = 0u, @@ -252,23 +257,26 @@ static uint16_t ltc_cmdADAX_fast_GPIO2[4] = {0x04, 0xE2, 0x82, 0x9C}; /*!< S static uint16_t ltc_cmdADAX_normal_GPIO3[4] = {0x05, 0x63, 0xC5, 0xC4}; /*!< Single channel, GPIO 3, normal mode */ static uint16_t ltc_cmdADAX_filtered_GPIO3[4] = {0x05, 0xE3, 0x81, 0xE2}; /*!< Single channel, GPIO 3, filtered mode */ static uint16_t ltc_cmdADAX_fast_GPIO3[4] = {0x04, 0xE3, 0x09, 0xAE}; /*!< Single channel, GPIO 3, fast mode */ -/* static uint16_t ltc_cmdADAX_normal_GPIO4[4] = {0x05, 0x64, 0x62, 0x3E}; !< Single channel, GPIO 4, normal mode */ -/* static uint16_t ltc_cmdADAX_filtered_GPIO4[4] = {0x05, 0xE4, 0x26, 0x18}; !< Single channel, GPIO 4, filtered mode */ -/* static uint16_t ltc_cmdADAX_fast_GPIO4[4] = {0x04, 0xE4, 0xAE, 0x54}; !< Single channel, GPIO 4, fast mode */ -/* static uint16_t ltc_cmdADAX_normal_GPIO5[4] = {0x05, 0x65, 0xE9, 0x0C}; !< Single channel, GPIO 5, normal mode */ -/* static uint16_t ltc_cmdADAX_filtered_GPIO5[4] = {0x05, 0xE5, 0xAD, 0x2A}; !< Single channel, GPIO 5, filtered mode */ -/* static uint16_t ltc_cmdADAX_fast_GPIO5[4] = {0x04, 0xE5, 0x25, 0x66}; !< Single channel, GPIO 5, fast mode */ -static uint16_t ltc_cmdADAX_normal_ALLGPIOS[4] = {0x05, 0x60, 0xD3, 0xA0}; /*!< All channels, normal mode */ -static uint16_t ltc_cmdADAX_filtered_ALLGPIOS[4] = - {0x05, 0xE0, 0x97, 0x86}; /*!< All channels, filtered mode */ -static uint16_t ltc_cmdADAX_fast_ALLGPIOS[4] = {0x04, 0xE0, 0x1F, 0xCA}; /*!< All channels, fast mode */ +/* static uint16_t ltc_cmdADAX_normal_GPIO4[4] = {0x05, 0x64, 0x62, 0x3E}; !< Single channel, GPIO 4, normal mode + */ +/* static uint16_t ltc_cmdADAX_filtered_GPIO4[4] = {0x05, 0xE4, 0x26, 0x18}; !< Single channel, GPIO 4, filtered mode + */ +/* static uint16_t ltc_cmdADAX_fast_GPIO4[4] = {0x04, 0xE4, 0xAE, 0x54}; !< Single channel, GPIO 4, fast mode */ +/* static uint16_t ltc_cmdADAX_normal_GPIO5[4] = {0x05, 0x65, 0xE9, 0x0C}; !< Single channel, GPIO 5, normal mode + */ +/* static uint16_t ltc_cmdADAX_filtered_GPIO5[4] = {0x05, 0xE5, 0xAD, 0x2A}; !< Single channel, GPIO 5, filtered mode + */ +/* static uint16_t ltc_cmdADAX_fast_GPIO5[4] = {0x04, 0xE5, 0x25, 0x66}; !< Single channel, GPIO 5, fast mode */ +static uint16_t ltc_cmdADAX_normal_ALL_GPIOS[4] = {0x05, 0x60, 0xD3, 0xA0}; /*!< All channels, normal mode */ +static uint16_t ltc_cmdADAX_filtered_ALL_GPIOS[4] = {0x05, 0xE0, 0x97, 0x86}; /*!< All channels, filtered mode */ +static uint16_t ltc_cmdADAX_fast_ALL_GPIOS[4] = {0x04, 0xE0, 0x1F, 0xCA}; /*!< All channels, fast mode */ /* Open-wire */ static uint16_t ltc_BC_cmdADOW_PUP_normal_DCP0[4] = { 0x03, 0x68, 0x1C, - 0x62}; /*!< Broadcast, Pull-up current, All cells, normal mode, discharge not permitted (DCP=0) */ + 0x62}; /*!< Broadcast, Pull-up current, All cells, normal mode, discharge not permitted (DCP=0) */ static uint16_t ltc_BC_cmdADOW_PDOWN_normal_DCP0[4] = { 0x03, 0x28, @@ -423,7 +431,11 @@ static STD_RETURN_TYPE_e LTC_SendI2cCommand( uint32_t frameLength, uint16_t *cmd_data); -static STD_RETURN_TYPE_e LTC_I2cCheckAck(LTC_STATE_s *ltc_state, uint16_t *pRxBuff, uint8_t mux, uint8_t stringNumber); +static STD_RETURN_TYPE_e LTC_I2cCheckAcknowledge( + LTC_STATE_s *ltc_state, + uint16_t *pRxBuff, + uint8_t mux, + uint8_t stringNumber); static void LTC_SaveMuxMeasurement( LTC_STATE_s *ltc_state, @@ -465,14 +477,16 @@ static void LTC_InitializeDatabase(LTC_STATE_s *ltc_state) { ltc_state->ltcData.cellTemperature->state = 0; for (uint8_t m = 0u; m < BS_NR_OF_MODULES_PER_STRING; m++) { - for (uint8_t ts = 0; ts < BS_NR_OF_TEMP_SENSORS_PER_STRING; ts++) { + for (uint8_t ts = 0; ts < BS_NR_OF_TEMP_SENSORS_PER_MODULE; ts++) { ltc_state->ltcData.cellTemperature->cellTemperature_ddegC[s][m][ts] = 0; } } ltc_state->ltcData.balancingFeedback->state = 0; - for (uint16_t i = 0; i < BS_NR_OF_CELL_BLOCKS_PER_STRING; i++) { - ltc_state->ltcData.balancingControl->balancingState[s][i] = 0; + for (uint8_t m = 0u; m < BS_NR_OF_MODULES_PER_STRING; m++) { + for (uint16_t cb = 0; cb < BS_NR_OF_CELL_BLOCKS_PER_MODULE; cb++) { + ltc_state->ltcData.balancingControl->activateBalancing[s][m][cb] = false; + } } ltc_state->ltcData.balancingControl->nrBalancedCells[s] = 0u; for (uint16_t i = 0; i < BS_NR_OF_MODULES_PER_STRING; i++) { @@ -517,8 +531,8 @@ static void LTC_InitializeDatabase(LTC_STATE_s *ltc_state) { * @param ltc_state: state of the ltc state machine */ static void LTC_SaveLastStates(LTC_STATE_s *ltc_state) { - ltc_state->laststate = ltc_state->state; - ltc_state->lastsubstate = ltc_state->substate; + ltc_state->lastState = ltc_state->state; + ltc_state->lastSubstate = ltc_state->substate; } /** @@ -594,16 +608,16 @@ extern void LTC_SaveVoltages(LTC_STATE_s *ltc_state, uint8_t stringNumber) { for (uint8_t m = 0u; m < BS_NR_OF_MODULES_PER_STRING; m++) { for (uint8_t cb = 0u; cb < BS_NR_OF_CELL_BLOCKS_PER_MODULE; cb++) { /* ------- 1. Check open-wires ----------------- - * Is cell N input not open wire && - * Is cell N+1 input not open wire && - * Is cell voltage valid because of previous PEC error - * If so, everything okay, else set cell voltage measurement to invalid. - */ + * Is cell N input not open wire && + * Is cell N+1 input not open wire && + * Is cell voltage valid because of previous PEC error + * If so, everything okay, else set cell voltage measurement to invalid. + */ if ((ltc_state->ltcData.openWire ->openWire[stringNumber][(m * (BS_NR_OF_CELL_BLOCKS_PER_MODULE + 1u)) + cb] == 0u) && (ltc_state->ltcData.openWire ->openWire[stringNumber][(m * (BS_NR_OF_CELL_BLOCKS_PER_MODULE + 1u)) + cb + 1u] == 0u) && - ((ltc_state->ltcData.cellVoltage->invalidCellVoltage[stringNumber][m] & (0x01u << cb)) == 0u)) { + ((ltc_state->ltcData.cellVoltage->invalidCellVoltage[stringNumber][m][cb] == false))) { /* Cell voltage is valid -> perform minimum/maximum plausibility check */ /* ------- 2. Perform minimum/maximum measurement range check ---------- */ @@ -616,13 +630,13 @@ extern void LTC_SaveVoltages(LTC_STATE_s *ltc_state, uint8_t stringNumber) { numberValidMeasurements++; } else { /* Invalidate cell voltage measurement */ - ltc_state->ltcData.cellVoltage->invalidCellVoltage[stringNumber][m] |= (0x01u << cb); - cellVoltageMeasurementValid = STD_NOT_OK; + ltc_state->ltcData.cellVoltage->invalidCellVoltage[stringNumber][m][cb] = true; + cellVoltageMeasurementValid = STD_NOT_OK; } } else { /* Set cell voltage measurement value invalid, if not already invalid because of PEC Error */ - ltc_state->ltcData.cellVoltage->invalidCellVoltage[stringNumber][m] |= (0x01u << cb); - cellVoltageMeasurementValid = STD_NOT_OK; + ltc_state->ltcData.cellVoltage->invalidCellVoltage[stringNumber][m][cb] = true; + cellVoltageMeasurementValid = STD_NOT_OK; } } } @@ -645,10 +659,10 @@ extern void LTC_SaveTemperatures(LTC_STATE_s *ltc_state, uint8_t stringNumber) { for (uint8_t m = 0u; m < BS_NR_OF_MODULES_PER_STRING; m++) { for (uint8_t ts = 0u; ts < BS_NR_OF_TEMP_SENSORS_PER_MODULE; ts++) { /* ------- 1. Check valid flag ----------------- - * Is cell temperature valid because of previous PEC error - * If so, everything okay, else set cell temperature measurement to invalid. - */ - if ((ltc_state->ltcData.cellTemperature->invalidCellTemperature[stringNumber][m] & (0x01u << ts)) == 0u) { + * Is cell temperature valid because of previous PEC error + * If so, everything okay, else set cell temperature measurement to invalid. + */ + if (ltc_state->ltcData.cellTemperature->invalidCellTemperature[stringNumber][m][ts] == false) { /* Cell temperature is valid -> perform minimum/maximum plausibility check */ /* ------- 2. Perform minimum/maximum measurement range check ---------- */ @@ -657,8 +671,8 @@ extern void LTC_SaveTemperatures(LTC_STATE_s *ltc_state, uint8_t stringNumber) { numberValidMeasurements++; } else { /* Invalidate cell temperature measurement */ - ltc_state->ltcData.cellTemperature->invalidCellTemperature[stringNumber][m] |= (0x01u << ts); - cellTemperatureMeasurementValid = STD_NOT_OK; + ltc_state->ltcData.cellTemperature->invalidCellTemperature[stringNumber][m][ts] = true; + cellTemperatureMeasurementValid = STD_NOT_OK; } } else { /* Already invalid because of PEC Error */ @@ -768,7 +782,7 @@ extern LTC_STATEMACH_e LTC_GetState(LTC_STATE_s *ltc_state) { * * @param ltc_state: state of the ltc state machine * @param pBusIDptr bus ID, main or backup (deprecated) - * @param pAdcModeptr LTC ADCmeasurement mode (fast, normal or filtered) + * @param pAdcModeptr LTC ADCMeasurement mode (fast, normal or filtered) * @param pAdcMeasChptr number of channels measured for GPIOS (one at a time for multiplexers or all five GPIOs) * * @return retVal current state request, taken from LTC_STATE_REQUEST_e @@ -789,8 +803,8 @@ LTC_REQUEST_s LTC_TransferStateRequest( retval.request = ltc_state->statereq.request; retval.string = ltc_state->statereq.string; ltc_state->requestedString = ltc_state->statereq.string; - *pAdcModeptr = ltc_state->adcModereq; - *pAdcMeasChptr = ltc_state->adcMeasChreq; + *pAdcModeptr = ltc_state->adcModeRequest; + *pAdcMeasChptr = ltc_state->adcMeasChannelRequest; ltc_state->statereq.request = LTC_STATE_NO_REQUEST; ltc_state->statereq.string = 0x0u; OS_ExitTaskCritical(); @@ -925,7 +939,7 @@ void LTC_Trigger(LTC_STATE_s *ltc_state) { ltc_state->ltcData.txBuffer, ltc_state->ltcData.rxBuffer, ltc_state->ltcData.frameLength); /* Initialize main LTC loop */ - ltc_state->lastsubstate = ltc_state->substate; + ltc_state->lastSubstate = ltc_state->substate; DIAG_CheckEvent(retVal, ltc_state->spiDiagErrorEntry, DIAG_STRING, ltc_state->currentString); LTC_StateTransition( ltc_state, @@ -971,7 +985,7 @@ void LTC_Trigger(LTC_STATE_s *ltc_state) { case LTC_STATEMACH_STARTMEAS: ltc_state->adcMode = LTC_VOLTAGE_MEASUREMENT_MODE; - ltc_state->adcMeasCh = LTC_ADCMEAS_ALLCHANNEL_CELLS; + ltc_state->adcMeasCh = LTC_ADCMEAS_ALL_CHANNEL_CELLS; ltc_state->spiSeqPtr = ltc_state->ltcData.pSpiInterface; ltc_state->spiNumberInterfaces = BS_NR_OF_STRINGS; @@ -1000,7 +1014,7 @@ void LTC_Trigger(LTC_STATE_s *ltc_state) { case LTC_STATEMACH_STARTMEAS_CONTINUE: ltc_state->adcMode = LTC_VOLTAGE_MEASUREMENT_MODE; - ltc_state->adcMeasCh = LTC_ADCMEAS_ALLCHANNEL_CELLS; + ltc_state->adcMeasCh = LTC_ADCMEAS_ALL_CHANNEL_CELLS; ltc_state->check_spi_flag = STD_NOT_OK; retVal = LTC_StartVoltageMeasurement(ltc_state->spiSeqPtr, ltc_state->adcMode, ltc_state->adcMeasCh); @@ -1195,7 +1209,7 @@ void LTC_Trigger(LTC_STATE_s *ltc_state) { } /* Switch to different state if read voltage state is reused - * e.g. open-wire check... */ + * e.g. open-wire check... */ if (ltc_state->reusageMeasurementMode == LTC_NOT_REUSED) { LTC_SaveVoltages(ltc_state, ltc_state->currentString); LTC_StateTransition( @@ -1203,13 +1217,13 @@ void LTC_Trigger(LTC_STATE_s *ltc_state) { LTC_STATEMACH_MUXMEASUREMENT, LTC_STATEMACH_MUXCONFIGURATION_INIT, LTC_STATEMACH_SHORTTIME); - } else if (ltc_state->reusageMeasurementMode == LTC_REUSE_READVOLT_FOR_ADOW_PUP) { + } else if (ltc_state->reusageMeasurementMode == LTC_REUSE_READVOLTAGE_FOR_ADOW_PUP) { LTC_StateTransition( ltc_state, LTC_STATEMACH_OPENWIRE_CHECK, LTC_READ_VOLTAGES_PULLUP_OPENWIRE_CHECK, LTC_STATEMACH_SHORTTIME); - } else if (ltc_state->reusageMeasurementMode == LTC_REUSE_READVOLT_FOR_ADOW_PDOWN) { + } else if (ltc_state->reusageMeasurementMode == LTC_REUSE_READVOLTAGE_FOR_ADOW_PDOWN) { LTC_StateTransition( ltc_state, LTC_STATEMACH_OPENWIRE_CHECK, @@ -1349,7 +1363,7 @@ void LTC_Trigger(LTC_STATE_s *ltc_state) { DIAG_CheckEvent(retVal, ltc_state->pecDiagErrorEntry, DIAG_STRING, ltc_state->currentString); /* if CRC OK: check multiplexer answer on i2C bus */ - retVal = LTC_I2cCheckAck( + retVal = LTC_I2cCheckAcknowledge( ltc_state, ltc_state->ltcData.rxBuffer, ltc_state->muxmeas_seqptr[ltc_state->currentString]->muxID, @@ -1360,10 +1374,12 @@ void LTC_Trigger(LTC_STATE_s *ltc_state) { break; } else if (ltc_state->substate == LTC_STATEMACH_MUXMEASUREMENT) { if (ltc_state->muxmeas_seqptr[ltc_state->currentString]->muxCh == 0xFF) { - /* actual multiplexer is switched off, so do not make a measurement and follow up with next step (mux configuration) */ + /* actual multiplexer is switched off, so do not make a measurement and follow up with next step + * (mux configuration) */ ++ltc_state ->muxmeas_seqptr[ltc_state->currentString]; /* go further with next step of sequence - ltc_state.numberOfMeasuredMux not decremented, this does not count as a measurement */ + ltc_state.numberOfMeasuredMux not decremented, this + does not count as a measurement */ LTC_StateTransition(ltc_state, LTC_STATEMACH_STARTMEAS, LTC_ENTRY, LTC_STATEMACH_SHORTTIME); break; } else { @@ -1500,9 +1516,9 @@ void LTC_Trigger(LTC_STATE_s *ltc_state) { LTC_StateTransition( ltc_state, LTC_STATEMACH_TEMP_SENS_READ, LTC_TEMP_SENS_SEND_DATA1, LTC_STATEMACH_SHORTTIME); ltc_state->balance_control_done = STD_NOT_OK; - } else if (statereq.request == LTC_STATEMACH_BALANCEFEEDBACK_REQUEST) { + } else if (statereq.request == LTC_STATEMACH_BALANCE_FEEDBACK_REQUEST) { LTC_StateTransition( - ltc_state, LTC_STATEMACH_BALANCEFEEDBACK, LTC_ENTRY, LTC_STATEMACH_SHORTTIME); + ltc_state, LTC_STATEMACH_BALANCE_FEEDBACK, LTC_ENTRY, LTC_STATEMACH_SHORTTIME); ltc_state->balance_control_done = STD_NOT_OK; } else if (statereq.request == LTC_STATE_OPENWIRE_CHECK_REQUEST) { LTC_StateTransition( @@ -1511,27 +1527,27 @@ void LTC_Trigger(LTC_STATE_s *ltc_state) { LTC_REQUEST_PULLUP_CURRENT_OPENWIRE_CHECK, LTC_STATEMACH_SHORTTIME); /* Send ADOW command with PUP two times */ - ltc_state->resendCommandCounter = LTC_NMBR_REQ_ADOW_COMMANDS; + ltc_state->resendCommandCounter = LTC_NUMBER_REQ_ADOW_COMMANDS; ltc_state->balance_control_done = STD_NOT_OK; } else { LTC_StateTransition( ltc_state, - LTC_STATEMACH_BALANCECONTROL, - LTC_CONFIG_BALANCECONTROL, + LTC_STATEMACH_BALANCE_CONTROL, + LTC_CONFIG_BALANCE_CONTROL, LTC_STATEMACH_SHORTTIME); ltc_state->balance_control_done = STD_NOT_OK; } } else { LTC_StateTransition( - ltc_state, LTC_STATEMACH_BALANCECONTROL, LTC_CONFIG_BALANCECONTROL, LTC_STATEMACH_SHORTTIME); + ltc_state, LTC_STATEMACH_BALANCE_CONTROL, LTC_CONFIG_BALANCE_CONTROL, LTC_STATEMACH_SHORTTIME); } break; /****************************BALANCE CONTROL*********************************/ - case LTC_STATEMACH_BALANCECONTROL: + case LTC_STATEMACH_BALANCE_CONTROL: - if (ltc_state->substate == LTC_CONFIG_BALANCECONTROL) { + if (ltc_state->substate == LTC_CONFIG_BALANCE_CONTROL) { ltc_state->check_spi_flag = STD_OK; AFE_SetTransmitOngoing(ltc_state); retVal = LTC_BalanceControl( @@ -1546,14 +1562,14 @@ void LTC_Trigger(LTC_STATE_s *ltc_state) { ltc_state, retVal, ltc_state->spiDiagErrorEntry, - LTC_STATEMACH_BALANCECONTROL, - LTC_CONFIG2_BALANCECONTROL, + LTC_STATEMACH_BALANCE_CONTROL, + LTC_CONFIG2_BALANCE_CONTROL, (ltc_state->commandDataTransferTime + LTC_TRANSMISSION_TIMEOUT), - LTC_STATEMACH_BALANCECONTROL, - LTC_CONFIG2_BALANCECONTROL, + LTC_STATEMACH_BALANCE_CONTROL, + LTC_CONFIG2_BALANCE_CONTROL, LTC_STATEMACH_SHORTTIME); break; - } else if (ltc_state->substate == LTC_CONFIG2_BALANCECONTROL) { + } else if (ltc_state->substate == LTC_CONFIG2_BALANCE_CONTROL) { bool transmitOngoing = AFE_IsTransmitOngoing(ltc_state); if ((ltc_state->timer == 0) && (transmitOngoing == true)) { DIAG_Handler( @@ -1577,11 +1593,11 @@ void LTC_Trigger(LTC_STATE_s *ltc_state) { ltc_state, retVal, ltc_state->spiDiagErrorEntry, - LTC_STATEMACH_BALANCECONTROL, - LTC_CONFIG2_BALANCECONTROL_END, + LTC_STATEMACH_BALANCE_CONTROL, + LTC_CONFIG2_BALANCE_CONTROL_END, ltc_state->commandDataTransferTime + LTC_TRANSMISSION_TIMEOUT, - LTC_STATEMACH_BALANCECONTROL, - LTC_CONFIG2_BALANCECONTROL_END, + LTC_STATEMACH_BALANCE_CONTROL, + LTC_CONFIG2_BALANCE_CONTROL_END, LTC_STATEMACH_SHORTTIME); } else { /* 12 cells, balancing control finished */ @@ -1598,7 +1614,7 @@ void LTC_Trigger(LTC_STATE_s *ltc_state) { } break; - } else if (ltc_state->substate == LTC_CONFIG2_BALANCECONTROL_END) { + } else if (ltc_state->substate == LTC_CONFIG2_BALANCE_CONTROL_END) { bool transmitOngoing = AFE_IsTransmitOngoing(ltc_state); if ((ltc_state->timer == 0) && (transmitOngoing == true)) { DIAG_Handler( @@ -1624,10 +1640,10 @@ void LTC_Trigger(LTC_STATE_s *ltc_state) { break; /****************************START MEASUREMENT*******************************/ - case LTC_STATEMACH_ALLGPIOMEASUREMENT: + case LTC_STATEMACH_ALL_GPIO_MEASUREMENT: ltc_state->adcMode = LTC_GPIO_MEASUREMENT_MODE; - ltc_state->adcMeasCh = LTC_ADCMEAS_ALLCHANNEL_GPIOS; + ltc_state->adcMeasCh = LTC_ADCMEAS_ALL_CHANNEL_GPIOS; ltc_state->check_spi_flag = STD_NOT_OK; retVal = LTC_StartGpioMeasurement(ltc_state->spiSeqPtr, ltc_state->adcMode, ltc_state->adcMeasCh); @@ -1639,9 +1655,9 @@ void LTC_Trigger(LTC_STATE_s *ltc_state) { LTC_READ_AUXILIARY_REGISTER_A_RDAUXA, (ltc_state->commandTransferTime + LTC_GetMeasurementTimeCycle(ltc_state->adcMode, ltc_state->adcMeasCh)), - LTC_STATEMACH_ALLGPIOMEASUREMENT, + LTC_STATEMACH_ALL_GPIO_MEASUREMENT, LTC_ENTRY, - LTC_STATEMACH_SHORTTIME); /* TODO: @koffel here same state is kept if error occurs */ + LTC_STATEMACH_SHORTTIME); /* TODO: here same state is kept if error occurs */ break; /****************************READ ALL GPIO VOLTAGE************************************/ @@ -1697,10 +1713,10 @@ void LTC_Trigger(LTC_STATE_s *ltc_state) { retVal, ltc_state->spiDiagErrorEntry, LTC_STATEMACH_READALLGPIO, - LTC_EXIT_READAUXILIARY_ALLGPIOS, + LTC_EXIT_READAUXILIARY_ALL_GPIOS, (ltc_state->commandDataTransferTime + LTC_TRANSMISSION_TIMEOUT), LTC_STATEMACH_READALLGPIO, - LTC_EXIT_READAUXILIARY_ALLGPIOS, + LTC_EXIT_READAUXILIARY_ALL_GPIOS, LTC_STATEMACH_SHORTTIME); } break; @@ -1744,13 +1760,13 @@ void LTC_Trigger(LTC_STATE_s *ltc_state) { retVal, ltc_state->spiDiagErrorEntry, LTC_STATEMACH_READALLGPIO, - LTC_EXIT_READAUXILIARY_ALLGPIOS, + LTC_EXIT_READAUXILIARY_ALL_GPIOS, (ltc_state->commandDataTransferTime + LTC_TRANSMISSION_TIMEOUT), LTC_STATEMACH_READALLGPIO, - LTC_EXIT_READAUXILIARY_ALLGPIOS, + LTC_EXIT_READAUXILIARY_ALL_GPIOS, LTC_STATEMACH_SHORTTIME); break; - } else if (ltc_state->substate == LTC_EXIT_READAUXILIARY_ALLGPIOS) { + } else if (ltc_state->substate == LTC_EXIT_READAUXILIARY_ALL_GPIOS) { retVal = LTC_CheckPec(ltc_state, ltc_state->ltcData.rxBuffer, ltc_state->currentString); DIAG_CheckEvent(retVal, ltc_state->pecDiagErrorEntry, DIAG_STRING, ltc_state->currentString); @@ -1769,7 +1785,7 @@ void LTC_Trigger(LTC_STATE_s *ltc_state) { break; /****************************BALANCE FEEDBACK*********************************/ - case LTC_STATEMACH_BALANCEFEEDBACK: + case LTC_STATEMACH_BALANCE_FEEDBACK: ltc_state->adcMode = LTC_GPIO_MEASUREMENT_MODE; ltc_state->adcMeasCh = LTC_ADCMEAS_SINGLECHANNEL_GPIO3; @@ -1785,15 +1801,15 @@ void LTC_Trigger(LTC_STATE_s *ltc_state) { ltc_state, retVal, ltc_state->spiDiagErrorEntry, - LTC_STATEMACH_BALANCEFEEDBACK, - LTC_READ_FEEDBACK_BALANCECONTROL, + LTC_STATEMACH_BALANCE_FEEDBACK, + LTC_READ_FEEDBACK_BALANCE_CONTROL, (ltc_state->commandDataTransferTime + LTC_GetMeasurementTimeCycle(ltc_state->adcMode, ltc_state->adcMeasCh)), - LTC_STATEMACH_BALANCEFEEDBACK, - LTC_READ_FEEDBACK_BALANCECONTROL, + LTC_STATEMACH_BALANCE_FEEDBACK, + LTC_READ_FEEDBACK_BALANCE_CONTROL, LTC_STATEMACH_SHORTTIME); break; - } else if (ltc_state->substate == LTC_READ_FEEDBACK_BALANCECONTROL) { + } else if (ltc_state->substate == LTC_READ_FEEDBACK_BALANCE_CONTROL) { ltc_state->check_spi_flag = STD_OK; AFE_SetTransmitOngoing(ltc_state); retVal = LTC_ReadRegister( @@ -1806,13 +1822,13 @@ void LTC_Trigger(LTC_STATE_s *ltc_state) { ltc_state, retVal, ltc_state->spiDiagErrorEntry, - LTC_STATEMACH_BALANCEFEEDBACK, - LTC_SAVE_FEEDBACK_BALANCECONTROL, + LTC_STATEMACH_BALANCE_FEEDBACK, + LTC_SAVE_FEEDBACK_BALANCE_CONTROL, ltc_state->commandDataTransferTime + LTC_TRANSMISSION_TIMEOUT, - LTC_STATEMACH_BALANCEFEEDBACK, - LTC_SAVE_FEEDBACK_BALANCECONTROL, + LTC_STATEMACH_BALANCE_FEEDBACK, + LTC_SAVE_FEEDBACK_BALANCE_CONTROL, LTC_STATEMACH_SHORTTIME); - } else if (ltc_state->substate == LTC_SAVE_FEEDBACK_BALANCECONTROL) { + } else if (ltc_state->substate == LTC_SAVE_FEEDBACK_BALANCE_CONTROL) { bool transmitOngoing = AFE_IsTransmitOngoing(ltc_state); if ((ltc_state->timer == 0) && (transmitOngoing == true)) { DIAG_Handler( @@ -2791,7 +2807,7 @@ void LTC_Trigger(LTC_STATE_s *ltc_state) { LTC_STATEMACH_OPENWIRE_CHECK, LTC_REQUEST_PULLUP_CURRENT_OPENWIRE_CHECK, (ltc_state->commandDataTransferTime + - LTC_GetMeasurementTimeCycle(ltc_state->adcMode, LTC_ADCMEAS_ALLCHANNEL_CELLS))); + LTC_GetMeasurementTimeCycle(ltc_state->adcMode, LTC_ADCMEAS_ALL_CHANNEL_CELLS))); ltc_state->resendCommandCounter--; /* Check how many retries are left */ @@ -2802,9 +2818,9 @@ void LTC_Trigger(LTC_STATE_s *ltc_state) { LTC_STATEMACH_READVOLTAGE, LTC_READ_VOLTAGE_REGISTER_A_RDCVA_READVOLTAGE, (ltc_state->commandDataTransferTime + - LTC_GetMeasurementTimeCycle(ltc_state->adcMode, LTC_ADCMEAS_ALLCHANNEL_CELLS))); + LTC_GetMeasurementTimeCycle(ltc_state->adcMode, LTC_ADCMEAS_ALL_CHANNEL_CELLS))); /* Reuse read voltage register */ - ltc_state->reusageMeasurementMode = LTC_REUSE_READVOLT_FOR_ADOW_PUP; + ltc_state->reusageMeasurementMode = LTC_REUSE_READVOLTAGE_FOR_ADOW_PUP; } } else { DIAG_Handler( @@ -2826,7 +2842,7 @@ void LTC_Trigger(LTC_STATE_s *ltc_state) { } /* Set number of ADOW retries - send ADOW command with pull-down two times */ - ltc_state->resendCommandCounter = LTC_NMBR_REQ_ADOW_COMMANDS; + ltc_state->resendCommandCounter = LTC_NUMBER_REQ_ADOW_COMMANDS; LTC_StateTransition( ltc_state, LTC_STATEMACH_OPENWIRE_CHECK, @@ -2846,7 +2862,7 @@ void LTC_Trigger(LTC_STATE_s *ltc_state) { LTC_STATEMACH_OPENWIRE_CHECK, LTC_REQUEST_PULLDOWN_CURRENT_OPENWIRE_CHECK, (ltc_state->commandDataTransferTime + - LTC_GetMeasurementTimeCycle(ltc_state->adcMode, LTC_ADCMEAS_ALLCHANNEL_CELLS))); + LTC_GetMeasurementTimeCycle(ltc_state->adcMode, LTC_ADCMEAS_ALL_CHANNEL_CELLS))); ltc_state->resendCommandCounter--; /* Check how many retries are left */ @@ -2857,9 +2873,9 @@ void LTC_Trigger(LTC_STATE_s *ltc_state) { LTC_STATEMACH_READVOLTAGE, LTC_READ_VOLTAGE_REGISTER_A_RDCVA_READVOLTAGE, (ltc_state->commandDataTransferTime + - LTC_GetMeasurementTimeCycle(ltc_state->adcMode, LTC_ADCMEAS_ALLCHANNEL_CELLS))); + LTC_GetMeasurementTimeCycle(ltc_state->adcMode, LTC_ADCMEAS_ALL_CHANNEL_CELLS))); /* Reuse read voltage register */ - ltc_state->reusageMeasurementMode = LTC_REUSE_READVOLT_FOR_ADOW_PDOWN; + ltc_state->reusageMeasurementMode = LTC_REUSE_READVOLTAGE_FOR_ADOW_PDOWN; } } else { DIAG_Handler( @@ -2936,7 +2952,7 @@ void LTC_Trigger(LTC_STATE_s *ltc_state) { } ltc_state->triggerentry--; /* reentrance counter */ - } /* continueFunction */ + } /* continueFunction */ } /** @@ -2984,7 +3000,10 @@ static void LTC_SaveMuxMeasurement( if (ch_idx < (2u * 8u)) { val_ui = *((uint16_t *)(&pRxBuff[6u + (1u * i * 8u)])); /* raw values, all mux on all LTCs */ - /* ltc_user_mux.value[i*8*2+ch_idx] = (uint16_t)(((float_t)(val_ui))*100e-6f*1000.0f); */ /* Unit -> in V -> in mV */ + /* ltc_user_mux.value[i*8*2+ch_idx] = (uint16_t)(((float_t)(val_ui))*100e-6f*1000.0f); */ /* Unit -> + in V -> + in mV + */ } } } else { @@ -2996,7 +3015,7 @@ static void LTC_SaveMuxMeasurement( /* val_ui = *((uint16_t *)(&pRxBuff[4+i*8])); */ /* GPIO voltage in 100uV -> * 0.1 ---- conversion to mV */ temperature_ddegC = LTC_ConvertMuxVoltagesToTemperatures(val_ui / 10u); /* unit: deci °C */ - sensor_idx = ltc_muxsensortemperatur_cfg[muxseqptr->muxCh]; + sensor_idx = ltc_muxSensorTemperature_cfg[muxseqptr->muxCh]; /* wrong configuration! */ if (sensor_idx >= BS_NR_OF_TEMP_SENSORS_PER_MODULE) { FAS_ASSERT(FAS_TRAP); @@ -3006,15 +3025,13 @@ static void LTC_SaveMuxMeasurement( /* Check LTC PEC error */ if (ltc_state->ltcData.errorTable->PEC_valid[stringNumber][i] == true) { /* Reset invalid flag */ - ltc_state->ltcData.cellTemperature->invalidCellTemperature[stringNumber][i] = - ltc_state->ltcData.cellTemperature->invalidCellTemperature[stringNumber][i] & - (~(1u << sensor_idx)); + ltc_state->ltcData.cellTemperature->invalidCellTemperature[stringNumber][i][sensor_idx] = false; ltc_state->ltcData.cellTemperature->cellTemperature_ddegC[stringNumber][i][sensor_idx] = temperature_ddegC; } else { /* Set invalid flag */ - ltc_state->ltcData.cellTemperature->invalidCellTemperature[stringNumber][i] |= (1u << sensor_idx); + ltc_state->ltcData.cellTemperature->invalidCellTemperature[stringNumber][i][sensor_idx] = true; } } } @@ -3033,7 +3050,7 @@ static void LTC_SaveMuxMeasurement( * @param ltc_state state of the ltc state machine * @param pRxBuff receive buffer * @param registerSet voltage register that was read (voltage register A,B,C,D,E or F) - * @param stringNumber string addressed + * @param stringNumber string addressed * */ static void LTC_SaveRxToVoltageBuffer( @@ -3047,37 +3064,23 @@ static void LTC_SaveRxToVoltageBuffer( uint16_t voltage_index = 0; uint16_t val_ui = 0; uint16_t voltage = 0; - uint32_t bitmask = 0; uint16_t buffer_LSB = 0; uint16_t buffer_MSB = 0; bool continueFunction = true; - if (registerSet == 0u) { + if (registerSet <= 5u) { /* RDCVA command -> voltage register group A */ - cellOffset = 0; - } else if (registerSet == 1u) { /* RDCVB command -> voltage register group B */ - cellOffset = 3; - } else if (registerSet == 2u) { /* RDCVC command -> voltage register group C */ - cellOffset = 6; - } else if (registerSet == 3u) { /* RDCVD command -> voltage register group D */ - cellOffset = 9; - } else if (registerSet == 4u) { - /* RDCVD command -> voltage register group E (only for 15 and 18 cell version) */ - cellOffset = 12; - } else if (registerSet == 5u) { - /* RDCVD command -> voltage register group F (only for 18 cell version) */ - cellOffset = 15; + /* RDCVE command -> voltage register group E (only LTC6812-1 and LTC6813-1) */ + /* RDCVF command -> voltage register group F (only LTC6813-1) */ + cellOffset = registerSet * LTC_NUMBER_OF_CELL_VOLTAGES_PER_REGISTER; } else { continueFunction = false; } if (continueFunction == true) { - /* Calculate bitmask for valid flags */ - bitmask |= 0x07u << cellOffset; /* 0x07: three voltages in each register */ - /* reinitialize index counter at begin of cycle */ if (cellOffset == 0u) { (ltc_state->ltcData.usedCellIndex[stringNumber]) = 0; @@ -3085,10 +3088,10 @@ static void LTC_SaveRxToVoltageBuffer( /* Retrieve data without command and CRC*/ for (uint16_t m = 0u; m < LTC_N_LTC; m++) { - uint16_t incrementations = 0u; + uint16_t incrementation = 0u; /* parse all three voltages (3 * 2bytes) contained in one register */ - for (uint8_t c = 0u; c < 3u; c++) { + for (uint8_t c = 0u; c < LTC_NUMBER_OF_CELL_VOLTAGES_PER_REGISTER; c++) { /* index considering maximum number of cells */ voltage_index = c + cellOffset; @@ -3103,17 +3106,24 @@ static void LTC_SaveRxToVoltageBuffer( if (ltc_state->ltcData.errorTable->PEC_valid[stringNumber][m] == true) { ltc_state->ltcData.cellVoltage ->cellVoltage_mV[stringNumber][m][ltc_state->ltcData.usedCellIndex[stringNumber]] = voltage; - bitmask = ~bitmask; /* negate bitmask to only validate flags of this voltage register */ - ltc_state->ltcData.cellVoltage - ->invalidCellVoltage[stringNumber][(m / LTC_NUMBER_OF_LTC_PER_MODULE)] &= bitmask; + + /* Set the register relevant invalidCellVoltage to valid (false) */ + for (uint8_t i = 0u; i < LTC_NUMBER_OF_CELL_VOLTAGES_PER_REGISTER; i++) { + ltc_state->ltcData.cellVoltage + ->invalidCellVoltage[stringNumber][(m / LTC_NUMBER_OF_LTC_PER_MODULE)][cellOffset + i] = + false; + } } else { /* PEC_valid == false: Invalidate only flags of this voltage register */ - ltc_state->ltcData.cellVoltage - ->invalidCellVoltage[stringNumber][(m / LTC_NUMBER_OF_LTC_PER_MODULE)] |= bitmask; + for (uint8_t i = 0u; i < LTC_NUMBER_OF_CELL_VOLTAGES_PER_REGISTER; i++) { + ltc_state->ltcData.cellVoltage + ->invalidCellVoltage[stringNumber][(m / LTC_NUMBER_OF_LTC_PER_MODULE)][cellOffset + i] = + true; + } } (ltc_state->ltcData.usedCellIndex[stringNumber])++; - incrementations++; + incrementation++; if ((ltc_state->ltcData.usedCellIndex[stringNumber]) > BS_NR_OF_CELL_BLOCKS_PER_MODULE) { break; @@ -3125,7 +3135,7 @@ static void LTC_SaveRxToVoltageBuffer( * decrement used cell index if current module is not the last * module in the daisy-chain. */ if ((m + 1u) < LTC_N_LTC) { - (ltc_state->ltcData.usedCellIndex[stringNumber]) -= incrementations; + (ltc_state->ltcData.usedCellIndex[stringNumber]) -= incrementation; } } } @@ -3174,19 +3184,25 @@ static void LTC_SaveRxToGpioBuffer( ltc_state->ltcData.allGpioVoltages ->gpioVoltages_mV[stringNumber][0u + i_offset + (BS_NR_OF_GPIOS_PER_MODULE * i)] = ((buffer_LSB | (buffer_MSB << 8u))) / 10u; - /* ltc_state->ltcData.allGpioVoltages->gpiovoltage[stringNumber][0 + i_offset + BS_NR_OF_GPIOS_PER_MODULE*i]= *((uint16_t *)(&pRxBuff[4+i*8]))/10; */ + /* ltc_state->ltcData.allGpioVoltages->gpioVoltage[stringNumber][0 + i_offset + + * BS_NR_OF_GPIOS_PER_MODULE*i]= + * *((uint16_t *)(&pRxBuff[4+i*8]))/10; */ buffer_MSB = pRxBuff[6u + (i * 8u) + 1u]; buffer_LSB = pRxBuff[6u + (i * 8u)]; ltc_state->ltcData.allGpioVoltages ->gpioVoltages_mV[stringNumber][1u + i_offset + (BS_NR_OF_GPIOS_PER_MODULE * i)] = ((buffer_LSB | (buffer_MSB << 8u))) / 10u; - /* ltc_state->ltcData.allGpioVoltages->gpiovoltage[stringNumber][1 + i_offset + BS_NR_OF_GPIOS_PER_MODULE*i]= *((uint16_t *)(&pRxBuff[6+i*8]))/10; */ + /* ltc_state->ltcData.allGpioVoltages->gpioVoltage[stringNumber][1 + i_offset + + * BS_NR_OF_GPIOS_PER_MODULE*i]= + * *((uint16_t *)(&pRxBuff[6+i*8]))/10; */ buffer_MSB = pRxBuff[8u + (i * 8u) + 1u]; buffer_LSB = pRxBuff[8u + (i * 8u)]; ltc_state->ltcData.allGpioVoltages ->gpioVoltages_mV[stringNumber][2u + i_offset + (BS_NR_OF_GPIOS_PER_MODULE * i)] = ((buffer_LSB | (buffer_MSB << 8u))) / 10u; - /* ltc_state->ltcData.allGpioVoltages->gpiovoltage[stringNumber][2 + i_offset + BS_NR_OF_GPIOS_PER_MODULE*i]= *((uint16_t *)(&pRxBuff[8+i*8]))/10; */ + /* ltc_state->ltcData.allGpioVoltages->gpioVoltage[stringNumber][2 + i_offset + + * BS_NR_OF_GPIOS_PER_MODULE*i]= + * *((uint16_t *)(&pRxBuff[8+i*8]))/10; */ } else { ltc_state->ltcData.allGpioVoltages->invalidGpioVoltages[stringNumber][i] |= bitmask; } @@ -3207,13 +3223,17 @@ static void LTC_SaveRxToGpioBuffer( ltc_state->ltcData.allGpioVoltages ->gpioVoltages_mV[stringNumber][0u + i_offset + (BS_NR_OF_GPIOS_PER_MODULE * i)] = ((buffer_LSB | (buffer_MSB << 8u))) / 10u; - /* ltc_state->ltcData.allGpioVoltages->gpiovoltage[stringNumber][0 + i_offset + BS_NR_OF_GPIOS_PER_MODULE*i]= *((uint16_t *)(&pRxBuff[4+i*8]))/10; */ + /* ltc_state->ltcData.allGpioVoltages->gpioVoltage[stringNumber][0 + i_offset + + * BS_NR_OF_GPIOS_PER_MODULE*i]= + * *((uint16_t *)(&pRxBuff[4+i*8]))/10; */ buffer_MSB = pRxBuff[6u + (i * 8u) + 1u]; buffer_LSB = pRxBuff[6u + (i * 8u)]; ltc_state->ltcData.allGpioVoltages ->gpioVoltages_mV[stringNumber][1u + i_offset + (BS_NR_OF_GPIOS_PER_MODULE * i)] = ((buffer_LSB | (buffer_MSB << 8u))) / 10u; - /* ltc_state->ltcData.allGpioVoltages->gpiovoltage[stringNumber][1 + i_offset + BS_NR_OF_GPIOS_PER_MODULE*i]= *((uint16_t *)(&pRxBuff[6+i*8]))/10; */ + /* ltc_state->ltcData.allGpioVoltages->gpioVoltage[stringNumber][1 + i_offset + + * BS_NR_OF_GPIOS_PER_MODULE*i]= + * *((uint16_t *)(&pRxBuff[6+i*8]))/10; */ } else { ltc_state->ltcData.allGpioVoltages->invalidGpioVoltages[stringNumber][i] |= bitmask; } @@ -3234,19 +3254,25 @@ static void LTC_SaveRxToGpioBuffer( ltc_state->ltcData.allGpioVoltages ->gpioVoltages_mV[stringNumber][0u + i_offset + (BS_NR_OF_GPIOS_PER_MODULE * i)] = ((buffer_LSB | (buffer_MSB << 8u))) / 10u; - /* ltc_state->ltcData.allGpioVoltages->gpiovoltage[stringNumber][0 + i_offset + BS_NR_OF_GPIOS_PER_MODULE*i]= *((uint16_t *)(&pRxBuff[4+i*8]))/10; */ + /* ltc_state->ltcData.allGpioVoltages->gpioVoltage[stringNumber][0 + i_offset + + * BS_NR_OF_GPIOS_PER_MODULE*i]= + * *((uint16_t *)(&pRxBuff[4+i*8]))/10; */ buffer_MSB = pRxBuff[6u + (i * 8u) + 1u]; buffer_LSB = pRxBuff[6u + (i * 8u)]; ltc_state->ltcData.allGpioVoltages ->gpioVoltages_mV[stringNumber][1u + i_offset + (BS_NR_OF_GPIOS_PER_MODULE * i)] = ((buffer_LSB | (buffer_MSB << 8u))) / 10u; - /* ltc_state->ltcData.allGpioVoltages->gpiovoltage[stringNumber][1 + i_offset + BS_NR_OF_GPIOS_PER_MODULE*i]= *((uint16_t *)(&pRxBuff[6+i*8]))/10; */ + /* ltc_state->ltcData.allGpioVoltages->gpioVoltage[stringNumber][1 + i_offset + + * BS_NR_OF_GPIOS_PER_MODULE*i]= + * *((uint16_t *)(&pRxBuff[6+i*8]))/10; */ buffer_MSB = pRxBuff[8u + (i * 8u) + 1u]; buffer_LSB = pRxBuff[8u + (i * 8u)]; ltc_state->ltcData.allGpioVoltages ->gpioVoltages_mV[stringNumber][2u + i_offset + (BS_NR_OF_GPIOS_PER_MODULE * i)] = ((buffer_LSB | (buffer_MSB << 8u))) / 10u; - /* ltc_state->ltcData.allGpioVoltages->gpiovoltage[stringNumber][2 + i_offset + BS_NR_OF_GPIOS_PER_MODULE*i]= *((uint16_t *)(&pRxBuff[8+i*8]))/10; */ + /* ltc_state->ltcData.allGpioVoltages->gpioVoltage[stringNumber][2 + i_offset + + * BS_NR_OF_GPIOS_PER_MODULE*i]= + * *((uint16_t *)(&pRxBuff[8+i*8]))/10; */ } else { ltc_state->ltcData.allGpioVoltages->invalidGpioVoltages[stringNumber][i] |= bitmask; } @@ -3291,7 +3317,11 @@ static void LTC_SaveRxToGpioBuffer( * * @return STD_OK if there was no error, STD_NOT_OK if there was errors */ -static STD_RETURN_TYPE_e LTC_I2cCheckAck(LTC_STATE_s *ltc_state, uint16_t *pRxBuff, uint8_t mux, uint8_t stringNumber) { +static STD_RETURN_TYPE_e LTC_I2cCheckAcknowledge( + LTC_STATE_s *ltc_state, + uint16_t *pRxBuff, + uint8_t mux, + uint8_t stringNumber) { FAS_ASSERT(ltc_state != NULL_PTR); FAS_ASSERT(pRxBuff != NULL_PTR); STD_RETURN_TYPE_e muxError = STD_OK; @@ -3427,7 +3457,7 @@ static STD_RETURN_TYPE_e LTC_BalanceControl( STD_RETURN_TYPE_e retVal = STD_OK; uint8_t PEC_Check[LTC_DATA_SIZE_IN_BYTES]; - uint16_t PEC_result = 0; + uint16_t PEC_result = 0u; LTC_GetBalancingControlValues(ltc_state); @@ -3436,69 +3466,41 @@ static STD_RETURN_TYPE_e LTC_BalanceControl( pTxBuff[1] = ltc_cmdWRCFG[1]; pTxBuff[2] = ltc_cmdWRCFG[2]; pTxBuff[3] = ltc_cmdWRCFG[3]; - for (uint16_t j = 0; j < BS_NR_OF_MODULES_PER_STRING; j++) { + for (uint16_t m = 0u; m < BS_NR_OF_MODULES_PER_STRING; m++) { /* The daisy-chain works like a shift register, so the order has to be reversed: when addressing e.g. the first module in the daisy-chain, the data will be sent last on the SPI bus and when addressing e.g. the last module in the daisy-chain, the data will be sent first on the SPI bus */ - const uint16_t reverseModuleNumber = BS_NR_OF_MODULES_PER_STRING - j - 1u; + const uint16_t reverseModuleNumber = BS_NR_OF_MODULES_PER_STRING - m - 1u; /* FC = disable all pull-downs, REFON = 1 (reference always on), DTEN off, ADCOPT = 0 */ - pTxBuff[4u + (reverseModuleNumber * 8u)] = 0xFC; - pTxBuff[5u + (reverseModuleNumber * 8u)] = 0x00; - pTxBuff[6u + (reverseModuleNumber * 8u)] = 0x00; - pTxBuff[7u + (reverseModuleNumber * 8u)] = 0x00; - pTxBuff[8u + (reverseModuleNumber * 8u)] = 0x00; - pTxBuff[9u + (reverseModuleNumber * 8u)] = 0x00; - - if (ltc_state->ltcData.balancingControl - ->balancingState[stringNumber][(j * (BS_NR_OF_CELL_BLOCKS_PER_MODULE)) + 0u] == 1u) { - pTxBuff[8u + (reverseModuleNumber * 8u)] |= 0x01u; - } - if (ltc_state->ltcData.balancingControl - ->balancingState[stringNumber][(j * (BS_NR_OF_CELL_BLOCKS_PER_MODULE)) + 1u] == 1u) { - pTxBuff[8u + (reverseModuleNumber * 8u)] |= 0x02u; - } - if (ltc_state->ltcData.balancingControl - ->balancingState[stringNumber][(j * (BS_NR_OF_CELL_BLOCKS_PER_MODULE)) + 2u] == 1u) { - pTxBuff[8u + (reverseModuleNumber * 8u)] |= 0x04u; - } - if (ltc_state->ltcData.balancingControl - ->balancingState[stringNumber][(j * (BS_NR_OF_CELL_BLOCKS_PER_MODULE)) + 3u] == 1u) { - pTxBuff[8u + (reverseModuleNumber * 8u)] |= 0x08u; - } - if (ltc_state->ltcData.balancingControl - ->balancingState[stringNumber][(j * (BS_NR_OF_CELL_BLOCKS_PER_MODULE)) + 4u] == 1u) { - pTxBuff[8u + (reverseModuleNumber * 8u)] |= 0x10u; - } - if (ltc_state->ltcData.balancingControl - ->balancingState[stringNumber][(j * (BS_NR_OF_CELL_BLOCKS_PER_MODULE)) + 5u] == 1u) { - pTxBuff[8u + (reverseModuleNumber * 8u)] |= 0x20u; - } - if (ltc_state->ltcData.balancingControl - ->balancingState[stringNumber][(j * (BS_NR_OF_CELL_BLOCKS_PER_MODULE)) + 6u] == 1u) { - pTxBuff[8u + (reverseModuleNumber * 8u)] |= 0x40u; - } - if (ltc_state->ltcData.balancingControl - ->balancingState[stringNumber][(j * (BS_NR_OF_CELL_BLOCKS_PER_MODULE)) + 7u] == 1u) { - pTxBuff[8u + (reverseModuleNumber * 8u)] |= 0x80u; - } - if (ltc_state->ltcData.balancingControl - ->balancingState[stringNumber][(j * (BS_NR_OF_CELL_BLOCKS_PER_MODULE)) + 8u] == 1u) { - pTxBuff[9u + (reverseModuleNumber * 8u)] |= 0x01u; - } - if (ltc_state->ltcData.balancingControl - ->balancingState[stringNumber][(j * (BS_NR_OF_CELL_BLOCKS_PER_MODULE)) + 9u] == 1u) { - pTxBuff[9u + (reverseModuleNumber * 8u)] |= 0x02u; - } - if (ltc_state->ltcData.balancingControl - ->balancingState[stringNumber][(j * (BS_NR_OF_CELL_BLOCKS_PER_MODULE)) + 10u] == 1u) { - pTxBuff[9u + (reverseModuleNumber * 8u)] |= 0x04u; - } - if (ltc_state->ltcData.balancingControl - ->balancingState[stringNumber][(j * (BS_NR_OF_CELL_BLOCKS_PER_MODULE)) + 11u] == 1u) { - pTxBuff[9u + (reverseModuleNumber * 8u)] |= 0x08u; + pTxBuff[4u + (reverseModuleNumber * 8u)] = 0xFCu; + pTxBuff[5u + (reverseModuleNumber * 8u)] = 0x00u; + pTxBuff[6u + (reverseModuleNumber * 8u)] = 0x00u; + pTxBuff[7u + (reverseModuleNumber * 8u)] = 0x00u; + pTxBuff[8u + (reverseModuleNumber * 8u)] = 0x00u; + pTxBuff[9u + (reverseModuleNumber * 8u)] = 0x00u; + + /* Iterate over all cell block to check if any of first 12 balancing inputs shall be activated */ + for (uint8_t cb = 0u; cb < BS_NR_OF_CELL_BLOCKS_PER_MODULE; cb++) { + if (ltc_state->ltcData.balancingControl->activateBalancing[stringNumber][m][cb] == true) { + /* Activate balancing for the cell block */ + const uint8_t voltageInputIndex = LTC_GetVoltageInputIndexFromCellBlockIndex(cb); + /* Check if index is within the possible balancing inputs for WRCFG register */ + if (voltageInputIndex <= LTC_UPPER_INDEX_FOR_BALANCING_OUTPUTS_IN_REGISTER_WRCFG) { + /* --------- Set respective balancing flags ----------- + * Balancing outputs 0 - 7 are in byte 8 + * Balancing outputs 8 - 11 are in bits 0-3 in byte 9 */ + if (voltageInputIndex <= 7u) { + pTxBuff[8u + (reverseModuleNumber * 8u)] |= (0x01u << voltageInputIndex); + } else { + const uint8_t correctedIndexForByte9 = voltageInputIndex % 8u; + pTxBuff[9u + (reverseModuleNumber * 8u)] |= (0x01u << correctedIndexForByte9); + } + } + } } + /* Copy data for PEC calculation */ PEC_Check[0] = pTxBuff[4u + (reverseModuleNumber * 8u)]; PEC_Check[1] = pTxBuff[5u + (reverseModuleNumber * 8u)]; PEC_Check[2] = pTxBuff[6u + (reverseModuleNumber * 8u)]; @@ -3516,44 +3518,41 @@ static STD_RETURN_TYPE_e LTC_BalanceControl( pTxBuff[1] = ltc_cmdWRCFG2[1]; pTxBuff[2] = ltc_cmdWRCFG2[2]; pTxBuff[3] = ltc_cmdWRCFG2[3]; - for (uint16_t j = 0; j < BS_NR_OF_MODULES_PER_STRING; j++) { + for (uint16_t m = 0u; m < BS_NR_OF_MODULES_PER_STRING; m++) { /* The daisy-chain works like a shift register, so the order has to be reversed: when addressing e.g. the first module in the daisy-chain, the data will be sent last on the SPI bus and when addressing e.g. the last module in the daisy-chain, the data will be sent first on the SPI bus */ - const uint16_t reverseModuleNumber = BS_NR_OF_MODULES_PER_STRING - j - 1u; + const uint16_t reverseModuleNumber = BS_NR_OF_MODULES_PER_STRING - m - 1u; /* 0x0F = disable pull-downs on GPIO6-9 */ - pTxBuff[4u + (reverseModuleNumber * 8u)] = 0x0F; - pTxBuff[5u + (reverseModuleNumber * 8u)] = 0x00; - pTxBuff[6u + (reverseModuleNumber * 8u)] = 0x00; - pTxBuff[7u + (reverseModuleNumber * 8u)] = 0x00; - pTxBuff[8u + (reverseModuleNumber * 8u)] = 0x00; - pTxBuff[9u + (reverseModuleNumber * 8u)] = 0x00; - - if (ltc_state->ltcData.balancingControl - ->balancingState[stringNumber][(j * (BS_NR_OF_CELL_BLOCKS_PER_MODULE)) + 12u] == 1u) { - pTxBuff[4u + (reverseModuleNumber * 8u)] |= 0x10u; - } - if (ltc_state->ltcData.balancingControl - ->balancingState[stringNumber][(j * (BS_NR_OF_CELL_BLOCKS_PER_MODULE)) + 13u] == 1u) { - pTxBuff[4u + (reverseModuleNumber * 8u)] |= 0x20u; - } - if (ltc_state->ltcData.balancingControl - ->balancingState[stringNumber][(j * (BS_NR_OF_CELL_BLOCKS_PER_MODULE)) + 14u] == 1u) { - pTxBuff[4u + (reverseModuleNumber * 8u)] |= 0x40u; - } - if (BS_NR_OF_CELL_BLOCKS_PER_MODULE > 15u) { - if (ltc_state->ltcData.balancingControl - ->balancingState[stringNumber][(j * (BS_NR_OF_CELL_BLOCKS_PER_MODULE)) + 15u] == 1u) { - pTxBuff[4u + (reverseModuleNumber * 8u)] |= 0x80u; - } - if (ltc_state->ltcData.balancingControl - ->balancingState[stringNumber][(j * (BS_NR_OF_CELL_BLOCKS_PER_MODULE)) + 16u] == 1u) { - pTxBuff[5u + (reverseModuleNumber * 8u)] |= 0x01u; - } - if (ltc_state->ltcData.balancingControl - ->balancingState[stringNumber][(j * (BS_NR_OF_CELL_BLOCKS_PER_MODULE)) + 17u] == 1u) { - pTxBuff[5u + (reverseModuleNumber * 8u)] |= 0x02u; + pTxBuff[4u + (reverseModuleNumber * 8u)] = 0x0Fu; + pTxBuff[5u + (reverseModuleNumber * 8u)] = 0x00u; + pTxBuff[6u + (reverseModuleNumber * 8u)] = 0x00u; + pTxBuff[7u + (reverseModuleNumber * 8u)] = 0x00u; + pTxBuff[8u + (reverseModuleNumber * 8u)] = 0x00u; + pTxBuff[9u + (reverseModuleNumber * 8u)] = 0x00u; + + /* Iterate over all cell block to check if any of first 12 balancing inputs shall be activated */ + for (uint8_t cb = 0u; cb < BS_NR_OF_CELL_BLOCKS_PER_MODULE; cb++) { + if (ltc_state->ltcData.balancingControl->activateBalancing[stringNumber][m][cb] == true) { + /* Activate balancing for the cell block */ + const uint8_t voltageInputIndex = LTC_GetVoltageInputIndexFromCellBlockIndex(cb); + /* Check if index is within the possible balancing inputs for WRCFG register */ + if ((voltageInputIndex >= LTC_LOWER_INDEX_FOR_BALANCING_OUTPUTS_IN_REGISTER_WRCFG2) && + (voltageInputIndex <= LTC_UPPER_INDEX_FOR_BALANCING_OUTPUTS_IN_REGISTER_WRCFG2)) { + /* --------- Set respective balancing flags ----------- + * Balancing outputs 12 - 15 are inbits 4-7 in byte 4 + * Balancing outputs 16 - 17 are in bits 0-1 in byte 5 */ + if (voltageInputIndex <= 15u) { + /* Indices 12 - 15 */ + const uint8_t correctedIndexForByte4 = voltageInputIndex % 12u; + pTxBuff[4u + (reverseModuleNumber * 8u)] |= (0x10u << correctedIndexForByte4); + } else { + /* Indices 16 + 17 */ + const uint8_t correctedIndexForByte5 = voltageInputIndex % 16u; + pTxBuff[5u + (reverseModuleNumber * 8u)] |= (0x01u << correctedIndexForByte5); + } + } } } @@ -3605,7 +3604,7 @@ static void LTC_ResetErrorTable(LTC_STATE_s *ltc_state) { * For 2 cell voltages or 1 GPIO, the measurement time is the same. * As a consequence, this function is used for cell voltage and for * GPIO measurement. - * @param adcMode LTC ADCmeasurement mode (fast, normal or filtered) + * @param adcMode LTC ADCMeasurement mode (fast, normal or filtered) * @param adcMeasCh number of channels measured for GPIOS (one at a time * for multiplexers or all five GPIOs) or number of cell * voltage measured (2 cells or all cells) @@ -3614,7 +3613,7 @@ static void LTC_ResetErrorTable(LTC_STATE_s *ltc_state) { static uint16_t LTC_GetMeasurementTimeCycle(LTC_ADCMODE_e adcMode, LTC_ADCMEAS_CHAN_e adcMeasCh) { uint16_t retVal = LTC_ADCMEAS_UNDEFINED; /* default */ - if (adcMeasCh == LTC_ADCMEAS_ALLCHANNEL_CELLS) { + if (adcMeasCh == LTC_ADCMEAS_ALL_CHANNEL_CELLS) { if ((adcMode == LTC_ADCMODE_FAST_DCP0) || (adcMode == LTC_ADCMODE_FAST_DCP1)) { retVal = LTC_STATEMACH_MEAS_ALL_CELLS_FAST_TCYCLE; } else if ((adcMode == LTC_ADCMODE_NORMAL_DCP0) || (adcMode == LTC_ADCMODE_NORMAL_DCP1)) { @@ -3630,7 +3629,7 @@ static uint16_t LTC_GetMeasurementTimeCycle(LTC_ADCMODE_e adcMode, LTC_ADCMEAS_C } else if ((adcMode == LTC_ADCMODE_FILTERED_DCP0) || (adcMode == LTC_ADCMODE_FILTERED_DCP1)) { retVal = LTC_STATEMACH_MEAS_TWO_CELLS_FILTERED_TCYCLE; } - } else if (adcMeasCh == LTC_ADCMEAS_ALLCHANNEL_GPIOS) { + } else if (adcMeasCh == LTC_ADCMEAS_ALL_CHANNEL_GPIOS) { if ((adcMode == LTC_ADCMODE_FAST_DCP0) || (adcMode == LTC_ADCMODE_FAST_DCP1)) { retVal = LTC_STATEMACH_MEAS_ALL_GPIOS_FAST_TCYCLE; } else if ((adcMode == LTC_ADCMODE_NORMAL_DCP0) || (adcMode == LTC_ADCMODE_NORMAL_DCP1)) { @@ -3662,7 +3661,7 @@ static uint16_t LTC_GetMeasurementTimeCycle(LTC_ADCMODE_e adcMode, LTC_ADCMEAS_C * This function sends an instruction to the daisy-chain via SPI, in order to start voltage measurement for all cells. * * @param pSpiInterface pointer to SPI configuration - * @param adcMode LTC ADCmeasurement mode (fast, normal or filtered) + * @param adcMode LTC ADCMeasurement mode (fast, normal or filtered) * @param adcMeasCh number of cell voltage measured (2 cells or all cells) * * @return retVal #STD_OK if dummy byte was sent correctly by SPI, #STD_NOT_OK otherwise @@ -3675,7 +3674,7 @@ static STD_RETURN_TYPE_e LTC_StartVoltageMeasurement( FAS_ASSERT(pSpiInterface != NULL_PTR); STD_RETURN_TYPE_e retVal = STD_OK; - if (adcMeasCh == LTC_ADCMEAS_ALLCHANNEL_CELLS) { + if (adcMeasCh == LTC_ADCMEAS_ALL_CHANNEL_CELLS) { if (adcMode == LTC_ADCMODE_FAST_DCP0) { retVal = LTC_TRANSMIT_COMMAND(pSpiInterface, ltc_cmdADCV_fast_DCP0); } else if (adcMode == LTC_ADCMODE_NORMAL_DCP0) { @@ -3709,7 +3708,7 @@ static STD_RETURN_TYPE_e LTC_StartVoltageMeasurement( * start the measurement. * * @param pSpiInterface pointer to SPI configuration - * @param adcMode LTC ADCmeasurement mode (fast, normal or filtered) + * @param adcMode LTC ADCMeasurement mode (fast, normal or filtered) * @param adcMeasCh number of channels measured for GPIOS (one at a * time, typically when multiplexers are used, or all * five GPIOs) @@ -3724,14 +3723,14 @@ static STD_RETURN_TYPE_e LTC_StartGpioMeasurement( FAS_ASSERT(pSpiInterface != NULL_PTR); STD_RETURN_TYPE_e retVal; - if (adcMeasCh == LTC_ADCMEAS_ALLCHANNEL_GPIOS) { + if (adcMeasCh == LTC_ADCMEAS_ALL_CHANNEL_GPIOS) { if ((adcMode == LTC_ADCMODE_FAST_DCP0) || (adcMode == LTC_ADCMODE_FAST_DCP1)) { - retVal = LTC_TRANSMIT_COMMAND(pSpiInterface, ltc_cmdADAX_fast_ALLGPIOS); + retVal = LTC_TRANSMIT_COMMAND(pSpiInterface, ltc_cmdADAX_fast_ALL_GPIOS); } else if ((adcMode == LTC_ADCMODE_FILTERED_DCP0) || (adcMode == LTC_ADCMODE_FILTERED_DCP1)) { - retVal = LTC_TRANSMIT_COMMAND(pSpiInterface, ltc_cmdADAX_filtered_ALLGPIOS); + retVal = LTC_TRANSMIT_COMMAND(pSpiInterface, ltc_cmdADAX_filtered_ALL_GPIOS); } else { /*if (adcMode == LTC_ADCMODE_NORMAL_DCP0 || adcMode == LTC_ADCMODE_NORMAL_DCP1)*/ - retVal = LTC_TRANSMIT_COMMAND(pSpiInterface, ltc_cmdADAX_normal_ALLGPIOS); + retVal = LTC_TRANSMIT_COMMAND(pSpiInterface, ltc_cmdADAX_normal_ALL_GPIOS); } } else if (adcMeasCh == LTC_ADCMEAS_SINGLECHANNEL_GPIO1) { /* Single Channel */ @@ -3779,7 +3778,7 @@ static STD_RETURN_TYPE_e LTC_StartGpioMeasurement( * This function sends an instruction to the daisy-chain via SPI to start the measurement. * * @param pSpiInterface pointer to SPI configuration - * @param adcMode LTC ADCmeasurement mode (fast, normal or filtered) + * @param adcMode LTC ADCMeasurement mode (fast, normal or filtered) * @param PUP pull-up bit for pull-up or pull-down current (0: pull-down, 1: pull-up) * * @return retVal #STD_OK if command was sent correctly by SPI, #STD_NOT_OK otherwise @@ -4640,18 +4639,22 @@ static uint32_t LTC_GetSpiClock(SPI_INTERFACE_CONFIG_s *pSpiInterface) { /* Reference manual p.909 */ /* The shift by 3 puts the bits 5:3 to the first position */ /* Division are made by powers of 2 which corresponds to shifting to the right */ - /* Then 0 corresponds to divide by 2, 1 corresponds to divide by 4... so 1 has to be added to the value of the configuration bits */ + /* Then 0 corresponds to divide by 2, 1 corresponds to divide by 4... so 1 has to be added to the value of the + * configuration bits */ /* SPI_Clock = HAL_RCC_GetPCLK1Freq()>>((LTC_SPI_PRESCALER>>3)+1); } */ - /* if (LTC_SPI_INSTANCE == SPI1 || LTC_SPI_INSTANCE == SPI4 || LTC_SPI_INSTANCE == SPI5 || LTC_SPI_INSTANCE == SPI6) { */ + /* if (LTC_SPI_INSTANCE == SPI1 || LTC_SPI_INSTANCE == SPI4 || LTC_SPI_INSTANCE == SPI5 || LTC_SPI_INSTANCE == SPI6) + * { + */ /* SPI1, SPI4, SPI5 and SPI6 are connected to APB2 (PCLK2) */ /* The prescaler setup bits LTC_SPI_PRESCALER corresponds to the bits 5:3 in the SPI_CR1 register */ /* Reference manual p.909 */ /* The shift by 3 puts the bits 5:3 to the first position */ /* Division are made by powers of 2 which corresponds to shifting to the right */ - /* Then 0 corresponds to divide by 2, 1 corresponds to divide by 4... so 1 has to be added to the value of the configuration bits */ + /* Then 0 corresponds to divide by 2, 1 corresponds to divide by 4... so 1 has to be added to the value of the + * configuration bits */ /* SPI_Clock = HAL_RCC_GetPCLK2Freq()>>((LTC_SPI_PRESCALER>>3)+1); } */ @@ -4754,22 +4757,22 @@ static void LTC_SetFirstMeasurementCycleFinished(LTC_STATE_s *ltc_state) { extern void LTC_InitializeMonitoringPin(void) { /* Set 3rd PE pins to enable daisy chains */ - PEX_SetPinDirectionOutput(PEX_PORT_EXPANDER3, PEX_PIN10); - PEX_SetPinDirectionOutput(PEX_PORT_EXPANDER3, PEX_PIN11); - PEX_SetPinDirectionOutput(PEX_PORT_EXPANDER3, PEX_PIN12); - PEX_SetPinDirectionOutput(PEX_PORT_EXPANDER3, PEX_PIN13); - PEX_SetPinDirectionOutput(PEX_PORT_EXPANDER3, PEX_PIN14); - PEX_SetPinDirectionOutput(PEX_PORT_EXPANDER3, PEX_PIN15); - PEX_SetPinDirectionOutput(PEX_PORT_EXPANDER3, PEX_PIN16); - PEX_SetPinDirectionOutput(PEX_PORT_EXPANDER3, PEX_PIN17); - PEX_SetPin(PEX_PORT_EXPANDER3, PEX_PIN10); - PEX_SetPin(PEX_PORT_EXPANDER3, PEX_PIN11); - PEX_SetPin(PEX_PORT_EXPANDER3, PEX_PIN12); - PEX_SetPin(PEX_PORT_EXPANDER3, PEX_PIN13); - PEX_SetPin(PEX_PORT_EXPANDER3, PEX_PIN14); - PEX_SetPin(PEX_PORT_EXPANDER3, PEX_PIN15); - PEX_SetPin(PEX_PORT_EXPANDER3, PEX_PIN16); - PEX_SetPin(PEX_PORT_EXPANDER3, PEX_PIN17); + PEX_SetPinDirectionOutput(PEX_PORT_EXPANDER3, PEX_PORT_1_PIN_0); + PEX_SetPinDirectionOutput(PEX_PORT_EXPANDER3, PEX_PORT_1_PIN_1); + PEX_SetPinDirectionOutput(PEX_PORT_EXPANDER3, PEX_PORT_1_PIN_2); + PEX_SetPinDirectionOutput(PEX_PORT_EXPANDER3, PEX_PORT_1_PIN_3); + PEX_SetPinDirectionOutput(PEX_PORT_EXPANDER3, PEX_PORT_1_PIN_4); + PEX_SetPinDirectionOutput(PEX_PORT_EXPANDER3, PEX_PORT_1_PIN_5); + PEX_SetPinDirectionOutput(PEX_PORT_EXPANDER3, PEX_PORT_1_PIN_6); + PEX_SetPinDirectionOutput(PEX_PORT_EXPANDER3, PEX_PORT_1_PIN_7); + PEX_SetPin(PEX_PORT_EXPANDER3, PEX_PORT_1_PIN_0); + PEX_SetPin(PEX_PORT_EXPANDER3, PEX_PORT_1_PIN_1); + PEX_SetPin(PEX_PORT_EXPANDER3, PEX_PORT_1_PIN_2); + PEX_SetPin(PEX_PORT_EXPANDER3, PEX_PORT_1_PIN_3); + PEX_SetPin(PEX_PORT_EXPANDER3, PEX_PORT_1_PIN_4); + PEX_SetPin(PEX_PORT_EXPANDER3, PEX_PORT_1_PIN_5); + PEX_SetPin(PEX_PORT_EXPANDER3, PEX_PORT_1_PIN_6); + PEX_SetPin(PEX_PORT_EXPANDER3, PEX_PORT_1_PIN_7); } /*========== Externalized Static Function Implementations (Unit Test) =======*/ @@ -4821,9 +4824,9 @@ TEST_LTC_DEFINE_GET(ltc_cmdADAX_fast_GPIO2) TEST_LTC_DEFINE_GET(ltc_cmdADAX_normal_GPIO3) TEST_LTC_DEFINE_GET(ltc_cmdADAX_filtered_GPIO3) TEST_LTC_DEFINE_GET(ltc_cmdADAX_fast_GPIO3) -TEST_LTC_DEFINE_GET(ltc_cmdADAX_normal_ALLGPIOS) -TEST_LTC_DEFINE_GET(ltc_cmdADAX_filtered_ALLGPIOS) -TEST_LTC_DEFINE_GET(ltc_cmdADAX_fast_ALLGPIOS) +TEST_LTC_DEFINE_GET(ltc_cmdADAX_normal_ALL_GPIOS) +TEST_LTC_DEFINE_GET(ltc_cmdADAX_filtered_ALL_GPIOS) +TEST_LTC_DEFINE_GET(ltc_cmdADAX_fast_ALL_GPIOS) TEST_LTC_DEFINE_GET(ltc_BC_cmdADOW_PUP_normal_DCP0) TEST_LTC_DEFINE_GET(ltc_BC_cmdADOW_PDOWN_normal_DCP0) TEST_LTC_DEFINE_GET(ltc_BC_cmdADOW_PUP_filtered_DCP0) diff --git a/src/app/driver/afe/ltc/6813-1/ltc_6813-1.json b/src/app/driver/afe/ltc/6813-1/ltc_6813-1.json index 2183cc4a..c7db9b67 100644 --- a/src/app/driver/afe/ltc/6813-1/ltc_6813-1.json +++ b/src/app/driver/afe/ltc/6813-1/ltc_6813-1.json @@ -1,9 +1,9 @@ { - "include": [ - ".", - "config", - "../common", - "../common/config", - "../../api" - ] + "include": [ + ".", + "config", + "../common", + "../common/config", + "../../api" + ] } diff --git a/src/app/driver/afe/ltc/6813-1/wscript b/src/app/driver/afe/ltc/6813-1/wscript old mode 100644 new mode 100755 index 62b2aba3..39fa06c9 --- a/src/app/driver/afe/ltc/6813-1/wscript +++ b/src/app/driver/afe/ltc/6813-1/wscript @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause diff --git a/src/app/driver/afe/ltc/api/ltc_afe.c b/src/app/driver/afe/ltc/api/ltc_afe.c index e4fd6cfa..c76c204a 100644 --- a/src/app/driver/afe/ltc/api/ltc_afe.c +++ b/src/app/driver/afe/ltc/api/ltc_afe.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,12 +43,13 @@ * @file ltc_afe.c * @author foxBMS Team * @date 2020-05-08 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup DRIVER + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS * @prefix AFE * * @brief AFE driver implementation for LTC ICs + * @details TODO */ /*========== Includes =======================================================*/ @@ -118,7 +119,7 @@ extern STD_RETURN_TYPE_e AFE_RequestTemperatureRead(uint8_t string) { extern STD_RETURN_TYPE_e AFE_RequestBalancingFeedbackRead(uint8_t string) { FAS_ASSERT(string < BS_NR_OF_STRINGS); STD_RETURN_TYPE_e retval = STD_NOT_OK; - LTC_REQUEST_s statereq = {.request = LTC_STATE_BALANCEFEEDBACK_REQUEST, .string = string}; + LTC_REQUEST_s statereq = {.request = LTC_STATE_BALANCE_FEEDBACK_REQUEST, .string = string}; if (LTC_SetStateRequest(<c_stateBase, statereq) == LTC_OK) { retval = STD_OK; diff --git a/src/app/driver/afe/ltc/common/config/ltc_cfg.h b/src/app/driver/afe/ltc/common/config/ltc_cfg.h index 8ee9f4e5..d10bfbd7 100644 --- a/src/app/driver/afe/ltc/common/config/ltc_cfg.h +++ b/src/app/driver/afe/ltc/common/config/ltc_cfg.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file ltc_cfg.h * @author foxBMS Team * @date 2015-02-18 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS_CONFIGURATION * @prefix LTC * * @brief Headers for the configuration for the LTC analog front-end. - * + * @details TODO */ #ifndef FOXBMS__LTC_CFG_H_ diff --git a/src/app/driver/afe/ltc/common/ltc.h b/src/app/driver/afe/ltc/common/ltc.h index e1827876..2dc128d4 100644 --- a/src/app/driver/afe/ltc/common/ltc.h +++ b/src/app/driver/afe/ltc/common/ltc.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file ltc.h * @author foxBMS Team * @date 2015-09-01 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix LTC * * @brief Headers for the driver for the LTC analog front-end. - * + * @details TODO */ #ifndef FOXBMS__LTC_H_ @@ -123,12 +123,12 @@ extern bool LTC_IsFirstMeasurementCycleFinished(LTC_STATE_s *ltc_state); extern void LTC_SaveVoltages(LTC_STATE_s *ltc_state, uint8_t stringNumber); /** - * @brief stores the measured temperatures and the measured multiplexer feedbacks in the database. + * @brief stores the measured temperatures and the measured multiplexer feedback in the database. * * This function loops through the temperature and multiplexer feedback data of all modules * in the LTC daisy-chain that are stored in the LTC_MultiplexerVoltages buffer and writes * them in the database. - * At each write iteration, the variables named "state" and related to temperatures and multiplexer feedbacks + * At each write iteration, the variables named "state" and related to temperatures and multiplexer feedback * in the database are incremented. * * @param ltc_state state of the ltc state machine @@ -141,7 +141,7 @@ extern void LTC_SaveTemperatures(LTC_STATE_s *ltc_state, uint8_t stringNumber); * @brief stores the measured GPIOs in the database. * * This function loops through the data of all modules in the LTC daisy-chain that are - * stored in the ltc_allgpiovoltage buffer and writes them in the database. + * stored in the ltc_AllGpioVoltage buffer and writes them in the database. * At each write iteration, the variable named "state" and related to voltages in the * database is incremented. * @@ -219,9 +219,9 @@ TEST_LTC_DECLARE_GET(ltc_cmdADAX_fast_GPIO2); TEST_LTC_DECLARE_GET(ltc_cmdADAX_normal_GPIO3); TEST_LTC_DECLARE_GET(ltc_cmdADAX_filtered_GPIO3); TEST_LTC_DECLARE_GET(ltc_cmdADAX_fast_GPIO3); -TEST_LTC_DECLARE_GET(ltc_cmdADAX_normal_ALLGPIOS); -TEST_LTC_DECLARE_GET(ltc_cmdADAX_filtered_ALLGPIOS); -TEST_LTC_DECLARE_GET(ltc_cmdADAX_fast_ALLGPIOS); +TEST_LTC_DECLARE_GET(ltc_cmdADAX_normal_ALL_GPIOS); +TEST_LTC_DECLARE_GET(ltc_cmdADAX_filtered_ALL_GPIOS); +TEST_LTC_DECLARE_GET(ltc_cmdADAX_fast_ALL_GPIOS); TEST_LTC_DECLARE_GET(ltc_BC_cmdADOW_PUP_normal_DCP0); TEST_LTC_DECLARE_GET(ltc_BC_cmdADOW_PDOWN_normal_DCP0); TEST_LTC_DECLARE_GET(ltc_BC_cmdADOW_PUP_filtered_DCP0); diff --git a/src/app/driver/afe/ltc/common/ltc_afe_dma.c b/src/app/driver/afe/ltc/common/ltc_afe_dma.c index f5d9e53b..f9ccaf1c 100644 --- a/src/app/driver/afe/ltc/common/ltc_afe_dma.c +++ b/src/app/driver/afe/ltc/common/ltc_afe_dma.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file ltc_afe_dma.c * @author foxBMS Team * @date 2020-05-27 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix AFE * * @brief Driver for the DMA module for the LTC. - * + * @details TODO */ /*========== Includes =======================================================*/ diff --git a/src/app/driver/afe/ltc/common/ltc_afe_dma.h b/src/app/driver/afe/ltc/common/ltc_afe_dma.h index 6df5b64b..43c1fa21 100644 --- a/src/app/driver/afe/ltc/common/ltc_afe_dma.h +++ b/src/app/driver/afe/ltc/common/ltc_afe_dma.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file ltc_afe_dma.h * @author foxBMS Team * @date 2020-05-27 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix AFE * * @brief Headers for the driver for the DMA module for the LTC. - * + * @details TODO */ #ifndef FOXBMS__LTC_AFE_DMA_H_ diff --git a/src/app/driver/afe/ltc/common/ltc_defs.h b/src/app/driver/afe/ltc/common/ltc_defs.h index 276f4366..197da4b6 100644 --- a/src/app/driver/afe/ltc/common/ltc_defs.h +++ b/src/app/driver/afe/ltc/common/ltc_defs.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file ltc_defs.h * @author foxBMS Team * @date 2015-09-01 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix LTC * * @brief Headers for the driver for the LTC analog front-end. - * + * @details TODO */ #ifndef FOXBMS__LTC_DEFS_H_ @@ -107,15 +107,15 @@ typedef enum { /** Number of measured channels */ typedef enum { LTC_ADCMEAS_UNDEFINED, /*!< not defined */ - LTC_ADCMEAS_ALLCHANNEL_CELLS, /*!< all cell voltages are measured */ + LTC_ADCMEAS_ALL_CHANNEL_CELLS, /*!< all cell voltages are measured */ LTC_ADCMEAS_SINGLECHANNEL_TWOCELLS, /*!< only two cell voltages are measured */ - LTC_ADCMEAS_ALLCHANNEL_GPIOS, /*!< all GPIO voltages are measured */ + LTC_ADCMEAS_ALL_CHANNEL_GPIOS, /*!< all GPIO voltages are measured */ LTC_ADCMEAS_SINGLECHANNEL_GPIO1, /*!< only a single ADC channel (GPIO1) is measured */ LTC_ADCMEAS_SINGLECHANNEL_GPIO2, /*!< only a single ADC channel (GPIO2) is measured */ LTC_ADCMEAS_SINGLECHANNEL_GPIO3, /*!< only a single ADC channel (GPIO3) is measured */ LTC_ADCMEAS_SINGLECHANNEL_GPIO4, /*!< only a single ADC channel (GPIO4) is measured */ LTC_ADCMEAS_SINGLECHANNEL_GPIO5, /*!< only a single ADC channel (GPIO5) is measured */ - LTC_ADCMEAS_ALLCHANNEL_SC, /*!< all ADC channels + sum of cells are measured */ + LTC_ADCMEAS_ALL_CHANNEL_SC, /*!< all ADC channels + sum of cells are measured */ } LTC_ADCMEAS_CHAN_e; /** States of the LTC state machine */ @@ -131,8 +131,8 @@ typedef enum { LTC_STATEMACH_READVOLTAGE, /*!< */ LTC_STATEMACH_MUXMEASUREMENT, /*!< Mux (Temperature and Balancing) Measurement */ LTC_STATEMACH_MUXMEASUREMENT_FINISHED, /*!< */ - LTC_STATEMACH_BALANCECONTROL, /*!< */ - LTC_STATEMACH_ALLGPIOMEASUREMENT, /*!< */ + LTC_STATEMACH_BALANCE_CONTROL, /*!< */ + LTC_STATEMACH_ALL_GPIO_MEASUREMENT, /*!< */ LTC_STATEMACH_READALLGPIO, /*!< */ LTC_STATEMACH_READVOLTAGE_2CELLS, LTC_STATEMACH_STARTMEAS_2CELLS, @@ -141,23 +141,23 @@ typedef enum { LTC_STATEMACH_EEPROM_READ, /*!< Control of the external EEPROM */ LTC_STATEMACH_EEPROM_WRITE, /*!< Control of the external EEPROM */ LTC_STATEMACH_TEMP_SENS_READ, /*!< Control of the external temperature sensor */ - LTC_STATEMACH_BALANCEFEEDBACK, + LTC_STATEMACH_BALANCE_FEEDBACK, LTC_STATEMACH_OPENWIRE_CHECK, LTC_STATEMACH_DEVICE_PARAMETER, LTC_STATEMACH_ADC_ACCURACY, LTC_STATEMACH_DIGITAL_FILTER, - LTC_STATEMACH_VOLTMEAS_SUMOFCELLS, + LTC_STATEMACH_VOLTAGE_MEASURE_SUM_OF_CELLS, LTC_STATEMACH_EEPROM_READ_UID, /*!< Control of the external EEPROM */ LTC_STATEMACH_USER_IO_CONTROL_TI, /*!< Control of the user port expander */ LTC_STATEMACH_USER_IO_FEEDBACK_TI, /*!< Control of the user port expander */ LTC_STATEMACH_STARTMEAS_CONTINUE, LTC_STATEMACH_MEASCYCLE_FINISHED, - LTC_STATEMACH_UNDEFINED, /*!< undefined state */ - LTC_STATEMACH_RESERVED1, /*!< reserved state */ - LTC_STATEMACH_ERROR_SPIFAILED, /*!< Error-State: SPI error */ - LTC_STATEMACH_ERROR_PECFAILED, /*!< Error-State: PEC error */ - LTC_STATEMACH_ERROR_MUXFAILED, /*!< Error-State: multiplexer error */ - LTC_STATEMACH_ERROR_INITIALIZATION, /*!< Error-State: initialization error */ + LTC_STATEMACH_UNDEFINED, /*!< undefined state */ + LTC_STATEMACH_RESERVED1, /*!< reserved state */ + LTC_STATEMACH_ERROR_SPIFAILED, /*!< Error-State: SPI error */ + LTC_STATEMACH_ERROR_PEC_FAILED, /*!< Error-State: PEC error */ + LTC_STATEMACH_ERROR_MULTIPLEXER_FAILED, /*!< Error-State: multiplexer error */ + LTC_STATEMACH_ERROR_INITIALIZATION, /*!< Error-State: initialization error */ } LTC_STATEMACH_e; /** General substates */ @@ -206,32 +206,32 @@ typedef enum { LTC_READ_AUXILIARY_REGISTER_B_RDAUXB, /*!< */ LTC_READ_AUXILIARY_REGISTER_C_RDAUXC, /*!< */ LTC_READ_AUXILIARY_REGISTER_D_RDAUXD, /*!< */ - LTC_EXIT_READAUXILIARY_ALLGPIOS, /*!< */ + LTC_EXIT_READAUXILIARY_ALL_GPIOS, /*!< */ } LTC_STATEMACH_READVOLTAGE_SUB_e; /** Substates for the cell voltage + SC measurement state */ typedef enum { - LTC_VOLTMEAS_SC_TRIGGER_CONVERSION, - LTC_VOLTMEAS_SC_READ_SC, - LTC_EXIT_VOLTMEAS_SC, + LTC_VOLTAGE_MEASURE_SC_TRIGGER_CONVERSION, + LTC_VOLTAGE_MEASURE_SC_READ_SC, + LTC_EXIT_VOLTAGE_MEASURE_SC, } LTC_STATEMACH_READVOLTAGE_SC_SUB_e; /** Substates for the balance control state */ typedef enum { /* Init-Sequence */ - LTC_CONFIG_BALANCECONTROL, /*!< */ - LTC_CONFIG2_BALANCECONTROL, /*!< */ - LTC_CONFIG2_BALANCECONTROL_END, /*!< */ - LTC_REQUEST_FEEDBACK_BALANCECONTROL, /*!< */ - LTC_READ_FEEDBACK_BALANCECONTROL, /*!< */ - LTC_SAVE_FEEDBACK_BALANCECONTROL, /*!< */ - LTC_EXIT_BALANCECONTROL, /*!< */ + LTC_CONFIG_BALANCE_CONTROL, /*!< */ + LTC_CONFIG2_BALANCE_CONTROL, /*!< */ + LTC_CONFIG2_BALANCE_CONTROL_END, /*!< */ + LTC_REQUEST_FEEDBACK_BALANCE_CONTROL, /*!< */ + LTC_READ_FEEDBACK_BALANCE_CONTROL, /*!< */ + LTC_SAVE_FEEDBACK_BALANCE_CONTROL, /*!< */ + LTC_EXIT_BALANCE_CONTROL, /*!< */ LTC_STATEMACH_STARTMUXMEASUREMENT, LTC_STATEMACH_MUXCONFIGURATION_INIT, /*!< */ LTC_STATEMACH_MUXMEASUREMENT_CONFIG, /*!< Configuration of the multiplexers */ LTC_STATEMACH_READMUXMEASUREMENT, /*!< */ LTC_STATEMACH_STOREMUXMEASUREMENT, /*!< */ -} LTC_STATEMACH_BALANCECONTROL_SUB_e; +} LTC_STATEMACH_BALANCE_CONTROL_SUB_e; /** Substates for open-wire check */ typedef enum { @@ -240,7 +240,7 @@ typedef enum { LTC_REQUEST_PULLDOWN_CURRENT_OPENWIRE_CHECK, /*!< */ LTC_READ_VOLTAGES_PULLDOWN_OPENWIRE_CHECK, /*!< */ LTC_PERFORM_OPENWIRE_CHECK, -} LTC_STATEMACH_OPENWIRECHECK_SUB_e; +} LTC_STATEMACH_OPENWIRE_CHECK_SUB_e; /** Substates for diagnosis state */ typedef enum { @@ -376,18 +376,18 @@ typedef enum { LTC_STATE_EEPROM_WRITE_REQUEST, /*!< */ LTC_STATE_EEPROM_READ_UID_REQUEST, /*!< */ LTC_STATE_TEMP_SENS_READ_REQUEST, /*!< */ - LTC_STATE_BALANCEFEEDBACK_REQUEST, - LTC_STATE_REINIT_REQUEST, /*!< */ - LTC_STATE_IDLE_REQUEST, /*!< */ - LTC_STATE_VOLTAGEMEASUREMENT_REQUEST, /*!< */ - LTC_STATE_VOLTAGEMEASUREMENT_2CELLS_REQUEST, /*!< */ - LTC_STATE_VOLTAGEMEASUREMENT_SC_REQUEST, /*!< */ - LTC_STATE_READVOLTAGE_REQUEST, /*!< */ + LTC_STATE_BALANCE_FEEDBACK_REQUEST, + LTC_STATE_REINIT_REQUEST, /*!< */ + LTC_STATE_IDLE_REQUEST, /*!< */ + LTC_STATE_VOLTAGE_MEASUREMENT_REQUEST, /*!< */ + LTC_STATE_VOLTAGE_MEASUREMENT_2CELLS_REQUEST, /*!< */ + LTC_STATE_VOLTAGE_MEASUREMENT_SC_REQUEST, /*!< */ + LTC_STATE_READVOLTAGE_REQUEST, /*!< */ LTC_STATE_READVOLTAGE_2CELLS_REQUEST, - LTC_STATE_MUXMEASUREMENT_REQUEST, /*!< */ - LTC_STATE_BALANCECONTROL_REQUEST, /*!< */ - LTC_STATEMACH_BALANCEFEEDBACK_REQUEST, - LTC_STATE_ALLGPIOMEASUREMENT_REQUEST, /*!< */ + LTC_STATE_MUXMEASUREMENT_REQUEST, /*!< */ + LTC_STATE_BALANCE_CONTROL_REQUEST, /*!< */ + LTC_STATEMACH_BALANCE_FEEDBACK_REQUEST, + LTC_STATE_ALL_GPIO_MEASUREMENT_REQUEST, /*!< */ LTC_STATE_OPENWIRE_CHECK_REQUEST, LTC_STATEMACH_DEVICE_PARAMETER_REQUEST, LTC_STATEMACH_ADC_ACCURACY_REQUEST, @@ -450,42 +450,29 @@ typedef struct { uint16_t *usedCellIndex; LTC_OPENWIRE_DETECTION_s *openWireDetection; LTC_ERRORTABLE_s *errorTable; - DATA_BLOCK_USER_MUX_s *user_mux; uint16_t *GPIOVoltages; /* LTC2_NUMBER_OF_GPIOS * NR_OF_LTCs */ uint16_t *valid_GPIOPECs; /* NR_OF_LTCs */ -} LTC_DATAPTR_s; - -/** This struct contains error counter and pointer to used error buffers */ -typedef struct { - uint32_t *errPECCnt; /* array length: Number of used LTCs */ - uint32_t *errSPICnt; /* array length: Number of used LTCs */ - uint8_t *ltcStatus; /* array length: Number of used LTCs */ - uint8_t errPECRetryCnt; - uint8_t errSPIRetryCnt; - uint8_t errOccurred; - uint32_t nrOfConsecutiveErrors; -} LTC_ERROR_s; +} LTC_DATA_s; /** * This struct contains the measurement configuration for the LTC * Measurement is deactivated with value = LTC_STATE_NO_REQUEST */ typedef struct { - LTC_STATE_REQUEST_e measVoltage; /* activated = LTC_STATE_VOLTAGEMEASUREMENT_REQUEST */ - LTC_STATE_REQUEST_e measVoltage2Cells; /* activated = LTC_STATE_VOLTAGEMEASUREMENT_2CELLS_REQUEST */ - LTC_STATE_REQUEST_e measVoltageSumofCells; /* activated = LTC_STATE_VOLTAGEMEASUREMENT_SC_REQUEST */ + LTC_STATE_REQUEST_e measVoltage; /* activated = LTC_STATE_VOLTAGE_MEASUREMENT_REQUEST */ + LTC_STATE_REQUEST_e measVoltage2Cells; /* activated = LTC_STATE_VOLTAGE_MEASUREMENT_2CELLS_REQUEST */ + LTC_STATE_REQUEST_e measVoltageSumOfCells; /* activated = LTC_STATE_VOLTAGE_MEASUREMENT_SC_REQUEST */ LTC_STATE_REQUEST_e measMux; /* activated = LTC_STATE_MUXMEASUREMENT_REQUEST */ - LTC_STATE_REQUEST_e balancing; /* activated = LTC_STATE_BALANCECONTROL_REQUEST */ - LTC_STATE_REQUEST_e balancing_feedback; /* activated = LTC_STATE_BALANCEFEEDBACK_REQUEST */ - LTC_STATE_REQUEST_e measAllGPIO; /* activated = LTC_STATE_ALLGPIOMEASUREMENT_REQUEST */ + LTC_STATE_REQUEST_e balancing; /* activated = LTC_STATE_BALANCE_CONTROL_REQUEST */ + LTC_STATE_REQUEST_e balancing_feedback; /* activated = LTC_STATE_BALANCE_FEEDBACK_REQUEST */ + LTC_STATE_REQUEST_e measAllGPIO; /* activated = LTC_STATE_ALL_GPIO_MEASUREMENT_REQUEST */ LTC_STATE_REQUEST_e userIO; /* activated = LTC_STATE_USER_IO_REQUEST */ LTC_STATE_REQUEST_e readEEPROM; /* activated = LTC_STATE_EEPROM_READ_UID_REQUEST */ LTC_STATE_REQUEST_e measTemperature; /* activated = LTC_STATE_TEMP_SENS_READ_REQUEST */ LTC_STATE_REQUEST_e openWireCheck; /* activated = LTC_STATE_OPENWIRE_CHECK_REQUEST */ LTC_STATE_REQUEST_e deviceParameterCheck; /* activated = LTC_STATEMACH_DEVICE_PARAMETER_REQUEST */ - LTC_STATE_REQUEST_e accuracyADCverification; /* activated = LTC_STATEMACH_ADC_ACCURACY_REQUEST */ + LTC_STATE_REQUEST_e accuracyAdcVerification; /* activated = LTC_STATEMACH_ADC_ACCURACY_REQUEST */ LTC_STATE_REQUEST_e digitalFilterCheck; /* activated = LTC_STATEMACH_DIGITAL_FILTER_REQUEST */ - uint8_t taskCycleCnt; /* holds the current state machine index */ uint8_t numberActiveOfStates; /* number of active states */ uint8_t activeStates[12]; /* array holds the different substates that are executed one after another */ /* maximum number of states : 12 */ @@ -496,8 +483,8 @@ typedef struct { */ typedef enum { LTC_NOT_REUSED, - LTC_REUSE_READVOLT_FOR_ADOW_PUP, - LTC_REUSE_READVOLT_FOR_ADOW_PDOWN, + LTC_REUSE_READVOLTAGE_FOR_ADOW_PUP, + LTC_REUSE_READVOLTAGE_FOR_ADOW_PDOWN, } LTC_REUSE_MODE_e; /** @@ -522,52 +509,48 @@ typedef struct { */ typedef struct { uint16_t timer; /*!< time in ms before the state machine processes the next state, e.g. in counts of 1ms */ - LTC_TASK_TYPE_e taskMode; /*!< current task of the state machine */ - LTC_REQUEST_s statereq; /*!< current state request made to the state machine */ - LTC_STATEMACH_e state; /*!< state of Driver State Machine */ - uint8_t substate; /*!< current substate of the state machine */ - LTC_STATEMACH_e laststate; /*!< previous state of the state machine */ - uint8_t lastsubstate; /*!< previous substate of the state machine */ - LTC_ADCMODE_e adcMode; /*!< current LTC ADCmeasurement mode (fast, normal or filtered) */ - LTC_ADCMODE_e voltMeasMode; /*!< current LTC ADCmeasurement mode (fast, normal or filtered) */ - LTC_ADCMODE_e gpioMeasMode; /*!< current LTC ADCmeasurement mode (fast, normal or filtered) */ - LTC_ADCMODE_e adcModereq; /*!< requested LTC ADCmeasurement mode (fast, normal or filtered) */ - LTC_ADCMEAS_CHAN_e - adcMeasCh; /*!< current number of channels measured for GPIOS (one at a time for multiplexers or all five GPIOs) */ - LTC_ADCMEAS_CHAN_e - adcMeasChreq; /*!< requested number of channels measured for GPIOS (one at a time for multiplexers or all five GPIOs) */ - uint8_t - numberOfMeasuredMux; /*!< number of multiplexer channels measured by the LTC analog front-end before a voltage measurement is made */ + LTC_TASK_TYPE_e taskMode; /*!< current task of the state machine */ + LTC_REQUEST_s statereq; /*!< current state request made to the state machine */ + LTC_STATEMACH_e state; /*!< state of Driver State Machine */ + uint8_t substate; /*!< current substate of the state machine */ + LTC_STATEMACH_e lastState; /*!< previous state of the state machine */ + uint8_t lastSubstate; /*!< previous substate of the state machine */ + LTC_ADCMODE_e adcMode; /*!< current LTC ADCMeasurement mode (fast, normal or filtered) */ + LTC_ADCMODE_e voltMeasMode; /*!< current LTC ADCMeasurement mode (fast, normal or filtered) */ + LTC_ADCMODE_e gpioMeasMode; /*!< current LTC ADCMeasurement mode (fast, normal or filtered) */ + LTC_ADCMODE_e adcModeRequest; /*!< requested LTC ADCMeasurement mode (fast, normal or filtered) */ + LTC_ADCMEAS_CHAN_e adcMeasCh; /*!< current number of channels measured for GPIOS (one at a time for multiplexers or + all five GPIOs) */ + LTC_ADCMEAS_CHAN_e adcMeasChannelRequest; /*!< requested number of channels measured for GPIOS (one at a time for + multiplexers or all five GPIOs) */ + uint8_t numberOfMeasuredMux; /*!< number of multiplexer channels measured by the LTC analog front-end before a + voltage measurement is made */ uint32_t ErrPECCounter; /*!< counts the number of times there was A PEC (CRC) error during communication with LTC */ - uint8_t - ErrRetryCounter; /*!< counts how many times the drivers retried to communicate with LTC in case of a communication error */ + uint8_t ErrRetryCounter; /*!< counts how many times the drivers retried to communicate with LTC in case of a + communication error */ uint32_t ErrRequestCounter; /*!< counts the number of illegal requests to the LTC state machine */ uint8_t triggerentry; /*!< counter for re-entrance protection (function running flag) */ - uint32_t - commandDataTransferTime; /*!< time needed for sending an instruction to the LTC, followed by data transfer from the LTC */ - uint32_t commandTransferTime; /*!< time needed for sending an instruction to the LTC */ + uint32_t commandDataTransferTime; /*!< time needed for sending an instruction to the LTC, followed by data transfer + from the LTC */ + uint32_t commandTransferTime; /*!< time needed for sending an instruction to the LTC */ uint32_t gpioClocksTransferTime; /*!< time needed for sending 72 clock signal to the LTC, used for I2C communication */ uint32_t VoltageSampleTime; /*!< time stamp at which the cell voltage were measured */ uint32_t muxSampleTime; /*!< time stamp at which a multiplexer input was measured */ uint8_t instanceID; /*!< number to distinguish between different ltc states, starting with 0,1,2,3....8 */ - uint8_t nrBatcellsPerModule; /*!< number of cells per module */ + uint8_t nrBatCellsPerModule; /*!< number of cells per module */ uint8_t busSize; /*!< number of connected LTCs to parallel bus network */ - LTC_ERROR_s errStatus; /*!< contains pointer to local error buffer and error indicators */ uint8_t *ltcIDs; /*!< array with LTC IDs */ - uint8_t cntDeviceRD; /*!< current Index of array ltcIDs to determine device ID */ - uint32_t ctrlCallCnt; /*!< counts the LTC2_CTRL calls */ - uint8_t taskCycleCnt; /*!< counts the current task cycle */ LTC_REUSE_MODE_e - reusageMeasurementMode; /*!< flag that indicates if currently any state is reused i.e. cell voltage measurement */ - LTC_CONFIG_s ltcConfig; /*!< struct that holds the measurement configuration of the ltc network */ + reusageMeasurementMode; /*!< flag that indicates if currently any state is reused i.e. cell voltage + measurement */ bool first_measurement_made; /*!< flag that indicates if the first measurement cycle was completed */ STD_RETURN_TYPE_e ltc_muxcycle_finished; /*!< flag that indicates if the measurement sequence of the multiplexers is finished */ STD_RETURN_TYPE_e check_spi_flag; /*!< indicates if interrupt flag or timer must be considered */ STD_RETURN_TYPE_e balance_control_done; /*!< indicates if balance control was done */ - uint8_t resendCommandCounter; /*!< counter if commandy should be send multiple times e.g. ADOW command */ - bool transmit_ongoing; /*!< SPI transmissioncurrently ongoing */ + uint8_t resendCommandCounter; /*!< counter if command should be send multiple times e.g. ADOW command */ + bool transmit_ongoing; /*!< SPI transmission currently ongoing */ STD_RETURN_TYPE_e dummyByte_ongoing; /*!< SPI dummy byte is currently transmitted */ SPI_INTERFACE_CONFIG_s *spiSeqPtr; /*!< pointer to the SPI sequence to be measured */ SPI_INTERFACE_CONFIG_s *spiSeqEndPtr; /*!< pointer to the end of the SPI sequence */ @@ -579,14 +562,16 @@ typedef struct { DIAG_ID_e muxDiagErrorEntry; /*!< diagnosis entry for multiplexer related events */ DIAG_ID_e voltMeasDiagErrorEntry; /*!< diagnosis entry for voltage measurement related events */ DIAG_ID_e tempMeasDiagErrorEntry; /*!< diagnosis entry for temperature measurement related events */ - LTC_DATAPTR_s ltcData; /*!< contains pointers to the local data buffer */ - LTC_MUX_CH_CFG_s *muxmeas_seqptr - [BS_NR_OF_STRINGS]; /*!< pointer to the multiplexer sequence to be measured (contains a list of elements [multiplexer id, multiplexer channels]) (1,-1)...(3,-1),(0,1),...(0,7) */ - LTC_MUX_CH_CFG_s *muxmeas_seqendptr - [BS_NR_OF_STRINGS]; /*!< point to the end of the multiplexer sequence; pointer to ending point of sequence */ - uint8_t muxmeas_nr_end - [BS_NR_OF_STRINGS]; /*!< number of multiplexer channels that have to be measured; end number of sequence, where measurement is finished*/ - uint8_t configuration[6]; /*!< holds the configuration of the ltc (configuration register) */ + LTC_DATA_s ltcData; /*!< contains pointers to the local data buffer */ + LTC_MUX_CH_CFG_s *muxmeas_seqptr[BS_NR_OF_STRINGS]; /*!< pointer to the multiplexer sequence to be measured + (contains a list of elements [multiplexer id, multiplexer + channels]) (1,-1)...(3,-1),(0,1),...(0,7) */ + LTC_MUX_CH_CFG_s + *muxmeas_seqendptr[BS_NR_OF_STRINGS]; /*!< point to the end of the multiplexer sequence; pointer to + ending point of sequence */ + uint8_t muxmeas_nr_end[BS_NR_OF_STRINGS]; /*!< number of multiplexer channels that have to be measured; end number + of sequence, where measurement is finished*/ + uint8_t configuration[6]; /*!< holds the configuration of the ltc (configuration register) */ } LTC_STATE_s; /*========== Extern Function Prototypes =====================================*/ diff --git a/src/app/driver/afe/ltc/common/ltc_pec.c b/src/app/driver/afe/ltc/common/ltc_pec.c index 52c309c8..3c8e3a74 100644 --- a/src/app/driver/afe/ltc/common/ltc_pec.c +++ b/src/app/driver/afe/ltc/common/ltc_pec.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,14 +43,13 @@ * @file ltc_pec.c * @author foxBMS Team * @date 2022-11-04 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix LTC * * @brief Implements the CRC for the LTC LTC68xx-x family of ICs * @details The CRC polynomial used is defined in the data sheet of the ICs. - * */ /*========== Includes =======================================================*/ diff --git a/src/app/driver/afe/ltc/common/ltc_pec.h b/src/app/driver/afe/ltc/common/ltc_pec.h index 0b9683d6..d9a75aa7 100644 --- a/src/app/driver/afe/ltc/common/ltc_pec.h +++ b/src/app/driver/afe/ltc/common/ltc_pec.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,14 +43,13 @@ * @file ltc_pec.h * @author foxBMS Team * @date 2022-11-04 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix LTC * * @brief Headers for the PEC computation. - * @details The CRC polynom used is defined in the datasheet of the ICs. - * + * @details The CRC polynomial used is defined in the data sheet of the ICs. */ #ifndef FOXBMS__LTC_PEC_H_ diff --git a/src/app/driver/afe/ltc/wscript b/src/app/driver/afe/ltc/wscript old mode 100644 new mode 100755 index 508ab1a6..86d8fc7a --- a/src/app/driver/afe/ltc/wscript +++ b/src/app/driver/afe/ltc/wscript @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause diff --git a/src/app/driver/afe/maxim/api/mxm_afe.c b/src/app/driver/afe/maxim/api/mxm_afe.c index 9e221d7d..048de334 100644 --- a/src/app/driver/afe/maxim/api/mxm_afe.c +++ b/src/app/driver/afe/maxim/api/mxm_afe.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,12 +43,13 @@ * @file mxm_afe.c * @author foxBMS Team * @date 2020-06-16 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup DRIVER + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS * @prefix AFE * * @brief AFE driver implementation + * @details TODO */ /*========== Includes =======================================================*/ @@ -116,7 +117,7 @@ static MXM_MONITORING_INSTANCE_s mxm_state = { .pCellTemperatures_table = &mxm_tableCellTemperatures, .pOpenWire_table = &mxm_tableOpenWire, .selfCheck.crc = STD_NOT_OK, - .selfCheck.conv = STD_NOT_OK, + .selfCheck.conversion = STD_NOT_OK, .selfCheck.firstSetBit = STD_NOT_OK, .selfCheck.extractValueFromRegister = STD_NOT_OK, .selfCheck.parseVoltageReadall = STD_NOT_OK, @@ -202,7 +203,8 @@ extern STD_RETURN_TYPE_e AFE_TriggerIc(void) { extern STD_RETURN_TYPE_e AFE_Initialize(void) { MXM_SetStateStructDefaultValues(); MXM_InitializeMonitoringPins(); - /* call pre init self check so that we can do these costly tests before the main cycle begins (results are stored) */ + /* call pre init self check so that we can do these costly tests before the main cycle begins (results are stored) + */ (void)MXM_PreInitSelfCheck(&mxm_state); return STD_OK; } diff --git a/src/app/driver/afe/maxim/common/config/mxm_cfg.c b/src/app/driver/afe/maxim/common/config/mxm_cfg.c index 0a0e1a9f..bb62ba58 100644 --- a/src/app/driver/afe/maxim/common/config/mxm_cfg.c +++ b/src/app/driver/afe/maxim/common/config/mxm_cfg.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file mxm_cfg.c * @author foxBMS Team * @date 2019-01-09 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS_CONFIGURATION * @prefix MXM * * @brief Configuration for the MAX analog front-end - * + * @details TODO */ /*========== Includes =======================================================*/ diff --git a/src/app/driver/afe/maxim/common/config/mxm_cfg.h b/src/app/driver/afe/maxim/common/config/mxm_cfg.h index e870cdb5..edcb9d5a 100644 --- a/src/app/driver/afe/maxim/common/config/mxm_cfg.h +++ b/src/app/driver/afe/maxim/common/config/mxm_cfg.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file mxm_cfg.h * @author foxBMS Team * @date 2019-01-09 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS_CONFIGURATION * @prefix MXM * * @brief Header for the configuration for the Maxim analog front-end. - * + * @details TODO */ #ifndef FOXBMS__MXM_CFG_H_ diff --git a/src/app/driver/afe/maxim/common/mxm_17841b.c b/src/app/driver/afe/maxim/common/mxm_17841b.c index 6bd6ee9e..4d635c8b 100644 --- a/src/app/driver/afe/maxim/common/mxm_17841b.c +++ b/src/app/driver/afe/maxim/common/mxm_17841b.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,15 +43,13 @@ * @file mxm_17841b.c * @author foxBMS Team * @date 2018-12-14 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix MXM * * @brief Driver for the MAX17841B ASCI and MAX1785x analog front-end - * - * @details def - * + * @details TODO */ /*========== Includes =======================================================*/ @@ -60,7 +58,7 @@ #include "fassert.h" #include "fstd_types.h" #include "mxm_41b_register_map.h" -#include "mxm_bitextract.h" +#include "mxm_bit_extract.h" #include "os.h" #include @@ -70,7 +68,7 @@ #define MXM_41B_BIT_SHIFT_HALF_BYTE (4u) /** low nibble (of uint8_t) bit mask */ -#define MXM_41B_BIT_MASK_LOW_NIBBLE (0xFu) +#define MXM_41B_BIT_MASK_LOW_NIBBLE (0x0Fu) /** high nibble (of uint8_t) bit mask */ #define MXM_41B_BIT_MASK_HIGH_NIBBLE (0xF0u) @@ -168,7 +166,7 @@ static STD_RETURN_TYPE_e MXM_41BRegisterRead( * #MXM_41B_TX_INT_FLAG_DEFAULT_VALUE). * * @param[in,out] pInstance state pointer - * @return returnvalue of #MXM_41BRegisterWrite() + * @return returnValue of #MXM_41BRegisterWrite() */ static STD_RETURN_TYPE_e MXM_41BConfigRegisterWrite(MXM_41B_INSTANCE_s *pInstance); @@ -613,7 +611,7 @@ static void MXM_41BStateHandlerUartTransaction(MXM_41B_INSTANCE_s *pInstance) { pInstance->substate = MXM_41B_UART_READ_LOAD_QUEUE; } } else if (pInstance->substate == MXM_41B_UART_READ_LOAD_QUEUE) { - /* check assumption that incremented payloadlength fits into uint8_t */ + /* check assumption that incremented payload length fits into uint8_t */ FAS_ASSERT(pInstance->payloadLength < (uint8_t)UINT8_MAX); const uint8_t payloadLength = pInstance->payloadLength + 1u; /* send read load queue */ diff --git a/src/app/driver/afe/maxim/common/mxm_17841b.h b/src/app/driver/afe/maxim/common/mxm_17841b.h index 23eb55a5..85bfbd76 100644 --- a/src/app/driver/afe/maxim/common/mxm_17841b.h +++ b/src/app/driver/afe/maxim/common/mxm_17841b.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,16 +43,14 @@ * @file mxm_17841b.h * @author foxBMS Team * @date 2018-12-14 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix MXM * * @brief Headers for the driver for the MAX17841B ASCI and * MAX1785x analog front-end - * - * @details def - * + * @details TODO */ #ifndef FOXBMS__MXM_17841B_H_ @@ -62,7 +60,7 @@ #include "mxm_cfg.h" #include "fstd_types.h" -#include "mxm_bitextract.h" +#include "mxm_bit_extract.h" #include @@ -90,12 +88,13 @@ typedef enum { MXM_STATEMACH_41B_IDLE, /*!< Idle state, transition into other states is available here */ MXM_STATEMACH_41B_CHECK_FMEA, /*!< Checks the FMEA register of MAX17841B. */ MXM_STATEMACH_41B_GET_VERSION, /*!< Retrieves the version of the connected ASCI. */ - MXM_STATEMACH_41B_WRITE_CONF_AND_INT_REGISTER, /*!< Writes the copy of configuration and interrupt register to the MAX17841B. */ - MXM_STATEMACH_41B_READ_STATUS_REGISTER, /*!< Reads the status registers of MAX17841B. */ - MXM_STATEMACH_41B_UART_TRANSACTION, /*!< Sends a complete UART transaction. */ - MXM_STATEMACH_41B_CLEAR_RECEIVE_BUFFER, /*!< Clears the receive buffer. */ - MXM_STATEMACH_41B_CLEAR_TRANSMIT_BUFFER, /*!< Clears the transmit buffer */ - MXM_STATEMACH_41B_MAXSTATE, /*!< Highest state */ + MXM_STATEMACH_41B_WRITE_CONF_AND_INT_REGISTER, /*!< Writes the copy of configuration and interrupt register to the + MAX17841B. */ + MXM_STATEMACH_41B_READ_STATUS_REGISTER, /*!< Reads the status registers of MAX17841B. */ + MXM_STATEMACH_41B_UART_TRANSACTION, /*!< Sends a complete UART transaction. */ + MXM_STATEMACH_41B_CLEAR_RECEIVE_BUFFER, /*!< Clears the receive buffer. */ + MXM_STATEMACH_41B_CLEAR_TRANSMIT_BUFFER, /*!< Clears the transmit buffer */ + MXM_STATEMACH_41B_MAXSTATE, /*!< Highest state */ } MXM_STATEMACH_41B_e; /** @@ -167,7 +166,7 @@ typedef struct { uint16_t rxBufferLength; /*!< length of the RX-buffer-array */ MXM_41B_STATE_REQUEST_STATUS_e *processed; /*!< status-indicator of the state-machine */ uint8_t extendMessageBytes; /*!< pass on number of bytes by which the TX-message shall be extended */ - uint8_t waitCounter; /*!< general error counter, will be reset in funtions */ + uint8_t waitCounter; /*!< general error counter, will be reset in functions */ uint8_t regRxIntEnable; /*!< local storage for the RX Interrupt Enable register */ uint8_t regTxIntEnable; /*!< local storage for the TX Interrupt Enable register */ uint8_t regRxStatus; /*!< local storage for the RX Status register */ diff --git a/src/app/driver/afe/maxim/common/mxm_1785x.c b/src/app/driver/afe/maxim/common/mxm_1785x.c index e9fdae9e..e52df0c4 100644 --- a/src/app/driver/afe/maxim/common/mxm_1785x.c +++ b/src/app/driver/afe/maxim/common/mxm_1785x.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,16 +43,14 @@ * @file mxm_1785x.c * @author foxBMS Team * @date 2019-01-15 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix MXM * * @brief Driver for the MAX17841B ASCI and MAX1785x analog front-end - * * @details This file contains the main-state-machine that drives the * monitoring ICs of the MAX1785x family by Maxim Integrated. - * */ /*========== Includes =======================================================*/ @@ -168,7 +166,7 @@ static void MXM_ParseVoltageLineReadall( * like #MXM_MONITORING_INSTANCE_s::localVoltages. * @param[in] kpkVoltageRxBuffer array-pointer to the RX buffer * @param[in] voltageRxBufferLength length of the RX buffer - * @param[out] datastorage contains all measured voltages for local + * @param[out] dataStorage contains all measured voltages for local * consumption in the module * @param[in] conversionType type of conversion that has been used for * the measured data @@ -176,15 +174,15 @@ static void MXM_ParseVoltageLineReadall( * valid message or the conversion-type is unknown, * otherwise #STD_OK */ -static STD_RETURN_TYPE_e MXM_ParseVoltageReadall( +static STD_RETURN_TYPE_e MXM_ParseVoltageReadAll( const uint8_t *const kpkVoltageRxBuffer, uint16_t voltageRxBufferLength, - MXM_DATA_STORAGE_s *datastorage, + MXM_DATA_STORAGE_s *dataStorage, MXM_CONVERSION_TYPE_e conversionType); /** - * @brief Test the #MXM_ParseVoltageReadall()-function - * @details Test the function #MXM_ParseVoltageReadall() by passing predefined + * @brief Test the #MXM_ParseVoltageReadAll()-function + * @details Test the function #MXM_ParseVoltageReadAll() by passing predefined * RX buffer to it and checking the outcome. This function writes to * the variable #MXM_MONITORING_INSTANCE_s::localVoltages and nulls it * completely after execution. It is intended as a self-check that can @@ -192,7 +190,7 @@ static STD_RETURN_TYPE_e MXM_ParseVoltageReadall( * @return #STD_OK if the self-check has been performed successfully, * otherwise #STD_NOT_OK */ -static STD_RETURN_TYPE_e GEN_MUST_CHECK_RETURN MXM_ParseVoltageReadallTest(MXM_MONITORING_INSTANCE_s *pInstance); +static STD_RETURN_TYPE_e GEN_MUST_CHECK_RETURN MXM_ParseVoltageReadAllTest(MXM_MONITORING_INSTANCE_s *pInstance); /*========== Static Function Implementations ================================*/ @@ -275,14 +273,14 @@ static void MXM_ParseVoltageLineReadall( } } -static STD_RETURN_TYPE_e MXM_ParseVoltageReadall( +static STD_RETURN_TYPE_e MXM_ParseVoltageReadAll( const uint8_t *const kpkVoltageRxBuffer, uint16_t voltageRxBufferLength, - MXM_DATA_STORAGE_s *datastorage, + MXM_DATA_STORAGE_s *dataStorage, MXM_CONVERSION_TYPE_e conversionType) { STD_RETURN_TYPE_e retval = STD_OK; FAS_ASSERT(kpkVoltageRxBuffer != NULL_PTR); - FAS_ASSERT(datastorage != NULL_PTR); + FAS_ASSERT(dataStorage != NULL_PTR); /* AXIVION Routine Generic-MissingParameterAssert: voltageRxBufferLength: parameter accepts whole range */ /* AXIVION Routine Generic-MissingParameterAssert: conversionType: parameter accepts whole range */ @@ -306,7 +304,7 @@ static STD_RETURN_TYPE_e MXM_ParseVoltageReadall( voltageRxBufferLength, MXM_OFFSET_CELL_1, conversionType, - datastorage->cellVoltages_mV, + dataStorage->cellVoltages_mV, MXM_MEASURE_CELL_VOLTAGE, MXM_REF_UNIPOLAR_CELL_mV); break; @@ -316,7 +314,7 @@ static STD_RETURN_TYPE_e MXM_ParseVoltageReadall( voltageRxBufferLength, MXM_OFFSET_CELL_2, conversionType, - datastorage->cellVoltages_mV, + dataStorage->cellVoltages_mV, MXM_MEASURE_CELL_VOLTAGE, MXM_REF_UNIPOLAR_CELL_mV); break; @@ -326,7 +324,7 @@ static STD_RETURN_TYPE_e MXM_ParseVoltageReadall( voltageRxBufferLength, MXM_OFFSET_CELL_3, conversionType, - datastorage->cellVoltages_mV, + dataStorage->cellVoltages_mV, MXM_MEASURE_CELL_VOLTAGE, MXM_REF_UNIPOLAR_CELL_mV); break; @@ -336,7 +334,7 @@ static STD_RETURN_TYPE_e MXM_ParseVoltageReadall( voltageRxBufferLength, MXM_OFFSET_CELL_4, conversionType, - datastorage->cellVoltages_mV, + dataStorage->cellVoltages_mV, MXM_MEASURE_CELL_VOLTAGE, MXM_REF_UNIPOLAR_CELL_mV); break; @@ -346,7 +344,7 @@ static STD_RETURN_TYPE_e MXM_ParseVoltageReadall( voltageRxBufferLength, MXM_OFFSET_CELL_5, conversionType, - datastorage->cellVoltages_mV, + dataStorage->cellVoltages_mV, MXM_MEASURE_CELL_VOLTAGE, MXM_REF_UNIPOLAR_CELL_mV); break; @@ -356,7 +354,7 @@ static STD_RETURN_TYPE_e MXM_ParseVoltageReadall( voltageRxBufferLength, MXM_OFFSET_CELL_6, conversionType, - datastorage->cellVoltages_mV, + dataStorage->cellVoltages_mV, MXM_MEASURE_CELL_VOLTAGE, MXM_REF_UNIPOLAR_CELL_mV); break; @@ -366,7 +364,7 @@ static STD_RETURN_TYPE_e MXM_ParseVoltageReadall( voltageRxBufferLength, MXM_OFFSET_CELL_7, conversionType, - datastorage->cellVoltages_mV, + dataStorage->cellVoltages_mV, MXM_MEASURE_CELL_VOLTAGE, MXM_REF_UNIPOLAR_CELL_mV); break; @@ -376,7 +374,7 @@ static STD_RETURN_TYPE_e MXM_ParseVoltageReadall( voltageRxBufferLength, MXM_OFFSET_CELL_8, conversionType, - datastorage->cellVoltages_mV, + dataStorage->cellVoltages_mV, MXM_MEASURE_CELL_VOLTAGE, MXM_REF_UNIPOLAR_CELL_mV); break; @@ -386,7 +384,7 @@ static STD_RETURN_TYPE_e MXM_ParseVoltageReadall( voltageRxBufferLength, MXM_OFFSET_CELL_9, conversionType, - datastorage->cellVoltages_mV, + dataStorage->cellVoltages_mV, MXM_MEASURE_CELL_VOLTAGE, MXM_REF_UNIPOLAR_CELL_mV); break; @@ -396,7 +394,7 @@ static STD_RETURN_TYPE_e MXM_ParseVoltageReadall( voltageRxBufferLength, MXM_OFFSET_CELL_10, conversionType, - datastorage->cellVoltages_mV, + dataStorage->cellVoltages_mV, MXM_MEASURE_CELL_VOLTAGE, MXM_REF_UNIPOLAR_CELL_mV); break; @@ -406,7 +404,7 @@ static STD_RETURN_TYPE_e MXM_ParseVoltageReadall( voltageRxBufferLength, MXM_OFFSET_CELL_11, conversionType, - datastorage->cellVoltages_mV, + dataStorage->cellVoltages_mV, MXM_MEASURE_CELL_VOLTAGE, MXM_REF_UNIPOLAR_CELL_mV); break; @@ -416,7 +414,7 @@ static STD_RETURN_TYPE_e MXM_ParseVoltageReadall( voltageRxBufferLength, MXM_OFFSET_CELL_12, conversionType, - datastorage->cellVoltages_mV, + dataStorage->cellVoltages_mV, MXM_MEASURE_CELL_VOLTAGE, MXM_REF_UNIPOLAR_CELL_mV); break; @@ -426,7 +424,7 @@ static STD_RETURN_TYPE_e MXM_ParseVoltageReadall( voltageRxBufferLength, MXM_OFFSET_CELL_13, conversionType, - datastorage->cellVoltages_mV, + dataStorage->cellVoltages_mV, MXM_MEASURE_CELL_VOLTAGE, MXM_REF_UNIPOLAR_CELL_mV); break; @@ -436,7 +434,7 @@ static STD_RETURN_TYPE_e MXM_ParseVoltageReadall( voltageRxBufferLength, MXM_OFFSET_CELL_14, conversionType, - datastorage->cellVoltages_mV, + dataStorage->cellVoltages_mV, MXM_MEASURE_CELL_VOLTAGE, MXM_REF_UNIPOLAR_CELL_mV); break; @@ -446,7 +444,7 @@ static STD_RETURN_TYPE_e MXM_ParseVoltageReadall( voltageRxBufferLength, MXM_OFFSET_AUX0, conversionType, - datastorage->auxVoltages_mV, + dataStorage->auxVoltages_mV, MXM_MEASURE_TEMP, MXM_REF_VAA_mV); break; @@ -456,7 +454,7 @@ static STD_RETURN_TYPE_e MXM_ParseVoltageReadall( voltageRxBufferLength, MXM_OFFSET_AUX2, conversionType, - datastorage->auxVoltages_mV, + dataStorage->auxVoltages_mV, MXM_MEASURE_TEMP, MXM_REF_VAA_mV); break; @@ -466,7 +464,7 @@ static STD_RETURN_TYPE_e MXM_ParseVoltageReadall( voltageRxBufferLength, MXM_OFFSET_AUX3, conversionType, - datastorage->auxVoltages_mV, + dataStorage->auxVoltages_mV, MXM_MEASURE_TEMP, MXM_REF_VAA_mV); break; @@ -476,7 +474,7 @@ static STD_RETURN_TYPE_e MXM_ParseVoltageReadall( voltageRxBufferLength, MXM_OFFSET_BLOCK, conversionType, - datastorage->blockVoltages, + dataStorage->blockVoltages, MXM_MEASURE_BLOCK_VOLTAGE, 65000u); /* TODO scaling and variable size (65000)*/ @@ -490,7 +488,7 @@ static STD_RETURN_TYPE_e MXM_ParseVoltageReadall( return retval; } -static STD_RETURN_TYPE_e GEN_MUST_CHECK_RETURN MXM_ParseVoltageReadallTest(MXM_MONITORING_INSTANCE_s *pInstance) { +static STD_RETURN_TYPE_e GEN_MUST_CHECK_RETURN MXM_ParseVoltageReadAllTest(MXM_MONITORING_INSTANCE_s *pInstance) { FAS_ASSERT(pInstance != NULL_PTR); STD_RETURN_TYPE_e retval = STD_OK; @@ -504,8 +502,8 @@ static STD_RETURN_TYPE_e GEN_MUST_CHECK_RETURN MXM_ParseVoltageReadallTest(MXM_M } /* not a readall buffer */ - testBuffer[0] = BATTERY_MANAGEMENT_HELLOALL; - if (MXM_ParseVoltageReadall(testBuffer, testBufferLength, &pInstance->localVoltages, MXM_CONVERSION_UNIPOLAR) != + testBuffer[0] = BATTERY_MANAGEMENT_HELLO_ALL; + if (MXM_ParseVoltageReadAll(testBuffer, testBufferLength, &pInstance->localVoltages, MXM_CONVERSION_UNIPOLAR) != STD_NOT_OK) { /* AXIVION Next Codeline Style FaultDetection-UnusedAssignments: return value collects all negative results. */ retval = STD_NOT_OK; @@ -514,7 +512,7 @@ static STD_RETURN_TYPE_e GEN_MUST_CHECK_RETURN MXM_ParseVoltageReadallTest(MXM_M /* not a cell voltage register */ testBuffer[0] = BATTERY_MANAGEMENT_READALL; testBuffer[1] = (uint8_t)MXM_REG_VERSION; - if (MXM_ParseVoltageReadall(testBuffer, testBufferLength, &pInstance->localVoltages, MXM_CONVERSION_UNIPOLAR) != + if (MXM_ParseVoltageReadAll(testBuffer, testBufferLength, &pInstance->localVoltages, MXM_CONVERSION_UNIPOLAR) != STD_NOT_OK) { /* AXIVION Next Codeline Style FaultDetection-UnusedAssignments: return value collects all negative results. */ retval = STD_NOT_OK; @@ -523,8 +521,9 @@ static STD_RETURN_TYPE_e GEN_MUST_CHECK_RETURN MXM_ParseVoltageReadallTest(MXM_M /* bogus conversion type */ testBuffer[0] = BATTERY_MANAGEMENT_READALL; testBuffer[1] = (uint8_t)MXM_REG_CELL1; - /* AXIVION Next Codeline Style MisraC2012Directive-4.1 MisraC2012-10.5: explicitly invalid value in order to provoke error response */ - if (MXM_ParseVoltageReadall(testBuffer, testBufferLength, &pInstance->localVoltages, (MXM_CONVERSION_TYPE_e)42) != + /* AXIVION Next Codeline Style MisraC2012Directive-4.1 MisraC2012-10.5: explicitly invalid value in order to provoke + * error response */ + if (MXM_ParseVoltageReadAll(testBuffer, testBufferLength, &pInstance->localVoltages, (MXM_CONVERSION_TYPE_e)42) != STD_NOT_OK) { /* AXIVION Next Codeline Style FaultDetection-UnusedAssignments: return value collects all negative results. */ retval = STD_NOT_OK; @@ -534,7 +533,7 @@ static STD_RETURN_TYPE_e GEN_MUST_CHECK_RETURN MXM_ParseVoltageReadallTest(MXM_M testBuffer[0] = BATTERY_MANAGEMENT_READALL; testBuffer[1] = (uint8_t)MXM_REG_CELL1; testBufferLength = 5; - if (MXM_ParseVoltageReadall(testBuffer, testBufferLength, &pInstance->localVoltages, MXM_CONVERSION_UNIPOLAR) != + if (MXM_ParseVoltageReadAll(testBuffer, testBufferLength, &pInstance->localVoltages, MXM_CONVERSION_UNIPOLAR) != STD_NOT_OK) { /* AXIVION Next Codeline Style FaultDetection-UnusedAssignments: return value collects all negative results. */ retval = STD_NOT_OK; @@ -552,7 +551,7 @@ static STD_RETURN_TYPE_e GEN_MUST_CHECK_RETURN MXM_ParseVoltageReadallTest(MXM_M testBuffer[8] = 0x42u; /* DATACHECKBYTE, irrelevant for function, filled with dummy bytes */ testBuffer[9] = 0x44u; /* CRCBYTE, irrelevant for function, filled with dummy bytes */ testBufferLength = 10u; - if (MXM_ParseVoltageReadall(testBuffer, testBufferLength, &pInstance->localVoltages, MXM_CONVERSION_UNIPOLAR) != + if (MXM_ParseVoltageReadAll(testBuffer, testBufferLength, &pInstance->localVoltages, MXM_CONVERSION_UNIPOLAR) != STD_OK) { /* AXIVION Next Codeline Style FaultDetection-UnusedAssignments: return value collects all negative results. */ retval = STD_NOT_OK; @@ -560,7 +559,8 @@ static STD_RETURN_TYPE_e GEN_MUST_CHECK_RETURN MXM_ParseVoltageReadallTest(MXM_M if ((pInstance->localVoltages.cellVoltages_mV[0] != MXM_REF_UNIPOLAR_CELL_mV) || (pInstance->localVoltages.cellVoltages_mV[14] != 0u) || (pInstance->localVoltages.cellVoltages_mV[28] != MXM_REF_UNIPOLAR_CELL_mV)) { - /* AXIVION Next Codeline Style FaultDetection-UnusedAssignments: return value collects all negative results. */ + /* AXIVION Next Codeline Style FaultDetection-UnusedAssignments: return value collects all negative results. + */ retval = STD_NOT_OK; } } @@ -582,7 +582,7 @@ static STD_RETURN_TYPE_e GEN_MUST_CHECK_RETURN MXM_ParseVoltageReadallTest(MXM_M testBuffer[8] = 0x42u; /* DATACHECKBYTE, irrelevant for function, filled with dummy bytes */ testBuffer[9] = 0x44u; /* CRCBYTE, irrelevant for function, filled with dummy bytes */ testBufferLength = 10; - if (MXM_ParseVoltageReadall(testBuffer, testBufferLength, &pInstance->localVoltages, MXM_CONVERSION_UNIPOLAR) != + if (MXM_ParseVoltageReadAll(testBuffer, testBufferLength, &pInstance->localVoltages, MXM_CONVERSION_UNIPOLAR) != STD_OK) { /* AXIVION Next Codeline Style FaultDetection-UnusedAssignments: return value collects all negative results. */ retval = STD_NOT_OK; @@ -590,7 +590,8 @@ static STD_RETURN_TYPE_e GEN_MUST_CHECK_RETURN MXM_ParseVoltageReadallTest(MXM_M if ((pInstance->localVoltages.cellVoltages_mV[1] != MXM_REF_UNIPOLAR_CELL_mV) || (pInstance->localVoltages.cellVoltages_mV[15] != 0u) || (pInstance->localVoltages.cellVoltages_mV[29] != MXM_REF_UNIPOLAR_CELL_mV)) { - /* AXIVION Next Codeline Style FaultDetection-UnusedAssignments: return value collects all negative results. */ + /* AXIVION Next Codeline Style FaultDetection-UnusedAssignments: return value collects all negative results. + */ retval = STD_NOT_OK; } } @@ -608,13 +609,14 @@ static STD_RETURN_TYPE_e GEN_MUST_CHECK_RETURN MXM_ParseVoltageReadallTest(MXM_M testBuffer[4] = 0x42u; /* DATACHECKBYTE, irrelevant for function, filled with dummy bytes */ testBuffer[5] = 0x44u; /* CRCBYTE, irrelevant for function, filled with dummy bytes */ testBufferLength = 6; - if (MXM_ParseVoltageReadall(testBuffer, testBufferLength, &pInstance->localVoltages, MXM_CONVERSION_UNIPOLAR) != + if (MXM_ParseVoltageReadAll(testBuffer, testBufferLength, &pInstance->localVoltages, MXM_CONVERSION_UNIPOLAR) != STD_OK) { /* AXIVION Next Codeline Style FaultDetection-UnusedAssignments: return value collects all negative results. */ retval = STD_NOT_OK; } else { if (pInstance->localVoltages.cellVoltages_mV[2] != MXM_REF_UNIPOLAR_CELL_mV) { - /* AXIVION Next Codeline Style FaultDetection-UnusedAssignments: return value collects all negative results. */ + /* AXIVION Next Codeline Style FaultDetection-UnusedAssignments: return value collects all negative results. + */ retval = STD_NOT_OK; } } @@ -632,13 +634,14 @@ static STD_RETURN_TYPE_e GEN_MUST_CHECK_RETURN MXM_ParseVoltageReadallTest(MXM_M testBuffer[4] = 0x42u; /* DATACHECKBYTE, irrelevant for function, filled with dummy bytes */ testBuffer[5] = 0x44u; /* CRCBYTE, irrelevant for function, filled with dummy bytes */ testBufferLength = 6; - if (MXM_ParseVoltageReadall(testBuffer, testBufferLength, &pInstance->localVoltages, MXM_CONVERSION_UNIPOLAR) != + if (MXM_ParseVoltageReadAll(testBuffer, testBufferLength, &pInstance->localVoltages, MXM_CONVERSION_UNIPOLAR) != STD_OK) { /* AXIVION Next Codeline Style FaultDetection-UnusedAssignments: return value collects all negative results. */ retval = STD_NOT_OK; } else { if (pInstance->localVoltages.cellVoltages_mV[3] != MXM_REF_UNIPOLAR_CELL_mV) { - /* AXIVION Next Codeline Style FaultDetection-UnusedAssignments: return value collects all negative results. */ + /* AXIVION Next Codeline Style FaultDetection-UnusedAssignments: return value collects all negative results. + */ retval = STD_NOT_OK; } } @@ -656,13 +659,14 @@ static STD_RETURN_TYPE_e GEN_MUST_CHECK_RETURN MXM_ParseVoltageReadallTest(MXM_M testBuffer[4] = 0x42u; /* DATACHECKBYTE, irrelevant for function, filled with dummy bytes */ testBuffer[5] = 0x44u; /* CRCBYTE, irrelevant for function, filled with dummy bytes */ testBufferLength = 6; - if (MXM_ParseVoltageReadall(testBuffer, testBufferLength, &pInstance->localVoltages, MXM_CONVERSION_UNIPOLAR) != + if (MXM_ParseVoltageReadAll(testBuffer, testBufferLength, &pInstance->localVoltages, MXM_CONVERSION_UNIPOLAR) != STD_OK) { /* AXIVION Next Codeline Style FaultDetection-UnusedAssignments: return value collects all negative results. */ retval = STD_NOT_OK; } else { if (pInstance->localVoltages.cellVoltages_mV[4] != MXM_REF_UNIPOLAR_CELL_mV) { - /* AXIVION Next Codeline Style FaultDetection-UnusedAssignments: return value collects all negative results. */ + /* AXIVION Next Codeline Style FaultDetection-UnusedAssignments: return value collects all negative results. + */ retval = STD_NOT_OK; } } @@ -680,13 +684,14 @@ static STD_RETURN_TYPE_e GEN_MUST_CHECK_RETURN MXM_ParseVoltageReadallTest(MXM_M testBuffer[4] = 0x42u; /* DATACHECKBYTE, irrelevant for function, filled with dummy bytes */ testBuffer[5] = 0x44u; /* CRCBYTE, irrelevant for function, filled with dummy bytes */ testBufferLength = 6; - if (MXM_ParseVoltageReadall(testBuffer, testBufferLength, &pInstance->localVoltages, MXM_CONVERSION_UNIPOLAR) != + if (MXM_ParseVoltageReadAll(testBuffer, testBufferLength, &pInstance->localVoltages, MXM_CONVERSION_UNIPOLAR) != STD_OK) { /* AXIVION Next Codeline Style FaultDetection-UnusedAssignments: return value collects all negative results. */ retval = STD_NOT_OK; } else { if (pInstance->localVoltages.cellVoltages_mV[5] != MXM_REF_UNIPOLAR_CELL_mV) { - /* AXIVION Next Codeline Style FaultDetection-UnusedAssignments: return value collects all negative results. */ + /* AXIVION Next Codeline Style FaultDetection-UnusedAssignments: return value collects all negative results. + */ retval = STD_NOT_OK; } } @@ -704,13 +709,14 @@ static STD_RETURN_TYPE_e GEN_MUST_CHECK_RETURN MXM_ParseVoltageReadallTest(MXM_M testBuffer[4] = 0x42u; /* DATACHECKBYTE, irrelevant for function, filled with dummy bytes */ testBuffer[5] = 0x44u; /* CRCBYTE, irrelevant for function, filled with dummy bytes */ testBufferLength = 6; - if (MXM_ParseVoltageReadall(testBuffer, testBufferLength, &pInstance->localVoltages, MXM_CONVERSION_UNIPOLAR) != + if (MXM_ParseVoltageReadAll(testBuffer, testBufferLength, &pInstance->localVoltages, MXM_CONVERSION_UNIPOLAR) != STD_OK) { /* AXIVION Next Codeline Style FaultDetection-UnusedAssignments: return value collects all negative results. */ retval = STD_NOT_OK; } else { if (pInstance->localVoltages.cellVoltages_mV[6] != MXM_REF_UNIPOLAR_CELL_mV) { - /* AXIVION Next Codeline Style FaultDetection-UnusedAssignments: return value collects all negative results. */ + /* AXIVION Next Codeline Style FaultDetection-UnusedAssignments: return value collects all negative results. + */ retval = STD_NOT_OK; } } @@ -728,13 +734,14 @@ static STD_RETURN_TYPE_e GEN_MUST_CHECK_RETURN MXM_ParseVoltageReadallTest(MXM_M testBuffer[4] = 0x42u; /* DATACHECKBYTE, irrelevant for function, filled with dummy bytes */ testBuffer[5] = 0x44u; /* CRCBYTE, irrelevant for function, filled with dummy bytes */ testBufferLength = 6; - if (MXM_ParseVoltageReadall(testBuffer, testBufferLength, &pInstance->localVoltages, MXM_CONVERSION_UNIPOLAR) != + if (MXM_ParseVoltageReadAll(testBuffer, testBufferLength, &pInstance->localVoltages, MXM_CONVERSION_UNIPOLAR) != STD_OK) { /* AXIVION Next Codeline Style FaultDetection-UnusedAssignments: return value collects all negative results. */ retval = STD_NOT_OK; } else { if (pInstance->localVoltages.cellVoltages_mV[7] != MXM_REF_UNIPOLAR_CELL_mV) { - /* AXIVION Next Codeline Style FaultDetection-UnusedAssignments: return value collects all negative results. */ + /* AXIVION Next Codeline Style FaultDetection-UnusedAssignments: return value collects all negative results. + */ retval = STD_NOT_OK; } } @@ -752,13 +759,14 @@ static STD_RETURN_TYPE_e GEN_MUST_CHECK_RETURN MXM_ParseVoltageReadallTest(MXM_M testBuffer[4] = 0x42u; /* DATACHECKBYTE, irrelevant for function, filled with dummy bytes */ testBuffer[5] = 0x44u; /* CRCBYTE, irrelevant for function, filled with dummy bytes */ testBufferLength = 6; - if (MXM_ParseVoltageReadall(testBuffer, testBufferLength, &pInstance->localVoltages, MXM_CONVERSION_UNIPOLAR) != + if (MXM_ParseVoltageReadAll(testBuffer, testBufferLength, &pInstance->localVoltages, MXM_CONVERSION_UNIPOLAR) != STD_OK) { /* AXIVION Next Codeline Style FaultDetection-UnusedAssignments: return value collects all negative results. */ retval = STD_NOT_OK; } else { if (pInstance->localVoltages.cellVoltages_mV[8] != MXM_REF_UNIPOLAR_CELL_mV) { - /* AXIVION Next Codeline Style FaultDetection-UnusedAssignments: return value collects all negative results. */ + /* AXIVION Next Codeline Style FaultDetection-UnusedAssignments: return value collects all negative results. + */ retval = STD_NOT_OK; } } @@ -776,13 +784,14 @@ static STD_RETURN_TYPE_e GEN_MUST_CHECK_RETURN MXM_ParseVoltageReadallTest(MXM_M testBuffer[4] = 0x42u; /* DATACHECKBYTE, irrelevant for function, filled with dummy bytes */ testBuffer[5] = 0x44u; /* CRCBYTE, irrelevant for function, filled with dummy bytes */ testBufferLength = 6; - if (MXM_ParseVoltageReadall(testBuffer, testBufferLength, &pInstance->localVoltages, MXM_CONVERSION_UNIPOLAR) != + if (MXM_ParseVoltageReadAll(testBuffer, testBufferLength, &pInstance->localVoltages, MXM_CONVERSION_UNIPOLAR) != STD_OK) { /* AXIVION Next Codeline Style FaultDetection-UnusedAssignments: return value collects all negative results. */ retval = STD_NOT_OK; } else { if (pInstance->localVoltages.cellVoltages_mV[9] != MXM_REF_UNIPOLAR_CELL_mV) { - /* AXIVION Next Codeline Style FaultDetection-UnusedAssignments: return value collects all negative results. */ + /* AXIVION Next Codeline Style FaultDetection-UnusedAssignments: return value collects all negative results. + */ retval = STD_NOT_OK; } } @@ -800,13 +809,14 @@ static STD_RETURN_TYPE_e GEN_MUST_CHECK_RETURN MXM_ParseVoltageReadallTest(MXM_M testBuffer[4] = 0x42u; /* DATACHECKBYTE, irrelevant for function, filled with dummy bytes */ testBuffer[5] = 0x44u; /* CRCBYTE, irrelevant for function, filled with dummy bytes */ testBufferLength = 6; - if (MXM_ParseVoltageReadall(testBuffer, testBufferLength, &pInstance->localVoltages, MXM_CONVERSION_UNIPOLAR) != + if (MXM_ParseVoltageReadAll(testBuffer, testBufferLength, &pInstance->localVoltages, MXM_CONVERSION_UNIPOLAR) != STD_OK) { /* AXIVION Next Codeline Style FaultDetection-UnusedAssignments: return value collects all negative results. */ retval = STD_NOT_OK; } else { if (pInstance->localVoltages.cellVoltages_mV[10] != MXM_REF_UNIPOLAR_CELL_mV) { - /* AXIVION Next Codeline Style FaultDetection-UnusedAssignments: return value collects all negative results. */ + /* AXIVION Next Codeline Style FaultDetection-UnusedAssignments: return value collects all negative results. + */ retval = STD_NOT_OK; } } @@ -824,13 +834,14 @@ static STD_RETURN_TYPE_e GEN_MUST_CHECK_RETURN MXM_ParseVoltageReadallTest(MXM_M testBuffer[4] = 0x42u; /* DATACHECKBYTE, irrelevant for function, filled with dummy bytes */ testBuffer[5] = 0x44u; /* CRCBYTE, irrelevant for function, filled with dummy bytes */ testBufferLength = 6; - if (MXM_ParseVoltageReadall(testBuffer, testBufferLength, &pInstance->localVoltages, MXM_CONVERSION_UNIPOLAR) != + if (MXM_ParseVoltageReadAll(testBuffer, testBufferLength, &pInstance->localVoltages, MXM_CONVERSION_UNIPOLAR) != STD_OK) { /* AXIVION Next Codeline Style FaultDetection-UnusedAssignments: return value collects all negative results. */ retval = STD_NOT_OK; } else { if (pInstance->localVoltages.cellVoltages_mV[11] != MXM_REF_UNIPOLAR_CELL_mV) { - /* AXIVION Next Codeline Style FaultDetection-UnusedAssignments: return value collects all negative results. */ + /* AXIVION Next Codeline Style FaultDetection-UnusedAssignments: return value collects all negative results. + */ retval = STD_NOT_OK; } } @@ -848,13 +859,14 @@ static STD_RETURN_TYPE_e GEN_MUST_CHECK_RETURN MXM_ParseVoltageReadallTest(MXM_M testBuffer[4] = 0x42u; /* DATACHECKBYTE, irrelevant for function, filled with dummy bytes */ testBuffer[5] = 0x44u; /* CRCBYTE, irrelevant for function, filled with dummy bytes */ testBufferLength = 6; - if (MXM_ParseVoltageReadall(testBuffer, testBufferLength, &pInstance->localVoltages, MXM_CONVERSION_UNIPOLAR) != + if (MXM_ParseVoltageReadAll(testBuffer, testBufferLength, &pInstance->localVoltages, MXM_CONVERSION_UNIPOLAR) != STD_OK) { /* AXIVION Next Codeline Style FaultDetection-UnusedAssignments: return value collects all negative results. */ retval = STD_NOT_OK; } else { if (pInstance->localVoltages.cellVoltages_mV[12] != MXM_REF_UNIPOLAR_CELL_mV) { - /* AXIVION Next Codeline Style FaultDetection-UnusedAssignments: return value collects all negative results. */ + /* AXIVION Next Codeline Style FaultDetection-UnusedAssignments: return value collects all negative results. + */ retval = STD_NOT_OK; } } @@ -872,7 +884,7 @@ static STD_RETURN_TYPE_e GEN_MUST_CHECK_RETURN MXM_ParseVoltageReadallTest(MXM_M testBuffer[4] = 0x42u; /* DATACHECKBYTE, irrelevant for function, filled with dummy bytes */ testBuffer[5] = 0x44u; /* CRCBYTE, irrelevant for function, filled with dummy bytes */ testBufferLength = 6; - if (MXM_ParseVoltageReadall(testBuffer, testBufferLength, &pInstance->localVoltages, MXM_CONVERSION_UNIPOLAR) != + if (MXM_ParseVoltageReadAll(testBuffer, testBufferLength, &pInstance->localVoltages, MXM_CONVERSION_UNIPOLAR) != STD_OK) { /* AXIVION Next Codeline Style FaultDetection-UnusedAssignments: return value collects all negative results. */ retval = STD_NOT_OK; @@ -1040,35 +1052,35 @@ extern STD_RETURN_TYPE_e MXM_ConstructBalancingBuffer(MXM_BALANCING_STATE_s *pBa /* Iterate over all the cells of the module 'moduleBalancingIndex' in a daisy-chain */ if (pBalancingInstance->moduleBalancingIndex < MXM_MAXIMUM_NR_OF_MODULES) { - for (uint8_t c = 0; c < BS_NR_OF_CELL_BLOCKS_PER_MODULE; c++) { + for (uint8_t cb = 0u; cb < BS_NR_OF_CELL_BLOCKS_PER_MODULE; cb++) { /* Determine the position of the cell 'c' of module 'moduleBalancingIndex' in the DB */ uint8_t stringNumber = 0u; uint16_t moduleNumber = 0u; MXM_ConvertModuleToString(pBalancingInstance->moduleBalancingIndex, &stringNumber, &moduleNumber); - const uint16_t dBIndex = (moduleNumber * BS_NR_OF_CELL_BLOCKS_PER_MODULE) + c; - if (pBalancingInstance->pBalancingControl_table->balancingState[stringNumber][dBIndex] == 1u) { + if (pBalancingInstance->pBalancingControl_table->activateBalancing[stringNumber][moduleNumber][cb] == + true) { /* Cell 'c' of module '::moduleBalancingIndex' needs to be balanced. Need to determine the balancing order --> even or odd cells? If the balancing order has not been determined before, need to do it. */ if ((pBalancingInstance->evenCellsNeedBalancing == false) && (pBalancingInstance->oddCellsNeedBalancing == false)) { - if (((c % 2u) != 0u) && (pBalancingInstance->evenCellsBalancingProcessed == false)) { + if (((cb % 2u) != 0u) && (pBalancingInstance->evenCellsBalancingProcessed == false)) { pBalancingInstance->evenCellsNeedBalancing = true; - } else if (((c % 2u) == 0u) && (pBalancingInstance->oddCellsBalancingProcessed == false)) { + } else if (((cb % 2u) == 0u) && (pBalancingInstance->oddCellsBalancingProcessed == false)) { pBalancingInstance->oddCellsNeedBalancing = true; } else { /* nothing to do */ } } - if ((pBalancingInstance->evenCellsNeedBalancing == true) && ((c % 2u) != 0u) && + if ((pBalancingInstance->evenCellsNeedBalancing == true) && ((cb % 2u) != 0u) && /* If the even cells need to be balanced */ (pBalancingInstance->evenCellsBalancingProcessed == false)) { - pBalancingInstance->cellsToBalance |= ((uint16_t)0x01u << c); + pBalancingInstance->cellsToBalance |= ((uint16_t)0x01u << cb); } else if ( /* If the odd cells need to be balanced */ - (pBalancingInstance->oddCellsNeedBalancing == true) && ((c % 2u) == 0u) && + (pBalancingInstance->oddCellsNeedBalancing == true) && ((cb % 2u) == 0u) && (pBalancingInstance->oddCellsBalancingProcessed == false)) { - pBalancingInstance->cellsToBalance |= ((uint16_t)0x01u << c); + pBalancingInstance->cellsToBalance |= ((uint16_t)0x01u << cb); } else { /* nothing to do */ } @@ -1097,7 +1109,7 @@ extern STD_RETURN_TYPE_e MXM_ParseVoltagesIntoDB(const MXM_MONITORING_INSTANCE_s FAS_ASSERT(moduleNumber < BS_NR_OF_MODULES_PER_STRING); kpkInstance->pCellVoltages_table->moduleVoltage_mV[stringNumber][moduleNumber] = kpkInstance->localVoltages.blockVoltages[i_mod]; - /* every iteration that we hit a string first (module 0), we reset the packvoltage counter */ + /* every iteration that we hit a string first (module 0), we reset the packVoltage counter */ if (moduleNumber == 0u) { kpkInstance->pCellVoltages_table->stringVoltage_mV[stringNumber] = 0; } @@ -1120,8 +1132,7 @@ extern STD_RETURN_TYPE_e MXM_ParseVoltagesIntoDB(const MXM_MONITORING_INSTANCE_s numberValidVoltageMeasurements[stringNumber]++; } else { /* Invalidate cell voltage measurement */ - kpkInstance->pCellVoltages_table->invalidCellVoltage[stringNumber][moduleNumber] |= - ((uint64_t)1u << cb); + kpkInstance->pCellVoltages_table->invalidCellVoltage[stringNumber][moduleNumber][cb] = true; } } } @@ -1150,8 +1161,8 @@ extern STD_RETURN_TYPE_e MXM_ParseVoltagesIntoDB(const MXM_MONITORING_INSTANCE_s numberValidTemperatureMeasurements[stringNumber]++; } else { /* Invalidate temperature measurement */ - kpkInstance->pCellTemperatures_table->invalidCellTemperature[stringNumber][moduleNumber] |= - ((uint16_t)1u << kpkInstance->muxCounter); + kpkInstance->pCellTemperatures_table + ->invalidCellTemperature[stringNumber][moduleNumber][kpkInstance->muxCounter] = true; } } } @@ -1202,11 +1213,12 @@ extern void MXM_InitializeStateStruct( pMonitoringInstance->batteryCmdBuffer.regAddress = MXM_REG_VERSION; pMonitoringInstance->batteryCmdBuffer.lsb = 0u; pMonitoringInstance->batteryCmdBuffer.msb = 0u; - pMonitoringInstance->batteryCmdBuffer.blocksize = 0u; + pMonitoringInstance->batteryCmdBuffer.blockSize = 0u; pMonitoringInstance->batteryCmdBuffer.deviceAddress = 0u; pMonitoringInstance->batteryCmdBuffer.model = MXM_GetModelIdOfDaisyChain(); pMonitoringInstance->resultSelfCheck = STD_NOT_OK; - /* for the "static" pre-init self-checks: do not reset if the result has passed; it will not change; FMEA can change */ + /* for the "static" pre-init self-checks: do not reset if the result has passed; it will not change; FMEA can change + */ pMonitoringInstance->selfCheck.fmeaStatusASCI = STD_NOT_OK; for (uint32_t i = 0u; i < (MXM_MAXIMUM_NR_OF_MODULES * MXM_MAXIMUM_NR_OF_CELLS_PER_MODULE); i++) { @@ -1247,8 +1259,8 @@ extern STD_RETURN_TYPE_e MXM_PreInitSelfCheck(MXM_MONITORING_INSTANCE_s *pState) if (selfCheck->crc == STD_NOT_OK) { selfCheck->crc = MXM_CRC8SelfTest(); } - if (selfCheck->conv == STD_NOT_OK) { - selfCheck->conv = MXM_ConvertTest(); + if (selfCheck->conversion == STD_NOT_OK) { + selfCheck->conversion = MXM_ConvertTest(); } if (selfCheck->firstSetBit == STD_NOT_OK) { selfCheck->firstSetBit = MXM_FirstSetBitTest(); @@ -1257,13 +1269,13 @@ extern STD_RETURN_TYPE_e MXM_PreInitSelfCheck(MXM_MONITORING_INSTANCE_s *pState) selfCheck->extractValueFromRegister = MXM_ExtractValueFromRegisterTest(); } if (selfCheck->parseVoltageReadall == STD_NOT_OK) { - selfCheck->parseVoltageReadall = MXM_ParseVoltageReadallTest(pState); + selfCheck->parseVoltageReadall = MXM_ParseVoltageReadAllTest(pState); } if (selfCheck->addressSpaceChecker == STD_NOT_OK) { selfCheck->addressSpaceChecker = MXM_5XUserAccessibleAddressSpaceCheckerSelfCheck(); } - if ((selfCheck->crc == STD_OK) && (selfCheck->addressSpaceChecker == STD_OK) && (selfCheck->conv == STD_OK) && + if ((selfCheck->crc == STD_OK) && (selfCheck->addressSpaceChecker == STD_OK) && (selfCheck->conversion == STD_OK) && (selfCheck->firstSetBit == STD_OK) && (selfCheck->extractValueFromRegister == STD_OK) && (selfCheck->parseVoltageReadall == STD_OK)) { /* check has passed, return value already set */ @@ -1277,7 +1289,7 @@ extern STD_RETURN_TYPE_e MXM_PreInitSelfCheck(MXM_MONITORING_INSTANCE_s *pState) } extern MXM_MONITORING_STATE_e GEN_MUST_CHECK_RETURN - MXM_MonGetVoltages(MXM_MONITORING_INSTANCE_s *pState, MXM_REG_NAME_e regAddress) { +MXM_MonGetVoltages(MXM_MONITORING_INSTANCE_s *pState, MXM_REG_NAME_e regAddress) { FAS_ASSERT(pState != NULL_PTR); MXM_MONITORING_STATE_e retval = MXM_MONITORING_STATE_PENDING; if (pState->requestStatus5x == MXM_5X_STATE_UNSENT) { @@ -1292,11 +1304,11 @@ extern MXM_MONITORING_STATE_e GEN_MUST_CHECK_RETURN /* AXIVION Next Codeline Style FaultDetection-UnusedAssignments: default value is set as a safety measure */ STD_RETURN_TYPE_e readallReturn = STD_NOT_OK; if (regAddress == MXM_REG_BLOCK) { - readallReturn = MXM_ParseVoltageReadall( + readallReturn = MXM_ParseVoltageReadAll( pState->rxBuffer, temp_len, &pState->localVoltages, MXM_CONVERSION_BLOCK_VOLTAGE); } else { readallReturn = - MXM_ParseVoltageReadall(pState->rxBuffer, temp_len, &pState->localVoltages, MXM_CONVERSION_UNIPOLAR); + MXM_ParseVoltageReadAll(pState->rxBuffer, temp_len, &pState->localVoltages, MXM_CONVERSION_UNIPOLAR); } if (readallReturn == STD_NOT_OK) { MXM_ErrorHandlerReset(pState, false); @@ -1386,7 +1398,8 @@ extern void MXM_StateMachine(MXM_MONITORING_INSTANCE_s *pInstance) { pInstance->selfCheck.fmeaStatusASCI = STD_OK; const STD_RETURN_TYPE_e resultNumberOfSatellitesGood = MXM_5XGetNumberOfSatellitesGood(pInstance->pInstance5X); - /* report to diag module, Maxim driver reports always to string 0 (current implementation just has one interface) */ + /* report to diag module, Maxim driver reports always to string 0 (current implementation just has one + * interface) */ (void)DIAG_CheckEvent(resultNumberOfSatellitesGood, DIAG_ID_AFE_CONFIG, DIAG_STRING, 0u); if ((pInstance->resultSelfCheck == STD_OK) && (pInstance->selfCheck.fmeaStatusASCI == STD_OK) && (resultNumberOfSatellitesGood == STD_OK)) { @@ -1425,17 +1438,17 @@ extern void MXM_StateMachine(MXM_MONITORING_INSTANCE_s *pInstance) { /*========== Externalized Static Function Implementations (Unit Test) =======*/ #ifdef UNITY_UNIT_TEST -extern STD_RETURN_TYPE_e TEST_MXM_ParseVoltageReadallTest(MXM_MONITORING_INSTANCE_s *pInstance) { - return MXM_ParseVoltageReadallTest(pInstance); +extern STD_RETURN_TYPE_e TEST_MXM_ParseVoltageReadAllTest(MXM_MONITORING_INSTANCE_s *pInstance) { + return MXM_ParseVoltageReadAllTest(pInstance); } extern STD_RETURN_TYPE_e TEST_MXM_ParseVoltagesIntoDB(MXM_MONITORING_INSTANCE_s *pInstance) { return MXM_ParseVoltagesIntoDB(pInstance); } -extern STD_RETURN_TYPE_e TEST_MXM_ParseVoltageReadall( +extern STD_RETURN_TYPE_e TEST_MXM_ParseVoltageReadAll( uint8_t *voltRxBuffer, uint16_t voltRxBufferLength, - MXM_DATA_STORAGE_s *datastorage, + MXM_DATA_STORAGE_s *dataStorage, MXM_CONVERSION_TYPE_e conversionType) { - return MXM_ParseVoltageReadall(voltRxBuffer, voltRxBufferLength, datastorage, conversionType); + return MXM_ParseVoltageReadAll(voltRxBuffer, voltRxBufferLength, dataStorage, conversionType); } #endif diff --git a/src/app/driver/afe/maxim/common/mxm_1785x.h b/src/app/driver/afe/maxim/common/mxm_1785x.h index 7a73250b..6fec1d7e 100644 --- a/src/app/driver/afe/maxim/common/mxm_1785x.h +++ b/src/app/driver/afe/maxim/common/mxm_1785x.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,38 +43,35 @@ * @file mxm_1785x.h * @author foxBMS Team * @date 2019-01-15 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix MXM * * @brief Headers for the driver for the MAX17841B ASCI and MAX1785x * analog front-end + * @details Battery monitoring driver for MAX1785x battery monitoring ICs. * - * @details def + * This module supplies a driver for the Battery Monitoring ICs of the + * MAX1785x-family by Maxim Integrated. * - */ - -/** - * @brief Battery monitoring driver for MAX1785x battery monitoring ICs. - * - * This module supplies a driver for the Battery Monitoring ICs of the - * MAX1785x-family by Maxim Integrated. - * - * Entry point for the module is the function #MXM_Tick() in mxm_afe.c. It handles - * the measurement flow and the coordination of the underlying state-machines. - * Below this layer two state-machines are implemented. - * - * The state-machine in mxm_battery_management.c is executed with the - * #MXM_5XStateMachine()-function. - * This state-machine exposes commands of the Maxim Battery Management Protocol - * to the upper layers. Below, it translates these commands into state-changes - * for the underlying state-machine. - * This state-machine is implemented in mxm_17841b.c and executed with - * #MXM_41BStateMachine(). It handles the register- and buffer-transactions - * required for the MAX17841B communication interface (Maxim calls - * this analog front-end ASCI). + * Entry point for the module is the function #MXM_Tick() in + * mxm_afe.c. + * It handles the measurement flow and the coordination of the + * underlying state-machines. + * Below this layer two state-machines are implemented. * + * The state-machine in mxm_battery_management.c is executed with the + * #MXM_5XStateMachine()-function. + * This state-machine exposes commands of the Maxim Battery Management + * Protocol to the upper layers. + * Below, it translates these commands into state-changes for the + * underlying state-machine. + * This state-machine is implemented in mxm_17841b.c and executed with + * #MXM_41BStateMachine(). + * It handles the register- and buffer-transactions required for the + * MAX17841B communication interface (Maxim calls this analog + * front-end ASCI). */ #ifndef FOXBMS__MXM_1785X_H_ @@ -246,7 +243,7 @@ extern void MXM_StateMachineOperation(MXM_MONITORING_INSTANCE_s *pState); * not recover on its own */ extern MXM_MONITORING_STATE_e GEN_MUST_CHECK_RETURN - MXM_MonGetVoltages(MXM_MONITORING_INSTANCE_s *pState, MXM_REG_NAME_e regAddress); +MXM_MonGetVoltages(MXM_MONITORING_INSTANCE_s *pState, MXM_REG_NAME_e regAddress); /** * @brief Copies measured voltage data into the database. @@ -275,13 +272,13 @@ extern STD_RETURN_TYPE_e MXM_ParseVoltagesIntoDB(const MXM_MONITORING_INSTANCE_s extern MXM_MODEL_ID_e MXM_GetModelIdOfDaisyChain(void); /** - * @brief Execute all preinit selfchecks. + * @brief Execute all pre-init self-checks. * @details Executes the following self-checks: * - #MXM_CRC8SelfTest() * - #MXM_ConvertTest() * - #MXM_FirstSetBitTest() * - #MXM_ExtractValueFromRegisterTest() - * - #MXM_ParseVoltageReadallTest() + * - #MXM_ParseVoltageReadAllTest() * - #MXM_5XUserAccessibleAddressSpaceCheckerSelfCheck() * * These self-checks do not need an initialized daisy-chain @@ -299,12 +296,12 @@ extern STD_RETURN_TYPE_e MXM_PreInitSelfCheck(MXM_MONITORING_INSTANCE_s *pState) /*========== Externalized Static Functions Prototypes (Unit Test) ===========*/ #ifdef UNITY_UNIT_TEST -extern STD_RETURN_TYPE_e TEST_MXM_ParseVoltageReadallTest(MXM_MONITORING_INSTANCE_s *pInstance); +extern STD_RETURN_TYPE_e TEST_MXM_ParseVoltageReadAllTest(MXM_MONITORING_INSTANCE_s *pInstance); extern STD_RETURN_TYPE_e TEST_MXM_ParseVoltagesIntoDB(MXM_MONITORING_INSTANCE_s *pInstance); -extern STD_RETURN_TYPE_e TEST_MXM_ParseVoltageReadall( +extern STD_RETURN_TYPE_e TEST_MXM_ParseVoltageReadAll( uint8_t *voltRxBuffer, uint16_t voltRxBufferLength, - MXM_DATA_STORAGE_s *datastorage, + MXM_DATA_STORAGE_s *dataStorage, MXM_CONVERSION_TYPE_e conversionType); #endif diff --git a/src/app/driver/afe/maxim/common/mxm_1785x_tools.c b/src/app/driver/afe/maxim/common/mxm_1785x_tools.c index 4ac9b673..5db8c42e 100644 --- a/src/app/driver/afe/maxim/common/mxm_1785x_tools.c +++ b/src/app/driver/afe/maxim/common/mxm_1785x_tools.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,16 +43,14 @@ * @file mxm_1785x_tools.c * @author foxBMS Team * @date 2020-07-15 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix MXM * * @brief This is a collection of helper functions for the MAX1785x ICs - * * @details This collection of helper functions for the MAX1785x ICs helps to * calculate the lsb and msb for register values and similar tasks. - * */ /*========== Includes =======================================================*/ @@ -255,15 +253,15 @@ extern void MXM_Unipolar14BitInto16Bit(uint16_t inputValue, uint8_t *lsb, uint8_ *msb = (uint8_t)(workingCopy >> MXM_TOOLS_LENGTH_BYTE); } -extern uint16_t MXM_VoltageIntoUnipolar14Bit(uint16_t voltage_mV, uint16_t fullscaleReference_mV) { +extern uint16_t MXM_VoltageIntoUnipolar14Bit(uint16_t voltage_mV, uint16_t fullScaleReference_mV) { /* AXIVION Routine Generic-MissingParameterAssert: voltage_mV: parameter accepts whole range */ - /* AXIVION Routine Generic-MissingParameterAssert: fullscaleReference_mV: parameter accepts whole range */ + /* AXIVION Routine Generic-MissingParameterAssert: fullScaleReference_mV: parameter accepts whole range */ uint32_t temporaryVoltage = voltage_mV; - /* multiply by the 14bit fullscale */ + /* multiply by the 14bit fullScale */ temporaryVoltage = temporaryVoltage * 0x3FFFu; - /* return divided by fullscale_reference */ - return (uint16_t)(temporaryVoltage / fullscaleReference_mV); + /* return divided by fullScale_reference */ + return (uint16_t)(temporaryVoltage / fullScaleReference_mV); } extern void MXM_ConvertModuleToString( diff --git a/src/app/driver/afe/maxim/common/mxm_1785x_tools.h b/src/app/driver/afe/maxim/common/mxm_1785x_tools.h index ecf0369a..337aa007 100644 --- a/src/app/driver/afe/maxim/common/mxm_1785x_tools.h +++ b/src/app/driver/afe/maxim/common/mxm_1785x_tools.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,16 +43,14 @@ * @file mxm_1785x_tools.h * @author foxBMS Team * @date 2020-07-15 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix MXM * * @brief This is a collection of helper functions for the MAX1785x ICs - * * @details This collection of helper functions for the MAX1785x ICs helps to * calculate the lsb and msb for register values and similar tasks. - * */ #ifndef FOXBMS__MXM_1785X_TOOLS_H_ @@ -175,20 +173,20 @@ typedef enum { } MXM_MONITORING_STATE_e; /** - * struct describing the different return values of selfchecks that the driver can execute + * struct describing the different return values of self-checks that the driver can execute */ typedef struct { STD_RETURN_TYPE_e crc; /*!< CRC self-check; stores the return value of #MXM_CRC8SelfTest(). */ - STD_RETURN_TYPE_e conv; /*!< Conversion self-check; stores the return value of #MXM_ConvertTest(). */ + STD_RETURN_TYPE_e conversion; /*!< Conversion self-check; stores the return value of #MXM_ConvertTest(). */ STD_RETURN_TYPE_e firstSetBit; /*!< First Set Bit self-check; stores the return value of #MXM_FirstSetBitTest(). */ - STD_RETURN_TYPE_e - extractValueFromRegister; /*!< Extract value from Register self-check; stores the return value of #MXM_ExtractValueFromRegisterTest(). */ - STD_RETURN_TYPE_e - parseVoltageReadall; /*!< Voltage parsing of READALL; stores the return value of #MXM_ParseVoltageReadallTest(). */ - STD_RETURN_TYPE_e - addressSpaceChecker; /*!< Address space checker; stores the return value of #MXM_5XUserAccessibleAddressSpaceCheckerSelfCheck(). */ - STD_RETURN_TYPE_e - fmeaStatusASCI; /*!< MAX17841B FMEA register; stores the value of the FMEA check conducted in the state #MXM_STATEMACH_41B_CHECK_FMEA. */ + STD_RETURN_TYPE_e extractValueFromRegister; /*!< Extract value from Register self-check; stores the return value of + #MXM_ExtractValueFromRegisterTest(). */ + STD_RETURN_TYPE_e parseVoltageReadall; /*!< Voltage parsing of READALL; stores the return value of + #MXM_ParseVoltageReadAllTest(). */ + STD_RETURN_TYPE_e addressSpaceChecker; /*!< Address space checker; stores the return value of + #MXM_5XUserAccessibleAddressSpaceCheckerSelfCheck(). */ + STD_RETURN_TYPE_e fmeaStatusASCI; /*!< MAX17841B FMEA register; stores the value of the FMEA check conducted in the + state #MXM_STATEMACH_41B_CHECK_FMEA. */ } MXM_SELFCHECK_s; /* TODO implement filling of values */ @@ -226,7 +224,7 @@ typedef struct { bool oddCellsNeedBalancing; /*!< indicates that odd cells need balancing */ bool evenCellsBalancingProcessed; /*!< balancing of even cells has been processed */ bool oddCellsBalancingProcessed; /*!< balancing of odd cells has been processed */ - uint16_t cellsToBalance; /*!< bitfield used for register BALSWCTRL, 16 bits for upt to 14 cells */ + uint16_t cellsToBalance; /*!< bit field used for register BALSWCTRL, 16 bits for up to 14 cells */ uint32_t previousTimeStamp; /*!< timestamp of previous balancing checkpoint */ uint32_t currentTimeStamp; /*!< timestamp of current balancing checkpoint */ DATA_BLOCK_BALANCING_CONTROL_s *const pBalancingControl_table; /*!< balancing control table */ @@ -278,7 +276,8 @@ typedef struct { MXM_DATA_STORAGE_s localVoltages; MXM_REGISTRY_ENTRY_s registry[MXM_MAXIMUM_NR_OF_MODULES]; /*!< registry for connected monitoring ICs */ uint8_t rxBuffer[MXM_RX_BUFFER_LENGTH]; /*!< buffer that stores the incoming data from the lower state-machines. - It contains the command sequence as it is received on the ASCI together with the Battery Management Protocol command. */ + It contains the command sequence as it is received on the ASCI together with the Battery Management Protocol + command. */ } MXM_MONITORING_INSTANCE_s; /*========== Extern Constant and Variable Declarations ======================*/ @@ -363,15 +362,15 @@ extern void MXM_Unipolar14BitInto16Bit(uint16_t inputValue, uint8_t *lsb, uint8_ /** * @brief convert a voltage value into a unipolar 14bit value - * @details Takes a voltage value in mV together with a reference for fullscale + * @details Takes a voltage value in mV together with a reference for full scale * values into a unipolar 14bit value. * @param[in] voltage_mV voltage in mV - * @param[in] fullscaleReference_mV value of the fullscale in mV; + * @param[in] fullScaleReference_mV value of the full scale in mV; * typically 5000 * @return unipolar 14bit value for usage with * #MXM_Unipolar14BitInto16Bit() */ -extern uint16_t MXM_VoltageIntoUnipolar14Bit(uint16_t voltage_mV, uint16_t fullscaleReference_mV); +extern uint16_t MXM_VoltageIntoUnipolar14Bit(uint16_t voltage_mV, uint16_t fullScaleReference_mV); /** * @brief Get the string and module number from a global module number diff --git a/src/app/driver/afe/maxim/common/mxm_41b_register_map.h b/src/app/driver/afe/maxim/common/mxm_41b_register_map.h index 54eef5ce..7485f245 100644 --- a/src/app/driver/afe/maxim/common/mxm_41b_register_map.h +++ b/src/app/driver/afe/maxim/common/mxm_41b_register_map.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file mxm_41b_register_map.h * @author foxBMS Team * @date 2020-06-25 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix MXM * * @brief Register map of the MAX17841 bridge IC - * + * @details TODO */ #ifndef FOXBMS__MXM_41B_REGISTER_MAP_H_ @@ -77,7 +77,8 @@ typedef uint8_t MXM_41B_BUF_CMD_t; */ typedef uint8_t MXM_41B_REG_ADD_t; -/* AXIVION Disable Style MisraC2012-2.5: For completeness, this section lists all register addresses even though the driver does not use them. */ +/* AXIVION Disable Style MisraC2012-2.5: For completeness, this section lists all register addresses even though the + * driver does not use them. */ /** * @brief Reset transmit buffer to default state and clear TX_Q and LD_Q */ diff --git a/src/app/driver/afe/maxim/common/mxm_afe_dma.c b/src/app/driver/afe/maxim/common/mxm_afe_dma.c index b8dffd66..e66cf0f9 100644 --- a/src/app/driver/afe/maxim/common/mxm_afe_dma.c +++ b/src/app/driver/afe/maxim/common/mxm_afe_dma.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file mxm_afe_dma.c * @author foxBMS Team * @date 2020-06-16 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix AFE * * @brief Driver for the DMA module for the Maxim driver. - * + * @details TODO */ /*========== Includes =======================================================*/ diff --git a/src/app/driver/afe/maxim/common/mxm_basic_defines.h b/src/app/driver/afe/maxim/common/mxm_basic_defines.h index 0ad41da8..2d38b159 100644 --- a/src/app/driver/afe/maxim/common/mxm_basic_defines.h +++ b/src/app/driver/afe/maxim/common/mxm_basic_defines.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,14 +43,13 @@ * @file mxm_basic_defines.h * @author foxBMS Team * @date 2020-02-11 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix MXM * * @brief Basic defines for the complete Maxim driver - * - * @details def + * @details TODO * */ @@ -105,7 +104,7 @@ typedef enum { MXM_MODEL_ID_invalid = 0x1000u, /*!< invalid version ID (cannot be encoded in register or unknown value) */ } MXM_MODEL_ID_e; -/** values that the datacheck byte can assume */ +/** values that the data-check byte can assume */ typedef enum { MXM_DC_PEC_ERROR = (1u << 7u), /*!< PEC Error */ MXM_DC_ALRTFMEA = (1u << 6u), /*!< FMEA alert */ @@ -120,22 +119,22 @@ typedef enum { /** valid values for the silicon version of connected monitoring ICs */ typedef enum { - MXM_SILICON_VERSION_0 = 0x0u, /*!< initialization value */ - MXM_SILICON_VERSION_1 = 0x1u, /*!< silicon version 1 (known from data-sheet) */ - MXM_SILICON_VERSION_2 = 0x2u, /*!< silicon version 2 */ - MXM_SILICON_VERSION_3 = 0x3u, /*!< silicon version 3 */ - MXM_SILICON_VERSION_4 = 0x4u, /*!< silicon version 4 (located on old EV kit 2018) */ - MXM_SILICON_VERSION_5 = 0x5u, /*!< silicon version 5 (located on new EV kit 04.2019) */ - MXM_SILICON_VERSION_6 = 0x6u, /*!< silicon version 6 */ - MXM_SILICON_VERSION_7 = 0x7u, /*!< silicon version 7 (most recent as of 2021-11-21) */ - MXM_SILICON_VERSION_8 = 0x8u, /*!< unknown silicon version */ - MXM_SILICON_VERSION_9 = 0x9u, /*!< unknown silicon version */ - MXM_SILICON_VERSION_10 = 0xAu, /*!< unknown silicon version */ - MXM_SILICON_VERSION_11 = 0xBu, /*!< unknown silicon version */ - MXM_SILICON_VERSION_12 = 0xCu, /*!< unknown silicon version */ - MXM_SILICON_VERSION_13 = 0xDu, /*!< unknown silicon version */ - MXM_SILICON_VERSION_14 = 0xEu, /*!< unknown silicon version */ - MXM_SILICON_VERSION_15 = 0xFu, /*!< unknown silicon version */ + MXM_SILICON_VERSION_0 = 0x00u, /*!< initialization value */ + MXM_SILICON_VERSION_1 = 0x01u, /*!< silicon version 1 (known from data-sheet) */ + MXM_SILICON_VERSION_2 = 0x02u, /*!< silicon version 2 */ + MXM_SILICON_VERSION_3 = 0x03u, /*!< silicon version 3 */ + MXM_SILICON_VERSION_4 = 0x04u, /*!< silicon version 4 (located on old evaluation kit 2018) */ + MXM_SILICON_VERSION_5 = 0x05u, /*!< silicon version 5 (located on new evaluation kit 04.2019) */ + MXM_SILICON_VERSION_6 = 0x06u, /*!< silicon version 6 */ + MXM_SILICON_VERSION_7 = 0x07u, /*!< silicon version 7 (most recent as of 2021-11-21) */ + MXM_SILICON_VERSION_8 = 0x08u, /*!< unknown silicon version */ + MXM_SILICON_VERSION_9 = 0x09u, /*!< unknown silicon version */ + MXM_SILICON_VERSION_10 = 0x0Au, /*!< unknown silicon version */ + MXM_SILICON_VERSION_11 = 0x0Bu, /*!< unknown silicon version */ + MXM_SILICON_VERSION_12 = 0x0Cu, /*!< unknown silicon version */ + MXM_SILICON_VERSION_13 = 0x0Du, /*!< unknown silicon version */ + MXM_SILICON_VERSION_14 = 0x0Eu, /*!< unknown silicon version */ + MXM_SILICON_VERSION_15 = 0x0Fu, /*!< unknown silicon version */ MXM_SILICON_VERSION_INVALID = 0x10u, /*!< due to the register size, no version number can take this value */ } MXM_SILICON_VERSION_e; diff --git a/src/app/driver/afe/maxim/common/mxm_battery_management.c b/src/app/driver/afe/maxim/common/mxm_battery_management.c index 8118c606..de044f41 100644 --- a/src/app/driver/afe/maxim/common/mxm_battery_management.c +++ b/src/app/driver/afe/maxim/common/mxm_battery_management.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,15 +43,13 @@ * @file mxm_battery_management.c * @author foxBMS Team * @date 2019-01-14 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix MXM * * @brief Driver for the MAX17841B ASCI and MAX1785x analog front-end - * - * @details def - * + * @details TODO */ /*========== Includes =======================================================*/ @@ -69,9 +67,9 @@ /*========== Macros and Definitions =========================================*/ -/** length of the helloall command @{*/ -#define HELLOALL_TX_LENGTH (3u) -#define HELLOALL_RX_LENGTH HELLOALL_TX_LENGTH +/** length of the helloAll command @{*/ +#define HELLO_ALL_TX_LENGTH (3u) +#define HELLO_ALL_RX_LENGTH HELLO_ALL_TX_LENGTH /**@}*/ /** threshold above which an error handling procedure is triggered */ @@ -98,7 +96,6 @@ * @brief Clear the command-buffer. * @details Clears #MXM_5X_INSTANCE_s::commandBuffer by writing 0x00 to every entry. * @param[in,out] pInstance pointer to the state-struct - * @return always return #STD_OK */ static void MXM_5XClearCommandBuffer(MXM_5X_INSTANCE_s *pInstance); @@ -145,12 +142,12 @@ static STD_RETURN_TYPE_e MXM_52IsUserAccessibleRegister(uint8_t regAddress); static STD_RETURN_TYPE_e MXM_53IsUserAccessibleRegister(uint8_t regAddress); /** - * @brief clears the command buffer and writes HELLOALL into the buffer - * @details Fills the command buffer with a HELLOALL message after having it + * @brief clears the command buffer and writes HELLO ALL into the buffer + * @details Fills the command buffer with a HELLO ALL message after having it * cleaned. * @param[in,out] pInstance pointer to the state-struct */ -static void MXM_5XConstructCommandBufferHelloall(MXM_5X_INSTANCE_s *pInstance); +static void MXM_5XConstructCommandBufferHelloAll(MXM_5X_INSTANCE_s *pInstance); /** * @brief clears the command buffer and writes WRITEALL into the buffer @@ -290,7 +287,8 @@ static STD_RETURN_TYPE_e MXM_52IsUserAccessibleRegister(uint8_t regAddress) { STD_RETURN_TYPE_e retval = STD_NOT_OK; /* check if regAddress is outside user-accessible area */ - /* AXIVION Disable Style Generic-NoMagicNumbers: memory limits of ICs are specific and unchangeable, therefore hardcoded */ + /* AXIVION Disable Style Generic-NoMagicNumbers: memory limits of ICs are specific and unchangeable, therefore hard + * coded */ bool registerAddressIsInvalid = (regAddress == 0x5Du); registerAddressIsInvalid = registerAddressIsInvalid || (regAddress == 0x5Eu); registerAddressIsInvalid = registerAddressIsInvalid || (regAddress > 0x98u); @@ -306,7 +304,8 @@ static STD_RETURN_TYPE_e MXM_52IsUserAccessibleRegister(uint8_t regAddress) { static STD_RETURN_TYPE_e MXM_53IsUserAccessibleRegister(uint8_t regAddress) { STD_RETURN_TYPE_e retval = STD_NOT_OK; /* check if regAddress is outside user-accessible area */ - /* AXIVION Disable Style Generic-NoMagicNumbers: memory limits of ICs are specific and unchangeable, therefore hardcoded */ + /* AXIVION Disable Style Generic-NoMagicNumbers: memory limits of ICs are specific and unchangeable, therefore hard + * coded */ bool registerAddressIsInvalid = (regAddress == 0x46u); registerAddressIsInvalid = registerAddressIsInvalid || ((0x2Cu <= regAddress) && (regAddress <= 0x2Fu)); registerAddressIsInvalid = registerAddressIsInvalid || ((0x84u <= regAddress) && (regAddress <= 0x8Bu)); @@ -320,12 +319,12 @@ static STD_RETURN_TYPE_e MXM_53IsUserAccessibleRegister(uint8_t regAddress) { return retval; } -static void MXM_5XConstructCommandBufferHelloall(MXM_5X_INSTANCE_s *pInstance) { +static void MXM_5XConstructCommandBufferHelloAll(MXM_5X_INSTANCE_s *pInstance) { FAS_ASSERT(pInstance != NULL_PTR); MXM_5XClearCommandBuffer(pInstance); - pInstance->commandBuffer[0] = BATTERY_MANAGEMENT_HELLOALL; + pInstance->commandBuffer[0] = BATTERY_MANAGEMENT_HELLO_ALL; pInstance->commandBuffer[1] = 0x00; - pInstance->commandBuffer[2] = HELLOALL_START_SEED; + pInstance->commandBuffer[2] = HELLO_ALL_START_SEED; pInstance->commandBufferCurrentLength = 3; } @@ -760,13 +759,13 @@ static void MXM_5XStateHandlerInit(MXM_5X_INSTANCE_s *pInstance5x, MXM_41B_INSTA } else if (pInstance5x->status41b == MXM_41B_STATE_ERROR) { MXM_5XHandle41BErrorState(pInstance5x); } else if (pInstance5x->status41b == MXM_41B_STATE_PROCESSED) { - MXM_5XTransitionToSubstate(pInstance5x, MXM_5X_INIT_WAKE_UP_SATELLITE_DEVICES_HELLOALL); + MXM_5XTransitionToSubstate(pInstance5x, MXM_5X_INIT_WAKE_UP_SATELLITE_DEVICES_HELLO_ALL); } else { FAS_ASSERT(FAS_TRAP); } - } else if (pInstance5x->substate == MXM_5X_INIT_WAKE_UP_SATELLITE_DEVICES_HELLOALL) { + } else if (pInstance5x->substate == MXM_5X_INIT_WAKE_UP_SATELLITE_DEVICES_HELLO_ALL) { if (pInstance5x->status41b == MXM_41B_STATE_UNSENT) { - MXM_5XConstructCommandBufferHelloall(pInstance5x); + MXM_5XConstructCommandBufferHelloAll(pInstance5x); const STD_RETURN_TYPE_e stateRequestReturn = MXM_41BSetStateRequest( pInstance41b, MXM_STATEMACH_41B_UART_TRANSACTION, @@ -774,7 +773,7 @@ static void MXM_5XStateHandlerInit(MXM_5X_INSTANCE_s *pInstance5x, MXM_41B_INSTA pInstance5x->commandBufferCurrentLength, 0, pInstance5x->rxBuffer, - HELLOALL_RX_LENGTH, + HELLO_ALL_RX_LENGTH, &pInstance5x->status41b); FAS_ASSERT(stateRequestReturn == STD_OK); } else if (pInstance5x->status41b == MXM_41B_STATE_UNPROCESSED) { @@ -782,12 +781,12 @@ static void MXM_5XStateHandlerInit(MXM_5X_INSTANCE_s *pInstance5x, MXM_41B_INSTA } else if (pInstance5x->status41b == MXM_41B_STATE_ERROR) { MXM_5XHandle41BErrorState(pInstance5x); } else if (pInstance5x->status41b == MXM_41B_STATE_PROCESSED) { - pInstance5x->substate = MXM_5X_INIT_WAKE_UP_SATELLITE_DEVICES_HELLOALL_VERIFY_MSG_AND_COUNT; + pInstance5x->substate = MXM_5X_INIT_WAKE_UP_SATELLITE_DEVICES_HELLO_ALL_VERIFY_MSG_AND_COUNT; } else { FAS_ASSERT(FAS_TRAP); } /* TODO check for receive buffer errors and handle */ - } else if (pInstance5x->substate == MXM_5X_INIT_WAKE_UP_SATELLITE_DEVICES_HELLOALL_VERIFY_MSG_AND_COUNT) { + } else if (pInstance5x->substate == MXM_5X_INIT_WAKE_UP_SATELLITE_DEVICES_HELLO_ALL_VERIFY_MSG_AND_COUNT) { /* check if the commandBuffer matches with the receive buffer */ STD_RETURN_TYPE_e commandBufferMatchesReceiveBuffer = STD_OK; for (uint8_t i = 0u; i < (pInstance5x->commandBufferCurrentLength - 1u); i++) { @@ -797,7 +796,8 @@ static void MXM_5XStateHandlerInit(MXM_5X_INSTANCE_s *pInstance5x, MXM_41B_INSTA } /* update number of satellites */ pInstance5x->numberOfSatellites = - (uint8_t)((pInstance5x->rxBuffer[HELLOALL_RX_LENGTH - 1u] - HELLOALL_START_SEED) & MXM_5X_BIT_MASK_ONE_BYTE); + (uint8_t)((pInstance5x->rxBuffer[HELLO_ALL_RX_LENGTH - 1u] - HELLO_ALL_START_SEED) & + MXM_5X_BIT_MASK_ONE_BYTE); /* Plausibility check, compare with preset number of satellites */ if (pInstance5x->numberOfSatellites == (BS_NR_OF_MODULES_PER_STRING * BS_NR_OF_STRINGS)) { @@ -931,7 +931,7 @@ extern void MXM_5X_InitializeStateStruct(MXM_5X_INSTANCE_s *pInstance) { pInstance->commandPayload.regAddress = MXM_REG_VERSION; pInstance->commandPayload.lsb = 0u; pInstance->commandPayload.msb = 0u; - pInstance->commandPayload.blocksize = 0u; + pInstance->commandPayload.blockSize = 0u; pInstance->commandPayload.deviceAddress = 0u; pInstance->processed = NULL_PTR; pInstance->status41b = MXM_41B_STATE_UNSENT; @@ -1072,9 +1072,9 @@ void MXM_5XStateMachine(MXM_41B_INSTANCE_s *pInstance41b, MXM_5X_INSTANCE_s *pIn extern STD_RETURN_TYPE_e GEN_MUST_CHECK_RETURN MXM_5XUserAccessibleAddressSpaceCheckerSelfCheck(void) { /* check: - * - user memory is contained in range 0x00 to 0x98 - * - reserved addresses in user address space: - * 0x2C, 0x2D, 0x2E, 0x2F, 0x46 and 0x84 through 0x8B */ + * - user memory is contained in range 0x00 to 0x98 + * - reserved addresses in user address space: + * 0x2C, 0x2D, 0x2E, 0x2F, 0x46 and 0x84 through 0x8B */ /* AXIVION Disable Style Generic-NoMagicNumbers: This test function uses magic numbers to test predefined values. */ /* expected #STD_OK */ diff --git a/src/app/driver/afe/maxim/common/mxm_battery_management.h b/src/app/driver/afe/maxim/common/mxm_battery_management.h index 5e2b76fa..bb614413 100644 --- a/src/app/driver/afe/maxim/common/mxm_battery_management.h +++ b/src/app/driver/afe/maxim/common/mxm_battery_management.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,16 +43,14 @@ * @file mxm_battery_management.h * @author foxBMS Team * @date 2019-01-14 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix MXM * * @brief Headers for the driver for the MAX17841B ASCI and * MAX1785x analog front-end - * - * @details def - * + * @details TODO */ #ifndef FOXBMS__MXM_BATTERY_MANAGEMENT_H_ @@ -79,8 +77,8 @@ /** length of the rx buffer */ #define MXM_5X_RX_BUFFER_LEN 100u -/** seed for helloall, should be 0x00u except for special edge cases */ -#define HELLOALL_START_SEED 0x00u +/** seed for helloAll, should be 0x00u except for special edge cases */ +#define HELLO_ALL_START_SEED 0x00u /** seed for data check, should be 0x00u */ #define DATA_CHECK_BYTE_SEED 0x00u @@ -93,14 +91,14 @@ typedef uint8_t MXM_BATTERY_MANAGEMENT_COMMAND_t; /** - * @brief HELLOALL message + * @brief HELLO ALL message */ -#define BATTERY_MANAGEMENT_HELLOALL ((MXM_BATTERY_MANAGEMENT_COMMAND_t)0x57u) +#define BATTERY_MANAGEMENT_HELLO_ALL ((MXM_BATTERY_MANAGEMENT_COMMAND_t)0x57u) /** - * @brief ALERTPACKET message + * @brief ALERT PACKET message */ -#define BATTERY_MANAGEMENT_ALERTPACKET ((MXM_BATTERY_MANAGEMENT_COMMAND_t)0x21u) +#define BATTERY_MANAGEMENT_ALERT_PACKET ((MXM_BATTERY_MANAGEMENT_COMMAND_t)0x21u) /** * @brief WRITEDEVICE message (write single register of a single device) @@ -129,12 +127,12 @@ typedef uint8_t MXM_BATTERY_MANAGEMENT_COMMAND_t; /** * @brief DOWNHOST message (make the downhost writing) - * @details This feature is only useable on downhost line. + * @details This feature is only usable on downhost line. */ #define BATTERY_MANAGEMENT_DOWNHOST ((MXM_BATTERY_MANAGEMENT_COMMAND_t)0x09u) /** - * @brief UPHOST message (make the uphost writing, only useable on uphost line) + * @brief UPHOST message (make the uphost writing, only usable on uphost line) */ #define BATTERY_MANAGEMENT_UPHOST ((MXM_BATTERY_MANAGEMENT_COMMAND_t)0x08u) @@ -192,10 +190,10 @@ typedef enum { MXM_5X_INIT_WAKE_UP_SATELLITE_DEVICES_CLEAR_TRANSMIT_BUFFER, /** substate for the wake-up routine, clear the receive buffer */ MXM_5X_INIT_WAKE_UP_SATELLITE_DEVICES_CLEAR_RECEIVE_BUFFER_2, - /** substate for the wake-up routine, sending helloall to the daisy-chain */ - MXM_5X_INIT_WAKE_UP_SATELLITE_DEVICES_HELLOALL, - /** substate for the wake-up routine, verifying the result of helloall */ - MXM_5X_INIT_WAKE_UP_SATELLITE_DEVICES_HELLOALL_VERIFY_MSG_AND_COUNT, + /** substate for the wake-up routine, sending helloAll to the daisy-chain */ + MXM_5X_INIT_WAKE_UP_SATELLITE_DEVICES_HELLO_ALL, + /** substate for the wake-up routine, verifying the result of helloAll */ + MXM_5X_INIT_WAKE_UP_SATELLITE_DEVICES_HELLO_ALL_VERIFY_MSG_AND_COUNT, /** substate for requesting an FMEA check on the bridge IC */ MXM_5X_41B_FMEA_REQUEST, /** substate for the verification of the FMEA check done in @@ -240,7 +238,7 @@ typedef struct { MXM_REG_NAME_e regAddress; /*!< register address that shall be written */ uint8_t lsb; /*!< least significant bit */ uint8_t msb; /*!< most significant bit */ - uint8_t blocksize; /*!< blocksize for the READBLOCK command */ + uint8_t blockSize; /*!< blockSize for the READBLOCK command */ uint8_t deviceAddress; /*!< device address for commands that address specific devices */ MXM_MODEL_ID_e model; /*!< model of device that shall be addressed */ } MXM_5X_COMMAND_PAYLOAD_s; @@ -270,7 +268,7 @@ typedef struct { * matches with the configured number of monitoring ICs in * #BS_NR_OF_MODULES_PER_STRING. This variable is updated during execution of * the substate - * #MXM_5X_INIT_WAKE_UP_SATELLITE_DEVICES_HELLOALL_VERIFY_MSG_AND_COUNT + * #MXM_5X_INIT_WAKE_UP_SATELLITE_DEVICES_HELLO_ALL_VERIFY_MSG_AND_COUNT * in the state #MXM_STATEMACH_5X_INIT in #MXM_5XStateMachine(). * * In case the numbers are the same, the variable will read #STD_OK, @@ -292,7 +290,7 @@ typedef struct { * @brief Command Buffer * @details This variable contains a buffer for Battery Management Protocol * commands. The content is constructed by calling functions like - * #MXM_5XConstructCommandBufferHelloall() and similar. + * #MXM_5XConstructCommandBufferHelloAll() and similar. * * Afterwards this buffer can be passed on to the lower state-machine * as payload. The length of this buffer is described in @@ -358,7 +356,7 @@ extern STD_RETURN_TYPE_e MXM_5XGetRXBuffer( extern uint8_t MXM_5XGetNumberOfSatellites(const MXM_5X_INSTANCE_s *const kpkInstance); /** - * @brief Set state request for the Battery Management Statemachine + * @brief Set state request for the Battery Management State machine * @details This function sets the state requests for the #MXM_5XStateMachine(). * @param[in,out] pInstance5x pointer to the 5x state * @param[in] state State that is requested diff --git a/src/app/driver/afe/maxim/common/mxm_bitextract.c b/src/app/driver/afe/maxim/common/mxm_bit_extract.c similarity index 94% rename from src/app/driver/afe/maxim/common/mxm_bitextract.c rename to src/app/driver/afe/maxim/common/mxm_bit_extract.c index 9fce219a..f3633d88 100644 --- a/src/app/driver/afe/maxim/common/mxm_bitextract.c +++ b/src/app/driver/afe/maxim/common/mxm_bit_extract.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,23 +33,22 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ /** - * @file mxm_bitextract.c + * @file mxm_bit_extract.c * @author foxBMS Team * @date 2019-01-15 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix MXM * * @brief Bit extraction function for mxm_17841b - * * @details This module supplies a specific bit extraction functionality to * read & write into status registers. The different statuses that are * read from or write into are indicated in the enum. @@ -58,7 +57,7 @@ */ /*========== Includes =======================================================*/ -#include "mxm_bitextract.h" +#include "mxm_bit_extract.h" #include diff --git a/src/app/driver/afe/maxim/common/mxm_bitextract.h b/src/app/driver/afe/maxim/common/mxm_bit_extract.h similarity index 91% rename from src/app/driver/afe/maxim/common/mxm_bitextract.h rename to src/app/driver/afe/maxim/common/mxm_bit_extract.h index 36610337..1fe3ec4e 100644 --- a/src/app/driver/afe/maxim/common/mxm_bitextract.h +++ b/src/app/driver/afe/maxim/common/mxm_bit_extract.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,32 +33,31 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ /** - * @file mxm_bitextract.h + * @file mxm_bit_extract.h * @author foxBMS Team * @date 2019-01-15 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix MXM * * @brief Bit extraction function for MXM_17841b - * * @details This module supplies a specific bit extraction functionality to - * read & write into status registers. The different statuses that are read - * from or write into are indicated in the enum. - * Battery monitoring driver for MAX1785x battery monitoring ICs. - * + * read & write into status registers. + * The different statuses that are read from or write into are + * indicated in the enum. + * Battery monitoring driver for MAX1785x battery monitoring ICs. */ -#ifndef FOXBMS__MXM_BITEXTRACT_H_ -#define FOXBMS__MXM_BITEXTRACT_H_ +#ifndef FOXBMS__MXM_BIT_EXTRACT_H_ +#define FOXBMS__MXM_BIT_EXTRACT_H_ /*========== Includes =======================================================*/ @@ -162,7 +161,7 @@ extern MXM_41B_REG_BIT_VALUE mxm_41bWriteValue( * described by its length in bits (numberOfBits) and position * (pos). This value is then returned. * @param[in] reg value of the register to be read - * @param[in] numberOfBits length og the bit sequence in bits + * @param[in] numberOfBits length of the bit sequence in bits * @param[in] position start position of the bit sequence * @returns the isolated and shifted bit value */ @@ -172,4 +171,4 @@ extern MXM_41B_REG_BIT_VALUE mxm_41bReadValue(uint8_t reg, uint8_t numberOfBits, #ifdef UNITY_UNIT_TEST #endif -#endif /* FOXBMS__MXM_BITEXTRACT_H_ */ +#endif /* FOXBMS__MXM_BIT_EXTRACT_H_ */ diff --git a/src/app/driver/afe/maxim/common/mxm_crc8.c b/src/app/driver/afe/maxim/common/mxm_crc8.c index b7a2c66b..a0689776 100644 --- a/src/app/driver/afe/maxim/common/mxm_crc8.c +++ b/src/app/driver/afe/maxim/common/mxm_crc8.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,17 +43,15 @@ * @file mxm_crc8.c * @author foxBMS Team * @date 2019-02-05 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix MXM * * @brief CRC8 calculation for Maxim Integrated Monitoring devices - * * @details This module supports the calculation of a CRC8 based on the * polynomial described in the Maxim data sheets. * The polynomial is 0xA6. - * */ /*========== Includes =======================================================*/ diff --git a/src/app/driver/afe/maxim/common/mxm_crc8.h b/src/app/driver/afe/maxim/common/mxm_crc8.h index 32f09c26..c6d86a64 100644 --- a/src/app/driver/afe/maxim/common/mxm_crc8.h +++ b/src/app/driver/afe/maxim/common/mxm_crc8.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,18 +43,16 @@ * @file mxm_crc8.h * @author foxBMS Team * @date 2019-02-05 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix MXM * * @brief Headers for the CRC8 calculation for Maxim Integrated * Monitoring devices - * * @details This module supports the calculation of a CRC8 based on the * polynomial described in the Maxim data sheets. * The polynomial is 0xA6. - * */ #ifndef FOXBMS__MXM_CRC8_H_ @@ -79,7 +77,7 @@ * with the polynomial 0xA6. This function calls * #MXM_CRC8WithInitValue() with CRC set to 0x00. * The result should be 0x00 if you include the CRC into - * the datastream. + * the data stream. * @param[in] pData array-pointer with data to be cyclic redundancy checked * @param[in] lenData length of array * @return uint8_t containing the computed CRC diff --git a/src/app/driver/afe/maxim/common/mxm_register_map.h b/src/app/driver/afe/maxim/common/mxm_register_map.h index 297033bf..17fe119a 100644 --- a/src/app/driver/afe/maxim/common/mxm_register_map.h +++ b/src/app/driver/afe/maxim/common/mxm_register_map.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,16 +43,14 @@ * @file mxm_register_map.h * @author foxBMS Team * @date 2019-03-05 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix MXM * * @brief Register map of the MAX1785x monitoring IC - * * @details Register map with named registers of the monitoring ICs * MAX17852 and MAX17853 by Maxim Integrated - * */ #ifndef FOXBMS__MXM_REGISTER_MAP_H_ @@ -71,621 +69,621 @@ */ typedef enum { MXM_REG_VERSION = 0x00u, /*!< VERSION is a read only - * accessible register which returns information on the device */ + * accessible register which returns information on the device */ MXM_REG_ADDRESS = 0x01u, /*!< ADDRESS is a read and write - * accessible register which sets the first, last, and device address - * used by a device in a UART chain (UARTSEL=1). This register has no - * effect on a device operating in SPI mode (UARTSEL=0). */ + * accessible register which sets the first, last, and device address + * used by a device in a UART chain (UARTSEL=1). This register has no + * effect on a device operating in SPI mode (UARTSEL=0). */ MXM_REG_STATUS1 = 0x02u, /*!< STATUS1 is a read and write - * accessible register which relates the current status of the device. - * STATUS1 also contains summary information on STATUS2, STATUS3, and - * FMEA registers, and other selected registers indicating if additional - * read back checks are required. */ + * accessible register which relates the current status of the device. + * STATUS1 also contains summary information on STATUS2, STATUS3, and + * FMEA registers, and other selected registers indicating if additional + * read back checks are required. */ MXM_REG_STATUS2 = 0x03u, /*!< STATUS2 is a read and write - * accessible register which contains summary information on alerts - * related to interface and communication faults. */ + * accessible register which contains summary information on alerts + * related to interface and communication faults. */ MXM_REG_STATUS3 = 0x04u, /*!< STATUS3 is a read and write - * accessible register which contains summary information on alerts - * related to automated cell balancing operations. */ + * accessible register which contains summary information on alerts + * related to automated cell balancing operations. */ MXM_REG_FMEA1 = 0x05u, /*!< FMEA1 is a read and write - * accessible register which relates current information on possible - * fault conditions. */ + * accessible register which relates current information on possible + * fault conditions. */ MXM_REG_FMEA2 = 0x06u, /*!< FMEA2 is a read and write - * accessible register which relates current information on possible - * fault conditions. */ + * accessible register which relates current information on possible + * fault conditions. */ MXM_REG_ALRTSUM = 0x07u, /*!< ALRTSUM is a read accessible - * register which relates added, detailed information on the current - * states of the device, breaking out several summary bits in STATUS1. */ + * register which relates added, detailed information on the current + * states of the device, breaking out several summary bits in STATUS1. */ MXM_REG_ALRTOVCELL = 0x08u, /*!< ALRTOVCELL is a read - * accessible register which relates current information on cell over - * voltage fault alerts based on ADC measurements. */ + * accessible register which relates current information on cell over + * voltage fault alerts based on ADC measurements. */ MXM_REG_ALRTUVCELL = 0x09u, /*!< ALRTUVCELL is a read - * accessible register which relates current information on cell under - * voltage fault alerts based on ADC measurements. */ + * accessible register which relates current information on cell under + * voltage fault alerts based on ADC measurements. */ MXM_REG_MINMAXCELL = 0x0Au, /*!< MINMAX is a read accessible - * register which relates the cell locations with the highest and lowest - * values measured. */ + * register which relates the cell locations with the highest and lowest + * values measured. */ MXM_REG_ALRTAUXPRTCT = 0x0Bu, /*!< ALRTAUXPRTCT is a read - * accessible register which relates current information on auxiliary - * input protection fault alerts. */ + * accessible register which relates current information on auxiliary + * input protection fault alerts. */ MXM_REG_ALRTAUXOV = 0x0Cu, /*!< ALRTAUXOV is a read - * accessible register which relates current information on auxiliary - * over voltage (cold) fault alerts. */ + * accessible register which relates current information on auxiliary + * over voltage (cold) fault alerts. */ MXM_REG_ALRTAUXUV = 0x0Du, /*!< ALRTAUXUV is a read accessible - * register which relates current information on auxiliary under voltage - * fault (hot) alerts. */ + * register which relates current information on auxiliary under voltage + * fault (hot) alerts. */ MXM_REG_ALRTCOMPOV = 0x0Eu, /*!< ALRTCOMPOV is a read accessible - * register which relates current information on cell over voltage fault - * alerts based on the redundant comparator. */ + * register which relates current information on cell over voltage fault + * alerts based on the redundant comparator. */ MXM_REG_ALRTCOMPUV = 0x0Fu, /*!< ALRTCOMPUV is a read accessible - * register which relates current information on cell under voltage fault - * alerts based on the redundant comparator. */ + * register which relates current information on cell under voltage fault + * alerts based on the redundant comparator. */ MXM_REG_ALRTCOMPAUXOV = 0x10u, /*!< ALRTCOMPAUXOV is a read - * accessible register which relates current information on auxiliary over - * voltage fault (cold) alerts based on the redundant comparator. */ + * accessible register which relates current information on auxiliary over + * voltage fault (cold) alerts based on the redundant comparator. */ MXM_REG_ALRTCOMPAUXUV = 0x11u, /*!< ALRTCOMPAUXUV is a read - * accessible register which relates current information on auxiliary under - * voltage fault (hot) alerts based on the redundant comparator. */ + * accessible register which relates current information on auxiliary under + * voltage fault (hot) alerts based on the redundant comparator. */ MXM_REG_ALRTBALSW = 0x12u, /*!< ALRTBALSW is a read accessible - * register which relates current summary information on balancing switch - * fault alerts. */ + * register which relates current summary information on balancing switch + * fault alerts. */ MXM_REG_SWACTION = 0x13u, /*!< SWACTION is a read and write - * accessible register which contains bits allowing software exit and - * reset requests. These requests are not recommended for general use, - * but may be of use in case of error. */ + * accessible register which contains bits allowing software exit and + * reset requests. These requests are not recommended for general use, + * but may be of use in case of error. */ MXM_REG_DEVCFG1 = 0x14u, /*!< DEVCFG1 is a read and write - * accessible register which governs the configuration of the device - * interface operation. */ + * accessible register which governs the configuration of the device + * interface operation. */ MXM_REG_DEVCFG2 = 0x15u, /*!< DEVCFG2 is a read and write - * accessible register which governs the configuration of the device - * filtering, several top level diagnostic modes, and timeout monitors. */ + * accessible register which governs the configuration of the device + * filtering, several top level diagnostic modes, and timeout monitors. */ MXM_REG_AUXGPIOCFG = 0x16u, /*!< AUXGPIOCFG is a read and write - * accessible register which governs the configuration of the AUX/GPIO - * multifunction pins. */ + * accessible register which governs the configuration of the AUX/GPIO + * multi-function pins. */ MXM_REG_GPIOCFG = 0x17u, /*!< GPIOCFG is a read and write - * accessible register which governs the output state of GPIO outputs and - * reads back the input state of GPIO inputs. */ + * accessible register which governs the output state of GPIO outputs and + * reads back the input state of GPIO inputs. */ MXM_REG_PACKCFG = 0x18u, /*!< PACKCFG is a read and write - * accessible register which configures the part such that the top most - * cell and block used in the application is known. Details of Flex Pack - * applications are also configured within this register. */ + * accessible register which configures the part such that the top most + * cell and block used in the application is known. Details of Flex Pack + * applications are also configured within this register. */ MXM_REG_ALRTIRQEN = 0x19u, /*!< ALRTIRQEN is a read and write - * accessible register which selects which STATS1 alerts trigger interrupts - * via the ALERT interface port(s), and are included in the DCByte and - * Alert Packet (UART) or ALERT bit (SPI) notifications. Note the information - * in the STATUS1 register itself (or any component terms rolled up into - * STATUS1) is not masked/disabled by these settings, allowing the - * underlying data to always be available via STATUS1 readback. */ + * accessible register which selects which STATS1 alerts trigger interrupts + * via the ALERT interface port(s), and are included in the DCByte and + * Alert Packet (UART) or ALERT bit (SPI) notifications. Note the information + * in the STATUS1 register itself (or any component terms rolled up into + * STATUS1) is not masked/disabled by these settings, allowing the + * underlying data to always be available via STATUS1 read-back. */ MXM_REG_ALRTOVEN = 0x1Au, /*!< ALRTOVEN is a read and write - * accessible register which enables over voltage fault checks on selected - * input channels during scans using either the ADC or Comparator. */ + * accessible register which enables over voltage fault checks on selected + * input channels during scans using either the ADC or Comparator. */ MXM_REG_ALRTUVEN = 0x1Bu, /*!< ALRTUVEN is a read and write - * accessible register which enables under voltage fault checks on selected - * input channels during scans using either the ADC or Comparator. */ + * accessible register which enables under voltage fault checks on selected + * input channels during scans using either the ADC or Comparator. */ MXM_REG_ALRTAUXOVEN = 0x1Cu, /*!< ALRTAUXOVEN is a read and write - * accessible register which enables auxiliary over voltage (cold) fault - * checks on selected Auxiliary channels during scans using either the - * ADC or Comparator. */ + * accessible register which enables auxiliary over voltage (cold) fault + * checks on selected Auxiliary channels during scans using either the + * ADC or Comparator. */ MXM_REG_ALRTAUXUVEN = 0x1Du, /*!< ALRTAUXUVEN is a read and write - * accessible register which enables auxiliary under voltage (hot) fault - * checks on selected Auxiliary channels using either the - * ADC or Comparator. */ + * accessible register which enables auxiliary under voltage (hot) fault + * checks on selected Auxiliary channels using either the + * ADC or Comparator. */ MXM_REG_ALRTCALTST = 0x1Eu, /*!< ALRTCALTST is a read and write - * accessible register which allows the user to force Calibration alerts - * to test readback and interrupt logic. The forced alert(s) will remain - * forced until this register is written back to zeros (assuming the - * existing calibration data is within range) */ + * accessible register which allows the user to force Calibration alerts + * to test read-back and interrupt logic. The forced alert(s) will remain + * forced until this register is written back to zeros (assuming the + * existing calibration data is within range) */ MXM_REG_OVTHCLR = 0x1Fu, /*!< OVTHCLR is a read and write - * accessible register which selects the cell over voltage alert - * clear threshold used with unipolar ADC measurements. */ + * accessible register which selects the cell over voltage alert + * clear threshold used with unipolar ADC measurements. */ MXM_REG_OVTHSET = 0x20u, /*!< OVTHSET is a read and write - * accessible register which selects the cell over voltage alert set - * threshold used with unipolar ADC measurements. */ + * accessible register which selects the cell over voltage alert set + * threshold used with unipolar ADC measurements. */ MXM_REG_UVTHCLR = 0x21u, /*!< UVTHCLR is a read and write - * accessible register which selects the cell under voltage alert clear - * threshold used with unipolar ADC measurements. */ + * accessible register which selects the cell under voltage alert clear + * threshold used with unipolar ADC measurements. */ MXM_REG_UVTHSET = 0x22u, /*!< UVTHSET is a read and write - * accessible register which selects the cell under voltage alert set - * threshold used with unipolar ADC measurements. */ + * accessible register which selects the cell under voltage alert set + * threshold used with unipolar ADC measurements. */ MXM_REG_MSMTCH = 0x23u, /*!< MSMTCH is a read and write - * accessible register which selects the cell voltage mismatch alert - * threshold used with ADC cell scan measurements. */ + * accessible register which selects the cell voltage mismatch alert + * threshold used with ADC cell scan measurements. */ MXM_REG_BIPOVTHCLR = 0x24u, /*!< BIPOVTHCLR is a read and write - * accessible register which selects the cell over voltage alert clear - * threshold used with bipolar ADC measurements. */ + * accessible register which selects the cell over voltage alert clear + * threshold used with bipolar ADC measurements. */ MXM_REG_BIPOVTHSET = 0x25u, /*!< BIPOVTHSET is a read and write - * accessible register which selects the cell over voltage alert set - * threshold used with bipolar ADC measurements. */ + * accessible register which selects the cell over voltage alert set + * threshold used with bipolar ADC measurements. */ MXM_REG_BIPUVTHCLR = 0x26u, /*!< BIPUVTHCLR is a read and write - * accessible register which selects the cell under voltage alert clear - * threshold used with bipolar ADC measurements. */ + * accessible register which selects the cell under voltage alert clear + * threshold used with bipolar ADC measurements. */ MXM_REG_BIPUVTHSET = 0x27u, /*!< BIPUVTHSET is a read and write - * accessible register which selects the cell under voltage alert set - * threshold used with bipolar ADC measurements. */ + * accessible register which selects the cell under voltage alert set + * threshold used with bipolar ADC measurements. */ MXM_REG_BLKOVTHCLR = 0x28u, /*!< BLKOVTHCLR is a read and write - * accessible register which selects the block over voltage alert clear - * threshold used with ADC measurements. */ + * accessible register which selects the block over voltage alert clear + * threshold used with ADC measurements. */ MXM_REG_BLKOVTHSET = 0x29u, /*!< BLKOVTHSET is a read and write - * accessible register which selects the block over voltage alert set - * threshold used with ADC measurements. */ + * accessible register which selects the block over voltage alert set + * threshold used with ADC measurements. */ MXM_REG_BLKUVTHCLR = 0x2Au, /*!< BLKUVTHCLR is a read and write - * accessible register which selects the block under voltage alert clear - * threshold used with ADC measurements. */ + * accessible register which selects the block under voltage alert clear + * threshold used with ADC measurements. */ MXM_REG_BLKUVTHSET = 0x2Bu, /*!< BLKUVTHSET is a read and write - * accessible register which selects the block under voltage alert set - * threshold used with ADC measurements. */ + * accessible register which selects the block under voltage alert set + * threshold used with ADC measurements. */ MXM_REG_CSAOVTHCLR = 0x2Cu, /*!< MAX17852 only: CSAOVTHCLR is a - * read and write accessible register which selects the CSA over voltage - * alert clear threshold used with ADC measurements. */ + * read and write accessible register which selects the CSA over voltage + * alert clear threshold used with ADC measurements. */ MXM_REG_CSAOVTHSET = 0x2Du, /*!< MAX17852 only: CSAOVTHSET is a - * read and write accessible register which selects the CSA over voltage - * alert set threshold used with ADC measurements. */ + * read and write accessible register which selects the CSA over voltage + * alert set threshold used with ADC measurements. */ MXM_REG_CSAUVTHCLR = 0x2Eu, /*!< MAX17852 only: CSAUVTHCLR is a - * read and write accessible register which selects the CSA under voltage - * alert clear threshold used with ADC measurements. */ + * read and write accessible register which selects the CSA under voltage + * alert clear threshold used with ADC measurements. */ MXM_REG_CSAUVTHSET = 0x2Fu, /*!< MAX17852 only: CSAUVTHSET is a - * read and write accessible register which selects the CSA under voltage - * alert set threshold used with ADC measurements. */ + * read and write accessible register which selects the CSA under voltage + * alert set threshold used with ADC measurements. */ MXM_REG_AUXROVTHCLR = 0x30u, /*!< AUXROVTHCLR is a read and write - * accessible register which selects the over voltage (cold) alert - * clear threshold used with Ratiometric Auxiliary ADC measurements. */ + * accessible register which selects the over voltage (cold) alert + * clear threshold used with Ratiometric Auxiliary ADC measurements. */ MXM_REG_AUXROVTHSET = 0x31u, /*!< AUXROVTHSET is a read and write - * accessible register which selects the over voltage (cold) alert set - * threshold used with Ratiometric Auxiliary ADC measurements. */ + * accessible register which selects the over voltage (cold) alert set + * threshold used with Ratiometric Auxiliary ADC measurements. */ MXM_REG_AUXRUVTHCLR = 0x32u, /*!< AUXRUVTHCLR is a read and write - * accessible register which selects the under voltage (hot) alert clear - * threshold used with Ratiometric Auxiliary ADC measurements. */ + * accessible register which selects the under voltage (hot) alert clear + * threshold used with Ratiometric Auxiliary ADC measurements. */ MXM_REG_AUXRUVTHSET = 0x33u, /*!< AUXRUVTHSET is a read and write - * accessible register which selects the under voltage (hot) alert set - * threshold used with Ratiometric Auxiliary ADC measurements. */ + * accessible register which selects the under voltage (hot) alert set + * threshold used with Ratiometric Auxiliary ADC measurements. */ MXM_REG_AUXOVTHCLR = 0x34u, /*!< AUXOVTHCLR is a read and write - * accessible register which selects the over voltage alert clear - * threshold used with Absolute Auxiliary ADC measurements. */ + * accessible register which selects the over voltage alert clear + * threshold used with Absolute Auxiliary ADC measurements. */ MXM_REG_AUXAOVTHSET = 0x35u, /*!< AUXAOVTHSET is a read and write - * accessible register which selects the over voltage alert set - * threshold used with Absolute Auxiliary ADC measurements. */ + * accessible register which selects the over voltage alert set + * threshold used with Absolute Auxiliary ADC measurements. */ MXM_REG_AUXAUVTHCLR = 0x36u, /*!< AUXAUVTHCLR is a read and write - * accessible register which selects the under voltage alert clear - * threshold used with Absolute Auxiliary ADC measurements. */ + * accessible register which selects the under voltage alert clear + * threshold used with Absolute Auxiliary ADC measurements. */ MXM_REG_AUXAUVTHSET = 0x37u, /*!< AUXAUVTHSET is a read and write - * accessible register which selects the under voltage alert set threshold - * used with Absolute Auxiliary ADC measurements. */ + * accessible register which selects the under voltage alert set threshold + * used with Absolute Auxiliary ADC measurements. */ MXM_REG_COMPOVTH = 0x38u, /*!< COMPOVTH is a read and write - * accessible register which selects the cell over voltage alert threshold - * for the redundant comparator. */ + * accessible register which selects the cell over voltage alert threshold + * for the redundant comparator. */ MXM_REG_COMPUVTH = 0x39u, /*!< COMPUVTH is a read and write - * accessible register which selects the cell under voltage alert threshold - * for the redundant comparator. */ + * accessible register which selects the cell under voltage alert threshold + * for the redundant comparator. */ MXM_REG_COMPAUXROVTH = 0x3Au, /*!< COMPAUXROVTH is a read and write - * accessible register which selects the over voltage (cold) alert threshold - * applied during Ratiometric Auxiliary comparator measurements. */ + * accessible register which selects the over voltage (cold) alert threshold + * applied during Ratiometric Auxiliary comparator measurements. */ MXM_REG_COMPAUXRUVTH = 0x3Bu, /*!< COMPAUXRUVTH is a read and write - * accessible register which selects the under voltage (hot) alert threshold - * applied during Ratiometric Auxiliary comparator measurements. */ + * accessible register which selects the under voltage (hot) alert threshold + * applied during Ratiometric Auxiliary comparator measurements. */ MXM_REG_COMPAUXAOVTH = 0x3Cu, /*!< COMPAUXAOVTH is a read and write - * accessible register which selects the over voltage alert threshold - * applied during Absolute Auxiliary comparator measurements. */ + * accessible register which selects the over voltage alert threshold + * applied during Absolute Auxiliary comparator measurements. */ MXM_REG_COMPAUXAUVTH = 0x3Du, /*!< COMPAUXAUVTH is a read and write - * accessible register which selects the under voltage alert threshold - * applied during Absolute Auxiliary comparator measurements. */ + * accessible register which selects the under voltage alert threshold + * applied during Absolute Auxiliary comparator measurements. */ MXM_REG_COMPOPNTH = 0x3Eu, /*!< COMPOPNTH is a read and write - * accessible register which selects the under voltage alert threshold - * applied to Unipolar Cell inputs in Open Diagnostic Mode. */ + * accessible register which selects the under voltage alert threshold + * applied to Unipolar Cell inputs in Open Diagnostic Mode. */ MXM_REG_COMPAUXROPNTH = 0x3Fu, /*!< COMPAUXROPNTH is a read and write - * accessible register which selects the under voltage alert threshold - * applied to Ratiometric Auxiliary inputs in Open Diagnostic Mode. */ + * accessible register which selects the under voltage alert threshold + * applied to Ratiometric Auxiliary inputs in Open Diagnostic Mode. */ MXM_REG_COMPAUXAOPNTH = 0x40u, /*!< COMPAUXAOPNTH is a read and write - * accessible register which selects the under voltage alert threshold - * applied to Absolute Auxiliary inputs in Open Diagnostic Mode. */ + * accessible register which selects the under voltage alert threshold + * applied to Absolute Auxiliary inputs in Open Diagnostic Mode. */ MXM_REG_COMPACCOVTH = 0x41u, /*!< COMPACCOVTH is a read and write - * accessible register which selects the over voltage alert threshold - * applied during comparator accuracy diagnostics. */ + * accessible register which selects the over voltage alert threshold + * applied during comparator accuracy diagnostics. */ MXM_REG_COMPACCUVTH = 0x42u, /*!< COMPACCUVTH is a read and write - * accessible register which selects the under voltage alert threshold - * applied during comparator accuracy diagnostics. */ + * accessible register which selects the under voltage alert threshold + * applied during comparator accuracy diagnostics. */ MXM_REG_BALSHRTTHR = 0x43u, /*!< BALSHRTTHR is a read and write - * accessible register which selects alert threshold used during the - * Balance Switch Short Diagnostic mode. */ + * accessible register which selects alert threshold used during the + * Balance Switch Short Diagnostic mode. */ MXM_REG_BALLOWTHR = 0x44u, /*!< BALLOWTHR is a read and write - * accessible register which selects alert low threshold used during the - * Balance Switch Open Diagnostic Mode. */ + * accessible register which selects alert low threshold used during the + * Balance Switch Open Diagnostic Mode. */ MXM_REG_BALHIGHTHR = 0x45u, /*!< BALHIGHTHR is a read and write - * accessible register which selects alert High threshold used during the - * Balance Switch Open Diagnostic mode. */ + * accessible register which selects alert High threshold used during the + * Balance Switch Open Diagnostic mode. */ MXM_REG_CSA = 0x46u, /*!< MAX17852 only: CSA is a read - * accessible register which holds the current value for each enabled - * individual auxiliary measurement result. */ + * accessible register which holds the current value for each enabled + * individual auxiliary measurement result. */ MXM_REG_CELL1 = 0x47u, /*!< CELLn is a read accessible - * register which holds the current value for each individual cell - * measurement result. */ + * register which holds the current value for each individual cell + * measurement result. */ MXM_REG_CELL2 = 0x48u, /*!< CELLn is a read accessible - * register which holds the current value for each individual cell - * measurement result. */ + * register which holds the current value for each individual cell + * measurement result. */ MXM_REG_CELL3 = 0x49u, /*!< CELLn is a read accessible - * register which holds the current value for each individual cell - * measurement result. */ + * register which holds the current value for each individual cell + * measurement result. */ MXM_REG_CELL4 = 0x4Au, /*!< CELLn is a read accessible - * register which holds the current value for each individual cell - * measurement result. */ + * register which holds the current value for each individual cell + * measurement result. */ MXM_REG_CELL5 = 0x4Bu, /*!< CELLn is a read accessible - * register which holds the current value for each individual cell - * measurement result. */ + * register which holds the current value for each individual cell + * measurement result. */ MXM_REG_CELL6 = 0x4Cu, /*!< CELLn is a read accessible - * register which holds the current value for each individual cell - * measurement result. */ + * register which holds the current value for each individual cell + * measurement result. */ MXM_REG_CELL7 = 0x4Du, /*!< CELLn is a read accessible - * register which holds the current value for each individual cell - * measurement result. */ + * register which holds the current value for each individual cell + * measurement result. */ MXM_REG_CELL8 = 0x4Eu, /*!< CELLn is a read accessible - * register which holds the current value for each individual cell - * measurement result. */ + * register which holds the current value for each individual cell + * measurement result. */ MXM_REG_CELL9 = 0x4Fu, /*!< CELLn is a read accessible - * register which holds the current value for each individual cell - * measurement result. */ + * register which holds the current value for each individual cell + * measurement result. */ MXM_REG_CELL10 = 0x50u, /*!< CELLn is a read accessible - * register which holds the current value for each individual cell - * measurement result. */ + * register which holds the current value for each individual cell + * measurement result. */ MXM_REG_CELL11 = 0x51u, /*!< CELLn is a read accessible - * register which holds the current value for each individual cell - * measurement result. */ + * register which holds the current value for each individual cell + * measurement result. */ MXM_REG_CELL12 = 0x52u, /*!< CELLn is a read accessible - * register which holds the current value for each individual cell - * measurement result. */ + * register which holds the current value for each individual cell + * measurement result. */ MXM_REG_CELL13 = 0x53u, /*!< CELLn is a read accessible - * register which holds the current value for each individual cell - * measurement result. */ + * register which holds the current value for each individual cell + * measurement result. */ MXM_REG_CELL14 = 0x54u, /*!< CELLn is a read accessible - * register which holds the current value for each individual cell - * measurement result. */ + * register which holds the current value for each individual cell + * measurement result. */ MXM_REG_BLOCK = 0x55u, /*!< BLOCK is a read accessible - * register which holds the current value for the total block - * measurement result. */ + * register which holds the current value for the total block + * measurement result. */ MXM_REG_TOTAL = 0x56u, /*!< TOTAL is a read accessible - * register which holds the current value for the sum of all enabled - * measurement results within the stack. */ + * register which holds the current value for the sum of all enabled + * measurement results within the stack. */ MXM_REG_DIAG1 = 0x57u, /*!< DIAG1 is a read-only - * register which contains the Diagnostic result requested by the - * DIAGCFG:DIAGSEL1 selection taken during the last ADC acquisition. */ + * register which contains the Diagnostic result requested by the + * DIAGCFG:DIAGSEL1 selection taken during the last ADC acquisition. */ MXM_REG_DIAG2 = 0x58u, /*!< DIAG2 is a read-only - * register which contains the Diagnostic result requested by the - * DIAGCFG:DIAGSEL2 selection taken during the last ADC acquisition. */ + * register which contains the Diagnostic result requested by the + * DIAGCFG:DIAGSEL2 selection taken during the last ADC acquisition. */ MXM_REG_AUX0 = 0x59u, /*!< AUXn is a read accessible - * register which holds the current value for each enabled individual - * auxiliary measurement result. */ + * register which holds the current value for each enabled individual + * auxiliary measurement result. */ MXM_REG_AUX1 = 0x5Au, /*!< AUXn is a read accessible - * register which holds the current value for each enabled individual - * auxiliary measurement result. */ + * register which holds the current value for each enabled individual + * auxiliary measurement result. */ MXM_REG_AUX2 = 0x5Bu, /*!< AUXn is a read accessible - * register which holds the current value for each enabled individual - * auxiliary measurement result. */ + * register which holds the current value for each enabled individual + * auxiliary measurement result. */ MXM_REG_AUX3 = 0x5Cu, /*!< AUXn is a read accessible - * register which holds the current value for each enabled individual - * auxiliary measurement result. */ + * register which holds the current value for each enabled individual + * auxiliary measurement result. */ MXM_REG_AUX4 = 0x5Du, /*!< MAX17853 only: AUXn is a - * read accessible register which holds the current value for each - * enabled individual auxiliary measurement result. */ + * read accessible register which holds the current value for each + * enabled individual auxiliary measurement result. */ MXM_REG_AUX5 = 0x5Eu, /*!< MAX17853 only: AUXn is a - * read accessible register which holds the current value for each - * enabled individual auxiliary measurement result. */ + * read accessible register which holds the current value for each + * enabled individual auxiliary measurement result. */ MXM_REG_POLARITYCTRL = 0x5Fu, /*!< POLARITYCTRL is a read and - * write accessible register which governs the measurement type - * used during scans. In general, Unipolar mode indicates a Cell and - * Bipolar mode indicates a Bus-Bar. */ + * write accessible register which governs the measurement type + * used during scans. In general, Unipolar mode indicates a Cell and + * Bipolar mode indicates a Bus-Bar. */ MXM_REG_AUXREFCTRL = 0x60u, /*!< AUXREFCTRL is a read and - * write accessible register which governs the reference range used - * for enabled Auxiliary channels during ADC and COMP acquisition - * sequences. */ + * write accessible register which governs the reference range used + * for enabled Auxiliary channels during ADC and COMP acquisition + * sequences. */ MXM_REG_AUXTIME = 0x61u, /*!< AUXTIME is a read - * and write accessible register which governs the setting time - * allowed for biasing AUX/GPIO pins prior to measurements. */ + * and write accessible register which governs the setting time + * allowed for biasing AUX/GPIO pins prior to measurements. */ MXM_REG_ACQCFG = 0x62u, /*!< ACQCFG is a read and write - * accessible register which governs several aspects of the - * measurement and acquisition procedure. */ + * accessible register which governs several aspects of the + * measurement and acquisition procedure. */ MXM_REG_BALSWDLY = 0x63u, /*!< BALSWDLY is a read and - * write accessible register which selects the delay intervals - * used within Manual and Automated Cell Balancing operations - * when ADC measurements are requested. */ + * write accessible register which selects the delay intervals + * used within Manual and Automated Cell Balancing operations + * when ADC measurements are requested. */ MXM_REG_MEASUREEN1 = 0x64u, /*!< MEASUREEN1 is a read and write - * accessible register which governs the channels measured during - * ADC and COMP acquisition sequences. */ + * accessible register which governs the channels measured during + * ADC and COMP acquisition sequences. */ MXM_REG_MEASUREEN2 = 0x65u, /*!< MEASUREEN2 is a read and write - * accessible register which governs the auxiliary channels measured - * during ADC and COMP acquisition sequences, as well as - * IIR initialization. */ + * accessible register which governs the auxiliary channels measured + * during ADC and COMP acquisition sequences, as well as + * IIR initialization. */ MXM_REG_SCANCTRL = 0x66u, /*!< SCANCTRL is a read and write - * accessible register which governs the internal measurement - * acquisitions (scan) requested of the device. The register also manages - * the handling of data generated as a result of any scan request. - * - * ADC Scans are used for precision measurements of cell and auxiliary - * voltages. - * - * COMP Scans are used for periodic safety/redundancy checking - * of ADC results, and in some cases, enhanced communication efficiency. - * - * On Demand Calibration will run an internal calibration of the ADC and - * update the Calibration Data Registers. All ADC measurements requested - * by Scan and Diagnostic Configuration and Control settings will be - * ignored. - * - * Balance Switch and Cell Sense Wire Open ADC Diagnostic Scans are a - * special class of ADC Scan. Use of these settings temporarily - * overrides other Scan and Diagnostic Configuration and Control settings. - * See BALSW and Cell Sense Wire Diagnostics for details. */ + * accessible register which governs the internal measurement + * acquisitions (scan) requested of the device. The register also manages + * the handling of data generated as a result of any scan request. + * + * ADC Scans are used for precision measurements of cell and auxiliary + * voltages. + * + * COMP Scans are used for periodic safety/redundancy checking + * of ADC results, and in some cases, enhanced communication efficiency. + * + * On Demand Calibration will run an internal calibration of the ADC and + * update the Calibration Data Registers. All ADC measurements requested + * by Scan and Diagnostic Configuration and Control settings will be + * ignored. + * + * Balance Switch and Cell Sense Wire Open ADC Diagnostic Scans are a + * special class of ADC Scan. Use of these settings temporarily + * overrides other Scan and Diagnostic Configuration and Control settings. + * See BALSW and Cell Sense Wire Diagnostics for details. */ MXM_REG_ADCTEST1A = 0x67u, /*!< ADCTEST1A is a read and write - * accessible register which contains user specified arguments used in ALU - * Diagnostics. */ + * accessible register which contains user specified arguments used in ALU + * Diagnostics. */ MXM_REG_ADCTEST1B = 0x68u, /*!< ADCTEST1B is a read and write - * accessible register which contains user specified arguments used in ALU - * Diagnostics. */ + * accessible register which contains user specified arguments used in ALU + * Diagnostics. */ MXM_REG_ADCTEST2A = 0x69u, /*!< ADCTEST2A is a read and write - * accessible register which contains user specified arguments used in ALU - * Diagnostics. */ + * accessible register which contains user specified arguments used in ALU + * Diagnostics. */ MXM_REG_ADCTEST2B = 0x6Au, /*!< ADCTEST2B is a read and write - * accessible register which contains user specified arguments used in ALU - * Diagnostics. */ + * accessible register which contains user specified arguments used in ALU + * Diagnostics. */ MXM_REG_DIAGCFG = 0x6Bu, /*!< DIAGCFG is a read and write - * accessible register which governs diagnostic source and mode options - * applied to the internal measurement acquisitions (scans). */ + * accessible register which governs diagnostic source and mode options + * applied to the internal measurement acquisitions (scans). */ MXM_REG_CTSTCFG = 0x6Cu, /*!< CTSTCFG is a read and write - * accessible register which controls the application of diagnostic - * current sources to selected cell input channels. */ + * accessible register which controls the application of diagnostic + * current sources to selected cell input channels. */ MXM_REG_AUXSTCFG = 0x6Du, /*!< AUXSTCFG is a read and write - * accessible register which controls the application of diagnostic modes - * and current source to selected Auxiliary and/or CSA input channels. */ + * accessible register which controls the application of diagnostic modes + * and current source to selected Auxiliary and/or CSA input channels. */ MXM_REG_DIAGGENCFG = 0x6Eu, /*!< DIAGGENCFG is a read and write - * accessible register which controls the application of general diagnostic - * modes to the selected Auxiliary and/or CSA input paths. */ + * accessible register which controls the application of general diagnostic + * modes to the selected Auxiliary and/or CSA input paths. */ MXM_REG_BALSWCTRL = 0x6Fu, /*!< BALSWCTRL is a read and write - * accessible register which governs the behavior of the Charge Balancing - * Switches in Manual and Auto Cell Balancing modes. - * - * Write access to this register is blocked during Automated Cell - * Balancing operations (CBMODE=001, 1xx). */ + * accessible register which governs the behavior of the Charge Balancing + * Switches in Manual and Auto Cell Balancing modes. + * + * Write access to this register is blocked during Automated Cell + * Balancing operations (CBMODE=001, 1xx). */ MXM_REG_BALEXP1 = 0x70u, /*!< BALEXPn is a read and write - * accessible register which holds the Cell Balancing Expiration Time - * for CELLn (using the switch across SWn and SWn-1). - * - * BALEXP1 sets the Expiration Time for all Group Auto Cell Balancing and - * Discharge modes and the Watchdog time out for Manual Cell Balancing mode. - * - * Write access to this register is blocked during all Cell Balancing - * operations (CBMODE!=000). */ + * accessible register which holds the Cell Balancing Expiration Time + * for CELLn (using the switch across SWn and SWn-1). + * + * BALEXP1 sets the Expiration Time for all Group Auto Cell Balancing and + * Discharge modes and the Watchdog time out for Manual Cell Balancing mode. + * + * Write access to this register is blocked during all Cell Balancing + * operations (CBMODE!=000). */ MXM_REG_BALEXP2 = 0x71u, /*!< BALEXPn is a read and write - * accessible register which holds the Cell Balancing Expiration Time - * for CELLn (using the switch across SWn and SWn-1). Used in Individual - * Auto Cell Balancing modes only. - * - * Write access to this register is blocked during Automatic Cell - * Balancing operations (CBMODE=1xx). */ + * accessible register which holds the Cell Balancing Expiration Time + * for CELLn (using the switch across SWn and SWn-1). Used in Individual + * Auto Cell Balancing modes only. + * + * Write access to this register is blocked during Automatic Cell + * Balancing operations (CBMODE=1xx). */ MXM_REG_BALEXP3 = 0x72u, /*!< BALEXPn is a read and write - * accessible register which holds the Cell Balancing Expiration Time - * for CELLn (using the switch across SWn and SWn-1). Used in Individual - * Auto Cell Balancing modes only. - * - * Write access to this register is blocked during Automatic Cell - * Balancing operations (CBMODE=1xx). */ + * accessible register which holds the Cell Balancing Expiration Time + * for CELLn (using the switch across SWn and SWn-1). Used in Individual + * Auto Cell Balancing modes only. + * + * Write access to this register is blocked during Automatic Cell + * Balancing operations (CBMODE=1xx). */ MXM_REG_BALEXP4 = 0x73u, /*!< BALEXPn is a read and write - * accessible register which holds the Cell Balancing Expiration Time - * for CELLn (using the switch across SWn and SWn-1). Used in Individual - * Auto Cell Balancing modes only. - * - * Write access to this register is blocked during Automatic Cell - * Balancing operations (CBMODE=1xx). */ + * accessible register which holds the Cell Balancing Expiration Time + * for CELLn (using the switch across SWn and SWn-1). Used in Individual + * Auto Cell Balancing modes only. + * + * Write access to this register is blocked during Automatic Cell + * Balancing operations (CBMODE=1xx). */ MXM_REG_BALEXP5 = 0x74u, /*!< BALEXPn is a read and write - * accessible register which holds the Cell Balancing Expiration Time - * for CELLn (using the switch across SWn and SWn-1). Used in Individual - * Auto Cell Balancing modes only. - * - * Write access to this register is blocked during Automatic Cell - * Balancing operations (CBMODE=1xx). */ + * accessible register which holds the Cell Balancing Expiration Time + * for CELLn (using the switch across SWn and SWn-1). Used in Individual + * Auto Cell Balancing modes only. + * + * Write access to this register is blocked during Automatic Cell + * Balancing operations (CBMODE=1xx). */ MXM_REG_BALEXP6 = 0x75u, /*!< BALEXPn is a read and write - * accessible register which holds the Cell Balancing Expiration Time - * for CELLn (using the switch across SWn and SWn-1). Used in Individual - * Auto Cell Balancing modes only. - * - * Write access to this register is blocked during Automatic Cell - * Balancing operations (CBMODE=1xx). */ + * accessible register which holds the Cell Balancing Expiration Time + * for CELLn (using the switch across SWn and SWn-1). Used in Individual + * Auto Cell Balancing modes only. + * + * Write access to this register is blocked during Automatic Cell + * Balancing operations (CBMODE=1xx). */ MXM_REG_BALEXP7 = 0x76u, /*!< BALEXPn is a read and write - * accessible register which holds the Cell Balancing Expiration Time - * for CELLn (using the switch across SWn and SWn-1). Used in Individual - * Auto Cell Balancing modes only. - * - * Write access to this register is blocked during Automatic Cell - * Balancing operations (CBMODE=1xx). */ + * accessible register which holds the Cell Balancing Expiration Time + * for CELLn (using the switch across SWn and SWn-1). Used in Individual + * Auto Cell Balancing modes only. + * + * Write access to this register is blocked during Automatic Cell + * Balancing operations (CBMODE=1xx). */ MXM_REG_BALEXP8 = 0x77u, /*!< BALEXPn is a read and write - * accessible register which holds the Cell Balancing Expiration Time - * for CELLn (using the switch across SWn and SWn-1). Used in Individual - * Auto Cell Balancing modes only. - * - * Write access to this register is blocked during Automatic Cell - * Balancing operations (CBMODE=1xx). */ + * accessible register which holds the Cell Balancing Expiration Time + * for CELLn (using the switch across SWn and SWn-1). Used in Individual + * Auto Cell Balancing modes only. + * + * Write access to this register is blocked during Automatic Cell + * Balancing operations (CBMODE=1xx). */ MXM_REG_BALEXP9 = 0x78u, /*!< BALEXPn is a read and write - * accessible register which holds the Cell Balancing Expiration Time - * for CELLn (using the switch across SWn and SWn-1). Used in Individual - * Auto Cell Balancing modes only. - * - * Write access to this register is blocked during Automatic Cell - * Balancing operations (CBMODE=1xx). */ + * accessible register which holds the Cell Balancing Expiration Time + * for CELLn (using the switch across SWn and SWn-1). Used in Individual + * Auto Cell Balancing modes only. + * + * Write access to this register is blocked during Automatic Cell + * Balancing operations (CBMODE=1xx). */ MXM_REG_BALEXP10 = 0x79u, /*!< BALEXPn is a read and write - * accessible register which holds the Cell Balancing Expiration Time - * for CELLn (using the switch across SWn and SWn-1). Used in Individual - * Auto Cell Balancing modes only. - * - * Write access to this register is blocked during Automatic Cell - * Balancing operations (CBMODE=1xx). */ + * accessible register which holds the Cell Balancing Expiration Time + * for CELLn (using the switch across SWn and SWn-1). Used in Individual + * Auto Cell Balancing modes only. + * + * Write access to this register is blocked during Automatic Cell + * Balancing operations (CBMODE=1xx). */ MXM_REG_BALEXP11 = 0x7Au, /*!< BALEXPn is a read and write - * accessible register which holds the Cell Balancing Expiration Time - * for CELLn (using the switch across SWn and SWn-1). Used in Individual - * Auto Cell Balancing modes only. - * - * Write access to this register is blocked during Automatic Cell - * Balancing operations (CBMODE=1xx). */ + * accessible register which holds the Cell Balancing Expiration Time + * for CELLn (using the switch across SWn and SWn-1). Used in Individual + * Auto Cell Balancing modes only. + * + * Write access to this register is blocked during Automatic Cell + * Balancing operations (CBMODE=1xx). */ MXM_REG_BALEXP12 = 0x7Bu, /*!< BALEXPn is a read and write - * accessible register which holds the Cell Balancing Expiration Time - * for CELLn (using the switch across SWn and SWn-1). Used in Individual - * Auto Cell Balancing modes only. - * - * Write access to this register is blocked during Automatic Cell - * Balancing operations (CBMODE=1xx). */ + * accessible register which holds the Cell Balancing Expiration Time + * for CELLn (using the switch across SWn and SWn-1). Used in Individual + * Auto Cell Balancing modes only. + * + * Write access to this register is blocked during Automatic Cell + * Balancing operations (CBMODE=1xx). */ MXM_REG_BALEXP13 = 0x7Cu, /*!< BALEXPn is a read and write - * accessible register which holds the Cell Balancing Expiration Time - * for CELLn (using the switch across SWn and SWn-1). Used in Individual - * Auto Cell Balancing modes only. - * - * Write access to this register is blocked during Automatic Cell - * Balancing operations (CBMODE=1xx). */ + * accessible register which holds the Cell Balancing Expiration Time + * for CELLn (using the switch across SWn and SWn-1). Used in Individual + * Auto Cell Balancing modes only. + * + * Write access to this register is blocked during Automatic Cell + * Balancing operations (CBMODE=1xx). */ MXM_REG_BALEXP14 = 0x7Du, /*!< BALEXPn is a read and write - * accessible register which holds the Cell Balancing Expiration Time - * for CELLn (using the switch across SWn and SWn-1). Used in Individual - * Auto Cell Balancing modes only. - * - * Write access to this register is blocked during Automatic Cell - * Balancing operations (CBMODE=1xx). */ + * accessible register which holds the Cell Balancing Expiration Time + * for CELLn (using the switch across SWn and SWn-1). Used in Individual + * Auto Cell Balancing modes only. + * + * Write access to this register is blocked during Automatic Cell + * Balancing operations (CBMODE=1xx). */ MXM_REG_BALAUTOUVTHR = 0x7Eu, /*!< BALAUTOUVTHR is a read and write - * accessible register which selects the cell under voltage exit threshold - * for the ADC when used in Automated Cell Balancing operations. - * - * A write to this register allows direct setting or automatic selection - * of this threshold. - * - * Write access to this register is blocked during Automatic Cell - * Balancing operations (CBMODE=1xx). Also, during active measurement scans, - * all writes with CBUVMINCELL=1 will be blocked and will result in ALRTRJCT - * being issued (since the MINCELL data may be altered as a result of the - * scan in progress). - * - * A read from this register will display the current value of the threshold - * and the method used for its selection. */ + * accessible register which selects the cell under voltage exit threshold + * for the ADC when used in Automated Cell Balancing operations. + * + * A write to this register allows direct setting or automatic selection + * of this threshold. + * + * Write access to this register is blocked during Automatic Cell + * Balancing operations (CBMODE=1xx). Also, during active measurement scans, + * all writes with CBUVMINCELL=1 will be blocked and will result in ALRTRJCT + * being issued (since the MINCELL data may be altered as a result of the + * scan in progress). + * + * A read from this register will display the current value of the threshold + * and the method used for its selection. */ MXM_REG_BALDLYCTRL = 0x7Fu, /*!< BALDLYCTRL is a read and write - * accessible register which selects the delay/timing intervals used within - * Automated Cell Balancing operations. - * - * Write access to this register is blocked during Automated Cell Balancing - * operations (CBMODE=001, 1xx). */ + * accessible register which selects the delay/timing intervals used within + * Automated Cell Balancing operations. + * + * Write access to this register is blocked during Automated Cell Balancing + * operations (CBMODE=001, 1xx). */ MXM_REG_BALCTRL = 0x80u, /*!< BALCTRL is a read and write - * accessible register which initiates and controls all internal Cell - * Balancing modes and operations. - * - * Any write to this register to a mode other than CBMODE=000 (Disable) - * will restart the CBTIMER at zero and launch the requested mode of - * operation. */ + * accessible register which initiates and controls all internal Cell + * Balancing modes and operations. + * + * Any write to this register to a mode other than CBMODE=000 (Disable) + * will restart the CBTIMER at zero and launch the requested mode of + * operation. */ MXM_REG_BALSTAT = 0x81u, /*!< BALSTAT is a read accessible - * register which allows the monitoring of any Automated Cell Balancing - * operations currently in progress. - * - * Once a CBMODE is initiated, all status bits persist and are cleared - * only when CBMODE is written to 000 (Disabled) or when a new CBMODE - * operation is initiated via CBSTART. */ + * register which allows the monitoring of any Automated Cell Balancing + * operations currently in progress. + * + * Once a CBMODE is initiated, all status bits persist and are cleared + * only when CBMODE is written to 000 (Disabled) or when a new CBMODE + * operation is initiated via CBSTART. */ MXM_REG_BALUVSTAT = 0x82u, /*!< BALUVSTAT is a read accessible - * register which relates current summary information on the Cell - * voltages vs. the CBUVTHR undervoltage threshold. */ + * register which relates current summary information on the Cell + * voltages vs. the CBUVTHR undervoltage threshold. */ MXM_REG_BALDATA = 0x83u, /*!< BALDATA is a read accessible - * register which relates current summary information on the Cell voltage - * vs. the CBUVTHR undervoltage threshold. */ + * register which relates current summary information on the Cell voltage + * vs. the CBUVTHR undervoltage threshold. */ MXM_REG_I2CPNTR = 0x84u, /*!< MAX17852 only: I2CPNTR is a - * read and write accessible register which contains two Pointer bytes - * (Register Addresses) available for I2C Master transactions. - * - * Once I2CSEND initiates a read or write transaction, attempts to write - * I2CPNTR during the transaction will be ignored and will case an - * I2CRJCT fault to be issued. */ + * read and write accessible register which contains two Pointer bytes + * (Register Addresses) available for I2C Master transactions. + * + * Once I2CSEND initiates a read or write transaction, attempts to write + * I2CPNTR during the transaction will be ignored and will case an + * I2CRJCT fault to be issued. */ MXM_REG_I2CWDATA1 = 0x85u, /*!< MAX17852 only: I2CWDATA1 is a - * read and write accessible register which contains the upper data bytes - * available for I2C Master Write Mode transactions. - * - * Once I2CSEND initiates an I2C read or write transaction, attempts to - * write I2CWDATA1 during the transaction will be ignored and will cause - * an I2CRJCT fault to be issued. */ + * read and write accessible register which contains the upper data bytes + * available for I2C Master Write Mode transactions. + * + * Once I2CSEND initiates an I2C read or write transaction, attempts to + * write I2CWDATA1 during the transaction will be ignored and will cause + * an I2CRJCT fault to be issued. */ MXM_REG_I2CWDATA2 = 0x86u, /*!< MAX17852 only: I2CWDATA2 is a - * read and write accessible register which contains the lower data bytes - * available for I2C Master Write Mode transactions. - * - * Once I2CSEND initiates an I2C read or write transaction, attempts to - * write I2CWDATA2 during the transaction will be ignored and will cause - * an I2CRJCT fault to be issued. */ + * read and write accessible register which contains the lower data bytes + * available for I2C Master Write Mode transactions. + * + * Once I2CSEND initiates an I2C read or write transaction, attempts to + * write I2CWDATA2 during the transaction will be ignored and will cause + * an I2CRJCT fault to be issued. */ MXM_REG_I2CRDATA1 = 0x87u, /*!< MAX17852 only: I2CRDATA1 is a - * read accessible register which contains the upper data bytes received - * for I2C Master Read Mode transactions. - * - * Note during I2C read transactions, data is updated as each byte is - * received/acknowledged, so reading back this register during active - * I2C read transactions will cause an I2CRJCT fault to be issued. */ + * read accessible register which contains the upper data bytes received + * for I2C Master Read Mode transactions. + * + * Note during I2C read transactions, data is updated as each byte is + * received/acknowledged, so reading back this register during active + * I2C read transactions will cause an I2CRJCT fault to be issued. */ MXM_REG_I2CRDATA2 = 0x88u, /*!< MAX17852 only: I2CRDATA2 is a - * read accessible register which contains the lower data bytes received - * for I2C Master Read Mode transactions. - * - * Note during I2C read transactions, data is updated as each byte is - * received/acknowledged, so reading back this register during active - * I2C read transactions will cause an I2CRJCT fault to be issued. */ + * read accessible register which contains the lower data bytes received + * for I2C Master Read Mode transactions. + * + * Note during I2C read transactions, data is updated as each byte is + * received/acknowledged, so reading back this register during active + * I2C read transactions will cause an I2CRJCT fault to be issued. */ MXM_REG_I2CCFG = 0x89u, /*!< MAX17852 only: I2CCFG is a - * read and write accessible register which configures I2C Master - * modes and transaction formats. - * - * Once I2CSEND initiates a read or write transaction, attempts to - * write I2CCFG during the transaction will be ignored and will cause - * and I2CRJCT fault to be issued. */ + * read and write accessible register which configures I2C Master + * modes and transaction formats. + * + * Once I2CSEND initiates a read or write transaction, attempts to + * write I2CCFG during the transaction will be ignored and will cause + * and I2CRJCT fault to be issued. */ MXM_REG_I2CSTAT = 0x8Au, /*!< MAX17852 only: I2CSTAT is - * a read and write accessible register which shows the current status - * of the I2C Master. - * - * The I2CSTATUS bits are updated in real time, indicating the current - * state of the I2C Master and any requested transaction. This status - * can be cleared by write operations and modified by transaction progress - * or subsequent transaction requests. - * - * The second byte contains I2C Fault bits, indicating a fault was - * observed during an I2C transaction. These bits are updated as they - * occur and are only cleared by writing to zero. Several faults may - * occur during a corrupted transaction, so it is best to wait until - * I2CSTATUS reads 10 (Transaction Error) to ensure all errors have - * been reported. - * - * While not advisable, if further I2C transactions are requested before - * the I2C Fault bits from previous transactions are read back and cleared, - * a cumulative history of faults will be listed, even if subsequent - * transactions are successful. */ + * a read and write accessible register which shows the current status + * of the I2C Master. + * + * The I2CSTATUS bits are updated in real time, indicating the current + * state of the I2C Master and any requested transaction. This status + * can be cleared by write operations and modified by transaction progress + * or subsequent transaction requests. + * + * The second byte contains I2C Fault bits, indicating a fault was + * observed during an I2C transaction. These bits are updated as they + * occur and are only cleared by writing to zero. Several faults may + * occur during a corrupted transaction, so it is best to wait until + * I2CSTATUS reads 10 (Transaction Error) to ensure all errors have + * been reported. + * + * While not advisable, if further I2C transactions are requested before + * the I2C Fault bits from previous transactions are read back and cleared, + * a cumulative history of faults will be listed, even if subsequent + * transactions are successful. */ MXM_REG_I2CSEND = 0x8Bu, /*!< MAX17852 only: I2CSEND is a - * read and write accessible register which configures and initiates - * an I2C Master transaction. - * - * A write to this register will initiate an I2C Master transaction. - * Only one transaction is supported at any given time. If a write to - * I2CSEND occurs during an active I2C transaction already in progress, - * the latest transaction request will be ignored and the I2CSEND - * contents will not be updated. If this occurs, an I2CRJCT fault will - * be issued. - * - * A read from this register will readback the current contents. This - * will represent the last transaction request accepted by the I2C Master. */ + * read and write accessible register which configures and initiates + * an I2C Master transaction. + * + * A write to this register will initiate an I2C Master transaction. + * Only one transaction is supported at any given time. If a write to + * I2CSEND occurs during an active I2C transaction already in progress, + * the latest transaction request will be ignored and the I2CSEND + * contents will not be updated. If this occurs, an I2CRJCT fault will + * be issued. + * + * A read from this register will read back the current contents. This + * will represent the last transaction request accepted by the I2C Master. */ MXM_REG_ID1 = 0x8Cu, /*!< ID1 is a read accessible register - * which contains the 2 LSBytes of the unique Device ID stored in ROM and - * subject to ROMCRC validation. */ + * which contains the 2 LSBytes of the unique Device ID stored in ROM and + * subject to ROMCRC validation. */ MXM_REG_ID2 = 0x8Du, /*!< ID2 is a read accessible register - * which contains the 2 MSBytes of the unique Device ID stored in ROM and - * subject to ROMCRC validation. */ + * which contains the 2 MSBytes of the unique Device ID stored in ROM and + * subject to ROMCRC validation. */ MXM_REG_OTP2 = 0x8Eu, /*!< Factory Calibration Data ROM - * and subject to ROMCRC validation. */ + * and subject to ROMCRC validation. */ MXM_REG_OTP3 = 0x8Fu, /*!< Factory Calibration Data ROM - * and subject to ROMCRC validation. */ + * and subject to ROMCRC validation. */ MXM_REG_OTP4 = 0x90u, /*!< Factory Calibration Data ROM - * and subject to ROMCRC validation. */ + * and subject to ROMCRC validation. */ MXM_REG_OTP5 = 0x91u, /*!< Factory Calibration Data ROM - * and subject to ROMCRC validation. */ + * and subject to ROMCRC validation. */ MXM_REG_OTP6 = 0x92u, /*!< Factory Calibration Data ROM - * and subject to ROMCRC validation. */ + * and subject to ROMCRC validation. */ MXM_REG_OTP7 = 0x93u, /*!< Factory Calibration Data ROM - * and subject to ROMCRC validation. */ + * and subject to ROMCRC validation. */ MXM_REG_OTP8 = 0x94u, /*!< Factory Calibration Data ROM - * and subject to ROMCRC validation. */ + * and subject to ROMCRC validation. */ MXM_REG_OTP9 = 0x95u, /*!< Factory Calibration Data ROM - * and subject to ROMCRC validation. */ + * and subject to ROMCRC validation. */ MXM_REG_OTP10 = 0x96u, /*!< Factory Calibration Data ROM - * and subject to ROMCRC validation. */ + * and subject to ROMCRC validation. */ MXM_REG_OTP11 = 0x97u, /*!< Factory Calibration Data ROM - * and subject to ROMCRC validation. */ + * and subject to ROMCRC validation. */ MXM_REG_OTP12 = 0x98u, /*!< Factory Calibration Data ROM - * and subject to ROMCRC validation. */ + * and subject to ROMCRC validation. */ } MXM_REG_NAME_e; /** diff --git a/src/app/driver/afe/maxim/common/mxm_registry.c b/src/app/driver/afe/maxim/common/mxm_registry.c index 7720e5f2..168a9f24 100644 --- a/src/app/driver/afe/maxim/common/mxm_registry.c +++ b/src/app/driver/afe/maxim/common/mxm_registry.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,15 +43,13 @@ * @file mxm_registry.c * @author foxBMS Team * @date 2020-07-16 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix MXM * * @brief Functions in order to have a registry of monitoring ICs - * * @details Monitoring registry stores information about the connected ICs. - * */ /*========== Includes =======================================================*/ @@ -107,8 +105,8 @@ extern STD_RETURN_TYPE_e MXM_MonRegistryConnectDevices(MXM_MONITORING_INSTANCE_s } else { for (uint8_t i = 0; i < numberOfDevices; i++) { pState->registry[i].connected = true; - pState->registry[i].deviceAddress = HELLOALL_START_SEED + i; - pState->highest5xDevice = HELLOALL_START_SEED + i; + pState->registry[i].deviceAddress = HELLO_ALL_START_SEED + i; + pState->highest5xDevice = HELLO_ALL_START_SEED + i; } } diff --git a/src/app/driver/afe/maxim/common/mxm_registry.h b/src/app/driver/afe/maxim/common/mxm_registry.h index 1c7c589e..2fb6e76f 100644 --- a/src/app/driver/afe/maxim/common/mxm_registry.h +++ b/src/app/driver/afe/maxim/common/mxm_registry.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,15 +43,13 @@ * @file mxm_registry.h * @author foxBMS Team * @date 2020-07-16 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix MXM * * @brief Functions in order to have a registry of monitoring ICs - * * @details Monitoring registry stores information about the connected ICs. - * */ #ifndef FOXBMS__MXM_REGISTRY_H_ @@ -129,7 +127,7 @@ extern void MXM_MonRegistryParseStatusFmeaIntoDevices(MXM_MONITORING_INSTANCE_s * @details If a monitoring device is reset, it will set the ALRTRST bit in * #MXM_REG_STATUS1. This should not happen during normal operation. * If this happens, initialization of the devices is lost and has - * to be restored. This is done by reseting the state machine. + * to be restored. This is done by resetting the state machine. * @param[in,out] kpkState state-pointer * @returns true if a device has been reset, false otherwise */ diff --git a/src/app/driver/afe/maxim/max17852/maxim_max17852.json b/src/app/driver/afe/maxim/max17852/maxim_max17852.json index 8a3c28b6..ae880cf4 100644 --- a/src/app/driver/afe/maxim/max17852/maxim_max17852.json +++ b/src/app/driver/afe/maxim/max17852/maxim_max17852.json @@ -1,9 +1,9 @@ { - "include": [ - ".", - "../api/", - "../common/", - "../common/config", - "../../api" - ] + "include": [ + ".", + "../api/", + "../common/", + "../common/config", + "../../api" + ] } diff --git a/src/app/driver/afe/maxim/max17852/mxm_17852.c b/src/app/driver/afe/maxim/max17852/mxm_17852.c index df527078..05c55507 100644 --- a/src/app/driver/afe/maxim/max17852/mxm_17852.c +++ b/src/app/driver/afe/maxim/max17852/mxm_17852.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file mxm_17852.c * @author foxBMS Team * @date 2021-11-24 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix MXM * @@ -151,8 +151,9 @@ extern void MXM_StateMachineOperation(MXM_MONITORING_INSTANCE_s *pState) { break; case MXM_OP_DIAGNOSTIC_STATUS1: if (MXM_HandleStateReadall(pState, MXM_REG_STATUS1, MXM_OP_DIAGNOSTIC_STATUS2) == true) { - const uint8_t temp_len = - (uint8_t)((BATTERY_MANAGEMENT_TX_LENGTH_READALL + (2uL * MXM_5XGetNumberOfSatellites(pState->pInstance5X))) & (uint8_t)UINT8_MAX); + const uint8_t temp_len = (uint8_t)((BATTERY_MANAGEMENT_TX_LENGTH_READALL + + (2uL * MXM_5XGetNumberOfSatellites(pState->pInstance5X))) & + (uint8_t)UINT8_MAX); MXM_MonRegistryParseStatusFmeaIntoDevices(pState, temp_len); const bool someDeviceHasBeenReset = MXM_CheckIfADeviceHasBeenReset(pState); if (someDeviceHasBeenReset == true) { @@ -163,29 +164,33 @@ extern void MXM_StateMachineOperation(MXM_MONITORING_INSTANCE_s *pState) { break; case MXM_OP_DIAGNOSTIC_STATUS2: if (MXM_HandleStateReadall(pState, MXM_REG_STATUS2, MXM_OP_DIAGNOSTIC_STATUS3) == true) { - const uint8_t temp_len = - (uint8_t)((BATTERY_MANAGEMENT_TX_LENGTH_READALL + (2uL * MXM_5XGetNumberOfSatellites(pState->pInstance5X))) & (uint8_t)UINT8_MAX); + const uint8_t temp_len = (uint8_t)((BATTERY_MANAGEMENT_TX_LENGTH_READALL + + (2uL * MXM_5XGetNumberOfSatellites(pState->pInstance5X))) & + (uint8_t)UINT8_MAX); MXM_MonRegistryParseStatusFmeaIntoDevices(pState, temp_len); } break; case MXM_OP_DIAGNOSTIC_STATUS3: if (MXM_HandleStateReadall(pState, MXM_REG_STATUS3, MXM_OP_DIAGNOSTIC_FMEA1) == true) { - const uint8_t temp_len = - (uint8_t)((BATTERY_MANAGEMENT_TX_LENGTH_READALL + (2uL * MXM_5XGetNumberOfSatellites(pState->pInstance5X))) & (uint8_t)UINT8_MAX); + const uint8_t temp_len = (uint8_t)((BATTERY_MANAGEMENT_TX_LENGTH_READALL + + (2uL * MXM_5XGetNumberOfSatellites(pState->pInstance5X))) & + (uint8_t)UINT8_MAX); MXM_MonRegistryParseStatusFmeaIntoDevices(pState, temp_len); } break; case MXM_OP_DIAGNOSTIC_FMEA1: if (MXM_HandleStateReadall(pState, MXM_REG_FMEA1, MXM_OP_DIAGNOSTIC_FMEA2) == true) { - const uint8_t temp_len = - (uint8_t)((BATTERY_MANAGEMENT_TX_LENGTH_READALL + (2uL * MXM_5XGetNumberOfSatellites(pState->pInstance5X))) & (uint8_t)UINT8_MAX); + const uint8_t temp_len = (uint8_t)((BATTERY_MANAGEMENT_TX_LENGTH_READALL + + (2uL * MXM_5XGetNumberOfSatellites(pState->pInstance5X))) & + (uint8_t)UINT8_MAX); MXM_MonRegistryParseStatusFmeaIntoDevices(pState, temp_len); } break; case MXM_OP_DIAGNOSTIC_FMEA2: if (MXM_HandleStateReadall(pState, MXM_REG_FMEA2, MXM_OP_DIAGNOSTIC_CLEAR_STATUS2) == true) { - const uint8_t temp_len = - (uint8_t)((BATTERY_MANAGEMENT_TX_LENGTH_READALL + (2uL * MXM_5XGetNumberOfSatellites(pState->pInstance5X))) & (uint8_t)UINT8_MAX); + const uint8_t temp_len = (uint8_t)((BATTERY_MANAGEMENT_TX_LENGTH_READALL + + (2uL * MXM_5XGetNumberOfSatellites(pState->pInstance5X))) & + (uint8_t)UINT8_MAX); MXM_MonRegistryParseStatusFmeaIntoDevices(pState, temp_len); } break; @@ -477,8 +482,9 @@ extern void MXM_StateMachineOperation(MXM_MONITORING_INSTANCE_s *pState) { break; case MXM_OP_BAL_READ_BALSTAT: if (MXM_HandleStateReadall(pState, MXM_REG_BALSTAT, MXM_OP_BAL_EXIT) == true) { - const uint8_t temp_len = - (uint8_t)((BATTERY_MANAGEMENT_TX_LENGTH_READALL + (2uL * MXM_5XGetNumberOfSatellites(pState->pInstance5X))) & (uint8_t)UINT8_MAX); + const uint8_t temp_len = (uint8_t)((BATTERY_MANAGEMENT_TX_LENGTH_READALL + + (2uL * MXM_5XGetNumberOfSatellites(pState->pInstance5X))) & + (uint8_t)UINT8_MAX); MXM_MonRegistryParseStatusFmeaIntoDevices(pState, temp_len); } break; @@ -505,11 +511,11 @@ extern void MXM_StateMachineOperation(MXM_MONITORING_INSTANCE_s *pState) { pState->operationSubstate = MXM_INIT_DEVCFG1; break; case MXM_INIT_DEVCFG1: - /* switch to single UART with external loopback */ + /* switch to single UART with external loop back */ if (pState->requestStatus5x == MXM_5X_STATE_UNSENT) { pState->batteryCmdBuffer.regAddress = MXM_REG_DEVCFG1; pState->batteryCmdBuffer.lsb = 0x00u; /* alert interface disabled */ - pState->batteryCmdBuffer.msb = 0x01u; /* single uart with external loopback*/ + pState->batteryCmdBuffer.msb = 0x01u; /* single uart with external loop back*/ } MXM_HandleStateWriteall(pState, MXM_INIT_DEVCFG2); break; @@ -543,24 +549,27 @@ extern void MXM_StateMachineOperation(MXM_MONITORING_INSTANCE_s *pState) { case MXM_INIT_GET_VERSION: /* add version information to registry */ if (MXM_HandleStateReadall(pState, MXM_REG_VERSION, MXM_INIT_GET_ID1) == true) { - uint8_t temp_len = - (uint8_t)((BATTERY_MANAGEMENT_TX_LENGTH_READALL + (2uL * MXM_5XGetNumberOfSatellites(pState->pInstance5X))) & (uint8_t)UINT8_MAX); + uint8_t temp_len = (uint8_t)((BATTERY_MANAGEMENT_TX_LENGTH_READALL + + (2uL * MXM_5XGetNumberOfSatellites(pState->pInstance5X))) & + (uint8_t)UINT8_MAX); MXM_MonRegistryParseVersionIntoDevices(pState, temp_len); } break; case MXM_INIT_GET_ID1: /* add ID1 to registry */ if (MXM_HandleStateReadall(pState, MXM_REG_ID1, MXM_INIT_GET_ID2) == true) { - uint8_t temp_len = - (uint8_t)((BATTERY_MANAGEMENT_TX_LENGTH_READALL + (2uL * MXM_5XGetNumberOfSatellites(pState->pInstance5X))) & (uint8_t)UINT8_MAX); + uint8_t temp_len = (uint8_t)((BATTERY_MANAGEMENT_TX_LENGTH_READALL + + (2uL * MXM_5XGetNumberOfSatellites(pState->pInstance5X))) & + (uint8_t)UINT8_MAX); MXM_MonRegistryParseIdIntoDevices(pState, temp_len, MXM_REG_ID1); } break; case MXM_INIT_GET_ID2: /* add ID2 to registry */ if (MXM_HandleStateReadall(pState, MXM_REG_ID2, MXM_INIT_MEASUREEN1) == true) { - uint8_t temp_len = - (uint8_t)((BATTERY_MANAGEMENT_TX_LENGTH_READALL + (2uL * MXM_5XGetNumberOfSatellites(pState->pInstance5X))) & (uint8_t)UINT8_MAX); + uint8_t temp_len = (uint8_t)((BATTERY_MANAGEMENT_TX_LENGTH_READALL + + (2uL * MXM_5XGetNumberOfSatellites(pState->pInstance5X))) & + (uint8_t)UINT8_MAX); MXM_MonRegistryParseIdIntoDevices(pState, temp_len, MXM_REG_ID2); } break; @@ -813,13 +822,13 @@ extern void MXM_StateMachineOperation(MXM_MONITORING_INSTANCE_s *pState) { break; case MXM_INIT_I2C_CFG: /* configure I2CCFG to - * 400kHz - * Alternate write Mode (just a pointer without data) - * Combined Format - * 7 Bit addressing - * one byte pointer length - * default - */ + * 400kHz + * Alternate write Mode (just a pointer without data) + * Combined Format + * 7 Bit addressing + * one byte pointer length + * default + */ if (pState->requestStatus5x == MXM_5X_STATE_UNSENT) { pState->batteryCmdBuffer.regAddress = MXM_REG_I2CCFG; pState->batteryCmdBuffer.lsb = 0x00u; diff --git a/src/app/driver/afe/maxim/max17852/wscript b/src/app/driver/afe/maxim/max17852/wscript old mode 100644 new mode 100755 index f3b9d448..c4f2aefb --- a/src/app/driver/afe/maxim/max17852/wscript +++ b/src/app/driver/afe/maxim/max17852/wscript @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -53,7 +52,7 @@ def build(bld): os.path.join("..", "common", "mxm_1785x.c"), os.path.join("..", "common", "mxm_1785x_tools.c"), os.path.join("..", "common", "mxm_battery_management.c"), - os.path.join("..", "common", "mxm_bitextract.c"), + os.path.join("..", "common", "mxm_bit_extract.c"), os.path.join("..", "common", "mxm_crc8.c"), os.path.join("..", "common", "mxm_afe_dma.c"), os.path.join("..", "common", "mxm_registry.c"), diff --git a/src/app/driver/afe/maxim/wscript b/src/app/driver/afe/maxim/wscript old mode 100644 new mode 100755 index 1a0cdf71..de296cd6 --- a/src/app/driver/afe/maxim/wscript +++ b/src/app/driver/afe/maxim/wscript @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause diff --git a/src/app/driver/afe/nxp/api/nxp_afe.c b/src/app/driver/afe/nxp/api/nxp_afe.c index d9d63cc9..81abd4b0 100644 --- a/src/app/driver/afe/nxp/api/nxp_afe.c +++ b/src/app/driver/afe/nxp/api/nxp_afe.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,12 +43,13 @@ * @file nxp_afe.c * @author foxBMS Team * @date 2020-05-25 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup DRIVER + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS * @prefix AFE * * @brief AFE driver wrapper layer for NXP ICs + * @details TODO */ /*========== Includes =======================================================*/ diff --git a/src/app/driver/afe/nxp/api/nxp_afe.h b/src/app/driver/afe/nxp/api/nxp_afe.h index 4a77d1c6..366ac645 100644 --- a/src/app/driver/afe/nxp/api/nxp_afe.h +++ b/src/app/driver/afe/nxp/api/nxp_afe.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,12 +43,13 @@ * @file nxp_afe.h * @author foxBMS Team * @date 2021-06-04 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup DRIVER + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS * @prefix NXP * * @brief AFE driver wrapper layer for NXP ICs + * @details TODO */ #ifndef FOXBMS__NXP_AFE_H_ @@ -89,9 +90,9 @@ extern STD_RETURN_TYPE_e NXP_RequestOpenWireCheck(uint8_t string); extern STD_RETURN_TYPE_e NXP_StartMeasurement(void); /** Function to check if at least one measurement cycle has been made */ extern bool NXP_IsFirstMeasurementCycleFinished(void); -/** Function to request a read of the I2C port expnader on the slaves */ +/** Function to request a read of the I2C port expander on the slaves */ extern STD_RETURN_TYPE_e NXP_RequestIoRead(uint8_t string); -/** Function to request a write to the I2C port expnader on the slaves */ +/** Function to request a write to the I2C port expander on the slaves */ STD_RETURN_TYPE_e NXP_RequestIoWrite(uint8_t string); /*========== Externalized Static Functions Prototypes (Unit Test) ===========*/ diff --git a/src/app/driver/afe/nxp/mc33775a/api/nxp_mc33775a_afe.c b/src/app/driver/afe/nxp/mc33775a/api/nxp_mc33775a_afe.c index fdc876ff..d1512784 100644 --- a/src/app/driver/afe/nxp/mc33775a/api/nxp_mc33775a_afe.c +++ b/src/app/driver/afe/nxp/mc33775a/api/nxp_mc33775a_afe.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file nxp_mc33775a_afe.c * @author foxBMS Team * @date 2020-05-08 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS_CONFIGURATION * @prefix N775 * * @brief Configuration for the MC33775A analog front-end - * + * @details TODO */ /*========== Includes =======================================================*/ @@ -81,8 +81,8 @@ extern STD_RETURN_TYPE_e NXP_Measure(void) { } extern STD_RETURN_TYPE_e NXP_Initialize(void) { - PEX_SetPinDirectionOutput(PEX_PORT_EXPANDER3, PEX_PIN10); - PEX_SetPin(PEX_PORT_EXPANDER3, PEX_PIN10); + PEX_SetPinDirectionOutput(PEX_PORT_EXPANDER3, PEX_PORT_1_PIN_0); + PEX_SetPin(PEX_PORT_EXPANDER3, PEX_PORT_1_PIN_0); /* Leave time for the PEX to be triggered in the 10ms task */ uint32_t current_time = OS_GetTickCount(); OS_DelayTaskUntil(¤t_time, 10u); diff --git a/src/app/driver/afe/nxp/mc33775a/config/nxp_mc33775a_cfg.c b/src/app/driver/afe/nxp/mc33775a/config/nxp_mc33775a_cfg.c index bca0fb54..12ed848c 100644 --- a/src/app/driver/afe/nxp/mc33775a/config/nxp_mc33775a_cfg.c +++ b/src/app/driver/afe/nxp/mc33775a/config/nxp_mc33775a_cfg.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file nxp_mc33775a_cfg.c * @author foxBMS Team * @date 2020-05-08 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS_CONFIGURATION * @prefix N775 * * @brief Configuration for the MC33775A analog front-end - * + * @details TODO */ /*========== Includes =======================================================*/ @@ -186,7 +186,7 @@ N775_MUX_CH_CFG_s n775_muxSequence[N775_MUX_SEQUENCE_LENGTH] = { /*========== Extern Function Implementations ================================*/ int16_t N775_ConvertVoltagesToTemperatures(uint16_t adcVoltage_mV) { - return TSI_GetTemperature(adcVoltage_mV); /* Convert degree celsius to deci degree celsius */ + return TSI_GetTemperature(adcVoltage_mV); /* Convert degree Celsius to deci degree Celsius */ } /*========== Externalized Static Function Implementations (Unit Test) =======*/ diff --git a/src/app/driver/afe/nxp/mc33775a/config/nxp_mc33775a_cfg.h b/src/app/driver/afe/nxp/mc33775a/config/nxp_mc33775a_cfg.h index 31412041..db25bd86 100644 --- a/src/app/driver/afe/nxp/mc33775a/config/nxp_mc33775a_cfg.h +++ b/src/app/driver/afe/nxp/mc33775a/config/nxp_mc33775a_cfg.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file nxp_mc33775a_cfg.h * @author foxBMS Team * @date 2020-05-08 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS_CONFIGURATION * @prefix N775 * * @brief Header for the configuration for the MC33775A analog front-end. - * + * @details TODO */ #ifndef FOXBMS__NXP_MC33775A_CFG_H_ @@ -108,16 +108,6 @@ */ #define N775_NOTIFICATION_RX_TIMEOUT_ms (2u) -/** - * Number of used N775-ICs - */ -#define N775_N_N775 (BS_NR_OF_MODULES_PER_STRING) - -/** - * Number of N775-ICs per battery module - */ -#define N775_NUMBER_OF_N775_PER_MODULE (1u) - /** * 775A Tx message length in bytes. */ @@ -128,52 +118,6 @@ */ #define N775_RX_MESSAGE_LENGTH (4u) -/** - * Timeout in milliseconds added to the transmission time for interrupt-based - * SPI transmission. - */ -#define N775_TRANSMISSION_TIMEOUT (10u) - -/** - * N775 Maximum time from wakeup event to possible communication in ms - * 2.4ms in data sheet - */ -#define N775_TWAKECOM_MS (3u) - -/** - * N775 Time between two consecutive wake-up messages in ms - * 4ms in data sheet - */ -#define N775_TDWAKE_MS (4u) - -/** - * N775 time for daisy-chain to wake-up in ms - */ -#define N775_TIME_DAISYCHAIN_WAKEUP_MS (N775_N_N775 * (N775_TWAKECOM_MS + N775_TDWAKE_MS)) - -/** - * N775 time between two wake up commands in ms - */ -#define N775_TIME_BETWEEN_WAKEUP_MS (4u) - -/** - * N775 time after enumeraiton in ms - */ -#define N775_TIME_AFTER_ENUMERATION_MS (1u) - -/** - * Maximum number of re-tries in case of SPI error during the communication with daisy chain - * before going into error state - */ -#define N775_TRANSMIT_SPIERRLIMIT (3u) - -/** - * Max number of Bytes to be received from daisy-chain - * This limit is not due to the hardware. - * It is only to set the length of the receive buffer for DMA. - */ -#define N775_MAX_N_BYTES_FOR_DATA_RECEPTION (N775_TX_MESSAGE_LENGTH * N775_MAX_NUMBER_OF_VOLTAGES) - /*========== Extern Constant and Variable Declarations ======================*/ /** Multiplexer measurement sequence */ diff --git a/src/app/driver/afe/nxp/mc33775a/nxp_afe_dma.c b/src/app/driver/afe/nxp/mc33775a/nxp_afe_dma.c index 81a07bf0..38481b0e 100644 --- a/src/app/driver/afe/nxp/mc33775a/nxp_afe_dma.c +++ b/src/app/driver/afe/nxp/mc33775a/nxp_afe_dma.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file nxp_afe_dma.c * @author foxBMS Team * @date 2020-05-27 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix AFE * * @brief Driver for the DMA module for the N775. - * + * @details TODO */ /*========== Includes =======================================================*/ @@ -84,7 +84,7 @@ void AFE_DmaCallback(uint8_t spiIndex) { (void)OS_NotifyIndexedFromIsr(ftsk_taskHandleAfe, N775_NOTIFICATION_TX_INDEX, N775_TX_NOTIFIED_VALUE); } else if ((spiIndex == 3u)) { /* SPI 4 = Slave SPI */ - dma_spiInterfaces[spiIndex]->GCR1 &= ~SPIEN_BIT; + dma_spiInterfaces[spiIndex]->GCR1 &= ~DMA_SPI_ENABLE_BIT; /* Set slave SPI pins as GIO to deactivate them */ dma_spiInterfaces[spiIndex]->PC0 &= 0xFFFFFF00; (void)OS_NotifyIndexedFromIsr(ftsk_taskHandleAfe, N775_NOTIFICATION_RX_INDEX, N775_RX_NOTIFIED_VALUE); diff --git a/src/app/driver/afe/nxp/mc33775a/nxp_afe_dma.h b/src/app/driver/afe/nxp/mc33775a/nxp_afe_dma.h index 7a548257..8e076c46 100644 --- a/src/app/driver/afe/nxp/mc33775a/nxp_afe_dma.h +++ b/src/app/driver/afe/nxp/mc33775a/nxp_afe_dma.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file nxp_afe_dma.h * @author foxBMS Team * @date 2020-05-27 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix AFE * * @brief Headers for the driver for the DMA module. - * + * @details TODO */ #ifndef FOXBMS__NXP_AFE_DMA_H_ diff --git a/src/app/driver/afe/nxp/mc33775a/nxp_mc33775a-ll.c b/src/app/driver/afe/nxp/mc33775a/nxp_mc33775a-ll.c index 23aa671d..657c0fa5 100644 --- a/src/app/driver/afe/nxp/mc33775a/nxp_mc33775a-ll.c +++ b/src/app/driver/afe/nxp/mc33775a/nxp_mc33775a-ll.c @@ -1,36 +1,36 @@ /* Copyright 2019 NXP -* -* Redistribution and use in source and binary forms, with or without modification, are permitted -* provided that the following terms are met: -* 1. Redistributions of source code must retain the above copyright notice, this list of conditions -* and the following disclaimer. -* 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions, -* and the following disclaimer in the documentation and/or other materials provided with the distribution. -* 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse -* or promote products derived from this software without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ?AS IS? AND ANY -* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL -* THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA; OR PROFITS; OR BUSINESS INTERRUPTION) -* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR -* TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ + * + * Redistribution and use in source and binary forms, with or without modification, are permitted + * provided that the following terms are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions + * and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions, + * and the following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse + * or promote products derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ?AS IS? AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + * THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA; OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ /** * @file nxp_mc33775a-ll.c * @author NXP * @date 2022-07-29 (date of creation) - * @updated 2023-09-05 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix N775 * * @brief Low level driver for the MC33775A - * + * @details TODO */ /*========== Includes =======================================================*/ @@ -161,9 +161,9 @@ extern void N775_CommunicationWrite( uc_msg_t message = {0}; /* Message for read command */ /** The function gets the device address - * The N775_CommunicationComposeMessage function adds the chain address. - * Chain address = 1 used so (deviceAddress | (1u << 6u)) is used - */ + * The N775_CommunicationComposeMessage function adds the chain address. + * Chain address = 1 used so (deviceAddress | (1u << 6u)) is used + */ N775_CommunicationComposeMessage( BMS1_CMD_WRITE, 0, (deviceAddress | (1u << 6u)), registerAddress, 0, &value, &message); N775_ConvertMessageToBuffer(n775ToTplTxBuffer, message); @@ -227,9 +227,9 @@ extern N775_COMMUNICATION_STATUS_e N775_CommunicationReadMultiple( */ /** The function gets the device address - * The pack_msg function adds the chain address. - * Chain address = 1 used so (deviceAddress | (1u << 6u)) is used in the following - * */ + * The pack_msg function adds the chain address. + * Chain address = 1 used so (deviceAddress | (1u << 6u)) is used in the following + * */ /* responseLength = 0 means one data word per answer frame so (responseLength - 1u) is used in the following */ uc_msg_t txMessage = {0u}; /* Message for read command */ @@ -304,8 +304,8 @@ extern N775_COMMUNICATION_STATUS_e N775_CommunicationReadMultiple( } if (n775_rxCompleted == false) { - pState->pSpiRxSequence->pNode->INT0 &= ~DMAREQEN_BIT; - pState->pSpiRxSequence->pNode->GCR1 &= ~SPIEN_BIT; + pState->pSpiRxSequence->pNode->INT0 &= ~DMA_REQUEST_ENABLE_BIT; + pState->pSpiRxSequence->pNode->GCR1 &= ~DMA_SPI_ENABLE_BIT; communicationStatus = N775_COMMUNICATION_ERROR_TIMEOUT; } else { for (uint16_t i = 0; i < nrAnswerFrames; i++) { @@ -471,11 +471,11 @@ extern N775_COMMUNICATION_STATUS_e N775_CommunicationDecomposeMessage( /* SM.e.29 : Communication - Message counter */ if ((errorCodeMatch == false) && (messageCount != referenceMessageCounter[string][*pDeviceAddress])) { errorCodeMatch = true; - referenceMessageCounter[string][*pDeviceAddress] = (messageCount + 1u) & 0xFu; + referenceMessageCounter[string][*pDeviceAddress] = (messageCount + 1u) & 0x0Fu; communicationStatus = N775_COMMUNICATION_ERROR_WRONG_MESSAGE_COUNT; } /* Increment message counter */ - referenceMessageCounter[string][*pDeviceAddress] = (referenceMessageCounter[string][*pDeviceAddress] + 1u) & 0xFu; + referenceMessageCounter[string][*pDeviceAddress] = (referenceMessageCounter[string][*pDeviceAddress] + 1u) & 0x0Fu; /* Check error address */ if ((errorCodeMatch == false) && (*pRegisterAddress == N775_ERROR_REGISTER_ADDRESS)) { diff --git a/src/app/driver/afe/nxp/mc33775a/nxp_mc33775a-ll.h b/src/app/driver/afe/nxp/mc33775a/nxp_mc33775a-ll.h index 89a163e9..9ea44928 100644 --- a/src/app/driver/afe/nxp/mc33775a/nxp_mc33775a-ll.h +++ b/src/app/driver/afe/nxp/mc33775a/nxp_mc33775a-ll.h @@ -1,36 +1,36 @@ /* Copyright 2019 NXP -* -* Redistribution and use in source and binary forms, with or without modification, are permitted -* provided that the following terms are met: -* 1. Redistributions of source code must retain the above copyright notice, this list of conditions -* and the following disclaimer. -* 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions, -* and the following disclaimer in the documentation and/or other materials provided with the distribution. -* 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse -* or promote products derived from this software without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ?AS IS? AND ANY -* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL -* THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA; OR PROFITS; OR BUSINESS INTERRUPTION) -* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR -* TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ + * + * Redistribution and use in source and binary forms, with or without modification, are permitted + * provided that the following terms are met: + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions + * and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions, + * and the following disclaimer in the documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse + * or promote products derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ?AS IS? AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + * THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA; OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ /** * @file nxp_mc33775a-ll.h * @author NXP * @date 2022-07-29 (date of creation) - * @updated 2023-09-05 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix N775 * * @brief Header for the low level driver for the MC33775A - * + * @details TODO */ #ifndef FOXBMS__NXP_MC33775A_LL_H_ diff --git a/src/app/driver/afe/nxp/mc33775a/nxp_mc33775a-ll_vendor-hashes.json b/src/app/driver/afe/nxp/mc33775a/nxp_mc33775a-ll_vendor-hashes.json new file mode 100644 index 00000000..275e62f1 --- /dev/null +++ b/src/app/driver/afe/nxp/mc33775a/nxp_mc33775a-ll_vendor-hashes.json @@ -0,0 +1,23 @@ +[ + { + "hash": { + "linux": "4e8d1d5f4e0bd49c8905bf2ddd2aaa02", + "win32": "e0eb31f2a139503b8db5a98ca831d94d" + }, + "path": "vendor/MC33775A.h" + }, + { + "hash": { + "linux": "21f17840a8ac0537a5fd4a5b965411b7", + "win32": "ec3739ab66683e832570a192ca35ca7f" + }, + "path": "vendor/uc_msg_t.c" + }, + { + "hash": { + "linux": "93452a798dfe83f1aa3b97ddc0bd37ac", + "win32": "bed41177a2aea1e27d6533a9358a48cb" + }, + "path": "vendor/uc_msg_t.h" + } +] diff --git a/src/app/driver/afe/nxp/mc33775a/nxp_mc33775a.c b/src/app/driver/afe/nxp/mc33775a/nxp_mc33775a.c index 50a31391..eaadc95c 100644 --- a/src/app/driver/afe/nxp/mc33775a/nxp_mc33775a.c +++ b/src/app/driver/afe/nxp/mc33775a/nxp_mc33775a.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file nxp_mc33775a.c * @author foxBMS Team * @date 2020-05-08 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix N775 * * @brief Driver for the MC33775A analog front-end. - * + * @details TODO */ /*========== Includes =======================================================*/ @@ -67,6 +67,7 @@ #include "afe_dma.h" #include "database.h" #include "fassert.h" +#include "foxmath.h" #include "fstd_types.h" #include "ftask.h" #include "mcu.h" @@ -258,10 +259,9 @@ static void N775_BalanceControl(N775_STATE_s *pState) { for (uint8_t m = 0u; m < BS_NR_OF_MODULES_PER_STRING; m++) { uint8_t deviceAddress = m + 1u; uint16_t balancingState = 0u; - for (uint16_t c = 0u; c < BS_NR_OF_CELL_BLOCKS_PER_MODULE; c++) { - if (pState->n775Data.balancingControl - ->balancingState[pState->currentString][c + (m * BS_NR_OF_CELL_BLOCKS_PER_MODULE)] != 0u) { - balancingState |= 1u << c; + for (uint16_t cb = 0u; cb < BS_NR_OF_CELL_BLOCKS_PER_MODULE; cb++) { + if (pState->n775Data.balancingControl->activateBalancing[pState->currentString][m][cb] == true) { + balancingState |= 1u << cb; } } /* All channels active --> 14 bits set to 1 --> 0x3FFF */ @@ -334,6 +334,11 @@ static void N775_CaptureMeasurement(N775_STATE_s *pState) { /* Wait for measurements to be ready */ N775_Wait(N775_MEASUREMENT_READY_TIME_MS); + /* Reset number previous measurement results on string-level */ + pState->n775Data.cellVoltage->stringVoltage_mV[pState->currentString] = 0u; + pState->n775Data.cellVoltage->nrValidCellVoltages[pState->currentString] = 0u; + pState->n775Data.cellTemperature->nrValidTemperatures[pState->currentString] = 0u; + for (uint8_t m = 0u; m < BS_NR_OF_MODULES_PER_STRING; m++) { uint8_t deviceAddress = m + 1u; retValPrimary = N775_CommunicationReadMultiple( @@ -352,9 +357,17 @@ static void N775_CaptureMeasurement(N775_STATE_s *pState) { if (N775_INVALID_REGISTER_VALUE != primaryRawValues[cb + 1u]) { primaryValues[cb + 1u] = (int16_t)primaryRawValues[cb + 1u]; pState->n775Data.cellVoltage->cellVoltage_mV[pState->currentString][m][cb] = - (((float_t)primaryValues[cb + 1u]) * 154.0e-6f * 1000.0f); + (((float_t)primaryValues[cb + 1u]) * 154.0e-6f * UNIT_CONVERSION_FACTOR_1000_FLOAT); + /* String voltage measurement is calculated as sum of individual cell voltage measurement */ + pState->n775Data.cellVoltage->stringVoltage_mV[pState->currentString] += + pState->n775Data.cellVoltage->cellVoltage_mV[pState->currentString][m][cb]; + pState->n775Data.cellVoltage->invalidCellVoltage[pState->currentString][m][cb] = false; + pState->n775Data.cellVoltage->nrValidCellVoltages[pState->currentString]++; } else { error++; + pState->n775Data.cellVoltage->cellVoltage_mV[pState->currentString][m][cb] = + AFE_DEFAULT_CELL_VOLTAGE_INVALID_VALUE; + pState->n775Data.cellVoltage->invalidCellVoltage[pState->currentString][m][cb] = true; } } for (uint8_t g = 0u; g < 4u; g++) { @@ -377,6 +390,12 @@ static void N775_CaptureMeasurement(N775_STATE_s *pState) { } else { error++; } + } else { + /* Reset voltage values and the relevant invalid flag if the communication is not ok */ + for (uint8_t cb = 0u; cb < BS_NR_OF_CELL_BLOCKS_PER_MODULE; cb++) { + pState->n775Data.cellVoltage->cellVoltage_mV[pState->currentString][m][cb] = 0; + pState->n775Data.cellVoltage->invalidCellVoltage[pState->currentString][m][cb] = true; + } } N775_ErrorHandling(pState, retValSecondary, m); @@ -394,30 +413,55 @@ static void N775_CaptureMeasurement(N775_STATE_s *pState) { } } - /* Set temperature values */ - if (N775_USE_MUX_FOR_TEMP == true) { - /* Mux case */ - if (gpio03Error == false) { - pState->n775Data.cellTemperature - ->cellTemperature_ddegC[pState->currentString][m][pState->currentMux[pState->currentString]] = - N775_ConvertVoltagesToTemperatures( - pState->n775Data.allGpioVoltage - ->gpioVoltages_mV[pState->currentString] - [N775_MUXED_TEMP_GPIO_POSITION + (m * BS_NR_OF_GPIOS_PER_MODULE)]); - } - } else if (N775_USE_MUX_FOR_TEMP == false) { - /* No mux case */ - if ((gpio03Error == false) && (gpio47Error == false)) { - for (uint8_t ts = 0u; ts < BS_NR_OF_TEMP_SENSORS_PER_MODULE; ts++) { - pState->n775Data.cellTemperature->cellTemperature_ddegC[pState->currentString][m][ts] = + N775_ErrorHandling(pState, retValPrimary, m); + if (retValPrimary == N775_COMMUNICATION_OK) { + /* Set temperature values */ + if (N775_USE_MUX_FOR_TEMP == true) { + /* Mux case */ + if (gpio03Error == false) { + pState->n775Data.cellTemperature + ->cellTemperature_ddegC[pState->currentString][m][pState->currentMux[pState->currentString]] = N775_ConvertVoltagesToTemperatures( - pState->n775Data.allGpioVoltage - ->gpioVoltages_mV[pState->currentString][ts + (m * BS_NR_OF_GPIOS_PER_MODULE)]); + pState->n775Data.allGpioVoltage->gpioVoltages_mV[pState->currentString] + [N775_MULTIPLEXER_TEMP_GPIO_POSITION + + (m * BS_NR_OF_GPIOS_PER_MODULE)]); + pState->n775Data.cellTemperature + ->invalidCellTemperature[pState->currentString][m][pState->currentMux[pState->currentString]] = + false; + } else { + pState->n775Data.cellTemperature + ->cellTemperature_ddegC[pState->currentString][m][pState->currentMux[pState->currentString]] = + 0; + pState->n775Data.cellTemperature + ->invalidCellTemperature[pState->currentString][m][pState->currentMux[pState->currentString]] = + true; + } + } else if (N775_USE_MUX_FOR_TEMP == false) { + /* No mux case */ + if ((gpio03Error == false) && (gpio47Error == false)) { + for (uint8_t ts = 0u; ts < BS_NR_OF_TEMP_SENSORS_PER_MODULE; ts++) { + pState->n775Data.cellTemperature->cellTemperature_ddegC[pState->currentString][m][ts] = + N775_ConvertVoltagesToTemperatures( + pState->n775Data.allGpioVoltage + ->gpioVoltages_mV[pState->currentString][ts + (m * BS_NR_OF_GPIOS_PER_MODULE)]); + pState->n775Data.cellTemperature->invalidCellTemperature[pState->currentString][m][ts] = false; + } + } else { + for (uint8_t ts = 0u; ts < BS_NR_OF_TEMP_SENSORS_PER_MODULE; ts++) { + pState->n775Data.cellTemperature->cellTemperature_ddegC[pState->currentString][m][ts] = 0; + pState->n775Data.cellTemperature->invalidCellTemperature[pState->currentString][m][ts] = true; + } } + } else { + /* Invalid value for switch case */ + FAS_ASSERT(FAS_TRAP); } } else { - /* Invalid value for switch case */ - FAS_ASSERT(FAS_TRAP); + /* Reset temperature values the relevant invalid flag if the communication is not ok */ + for (uint8_t ts = 0u; ts < BS_NR_OF_TEMP_SENSORS_PER_MODULE; ts++) { + pState->n775Data.cellTemperature->cellTemperature_ddegC[pState->currentString][m][ts] = 0; + pState->n775Data.cellTemperature->invalidCellTemperature[pState->currentString][m][ts] = true; + } } if (N775_CHECK_SUPPLY_CURRENT == true) { @@ -452,14 +496,14 @@ static STD_RETURN_TYPE_e N775_Enumerate(N775_STATE_s *pState) { MC33775_SYS_MODE_OFFSET, (MC33775_SYS_MODE_TARGETMODE_DEEPSLEEP_ENUM_VAL << MC33775_SYS_MODE_TARGETMODE_POS), pState->pSpiTxSequence); - N775_Wait(1u); + N775_Wait(N775_T_SW_ACT_DEEP_SLEEP_MS); /* Wake up slave */ returnedValue = N775_CommunicationRead(i, MC33775_SYS_COM_CFG_OFFSET, &readValue, pState); /* If slave is not enumerated */ if (returnedValue != N775_COMMUNICATION_OK) { /* Wait until the slave has woken up */ - N775_Wait(N775_WAKEUP_TIME_MS); + N775_Wait(N775_T_WAKE_COM_MS); returnedValue = N775_CommunicationRead(i, MC33775_SYS_COM_CFG_OFFSET, &readValue, pState); /* If slave is not enumerated */ @@ -497,7 +541,7 @@ static STD_RETURN_TYPE_e N775_Enumerate(N775_STATE_s *pState) { returnedValue = N775_CommunicationReadMultiple(i, 3u, 3u, MC33775_SYS_UID_LOW_OFFSET, uid, pState); if (returnedValue == N775_COMMUNICATION_OK) { pState->n775Data.uid[pState->currentString][i - 1u] = 0u; - for (uint8_t j = 0u; j <= 3u; j++) { + for (uint8_t j = 0u; j < 3u; j++) { pState->n775Data.uid[pState->currentString][i - 1u] |= ((uint64_t)uid[j]) << (16u * j); } } @@ -564,57 +608,61 @@ static void N775_Initialize(N775_STATE_s *pState) { static void N775_InitializeDatabase(N775_STATE_s *pState) { FAS_ASSERT(pState != NULL_PTR); - uint16_t iterator = 0; - - for (uint8_t stringNumber = 0u; stringNumber < BS_NR_OF_STRINGS; stringNumber++) { - pState->n775Data.cellVoltage->state = 0; - pState->n775Data.minMax->minimumCellVoltage_mV[stringNumber] = 0; - pState->n775Data.minMax->maximumCellVoltage_mV[stringNumber] = 0; - pState->n775Data.minMax->nrModuleMinimumCellVoltage[stringNumber] = 0; - pState->n775Data.minMax->nrModuleMaximumCellVoltage[stringNumber] = 0; - pState->n775Data.minMax->nrCellMinimumCellVoltage[stringNumber] = 0; - pState->n775Data.minMax->nrCellMaximumCellVoltage[stringNumber] = 0; + + for (uint8_t s = 0u; s < BS_NR_OF_STRINGS; s++) { + pState->n775Data.cellVoltage->state = 0u; + pState->n775Data.minMax->minimumCellVoltage_mV[s] = 0; + pState->n775Data.minMax->maximumCellVoltage_mV[s] = 0; + pState->n775Data.minMax->nrModuleMinimumCellVoltage[s] = 0u; + pState->n775Data.minMax->nrModuleMaximumCellVoltage[s] = 0u; + pState->n775Data.minMax->nrCellMinimumCellVoltage[s] = 0u; + pState->n775Data.minMax->nrCellMaximumCellVoltage[s] = 0u; for (uint8_t m = 0u; m < BS_NR_OF_MODULES_PER_STRING; m++) { - for (uint8_t cb = 0u; cb < BS_NR_OF_CELL_BLOCKS_PER_STRING; cb++) { - pState->n775Data.cellVoltage->cellVoltage_mV[stringNumber][m][cb] = 0; + for (uint8_t cb = 0u; cb < BS_NR_OF_CELL_BLOCKS_PER_MODULE; cb++) { + pState->n775Data.cellVoltage->cellVoltage_mV[s][m][cb] = 0; + pState->n775Data.cellVoltage->invalidCellVoltage[s][m][cb] = true; } } - pState->n775Data.cellTemperature->state = 0; - pState->n775Data.minMax->minimumTemperature_ddegC[stringNumber] = 0; - pState->n775Data.minMax->maximumTemperature_ddegC[stringNumber] = 0; - pState->n775Data.minMax->nrModuleMinimumTemperature[stringNumber] = 0; - pState->n775Data.minMax->nrModuleMaximumTemperature[stringNumber] = 0; - pState->n775Data.minMax->nrSensorMinimumTemperature[stringNumber] = 0; - pState->n775Data.minMax->nrSensorMaximumTemperature[stringNumber] = 0; + pState->n775Data.cellTemperature->state = 0u; + pState->n775Data.minMax->minimumTemperature_ddegC[s] = 0; + pState->n775Data.minMax->maximumTemperature_ddegC[s] = 0; + pState->n775Data.minMax->nrModuleMinimumTemperature[s] = 0u; + pState->n775Data.minMax->nrModuleMaximumTemperature[s] = 0u; + pState->n775Data.minMax->nrSensorMinimumTemperature[s] = 0u; + pState->n775Data.minMax->nrSensorMaximumTemperature[s] = 0u; for (uint8_t m = 0u; m < BS_NR_OF_MODULES_PER_STRING; m++) { for (uint8_t ts = 0u; ts < BS_NR_OF_TEMP_SENSORS_PER_MODULE; ts++) { - pState->n775Data.cellTemperature->cellTemperature_ddegC[stringNumber][m][ts] = 0; + pState->n775Data.cellTemperature->cellTemperature_ddegC[s][m][ts] = 0; + pState->n775Data.cellTemperature->invalidCellTemperature[s][m][ts] = true; } } - for (iterator = 0u; iterator < BS_NR_OF_CELL_BLOCKS_PER_STRING; iterator++) { - pState->n775Data.balancingControl->balancingState[stringNumber][iterator] = 0; + for (uint8_t m = 0u; m < BS_NR_OF_MODULES_PER_STRING; m++) { + for (uint8_t cb = 0u; cb < BS_NR_OF_CELL_BLOCKS_PER_MODULE; cb++) { + pState->n775Data.balancingControl->activateBalancing[s][m][cb] = false; + } } - for (iterator = 0u; iterator < BS_NR_OF_MODULES_PER_STRING; iterator++) { - pState->n775Data.errorTable->communicationOk[stringNumber][iterator] = false; - pState->n775Data.errorTable->noCommunicationTimeout[stringNumber][iterator] = false; - pState->n775Data.errorTable->crcIsValid[stringNumber][iterator] = false; - pState->n775Data.errorTable->mux0IsOk[stringNumber][iterator] = false; - pState->n775Data.errorTable->mux1IsOK[stringNumber][iterator] = false; - pState->n775Data.errorTable->mux2IsOK[stringNumber][iterator] = false; - pState->n775Data.errorTable->mux3IsOK[stringNumber][iterator] = false; + for (uint8_t m = 0u; m < BS_NR_OF_MODULES_PER_STRING; m++) { + pState->n775Data.errorTable->communicationOk[s][m] = false; + pState->n775Data.errorTable->noCommunicationTimeout[s][m] = false; + pState->n775Data.errorTable->crcIsValid[s][m] = false; + pState->n775Data.errorTable->mux0IsOk[s][m] = false; + pState->n775Data.errorTable->mux1IsOK[s][m] = false; + pState->n775Data.errorTable->mux2IsOK[s][m] = false; + pState->n775Data.errorTable->mux3IsOK[s][m] = false; } - for (iterator = 0u; iterator < BS_NR_OF_MODULES_PER_STRING; iterator++) { - pState->n775Data.uid[stringNumber][iterator] = 0; + for (uint8_t m = 0u; m < BS_NR_OF_MODULES_PER_STRING; m++) { + pState->n775Data.uid[s][m] = 0u; } } - DATA_WRITE_DATA(pState->n775Data.cellVoltage); - DATA_WRITE_DATA(pState->n775Data.cellTemperature); - DATA_WRITE_DATA(pState->n775Data.minMax); - DATA_WRITE_DATA(pState->n775Data.balancingControl); + DATA_WRITE_DATA( + pState->n775Data.cellVoltage, + pState->n775Data.cellTemperature, + pState->n775Data.minMax, + pState->n775Data.balancingControl); } static void N775_InitializeI2c(N775_STATE_s *pState) { @@ -659,10 +707,10 @@ static STD_RETURN_TYPE_e N775_SetMuxChannel(N775_STATE_s *pState) { uint16_t readValue = 0u; uint8_t dataI2c = 0u; - uint8_t addressI2c_write = N775_ADG728_ADDRESS_UPPERBITS; - uint8_t addressI2c_read = N775_ADG728_ADDRESS_UPPERBITS; + uint8_t addressI2c_write = N775_ADG728_ADDRESS_UPPER_BITS; + uint8_t addressI2c_read = N775_ADG728_ADDRESS_UPPER_BITS; uint16_t tries = 0u; - STD_RETURN_TYPE_e retVAL = STD_OK; + STD_RETURN_TYPE_e retVal = STD_OK; N775_COMMUNICATION_STATUS_e returnedValue = N775_COMMUNICATION_OK; /* First set channel */ @@ -742,14 +790,14 @@ static STD_RETURN_TYPE_e N775_SetMuxChannel(N775_STATE_s *pState) { } } } else { - retVAL = STD_NOT_OK; + retVal = STD_NOT_OK; } } } else { - retVAL = STD_NOT_OK; + retVal = STD_NOT_OK; } - return retVAL; + return retVal; } static void N775_StartMeasurement(N775_STATE_s *pState) { @@ -757,18 +805,20 @@ static void N775_StartMeasurement(N775_STATE_s *pState) { /* Enable cell voltage measurements */ N775_CommunicationWrite(N775_BROADCAST_ADDRESS, MC33775_ALLM_VCVB_CFG_OFFSET, 0x3FFF, pState->pSpiTxSequence); + N775_Wait(N775_T_WAIT_CYC_SOC_MS); /* Enable analog inputs 0-3 and module voltage measurement */ N775_CommunicationWrite(N775_BROADCAST_ADDRESS, MC33775_PRMM_AIN_CFG_OFFSET, 0x1F, pState->pSpiTxSequence); + N775_Wait(N775_T_WAIT_CYC_SOC_MS); /* Enable analog inputs 4-7 measurement */ N775_CommunicationWrite(N775_BROADCAST_ADDRESS, MC33775_SECM_AIN_CFG_OFFSET, 0x0F, pState->pSpiTxSequence); + N775_Wait(N775_T_WAIT_CYC_SOC_MS); /* Set pause of balancing before measurement start, enable the measurement units simultaneously */ N775_CommunicationWrite( N775_BROADCAST_ADDRESS, MC33775_ALLM_CFG_OFFSET, (N775_BALPAUSELEN_10US << MC33775_ALLM_CFG_BALPAUSELEN_POS) | (1 << MC33775_ALLM_CFG_MEASEN_POS), pState->pSpiTxSequence); - - N775_Wait(N775_TIME_AFTER_MEASUREMENT_START_MS); + N775_Wait(N775_T_WAIT_CYC_SOC_MS); } static STD_RETURN_TYPE_e N775_TransmitI2c(N775_STATE_s *pState) { diff --git a/src/app/driver/afe/nxp/mc33775a/nxp_mc33775a.h b/src/app/driver/afe/nxp/mc33775a/nxp_mc33775a.h index 2209de29..a68a718e 100644 --- a/src/app/driver/afe/nxp/mc33775a/nxp_mc33775a.h +++ b/src/app/driver/afe/nxp/mc33775a/nxp_mc33775a.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file nxp_mc33775a.h * @author foxBMS Team * @date 2020-05-08 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix N775 * diff --git a/src/app/driver/afe/nxp/mc33775a/nxp_mc33775a.json b/src/app/driver/afe/nxp/mc33775a/nxp_mc33775a.json index f483a21a..9643c816 100644 --- a/src/app/driver/afe/nxp/mc33775a/nxp_mc33775a.json +++ b/src/app/driver/afe/nxp/mc33775a/nxp_mc33775a.json @@ -1,11 +1,11 @@ { - "include": [ - ".", - "api", - "config", - "vendor", - "../api", - "../common", - "../../api" - ] + "include": [ + ".", + "api", + "config", + "vendor", + "../api", + "../common", + "../../api" + ] } diff --git a/src/app/driver/afe/nxp/mc33775a/nxp_mc33775a_defs.h b/src/app/driver/afe/nxp/mc33775a/nxp_mc33775a_defs.h index 04e092c3..adc02697 100644 --- a/src/app/driver/afe/nxp/mc33775a/nxp_mc33775a_defs.h +++ b/src/app/driver/afe/nxp/mc33775a/nxp_mc33775a_defs.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file nxp_mc33775a_defs.h * @author foxBMS Team * @date 2020-09-01 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix N775 * * @brief Definitions for the driver for the MC33775A analog front-end. - * + * @details TODO */ #ifndef FOXBMS__NXP_MC33775A_DEFS_H_ @@ -74,8 +74,15 @@ #define N775_CHECK_SUPPLY_CURRENT (false) /* Broadcast address for the N775 slaves */ #define N775_BROADCAST_ADDRESS (63u) -/* Time to wait between activity on bus and wake up of slave */ -#define N775_WAKEUP_TIME_MS (3u) + +/** N775 Maximum wakeup to communication time in ms. Data sheet value: maximum 2.4 ms */ +#define N775_T_WAKE_COM_MS (3u) +/** N775 switching time from active to deep sleep mode. Da sheet value: maximum 0.3 ms */ +#define N775_T_SW_ACT_DEEP_SLEEP_MS (1u) +/** Waiting time between entering in cyclic mode and start of conversation. + * Data sheet value: minimum 5.0 ms */ +#define N775_T_WAIT_CYC_SOC_MS (6u) + /* Timeout in 10ms to go into sleep, max 255 (corresponding to 2550ms) */ #define N775_TIMEOUT_TO_SLEEP_10MS (200u) /* Timeout enable, 0u in register = enabled */ @@ -84,8 +91,7 @@ #define N775_TIMEOUT_DISABLED (0x5Au) /* Timeout enable switch*/ #define N775_TIMEOUT_SWITCH (N775_TIMEOUT_ENABLED) -/* Time to wait after measurements started */ -#define N775_TIME_AFTER_MEASUREMENT_START_MS (5u) + /* Default chain address */ #define N775_DEFAULT_CHAIN_ADDRESS (1u) /* Measurement capture time */ @@ -98,13 +104,13 @@ /* Length of the mux measurement sequence */ #define N775_MUX_SEQUENCE_LENGTH (8u) /* Time in 10us for pause of balancing before measurement start */ -/* Wait time afer capture must be increased if this value is too high */ +/* Wait time after capture must be increased if this value is too high */ #define N775_BALPAUSELEN_10US (100u) /** * Upper bits of ADG728 mux address byte * Set to 0: bit2, bit1 (address), bit0 (R/W) */ -#define N775_ADG728_ADDRESS_UPPERBITS (0x98u) +#define N775_ADG728_ADDRESS_UPPER_BITS (0x98u) /* I2C R/W bit, read */ #define N775_I2C_READ (1u) /* I2C R/W bit, write */ @@ -112,7 +118,7 @@ /* Dummy byte for I2C, replaced by read data */ #define N775_I2C_DUMMY_BYTE (0x0u) /* GPIO position (0 to 7) used for multiplexed temperature measurement */ -#define N775_MUXED_TEMP_GPIO_POSITION (0u) +#define N775_MULTIPLEXER_TEMP_GPIO_POSITION (0u) /* Global balancing timer (0x0 - 0xFFFF) */ #define N775_GLOBAL_BALANCING_TIMER (0xFFFFu) /* Pre-balancing timer (0x0 - 0xFFFF) */ @@ -155,24 +161,6 @@ typedef enum { N775_STATE_NO_REQUEST, /*!< */ } N775_STATE_REQUEST_e; -/** - * Possible return values when state requests are made to the N775 state machine - */ -typedef enum { - N775_OK = 0, /*!< N775 --> ok */ - N775_BUSY_OK = 1, /*!< N775 under load --> ok */ - N775_REQUEST_PENDING = 2, /*!< requested to be executed */ - N775_ILLEGAL_REQUEST = 3, /*!< Request can not be executed */ - N775_SPI_ERROR = 4, /*!< Error state: Source: SPI */ - N775_PEC_ERROR = 5, /*!< Error state: Source: PEC */ - N775_MUX_ERROR = 6, /*!< Error state: Source: MUX */ - N775_INIT_ERROR = 7, /*!< Error state: Source: Initialization */ - N775_OK_FROM_ERROR = 8, /*!< Return from error --> ok */ - N775_GENERAL_ERROR = 20, /*!< General error state */ - N775_ALREADY_INITIALIZED = 30, /*!< Initialization of N775 already finished */ - N775_ILLEGAL_TASK_TYPE = 99, /*!< Illegal */ -} N775_RETURN_TYPE_e; - /** This struct contains pointer to used data buffers */ typedef struct { DATA_BLOCK_CELL_VOLTAGE_s *cellVoltage; @@ -180,65 +168,13 @@ typedef struct { DATA_BLOCK_ALL_GPIO_VOLTAGES_s *allGpioVoltage; DATA_BLOCK_MIN_MAX_s *minMax; DATA_BLOCK_BALANCING_FEEDBACK_s *balancingFeedback; - DATA_BLOCK_USER_MUX_s *userMux; DATA_BLOCK_BALANCING_CONTROL_s *balancingControl; DATA_BLOCK_SLAVE_CONTROL_s *slaveControl; - DATA_BLOCK_OPEN_WIRE_s *openWire; /* Wie genau open wire check behandeln? Was genau abspeichern? */ + DATA_BLOCK_OPEN_WIRE_s *openWire; /* How to handle open wire check? What should be stored? */ N775_SUPPLY_CURRENT_s *supplyCurrent; N775_ERROR_TABLE_s *errorTable; uint64_t uid[BS_NR_OF_STRINGS][BS_NR_OF_MODULES_PER_STRING]; -} N775_DATAPTR_s; - -/** This struct contains error counter and pointer to used error buffers */ -typedef struct { - uint32_t *errPECCnt; /* array length: Number of used N775s */ - uint32_t *errSPICnt; /* array length: Number of used N775s */ - uint8_t *n775Status; /* array length: Number of used N775s */ - uint8_t errPECRetryCnt; - uint8_t errSPIRetryCnt; - uint8_t errOccurred; - uint32_t nrOfConsecutiveErrors; -} N775_ERROR_s; - -/** - * This struct contains the measurement configuration for the N775 - * Measurement is deactivated with value = N775_STATE_NO_REQUEST - */ -typedef struct { - N775_STATE_REQUEST_e measVoltage; /* activated = N775_STATE_VOLTAGEMEASUREMENT_REQUEST */ - N775_STATE_REQUEST_e measVoltage2Cells; /* activated = N775_STATE_VOLTAGEMEASUREMENT_2CELLS_REQUEST */ - N775_STATE_REQUEST_e measVoltageSumOfCells; /* activated = N775_STATE_VOLTAGEMEASUREMENT_SC_REQUEST */ - N775_STATE_REQUEST_e measMux; /* activated = N775_STATE_MUXMEASUREMENT_REQUEST */ - N775_STATE_REQUEST_e balancing; /* activated = N775_STATE_BALANCECONTROL_REQUEST */ - N775_STATE_REQUEST_e balancing_feedback; /* activated = N775_STATE_BALANCEFEEDBACK_REQUEST */ - N775_STATE_REQUEST_e measAllGpio; /* activated = N775_STATE_ALL_GPIO_MEASUREMENT_REQUEST */ - N775_STATE_REQUEST_e userIO; /* activated = N775_STATE_USER_IO_REQUEST */ - N775_STATE_REQUEST_e readEEPROM; /* activated = N775_STATE_EEPROM_READ_UID_REQUEST */ - N775_STATE_REQUEST_e measTemperature; /* activated = N775_STATE_TEMP_SENS_READ_REQUEST */ - N775_STATE_REQUEST_e openWireCheck; /* activated = N775_STATE_OPENWIRE_CHECK_REQUEST */ - N775_STATE_REQUEST_e deviceParameterCheck; /* activated = N775_STATEMACH_DEVICE_PARAMETER_REQUEST */ - N775_STATE_REQUEST_e accuracyADCverification; /* activated = N775_STATEMACH_ADC_ACCURACY_REQUEST */ - N775_STATE_REQUEST_e digitalFilterCheck; /* activated = N775_STATEMACH_DIGITAL_FILTER_REQUEST */ - uint8_t taskCycleCnt; /* holds the current state machine index */ - uint8_t numberActiveOfStates; /* number of active states */ - uint8_t activeStates[12]; /* array holds the different substates that are executed one after another */ - /* maximum number of states : 12 */ -} N775_CONFIG_s; - -/** - * - */ -typedef enum { - N775_NOT_REUSED = 0, - N775_REUSE_READ_VOLTAGE_FOR_ADOW_PUP = 1, - N775_REUSE_READ_VOLTAGE_FOR_ADOW_PDOWN = 2, -} N775_REUSE_MODE_e; - -/** TI port expander IO direction (input or output) */ -typedef enum { - N775_PORT_EXPANDER_TI_OUTPUT = 0x0, - N775_PORT_EXPANDER_TI_INPUT = 0xFF, -} N775_PORT_EXPANDER_TI_DIRECTION_e; +} N775_DATA_s; /** * This structure contains all the variables relevant for the N775 state machine. @@ -252,22 +188,16 @@ typedef struct { SPI_INTERFACE_CONFIG_s *pSpiRxSequenceStart; /*!< pointer to the start of SPI sequence to be used for Rx */ SPI_INTERFACE_CONFIG_s *pSpiRxSequence; /*!< pointer to the SPI sequence to be used for Rx */ uint8_t currentMux[BS_NR_OF_STRINGS]; /*!< mux currently being addressed */ - N775_MUX_CH_CFG_s *pMuxSequenceStart - [BS_NR_OF_STRINGS]; /*!< pointer to the multiplexer sequence to be measured (contains a list of elements [multiplexer id, multiplexer channels]) (1,-1)...(3,-1),(0,1),...(0,7) */ - N775_MUX_CH_CFG_s *pMuxSequence - [BS_NR_OF_STRINGS]; /*!< pointer to the multiplexer sequence to be measured (contains a list of elements [multiplexer id, multiplexer channels]) (1,-1)...(3,-1),(0,1),...(0,7) */ - N775_DATAPTR_s n775Data; + N775_MUX_CH_CFG_s *pMuxSequenceStart[BS_NR_OF_STRINGS]; /*!< pointer to the multiplexer sequence to be measured + (contains a list of elements [multiplexer id, multiplexer + channels]) (1,-1)...(3,-1),(0,1),...(0,7) */ + N775_MUX_CH_CFG_s + *pMuxSequence[BS_NR_OF_STRINGS]; /*!< pointer to the multiplexer sequence to be measured (contains + a list of elements [multiplexer id, multiplexer channels]) + (1,-1)...(3,-1),(0,1),...(0,7) */ + N775_DATA_s n775Data; } N775_STATE_s; -/** This structure reflects the messages used by the NXP MC33775A */ -typedef struct { - uint16_t head; - uint16_t dataHead; - uint16_t data[4]; - uint16_t crc; - uint16_t dataLength; -} N775_MESSAGE_s; - /*========== Extern Function Prototypes =====================================*/ /*========== Externalized Static Functions Prototypes (Unit Test) ===========*/ diff --git a/src/app/driver/afe/nxp/mc33775a/wscript b/src/app/driver/afe/nxp/mc33775a/wscript old mode 100644 new mode 100755 index 6616571c..be8b1209 --- a/src/app/driver/afe/nxp/mc33775a/wscript +++ b/src/app/driver/afe/nxp/mc33775a/wscript @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -40,23 +39,10 @@ """TODO""" +import binascii import os -from waflib.Utils import unversioned_sys_platform -NXP_MC33775A_VENDOR_HASHES = { - os.path.join("vendor", "MC33775A.h"): { - "win32": b"\xe0\xeb1\xf2\xa19P;\x8d\xb5\xa9\x8c\xa81\xd9M", - "linux": b"N\x8d\x1d_N\x0b\xd4\x9c\x89\x05\xbf-\xdd*\xaa\x02", - }, - os.path.join("vendor", "uc_msg_t.c"): { - "win32": b"\xec79\xabfh>\x83%p\xa1\x92\xca5\xca\x7f", - "linux": b"!\xf1x@\xa8\xac\x057\xa5\xfdJ[\x96T\x11\xb7", - }, - os.path.join("vendor", "uc_msg_t.h"): { - "win32": b"\xbe\xd4\x11w\xa2\xae\xa1\xe2}e3\xa95\x8aH\xcb", - "linux": b"\x93E*y\x8d\xfe\x83\xf1\xaa;\x97\xdd\xc0\xbd7\xac", - }, -} +from waflib.Utils import unversioned_sys_platform def build(bld): @@ -103,12 +89,13 @@ def build(bld): target=target, ) - for k, val in NXP_MC33775A_VENDOR_HASHES.items(): - node = bld.path.find_node(k) + hashes = bld.path.find_node("nxp_mc33775a-ll_vendor-hashes.json").read_json() + for i in hashes: + node = bld.path.find_node(i["path"]) node_hash = node.h_file() - if not node_hash == val[unversioned_sys_platform()]: + if not node_hash == binascii.a2b_hex(i["hash"][unversioned_sys_platform()]): bld.fatal( "File hash of vendored file does not match " - f"('{node}' should return {val[unversioned_sys_platform()]} " + f"('{node}' should return {i['hash'][unversioned_sys_platform()]} " f"but returned {node_hash}." ) diff --git a/src/app/driver/afe/nxp/wscript b/src/app/driver/afe/nxp/wscript old mode 100644 new mode 100755 index f94f4a56..d72f52ad --- a/src/app/driver/afe/nxp/wscript +++ b/src/app/driver/afe/nxp/wscript @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause diff --git a/src/app/driver/afe/ti/api/ti_afe.c b/src/app/driver/afe/ti/api/ti_afe.c index a6a3f5f6..81c0ecb8 100644 --- a/src/app/driver/afe/ti/api/ti_afe.c +++ b/src/app/driver/afe/ti/api/ti_afe.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,12 +43,13 @@ * @file ti_afe.c * @author foxBMS Team * @date 2020-05-25 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup DRIVER + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS * @prefix AFE * * @brief AFE driver wrapper layer for TI ICs + * @details TODO */ /*========== Includes =======================================================*/ diff --git a/src/app/driver/afe/ti/api/ti_afe.h b/src/app/driver/afe/ti/api/ti_afe.h index 2d8cdc5d..cf15e197 100644 --- a/src/app/driver/afe/ti/api/ti_afe.h +++ b/src/app/driver/afe/ti/api/ti_afe.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,12 +43,13 @@ * @file ti_afe.h * @author foxBMS Team * @date 2023-09-12 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup DRIVER - * @prefix TID + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS + * @prefix TI * * @brief AFE driver wrapper layer for TI ICs + * @details TODO */ #ifndef FOXBMS__TI_AFE_H_ diff --git a/src/app/driver/afe/ti/api/wscript b/src/app/driver/afe/ti/api/wscript old mode 100644 new mode 100755 index fa0ba50e..e068311e --- a/src/app/driver/afe/ti/api/wscript +++ b/src/app/driver/afe/ti/api/wscript @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause diff --git a/src/app/driver/afe/ti/common/api/ti_bq79xxx_afe_dma.c b/src/app/driver/afe/ti/common/api/ti_bq79xxx_afe_dma.c index 12c7013c..f045bf4a 100644 --- a/src/app/driver/afe/ti/common/api/ti_bq79xxx_afe_dma.c +++ b/src/app/driver/afe/ti/common/api/ti_bq79xxx_afe_dma.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file ti_bq79xxx_afe_dma.c * @author foxBMS Team * @date 2023-09-11 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix AFE * * @brief Driver for the DMA module for the TI driver. - * + * @details TODO */ /*========== Includes =======================================================*/ @@ -80,3 +80,5 @@ void AFE_DmaCallback(uint8_t spiIndex) { } /*========== Externalized Static Function Implementations (Unit Test) =======*/ +#ifdef UNITY_UNIT_TEST +#endif diff --git a/src/app/driver/afe/ti/common/wscript b/src/app/driver/afe/ti/common/wscript old mode 100644 new mode 100755 index b48adb57..3f8b83a5 --- a/src/app/driver/afe/ti/common/wscript +++ b/src/app/driver/afe/ti/common/wscript @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause diff --git a/src/app/driver/afe/ti/dummy/api/ti_dummy_afe.c b/src/app/driver/afe/ti/dummy/api/ti_dummy_afe.c index 52c01f2b..aeaac6e3 100644 --- a/src/app/driver/afe/ti/dummy/api/ti_dummy_afe.c +++ b/src/app/driver/afe/ti/dummy/api/ti_dummy_afe.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file ti_dummy_afe.c * @author foxBMS Team * @date 2023-09-11 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS_CONFIGURATION * @prefix TI * * @brief Configuration for the TI dummy analog front-end - * + * @details TODO */ /*========== Includes =======================================================*/ diff --git a/src/app/driver/afe/ti/dummy/ti_dummy.c b/src/app/driver/afe/ti/dummy/ti_dummy.c index 8a967dee..1971ce29 100644 --- a/src/app/driver/afe/ti/dummy/ti_dummy.c +++ b/src/app/driver/afe/ti/dummy/ti_dummy.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file ti_dummy.c * @author foxBMS Team * @date 2023-09-11 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS_CONFIGURATION * @prefix TIDUM * * @brief Configuration for the TI dummy analog front-end - * + * @details TODO */ /*========== Includes =======================================================*/ diff --git a/src/app/driver/afe/ti/dummy/ti_dummy.h b/src/app/driver/afe/ti/dummy/ti_dummy.h index bb956083..67d8d5ad 100644 --- a/src/app/driver/afe/ti/dummy/ti_dummy.h +++ b/src/app/driver/afe/ti/dummy/ti_dummy.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file ti_dummy.h * @author foxBMS Team * @date 2023-09-11 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS_CONFIGURATION * @prefix TIDUM * * @brief Configuration for the TI dummy analog front-end - * + * @details TODO */ #ifndef FOXBMS__TI_DUMMY_H_ diff --git a/src/app/driver/afe/ti/dummy/ti_dummy.json b/src/app/driver/afe/ti/dummy/ti_dummy.json index fcbdc6ac..b4deb294 100644 --- a/src/app/driver/afe/ti/dummy/ti_dummy.json +++ b/src/app/driver/afe/ti/dummy/ti_dummy.json @@ -1,9 +1,9 @@ { - "include": [ - ".", - "api", - "../api", - "../common", - "../../api" - ] + "include": [ + ".", + "api", + "../api", + "../common", + "../../api" + ] } diff --git a/src/app/driver/afe/ti/dummy/wscript b/src/app/driver/afe/ti/dummy/wscript old mode 100644 new mode 100755 index 9a6171e7..7af88195 --- a/src/app/driver/afe/ti/dummy/wscript +++ b/src/app/driver/afe/ti/dummy/wscript @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause diff --git a/src/app/driver/afe/ti/wscript b/src/app/driver/afe/ti/wscript old mode 100644 new mode 100755 index 8dd4235e..63d5c214 --- a/src/app/driver/afe/ti/wscript +++ b/src/app/driver/afe/ti/wscript @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause diff --git a/src/app/driver/afe/wscript b/src/app/driver/afe/wscript old mode 100644 new mode 100755 index 6b27f69e..1ad454fd --- a/src/app/driver/afe/wscript +++ b/src/app/driver/afe/wscript @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause diff --git a/src/app/driver/can/can.c b/src/app/driver/can/can.c index 3e3bc741..d5de4cf6 100644 --- a/src/app/driver/can/can.c +++ b/src/app/driver/can/can.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file can.c * @author foxBMS Team * @date 2019-12-04 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix CAN * @@ -99,7 +99,7 @@ * message object. * 1 Direction = Transmit: On TxRequest, the respective message object is transmitted as a Data * Frame. On receiving a Remote Frame with a matching identifier, the TxRequest bit of this message - * object is set (if RmtEn = 1). + * object is set (if RemoteEntry = 1). */ /** IF2ARB set TX direction */ #define CAN_IF2ARB_SET_TX_DIRECTION ((uint32)1u << 29u) @@ -178,7 +178,7 @@ static STD_RETURN_TYPE_e CAN_PeriodicTransmit(void); * @param ticksSinceStart internal counter of a periodically called function * @param messageIndex index of the message to check in the tx message array * @return true if phase matches and message should be transmitted, false otherwise -*/ + */ static bool CAN_IsMessagePeriodElapsed(uint32_t ticksSinceStart, uint16_t messageIndex); @@ -281,22 +281,22 @@ static void CAN_ConfigureRxMailboxesForExtendedIdentifiers(void) { /* Reconfigure CAN1 mailboxes 42, 61, 62, 63 and 64 */ /** - Setup control register - * - Disable automatic wakeup on bus activity - * - Local power down mode disabled - * - Disable DMA request lines - * - Enable global Interrupt Line 0 and 1 - * - Disable debug mode - * - Release from software reset - * - Enable/Disable parity or ECC - * - Enable/Disable auto bus on timer - * - Setup message completion before entering debug state - * - Setup normal operation mode - * - Request write access to the configuration registers - * - Setup automatic retransmission of messages - * - Disable error interrupts - * - Disable status interrupts - * - Enter initialization mode - */ + * - Disable automatic wakeup on bus activity + * - Local power down mode disabled + * - Disable DMA request lines + * - Enable global Interrupt Line 0 and 1 + * - Disable debug mode + * - Release from software reset + * - Enable/Disable parity or ECC + * - Enable/Disable auto bus on timer + * - Setup message completion before entering debug state + * - Setup normal operation mode + * - Request write access to the configuration registers + * - Setup automatic retransmission of messages + * - Disable error interrupts + * - Disable status interrupts + * - Enter initialization mode + */ canREG1->CTL = (uint32)0x00000000U | (uint32)0x00000000U | (uint32)((uint32)0x0000000AU << 10U) | (uint32)0x00020043U; @@ -307,13 +307,13 @@ static void CAN_ConfigureRxMailboxesForExtendedIdentifiers(void) { canREG1->ABOTR = (uint32)0U; /** - Initialize message 42 - * - Wait until IF1 is ready for use - * - Set message mask - * - Set message control word - * - Set message arbitration - * - Set IF1 control byte - * - Set IF1 message number - */ + * - Wait until IF1 is ready for use + * - Set message mask + * - Set message control word + * - Set message arbitration + * - Set IF1 control byte + * - Set IF1 message number + */ /* SAFETYMCUSW 28 D MR:NA "Potentially infinite loop found - * Hardware Status check for execution sequence" */ while ((canREG1->IF1STAT & 0x80U) == 0x80U) { @@ -327,13 +327,13 @@ static void CAN_ConfigureRxMailboxesForExtendedIdentifiers(void) { canREG1->IF1NO = 42U; /** - Initialize message 61 - * - Wait until IF1 is ready for use - * - Set message mask - * - Set message control word - * - Set message arbitration - * - Set IF1 control byte - * - Set IF1 message number - */ + * - Wait until IF1 is ready for use + * - Set message mask + * - Set message control word + * - Set message arbitration + * - Set IF1 control byte + * - Set IF1 message number + */ /* SAFETYMCUSW 28 D MR:NA "Potentially infinite loop found - * Hardware Status check for execution sequence" */ while ((canREG1->IF1STAT & 0x80U) == 0x80U) { @@ -347,13 +347,13 @@ static void CAN_ConfigureRxMailboxesForExtendedIdentifiers(void) { canREG1->IF1NO = 61U; /** - Initialize message 62 - * - Wait until IF2 is ready for use - * - Set message mask - * - Set message control word - * - Set message arbitration - * - Set IF2 control byte - * - Set IF2 message number - */ + * - Wait until IF2 is ready for use + * - Set message mask + * - Set message control word + * - Set message arbitration + * - Set IF2 control byte + * - Set IF2 message number + */ /* SAFETYMCUSW 28 D MR:NA "Potentially infinite loop found - * Hardware Status check for execution sequence" */ while ((canREG1->IF2STAT & 0x80U) == 0x80U) { @@ -367,13 +367,13 @@ static void CAN_ConfigureRxMailboxesForExtendedIdentifiers(void) { canREG1->IF2NO = 62U; /** - Initialize message 63 - * - Wait until IF1 is ready for use - * - Set message mask - * - Set message control word - * - Set message arbitration - * - Set IF1 control byte - * - Set IF1 message number - */ + * - Wait until IF1 is ready for use + * - Set message mask + * - Set message control word + * - Set message arbitration + * - Set IF1 control byte + * - Set IF1 message number + */ /* SAFETYMCUSW 28 D MR:NA "Potentially infinite loop found - * Hardware Status check for execution sequence" */ while ((canREG1->IF1STAT & 0x80U) == 0x80U) { @@ -387,13 +387,13 @@ static void CAN_ConfigureRxMailboxesForExtendedIdentifiers(void) { canREG1->IF1NO = 63U; /** - Initialize message 64 - * - Wait until IF2 is ready for use - * - Set message mask - * - Set message control word - * - Set message arbitration - * - Set IF2 control byte - * - Set IF2 message number - */ + * - Wait until IF2 is ready for use + * - Set message mask + * - Set message control word + * - Set message arbitration + * - Set IF2 control byte + * - Set IF2 message number + */ /* SAFETYMCUSW 28 D MR:NA "Potentially infinite loop found - * Hardware Status check for execution sequence" */ while ((canREG1->IF2STAT & 0x80U) == 0x80U) { @@ -407,9 +407,9 @@ static void CAN_ConfigureRxMailboxesForExtendedIdentifiers(void) { canREG1->IF2NO = 64U; /** - Setup IF1 for data transmission - * - Wait until IF1 is ready for use - * - Set IF1 control byte - */ + * - Wait until IF1 is ready for use + * - Set IF1 control byte + */ /* SAFETYMCUSW 28 D MR:NA "Potentially infinite loop found - * Hardware Status check for execution sequence" */ while ((canREG1->IF1STAT & 0x80U) == 0x80U) { @@ -417,9 +417,9 @@ static void CAN_ConfigureRxMailboxesForExtendedIdentifiers(void) { canREG1->IF1CMD = 0x87U; /** - Setup IF2 for reading data - * - Wait until IF1 is ready for use - * - Set IF1 control byte - */ + * - Wait until IF1 is ready for use + * - Set IF1 control byte + */ /* SAFETYMCUSW 28 D MR:NA "Potentially infinite loop found - * Hardware Status check for execution sequence" */ while ((canREG1->IF2STAT & 0x80U) == 0x80U) { @@ -432,35 +432,35 @@ static void CAN_ConfigureRxMailboxesForExtendedIdentifiers(void) { /** Reconfigure CAN2 mailboxes 61 - 64 */ /** - Setup control register - * - Disable automatic wakeup on bus activity - * - Local power down mode disabled - * - Disable DMA request lines - * - Enable global Interrupt Line 0 and 1 - * - Disable debug mode - * - Release from software reset - * - Enable/Disable parity or ECC - * - Enable/Disable auto bus on timer - * - Setup message completion before entering debug state - * - Setup normal operation mode - * - Request write access to the configuration registers - * - Setup automatic retransmission of messages - * - Disable error interrupts - * - Disable status interrupts - * - Enter initialization mode - */ + * - Disable automatic wakeup on bus activity + * - Local power down mode disabled + * - Disable DMA request lines + * - Enable global Interrupt Line 0 and 1 + * - Disable debug mode + * - Release from software reset + * - Enable/Disable parity or ECC + * - Enable/Disable auto bus on timer + * - Setup message completion before entering debug state + * - Setup normal operation mode + * - Request write access to the configuration registers + * - Setup automatic retransmission of messages + * - Disable error interrupts + * - Disable status interrupts + * - Enter initialization mode + */ canREG2->CTL = (uint32)0x00000000U | (uint32)0x00000000U | (uint32)((uint32)0x0000000AU << 10U) | 0x00020043U; /** - Clear all pending error flags and reset current status */ canREG2->ES |= 0xFFFFFFFFU; /** - Initialize message 61 - * - Wait until IF1 is ready for use - * - Set message mask - * - Set message control word - * - Set message arbitration - * - Set IF1 control byte - * - Set IF1 message number - */ + * - Wait until IF1 is ready for use + * - Set message mask + * - Set message control word + * - Set message arbitration + * - Set IF1 control byte + * - Set IF1 message number + */ /* SAFETYMCUSW 28 D MR:NA "Potentially infinite loop found - * Hardware Status check for execution sequence" */ while ((canREG2->IF1STAT & 0x80U) == 0x80U) { @@ -474,13 +474,13 @@ static void CAN_ConfigureRxMailboxesForExtendedIdentifiers(void) { canREG2->IF1NO = 61U; /** - Initialize message 62 - * - Wait until IF2 is ready for use - * - Set message mask - * - Set message control word - * - Set message arbitration - * - Set IF2 control byte - * - Set IF2 message number - */ + * - Wait until IF2 is ready for use + * - Set message mask + * - Set message control word + * - Set message arbitration + * - Set IF2 control byte + * - Set IF2 message number + */ /* SAFETYMCUSW 28 D MR:NA "Potentially infinite loop found - * Hardware Status check for execution sequence" */ while ((canREG2->IF2STAT & 0x80U) == 0x80U) { @@ -494,13 +494,13 @@ static void CAN_ConfigureRxMailboxesForExtendedIdentifiers(void) { canREG2->IF2NO = 62U; /** - Initialize message 63 - * - Wait until IF1 is ready for use - * - Set message mask - * - Set message control word - * - Set message arbitration - * - Set IF1 control byte - * - Set IF1 message number - */ + * - Wait until IF1 is ready for use + * - Set message mask + * - Set message control word + * - Set message arbitration + * - Set IF1 control byte + * - Set IF1 message number + */ /* SAFETYMCUSW 28 D MR:NA "Potentially infinite loop found - * Hardware Status check for execution sequence" */ while ((canREG2->IF1STAT & 0x80U) == 0x80U) { @@ -514,13 +514,13 @@ static void CAN_ConfigureRxMailboxesForExtendedIdentifiers(void) { canREG2->IF1NO = 63U; /** - Initialize message 64 - * - Wait until IF2 is ready for use - * - Set message mask - * - Set message control word - * - Set message arbitration - * - Set IF2 control byte - * - Set IF2 message number - */ + * - Wait until IF2 is ready for use + * - Set message mask + * - Set message control word + * - Set message arbitration + * - Set IF2 control byte + * - Set IF2 message number + */ /* SAFETYMCUSW 28 D MR:NA "Potentially infinite loop found - * Hardware Status check for execution sequence" */ while ((canREG2->IF2STAT & 0x80U) == 0x80U) { @@ -534,9 +534,9 @@ static void CAN_ConfigureRxMailboxesForExtendedIdentifiers(void) { canREG2->IF2NO = 64U; /** - Setup IF1 for data transmission - * - Wait until IF1 is ready for use - * - Set IF1 control byte - */ + * - Wait until IF1 is ready for use + * - Set IF1 control byte + */ /* SAFETYMCUSW 28 D MR:NA "Potentially infinite loop found - * Hardware Status check for execution sequence" */ while ((canREG2->IF1STAT & 0x80U) == 0x80U) { @@ -544,9 +544,9 @@ static void CAN_ConfigureRxMailboxesForExtendedIdentifiers(void) { canREG2->IF1CMD = 0x87U; /** - Setup IF2 for reading data - * - Wait until IF1 is ready for use - * - Set IF1 control byte - */ + * - Wait until IF1 is ready for use + * - Set IF1 control byte + */ /* SAFETYMCUSW 28 D MR:NA "Potentially infinite loop found - * Hardware Status check for execution sequence" */ while ((canREG2->IF2STAT & 0x80U) == 0x80U) { @@ -784,11 +784,10 @@ static bool CAN_IsMessagePeriodElapsed(uint32_t ticksSinceStart, uint16_t messag } static void CAN_CheckCanTiming(void) { - uint32_t currentTime; + uint32_t currentTime = OS_GetTickCount(); DATA_BLOCK_ERROR_STATE_s errorFlagsTab = {.header.uniqueId = DATA_BLOCK_ID_ERROR_STATE}; DATA_BLOCK_STATE_REQUEST_s stateRequestTab = {.header.uniqueId = DATA_BLOCK_ID_STATE_REQUEST}; - currentTime = OS_GetTickCount(); DATA_READ_DATA(&stateRequestTab, &errorFlagsTab); /* Is the BMS still getting CAN messages? */ @@ -1030,7 +1029,8 @@ extern bool CAN_IsCurrentSensorEcPresent(uint8_t stringNumber) { /* 'extern' is omitted here (as opposed to how the foxBMS project declares and defines functions) as the TI HAL convention does omit the keyword here and we want to stay consistent with TI's declaration.) */ -/* AXIVION Next Codeline Style Linker-Multiple_Definition: TI HAL only provides a weak implementation */ +/* AXIVION Next Codeline Style Linker-Multiple_Definition Linker-General_ODR_Violation: TI HAL only provides a weak + * implementation */ void UNIT_TEST_WEAK_IMPL canMessageNotification(canBASE_t *node, uint32 messageBox) { /* AXIVION Routine Generic-MissingParameterAssert: node: unchecked in interrupt */ /* AXIVION Routine Generic-MissingParameterAssert: messageBox: unchecked in interrupt */ diff --git a/src/app/driver/can/can.h b/src/app/driver/can/can.h index bf06236d..905f45a0 100644 --- a/src/app/driver/can/can.h +++ b/src/app/driver/can/can.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,16 +43,14 @@ * @file can.h * @author foxBMS Team * @date 2019-12-04 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix CAN * * @brief Header for the driver for the CAN module - * * @details Provides the interfaces for initialization, receive - * and transmit handling - * + * and transmit handling. */ #ifndef FOXBMS__CAN_H_ @@ -104,7 +102,7 @@ extern STD_RETURN_TYPE_e CAN_DataSend(CAN_NODE_s *pNode, uint32_t id, CAN_IDENTI /** * @brief Reads messages from TX Queue and sends them via CAN. -*/ + */ extern void CAN_SendMessagesFromQueue(void); /** diff --git a/src/app/driver/can/cbs/can_helper.c b/src/app/driver/can/cbs/can_helper.c index f89cee63..978d28e3 100644 --- a/src/app/driver/can/cbs/can_helper.c +++ b/src/app/driver/can/cbs/can_helper.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file can_helper.c * @author foxBMS Team * @date 2021-04-22 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix CAN * @@ -57,7 +57,6 @@ #include "can_helper.h" #include "database.h" -#include "foxmath.h" #include #include @@ -74,7 +73,7 @@ /*========== Static Constant and Variable Definitions =======================*/ -/** To convert big endian startbit to usual little endian representation (from 0 as LSB to 63 as MSB) */ +/** To convert big endian start bit to usual little endian representation (from 0 as LSB to 63 as MSB) */ static const uint8_t can_bigEndianTable[CAN_SIGNAL_MAX_SIZE] = { 56u, 57u, 58u, 59u, 60u, 61u, 62u, 63u, 48u, 49u, 50u, 51u, 52u, 53u, 54u, 55u, 40u, 41u, 42u, 43u, 44u, 45u, 46u, 47u, 32u, 33u, 34u, 35u, 36u, 37u, 38u, 39u, 24u, 25u, 26u, 27u, 28u, 29u, 30u, 31u, 16u, 17u, 18u, 19u, @@ -176,12 +175,15 @@ extern void CAN_TxSetMessageDataWithSignalData( uint8_t bitLength, uint64_t canSignal, CAN_ENDIANNESS_e endianness) { + /* AXIVION Routine Generic-MissingParameterAssert: canSignal: parameter accepts whole range */ FAS_ASSERT(pMessage != NULL_PTR); FAS_ASSERT((endianness == CAN_BIG_ENDIAN) || (endianness == CAN_LITTLE_ENDIAN)); /* The longest message may be CAN_SIGNAL_MAX_SIZE long */ FAS_ASSERT(bitLength <= CAN_SIGNAL_MAX_SIZE); /* A signal must contain at least one bit */ FAS_ASSERT(bitLength > 0u); + /* Signal start can not be outside of message data */ + FAS_ASSERT(bitStart < CAN_SIGNAL_MAX_SIZE); uint64_t position = bitStart; @@ -210,7 +212,9 @@ extern void CAN_TxSetMessageDataWithSignalData( } extern void CAN_TxSetCanDataWithMessageData(uint64_t message, uint8_t *pCanData, CAN_ENDIANNESS_e endianness) { + /* AXIVION Routine Generic-MissingParameterAssert: message: parameter accepts whole range */ FAS_ASSERT(pCanData != NULL_PTR); + /* Swap byte order if necessary */ if (endianness == CAN_BIG_ENDIAN) { pCanData[CAN_BYTE_0_POSITION] = @@ -258,6 +262,7 @@ extern void CAN_RxGetSignalDataFromMessageData( uint8_t bitLength, uint64_t *pCanSignal, CAN_ENDIANNESS_e endianness) { + /* AXIVION Routine Generic-MissingParameterAssert: message: parameter accepts whole range */ FAS_ASSERT(pCanSignal != NULL_PTR); FAS_ASSERT((endianness == CAN_BIG_ENDIAN) || (endianness == CAN_LITTLE_ENDIAN)); /* The longest message may be CAN_SIGNAL_MAX_SIZE long */ diff --git a/src/app/driver/can/cbs/can_helper.h b/src/app/driver/can/cbs/can_helper.h index 1435cbe8..a743877e 100644 --- a/src/app/driver/can/cbs/can_helper.h +++ b/src/app/driver/can/cbs/can_helper.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file can_helper.h * @author foxBMS Team * @date 2021-04-22 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix CAN * @@ -57,10 +57,10 @@ #define FOXBMS__CAN_HELPER_H_ /*========== Includes =======================================================*/ - #include "can_cfg.h" #include +#include #include /*========== Macros and Definitions =========================================*/ diff --git a/src/app/driver/can/cbs/rx/can_cbs_rx.h b/src/app/driver/can/cbs/rx/can_cbs_rx.h index 5fcd8d43..ead5d6a7 100644 --- a/src/app/driver/can/cbs/rx/can_cbs_rx.h +++ b/src/app/driver/can/cbs/rx/can_cbs_rx.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file can_cbs_rx.h * @author foxBMS Team * @date 2021-04-20 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup DRIVER + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS * @prefix CANRX * * @brief CAN callbacks header - * + * @details TODO */ #ifndef FOXBMS__CAN_CBS_RX_H_ @@ -69,7 +69,7 @@ /** RX callback functions @{ */ /** - * @brief can rx callback function for IMD info messages + * @brief CAN Rx callback function for IMD info messages * @param[in] message contains the message ID, DLC and endianness * @param[in] kpkCanData payload of can frame * @param[in] kpkCanShim shim to the database entries @@ -80,7 +80,7 @@ extern uint32_t CANRX_ImdInfo( const CAN_SHIM_s *const kpkCanShim); /** - * @brief can rx callback function for IMD response messages + * @brief CAN Rx callback function for IMD response messages * @param[in] message contains the message ID, DLC and endianness * @param[in] kpkCanData payload of can frame * @param[in] kpkCanShim shim to the database entries @@ -91,7 +91,7 @@ extern uint32_t CANRX_ImdResponse( const CAN_SHIM_s *const kpkCanShim); /** - * @brief can rx callback function for state requests + * @brief CAN Rx callback function for state requests * @param[in] message contains the message ID, DLC and endianness * @param[in] kpkCanData payload of can frame * @param[in] kpkCanShim shim to the database entries @@ -102,7 +102,7 @@ extern uint32_t CANRX_BmsStateRequest( const CAN_SHIM_s *const kpkCanShim); /** - * @brief can rx callback function for current sensor measurements + * @brief CAN Rx callback function for current sensor measurements * @param[in] message contains the message ID, DLC and endianness * @param[in] kpkCanData payload of can frame * @param[in] kpkCanShim shim to the database entries @@ -113,7 +113,7 @@ extern uint32_t CANRX_CurrentSensor( const CAN_SHIM_s *const kpkCanShim); /** - * @brief can rx callback function for debug messages + * @brief CAN Rx callback function for debug messages * @param[in] message contains the message ID, DLC and endianness * @param[in] kpkCanData payload of can frame * @param[in] kpkCanShim shim to the database entries @@ -124,7 +124,7 @@ extern uint32_t CANRX_Debug( const CAN_SHIM_s *const kpkCanShim); /** - * @brief can rx callback function for aerosol sensor messages + * @brief CAN Rx callback function for aerosol sensor messages * @param[in] message contains the message ID, DLC and endianness * @param[in] kpkCanData payload of can frame * @param[in] kpkCanShim shim to the database entries @@ -133,10 +133,53 @@ extern uint32_t CANRX_AerosolSensor( CAN_MESSAGE_PROPERTIES_s message, const uint8_t *const kpkCanData, const CAN_SHIM_s *const kpkCanShim); + +/** + * @brief CAN Rx callback function to handle cell-temperatures message + * @param[in] message contains the message ID, DLC and endianness + * @param[in] kpkCanData payload of can frame + * @param[in] kpkCanShim shim to the database entries + */ +extern uint32_t CANRX_CellTemperatures( + CAN_MESSAGE_PROPERTIES_s message, + const uint8_t *const kpkCanData, + const CAN_SHIM_s *const kpkCanShim); + +/** + * @brief CAN Rx callback function to handle cell-voltages message + * @param[in] message contains the message ID, DLC and endianness + * @param[in] kpkCanData payload of can frame + * @param[in] kpkCanShim shim to the database entries + */ +extern uint32_t CANRX_CellVoltages( + CAN_MESSAGE_PROPERTIES_s message, + const uint8_t *const kpkCanData, + const CAN_SHIM_s *const kpkCanShim); /**@}*/ /*========== Externalized Static Functions Prototypes (Unit Test) ===========*/ #ifdef UNITY_UNIT_TEST +/* externalized functions from src/app/driver/can/cbs/rx/can_cbs_rx_current-sensor.c */ +extern void TEST_CANRX_HandleChannelError(const CAN_SHIM_s *const kpkCanShim, uint32_t messageId, uint8_t stringNumber); +extern void TEST_CANRX_ResetError(const CAN_SHIM_s *const kpkCanShim, uint8_t stringNumber); +extern void TEST_CANRX_HandleMeasurementError(const CAN_SHIM_s *const kpkCanShim, uint8_t stringNumber); +extern void TEST_CANRX_HandleSystemError(const CAN_SHIM_s *const kpkCanShim, uint8_t stringNumber); +extern void TEST_CANRX_HandleSensorData( + const CAN_SHIM_s *const kpkCanShim, + uint32_t messageId, + uint8_t stringNumber, + int32_t signalData); +extern void TEST_CANRX_SetCurrent(const CAN_SHIM_s *const kpkCanShim, uint8_t stringNumber, int32_t signalData); +extern void TEST_CANRX_SetVoltageU1(const CAN_SHIM_s *const kpkCanShim, uint8_t stringNumber, int32_t signalData); +extern void TEST_CANRX_SetVoltageU2(const CAN_SHIM_s *const kpkCanShim, uint8_t stringNumber, int32_t signalData); +extern void TEST_CANRX_SetVoltageU3(const CAN_SHIM_s *const kpkCanShim, uint8_t stringNumber, int32_t signalData); +extern void TEST_CANRX_SetTemperature(const CAN_SHIM_s *const kpkCanShim, uint8_t stringNumber, int32_t signalData); +extern void TEST_CANRX_SetPower(const CAN_SHIM_s *const kpkCanShim, uint8_t stringNumber, int32_t signalData); +extern void TEST_CANRX_SetCoulombCounting(const CAN_SHIM_s *const kpkCanShim, uint8_t stringNumber, int32_t signalData); +extern void TEST_CANRX_SetEnergyCounting(const CAN_SHIM_s *const kpkCanShim, uint8_t stringNumber, int32_t signalData); +extern uint8_t TEST_CANRX_SetStringNumberBasedOnCanMessageId(uint32_t messageId); + +/* externalized functions from src/app/driver/can/cbs/rx/can_cbs_rx_debug.c */ extern uint8_t TEST_CANRX_GetHundredthOfSeconds(uint64_t messageData, CAN_ENDIANNESS_e endianness); extern uint8_t TEST_CANRX_GetSeconds(uint64_t messageData, CAN_ENDIANNESS_e endianness); extern uint8_t TEST_CANRX_GetMinutes(uint64_t messageData, CAN_ENDIANNESS_e endianness); @@ -152,6 +195,7 @@ extern void TEST_CANRX_TriggerMcuLotNumberMessage(void); extern void TEST_CANRX_TriggerMcuWaferInformationMessage(void); extern void TEST_CANRX_TriggerTimeInfoMessage(void); extern void TEST_CANRX_TriggerCommitHashMessage(void); +extern void TEST_CANRX_TriggerBuildConfigurationMessage(void); extern bool TEST_CANRX_CheckIfBmsSoftwareVersionIsRequested(uint64_t messageData, CAN_ENDIANNESS_e endianness); extern bool TEST_CANRX_CheckIfMcuUniqueDieIdIsRequested(uint64_t messageData, CAN_ENDIANNESS_e endianness); @@ -161,6 +205,7 @@ extern bool TEST_CANRX_CheckIfSoftwareResetIsRequested(uint64_t messageData, CAN extern bool TEST_CANRX_CheckIfFramInitializationIsRequested(uint64_t messageData, CAN_ENDIANNESS_e endianness); extern bool TEST_CANRX_CheckIfTimeInfoIsRequested(uint64_t messageData, CAN_ENDIANNESS_e endianness); extern bool TEST_CANRX_CheckIfCommitHashIsRequested(uint64_t messageData, CAN_ENDIANNESS_e endianness); +extern bool TEST_CANRX_CheckIfBuildConfigurationIsRequested(uint64_t messageData, CAN_ENDIANNESS_e endianness); extern void TEST_CANRX_ProcessVersionInformationMux(uint64_t messageData, CAN_ENDIANNESS_e endianness); extern void TEST_CANRX_ProcessRtcMux(uint64_t messageData, CAN_ENDIANNESS_e endianness); @@ -172,6 +217,21 @@ extern void TEST_CANRX_HandleAerosolSensorErrors(const CAN_SHIM_s *const kpkCanS extern void TEST_CANRX_HandleAerosolSensorStatus(const CAN_SHIM_s *const kpkCanShim, uint16_t signalData); extern void TEST_CANRX_SetParticulateMatterConcentration(const CAN_SHIM_s *const kpkCanShim, uint16_t signalData); extern void TEST_CANRX_SetAerosolSensorCrcCheckCode(const CAN_SHIM_s *const kpkCanShim, uint16_t signalData); + +/* externalized functions from src/app/driver/can/cbs/rx/can_cbs_rx_bms-state-request.c */ +extern void TEST_CANRX_ClearAllPersistentFlags(uint64_t messageData); +extern void TEST_CANRX_HandleModeRequest(uint64_t messageData, const CAN_SHIM_s *const kpkCanShim); +extern void TEST_CANRX_HandleBalancingRequest(uint64_t messageData); +extern void TEST_CANRX_SetBalancingThreshold(uint64_t messageData); + +/* externalized functions from src/app/driver/can/cbs/rx/can_cbs_rx_cell-temperatures.c */ +extern void TEST_CANRX_GetCanAfeCellTemperaturesFromMessage( + CAN_CAN2AFE_CELL_TEMPERATURES_QUEUE_s *pCellTemperatures, + uint64_t messageData); +/* externalized functions from src/app/driver/can/cbs/rx/can_cbs_rx_cell-voltages.c */ +extern void TEST_CANRX_GetCanAfeCellVoltagesFromMessage( + CAN_CAN2AFE_CELL_VOLTAGES_QUEUE_s *pCellVoltages, + uint64_t messageData); #endif #endif /* FOXBMS__CAN_CBS_RX_H_ */ diff --git a/src/app/driver/can/cbs/rx/can_cbs_rx_aerosol-sensor.c b/src/app/driver/can/cbs/rx/can_cbs_rx_aerosol-sensor.c index 27770b3a..daca9e71 100644 --- a/src/app/driver/can/cbs/rx/can_cbs_rx_aerosol-sensor.c +++ b/src/app/driver/can/cbs/rx/can_cbs_rx_aerosol-sensor.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,9 +43,9 @@ * @file can_cbs_rx_aerosol-sensor.c * @author foxBMS Team * @date 2023-08-29 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup DRIVER + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS * @prefix CANRX * * @brief CAN driver Rx callback implementation @@ -53,6 +53,8 @@ */ /*========== Includes =======================================================*/ +/* AXIVION Next Codeline Generic-LocalInclude: 'can_cbs_rx.h' declares the + * prototype for the callback 'CANRX_AerosolSensor' */ #include "can_cbs_rx.h" #include "can_cfg_rx-message-definitions.h" #include "can_helper.h" @@ -88,28 +90,28 @@ /*========== Static Function Prototypes =====================================*/ /** * @brief Sets error flags in database as received from can message - * @param kpkCanShim const pointer to can shim + * @param kpkCanShim const pointer to CAN shim * @param signalData data from can message that covers errors */ static void CANRX_HandleAerosolSensorErrors(const CAN_SHIM_s *const kpkCanShim, uint16_t signalData); /** * @brief Sets sensor status in database - * @param kpkCanShim const pointer to can shim + * @param kpkCanShim const pointer to CAN shim * @param signalData data from can message that covers status */ static void CANRX_HandleAerosolSensorStatus(const CAN_SHIM_s *const kpkCanShim, uint16_t signalData); /** * @brief Sets current particulate matter measurement value in database - * @param kpkCanShim const pointer to can shim + * @param kpkCanShim const pointer to CAN shim * @param signalData data from can message that covers particulate matter measurement */ static void CANRX_SetParticulateMatterConcentration(const CAN_SHIM_s *const kpkCanShim, uint16_t signalData); /** * @brief Sets CRC check code from sensor in database - * @param kpkCanShim const pointer to can shim + * @param kpkCanShim const pointer to CAN shim * @param signalData data from can message that covers crc check code */ static void CANRX_SetAerosolSensorCrcCheckCode(const CAN_SHIM_s *const kpkCanShim, uint16_t signalData); @@ -162,14 +164,14 @@ static void CANRX_HandleAerosolSensorStatus(const CAN_SHIM_s *const kpkCanShim, static void CANRX_SetParticulateMatterConcentration(const CAN_SHIM_s *const kpkCanShim, uint16_t signalData) { FAS_ASSERT(kpkCanShim != NULL_PTR); - /* AXIVION Routine Generic-MissingParameterAssert: signalData: parameter accept whole range */ + /* AXIVION Routine Generic-MissingParameterAssert: signalData: parameter accepts whole range */ /* set particulate matter concentration in database */ kpkCanShim->pTableAerosolSensor->particulateMatterConcentration = signalData; } static void CANRX_SetAerosolSensorCrcCheckCode(const CAN_SHIM_s *const kpkCanShim, uint16_t signalData) { FAS_ASSERT(kpkCanShim != NULL_PTR); - /* AXIVION Routine Generic-MissingParameterAssert: signalData: parameter accept whole range */ + /* AXIVION Routine Generic-MissingParameterAssert: signalData: parameter accepts whole range */ /* set CRC check code in database */ uint8_t data = (uint8_t)signalData; kpkCanShim->pTableAerosolSensor->crcCheckCode = data; @@ -180,8 +182,8 @@ extern uint32_t CANRX_AerosolSensor( CAN_MESSAGE_PROPERTIES_s message, const uint8_t *const kpkCanData, const CAN_SHIM_s *const kpkCanShim) { - FAS_ASSERT(message.id == CANRX_AEROSOL_SENSOR_ID); - FAS_ASSERT(message.idType == CANRX_AEROSOL_SENSOR_ID_TYPE); + FAS_ASSERT(message.id == CANRX_BAS_AEROSOL_SENSOR_ID); + FAS_ASSERT(message.idType == CANRX_BAS_AEROSOL_SENSOR_ID_TYPE); FAS_ASSERT(message.dlc == CAN_DEFAULT_DLC); FAS_ASSERT(kpkCanData != NULL_PTR); FAS_ASSERT(kpkCanShim != NULL_PTR); @@ -232,7 +234,7 @@ extern uint32_t CANRX_AerosolSensor( CANRX_SetAerosolSensorCrcCheckCode(kpkCanShim, signalData); DATA_WRITE_DATA(kpkCanShim->pTableAerosolSensor); - return 0; + return 0u; } /*========== Externalized Static Function Implementations (Unit Test) =======*/ diff --git a/src/app/driver/can/cbs/rx/can_cbs_rx_bms-state-request.c b/src/app/driver/can/cbs/rx/can_cbs_rx_bms-state-request.c index 289092da..5a6565cf 100644 --- a/src/app/driver/can/cbs/rx/can_cbs_rx_bms-state-request.c +++ b/src/app/driver/can/cbs/rx/can_cbs_rx_bms-state-request.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,9 +43,9 @@ * @file can_cbs_rx_bms-state-request.c * @author foxBMS Team * @date 2021-07-28 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup DRIVER + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS * @prefix CANRX * * @brief CAN driver Rx callback implementation @@ -56,6 +56,8 @@ #include "bms_cfg.h" #include "bal.h" +/* AXIVION Next Codeline Generic-LocalInclude: 'can_cbs_rx.h' declares the + * prototype for the callback 'CANRX_BmsStateRequest' */ #include "can_cbs_rx.h" #include "can_cfg_rx-message-definitions.h" #include "can_helper.h" @@ -73,10 +75,29 @@ * following conditions is met: * * - The new request is different than the old request. - * - The old request is older than the timespan set in this define. + * - The old request is older than the time span set in this define. */ #define CANRX_CAN_REQUEST_UPDATE_TIME_ms (3000u) +/** @{ + * defines for the state request signal data + */ +#define CANRX_STATE_REQUEST_DISABLE_INSULATION_MONITORING_START_BIT (5u) +#define CANRX_STATE_REQUEST_DISABLE_INSULATION_MONITORING_LENGTH (CAN_BIT) +#define CANRX_STATE_REQUEST_CHARGER_CONNECTED_START_BIT (4u) +#define CANRX_STATE_REQUEST_CHARGER_CONNECTED_LENGTH (CAN_BIT) +#define CANRX_STATE_REQUEST_INDICATE_PRECHARGE_TYPE_START_BIT (3u) +#define CANRX_STATE_REQUEST_INDICATE_PRECHARGE_TYPE_LENGTH (CAN_BIT) +#define CANRX_STATE_REQUEST_RESET_PERSISTENT_FLAGS_START_BIT (2u) +#define CANRX_STATE_REQUEST_RESET_PERSISTENT_FLAGS_LENGTH (CAN_BIT) +#define CANRX_STATE_REQUEST_REQUEST_BMS_MODE_START_BIT (1u) +#define CANRX_STATE_REQUEST_REQUEST_BMS_MODE_LENGTH (2u) +#define CANRX_STATE_REQUEST_ACTIVATE_BALANCING_START_BIT (8u) +#define CANRX_STATE_REQUEST_ACTIVATE_BALANCING_LENGTH (CAN_BIT) +#define CANRX_STATE_REQUEST_SET_BALANCING_THRESHOLD_START_BIT (23u) +#define CANRX_STATE_REQUEST_SET_BALANCING_THRESHOLD_LENGTH (8u) +/** @} */ + /*========== Static Constant and Variable Definitions =======================*/ /*========== Extern Constant and Variable Definitions =======================*/ @@ -84,36 +105,44 @@ /*========== Static Function Prototypes =====================================*/ /** * @brief clears the persistent flags - * @details This function clears all persistent flags (if signalData demands it) + * @details This function clears all persistent flags (if messageData demands it) * which are: * - deep-discharge flag * - sys mon violation flags - * @param[in] signalData if it is 1u, flags are cleared + * @param[in] messageData contents of the bms state request message */ -static void CANRX_ClearAllPersistentFlags(uint64_t signalData); +static void CANRX_ClearAllPersistentFlags(uint64_t messageData); /** * @brief handles the mode request - * @param[in] signalData extracted signal data - * @param[in,out] kpkCanShim can shim with database entries + * @param[in] messageData contents of the bms state request message + * @param[in,out] kpkCanShim can shim with database entries */ -static void CANRX_HandleModeRequest(uint64_t signalData, const CAN_SHIM_s *const kpkCanShim); +static void CANRX_HandleModeRequest(uint64_t messageData, const CAN_SHIM_s *const kpkCanShim); /** * @brief handles the balancing request - * @param[in] signalData extracted signal data + * @param[in] messageData contents of the bms state request message */ -static void CANRX_HandleBalancingRequest(uint64_t signalData); +static void CANRX_HandleBalancingRequest(uint64_t messageData); /** * @brief sets the balancing threshold - * @param[in] signalData extracted signal data + * @param[in] messageData contents of the bms state request message */ -static void CANRX_SetBalancingThreshold(uint64_t signalData); +static void CANRX_SetBalancingThreshold(uint64_t messageData); /*========== Static Function Implementations ================================*/ -static void CANRX_ClearAllPersistentFlags(uint64_t signalData) { - /* AXIVION Routine Generic-MissingParameterAssert: signalData: parameter accepts whole range */ +static void CANRX_ClearAllPersistentFlags(uint64_t messageData) { + /* AXIVION Routine Generic-MissingParameterAssert: messageData: parameter accepts whole range */ + uint64_t signalData = 0u; + CAN_RxGetSignalDataFromMessageData( + messageData, + CANRX_STATE_REQUEST_RESET_PERSISTENT_FLAGS_START_BIT, + CANRX_STATE_REQUEST_RESET_PERSISTENT_FLAGS_LENGTH, + &signalData, + CANRX_BMS_STATE_REQUEST_ENDIANNESS); + if (signalData == 1u) { /* clear deep discharge */ for (uint8_t s = 0u; s < BS_NR_OF_STRINGS; s++) { @@ -124,9 +153,16 @@ static void CANRX_ClearAllPersistentFlags(uint64_t signalData) { } } -static void CANRX_HandleModeRequest(uint64_t signalData, const CAN_SHIM_s *const kpkCanShim) { +static void CANRX_HandleModeRequest(uint64_t messageData, const CAN_SHIM_s *const kpkCanShim) { FAS_ASSERT(kpkCanShim != NULL_PTR); - /* AXIVION Routine Generic-MissingParameterAssert: signalData: parameter accepts whole range */ + /* AXIVION Routine Generic-MissingParameterAssert: messageData: parameter accepts whole range */ + uint64_t signalData = 0u; + CAN_RxGetSignalDataFromMessageData( + messageData, + CANRX_STATE_REQUEST_REQUEST_BMS_MODE_START_BIT, + CANRX_STATE_REQUEST_REQUEST_BMS_MODE_LENGTH, + &signalData, + CANRX_BMS_STATE_REQUEST_ENDIANNESS); /** 0x00: Disconnect strings from HV bus * 0x01: Connect strings to HV bus to start discharge @@ -163,9 +199,18 @@ static void CANRX_HandleModeRequest(uint64_t signalData, const CAN_SHIM_s *const } } -static void CANRX_HandleBalancingRequest(uint64_t signalData) { - /* AXIVION Routine Generic-MissingParameterAssert: signalData: parameter accepts whole range */ - /* AXIVION Next Codeline Style MisraC2012-2.2 MisraC2012-14.3: Depending on implementation STD_NOT_OK might be returned. */ +static void CANRX_HandleBalancingRequest(uint64_t messageData) { + /* AXIVION Routine Generic-MissingParameterAssert: messageData: parameter accepts whole range */ + uint64_t signalData = 0u; + CAN_RxGetSignalDataFromMessageData( + messageData, + CANRX_STATE_REQUEST_ACTIVATE_BALANCING_START_BIT, + CANRX_STATE_REQUEST_ACTIVATE_BALANCING_LENGTH, + &signalData, + CANRX_BMS_STATE_REQUEST_ENDIANNESS); + + /* AXIVION Next Codeline Style MisraC2012-2.2 MisraC2012-14.3: Depending on implementation STD_NOT_OK might be + * returned. */ if (BAL_GetInitializationState() == STD_OK) { if (signalData == 0u) { BAL_SetStateRequest(BAL_STATE_GLOBAL_DISABLE_REQUEST); @@ -175,7 +220,16 @@ static void CANRX_HandleBalancingRequest(uint64_t signalData) { } } -static void CANRX_SetBalancingThreshold(uint64_t signalData) { +static void CANRX_SetBalancingThreshold(uint64_t messageData) { + /* AXIVION Routine Generic-MissingParameterAssert: messageData: parameter accepts whole range */ + uint64_t signalData = 0u; + CAN_RxGetSignalDataFromMessageData( + messageData, + CANRX_STATE_REQUEST_SET_BALANCING_THRESHOLD_START_BIT, + CANRX_STATE_REQUEST_SET_BALANCING_THRESHOLD_LENGTH, + &signalData, + CANRX_BMS_STATE_REQUEST_ENDIANNESS); + /* cap signal data to UINT16_MAX */ int32_t cappedSignalData = (int32_t)signalData; if (signalData > (uint64_t)UINT16_MAX) { @@ -192,42 +246,45 @@ extern uint32_t CANRX_BmsStateRequest( FAS_ASSERT(message.id == CANRX_BMS_STATE_REQUEST_ID); FAS_ASSERT(message.idType == CANRX_BMS_STATE_REQUEST_ID_TYPE); FAS_ASSERT(message.dlc == CAN_FOXBMS_MESSAGES_DEFAULT_DLC); + FAS_ASSERT(message.endianness == CANRX_BMS_STATE_REQUEST_ENDIANNESS); FAS_ASSERT(kpkCanData != NULL_PTR); FAS_ASSERT(kpkCanShim != NULL_PTR); - DATA_READ_DATA(kpkCanShim->pTableStateRequest); uint64_t messageData = 0u; - CAN_RxGetMessageDataFromCanData(&messageData, kpkCanData, message.endianness); + CAN_RxGetMessageDataFromCanData(&messageData, kpkCanData, CANRX_BMS_STATE_REQUEST_ENDIANNESS); - uint64_t signalData = 0; /* Get mode request */ - /* AXIVION Next Codeline Style Generic-NoMagicNumbers: Signal data defined in .dbc file. */ - CAN_RxGetSignalDataFromMessageData(messageData, 1u, 2u, &signalData, message.endianness); - CANRX_HandleModeRequest(signalData, kpkCanShim); + CANRX_HandleModeRequest(messageData, kpkCanShim); /* check for reset flag */ - /* AXIVION Next Codeline Style Generic-NoMagicNumbers: Signal data defined in .dbc file. */ - CAN_RxGetSignalDataFromMessageData(messageData, 2u, 1u, &signalData, message.endianness); - CANRX_ClearAllPersistentFlags(signalData); + CANRX_ClearAllPersistentFlags(messageData); /* Get balancing request */ - /* AXIVION Next Codeline Style Generic-NoMagicNumbers: Signal data defined in .dbc file. */ - CAN_RxGetSignalDataFromMessageData(messageData, 8u, 1u, &signalData, message.endianness); - CANRX_HandleBalancingRequest(signalData); + CANRX_HandleBalancingRequest(messageData); /* Get balancing threshold */ - /* AXIVION Next Codeline Style Generic-NoMagicNumbers: Signal data defined in .dbc file. */ - CAN_RxGetSignalDataFromMessageData(messageData, 23u, 8u, &signalData, message.endianness); - CANRX_SetBalancingThreshold(signalData); + CANRX_SetBalancingThreshold(messageData); /* TODO: Implement missing signals */ DATA_WRITE_DATA(kpkCanShim->pTableStateRequest); - return 0; + return 0u; } /*========== Externalized Static Function Implementations (Unit Test) =======*/ #ifdef UNITY_UNIT_TEST +extern void TEST_CANRX_ClearAllPersistentFlags(uint64_t messageData) { + CANRX_ClearAllPersistentFlags(messageData); +} +extern void TEST_CANRX_HandleModeRequest(uint64_t messageData, const CAN_SHIM_s *const kpkCanShim) { + CANRX_HandleModeRequest(messageData, kpkCanShim); +} +extern void TEST_CANRX_HandleBalancingRequest(uint64_t messageData) { + CANRX_HandleBalancingRequest(messageData); +} +extern void TEST_CANRX_SetBalancingThreshold(uint64_t messageData) { + CANRX_SetBalancingThreshold(messageData); +} #endif diff --git a/src/app/driver/can/cbs/rx/can_cbs_rx_cell-temperatures.c b/src/app/driver/can/cbs/rx/can_cbs_rx_cell-temperatures.c new file mode 100644 index 00000000..56d8abb8 --- /dev/null +++ b/src/app/driver/can/cbs/rx/can_cbs_rx_cell-temperatures.c @@ -0,0 +1,184 @@ +/** + * + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * We kindly request you to use one or more of the following phrases to refer to + * foxBMS in your hardware, software, documentation or advertising materials: + * + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" + * + */ + +/** + * @file can_cbs_rx_cell-temperatures.c + * @author foxBMS Team + * @date 2024-04-08 (date of creation) + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS + * @prefix CANRX + * + * @brief CAN driver Rx callback implementation + * @details CAN Rx callback for the debug cell-temperatures + */ + +/*========== Includes =======================================================*/ +/* AXIVION Next Codeline Generic-LocalInclude: 'can_cbs_rx.h' declares the + * prototype for the callback 'CANRX_CellTemperatures' */ +#include "can_cbs_rx.h" +#include "can_cfg_rx-message-definitions.h" +#include "can_helper.h" +#include "diag.h" +#include "ftask.h" + +#include + +/*========== Macros and Definitions =========================================*/ + +/*========== Static Constant and Variable Definitions =======================*/ + +/*========== Extern Constant and Variable Definitions =======================*/ + +/*========== Static Function Prototypes =====================================*/ +/** + * @brief get the cell temperature signal from can message data + * @param pCellTemperatures TODO: describe what the pointer actually is + * @param messageData received message data + */ +static void CANRX_GetCanAfeCellTemperaturesFromMessage( + CAN_CAN2AFE_CELL_TEMPERATURES_QUEUE_s *pCellTemperatures, + uint64_t messageData); + +/*========== Static Function Implementations ================================*/ +static void CANRX_GetCanAfeCellTemperaturesFromMessage( + CAN_CAN2AFE_CELL_TEMPERATURES_QUEUE_s *pCellTemperatures, + uint64_t messageData) { + /* CAN signal parameters for can cell temperatures */ + static const uint8_t canrx_kCanCellTemperatureMuxBitStart = CANRX_CAN_CELL_TEMPERATURE_MUX_BIT_START; + static const uint8_t canrx_kCanCellTemperatureMuxLength = CANRX_CAN_CELL_TEMPERATURE_MUX_LENGTH; + static const uint8_t + canrx_kCanCellTemperatureInvalidFlagBitStart[CAN_NUM_OF_TEMPERATURES_IN_CAN_CELL_TEMPERATURES_MSG] = { + CANRX_CAN_CELL_TEMPERATURE0_INVALID_FLAG_BIT_START, + CANRX_CAN_CELL_TEMPERATURE1_INVALID_FLAG_BIT_START, + CANRX_CAN_CELL_TEMPERATURE2_INVALID_FLAG_BIT_START, + CANRX_CAN_CELL_TEMPERATURE3_INVALID_FLAG_BIT_START, + CANRX_CAN_CELL_TEMPERATURE4_INVALID_FLAG_BIT_START, + CANRX_CAN_CELL_TEMPERATURE5_INVALID_FLAG_BIT_START}; + static const uint8_t canrx_kCanCellTemperatureInvalidFlagLength = CANRX_CAN_CELL_TEMPERATURE_INVALID_FLAG_LENGTH; + static const uint8_t canrx_kCanCellTemperatureBitStart[CAN_NUM_OF_TEMPERATURES_IN_CAN_CELL_TEMPERATURES_MSG] = { + CANRX_CAN_CELL_TEMPERATURE0_BIT_START, + CANRX_CAN_CELL_TEMPERATURE1_BIT_START, + CANRX_CAN_CELL_TEMPERATURE2_BIT_START, + CANRX_CAN_CELL_TEMPERATURE3_BIT_START, + CANRX_CAN_CELL_TEMPERATURE4_BIT_START, + CANRX_CAN_CELL_TEMPERATURE5_BIT_START}; + static const uint8_t canrx_kCanCellTemperatureLength = CANRX_CAN_CELL_TEMPERATURE_LENGTH; + + /* Declare and initialize the extracted signal from message */ + uint64_t pCanSignalMuxValue = 0u; + uint64_t pCanSignalInvalidFlag = 0u; + uint64_t pCanSignalTemperature = 0u; + + /* Get the pCellTemperatures.muxValue*/ + CAN_RxGetSignalDataFromMessageData( + messageData, + canrx_kCanCellTemperatureMuxBitStart, + canrx_kCanCellTemperatureMuxLength, + &pCanSignalMuxValue, + CANRX_AFE_CELL_TEMPERATURES_ENDIANNESS); + pCellTemperatures->muxValue = (uint8_t)pCanSignalMuxValue; + + /* Get the invalid flag */ + for (uint8_t i = 0; i < CAN_NUM_OF_TEMPERATURES_IN_CAN_CELL_TEMPERATURES_MSG; i++) { + pCanSignalInvalidFlag = 0u; + CAN_RxGetSignalDataFromMessageData( + messageData, + canrx_kCanCellTemperatureInvalidFlagBitStart[i], + canrx_kCanCellTemperatureInvalidFlagLength, + &pCanSignalInvalidFlag, + CANRX_AFE_CELL_TEMPERATURES_ENDIANNESS); + pCellTemperatures->invalidFlag[i] = ((uint8_t)pCanSignalInvalidFlag > 0u); + } + + /* Get the voltages */ + for (uint8_t i = 0; i < CAN_NUM_OF_TEMPERATURES_IN_CAN_CELL_TEMPERATURES_MSG; i++) { + pCanSignalTemperature = 0u; + CAN_RxGetSignalDataFromMessageData( + messageData, + canrx_kCanCellTemperatureBitStart[i], + canrx_kCanCellTemperatureLength, + &pCanSignalTemperature, + CANRX_AFE_CELL_TEMPERATURES_ENDIANNESS); + pCellTemperatures->cellTemperature[i] = (int16_t)pCanSignalTemperature; + } +} + +/*========== Extern Function Implementations ================================*/ +extern uint32_t CANRX_CellTemperatures( + CAN_MESSAGE_PROPERTIES_s message, + const uint8_t *const kpkCanData, + const CAN_SHIM_s *const kpkCanShim) { + /* Check the information of this can message */ + FAS_ASSERT(message.id == CANRX_AFE_CELL_TEMPERATURES_ID); + FAS_ASSERT(message.idType == CANRX_AFE_CELL_TEMPERATURES_ID_TYPE); + FAS_ASSERT(message.dlc == CAN_FOXBMS_MESSAGES_DEFAULT_DLC); + FAS_ASSERT(kpkCanData != NULL_PTR); + FAS_ASSERT(kpkCanShim != NULL_PTR); + + /* Get the message data from can data and pack it into CAN_CAN2AFE_CELL_TEMPERATURES_QUEUE_s */ + uint64_t messageData = 0u; + CAN_CAN2AFE_CELL_TEMPERATURES_QUEUE_s canrx_canCellTemperatures = {0}; + CAN_RxGetMessageDataFromCanData(&messageData, kpkCanData, message.endianness); + CANRX_GetCanAfeCellTemperaturesFromMessage(&canrx_canCellTemperatures, messageData); + + /* Write the whole temperature message to the queue */ + if (OS_SendToBackOfQueue(ftsk_canToAfeCellTemperaturesQueue, (void *)&canrx_canCellTemperatures, 0u) == + OS_SUCCESS) { + /* queue is not full */ + (void)DIAG_Handler(DIAG_ID_CAN_RX_QUEUE_FULL, DIAG_EVENT_OK, DIAG_SYSTEM, 0u); + } else { + /* queue is full */ + (void)DIAG_Handler(DIAG_ID_CAN_RX_QUEUE_FULL, DIAG_EVENT_NOT_OK, DIAG_SYSTEM, 0u); + } + + return 0u; +} + +/*========== Externalized Static Function Implementations (Unit Test) =======*/ +#ifdef UNITY_UNIT_TEST +extern void TEST_CANRX_GetCanAfeCellTemperaturesFromMessage( + CAN_CAN2AFE_CELL_TEMPERATURES_QUEUE_s *pCellTemperatures, + uint64_t messageData) { + CANRX_GetCanAfeCellTemperaturesFromMessage(pCellTemperatures, messageData); +} +#endif diff --git a/src/app/driver/can/cbs/rx/can_cbs_rx_cell-voltages.c b/src/app/driver/can/cbs/rx/can_cbs_rx_cell-voltages.c new file mode 100644 index 00000000..baffa907 --- /dev/null +++ b/src/app/driver/can/cbs/rx/can_cbs_rx_cell-voltages.c @@ -0,0 +1,178 @@ +/** + * + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * We kindly request you to use one or more of the following phrases to refer to + * foxBMS in your hardware, software, documentation or advertising materials: + * + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" + * + */ + +/** + * @file can_cbs_rx_cell-voltages.c + * @author foxBMS Team + * @date 2024-04-08 (date of creation) + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS + * @prefix CANRX + * + * @brief CAN driver Rx callback implementation + * @details CAN Rx callback for the debug cell-temperatures + */ + +/*========== Includes =======================================================*/ +/* AXIVION Next Codeline Generic-LocalInclude: 'can_cbs_rx.h' declares the + * prototype for the callback 'CANRX_CellVoltages' */ +#include "can_cbs_rx.h" +#include "can_cfg_rx-message-definitions.h" +#include "can_helper.h" +#include "diag.h" +#include "ftask.h" + +#include + +/*========== Macros and Definitions =========================================*/ + +/*========== Static Constant and Variable Definitions =======================*/ + +/*========== Extern Constant and Variable Definitions =======================*/ + +/*========== Static Function Prototypes =====================================*/ +/** + * @brief get the cell voltage signal from can message data + * @param pCellVoltages TODO: describe what the pointer actually is + * @param messageData received message data + */ +static void CANRX_GetCanAfeCellVoltagesFromMessage( + CAN_CAN2AFE_CELL_VOLTAGES_QUEUE_s *pCellVoltages, + uint64_t messageData); + +/*========== Static Function Implementations ================================*/ +static void CANRX_GetCanAfeCellVoltagesFromMessage( + CAN_CAN2AFE_CELL_VOLTAGES_QUEUE_s *pCellVoltages, + uint64_t messageData) { + /* CAN signal parameters for can cell voltages */ + static const uint8_t canrx_kCanCellVoltageMuxBitStart = CANRX_CAN_CELL_VOLTAGE_MUX_BIT_START; + static const uint8_t canrx_kCanCellVoltageMuxLength = CANRX_CAN_CELL_VOLTAGE_MUX_LENGTH; + static const uint8_t canrx_kCanCellVoltageInvalidFlagBitStart[CAN_NUM_OF_VOLTAGES_IN_CAN_CELL_VOLTAGES_MSG] = { + CANRX_CAN_CELL_VOLTAGE0_INVALID_FLAG_BIT_START, + CANRX_CAN_CELL_VOLTAGE1_INVALID_FLAG_BIT_START, + CANRX_CAN_CELL_VOLTAGE2_INVALID_FLAG_BIT_START, + CANRX_CAN_CELL_VOLTAGE3_INVALID_FLAG_BIT_START}; + static const uint8_t canrx_kCanCellVoltageInvalidFlagLength = CANRX_CAN_CELL_VOLTAGE_INVALID_FLAG_LENGTH; + static const uint8_t canrx_kCanCellVoltageBitStart[CAN_NUM_OF_VOLTAGES_IN_CAN_CELL_VOLTAGES_MSG] = { + CANRX_CAN_CELL_VOLTAGE0_BIT_START, + CANRX_CAN_CELL_VOLTAGE1_BIT_START, + CANRX_CAN_CELL_VOLTAGE2_BIT_START, + CANRX_CAN_CELL_VOLTAGE3_BIT_START}; + static const uint8_t canrx_kCanCellVoltageLength = CANRX_CAN_CELL_VOLTAGE_LENGTH; + + /* Declare and initialize the extracted signal from message */ + uint64_t pCanSignalMuxValue = 0u; + uint64_t pCanSignalInvalidFlag = 0u; + uint64_t pCanSignalVoltage = 0u; + + /* Get the mux value */ + CAN_RxGetSignalDataFromMessageData( + messageData, + canrx_kCanCellVoltageMuxBitStart, + canrx_kCanCellVoltageMuxLength, + &pCanSignalMuxValue, + CANRX_AFE_CELL_VOLTAGES_ENDIANNESS); + pCellVoltages->muxValue = (uint8_t)pCanSignalMuxValue; + + /* Get the invalid flag */ + for (uint8_t i = 0; i < CAN_NUM_OF_VOLTAGES_IN_CAN_CELL_VOLTAGES_MSG; i++) { + pCanSignalInvalidFlag = 0u; + CAN_RxGetSignalDataFromMessageData( + messageData, + canrx_kCanCellVoltageInvalidFlagBitStart[i], + canrx_kCanCellVoltageInvalidFlagLength, + &pCanSignalInvalidFlag, + CANRX_AFE_CELL_VOLTAGES_ENDIANNESS); + pCellVoltages->invalidFlag[i] = ((uint8_t)pCanSignalInvalidFlag > 0u); + } + + /* Get the voltages */ + for (uint8_t i = 0; i < CAN_NUM_OF_VOLTAGES_IN_CAN_CELL_VOLTAGES_MSG; i++) { + pCanSignalVoltage = 0u; + CAN_RxGetSignalDataFromMessageData( + messageData, + canrx_kCanCellVoltageBitStart[i], + canrx_kCanCellVoltageLength, + &pCanSignalVoltage, + CANRX_AFE_CELL_VOLTAGES_ENDIANNESS); + pCellVoltages->cellVoltage[i] = (uint16_t)pCanSignalVoltage; + } +} + +/*========== Extern Function Implementations ================================*/ +extern uint32_t CANRX_CellVoltages( + CAN_MESSAGE_PROPERTIES_s message, + const uint8_t *const kpkCanData, + const CAN_SHIM_s *const kpkCanShim) { + /* Check the information of this can message */ + FAS_ASSERT(message.id == CANRX_AFE_CELL_VOLTAGES_ID); + FAS_ASSERT(message.idType == CANRX_AFE_CELL_VOLTAGES_ID_TYPE); + FAS_ASSERT(message.dlc == CAN_FOXBMS_MESSAGES_DEFAULT_DLC); + FAS_ASSERT(kpkCanData != NULL_PTR); + FAS_ASSERT(kpkCanShim != NULL_PTR); + + /* Get the message data from can data and pack it into CAN_CAN2AFE_CELL_VOLTAGES_QUEUE_s */ + uint64_t messageData = 0u; + CAN_CAN2AFE_CELL_VOLTAGES_QUEUE_s canrx_canCellVoltages = {0}; + CAN_RxGetMessageDataFromCanData(&messageData, kpkCanData, message.endianness); + CANRX_GetCanAfeCellVoltagesFromMessage(&canrx_canCellVoltages, messageData); + + /* Write the whole temperature message to the queue*/ + if (OS_SendToBackOfQueue(ftsk_canToAfeCellVoltagesQueue, (void *)&canrx_canCellVoltages, 0u) == OS_SUCCESS) { + /* queue is not full */ + (void)DIAG_Handler(DIAG_ID_CAN_RX_QUEUE_FULL, DIAG_EVENT_OK, DIAG_SYSTEM, 0u); + } else { + /* queue is full */ + (void)DIAG_Handler(DIAG_ID_CAN_RX_QUEUE_FULL, DIAG_EVENT_NOT_OK, DIAG_SYSTEM, 0u); + } + + return 0u; +} + +/*========== Externalized Static Function Implementations (Unit Test) =======*/ +#ifdef UNITY_UNIT_TEST +extern void TEST_CANRX_GetCanAfeCellVoltagesFromMessage( + CAN_CAN2AFE_CELL_VOLTAGES_QUEUE_s *pCellVoltages, + uint64_t messageData) { + CANRX_GetCanAfeCellVoltagesFromMessage(pCellVoltages, messageData); +} +#endif diff --git a/src/app/driver/can/cbs/rx/can_cbs_rx_current-sensor.c b/src/app/driver/can/cbs/rx/can_cbs_rx_current-sensor.c index ce87e1dc..930665b9 100644 --- a/src/app/driver/can/cbs/rx/can_cbs_rx_current-sensor.c +++ b/src/app/driver/can/cbs/rx/can_cbs_rx_current-sensor.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,9 +43,9 @@ * @file can_cbs_rx_current-sensor.c * @author foxBMS Team * @date 2021-04-20 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup DRIVER + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS * @prefix CANRX * * @brief CAN driver Rx callback implementation @@ -53,6 +53,8 @@ */ /*========== Includes =======================================================*/ +/* AXIVION Next Codeline Generic-LocalInclude: 'can_cbs_rx.h' declares the + * prototype for the callback 'CANRX_CurrentSensor' */ #include "can_cbs_rx.h" #include "can_cfg_rx-message-definitions.h" #include "can_helper.h" @@ -60,197 +62,486 @@ #include /*========== Macros and Definitions =========================================*/ - -/** Overcurrent flag */ -#define CANRX_CURRENT_SENSOR_DIAGNOSIS_OVERCURRENT_BITMASK (0x1u) -/** Actual measurement error flag */ -#define CANRX_CURRENT_SENSOR_DIAGNOSIS_ACTUAL_MEASUREMENT_ERROR_BITMASK (0x2u) -/** Any measurement error flag */ -#define CANRX_CURRENT_SENSOR_DIAGNOSIS_ANY_MEASUREMENT_ERROR_BITMASK (0x4u) -/** System error flag */ -#define CANRX_CURRENT_SENSOR_DIAGNOSIS_SYSTEM_ERROR_BITMASK (0x8u) +#define CANRX_CURRENT_SENSOR_ID_START_BIT (7u) +#define CANRX_CURRENT_SENSOR_ID_LENGTH (8u) +#define CANRX_CURRENT_SENSOR_SYSTEM_ERROR_START_BIT (15u) +#define CANRX_CURRENT_SENSOR_SYSTEM_ERROR_LENGTH (CAN_BIT) +#define CANRX_CURRENT_SENSOR_MEASUREMENT_ERROR_START_BIT (14u) +#define CANRX_CURRENT_SENSOR_MEASUREMENT_ERROR_LENGTH (CAN_BIT) +#define CANRX_CURRENT_SENSOR_CHANNEL_ERROR_START_BIT (13u) +#define CANRX_CURRENT_SENSOR_CHANNEL_ERROR_LENGTH (CAN_BIT) +#define CANRX_CURRENT_SENSOR_OCS_START_BIT (12u) +#define CANRX_CURRENT_SENSOR_OCS_LENGTH (CAN_BIT) +#define CANRX_CURRENT_SENSOR_MESSAGE_COUNT_START_BIT (11u) +#define CANRX_CURRENT_SENSOR_MESSAGE_COUNT_LENGTH (4u) +#define CANRX_CURRENT_SENSOR_DATA_START_BIT (23u) +#define CANRX_CURRENT_SENSOR_DATA_LENGTH (32u) /*========== Static Constant and Variable Definitions =======================*/ /*========== Extern Constant and Variable Definitions =======================*/ /*========== Static Function Prototypes =====================================*/ +/** + * @brief Sets the error states in the CAN data shim + * @param kpkCanShim shim to the database entries + * @param messageId message ID to be handled + * @param stringNumber addressed string + */ +static void CANRX_HandleChannelError(const CAN_SHIM_s *const kpkCanShim, uint32_t messageId, uint8_t stringNumber); -/*========== Static Function Implementations ================================*/ +/** + * @brief Resets all error states in the CAN data shim to valid + * @param kpkCanShim shim to the database entries + * @param stringNumber addressed string + */ +static void CANRX_ResetError(const CAN_SHIM_s *const kpkCanShim, uint8_t stringNumber); -/*========== Extern Function Implementations ================================*/ -extern uint32_t CANRX_CurrentSensor( - CAN_MESSAGE_PROPERTIES_s message, - const uint8_t *const kpkCanData, - const CAN_SHIM_s *const kpkCanShim) { - FAS_ASSERT(((message.id >= CANRX_STRING0_CURRENT_ID) && (message.id <= CANRX_STRING0_ENERGY_COUNTER_ID))); - FAS_ASSERT(message.idType == CANRX_CURRENT_SENSOR_MESSAGES_ID_TYPE); - FAS_ASSERT(message.dlc == CANRX_CURRENT_SENSOR_MESSAGES_DLC); - FAS_ASSERT(kpkCanData != NULL_PTR); - FAS_ASSERT(kpkCanShim != NULL_PTR); +/** + * @brief Sets all error states in the CAN data shim to invalid + * @param kpkCanShim shim to the database entries + * @param stringNumber addressed string + */ +static void CANRX_HandleMeasurementError(const CAN_SHIM_s *const kpkCanShim, uint8_t stringNumber); - /** - * CAN signals used in this message - * Parameters: - * bit start, bit length, factor, offset, minimum value, maximum value - */ - const CAN_SIGNAL_TYPE_s currentSensorStatus = {7u, 8u, 1.0f, 0.0f, 0.0f, 255.0f}; - const CAN_SIGNAL_TYPE_s currentSensorData = {23u, 32u, 1.0f, 0.0f, -2147483648.0f, 2147483648.0f}; +/** + * @brief Sets all error states in the CAN data shim to invalid + * @param kpkCanShim shim to the database entries + * @param stringNumber addressed string + */ +static void CANRX_HandleSystemError(const CAN_SHIM_s *const kpkCanShim, uint8_t stringNumber); - uint64_t messageData = 0u; - uint64_t canSignal = 0u; +/** + * @brief Sets current value in the CAN data shim + * @param kpkCanShim shim to the database entries + * @param messageId message ID to be handled + * @param stringNumber addressed string + * @param signalData actual signal data + */ +static void CANRX_HandleSensorData( + const CAN_SHIM_s *const kpkCanShim, + uint32_t messageId, + uint8_t stringNumber, + int32_t signalData); - int32_t sensorSignalValue = 0; - uint8_t diagInfo = 0u; - uint8_t stringNumber = 0u; +/** + * @brief Sets current value in the CAN data shim + * @param kpkCanShim shim to the database entries + * @param stringNumber addressed string + * @param signalData actual signal data + */ +static void CANRX_SetCurrent(const CAN_SHIM_s *const kpkCanShim, uint8_t stringNumber, int32_t signalData); - if (message.id <= CANRX_STRING0_ENERGY_COUNTER_ID) { - stringNumber = 0u; - } +/** + * @brief Sets V1 voltage measurement value in the CAN data shim + * @param kpkCanShim shim to the database entries + * @param stringNumber addressed string + * @param signalData actual signal data + */ +static void CANRX_SetVoltageU1(const CAN_SHIM_s *const kpkCanShim, uint8_t stringNumber, int32_t signalData); - CAN_RxGetMessageDataFromCanData(&messageData, kpkCanData, message.endianness); +/** + * @brief Sets V2 voltage measurement value in the CAN data shim + * @param kpkCanShim shim to the database entries + * @param stringNumber addressed string + * @param signalData actual signal data + */ +static void CANRX_SetVoltageU2(const CAN_SHIM_s *const kpkCanShim, uint8_t stringNumber, int32_t signalData); - /* Get status*/ - CAN_RxGetSignalDataFromMessageData( - messageData, currentSensorStatus.bitStart, currentSensorStatus.bitLength, &canSignal, message.endianness); +/** + * @brief Sets V3 voltage measurement value in the CAN data shim + * @param kpkCanShim shim to the database entries + * @param stringNumber addressed string + * @param signalData actual signal data + */ +static void CANRX_SetVoltageU3(const CAN_SHIM_s *const kpkCanShim, uint8_t stringNumber, int32_t signalData); + +/** + * @brief Sets temperature measurement value in the CAN data shim + * @param kpkCanShim shim to the database entries + * @param stringNumber addressed string + * @param signalData actual signal data + */ +static void CANRX_SetTemperature(const CAN_SHIM_s *const kpkCanShim, uint8_t stringNumber, int32_t signalData); - /* only high nibble contains diag info */ - diagInfo = canSignal & 0xF0u; - diagInfo >>= 4u; +/** + * @brief Sets power measurement value in the CAN data shim + * @param kpkCanShim shim to the database entries + * @param stringNumber addressed string + * @param signalData actual signal data + */ +static void CANRX_SetPower(const CAN_SHIM_s *const kpkCanShim, uint8_t stringNumber, int32_t signalData); - if ((diagInfo & CANRX_CURRENT_SENSOR_DIAGNOSIS_OVERCURRENT_BITMASK) != 0u) { - /* Overcurrent detected. This feature is currently not supported. */ - } - if ((diagInfo & CANRX_CURRENT_SENSOR_DIAGNOSIS_ACTUAL_MEASUREMENT_ERROR_BITMASK) != 0u) { - switch (message.id) { - case CANRX_STRING0_CURRENT_ID: /* Current status */ - kpkCanShim->pTableCurrentSensor->invalidCurrentMeasurement[stringNumber] = 1; - break; - case CANRX_STRING0_VOLTAGE1_ID: /* Voltage status */ - kpkCanShim->pTableCurrentSensor->invalidHighVoltageMeasurement[stringNumber][0] = 1; - break; - case CANRX_STRING0_VOLTAGE2_ID: - kpkCanShim->pTableCurrentSensor->invalidHighVoltageMeasurement[stringNumber][1] = 1; - break; - case CANRX_STRING0_VOLTAGE3_ID: - kpkCanShim->pTableCurrentSensor->invalidHighVoltageMeasurement[stringNumber][2] = 1; - break; - case CANRX_STRING0_TEMPERATURE_ID: /* Temperature status */ - kpkCanShim->pTableCurrentSensor->invalidSensorTemperatureMeasurement[stringNumber] = 1; - break; - case CANRX_STRING0_POWER_ID: /* Power status */ - kpkCanShim->pTableCurrentSensor->invalidPowerMeasurement[stringNumber] = 1; - break; - case CANRX_STRING0_CURRENT_COUNTER_ID: /* CC status */ - kpkCanShim->pTableCurrentSensor->invalidCurrentCountingMeasurement[stringNumber] = 1; - break; - case CANRX_STRING0_ENERGY_COUNTER_ID: /* EC status */ - kpkCanShim->pTableCurrentSensor->invalidEnergyCountingMeasurement[stringNumber] = 1; - break; - default: - /* No error detected */ - break; - } - } else { - kpkCanShim->pTableCurrentSensor->invalidCurrentMeasurement[stringNumber] = 0; - kpkCanShim->pTableCurrentSensor->invalidHighVoltageMeasurement[stringNumber][0] = 0; - kpkCanShim->pTableCurrentSensor->invalidHighVoltageMeasurement[stringNumber][1] = 0; - kpkCanShim->pTableCurrentSensor->invalidHighVoltageMeasurement[stringNumber][2] = 0; - kpkCanShim->pTableCurrentSensor->invalidSensorTemperatureMeasurement[stringNumber] = 0; - kpkCanShim->pTableCurrentSensor->invalidPowerMeasurement[stringNumber] = 0; - kpkCanShim->pTableCurrentSensor->invalidCurrentCountingMeasurement[stringNumber] = 0; - kpkCanShim->pTableCurrentSensor->invalidEnergyCountingMeasurement[stringNumber] = 0; - } +/** + * @brief Sets Coulomb counting value in the CAN data shim + * @param kpkCanShim shim to the database entries + * @param stringNumber addressed string + * @param signalData actual signal data + */ +static void CANRX_SetCoulombCounting(const CAN_SHIM_s *const kpkCanShim, uint8_t stringNumber, int32_t signalData); + +/** + * @brief Sets energy counting value in the CAN data shim + * @param kpkCanShim shim to the database entries + * @param stringNumber addressed string + * @param signalData actual signal data + */ +static void CANRX_SetEnergyCounting(const CAN_SHIM_s *const kpkCanShim, uint8_t stringNumber, int32_t signalData); + +/** + * @brief Sets the string number based on the associated CAN message ID + * @details See the documentation of the CAN module FAQ when implementing a + * multi-string application + * Multi-string Support when using Isabellenhuette IVT Current Sensors + * . + * @param messageId message ID to be handled + * @return string number associated with the CAN message ID + */ +static uint8_t CANRX_SetStringNumberBasedOnCanMessageId(uint32_t messageId); - if (((diagInfo & CANRX_CURRENT_SENSOR_DIAGNOSIS_ANY_MEASUREMENT_ERROR_BITMASK) != 0u) || - ((diagInfo & CANRX_CURRENT_SENSOR_DIAGNOSIS_SYSTEM_ERROR_BITMASK) != 0u)) { - kpkCanShim->pTableCurrentSensor->invalidCurrentMeasurement[stringNumber] = 1; - kpkCanShim->pTableCurrentSensor->invalidHighVoltageMeasurement[stringNumber][0] = 1; - kpkCanShim->pTableCurrentSensor->invalidHighVoltageMeasurement[stringNumber][1] = 1; - kpkCanShim->pTableCurrentSensor->invalidHighVoltageMeasurement[stringNumber][2] = 1; - kpkCanShim->pTableCurrentSensor->invalidSensorTemperatureMeasurement[stringNumber] = 1; - kpkCanShim->pTableCurrentSensor->invalidPowerMeasurement[stringNumber] = 1; - kpkCanShim->pTableCurrentSensor->invalidCurrentCountingMeasurement[stringNumber] = 1; - kpkCanShim->pTableCurrentSensor->invalidEnergyCountingMeasurement[stringNumber] = 1; +/*========== Static Function Implementations ================================*/ +static void CANRX_HandleChannelError(const CAN_SHIM_s *const kpkCanShim, uint32_t messageId, uint8_t stringNumber) { + FAS_ASSERT(kpkCanShim != NULL_PTR); + FAS_ASSERT(((messageId >= CANRX_IVT_STRING0_CURRENT_ID) && (messageId <= CANRX_IVT_STRING0_ENERGY_COUNTER_ID))); + FAS_ASSERT(stringNumber < BS_NR_OF_STRINGS); + switch (messageId) { + case CANRX_IVT_STRING0_CURRENT_ID: /* Current status */ + kpkCanShim->pTableCurrentSensor->invalidCurrentMeasurement[stringNumber] = 1; + break; + case CANRX_IVT_STRING0_VOLTAGE1_ID: /* Voltage status */ + kpkCanShim->pTableCurrentSensor->invalidHighVoltageMeasurement[stringNumber][0] = 1; + break; + case CANRX_IVT_STRING0_VOLTAGE2_ID: + kpkCanShim->pTableCurrentSensor->invalidHighVoltageMeasurement[stringNumber][1] = 1; + break; + case CANRX_IVT_STRING0_VOLTAGE3_ID: + kpkCanShim->pTableCurrentSensor->invalidHighVoltageMeasurement[stringNumber][2] = 1; + break; + case CANRX_IVT_STRING0_TEMPERATURE_ID: /* Temperature status */ + kpkCanShim->pTableCurrentSensor->invalidSensorTemperatureMeasurement[stringNumber] = 1; + break; + case CANRX_IVT_STRING0_POWER_ID: /* Power status */ + kpkCanShim->pTableCurrentSensor->invalidPowerMeasurement[stringNumber] = 1; + break; + case CANRX_IVT_STRING0_CURRENT_COUNTER_ID: /* CC status */ + kpkCanShim->pTableCurrentSensor->invalidCurrentCountingMeasurement[stringNumber] = 1; + break; + case CANRX_IVT_STRING0_ENERGY_COUNTER_ID: /* EC status */ + kpkCanShim->pTableCurrentSensor->invalidEnergyCountingMeasurement[stringNumber] = 1; + break; + default: /* LCOV_EXCL_LINE */ + /* No error detected */ /* LCOV_EXCL_LINE */ + break; /* LCOV_EXCL_LINE */ } +} - /* Get measurement */ - CAN_RxGetSignalDataFromMessageData( - messageData, currentSensorData.bitStart, currentSensorData.bitLength, &canSignal, message.endianness); - switch (message.id) { +static void CANRX_ResetError(const CAN_SHIM_s *const kpkCanShim, uint8_t stringNumber) { + FAS_ASSERT(kpkCanShim != NULL_PTR); + FAS_ASSERT(stringNumber < BS_NR_OF_STRINGS); + kpkCanShim->pTableCurrentSensor->invalidCurrentMeasurement[stringNumber] = 0; + kpkCanShim->pTableCurrentSensor->invalidHighVoltageMeasurement[stringNumber][0] = 0; + kpkCanShim->pTableCurrentSensor->invalidHighVoltageMeasurement[stringNumber][1] = 0; + kpkCanShim->pTableCurrentSensor->invalidHighVoltageMeasurement[stringNumber][2] = 0; + kpkCanShim->pTableCurrentSensor->invalidSensorTemperatureMeasurement[stringNumber] = 0; + kpkCanShim->pTableCurrentSensor->invalidPowerMeasurement[stringNumber] = 0; + kpkCanShim->pTableCurrentSensor->invalidCurrentCountingMeasurement[stringNumber] = 0; + kpkCanShim->pTableCurrentSensor->invalidEnergyCountingMeasurement[stringNumber] = 0; +} + +static void CANRX_HandleMeasurementError(const CAN_SHIM_s *const kpkCanShim, uint8_t stringNumber) { + FAS_ASSERT(kpkCanShim != NULL_PTR); + FAS_ASSERT(stringNumber < BS_NR_OF_STRINGS); + kpkCanShim->pTableCurrentSensor->invalidCurrentMeasurement[stringNumber] = 1; + kpkCanShim->pTableCurrentSensor->invalidHighVoltageMeasurement[stringNumber][0] = 1; + kpkCanShim->pTableCurrentSensor->invalidHighVoltageMeasurement[stringNumber][1] = 1; + kpkCanShim->pTableCurrentSensor->invalidHighVoltageMeasurement[stringNumber][2] = 1; + kpkCanShim->pTableCurrentSensor->invalidSensorTemperatureMeasurement[stringNumber] = 1; + kpkCanShim->pTableCurrentSensor->invalidPowerMeasurement[stringNumber] = 1; + kpkCanShim->pTableCurrentSensor->invalidCurrentCountingMeasurement[stringNumber] = 1; + kpkCanShim->pTableCurrentSensor->invalidEnergyCountingMeasurement[stringNumber] = 1; +} + +static void CANRX_HandleSystemError(const CAN_SHIM_s *const kpkCanShim, uint8_t stringNumber) { + FAS_ASSERT(kpkCanShim != NULL_PTR); + FAS_ASSERT(stringNumber < BS_NR_OF_STRINGS); + kpkCanShim->pTableCurrentSensor->invalidCurrentMeasurement[stringNumber] = 1; + kpkCanShim->pTableCurrentSensor->invalidHighVoltageMeasurement[stringNumber][0] = 1; + kpkCanShim->pTableCurrentSensor->invalidHighVoltageMeasurement[stringNumber][1] = 1; + kpkCanShim->pTableCurrentSensor->invalidHighVoltageMeasurement[stringNumber][2] = 1; + kpkCanShim->pTableCurrentSensor->invalidSensorTemperatureMeasurement[stringNumber] = 1; + kpkCanShim->pTableCurrentSensor->invalidPowerMeasurement[stringNumber] = 1; + kpkCanShim->pTableCurrentSensor->invalidCurrentCountingMeasurement[stringNumber] = 1; + kpkCanShim->pTableCurrentSensor->invalidEnergyCountingMeasurement[stringNumber] = 1; +} + +static void CANRX_HandleSensorData( + const CAN_SHIM_s *const kpkCanShim, + uint32_t messageId, + uint8_t stringNumber, + int32_t signalData) { + FAS_ASSERT(kpkCanShim != NULL_PTR); + FAS_ASSERT(((messageId >= CANRX_IVT_STRING0_CURRENT_ID) && (messageId <= CANRX_IVT_STRING0_ENERGY_COUNTER_ID))); + FAS_ASSERT(stringNumber < BS_NR_OF_STRINGS); + /* AXIVION Routine Generic-MissingParameterAssert: signalData: parameter accepts whole range */ + + switch (messageId) { /* Current measurement */ - case CANRX_STRING0_CURRENT_ID: - sensorSignalValue = (int32_t)canSignal; - kpkCanShim->pTableCurrentSensor->current_mA[stringNumber] = sensorSignalValue; - kpkCanShim->pTableCurrentSensor->newCurrent++; - kpkCanShim->pTableCurrentSensor->previousTimestampCurrent[stringNumber] = - kpkCanShim->pTableCurrentSensor->timestampCurrent[stringNumber]; - kpkCanShim->pTableCurrentSensor->timestampCurrent[stringNumber] = OS_GetTickCount(); + case CANRX_IVT_STRING0_CURRENT_ID: + CANRX_SetCurrent(kpkCanShim, stringNumber, signalData); break; /* Voltage measurement U1 */ - case CANRX_STRING0_VOLTAGE1_ID: - sensorSignalValue = (int32_t)canSignal; - kpkCanShim->pTableCurrentSensor->highVoltage_mV[stringNumber][0] = sensorSignalValue; - kpkCanShim->pTableCurrentSensor->previousTimestampHighVoltage[stringNumber][0] = - kpkCanShim->pTableCurrentSensor->timestampHighVoltage[stringNumber][0]; - kpkCanShim->pTableCurrentSensor->timestampHighVoltage[stringNumber][0] = OS_GetTickCount(); + case CANRX_IVT_STRING0_VOLTAGE1_ID: + CANRX_SetVoltageU1(kpkCanShim, stringNumber, signalData); break; /* Voltage measurement U2 */ - case CANRX_STRING0_VOLTAGE2_ID: - sensorSignalValue = (int32_t)canSignal; - kpkCanShim->pTableCurrentSensor->highVoltage_mV[stringNumber][1] = sensorSignalValue; - kpkCanShim->pTableCurrentSensor->previousTimestampHighVoltage[stringNumber][1] = - kpkCanShim->pTableCurrentSensor->timestampHighVoltage[stringNumber][1]; - kpkCanShim->pTableCurrentSensor->timestampHighVoltage[stringNumber][1] = OS_GetTickCount(); + case CANRX_IVT_STRING0_VOLTAGE2_ID: + CANRX_SetVoltageU2(kpkCanShim, stringNumber, signalData); break; /* Voltage measurement U3 */ - case CANRX_STRING0_VOLTAGE3_ID: - sensorSignalValue = (int32_t)canSignal; - kpkCanShim->pTableCurrentSensor->highVoltage_mV[stringNumber][2] = sensorSignalValue; - kpkCanShim->pTableCurrentSensor->previousTimestampHighVoltage[stringNumber][2] = - kpkCanShim->pTableCurrentSensor->timestampHighVoltage[stringNumber][2]; - kpkCanShim->pTableCurrentSensor->timestampHighVoltage[stringNumber][2] = OS_GetTickCount(); + case CANRX_IVT_STRING0_VOLTAGE3_ID: + CANRX_SetVoltageU3(kpkCanShim, stringNumber, signalData); break; /* Temperature measurement */ - case CANRX_STRING0_TEMPERATURE_ID: - sensorSignalValue = (int32_t)canSignal; - kpkCanShim->pTableCurrentSensor->sensorTemperature_ddegC[stringNumber] = sensorSignalValue; + case CANRX_IVT_STRING0_TEMPERATURE_ID: + CANRX_SetTemperature(kpkCanShim, stringNumber, signalData); break; /* Power measurement */ - case CANRX_STRING0_POWER_ID: - sensorSignalValue = (int32_t)canSignal; - kpkCanShim->pTableCurrentSensor->power_W[stringNumber] = sensorSignalValue; - kpkCanShim->pTableCurrentSensor->newPower++; - kpkCanShim->pTableCurrentSensor->previousTimestampPower[stringNumber] = - kpkCanShim->pTableCurrentSensor->timestampPower[stringNumber]; - kpkCanShim->pTableCurrentSensor->timestampPower[stringNumber] = OS_GetTickCount(); + case CANRX_IVT_STRING0_POWER_ID: + CANRX_SetPower(kpkCanShim, stringNumber, signalData); break; /* CC measurement */ - case CANRX_STRING0_CURRENT_COUNTER_ID: - sensorSignalValue = (int32_t)canSignal; - kpkCanShim->pTableCurrentSensor->previousTimestampCurrentCounting[stringNumber] = - kpkCanShim->pTableCurrentSensor->timestampCurrentCounting[stringNumber]; - kpkCanShim->pTableCurrentSensor->timestampCurrentCounting[stringNumber] = OS_GetTickCount(); - kpkCanShim->pTableCurrentSensor->currentCounter_As[stringNumber] = sensorSignalValue; + case CANRX_IVT_STRING0_CURRENT_COUNTER_ID: + CANRX_SetCoulombCounting(kpkCanShim, stringNumber, signalData); break; /* EC measurement */ - case CANRX_STRING0_ENERGY_COUNTER_ID: - sensorSignalValue = (int32_t)canSignal; - kpkCanShim->pTableCurrentSensor->energyCounter_Wh[stringNumber] = sensorSignalValue; - kpkCanShim->pTableCurrentSensor->previousTimestampEnergyCounting[stringNumber] = - kpkCanShim->pTableCurrentSensor->timestampEnergyCounting[stringNumber]; - kpkCanShim->pTableCurrentSensor->timestampEnergyCounting[stringNumber] = OS_GetTickCount(); + case CANRX_IVT_STRING0_ENERGY_COUNTER_ID: + CANRX_SetEnergyCounting(kpkCanShim, stringNumber, signalData); break; + default: /* LCOV_EXCL_LINE */ + FAS_ASSERT(FAS_TRAP); /* LCOV_EXCL_LINE */ + break; /* LCOV_EXCL_LINE */ + } +} + +static void CANRX_SetCurrent(const CAN_SHIM_s *const kpkCanShim, uint8_t stringNumber, int32_t signalData) { + FAS_ASSERT(kpkCanShim != NULL_PTR); + FAS_ASSERT(stringNumber < BS_NR_OF_STRINGS); + /* AXIVION Routine Generic-MissingParameterAssert: signalData: parameter accepts whole range */ + kpkCanShim->pTableCurrentSensor->current_mA[stringNumber] = signalData; + kpkCanShim->pTableCurrentSensor->newCurrent++; + kpkCanShim->pTableCurrentSensor->previousTimestampCurrent[stringNumber] = + kpkCanShim->pTableCurrentSensor->timestampCurrent[stringNumber]; + kpkCanShim->pTableCurrentSensor->timestampCurrent[stringNumber] = OS_GetTickCount(); +} + +static void CANRX_SetVoltageU1(const CAN_SHIM_s *const kpkCanShim, uint8_t stringNumber, int32_t signalData) { + FAS_ASSERT(kpkCanShim != NULL_PTR); + FAS_ASSERT(stringNumber < BS_NR_OF_STRINGS); + /* AXIVION Routine Generic-MissingParameterAssert: signalData: parameter accepts whole range */ + kpkCanShim->pTableCurrentSensor->highVoltage_mV[stringNumber][0] = signalData; + kpkCanShim->pTableCurrentSensor->previousTimestampHighVoltage[stringNumber][0] = + kpkCanShim->pTableCurrentSensor->timestampHighVoltage[stringNumber][0]; + kpkCanShim->pTableCurrentSensor->timestampHighVoltage[stringNumber][0] = OS_GetTickCount(); +} + +static void CANRX_SetVoltageU2(const CAN_SHIM_s *const kpkCanShim, uint8_t stringNumber, int32_t signalData) { + FAS_ASSERT(kpkCanShim != NULL_PTR); + FAS_ASSERT(stringNumber < BS_NR_OF_STRINGS); + /* AXIVION Routine Generic-MissingParameterAssert: signalData: parameter accepts whole range */ + kpkCanShim->pTableCurrentSensor->highVoltage_mV[stringNumber][1] = signalData; + kpkCanShim->pTableCurrentSensor->previousTimestampHighVoltage[stringNumber][1] = + kpkCanShim->pTableCurrentSensor->timestampHighVoltage[stringNumber][1]; + kpkCanShim->pTableCurrentSensor->timestampHighVoltage[stringNumber][1] = OS_GetTickCount(); +} + +static void CANRX_SetVoltageU3(const CAN_SHIM_s *const kpkCanShim, uint8_t stringNumber, int32_t signalData) { + FAS_ASSERT(kpkCanShim != NULL_PTR); + FAS_ASSERT(stringNumber < BS_NR_OF_STRINGS); + /* AXIVION Routine Generic-MissingParameterAssert: signalData: parameter accepts whole range */ + kpkCanShim->pTableCurrentSensor->highVoltage_mV[stringNumber][2] = signalData; + kpkCanShim->pTableCurrentSensor->previousTimestampHighVoltage[stringNumber][2] = + kpkCanShim->pTableCurrentSensor->timestampHighVoltage[stringNumber][2]; + kpkCanShim->pTableCurrentSensor->timestampHighVoltage[stringNumber][2] = OS_GetTickCount(); +} + +static void CANRX_SetTemperature(const CAN_SHIM_s *const kpkCanShim, uint8_t stringNumber, int32_t signalData) { + FAS_ASSERT(kpkCanShim != NULL_PTR); + FAS_ASSERT(stringNumber < BS_NR_OF_STRINGS); + /* AXIVION Routine Generic-MissingParameterAssert: signalData: parameter accepts whole range */ + kpkCanShim->pTableCurrentSensor->sensorTemperature_ddegC[stringNumber] = signalData; +} + +static void CANRX_SetPower(const CAN_SHIM_s *const kpkCanShim, uint8_t stringNumber, int32_t signalData) { + FAS_ASSERT(kpkCanShim != NULL_PTR); + FAS_ASSERT(stringNumber < BS_NR_OF_STRINGS); + /* AXIVION Routine Generic-MissingParameterAssert: signalData: parameter accepts whole range */ + kpkCanShim->pTableCurrentSensor->power_W[stringNumber] = signalData; + kpkCanShim->pTableCurrentSensor->newPower++; + kpkCanShim->pTableCurrentSensor->previousTimestampPower[stringNumber] = + kpkCanShim->pTableCurrentSensor->timestampPower[stringNumber]; + kpkCanShim->pTableCurrentSensor->timestampPower[stringNumber] = OS_GetTickCount(); +} + +static void CANRX_SetCoulombCounting(const CAN_SHIM_s *const kpkCanShim, uint8_t stringNumber, int32_t signalData) { + FAS_ASSERT(kpkCanShim != NULL_PTR); + FAS_ASSERT(stringNumber < BS_NR_OF_STRINGS); + /* AXIVION Routine Generic-MissingParameterAssert: signalData: parameter accepts whole range */ + kpkCanShim->pTableCurrentSensor->previousTimestampCurrentCounting[stringNumber] = + kpkCanShim->pTableCurrentSensor->timestampCurrentCounting[stringNumber]; + kpkCanShim->pTableCurrentSensor->timestampCurrentCounting[stringNumber] = OS_GetTickCount(); + kpkCanShim->pTableCurrentSensor->currentCounter_As[stringNumber] = signalData; +} + +static void CANRX_SetEnergyCounting(const CAN_SHIM_s *const kpkCanShim, uint8_t stringNumber, int32_t signalData) { + FAS_ASSERT(kpkCanShim != NULL_PTR); + FAS_ASSERT(stringNumber < BS_NR_OF_STRINGS); + /* AXIVION Routine Generic-MissingParameterAssert: signalData: parameter accepts whole range */ + kpkCanShim->pTableCurrentSensor->energyCounter_Wh[stringNumber] = signalData; + kpkCanShim->pTableCurrentSensor->previousTimestampEnergyCounting[stringNumber] = + kpkCanShim->pTableCurrentSensor->timestampEnergyCounting[stringNumber]; + kpkCanShim->pTableCurrentSensor->timestampEnergyCounting[stringNumber] = OS_GetTickCount(); +} + +static uint8_t CANRX_SetStringNumberBasedOnCanMessageId(uint32_t messageId) { + FAS_ASSERT(((messageId >= CANRX_IVT_STRING0_CURRENT_ID) && (messageId <= CANRX_IVT_STRING0_ENERGY_COUNTER_ID))); + uint8_t stringNumber = 0u; + if (messageId <= CANRX_IVT_STRING0_ENERGY_COUNTER_ID) { + stringNumber = 0u; + } + return stringNumber; +} + +/*========== Extern Function Implementations ================================*/ +extern uint32_t CANRX_CurrentSensor( + CAN_MESSAGE_PROPERTIES_s message, + const uint8_t *const kpkCanData, + const CAN_SHIM_s *const kpkCanShim) { + FAS_ASSERT(((message.id >= CANRX_IVT_STRING0_CURRENT_ID) && (message.id <= CANRX_IVT_STRING0_ENERGY_COUNTER_ID))); + FAS_ASSERT(message.idType == CANRX_CURRENT_SENSOR_MESSAGES_ID_TYPE); + FAS_ASSERT(message.dlc == CANRX_CURRENT_SENSOR_MESSAGES_DLC); + FAS_ASSERT(kpkCanData != NULL_PTR); + FAS_ASSERT(kpkCanShim != NULL_PTR); + + uint64_t messageData = 0uLL; + uint64_t canSignal = 0uLL; + + int32_t signalData = 0; + uint8_t stringNumber = CANRX_SetStringNumberBasedOnCanMessageId(message.id); - default: - FAS_ASSERT(FAS_TRAP); - break; /* LCOV_EXCL_LINE */ + CAN_RxGetMessageDataFromCanData(&messageData, kpkCanData, message.endianness); + + /* Handle error flags */ + /* Overcurrent */ + CAN_RxGetSignalDataFromMessageData( + messageData, + CANRX_CURRENT_SENSOR_OCS_START_BIT, + CANRX_CURRENT_SENSOR_OCS_LENGTH, + &canSignal, + message.endianness); + if (canSignal != 0uLL) { + /* TODO */ } + /* Channel error */ + CAN_RxGetSignalDataFromMessageData( + messageData, + CANRX_CURRENT_SENSOR_CHANNEL_ERROR_START_BIT, + CANRX_CURRENT_SENSOR_CHANNEL_ERROR_LENGTH, + &canSignal, + message.endianness); + if (canSignal != 0uLL) { + CANRX_HandleChannelError(kpkCanShim, message.id, stringNumber); + } else { + CANRX_ResetError(kpkCanShim, stringNumber); + } + /* Measurement */ + CAN_RxGetSignalDataFromMessageData( + messageData, + CANRX_CURRENT_SENSOR_MEASUREMENT_ERROR_START_BIT, + CANRX_CURRENT_SENSOR_MEASUREMENT_ERROR_LENGTH, + &canSignal, + message.endianness); + if (canSignal != 0uLL) { + CANRX_HandleMeasurementError(kpkCanShim, stringNumber); + } + /* System error */ + CAN_RxGetSignalDataFromMessageData( + messageData, + CANRX_CURRENT_SENSOR_SYSTEM_ERROR_START_BIT, + CANRX_CURRENT_SENSOR_SYSTEM_ERROR_LENGTH, + &canSignal, + message.endianness); + if (canSignal != 0uLL) { + CANRX_HandleSystemError(kpkCanShim, stringNumber); + } + + /* Get data from sensor reading */ + CAN_RxGetSignalDataFromMessageData( + messageData, + CANRX_CURRENT_SENSOR_DATA_START_BIT, + CANRX_CURRENT_SENSOR_DATA_LENGTH, + &canSignal, + message.endianness); + signalData = (int32_t)canSignal; + CANRX_HandleSensorData(kpkCanShim, message.id, stringNumber, signalData); DATA_WRITE_DATA(kpkCanShim->pTableCurrentSensor); - return 0; + return 0u; } /*========== Externalized Static Function Implementations (Unit Test) =======*/ #ifdef UNITY_UNIT_TEST +extern void TEST_CANRX_HandleChannelError( + const CAN_SHIM_s *const kpkCanShim, + uint32_t messageId, + uint8_t stringNumber) { + CANRX_HandleChannelError(kpkCanShim, messageId, stringNumber); +} +extern void TEST_CANRX_ResetError(const CAN_SHIM_s *const kpkCanShim, uint8_t stringNumber) { + CANRX_ResetError(kpkCanShim, stringNumber); +} +extern void TEST_CANRX_HandleMeasurementError(const CAN_SHIM_s *const kpkCanShim, uint8_t stringNumber) { + CANRX_HandleMeasurementError(kpkCanShim, stringNumber); +} +extern void TEST_CANRX_HandleSystemError(const CAN_SHIM_s *const kpkCanShim, uint8_t stringNumber) { + CANRX_HandleSystemError(kpkCanShim, stringNumber); +} +extern void TEST_CANRX_HandleSensorData( + const CAN_SHIM_s *const kpkCanShim, + uint32_t messageId, + uint8_t stringNumber, + int32_t signalData) { + CANRX_HandleSensorData(kpkCanShim, messageId, stringNumber, signalData); +} +extern void TEST_CANRX_SetCurrent(const CAN_SHIM_s *const kpkCanShim, uint8_t stringNumber, int32_t signalData) { + CANRX_SetCurrent(kpkCanShim, stringNumber, signalData); +} +extern void TEST_CANRX_SetVoltageU1(const CAN_SHIM_s *const kpkCanShim, uint8_t stringNumber, int32_t signalData) { + CANRX_SetVoltageU1(kpkCanShim, stringNumber, signalData); +} +extern void TEST_CANRX_SetVoltageU2(const CAN_SHIM_s *const kpkCanShim, uint8_t stringNumber, int32_t signalData) { + CANRX_SetVoltageU2(kpkCanShim, stringNumber, signalData); +} +extern void TEST_CANRX_SetVoltageU3(const CAN_SHIM_s *const kpkCanShim, uint8_t stringNumber, int32_t signalData) { + CANRX_SetVoltageU3(kpkCanShim, stringNumber, signalData); +} +extern void TEST_CANRX_SetTemperature(const CAN_SHIM_s *const kpkCanShim, uint8_t stringNumber, int32_t signalData) { + CANRX_SetTemperature(kpkCanShim, stringNumber, signalData); +} +extern void TEST_CANRX_SetPower(const CAN_SHIM_s *const kpkCanShim, uint8_t stringNumber, int32_t signalData) { + CANRX_SetPower(kpkCanShim, stringNumber, signalData); +} +extern void TEST_CANRX_SetCoulombCounting( + const CAN_SHIM_s *const kpkCanShim, + uint8_t stringNumber, + int32_t signalData) { + CANRX_SetCoulombCounting(kpkCanShim, stringNumber, signalData); +} +extern void TEST_CANRX_SetEnergyCounting(const CAN_SHIM_s *const kpkCanShim, uint8_t stringNumber, int32_t signalData) { + CANRX_SetEnergyCounting(kpkCanShim, stringNumber, signalData); +} +extern uint8_t TEST_CANRX_SetStringNumberBasedOnCanMessageId(uint32_t messageId) { + return CANRX_SetStringNumberBasedOnCanMessageId(messageId); +} #endif diff --git a/src/app/driver/can/cbs/rx/can_cbs_rx_debug.c b/src/app/driver/can/cbs/rx/can_cbs_rx_debug.c index fef09581..e221c554 100644 --- a/src/app/driver/can/cbs/rx/can_cbs_rx_debug.c +++ b/src/app/driver/can/cbs/rx/can_cbs_rx_debug.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,9 +43,9 @@ * @file can_cbs_rx_debug.c * @author foxBMS Team * @date 2021-04-20 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup DRIVER + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS * @prefix CANRX * * @brief CAN driver Rx callback implementation @@ -53,7 +53,10 @@ */ /*========== Includes =======================================================*/ +/* AXIVION Next Codeline Generic-LocalInclude: 'can_cbs_rx.h' declares the + * prototype for the callback 'CANRX_Debug' */ #include "can_cbs_rx.h" +#include "can_cbs_tx_debug-build-configuration.h" #include "can_cbs_tx_debug-response.h" #include "can_cbs_tx_debug-unsupported-multiplexer-values.h" #include "can_cfg_rx-message-definitions.h" @@ -67,9 +70,6 @@ #include /*========== Macros and Definitions =========================================*/ - -#define CANRX_BIT (1u) - /** @{ * multiplexer setup for the debug message */ @@ -92,15 +92,17 @@ * 'VersionInformation' in the 'Debug message */ #define CANRX_MUX_VERSION_INFO_SIGNAL_GET_BMS_SOFTWARE_VERSION_START_BIT (8u) -#define CANRX_MUX_VERSION_INFO_SIGNAL_GET_BMS_SOFTWARE_VERSION_LENGTH (CANRX_BIT) +#define CANRX_MUX_VERSION_INFO_SIGNAL_GET_BMS_SOFTWARE_VERSION_LENGTH (CAN_BIT) #define CANRX_MUX_VERSION_INFO_SIGNAL_GET_MCU_UNIQUE_DIE_ID_START_BIT (9u) -#define CANRX_MUX_VERSION_INFO_SIGNAL_GET_MCU_UNIQUE_DIE_ID_LENGTH (CANRX_BIT) +#define CANRX_MUX_VERSION_INFO_SIGNAL_GET_MCU_UNIQUE_DIE_ID_LENGTH (CAN_BIT) #define CANRX_MUX_VERSION_INFO_SIGNAL_GET_MCU_LOT_NUMBER_START_BIT (10u) -#define CANRX_MUX_VERSION_INFO_SIGNAL_GET_MCU_LOT_NUMBER_LENGTH (CANRX_BIT) +#define CANRX_MUX_VERSION_INFO_SIGNAL_GET_MCU_LOT_NUMBER_LENGTH (CAN_BIT) #define CANRX_MUX_VERSION_INFO_SIGNAL_GET_MCU_WAFER_INFORMATION_START_BIT (11u) -#define CANRX_MUX_VERSION_INFO_SIGNAL_GET_MCU_WAFER_INFORMATION_LENGTH (CANRX_BIT) +#define CANRX_MUX_VERSION_INFO_SIGNAL_GET_MCU_WAFER_INFORMATION_LENGTH (CAN_BIT) #define CANRX_MUX_VERSION_INFO_SIGNAL_GET_COMMIT_HASH_START_BIT (12u) -#define CANRX_MUX_VERSION_INFO_SIGNAL_GET_COMMIT_HASH_LENGTH (CANRX_BIT) +#define CANRX_MUX_VERSION_INFO_SIGNAL_GET_COMMIT_HASH_LENGTH (CAN_BIT) +#define CANRX_MUX_VERSION_INFO_SIGNAL_GET_BUILD_CONFIGURATION_START_BIT (13u) +#define CANRX_MUX_VERSION_INFO_SIGNAL_GET_BUILD_CONFIGURATION_LENGTH (CAN_BIT) /** @} */ /** @{ @@ -130,7 +132,7 @@ * in the 'Debug' message */ #define CANRX_MUX_SOFTWARE_SIGNAL_TRIGGER_SOFTWARE_RESET_START_BIT (39u) -#define CANRX_MUX_SOFTWARE_SIGNAL_TRIGGER_SOFTWARE_RESET_LENGTH (CANRX_BIT) +#define CANRX_MUX_SOFTWARE_SIGNAL_TRIGGER_SOFTWARE_RESET_LENGTH (CAN_BIT) /** @} */ /** @{ @@ -138,7 +140,7 @@ * in the 'Debug' message */ #define CANRX_MUX_SOFTWARE_SIGNAL_TRIGGER_FRAM_INITIALIZATION_START_BIT (27u) -#define CANRX_MUX_SOFTWARE_SIGNAL_TRIGGER_FRAM_INITIALIZATION_LENGTH (CANRX_BIT) +#define CANRX_MUX_SOFTWARE_SIGNAL_TRIGGER_FRAM_INITIALIZATION_LENGTH (CAN_BIT) /** @} */ /** @{ @@ -146,7 +148,7 @@ * in the 'Debug' message */ #define CANRX_MUX_SOFTWARE_SIGNAL_TRIGGER_REQUEST_RTC_TIME_START_BIT (8u) -#define CANRX_MUX_SOFTWARE_SIGNAL_TRIGGER_REQUEST_RTC_TIME_LENGTH (CANRX_BIT) +#define CANRX_MUX_SOFTWARE_SIGNAL_TRIGGER_REQUEST_RTC_TIME_LENGTH (CAN_BIT) /** @} */ /*========== Static Constant and Variable Definitions =======================*/ @@ -244,7 +246,7 @@ static uint8_t CANRX_GetDay(uint64_t messageData, CAN_ENDIANNESS_e endianness); * @brief Parses the CAN message to retrieve the month information * @param messageData message data of the CAN message * @param endianness endianness of the message -* @returns Decoded month information + * @returns Decoded month information */ static uint8_t CANRX_GetMonth(uint64_t messageData, CAN_ENDIANNESS_e endianness); @@ -252,7 +254,7 @@ static uint8_t CANRX_GetMonth(uint64_t messageData, CAN_ENDIANNESS_e endianness) * @brief Parses the CAN message to retrieve the year information * @param messageData message data of the CAN message * @param endianness endianness of the message -* @returns Decoded year information + * @returns Decoded year information */ static uint8_t CANRX_GetYear(uint64_t messageData, CAN_ENDIANNESS_e endianness); @@ -321,6 +323,19 @@ static bool CANRX_CheckIfCommitHashIsRequested(uint64_t messageData, CAN_ENDIANN */ static void CANRX_TriggerCommitHashMessage(void); +/** + * @brief Check if the build configuration is requested + * @param messageData message data of the CAN message + * @param endianness endianness of the message + * @returns true if the information is requested, false otherwise + */ +static bool CANRX_CheckIfBuildConfigurationIsRequested(uint64_t messageData, CAN_ENDIANNESS_e endianness); + +/** + * @brief Triggers sending of the build configuration message + */ +static void CANRX_TriggerBuildConfigurationMessage(void); + /** * @brief Check if a software reset is requested * @param messageData message data of the CAN message @@ -353,7 +368,7 @@ static void CANRX_TriggerTimeInfoMessage(void); /*========== Static Function Implementations ================================*/ static uint8_t CANRX_GetHundredthOfSeconds(uint64_t messageData, CAN_ENDIANNESS_e endianness) { - /* AXIVION Routine Generic-MissingParameterAssert: messageData: parameter accept whole range */ + /* AXIVION Routine Generic-MissingParameterAssert: messageData: parameter accepts whole range */ FAS_ASSERT(endianness == CAN_BIG_ENDIAN); uint64_t signalData = 0u; @@ -369,7 +384,7 @@ static uint8_t CANRX_GetHundredthOfSeconds(uint64_t messageData, CAN_ENDIANNESS_ } static uint8_t CANRX_GetSeconds(uint64_t messageData, CAN_ENDIANNESS_e endianness) { - /* AXIVION Routine Generic-MissingParameterAssert: messageData: parameter accept whole range */ + /* AXIVION Routine Generic-MissingParameterAssert: messageData: parameter accepts whole range */ FAS_ASSERT(endianness == CAN_BIG_ENDIAN); uint64_t signalData = 0u; @@ -386,7 +401,7 @@ static uint8_t CANRX_GetSeconds(uint64_t messageData, CAN_ENDIANNESS_e endiannes } static uint8_t CANRX_GetMinutes(uint64_t messageData, CAN_ENDIANNESS_e endianness) { - /* AXIVION Routine Generic-MissingParameterAssert: messageData: parameter accept whole range */ + /* AXIVION Routine Generic-MissingParameterAssert: messageData: parameter accepts whole range */ FAS_ASSERT(endianness == CAN_BIG_ENDIAN); uint64_t signalData = 0u; @@ -403,7 +418,7 @@ static uint8_t CANRX_GetMinutes(uint64_t messageData, CAN_ENDIANNESS_e endiannes } static uint8_t CANRX_GetHours(uint64_t messageData, CAN_ENDIANNESS_e endianness) { - /* AXIVION Routine Generic-MissingParameterAssert: messageData: parameter accept whole range */ + /* AXIVION Routine Generic-MissingParameterAssert: messageData: parameter accepts whole range */ FAS_ASSERT(endianness == CAN_BIG_ENDIAN); uint64_t signalData = 0u; @@ -416,7 +431,7 @@ static uint8_t CANRX_GetHours(uint64_t messageData, CAN_ENDIANNESS_e endianness) } static uint8_t CANRX_GetWeekday(uint64_t messageData, CAN_ENDIANNESS_e endianness) { - /* AXIVION Routine Generic-MissingParameterAssert: messageData: parameter accept whole range */ + /* AXIVION Routine Generic-MissingParameterAssert: messageData: parameter accepts whole range */ FAS_ASSERT(endianness == CAN_BIG_ENDIAN); uint64_t signalData = 0u; @@ -433,7 +448,7 @@ static uint8_t CANRX_GetWeekday(uint64_t messageData, CAN_ENDIANNESS_e endiannes } static uint8_t CANRX_GetDay(uint64_t messageData, CAN_ENDIANNESS_e endianness) { - /* AXIVION Routine Generic-MissingParameterAssert: messageData: parameter accept whole range */ + /* AXIVION Routine Generic-MissingParameterAssert: messageData: parameter accepts whole range */ FAS_ASSERT(endianness == CAN_BIG_ENDIAN); uint64_t signalData = 0u; @@ -446,7 +461,7 @@ static uint8_t CANRX_GetDay(uint64_t messageData, CAN_ENDIANNESS_e endianness) { } static uint8_t CANRX_GetMonth(uint64_t messageData, CAN_ENDIANNESS_e endianness) { - /* AXIVION Routine Generic-MissingParameterAssert: messageData: parameter accept whole range */ + /* AXIVION Routine Generic-MissingParameterAssert: messageData: parameter accepts whole range */ FAS_ASSERT(endianness == CAN_BIG_ENDIAN); /* Get month information form the message and return that value */ @@ -459,7 +474,7 @@ static uint8_t CANRX_GetMonth(uint64_t messageData, CAN_ENDIANNESS_e endianness) } static uint8_t CANRX_GetYear(uint64_t messageData, CAN_ENDIANNESS_e endianness) { - /* AXIVION Routine Generic-MissingParameterAssert: messageData: parameter accept whole range */ + /* AXIVION Routine Generic-MissingParameterAssert: messageData: parameter accepts whole range */ FAS_ASSERT(endianness == CAN_BIG_ENDIAN); /* Get year information form the message and return that value */ @@ -472,26 +487,26 @@ static uint8_t CANRX_GetYear(uint64_t messageData, CAN_ENDIANNESS_e endianness) } static void CANRX_ProcessRtcMux(uint64_t messageData, CAN_ENDIANNESS_e endianness) { - /* AXIVION Routine Generic-MissingParameterAssert: messageData: parameter accept whole range */ + /* AXIVION Routine Generic-MissingParameterAssert: messageData: parameter accepts whole range */ FAS_ASSERT(endianness == CAN_BIG_ENDIAN); - RTC_TIME_DATA_s time = {0}; - - time.hundredthOfSeconds = CANRX_GetHundredthOfSeconds(messageData, endianness); - time.seconds = CANRX_GetSeconds(messageData, endianness); - time.minutes = CANRX_GetMinutes(messageData, endianness); - time.hours = CANRX_GetHours(messageData, endianness); - time.weekday = CANRX_GetWeekday(messageData, endianness); - time.day = CANRX_GetDay(messageData, endianness); - time.month = CANRX_GetMonth(messageData, endianness); - time.year = CANRX_GetYear(messageData, endianness); - if (OS_SendToBackOfQueue(ftsk_rtcSetTimeQueue, (void *)&time, 0u) == OS_SUCCESS) { + RTC_TIME_DATA_s timeData = {0}; + + timeData.hundredthOfSeconds = CANRX_GetHundredthOfSeconds(messageData, endianness); + timeData.seconds = CANRX_GetSeconds(messageData, endianness); + timeData.minutes = CANRX_GetMinutes(messageData, endianness); + timeData.hours = CANRX_GetHours(messageData, endianness); + timeData.weekday = CANRX_GetWeekday(messageData, endianness); + timeData.day = CANRX_GetDay(messageData, endianness); + timeData.month = CANRX_GetMonth(messageData, endianness); + timeData.year = CANRX_GetYear(messageData, endianness); + if (OS_SendToBackOfQueue(ftsk_rtcSetTimeQueue, (void *)&timeData, 0u) == OS_SUCCESS) { /* queue is not full */ } } static bool CANRX_CheckIfBmsSoftwareVersionIsRequested(uint64_t messageData, CAN_ENDIANNESS_e endianness) { - /* AXIVION Routine Generic-MissingParameterAssert: messageData: parameter accept whole range */ + /* AXIVION Routine Generic-MissingParameterAssert: messageData: parameter accepts whole range */ FAS_ASSERT(endianness == CAN_BIG_ENDIAN); bool isRequested = false; @@ -518,7 +533,7 @@ static void CANRX_TriggerBmsSoftwareVersionMessage(void) { } static bool CANRX_CheckIfMcuUniqueDieIdIsRequested(uint64_t messageData, CAN_ENDIANNESS_e endianness) { - /* AXIVION Routine Generic-MissingParameterAssert: messageData: parameter accept whole range */ + /* AXIVION Routine Generic-MissingParameterAssert: messageData: parameter accepts whole range */ FAS_ASSERT(endianness == CAN_BIG_ENDIAN); bool isRequested = false; @@ -545,7 +560,7 @@ static void CANRX_TriggerMcuUniqueDieIdMessage(void) { } static bool CANRX_CheckIfMcuLotNumberIsRequested(uint64_t messageData, CAN_ENDIANNESS_e endianness) { - /* AXIVION Routine Generic-MissingParameterAssert: messageData: parameter accept whole range */ + /* AXIVION Routine Generic-MissingParameterAssert: messageData: parameter accepts whole range */ FAS_ASSERT(endianness == CAN_BIG_ENDIAN); bool isRequested = false; @@ -572,7 +587,7 @@ static void CANRX_TriggerMcuLotNumberMessage(void) { } static bool CANRX_CheckIfMcuWaferInformationIsRequested(uint64_t messageData, CAN_ENDIANNESS_e endianness) { - /* AXIVION Routine Generic-MissingParameterAssert: messageData: parameter accept whole range */ + /* AXIVION Routine Generic-MissingParameterAssert: messageData: parameter accepts whole range */ FAS_ASSERT(endianness == CAN_BIG_ENDIAN); bool isRequested = false; @@ -598,7 +613,7 @@ static void CANRX_TriggerCommitHashMessage(void) { } } static bool CANRX_CheckIfCommitHashIsRequested(uint64_t messageData, CAN_ENDIANNESS_e endianness) { - /* AXIVION Routine Generic-MissingParameterAssert: messageData: parameter accept whole range */ + /* AXIVION Routine Generic-MissingParameterAssert: messageData: parameter accepts whole range */ FAS_ASSERT(endianness == CAN_BIG_ENDIAN); bool isRequested = false; @@ -617,6 +632,32 @@ static bool CANRX_CheckIfCommitHashIsRequested(uint64_t messageData, CAN_ENDIANN return isRequested; } +static void CANRX_TriggerBuildConfigurationMessage(void) { + /* send the debug message containing the MCU wafer information and trap if this does not work */ + if (CANTX_DebugBuildConfiguration() != STD_OK) { + FAS_ASSERT(FAS_TRAP); + } +} +static bool CANRX_CheckIfBuildConfigurationIsRequested(uint64_t messageData, CAN_ENDIANNESS_e endianness) { + /* AXIVION Routine Generic-MissingParameterAssert: messageData: parameter accepts whole range */ + FAS_ASSERT(endianness == CAN_BIG_ENDIAN); + + bool isRequested = false; + uint64_t signalData = 0u; + + /* get MCU wafer information bit from the CAN message */ + CAN_RxGetSignalDataFromMessageData( + messageData, + CANRX_MUX_VERSION_INFO_SIGNAL_GET_BUILD_CONFIGURATION_START_BIT, + CANRX_MUX_VERSION_INFO_SIGNAL_GET_BUILD_CONFIGURATION_LENGTH, + &signalData, + endianness); + if (signalData == 1u) { + isRequested = true; + } + return isRequested; +} + static void CANRX_TriggerMcuWaferInformationMessage(void) { /* send the debug message containing the MCU wafer information and trap if this does not work */ if (CANTX_DebugResponse(CANTX_DEBUG_RESPONSE_TRANSMIT_MCU_WAFER_INFORMATION) != STD_OK) { @@ -625,7 +666,7 @@ static void CANRX_TriggerMcuWaferInformationMessage(void) { } static void CANRX_ProcessVersionInformationMux(uint64_t messageData, CAN_ENDIANNESS_e endianness) { - /* AXIVION Routine Generic-MissingParameterAssert: messageData: parameter accept whole range */ + /* AXIVION Routine Generic-MissingParameterAssert: messageData: parameter accepts whole range */ FAS_ASSERT(endianness == CAN_BIG_ENDIAN); /* check if any of the version information is requested and if so transmit the information */ @@ -644,10 +685,13 @@ static void CANRX_ProcessVersionInformationMux(uint64_t messageData, CAN_ENDIANN if (CANRX_CheckIfCommitHashIsRequested(messageData, endianness) == true) { CANRX_TriggerCommitHashMessage(); } + if (CANRX_CheckIfBuildConfigurationIsRequested(messageData, endianness) == true) { + CANRX_TriggerBuildConfigurationMessage(); + } } static bool CANRX_CheckIfSoftwareResetIsRequested(uint64_t messageData, CAN_ENDIANNESS_e endianness) { - /* AXIVION Routine Generic-MissingParameterAssert: messageData: parameter accept whole range */ + /* AXIVION Routine Generic-MissingParameterAssert: messageData: parameter accepts whole range */ FAS_ASSERT(endianness == CAN_BIG_ENDIAN); bool isRequested = false; @@ -667,7 +711,7 @@ static bool CANRX_CheckIfSoftwareResetIsRequested(uint64_t messageData, CAN_ENDI } static bool CANRX_CheckIfFramInitializationIsRequested(uint64_t messageData, CAN_ENDIANNESS_e endianness) { - /* AXIVION Routine Generic-MissingParameterAssert: messageData: parameter accept whole range */ + /* AXIVION Routine Generic-MissingParameterAssert: messageData: parameter accepts whole range */ FAS_ASSERT(endianness == CAN_BIG_ENDIAN); bool isRequested = false; @@ -687,7 +731,7 @@ static bool CANRX_CheckIfFramInitializationIsRequested(uint64_t messageData, CAN } static void CANRX_ProcessSoftwareResetMux(uint64_t messageData, CAN_ENDIANNESS_e endianness) { - /* AXIVION Routine Generic-MissingParameterAssert: messageData: parameter accept whole range */ + /* AXIVION Routine Generic-MissingParameterAssert: messageData: parameter accepts whole range */ FAS_ASSERT(endianness == CAN_BIG_ENDIAN); /* trigger software reset, if requested*/ @@ -697,7 +741,7 @@ static void CANRX_ProcessSoftwareResetMux(uint64_t messageData, CAN_ENDIANNESS_e } static void CANRX_ProcessFramInitializationMux(uint64_t messageData, CAN_ENDIANNESS_e endianness) { - /* AXIVION Routine Generic-MissingParameterAssert: messageData: parameter accept whole range */ + /* AXIVION Routine Generic-MissingParameterAssert: messageData: parameter accepts whole range */ FAS_ASSERT(endianness == CAN_BIG_ENDIAN); /* trigger FRAM initialization, if requested*/ @@ -707,7 +751,7 @@ static void CANRX_ProcessFramInitializationMux(uint64_t messageData, CAN_ENDIANN } static void CANRX_ProcessTimeInfoMux(uint64_t messageData, CAN_ENDIANNESS_e endianness) { - /* AXIVION Routine Generic-MissingParameterAssert: messageData: parameter accept whole range */ + /* AXIVION Routine Generic-MissingParameterAssert: messageData: parameter accepts whole range */ FAS_ASSERT(endianness == CAN_BIG_ENDIAN); /* trigger RTC time information message, if requested*/ @@ -717,7 +761,7 @@ static void CANRX_ProcessTimeInfoMux(uint64_t messageData, CAN_ENDIANNESS_e endi } static bool CANRX_CheckIfTimeInfoIsRequested(uint64_t messageData, CAN_ENDIANNESS_e endianness) { - /* AXIVION Routine Generic-MissingParameterAssert: messageData: parameter accept whole range */ + /* AXIVION Routine Generic-MissingParameterAssert: messageData: parameter accepts whole range */ FAS_ASSERT(endianness == CAN_BIG_ENDIAN); bool isRequested = false; @@ -782,7 +826,7 @@ extern uint32_t CANRX_Debug( CANRX_ProcessTimeInfoMux(messageData, message.endianness); break; default: - CANTX_UnsupportedMultiplexerValue(message.id, (uint32_t)muxValue); + CANTX_DebugUnsupportedMultiplexerVal(message.id, (uint32_t)muxValue); break; } return 0u; @@ -836,6 +880,9 @@ extern void TEST_CANRX_TriggerTimeInfoMessage(void) { extern void TEST_CANRX_TriggerCommitHashMessage(void) { CANRX_TriggerCommitHashMessage(); } +extern void TEST_CANRX_TriggerBuildConfigurationMessage(void) { + CANRX_TriggerBuildConfigurationMessage(); +} /* export check if functions */ extern bool TEST_CANRX_CheckIfBmsSoftwareVersionIsRequested(uint64_t messageData, CAN_ENDIANNESS_e endianness) { @@ -862,6 +909,9 @@ extern bool TEST_CANRX_CheckIfTimeInfoIsRequested(uint64_t messageData, CAN_ENDI extern bool TEST_CANRX_CheckIfCommitHashIsRequested(uint64_t messageData, CAN_ENDIANNESS_e endianness) { return CANRX_CheckIfCommitHashIsRequested(messageData, endianness); } +extern bool TEST_CANRX_CheckIfBuildConfigurationIsRequested(uint64_t messageData, CAN_ENDIANNESS_e endianness) { + return CANRX_CheckIfBuildConfigurationIsRequested(messageData, endianness); +} /* export mux processing functions */ extern void TEST_CANRX_ProcessVersionInformationMux(uint64_t messageData, CAN_ENDIANNESS_e endianness) { diff --git a/src/app/driver/can/cbs/rx/can_cbs_rx_imd-info.c b/src/app/driver/can/cbs/rx/can_cbs_rx_imd-info.c index fb69f056..a62e84c4 100644 --- a/src/app/driver/can/cbs/rx/can_cbs_rx_imd-info.c +++ b/src/app/driver/can/cbs/rx/can_cbs_rx_imd-info.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,9 +43,9 @@ * @file can_cbs_rx_imd-info.c * @author foxBMS Team * @date 2021-04-20 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup DRIVER + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS * @prefix CANRX * * @brief CAN driver Rx callback implementation @@ -53,6 +53,12 @@ */ /*========== Includes =======================================================*/ +#include "can_cbs_rx_imd-info.h" + +#include "bender_iso165c_cfg.h" + +/* AXIVION Next Codeline Generic-LocalInclude: 'can_cbs_rx.h' declares the + * prototype for the callback 'CANRX_ImdInfo' */ #include "can_cbs_rx.h" #include "can_cfg_rx-message-definitions.h" #include "can_helper.h" @@ -62,13 +68,292 @@ /*========== Macros and Definitions =========================================*/ +/* Can message start bit and length defines */ +#define CANRX_IMD_INFO_INSULATION_MEASUREMENT_START_BIT (0u) +#define CANRX_IMD_INFO_INSULATION_MEASUREMENT_LENGTH (16u) +#define CANRX_IMD_INFO_IMC_INSULATION_FAULT_START_BIT (16u) +#define CANRX_IMD_INFO_IMC_INSULATION_FAULT_LENGTH (CAN_BIT) +#define CANRX_IMD_INFO_IMC_CHASSIS_FAULT_START_BIT (17u) +#define CANRX_IMD_INFO_IMC_CHASSIS_FAULT_LENGTH (CAN_BIT) +#define CANRX_IMD_INFO_IMC_SYSTEM_FAILURE_START_BIT (18u) +#define CANRX_IMD_INFO_IMC_SYSTEM_FAILURE_LENGTH (CAN_BIT) +#define CANRX_IMD_INFO_IMC_CALIBRATION_RUNNING_START_BIT (19u) +#define CANRX_IMD_INFO_IMC_CALIBRATION_RUNNING_LENGTH (CAN_BIT) +#define CANRX_IMD_INFO_IMC_SELF_TEST_RUNNING_START_BIT (20u) +#define CANRX_IMD_INFO_IMC_SELF_TEST_RUNNING_LENGTH (CAN_BIT) +#define CANRX_IMD_INFO_IMC_INSULATION_WARNING_START_BIT (21u) +#define CANRX_IMD_INFO_IMC_INSULATION_WARNING_LENGTH (CAN_BIT) +#define CANRX_IMD_INFO_VIFC_INSULATION_MEASUREMENT_STATUS_START_BIT (32u) +#define CANRX_IMD_INFO_VIFC_INSULATION_MEASUREMENT_STATUS_LENGTH (CAN_BIT) +#define CANRX_IMD_INFO_VIFC_IMC_CONNECTIVITY_START_BIT (33u) +#define CANRX_IMD_INFO_VIFC_IMC_CONNECTIVITY_LENGTH (CAN_BIT) +#define CANRX_IMD_INFO_VIFC_IMC_ALIVE_STATUS_START_BIT (34u) +#define CANRX_IMD_INFO_VIFC_IMC_ALIVE_STATUS_LENGTH (CAN_BIT) +#define CANRX_IMD_INFO_VIFC_COMMAND_START_BIT (35u) +#define CANRX_IMD_INFO_VIFC_COMMAND_LENGTH (CAN_BIT) +#define CANRX_IMD_INFO_VIFC_RESISTANCE_VALUE_OUTDATED_START_BIT (40u) +#define CANRX_IMD_INFO_VIFC_RESISTANCE_VALUE_OUTDATED_LENGTH (CAN_BIT) +#define CANRX_IMD_INFO_VIFC_OVERALL_SELF_TEST_START_BIT (44u) +#define CANRX_IMD_INFO_VIFC_OVERALL_SELF_TEST_LENGTH (CAN_BIT) +#define CANRX_IMD_INFO_VIFC_PARAMETER_CONFIG_SELF_TEST_START_BIT (45u) +#define CANRX_IMD_INFO_VIFC_PARAMETER_CONFIG_SELF_TEST_LENGTH (CAN_BIT) + /*========== Static Constant and Variable Definitions =======================*/ +/** + * @brief Reads the information from the can data and transfers it to a can buffer element + * @param messageDlc Dlc size of the message + * @param kpkCanData Pointer to the data of the received message + * @param canBuffer Pointer to the can buffer element where information is stored + */ +static void CANRX_TransferImdInfoMessageToCanBuffer( + uint8_t messageDlc, + const uint8_t *const kpkCanData, + CAN_BUFFER_ELEMENT_s *canBuffer); + +/** + * @brief Reads measured resistance from imd info and writes it to the data table + * @param messageData Data from the IMD info message + * @param pTableInsulationMonitoring Pointer to the data table where information will be written + */ +static void CANRX_GetMeasuredResistance( + uint64_t messageData, + DATA_BLOCK_INSULATION_MONITORING_s *pTableInsulationMonitoring); + +/** + * @brief Reads imc status from imd info and sets flags of the data table + * @param messageData Data from the IMD info message + * @param pTableInsulationMonitoring Pointer to the data table where information will be written + */ +static void CANRX_GetImcStatus(uint64_t messageData, DATA_BLOCK_INSULATION_MONITORING_s *pTableInsulationMonitoring); + +/** + * @brief Reads vifc status from imd info and sets flags of the data table + * @param messageData Data from the IMD info message + * @param pTableInsulationMonitoring Pointer to the data table where information will be written + */ +static void CANRX_GetVifcStatus(uint64_t messageData, DATA_BLOCK_INSULATION_MONITORING_s *pTableInsulationMonitoring); + +/** + * @brief Checks if self test is running + * @param messageData Data from the IMD info message + * @return True if self test is running + */ +static bool CANRX_SelfTestRunning(uint64_t messageData); + +/** + * @brief Checks if insulation measurement is active + * @param messageData Data from the IMD info message + * @return True if insulation measurement is active + */ +static bool CANRX_InsulationMeasurementActive(uint64_t messageData); + +/** + * @brief Checks if a self test has been executed + * @param messageData Data from the IMD info message + * @return True if a self test has been executed + */ +static bool CANRX_SelfTestExecuted(uint64_t messageData); /*========== Extern Constant and Variable Definitions =======================*/ /*========== Static Function Prototypes =====================================*/ /*========== Static Function Implementations ================================*/ +static void CANRX_TransferImdInfoMessageToCanBuffer( + uint8_t messageDlc, + const uint8_t *const kpkCanData, + CAN_BUFFER_ELEMENT_s *canBuffer) { + FAS_ASSERT(0u < messageDlc); + FAS_ASSERT(messageDlc <= CAN_MAX_DLC); + FAS_ASSERT(kpkCanData != NULL_PTR); + FAS_ASSERT(canBuffer != NULL_PTR); + + /* determine dlc size of the message */ + const uint8_t boundedDlc = MATH_MinimumOfTwoUint8_t(messageDlc, CAN_MAX_DLC); + + /* transfer can data to buffer element*/ + for (uint8_t i = 0; i < boundedDlc; i++) { + canBuffer->data[i] = kpkCanData[i]; + } +} + +static void CANRX_GetMeasuredResistance( + uint64_t messageData, + DATA_BLOCK_INSULATION_MONITORING_s *pTableInsulationMonitoring) { + /* AXIVION Routine Generic-MissingParameterAssert: messageData: parameter accept whole range */ + FAS_ASSERT(pTableInsulationMonitoring != NULL_PTR); + uint64_t signalData = 0u; + CAN_RxGetSignalDataFromMessageData( + messageData, + CANRX_IMD_INFO_INSULATION_MEASUREMENT_START_BIT, + CANRX_IMD_INFO_INSULATION_MEASUREMENT_LENGTH, + &signalData, + CAN_LITTLE_ENDIAN); + pTableInsulationMonitoring->insulationResistance_kOhm = (uint32_t)signalData; +} + +static void CANRX_GetImcStatus(uint64_t messageData, DATA_BLOCK_INSULATION_MONITORING_s *pTableInsulationMonitoring) { + /* AXIVION Routine Generic-MissingParameterAssert: messageData: parameter accept whole range */ + FAS_ASSERT(pTableInsulationMonitoring != NULL_PTR); + uint64_t signalData = 0u; + + /* Insulation fault */ + CAN_RxGetSignalDataFromMessageData( + messageData, + CANRX_IMD_INFO_IMC_INSULATION_FAULT_START_BIT, + CANRX_IMD_INFO_IMC_INSULATION_FAULT_LENGTH, + &signalData, + CAN_LITTLE_ENDIAN); + if (signalData == 0u) { + pTableInsulationMonitoring->dfIsCriticalResistanceDetected = false; + } else { + pTableInsulationMonitoring->dfIsCriticalResistanceDetected = true; + } + + /* Chassis fault */ + CAN_RxGetSignalDataFromMessageData( + messageData, + CANRX_IMD_INFO_IMC_CHASSIS_FAULT_START_BIT, + CANRX_IMD_INFO_IMC_CHASSIS_FAULT_LENGTH, + &signalData, + CAN_LITTLE_ENDIAN); + if (signalData == 0u) { + pTableInsulationMonitoring->dfIsChassisFaultDetected = false; + } else { + pTableInsulationMonitoring->dfIsChassisFaultDetected = true; + } + + /* System failure */ + CAN_RxGetSignalDataFromMessageData( + messageData, + CANRX_IMD_INFO_IMC_SYSTEM_FAILURE_START_BIT, + CANRX_IMD_INFO_IMC_SYSTEM_FAILURE_LENGTH, + &signalData, + CAN_LITTLE_ENDIAN); + if (signalData == 0u) { + pTableInsulationMonitoring->dfIsDeviceErrorDetected = false; + pTableInsulationMonitoring->areDeviceFlagsValid = true; + } else { + pTableInsulationMonitoring->dfIsDeviceErrorDetected = true; + pTableInsulationMonitoring->areDeviceFlagsValid = false; + } + + /* Insulation warning */ + CAN_RxGetSignalDataFromMessageData( + messageData, + CANRX_IMD_INFO_IMC_INSULATION_WARNING_START_BIT, + CANRX_IMD_INFO_IMC_INSULATION_WARNING_LENGTH, + &signalData, + CAN_LITTLE_ENDIAN); + if (signalData == 0u) { + pTableInsulationMonitoring->dfIsWarnableResistanceDetected = false; + } else { + pTableInsulationMonitoring->dfIsWarnableResistanceDetected = true; + } +} + +static void CANRX_GetVifcStatus( + /* AXIVION Routine Generic-MissingParameterAssert: messageData: parameter accept whole range */ + uint64_t messageData, + DATA_BLOCK_INSULATION_MONITORING_s *pTableInsulationMonitoring) { + FAS_ASSERT(pTableInsulationMonitoring != NULL_PTR); + uint64_t signalData = 0u; + + /* Insulation measurement status */ + CAN_RxGetSignalDataFromMessageData( + messageData, + CANRX_IMD_INFO_VIFC_INSULATION_MEASUREMENT_STATUS_START_BIT, + CANRX_IMD_INFO_VIFC_INSULATION_MEASUREMENT_STATUS_LENGTH, + &signalData, + CAN_LITTLE_ENDIAN); + if (signalData == 0u) { + pTableInsulationMonitoring->isImdRunning = true; + } else { + pTableInsulationMonitoring->isImdRunning = false; + } + + /* Insulation resistance value outdated */ + CAN_RxGetSignalDataFromMessageData( + messageData, + CANRX_IMD_INFO_VIFC_RESISTANCE_VALUE_OUTDATED_START_BIT, + CANRX_IMD_INFO_VIFC_RESISTANCE_VALUE_OUTDATED_LENGTH, + &signalData, + CAN_LITTLE_ENDIAN); + if (signalData == 0u) { + pTableInsulationMonitoring->dfIsMeasurementUpToDate = true; + } else { + pTableInsulationMonitoring->dfIsMeasurementUpToDate = false; + } +} + +static bool CANRX_SelfTestRunning(uint64_t messageData) { + /* AXIVION Routine Generic-MissingParameterAssert: messageData: parameter accept whole range */ + uint64_t signalData = 0u; + bool selfTestRunning = false; + + /* Check if self test is running */ + CAN_RxGetSignalDataFromMessageData( + messageData, + CANRX_IMD_INFO_IMC_SELF_TEST_RUNNING_START_BIT, + CANRX_IMD_INFO_IMC_SELF_TEST_RUNNING_LENGTH, + &signalData, + CAN_LITTLE_ENDIAN); + if (signalData == 1u) { + selfTestRunning = true; + } + + return selfTestRunning; +} + +static bool CANRX_InsulationMeasurementActive(uint64_t messageData) { + /* AXIVION Routine Generic-MissingParameterAssert: messageData: parameter accept whole range */ + uint64_t signalData = 0u; + bool insulationMeasurementActive = false; + + /* Check if insulation measurement is active*/ + CAN_RxGetSignalDataFromMessageData( + messageData, + CANRX_IMD_INFO_VIFC_INSULATION_MEASUREMENT_STATUS_START_BIT, + CANRX_IMD_INFO_VIFC_INSULATION_MEASUREMENT_STATUS_LENGTH, + &signalData, + CAN_LITTLE_ENDIAN); + if (signalData == 0u) { + insulationMeasurementActive = true; + } + return insulationMeasurementActive; +} + +static bool CANRX_SelfTestExecuted(uint64_t messageData) { + /* AXIVION Routine Generic-MissingParameterAssert: messageData: parameter accept whole range */ + uint64_t signalData = 0u; + bool selfTestExecuted = false; + +#ifdef I165C_SELF_TEST_LONG + /* Check if overall self test has been executed */ + CAN_RxGetSignalDataFromMessageData( + messageData, + CANRX_IMD_INFO_VIFC_OVERALL_SELF_TEST_START_BIT, + CANRX_IMD_INFO_VIFC_OVERALL_SELF_TEST_LENGTH, + &signalData, + CAN_LITTLE_ENDIAN); + if (signalData == 0u) { + selfTestExecuted = true; + } +#else + /* Check if parameter self test has been executed */ + CAN_RxGetSignalDataFromMessageData( + messageData, + CANRX_IMD_INFO_VIFC_PARAMETER_CONFIG_SELF_TEST_START_BIT, + CANRX_IMD_INFO_VIFC_PARAMETER_CONFIG_SELF_TEST_LENGTH, + &signalData, + CAN_LITTLE_ENDIAN); + if (signalData == 0u) { + selfTestExecuted = true; + } +#endif + + return selfTestExecuted; +} /*========== Extern Function Implementations ================================*/ extern uint32_t CANRX_ImdInfo( @@ -78,51 +363,129 @@ extern uint32_t CANRX_ImdInfo( /* This handler is only implemented for little endian */ FAS_ASSERT(message.endianness == CAN_LITTLE_ENDIAN); FAS_ASSERT(message.id == CANRX_IMD_INFO_ID); - FAS_ASSERT(message.idType == CANRX_IMD_ID_TYPE); + FAS_ASSERT(message.idType == CANRX_IMD_INFO_ID_TYPE); FAS_ASSERT(message.dlc <= CAN_MAX_DLC); /* Currently max 8 bytes in a CAN frame */ FAS_ASSERT(kpkCanData != NULL_PTR); FAS_ASSERT(kpkCanShim != NULL_PTR); - CAN_BUFFER_ELEMENT_s canMessage = {0}; - uint32_t retVal = 1u; - const uint8_t boundedDlc = MATH_MinimumOfTwoUint8_t(message.dlc, CAN_MAX_DLC); + /* set up can buffer element */ + CAN_BUFFER_ELEMENT_s canBuffer = { + .canNode = I165C_CAN_NODE, .id = message.id, .idType = message.idType, .data = {0u}}; + uint32_t retVal = 1u; - canMessage.id = message.id; - for (uint8_t i = 0; i < boundedDlc; i++) { - canMessage.data[i] = kpkCanData[i]; - } - if (OS_SendToBackOfQueue(*(kpkCanShim->pQueueImd), (void *)&canMessage, 0u) == OS_SUCCESS) { + /* copy message data to buffer element */ + CANRX_TransferImdInfoMessageToCanBuffer(message.dlc, kpkCanData, &canBuffer); + + /*send buffer element to the back of queue*/ + if (OS_SendToBackOfQueue(*(kpkCanShim->pQueueImd), (void *)&canBuffer, 0u) == OS_SUCCESS) { retVal = 0u; } return retVal; } -extern uint32_t CANRX_ImdResponse( - CAN_MESSAGE_PROPERTIES_s message, +extern void CANRX_ImdInfoGetDataFromMessage( const uint8_t *const kpkCanData, - const CAN_SHIM_s *const kpkCanShim) { - /* This handler is only implemented for little endian */ - FAS_ASSERT(message.endianness == CAN_LITTLE_ENDIAN); - FAS_ASSERT(message.id == CANRX_IMD_RESPONSE_ID); - FAS_ASSERT(message.idType == CANRX_IMD_ID_TYPE); - FAS_ASSERT(message.dlc <= CAN_MAX_DLC); /* Currently max 8 bytes in a CAN frame */ + DATA_BLOCK_INSULATION_MONITORING_s *pTableInsulationMonitoring) { FAS_ASSERT(kpkCanData != NULL_PTR); - FAS_ASSERT(kpkCanShim != NULL_PTR); + FAS_ASSERT(pTableInsulationMonitoring != NULL_PTR); - const uint8_t boundedDlc = MATH_MinimumOfTwoUint8_t(message.dlc, CAN_MAX_DLC); + uint64_t messageData = 0u; - CAN_BUFFER_ELEMENT_s canMessage = {0}; - uint32_t retVal = 1u; + CAN_RxGetMessageDataFromCanData(&messageData, kpkCanData, CAN_LITTLE_ENDIAN); - canMessage.id = message.id; - for (uint8_t i = 0; i < boundedDlc; i++) { - canMessage.data[i] = kpkCanData[i]; + CANRX_GetMeasuredResistance(messageData, pTableInsulationMonitoring); + + CANRX_GetImcStatus(messageData, pTableInsulationMonitoring); + + CANRX_GetVifcStatus(messageData, pTableInsulationMonitoring); +} + +extern bool CANRX_ImdInfoCheckMeasurementMode(const uint8_t *const kpkCanData, uint8_t mode) { + FAS_ASSERT(kpkCanData != NULL_PTR); + FAS_ASSERT((mode == I165C_ENABLE_MEASUREMENT) || (mode == I165C_DISABLE_MEASUREMENT)); + + uint64_t messageData = 0u; + uint64_t signalData = 0u; + bool returnValue = false; + + /* get message data from can data */ + CAN_RxGetMessageDataFromCanData(&messageData, kpkCanData, CAN_LITTLE_ENDIAN); + /* get current measurement mode from message data */ + CAN_RxGetSignalDataFromMessageData( + messageData, + CANRX_IMD_INFO_VIFC_INSULATION_MEASUREMENT_STATUS_START_BIT, + CANRX_IMD_INFO_VIFC_INSULATION_MEASUREMENT_STATUS_LENGTH, + &signalData, + CAN_LITTLE_ENDIAN); + + /* Compare input mode with actual mode from IMD */ + uint8_t actualMeasurementMode = (uint8_t)signalData; + if (mode == actualMeasurementMode) { + returnValue = true; } - if (OS_SendToBackOfQueue(*(kpkCanShim->pQueueImd), (void *)&canMessage, 0u) == OS_SUCCESS) { - retVal = 0u; + return returnValue; +} + +extern bool CANRX_ImdInfoHasSelfTestBeenExecuted(const uint8_t *const kpkCanData) { + FAS_ASSERT(kpkCanData != NULL_PTR); + + uint64_t messageData = 0u; + uint64_t signalData = 0u; + bool anySelfTestExecuted = false; + + /* get message data from can data */ + CAN_RxGetMessageDataFromCanData(&messageData, kpkCanData, CAN_LITTLE_ENDIAN); + CAN_RxGetSignalDataFromMessageData( + messageData, + CANRX_IMD_INFO_VIFC_OVERALL_SELF_TEST_START_BIT, + CANRX_IMD_INFO_VIFC_OVERALL_SELF_TEST_LENGTH, + &signalData, + CAN_LITTLE_ENDIAN); + /* test if overall self test has been executed */ + if (signalData == 0u) { + anySelfTestExecuted = true; + } else { + CAN_RxGetSignalDataFromMessageData( + messageData, + CANRX_IMD_INFO_VIFC_PARAMETER_CONFIG_SELF_TEST_START_BIT, + CANRX_IMD_INFO_VIFC_PARAMETER_CONFIG_SELF_TEST_LENGTH, + &signalData, + CAN_LITTLE_ENDIAN); + /* test if parameter config self test has been executed, only in case overall self test has not been executed */ + if (signalData == 0u) { + anySelfTestExecuted = true; + } } - return retVal; + return anySelfTestExecuted; +} + +extern bool CANRX_ImdInfoIsSelfTestFinished(const uint8_t *const kpkCanData) { + FAS_ASSERT(kpkCanData != NULL_PTR); + + uint64_t messageData = 0u; + bool selfTestFinished = true; + + /* Get message data from can data */ + CAN_RxGetMessageDataFromCanData(&messageData, kpkCanData, CAN_LITTLE_ENDIAN); + + if (CANRX_SelfTestRunning(messageData)) { + selfTestFinished = false; + } else { + if (CANRX_InsulationMeasurementActive(messageData)) { + selfTestFinished = false; + } else { + selfTestFinished = CANRX_SelfTestExecuted(messageData); + } + } + + return selfTestFinished; } /*========== Externalized Static Function Implementations (Unit Test) =======*/ #ifdef UNITY_UNIT_TEST +extern void TEST_CANRX_TransferImdInfoMessageToCanBuffer( + uint8_t messageDlc, + const uint8_t *const kpkCanData, + CAN_BUFFER_ELEMENT_s *canBuffer) { + CANRX_TransferImdInfoMessageToCanBuffer(messageDlc, kpkCanData, canBuffer); +} #endif diff --git a/src/app/driver/can/cbs/rx/can_cbs_rx_imd-info.h b/src/app/driver/can/cbs/rx/can_cbs_rx_imd-info.h new file mode 100644 index 00000000..10bdee43 --- /dev/null +++ b/src/app/driver/can/cbs/rx/can_cbs_rx_imd-info.h @@ -0,0 +1,113 @@ +/** + * + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * We kindly request you to use one or more of the following phrases to refer to + * foxBMS in your hardware, software, documentation or advertising materials: + * + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" + * + */ + +/** + * @file can_cbs_rx_imd-info.h + * @author foxBMS Team + * @date 2023-10-09 (date of creation) + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS + * @prefix CANRX + * + * @brief Declarations for handling the extraction of imd info message + * @details This header declares the interface for reading imd info + * messages and everything else that is externally required to be able + * to use that interface. + */ + +#ifndef FOXBMS__CAN_CBS_RX_IMD_INFO_H_ +#define FOXBMS__CAN_CBS_RX_IMD_INFO_H_ + +/*========== Includes =======================================================*/ + +#include "can_cfg.h" +#include "database_cfg.h" + +#include "fstd_types.h" + +#include + +/*========== Macros and Definitions =========================================*/ + +/*========== Extern Constant and Variable Declarations ======================*/ + +/*========== Extern Function Prototypes =====================================*/ +/** + * @brief Gets data from IMD Info message and stores it in data table + * @param kpkCanData Can data from the IMD Info message + * @param pTableInsulationMonitoring Pointer to the data table where data will be written + */ +void CANRX_ImdInfoGetDataFromMessage( + const uint8_t *const kpkCanData, + DATA_BLOCK_INSULATION_MONITORING_s *pTableInsulationMonitoring); + +/** + * @brief Checks the current measurement mode + * @param kpkCanData Can data from the IMD Info message + * @param mode Mode that the actual value is compared to + * @return True if mode from can data and mode are equal + */ +bool CANRX_ImdInfoCheckMeasurementMode(const uint8_t *const kpkCanData, uint8_t mode); + +/** + * @brief Checks if self test has been executed + * @param kpkCanData Can data from the IMD Info message + * @return true if self test has been executed + */ +bool CANRX_ImdInfoHasSelfTestBeenExecuted(const uint8_t *const kpkCanData); + +/** + * @brief Checks if self test has finished + * @param kpkCanData Can data from the IMD Info message + * @return true if self test has finished + */ +bool CANRX_ImdInfoIsSelfTestFinished(const uint8_t *const kpkCanData); + +/*========== Externalized Static Functions Prototypes (Unit Test) ===========*/ +#ifdef UNITY_UNIT_TEST +extern void TEST_CANRX_TransferImdInfoMessageToCanBuffer( + uint8_t messageDlc, + const uint8_t *const kpkCanData, + CAN_BUFFER_ELEMENT_s *canBuffer); +#endif + +#endif /* FOXBMS__CAN_CBS_RX_IMD_INFO_H_ */ diff --git a/src/app/driver/can/cbs/rx/can_cbs_rx_imd-response.c b/src/app/driver/can/cbs/rx/can_cbs_rx_imd-response.c index 91c44b19..c28de92d 100644 --- a/src/app/driver/can/cbs/rx/can_cbs_rx_imd-response.c +++ b/src/app/driver/can/cbs/rx/can_cbs_rx_imd-response.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,9 +43,9 @@ * @file can_cbs_rx_imd-response.c * @author foxBMS Team * @date 2021-04-20 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup DRIVER + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS * @prefix CANRX * * @brief CAN driver Rx callback implementation @@ -53,6 +53,12 @@ */ /*========== Includes =======================================================*/ +#include "can_cbs_rx_imd-response.h" + +#include "bender_iso165c_cfg.h" + +/* AXIVION Next Codeline Generic-LocalInclude: 'can_cbs_rx.h' declares the + * prototype for the callback 'CANRX_ImdResponse' */ #include "can_cbs_rx.h" #include "can_cfg_rx-message-definitions.h" #include "can_helper.h" @@ -61,17 +67,171 @@ #include /*========== Macros and Definitions =========================================*/ +#define CANRX_IMD_RESPONSE_INSULATION_RESISTANCE_MEASUREMENT_START_BIT (8u) +#define CANRX_IMD_RESPONSE_INSULATION_RESISTANCE_MEASUREMENT_LENGTH (16u) +#define CANRX_IMD_RESPONSE_INSULATION_FAULT_BIAS_START_BIT (24u) +#define CANRX_IMD_RESPONSE_INSULATION_FAULT_BIAS_LENGTH (8u) +#define CANRX_IMD_RESPONSE_HV_RELAIS_START_BIT (8u) +#define CANRX_IMD_RESPONSE_HV_RELAIS_LENGTH (16u) +#define CANRX_IMD_RESPONSE_HV_RELAIS_STATE_START_BIT (24u) +#define CANRX_IMD_RESPONSE_HV_RELAIS_STATE_LENGTH (16u) /*========== Static Constant and Variable Definitions =======================*/ /*========== Extern Constant and Variable Definitions =======================*/ /*========== Static Function Prototypes =====================================*/ +/** + * @brief Reads the information from the can data and transfers it to a can buffer element + * @param messageDlc Dlc size of the message + * @param kpkCanData Pointer to the data of the received message + * @param canBuffer Pointer to the can buffer element where information is stored + */ +static void CANRX_TransferImdResponseMessageToCanBuffer( + uint8_t messageDlc, + const uint8_t *const kpkCanData, + CAN_BUFFER_ELEMENT_s *canBuffer); /*========== Static Function Implementations ================================*/ +static void CANRX_TransferImdResponseMessageToCanBuffer( + uint8_t messageDlc, + const uint8_t *const kpkCanData, + CAN_BUFFER_ELEMENT_s *canBuffer) { + FAS_ASSERT(0u < messageDlc); + FAS_ASSERT(messageDlc <= CAN_MAX_DLC); + FAS_ASSERT(kpkCanData != NULL_PTR); + FAS_ASSERT(canBuffer != NULL_PTR); + + /* determine dlc size of the message */ + const uint8_t boundedDlc = MATH_MinimumOfTwoUint8_t(messageDlc, CAN_MAX_DLC); + + /* transfer can data to buffer element*/ + for (uint8_t i = 0; i < boundedDlc; i++) { + canBuffer->data[i] = kpkCanData[i]; + } +} /*========== Extern Function Implementations ================================*/ +extern uint32_t CANRX_ImdResponse( + CAN_MESSAGE_PROPERTIES_s message, + const uint8_t *const kpkCanData, + const CAN_SHIM_s *const kpkCanShim) { + /* This handler is only implemented for little endian */ + FAS_ASSERT(message.endianness == CAN_LITTLE_ENDIAN); + FAS_ASSERT(message.id == CANRX_IMD_RESPONSE_ID); + FAS_ASSERT(message.idType == CANRX_IMD_RESPONSE_ID_TYPE); + FAS_ASSERT(message.dlc <= CAN_MAX_DLC); /* Currently max 8 bytes in a CAN frame */ + FAS_ASSERT(kpkCanData != NULL_PTR); + FAS_ASSERT(kpkCanShim != NULL_PTR); + /* set up can buffer element */ + CAN_BUFFER_ELEMENT_s canBuffer = { + .canNode = I165C_CAN_NODE, .id = message.id, .idType = message.idType, .data = {0u}}; + uint32_t retVal = 1u; + + /* copy message data to buffer element */ + CANRX_TransferImdResponseMessageToCanBuffer(message.dlc, kpkCanData, &canBuffer); + + /*send buffer element to the back of queue*/ + if (OS_SendToBackOfQueue(*(kpkCanShim->pQueueImd), (void *)&canBuffer, 0u) == OS_SUCCESS) { + retVal = 0u; + } + return retVal; +} + +extern void CANRX_ImdResponseReadInsulationResistance( + const uint8_t *const kpkCanData, + DATA_BLOCK_INSULATION_MONITORING_s *pTableInsulationMonitoring) { + FAS_ASSERT(kpkCanData != NULL_PTR); + FAS_ASSERT(pTableInsulationMonitoring != NULL_PTR); + + uint64_t messageData = 0u; + uint64_t signalData = 0u; + + /* Get measured insulation resistance and write it to the datatable */ + CAN_RxGetMessageDataFromCanData(&messageData, kpkCanData, CAN_LITTLE_ENDIAN); + CAN_RxGetSignalDataFromMessageData( + messageData, + CANRX_IMD_RESPONSE_INSULATION_RESISTANCE_MEASUREMENT_START_BIT, + CANRX_IMD_RESPONSE_INSULATION_RESISTANCE_MEASUREMENT_LENGTH, + &signalData, + CAN_LITTLE_ENDIAN); + + pTableInsulationMonitoring->insulationResistance_kOhm = (uint32_t)signalData; +} + +extern void CANRX_ImdResponseCheckInsulationFaultTendency( + const uint8_t *const kpkCanData, + DATA_BLOCK_INSULATION_MONITORING_s *pTableInsulationMonitoring) { + FAS_ASSERT(kpkCanData != NULL_PTR); + FAS_ASSERT(pTableInsulationMonitoring != NULL_PTR); + + uint64_t messageData = 0u; + uint64_t signalData = 0u; + + /* Get insulation fault bias */ + CAN_RxGetMessageDataFromCanData(&messageData, kpkCanData, CAN_LITTLE_ENDIAN); + CAN_RxGetSignalDataFromMessageData( + messageData, + CANRX_IMD_RESPONSE_INSULATION_FAULT_BIAS_START_BIT, + CANRX_IMD_RESPONSE_INSULATION_FAULT_BIAS_LENGTH, + &signalData, + CAN_LITTLE_ENDIAN); + + if (signalData == I165C_BIAS_TO_HV_PLUS) { + pTableInsulationMonitoring->dfIsChassisShortToHvPlus = true; + pTableInsulationMonitoring->dfIsChassisShortToHvMinus = false; + } else if (signalData == I165C_BIAS_TO_HV_MINUS) { + pTableInsulationMonitoring->dfIsChassisShortToHvMinus = true; + pTableInsulationMonitoring->dfIsChassisShortToHvPlus = false; + } else { + pTableInsulationMonitoring->dfIsChassisShortToHvPlus = false; + pTableInsulationMonitoring->dfIsChassisShortToHvMinus = false; + } +} + +extern bool CANRX_ImdResponseCheckRelayState(const uint8_t *const kpkCanData, uint8_t relay, uint8_t relayState) { + FAS_ASSERT(kpkCanData != NULL_PTR); + FAS_ASSERT((relay == I165C_D_VIFC_HV_RELAIS_NEGATIVE) || (relay == I165C_D_VIFC_HV_RELAIS_POSITIVE)); + FAS_ASSERT((relayState == I165C_RELAY_STATE_OPEN) || (relayState == I165C_RELAY_STATE_CLOSED)); + + uint64_t messageData = 0u; + uint64_t signalData = 0u; + bool checkSuccess = true; + + /* Get relay state from response message */ + CAN_RxGetMessageDataFromCanData(&messageData, kpkCanData, CAN_LITTLE_ENDIAN); + + /* Check if relay matches */ + CAN_RxGetSignalDataFromMessageData( + messageData, + CANRX_IMD_RESPONSE_HV_RELAIS_START_BIT, + CANRX_IMD_RESPONSE_HV_RELAIS_LENGTH, + &signalData, + CAN_LITTLE_ENDIAN); + if (relay != signalData) { + checkSuccess = false; + } + + /* Check if relay state matches */ + CAN_RxGetSignalDataFromMessageData( + messageData, + CANRX_IMD_RESPONSE_HV_RELAIS_STATE_START_BIT, + CANRX_IMD_RESPONSE_HV_RELAIS_STATE_LENGTH, + &signalData, + CAN_LITTLE_ENDIAN); + if (relayState != signalData) { + checkSuccess = false; + } + + return checkSuccess; +} /*========== Externalized Static Function Implementations (Unit Test) =======*/ #ifdef UNITY_UNIT_TEST +extern void TEST_CANRX_TransferImdResponseMessageToCanBuffer( + uint8_t messageDlc, + const uint8_t *const kpkCanData, + CAN_BUFFER_ELEMENT_s *canBuffer) { + CANRX_TransferImdResponseMessageToCanBuffer(messageDlc, kpkCanData, canBuffer); +} #endif diff --git a/src/app/driver/can/cbs/rx/can_cbs_rx_imd-response.h b/src/app/driver/can/cbs/rx/can_cbs_rx_imd-response.h new file mode 100644 index 00000000..da151152 --- /dev/null +++ b/src/app/driver/can/cbs/rx/can_cbs_rx_imd-response.h @@ -0,0 +1,109 @@ +/** + * + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * We kindly request you to use one or more of the following phrases to refer to + * foxBMS in your hardware, software, documentation or advertising materials: + * + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" + * + */ + +/** + * @file can_cbs_rx_imd-response.h + * @author foxBMS Team + * @date 2023-11-02 (date of creation) + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS + * @prefix CANRX + * + * @brief Declarations for handling the extraction of imd response message + * @details This header declares the interface for reading imd response + * messages and everything else that is externally required to be able + * to use that interface. + */ + +#ifndef FOXBMS__CAN_CBS_RX_IMD_RESPONSE_H_ +#define FOXBMS__CAN_CBS_RX_IMD_RESPONSE_H_ + +/*========== Includes =======================================================*/ + +#include "can_cfg.h" +#include "database_cfg.h" + +#include "fstd_types.h" + +#include + +/*========== Macros and Definitions =========================================*/ + +/*========== Extern Constant and Variable Declarations ======================*/ + +/*========== Extern Function Prototypes =====================================*/ +/** + * @brief Gets insulation resistance from IMD response message and stores it in the data table + * @param kpkCanData Can data from the IMD Info message + * @param pTableInsulationMonitoring Pointer to the data table where data will be written + */ +void CANRX_ImdResponseReadInsulationResistance( + const uint8_t *const kpkCanData, + DATA_BLOCK_INSULATION_MONITORING_s *pTableInsulationMonitoring); + +/** + * @brief Gets tendency of the insulation fault from IMD response message and stores it in the data table + * @param kpkCanData Can data from the IMD Info message + * @param pTableInsulationMonitoring Pointer to the data table where data will be written + */ +void CANRX_ImdResponseCheckInsulationFaultTendency( + const uint8_t *const kpkCanData, + DATA_BLOCK_INSULATION_MONITORING_s *pTableInsulationMonitoring); + +/** + * @brief Checks the current relay state of one relay + * @param kpkCanData Can data from the IMD Info message + * @param relay Relay that the actual value is compared to + * @param relayState Relay state that the actual value is compared to + * @return True if relay state from can data and relay are equal + */ +bool CANRX_ImdResponseCheckRelayState(const uint8_t *const kpkCanData, uint8_t relay, uint8_t relayState); + +/*========== Externalized Static Functions Prototypes (Unit Test) ===========*/ +#ifdef UNITY_UNIT_TEST +extern void TEST_CANRX_TransferImdResponseMessageToCanBuffer( + uint8_t messageDlc, + const uint8_t *const kpkCanData, + CAN_BUFFER_ELEMENT_s *canBuffer); +#endif + +#endif /* FOXBMS__CAN_CBS_RX_IMD_RESPONSE_H_ */ diff --git a/src/app/driver/can/cbs/tx/can_cbs_tx_crash-dump.c b/src/app/driver/can/cbs/tx-async/can_cbs_tx_crash-dump.c similarity index 69% rename from src/app/driver/can/cbs/tx/can_cbs_tx_crash-dump.c rename to src/app/driver/can/cbs/tx-async/can_cbs_tx_crash-dump.c index cc2b9190..eb92b55a 100644 --- a/src/app/driver/can/cbs/tx/can_cbs_tx_crash-dump.c +++ b/src/app/driver/can/cbs/tx-async/can_cbs_tx_crash-dump.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file can_cbs_tx_crash-dump.c * @author foxBMS Team * @date 2022-11-16 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup DRIVER + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS * @prefix CANTX * * @brief CAN - * @details CAN Tx callback for fatal errors. + * @details CAN Tx callback for crash dump. * These messages are not guaranteed to be sent, rather it is a best * effort to get information during debugging why a fatal error * occurred. @@ -61,20 +61,20 @@ #include "can_cbs_tx_crash-dump.h" #include "can.h" -#include "can_cfg_tx-message-definitions.h" +#include "can_cfg_tx-async-message-definitions.h" #include "can_helper.h" #include /*========== Macros and Definitions =========================================*/ /** @{ - * multiplexer setup for the fatal errors message + * multiplexer setup for the crash dump message */ -#define CANTX_FATAL_ERRORS_MESSAGE_MUX_START_BIT (0x7u) -#define CANTX_FATAL_ERRORS_MESSAGE_MUX_LENGTH (8u) +#define CANTX_CRASH_DUMP_MESSAGE_MUX_START_BIT (7u) +#define CANTX_CRASH_DUMP_MESSAGE_MUX_LENGTH (8u) /** @} */ -#define CANTX_FATAL_ERRORS_MESSAGE_MUX_VALUE_STACK_OVERFLOW (0x00u) +#define CANTX_CRASH_DUMP_MESSAGE_MUX_VALUE_STACK_OVERFLOW (0x00u) /*========== Static Constant and Variable Definitions =======================*/ @@ -85,18 +85,29 @@ /*========== Static Function Implementations ================================*/ /*========== Extern Function Implementations ================================*/ +extern void CANTX_CrashDump(CANTX_FATAL_ERRORS_ACTIONS_e action) { + FAS_ASSERT(action < CANTX_FATAL_ERRORS_ACTIONS_MAX_E); + uint8_t data[CANTX_CRASH_DUMP_DLC] = {GEN_REPEAT_U(0u, GEN_STRIP(CAN_MAX_DLC))}; + uint64_t messageData = 0u; -extern void CANTX_SendReasonsForFatalErrors(CANTX_FATAL_ERRORS_ACTIONS_e action) { - uint8_t data[] = {GEN_REPEAT_U(0u, GEN_STRIP(CAN_MAX_DLC))}; switch (action) { case CANTX_FATAL_ERRORS_ACTIONS_STACK_OVERFLOW: - data[0] = 1u; - (void)CAN_DataSend(CAN_NODE_DEBUG_MESSAGE, CANTX_FATAL_ERRORS_ID, CANTX_FATAL_ERRORS_IDENTIFIER, &data[0]); + CAN_TxSetMessageDataWithSignalData( + &messageData, + CANTX_CRASH_DUMP_MESSAGE_MUX_START_BIT, + CANTX_CRASH_DUMP_MESSAGE_MUX_LENGTH, + CANTX_CRASH_DUMP_MESSAGE_MUX_VALUE_STACK_OVERFLOW, + CANTX_CRASH_DUMP_ENDIANNESS); break; default: /* LCOV_EXCL_LINE */ FAS_ASSERT(FAS_TRAP); /* LCOV_EXCL_LINE */ break; /* LCOV_EXCL_LINE */ } + + /* set can data */ + CAN_TxSetCanDataWithMessageData(messageData, data, CANTX_CRASH_DUMP_ENDIANNESS); + /* send message */ + (void)CAN_DataSend(CAN_NODE_DEBUG_MESSAGE, CANTX_CRASH_DUMP_ID, CANTX_CRASH_DUMP_ID_TYPE, data); } /*========== Externalized Static Function Implementations (Unit Test) =======*/ diff --git a/src/app/driver/can/cbs/tx/can_cbs_tx_crash-dump.h b/src/app/driver/can/cbs/tx-async/can_cbs_tx_crash-dump.h similarity index 79% rename from src/app/driver/can/cbs/tx/can_cbs_tx_crash-dump.h rename to src/app/driver/can/cbs/tx-async/can_cbs_tx_crash-dump.h index e0c050e4..158440c3 100644 --- a/src/app/driver/can/cbs/tx/can_cbs_tx_crash-dump.h +++ b/src/app/driver/can/cbs/tx-async/can_cbs_tx_crash-dump.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,9 +43,9 @@ * @file can_cbs_tx_crash-dump.h * @author foxBMS Team * @date 2022-11-16 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup DRIVER + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS * @prefix CANTX * * @brief CAN Tx callback functions for transmitting information on fatal @@ -59,9 +59,10 @@ /*========== Includes =======================================================*/ /*========== Macros and Definitions =========================================*/ -/** defines which action is performed when #CANTX_SendReasonsForFatalErrors is called */ +/** defines which action is performed when #CANTX_CrashDump is called */ typedef enum { CANTX_FATAL_ERRORS_ACTIONS_STACK_OVERFLOW, + CANTX_FATAL_ERRORS_ACTIONS_MAX_E, /* has to be last action, do not remove*/ } CANTX_FATAL_ERRORS_ACTIONS_e; /*========== Extern Constant and Variable Declarations ======================*/ @@ -69,11 +70,8 @@ typedef enum { /*========== Extern Function Prototypes =====================================*/ /** * @brief Tries to send a CAN message in case of fatal error - * @details This function shall be called in the default clause of a received, - * multiplexed message, to tell the sender, that this - * message-multiplexer combination is not supported. */ -void CANTX_SendReasonsForFatalErrors(CANTX_FATAL_ERRORS_ACTIONS_e action); +extern void CANTX_CrashDump(CANTX_FATAL_ERRORS_ACTIONS_e action); /*========== Externalized Static Functions Prototypes (Unit Test) ===========*/ #ifdef UNITY_UNIT_TEST diff --git a/src/app/driver/can/cbs/tx-async/can_cbs_tx_debug-build-configuration.c b/src/app/driver/can/cbs/tx-async/can_cbs_tx_debug-build-configuration.c new file mode 100644 index 00000000..c5d04d0b --- /dev/null +++ b/src/app/driver/can/cbs/tx-async/can_cbs_tx_debug-build-configuration.c @@ -0,0 +1,1615 @@ +/** + * + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * We kindly request you to use one or more of the following phrases to refer to + * foxBMS in your hardware, software, documentation or advertising materials: + * + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" + * + */ + +/** + * @file can_cbs_tx_debug-build-configuration.c + * @author foxBMS Team + * @date 2023-05-31 (date of creation) + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS + * @prefix CANTX + * + * @brief CAN driver Tx callback implementation + * @details CAN Tx callback for sending the build configuration + */ + +/*========== Includes =======================================================*/ +#include "can_cbs_tx_debug-build-configuration.h" + +#include "battery_cell_cfg.h" +#include "battery_system_cfg.h" +#include "version_cfg.h" + +#include "can.h" +#include "can_cfg_tx-async-message-definitions.h" +#include "can_helper.h" +#include "foxmath.h" + +#include +#include + +/*========== Macros and Definitions =========================================*/ +/** @{ + * current sensor mode enum + */ +typedef enum { + CURRENT_SENSOR_CYCLIC, + CURRENT_SENSOR_TRIGGERED, +} CANTX_CURRENT_SENSOR_MODE_e; +/** @} */ + +/** @{ + * configuration of the multiplexer + */ +#define CANTX_MUX_START_BIT (7u) +#define CANTX_MUX_LENGTH (8u) +#define CANTX_MUX_SLAVE (0x00u) +#define CANTX_MUX_APPLICATION (0x10u) +#define CANTX_MUX_BATTERY_CELL (0x20u) +#define CANTX_MUX_BATTERY_CELL_MAX_CHARGE_CURRENT (0x21u) +#define CANTX_MUX_BATTERY_CELL_MAX_CHARGE_TEMPERATURE (0x22u) +#define CANTX_MUX_BATTERY_CELL_MAX_DISCHARGE_CURRENT (0x23u) +#define CANTX_MUX_BATTERY_CELL_MAX_DISCHARGE_TEMPERATURE (0x24u) +#define CANTX_MUX_BATTERY_CELL_MAX_VOLTAGE (0x25u) +#define CANTX_MUX_BATTERY_CELL_MIN_CHARGE_TEMPERATURE (0x26u) +#define CANTX_MUX_BATTERY_CELL_MIN_DISCHARGE_TEMPERATURE (0x27u) +#define CANTX_MUX_BATTERY_CELL_MIN_VOLTAGE (0x28u) +#define CANTX_MUX_BATTERY_SYSTEM_GENERAL_1 (0x30u) +#define CANTX_MUX_BATTERY_SYSTEM_GENERAL_2 (0x31u) +#define CANTX_MUX_BATTERY_SYSTEM_CONTACTORS (0x32u) +#define CANTX_MUX_BATTERY_SYSTEM_CURRENT_SENSOR (0x33u) +#define CANTX_MUX_BATTERY_SYSTEM_FUSE (0x34u) +#define CANTX_MUX_BATTERY_SYSTEM_MAX_CURRENT (0x35u) +#define CANTX_MUX_BATTERY_SYSTEM_OPEN_WIRE_CHECK (0x36u) +#define CANTX_MUX_BATTERY_SYSTEM_TOTAL_NUMBERS (0x37u) +/** @} */ + +/** @{ + * configuration of the slave multiplexer message + */ +#define CANTX_MUX_SLAVE_AFE_START_BIT (15u) +#define CANTX_MUX_SLAVE_AFE_LENGTH (8u) +#define CANTX_MUX_SLAVE_TEMPERATURE_SENSOR_START_BIT (23u) +#define CANTX_MUX_SLAVE_TEMPERATURE_SENSOR_LENGTH (8u) +#define CANTX_MUX_SLAVE_TEMPERATURE_SENSOR_METHOD_START_BIT (31u) +#define CANTX_MUX_SLAVE_TEMPERATURE_SENSOR_METHOD_LENGTH (8u) +/** @} */ + +/** @{ + * configuration of the application multiplexer message + */ +#define CANTX_MUX_APPLICATION_SOC_ALGORITHM_START_BIT (15u) +#define CANTX_MUX_APPLICATION_SOC_ALGORITHM_LENGTH (4u) +#define CANTX_MUX_APPLICATION_SOE_ALGORITHM_START_BIT (11u) +#define CANTX_MUX_APPLICATION_SOE_ALGORITHM_LENGTH (4u) +#define CANTX_MUX_APPLICATION_SOF_ALGORITHM_START_BIT (23u) +#define CANTX_MUX_APPLICATION_SOF_ALGORITHM_LENGTH (4u) +#define CANTX_MUX_APPLICATION_SOH_ALGORITHM_START_BIT (19u) +#define CANTX_MUX_APPLICATION_SOH_ALGORITHM_LENGTH (4u) +#define CANTX_MUX_APPLICATION_BALANCING_STRATEGY_START_BIT (31u) +#define CANTX_MUX_APPLICATION_BALANCING_STRATEGY_LENGTH (4u) +#define CANTX_MUX_APPLICATION_IMD_START_BIT (27u) +#define CANTX_MUX_APPLICATION_IMD_LENGTH (4u) +#define CANTX_MUX_APPLICATION_RTOS_START_BIT (39u) +#define CANTX_MUX_APPLICATION_RTOS_LENGTH (4u) +/** @} */ + +/** @{ + * configuration of the battery cell multiplexer messages + */ +/* battery cell */ +#define CANTX_MUX_BATTERY_CELL_NOMINAL_CELL_VOLTAGE_START_BIT (15u) +#define CANTX_MUX_BATTERY_CELL_NOMINAL_CELL_VOLTAGE_LENGTH (16u) +#define CANTX_MUX_BATTERY_CELL_DEEP_DISCHARGE_CELL_VOLTAGE_START_BIT (31u) +#define CANTX_MUX_BATTERY_CELL_DEEP_DISCHARGE_CELL_VOLTAGE_LENGTH (16u) +#define CANTX_MUX_BATTERY_CELL_CELL_CAPACITY_START_BIT (47u) +#define CANTX_MUX_BATTERY_CELL_CELL_CAPACITY_LENGTH (16u) +#define CANTX_MUX_BATTERY_CELL_CELL_ENERGY_START_BIT (63u) +#define CANTX_MUX_BATTERY_CELL_CELL_ENERGY_LENGTH (8u) + +/* battery cell msl/rsl/mol values */ +#define CANTX_MUX_BATTERY_CELL_VALUES_MSL_START_BIT (15u) +#define CANTX_MUX_BATTERY_CELL_VALUES_MSL_LENGTH (18u) +#define CANTX_MUX_BATTERY_CELL_VALUES_RSL_START_BIT (29u) +#define CANTX_MUX_BATTERY_CELL_VALUES_RSL_LENGTH (18u) +#define CANTX_MUX_BATTERY_CELL_VALUES_MOL_START_BIT (43u) +#define CANTX_MUX_BATTERY_CELL_VALUES_MOL_LENGTH (18u) +/** @} */ + +/** @{ + * defines for the signal type for temperature value signals + */ +#define CANTX_MUX_BATTERY_CELL_TEMPERATURES_MAX_VALUE (131071.0f) +#define CANTX_MUX_BATTERY_CELL_TEMPERATURES_MIN_VALUE (-131072.0f) +#define CANTX_MUX_BATTERY_CELL_TEMPERATURES_FACTOR (1.0f) +#define CANTX_MUX_BATTERY_CELL_TEMPERATURES_OFFSET (0.0f) +/** @} */ + +/** @{ + * signal type for temperature limit values + */ +static const CAN_SIGNAL_TYPE_s cantx_signalBatteryCellTemperatures = { + 0u, + 0u, + CANTX_MUX_BATTERY_CELL_TEMPERATURES_FACTOR, + CANTX_MUX_BATTERY_CELL_TEMPERATURES_OFFSET, + CANTX_MUX_BATTERY_CELL_TEMPERATURES_MIN_VALUE, + CANTX_MUX_BATTERY_CELL_TEMPERATURES_MAX_VALUE}; +/** @} */ + +/** @{ + * configuration of the battery system multiplexer messages + */ +/* battery system general 1*/ +#define CANTX_MUX_BATTERY_SYSTEM_GENERAL_1_NR_OF_STRINGS_START_BIT (15u) +#define CANTX_MUX_BATTERY_SYSTEM_GENERAL_1_NR_OF_STRINGS_LENGTH (8u) +#define CANTX_MUX_BATTERY_SYSTEM_GENERAL_1_NR_OF_MODULES_PER_STRING_START_BIT (23u) +#define CANTX_MUX_BATTERY_SYSTEM_GENERAL_1_NR_OF_MODULES_PER_STRING_LENGTH (8u) +#define CANTX_MUX_BATTERY_SYSTEM_GENERAL_1_NR_OF_CELL_BLOCKS_PER_MODULE_START_BIT (31u) +#define CANTX_MUX_BATTERY_SYSTEM_GENERAL_1_NR_OF_CELL_BLOCKS_PER_MODULE_LENGTH (8u) +#define CANTX_MUX_BATTERY_SYSTEM_GENERAL_1_NR_OF_PARALLEL_CELLS_PER_CELL_BLOCK_START_BIT (39u) +#define CANTX_MUX_BATTERY_SYSTEM_GENERAL_1_NR_OF_PARALLEL_CELLS_PER_CELL_BLOCK_LENGTH (8u) +#define CANTX_MUX_BATTERY_SYSTEM_GENERAL_1_NR_OF_GPIOS_PER_MODULE_START_BIT (47u) +#define CANTX_MUX_BATTERY_SYSTEM_GENERAL_1_NR_OF_GPIOS_PER_MODULE_LENGTH (8u) +#define CANTX_MUX_BATTERY_SYSTEM_GENERAL_1_NR_OF_GPAS_PER_MODULE_START_BIT (55u) +#define CANTX_MUX_BATTERY_SYSTEM_GENERAL_1_NR_OF_GPAS_PER_MODULE_LENGTH (8u) +#define CANTX_MUX_BATTERY_SYSTEM_GENERAL_1_NR_OF_TEMPERATURE_SENSORS_PER_MODULE_START_BIT (63u) +#define CANTX_MUX_BATTERY_SYSTEM_GENERAL_1_NR_OF_TEMPERATURE_SENSORS_PER_MODULE_LENGTH (8u) + +/* battery system general 2*/ +#define CANTX_MUX_BATTERY_SYSTEM_GENERAL_2_POSITIVE_DISCHARGE_CURRENT_START_BIT (15u) +#define CANTX_MUX_BATTERY_SYSTEM_GENERAL_2_POSITIVE_DISCHARGE_CURRENT_LENGTH (CAN_BIT) +#define CANTX_MUX_BATTERY_SYSTEM_GENERAL_2_IGNORE_INTERLOCK_FEEDBACK_START_BIT (14u) +#define CANTX_MUX_BATTERY_SYSTEM_GENERAL_2_IGNORE_INTERLOCK_FEEDBACK_LENGTH (CAN_BIT) +#define CANTX_MUX_BATTERY_SYSTEM_GENERAL_2_CHECK_CAN_TIMING_START_BIT (13u) +#define CANTX_MUX_BATTERY_SYSTEM_GENERAL_2_CHECK_CAN_TIMING_LENGTH (CAN_BIT) +#define CANTX_MUX_BATTERY_SYSTEM_GENERAL_2_BALANCING_DEFAULT_INACTIVE_START_BIT (12u) +#define CANTX_MUX_BATTERY_SYSTEM_GENERAL_2_BALANCING_DEFAULT_INACTIVE_LENGTH (CAN_BIT) +#define CANTX_MUX_BATTERY_SYSTEM_GENERAL_2_BALANCING_RESISTANCE_START_BIT (11u) +#define CANTX_MUX_BATTERY_SYSTEM_GENERAL_2_BALANCING_RESISTANCE_LENGTH (12u) +#define CANTX_MUX_BATTERY_SYSTEM_GENERAL_2_REST_CURRENT_START_BIT (31u) +#define CANTX_MUX_BATTERY_SYSTEM_GENERAL_2_REST_CURRENT_LENGTH (12u) +#define CANTX_MUX_BATTERY_SYSTEM_GENERAL_2_RELAXATION_PERIOD_START_BIT (35u) +#define CANTX_MUX_BATTERY_SYSTEM_GENERAL_2_RELAXATION_PERIOD_LENGTH (16u) + +/* battery system contactors*/ +#define CANTX_MUX_BATTERY_SYSTEM_CONTACTORS_NR_OF_CONTACTORS_OUTSIDE_STRINGS_START_BIT (15u) +#define CANTX_MUX_BATTERY_SYSTEM_CONTACTORS_NR_OF_CONTACTORS_OUTSIDE_STRINGS_LENGTH (8u) +#define CANTX_MUX_BATTERY_SYSTEM_CONTACTORS_NR_OF_CONTACTORS_START_BIT (23u) +#define CANTX_MUX_BATTERY_SYSTEM_CONTACTORS_NR_OF_CONTACTORS_LENGTH (8u) +#define CANTX_MUX_BATTERY_SYSTEM_CONTACTORS_MAIN_CONTACTOR_MAX_BREAK_CURRENT_START_BIT (31u) +#define CANTX_MUX_BATTERY_SYSTEM_CONTACTORS_MAIN_CONTACTOR_MAX_BREAK_CURRENT_LENGTH (32u) + +/* battery system current sensor*/ +#define CANTX_MUX_BATTERY_SYSTEM_CURRENT_SENSOR_CURRENT_SENSOR_PRESENT_START_BIT (15u) +#define CANTX_MUX_BATTERY_SYSTEM_CURRENT_SENSOR_CURRENT_SENSOR_PRESENT_LENGTH (CAN_BIT) +#define CANTX_MUX_BATTERY_SYSTEM_CURRENT_SENSOR_CURRENT_SENSOR_CYCLIC_START_BIT (14u) +#define CANTX_MUX_BATTERY_SYSTEM_CURRENT_SENSOR_CURRENT_SENSOR_CYCLIC_LENGTH (CAN_BIT) +#define CANTX_MUX_BATTERY_SYSTEM_CURRENT_SENSOR_NR_OF_VOLTAGES_FROM_CURRENT_SENSOR_START_BIT (13u) +#define CANTX_MUX_BATTERY_SYSTEM_CURRENT_SENSOR_NR_OF_VOLTAGES_FROM_CURRENT_SENSOR_LENGTH (2u) +#define CANTX_MUX_BATTERY_SYSTEM_CURRENT_SENSOR_CURRENT_MEASUREMENT_TIMEOUT_START_BIT (11u) +#define CANTX_MUX_BATTERY_SYSTEM_CURRENT_SENSOR_CURRENT_MEASUREMENT_TIMEOUT_LENGTH (12u) +#define CANTX_MUX_BATTERY_SYSTEM_CURRENT_SENSOR_COULOMB_COUNTING_MEASUREMENT_TIMEOUT_START_BIT (31u) +#define CANTX_MUX_BATTERY_SYSTEM_CURRENT_SENSOR_COULOMB_COUNTING_MEASUREMENT_TIMEOUT_LENGTH (12u) +#define CANTX_MUX_BATTERY_SYSTEM_CURRENT_SENSOR_ENERGY_COUNTING_MEASUREMENT_TIMEOUT_START_BIT (35u) +#define CANTX_MUX_BATTERY_SYSTEM_CURRENT_SENSOR_ENERGY_COUNTING_MEASUREMENT_TIMEOUT_LENGTH (12u) +#define CANTX_MUX_BATTERY_SYSTEM_CURRENT_SENSOR_THRESHOLD_NO_CURRENT_START_BIT (55u) +#define CANTX_MUX_BATTERY_SYSTEM_CURRENT_SENSOR_THRESHOLD_NO_CURRENT_LENGTH (12u) + +/* battery system fuse*/ +#define CANTX_MUX_BATTERY_SYSTEM_FUSE_CHECK_FUSED_PLACED_IN_CHARGE_PATH_START_BIT (15u) +#define CANTX_MUX_BATTERY_SYSTEM_FUSE_CHECK_FUSED_PLACED_IN_CHARGE_PATH_LENGTH (CAN_BIT) +#define CANTX_MUX_BATTERY_SYSTEM_FUSE_CHECK_FUSED_PLACED_IN_NORMAL_PATH_START_BIT (14u) +#define CANTX_MUX_BATTERY_SYSTEM_FUSE_CHECK_FUSED_PLACED_IN_NORMAL_PATH_LENGTH (CAN_BIT) +#define CANTX_MUX_BATTERY_SYSTEM_FUSE_MAX_VOLTAGE_DROP_OVER_FUSE_START_BIT (11u) +#define CANTX_MUX_BATTERY_SYSTEM_FUSE_MAX_VOLTAGE_DROP_OVER_FUSE_LENGTH (12u) +#define CANTX_MUX_BATTERY_SYSTEM_FUSE_MAIN_FUSE_MAXIMUM_TRIGGER_DURATION_START_BIT (31u) +#define CANTX_MUX_BATTERY_SYSTEM_FUSE_MAIN_FUSE_MAXIMUM_TRIGGER_DURATION_LENGTH (16u) + +/* battery system maximum current*/ +#define CANTX_MUX_BATTERY_SYSTEM_MAXIMUM_CURRENT_MAX_STRING_CURRENT_START_BIT (15u) +#define CANTX_MUX_BATTERY_SYSTEM_MAXIMUM_CURRENT_MAX_STRING_CURRENT_LENGTH (28u) +#define CANTX_MUX_BATTERY_SYSTEM_MAXIMUM_CURRENT_MAX_PACK_CURRENT_START_BIT (35u) +#define CANTX_MUX_BATTERY_SYSTEM_MAXIMUM_CURRENT_MAX_PACK_CURRENT_LENGTH (28u) + +/* battery system open wire check*/ +#define CANTX_MUX_BATTERY_SYSTEM_OPEN_WIRE_CHECK_STANDBY_PERIODIC_OPEN_WIRE_CHECK_START_BIT (15u) +#define CANTX_MUX_BATTERY_SYSTEM_OPEN_WIRE_CHECK_STANDBY_PERIODIC_OPEN_WIRE_CHECK_LENGTH (CAN_BIT) +#define CANTX_MUX_BATTERY_SYSTEM_OPEN_WIRE_CHECK_STANDBY_OPEN_WIRE_PERIOD_START_BIT (14u) +#define CANTX_MUX_BATTERY_SYSTEM_OPEN_WIRE_CHECK_STANDBY_OPEN_WIRE_PERIOD_LENGTH (12u) +#define CANTX_MUX_BATTERY_SYSTEM_OPEN_WIRE_CHECK_NORMAL_PERIODIC_OPEN_WIRE_CHECK_START_BIT (18u) +#define CANTX_MUX_BATTERY_SYSTEM_OPEN_WIRE_CHECK_NORMAL_PERIODIC_OPEN_WIRE_CHECK_LENGTH (CAN_BIT) +#define CANTX_MUX_BATTERY_SYSTEM_OPEN_WIRE_CHECK_NORMAL_OPEN_WIRE_PERIOD_START_BIT (17u) +#define CANTX_MUX_BATTERY_SYSTEM_OPEN_WIRE_CHECK_NORMAL_OPEN_WIRE_PERIOD_LENGTH (12u) +#define CANTX_MUX_BATTERY_SYSTEM_OPEN_WIRE_CHECK_CHARGE_PERIODIC_OPEN_WIRE_CHECK_START_BIT (37u) +#define CANTX_MUX_BATTERY_SYSTEM_OPEN_WIRE_CHECK_CHARGE_PERIODIC_OPEN_WIRE_CHECK_LENGTH (CAN_BIT) +#define CANTX_MUX_BATTERY_SYSTEM_OPEN_WIRE_CHECK_CHARGE_OPEN_WIRE_PERIOD_START_BIT (36u) +#define CANTX_MUX_BATTERY_SYSTEM_OPEN_WIRE_CHECK_CHARGE_OPEN_WIRE_PERIOD_LENGTH (12u) +#define CANTX_MUX_BATTERY_SYSTEM_OPEN_WIRE_CHECK_ERROR_OPEN_WIRE_PERIOD_START_BIT (40u) +#define CANTX_MUX_BATTERY_SYSTEM_OPEN_WIRE_CHECK_ERROR_OPEN_WIRE_PERIOD_LENGTH (12u) + +/* battery system total cell and temperature sensor numbers*/ +#define CANTX_MUX_BATTERY_SYSTEM_TOTAL_NUMBERS_NR_OF_CELL_BLOCKS_PER_STRING_START_BIT (15u) +#define CANTX_MUX_BATTERY_SYSTEM_TOTAL_NUMBERS_NR_OF_CELL_BLOCKS_PER_STRING_LENGTH (14u) +#define CANTX_MUX_BATTERY_SYSTEM_TOTAL_NUMBERS_NR_OF_CELL_BLOCKS_START_BIT (17u) +#define CANTX_MUX_BATTERY_SYSTEM_TOTAL_NUMBERS_NR_OF_CELL_BLOCKS_LENGTH (14u) +#define CANTX_MUX_BATTERY_SYSTEM_TOTAL_NUMBERS_NR_OF_TEMP_SENSORS_PER_STRING_START_BIT (35u) +#define CANTX_MUX_BATTERY_SYSTEM_TOTAL_NUMBERS_NR_OF_TEMP_SENSORS_PER_STRING_LENGTH (14u) +#define CANTX_MUX_BATTERY_SYSTEM_TOTAL_NUMBERS_NR_OF_TEMP_SENSORS_START_BIT (53u) +#define CANTX_MUX_BATTERY_SYSTEM_TOTAL_NUMBERS_NR_OF_TEMP_SENSORS_LENGTH (14u) +/** @} */ + +/** @{ + * defines for signal type for open wire period values + */ +#define CANTX_MUX_BATTERY_SYSTEM_OPEN_WIRE_CHECK_MAX_VALUE (4095000.0f) +#define CANTX_MUX_BATTERY_SYSTEM_OPEN_WIRE_CHECK_MIN_VALUE (0.0f) +#define CANTX_MUX_BATTERY_SYSTEM_OPEN_WIRE_CHECK_OFFSET (0.0f) +/** @} */ + +/*========== Static Constant and Variable Definitions =======================*/ + +/*========== Extern Constant and Variable Definitions =======================*/ + +/*========== Static Function Prototypes =====================================*/ +/** + * @brief Sends the application configuration message + * @param pMessageData message data of the CAN message + * @param muxValue multiplexer value to be set + */ +static void CANTX_SetDebugBuildConfigurationMux(uint64_t *pMessageData, uint8_t muxValue); + +/** + * @brief Sends the application configuration message + */ +static STD_RETURN_TYPE_e CANTX_SendApplicationConfiguration(void); + +/** + * @brief Sends the slave configuration message + */ +static STD_RETURN_TYPE_e CANTX_SendSlaveConfiguration(void); + +/** + * @brief Sends the battery cell configuration message + */ +static STD_RETURN_TYPE_e CANTX_SendBatteryCellConfiguration(void); + +/** + * @brief Adds the data to the message + * @param pMessageData message data of the CAN message + */ +static void CANTX_SetBatteryCellMuxMessageData(uint64_t *pMessageData); + +/** + * @brief Adds the data to the message + * @param pMessageData message data of the CAN message + */ +static void CANTX_SetBatteryCellMuxMaxChargeCurrentMessageData(uint64_t *pMessageData); + +/** + * @brief Adds the data to the message + * @param pMessageData message data of the CAN message + */ +static void CANTX_SetBatteryCellMuxMaxChargeTemperatureMessageData(uint64_t *pMessageData); + +/** + * @brief Adds the data to the message + * @param pMessageData message data of the CAN message + */ +static void CANTX_SetBatteryCellMuxMaxDischargeCurrentMessageData(uint64_t *pMessageData); + +/** + * @brief Adds the data to the message + * @param pMessageData message data of the CAN message + */ +static void CANTX_SetBatteryCellMuxMaxDischargeTemperatureMessageData(uint64_t *pMessageData); + +/** + * @brief Adds the data to the message + * @param pMessageData message data of the CAN message + */ +static void CANTX_SetBatteryCellMuxMaxVoltageMessageData(uint64_t *pMessageData); + +/** + * @brief Adds the data to the message + * @param pMessageData message data of the CAN message + */ +static void CANTX_SetBatteryCellMuxMinChargeTemperatureMessageData(uint64_t *pMessageData); + +/** + * @brief Adds the data to the message + * @param pMessageData message data of the CAN message + */ +static void CANTX_SetBatteryCellMuxMinDischargeTemperatureMessageData(uint64_t *pMessageData); + +/** + * @brief Adds the data to the message + * @param pMessageData message data of the CAN message + */ +static void CANTX_SetBatteryCellMuxMinVoltageMessageData(uint64_t *pMessageData); + +/** + * @brief Sends the battery system configuration message + */ +static STD_RETURN_TYPE_e CANTX_SendBatterySystemConfiguration(void); + +/** + * @brief Adds the data to the message + * @param pMessageData message data of the CAN message + */ +static void CANTX_SetBatterySystemMuxGeneral1MessageData(uint64_t *pMessageData); + +/** + * @brief Adds the data to the message + * @param pMessageData message data of the CAN message + */ +static void CANTX_SetBatterySystemMuxGeneral2MessageData(uint64_t *pMessageData); + +/** + * @brief Adds the data to the message + * @param pMessageData message data of the CAN message + */ +static void CANTX_SetBatterySystemMuxContactorsMessageData(uint64_t *pMessageData); + +/** + * @brief Adds the data to the message + * @param pMessageData message data of the CAN message + */ +static void CANTX_SetBatterySystemMuxCurrentSensorMessageData(uint64_t *pMessageData); + +/** + * @brief Adds the data to the message + * @param pMessageData message data of the CAN message + */ +static void CANTX_SetBatterySystemMuxFuseMessageData(uint64_t *pMessageData); + +/** + * @brief Adds the data to the message + * @param pMessageData message data of the CAN message + */ +static void CANTX_SetBatterySystemMuxMaxCurrentMessageData(uint64_t *pMessageData); + +/** + * @brief Adds the data to the message + * @param pMessageData message data of the CAN message + */ +static void CANTX_SetBatterySystemMuxOpenWireCheckMessageData(uint64_t *pMessageData); + +/** + * @brief Adds the data to the message + * @param pMessageData message data of the CAN message + */ +static void CANTX_SetBatterySystemMuxTotalNumbersMessageData(uint64_t *pMessageData); + +/*========== Static Function Implementations ================================*/ +static void CANTX_SetDebugBuildConfigurationMux(uint64_t *pMessageData, uint8_t muxValue) { + FAS_ASSERT(pMessageData != NULL_PTR); + FAS_ASSERT( + (muxValue == CANTX_MUX_SLAVE) || (muxValue == CANTX_MUX_APPLICATION) || + ((muxValue >= CANTX_MUX_BATTERY_CELL) && (muxValue <= CANTX_MUX_BATTERY_CELL_MIN_VOLTAGE)) || + ((muxValue >= CANTX_MUX_BATTERY_SYSTEM_GENERAL_1) && (muxValue <= CANTX_MUX_BATTERY_SYSTEM_TOTAL_NUMBERS))); + + CAN_TxSetMessageDataWithSignalData( + pMessageData, CANTX_MUX_START_BIT, CANTX_MUX_LENGTH, muxValue, CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); +} + +static STD_RETURN_TYPE_e CANTX_SendApplicationConfiguration(void) { + uint64_t messageData = 0u; + uint8_t canData[CAN_MAX_DLC] = {GEN_REPEAT_U(0u, GEN_STRIP(CAN_MAX_DLC))}; + + /* Set multiplexer value */ + CANTX_SetDebugBuildConfigurationMux(&messageData, CANTX_MUX_APPLICATION); + + /* Set soc algorithm */ + CAN_TxSetMessageDataWithSignalData( + &messageData, + CANTX_MUX_APPLICATION_SOC_ALGORITHM_START_BIT, + CANTX_MUX_APPLICATION_SOC_ALGORITHM_LENGTH, + (uint64_t)ver_foxbmsBuildConfiguration.socAlgorithm, + CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); + + /* Set soe algorithm */ + CAN_TxSetMessageDataWithSignalData( + &messageData, + CANTX_MUX_APPLICATION_SOE_ALGORITHM_START_BIT, + CANTX_MUX_APPLICATION_SOE_ALGORITHM_LENGTH, + (uint64_t)ver_foxbmsBuildConfiguration.soeAlgorithm, + CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); + + /* Set sof algorithm */ + CAN_TxSetMessageDataWithSignalData( + &messageData, + CANTX_MUX_APPLICATION_SOF_ALGORITHM_START_BIT, + CANTX_MUX_APPLICATION_SOF_ALGORITHM_LENGTH, + (uint64_t)ver_foxbmsBuildConfiguration.sofAlgorithm, + CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); + + /* Set soh algorithm */ + CAN_TxSetMessageDataWithSignalData( + &messageData, + CANTX_MUX_APPLICATION_SOH_ALGORITHM_START_BIT, + CANTX_MUX_APPLICATION_SOH_ALGORITHM_LENGTH, + (uint64_t)ver_foxbmsBuildConfiguration.sohAlgorithm, + CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); + + /* Set balancing strategy */ + CAN_TxSetMessageDataWithSignalData( + &messageData, + CANTX_MUX_APPLICATION_BALANCING_STRATEGY_START_BIT, + CANTX_MUX_APPLICATION_BALANCING_STRATEGY_LENGTH, + (uint64_t)ver_foxbmsBuildConfiguration.balancingStrategy, + CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); + + /* Set IMD */ + CAN_TxSetMessageDataWithSignalData( + &messageData, + CANTX_MUX_APPLICATION_IMD_START_BIT, + CANTX_MUX_APPLICATION_IMD_LENGTH, + (uint64_t)ver_foxbmsBuildConfiguration.imdName, + CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); + + /* Set rtos */ + CAN_TxSetMessageDataWithSignalData( + &messageData, + CANTX_MUX_APPLICATION_RTOS_START_BIT, + CANTX_MUX_APPLICATION_RTOS_LENGTH, + (uint64_t)ver_foxbmsBuildConfiguration.rtos, + CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); + + /* Set the can data */ + CAN_TxSetCanDataWithMessageData(messageData, canData, CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); + + /* Send the message */ + STD_RETURN_TYPE_e queuedSuccessfully = CAN_DataSend( + CAN_NODE_DEBUG_MESSAGE, CANTX_DEBUG_BUILD_CONFIGURATION_ID, CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, canData); + + return queuedSuccessfully; +} + +static STD_RETURN_TYPE_e CANTX_SendSlaveConfiguration(void) { + uint64_t messageData = 0u; + uint8_t canData[CAN_MAX_DLC] = {GEN_REPEAT_U(0u, GEN_STRIP(CAN_MAX_DLC))}; + + /* Set multiplexer value */ + CANTX_SetDebugBuildConfigurationMux(&messageData, CANTX_MUX_SLAVE); + + /* Set afe name */ + CAN_TxSetMessageDataWithSignalData( + &messageData, + CANTX_MUX_SLAVE_AFE_START_BIT, + CANTX_MUX_SLAVE_AFE_LENGTH, + (uint64_t)ver_foxbmsBuildConfiguration.afeName, + CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); + + /* Set temperature sensor name*/ + CAN_TxSetMessageDataWithSignalData( + &messageData, + CANTX_MUX_SLAVE_TEMPERATURE_SENSOR_START_BIT, + CANTX_MUX_SLAVE_TEMPERATURE_SENSOR_LENGTH, + (uint64_t)ver_foxbmsBuildConfiguration.temperatureSensorName, + CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); + + /* Set temperature sensor method*/ + CAN_TxSetMessageDataWithSignalData( + &messageData, + CANTX_MUX_SLAVE_TEMPERATURE_SENSOR_METHOD_START_BIT, + CANTX_MUX_SLAVE_TEMPERATURE_SENSOR_METHOD_LENGTH, + (uint64_t)ver_foxbmsBuildConfiguration.temperatureSensorMethod, + CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); + + /* Set the can data */ + CAN_TxSetCanDataWithMessageData(messageData, canData, CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); + + /* Send the message */ + STD_RETURN_TYPE_e queuedSuccessfully = CAN_DataSend( + CAN_NODE_DEBUG_MESSAGE, CANTX_DEBUG_BUILD_CONFIGURATION_ID, CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, canData); + + return queuedSuccessfully; +} + +static STD_RETURN_TYPE_e CANTX_SendBatteryCellConfiguration(void) { + uint64_t messageData = 0u; + uint8_t canData[CAN_MAX_DLC] = {GEN_REPEAT_U(0u, GEN_STRIP(CAN_MAX_DLC))}; + + /* Set battery cell message data */ + CANTX_SetBatteryCellMuxMessageData(&messageData); + /* Send battery cell message*/ + CAN_TxSetCanDataWithMessageData(messageData, canData, CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); + STD_RETURN_TYPE_e queuedSuccessfully = CAN_DataSend( + CAN_NODE_DEBUG_MESSAGE, CANTX_DEBUG_BUILD_CONFIGURATION_ID, CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, canData); + messageData = 0u; + + if (queuedSuccessfully == STD_OK) { + /* Set battery cell max charge current message data*/ + CANTX_SetBatteryCellMuxMaxChargeCurrentMessageData(&messageData); + /* Send battery cell max charge current message*/ + CAN_TxSetCanDataWithMessageData(messageData, canData, CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); + queuedSuccessfully = CAN_DataSend( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + canData); + messageData = 0u; + } + + if (queuedSuccessfully == STD_OK) { + /* Set battery cell max charge temperature message data*/ + CANTX_SetBatteryCellMuxMaxChargeTemperatureMessageData(&messageData); + /* Send battery cell max charge temperature message*/ + CAN_TxSetCanDataWithMessageData(messageData, canData, CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); + queuedSuccessfully = CAN_DataSend( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + canData); + messageData = 0u; + } + + if (queuedSuccessfully == STD_OK) { + /* Set battery cell max discharge current message data*/ + CANTX_SetBatteryCellMuxMaxDischargeCurrentMessageData(&messageData); + /* Send battery cell max discharge current message*/ + CAN_TxSetCanDataWithMessageData(messageData, canData, CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); + queuedSuccessfully = CAN_DataSend( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + canData); + messageData = 0u; + } + + if (queuedSuccessfully == STD_OK) { + /* Set battery cell max discharge temperature message data*/ + CANTX_SetBatteryCellMuxMaxDischargeTemperatureMessageData(&messageData); + /* Send battery cell max discharge temperature message*/ + CAN_TxSetCanDataWithMessageData(messageData, canData, CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); + queuedSuccessfully = CAN_DataSend( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + canData); + messageData = 0u; + } + + if (queuedSuccessfully == STD_OK) { + /* Set battery cell max voltage message data*/ + CANTX_SetBatteryCellMuxMaxVoltageMessageData(&messageData); + /* Send battery cell max voltage message*/ + CAN_TxSetCanDataWithMessageData(messageData, canData, CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); + queuedSuccessfully = CAN_DataSend( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + canData); + messageData = 0u; + } + + if (queuedSuccessfully == STD_OK) { + /* Set battery cell min charge temperature message data*/ + CANTX_SetBatteryCellMuxMinChargeTemperatureMessageData(&messageData); + /* Send battery cell min charge temperature message*/ + CAN_TxSetCanDataWithMessageData(messageData, canData, CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); + queuedSuccessfully = CAN_DataSend( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + canData); + messageData = 0u; + } + + if (queuedSuccessfully == STD_OK) { + /* Set battery cell min discharge temperature message data*/ + CANTX_SetBatteryCellMuxMinDischargeTemperatureMessageData(&messageData); + /* Send battery cell min discharge temperature message*/ + CAN_TxSetCanDataWithMessageData(messageData, canData, CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); + queuedSuccessfully = CAN_DataSend( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + canData); + messageData = 0u; + } + + if (queuedSuccessfully == STD_OK) { + /* Set battery cell min voltage message data*/ + CANTX_SetBatteryCellMuxMinVoltageMessageData(&messageData); + /* Send battery cell min voltage message*/ + CAN_TxSetCanDataWithMessageData(messageData, canData, CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); + queuedSuccessfully = CAN_DataSend( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + canData); + } + + return queuedSuccessfully; +} + +static void CANTX_SetBatteryCellMuxMessageData(uint64_t *pMessageData) { + FAS_ASSERT(pMessageData != NULL_PTR); + + /* Set multiplexer value */ + CANTX_SetDebugBuildConfigurationMux(pMessageData, CANTX_MUX_BATTERY_CELL); + + /* Set nominal cell voltage value */ + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_MUX_BATTERY_CELL_NOMINAL_CELL_VOLTAGE_START_BIT, + CANTX_MUX_BATTERY_CELL_NOMINAL_CELL_VOLTAGE_LENGTH, + BC_VOLTAGE_NOMINAL_mV, + CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); + + /* Set deep discharge cell voltage value */ + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_MUX_BATTERY_CELL_DEEP_DISCHARGE_CELL_VOLTAGE_START_BIT, + CANTX_MUX_BATTERY_CELL_DEEP_DISCHARGE_CELL_VOLTAGE_LENGTH, + BC_VOLTAGE_DEEP_DISCHARGE_mV, + CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); + + /* Set cell capacity value */ + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_MUX_BATTERY_CELL_CELL_CAPACITY_START_BIT, + CANTX_MUX_BATTERY_CELL_CELL_CAPACITY_LENGTH, + BC_CAPACITY_mAh, + CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); + + /* Set cell energy value */ + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_MUX_BATTERY_CELL_CELL_ENERGY_START_BIT, + CANTX_MUX_BATTERY_CELL_CELL_ENERGY_LENGTH, + (uint64_t)BC_ENERGY_Wh, + CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); +} + +static void CANTX_SetBatteryCellMuxMaxChargeCurrentMessageData(uint64_t *pMessageData) { + FAS_ASSERT(pMessageData != NULL_PTR); + + /* Set multiplexer value */ + CANTX_SetDebugBuildConfigurationMux(pMessageData, CANTX_MUX_BATTERY_CELL_MAX_CHARGE_CURRENT); + + /* Set maximal charge current MSL value*/ + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_MUX_BATTERY_CELL_VALUES_MSL_START_BIT, + CANTX_MUX_BATTERY_CELL_VALUES_MSL_LENGTH, + BC_CURRENT_MAX_CHARGE_MSL_mA, + CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); + + /* Set maximal charge current RSL value*/ + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_MUX_BATTERY_CELL_VALUES_RSL_START_BIT, + CANTX_MUX_BATTERY_CELL_VALUES_RSL_LENGTH, + BC_CURRENT_MAX_CHARGE_RSL_mA, + CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); + + /* Set maximal charge current MOL value*/ + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_MUX_BATTERY_CELL_VALUES_MOL_START_BIT, + CANTX_MUX_BATTERY_CELL_VALUES_MOL_LENGTH, + BC_CURRENT_MAX_CHARGE_MOL_mA, + CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); +} + +static void CANTX_SetBatteryCellMuxMaxChargeTemperatureMessageData(uint64_t *pMessageData) { + FAS_ASSERT(pMessageData != NULL_PTR); + + /* Set multiplexer value */ + CANTX_SetDebugBuildConfigurationMux(pMessageData, CANTX_MUX_BATTERY_CELL_MAX_CHARGE_TEMPERATURE); + + /* Set maximal charge temperature MSL value*/ + float_t signalData = (float_t)BC_TEMPERATURE_MAX_CHARGE_MSL_ddegC; + CAN_TxPrepareSignalData(&signalData, cantx_signalBatteryCellTemperatures); + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_MUX_BATTERY_CELL_VALUES_MSL_START_BIT, + CANTX_MUX_BATTERY_CELL_VALUES_MSL_LENGTH, + (int64_t)signalData, + CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); + + /* Set maximal charge temperature RSL value*/ + signalData = (float_t)BC_TEMPERATURE_MAX_CHARGE_RSL_ddegC; + CAN_TxPrepareSignalData(&signalData, cantx_signalBatteryCellTemperatures); + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_MUX_BATTERY_CELL_VALUES_RSL_START_BIT, + CANTX_MUX_BATTERY_CELL_VALUES_RSL_LENGTH, + (int64_t)signalData, + CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); + + /* Set maximal charge temperature MOL value*/ + signalData = (float_t)BC_TEMPERATURE_MAX_CHARGE_MOL_ddegC; + CAN_TxPrepareSignalData(&signalData, cantx_signalBatteryCellTemperatures); + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_MUX_BATTERY_CELL_VALUES_MOL_START_BIT, + CANTX_MUX_BATTERY_CELL_VALUES_MOL_LENGTH, + (int64_t)signalData, + CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); +} + +static void CANTX_SetBatteryCellMuxMaxDischargeCurrentMessageData(uint64_t *pMessageData) { + FAS_ASSERT(pMessageData != NULL_PTR); + + /* Set multiplexer value */ + CANTX_SetDebugBuildConfigurationMux(pMessageData, CANTX_MUX_BATTERY_CELL_MAX_DISCHARGE_CURRENT); + + /* Set maximal discharge current MSL value*/ + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_MUX_BATTERY_CELL_VALUES_MSL_START_BIT, + CANTX_MUX_BATTERY_CELL_VALUES_MSL_LENGTH, + BC_CURRENT_MAX_DISCHARGE_MSL_mA, + CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); + + /* Set maximal discharge current RSL value*/ + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_MUX_BATTERY_CELL_VALUES_RSL_START_BIT, + CANTX_MUX_BATTERY_CELL_VALUES_RSL_LENGTH, + BC_CURRENT_MAX_DISCHARGE_RSL_mA, + CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); + + /* Set maximal discharge current MOL value*/ + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_MUX_BATTERY_CELL_VALUES_MOL_START_BIT, + CANTX_MUX_BATTERY_CELL_VALUES_MOL_LENGTH, + BC_CURRENT_MAX_DISCHARGE_MOL_mA, + CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); +} + +static void CANTX_SetBatteryCellMuxMaxDischargeTemperatureMessageData(uint64_t *pMessageData) { + FAS_ASSERT(pMessageData != NULL_PTR); + + /* Set multiplexer value */ + CANTX_SetDebugBuildConfigurationMux(pMessageData, CANTX_MUX_BATTERY_CELL_MAX_DISCHARGE_TEMPERATURE); + + /* Set maximal discharge temperature MSL value*/ + float_t signalData = (float_t)BC_TEMPERATURE_MAX_DISCHARGE_MSL_ddegC; + CAN_TxPrepareSignalData(&signalData, cantx_signalBatteryCellTemperatures); + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_MUX_BATTERY_CELL_VALUES_MSL_START_BIT, + CANTX_MUX_BATTERY_CELL_VALUES_MSL_LENGTH, + (int64_t)signalData, + CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); + + /* Set maximal discharge temperature RSL value*/ + signalData = (float_t)BC_TEMPERATURE_MAX_DISCHARGE_RSL_ddegC; + CAN_TxPrepareSignalData(&signalData, cantx_signalBatteryCellTemperatures); + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_MUX_BATTERY_CELL_VALUES_RSL_START_BIT, + CANTX_MUX_BATTERY_CELL_VALUES_RSL_LENGTH, + (int64_t)signalData, + CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); + + /* Set maximal discharge temperature MOL value*/ + signalData = (float_t)BC_TEMPERATURE_MAX_DISCHARGE_MOL_ddegC; + CAN_TxPrepareSignalData(&signalData, cantx_signalBatteryCellTemperatures); + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_MUX_BATTERY_CELL_VALUES_MOL_START_BIT, + CANTX_MUX_BATTERY_CELL_VALUES_MOL_LENGTH, + (int64_t)signalData, + CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); +} + +static void CANTX_SetBatteryCellMuxMaxVoltageMessageData(uint64_t *pMessageData) { + FAS_ASSERT(pMessageData != NULL_PTR); + + /* Set multiplexer value */ + CANTX_SetDebugBuildConfigurationMux(pMessageData, CANTX_MUX_BATTERY_CELL_MAX_VOLTAGE); + + /* Set maximal voltage MSL value*/ + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_MUX_BATTERY_CELL_VALUES_MSL_START_BIT, + CANTX_MUX_BATTERY_CELL_VALUES_MSL_LENGTH, + BC_VOLTAGE_MAX_MSL_mV, + CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); + + /* Set maximal voltage RSL value*/ + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_MUX_BATTERY_CELL_VALUES_RSL_START_BIT, + CANTX_MUX_BATTERY_CELL_VALUES_RSL_LENGTH, + BC_VOLTAGE_MAX_RSL_mV, + CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); + + /* Set maximal voltage MOL value*/ + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_MUX_BATTERY_CELL_VALUES_MOL_START_BIT, + CANTX_MUX_BATTERY_CELL_VALUES_MOL_LENGTH, + BC_VOLTAGE_MAX_MOL_mV, + CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); +} + +static void CANTX_SetBatteryCellMuxMinChargeTemperatureMessageData(uint64_t *pMessageData) { + FAS_ASSERT(pMessageData != NULL_PTR); + + /* Set multiplexer value */ + CANTX_SetDebugBuildConfigurationMux(pMessageData, CANTX_MUX_BATTERY_CELL_MIN_CHARGE_TEMPERATURE); + + /* Set minimal charge temperature MSL value*/ + float_t signalData = (float_t)BC_TEMPERATURE_MIN_CHARGE_MSL_ddegC; + CAN_TxPrepareSignalData(&signalData, cantx_signalBatteryCellTemperatures); + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_MUX_BATTERY_CELL_VALUES_MSL_START_BIT, + CANTX_MUX_BATTERY_CELL_VALUES_MSL_LENGTH, + (int64_t)signalData, + CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); + + /* Set minimal charge temperature RSL value*/ + signalData = (float_t)BC_TEMPERATURE_MIN_CHARGE_RSL_ddegC; + CAN_TxPrepareSignalData(&signalData, cantx_signalBatteryCellTemperatures); + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_MUX_BATTERY_CELL_VALUES_RSL_START_BIT, + CANTX_MUX_BATTERY_CELL_VALUES_RSL_LENGTH, + (int64_t)signalData, + CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); + + /* Set minimal charge temperature MOL value*/ + signalData = (float_t)BC_TEMPERATURE_MIN_CHARGE_MOL_ddegC; + CAN_TxPrepareSignalData(&signalData, cantx_signalBatteryCellTemperatures); + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_MUX_BATTERY_CELL_VALUES_MOL_START_BIT, + CANTX_MUX_BATTERY_CELL_VALUES_MOL_LENGTH, + (int64_t)signalData, + CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); +} + +static void CANTX_SetBatteryCellMuxMinDischargeTemperatureMessageData(uint64_t *pMessageData) { + FAS_ASSERT(pMessageData != NULL_PTR); + + /* Set multiplexer value */ + CANTX_SetDebugBuildConfigurationMux(pMessageData, CANTX_MUX_BATTERY_CELL_MIN_DISCHARGE_TEMPERATURE); + + /* Set minimal discharge temperature MSL value*/ + float_t signalData = (float_t)BC_TEMPERATURE_MIN_DISCHARGE_MSL_ddegC; + CAN_TxPrepareSignalData(&signalData, cantx_signalBatteryCellTemperatures); + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_MUX_BATTERY_CELL_VALUES_MSL_START_BIT, + CANTX_MUX_BATTERY_CELL_VALUES_MSL_LENGTH, + (int64_t)signalData, + CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); + + /* Set minimal discharge temperature RSL value*/ + signalData = (float_t)BC_TEMPERATURE_MIN_DISCHARGE_RSL_ddegC; + CAN_TxPrepareSignalData(&signalData, cantx_signalBatteryCellTemperatures); + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_MUX_BATTERY_CELL_VALUES_RSL_START_BIT, + CANTX_MUX_BATTERY_CELL_VALUES_RSL_LENGTH, + (int64_t)signalData, + CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); + + /* Set minimal discharge temperature MOL value*/ + signalData = (float_t)BC_TEMPERATURE_MIN_DISCHARGE_MOL_ddegC; + CAN_TxPrepareSignalData(&signalData, cantx_signalBatteryCellTemperatures); + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_MUX_BATTERY_CELL_VALUES_MOL_START_BIT, + CANTX_MUX_BATTERY_CELL_VALUES_MOL_LENGTH, + (int64_t)signalData, + CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); +} + +static void CANTX_SetBatteryCellMuxMinVoltageMessageData(uint64_t *pMessageData) { + FAS_ASSERT(pMessageData != NULL_PTR); + + /* Set multiplexer value */ + CANTX_SetDebugBuildConfigurationMux(pMessageData, CANTX_MUX_BATTERY_CELL_MIN_VOLTAGE); + + /* Set minimal voltage MSL value*/ + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_MUX_BATTERY_CELL_VALUES_MSL_START_BIT, + CANTX_MUX_BATTERY_CELL_VALUES_MSL_LENGTH, + BC_VOLTAGE_MIN_MSL_mV, + CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); + + /* Set minimal voltage RSL value*/ + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_MUX_BATTERY_CELL_VALUES_RSL_START_BIT, + CANTX_MUX_BATTERY_CELL_VALUES_RSL_LENGTH, + BC_VOLTAGE_MIN_RSL_mV, + CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); + + /* Set minimal voltage MOL value*/ + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_MUX_BATTERY_CELL_VALUES_MOL_START_BIT, + CANTX_MUX_BATTERY_CELL_VALUES_MOL_LENGTH, + BC_VOLTAGE_MIN_MOL_mV, + CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); +} + +static STD_RETURN_TYPE_e CANTX_SendBatterySystemConfiguration(void) { + uint64_t messageData = 0u; + uint8_t canData[CAN_MAX_DLC] = {GEN_REPEAT_U(0u, GEN_STRIP(CAN_MAX_DLC))}; + + /* Set battery system general 1 message data*/ + CANTX_SetBatterySystemMuxGeneral1MessageData(&messageData); + /* Send battery system general 1 message*/ + CAN_TxSetCanDataWithMessageData(messageData, canData, CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); + STD_RETURN_TYPE_e queuedSuccessfully = CAN_DataSend( + CAN_NODE_DEBUG_MESSAGE, CANTX_DEBUG_BUILD_CONFIGURATION_ID, CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, canData); + messageData = 0u; + + if (queuedSuccessfully == STD_OK) { + /* Set battery system general 2 message data*/ + CANTX_SetBatterySystemMuxGeneral2MessageData(&messageData); + /* Send battery system general 2 message*/ + CAN_TxSetCanDataWithMessageData(messageData, canData, CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); + queuedSuccessfully = CAN_DataSend( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + canData); + messageData = 0u; + } + + if (queuedSuccessfully == STD_OK) { + /* Set battery system contactors message data*/ + CANTX_SetBatterySystemMuxContactorsMessageData(&messageData); + /* Send battery system contactors message*/ + CAN_TxSetCanDataWithMessageData(messageData, canData, CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); + queuedSuccessfully = CAN_DataSend( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + canData); + messageData = 0u; + } + + if (queuedSuccessfully == STD_OK) { + /* Set battery system current sensor message data*/ + CANTX_SetBatterySystemMuxCurrentSensorMessageData(&messageData); + /* Send battery system current sensor message*/ + CAN_TxSetCanDataWithMessageData(messageData, canData, CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); + queuedSuccessfully = CAN_DataSend( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + canData); + messageData = 0u; + } + + if (queuedSuccessfully == STD_OK) { + /* Set battery system fuse message data*/ + CANTX_SetBatterySystemMuxFuseMessageData(&messageData); + /* Send battery system fuse message*/ + CAN_TxSetCanDataWithMessageData(messageData, canData, CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); + queuedSuccessfully = CAN_DataSend( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + canData); + messageData = 0u; + } + + if (queuedSuccessfully == STD_OK) { + /* Set battery system max current message data*/ + CANTX_SetBatterySystemMuxMaxCurrentMessageData(&messageData); + /* Send battery system max current message*/ + CAN_TxSetCanDataWithMessageData(messageData, canData, CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); + queuedSuccessfully = CAN_DataSend( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + canData); + messageData = 0u; + } + + if (queuedSuccessfully == STD_OK) { + /* Set battery system open wire check message data*/ + CANTX_SetBatterySystemMuxOpenWireCheckMessageData(&messageData); + /* Send battery system open wire check message*/ + CAN_TxSetCanDataWithMessageData(messageData, canData, CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); + queuedSuccessfully = CAN_DataSend( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + canData); + messageData = 0u; + } + + if (queuedSuccessfully == STD_OK) { + /* Set battery system total numbers message data*/ + CANTX_SetBatterySystemMuxTotalNumbersMessageData(&messageData); + /* Send battery system total numbers message*/ + CAN_TxSetCanDataWithMessageData(messageData, canData, CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); + queuedSuccessfully = CAN_DataSend( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + canData); + } + + return queuedSuccessfully; +} + +static void CANTX_SetBatterySystemMuxGeneral1MessageData(uint64_t *pMessageData) { + FAS_ASSERT(pMessageData != NULL_PTR); + + /* Set multiplexer value */ + CANTX_SetDebugBuildConfigurationMux(pMessageData, CANTX_MUX_BATTERY_SYSTEM_GENERAL_1); + + /* Set number of strings value */ + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_MUX_BATTERY_SYSTEM_GENERAL_1_NR_OF_STRINGS_START_BIT, + CANTX_MUX_BATTERY_SYSTEM_GENERAL_1_NR_OF_STRINGS_LENGTH, + BS_NR_OF_STRINGS, + CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); + + /* Set number of modules per string value */ + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_MUX_BATTERY_SYSTEM_GENERAL_1_NR_OF_MODULES_PER_STRING_START_BIT, + CANTX_MUX_BATTERY_SYSTEM_GENERAL_1_NR_OF_MODULES_PER_STRING_LENGTH, + BS_NR_OF_MODULES_PER_STRING, + CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); + + /* Set number fo cell blocks per module value */ + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_MUX_BATTERY_SYSTEM_GENERAL_1_NR_OF_CELL_BLOCKS_PER_MODULE_START_BIT, + CANTX_MUX_BATTERY_SYSTEM_GENERAL_1_NR_OF_CELL_BLOCKS_PER_MODULE_LENGTH, + BS_NR_OF_CELL_BLOCKS_PER_MODULE, + CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); + + /* Set number of parallel cells per cell block value */ + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_MUX_BATTERY_SYSTEM_GENERAL_1_NR_OF_PARALLEL_CELLS_PER_CELL_BLOCK_START_BIT, + CANTX_MUX_BATTERY_SYSTEM_GENERAL_1_NR_OF_PARALLEL_CELLS_PER_CELL_BLOCK_LENGTH, + BS_NR_OF_PARALLEL_CELLS_PER_CELL_BLOCK, + CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); + + /* Set number of gpios per module value */ + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_MUX_BATTERY_SYSTEM_GENERAL_1_NR_OF_GPIOS_PER_MODULE_START_BIT, + CANTX_MUX_BATTERY_SYSTEM_GENERAL_1_NR_OF_GPIOS_PER_MODULE_LENGTH, + BS_NR_OF_GPIOS_PER_MODULE, + CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); + + /* Set number of gpas per module value */ + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_MUX_BATTERY_SYSTEM_GENERAL_1_NR_OF_GPAS_PER_MODULE_START_BIT, + CANTX_MUX_BATTERY_SYSTEM_GENERAL_1_NR_OF_GPAS_PER_MODULE_LENGTH, + BS_NR_OF_GPAS_PER_MODULE, + CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); + + /* Set number of temperature sensors per module value */ + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_MUX_BATTERY_SYSTEM_GENERAL_1_NR_OF_TEMPERATURE_SENSORS_PER_MODULE_START_BIT, + CANTX_MUX_BATTERY_SYSTEM_GENERAL_1_NR_OF_TEMPERATURE_SENSORS_PER_MODULE_LENGTH, + BS_NR_OF_TEMP_SENSORS_PER_MODULE, + CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); +} + +static void CANTX_SetBatterySystemMuxGeneral2MessageData(uint64_t *pMessageData) { + FAS_ASSERT(pMessageData != NULL_PTR); + + /* Set multiplexer value */ + CANTX_SetDebugBuildConfigurationMux(pMessageData, CANTX_MUX_BATTERY_SYSTEM_GENERAL_2); + + /* Set positive discharge current flag */ + uint64_t signalData = CAN_ConvertBooleanToInteger(BS_POSITIVE_DISCHARGE_CURRENT); + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_MUX_BATTERY_SYSTEM_GENERAL_2_POSITIVE_DISCHARGE_CURRENT_START_BIT, + CANTX_MUX_BATTERY_SYSTEM_GENERAL_2_POSITIVE_DISCHARGE_CURRENT_LENGTH, + signalData, + CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); + + /* Set ignore interlock feedback flag */ + signalData = CAN_ConvertBooleanToInteger(BS_IGNORE_INTERLOCK_FEEDBACK); + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_MUX_BATTERY_SYSTEM_GENERAL_2_IGNORE_INTERLOCK_FEEDBACK_START_BIT, + CANTX_MUX_BATTERY_SYSTEM_GENERAL_2_IGNORE_INTERLOCK_FEEDBACK_LENGTH, + signalData, + CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); + + /* Set check can timing flag */ + signalData = CAN_ConvertBooleanToInteger(BS_CHECK_CAN_TIMING); + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_MUX_BATTERY_SYSTEM_GENERAL_2_CHECK_CAN_TIMING_START_BIT, + CANTX_MUX_BATTERY_SYSTEM_GENERAL_2_CHECK_CAN_TIMING_LENGTH, + signalData, + CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); + + /* Set balancing default inactive flag */ + signalData = CAN_ConvertBooleanToInteger(BS_BALANCING_DEFAULT_INACTIVE); + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_MUX_BATTERY_SYSTEM_GENERAL_2_BALANCING_DEFAULT_INACTIVE_START_BIT, + CANTX_MUX_BATTERY_SYSTEM_GENERAL_2_BALANCING_DEFAULT_INACTIVE_LENGTH, + signalData, + CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); + + /* Set balancing resistance value */ + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_MUX_BATTERY_SYSTEM_GENERAL_2_BALANCING_RESISTANCE_START_BIT, + CANTX_MUX_BATTERY_SYSTEM_GENERAL_2_BALANCING_RESISTANCE_LENGTH, + (uint64_t)BS_BALANCING_RESISTANCE_ohm, + CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); + + /* Set rest current value */ + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_MUX_BATTERY_SYSTEM_GENERAL_2_REST_CURRENT_START_BIT, + CANTX_MUX_BATTERY_SYSTEM_GENERAL_2_REST_CURRENT_LENGTH, + BS_REST_CURRENT_mA, + CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); + + /* Set relaxation period value */ + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_MUX_BATTERY_SYSTEM_GENERAL_2_RELAXATION_PERIOD_START_BIT, + CANTX_MUX_BATTERY_SYSTEM_GENERAL_2_RELAXATION_PERIOD_LENGTH, + BS_RELAXATION_PERIOD_10ms, + CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); +} + +static void CANTX_SetBatterySystemMuxContactorsMessageData(uint64_t *pMessageData) { + FAS_ASSERT(pMessageData != NULL_PTR); + + /* Set multiplexer value */ + CANTX_SetDebugBuildConfigurationMux(pMessageData, CANTX_MUX_BATTERY_SYSTEM_CONTACTORS); + + /* Set number of contactors outside string value */ + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_MUX_BATTERY_SYSTEM_CONTACTORS_NR_OF_CONTACTORS_OUTSIDE_STRINGS_START_BIT, + CANTX_MUX_BATTERY_SYSTEM_CONTACTORS_NR_OF_CONTACTORS_OUTSIDE_STRINGS_LENGTH, + BS_NR_OF_CONTACTORS_OUTSIDE_STRINGS, + CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); + + /* Set number of contactors value */ + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_MUX_BATTERY_SYSTEM_CONTACTORS_NR_OF_CONTACTORS_START_BIT, + CANTX_MUX_BATTERY_SYSTEM_CONTACTORS_NR_OF_CONTACTORS_LENGTH, + BS_NR_OF_CONTACTORS, + CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); + + /* Set main contactors maximum break current value */ + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_MUX_BATTERY_SYSTEM_CONTACTORS_MAIN_CONTACTOR_MAX_BREAK_CURRENT_START_BIT, + CANTX_MUX_BATTERY_SYSTEM_CONTACTORS_MAIN_CONTACTOR_MAX_BREAK_CURRENT_LENGTH, + BS_MAIN_CONTACTORS_MAXIMUM_BREAK_CURRENT_mA, + CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); +} + +static void CANTX_SetBatterySystemMuxCurrentSensorMessageData(uint64_t *pMessageData) { + FAS_ASSERT(pMessageData != NULL_PTR); + + /* Set multiplexer value */ + CANTX_SetDebugBuildConfigurationMux(pMessageData, CANTX_MUX_BATTERY_SYSTEM_CURRENT_SENSOR); + + /* Set current sensor present flag */ + uint64_t signalData = CAN_ConvertBooleanToInteger(BS_CURRENT_SENSOR_PRESENT); + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_MUX_BATTERY_SYSTEM_CURRENT_SENSOR_CURRENT_SENSOR_PRESENT_START_BIT, + CANTX_MUX_BATTERY_SYSTEM_CURRENT_SENSOR_CURRENT_SENSOR_PRESENT_LENGTH, + signalData, + CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); + + /* Set number of voltages from current sensor value */ + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_MUX_BATTERY_SYSTEM_CURRENT_SENSOR_NR_OF_VOLTAGES_FROM_CURRENT_SENSOR_START_BIT, + CANTX_MUX_BATTERY_SYSTEM_CURRENT_SENSOR_NR_OF_VOLTAGES_FROM_CURRENT_SENSOR_LENGTH, + BS_NR_OF_VOLTAGES_FROM_CURRENT_SENSOR, + CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); + +#if BS_CURRENT_SENSOR_PRESENT == true +#ifdef CURRENT_SENSOR_ISABELLENHUETTE_CYCLIC + /* Set current sensor cyclic flag */ + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_MUX_BATTERY_SYSTEM_CURRENT_SENSOR_CURRENT_SENSOR_CYCLIC_START_BIT, + CANTX_MUX_BATTERY_SYSTEM_CURRENT_SENSOR_CURRENT_SENSOR_CYCLIC_LENGTH, + (uint64_t)CURRENT_SENSOR_CYCLIC, + CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); +#elif CURRENT_SENSOR_ISABELLENHUETTE_TRIGGERED + /* Set current sensor cyclic flag */ + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_MUX_BATTERY_SYSTEM_CURRENT_SENSOR_CURRENT_SENSOR_CYCLIC_START_BIT, + CANTX_MUX_BATTERY_SYSTEM_CURRENT_SENSOR_CURRENT_SENSOR_CYCLIC_LENGTH, + (uint64_t)CURRENT_SENSOR_TRIGGERED, + CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); +#endif /* CURRENT_SENSOR_ISABELLENHUETTE_CYCLIC*/ + + /* Set current measurement timeout value */ + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_MUX_BATTERY_SYSTEM_CURRENT_SENSOR_CURRENT_MEASUREMENT_TIMEOUT_START_BIT, + CANTX_MUX_BATTERY_SYSTEM_CURRENT_SENSOR_CURRENT_MEASUREMENT_TIMEOUT_LENGTH, + BS_CURRENT_MEASUREMENT_RESPONSE_TIMEOUT_ms, + CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); + + /* Set coulomb counting measurement timeout value */ + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_MUX_BATTERY_SYSTEM_CURRENT_SENSOR_COULOMB_COUNTING_MEASUREMENT_TIMEOUT_START_BIT, + CANTX_MUX_BATTERY_SYSTEM_CURRENT_SENSOR_COULOMB_COUNTING_MEASUREMENT_TIMEOUT_LENGTH, + BS_COULOMB_COUNTING_MEASUREMENT_RESPONSE_TIMEOUT_ms, + CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); + + /* Set energy counting measurement timeout value */ + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_MUX_BATTERY_SYSTEM_CURRENT_SENSOR_ENERGY_COUNTING_MEASUREMENT_TIMEOUT_START_BIT, + CANTX_MUX_BATTERY_SYSTEM_CURRENT_SENSOR_ENERGY_COUNTING_MEASUREMENT_TIMEOUT_LENGTH, + BS_ENERGY_COUNTING_MEASUREMENT_RESPONSE_TIMEOUT_ms, + CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); +#endif /* BS_CURRENT_SENSOR_PRESENT == true */ + + /* Set threshold no current value */ + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_MUX_BATTERY_SYSTEM_CURRENT_SENSOR_THRESHOLD_NO_CURRENT_START_BIT, + CANTX_MUX_BATTERY_SYSTEM_CURRENT_SENSOR_THRESHOLD_NO_CURRENT_LENGTH, + BS_CS_THRESHOLD_NO_CURRENT_mA, + CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); +} + +static void CANTX_SetBatterySystemMuxFuseMessageData(uint64_t *pMessageData) { + FAS_ASSERT(pMessageData != NULL_PTR); + + /* Set multiplexer value */ + CANTX_SetDebugBuildConfigurationMux(pMessageData, CANTX_MUX_BATTERY_SYSTEM_FUSE); + + /* Set check fuse placed in charge path flag */ + uint64_t signalData = CAN_ConvertBooleanToInteger(BS_CHECK_FUSE_PLACED_IN_CHARGE_PATH); + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_MUX_BATTERY_SYSTEM_FUSE_CHECK_FUSED_PLACED_IN_CHARGE_PATH_START_BIT, + CANTX_MUX_BATTERY_SYSTEM_FUSE_CHECK_FUSED_PLACED_IN_CHARGE_PATH_LENGTH, + signalData, + CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); + + /* Set check fuse placed in normal path flag */ + signalData = CAN_ConvertBooleanToInteger(BS_CHECK_FUSE_PLACED_IN_NORMAL_PATH); + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_MUX_BATTERY_SYSTEM_FUSE_CHECK_FUSED_PLACED_IN_NORMAL_PATH_START_BIT, + CANTX_MUX_BATTERY_SYSTEM_FUSE_CHECK_FUSED_PLACED_IN_NORMAL_PATH_LENGTH, + signalData, + CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); + + /* Set max voltage drop over fuse value */ + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_MUX_BATTERY_SYSTEM_FUSE_MAX_VOLTAGE_DROP_OVER_FUSE_START_BIT, + CANTX_MUX_BATTERY_SYSTEM_FUSE_MAX_VOLTAGE_DROP_OVER_FUSE_LENGTH, + BS_MAX_VOLTAGE_DROP_OVER_FUSE_mV, + CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); + + /* Set main fuse maximum trigger duration value */ + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_MUX_BATTERY_SYSTEM_FUSE_MAIN_FUSE_MAXIMUM_TRIGGER_DURATION_START_BIT, + CANTX_MUX_BATTERY_SYSTEM_FUSE_MAIN_FUSE_MAXIMUM_TRIGGER_DURATION_LENGTH, + BS_MAIN_FUSE_MAXIMUM_TRIGGER_DURATION_ms, + CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); +} + +static void CANTX_SetBatterySystemMuxMaxCurrentMessageData(uint64_t *pMessageData) { + FAS_ASSERT(pMessageData != NULL_PTR); + + /* Set multiplexer value */ + CANTX_SetDebugBuildConfigurationMux(pMessageData, CANTX_MUX_BATTERY_SYSTEM_MAX_CURRENT); + + /* Set max string current value */ + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_MUX_BATTERY_SYSTEM_MAXIMUM_CURRENT_MAX_STRING_CURRENT_START_BIT, + CANTX_MUX_BATTERY_SYSTEM_MAXIMUM_CURRENT_MAX_STRING_CURRENT_LENGTH, + BS_MAXIMUM_STRING_CURRENT_mA, + CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); + + /* Set max pack current value */ + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_MUX_BATTERY_SYSTEM_MAXIMUM_CURRENT_MAX_PACK_CURRENT_START_BIT, + CANTX_MUX_BATTERY_SYSTEM_MAXIMUM_CURRENT_MAX_PACK_CURRENT_LENGTH, + BS_MAXIMUM_PACK_CURRENT_mA, + CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); +} + +static void CANTX_SetBatterySystemMuxOpenWireCheckMessageData(uint64_t *pMessageData) { + FAS_ASSERT(pMessageData != NULL_PTR); + /* Signal type of the open wire period values */ + static const CAN_SIGNAL_TYPE_s cantx_signalOpenWirePeriod = { + 0u, + 0u, + UNIT_CONVERSION_FACTOR_1000_FLOAT, + CANTX_MUX_BATTERY_SYSTEM_OPEN_WIRE_CHECK_OFFSET, + CANTX_MUX_BATTERY_SYSTEM_OPEN_WIRE_CHECK_MIN_VALUE, + CANTX_MUX_BATTERY_SYSTEM_OPEN_WIRE_CHECK_MAX_VALUE}; + + /* Set multiplexer value */ + CANTX_SetDebugBuildConfigurationMux(pMessageData, CANTX_MUX_BATTERY_SYSTEM_OPEN_WIRE_CHECK); + + /* Set standby periodic open wire check flag */ + uint64_t convertedSignalData = CAN_ConvertBooleanToInteger(BS_STANDBY_PERIODIC_OPEN_WIRE_CHECK); + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_MUX_BATTERY_SYSTEM_OPEN_WIRE_CHECK_STANDBY_PERIODIC_OPEN_WIRE_CHECK_START_BIT, + CANTX_MUX_BATTERY_SYSTEM_OPEN_WIRE_CHECK_STANDBY_PERIODIC_OPEN_WIRE_CHECK_LENGTH, + convertedSignalData, + CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); + + /* Set standby open wire period value */ + float_t signalData = (float_t)BS_STANDBY_OPEN_WIRE_PERIOD_ms; + CAN_TxPrepareSignalData(&signalData, cantx_signalOpenWirePeriod); + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_MUX_BATTERY_SYSTEM_OPEN_WIRE_CHECK_STANDBY_OPEN_WIRE_PERIOD_START_BIT, + CANTX_MUX_BATTERY_SYSTEM_OPEN_WIRE_CHECK_STANDBY_OPEN_WIRE_PERIOD_LENGTH, + (uint64_t)signalData, + CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); + + /* Set normal periodic open wire check flag */ + convertedSignalData = CAN_ConvertBooleanToInteger(BS_NORMAL_PERIODIC_OPEN_WIRE_CHECK); + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_MUX_BATTERY_SYSTEM_OPEN_WIRE_CHECK_NORMAL_PERIODIC_OPEN_WIRE_CHECK_START_BIT, + CANTX_MUX_BATTERY_SYSTEM_OPEN_WIRE_CHECK_NORMAL_PERIODIC_OPEN_WIRE_CHECK_LENGTH, + convertedSignalData, + CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); + + /* Set normal open wire period value */ + signalData = (float_t)BS_NORMAL_OPEN_WIRE_PERIOD_ms; + CAN_TxPrepareSignalData(&signalData, cantx_signalOpenWirePeriod); + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_MUX_BATTERY_SYSTEM_OPEN_WIRE_CHECK_NORMAL_OPEN_WIRE_PERIOD_START_BIT, + CANTX_MUX_BATTERY_SYSTEM_OPEN_WIRE_CHECK_NORMAL_OPEN_WIRE_PERIOD_LENGTH, + (uint64_t)signalData, + CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); + + /* Set charge periodic open wire check flag */ + convertedSignalData = CAN_ConvertBooleanToInteger(BS_CHARGE_PERIODIC_OPEN_WIRE_CHECK); + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_MUX_BATTERY_SYSTEM_OPEN_WIRE_CHECK_CHARGE_PERIODIC_OPEN_WIRE_CHECK_START_BIT, + CANTX_MUX_BATTERY_SYSTEM_OPEN_WIRE_CHECK_CHARGE_PERIODIC_OPEN_WIRE_CHECK_LENGTH, + convertedSignalData, + CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); + + /* Set charge open wire period value */ + signalData = (float_t)BS_CHARGE_OPEN_WIRE_PERIOD_ms; + CAN_TxPrepareSignalData(&signalData, cantx_signalOpenWirePeriod); + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_MUX_BATTERY_SYSTEM_OPEN_WIRE_CHECK_CHARGE_OPEN_WIRE_PERIOD_START_BIT, + CANTX_MUX_BATTERY_SYSTEM_OPEN_WIRE_CHECK_CHARGE_OPEN_WIRE_PERIOD_LENGTH, + (uint64_t)signalData, + CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); + + /* Set error open wire period value */ + signalData = (float_t)BS_ERROR_OPEN_WIRE_PERIOD_ms; + CAN_TxPrepareSignalData(&signalData, cantx_signalOpenWirePeriod); + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_MUX_BATTERY_SYSTEM_OPEN_WIRE_CHECK_ERROR_OPEN_WIRE_PERIOD_START_BIT, + CANTX_MUX_BATTERY_SYSTEM_OPEN_WIRE_CHECK_ERROR_OPEN_WIRE_PERIOD_LENGTH, + (uint64_t)signalData, + CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); +} + +static void CANTX_SetBatterySystemMuxTotalNumbersMessageData(uint64_t *pMessageData) { + FAS_ASSERT(pMessageData != NULL_PTR); + + /* Set multiplexer value */ + CANTX_SetDebugBuildConfigurationMux(pMessageData, CANTX_MUX_BATTERY_SYSTEM_TOTAL_NUMBERS); + + /* Set number of cell blocks per string value */ + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_MUX_BATTERY_SYSTEM_TOTAL_NUMBERS_NR_OF_CELL_BLOCKS_PER_STRING_START_BIT, + CANTX_MUX_BATTERY_SYSTEM_TOTAL_NUMBERS_NR_OF_CELL_BLOCKS_PER_STRING_LENGTH, + BS_NR_OF_CELL_BLOCKS_PER_STRING, + CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); + + /* Set number of cell blocks value */ + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_MUX_BATTERY_SYSTEM_TOTAL_NUMBERS_NR_OF_CELL_BLOCKS_START_BIT, + CANTX_MUX_BATTERY_SYSTEM_TOTAL_NUMBERS_NR_OF_CELL_BLOCKS_LENGTH, + BS_NR_OF_CELL_BLOCKS, + CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); + + /* Set number of temperature sensors per string value */ + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_MUX_BATTERY_SYSTEM_TOTAL_NUMBERS_NR_OF_TEMP_SENSORS_PER_STRING_START_BIT, + CANTX_MUX_BATTERY_SYSTEM_TOTAL_NUMBERS_NR_OF_TEMP_SENSORS_PER_STRING_LENGTH, + BS_NR_OF_TEMP_SENSORS_PER_STRING, + CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); + + /* Set number of temperature sensors value */ + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_MUX_BATTERY_SYSTEM_TOTAL_NUMBERS_NR_OF_TEMP_SENSORS_START_BIT, + CANTX_MUX_BATTERY_SYSTEM_TOTAL_NUMBERS_NR_OF_TEMP_SENSORS_LENGTH, + BS_NR_OF_TEMP_SENSORS, + CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS); +} + +/*========== Extern Function Implementations ================================*/ +extern STD_RETURN_TYPE_e CANTX_DebugBuildConfiguration(void) { + /* Trigger the application configuration message */ + STD_RETURN_TYPE_e queuedSuccessfully = CANTX_SendApplicationConfiguration(); + if (queuedSuccessfully == STD_OK) { + /* Trigger the slave configuration message */ + queuedSuccessfully = CANTX_SendSlaveConfiguration(); + } + + if (queuedSuccessfully == STD_OK) { + /* Trigger battery cell configuration messages */ + queuedSuccessfully = CANTX_SendBatteryCellConfiguration(); + } + + if (queuedSuccessfully == STD_OK) { + /* Trigger battery system configuration messages */ + queuedSuccessfully = CANTX_SendBatterySystemConfiguration(); + } + return queuedSuccessfully; +} + +/*========== Externalized Static Function Implementations (Unit Test) =======*/ +#ifdef UNITY_UNIT_TEST +extern void TEST_CANTX_SetDebugBuildConfigurationMux(uint64_t *pMessageData, uint8_t muxValue) { + CANTX_SetDebugBuildConfigurationMux(pMessageData, muxValue); +} + +extern STD_RETURN_TYPE_e TEST_CANTX_SendApplicationConfiguration(void) { + return CANTX_SendApplicationConfiguration(); +} + +extern STD_RETURN_TYPE_e TEST_CANTX_SendSlaveConfiguration(void) { + return CANTX_SendSlaveConfiguration(); +} + +extern STD_RETURN_TYPE_e TEST_CANTX_SendBatteryCellConfiguration(void) { + return CANTX_SendBatteryCellConfiguration(); +} + +extern void TEST_CANTX_SetBatteryCellMuxMessageData(uint64_t *pMessageData) { + CANTX_SetBatteryCellMuxMessageData(pMessageData); +} + +extern void TEST_CANTX_SetBatteryCellMuxMaxChargeCurrentMessageData(uint64_t *pMessageData) { + CANTX_SetBatteryCellMuxMaxChargeCurrentMessageData(pMessageData); +} + +extern void TEST_CANTX_SetBatteryCellMuxMaxChargeTemperatureMessageData(uint64_t *pMessageData) { + CANTX_SetBatteryCellMuxMaxChargeTemperatureMessageData(pMessageData); +} + +extern void TEST_CANTX_SetBatteryCellMuxMaxDischargeCurrentMessageData(uint64_t *pMessageData) { + CANTX_SetBatteryCellMuxMaxDischargeCurrentMessageData(pMessageData); +} + +extern void TEST_CANTX_SetBatteryCellMuxMaxDischargeTemperatureMessageData(uint64_t *pMessageData) { + CANTX_SetBatteryCellMuxMaxDischargeTemperatureMessageData(pMessageData); +} + +extern void TEST_CANTX_SetBatteryCellMuxMaxVoltageMessageData(uint64_t *pMessageData) { + CANTX_SetBatteryCellMuxMaxVoltageMessageData(pMessageData); +} + +extern void TEST_CANTX_SetBatteryCellMuxMinChargeTemperatureMessageData(uint64_t *pMessageData) { + CANTX_SetBatteryCellMuxMinChargeTemperatureMessageData(pMessageData); +} + +extern void TEST_CANTX_SetBatteryCellMuxMinDischargeTemperatureMessageData(uint64_t *pMessageData) { + CANTX_SetBatteryCellMuxMinDischargeTemperatureMessageData(pMessageData); +} + +extern void TEST_CANTX_SetBatteryCellMuxMinVoltageMessageData(uint64_t *pMessageData) { + CANTX_SetBatteryCellMuxMinVoltageMessageData(pMessageData); +} + +extern STD_RETURN_TYPE_e TEST_CANTX_SendBatterySystemConfiguration(void) { + return CANTX_SendBatterySystemConfiguration(); +} + +extern void TEST_CANTX_SetBatterySystemMuxGeneral1MessageData(uint64_t *pMessageData) { + CANTX_SetBatterySystemMuxGeneral1MessageData(pMessageData); +} + +extern void TEST_CANTX_SetBatterySystemMuxGeneral2MessageData(uint64_t *pMessageData) { + CANTX_SetBatterySystemMuxGeneral2MessageData(pMessageData); +} + +extern void TEST_CANTX_SetBatterySystemMuxContactorsMessageData(uint64_t *pMessageData) { + CANTX_SetBatterySystemMuxContactorsMessageData(pMessageData); +} + +extern void TEST_CANTX_SetBatterySystemMuxCurrentSensorMessageData(uint64_t *pMessageData) { + CANTX_SetBatterySystemMuxCurrentSensorMessageData(pMessageData); +} + +extern void TEST_CANTX_SetBatterySystemMuxFuseMessageData(uint64_t *pMessageData) { + CANTX_SetBatterySystemMuxFuseMessageData(pMessageData); +} + +extern void TEST_CANTX_SetBatterySystemMuxMaxCurrentMessageData(uint64_t *pMessageData) { + CANTX_SetBatterySystemMuxMaxCurrentMessageData(pMessageData); +} + +extern void TEST_CANTX_SetBatterySystemMuxOpenWireCheckMessageData(uint64_t *pMessageData) { + CANTX_SetBatterySystemMuxOpenWireCheckMessageData(pMessageData); +} + +extern void TEST_CANTX_SetBatterySystemMuxTotalNumbersMessageData(uint64_t *pMessageData) { + CANTX_SetBatterySystemMuxTotalNumbersMessageData(pMessageData); +} +#endif diff --git a/src/app/driver/can/cbs/tx-async/can_cbs_tx_debug-build-configuration.h b/src/app/driver/can/cbs/tx-async/can_cbs_tx_debug-build-configuration.h new file mode 100644 index 00000000..e18df597 --- /dev/null +++ b/src/app/driver/can/cbs/tx-async/can_cbs_tx_debug-build-configuration.h @@ -0,0 +1,120 @@ +/** + * + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * We kindly request you to use one or more of the following phrases to refer to + * foxBMS in your hardware, software, documentation or advertising materials: + * + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" + * + */ + +/** + * @file can_cbs_tx_debug-build-configuration.h + * @author foxBMS Team + * @date 2022-11-16 (date of creation) + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS + * @prefix CANTX + * + * @brief CAN header + * @details CAN Tx callback for unsupported requests + */ + +#ifndef FOXBMS__CAN_CBS_TX_DEBUG_BUILD_CONFIGURATION_H_ +#define FOXBMS__CAN_CBS_TX_DEBUG_BUILD_CONFIGURATION_H_ + +/*========== Includes =======================================================*/ + +#include "can_cfg.h" + +/*========== Macros and Definitions =========================================*/ + +/*========== Extern Constant and Variable Declarations ======================*/ + +/*========== Extern Function Prototypes =====================================*/ +/** + * @brief Sends the configuration of the software build + */ +extern STD_RETURN_TYPE_e CANTX_DebugBuildConfiguration(void); + +/*========== Externalized Static Functions Prototypes (Unit Test) ===========*/ +#ifdef UNITY_UNIT_TEST + +extern void TEST_CANTX_SetDebugBuildConfigurationMux(uint64_t *pMessageData, uint8_t muxValue); + +extern STD_RETURN_TYPE_e TEST_CANTX_SendApplicationConfiguration(void); + +extern STD_RETURN_TYPE_e TEST_CANTX_SendSlaveConfiguration(void); + +extern STD_RETURN_TYPE_e TEST_CANTX_SendBatteryCellConfiguration(void); + +extern void TEST_CANTX_SetBatteryCellMuxMessageData(uint64_t *pMessageData); + +extern void TEST_CANTX_SetBatteryCellMuxMaxChargeCurrentMessageData(uint64_t *pMessageData); + +extern void TEST_CANTX_SetBatteryCellMuxMaxChargeTemperatureMessageData(uint64_t *pMessageData); + +extern void TEST_CANTX_SetBatteryCellMuxMaxDischargeCurrentMessageData(uint64_t *pMessageData); + +extern void TEST_CANTX_SetBatteryCellMuxMaxDischargeTemperatureMessageData(uint64_t *pMessageData); + +extern void TEST_CANTX_SetBatteryCellMuxMaxVoltageMessageData(uint64_t *pMessageData); + +extern void TEST_CANTX_SetBatteryCellMuxMinChargeTemperatureMessageData(uint64_t *pMessageData); + +extern void TEST_CANTX_SetBatteryCellMuxMinDischargeTemperatureMessageData(uint64_t *pMessageData); + +extern void TEST_CANTX_SetBatteryCellMuxMinVoltageMessageData(uint64_t *pMessageData); + +extern STD_RETURN_TYPE_e TEST_CANTX_SendBatterySystemConfiguration(void); + +extern void TEST_CANTX_SetBatterySystemMuxGeneral1MessageData(uint64_t *pMessageData); + +extern void TEST_CANTX_SetBatterySystemMuxGeneral2MessageData(uint64_t *pMessageData); + +extern void TEST_CANTX_SetBatterySystemMuxContactorsMessageData(uint64_t *pMessageData); + +extern void TEST_CANTX_SetBatterySystemMuxCurrentSensorMessageData(uint64_t *pMessageData); + +extern void TEST_CANTX_SetBatterySystemMuxFuseMessageData(uint64_t *pMessageData); + +extern void TEST_CANTX_SetBatterySystemMuxMaxCurrentMessageData(uint64_t *pMessageData); + +extern void TEST_CANTX_SetBatterySystemMuxOpenWireCheckMessageData(uint64_t *pMessageData); + +extern void TEST_CANTX_SetBatterySystemMuxTotalNumbersMessageData(uint64_t *pMessageData); +#endif + +#endif /* FOXBMS__CAN_CBS_TX_DEBUG_BUILD_CONFIGURATION_H_ */ diff --git a/src/app/driver/can/cbs/tx/can_cbs_tx_debug-response.c b/src/app/driver/can/cbs/tx-async/can_cbs_tx_debug-response.c similarity index 81% rename from src/app/driver/can/cbs/tx/can_cbs_tx_debug-response.c rename to src/app/driver/can/cbs/tx-async/can_cbs_tx_debug-response.c index bd94d6b3..b2e440a8 100644 --- a/src/app/driver/can/cbs/tx/can_cbs_tx_debug-response.c +++ b/src/app/driver/can/cbs/tx-async/can_cbs_tx_debug-response.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file can_cbs_tx_debug-response.c * @author foxBMS Team * @date 2019-12-04 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix CANTX * @@ -66,7 +66,7 @@ #include "HL_reg_system.h" #include "can.h" -#include "can_cfg_tx-message-definitions.h" +#include "can_cfg_tx-async-message-definitions.h" #include "can_helper.h" #include "database.h" #include "foxmath.h" @@ -186,11 +186,11 @@ /** @{ * Register mapping of 'DIEIDL' (see #CANTX_TransmitMcuWaferInformation) - * x-coordinate: bits 0-11 -> 0b_0000_00000_0000_0000_0000_1111_1111_1111 = 0x_0000_0FFF - * y-coordinate: bits 12-23 -> 0b_0000_00000_1111_1111_1111_0000_0000_0000 = 0x_00FF_F000 - * wafer number: bits 24-32 -> 0b_1111_11111_0000_0000_0000_0000_0000_0000 = 0x_FF00_0000 + * x-coordinate: bits 0-11 -> 0b_0000_00000_0000_0000_0000_1111_1111_1111 = 0x00000FFF + * y-coordinate: bits 12-23 -> 0b_0000_00000_1111_1111_1111_0000_0000_0000 = 0x00FFF000 + * wafer number: bits 24-32 -> 0b_1111_11111_0000_0000_0000_0000_0000_0000 = 0xFF000000 * - * source : SPNU563A-March 2018: Table 2-47. Die Identification Register, Lower Word (DIEIDL) Field Descriptions + * docref: SPNU563A-March 2018: Table 2-47. Die Identification Register, Lower Word (DIEIDL) Field Descriptions * */ #define CANTX_WAFER_X_COORDINATE_BITMASK (0x00000FFFuLL) #define CANTX_WAFER_Y_COORDINATE_BITMASK (0x00FFF000uLL) @@ -227,77 +227,82 @@ /*========== Static Function Prototypes =====================================*/ /** * @brief Transmit the embedded software version information - * @return #STD_OK if transmission successful, otherwise #STD_NOT_OK + * @return message data for the can message */ -static STD_RETURN_TYPE_e CANTX_TransmitBmsVersionInfo(void); +static uint64_t CANTX_TransmitBmsVersionInfo(void); /** * @brief Transmit the MCU's unique id - * @return #STD_OK if transmission successful, otherwise #STD_NOT_OK + * @return message data for the can message */ -static STD_RETURN_TYPE_e CANTX_TransmitMcuUniqueDieId(void); +static uint64_t CANTX_TransmitMcuUniqueDieId(void); /** * @brief Transmit the MCU's lot number ID information - * @return #STD_OK if transmission successful, otherwise #STD_NOT_OK + * @return message data for the can message */ -static STD_RETURN_TYPE_e CANTX_TransmitMcuLotNumber(void); +static uint64_t CANTX_TransmitMcuLotNumber(void); /** * @brief Transmit the MCU's wafer information - * @return #STD_OK if transmission successful, otherwise #STD_NOT_OK + * @return message data for the can message */ -static STD_RETURN_TYPE_e CANTX_TransmitMcuWaferInformation(void); +static uint64_t CANTX_TransmitMcuWaferInformation(void); /** * @brief Transmit a boot message * @param messageData message data to be put in the boot message - * @return #STD_OK if transmission successful, otherwise #STD_NOT_OK + * @return message data for the can message */ -static STD_RETURN_TYPE_e CANTX_TransmitBootMagic(uint64_t messageData); +static uint64_t CANTX_TransmitBootMagic(uint64_t messageData); /** * @brief Transmit the boot message and its magic start data - * @return #STD_OK if transmission successful, otherwise #STD_NOT_OK + * @return message data for the can message */ -static STD_RETURN_TYPE_e CANTX_TransmitBootMagicStart(void); +static uint64_t CANTX_TransmitBootMagicStart(void); /** * @brief Transmit the boot message and its magic end data - * @return #STD_OK if transmission successful, otherwise #STD_NOT_OK + * @return message data for the can message */ -static STD_RETURN_TYPE_e CANTX_TransmitBootMagicEnd(void); +static uint64_t CANTX_TransmitBootMagicEnd(void); /** * @brief Transmit the RTC time message - * @return #STD_OK if transmission successful, otherwise #STD_NOT_OK + * @return message data for the can message */ -static STD_RETURN_TYPE_e CANTX_TransmitRtcTime(void); +static uint64_t CANTX_TransmitRtcTime(void); /** * @brief Transmit the commit hash + * @return message data for the can message + */ +static uint64_t CANTX_TransmitCommitHash(void); + +/** + * @brief Sets the can data and sends the message + * @param messageData Data that will be transmitted with the can message * @return #STD_OK if transmission successful, otherwise #STD_NOT_OK -*/ -static STD_RETURN_TYPE_e CANTX_TransmitCommitHash(void); + */ +static STD_RETURN_TYPE_e CANTX_DebugResponseSendMessage(uint64_t messageData); /*========== Static Function Implementations ================================*/ -static STD_RETURN_TYPE_e CANTX_TransmitBmsVersionInfo(void) { - uint8_t data[] = {GEN_REPEAT_U(0u, GEN_STRIP(CAN_MAX_DLC))}; - +static uint64_t CANTX_TransmitBmsVersionInfo(void) { /* Set release distance (capped to maximum value) */ const uint8_t distanceCapped = (uint8_t)MATH_MinimumOfTwoUint16_t( ver_foxbmsVersionInformation.distanceFromLastRelease, (uint16_t)CANTX_BOOT_MESSAGE_MAXIMUM_RELEASE_DISTANCE); - uint8_t releaseDistanceOverflow = 0; + uint8_t releaseDistanceOverflow = 0u; if (ver_foxbmsVersionInformation.distanceFromLastRelease > CANTX_BOOT_MESSAGE_MAXIMUM_RELEASE_DISTANCE) { - releaseDistanceOverflow = 1; + releaseDistanceOverflow = 1u; } - uint64_t isDirty = 0; + uint64_t isDirty = 0u; if (ver_foxbmsVersionInformation.isDirty == true) { - isDirty = 1; + isDirty = 1u; } - uint64_t underVersionControl = 0; + uint64_t underVersionControl = 0u; if (ver_foxbmsVersionInformation.underVersionControl == true) { - underVersionControl = 1; + underVersionControl = 1u; } uint64_t message = 0u; @@ -349,16 +354,11 @@ static STD_RETURN_TYPE_e CANTX_TransmitBmsVersionInfo(void) { CANTX_MUX_BMS_SOFTWARE_VERSION_INFO_SIGNAL_UNDER_VERSION_CONTROL_LENGTH, underVersionControl, CAN_BIG_ENDIAN); - CAN_TxSetCanDataWithMessageData(message, &data[0], CAN_BIG_ENDIAN); - STD_RETURN_TYPE_e successfullyQueued = - CAN_DataSend(CAN_NODE_DEBUG_MESSAGE, CANTX_DEBUG_RESPONSE_ID, CANTX_DEBUG_IDENTIFIER, &data[0]); - return successfullyQueued; + return message; } -static STD_RETURN_TYPE_e CANTX_TransmitMcuUniqueDieId(void) { - uint8_t data[] = {GEN_REPEAT_U(0u, GEN_STRIP(CAN_MAX_DLC))}; - +static uint64_t CANTX_TransmitMcuUniqueDieId(void) { /* Read out device register with unique ID */ const uint32_t deviceRegister = systemREG1->DEVID; @@ -375,16 +375,11 @@ static STD_RETURN_TYPE_e CANTX_TransmitMcuUniqueDieId(void) { CANTX_MUX_MCU_UNIQUE_DIE_ID_SIGNAL_UNIQUE_DIE_ID_LENGTH, deviceRegister, CAN_BIG_ENDIAN); - CAN_TxSetCanDataWithMessageData(message, &data[0], CAN_BIG_ENDIAN); - STD_RETURN_TYPE_e successfullyQueued = - CAN_DataSend(CAN_NODE_DEBUG_MESSAGE, CANTX_DEBUG_RESPONSE_ID, CANTX_DEBUG_IDENTIFIER, &data[0]); - return successfullyQueued; + return message; } -static STD_RETURN_TYPE_e CANTX_TransmitMcuLotNumber(void) { - uint8_t data[] = {GEN_REPEAT_U(0u, GEN_STRIP(CAN_MAX_DLC))}; - +static uint64_t CANTX_TransmitMcuLotNumber(void) { /* Read out device register with die ID high */ const uint32_t dieIdHigh = systemREG1->DIEIDH; /* equals the lot number */ @@ -401,18 +396,13 @@ static STD_RETURN_TYPE_e CANTX_TransmitMcuLotNumber(void) { CANTX_MUX_MCU_LOT_NUMBER_SIGNAL_LOT_NUMBER_LENGTH, dieIdHigh, CAN_BIG_ENDIAN); - CAN_TxSetCanDataWithMessageData(message, &data[0], CAN_BIG_ENDIAN); - STD_RETURN_TYPE_e successfullyQueued = - CAN_DataSend(CAN_NODE_DEBUG_MESSAGE, CANTX_DEBUG_RESPONSE_ID, CANTX_DEBUG_IDENTIFIER, &data[0]); - return successfullyQueued; + return message; } -static STD_RETURN_TYPE_e CANTX_TransmitMcuWaferInformation(void) { - uint8_t data[] = {GEN_REPEAT_U(0u, GEN_STRIP(CAN_MAX_DLC))}; - +static uint64_t CANTX_TransmitMcuWaferInformation(void) { /* Read out device register with die ID low */ - /* SPNU563A-March 2018: 2.5.1.28 Die Identification Register Lower Word (DIEIDL) */ + /* docref: SPNU563A-March 2018: 2.5.1.28 Die Identification Register Lower Word (DIEIDL) */ const uint64_t dieIdLow = (uint64_t)systemREG1->DIEIDL; /* see doxygen comment of the macros */ @@ -445,16 +435,12 @@ static STD_RETURN_TYPE_e CANTX_TransmitMcuWaferInformation(void) { CANTX_MUX_MCU_WAFER_INFORMATION_SIGNAL_Y_WAFER_COORDINATE_LENGTH, yWaferCoordinate, CAN_BIG_ENDIAN); - CAN_TxSetCanDataWithMessageData(message, &data[0], CAN_BIG_ENDIAN); - STD_RETURN_TYPE_e successfullyQueued = - CAN_DataSend(CAN_NODE_DEBUG_MESSAGE, CANTX_DEBUG_RESPONSE_ID, CANTX_DEBUG_IDENTIFIER, &data[0]); - return successfullyQueued; + return message; } -static STD_RETURN_TYPE_e CANTX_TransmitBootMagic(uint64_t messageData) { +static uint64_t CANTX_TransmitBootMagic(uint64_t messageData) { FAS_ASSERT((messageData == CANTX_BOOT_MAGIC_DATA_START) || (messageData == CANTX_BOOT_MAGIC_DATA_END)); - uint8_t data[] = {GEN_REPEAT_U(0u, GEN_STRIP(CAN_MAX_DLC))}; uint64_t message = 0u; CAN_TxSetMessageDataWithSignalData( @@ -465,23 +451,19 @@ static STD_RETURN_TYPE_e CANTX_TransmitBootMagic(uint64_t messageData) { CAN_BIG_ENDIAN); CAN_TxSetMessageDataWithSignalData( &message, CANTX_MUX_BOOT_SIGNAL_START_BIT, CANTX_MUX_BOOT_SIGNAL_LENGTH, messageData, CAN_BIG_ENDIAN); - CAN_TxSetCanDataWithMessageData(message, &data[0], CAN_BIG_ENDIAN); - STD_RETURN_TYPE_e successfullyQueued = - CAN_DataSend(CAN_NODE_DEBUG_MESSAGE, CANTX_DEBUG_RESPONSE_ID, CANTX_DEBUG_IDENTIFIER, &data[0]); - return successfullyQueued; + + return message; } -static STD_RETURN_TYPE_e CANTX_TransmitBootMagicStart(void) { +static uint64_t CANTX_TransmitBootMagicStart(void) { return CANTX_TransmitBootMagic(CANTX_BOOT_MAGIC_DATA_START); } -static STD_RETURN_TYPE_e CANTX_TransmitBootMagicEnd(void) { +static uint64_t CANTX_TransmitBootMagicEnd(void) { return CANTX_TransmitBootMagic(CANTX_BOOT_MAGIC_DATA_END); } -static STD_RETURN_TYPE_e CANTX_TransmitRtcTime(void) { - uint8_t data[] = {GEN_REPEAT_U(0u, GEN_STRIP(CAN_MAX_DLC))}; - +static uint64_t CANTX_TransmitRtcTime(void) { RTC_TIME_DATA_s currentRtcTime = RTC_GetSystemTimeRtcFormat(); uint64_t message = 0u; @@ -540,14 +522,10 @@ static STD_RETURN_TYPE_e CANTX_TransmitRtcTime(void) { currentRtcTime.year, CAN_BIG_ENDIAN); - CAN_TxSetCanDataWithMessageData(message, &data[0], CAN_BIG_ENDIAN); - STD_RETURN_TYPE_e successfullyQueued = - CAN_DataSend(CAN_NODE_DEBUG_MESSAGE, CANTX_DEBUG_RESPONSE_ID, CANTX_DEBUG_IDENTIFIER, &data[0]); - return successfullyQueued; + return message; } -static STD_RETURN_TYPE_e CANTX_TransmitCommitHash(void) { - uint8_t data[] = {GEN_REPEAT_U(0u, GEN_STRIP(CAN_MAX_DLC))}; +static uint64_t CANTX_TransmitCommitHash(void) { uint64_t message = 0u; /* set message data with mux value and first seven chars of commit hash*/ @@ -607,9 +585,16 @@ static STD_RETURN_TYPE_e CANTX_TransmitCommitHash(void) { signalData, CAN_BIG_ENDIAN); - CAN_TxSetCanDataWithMessageData(message, &data[0], CAN_BIG_ENDIAN); + return message; +} + +static STD_RETURN_TYPE_e CANTX_DebugResponseSendMessage(uint64_t messageData) { + /* AXIVION Routine Generic-MissingParameterAssert: messageData: parameter accept whole range */ + uint8_t data[] = {GEN_REPEAT_U(0u, GEN_STRIP(CAN_MAX_DLC))}; + + CAN_TxSetCanDataWithMessageData(messageData, &data[0], CAN_BIG_ENDIAN); STD_RETURN_TYPE_e successfullyQueued = - CAN_DataSend(CAN_NODE_DEBUG_MESSAGE, CANTX_DEBUG_RESPONSE_ID, CANTX_DEBUG_IDENTIFIER, &data[0]); + CAN_DataSend(CAN_NODE_DEBUG_MESSAGE, CANTX_DEBUG_RESPONSE_ID, CANTX_DEBUG_RESPONSE_ID_TYPE, &data[0]); return successfullyQueued; } @@ -617,38 +602,70 @@ static STD_RETURN_TYPE_e CANTX_TransmitCommitHash(void) { /*========== Extern Function Implementations ================================*/ extern STD_RETURN_TYPE_e CANTX_DebugResponse(CANTX_DEBUG_RESPONSE_ACTIONS_e action) { STD_RETURN_TYPE_e successfullyQueued = STD_NOT_OK; + uint64_t messageData = 0u; switch (action) { case CANTX_DEBUG_RESPONSE_TRANSMIT_BMS_VERSION_INFO: - successfullyQueued = CANTX_TransmitBmsVersionInfo(); + messageData = CANTX_TransmitBmsVersionInfo(); break; case CANTX_DEBUG_RESPONSE_TRANSMIT_MCU_UNIQUE_DIE_ID: - successfullyQueued = CANTX_TransmitMcuUniqueDieId(); + messageData = CANTX_TransmitMcuUniqueDieId(); break; case CANTX_DEBUG_RESPONSE_TRANSMIT_MCU_LOT_NUMBER: - successfullyQueued = CANTX_TransmitMcuLotNumber(); + messageData = CANTX_TransmitMcuLotNumber(); break; case CANTX_DEBUG_RESPONSE_TRANSMIT_MCU_WAFER_INFORMATION: - successfullyQueued = CANTX_TransmitMcuWaferInformation(); + messageData = CANTX_TransmitMcuWaferInformation(); break; case CANTX_DEBUG_RESPONSE_TRANSMIT_BOOT_MAGIC_START: - successfullyQueued = CANTX_TransmitBootMagicStart(); + messageData = CANTX_TransmitBootMagicStart(); break; case CANTX_DEBUG_RESPONSE_TRANSMIT_BOOT_MAGIC_END: - successfullyQueued = CANTX_TransmitBootMagicEnd(); + messageData = CANTX_TransmitBootMagicEnd(); break; case CANTX_DEBUG_RESPONSE_TRANSMIT_RTC_TIME: - successfullyQueued = CANTX_TransmitRtcTime(); + messageData = CANTX_TransmitRtcTime(); break; case CANTX_DEBUG_RESPONSE_TRANSMIT_COMMIT_HASH: - successfullyQueued = CANTX_TransmitCommitHash(); + messageData = CANTX_TransmitCommitHash(); break; default: FAS_ASSERT(FAS_TRAP); break; /* LCOV_EXCL_LINE */ } + successfullyQueued = CANTX_DebugResponseSendMessage(messageData); return successfullyQueued; } -/*========== Getter for static Variables (Unit Test) ========================*/ - /*========== Externalized Static Function Implementations (Unit Test) =======*/ +#ifdef UNITY_UNIT_TEST +extern uint64_t TEST_CANTX_TransmitBmsVersionInfo(void) { + return CANTX_TransmitBmsVersionInfo(); +} +extern uint64_t TEST_CANTX_TransmitMcuUniqueDieId(void) { + return CANTX_TransmitMcuUniqueDieId(); +} +extern uint64_t TEST_CANTX_TransmitMcuLotNumber(void) { + return CANTX_TransmitMcuLotNumber(); +} +extern uint64_t TEST_CANTX_TransmitMcuWaferInformation(void) { + return CANTX_TransmitMcuWaferInformation(); +} +extern uint64_t TEST_CANTX_TransmitBootMagic(uint64_t messageData) { + return CANTX_TransmitBootMagic(messageData); +} +extern uint64_t TEST_CANTX_TransmitBootMagicStart(void) { + return CANTX_TransmitBootMagicStart(); +} +extern uint64_t TEST_CANTX_TransmitBootMagicEnd(void) { + return CANTX_TransmitBootMagicEnd(); +} +extern uint64_t TEST_CANTX_TransmitRtcTime(void) { + return CANTX_TransmitRtcTime(); +} +extern uint64_t TEST_CANTX_TransmitCommitHash(void) { + return CANTX_TransmitCommitHash(); +} +extern STD_RETURN_TYPE_e TEST_CANTX_DebugResponseSendMessage(uint64_t messageData) { + return CANTX_DebugResponseSendMessage(messageData); +} +#endif diff --git a/src/app/driver/can/cbs/tx/can_cbs_tx_debug-response.h b/src/app/driver/can/cbs/tx-async/can_cbs_tx_debug-response.h similarity index 80% rename from src/app/driver/can/cbs/tx/can_cbs_tx_debug-response.h rename to src/app/driver/can/cbs/tx-async/can_cbs_tx_debug-response.h index 8cf8c36e..744bcfb9 100644 --- a/src/app/driver/can/cbs/tx/can_cbs_tx_debug-response.h +++ b/src/app/driver/can/cbs/tx-async/can_cbs_tx_debug-response.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,9 +43,9 @@ * @file can_cbs_tx_debug-response.h * @author foxBMS Team * @date 2022-07-01 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup SOME_GROUP + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS * @prefix CANTX * * @brief Declarations for handling the transmit of debug response messages @@ -61,8 +61,6 @@ #include "fstd_types.h" -#include - /*========== Macros and Definitions =========================================*/ /** defines which action is performed when #CANTX_DebugResponse is called */ typedef enum { @@ -84,11 +82,21 @@ typedef enum { * @brief Handles Debug response message * @param action type of information that should be sent * @return #STD_OK if transmission successful, otherwise #STD_NOT_OK -*/ + */ extern STD_RETURN_TYPE_e CANTX_DebugResponse(CANTX_DEBUG_RESPONSE_ACTIONS_e action); /*========== Externalized Static Functions Prototypes (Unit Test) ===========*/ #ifdef UNITY_UNIT_TEST +extern uint64_t TEST_CANTX_TransmitBmsVersionInfo(void); +extern uint64_t TEST_CANTX_TransmitMcuUniqueDieId(void); +extern uint64_t TEST_CANTX_TransmitMcuLotNumber(void); +extern uint64_t TEST_CANTX_TransmitMcuWaferInformation(void); +extern uint64_t TEST_CANTX_TransmitBootMagic(uint64_t messageData); +extern uint64_t TEST_CANTX_TransmitBootMagicStart(void); +extern uint64_t TEST_CANTX_TransmitBootMagicEnd(void); +extern uint64_t TEST_CANTX_TransmitRtcTime(void); +extern uint64_t TEST_CANTX_TransmitCommitHash(void); +extern STD_RETURN_TYPE_e TEST_CANTX_DebugResponseSendMessage(uint64_t messageData); #endif #endif /* FOXBMS__CAN_CBS_TX_DEBUG_RESPONSE_H_ */ diff --git a/src/app/driver/can/cbs/tx/can_cbs_tx_debug-unsupported-multiplexer-values.c b/src/app/driver/can/cbs/tx-async/can_cbs_tx_debug-unsupported-multiplexer-values.c similarity index 86% rename from src/app/driver/can/cbs/tx/can_cbs_tx_debug-unsupported-multiplexer-values.c rename to src/app/driver/can/cbs/tx-async/can_cbs_tx_debug-unsupported-multiplexer-values.c index 4eea1d3e..02a24be7 100644 --- a/src/app/driver/can/cbs/tx/can_cbs_tx_debug-unsupported-multiplexer-values.c +++ b/src/app/driver/can/cbs/tx-async/can_cbs_tx_debug-unsupported-multiplexer-values.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,9 +43,9 @@ * @file can_cbs_tx_debug-unsupported-multiplexer-values.c * @author foxBMS Team * @date 2022-11-16 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup DRIVER + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS * @prefix CANTX * * @brief CAN @@ -58,7 +58,7 @@ #include "can_cbs_tx_debug-unsupported-multiplexer-values.h" #include "can.h" -#include "can_cfg_tx-message-definitions.h" +#include "can_cfg_tx-async-message-definitions.h" #include "can_helper.h" #include @@ -79,9 +79,9 @@ /*========== Extern Function Implementations ================================*/ -extern void CANTX_UnsupportedMultiplexerValue(uint32_t messageId, uint32_t multiplexerValue) { - /* AXIVION Routine Generic-MissingParameterAssert: messageId: parameter accept whole range */ - /* AXIVION Routine Generic-MissingParameterAssert: multiplexerValue: parameter accept whole range */ +extern void CANTX_DebugUnsupportedMultiplexerVal(uint32_t messageId, uint32_t multiplexerValue) { + /* AXIVION Routine Generic-MissingParameterAssert: messageId: parameter accepts whole range */ + /* AXIVION Routine Generic-MissingParameterAssert: multiplexerValue: parameter accepts whole range */ uint8_t data[] = {GEN_REPEAT_U(0u, GEN_STRIP(CAN_MAX_DLC))}; uint64_t message = 0u; CAN_TxSetMessageDataWithSignalData( @@ -99,8 +99,8 @@ extern void CANTX_UnsupportedMultiplexerValue(uint32_t messageId, uint32_t multi CAN_TxSetCanDataWithMessageData(message, &data[0], CAN_BIG_ENDIAN); (void)CAN_DataSend( CAN_NODE_DEBUG_MESSAGE, - CANTX_UNSUPPORTED_MULTIPLEXER_VAL_ID, - CANTX_UNSUPPORTED_MULTIPLEXER_IDENTIFIER, + CANTX_DEBUG_UNSUPPORTED_MULTIPLEXER_VAL_ID, + CANTX_DEBUG_UNSUPPORTED_MULTIPLEXER_VAL_ID_TYPE, &data[0]); } diff --git a/src/app/driver/can/cbs/tx/can_cbs_tx_debug-unsupported-multiplexer-values.h b/src/app/driver/can/cbs/tx-async/can_cbs_tx_debug-unsupported-multiplexer-values.h similarity index 88% rename from src/app/driver/can/cbs/tx/can_cbs_tx_debug-unsupported-multiplexer-values.h rename to src/app/driver/can/cbs/tx-async/can_cbs_tx_debug-unsupported-multiplexer-values.h index da6c3a45..348acab8 100644 --- a/src/app/driver/can/cbs/tx/can_cbs_tx_debug-unsupported-multiplexer-values.h +++ b/src/app/driver/can/cbs/tx-async/can_cbs_tx_debug-unsupported-multiplexer-values.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,9 +43,9 @@ * @file can_cbs_tx_debug-unsupported-multiplexer-values.h * @author foxBMS Team * @date 2022-11-16 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup DRIVER + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS * @prefix CANTX * * @brief CAN header @@ -77,7 +77,7 @@ * @param multiplexerValue multiplexer value, that does not support the * message-multiplexer combination */ -void CANTX_UnsupportedMultiplexerValue(uint32_t messageId, uint32_t multiplexerValue); +extern void CANTX_DebugUnsupportedMultiplexerVal(uint32_t messageId, uint32_t multiplexerValue); /*========== Externalized Static Functions Prototypes (Unit Test) ===========*/ #ifdef UNITY_UNIT_TEST diff --git a/src/app/driver/can/cbs/tx-async/can_cbs_tx_imd-request.c b/src/app/driver/can/cbs/tx-async/can_cbs_tx_imd-request.c new file mode 100644 index 00000000..d2caba0a --- /dev/null +++ b/src/app/driver/can/cbs/tx-async/can_cbs_tx_imd-request.c @@ -0,0 +1,476 @@ +/** + * + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * We kindly request you to use one or more of the following phrases to refer to + * foxBMS in your hardware, software, documentation or advertising materials: + * + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" + * + */ + +/** + * @file can_cbs_tx_imd-request.c + * @author foxBMS Team + * @date 2023-06-14 (date of creation) + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS + * @prefix CANTX + * + * @brief CAN driver Tx callback implementation + * @details CAN Tx callback for pack value and string value messages + */ + +/*========== Includes =======================================================*/ +#include "can_cbs_tx_imd-request.h" + +#include "bender_iso165c_cfg.h" + +#include "can.h" +#include "can_cfg_tx-async-message-definitions.h" +#include "can_helper.h" + +#include +#include + +/*========== Macros and Definitions =========================================*/ +#define CANTX_IMD_REQUEST_MUX_START_BIT (0u) +#define CANTX_IMD_REQUEST_MUX_LENGTH (8u) +#define CANTX_IMD_REQUEST_DATA_WORD_1_START_BIT (8u) +#define CANTX_IMD_REQUEST_DATA_WORD_1_LENGTH (16u) +#define CANTX_IMD_REQUEST_DATA_WORD_2_START_BIT (24u) +#define CANTX_IMD_REQUEST_DATA_WORD_2_LENGTH (16u) + +/*========== Static Constant and Variable Definitions =======================*/ + +/*========== Extern Constant and Variable Definitions =======================*/ + +/*========== Static Function Prototypes =====================================*/ +/** + * @brief Request that relay opens + * @param relay which relay opens + * @return #STD_OK if transmission successful, otherwise #STD_NOT_OK + */ +static STD_RETURN_TYPE_e CANTX_RequestRelayOpen(uint8_t relay); + +/** + * @brief Request that relay close + * @param relay which relay closes + * @return #STD_OK if transmission successful, otherwise #STD_NOT_OK + */ +static STD_RETURN_TYPE_e CANTX_RequestRelayClose(uint8_t relay); + +/** + * @brief Request the current state of the relay + * @param relay which relay's state is requested + * @return #STD_OK if transmission successful, otherwise #STD_NOT_OK + */ +static STD_RETURN_TYPE_e CANTX_RequestRelayState(uint8_t relay); + +/** + * @brief Request to enable measurement + * @return #STD_OK if transmission successful, otherwise #STD_NOT_OK + */ +static STD_RETURN_TYPE_e CANTX_RequestEnableMeasurement(void); + +/** + * @brief Request to disable measurement + * @return #STD_OK if transmission successful, otherwise #STD_NOT_OK + */ +static STD_RETURN_TYPE_e CANTX_RequestDisableMeasurement(void); + +/** + * @brief Sets averaging factor + * @return #STD_OK if transmission successful, otherwise #STD_NOT_OK + */ +static STD_RETURN_TYPE_e CANTX_SetAveragingFactor(void); + +/** + * @brief Requests reading the resistance + * @return #STD_OK if transmission successful, otherwise #STD_NOT_OK + */ +static STD_RETURN_TYPE_e CANTX_RequestReadResistance(void); + +/** + * @brief Request unlock + * @return #STD_OK if transmission successful, otherwise #STD_NOT_OK + */ +static STD_RETURN_TYPE_e CANTX_RequestUnlock(void); + +/** + * @brief Request self test + * @return #STD_OK if transmission successful, otherwise #STD_NOT_OK + */ +static STD_RETURN_TYPE_e CANTX_RequestSelfTest(void); + +/** + * @brief Set Error Threshold + * @return #STD_OK if transmission successful, otherwise #STD_NOT_OK + */ +static STD_RETURN_TYPE_e CANTX_SetErrorThreshold(void); + +/** + * @brief Set warning threshold + * @return #STD_OK if transmission successful, otherwise #STD_NOT_OK + */ +static STD_RETURN_TYPE_e CANTX_SetWarningThreshold(void); + +/*========== Static Function Implementations ================================*/ +static STD_RETURN_TYPE_e CANTX_RequestRelayOpen(uint8_t relay) { + FAS_ASSERT((relay == I165C_D_VIFC_HV_RELAIS_POSITIVE) || (relay == I165C_D_VIFC_HV_RELAIS_NEGATIVE)); + uint8_t data[] = {GEN_REPEAT_U(0u, GEN_STRIP(CAN_MAX_DLC))}; + + uint64_t message = 0u; + CAN_TxSetMessageDataWithSignalData( + &message, + CANTX_IMD_REQUEST_MUX_START_BIT, + CANTX_IMD_REQUEST_MUX_LENGTH, + I165C_CMD_S_VIFC_SET_HV_RELAIS, + CAN_LITTLE_ENDIAN); + CAN_TxSetMessageDataWithSignalData( + &message, + CANTX_IMD_REQUEST_DATA_WORD_1_START_BIT, + CANTX_IMD_REQUEST_DATA_WORD_1_LENGTH, + relay, + CAN_LITTLE_ENDIAN); + CAN_TxSetMessageDataWithSignalData( + &message, + CANTX_IMD_REQUEST_DATA_WORD_2_START_BIT, + CANTX_IMD_REQUEST_DATA_WORD_2_LENGTH, + I165C_RELAY_STATE_OPEN, + CAN_LITTLE_ENDIAN); + + CAN_TxSetCanDataWithMessageData(message, &data[0], CAN_LITTLE_ENDIAN); + return CAN_DataSend(I165C_CAN_NODE, I165C_MESSAGE_TYPE_IMD_REQUEST, I165C_TX_MESSAGE_IDENTIFIER_TYPE, &data[0]); +} + +static STD_RETURN_TYPE_e CANTX_RequestRelayClose(uint8_t relay) { + FAS_ASSERT((relay == I165C_D_VIFC_HV_RELAIS_POSITIVE) || (relay == I165C_D_VIFC_HV_RELAIS_NEGATIVE)); + uint8_t data[] = {GEN_REPEAT_U(0u, GEN_STRIP(CAN_MAX_DLC))}; + + uint64_t message = 0u; + CAN_TxSetMessageDataWithSignalData( + &message, + CANTX_IMD_REQUEST_MUX_START_BIT, + CANTX_IMD_REQUEST_MUX_LENGTH, + I165C_CMD_S_VIFC_SET_HV_RELAIS, + CAN_LITTLE_ENDIAN); + CAN_TxSetMessageDataWithSignalData( + &message, + CANTX_IMD_REQUEST_DATA_WORD_1_START_BIT, + CANTX_IMD_REQUEST_DATA_WORD_1_LENGTH, + relay, + CAN_LITTLE_ENDIAN); + CAN_TxSetMessageDataWithSignalData( + &message, + CANTX_IMD_REQUEST_DATA_WORD_2_START_BIT, + CANTX_IMD_REQUEST_DATA_WORD_2_LENGTH, + I165C_RELAY_STATE_CLOSED, + CAN_LITTLE_ENDIAN); + + CAN_TxSetCanDataWithMessageData(message, &data[0], CAN_LITTLE_ENDIAN); + return CAN_DataSend(I165C_CAN_NODE, I165C_MESSAGE_TYPE_IMD_REQUEST, I165C_TX_MESSAGE_IDENTIFIER_TYPE, &data[0]); +} + +static STD_RETURN_TYPE_e CANTX_RequestRelayState(uint8_t relay) { + FAS_ASSERT((relay == I165C_D_VIFC_HV_RELAIS_POSITIVE) || (relay == I165C_D_VIFC_HV_RELAIS_NEGATIVE)); + uint8_t data[] = {GEN_REPEAT_U(0u, GEN_STRIP(CAN_MAX_DLC))}; + + uint64_t message = 0u; + CAN_TxSetMessageDataWithSignalData( + &message, + CANTX_IMD_REQUEST_MUX_START_BIT, + CANTX_IMD_REQUEST_MUX_LENGTH, + I165C_CMD_S_VIFC_GET_HV_RELAIS, + CAN_LITTLE_ENDIAN); + CAN_TxSetMessageDataWithSignalData( + &message, + CANTX_IMD_REQUEST_DATA_WORD_1_START_BIT, + CANTX_IMD_REQUEST_DATA_WORD_1_LENGTH, + relay, + CAN_LITTLE_ENDIAN); + + CAN_TxSetCanDataWithMessageData(message, &data[0], CAN_LITTLE_ENDIAN); + return CAN_DataSend(I165C_CAN_NODE, I165C_MESSAGE_TYPE_IMD_REQUEST, I165C_TX_MESSAGE_IDENTIFIER_TYPE, &data[0]); +} + +static STD_RETURN_TYPE_e CANTX_RequestEnableMeasurement(void) { + uint8_t data[] = {GEN_REPEAT_U(0u, GEN_STRIP(CAN_MAX_DLC))}; + + uint64_t message = 0u; + CAN_TxSetMessageDataWithSignalData( + &message, + CANTX_IMD_REQUEST_MUX_START_BIT, + CANTX_IMD_REQUEST_MUX_LENGTH, + I165C_CMD_S_VIFC_CTL_MEASUREMENT, + CAN_LITTLE_ENDIAN); + CAN_TxSetMessageDataWithSignalData( + &message, + CANTX_IMD_REQUEST_DATA_WORD_1_START_BIT, + CANTX_IMD_REQUEST_DATA_WORD_1_LENGTH, + I165C_ENABLE_MEASUREMENT, + CAN_LITTLE_ENDIAN); + + CAN_TxSetCanDataWithMessageData(message, &data[0], CAN_LITTLE_ENDIAN); + return CAN_DataSend(I165C_CAN_NODE, I165C_MESSAGE_TYPE_IMD_REQUEST, I165C_TX_MESSAGE_IDENTIFIER_TYPE, &data[0]); +} + +static STD_RETURN_TYPE_e CANTX_RequestDisableMeasurement(void) { + uint8_t data[] = {GEN_REPEAT_U(0u, GEN_STRIP(CAN_MAX_DLC))}; + + uint64_t message = 0u; + CAN_TxSetMessageDataWithSignalData( + &message, + CANTX_IMD_REQUEST_MUX_START_BIT, + CANTX_IMD_REQUEST_MUX_LENGTH, + I165C_CMD_S_VIFC_CTL_MEASUREMENT, + CAN_LITTLE_ENDIAN); + CAN_TxSetMessageDataWithSignalData( + &message, + CANTX_IMD_REQUEST_DATA_WORD_1_START_BIT, + CANTX_IMD_REQUEST_DATA_WORD_1_LENGTH, + I165C_DISABLE_MEASUREMENT, + CAN_LITTLE_ENDIAN); + + CAN_TxSetCanDataWithMessageData(message, &data[0], CAN_LITTLE_ENDIAN); + return CAN_DataSend(I165C_CAN_NODE, I165C_MESSAGE_TYPE_IMD_REQUEST, I165C_TX_MESSAGE_IDENTIFIER_TYPE, &data[0]); +} + +static STD_RETURN_TYPE_e CANTX_SetAveragingFactor(void) { + uint8_t data[] = {GEN_REPEAT_U(0u, GEN_STRIP(CAN_MAX_DLC))}; + + uint64_t message = 0u; + CAN_TxSetMessageDataWithSignalData( + &message, + CANTX_IMD_REQUEST_MUX_START_BIT, + CANTX_IMD_REQUEST_MUX_LENGTH, + I165C_CMD_S_IMC_SET_MEAN_FACTOR, + CAN_LITTLE_ENDIAN); + CAN_TxSetMessageDataWithSignalData( + &message, + CANTX_IMD_REQUEST_DATA_WORD_1_START_BIT, + CANTX_IMD_REQUEST_DATA_WORD_1_LENGTH, + I165C_MEASUREMENT_AVERAGING_FACTOR, + CAN_LITTLE_ENDIAN); + + CAN_TxSetCanDataWithMessageData(message, &data[0], CAN_LITTLE_ENDIAN); + return CAN_DataSend(I165C_CAN_NODE, I165C_MESSAGE_TYPE_IMD_REQUEST, I165C_TX_MESSAGE_IDENTIFIER_TYPE, &data[0]); +} + +static STD_RETURN_TYPE_e CANTX_RequestReadResistance(void) { + uint8_t data[] = {GEN_REPEAT_U(0u, GEN_STRIP(CAN_MAX_DLC))}; + + uint64_t message = 0u; + CAN_TxSetMessageDataWithSignalData( + &message, + CANTX_IMD_REQUEST_MUX_START_BIT, + CANTX_IMD_REQUEST_MUX_LENGTH, + I165C_CMD_S_IMC_GET_R_ISO, + CAN_LITTLE_ENDIAN); + + CAN_TxSetCanDataWithMessageData(message, &data[0], CAN_LITTLE_ENDIAN); + return CAN_DataSend(I165C_CAN_NODE, I165C_MESSAGE_TYPE_IMD_REQUEST, I165C_TX_MESSAGE_IDENTIFIER_TYPE, &data[0]); +} + +static STD_RETURN_TYPE_e CANTX_RequestUnlock(void) { + uint8_t data[] = {GEN_REPEAT_U(0u, GEN_STRIP(CAN_MAX_DLC))}; + + uint64_t message = 0u; + CAN_TxSetMessageDataWithSignalData( + &message, + CANTX_IMD_REQUEST_MUX_START_BIT, + CANTX_IMD_REQUEST_MUX_LENGTH, + I165C_CMD_S_VIFC_CTL_LOCK, + CAN_LITTLE_ENDIAN); + CAN_TxSetMessageDataWithSignalData( + &message, + CANTX_IMD_REQUEST_DATA_WORD_1_START_BIT, + CANTX_IMD_REQUEST_DATA_WORD_1_LENGTH, + I165C_LOCK_MODE_UNLOCKED, + CAN_LITTLE_ENDIAN); + CAN_TxSetMessageDataWithSignalData( + &message, + CANTX_IMD_REQUEST_DATA_WORD_2_START_BIT, + CANTX_IMD_REQUEST_DATA_WORD_2_LENGTH, + I165C_UNLOCK_PASSWORD, + CAN_LITTLE_ENDIAN); + + CAN_TxSetCanDataWithMessageData(message, &data[0], CAN_LITTLE_ENDIAN); + return CAN_DataSend(I165C_CAN_NODE, I165C_MESSAGE_TYPE_IMD_REQUEST, I165C_TX_MESSAGE_IDENTIFIER_TYPE, &data[0]); +} + +static STD_RETURN_TYPE_e CANTX_RequestSelfTest(void) { + uint8_t data[] = {GEN_REPEAT_U(0u, GEN_STRIP(CAN_MAX_DLC))}; + + uint64_t message = 0u; + CAN_TxSetMessageDataWithSignalData( + &message, + CANTX_IMD_REQUEST_MUX_START_BIT, + CANTX_IMD_REQUEST_MUX_LENGTH, + I165C_CMD_S_IMC_CTL_SELFTEST, + CAN_LITTLE_ENDIAN); + +#ifdef I165C_SELF_TEST_LONG + CAN_TxSetMessageDataWithSignalData( + &message, + CANTX_IMD_REQUEST_DATA_WORD_1_START_BIT, + CANTX_IMD_REQUEST_DATA_WORD_1_LENGTH, + I165C_SELFTEST_SCENARIO_OVERALL, + CAN_LITTLE_ENDIAN); +#else /* I165C_SELF_TEST_SHORT */ + CAN_TxSetMessageDataWithSignalData( + &message, + CANTX_IMD_REQUEST_DATA_WORD_1_START_BIT, + CANTX_IMD_REQUEST_DATA_WORD_1_LENGTH, + I165C_SELFTEST_SCENARIO_PARAMETERCONFIG, + CAN_LITTLE_ENDIAN); +#endif + + CAN_TxSetCanDataWithMessageData(message, &data[0], CAN_LITTLE_ENDIAN); + return CAN_DataSend(I165C_CAN_NODE, I165C_MESSAGE_TYPE_IMD_REQUEST, I165C_TX_MESSAGE_IDENTIFIER_TYPE, &data[0]); +} + +static STD_RETURN_TYPE_e CANTX_SetErrorThreshold(void) { + uint8_t data[] = {GEN_REPEAT_U(0u, GEN_STRIP(CAN_MAX_DLC))}; + + uint64_t message = 0u; + CAN_TxSetMessageDataWithSignalData( + &message, + CANTX_IMD_REQUEST_MUX_START_BIT, + CANTX_IMD_REQUEST_MUX_LENGTH, + I165C_CMD_S_IMC_SET_R_ISO_ERR_THR, + CAN_LITTLE_ENDIAN); + CAN_TxSetMessageDataWithSignalData( + &message, + CANTX_IMD_REQUEST_DATA_WORD_1_START_BIT, + CANTX_IMD_REQUEST_DATA_WORD_1_LENGTH, + I165C_ERROR_THRESHOLD_kOhm, + CAN_LITTLE_ENDIAN); + + CAN_TxSetCanDataWithMessageData(message, &data[0], CAN_LITTLE_ENDIAN); + return CAN_DataSend(I165C_CAN_NODE, I165C_MESSAGE_TYPE_IMD_REQUEST, I165C_TX_MESSAGE_IDENTIFIER_TYPE, &data[0]); +} + +static STD_RETURN_TYPE_e CANTX_SetWarningThreshold(void) { + uint8_t data[] = {GEN_REPEAT_U(0u, GEN_STRIP(CAN_MAX_DLC))}; + + uint64_t message = 0u; + CAN_TxSetMessageDataWithSignalData( + &message, + CANTX_IMD_REQUEST_MUX_START_BIT, + CANTX_IMD_REQUEST_MUX_LENGTH, + I165C_CMD_S_IMC_SET_R_ISO_WRN_THR, + CAN_LITTLE_ENDIAN); + CAN_TxSetMessageDataWithSignalData( + &message, + CANTX_IMD_REQUEST_DATA_WORD_1_START_BIT, + CANTX_IMD_REQUEST_DATA_WORD_1_LENGTH, + I165C_WARNING_THRESHOLD_kOhm, + CAN_LITTLE_ENDIAN); + + CAN_TxSetCanDataWithMessageData(message, &data[0], CAN_LITTLE_ENDIAN); + return CAN_DataSend(I165C_CAN_NODE, I165C_MESSAGE_TYPE_IMD_REQUEST, I165C_TX_MESSAGE_IDENTIFIER_TYPE, &data[0]); +} + +/*========== Extern Function Implementations ================================*/ +extern STD_RETURN_TYPE_e CANTX_ImdRequest(CANTX_IMD_REQUEST_ACTIONS_e action) { + FAS_ASSERT(action < CANTX_IMD_REQUEST_LAST_ACTION); + STD_RETURN_TYPE_e successfullyQueued = STD_NOT_OK; + switch (action) { + case CANTX_IMD_REQUEST_OPEN_POSITIVE_RELAY: + successfullyQueued = CANTX_RequestRelayOpen(I165C_D_VIFC_HV_RELAIS_POSITIVE); + break; + case CANTX_IMD_REQUEST_OPEN_NEGATIVE_RELAY: + successfullyQueued = CANTX_RequestRelayOpen(I165C_D_VIFC_HV_RELAIS_NEGATIVE); + break; + case CANTX_IMD_REQUEST_CLOSE_POSITIVE_RELAY: + successfullyQueued = CANTX_RequestRelayClose(I165C_D_VIFC_HV_RELAIS_POSITIVE); + break; + case CANTX_IMD_REQUEST_CLOSE_NEGATIVE_RELAY: + successfullyQueued = CANTX_RequestRelayClose(I165C_D_VIFC_HV_RELAIS_NEGATIVE); + break; + case CANTX_IMD_REQUEST_POSITIVE_RELAY_STATE: + successfullyQueued = CANTX_RequestRelayState(I165C_D_VIFC_HV_RELAIS_POSITIVE); + break; + case CANTX_IMD_REQUEST_NEGATIVE_RELAY_STATE: + successfullyQueued = CANTX_RequestRelayState(I165C_D_VIFC_HV_RELAIS_NEGATIVE); + break; + case CANTX_IMD_REQUEST_ENABLE_MEASUREMENT: + successfullyQueued = CANTX_RequestEnableMeasurement(); + break; + case CANTX_IMD_REQUEST_DISABLE_MEASUREMENT: + successfullyQueued = CANTX_RequestDisableMeasurement(); + break; + case CANTX_IMD_REQUEST_SET_AVERAGING_FACTOR: + successfullyQueued = CANTX_SetAveragingFactor(); + break; + case CANTX_IMD_REQUEST_READ_RESISTANCE: + successfullyQueued = CANTX_RequestReadResistance(); + break; + case CANTX_IMD_REQUEST_INITIALIZATION_UNLOCK: + successfullyQueued = CANTX_RequestUnlock(); + break; + case CANTX_IMD_REQUEST_INITIALIZATION_SELF_TEST: + successfullyQueued = CANTX_RequestSelfTest(); + break; + case CANTX_IMD_REQUEST_INITIALIZATION_SET_ERROR_THRESHOLD: + successfullyQueued = CANTX_SetErrorThreshold(); + break; + case CANTX_IMD_REQUEST_INITIALIZATION_SET_WARNING_THRESHOLD: + successfullyQueued = CANTX_SetWarningThreshold(); + break; + default: + FAS_ASSERT(FAS_TRAP); + break; /* LCOV_EXCL_LINE */ + } + return successfullyQueued; +} + +/*========== Externalized Static Function Implementations (Unit Test) =======*/ +#ifdef UNITY_UNIT_TEST + +/* export RTC helper functions */ +extern STD_RETURN_TYPE_e TEST_CANTX_RequestRelayOpen(uint8_t relay) { + return CANTX_RequestRelayOpen(relay); +} + +extern STD_RETURN_TYPE_e TEST_CANTX_RequestRelayClose(uint8_t relay) { + return CANTX_RequestRelayClose(relay); +} + +extern STD_RETURN_TYPE_e TEST_CANTX_RequestRelayState(uint8_t relay) { + return CANTX_RequestRelayState(relay); +} + +#endif diff --git a/src/app/driver/can/cbs/tx-async/can_cbs_tx_imd-request.h b/src/app/driver/can/cbs/tx-async/can_cbs_tx_imd-request.h new file mode 100644 index 00000000..a0ddfa1e --- /dev/null +++ b/src/app/driver/can/cbs/tx-async/can_cbs_tx_imd-request.h @@ -0,0 +1,104 @@ +/** + * + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * We kindly request you to use one or more of the following phrases to refer to + * foxBMS in your hardware, software, documentation or advertising materials: + * + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" + * + */ + +/** + * @file can_cbs_tx_imd-request.h + * @author foxBMS Team + * @date 2022-11-16 (date of creation) + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS + * @prefix CANTX + * + * @brief Declarations for handling the transmit of imd request messages + * @details This header declares the interface for transmitting imd request + * messages and everything else that is externally required to be able + * to use that interface. + */ + +#ifndef FOXBMS__CAN_CBS_TX_IMD_REQUEST_H_ +#define FOXBMS__CAN_CBS_TX_IMD_REQUEST_H_ + +/*========== Includes =======================================================*/ + +#include "fstd_types.h" + +#include + +/*========== Macros and Definitions =========================================*/ +/** defines which action is performed when #CANTX_ImdRequest is called */ +typedef enum { + CANTX_IMD_REQUEST_OPEN_POSITIVE_RELAY, + CANTX_IMD_REQUEST_OPEN_NEGATIVE_RELAY, + CANTX_IMD_REQUEST_CLOSE_POSITIVE_RELAY, + CANTX_IMD_REQUEST_CLOSE_NEGATIVE_RELAY, + CANTX_IMD_REQUEST_POSITIVE_RELAY_STATE, + CANTX_IMD_REQUEST_NEGATIVE_RELAY_STATE, + CANTX_IMD_REQUEST_ENABLE_MEASUREMENT, + CANTX_IMD_REQUEST_DISABLE_MEASUREMENT, + CANTX_IMD_REQUEST_SET_AVERAGING_FACTOR, + CANTX_IMD_REQUEST_READ_RESISTANCE, + CANTX_IMD_REQUEST_INITIALIZATION_UNLOCK, + CANTX_IMD_REQUEST_INITIALIZATION_SELF_TEST, + CANTX_IMD_REQUEST_INITIALIZATION_SET_ERROR_THRESHOLD, + CANTX_IMD_REQUEST_INITIALIZATION_SET_WARNING_THRESHOLD, + CANTX_IMD_REQUEST_LAST_ACTION, /* always the last action, do not remove */ +} CANTX_IMD_REQUEST_ACTIONS_e; + +/*========== Extern Constant and Variable Declarations ======================*/ + +/*========== Extern Function Prototypes =====================================*/ + +/** + * @brief Handles IMD request message + * @param action type of information that should be sent + * @return #STD_OK if transmission successful, otherwise #STD_NOT_OK + */ +extern STD_RETURN_TYPE_e CANTX_ImdRequest(CANTX_IMD_REQUEST_ACTIONS_e action); + +/*========== Externalized Static Functions Prototypes (Unit Test) ===========*/ +#ifdef UNITY_UNIT_TEST +extern STD_RETURN_TYPE_e TEST_CANTX_RequestRelayOpen(uint8_t relay); +extern STD_RETURN_TYPE_e TEST_CANTX_RequestRelayClose(uint8_t relay); +extern STD_RETURN_TYPE_e TEST_CANTX_RequestRelayState(uint8_t relay); +#endif + +#endif /* FOXBMS__CAN_CBS_TX_IMD_REQUEST_H_ */ diff --git a/src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_bms-state-details.c b/src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_bms-state-details.c new file mode 100644 index 00000000..b2f265ca --- /dev/null +++ b/src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_bms-state-details.c @@ -0,0 +1,408 @@ +/** + * + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * We kindly request you to use one or more of the following phrases to refer to + * foxBMS in your hardware, software, documentation or advertising materials: + * + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" + * + */ + +/** + * @file can_cbs_tx_bms-state-details.c + * @author foxBMS Team + * @date 2021-07-21 (date of creation) + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS + * @prefix CANTX + * + * @brief CAN driver Tx callback implementation + * @details CAN Tx callback for state messages + */ + +/*========== Includes =======================================================*/ +#include "bms.h" +/* AXIVION Next Codeline Generic-LocalInclude: 'can_cbs_tx_cyclic.h' declares + * the prototype for the callback 'CANTX_BmsStateDetails' */ +#include "can_cbs_tx_cyclic.h" +#include "can_cfg_tx-cyclic-message-definitions.h" +#include "can_helper.h" +#include "sys_mon.h" + +#include +#include + +/*========== Macros and Definitions =========================================*/ +/** + * Configuration of the signals + */ +#define CANTX_SIGNAL_TIMING_VIOLATION_100MS_ALGO_TASK_START_BIT (4u) +#define CANTX_SIGNAL_TIMING_VIOLATION_100MS_ALGO_TASK_LENGTH (CAN_BIT) +#define CANTX_SIGNAL_TIMING_VIOLATION_100MS_TASK_START_BIT (3u) +#define CANTX_SIGNAL_TIMING_VIOLATION_100MS_TASK_LENGTH (CAN_BIT) +#define CANTX_SIGNAL_TIMING_VIOLATION_10MS_TASK_START_BIT (2u) +#define CANTX_SIGNAL_TIMING_VIOLATION_10MS_TASK_LENGTH (CAN_BIT) +#define CANTX_SIGNAL_TIMING_VIOLATION_1MS_TASK_START_BIT (1u) +#define CANTX_SIGNAL_TIMING_VIOLATION_1MS_TASK_LENGTH (CAN_BIT) +#define CANTX_SIGNAL_TIMING_VIOLATION_ENGINE_TASK_START_BIT (0u) +#define CANTX_SIGNAL_TIMING_VIOLATION_ENGINE_TASK_LENGTH (CAN_BIT) +#define CANTX_SIGNAL_TIMING_VIOLATION_100MS_ALGO_TASK_RECORDED_START_BIT (12u) +#define CANTX_SIGNAL_TIMING_VIOLATION_100MS_ALGO_TASK_RECORDED_LENGTH (CAN_BIT) +#define CANTX_SIGNAL_TIMING_VIOLATION_100MS_TASK_RECORDED_START_BIT (11u) +#define CANTX_SIGNAL_TIMING_VIOLATION_100MS_TASK_RECORDED_LENGTH (CAN_BIT) +#define CANTX_SIGNAL_TIMING_VIOLATION_10MS_TASK_RECORDED_START_BIT (10u) +#define CANTX_SIGNAL_TIMING_VIOLATION_10MS_TASK_RECORDED_LENGTH (CAN_BIT) +#define CANTX_SIGNAL_TIMING_VIOLATION_1MS_TASK_RECORDED_START_BIT (9u) +#define CANTX_SIGNAL_TIMING_VIOLATION_1MS_TASK_RECORDED_LENGTH (CAN_BIT) +#define CANTX_SIGNAL_TIMING_VIOLATION_ENGINE_TASK_RECORDED_START_BIT (8u) +#define CANTX_SIGNAL_TIMING_VIOLATION_ENGINE_TASK_RECORDED_LENGTH (CAN_BIT) + +/*========== Static Constant and Variable Definitions =======================*/ + +/*========== Extern Constant and Variable Definitions =======================*/ + +/*========== Static Function Prototypes =====================================*/ +/** + * @brief sets the message data for current violation engine + * @param pMessageData message data of the CAN message + * @param kpkCanShim const pointer to CAN shim + */ +static void CANTX_SetTimingViolationEngine(uint64_t *pMessageData, const CAN_SHIM_s *const kpkCanShim); + +/** + * @brief sets the message data for current violation 1ms + * @param pMessageData message data of the CAN message + * @param kpkCanShim const pointer to CAN shim + */ +static void CANTX_SetTimingViolation1ms(uint64_t *pMessageData, const CAN_SHIM_s *const kpkCanShim); + +/** + * @brief sets the message data for current violation 10ms + * @param pMessageData message data of the CAN message + * @param kpkCanShim const pointer to CAN shim + */ +static void CANTX_SetTimingViolation10Ms(uint64_t *pMessageData, const CAN_SHIM_s *const kpkCanShim); + +/** + * @brief sets the message data for current violation 100ms + * @param pMessageData message data of the CAN message + * @param kpkCanShim const pointer to CAN shim + */ +static void CANTX_SetTimingViolation100Ms(uint64_t *pMessageData, const CAN_SHIM_s *const kpkCanShim); + +/** + * @brief sets the message data for current violation 100ms algorithm + * @param pMessageData message data of the CAN message + * @param kpkCanShim const pointer to CAN shim + */ +static void CANTX_SetTimingViolation100MsAlgo(uint64_t *pMessageData, const CAN_SHIM_s *const kpkCanShim); + +/** + * @brief sets the message data for recorded violation engine + * @param pMessageData message data of the CAN message + * @param pRecordedTimingViolations set of all task timing violations + */ +static void CANTX_SetTimingViolationEngineRec( + uint64_t *pMessageData, + SYSM_TIMING_VIOLATION_RESPONSE_s *pRecordedTimingViolations); + +/** + * @brief sets the message data for recorded violation 1ms + * @param pMessageData message data of the CAN message + * @param pRecordedTimingViolations set of all task timing violations + */ +static void CANTX_SetTimingViolation1MsRec( + uint64_t *pMessageData, + SYSM_TIMING_VIOLATION_RESPONSE_s *pRecordedTimingViolations); + +/** + * @brief sets the message data for recorded violation 10ms + * @param pMessageData message data of the CAN message + * @param pRecordedTimingViolations set of all task timing violations + */ +static void CANTX_SetTimingViolation10MsRec( + uint64_t *pMessageData, + SYSM_TIMING_VIOLATION_RESPONSE_s *pRecordedTimingViolations); + +/** + * @brief sets the message data for recorded violation 100ms + * @param pMessageData message data of the CAN message + * @param pRecordedTimingViolations set of all task timing violations + */ +static void CANTX_SetTimingViolation100MsRec( + uint64_t *pMessageData, + SYSM_TIMING_VIOLATION_RESPONSE_s *pRecordedTimingViolations); + +/** + * @brief sets the message data for recorded violation 100ms algorithm + * @param pMessageData message data of the CAN message + * @param pRecordedTimingViolations set of all task timing violations + */ +static void CANTX_SetTimingViolation100MsAlgoRec( + uint64_t *pMessageData, + SYSM_TIMING_VIOLATION_RESPONSE_s *pRecordedTimingViolations); + +/*========== Static Function Implementations ================================*/ +static void CANTX_SetTimingViolationEngine(uint64_t *pMessageData, const CAN_SHIM_s *const kpkCanShim) { + FAS_ASSERT(pMessageData != NULL_PTR); + FAS_ASSERT(kpkCanShim != NULL_PTR); + + /* current violation engine */ + uint64_t data = CAN_ConvertBooleanToInteger(kpkCanShim->pTableErrorState->taskEngineTimingViolationError); + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_SIGNAL_TIMING_VIOLATION_ENGINE_TASK_START_BIT, + CANTX_SIGNAL_TIMING_VIOLATION_ENGINE_TASK_LENGTH, + data, + CAN_BIG_ENDIAN); +} + +static void CANTX_SetTimingViolation1ms(uint64_t *pMessageData, const CAN_SHIM_s *const kpkCanShim) { + FAS_ASSERT(pMessageData != NULL_PTR); + FAS_ASSERT(kpkCanShim != NULL_PTR); + + /* current violation 1ms */ + uint64_t data = CAN_ConvertBooleanToInteger(kpkCanShim->pTableErrorState->task1msTimingViolationError); + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_SIGNAL_TIMING_VIOLATION_1MS_TASK_START_BIT, + CANTX_SIGNAL_TIMING_VIOLATION_1MS_TASK_LENGTH, + data, + CAN_BIG_ENDIAN); +} + +static void CANTX_SetTimingViolation10Ms(uint64_t *pMessageData, const CAN_SHIM_s *const kpkCanShim) { + FAS_ASSERT(pMessageData != NULL_PTR); + FAS_ASSERT(kpkCanShim != NULL_PTR); + + /* current violation 10ms */ + uint64_t data = CAN_ConvertBooleanToInteger(kpkCanShim->pTableErrorState->task10msTimingViolationError); + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_SIGNAL_TIMING_VIOLATION_10MS_TASK_START_BIT, + CANTX_SIGNAL_TIMING_VIOLATION_10MS_TASK_LENGTH, + data, + CAN_BIG_ENDIAN); +} + +static void CANTX_SetTimingViolation100Ms(uint64_t *pMessageData, const CAN_SHIM_s *const kpkCanShim) { + FAS_ASSERT(pMessageData != NULL_PTR); + FAS_ASSERT(kpkCanShim != NULL_PTR); + + /* current violation 100ms */ + uint64_t data = CAN_ConvertBooleanToInteger(kpkCanShim->pTableErrorState->task100msTimingViolationError); + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_SIGNAL_TIMING_VIOLATION_100MS_TASK_START_BIT, + CANTX_SIGNAL_TIMING_VIOLATION_100MS_TASK_LENGTH, + data, + CAN_BIG_ENDIAN); +} + +static void CANTX_SetTimingViolation100MsAlgo(uint64_t *pMessageData, const CAN_SHIM_s *const kpkCanShim) { + FAS_ASSERT(pMessageData != NULL_PTR); + FAS_ASSERT(kpkCanShim != NULL_PTR); + + /* current violation 100ms algorithm */ + uint64_t data = CAN_ConvertBooleanToInteger(kpkCanShim->pTableErrorState->task100msAlgoTimingViolationError); + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_SIGNAL_TIMING_VIOLATION_100MS_ALGO_TASK_START_BIT, + CANTX_SIGNAL_TIMING_VIOLATION_100MS_ALGO_TASK_LENGTH, + data, + CAN_BIG_ENDIAN); +} + +static void CANTX_SetTimingViolationEngineRec( + uint64_t *pMessageData, + SYSM_TIMING_VIOLATION_RESPONSE_s *pRecordedTimingViolations) { + FAS_ASSERT(pMessageData != NULL_PTR); + FAS_ASSERT(pRecordedTimingViolations != NULL_PTR); + + /* recorded violation engine */ + uint64_t data = CAN_ConvertBooleanToInteger(pRecordedTimingViolations->recordedViolationEngine); + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_SIGNAL_TIMING_VIOLATION_ENGINE_TASK_RECORDED_START_BIT, + CANTX_SIGNAL_TIMING_VIOLATION_ENGINE_TASK_RECORDED_LENGTH, + data, + CAN_BIG_ENDIAN); +} + +static void CANTX_SetTimingViolation1MsRec( + uint64_t *pMessageData, + SYSM_TIMING_VIOLATION_RESPONSE_s *pRecordedTimingViolations) { + FAS_ASSERT(pMessageData != NULL_PTR); + FAS_ASSERT(pRecordedTimingViolations != NULL_PTR); + + /* recorded violation 1ms */ + uint64_t data = CAN_ConvertBooleanToInteger(pRecordedTimingViolations->recordedViolation1ms); + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_SIGNAL_TIMING_VIOLATION_1MS_TASK_RECORDED_START_BIT, + CANTX_SIGNAL_TIMING_VIOLATION_1MS_TASK_RECORDED_LENGTH, + data, + CAN_BIG_ENDIAN); +} + +static void CANTX_SetTimingViolation10MsRec( + uint64_t *pMessageData, + SYSM_TIMING_VIOLATION_RESPONSE_s *pRecordedTimingViolations) { + FAS_ASSERT(pMessageData != NULL_PTR); + FAS_ASSERT(pRecordedTimingViolations != NULL_PTR); + + /* recorded violation 10ms */ + uint64_t data = CAN_ConvertBooleanToInteger(pRecordedTimingViolations->recordedViolation10ms); + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_SIGNAL_TIMING_VIOLATION_10MS_TASK_RECORDED_START_BIT, + CANTX_SIGNAL_TIMING_VIOLATION_10MS_TASK_RECORDED_LENGTH, + data, + CAN_BIG_ENDIAN); +} + +static void CANTX_SetTimingViolation100MsRec( + uint64_t *pMessageData, + SYSM_TIMING_VIOLATION_RESPONSE_s *pRecordedTimingViolations) { + FAS_ASSERT(pMessageData != NULL_PTR); + FAS_ASSERT(pRecordedTimingViolations != NULL_PTR); + + /* recorded violation 100ms */ + uint64_t data = CAN_ConvertBooleanToInteger(pRecordedTimingViolations->recordedViolation100ms); + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_SIGNAL_TIMING_VIOLATION_100MS_TASK_RECORDED_START_BIT, + CANTX_SIGNAL_TIMING_VIOLATION_100MS_TASK_RECORDED_LENGTH, + data, + CAN_BIG_ENDIAN); +} + +static void CANTX_SetTimingViolation100MsAlgoRec( + uint64_t *pMessageData, + SYSM_TIMING_VIOLATION_RESPONSE_s *pRecordedTimingViolations) { + FAS_ASSERT(pMessageData != NULL_PTR); + FAS_ASSERT(pRecordedTimingViolations != NULL_PTR); + + /* recorded violation 100ms algorithm */ + uint64_t data = CAN_ConvertBooleanToInteger(pRecordedTimingViolations->recordedViolation100msAlgo); + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_SIGNAL_TIMING_VIOLATION_100MS_ALGO_TASK_RECORDED_START_BIT, + CANTX_SIGNAL_TIMING_VIOLATION_100MS_ALGO_TASK_RECORDED_LENGTH, + data, + CAN_BIG_ENDIAN); +} + +/*========== Extern Function Implementations ================================*/ +extern uint32_t CANTX_BmsStateDetails( + CAN_MESSAGE_PROPERTIES_s message, + uint8_t *pCanData, + uint8_t *pMuxId, + const CAN_SHIM_s *const kpkCanShim) { + FAS_ASSERT(message.id == CANTX_BMS_STATE_DETAILS_ID); + FAS_ASSERT(message.idType == CANTX_BMS_STATE_DETAILS_ID_TYPE); + FAS_ASSERT(message.dlc == CAN_FOXBMS_MESSAGES_DEFAULT_DLC); + FAS_ASSERT(pCanData != NULL_PTR); + FAS_ASSERT(pMuxId == NULL_PTR); /* pMuxId is not used here, therefore has to be NULL_PTR */ + FAS_ASSERT(kpkCanShim != NULL_PTR); + uint64_t messageData = 0u; + + DATA_READ_DATA(kpkCanShim->pTableErrorState); + SYSM_TIMING_VIOLATION_RESPONSE_s recordedTimingViolations = {0}; + SYSM_GetRecordedTimingViolations(&recordedTimingViolations); + + /* set message with current violation data */ + CANTX_SetTimingViolationEngine(&messageData, kpkCanShim); + CANTX_SetTimingViolation1ms(&messageData, kpkCanShim); + CANTX_SetTimingViolation10Ms(&messageData, kpkCanShim); + CANTX_SetTimingViolation100Ms(&messageData, kpkCanShim); + CANTX_SetTimingViolation100MsAlgo(&messageData, kpkCanShim); + + /* set message with recorded violation data */ + CANTX_SetTimingViolationEngineRec(&messageData, &recordedTimingViolations); + CANTX_SetTimingViolation1MsRec(&messageData, &recordedTimingViolations); + CANTX_SetTimingViolation10MsRec(&messageData, &recordedTimingViolations); + CANTX_SetTimingViolation100MsRec(&messageData, &recordedTimingViolations); + CANTX_SetTimingViolation100MsAlgoRec(&messageData, &recordedTimingViolations); + + /* now copy data in the buffer that will be use to send data */ + CAN_TxSetCanDataWithMessageData(messageData, pCanData, message.endianness); + + return 0u; +} + +/*========== Externalized Static Function Implementations (Unit Test) =======*/ +#ifdef UNITY_UNIT_TEST +extern void TEST_CANTX_SetTimingViolationEngine(uint64_t *pMessageData, const CAN_SHIM_s *const kpkCanShim) { + CANTX_SetTimingViolationEngine(pMessageData, kpkCanShim); +} +extern void TEST_CANTX_SetTimingViolation1ms(uint64_t *pMessageData, const CAN_SHIM_s *const kpkCanShim) { + CANTX_SetTimingViolation1ms(pMessageData, kpkCanShim); +} +extern void TEST_CANTX_SetTimingViolation10Ms(uint64_t *pMessageData, const CAN_SHIM_s *const kpkCanShim) { + CANTX_SetTimingViolation10Ms(pMessageData, kpkCanShim); +} +extern void TEST_CANTX_SetTimingViolation100Ms(uint64_t *pMessageData, const CAN_SHIM_s *const kpkCanShim) { + CANTX_SetTimingViolation100Ms(pMessageData, kpkCanShim); +} +extern void TEST_CANTX_SetTimingViolation100MsAlgo(uint64_t *pMessageData, const CAN_SHIM_s *const kpkCanShim) { + CANTX_SetTimingViolation100MsAlgo(pMessageData, kpkCanShim); +} +extern void TEST_CANTX_SetTimingViolationEngineRec( + uint64_t *pMessageData, + SYSM_TIMING_VIOLATION_RESPONSE_s *pRecordedTimingViolations) { + CANTX_SetTimingViolationEngineRec(pMessageData, pRecordedTimingViolations); +} +extern void TEST_CANTX_SetTimingViolation1MsRec( + uint64_t *pMessageData, + SYSM_TIMING_VIOLATION_RESPONSE_s *pRecordedTimingViolations) { + CANTX_SetTimingViolation1MsRec(pMessageData, pRecordedTimingViolations); +} +extern void TEST_CANTX_SetTimingViolation10MsRec( + uint64_t *pMessageData, + SYSM_TIMING_VIOLATION_RESPONSE_s *pRecordedTimingViolations) { + CANTX_SetTimingViolation10MsRec(pMessageData, pRecordedTimingViolations); +} +extern void TEST_CANTX_SetTimingViolation100MsRec( + uint64_t *pMessageData, + SYSM_TIMING_VIOLATION_RESPONSE_s *pRecordedTimingViolations) { + CANTX_SetTimingViolation100MsRec(pMessageData, pRecordedTimingViolations); +} +extern void TEST_CANTX_SetTimingViolation100MsAlgoRec( + uint64_t *pMessageData, + SYSM_TIMING_VIOLATION_RESPONSE_s *pRecordedTimingViolations) { + CANTX_SetTimingViolation100MsAlgoRec(pMessageData, pRecordedTimingViolations); +} +#endif diff --git a/src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_bms-state.c b/src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_bms-state.c new file mode 100644 index 00000000..75e08394 --- /dev/null +++ b/src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_bms-state.c @@ -0,0 +1,386 @@ +/** + * + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * We kindly request you to use one or more of the following phrases to refer to + * foxBMS in your hardware, software, documentation or advertising materials: + * + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" + * + */ + +/** + * @file can_cbs_tx_bms-state.c + * @author foxBMS Team + * @date 2021-07-21 (date of creation) + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS + * @prefix CANTX + * + * @brief CAN driver Tx callback implementation + * @details CAN Tx callback for state messages + */ + +/*========== Includes =======================================================*/ +#include "bms.h" +/* AXIVION Next Codeline Generic-LocalInclude: 'can_cbs_tx_cyclic.h' declares + * the prototype for the callback 'CANTX_BmsState' */ +#include "can_cbs_tx_cyclic.h" +#include "can_cfg_tx-cyclic-message-definitions.h" +#include "can_helper.h" +#include "diag.h" +#include "foxmath.h" +#include "sys_mon.h" + +#include +#include + +/*========== Macros and Definitions =========================================*/ +/** + * Configuration of the signals + */ +#define CANTX_SIGNAL_BMS_NUMBER_OF_CONNECTED_STRINGS_START_BIT (7u) +#define CANTX_SIGNAL_BMS_NUMBER_OF_CONNECTED_STRINGS_LENGTH (4u) +#define CANTX_SIGNAL_BMS_BMS_STATE_START_BIT (3u) +#define CANTX_SIGNAL_BMS_BMS_STATE_LENGTH (4u) +#define CANTX_SIGNAL_BMS_COOLING_STATE_START_BIT (15u) +#define CANTX_SIGNAL_BMS_COOLING_STATE_LENGTH (CAN_BIT) +#define CANTX_SIGNAL_BMS_HEATER_STATE_START_BIT (14u) +#define CANTX_SIGNAL_BMS_HEATER_STATE_LENGTH (CAN_BIT) +#define CANTX_SIGNAL_BMS_INSULATION_MONITORING_START_BIT (13u) +#define CANTX_SIGNAL_BMS_INSULATION_MONITORING_LENGTH (CAN_BIT) +#define CANTX_SIGNAL_BMS_SYSTEM_MONITORING_ERROR_START_BIT (12u) +#define CANTX_SIGNAL_BMS_SYSTEM_MONITORING_ERROR_LENGTH (CAN_BIT) +#define CANTX_SIGNAL_BMS_EMERGENCY_SHUTOFF_START_BIT (11u) +#define CANTX_SIGNAL_BMS_EMERGENCY_SHUTOFF_LENGTH (CAN_BIT) +#define CANTX_SIGNAL_BMS_GENERAL_ERROR_START_BIT (10u) +#define CANTX_SIGNAL_BMS_GENERAL_ERROR_LENGTH (CAN_BIT) +#define CANTX_SIGNAL_BMS_GENERAL_WARNING_START_BIT (9u) +#define CANTX_SIGNAL_BMS_GENERAL_WARNING_LENGTH (CAN_BIT) +#define CANTX_SIGNAL_BMS_CHARGING_COMPLETE_START_BIT (8u) +#define CANTX_SIGNAL_BMS_CHARGING_COMPLETE_LENGTH (CAN_BIT) +#define CANTX_SIGNAL_BMS_INSULATION_ERROR_START_BIT (23u) +#define CANTX_SIGNAL_BMS_INSULATION_ERROR_LENGTH (CAN_BIT) +#define CANTX_SIGNAL_BMS_INTERLOCK_STATE_START_BIT (22u) +#define CANTX_SIGNAL_BMS_INTERLOCK_STATE_LENGTH (CAN_BIT) +#define CANTX_SIGNAL_BMS_MAIN_FUSE_BLOWN_START_BIT (21u) +#define CANTX_SIGNAL_BMS_MAIN_FUSE_BLOWN_LENGTH (CAN_BIT) +#define CANTX_SIGNAL_BMS_BMS_MASTER_PCB_UNDERTEMPERATURE_ERROR_START_BIT (20u) +#define CANTX_SIGNAL_BMS_BMS_MASTER_PCB_UNDERTEMPERATURE_ERROR_LENGTH (CAN_BIT) +#define CANTX_SIGNAL_BMS_BMS_MASTER_PCB_OVERTEMPERATURE_ERROR_START_BIT (19u) +#define CANTX_SIGNAL_BMS_BMS_MASTER_PCB_OVERTEMPERATURE_ERROR_LENGTH (CAN_BIT) +#define CANTX_SIGNAL_BMS_MCU_DIE_TEMPERATURE_ERROR_START_BIT (18u) +#define CANTX_SIGNAL_BMS_MCU_DIE_TEMPERATURE_ERROR_LENGTH (CAN_BIT) +#define CANTX_SIGNAL_BMS_PRECHARGE_CURRENT_ERROR_START_BIT (17u) +#define CANTX_SIGNAL_BMS_PRECHARGE_CURRENT_ERROR_LENGTH (CAN_BIT) +#define CANTX_SIGNAL_BMS_PRECHARGE_VOLTAGE_ERROR_START_BIT (16u) +#define CANTX_SIGNAL_BMS_PRECHARGE_VOLTAGE_ERROR_LENGTH (CAN_BIT) +#define CANTX_SIGNAL_BMS_NVRAM_CRC_ERROR_START_BIT (28u) +#define CANTX_SIGNAL_BMS_NVRAM_CRC_ERROR_LENGTH (CAN_BIT) +#define CANTX_SIGNAL_BMS_ALERT_FLAG_START_BIT (27u) +#define CANTX_SIGNAL_BMS_ALERT_FLAG_LENGTH (CAN_BIT) +#define CANTX_SIGNAL_BMS_PACK_OVERCURRENT_DISCHARGE_ERROR_START_BIT (26u) +#define CANTX_SIGNAL_BMS_PACK_OVERCURRENT_DISCHARGE_ERROR_LENGTH (CAN_BIT) +#define CANTX_SIGNAL_BMS_PACK_OVERCURRENT_CHARGE_ERROR_START_BIT (25u) +#define CANTX_SIGNAL_BMS_PACK_OVERCURRENT_CHARGE_ERROR_LENGTH (CAN_BIT) +#define CANTX_SIGNAL_BMS_CAN_TIMING_ERROR_START_BIT (24u) +#define CANTX_SIGNAL_BMS_CAN_TIMING_ERROR_LENGTH (CAN_BIT) +#define CANTX_SIGNAL_BMS_NUMBER_OF_DEACTIVATED_STRINGS_START_BIT (51u) +#define CANTX_SIGNAL_BMS_NUMBER_OF_DEACTIVATED_STRINGS_LENGTH (4u) +#define CANTX_SIGNAL_BMS_INSULATION_RESISTANCE_START_BIT (63u) +#define CANTX_SIGNAL_BMS_INSULATION_RESISTANCE_LENGTH (8u) + +#define CANTX_FACTOR_INSULATION_RESISTANCE (200.0f) +#define CANTX_MINIMUM_VALUE_INSULATION_RESISTANCE (0.0f) +#define CANTX_MAXIMUM_VALUE_INSULATION_RESISTANCE (51000.0f) + +/** @{ + * configuration of the insulation resistance signal +*/ +static const CAN_SIGNAL_TYPE_s cantx_signalInsulationResistance = { + CANTX_SIGNAL_BMS_INSULATION_RESISTANCE_START_BIT, + CANTX_SIGNAL_BMS_INSULATION_RESISTANCE_LENGTH, + CANTX_FACTOR_INSULATION_RESISTANCE, + CAN_SIGNAL_OFFSET_0, + CANTX_MINIMUM_VALUE_INSULATION_RESISTANCE, + CANTX_MAXIMUM_VALUE_INSULATION_RESISTANCE}; +/** @} */ + +/*========== Static Constant and Variable Definitions =======================*/ + +/*========== Extern Constant and Variable Definitions =======================*/ + +/*========== Static Function Prototypes =====================================*/ +/** + * @brief get a boolean for if any timing error (current or recorded) occurred + * @param kpkCanShim const pointer to CAN shim + * @return returns if there has been any timing violations + */ +static bool CANTX_AnySysMonTimingIssueDetected(const CAN_SHIM_s *const kpkCanShim); + +/*========== Static Function Implementations ================================*/ +static bool CANTX_AnySysMonTimingIssueDetected(const CAN_SHIM_s *const kpkCanShim) { + FAS_ASSERT(kpkCanShim != NULL_PTR); + SYSM_TIMING_VIOLATION_RESPONSE_s recordedTimingViolations = {0}; + SYSM_GetRecordedTimingViolations(&recordedTimingViolations); + + const bool anyTimingViolation = + (recordedTimingViolations.recordedViolationAny || + kpkCanShim->pTableErrorState->taskEngineTimingViolationError || + kpkCanShim->pTableErrorState->task1msTimingViolationError || + kpkCanShim->pTableErrorState->task10msTimingViolationError || + kpkCanShim->pTableErrorState->task100msTimingViolationError || + kpkCanShim->pTableErrorState->task100msAlgoTimingViolationError); + + return anyTimingViolation; +} + +/*========== Extern Function Implementations ================================*/ +extern uint32_t CANTX_BmsState( + CAN_MESSAGE_PROPERTIES_s message, + uint8_t *pCanData, + uint8_t *pMuxId, + const CAN_SHIM_s *const kpkCanShim) { + FAS_ASSERT(message.id == CANTX_BMS_STATE_ID); + FAS_ASSERT(message.idType == CANTX_BMS_STATE_ID_TYPE); + FAS_ASSERT(message.dlc == CANTX_BMS_STATE_DLC); + FAS_ASSERT(message.endianness == CANTX_BMS_STATE_ENDIANNESS); + FAS_ASSERT(pCanData != NULL_PTR); + FAS_ASSERT(pMuxId == NULL_PTR); /* pMuxId is not used here, therefore has to be NULL_PTR */ + FAS_ASSERT(kpkCanShim != NULL_PTR); + uint64_t messageData = 0u; + + DATA_READ_DATA(kpkCanShim->pTableErrorState, kpkCanShim->pTableInsulation, kpkCanShim->pTableMsl); + + /* State */ + uint64_t data = (uint64_t)BMS_GetState(); + /* set data in CAN frame */ + CAN_TxSetMessageDataWithSignalData( + &messageData, + CANTX_SIGNAL_BMS_BMS_STATE_START_BIT, + CANTX_SIGNAL_BMS_BMS_STATE_LENGTH, + data, + message.endianness); + + /* Connected strings */ + data = (uint64_t)BMS_GetNumberOfConnectedStrings(); + /* set data in CAN frame */ + CAN_TxSetMessageDataWithSignalData( + &messageData, + CANTX_SIGNAL_BMS_NUMBER_OF_CONNECTED_STRINGS_START_BIT, + CANTX_SIGNAL_BMS_NUMBER_OF_CONNECTED_STRINGS_LENGTH, + data, + message.endianness); + + /* General warning: TODO */ + + /* General error - implement now */ + data = CAN_ConvertBooleanToInteger(DIAG_IsAnyFatalErrorSet()); + CAN_TxSetMessageDataWithSignalData( + &messageData, + CANTX_SIGNAL_BMS_GENERAL_ERROR_START_BIT, + CANTX_SIGNAL_BMS_GENERAL_ERROR_LENGTH, + data, + message.endianness); + + /* Emergency shutoff */ + data = CAN_ConvertBooleanToInteger(BMS_IsTransitionToErrorStateActive()); + CAN_TxSetMessageDataWithSignalData( + &messageData, + CANTX_SIGNAL_BMS_EMERGENCY_SHUTOFF_START_BIT, + CANTX_SIGNAL_BMS_EMERGENCY_SHUTOFF_LENGTH, + data, + message.endianness); + + /* Number of deactivated strings: TODO */ + + /* sys mon error */ + data = CAN_ConvertBooleanToInteger(CANTX_AnySysMonTimingIssueDetected(kpkCanShim)); + CAN_TxSetMessageDataWithSignalData( + &messageData, + CANTX_SIGNAL_BMS_SYSTEM_MONITORING_ERROR_START_BIT, + CANTX_SIGNAL_BMS_SYSTEM_MONITORING_ERROR_LENGTH, + data, + message.endianness); + + /* Insulation monitoring active */ + data = CAN_ConvertBooleanToInteger(kpkCanShim->pTableInsulation->isImdRunning); + CAN_TxSetMessageDataWithSignalData( + &messageData, + CANTX_SIGNAL_BMS_INSULATION_MONITORING_START_BIT, + CANTX_SIGNAL_BMS_INSULATION_MONITORING_LENGTH, + data, + message.endianness); + + /* Error: insulation */ + data = CAN_ConvertBooleanToInteger(kpkCanShim->pTableErrorState->criticalLowInsulationResistanceError); + CAN_TxSetMessageDataWithSignalData( + &messageData, + CANTX_SIGNAL_BMS_INSULATION_ERROR_START_BIT, + CANTX_SIGNAL_BMS_INSULATION_ERROR_LENGTH, + data, + message.endianness); + + /* Insulation resistance */ + float_t signalData = (float_t)kpkCanShim->pTableInsulation->insulationResistance_kOhm; + CAN_TxPrepareSignalData(&signalData, cantx_signalInsulationResistance); + data = (uint64_t)signalData; + CAN_TxSetMessageDataWithSignalData( + &messageData, + cantx_signalInsulationResistance.bitStart, + cantx_signalInsulationResistance.bitLength, + data, + message.endianness); + + /* Charging complete: TODO */ + + /* Heater state: TODO */ + /* Cooling state: TODO */ + + /* Error: Precharge voltage */ + data = 0u; /* No precharge error detected */ + for (uint8_t s = 0u; s < BS_NR_OF_STRINGS; s++) { + if (kpkCanShim->pTableErrorState->prechargeAbortedDueToVoltage[s] == true) { + data = 1u; + } + } + CAN_TxSetMessageDataWithSignalData( + &messageData, + CANTX_SIGNAL_BMS_PRECHARGE_VOLTAGE_ERROR_START_BIT, + CANTX_SIGNAL_BMS_PRECHARGE_VOLTAGE_ERROR_LENGTH, + data, + message.endianness); + + /* Error: Precharge current */ + data = 0u; /* No precharge error detected */ + for (uint8_t s = 0u; s < BS_NR_OF_STRINGS; s++) { + if (kpkCanShim->pTableErrorState->prechargeAbortedDueToCurrent[s] == true) { + data = 1u; + } + } + CAN_TxSetMessageDataWithSignalData( + &messageData, + CANTX_SIGNAL_BMS_PRECHARGE_CURRENT_ERROR_START_BIT, + CANTX_SIGNAL_BMS_PRECHARGE_CURRENT_ERROR_LENGTH, + data, + message.endianness); + + /* Error: MCU die temperature */ + data = CAN_ConvertBooleanToInteger(kpkCanShim->pTableErrorState->mcuDieTemperatureViolationError); + CAN_TxSetMessageDataWithSignalData( + &messageData, + CANTX_SIGNAL_BMS_MCU_DIE_TEMPERATURE_ERROR_START_BIT, + CANTX_SIGNAL_BMS_MCU_DIE_TEMPERATURE_ERROR_LENGTH, + data, + message.endianness); + + /* Error: master overtemperature: TODO */ + /* Error: master undertemperature: TODO */ + + /* Main fuse state */ + data = CAN_ConvertBooleanToInteger(kpkCanShim->pTableErrorState->mainFuseError); + CAN_TxSetMessageDataWithSignalData( + &messageData, + CANTX_SIGNAL_BMS_MAIN_FUSE_BLOWN_START_BIT, + CANTX_SIGNAL_BMS_MAIN_FUSE_BLOWN_LENGTH, + data, + message.endianness); + + /* Error: interlock */ + data = CAN_ConvertBooleanToInteger(kpkCanShim->pTableErrorState->interlockOpenedError); + CAN_TxSetMessageDataWithSignalData( + &messageData, + CANTX_SIGNAL_BMS_INTERLOCK_STATE_START_BIT, + CANTX_SIGNAL_BMS_INTERLOCK_STATE_LENGTH, + data, + message.endianness); + + /* Error: Can timing */ + data = kpkCanShim->pTableErrorState->stateRequestTimingViolationError; + CAN_TxSetMessageDataWithSignalData( + &messageData, + CANTX_SIGNAL_BMS_CAN_TIMING_ERROR_START_BIT, + CANTX_SIGNAL_BMS_CAN_TIMING_ERROR_LENGTH, + data, + message.endianness); + + /* Error: Overcurrent pack charge */ + data = kpkCanShim->pTableMsl->packChargeOvercurrent; + CAN_TxSetMessageDataWithSignalData( + &messageData, + CANTX_SIGNAL_BMS_PACK_OVERCURRENT_CHARGE_ERROR_START_BIT, + CANTX_SIGNAL_BMS_PACK_OVERCURRENT_CHARGE_ERROR_LENGTH, + data, + message.endianness); + + /* Error: Overcurrent pack discharge */ + data = kpkCanShim->pTableMsl->packDischargeOvercurrent; + CAN_TxSetMessageDataWithSignalData( + &messageData, + CANTX_SIGNAL_BMS_PACK_OVERCURRENT_DISCHARGE_ERROR_START_BIT, + CANTX_SIGNAL_BMS_PACK_OVERCURRENT_DISCHARGE_ERROR_LENGTH, + data, + message.endianness); + + /* Error: Alert flag */ + data = CAN_ConvertBooleanToInteger(kpkCanShim->pTableErrorState->alertFlagSetError); + CAN_TxSetMessageDataWithSignalData( + &messageData, + CANTX_SIGNAL_BMS_ALERT_FLAG_START_BIT, + CANTX_SIGNAL_BMS_ALERT_FLAG_LENGTH, + data, + message.endianness); + + /* Error: NVRAM CRC */ + data = CAN_ConvertBooleanToInteger(kpkCanShim->pTableErrorState->framReadCrcError); + CAN_TxSetMessageDataWithSignalData( + &messageData, + CANTX_SIGNAL_BMS_NVRAM_CRC_ERROR_START_BIT, + CANTX_SIGNAL_BMS_NVRAM_CRC_ERROR_LENGTH, + data, + message.endianness); + + /* now copy data in the buffer that will be use to send data */ + CAN_TxSetCanDataWithMessageData(messageData, pCanData, message.endianness); + + return 0u; +} + +/*========== Externalized Static Function Implementations (Unit Test) =======*/ +#ifdef UNITY_UNIT_TEST +extern bool TEST_CANTX_AnySysMonTimingIssueDetected(const CAN_SHIM_s *const kpkCanShim) { + return CANTX_AnySysMonTimingIssueDetected(kpkCanShim); +} + +#endif diff --git a/src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_cell-temperatures.c b/src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_cell-temperatures.c new file mode 100644 index 00000000..63c65d50 --- /dev/null +++ b/src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_cell-temperatures.c @@ -0,0 +1,311 @@ +/** + * + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * We kindly request you to use one or more of the following phrases to refer to + * foxBMS in your hardware, software, documentation or advertising materials: + * + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" + * + */ + +/** + * @file can_cbs_tx_cell-temperatures.c + * @author foxBMS Team + * @date 2021-04-20 (date of creation) + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS + * @prefix CANTX + * + * @brief CAN driver Tx callback implementation + * @details CAN Tx callback for cell temperatures + */ + +/*========== Includes =======================================================*/ +/* AXIVION Next Codeline Generic-LocalInclude: 'can_cbs_tx_cyclic.h' declares + * the prototype for the callback 'CANTX_CellTemperatures' */ +#include "can_cbs_tx_cyclic.h" +#include "can_cfg_tx-cyclic-message-definitions.h" +#include "can_helper.h" +#include "foxmath.h" + +#include +#include + +/*========== Macros and Definitions =========================================*/ + +/*========== Static Constant and Variable Definitions =======================*/ +/** the number of temperatures per message-frame */ +#define CANTX_NUMBER_OF_MUX_TEMPERATURES_PER_MESSAGE (6u) + +#if ((BS_NR_OF_TEMP_SENSORS % CANTX_NUMBER_OF_MUX_TEMPERATURES_PER_MESSAGE) == 0) +#define CANTX_NUMBER_OF_CAN_MESSAGES_FOR_CELL_TEMPERATURES \ + ((uint8_t)(BS_NR_OF_TEMP_SENSORS / CANTX_NUMBER_OF_MUX_TEMPERATURES_PER_MESSAGE)) +#else +#define CANTX_NUMBER_OF_CAN_MESSAGES_FOR_CELL_TEMPERATURES \ + ((uint8_t)(BS_NR_OF_TEMP_SENSORS / CANTX_NUMBER_OF_MUX_TEMPERATURES_PER_MESSAGE) + 1u) +#endif + +/** + * CAN signals used in this message + * Parameters: + * bit start, bit length, factor, offset, minimum value, maximum value + */ +static const CAN_SIGNAL_TYPE_s cantx_cellTemperatureMultiplexer = {7u, 8u, 1.0f, 0.0f, 0.0f, 1.0f}; +static const CAN_SIGNAL_TYPE_s cantx_cell0TemperatureInvalidFlag = {8u, 1u, 1.0f, 0.0f, 0.0f, 1.0f}; +static const CAN_SIGNAL_TYPE_s cantx_cell1TemperatureInvalidFlag = {9u, 1u, 1.0f, 0.0f, 0.0f, 1.0f}; +static const CAN_SIGNAL_TYPE_s cantx_cell2TemperatureInvalidFlag = {10u, 1u, 1.0f, 0.0f, 0.0f, 1.0f}; +static const CAN_SIGNAL_TYPE_s cantx_cell3TemperatureInvalidFlag = {11u, 1u, 1.0f, 0.0f, 0.0f, 1.0f}; +static const CAN_SIGNAL_TYPE_s cantx_cell4TemperatureInvalidFlag = {12u, 1u, 1.0f, 0.0f, 0.0f, 1.0f}; +static const CAN_SIGNAL_TYPE_s cantx_cell5TemperatureInvalidFlag = {13u, 1u, 1.0f, 0.0f, 0.0f, 1.0f}; +static const CAN_SIGNAL_TYPE_s cantx_cell0Temperature_degC = {23u, 8u, 1.0f, 0.0f, -128.0f, 127.0f}; +static const CAN_SIGNAL_TYPE_s cantx_cell1Temperature_degC = {31u, 8u, 1.0f, 0.0f, -128.0f, 127.0f}; +static const CAN_SIGNAL_TYPE_s cantx_cell2Temperature_degC = {39u, 8u, 1.0f, 0.0f, -128.0f, 127.0f}; +static const CAN_SIGNAL_TYPE_s cantx_cell3Temperature_degC = {47u, 8u, 1.0f, 0.0f, -128.0f, 127.0f}; +static const CAN_SIGNAL_TYPE_s cantx_cell4Temperature_degC = {55u, 8u, 1.0f, 0.0f, -128.0f, 127.0f}; +static const CAN_SIGNAL_TYPE_s cantx_cell5Temperature_degC = {63u, 8u, 1.0f, 0.0f, -128.0f, 127.0f}; + +/*========== Extern Constant and Variable Definitions =======================*/ + +/*========== Static Function Prototypes =====================================*/ + +/** + * @brief Helper function for CANTX_CellTemperatures() + * @details Used in the CANTX_CellTemperatures() callback to set invalid flag + * data and temperature data in the CAN frame. + * @param[in] temperatureSensorId ID of the temperature sensor + * @param[in] pMessage pointer to CAN frame data + * @param[in] cellTemperatureSignal signal characteristics for + * temperature data + * @param[in] cellTemperatureInvalidFlagSignal signal characteristics for + * invalid flag data + * @param[in] endianness big or little endianness of data + * @param[in] kpkCanShim shim to the database entries + */ +static void CANTX_TemperatureSetData( + uint16_t temperatureSensorId, + uint64_t *pMessage, + CAN_SIGNAL_TYPE_s cellTemperatureSignal, + CAN_SIGNAL_TYPE_s cellTemperatureInvalidFlagSignal, + CAN_ENDIANNESS_e endianness, + const CAN_SHIM_s *const kpkCanShim); + +/*========== Static Function Implementations ================================*/ + +static void CANTX_TemperatureSetData( + uint16_t temperatureSensorId, + uint64_t *pMessage, + CAN_SIGNAL_TYPE_s cellTemperatureSignal, + CAN_SIGNAL_TYPE_s cellTemperatureInvalidFlagSignal, + CAN_ENDIANNESS_e endianness, + const CAN_SHIM_s *const kpkCanShim) { + /* sensor index must not be greater than the number of sensors */ + FAS_ASSERT(temperatureSensorId < BS_NR_OF_TEMP_SENSORS); + FAS_ASSERT(pMessage != NULL_PTR); + FAS_ASSERT(cellTemperatureSignal.bitLength == 8u); + FAS_ASSERT( + (cellTemperatureSignal.bitStart == cantx_cell0Temperature_degC.bitStart) || + (cellTemperatureSignal.bitStart == cantx_cell1Temperature_degC.bitStart) || + (cellTemperatureSignal.bitStart == cantx_cell2Temperature_degC.bitStart) || + (cellTemperatureSignal.bitStart == cantx_cell3Temperature_degC.bitStart) || + (cellTemperatureSignal.bitStart == cantx_cell4Temperature_degC.bitStart) || + (cellTemperatureSignal.bitStart == cantx_cell5Temperature_degC.bitStart)); + FAS_ASSERT(cellTemperatureInvalidFlagSignal.bitLength == 1u); + FAS_ASSERT( + (cellTemperatureInvalidFlagSignal.bitStart == cantx_cell0TemperatureInvalidFlag.bitStart) || + (cellTemperatureInvalidFlagSignal.bitStart == cantx_cell1TemperatureInvalidFlag.bitStart) || + (cellTemperatureInvalidFlagSignal.bitStart == cantx_cell2TemperatureInvalidFlag.bitStart) || + (cellTemperatureInvalidFlagSignal.bitStart == cantx_cell3TemperatureInvalidFlag.bitStart) || + (cellTemperatureInvalidFlagSignal.bitStart == cantx_cell4TemperatureInvalidFlag.bitStart) || + (cellTemperatureInvalidFlagSignal.bitStart == cantx_cell5TemperatureInvalidFlag.bitStart)); + FAS_ASSERT(kpkCanShim != NULL_PTR); + + /* start_index end_index module + * 00 17 module1 + * 18 35 module2 + * 20 53 module3 + * 30 71 module4 + */ + /* start_index end_index string + * 000 071 string0 + */ + + /* Get string, module and cell number */ + const uint8_t stringNumber = DATA_GetStringNumberFromTemperatureIndex(temperatureSensorId); + const uint8_t moduleNumber = DATA_GetModuleNumberFromTemperatureIndex(temperatureSensorId); + const uint8_t sensorNumber = DATA_GetSensorNumberFromTemperatureIndex(temperatureSensorId); + + uint32_t signalDataIsValid; + /* Valid bits data */ + if (kpkCanShim->pTableCellTemperature->invalidCellTemperature[stringNumber][moduleNumber][sensorNumber] == false) { + signalDataIsValid = 0u; + } else { + signalDataIsValid = 1u; + } + /* Set valid bit data in CAN frame */ + CAN_TxSetMessageDataWithSignalData( + pMessage, + cellTemperatureInvalidFlagSignal.bitStart, + cellTemperatureInvalidFlagSignal.bitLength, + signalDataIsValid, + endianness); + + /* Temperature data */ + float_t signalData_degC = + (float_t)kpkCanShim->pTableCellTemperature->cellTemperature_ddegC[stringNumber][moduleNumber][sensorNumber]; + signalData_degC /= UNIT_CONVERSION_FACTOR_10_FLOAT; /* Convert temperature from deci-degC to degC */ + /* Apply offset and factor, check min/max limits */ + CAN_TxPrepareSignalData(&signalData_degC, cellTemperatureSignal); + /* Set temperature data in CAN frame */ + CAN_TxSetMessageDataWithSignalData( + pMessage, + cellTemperatureSignal.bitStart, + cellTemperatureSignal.bitLength, + (int32_t)signalData_degC, + endianness); +} + +/*========== Extern Function Implementations ================================*/ +extern uint32_t CANTX_CellTemperatures( + CAN_MESSAGE_PROPERTIES_s message, + uint8_t *pCanData, + uint8_t *pMuxId, + const CAN_SHIM_s *const kpkCanShim) { + FAS_ASSERT(message.id == CANTX_CELL_TEMPERATURES_ID); + FAS_ASSERT(message.idType == CANTX_CELL_TEMPERATURES_ID_TYPE); + FAS_ASSERT(message.dlc == CAN_FOXBMS_MESSAGES_DEFAULT_DLC); + FAS_ASSERT(pCanData != NULL_PTR); + FAS_ASSERT(pMuxId != NULL_PTR); + FAS_ASSERT(kpkCanShim != NULL_PTR); + uint64_t messageData = 0u; + + /* Reset mux if maximum was reached */ + if (*pMuxId >= CANTX_NUMBER_OF_CAN_MESSAGES_FOR_CELL_TEMPERATURES) { + *pMuxId = 0u; + /* first signal to transmit cell temperatures: get database values */ + DATA_READ_DATA(kpkCanShim->pTableCellTemperature); + } + + /* Set mux signal in CAN frame */ + CAN_TxSetMessageDataWithSignalData( + &messageData, + cantx_cellTemperatureMultiplexer.bitStart, + cantx_cellTemperatureMultiplexer.bitLength, + (uint64_t)*pMuxId, + message.endianness); + + /* Set other signals in CAN frame */ + /* Calculate the global temperature sensor ID based on the multiplexer value for the first temperature sensor */ + uint16_t temperatureSensorId = (*pMuxId * CANTX_NUMBER_OF_MUX_TEMPERATURES_PER_MESSAGE); + CANTX_TemperatureSetData( + temperatureSensorId, + &messageData, + cantx_cell0Temperature_degC, + cantx_cell0TemperatureInvalidFlag, + message.endianness, + kpkCanShim); + temperatureSensorId++; /* Increment global temperature sensor ID */ + if (temperatureSensorId < BS_NR_OF_TEMP_SENSORS) { + CANTX_TemperatureSetData( + temperatureSensorId, + &messageData, + cantx_cell1Temperature_degC, + cantx_cell1TemperatureInvalidFlag, + message.endianness, + kpkCanShim); + temperatureSensorId++; /* Increment global temperature sensor ID */ + if (temperatureSensorId < BS_NR_OF_TEMP_SENSORS) { + CANTX_TemperatureSetData( + temperatureSensorId, + &messageData, + cantx_cell2Temperature_degC, + cantx_cell2TemperatureInvalidFlag, + message.endianness, + kpkCanShim); + + temperatureSensorId++; /* Increment global temperature sensor ID */ + if (temperatureSensorId < BS_NR_OF_TEMP_SENSORS) { + CANTX_TemperatureSetData( + temperatureSensorId, + &messageData, + cantx_cell3Temperature_degC, + cantx_cell3TemperatureInvalidFlag, + message.endianness, + kpkCanShim); + temperatureSensorId++; /* Increment global temperature sensor ID */ + if (temperatureSensorId < BS_NR_OF_TEMP_SENSORS) { + CANTX_TemperatureSetData( + temperatureSensorId, + &messageData, + cantx_cell4Temperature_degC, + cantx_cell4TemperatureInvalidFlag, + message.endianness, + kpkCanShim); + temperatureSensorId++; /* Increment global temperature sensor ID */ + if (temperatureSensorId < BS_NR_OF_TEMP_SENSORS) { + CANTX_TemperatureSetData( + temperatureSensorId, + &messageData, + cantx_cell5Temperature_degC, + cantx_cell5TemperatureInvalidFlag, + message.endianness, + kpkCanShim); + } + } + } + } + } + + /* Increment multiplexer for next cell */ + (*pMuxId)++; + + /* All signal data copied in CAN frame, now copy data in the buffer that will be use to send the frame */ + CAN_TxSetCanDataWithMessageData(messageData, pCanData, message.endianness); + + return 0u; +} + +/*========== Externalized Static Function Implementations (Unit Test) =======*/ +#ifdef UNITY_UNIT_TEST +extern void TEST_CANTX_TemperatureSetData( + uint16_t temperatureSensorId, + uint64_t *pMessage, + CAN_SIGNAL_TYPE_s cellTemperatureSignal, + CAN_SIGNAL_TYPE_s cellTemperatureInvalidFlagSignal, + CAN_ENDIANNESS_e endianness, + const CAN_SHIM_s *const kpkCanShim) { + CANTX_TemperatureSetData( + temperatureSensorId, pMessage, cellTemperatureSignal, cellTemperatureInvalidFlagSignal, endianness, kpkCanShim); +} +#endif diff --git a/src/app/driver/can/cbs/tx/can_cbs_tx_cell-voltages.c b/src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_cell-voltages.c similarity index 54% rename from src/app/driver/can/cbs/tx/can_cbs_tx_cell-voltages.c rename to src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_cell-voltages.c index 71ef3da8..a9f8ea64 100644 --- a/src/app/driver/can/cbs/tx/can_cbs_tx_cell-voltages.c +++ b/src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_cell-voltages.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,9 +43,9 @@ * @file can_cbs_tx_cell-voltages.c * @author foxBMS Team * @date 2021-04-20 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup DRIVER + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS * @prefix CANTX * * @brief CAN driver Tx callback implementation @@ -53,8 +53,10 @@ */ /*========== Includes =======================================================*/ -#include "can_cbs_tx.h" -#include "can_cfg_tx-message-definitions.h" +/* AXIVION Next Codeline Generic-LocalInclude: 'can_cbs_tx_cyclic.h' declares + * the prototype for the callback 'CANTX_CellVoltages' */ +#include "can_cbs_tx_cyclic.h" +#include "can_cfg_tx-cyclic-message-definitions.h" #include "can_helper.h" #include @@ -66,6 +68,14 @@ /** the number of voltages per message-frame */ #define CANTX_NUMBER_OF_MUX_VOLTAGES_PER_MESSAGE (4u) +#if ((BS_NR_OF_CELL_BLOCKS % CANTX_NUMBER_OF_MUX_VOLTAGES_PER_MESSAGE) == 0) +#define CANTX_NUMBER_OF_CAN_MESSAGES_FOR_CELL_VOLTAGES \ + ((uint8_t)(BS_NR_OF_CELL_BLOCKS / CANTX_NUMBER_OF_MUX_VOLTAGES_PER_MESSAGE)) +#else +#define CANTX_NUMBER_OF_CAN_MESSAGES_FOR_CELL_VOLTAGES \ + ((uint8_t)(BS_NR_OF_CELL_BLOCKS / CANTX_NUMBER_OF_MUX_VOLTAGES_PER_MESSAGE) + 1u) +#endif + /** * CAN signals used in this message * Parameters: @@ -85,21 +95,20 @@ static const CAN_SIGNAL_TYPE_s cantx_cellVoltage3_mV = {52u, 13u, 1.0f, /*========== Static Function Prototypes =====================================*/ /** - * @brief Helper function for CANTX_CellVoltages() - * - * Used in the CANTX_CellVoltages() callback to set - * invalid flag data and voltage data - * in the CAN frame. - * - * @param[in] muxId multiplexer value - * @param[in] pMessage pointer to CAN frame data - * @param[in] cellVoltageSignal signal characteristics for voltage data - * @param[in] cellVoltageInvalidFlagSignal signal characteristics for invalid flag data - * @param[in] endianness big or little endianness of data - * @param[in] kpkCanShim shim to the database entries + * @brief Helper function for CANTX_CellVoltages() + * @details Used in the CANTX_CellVoltages() callback to set invalid flag data + * and voltage data in the CAN frame. + * @param[in] cellId ID of th cell + * @param[in] pMessage pointer to CAN frame data + * @param[in] cellVoltageSignal signal characteristics for voltage + * data + * @param[in] cellVoltageInvalidFlagSignal signal characteristics for invalid + * flag data + * @param[in] endianness big or little endianness of data + * @param[in] kpkCanShim shim to the database entries */ static void CANTX_VoltageSetData( - uint8_t muxId, + uint16_t cellId, uint64_t *pMessage, CAN_SIGNAL_TYPE_s cellVoltageSignal, CAN_SIGNAL_TYPE_s cellVoltageInvalidFlagSignal, @@ -109,51 +118,41 @@ static void CANTX_VoltageSetData( /*========== Static Function Implementations ================================*/ static void CANTX_VoltageSetData( - uint8_t muxId, + uint16_t cellId, uint64_t *pMessage, CAN_SIGNAL_TYPE_s cellVoltageSignal, CAN_SIGNAL_TYPE_s cellVoltageInvalidFlagSignal, CAN_ENDIANNESS_e endianness, const CAN_SHIM_s *const kpkCanShim) { - /* AXIVION Routine Generic-MissingParameterAssert: muxId: parameter checked in calling function */ - /* AXIVION Routine Generic-MissingParameterAssert: pMessage: passed parameter created from calling function */ - /* AXIVION Routine Generic-MissingParameterAssert: cellVoltageSignal: Assertion done in CAN_TxPrepareSignalData */ - /* AXIVION Routine Generic-MissingParameterAssert: cellVoltageInvalidFlagSignal: Assertion done by caller */ - /* AXIVION Routine Generic-MissingParameterAssert: endianness: parameter checked in calling function */ - /* AXIVION Routine Generic-MissingParameterAssert: kpkCanShim: parameter checked in calling function */ - - /* cell index must not be greater than the number of cells */ - if (muxId < (BS_NR_OF_CELL_BLOCKS_PER_STRING * BS_NR_OF_STRINGS)) { - /* Get string, module and cell number */ - const uint8_t stringNumber = DATA_GetStringNumberFromVoltageIndex(muxId); - const uint8_t moduleNumber = DATA_GetModuleNumberFromVoltageIndex(muxId); - const uint8_t cellBlockNumber = DATA_GetCellNumberFromVoltageIndex(muxId); - - uint32_t signalData_valid = 0u; - /* Valid bits data */ - if ((kpkCanShim->pTableCellVoltage->invalidCellVoltage[stringNumber][moduleNumber] & - (0x01u << cellBlockNumber)) == 0u) { - signalData_valid = 0u; - } else { - signalData_valid = 1u; - } - /* Set valid bit data in CAN frame */ - CAN_TxSetMessageDataWithSignalData( - pMessage, - cellVoltageInvalidFlagSignal.bitStart, - cellVoltageInvalidFlagSignal.bitLength, - signalData_valid, - endianness); - - /*Voltage data */ - float_t signalData_mV = - (float_t)(kpkCanShim->pTableCellVoltage->cellVoltage_mV[stringNumber][moduleNumber][cellBlockNumber]); - /* Apply offset and factor */ - CAN_TxPrepareSignalData(&signalData_mV, cellVoltageSignal); - /* Set voltage data in CAN frame */ - CAN_TxSetMessageDataWithSignalData( - pMessage, cellVoltageSignal.bitStart, cellVoltageSignal.bitLength, (uint32_t)signalData_mV, endianness); + FAS_ASSERT(cellId < BS_NR_OF_CELL_BLOCKS); + /* Get string, module and cell number */ + const uint8_t stringNumber = DATA_GetStringNumberFromVoltageIndex(cellId); + const uint8_t moduleNumber = DATA_GetModuleNumberFromVoltageIndex(cellId); + const uint8_t cellBlockNumber = DATA_GetCellNumberFromVoltageIndex(cellId); + + uint32_t signalDataIsValid = 0u; + /* Valid bits data */ + if (kpkCanShim->pTableCellVoltage->invalidCellVoltage[stringNumber][moduleNumber][cellBlockNumber] == false) { + signalDataIsValid = 0u; + } else { + signalDataIsValid = 1u; } + /* Set valid bit data in CAN frame */ + CAN_TxSetMessageDataWithSignalData( + pMessage, + cellVoltageInvalidFlagSignal.bitStart, + cellVoltageInvalidFlagSignal.bitLength, + signalDataIsValid, + endianness); + + /*Voltage data */ + float_t signalData_mV = + (float_t)(kpkCanShim->pTableCellVoltage->cellVoltage_mV[stringNumber][moduleNumber][cellBlockNumber]); + /* Apply offset and factor */ + CAN_TxPrepareSignalData(&signalData_mV, cellVoltageSignal); + /* Set voltage data in CAN frame */ + CAN_TxSetMessageDataWithSignalData( + pMessage, cellVoltageSignal.bitStart, cellVoltageSignal.bitLength, (uint32_t)signalData_mV, endianness); } /*========== Extern Function Implementations ================================*/ @@ -172,47 +171,71 @@ extern uint32_t CANTX_CellVoltages( uint64_t messageData = 0u; /* Reset mux if maximum was reached */ - if (*pMuxId >= (BS_NR_OF_STRINGS * BS_NR_OF_CELL_BLOCKS_PER_STRING)) { + if (*pMuxId >= CANTX_NUMBER_OF_CAN_MESSAGES_FOR_CELL_VOLTAGES) { *pMuxId = 0u; - } - /* First signal to transmit cell voltages: get database values */ - if (*pMuxId == 0u) { + /* First signal to transmit cell voltages: get database values */ DATA_READ_DATA(kpkCanShim->pTableCellVoltage); } /* Set mux signal in CAN frame */ - uint32_t signalData = *pMuxId / CANTX_NUMBER_OF_MUX_VOLTAGES_PER_MESSAGE; CAN_TxSetMessageDataWithSignalData( &messageData, cantx_cellVoltageMultiplexer.bitStart, cantx_cellVoltageMultiplexer.bitLength, - (uint32_t)signalData, + (uint64_t)*pMuxId, message.endianness); /* Set other signals in CAN frame */ + /* Calculate the global cell ID based on the multiplexer value for the first cell */ + uint16_t cellId = (*pMuxId * CANTX_NUMBER_OF_MUX_VOLTAGES_PER_MESSAGE); CANTX_VoltageSetData( - *pMuxId, &messageData, cantx_cellVoltage0_mV, cantx_cellVoltage0InvalidFlag, message.endianness, kpkCanShim); - /* Increment multiplexer for next cell */ - (*pMuxId)++; - CANTX_VoltageSetData( - *pMuxId, &messageData, cantx_cellVoltage1_mV, cantx_cellVoltage1InvalidFlag, message.endianness, kpkCanShim); - /* Increment multiplexer for next cell */ - (*pMuxId)++; - CANTX_VoltageSetData( - *pMuxId, &messageData, cantx_cellVoltage2_mV, cantx_cellVoltage2InvalidFlag, message.endianness, kpkCanShim); - /* Increment multiplexer for next cell */ - (*pMuxId)++; - CANTX_VoltageSetData( - *pMuxId, &messageData, cantx_cellVoltage3_mV, cantx_cellVoltage3InvalidFlag, message.endianness, kpkCanShim); + cellId, &messageData, cantx_cellVoltage0_mV, cantx_cellVoltage0InvalidFlag, message.endianness, kpkCanShim); + + cellId++; /* Increment global cell ID */ + if (cellId < BS_NR_OF_CELL_BLOCKS) { + CANTX_VoltageSetData( + cellId, &messageData, cantx_cellVoltage1_mV, cantx_cellVoltage1InvalidFlag, message.endianness, kpkCanShim); + cellId++; /* Increment global cell ID */ + if (cellId < BS_NR_OF_CELL_BLOCKS) { + CANTX_VoltageSetData( + cellId, + &messageData, + cantx_cellVoltage2_mV, + cantx_cellVoltage2InvalidFlag, + message.endianness, + kpkCanShim); + cellId++; /* Increment global cell ID */ + if (cellId < BS_NR_OF_CELL_BLOCKS) { + CANTX_VoltageSetData( + cellId, + &messageData, + cantx_cellVoltage3_mV, + cantx_cellVoltage3InvalidFlag, + message.endianness, + kpkCanShim); + } + } + } + /* Increment multiplexer for next cell */ (*pMuxId)++; /* All signal data copied in CAN frame, now copy data in the buffer that will be use to send the frame */ CAN_TxSetCanDataWithMessageData(messageData, pCanData, message.endianness); - return 0; + return 0u; } /*========== Externalized Static Function Implementations (Unit Test) =======*/ #ifdef UNITY_UNIT_TEST +extern void TEST_CANTX_VoltageSetData( + uint16_t cellId, + uint64_t *pMessage, + CAN_SIGNAL_TYPE_s cellVoltageSignal, + CAN_SIGNAL_TYPE_s cellVoltageInvalidFlagSignal, + CAN_ENDIANNESS_e endianness, + const CAN_SHIM_s *const kpkCanShim) { + CANTX_VoltageSetData(cellId, pMessage, cellVoltageSignal, cellVoltageInvalidFlagSignal, endianness, kpkCanShim); +} + #endif diff --git a/src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_cyclic.h b/src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_cyclic.h new file mode 100644 index 00000000..b17b13f1 --- /dev/null +++ b/src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_cyclic.h @@ -0,0 +1,375 @@ +/** + * + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * We kindly request you to use one or more of the following phrases to refer to + * foxBMS in your hardware, software, documentation or advertising materials: + * + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" + * + */ + +/** + * @file can_cbs_tx_cyclic.h + * @author foxBMS Team + * @date 2021-04-20 (date of creation) + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS + * @prefix CANTX + * + * @brief CAN callbacks header + * @details TODO + */ + +#ifndef FOXBMS__CAN_CBS_TX_CYCLIC_H_ +#define FOXBMS__CAN_CBS_TX_CYCLIC_H_ + +/*========== Includes =======================================================*/ + +#include "can_cfg.h" + +#ifdef UNITY_UNIT_TEST +#include "can_helper.h" +#include "sys_mon.h" +#endif + +#include + +/*========== Macros and Definitions =========================================*/ + +/*========== Extern Constant and Variable Declarations ======================*/ + +/*========== Extern Function Prototypes =====================================*/ +/** TX callback functions @{ */ +/** + * @brief CAN Tx callback function for state + * @param[in] message contains the message ID, DLC and endianness + * @param[in] pCanData payload of can frame + * @param[in] pMuxId multiplexer for multiplexed CAN messages + * @param[in] kpkCanShim shim to the database entries + */ +extern uint32_t CANTX_BmsState( + CAN_MESSAGE_PROPERTIES_s message, + uint8_t *pCanData, + uint8_t *pMuxId, + const CAN_SHIM_s *const kpkCanShim); +/** + * @brief CAN Tx callback function for detail state + * @param[in] message contains the message ID, DLC and endianness + * @param[in] pCanData payload of can frame + * @param[in] pMuxId multiplexer for multiplexed CAN messages + * @param[in] kpkCanShim shim to the database entries + */ +extern uint32_t CANTX_BmsStateDetails( + CAN_MESSAGE_PROPERTIES_s message, + uint8_t *pCanData, + uint8_t *pMuxId, + const CAN_SHIM_s *const kpkCanShim); +/** + * @brief CAN Tx callback function for cell voltages + * @param[in] message contains the message ID, DLC and endianness + * @param[in] pCanData payload of can frame + * @param[in] pMuxId multiplexer for multiplexed CAN messages + * @param[in] kpkCanShim shim to the database entries + */ +extern uint32_t CANTX_CellVoltages( + CAN_MESSAGE_PROPERTIES_s message, + uint8_t *pCanData, + uint8_t *pMuxId, + const CAN_SHIM_s *const kpkCanShim); +/** + * @brief CAN Tx callback function for cell temperatures + * @param[in] message contains the message ID, DLC and endianness + * @param[in] pCanData payload of can frame + * @param[in] pMuxId multiplexer for multiplexed CAN messages + * @param[in] kpkCanShim shim to the database entries + */ +extern uint32_t CANTX_CellTemperatures( + CAN_MESSAGE_PROPERTIES_s message, + uint8_t *pCanData, + uint8_t *pMuxId, + const CAN_SHIM_s *const kpkCanShim); +/** + * @brief CAN Tx callback function for limit values + * @param[in] message contains the message ID, DLC and endianness + * @param[in] pCanData payload of can frame + * @param[in] pMuxId multiplexer for multiplexed CAN messages + * @param[in] kpkCanShim shim to the database entries + */ +extern uint32_t CANTX_PackLimits( + CAN_MESSAGE_PROPERTIES_s message, + uint8_t *pCanData, + uint8_t *pMuxId, + const CAN_SHIM_s *const kpkCanShim); +/** + * @brief CAN Tx callback function for min/max values + * @param[in] message contains the message ID, DLC and endianness + * @param[in] pCanData payload of can frame + * @param[in] pMuxId multiplexer for multiplexed CAN messages + * @param[in] kpkCanShim shim to the database entries + */ +extern uint32_t CANTX_PackMinimumMaximumValues( + CAN_MESSAGE_PROPERTIES_s message, + uint8_t *pCanData, + uint8_t *pMuxId, + const CAN_SHIM_s *const kpkCanShim); +/** + * @brief CAN Tx callback function for state estimation values + * @param[in] message contains the message ID, DLC and endianness + * @param[in] pCanData payload of can frame + * @param[in] pMuxId multiplexer for multiplexed CAN messages + * @param[in] kpkCanShim shim to the database entries + */ +extern uint32_t CANTX_PackStateEstimation( + CAN_MESSAGE_PROPERTIES_s message, + uint8_t *pCanData, + uint8_t *pMuxId, + const CAN_SHIM_s *const kpkCanShim); +/** + * @brief CAN Tx callback function for pack values values + * @param[in] message contains the message ID, DLC and endianness + * @param[in] pCanData payload of can frame + * @param[in] pMuxId multiplexer for multiplexed CAN messages + * @param[in] kpkCanShim shim to the database entries + */ +extern uint32_t CANTX_PackValuesP0( + CAN_MESSAGE_PROPERTIES_s message, + uint8_t *pCanData, + uint8_t *pMuxId, + const CAN_SHIM_s *const kpkCanShim); +/** + * @brief CAN Tx callback function for pack values values + * @param[in] message contains the message ID, DLC and endianness + * @param[in] pCanData payload of can frame + * @param[in] pMuxId multiplexer for multiplexed CAN messages + * @param[in] kpkCanShim shim to the database entries + */ +extern uint32_t CANTX_PackValuesP1( + CAN_MESSAGE_PROPERTIES_s message, + uint8_t *pCanData, + uint8_t *pMuxId, + const CAN_SHIM_s *const kpkCanShim); + +/** + * @brief CAN Tx callback function for string state values + * @param[in] message contains the message ID, DLC and endianness + * @param[in] pCanData payload of can frame + * @param[in] pMuxId multiplexer for multiplexed CAN messages + * @param[in] kpkCanShim shim to the database entries + */ +extern uint32_t CANTX_StringState( + CAN_MESSAGE_PROPERTIES_s message, + uint8_t *pCanData, + uint8_t *pMuxId, + const CAN_SHIM_s *const kpkCanShim); +/** + * @brief CAN Tx callback function for string values + * @param[in] message contains the message ID, DLC and endianness + * @param[in] pCanData payload of can frame + * @param[in] pMuxId multiplexer for multiplexed CAN messages + * @param[in] kpkCanShim shim to the database entries + */ +extern uint32_t CANTX_StringValuesP0( + CAN_MESSAGE_PROPERTIES_s message, + uint8_t *pCanData, + uint8_t *pMuxId, + const CAN_SHIM_s *const kpkCanShim); +/** + * @brief CAN Tx callback function for string values 2 + * @param[in] message contains the message ID, DLC and endianness + * @param[in] pCanData payload of can frame + * @param[in] pMuxId multiplexer for multiplexed CAN messages + * @param[in] kpkCanShim shim to the database entries + */ +extern uint32_t CANTX_StringValuesP1( + CAN_MESSAGE_PROPERTIES_s message, + uint8_t *pCanData, + uint8_t *pMuxId, + const CAN_SHIM_s *const kpkCanShim); +/** + * @brief CAN Tx callback function for string minimum and maximum values + * @param[in] message contains the message ID, DLC and endianness + * @param[in] pCanData payload of can frame + * @param[in] pMuxId multiplexer for multiplexed CAN messages + * @param[in] kpkCanShim shim to the database entries + */ +extern uint32_t CANTX_StringMinimumMaximumValues( + CAN_MESSAGE_PROPERTIES_s message, + uint8_t *pCanData, + uint8_t *pMuxId, + const CAN_SHIM_s *const kpkCanShim); +/** + * @brief CAN Tx callback function for string state estimation + * @param[in] message contains the message ID, DLC and endianness + * @param[in] pCanData payload of can frame + * @param[in] pMuxId multiplexer for multiplexed CAN messages + * @param[in] kpkCanShim shim to the database entries + */ +extern uint32_t CANTX_StringStateEstimation( + CAN_MESSAGE_PROPERTIES_s message, + uint8_t *pCanData, + uint8_t *pMuxId, + const CAN_SHIM_s *const kpkCanShim); +/** @} */ + +/*========== Externalized Static Functions Prototypes (Unit Test) ===========*/ +#ifdef UNITY_UNIT_TEST +/* externalized functions from src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_bms-state-details.c */ +extern void TEST_CANTX_SetTimingViolationEngine(uint64_t *pMessageData, const CAN_SHIM_s *const kpkCanShim); +extern void TEST_CANTX_SetTimingViolation1ms(uint64_t *pMessageData, const CAN_SHIM_s *const kpkCanShim); +extern void TEST_CANTX_SetTimingViolation10Ms(uint64_t *pMessageData, const CAN_SHIM_s *const kpkCanShim); +extern void TEST_CANTX_SetTimingViolation100Ms(uint64_t *pMessageData, const CAN_SHIM_s *const kpkCanShim); +extern void TEST_CANTX_SetTimingViolation100MsAlgo(uint64_t *pMessageData, const CAN_SHIM_s *const kpkCanShim); +extern void TEST_CANTX_SetTimingViolationEngineRec( + uint64_t *pMessageData, + SYSM_TIMING_VIOLATION_RESPONSE_s *pRecordedTimingViolations); +extern void TEST_CANTX_SetTimingViolation1MsRec( + uint64_t *pMessageData, + SYSM_TIMING_VIOLATION_RESPONSE_s *pRecordedTimingViolations); +extern void TEST_CANTX_SetTimingViolation10MsRec( + uint64_t *pMessageData, + SYSM_TIMING_VIOLATION_RESPONSE_s *pRecordedTimingViolations); +extern void TEST_CANTX_SetTimingViolation100MsRec( + uint64_t *pMessageData, + SYSM_TIMING_VIOLATION_RESPONSE_s *pRecordedTimingViolations); +extern void TEST_CANTX_SetTimingViolation100MsAlgoRec( + uint64_t *pMessageData, + SYSM_TIMING_VIOLATION_RESPONSE_s *pRecordedTimingViolations); + +/* externalized functions from src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_bms-state.c */ +extern bool TEST_CANTX_AnySysMonTimingIssueDetected(const CAN_SHIM_s *const kpkCanShim); + +/* externalized functions from src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_cell-temperatures.c */ +extern void TEST_CANTX_TemperatureSetData( + uint16_t temperatureSensorId, + uint64_t *pMessage, + CAN_SIGNAL_TYPE_s cellTemperatureSignal, + CAN_SIGNAL_TYPE_s cellTemperatureInvalidFlagSignal, + CAN_ENDIANNESS_e endianness, + const CAN_SHIM_s *const kpkCanShim); + +/* externalized functions from src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_cell-voltages.c */ +extern void TEST_CANTX_VoltageSetData( + uint16_t cellId, + uint64_t *pMessage, + CAN_SIGNAL_TYPE_s cellVoltageSignal, + CAN_SIGNAL_TYPE_s cellVoltageInvalidFlagSignal, + CAN_ENDIANNESS_e endianness, + const CAN_SHIM_s *const kpkCanShim); + +/* externalized functions from src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_pack-limits.c */ +extern uint64_t TEST_CANTX_CalculateMaximumDischargeCurrent(const CAN_SHIM_s *const kpkCanShim); +extern uint64_t TEST_CANTX_CalculateMaximumChargeCurrent(const CAN_SHIM_s *const kpkCanShim); +extern uint64_t TEST_CANTX_CalculateMaximumDischargePower(const CAN_SHIM_s *const kpkCanShim); +extern uint64_t TEST_CANTX_CalculateMaximumChargePower(const CAN_SHIM_s *const kpkCanShim); +extern uint64_t TEST_CANTX_CalculateMinimumBatteryVoltage(void); +extern uint64_t TEST_CANTX_CalculateMaximumBatteryVoltage(void); +extern void TEST_CANTX_BuildPackLimitsMessage(uint64_t *pMessageData, const CAN_SHIM_s *const kpkCanShim); + +/* externalized functions from src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_pack-minimum-maximum-values.c */ +extern int16_t TEST_CANTX_GetPackMaximumVoltage(const CAN_SHIM_s *const kpkCanShim); +extern int16_t TEST_CANTX_GetPackMinimumVoltage(const CAN_SHIM_s *const kpkCanShim); +extern int16_t TEST_CANTX_GetPackMaximumTemperature(const CAN_SHIM_s *const kpkCanShim); +extern int16_t TEST_CANTX_GetPackMinimumTemperature(const CAN_SHIM_s *const kpkCanShim); +extern uint64_t TEST_CANTX_CalculatePackMaximumTemperature(const CAN_SHIM_s *const kpkCanShim); +extern uint64_t TEST_CANTX_CalculatePackMinimumTemperature(const CAN_SHIM_s *const kpkCanShim); +extern void TEST_CANTX_BuildPackMinimumMaximumValuesMessage(const CAN_SHIM_s *const kpkCanShim, uint64_t *pMessageData); + +/* externalized functions from src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_pack-state-estimation.c */ +extern uint64_t TEST_CANTX_CalculateMaximumPackSoc(const CAN_SHIM_s *const kpkCanShim); +extern float_t TEST_CANTX_GetMaximumStringSoc(const CAN_SHIM_s *const kpkCanShim); +extern uint64_t TEST_CANTX_CalculateMinimumPackSoc(const CAN_SHIM_s *const kpkCanShim); +extern float_t TEST_CANTX_GetMinimumStringSoc(const CAN_SHIM_s *const kpkCanShim); +extern uint64_t TEST_CANTX_CalculateMaximumPackSoe(const CAN_SHIM_s *const kpkCanShim); +extern float_t TEST_CANTX_GetMaximumStringSoe(const CAN_SHIM_s *const kpkCanShim); +extern uint64_t TEST_CANTX_CalculateMinimumPackSoe(const CAN_SHIM_s *const kpkCanShim); +extern float_t TEST_CANTX_GetMinimumStringSoe(const CAN_SHIM_s *const kpkCanShim); +extern uint64_t TEST_CANTX_CalculatePackSoh(void); +extern uint64_t TEST_CANTX_CalculatePackEnergy(const CAN_SHIM_s *const kpkCanShim); +extern float_t TEST_CANTX_GetStringEnergy(const CAN_SHIM_s *const kpkCanShim); +extern void TEST_CANTX_BuildPackStateEstimationMessage(const CAN_SHIM_s *const kpkCanShim, uint64_t *pMessageData); + +/* externalized functions from src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_pack-values-p0.c */ +extern uint64_t TEST_CANTX_CalculateBatteryVoltage(const CAN_SHIM_s *const kpkCanShim); +extern uint64_t TEST_CANTX_CalculateBusVoltage(const CAN_SHIM_s *const kpkCanShim); +extern uint64_t TEST_CANTX_CalculatePower(const CAN_SHIM_s *const kpkCanShim); +extern uint64_t TEST_CANTX_CalculateCurrent(const CAN_SHIM_s *const kpkCanShim); +extern void TEST_CANTX_BuildP0Message(const CAN_SHIM_s *const kpkCanShim, uint64_t *pMessageData); + +/* externalized functions from src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_pack-values-p1.c */ +extern void TEST_CANTX_SetInsulationResistance(uint64_t *pMessageData, const CAN_SHIM_s *const kpkCanShim); +extern uint64_t TEST_CANTX_GetInsulationResistance(const CAN_SHIM_s *const kpkCanShim); + +/* externalized functions from src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_string-minimum-maximum-values.c */ +extern uint64_t TEST_CANTX_CalculateStringMaximumTemperature(uint8_t stringNumber, const CAN_SHIM_s *const kpkCanShim); +extern uint64_t TEST_CANTX_CalculateStringMinimumTemperature(uint8_t stringNumber, const CAN_SHIM_s *const kpkCanShim); +extern void TEST_CANTX_BuildStringMessage( + uint64_t *pMessageData, + uint8_t stringNumber, + const CAN_SHIM_s *const kpkCanShim); + +/* externalized functions from src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_string-state-estimation.c */ +extern uint64_t TEST_CANTX_CalculateMinimumStringSoc(uint8_t stringNumber, const CAN_SHIM_s *const kpkCanShim); +extern uint64_t TEST_CANTX_CalculateMaximumStringSoc(uint8_t stringNumber, const CAN_SHIM_s *const kpkCanShim); +extern uint64_t TEST_CANTX_CalculateMinimumStringSoe(uint8_t stringNumber, const CAN_SHIM_s *const kpkCanShim); +extern uint64_t TEST_CANTX_CalculateMaximumStringSoe(uint8_t stringNumber, const CAN_SHIM_s *const kpkCanShim); +extern uint64_t TEST_CANTX_CalculateStringSoh(uint8_t stringNumber, const CAN_SHIM_s *const kpkCanShim); +extern uint64_t TEST_CANTX_CalculateStringEnergy(uint8_t stringNumber, const CAN_SHIM_s *const kpkCanShim); +extern void TEST_CANTX_BuildStringStateEstimationMessage( + uint64_t *pMessageData, + uint8_t stringNumber, + const CAN_SHIM_s *const kpkCanShim); + +/* externalized functions from src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_string-state.c */ +/* no static functions for that translation unit */ + +/* externalized functions from src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_string-values-p0.c */ +extern uint64_t TEST_CANTX_CalculateStringVoltage(uint8_t stringNumber, const CAN_SHIM_s *const kpkCanShim); +extern uint64_t TEST_CANTX_CalculateStringCurrent(uint8_t stringNumber, const CAN_SHIM_s *const kpkCanShim); +extern uint64_t TEST_CANTX_CalculateStringPower(uint8_t stringNumber, const CAN_SHIM_s *const kpkCanShim); +extern void TEST_CANTX_BuildString0Message( + uint64_t *pMessageData, + uint8_t stringNumber, + const CAN_SHIM_s *const kpkCanShim); + +/* externalized functions from src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_string-values-p1.c */ +extern void TEST_CANTX_SetStringP1Mux(uint64_t *pMessageData, uint64_t signalData); +extern void TEST_CANTX_SetStringEnergyCounter( + uint64_t *pMessageData, + uint8_t stringNumber, + const CAN_SHIM_s *const kpkCanShim); + +#endif + +#endif /* FOXBMS__CAN_CBS_TX_CYCLIC_H_ */ diff --git a/src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_pack-limits.c b/src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_pack-limits.c new file mode 100644 index 00000000..6fba14d4 --- /dev/null +++ b/src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_pack-limits.c @@ -0,0 +1,418 @@ +/** + * + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * We kindly request you to use one or more of the following phrases to refer to + * foxBMS in your hardware, software, documentation or advertising materials: + * + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" + * + */ + +/** + * @file can_cbs_tx_pack-limits.c + * @author foxBMS Team + * @date 2021-07-21 (date of creation) + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS + * @prefix CANTX + * + * @brief CAN driver Tx callback implementation + * @details CAN Tx callback for state messages + */ + +/*========== Includes =======================================================*/ +#include "battery_cell_cfg.h" + +/* AXIVION Next Codeline Generic-LocalInclude: 'can_cbs_tx_cyclic.h' declares + * the prototype for the callback 'CANTX_PackLimits' */ +#include "can_cbs_tx_cyclic.h" +#include "can_cfg_tx-cyclic-message-definitions.h" +#include "can_helper.h" +#include "foxmath.h" + +#include +#include + +/*========== Macros and Definitions =========================================*/ +/** @{ + * defines of the maximum discharge current signal +*/ +#define CANTX_SIGNAL_MAXIMUM_DISCHARGE_CURRENT_START_BIT (7u) +#define CANTX_SIGNAL_MAXIMUM_DISCHARGE_CURRENT_LENGTH (12u) +#define CANTX_MINIMUM_VALUE_MAXIMUM_DISCHARGE_CURRENT_SIGNAL (0.0f) +#define CANTX_MAXIMUM_VALUE_MAXIMUM_DISCHARGE_CURRENT_SIGNAL (1023750.0f) +#define CANTX_FACTOR_MAXIMUM_DISCHARGE_CURRENT (250.0f) +/** @} */ + +/** @{ + * configuration of the maximum discharge current signal +*/ +static const CAN_SIGNAL_TYPE_s cantx_signalMaximumDischargeCurrent = { + CANTX_SIGNAL_MAXIMUM_DISCHARGE_CURRENT_START_BIT, + CANTX_SIGNAL_MAXIMUM_DISCHARGE_CURRENT_LENGTH, + CANTX_FACTOR_MAXIMUM_DISCHARGE_CURRENT, + CAN_SIGNAL_OFFSET_0, + CANTX_MINIMUM_VALUE_MAXIMUM_DISCHARGE_CURRENT_SIGNAL, + CANTX_MAXIMUM_VALUE_MAXIMUM_DISCHARGE_CURRENT_SIGNAL}; +/** @} */ + +/** @{ + * defines of the maximum charge current signal +*/ +#define CANTX_SIGNAL_MAXIMUM_CHARGE_CURRENT_START_BIT (11u) +#define CANTX_SIGNAL_MAXIMUM_CHARGE_CURRENT_LENGTH (12u) +#define CANTX_MINIMUM_VALUE_MAXIMUM_CHARGE_CURRENT_SIGNAL (0.0f) +#define CANTX_MAXIMUM_VALUE_MAXIMUM_CHARGE_CURRENT_SIGNAL (1023750.0f) +#define CANTX_FACTOR_MAXIMUM_CHARGE_CURRENT (250.0f) +/** @} */ + +/** @{ + * configuration of the maximum charge current signal +*/ +static const CAN_SIGNAL_TYPE_s cantx_signalMaximumChargeCurrent = { + CANTX_SIGNAL_MAXIMUM_CHARGE_CURRENT_START_BIT, + CANTX_SIGNAL_MAXIMUM_CHARGE_CURRENT_LENGTH, + CANTX_FACTOR_MAXIMUM_CHARGE_CURRENT, + CAN_SIGNAL_OFFSET_0, + CANTX_MINIMUM_VALUE_MAXIMUM_CHARGE_CURRENT_SIGNAL, + CANTX_MAXIMUM_VALUE_MAXIMUM_CHARGE_CURRENT_SIGNAL}; +/** @} */ + +/** @{ + * defines of the maximum discharge power signal +*/ +#define CANTX_SIGNAL_MAXIMUM_DISCHARGE_POWER_START_BIT (31u) +#define CANTX_SIGNAL_MAXIMUM_DISCHARGE_POWER_LENGTH (12u) +#define CANTX_MINIMUM_VALUE_MAXIMUM_DISCHARGE_POWER_SIGNAL (0.0f) +#define CANTX_MAXIMUM_VALUE_MAXIMUM_DISCHARGE_POWER_SIGNAL (409500.0f) +/** @} */ + +/** @{ + * configuration of the maximum discharge power signal +*/ +static const CAN_SIGNAL_TYPE_s cantx_signalMaximumDischargePower = { + CANTX_SIGNAL_MAXIMUM_DISCHARGE_POWER_START_BIT, + CANTX_SIGNAL_MAXIMUM_DISCHARGE_POWER_LENGTH, + UNIT_CONVERSION_FACTOR_100_FLOAT, + CAN_SIGNAL_OFFSET_0, + CANTX_MINIMUM_VALUE_MAXIMUM_DISCHARGE_POWER_SIGNAL, + CANTX_MAXIMUM_VALUE_MAXIMUM_DISCHARGE_POWER_SIGNAL}; +/** @} */ + +/** @{ + * defines of the maximum charge power signal +*/ +#define CANTX_SIGNAL_MAXIMUM_CHARGE_POWER_START_BIT (35u) +#define CANTX_SIGNAL_MAXIMUM_CHARGE_POWER_LENGTH (12u) +#define CANTX_MINIMUM_VALUE_MAXIMUM_CHARGE_POWER_SIGNAL (0.0f) +#define CANTX_MAXIMUM_VALUE_MAXIMUM_CHARGE_POWER_SIGNAL (409500.0f) +/** @} */ + +/** @{ + * configuration of the maximum charge power signal +*/ +static const CAN_SIGNAL_TYPE_s cantx_signalMaximumChargePower = { + CANTX_SIGNAL_MAXIMUM_CHARGE_POWER_START_BIT, + CANTX_SIGNAL_MAXIMUM_CHARGE_POWER_LENGTH, + UNIT_CONVERSION_FACTOR_100_FLOAT, + CAN_SIGNAL_OFFSET_0, + CANTX_MINIMUM_VALUE_MAXIMUM_CHARGE_POWER_SIGNAL, + CANTX_MAXIMUM_VALUE_MAXIMUM_CHARGE_POWER_SIGNAL}; +/** @} */ + +/** @{ + * defines of the maximum battery voltage signal +*/ +#define CANTX_SIGNAL_MAXIMUM_BATTERY_VOLTAGE_START_BIT (55u) +#define CANTX_SIGNAL_MAXIMUM_BATTERY_VOLTAGE_LENGTH (8u) +#define CANTX_MINIMUM_VALUE_MAXIMUM_BATTERY_VOLTAGE_SIGNAL (0.0f) +#define CANTX_MAXIMUM_VALUE_MAXIMUM_BATTERY_VOLTAGE_SIGNAL (1020000.0f) +#define CANTX_FACTOR_MAXIMUM_BATTERY_VOLTAGE (4000.0f) +/** @} */ + +/** @{ + * configuration of the maximum battery voltage signal +*/ +static const CAN_SIGNAL_TYPE_s cantx_signalMaximumBatteryVoltage = { + CANTX_SIGNAL_MAXIMUM_BATTERY_VOLTAGE_START_BIT, + CANTX_SIGNAL_MAXIMUM_BATTERY_VOLTAGE_LENGTH, + CANTX_FACTOR_MAXIMUM_BATTERY_VOLTAGE, + CAN_SIGNAL_OFFSET_0, + CANTX_MINIMUM_VALUE_MAXIMUM_BATTERY_VOLTAGE_SIGNAL, + CANTX_MAXIMUM_VALUE_MAXIMUM_BATTERY_VOLTAGE_SIGNAL}; +/** @} */ + +/** @{ + * defines of the minimum battery voltage signal +*/ +#define CANTX_SIGNAL_MINIMUM_BATTERY_VOLTAGE_START_BIT (63u) +#define CANTX_SIGNAL_MINIMUM_BATTERY_VOLTAGE_LENGTH (8u) +#define CANTX_MINIMUM_VALUE_MINIMUM_BATTERY_VOLTAGE_SIGNAL (0.0f) +#define CANTX_MAXIMUM_VALUE_MINIMUM_BATTERY_VOLTAGE_SIGNAL (1020000.0f) +#define CANTX_FACTOR_MINIMUM_BATTERY_VOLTAGE (4000.0f) +/** @} */ + +/** @{ + * configuration of the minimum battery voltage signal + */ +static const CAN_SIGNAL_TYPE_s cantx_signalMinimumBatteryVoltage = { + CANTX_SIGNAL_MINIMUM_BATTERY_VOLTAGE_START_BIT, + CANTX_SIGNAL_MINIMUM_BATTERY_VOLTAGE_LENGTH, + CANTX_FACTOR_MINIMUM_BATTERY_VOLTAGE, + CAN_SIGNAL_OFFSET_0, + CANTX_MINIMUM_VALUE_MINIMUM_BATTERY_VOLTAGE_SIGNAL, + CANTX_MAXIMUM_VALUE_MINIMUM_BATTERY_VOLTAGE_SIGNAL}; +/** @} */ + +/*========== Static Constant and Variable Definitions =======================*/ +/** + * @brief Calculates the return value of the maximum discharge current + * @param kpkCanShim const pointer to CAN shim + * @return Returns the return value of the maximum discharge current + */ +static uint64_t CANTX_CalculateMaximumDischargeCurrent(const CAN_SHIM_s *const kpkCanShim); + +/** + * @brief Calculates the return value of the maximum charge current + * @param kpkCanShim const pointer to CAN shim + * @return Returns the return value of the maximum charge current + */ +static uint64_t CANTX_CalculateMaximumChargeCurrent(const CAN_SHIM_s *const kpkCanShim); + +/** + * @brief Calculates the return value of the maximum discharge power + * @param kpkCanShim const pointer to CAN shim + * @return Returns the return value of the maximum discharge power + */ +static uint64_t CANTX_CalculateMaximumDischargePower(const CAN_SHIM_s *const kpkCanShim); + +/** + * @brief Calculates the return value of the maximum charge power + * @param kpkCanShim const pointer to CAN shim + * @return Returns the return value of the maximum charge power + */ +static uint64_t CANTX_CalculateMaximumChargePower(const CAN_SHIM_s *const kpkCanShim); + +/** + * @brief Calculates the return value of the minimum battery voltage + * @return Returns the return value of the minimum battery voltage + */ +static uint64_t CANTX_CalculateMinimumBatteryVoltage(void); + +/** + * @brief Calculates the return value of the maximum battery voltage + * @return Returns the return value of the maximum battery voltage + */ +static uint64_t CANTX_CalculateMaximumBatteryVoltage(void); + +/** + * @brief Adds the data to the message + * @param pMessageData message data of the CAN message + * @param kpkCanShim const pointer to CAN shim + */ +static void CANTX_BuildPackLimitsMessage(uint64_t *pMessageData, const CAN_SHIM_s *const kpkCanShim); + +/*========== Extern Constant and Variable Definitions =======================*/ + +/*========== Static Function Prototypes =====================================*/ + +/*========== Static Function Implementations ================================*/ +static uint64_t CANTX_CalculateMaximumDischargeCurrent(const CAN_SHIM_s *const kpkCanShim) { + FAS_ASSERT(kpkCanShim != NULL_PTR); + + /* maximum discharge current */ + float_t signalData = (float_t)kpkCanShim->pTableSof->recommendedContinuousPackDischargeCurrent_mA; + CAN_TxPrepareSignalData(&signalData, cantx_signalMaximumDischargeCurrent); + uint64_t data = (uint64_t)signalData; + return data; +} + +static uint64_t CANTX_CalculateMaximumChargeCurrent(const CAN_SHIM_s *const kpkCanShim) { + FAS_ASSERT(kpkCanShim != NULL_PTR); + + /* maximum charge current */ + float_t signalData = (float_t)kpkCanShim->pTableSof->recommendedContinuousPackChargeCurrent_mA; + CAN_TxPrepareSignalData(&signalData, cantx_signalMaximumChargeCurrent); + uint64_t data = (uint64_t)signalData; + return data; +} + +static uint64_t CANTX_CalculateMaximumDischargePower(const CAN_SHIM_s *const kpkCanShim) { + FAS_ASSERT(kpkCanShim != NULL_PTR); + + /* maximum charge power = discharge_current_A * battery_voltage_V */ + float_t signalData = + ((float_t)kpkCanShim->pTableSof->recommendedContinuousPackDischargeCurrent_mA * + UNIT_CONVERSION_FACTOR_1_1000_TH_FLOAT) * + ((float_t)kpkCanShim->pTablePackValues->batteryVoltage_mV * UNIT_CONVERSION_FACTOR_1_1000_TH_FLOAT); + CAN_TxPrepareSignalData(&signalData, cantx_signalMaximumDischargePower); + uint64_t data = (uint64_t)signalData; + return data; +} + +static uint64_t CANTX_CalculateMaximumChargePower(const CAN_SHIM_s *const kpkCanShim) { + FAS_ASSERT(kpkCanShim != NULL_PTR); + + /* maximum charge power = charge_current_A * battery_voltage_V */ + float_t signalData = + ((float_t)kpkCanShim->pTableSof->recommendedContinuousPackChargeCurrent_mA * + UNIT_CONVERSION_FACTOR_1_1000_TH_FLOAT) * + ((float_t)kpkCanShim->pTablePackValues->batteryVoltage_mV * UNIT_CONVERSION_FACTOR_1_1000_TH_FLOAT); + CAN_TxPrepareSignalData(&signalData, cantx_signalMaximumChargePower); + uint64_t data = (uint64_t)signalData; + return data; +} + +static uint64_t CANTX_CalculateMinimumBatteryVoltage(void) { + /* minimum battery voltage */ + float_t signalData = (float_t)(BS_NR_OF_CELL_BLOCKS_PER_STRING * BC_VOLTAGE_MIN_MSL_mV); + CAN_TxPrepareSignalData(&signalData, cantx_signalMinimumBatteryVoltage); + uint64_t data = (uint64_t)signalData; + return data; +} + +static uint64_t CANTX_CalculateMaximumBatteryVoltage(void) { + /* maximum battery voltage */ + float_t signalData = (float_t)(BS_NR_OF_CELL_BLOCKS_PER_STRING * BC_VOLTAGE_MAX_MSL_mV); + CAN_TxPrepareSignalData(&signalData, cantx_signalMaximumBatteryVoltage); + uint64_t data = (uint64_t)signalData; + return data; +} + +static void CANTX_BuildPackLimitsMessage(uint64_t *pMessageData, const CAN_SHIM_s *const kpkCanShim) { + FAS_ASSERT(pMessageData != NULL_PTR); + FAS_ASSERT(kpkCanShim != NULL_PTR); + + /* Maximum discharge current */ + uint64_t data = CANTX_CalculateMaximumDischargeCurrent(kpkCanShim); + CAN_TxSetMessageDataWithSignalData( + pMessageData, + cantx_signalMaximumDischargeCurrent.bitStart, + cantx_signalMaximumDischargeCurrent.bitLength, + data, + CAN_BIG_ENDIAN); + /* Maximum charge current */ + data = CANTX_CalculateMaximumChargeCurrent(kpkCanShim); + CAN_TxSetMessageDataWithSignalData( + pMessageData, + cantx_signalMaximumChargeCurrent.bitStart, + cantx_signalMaximumChargeCurrent.bitLength, + data, + CAN_BIG_ENDIAN); + /* Maximum discharge power */ + data = CANTX_CalculateMaximumDischargePower(kpkCanShim); + CAN_TxSetMessageDataWithSignalData( + pMessageData, + cantx_signalMaximumDischargePower.bitStart, + cantx_signalMaximumDischargePower.bitLength, + data, + CAN_BIG_ENDIAN); + /* Maximum charge power */ + data = CANTX_CalculateMaximumChargePower(kpkCanShim); + CAN_TxSetMessageDataWithSignalData( + pMessageData, + cantx_signalMaximumChargePower.bitStart, + cantx_signalMaximumChargePower.bitLength, + data, + CAN_BIG_ENDIAN); + /* Minimum battery voltage */ + data = CANTX_CalculateMinimumBatteryVoltage(); + CAN_TxSetMessageDataWithSignalData( + pMessageData, + cantx_signalMinimumBatteryVoltage.bitStart, + cantx_signalMinimumBatteryVoltage.bitLength, + data, + CAN_BIG_ENDIAN); + /* Maximum battery voltage */ + data = CANTX_CalculateMaximumBatteryVoltage(); + CAN_TxSetMessageDataWithSignalData( + pMessageData, + cantx_signalMaximumBatteryVoltage.bitStart, + cantx_signalMaximumBatteryVoltage.bitLength, + data, + CAN_BIG_ENDIAN); +} + +/*========== Extern Function Implementations ================================*/ +extern uint32_t CANTX_PackLimits( + CAN_MESSAGE_PROPERTIES_s message, + uint8_t *pCanData, + uint8_t *pMuxId, + const CAN_SHIM_s *const kpkCanShim) { + /* pMuxId is not used here, therefore has to be NULL_PTR */ + FAS_ASSERT(pMuxId == NULL_PTR); + FAS_ASSERT(message.id == CANTX_PACK_LIMITS_ID); + FAS_ASSERT(message.idType == CANTX_PACK_LIMITS_ID_TYPE); + FAS_ASSERT(message.dlc == CAN_FOXBMS_MESSAGES_DEFAULT_DLC); + FAS_ASSERT(message.endianness == CANTX_PACK_LIMITS_ENDIANNESS); + FAS_ASSERT(pCanData != NULL_PTR); + FAS_ASSERT(kpkCanShim != NULL_PTR); + uint64_t messageData = 0u; + + DATA_READ_DATA(kpkCanShim->pTableSof, can_kShim.pTablePackValues); + + CANTX_BuildPackLimitsMessage(&messageData, kpkCanShim); + + /* now copy data in the buffer that will be used to send data */ + CAN_TxSetCanDataWithMessageData(messageData, pCanData, message.endianness); + + return 0u; +} + +/*========== Externalized Static Function Implementations (Unit Test) =======*/ +#ifdef UNITY_UNIT_TEST +extern uint64_t TEST_CANTX_CalculateMaximumDischargeCurrent(const CAN_SHIM_s *const kpkCanShim) { + return CANTX_CalculateMaximumDischargeCurrent(kpkCanShim); +} +extern uint64_t TEST_CANTX_CalculateMaximumChargeCurrent(const CAN_SHIM_s *const kpkCanShim) { + return CANTX_CalculateMaximumChargeCurrent(kpkCanShim); +} +extern uint64_t TEST_CANTX_CalculateMaximumDischargePower(const CAN_SHIM_s *const kpkCanShim) { + return CANTX_CalculateMaximumDischargePower(kpkCanShim); +} +extern uint64_t TEST_CANTX_CalculateMaximumChargePower(const CAN_SHIM_s *const kpkCanShim) { + return CANTX_CalculateMaximumChargePower(kpkCanShim); +} +extern uint64_t TEST_CANTX_CalculateMinimumBatteryVoltage(void) { + return CANTX_CalculateMinimumBatteryVoltage(); +} +extern uint64_t TEST_CANTX_CalculateMaximumBatteryVoltage(void) { + return CANTX_CalculateMaximumBatteryVoltage(); +} +extern void TEST_CANTX_BuildPackLimitsMessage(uint64_t *pMessageData, const CAN_SHIM_s *const kpkCanShim) { + CANTX_BuildPackLimitsMessage(pMessageData, kpkCanShim); +} + +#endif diff --git a/src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_pack-minimum-maximum-values.c b/src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_pack-minimum-maximum-values.c new file mode 100644 index 00000000..e384ec6e --- /dev/null +++ b/src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_pack-minimum-maximum-values.c @@ -0,0 +1,386 @@ +/** + * + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * We kindly request you to use one or more of the following phrases to refer to + * foxBMS in your hardware, software, documentation or advertising materials: + * + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" + * + */ + +/** + * @file can_cbs_tx_pack-minimum-maximum-values.c + * @author foxBMS Team + * @date 2021-04-20 (date of creation) + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS + * @prefix CANTX + * + * @brief CAN driver Tx callback implementation + * @details CAN Tx callback for min/max values + */ + +/*========== Includes =======================================================*/ +#include "bms.h" +/* AXIVION Next Codeline Generic-LocalInclude: 'can_cbs_tx_cyclic.h' declares + * the prototype for the callback 'CANTX_PackMinimumMaximumValues' */ +#include "can_cbs_tx_cyclic.h" +#include "can_cfg_tx-cyclic-message-definitions.h" +#include "can_helper.h" +#include "foxmath.h" + +#include +#include + +/*========== Macros and Definitions =========================================*/ +/** + * Configuration of the signals + */ +#define CANTX_SIGNAL_MAXIMUM_CELL_VOLTAGE_START_BIT (7u) +#define CANTX_SIGNAL_MAXIMUM_CELL_VOLTAGE_LENGTH (14u) +#define CANTX_SIGNAL_MINIMUM_CELL_VOLTAGE_START_BIT (9u) +#define CANTX_SIGNAL_MINIMUM_CELL_VOLTAGE_LENGTH (14u) +#define CANTX_SIGNAL_COOLING_INLET_TEMPERATURE_START_BIT (39u) +#define CANTX_SIGNAL_COOLING_INLET_TEMPERATURE_LENGTH (8u) +#define CANTX_SIGNAL_COOLING_OUTLET_TEMPERATURE_START_BIT (47u) +#define CANTX_SIGNAL_COOLING_OUTLET_TEMPERATURE_LENGTH (8u) + +/** @{ + * defines of the maximum cell temperature signal +*/ +#define CANTX_SIGNAL_MAXIMUM_CELL_TEMPERATURE_START_BIT (55u) +#define CANTX_SIGNAL_MAXIMUM_CELL_TEMPERATURE_LENGTH (8u) +#define CANTX_MINIMUM_VALUE_MAXIMUM_CELL_TEMPERATURE_SIGNAL (-1280.0f) +#define CANTX_MAXIMUM_VALUE_MAXIMUM_CELL_TEMPERATURE_SIGNAL (1270.0f) +/** @} */ + +/** @{ + * configuration of the maximum cell temperature signal +*/ +static const CAN_SIGNAL_TYPE_s cantx_signalMaximumCellTemperature = { + CANTX_SIGNAL_MAXIMUM_CELL_TEMPERATURE_START_BIT, + CANTX_SIGNAL_MAXIMUM_CELL_TEMPERATURE_LENGTH, + UNIT_CONVERSION_FACTOR_10_FLOAT, + CAN_SIGNAL_OFFSET_0, + CANTX_MINIMUM_VALUE_MAXIMUM_CELL_TEMPERATURE_SIGNAL, + CANTX_MAXIMUM_VALUE_MAXIMUM_CELL_TEMPERATURE_SIGNAL}; +/** @} */ + +/** @{ + * defines of the minimum cell temperature signal +*/ +#define CANTX_SIGNAL_MINIMUM_CELL_TEMPERATURE_START_BIT (63u) +#define CANTX_SIGNAL_MINIMUM_CELL_TEMPERATURE_LENGTH (8u) +#define CANTX_MINIMUM_VALUE_MINIMUM_CELL_TEMPERATURE_SIGNAL (-1280.0f) +#define CANTX_MAXIMUM_VALUE_MINIMUM_CELL_TEMPERATURE_SIGNAL (1270.0f) +/** @} */ + +/** @{ + * configuration of the minimum cell temperature signal +*/ +static const CAN_SIGNAL_TYPE_s cantx_signalMinimumCellTemperature = { + CANTX_SIGNAL_MINIMUM_CELL_TEMPERATURE_START_BIT, + CANTX_SIGNAL_MINIMUM_CELL_TEMPERATURE_LENGTH, + UNIT_CONVERSION_FACTOR_10_FLOAT, + CAN_SIGNAL_OFFSET_0, + CANTX_MINIMUM_VALUE_MINIMUM_CELL_TEMPERATURE_SIGNAL, + CANTX_MAXIMUM_VALUE_MINIMUM_CELL_TEMPERATURE_SIGNAL}; +/** @} */ + +/*========== Static Constant and Variable Definitions =======================*/ + +/*========== Extern Constant and Variable Definitions =======================*/ + +/*========== Static Function Prototypes =====================================*/ +/** + * @brief Gets the value of the maximum pack voltage + * @param kpkCanShim const pointer to CAN shim + * @return Returns the maximum pack voltage from the database + */ +static int16_t CANTX_GetPackMaximumVoltage(const CAN_SHIM_s *const kpkCanShim); + +/** + * @brief Gets the value of the minimum pack voltage + * @param kpkCanShim const pointer to CAN shim + * @return Returns the minimum pack voltage from the database + */ +static int16_t CANTX_GetPackMinimumVoltage(const CAN_SHIM_s *const kpkCanShim); + +/** + * @brief Gets the value of the maximum pack temperature + * @param kpkCanShim const pointer to CAN shim + * @return Returns the maximum pack temperature from the database + */ +static int16_t CANTX_GetPackMaximumTemperature(const CAN_SHIM_s *const kpkCanShim); + +/** + * @brief Gets the value of the minimum pack temperature + * @param kpkCanShim const pointer to CAN shim + * @return Returns the minimum pack temperature from the database + */ +static int16_t CANTX_GetPackMinimumTemperature(const CAN_SHIM_s *const kpkCanShim); + +/** + * @brief Calculates the return value of the maximum pack temperature + * @param kpkCanShim const pointer to CAN shim + * @return Returns the return value of the maximum pack temperature + */ +static uint64_t CANTX_CalculatePackMaximumTemperature(const CAN_SHIM_s *const kpkCanShim); + +/** + * @brief Calculates the return value of the minimum pack temperature + * @param kpkCanShim const pointer to CAN shim + * @return Returns the return value of the minimum pack temperature + */ +static uint64_t CANTX_CalculatePackMinimumTemperature(const CAN_SHIM_s *const kpkCanShim); + +/** + * @brief Adds the data to the message about the pack values + * @param kpkCanShim const pointer to CAN shim + * @param pMessageData message data of the CAN message + */ +static void CANTX_BuildPackMinimumMaximumValuesMessage(const CAN_SHIM_s *const kpkCanShim, uint64_t *pMessageData); + +/*========== Static Function Implementations ================================*/ +static int16_t CANTX_GetPackMaximumVoltage(const CAN_SHIM_s *const kpkCanShim) { + FAS_ASSERT(kpkCanShim != NULL_PTR); + + int16_t packMaximumVoltage_mV = INT16_MIN; + if (0u == BMS_GetNumberOfConnectedStrings()) { + /* Calculate min/max values of complete pack if all slice switches are open */ + for (uint8_t s = 0u; s < BS_NR_OF_STRINGS; s++) { + if (kpkCanShim->pTableMinMax->maximumCellVoltage_mV[s] >= packMaximumVoltage_mV) { + packMaximumVoltage_mV = kpkCanShim->pTableMinMax->maximumCellVoltage_mV[s]; + } + } + } else { + /* Calculate min/max values of connected slices */ + for (uint8_t s = 0u; s < BS_NR_OF_STRINGS; s++) { + if (BMS_IsStringClosed(s) == true) { + if (kpkCanShim->pTableMinMax->maximumCellVoltage_mV[s] >= packMaximumVoltage_mV) { + packMaximumVoltage_mV = kpkCanShim->pTableMinMax->maximumCellVoltage_mV[s]; + } + } + } + } + return packMaximumVoltage_mV; +} + +static int16_t CANTX_GetPackMinimumVoltage(const CAN_SHIM_s *const kpkCanShim) { + FAS_ASSERT(kpkCanShim != NULL_PTR); + + int16_t packMinimumVoltage_mV = INT16_MAX; + if (0u == BMS_GetNumberOfConnectedStrings()) { + /* Calculate min/max values of complete pack if all slice switches are open */ + for (uint8_t s = 0u; s < BS_NR_OF_STRINGS; s++) { + if (kpkCanShim->pTableMinMax->minimumCellVoltage_mV[s] <= packMinimumVoltage_mV) { + packMinimumVoltage_mV = kpkCanShim->pTableMinMax->minimumCellVoltage_mV[s]; + } + } + } else { + /* Calculate min/max values of connected slices */ + for (uint8_t s = 0u; s < BS_NR_OF_STRINGS; s++) { + if (BMS_IsStringClosed(s) == true) { + if (kpkCanShim->pTableMinMax->minimumCellVoltage_mV[s] <= packMinimumVoltage_mV) { + packMinimumVoltage_mV = kpkCanShim->pTableMinMax->minimumCellVoltage_mV[s]; + } + } + } + } + return packMinimumVoltage_mV; +} + +static int16_t CANTX_GetPackMaximumTemperature(const CAN_SHIM_s *const kpkCanShim) { + FAS_ASSERT(kpkCanShim != NULL_PTR); + + int16_t packMaximumTemperature_ddegC = INT16_MIN; + if (0u == BMS_GetNumberOfConnectedStrings()) { + /* Calculate min/max values of complete pack if all slice switches are open */ + for (uint8_t s = 0u; s < BS_NR_OF_STRINGS; s++) { + if (kpkCanShim->pTableMinMax->maximumTemperature_ddegC[s] >= packMaximumTemperature_ddegC) { + packMaximumTemperature_ddegC = kpkCanShim->pTableMinMax->maximumTemperature_ddegC[s]; + } + } + } else { + /* Calculate min/max values of connected slices */ + for (uint8_t s = 0u; s < BS_NR_OF_STRINGS; s++) { + if (BMS_IsStringClosed(s) == true) { + if (kpkCanShim->pTableMinMax->maximumTemperature_ddegC[s] >= packMaximumTemperature_ddegC) { + packMaximumTemperature_ddegC = kpkCanShim->pTableMinMax->maximumTemperature_ddegC[s]; + } + } + } + } + return packMaximumTemperature_ddegC; +} + +static int16_t CANTX_GetPackMinimumTemperature(const CAN_SHIM_s *const kpkCanShim) { + FAS_ASSERT(kpkCanShim != NULL_PTR); + + int16_t packMinimumTemperature_ddegC = INT16_MAX; + if (0u == BMS_GetNumberOfConnectedStrings()) { + /* Calculate min/max values of complete pack if all slice switches are open */ + for (uint8_t s = 0u; s < BS_NR_OF_STRINGS; s++) { + if (kpkCanShim->pTableMinMax->minimumTemperature_ddegC[s] <= packMinimumTemperature_ddegC) { + packMinimumTemperature_ddegC = kpkCanShim->pTableMinMax->minimumTemperature_ddegC[s]; + } + } + } else { + /* Calculate min/max values of connected slices */ + for (uint8_t s = 0u; s < BS_NR_OF_STRINGS; s++) { + if (BMS_IsStringClosed(s) == true) { + if (kpkCanShim->pTableMinMax->minimumTemperature_ddegC[s] <= packMinimumTemperature_ddegC) { + packMinimumTemperature_ddegC = kpkCanShim->pTableMinMax->minimumTemperature_ddegC[s]; + } + } + } + } + return packMinimumTemperature_ddegC; +} + +static uint64_t CANTX_CalculatePackMaximumTemperature(const CAN_SHIM_s *const kpkCanShim) { + FAS_ASSERT(kpkCanShim != NULL_PTR); + + /* Maximum cell temperature */ + float_t signalData = (float_t)CANTX_GetPackMaximumTemperature(kpkCanShim); + CAN_TxPrepareSignalData(&signalData, cantx_signalMaximumCellTemperature); + uint64_t data = (int64_t)signalData; + return data; +} + +static uint64_t CANTX_CalculatePackMinimumTemperature(const CAN_SHIM_s *const kpkCanShim) { + FAS_ASSERT(kpkCanShim != NULL_PTR); + + /* Minimum cell temperature */ + float_t signalData = (float_t)CANTX_GetPackMinimumTemperature(kpkCanShim); + CAN_TxPrepareSignalData(&signalData, cantx_signalMinimumCellTemperature); + uint64_t data = (int64_t)signalData; + return data; +} + +static void CANTX_BuildPackMinimumMaximumValuesMessage(const CAN_SHIM_s *const kpkCanShim, uint64_t *pMessageData) { + FAS_ASSERT(kpkCanShim != NULL_PTR); + FAS_ASSERT(pMessageData != NULL_PTR); + + /* maximum cell voltage */ + uint64_t signalData = (int64_t)CANTX_GetPackMaximumVoltage(kpkCanShim); + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_SIGNAL_MAXIMUM_CELL_VOLTAGE_START_BIT, + CANTX_SIGNAL_MAXIMUM_CELL_VOLTAGE_LENGTH, + signalData, + CAN_BIG_ENDIAN); + /* minimum cell voltage */ + signalData = (int64_t)CANTX_GetPackMinimumVoltage(kpkCanShim); + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_SIGNAL_MINIMUM_CELL_VOLTAGE_START_BIT, + CANTX_SIGNAL_MINIMUM_CELL_VOLTAGE_LENGTH, + signalData, + CAN_BIG_ENDIAN); + + /* TODO: cooling inlet temperature*/ + /* TODO: cooling outlet temperature */ + + /* maximum temperature*/ + signalData = CANTX_CalculatePackMaximumTemperature(kpkCanShim); + CAN_TxSetMessageDataWithSignalData( + pMessageData, + cantx_signalMaximumCellTemperature.bitStart, + cantx_signalMaximumCellTemperature.bitLength, + signalData, + CAN_BIG_ENDIAN); + + /* minimum temperature*/ + signalData = CANTX_CalculatePackMinimumTemperature(kpkCanShim); + CAN_TxSetMessageDataWithSignalData( + pMessageData, + cantx_signalMinimumCellTemperature.bitStart, + cantx_signalMinimumCellTemperature.bitLength, + signalData, + CAN_BIG_ENDIAN); +} + +/*========== Extern Function Implementations ================================*/ +extern uint32_t CANTX_PackMinimumMaximumValues( + CAN_MESSAGE_PROPERTIES_s message, + uint8_t *pCanData, + uint8_t *pMuxId, + const CAN_SHIM_s *const kpkCanShim) { + FAS_ASSERT(message.id == CANTX_PACK_MINIMUM_MAXIMUM_VALUES_ID); + FAS_ASSERT(message.idType == CANTX_PACK_MINIMUM_MAXIMUM_VALUES_ID_TYPE); + FAS_ASSERT(message.dlc == CAN_FOXBMS_MESSAGES_DEFAULT_DLC); + FAS_ASSERT(message.endianness == CANTX_PACK_MINIMUM_MAXIMUM_VALUES_ENDIANNESS); + FAS_ASSERT(pCanData != NULL_PTR); + FAS_ASSERT(pMuxId == NULL_PTR); /* pMuxId is not used here, therefore has to be NULL_PTR */ + FAS_ASSERT(kpkCanShim != NULL_PTR); + uint64_t messageData = 0u; + + DATA_READ_DATA(kpkCanShim->pTableMinMax); + + CANTX_BuildPackMinimumMaximumValuesMessage(kpkCanShim, &messageData); + + /* now copy data in the buffer that will be used to send data */ + CAN_TxSetCanDataWithMessageData(messageData, pCanData, message.endianness); + + return 0u; +} + +/*========== Externalized Static Function Implementations (Unit Test) =======*/ +#ifdef UNITY_UNIT_TEST +extern int16_t TEST_CANTX_GetPackMaximumVoltage(const CAN_SHIM_s *const kpkCanShim) { + return CANTX_GetPackMaximumVoltage(kpkCanShim); +} +extern int16_t TEST_CANTX_GetPackMinimumVoltage(const CAN_SHIM_s *const kpkCanShim) { + return CANTX_GetPackMinimumVoltage(kpkCanShim); +} +extern int16_t TEST_CANTX_GetPackMaximumTemperature(const CAN_SHIM_s *const kpkCanShim) { + return CANTX_GetPackMaximumTemperature(kpkCanShim); +} +extern int16_t TEST_CANTX_GetPackMinimumTemperature(const CAN_SHIM_s *const kpkCanShim) { + return CANTX_GetPackMinimumTemperature(kpkCanShim); +} +extern uint64_t TEST_CANTX_CalculatePackMaximumTemperature(const CAN_SHIM_s *const kpkCanShim) { + return CANTX_CalculatePackMaximumTemperature(kpkCanShim); +} +extern uint64_t TEST_CANTX_CalculatePackMinimumTemperature(const CAN_SHIM_s *const kpkCanShim) { + return CANTX_CalculatePackMinimumTemperature(kpkCanShim); +} +extern void TEST_CANTX_BuildPackMinimumMaximumValuesMessage( + const CAN_SHIM_s *const kpkCanShim, + uint64_t *pMessageData) { + CANTX_BuildPackMinimumMaximumValuesMessage(kpkCanShim, pMessageData); +} +#endif diff --git a/src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_pack-state-estimation.c b/src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_pack-state-estimation.c new file mode 100644 index 00000000..91ee212e --- /dev/null +++ b/src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_pack-state-estimation.c @@ -0,0 +1,480 @@ +/** + * + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * We kindly request you to use one or more of the following phrases to refer to + * foxBMS in your hardware, software, documentation or advertising materials: + * + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" + * + */ + +/** + * @file can_cbs_tx_pack-state-estimation.c + * @author foxBMS Team + * @date 2021-07-21 (date of creation) + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS + * @prefix CANTX + * + * @brief CAN driver Tx callback implementation + * @details CAN Tx callback for state estimation messages + */ + +/*========== Includes =======================================================*/ +#include "bms.h" +/* AXIVION Next Codeline Generic-LocalInclude: 'can_cbs_tx_cyclic.h' declares + * the prototype for the callback 'CANTX_PackStateEstimation' */ +#include "can_cbs_tx_cyclic.h" +#include "can_cfg_tx-cyclic-message-definitions.h" +#include "can_helper.h" +#include "foxmath.h" + +#include +#include +#include + +/*========== Macros and Definitions =========================================*/ +#define CANTX_100_PERCENT_FLOAT (100.0f) + +#define CANTX_SIGNAL_MINIMUM_SOC_START_BIT (7u) +#define CANTX_SIGNAL_MINIMUM_SOC_LENGTH (10u) +#define CANTX_SIGNAL_MAXIMUM_SOC_START_BIT (13u) +#define CANTX_SIGNAL_MAXIMUM_SOC_LENGTH (10u) +#define CANTX_SIGNAL_MINIMUM_SOE_START_BIT (19u) +#define CANTX_SIGNAL_MINIMUM_SOE_LENGTH (10u) +#define CANTX_SIGNAL_MAXIMUM_SOE_START_BIT (25u) +#define CANTX_SIGNAL_MAXIMUM_SOE_LENGTH (10u) +#define CANTX_SIGNAL_SOH_START_BIT (47u) +#define CANTX_SIGNAL_SOH_LENGTH (8u) +#define CANTX_SIGNAL_ENERGY_START_BIT (55u) +#define CANTX_SIGNAL_ENERGY_LENGTH (16u) + +#define CANTX_MINIMUM_VALUE_PERCENT_SIGNALS (0.0f) +#define CANTX_MAXIMUM_VALUE_PERCENT_SIGNALS (102.3f) +#define CANTX_MINIMUM_ENERGY_VALUE (0.0f) +#define CANTX_MAXIMUM_ENERGY_VALUE (6553500.0f) +#define CANTX_FACTOR_SOH (0.5f) +#define CANTX_MAXIMUM_VALUE_SOH_SIGNAL (127.5f) + +/** @{ + * configuration of the minimum soc signal +*/ +static const CAN_SIGNAL_TYPE_s cantx_signalMinimumSoc = { + CANTX_SIGNAL_MINIMUM_SOC_START_BIT, + CANTX_SIGNAL_MINIMUM_SOC_LENGTH, + UNIT_CONVERSION_FACTOR_1_10_TH_FLOAT, + CAN_SIGNAL_OFFSET_0, + CANTX_MINIMUM_VALUE_PERCENT_SIGNALS, + CANTX_MAXIMUM_VALUE_PERCENT_SIGNALS}; +/** @} */ + +/** @{ + * configuration of the maximum soc signal +*/ +static const CAN_SIGNAL_TYPE_s cantx_signalMaximumSoc = { + CANTX_SIGNAL_MAXIMUM_SOC_START_BIT, + CANTX_SIGNAL_MAXIMUM_SOC_LENGTH, + UNIT_CONVERSION_FACTOR_1_10_TH_FLOAT, + CAN_SIGNAL_OFFSET_0, + CANTX_MINIMUM_VALUE_PERCENT_SIGNALS, + CANTX_MAXIMUM_VALUE_PERCENT_SIGNALS}; +/** @} */ + +/** @{ + * configuration of the minimum soe signal +*/ +static const CAN_SIGNAL_TYPE_s cantx_signalMinimumSoe = { + CANTX_SIGNAL_MINIMUM_SOE_START_BIT, + CANTX_SIGNAL_MINIMUM_SOC_LENGTH, + UNIT_CONVERSION_FACTOR_1_10_TH_FLOAT, + CAN_SIGNAL_OFFSET_0, + CANTX_MINIMUM_VALUE_PERCENT_SIGNALS, + CANTX_MAXIMUM_VALUE_PERCENT_SIGNALS}; +/** @} */ + +/** @{ + * configuration of the maximum soe signal +*/ +static const CAN_SIGNAL_TYPE_s cantx_signalMaximumSoe = { + CANTX_SIGNAL_MAXIMUM_SOE_START_BIT, + CANTX_SIGNAL_MAXIMUM_SOE_LENGTH, + UNIT_CONVERSION_FACTOR_1_10_TH_FLOAT, + CAN_SIGNAL_OFFSET_0, + CANTX_MINIMUM_VALUE_PERCENT_SIGNALS, + CANTX_MAXIMUM_VALUE_PERCENT_SIGNALS}; +/** @} */ + +/** @{ + * configuration of the soh signal +*/ +static const CAN_SIGNAL_TYPE_s cantx_signalSoh = { + CANTX_SIGNAL_SOH_START_BIT, + CANTX_SIGNAL_SOH_LENGTH, + CANTX_FACTOR_SOH, + CAN_SIGNAL_OFFSET_0, + CANTX_MINIMUM_VALUE_PERCENT_SIGNALS, + CANTX_MAXIMUM_VALUE_SOH_SIGNAL}; +/** @} */ + +/** @{ + * configuration of the energy signal +*/ +static const CAN_SIGNAL_TYPE_s cantx_signalEnergy = { + CANTX_SIGNAL_ENERGY_START_BIT, + CANTX_SIGNAL_ENERGY_LENGTH, + UNIT_CONVERSION_FACTOR_100_FLOAT, + CAN_SIGNAL_OFFSET_0, + CANTX_MINIMUM_ENERGY_VALUE, + CANTX_MAXIMUM_ENERGY_VALUE}; +/** @} */ + +/*========== Static Constant and Variable Definitions =======================*/ + +/*========== Extern Constant and Variable Definitions =======================*/ + +/*========== Static Function Prototypes =====================================*/ +/** + * @brief Calculates the return value of the maximum SOC + * @return Returns the return value of the maximum SOC + */ +static uint64_t CANTX_CalculateMaximumPackSoc(const CAN_SHIM_s *const kpkCanShim); + +/** + * @brief Gets the highest string SOC percentage from all connected Strings + * @return Returns the highest string SOC percentage from all connected Strings + */ +static float_t CANTX_GetMaximumStringSoc(const CAN_SHIM_s *const kpkCanShim); + +/** + * @brief Calculates the return value of the minimum SOC + * @return Returns the return value of the minimum SOC + */ +static uint64_t CANTX_CalculateMinimumPackSoc(const CAN_SHIM_s *const kpkCanShim); + +/** + * @brief Gets the lowest string SOC percentage from all connected Strings + * @return Returns the lowest string SOC percentage from all connected Strings + */ +static float_t CANTX_GetMinimumStringSoc(const CAN_SHIM_s *const kpkCanShim); + +/** + * @brief Calculates the return value of the maximum SOE + * @return Returns the return value of the maximum SOE + */ +static uint64_t CANTX_CalculateMaximumPackSoe(const CAN_SHIM_s *const kpkCanShim); + +/** + * @brief Gets the highest string SOE percentage from all connected Strings + * @return Returns the highest string SOE percentage from all connected Strings + */ +static float_t CANTX_GetMaximumStringSoe(const CAN_SHIM_s *const kpkCanShim); + +/** + * @brief Calculates the return value of the minimum SOE + * @return Returns the return value of the minimum SOE + */ +static uint64_t CANTX_CalculateMinimumPackSoe(const CAN_SHIM_s *const kpkCanShim); + +/** + * @brief Gets the lowest string SOE percentage from all connected Strings + * @return Returns the lowest string SOE percentage from all connected Strings + */ +static float_t CANTX_GetMinimumStringSoe(const CAN_SHIM_s *const kpkCanShim); + +/** + * @brief Calculates the return value of the SOH + * @return Returns the return value of the SOH + */ +static uint64_t CANTX_CalculatePackSoh(void); + +/** + * @brief Calculates the return value of the stored Energy + * @return Returns the return value of the stored Energy + */ +static uint64_t CANTX_CalculatePackEnergy(const CAN_SHIM_s *const kpkCanShim); + +/** + * @brief Gets the lowest energy value in Wh from all connected Strings + * @return Returns the lowest energy value in Wh from all connected Strings + */ +static float_t CANTX_GetStringEnergy(const CAN_SHIM_s *const kpkCanShim); + +/** + * @brief Builds the CAN message form signal data + */ +static void CANTX_BuildPackStateEstimationMessage(const CAN_SHIM_s *const kpkCanShim, uint64_t *pMessageData); + +/*========== Static Function Implementations ================================*/ +static uint64_t CANTX_CalculateMaximumPackSoc(const CAN_SHIM_s *const kpkCanShim) { + FAS_ASSERT(kpkCanShim != NULL_PTR); + + /* Get maximum SOC percentage of the strings and calculate pack value */ + float_t signalData = 0.0f; + if (BMS_GetNumberOfConnectedStrings() != 0u) { + signalData = ((float_t)BMS_GetNumberOfConnectedStrings() * CANTX_GetMaximumStringSoc(kpkCanShim)) / + (float_t)BS_NR_OF_STRINGS; + } + + CAN_TxPrepareSignalData(&signalData, cantx_signalMaximumSoc); + uint64_t data = (uint64_t)signalData; + return data; +} + +static float_t CANTX_GetMaximumStringSoc(const CAN_SHIM_s *const kpkCanShim) { + FAS_ASSERT(kpkCanShim != NULL_PTR); + + float_t maximumStringSoc_perc = 0.0f; + for (uint8_t s = 0u; s < BS_NR_OF_STRINGS; s++) { + if (BMS_IsStringClosed(s) == true) { + if (maximumStringSoc_perc < kpkCanShim->pTableSoc->maximumSoc_perc[s]) { + maximumStringSoc_perc = kpkCanShim->pTableSoc->maximumSoc_perc[s]; + } + } + } + return maximumStringSoc_perc; +} + +static uint64_t CANTX_CalculateMinimumPackSoc(const CAN_SHIM_s *const kpkCanShim) { + FAS_ASSERT(kpkCanShim != NULL_PTR); + + /* Get minimum SOC percentage of the strings and calculate pack value */ + float_t signalData = 0.0f; + if (BMS_GetNumberOfConnectedStrings() != 0u) { + signalData = (BMS_GetNumberOfConnectedStrings() * CANTX_GetMinimumStringSoc(kpkCanShim)) / BS_NR_OF_STRINGS; + } + + CAN_TxPrepareSignalData(&signalData, cantx_signalMinimumSoc); + uint64_t data = (uint64_t)signalData; + return data; +} + +static float_t CANTX_GetMinimumStringSoc(const CAN_SHIM_s *const kpkCanShim) { + FAS_ASSERT(kpkCanShim != NULL_PTR); + + float_t minimumStringSoc_perc = CANTX_100_PERCENT_FLOAT; + for (uint8_t s = 0u; s < BS_NR_OF_STRINGS; s++) { + if (BMS_IsStringClosed(s) == true) { + if (minimumStringSoc_perc > kpkCanShim->pTableSoc->minimumSoc_perc[s]) { + minimumStringSoc_perc = kpkCanShim->pTableSoc->minimumSoc_perc[s]; + } + } + } + return minimumStringSoc_perc; +} + +static uint64_t CANTX_CalculateMaximumPackSoe(const CAN_SHIM_s *const kpkCanShim) { + FAS_ASSERT(kpkCanShim != NULL_PTR); + + /* Get maximum SOE percentage of the strings and calculate pack value */ + float_t signalData = 0.0f; + if (BMS_GetNumberOfConnectedStrings() != 0u) { + signalData = (BMS_GetNumberOfConnectedStrings() * CANTX_GetMaximumStringSoe(kpkCanShim)) / BS_NR_OF_STRINGS; + } + + CAN_TxPrepareSignalData(&signalData, cantx_signalMaximumSoe); + uint64_t data = (uint64_t)signalData; + return data; +} + +static float_t CANTX_GetMaximumStringSoe(const CAN_SHIM_s *const kpkCanShim) { + FAS_ASSERT(kpkCanShim != NULL_PTR); + + float_t maximumStringSoe_perc = 0.0f; + for (uint8_t s = 0u; s < BS_NR_OF_STRINGS; s++) { + if (BMS_IsStringClosed(s) == true) { + if (maximumStringSoe_perc < kpkCanShim->pTableSoe->maximumSoe_perc[s]) { + maximumStringSoe_perc = kpkCanShim->pTableSoe->maximumSoe_perc[s]; + } + } + } + return maximumStringSoe_perc; +} + +static uint64_t CANTX_CalculateMinimumPackSoe(const CAN_SHIM_s *const kpkCanShim) { + FAS_ASSERT(kpkCanShim != NULL_PTR); + + /* Get minimum SOE percentage of the strings and calculate pack value */ + float_t signalData = 0.0f; + if (BMS_GetNumberOfConnectedStrings() != 0u) { + signalData = (BMS_GetNumberOfConnectedStrings() * CANTX_GetMinimumStringSoe(kpkCanShim)) / BS_NR_OF_STRINGS; + } + + CAN_TxPrepareSignalData(&signalData, cantx_signalMinimumSoe); + uint64_t data = (uint64_t)signalData; + return data; +} + +static float_t CANTX_GetMinimumStringSoe(const CAN_SHIM_s *const kpkCanShim) { + FAS_ASSERT(kpkCanShim != NULL_PTR); + + float_t minimumStringSoe_perc = CANTX_100_PERCENT_FLOAT; + for (uint8_t s = 0u; s < BS_NR_OF_STRINGS; s++) { + if (BMS_IsStringClosed(s) == true) { + if (minimumStringSoe_perc > kpkCanShim->pTableSoe->minimumSoe_perc[s]) { + minimumStringSoe_perc = kpkCanShim->pTableSoe->minimumSoe_perc[s]; + } + } + } + return minimumStringSoe_perc; +} + +static uint64_t CANTX_CalculatePackSoh(void) { + float_t signalData = CANTX_100_PERCENT_FLOAT; /* TODO */ + CAN_TxPrepareSignalData(&signalData, cantx_signalSoh); + uint64_t data = (uint64_t)signalData; + return data; +} + +static uint64_t CANTX_CalculatePackEnergy(const CAN_SHIM_s *const kpkCanShim) { + FAS_ASSERT(kpkCanShim != NULL_PTR); + + /* Get energy in Wh of the strings and calculate pack value */ + float_t signalData = 0.0f; + if (BMS_GetNumberOfConnectedStrings() != 0u) { + signalData = BMS_GetNumberOfConnectedStrings() * CANTX_GetStringEnergy(kpkCanShim); + } + + CAN_TxPrepareSignalData(&signalData, cantx_signalEnergy); + uint64_t data = (uint64_t)signalData; + return data; +} + +static float_t CANTX_GetStringEnergy(const CAN_SHIM_s *const kpkCanShim) { + FAS_ASSERT(kpkCanShim != NULL_PTR); + + float_t minimumStringEnergy_Wh = kpkCanShim->pTableSoe->minimumSoe_Wh[0u]; + for (uint8_t s = 1u; s < BS_NR_OF_STRINGS; s++) { + if (minimumStringEnergy_Wh > kpkCanShim->pTableSoe->minimumSoe_Wh[s]) { + minimumStringEnergy_Wh = kpkCanShim->pTableSoe->minimumSoe_Wh[s]; + } + } + return minimumStringEnergy_Wh; +} + +static void CANTX_BuildPackStateEstimationMessage(const CAN_SHIM_s *const kpkCanShim, uint64_t *pMessageData) { + FAS_ASSERT(kpkCanShim != NULL_PTR); + FAS_ASSERT(pMessageData != NULL_PTR); + + /* minimum SOC */ + uint64_t data = CANTX_CalculateMinimumPackSoc(kpkCanShim); + CAN_TxSetMessageDataWithSignalData( + pMessageData, cantx_signalMinimumSoc.bitStart, cantx_signalMinimumSoc.bitLength, data, CAN_BIG_ENDIAN); + /* maximum SOC */ + data = CANTX_CalculateMaximumPackSoc(kpkCanShim); + CAN_TxSetMessageDataWithSignalData( + pMessageData, cantx_signalMaximumSoc.bitStart, cantx_signalMaximumSoc.bitLength, data, CAN_BIG_ENDIAN); + /* minimum SOE*/ + data = CANTX_CalculateMinimumPackSoe(kpkCanShim); + CAN_TxSetMessageDataWithSignalData( + pMessageData, cantx_signalMinimumSoe.bitStart, cantx_signalMinimumSoe.bitLength, data, CAN_BIG_ENDIAN); + /* maximum SOE */ + data = CANTX_CalculateMaximumPackSoe(kpkCanShim); + CAN_TxSetMessageDataWithSignalData( + pMessageData, cantx_signalMaximumSoe.bitStart, cantx_signalMaximumSoe.bitLength, data, CAN_BIG_ENDIAN); + /* SOH */ + data = CANTX_CalculatePackSoh(); + CAN_TxSetMessageDataWithSignalData( + pMessageData, cantx_signalSoh.bitStart, cantx_signalSoh.bitLength, data, CAN_BIG_ENDIAN); + /* Pack energy */ + data = CANTX_CalculatePackEnergy(kpkCanShim); + CAN_TxSetMessageDataWithSignalData( + pMessageData, cantx_signalEnergy.bitStart, cantx_signalEnergy.bitLength, data, CAN_BIG_ENDIAN); +} + +/*========== Extern Function Implementations ================================*/ +extern uint32_t CANTX_PackStateEstimation( + CAN_MESSAGE_PROPERTIES_s message, + uint8_t *pCanData, + uint8_t *pMuxId, + const CAN_SHIM_s *const kpkCanShim) { + FAS_ASSERT(message.id == CANTX_PACK_STATE_ESTIMATION_ID); + FAS_ASSERT(message.idType == CANTX_PACK_STATE_ESTIMATION_ID_TYPE); + FAS_ASSERT(message.dlc <= CAN_MAX_DLC); + FAS_ASSERT(message.endianness == CANTX_PACK_STATE_ESTIMATION_ENDIANNESS); + FAS_ASSERT(pCanData != NULL_PTR); + FAS_ASSERT(pMuxId == NULL_PTR); /* pMuxId is not used here, therefore has to be NULL_PTR */ + FAS_ASSERT(kpkCanShim != NULL_PTR); + uint64_t messageData = 0u; + + DATA_READ_DATA(kpkCanShim->pTableSoc, kpkCanShim->pTableSoe); + + /* build CAN message */ + CANTX_BuildPackStateEstimationMessage(kpkCanShim, &messageData); + /* now copy data in the buffer that will be used to send data */ + CAN_TxSetCanDataWithMessageData(messageData, pCanData, message.endianness); + + return 0u; +} + +/*========== Externalized Static Function Implementations (Unit Test) =======*/ +#ifdef UNITY_UNIT_TEST +extern uint64_t TEST_CANTX_CalculateMaximumPackSoc(const CAN_SHIM_s *const kpkCanShim) { + return CANTX_CalculateMaximumPackSoc(kpkCanShim); +} +extern float_t TEST_CANTX_GetMaximumStringSoc(const CAN_SHIM_s *const kpkCanShim) { + return CANTX_GetMaximumStringSoc(kpkCanShim); +} +extern uint64_t TEST_CANTX_CalculateMinimumPackSoc(const CAN_SHIM_s *const kpkCanShim) { + return CANTX_CalculateMinimumPackSoc(kpkCanShim); +} +extern float_t TEST_CANTX_GetMinimumStringSoc(const CAN_SHIM_s *const kpkCanShim) { + return CANTX_GetMinimumStringSoc(kpkCanShim); +} +extern uint64_t TEST_CANTX_CalculateMaximumPackSoe(const CAN_SHIM_s *const kpkCanShim) { + return CANTX_CalculateMaximumPackSoe(kpkCanShim); +} +extern float_t TEST_CANTX_GetMaximumStringSoe(const CAN_SHIM_s *const kpkCanShim) { + return CANTX_GetMaximumStringSoe(kpkCanShim); +} +extern uint64_t TEST_CANTX_CalculateMinimumPackSoe(const CAN_SHIM_s *const kpkCanShim) { + return CANTX_CalculateMinimumPackSoe(kpkCanShim); +} +extern float_t TEST_CANTX_GetMinimumStringSoe(const CAN_SHIM_s *const kpkCanShim) { + return CANTX_GetMinimumStringSoe(kpkCanShim); +} +extern uint64_t TEST_CANTX_CalculatePackSoh(void) { + return CANTX_CalculatePackSoh(); +} +extern uint64_t TEST_CANTX_CalculatePackEnergy(const CAN_SHIM_s *const kpkCanShim) { + return CANTX_CalculatePackEnergy(kpkCanShim); +} +extern float_t TEST_CANTX_GetStringEnergy(const CAN_SHIM_s *const kpkCanShim) { + return CANTX_GetStringEnergy(kpkCanShim); +} +extern void TEST_CANTX_BuildPackStateEstimationMessage(const CAN_SHIM_s *const kpkCanShim, uint64_t *pMessageData) { + CANTX_BuildPackStateEstimationMessage(kpkCanShim, pMessageData); +} + +#endif diff --git a/src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_pack-values-p0.c b/src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_pack-values-p0.c new file mode 100644 index 00000000..dfa8bac6 --- /dev/null +++ b/src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_pack-values-p0.c @@ -0,0 +1,303 @@ +/** + * + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * We kindly request you to use one or more of the following phrases to refer to + * foxBMS in your hardware, software, documentation or advertising materials: + * + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" + * + */ + +/** + * @file can_cbs_tx_pack-values-p0.c + * @author foxBMS Team + * @date 2021-07-21 (date of creation) + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS + * @prefix CANTX + * + * @brief CAN driver Tx callback implementation + * @details CAN Tx callback for pack value and string value messages + */ + +/*========== Includes =======================================================*/ +/* AXIVION Next Codeline Generic-LocalInclude: 'can_cbs_tx_cyclic.h' declares + * the prototype for the callback 'CANTX_PackValuesP0' */ +#include "can_cbs_tx_cyclic.h" +#include "can_cfg_tx-cyclic-message-definitions.h" +#include "can_helper.h" +#include "foxmath.h" + +#include +#include + +/*========== Macros and Definitions =========================================*/ +/** @{ + * defines of the battery voltage signal +*/ +#define CANTX_PACK_P0_BATTERY_VOLTAGE_START_BIT (7u) +#define CANTX_PACK_P0_BATTERY_VOLTAGE_LENGTH (15u) +#define CANTX_MINIMUM_VALUE_BATTERY_VOLTAGE_SIGNAL (-1638400.0f) +#define CANTX_MAXIMUM_VALUE_BATTERY_VOLTAGE_SIGNAL (1638300.0f) +/** @} */ + +/** @{ + * configuration of the battery voltage signal +*/ +static const CAN_SIGNAL_TYPE_s cantx_signalBatteryVoltage = { + CANTX_PACK_P0_BATTERY_VOLTAGE_START_BIT, + CANTX_PACK_P0_BATTERY_VOLTAGE_LENGTH, + UNIT_CONVERSION_FACTOR_100_FLOAT, + CAN_SIGNAL_OFFSET_0, + CANTX_MINIMUM_VALUE_BATTERY_VOLTAGE_SIGNAL, + CANTX_MAXIMUM_VALUE_BATTERY_VOLTAGE_SIGNAL}; +/** @} */ + +/** @{ + * defines of the bus voltage signal +*/ +#define CANTX_PACK_P0_BUS_VOLTAGE_START_BIT (8u) +#define CANTX_PACK_P0_BUS_VOLTAGE_LENGTH (15u) +#define CANTX_MINIMUM_VALUE_BUS_VOLTAGE_SIGNAL (-1638400.0f) +#define CANTX_MAXIMUM_VALUE_BUS_VOLTAGE_SIGNAL (1638300.0f) +/** @} */ + +/** @{ + * configuration of the bus voltage signal +*/ +static const CAN_SIGNAL_TYPE_s cantx_signalBusVoltage = { + CANTX_PACK_P0_BUS_VOLTAGE_START_BIT, + CANTX_PACK_P0_BUS_VOLTAGE_LENGTH, + UNIT_CONVERSION_FACTOR_100_FLOAT, + CAN_SIGNAL_OFFSET_0, + CANTX_MINIMUM_VALUE_BUS_VOLTAGE_SIGNAL, + CANTX_MAXIMUM_VALUE_BUS_VOLTAGE_SIGNAL}; +/** @} */ + +/** @{ + * defines of the power signal +*/ +#define CANTX_PACK_P0_POWER_START_BIT (25u) +#define CANTX_PACK_P0_POWER_LENGTH (17u) +#define CANTX_MINIMUM_VALUE_POWER_SIGNAL (-655360.0f) +#define CANTX_MAXIMUM_VALUE_POWER_SIGNAL (655350.0f) +/** @} */ + +/** @{ + * configuration of the power signal +*/ +static const CAN_SIGNAL_TYPE_s cantx_signalPower = { + CANTX_PACK_P0_POWER_START_BIT, + CANTX_PACK_P0_POWER_LENGTH, + UNIT_CONVERSION_FACTOR_10_FLOAT, + CAN_SIGNAL_OFFSET_0, + CANTX_MINIMUM_VALUE_POWER_SIGNAL, + CANTX_MAXIMUM_VALUE_POWER_SIGNAL}; +/** @} */ + +/** @{ + * defines of the current signal +*/ +#define CANTX_PACK_P0_CURRENT_START_BIT (40u) +#define CANTX_PACK_P0_CURRENT_LENGTH (17u) +#define CANTX_MINIMUM_VALUE_CURRENT_SIGNAL (-655360.0f) +#define CANTX_MAXIMUM_VALUE_CURRENT_SIGNAL (655350.0f) +/** @} */ + +/** @{ + * configuration of the current signal +*/ +static const CAN_SIGNAL_TYPE_s cantx_signalCurrent = { + CANTX_PACK_P0_CURRENT_START_BIT, + CANTX_PACK_P0_CURRENT_LENGTH, + UNIT_CONVERSION_FACTOR_10_FLOAT, + CAN_SIGNAL_OFFSET_0, + CANTX_MINIMUM_VALUE_CURRENT_SIGNAL, + CANTX_MAXIMUM_VALUE_CURRENT_SIGNAL}; +/** @} */ + +/*========== Static Constant and Variable Definitions =======================*/ + +/*========== Extern Constant and Variable Definitions =======================*/ + +/*========== Static Function Prototypes =====================================*/ +/** + * @brief calculates the return value of the battery voltage + * @param kpkCanShim const pointer to CAN shim + * @return returns the return value of the battery voltage + */ +static uint64_t CANTX_CalculateBatteryVoltage(const CAN_SHIM_s *const kpkCanShim); + +/** + * @brief calculates the return value of the battery voltage + * @param kpkCanShim const pointer to CAN shim + * @return returns the return value of the battery voltage + */ +static uint64_t CANTX_CalculateBusVoltage(const CAN_SHIM_s *const kpkCanShim); + +/** + * @brief calculates the return value of the battery voltage + * @param kpkCanShim const pointer to CAN shim + * @return returns the return value of the battery voltage + */ +static uint64_t CANTX_CalculatePower(const CAN_SHIM_s *const kpkCanShim); + +/** + * @brief calculates the return value of the battery voltage + * @param kpkCanShim const pointer to CAN shim + * @return returns the return value of the battery voltage + */ +static uint64_t CANTX_CalculateCurrent(const CAN_SHIM_s *const kpkCanShim); + +/** + * @brief builds the PackP0 message + * @param kpkCanShim const pointer to CAN shim + * @param pMessageData message data of the CAN message + */ +static void CANTX_BuildP0Message(const CAN_SHIM_s *const kpkCanShim, uint64_t *pMessageData); + +/*========== Static Function Implementations ================================*/ +static uint64_t CANTX_CalculateBatteryVoltage(const CAN_SHIM_s *const kpkCanShim) { + FAS_ASSERT(kpkCanShim != NULL_PTR); + + /* Battery voltage */ + float_t signalData = kpkCanShim->pTablePackValues->batteryVoltage_mV; + CAN_TxPrepareSignalData(&signalData, cantx_signalBatteryVoltage); + uint64_t data = (uint64_t)signalData; + return data; +} + +static uint64_t CANTX_CalculateBusVoltage(const CAN_SHIM_s *const kpkCanShim) { + FAS_ASSERT(kpkCanShim != NULL_PTR); + + /* Bus voltage */ + float_t signalData = kpkCanShim->pTablePackValues->highVoltageBusVoltage_mV; + CAN_TxPrepareSignalData(&signalData, cantx_signalBusVoltage); + uint64_t data = (uint64_t)signalData; + return data; +} + +static uint64_t CANTX_CalculatePower(const CAN_SHIM_s *const kpkCanShim) { + FAS_ASSERT(kpkCanShim != NULL_PTR); + + /* System power */ + float_t signalData = kpkCanShim->pTablePackValues->packPower_W; + CAN_TxPrepareSignalData(&signalData, cantx_signalPower); + uint64_t data = (int64_t)signalData; + return data; +} + +static uint64_t CANTX_CalculateCurrent(const CAN_SHIM_s *const kpkCanShim) { + FAS_ASSERT(kpkCanShim != NULL_PTR); + + /* System current */ + float_t signalData = kpkCanShim->pTablePackValues->packCurrent_mA; + CAN_TxPrepareSignalData(&signalData, cantx_signalCurrent); + uint64_t data = (int64_t)signalData; + return data; +} + +static void CANTX_BuildP0Message(const CAN_SHIM_s *const kpkCanShim, uint64_t *pMessageData) { + FAS_ASSERT(kpkCanShim != NULL_PTR); + FAS_ASSERT(pMessageData != NULL_PTR); + + /* Battery voltage */ + uint64_t data = CANTX_CalculateBatteryVoltage(kpkCanShim); + CAN_TxSetMessageDataWithSignalData( + pMessageData, cantx_signalBatteryVoltage.bitStart, cantx_signalBatteryVoltage.bitLength, data, CAN_BIG_ENDIAN); + + /* Bus voltage */ + data = CANTX_CalculateBusVoltage(kpkCanShim); + CAN_TxSetMessageDataWithSignalData( + pMessageData, cantx_signalBusVoltage.bitStart, cantx_signalBusVoltage.bitLength, data, CAN_BIG_ENDIAN); + + /* System Power */ + data = CANTX_CalculatePower(kpkCanShim); + CAN_TxSetMessageDataWithSignalData( + pMessageData, cantx_signalPower.bitStart, cantx_signalPower.bitLength, data, CAN_BIG_ENDIAN); + + /* System current */ + data = CANTX_CalculateCurrent(kpkCanShim); + CAN_TxSetMessageDataWithSignalData( + pMessageData, cantx_signalCurrent.bitStart, cantx_signalCurrent.bitLength, data, CAN_BIG_ENDIAN); +} + +/*========== Extern Function Implementations ================================*/ +extern uint32_t CANTX_PackValuesP0( + CAN_MESSAGE_PROPERTIES_s message, + uint8_t *pCanData, + uint8_t *pMuxId, + const CAN_SHIM_s *const kpkCanShim) { + /* pMuxId is not used here, therefore has to be NULL_PTR */ + FAS_ASSERT(pMuxId == NULL_PTR); + + FAS_ASSERT(message.id == CANTX_PACK_VALUES_P0_ID); + FAS_ASSERT(message.idType == CANTX_PACK_VALUES_P0_ID_TYPE); + FAS_ASSERT(message.dlc == CAN_FOXBMS_MESSAGES_DEFAULT_DLC); + FAS_ASSERT(message.endianness == CAN_BIG_ENDIAN); + FAS_ASSERT(pCanData != NULL_PTR); + FAS_ASSERT(kpkCanShim != NULL_PTR); + uint64_t messageData = 0u; + + /* Read database entry */ + DATA_READ_DATA(kpkCanShim->pTablePackValues); + + /* build message from data */ + CANTX_BuildP0Message(kpkCanShim, &messageData); + + /* now copy data in the buffer that will be used to send data */ + CAN_TxSetCanDataWithMessageData(messageData, pCanData, message.endianness); + + return 0u; +} + +/*========== Externalized Static Function Implementations (Unit Test) =======*/ +#ifdef UNITY_UNIT_TEST +extern uint64_t TEST_CANTX_CalculateBatteryVoltage(const CAN_SHIM_s *const kpkCanShim) { + return CANTX_CalculateBatteryVoltage(kpkCanShim); +} +extern uint64_t TEST_CANTX_CalculateBusVoltage(const CAN_SHIM_s *const kpkCanShim) { + return CANTX_CalculateBusVoltage(kpkCanShim); +} +extern uint64_t TEST_CANTX_CalculatePower(const CAN_SHIM_s *const kpkCanShim) { + return CANTX_CalculatePower(kpkCanShim); +} +extern uint64_t TEST_CANTX_CalculateCurrent(const CAN_SHIM_s *const kpkCanShim) { + return CANTX_CalculateCurrent(kpkCanShim); +} +extern void TEST_CANTX_BuildP0Message(const CAN_SHIM_s *const kpkCanShim, uint64_t *pMessageData) { + CANTX_BuildP0Message(kpkCanShim, pMessageData); +} +#endif diff --git a/src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_pack-values-p1.c b/src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_pack-values-p1.c new file mode 100644 index 00000000..3dd7233f --- /dev/null +++ b/src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_pack-values-p1.c @@ -0,0 +1,169 @@ +/** + * + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * We kindly request you to use one or more of the following phrases to refer to + * foxBMS in your hardware, software, documentation or advertising materials: + * + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" + * + */ + +/** + * @file can_cbs_tx_pack-values-p1.c + * @author foxBMS Team + * @date 2023-05-31 (date of creation) + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS + * @prefix CANTX + * + * @brief CAN driver Tx callback implementation + * @details CAN Tx callback for pack value and string value messages + */ + +/*========== Includes =======================================================*/ +#include "can_cbs_tx_cyclic.h" +#include "can_cfg_tx-cyclic-message-definitions.h" +#include "can_helper.h" +#include "foxmath.h" + +#include +#include + +/*========== Macros and Definitions =========================================*/ +/** @{ + * defines of the insulation resistance signal +*/ +#define CANTX_PACK_P1_INSULATION_RESISTANCE_START_BIT (7u) +#define CANTX_PACK_P1_INSULATION_RESISTANCE_LENGTH (13u) +#define CANTX_MINIMUM_VALUE_INSULATION_RESISTANCE_SIGNAL (0.0f) +#define CANTX_MAXIMUM_VALUE_INSULATION_RESISTANCE_SIGNAL (57337.0f) +#define CANTX_FACTOR_INSULATION_RESISTANCE (7.0f) +/** @} */ + +/** @{ + * configuration of the insulation resistance signal +*/ +static const CAN_SIGNAL_TYPE_s cantx_insulationResistance = { + CANTX_PACK_P1_INSULATION_RESISTANCE_START_BIT, + CANTX_PACK_P1_INSULATION_RESISTANCE_LENGTH, + CANTX_FACTOR_INSULATION_RESISTANCE, + CAN_SIGNAL_OFFSET_0, + CANTX_MINIMUM_VALUE_INSULATION_RESISTANCE_SIGNAL, + CANTX_MAXIMUM_VALUE_INSULATION_RESISTANCE_SIGNAL}; +/** @} */ + +/*========== Static Constant and Variable Definitions =======================*/ + +/*========== Extern Constant and Variable Definitions =======================*/ + +/*========== Static Function Prototypes =====================================*/ + +/** + * @brief reads the insulation resistance from the database and calculates the return values + * @param kpkCanShim can shim with database information + * @return insulation resistance value + */ +static uint64_t CANTX_GetInsulationResistance(const CAN_SHIM_s *const kpkCanShim); + +/** + * @brief sets the message data with signal data of insulation resistance + * @param pMessageData message data of the CAN message + * @param kpkCanShim can shim with database information + */ +static void CANTX_SetInsulationResistance(uint64_t *pMessageData, const CAN_SHIM_s *const kpkCanShim); + +/*========== Static Function Implementations ================================*/ +static uint64_t CANTX_GetInsulationResistance(const CAN_SHIM_s *const kpkCanShim) { + FAS_ASSERT(kpkCanShim != NULL_PTR); + + /* insulation resistance */ + float_t signalData = (float_t)kpkCanShim->pTableInsulation->insulationResistance_kOhm; + CAN_TxPrepareSignalData(&signalData, cantx_insulationResistance); + uint64_t data = (uint64_t)signalData; + return data; +} + +static void CANTX_SetInsulationResistance(uint64_t *pMessageData, const CAN_SHIM_s *const kpkCanShim) { + FAS_ASSERT(pMessageData != NULL_PTR); + FAS_ASSERT(kpkCanShim != NULL_PTR); + + uint64_t signalData = CANTX_GetInsulationResistance(kpkCanShim); + CAN_TxSetMessageDataWithSignalData( + pMessageData, + cantx_insulationResistance.bitStart, + cantx_insulationResistance.bitLength, + signalData, + CAN_BIG_ENDIAN); +} + +/*========== Extern Function Implementations ================================*/ +extern uint32_t CANTX_PackValuesP1( + CAN_MESSAGE_PROPERTIES_s message, + uint8_t *pCanData, + uint8_t *pMuxId, + const CAN_SHIM_s *const kpkCanShim) { + /* pMuxId is not used here, therefore has to be NULL_PTR */ + FAS_ASSERT(pMuxId == NULL_PTR); + FAS_ASSERT(message.id == CANTX_PACK_VALUES_P1_ID); + FAS_ASSERT(message.idType == CANTX_PACK_VALUES_P1_ID_TYPE); + FAS_ASSERT(message.dlc == CAN_FOXBMS_MESSAGES_DEFAULT_DLC); + FAS_ASSERT(message.endianness == CANTX_PACK_VALUES_P1_ENDIANNESS); + FAS_ASSERT(pCanData != NULL_PTR); + FAS_ASSERT(kpkCanShim != NULL_PTR); + uint64_t messageData = 0u; + + /* read database entry */ + DATA_READ_DATA(kpkCanShim->pTableInsulation); + + /* build message from data */ + CANTX_SetInsulationResistance(&messageData, kpkCanShim); + + /* now copy data in the buffer that will be used to send data */ + CAN_TxSetCanDataWithMessageData(messageData, pCanData, CAN_BIG_ENDIAN); + + return 0u; +} + +/*========== Externalized Static Function Implementations (Unit Test) =======*/ +#ifdef UNITY_UNIT_TEST +extern void TEST_CANTX_SetInsulationResistance(uint64_t *pMessageData, const CAN_SHIM_s *const kpkCanShim) { + CANTX_SetInsulationResistance(pMessageData, kpkCanShim); +} + +extern uint64_t TEST_CANTX_GetInsulationResistance(const CAN_SHIM_s *const kpkCanShim) { + return CANTX_GetInsulationResistance(kpkCanShim); +} + +#endif diff --git a/src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_string-minimum-maximum-values.c b/src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_string-minimum-maximum-values.c new file mode 100644 index 00000000..8ea35698 --- /dev/null +++ b/src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_string-minimum-maximum-values.c @@ -0,0 +1,263 @@ +/** + * + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * We kindly request you to use one or more of the following phrases to refer to + * foxBMS in your hardware, software, documentation or advertising materials: + * + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" + * + */ + +/** + * @file can_cbs_tx_string-minimum-maximum-values.c + * @author foxBMS Team + * @date 2021-04-20 (date of creation) + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS + * @prefix CANTX + * + * @brief CAN driver Tx callback implementation + * @details CAN Tx callback for min/max values + */ + +/*========== Includes =======================================================*/ +#include "bms.h" +#include "can_cbs_tx_cyclic.h" +#include "can_cfg_tx-cyclic-message-definitions.h" +#include "can_helper.h" +#include "foxmath.h" + +#include +#include + +/*========== Macros and Definitions =========================================*/ +/** + * Configuration of the signals + */ +#define CANTX_STRING_MUX_START_BIT (3u) +#define CANTX_STRING_MUX_LENGTH (4u) +#define CANTX_SIGNAL_STRING_MAXIMUM_CELL_VOLTAGE_START_BIT (15u) +#define CANTX_SIGNAL_STRING_MAXIMUM_CELL_VOLTAGE_LENGTH (14u) +#define CANTX_SIGNAL_STRING_MINIMUM_CELL_VOLTAGE_START_BIT (17u) +#define CANTX_SIGNAL_STRING_MINIMUM_CELL_VOLTAGE_LENGTH (14u) + +/** @{ + * defines of the maximum cell temperature signal +*/ +#define CANTX_SIGNAL_STRING_MAXIMUM_CELL_TEMPERATURE_START_BIT (35u) +#define CANTX_SIGNAL_STRING_MAXIMUM_CELL_TEMPERATURE_LENGTH (9u) +#define CANTX_MINIMUM_VALUE_MAXIMUM_CELL_TEMPERATURE_SIGNAL (-1280.0f) +#define CANTX_MAXIMUM_VALUE_MAXIMUM_CELL_TEMPERATURE_SIGNAL (1275.0f) +#define CANTX_FACTOR_MAXIMUM_CELL_TEMPERATURE (5.0f) +/** @} */ + +/** @{ + * configuration of the maximum cell temperature signal +*/ +static const CAN_SIGNAL_TYPE_s cantx_signalMaximumStringCellTemperature = { + CANTX_SIGNAL_STRING_MAXIMUM_CELL_TEMPERATURE_START_BIT, + CANTX_SIGNAL_STRING_MAXIMUM_CELL_TEMPERATURE_LENGTH, + CANTX_FACTOR_MAXIMUM_CELL_TEMPERATURE, + CAN_SIGNAL_OFFSET_0, + CANTX_MINIMUM_VALUE_MAXIMUM_CELL_TEMPERATURE_SIGNAL, + CANTX_MAXIMUM_VALUE_MAXIMUM_CELL_TEMPERATURE_SIGNAL}; +/** @} */ + +/** @{ + * defines of the minimum string cell temperature signal +*/ +#define CANTX_SIGNAL_STRING_MINIMUM_CELL_TEMPERATURE_START_BIT (42u) +#define CANTX_SIGNAL_STRING_MINIMUM_CELL_TEMPERATURE_LENGTH (9u) +#define CANTX_MINIMUM_VALUE_MINIMUM_CELL_TEMPERATURE_SIGNAL (-1280.0f) +#define CANTX_MAXIMUM_VALUE_MINIMUM_CELL_TEMPERATURE_SIGNAL (1275.0f) +#define CANTX_FACTOR_MINIMUM_CELL_TEMPERATURE (5.0f) +/** @} */ + +/** @{ + * configuration of the minimum string cell temperature signal +*/ +static const CAN_SIGNAL_TYPE_s cantx_signalMinimumStringCellTemperature = { + CANTX_SIGNAL_STRING_MINIMUM_CELL_TEMPERATURE_START_BIT, + CANTX_SIGNAL_STRING_MINIMUM_CELL_TEMPERATURE_LENGTH, + CANTX_FACTOR_MINIMUM_CELL_TEMPERATURE, + CAN_SIGNAL_OFFSET_0, + CANTX_MINIMUM_VALUE_MINIMUM_CELL_TEMPERATURE_SIGNAL, + CANTX_MAXIMUM_VALUE_MINIMUM_CELL_TEMPERATURE_SIGNAL}; +/** @} */ + +/*========== Static Constant and Variable Definitions =======================*/ + +/*========== Extern Constant and Variable Definitions =======================*/ + +/*========== Static Function Prototypes =====================================*/ +/** + * @brief Calculates the return value of the maximum string temperature + * @return Returns the return value of the maximum string temperature + */ +static uint64_t CANTX_CalculateStringMaximumTemperature(uint8_t stringNumber, const CAN_SHIM_s *const kpkCanShim); + +/** + * @brief Calculates the return value of the minimum string temperature + * @return Returns the return value of the minimum string temperature + */ +static uint64_t CANTX_CalculateStringMinimumTemperature(uint8_t stringNumber, const CAN_SHIM_s *const kpkCanShim); + +/** + * @brief Adds the data to the message about the string values + */ +static void CANTX_BuildStringMessage(uint64_t *pMessageData, uint8_t stringNumber, const CAN_SHIM_s *const kpkCanShim); + +/*========== Static Function Implementations ================================*/ +static uint64_t CANTX_CalculateStringMaximumTemperature(uint8_t stringNumber, const CAN_SHIM_s *const kpkCanShim) { + FAS_ASSERT(stringNumber < BS_NR_OF_STRINGS); + FAS_ASSERT(kpkCanShim != NULL_PTR); + + /* Maximum cell temperature */ + float_t signalData = (float_t)kpkCanShim->pTableMinMax->maximumTemperature_ddegC[stringNumber]; + CAN_TxPrepareSignalData(&signalData, cantx_signalMaximumStringCellTemperature); + uint64_t data = (int64_t)signalData; + return data; +} + +static uint64_t CANTX_CalculateStringMinimumTemperature(uint8_t stringNumber, const CAN_SHIM_s *const kpkCanShim) { + FAS_ASSERT(stringNumber < BS_NR_OF_STRINGS); + FAS_ASSERT(kpkCanShim != NULL_PTR); + + /* Minimum cell temperature */ + float_t signalData = (float_t)kpkCanShim->pTableMinMax->minimumTemperature_ddegC[stringNumber]; + CAN_TxPrepareSignalData(&signalData, cantx_signalMinimumStringCellTemperature); + uint64_t data = (int64_t)signalData; + return data; +} + +static void CANTX_BuildStringMessage(uint64_t *pMessageData, uint8_t stringNumber, const CAN_SHIM_s *const kpkCanShim) { + FAS_ASSERT(pMessageData != NULL_PTR); + FAS_ASSERT(stringNumber < BS_NR_OF_STRINGS); + FAS_ASSERT(kpkCanShim != NULL_PTR); + + /* set data in CAN frame */ + CAN_TxSetMessageDataWithSignalData( + pMessageData, CANTX_STRING_MUX_START_BIT, CANTX_STRING_MUX_LENGTH, (uint64_t)stringNumber, CAN_BIG_ENDIAN); + + /* maximum cell voltage */ + uint64_t signalData = (uint64_t)kpkCanShim->pTableMinMax->maximumCellVoltage_mV[stringNumber]; + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_SIGNAL_STRING_MAXIMUM_CELL_VOLTAGE_START_BIT, + CANTX_SIGNAL_STRING_MAXIMUM_CELL_VOLTAGE_LENGTH, + signalData, + CAN_BIG_ENDIAN); + + /* minimum cell voltage */ + signalData = (uint64_t)kpkCanShim->pTableMinMax->minimumCellVoltage_mV[stringNumber]; + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_SIGNAL_STRING_MINIMUM_CELL_VOLTAGE_START_BIT, + CANTX_SIGNAL_STRING_MINIMUM_CELL_VOLTAGE_LENGTH, + signalData, + CAN_BIG_ENDIAN); + + /* maximum temperature */ + signalData = CANTX_CalculateStringMaximumTemperature(stringNumber, kpkCanShim); + CAN_TxSetMessageDataWithSignalData( + pMessageData, + cantx_signalMaximumStringCellTemperature.bitStart, + cantx_signalMaximumStringCellTemperature.bitLength, + signalData, + CAN_BIG_ENDIAN); + + /* minimum temperature */ + signalData = CANTX_CalculateStringMinimumTemperature(stringNumber, kpkCanShim); + CAN_TxSetMessageDataWithSignalData( + pMessageData, + cantx_signalMinimumStringCellTemperature.bitStart, + cantx_signalMinimumStringCellTemperature.bitLength, + signalData, + CAN_BIG_ENDIAN); +} + +/*========== Extern Function Implementations ================================*/ +extern uint32_t CANTX_StringMinimumMaximumValues( + CAN_MESSAGE_PROPERTIES_s message, + uint8_t *pCanData, + uint8_t *pMuxId, + const CAN_SHIM_s *const kpkCanShim) { + FAS_ASSERT(message.id == CANTX_STRING_MINIMUM_MAXIMUM_VALUES_ID); + FAS_ASSERT(message.idType == CANTX_STRING_MINIMUM_MAXIMUM_VALUES_ID_TYPE); + FAS_ASSERT(message.dlc == CAN_FOXBMS_MESSAGES_DEFAULT_DLC); + FAS_ASSERT(message.endianness == CANTX_STRING_MINIMUM_MAXIMUM_VALUES_ENDIANNESS); + FAS_ASSERT(pCanData != NULL_PTR); + FAS_ASSERT(pMuxId != NULL_PTR); + FAS_ASSERT(*pMuxId < BS_NR_OF_STRINGS); + FAS_ASSERT(kpkCanShim != NULL_PTR); + uint64_t messageData = 0u; + + /** Database entry with minimum and maximum values does not need to be read + * within this callback as it is already read by function + * #CANTX_StringMinimumMaximumValues */ + const uint8_t stringNumber = *pMuxId; + + /* adding data to the message */ + CANTX_BuildStringMessage(&messageData, stringNumber, kpkCanShim); + + /* now copy data in the buffer that will be use to send data */ + CAN_TxSetCanDataWithMessageData(messageData, pCanData, message.endianness); + + /* Increment multiplexer for next cell */ + (*pMuxId)++; + + /* Check mux value */ + if (*pMuxId >= BS_NR_OF_STRINGS) { + *pMuxId = 0u; + } + + return 0u; +} + +/*========== Externalized Static Function Implementations (Unit Test) =======*/ +#ifdef UNITY_UNIT_TEST +extern uint64_t TEST_CANTX_CalculateStringMaximumTemperature(uint8_t stringNumber, const CAN_SHIM_s *const kpkCanShim) { + return CANTX_CalculateStringMaximumTemperature(stringNumber, kpkCanShim); +} +extern uint64_t TEST_CANTX_CalculateStringMinimumTemperature(uint8_t stringNumber, const CAN_SHIM_s *const kpkCanShim) { + return CANTX_CalculateStringMinimumTemperature(stringNumber, kpkCanShim); +} +extern void TEST_CANTX_BuildStringMessage( + uint64_t *pMessageData, + uint8_t stringNumber, + const CAN_SHIM_s *const kpkCanShim) { + CANTX_BuildStringMessage(pMessageData, stringNumber, kpkCanShim); +} +#endif diff --git a/src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_string-state-estimation.c b/src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_string-state-estimation.c new file mode 100644 index 00000000..f0f86ca5 --- /dev/null +++ b/src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_string-state-estimation.c @@ -0,0 +1,441 @@ +/** + * + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * We kindly request you to use one or more of the following phrases to refer to + * foxBMS in your hardware, software, documentation or advertising materials: + * + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" + * + */ + +/** + * @file can_cbs_tx_string-state-estimation.c + * @author foxBMS Team + * @date 2021-07-21 (date of creation) + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS + * @prefix CANTX + * + * @brief CAN driver Tx callback implementation + * @details CAN Tx callback for state estimation messages + */ + +/*========== Includes =======================================================*/ +#include "bms.h" +#include "can_cbs_tx_cyclic.h" +#include "can_cfg_tx-cyclic-message-definitions.h" +#include "can_helper.h" +#include "foxmath.h" + +#include +#include + +/*========== Macros and Definitions =========================================*/ +#define CANTX_STRING_MUX_START_BIT (7u) +#define CANTX_SIGNAL_STRING_MUX_LENGTH (4u) + +/** @{ + * defines of the minimum soc signal +*/ +#define CANTX_SIGNAL_MINIMUM_SOC_START_BIT (3u) +#define CANTX_SIGNAL_MINIMUM_SOC_LENGTH (9u) +#define CANTX_MINIMUM_VALUE_MINIMUM_SOC_SIGNAL (0.0f) +#define CANTX_MAXIMUM_VALUE_MINIMUM_SOC_SIGNAL (100.0f) +#define CANTX_FACTOR_MINIMUM_SOC (0.2f) +/** @} */ + +/** @{ + * configuration of the minimum soc signal +*/ +static const CAN_SIGNAL_TYPE_s cantx_signalMinimumStringSoc = { + CANTX_SIGNAL_MINIMUM_SOC_START_BIT, + CANTX_SIGNAL_MINIMUM_SOC_LENGTH, + CANTX_FACTOR_MINIMUM_SOC, + CAN_SIGNAL_OFFSET_0, + CANTX_MINIMUM_VALUE_MINIMUM_SOC_SIGNAL, + CANTX_MAXIMUM_VALUE_MINIMUM_SOC_SIGNAL}; +/** @} */ + +/** @{ + * defines of the maximum soc signal +*/ +#define CANTX_SIGNAL_MAXIMUM_SOC_START_BIT (10u) +#define CANTX_SIGNAL_MAXIMUM_SOC_LENGTH (9u) +#define CANTX_MINIMUM_VALUE_MAXIMUM_SOC_SIGNAL (0.0f) +#define CANTX_MAXIMUM_VALUE_MAXIMUM_SOC_SIGNAL (100.0f) +#define CANTX_FACTOR_MAXIMUM_SOC (0.2f) +/** @} */ + +/** @{ + * configuration of the maximum soc signal +*/ +static const CAN_SIGNAL_TYPE_s cantx_signalMaximumStringSoc = { + CANTX_SIGNAL_MAXIMUM_SOC_START_BIT, + CANTX_SIGNAL_MAXIMUM_SOC_LENGTH, + CANTX_FACTOR_MAXIMUM_SOC, + CAN_SIGNAL_OFFSET_0, + CANTX_MINIMUM_VALUE_MAXIMUM_SOC_SIGNAL, + CANTX_MAXIMUM_VALUE_MAXIMUM_SOC_SIGNAL}; +/** @} */ + +/** @{ + * defines of the minimum soe signal +*/ +#define CANTX_SIGNAL_MINIMUM_SOE_START_BIT (17u) +#define CANTX_SIGNAL_MINIMUM_SOE_LENGTH (9u) +#define CANTX_MINIMUM_VALUE_MINIMUM_SOE_SIGNAL (0.0f) +#define CANTX_MAXIMUM_VALUE_MINIMUM_SOE_SIGNAL (100.0f) +#define CANTX_FACTOR_MINIMUM_SOE (0.2f) +/** @} */ + +/** @{ + * configuration of the minimum soe signal +*/ +static const CAN_SIGNAL_TYPE_s cantx_signalMinimumStringSoe = { + CANTX_SIGNAL_MINIMUM_SOE_START_BIT, + CANTX_SIGNAL_MINIMUM_SOE_LENGTH, + CANTX_FACTOR_MINIMUM_SOE, + CAN_SIGNAL_OFFSET_0, + CANTX_MINIMUM_VALUE_MINIMUM_SOE_SIGNAL, + CANTX_MAXIMUM_VALUE_MINIMUM_SOE_SIGNAL}; +/** @} */ + +/** @{ + * defines of the maximum soe signal +*/ +#define CANTX_SIGNAL_MAXIMUM_SOE_START_BIT (24u) +#define CANTX_SIGNAL_MAXIMUM_SOE_LENGTH (9u) +#define CANTX_MINIMUM_VALUE_MAXIMUM_SOE_SIGNAL (0.0f) +#define CANTX_MAXIMUM_VALUE_MAXIMUM_SOE_SIGNAL (100.0f) +#define CANTX_FACTOR_MAXIMUM_SOE (0.2f) +/** @} */ + +/** @{ + * configuration of the maximum soe signal +*/ +static const CAN_SIGNAL_TYPE_s cantx_signalMaximumStringSoe = { + CANTX_SIGNAL_MAXIMUM_SOE_START_BIT, + CANTX_SIGNAL_MAXIMUM_SOE_LENGTH, + CANTX_FACTOR_MAXIMUM_SOE, + CAN_SIGNAL_OFFSET_0, + CANTX_MINIMUM_VALUE_MAXIMUM_SOE_SIGNAL, + CANTX_MAXIMUM_VALUE_MAXIMUM_SOE_SIGNAL}; +/** @} */ + +/** @{ + * defines of the soh signal +*/ +#define CANTX_SIGNAL_SOH_START_BIT (47u) +#define CANTX_SIGNAL_SOH_LENGTH (9u) +#define CANTX_MINIMUM_VALUE_SOH_SIGNAL (0.0f) +#define CANTX_MAXIMUM_VALUE_SOH_SIGNAL (100.0f) +#define CANTX_FACTOR_SOH (0.2f) +/** @} */ + +/** @{ + * configuration of the soh signal +*/ +static const CAN_SIGNAL_TYPE_s cantx_signalStringSoh = { + CANTX_SIGNAL_SOH_START_BIT, + CANTX_SIGNAL_SOH_LENGTH, + CANTX_FACTOR_SOH, + CAN_SIGNAL_OFFSET_0, + CANTX_MINIMUM_VALUE_SOH_SIGNAL, + CANTX_MAXIMUM_VALUE_SOH_SIGNAL}; +/** @} */ + +/** @{ + * defines of the energy signal +*/ +#define CANTX_SIGNAL_ENERGY_START_BIT (54u) +#define CANTX_SIGNAL_ENERGY_LENGTH (15u) +#define CANTX_MINIMUM_VALUE_ENERGY_SIGNAL (0.0f) +#define CANTX_MAXIMUM_VALUE_ENERGY_SIGNAL (327670.0f) +/** @} */ + +/** @{ + * configuration of the energy signal +*/ +static const CAN_SIGNAL_TYPE_s cantx_signalStringEnergy = { + CANTX_SIGNAL_ENERGY_START_BIT, + CANTX_SIGNAL_ENERGY_LENGTH, + UNIT_CONVERSION_FACTOR_10_FLOAT, + CAN_SIGNAL_OFFSET_0, + CANTX_MINIMUM_VALUE_ENERGY_SIGNAL, + CANTX_MAXIMUM_VALUE_ENERGY_SIGNAL}; +/** @} */ + +/*========== Static Constant and Variable Definitions =======================*/ + +/*========== Extern Constant and Variable Definitions =======================*/ + +/*========== Static Function Prototypes =====================================*/ +/** + * @brief Calculates the return value for the strings minimum SOC + * @return return value for minimum SOC + */ +static uint64_t CANTX_CalculateMinimumStringSoc(uint8_t stringNumber, const CAN_SHIM_s *const kpkCanShim); + +/** + * @brief Calculates the return value for the strings maximum SOC + * @return return value for maximum SOC + */ +static uint64_t CANTX_CalculateMaximumStringSoc(uint8_t stringNumber, const CAN_SHIM_s *const kpkCanShim); + +/** + * @brief Calculates the return value for the strings minimum SOE + * @return return value for minimum SOE + */ +static uint64_t CANTX_CalculateMinimumStringSoe(uint8_t stringNumber, const CAN_SHIM_s *const kpkCanShim); + +/** + * @brief Calculates the return value for the strings maximum SOE + * @return return value for maximum SOE + */ +static uint64_t CANTX_CalculateMaximumStringSoe(uint8_t stringNumber, const CAN_SHIM_s *const kpkCanShim); + +/** + * @brief Calculates the return value for the strings SOH + * @return return value for SOH + */ +static uint64_t CANTX_CalculateStringSoh(uint8_t stringNumber, const CAN_SHIM_s *const kpkCanShim); + +/** + * @brief Calculates the return value for the strings energy + * @return return value for energy + */ +static uint64_t CANTX_CalculateStringEnergy(uint8_t stringNumber, const CAN_SHIM_s *const kpkCanShim); + +/** + * @brief Builds the message form the data + */ +static void CANTX_BuildStringStateEstimationMessage( + uint64_t *pMessageData, + uint8_t stringNumber, + const CAN_SHIM_s *const kpkCanShim); + +/*========== Static Function Implementations ================================*/ +static uint64_t CANTX_CalculateMinimumStringSoc(uint8_t stringNumber, const CAN_SHIM_s *const kpkCanShim) { + FAS_ASSERT(stringNumber < BS_NR_OF_STRINGS); + FAS_ASSERT(kpkCanShim != NULL_PTR); + + /* Minimum SOC */ + float_t signalData = kpkCanShim->pTableSoc->minimumSoc_perc[stringNumber]; + CAN_TxPrepareSignalData(&signalData, cantx_signalMinimumStringSoc); + uint64_t data = (uint64_t)signalData; + return data; +} + +static uint64_t CANTX_CalculateMaximumStringSoc(uint8_t stringNumber, const CAN_SHIM_s *const kpkCanShim) { + FAS_ASSERT(stringNumber < BS_NR_OF_STRINGS); + FAS_ASSERT(kpkCanShim != NULL_PTR); + + /* Maximum SOC */ + float_t signalData = kpkCanShim->pTableSoc->maximumSoc_perc[stringNumber]; + CAN_TxPrepareSignalData(&signalData, cantx_signalMaximumStringSoc); + uint64_t data = (uint64_t)signalData; + return data; +} + +static uint64_t CANTX_CalculateMinimumStringSoe(uint8_t stringNumber, const CAN_SHIM_s *const kpkCanShim) { + FAS_ASSERT(stringNumber < BS_NR_OF_STRINGS); + FAS_ASSERT(kpkCanShim != NULL_PTR); + + /* Minimum SOE */ + float_t signalData = kpkCanShim->pTableSoe->minimumSoe_perc[stringNumber]; + CAN_TxPrepareSignalData(&signalData, cantx_signalMinimumStringSoe); + uint64_t data = (uint64_t)signalData; + return data; +} + +static uint64_t CANTX_CalculateMaximumStringSoe(uint8_t stringNumber, const CAN_SHIM_s *const kpkCanShim) { + FAS_ASSERT(stringNumber < BS_NR_OF_STRINGS); + FAS_ASSERT(kpkCanShim != NULL_PTR); + + /* Maximum SOE */ + float_t signalData = kpkCanShim->pTableSoe->maximumSoe_perc[stringNumber]; + CAN_TxPrepareSignalData(&signalData, cantx_signalMaximumStringSoe); + uint64_t data = (uint64_t)signalData; + return data; +} + +static uint64_t CANTX_CalculateStringSoh(uint8_t stringNumber, const CAN_SHIM_s *const kpkCanShim) { + FAS_ASSERT(stringNumber < BS_NR_OF_STRINGS); + FAS_ASSERT(kpkCanShim != NULL_PTR); + + /* SOH */ + float_t signalData = 100.0f; + CAN_TxPrepareSignalData(&signalData, cantx_signalStringSoh); + uint64_t data = (uint64_t)signalData; + return data; +} + +static uint64_t CANTX_CalculateStringEnergy(uint8_t stringNumber, const CAN_SHIM_s *const kpkCanShim) { + FAS_ASSERT(stringNumber < BS_NR_OF_STRINGS); + FAS_ASSERT(kpkCanShim != NULL_PTR); + + /* String energy */ + float_t signalData = kpkCanShim->pTableSoe->minimumSoe_Wh[stringNumber]; + CAN_TxPrepareSignalData(&signalData, cantx_signalStringEnergy); + uint64_t data = (uint64_t)signalData; + return data; +} + +static void CANTX_BuildStringStateEstimationMessage( + uint64_t *pMessageData, + uint8_t stringNumber, + const CAN_SHIM_s *const kpkCanShim) { + FAS_ASSERT(pMessageData != NULL_PTR); + FAS_ASSERT(stringNumber < BS_NR_OF_STRINGS); + FAS_ASSERT(kpkCanShim != NULL_PTR); + + /* String MUX */ + uint64_t data = (uint64_t)stringNumber; + CAN_TxSetMessageDataWithSignalData( + pMessageData, CANTX_STRING_MUX_START_BIT, CANTX_SIGNAL_STRING_MUX_LENGTH, data, CAN_BIG_ENDIAN); + + /* Minimum SOC */ + data = CANTX_CalculateMinimumStringSoc(stringNumber, kpkCanShim); + CAN_TxSetMessageDataWithSignalData( + pMessageData, + cantx_signalMinimumStringSoc.bitStart, + cantx_signalMinimumStringSoc.bitLength, + data, + CAN_BIG_ENDIAN); + + /* Maximum SOC */ + data = CANTX_CalculateMaximumStringSoc(stringNumber, kpkCanShim); + CAN_TxSetMessageDataWithSignalData( + pMessageData, + cantx_signalMaximumStringSoc.bitStart, + cantx_signalMaximumStringSoc.bitLength, + data, + CAN_BIG_ENDIAN); + + /* Minimum SOE */ + data = CANTX_CalculateMinimumStringSoe(stringNumber, kpkCanShim); + CAN_TxSetMessageDataWithSignalData( + pMessageData, + cantx_signalMinimumStringSoe.bitStart, + cantx_signalMinimumStringSoe.bitLength, + data, + CAN_BIG_ENDIAN); + + /* Maximum SOE */ + data = CANTX_CalculateMaximumStringSoe(stringNumber, kpkCanShim); + CAN_TxSetMessageDataWithSignalData( + pMessageData, + cantx_signalMaximumStringSoe.bitStart, + cantx_signalMaximumStringSoe.bitLength, + data, + CAN_BIG_ENDIAN); + + /* SOH */ + data = CANTX_CalculateStringSoh(stringNumber, kpkCanShim); + CAN_TxSetMessageDataWithSignalData( + pMessageData, cantx_signalStringSoh.bitStart, cantx_signalStringSoh.bitLength, data, CAN_BIG_ENDIAN); + + /* ENERGY */ + data = CANTX_CalculateStringEnergy(stringNumber, kpkCanShim); + CAN_TxSetMessageDataWithSignalData( + pMessageData, cantx_signalStringEnergy.bitStart, cantx_signalStringEnergy.bitLength, data, CAN_BIG_ENDIAN); +} + +/*========== Extern Function Implementations ================================*/ + +extern uint32_t CANTX_StringStateEstimation( + CAN_MESSAGE_PROPERTIES_s message, + uint8_t *pCanData, + uint8_t *pMuxId, + const CAN_SHIM_s *const kpkCanShim) { + FAS_ASSERT(message.id == CANTX_STRING_STATE_ESTIMATION_ID); + FAS_ASSERT(message.idType == CANTX_STRING_STATE_ESTIMATION_ID_TYPE); + FAS_ASSERT(message.dlc == CAN_FOXBMS_MESSAGES_DEFAULT_DLC); + FAS_ASSERT(message.endianness == CANTX_STRING_STATE_ESTIMATION_ENDIANNESS); + FAS_ASSERT(pCanData != NULL_PTR); + FAS_ASSERT(pMuxId != NULL_PTR); + FAS_ASSERT(*pMuxId < BS_NR_OF_STRINGS); + FAS_ASSERT(kpkCanShim != NULL_PTR); + uint64_t messageData = 0u; + + /** Database entry with state estimation values does not need to be read + * within this callback as it is already read by function + * #CANTX_PackStateEstimation */ + const uint8_t stringNumber = *pMuxId; + + /* build the message */ + CANTX_BuildStringStateEstimationMessage(&messageData, stringNumber, kpkCanShim); + + /* now copy data in the buffer that will be used to send data */ + CAN_TxSetCanDataWithMessageData(messageData, pCanData, message.endianness); + + /* Increment multiplexer for next cell */ + (*pMuxId)++; + + /* Check mux value */ + if (*pMuxId >= BS_NR_OF_STRINGS) { + *pMuxId = 0u; + } + + return 0u; +} + +/*========== Externalized Static Function Implementations (Unit Test) =======*/ +#ifdef UNITY_UNIT_TEST +extern uint64_t TEST_CANTX_CalculateMinimumStringSoc(uint8_t stringNumber, const CAN_SHIM_s *const kpkCanShim) { + return CANTX_CalculateMinimumStringSoc(stringNumber, kpkCanShim); +} +extern uint64_t TEST_CANTX_CalculateMaximumStringSoc(uint8_t stringNumber, const CAN_SHIM_s *const kpkCanShim) { + return CANTX_CalculateMaximumStringSoc(stringNumber, kpkCanShim); +} +extern uint64_t TEST_CANTX_CalculateMinimumStringSoe(uint8_t stringNumber, const CAN_SHIM_s *const kpkCanShim) { + return CANTX_CalculateMinimumStringSoe(stringNumber, kpkCanShim); +} +extern uint64_t TEST_CANTX_CalculateMaximumStringSoe(uint8_t stringNumber, const CAN_SHIM_s *const kpkCanShim) { + return CANTX_CalculateMaximumStringSoe(stringNumber, kpkCanShim); +} +extern uint64_t TEST_CANTX_CalculateStringSoh(uint8_t stringNumber, const CAN_SHIM_s *const kpkCanShim) { + return CANTX_CalculateStringSoh(stringNumber, kpkCanShim); +} +extern uint64_t TEST_CANTX_CalculateStringEnergy(uint8_t stringNumber, const CAN_SHIM_s *const kpkCanShim) { + return CANTX_CalculateStringEnergy(stringNumber, kpkCanShim); +} +extern void TEST_CANTX_BuildStringStateEstimationMessage( + uint64_t *pMessageData, + uint8_t stringNumber, + const CAN_SHIM_s *const kpkCanShim) { + CANTX_BuildStringStateEstimationMessage(pMessageData, stringNumber, kpkCanShim); +} +#endif diff --git a/src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_string-state.c b/src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_string-state.c new file mode 100644 index 00000000..5171a5df --- /dev/null +++ b/src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_string-state.c @@ -0,0 +1,817 @@ +/** + * + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * We kindly request you to use one or more of the following phrases to refer to + * foxBMS in your hardware, software, documentation or advertising materials: + * + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" + * + */ + +/** + * @file can_cbs_tx_string-state.c + * @author foxBMS Team + * @date 2023-05-31 (date of creation) + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS + * @prefix CANTX + * + * @brief CAN driver Tx callback implementation + * @details CAN Tx callback for state messages + */ + +/*========== Includes =======================================================*/ +#include "bms.h" +/* AXIVION Next Codeline Generic-LocalInclude: 'can_cbs_tx_cyclic.h' declares + * the prototype for the callback 'CANTX_StringState' */ +#include "can_cbs_tx_cyclic.h" +#include "can_cfg_tx-cyclic-message-definitions.h" +#include "can_helper.h" + +#include +#include + +/*========== Macros and Definitions =========================================*/ +/** + * Configuration of the signals + */ +#define CANTX_SIGNAL_MUX_STRING_START_BIT (3u) +#define CANTX_SIGNAL_MUX_STRING_LENGTH (4u) +#define CANTX_SIGNAL_STRING_DEEP_DISCHARGE_ERROR_START_BIT (7u) +#define CANTX_SIGNAL_STRING_DEEP_DISCHARGE_ERROR_LENGTH (CAN_BIT) +#define CANTX_SIGNAL_STRING_IS_STRING_FUSE_BLOWN_START_BIT (6u) +#define CANTX_SIGNAL_STRING_IS_STRING_FUSE_BLOWN_LENGTH (CAN_BIT) +#define CANTX_SIGNAL_STRING_IS_BALANCING_ACTIVE_START_BIT (5u) +#define CANTX_SIGNAL_STRING_IS_BALANCING_ACTIVE_LENGTH (CAN_BIT) +#define CANTX_SIGNAL_STRING_IS_STRING_CONNECTED_START_BIT (4u) +#define CANTX_SIGNAL_STRING_IS_STRING_CONNECTED_LENGTH (CAN_BIT) + +#define CANTX_SIGNAL_STRING_MSL_UNDERVOLTAGE_ERROR_START_BIT (15u) +#define CANTX_SIGNAL_STRING_MSL_UNDERVOLTAGE_ERROR_LENGTH (CAN_BIT) +#define CANTX_SIGNAL_STRING_MSL_OVERVOLTAGE_ERROR_START_BIT (14u) +#define CANTX_SIGNAL_STRING_MSL_OVERVOLTAGE_ERROR_LENGTH (CAN_BIT) +#define CANTX_SIGNAL_STRING_MSL_CELL_OVERCURRENT_DISCHARGE_ERROR_START_BIT (13u) +#define CANTX_SIGNAL_STRING_MSL_CELL_OVERCURRENT_DISCHARGE_ERROR_LENGTH (CAN_BIT) +#define CANTX_SIGNAL_STRING_MSL_CELL_OVERCURRENT_CHARGE_ERROR_START_BIT (12u) +#define CANTX_SIGNAL_STRING_MSL_CELL_OVERCURRENT_CHARGE_ERROR_LENGTH (CAN_BIT) +#define CANTX_SIGNAL_STRING_MSL_UNDERTEMPERATURE_DISCHARGE_ERROR_START_BIT (11u) +#define CANTX_SIGNAL_STRING_MSL_UNDERTEMPERATURE_DISCHARGE_ERROR_LENGTH (CAN_BIT) +#define CANTX_SIGNAL_STRING_MSL_OVERTEMPERATURE_DISCHARGE_ERROR_START_BIT (10u) +#define CANTX_SIGNAL_STRING_MSL_OVERTEMPERATURE_DISCHARGE_ERROR_LENGTH (CAN_BIT) +#define CANTX_SIGNAL_STRING_MSL_UNDERTEMPERATURE_CHARGE_ERROR_START_BIT (9u) +#define CANTX_SIGNAL_STRING_MSL_UNDERTEMPERATURE_CHARGE_ERROR_LENGTH (CAN_BIT) +#define CANTX_SIGNAL_STRING_MSL_OVERTEMPERATURE_CHARGE_ERROR_START_BIT (8u) +#define CANTX_SIGNAL_STRING_MSL_OVERTEMPERATURE_CHARGE_ERROR_LENGTH (CAN_BIT) + +#define CANTX_SIGNAL_STRING_MOL_UNDERVOLTAGE_WARNING_START_BIT (23u) +#define CANTX_SIGNAL_STRING_MOL_UNDERVOLTAGE_WARNING_LENGTH (CAN_BIT) +#define CANTX_SIGNAL_STRING_MOL_OVERVOLTAGE_WARNING_START_BIT (22u) +#define CANTX_SIGNAL_STRING_MOL_OVERVOLTAGE_WARNING_LENGTH (CAN_BIT) +#define CANTX_SIGNAL_STRING_MOL_CELL_OVERCURRENT_DISCHARGE_WARNING_START_BIT (21u) +#define CANTX_SIGNAL_STRING_MOL_CELL_OVERCURRENT_DISCHARGE_WARNING_LENGTH (CAN_BIT) +#define CANTX_SIGNAL_STRING_MOL_CELL_OVERCURRENT_CHARGE_WARNING_START_BIT (20u) +#define CANTX_SIGNAL_STRING_MOL_CELL_OVERCURRENT_CHARGE_WARNING_LENGTH (CAN_BIT) +#define CANTX_SIGNAL_STRING_MOL_UNDERTEMPERATURE_DISCHARGE_WARNING_START_BIT (19u) +#define CANTX_SIGNAL_STRING_MOL_UNDERTEMPERATURE_DISCHARGE_WARNING_LENGTH (CAN_BIT) +#define CANTX_SIGNAL_STRING_MOL_OVERTEMPERATURE_DISCHARGE_WARNING_START_BIT (18u) +#define CANTX_SIGNAL_STRING_MOL_OVERTEMPERATURE_DISCHARGE_WARNING_LENGTH (CAN_BIT) +#define CANTX_SIGNAL_STRING_MOL_UNDERTEMPERATURE_CHARGE_WARNING_START_BIT (17u) +#define CANTX_SIGNAL_STRING_MOL_UNDERTEMPERATURE_CHARGE_WARNING_LENGTH (CAN_BIT) +#define CANTX_SIGNAL_STRING_MOL_OVERTEMPERATURE_CHARGE_WARNING_START_BIT (16u) +#define CANTX_SIGNAL_STRING_MOL_OVERTEMPERATURE_CHARGE_WARNING_LENGTH (CAN_BIT) + +#define CANTX_SIGNAL_STRING_RSL_UNDERVOLTAGE_WARNING_START_BIT (31u) +#define CANTX_SIGNAL_STRING_RSL_UNDERVOLTAGE_WARNING_LENGTH (CAN_BIT) +#define CANTX_SIGNAL_STRING_RSL_OVERVOLTAGE_WARNING_START_BIT (30u) +#define CANTX_SIGNAL_STRING_RSL_OVERVOLTAGE_WARNING_LENGTH (CAN_BIT) +#define CANTX_SIGNAL_STRING_RSL_CELL_OVERCURRENT_DISCHARGE_WARNING_START_BIT (29u) +#define CANTX_SIGNAL_STRING_RSL_CELL_OVERCURRENT_DISCHARGE_WARNING_LENGTH (CAN_BIT) +#define CANTX_SIGNAL_STRING_RSL_CELL_OVERCURRENT_CHARGE_WARNING_START_BIT (28u) +#define CANTX_SIGNAL_STRING_RSL_CELL_OVERCURRENT_CHARGE_WARNING_LENGTH (CAN_BIT) +#define CANTX_SIGNAL_STRING_RSL_UNDERTEMPERATURE_DISCHARGE_WARNING_START_BIT (27u) +#define CANTX_SIGNAL_STRING_RSL_UNDERTEMPERATURE_DISCHARGE_WARNING_LENGTH (CAN_BIT) +#define CANTX_SIGNAL_STRING_RSL_OVERTEMPERATURE_DISCHARGE_WARNING_START_BIT (26u) +#define CANTX_SIGNAL_STRING_RSL_OVERTEMPERATURE_DISCHARGE_WARNING_LENGTH (CAN_BIT) +#define CANTX_SIGNAL_STRING_RSL_UNDERTEMPERATURE_CHARGE_WARNING_START_BIT (25u) +#define CANTX_SIGNAL_STRING_RSL_UNDERTEMPERATURE_CHARGE_WARNING_LENGTH (CAN_BIT) +#define CANTX_SIGNAL_STRING_RSL_OVERTEMPERATURE_CHARGE_WARNING_START_BIT (24u) +#define CANTX_SIGNAL_STRING_RSL_OVERTEMPERATURE_CHARGE_WARNING_LENGTH (CAN_BIT) + +#define CANTX_SIGNAL_STRING_DAISY_CHAIN_BASE_VOLT_MEAS_OOR_ERROR_START_BIT (39u) +#define CANTX_SIGNAL_STRING_DAISY_CHAIN_BASE_VOLT_MEAS_OOR_ERROR_LENGTH (CAN_BIT) +#define CANTX_SIGNAL_STRING_DAISY_CHAIN_BASE_CRC_ERROR_START_BIT (37u) +#define CANTX_SIGNAL_STRING_DAISY_CHAIN_BASE_CRC_ERROR_LENGTH (CAN_BIT) +#define CANTX_SIGNAL_STRING_DAISY_CHAIN_BASE_COMMUNICATION_ERROR_START_BIT (35u) +#define CANTX_SIGNAL_STRING_DAISY_CHAIN_BASE_COMMUNICATION_ERROR_LENGTH (CAN_BIT) +#define CANTX_SIGNAL_STRING_SLAVE_HARDWARE_ERROR_START_BIT (34u) +#define CANTX_SIGNAL_STRING_SLAVE_HARDWARE_ERROR_LENGTH (CAN_BIT) +#define CANTX_SIGNAL_STRING_NEGATIVE_CONTACTOR_ERROR_START_BIT (33u) +#define CANTX_SIGNAL_STRING_NEGATIVE_CONTACTOR_ERROR_LENGTH (CAN_BIT) +#define CANTX_SIGNAL_STRING_POSITIVE_CONTACTOR_ERROR_START_BIT (32u) +#define CANTX_SIGNAL_STRING_POSITIVE_CONTACTOR_ERROR_LENGTH (CAN_BIT) +#define CANTX_SIGNAL_STRING_FUSED_STRING_VOLTAGE_MEASUREMENT_ERROR_START_BIT (47u) +#define CANTX_SIGNAL_STRING_FUSED_STRING_VOLTAGE_MEASUREMENT_ERROR_LENGTH (CAN_BIT) +#define CANTX_SIGNAL_STRING_STRING_VOLTAGE_MEASUREMENT_ERROR_START_BIT (46u) +#define CANTX_SIGNAL_STRING_STRING_VOLTAGE_MEASUREMENT_ERROR_LENGTH (CAN_BIT) +#define CANTX_SIGNAL_STRING_ENERGY_COUNTING_MEASUREMENT_ERROR_START_BIT (45u) +#define CANTX_SIGNAL_STRING_ENERGY_COUNTING_MEASUREMENT_ERROR_LENGTH (CAN_BIT) +#define CANTX_SIGNAL_STRING_COULOMB_COUNTING_MEASUREMENT_ERROR_START_BIT (44u) +#define CANTX_SIGNAL_STRING_COULOMB_COUNTING_MEASUREMENT_ERROR_LENGTH (CAN_BIT) +#define CANTX_SIGNAL_STRING_STRING_CURRENT_MEASUREMENT_ERROR_START_BIT (43u) +#define CANTX_SIGNAL_STRING_STRING_CURRENT_MEASUREMENT_ERROR_LENGTH (CAN_BIT) +#define CANTX_SIGNAL_STRING_DAISY_CHAIN_BASE_TEMP_MEAS_OOR_ERROR_START_BIT (41u) +#define CANTX_SIGNAL_STRING_DAISY_CHAIN_BASE_TEMP_MEAS_OOR_ERROR_LENGTH (CAN_BIT) +#define CANTX_SIGNAL_STRING_VOLTAGE_SPREAD_PLAUSIBILITY_ERROR_START_BIT (55u) +#define CANTX_SIGNAL_STRING_VOLTAGE_SPREAD_PLAUSIBILITY_ERROR_LENGTH (CAN_BIT) +#define CANTX_SIGNAL_STRING_TEMPERATURE_SPREAD_PLAUSIBILITY_ERROR_START_BIT (54u) +#define CANTX_SIGNAL_STRING_TEMPERATURE_SPREAD_PLAUSIBILITY_ERROR_LENGTH (CAN_BIT) +#define CANTX_SIGNAL_STRING_STRING_VOLTAGE_PLAUSIBILITY_ERROR_START_BIT (53u) +#define CANTX_SIGNAL_STRING_STRING_VOLTAGE_PLAUSIBILITY_ERROR_LENGTH (CAN_BIT) +#define CANTX_SIGNAL_STRING_CELL_VOLTAGE_PLAUSIBILITY_ERROR_START_BIT (52u) +#define CANTX_SIGNAL_STRING_CELL_VOLTAGE_PLAUSIBILITY_ERROR_LENGTH (CAN_BIT) +#define CANTX_SIGNAL_STRING_CELL_TEMPERATURE_PLAUSIBILITY_ERROR_START_BIT (51u) +#define CANTX_SIGNAL_STRING_CELL_TEMPERATURE_PLAUSIBILITY_ERROR_LENGTH (CAN_BIT) +#define CANTX_SIGNAL_STRING_OPEN_WIRE_ERROR_START_BIT (49u) +#define CANTX_SIGNAL_STRING_OPEN_WIRE_ERROR_LENGTH (CAN_BIT) +#define CANTX_SIGNAL_STRING_PACK_VOLTAGE_MEASUREMENT_ERROR_START_BIT (48u) +#define CANTX_SIGNAL_STRING_PACK_VOLTAGE_MEASUREMENT_ERROR_LENGTH (CAN_BIT) +#define CANTX_SIGNAL_STRING_STRING_OVERCURRENT_ERROR_START_BIT (63u) +#define CANTX_SIGNAL_STRING_STRING_OVERCURRENT_ERROR_LENGTH (CAN_BIT) + +/*========== Static Constant and Variable Definitions =======================*/ + +/*========== Extern Constant and Variable Definitions =======================*/ + +/*========== Static Function Prototypes =====================================*/ +/** + * @brief Reads violated msl flags and sets the corresponding bits for the can message + * @param kpkCanShim Can shim that contains the data to be read + * @param pMessageData Message data where bits are set + * @param stringNumber Number of the string whose data is read + */ +static void CANTX_SetMslFlags(const CAN_SHIM_s *const kpkCanShim, uint64_t *pMessageData, uint8_t stringNumber); + +/** + * @brief Reads violated mol flags and sets the corresponding bits for the can message + * @param kpkCanShim Can shim that contains the data to be read + * @param pMessageData Message data where bits are set + * @param stringNumber Number of the string whose data is read + */ +static void CANTX_SetMolFlags(const CAN_SHIM_s *const kpkCanShim, uint64_t *pMessageData, uint8_t stringNumber); + +/** + * @brief Reads violated rsl flags and sets the corresponding bits for the can message + * @param kpkCanShim Can shim that contains the data to be read + * @param pMessageData Message data where bits are set + * @param stringNumber Number of the string whose data is read + */ +static void CANTX_SetRslFlags(const CAN_SHIM_s *const kpkCanShim, uint64_t *pMessageData, uint8_t stringNumber); + +/** + * @brief Reads violated current sensor flags and sets the corresponding bits for the can message + * @param kpkCanShim Can shim that contains the data to be read + * @param pMessageData Message data where bits are set + * @param stringNumber Number of the string whose data is read + */ +static void CANTX_SetCurrentSensorFlags( + const CAN_SHIM_s *const kpkCanShim, + uint64_t *pMessageData, + uint8_t stringNumber); + +/** + * @brief Reads violated plausibility flags and sets the corresponding bits for the can message + * @param kpkCanShim Can shim that contains the data to be read + * @param pMessageData Message data where bits are set + * @param stringNumber Number of the string whose data is read + */ +static void CANTX_SetPlausibilityFlags( + const CAN_SHIM_s *const kpkCanShim, + uint64_t *pMessageData, + uint8_t stringNumber); + +/** + * @brief Reads error flags and sets the corresponding bits for the can message + * @param kpkCanShim Can shim that contains the data to be read + * @param pMessageData Message data where bits are set + * @param stringNumber Number of the string whose data is read + */ +static void CANTX_SetOtherErrorFlags(const CAN_SHIM_s *const kpkCanShim, uint64_t *pMessageData, uint8_t stringNumber); + +/** + * @brief Calls the other helper functions to write the message data + * @param kpkCanShim Can shim that contains the data to be read + * @param pMessageData Message data where bits are set + * @param stringNumber Number of the string whose data is read + */ +static void CANTX_BuildStringStateMessage( + const CAN_SHIM_s *const kpkCanShim, + uint64_t *pMessageData, + uint8_t stringNumber); + +/*========== Static Function Implementations ================================*/ +static void CANTX_SetMslFlags(const CAN_SHIM_s *const kpkCanShim, uint64_t *pMessageData, uint8_t stringNumber) { + FAS_ASSERT(kpkCanShim != NULL_PTR); + FAS_ASSERT(pMessageData != NULL_PTR); + FAS_ASSERT(stringNumber <= BS_NR_OF_STRINGS); + + /* Error: Overtemperature charge */ + uint64_t data = kpkCanShim->pTableMsl->overtemperatureCharge[stringNumber]; + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_SIGNAL_STRING_MSL_OVERTEMPERATURE_CHARGE_ERROR_START_BIT, + CANTX_SIGNAL_STRING_MSL_OVERTEMPERATURE_CHARGE_ERROR_LENGTH, + data, + CANTX_STRING_STATE_ENDIANNESS); + + /* Error: Undertemperature charge */ + data = kpkCanShim->pTableMsl->undertemperatureCharge[stringNumber]; + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_SIGNAL_STRING_MSL_UNDERTEMPERATURE_CHARGE_ERROR_START_BIT, + CANTX_SIGNAL_STRING_MSL_UNDERTEMPERATURE_CHARGE_ERROR_LENGTH, + data, + CANTX_STRING_STATE_ENDIANNESS); + + /* Error: Overtemperature discharge */ + data = kpkCanShim->pTableMsl->overtemperatureDischarge[stringNumber]; + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_SIGNAL_STRING_MSL_OVERTEMPERATURE_DISCHARGE_ERROR_START_BIT, + CANTX_SIGNAL_STRING_MSL_OVERTEMPERATURE_DISCHARGE_ERROR_LENGTH, + data, + CANTX_STRING_STATE_ENDIANNESS); + + /* Error: Undertemperature discharge */ + data = kpkCanShim->pTableMsl->undertemperatureDischarge[stringNumber]; + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_SIGNAL_STRING_MSL_UNDERTEMPERATURE_DISCHARGE_ERROR_START_BIT, + CANTX_SIGNAL_STRING_MSL_UNDERTEMPERATURE_DISCHARGE_ERROR_LENGTH, + data, + CANTX_STRING_STATE_ENDIANNESS); + + /* Error: cell overcurrent charge */ + if ((kpkCanShim->pTableMsl->cellChargeOvercurrent[stringNumber] == 1u) || + (kpkCanShim->pTableMsl->stringChargeOvercurrent[stringNumber] == 1u)) { + data = 1u; + } else { + data = 0u; + } + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_SIGNAL_STRING_MSL_CELL_OVERCURRENT_CHARGE_ERROR_START_BIT, + CANTX_SIGNAL_STRING_MSL_CELL_OVERCURRENT_CHARGE_ERROR_LENGTH, + data, + CANTX_STRING_STATE_ENDIANNESS); + + /* Error: Overcurrent discharge */ + if ((kpkCanShim->pTableMsl->cellDischargeOvercurrent[stringNumber] == 1u) || + (kpkCanShim->pTableMsl->stringDischargeOvercurrent[stringNumber] == 1u)) { + data = 1u; + } else { + data = 0u; + } + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_SIGNAL_STRING_MSL_CELL_OVERCURRENT_DISCHARGE_ERROR_START_BIT, + CANTX_SIGNAL_STRING_MSL_CELL_OVERCURRENT_DISCHARGE_ERROR_LENGTH, + data, + CANTX_STRING_STATE_ENDIANNESS); + + /* Error: Overvoltage */ + data = kpkCanShim->pTableMsl->overVoltage[stringNumber]; + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_SIGNAL_STRING_MSL_OVERVOLTAGE_ERROR_START_BIT, + CANTX_SIGNAL_STRING_MSL_OVERVOLTAGE_ERROR_LENGTH, + data, + CANTX_STRING_STATE_ENDIANNESS); + + /* Error: Undervoltage */ + data = kpkCanShim->pTableMsl->underVoltage[stringNumber]; + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_SIGNAL_STRING_MSL_UNDERVOLTAGE_ERROR_START_BIT, + CANTX_SIGNAL_STRING_MSL_UNDERVOLTAGE_ERROR_LENGTH, + data, + CANTX_STRING_STATE_ENDIANNESS); +} + +static void CANTX_SetMolFlags(const CAN_SHIM_s *const kpkCanShim, uint64_t *pMessageData, uint8_t stringNumber) { + FAS_ASSERT(kpkCanShim != NULL_PTR); + FAS_ASSERT(pMessageData != NULL_PTR); + FAS_ASSERT(stringNumber <= BS_NR_OF_STRINGS); + + /* Info: Overtemperature charge - MOL */ + uint64_t data = kpkCanShim->pTableMol->overtemperatureCharge[stringNumber]; + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_SIGNAL_STRING_MOL_OVERTEMPERATURE_CHARGE_WARNING_START_BIT, + CANTX_SIGNAL_STRING_MOL_OVERTEMPERATURE_CHARGE_WARNING_LENGTH, + data, + CANTX_STRING_STATE_ENDIANNESS); + + /* Info: Undertemperature charge - MOL */ + data = kpkCanShim->pTableMol->undertemperatureCharge[stringNumber]; + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_SIGNAL_STRING_MOL_UNDERTEMPERATURE_CHARGE_WARNING_START_BIT, + CANTX_SIGNAL_STRING_MOL_UNDERTEMPERATURE_CHARGE_WARNING_LENGTH, + data, + CANTX_STRING_STATE_ENDIANNESS); + + /* Info: Overtemperature discharge - MOL */ + data = kpkCanShim->pTableMol->overtemperatureDischarge[stringNumber]; + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_SIGNAL_STRING_MOL_OVERTEMPERATURE_DISCHARGE_WARNING_START_BIT, + CANTX_SIGNAL_STRING_MOL_OVERTEMPERATURE_DISCHARGE_WARNING_LENGTH, + data, + CANTX_STRING_STATE_ENDIANNESS); + + /* Info: Undertemperature discharge - MOL */ + data = kpkCanShim->pTableMol->undertemperatureCharge[stringNumber]; + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_SIGNAL_STRING_MOL_UNDERTEMPERATURE_DISCHARGE_WARNING_START_BIT, + CANTX_SIGNAL_STRING_MOL_UNDERTEMPERATURE_DISCHARGE_WARNING_LENGTH, + data, + CANTX_STRING_STATE_ENDIANNESS); + + /* Info: Overcurrent charge - MOL */ + if ((kpkCanShim->pTableMol->cellChargeOvercurrent[stringNumber] == 1u) || + (kpkCanShim->pTableMol->stringChargeOvercurrent[stringNumber] == 1u)) { + data = 1u; + } else { + data = 0u; + } + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_SIGNAL_STRING_MOL_CELL_OVERCURRENT_CHARGE_WARNING_START_BIT, + CANTX_SIGNAL_STRING_MOL_CELL_OVERCURRENT_CHARGE_WARNING_LENGTH, + data, + CANTX_STRING_STATE_ENDIANNESS); + + /* Info: Overcurrent discharge - MOL */ + if ((kpkCanShim->pTableMol->cellDischargeOvercurrent[stringNumber] == 1u) || + (kpkCanShim->pTableMol->stringDischargeOvercurrent[stringNumber] == 1u)) { + data = 1u; + } else { + data = 0u; + } + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_SIGNAL_STRING_MOL_CELL_OVERCURRENT_DISCHARGE_WARNING_START_BIT, + CANTX_SIGNAL_STRING_MOL_CELL_OVERCURRENT_DISCHARGE_WARNING_LENGTH, + data, + CANTX_STRING_STATE_ENDIANNESS); + + /* Info: Overvoltage - MOL */ + data = kpkCanShim->pTableMol->overVoltage[stringNumber]; + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_SIGNAL_STRING_MOL_OVERVOLTAGE_WARNING_START_BIT, + CANTX_SIGNAL_STRING_MOL_OVERVOLTAGE_WARNING_LENGTH, + data, + CANTX_STRING_STATE_ENDIANNESS); + + /* Info: Undervoltage - MOL */ + data = kpkCanShim->pTableMol->underVoltage[stringNumber]; + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_SIGNAL_STRING_MOL_UNDERVOLTAGE_WARNING_START_BIT, + CANTX_SIGNAL_STRING_MOL_UNDERVOLTAGE_WARNING_LENGTH, + data, + CANTX_STRING_STATE_ENDIANNESS); +} + +static void CANTX_SetRslFlags(const CAN_SHIM_s *const kpkCanShim, uint64_t *pMessageData, uint8_t stringNumber) { + FAS_ASSERT(kpkCanShim != NULL_PTR); + FAS_ASSERT(pMessageData != NULL_PTR); + FAS_ASSERT(stringNumber <= BS_NR_OF_STRINGS); + + /* Warning: Overtemperature charge - RSL */ + uint64_t data = kpkCanShim->pTableRsl->overtemperatureCharge[stringNumber]; + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_SIGNAL_STRING_RSL_OVERTEMPERATURE_CHARGE_WARNING_START_BIT, + CANTX_SIGNAL_STRING_RSL_OVERTEMPERATURE_CHARGE_WARNING_LENGTH, + data, + CANTX_STRING_STATE_ENDIANNESS); + + /* Warning: Undertemperature charge - RSL */ + data = kpkCanShim->pTableRsl->undertemperatureCharge[stringNumber]; + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_SIGNAL_STRING_RSL_UNDERTEMPERATURE_CHARGE_WARNING_START_BIT, + CANTX_SIGNAL_STRING_RSL_UNDERTEMPERATURE_CHARGE_WARNING_LENGTH, + data, + CANTX_STRING_STATE_ENDIANNESS); + + /* Warning: Overtemperature discharge - RSL */ + data = kpkCanShim->pTableRsl->overtemperatureDischarge[stringNumber]; + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_SIGNAL_STRING_RSL_OVERTEMPERATURE_DISCHARGE_WARNING_START_BIT, + CANTX_SIGNAL_STRING_RSL_OVERTEMPERATURE_DISCHARGE_WARNING_LENGTH, + data, + CANTX_STRING_STATE_ENDIANNESS); + + /* Warning: Undertemperature discharge - RSL */ + data = kpkCanShim->pTableRsl->undertemperatureDischarge[stringNumber]; + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_SIGNAL_STRING_RSL_UNDERTEMPERATURE_DISCHARGE_WARNING_START_BIT, + CANTX_SIGNAL_STRING_RSL_UNDERTEMPERATURE_DISCHARGE_WARNING_LENGTH, + data, + CANTX_STRING_STATE_ENDIANNESS); + + /* Warning: Overcurrent charge - RSL */ + if ((kpkCanShim->pTableRsl->cellChargeOvercurrent[stringNumber] == 1u) || + (kpkCanShim->pTableRsl->stringChargeOvercurrent[stringNumber] == 1u)) { + data = 1u; + } else { + data = 0u; + } + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_SIGNAL_STRING_RSL_CELL_OVERCURRENT_CHARGE_WARNING_START_BIT, + CANTX_SIGNAL_STRING_RSL_CELL_OVERCURRENT_CHARGE_WARNING_LENGTH, + data, + CANTX_STRING_STATE_ENDIANNESS); + + /* Warning: Overcurrent discharge - RSL */ + if ((kpkCanShim->pTableRsl->cellDischargeOvercurrent[stringNumber] == 1u) || + (kpkCanShim->pTableRsl->stringDischargeOvercurrent[stringNumber] == 1u)) { + data = 1u; + } else { + data = 0u; + } + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_SIGNAL_STRING_RSL_CELL_OVERCURRENT_DISCHARGE_WARNING_START_BIT, + CANTX_SIGNAL_STRING_RSL_CELL_OVERCURRENT_DISCHARGE_WARNING_LENGTH, + data, + CANTX_STRING_STATE_ENDIANNESS); + + /* Warning: Overvoltage - RSL */ + data = kpkCanShim->pTableRsl->overVoltage[stringNumber]; + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_SIGNAL_STRING_RSL_OVERVOLTAGE_WARNING_START_BIT, + CANTX_SIGNAL_STRING_RSL_OVERVOLTAGE_WARNING_LENGTH, + data, + CANTX_STRING_STATE_ENDIANNESS); + + /* Warning: Undervoltage - RSL */ + data = kpkCanShim->pTableRsl->underVoltage[stringNumber]; + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_SIGNAL_STRING_RSL_UNDERVOLTAGE_WARNING_START_BIT, + CANTX_SIGNAL_STRING_RSL_UNDERVOLTAGE_WARNING_LENGTH, + data, + CANTX_STRING_STATE_ENDIANNESS); +} + +static void CANTX_SetCurrentSensorFlags( + const CAN_SHIM_s *const kpkCanShim, + uint64_t *pMessageData, + uint8_t stringNumber) { + FAS_ASSERT(kpkCanShim != NULL_PTR); + FAS_ASSERT(pMessageData != NULL_PTR); + FAS_ASSERT(stringNumber <= BS_NR_OF_STRINGS); + + /* Error: Coulomb counting measurement */ + uint64_t data = CAN_ConvertBooleanToInteger( + kpkCanShim->pTableErrorState->currentSensorCoulombCounterTimeoutError[stringNumber]); + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_SIGNAL_STRING_COULOMB_COUNTING_MEASUREMENT_ERROR_START_BIT, + CANTX_SIGNAL_STRING_COULOMB_COUNTING_MEASUREMENT_ERROR_LENGTH, + data, + CANTX_STRING_STATE_ENDIANNESS); + + /* Error: Energy counting measurement */ + data = + CAN_ConvertBooleanToInteger(kpkCanShim->pTableErrorState->currentSensorEnergyCounterTimeoutError[stringNumber]); + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_SIGNAL_STRING_ENERGY_COUNTING_MEASUREMENT_ERROR_START_BIT, + CANTX_SIGNAL_STRING_ENERGY_COUNTING_MEASUREMENT_ERROR_LENGTH, + data, + CANTX_STRING_STATE_ENDIANNESS); + + /* Error: dedicated string voltage measurement */ + /* CAN:TODO either timeout or measurement invalid */ + data = CAN_ConvertBooleanToInteger(kpkCanShim->pTableErrorState->currentSensorVoltage1TimeoutError[stringNumber]); + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_SIGNAL_STRING_STRING_VOLTAGE_MEASUREMENT_ERROR_START_BIT, + CANTX_SIGNAL_STRING_STRING_VOLTAGE_MEASUREMENT_ERROR_LENGTH, + data, + CANTX_STRING_STATE_ENDIANNESS); + + /* Error: dedicated fused string voltage measurement */ + /* CAN:TODO either timeout or measurement invalid */ + data = CAN_ConvertBooleanToInteger(kpkCanShim->pTableErrorState->currentSensorVoltage2TimeoutError[stringNumber]); + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_SIGNAL_STRING_FUSED_STRING_VOLTAGE_MEASUREMENT_ERROR_START_BIT, + CANTX_SIGNAL_STRING_FUSED_STRING_VOLTAGE_MEASUREMENT_ERROR_LENGTH, + data, + CANTX_STRING_STATE_ENDIANNESS); + + /* Error: dedicated fused pack voltage measurement */ + /* CAN:TODO either timeout or measurement invalid */ + data = CAN_ConvertBooleanToInteger(kpkCanShim->pTableErrorState->currentSensorVoltage3TimeoutError[stringNumber]); + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_SIGNAL_STRING_PACK_VOLTAGE_MEASUREMENT_ERROR_START_BIT, + CANTX_SIGNAL_STRING_PACK_VOLTAGE_MEASUREMENT_ERROR_LENGTH, + data, + CANTX_STRING_STATE_ENDIANNESS); +} + +static void CANTX_SetPlausibilityFlags( + const CAN_SHIM_s *const kpkCanShim, + uint64_t *pMessageData, + uint8_t stringNumber) { + FAS_ASSERT(kpkCanShim != NULL_PTR); + FAS_ASSERT(pMessageData != NULL_PTR); + FAS_ASSERT(stringNumber <= BS_NR_OF_STRINGS); + + /* Error: Plausibility: Cell temperature */ + uint64_t data = + CAN_ConvertBooleanToInteger(kpkCanShim->pTableErrorState->plausibilityCheckCellTemperatureError[stringNumber]); + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_SIGNAL_STRING_CELL_TEMPERATURE_PLAUSIBILITY_ERROR_START_BIT, + CANTX_SIGNAL_STRING_CELL_TEMPERATURE_PLAUSIBILITY_ERROR_LENGTH, + data, + CANTX_STRING_STATE_ENDIANNESS); + + /* Error: Plausibility: Cell voltage */ + data = CAN_ConvertBooleanToInteger(kpkCanShim->pTableErrorState->plausibilityCheckCellVoltageError[stringNumber]); + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_SIGNAL_STRING_CELL_VOLTAGE_PLAUSIBILITY_ERROR_START_BIT, + CANTX_SIGNAL_STRING_CELL_VOLTAGE_PLAUSIBILITY_ERROR_LENGTH, + data, + CANTX_STRING_STATE_ENDIANNESS); + + /* Error: Plausibility: String voltage */ + data = CAN_ConvertBooleanToInteger(kpkCanShim->pTableErrorState->plausibilityCheckPackVoltageError[stringNumber]); + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_SIGNAL_STRING_STRING_VOLTAGE_PLAUSIBILITY_ERROR_START_BIT, + CANTX_SIGNAL_STRING_STRING_VOLTAGE_PLAUSIBILITY_ERROR_LENGTH, + data, + CANTX_STRING_STATE_ENDIANNESS); + + /* Error: Plausibility: Cell temperature spread */ + data = CAN_ConvertBooleanToInteger( + kpkCanShim->pTableErrorState->plausibilityCheckCellTemperatureSpreadError[stringNumber]); + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_SIGNAL_STRING_TEMPERATURE_SPREAD_PLAUSIBILITY_ERROR_START_BIT, + CANTX_SIGNAL_STRING_TEMPERATURE_SPREAD_PLAUSIBILITY_ERROR_LENGTH, + data, + CANTX_STRING_STATE_ENDIANNESS); + + /* Error: Plausibility: Cell voltage spread */ + data = CAN_ConvertBooleanToInteger( + kpkCanShim->pTableErrorState->plausibilityCheckCellVoltageSpreadError[stringNumber]); + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_SIGNAL_STRING_VOLTAGE_SPREAD_PLAUSIBILITY_ERROR_START_BIT, + CANTX_SIGNAL_STRING_VOLTAGE_SPREAD_PLAUSIBILITY_ERROR_LENGTH, + data, + CANTX_STRING_STATE_ENDIANNESS); +} + +static void CANTX_SetOtherErrorFlags(const CAN_SHIM_s *const kpkCanShim, uint64_t *pMessageData, uint8_t stringNumber) { + FAS_ASSERT(kpkCanShim != NULL_PTR); + FAS_ASSERT(pMessageData != NULL_PTR); + FAS_ASSERT(stringNumber <= BS_NR_OF_STRINGS); + + /* Balancing active: TODO */ + + /* String fuse blown */ + uint64_t data = CAN_ConvertBooleanToInteger(kpkCanShim->pTableErrorState->stringFuseError[stringNumber]); + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_SIGNAL_STRING_IS_STRING_FUSE_BLOWN_START_BIT, + CANTX_SIGNAL_STRING_IS_STRING_FUSE_BLOWN_LENGTH, + data, + CANTX_STRING_STATE_ENDIANNESS); + + /* Error: Deep-discharge */ + data = CAN_ConvertBooleanToInteger(kpkCanShim->pTableErrorState->deepDischargeDetectedError[stringNumber]); + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_SIGNAL_STRING_DEEP_DISCHARGE_ERROR_START_BIT, + CANTX_SIGNAL_STRING_DEEP_DISCHARGE_ERROR_LENGTH, + data, + CANTX_STRING_STATE_ENDIANNESS); + + /* Error: Positive string contactor */ + data = CAN_ConvertBooleanToInteger( + kpkCanShim->pTableErrorState->contactorInPositivePathOfStringFeedbackError[stringNumber]); + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_SIGNAL_STRING_POSITIVE_CONTACTOR_ERROR_START_BIT, + CANTX_SIGNAL_STRING_POSITIVE_CONTACTOR_ERROR_LENGTH, + data, + CANTX_STRING_STATE_ENDIANNESS); + + /* Error: Negative string contactor */ + data = CAN_ConvertBooleanToInteger( + kpkCanShim->pTableErrorState->contactorInNegativePathOfStringFeedbackError[stringNumber]); + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_SIGNAL_STRING_NEGATIVE_CONTACTOR_ERROR_START_BIT, + CANTX_SIGNAL_STRING_NEGATIVE_CONTACTOR_ERROR_LENGTH, + data, + CANTX_STRING_STATE_ENDIANNESS); + + /* Error: Slave hardware: TODO */ + + /* Error: Daisy-chain base: communication */ + data = CAN_ConvertBooleanToInteger(kpkCanShim->pTableErrorState->afeCommunicationSpiError[stringNumber]); + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_SIGNAL_STRING_DAISY_CHAIN_BASE_COMMUNICATION_ERROR_START_BIT, + CANTX_SIGNAL_STRING_DAISY_CHAIN_BASE_COMMUNICATION_ERROR_LENGTH, + data, + CANTX_STRING_STATE_ENDIANNESS); + + /* Error: Daisy-chain redundancy: communication: TODO */ + + /* Error: Daisy-chain base: CRC */ + data = CAN_ConvertBooleanToInteger(kpkCanShim->pTableErrorState->afeCommunicationCrcError[stringNumber]); + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_SIGNAL_STRING_DAISY_CHAIN_BASE_CRC_ERROR_START_BIT, + CANTX_SIGNAL_STRING_DAISY_CHAIN_BASE_CRC_ERROR_LENGTH, + data, + CANTX_STRING_STATE_ENDIANNESS); + + /* Error: Daisy-chain redundancy: CRC: TODO */ + + /* Error: Daisy-chain base: Voltage out of operating range */ + data = CAN_ConvertBooleanToInteger(kpkCanShim->pTableErrorState->afeCellVoltageInvalidError[stringNumber]); + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_SIGNAL_STRING_DAISY_CHAIN_BASE_VOLT_MEAS_OOR_ERROR_START_BIT, + CANTX_SIGNAL_STRING_DAISY_CHAIN_BASE_VOLT_MEAS_OOR_ERROR_LENGTH, + data, + CANTX_STRING_STATE_ENDIANNESS); + + /* Error: Daisy-chain redundancy: Voltage out of operating range: TODO */ + + /* Error: Daisy-chain base: Temperature out of operating range */ + data = CAN_ConvertBooleanToInteger(kpkCanShim->pTableErrorState->afeCellTemperatureInvalidError[stringNumber]); + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_SIGNAL_STRING_DAISY_CHAIN_BASE_TEMP_MEAS_OOR_ERROR_START_BIT, + CANTX_SIGNAL_STRING_DAISY_CHAIN_BASE_TEMP_MEAS_OOR_ERROR_LENGTH, + data, + CANTX_STRING_STATE_ENDIANNESS); + + /* Error: Daisy-chain redundancy: Temperature out of operating range: TODO */ + + /* Error: string current measurement, either communication timeout or invalid measurement */ + if ((kpkCanShim->pTableErrorState->currentMeasurementInvalidError[stringNumber] == true) || + (kpkCanShim->pTableErrorState->currentMeasurementTimeoutError[stringNumber] == true)) { + data = 1u; + } else { + data = 0u; + } + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_SIGNAL_STRING_STRING_CURRENT_MEASUREMENT_ERROR_START_BIT, + CANTX_SIGNAL_STRING_STRING_CURRENT_MEASUREMENT_ERROR_LENGTH, + data, + CANTX_STRING_STATE_ENDIANNESS); + + /* Error: Open wire */ + data = CAN_ConvertBooleanToInteger(kpkCanShim->pTableErrorState->openWireDetectedError[stringNumber]); + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_SIGNAL_STRING_OPEN_WIRE_ERROR_START_BIT, + CANTX_SIGNAL_STRING_OPEN_WIRE_ERROR_LENGTH, + data, + CANTX_STRING_STATE_ENDIANNESS); + + /* CAN:TODO OvercurrentError */ +} + +static void CANTX_BuildStringStateMessage( + const CAN_SHIM_s *const kpkCanShim, + uint64_t *pMessageData, + uint8_t stringNumber) { + FAS_ASSERT(kpkCanShim != NULL_PTR); + FAS_ASSERT(pMessageData != NULL_PTR); + FAS_ASSERT(stringNumber <= BS_NR_OF_STRINGS); + + CANTX_SetMslFlags(kpkCanShim, pMessageData, stringNumber); + CANTX_SetMolFlags(kpkCanShim, pMessageData, stringNumber); + CANTX_SetRslFlags(kpkCanShim, pMessageData, stringNumber); + CANTX_SetCurrentSensorFlags(kpkCanShim, pMessageData, stringNumber); + CANTX_SetPlausibilityFlags(kpkCanShim, pMessageData, stringNumber); + CANTX_SetOtherErrorFlags(kpkCanShim, pMessageData, stringNumber); +} + +/*========== Extern Function Implementations ================================*/ +extern uint32_t CANTX_StringState( + CAN_MESSAGE_PROPERTIES_s message, + uint8_t *pCanData, + uint8_t *pMuxId, + const CAN_SHIM_s *const kpkCanShim) { + FAS_ASSERT(message.id == CANTX_STRING_STATE_ID); + FAS_ASSERT(message.idType == CANTX_STRING_STATE_ID_TYPE); + FAS_ASSERT(message.dlc == CAN_FOXBMS_MESSAGES_DEFAULT_DLC); + FAS_ASSERT(pCanData != NULL_PTR); + FAS_ASSERT(pMuxId != NULL_PTR); + FAS_ASSERT(*pMuxId < BS_NR_OF_STRINGS); + FAS_ASSERT(kpkCanShim != NULL_PTR); + uint64_t messageData = 0u; + + const uint8_t stringNumber = *pMuxId; + + /* First signal to transmit cell voltages: get database values */ + if (stringNumber == 0u) { + /* Do not read pTableMsl and pTableErrorState as they already are read + * with a higher frequency from CAN_TxState callback */ + (void)DATA_READ_DATA(kpkCanShim->pTableRsl, kpkCanShim->pTableMol); + } + + /* Set mux value */ + CAN_TxSetMessageDataWithSignalData( + &messageData, + CANTX_SIGNAL_MUX_STRING_START_BIT, + CANTX_SIGNAL_MUX_STRING_LENGTH, + stringNumber, + CANTX_STRING_STATE_ENDIANNESS); + + /* String connected */ + uint64_t data = CAN_ConvertBooleanToInteger(BMS_IsStringClosed(stringNumber)); + CAN_TxSetMessageDataWithSignalData( + &messageData, + CANTX_SIGNAL_STRING_IS_STRING_CONNECTED_START_BIT, + CANTX_SIGNAL_STRING_IS_STRING_CONNECTED_LENGTH, + data, + CANTX_STRING_STATE_ENDIANNESS); + + /* call function to set the message data */ + CANTX_BuildStringStateMessage(kpkCanShim, &messageData, stringNumber); + + /* now copy data in the buffer that will be used to send data */ + CAN_TxSetCanDataWithMessageData(messageData, pCanData, CANTX_STRING_STATE_ENDIANNESS); + + /* Increment multiplexer for next cell */ + (*pMuxId)++; + + /* Check mux value */ + if (*pMuxId >= BS_NR_OF_STRINGS) { + *pMuxId = 0u; + } + + return 0u; +} + +/*========== Externalized Static Function Implementations (Unit Test) =======*/ +#ifdef UNITY_UNIT_TEST +#endif diff --git a/src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_string-values-p0.c b/src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_string-values-p0.c new file mode 100644 index 00000000..f463832c --- /dev/null +++ b/src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_string-values-p0.c @@ -0,0 +1,290 @@ +/** + * + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * We kindly request you to use one or more of the following phrases to refer to + * foxBMS in your hardware, software, documentation or advertising materials: + * + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" + * + */ + +/** + * @file can_cbs_tx_string-values-p0.c + * @author foxBMS Team + * @date 2023-05-31 (date of creation) + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS + * @prefix CANTX + * + * @brief CAN driver Tx callback implementation + * @details CAN Tx callback for pack value and string value messages + */ + +/*========== Includes =======================================================*/ +#include "can_cbs_tx_cyclic.h" +#include "can_cfg_tx-cyclic-message-definitions.h" +#include "can_helper.h" +#include "foxmath.h" + +#include +#include + +/*========== Macros and Definitions =========================================*/ +/* configuration of the StringP0 message bits */ +#define CANTX_STRING_P0_MUX_START_BIT (7u) +#define CANTX_STRING_P0_MUX_LENGTH (3u) + +/** @{ + * defines of the string voltage signal +*/ +#define CANTX_STRING_P0_VOLTAGE_START_BIT (4u) +#define CANTX_STRING_P0_VOLTAGE_LENGTH (18u) +#define CANTX_MINIMUM_VALUE_STRING_VOLTAGE_SIGNAL (-1310720.0f) +#define CANTX_MAXIMUM_VALUE_STRING_VOLTAGE_SIGNAL (1310710.0f) +/** @} */ + +/** @{ + * configuration of the string voltage signal +*/ +static const CAN_SIGNAL_TYPE_s cantx_signalStringVoltage = { + CANTX_STRING_P0_VOLTAGE_START_BIT, + CANTX_STRING_P0_VOLTAGE_LENGTH, + UNIT_CONVERSION_FACTOR_10_FLOAT, + CAN_SIGNAL_OFFSET_0, + CANTX_MINIMUM_VALUE_STRING_VOLTAGE_SIGNAL, + CANTX_MAXIMUM_VALUE_STRING_VOLTAGE_SIGNAL}; +/** @} */ + +/** @{ + * defines of the string current signal +*/ +#define CANTX_STRING_P0_CURRENT_START_BIT (18u) +#define CANTX_STRING_P0_CURRENT_LENGTH (18u) +#define CANTX_MINIMUM_VALUE_STRING_CURRENT_SIGNAL (-1310720.0f) +#define CANTX_MAXIMUM_VALUE_STRING_CURRENT_SIGNAL (1310710.0f) +/** @} */ + +/** @{ + * configuration of the string current signal +*/ +static const CAN_SIGNAL_TYPE_s cantx_signalStringCurrent = { + CANTX_STRING_P0_CURRENT_START_BIT, + CANTX_STRING_P0_CURRENT_LENGTH, + UNIT_CONVERSION_FACTOR_10_FLOAT, + CAN_SIGNAL_OFFSET_0, + CANTX_MINIMUM_VALUE_STRING_CURRENT_SIGNAL, + CANTX_MAXIMUM_VALUE_STRING_CURRENT_SIGNAL}; +/** @} */ + +/** @{ + * defines for the string power signal +*/ +#define CANTX_STRING_P0_POWER_START_BIT (32u) +#define CANTX_STRING_P0_POWER_LENGTH (18u) +#define CANTX_MINIMUM_VALUE_STRING_POWER_SIGNAL (-1310720.0f) +#define CANTX_MAXIMUM_VALUE_STRING_POWER_SIGNAL (1310710.0f) +/** @} */ + +/** @{ + * configuration of the string power signal +*/ +static const CAN_SIGNAL_TYPE_s cantx_signalStringPower = { + CANTX_STRING_P0_POWER_START_BIT, + CANTX_STRING_P0_POWER_LENGTH, + UNIT_CONVERSION_FACTOR_10_FLOAT, + CAN_SIGNAL_OFFSET_0, + CANTX_MINIMUM_VALUE_STRING_POWER_SIGNAL, + CANTX_MAXIMUM_VALUE_STRING_POWER_SIGNAL}; +/** @} */ + +/*========== Static Constant and Variable Definitions =======================*/ + +/*========== Extern Constant and Variable Definitions =======================*/ + +/*========== Static Function Prototypes =====================================*/ +/** + * @brief calculates the return value of the voltage + * @return returns the return value of the voltage + */ +static uint64_t CANTX_CalculateStringVoltage(uint8_t stringNumber, const CAN_SHIM_s *const kpkCanShim); + +/** + * @brief calculates the return value of the current + * @return returns the return value of the current + */ +static uint64_t CANTX_CalculateStringCurrent(uint8_t stringNumber, const CAN_SHIM_s *const kpkCanShim); + +/** + * @brief calculates the return value of the power + * @return returns the return value of the power + */ +static uint64_t CANTX_CalculateStringPower(uint8_t stringNumber, const CAN_SHIM_s *const kpkCanShim); + +/** + * @brief sets the power signal of the StringP0 message + */ +static void CANTX_BuildString0Message(uint64_t *pMessageData, uint8_t stringNumber, const CAN_SHIM_s *const kpkCanShim); + +/*========== Static Function Implementations ================================*/ +static uint64_t CANTX_CalculateStringVoltage(uint8_t stringNumber, const CAN_SHIM_s *const kpkCanShim) { + FAS_ASSERT(stringNumber < BS_NR_OF_STRINGS); + FAS_ASSERT(kpkCanShim != NULL_PTR); + + /* String voltage */ + float_t signalData = (float_t)kpkCanShim->pTablePackValues->stringVoltage_mV[stringNumber]; + CAN_TxPrepareSignalData(&signalData, cantx_signalStringVoltage); + uint64_t data = (uint64_t)signalData; + return data; +} + +static uint64_t CANTX_CalculateStringCurrent(uint8_t stringNumber, const CAN_SHIM_s *const kpkCanShim) { + FAS_ASSERT(stringNumber < BS_NR_OF_STRINGS); + FAS_ASSERT(kpkCanShim != NULL_PTR); + + /* String current */ + float_t signalData = (float_t)kpkCanShim->pTablePackValues->stringCurrent_mA[stringNumber]; + CAN_TxPrepareSignalData(&signalData, cantx_signalStringCurrent); + uint64_t data = (uint64_t)signalData; + return data; +} + +static uint64_t CANTX_CalculateStringPower(uint8_t stringNumber, const CAN_SHIM_s *const kpkCanShim) { + FAS_ASSERT(stringNumber < BS_NR_OF_STRINGS); + FAS_ASSERT(kpkCanShim != NULL_PTR); + + /* String power */ + float_t signalData = (float_t)kpkCanShim->pTablePackValues->stringPower_W[stringNumber]; + CAN_TxPrepareSignalData(&signalData, cantx_signalStringPower); + uint64_t data = (uint64_t)signalData; + return data; +} + +static void CANTX_BuildString0Message( + uint64_t *pMessageData, + uint8_t stringNumber, + const CAN_SHIM_s *const kpkCanShim) { + FAS_ASSERT(pMessageData != NULL_PTR); + FAS_ASSERT(stringNumber < BS_NR_OF_STRINGS); + FAS_ASSERT(kpkCanShim != NULL_PTR); + + /* mux value */ + uint64_t signalData = stringNumber; + CAN_TxSetMessageDataWithSignalData( + pMessageData, CANTX_STRING_P0_MUX_START_BIT, CANTX_STRING_P0_MUX_LENGTH, signalData, CAN_BIG_ENDIAN); + + /* String voltage */ + signalData = CANTX_CalculateStringVoltage(stringNumber, kpkCanShim); + CAN_TxSetMessageDataWithSignalData( + pMessageData, + cantx_signalStringVoltage.bitStart, + cantx_signalStringVoltage.bitLength, + signalData, + CAN_BIG_ENDIAN); + + /* String Current */ + signalData = CANTX_CalculateStringCurrent(stringNumber, kpkCanShim); + CAN_TxSetMessageDataWithSignalData( + pMessageData, + cantx_signalStringCurrent.bitStart, + cantx_signalStringCurrent.bitLength, + signalData, + CAN_BIG_ENDIAN); + + /* String Power */ + signalData = CANTX_CalculateStringPower(stringNumber, kpkCanShim); + CAN_TxSetMessageDataWithSignalData( + pMessageData, cantx_signalStringPower.bitStart, cantx_signalStringPower.bitLength, signalData, CAN_BIG_ENDIAN); +} + +/*========== Extern Function Implementations ================================*/ +extern uint32_t CANTX_StringValuesP0( + CAN_MESSAGE_PROPERTIES_s message, + uint8_t *pCanData, + uint8_t *pMuxId, + const CAN_SHIM_s *const kpkCanShim) { + FAS_ASSERT(message.id == CANTX_STRING_VALUES_P0_ID); + FAS_ASSERT(message.idType == CANTX_STRING_VALUES_P0_ID_TYPE); + FAS_ASSERT(message.dlc == CAN_FOXBMS_MESSAGES_DEFAULT_DLC); + FAS_ASSERT(message.endianness == CANTX_STRING_VALUES_P0_ENDIANNESS); + FAS_ASSERT(pCanData != NULL_PTR); + FAS_ASSERT(pMuxId != NULL_PTR); + FAS_ASSERT(*pMuxId < BS_NR_OF_STRINGS); + FAS_ASSERT(kpkCanShim != NULL_PTR); + uint64_t messageData = 0u; + + const uint8_t stringNumber = *pMuxId; + + /* First signal to transmit cell voltages: get database values */ + if (stringNumber == 0u) { + /* Do not read pTableMsl and pTableErrorState as they already are read + * with a higher frequency from CANTX_BmsState callback */ + DATA_READ_DATA(kpkCanShim->pTablePackValues); + } + + /* set message data */ + CANTX_BuildString0Message(&messageData, stringNumber, kpkCanShim); + + /* now copy data in the buffer that will be used to send data */ + CAN_TxSetCanDataWithMessageData(messageData, pCanData, message.endianness); + + /* Increment multiplexer for next cell */ + (*pMuxId)++; + + /* Check mux value */ + if (*pMuxId >= BS_NR_OF_STRINGS) { + *pMuxId = 0u; + } + + return 0u; +} + +/*========== Externalized Static Function Implementations (Unit Test) =======*/ +#ifdef UNITY_UNIT_TEST +extern uint64_t TEST_CANTX_CalculateStringVoltage(uint8_t stringNumber, const CAN_SHIM_s *const kpkCanShim) { + return CANTX_CalculateStringVoltage(stringNumber, kpkCanShim); +} +extern uint64_t TEST_CANTX_CalculateStringCurrent(uint8_t stringNumber, const CAN_SHIM_s *const kpkCanShim) { + return CANTX_CalculateStringCurrent(stringNumber, kpkCanShim); +} +extern uint64_t TEST_CANTX_CalculateStringPower(uint8_t stringNumber, const CAN_SHIM_s *const kpkCanShim) { + return CANTX_CalculateStringPower(stringNumber, kpkCanShim); +} +extern void TEST_CANTX_BuildString0Message( + uint64_t *pMessageData, + uint8_t stringNumber, + const CAN_SHIM_s *const kpkCanShim) { + CANTX_BuildString0Message(pMessageData, stringNumber, kpkCanShim); +} +#endif diff --git a/src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_string-values-p1.c b/src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_string-values-p1.c new file mode 100644 index 00000000..7c036328 --- /dev/null +++ b/src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_string-values-p1.c @@ -0,0 +1,178 @@ +/** + * + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * We kindly request you to use one or more of the following phrases to refer to + * foxBMS in your hardware, software, documentation or advertising materials: + * + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" + * + */ + +/** + * @file can_cbs_tx_string-values-p1.c + * @author foxBMS Team + * @date 2023-05-31 (date of creation) + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS + * @prefix CANTX + * + * @brief CAN driver Tx callback implementation + * @details CAN Tx callback for pack value and string value messages + */ + +/*========== Includes =======================================================*/ +#include "can_cbs_tx_cyclic.h" +#include "can_cfg_tx-cyclic-message-definitions.h" +#include "can_helper.h" + +#include +#include + +/*========== Macros and Definitions =========================================*/ +/* configuration of the StringP1 message bits */ +#define CANTX_STRING_P1_STRING_MUX_START_BIT (7u) +#define CANTX_STRING_P1_STRING_MUX_LENGTH (4u) +#define CANTX_STRING_P1_ENERGY_COUNTER_START_BIT (15u) +#define CANTX_STRING_P1_ENERGY_COUNTER_LENGTH (32u) + +/*========== Static Constant and Variable Definitions =======================*/ + +/*========== Extern Constant and Variable Definitions =======================*/ + +/*========== Static Function Prototypes =====================================*/ +/** + * @brief sets multiplexer of StringP1 message to string number + */ +static void CANTX_SetStringP1Mux(uint64_t *pMessageData, uint64_t signalData); + +/** + * @brief sets energy counter value in StringP1 message + */ +static void CANTX_SetStringEnergyCounter( + uint64_t *pMessageData, + uint8_t stringNumber, + const CAN_SHIM_s *const kpkCanShim); + +/*========== Static Function Implementations ================================*/ +static void CANTX_SetStringP1Mux(uint64_t *pMessageData, uint64_t signalData) { + FAS_ASSERT(signalData < BS_NR_OF_STRINGS); + FAS_ASSERT(pMessageData != NULL_PTR); + + /* set data in CAN frame */ + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_STRING_P1_STRING_MUX_START_BIT, + CANTX_STRING_P1_STRING_MUX_LENGTH, + signalData, + CAN_BIG_ENDIAN); +} + +static void CANTX_SetStringEnergyCounter( + uint64_t *pMessageData, + uint8_t stringNumber, + const CAN_SHIM_s *const kpkCanShim) { + FAS_ASSERT(pMessageData != NULL_PTR); + FAS_ASSERT(stringNumber < BS_NR_OF_STRINGS); + FAS_ASSERT(kpkCanShim != NULL_PTR); + + /* String voltage */ + OS_EnterTaskCritical(); /* this access has to be protected as it conflicts with the 1ms task */ + uint64_t signalData = (uint64_t)kpkCanShim->pTableCurrentSensor->energyCounter_Wh[stringNumber]; + OS_ExitTaskCritical(); + + /* set data in CAN frame */ + CAN_TxSetMessageDataWithSignalData( + pMessageData, + CANTX_STRING_P1_ENERGY_COUNTER_START_BIT, + CANTX_STRING_P1_ENERGY_COUNTER_LENGTH, + signalData, + CAN_BIG_ENDIAN); +} + +/*========== Extern Function Implementations ================================*/ +extern uint32_t CANTX_StringValuesP1( + CAN_MESSAGE_PROPERTIES_s message, + uint8_t *pCanData, + uint8_t *pMuxId, + const CAN_SHIM_s *const kpkCanShim) { + FAS_ASSERT(message.id == CANTX_STRING_VALUES_P1_ID); + FAS_ASSERT(message.idType == CANTX_STRING_VALUES_P1_ID_TYPE); + FAS_ASSERT(message.dlc == CAN_FOXBMS_MESSAGES_DEFAULT_DLC); + FAS_ASSERT(pCanData != NULL_PTR); + FAS_ASSERT(pMuxId != NULL_PTR); + FAS_ASSERT(*pMuxId < BS_NR_OF_STRINGS); + FAS_ASSERT(kpkCanShim != NULL_PTR); + uint64_t messageData = 0u; + uint64_t signalData = 0u; + + const uint8_t stringNumber = *pMuxId; + + /* First signal to transmit cell voltages: get database values */ + if (stringNumber == 0u) { + /* Do not read pTableMsl and pTableErrorState as they already are read + * with a higher frequency from CANTX_BmsState callback */ + DATA_READ_DATA(kpkCanShim->pTableCurrentSensor); + } + + signalData = (uint64_t)stringNumber; + CANTX_SetStringP1Mux(&messageData, signalData); + CANTX_SetStringEnergyCounter(&messageData, stringNumber, kpkCanShim); + + /* now copy data in the buffer that will be used to send data */ + CAN_TxSetCanDataWithMessageData(messageData, pCanData, message.endianness); + + /* Increment multiplexer for next cell */ + (*pMuxId)++; + + /* Check mux value */ + if (*pMuxId >= BS_NR_OF_STRINGS) { + *pMuxId = 0u; + } + + return 0u; +} + +/*========== Externalized Static Function Implementations (Unit Test) =======*/ +#ifdef UNITY_UNIT_TEST +extern void TEST_CANTX_SetStringP1Mux(uint64_t *pMessageData, uint64_t signalData) { + CANTX_SetStringP1Mux(pMessageData, signalData); +} +extern void TEST_CANTX_SetStringEnergyCounter( + uint64_t *pMessageData, + uint8_t stringNumber, + const CAN_SHIM_s *const kpkCanShim) { + CANTX_SetStringEnergyCounter(pMessageData, stringNumber, kpkCanShim); +} +#endif diff --git a/src/app/driver/can/cbs/tx/can_cbs_tx.h b/src/app/driver/can/cbs/tx/can_cbs_tx.h deleted file mode 100644 index acdf5ae8..00000000 --- a/src/app/driver/can/cbs/tx/can_cbs_tx.h +++ /dev/null @@ -1,232 +0,0 @@ -/** - * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. - * All rights reserved. - * - * SPDX-License-Identifier: BSD-3-Clause - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * 3. Neither the name of the copyright holder nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * We kindly request you to use one or more of the following phrases to refer to - * foxBMS in your hardware, software, documentation or advertising materials: - * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ - * - */ - -/** - * @file can_cbs_tx.h - * @author foxBMS Team - * @date 2021-04-20 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup DRIVER - * @prefix CANTX - * - * @brief CAN callbacks header - * - */ - -#ifndef FOXBMS__CAN_CBS_TX_H_ -#define FOXBMS__CAN_CBS_TX_H_ - -/*========== Includes =======================================================*/ - -#include "can_cfg.h" - -#include - -/*========== Macros and Definitions =========================================*/ - -/*========== Extern Constant and Variable Declarations ======================*/ - -/*========== Extern Function Prototypes =====================================*/ -/** TX callback functions @{ */ -/** - * @brief can tx callback function for state - * @param[in] message contains the message ID, DLC and endianness - * @param[in] pCanData payload of can frame - * @param[in] pMuxId multiplexer for multiplexed CAN messages - * @param[in] kpkCanShim shim to the database entries - */ -extern uint32_t CANTX_BmsState( - CAN_MESSAGE_PROPERTIES_s message, - uint8_t *pCanData, - uint8_t *pMuxId, - const CAN_SHIM_s *const kpkCanShim); -/** - * @brief can tx callback function for detail state - * @param[in] message contains the message ID, DLC and endianness - * @param[in] pCanData payload of can frame - * @param[in] pMuxId multiplexer for multiplexed CAN messages - * @param[in] kpkCanShim shim to the database entries - */ -extern uint32_t CANTX_BmsStateDetails( - CAN_MESSAGE_PROPERTIES_s message, - uint8_t *pCanData, - uint8_t *pMuxId, - const CAN_SHIM_s *const kpkCanShim); -/** - * @brief can tx callback function for cell voltages - * @param[in] message contains the message ID, DLC and endianness - * @param[in] pCanData payload of can frame - * @param[in] pMuxId multiplexer for multiplexed CAN messages - * @param[in] kpkCanShim shim to the database entries - */ -extern uint32_t CANTX_CellVoltages( - CAN_MESSAGE_PROPERTIES_s message, - uint8_t *pCanData, - uint8_t *pMuxId, - const CAN_SHIM_s *const kpkCanShim); -/** - * @brief can tx callback function for cell temperatures - * @param[in] message contains the message ID, DLC and endianness - * @param[in] pCanData payload of can frame - * @param[in] pMuxId multiplexer for multiplexed CAN messages - * @param[in] kpkCanShim shim to the database entries - */ -extern uint32_t CANTX_CellTemperatures( - CAN_MESSAGE_PROPERTIES_s message, - uint8_t *pCanData, - uint8_t *pMuxId, - const CAN_SHIM_s *const kpkCanShim); -/** - * @brief can tx callback function for limit values - * @param[in] message contains the message ID, DLC and endianness - * @param[in] pCanData payload of can frame - * @param[in] pMuxId multiplexer for multiplexed CAN messages - * @param[in] kpkCanShim shim to the database entries - */ -extern uint32_t CANTX_LimitValues( - CAN_MESSAGE_PROPERTIES_s message, - uint8_t *pCanData, - uint8_t *pMuxId, - const CAN_SHIM_s *const kpkCanShim); -/** - * @brief can tx callback function for min/max values - * @param[in] message contains the message ID, DLC and endianness - * @param[in] pCanData payload of can frame - * @param[in] pMuxId multiplexer for multiplexed CAN messages - * @param[in] kpkCanShim shim to the database entries - */ -extern uint32_t CANTX_MinimumMaximumValues( - CAN_MESSAGE_PROPERTIES_s message, - uint8_t *pCanData, - uint8_t *pMuxId, - const CAN_SHIM_s *const kpkCanShim); -/** - * @brief can tx callback function for state estimation values - * @param[in] message contains the message ID, DLC and endianness - * @param[in] pCanData payload of can frame - * @param[in] pMuxId multiplexer for multiplexed CAN messages - * @param[in] kpkCanShim shim to the database entries - */ -extern uint32_t CANTX_PackStateEstimation( - CAN_MESSAGE_PROPERTIES_s message, - uint8_t *pCanData, - uint8_t *pMuxId, - const CAN_SHIM_s *const kpkCanShim); -/** - * @brief can tx callback function for pack values values - * @param[in] message contains the message ID, DLC and endianness - * @param[in] pCanData payload of can frame - * @param[in] pMuxId multiplexer for multiplexed CAN messages - * @param[in] kpkCanShim shim to the database entries - */ -extern uint32_t CANTX_PackValues( - CAN_MESSAGE_PROPERTIES_s message, - uint8_t *pCanData, - uint8_t *pMuxId, - const CAN_SHIM_s *const kpkCanShim); -/** - * @brief can tx callback function for string state values - * @param[in] message contains the message ID, DLC and endianness - * @param[in] pCanData payload of can frame - * @param[in] pMuxId multiplexer for multiplexed CAN messages - * @param[in] kpkCanShim shim to the database entries - */ -extern uint32_t CANTX_StringState( - CAN_MESSAGE_PROPERTIES_s message, - uint8_t *pCanData, - uint8_t *pMuxId, - const CAN_SHIM_s *const kpkCanShim); -/** - * @brief can tx callback function for string values - * @param[in] message contains the message ID, DLC and endianness - * @param[in] pCanData payload of can frame - * @param[in] pMuxId multiplexer for multiplexed CAN messages - * @param[in] kpkCanShim shim to the database entries - */ -extern uint32_t CANTX_StringValuesP0( - CAN_MESSAGE_PROPERTIES_s message, - uint8_t *pCanData, - uint8_t *pMuxId, - const CAN_SHIM_s *const kpkCanShim); -/** - * @brief can tx callback function for string minimum and maximum values - * @param[in] message contains the message ID, DLC and endianness - * @param[in] pCanData payload of can frame - * @param[in] pMuxId multiplexer for multiplexed CAN messages - * @param[in] kpkCanShim shim to the database entries - */ -extern uint32_t CANTX_StringMinimumMaximumValues( - CAN_MESSAGE_PROPERTIES_s message, - uint8_t *pCanData, - uint8_t *pMuxId, - const CAN_SHIM_s *const kpkCanShim); -/** - * @brief can tx callback function for string state estimation - * @param[in] message contains the message ID, DLC and endianness - * @param[in] pCanData payload of can frame - * @param[in] pMuxId multiplexer for multiplexed CAN messages - * @param[in] kpkCanShim shim to the database entries - */ -extern uint32_t CANTX_StringStateEstimation( - CAN_MESSAGE_PROPERTIES_s message, - uint8_t *pCanData, - uint8_t *pMuxId, - const CAN_SHIM_s *const kpkCanShim); -/** - * @brief can tx callback function for string values 2 - * @param[in] message contains the message ID, DLC and endianness - * @param[in] pCanData payload of can frame - * @param[in] pMuxId multiplexer for multiplexed CAN messages - * @param[in] kpkCanShim shim to the database entries - */ -extern uint32_t CANTX_StringValuesP1( - CAN_MESSAGE_PROPERTIES_s message, - uint8_t *pCanData, - uint8_t *pMuxId, - const CAN_SHIM_s *const kpkCanShim); -/** @} */ - -/*========== Externalized Static Functions Prototypes (Unit Test) ===========*/ -#ifdef UNITY_UNIT_TEST -#endif - -#endif /* FOXBMS__CAN_CBS_TX_H_ */ diff --git a/src/app/driver/can/cbs/tx/can_cbs_tx_bms-state-details.c b/src/app/driver/can/cbs/tx/can_cbs_tx_bms-state-details.c deleted file mode 100644 index a2864f66..00000000 --- a/src/app/driver/can/cbs/tx/can_cbs_tx_bms-state-details.c +++ /dev/null @@ -1,106 +0,0 @@ -/** - * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. - * All rights reserved. - * - * SPDX-License-Identifier: BSD-3-Clause - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * 3. Neither the name of the copyright holder nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * We kindly request you to use one or more of the following phrases to refer to - * foxBMS in your hardware, software, documentation or advertising materials: - * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ - * - */ - -/** - * @file can_cbs_tx_bms-state-details.c - * @author foxBMS Team - * @date 2021-07-21 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup DRIVER - * @prefix CANTX - * - * @brief CAN driver Tx callback implementation - * @details CAN Tx callback for state messages - */ - -/*========== Includes =======================================================*/ -#include "bms.h" -#include "can_cbs_tx.h" -#include "can_cfg_tx-message-definitions.h" -#include "can_helper.h" -#include "diag.h" -#include "sys_mon.h" - -#include -#include - -/*========== Macros and Definitions =========================================*/ -#define CANTX_BIT (1u) - -/** - * Configuration of the signals -*/ -#define CANTX_SIGNAL_TIMING_VIOLATION_100MS_ALGO_TASK_START_BIT (4u) -#define CANTX_SIGNAL_TIMING_VIOLATION_100MS_ALGO_TASK_LENGTH (CANTX_BIT) -#define CANTX_SIGNAL_TIMING_VIOLATION_100MS_TASK_START_BIT (3u) -#define CANTX_SIGNAL_TIMING_VIOLATION_100MS_TASK_LENGTH (CANTX_BIT) -#define CANTX_SIGNAL_TIMING_VIOLATION_10MS_TASK_START_BIT (2u) -#define CANTX_SIGNAL_TIMING_VIOLATION_10MS_TASK_LENGTH (CANTX_BIT) -#define CANTX_SIGNAL_TIMING_VIOLATION_1MS_TASK_START_BIT (1u) -#define CANTX_SIGNAL_TIMING_VIOLATION_1MS_TASK_LENGTH (CANTX_BIT) -#define CANTX_SIGNAL_TIMING_VIOLATION_ENGINE_TASK_START_BIT (0u) -#define CANTX_SIGNAL_TIMING_VIOLATION_ENGINE_TASK_LENGTH (CANTX_BIT) -#define CANTX_SIGNAL_TIMING_VIOLATION_100MS_ALGO_TASK_RECORDED_START_BIT (12u) -#define CANTX_SIGNAL_TIMING_VIOLATION_100MS_ALGO_TASK_RECORDED_LENGTH (CANTX_BIT) -#define CANTX_SIGNAL_TIMING_VIOLATION_100MS_TASK_RECORDED_START_BIT (11u) -#define CANTX_SIGNAL_TIMING_VIOLATION_100MS_TASK_RECORDED_LENGTH (CANTX_BIT) -#define CANTX_SIGNAL_TIMING_VIOLATION_10MS_TASK_RECORDED_START_BIT (10u) -#define CANTX_SIGNAL_TIMING_VIOLATION_10MS_TASK_RECORDED_LENGTH (CANTX_BIT) -#define CANTX_SIGNAL_TIMING_VIOLATION_1MS_TASK_RECORDED_START_BIT (9u) -#define CANTX_SIGNAL_TIMING_VIOLATION_1MS_TASK_RECORDED_LENGTH (CANTX_BIT) -#define CANTX_SIGNAL_TIMING_VIOLATION_ENGINE_TASK_RECORDED_START_BIT (8u) -#define CANTX_SIGNAL_TIMING_VIOLATION_ENGINE_TASK_RECORDED_LENGTH (CANTX_BIT) - -/*========== Static Constant and Variable Definitions =======================*/ - -/*========== Extern Constant and Variable Definitions =======================*/ - -/*========== Static Function Prototypes =====================================*/ - -/*========== Static Function Implementations ================================*/ - -/*========== Extern Function Implementations ================================*/ - -/*========== Externalized Static Function Implementations (Unit Test) =======*/ - -#ifdef UNITY_UNIT_TEST -#endif diff --git a/src/app/driver/can/cbs/tx/can_cbs_tx_bms-state.c b/src/app/driver/can/cbs/tx/can_cbs_tx_bms-state.c deleted file mode 100644 index 26ff4d01..00000000 --- a/src/app/driver/can/cbs/tx/can_cbs_tx_bms-state.c +++ /dev/null @@ -1,546 +0,0 @@ -/** - * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. - * All rights reserved. - * - * SPDX-License-Identifier: BSD-3-Clause - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * 3. Neither the name of the copyright holder nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * We kindly request you to use one or more of the following phrases to refer to - * foxBMS in your hardware, software, documentation or advertising materials: - * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ - * - */ - -/** - * @file can_cbs_tx_bms-state.c - * @author foxBMS Team - * @date 2021-07-21 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup DRIVER - * @prefix CANTX - * - * @brief CAN driver Tx callback implementation - * @details CAN Tx callback for state messages - */ - -/*========== Includes =======================================================*/ -#include "bms.h" -#include "can_cbs_tx.h" -#include "can_cfg_tx-message-definitions.h" -#include "can_helper.h" -#include "diag.h" -#include "sys_mon.h" - -#include -#include - -/*========== Macros and Definitions =========================================*/ - -/*========== Static Constant and Variable Definitions =======================*/ - -/*========== Extern Constant and Variable Definitions =======================*/ - -/*========== Static Function Prototypes =====================================*/ -/** get a boolean for if any timing error (current or recorded) occurred */ -static bool CANTX_AnySysMonTimingIssueDetected(const CAN_SHIM_s *const kpkCanShim); - -/*========== Static Function Implementations ================================*/ -static bool CANTX_AnySysMonTimingIssueDetected(const CAN_SHIM_s *const kpkCanShim) { - FAS_ASSERT(kpkCanShim != NULL_PTR); - SYSM_TIMING_VIOLATION_RESPONSE_s recordedTimingViolations = {0}; - SYSM_GetRecordedTimingViolations(&recordedTimingViolations); - - const bool anyTimingViolation = - (recordedTimingViolations.recordedViolationAny || - kpkCanShim->pTableErrorState->taskEngineTimingViolationError || - kpkCanShim->pTableErrorState->task1msTimingViolationError || - kpkCanShim->pTableErrorState->task10msTimingViolationError || - kpkCanShim->pTableErrorState->task100msTimingViolationError || - kpkCanShim->pTableErrorState->task100msAlgoTimingViolationError); - - return anyTimingViolation; -} - -/*========== Extern Function Implementations ================================*/ -extern uint32_t CANTX_BmsState( - CAN_MESSAGE_PROPERTIES_s message, - uint8_t *pCanData, - uint8_t *pMuxId, - const CAN_SHIM_s *const kpkCanShim) { - FAS_ASSERT(message.id == CANTX_BMS_STATE_ID); - FAS_ASSERT(message.dlc == CAN_FOXBMS_MESSAGES_DEFAULT_DLC); - FAS_ASSERT(pCanData != NULL_PTR); - FAS_ASSERT(pMuxId == NULL_PTR); /* pMuxId is not used here, therefore has to be NULL_PTR */ - FAS_ASSERT(kpkCanShim != NULL_PTR); - uint64_t messageData = 0u; - - DATA_READ_DATA(kpkCanShim->pTableErrorState, kpkCanShim->pTableInsulation, kpkCanShim->pTableMsl); - - /* AXIVION Disable Style Generic-NoMagicNumbers: Signal data defined in .dbc file. */ - /* State */ - uint64_t data = (uint64_t)BMS_GetState(); - /* set data in CAN frame */ - CAN_TxSetMessageDataWithSignalData(&messageData, 3u, 4u, data, message.endianness); - - /* Connected strings */ - data = (uint64_t)BMS_GetNumberOfConnectedStrings(); - /* set data in CAN frame */ - CAN_TxSetMessageDataWithSignalData(&messageData, 7u, 4u, data, message.endianness); - - /* General warning: TODO */ - - /* General error - implement now */ - data = CAN_ConvertBooleanToInteger(DIAG_IsAnyFatalErrorSet()); - CAN_TxSetMessageDataWithSignalData(&messageData, 10u, 1u, data, message.endianness); - - /* Emergency shutoff */ - data = CAN_ConvertBooleanToInteger(BMS_IsTransitionToErrorStateActive()); - CAN_TxSetMessageDataWithSignalData(&messageData, 11u, 1u, data, message.endianness); - - /* Number of deactivated strings: TODO */ - - /* sys mon error */ - data = CAN_ConvertBooleanToInteger(CANTX_AnySysMonTimingIssueDetected(kpkCanShim)); - CAN_TxSetMessageDataWithSignalData(&messageData, 12u, 1u, data, message.endianness); - - /* Insulation monitoring active */ - data = CAN_ConvertBooleanToInteger(kpkCanShim->pTableInsulation->isImdRunning); - CAN_TxSetMessageDataWithSignalData(&messageData, 13u, 1u, data, message.endianness); - - /* Error: insulation */ - data = CAN_ConvertBooleanToInteger(kpkCanShim->pTableErrorState->criticalLowInsulationResistanceError); - CAN_TxSetMessageDataWithSignalData(&messageData, 23u, 1u, data, message.endianness); - - /* Insulation resistance */ - float_t signalData = (float_t)kpkCanShim->pTableInsulation->insulationResistance_kOhm; - signalData = signalData * 0.1f; /* convert kOhm to 10kOhm */ - data = (uint64_t)signalData; - CAN_TxSetMessageDataWithSignalData(&messageData, 63u, 8u, data, message.endianness); - - /* Charging complete: TODO */ - - /* Heater state: TODO */ - /* Cooling state: TODO */ - - /* Error: Precharge voltage */ - data = 0u; /* No precharge error detected */ - for (uint8_t s = 0u; s < BS_NR_OF_STRINGS; s++) { - if (kpkCanShim->pTableErrorState->prechargeAbortedDueToVoltage[s] == true) { - data = 1u; - } - } - CAN_TxSetMessageDataWithSignalData(&messageData, 16u, 1u, data, message.endianness); - - /* Error: Precharge current */ - data = 0u; /* No precharge error detected */ - for (uint8_t s = 0u; s < BS_NR_OF_STRINGS; s++) { - if (kpkCanShim->pTableErrorState->prechargeAbortedDueToCurrent[s] == true) { - data = 1u; - } - } - CAN_TxSetMessageDataWithSignalData(&messageData, 17u, 1u, data, message.endianness); - - /* Error: MCU die temperature */ - data = CAN_ConvertBooleanToInteger(kpkCanShim->pTableErrorState->mcuDieTemperatureViolationError); - CAN_TxSetMessageDataWithSignalData(&messageData, 18u, 1u, data, message.endianness); - - /* Error: master overtemperature: TODO */ - /* Error: master undertemperature: TODO */ - - /* Main fuse state */ - data = CAN_ConvertBooleanToInteger(kpkCanShim->pTableErrorState->mainFuseError); - CAN_TxSetMessageDataWithSignalData(&messageData, 21u, 1u, data, message.endianness); - - /* Error: interlock */ - data = CAN_ConvertBooleanToInteger(kpkCanShim->pTableErrorState->interlockOpenedError); - CAN_TxSetMessageDataWithSignalData(&messageData, 22u, 1u, data, message.endianness); - - /* Error: Can timing */ - data = kpkCanShim->pTableErrorState->stateRequestTimingViolationError; - CAN_TxSetMessageDataWithSignalData(&messageData, 24u, 1u, data, message.endianness); - - /* Error: Overcurrent pack charge */ - data = kpkCanShim->pTableMsl->packChargeOvercurrent; - CAN_TxSetMessageDataWithSignalData(&messageData, 25u, 1u, data, message.endianness); - - /* Error: Overcurrent pack discharge */ - data = kpkCanShim->pTableMsl->packDischargeOvercurrent; - CAN_TxSetMessageDataWithSignalData(&messageData, 26u, 1u, data, message.endianness); - - /* Error: Alert flag */ - data = CAN_ConvertBooleanToInteger(kpkCanShim->pTableErrorState->alertFlagSetError); - CAN_TxSetMessageDataWithSignalData(&messageData, 27u, 1u, data, message.endianness); - - /* Error: NVRAM CRC */ - data = CAN_ConvertBooleanToInteger(kpkCanShim->pTableErrorState->framReadCrcError); - CAN_TxSetMessageDataWithSignalData(&messageData, 28u, 1u, data, message.endianness); - /* AXIVION Enable Style Generic-NoMagicNumbers: */ - - /* now copy data in the buffer that will be use to send data */ - CAN_TxSetCanDataWithMessageData(messageData, pCanData, message.endianness); - - return 0; -} - -extern uint32_t CANTX_BmsStateDetails( - CAN_MESSAGE_PROPERTIES_s message, - uint8_t *pCanData, - uint8_t *pMuxId, - const CAN_SHIM_s *const kpkCanShim) { - FAS_ASSERT(message.id == CANTX_BMS_STATE_DETAILS_ID); - FAS_ASSERT(message.idType == CANTX_BMS_STATE_DETAILS_ID_TYPE); - FAS_ASSERT(message.dlc == CAN_FOXBMS_MESSAGES_DEFAULT_DLC); - FAS_ASSERT(pCanData != NULL_PTR); - FAS_ASSERT(pMuxId == NULL_PTR); /* pMuxId is not used here, therefore has to be NULL_PTR */ - FAS_ASSERT(kpkCanShim != NULL_PTR); - uint64_t messageData = 0u; - - DATA_READ_DATA(kpkCanShim->pTableErrorState); - SYSM_TIMING_VIOLATION_RESPONSE_s recordedTimingViolations = {0}; - SYSM_GetRecordedTimingViolations(&recordedTimingViolations); - - /* AXIVION Disable Style Generic-NoMagicNumbers: Signal data defined in .dbc file. */ - /* current violation engine */ - uint64_t data = CAN_ConvertBooleanToInteger(kpkCanShim->pTableErrorState->taskEngineTimingViolationError); - CAN_TxSetMessageDataWithSignalData(&messageData, 0u, 1u, data, message.endianness); - /* current violation 1ms */ - data = CAN_ConvertBooleanToInteger(kpkCanShim->pTableErrorState->task1msTimingViolationError); - CAN_TxSetMessageDataWithSignalData(&messageData, 1u, 1u, data, message.endianness); - /* current violation 10ms */ - data = CAN_ConvertBooleanToInteger(kpkCanShim->pTableErrorState->task10msTimingViolationError); - CAN_TxSetMessageDataWithSignalData(&messageData, 2u, 1u, data, message.endianness); - /* current violation 100ms */ - data = CAN_ConvertBooleanToInteger(kpkCanShim->pTableErrorState->task100msTimingViolationError); - CAN_TxSetMessageDataWithSignalData(&messageData, 3u, 1u, data, message.endianness); - /* current violation 100ms algorithm */ - data = CAN_ConvertBooleanToInteger(kpkCanShim->pTableErrorState->task100msAlgoTimingViolationError); - CAN_TxSetMessageDataWithSignalData(&messageData, 4u, 1u, data, message.endianness); - - /* recorded violation engine */ - data = CAN_ConvertBooleanToInteger(recordedTimingViolations.recordedViolationEngine); - CAN_TxSetMessageDataWithSignalData(&messageData, 8u, 1u, data, message.endianness); - /* recorded violation 1ms */ - data = CAN_ConvertBooleanToInteger(recordedTimingViolations.recordedViolation1ms); - CAN_TxSetMessageDataWithSignalData(&messageData, 9u, 1u, data, message.endianness); - /* recorded violation 10ms */ - data = CAN_ConvertBooleanToInteger(recordedTimingViolations.recordedViolation10ms); - CAN_TxSetMessageDataWithSignalData(&messageData, 10u, 1u, data, message.endianness); - /* recorded violation 100ms */ - data = CAN_ConvertBooleanToInteger(recordedTimingViolations.recordedViolation100ms); - CAN_TxSetMessageDataWithSignalData(&messageData, 11u, 1u, data, message.endianness); - /* recorded violation 100ms algorithm */ - data = CAN_ConvertBooleanToInteger(recordedTimingViolations.recordedViolation100msAlgo); - CAN_TxSetMessageDataWithSignalData(&messageData, 12u, 1u, data, message.endianness); - /* AXIVION Enable Style Generic-NoMagicNumbers: */ - - /* now copy data in the buffer that will be use to send data */ - CAN_TxSetCanDataWithMessageData(messageData, pCanData, message.endianness); - - return 0; -} - -extern uint32_t CANTX_StringState( - CAN_MESSAGE_PROPERTIES_s message, - uint8_t *pCanData, - uint8_t *pMuxId, - const CAN_SHIM_s *const kpkCanShim) { - FAS_ASSERT(message.id == CANTX_STRING_STATE_ID); - FAS_ASSERT(message.idType == CANTX_STRING_STATE_ID_TYPE); - FAS_ASSERT(message.dlc == CAN_FOXBMS_MESSAGES_DEFAULT_DLC); - FAS_ASSERT(pCanData != NULL_PTR); - FAS_ASSERT(pMuxId != NULL_PTR); - FAS_ASSERT(*pMuxId < BS_NR_OF_STRINGS); - FAS_ASSERT(kpkCanShim != NULL_PTR); - uint64_t messageData = 0u; - uint64_t data = 0; - - const uint8_t stringNumber = *pMuxId; - - /* First signal to transmit cell voltages: get database values */ - if (stringNumber == 0u) { - /* Do not read pTableMsl and pTableErrorState as they already are read - * with a higher frequency from CAN_TxState callback */ - DATA_READ_DATA(kpkCanShim->pTableRsl, kpkCanShim->pTableMol); - } - - /* AXIVION Disable Style Generic-NoMagicNumbers: Signal data defined in .dbc file. */ - /* mux value */ - data = (uint64_t)stringNumber; - /* set data in CAN frame */ - CAN_TxSetMessageDataWithSignalData(&messageData, 3u, 4u, data, message.endianness); - - /* String connected */ - data = CAN_ConvertBooleanToInteger(BMS_IsStringClosed(stringNumber)); - CAN_TxSetMessageDataWithSignalData(&messageData, 4u, 1u, data, message.endianness); - - /* Balancing active: TODO */ - - /* String fuse blown */ - data = CAN_ConvertBooleanToInteger(kpkCanShim->pTableErrorState->stringFuseError[stringNumber]); - CAN_TxSetMessageDataWithSignalData(&messageData, 6u, 1u, data, message.endianness); - - /* Error: Deep-discharge */ - data = CAN_ConvertBooleanToInteger(kpkCanShim->pTableErrorState->deepDischargeDetectedError[stringNumber]); - CAN_TxSetMessageDataWithSignalData(&messageData, 7u, 1u, data, message.endianness); - - /* Error: Overtemperature charge */ - data = kpkCanShim->pTableMsl->overtemperatureCharge[stringNumber]; - CAN_TxSetMessageDataWithSignalData(&messageData, 8u, 1u, data, message.endianness); - - /* Error: Undertemperature charge */ - data = kpkCanShim->pTableMsl->undertemperatureCharge[stringNumber]; - CAN_TxSetMessageDataWithSignalData(&messageData, 9u, 1u, data, message.endianness); - - /* Error: Overtemperature discharge */ - data = kpkCanShim->pTableMsl->overtemperatureDischarge[stringNumber]; - CAN_TxSetMessageDataWithSignalData(&messageData, 10u, 1u, data, message.endianness); - - /* Error: Undertemperature discharge */ - data = kpkCanShim->pTableMsl->undertemperatureDischarge[stringNumber]; - CAN_TxSetMessageDataWithSignalData(&messageData, 11u, 1u, data, message.endianness); - - /* Error: Overcurrent charge */ - if ((kpkCanShim->pTableMsl->cellChargeOvercurrent[stringNumber] == 1u) || - (kpkCanShim->pTableMsl->stringChargeOvercurrent[stringNumber] == 1u)) { - data = 1u; - } else { - data = 0u; - } - CAN_TxSetMessageDataWithSignalData(&messageData, 12u, 1u, data, message.endianness); - - /* Error: Overcurrent discharge */ - if ((kpkCanShim->pTableMsl->cellDischargeOvercurrent[stringNumber] == 1u) || - (kpkCanShim->pTableMsl->stringDischargeOvercurrent[stringNumber] == 1u)) { - data = 1u; - } else { - data = 0u; - } - CAN_TxSetMessageDataWithSignalData(&messageData, 13u, 1u, data, message.endianness); - - /* Error: Overvoltage */ - data = kpkCanShim->pTableMsl->overVoltage[stringNumber]; - CAN_TxSetMessageDataWithSignalData(&messageData, 14u, 1u, data, message.endianness); - - /* Error: Undervoltage */ - data = kpkCanShim->pTableMsl->underVoltage[stringNumber]; - CAN_TxSetMessageDataWithSignalData(&messageData, 15u, 1u, data, message.endianness); - - /* Info: Overtemperature charge - MOL */ - data = kpkCanShim->pTableMol->overtemperatureCharge[stringNumber]; - CAN_TxSetMessageDataWithSignalData(&messageData, 16u, 1u, data, message.endianness); - - /* Info: Undertemperature charge - MOL */ - data = kpkCanShim->pTableMol->undertemperatureCharge[stringNumber]; - CAN_TxSetMessageDataWithSignalData(&messageData, 17u, 1u, data, message.endianness); - - /* Info: Overtemperature discharge - MOL */ - data = kpkCanShim->pTableMol->overtemperatureDischarge[stringNumber]; - CAN_TxSetMessageDataWithSignalData(&messageData, 18u, 1u, data, message.endianness); - - /* Info: Undertemperature discharge - MOL */ - data = kpkCanShim->pTableMol->undertemperatureCharge[stringNumber]; - CAN_TxSetMessageDataWithSignalData(&messageData, 19u, 1u, data, message.endianness); - - /* Info: Overcurrent charge - MOL */ - if ((kpkCanShim->pTableMol->cellChargeOvercurrent[stringNumber] == 1u) || - (kpkCanShim->pTableMol->stringChargeOvercurrent[stringNumber] == 1u)) { - data = 1u; - } else { - data = 0u; - } - CAN_TxSetMessageDataWithSignalData(&messageData, 20u, 1u, data, message.endianness); - - /* Info: Overcurrent discharge - MOL */ - if ((kpkCanShim->pTableMol->cellDischargeOvercurrent[stringNumber] == 1u) || - (kpkCanShim->pTableMol->stringDischargeOvercurrent[stringNumber] == 1u)) { - data = 1u; - } else { - data = 0u; - } - CAN_TxSetMessageDataWithSignalData(&messageData, 21u, 1u, data, message.endianness); - - /* Info: Overvoltage - MOL */ - data = kpkCanShim->pTableMol->overVoltage[stringNumber]; - CAN_TxSetMessageDataWithSignalData(&messageData, 22u, 1u, data, message.endianness); - - /* Info: Undervoltage - MOL */ - data = kpkCanShim->pTableMol->underVoltage[stringNumber]; - CAN_TxSetMessageDataWithSignalData(&messageData, 23u, 1u, data, message.endianness); - - /* Warning: Overtemperature charge - RSL */ - data = kpkCanShim->pTableRsl->overtemperatureCharge[stringNumber]; - CAN_TxSetMessageDataWithSignalData(&messageData, 24u, 1u, data, message.endianness); - - /* Warning: Undertemperature charge - RSL */ - data = kpkCanShim->pTableRsl->undertemperatureCharge[stringNumber]; - CAN_TxSetMessageDataWithSignalData(&messageData, 25u, 1u, data, message.endianness); - - /* Warning: Overtemperature discharge - RSL */ - data = kpkCanShim->pTableRsl->overtemperatureDischarge[stringNumber]; - CAN_TxSetMessageDataWithSignalData(&messageData, 26u, 1u, data, message.endianness); - - /* Warning: Undertemperature discharge - RSL */ - data = kpkCanShim->pTableRsl->undertemperatureDischarge[stringNumber]; - CAN_TxSetMessageDataWithSignalData(&messageData, 27u, 1u, data, message.endianness); - - /* Warning: Overcurrent charge - RSL */ - if ((kpkCanShim->pTableRsl->cellChargeOvercurrent[stringNumber] == 1u) || - (kpkCanShim->pTableRsl->stringChargeOvercurrent[stringNumber] == 1u)) { - data = 1u; - } else { - data = 0u; - } - CAN_TxSetMessageDataWithSignalData(&messageData, 28u, 1u, data, message.endianness); - - /* Warning: Overcurrent discharge - RSL */ - if ((kpkCanShim->pTableMol->cellDischargeOvercurrent[stringNumber] == 1u) || - (kpkCanShim->pTableMol->stringDischargeOvercurrent[stringNumber] == 1u)) { - data = 1u; - } else { - data = 0u; - } - CAN_TxSetMessageDataWithSignalData(&messageData, 29u, 1u, data, message.endianness); - - /* Warning: Overvoltage - RSL */ - data = kpkCanShim->pTableRsl->overVoltage[stringNumber]; - CAN_TxSetMessageDataWithSignalData(&messageData, 30u, 1u, data, message.endianness); - - /* Warning: Undervoltage - RSL */ - data = kpkCanShim->pTableRsl->underVoltage[stringNumber]; - CAN_TxSetMessageDataWithSignalData(&messageData, 31u, 1u, data, message.endianness); - - /* Error: Positive string contactor */ - data = CAN_ConvertBooleanToInteger( - kpkCanShim->pTableErrorState->contactorInPositivePathOfStringFeedbackError[stringNumber]); - CAN_TxSetMessageDataWithSignalData(&messageData, 32u, 1u, data, message.endianness); - - /* Error: Negative string contactor */ - data = CAN_ConvertBooleanToInteger( - kpkCanShim->pTableErrorState->contactorInNegativePathOfStringFeedbackError[stringNumber]); - CAN_TxSetMessageDataWithSignalData(&messageData, 33u, 1u, data, message.endianness); - - /* Error: Slave hardware: TODO */ - - /* Error: Daisy-chain base: communication */ - data = kpkCanShim->pTableErrorState->afeCommunicationSpiError[stringNumber]; - CAN_TxSetMessageDataWithSignalData(&messageData, 35u, 1u, data, message.endianness); - - /* Error: Daisy-chain redundancy: communication: TODO */ - /* Error: Daisy-chain base: CRC */ - data = kpkCanShim->pTableErrorState->afeCommunicationCrcError[stringNumber]; - CAN_TxSetMessageDataWithSignalData(&messageData, 37u, 1u, data, message.endianness); - - /* Error: Daisy-chain redundancy: CRC: TODO */ - /* Error: Daisy-chain base: Voltage out of operating range */ - data = kpkCanShim->pTableErrorState->afeCellVoltageInvalidError[stringNumber]; - CAN_TxSetMessageDataWithSignalData(&messageData, 39u, 1u, data, message.endianness); - - /* Error: Daisy-chain redundancy: Voltage out of operating range: TODO */ - /* Error: Daisy-chain base: Temperature out of operating range */ - data = kpkCanShim->pTableErrorState->afeCellTemperatureInvalidError[stringNumber]; - CAN_TxSetMessageDataWithSignalData(&messageData, 41u, 1u, data, message.endianness); - - /* Error: Daisy-chain redundancy: Voltage out of operating range: TODO */ - - /* Error: current measurement */ - if ((kpkCanShim->pTableErrorState->currentMeasurementInvalidError[stringNumber] == true) || - (kpkCanShim->pTableErrorState->currentMeasurementTimeoutError[stringNumber] == true)) { - data = 1u; - } else { - data = 0u; - } - CAN_TxSetMessageDataWithSignalData(&messageData, 43u, 1u, data, message.endianness); - - /* Error: Coulomb counting measurement */ - data = kpkCanShim->pTableErrorState->currentSensorCoulombCounterTimeoutError[stringNumber]; - CAN_TxSetMessageDataWithSignalData(&messageData, 44u, 1u, data, message.endianness); - - /* Error: Energy counting measurement */ - data = kpkCanShim->pTableErrorState->currentSensorEnergyCounterTimeoutError[stringNumber]; - CAN_TxSetMessageDataWithSignalData(&messageData, 45u, 1u, data, message.endianness); - - /* Error: Current sensor V1 measurement */ - data = kpkCanShim->pTableErrorState->currentSensorVoltage1TimeoutError[stringNumber]; - CAN_TxSetMessageDataWithSignalData(&messageData, 46u, 1u, data, message.endianness); - - /* Error: Current sensor V2 measurement */ - data = kpkCanShim->pTableErrorState->currentSensorVoltage2TimeoutError[stringNumber]; - CAN_TxSetMessageDataWithSignalData(&messageData, 47u, 1u, data, message.endianness); - - /* Error: Current sensor V3 measurement */ - data = kpkCanShim->pTableErrorState->currentSensorVoltage3TimeoutError[stringNumber]; - CAN_TxSetMessageDataWithSignalData(&messageData, 48u, 1u, data, message.endianness); - - /* Error: Open wire */ - data = kpkCanShim->pTableErrorState->openWireDetectedError[stringNumber]; - CAN_TxSetMessageDataWithSignalData(&messageData, 49u, 1u, data, message.endianness); - - /* Error: Plausibility: Cell temperature */ - data = kpkCanShim->pTableErrorState->plausibilityCheckCellTemperatureError[stringNumber]; - CAN_TxSetMessageDataWithSignalData(&messageData, 51u, 1u, data, message.endianness); - - /* Error: Plausibility: Cell voltage */ - data = kpkCanShim->pTableErrorState->plausibilityCheckCellVoltageError[stringNumber]; - CAN_TxSetMessageDataWithSignalData(&messageData, 52u, 1u, data, message.endianness); - - /* Error: Plausibility: String voltage */ - data = kpkCanShim->pTableErrorState->plausibilityCheckPackVoltageError[stringNumber]; - CAN_TxSetMessageDataWithSignalData(&messageData, 53u, 1u, data, message.endianness); - - /* Error: Plausibility: Cell temperature spread */ - data = kpkCanShim->pTableErrorState->plausibilityCheckCellTemperatureSpreadError[stringNumber]; - CAN_TxSetMessageDataWithSignalData(&messageData, 54u, 1u, data, message.endianness); - - /* Error: Plausibility: Cell voltage spread */ - data = kpkCanShim->pTableErrorState->plausibilityCheckCellVoltageSpreadError[stringNumber]; - CAN_TxSetMessageDataWithSignalData(&messageData, 55u, 1u, data, message.endianness); - /* AXIVION Enable Style Generic-NoMagicNumbers: */ - - /* Open wire number: TODO */ - - /* now copy data in the buffer that will be used to send data */ - CAN_TxSetCanDataWithMessageData(messageData, pCanData, message.endianness); - - /* Increment multiplexer for next cell */ - (*pMuxId)++; - - /* Check mux value */ - if (*pMuxId >= BS_NR_OF_STRINGS) { - *pMuxId = 0u; - } - - return 0; -} - -/*========== Externalized Static Function Implementations (Unit Test) =======*/ -#ifdef UNITY_UNIT_TEST -#endif diff --git a/src/app/driver/can/cbs/tx/can_cbs_tx_cell-temperatures.c b/src/app/driver/can/cbs/tx/can_cbs_tx_cell-temperatures.c deleted file mode 100644 index 8c82ce1d..00000000 --- a/src/app/driver/can/cbs/tx/can_cbs_tx_cell-temperatures.c +++ /dev/null @@ -1,269 +0,0 @@ -/** - * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. - * All rights reserved. - * - * SPDX-License-Identifier: BSD-3-Clause - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * 3. Neither the name of the copyright holder nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * We kindly request you to use one or more of the following phrases to refer to - * foxBMS in your hardware, software, documentation or advertising materials: - * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ - * - */ - -/** - * @file can_cbs_tx_cell-temperatures.c - * @author foxBMS Team - * @date 2021-04-20 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup DRIVER - * @prefix CANTX - * - * @brief CAN driver Tx callback implementation - * @details CAN Tx callback for cell temperatures - */ - -/*========== Includes =======================================================*/ -#include "can_cbs_tx.h" -#include "can_cfg_tx-message-definitions.h" -#include "can_helper.h" -#include "foxmath.h" - -#include -#include - -/*========== Macros and Definitions =========================================*/ - -/*========== Static Constant and Variable Definitions =======================*/ - -/** - * CAN signals used in this message - * Parameters: - * bit start, bit length, factor, offset, minimum value, maximum value - */ -static const CAN_SIGNAL_TYPE_s cantx_cellTemperatureMultiplexer = {7u, 8u, 1.0f, 0.0f, 0.0f, 1.0f}; -static const CAN_SIGNAL_TYPE_s cantx_cell0TemperatureInvalidFlag = {8u, 1u, 1.0f, 0.0f, 0.0f, 1.0f}; -static const CAN_SIGNAL_TYPE_s cantx_cell1TemperatureInvalidFlag = {9u, 1u, 1.0f, 0.0f, 0.0f, 1.0f}; -static const CAN_SIGNAL_TYPE_s cantx_cell2TemperatureInvalidFlag = {10u, 1u, 1.0f, 0.0f, 0.0f, 1.0f}; -static const CAN_SIGNAL_TYPE_s cantx_cell3TemperatureInvalidFlag = {11u, 1u, 1.0f, 0.0f, 0.0f, 1.0f}; -static const CAN_SIGNAL_TYPE_s cantx_cell4TemperatureInvalidFlag = {12u, 1u, 1.0f, 0.0f, 0.0f, 1.0f}; -static const CAN_SIGNAL_TYPE_s cantx_cell5TemperatureInvalidFlag = {13u, 1u, 1.0f, 0.0f, 0.0f, 1.0f}; -static const CAN_SIGNAL_TYPE_s cantx_cell0Temperature_degC = {23u, 8u, 1.0f, 0.0f, -128.0f, 127.0f}; -static const CAN_SIGNAL_TYPE_s cantx_cell1Temperature_degC = {31u, 8u, 1.0f, 0.0f, -128.0f, 127.0f}; -static const CAN_SIGNAL_TYPE_s cantx_cell2Temperature_degC = {39u, 8u, 1.0f, 0.0f, -128.0f, 127.0f}; -static const CAN_SIGNAL_TYPE_s cantx_cell3Temperature_degC = {47u, 8u, 1.0f, 0.0f, -128.0f, 127.0f}; -static const CAN_SIGNAL_TYPE_s cantx_cell4Temperature_degC = {55u, 8u, 1.0f, 0.0f, -128.0f, 127.0f}; -static const CAN_SIGNAL_TYPE_s cantx_cell5Temperature_degC = {63u, 8u, 1.0f, 0.0f, -128.0f, 127.0f}; - -/*========== Extern Constant and Variable Definitions =======================*/ - -/*========== Static Function Prototypes =====================================*/ - -/** - * @brief Helper function for CANTX_CellTemperatures() - * - * Used in the CANTX_CellTemperatures() callback to set - * invalid flag data and temperature data - * in the CAN frame. - * - * @param[in] muxId multiplexer value - * @param[in] pMessage pointer to CAN frame data - * @param[in] cellTemperatureSignal signal characteristics for temperature data - * @param[in] cellTemperatureInvalidFlagSignal signal characteristics for invalid flag data - * @param[in] endianness big or little endianness of data - * @param[in] kpkCanShim shim to the database entries - */ -static void CANTX_TemperatureSetData( - uint8_t muxId, - uint64_t *pMessage, - CAN_SIGNAL_TYPE_s cellTemperatureSignal, - CAN_SIGNAL_TYPE_s cellTemperatureInvalidFlagSignal, - CAN_ENDIANNESS_e endianness, - const CAN_SHIM_s *const kpkCanShim); - -/*========== Static Function Implementations ================================*/ - -static void CANTX_TemperatureSetData( - uint8_t muxId, - uint64_t *pMessage, - CAN_SIGNAL_TYPE_s cellTemperatureSignal, - CAN_SIGNAL_TYPE_s cellTemperatureInvalidFlagSignal, - CAN_ENDIANNESS_e endianness, - const CAN_SHIM_s *const kpkCanShim) { - /* sensor index must not be greater than the number of sensors */ - if (muxId < BS_NR_OF_TEMP_SENSORS) { - /* start_index end_index module - * 00 17 module1 - * 18 35 module2 - * 20 53 module3 - * 30 71 module4 - */ - /* start_index end_index string - * 000 071 string0 - */ - - /* Get string, module and cell number */ - const uint8_t stringNumber = DATA_GetStringNumberFromTemperatureIndex(muxId); - const uint8_t moduleNumber = DATA_GetModuleNumberFromTemperatureIndex(muxId); - const uint8_t sensorNumber = DATA_GetSensorNumberFromTemperatureIndex(muxId); - - uint32_t signalData_valid; - /* Valid bits data */ - if ((kpkCanShim->pTableCellTemperature->invalidCellTemperature[stringNumber][moduleNumber] & - (1u << sensorNumber)) == 0u) { - signalData_valid = 0u; - } else { - signalData_valid = 1u; - } - /* Set valid bit data in CAN frame */ - CAN_TxSetMessageDataWithSignalData( - pMessage, - cellTemperatureInvalidFlagSignal.bitStart, - cellTemperatureInvalidFlagSignal.bitLength, - signalData_valid, - endianness); - - /* Temperature data */ - float_t signalData_degC = - (float_t)kpkCanShim->pTableCellTemperature->cellTemperature_ddegC[stringNumber][moduleNumber][sensorNumber]; - signalData_degC /= UNIT_CONVERSION_FACTOR_10_FLOAT; /* Convert temperature from decidegC to degC */ - /* Apply offset and factor, check min/max limits */ - CAN_TxPrepareSignalData(&signalData_degC, cellTemperatureSignal); - /* Set temperature data in CAN frame */ - CAN_TxSetMessageDataWithSignalData( - pMessage, - cellTemperatureSignal.bitStart, - cellTemperatureSignal.bitLength, - (int32_t)signalData_degC, - endianness); - } -} - -/*========== Extern Function Implementations ================================*/ -extern uint32_t CANTX_CellTemperatures( - CAN_MESSAGE_PROPERTIES_s message, - uint8_t *pCanData, - uint8_t *pMuxId, - const CAN_SHIM_s *const kpkCanShim) { - FAS_ASSERT(message.id == CANTX_CELL_TEMPERATURES_ID); - FAS_ASSERT(message.idType == CANTX_CELL_TEMPERATURES_ID_TYPE); - FAS_ASSERT(message.dlc == CAN_FOXBMS_MESSAGES_DEFAULT_DLC); - FAS_ASSERT(pCanData != NULL_PTR); - FAS_ASSERT(pMuxId != NULL_PTR); - FAS_ASSERT(kpkCanShim != NULL_PTR); - uint64_t messageData = 0u; - - /* Reset mux if maximum was reached */ - if (*pMuxId >= BS_NR_OF_TEMP_SENSORS) { - *pMuxId = 0u; - } - - /* first signal to transmit cell voltages: get database values */ - if (*pMuxId == 0u) { - DATA_READ_DATA(kpkCanShim->pTableCellTemperature); - } - - /* Set mux signal in CAN frame */ - uint32_t signalData = *pMuxId / 6u; /* 6 temperatures per module */ - CAN_TxSetMessageDataWithSignalData( - &messageData, - cantx_cellTemperatureMultiplexer.bitStart, - cantx_cellTemperatureMultiplexer.bitLength, - signalData, - message.endianness); - - /* Set other signals in CAN frame */ - /* Each temperature frame contains 6 temperatures, with a correspond invalid flag*/ - CANTX_TemperatureSetData( - *pMuxId, - &messageData, - cantx_cell0Temperature_degC, - cantx_cell0TemperatureInvalidFlag, - message.endianness, - kpkCanShim); - /* Increment multiplexer for next cell */ - (*pMuxId)++; - CANTX_TemperatureSetData( - *pMuxId, - &messageData, - cantx_cell1Temperature_degC, - cantx_cell1TemperatureInvalidFlag, - message.endianness, - kpkCanShim); - /* Increment multiplexer for next cell */ - (*pMuxId)++; - CANTX_TemperatureSetData( - *pMuxId, - &messageData, - cantx_cell2Temperature_degC, - cantx_cell2TemperatureInvalidFlag, - message.endianness, - kpkCanShim); - /* Increment multiplexer for next cell */ - (*pMuxId)++; - CANTX_TemperatureSetData( - *pMuxId, - &messageData, - cantx_cell3Temperature_degC, - cantx_cell3TemperatureInvalidFlag, - message.endianness, - kpkCanShim); - /* Increment multiplexer for next cell */ - (*pMuxId)++; - CANTX_TemperatureSetData( - *pMuxId, - &messageData, - cantx_cell4Temperature_degC, - cantx_cell4TemperatureInvalidFlag, - message.endianness, - kpkCanShim); - /* Increment multiplexer for next cell */ - (*pMuxId)++; - CANTX_TemperatureSetData( - *pMuxId, - &messageData, - cantx_cell5Temperature_degC, - cantx_cell5TemperatureInvalidFlag, - message.endianness, - kpkCanShim); - /* Increment multiplexer for next cell */ - (*pMuxId)++; - - /* All signal data copied in CAN frame, now copy data in the buffer that will be use to send the frame */ - CAN_TxSetCanDataWithMessageData(messageData, pCanData, message.endianness); - - return 0; -} - -/*========== Externalized Static Function Implementations (Unit Test) =======*/ -#ifdef UNITY_UNIT_TEST -#endif diff --git a/src/app/driver/can/cbs/tx/can_cbs_tx_pack-limits.c b/src/app/driver/can/cbs/tx/can_cbs_tx_pack-limits.c deleted file mode 100644 index b56ca5a3..00000000 --- a/src/app/driver/can/cbs/tx/can_cbs_tx_pack-limits.c +++ /dev/null @@ -1,141 +0,0 @@ -/** - * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. - * All rights reserved. - * - * SPDX-License-Identifier: BSD-3-Clause - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * 3. Neither the name of the copyright holder nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * We kindly request you to use one or more of the following phrases to refer to - * foxBMS in your hardware, software, documentation or advertising materials: - * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ - * - */ - -/** - * @file can_cbs_tx_pack-limits.c - * @author foxBMS Team - * @date 2021-07-21 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup DRIVER - * @prefix CANTX - * - * @brief CAN driver Tx callback implementation - * @details CAN Tx callback for state messages - */ - -/*========== Includes =======================================================*/ -#include "battery_cell_cfg.h" - -#include "can_cbs_tx.h" -#include "can_cfg_tx-message-definitions.h" -#include "can_helper.h" - -#include -#include - -/*========== Macros and Definitions =========================================*/ - -/*========== Static Constant and Variable Definitions =======================*/ - -/*========== Extern Constant and Variable Definitions =======================*/ - -/*========== Static Function Prototypes =====================================*/ - -/*========== Static Function Implementations ================================*/ - -/*========== Extern Function Implementations ================================*/ -extern uint32_t CANTX_LimitValues( - CAN_MESSAGE_PROPERTIES_s message, - uint8_t *pCanData, - uint8_t *pMuxId, - const CAN_SHIM_s *const kpkCanShim) { - /* pMuxId is not used here, therefore has to be NULL_PTR */ - FAS_ASSERT(pMuxId == NULL_PTR); - FAS_ASSERT(message.id == CANTX_LIMIT_VALUES_ID); - FAS_ASSERT(message.idType == CANTX_LIMIT_VALUES_ID_TYPE); - FAS_ASSERT(message.dlc == CAN_FOXBMS_MESSAGES_DEFAULT_DLC); - FAS_ASSERT(pCanData != NULL_PTR); - FAS_ASSERT(kpkCanShim != NULL_PTR); - uint64_t messageData = 0u; - - DATA_READ_DATA(kpkCanShim->pTableSof); - - /* AXIVION Disable Style Generic-NoMagicNumbers: Signal data defined in .dbc file. */ - /* maximum charge current */ - float_t signalData = (float_t)kpkCanShim->pTableSof->recommendedContinuousPackChargeCurrent_mA; - float_t offset = 0.0f; - float_t factor = 0.004f; /* convert mA to 250mA */ - signalData = (signalData + offset) * factor; - uint64_t data = (int64_t)signalData; - /* set data in CAN frame */ - CAN_TxSetMessageDataWithSignalData(&messageData, 11u, 12u, data, message.endianness); - - /* maximum discharge current */ - signalData = (float_t)kpkCanShim->pTableSof->recommendedContinuousPackDischargeCurrent_mA; - offset = 0.0f; - factor = 0.004f; /* convert mA to 250mA */ - signalData = (signalData + offset) * factor; - data = (int64_t)signalData; - /* set data in CAN frame */ - CAN_TxSetMessageDataWithSignalData(&messageData, 7u, 12u, data, message.endianness); - - /* TODO: maximum charge power */ - /* TODO: maximum discharge power */ - - /* minimum pack voltage */ - signalData = (float_t)(BS_NR_OF_CELL_BLOCKS_PER_STRING * BC_VOLTAGE_MIN_MSL_mV); - offset = 0.0f; - factor = 0.00025f; /* convert mV to 4V */ - signalData = (signalData + offset) * factor; - data = (int64_t)signalData; - /* set data in CAN frame */ - CAN_TxSetMessageDataWithSignalData(&messageData, 63u, 8u, data, message.endianness); - - /* maximum pack voltage */ - signalData = (float_t)(BS_NR_OF_CELL_BLOCKS_PER_STRING * BC_VOLTAGE_MAX_MSL_mV); - offset = 0.0f; - factor = 0.00025f; /* convert mV to 4V */ - signalData = (signalData + offset) * factor; - data = (int64_t)signalData; - /* set data in CAN frame */ - CAN_TxSetMessageDataWithSignalData(&messageData, 55u, 8u, data, message.endianness); - /* AXIVION Enable Style Generic-NoMagicNumbers: */ - - /* now copy data in the buffer that will be used to send data */ - CAN_TxSetCanDataWithMessageData(messageData, pCanData, message.endianness); - - return 0; -} - -/*========== Externalized Static Function Implementations (Unit Test) =======*/ -#ifdef UNITY_UNIT_TEST -#endif diff --git a/src/app/driver/can/cbs/tx/can_cbs_tx_pack-minimum-maximum-values.c b/src/app/driver/can/cbs/tx/can_cbs_tx_pack-minimum-maximum-values.c deleted file mode 100644 index 2180488d..00000000 --- a/src/app/driver/can/cbs/tx/can_cbs_tx_pack-minimum-maximum-values.c +++ /dev/null @@ -1,248 +0,0 @@ -/** - * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. - * All rights reserved. - * - * SPDX-License-Identifier: BSD-3-Clause - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * 3. Neither the name of the copyright holder nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * We kindly request you to use one or more of the following phrases to refer to - * foxBMS in your hardware, software, documentation or advertising materials: - * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ - * - */ - -/** - * @file can_cbs_tx_pack-minimum-maximum-values.c - * @author foxBMS Team - * @date 2021-04-20 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup DRIVER - * @prefix CANTX - * - * @brief CAN driver Tx callback implementation - * @details CAN Tx callback for min/max values - */ - -/*========== Includes =======================================================*/ -#include "bms.h" -#include "can_cbs_tx.h" -#include "can_cfg_tx-message-definitions.h" -#include "can_helper.h" - -#include -#include - -/*========== Macros and Definitions =========================================*/ - -/*========== Static Constant and Variable Definitions =======================*/ - -/*========== Extern Constant and Variable Definitions =======================*/ - -/*========== Static Function Prototypes =====================================*/ - -/*========== Static Function Implementations ================================*/ - -/*========== Extern Function Implementations ================================*/ -extern uint32_t CANTX_MinimumMaximumValues( - CAN_MESSAGE_PROPERTIES_s message, - uint8_t *pCanData, - uint8_t *pMuxId, - const CAN_SHIM_s *const kpkCanShim) { - FAS_ASSERT(message.id == CANTX_MINIMUM_MAXIMUM_VALUES_ID); - FAS_ASSERT(message.idType == CANTX_MINIMUM_MAXIMUM_VALUES_ID_TYPE); - FAS_ASSERT(message.dlc == CAN_FOXBMS_MESSAGES_DEFAULT_DLC); - FAS_ASSERT(pCanData != NULL_PTR); - FAS_ASSERT(pMuxId == NULL_PTR); /* pMuxId is not used here, therefore has to be NULL_PTR */ - FAS_ASSERT(kpkCanShim != NULL_PTR); - uint64_t messageData = 0u; - - DATA_READ_DATA(kpkCanShim->pTableMinMax); - - int16_t packMaximumVoltage_mV = INT16_MIN; - int16_t packMinimumVoltage_mV = INT16_MAX; - int16_t packMaximumTemperature_ddegC = INT16_MIN; - int16_t packMinimumTemperature_ddegC = INT16_MAX; - - if (0u == BMS_GetNumberOfConnectedStrings()) { - /* Calculate min/max values of complete pack if all slice switches are open */ - for (uint8_t s = 0u; s < BS_NR_OF_STRINGS; s++) { - if (kpkCanShim->pTableMinMax->maximumCellVoltage_mV[s] >= packMaximumVoltage_mV) { - packMaximumVoltage_mV = kpkCanShim->pTableMinMax->maximumCellVoltage_mV[s]; - } - if (kpkCanShim->pTableMinMax->minimumCellVoltage_mV[s] <= packMinimumVoltage_mV) { - packMinimumVoltage_mV = kpkCanShim->pTableMinMax->minimumCellVoltage_mV[s]; - } - if (kpkCanShim->pTableMinMax->maximumTemperature_ddegC[s] >= packMaximumTemperature_ddegC) { - packMaximumTemperature_ddegC = kpkCanShim->pTableMinMax->maximumTemperature_ddegC[s]; - } - if (kpkCanShim->pTableMinMax->minimumTemperature_ddegC[s] <= packMinimumTemperature_ddegC) { - packMinimumTemperature_ddegC = kpkCanShim->pTableMinMax->minimumTemperature_ddegC[s]; - } - } - } else { - /* Calculate min/max values of connected slices */ - for (uint8_t s = 0u; s < BS_NR_OF_STRINGS; s++) { - if (BMS_IsStringClosed(s) == true) { - if (kpkCanShim->pTableMinMax->maximumCellVoltage_mV[s] >= packMaximumVoltage_mV) { - packMaximumVoltage_mV = kpkCanShim->pTableMinMax->maximumCellVoltage_mV[s]; - } - if (kpkCanShim->pTableMinMax->minimumCellVoltage_mV[s] <= packMinimumVoltage_mV) { - packMinimumVoltage_mV = kpkCanShim->pTableMinMax->minimumCellVoltage_mV[s]; - } - if (kpkCanShim->pTableMinMax->maximumTemperature_ddegC[s] >= packMaximumTemperature_ddegC) { - packMaximumTemperature_ddegC = kpkCanShim->pTableMinMax->maximumTemperature_ddegC[s]; - } - if (kpkCanShim->pTableMinMax->minimumTemperature_ddegC[s] <= packMinimumTemperature_ddegC) { - packMinimumTemperature_ddegC = kpkCanShim->pTableMinMax->minimumTemperature_ddegC[s]; - } - } - } - } - - /* AXIVION Disable Style Generic-NoMagicNumbers: Signal data defined in .dbc file. */ - /* Minimum cell voltage */ - float_t signalData = (float_t)packMinimumVoltage_mV; - float_t offset = 0.0f; - float_t factor = 1.0f; - signalData = (signalData + offset) * factor; - uint64_t data = (int64_t)signalData; - /* set data in CAN frame */ - CAN_TxSetMessageDataWithSignalData(&messageData, 10u, 13u, data, message.endianness); - - /* Maximum cell voltage */ - signalData = (float_t)packMaximumVoltage_mV; - offset = 0.0f; - factor = 1.0f; - signalData = (signalData + offset) * factor; - data = (int64_t)signalData; - /* set data in CAN frame */ - CAN_TxSetMessageDataWithSignalData(&messageData, 7u, 13u, data, message.endianness); - - /* Minimum cell temperature */ - signalData = (float_t)packMinimumTemperature_ddegC; - offset = 0.0f; - factor = 0.1f; /* convert ddegC to degC */ - signalData = (signalData + offset) * factor; - data = (int64_t)signalData; - /* set data in CAN frame */ - CAN_TxSetMessageDataWithSignalData(&messageData, 63u, 8u, data, message.endianness); - - /* Maximum cell temperature */ - signalData = (float_t)packMaximumTemperature_ddegC; - offset = 0.0f; - factor = 0.1f; /* convert ddegC to degC */ - signalData = (signalData + offset) * factor; - data = (int64_t)signalData; - /* set data in CAN frame */ - CAN_TxSetMessageDataWithSignalData(&messageData, 55u, 8u, data, message.endianness); - /* AXIVION Enable Style Generic-NoMagicNumbers: */ - - /* now copy data in the buffer that will be used to send data */ - CAN_TxSetCanDataWithMessageData(messageData, pCanData, message.endianness); - - return 0; -} - -extern uint32_t CANTX_StringMinimumMaximumValues( - CAN_MESSAGE_PROPERTIES_s message, - uint8_t *pCanData, - uint8_t *pMuxId, - const CAN_SHIM_s *const kpkCanShim) { - FAS_ASSERT(message.id == CANTX_STRING_MIN_MAX_VALUES_ID); - FAS_ASSERT(message.idType == CANTX_STRING_MIN_MAX_VALUES_ID_TYPE); - FAS_ASSERT(message.dlc == CAN_FOXBMS_MESSAGES_DEFAULT_DLC); - FAS_ASSERT(pCanData != NULL_PTR); - FAS_ASSERT(pMuxId != NULL_PTR); - FAS_ASSERT(*pMuxId < BS_NR_OF_STRINGS); - FAS_ASSERT(kpkCanShim != NULL_PTR); - uint64_t messageData = 0u; - - /** Database entry with minimum and maximum values does not need to be read - * within this callback as it is already read by function - * #CANTX_MinimumMaximumValues */ - const uint8_t stringNumber = *pMuxId; - - /* AXIVION Disable Style Generic-NoMagicNumbers: Signal data defined in .dbc file. */ - /* Minimum cell voltage */ - float_t signalData = (float_t)kpkCanShim->pTableMinMax->minimumCellVoltage_mV[stringNumber]; - float_t offset = 0.0f; - float_t factor = 1.0f; - signalData = (signalData + offset) * factor; - uint64_t data = (int64_t)signalData; - /* set data in CAN frame */ - CAN_TxSetMessageDataWithSignalData(&messageData, 18u, 13u, data, message.endianness); - - /* Maximum cell voltage */ - signalData = (float_t)kpkCanShim->pTableMinMax->maximumCellVoltage_mV[stringNumber]; - offset = 0.0f; - factor = 1.0f; - signalData = (signalData + offset) * factor; - data = (int64_t)signalData; - /* set data in CAN frame */ - CAN_TxSetMessageDataWithSignalData(&messageData, 15u, 13u, data, message.endianness); - - /* Minimum cell temperature */ - signalData = (float_t)kpkCanShim->pTableMinMax->minimumTemperature_ddegC[stringNumber]; - offset = 0.0f; - factor = 0.2f; /* convert ddegC to 0.5degC */ - signalData = (signalData + offset) * factor; - data = (int64_t)signalData; - /* set data in CAN frame */ - CAN_TxSetMessageDataWithSignalData(&messageData, 44u, 9u, data, message.endianness); - - /* Maximum cell temperature */ - signalData = (float_t)kpkCanShim->pTableMinMax->maximumTemperature_ddegC[stringNumber]; - offset = 0.0f; - factor = 0.2f; /* convert ddegC to 0.5degC */ - signalData = (signalData + offset) * factor; - data = (int64_t)signalData; - /* set data in CAN frame */ - CAN_TxSetMessageDataWithSignalData(&messageData, 37, 9u, data, message.endianness); - /* AXIVION Enable Style Generic-NoMagicNumbers: */ - - /* now copy data in the buffer that will be use to send data */ - CAN_TxSetCanDataWithMessageData(messageData, pCanData, message.endianness); - - /* Increment multiplexer for next cell */ - (*pMuxId)++; - - /* Check mux value */ - if (*pMuxId >= BS_NR_OF_STRINGS) { - *pMuxId = 0u; - } - - return 0; -} - -/*========== Externalized Static Function Implementations (Unit Test) =======*/ -#ifdef UNITY_UNIT_TEST -#endif diff --git a/src/app/driver/can/cbs/tx/can_cbs_tx_pack-state-estimation.c b/src/app/driver/can/cbs/tx/can_cbs_tx_pack-state-estimation.c deleted file mode 100644 index 33fa621f..00000000 --- a/src/app/driver/can/cbs/tx/can_cbs_tx_pack-state-estimation.c +++ /dev/null @@ -1,194 +0,0 @@ -/** - * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. - * All rights reserved. - * - * SPDX-License-Identifier: BSD-3-Clause - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * 3. Neither the name of the copyright holder nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * We kindly request you to use one or more of the following phrases to refer to - * foxBMS in your hardware, software, documentation or advertising materials: - * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ - * - */ - -/** - * @file can_cbs_tx_pack-state-estimation.c - * @author foxBMS Team - * @date 2021-07-21 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup DRIVER - * @prefix CANTX - * - * @brief CAN driver Tx callback implementation - * @details CAN Tx callback for state estimation messages - */ - -/*========== Includes =======================================================*/ -#include "bms.h" -#include "can_cbs_tx.h" -#include "can_cfg_tx-message-definitions.h" -#include "can_helper.h" -#include "foxmath.h" - -#include -#include - -/*========== Macros and Definitions =========================================*/ - -/*========== Static Constant and Variable Definitions =======================*/ - -/*========== Extern Constant and Variable Definitions =======================*/ - -/*========== Static Function Prototypes =====================================*/ - -/*========== Static Function Implementations ================================*/ - -/*========== Extern Function Implementations ================================*/ -extern uint32_t CANTX_PackStateEstimation( - CAN_MESSAGE_PROPERTIES_s message, - uint8_t *pCanData, - uint8_t *pMuxId, - const CAN_SHIM_s *const kpkCanShim) { - FAS_ASSERT(message.id == CANTX_PACK_STATE_ESTIMATION_ID); - FAS_ASSERT(message.idType == CANTX_PACK_STATE_ESTIMATION_ID_TYPE); - FAS_ASSERT(message.dlc <= CAN_MAX_DLC); - FAS_ASSERT(pCanData != NULL_PTR); - FAS_ASSERT(pMuxId == NULL_PTR); /* pMuxId is not used here, therefore has to be NULL_PTR */ - FAS_ASSERT(kpkCanShim != NULL_PTR); - uint64_t messageData = 0u; - - float_t minimumStringSoc_perc = FLT_MAX; - float_t maximumStringSoc_perc = FLT_MIN; - float_t minimumStringSoe_perc = FLT_MAX; - float_t maximumStringSoe_perc = FLT_MIN; - uint32_t minimumStringEnergy_Wh = UINT32_MAX; - - DATA_READ_DATA(kpkCanShim->pTableSoc, kpkCanShim->pTableSoe); - - /* Check current direction */ - if (BMS_GetBatterySystemState() == BMS_CHARGING) { - /* If battery system is charging use maximum values */ - for (uint8_t s = 0u; s < BS_NR_OF_STRINGS; s++) { - if (BMS_IsStringClosed(s) == true) { - if (maximumStringSoc_perc < kpkCanShim->pTableSoc->maximumSoc_perc[s]) { - maximumStringSoc_perc = kpkCanShim->pTableSoc->maximumSoc_perc[s]; - } - if (maximumStringSoe_perc < kpkCanShim->pTableSoe->maximumSoe_perc[s]) { - maximumStringSoe_perc = kpkCanShim->pTableSoe->maximumSoe_perc[s]; - } - if (minimumStringEnergy_Wh > kpkCanShim->pTableSoe->minimumSoe_Wh[s]) { - minimumStringEnergy_Wh = kpkCanShim->pTableSoe->minimumSoe_Wh[s]; - } - } - } - } else { - /* If battery system is discharging or at rest use minimum values */ - for (uint8_t s = 0u; s < BS_NR_OF_STRINGS; s++) { - if (BMS_IsStringClosed(s) == true) { - if (minimumStringSoc_perc > kpkCanShim->pTableSoc->minimumSoc_perc[s]) { - minimumStringSoc_perc = kpkCanShim->pTableSoc->minimumSoc_perc[s]; - } - if (minimumStringSoe_perc > kpkCanShim->pTableSoe->minimumSoe_perc[s]) { - minimumStringSoe_perc = kpkCanShim->pTableSoe->minimumSoe_perc[s]; - } - if (minimumStringEnergy_Wh > kpkCanShim->pTableSoe->minimumSoe_Wh[s]) { - minimumStringEnergy_Wh = kpkCanShim->pTableSoe->minimumSoe_Wh[s]; - } - } - } - } - - float_t packSoc_perc = 0.0f; - float_t packSoe_perc = 0.0f; - uint32_t packEnergyLeft_Wh = 0u; - - /* Calculate pack value */ - if (BMS_GetNumberOfConnectedStrings() != 0u) { - if (BMS_GetBatterySystemState() == BMS_CHARGING) { - packSoc_perc = (BMS_GetNumberOfConnectedStrings() * maximumStringSoc_perc) / BS_NR_OF_STRINGS; - packSoe_perc = (BMS_GetNumberOfConnectedStrings() * maximumStringSoe_perc) / BS_NR_OF_STRINGS; - } else { - packSoc_perc = (BMS_GetNumberOfConnectedStrings() * minimumStringSoc_perc) / BS_NR_OF_STRINGS; - packSoe_perc = (BMS_GetNumberOfConnectedStrings() * minimumStringSoe_perc) / BS_NR_OF_STRINGS; - } - packEnergyLeft_Wh = BMS_GetNumberOfConnectedStrings() * minimumStringEnergy_Wh; - } else { - packSoc_perc = 0.0f; - packSoe_perc = 0.0f; - packEnergyLeft_Wh = 0u; - } - - /* SOC */ - float_t signalData = packSoc_perc; - float_t offset = 0.0f; - float_t factor = 100.0f; /* convert from perc to 0.01perc */ - signalData = (signalData + offset) * factor; - uint64_t data = (int64_t)signalData; - /* set data in CAN frame */ - CAN_TxSetMessageDataWithSignalData(&messageData, 7u, 14u, data, message.endianness); - - /* SOE */ - signalData = packSoe_perc; - offset = 0.0f; - factor = 100.0f; /* convert from perc to 0.01perc */ - signalData = (signalData + offset) * factor; - data = (int64_t)signalData; - /* set data in CAN frame */ - CAN_TxSetMessageDataWithSignalData(&messageData, 9u, 14u, data, message.endianness); - - /* Pack energy */ - signalData = packEnergyLeft_Wh; - offset = 0.0f; - factor = 0.1f; /* convert from Wh to 10Wh */ - signalData = (signalData + offset) * factor; - data = (int64_t)signalData; - /* set data in CAN frame */ - CAN_TxSetMessageDataWithSignalData(&messageData, 47u, 24u, data, message.endianness); - - /* SOH */ - signalData = 100.0f; /* TODO */ - offset = 0.0f; - factor = 1.0f / 0.025f; /* convert from perc to 0.025% */ - signalData = (signalData + offset) * factor; - data = (int64_t)signalData; - /* set data in CAN frame */ - CAN_TxSetMessageDataWithSignalData(&messageData, 27u, 12u, data, message.endianness); - - /* now copy data in the buffer that will be used to send data */ - CAN_TxSetCanDataWithMessageData(messageData, pCanData, message.endianness); - - return 0; -} - -/*========== Externalized Static Function Implementations (Unit Test) =======*/ -#ifdef UNITY_UNIT_TEST -#endif diff --git a/src/app/driver/can/cbs/tx/can_cbs_tx_pack-values-p0.c b/src/app/driver/can/cbs/tx/can_cbs_tx_pack-values-p0.c deleted file mode 100644 index 5fae299b..00000000 --- a/src/app/driver/can/cbs/tx/can_cbs_tx_pack-values-p0.c +++ /dev/null @@ -1,265 +0,0 @@ -/** - * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. - * All rights reserved. - * - * SPDX-License-Identifier: BSD-3-Clause - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * 3. Neither the name of the copyright holder nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * We kindly request you to use one or more of the following phrases to refer to - * foxBMS in your hardware, software, documentation or advertising materials: - * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ - * - */ - -/** - * @file can_cbs_tx_pack-values-p0.c - * @author foxBMS Team - * @date 2021-07-21 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup DRIVER - * @prefix CANTX - * - * @brief CAN driver Tx callback implementation - * @details CAN Tx callback for pack value and string value messages - */ - -/*========== Includes =======================================================*/ -#include "can_cbs_tx.h" -#include "can_cfg_tx-message-definitions.h" -#include "can_helper.h" - -#include -#include - -/*========== Macros and Definitions =========================================*/ - -/*========== Static Constant and Variable Definitions =======================*/ - -/*========== Extern Constant and Variable Definitions =======================*/ - -/*========== Static Function Prototypes =====================================*/ - -/*========== Static Function Implementations ================================*/ - -/*========== Extern Function Implementations ================================*/ -extern uint32_t CANTX_PackValues( - CAN_MESSAGE_PROPERTIES_s message, - uint8_t *pCanData, - uint8_t *pMuxId, - const CAN_SHIM_s *const kpkCanShim) { - /* pMuxId is not used here, therefore has to be NULL_PTR */ - FAS_ASSERT(pMuxId == NULL_PTR); - - FAS_ASSERT(message.id == CANTX_PACK_VALUES_ID); - FAS_ASSERT(message.idType == CANTX_PACK_VALUES_ID_TYPE); - FAS_ASSERT(message.dlc == CAN_FOXBMS_MESSAGES_DEFAULT_DLC); - FAS_ASSERT(pCanData != NULL_PTR); - FAS_ASSERT(kpkCanShim != NULL_PTR); - uint64_t messageData = 0u; - - /* Read database entry */ - DATA_READ_DATA(kpkCanShim->pTablePackValues); - - /* AXIVION Disable Style Generic-NoMagicNumbers: Signal data defined in .dbc file. */ - /* Battery voltage */ - float_t signalData = kpkCanShim->pTablePackValues->batteryVoltage_mV; - float_t offset = 0.0f; - float_t factor = 0.01f; /* convert mV to 100mV */ - signalData = (signalData + offset) * factor; - uint64_t data = (uint64_t)signalData; - /* set data in CAN frame */ - CAN_TxSetMessageDataWithSignalData(&messageData, 7u, 14u, data, message.endianness); - - /* System voltage */ - signalData = kpkCanShim->pTablePackValues->highVoltageBusVoltage_mV; - offset = 0.0f; - factor = 0.01f; /* convert mV to 100mV */ - signalData = (signalData + offset) * factor; - data = (uint64_t)signalData; - /* set data in CAN frame */ - CAN_TxSetMessageDataWithSignalData(&messageData, 9u, 14u, data, message.endianness); - - /* System current */ - signalData = kpkCanShim->pTablePackValues->packCurrent_mA; - offset = 0.0f; - factor = 0.1f; /* convert mA to 10mA */ - signalData = (signalData + offset) * factor; - data = (int64_t)signalData; - /* set data in CAN frame */ - CAN_TxSetMessageDataWithSignalData(&messageData, 41u, 18u, data, message.endianness); - - /* System power */ - signalData = kpkCanShim->pTablePackValues->packPower_W; - offset = 0.0f; - factor = 0.1f; /* convert W to 10W */ - signalData = (signalData + offset) * factor; - data = (int64_t)signalData; - /* set data in CAN frame */ - CAN_TxSetMessageDataWithSignalData(&messageData, 27u, 18u, data, message.endianness); - /* AXIVION Enable Style Generic-NoMagicNumbers: */ - - /* now copy data in the buffer that will be used to send data */ - CAN_TxSetCanDataWithMessageData(messageData, pCanData, message.endianness); - - return 0; -} - -extern uint32_t CANTX_StringValuesP0( - CAN_MESSAGE_PROPERTIES_s message, - uint8_t *pCanData, - uint8_t *pMuxId, - const CAN_SHIM_s *const kpkCanShim) { - FAS_ASSERT(message.id == CANTX_STRING_VALUES_P0_ID); - FAS_ASSERT(message.idType == CANTX_STRING_VALUES_P0_ID_TYPE); - FAS_ASSERT(message.dlc == CAN_FOXBMS_MESSAGES_DEFAULT_DLC); - FAS_ASSERT(pCanData != NULL_PTR); - FAS_ASSERT(pMuxId != NULL_PTR); - FAS_ASSERT(*pMuxId < BS_NR_OF_STRINGS); - FAS_ASSERT(kpkCanShim != NULL_PTR); - uint64_t messageData = 0u; - uint64_t data = 0; - float_t signalData = 0.0f; - float_t offset = 0.0f; - float_t factor = 0.0f; - - const uint8_t stringNumber = *pMuxId; - - /* First signal to transmit cell voltages: get database values */ - if (stringNumber == 0u) { - /* Do not read pTableMsl and pTableErrorState as they already are read - * with a higher frequency from CANTX_BmsState callback */ - DATA_READ_DATA(kpkCanShim->pTablePackValues); - } - - /* mux value */ - data = (uint64_t)stringNumber; - /* set data in CAN frame */ - /* AXIVION Disable Style Generic-NoMagicNumbers: Signal data defined in .dbc file. */ - CAN_TxSetMessageDataWithSignalData(&messageData, 7u, 3u, data, message.endianness); - - /* String voltage */ - signalData = (float_t)kpkCanShim->pTablePackValues->stringVoltage_mV[stringNumber]; - offset = 0.0f; - factor = 0.1f; /* convert mV to 10mV */ - signalData = (signalData + offset) * factor; - data = (int64_t)signalData; - /* set data in CAN frame */ - CAN_TxSetMessageDataWithSignalData(&messageData, 4u, 17u, data, message.endianness); - - /* String current */ - signalData = (float_t)kpkCanShim->pTablePackValues->stringCurrent_mA[stringNumber]; - offset = 0.0f; - factor = 0.1f; /* convert mA to 10mA */ - signalData = (signalData + offset) * factor; - data = (int64_t)signalData; - /* set data in CAN frame */ - CAN_TxSetMessageDataWithSignalData(&messageData, 19u, 18u, data, message.endianness); - - /* String power */ - signalData = (float_t)kpkCanShim->pTablePackValues->stringPower_W[stringNumber]; - offset = 0.0f; - factor = 0.1f; /* convert W to 10W */ - signalData = (signalData + offset) * factor; - data = (int64_t)signalData; - /* set data in CAN frame */ - CAN_TxSetMessageDataWithSignalData(&messageData, 33u, 18u, data, message.endianness); - /* AXIVION Enable Style Generic-NoMagicNumbers: */ - - /* now copy data in the buffer that will be used to send data */ - CAN_TxSetCanDataWithMessageData(messageData, pCanData, message.endianness); - - /* Increment multiplexer for next cell */ - (*pMuxId)++; - - /* Check mux value */ - if (*pMuxId >= BS_NR_OF_STRINGS) { - *pMuxId = 0u; - } - - return 0; -} - -extern uint32_t CANTX_StringValuesP1( - CAN_MESSAGE_PROPERTIES_s message, - uint8_t *pCanData, - uint8_t *pMuxId, - const CAN_SHIM_s *const kpkCanShim) { - FAS_ASSERT(message.id == CANTX_STRING_VALUES_P1_ID); - FAS_ASSERT(message.idType == CANTX_STRING_VALUES_P1_ID_TYPE); - FAS_ASSERT(message.dlc == CAN_FOXBMS_MESSAGES_DEFAULT_DLC); - FAS_ASSERT(pCanData != NULL_PTR); - FAS_ASSERT(pMuxId != NULL_PTR); - FAS_ASSERT(*pMuxId < BS_NR_OF_STRINGS); - FAS_ASSERT(kpkCanShim != NULL_PTR); - uint64_t messageData = 0u; - uint64_t signalData = 0u; - - const uint8_t stringNumber = *pMuxId; - - /* First signal to transmit cell voltages: get database values */ - if (stringNumber == 0u) { - /* Do not read pTableMsl and pTableErrorState as they already are read - * with a higher frequency from CANTX_BmsState callback */ - DATA_READ_DATA(kpkCanShim->pTableCurrentSensor); - } - - /* mux value */ - signalData = (uint64_t)stringNumber; - /* set data in CAN frame */ - /* AXIVION Disable Style Generic-NoMagicNumbers: Signal data defined in .dbc file. */ - CAN_TxSetMessageDataWithSignalData(&messageData, 7u, 4u, signalData, message.endianness); - - /* String voltage */ - OS_EnterTaskCritical(); /* this access has to be protected as it conflicts with the 1ms task */ - signalData = (int64_t)kpkCanShim->pTableCurrentSensor->energyCounter_Wh[stringNumber]; - OS_ExitTaskCritical(); - /* set data in CAN frame */ - CAN_TxSetMessageDataWithSignalData(&messageData, 15u, 32u, signalData, message.endianness); - /* AXIVION Enable Style Generic-NoMagicNumbers: */ - - /* now copy data in the buffer that will be used to send data */ - CAN_TxSetCanDataWithMessageData(messageData, pCanData, message.endianness); - - /* Increment multiplexer for next cell */ - (*pMuxId)++; - - /* Check mux value */ - if (*pMuxId >= BS_NR_OF_STRINGS) { - *pMuxId = 0u; - } - - return 0; -} - -/*========== Externalized Static Function Implementations (Unit Test) =======*/ -#ifdef UNITY_UNIT_TEST -#endif diff --git a/src/app/driver/can/cbs/tx/can_cbs_tx_string-state-estimation.c b/src/app/driver/can/cbs/tx/can_cbs_tx_string-state-estimation.c deleted file mode 100644 index 8b750109..00000000 --- a/src/app/driver/can/cbs/tx/can_cbs_tx_string-state-estimation.c +++ /dev/null @@ -1,176 +0,0 @@ -/** - * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. - * All rights reserved. - * - * SPDX-License-Identifier: BSD-3-Clause - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * 3. Neither the name of the copyright holder nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * We kindly request you to use one or more of the following phrases to refer to - * foxBMS in your hardware, software, documentation or advertising materials: - * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ - * - */ - -/** - * @file can_cbs_tx_string-state-estimation.c - * @author foxBMS Team - * @date 2021-07-21 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup DRIVER - * @prefix CANTX - * - * @brief CAN driver Tx callback implementation - * @details CAN Tx callback for state estimation messages - */ - -/*========== Includes =======================================================*/ -#include "bms.h" -#include "can_cbs_tx.h" -#include "can_cfg_tx-message-definitions.h" -#include "can_helper.h" -#include "foxmath.h" - -#include -#include - -/*========== Macros and Definitions =========================================*/ - -/*========== Static Constant and Variable Definitions =======================*/ - -/*========== Extern Constant and Variable Definitions =======================*/ - -/*========== Static Function Prototypes =====================================*/ - -/*========== Static Function Implementations ================================*/ - -/*========== Extern Function Implementations ================================*/ - -extern uint32_t CANTX_StringStateEstimation( - CAN_MESSAGE_PROPERTIES_s message, - uint8_t *pCanData, - uint8_t *pMuxId, - const CAN_SHIM_s *const kpkCanShim) { - FAS_ASSERT(message.id == CANTX_STRING_STATE_ESTIMATION_ID); - FAS_ASSERT(message.idType == CANTX_STRING_STATE_ESTIMATION_ID_TYPE); - FAS_ASSERT(message.dlc == CAN_FOXBMS_MESSAGES_DEFAULT_DLC); - FAS_ASSERT(pCanData != NULL_PTR); - FAS_ASSERT(pMuxId != NULL_PTR); - FAS_ASSERT(*pMuxId < BS_NR_OF_STRINGS); - FAS_ASSERT(kpkCanShim != NULL_PTR); - uint64_t messageData = 0u; - - /** Database entry with state estimation values does not need to be read - * within this callback as it is already read by function - * #CANTX_PackStateEstimation */ - const uint8_t stringNumber = *pMuxId; - - /* set multiplexer in CAN frame */ - /* AXIVION Disable Style Generic-NoMagicNumbers: Signal data defined in .dbc file. */ - uint64_t data = (uint64_t)stringNumber; - CAN_TxSetMessageDataWithSignalData(&messageData, 7u, 4u, data, message.endianness); - - /* Minimum SOC */ - float_t signalData = kpkCanShim->pTableSoc->minimumSoc_perc[stringNumber]; - float_t offset = 0.0f; - float_t factor = 4.0f; /* convert from perc to 0.25perc */ - signalData = (signalData + offset) * factor; - data = (int64_t)signalData; - /* set data in CAN frame */ - CAN_TxSetMessageDataWithSignalData(&messageData, 3u, 9u, data, message.endianness); - - /* Average SOC */ - signalData = kpkCanShim->pTableSoc->averageSoc_perc[stringNumber]; - offset = 0.0f; - factor = 4.0f; /* convert from perc to 0.25perc */ - signalData = (signalData + offset) * factor; - data = (int64_t)signalData; - /* set data in CAN frame */ - CAN_TxSetMessageDataWithSignalData(&messageData, 10u, 9u, data, message.endianness); - - /* Maximum SOC */ - signalData = kpkCanShim->pTableSoc->maximumSoc_perc[stringNumber]; - offset = 0.0f; - factor = 4.0f; /* convert from perc to 0.25perc */ - signalData = (signalData + offset) * factor; - data = (int64_t)signalData; - /* set data in CAN frame */ - CAN_TxSetMessageDataWithSignalData(&messageData, 17u, 9u, data, message.endianness); - - /* SOE */ - if (BMS_CHARGING == BMS_GetCurrentFlowDirection(kpkCanShim->pTablePackValues->stringCurrent_mA[stringNumber])) { - signalData = kpkCanShim->pTableSoe->maximumSoe_perc[stringNumber]; - } else { - signalData = kpkCanShim->pTableSoe->minimumSoe_perc[stringNumber]; - } - offset = 0.0f; - factor = 4.0f; /* convert from perc to 0.25perc */ - signalData = (signalData + offset) * factor; - data = (int64_t)signalData; - /* set data in CAN frame */ - CAN_TxSetMessageDataWithSignalData(&messageData, 24u, 9u, data, message.endianness); - - /* SOH */ - signalData = 100.0f; - offset = 0.0f; - factor = 4.0f; /* convert from perc to 0.25perc */ - signalData = (signalData + offset) * factor; - data = (int64_t)signalData; - /* set data in CAN frame */ - CAN_TxSetMessageDataWithSignalData(&messageData, 47u, 9u, data, message.endianness); - - /* String energy */ - signalData = kpkCanShim->pTableSoe->minimumSoe_Wh[stringNumber]; - offset = 0.0f; - factor = 0.1f; /* convert from Wh to 10Wh */ - signalData = (signalData + offset) * factor; - data = (int64_t)signalData; - /* set data in CAN frame */ - CAN_TxSetMessageDataWithSignalData(&messageData, 54u, 15u, data, message.endianness); - /* AXIVION Enable Style Generic-NoMagicNumbers: */ - - /* now copy data in the buffer that will be used to send data */ - CAN_TxSetCanDataWithMessageData(messageData, pCanData, message.endianness); - - /* Increment multiplexer for next cell */ - (*pMuxId)++; - - /* Check mux value */ - if (*pMuxId >= BS_NR_OF_STRINGS) { - *pMuxId = 0u; - } - - return 0; -} - -/*========== Externalized Static Function Implementations (Unit Test) =======*/ -#ifdef UNITY_UNIT_TEST -#endif diff --git a/src/app/driver/can/cbs/tx/can_cbs_tx_string-values-p0.c b/src/app/driver/can/cbs/tx/can_cbs_tx_string-values-p0.c deleted file mode 100644 index ecaebcc5..00000000 --- a/src/app/driver/can/cbs/tx/can_cbs_tx_string-values-p0.c +++ /dev/null @@ -1,86 +0,0 @@ -/** - * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. - * All rights reserved. - * - * SPDX-License-Identifier: BSD-3-Clause - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * 3. Neither the name of the copyright holder nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * We kindly request you to use one or more of the following phrases to refer to - * foxBMS in your hardware, software, documentation or advertising materials: - * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ - * - */ - -/** - * @file can_cbs_tx_string-values-p0.c - * @author foxBMS Team - * @date 2023-05-31 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup DRIVER - * @prefix CANTX - * - * @brief CAN driver Tx callback implementation - * @details CAN Tx callback for pack value and string value messages - */ - -/*========== Includes =======================================================*/ -#include "can_cbs_tx.h" -#include "can_cfg_tx-message-definitions.h" -#include "can_helper.h" - -#include -#include - -/*========== Macros and Definitions =========================================*/ -/* configuration of the StringP0 message bits */ -#define CANTX_STRING_P0_MUX_START_BIT (7u) -#define CANTX_STRING_P0_MUX_LENGTH (4u) -#define CANTX_STRING_P0_VOLTAGE_START_BIT (4u) -#define CANTX_STRING_P0_VOLTAGE_LENGTH (17u) -#define CANTX_STRING_P0_CURRENT_START_BIT (19u) -#define CANTX_STRING_P0_CURRENT_LENGTH (18u) -#define CANTX_STRING_P0_POWER_START_BIT (33u) -#define CANTX_STRING_P0_POWER_LENGTH (18u) - -/*========== Static Constant and Variable Definitions =======================*/ - -/*========== Extern Constant and Variable Definitions =======================*/ - -/*========== Static Function Prototypes =====================================*/ - -/*========== Static Function Implementations ================================*/ - -/*========== Extern Function Implementations ================================*/ - -/*========== Externalized Static Function Implementations (Unit Test) =======*/ -#ifdef UNITY_UNIT_TEST -#endif diff --git a/src/app/driver/can/cbs/tx/can_cbs_tx_string-values-p1.c b/src/app/driver/can/cbs/tx/can_cbs_tx_string-values-p1.c deleted file mode 100644 index 13ff5d62..00000000 --- a/src/app/driver/can/cbs/tx/can_cbs_tx_string-values-p1.c +++ /dev/null @@ -1,82 +0,0 @@ -/** - * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. - * All rights reserved. - * - * SPDX-License-Identifier: BSD-3-Clause - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * 3. Neither the name of the copyright holder nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * We kindly request you to use one or more of the following phrases to refer to - * foxBMS in your hardware, software, documentation or advertising materials: - * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ - * - */ - -/** - * @file can_cbs_tx_string-values-p1.c - * @author foxBMS Team - * @date 2023-05-31 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup DRIVER - * @prefix CANTX - * - * @brief CAN driver Tx callback implementation - * @details CAN Tx callback for pack value and string value messages - */ - -/*========== Includes =======================================================*/ -#include "can_cbs_tx.h" -#include "can_cfg_tx-message-definitions.h" -#include "can_helper.h" - -#include -#include - -/*========== Macros and Definitions =========================================*/ -/* configuration of the StringP1 message bits */ -#define CANTX_STRING_P1_STRING_MUX_START_BIT (7u) -#define CANTX_STRING_P1_STRING_MUX_LENGTH (4u) -#define CANTX_STRING_P1_ENERGY_COUNTER_START_BIT (15u) -#define CANTX_STRING_P1_ENERGY_COUNTER_LENGTH (32u) - -/*========== Static Constant and Variable Definitions =======================*/ - -/*========== Extern Constant and Variable Definitions =======================*/ - -/*========== Static Function Prototypes =====================================*/ - -/*========== Static Function Implementations ================================*/ - -/*========== Extern Function Implementations ================================*/ - -/*========== Externalized Static Function Implementations (Unit Test) =======*/ -#ifdef UNITY_UNIT_TEST -#endif diff --git a/src/app/driver/checksum/checksum.c b/src/app/driver/checksum/checksum.c index 272464e3..14464068 100644 --- a/src/app/driver/checksum/checksum.c +++ b/src/app/driver/checksum/checksum.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,9 +43,9 @@ * @file checksum.c * @author foxBMS Team * @date 2019-12-03 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup TODO + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS * @prefix CHK * * @brief checksum module implementation diff --git a/src/app/driver/checksum/checksum.h b/src/app/driver/checksum/checksum.h index adb8cb00..8e2f46dc 100644 --- a/src/app/driver/checksum/checksum.h +++ b/src/app/driver/checksum/checksum.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,12 @@ * @file checksum.h * @author foxBMS Team * @date 2019-12-03 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup TODO + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS * @prefix CHK * - * @brief checksum module header - * + * @brief Checksum module header * @details TODO */ diff --git a/src/app/driver/config/can_cfg.c b/src/app/driver/config/can_cfg.c index ec051a87..4fce5d18 100644 --- a/src/app/driver/config/can_cfg.c +++ b/src/app/driver/config/can_cfg.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,17 +43,14 @@ * @file can_cfg.c * @author foxBMS Team * @date 2019-12-04 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS_CONFIGURATION * @prefix CAN * * @brief Configuration for the CAN module - * * @details The CAN bus settings and the received messages and their * reception handling are to be specified here. - * - * */ /*========== Includes =======================================================*/ @@ -66,8 +63,6 @@ /*========== Macros and Definitions =========================================*/ -/*========== Static Function Prototypes =====================================*/ - /*========== Static Constant and Variable Definitions =======================*/ /*========== Extern Constant and Variable Definitions =======================*/ @@ -99,7 +94,6 @@ static DATA_BLOCK_SOF_s can_tableSof = {.header.uniqueId = static DATA_BLOCK_SOH_s can_tableSoh = {.header.uniqueId = DATA_BLOCK_ID_SOH}; static DATA_BLOCK_STATE_REQUEST_s can_tableStateRequest = {.header.uniqueId = DATA_BLOCK_ID_STATE_REQUEST}; static DATA_BLOCK_AEROSOL_SENSOR_s can_tableAerosolSensor = {.header.uniqueId = DATA_BLOCK_ID_AEROSOL_SENSOR}; - /**@}*/ const CAN_SHIM_s can_kShim = { diff --git a/src/app/driver/config/can_cfg.h b/src/app/driver/config/can_cfg.h index eaf9e788..a8fa619b 100644 --- a/src/app/driver/config/can_cfg.h +++ b/src/app/driver/config/can_cfg.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,16 +43,14 @@ * @file can_cfg.h * @author foxBMS Team * @date 2019-12-04 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix CAN * * @brief Headers for the configuration for the CAN module - * * @details The activation and the length of the message buffers as well as the * number of the messages that are received are to be configured here. - * */ #ifndef FOXBMS__CAN_CFG_H_ @@ -80,19 +78,21 @@ typedef struct { #define CAN_NODE_1 ((CAN_NODE_s *)&can_node1) #define CAN_NODE_2 ((CAN_NODE_s *)&can_node2Isolated) -#define CAN_NODE_DEBUG_MESSAGE (CAN_NODE_1) -#define CAN_NODE_IMD (CAN_NODE_1) -#define CAN_NODE_CURRENT_SENSOR (CAN_NODE_1) +#define CAN_NODE_DEBUG_MESSAGE (CAN_NODE_1) +#define CAN_NODE_IMD (CAN_NODE_1) +#define CAN_NODE_CURRENT_SENSOR (CAN_NODE_1) +#define CAN_NODE_RX_CELL_VOLTAGES (CAN_NODE_1) +#define CAN_NODE_RX_CELL_TEMPERATURES (CAN_NODE_1) /**@}*/ /** * Configuration of CAN transceiver pins to the respective port expander pins. * @{ */ -#define CAN1_ENABLE_PIN (PEX_PIN00) -#define CAN1_STANDBY_PIN (PEX_PIN01) -#define CAN2_ENABLE_PIN (PEX_PIN02) -#define CAN2_STANDBY_PIN (PEX_PIN03) +#define CAN1_ENABLE_PIN (PEX_PORT_0_PIN_0) +#define CAN1_STANDBY_PIN (PEX_PORT_0_PIN_1) +#define CAN2_ENABLE_PIN (PEX_PORT_0_PIN_2) +#define CAN2_STANDBY_PIN (PEX_PORT_0_PIN_3) /**@}*/ /** Maximum ID if 11 bits are used */ @@ -104,6 +104,14 @@ typedef struct { /** Default DLC for messages that are defined by the foxBMS project, i.e., not * defined by third party software and/or hardware. */ #define CAN_FOXBMS_MESSAGES_DEFAULT_DLC (8u) +/** One bit length for configuration of can message layout */ +#define CAN_BIT (1u) +/** The number of cell voltages received per can message */ +#define CAN_NUM_OF_VOLTAGES_IN_CAN_CELL_VOLTAGES_MSG (4u) +/** The number of cell temperatures received per can message */ +#define CAN_NUM_OF_TEMPERATURES_IN_CAN_CELL_TEMPERATURES_MSG (6u) +/** An offset of zero for can signal preparation */ +#define CAN_SIGNAL_OFFSET_0 (0.0f) /* ************************************************************************************** * CAN BUFFER OPTIONS @@ -173,6 +181,20 @@ typedef struct { uint8_t data[CAN_MAX_DLC]; /*!< payload of the CAN message */ } CAN_BUFFER_ELEMENT_s; +/** data unit to be transferred in ftsk_canToAfeCellTemperaturesQueue */ +typedef struct { + uint8_t muxValue; + bool invalidFlag[CAN_NUM_OF_TEMPERATURES_IN_CAN_CELL_TEMPERATURES_MSG]; + int16_t cellTemperature[CAN_NUM_OF_TEMPERATURES_IN_CAN_CELL_TEMPERATURES_MSG]; +} CAN_CAN2AFE_CELL_TEMPERATURES_QUEUE_s; + +/** data unit to be transferred in ftsk_canToAfeCellVoltagesQueue */ +typedef struct { + uint8_t muxValue; + bool invalidFlag[CAN_NUM_OF_VOLTAGES_IN_CAN_CELL_VOLTAGES_MSG]; + uint16_t cellVoltage[CAN_NUM_OF_VOLTAGES_IN_CAN_CELL_VOLTAGES_MSG]; +} CAN_CAN2AFE_CELL_VOLTAGES_QUEUE_s; + /** composite type for storing and passing on the local database table handles */ typedef struct { OS_QUEUE *pQueueImd; /*!< handle of the message queue */ diff --git a/src/app/driver/config/can_cfg_rx-message-definitions.h b/src/app/driver/config/can_cfg_rx-message-definitions.h index 58f20b71..a1a60271 100644 --- a/src/app/driver/config/can_cfg_rx-message-definitions.h +++ b/src/app/driver/config/can_cfg_rx-message-definitions.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file can_cfg_rx-message-definitions.h * @author foxBMS Team * @date 2022-07-01 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix CANRX * * @brief Header for the driver for the CAN module - * + * @details TODO */ #ifndef FOXBMS__CAN_CFG_RX_MESSAGE_DEFINITIONS_H_ @@ -63,39 +63,101 @@ /*========== Macros and Definitions =========================================*/ #define CANRX_NOT_PERIODIC (0u) -/* Message IDs */ +/** CAN message parameters for can cell temperature */ +#define CANRX_CAN_CELL_TEMPERATURE_MUX_BIT_START (7u) +#define CANRX_CAN_CELL_TEMPERATURE_MUX_LENGTH (8u) +#define CANRX_CAN_CELL_TEMPERATURE0_INVALID_FLAG_BIT_START (8u) +#define CANRX_CAN_CELL_TEMPERATURE1_INVALID_FLAG_BIT_START (9u) +#define CANRX_CAN_CELL_TEMPERATURE2_INVALID_FLAG_BIT_START (10u) +#define CANRX_CAN_CELL_TEMPERATURE3_INVALID_FLAG_BIT_START (11u) +#define CANRX_CAN_CELL_TEMPERATURE4_INVALID_FLAG_BIT_START (12u) +#define CANRX_CAN_CELL_TEMPERATURE5_INVALID_FLAG_BIT_START (13u) +#define CANRX_CAN_CELL_TEMPERATURE_INVALID_FLAG_LENGTH (1u) +#define CANRX_CAN_CELL_TEMPERATURE0_BIT_START (23u) +#define CANRX_CAN_CELL_TEMPERATURE1_BIT_START (31u) +#define CANRX_CAN_CELL_TEMPERATURE2_BIT_START (39u) +#define CANRX_CAN_CELL_TEMPERATURE3_BIT_START (47u) +#define CANRX_CAN_CELL_TEMPERATURE4_BIT_START (55u) +#define CANRX_CAN_CELL_TEMPERATURE5_BIT_START (63u) +#define CANRX_CAN_CELL_TEMPERATURE_LENGTH (8u) + +/** CAN message parameters for can cell voltage */ +#define CANRX_CAN_CELL_VOLTAGE_MUX_BIT_START (7u) +#define CANRX_CAN_CELL_VOLTAGE_MUX_LENGTH (8u) +#define CANRX_CAN_CELL_VOLTAGE0_INVALID_FLAG_BIT_START (12u) +#define CANRX_CAN_CELL_VOLTAGE1_INVALID_FLAG_BIT_START (13u) +#define CANRX_CAN_CELL_VOLTAGE2_INVALID_FLAG_BIT_START (14u) +#define CANRX_CAN_CELL_VOLTAGE3_INVALID_FLAG_BIT_START (15u) +#define CANRX_CAN_CELL_VOLTAGE_INVALID_FLAG_LENGTH (1u) +#define CANRX_CAN_CELL_VOLTAGE0_BIT_START (11u) +#define CANRX_CAN_CELL_VOLTAGE1_BIT_START (30u) +#define CANRX_CAN_CELL_VOLTAGE2_BIT_START (33u) +#define CANRX_CAN_CELL_VOLTAGE3_BIT_START (52u) +#define CANRX_CAN_CELL_VOLTAGE_LENGTH (13u) /** CAN message properties for state request message. Required properties are: - * - Message ID - * - Identifier type (standard or extended) - * - Expected message period in ms or if asynchronous message - * - Endianness of message data @{*/ -#define CANRX_BMS_STATE_REQUEST_ID (0x230u) + * - ID + * - Identifier type (standard or extended) + * - Period in ms + * - Endianness + * - Data length @{*/ +#define CANRX_BMS_STATE_REQUEST_ID (0x210u) #define CANRX_BMS_STATE_REQUEST_ID_TYPE (CAN_STANDARD_IDENTIFIER_11_BIT) #define CANRX_BMS_STATE_REQUEST_PERIOD_ms (CANRX_NOT_PERIODIC) #define CANRX_BMS_STATE_REQUEST_ENDIANNESS (CAN_BIG_ENDIAN) +#define CANRX_BMS_STATE_REQUEST_DLC (CAN_DEFAULT_DLC) /**@} */ /** CAN message properties for debug message. Required properties are: - * - Message ID - * - Identifier type (standard or extended) - * - Expected message period in ms or if asynchronous message - * - Endianness of message data @{*/ -#define CANRX_DEBUG_ID (0x200u) + * - ID + * - Identifier type (standard or extended) + * - Period in ms + * - Endianness + * - Data length @{*/ +#define CANRX_DEBUG_ID (0x300u) #define CANRX_DEBUG_ID_TYPE (CAN_STANDARD_IDENTIFIER_11_BIT) #define CANRX_DEBUG_PERIOD_ms (CANRX_NOT_PERIODIC) #define CANRX_DEBUG_ENDIANNESS (CAN_BIG_ENDIAN) +#define CANRX_DEBUG_DLC (CAN_DEFAULT_DLC) +/**@}*/ + +/** CAN message properties for CAN AFE_CellTemperatures message. Required properties are: + * - ID + * - Identifier type (standard or extended) + * - Period in ms + * - Endianness + * - Data length @{*/ +#define CANRX_AFE_CELL_TEMPERATURES_ID (0x280u) +#define CANRX_AFE_CELL_TEMPERATURES_ID_TYPE (CAN_STANDARD_IDENTIFIER_11_BIT) +#define CANRX_AFE_CELL_TEMPERATURES_PERIOD_ms (CANRX_NOT_PERIODIC) +#define CANRX_AFE_CELL_TEMPERATURES_ENDIANNESS (CAN_BIG_ENDIAN) +#define CANRX_AFE_CELL_TEMPERATURES_DLC (CAN_DEFAULT_DLC) +/**@}*/ + +/** CAN message properties for CAN AFE_CellVoltages message. Required properties are: + * - ID + * - Identifier type (standard or extended) + * - Period in ms + * - Endianness + * - Data length @{*/ +#define CANRX_AFE_CELL_VOLTAGES_ID (0x270u) +#define CANRX_AFE_CELL_VOLTAGES_ID_TYPE (CAN_STANDARD_IDENTIFIER_11_BIT) +#define CANRX_AFE_CELL_VOLTAGES_PERIOD_ms (CANRX_NOT_PERIODIC) +#define CANRX_AFE_CELL_VOLTAGES_ENDIANNESS (CAN_BIG_ENDIAN) +#define CANRX_AFE_CELL_VOLTAGES_DLC (CAN_DEFAULT_DLC) /**@}*/ /** CAN message properties for aerosol sensor. Required properties are: - * - Message ID - * - Identifier type (standard or extended) - * - Expected message period in ms or if asynchronous message - * - Endianness of message data @{*/ -#define CANRX_AEROSOL_SENSOR_ID (0x3C4u) -#define CANRX_AEROSOL_SENSOR_ID_TYPE (CAN_STANDARD_IDENTIFIER_11_BIT) -#define CANRX_AEROSOL_SENSOR_PERIOD_ms (1000u) -#define CANRX_AEROSOL_SENSOR_ENDIANNESS (CAN_BIG_ENDIAN) + * - ID + * - Identifier type (standard or extended) + * - Period in ms + * - Endianness + * - Data length @{*/ +#define CANRX_BAS_AEROSOL_SENSOR_ID (0x3C4u) +#define CANRX_BAS_AEROSOL_SENSOR_ID_TYPE (CAN_STANDARD_IDENTIFIER_11_BIT) +#define CANRX_BAS_AEROSOL_SENSOR_PERIOD_ms (1000u) +#define CANRX_BAS_AEROSOL_SENSOR_ENDIANNESS (CAN_BIG_ENDIAN) +#define CANRX_BAS_AEROSOL_SENSOR_DLC (CAN_DEFAULT_DLC) /**@}*/ /** @@ -105,40 +167,129 @@ * -------------------------CAUTION------------------------- */ /** CAN message ID for info message from iso165c */ -#define CANRX_IMD_INFO_ID (0x37u) +#define CANRX_IMD_INFO_ID (0x37u) +#define CANRX_IMD_INFO_ID_TYPE (CAN_STANDARD_IDENTIFIER_11_BIT) +#define CANRX_IMD_INFO_PERIOD_ms (CANRX_NOT_PERIODIC) +#define CANRX_IMD_INFO_ENDIANNESS (CAN_LITTLE_ENDIAN) +#define CANRX_IMD_INFO_DLC (6u) + /** CAN message ID for response message from iso165c */ -#define CANRX_IMD_RESPONSE_ID (0x23u) -/** CAN message identifier type */ -#define CANRX_IMD_ID_TYPE (CAN_STANDARD_IDENTIFIER_11_BIT) - -/** CAN message properties for Isabellenhuette current sensor messages. Properties are: - * - Data length of current sensor CAN messages - * - Identifier type (standard or extended) - * - Endianness of message data @{*/ +#define CANRX_IMD_RESPONSE_ID (0x23u) +#define CANRX_IMD_RESPONSE_ID_TYPE (CAN_STANDARD_IDENTIFIER_11_BIT) +#define CANRX_IMD_RESPONSE_PERIOD_ms (CANRX_NOT_PERIODIC) +#define CANRX_IMD_RESPONSE_ENDIANNESS (CAN_LITTLE_ENDIAN) +#define CANRX_IMD_RESPONSE_DLC (5u) + +/** CAN message properties for Isabellenhuette current sensor messages. @{*/ #define CANRX_CURRENT_SENSOR_MESSAGES_DLC (6u) #define CANRX_CURRENT_SENSOR_MESSAGES_ID_TYPE (CAN_STANDARD_IDENTIFIER_11_BIT) #define CANRX_CURRENT_SENSOR_MESSAGES_ENDIANNESS (CAN_BIG_ENDIAN) /**@} */ -/** CAN message properties for string 0 current sensor messages. Properties for each message are: - * - Message ID - * - Expected message period in ms or if asynchronous message @{*/ -#define CANRX_STRING0_CURRENT_ID (0x521u) -#define CANRX_STRING0_CURRENT_PERIOD_ms (CANRX_NOT_PERIODIC) -#define CANRX_STRING0_VOLTAGE1_ID (0x522u) -#define CANRX_STRING0_VOLTAGE1_PERIOD_ms (CANRX_NOT_PERIODIC) -#define CANRX_STRING0_VOLTAGE2_ID (0x523u) -#define CANRX_STRING0_VOLTAGE2_PERIOD_ms (CANRX_NOT_PERIODIC) -#define CANRX_STRING0_VOLTAGE3_ID (0x524u) -#define CANRX_STRING0_VOLTAGE3_PERIOD_ms (CANRX_NOT_PERIODIC) -#define CANRX_STRING0_TEMPERATURE_ID (0x525u) -#define CANRX_STRING0_TEMPERATURE_PERIOD_ms (CANRX_NOT_PERIODIC) -#define CANRX_STRING0_POWER_ID (0x526u) -#define CANRX_STRING0_POWER_PERIOD_ms (CANRX_NOT_PERIODIC) -#define CANRX_STRING0_CURRENT_COUNTER_ID (0x527u) -#define CANRX_STRING0_CURRENT_COUNTER_PERIOD_ms (CANRX_NOT_PERIODIC) -#define CANRX_STRING0_ENERGY_COUNTER_ID (0x528u) -#define CANRX_STRING0_ENERGY_COUNTER_PERIOD_ms (CANRX_NOT_PERIODIC) +/** CAN message properties for string 0 current sensor 'current' messages. + * - ID + * - Identifier type (standard or extended) + * - Period in ms + * - data length + * - Endianness @{*/ +#define CANRX_IVT_STRING0_CURRENT_ID (0x521u) +#define CANRX_IVT_STRING0_CURRENT_ID_TYPE (CANRX_CURRENT_SENSOR_MESSAGES_ID_TYPE) +#define CANRX_IVT_STRING0_CURRENT_PERIOD_ms (CANRX_NOT_PERIODIC) +#define CANRX_IVT_STRING0_CURRENT_ENDIANNESS (CANRX_CURRENT_SENSOR_MESSAGES_ENDIANNESS) +#define CANRX_IVT_STRING0_CURRENT_DLC (CANRX_CURRENT_SENSOR_MESSAGES_DLC) +/**@} */ + +/** CAN message properties for string 0 current sensor 'voltage 1' messages. + * - ID + * - Identifier type (standard or extended) + * - Period in ms + * - data length + * - Endianness @{*/ +#define CANRX_IVT_STRING0_VOLTAGE1_ID (0x522u) +#define CANRX_IVT_STRING0_VOLTAGE1_ID_TYPE (CANRX_CURRENT_SENSOR_MESSAGES_ID_TYPE) +#define CANRX_IVT_STRING0_VOLTAGE1_PERIOD_ms (CANRX_NOT_PERIODIC) +#define CANRX_IVT_STRING0_VOLTAGE1_ENDIANNESS (CANRX_CURRENT_SENSOR_MESSAGES_ENDIANNESS) +#define CANRX_IVT_STRING0_VOLTAGE1_DLC (CANRX_CURRENT_SENSOR_MESSAGES_DLC) +/**@} */ + +/** CAN message properties for string 0 current sensor 'voltage 2' messages. + * - ID + * - Identifier type (standard or extended) + * - Period in ms + * - data length + * - Endianness @{*/ +#define CANRX_IVT_STRING0_VOLTAGE2_ID (0x523u) +#define CANRX_IVT_STRING0_VOLTAGE2_ID_TYPE (CANRX_CURRENT_SENSOR_MESSAGES_ID_TYPE) +#define CANRX_IVT_STRING0_VOLTAGE2_PERIOD_ms (CANRX_NOT_PERIODIC) +#define CANRX_IVT_STRING0_VOLTAGE2_ENDIANNESS (CANRX_CURRENT_SENSOR_MESSAGES_ENDIANNESS) +#define CANRX_IVT_STRING0_VOLTAGE2_DLC (CANRX_CURRENT_SENSOR_MESSAGES_DLC) +/**@} */ + +/** CAN message properties for string 0 current sensor 'voltage 3' messages. + * - ID + * - Identifier type (standard or extended) + * - Period in ms + * - data length + * - Endianness @{*/ +#define CANRX_IVT_STRING0_VOLTAGE3_ID (0x524u) +#define CANRX_IVT_STRING0_VOLTAGE3_ID_TYPE (CANRX_CURRENT_SENSOR_MESSAGES_ID_TYPE) +#define CANRX_IVT_STRING0_VOLTAGE3_PERIOD_ms (CANRX_NOT_PERIODIC) +#define CANRX_IVT_STRING0_VOLTAGE3_ENDIANNESS (CANRX_CURRENT_SENSOR_MESSAGES_ENDIANNESS) +#define CANRX_IVT_STRING0_VOLTAGE3_DLC (CANRX_CURRENT_SENSOR_MESSAGES_DLC) +/**@} */ + +/** CAN message properties for string 0 current sensor 'temperature' messages. + * - ID + * - Identifier type (standard or extended) + * - Period in ms + * - data length + * - Endianness @{*/ +#define CANRX_IVT_STRING0_TEMPERATURE_ID (0x525u) +#define CANRX_IVT_STRING0_TEMPERATURE_ID_TYPE (CANRX_CURRENT_SENSOR_MESSAGES_ID_TYPE) +#define CANRX_IVT_STRING0_TEMPERATURE_PERIOD_ms (CANRX_NOT_PERIODIC) +#define CANRX_IVT_STRING0_TEMPERATURE_ENDIANNESS (CANRX_CURRENT_SENSOR_MESSAGES_ENDIANNESS) +#define CANRX_IVT_STRING0_TEMPERATURE_DLC (CANRX_CURRENT_SENSOR_MESSAGES_DLC) +/**@} */ + +/** CAN message properties for string 0 current sensor 'power' messages. + * - ID + * - Identifier type (standard or extended) + * - Period in ms + * - data length + * - Endianness @{*/ +#define CANRX_IVT_STRING0_POWER_ID (0x526u) +#define CANRX_IVT_STRING0_POWER_ID_TYPE (CANRX_CURRENT_SENSOR_MESSAGES_ID_TYPE) +#define CANRX_IVT_STRING0_POWER_PERIOD_ms (CANRX_NOT_PERIODIC) +#define CANRX_IVT_STRING0_POWER_ENDIANNESS (CANRX_CURRENT_SENSOR_MESSAGES_ENDIANNESS) +#define CANRX_IVT_STRING0_POWER_DLC (CANRX_CURRENT_SENSOR_MESSAGES_DLC) +/**@} */ + +/** CAN message properties for string 0 current sensor 'current counter' + * messages. + * - ID + * - Identifier type (standard or extended) + * - Period in ms + * - data length + * - Endianness @{*/ +#define CANRX_IVT_STRING0_CURRENT_COUNTER_ID (0x527u) +#define CANRX_IVT_STRING0_CURRENT_COUNTER_ID_TYPE (CANRX_CURRENT_SENSOR_MESSAGES_ID_TYPE) +#define CANRX_IVT_STRING0_CURRENT_COUNTER_PERIOD_ms (CANRX_NOT_PERIODIC) +#define CANRX_IVT_STRING0_CURRENT_COUNTER_ENDIANNESS (CANRX_CURRENT_SENSOR_MESSAGES_ENDIANNESS) +#define CANRX_IVT_STRING0_CURRENT_COUNTER_DLC (CANRX_CURRENT_SENSOR_MESSAGES_DLC) +/**@} */ + +/** CAN message properties for string 0 current sensor 'energy counter' + * messages. + * - ID + * - Identifier type (standard or extended) + * - Period in ms + * - data length + * - Endianness @{*/ +#define CANRX_IVT_STRING0_ENERGY_COUNTER_ID (0x528u) +#define CANRX_IVT_STRING0_ENERGY_COUNTER_ID_TYPE (CANRX_CURRENT_SENSOR_MESSAGES_ID_TYPE) +#define CANRX_IVT_STRING0_ENERGY_COUNTER_PERIOD_ms (CANRX_NOT_PERIODIC) +#define CANRX_IVT_STRING0_ENERGY_COUNTER_ENDIANNESS (CANRX_CURRENT_SENSOR_MESSAGES_ENDIANNESS) +#define CANRX_IVT_STRING0_ENERGY_COUNTER_DLC (CANRX_CURRENT_SENSOR_MESSAGES_DLC) /**@} */ /* composed Rx messages */ @@ -157,143 +308,165 @@ { \ .id = CANRX_DEBUG_ID, \ .idType = CANRX_DEBUG_ID_TYPE, \ - .dlc = CAN_DEFAULT_DLC, \ + .dlc = CANRX_DEBUG_DLC, \ .endianness = CANRX_DEBUG_ENDIANNESS, \ }, \ { \ .period = CANRX_DEBUG_PERIOD_ms \ } -#define CANRX_AEROSOL_SENSOR_MESSAGE \ - { \ - .id = CANRX_AEROSOL_SENSOR_ID, \ - .idType = CANRX_AEROSOL_SENSOR_ID_TYPE, \ - .dlc = CAN_DEFAULT_DLC, \ - .endianness = CANRX_AEROSOL_SENSOR_ENDIANNESS, \ - }, \ - { \ - .period = CANRX_AEROSOL_SENSOR_PERIOD_ms \ +#define CANRX_BAS_AEROSOL_SENSOR_MESSAGE \ + { \ + .id = CANRX_BAS_AEROSOL_SENSOR_ID, \ + .idType = CANRX_BAS_AEROSOL_SENSOR_ID_TYPE, \ + .dlc = CANRX_BAS_AEROSOL_SENSOR_DLC, \ + .endianness = CANRX_BAS_AEROSOL_SENSOR_ENDIANNESS, \ + }, \ + { \ + .period = CANRX_BAS_AEROSOL_SENSOR_PERIOD_ms \ + } + +#define CANRX_AFE_CELL_VOLTAGES_MESSAGE \ + { \ + .id = CANRX_AFE_CELL_VOLTAGES_ID, \ + .idType = CANRX_AFE_CELL_VOLTAGES_ID_TYPE, \ + .dlc = CANRX_AFE_CELL_VOLTAGES_DLC, \ + .endianness = CANRX_AFE_CELL_VOLTAGES_ENDIANNESS, \ + }, \ + { \ + .period = CANRX_AFE_CELL_VOLTAGES_PERIOD_ms \ + } + +#define CANRX_AFE_CELL_TEMPERATURES_MESSAGE \ + { \ + .id = CANRX_AFE_CELL_TEMPERATURES_ID, \ + .idType = CANRX_AFE_CELL_TEMPERATURES_ID_TYPE, \ + .dlc = CANRX_AFE_CELL_TEMPERATURES_DLC, \ + .endianness = CANRX_AFE_CELL_TEMPERATURES_ENDIANNESS, \ + }, \ + { \ + .period = CANRX_AFE_CELL_TEMPERATURES_PERIOD_ms \ } -#define CANRX_IMD_INFO_MESSAGE \ - { \ - .id = CANRX_IMD_INFO_ID, \ - .idType = CANRX_IMD_ID_TYPE, \ - .dlc = CAN_DEFAULT_DLC, \ - .endianness = CAN_LITTLE_ENDIAN, \ - }, \ - { \ - .period = CANRX_NOT_PERIODIC \ +#define CANRX_IMD_INFO_MESSAGE \ + { \ + .id = CANRX_IMD_INFO_ID, \ + .idType = CANRX_IMD_INFO_ID_TYPE, \ + .dlc = CANRX_IMD_INFO_DLC, \ + .endianness = CANRX_IMD_INFO_ENDIANNESS, \ + }, \ + { \ + .period = CANRX_IMD_INFO_PERIOD_ms \ } -#define CANRX_IMD_RESPONSE_MESSAGE \ - { \ - .id = CANRX_IMD_RESPONSE_ID, \ - .idType = CANRX_IMD_ID_TYPE, \ - .dlc = CAN_DEFAULT_DLC, \ - .endianness = CAN_LITTLE_ENDIAN, \ - }, \ - { \ - .period = CANRX_NOT_PERIODIC \ +#define CANRX_IMD_RESPONSE_MESSAGE \ + { \ + .id = CANRX_IMD_RESPONSE_ID, \ + .idType = CANRX_IMD_RESPONSE_ID_TYPE, \ + .dlc = CANRX_IMD_RESPONSE_DLC, \ + .endianness = CANRX_IMD_RESPONSE_ENDIANNESS, \ + }, \ + { \ + .period = CANRX_IMD_RESPONSE_PERIOD_ms \ } #define CANRX_BMS_STATE_REQUEST_MESSAGE \ { \ .id = CANRX_BMS_STATE_REQUEST_ID, \ .idType = CANRX_BMS_STATE_REQUEST_ID_TYPE, \ - .dlc = CAN_DEFAULT_DLC, \ + .dlc = CANRX_BMS_STATE_REQUEST_DLC, \ .endianness = CANRX_BMS_STATE_REQUEST_ENDIANNESS, \ }, \ { \ .period = CANRX_BMS_STATE_REQUEST_PERIOD_ms \ } -#define CANRX_STRING0_CURRENT_MESSAGE \ - { \ - .id = CANRX_STRING0_CURRENT_ID, \ - .idType = CANRX_CURRENT_SENSOR_MESSAGES_ID_TYPE, \ - .dlc = CANRX_CURRENT_SENSOR_MESSAGES_DLC, \ - .endianness = CANRX_CURRENT_SENSOR_MESSAGES_ENDIANNESS, \ - }, \ - { \ - .period = CANRX_STRING0_CURRENT_PERIOD_ms \ +#define CANRX_IVT_STRING0_CURRENT_MESSAGE \ + { \ + .id = CANRX_IVT_STRING0_CURRENT_ID, \ + .idType = CANRX_IVT_STRING0_CURRENT_ID_TYPE, \ + .dlc = CANRX_IVT_STRING0_CURRENT_DLC, \ + .endianness = CANRX_IVT_STRING0_CURRENT_ENDIANNESS, \ + }, \ + { \ + .period = CANRX_IVT_STRING0_CURRENT_PERIOD_ms \ } -#define CANRX_STRING0_VOLTAGE1_MESSAGE \ - { \ - .id = CANRX_STRING0_VOLTAGE1_ID, \ - .idType = CANRX_CURRENT_SENSOR_MESSAGES_ID_TYPE, \ - .dlc = CANRX_CURRENT_SENSOR_MESSAGES_DLC, \ - .endianness = CANRX_CURRENT_SENSOR_MESSAGES_ENDIANNESS, \ - }, \ - { \ - .period = CANRX_STRING0_VOLTAGE1_PERIOD_ms \ +#define CANRX_IVT_STRING0_VOLTAGE1_MESSAGE \ + { \ + .id = CANRX_IVT_STRING0_VOLTAGE1_ID, \ + .idType = CANRX_IVT_STRING0_VOLTAGE1_ID_TYPE, \ + .dlc = CANRX_IVT_STRING0_VOLTAGE1_DLC, \ + .endianness = CANRX_IVT_STRING0_VOLTAGE1_ENDIANNESS, \ + }, \ + { \ + .period = CANRX_IVT_STRING0_VOLTAGE1_PERIOD_ms \ } -#define CANRX_STRING0_VOLTAGE2_MESSAGE \ - { \ - .id = CANRX_STRING0_VOLTAGE2_ID, \ - .idType = CANRX_CURRENT_SENSOR_MESSAGES_ID_TYPE, \ - .dlc = CANRX_CURRENT_SENSOR_MESSAGES_DLC, \ - .endianness = CANRX_CURRENT_SENSOR_MESSAGES_ENDIANNESS, \ - }, \ - { \ - .period = CANRX_STRING0_VOLTAGE2_PERIOD_ms \ +#define CANRX_IVT_STRING0_VOLTAGE2_MESSAGE \ + { \ + .id = CANRX_IVT_STRING0_VOLTAGE2_ID, \ + .idType = CANRX_IVT_STRING0_VOLTAGE2_ID_TYPE, \ + .dlc = CANRX_IVT_STRING0_VOLTAGE2_DLC, \ + .endianness = CANRX_IVT_STRING0_VOLTAGE2_ENDIANNESS, \ + }, \ + { \ + .period = CANRX_IVT_STRING0_VOLTAGE2_PERIOD_ms \ } -#define CANRX_STRING0_VOLTAGE3_MESSAGE \ - { \ - .id = CANRX_STRING0_VOLTAGE3_ID, \ - .idType = CANRX_CURRENT_SENSOR_MESSAGES_ID_TYPE, \ - .dlc = CANRX_CURRENT_SENSOR_MESSAGES_DLC, \ - .endianness = CANRX_CURRENT_SENSOR_MESSAGES_ENDIANNESS, \ - }, \ - { \ - .period = CANRX_STRING0_VOLTAGE3_PERIOD_ms \ +#define CANRX_IVT_STRING0_VOLTAGE3_MESSAGE \ + { \ + .id = CANRX_IVT_STRING0_VOLTAGE3_ID, \ + .idType = CANRX_IVT_STRING0_VOLTAGE3_ID_TYPE, \ + .dlc = CANRX_IVT_STRING0_VOLTAGE3_DLC, \ + .endianness = CANRX_IVT_STRING0_VOLTAGE3_ENDIANNESS, \ + }, \ + { \ + .period = CANRX_IVT_STRING0_VOLTAGE3_PERIOD_ms \ } -#define CANRX_STRING0_TEMPERATURE_MESSAGE \ +#define CANRX_IVT_STRING0_TEMPERATURE_MESSAGE \ { \ - .id = CANRX_STRING0_TEMPERATURE_ID, \ - .idType = CANRX_CURRENT_SENSOR_MESSAGES_ID_TYPE, \ - .dlc = CANRX_CURRENT_SENSOR_MESSAGES_DLC, \ - .endianness = CANRX_CURRENT_SENSOR_MESSAGES_ENDIANNESS, \ + .id = CANRX_IVT_STRING0_TEMPERATURE_ID, \ + .idType = CANRX_IVT_STRING0_TEMPERATURE_ID_TYPE, \ + .dlc = CANRX_IVT_STRING0_TEMPERATURE_DLC, \ + .endianness = CANRX_IVT_STRING0_TEMPERATURE_ENDIANNESS, \ }, \ { \ - .period = CANRX_STRING0_TEMPERATURE_PERIOD_ms \ + .period = CANRX_IVT_STRING0_TEMPERATURE_PERIOD_ms \ } -#define CANRX_STRING0_POWER_MESSAGE \ - { \ - .id = CANRX_STRING0_POWER_ID, \ - .idType = CANRX_CURRENT_SENSOR_MESSAGES_ID_TYPE, \ - .dlc = CANRX_CURRENT_SENSOR_MESSAGES_DLC, \ - .endianness = CANRX_CURRENT_SENSOR_MESSAGES_ENDIANNESS, \ - }, \ - { \ - .period = CANRX_STRING0_POWER_PERIOD_ms \ +#define CANRX_IVT_STRING0_POWER_MESSAGE \ + { \ + .id = CANRX_IVT_STRING0_POWER_ID, \ + .idType = CANRX_IVT_STRING0_POWER_ID_TYPE, \ + .dlc = CANRX_IVT_STRING0_POWER_DLC, \ + .endianness = CANRX_IVT_STRING0_POWER_ENDIANNESS, \ + }, \ + { \ + .period = CANRX_IVT_STRING0_POWER_PERIOD_ms \ } -#define CANRX_STRING0_CURRENT_COUNTER_MESSAGE \ - { \ - .id = CANRX_STRING0_CURRENT_COUNTER_ID, \ - .idType = CANRX_CURRENT_SENSOR_MESSAGES_ID_TYPE, \ - .dlc = CANRX_CURRENT_SENSOR_MESSAGES_DLC, \ - .endianness = CANRX_CURRENT_SENSOR_MESSAGES_ENDIANNESS, \ - }, \ - { \ - .period = CANRX_STRING0_CURRENT_COUNTER_PERIOD_ms \ +#define CANRX_IVT_STRING0_CURRENT_COUNTER_MESSAGE \ + { \ + .id = CANRX_IVT_STRING0_CURRENT_COUNTER_ID, \ + .idType = CANRX_IVT_STRING0_CURRENT_COUNTER_ID_TYPE, \ + .dlc = CANRX_IVT_STRING0_CURRENT_COUNTER_DLC, \ + .endianness = CANRX_IVT_STRING0_CURRENT_COUNTER_ENDIANNESS, \ + }, \ + { \ + .period = CANRX_IVT_STRING0_CURRENT_COUNTER_PERIOD_ms \ } -#define CANRX_STRING0_ENERGY_COUNTER_MESSAGE \ - { \ - .id = CANRX_STRING0_ENERGY_COUNTER_ID, \ - .idType = CANRX_CURRENT_SENSOR_MESSAGES_ID_TYPE, \ - .dlc = CANRX_CURRENT_SENSOR_MESSAGES_DLC, \ - .endianness = CANRX_CURRENT_SENSOR_MESSAGES_ENDIANNESS, \ - }, \ - { \ - .period = CANRX_STRING0_ENERGY_COUNTER_PERIOD_ms \ +#define CANRX_IVT_STRING0_ENERGY_COUNTER_MESSAGE \ + { \ + .id = CANRX_IVT_STRING0_ENERGY_COUNTER_ID, \ + .idType = CANRX_IVT_STRING0_ENERGY_COUNTER_ID_TYPE, \ + .dlc = CANRX_IVT_STRING0_ENERGY_COUNTER_DLC, \ + .endianness = CANRX_IVT_STRING0_ENERGY_COUNTER_ENDIANNESS, \ + }, \ + { \ + .period = CANRX_IVT_STRING0_ENERGY_COUNTER_PERIOD_ms \ } /* AXIVION Enable Style Generic-NoUnsafeMacro */ diff --git a/src/app/driver/config/can_cfg_rx.c b/src/app/driver/config/can_cfg_rx.c index dc3d9e90..d441bfc4 100644 --- a/src/app/driver/config/can_cfg_rx.c +++ b/src/app/driver/config/can_cfg_rx.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,17 +43,14 @@ * @file can_cfg_rx.c * @author foxBMS Team * @date 2019-12-04 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS_CONFIGURATION * @prefix CANRX * * @brief Configuration for the CAN module - * * @details The CAN bus settings and the received messages and their reception * handling are to be specified here. - * - * */ /*========== Includes =======================================================*/ @@ -77,16 +74,18 @@ const CAN_RX_MESSAGE_TYPE_s can_rxMessages[] = { {CAN_NODE_IMD, CANRX_IMD_INFO_MESSAGE, &CANRX_ImdInfo}, {CAN_NODE_IMD, CANRX_IMD_RESPONSE_MESSAGE, &CANRX_ImdResponse}, {CAN_NODE_1, CANRX_BMS_STATE_REQUEST_MESSAGE, &CANRX_BmsStateRequest}, - {CAN_NODE_CURRENT_SENSOR, CANRX_STRING0_CURRENT_MESSAGE, &CANRX_CurrentSensor}, - {CAN_NODE_CURRENT_SENSOR, CANRX_STRING0_VOLTAGE1_MESSAGE, &CANRX_CurrentSensor}, - {CAN_NODE_CURRENT_SENSOR, CANRX_STRING0_VOLTAGE2_MESSAGE, &CANRX_CurrentSensor}, - {CAN_NODE_CURRENT_SENSOR, CANRX_STRING0_VOLTAGE3_MESSAGE, &CANRX_CurrentSensor}, - {CAN_NODE_CURRENT_SENSOR, CANRX_STRING0_TEMPERATURE_MESSAGE, &CANRX_CurrentSensor}, - {CAN_NODE_CURRENT_SENSOR, CANRX_STRING0_POWER_MESSAGE, &CANRX_CurrentSensor}, - {CAN_NODE_CURRENT_SENSOR, CANRX_STRING0_CURRENT_COUNTER_MESSAGE, &CANRX_CurrentSensor}, - {CAN_NODE_CURRENT_SENSOR, CANRX_STRING0_ENERGY_COUNTER_MESSAGE, &CANRX_CurrentSensor}, + {CAN_NODE_CURRENT_SENSOR, CANRX_IVT_STRING0_CURRENT_MESSAGE, &CANRX_CurrentSensor}, + {CAN_NODE_CURRENT_SENSOR, CANRX_IVT_STRING0_VOLTAGE1_MESSAGE, &CANRX_CurrentSensor}, + {CAN_NODE_CURRENT_SENSOR, CANRX_IVT_STRING0_VOLTAGE2_MESSAGE, &CANRX_CurrentSensor}, + {CAN_NODE_CURRENT_SENSOR, CANRX_IVT_STRING0_VOLTAGE3_MESSAGE, &CANRX_CurrentSensor}, + {CAN_NODE_CURRENT_SENSOR, CANRX_IVT_STRING0_TEMPERATURE_MESSAGE, &CANRX_CurrentSensor}, + {CAN_NODE_CURRENT_SENSOR, CANRX_IVT_STRING0_POWER_MESSAGE, &CANRX_CurrentSensor}, + {CAN_NODE_CURRENT_SENSOR, CANRX_IVT_STRING0_CURRENT_COUNTER_MESSAGE, &CANRX_CurrentSensor}, + {CAN_NODE_CURRENT_SENSOR, CANRX_IVT_STRING0_ENERGY_COUNTER_MESSAGE, &CANRX_CurrentSensor}, {CAN_NODE_DEBUG_MESSAGE, CANRX_DEBUG_MESSAGE, &CANRX_Debug}, - {CAN_NODE_1, CANRX_AEROSOL_SENSOR_MESSAGE, &CANRX_AerosolSensor}, + {CAN_NODE_1, CANRX_BAS_AEROSOL_SENSOR_MESSAGE, &CANRX_AerosolSensor}, + {CAN_NODE_RX_CELL_VOLTAGES, CANRX_AFE_CELL_VOLTAGES_MESSAGE, &CANRX_CellVoltages}, + {CAN_NODE_RX_CELL_TEMPERATURES, CANRX_AFE_CELL_TEMPERATURES_MESSAGE, &CANRX_CellTemperatures}, }; /** length of CAN message arrays */ diff --git a/src/app/driver/config/can_cfg_tx-async-message-definitions.h b/src/app/driver/config/can_cfg_tx-async-message-definitions.h new file mode 100644 index 00000000..63cde5b0 --- /dev/null +++ b/src/app/driver/config/can_cfg_tx-async-message-definitions.h @@ -0,0 +1,136 @@ +/** + * + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * We kindly request you to use one or more of the following phrases to refer to + * foxBMS in your hardware, software, documentation or advertising materials: + * + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" + * + */ + +/** + * @file can_cfg_tx-async-message-definitions.h + * @author foxBMS Team + * @date 2022-07-01 (date of creation) + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS + * @prefix CANTX + * + * @brief Header for the driver for the CAN module + * @details TODO + */ + +#ifndef FOXBMS__CAN_CFG_TX_ASYNC_MESSAGE_DEFINITIONS_H_ +#define FOXBMS__CAN_CFG_TX_ASYNC_MESSAGE_DEFINITIONS_H_ + +/*========== Includes =======================================================*/ +#include "can_cfg.h" + +#include + +/*========== Macros and Definitions =========================================*/ + +/** CAN message properties for debug response message. Required properties are: + * - ID + * - Identifier type (standard or extended) + * - data length + * - Endianness @{*/ +#define CANTX_DEBUG_RESPONSE_ID (0x301u) +#define CANTX_DEBUG_RESPONSE_ID_TYPE (CAN_STANDARD_IDENTIFIER_11_BIT) +#define CANTX_DEBUG_RESPONSE_ENDIANNESS (CAN_BIG_ENDIAN) +#define CANTX_DEBUG_RESPONSE_DLC (CAN_DEFAULT_DLC) +/**@}*/ + +/** CAN message properties for unsupported multiplexer values in messages. + * Required properties are: + * - ID + * - Identifier type (standard or extended) + * - data length + * - Endianness @{*/ +#define CANTX_DEBUG_UNSUPPORTED_MULTIPLEXER_VAL_ID (0x302u) +#define CANTX_DEBUG_UNSUPPORTED_MULTIPLEXER_VAL_ID_TYPE (CAN_STANDARD_IDENTIFIER_11_BIT) +#define CANTX_DEBUG_UNSUPPORTED_MULTIPLEXER_VAL_ENDIANNESS (CAN_BIG_ENDIAN) +#define CANTX_DEBUG_UNSUPPORTED_MULTIPLEXER_VAL_DLC (CAN_DEFAULT_DLC) +/**@}*/ + +/** CAN message properties for debug build configuration message. + * Required properties are: + * - ID + * - Identifier type (standard or extended) + * - data length + * - Endianness @{*/ +#define CANTX_DEBUG_BUILD_CONFIGURATION_ID (0x303u) +#define CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE (CAN_STANDARD_IDENTIFIER_11_BIT) +#define CANTX_DEBUG_BUILD_CONFIGURATION_ENDIANNESS (CAN_BIG_ENDIAN) +#define CANTX_DEBUG_BUILD_CONFIGURATION_DLC (CAN_DEFAULT_DLC) +/**@}*/ + +/** CAN message properties for crash dump. Required properties are: + * - ID + * - Identifier type (standard or extended) + * - data length + * - Endianness @{*/ +#define CANTX_CRASH_DUMP_ID (0xFFu) +#define CANTX_CRASH_DUMP_ID_TYPE (CAN_STANDARD_IDENTIFIER_11_BIT) +#define CANTX_CRASH_DUMP_ENDIANNESS (CAN_BIG_ENDIAN) +#define CANTX_CRASH_DUMP_DLC (CAN_DEFAULT_DLC) +/**@}*/ + +/** + * -------------------------CAUTION------------------------- + * The following defines are used by the insulation monitoring device (IMD). + * If they are changed, the IMD will not work anymore + * -------------------------CAUTION------------------------- + */ +/** CAN message properties for imd request. Required properties are: + * - ID + * - Identifier type (standard or extended) + * - data length + * - Endianness @{*/ +#define CANTX_IMD_REQUEST_ID (0x022u) +#define CANTX_IMD_REQUEST_ID_TYPE (CAN_STANDARD_IDENTIFIER_11_BIT) +#define CANTX_IMD_REQUEST_ENDIANNESS (CAN_LITTLE_ENDIAN) +#define CANTX_IMD_REQUEST_DLC (5u) +/**@}*/ + +/*========== Extern Constant and Variable Declarations ======================*/ + +/*========== Extern Function Prototypes =====================================*/ + +/*========== Externalized Static Functions Prototypes (Unit Test) ===========*/ +#ifdef UNITY_UNIT_TEST +#endif + +#endif /* FOXBMS__CAN_CFG_TX_ASYNC_MESSAGE_DEFINITIONS_H_ */ diff --git a/src/app/driver/config/can_cfg_tx-message-definitions.h b/src/app/driver/config/can_cfg_tx-cyclic-message-definitions.h similarity index 60% rename from src/app/driver/config/can_cfg_tx-message-definitions.h rename to src/app/driver/config/can_cfg_tx-cyclic-message-definitions.h index 9b7bb8cf..dd53bb92 100644 --- a/src/app/driver/config/can_cfg_tx-message-definitions.h +++ b/src/app/driver/config/can_cfg_tx-cyclic-message-definitions.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,27 +33,27 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ /** - * @file can_cfg_tx-message-definitions.h + * @file can_cfg_tx-cyclic-message-definitions.h * @author foxBMS Team * @date 2022-07-01 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix CANTX * * @brief Header for the driver for the CAN module - * + * @details TODO */ -#ifndef FOXBMS__CAN_CFG_TX_MESSAGE_DEFINITIONS_H_ -#define FOXBMS__CAN_CFG_TX_MESSAGE_DEFINITIONS_H_ +#ifndef FOXBMS__CAN_CFG_TX_CYCLIC_MESSAGE_DEFINITIONS_H_ +#define FOXBMS__CAN_CFG_TX_CYCLIC_MESSAGE_DEFINITIONS_H_ /*========== Includes =======================================================*/ #include "can_cfg.h" @@ -62,189 +62,204 @@ /*========== Macros and Definitions =========================================*/ -/* Message IDs */ - -/** CAN message ID for debug response message */ -#define CANTX_DEBUG_RESPONSE_ID (0x227u) /* check_ids:not-periodic */ -#define CANTX_DEBUG_IDENTIFIER (CAN_STANDARD_IDENTIFIER_11_BIT) - -/** CAN message ID for unsupported multiplexer values in messages */ -#define CANTX_UNSUPPORTED_MULTIPLEXER_VAL_ID (0x201u) /* check_ids:not-periodic */ -#define CANTX_UNSUPPORTED_MULTIPLEXER_IDENTIFIER (CAN_STANDARD_IDENTIFIER_11_BIT) - -/** CAN message ID for fatal errors */ -#define CANTX_FATAL_ERRORS_ID (0x0FFu) /* check_ids:not-periodic */ -#define CANTX_FATAL_ERRORS_IDENTIFIER (CAN_STANDARD_IDENTIFIER_11_BIT) - /** CAN message properties for BMS state message. Required properties are: - * - Message ID - * - Identifier type (standard or extended) - * - Message period and phase in ms - * - Endianness of message data @{*/ + * - ID + * - Identifier type (standard or extended) + * - Period and phase in ms + * - Endianness + * - data length @{*/ #define CANTX_BMS_STATE_ID (0x220u) #define CANTX_BMS_STATE_ID_TYPE (CAN_STANDARD_IDENTIFIER_11_BIT) #define CANTX_BMS_STATE_PERIOD_ms (100u) #define CANTX_BMS_STATE_PHASE_ms (0u) #define CANTX_BMS_STATE_ENDIANNESS (CAN_BIG_ENDIAN) +#define CANTX_BMS_STATE_DLC (CAN_DEFAULT_DLC) /**@}*/ /** CAN message properties for BMS detail state. Required properties are: - * - Message ID - * - Identifier type (standard or extended) - * - Message period and phase in ms - * - Endianness of message data @{*/ -#define CANTX_BMS_STATE_DETAILS_ID (0x226u) + * - ID + * - Identifier type (standard or extended) + * - Period and phase in ms + * - Endianness + * - data length @{*/ +#define CANTX_BMS_STATE_DETAILS_ID (0x221u) #define CANTX_BMS_STATE_DETAILS_ID_TYPE (CAN_STANDARD_IDENTIFIER_11_BIT) #define CANTX_BMS_STATE_DETAILS_PERIOD_ms (1000u) #define CANTX_BMS_STATE_DETAILS_PHASE_ms (100u) #define CANTX_BMS_STATE_DETAILS_ENDIANNESS (CAN_BIG_ENDIAN) +#define CANTX_BMS_STATE_DETAILS_DLC (CAN_DEFAULT_DLC) /**@}*/ /** CAN message properties for BMS cell voltages. Required properties are: - * - Message ID - * - Identifier type (standard or extended) - * - Message period and phase in ms - * - Endianness of message data @{*/ -#define CANTX_CELL_VOLTAGES_ID (0x240u) + * - ID + * - Identifier type (standard or extended) + * - Period and phase in ms + * - Endianness + * - data length @{*/ +#define CANTX_CELL_VOLTAGES_ID (0x250u) #define CANTX_CELL_VOLTAGES_ID_TYPE (CAN_STANDARD_IDENTIFIER_11_BIT) #define CANTX_CELL_VOLTAGES_PERIOD_ms (100u) #define CANTX_CELL_VOLTAGES_PHASE_ms (10u) #define CANTX_CELL_VOLTAGES_ENDIANNESS (CAN_BIG_ENDIAN) +#define CANTX_CELL_VOLTAGES_DLC (CAN_DEFAULT_DLC) /**@}*/ /** CAN message properties for BMS cell temperatures. Required properties are: - * - Message ID - * - Identifier type (standard or extended) - * - Message period and phase in ms - * - Endianness of message data @{*/ -#define CANTX_CELL_TEMPERATURES_ID (0x250u) + * - ID + * - Identifier type (standard or extended) + * - Period and phase in ms + * - Endianness + * - data length @{*/ +#define CANTX_CELL_TEMPERATURES_ID (0x260u) #define CANTX_CELL_TEMPERATURES_ID_TYPE (CAN_STANDARD_IDENTIFIER_11_BIT) #define CANTX_CELL_TEMPERATURES_PERIOD_ms (200u) #define CANTX_CELL_TEMPERATURES_PHASE_ms (20u) #define CANTX_CELL_TEMPERATURES_ENDIANNESS (CAN_BIG_ENDIAN) +#define CANTX_CELL_TEMPERATURES_DLC (CAN_DEFAULT_DLC) /**@}*/ /** CAN message properties for BMS limit values. Required properties are: - * - Message ID - * - Identifier type (standard or extended) - * - Message period and phase in ms - * - Endianness of message data @{*/ -#define CANTX_LIMIT_VALUES_ID (0x224u) -#define CANTX_LIMIT_VALUES_ID_TYPE (CAN_STANDARD_IDENTIFIER_11_BIT) -#define CANTX_LIMIT_VALUES_PERIOD_ms (100u) -#define CANTX_LIMIT_VALUES_PHASE_ms (30u) -#define CANTX_LIMIT_VALUES_ENDIANNESS (CAN_BIG_ENDIAN) + * - ID + * - Identifier type (standard or extended) + * - Period and phase in ms + * - Endianness + * - data length @{*/ +#define CANTX_PACK_LIMITS_ID (0x232u) +#define CANTX_PACK_LIMITS_ID_TYPE (CAN_STANDARD_IDENTIFIER_11_BIT) +#define CANTX_PACK_LIMITS_PERIOD_ms (100u) +#define CANTX_PACK_LIMITS_PHASE_ms (30u) +#define CANTX_PACK_LIMITS_ENDIANNESS (CAN_BIG_ENDIAN) +#define CANTX_PACK_LIMITS_DLC (CAN_DEFAULT_DLC) /**@}*/ /** CAN message properties for minimum and maximum values. Required properties are: - * - Message ID - * - Identifier type (standard or extended) - * - Message period and phase in ms - * - Endianness of message data @{*/ -#define CANTX_MINIMUM_MAXIMUM_VALUES_ID (0x223u) -#define CANTX_MINIMUM_MAXIMUM_VALUES_ID_TYPE (CAN_STANDARD_IDENTIFIER_11_BIT) -#define CANTX_MINIMUM_MAXIMUM_VALUES_PERIOD_ms (100u) -#define CANTX_MINIMUM_MAXIMUM_VALUES_PHASE_ms (40u) -#define CANTX_MINIMUM_MAXIMUM_VALUES_ENDIANNESS (CAN_BIG_ENDIAN) + * - ID + * - Identifier type (standard or extended) + * - Period and phase in ms + * - Endianness + * - data length @{*/ +#define CANTX_PACK_MINIMUM_MAXIMUM_VALUES_ID (0x231u) +#define CANTX_PACK_MINIMUM_MAXIMUM_VALUES_ID_TYPE (CAN_STANDARD_IDENTIFIER_11_BIT) +#define CANTX_PACK_MINIMUM_MAXIMUM_VALUES_PERIOD_ms (100u) +#define CANTX_PACK_MINIMUM_MAXIMUM_VALUES_PHASE_ms (40u) +#define CANTX_PACK_MINIMUM_MAXIMUM_VALUES_ENDIANNESS (CAN_BIG_ENDIAN) +#define CANTX_PACK_MINIMUM_MAXIMUM_VALUES_DLC (CAN_DEFAULT_DLC) /**@}*/ /** CAN message properties for pack state estimation values. Required properties are: - * - Message ID - * - Identifier type (standard or extended) - * - Message period and phase in ms - * - Endianness of message data @{*/ -#define CANTX_PACK_STATE_ESTIMATION_ID (0x225u) + * - ID + * - Identifier type (standard or extended) + * - Period and phase in ms + * - Endianness + * - data length @{*/ +#define CANTX_PACK_STATE_ESTIMATION_ID (0x235u) #define CANTX_PACK_STATE_ESTIMATION_ID_TYPE (CAN_STANDARD_IDENTIFIER_11_BIT) #define CANTX_PACK_STATE_ESTIMATION_PERIOD_ms (1000u) #define CANTX_PACK_STATE_ESTIMATION_PHASE_ms (50u) #define CANTX_PACK_STATE_ESTIMATION_ENDIANNESS (CAN_BIG_ENDIAN) +#define CANTX_PACK_STATE_ESTIMATION_DLC (CAN_DEFAULT_DLC) /**@}*/ /** CAN message properties for pack values. Required properties are: - * - Message ID - * - Identifier type (standard or extended) - * - Message period and phase in ms - * - Endianness of message data @{*/ -#define CANTX_PACK_VALUES_ID (0x222u) -#define CANTX_PACK_VALUES_ID_TYPE (CAN_STANDARD_IDENTIFIER_11_BIT) -#define CANTX_PACK_VALUES_PERIOD_ms (100u) -#define CANTX_PACK_VALUES_PHASE_ms (60u) -#define CANTX_PACK_VALUES_ENDIANNESS (CAN_BIG_ENDIAN) + * - ID + * - Identifier type (standard or extended) + * - Period and phase in ms + * - Endianness + * - data length @{*/ +#define CANTX_PACK_VALUES_P0_ID (0x233u) +#define CANTX_PACK_VALUES_P0_ID_TYPE (CAN_STANDARD_IDENTIFIER_11_BIT) +#define CANTX_PACK_VALUES_P0_PERIOD_ms (100u) +#define CANTX_PACK_VALUES_P0_PHASE_ms (60u) +#define CANTX_PACK_VALUES_P0_ENDIANNESS (CAN_BIG_ENDIAN) +#define CANTX_PACK_VALUES_P0_DLC (CAN_DEFAULT_DLC) +/**@}*/ + +/** CAN message properties for pack values. Required properties are: + * - ID + * - Identifier type (standard or extended) + * - Period and phase in ms + * - Endianness + * - data length @{*/ +#define CANTX_PACK_VALUES_P1_ID (0x234u) +#define CANTX_PACK_VALUES_P1_ID_TYPE (CAN_STANDARD_IDENTIFIER_11_BIT) +#define CANTX_PACK_VALUES_P1_PERIOD_ms (100u) +#define CANTX_PACK_VALUES_P1_PHASE_ms (60u) +#define CANTX_PACK_VALUES_P1_ENDIANNESS (CAN_BIG_ENDIAN) +#define CANTX_PACK_VALUES_P1_DLC (CAN_DEFAULT_DLC) /**@}*/ /** TX messages - string related */ /** CAN message properties for string state. Required properties are: - * - Message ID - * - Identifier type (standard or extended) - * - Message period and phase in ms - * - Endianness of message data @{*/ -#define CANTX_STRING_STATE_ID (0x221u) + * - ID + * - Identifier type (standard or extended) + * - Period and phase in ms + * - Endianness + * - data length @{*/ +#define CANTX_STRING_STATE_ID (0x240u) #define CANTX_STRING_STATE_ID_TYPE (CAN_STANDARD_IDENTIFIER_11_BIT) #define CANTX_STRING_STATE_PERIOD_ms (100u) #define CANTX_STRING_STATE_PHASE_ms (70u) #define CANTX_STRING_STATE_ENDIANNESS (CAN_BIG_ENDIAN) +#define CANTX_STRING_STATE_DLC (CAN_DEFAULT_DLC) /**@}*/ /** CAN message properties for string values part 0. Required properties are: - * - Message ID - * - Identifier type (standard or extended) - * - Message period and phase in ms - * - Endianness of message data @{*/ -#define CANTX_STRING_VALUES_P0_ID (0x280u) + * - ID + * - Identifier type (standard or extended) + * - Period and phase in ms + * - Endianness + * - data length @{*/ +#define CANTX_STRING_VALUES_P0_ID (0x243u) #define CANTX_STRING_VALUES_P0_ID_TYPE (CAN_STANDARD_IDENTIFIER_11_BIT) #define CANTX_STRING_VALUES_P0_PERIOD_ms (100u) #define CANTX_STRING_VALUES_P0_PHASE_ms (80u) #define CANTX_STRING_VALUES_P0_ENDIANNESS (CAN_BIG_ENDIAN) +#define CANTX_STRING_VALUES_P0_DLC (CAN_DEFAULT_DLC) /**@}*/ /** CAN message properties for string values part 1. Required properties are: - * - Message ID - * - Identifier type (standard or extended) - * - Message period and phase in ms - * - Endianness of message data @{*/ -#define CANTX_STRING_VALUES_P1_ID (0x283u) + * - ID + * - Identifier type (standard or extended) + * - Period and phase in ms + * - Endianness + * - data length @{*/ +#define CANTX_STRING_VALUES_P1_ID (0x244u) #define CANTX_STRING_VALUES_P1_ID_TYPE (CAN_STANDARD_IDENTIFIER_11_BIT) #define CANTX_STRING_VALUES_P1_PERIOD_ms (100u) #define CANTX_STRING_VALUES_P1_PHASE_ms (10u) #define CANTX_STRING_VALUES_P1_ENDIANNESS (CAN_BIG_ENDIAN) +#define CANTX_STRING_VALUES_P1_DLC (CAN_DEFAULT_DLC) /**@}*/ /** CAN message properties for string minimum and maximum values. Required properties are: - * - Message ID - * - Identifier type (standard or extended) - * - Message period and phase in ms - * - Endianness of message data @{*/ -#define CANTX_STRING_MIN_MAX_VALUES_ID (0x281u) -#define CANTX_STRING_MIN_MAX_VALUES_ID_TYPE (CAN_STANDARD_IDENTIFIER_11_BIT) -#define CANTX_STRING_MIN_MAX_VALUES_PERIOD_ms (100u) -#define CANTX_STRING_MIN_MAX_VALUES_PHASE_ms (90u) -#define CANTX_STRING_MIN_MAX_VALUES_ENDIANNESS (CAN_BIG_ENDIAN) + * - ID + * - Identifier type (standard or extended) + * - Period and phase in ms + * - Endianness + * - data length @{*/ +#define CANTX_STRING_MINIMUM_MAXIMUM_VALUES_ID (0x241u) +#define CANTX_STRING_MINIMUM_MAXIMUM_VALUES_ID_TYPE (CAN_STANDARD_IDENTIFIER_11_BIT) +#define CANTX_STRING_MINIMUM_MAXIMUM_VALUES_PERIOD_ms (100u) +#define CANTX_STRING_MINIMUM_MAXIMUM_VALUES_PHASE_ms (90u) +#define CANTX_STRING_MINIMUM_MAXIMUM_VALUES_ENDIANNESS (CAN_BIG_ENDIAN) +#define CANTX_STRING_MINIMUM_MAXIMUM_VALUES_DLC (CAN_DEFAULT_DLC) /**@}*/ /** CAN message properties for string state estimation values. Required properties are: - * - Message ID - * - Identifier type (standard or extended) - * - Message period and phase in ms - * - Endianness of message data @{*/ -#define CANTX_STRING_STATE_ESTIMATION_ID (0x282u) + * - ID + * - Identifier type (standard or extended) + * - Period and phase in ms + * - Endianness + * - data length @{*/ +#define CANTX_STRING_STATE_ESTIMATION_ID (0x245u) #define CANTX_STRING_STATE_ESTIMATION_ID_TYPE (CAN_STANDARD_IDENTIFIER_11_BIT) #define CANTX_STRING_STATE_ESTIMATION_PERIOD_ms (1000u) #define CANTX_STRING_STATE_ESTIMATION_PHASE_ms (0u) #define CANTX_STRING_STATE_ESTIMATION_ENDIANNESS (CAN_BIG_ENDIAN) +#define CANTX_STRING_STATE_ESTIMATION_DLC (CAN_DEFAULT_DLC) /**@}*/ -/** - * -------------------------CAUTION------------------------- - * The following defines are used by the insulation monitoring device (IMD). - * If they are changed, the IMD will not work anymore - * -------------------------CAUTION------------------------- - */ -/** CAN message ID for request message to iso165c */ -#define CANTX_IMD_REQUEST_ID (0x22u) -/** CAN message identifier type */ -#define CANTX_IMD_ID_TYPE (CAN_STANDARD_IDENTIFIER_11_BIT) - /* composed Tx messages */ /* AXIVION Disable Style Generic-NoUnsafeMacro: These macros MUST only be used @@ -255,7 +270,7 @@ { \ .id = CANTX_BMS_STATE_ID, \ .idType = CANTX_BMS_STATE_ID_TYPE, \ - .dlc = CAN_DEFAULT_DLC, \ + .dlc = CANTX_BMS_STATE_DLC, \ .endianness = CANTX_BMS_STATE_ENDIANNESS, \ }, \ { \ @@ -266,7 +281,7 @@ { \ .id = CANTX_BMS_STATE_DETAILS_ID, \ .idType = CANTX_BMS_STATE_DETAILS_ID_TYPE, \ - .dlc = CAN_DEFAULT_DLC, \ + .dlc = CANTX_BMS_STATE_DETAILS_DLC, \ .endianness = CANTX_BMS_STATE_DETAILS_ENDIANNESS, \ }, \ { \ @@ -277,40 +292,40 @@ { \ .id = CANTX_CELL_VOLTAGES_ID, \ .idType = CANTX_CELL_VOLTAGES_ID_TYPE, \ - .dlc = CAN_DEFAULT_DLC, \ + .dlc = CANTX_CELL_VOLTAGES_DLC, \ .endianness = CANTX_CELL_VOLTAGES_ENDIANNESS, \ }, \ { \ .period = CANTX_CELL_VOLTAGES_PERIOD_ms, .phase = CANTX_CELL_VOLTAGES_PHASE_ms \ } -#define CANTX_MINIMUM_MAXIMUM_VALUES_MESSAGE \ - { \ - .id = CANTX_MINIMUM_MAXIMUM_VALUES_ID, \ - .idType = CANTX_MINIMUM_MAXIMUM_VALUES_ID_TYPE, \ - .dlc = CAN_DEFAULT_DLC, \ - .endianness = CANTX_MINIMUM_MAXIMUM_VALUES_ENDIANNESS, \ - }, \ - { \ - .period = CANTX_MINIMUM_MAXIMUM_VALUES_PERIOD_ms, .phase = CANTX_MINIMUM_MAXIMUM_VALUES_PHASE_ms \ +#define CANTX_PACK_MINIMUM_MAXIMUM_VALUES_MESSAGE \ + { \ + .id = CANTX_PACK_MINIMUM_MAXIMUM_VALUES_ID, \ + .idType = CANTX_PACK_MINIMUM_MAXIMUM_VALUES_ID_TYPE, \ + .dlc = CANTX_PACK_MINIMUM_MAXIMUM_VALUES_DLC, \ + .endianness = CANTX_PACK_MINIMUM_MAXIMUM_VALUES_ENDIANNESS, \ + }, \ + { \ + .period = CANTX_PACK_MINIMUM_MAXIMUM_VALUES_PERIOD_ms, .phase = CANTX_PACK_MINIMUM_MAXIMUM_VALUES_PHASE_ms \ } -#define CANTX_LIMIT_VALUES_MESSAGE \ - { \ - .id = CANTX_LIMIT_VALUES_ID, \ - .idType = CANTX_LIMIT_VALUES_ID_TYPE, \ - .dlc = CAN_DEFAULT_DLC, \ - .endianness = CANTX_LIMIT_VALUES_ENDIANNESS, \ - }, \ - { \ - .period = CANTX_LIMIT_VALUES_PERIOD_ms, .phase = CANTX_LIMIT_VALUES_PHASE_ms \ +#define CANTX_PACK_LIMITS_MESSAGE \ + { \ + .id = CANTX_PACK_LIMITS_ID, \ + .idType = CANTX_PACK_LIMITS_ID_TYPE, \ + .dlc = CANTX_PACK_LIMITS_DLC, \ + .endianness = CANTX_PACK_LIMITS_ENDIANNESS, \ + }, \ + { \ + .period = CANTX_PACK_LIMITS_PERIOD_ms, .phase = CANTX_PACK_LIMITS_PHASE_ms \ } #define CANTX_CELL_TEMPERATURES_MESSAGE \ { \ .id = CANTX_CELL_TEMPERATURES_ID, \ .idType = CANTX_CELL_TEMPERATURES_ID_TYPE, \ - .dlc = CAN_DEFAULT_DLC, \ + .dlc = CANTX_CELL_TEMPERATURES_DLC, \ .endianness = CANTX_CELL_TEMPERATURES_ENDIANNESS, \ }, \ { \ @@ -321,29 +336,40 @@ { \ .id = CANTX_PACK_STATE_ESTIMATION_ID, \ .idType = CANTX_PACK_STATE_ESTIMATION_ID_TYPE, \ - .dlc = CAN_DEFAULT_DLC, \ + .dlc = CANTX_PACK_STATE_ESTIMATION_DLC, \ .endianness = CANTX_PACK_STATE_ESTIMATION_ENDIANNESS, \ }, \ { \ .period = CANTX_PACK_STATE_ESTIMATION_PERIOD_ms, .phase = CANTX_PACK_STATE_ESTIMATION_PHASE_ms \ } -#define CANTX_PACK_VALUES_MESSAGE \ - { \ - .id = CANTX_PACK_VALUES_ID, \ - .idType = CANTX_PACK_VALUES_ID_TYPE, \ - .dlc = CAN_DEFAULT_DLC, \ - .endianness = CANTX_PACK_VALUES_ENDIANNESS, \ - }, \ - { \ - .period = CANTX_PACK_VALUES_PERIOD_ms, .phase = CANTX_PACK_VALUES_PHASE_ms \ +#define CANTX_PACK_VALUES_P0_MESSAGE \ + { \ + .id = CANTX_PACK_VALUES_P0_ID, \ + .idType = CANTX_PACK_VALUES_P0_ID_TYPE, \ + .dlc = CANTX_PACK_VALUES_P0_DLC, \ + .endianness = CANTX_PACK_VALUES_P0_ENDIANNESS, \ + }, \ + { \ + .period = CANTX_PACK_VALUES_P0_PERIOD_ms, .phase = CANTX_PACK_VALUES_P0_PHASE_ms \ + } + +#define CANTX_PACK_VALUES_P1_MESSAGE \ + { \ + .id = CANTX_PACK_VALUES_P1_ID, \ + .idType = CANTX_PACK_VALUES_P1_ID_TYPE, \ + .dlc = CANTX_PACK_VALUES_P1_DLC, \ + .endianness = CANTX_PACK_VALUES_P1_ENDIANNESS, \ + }, \ + { \ + .period = CANTX_PACK_VALUES_P1_PERIOD_ms, .phase = CANTX_PACK_VALUES_P1_PHASE_ms \ } #define CANTX_STRING_STATE_MESSAGE \ { \ .id = CANTX_STRING_STATE_ID, \ .idType = CANTX_STRING_STATE_ID_TYPE, \ - .dlc = CAN_DEFAULT_DLC, \ + .dlc = CANTX_STRING_STATE_DLC, \ .endianness = CANTX_STRING_STATE_ENDIANNESS, \ }, \ { \ @@ -354,7 +380,7 @@ { \ .id = CANTX_STRING_VALUES_P0_ID, \ .idType = CANTX_STRING_VALUES_P0_ID_TYPE, \ - .dlc = CAN_DEFAULT_DLC, \ + .dlc = CANTX_STRING_VALUES_P0_DLC, \ .endianness = CANTX_STRING_VALUES_P0_ENDIANNESS, \ }, \ { \ @@ -365,29 +391,29 @@ { \ .id = CANTX_STRING_VALUES_P1_ID, \ .idType = CANTX_STRING_VALUES_P1_ID_TYPE, \ - .dlc = CAN_DEFAULT_DLC, \ + .dlc = CANTX_STRING_VALUES_P1_DLC, \ .endianness = CANTX_STRING_VALUES_P1_ENDIANNESS, \ }, \ { \ .period = CANTX_STRING_VALUES_P1_PERIOD_ms, .phase = CANTX_STRING_VALUES_P1_PHASE_ms \ } -#define CANTX_STRING_MIN_MAX_VALUES_MESSAGE \ - { \ - .id = CANTX_STRING_MIN_MAX_VALUES_ID, \ - .idType = CANTX_STRING_MIN_MAX_VALUES_ID_TYPE, \ - .dlc = CAN_DEFAULT_DLC, \ - .endianness = CANTX_STRING_MIN_MAX_VALUES_ENDIANNESS, \ - }, \ - { \ - .period = CANTX_STRING_MIN_MAX_VALUES_PERIOD_ms, .phase = CANTX_STRING_MIN_MAX_VALUES_PHASE_ms \ +#define CANTX_STRING_MINIMUM_MAXIMUM_VALUES_MESSAGE \ + { \ + .id = CANTX_STRING_MINIMUM_MAXIMUM_VALUES_ID, \ + .idType = CANTX_STRING_MINIMUM_MAXIMUM_VALUES_ID_TYPE, \ + .dlc = CANTX_STRING_MINIMUM_MAXIMUM_VALUES_DLC, \ + .endianness = CANTX_STRING_MINIMUM_MAXIMUM_VALUES_ENDIANNESS, \ + }, \ + { \ + .period = CANTX_STRING_MINIMUM_MAXIMUM_VALUES_PERIOD_ms, .phase = CANTX_STRING_MINIMUM_MAXIMUM_VALUES_PHASE_ms \ } #define CANTX_STRING_STATE_ESTIMATION_MESSAGE \ { \ .id = CANTX_STRING_STATE_ESTIMATION_ID, \ .idType = CANTX_STRING_STATE_ESTIMATION_ID_TYPE, \ - .dlc = CAN_DEFAULT_DLC, \ + .dlc = CANTX_STRING_STATE_ESTIMATION_DLC, \ .endianness = CANTX_STRING_STATE_ESTIMATION_ENDIANNESS, \ }, \ { \ @@ -403,4 +429,4 @@ #ifdef UNITY_UNIT_TEST #endif -#endif /* FOXBMS__CAN_CFG_TX_MESSAGE_DEFINITIONS_H_ */ +#endif /* FOXBMS__CAN_CFG_TX_CYCLIC_MESSAGE_DEFINITIONS_H_ */ diff --git a/src/app/driver/config/can_cfg_tx.c b/src/app/driver/config/can_cfg_tx_cyclic.c similarity index 73% rename from src/app/driver/config/can_cfg_tx.c rename to src/app/driver/config/can_cfg_tx_cyclic.c index 4788c037..6661cd21 100644 --- a/src/app/driver/config/can_cfg_tx.c +++ b/src/app/driver/config/can_cfg_tx_cyclic.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,34 +33,31 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ /** - * @file can_cfg_tx.c + * @file can_cfg_tx_cyclic.c * @author foxBMS Team * @date 2019-12-04 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS_CONFIGURATION * @prefix CANTX * * @brief Configuration for the CAN module - * * @details The CAN bus settings and the transmitted messages and their * reception handling are to be specified here. - * - * */ /*========== Includes =======================================================*/ #include "can_cfg.h" -#include "can_cbs_tx.h" -#include "can_cfg_tx-message-definitions.h" +#include "can_cbs_tx_cyclic.h" +#include "can_cfg_tx-cyclic-message-definitions.h" #include "database.h" #include "ftask.h" @@ -71,13 +68,13 @@ /*========== Static Constant and Variable Definitions =======================*/ /** Multiplexer values @{*/ -static uint8_t cantx_voltagesMux = 0u; -static uint8_t cantx_temperaturesMux = 0u; -static uint8_t cantx_stringStateMux = 0u; -static uint8_t cantx_stringValuesP0Mux = 0u; -static uint8_t cantx_stringMinMaxMux = 0u; -static uint8_t cantx_stringStateEstimationMux = 0u; -static uint8_t cantx_stringValuesP1Mux = 0u; +static uint8_t cantx_cellVoltagesMux = 0u; +static uint8_t cantx_cellTemperaturesMux = 0u; +static uint8_t cantx_stringStateMux = 0u; +static uint8_t cantx_stringValuesP0Mux = 0u; +static uint8_t cantx_stringValuesP1Mux = 0u; +static uint8_t cantx_stringMinimumMaximumValuesMux = 0u; +static uint8_t cantx_stringStateEstimationMux = 0u; /**@}*/ /*========== Extern Constant and Variable Definitions =======================*/ @@ -86,18 +83,21 @@ static uint8_t cantx_stringValuesP1Mux = 0u; const CAN_TX_MESSAGE_TYPE_s can_txMessages[] = { {CAN_NODE_1, CANTX_BMS_STATE_MESSAGE, &CANTX_BmsState, NULL_PTR}, {CAN_NODE_1, CANTX_BMS_STATE_DETAILS_MESSAGE, &CANTX_BmsStateDetails, NULL_PTR}, - {CAN_NODE_1, CANTX_CELL_VOLTAGES_MESSAGE, &CANTX_CellVoltages, &cantx_voltagesMux}, - {CAN_NODE_1, CANTX_CELL_TEMPERATURES_MESSAGE, &CANTX_CellTemperatures, &cantx_temperaturesMux}, - {CAN_NODE_1, CANTX_LIMIT_VALUES_MESSAGE, &CANTX_LimitValues, NULL_PTR}, - {CAN_NODE_1, CANTX_MINIMUM_MAXIMUM_VALUES_MESSAGE, &CANTX_MinimumMaximumValues, NULL_PTR}, + {CAN_NODE_1, CANTX_CELL_VOLTAGES_MESSAGE, &CANTX_CellVoltages, &cantx_cellVoltagesMux}, + {CAN_NODE_1, CANTX_CELL_TEMPERATURES_MESSAGE, &CANTX_CellTemperatures, &cantx_cellTemperaturesMux}, + {CAN_NODE_1, CANTX_PACK_LIMITS_MESSAGE, &CANTX_PackLimits, NULL_PTR}, + {CAN_NODE_1, CANTX_PACK_MINIMUM_MAXIMUM_VALUES_MESSAGE, &CANTX_PackMinimumMaximumValues, NULL_PTR}, {CAN_NODE_1, CANTX_PACK_STATE_ESTIMATION_MESSAGE, &CANTX_PackStateEstimation, NULL_PTR}, - {CAN_NODE_1, CANTX_PACK_VALUES_MESSAGE, &CANTX_PackValues, NULL_PTR}, + {CAN_NODE_1, CANTX_PACK_VALUES_P0_MESSAGE, &CANTX_PackValuesP0, NULL_PTR}, + {CAN_NODE_1, CANTX_PACK_VALUES_P1_MESSAGE, &CANTX_PackValuesP1, NULL_PTR}, {CAN_NODE_1, CANTX_STRING_STATE_MESSAGE, &CANTX_StringState, &cantx_stringStateMux}, - {CAN_NODE_1, CANTX_STRING_MIN_MAX_VALUES_MESSAGE, &CANTX_StringMinimumMaximumValues, &cantx_stringMinMaxMux}, + {CAN_NODE_1, + CANTX_STRING_MINIMUM_MAXIMUM_VALUES_MESSAGE, + &CANTX_StringMinimumMaximumValues, + &cantx_stringMinimumMaximumValuesMux}, {CAN_NODE_1, CANTX_STRING_STATE_ESTIMATION_MESSAGE, &CANTX_StringStateEstimation, &cantx_stringStateEstimationMux}, {CAN_NODE_1, CANTX_STRING_VALUES_P0_MESSAGE, &CANTX_StringValuesP0, &cantx_stringValuesP0Mux}, - {CAN_NODE_1, CANTX_STRING_VALUES_P1_MESSAGE, &CANTX_StringValuesP1, &cantx_stringValuesP1Mux}, -}; + {CAN_NODE_1, CANTX_STRING_VALUES_P1_MESSAGE, &CANTX_StringValuesP1, &cantx_stringValuesP1Mux}}; /** length of CAN message arrays */ const uint8_t can_txMessagesLength = sizeof(can_txMessages) / sizeof(can_txMessages[0]); diff --git a/src/app/driver/config/contactor_cfg.c b/src/app/driver/config/contactor_cfg.c index 772d0cf4..60f11e3f 100644 --- a/src/app/driver/config/contactor_cfg.c +++ b/src/app/driver/config/contactor_cfg.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file contactor_cfg.c * @author foxBMS Team * @date 2020-02-11 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup DRIVERS_CONF + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS_CONFIGURATION * @prefix CONT * * @brief Configuration for the driver for the contactors - * + * @details TODO */ /*========== Includes =======================================================*/ diff --git a/src/app/driver/config/contactor_cfg.h b/src/app/driver/config/contactor_cfg.h index dbe86243..d3a9f70b 100644 --- a/src/app/driver/config/contactor_cfg.h +++ b/src/app/driver/config/contactor_cfg.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file contactor_cfg.h * @author foxBMS Team * @date 2020-02-11 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS_CONFIGURATION * @prefix CONT * * @brief Header for the configuration for the driver for the contactors - * + * @details TODO */ #ifndef FOXBMS__CONTACTOR_CFG_H_ @@ -105,7 +105,7 @@ typedef enum { /** Status struct for a registry of all contactors */ typedef struct { - CONT_ELECTRICAL_STATE_TYPE_e currentSet; /*!< current setpoint for the contactor */ + CONT_ELECTRICAL_STATE_TYPE_e currentSet; /*!< current set point for the contactor */ CONT_ELECTRICAL_STATE_TYPE_e feedback; /*!< feedback from the contactor */ const CONT_FEEDBACK_TYPE_e feedbackPinType; /*!< type of feedback that the contactor uses */ const BS_STRING_ID_e stringIndex; /*!< index in which string the contactor is placed */ diff --git a/src/app/driver/config/dma_cfg.c b/src/app/driver/config/dma_cfg.c index 8d64b4c3..62f3888d 100644 --- a/src/app/driver/config/dma_cfg.c +++ b/src/app/driver/config/dma_cfg.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file dma_cfg.c * @author foxBMS Team * @date 2020-03-05 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS_CONFIGURATION * @prefix DMA * * @brief Configuration for the DMA module - * + * @details TODO */ /*========== Includes =======================================================*/ diff --git a/src/app/driver/config/dma_cfg.h b/src/app/driver/config/dma_cfg.h index fcfb6fca..15023660 100644 --- a/src/app/driver/config/dma_cfg.h +++ b/src/app/driver/config/dma_cfg.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,14 +43,13 @@ * @file dma_cfg.h * @author foxBMS Team * @date 2020-03-05 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS_CONFIGURATION * @prefix DMA * * @brief Headers for the configuration for the DMA module - * - * + * @details TODO */ #ifndef FOXBMS__DMA_CFG_H_ @@ -114,9 +113,9 @@ /** number of spi interfaces for DMA */ #define DMA_NUMBER_SPI_INTERFACES (5u) /** DMA Request enable bit */ -#define DMAREQEN_BIT (0x10000u) +#define DMA_REQUEST_ENABLE_BIT (0x10000u) /** SPI enable bit */ -#define SPIEN_BIT (0x1000000u) +#define DMA_SPI_ENABLE_BIT (0x1000000u) /** DMA request line for LTC */ /**@{*/ diff --git a/src/app/driver/config/fram_cfg.c b/src/app/driver/config/fram_cfg.c index 3d0f35b0..0bd389f9 100644 --- a/src/app/driver/config/fram_cfg.c +++ b/src/app/driver/config/fram_cfg.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file fram_cfg.c * @author foxBMS Team * @date 2020-03-05 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS_CONFIGURATION * @prefix FRAM * * @brief Configuration for the FRAM module - * + * @details TODO */ /*========== Includes =======================================================*/ @@ -74,8 +74,8 @@ FRAM_SBC_INIT_s fram_sbcInit = { .phase = 0u, .finState = STD_NOT_OK, }; -FRAM_DEEP_DISCHARGE_FLAG_s fram_deepDischargeFlags = {0}; -FRAM_SYS_MON_RECORD_s fram_sys_mon_record = {0}; +FRAM_DEEP_DISCHARGE_FLAG_s fram_deepDischargeFlags = {false}; +FRAM_SYS_MON_RECORD_s fram_sysMonViolationRecord = {0}; FRAM_INSULATION_FLAG_s fram_insulationFlags = {.groundErrorDetected = false}; /**@}*/ @@ -83,13 +83,13 @@ FRAM_INSULATION_FLAG_s fram_insulationFlags = {.groundErrorDetected = fal * The zeros are the uninitialized addresses of the variables * in the FRAM. They are initialized by the call of FRAM_Initialize() */ -FRAM_BASE_HEADER_s fram_base_header[] = { +FRAM_BASE_HEADER_s fram_databaseHeader[] = { {(void *)(&fram_version), sizeof(fram_version), 0}, {(void *)(&fram_soc), sizeof(fram_soc), 0}, {(void *)(&fram_sbcInit), sizeof(fram_sbcInit), 0}, {(void *)(&fram_deepDischargeFlags), sizeof(fram_deepDischargeFlags), 0}, {(void *)(&fram_soe), sizeof(fram_soe), 0}, - {(void *)(&fram_sys_mon_record), sizeof(fram_sys_mon_record), 0}, + {(void *)(&fram_sysMonViolationRecord), sizeof(fram_sysMonViolationRecord), 0}, {(void *)(&fram_insulationFlags), sizeof(fram_insulationFlags), 0}, }; diff --git a/src/app/driver/config/fram_cfg.h b/src/app/driver/config/fram_cfg.h index e3274f07..247ab078 100644 --- a/src/app/driver/config/fram_cfg.h +++ b/src/app/driver/config/fram_cfg.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,14 +43,13 @@ * @file fram_cfg.h * @author foxBMS Team * @date 2020-03-05 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix FRAM * * @brief Headers for the configuration for the FRAM module - * - * + * @details TODO */ #ifndef FOXBMS__FRAM_CFG_H_ @@ -63,6 +62,7 @@ #include "fstd_types.h" #include +#include #include /*========== Macros and Definitions =========================================*/ @@ -112,6 +112,8 @@ typedef enum { FRAM_BLOCK_MAX, /**< DO NOT CHANGE, MUST BE THE LAST ENTRY */ } FRAM_BLOCK_ID_e; +FAS_STATIC_ASSERT(((uint32_t)FRAM_BLOCK_MAX < (uint32_t)UINT8_MAX), "Looping over 'FRAM_BLOCK_MAX' assumes 'uint8_t'."); + /** * @brief Stores the version of the memory layout of the FRAM * @details This struct stores with which memory-layout version the FRAM has @@ -138,9 +140,11 @@ typedef struct { * 0.0f and 100.0f (0% and 100%) */ typedef struct { - float_t minimumSoc_perc[BS_NR_OF_STRINGS]; /*!< minimum SOC */ - float_t maximumSoc_perc[BS_NR_OF_STRINGS]; /*!< maximum SOC */ - float_t averageSoc_perc[BS_NR_OF_STRINGS]; /*!< average SOC */ + float_t minimumSoc_perc[BS_NR_OF_STRINGS]; /*!< minimum SOC */ + float_t maximumSoc_perc[BS_NR_OF_STRINGS]; /*!< maximum SOC */ + float_t averageSoc_perc[BS_NR_OF_STRINGS]; /*!< average SOC */ + float_t chargeThroughput_As[BS_NR_OF_STRINGS]; /*!< Charge througput */ + float_t dischargeThroughput_As[BS_NR_OF_STRINGS]; /*!< Discharge througput */ } FRAM_SOC_s; /** @@ -149,9 +153,11 @@ typedef struct { * 0.0f and 100.0f (0% and 100%) */ typedef struct { - float_t minimumSoe_perc[BS_NR_OF_STRINGS]; /*!< minimum SOE */ - float_t maximumSoe_perc[BS_NR_OF_STRINGS]; /*!< maximum SOE */ - float_t averageSoe_perc[BS_NR_OF_STRINGS]; /*!< average SOE */ + float_t minimumSoe_perc[BS_NR_OF_STRINGS]; /*!< minimum SOE */ + float_t maximumSoe_perc[BS_NR_OF_STRINGS]; /*!< maximum SOE */ + float_t averageSoe_perc[BS_NR_OF_STRINGS]; /*!< average SOE */ + float_t chargeEnergyThroughput_Wh[BS_NR_OF_STRINGS]; /*!< inflow of energy */ + float_t dischargeEnergyThroughput_Wh[BS_NR_OF_STRINGS]; /*!< outflow of energy */ } FRAM_SOE_s; /** flag to indicate if a deep-discharge in a string has been detected */ @@ -161,7 +167,7 @@ typedef struct { /** flag to indicate if insulation ground error has been detected */ typedef struct { - bool groundErrorDetected; /*!< false (0): no error, true (1): gorund error detected */ + bool groundErrorDetected; /*!< false (0): no error, true (1): ground error detected */ } FRAM_INSULATION_FLAG_s; /** @@ -194,7 +200,7 @@ typedef struct { /*========== Extern Constant and Variable Declarations ======================*/ -extern FRAM_BASE_HEADER_s fram_base_header[FRAM_BLOCK_MAX]; +extern FRAM_BASE_HEADER_s fram_databaseHeader[FRAM_BLOCK_MAX]; /** * Variables to be stored in FRAM @@ -205,7 +211,7 @@ extern FRAM_SOC_s fram_soc; extern FRAM_SOE_s fram_soe; extern FRAM_SBC_INIT_s fram_sbcInit; extern FRAM_DEEP_DISCHARGE_FLAG_s fram_deepDischargeFlags; -extern FRAM_SYS_MON_RECORD_s fram_sys_mon_record; +extern FRAM_SYS_MON_RECORD_s fram_sysMonViolationRecord; extern FRAM_INSULATION_FLAG_s fram_insulationFlags; /**@}*/ diff --git a/src/app/driver/config/interlock_cfg.h b/src/app/driver/config/interlock_cfg.h index ad71d9b7..c6edb2df 100644 --- a/src/app/driver/config/interlock_cfg.h +++ b/src/app/driver/config/interlock_cfg.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file interlock_cfg.h * @author foxBMS Team * @date 2020-02-24 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS_CONFIGURATION * @prefix ILCK * * @brief Header for the configuration for the driver for the interlock - * + * @details TODO */ #ifndef FOXBMS__INTERLOCK_CFG_H_ diff --git a/src/app/driver/config/pex_cfg.c b/src/app/driver/config/pex_cfg.c index ce12f65d..a2f5a6f0 100644 --- a/src/app/driver/config/pex_cfg.c +++ b/src/app/driver/config/pex_cfg.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file pex_cfg.c * @author foxBMS Team * @date 2021-08-02 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS_CONFIGURATION * @prefix PEX * * @brief Configuration for the NXP PCA9539 port expander module - * + * @details TODO */ /*========== Includes =======================================================*/ diff --git a/src/app/driver/config/pex_cfg.h b/src/app/driver/config/pex_cfg.h index b0a63a22..e1325fb9 100644 --- a/src/app/driver/config/pex_cfg.h +++ b/src/app/driver/config/pex_cfg.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,14 +43,13 @@ * @file pex_cfg.h * @author foxBMS Team * @date 2021-08-02 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS_CONFIGURATION * @prefix PEX * * @brief Headers for the configuration for the NXP PCA9539 port expander module - * - * + * @details TODO */ #ifndef FOXBMS__PEX_CFG_H_ @@ -79,22 +78,22 @@ /** Port expander pin positions in registers */ /**@{*/ -#define PEX_PIN00 (0u) -#define PEX_PIN01 (1u) -#define PEX_PIN02 (2u) -#define PEX_PIN03 (3u) -#define PEX_PIN04 (4u) -#define PEX_PIN05 (5u) -#define PEX_PIN06 (6u) -#define PEX_PIN07 (7u) -#define PEX_PIN10 (8u) -#define PEX_PIN11 (9u) -#define PEX_PIN12 (10u) -#define PEX_PIN13 (11u) -#define PEX_PIN14 (12u) -#define PEX_PIN15 (13u) -#define PEX_PIN16 (14u) -#define PEX_PIN17 (15u) +#define PEX_PORT_0_PIN_0 (0u) +#define PEX_PORT_0_PIN_1 (1u) +#define PEX_PORT_0_PIN_2 (2u) +#define PEX_PORT_0_PIN_3 (3u) +#define PEX_PORT_0_PIN_4 (4u) +#define PEX_PORT_0_PIN_5 (5u) +#define PEX_PORT_0_PIN_6 (6u) +#define PEX_PORT_0_PIN_7 (7u) +#define PEX_PORT_1_PIN_0 (8u) +#define PEX_PORT_1_PIN_1 (9u) +#define PEX_PORT_1_PIN_2 (10u) +#define PEX_PORT_1_PIN_3 (11u) +#define PEX_PORT_1_PIN_4 (12u) +#define PEX_PORT_1_PIN_5 (13u) +#define PEX_PORT_1_PIN_6 (14u) +#define PEX_PORT_1_PIN_7 (15u) /* AXIVION Enable Style MisraC2012-2.5: */ /**@}*/ diff --git a/src/app/driver/config/spi_cfg.c b/src/app/driver/config/spi_cfg.c index 90ff2385..f428055d 100644 --- a/src/app/driver/config/spi_cfg.c +++ b/src/app/driver/config/spi_cfg.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file spi_cfg.c * @author foxBMS Team * @date 2020-03-05 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS_CONFIGURATION * @prefix SPI * * @brief Configuration for the SPI module - * + * @details TODO */ /*========== Includes =======================================================*/ @@ -85,6 +85,7 @@ * SPIDAT1 register activates the corresponding Chip Select pin. */ +#if defined(FOXBMS_AFE_DRIVER_ADI) && (FOXBMS_AFE_DRIVER_ADI == 1) /** SPI data configuration struct for ADI communication */ static spiDAT1_t spi_kAdiDataConfig[BS_NR_OF_STRINGS] = { { /* struct is implemented in the TI HAL and uses uppercase true and false */ @@ -94,7 +95,13 @@ static spiDAT1_t spi_kAdiDataConfig[BS_NR_OF_STRINGS] = { /* Hardware chip select is configured automatically depending on configuration in #SPI_INTERFACE_CONFIG_s */ .CSNR = SPI_HARDWARE_CHIP_SELECT_DISABLE_ALL}, }; +#endif +#if defined(FOXBMS_AFE_DRIVER_DEBUG) && (FOXBMS_AFE_DRIVER_DEBUG == 1) +/* no SPI data configuration needed */ +#endif + +#if defined(FOXBMS_AFE_DRIVER_LTC) && (FOXBMS_AFE_DRIVER_LTC == 1) /** SPI data configuration struct for LTC communication */ static spiDAT1_t spi_kLtcDataConfig[BS_NR_OF_STRINGS] = { { /* struct is implemented in the TI HAL and uses uppercase true and false */ @@ -104,7 +111,9 @@ static spiDAT1_t spi_kLtcDataConfig[BS_NR_OF_STRINGS] = { /* Hardware chip select is configured automatically depending on configuration in #SPI_INTERFACE_CONFIG_s */ .CSNR = SPI_HARDWARE_CHIP_SELECT_DISABLE_ALL}, }; +#endif +#if defined(FOXBMS_AFE_DRIVER_MAXIM) && (FOXBMS_AFE_DRIVER_MAXIM == 1) /** SPI data configuration struct for MXM communication */ static spiDAT1_t spi_kMxmDataConfig = { .CS_HOLD = TRUE, /* If true, HW chip select kept active */ @@ -113,7 +122,9 @@ static spiDAT1_t spi_kMxmDataConfig = { /* Hardware chip select is configured automatically depending on configuration in #SPI_INTERFACE_CONFIG_s */ .CSNR = SPI_HARDWARE_CHIP_SELECT_DISABLE_ALL, }; +#endif +#if defined(FOXBMS_AFE_DRIVER_NXP) && (FOXBMS_AFE_DRIVER_NXP == 1) /** SPI data configuration struct for NXP MC33775A communication, Tx part */ static spiDAT1_t spi_kNxp775DataConfigTx[BS_NR_OF_STRINGS] = { {.CS_HOLD = TRUE, /* If true, HW chip select kept active */ @@ -131,6 +142,11 @@ static spiDAT1_t spi_kNxp775DataConfigRx[BS_NR_OF_STRINGS] = { /* Hardware chip select is configured automatically depending on configuration in #SPI_INTERFACE_CONFIG_s */ .CSNR = SPI_HARDWARE_CHIP_SELECT_DISABLE_ALL}, }; +#endif + +#if defined(FOXBMS_AFE_DRIVER_TI) && (FOXBMS_AFE_DRIVER_TI == 1) +/* currently not supported */ +#endif /** SPI data configuration struct for FRAM communication */ static spiDAT1_t spi_kFramDataConfig = { @@ -174,9 +190,10 @@ static spiDAT1_t spi_kSbcDataConfig = { /*========== Extern Constant and Variable Definitions =======================*/ +#if defined(FOXBMS_AFE_DRIVER_ADI) && (FOXBMS_AFE_DRIVER_ADI == 1) /** * SPI interface configuration for ADI communication - * This is a list of structs because of multistring + * This is a list of structs because of multi-string */ SPI_INTERFACE_CONFIG_s spi_adiInterface[BS_NR_OF_STRINGS] = { { @@ -187,10 +204,16 @@ SPI_INTERFACE_CONFIG_s spi_adiInterface[BS_NR_OF_STRINGS] = { .csType = SPI_CHIP_SELECT_HARDWARE, }, }; +#endif + +#if defined(FOXBMS_AFE_DRIVER_DEBUG) && (FOXBMS_AFE_DRIVER_DEBUG == 1) +/* no SPI data configuration needed */ +#endif +#if defined(FOXBMS_AFE_DRIVER_LTC) && (FOXBMS_AFE_DRIVER_LTC == 1) /** * SPI interface configuration for LTC communication - * This is a list of structs because of multistring + * This is a list of structs because of multi-string */ SPI_INTERFACE_CONFIG_s spi_ltcInterface[BS_NR_OF_STRINGS] = { { @@ -201,7 +224,9 @@ SPI_INTERFACE_CONFIG_s spi_ltcInterface[BS_NR_OF_STRINGS] = { .csType = SPI_CHIP_SELECT_HARDWARE, }, }; +#endif +#if defined(FOXBMS_AFE_DRIVER_MAXIM) && (FOXBMS_AFE_DRIVER_MAXIM == 1) /** SPI interface configuration for MXM communication */ SPI_INTERFACE_CONFIG_s spi_mxmInterface = { .pConfig = &spi_kMxmDataConfig, @@ -210,7 +235,9 @@ SPI_INTERFACE_CONFIG_s spi_mxmInterface = { .csPin = SPI_MAXIM_CHIP_SELECT_PIN, .csType = SPI_CHIP_SELECT_HARDWARE, }; +#endif +#if defined(FOXBMS_AFE_DRIVER_NXP) && (FOXBMS_AFE_DRIVER_NXP == 1) /** SPI interface configuration for N775 communication Tx part */ SPI_INTERFACE_CONFIG_s spi_nxp775InterfaceTx[BS_NR_OF_STRINGS] = { { @@ -232,6 +259,11 @@ SPI_INTERFACE_CONFIG_s spi_nxp775InterfaceRx[BS_NR_OF_STRINGS] = { .csType = SPI_CHIP_SELECT_HARDWARE, }, }; +#endif + +#if defined(FOXBMS_AFE_DRIVER_TI) && (FOXBMS_AFE_DRIVER_TI == 1) +/* currently not supported */ +#endif /** SPI interface configuration for FRAM communication */ SPI_INTERFACE_CONFIG_s spi_framInterface = { diff --git a/src/app/driver/config/spi_cfg.h b/src/app/driver/config/spi_cfg.h index 0ba09a11..918379e7 100644 --- a/src/app/driver/config/spi_cfg.h +++ b/src/app/driver/config/spi_cfg.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,14 +43,13 @@ * @file spi_cfg.h * @author foxBMS Team * @date 2020-03-05 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS_CONFIGURATION * @prefix SPI * * @brief Headers for the configuration for the SPI module - * - * + * @details TODO */ #ifndef FOXBMS__SPI_CFG_H_ @@ -132,19 +131,31 @@ typedef struct { /* INCLUDE MARKER FOR THE DOCUMENTATION; DO NOT MOVE spi-documentation-configuration-stop-include */ /* -------------- SPI Configurations --------------------------------------- */ +#if defined(FOXBMS_AFE_DRIVER_ADI) && (FOXBMS_AFE_DRIVER_ADI == 1) /** ADI chip select pin */ #define SPI_ADI_CHIP_SELECT_PIN (1u) +#endif +#if defined(FOXBMS_AFE_DRIVER_LTC) && (FOXBMS_AFE_DRIVER_LTC == 1) /** LTC chip select pin */ #define SPI_LTC_CHIP_SELECT_PIN (1u) +#endif +#if defined(FOXBMS_AFE_DRIVER_MAXIM) && (FOXBMS_AFE_DRIVER_MAXIM == 1) /** Maxim chip select pin */ #define SPI_MAXIM_CHIP_SELECT_PIN (0u) +#endif +#if defined(FOXBMS_AFE_DRIVER_NXP) && (FOXBMS_AFE_DRIVER_NXP == 1) /** NXP chip select pin @{ */ #define SPI_NXP_TX_CHIP_SELECT_PIN (1u) #define SPI_NXP_RX_CHIP_SELECT_PIN (0u) /**@}*/ +#endif + +#if defined(FOXBMS_AFE_DRIVER_TI) && (FOXBMS_AFE_DRIVER_TI == 1) +/* currently not supported */ +#endif /** FRAM chip select pin */ #define SPI_FRAM_CHIP_SELECT_PIN (1u) @@ -156,11 +167,25 @@ typedef struct { /**@}*/ /*========== Extern Constant and Variable Declarations ======================*/ +#if defined(FOXBMS_AFE_DRIVER_ADI) && (FOXBMS_AFE_DRIVER_ADI == 1) extern SPI_INTERFACE_CONFIG_s spi_adiInterface[BS_NR_OF_STRINGS]; +#endif +#if defined(FOXBMS_AFE_DRIVER_DEBUG) && (FOXBMS_AFE_DRIVER_DEBUG == 1) +/* not needed */ +#endif +#if defined(FOXBMS_AFE_DRIVER_LTC) && (FOXBMS_AFE_DRIVER_LTC == 1) extern SPI_INTERFACE_CONFIG_s spi_ltcInterface[BS_NR_OF_STRINGS]; +#endif +#if defined(FOXBMS_AFE_DRIVER_MAXIM) && (FOXBMS_AFE_DRIVER_MAXIM == 1) extern SPI_INTERFACE_CONFIG_s spi_mxmInterface; +#endif +#if defined(FOXBMS_AFE_DRIVER_NXP) && (FOXBMS_AFE_DRIVER_NXP == 1) extern SPI_INTERFACE_CONFIG_s spi_nxp775InterfaceTx[BS_NR_OF_STRINGS]; extern SPI_INTERFACE_CONFIG_s spi_nxp775InterfaceRx[BS_NR_OF_STRINGS]; +#endif +#if defined(FOXBMS_AFE_DRIVER_TI) && (FOXBMS_AFE_DRIVER_TI == 1) +/* currently not supported */ +#endif extern SPI_INTERFACE_CONFIG_s spi_framInterface; extern SPI_INTERFACE_CONFIG_s spi_spsInterface; extern SPI_INTERFACE_CONFIG_s spi_sbcMcuInterface; diff --git a/src/app/driver/config/sps_cfg.c b/src/app/driver/config/sps_cfg.c index 55dd6656..a7532f69 100644 --- a/src/app/driver/config/sps_cfg.c +++ b/src/app/driver/config/sps_cfg.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file sps_cfg.c * @author foxBMS Team * @date 2020-10-14 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup DRIVERS_CONF + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS_CONFIGURATION * @prefix SPS * - * @brief Configuration for the driver for the smart power switches - * + * @brief Configuration for the driver for the smart power switches (SPS) + * @details TODO */ /*========== Includes =======================================================*/ @@ -81,16 +81,16 @@ SPS_CHANNEL_STATE_s sps_channelStatus[SPS_NR_OF_AVAILABLE_SPS_CHANNELS] = { * * IDs are the same as in #sps_channelStatus (#SPS_CHANNEL_INDEX) * * The mapping is intended to be constant; if a feedback channel shall be * used, this should also be configured in #sps_channelStatus -*/ + */ const SPS_CHANNEL_FEEDBACK_MAPPING_s sps_kChannelFeedbackMapping[SPS_NR_OF_AVAILABLE_SPS_CHANNELS] = { - {PEX_PORT_EXPANDER1, PEX_PIN00}, - {PEX_PORT_EXPANDER1, PEX_PIN01}, - {PEX_PORT_EXPANDER1, PEX_PIN02}, - {PEX_PORT_EXPANDER1, PEX_PIN03}, - {PEX_PORT_EXPANDER1, PEX_PIN04}, - {PEX_PORT_EXPANDER1, PEX_PIN05}, - {PEX_PORT_EXPANDER1, PEX_PIN06}, - {PEX_PORT_EXPANDER1, PEX_PIN07}, + {PEX_PORT_EXPANDER1, PEX_PORT_0_PIN_0}, + {PEX_PORT_EXPANDER1, PEX_PORT_0_PIN_1}, + {PEX_PORT_EXPANDER1, PEX_PORT_0_PIN_2}, + {PEX_PORT_EXPANDER1, PEX_PORT_0_PIN_3}, + {PEX_PORT_EXPANDER1, PEX_PORT_0_PIN_4}, + {PEX_PORT_EXPANDER1, PEX_PORT_0_PIN_5}, + {PEX_PORT_EXPANDER1, PEX_PORT_0_PIN_6}, + {PEX_PORT_EXPANDER1, PEX_PORT_0_PIN_7}, }; /*========== Static Function Prototypes =====================================*/ diff --git a/src/app/driver/config/sps_cfg.h b/src/app/driver/config/sps_cfg.h index d24fd36a..38aaeb3c 100644 --- a/src/app/driver/config/sps_cfg.h +++ b/src/app/driver/config/sps_cfg.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file sps_cfg.h * @author foxBMS Team * @date 2020-10-14 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup DRIVERS_CONF + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS_CONFIGURATION * @prefix SPS * * @brief Header for the configuration for the driver for the smart power switches - * + * @details TODO */ #ifndef FOXBMS__SPS_CFG_H_ diff --git a/src/app/driver/config/tsi_plausibility_cfg.h b/src/app/driver/config/tsi_plausibility_cfg.h index 2a9a8aaf..36b46622 100644 --- a/src/app/driver/config/tsi_plausibility_cfg.h +++ b/src/app/driver/config/tsi_plausibility_cfg.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file tsi_plausibility_cfg.h * @author foxBMS Team * @date 2019-01-24 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup MODULES + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS * @prefix TSI * - * @brief plausibility limits for cell temperatures - * + * @brief Plausibility limits for cell temperatures + * @details TODO */ #ifndef FOXBMS__TSI_PLAUSIBILITY_CFG_H_ diff --git a/src/app/driver/contactor/contactor.c b/src/app/driver/contactor/contactor.c index a506d210..9396ee0b 100644 --- a/src/app/driver/contactor/contactor.c +++ b/src/app/driver/contactor/contactor.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file contactor.c * @author foxBMS Team * @date 2020-02-11 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix CONT * diff --git a/src/app/driver/contactor/contactor.h b/src/app/driver/contactor/contactor.h index 8c2dd6d9..9a3fbaf5 100644 --- a/src/app/driver/contactor/contactor.h +++ b/src/app/driver/contactor/contactor.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file contactor.h * @author foxBMS Team * @date 2020-02-11 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix CONT * @@ -113,7 +113,6 @@ extern STD_RETURN_TYPE_e CONT_OpenPrecharge(uint8_t stringNumber); * @brief Open all currently closed precharge contactors * @details This function iterates over all contactors and opens all currently * closed precharge contactors - * @return none (void) */ extern void CONT_OpenAllPrechargeContactors(void); diff --git a/src/app/driver/crc/crc.c b/src/app/driver/crc/crc.c index 244e9942..406046da 100644 --- a/src/app/driver/crc/crc.c +++ b/src/app/driver/crc/crc.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file crc.c * @author foxBMS Team * @date 2022-02-22 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix CRC * @@ -74,6 +74,8 @@ /*========== Extern Function Implementations ================================*/ extern STD_RETURN_TYPE_e CRC_CalculateCrc(uint64_t *pCrc, uint8_t *pData, uint32_t lengthInBytes) { + FAS_ASSERT(pCrc != NULL_PTR); + FAS_ASSERT(pData != NULL_PTR); static uint16_t crcCalls = 0u; CRC_REGISTER_SIDE_e registerSide = CRC_REGISTER_LOW; uint32_t dataBufferLow = 0u; @@ -82,9 +84,6 @@ extern STD_RETURN_TYPE_e CRC_CalculateCrc(uint64_t *pCrc, uint8_t *pData, uint32 uint32_t remainingData = 0u; STD_RETURN_TYPE_e retVal = STD_OK; - FAS_ASSERT(pCrc != NULL_PTR); - FAS_ASSERT(pData != NULL_PTR); - uint8_t *pRead = pData; if (crcCalls == 0u) { @@ -99,7 +98,8 @@ extern STD_RETURN_TYPE_e CRC_CalculateCrc(uint64_t *pCrc, uint8_t *pData, uint32 /* Set mode to Full-CPU Mode to start the computation when writing the data*/ crcREG1->CTRL2 |= CRC_FULL_CPU_MODE_SET_MASK; - /* AXIVION Next Codeline Style MisraC2012-11.3: 64 bit access needed, partial 32 bit access starts computation */ + /* AXIVION Next Codeline Style MisraC2012-11.3: 64 bit access needed, partial 32 bit access starts computation + */ /* Pointer to access the two signature registers, where input data will be written */ volatile uint64_t *pCrcRegister = (volatile uint64 *)(&crcREG1->PSA_SIGREGL1); diff --git a/src/app/driver/crc/crc.h b/src/app/driver/crc/crc.h index 58f91e17..96af4247 100644 --- a/src/app/driver/crc/crc.h +++ b/src/app/driver/crc/crc.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,12 @@ * @file crc.h * @author foxBMS Team * @date 2022-02-22 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix CRC * - * @brief crc module header - * + * @brief CRC module header * @details Uses the system CRC hardware for data integrity calculation */ diff --git a/src/app/driver/dma/dma.c b/src/app/driver/dma/dma.c index 53865852..a842da67 100644 --- a/src/app/driver/dma/dma.c +++ b/src/app/driver/dma/dma.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file dma.c * @author foxBMS Team * @date 2019-12-12 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix DMA * @@ -275,9 +275,9 @@ void UNIT_TEST_WEAK_IMPL dmaGroupANotification(dmaInterrupt_t inttype, uint32 ch } } /** - * TX SPI DMA interrupt: last but one word transmitted, - * last word is transmitted manually (in order to write CSHOLD field) - */ + * TX SPI DMA interrupt: last but one word transmitted, + * last word is transmitted manually (in order to write CSHOLD field) + */ timeoutIterations = SPI_TX_EMPTY_TIMEOUT_ITERATIONS; /* Wait until TX buffer is free for the last word */ while (((dma_spiInterfaces[spiIndex]->FLG & @@ -304,9 +304,9 @@ void UNIT_TEST_WEAK_IMPL dmaGroupANotification(dmaInterrupt_t inttype, uint32 ch /* RX SPI DMA interrupt: last word received, means SPI transmission is finished */ if (spiIndex == SPI_GetSpiIndex(spiREG4)) { /** SPI configured as slave */ /* RX DMA interrupt, transmission finished, disable DMA */ - dma_spiInterfaces[spiIndex]->INT0 &= ~DMAREQEN_BIT; + dma_spiInterfaces[spiIndex]->INT0 &= ~DMA_REQUEST_ENABLE_BIT; /* Disable SPI to prevent unwanted reception */ - dma_spiInterfaces[spiIndex]->GCR1 &= ~SPIEN_BIT; + dma_spiInterfaces[spiIndex]->GCR1 &= ~DMA_SPI_ENABLE_BIT; /* Set slave SPI Chip Select pins as GIO to deactivate slave SPI Chip Select pins */ dma_spiInterfaces[spiIndex]->PC0 &= SPI_PC0_CLEAR_HW_CS_MASK; @@ -314,7 +314,7 @@ void UNIT_TEST_WEAK_IMPL dmaGroupANotification(dmaInterrupt_t inttype, uint32 ch AFE_DmaCallback(spiIndex); } else { /* SPI configured as master */ /* RX DMA interrupt, transmission finished, disable DMA */ - dma_spiInterfaces[spiIndex]->INT0 &= ~DMAREQEN_BIT; + dma_spiInterfaces[spiIndex]->INT0 &= ~DMA_REQUEST_ENABLE_BIT; /* Specific call for AFEs */ if (spiIndex == SPI_GetSpiIndex(spiREG1)) { @@ -326,7 +326,7 @@ void UNIT_TEST_WEAK_IMPL dmaGroupANotification(dmaInterrupt_t inttype, uint32 ch /* DMA for I2C Tx */ case DMA_CHANNEL_I2C1_TX: - i2cREG1->DMACR &= ~((uint32_t)I2C_TXDMAEN); + i2cREG1->DMACR &= ~((uint32_t)I2C_TX_DMA_ENABLE); (void)xTaskNotifyIndexedFromISR( I2C_TASK_HANDLE, I2C_NOTIFICATION_TX_INDEX, @@ -336,7 +336,7 @@ void UNIT_TEST_WEAK_IMPL dmaGroupANotification(dmaInterrupt_t inttype, uint32 ch portYIELD_FROM_ISR(xHigherPriorityTaskWoken); break; case DMA_CHANNEL_I2C2_TX: - i2cREG2->DMACR &= ~((uint32_t)I2C_TXDMAEN); + i2cREG2->DMACR &= ~((uint32_t)I2C_TX_DMA_ENABLE); (void)xTaskNotifyIndexedFromISR( I2C_TASK_HANDLE, I2C_NOTIFICATION_TX_INDEX, @@ -348,8 +348,9 @@ void UNIT_TEST_WEAK_IMPL dmaGroupANotification(dmaInterrupt_t inttype, uint32 ch /* DMA for I2C Rx */ case DMA_CHANNEL_I2C1_RX: - i2cREG1->DMACR &= ~((uint32_t)I2C_RXDMAEN); - /* Received all but the last byte, now wait until receive buffer is filled with the last byte to receive */ + i2cREG1->DMACR &= ~((uint32_t)I2C_RX_DMA_ENABLE); + /* Received all but the last byte, now wait until receive buffer is filled with the last byte to receive + */ success = I2C_WaitReceive(i2cREG1, I2C_TIMEOUT_us); if (success == false) { /* Set Stop condition */ @@ -374,8 +375,9 @@ void UNIT_TEST_WEAK_IMPL dmaGroupANotification(dmaInterrupt_t inttype, uint32 ch } break; case DMA_CHANNEL_I2C2_RX: - i2cREG2->DMACR &= ~((uint32_t)I2C_RXDMAEN); - /* Received all but the last byte, now wait until receive buffer is filled with the last byte to receive */ + i2cREG2->DMACR &= ~((uint32_t)I2C_RX_DMA_ENABLE); + /* Received all but the last byte, now wait until receive buffer is filled with the last byte to receive + */ success = I2C_WaitReceive(i2cREG2, I2C_TIMEOUT_us); if (success == false) { /* Set Stop condition */ diff --git a/src/app/driver/dma/dma.h b/src/app/driver/dma/dma.h index 4b29d54a..1979734c 100644 --- a/src/app/driver/dma/dma.h +++ b/src/app/driver/dma/dma.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file dma.h * @author foxBMS Team * @date 2019-12-12 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix DMA * diff --git a/src/app/driver/foxmath/foxmath.c b/src/app/driver/foxmath/foxmath.c index 884dff00..eefb3223 100644 --- a/src/app/driver/foxmath/foxmath.c +++ b/src/app/driver/foxmath/foxmath.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file foxmath.c * @author foxBMS Team * @date 2018-01-18 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix MATH * - * @brief mathlib function implementations - * + * @brief Mathlib function implementations + * @details TODO */ /*========== Includes =======================================================*/ diff --git a/src/app/driver/foxmath/foxmath.h b/src/app/driver/foxmath/foxmath.h index 7183a371..8069717a 100644 --- a/src/app/driver/foxmath/foxmath.h +++ b/src/app/driver/foxmath/foxmath.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,18 +43,16 @@ * @file foxmath.h * @author foxBMS Team * @date 2018-01-18 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix MATH * - * @brief math library for often used math functions - * + * @brief Math library for often used math functions * @details This header file contains the different math function declarations. * Currently the following functions are supported: * - Slope * - Linear interpolation - * */ #ifndef FOXBMS__FOXMATH_H_ @@ -64,7 +62,8 @@ #include #include -/* AXIVION Disable Style Generic-LocalInclude: foxmath is intended as a library and therefore includes all useful libraries */ +/* AXIVION Disable Style Generic-LocalInclude: foxmath is intended as a library and therefore includes all useful + * libraries */ #include #include /* AXIVION Enable Style Generic-LocalInclude: */ @@ -72,10 +71,13 @@ /*========== Macros and Definitions =========================================*/ /** Add defines for unit conversions */ -#define UNIT_CONVERSION_FACTOR_1000_INTEGER (1000) -#define UNIT_CONVERSION_FACTOR_10_FLOAT (10.0f) -#define UNIT_CONVERSION_FACTOR_100_FLOAT (100.0f) -#define UNIT_CONVERSION_FACTOR_1000_FLOAT (1000.0f) +#define UNIT_CONVERSION_FACTOR_1000_INTEGER (1000) +#define UNIT_CONVERSION_FACTOR_1_1000_TH_FLOAT (0.001f) +#define UNIT_CONVERSION_FACTOR_1_100_TH_FLOAT (0.01f) +#define UNIT_CONVERSION_FACTOR_1_10_TH_FLOAT (0.1f) +#define UNIT_CONVERSION_FACTOR_10_FLOAT (10.0f) +#define UNIT_CONVERSION_FACTOR_100_FLOAT (100.0f) +#define UNIT_CONVERSION_FACTOR_1000_FLOAT (1000.0f) /*========== Extern Constant and Variable Declarations ======================*/ diff --git a/src/app/driver/foxmath/utils.h b/src/app/driver/foxmath/utils.h index f4e3f65c..9258f9f8 100644 --- a/src/app/driver/foxmath/utils.h +++ b/src/app/driver/foxmath/utils.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file utils.h * @author foxBMS Team * @date 2022-11-17 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix UTIL * diff --git a/src/app/driver/fram/fram.c b/src/app/driver/fram/fram.c index ab0f4645..912db20d 100644 --- a/src/app/driver/fram/fram.c +++ b/src/app/driver/fram/fram.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file fram.c * @author foxBMS Team * @date 2020-03-05 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix FRAM * @@ -65,6 +65,7 @@ #include "io.h" #include "mcu.h" #include "spi.h" +#include "utils.h" #include @@ -75,13 +76,15 @@ /** control commands for the FRAM */ /**@{*/ -#define FRAM_WRITECOMMAND (0x02u) -#define FRAM_READCOMMAND (0x03u) -#define FRAM_WRITEENABLECOMMAND (0x06u) +#define FRAM_WRITE_COMMAND (0x02u) +#define FRAM_READ_COMMAND (0x03u) +#define FRAM_WRITE_ENABLE_COMMAND (0x06u) /**@}*/ -/** maximal memory address of the FRAM */ -#define FRAM_MAX_ADDRESS (0x3FFFFu) +#define FRAM_MAX_ADDRESS (0x03FFFFu) /**< maximal memory FRAM address */ +#define FRAM_ADDRESS_UPPER_PART (0x030000u) /**< upper part of the FRAM memory address */ +#define FRAM_ADDRESS_MIDDLE_PART (0x00FF00u) /**< middle part of the FRAM memory address */ +#define FRAM_ADDRESS_LOWER_PART (0x0000FFu) /**< lower part of the FRAM memory address */ /*========== Static Constant and Variable Definitions =======================*/ @@ -99,9 +102,9 @@ extern void FRAM_Initialize(void) { /* Reset error flag at startup */ (void)DIAG_Handler(DIAG_ID_FRAM_READ_CRC_ERROR, DIAG_EVENT_OK, DIAG_SYSTEM, 0u); /* find address of all variables in FRAM by parsing length of data*/ - for (uint16_t i = 0u; i < FRAM_BLOCK_MAX; i++) { - (fram_base_header[i]).address = address; - address += (fram_base_header[i]).datalength + FRAM_CRC_HEADER_SIZE; + for (uint8_t i = 0u; i < (uint8_t)FRAM_BLOCK_MAX; i++) { + (fram_databaseHeader[i]).address = address; + address += (fram_databaseHeader[i]).datalength + FRAM_CRC_HEADER_SIZE; } /* ASSERT that size of variables does not exceed FRAM size */ @@ -122,9 +125,9 @@ extern STD_RETURN_TYPE_e FRAM_ReinitializeAllEntries(void) { fram_version.minor = ver_foxbmsVersionInformation.minor; fram_version.patch = ver_foxbmsVersionInformation.patch; - for (uint16_t i = 0u; i < FRAM_BLOCK_MAX; i++) { + for (uint8_t i = 0u; i < (uint8_t)FRAM_BLOCK_MAX; i++) { if (FRAM_WriteData((FRAM_BLOCK_ID_e)i) != FRAM_ACCESS_OK) { - retVal = STD_OK; + retVal = STD_NOT_OK; } } return retVal; @@ -140,9 +143,9 @@ extern FRAM_RETURN_TYPE_e FRAM_WriteData(FRAM_BLOCK_ID_e blockId) { /* FRAM must use SW Chip Select configuration*/ FAS_ASSERT(spi_framInterface.csType == SPI_CHIP_SELECT_SOFTWARE); - uint32_t address = (fram_base_header[blockId]).address; - uint32_t size = (fram_base_header[blockId]).datalength; - uint8_t *pWrite = (uint8_t *)(fram_base_header[blockId].blockptr); + uint32_t address = (fram_databaseHeader[blockId]).address; + uint32_t size = (fram_databaseHeader[blockId]).datalength; + uint8_t *pWrite = (uint8_t *)(fram_databaseHeader[blockId].blockptr); STD_RETURN_TYPE_e crcRetVal = CRC_CalculateCrc(&crc, pWrite, size); @@ -152,7 +155,7 @@ extern FRAM_RETURN_TYPE_e FRAM_WriteData(FRAM_BLOCK_ID_e blockId) { if (spiRetVal == STD_OK) { /* send write enable command */ IO_PinReset(spi_framInterface.pGioPort, spi_framInterface.csPin); - uint16_t write = FRAM_WRITEENABLECOMMAND; + uint16_t write = FRAM_WRITE_ENABLE_COMMAND; SPI_FramTransmitReceiveData(&spi_framInterface, &write, &read, 1u); IO_PinSet(spi_framInterface.pGioPort, spi_framInterface.csPin); MCU_Delay_us(FRAM_DELAY_AFTER_WRITE_ENABLE_US); @@ -162,19 +165,15 @@ extern FRAM_RETURN_TYPE_e FRAM_WriteData(FRAM_BLOCK_ID_e blockId) { IO_PinReset(spi_framInterface.pGioPort, spi_framInterface.csPin); /* send write command */ - write = FRAM_WRITECOMMAND; + write = FRAM_WRITE_COMMAND; SPI_FramTransmitReceiveData(&spi_framInterface, &write, &read, 1u); - /* send upper part of address */ - write = (address & 0x3F0000u) >> 16u; + /* send in this order: upper, middle and lower part of address */ + write = (uint16_t)((address & FRAM_ADDRESS_UPPER_PART) >> UTIL_SHIFT_TWO_BYTES); SPI_FramTransmitReceiveData(&spi_framInterface, &write, &read, 1u); - - /* send middle part of address */ - write = (address & 0xFF00u) >> 8u; + write = (uint16_t)((address & FRAM_ADDRESS_MIDDLE_PART) >> UTIL_SHIFT_ONE_BYTE); SPI_FramTransmitReceiveData(&spi_framInterface, &write, &read, 1u); - - /* send lower part of address */ - write = address & 0xFFu; + write = (uint16_t)((address & FRAM_ADDRESS_LOWER_PART) >> UTIL_SHIFT_ZERO_BYTES); SPI_FramTransmitReceiveData(&spi_framInterface, &write, &read, 1u); /* send CRC */ @@ -185,7 +184,7 @@ extern FRAM_RETURN_TYPE_e FRAM_WriteData(FRAM_BLOCK_ID_e blockId) { pWrite++; } - pWrite = (uint8_t *)(fram_base_header[blockId].blockptr); + pWrite = (uint8_t *)(fram_databaseHeader[blockId].blockptr); /* send data */ while (size > 0u) { @@ -220,15 +219,15 @@ extern FRAM_RETURN_TYPE_e FRAM_ReadData(FRAM_BLOCK_ID_e blockId) { STD_RETURN_TYPE_e spiRetVal = SPI_Lock(SPI_GetSpiIndex(spi_framInterface.pNode)); if (spiRetVal == STD_OK) { - uint32_t address = (fram_base_header[blockId]).address; - uint32_t size = (fram_base_header[blockId]).datalength; + uint32_t address = (fram_databaseHeader[blockId]).address; + uint32_t size = (fram_databaseHeader[blockId]).datalength; /* get data to be read */ /* set chip select low to start transmission */ IO_PinReset(spi_framInterface.pGioPort, spi_framInterface.csPin); /* send write command */ - uint16_t write = FRAM_READCOMMAND; + uint16_t write = FRAM_READ_COMMAND; SPI_FramTransmitReceiveData(&spi_framInterface, &write, &read, 1u); /* send upper part of address */ @@ -236,11 +235,11 @@ extern FRAM_RETURN_TYPE_e FRAM_ReadData(FRAM_BLOCK_ID_e blockId) { SPI_FramTransmitReceiveData(&spi_framInterface, &write, &read, 1u); /* send middle part of address */ - write = (address & 0xFF00u) >> 8u; + write = (address & 0x00FF00u) >> 8u; SPI_FramTransmitReceiveData(&spi_framInterface, &write, &read, 1u); /* send lower part of address */ - write = address & 0xFFu; + write = address & 0x0000FFu; SPI_FramTransmitReceiveData(&spi_framInterface, &write, &read, 1u); /* read CRC */ @@ -252,7 +251,7 @@ extern FRAM_RETURN_TYPE_e FRAM_ReadData(FRAM_BLOCK_ID_e blockId) { pRead++; } - pRead = (uint8_t *)(fram_base_header[blockId].blockptr); + pRead = (uint8_t *)(fram_databaseHeader[blockId].blockptr); /* read data */ write = 0; @@ -268,8 +267,8 @@ extern FRAM_RETURN_TYPE_e FRAM_ReadData(FRAM_BLOCK_ID_e blockId) { SPI_Unlock(SPI_GetSpiIndex(spi_framInterface.pNode)); - pRead = (uint8_t *)(fram_base_header[blockId].blockptr); - size = (fram_base_header[blockId]).datalength; + pRead = (uint8_t *)(fram_databaseHeader[blockId].blockptr); + size = (fram_databaseHeader[blockId]).datalength; uint64_t crcCalculated = 0u; STD_RETURN_TYPE_e crcRetVal = CRC_CalculateCrc(&crcCalculated, pRead, size); diff --git a/src/app/driver/fram/fram.h b/src/app/driver/fram/fram.h index 57d48582..2cfe8000 100644 --- a/src/app/driver/fram/fram.h +++ b/src/app/driver/fram/fram.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,12 @@ * @file fram.h * @author foxBMS Team * @date 2020-03-05 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix FRAM * * @brief Header for the driver for the FRAM module - * * @details TODO */ diff --git a/src/app/driver/htsensor/htsensor.c b/src/app/driver/htsensor/htsensor.c index cc089f0b..6f6d7d68 100644 --- a/src/app/driver/htsensor/htsensor.c +++ b/src/app/driver/htsensor/htsensor.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file htsensor.c * @author foxBMS Team * @date 2021-08-05 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix HTSEN * diff --git a/src/app/driver/htsensor/htsensor.h b/src/app/driver/htsensor/htsensor.h index a85d7561..a287f79d 100644 --- a/src/app/driver/htsensor/htsensor.h +++ b/src/app/driver/htsensor/htsensor.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file htsensor.h * @author foxBMS Team * @date 2021-08-05 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix HTSEN * diff --git a/src/app/driver/i2c/i2c.c b/src/app/driver/i2c/i2c.c index d1e9da07..1f6ab5ec 100644 --- a/src/app/driver/i2c/i2c.c +++ b/src/app/driver/i2c/i2c.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file i2c.c * @author foxBMS Team * @date 2021-07-22 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix I2C * @@ -136,7 +136,7 @@ static void I2C_ClearNotifications(void); /*========== Static Function Implementations ================================*/ static uint32_t I2C_GetWordTransmitTime(i2cBASE_t *pI2cInterface) { FAS_ASSERT(pI2cInterface != NULL_PTR); - uint32_t i2cClock_khz = 0; + uint32_t i2cClock_kHz = 0; uint32_t prescaler = 0; uint32_t wordTransmitTime_us = 0u; uint8_t dFactor = 0u; @@ -151,10 +151,10 @@ static uint32_t I2C_GetWordTransmitTime(i2cBASE_t *pI2cInterface) { dFactor = I2C_DFACTOR_VALUE_PRESCALER_OTHER; } /* This is the equation used in the HAL; seems to differ from Technical Reference Manual - (p.1769 eq.65, SPNU563A - March 2018) */ - i2cClock_khz = (uint32_t)(AVCLK1_FREQ * I2C_FACTOR_MHZ_TO_HZ) / + (docref: p.1769 eq.65, SPNU563A - March 2018) */ + i2cClock_kHz = (uint32_t)(AVCLK1_FREQ * I2C_FACTOR_MHZ_TO_HZ) / (2u * (prescaler + 1u) * (pI2cInterface->CKH + dFactor)); - wordTransmitTime_us = (I2C_FACTOR_WORD_TO_BITS * I2C_FACTOR_S_TO_US) / i2cClock_khz; + wordTransmitTime_us = (I2C_FACTOR_WORD_TO_BITS * I2C_FACTOR_S_TO_US) / i2cClock_kHz; return wordTransmitTime_us; } @@ -286,9 +286,9 @@ extern STD_RETURN_TYPE_e I2C_Write( uint32_t nrBytes, uint8_t *writeData) { FAS_ASSERT(pI2cInterface != NULL_PTR); - FAS_ASSERT(writeData != NULL_PTR); - FAS_ASSERT(nrBytes > 0u); FAS_ASSERT(slaveAddress < 128u); + FAS_ASSERT(nrBytes > 0u); + FAS_ASSERT(writeData != NULL_PTR); STD_RETURN_TYPE_e retVal = STD_OK; if ((pI2cInterface->STR & (uint32_t)I2C_BUSBUSY) == 0u) { @@ -463,7 +463,7 @@ extern STD_RETURN_TYPE_e I2C_ReadDma( OS_ExitTaskCritical(); /* End DMA config */ - pI2cInterface->DMACR |= (uint32_t)I2C_RXDMAEN; /* Activate I2C DMA RX */ + pI2cInterface->DMACR |= (uint32_t)I2C_RX_DMA_ENABLE; /* Activate I2C DMA RX */ pI2cInterface->MDR &= ~((uint32_t)I2C_STOP_COND); pI2cInterface->MDR &= ~((uint32_t)I2C_START_COND); @@ -477,7 +477,7 @@ extern STD_RETURN_TYPE_e I2C_ReadDma( uint32_t notificationRx = I2C_WaitForRxCompletedNotification(); if (notificationRx != I2C_RX_NOTIFIED_VALUE) { /* Rx not happened, deactivate DMA */ - pI2cInterface->DMACR &= ~((uint32_t)I2C_RXDMAEN); + pI2cInterface->DMACR &= ~((uint32_t)I2C_RX_DMA_ENABLE); /* Set Stop condition */ pI2cInterface->MDR |= (uint32_t)I2C_REPEATMODE; i2cSetStop(pI2cInterface); @@ -569,13 +569,13 @@ extern STD_RETURN_TYPE_e I2C_WriteDma( i2cSetSlaveAdd(pI2cInterface, slaveAddress); /* Set slave address */ i2cSetStop(pI2cInterface); /* Stop condition after sending nrBytes bytes */ i2cSetCount(pI2cInterface, nrBytes); /* Send nrBytes bytes before STOP condition */ - pI2cInterface->DMACR |= (uint32_t)I2C_TXDMAEN; /* Activate I2C DMA TX */ + pI2cInterface->DMACR |= (uint32_t)I2C_TX_DMA_ENABLE; /* Activate I2C DMA TX */ i2cSetStart(pI2cInterface); /* Start transmit */ uint32_t notificationTx = I2C_WaitForTxCompletedNotification(); if (notificationTx != I2C_TX_NOTIFIED_VALUE) { /* Tx not happened, deactivate DMA */ - pI2cInterface->DMACR &= ~((uint32_t)I2C_TXDMAEN); + pI2cInterface->DMACR &= ~((uint32_t)I2C_TX_DMA_ENABLE); /* Set Stop condition */ pI2cInterface->MDR |= (uint32_t)I2C_REPEATMODE; i2cSetStop(pI2cInterface); @@ -604,11 +604,11 @@ extern STD_RETURN_TYPE_e I2C_WriteReadDma( uint32_t nrBytesRead, uint8_t *readData) { FAS_ASSERT(pI2cInterface != NULL_PTR); - FAS_ASSERT(writeData != NULL_PTR); + FAS_ASSERT(slaveAddress < 128u); FAS_ASSERT(nrBytesWrite > 0u); - FAS_ASSERT(readData != NULL_PTR); + FAS_ASSERT(writeData != NULL_PTR); FAS_ASSERT(nrBytesRead > 1u); - FAS_ASSERT(slaveAddress < 128u); + FAS_ASSERT(readData != NULL_PTR); STD_RETURN_TYPE_e retVal = STD_OK; dmaChannel_t channelRx = DMA_CH0; dmaChannel_t channelTx = DMA_CH0; @@ -616,7 +616,7 @@ extern STD_RETURN_TYPE_e I2C_WriteReadDma( I2C_ClearNotifications(); if ((pI2cInterface->STR & (uint32_t)I2C_BUSBUSY) == 0u) { - /* Firt write bytes */ + /* First write bytes */ /* Clear bits */ pI2cInterface->MDR &= ~((uint32_t)I2C_STOP_COND); @@ -664,13 +664,13 @@ extern STD_RETURN_TYPE_e I2C_WriteReadDma( i2cSetMode(pI2cInterface, (uint32_t)I2C_MASTER); /* Set as master */ i2cSetDirection(pI2cInterface, (uint32_t)I2C_TRANSMITTER); /* Set as transmitter */ i2cSetSlaveAdd(pI2cInterface, slaveAddress); /* Set slave address */ - pI2cInterface->DMACR |= (uint32_t)I2C_TXDMAEN; /* Activate I2C DMA TX */ + pI2cInterface->DMACR |= (uint32_t)I2C_TX_DMA_ENABLE; /* Activate I2C DMA TX */ i2cSetStart(pI2cInterface); /* Start transmit */ uint32_t notificationTx = I2C_WaitForTxCompletedNotification(); if (notificationTx != I2C_TX_NOTIFIED_VALUE) { /* Tx not happened, deactivate DMA */ - pI2cInterface->DMACR &= ~((uint32_t)I2C_TXDMAEN); + pI2cInterface->DMACR &= ~((uint32_t)I2C_TX_DMA_ENABLE); /* Set Stop condition */ pI2cInterface->MDR |= (uint32_t)I2C_REPEATMODE; i2cSetStop(pI2cInterface); @@ -721,7 +721,7 @@ extern STD_RETURN_TYPE_e I2C_WriteReadDma( pI2cInterface->STR |= (uint32_t)I2C_TX_INT; pI2cInterface->STR |= (uint32_t)I2C_RX_INT; - pI2cInterface->DMACR |= (uint32_t)I2C_RXDMAEN; /* Activate I2C DMA RX */ + pI2cInterface->DMACR |= (uint32_t)I2C_RX_DMA_ENABLE; /* Activate I2C DMA RX */ pI2cInterface->MDR |= (uint32_t)I2C_REPEATMODE; i2cSetMode(pI2cInterface, (uint32_t)I2C_MASTER); /* Set as master */ @@ -732,7 +732,7 @@ extern STD_RETURN_TYPE_e I2C_WriteReadDma( uint32_t notificationRx = I2C_WaitForRxCompletedNotification(); if (notificationRx != I2C_RX_NOTIFIED_VALUE) { /* Rx not happened, deactivate DMA */ - pI2cInterface->DMACR &= ~((uint32_t)I2C_RXDMAEN); + pI2cInterface->DMACR &= ~((uint32_t)I2C_RX_DMA_ENABLE); /* Set Stop condition */ pI2cInterface->MDR |= (uint32_t)I2C_REPEATMODE; i2cSetStop(pI2cInterface); diff --git a/src/app/driver/i2c/i2c.h b/src/app/driver/i2c/i2c.h index 1620f706..1a997f7d 100644 --- a/src/app/driver/i2c/i2c.h +++ b/src/app/driver/i2c/i2c.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file i2c.h * @author foxBMS Team * @date 2021-07-22 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix I2C * @@ -69,9 +69,9 @@ #define I2C_TIMEOUT_us (1000u) /* Transmitter DMA enable */ -#define I2C_TXDMAEN (0x2u) +#define I2C_TX_DMA_ENABLE (0x2u) /* Receiver DMA enable */ -#define I2C_RXDMAEN (0x1u) +#define I2C_RX_DMA_ENABLE (0x1u) /* Mask to select data byte from Data Receive Register */ #define I2C_DDR_REGISTER_DATA_MASK (0xFFu) @@ -106,7 +106,7 @@ #define I2C_FACTOR_WORD_TO_BITS (9u) /** * Value of d factor in I2C configuration, depends on prescaler value - * See Technical Reference Manual p.1769 eq.65, (SPNU563A - March 2018) + * docref: Technical Reference Manual p.1769 eq.65, (SPNU563A - March 2018) * @{ */ #define I2C_DFACTOR_VALUE_PRESCALER_0 (7u) diff --git a/src/app/driver/imd/bender/ir155/bender_ir155.c b/src/app/driver/imd/bender/ir155/bender_ir155.c index 746b26a6..142c5aa0 100644 --- a/src/app/driver/imd/bender/ir155/bender_ir155.c +++ b/src/app/driver/imd/bender/ir155/bender_ir155.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,12 +43,13 @@ * @file bender_ir155.c * @author foxBMS Team * @date 2014-02-11 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix IR155 * * @brief Driver for the insulation monitoring + * @details TODO */ /*========== Includes =======================================================*/ @@ -79,9 +80,9 @@ * 90 | 70,59 | very low resistance | * 80 | 240,00 | low resistance | * 70 | 461,54 | low resistance | - * 60 | 763,64 | lowmid resistance | - * 50 | 1200,00 | highmid resistance | - * 40 | 1885,71 | highmid resistance | + * 60 | 763,64 | low mid resistance | + * 50 | 1200,00 | high mid resistance | + * 40 | 1885,71 | high mid resistance | * 30 | 3120,00 | high resistance | * 20 | 6000,00 | high resistance | * 10 | 20400,00 | very high resistance | diff --git a/src/app/driver/imd/bender/ir155/bender_ir155.h b/src/app/driver/imd/bender/ir155/bender_ir155.h index 97ff1f30..ababf423 100644 --- a/src/app/driver/imd/bender/ir155/bender_ir155.h +++ b/src/app/driver/imd/bender/ir155/bender_ir155.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,12 +43,13 @@ * @file bender_ir155.h * @author foxBMS Team * @date 2021-09-06 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix IR155 * * @brief Headers for the Bender IR155 driver for the insulation monitoring + * @details TODO */ #ifndef FOXBMS__BENDER_IR155_H_ diff --git a/src/app/driver/imd/bender/ir155/bender_ir155_helper.c b/src/app/driver/imd/bender/ir155/bender_ir155_helper.c index e116add3..736676b4 100644 --- a/src/app/driver/imd/bender/ir155/bender_ir155_helper.c +++ b/src/app/driver/imd/bender/ir155/bender_ir155_helper.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,12 +43,13 @@ * @file bender_ir155_helper.c * @author foxBMS Team * @date 2021-09-17 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix IR155 * * @brief Driver for the insulation monitoring + * @details TODO */ /*========== Includes =======================================================*/ @@ -218,7 +219,7 @@ void IR155_Initialize(uint8_t triggerTime_ms) { ir155_state.ir155Initialized = true; } -void IR155_Deinitialize(void) { +void IR155_Uninitialize(void) { /* Reset cycle time */ ir155_state.periodTriggerTime_ms = 0u; diff --git a/src/app/driver/imd/bender/ir155/bender_ir155_helper.h b/src/app/driver/imd/bender/ir155/bender_ir155_helper.h index e2187dee..9a243f55 100644 --- a/src/app/driver/imd/bender/ir155/bender_ir155_helper.h +++ b/src/app/driver/imd/bender/ir155/bender_ir155_helper.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,14 +43,13 @@ * @file bender_ir155_helper.h * @author foxBMS Team * @date 2021-09-17 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix IR155 * * @brief Headers for the configuration for the insulation monitoring - * - * + * @details TODO */ #ifndef FOXBMS__BENDER_IR155_HELPER_H_ @@ -104,7 +103,7 @@ typedef enum IR155_MEASUREMENT_STATE { IR155_GROUND_ERROR_STATE, /*!< ground error detected */ IR155_GROUND_ERROR_STATE_UNKNOWN, /*!< ground error detected with undefined duty cycle */ IR155_IMD_ERROR_MEASUREMENT, /*!< device error detected */ - IR155_IMD_ERROR_MEASUREMENT_UNKNOWN, /*!< device error detected with unkown duty cycle*/ + IR155_IMD_ERROR_MEASUREMENT_UNKNOWN, /*!< device error detected with unknown duty cycle*/ IR155_SIGNAL_SHORT, /*!< signal short detected */ IR155_MEASUREMENT_NOT_VALID, /*!< Invalid measurement detected */ IR155_UNINITIALIZED, /*!< Uninitialized state */ @@ -142,10 +141,10 @@ extern void IR155_Initialize(uint8_t triggerTime_ms); /** * @brief Software deinitialization of Timer-module */ -extern void IR155_Deinitialize(void); +extern void IR155_Uninitialize(void); /** - * @brief Interface function which delivers the actual signal measurement (duty cyle) and evaluation. + * @brief Interface function which delivers the actual signal measurement (duty cycle) and evaluation. * Use of intervals because of measuring and signal inaccuracy. The evaluated results are * finally written in the database. * @return #IR155_MEASUREMENT_s measurement result of IR155 measurement diff --git a/src/app/driver/imd/bender/ir155/config/bender_ir155_cfg.h b/src/app/driver/imd/bender/ir155/config/bender_ir155_cfg.h index 48658c5c..ff037ad6 100644 --- a/src/app/driver/imd/bender/ir155/config/bender_ir155_cfg.h +++ b/src/app/driver/imd/bender/ir155/config/bender_ir155_cfg.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,14 +43,13 @@ * @file bender_ir155_cfg.h * @author foxBMS Team * @date 2021-09-17 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS_CONFIGURATION * @prefix IR155 * * @brief Headers for the configuration for the insulation monitoring - * - * + * @details TODO */ #ifndef FOXBMS__BENDER_IR155_CFG_H_ @@ -71,7 +70,7 @@ /** * During this time, the results of Bender Isometer aren't to be trusted * wait time in [ms] <= 65535; - * IR155_WAIT_TIME_AFTER_GNDERROR + * IR155_WAIT_TIME_AFTER_GROUND_ERROR * \par Type: * int * \par Range: @@ -80,7 +79,7 @@ * ms * \par Default: * 25000 -*/ + */ #define IR155_WAIT_TIME_AFTER_GROUND_ERROR_ms (25000u) /** Time after startup, until the first valid measurement result is available */ @@ -88,7 +87,7 @@ /* Symbolic names for the different measurement modes of Bender Isometer. */ -/** 0 Hz -> Hi > short-circuit to Ub + (Kl. 15); Low > IMD off or short-circuit +/** 0 Hz -> Hi > short-circuit to U_b + (Kl. 15); Low > IMD off or short-circuit * to Kl. 31 */ #define IR155_MINIMUM_FREQUENCY_Hz (5.0f) /* Define a minimum frequency as 0 Hz can not be measured by PWM module */ diff --git a/src/app/driver/imd/bender/ir155/wscript b/src/app/driver/imd/bender/ir155/wscript old mode 100644 new mode 100755 index 4b4abbea..9b5e8736 --- a/src/app/driver/imd/bender/ir155/wscript +++ b/src/app/driver/imd/bender/ir155/wscript @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause diff --git a/src/app/driver/imd/bender/iso165c/bender_iso165c.c b/src/app/driver/imd/bender/iso165c/bender_iso165c.c index 574da918..5194810a 100644 --- a/src/app/driver/imd/bender/iso165c/bender_iso165c.c +++ b/src/app/driver/imd/bender/iso165c/bender_iso165c.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file bender_iso165c.c * @author foxBMS Team * @date 2019-04-07 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix I165C * @@ -60,8 +60,11 @@ #include "database_cfg.h" #include "can.h" +#include "can_cbs_rx_imd-info.h" +#include "can_cbs_rx_imd-response.h" +#include "can_cbs_tx_imd-request.h" #include "can_cfg_rx-message-definitions.h" -#include "can_cfg_tx-message-definitions.h" +#include "can_cfg_tx-async-message-definitions.h" #include "can_helper.h" #include "database.h" #include "ftask.h" @@ -73,6 +76,13 @@ /** state machine short time definition in trigger calls until next state is processed */ #define I165C_FSM_SHORT_TIME (1u) +/* return values for 165C_CheckResponse*/ +typedef enum { + I165C_RESPONSE_NO_RESPONSE, /*!< no IMD response message received yet */ + I165C_RESPONSE_SUCCESS, /*!< IMD response message with the expected multiplexer was received */ + I165C_RESPONSE_ERROR, /*!< IMD response reports error */ +} I165C_RESPONSE_RETURN_VALUE_e; + /* -------------- State defines ---------------------------------------------*/ /** States of the initialization state machine */ @@ -218,7 +228,6 @@ static I165C_DISABLE_STATE_s i165c_disableState = { .receptionTriesMessage = 0u, }; -static CAN_BUFFER_ELEMENT_s i165c_canTxMessage = {0u}; static CAN_BUFFER_ELEMENT_s i165c_canRxMessage = {0u}; /*========== Extern Constant and Variable Definitions =======================*/ @@ -290,60 +299,6 @@ static IMD_FSM_STATES_e I165C_Disable(void); */ static IMD_FSM_STATES_e I165C_Running(DATA_BLOCK_INSULATION_MONITORING_s *pTableInsulationMonitoring); -/** - * @brief Reset CAN data. - * @details Used before starting a new transmission. - * @param[in,out] pCanMessage pointer to CAN data to be reset - */ -static void I165C_ResetCanData(CAN_BUFFER_ELEMENT_s *pCanMessage); - -/** - * @brief Write data in data word for CAN transmission. - * @param dataWord data word ("position") in CAN structure to be written - * to (see data sheet page 15) - * @param data data to be written in data word - * @param[in] pCanMessage CAN structure to be used for transmission - */ -static void I165C_WriteDataWord(uint8_t dataWord, uint16_t data, CAN_BUFFER_ELEMENT_s *pCanMessage); - -/** - * @brief Get data in data word from CAN transmission. - * @param dataWord data word ("position") in CAN structure to be read from - * (see data sheet page 15) - * @param[out] pData pointer where to put read data from data word - * @param canMessage CAN structure used for transmission - */ -static void I165C_ReadDataWord(uint8_t dataWord, uint16_t *pData, CAN_BUFFER_ELEMENT_s canMessage); - -/** - * @brief Get data in data word from CAN transmission, for the specific - * IMD_Info message. - * @param dataWord data word ("position") in CAN structure to be read from - * (see data sheet page 15) - * @param[out] pData pointer where to put read data from data word - * @param canMessage CAN structure used for transmission - */ -static void I165C_ReadDataWordImdInfo(uint8_t dataWord, uint16_t *pData, CAN_BUFFER_ELEMENT_s canMessage); - -/** - * @brief Get data in data byte from CAN transmission. - * @param dataByte data byte ("position") in CAN structure to be read from - * (see data sheet page 15) - * @param[out] pData pointer where to put read data from data byte - * @param canMessage CAN structure used for transmission - */ -static void I165C_ReadDataByte(uint8_t dataByte, uint8_t *pData, CAN_BUFFER_ELEMENT_s canMessage); - -/** - * @brief Compose CAN message for CAN transmission. - * @details Write CMD byte. - * @param id CAN ID to use - * @param command command to be used (see data page 15 section 6.3 and - * further) - * @param[out] pCanMessage pointer to CAN structure to be used for transmission - */ -static void I165C_WriteCmd(uint8_t id, uint8_t command, CAN_BUFFER_ELEMENT_s *pCanMessage); - /** * @brief Check if iso165c acknowledged reception of sent message * and get corresponding data. @@ -353,7 +308,7 @@ static void I165C_WriteCmd(uint8_t id, uint8_t command, CAN_BUFFER_ELEMENT_s *pC * @param[in] pCanMessage pointer to CAN data sent by the iso165c * @return true if transmission acknowledged, false otherwise */ -static bool I165C_CheckResponse(uint8_t command, CAN_BUFFER_ELEMENT_s *pCanMessage); +static I165C_RESPONSE_RETURN_VALUE_e I165C_CheckResponse(uint8_t command, CAN_BUFFER_ELEMENT_s *pCanMessage); /** * @brief Get IMD Info from iso165c @@ -363,26 +318,6 @@ static bool I165C_CheckResponse(uint8_t command, CAN_BUFFER_ELEMENT_s *pCanMessa */ static bool I165C_GetImdInfo(CAN_BUFFER_ELEMENT_s *pCanMessage); -/** - * @brief Check if iso165c was initialized and is running - * @details Check is made using the CAN IMD_Info data sent by the iso165c. - * - the IMC is up and running with no errors: - * - insulation measurement deactivated - * - self-test executed - * @param[in] canMessage IMD_Info to be checked, sent by the iso165c - * @return true if IMD_Info was received, false otherwise - */ -static bool I165C_IsSelfTestFinished(CAN_BUFFER_ELEMENT_s canMessage); - -/** - * @brief Check if iso165c has already been performed previously - * @details Check is made using the CAN IMD_Info data sent by the iso165c. - * - self-test executed - * @param[in] canMessage IMD_Info to be checked, sent by the iso165c - * @return true if self-test has already been executed, false otherwise - */ -static bool I165C_HasSelfTestBeenExecuted(CAN_BUFFER_ELEMENT_s canMessage); - /** * @brief Set state of HV relay * @param[in] relay set state of positive or negative relay @@ -396,29 +331,12 @@ static void I165C_SetRelayState(uint8_t relay, uint8_t relayState); */ static void I165C_RequestRelayState(uint8_t relay); -/** - * @brief Check state of HV relay - * @param[in] canMessage IMD_Info to be checked, sent by the iso165c - * @param[in] relay positive or negative relay - * @param[in] relayState relay opened or closed - * @return true if state matches, otherwise false - */ -static bool I165C_CheckRelayState(CAN_BUFFER_ELEMENT_s canMessage, uint8_t relay, uint8_t relayState); - /** * @brief Set measurement mode * @param[in] mode set IMD measurement mode */ static void I165C_SetMeasurementMode(uint8_t mode); -/** - * @brief Check measurement mode - * @param[in] canMessage IMD_Info to be checked, sent by the iso165c - * @param[in] mode IMD measurement mode (activated or deactivated) - * @return true, if measurement mode matches, otherwise false - */ -static bool I165C_CheckMeasurementMode(CAN_BUFFER_ELEMENT_s canMessage, uint8_t mode); - /** * @brief Set average factor of the insulation resistance averaging algorithm * @param[in] averagingFactor set IMD averaging factor @@ -432,7 +350,16 @@ static void I165C_SetAveragingFactor(uint8_t averagingFactor); * @param[in] pCanMessage pointer to CAN data sent by the iso165c * @return true if Acknowledge has been received, otherwise false */ -static bool I165C_CheckAcknowledgeArrived(uint8_t command, uint8_t *pTries, CAN_BUFFER_ELEMENT_s *pCanMessage); +static I165C_RESPONSE_RETURN_VALUE_e I165C_CheckAcknowledgeArrived( + uint8_t command, + uint8_t *pTries, + CAN_BUFFER_ELEMENT_s *pCanMessage); + +/** + * @brief Check if insulation measurement is valid + * @param pTableInsulationMonitoring data table where information is stored + */ +static void I165C_IsInsulationMeasurementValid(DATA_BLOCK_INSULATION_MONITORING_s *pTableInsulationMonitoring); /*========== Static Function Implementations ================================*/ static void I165C_SetInitializationState( @@ -503,107 +430,30 @@ static void I165C_SetDisableState( } } -static void I165C_ResetCanData(CAN_BUFFER_ELEMENT_s *pCanMessage) { +static I165C_RESPONSE_RETURN_VALUE_e I165C_CheckResponse(uint8_t command, CAN_BUFFER_ELEMENT_s *pCanMessage) { FAS_ASSERT(pCanMessage != NULL_PTR); - for (uint8_t i = 0u; i < CAN_DEFAULT_DLC; i++) { - pCanMessage->data[i] = 0u; - } -} - -static void I165C_WriteDataWord(uint8_t dataWord, uint16_t data, CAN_BUFFER_ELEMENT_s *pCanMessage) { - FAS_ASSERT(pCanMessage != NULL_PTR); - /* See data sheet section 6.1 page 15 */ - if (dataWord == I165C_DW1) { - pCanMessage->data[CAN_BYTE_1_POSITION] = (uint8_t)(data & 0xFFu); - pCanMessage->data[CAN_BYTE_2_POSITION] = (uint8_t)((data >> 8u) & 0xFFu); - } - if (dataWord == I165C_DW2) { - pCanMessage->data[CAN_BYTE_3_POSITION] = (uint8_t)(data & 0xFFu); - pCanMessage->data[CAN_BYTE_4_POSITION] = (uint8_t)((data >> 8u) & 0xFFu); - } -} - -static void I165C_ReadDataWord(uint8_t dataWord, uint16_t *pData, CAN_BUFFER_ELEMENT_s canMessage) { - FAS_ASSERT(pData != NULL_PTR); - /* See data sheet section 6.1 page 15 */ - if (dataWord == I165C_DW1) { - *pData = canMessage.data[CAN_BYTE_1_POSITION]; - *pData |= (((uint16_t)canMessage.data[CAN_BYTE_2_POSITION]) << 8u) & 0xFF00u; - } - if (dataWord == I165C_DW2) { - *pData = canMessage.data[CAN_BYTE_3_POSITION]; - *pData |= (((uint16_t)canMessage.data[CAN_BYTE_4_POSITION]) << 8u) & 0xFF00u; - } - if (dataWord == I165C_DW3) { - *pData = canMessage.data[CAN_BYTE_5_POSITION]; - *pData |= (((uint16_t)canMessage.data[CAN_BYTE_6_POSITION]) << 8u) & 0xFF00u; - } -} - -static void I165C_ReadDataWordImdInfo(uint8_t dataWord, uint16_t *pData, CAN_BUFFER_ELEMENT_s canMessage) { - FAS_ASSERT(pData != NULL_PTR); - /* See data sheet section 6.1 page 15 */ - if (dataWord == I165C_DW1) { - *pData = canMessage.data[CAN_BYTE_0_POSITION]; - *pData |= (((uint16_t)canMessage.data[CAN_BYTE_1_POSITION]) << 8u) & 0xFF00u; - } - if (dataWord == I165C_DW2) { - *pData = canMessage.data[CAN_BYTE_2_POSITION]; - *pData |= (((uint16_t)canMessage.data[CAN_BYTE_3_POSITION]) << 8u) & 0xFF00u; - } - if (dataWord == I165C_DW3) { - *pData = canMessage.data[CAN_BYTE_4_POSITION]; - *pData |= (((uint16_t)canMessage.data[CAN_BYTE_5_POSITION]) << 8u) & 0xFF00u; - } -} - -static void I165C_ReadDataByte(uint8_t dataByte, uint8_t *pData, CAN_BUFFER_ELEMENT_s canMessage) { - FAS_ASSERT(pData != NULL_PTR); - /* See data sheet section 6.1 page 15 */ - switch (dataByte) { - case I165C_DB1: - *pData = canMessage.data[CAN_BYTE_1_POSITION]; - break; - case I165C_DB2: - *pData = canMessage.data[CAN_BYTE_2_POSITION]; - break; - case I165C_DB3: - *pData = canMessage.data[CAN_BYTE_3_POSITION]; - break; - case I165C_DB4: - *pData = canMessage.data[CAN_BYTE_4_POSITION]; - break; - default: - *pData = 0u; - break; - } -} - -static void I165C_WriteCmd(uint8_t id, uint8_t command, CAN_BUFFER_ELEMENT_s *pCanMessage) { - FAS_ASSERT(pCanMessage != NULL_PTR); - /* CAN message is a request, set ID accordingly */ - pCanMessage->id = id; - pCanMessage->idType = I165C_TX_MESSAGE_IDENTIFIER_TYPE; - /* First byte contains the CMD field */ - pCanMessage->data[CAN_BYTE_0_POSITION] = command; -} - -static bool I165C_CheckResponse(uint8_t command, CAN_BUFFER_ELEMENT_s *pCanMessage) { - FAS_ASSERT(pCanMessage != NULL_PTR); - bool messageReceived = false; - uint8_t numberItems = 0u; - uint8_t queueReadTries = I165C_MAX_QUEUE_READS; + I165C_RESPONSE_RETURN_VALUE_e messageReceived = I165C_RESPONSE_NO_RESPONSE; + uint8_t numberItems = 0u; + uint8_t queueReadTries = I165C_MAX_QUEUE_READS; /* Use loop on queue because IMD_info message could come meanwhile */ do { numberItems = OS_GetNumberOfStoredMessagesInQueue(ftsk_imdCanDataQueue); if (numberItems > 0u) { if (OS_ReceiveFromQueue(ftsk_imdCanDataQueue, (void *)pCanMessage, 0u) == OS_SUCCESS) { - /* data queue was no empty */ + /* data queue was not empty */ if ((command == pCanMessage->data[CAN_BYTE_0_POSITION]) && (pCanMessage->id == CANRX_IMD_RESPONSE_ID) && - (pCanMessage->idType == I165C_RX_MESSAGE_IDENTIFIER_TYPE)) { - messageReceived = true; + (pCanMessage->idType == CANRX_IMD_RESPONSE_ID_TYPE)) { + /* Response with expected multiplexer was received */ + messageReceived = I165C_RESPONSE_SUCCESS; break; + } else { + if ((pCanMessage->data[CAN_BYTE_0_POSITION] == 0xFF) && + (pCanMessage->id == CANRX_IMD_RESPONSE_ID) && + (pCanMessage->idType == CANRX_IMD_RESPONSE_ID_TYPE)) { + /* Response with error multiplexer was received */ + messageReceived = I165C_RESPONSE_ERROR; + } } } } @@ -624,8 +474,8 @@ static bool I165C_GetImdInfo(CAN_BUFFER_ELEMENT_s *pCanMessage) { numberItems = OS_GetNumberOfStoredMessagesInQueue(ftsk_imdCanDataQueue); if (numberItems > 0u) { if (OS_ReceiveFromQueue(ftsk_imdCanDataQueue, (void *)pCanMessage, 0u) == OS_SUCCESS) { - /* data queue was no empty */ - if (pCanMessage->id == I165C_MESSAGETYPE_IMD_INFO) { + /* data queue was not empty */ + if (pCanMessage->id == I165C_MESSAGE_TYPE_IMD_INFO) { imdInfoReceived = true; break; } @@ -637,140 +487,52 @@ static bool I165C_GetImdInfo(CAN_BUFFER_ELEMENT_s *pCanMessage) { return imdInfoReceived; } -static bool I165C_IsSelfTestFinished(CAN_BUFFER_ELEMENT_s canMessage) { - bool initialized = true; - uint16_t data = 0u; - - /* Extract D_IMC_STATUS */ - I165C_ReadDataWordImdInfo(I165C_DW2, &data, canMessage); - /* I165C_SELFTEST_RUNNING bit = 1 in IMD_Info DW2: self test running */ - uint16_t selfTestState = (data & (1u << I165C_SELFTEST_RUNNING_SHIFT)); - if (selfTestState != (1u << I165C_SELFTEST_RUNNING_SHIFT)) { - /* self test not running */ - initialized = false; - } - - /* Extract D_VIFC_STATUS */ - I165C_ReadDataWordImdInfo(I165C_DW3, &data, canMessage); - /* I165C_INSULATION_MEASUREMENT bit = 0 in IMD_Info DW3: insulation measurement active */ - uint16_t insulationMeasurementState = (data & (1u << I165C_INSULATION_MEASUREMENT_STATUS_SHIFT)); - if (insulationMeasurementState != 0u) { - /* insulation measurement active */ - initialized = false; - } -#ifdef I165C_SELF_TEST_LONG - /* I165C_IMC_SELFTEST_OVERALL_SCENARIO bit = 1 in IMD_Info DW3: selftest overall scenario not executed */ - uint16_t selfTestExecuted = (data & (1u << I165C_IMC_SELFTEST_OVERALL_SCENARIO_SHIFT)); - if (selfTestExecuted != 0u) { - /* selftest overall scenario not executed */ - initialized = false; - } -#else - /* I165C_IMC_SELFTEST_PARAMETERCONFIG_SCENARIO bit = 1 in IMD_Info DW3: selftest parameter config not executed */ - uint16_t selfTestExecuted = (data & (1u << I165C_IMC_SELFTEST_PARAMETERCONFIG_SCENARIO_SHIFT)); - if (selfTestExecuted != 0u) { - /* selftest parameter scenario not executed */ - initialized = false; - } -#endif - return initialized; -} - -static bool I165C_HasSelfTestBeenExecuted(CAN_BUFFER_ELEMENT_s canMessage) { - bool anySelfTestExecuted = false; - uint16_t data = 0u; - - /* Extract D_VIFC_STATUS */ - I165C_ReadDataWordImdInfo(I165C_DW3, &data, canMessage); - - /* I165C_IMC_SELFTEST_OVERALL_SCENARIO bit = 1 in IMD_Info DW3: selftest overall scenario not executed */ - uint16_t overallSelfTestExecuted = (data & (1u << I165C_IMC_SELFTEST_OVERALL_SCENARIO_SHIFT)); - if (overallSelfTestExecuted == 0u) { - /* selftest overall scenario has been executed */ - anySelfTestExecuted = true; - } - /* I165C_IMC_SELFTEST_PARAMETERCONFIG_SCENARIO bit = 1 in IMD_Info DW3: selftest parameter config not executed */ - uint16_t parameterSelfTestExecuted = (data & (1u << I165C_IMC_SELFTEST_PARAMETERCONFIG_SCENARIO_SHIFT)); - if (parameterSelfTestExecuted == 0u) { - /* selftest parameter scenario has been executed */ - anySelfTestExecuted = true; - } - return anySelfTestExecuted; -} - static void I165C_SetRelayState(uint8_t relay, uint8_t relayState) { FAS_ASSERT((relay == I165C_D_VIFC_HV_RELAIS_NEGATIVE) || (relay == I165C_D_VIFC_HV_RELAIS_POSITIVE)); FAS_ASSERT((relayState == I165C_RELAY_STATE_OPEN) || (relayState == I165C_RELAY_STATE_CLOSED)); - /* Reset CAN message buffer */ - I165C_ResetCanData(&i165c_canTxMessage); - /* Assemble CAN message */ - I165C_WriteCmd(I165C_MESSAGETYPE_IMD_REQUEST, I165C_CMD_S_VIFC_SET_HV_RELAIS, &i165c_canTxMessage); - I165C_WriteDataWord(I165C_D_VIFC_HV_RELAIS_SET_REQUEST, relay, &i165c_canTxMessage); - I165C_WriteDataWord(I165C_D_VIFC_HV_RELAIS_STATE_SET_REQUEST, relayState, &i165c_canTxMessage); - /* Transmit CAN message */ - CAN_DataSend(I165C_CAN_NODE, i165c_canTxMessage.id, i165c_canTxMessage.idType, i165c_canTxMessage.data); -} -static void I165C_RequestRelayState(uint8_t relay) { - FAS_ASSERT((relay == I165C_D_VIFC_HV_RELAIS_NEGATIVE) || (relay == I165C_D_VIFC_HV_RELAIS_POSITIVE)); - /* Reset CAN message buffer */ - I165C_ResetCanData(&i165c_canTxMessage); - /* Assemble CAN message */ - I165C_WriteCmd(I165C_MESSAGETYPE_IMD_REQUEST, I165C_CMD_S_VIFC_GET_HV_RELAIS, &i165c_canTxMessage); - I165C_WriteDataWord(I165C_D_VIFC_HV_RELAIS_GET_REQUEST, relay, &i165c_canTxMessage); - /* Transmit CAN message */ - CAN_DataSend(I165C_CAN_NODE, i165c_canTxMessage.id, i165c_canTxMessage.idType, i165c_canTxMessage.data); + if (relay == I165C_D_VIFC_HV_RELAIS_NEGATIVE) { + if (relayState == I165C_RELAY_STATE_OPEN) { + CANTX_ImdRequest(CANTX_IMD_REQUEST_OPEN_NEGATIVE_RELAY); + } else { + CANTX_ImdRequest(CANTX_IMD_REQUEST_CLOSE_NEGATIVE_RELAY); + } + } else { + if (relayState == I165C_RELAY_STATE_OPEN) { + CANTX_ImdRequest(CANTX_IMD_REQUEST_OPEN_POSITIVE_RELAY); + } else { + CANTX_ImdRequest(CANTX_IMD_REQUEST_CLOSE_POSITIVE_RELAY); + } + } } -static bool I165C_CheckRelayState(CAN_BUFFER_ELEMENT_s canMessage, uint8_t relay, uint8_t relayState) { +static void I165C_RequestRelayState(uint8_t relay) { FAS_ASSERT((relay == I165C_D_VIFC_HV_RELAIS_NEGATIVE) || (relay == I165C_D_VIFC_HV_RELAIS_POSITIVE)); - FAS_ASSERT((relayState == I165C_RELAY_STATE_OPEN) || (relayState == I165C_RELAY_STATE_CLOSED)); - bool checkSuccess = true; - uint16_t data = 0u; - - I165C_ReadDataWord(I165C_D_VIFC_HV_RELAIS_GET_RESPONSE, &data, canMessage); - /* IMD_Response DW1: relay */ - if (relay != data) { - /* not request relay */ - checkSuccess = false; - } - I165C_ReadDataWord(I165C_D_VIFC_HV_RELAIS_STATE_GET_RESPONSE, &data, canMessage); - /* IMD_Response DW2: relay state */ - if (relayState != data) { - /* relay state does not match expected state */ - checkSuccess = false; + switch (relay) { + case I165C_D_VIFC_HV_RELAIS_NEGATIVE: + CANTX_ImdRequest(CANTX_IMD_REQUEST_NEGATIVE_RELAY_STATE); + break; + case I165C_D_VIFC_HV_RELAIS_POSITIVE: + CANTX_ImdRequest(CANTX_IMD_REQUEST_POSITIVE_RELAY_STATE); + break; + default: + FAS_ASSERT(FAS_TRAP); + break; } - return checkSuccess; } static void I165C_SetMeasurementMode(uint8_t mode) { FAS_ASSERT((mode == I165C_ENABLE_MEASUREMENT) || (mode == I165C_DISABLE_MEASUREMENT)); - /* Reset CAN message buffer */ - I165C_ResetCanData(&i165c_canTxMessage); - /* Assemble CAN message */ - I165C_WriteCmd(I165C_MESSAGETYPE_IMD_REQUEST, I165C_CMD_S_VIFC_CTL_MEASUREMENT, &i165c_canTxMessage); - I165C_WriteDataWord(I165C_DW_VIFC_CTL_MEASUREMENT_REQUEST, mode, &i165c_canTxMessage); - /* Transmit CAN message */ - CAN_DataSend(I165C_CAN_NODE, i165c_canTxMessage.id, i165c_canTxMessage.idType, i165c_canTxMessage.data); -} -static bool I165C_CheckMeasurementMode(CAN_BUFFER_ELEMENT_s canMessage, uint8_t mode) { - FAS_ASSERT((mode == I165C_ENABLE_MEASUREMENT) || (mode == I165C_DISABLE_MEASUREMENT)); - bool measurementModeMatches = false; - uint16_t dVIFCStatus = 0u; - - /* Extract D_VIFC_STATUS word */ - I165C_ReadDataWordImdInfo(I165C_DW3, &dVIFCStatus, i165c_canRxMessage); - /* Extract measurement mode from D_VIFC_STATUS word */ - uint8_t actualMeasurementMode = dVIFCStatus & (1u << I165C_INSULATION_MEASUREMENT_STATUS_SHIFT); - - /* Check if actual measurement mode matches passed measurement mode */ - if (actualMeasurementMode == mode) { - /* Insulation measurement deactivated*/ - measurementModeMatches = true; + switch (mode) { + case I165C_ENABLE_MEASUREMENT: + CANTX_ImdRequest(CANTX_IMD_REQUEST_ENABLE_MEASUREMENT); + break; + case I165C_DISABLE_MEASUREMENT: + CANTX_ImdRequest(CANTX_IMD_REQUEST_DISABLE_MEASUREMENT); + break; } - return measurementModeMatches; } static void I165C_SetAveragingFactor(uint8_t averagingFactor) { @@ -778,33 +540,40 @@ static void I165C_SetAveragingFactor(uint8_t averagingFactor) { FAS_ASSERT(averagingFactor != 0u); FAS_ASSERT(averagingFactor <= 20u); - /* Reset CAN message buffer */ - I165C_ResetCanData(&i165c_canTxMessage); - /* Assemble CAN message */ - I165C_WriteCmd(I165C_MESSAGETYPE_IMD_REQUEST, I165C_CMD_S_IMC_SET_MEAN_FACTOR, &i165c_canTxMessage); - I165C_WriteDataWord(I165C_D_IMC_MEAN_FACTOR_SET_REQUEST, I165C_MEASUREMENT_AVERAGING_FACTOR, &i165c_canTxMessage); - /* Transmit CAN message */ - CAN_DataSend(I165C_CAN_NODE, i165c_canTxMessage.id, i165c_canTxMessage.idType, i165c_canTxMessage.data); + CANTX_ImdRequest(CANTX_IMD_REQUEST_SET_AVERAGING_FACTOR); } -static bool I165C_CheckAcknowledgeArrived(uint8_t command, uint8_t *pTries, CAN_BUFFER_ELEMENT_s *pCanMessage) { +static I165C_RESPONSE_RETURN_VALUE_e I165C_CheckAcknowledgeArrived( + uint8_t command, + uint8_t *pTries, + CAN_BUFFER_ELEMENT_s *pCanMessage) { FAS_ASSERT(pTries != NULL_PTR); FAS_ASSERT(pCanMessage != NULL_PTR); /* AXIVION Routine Generic-MissingParameterAssert: command: parameter accepts whole range */ - bool acknowledgeReceived = false; - if (I165C_CheckResponse(command, pCanMessage) == false) { + I165C_RESPONSE_RETURN_VALUE_e acknowledgeReceived = I165C_CheckResponse(command, pCanMessage); + if (acknowledgeReceived == I165C_RESPONSE_NO_RESPONSE) { (*pTries)++; } else { - *pTries = 0u; - acknowledgeReceived = true; + *pTries = 0u; } return acknowledgeReceived; } +static void I165C_IsInsulationMeasurementValid(DATA_BLOCK_INSULATION_MONITORING_s *pTableInsulationMonitoring) { + if ((pTableInsulationMonitoring->areDeviceFlagsValid == true) && + (pTableInsulationMonitoring->isImdRunning == true) && + (pTableInsulationMonitoring->dfIsMeasurementUpToDate == true)) { + pTableInsulationMonitoring->isInsulationMeasurementValid = true; + } else { + pTableInsulationMonitoring->isInsulationMeasurementValid = false; + } +} + static IMD_FSM_STATES_e I165C_Initialize(void) { - IMD_FSM_STATES_e nextState = IMD_FSM_STATE_INITIALIZATION; /* stay in initialization state */ - bool earlyExit = false; + IMD_FSM_STATES_e nextState = IMD_FSM_STATE_INITIALIZATION; /* stay in initialization state */ + bool earlyExit = false; + I165C_RESPONSE_RETURN_VALUE_e responseValue = I165C_RESPONSE_NO_RESPONSE; if (i165c_initializationState.timer > 0u) { if ((--i165c_initializationState.timer) > 0u) { @@ -817,31 +586,35 @@ static IMD_FSM_STATES_e I165C_Initialize(void) { switch (i165c_initializationState.currentState) { case I165C_FSM_STATE_INITIALIZATION_HAS_NEVER_RUN: /* Unlock device in case it was locked */ - I165C_ResetCanData(&i165c_canTxMessage); - I165C_WriteCmd(I165C_MESSAGETYPE_IMD_REQUEST, I165C_CMD_S_VIFC_CTL_LOCK, &i165c_canTxMessage); - I165C_WriteDataWord(I165C_D_VIFC_LOCK_MODE_CTL_REQUEST, I165C_LOCKMODE_UNLOCKED, &i165c_canTxMessage); - I165C_WriteDataWord(I165C_D_VIFC_LOCK_PWD_CTL_REQUEST, I165C_UNLOCK_PASSWORD, &i165c_canTxMessage); - CAN_DataSend(I165C_CAN_NODE, i165c_canTxMessage.id, i165c_canTxMessage.idType, i165c_canTxMessage.data); + CANTX_ImdRequest(CANTX_IMD_REQUEST_INITIALIZATION_UNLOCK); I165C_SetInitializationState( &i165c_initializationState, I165C_FSM_STATE_INITIALIZATION_UNLOCK_WAIT_ACK, I165C_FSM_SHORT_TIME); break; case I165C_FSM_STATE_INITIALIZATION_UNLOCK_WAIT_ACK: - if (I165C_CheckAcknowledgeArrived( - I165C_CMD_S_VIFC_CTL_LOCK, &i165c_initializationState.receptionTries, &i165c_canRxMessage) == - true) { + responseValue = I165C_CheckAcknowledgeArrived( + I165C_CMD_S_VIFC_CTL_LOCK, &i165c_initializationState.receptionTries, &i165c_canRxMessage); + if (responseValue == I165C_RESPONSE_SUCCESS) { I165C_SetInitializationState( &i165c_initializationState, I165C_FSM_STATE_INITIALIZATION_CHECK_MEASUREMENT_STATE, I165C_FSM_SHORT_TIME); } else { + /* Restart initialization process if iso165c responds with an error message */ + if (responseValue == I165C_RESPONSE_ERROR) { + I165C_SetInitializationState( + &i165c_initializationState, + I165C_FSM_STATE_INITIALIZATION_HAS_NEVER_RUN, + I165C_FSM_SHORT_TIME); + } /* Issue: 621 */ } break; case I165C_FSM_STATE_INITIALIZATION_CHECK_MEASUREMENT_STATE: if (I165C_GetImdInfo(&i165c_canRxMessage) == true) { - if (I165C_CheckMeasurementMode(i165c_canRxMessage, I165C_ENABLE_MEASUREMENT) == false) { + if (CANRX_ImdInfoCheckMeasurementMode(&i165c_canRxMessage.data[0], I165C_ENABLE_MEASUREMENT) == + false) { /* Measurement is not enabled -> Enable measurement as otherwise the following * initialization procedure would fail */ I165C_SetMeasurementMode(I165C_ENABLE_MEASUREMENT); @@ -860,16 +633,22 @@ static IMD_FSM_STATES_e I165C_Initialize(void) { break; case I165C_FSM_STATE_INITIALIZATION_ENABLE_MEASUREMENT_WAIT_ACK: - if (I165C_CheckAcknowledgeArrived( - I165C_CMD_S_VIFC_CTL_MEASUREMENT, - &i165c_initializationState.receptionTries, - &i165c_canRxMessage) == true) { + responseValue = I165C_CheckAcknowledgeArrived( + I165C_CMD_S_VIFC_CTL_MEASUREMENT, &i165c_initializationState.receptionTries, &i165c_canRxMessage); + if (responseValue == I165C_RESPONSE_SUCCESS) { /* Measurement enabled -> continue with initialization procedure */ I165C_SetInitializationState( &i165c_initializationState, I165C_FSM_STATE_INITIALIZATION_REQUEST_HV_RELAY_OPENING, I165C_FSM_SHORT_TIME); } else { + /* Restart initialization process if iso165c responds with an error message */ + if (responseValue == I165C_RESPONSE_ERROR) { + I165C_SetInitializationState( + &i165c_initializationState, + I165C_FSM_STATE_INITIALIZATION_HAS_NEVER_RUN, + I165C_FSM_SHORT_TIME); + } /* Issue: 621 */ } break; @@ -896,9 +675,11 @@ static IMD_FSM_STATES_e I165C_Initialize(void) { case I165C_FSM_STATE_INITIALIZATION_CHECK_NEGATIVE_HV_RELAY_STATE: /* Check if HV relay is open and measurement has been stopped */ - if (I165C_CheckResponse(I165C_CMD_S_VIFC_GET_HV_RELAIS, &i165c_canRxMessage) == true) { - if (I165C_CheckRelayState( - i165c_canRxMessage, I165C_D_VIFC_HV_RELAIS_NEGATIVE, I165C_RELAY_STATE_OPEN) == true) { + responseValue = I165C_CheckResponse(I165C_CMD_S_VIFC_GET_HV_RELAIS, &i165c_canRxMessage); + if (responseValue == I165C_RESPONSE_SUCCESS) { + if (CANRX_ImdResponseCheckRelayState( + &i165c_canRxMessage.data[0], I165C_D_VIFC_HV_RELAIS_NEGATIVE, I165C_RELAY_STATE_OPEN) == + true) { i165c_initializationState.receptionTries = 0u; i165c_initializationState.receptionTriesMessage = 0u; @@ -914,6 +695,13 @@ static IMD_FSM_STATES_e I165C_Initialize(void) { /* Issue: 621 */ } } else { + /* Restart initialization process if iso165c responds with an error message */ + if (responseValue == I165C_RESPONSE_ERROR) { + I165C_SetInitializationState( + &i165c_initializationState, + I165C_FSM_STATE_INITIALIZATION_HAS_NEVER_RUN, + I165C_FSM_SHORT_TIME); + } i165c_initializationState.receptionTriesMessage++; /* Issue: 621 */ } @@ -921,9 +709,11 @@ static IMD_FSM_STATES_e I165C_Initialize(void) { case I165C_FSM_STATE_INITIALIZATION_CHECK_POSITIVE_HV_RELAY_STATE: /* Check if HV relays are open and measurement has been stopped */ - if (I165C_CheckResponse(I165C_CMD_S_VIFC_GET_HV_RELAIS, &i165c_canRxMessage) == true) { - if (I165C_CheckRelayState( - i165c_canRxMessage, I165C_D_VIFC_HV_RELAIS_POSITIVE, I165C_RELAY_STATE_OPEN) == true) { + responseValue = I165C_CheckResponse(I165C_CMD_S_VIFC_GET_HV_RELAIS, &i165c_canRxMessage); + if (responseValue == I165C_RESPONSE_SUCCESS) { + if (CANRX_ImdResponseCheckRelayState( + &i165c_canRxMessage.data[0], I165C_D_VIFC_HV_RELAIS_POSITIVE, I165C_RELAY_STATE_OPEN) == + true) { i165c_initializationState.receptionTries = 0u; i165c_initializationState.receptionTriesMessage = 0u; @@ -936,6 +726,13 @@ static IMD_FSM_STATES_e I165C_Initialize(void) { /* Issue: 621 */ } } else { + /* Restart initialization process if iso165c responds with an error message */ + if (responseValue == I165C_RESPONSE_ERROR) { + I165C_SetInitializationState( + &i165c_initializationState, + I165C_FSM_STATE_INITIALIZATION_HAS_NEVER_RUN, + I165C_FSM_SHORT_TIME); + } i165c_initializationState.receptionTriesMessage++; /* Issue: 621 */ } @@ -946,22 +743,8 @@ static IMD_FSM_STATES_e I165C_Initialize(void) { when the coupling relays are open. */ if (I165C_GetImdInfo(&i165c_canRxMessage) == true) { - if (I165C_HasSelfTestBeenExecuted(i165c_canRxMessage) == false) { - I165C_ResetCanData(&i165c_canTxMessage); - I165C_WriteCmd( - I165C_MESSAGETYPE_IMD_REQUEST, I165C_CMD_S_IMC_CTL_SELFTEST, &i165c_canTxMessage); -#ifdef I165C_SELF_TEST_LONG - I165C_WriteDataWord( - I165C_D_IMC_SELFTEST_SCR_CTL_REQUEST, I165C_SELFTEST_SCENARIO_OVERALL, &i165c_canTxMessage); -#else /* I165C_SELF_TEST_SHORT */ - I165C_WriteDataWord( - I165C_D_IMC_SELFTEST_SCR_CTL_REQUEST, - I165C_SELFTEST_SCENARIO_PARAMETERCONFIG, - &i165c_canTxMessage); -#endif - CAN_DataSend( - I165C_CAN_NODE, i165c_canTxMessage.id, i165c_canTxMessage.idType, i165c_canTxMessage.data); - i165c_initializationState.receptionTries = 0u; + if (CANRX_ImdInfoHasSelfTestBeenExecuted(&i165c_canRxMessage.data[0]) == false) { + CANTX_ImdRequest(CANTX_IMD_REQUEST_INITIALIZATION_SELF_TEST); I165C_SetInitializationState( &i165c_initializationState, I165C_FSM_STATE_INITIALIZATION_SELF_TEST_WAIT_ACK, @@ -979,9 +762,9 @@ static IMD_FSM_STATES_e I165C_Initialize(void) { break; case I165C_FSM_STATE_INITIALIZATION_SELF_TEST_WAIT_ACK: - if (I165C_CheckAcknowledgeArrived( - I165C_CMD_S_IMC_CTL_SELFTEST, &i165c_initializationState.receptionTries, &i165c_canRxMessage) == - true) { + responseValue = I165C_CheckAcknowledgeArrived( + I165C_CMD_S_IMC_CTL_SELFTEST, &i165c_initializationState.receptionTries, &i165c_canRxMessage); + if (responseValue == I165C_RESPONSE_SUCCESS) { I165C_SetInitializationState( &i165c_initializationState, I165C_FSM_STATE_INITIALIZATION_WAIT_SELF_TEST, @@ -996,11 +779,18 @@ static IMD_FSM_STATES_e I165C_Initialize(void) { I165C_FSM_SHORT_TIME); i165c_initializationState.receptionTries = 0; } + /* Restart initialization process if iso165c responds with an error message */ + if (responseValue == I165C_RESPONSE_ERROR) { + I165C_SetInitializationState( + &i165c_initializationState, + I165C_FSM_STATE_INITIALIZATION_HAS_NEVER_RUN, + I165C_FSM_SHORT_TIME); + } } break; case I165C_FSM_STATE_INITIALIZATION_WAIT_SELF_TEST: if (I165C_GetImdInfo(&i165c_canRxMessage) == true) { - if (I165C_IsSelfTestFinished(i165c_canRxMessage) == false) { + if (CANRX_ImdInfoIsSelfTestFinished(&i165c_canRxMessage.data[0]) == false) { i165c_initializationState.receptionTries++; } else { i165c_initializationState.receptionTries = 0u; @@ -1029,64 +819,74 @@ static IMD_FSM_STATES_e I165C_Initialize(void) { break; case I165C_FSM_STATE_INITIALIZATION_AVERAGING_FACTOR_WAIT_ACK: - if (I165C_CheckAcknowledgeArrived( - I165C_CMD_S_IMC_SET_MEAN_FACTOR, - &i165c_initializationState.receptionTries, - &i165c_canRxMessage) == true) { + responseValue = I165C_CheckAcknowledgeArrived( + I165C_CMD_S_IMC_SET_MEAN_FACTOR, &i165c_initializationState.receptionTries, &i165c_canRxMessage); + if (responseValue == I165C_RESPONSE_SUCCESS) { I165C_SetInitializationState( &i165c_initializationState, I165C_FSM_STATE_INITIALIZATION_SET_ERROR_THRESHOLD, I165C_FSM_SHORT_TIME); } else { + /* Restart initialization process if iso165c responds with an error message */ + if (responseValue == I165C_RESPONSE_ERROR) { + I165C_SetInitializationState( + &i165c_initializationState, + I165C_FSM_STATE_INITIALIZATION_HAS_NEVER_RUN, + I165C_FSM_SHORT_TIME); + } /* Issue: 621 */ } break; case I165C_FSM_STATE_INITIALIZATION_SET_ERROR_THRESHOLD: - I165C_ResetCanData(&i165c_canTxMessage); - I165C_WriteCmd(I165C_MESSAGETYPE_IMD_REQUEST, I165C_CMD_S_IMC_SET_R_ISO_ERR_THR, &i165c_canTxMessage); - I165C_WriteDataWord( - I165C_D_IMC_R_ISO_ERR_THR_SET_REQUEST, I165C_ERROR_THRESHOLD_kOhm, &i165c_canTxMessage); - CAN_DataSend(I165C_CAN_NODE, i165c_canTxMessage.id, i165c_canTxMessage.idType, i165c_canTxMessage.data); + CANTX_ImdRequest(CANTX_IMD_REQUEST_INITIALIZATION_SET_ERROR_THRESHOLD); I165C_SetInitializationState( &i165c_initializationState, I165C_FSM_STATE_INITIALIZATION_ERROR_THRESHOLD_WAIT_ACK, I165C_FSM_SHORT_TIME); break; case I165C_FSM_STATE_INITIALIZATION_ERROR_THRESHOLD_WAIT_ACK: - if (I165C_CheckAcknowledgeArrived( - I165C_CMD_S_IMC_SET_R_ISO_ERR_THR, - &i165c_initializationState.receptionTries, - &i165c_canRxMessage) == true) { + responseValue = I165C_CheckAcknowledgeArrived( + I165C_CMD_S_IMC_SET_R_ISO_ERR_THR, &i165c_initializationState.receptionTries, &i165c_canRxMessage); + if (responseValue == I165C_RESPONSE_SUCCESS) { I165C_SetInitializationState( &i165c_initializationState, I165C_FSM_STATE_INITIALIZATION_SET_WARNING_THRESHOLD, I165C_FSM_SHORT_TIME); } else { + /* Restart initialization process if iso165c responds with an error message */ + if (responseValue == I165C_RESPONSE_ERROR) { + I165C_SetInitializationState( + &i165c_initializationState, + I165C_FSM_STATE_INITIALIZATION_HAS_NEVER_RUN, + I165C_FSM_SHORT_TIME); + } /* Issue: 621 */ } break; case I165C_FSM_STATE_INITIALIZATION_SET_WARNING_THRESHOLD: - I165C_ResetCanData(&i165c_canTxMessage); - I165C_WriteCmd(I165C_MESSAGETYPE_IMD_REQUEST, I165C_CMD_S_IMC_SET_R_ISO_ERR_WRN, &i165c_canTxMessage); - I165C_WriteDataWord( - I165C_D_IMC_R_ISO_ERR_WRN_SET_REQUEST, I165C_WARNING_THRESHOLD_kOhm, &i165c_canTxMessage); - CAN_DataSend(I165C_CAN_NODE, i165c_canTxMessage.id, i165c_canTxMessage.idType, i165c_canTxMessage.data); + CANTX_ImdRequest(CANTX_IMD_REQUEST_INITIALIZATION_SET_WARNING_THRESHOLD); I165C_SetInitializationState( &i165c_initializationState, I165C_FSM_STATE_INITIALIZATION_WARNING_THRESHOLD_WAIT_ACK, I165C_FSM_SHORT_TIME); break; case I165C_FSM_STATE_INITIALIZATION_WARNING_THRESHOLD_WAIT_ACK: - if (I165C_CheckAcknowledgeArrived( - I165C_CMD_S_IMC_SET_R_ISO_ERR_WRN, - &i165c_initializationState.receptionTries, - &i165c_canRxMessage) == true) { + responseValue = I165C_CheckAcknowledgeArrived( + I165C_CMD_S_IMC_SET_R_ISO_WRN_THR, &i165c_initializationState.receptionTries, &i165c_canRxMessage); + if (responseValue == I165C_RESPONSE_SUCCESS) { I165C_SetInitializationState( &i165c_initializationState, I165C_FSM_STATE_INITIALIZATION_DISABLE_MEASUREMENT, I165C_FSM_SHORT_TIME); } else { + /* Restart initialization process if iso165c responds with an error message */ + if (responseValue == I165C_RESPONSE_ERROR) { + I165C_SetInitializationState( + &i165c_initializationState, + I165C_FSM_STATE_INITIALIZATION_HAS_NEVER_RUN, + I165C_FSM_SHORT_TIME); + } /* Issue: 621 */ } break; @@ -1100,16 +900,22 @@ static IMD_FSM_STATES_e I165C_Initialize(void) { break; case I165C_FSM_STATE_INITIALIZATION_DISABLE_MEASUREMENT_WAIT_ACK: - if (I165C_CheckAcknowledgeArrived( - I165C_CMD_S_VIFC_CTL_MEASUREMENT, - &i165c_initializationState.receptionTries, - &i165c_canRxMessage) == true) { + responseValue = I165C_CheckAcknowledgeArrived( + I165C_CMD_S_VIFC_CTL_MEASUREMENT, &i165c_initializationState.receptionTries, &i165c_canRxMessage); + if (responseValue == I165C_RESPONSE_SUCCESS) { /* Initialized -> switch to next state in IMD state machine */ nextState = IMD_FSM_STATE_IMD_ENABLE; /* Reset state machine in case a re-initialization is necessary */ I165C_SetInitializationState( &i165c_initializationState, I165C_FSM_STATE_INITIALIZATION_HAS_NEVER_RUN, I165C_FSM_SHORT_TIME); } else { + /* Restart initialization process if iso165c responds with an error message */ + if (responseValue == I165C_RESPONSE_ERROR) { + I165C_SetInitializationState( + &i165c_initializationState, + I165C_FSM_STATE_INITIALIZATION_HAS_NEVER_RUN, + I165C_FSM_SHORT_TIME); + } /* Issue: 621 */ } break; @@ -1126,6 +932,7 @@ static IMD_FSM_STATES_e I165C_Initialize(void) { static IMD_FSM_STATES_e I165C_Enable(void) { IMD_FSM_STATES_e nextState = IMD_FSM_STATE_IMD_ENABLE; /* stay in enable state */ bool earlyExit = false; + I165C_RESPONSE_RETURN_VALUE_e responseValue; if (i165c_enableState.timer > 0u) { if ((--i165c_enableState.timer) > 0u) { @@ -1153,9 +960,11 @@ static IMD_FSM_STATES_e I165C_Enable(void) { break; case I165C_FSM_STATE_ENABLE_CHECK_NEGATIVE_HV_RELAY_STATE: - if (I165C_CheckResponse(I165C_CMD_S_VIFC_GET_HV_RELAIS, &i165c_canRxMessage) == true) { - if (I165C_CheckRelayState( - i165c_canRxMessage, I165C_D_VIFC_HV_RELAIS_NEGATIVE, I165C_RELAY_STATE_CLOSED) == true) { + responseValue = I165C_CheckResponse(I165C_CMD_S_VIFC_GET_HV_RELAIS, &i165c_canRxMessage); + if (responseValue == I165C_RESPONSE_SUCCESS) { + if (CANRX_ImdResponseCheckRelayState( + &i165c_canRxMessage.data[0], I165C_D_VIFC_HV_RELAIS_NEGATIVE, I165C_RELAY_STATE_CLOSED) == + true) { i165c_enableState.receptionTries = 0u; i165c_enableState.receptionTriesMessage = 0u; @@ -1170,6 +979,10 @@ static IMD_FSM_STATES_e I165C_Enable(void) { /* Issue: 621 */ } } else { + /* Reset to previous state to send the request message again */ + if (responseValue == I165C_RESPONSE_ERROR) { + I165C_SetEnableState(&i165c_enableState, i165c_enableState.previousState, I165C_FSM_SHORT_TIME); + } i165c_enableState.receptionTriesMessage++; /* Issue: 621 */ if (i165c_enableState.receptionTriesMessage > I165C_TRANSMISSION_ATTEMPTS) { @@ -1184,9 +997,11 @@ static IMD_FSM_STATES_e I165C_Enable(void) { break; case I165C_FSM_STATE_ENABLE_CHECK_POSITIVE_HV_RELAY_STATE: - if (I165C_CheckResponse(I165C_CMD_S_VIFC_GET_HV_RELAIS, &i165c_canRxMessage) == true) { - if (I165C_CheckRelayState( - i165c_canRxMessage, I165C_D_VIFC_HV_RELAIS_POSITIVE, I165C_RELAY_STATE_CLOSED) == true) { + responseValue = I165C_CheckResponse(I165C_CMD_S_VIFC_GET_HV_RELAIS, &i165c_canRxMessage); + if (responseValue == I165C_RESPONSE_SUCCESS) { + if (CANRX_ImdResponseCheckRelayState( + &i165c_canRxMessage.data[0], I165C_D_VIFC_HV_RELAIS_POSITIVE, I165C_RELAY_STATE_CLOSED) == + true) { i165c_enableState.receptionTries = 0u; i165c_enableState.receptionTriesMessage = 0u; @@ -1197,6 +1012,10 @@ static IMD_FSM_STATES_e I165C_Enable(void) { /* Issue: 621 */ } } else { + /* Reset to previous state to send the request message again*/ + if (responseValue == I165C_RESPONSE_ERROR) { + I165C_SetEnableState(&i165c_enableState, i165c_enableState.previousState, I165C_FSM_SHORT_TIME); + } i165c_enableState.receptionTriesMessage++; /* Issue: 621 */ } @@ -1209,15 +1028,19 @@ static IMD_FSM_STATES_e I165C_Enable(void) { break; case I165C_FSM_STATE_ENABLE_START_MEASUREMENT_WAIT_ACK: - if (I165C_CheckAcknowledgeArrived( - I165C_CMD_S_VIFC_CTL_MEASUREMENT, &i165c_enableState.receptionTries, &i165c_canRxMessage) == - true) { + responseValue = I165C_CheckAcknowledgeArrived( + I165C_CMD_S_VIFC_CTL_MEASUREMENT, &i165c_enableState.receptionTries, &i165c_canRxMessage); + if (responseValue == I165C_RESPONSE_SUCCESS) { /* Enabled -> switch to next state in IMD state machine */ nextState = IMD_FSM_STATE_RUNNING; /* Reset state machine in case a re-enabling is necessary */ I165C_SetEnableState( &i165c_enableState, I165C_FSM_STATE_ENABLE_HAS_NEVER_RUN, I165C_FSM_SHORT_TIME); } else { + /* Reset to previous state so the request message gets send again */ + if (responseValue == I165C_RESPONSE_ERROR) { + I165C_SetEnableState(&i165c_enableState, i165c_enableState.previousState, I165C_FSM_SHORT_TIME); + } /* Issue: 621 */ } break; @@ -1230,10 +1053,7 @@ static IMD_FSM_STATES_e I165C_Running(DATA_BLOCK_INSULATION_MONITORING_s *pTable FAS_ASSERT(pTableInsulationMonitoring != NULL_PTR); IMD_FSM_STATES_e nextState = IMD_FSM_STATE_RUNNING; /* stay in running state */ bool earlyExit = false; - uint16_t resistance_kOhm = 0u; - uint16_t statusFlags = 0u; - uint8_t data1 = 0u; - uint8_t data2 = 0u; + I165C_RESPONSE_RETURN_VALUE_e responseValue; if (i165c_runningState.timer > 0u) { if ((--i165c_runningState.timer) > 0u) { @@ -1251,41 +1071,28 @@ static IMD_FSM_STATES_e I165C_Running(DATA_BLOCK_INSULATION_MONITORING_s *pTable break; case I165C_FSM_STATE_RUNNING_READ_RESISTANCE: - I165C_ResetCanData(&i165c_canTxMessage); - I165C_WriteCmd(I165C_MESSAGETYPE_IMD_REQUEST, I165C_CMD_S_IMC_GET_R_ISO, &i165c_canTxMessage); - CAN_DataSend(I165C_CAN_NODE, i165c_canTxMessage.id, i165c_canTxMessage.idType, i165c_canTxMessage.data); - i165c_runningState.receptionTries = 0u; + CANTX_ImdRequest(CANTX_IMD_REQUEST_READ_RESISTANCE); I165C_SetRunningState( &i165c_runningState, I165C_FSM_STATE_RUNNING_READ_RESISTANCE_WAIT_ACK, I165C_FSM_SHORT_TIME); break; case I165C_FSM_STATE_RUNNING_READ_RESISTANCE_WAIT_ACK: - if (I165C_CheckAcknowledgeArrived( - I165C_CMD_S_IMC_GET_R_ISO, &i165c_runningState.receptionTries, &i165c_canRxMessage) == true) { - /* Extract resistance value from response */ - I165C_ReadDataWord(I165C_DW1, &resistance_kOhm, i165c_canRxMessage); - pTableInsulationMonitoring->insulationResistance_kOhm = resistance_kOhm; - - /* Extract bias/tendency to the location of the insulation fault (error), if detected */ - I165C_ReadDataByte(I165C_D_IMC_R_ISO_BIAS_GET_RESPONSE, &data1, i165c_canRxMessage); - if (data1 == I165C_BIAS_TO_HV_PLUS) { - pTableInsulationMonitoring->dfIsChassisShortToHvPlus = true; - pTableInsulationMonitoring->dfIsChassisShortToHvMinus = false; - } else if (data1 == I165C_BIAS_TO_HV_MINUS) { - pTableInsulationMonitoring->dfIsChassisShortToHvMinus = true; - pTableInsulationMonitoring->dfIsChassisShortToHvPlus = false; - } else { - pTableInsulationMonitoring->dfIsChassisShortToHvPlus = false; - pTableInsulationMonitoring->dfIsChassisShortToHvMinus = false; - } + responseValue = I165C_CheckAcknowledgeArrived( + I165C_CMD_S_IMC_GET_R_ISO, &i165c_runningState.receptionTries, &i165c_canRxMessage); + if (responseValue == I165C_RESPONSE_SUCCESS) { + CANRX_ImdResponseReadInsulationResistance(&i165c_canRxMessage.data[0], pTableInsulationMonitoring); - /* Extract counter value */ - I165C_ReadDataByte(I165C_D_IMC_R_ISO_CNT_GET_RESPONSE, &data2, i165c_canRxMessage); - /* TODO: What to do with this info? */ + CANRX_ImdResponseCheckInsulationFaultTendency( + &i165c_canRxMessage.data[0], pTableInsulationMonitoring); I165C_SetRunningState( &i165c_runningState, I165C_FSM_STATE_RUNNING_GET_MEASUREMENT, I165C_FSM_SHORT_TIME); } else { + /* Reset to previous state to send the request message again */ + if (responseValue == I165C_RESPONSE_ERROR) { + I165C_SetRunningState( + &i165c_runningState, i165c_runningState.previousState, I165C_FSM_SHORT_TIME); + } /* Issue: 621 */ } break; @@ -1299,60 +1106,8 @@ static IMD_FSM_STATES_e I165C_Running(DATA_BLOCK_INSULATION_MONITORING_s *pTable } else { i165c_runningState.receptionTriesMessage = 0u; - /* Get measured resistance */ - I165C_ReadDataWordImdInfo(I165C_DW1, &resistance_kOhm, i165c_canRxMessage); - pTableInsulationMonitoring->insulationResistance_kOhm = resistance_kOhm; - - /* Get IMC status */ - I165C_ReadDataWordImdInfo(I165C_DW2, &statusFlags, i165c_canRxMessage); - if (0u != (statusFlags & (1u << I165C_INSULATION_FAULT_SHIFT))) { - /* Insulation fault */ - pTableInsulationMonitoring->dfIsCriticalResistanceDetected = true; - } else { - pTableInsulationMonitoring->dfIsCriticalResistanceDetected = false; - } - if (0u != (statusFlags & (1u << I165C_CHASSIS_FAULT_SHIFT))) { - /* Chassis fault */ - pTableInsulationMonitoring->dfIsChassisFaultDetected = true; - } else { - pTableInsulationMonitoring->dfIsChassisFaultDetected = false; - } - if (0u != (statusFlags & (1u << I165C_SYSTEM_FAILURE_SHIFT))) { - /* System failure */ - pTableInsulationMonitoring->dfIsDeviceErrorDetected = true; - pTableInsulationMonitoring->areDeviceFlagsValid = false; - } else { - pTableInsulationMonitoring->dfIsDeviceErrorDetected = false; - pTableInsulationMonitoring->areDeviceFlagsValid = true; - } - if (0u != (statusFlags & (1u << I165C_INSULATION_WARNING_SHIFT))) { - /* Insulation warning */ - pTableInsulationMonitoring->dfIsWarnableResistanceDetected = true; - } else { - pTableInsulationMonitoring->dfIsWarnableResistanceDetected = false; - } - - /* Get VIFC status */ - I165C_ReadDataWordImdInfo(I165C_DW3, &statusFlags, i165c_canRxMessage); - if (0u != (statusFlags & (1u << I165C_INSULATION_MEASUREMENT_STATUS_SHIFT))) { - /* Insulation measurement deactivated*/ - pTableInsulationMonitoring->isImdRunning = false; - } else { - pTableInsulationMonitoring->isImdRunning = true; - } - if (0u != (statusFlags & (1u << I165C_RESISTANCE_VALUE_OUTDATED_SHIFT))) { - /* Insulation resistance value outdated */ - pTableInsulationMonitoring->dfIsMeasurementUpToDate = false; - } else { - pTableInsulationMonitoring->dfIsMeasurementUpToDate = true; - } - if ((pTableInsulationMonitoring->areDeviceFlagsValid == true) && - (pTableInsulationMonitoring->isImdRunning == true) && - (pTableInsulationMonitoring->dfIsMeasurementUpToDate == true)) { - pTableInsulationMonitoring->isInsulationMeasurementValid = true; - } else { - pTableInsulationMonitoring->isInsulationMeasurementValid = false; - } + CANRX_ImdInfoGetDataFromMessage(&i165c_canRxMessage.data[0], pTableInsulationMonitoring); + I165C_IsInsulationMeasurementValid(pTableInsulationMonitoring); } /* Restart measurement cycle */ I165C_SetRunningState( @@ -1373,6 +1128,7 @@ static IMD_FSM_STATES_e I165C_Running(DATA_BLOCK_INSULATION_MONITORING_s *pTable static IMD_FSM_STATES_e I165C_Disable(void) { IMD_FSM_STATES_e nextState = IMD_FSM_STATE_SHUTDOWN; /* stay in shutdown state */ bool earlyExit = false; + I165C_RESPONSE_RETURN_VALUE_e responseValue; if (i165c_disableState.timer > 0u) { if ((--i165c_disableState.timer) > 0u) { @@ -1398,12 +1154,17 @@ static IMD_FSM_STATES_e I165C_Disable(void) { break; case I165C_FSM_STATE_MEASUREMENT_STOPPED_WAIT_ACK: - if (I165C_CheckAcknowledgeArrived( - I165C_CMD_S_VIFC_CTL_MEASUREMENT, &i165c_disableState.receptionTries, &i165c_canRxMessage) == - true) { + responseValue = I165C_CheckAcknowledgeArrived( + I165C_CMD_S_VIFC_CTL_MEASUREMENT, &i165c_disableState.receptionTries, &i165c_canRxMessage); + if (responseValue == I165C_RESPONSE_SUCCESS) { I165C_SetDisableState( &i165c_disableState, I165C_FSM_STATE_DISABLE_SET_HV_RELAY_STATE, I165C_FSM_SHORT_TIME); } else { + /* Reset to previous state to send request message again */ + if (responseValue == I165C_RESPONSE_ERROR) { + I165C_SetDisableState( + &i165c_disableState, i165c_disableState.previousState, I165C_FSM_SHORT_TIME); + } /* Issue: 621 */ } break; @@ -1424,9 +1185,11 @@ static IMD_FSM_STATES_e I165C_Disable(void) { break; case I165C_FSM_STATE_DISABLE_CHECK_NEGATIVE_HV_RELAY_STATE: - if (I165C_CheckResponse(I165C_CMD_S_VIFC_GET_HV_RELAIS, &i165c_canRxMessage) == true) { - if (I165C_CheckRelayState( - i165c_canRxMessage, I165C_D_VIFC_HV_RELAIS_NEGATIVE, I165C_RELAY_STATE_OPEN) == true) { + responseValue = I165C_CheckResponse(I165C_CMD_S_VIFC_GET_HV_RELAIS, &i165c_canRxMessage); + if (responseValue == I165C_RESPONSE_SUCCESS) { + if (CANRX_ImdResponseCheckRelayState( + &i165c_canRxMessage.data[0], I165C_D_VIFC_HV_RELAIS_NEGATIVE, I165C_RELAY_STATE_OPEN) == + true) { i165c_disableState.receptionTries = 0u; i165c_disableState.receptionTriesMessage = 0u; @@ -1441,15 +1204,22 @@ static IMD_FSM_STATES_e I165C_Disable(void) { /* Issue: #621 */ } } else { + /* Reset to previous state to send request message again */ + if (responseValue == I165C_RESPONSE_ERROR) { + I165C_SetDisableState( + &i165c_disableState, i165c_disableState.previousState, I165C_FSM_SHORT_TIME); + } i165c_disableState.receptionTriesMessage++; /* Issue: #621 */ } break; case I165C_FSM_STATE_DISABLE_CHECK_POSITIVE_HV_RELAY_STATE: - if (I165C_CheckResponse(I165C_CMD_S_VIFC_GET_HV_RELAIS, &i165c_canRxMessage) == true) { - if (I165C_CheckRelayState( - i165c_canRxMessage, I165C_D_VIFC_HV_RELAIS_POSITIVE, I165C_RELAY_STATE_OPEN) == true) { + responseValue = I165C_CheckResponse(I165C_CMD_S_VIFC_GET_HV_RELAIS, &i165c_canRxMessage); + if (responseValue == I165C_RESPONSE_SUCCESS) { + if (CANRX_ImdResponseCheckRelayState( + &i165c_canRxMessage.data[0], I165C_D_VIFC_HV_RELAIS_POSITIVE, I165C_RELAY_STATE_OPEN) == + true) { i165c_disableState.receptionTries = 0u; i165c_disableState.receptionTriesMessage = 0u; @@ -1464,6 +1234,11 @@ static IMD_FSM_STATES_e I165C_Disable(void) { /* Issue: 621 */ } } else { + /* Reset to previous state to send request message again */ + if (responseValue == I165C_RESPONSE_ERROR) { + I165C_SetDisableState( + &i165c_disableState, i165c_disableState.previousState, I165C_FSM_SHORT_TIME); + } i165c_disableState.receptionTriesMessage++; /* Issue: 621 */ } @@ -1494,33 +1269,12 @@ extern IMD_FSM_STATES_e IMD_ProcessShutdownState(void) { /*========== Externalized Static Function Implementations (Unit Test) =======*/ #ifdef UNITY_UNIT_TEST -extern void TEST_I165C_ResetCanData(CAN_BUFFER_ELEMENT_s *canMessage) { - I165C_ResetCanData(canMessage); -} -extern void TEST_I165C_WriteDataWord(uint8_t dataWord, uint16_t data, CAN_BUFFER_ELEMENT_s *canMessage) { - I165C_WriteDataWord(dataWord, data, canMessage); -} -extern void TEST_I165C_ReadDataWord(uint8_t dataWord, uint16_t *data, CAN_BUFFER_ELEMENT_s canMessage) { - I165C_ReadDataWord(dataWord, data, canMessage); -} -extern void TEST_I165C_ReadDataWordImdInfo(uint8_t dataWord, uint16_t *data, CAN_BUFFER_ELEMENT_s canMessage) { - I165C_ReadDataWordImdInfo(dataWord, data, canMessage); -} -extern void TEST_I165C_ReadDataByte(uint8_t dataByte, uint8_t *data, CAN_BUFFER_ELEMENT_s canMessage) { - I165C_ReadDataByte(dataByte, data, canMessage); -} -extern void TEST_I165C_WriteCmd(uint8_t id, uint8_t command, CAN_BUFFER_ELEMENT_s *canMessage) { - I165C_WriteCmd(id, command, canMessage); -} extern bool TEST_I165C_CheckResponse(uint8_t command, CAN_BUFFER_ELEMENT_s *canMessage) { return I165C_CheckResponse(command, canMessage); } extern bool TEST_I165C_GetImdInfo(CAN_BUFFER_ELEMENT_s *canMessage) { return I165C_GetImdInfo(canMessage); } -extern bool TEST_I165C_IsSelfTestFinished(CAN_BUFFER_ELEMENT_s canMessage) { - return I165C_IsSelfTestFinished(canMessage); -} extern bool TEST_I165C_CheckAcknowledgeArrived(uint8_t command, uint8_t *tries, CAN_BUFFER_ELEMENT_s *canMessage) { return I165C_CheckAcknowledgeArrived(command, tries, canMessage); } diff --git a/src/app/driver/imd/bender/iso165c/bender_iso165c.h b/src/app/driver/imd/bender/iso165c/bender_iso165c.h index 3638b7f3..9bf3c688 100644 --- a/src/app/driver/imd/bender/iso165c/bender_iso165c.h +++ b/src/app/driver/imd/bender/iso165c/bender_iso165c.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,12 @@ * @file bender_iso165c.h * @author foxBMS Team * @date 2019-04-07 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix I165C * * @brief Headers for the driver for the insulation monitoring - * * @details Module header for insulation measurements. Sets up the interface to * the IO and TIM module. * Also sets up Bender Isometer specific settings. @@ -74,15 +73,8 @@ /*========== Externalized Static Functions Prototypes (Unit Test) ===========*/ #ifdef UNITY_UNIT_TEST -extern void TEST_I165C_ResetCanData(CAN_BUFFER_ELEMENT_s *canMessage); -extern void TEST_I165C_WriteDataWord(uint8_t dataWord, uint16_t data, CAN_BUFFER_ELEMENT_s *canMessage); -extern void TEST_I165C_ReadDataWord(uint8_t dataWord, uint16_t *data, CAN_BUFFER_ELEMENT_s canMessage); -extern void TEST_I165C_ReadDataWordImdInfo(uint8_t dataWord, uint16_t *data, CAN_BUFFER_ELEMENT_s canMessage); -extern void TEST_I165C_ReadDataByte(uint8_t dataByte, uint8_t *data, CAN_BUFFER_ELEMENT_s canMessage); -extern void TEST_I165C_WriteCmd(uint8_t id, uint8_t command, CAN_BUFFER_ELEMENT_s *canMessage); extern bool TEST_I165C_CheckResponse(uint8_t command, CAN_BUFFER_ELEMENT_s *canMessage); extern bool TEST_I165C_GetImdInfo(CAN_BUFFER_ELEMENT_s *canMessage); -extern bool TEST_I165C_IsSelfTestFinished(CAN_BUFFER_ELEMENT_s canMessage); extern bool TEST_I165C_CheckAcknowledgeArrived(uint8_t command, uint8_t *tries, CAN_BUFFER_ELEMENT_s *canMessage); #endif diff --git a/src/app/driver/imd/bender/iso165c/config/bender_iso165c_cfg.h b/src/app/driver/imd/bender/iso165c/config/bender_iso165c_cfg.h index d71f5270..efa3915a 100644 --- a/src/app/driver/imd/bender/iso165c/config/bender_iso165c_cfg.h +++ b/src/app/driver/imd/bender/iso165c/config/bender_iso165c_cfg.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,12 @@ * @file bender_iso165c_cfg.h * @author foxBMS Team * @date 2021-03-17 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS_CONFIGURATION * @prefix I165C * * @brief Headers for the configuration for the insulation monitoring - * * @details Please see the manual and data sheet for detailed information about * the specifications and defines used within this file. * @@ -68,6 +67,9 @@ #include "can_cfg.h" +#include "can_cfg_rx-message-definitions.h" +#include "can_cfg_tx-async-message-definitions.h" + #include /*========== Macros and Definitions =========================================*/ @@ -112,7 +114,7 @@ /** Maximum queue timeout time in milliseconds */ #define I165C_QUEUE_TIMEOUT_ms ((TickType_t)0u) -/** datsheet version: iso165C_D00154_03_M_XXEN/01.2019 */ +/** data sheet version: iso165C_D00154_03_M_XXEN/01.2019 */ /** * frames have up to two data words @@ -142,25 +144,21 @@ /** type of messages to communicate with I165C */ /** cyclic message, transmitted every second */ -#define I165C_MESSAGETYPE_IMD_INFO (CANRX_IMD_INFO_ID) +#define I165C_MESSAGE_TYPE_IMD_INFO (CANRX_IMD_INFO_ID) /** message for requests (self test, reset, set values...) */ -#define I165C_MESSAGETYPE_IMD_REQUEST (CANTX_IMD_REQUEST_ID) -/** answer message, always send by I165C when it received a request*/ -#define I165C_MESSAGETYPE_IMD_RESPONSE (CANRX_IMD_RESPONSE_ID) -/** RX message identifier type */ -#define I165C_RX_MESSAGE_IDENTIFIER_TYPE (CANRX_IMD_ID_TYPE) +#define I165C_MESSAGE_TYPE_IMD_REQUEST (CANTX_IMD_REQUEST_ID) /** TX message identifier type */ -#define I165C_TX_MESSAGE_IDENTIFIER_TYPE (CANTX_IMD_ID_TYPE) +#define I165C_TX_MESSAGE_IDENTIFIER_TYPE (CANTX_IMD_REQUEST_ID_TYPE) /** control commands (CTL) */ /** trigger self test */ -#define I165C_CMD_S_IMC_CTL_SELFTEST (0x21u) -#define I165C_D_IMC_SELFTEST_SCR_CTL_REQUEST (I165C_DW1) -#define I165C_D_IMC_SELFTEST_SCR_CTL_RESPONSE (I165C_DW1) -#define I165C_SELFTEST_SCENARIO_NO_ACTION (0u) -#define I165C_SELFTEST_SCENARIO_OVERALL (1u) -#define I165C_SELFTEST_SCENARIO_PARAMETERCONFIG (2u) +#define I165C_CMD_S_IMC_CTL_SELFTEST (0x21u) +#define I165C_D_IMC_SELFTEST_SCR_CTL_REQUEST (I165C_DW1) +#define I165C_D_IMC_SELFTEST_SCR_CTL_RESPONSE (I165C_DW1) +#define I165C_SELFTEST_SCENARIO_NO_ACTION (0u) +#define I165C_SELFTEST_SCENARIO_OVERALL (1u) +#define I165C_SELFTEST_SCENARIO_PARAMETER_CONFIG (2u) /** reset I165C */ #define I165C_CMD_S_VIFC_CTL_IMC_RESET (0xC8u) @@ -169,18 +167,19 @@ #define I165C_D_VIFC_LOCK_MODE_CTL_REQUEST (I165C_DW1) #define I165C_D_VIFC_LOCK_MODE_CTL_RESPONSE (I165C_DW1) #define I165C_D_VIFC_LOCK_PWD_CTL_REQUEST (I165C_DW2) -#define I165C_LOCKMODE_UNLOCKED (0u) -#define I165C_LOCKMODE_LOCKED (1u) -#define I165C_LOCKMODE_UNKNOWN (100u) +#define I165C_LOCK_MODE_UNLOCKED (0u) +#define I165C_LOCK_MODE_LOCKED (1u) +#define I165C_LOCK_MODE_UNKNOWN (100u) #define I165C_UNLOCK_PASSWORD (0u) #define I165C_LOCK_PASSWORD (0xFFFFu) /** change measurement mode */ -#define I165C_CMD_S_VIFC_CTL_MEASUREMENT (0xCBu) -#define I165C_DW_VIFC_CTL_MEASUREMENT_REQUEST (I165C_DW1) -#define I165C_DISABLE_MEASUREMENT (0u) -#define I165C_ENABLE_MEASUREMENT (1u) -#define I165C_MEASUREMENT_MODE_UNKNOWN (100u) +#define I165C_CMD_S_VIFC_CTL_MEASUREMENT (0xCBu) +#define I165C_D_VIFC_MEASURE_MODE_CTL_REQUEST (I165C_DW1) +#define I165C_D_VIFC_Measure_MODE_CTL_RESPONSE (I165C_DW1) +#define I165C_DISABLE_MEASUREMENT (0u) +#define I165C_ENABLE_MEASUREMENT (1u) +#define I165C_MEASUREMENT_MODE_UNKNOWN (100u) /** * set commands (SET) @@ -195,9 +194,9 @@ #define I165C_D_IMC_R_ISO_ERR_THR_SET_REQUEST (I165C_DW1) #define I165C_D_IMC_R_ISO_ERR_THR_SET_RESPONSE (I165C_DW1) /** set warning threshold */ -#define I165C_CMD_S_IMC_SET_R_ISO_ERR_WRN (0x29u) -#define I165C_D_IMC_R_ISO_ERR_WRN_SET_REQUEST (I165C_DW1) -#define I165C_D_IMC_R_ISO_ERR_WRN_SET_RESPONSE (I165C_DW1) +#define I165C_CMD_S_IMC_SET_R_ISO_WRN_THR (0x29u) +#define I165C_D_IMC_R_ISO_WRN_THR_SET_REQUEST (I165C_DW1) +#define I165C_D_IMC_R_ISO_WRN_THR_SET_RESPONSE (I165C_DW1) /** set the mean factor of the insulation resistance averaging algorithm */ #define I165C_CMD_S_IMC_SET_MEAN_FACTOR (0x2Bu) #define I165C_D_IMC_MEAN_FACTOR_SET_REQUEST (I165C_DW1) @@ -300,15 +299,15 @@ #define I165C_D_IMC_MANUFACT_DATA_GET_RESPONSE (I165C_DW2) /** get internal status of the D_VIFC_STATUS */ -#define I165C_CMD_S_VIFC_GET_STATUS (0xDCu) -#define I165C_D_VIFC_STATUS_GET_RESPONSE (I165C_DW1) -#define I165C_INSULATION_MEASUREMENT_STATUS_SHIFT (0u) -#define I165C_IMC_CONNECTIVITY_SHIFT (1u) -#define I165C_IMC_ALIVE_STATUS_DETECTION_SHIFT (2u) -#define I165C_VIFC_COMMAND_SHIFT (4u) -#define I165C_RESISTANCE_VALUE_OUTDATED_SHIFT (8u) -#define I165C_IMC_SELFTEST_OVERALL_SCENARIO_SHIFT (12u) -#define I165C_IMC_SELFTEST_PARAMETERCONFIG_SCENARIO_SHIFT (13u) +#define I165C_CMD_S_VIFC_GET_STATUS (0xDCu) +#define I165C_D_VIFC_STATUS_GET_RESPONSE (I165C_DW1) +#define I165C_INSULATION_MEASUREMENT_STATUS_SHIFT (0u) +#define I165C_IMC_CONNECTIVITY_SHIFT (1u) +#define I165C_IMC_ALIVE_STATUS_DETECTION_SHIFT (2u) +#define I165C_VIFC_COMMAND_SHIFT (4u) +#define I165C_RESISTANCE_VALUE_OUTDATED_SHIFT (8u) +#define I165C_IMC_SELFTEST_OVERALL_SCENARIO_SHIFT (12u) +#define I165C_IMC_SELFTEST_PARAMETER_CONFIG_SCENARIO_SHIFT (13u) /** get state of the HV relays in the HV coupling network */ #define I165C_CMD_S_VIFC_GET_HV_RELAIS (0xDDu) @@ -322,7 +321,7 @@ /** get software version of the VIFC */ #define I165C_CMD_S_VIFC_GET_VERSION (0xDEu) -#define I165C_D_IMC_VERSION_INDEX_GET_REQUEST (I165C_DW1) +#define I165C_D_VIFC_VERSION_INDEX_GET_REQUEST (I165C_DW1) #define I165C_D_VIFC_VERSION_INDEX_GET_RESPONSE (I165C_DW1) #define I165C_D_VIFC_VERSION_GET_RESPONSE (I165C_DW2) diff --git a/src/app/driver/imd/bender/iso165c/wscript b/src/app/driver/imd/bender/iso165c/wscript old mode 100644 new mode 100755 index 7d208e6c..67a55f30 --- a/src/app/driver/imd/bender/iso165c/wscript +++ b/src/app/driver/imd/bender/iso165c/wscript @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -56,6 +55,8 @@ def build(bld): os.path.join("config"), os.path.join("..", "..", "..", "can"), os.path.join("..", "..", "..", "can", "cbs"), + os.path.join("..", "..", "..", "can", "cbs", "tx-async"), + os.path.join("..", "..", "..", "can", "cbs", "rx"), os.path.join("..", "..", "..", "config"), os.path.join("..", "..", "..", "..", "application", "config"), os.path.join("..", "..", "..", "..", "driver", "mcu"), diff --git a/src/app/driver/imd/bender/wscript b/src/app/driver/imd/bender/wscript old mode 100644 new mode 100755 index 23979567..ea0af5e4 --- a/src/app/driver/imd/bender/wscript +++ b/src/app/driver/imd/bender/wscript @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause diff --git a/src/app/driver/imd/imd.c b/src/app/driver/imd/imd.c index c5e7d5f2..e5f65539 100644 --- a/src/app/driver/imd/imd.c +++ b/src/app/driver/imd/imd.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,12 @@ * @file imd.c * @author foxBMS Team * @date 2021-11-04 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix IMD * * @brief Main driver state machine for insulation monitoring driver - * * @details This superimposed state machine initializes, enables and disables * the selected Insulation Monitoring Device. Furthermore, the * measurement results are evaluated and saved in the database. @@ -94,7 +93,7 @@ typedef enum { /** some struct with some information */ typedef struct { - bool isStatemachineInitialized; /*!< true if initialized, otherwise false */ + bool isStateMachineInitialized; /*!< true if initialized, otherwise false */ bool switchImdDeviceOn; /*!< true if enabling process is ongoing */ } IMD_INFORMATION_s; @@ -129,7 +128,7 @@ static IMD_STATE_s imd_state = { .nextSubstate = IMD_FSM_SUBSTATE_DUMMY, .currentSubstate = IMD_FSM_SUBSTATE_DUMMY, .previousSubstate = IMD_FSM_SUBSTATE_DUMMY, - .information.isStatemachineInitialized = false, + .information.isStateMachineInitialized = false, .information.switchImdDeviceOn = false, .pTableImd = &imd_tableInsulationMonitoring, }; @@ -379,7 +378,7 @@ static STD_RETURN_TYPE_e IMD_RunStateMachine(IMD_STATE_s *pImdState) { } else if (nextState == IMD_FSM_STATE_ERROR) { IMD_SetState(pImdState, IMD_FSM_STATE_ERROR, IMD_FSM_SUBSTATE_ENTRY, IMD_FSM_SHORT_TIME); } else if (nextState == IMD_FSM_STATE_IMD_ENABLE) { - pImdState->information.isStatemachineInitialized = true; + pImdState->information.isStateMachineInitialized = true; IMD_SetState(pImdState, IMD_FSM_STATE_IMD_ENABLE, IMD_FSM_SUBSTATE_ENTRY, IMD_FSM_SHORT_TIME); } else { FAS_ASSERT(FAS_TRAP); /* Something went wrong */ @@ -522,7 +521,7 @@ extern IMD_RETURN_TYPE_e IMD_RequestMeasurementStop(void) { } extern bool IMD_GetInitializationState(void) { - return imd_state.information.isStatemachineInitialized; + return imd_state.information.isStateMachineInitialized; } extern STD_RETURN_TYPE_e IMD_Trigger(void) { diff --git a/src/app/driver/imd/imd.h b/src/app/driver/imd/imd.h index a41ed223..e3480a9a 100644 --- a/src/app/driver/imd/imd.h +++ b/src/app/driver/imd/imd.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file imd.h * @author foxBMS Team * @date 2020-11-20 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix IMD * * @brief API header for the insulation monitoring device - * + * @details TODO */ #ifndef FOXBMS__IMD_H_ diff --git a/src/app/driver/imd/none/no-imd.c b/src/app/driver/imd/none/no-imd.c index dc397233..964fab3a 100644 --- a/src/app/driver/imd/none/no-imd.c +++ b/src/app/driver/imd/none/no-imd.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,12 @@ * @file no-imd.c * @author foxBMS Team * @date 2020-11-20 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix NOIMD * * @brief Driver for the dummy insulation monitoring driver - * * @details Dummy driver that provides a default resistance and returns that * the measurement is always valid. */ diff --git a/src/app/driver/imd/none/no-imd.h b/src/app/driver/imd/none/no-imd.h index 285fb5ef..a15b80cf 100644 --- a/src/app/driver/imd/none/no-imd.h +++ b/src/app/driver/imd/none/no-imd.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,12 @@ * @file no-imd.h * @author foxBMS Team * @date 2020-11-20 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix NONE * * @brief Header for the driver for the dummy insulation monitoring - * * @details This header provides the wrappers to make the static * implementations of the IMD functionalities available in the unit * tests. diff --git a/src/app/driver/imd/none/wscript b/src/app/driver/imd/none/wscript old mode 100644 new mode 100755 index a8bbfe1e..83d611ba --- a/src/app/driver/imd/none/wscript +++ b/src/app/driver/imd/none/wscript @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause diff --git a/src/app/driver/imd/wscript b/src/app/driver/imd/wscript old mode 100644 new mode 100755 index 50135676..420df41b --- a/src/app/driver/imd/wscript +++ b/src/app/driver/imd/wscript @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause diff --git a/src/app/driver/interlock/interlock.c b/src/app/driver/interlock/interlock.c index 2a42902d..ace5235f 100644 --- a/src/app/driver/interlock/interlock.c +++ b/src/app/driver/interlock/interlock.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file interlock.c * @author foxBMS Team * @date 2020-02-24 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix ILCK * @@ -82,9 +82,9 @@ /** * Saves the last state and the last substate */ -#define ILCK_SAVELASTSTATES() \ - ilck_state.laststate = ilck_state.state; \ - ilck_state.lastsubstate = ilck_state.substate +#define ILCK_SAVE_LAST_STATES() \ + ilck_state.lastState = ilck_state.state; \ + ilck_state.lastSubstate = ilck_state.substate /*========== Static Constant and Variable Definitions =======================*/ /** @@ -95,8 +95,8 @@ static ILCK_STATE_s ilck_state = { .statereq = ILCK_STATE_NO_REQUEST, .state = ILCK_STATEMACHINE_UNINITIALIZED, .substate = ILCK_ENTRY, - .laststate = ILCK_STATEMACHINE_UNINITIALIZED, - .lastsubstate = ILCK_ENTRY, + .lastState = ILCK_STATEMACHINE_UNINITIALIZED, + .lastSubstate = ILCK_ENTRY, .triggerentry = 0, .ErrRequestCounter = 0, .counter = 0, @@ -287,7 +287,7 @@ void ILCK_Trigger(void) { /* waiting for Initialization Request */ statereq = ILCK_TransferStateRequest(); if (statereq == ILCK_STATE_INITIALIZATION_REQUEST) { - ILCK_SAVELASTSTATES(); + ILCK_SAVE_LAST_STATES(); ILCK_InitializePins(); ilck_state.timer = ILCK_STATEMACH_SHORTTIME; ilck_state.state = ILCK_STATEMACHINE_INITIALIZED; @@ -301,7 +301,7 @@ void ILCK_Trigger(void) { /****************************INITIALIZED*************************************/ case ILCK_STATEMACHINE_INITIALIZED: - ILCK_SAVELASTSTATES(); + ILCK_SAVE_LAST_STATES(); ilck_state.timer = ILCK_STATEMACH_SHORTTIME; interlockState = ILCK_GetInterlockFeedback(); if (interlockState == ILCK_SWITCH_ON) { diff --git a/src/app/driver/interlock/interlock.h b/src/app/driver/interlock/interlock.h index 3c163a00..1354dea5 100644 --- a/src/app/driver/interlock/interlock.h +++ b/src/app/driver/interlock/interlock.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file interlock.h * @author foxBMS Team * @date 2020-02-24 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix ILCK * * @brief Headers for the driver for the interlock. - * + * @details TODO */ #ifndef FOXBMS__INTERLOCK_H_ @@ -106,8 +106,8 @@ typedef struct { ILCK_STATE_REQUEST_e statereq; /*!< current state request made to the state machine */ ILCK_STATEMACH_e state; /*!< state of Driver State Machine */ ILCK_STATEMACH_SUB_e substate; /*!< current substate of the state machine */ - ILCK_STATEMACH_e laststate; /*!< previous state of the state machine */ - ILCK_STATEMACH_SUB_e lastsubstate; /*!< previous substate of the state machine */ + ILCK_STATEMACH_e lastState; /*!< previous state of the state machine */ + ILCK_STATEMACH_SUB_e lastSubstate; /*!< previous substate of the state machine */ uint32_t ErrRequestCounter; /*!< counts the number of illegal requests to the LTC state machine */ uint8_t triggerentry; /*!< counter for re-entrance protection (function running flag) */ uint8_t counter; /*!< general purpose counter */ diff --git a/src/app/driver/io/io.c b/src/app/driver/io/io.c index f6f0f7b7..d299717f 100644 --- a/src/app/driver/io/io.c +++ b/src/app/driver/io/io.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,14 +43,13 @@ * @file io.c * @author foxBMS Team * @date 2020-06-05 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix IO * * @brief Driver for the IO module - * - * + * @details TODO */ /*========== Includes =======================================================*/ diff --git a/src/app/driver/io/io.h b/src/app/driver/io/io.h index c661738e..8e6ea520 100644 --- a/src/app/driver/io/io.h +++ b/src/app/driver/io/io.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,12 @@ * @file io.h * @author foxBMS Team * @date 2020-03-19 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix IO * * @brief Header for the driver for the IO module - * * @details TODO */ diff --git a/src/app/driver/led/led.c b/src/app/driver/led/led.c index dbfa37a9..107dc5dc 100644 --- a/src/app/driver/led/led.c +++ b/src/app/driver/led/led.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file led.c * @author foxBMS Team * @date 2021-09-28 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix LED * * @brief Implementation of the debug LED driver - * + * @details TODO */ /*========== Includes =======================================================*/ diff --git a/src/app/driver/led/led.h b/src/app/driver/led/led.h index ab7d3ac2..9b0ede2b 100644 --- a/src/app/driver/led/led.h +++ b/src/app/driver/led/led.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file led.h * @author foxBMS Team * @date 2021-09-28 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix LED * diff --git a/src/app/driver/mcu/mcu.c b/src/app/driver/mcu/mcu.c index 05c4a841..720c589e 100644 --- a/src/app/driver/mcu/mcu.c +++ b/src/app/driver/mcu/mcu.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file mcu.c * @author foxBMS Team * @date 2019-02-19 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix MCU * * @brief Driver for the MCU module. - * + * @details TODO */ /*========== Includes =======================================================*/ @@ -68,15 +68,15 @@ */ #define MCU_RTI_CNT0_CPUC0_REG (0x00000001u) -/** threshold in order to limit the time spent in wait to avoid livelock in wait */ +/** threshold in order to limit the time spent in wait to avoid live lock in wait */ #define MCU_US_WAIT_TIMEOUT (10000u) /*========== Static Constant and Variable Definitions =======================*/ /** * @brief frequency of the FRC0 counter - * @details refer to data sheet SPNU563A-March 2018 p. 585 formula 23 + * @details refer to data sheet docref: SPNU563A-March 2018 p. 585 formula 23 */ -static const uint32_t mcu_frcClock_Hz = (uint32_t)((RTI_FREQ)*1000000.0f) / ((MCU_RTI_CNT0_CPUC0_REG) + 1u); +static const uint32_t mcu_frcClock_Hz = (uint32_t)((RTI_FREQ) * 1000000.0f) / ((MCU_RTI_CNT0_CPUC0_REG) + 1u); /*========== Extern Constant and Variable Definitions =======================*/ diff --git a/src/app/driver/mcu/mcu.h b/src/app/driver/mcu/mcu.h index 5541eb6a..4a163177 100644 --- a/src/app/driver/mcu/mcu.h +++ b/src/app/driver/mcu/mcu.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file mcu.h * @author foxBMS Team * @date 2019-02-19 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix MCU * * @brief Headers for the driver for the MCU module. - * + * @details TODO */ #ifndef FOXBMS__MCU_H_ @@ -65,7 +65,7 @@ * @brief largest pin number that exists in TMS570LC4357 * @details Checked in the data sheet spnu563a: The largest pin number that is * used is 31. -*/ + */ #define MCU_LARGEST_PIN_NUMBER (31u) /** diff --git a/src/app/driver/meas/meas.c b/src/app/driver/meas/meas.c index 37080a4f..bd9498c0 100644 --- a/src/app/driver/meas/meas.c +++ b/src/app/driver/meas/meas.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file meas.c * @author foxBMS Team * @date 2020-02-24 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix MEAS * diff --git a/src/app/driver/meas/meas.h b/src/app/driver/meas/meas.h index bc2a9716..75bf0566 100644 --- a/src/app/driver/meas/meas.h +++ b/src/app/driver/meas/meas.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,14 +43,13 @@ * @file meas.h * @author foxBMS Team * @date 2020-02-24 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix MEAS * * @brief Headers for the driver for the measurements needed by the BMS * (e.g., I,V,T). - * * @details TODO */ diff --git a/src/app/driver/pex/pex.c b/src/app/driver/pex/pex.c index 8687cefb..d4222c6d 100644 --- a/src/app/driver/pex/pex.c +++ b/src/app/driver/pex/pex.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file pex.c * @author foxBMS Team * @date 2021-08-02 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix PEX * @@ -78,7 +78,7 @@ /** Address of Output Port 0 register (port 1 is one higher, 0x3u) */ #define PEX_OUTPUT_PORT0_REGISTER_ADDRESS (0x2u) /** Address of Polarity Inversion Port 0 register (port 1 is one higher, 0x5u) */ -#define PEX_POL_INV_PORT0_REGISTER_ADDRESS (0x4u) +#define PEX_POL_INVERSION_PORT0_REGISTER_ADDRESS (0x4u) /** Address of Configuration Port 0 register (port 1 is one higher, 0x7u) */ #define PEX_DIRECTION_PORT0_REGISTER_ADDRESS (0x6u) @@ -202,7 +202,7 @@ static STD_RETURN_TYPE_e PEX_WriteOutputs(void) { STD_RETURN_TYPE_e retVal = STD_OK; for (uint8_t i = 0u; i < PEX_NR_OF_PORT_EXPANDERS; i++) { /** - * Outport Port 0 as address, next read register will be Output Port 1 + * Out-port Port 0 as address, next read register will be Output Port 1 * data sheet: Rev. 9 - 8 November 2017 * Figure 10: one register pair can be written in one transaction */ @@ -225,7 +225,7 @@ static STD_RETURN_TYPE_e PEX_WriteConfigPolarity(void) { * data sheet: Rev. 9 - 8 November 2017 * Figure 10: one register pair can be written in one transaction */ - pex_i2cDataWrite[0u] = PEX_POL_INV_PORT0_REGISTER_ADDRESS; + pex_i2cDataWrite[0u] = PEX_POL_INVERSION_PORT0_REGISTER_ADDRESS; pex_i2cDataWrite[1u] = pex_configPolarityPort0Local[i]; pex_i2cDataWrite[2u] = pex_configPolarityPort1Local[i]; STD_RETURN_TYPE_e i2cWriteReturn = I2C_WriteDma(PEX_I2C_INTERFACE, pex_addressList[i], 3u, pex_i2cDataWrite); @@ -240,8 +240,8 @@ static STD_RETURN_TYPE_e PEX_WriteConfigDirection(void) { STD_RETURN_TYPE_e retVal = STD_OK; for (uint8_t i = 0u; i < PEX_NR_OF_PORT_EXPANDERS; i++) { /** - * Direction Port 0 as address, next read register will be Direction Port 1 - * data sheet: Rev. 9 - 8 November 2017 + * Direction Port 0 as address, next read register will be Direction + * Port 1 data sheet: Rev. 9 - 8 November 2017 * Figure 10: one register pair can be written in one transaction */ pex_i2cDataWrite[0u] = PEX_DIRECTION_PORT0_REGISTER_ADDRESS; @@ -335,13 +335,13 @@ extern void PEX_Trigger(void) { extern void PEX_SetPin(uint8_t portExpander, uint8_t pin) { FAS_ASSERT(portExpander < PEX_NR_OF_PORT_EXPANDERS); - FAS_ASSERT(pin <= PEX_PIN17); + FAS_ASSERT(pin <= PEX_PORT_1_PIN_7); - if (pin <= PEX_PIN07) { + if (pin <= PEX_PORT_0_PIN_7) { OS_EnterTaskCritical(); pex_outputPort0[portExpander] |= PEX_PIN_HIGH << pin; OS_ExitTaskCritical(); - } else { /* pin is in range PEX_PIN10 to PEX_PIN17 */ + } else { /* pin is in range PEX_PORT_1_PIN_0 to PEX_PORT_1_PIN_7 */ OS_EnterTaskCritical(); pex_outputPort1[portExpander] |= PEX_PIN_HIGH << (pin % PEX_NR_OF_PORTS_PER_REGISTER); OS_ExitTaskCritical(); @@ -350,13 +350,13 @@ extern void PEX_SetPin(uint8_t portExpander, uint8_t pin) { extern void PEX_ResetPin(uint8_t portExpander, uint8_t pin) { FAS_ASSERT(portExpander < PEX_NR_OF_PORT_EXPANDERS); - FAS_ASSERT(pin <= PEX_PIN17); + FAS_ASSERT(pin <= PEX_PORT_1_PIN_7); - if (pin <= PEX_PIN07) { + if (pin <= PEX_PORT_0_PIN_7) { OS_EnterTaskCritical(); pex_outputPort0[portExpander] &= ~(PEX_PIN_HIGH << pin); OS_ExitTaskCritical(); - } else { /* pin is in range PEX_PIN10 to PEX_PIN17 */ + } else { /* pin is in range PEX_PORT_1_PIN_0 to PEX_PORT_1_PIN_7 */ OS_EnterTaskCritical(); pex_outputPort1[portExpander] &= ~(PEX_PIN_HIGH << (pin % PEX_NR_OF_PORTS_PER_REGISTER)); OS_ExitTaskCritical(); @@ -365,15 +365,15 @@ extern void PEX_ResetPin(uint8_t portExpander, uint8_t pin) { extern uint8_t PEX_GetPin(uint8_t portExpander, uint8_t pin) { FAS_ASSERT(portExpander < PEX_NR_OF_PORT_EXPANDERS); - FAS_ASSERT(pin <= PEX_PIN17); + FAS_ASSERT(pin <= PEX_PORT_1_PIN_7); uint8_t pinState = UINT8_MAX; - if (pin <= PEX_PIN07) { + if (pin <= PEX_PORT_0_PIN_7) { OS_EnterTaskCritical(); pinState = (pex_inputPort0[portExpander] >> pin) & 0x1u; OS_ExitTaskCritical(); - } else { /* pin is in range PEX_PIN10 to PEX_PIN17 */ + } else { /* pin is in range PEX_PORT_1_PIN_0 to PEX_PORT_1_PIN_7 */ OS_EnterTaskCritical(); pinState = (pex_inputPort1[portExpander] >> (pin % PEX_NR_OF_PORTS_PER_REGISTER)) & 0x1u; OS_ExitTaskCritical(); @@ -393,13 +393,13 @@ extern uint8_t PEX_GetPin(uint8_t portExpander, uint8_t pin) { extern void PEX_SetPinDirectionInput(uint8_t portExpander, uint8_t pin) { FAS_ASSERT(portExpander < PEX_NR_OF_PORT_EXPANDERS); - FAS_ASSERT(pin <= PEX_PIN17); + FAS_ASSERT(pin <= PEX_PORT_1_PIN_7); - if (pin <= PEX_PIN07) { + if (pin <= PEX_PORT_0_PIN_7) { OS_EnterTaskCritical(); pex_configDirectionPort0[portExpander] |= PEX_PIN_DIRECTION_INPUT << pin; OS_ExitTaskCritical(); - } else { /* pin is in range PEX_PIN10 to PEX_PIN17 */ + } else { /* pin is in range PEX_PORT_1_PIN_0 to PEX_PORT_1_PIN_7 */ OS_EnterTaskCritical(); pex_configDirectionPort1[portExpander] |= PEX_PIN_DIRECTION_INPUT << (pin % PEX_NR_OF_PORTS_PER_REGISTER); OS_ExitTaskCritical(); @@ -408,13 +408,13 @@ extern void PEX_SetPinDirectionInput(uint8_t portExpander, uint8_t pin) { extern void PEX_SetPinDirectionOutput(uint8_t portExpander, uint8_t pin) { FAS_ASSERT(portExpander < PEX_NR_OF_PORT_EXPANDERS); - FAS_ASSERT(pin <= PEX_PIN17); + FAS_ASSERT(pin <= PEX_PORT_1_PIN_7); - if (pin <= PEX_PIN07) { + if (pin <= PEX_PORT_0_PIN_7) { OS_EnterTaskCritical(); pex_configDirectionPort0[portExpander] &= ~(((~PEX_PIN_DIRECTION_OUTPUT) & 0x1u) << pin); OS_ExitTaskCritical(); - } else { /* pin is in range PEX_PIN10 to PEX_PIN17 */ + } else { /* pin is in range PEX_PORT_1_PIN_0 to PEX_PORT_1_PIN_7 */ OS_EnterTaskCritical(); pex_configDirectionPort1[portExpander] &= ~(((~PEX_PIN_DIRECTION_OUTPUT) & 0x1u) << (pin % PEX_NR_OF_PORTS_PER_REGISTER)); @@ -424,13 +424,13 @@ extern void PEX_SetPinDirectionOutput(uint8_t portExpander, uint8_t pin) { extern void PEX_SetPinPolarityInverted(uint8_t portExpander, uint8_t pin) { FAS_ASSERT(portExpander < PEX_NR_OF_PORT_EXPANDERS); - FAS_ASSERT(pin <= PEX_PIN17); + FAS_ASSERT(pin <= PEX_PORT_1_PIN_7); - if (pin <= PEX_PIN07) { + if (pin <= PEX_PORT_0_PIN_7) { OS_EnterTaskCritical(); pex_configPolarityPort0[portExpander] |= PEX_PIN_POLARITY_INVERTED << pin; OS_ExitTaskCritical(); - } else { /* pin is in range PEX_PIN10 to PEX_PIN17 */ + } else { /* pin is in range PEX_PORT_1_PIN_0 to PEX_PORT_1_PIN_7 */ OS_EnterTaskCritical(); pex_configPolarityPort1[portExpander] |= PEX_PIN_POLARITY_INVERTED << (pin % PEX_NR_OF_PORTS_PER_REGISTER); OS_ExitTaskCritical(); @@ -439,13 +439,13 @@ extern void PEX_SetPinPolarityInverted(uint8_t portExpander, uint8_t pin) { extern void PEX_SetPinPolarityRetained(uint8_t portExpander, uint8_t pin) { FAS_ASSERT(portExpander < PEX_NR_OF_PORT_EXPANDERS); - FAS_ASSERT(pin <= PEX_PIN17); + FAS_ASSERT(pin <= PEX_PORT_1_PIN_7); - if (pin <= PEX_PIN07) { + if (pin <= PEX_PORT_0_PIN_7) { OS_EnterTaskCritical(); pex_configPolarityPort0[portExpander] &= ~(((~PEX_PIN_POLARITY_RETAINED) & 0x1u) << pin); OS_ExitTaskCritical(); - } else { /* pin is in range PEX_PIN10 to PEX_PIN17 */ + } else { /* pin is in range PEX_PORT_1_PIN_0 to PEX_PORT_1_PIN_7 */ OS_EnterTaskCritical(); pex_configPolarityPort1[portExpander] &= ~(((~PEX_PIN_POLARITY_RETAINED) & 0x1u) << (pin % PEX_NR_OF_PORTS_PER_REGISTER)); @@ -455,4 +455,11 @@ extern void PEX_SetPinPolarityRetained(uint8_t portExpander, uint8_t pin) { /*========== Externalized Static Function Implementations (Unit Test) =======*/ #ifdef UNITY_UNIT_TEST +extern STD_RETURN_TYPE_e TEST_PEX_WriteConfigPolarity(void) { + return PEX_WriteConfigPolarity(); +} +extern STD_RETURN_TYPE_e TEST_PEX_WriteConfigDirection(void) { + return PEX_WriteConfigDirection(); +} + #endif diff --git a/src/app/driver/pex/pex.h b/src/app/driver/pex/pex.h index 7977785c..51cebed3 100644 --- a/src/app/driver/pex/pex.h +++ b/src/app/driver/pex/pex.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file pex.h * @author foxBMS Team * @date 2021-08-02 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix PEX * @@ -139,6 +139,8 @@ extern void PEX_Trigger(void); /*========== Externalized Static Functions Prototypes (Unit Test) ===========*/ #ifdef UNITY_UNIT_TEST +extern STD_RETURN_TYPE_e TEST_PEX_WriteConfigPolarity(void); +extern STD_RETURN_TYPE_e TEST_PEX_WriteConfigDirection(void); #endif #endif /* FOXBMS__PEX_H_ */ diff --git a/src/app/driver/pwm/pwm.c b/src/app/driver/pwm/pwm.c index 1e70bacc..a7ff2d0a 100644 --- a/src/app/driver/pwm/pwm.c +++ b/src/app/driver/pwm/pwm.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file pwm.c * @author foxBMS Team * @date 2021-10-07 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix PWM * diff --git a/src/app/driver/pwm/pwm.h b/src/app/driver/pwm/pwm.h index c21da2fc..506ccaee 100644 --- a/src/app/driver/pwm/pwm.h +++ b/src/app/driver/pwm/pwm.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file pwm.h * @author foxBMS Team * @date 2021-10-07 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix PWM * diff --git a/src/app/driver/rtc/rtc.c b/src/app/driver/rtc/rtc.c index 61001394..19639b73 100644 --- a/src/app/driver/rtc/rtc.c +++ b/src/app/driver/rtc/rtc.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file rtc.c * @author foxBMS Team * @date 2021-02-22 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix RTC * @@ -64,7 +64,7 @@ #include "i2c.h" #include -/* AXIVION Disable Style MisraC2012-21.10: Time implementation is suitable fpr the application */ +/* AXIVION Disable Style MisraC2012-21.10: Time implementation is suitable for the application */ #include /*========== Macros and Definitions =========================================*/ @@ -94,30 +94,78 @@ static RTC_SYSTEM_TIMER_EPOCH_s rtc_SystemTime = {0}; /*========== Static Function Prototypes =====================================*/ /** - * @brief Reads the time from the RTC IC. + * @brief Reads the time from the RTC IC * @details This function reads the time from the RTC IC over I2C. * @return RTC time read from the RTC IC */ static RTC_TIME_DATA_s RTC_ReadTime(void); +/** + * @brief Write the time to the RTC IC + * @details This function writes the time to the RTC IC over I2C. + * @param rtcTime RTC time to write to the IC + */ static void RTC_WriteTime(RTC_TIME_DATA_s rtcTime); + +/** + * @brief Check if a CAN message was received to set the RTC time + * @details When a CAN message to set the RTC time is received, it is written + * in the dedicated queue. This function check if an element is + * present in the queue. If yes, the time is first written to the RTC + * IC over I2C, then to the RTC system timer. + * + */ static void RTC_SetOverCanMessage(void); + +/** + * @brief Adjust RTC system timer with time from RTC IC + * @details The time is read from the RTC IC and compared to the RTC system + * timer. If the difference is greater than the limit, the RTC system + * timer is adjusted. + */ static void RTC_AdjustTime(void); + +/** + * @brief Read bit for battery voltage low flag + */ static void RTC_CheckBatteryLowVoltageAlert(void); +/** + * @brief Set the RTC system timer value + * @details This function sets the timer value directly. It is called by + * RTC_SetSystemTimeRtcFormat() which takes a RTC_TIME_DATA_s + * parameter as input. + * @param timeEpochFormat RTC system timer value to set, main value in + * seconds + * @param milliseconds RTC system timer value to set, secondary value in + * milliseconds + */ static void RTC_SetSystemTimeEpochFormat(time_t timeEpochFormat, uint16_t milliseconds); + +/** + * @brief Get the RTC system timer value + * @details This function gets the timer value directly. It is called by + * RTC_GetSystemTimeRtcFormat() which returns a RTC_TIME_DATA_s + * parameter. + * @return RTC system timer value in seconds since epoch format + */ static RTC_SYSTEM_TIMER_EPOCH_s RTC_GetSystemTimeEpochFormat(void); +/** + * @brief Convert time from RTC_TIME_DATA_s to struct tm format + * @param timeRtcFormat time in RTC_TIME_DATA_s format + * @return time in struct tm format + */ static struct tm RTC_rtcFormatToTmFormat(RTC_TIME_DATA_s timeRtcFormat); -static RTC_TIME_DATA_s RTC_tmFormatToRtcFormat(struct tm timeTmFormat); - -/*========== Static Function Implementations ================================*/ /** - * @brief Write the time to the RTC IC. - * @details This function writes the time to the RTC IC over I2C. - * @param rtcTime RTC time to write to the IC + * @brief Convert time from struct tm to RTC_TIME_DATA_s format + * @param timeTmFormat time in struct tm format + * @return time in RTC_TIME_DATA_s format */ +static RTC_TIME_DATA_s RTC_tmFormatToRtcFormat(struct tm timeTmFormat); + +/*========== Static Function Implementations ================================*/ static void RTC_WriteTime(RTC_TIME_DATA_s rtcTime) { /* AXIVION Routine Generic-MissingParameterAssert: rtcTime: parameter accepts whole range */ STD_RETURN_TYPE_e retValI2c = STD_OK; @@ -183,15 +231,6 @@ static void RTC_WriteTime(RTC_TIME_DATA_s rtcTime) { } } -/** - * @brief Check if a CAN message was received to set the RTC time. - * - * When a CAN message to set the RTC time is received, it is written - * in the dedicated queue. This function check if an element is present - * in the queue. If yes, the time is first written to the RTC IC over - * I2C, then to the RTC system timer. - * - */ static void RTC_SetOverCanMessage(void) { RTC_TIME_DATA_s rtc_time = {0}; @@ -203,13 +242,6 @@ static void RTC_SetOverCanMessage(void) { } } -/** - * @brief Adjust RTC system timer with time from RTC IC. - * - * The time is read from the RTC IC and compared to the - * RTC system timer. If the difference is greater than the - * limit, the RTC system timer is adjusted. - */ static void RTC_AdjustTime(void) { RTC_TIME_DATA_s rtcTimeFromTimerRtcFormat = {0}; RTC_TIME_DATA_s rtcTimeFromIcRtcFormat = {0}; @@ -236,13 +268,10 @@ static void RTC_AdjustTime(void) { } } -/** - * @brief Read bit for battery voltage low flag. - */ static void RTC_CheckBatteryLowVoltageAlert(void) { STD_RETURN_TYPE_e retValI2c = STD_OK; STD_RETURN_TYPE_e retVal = STD_OK; - uint8_t blfBit = 0u; /* Battery Low Flag (BLF) */ + uint8_t batteryLowFlag = 0u; /* Battery Low Flag */ /* Set address to read from */ rtc_i2cWriteBuffer[0u] = RTC_REG_CONTROL_3_ADDR; @@ -257,14 +286,15 @@ static void RTC_CheckBatteryLowVoltageAlert(void) { } /* OSF bit is stored at position 7 in seconds register */ - blfBit = (rtc_i2cReadBuffer[0u] & RTC_CTRL3_BATTERY_LOW_FLAG_BIT_MASK) >> RTC_CTRL3_BATTERY_LOW_FLAG_BIT_POSITION; + batteryLowFlag = (rtc_i2cReadBuffer[0u] & RTC_CTRL3_BATTERY_LOW_FLAG_BIT_MASK) >> + RTC_CTRL3_BATTERY_LOW_FLAG_BIT_POSITION; if (retVal == STD_NOT_OK) { DIAG_Handler(DIAG_ID_I2C_RTC_ERROR, DIAG_EVENT_NOT_OK, DIAG_SYSTEM, 0u); } else { DIAG_Handler(DIAG_ID_I2C_RTC_ERROR, DIAG_EVENT_OK, DIAG_SYSTEM, 0u); - /* If I2C communication successful, check BLF bit */ - if (blfBit != 0u) { + /* If I2C communication successful, check Battery Low Flag bit */ + if (batteryLowFlag != 0u) { DIAG_Handler(DIAG_ID_RTC_BATTERY_LOW_ERROR, DIAG_EVENT_NOT_OK, DIAG_SYSTEM, 0u); } else { DIAG_Handler(DIAG_ID_RTC_BATTERY_LOW_ERROR, DIAG_EVENT_OK, DIAG_SYSTEM, 0u); @@ -272,16 +302,6 @@ static void RTC_CheckBatteryLowVoltageAlert(void) { } } -/** - * @brief Set the RTC system timer value. - * - * This function sets the timer value directly. - * It is called by RTC_SetSystemTimeRtcFormat() which - * takes a RTC_TIME_DATA_s parameter as input. - * - * @param timeEpochFormat RTC system timer value to set, main value in seconds - * @param milliseconds RTC system timer value to set, secondary value in milliseconds - */ static void RTC_SetSystemTimeEpochFormat(time_t timeEpochFormat, uint16_t milliseconds) { OS_EnterTaskCritical(); rtc_SystemTime.secondsSinceEpoch = timeEpochFormat; @@ -289,15 +309,6 @@ static void RTC_SetSystemTimeEpochFormat(time_t timeEpochFormat, uint16_t millis OS_ExitTaskCritical(); } -/** - * @brief Get the RTC system timer value. - * - * This function gets the timer value directly. - * It is called by RTC_GetSystemTimeRtcFormat() which - * returns a RTC_TIME_DATA_s parameter. - * - * @return RTC system timer value in seconds since epoch format - */ static RTC_SYSTEM_TIMER_EPOCH_s RTC_GetSystemTimeEpochFormat(void) { RTC_SYSTEM_TIMER_EPOCH_s systemTimerValueEpoch = {0}; OS_EnterTaskCritical(); @@ -306,12 +317,6 @@ static RTC_SYSTEM_TIMER_EPOCH_s RTC_GetSystemTimeEpochFormat(void) { return systemTimerValueEpoch; } -/** - * @brief Convert time from RTC_TIME_DATA_s to struct tm format. - * - * @param timeRtcFormat time in RTC_TIME_DATA_s format - * @return time in struct tm format - */ static struct tm RTC_rtcFormatToTmFormat(RTC_TIME_DATA_s timeRtcFormat) { struct tm timeTmFormat = {0}; @@ -326,12 +331,6 @@ static struct tm RTC_rtcFormatToTmFormat(RTC_TIME_DATA_s timeRtcFormat) { return timeTmFormat; } -/** - * @brief Convert time from struct tm to RTC_TIME_DATA_s format. - * - * @param timeTmFormat time in struct tm format - * @return time in RTC_TIME_DATA_s format - */ static RTC_TIME_DATA_s RTC_tmFormatToRtcFormat(struct tm timeTmFormat) { RTC_TIME_DATA_s timeRtcFormat = {0}; @@ -360,7 +359,7 @@ static RTC_TIME_DATA_s RTC_ReadTime(void) { retVal = STD_NOT_OK; } /* Address set, read time data */ - retValI2c = I2C_ReadDma(RTC_I2C_INTERFACE, RTC_I2C_ADDRESS, RTC_NUMBER_OF_TIMEDATA_BYTES, rtc_i2cReadBuffer); + retValI2c = I2C_ReadDma(RTC_I2C_INTERFACE, RTC_I2C_ADDRESS, RTC_NUMBER_OF_TIME_DATA_BYTES, rtc_i2cReadBuffer); if (retValI2c == STD_NOT_OK) { retVal = STD_NOT_OK; } @@ -425,7 +424,7 @@ extern void RTC_Trigger(void) { RTC_SetOverCanMessage(); /* Check battery low */ if ((currentTime - initialTimeBatteryLowCheck) >= - (RTC_TIME_BETWEEN_BLF_FLAG_CHECK_min * RTC_FACTOR_MIN_TO_MS)) { + (RTC_TIME_BETWEEN_BATTERY_LOW_FLAG_CHECK_min * RTC_FACTOR_MIN_TO_MS)) { RTC_CheckBatteryLowVoltageAlert(); initialTimeBatteryLowCheck = OS_GetTickCount(); } @@ -451,17 +450,17 @@ extern STD_RETURN_TYPE_e RTC_Initialize(void) { switch (rtcInitState) { case RTC_SET_SYSTEM_TIMER: RTC_InitializeSystemTimeWithRtc(); - rtcInitState = RTC_SET_BLF; + rtcInitState = RTC_SET_BATTERY_LOW_FLAG; OS_DelayTaskUntil(¤tTime, 2u); break; - case RTC_SET_BLF: - /* Write PWRMNG bits */ + case RTC_SET_BATTERY_LOW_FLAG: + /* Write POWER_MANAGE bits */ /* Set address to write to */ rtc_i2cWriteBuffer[0u] = RTC_REG_CONTROL_3_ADDR; /* Set data to write, to activate direct switching mode and battery low detection */ rtc_i2cWriteBuffer[1u] = 0u; - rtc_i2cWriteBuffer[1u] |= ((uint8_t)RTC_CTRL3_PWRMNG_DIRECTSWITCH_LOWDETECTIONENABLE_MODE) - << RTC_CTRL3_BATTERY_PWRMNG_BITS_POSITION; + rtc_i2cWriteBuffer[1u] |= ((uint8_t)RTC_CTRL3_POWER_MANAGE_DIRECT_SWITCH_LOW_DETECTION_ENABLE_MODE) + << RTC_CTRL3_BATTERY_POWER_MANAGE_BITS_POSITION; retValI2c = I2C_WriteDma( RTC_I2C_INTERFACE, RTC_I2C_ADDRESS, diff --git a/src/app/driver/rtc/rtc.h b/src/app/driver/rtc/rtc.h index fdd9be13..51a9a0b7 100644 --- a/src/app/driver/rtc/rtc.h +++ b/src/app/driver/rtc/rtc.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file rtc.h * @author foxBMS Team * @date 2021-02-22 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix RTC * @@ -96,16 +96,16 @@ typedef struct { /* Defines for the RTC control_3 register */ /**@{*/ -#define RTC_REG_CONTROL_3_ADDR (0x02u) -#define RTC_CTRL3_BATTERY_PWRMNG_BITS_MASK (0xE0u) -#define RTC_CTRL3_BATTERY_PWRMNG_BITS_POSITION (5u) -#define RTC_CTRL3_BATTERY_LOW_FLAG_BIT_MASK (0x04u) -#define RTC_CTRL3_BATTERY_LOW_FLAG_BIT_POSITION (2u) +#define RTC_REG_CONTROL_3_ADDR (0x02u) +#define RTC_CTRL3_BATTERY_POWER_MANAGE_BITS_MASK (0xE0u) +#define RTC_CTRL3_BATTERY_POWER_MANAGE_BITS_POSITION (5u) +#define RTC_CTRL3_BATTERY_LOW_FLAG_BIT_MASK (0x04u) +#define RTC_CTRL3_BATTERY_LOW_FLAG_BIT_POSITION (2u) /**@}*/ /* Power management configuration value to switch to battery voltage and monitor battery voltage */ -#define RTC_CTRL3_PWRMNG_DIRECTSWITCH_LOWDETECTIONENABLE_MODE (0x03u) +#define RTC_CTRL3_POWER_MANAGE_DIRECT_SWITCH_LOW_DETECTION_ENABLE_MODE (0x03u) /* Defines for the RTC CLKOUT_ctl register */ /**@{*/ @@ -142,7 +142,7 @@ typedef struct { /**@}*/ /* Number of bytes needed to store all the RTC time data */ -#define RTC_NUMBER_OF_TIMEDATA_BYTES (8u) +#define RTC_NUMBER_OF_TIME_DATA_BYTES (8u) /* Defines to access time data for ten's place */ /**@{*/ @@ -168,7 +168,7 @@ typedef struct { /* Defines for the C library time */ /**@{*/ -#define RTC_CTIME_YEAR_START (1900) +#define RTC_CTIME_YEAR_START (1970) #define RTC_CTIME_MONTH_START (1) /**@}*/ @@ -179,12 +179,12 @@ typedef struct { /* Time interval between two comparisons between RTC timer and RTC IC */ #define RTC_TIME_BETWEEN_RTC_TIMER_ADJUSTMENT_min (60u) /* Time interval between two check of the battery low flag */ -#define RTC_TIME_BETWEEN_BLF_FLAG_CHECK_min (10u) +#define RTC_TIME_BETWEEN_BATTERY_LOW_FLAG_CHECK_min (10u) /** States for the OTPR procedure */ typedef enum { RTC_SET_SYSTEM_TIMER, - RTC_SET_BLF, + RTC_SET_BATTERY_LOW_FLAG, RTC_CLEAR_OTPR, RTC_WAIT_CLEAR_OTPR, RTC_OTPR_CLEARED, diff --git a/src/app/driver/sbc/fs8x_driver/sbc_fs8x.c b/src/app/driver/sbc/fs8x_driver/sbc_fs8x.c index 990c0cdc..c47fccdb 100644 --- a/src/app/driver/sbc/fs8x_driver/sbc_fs8x.c +++ b/src/app/driver/sbc/fs8x_driver/sbc_fs8x.c @@ -36,7 +36,7 @@ * @date 9-Oct-2018 * @copyright Copyright (c) 2016 - 2018, NXP Semiconductors, Inc. * - * @updated 2020-03-18 (date of last update) + * @updated 2024-01-09 (date of last update) * Adapted driver to pass interface configuration as parameter into the * functions to enable the usage of multiple ICs in the system. */ diff --git a/src/app/driver/sbc/fs8x_driver/sbc_fs8x.h b/src/app/driver/sbc/fs8x_driver/sbc_fs8x.h index 8d7c1fd3..958d4d66 100644 --- a/src/app/driver/sbc/fs8x_driver/sbc_fs8x.h +++ b/src/app/driver/sbc/fs8x_driver/sbc_fs8x.h @@ -36,7 +36,7 @@ * @date 9-Oct-2018 * @copyright Copyright (c) 2016 - 2018, NXP Semiconductors, Inc. * - * @updated 2020-03-18 (date of last update) + * @updated 2024-01-09 (date of last update) * Adapted driver to pass interface configuration as parameter into the * functions to enable the usage of multiple ICs in the system. */ diff --git a/src/app/driver/sbc/fs8x_driver/sbc_fs8x_assert.h b/src/app/driver/sbc/fs8x_driver/sbc_fs8x_assert.h index 96ec0f70..ffbf4e7c 100644 --- a/src/app/driver/sbc/fs8x_driver/sbc_fs8x_assert.h +++ b/src/app/driver/sbc/fs8x_driver/sbc_fs8x_assert.h @@ -24,7 +24,7 @@ * @date 9-Oct-2018 * @copyright Copyright (c) 2016 - 2018, NXP Semiconductors, Inc. * - * @updated 2020-03-18 (date of last update) + * @updated 2024-01-09 (date of last update) * Adapted driver to pass interface configuration as parameter into the * functions to enable the usage of multiple ICs in the system. */ diff --git a/src/app/driver/sbc/fs8x_driver/sbc_fs8x_common.h b/src/app/driver/sbc/fs8x_driver/sbc_fs8x_common.h index 0017c1a3..a41f0361 100644 --- a/src/app/driver/sbc/fs8x_driver/sbc_fs8x_common.h +++ b/src/app/driver/sbc/fs8x_driver/sbc_fs8x_common.h @@ -40,7 +40,7 @@ * @date 9-Oct-2018 * @copyright Copyright (c) 2016 - 2018, NXP Semiconductors, Inc. * - * @updated 2020-03-18 (date of last update) + * @updated 2024-01-09 (date of last update) * Adapted driver to pass interface configuration as parameter into the * functions to enable the usage of multiple ICs in the system. */ diff --git a/src/app/driver/sbc/fs8x_driver/sbc_fs8x_communication.c b/src/app/driver/sbc/fs8x_driver/sbc_fs8x_communication.c index 77604cca..8316e508 100644 --- a/src/app/driver/sbc/fs8x_driver/sbc_fs8x_communication.c +++ b/src/app/driver/sbc/fs8x_driver/sbc_fs8x_communication.c @@ -36,7 +36,7 @@ * @date 9-Oct-2018 * @copyright Copyright (c) 2016 - 2018, NXP Semiconductors, Inc. * - * @updated 2020-03-18 (date of last update) + * @updated 2024-01-09 (date of last update) * Adapted driver to pass interface configuration as parameter into the * functions to enable the usage of multiple ICs in the system. */ diff --git a/src/app/driver/sbc/fs8x_driver/sbc_fs8x_communication.h b/src/app/driver/sbc/fs8x_driver/sbc_fs8x_communication.h index 9fe13a33..0d4564aa 100644 --- a/src/app/driver/sbc/fs8x_driver/sbc_fs8x_communication.h +++ b/src/app/driver/sbc/fs8x_driver/sbc_fs8x_communication.h @@ -36,7 +36,7 @@ * @date 9-Oct-2018 * @copyright Copyright (c) 2016 - 2018, NXP Semiconductors, Inc. * - * @updated 2020-03-18 (date of last update) + * @updated 2024-01-09 (date of last update) * Adapted driver to pass interface configuration as parameter into the * functions to enable the usage of multiple ICs in the system. */ diff --git a/src/app/driver/sbc/nxpfs85xx.c b/src/app/driver/sbc/nxpfs85xx.c index dcc4ec64..4801f09f 100644 --- a/src/app/driver/sbc/nxpfs85xx.c +++ b/src/app/driver/sbc/nxpfs85xx.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,15 +43,13 @@ * @file nxpfs85xx.c * @author foxBMS Team * @date 2020-03-18 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix FS85 * * @brief Driver for the FS85xx module - * * @details It must always be used when creating new c source files. - * */ /*========== Includes =======================================================*/ @@ -245,7 +243,7 @@ static STD_RETURN_TYPE_e FS85_PerformPathCheckFs0b(FS85_STATE_s *pInstance); * @brief Sends SBC to Standby Mode * @details Sets GOTOSTBY Bit on SBC via SPI. * @param pInstance SBC Instance to send to Standby -*/ + */ static STD_RETURN_TYPE_e FS85_GoToStandby(FS85_STATE_s *pInstance); /*========== Static Function Implementations ================================*/ @@ -586,7 +584,7 @@ extern STD_RETURN_TYPE_e FS85_InitializeFsPhase(FS85_STATE_s *pInstance) { The FS85 is now ready. If everything is OK for the MCU, it can release its own safety path and the ECU starts. - */ + */ /* --------------------- First: Verify --------------------------------- */ diff --git a/src/app/driver/sbc/nxpfs85xx.h b/src/app/driver/sbc/nxpfs85xx.h index e170a0fc..a00e3e8a 100644 --- a/src/app/driver/sbc/nxpfs85xx.h +++ b/src/app/driver/sbc/nxpfs85xx.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,15 +43,13 @@ * @file nxpfs85xx.h * @author foxBMS Team * @date 2020-03-18 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix FS85 * * @brief Header for the driver for the FRAM module - * * @details It must always be used when creating new c header files. - * */ #ifndef FOXBMS__NXPFS85XX_H_ diff --git a/src/app/driver/sbc/sbc.c b/src/app/driver/sbc/sbc.c index 3f497da2..63b00038 100644 --- a/src/app/driver/sbc/sbc.c +++ b/src/app/driver/sbc/sbc.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,15 +43,13 @@ * @file sbc.c * @author foxBMS Team * @date 2020-07-14 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix SBC * * @brief Driver for the SBC module - * * @details It must always be used when creating new c source files. - * */ /*========== Includes =======================================================*/ diff --git a/src/app/driver/sbc/sbc.h b/src/app/driver/sbc/sbc.h index ad30bc44..cf7e58e5 100644 --- a/src/app/driver/sbc/sbc.h +++ b/src/app/driver/sbc/sbc.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,15 +43,13 @@ * @file sbc.h * @author foxBMS Team * @date 2020-07-14 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix SBC * * @brief Header for the driver for the SBC module - * * @details It must always be used when creating new c header files. - * */ #ifndef FOXBMS__SBC_H_ diff --git a/src/app/driver/spi/spi.c b/src/app/driver/spi/spi.c index 8f614192..76a6f6df 100644 --- a/src/app/driver/spi/spi.c +++ b/src/app/driver/spi/spi.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file spi.c * @author foxBMS Team * @date 2019-12-12 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix SPI * * @brief Driver for the SPI module. - * + * @details TODO */ /*========== Includes =======================================================*/ @@ -70,7 +70,7 @@ #include /*========== Macros and Definitions =========================================*/ -/** Bitfield to check for transmission errors in SPI FLAG register */ +/** Bit field to check for transmission errors in SPI FLAG register */ #define SPI_FLAG_REGISTER_TRANSMISSION_ERRORS (0x5Fu) /*========== Static Constant and Variable Definitions =======================*/ @@ -88,8 +88,43 @@ static uint32_t spi_txLastWord[DMA_NUMBER_SPI_INTERFACES] = {0}; /*========== Extern Constant and Variable Definitions =======================*/ /*========== Static Function Prototypes =====================================*/ +/** + * @brief Initializes all chip selects of the SPI module + * @details This initialization includes SPI initialization of the + * - System Base Chip (SBC) + * - Ferroelectric Random Access Memory (FRAM) + * - Smart Power Switch (SPS) + * - and the specific AFE interface board. + */ static void SPI_InitializeChipSelects(void); + +/** + * @brief Initializes the chip selects of the SPI module that are specific + * for an AFE interface board + * @details This function is implemented several times for each support AFE + * family: + * - ADI + * - LTC + * - MXM + * - NXP + * - unit test (dummy implementation) + */ +static void SPI_InitializeChipSelectsAfe(uint8_t string); + +/** + * @brief Gets the chip select pin (independently whether it is a hard- or + * software chip selected one) + * @param chipSelectType typ of chip select (hard- or software) + * @param chipSelectPin number of the selected pin + * @return the mapped chip select pin + */ static uint8_t SPI_GetChipSelectPin(SPI_CHIP_SELECT_TYPE_e chipSelectType, uint32_t chipSelectPin); + +/** + * @brief Gets the hardware chip select pin + * @param chipSelectPin number of the selected pin + * @return the mapped chip select pin + */ static uint8_t SPI_GetHardwareChipSelectPin(uint8_t chipSelectPin); /*========== Static Function Implementations ================================*/ @@ -135,16 +170,78 @@ static uint8_t SPI_GetChipSelectPin(SPI_CHIP_SELECT_TYPE_e chipSelectType, uint3 return mappedChipSelectPin; } + +#if defined(FOXBMS_AFE_DRIVER_ADI) && (FOXBMS_AFE_DRIVER_ADI == 1) +static void SPI_InitializeChipSelectsAfe(uint8_t string) { + FAS_ASSERT(string < BS_NR_OF_STRINGS); + spi_adiInterface[string].pConfig->CSNR = + SPI_GetChipSelectPin(spi_adiInterface[string].csType, spi_adiInterface[string].csPin); +} +#endif + +#if defined(FOXBMS_AFE_DRIVER_DEBUG) && (FOXBMS_AFE_DRIVER_DEBUG == 1) +static void SPI_InitializeChipSelectsAfe(uint8_t string) { + FAS_ASSERT(string < BS_NR_OF_STRINGS); + (void)string; +} +#endif + +#if defined(FOXBMS_AFE_DRIVER_LTC) && (FOXBMS_AFE_DRIVER_LTC == 1) +static void SPI_InitializeChipSelectsAfe(uint8_t string) { + FAS_ASSERT(string < BS_NR_OF_STRINGS); + spi_ltcInterface[string].pConfig->CSNR = + SPI_GetChipSelectPin(spi_ltcInterface[string].csType, spi_ltcInterface[string].csPin); +} +#endif + +#if defined(FOXBMS_AFE_DRIVER_MAXIM) && (FOXBMS_AFE_DRIVER_MAXIM == 1) +static void SPI_InitializeChipSelectsAfe(uint8_t string) { + FAS_ASSERT(string < BS_NR_OF_STRINGS); + /* MAXIM driver does not support multistring, therefore ignore the parameter + for builds with more than one string */ + if (string == 0u) { + spi_mxmInterface.pConfig->CSNR = SPI_GetChipSelectPin(spi_mxmInterface.csType, spi_mxmInterface.csPin); + } +} +#endif + +#if defined(FOXBMS_AFE_DRIVER_NXP) && (FOXBMS_AFE_DRIVER_NXP == 1) +static void SPI_InitializeChipSelectsAfe(uint8_t string) { + FAS_ASSERT(string < BS_NR_OF_STRINGS); + spi_nxp775InterfaceTx[string].pConfig->CSNR = + SPI_GetChipSelectPin(spi_nxp775InterfaceTx[string].csType, spi_nxp775InterfaceTx[string].csPin); + spi_nxp775InterfaceRx[string].pConfig->CSNR = + SPI_GetChipSelectPin(spi_nxp775InterfaceRx[string].csType, spi_nxp775InterfaceRx[string].csPin); +} +#endif + +#if defined(FOXBMS_AFE_DRIVER_TI) && (FOXBMS_AFE_DRIVER_TI == 1) +static void SPI_InitializeChipSelectsAfe(uint8_t string) { + FAS_ASSERT(string < BS_NR_OF_STRINGS); + (void)string; +} +#endif + +/* if ony UNITY_UNIT_TEST is defined and all other AFE drivers are not enabled + * then just the dummy implementation shall be tested. + * The implementation of the other interfaces is then tested in separate test + * files, that define UNITY_UNIT_TEST and(!) the specific AFE family define. */ +/* AXIVION Disable Style Generic-MaxConditions: This way it is ensured, that all other cases need to be implemented */ +#if defined(UNITY_UNIT_TEST) && \ + (!defined(FOXBMS_AFE_DRIVER_ADI) && !defined(FOXBMS_AFE_DRIVER_DEBUG) && !defined(FOXBMS_AFE_DRIVER_LTC) && \ + !defined(FOXBMS_AFE_DRIVER_MAXIM) && !defined(FOXBMS_AFE_DRIVER_NXP) && !defined(FOXBMS_AFE_DRIVER_TI)) +/* AXIVION Enable Style Generic-MaxConditions */ + +static void SPI_InitializeChipSelectsAfe(uint8_t string) { + FAS_ASSERT(string < BS_NR_OF_STRINGS); + (void)string; +} +#endif + static void SPI_InitializeChipSelects(void) { for (uint8_t s = 0u; s < BS_NR_OF_STRINGS; s++) { - spi_adiInterface[s].pConfig->CSNR = SPI_GetChipSelectPin(spi_adiInterface[s].csType, spi_adiInterface[s].csPin); - spi_ltcInterface[s].pConfig->CSNR = SPI_GetChipSelectPin(spi_ltcInterface[s].csType, spi_ltcInterface[s].csPin); - spi_nxp775InterfaceTx[s].pConfig->CSNR = - SPI_GetChipSelectPin(spi_nxp775InterfaceTx[s].csType, spi_nxp775InterfaceTx[s].csPin); - spi_nxp775InterfaceRx[s].pConfig->CSNR = - SPI_GetChipSelectPin(spi_nxp775InterfaceRx[s].csType, spi_nxp775InterfaceRx[s].csPin); + SPI_InitializeChipSelectsAfe(s); } - spi_mxmInterface.pConfig->CSNR = SPI_GetChipSelectPin(spi_mxmInterface.csType, spi_mxmInterface.csPin); spi_framInterface.pConfig->CSNR = SPI_GetChipSelectPin(spi_framInterface.csType, spi_framInterface.csPin); spi_spsInterface.pConfig->CSNR = SPI_GetChipSelectPin(spi_spsInterface.csType, spi_spsInterface.csPin); spi_sbcMcuInterface.pConfig->CSNR = SPI_GetChipSelectPin(spi_sbcMcuInterface.csType, spi_sbcMcuInterface.csPin); @@ -174,7 +271,7 @@ extern STD_RETURN_TYPE_e SPI_TransmitData(SPI_INTERFACE_CONFIG_s *pSpiInterface, /* Lock SPI hardware to prevent concurrent read/write commands */ if (STD_OK == SPI_Lock(SPI_GetSpiIndex(pSpiInterface->pNode))) { - pSpiInterface->pNode->GCR1 |= SPIEN_BIT; + pSpiInterface->pNode->GCR1 |= DMA_SPI_ENABLE_BIT; /** SW Chip Select */ if (pSpiInterface->csType == SPI_CHIP_SELECT_SOFTWARE) { @@ -231,7 +328,7 @@ extern STD_RETURN_TYPE_e SPI_TransmitReceiveData( /* Lock SPI hardware to prevent concurrent read/write commands */ if (STD_OK == SPI_Lock(SPI_GetSpiIndex(pSpiInterface->pNode))) { - pSpiInterface->pNode->GCR1 |= SPIEN_BIT; + pSpiInterface->pNode->GCR1 |= DMA_SPI_ENABLE_BIT; /** SW Chip Select */ if (pSpiInterface->csType == SPI_CHIP_SELECT_SOFTWARE) { @@ -311,7 +408,7 @@ extern STD_RETURN_TYPE_e SPI_TransmitReceiveDataDma( spi_busyFlags[spiIndex] = SPI_BUSY; /* Check that not SPI transmission over DMA is taking place */ - if ((pSpiInterface->pNode->INT0 & DMAREQEN_BIT) == 0x0) { + if ((pSpiInterface->pNode->INT0 & DMA_REQUEST_ENABLE_BIT) == 0x0) { /** * Activate HW Chip Select according to bitmask register CSNR * by setting pins as SPI functional pins @@ -354,9 +451,9 @@ extern STD_RETURN_TYPE_e SPI_TransmitReceiveDataDma( dmaRAMREG->PCP[(dmaChannel_t)dma_spiDmaChannels[spiIndex].txChannel].ISADDR = (uint32_t)(&pTxBuff[1u]); /* First word sent manually to write configuration in SPIDAT1 register */ /** - * Set number of Tx words to send - * Last word sent in ISR to set CSHOLD = 0 - */ + * Set number of Tx words to send + * Last word sent in ISR to set CSHOLD = 0 + */ dmaRAMREG->PCP[(dmaChannel_t)dma_spiDmaChannels[spiIndex].txChannel].ITCOUNT = ((frameLength - 2u) << 16U) | 1U; /* Last word sent manually to write CSHOLD in SPIDAT1 register */ @@ -375,21 +472,21 @@ extern STD_RETURN_TYPE_e SPI_TransmitReceiveDataDma( /* DMA_REQ_Enable */ /* Starts DMA requests if SPIEN is also set to 1 */ - pSpiInterface->pNode->GCR1 |= SPIEN_BIT; + pSpiInterface->pNode->GCR1 |= DMA_SPI_ENABLE_BIT; uint32_t txBuffer = pTxBuff[0u]; txBuffer |= ((uint32)DataFormat << 24U) | ((uint32)ChipSelect << 16U) | (WDelay) | (Chip_Select_Hold); /** - * Send first word without DMA because when writing config to DAT1 - * the HW CS pin are asserted immediately, even if SPIEN bit in GCR1 is 0. - * The C2TDELAY is then taken into account before the transmission. - */ + * Send first word without DMA because when writing config to DAT1 + * the HW CS pin are asserted immediately, even if SPIEN bit in GCR1 is 0. + * The C2TDELAY is then taken into account before the transmission. + */ pSpiInterface->pNode->DAT1 = txBuffer; uint32_t timeoutIterations = SPI_TX_EMPTY_TIMEOUT_ITERATIONS; while (((pSpiInterface->pNode->FLG & (uint32)((uint32_t)1u << SPI_TX_BUFFER_EMPTY_FLAG_POSITION)) == 0u) && (timeoutIterations > 0u)) { timeoutIterations--; } - pSpiInterface->pNode->INT0 |= DMAREQEN_BIT; + pSpiInterface->pNode->INT0 |= DMA_REQUEST_ENABLE_BIT; retVal = STD_OK; } @@ -479,8 +576,8 @@ extern STD_RETURN_TYPE_e SPI_SlaveSetReceiveDataDma( (void)FSYS_RaisePrivilege(); /* DMA_REQ Disable */ - pSpiInterface->pNode->INT0 &= ~DMAREQEN_BIT; - pSpiInterface->pNode->GCR1 &= ~SPIEN_BIT; + pSpiInterface->pNode->INT0 &= ~DMA_REQUEST_ENABLE_BIT; + pSpiInterface->pNode->GCR1 &= ~DMA_SPI_ENABLE_BIT; /* Write FMT configuration in DAT1; as SPI is configured as slave, this does not provoke a transmission */ SPIDATAFMT_t DataFormat = pSpiInterface->pConfig->DFSEL; @@ -522,8 +619,8 @@ extern STD_RETURN_TYPE_e SPI_SlaveSetReceiveDataDma( /* DMA_REQ Enable */ /* Starts DMA requests if SPIEN is also set to 1 */ - pSpiInterface->pNode->GCR1 |= SPIEN_BIT; - pSpiInterface->pNode->INT0 |= DMAREQEN_BIT; + pSpiInterface->pNode->GCR1 |= DMA_SPI_ENABLE_BIT; + pSpiInterface->pNode->INT0 |= DMA_REQUEST_ENABLE_BIT; return retVal; } @@ -586,4 +683,8 @@ extern uint8_t TEST_SPI_GetChipSelectPin(SPI_CHIP_SELECT_TYPE_e csType, uint32_t extern uint8_t TEST_SPI_GetHardwareChipSelectPin(uint8_t csPin) { return SPI_GetHardwareChipSelectPin(csPin); } +extern void TEST_SPI_InitializeChipSelectsAfe(uint8_t string) { + SPI_InitializeChipSelectsAfe(string); +} + #endif diff --git a/src/app/driver/spi/spi.h b/src/app/driver/spi/spi.h index eeaf8c18..e932be5f 100644 --- a/src/app/driver/spi/spi.h +++ b/src/app/driver/spi/spi.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file spi.h * @author foxBMS Team * @date 2019-12-12 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix SPI * * @brief Headers for the driver for the SPI module. - * + * @details TODO */ #ifndef FOXBMS__SPI_H_ @@ -72,7 +72,7 @@ * @details First the low level initialization (using the HAL functions) is * done. * After that the chip select setup for the peripherals is configured. -*/ + */ extern void SPI_Initialize(void); /* INCLUDE MARKER FOR THE DOCUMENTATION; DO NOT MOVE spi-documentation-dummy-start-include */ @@ -130,7 +130,6 @@ extern STD_RETURN_TYPE_e SPI_TransmitReceiveData( * @param pTxBuff pointer to data that is transmitted by the SPI interface * @param pRxBuff pointer to data that is received by the SPI interface * @param frameLength number of bytes to be transmitted by the SPI interface - * @return status of the SPI transfer */ extern void SPI_FramTransmitReceiveData( SPI_INTERFACE_CONFIG_s *pSpiInterface, @@ -220,7 +219,7 @@ extern void SPI_DmaSendLastByte(uint8_t spiIndex); * @details This function just checks for SPI_PENDING and groups SPI_READY and * SPI_... * @param[in] pNode handle of the SPI node that should be checked - * @returns #STD_RETURN_TYPE_e indicating wether the interface is ok to be used. + * @returns #STD_RETURN_TYPE_e indicating whether the interface is ok to be used. */ extern STD_RETURN_TYPE_e SPI_CheckInterfaceAvailable(spiBASE_t *pNode); @@ -236,6 +235,7 @@ extern uint8_t SPI_GetSpiIndex(spiBASE_t *pNode); extern void TEST_SPI_InitializeChipSelects(void); extern uint8_t TEST_SPI_GetChipSelectPin(SPI_CHIP_SELECT_TYPE_e csType, uint32_t csPin); extern uint8_t TEST_SPI_GetHardwareChipSelectPin(uint8_t csPin); +extern void TEST_SPI_InitializeChipSelectsAfe(uint8_t string); #endif #endif /* FOXBMS__SPI_H_ */ diff --git a/src/app/driver/spi/spi_cfg-helper.h b/src/app/driver/spi/spi_cfg-helper.h index c5c2a930..4cb0beab 100644 --- a/src/app/driver/spi/spi_cfg-helper.h +++ b/src/app/driver/spi/spi_cfg-helper.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,14 +43,13 @@ * @file spi_cfg-helper.h * @author foxBMS Team * @date 2021-12-08 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS_CONFIGURATION * @prefix SPI * * @brief Headers for the configuration for the SPI module - * - * + * @details TODO */ #ifndef FOXBMS__SPI_CFG_HELPER_H_ @@ -61,7 +60,7 @@ /*========== Macros and Definitions =========================================*/ /** HW chip select bit position, TMS570LC4357 has maximum of six hardware chip - * select pins per SPI node @{ */ + * select pins per SPI node @{ */ #define SPI_HARDWARE_CHIP_SELECT_0_BIT_POSITION (0u) #define SPI_HARDWARE_CHIP_SELECT_1_BIT_POSITION (1u) #define SPI_HARDWARE_CHIP_SELECT_2_BIT_POSITION (2u) diff --git a/src/app/driver/sps/sps.c b/src/app/driver/sps/sps.c index 83b77dbd..6a1c8cfb 100644 --- a/src/app/driver/sps/sps.c +++ b/src/app/driver/sps/sps.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file sps.c * @author foxBMS Team * @date 2020-10-14 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix SPS * * @brief Driver for the smart power switches. - * + * @details TODO */ /*========== Includes =======================================================*/ @@ -68,6 +68,12 @@ #include /*========== Macros and Definitions =========================================*/ +/** Defines for specific channel of the SPS IC. @{ */ +#define SPS_IC_CHANNEL_1 (1u) +#define SPS_IC_CHANNEL_2 (2u) +#define SPS_IC_CHANNEL_3 (3u) +#define SPS_IC_CHANNEL_4 (4u) +/**@}*/ /*========== Static Constant and Variable Definitions =======================*/ /** state indicator of the state-machine */ @@ -170,14 +176,13 @@ static STD_RETURN_TYPE_e SPS_Transmit(void); * for all SPS ICs of the daisy-chain. * @details A read command must be issued for all SPS ICs in the daisy chain * first. There is one register to read for each output. - * This funcion i used to retrieve the answer on the MISO line + * This function is used to retrieve the answer on the MISO line * after the write command to the contactors output registers * was made. * The result is written to SPS_CoilCurrent[]. * @param[in] outputAllDevices Output (1 to 4) to be read. Value between * 1-4 instead of 0-3 to match numbering * in data sheet. - * @return TODO */ static void SPS_GlobalReadCurrent(const uint8_t outputAllDevices); @@ -313,9 +318,9 @@ static void SPS_SingleDeviceRegisterWrite( /* Clear write data which will be replaced */ pSpiTxBuffer[(SPS_SPI_BUFFERSIZE - 1u - device)] &= 0xFF00u; /* Write R/W bit and address in the higher 8 bits */ - pSpiTxBuffer[(SPS_SPI_BUFFERSIZE - 1u - device)] = (uint16_t)( - ((uint16_t)1u << SPS_RW_BIT_POSITION) | /* R/W bit = 1 to write */ - (address << SPS_ADDRESS_BIT_START)); /* Register address */ + pSpiTxBuffer[(SPS_SPI_BUFFERSIZE - 1u - device)] = + (uint16_t)(((uint16_t)1u << SPS_RW_BIT_POSITION) | /* R/W bit = 1 to write */ + (address << SPS_ADDRESS_BIT_START)); /* Register address */ if (writeType == SPS_replaceCurrentValue) { pSpiTxBuffer[(SPS_SPI_BUFFERSIZE - 1u - device)] |= (uint16_t)writeData; /* Data to write */ @@ -550,7 +555,7 @@ extern void SPS_Ctrl(void) { } else { sps_state = SPS_START; } - SPS_GlobalReadCurrent(1u); + SPS_GlobalReadCurrent(SPS_IC_CHANNEL_1); break; case SPS_READ_MEASURED_CURRENT2: @@ -562,7 +567,7 @@ extern void SPS_Ctrl(void) { } else { sps_state = SPS_START; } - SPS_GlobalReadCurrent(2u); + SPS_GlobalReadCurrent(SPS_IC_CHANNEL_2); break; case SPS_READ_MEASURED_CURRENT3: @@ -574,7 +579,7 @@ extern void SPS_Ctrl(void) { } else { sps_state = SPS_START; } - SPS_GlobalReadCurrent(3u); + SPS_GlobalReadCurrent(SPS_IC_CHANNEL_3); break; case SPS_READ_MEASURED_CURRENT4: @@ -586,7 +591,7 @@ extern void SPS_Ctrl(void) { } else { sps_state = SPS_START; } - SPS_GlobalReadCurrent(4u); + SPS_GlobalReadCurrent(SPS_IC_CHANNEL_4); break; default: FAS_ASSERT(FAS_TRAP); diff --git a/src/app/driver/sps/sps.h b/src/app/driver/sps/sps.h index d65154ef..07c0db4f 100644 --- a/src/app/driver/sps/sps.h +++ b/src/app/driver/sps/sps.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file sps.h * @author foxBMS Team * @date 2020-10-14 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix SPS * * @brief Headers for the driver for the smart power switches. - * + * @details TODO */ #ifndef FOXBMS__SPS_H_ diff --git a/src/app/driver/sps/sps_types.h b/src/app/driver/sps/sps_types.h index d742bc9b..3e89670b 100644 --- a/src/app/driver/sps/sps_types.h +++ b/src/app/driver/sps/sps_types.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file sps_types.h * @author foxBMS Team * @date 2020-12-01 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix SPS * * @brief Types for the SPS driver. - * + * @details TODO */ #ifndef FOXBMS__SPS_TYPES_H_ diff --git a/src/app/driver/ts/api/tsi.h b/src/app/driver/ts/api/tsi.h index 58e6af16..d2577026 100644 --- a/src/app/driver/ts/api/tsi.h +++ b/src/app/driver/ts/api/tsi.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,12 @@ * @file tsi.h * @author foxBMS Team * @date 2020-08-25 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup DRIVER + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS * @prefix TSI * * @brief Temperature Sensor Interface on Slave Unit driver header - * * @details This header must not expose any other interfaces than * #TSI_GetTemperature(). */ diff --git a/src/app/driver/ts/api/tsi_limits.c b/src/app/driver/ts/api/tsi_limits.c index 3141ae34..5b81dfa6 100644 --- a/src/app/driver/ts/api/tsi_limits.c +++ b/src/app/driver/ts/api/tsi_limits.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,16 +43,17 @@ * @file tsi_limits.c * @author foxBMS Team * @date 2021-01-15 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup DRIVER + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS * @prefix TSI * * @brief Implementation of the temperature limits of the TSI for - * plausibility-checks. This implementation is a transition and should - * ultimately be replaced with a implementation for every temperature - * sensor. For each temperature sensor to supply its own limits two - * things have to be done: + * plausibility-checks. + * @details This implementation is a transition and should ultimately be + * replaced with a implementation for every temperature sensor. + * For each temperature sensor to supply its own limits two things + * have to be done: * * Every access to temperature sensors has to be done through the * TSI (which is currently not the case). * * The TSI has to be capable of handling several temperature diff --git a/src/app/driver/ts/beta.c b/src/app/driver/ts/beta.c index 14b1fa4d..70ccb50d 100644 --- a/src/app/driver/ts/beta.c +++ b/src/app/driver/ts/beta.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,9 +43,9 @@ * @file beta.c * @author foxBMS Team * @date 2020-01-17 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup TEMPERATURE_SENSORS + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS * @prefix BETA * * @brief Resistive divider used for measuring temperature @@ -88,10 +88,12 @@ (BETA_RESISTOR_DIVIDER_SUPPLY_VOLTAGE_V * BETA_ResistanceFromTemperature(-400)) / \ (BETA_ResistanceFromTemperature(-400) + BETA_RESISTOR_DIVIDER_RESISTANCE_R_1_R_2_Ohm)) #else /* BETA_POSITION_IN_RESISTOR_DIVIDER_IS_R_1 == false */ -#define BETA_ADC_VOLTAGE_V_MIN_V \ - ((float_t)((BETA_RESISTOR_DIVIDER_SUPPLY_VOLTAGE_V * BETA_ResistanceFromTemperature(1400)) / (BETA_ResistanceFromTemperature(1400) + BETA_RESISTOR_DIVIDER_RESISTANCE_R_1_R_2_Ohm))) -#define BETA_ADC_VOLTAGE_V_MAX_V \ - ((float_t)((BETA_RESISTOR_DIVIDER_SUPPLY_VOLTAGE_V * BETA_ResistanceFromTemperature(-400)) / (BETA_ResistanceFromTemperature(-400) + BETA_RESISTOR_DIVIDER_RESISTANCE_R_1_R_2_Ohm))) +#define BETA_ADC_VOLTAGE_V_MIN_V \ + ((float_t)((BETA_RESISTOR_DIVIDER_SUPPLY_VOLTAGE_V * BETA_ResistanceFromTemperature(1400)) / \ + (BETA_ResistanceFromTemperature(1400) + BETA_RESISTOR_DIVIDER_RESISTANCE_R_1_R_2_Ohm))) +#define BETA_ADC_VOLTAGE_V_MAX_V \ + ((float_t)((BETA_RESISTOR_DIVIDER_SUPPLY_VOLTAGE_V * BETA_ResistanceFromTemperature(-400)) / \ + (BETA_ResistanceFromTemperature(-400) + BETA_RESISTOR_DIVIDER_RESISTANCE_R_1_R_2_Ohm))) #endif /**@}*/ diff --git a/src/app/driver/ts/beta.h b/src/app/driver/ts/beta.h index 1e23f515..10190e94 100644 --- a/src/app/driver/ts/beta.h +++ b/src/app/driver/ts/beta.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file beta.h * @author foxBMS Team * @date 2020-01-17 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup TEMPERATURE_SENSORS + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS * @prefix BETA * * @brief Resistive divider used for measuring temperature - * + * @details Schematics: * V_supply * --.-- * | diff --git a/src/app/driver/ts/epcos/b57251v5103j060/epcos_b57251v5103j060.c b/src/app/driver/ts/epcos/b57251v5103j060/epcos_b57251v5103j060.c index 41c24390..36dd869a 100644 --- a/src/app/driver/ts/epcos/b57251v5103j060/epcos_b57251v5103j060.c +++ b/src/app/driver/ts/epcos/b57251v5103j060/epcos_b57251v5103j060.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file epcos_b57251v5103j060.c * @author foxBMS Team * @date 2018-10-30 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup TEMPERATURE_SENSORS + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS * @prefix TS * * @brief Resistive divider used for measuring temperature - * + * @details TODO */ /*========== Includes =======================================================*/ @@ -130,15 +130,27 @@ static uint16_t b57251v5103j060LutSize = sizeof(ts_b57251v5103j060Lut) / sizeof( /**@{*/ #if defined(TS_EPCOS_B57251V5103J060_POSITION_IN_RESISTOR_DIVIDER_IS_R_1) && \ (TS_EPCOS_B57251V5103J060_POSITION_IN_RESISTOR_DIVIDER_IS_R_1 == true) -#define TS_EPCOS_B57251V5103J060_ADC_VOLTAGE_V_MAX_V \ - ((float_t)((TS_EPCOS_B57251V5103J060_RESISTOR_DIVIDER_SUPPLY_VOLTAGE_V * ts_b57251v5103j060Lut[b57251v5103j060LutSize-1].resistance_Ohm) / (ts_b57251v5103j060Lut[b57251v5103j060LutSize-1].resistance_Ohm+TS_EPCOS_B57251V5103J060_RESISTOR_DIVIDER_RESISTANCE_R_1_R_2_Ohm))) -#define TS_EPCOS_B57251V5103J060_ADC_VOLTAGE_V_MIN_V \ - ((float_t)((TS_EPCOS_B57251V5103J060_RESISTOR_DIVIDER_SUPPLY_VOLTAGE_V * ts_b57251v5103j060Lut[0].resistance_Ohm) / (ts_b57251v5103j060Lut[0].resistance_Ohm+TS_EPCOS_B57251V5103J060_RESISTOR_DIVIDER_RESISTANCE_R_1_R_2_Ohm))) +#define TS_EPCOS_B57251V5103J060_ADC_VOLTAGE_V_MAX_V \ + ((float_t)((TS_EPCOS_B57251V5103J060_RESISTOR_DIVIDER_SUPPLY_VOLTAGE_V * \ + ts_b57251v5103j060Lut[b57251v5103j060LutSize - 1].resistance_Ohm) / \ + (ts_b57251v5103j060Lut[b57251v5103j060LutSize - 1].resistance_Ohm + \ + TS_EPCOS_B57251V5103J060_RESISTOR_DIVIDER_RESISTANCE_R_1_R_2_Ohm))) +#define TS_EPCOS_B57251V5103J060_ADC_VOLTAGE_V_MIN_V \ + ((float_t)((TS_EPCOS_B57251V5103J060_RESISTOR_DIVIDER_SUPPLY_VOLTAGE_V * \ + ts_b57251v5103j060Lut[0].resistance_Ohm) / \ + (ts_b57251v5103j060Lut[0].resistance_Ohm + \ + TS_EPCOS_B57251V5103J060_RESISTOR_DIVIDER_RESISTANCE_R_1_R_2_Ohm))) #else /* TS_EPCOS_B57251V5103J060_POSITION_IN_RESISTOR_DIVIDER_IS_R_1 == false */ -#define TS_EPCOS_B57251V5103J060_ADC_VOLTAGE_V_MIN_V \ - ((float_t)((TS_EPCOS_B57251V5103J060_RESISTOR_DIVIDER_SUPPLY_VOLTAGE_V * ts_b57251v5103j060Lut[b57251v5103j060LutSize-1].resistance_Ohm) / (ts_b57251v5103j060Lut[b57251v5103j060LutSize-1].resistance_Ohm+TS_EPCOS_B57251V5103J060_RESISTOR_DIVIDER_RESISTANCE_R_1_R_2_Ohm))) -#define TS_EPCOS_B57251V5103J060_ADC_VOLTAGE_V_MAX_V \ - ((float_t)((TS_EPCOS_B57251V5103J060_RESISTOR_DIVIDER_SUPPLY_VOLTAGE_V * ts_b57251v5103j060Lut[0].resistance_Ohm) / (ts_b57251v5103j060Lut[0].resistance_Ohm+TS_EPCOS_B57251V5103J060_RESISTOR_DIVIDER_RESISTANCE_R_1_R_2_Ohm))) +#define TS_EPCOS_B57251V5103J060_ADC_VOLTAGE_V_MIN_V \ + ((float_t)((TS_EPCOS_B57251V5103J060_RESISTOR_DIVIDER_SUPPLY_VOLTAGE_V * \ + ts_b57251v5103j060Lut[b57251v5103j060LutSize - 1].resistance_Ohm) / \ + (ts_b57251v5103j060Lut[b57251v5103j060LutSize - 1].resistance_Ohm + \ + TS_EPCOS_B57251V5103J060_RESISTOR_DIVIDER_RESISTANCE_R_1_R_2_Ohm))) +#define TS_EPCOS_B57251V5103J060_ADC_VOLTAGE_V_MAX_V \ + ((float_t)((TS_EPCOS_B57251V5103J060_RESISTOR_DIVIDER_SUPPLY_VOLTAGE_V * \ + ts_b57251v5103j060Lut[0].resistance_Ohm) / \ + (ts_b57251v5103j060Lut[0].resistance_Ohm + \ + TS_EPCOS_B57251V5103J060_RESISTOR_DIVIDER_RESISTANCE_R_1_R_2_Ohm))) #endif /**@}*/ diff --git a/src/app/driver/ts/epcos/b57251v5103j060/epcos_b57251v5103j060.h b/src/app/driver/ts/epcos/b57251v5103j060/epcos_b57251v5103j060.h index 0ade5de5..7f8ca5b5 100644 --- a/src/app/driver/ts/epcos/b57251v5103j060/epcos_b57251v5103j060.h +++ b/src/app/driver/ts/epcos/b57251v5103j060/epcos_b57251v5103j060.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,12 @@ * @file epcos_b57251v5103j060.h * @author foxBMS Team * @date 2018-10-30 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup TEMPERATURE_SENSORS + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS * @prefix TS * * @brief Resistive divider used for measuring temperature - * * @details Schematics: * * V_supply @@ -71,7 +70,6 @@ * | * --.-- * GND - * */ #ifndef FOXBMS__EPCOS_B57251V5103J060_H_ diff --git a/src/app/driver/ts/epcos/b57251v5103j060/lookup-table/epcos_b57251v5103j060_lookup-table.c b/src/app/driver/ts/epcos/b57251v5103j060/lookup-table/epcos_b57251v5103j060_lookup-table.c index f2b92700..7d8c9a7f 100644 --- a/src/app/driver/ts/epcos/b57251v5103j060/lookup-table/epcos_b57251v5103j060_lookup-table.c +++ b/src/app/driver/ts/epcos/b57251v5103j060/lookup-table/epcos_b57251v5103j060_lookup-table.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file epcos_b57251v5103j060_lookup-table.c * @author foxBMS Team * @date 2020-08-25 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup TEMPERATURE_SENSORS + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS * @prefix TS * * @brief Resistive divider used for measuring temperature - * + * @details TODO */ /*========== Includes =======================================================*/ diff --git a/src/app/driver/ts/epcos/b57251v5103j060/polynomial/epcos_b57251v5103j060_polynomial.c b/src/app/driver/ts/epcos/b57251v5103j060/polynomial/epcos_b57251v5103j060_polynomial.c index a1677081..e9e1a936 100644 --- a/src/app/driver/ts/epcos/b57251v5103j060/polynomial/epcos_b57251v5103j060_polynomial.c +++ b/src/app/driver/ts/epcos/b57251v5103j060/polynomial/epcos_b57251v5103j060_polynomial.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file epcos_b57251v5103j060_polynomial.c * @author foxBMS Team * @date 2020-08-25 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup TEMPERATURE_SENSORS + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS * @prefix TS * * @brief Resistive divider used for measuring temperature - * + * @details TODO */ /*========== Includes =======================================================*/ diff --git a/src/app/driver/ts/epcos/b57861s0103f045/epcos_b57861s0103f045.c b/src/app/driver/ts/epcos/b57861s0103f045/epcos_b57861s0103f045.c index 16d34036..c835b874 100644 --- a/src/app/driver/ts/epcos/b57861s0103f045/epcos_b57861s0103f045.c +++ b/src/app/driver/ts/epcos/b57861s0103f045/epcos_b57861s0103f045.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file epcos_b57861s0103f045.c * @author foxBMS Team * @date 2018-10-30 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup TEMPERATURE_SENSORS + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS * @prefix TS * * @brief Resistive divider used for measuring temperature - * + * @details TODO */ /*========== Includes =======================================================*/ @@ -142,10 +142,16 @@ static uint16_t ts_b57861s0103f045LutSize = sizeof(ts_b57861s0103f045Lut) / size (TS_EPCOS_B57861S0103F045_RESISTOR_DIVIDER_SUPPLY_VOLTAGE_V * ts_b57861s0103f045Lut[0].resistance_Ohm) / \ (ts_b57861s0103f045Lut[0].resistance_Ohm + TS_EPCOS_B57861S0103F045_RESISTOR_DIVIDER_RESISTANCE_R_1_R_2_Ohm)) #else /* TS_EPCOS_B57861S0103F045_POSITION_IN_RESISTOR_DIVIDER_IS_R_1 == false */ -#define TS_EPCOS_B57861S0103F045_ADC_VOLTAGE_V_MIN_V \ - ((float_t)((TS_EPCOS_B57861S0103F045_RESISTOR_DIVIDER_SUPPLY_VOLTAGE_V * ts_b57861s0103f045Lut[ts_b57861s0103f045LutSize-1].resistance_Ohm) / (ts_b57861s0103f045Lut[ts_b57861s0103f045LutSize-1].resistance_Ohm+TS_EPCOS_B57861S0103F045_RESISTOR_DIVIDER_RESISTANCE_R_1_R_2_Ohm))) -#define TS_EPCOS_B57861S0103F045_ADC_VOLTAGE_V_MAX_V \ - ((float_t)((TS_EPCOS_B57861S0103F045_RESISTOR_DIVIDER_SUPPLY_VOLTAGE_V * ts_b57861s0103f045Lut[0].resistance_Ohm) / (ts_b57861s0103f045Lut[0].resistance_Ohm+TS_EPCOS_B57861S0103F045_RESISTOR_DIVIDER_RESISTANCE_R_1_R_2_Ohm))) +#define TS_EPCOS_B57861S0103F045_ADC_VOLTAGE_V_MIN_V \ + ((float_t)((TS_EPCOS_B57861S0103F045_RESISTOR_DIVIDER_SUPPLY_VOLTAGE_V * \ + ts_b57861s0103f045Lut[ts_b57861s0103f045LutSize - 1].resistance_Ohm) / \ + (ts_b57861s0103f045Lut[ts_b57861s0103f045LutSize - 1].resistance_Ohm + \ + TS_EPCOS_B57861S0103F045_RESISTOR_DIVIDER_RESISTANCE_R_1_R_2_Ohm))) +#define TS_EPCOS_B57861S0103F045_ADC_VOLTAGE_V_MAX_V \ + ((float_t)((TS_EPCOS_B57861S0103F045_RESISTOR_DIVIDER_SUPPLY_VOLTAGE_V * \ + ts_b57861s0103f045Lut[0].resistance_Ohm) / \ + (ts_b57861s0103f045Lut[0].resistance_Ohm + \ + TS_EPCOS_B57861S0103F045_RESISTOR_DIVIDER_RESISTANCE_R_1_R_2_Ohm))) #endif /**@}*/ @@ -214,7 +220,9 @@ extern int16_t TS_Epc01GetTemperatureFromPolynomial(uint16_t adcVoltage_mV) { float_t vadc4 = vadc3 * vadc_V; float_t vadc5 = vadc4 * vadc_V; - /* 5th grade polynomial for EPCOS B57861S0103F045 NTC-Thermistor, 10 kOhm, Series B57861S, Vref = 3V, R in series 10k */ + /* 5th grade polynomial for EPCOS B57861S0103F045 NTC-Thermistor, 10 kOhm, Series B57861S, Vref = 3V, R in series + * 10k + */ temperature_degC = (-6.2765f * vadc5) + (49.0397f * vadc4) - (151.3602f * vadc3) + (233.2521f * vadc2) - (213.4588f * vadc_V) + 130.5822f; diff --git a/src/app/driver/ts/epcos/b57861s0103f045/epcos_b57861s0103f045.h b/src/app/driver/ts/epcos/b57861s0103f045/epcos_b57861s0103f045.h index 0a995fc3..15536c67 100644 --- a/src/app/driver/ts/epcos/b57861s0103f045/epcos_b57861s0103f045.h +++ b/src/app/driver/ts/epcos/b57861s0103f045/epcos_b57861s0103f045.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file epcos_b57861s0103f045.h * @author foxBMS Team * @date 2018-10-30 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup TEMPERATURE_SENSORS + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS * @prefix TS * * @brief Resistive divider used for measuring temperature - * + * @details Schematics * V_supply * --.-- * | diff --git a/src/app/driver/ts/epcos/b57861s0103f045/lookup-table/epcos_b57861s0103f045_lookup-table.c b/src/app/driver/ts/epcos/b57861s0103f045/lookup-table/epcos_b57861s0103f045_lookup-table.c index a8da9a1c..0bc0ec1b 100644 --- a/src/app/driver/ts/epcos/b57861s0103f045/lookup-table/epcos_b57861s0103f045_lookup-table.c +++ b/src/app/driver/ts/epcos/b57861s0103f045/lookup-table/epcos_b57861s0103f045_lookup-table.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file epcos_b57861s0103f045_lookup-table.c * @author foxBMS Team * @date 2020-08-25 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup TEMPERATURE_SENSORS + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS * @prefix TS * * @brief Resistive divider used for measuring temperature - * + * @details TODO */ /*========== Includes =======================================================*/ diff --git a/src/app/driver/ts/epcos/b57861s0103f045/polynomial/epcos_b57861s0103f045_polynomial.c b/src/app/driver/ts/epcos/b57861s0103f045/polynomial/epcos_b57861s0103f045_polynomial.c index a595b00f..6dfdd4e4 100644 --- a/src/app/driver/ts/epcos/b57861s0103f045/polynomial/epcos_b57861s0103f045_polynomial.c +++ b/src/app/driver/ts/epcos/b57861s0103f045/polynomial/epcos_b57861s0103f045_polynomial.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file epcos_b57861s0103f045_polynomial.c * @author foxBMS Team * @date 2020-08-25 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup TEMPERATURE_SENSORS + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS * @prefix TS * * @brief Resistive divider used for measuring temperature - * + * @details TODO */ /*========== Includes =======================================================*/ diff --git a/src/app/driver/ts/fake/none/fake_none.c b/src/app/driver/ts/fake/none/fake_none.c index 9526a7ce..443de6ea 100644 --- a/src/app/driver/ts/fake/none/fake_none.c +++ b/src/app/driver/ts/fake/none/fake_none.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file fake_none.c * @author foxBMS Team * @date 2020-08-25 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup TEMPERATURE_SENSORS + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS * @prefix TS * * @brief Fake temperature sensor - * + * @details TODO */ /*========== Includes =======================================================*/ diff --git a/src/app/driver/ts/fake/none/fake_none.h b/src/app/driver/ts/fake/none/fake_none.h index 4049407a..519ab295 100644 --- a/src/app/driver/ts/fake/none/fake_none.h +++ b/src/app/driver/ts/fake/none/fake_none.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file fake_none.h * @author foxBMS Team * @date 2020-08-25 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup TEMPERATURE_SENSORS + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS * @prefix TS * * @brief Fake temperature sensor header - * + * @details TODO */ #ifndef FOXBMS__FAKE_NONE_H_ diff --git a/src/app/driver/ts/fake/none/lookup-table/fake_none_lookup-table.c b/src/app/driver/ts/fake/none/lookup-table/fake_none_lookup-table.c index d8f957b6..1ea4bad4 100644 --- a/src/app/driver/ts/fake/none/lookup-table/fake_none_lookup-table.c +++ b/src/app/driver/ts/fake/none/lookup-table/fake_none_lookup-table.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file fake_none_lookup-table.c * @author foxBMS Team * @date 2020-08-25 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup TEMPERATURE_SENSORS + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS * @prefix TS * * @brief Resistive divider used for measuring temperature - * + * @details TODO */ /*========== Includes =======================================================*/ diff --git a/src/app/driver/ts/fake/none/polynomial/fake_none_polynomial.c b/src/app/driver/ts/fake/none/polynomial/fake_none_polynomial.c index 5533fa42..e29d63c8 100644 --- a/src/app/driver/ts/fake/none/polynomial/fake_none_polynomial.c +++ b/src/app/driver/ts/fake/none/polynomial/fake_none_polynomial.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file fake_none_polynomial.c * @author foxBMS Team * @date 2020-08-25 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup TEMPERATURE_SENSORS + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS * @prefix TS * * @brief Resistive divider used for measuring temperature - * + * @details TODO */ /*========== Includes =======================================================*/ diff --git a/src/app/driver/ts/murata/ncxxxxh103/lookup-table/murata_ncxxxxh103_lookup-table.c b/src/app/driver/ts/murata/ncxxxxh103/lookup-table/murata_ncxxxxh103_lookup-table.c index 2438ca14..f705d59d 100644 --- a/src/app/driver/ts/murata/ncxxxxh103/lookup-table/murata_ncxxxxh103_lookup-table.c +++ b/src/app/driver/ts/murata/ncxxxxh103/lookup-table/murata_ncxxxxh103_lookup-table.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file murata_ncxxxxh103_lookup-table.c * @author foxBMS Team * @date 2022-10-12 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup TEMPERATURE_SENSORS + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS * @prefix TS * * @brief Resistive divider used for measuring temperature - * + * @details TODO */ /*========== Includes =======================================================*/ diff --git a/src/app/driver/ts/murata/ncxxxxh103/murata_ncxxxxh103.c b/src/app/driver/ts/murata/ncxxxxh103/murata_ncxxxxh103.c index d5330cbf..0219d6ab 100644 --- a/src/app/driver/ts/murata/ncxxxxh103/murata_ncxxxxh103.c +++ b/src/app/driver/ts/murata/ncxxxxh103/murata_ncxxxxh103.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file murata_ncxxxxh103.c * @author foxBMS Team * @date 2022-10-12 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup TEMPERATURE_SENSORS + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS * @prefix TS * * @brief Resistive divider used for measuring temperature - * + * @details TODO */ /*========== Includes =======================================================*/ @@ -94,15 +94,23 @@ static const uint16_t ts_ncxxxxh103LutSize = sizeof(ts_ncxxxxh103Lut) / sizeof(T */ #if defined(TS_MURATA_NCXXXXH103_POSITION_IN_RESISTOR_DIVIDER_IS_R_1) && \ (TS_MURATA_NCXXXXH103_POSITION_IN_RESISTOR_DIVIDER_IS_R_1 == true) -#define TS_MURATA_NCXXXXH103_ADC_VOLTAGE_V_MAX_V \ - ((float_t)((TS_MURATA_NCXXXXH103_RESISTOR_DIVIDER_SUPPLY_VOLTAGE_V * ts_ncxxxxh103Lut[ts_ncxxxxh103LutSize-1u].resistance_Ohm) / (ts_ncxxxxh103Lut[ts_ncxxxxh103LutSize-1u].resistance_Ohm+TS_MURATA_NCXXXXH103_RESISTOR_DIVIDER_RESISTANCE_R_1_R_2_Ohm))) -#define TS_MURATA_NCXXXXH103_ADC_VOLTAGE_V_MIN_V \ - ((float_t)((TS_MURATA_NCXXXXH103_RESISTOR_DIVIDER_SUPPLY_VOLTAGE_V * ts_ncxxxxh103Lut[0u].resistance_Ohm) / (ts_ncxxxxh103Lut[0u].resistance_Ohm+TS_MURATA_NCXXXXH103_RESISTOR_DIVIDER_RESISTANCE_R_1_R_2_Ohm))) +#define TS_MURATA_NCXXXXH103_ADC_VOLTAGE_V_MAX_V \ + ((float_t)((TS_MURATA_NCXXXXH103_RESISTOR_DIVIDER_SUPPLY_VOLTAGE_V * \ + ts_ncxxxxh103Lut[ts_ncxxxxh103LutSize - 1u].resistance_Ohm) / \ + (ts_ncxxxxh103Lut[ts_ncxxxxh103LutSize - 1u].resistance_Ohm + \ + TS_MURATA_NCXXXXH103_RESISTOR_DIVIDER_RESISTANCE_R_1_R_2_Ohm))) +#define TS_MURATA_NCXXXXH103_ADC_VOLTAGE_V_MIN_V \ + ((float_t)((TS_MURATA_NCXXXXH103_RESISTOR_DIVIDER_SUPPLY_VOLTAGE_V * ts_ncxxxxh103Lut[0u].resistance_Ohm) / \ + (ts_ncxxxxh103Lut[0u].resistance_Ohm + TS_MURATA_NCXXXXH103_RESISTOR_DIVIDER_RESISTANCE_R_1_R_2_Ohm))) #else /* TS_MURATA_NCXXXXH103_POSITION_IN_RESISTOR_DIVIDER_IS_R_1 is false */ -#define TS_MURATA_NCXXXXH103_ADC_VOLTAGE_V_MIN_V \ - ((float_t)((TS_MURATA_NCXXXXH103_RESISTOR_DIVIDER_SUPPLY_VOLTAGE_V * ts_ncxxxxh103Lut[ts_ncxxxxh103LutSize-1u].resistance_Ohm) / (ts_ncxxxxh103Lut[ts_ncxxxxh103LutSize-1u].resistance_Ohm+TS_MURATA_NCXXXXH103_RESISTOR_DIVIDER_RESISTANCE_R_1_R_2_Ohm))) -#define TS_MURATA_NCXXXXH103_ADC_VOLTAGE_V_MAX_V \ - ((float_t)((TS_MURATA_NCXXXXH103_RESISTOR_DIVIDER_SUPPLY_VOLTAGE_V * ts_ncxxxxh103Lut[0u].resistance_Ohm) / (ts_ncxxxxh103Lut[0u].resistance_Ohm+TS_MURATA_NCXXXXH103_RESISTOR_DIVIDER_RESISTANCE_R_1_R_2_Ohm))) +#define TS_MURATA_NCXXXXH103_ADC_VOLTAGE_V_MIN_V \ + ((float_t)((TS_MURATA_NCXXXXH103_RESISTOR_DIVIDER_SUPPLY_VOLTAGE_V * \ + ts_ncxxxxh103Lut[ts_ncxxxxh103LutSize - 1u].resistance_Ohm) / \ + (ts_ncxxxxh103Lut[ts_ncxxxxh103LutSize - 1u].resistance_Ohm + \ + TS_MURATA_NCXXXXH103_RESISTOR_DIVIDER_RESISTANCE_R_1_R_2_Ohm))) +#define TS_MURATA_NCXXXXH103_ADC_VOLTAGE_V_MAX_V \ + ((float_t)((TS_MURATA_NCXXXXH103_RESISTOR_DIVIDER_SUPPLY_VOLTAGE_V * ts_ncxxxxh103Lut[0u].resistance_Ohm) / \ + (ts_ncxxxxh103Lut[0u].resistance_Ohm + TS_MURATA_NCXXXXH103_RESISTOR_DIVIDER_RESISTANCE_R_1_R_2_Ohm))) #endif /**@}*/ diff --git a/src/app/driver/ts/murata/ncxxxxh103/murata_ncxxxxh103.h b/src/app/driver/ts/murata/ncxxxxh103/murata_ncxxxxh103.h index 043a9486..832f804e 100644 --- a/src/app/driver/ts/murata/ncxxxxh103/murata_ncxxxxh103.h +++ b/src/app/driver/ts/murata/ncxxxxh103/murata_ncxxxxh103.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file murata_ncxxxxh103.h * @author foxBMS Team * @date 2022-10-12 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup TEMPERATURE_SENSORS + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS * @prefix TS * * @brief Resistive divider used for measuring temperature - * + * @details Schematics * V_supply * --.-- * | diff --git a/src/app/driver/ts/murata/ncxxxxh103/polynomial/murata_ncxxxxh103_polynomial.c b/src/app/driver/ts/murata/ncxxxxh103/polynomial/murata_ncxxxxh103_polynomial.c index fb4632e0..c309cd62 100644 --- a/src/app/driver/ts/murata/ncxxxxh103/polynomial/murata_ncxxxxh103_polynomial.c +++ b/src/app/driver/ts/murata/ncxxxxh103/polynomial/murata_ncxxxxh103_polynomial.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file murata_ncxxxxh103_polynomial.c * @author foxBMS Team * @date 2022-12-10 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup TEMPERATURE_SENSORS + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS * @prefix TS * * @brief Resistive divider used for measuring temperature - * + * @details TODO */ /*========== Includes =======================================================*/ diff --git a/src/app/driver/can/cbs/tx/can_cbs_tx_imd-request.c b/src/app/driver/ts/semitec/103jt/lookup-table/semitec_103jt_lookup-table.c similarity index 79% rename from src/app/driver/can/cbs/tx/can_cbs_tx_imd-request.c rename to src/app/driver/ts/semitec/103jt/lookup-table/semitec_103jt_lookup-table.c index 9e420926..6bd409f8 100644 --- a/src/app/driver/can/cbs/tx/can_cbs_tx_imd-request.c +++ b/src/app/driver/ts/semitec/103jt/lookup-table/semitec_103jt_lookup-table.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,31 +33,29 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ /** - * @file can_cbs_tx_imd-request.c + * @file semitec_103jt_lookup-table.c * @author foxBMS Team - * @date 2023-06-14 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup DRIVER - * @prefix CANTX + * @date 2020-08-25 (date of creation) + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS + * @prefix TS + * + * @brief Resistive divider used for measuring temperature * - * @brief CAN driver Tx callback implementation - * @details CAN Tx callback for pack value and string value messages */ /*========== Includes =======================================================*/ -#include "can_cbs_tx.h" -#include "can_cfg_tx-message-definitions.h" -#include "can_helper.h" +#include "semitec_103jt.h" +#include "tsi.h" -#include #include /*========== Macros and Definitions =========================================*/ @@ -72,6 +70,10 @@ /*========== Extern Function Implementations ================================*/ +extern int16_t TSI_GetTemperature(uint16_t adcVoltage_mV) { + return TS_Sem00GetTemperatureFromLut(adcVoltage_mV); +} + /*========== Externalized Static Function Implementations (Unit Test) =======*/ #ifdef UNITY_UNIT_TEST #endif diff --git a/src/app/driver/ts/semitec/103jt/semitec_103jt.c b/src/app/driver/ts/semitec/103jt/semitec_103jt.c new file mode 100644 index 00000000..0f9bf4ff --- /dev/null +++ b/src/app/driver/ts/semitec/103jt/semitec_103jt.c @@ -0,0 +1,197 @@ +/** + * + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * We kindly request you to use one or more of the following phrases to refer to + * foxBMS in your hardware, software, documentation or advertising materials: + * + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" + * + */ + +/** + * @file semitec_103jt.c + * @author foxBMS Team + * @date 2018-10-30 (date of creation) + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS + * @prefix TS + * + * @brief Resistive divider used for measuring temperature + * + */ + +/*========== Includes =======================================================*/ +#include "semitec_103jt.h" + +#include "fassert.h" +#include "foxmath.h" +#include "temperature_sensor_defs.h" + +#include +#include +#include + +/*========== Macros and Definitions =========================================*/ + +/*========== Static Constant and Variable Definitions =======================*/ + +/* clang-format off */ +/** LUT filled from higher resistance to lower resistance */ +static const TS_TEMPERATURE_SENSOR_LUT_s ts_103jtLut[] = { + { -500, 367700.00f }, + { -400, 204700.00f }, + { -300, 118500.00f }, + { -200, 71020.00f }, + { -100, 43670.00f }, + { 0, 27700.00f }, + { 100, 18070.00f }, + { 200, 12110.00f }, + { 250, 10000.00f }, + { 300, 8301.00f }, + { 400, 5811.00f }, + { 500, 4147.00f }, + { 600, 3011.00f }, + { 700, 2224.00f }, + { 800, 1668.00f }, + { 900, 1267.00f } +}; +/* clang-format on */ + +/** size of the #ts_103jtLut LUT */ +static uint16_t ts_103jtLutSize = sizeof(ts_103jtLut) / sizeof(TS_TEMPERATURE_SENSOR_LUT_s); + +/*========== Extern Constant and Variable Definitions =======================*/ +/** + * @brief Defines for calculating the ADC voltage on the ends of the operating range. + * @details The ADC voltage is calculated with the following formula: + * + * V_adc = ((V_supply * R_ntc) / (R + R_ntc)) + * + * Depending on the position of the NTC in the voltage resistor (R1/R2), + * different R_ntc values are used for the calculation. + */ +/**@{*/ +#if defined(TS_SEMITEC_103JT_POSITION_IN_RESISTOR_DIVIDER_IS_R_1) && \ + (TS_SEMITEC_103JT_POSITION_IN_RESISTOR_DIVIDER_IS_R_1 == true) +#define TS_SEMITEC_103JT_ADC_VOLTAGE_V_MAX_V \ + ((float_t)((TS_SEMITEC_103JT_RESISTOR_DIVIDER_SUPPLY_VOLTAGE_V * \ + ts_103jtLut[ts_103jtLutSize - 1].resistance_Ohm) / \ + (ts_103jtLut[ts_103jtLutSize - 1].resistance_Ohm + \ + TS_SEMITEC_103JT_RESISTOR_DIVIDER_RESISTANCE_R_1_R_2_Ohm))) +#define TS_SEMITEC_103JT_ADC_VOLTAGE_V_MIN_V \ + ((float_t)((TS_SEMITEC_103JT_RESISTOR_DIVIDER_SUPPLY_VOLTAGE_V * ts_103jtLut[0].resistance_Ohm) / \ + (ts_103jtLut[0].resistance_Ohm + TS_SEMITEC_103JT_RESISTOR_DIVIDER_RESISTANCE_R_1_R_2_Ohm))) +#else /* TS_SEMITEC_103JT_POSITION_IN_RESISTOR_DIVIDER_IS_R_1 == false */ +#define TS_SEMITEC_103JT_ADC_VOLTAGE_V_MIN_V \ + ((float_t)((TS_SEMITEC_103JT_RESISTOR_DIVIDER_SUPPLY_VOLTAGE_V * \ + ts_103jtLut[ts_103jtLutSize - 1].resistance_Ohm) / \ + (ts_103jtLut[ts_103jtLutSize - 1].resistance_Ohm + \ + TS_SEMITEC_103JT_RESISTOR_DIVIDER_RESISTANCE_R_1_R_2_Ohm))) +#define TS_SEMITEC_103JT_ADC_VOLTAGE_V_MAX_V \ + ((float_t)((TS_SEMITEC_103JT_RESISTOR_DIVIDER_SUPPLY_VOLTAGE_V * ts_103jtLut[0].resistance_Ohm) / \ + (ts_103jtLut[0].resistance_Ohm + TS_SEMITEC_103JT_RESISTOR_DIVIDER_RESISTANCE_R_1_R_2_Ohm))) +#endif +/**@}*/ + +/*========== Static Function Prototypes =====================================*/ + +/*========== Static Function Implementations ================================*/ + +/*========== Extern Function Implementations ================================*/ + +extern int16_t TS_Sem00GetTemperatureFromLut(uint16_t adcVoltage_mV) { + /* AXIVION Routine Generic-MissingParameterAssert: adcVoltage_mV: parameter accepts whole range */ + + int16_t temperature_ddegC = 0; + float_t resistance_Ohm = 0.0f; + float_t adcVoltage_V = adcVoltage_mV / 1000.0f; /* Convert mV to V */ + + /* Check for valid ADC measurements to prevent undefined behavior */ + if (adcVoltage_V > TS_SEMITEC_103JT_ADC_VOLTAGE_V_MAX_V) { + /* Invalid measured ADC voltage -> sensor out of operating range or disconnected/shorted */ + temperature_ddegC = INT16_MIN; + } else if (adcVoltage_V < TS_SEMITEC_103JT_ADC_VOLTAGE_V_MIN_V) { + /* Invalid measured ADC voltage -> sensor out of operating range or shorted/disconnected */ + temperature_ddegC = INT16_MAX; + } else { + /* Calculate NTC resistance based on measured ADC voltage */ +#if defined(TS_SEMITEC_103JT_POSITION_IN_RESISTOR_DIVIDER_IS_R_1) && \ + (TS_SEMITEC_103JT_POSITION_IN_RESISTOR_DIVIDER_IS_R_1 == true) + /* R_1 = R_2 * ( ( V_supply / V_adc ) - 1 ) */ + resistance_Ohm = TS_SEMITEC_103JT_RESISTOR_DIVIDER_RESISTANCE_R_1_R_2_Ohm * + ((TS_SEMITEC_103JT_RESISTOR_DIVIDER_SUPPLY_VOLTAGE_V / adcVoltage_V) - 1); +#else /* TS_SEMITEC_103JT_POSITION_IN_RESISTOR_DIVIDER_IS_R_1 == false */ + /* R_2 = R_1 * ( V_2 / ( V_supply - V_adc ) ) */ + resistance_Ohm = TS_SEMITEC_103JT_RESISTOR_DIVIDER_RESISTANCE_R_1_R_2_Ohm * + (adcVoltage_V / (TS_SEMITEC_103JT_RESISTOR_DIVIDER_SUPPLY_VOLTAGE_V - adcVoltage_V)); +#endif /* TS_SEMITEC_103JT_POSITION_IN_RESISTOR_DIVIDER_IS_R_1 */ + + /* Variables for interpolating LUT value */ + uint16_t between_high = 0; + uint16_t between_low = 0; + for (uint16_t i = 1; i < ts_103jtLutSize; i++) { + if (resistance_Ohm < ts_103jtLut[i].resistance_Ohm) { + between_low = i + 1u; + between_high = i; + } + } + + /* Interpolate between LUT values, but do not extrapolate LUT! */ + if (!(((between_high == 0u) && (between_low == 0u)) || /* measured resistance > maximum LUT resistance */ + (between_low > ts_103jtLutSize))) { /* measured resistance < minimum LUT resistance */ + temperature_ddegC = (int16_t)MATH_LinearInterpolation( + ts_103jtLut[between_low].resistance_Ohm, + ts_103jtLut[between_low].temperature_ddegC, + ts_103jtLut[between_high].resistance_Ohm, + ts_103jtLut[between_high].temperature_ddegC, + resistance_Ohm); + } + } + + /* Return temperature based on measured NTC resistance */ + return temperature_ddegC; +} + +extern int16_t TS_Sem00GetTemperatureFromPolynomial(uint16_t adcVoltage_mV) { + (void)adcVoltage_mV; + FAS_ASSERT(FAS_TRAP); + int16_t temperature_ddegC = 0; + /* TODO this is not implemented */ + return temperature_ddegC; +} + +/*========== Externalized Static Function Implementations (Unit Test) =======*/ +#ifdef UNITY_UNIT_TEST +#endif diff --git a/src/app/driver/ts/semitec/103jt/semitec_103jt.h b/src/app/driver/ts/semitec/103jt/semitec_103jt.h new file mode 100644 index 00000000..698563cb --- /dev/null +++ b/src/app/driver/ts/semitec/103jt/semitec_103jt.h @@ -0,0 +1,126 @@ +/** + * + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * We kindly request you to use one or more of the following phrases to refer to + * foxBMS in your hardware, software, documentation or advertising materials: + * + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" + * + */ + +/** + * @file semitec_103jt.h + * @author foxBMS Team + * @date 2018-10-30 (date of creation) + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS + * @prefix TS + * + * @brief Resistive divider used for measuring temperature + * @details Schematics: + * + * V_supply + * --.-- + * | + * +-.-+ + * | | + * | | R_1 + * | | + * +-.-+ + * | + * .--- V_adc + * | + * +-.-+ + * | | + * | | R_2 + * | | + * +-.-+ + * | + * --.-- + * GND + * + */ + +#ifndef FOXBMS__SEMITEC_103JT_H_ +#define FOXBMS__SEMITEC_103JT_H_ + +/*========== Includes =======================================================*/ + +#include + +/*========== Macros and Definitions =========================================*/ +/** + * Position of the NTC in the voltage resistor + * true: NTC is positioned above the voltage tap for the ADC voltage. + * This equals resistor R_1 in the above circuit diagram + * + * false: NTC is positioned below the voltage tap for the ADC voltage. + * This equals resistor R_2 in the above circuit diagram + */ +#define TS_SEMITEC_103JT_POSITION_IN_RESISTOR_DIVIDER_IS_R_1 (false) + +/** Resistor divider supply voltage in volt */ +#define TS_SEMITEC_103JT_RESISTOR_DIVIDER_SUPPLY_VOLTAGE_V (2.5f) + +/** + * Resistance value of the other resistor (not the NTC) in the resistor + * divider in Ohm. + */ +#define TS_SEMITEC_103JT_RESISTOR_DIVIDER_RESISTANCE_R_1_R_2_Ohm (10000.0f) + +/*========== Extern Constant and Variable Declarations ======================*/ +/** + * @brief returns temperature based on measured ADC voltage + * @param adcVoltage_mV voltage in mV + * @return corresponding temperature in deci °C or INT16_MAX/INT16_MIN if + * NTC is shorted or got disconnected. The caller of this functions + * needs to check for these return values to prevent invalid data. + */ +extern int16_t TS_Sem00GetTemperatureFromLut(uint16_t adcVoltage_mV); + +/** + * @brief returns temperature based on measured ADC voltage + * @param adcVoltage_mV voltage in mV + * @return corresponding temperature in deci °C + */ +extern int16_t TS_Sem00GetTemperatureFromPolynomial(uint16_t adcVoltage_mV); + +/*========== Extern Function Prototypes =====================================*/ + +/*========== Externalized Static Functions Prototypes (Unit Test) ===========*/ +#ifdef UNITY_UNIT_TEST +#endif + +#endif /* FOXBMS__SEMITEC_103JT_H_ */ diff --git a/src/app/driver/ts/temperature_sensor_defs.h b/src/app/driver/ts/temperature_sensor_defs.h index f5da14b4..7a8e31d4 100644 --- a/src/app/driver/ts/temperature_sensor_defs.h +++ b/src/app/driver/ts/temperature_sensor_defs.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file temperature_sensor_defs.h * @author foxBMS Team * @date 2020-08-25 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup TEMPERATURE_SENSORS + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS * @prefix TS * * @brief TODO - * + * @details TODO */ #ifndef FOXBMS__TEMPERATURE_SENSOR_DEFS_H_ diff --git a/src/app/driver/ts/vishay/ntcalug01a103g/lookup-table/vishay_ntcalug01a103g_lookup-table.c b/src/app/driver/ts/vishay/ntcalug01a103g/lookup-table/vishay_ntcalug01a103g_lookup-table.c index 5ca7ffc7..bf29b7c1 100644 --- a/src/app/driver/ts/vishay/ntcalug01a103g/lookup-table/vishay_ntcalug01a103g_lookup-table.c +++ b/src/app/driver/ts/vishay/ntcalug01a103g/lookup-table/vishay_ntcalug01a103g_lookup-table.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,9 +43,9 @@ * @file vishay_ntcalug01a103g_lookup-table.c * @author foxBMS Team * @date 2020-08-25 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup TEMPERATURE_SENSORS + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS * @prefix TS * * @brief Resistive divider used for measuring temperature diff --git a/src/app/driver/ts/vishay/ntcalug01a103g/polynomial/vishay_ntcalug01a103g_polynomial.c b/src/app/driver/ts/vishay/ntcalug01a103g/polynomial/vishay_ntcalug01a103g_polynomial.c index 50b83c2e..df605f2f 100644 --- a/src/app/driver/ts/vishay/ntcalug01a103g/polynomial/vishay_ntcalug01a103g_polynomial.c +++ b/src/app/driver/ts/vishay/ntcalug01a103g/polynomial/vishay_ntcalug01a103g_polynomial.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,9 +43,9 @@ * @file vishay_ntcalug01a103g_polynomial.c * @author foxBMS Team * @date 2020-08-25 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup TEMPERATURE_SENSORS + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS * @prefix TS * * @brief Resistive divider used for measuring temperature diff --git a/src/app/driver/ts/vishay/ntcalug01a103g/vishay_ntcalug01a103g.c b/src/app/driver/ts/vishay/ntcalug01a103g/vishay_ntcalug01a103g.c index 008a3b42..8102d4bb 100644 --- a/src/app/driver/ts/vishay/ntcalug01a103g/vishay_ntcalug01a103g.c +++ b/src/app/driver/ts/vishay/ntcalug01a103g/vishay_ntcalug01a103g.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,9 +43,9 @@ * @file vishay_ntcalug01a103g.c * @author foxBMS Team * @date 2018-10-30 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup TEMPERATURE_SENSORS + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS * @prefix TS * * @brief Resistive divider used for measuring temperature @@ -246,10 +246,15 @@ static const uint16_t ts_ntcalug01a103gLutSize = sizeof(ts_ntcalug01a103gLut) / (TS_VISHAY_NTCALUG01A103G_RESISTOR_DIVIDER_SUPPLY_VOLTAGE_V * ts_ntcalug01a103gLut[0].resistance_Ohm) / \ (ts_ntcalug01a103gLut[0].resistance_Ohm + TS_VISHAY_NTCALUG01A103G_RESISTOR_DIVIDER_RESISTANCE_R_1_R_2_Ohm)) #else /* TS_VISHAY_NTCALUG01A103G_POSITION_IN_RESISTOR_DIVIDER_IS_R_1 == false */ -#define TS_VISHAY_NTCALUG01A103G_ADC_VOLTAGE_V_MIN_V \ - ((float_t)((TS_VISHAY_NTCALUG01A103G_RESISTOR_DIVIDER_SUPPLY_VOLTAGE_V * ts_ntcalug01a103gLut[ts_ntcalug01a103gLutSize-1].resistance_Ohm) / (ts_ntcalug01a103gLut[ts_ntcalug01a103gLutSize-1].resistance_Ohm+TS_VISHAY_NTCALUG01A103G_RESISTOR_DIVIDER_RESISTANCE_R_1_R_2_Ohm))) -#define TS_VISHAY_NTCALUG01A103G_ADC_VOLTAGE_V_MAX_V \ - ((float_t)((TS_VISHAY_NTCALUG01A103G_RESISTOR_DIVIDER_SUPPLY_VOLTAGE_V * ts_ntcalug01a103gLut[0].resistance_Ohm) / (ts_ntcalug01a103gLut[0].resistance_Ohm+TS_VISHAY_NTCALUG01A103G_RESISTOR_DIVIDER_RESISTANCE_R_1_R_2_Ohm))) +#define TS_VISHAY_NTCALUG01A103G_ADC_VOLTAGE_V_MIN_V \ + ((float_t)((TS_VISHAY_NTCALUG01A103G_RESISTOR_DIVIDER_SUPPLY_VOLTAGE_V * \ + ts_ntcalug01a103gLut[ts_ntcalug01a103gLutSize - 1].resistance_Ohm) / \ + (ts_ntcalug01a103gLut[ts_ntcalug01a103gLutSize - 1].resistance_Ohm + \ + TS_VISHAY_NTCALUG01A103G_RESISTOR_DIVIDER_RESISTANCE_R_1_R_2_Ohm))) +#define TS_VISHAY_NTCALUG01A103G_ADC_VOLTAGE_V_MAX_V \ + ((float_t)((TS_VISHAY_NTCALUG01A103G_RESISTOR_DIVIDER_SUPPLY_VOLTAGE_V * ts_ntcalug01a103gLut[0].resistance_Ohm) / \ + (ts_ntcalug01a103gLut[0].resistance_Ohm + \ + TS_VISHAY_NTCALUG01A103G_RESISTOR_DIVIDER_RESISTANCE_R_1_R_2_Ohm))) #endif /**@}*/ diff --git a/src/app/driver/ts/vishay/ntcalug01a103g/vishay_ntcalug01a103g.h b/src/app/driver/ts/vishay/ntcalug01a103g/vishay_ntcalug01a103g.h index 7b252ec4..f9c9409d 100644 --- a/src/app/driver/ts/vishay/ntcalug01a103g/vishay_ntcalug01a103g.h +++ b/src/app/driver/ts/vishay/ntcalug01a103g/vishay_ntcalug01a103g.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file vishay_ntcalug01a103g.h * @author foxBMS Team * @date 2018-10-30 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup TEMPERATURE_SENSORS + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS * @prefix TS * * @brief Resistive divider used for measuring temperature - * + * @details Circuit description * V_supply * --.-- * | diff --git a/src/app/driver/ts/vishay/ntcle317e4103sba/lookup-table/vishay_ntcle317e4103sba_lookup-table.c b/src/app/driver/ts/vishay/ntcle317e4103sba/lookup-table/vishay_ntcle317e4103sba_lookup-table.c index 585c1715..ff82e943 100644 --- a/src/app/driver/ts/vishay/ntcle317e4103sba/lookup-table/vishay_ntcle317e4103sba_lookup-table.c +++ b/src/app/driver/ts/vishay/ntcle317e4103sba/lookup-table/vishay_ntcle317e4103sba_lookup-table.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,9 +43,9 @@ * @file vishay_ntcle317e4103sba_lookup-table.c * @author foxBMS Team * @date 2021-11-03 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup TEMPERATURE_SENSORS + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS * @prefix TS * * @brief Resistive divider used for measuring temperature diff --git a/src/app/driver/ts/vishay/ntcle317e4103sba/vishay_ntcle317e4103sba.c b/src/app/driver/ts/vishay/ntcle317e4103sba/vishay_ntcle317e4103sba.c index d53ee2c6..7c4be435 100644 --- a/src/app/driver/ts/vishay/ntcle317e4103sba/vishay_ntcle317e4103sba.c +++ b/src/app/driver/ts/vishay/ntcle317e4103sba/vishay_ntcle317e4103sba.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,9 +43,9 @@ * @file vishay_ntcle317e4103sba.c * @author foxBMS Team * @date 2021-11-03 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup TEMPERATURE_SENSORS + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS * @prefix TS * * @brief Resistive divider used for measuring temperature @@ -122,15 +122,27 @@ static const uint16_t ts_ntcle317e4103sbaLutSize = sizeof(ts_ntcle317e4103sbaLut */ #if defined(TS_VISHAY_NTCLE317E4103SBA_POSITION_IN_RESISTOR_DIVIDER_IS_R_1) && \ (TS_VISHAY_NTCLE317E4103SBA_POSITION_IN_RESISTOR_DIVIDER_IS_R_1 == true) -#define TS_VISHAY_NTCLE317E4103SBA_ADC_VOLTAGE_V_MAX_V \ - ((float_t)((TS_VISHAY_NTCLE317E4103SBA_RESISTOR_DIVIDER_SUPPLY_VOLTAGE_V * ts_ntcle317e4103sbaLut[ts_ntcle317e4103sbaLutSize-1u].resistance_Ohm) / (ts_ntcle317e4103sbaLut[ts_ntcle317e4103sbaLutSize-1u].resistance_Ohm+TS_VISHAY_NTCLE317E4103SBA_RESISTOR_DIVIDER_RESISTANCE_R_1_R_2_Ohm))) -#define TS_VISHAY_NTCLE317E4103SBA_ADC_VOLTAGE_V_MIN_V \ - ((float_t)((TS_VISHAY_NTCLE317E4103SBA_RESISTOR_DIVIDER_SUPPLY_VOLTAGE_V * ts_ntcle317e4103sbaLut[0u].resistance_Ohm) / (ts_ntcle317e4103sbaLut[0u].resistance_Ohm+TS_VISHAY_NTCLE317E4103SBA_RESISTOR_DIVIDER_RESISTANCE_R_1_R_2_Ohm))) +#define TS_VISHAY_NTCLE317E4103SBA_ADC_VOLTAGE_V_MAX_V \ + ((float_t)((TS_VISHAY_NTCLE317E4103SBA_RESISTOR_DIVIDER_SUPPLY_VOLTAGE_V * \ + ts_ntcle317e4103sbaLut[ts_ntcle317e4103sbaLutSize - 1u].resistance_Ohm) / \ + (ts_ntcle317e4103sbaLut[ts_ntcle317e4103sbaLutSize - 1u].resistance_Ohm + \ + TS_VISHAY_NTCLE317E4103SBA_RESISTOR_DIVIDER_RESISTANCE_R_1_R_2_Ohm))) +#define TS_VISHAY_NTCLE317E4103SBA_ADC_VOLTAGE_V_MIN_V \ + ((float_t)((TS_VISHAY_NTCLE317E4103SBA_RESISTOR_DIVIDER_SUPPLY_VOLTAGE_V * \ + ts_ntcle317e4103sbaLut[0u].resistance_Ohm) / \ + (ts_ntcle317e4103sbaLut[0u].resistance_Ohm + \ + TS_VISHAY_NTCLE317E4103SBA_RESISTOR_DIVIDER_RESISTANCE_R_1_R_2_Ohm))) #else /* TS_VISHAY_NTCLE317E4103SBA_POSITION_IN_RESISTOR_DIVIDER_IS_R_1 is false */ -#define TS_VISHAY_NTCLE317E4103SBA_ADC_VOLTAGE_V_MIN_V \ - ((float_t)((TS_VISHAY_NTCLE317E4103SBA_RESISTOR_DIVIDER_SUPPLY_VOLTAGE_V * ts_ntcle317e4103sbaLut[ts_ntcle317e4103sbaLutSize-1u].resistance_Ohm) / (ts_ntcle317e4103sbaLut[ts_ntcle317e4103sbaLutSize-1u].resistance_Ohm+TS_VISHAY_NTCLE317E4103SBA_RESISTOR_DIVIDER_RESISTANCE_R_1_R_2_Ohm))) -#define TS_VISHAY_NTCLE317E4103SBA_ADC_VOLTAGE_V_MAX_V \ - ((float_t)((TS_VISHAY_NTCLE317E4103SBA_RESISTOR_DIVIDER_SUPPLY_VOLTAGE_V * ts_ntcle317e4103sbaLut[0u].resistance_Ohm) / (ts_ntcle317e4103sbaLut[0u].resistance_Ohm+TS_VISHAY_NTCLE317E4103SBA_RESISTOR_DIVIDER_RESISTANCE_R_1_R_2_Ohm))) +#define TS_VISHAY_NTCLE317E4103SBA_ADC_VOLTAGE_V_MIN_V \ + ((float_t)((TS_VISHAY_NTCLE317E4103SBA_RESISTOR_DIVIDER_SUPPLY_VOLTAGE_V * \ + ts_ntcle317e4103sbaLut[ts_ntcle317e4103sbaLutSize - 1u].resistance_Ohm) / \ + (ts_ntcle317e4103sbaLut[ts_ntcle317e4103sbaLutSize - 1u].resistance_Ohm + \ + TS_VISHAY_NTCLE317E4103SBA_RESISTOR_DIVIDER_RESISTANCE_R_1_R_2_Ohm))) +#define TS_VISHAY_NTCLE317E4103SBA_ADC_VOLTAGE_V_MAX_V \ + ((float_t)((TS_VISHAY_NTCLE317E4103SBA_RESISTOR_DIVIDER_SUPPLY_VOLTAGE_V * \ + ts_ntcle317e4103sbaLut[0u].resistance_Ohm) / \ + (ts_ntcle317e4103sbaLut[0u].resistance_Ohm + \ + TS_VISHAY_NTCLE317E4103SBA_RESISTOR_DIVIDER_RESISTANCE_R_1_R_2_Ohm))) #endif /**@}*/ diff --git a/src/app/driver/ts/vishay/ntcle317e4103sba/vishay_ntcle317e4103sba.h b/src/app/driver/ts/vishay/ntcle317e4103sba/vishay_ntcle317e4103sba.h index ea8e9729..5f3bf9ab 100644 --- a/src/app/driver/ts/vishay/ntcle317e4103sba/vishay_ntcle317e4103sba.h +++ b/src/app/driver/ts/vishay/ntcle317e4103sba/vishay_ntcle317e4103sba.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file vishay_ntcle317e4103sba.h * @author foxBMS Team * @date 2021-10-29 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup TEMPERATURE_SENSORS + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS * @prefix TS * * @brief Resistive divider used for measuring temperature - * + * @details Schematics: * V_supply * --.-- * | diff --git a/src/app/driver/ts/vishay/ntcle413e2103f102l/lookup-table/vishay_ntcle413e2103f102l_lookup-table.c b/src/app/driver/ts/vishay/ntcle413e2103f102l/lookup-table/vishay_ntcle413e2103f102l_lookup-table.c index c260ef99..99a94a0b 100644 --- a/src/app/driver/ts/vishay/ntcle413e2103f102l/lookup-table/vishay_ntcle413e2103f102l_lookup-table.c +++ b/src/app/driver/ts/vishay/ntcle413e2103f102l/lookup-table/vishay_ntcle413e2103f102l_lookup-table.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,9 +43,9 @@ * @file vishay_ntcle413e2103f102l_lookup-table.c * @author foxBMS Team * @date 2021-11-03 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup TEMPERATURE_SENSORS + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS * @prefix TS * * @brief Resistive divider used for measuring temperature diff --git a/src/app/driver/ts/vishay/ntcle413e2103f102l/vishay_ntcle413e2103f102l.c b/src/app/driver/ts/vishay/ntcle413e2103f102l/vishay_ntcle413e2103f102l.c index 227c7402..27746aa2 100644 --- a/src/app/driver/ts/vishay/ntcle413e2103f102l/vishay_ntcle413e2103f102l.c +++ b/src/app/driver/ts/vishay/ntcle413e2103f102l/vishay_ntcle413e2103f102l.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,9 +43,9 @@ * @file vishay_ntcle413e2103f102l.c * @author foxBMS Team * @date 2021-11-03 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup TEMPERATURE_SENSORS + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS * @prefix TS * * @brief Resistive divider used for measuring temperature @@ -92,15 +92,27 @@ static const uint16_t ts_ntcle413e2103f102lLutSize = sizeof(ts_ntcle413e2103f102 */ #if defined(TS_VISHAY_NTCLE413E2103F102L_POSITION_IN_RESISTOR_DIVIDER_IS_R_1) && \ (TS_VISHAY_NTCLE413E2103F102L_POSITION_IN_RESISTOR_DIVIDER_IS_R_1 == true) -#define TS_VISHAY_NTCLE413E2103F102L_ADC_VOLTAGE_V_MAX_V \ - ((float_t)((TS_VISHAY_NTCLE413E2103F102L_RESISTOR_DIVIDER_SUPPLY_VOLTAGE_V * ts_ntcle413e2103f102lLut[ts_ntcle413e2103f102lLutSize-1u].resistance_Ohm) / (ts_ntcle413e2103f102lLut[ts_ntcle413e2103f102lLutSize-1u].resistance_Ohm+TS_VISHAY_NTCLE413E2103F102L_RESISTOR_DIVIDER_RESISTANCE_R_1_R_2_Ohm))) -#define TS_VISHAY_NTCLE413E2103F102L_ADC_VOLTAGE_V_MIN_V \ - ((float_t)((TS_VISHAY_NTCLE413E2103F102L_RESISTOR_DIVIDER_SUPPLY_VOLTAGE_V * ts_ntcle413e2103f102lLut[0u].resistance_Ohm) / (ts_ntcle413e2103f102lLut[0u].resistance_Ohm+TS_VISHAY_NTCLE413E2103F102L_RESISTOR_DIVIDER_RESISTANCE_R_1_R_2_Ohm))) +#define TS_VISHAY_NTCLE413E2103F102L_ADC_VOLTAGE_V_MAX_V \ + ((float_t)((TS_VISHAY_NTCLE413E2103F102L_RESISTOR_DIVIDER_SUPPLY_VOLTAGE_V * \ + ts_ntcle413e2103f102lLut[ts_ntcle413e2103f102lLutSize - 1u].resistance_Ohm) / \ + (ts_ntcle413e2103f102lLut[ts_ntcle413e2103f102lLutSize - 1u].resistance_Ohm + \ + TS_VISHAY_NTCLE413E2103F102L_RESISTOR_DIVIDER_RESISTANCE_R_1_R_2_Ohm))) +#define TS_VISHAY_NTCLE413E2103F102L_ADC_VOLTAGE_V_MIN_V \ + ((float_t)((TS_VISHAY_NTCLE413E2103F102L_RESISTOR_DIVIDER_SUPPLY_VOLTAGE_V * \ + ts_ntcle413e2103f102lLut[0u].resistance_Ohm) / \ + (ts_ntcle413e2103f102lLut[0u].resistance_Ohm + \ + TS_VISHAY_NTCLE413E2103F102L_RESISTOR_DIVIDER_RESISTANCE_R_1_R_2_Ohm))) #else /* TS_VISHAY_NTCLE413E2103F102L_POSITION_IN_RESISTOR_DIVIDER_IS_R_1 is false */ -#define TS_VISHAY_NTCLE413E2103F102L_ADC_VOLTAGE_V_MIN_V \ - ((float_t)((TS_VISHAY_NTCLE413E2103F102L_RESISTOR_DIVIDER_SUPPLY_VOLTAGE_V * ts_ntcle413e2103f102lLut[ts_ntcle413e2103f102lLutSize-1u].resistance_Ohm) / (ts_ntcle413e2103f102lLut[ts_ntcle413e2103f102lLutSize-1u].resistance_Ohm+TS_VISHAY_NTCLE413E2103F102L_RESISTOR_DIVIDER_RESISTANCE_R_1_R_2_Ohm))) -#define TS_VISHAY_NTCLE413E2103F102L_ADC_VOLTAGE_V_MAX_V \ - ((float_t)((TS_VISHAY_NTCLE413E2103F102L_RESISTOR_DIVIDER_SUPPLY_VOLTAGE_V * ts_ntcle413e2103f102lLut[0u].resistance_Ohm) / (ts_ntcle413e2103f102lLut[0u].resistance_Ohm+TS_VISHAY_NTCLE413E2103F102L_RESISTOR_DIVIDER_RESISTANCE_R_1_R_2_Ohm))) +#define TS_VISHAY_NTCLE413E2103F102L_ADC_VOLTAGE_V_MIN_V \ + ((float_t)((TS_VISHAY_NTCLE413E2103F102L_RESISTOR_DIVIDER_SUPPLY_VOLTAGE_V * \ + ts_ntcle413e2103f102lLut[ts_ntcle413e2103f102lLutSize - 1u].resistance_Ohm) / \ + (ts_ntcle413e2103f102lLut[ts_ntcle413e2103f102lLutSize - 1u].resistance_Ohm + \ + TS_VISHAY_NTCLE413E2103F102L_RESISTOR_DIVIDER_RESISTANCE_R_1_R_2_Ohm))) +#define TS_VISHAY_NTCLE413E2103F102L_ADC_VOLTAGE_V_MAX_V \ + ((float_t)((TS_VISHAY_NTCLE413E2103F102L_RESISTOR_DIVIDER_SUPPLY_VOLTAGE_V * \ + ts_ntcle413e2103f102lLut[0u].resistance_Ohm) / \ + (ts_ntcle413e2103f102lLut[0u].resistance_Ohm + \ + TS_VISHAY_NTCLE413E2103F102L_RESISTOR_DIVIDER_RESISTANCE_R_1_R_2_Ohm))) #endif /**@}*/ diff --git a/src/app/driver/ts/vishay/ntcle413e2103f102l/vishay_ntcle413e2103f102l.h b/src/app/driver/ts/vishay/ntcle413e2103f102l/vishay_ntcle413e2103f102l.h index d1eaed7a..8543f7d2 100644 --- a/src/app/driver/ts/vishay/ntcle413e2103f102l/vishay_ntcle413e2103f102l.h +++ b/src/app/driver/ts/vishay/ntcle413e2103f102l/vishay_ntcle413e2103f102l.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file vishay_ntcle413e2103f102l.h * @author foxBMS Team * @date 2021-10-29 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup TEMPERATURE_SENSORS + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS * @prefix TS * * @brief Resistive divider used for measuring temperature - * + * @details Circuit description * V_supply * --.-- * | diff --git a/src/app/driver/wscript b/src/app/driver/wscript old mode 100644 new mode 100755 index 9987f8bc..e5ba240d --- a/src/app/driver/wscript +++ b/src/app/driver/wscript @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -51,40 +50,43 @@ def build(bld): ts_man = bld.env.temperature_sensor_manuf ts_mod = bld.env.temperature_sensor_model ts_met = bld.env.temperature_sensor_meth + # fmt: off + # pylint: disable=line-too-long source = [ os.path.join("adc", "adc.c"), os.path.join("can", "can.c"), os.path.join("can", "cbs", "can_helper.c"), + os.path.join("can", "cbs", "tx-async", "can_cbs_tx_crash-dump.c"), + os.path.join("can", "cbs", "tx-async", "can_cbs_tx_debug-build-configuration.c"), + os.path.join("can", "cbs", "tx-async", "can_cbs_tx_debug-response.c"), + os.path.join("can", "cbs", "tx-async", "can_cbs_tx_debug-unsupported-multiplexer-values.c",), + os.path.join("can", "cbs", "tx-async", "can_cbs_tx_imd-request.c"), os.path.join("can", "cbs", "rx", "can_cbs_rx_aerosol-sensor.c"), + os.path.join("can", "cbs", "rx", "can_cbs_rx_cell-temperatures.c"), + os.path.join("can", "cbs", "rx", "can_cbs_rx_cell-voltages.c"), os.path.join("can", "cbs", "rx", "can_cbs_rx_current-sensor.c"), os.path.join("can", "cbs", "rx", "can_cbs_rx_imd-response.c"), os.path.join("can", "cbs", "rx", "can_cbs_rx_imd-info.c"), os.path.join("can", "cbs", "rx", "can_cbs_rx_debug.c"), os.path.join("can", "cbs", "rx", "can_cbs_rx_bms-state-request.c"), - os.path.join("can", "cbs", "tx", "can_cbs_tx_cell-temperatures.c"), - os.path.join("can", "cbs", "tx", "can_cbs_tx_cell-voltages.c"), - os.path.join("can", "cbs", "tx", "can_cbs_tx_debug-response.c"), - os.path.join("can", "cbs", "tx", "can_cbs_tx_crash-dump.c"), - os.path.join("can", "cbs", "tx", "can_cbs_tx_pack-limits.c"), - os.path.join("can", "cbs", "tx", "can_cbs_tx_pack-minimum-maximum-values.c"), - os.path.join("can", "cbs", "tx", "can_cbs_tx_string-minimum-maximum-values.c"), - os.path.join("can", "cbs", "tx", "can_cbs_tx_pack-state-estimation.c"), - os.path.join("can", "cbs", "tx", "can_cbs_tx_bms-state.c"), - os.path.join("can", "cbs", "tx", "can_cbs_tx_bms-state-details.c"), - os.path.join("can", "cbs", "tx", "can_cbs_tx_string-state.c"), - os.path.join("can", "cbs", "tx", "can_cbs_tx_string-state-estimation.c"), - os.path.join("can", "cbs", "tx", "can_cbs_tx_pack-values-p0.c"), - os.path.join("can", "cbs", "tx", "can_cbs_tx_pack-values-p1.c"), - os.path.join("can", "cbs", "tx", "can_cbs_tx_string-values-p0.c"), - os.path.join("can", "cbs", "tx", "can_cbs_tx_string-values-p1.c"), - os.path.join("can", "cbs", "tx", "can_cbs_tx_imd-request.c"), - os.path.join( - "can", "cbs", "tx", "can_cbs_tx_debug-unsupported-multiplexer-values.c" - ), + os.path.join("can", "cbs", "tx-cyclic", "can_cbs_tx_cell-temperatures.c"), + os.path.join("can", "cbs", "tx-cyclic", "can_cbs_tx_cell-voltages.c"), + os.path.join("can", "cbs", "tx-cyclic", "can_cbs_tx_pack-limits.c"), + os.path.join("can", "cbs", "tx-cyclic", "can_cbs_tx_pack-minimum-maximum-values.c"), + os.path.join("can", "cbs", "tx-cyclic", "can_cbs_tx_string-minimum-maximum-values.c"), + os.path.join("can", "cbs", "tx-cyclic", "can_cbs_tx_pack-state-estimation.c"), + os.path.join("can", "cbs", "tx-cyclic", "can_cbs_tx_bms-state.c"), + os.path.join("can", "cbs", "tx-cyclic", "can_cbs_tx_bms-state-details.c"), + os.path.join("can", "cbs", "tx-cyclic", "can_cbs_tx_string-state.c"), + os.path.join("can", "cbs", "tx-cyclic", "can_cbs_tx_string-state-estimation.c"), + os.path.join("can", "cbs", "tx-cyclic", "can_cbs_tx_pack-values-p0.c"), + os.path.join("can", "cbs", "tx-cyclic", "can_cbs_tx_pack-values-p1.c"), + os.path.join("can", "cbs", "tx-cyclic", "can_cbs_tx_string-values-p0.c"), + os.path.join("can", "cbs", "tx-cyclic", "can_cbs_tx_string-values-p1.c"), os.path.join("checksum", "checksum.c"), os.path.join("crc", "crc.c"), os.path.join("config", "contactor_cfg.c"), - os.path.join("config", "can_cfg_tx.c"), + os.path.join("config", "can_cfg_tx_cyclic.c"), os.path.join("config", "can_cfg_rx.c"), os.path.join("config", "can_cfg.c"), os.path.join("config", "dma_cfg.c"), @@ -118,13 +120,14 @@ def build(bld): os.path.join("ts", "epcos", "b57861s0103f045", "epcos_b57861s0103f045.c"), os.path.join("ts", "fake", "none", "fake_none.c"), os.path.join("ts", "murata", "ncxxxxh103", "murata_ncxxxxh103.c"), + os.path.join("ts", "semitec", "103jt", "semitec_103jt.c"), os.path.join("ts", "vishay", "ntcalug01a103g", "vishay_ntcalug01a103g.c"), os.path.join("ts", "vishay", "ntcle317e4103sba", "vishay_ntcle317e4103sba.c"), - os.path.join( - "ts", "vishay", "ntcle413e2103f102l", "vishay_ntcle413e2103f102l.c" - ), + os.path.join("ts", "vishay", "ntcle413e2103f102l", "vishay_ntcle413e2103f102l.c"), os.path.join("ts", "beta.c"), ] + # pylint: enable=line-too-long + # fmt: on includes = [ "adc", "can", @@ -151,7 +154,8 @@ def build(bld): "ts", os.path.join("can", "cbs"), os.path.join("can", "cbs", "rx"), - os.path.join("can", "cbs", "tx"), + os.path.join("can", "cbs", "tx-async"), + os.path.join("can", "cbs", "tx-cyclic"), os.path.join("imd"), os.path.join("imd", "bender", "iso165c"), os.path.join("imd", "bender", "iso165c", "config"), @@ -160,6 +164,7 @@ def build(bld): os.path.join("ts", "epcos", "b57861s0103f045"), os.path.join("ts", "fake", "none"), os.path.join("ts", "murata", "ncxxxxh103"), + os.path.join("ts", "semitec", "103jt"), os.path.join("ts", "vishay", "ntcalug01a103g"), os.path.join("ts", "vishay", "ntcle317e4103sba"), os.path.join("ts", "vishay", "ntcle413e2103f102l"), diff --git a/src/app/engine/config/database_cfg.c b/src/app/engine/config/database_cfg.c index 30f1207f..55fcb080 100644 --- a/src/app/engine/config/database_cfg.c +++ b/src/app/engine/config/database_cfg.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,15 +43,13 @@ * @file database_cfg.c * @author foxBMS Team * @date 2015-08-18 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup ENGINE_CONFIGURATION * @prefix DATA * * @brief Database configuration - * * @details Configuration of database module - * */ /*========== Includes =======================================================*/ @@ -102,9 +100,6 @@ static DATA_BLOCK_BALANCING_FEEDBACK_s data_blockFeedbackBalancingRedundancy0 = .header.uniqueId = DATA_BLOCK_ID_BALANCING_FEEDBACK_REDUNDANCY0}; /**@}*/ -/** data block: user mux */ -static DATA_BLOCK_USER_MUX_s data_blockUserMux = {.header.uniqueId = DATA_BLOCK_ID_USER_MUX}; - /** data block: open wire check */ /**@{*/ static DATA_BLOCK_OPEN_WIRE_s data_blockOpenWireBase = {.header.uniqueId = DATA_BLOCK_ID_OPEN_WIRE_BASE}; @@ -134,7 +129,7 @@ static DATA_BLOCK_INTERLOCK_FEEDBACK_s data_blockInterlockFeedback = { static DATA_BLOCK_SOF_s data_blockSof = {.header.uniqueId = DATA_BLOCK_ID_SOF}; /** data block: system state */ -static DATA_BLOCK_SYSTEM_STATE_s data_blockSystemstate = {.header.uniqueId = DATA_BLOCK_ID_SYSTEM_STATE}; +static DATA_BLOCK_SYSTEM_STATE_s data_blockSystemState = {.header.uniqueId = DATA_BLOCK_ID_SYSTEM_STATE}; /** data block: maximum safety limit violations */ static DATA_BLOCK_MSL_FLAG_s data_blockMsl = {.header.uniqueId = DATA_BLOCK_ID_MSL_FLAG}; @@ -155,7 +150,7 @@ static DATA_BLOCK_SOH_s data_blockSoh = {.header.uniqueId = DATA_BLOCK_ID_SOH}; static DATA_BLOCK_SOE_s data_blockSoe = {.header.uniqueId = DATA_BLOCK_ID_SOE}; /** data block: can state request */ -static DATA_BLOCK_STATE_REQUEST_s data_blockStaterequest = {.header.uniqueId = DATA_BLOCK_ID_STATE_REQUEST}; +static DATA_BLOCK_STATE_REQUEST_s data_blockStateRequest = {.header.uniqueId = DATA_BLOCK_ID_STATE_REQUEST}; /** data block: moving average */ static DATA_BLOCK_MOVING_AVERAGE_s data_blockMovingAverage = {.header.uniqueId = DATA_BLOCK_ID_MOVING_AVERAGE}; @@ -193,21 +188,20 @@ DATA_BASE_s data_database[] = { {(void *)(&data_blockControlBalancing), sizeof(DATA_BLOCK_BALANCING_CONTROL_s)}, {(void *)(&data_blockSlaveControl), sizeof(DATA_BLOCK_SLAVE_CONTROL_s)}, {(void *)(&data_blockFeedbackBalancingBase), sizeof(DATA_BLOCK_BALANCING_FEEDBACK_s)}, - {(void *)(&data_blockUserMux), sizeof(DATA_BLOCK_USER_MUX_s)}, {(void *)(&data_blockOpenWireBase), sizeof(DATA_BLOCK_OPEN_WIRE_s)}, {(void *)(&data_blockLtcAllGpioVoltagesBase), sizeof(DATA_BLOCK_ALL_GPIO_VOLTAGES_s)}, {(void *)(&data_blockErrors), sizeof(DATA_BLOCK_ERROR_STATE_s)}, {(void *)(&data_blockContactorFeedback), sizeof(DATA_BLOCK_CONTACTOR_FEEDBACK_s)}, {(void *)(&data_blockInterlockFeedback), sizeof(DATA_BLOCK_INTERLOCK_FEEDBACK_s)}, {(void *)(&data_blockSof), sizeof(DATA_BLOCK_SOF_s)}, - {(void *)(&data_blockSystemstate), sizeof(DATA_BLOCK_SYSTEM_STATE_s)}, + {(void *)(&data_blockSystemState), sizeof(DATA_BLOCK_SYSTEM_STATE_s)}, {(void *)(&data_blockMsl), sizeof(DATA_BLOCK_MSL_FLAG_s)}, {(void *)(&data_blockRsl), sizeof(DATA_BLOCK_RSL_FLAG_s)}, {(void *)(&data_blockMol), sizeof(DATA_BLOCK_MOL_FLAG_s)}, {(void *)(&data_blockSoc), sizeof(DATA_BLOCK_SOC_s)}, {(void *)(&data_blockSoh), sizeof(DATA_BLOCK_SOH_s)}, {(void *)(&data_blockSoe), sizeof(DATA_BLOCK_SOE_s)}, - {(void *)(&data_blockStaterequest), sizeof(DATA_BLOCK_STATE_REQUEST_s)}, + {(void *)(&data_blockStateRequest), sizeof(DATA_BLOCK_STATE_REQUEST_s)}, {(void *)(&data_blockMovingAverage), sizeof(DATA_BLOCK_MOVING_AVERAGE_s)}, {(void *)(&data_blockCellVoltageBase), sizeof(DATA_BLOCK_CELL_VOLTAGE_s)}, {(void *)(&data_blockCellTemperatureBase), sizeof(DATA_BLOCK_CELL_TEMPERATURE_s)}, diff --git a/src/app/engine/config/database_cfg.h b/src/app/engine/config/database_cfg.h index f829e6e4..f7d73039 100644 --- a/src/app/engine/config/database_cfg.h +++ b/src/app/engine/config/database_cfg.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,15 +43,13 @@ * @file database_cfg.h * @author foxBMS Team * @date 2015-08-18 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup ENGINE_CONFIGURATION * @prefix DATA * * @brief Database configuration header - * * @details Provides interfaces to database configuration - * */ #ifndef FOXBMS__DATABASE_CFG_H_ @@ -111,12 +109,11 @@ typedef enum { DATA_BLOCK_ID_SOH, DATA_BLOCK_ID_STATE_REQUEST, DATA_BLOCK_ID_SYSTEM_STATE, - DATA_BLOCK_ID_USER_MUX, DATA_BLOCK_ID_MAX, /**< DO NOT CHANGE, MUST BE THE LAST ENTRY */ } DATA_BLOCK_ID_e; FAS_STATIC_ASSERT( - (int16_t)DATA_BLOCK_ID_MAX < UINT8_MAX, + (int32_t)DATA_BLOCK_ID_MAX < (int32_t)UINT8_MAX, "Maximum number of database entries exceeds UINT8_MAX; adapted length " "checking in DATA_Initialize and DATA_IterateOverDatabaseEntries"); @@ -134,15 +131,14 @@ typedef struct { * respective database entry representation in enum DATA_BLOCK_ID_e. */ DATA_BLOCK_HEADER_s header; /*!< Data block header */ uint8_t state; /*!< for future use */ - int32_t stringVoltage_mV[BS_NR_OF_STRINGS]; /*!< uint: mV */ + int32_t stringVoltage_mV[BS_NR_OF_STRINGS]; /*!< cumulated cell voltage per string */ int16_t cellVoltage_mV[BS_NR_OF_STRINGS][BS_NR_OF_MODULES_PER_STRING] - [BS_NR_OF_CELL_BLOCKS_PER_MODULE]; /*!< unit: mV */ - uint64_t - invalidCellVoltage[BS_NR_OF_STRINGS] - [BS_NR_OF_MODULES_PER_STRING]; /*!< bitmask if voltages are valid. 0->valid, 1->invalid */ - uint16_t nrValidCellVoltages[BS_NR_OF_STRINGS]; /*!< number of valid voltages */ - uint32_t moduleVoltage_mV[BS_NR_OF_STRINGS][BS_NR_OF_MODULES_PER_STRING]; /*!< unit: mV */ - bool validModuleVoltage[BS_NR_OF_STRINGS][BS_NR_OF_MODULES_PER_STRING]; /*!< 0 -> if PEC okay; 1 -> PEC error */ + [BS_NR_OF_CELL_BLOCKS_PER_MODULE]; /*!< cell voltage */ + bool invalidCellVoltage[BS_NR_OF_STRINGS][BS_NR_OF_MODULES_PER_STRING] + [BS_NR_OF_CELL_BLOCKS_PER_MODULE]; /*!< false -> valid, true -> invalid */ + uint16_t nrValidCellVoltages[BS_NR_OF_STRINGS]; /*!< number of valid voltages */ + uint32_t moduleVoltage_mV[BS_NR_OF_STRINGS][BS_NR_OF_MODULES_PER_STRING]; /*!< cumulated cell voltage per module */ + bool validModuleVoltage[BS_NR_OF_STRINGS][BS_NR_OF_MODULES_PER_STRING]; /*!< */ } DATA_BLOCK_CELL_VOLTAGE_s; /** data block struct of cell temperatures */ @@ -154,9 +150,9 @@ typedef struct { uint8_t state; /*!< for future use */ int16_t cellTemperature_ddegC[BS_NR_OF_STRINGS][BS_NR_OF_MODULES_PER_STRING] [BS_NR_OF_TEMP_SENSORS_PER_MODULE]; /*!< unit: deci °C */ - uint16_t invalidCellTemperature - [BS_NR_OF_STRINGS][BS_NR_OF_MODULES_PER_STRING]; /*!< bitmask if temperatures are valid. 0->valid, 1->invalid */ - uint16_t nrValidTemperatures[BS_NR_OF_STRINGS]; /*!< number of valid temperatures in each string */ + bool invalidCellTemperature[BS_NR_OF_STRINGS][BS_NR_OF_MODULES_PER_STRING] + [BS_NR_OF_TEMP_SENSORS_PER_MODULE]; /*!< false -> valid, true -> invalid */ + uint16_t nrValidTemperatures[BS_NR_OF_STRINGS]; /*!< number of valid temperatures in each string */ } DATA_BLOCK_CELL_TEMPERATURE_s; /** data block struct of minimum and maximum values */ @@ -164,8 +160,7 @@ typedef struct { /* This struct needs to be at the beginning of every database entry. During * the initialization of a database struct, uniqueId must be set to the * respective database entry representation in enum DATA_BLOCK_ID_e. */ - DATA_BLOCK_HEADER_s header; /*!< Data block header */ - + DATA_BLOCK_HEADER_s header; /*!< Data block header */ int16_t averageCellVoltage_mV[BS_NR_OF_STRINGS]; /*!< average cell voltages, unit: mV */ int16_t minimumCellVoltage_mV[BS_NR_OF_STRINGS]; /*!< minimum cell voltages, unit: mV */ int16_t previousMinimumCellVoltage_mV[BS_NR_OF_STRINGS]; /*!< previous minimum cell voltages, unit: mV */ @@ -184,7 +179,6 @@ typedef struct { uint16_t nrModuleMaximumTemperature[BS_NR_OF_STRINGS]; /*!< number of the module with maximum temperature */ uint16_t nrSensorMaximumTemperature[BS_NR_OF_STRINGS]; /*!< number of the sensor with maximum temperature */ uint16_t validMeasuredCellTemperatures[BS_NR_OF_STRINGS]; /*!< number of valid measured cell temperatures */ - uint8_t state; /*!< state of the min max module */ } DATA_BLOCK_MIN_MAX_s; /** data block struct of pack measurement values */ @@ -192,17 +186,16 @@ typedef struct { /* This struct needs to be at the beginning of every database entry. During * the initialization of a database struct, uniqueId must be set to the * respective database entry representation in enum DATA_BLOCK_ID_e. */ - DATA_BLOCK_HEADER_s header; /*!< Data block header */ - - int32_t packCurrent_mA; /*!< current in the whole battery pack, unit: mA */ - uint8_t invalidPackCurrent; /*!< bitmask if current is valid. 0->valid, 1->invalid */ - int32_t batteryVoltage_mV; /*!< voltage between negative and positive battery pole, unit: mV */ - uint8_t invalidBatteryVoltage; /*!< bitmask if voltage is valid. 0->valid, 1->invalid */ - int32_t - highVoltageBusVoltage_mV; /*!< voltage between negative battery pole and after positive main contactor, unit: mV */ - uint8_t invalidHvBusVoltage; /*!< bitmask if voltage is valid. 0->valid, 1->invalid */ - int32_t packPower_W; /*!< power provided by respectively supplied to the battery pack, unit: W */ - uint8_t invalidPackPower; /*!< bitmask if power is valid. 0->valid, 1->invalid */ + DATA_BLOCK_HEADER_s header; /*!< Data block header */ + int32_t packCurrent_mA; /*!< current in the whole battery pack, unit: mA */ + uint8_t invalidPackCurrent; /*!< bitmask if current is valid. 0->valid, 1->invalid */ + int32_t batteryVoltage_mV; /*!< voltage between negative and positive battery pole, unit: mV */ + uint8_t invalidBatteryVoltage; /*!< bitmask if voltage is valid. 0->valid, 1->invalid */ + int32_t highVoltageBusVoltage_mV; /*!< voltage between negative battery pole and after positive main contactor, + unit: mV */ + uint8_t invalidHvBusVoltage; /*!< bitmask if voltage is valid. 0->valid, 1->invalid */ + int32_t packPower_W; /*!< power provided by respectively supplied to the battery pack, unit: W */ + uint8_t invalidPackPower; /*!< bitmask if power is valid. 0->valid, 1->invalid */ int32_t stringVoltage_mV[BS_NR_OF_STRINGS]; /*!< voltage of each string, unit: mV */ uint8_t invalidStringVoltage[BS_NR_OF_STRINGS]; /*!< bitmask if voltages are valid. 0->valid, 1->invalid */ int32_t stringCurrent_mA[BS_NR_OF_STRINGS]; /*!< current in each string, unit: mA */ @@ -237,12 +230,13 @@ typedef struct { uint8_t invalidEnergyCountingMeasurement[BS_NR_OF_STRINGS]; /*!< 0: measurement valid, 1: measurement invalid */ uint32_t previousTimestampEnergyCounting[BS_NR_OF_STRINGS]; /*!< previous timestamp of EC measurement */ uint32_t timestampEnergyCounting[BS_NR_OF_STRINGS]; /*!< timestamp of EC measurement */ - uint8_t invalidHighVoltageMeasurement - [BS_NR_OF_STRINGS][BS_NR_OF_VOLTAGES_FROM_CURRENT_SENSOR]; /*!< 0: measurement valid, 1: measurement invalid */ + uint8_t invalidHighVoltageMeasurement[BS_NR_OF_STRINGS] + [BS_NR_OF_VOLTAGES_FROM_CURRENT_SENSOR]; /*!< 0: measurement valid, 1: + measurement invalid */ int32_t highVoltage_mV[BS_NR_OF_STRINGS][BS_NR_OF_VOLTAGES_FROM_CURRENT_SENSOR]; /*!< unit: mV */ - uint32_t previousTimestampHighVoltage - [BS_NR_OF_STRINGS] - [BS_NR_OF_VOLTAGES_FROM_CURRENT_SENSOR]; /*!< previous timestamp of high voltage measurement */ + uint32_t previousTimestampHighVoltage[BS_NR_OF_STRINGS] + [BS_NR_OF_VOLTAGES_FROM_CURRENT_SENSOR]; /*!< previous timestamp of high + voltage measurement */ uint32_t timestampHighVoltage[BS_NR_OF_STRINGS] [BS_NR_OF_VOLTAGES_FROM_CURRENT_SENSOR]; /*!< timestamp of high voltage measurement */ } DATA_BLOCK_CURRENT_SENSOR_s; @@ -253,13 +247,13 @@ typedef struct { * the initialization of a database struct, uniqueId must be set to the * respective database entry representation in enum DATA_BLOCK_ID_e. */ DATA_BLOCK_HEADER_s header; /*!< Data block header */ - uint8_t enableBalancing; /*!< Switch for enabling/disabling balancing */ + bool enableBalancing; /*!< Switch for enabling/disabling balancing */ uint8_t threshold_mV; /*!< balancing threshold in mV */ uint8_t request; /*!< balancing request per CAN */ - uint8_t balancingState[BS_NR_OF_STRINGS] - [BS_NR_OF_CELL_BLOCKS_PER_STRING]; /*!< 0: no balancing, 1: balancing active */ - uint32_t deltaCharge_mAs[BS_NR_OF_STRINGS] - [BS_NR_OF_CELL_BLOCKS_PER_STRING]; /*!< Difference in Depth-of-Discharge in mAs */ + bool activateBalancing[BS_NR_OF_STRINGS][BS_NR_OF_MODULES_PER_STRING] + [BS_NR_OF_CELL_BLOCKS_PER_MODULE]; /*!< 0: no balancing, 1: balancing active */ + uint32_t deltaCharge_mAs[BS_NR_OF_STRINGS][BS_NR_OF_MODULES_PER_STRING] + [BS_NR_OF_CELL_BLOCKS_PER_MODULE]; /*!< Difference in Depth-of-Discharge in mAs */ uint16_t nrBalancedCells[BS_NR_OF_STRINGS]; } DATA_BLOCK_BALANCING_CONTROL_s; @@ -292,16 +286,6 @@ typedef struct { uint16_t value[BS_NR_OF_STRINGS][BS_NR_OF_MODULES_PER_STRING]; /*!< unit: mV (optocoupler output) */ } DATA_BLOCK_BALANCING_FEEDBACK_s; -/** data block struct of user multiplexer values */ -typedef struct { - /* This struct needs to be at the beginning of every database entry. During - * the initialization of a database struct, uniqueId must be set to the - * respective database entry representation in enum DATA_BLOCK_ID_e. */ - DATA_BLOCK_HEADER_s header; /*!< Data block header */ - uint8_t state; /*!< for future use */ - uint16_t value[BS_NR_OF_STRINGS][8u * 2u * BS_NR_OF_MODULES_PER_STRING]; /*!< unit: mV (mux voltage input) */ -} DATA_BLOCK_USER_MUX_s; - /** data block struct of cell open wire */ typedef struct { /* This struct needs to be at the beginning of every database entry. During @@ -324,9 +308,8 @@ typedef struct { uint8_t state; /*!< for future use */ int16_t gpioVoltages_mV[BS_NR_OF_STRINGS][BS_NR_OF_MODULES_PER_STRING * BS_NR_OF_GPIOS_PER_MODULE]; /*!< unit: mV */ int16_t gpaVoltages_mV[BS_NR_OF_STRINGS][BS_NR_OF_MODULES_PER_STRING * BS_NR_OF_GPAS_PER_MODULE]; /*!< unit: mV */ - uint16_t - invalidGpioVoltages[BS_NR_OF_STRINGS] - [BS_NR_OF_MODULES_PER_STRING]; /*!< bitmask if voltages are valid. 0->valid, 1->invalid */ + uint16_t invalidGpioVoltages[BS_NR_OF_STRINGS][BS_NR_OF_MODULES_PER_STRING]; /*!< bitmask if voltages are valid. + 0->valid, 1->invalid */ } DATA_BLOCK_ALL_GPIO_VOLTAGES_s; /** data block struct of error flags */ @@ -374,8 +357,8 @@ typedef struct { bool insulationMeasurementInvalidError; /*!< false -> no error, true -> error */ bool criticalLowInsulationResistanceError; /*!< false -> no critical resistance , true -> critical low resistance */ bool warnableLowInsulationResistanceError; /*!< false -> no warnable resistance, true -> warnable low resistance */ - bool - insulationGroundFaultDetectedError; /*!< false -> no insulation fault between HV and chassis detected, true -> insulation fault detected */ + bool insulationGroundFaultDetectedError; /*!< false -> no insulation fault between HV and chassis detected, true -> + insulation fault detected */ bool prechargeAbortedDueToVoltage[BS_NR_OF_STRINGS]; /*!< false -> no error, true -> error */ bool prechargeAbortedDueToCurrent[BS_NR_OF_STRINGS]; /*!< false -> no error, true -> error */ bool deepDischargeDetectedError[BS_NR_OF_STRINGS]; /*!< false -> no error, true -> error */ @@ -430,10 +413,10 @@ typedef struct { recommendedContinuousPackDischargeCurrent_mA; /*!< recommended continuous operating pack discharge current */ float_t recommendedPeakPackChargeCurrent_mA; /*!< recommended peak operating pack charge current */ float_t recommendedPeakPackDischargeCurrent_mA; /*!< recommended peak operating pack discharge current */ - float_t recommendedContinuousChargeCurrent_mA - [BS_NR_OF_STRINGS]; /*!< recommended continuous operating charge current */ - float_t recommendedContinuousDischargeCurrent_mA - [BS_NR_OF_STRINGS]; /*!< recommended continuous operating discharge current */ + float_t + recommendedContinuousChargeCurrent_mA[BS_NR_OF_STRINGS]; /*!< recommended continuous operating charge current */ + float_t recommendedContinuousDischargeCurrent_mA[BS_NR_OF_STRINGS]; /*!< recommended continuous operating discharge + current */ float_t recommendedPeakChargeCurrent_mA[BS_NR_OF_STRINGS]; /*!< recommended peak operating charge current */ float_t recommendedPeakDischargeCurrent_mA[BS_NR_OF_STRINGS]; /*!< recommended peak operating discharge current */ } DATA_BLOCK_SOF_s; @@ -514,10 +497,12 @@ typedef struct { /* This struct needs to be at the beginning of every database entry. During * the initialization of a database struct, uniqueId must be set to the * respective database entry representation in enum DATA_BLOCK_ID_e. */ - DATA_BLOCK_HEADER_s header; /*!< Data block header */ - float_t averageSoc_perc[BS_NR_OF_STRINGS]; /*!< 0.0 <= averageSoc <= 100.0 */ - float_t minimumSoc_perc[BS_NR_OF_STRINGS]; /*!< 0.0 <= minSoc <= 100.0 */ - float_t maximumSoc_perc[BS_NR_OF_STRINGS]; /*!< 0.0 <= maxSoc <= 100.0 */ + DATA_BLOCK_HEADER_s header; /*!< Data block header */ + float_t averageSoc_perc[BS_NR_OF_STRINGS]; /*!< 0.0 <= averageSoc <= 100.0 */ + float_t minimumSoc_perc[BS_NR_OF_STRINGS]; /*!< 0.0 <= minSoc <= 100.0 */ + float_t maximumSoc_perc[BS_NR_OF_STRINGS]; /*!< 0.0 <= maxSoc <= 100.0 */ + float_t chargeThroughput_As[BS_NR_OF_STRINGS]; /*Summation of all charges */ + float_t dischargeThroughput_As[BS_NR_OF_STRINGS]; /*Summation of all discharges */ } DATA_BLOCK_SOC_s; /** data block struct of SOH */ @@ -536,13 +521,15 @@ typedef struct { /* This struct needs to be at the beginning of every database entry. During * the initialization of a database struct, uniqueId must be set to the * respective database entry representation in enum DATA_BLOCK_ID_e. */ - DATA_BLOCK_HEADER_s header; /*!< Data block header */ - float_t averageSoe_perc[BS_NR_OF_STRINGS]; /*!< 0.0 <= averageSoe <= 100.0 */ - float_t minimumSoe_perc[BS_NR_OF_STRINGS]; /*!< 0.0 <= minimumSoe <= 100.0 */ - float_t maximumSoe_perc[BS_NR_OF_STRINGS]; /*!< 0.0 <= maximumSoe <= 100.0 */ - uint32_t maximumSoe_Wh[BS_NR_OF_STRINGS]; /*!< maximum string energy in Wh */ - uint32_t averageSoe_Wh[BS_NR_OF_STRINGS]; /*!< average string energy in Wh */ - uint32_t minimumSoe_Wh[BS_NR_OF_STRINGS]; /*!< minimum string energy in Wh */ + DATA_BLOCK_HEADER_s header; /*!< Data block header */ + float_t averageSoe_perc[BS_NR_OF_STRINGS]; /*!< 0.0 <= averageSoe <= 100.0 */ + float_t minimumSoe_perc[BS_NR_OF_STRINGS]; /*!< 0.0 <= minimumSoe <= 100.0 */ + float_t maximumSoe_perc[BS_NR_OF_STRINGS]; /*!< 0.0 <= maximumSoe <= 100.0 */ + uint32_t maximumSoe_Wh[BS_NR_OF_STRINGS]; /*!< maximum string energy in Wh */ + uint32_t averageSoe_Wh[BS_NR_OF_STRINGS]; /*!< average string energy in Wh */ + uint32_t minimumSoe_Wh[BS_NR_OF_STRINGS]; /*!< minimum string energy in Wh */ + float_t chargeEnergyThroughput_Wh[BS_NR_OF_STRINGS]; /*!< inflow of energy */ + float_t dischargeEnergyThroughput_Wh[BS_NR_OF_STRINGS]; /*!< outflow of energy */ } DATA_BLOCK_SOE_s; /** data block struct of can state request */ @@ -586,10 +573,10 @@ typedef struct { bool isImdRunning; /*!< true -> Insulation resistance measurement active, false -> not active */ bool isInsulationMeasurementValid; /*!< true -> resistance value valid, false -> resistance unreliable */ uint32_t insulationResistance_kOhm; /*!< insulation resistance measured in kOhm */ - bool - areDeviceFlagsValid; /*!< true -> flags below this database entry valid, false -> flags unreliable e.g. if device error detected */ - bool - dfIsCriticalResistanceDetected; /*!< device status flag: false -> resistance value okay, true -> resistance value too low/error */ + bool areDeviceFlagsValid; /*!< true -> flags below this database entry valid, false -> flags unreliable e.g. if + device error detected */ + bool dfIsCriticalResistanceDetected; /*!< device status flag: false -> resistance value okay, true -> resistance + value too low/error */ bool dfIsWarnableResistanceDetected; /*!< true: warning threshold violated, false: no warning active */ bool dfIsChassisFaultDetected; /*!< true: short between HV potential and chassis detected, false: no error */ bool dfIsChassisShortToHvPlus; /*!< true: bias/tendency to the location of the insulation fault to HV plus */ diff --git a/src/app/engine/config/diag_cfg.c b/src/app/engine/config/diag_cfg.c index 1272d637..cc0ae5db 100644 --- a/src/app/engine/config/diag_cfg.c +++ b/src/app/engine/config/diag_cfg.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,12 @@ * @file diag_cfg.c * @author foxBMS Team * @date 2019-11-28 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup ENGINE_CONFIGURATION * @prefix DIAG * * @brief Diagnostic module configuration - * * @details The configuration of the different diagnosis events defined in * diag_cfg.h is set in the array diag_diagnosisIdConfiguration[], * e.g., initialization errors or runtime errors. @@ -117,8 +116,6 @@ const DIAG_DATABASE_SHIM_s diag_kDatabaseShim = { .pTableMsl = &diag_tableMslFlags, }; -/*========== Static Function Prototypes =====================================*/ - /*========== Extern Constant and Variable Definitions =======================*/ /** variable tracking the state of the diag channels */ DIAG_ID_CFG_s diag_diagnosisIdConfiguration[] = { @@ -244,6 +241,8 @@ DIAG_DEV_s diag_device = { .pFatalErrorLinkTable = {GEN_REPEAT_U(NULL_PTR, GEN_STRIP(DIAG_ID_MAX_FOR_INIT))}, }; +/*========== Static Function Prototypes =====================================*/ + /*========== Static Function Implementations ================================*/ /*========== Extern Function Implementations ================================*/ diff --git a/src/app/engine/config/diag_cfg.h b/src/app/engine/config/diag_cfg.h index 7c0530f9..d1a82e79 100644 --- a/src/app/engine/config/diag_cfg.h +++ b/src/app/engine/config/diag_cfg.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file diag_cfg.h * @author foxBMS Team * @date 2019-11-28 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup ENGINE_CONFIGURATION * @prefix DIAG * @@ -181,72 +181,96 @@ typedef enum { DIAG_ID_AFE_COM_INTEGRITY, /*!< error on the communication integrity of the AFE, e.g. PEC error for LTC */ DIAG_ID_AFE_MUX, /*!< the multiplexer that is connected to the AFE does not react in an expected way */ DIAG_ID_AFE_CONFIG, /*!< the AFE driver has recognized a configuration error */ - DIAG_ID_CAN_TIMING, /*!< the BMS does not receive CAN messages or they are not inside the expected timing constraints */ + DIAG_ID_CAN_TIMING, /*!< the BMS does not receive CAN messages or they are not inside the expected timing + * constraints + */ DIAG_ID_CAN_RX_QUEUE_FULL, /*!< the reception queue of the driver is full; no new messages can be received */ DIAG_ID_CAN_TX_QUEUE_FULL, /*!< the transmission queue of the driver is full; all new messages will be lost */ - DIAG_ID_CAN_CC_RESPONDING, /*!< current counter measurements on the CAN bus are missing or not inside expected timing constraints */ - DIAG_ID_CAN_EC_RESPONDING, /*!< energy counter measurements on the CAN bus are missing or not inside expected timing constraints */ - DIAG_ID_CURRENT_SENSOR_RESPONDING, /*!< current sensor measurements on the CAN bus are missing or not inside expected timing constraints */ - DIAG_ID_PLAUSIBILITY_CELL_VOLTAGE, /*!< redundant measurement of the cell voltages has returned implausible values */ - DIAG_ID_AFE_CELL_VOLTAGE_MEAS_ERROR, /*!< the AFE driver has determined a cell voltage measurement to be implausible */ - DIAG_ID_AFE_CELL_TEMPERATURE_MEAS_ERROR, /*!< the AFE driver has determined a cell temperature measurement to be implausible */ - DIAG_ID_PLAUSIBILITY_CELL_TEMP, /*!< redundant measurement of the cell temperatures has returned implausible values */ - DIAG_ID_PLAUSIBILITY_CELL_VOLTAGE_SPREAD, /*!< the spread (difference between min and max values) of the cell voltages is implausibly high */ - DIAG_ID_PLAUSIBILITY_CELL_TEMPERATURE_SPREAD, /*!< the spread (difference between min and max values) of the cell temperatures is implausibly high */ - DIAG_ID_CELL_VOLTAGE_OVERVOLTAGE_MSL, /*!< Cell voltage limits violated */ - DIAG_ID_CELL_VOLTAGE_OVERVOLTAGE_RSL, /*!< Cell voltage limits violated */ - DIAG_ID_CELL_VOLTAGE_OVERVOLTAGE_MOL, /*!< Cell voltage limits violated */ - DIAG_ID_CELL_VOLTAGE_UNDERVOLTAGE_MSL, /*!< Cell voltage limits violated */ - DIAG_ID_CELL_VOLTAGE_UNDERVOLTAGE_RSL, /*!< Cell voltage limits violated */ - DIAG_ID_CELL_VOLTAGE_UNDERVOLTAGE_MOL, /*!< Cell voltage limits violated */ - DIAG_ID_TEMP_OVERTEMPERATURE_CHARGE_MSL, /*!< Temperature limits violated */ - DIAG_ID_TEMP_OVERTEMPERATURE_CHARGE_RSL, /*!< Temperature limits violated */ - DIAG_ID_TEMP_OVERTEMPERATURE_CHARGE_MOL, /*!< Temperature limits violated */ - DIAG_ID_TEMP_OVERTEMPERATURE_DISCHARGE_MSL, /*!< Temperature limits violated */ - DIAG_ID_TEMP_OVERTEMPERATURE_DISCHARGE_RSL, /*!< Temperature limits violated */ - DIAG_ID_TEMP_OVERTEMPERATURE_DISCHARGE_MOL, /*!< Temperature limits violated */ - DIAG_ID_TEMP_UNDERTEMPERATURE_CHARGE_MSL, /*!< Temperature limits violated */ - DIAG_ID_TEMP_UNDERTEMPERATURE_CHARGE_RSL, /*!< Temperature limits violated */ - DIAG_ID_TEMP_UNDERTEMPERATURE_CHARGE_MOL, /*!< Temperature limits violated */ - DIAG_ID_TEMP_UNDERTEMPERATURE_DISCHARGE_MSL, /*!< Temperature limits violated */ - DIAG_ID_TEMP_UNDERTEMPERATURE_DISCHARGE_RSL, /*!< Temperature limits violated */ - DIAG_ID_TEMP_UNDERTEMPERATURE_DISCHARGE_MOL, /*!< Temperature limits violated */ - DIAG_ID_OVERCURRENT_CHARGE_CELL_MSL, /*!< Overcurrent on cell-level */ - DIAG_ID_OVERCURRENT_CHARGE_CELL_RSL, /*!< Overcurrent on cell-level */ - DIAG_ID_OVERCURRENT_CHARGE_CELL_MOL, /*!< Overcurrent on cell-level */ - DIAG_ID_OVERCURRENT_DISCHARGE_CELL_MSL, /*!< Overcurrent on cell-level */ - DIAG_ID_OVERCURRENT_DISCHARGE_CELL_RSL, /*!< Overcurrent on cell-level */ - DIAG_ID_OVERCURRENT_DISCHARGE_CELL_MOL, /*!< Overcurrent on cell-level */ - DIAG_ID_STRING_OVERCURRENT_CHARGE_MSL, /*!< Overcurrent on string-level */ - DIAG_ID_STRING_OVERCURRENT_CHARGE_RSL, /*!< Overcurrent on string-level */ - DIAG_ID_STRING_OVERCURRENT_CHARGE_MOL, /*!< Overcurrent on string-level */ - DIAG_ID_STRING_OVERCURRENT_DISCHARGE_MSL, /*!< Overcurrent on string-level */ - DIAG_ID_STRING_OVERCURRENT_DISCHARGE_RSL, /*!< Overcurrent on string-level */ - DIAG_ID_STRING_OVERCURRENT_DISCHARGE_MOL, /*!< Overcurrent on string-level */ - DIAG_ID_PACK_OVERCURRENT_CHARGE_MSL, /*!< Overcurrent on string-level */ - DIAG_ID_PACK_OVERCURRENT_DISCHARGE_MSL, /*!< Overcurrent on pack-level */ - DIAG_ID_CURRENT_ON_OPEN_STRING, /*!< Current flowing on open string */ - DIAG_ID_DEEP_DISCHARGE_DETECTED, /*!< the deep discharge flag has been set in persistent memory */ + DIAG_ID_CAN_CC_RESPONDING, /*!< current counter measurements on the CAN bus are missing or not inside expected + timing constraints */ + DIAG_ID_CAN_EC_RESPONDING, /*!< energy counter measurements on the CAN bus are missing or not inside expected timing + constraints */ + DIAG_ID_CURRENT_SENSOR_RESPONDING, /*!< current sensor measurements on the CAN bus are missing or not inside + expected timing constraints */ + DIAG_ID_PLAUSIBILITY_CELL_VOLTAGE, /*!< redundant measurement of the cell voltages has returned implausible values + */ + DIAG_ID_AFE_CELL_VOLTAGE_MEAS_ERROR, /*!< the AFE driver has determined a cell voltage measurement to be implausible + */ + DIAG_ID_AFE_CELL_TEMPERATURE_MEAS_ERROR, /*!< the AFE driver has determined a cell temperature measurement to be + implausible */ + DIAG_ID_PLAUSIBILITY_CELL_TEMP, /*!< redundant measurement of the cell temperatures has returned implausible values + */ + DIAG_ID_PLAUSIBILITY_CELL_VOLTAGE_SPREAD, /*!< the spread (difference between min and max values) of the cell + voltages is implausibly high */ + DIAG_ID_PLAUSIBILITY_CELL_TEMPERATURE_SPREAD, /*!< the spread (difference between min and max values) of the cell + temperatures is implausibly high */ + DIAG_ID_CELL_VOLTAGE_OVERVOLTAGE_MSL, /*!< Cell voltage limits violated */ + DIAG_ID_CELL_VOLTAGE_OVERVOLTAGE_RSL, /*!< Cell voltage limits violated */ + DIAG_ID_CELL_VOLTAGE_OVERVOLTAGE_MOL, /*!< Cell voltage limits violated */ + DIAG_ID_CELL_VOLTAGE_UNDERVOLTAGE_MSL, /*!< Cell voltage limits violated */ + DIAG_ID_CELL_VOLTAGE_UNDERVOLTAGE_RSL, /*!< Cell voltage limits violated */ + DIAG_ID_CELL_VOLTAGE_UNDERVOLTAGE_MOL, /*!< Cell voltage limits violated */ + DIAG_ID_TEMP_OVERTEMPERATURE_CHARGE_MSL, /*!< Temperature limits violated */ + DIAG_ID_TEMP_OVERTEMPERATURE_CHARGE_RSL, /*!< Temperature limits violated */ + DIAG_ID_TEMP_OVERTEMPERATURE_CHARGE_MOL, /*!< Temperature limits violated */ + DIAG_ID_TEMP_OVERTEMPERATURE_DISCHARGE_MSL, /*!< Temperature limits violated */ + DIAG_ID_TEMP_OVERTEMPERATURE_DISCHARGE_RSL, /*!< Temperature limits violated */ + DIAG_ID_TEMP_OVERTEMPERATURE_DISCHARGE_MOL, /*!< Temperature limits violated */ + DIAG_ID_TEMP_UNDERTEMPERATURE_CHARGE_MSL, /*!< Temperature limits violated */ + DIAG_ID_TEMP_UNDERTEMPERATURE_CHARGE_RSL, /*!< Temperature limits violated */ + DIAG_ID_TEMP_UNDERTEMPERATURE_CHARGE_MOL, /*!< Temperature limits violated */ + DIAG_ID_TEMP_UNDERTEMPERATURE_DISCHARGE_MSL, /*!< Temperature limits violated */ + DIAG_ID_TEMP_UNDERTEMPERATURE_DISCHARGE_RSL, /*!< Temperature limits violated */ + DIAG_ID_TEMP_UNDERTEMPERATURE_DISCHARGE_MOL, /*!< Temperature limits violated */ + DIAG_ID_OVERCURRENT_CHARGE_CELL_MSL, /*!< Overcurrent on cell-level */ + DIAG_ID_OVERCURRENT_CHARGE_CELL_RSL, /*!< Overcurrent on cell-level */ + DIAG_ID_OVERCURRENT_CHARGE_CELL_MOL, /*!< Overcurrent on cell-level */ + DIAG_ID_OVERCURRENT_DISCHARGE_CELL_MSL, /*!< Overcurrent on cell-level */ + DIAG_ID_OVERCURRENT_DISCHARGE_CELL_RSL, /*!< Overcurrent on cell-level */ + DIAG_ID_OVERCURRENT_DISCHARGE_CELL_MOL, /*!< Overcurrent on cell-level */ + DIAG_ID_STRING_OVERCURRENT_CHARGE_MSL, /*!< Overcurrent on string-level */ + DIAG_ID_STRING_OVERCURRENT_CHARGE_RSL, /*!< Overcurrent on string-level */ + DIAG_ID_STRING_OVERCURRENT_CHARGE_MOL, /*!< Overcurrent on string-level */ + DIAG_ID_STRING_OVERCURRENT_DISCHARGE_MSL, /*!< Overcurrent on string-level */ + DIAG_ID_STRING_OVERCURRENT_DISCHARGE_RSL, /*!< Overcurrent on string-level */ + DIAG_ID_STRING_OVERCURRENT_DISCHARGE_MOL, /*!< Overcurrent on string-level */ + DIAG_ID_PACK_OVERCURRENT_CHARGE_MSL, /*!< Overcurrent on string-level */ + DIAG_ID_PACK_OVERCURRENT_DISCHARGE_MSL, /*!< Overcurrent on pack-level */ + DIAG_ID_CURRENT_ON_OPEN_STRING, /*!< Current flowing on open string */ + DIAG_ID_DEEP_DISCHARGE_DETECTED, /*!< the deep discharge flag has been set in persistent memory */ DIAG_ID_AFE_OPEN_WIRE, /*!< an open (broken) sense wire has been detected on the battery cell measurement */ DIAG_ID_PLAUSIBILITY_PACK_VOLTAGE, /*!< the plausibility module has decided that the pack voltage is implausible */ DIAG_ID_INTERLOCK_FEEDBACK, /*!< the interlock feedback indicates it to be open (but it is expected to be closed) */ - DIAG_ID_STRING_MINUS_CONTACTOR_FEEDBACK, /*!< the feedback on a string minus contactor does not match the expected value */ - DIAG_ID_STRING_PLUS_CONTACTOR_FEEDBACK, /*!< the feedback on a string plus contactor does not match the expected value */ - DIAG_ID_PRECHARGE_CONTACTOR_FEEDBACK, /*!< the feedback on a precharge contactor does not match the expected value */ + DIAG_ID_STRING_MINUS_CONTACTOR_FEEDBACK, /*!< the feedback on a string minus contactor does not match the expected + value */ + DIAG_ID_STRING_PLUS_CONTACTOR_FEEDBACK, /*!< the feedback on a string plus contactor does not match the expected + * value + */ + DIAG_ID_PRECHARGE_CONTACTOR_FEEDBACK, /*!< the feedback on a precharge contactor does not match the expected value + */ DIAG_ID_SBC_FIN_STATE, /*!< the state of the FIN signal in the SBC is not ok */ DIAG_ID_SBC_RSTB_STATE, /*!< an activation of the RSTB pin of the SBC has been detected */ - DIAG_ID_BASE_CELL_VOLTAGE_MEASUREMENT_TIMEOUT, /*!< the redundancy module has detected that the base cell voltage measurements are missing */ - DIAG_ID_REDUNDANCY0_CELL_VOLTAGE_MEASUREMENT_TIMEOUT, /*!< the redundancy module has detected that the redundancy0 cell voltage measurements are missing */ - DIAG_ID_BASE_CELL_TEMPERATURE_MEASUREMENT_TIMEOUT, /*!< the redundancy module has detected that the base cell temperature measurements are missing */ - DIAG_ID_REDUNDANCY0_CELL_TEMPERATURE_MEASUREMENT_TIMEOUT, /*!< the redundancy module has detected that the redundancy0 temperature measurements are missing */ + DIAG_ID_BASE_CELL_VOLTAGE_MEASUREMENT_TIMEOUT, /*!< the redundancy module has detected that the base cell voltage + measurements are missing */ + DIAG_ID_REDUNDANCY0_CELL_VOLTAGE_MEASUREMENT_TIMEOUT, /*!< the redundancy module has detected that the redundancy0 + cell voltage measurements are missing */ + DIAG_ID_BASE_CELL_TEMPERATURE_MEASUREMENT_TIMEOUT, /*!< the redundancy module has detected that the base cell + temperature measurements are missing */ + DIAG_ID_REDUNDANCY0_CELL_TEMPERATURE_MEASUREMENT_TIMEOUT, /*!< the redundancy module has detected that the + redundancy0 temperature measurements are missing */ DIAG_ID_PRECHARGE_ABORT_REASON_VOLTAGE, /*!< precharging aborted due to a too high voltage difference */ DIAG_ID_PRECHARGE_ABORT_REASON_CURRENT, /*!< precharging aborted because measured current was too high */ - DIAG_ID_CURRENT_MEASUREMENT_TIMEOUT, /*!< the redundancy module has detected that the current measurement on a string is not updated */ + DIAG_ID_CURRENT_MEASUREMENT_TIMEOUT, /*!< the redundancy module has detected that the current measurement on a + string is not updated */ DIAG_ID_CURRENT_MEASUREMENT_ERROR, /*!< the redundancy module has detected a current measurement to be invalid */ - DIAG_ID_CURRENT_SENSOR_V1_MEASUREMENT_TIMEOUT, /*!< the redundancy module has detected that the voltage 1 measurement of a current sensor is not updated */ - DIAG_ID_CURRENT_SENSOR_V2_MEASUREMENT_TIMEOUT, /*!< the redundancy module has detected that the voltage 2 measurement of a current sensor is not updated */ - DIAG_ID_CURRENT_SENSOR_V3_MEASUREMENT_TIMEOUT, /*!< the redundancy module has detected that the voltage 3 measurement of a current sensor is not updated */ - DIAG_ID_CURRENT_SENSOR_POWER_MEASUREMENT_TIMEOUT, /*!< the redundancy module has detected that the power measurement of a current sensor is not updated */ + DIAG_ID_CURRENT_SENSOR_V1_MEASUREMENT_TIMEOUT, /*!< the redundancy module has detected that the voltage 1 + measurement of a current sensor is not updated */ + DIAG_ID_CURRENT_SENSOR_V2_MEASUREMENT_TIMEOUT, /*!< the redundancy module has detected that the voltage 2 + measurement of a current sensor is not updated */ + DIAG_ID_CURRENT_SENSOR_V3_MEASUREMENT_TIMEOUT, /*!< the redundancy module has detected that the voltage 3 + measurement of a current sensor is not updated */ + DIAG_ID_CURRENT_SENSOR_POWER_MEASUREMENT_TIMEOUT, /*!< the redundancy module has detected that the power measurement + of a current sensor is not updated */ DIAG_ID_POWER_MEASUREMENT_ERROR, /*!< the redundancy module has detected a power measurement to be invalid */ DIAG_ID_INSULATION_MEASUREMENT_VALID, /*!< the insulation measurement is valid or invalid */ DIAG_ID_LOW_INSULATION_RESISTANCE_ERROR, /*!< a critical low insulation resistance has been measured */ @@ -333,19 +357,19 @@ typedef void DIAG_CALLBACK_FUNCTION_f( typedef struct { DIAG_ID_e id; /**< diagnosis event id diag_id */ uint16_t threshold; /**< threshold for number of events which will be - * tolerated before generating a notification in both directions: - * threshold = 0: reports the value at first occurrence, - * threshold = 1: reports the value at second occurrence */ + * tolerated before generating a notification in both directions: + * threshold = 0: reports the value at first occurrence, + * threshold = 1: reports the value at second occurrence */ DIAG_SEVERITY_LEVEL_e - severity; /**< severity of diag entry, #DIAG_FATAL_ERROR will lead to an opening of the contactors */ - uint32_t - delay_ms; /**< delay in ms after error detection if severity is #DIAG_FATAL_ERROR until an opening the contactors */ + severity; /**< severity of diag entry, #DIAG_FATAL_ERROR will lead to an opening of the contactors */ + uint32_t delay_ms; /**< delay in ms after error detection if severity is #DIAG_FATAL_ERROR until an opening the + contactors */ DIAG_RECORDING_e enable_recording; /**< if enabled recording in diag_memory * will be activated */ DIAG_EVALUATE_e enable_evaluate; /**< if enabled diagnosis event will be evaluated */ DIAG_CALLBACK_FUNCTION_f *fpCallback; /**< will be called if - * number of events exceeds threshold in both - * directions with parameter DIAG_EVENT_e - * string id or system related data */ + * number of events exceeds threshold in both + * directions with parameter DIAG_EVENT_e + * string id or system related data */ } DIAG_ID_CFG_s; /** struct for device Configuration of diag module */ @@ -353,8 +377,8 @@ typedef struct { uint8_t nrOfConfiguredDiagnosisEntries; /*!< number of entries in DIAG_ID_CFG_s */ DIAG_ID_CFG_s *pConfigurationOfDiagnosisEntries; /*!< pointer to configuration array for all diagnosis entries */ uint16_t numberOfFatalErrors; /*!< number of configured diagnosis entries with severity #DIAG_FATAL_ERROR */ - DIAG_ID_CFG_s *pFatalErrorLinkTable - [DIAG_ID_MAX]; /*!< list with pointers to all diagnosis entries with severity #DIAG_FATAL_ERROR */ + DIAG_ID_CFG_s *pFatalErrorLinkTable[DIAG_ID_MAX]; /*!< list with pointers to all diagnosis entries with severity + #DIAG_FATAL_ERROR */ } DIAG_DEV_s; /*========== Extern Constant and Variable Declarations ======================*/ diff --git a/src/app/engine/config/sys_cfg.c b/src/app/engine/config/sys_cfg.c index 83e43e4b..333639ce 100644 --- a/src/app/engine/config/sys_cfg.c +++ b/src/app/engine/config/sys_cfg.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,12 +43,13 @@ * @file sys_cfg.c * @author foxBMS Team * @date 2020-02-24 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup ENGINE_CONFIGURATION * @prefix SYS * * @brief Sys driver configuration + * @details TODO */ /*========== Includes =======================================================*/ diff --git a/src/app/engine/config/sys_cfg.h b/src/app/engine/config/sys_cfg.h index 786087f4..43292118 100644 --- a/src/app/engine/config/sys_cfg.h +++ b/src/app/engine/config/sys_cfg.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,12 +43,13 @@ * @file sys_cfg.h * @author foxBMS Team * @date 2020-02-24 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup ENGINE_CONFIGURATION * @prefix SYS * * @brief Sys driver configuration header + * @details TODO */ #ifndef FOXBMS__SYS_CFG_H_ diff --git a/src/app/engine/config/sys_mon_cfg.c b/src/app/engine/config/sys_mon_cfg.c index aa93b5f0..1aba00a3 100644 --- a/src/app/engine/config/sys_mon_cfg.c +++ b/src/app/engine/config/sys_mon_cfg.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,12 +43,13 @@ * @file sys_mon_cfg.c * @author foxBMS Team * @date 2019-11-28 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup ENGINE_CONFIGURATION * @prefix SYSM * * @brief configuration of the system monitoring module + * @details TODO */ /*========== Includes =======================================================*/ @@ -64,7 +65,7 @@ /*========== Static Constant and Variable Definitions =======================*/ -/*========== Static Function Prototypes =====================================*/ +/* pre-commit: needs to be defined before */ static void SYSM_DummyCallback(SYSM_TASK_ID_e taskId); /*========== Extern Constant and Variable Definitions =======================*/ @@ -112,6 +113,8 @@ FAS_STATIC_ASSERT( (sizeof(sysm_ch_cfg) / sizeof(SYSM_MONITORING_CFG_s)) == (uint32_t)SYSM_TASK_ID_MAX, "invalid sys_mon configuration!"); +/*========== Static Function Prototypes =====================================*/ + /*========== Static Function Implementations ================================*/ /** * @brief dummy callback function of system monitoring error events diff --git a/src/app/engine/config/sys_mon_cfg.h b/src/app/engine/config/sys_mon_cfg.h index 55513971..19ccb7f6 100644 --- a/src/app/engine/config/sys_mon_cfg.h +++ b/src/app/engine/config/sys_mon_cfg.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,12 +43,13 @@ * @file sys_mon_cfg.h * @author foxBMS Team * @date 2019-11-28 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup ENGINE_CONFIGURATION * @prefix SYSM * - * @brief configuration of the system monitoring module + * @brief Configuration of the system monitoring module + * @details TODO */ #ifndef FOXBMS__SYS_MON_CFG_H_ diff --git a/src/app/engine/database/database.c b/src/app/engine/database/database.c index ca7cb73a..3fbf236a 100644 --- a/src/app/engine/database/database.c +++ b/src/app/engine/database/database.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,12 @@ * @file database.c * @author foxBMS Team * @date 2015-08-18 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup ENGINE * @prefix DATA * * @brief Database module implementation - * * @details The database read/write functions put references to the database * entries to be read/written in the database queue. The function * DATA_Task() reads the queue to get the database entries to be @@ -190,9 +189,9 @@ static void DATA_CopyData( /* Copy database entry in passed struct */ /* memcpy has no return value therefore there is nothing to check: casting to void */ (void)memcpy(pPassedDataStruct, pDatabaseStruct, dataLength); - } else { - /* invalid database operation */ - FAS_ASSERT(FAS_TRAP); + } else { /* LCOV_EXCL_LINE */ + /* invalid database operation */ /* LCOV_EXCL_LINE */ + FAS_ASSERT(FAS_TRAP); /* LCOV_EXCL_LINE */ } } @@ -382,4 +381,25 @@ extern void DATA_ExecuteDataBist(void) { /*========== Externalized Static Function Implementations (Unit Test) =======*/ #ifdef UNITY_UNIT_TEST +extern void TEST_DATA_IterateOverDatabaseEntries(const DATA_QUEUE_MESSAGE_s *kpReceiveMessage) { + DATA_IterateOverDatabaseEntries(kpReceiveMessage); +} + +extern STD_RETURN_TYPE_e TEST_DATA_AccessDatabaseEntries( + DATA_BLOCK_ACCESS_TYPE_e accessType, + void *pData0, + void *pData1, + void *pData2, + void *pData3) { + return DATA_AccessDatabaseEntries(accessType, pData0, pData1, pData2, pData3); +} + +extern void TEST_DATA_CopyData( + DATA_BLOCK_ACCESS_TYPE_e accessType, + uint32_t dataLength, + void *pDatabaseStruct, + void *pPassedDataStruct) { + DATA_CopyData(accessType, dataLength, pDatabaseStruct, pPassedDataStruct); +} + #endif diff --git a/src/app/engine/database/database.h b/src/app/engine/database/database.h index 6ca31395..79dfbb99 100644 --- a/src/app/engine/database/database.h +++ b/src/app/engine/database/database.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,15 +43,13 @@ * @file database.h * @author foxBMS Team * @date 2015-08-18 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup ENGINE * @prefix DATA * * @brief Database module header - * * @details Provides interfaces to database module - * */ #ifndef FOXBMS__DATABASE_H_ @@ -275,6 +273,11 @@ extern void DATA_ExecuteDataBist(void); /*========== Externalized Static Functions Prototypes (Unit Test) ===========*/ #ifdef UNITY_UNIT_TEST +/* clang-format off */ +extern void TEST_DATA_IterateOverDatabaseEntries(const DATA_QUEUE_MESSAGE_s *kpReceiveMessage) ; +extern STD_RETURN_TYPE_e TEST_DATA_AccessDatabaseEntries(DATA_BLOCK_ACCESS_TYPE_e accessType, void *pData0, void *pData1, void *pData2, void *pData3); +extern void TEST_DATA_CopyData(DATA_BLOCK_ACCESS_TYPE_e accessType, uint32_t dataLength, void *pDatabaseStruct, void *pPassedDataStruct); +/* clang-format on */ #endif #endif /* FOXBMS__DATABASE_H_ */ diff --git a/src/app/engine/database/database_helper.c b/src/app/engine/database/database_helper.c index 574b2033..5b39acb9 100644 --- a/src/app/engine/database/database_helper.c +++ b/src/app/engine/database/database_helper.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,12 @@ * @file database_helper.c * @author foxBMS Team * @date 2021-05-05 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup ENGINE * @prefix DATA * * @brief Database helper implementation - * * @details Implementation of database helper function */ diff --git a/src/app/engine/database/database_helper.h b/src/app/engine/database/database_helper.h index 31ef82d4..322a4cb5 100644 --- a/src/app/engine/database/database_helper.h +++ b/src/app/engine/database/database_helper.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,15 +43,13 @@ * @file database_helper.h * @author foxBMS Team * @date 2021-05-05 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup ENGINE * @prefix DATA * * @brief Database module header - * * @details Provides helper function to handle database entries - * */ #ifndef FOXBMS__DATABASE_HELPER_H_ diff --git a/src/app/engine/diag/cbs/diag_cbs.h b/src/app/engine/diag/cbs/diag_cbs.h index 941af501..90711447 100644 --- a/src/app/engine/diag/cbs/diag_cbs.h +++ b/src/app/engine/diag/cbs/diag_cbs.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file diag_cbs.h * @author foxBMS Team * @date 2021-02-17 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup ENGINE * @prefix DIAG * * @brief Diagnosis driver header - * + * @details TODO */ #ifndef FOXBMS__DIAG_CBS_H_ diff --git a/src/app/engine/diag/cbs/diag_cbs_aerosol-sensor.c b/src/app/engine/diag/cbs/diag_cbs_aerosol-sensor.c index 75909f78..b406807d 100644 --- a/src/app/engine/diag/cbs/diag_cbs_aerosol-sensor.c +++ b/src/app/engine/diag/cbs/diag_cbs_aerosol-sensor.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file diag_cbs_aerosol-sensor.c * @author foxBMS Team * @date 2023-09-06 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup ENGINE * @prefix DIAG * diff --git a/src/app/engine/diag/cbs/diag_cbs_afe.c b/src/app/engine/diag/cbs/diag_cbs_afe.c index 0c50782f..1ed30644 100644 --- a/src/app/engine/diag/cbs/diag_cbs_afe.c +++ b/src/app/engine/diag/cbs/diag_cbs_afe.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file diag_cbs_afe.c * @author foxBMS Team * @date 2021-02-17 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup ENGINE * @prefix DIAG * diff --git a/src/app/engine/diag/cbs/diag_cbs_bms.c b/src/app/engine/diag/cbs/diag_cbs_bms.c index f6d7d22a..8f948841 100644 --- a/src/app/engine/diag/cbs/diag_cbs_bms.c +++ b/src/app/engine/diag/cbs/diag_cbs_bms.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file diag_cbs_bms.c * @author foxBMS Team * @date 2022-07-26 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup APPLICATION * @prefix DIAG * diff --git a/src/app/engine/diag/cbs/diag_cbs_can.c b/src/app/engine/diag/cbs/diag_cbs_can.c index 050c6121..3790a08f 100644 --- a/src/app/engine/diag/cbs/diag_cbs_can.c +++ b/src/app/engine/diag/cbs/diag_cbs_can.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file diag_cbs_can.c * @author foxBMS Team * @date 2021-02-17 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup ENGINE * @prefix DIAG * diff --git a/src/app/engine/diag/cbs/diag_cbs_contactor.c b/src/app/engine/diag/cbs/diag_cbs_contactor.c index ea838c9d..2bd8fd9f 100644 --- a/src/app/engine/diag/cbs/diag_cbs_contactor.c +++ b/src/app/engine/diag/cbs/diag_cbs_contactor.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file diag_cbs_contactor.c * @author foxBMS Team * @date 2021-02-17 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup ENGINE * @prefix DIAG * diff --git a/src/app/engine/diag/cbs/diag_cbs_current-sensor.c b/src/app/engine/diag/cbs/diag_cbs_current-sensor.c index 0c433bfd..5107b089 100644 --- a/src/app/engine/diag/cbs/diag_cbs_current-sensor.c +++ b/src/app/engine/diag/cbs/diag_cbs_current-sensor.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file diag_cbs_current-sensor.c * @author foxBMS Team * @date 2021-02-17 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup ENGINE * @prefix DIAG * @@ -75,7 +75,9 @@ void DIAG_ErrorCurrentSensor( DIAG_EVENT_e event, const DIAG_DATABASE_SHIM_s *const kpkDiagShim, uint32_t stringNumber) { - FAS_ASSERT(diagId < DIAG_ID_MAX); + FAS_ASSERT( + (diagId == DIAG_ID_CURRENT_SENSOR_RESPONDING) || (diagId == DIAG_ID_CAN_CC_RESPONDING) || + (diagId == DIAG_ID_CAN_EC_RESPONDING)); FAS_ASSERT((event == DIAG_EVENT_OK) || (event == DIAG_EVENT_NOT_OK) || (event == DIAG_EVENT_RESET)); FAS_ASSERT(kpkDiagShim != NULL_PTR); FAS_ASSERT(stringNumber < BS_NR_OF_STRINGS); @@ -101,6 +103,8 @@ void DIAG_ErrorCurrentSensor( if (event == DIAG_EVENT_NOT_OK) { kpkDiagShim->pTableError->currentSensorEnergyCounterTimeoutError[stringNumber] = true; } + } else { /* LCOV_EXCL_LINE */ + FAS_ASSERT(FAS_TRAP); /* LCOV_EXCL_LINE */ } } diff --git a/src/app/engine/diag/cbs/diag_cbs_current.c b/src/app/engine/diag/cbs/diag_cbs_current.c index 0dbf052e..0a7dd5a5 100644 --- a/src/app/engine/diag/cbs/diag_cbs_current.c +++ b/src/app/engine/diag/cbs/diag_cbs_current.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file diag_cbs_current.c * @author foxBMS Team * @date 2021-02-17 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup ENGINE * @prefix DIAG * @@ -297,3 +297,5 @@ void DIAG_ErrorCurrentOnOpenString( } /*========== Externalized Static Function Implementations (Unit Test) =======*/ +#ifdef UNITY_UNIT_TEST +#endif diff --git a/src/app/engine/diag/cbs/diag_cbs_deep-discharge.c b/src/app/engine/diag/cbs/diag_cbs_deep-discharge.c index 9a2fb913..ebebc6e5 100644 --- a/src/app/engine/diag/cbs/diag_cbs_deep-discharge.c +++ b/src/app/engine/diag/cbs/diag_cbs_deep-discharge.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file diag_cbs_deep-discharge.c * @author foxBMS Team * @date 2021-02-17 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup ENGINE * @prefix DIAG * diff --git a/src/app/engine/diag/cbs/diag_cbs_dummy.c b/src/app/engine/diag/cbs/diag_cbs_dummy.c index 62a29982..d7d37926 100644 --- a/src/app/engine/diag/cbs/diag_cbs_dummy.c +++ b/src/app/engine/diag/cbs/diag_cbs_dummy.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file diag_cbs_dummy.c * @author foxBMS Team * @date 2021-02-17 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup ENGINE * @prefix DIAG * diff --git a/src/app/engine/diag/cbs/diag_cbs_fram.c b/src/app/engine/diag/cbs/diag_cbs_fram.c index 81ef067b..6d7034d2 100644 --- a/src/app/engine/diag/cbs/diag_cbs_fram.c +++ b/src/app/engine/diag/cbs/diag_cbs_fram.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file diag_cbs_fram.c * @author foxBMS Team * @date 2022-02-24 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup ENGINE * @prefix DIAG * diff --git a/src/app/engine/diag/cbs/diag_cbs_i2c.c b/src/app/engine/diag/cbs/diag_cbs_i2c.c index 1b2b67ae..33b0d167 100644 --- a/src/app/engine/diag/cbs/diag_cbs_i2c.c +++ b/src/app/engine/diag/cbs/diag_cbs_i2c.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file diag_cbs_i2c.c * @author foxBMS Team * @date 2021-09-29 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup ENGINE * @prefix DIAG * diff --git a/src/app/engine/diag/cbs/diag_cbs_insulation.c b/src/app/engine/diag/cbs/diag_cbs_insulation.c index 2eef6a72..cbe7651e 100644 --- a/src/app/engine/diag/cbs/diag_cbs_insulation.c +++ b/src/app/engine/diag/cbs/diag_cbs_insulation.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file diag_cbs_insulation.c * @author foxBMS Team * @date 2021-02-22 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup ENGINE * @prefix DIAG * diff --git a/src/app/engine/diag/cbs/diag_cbs_interlock.c b/src/app/engine/diag/cbs/diag_cbs_interlock.c index d577190f..0ff318a1 100644 --- a/src/app/engine/diag/cbs/diag_cbs_interlock.c +++ b/src/app/engine/diag/cbs/diag_cbs_interlock.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file diag_cbs_interlock.c * @author foxBMS Team * @date 2021-02-17 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup ENGINE * @prefix DIAG * diff --git a/src/app/engine/diag/cbs/diag_cbs_plausibility.c b/src/app/engine/diag/cbs/diag_cbs_plausibility.c index b7729d0e..e0d72281 100644 --- a/src/app/engine/diag/cbs/diag_cbs_plausibility.c +++ b/src/app/engine/diag/cbs/diag_cbs_plausibility.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file diag_cbs_plausibility.c * @author foxBMS Team * @date 2021-02-17 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup ENGINE * @prefix DIAG * diff --git a/src/app/engine/diag/cbs/diag_cbs_power-measurement.c b/src/app/engine/diag/cbs/diag_cbs_power-measurement.c index 2069c1c2..8626a530 100644 --- a/src/app/engine/diag/cbs/diag_cbs_power-measurement.c +++ b/src/app/engine/diag/cbs/diag_cbs_power-measurement.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file diag_cbs_power-measurement.c * @author foxBMS Team * @date 2021-02-17 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup ENGINE * @prefix DIAG * diff --git a/src/app/engine/diag/cbs/diag_cbs_rtc.c b/src/app/engine/diag/cbs/diag_cbs_rtc.c index 6de3925c..4dbd1dbd 100644 --- a/src/app/engine/diag/cbs/diag_cbs_rtc.c +++ b/src/app/engine/diag/cbs/diag_cbs_rtc.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file diag_cbs_rtc.c * @author foxBMS Team * @date 2022-11-18 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup ENGINE * @prefix DIAG * diff --git a/src/app/engine/diag/cbs/diag_cbs_sbc.c b/src/app/engine/diag/cbs/diag_cbs_sbc.c index ac8a1657..fad0ab33 100644 --- a/src/app/engine/diag/cbs/diag_cbs_sbc.c +++ b/src/app/engine/diag/cbs/diag_cbs_sbc.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file diag_cbs_sbc.c * @author foxBMS Team * @date 2021-02-17 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup ENGINE * @prefix DIAG * diff --git a/src/app/engine/diag/cbs/diag_cbs_sys-mon.c b/src/app/engine/diag/cbs/diag_cbs_sys-mon.c index 38319692..112a7318 100644 --- a/src/app/engine/diag/cbs/diag_cbs_sys-mon.c +++ b/src/app/engine/diag/cbs/diag_cbs_sys-mon.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file diag_cbs_sys-mon.c * @author foxBMS Team * @date 2021-02-17 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup ENGINE * @prefix DIAG * diff --git a/src/app/engine/diag/cbs/diag_cbs_temperature.c b/src/app/engine/diag/cbs/diag_cbs_temperature.c index c114be5a..98bbf555 100644 --- a/src/app/engine/diag/cbs/diag_cbs_temperature.c +++ b/src/app/engine/diag/cbs/diag_cbs_temperature.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file diag_cbs_temperature.c * @author foxBMS Team * @date 2021-02-17 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup ENGINE * @prefix DIAG * diff --git a/src/app/engine/diag/cbs/diag_cbs_voltage.c b/src/app/engine/diag/cbs/diag_cbs_voltage.c index 7c7d0d67..1df0f779 100644 --- a/src/app/engine/diag/cbs/diag_cbs_voltage.c +++ b/src/app/engine/diag/cbs/diag_cbs_voltage.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file diag_cbs_voltage.c * @author foxBMS Team * @date 2021-02-17 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup ENGINE * @prefix DIAG * @@ -74,32 +74,36 @@ extern void DIAG_ErrorOvervoltage( DIAG_EVENT_e event, const DIAG_DATABASE_SHIM_s *const kpkDiagShim, uint32_t stringNumber) { - FAS_ASSERT(diagId < DIAG_ID_MAX); + FAS_ASSERT( + (diagId == DIAG_ID_CELL_VOLTAGE_OVERVOLTAGE_MSL) || (diagId == DIAG_ID_CELL_VOLTAGE_OVERVOLTAGE_RSL) || + (diagId == DIAG_ID_CELL_VOLTAGE_OVERVOLTAGE_MOL)); FAS_ASSERT((event == DIAG_EVENT_OK) || (event == DIAG_EVENT_NOT_OK) || (event == DIAG_EVENT_RESET)); FAS_ASSERT(kpkDiagShim != NULL_PTR); FAS_ASSERT(stringNumber < BS_NR_OF_STRINGS); if (diagId == DIAG_ID_CELL_VOLTAGE_OVERVOLTAGE_MSL) { if (event == DIAG_EVENT_RESET) { - kpkDiagShim->pTableMsl->overVoltage[stringNumber] = 0; + kpkDiagShim->pTableMsl->overVoltage[stringNumber] = 0u; } if (event == DIAG_EVENT_NOT_OK) { - kpkDiagShim->pTableMsl->overVoltage[stringNumber] = 1; + kpkDiagShim->pTableMsl->overVoltage[stringNumber] = 1u; } } else if (diagId == DIAG_ID_CELL_VOLTAGE_OVERVOLTAGE_RSL) { if (event == DIAG_EVENT_RESET) { - kpkDiagShim->pTableRsl->overVoltage[stringNumber] = 0; + kpkDiagShim->pTableRsl->overVoltage[stringNumber] = 0u; } if (event == DIAG_EVENT_NOT_OK) { - kpkDiagShim->pTableRsl->overVoltage[stringNumber] = 1; + kpkDiagShim->pTableRsl->overVoltage[stringNumber] = 1u; } } else if (diagId == DIAG_ID_CELL_VOLTAGE_OVERVOLTAGE_MOL) { if (event == DIAG_EVENT_RESET) { - kpkDiagShim->pTableMol->overVoltage[stringNumber] = 0; + kpkDiagShim->pTableMol->overVoltage[stringNumber] = 0u; } if (event == DIAG_EVENT_NOT_OK) { - kpkDiagShim->pTableMol->overVoltage[stringNumber] = 1; + kpkDiagShim->pTableMol->overVoltage[stringNumber] = 1u; } + } else { /* LCOV_EXCL_LINE */ + FAS_ASSERT(FAS_TRAP); /* LCOV_EXCL_LINE */ } } @@ -108,32 +112,36 @@ extern void DIAG_ErrorUndervoltage( DIAG_EVENT_e event, const DIAG_DATABASE_SHIM_s *const kpkDiagShim, uint32_t stringNumber) { - FAS_ASSERT(diagId < DIAG_ID_MAX); + FAS_ASSERT( + (diagId == DIAG_ID_CELL_VOLTAGE_UNDERVOLTAGE_MSL) || (diagId == DIAG_ID_CELL_VOLTAGE_UNDERVOLTAGE_RSL) || + (diagId == DIAG_ID_CELL_VOLTAGE_UNDERVOLTAGE_MOL)); FAS_ASSERT((event == DIAG_EVENT_OK) || (event == DIAG_EVENT_NOT_OK) || (event == DIAG_EVENT_RESET)); FAS_ASSERT(kpkDiagShim != NULL_PTR); FAS_ASSERT(stringNumber < BS_NR_OF_STRINGS); if (diagId == DIAG_ID_CELL_VOLTAGE_UNDERVOLTAGE_MSL) { if (event == DIAG_EVENT_RESET) { - kpkDiagShim->pTableMsl->underVoltage[stringNumber] = 0; + kpkDiagShim->pTableMsl->underVoltage[stringNumber] = 0u; } if (event == DIAG_EVENT_NOT_OK) { - kpkDiagShim->pTableMsl->underVoltage[stringNumber] = 1; + kpkDiagShim->pTableMsl->underVoltage[stringNumber] = 1u; } } else if (diagId == DIAG_ID_CELL_VOLTAGE_UNDERVOLTAGE_RSL) { if (event == DIAG_EVENT_RESET) { - kpkDiagShim->pTableRsl->underVoltage[stringNumber] = 0; + kpkDiagShim->pTableRsl->underVoltage[stringNumber] = 0u; } if (event == DIAG_EVENT_NOT_OK) { - kpkDiagShim->pTableRsl->underVoltage[stringNumber] = 1; + kpkDiagShim->pTableRsl->underVoltage[stringNumber] = 1u; } } else if (diagId == DIAG_ID_CELL_VOLTAGE_UNDERVOLTAGE_MOL) { if (event == DIAG_EVENT_RESET) { - kpkDiagShim->pTableMol->underVoltage[stringNumber] = 0; + kpkDiagShim->pTableMol->underVoltage[stringNumber] = 0u; } if (event == DIAG_EVENT_NOT_OK) { - kpkDiagShim->pTableMol->underVoltage[stringNumber] = 1; + kpkDiagShim->pTableMol->underVoltage[stringNumber] = 1u; } + } else { /* LCOV_EXCL_LINE */ + FAS_ASSERT(FAS_TRAP); /* LCOV_EXCL_LINE */ } } @@ -179,9 +187,9 @@ extern void DIAG_ErrorHighVoltageMeasurement( } break; - default: - FAS_ASSERT(FAS_TRAP); - break; /* LCOV_EXCL_LINE */ + default: /* LCOV_EXCL_LINE */ + FAS_ASSERT(FAS_TRAP); /* LCOV_EXCL_LINE */ + break; /* LCOV_EXCL_LINE */ } } diff --git a/src/app/engine/diag/diag.c b/src/app/engine/diag/diag.c index 3d45303c..1d7188c8 100644 --- a/src/app/engine/diag/diag.c +++ b/src/app/engine/diag/diag.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,12 @@ * @file diag.c * @author foxBMS Team * @date 2019-11-28 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup ENGINE * @prefix DIAG * * @brief Diagnosis driver implementation - * * @details This diagnose module is responsible for error handling and * reporting. * Reported errors are logged into the global database and can be @@ -225,7 +224,8 @@ static uint8_t DIAG_EntryWrite(uint8_t eventID, DIAG_EVENT_e event, uint32_t dat } if (++diag.entry_cnt[eventID] > DIAG_MAX_ENTRIES_OF_ERROR) { - /* this type of error has been recorded too many times -> ignore to avoid filling buffer with same failure codes */ + /* this type of error has been recorded too many times -> ignore to avoid filling buffer with same failure codes + */ diag.entry_cnt[eventID] = DIAG_MAX_ENTRIES_OF_ERROR; return ret_val; } @@ -299,7 +299,8 @@ DIAG_RETURNTYPE_e DIAG_Handler(DIAG_ID_e diagId, DIAG_EVENT_e event, DIAG_IMPACT (*u16ptr_threshcounter)--; /* Error did not occur, decrement Error-Counter */ } else if ((*u16ptr_threshcounter) == 1) { /* else if ((*u16ptr_threshcounter) <= 1) */ - /* Error did not occur, now decrement to zero and clear Error- or Warning-Flag and make recording if enabled */ + /* Error did not occur, now decrement to zero and clear Error- or Warning-Flag and make recording if + * enabled */ *u32ptr_errCodemsk &= ~err_enable_bitmask; /* ERROR: clear corresponding bit in errflag[idx] */ *u32ptr_warnCodemsk &= ~err_enable_bitmask; /* WARNING: clear corresponding bit in warnflag[idx] */ (*u16ptr_threshcounter) = 0; @@ -322,7 +323,7 @@ DIAG_RETURNTYPE_e DIAG_Handler(DIAG_ID_e diagId, DIAG_EVENT_e event, DIAG_IMPACT (*u16ptr_threshcounter)++; /* error-threshold not exceeded yet, increment Error-Counter */ ret_val = DIAG_HANDLER_RETURN_OK; /* Function does not return an error-message! */ } else if ((*u16ptr_threshcounter) == cfg_threshold) { - /* Error occured AND error-threshold exceeded */ + /* Error occurred AND error-threshold exceeded */ (*u16ptr_threshcounter)++; *u32ptr_errCodemsk |= err_enable_bitmask; /* ERROR: set corresponding bit in errflag[idx] */ *u32ptr_warnCodemsk &= ~err_enable_bitmask; /* WARNING: clear corresponding bit in warnflag[idx] */ @@ -402,4 +403,13 @@ bool DIAG_IsAnyFatalErrorSet(void) { /*========== Externalized Static Function Implementations (Unit Test) =======*/ #ifdef UNITY_UNIT_TEST +extern void TEST_DIAG_SetDiagerrcnttotal(uint16_t errors) { + diag.errcnttotal = errors; +} +extern DIAG_DIAGNOSIS_STATE_s *TEST_DIAG_GetDiag(void) { + return &diag; +} +extern void TEST_DIAG_Reset(void) { + DIAG_Reset(); +} #endif diff --git a/src/app/engine/diag/diag.h b/src/app/engine/diag/diag.h index 106768e4..3c3d29ce 100644 --- a/src/app/engine/diag/diag.h +++ b/src/app/engine/diag/diag.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file diag.h * @author foxBMS Team * @date 2019-11-28 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup ENGINE * @prefix DIAG * * @brief Diagnosis driver header - * + * @details TODO */ #ifndef FOXBMS__DIAG_H_ @@ -178,6 +178,9 @@ extern bool DIAG_IsAnyFatalErrorSet(void); /*========== Externalized Static Functions Prototypes (Unit Test) ===========*/ #ifdef UNITY_UNIT_TEST +extern void TEST_DIAG_SetDiagerrcnttotal(uint16_t errors); +extern DIAG_DIAGNOSIS_STATE_s *TEST_DIAG_GetDiag(void); +extern void TEST_DIAG_Reset(void); #endif #endif /* FOXBMS__DIAG_H_ */ diff --git a/src/app/engine/hw_info/master_info.c b/src/app/engine/hw_info/master_info.c index fb459fba..22cf0477 100644 --- a/src/app/engine/hw_info/master_info.c +++ b/src/app/engine/hw_info/master_info.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,16 +43,14 @@ * @file master_info.c * @author foxBMS Team * @date 2020-07-08 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup GENERAL + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup ENGINE * @prefix MINFO * * @brief General foxBMS-master system information - * * @details This file contains the implementation to gather information on the * foxBMS-Master and its connected peripherals on the master PCB. - * */ /*========== Includes =======================================================*/ diff --git a/src/app/engine/hw_info/master_info.h b/src/app/engine/hw_info/master_info.h index 26a96f25..2e51944e 100644 --- a/src/app/engine/hw_info/master_info.h +++ b/src/app/engine/hw_info/master_info.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,16 +43,14 @@ * @file master_info.h * @author foxBMS Team * @date 2020-07-08 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup GENERAL + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup ENGINE * @prefix MINFO * * @brief General foxBMS-master system information - * * @details Header file for the implementation to gather information on the * foxBMS-Master and its connected peripherals on the master PCB. - * */ #ifndef FOXBMS__MASTER_INFO_H_ diff --git a/src/app/engine/sys/reset.c b/src/app/engine/sys/reset.c index 287827f4..66ca34e1 100644 --- a/src/app/engine/sys/reset.c +++ b/src/app/engine/sys/reset.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file reset.c * @author foxBMS Team * @date 2022-11-16 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup ENGINE * @prefix SYS * * @brief Software reset driver - * @details stub for the software reset driver + * @details Stub for the software reset driver */ /*========== Includes =======================================================*/ @@ -69,8 +69,7 @@ /*========== Extern Function Implementations ================================*/ -extern void SYS_TriggerSoftwareReset(void) { - /* currently a stub */ +extern void SYS_TriggerSoftwareReset(void) { /* currently a stub */ } /*========== Externalized Static Function Implementations (Unit Test) =======*/ diff --git a/src/app/engine/sys/reset.h b/src/app/engine/sys/reset.h index af1bbbb2..432894bd 100644 --- a/src/app/engine/sys/reset.h +++ b/src/app/engine/sys/reset.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,14 +43,13 @@ * @file reset.h * @author foxBMS Team * @date 2022-11-16 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup ENGINE * @prefix SYS * * @brief Software reset driver header - * @details stub for the software reset driver - * + * @details Stub for the software reset driver */ #ifndef FOXBMS__RESET_H_ diff --git a/src/app/engine/sys/sys.c b/src/app/engine/sys/sys.c index cf0228b0..e70ee904 100644 --- a/src/app/engine/sys/sys.c +++ b/src/app/engine/sys/sys.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file sys.c * @author foxBMS Team * @date 2020-02-24 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup ENGINE * @prefix SYS * @@ -371,10 +371,10 @@ static STD_RETURN_TYPE_e SYS_RunStateMachine(SYS_STATE_s *pSystemState) { CAN_EnablePeriodic(true); #if defined(CURRENT_SENSOR_ISABELLENHUETTE_TRIGGERED) /* If triggered mode is used, CAN trigger message needs to - * be transmitted and current sensor response has to be - * received afterwards. This may take some time, therefore - * delay has to be increased. - */ + * be transmitted and current sensor response has to be + * received afterwards. This may take some time, therefore + * delay has to be increased. + */ pSystemState->timer = SYS_FSM_LONG_TIME_MS; #else /* defined(CURRENT_SENSOR_ISABELLENHUETTE_TRIGGERED) */ pSystemState->timer = SYS_FSM_LONG_TIME; diff --git a/src/app/engine/sys/sys.h b/src/app/engine/sys/sys.h index 29070012..d864e893 100644 --- a/src/app/engine/sys/sys.h +++ b/src/app/engine/sys/sys.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,14 +43,13 @@ * @file sys.h * @author foxBMS Team * @date 2020-02-24 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup ENGINE * @prefix SYS * * @brief Sys driver header - * - * + * @details TODO */ #ifndef FOXBMS__SYS_H_ diff --git a/src/app/engine/sys_mon/sys_mon.c b/src/app/engine/sys_mon/sys_mon.c index 1cc460ab..f34baf12 100644 --- a/src/app/engine/sys_mon/sys_mon.c +++ b/src/app/engine/sys_mon/sys_mon.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,12 +43,13 @@ * @file sys_mon.c * @author foxBMS Team * @date 2019-11-28 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup ENGINE * @prefix SYSM * * @brief system monitoring module + * @details TODO */ /*========== Includes =======================================================*/ @@ -137,20 +138,20 @@ static bool SYSM_ConvertRecordedTimingsToViolation(uint32_t duration, uint32_t t } /*========== Extern Function Implementations ================================*/ -STD_RETURN_TYPE_e SYSM_Init(void) { +STD_RETURN_TYPE_e SYSM_Initialize(void) { /* no need to check for the configuration as it is already checked with a static assert */ /* read from FRAM interface the sys mon violations */ (void)FRAM_ReadData(FRAM_BLOCK_ID_SYS_MON_RECORD); /* copy FRAM into local shadow copy */ - SYSM_CopyFramStruct(&fram_sys_mon_record, &sysm_localFramCopy); + SYSM_CopyFramStruct(&fram_sysMonViolationRecord, &sysm_localFramCopy); return STD_OK; } void SYSM_CheckNotifications(void) { - static uint32_t sysm_timestamp = 0; + static uint32_t sysm_timestamp = 0u; /** early exit if nothing to do */ uint32_t local_timer = OS_GetTickCount(); @@ -159,8 +160,8 @@ void SYSM_CheckNotifications(void) { } sysm_timestamp = local_timer; - uint32_t time_since_last_call = 0; - uint32_t max_allowed_jitter = 0; + uint32_t time_since_last_call = 0u; + uint32_t max_allowed_jitter = 0u; for (SYSM_TASK_ID_e taskId = (SYSM_TASK_ID_e)0; taskId < SYSM_TASK_ID_MAX; taskId++) { if (sysm_ch_cfg[taskId].enable == SYSM_ENABLED) { @@ -204,7 +205,7 @@ extern void SYSM_GetRecordedTimingViolations(SYSM_TIMING_VIOLATION_RESPONSE_s *p OS_EnterTaskCritical(); FRAM_SYS_MON_RECORD_s localSysMonRecord = {0}; - SYSM_CopyFramStruct(&fram_sys_mon_record, &localSysMonRecord); + SYSM_CopyFramStruct(&fram_sysMonViolationRecord, &localSysMonRecord); OS_ExitTaskCritical(); if (localSysMonRecord.anyTimingIssueOccurred == false) { @@ -261,7 +262,7 @@ extern void SYSM_UpdateFramData(void) { OS_ExitTaskCritical(); if (updateNecessary == true) { OS_EnterTaskCritical(); - SYSM_CopyFramStruct(&sysm_localFramCopy, &fram_sys_mon_record); + SYSM_CopyFramStruct(&sysm_localFramCopy, &fram_sysMonViolationRecord); sysm_flagFramCopyHasChanges = false; OS_ExitTaskCritical(); @@ -296,4 +297,14 @@ extern SYSM_NOTIFICATION_s *TEST_SYSM_GetNotifications(void) { /*========== Externalized Static Function Implementations (Unit Test) =======*/ #ifdef UNITY_UNIT_TEST +/* Helper functions */ +extern bool TEST_SYSM_GetStaticVariableFlagFramCopyHasChanges(void) { + return sysm_flagFramCopyHasChanges; +} +extern bool TEST_SYSM_SetStaticVariableFlagFramCopyHasChanges(bool value) { + bool oldValue = sysm_flagFramCopyHasChanges; + sysm_flagFramCopyHasChanges = value; + return oldValue; +} + #endif diff --git a/src/app/engine/sys_mon/sys_mon.h b/src/app/engine/sys_mon/sys_mon.h index 05c38a36..01275fcd 100644 --- a/src/app/engine/sys_mon/sys_mon.h +++ b/src/app/engine/sys_mon/sys_mon.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,12 +43,13 @@ * @file sys_mon.h * @author foxBMS Team * @date 2019-11-28 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup ENGINE * @prefix SYSM * - * @brief system monitoring module + * @brief System monitoring module + * @details TODO */ #ifndef FOXBMS__SYS_MON_H_ @@ -59,6 +60,7 @@ #include "fram.h" +#include #include /*========== Macros and Definitions =========================================*/ @@ -76,7 +78,7 @@ typedef struct { uint32_t duration; /**< duration between last complete entry and exit cycle */ } SYSM_NOTIFICATION_s; -/** compact data fromat for reporting violation states */ +/** compact data format for reporting violation states */ typedef struct { bool recordedViolationAny; /*!< compound flag indicating if any violation occurred */ bool recordedViolationEngine; /*!< flag indicating if a engine violation is recorded */ @@ -95,7 +97,7 @@ typedef struct { * monitoring related functionality * @return #STD_OK if no configuration error detected, otherwise #STD_NOT_OK */ -extern STD_RETURN_TYPE_e SYSM_Init(void); +extern STD_RETURN_TYPE_e SYSM_Initialize(void); /** * @brief overall system monitoring @@ -153,6 +155,9 @@ extern SYSM_NOTIFICATION_s *TEST_SYSM_GetNotifications(void); /*========== Externalized Static Functions Prototypes (Unit Test) ===========*/ #ifdef UNITY_UNIT_TEST +/* Helper functions */ +extern bool TEST_SYSM_GetStaticVariableFlagFramCopyHasChanges(void); +extern bool TEST_SYSM_SetStaticVariableFlagFramCopyHasChanges(bool value); #endif #endif /* FOXBMS__SYS_MON_H_ */ diff --git a/src/app/engine/wscript b/src/app/engine/wscript old mode 100644 new mode 100755 index 5f987458..c376354b --- a/src/app/engine/wscript +++ b/src/app/engine/wscript @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -100,7 +99,8 @@ def build(bld): os.path.join("..", "application", "config"), os.path.join("..", "application", "soa"), os.path.join("..", "driver", "can"), - os.path.join("..", "driver", "can", "cbs", "tx"), + os.path.join("..", "driver", "can", "cbs", "tx-async"), + os.path.join("..", "driver", "can", "cbs", "tx-cyclic"), os.path.join("..", "driver", "config"), os.path.join("..", "driver", "contactor"), os.path.join("..", "driver", "dma"), diff --git a/src/app/main/fassert.c b/src/app/main/fassert.c index b56d2315..6ec1af68 100644 --- a/src/app/main/fassert.c +++ b/src/app/main/fassert.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,12 @@ * @file fassert.c * @author foxBMS Team * @date 2020-05-26 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup ASSERT + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup MAIN * @prefix FAS * * @brief Assert macro implementation - * * @details Implementation for the fassert.h header */ @@ -73,8 +72,8 @@ extern void FAS_StoreAssertLocation(uint32_t *pc, uint32_t line) { /* AXIVION Routine Generic-MissingParameterAssert: pc: asserting does not make sense as we come from an assert */ /* AXIVION Routine Generic-MissingParameterAssert: line: line creating the assertion can be any line in uint32_t */ /* Storing the line number is redundant if we have pc and lr. - It is kept nevertheless in order to make each assert call unique and - thus avoid optimization (which makes it more confusing). */ + * It is kept nevertheless in order to make each assert call unique and + * thus avoid optimization (which makes it more confusing). */ FAS_ASSERT_LOCATION_s fas_assertLocation = { .pc = pc, .line = line, diff --git a/src/app/main/fstartup.c b/src/app/main/fstartup.c index e3b547f8..772509cf 100644 --- a/src/app/main/fstartup.c +++ b/src/app/main/fstartup.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,12 @@ * @file fstartup.c * @author foxBMS Team * @date 2020-07-09 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup GENERAL + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup MAIN * @prefix STU * * @brief Startup code - * * @details This file contains startup code mostly identical to TI code. * Function "_c_int00" is extracted from file "HL_sys_startup.c" and * function "STU_GetResetSourceWithoutFlagReset" is taken from file @@ -121,7 +120,7 @@ * @brief Handler for a failed PLL lock * @details If the PLL can not be locked the, this function shall be called to * ensure that the application no further starts. - * @return This function never returns */ + * This function never returns */ static void STU_HandlePllLockFail(void); /** @@ -132,6 +131,11 @@ static void STU_HandlePllLockFail(void); */ static resetSource_t STU_GetResetSourceWithoutFlagReset(void); +#ifdef UNITY_UNIT_TEST +extern void __TI_auto_init(void) { +} +#endif + /*========== Static Function Implementations ================================*/ void STU_HandlePllLockFail(void) { @@ -165,7 +169,8 @@ resetSource_t STU_GetResetSourceWithoutFlagReset(void) { /* Reset caused due Debug reset request */ rst_source = DEBUG_RESET; } else if ((SYS_EXCEPTION & (uint32)CPU0_RESET) != 0U) { - /* Reset caused due to CPU0 reset. CPU reset can be caused by CPU self-test completion, or by toggling the "CPU RESET" bit of the CPU Reset Control Register. */ + /* Reset caused due to CPU0 reset. CPU reset can be caused by CPU self-test completion, or by toggling the "CPU + * RESET" bit of the CPU Reset Control Register. */ rst_source = CPU0_RESET; } else { /* No_reset occurred. */ @@ -205,7 +210,7 @@ void _c_int00(void) { /* Put system in a safe state */ STU_HandlePllLockFail(); } - + /* FALLTHRU */ case DEBUG_RESET: case EXT_RESET: @@ -216,14 +221,14 @@ void _c_int00(void) { /* Enable CPU Event Export */ /* This allows the CPU to signal any single-bit or double-bit errors detected - * by its ECC logic for accesses to program flash or data RAM. - */ + * by its ECC logic for accesses to program flash or data RAM. + */ _coreEnableEventBusExport_(); /* Check if there were ESM group3 errors during power-up. - * These could occur during eFuse auto-load or during reads from flash OTP - * during power-up. Device operation is not reliable and not recommended - * in this case. */ + * These could occur during eFuse auto-load or during reads from flash OTP + * during power-up. Device operation is not reliable and not recommended + * in this case. */ if ((esmREG->SR1[2]) != 0U) { esmGroup3Notification(esmREG, esmREG->SR1[2]); } @@ -253,8 +258,8 @@ void _c_int00(void) { case CPU0_RESET: /* Enable CPU Event Export */ /* This allows the CPU to signal any single-bit or double-bit errors detected - * by its ECC logic for accesses to program flash or data RAM. - */ + * by its ECC logic for accesses to program flash or data RAM. + */ _coreEnableEventBusExport_(); break; @@ -270,8 +275,10 @@ void _c_int00(void) { /* initialize global variable and constructors */ __TI_auto_init(); +#ifndef UNITY_UNIT_TEST /* call the application */ main(); +#endif /* AXIVION Next Codeline Style MisraC2012-21.8: exit is called as in generated code by TI */ exit(0); diff --git a/src/app/main/include/config/version_cfg.h b/src/app/main/include/config/version_cfg.h index 4d4c49f3..4f68c8a4 100644 --- a/src/app/main/include/config/version_cfg.h +++ b/src/app/main/include/config/version_cfg.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,14 @@ * @file version_cfg.h * @author foxBMS Team * @date 2021-07-14 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup GENERAL + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup MAIN * @prefix VER * - * @brief Header file for the version information that is generated by the toolchain - * + * @brief Header file for the version information that is generated by the + * toolchain + * @details TODO */ #ifndef FOXBMS__VERSION_CFG_H_ @@ -84,15 +85,144 @@ typedef struct { const uint8_t minor; /*!< minor release version */ const uint8_t patch; /*!< patch release version */ const uint16_t distanceFromLastRelease; /*!< distance in commits from the last tagged release in version control */ - const char commitHash[VER_VERSION_STRUCT_MAXIMUM_COMMIT_HASH_LENGTH]; /*!< hash of the last commit */ - const char gitRemote - [VER_VERSION_STRUCT_MAXIMUM_REMOTE_STRING_LENGTH]; /*!< address of the git remote linked in the repository */ + const char commitHash[VER_VERSION_STRUCT_MAXIMUM_COMMIT_HASH_LENGTH]; /*!< hash of the last commit */ + const char gitRemote[VER_VERSION_STRUCT_MAXIMUM_REMOTE_STRING_LENGTH]; /*!< address of the git remote linked in the + repository */ } VER_VERSION_s; +/** Enums for the build information */ +/** @{ + * AFEs enum + */ +typedef enum { + LTC_LTC6804_1, + LTC_LTC6806, + LTC_LTC6811_1, + LTC_LTC6812_1, + LTC_LTC6813_1, + NXP_MC33775A, + MAXIM_MAX17852, + DEBUG_DEFAULT, + ADI_ADES1830, + TI_DUMMY, +} VER_AFES_e; +/** @} */ + +/** @{ + * soc algorithm enum + */ +typedef enum { + SOC_ALGORITHM_NONE, + SOC_ALGORITHM_DEBUG, + SOC_ALGORITHM_COUNTING, + SOC_ALGORITHM_INVALID, +} VER_SOC_ALGORITHM_e; +/** @} */ + +/** @{ + * soe algorithm enum + */ +typedef enum { + SOE_ALGORITHM_NONE, + SOE_ALGORITHM_DEBUG, + SOE_ALGORITHM_COUNTING, + SOE_ALGORITHM_INVALID, +} VER_SOE_ALGORITHM_e; +/** @} */ + +/** @{ + * sof algorithm enum + */ +typedef enum { + SOF_ALGORITHM_TRAPEZOID, + SOF_ALGORITHM_INVALID, +} VER_SOF_ALGORITHM_e; +/** @} */ + +/** @{ + * soh algorithm enum + */ +typedef enum { + SOH_ALGORITHM_NONE, + SOH_ALGORITHM_DEBUG, + SOH_ALGORITHM_INVALID, +} VER_SOH_ALGORITHM_e; +/** @} */ + +/** @{ + * balancing strategy enum + */ +typedef enum { + BALANCING_STRATEGY_NONE, + BALANCING_STRATEGY_VOLTAGE, + BALANCING_STRATEGY_HISTORY, +} VER_BALANCING_STRATEGY_e; +/** @} */ + +/** @{ + * IMD enum + */ +typedef enum { + IMD_NONE, + IMD_BENDER_ISO_165C, + IMD_BENDER_IR_155, +} VER_IMD_e; +/** @} */ + +/** @{ + * rtos enum + */ +typedef enum { + FREERTOS, + SAFERTOS, +} VER_RTOS_e; +/** @} */ + +/** @{ + * temperature sensor method enum + */ +typedef enum { + POLYNOMIAL, + LOOKUP_TABLE, +} VER_TEMPERATURE_SENSOR_METHOD_e; +/** @} */ + +/** @{ + * temperature sensors enum + */ +typedef enum { + FAK00, + EPC00, + EPC01, + MUR00, + SEM00, + VIS00, + VIS01, + VIS02, +} VER_TEMPERATURE_SENSORS_e; +/** @} */ + +/** struct type that describes the build configuration of the system */ +typedef struct { + const VER_SOC_ALGORITHM_e socAlgorithm; /*!< state estimator for soc*/ + const VER_SOE_ALGORITHM_e soeAlgorithm; /*!< state estimator for soe*/ + const VER_SOF_ALGORITHM_e sofAlgorithm; /*!< state estimator for sof*/ + const VER_SOH_ALGORITHM_e sohAlgorithm; /*!< state estimator for soh*/ + const VER_IMD_e imdName; /*!< name of the imd*/ + const VER_BALANCING_STRATEGY_e balancingStrategy; /*!< balancing strategy*/ + const VER_RTOS_e rtos; /*!< used rtos*/ + const VER_AFES_e afeName; /*!< name of the afe*/ + const VER_TEMPERATURE_SENSORS_e temperatureSensorName; /*!< name of the temperature sensor*/ + const VER_TEMPERATURE_SENSOR_METHOD_e temperatureSensorMethod; /*!< method of the temperature sensor*/ +} VER_BUILD_CONFIGURATION_s; + /*========== Extern Constant and Variable Declarations ======================*/ /** version information of the system */ extern const VER_VERSION_s ver_foxbmsVersionInformation; +/** build configuration of the system */ +extern const VER_BUILD_CONFIGURATION_s ver_foxbmsBuildConfiguration; + /*========== Extern Function Prototypes =====================================*/ /*========== Externalized Static Functions Prototypes (Unit Test) ===========*/ diff --git a/src/app/main/include/fassert.h b/src/app/main/include/fassert.h index dd5891d1..cc0ee820 100644 --- a/src/app/main/include/fassert.h +++ b/src/app/main/include/fassert.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,12 @@ * @file fassert.h * @author foxBMS Team * @date 2020-03-20 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup ASSERT + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup MAIN * @prefix FAS * * @brief Assert macro implementation - * * @details The default implementation accommodates three behaviors, * based on FAS_ASSERT_LEVEL symbol: * diff --git a/src/app/main/include/fstartup.h b/src/app/main/include/fstartup.h index 8db2c1ce..07203f69 100644 --- a/src/app/main/include/fstartup.h +++ b/src/app/main/include/fstartup.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,12 +43,13 @@ * @file fstartup.h * @author foxBMS Team * @date 2022-05-18 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup GENERAL + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup MAIN * @prefix STU * * @brief Startup code + * @details TODO */ #ifndef FOXBMS__FSTARTUP_H_ diff --git a/src/app/main/include/fstd_types.h b/src/app/main/include/fstd_types.h index e56b7ed1..127d57da 100644 --- a/src/app/main/include/fstd_types.h +++ b/src/app/main/include/fstd_types.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,12 +43,13 @@ * @file fstd_types.h * @author foxBMS Team * @date 2015-12-20 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup GENERAL_CONF + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup MAIN_CONFIGURATION * @prefix STD * * @brief Definition of foxBMS standard types + * @details TODO */ #ifndef FOXBMS__FSTD_TYPES_H_ diff --git a/src/app/main/include/fsystem.h b/src/app/main/include/fsystem.h index 170cb5dc..af165d9e 100644 --- a/src/app/main/include/fsystem.h +++ b/src/app/main/include/fsystem.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file fsystem.h * @author foxBMS Team * @date 2020-07-21 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup SYSTEM + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup MAIN * @prefix FSYS * * @brief Function to switch between user mode and privilege mode - * + * @details TODO */ #ifndef FOXBMS__FSYSTEM_H_ @@ -71,7 +71,7 @@ * and this is the way to tell it the TI compiler (see * src\os\freertos\portable\ccs\arm_cortex-r5\portasm.asm::swiRaisePrivilege) */ -/* AXIVION Disable Style MisraC2012-8.6: Function defintion is in assembler +/* AXIVION Disable Style MisraC2012-8.6: Function definition is in assembler * (see * src\os\freertos\portable\ccs\arm_cortex-r5\portasm.asm::swiRaisePrivilege) */ diff --git a/src/app/main/include/general.h b/src/app/main/include/general.h index a98ac98d..30b226b5 100644 --- a/src/app/main/include/general.h +++ b/src/app/main/include/general.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file general.h * @author foxBMS Team * @date 2019-09-24 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup GENERAL_CONF + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup MAIN_CONFIGURATION * @prefix GEN * * @brief General macros and definitions for the whole platform. - * + * @details TODO */ #ifndef FOXBMS__GENERAL_H_ diff --git a/src/app/main/include/infinite-loop-helper.h b/src/app/main/include/infinite-loop-helper.h index 83e50ca4..9aa979ec 100644 --- a/src/app/main/include/infinite-loop-helper.h +++ b/src/app/main/include/infinite-loop-helper.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file infinite-loop-helper.h * @author foxBMS Team * @date 2022-12-05 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup GENERAL_CONF + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup MAIN_CONFIGURATION * @prefix GEN * * @brief Macros for implementing testable infinite loops - * + * @details TODO */ #ifndef FOXBMS__INFINITE_LOOP_HELPER_H_ diff --git a/src/app/main/include/main.h b/src/app/main/include/main.h index d58e8c46..2c8f3a24 100644 --- a/src/app/main/include/main.h +++ b/src/app/main/include/main.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,14 +43,17 @@ * @file main.h * @author foxBMS Team * @date 2018-10-23 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup GENERAL + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup MAIN * @prefix TODO * * @brief Main function header - * - * @details TODO + * @details Declares the main function + * For the target build this header declares the standard main + * function. + * For the unit test build this header declares an alternative name + * for main so that it is unit testable. */ #ifndef FOXBMS__MAIN_H_ @@ -58,10 +61,6 @@ /*========== Includes =======================================================*/ -#include "version_cfg.h" - -#include - /*========== Macros and Definitions =========================================*/ /*========== Extern Constant and Variable Declarations ======================*/ @@ -71,7 +70,11 @@ * @brief main function of foxBMS * @details TODO */ -extern int main(void); +#ifndef UNITY_UNIT_TEST +int main(void); +#else +int unit_test_main(void); +#endif /*========== Externalized Static Functions Prototypes (Unit Test) ===========*/ #ifdef UNITY_UNIT_TEST diff --git a/src/app/main/linker_script_elf.cmd b/src/app/main/linker_script_elf.cmd index d55af2fb..c7f30f71 100644 --- a/src/app/main/linker_script_elf.cmd +++ b/src/app/main/linker_script_elf.cmd @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -81,13 +81,13 @@ #define VFILL_FLASH_PATTERN (0xffffffff) -/* size of VER_VERSION_INFORMATION (has to be large enough to accomodate the version struct) */ +/* size of VER_VERSION_INFORMATION (has to be large enough to accommodate the version struct) */ #define VERSION_INFORMATION_SIZE (0xC0) /* size of the VECTORS table */ #define VECTORS_TABLE_SIZE (0x20) -/* size of KERNEL (accomodates the OS) */ +/* size of KERNEL (accommodates the OS) */ #define KERNEL_FUNCTIONS_SIZE (0x8000) /* remaining size of flash bank 0 as at the beginning of flash bank 0 the vector diff --git a/src/app/main/linker_script_hex.cmd b/src/app/main/linker_script_hex.cmd index 1a365f88..a67d16f0 100644 --- a/src/app/main/linker_script_hex.cmd +++ b/src/app/main/linker_script_hex.cmd @@ -1,4 +1,4 @@ -/* 4b7cc0f4978f9f1747cf2a726c35d4e8 */ +/* 08255a1f512a483504934b8f203db0a0 */ /* Aligned with names in "MEMORY" in the elf-linker script */ ROMS diff --git a/src/app/main/main.c b/src/app/main/main.c index 27cd6b26..e0b90dac 100644 --- a/src/app/main/main.c +++ b/src/app/main/main.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,19 +43,19 @@ * @file main.c * @author foxBMS Team * @date 2019-08-27 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup GENERAL + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup MAIN * @prefix TODO * * @brief Main function - * * @details TODO */ /*========== Includes =======================================================*/ #include "main.h" +#include "HL_adc.h" #include "HL_crc.h" #include "HL_etpwm.h" #include "HL_gio.h" @@ -88,7 +88,12 @@ /*========== Static Function Implementations ================================*/ /*========== Extern Function Implementations ================================*/ -int main(void) { +#ifndef UNITY_UNIT_TEST +int main(void) +#else +int unit_test_main(void) +#endif +{ MINFO_SetResetSource(getResetSource()); /* Get reset source and clear respective flags */ _enable_IRQ_interrupt_(); muxInit(); diff --git a/src/app/main/wscript b/src/app/main/wscript old mode 100644 new mode 100755 index d6c269c5..5019f758 --- a/src/app/main/wscript +++ b/src/app/main/wscript @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause diff --git a/src/app/task/config/ftask_cfg.c b/src/app/task/config/ftask_cfg.c index 49e22903..dc1611be 100644 --- a/src/app/task/config/ftask_cfg.c +++ b/src/app/task/config/ftask_cfg.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file ftask_cfg.c * @author foxBMS Team * @date 2019-08-26 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup TASK_CONFIGURATION * @prefix FTSK * * @brief Task configuration - * @details + * @details TODO */ /*========== Includes =======================================================*/ @@ -171,7 +171,7 @@ extern void FTSK_InitializeUserCodeEngine(void) { /* Init FRAM */ FRAM_Initialize(); - retval = SYSM_Init(); + retval = SYSM_Initialize(); if (retval == STD_NOT_OK) { FAS_ASSERT(FAS_TRAP); @@ -186,23 +186,20 @@ extern void FTSK_RunUserCodeEngine(void) { /* See function definition doxygen comment for details */ DATA_Task(); /* Call database manager */ SYSM_CheckNotifications(); /* Check notifications from tasks */ - /* Warning: Do not change the content of this function */ - /* See function definition doxygen comment for details */ + /* Warning: Do not change the content of this function */ + /* See function definition doxygen comment for details */ } extern void FTSK_InitializeUserCodePreCyclicTasks(void) { - /* user code */ - SYS_RETURN_TYPE_e sys_retVal = SYS_ILLEGAL_REQUEST; - /* Init Sys */ - sys_retVal = SYS_SetStateRequest(SYS_STATE_INITIALIZATION_REQUEST); + SYS_RETURN_TYPE_e sys_retVal = SYS_SetStateRequest(SYS_STATE_INITIALIZATION_REQUEST); /* Init port expander */ PEX_Initialize(); - /* Set 3rd PE pin to activate temperature/humidity sensor */ - PEX_SetPinDirectionOutput(PEX_PORT_EXPANDER3, PEX_PIN00); - PEX_SetPin(PEX_PORT_EXPANDER3, PEX_PIN00); + /* Set 3rd PE pin 0 to activate temperature/humidity sensor */ + PEX_SetPinDirectionOutput(PEX_PORT_EXPANDER3, PEX_PORT_0_PIN_0); + PEX_SetPin(PEX_PORT_EXPANDER3, PEX_PORT_0_PIN_0); CONT_Initialize(); SPS_Initialize(); @@ -305,8 +302,7 @@ void FTSK_RunUserCodeAfe(void) { #endif } -extern void FTSK_RunUserCodeIdle(void) { - /* user code */ +extern void FTSK_RunUserCodeIdle(void) { /* user code */ } /*========== Externalized Static Function Implementations (Unit Test) =======*/ diff --git a/src/app/task/config/ftask_cfg.h b/src/app/task/config/ftask_cfg.h index 4649f0c4..f83782ba 100644 --- a/src/app/task/config/ftask_cfg.h +++ b/src/app/task/config/ftask_cfg.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file ftask_cfg.h * @author foxBMS Team * @date 2019-08-26 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup TASK_CONFIGURATION * @prefix FTSK * diff --git a/src/app/task/ftask/freertos/ftask_freertos.c b/src/app/task/ftask/freertos/ftask_freertos.c index 32cc8da3..28438162 100644 --- a/src/app/task/ftask/freertos/ftask_freertos.c +++ b/src/app/task/ftask/freertos/ftask_freertos.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file ftask_freertos.c * @author foxBMS Team * @date 2019-08-27 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup TASK * @prefix FTSK * @@ -102,6 +102,12 @@ /** size of storage area for the I2C over AFE slave queue*/ #define FTSK_AFEI2C_QUEUE_STORAGE_AREA (FTSK_AFEI2C_QUEUE_LENGTH * FTSK_AFEI2C_QUEUE_ITEM_SIZE_IN_BYTES) +/** size of storage area for the CAN to AFE slave queue*/ +#define FTSK_CAN2AFE_CELL_TEMPERATURES_QUEUE_STORAGE_AREA \ + (FTSK_CAN2AFE_CELL_TEMPERATURES_QUEUE_LENGTH * FTSK_CAN2AFE_CELL_TEMPERATURES_QUEUE_ITEM_SIZE_IN_BYTES) +#define FTSK_CAN2AFE_CELL_VOLTAGES_QUEUE_STORAGE_AREA \ + (FTSK_CAN2AFE_CELL_VOLTAGES_QUEUE_LENGTH * FTSK_CAN2AFE_CELL_VOLTAGES_QUEUE_ITEM_SIZE_IN_BYTES) + /*========== Static Constant and Variable Definitions =======================*/ /*========== Extern Constant and Variable Definitions =======================*/ @@ -127,6 +133,9 @@ OS_QUEUE ftsk_rtcSetTimeQueue = NULL_PTR; OS_QUEUE ftsk_afeToI2cQueue = NULL_PTR; OS_QUEUE ftsk_afeFromI2cQueue = NULL_PTR; +OS_QUEUE ftsk_canToAfeCellTemperaturesQueue = NULL_PTR; +OS_QUEUE ftsk_canToAfeCellVoltagesQueue = NULL_PTR; + /*========== Static Function Prototypes =====================================*/ /*========== Static Function Implementations ================================*/ @@ -241,6 +250,29 @@ extern void FTSK_CreateQueues(void) { vQueueAddToRegistry(ftsk_afeFromI2cQueue, "I2C over AFE slave"); FAS_ASSERT(ftsk_afeFromI2cQueue != NULL); + /* structure and array for static CAN to AFE slave queue (cell temperatures and cell voltages) */ + static uint8_t ftsk_canToAfeCellTemperaturesQueueStorageArea[FTSK_CAN2AFE_CELL_TEMPERATURES_QUEUE_STORAGE_AREA] = { + 0}; + static StaticQueue_t ftsk_canToAfeCellTemperaturesQueueStructure = {0}; + + ftsk_canToAfeCellTemperaturesQueue = xQueueCreateStatic( + FTSK_CAN2AFE_CELL_TEMPERATURES_QUEUE_LENGTH, + FTSK_CAN2AFE_CELL_TEMPERATURES_QUEUE_ITEM_SIZE_IN_BYTES, + ftsk_canToAfeCellTemperaturesQueueStorageArea, + &ftsk_canToAfeCellTemperaturesQueueStructure); + vQueueAddToRegistry(ftsk_canToAfeCellTemperaturesQueue, "CAN to AFE slave (cell temperatures)"); + FAS_ASSERT(ftsk_canToAfeCellTemperaturesQueue != NULL); + + static uint8_t ftsk_canToAfeCellVoltagesQueueStorageArea[FTSK_CAN2AFE_CELL_VOLTAGES_QUEUE_STORAGE_AREA] = {0}; + static StaticQueue_t ftsk_canToAfeCellVoltagesQueueStructure = {0}; + ftsk_canToAfeCellVoltagesQueue = xQueueCreateStatic( + FTSK_CAN2AFE_CELL_VOLTAGES_QUEUE_LENGTH, + FTSK_CAN2AFE_CELL_VOLTAGES_QUEUE_ITEM_SIZE_IN_BYTES, + ftsk_canToAfeCellVoltagesQueueStorageArea, + &ftsk_canToAfeCellVoltagesQueueStructure); + vQueueAddToRegistry(ftsk_canToAfeCellVoltagesQueue, "CAN to AFE slave (cell voltages)"); + FAS_ASSERT(ftsk_canToAfeCellVoltagesQueue != NULL); + OS_EnterTaskCritical(); ftsk_allQueuesCreated = true; OS_ExitTaskCritical(); diff --git a/src/app/task/ftask/ftask.c b/src/app/task/ftask/ftask.c index 229d8d2b..efe2e165 100644 --- a/src/app/task/ftask/ftask.c +++ b/src/app/task/ftask/ftask.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file ftask.c * @author foxBMS Team * @date 2019-08-27 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup TASK * @prefix FTSK * diff --git a/src/app/task/ftask/ftask.h b/src/app/task/ftask/ftask.h index 286b1139..a3d1d8a7 100644 --- a/src/app/task/ftask/ftask.h +++ b/src/app/task/ftask/ftask.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file ftask.h * @author foxBMS Team * @date 2019-08-27 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup TASK * @prefix FTSK * @@ -101,6 +101,14 @@ /** Size of queue item that is used for I2C transmission over NXP slave */ #define FTSK_AFEI2C_QUEUE_ITEM_SIZE_IN_BYTES (sizeof(AFE_I2C_QUEUE_s)) +/** Length of queue that is used for data transmission from CAN to AFE slave */ +#define FTSK_CAN2AFE_CELL_TEMPERATURES_QUEUE_LENGTH (5u) +#define FTSK_CAN2AFE_CELL_VOLTAGES_QUEUE_LENGTH (5u) + +/** Size of queue item that is used for data transmission from CAN to AFE slave */ +#define FTSK_CAN2AFE_CELL_TEMPERATURES_QUEUE_ITEM_SIZE_IN_BYTES (sizeof(CAN_CAN2AFE_CELL_TEMPERATURES_QUEUE_s)) +#define FTSK_CAN2AFE_CELL_VOLTAGES_QUEUE_ITEM_SIZE_IN_BYTES (sizeof(CAN_CAN2AFE_CELL_VOLTAGES_QUEUE_s)) + /*========== Extern Constant and Variable Declarations ======================*/ /** database queue */ extern OS_QUEUE ftsk_databaseQueue; @@ -124,6 +132,12 @@ extern OS_QUEUE ftsk_rtcSetTimeQueue; extern OS_QUEUE ftsk_afeToI2cQueue; extern OS_QUEUE ftsk_afeFromI2cQueue; +/** handle of the queue to transmit the received can message (cell temperature / cell voltage) to the debug/can afe */ +extern OS_QUEUE ftsk_canToAfeCellVoltagesQueue; + +/** handle of the queue to transmit the received can message (cell temperature / cell voltage) to the debug/can afe */ +extern OS_QUEUE ftsk_canToAfeCellTemperaturesQueue; + /** indicator whether the queues have successfully been initialized to be used * in other parts of the software */ extern volatile bool ftsk_allQueuesCreated; diff --git a/src/app/task/os/freertos/os_freertos.c b/src/app/task/os/freertos/os_freertos.c index 9112fddd..c10d672e 100644 --- a/src/app/task/os/freertos/os_freertos.c +++ b/src/app/task/os/freertos/os_freertos.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,14 @@ * @file os_freertos.c * @author foxBMS Team * @date 2021-11-18 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup OS * @prefix OS * * @brief FreeRTOS specific implementation of the tasks and resources used by * the system + * @details TODO */ /*========== Includes =======================================================*/ @@ -142,7 +143,7 @@ void vApplicationStackOverflowHook(TaskHandle_t xTask, char *pcTaskName) { /* After the FreeRTOS stack overflow detection has been triggered, try to instantly send a CAN message, that tells the higher level control unit, that a stack overflow appeared in one of the FreeRTOS tasks. */ - CANTX_SendReasonsForFatalErrors(CANTX_FATAL_ERRORS_ACTIONS_STACK_OVERFLOW); + CANTX_CrashDump(CANTX_FATAL_ERRORS_ACTIONS_STACK_OVERFLOW); FAS_ASSERT(FAS_TRAP); } #endif /* configCHECK_FOR_STACK_OVERFLOW */ diff --git a/src/app/task/os/freertos/os_freertos_config-validation.h b/src/app/task/os/freertos/os_freertos_config-validation.h index fbca8997..50217ffd 100644 --- a/src/app/task/os/freertos/os_freertos_config-validation.h +++ b/src/app/task/os/freertos/os_freertos_config-validation.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file os_freertos_config-validation.h * @author foxBMS Team * @date 2019-08-27 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup OS * @prefix OS * diff --git a/src/app/task/os/os.c b/src/app/task/os/os.c index 4b0c1c64..2ade9fc0 100644 --- a/src/app/task/os/os.c +++ b/src/app/task/os/os.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file os.c * @author foxBMS Team * @date 2019-08-27 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup OS * @prefix OS * * @brief Implementation of the tasks and resources used by the system - * + * @details TODO */ /*========== Includes =======================================================*/ diff --git a/src/app/task/os/os.h b/src/app/task/os/os.h index 31df7f1b..a2a1396e 100644 --- a/src/app/task/os/os.h +++ b/src/app/task/os/os.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file os.h * @author foxBMS Team * @date 2019-08-27 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup OS * @prefix OS * diff --git a/src/app/task/wscript b/src/app/task/wscript old mode 100644 new mode 100755 index beffd2c4..b019343e --- a/src/app/task/wscript +++ b/src/app/task/wscript @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -75,7 +74,8 @@ def build(bld): os.path.join("..", "application", "redundancy"), os.path.join("..", "driver", "adc"), os.path.join("..", "driver", "can"), - os.path.join("..", "driver", "can", "cbs", "tx"), + os.path.join("..", "driver", "can", "cbs", "tx-async"), + os.path.join("..", "driver", "can", "cbs", "tx-cyclic"), os.path.join("..", "driver", "config"), os.path.join("..", "driver", "contactor"), os.path.join("..", "driver", "crc"), diff --git a/src/app/wscript b/src/app/wscript old mode 100644 new mode 100755 index 9d19cc72..6b173d78 --- a/src/app/wscript +++ b/src/app/wscript @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause diff --git a/src/doxygen_src.h b/src/doxygen_src.h index 7778ac34..54426c50 100644 --- a/src/doxygen_src.h +++ b/src/doxygen_src.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file doxygen_src.h * @author foxBMS Team * @date 2019-06-02 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DOXYGEN * @prefix DX * * @brief Mainpage doxygen documentation - * + * @details TODO */ #ifndef FOXBMS__DOXYGEN_SRC_H_ @@ -61,25 +61,46 @@ *

Configuration Files

* - @ref BATTERY_CELL_CONFIGURATION * - @ref BATTERY_SYSTEM_CONFIGURATION + * - @ref ALGORITHMS * - @ref ALGORITHMS_CONFIGURATION + * - @ref APPLICATION * - @ref APPLICATION_CONFIGURATION + * - @ref DRIVERS * - @ref DRIVERS_CONFIGURATION + * - @ref ENGINE * - @ref ENGINE_CONFIGURATION * - @ref TASK_CONFIGURATION + * - @ref MAIN + * - @ref MAIN_CONFIGURATION + * - @ref OS * * @defgroup BATTERY_CELL_CONFIGURATION Battery cell configuration * * @defgroup BATTERY_SYSTEM_CONFIGURATION Battery system configuration * - * @defgroup ALGORITHMS_CONFIGURATION Algorithm configuration + * @defgroup ALGORITHMS Algorithms + * @defgroup ALGORITHMS_CONFIGURATION Algorithm configurations * - * @defgroup APPLICATION_CONFIGURATION Application configuration + * @defgroup APPLICATION Application + * @defgroup APPLICATION_CONFIGURATION Application configurations * - * @defgroup DRIVERS_CONFIGURATION Driver configuration + * @defgroup DRIVERS Driver + * @defgroup DRIVERS_CONFIGURATION Driver configurations * - * @defgroup ENGINE_CONFIGURATION Engine configuration + * @defgroup ENGINE Engine + * @defgroup ENGINE_CONFIGURATION Engine configurations * + * @defgroup TASK Task * @defgroup TASK_CONFIGURATION Task configuration + * + * @defgroup MAIN Main + * @defgroup MAIN_CONFIGURATION Main configuration + * + * @defgroup OS Operating system + * + * @defgroup STATE_MACHINE State machines (dummy group) + * @defgroup DOXYGEN Doxygen configuration (dummy group) + * */ /*========== Includes =======================================================*/ diff --git a/src/hal/wscript b/src/hal/wscript old mode 100644 new mode 100755 index e84d25da..15caace4 --- a/src/hal/wscript +++ b/src/hal/wscript @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause diff --git a/src/opt/cells/config/lg_inr18650mj1.c b/src/opt/cells/config/lg_inr18650mj1.c index 274bcdd9..5ac34853 100644 --- a/src/opt/cells/config/lg_inr18650mj1.c +++ b/src/opt/cells/config/lg_inr18650mj1.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,15 +43,13 @@ * @file lg_inr18650mj1.c * @author foxBMS Team * @date 2017-11-07 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup BATTERY_CELL_CONFIGURATION * @prefix BC * * @brief Configuration of the battery cell - * - * This files contains battery cell LUTs - * + * @details This files contains battery cell LUTs */ /*========== Includes =======================================================*/ diff --git a/src/opt/cells/config/lg_inr18650mj1.h b/src/opt/cells/config/lg_inr18650mj1.h index 79e4925e..1632e13f 100644 --- a/src/opt/cells/config/lg_inr18650mj1.h +++ b/src/opt/cells/config/lg_inr18650mj1.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,16 +43,16 @@ * @file lg_inr18650mj1.h * @author foxBMS Team * @date 2017-11-07 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup BATTERY_CELL_CONFIGURATION * @prefix BC * - * @brief Configuration of the battery cell (e.g., minimum and maximum cell voltage) - * - * This files contains basic macros of the battery cell in order to derive needed inputs - * in other parts of the software. These macros are all depended on the hardware. - * + * @brief Configuration of the battery cell (e.g., minimum and maximum cell + * voltage) + * @details This files contains basic macros of the battery cell in order to + * derive needed inputs in other parts of the software. + * These macros are all depended on the hardware. */ #ifndef FOXBMS__LG_INR18650MJ1_H_ diff --git a/src/opt/cells/config/panasonic_ncr18650bd.h b/src/opt/cells/config/panasonic_ncr18650bd.h index d4938c58..51237ebe 100644 --- a/src/opt/cells/config/panasonic_ncr18650bd.h +++ b/src/opt/cells/config/panasonic_ncr18650bd.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,16 +43,16 @@ * @file panasonic_ncr18650bd.h * @author foxBMS Team * @date 2018-10-02 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup BATTERY_CELL_CONFIGURATION * @prefix BC * - * @brief Configuration of the battery cell (e.g., minimum and maximum cell voltage) - * - * This files contains basic macros of the battery cell in order to derive needed inputs - * in other parts of the software. These macros are all depended on the hardware. - * + * @brief Configuration of the Panasonic NCR18650BD battery cell (e.g., + * minimum and maximum cell voltage) + * @details This files contains basic macros of the battery cell in order to + * derive needed inputs in other parts of the software. + * These macros are all depended on the hardware. */ #ifndef FOXBMS__PANASONIC_NCR18650BD_H_ diff --git a/src/os/freertos/README.ti-halcogen.md b/src/os/freertos/README.ti-halcogen.md index 0a58b6ae..6d4cb2e8 100644 --- a/src/os/freertos/README.ti-halcogen.md +++ b/src/os/freertos/README.ti-halcogen.md @@ -17,7 +17,7 @@ The foxBMS 2 specific configuration of the ``TI TMS570LC43x`` is found in [conf/hcg](../../../conf/hcg). However, the generated FreeRTOS sources are not the up-to-date with the current -FreeRTOS Kernel releases (see https://github.com/FreeRTOS/FreeRTOS-Kernel). +FreeRTOS Kernel releases (see ). The FreeRTOS sources downloaded from GitHub have been updated with the required changes that were included in the generated FreeRTOS sources from TI's diff --git a/src/os/freertos/freertos_cfg.json b/src/os/freertos/freertos_cfg.json index 45e2f7cb..b0f007d6 100644 --- a/src/os/freertos/freertos_cfg.json +++ b/src/os/freertos/freertos_cfg.json @@ -1,6 +1,6 @@ { - "include": [ - "include", - "portable/ccs/arm_cortex-r5" - ] + "include": [ + "include", + "portable/ccs/arm_cortex-r5" + ] } diff --git a/src/os/freertos/wscript b/src/os/freertos/wscript old mode 100644 new mode 100755 index bdbfb432..0180d746 --- a/src/os/freertos/wscript +++ b/src/os/freertos/wscript @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause diff --git a/src/os/wscript b/src/os/wscript old mode 100644 new mode 100755 index d20c5c5c..ed87a1a6 --- a/src/os/wscript +++ b/src/os/wscript @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause diff --git a/src/wscript b/src/wscript old mode 100644 new mode 100755 index 3e834c21..a2f10c75 --- a/src/wscript +++ b/src/wscript @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause diff --git a/tests/README.md b/tests/README.md new file mode 100644 index 00000000..6dc871d5 --- /dev/null +++ b/tests/README.md @@ -0,0 +1,15 @@ +# `tests` Directory Description + +| Directory Name | Long Name | Content Description | +| ---------------- | --------------------------- | ------------------------------------------------------------------------ | +| `axivion` | Axivion | Configuration files to describe the software architecture of foxBMS. Additional static program analysis configurations are stored here (e.g., MISRA-C) | +| `can` | CAN | Heuristic tests for the correct implementation of DBC file in the code | +| `ccs` | Code Composer Studio | Compiler setup for different CCS versions to compile foxBMS with | +| `cli` | Command line interface | Tests for the CLI tool, to interact with the repository | +| `c-std` | C Standard | Test setup for foxBMS's C standard detection | +| `dbc` | CAN Database | Check the validity of the DBC/SYM files | +| `hil` | Hardware-in-the-Loop | Tests and setup of the Hardware-in-the-Loop test (**not published**) | +| `os-information` | OS information | Information to search the sources for OS relevant includes, names etc. | +| `re-names` | Regex names | Scripts to verify the regular expressions that are used in Axivion setup | +| `unit` | Embedded code unit tests | Unit test code for the embedded code | +| `variants` | Variants | foxBMS build configurations (for testing in e.g., CI) | diff --git a/tests/axivion/README.md b/tests/axivion/README.md index dba55781..3ecbb9a7 100644 --- a/tests/axivion/README.md +++ b/tests/axivion/README.md @@ -8,54 +8,37 @@ - This directory contains the Axivion setup for the TI ARM CGT compiler for TI TMS570LC4357 and the project architecture. The Axivion setup is done in the following files: - - ``axivion_preinc.h`` and ``compiler_config.json`` + - `axivion_preinc.h` and `compiler_config.json` describe compiler built-ins for the TI ARM CGT compiler for TMS570LC4357. - - ``architecture.gxl``, ``architecture_config.json`` and ``mapping.gxl`` + - `architecture.gxl`, `architecture_config.json` and `mapping.gxl` describe the software architecture of foxBMS 2. - - ``axivion_config.json``, ``ci_config.json``, ``compiler_config.json``, - ``rule_config_c.json``, ``rule_config_c.py`` + - `axivion_config.json`, `ci_config.json`, `compiler_config.json`, + `rule_config_c.json`, `rule_config_c.py` provide project specific settings. -- The subdirectory ``forbidden-violations`` contains a list of rules that shall - be followed, i.e., it is not possible to introduce source code, that creates - an Axivion warning/error for that type (``forbidden-violations.txt``). +- The script `axivion_self_tests.py` and its accompanying configuration script + `axivion_self_tests.json` implement self tests of Axivion and the project + specific configuration. +- The subdirectory `violations` contains a list of rules that shall be + followed, i.e., it is not possible to introduce source code, that creates + an Axivion warning/error for that type (`forbidden-rule-violations.txt`). A script is included to verify that such source code can not be introduced to - the default branch (``check_forbidden_violations.py``). -- The subdirectory ``scripts`` contains a set of helper scripts to + the default branch (`check_violations.py`). +- The subdirectory `scripts` contains a set of helper scripts to interact with Axivion or the output of an Axivion build. See [scripts/README.md](scripts/README.md) for a detailed description. -``` -(repository-root)/tests/axivion -│ .clang-format -│ .gitignore -│ architecture.gxl -│ architecture_config.json -│ architecture_hierarchy_belongs_to_layout.gvl -│ axivion_config.json -│ axivion_preinc.h -│ ci_config.json -│ compiler_config.json -│ mapping.gxl -│ README.md -│ rule_config_c.json -│ rule_config_c.py -│ rule_config_names.json -│ rule_config_names.py -│ -├───forbidden-violations -│ check_forbidden_violations.py -│ forbidden-violations.txt -│ -└───scripts - ci_check_freshness_of_architecture_svg.py - dependency_analysis.py - gravis_export_architecture_svg.py - start_analysis.bat - start_local_analysis.bat - start_local_analysis.sh - start_local_dashserver.bat - wrapper_make_race_pdfs.bat -``` +## Self Tests + +There are four self tests implemented: + +- project specific rule extensions to Axivion (`addon`). + The accompanying tests are in (`addon-test`), +- tests that the project specific configuration for naming conventions is + correct (`config-test`), +- Axivion Tool Qualification Kit (`qualification-test`), and +- TI ARM CGT 20.2.6.LTS compiler errata tests (`compiler-errata`). + +Available tests can be run using the script `axivion_self_tests.py`. ## `compiler_config.json` diff --git a/tests/axivion/additional_compiler_config.json b/tests/axivion/additional_compiler_config.json index 795b09e6..76ee20ae 100644 --- a/tests/axivion/additional_compiler_config.json +++ b/tests/axivion/additional_compiler_config.json @@ -1,35 +1,35 @@ { - "Project": { - "TIARMToolchain": { - "_active": true, - "preincludes": { - "$(delta:+)": [ - "axivion_preinc.h" - ], - "$(delta:-)": [ - "$(builtin:AXIVION_INSTALLDIR)\\profiles\\ti\\axivion_preinc.h" - ] - }, - "switches": { - "mapping": { - "$(delta:+)": { - "--abi": { - "action": "IgnoreSwitch", - "parameter_mode": "mandatory_space_or_equal" - } - }, - "$(delta:-)": [] - }, - "response_file_preprocessor": "\"$(builtin:AXIVION_INSTALLDIR)/bin/cafe\" -E -P" + "Project": { + "TIARMToolchain": { + "_active": true, + "preincludes": { + "$(delta:+)": [ + "axivion_preinc.h" + ], + "$(delta:-)": [ + "$(builtin:AXIVION_INSTALLDIR)\\profiles\\ti\\axivion_preinc.h" + ] + }, + "switches": { + "mapping": { + "$(delta:+)": { + "--abi": { + "action": "IgnoreSwitch", + "parameter_mode": "mandatory_space_or_equal" } - } - }, - "_Format": "1.0", - "_Version": "7.5.2", - "_VersionNum": [ - 7, - 5, - 2, - 11578 - ] + }, + "$(delta:-)": [] + }, + "response_file_preprocessor": "\"$(builtin:AXIVION_INSTALLDIR)/bin/cafe\" -E -P" + } + } + }, + "_Format": "1.0", + "_Version": "7.5.2", + "_VersionNum": [ + 7, + 5, + 2, + 11578 + ] } diff --git a/tests/axivion/addon-test/run_axivion_addon_tests.bat b/tests/axivion/addon-test/run_axivion_addon_tests.bat deleted file mode 100644 index 317090dc..00000000 --- a/tests/axivion/addon-test/run_axivion_addon_tests.bat +++ /dev/null @@ -1,84 +0,0 @@ -@REM Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -@REM All rights reserved. -@REM -@REM SPDX-License-Identifier: BSD-3-Clause -@REM -@REM Redistribution and use in source and binary forms, with or without -@REM modification, are permitted provided that the following conditions are met: -@REM -@REM 1. Redistributions of source code must retain the above copyright notice, this -@REM list of conditions and the following disclaimer. -@REM -@REM 2. Redistributions in binary form must reproduce the above copyright notice, -@REM this list of conditions and the following disclaimer in the documentation -@REM and/or other materials provided with the distribution. -@REM -@REM 3. Neither the name of the copyright holder nor the names of its -@REM contributors may be used to endorse or promote products derived from -@REM this software without specific prior written permission. -@REM -@REM THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -@REM AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -@REM IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -@REM DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -@REM FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -@REM DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -@REM SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -@REM CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -@REM OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -@REM OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -@REM -@REM We kindly request you to use one or more of the following phrases to refer to -@REM foxBMS in your hardware, software, documentation or advertising materials: -@REM -@REM - "This product uses parts of foxBMS®" -@REM - "This product includes parts of foxBMS®" -@REM - "This product is derived from foxBMS®" - -@setlocal enableextensions enabledelayedexpansion - -@pushd %~dp0 -@CALL :NORMALIZE_PATH "%~dp0\..\" -@SET BAUHAUS_CONFIG=%NORMALIZED_PATH% -@ECHO Setting 'BAUHAUS_CONFIG' to '%BAUHAUS_CONFIG%' - -@for /f "tokens=*" %%s in (%~dp0..\..\..\conf\env\paths_win32.txt) do @( - @echo %%s | findstr /i "bauhaus">nul && (@SET BAUHAUS_DIR=%%s) -) - -@REM ensure output directory -@SET AXIVION_BUILD_DIR=%~dp0..\..\..\build\axivion -@IF NOT EXIST %AXIVION_BUILD_DIR% ( - @mkdir %AXIVION_BUILD_DIR% -) - -@REM prefer the perform_tests.exe that is found on PATH -@SET TEST_EXE=perform_tests.exe -@ECHO Searching program '%TEST_EXE%' -@WHERE %TEST_EXE% 1>NUL 2>NUL -@IF %ERRORLEVEL% neq 0 ( - @ECHO '%TEST_EXE%' is not in %%PATH%% - @SET TEST_RUNNER=%BAUHAUS_DIR%\%TEST_EXE% -) ELSE ( - @SET TEST_RUNNER=%TEST_EXE% -) - -@IF exist %TEST_RUNNER% ( - @ECHO Using '%TEST_RUNNER%' -) ELSE ( - @WHERE %TEST_EXE% 1>NUL 2>NUL - @IF %ERRORLEVEL% neq 0 ( - @ECHO Could not find program '%TEST_RUNNER%' - @EXIT /b 1 - ) -) -@echo Found '%TEST_RUNNER%' -@%TEST_RUNNER% test_*.c* test_*/test_*.c* -@SET TEST_RUNNER_EXIT_LEVEL=%ERRORLEVEL% -@SET BAUHAUS_CONFIG= -@popd -@EXIT /B %ERRORLEVEL% - -:NORMALIZE_PATH - @SET NORMALIZED_PATH=%~dpfn1 - @EXIT /B diff --git a/tests/axivion/addon-test/test_file_comments/not_doxygen_comment.c b/tests/axivion/addon-test/test_file_comments/not_doxygen_comment.c index d0607e5a..47482a9b 100644 --- a/tests/axivion/addon-test/test_file_comments/not_doxygen_comment.c +++ b/tests/axivion/addon-test/test_file_comments/not_doxygen_comment.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ diff --git a/tests/axivion/addon-test/test_file_comments/text_error.c b/tests/axivion/addon-test/test_file_comments/text_error.c index 8a5dbebd..33afb185 100644 --- a/tests/axivion/addon-test/test_file_comments/text_error.c +++ b/tests/axivion/addon-test/test_file_comments/text_error.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ diff --git a/tests/axivion/addon-test/test_file_comments/unexpected_tag.c b/tests/axivion/addon-test/test_file_comments/unexpected_tag.c index 3859d88f..4568cc96 100644 --- a/tests/axivion/addon-test/test_file_comments/unexpected_tag.c +++ b/tests/axivion/addon-test/test_file_comments/unexpected_tag.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ diff --git a/tests/axivion/addon-test/test_file_comments/value_error.c b/tests/axivion/addon-test/test_file_comments/value_error.c index 0ddc23b0..9f9abd14 100644 --- a/tests/axivion/addon-test/test_file_comments/value_error.c +++ b/tests/axivion/addon-test/test_file_comments/value_error.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ diff --git a/tests/axivion/addon-test/test_license_comments/license_incorrect.c b/tests/axivion/addon-test/test_license_comments/license_incorrect.c index 381670c5..197c65c3 100644 --- a/tests/axivion/addon-test/test_license_comments/license_incorrect.c +++ b/tests/axivion/addon-test/test_license_comments/license_incorrect.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ diff --git a/tests/axivion/addon-test/test_license_comments/license_short.c b/tests/axivion/addon-test/test_license_comments/license_short.c index faf7faa1..0ebfa453 100644 --- a/tests/axivion/addon-test/test_license_comments/license_short.c +++ b/tests/axivion/addon-test/test_license_comments/license_short.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause diff --git a/tests/axivion/addon-test/test_license_comments/ok.c b/tests/axivion/addon-test/test_license_comments/ok.c index e8ef0b8d..f050683c 100644 --- a/tests/axivion/addon-test/test_license_comments/ok.c +++ b/tests/axivion/addon-test/test_license_comments/ok.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ diff --git a/tests/axivion/addon/__init__.py b/tests/axivion/addon/__init__.py old mode 100644 new mode 100755 diff --git a/tests/axivion/addon/doxygen_comment_at_declaration.py b/tests/axivion/addon/doxygen_comment_at_declaration.py old mode 100644 new mode 100755 diff --git a/tests/axivion/addon/file_comment.py b/tests/axivion/addon/file_comment.py old mode 100644 new mode 100755 diff --git a/tests/axivion/addon/file_encoding_check.py b/tests/axivion/addon/file_encoding_check.py old mode 100644 new mode 100755 diff --git a/tests/axivion/addon/file_license_header.py b/tests/axivion/addon/file_license_header.py old mode 100644 new mode 100755 index 3c14cdfd..4537a3e8 --- a/tests/axivion/addon/file_license_header.py +++ b/tests/axivion/addon/file_license_header.py @@ -62,7 +62,7 @@ class IisbFileLicenseRule(iisb_base.IISBRule, analysis.AnalysisRule): re.compile(re.escape(s)) for s in """/** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -95,13 +95,11 @@ class IisbFileLicenseRule(iisb_base.IISBRule, analysis.AnalysisRule): * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * - */""".splitlines( - keepends=False - ) + */""".splitlines(keepends=False) ) _rule_description = """ @@ -133,10 +131,10 @@ def header_comments( ]: selected_files = set() if lang: - selected_files = set( + selected_files = { node.Parent for node in files_by_language.files_by_language(ir_graph, lang) - ) + } def is_of_language(filenode): return not lang or filenode in selected_files diff --git a/tests/axivion/addon/iisb_base.py b/tests/axivion/addon/iisb_base.py old mode 100644 new mode 100755 diff --git a/tests/axivion/addon/literal_suffixes.py b/tests/axivion/addon/literal_suffixes.py old mode 100644 new mode 100755 index 7b3a5373..d01faab9 --- a/tests/axivion/addon/literal_suffixes.py +++ b/tests/axivion/addon/literal_suffixes.py @@ -114,14 +114,12 @@ def check_suffix( ) _hex_literal_pattern: typing.Pattern[str] = re.compile( - ( r"(" r"(0[xX](?P['0-9A-Fa-f]+(\.['0-9A-Fa-f]+)?)(?P[pP][-+]?['0-9]+))" r"|" r"((?P['0-9]+(\.['0-9]+)?)(?P[eE][-+]?['0-9]+)?)" r")" r"(?P[fFlL])?" - ) ) def get_floating_point_suffix(self, text: str): diff --git a/tests/axivion/addon/unique_filenames.py b/tests/axivion/addon/unique_filenames.py old mode 100644 new mode 100755 diff --git a/tests/axivion/architecture_config.json b/tests/axivion/architecture_config.json index e19570eb..ade93172 100644 --- a/tests/axivion/architecture_config.json +++ b/tests/axivion/architecture_config.json @@ -1,34 +1,34 @@ { - "Analysis": { - "Architecture": { - "child_order": [ - "Architecture-ImportGXLArchitecture", - "Architecture-ImportGXLMapping", - "Architecture-ArchitectureCheck" - ] - }, - "Architecture-ArchitectureCheck": { - "_active": true - }, - "Architecture-ImportGXLArchitecture": { - "_active": true, - "_copy_from": "Architecture-GXLImport", - "gxl_file": "architecture.gxl", - "view_name": "Architecture" - }, - "Architecture-ImportGXLMapping": { - "_active": true, - "_copy_from": "Architecture-GXLImport", - "gxl_file": "mapping.gxl", - "view_name": "Mapping" - } + "Analysis": { + "Architecture": { + "child_order": [ + "Architecture-ImportGXLArchitecture", + "Architecture-ImportGXLMapping", + "Architecture-ArchitectureCheck" + ] }, - "_Format": "1.0", - "_Version": "7.5.2", - "_VersionNum": [ - 7, - 5, - 2, - 11578 - ] + "Architecture-ArchitectureCheck": { + "_active": true + }, + "Architecture-ImportGXLArchitecture": { + "_active": true, + "_copy_from": "Architecture-GXLImport", + "gxl_file": "architecture.gxl", + "view_name": "Architecture" + }, + "Architecture-ImportGXLMapping": { + "_active": true, + "_copy_from": "Architecture-GXLImport", + "gxl_file": "mapping.gxl", + "view_name": "Mapping" + } + }, + "_Format": "1.0", + "_Version": "7.5.2", + "_VersionNum": [ + 7, + 5, + 2, + 11578 + ] } diff --git a/tests/axivion/axivion_config.json b/tests/axivion/axivion_config.json index a4a9d59f..d4ac7ace 100644 --- a/tests/axivion/axivion_config.json +++ b/tests/axivion/axivion_config.json @@ -1,16 +1,16 @@ { - "_Layers": [ - "additional_compiler_config.json", - "compiler_config.json", - "ci_config.json", - "architecture_config.json", - "rule_config_c.py", - "rule_config_c.json", - "rule_config_names.py", - "rule_config_names.json", - "rule_config_include_guard.py", - "rule_config_bad_tokens.json", - "rule_config_metric_lines.json", - "rule_config_addon.json" - ] + "_Layers": [ + "additional_compiler_config.json", + "compiler_config.json", + "ci_config.json", + "architecture_config.json", + "rule_config_c.py", + "rule_config_c.json", + "rule_config_names.py", + "rule_config_names.json", + "rule_config_include_guard.py", + "rule_config_bad_tokens.json", + "rule_config_metric_lines.json", + "rule_config_addon.json" + ] } diff --git a/tests/axivion/axivion_preinc.h b/tests/axivion/axivion_preinc.h index 53d49b5a..bbac2db5 100644 --- a/tests/axivion/axivion_preinc.h +++ b/tests/axivion/axivion_preinc.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,12 +33,15 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ +#ifndef FOXBMS__AXIVION_PREINC_H_ +#define FOXBMS__AXIVION_PREINC_H_ + /* Required by Axivion */ #pragma diag_suppress unrecognized_pragma, unrecognized_attribute, invalid_error_tag, invalid_error_number, 69, 951 @@ -93,7 +96,7 @@ extern void _nassert(int src); #pragma immutable_macro __atomic_compare_exchange /* cafe has a different __atomic_is_lock_free() built-in, so redefine the - * name in TI headers to avoid ambiguitiy. */ + * name in TI headers to avoid ambiguity. */ #define __atomic_is_lock_free __atomic_is_lock_free_no_builtin #define __va_parmadr(P) (&(P)) @@ -385,3 +388,5 @@ extern unsigned long _lo(long double); /* foxBMS 2 specific adaptions */ extern unsigned _ftoi (float src); + +#endif /* FOXBMS__AXIVION_PREINC_H_ */ diff --git a/tests/axivion/axivion_self_tests.json b/tests/axivion/axivion_self_tests.json new file mode 100644 index 00000000..b66e03ad --- /dev/null +++ b/tests/axivion/axivion_self_tests.json @@ -0,0 +1,66 @@ +{ + "addon-test": { + "cwd": "${HERE}/addon-test", + "env": { + "AXIVION_BUILD_DIR": "${HERE}/../../build/axivion", + "BAUHAUS_CONFIG": "${HERE}" + }, + "runner-arguments": [ + "test_*.c*", + "test_*/test_*.c*" + ] + }, + "compiler_errata_ti-cgt-arm_20.2.6.lts": { + "cwd": "${HERE}/compiler-errata", + "env": { + "AXIVION_BUILD_DIR": "${HERE}/../../build/axivion", + "BAUHAUS_CONFIG": "${HERE}" + }, + "pre-build": [ + { + "action": "copy", + "dest": "${HERE}/compiler-errata/ti-cgt-arm_20.2.6.lts/test/ti_cgt_arm/cafeCC_config/compiler_config.json", + "source": "${HERE}/compiler_config.json" + }, + { + "action": "copy", + "dest": "${HERE}/compiler-errata/ti-cgt-arm_20.2.6.lts/test/ti_cgt_arm/cafeCC_config/axivion_preinc.h", + "source": "${HERE}/axivion_preinc.h" + } + ], + "runner-arguments": [ + "--language", + "C11", + "ti-cgt-arm_20.2.6.lts/test/ti_cgt_arm/**/*.c", + "ti-cgt-arm_20.2.6.lts/test/ti_cgt_arm/**/*.cpp" + ] + }, + "config-test": { + "cwd": "${HERE}/config-test", + "env": { + "AXIVION_BUILD_DIR": "${HERE}/../../build/axivion", + "BAUHAUS_CONFIG": "${HERE}" + }, + "runner-arguments": [ + "test_*.c*" + ] + }, + "qualification-test": { + "cwd": "${HERE}/qualification-test", + "env": { + "AXIVION_BUILD_DIR": "${HERE}/../../build/axivion", + "BAUHAUS_CONFIG": "${HERE}" + }, + "only": { + "env": { + "CI_COMMIT_MESSAGE": "update axivion" + } + }, + "runner-arguments": [ + "--language", + "C11", + "**/*.c", + "**/*.cpp" + ] + } +} diff --git a/tests/axivion/axivion_self_tests.py b/tests/axivion/axivion_self_tests.py new file mode 100755 index 00000000..d122f903 --- /dev/null +++ b/tests/axivion/axivion_self_tests.py @@ -0,0 +1,204 @@ +#!/usr/bin/env python3 +# +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# All rights reserved. +# +# SPDX-License-Identifier: BSD-3-Clause +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# We kindly request you to use one or more of the following phrases to refer to +# foxBMS in your hardware, software, documentation or advertising materials: +# +# - "This product uses parts of foxBMS®" +# - "This product includes parts of foxBMS®" +# - "This product is derived from foxBMS®" + +"""Template for Python scripts""" + +import argparse +import json +import logging +import os +import shutil +import subprocess +import sys +from copy import deepcopy +from pathlib import Path + +HERE = Path(__file__).parent +ROOT = HERE / "../.." + +TEST_CONFIGS = HERE / f"{Path(__file__).stem}.json" + + +class TestCaseErrors: # pylint: disable=too-few-public-methods + """Axivion test case""" + + def __init__(self) -> None: + self.error_level: int = 0 + self.details = [] + + def add(self, test_case, error_level): + """add a test case and increase the error level if it failed + :param test_case: test case to be added + :param error_level: error level of that test case""" + logging.error("%s: %s", test_case, error_level) + self.details.append((test_case, error_level)) + if error_level: + self.error_level += 1 + + +def set_logging_level(verbosity: int = 1) -> None: + """sets the module logging level + + :param verbosity: verbosity level""" + logging_levels = { + 0: logging.CRITICAL, + 1: logging.ERROR, + 2: logging.WARNING, + 3: logging.INFO, + 4: logging.DEBUG, + } + level = logging_levels[min(verbosity, max(logging_levels.keys()))] + logging.basicConfig( + level=level, + format=f"%(asctime)s File: {__file__}:%(lineno)d %(levelname)-8s %(message)s", + datefmt="%Y-%m-%d %H:%M:%S", + ) + logging.debug("Logging level: %s", level) + + +def check_for_run(only: dict): + """Check if environment variables indicate that a test shall run""" + if not only.get("env", {}): + sys.exit("key 'env' must be defined.") + for k, v in only["env"].items(): + var = os.environ.get(k) + if not var: + continue + if str(v) in str(var).lower(): + return True + return False + + +def main(): # pylint: disable=too-many-locals + """Run Axivion self tests""" + parser = argparse.ArgumentParser() + try: + choices = list(json.loads(TEST_CONFIGS.read_text(encoding="utf-8")).keys()) + except json.JSONDecodeError: + sys.exit(f"Could not load test cases from {TEST_CONFIGS.absolute()}") + all_choices = choices + ["all"] + + parser.add_argument( + "--test-case", + dest="test_case", + required=True, + choices=all_choices, + action="append", + help="Test case to run.", + ) + parser.add_argument( + "-v", + "--verbosity", + dest="verbosity", + action="count", + default=0, + help="set verbosity level", + ) + args = parser.parse_args() + + set_logging_level(args.verbosity) + if "all" in args.test_case: + logging.debug("Testing all test cases: %s", ", ".join(choices)) + args.test_case.remove("all") + args.test_case = choices + + perform_tests_exe_name = "perform_tests" + perform_tests = shutil.which(perform_tests_exe_name) + if not perform_tests: + search_path = "" + paths = (ROOT / "conf/env/paths_win32.txt").read_text(encoding="utf-8") + for path in paths: + if "bauhaus" in path.lower(): + search_path = path + break + if not search_path: + sys.exit(f"Could not find {perform_tests_exe_name}.") + perform_tests = shutil.which(perform_tests_exe_name, path=search_path) + if not perform_tests: + sys.exit(f"Could not find {perform_tests_exe_name}.") + logging.debug("Using %s", perform_tests) + + txt = TEST_CONFIGS.read_text(encoding="utf-8") + txt = txt.replace("${HERE}", HERE.as_posix()) + + err = TestCaseErrors() + config: dict = json.loads(txt) + + for i in args.test_case: + logging.debug("Test configuration:\n%s", json.dumps(config[i], indent=2)) + cmd = [perform_tests] + config[i].get("runner-arguments", []) + logging.debug("cmd: %s", " ".join(cmd)) + + cwd = config[i].get("cwd", HERE) + logging.debug("cwd: %s", cwd) + + env = deepcopy(os.environ) + for var, value in config[i].get("env", {}).items(): + env[var] = value + logging.debug("var: %s=%s", var, value) + + for j in config[i].get("pre-build", []): + action = j["action"] + logging.debug("Running pre-build step...") + if action == "copy": + logging.debug("Copy '%s' to '%s'.", j["source"], j["dest"]) + shutil.copyfile(j["source"], j["dest"]) + + needs_to_run = True + if only := config[i].get("only", False): + needs_to_run = check_for_run(only) + + if needs_to_run: + logging.info("Running test '%s'", i) + with subprocess.Popen(cmd, cwd=cwd, env=env) as p: + p.communicate() + err.add(i, p.returncode) + else: + logging.warning("Skipped test '%s'", i) + err.add(i, 0) + + if err.error_level: + logging.error("\nThe following test cases failed:\n----") + for i in err.details: + logging.error("%s: %s", i[0], i[1]) + sys.exit(err.error_level) + + +if __name__ == "__main__": + main() diff --git a/tests/axivion/ci_config.json b/tests/axivion/ci_config.json index 6774e222..28a6530c 100644 --- a/tests/axivion/ci_config.json +++ b/tests/axivion/ci_config.json @@ -1,74 +1,74 @@ { - "Analysis": { - "Analysis-GlobalOptions": { - "global_excludes": [ - "C:/ti/*", - "*src/app/driver/afe/nxp/mc33775a/vendor/*", - "*src/app/driver/sbc/fs8x_driver/*", - "*src/hal/*", - "*src/os/*" - ] - }, - "SaveRFG": { - "_active": true, - "rfg_file": "../../build/axivion/foxbms.elf.rfg" - } + "Analysis": { + "Analysis-GlobalOptions": { + "global_excludes": [ + "C:/ti/*", + "*src/app/driver/afe/nxp/mc33775a/vendor/*", + "*src/app/driver/sbc/fs8x_driver/*", + "*src/hal/*", + "*src/os/*" + ] }, - "Project": { - "BuildSystemIntegration": { - "child_order": [ - "Command" - ] - }, - "Command": { - "_active": true, - "build_command": "$(builtin:AXIVION_CONFDIR)/../../waf.bat configure build_axivion -v -c yes", - "clean_command": "$(builtin:AXIVION_CONFDIR)/../../waf.bat configure clean_axivion -v -c yes", - "cwd": "." - }, - "Git": { - "_active": true, - "sourceserver_gitdir": "$(env:sourceServerGitDir=)" - }, - "Project-GlobalOptions": { - "ci_mode": { - "clean_after": false, - "clean_before": "!$(env:SKIP_PREBUILD_CLEAN=false)" - }, - "directory": "../..", - "ir": "build/axivion/foxbms.elf", - "name": "$(env:analysisProjectName=foxbms-2)" - }, - "Shadow": { - "_active": true, - "include_globbings": [ - "*.[ch]" - ], - "rootpath": "build/axivion/src/app/main", - "shadow_directory": "$(env:projectShadowRepo)" - } + "SaveRFG": { + "_active": true, + "rfg_file": "../../build/axivion/foxbms.elf.rfg" + } + }, + "Project": { + "BuildSystemIntegration": { + "child_order": [ + "Command" + ] }, - "Results": { - "Dashboard": { - "dashboard_url": "$(env:AXIVION_DASHBOARD_URL=)" - }, - "Database": { - "ci_mode": { - "directory": "$(AXIVION_DATABASES_DIR=.)", - "filename": "$(env:databaseFileRemote=)" - } - }, - "JSONReport": { - "_active": true, - "filename": "foxbms_spa_report.json" - } + "Command": { + "_active": true, + "build_command": "$(builtin:AXIVION_CONFDIR)/../../fox.bat waf configure build_axivion -v -c yes", + "clean_command": "$(builtin:AXIVION_CONFDIR)/../../fox.bat waf configure clean_axivion -v -c yes", + "cwd": "." }, - "_Format": "1.0", - "_Version": "7.5.2", - "_VersionNum": [ - 7, - 5, - 2, - 11578 - ] + "Git": { + "_active": true, + "sourceserver_gitdir": "$(env:sourceServerGitDir=)" + }, + "Project-GlobalOptions": { + "ci_mode": { + "clean_after": false, + "clean_before": "!$(env:SKIP_PREBUILD_CLEAN=false)" + }, + "directory": "../..", + "ir": "build/axivion/foxbms.elf", + "name": "$(env:analysisProjectName=foxbms-2)" + }, + "Shadow": { + "_active": true, + "include_globbings": [ + "*.[ch]" + ], + "rootpath": "build/axivion/src/app/main", + "shadow_directory": "$(env:projectShadowRepo)" + } + }, + "Results": { + "Dashboard": { + "dashboard_url": "$(env:AXIVION_DASHBOARD_URL=)" + }, + "Database": { + "ci_mode": { + "directory": "$(AXIVION_DATABASES_DIR=.)", + "filename": "$(env:databaseFileRemote=)" + } + }, + "JSONReport": { + "_active": true, + "filename": "foxbms_spa_report.json" + } + }, + "_Format": "1.0", + "_Version": "7.5.2", + "_VersionNum": [ + 7, + 5, + 2, + 11578 + ] } diff --git a/tests/axivion/combine_report_files.py b/tests/axivion/combine_report_files.py new file mode 100755 index 00000000..a0edc8de --- /dev/null +++ b/tests/axivion/combine_report_files.py @@ -0,0 +1,201 @@ +#!/usr/bin/env python3 +# +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# All rights reserved. +# +# SPDX-License-Identifier: BSD-3-Clause +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# We kindly request you to use one or more of the following phrases to refer to +# foxBMS in your hardware, software, documentation or advertising materials: +# +# - "This product uses parts of foxBMS®" +# - "This product includes parts of foxBMS®" +# - "This product is derived from foxBMS®" + +"""This script combines all provided analysis reports to on large report.""" + +import argparse +import json +import logging +import sys +import os +from pathlib import Path +from dataclasses import dataclass +from typing import List, Tuple +import tabulate + + +@dataclass +class Analysis: + """Stores the analysis report path and the report itself""" + + file: Path + analysis: dict + + +INDEX_TEMPLATE = """ + + + Custom Axivion Reports + + + + + +""" + + +def get_location(violation: dict) -> Tuple[str, int, int]: + """Returns the location of a violation""" + file_path = violation.get("path", "") + if not file_path: + file_path = violation.get("leftPath", "") + if not file_path: + file_path = "." + line = violation.get("line", "") or violation.get("leftLine", 0) + column = violation.get("column", 1) + return (file_path, line, column) + + +# pylint: disable-next=too-many-locals +def combine_analysis_reports(reports: List[Analysis]) -> int: + """Creates a custom HTML report based on the JSON analysis report. + It further creates one HTML report for all builds that combines all + violations.""" + all_errors = [] + header = ("Location", "Violation", "Entity", "Message", "Entity") + for report in reports: + errors = [] + for violation in report.analysis: + if not violation.get("isViolation", True): + continue + if not violation.get("suppressed", False): + continue + file_path, line, column = get_location(violation) + error_number = violation.get("errorNumber", "Unknown") + if error_number == "Architecture-ArchitectureCheck": + entity = ( + violation.get("architectureSourceLinkName", "") + + " --> " + + violation.get("architectureTargetLinkName", "") + ) + else: + entity = violation.get("entity", None) + message = violation.get("message", None) + errors.append((file_path, line, column, error_number, entity, message)) + + sorted_errors = sorted(errors, key=lambda x: (x[0], x[1])) + formatted_errors = [] + for file_path, line, column, error_number, entity, message in sorted_errors: + location = f"{file_path}:{line}:{column}" + entry = (location, entity, error_number, message) + formatted_errors.append(entry) + if entry not in all_errors: + all_errors.append(entry) + + with open(f"files_{report.file.stem}.html", "w", encoding="utf-8") as f: + out_txt = tabulate.tabulate( + formatted_errors, tablefmt="html", showindex=True, headers=header + ) + f.write(out_txt) + with open("files.html", "w", encoding="utf-8") as f: + out_txt = tabulate.tabulate( + all_errors, tablefmt="html", showindex=True, headers=header + ) + f.write(out_txt) + with open("index.html", "w", encoding="utf-8") as f: + links = "" + for i in reports: + link_name = i.file.stem.replace("foxbms_", "").replace("_spa_report", "") + link_name = " : ".join(link_name.split("_")) + links += f'
  • {link_name}
  • \n' + index_txt = INDEX_TEMPLATE.replace("@REPORTS@", links.rstrip()) + f.write(index_txt) + return 0 + + +def main(): + """TODO""" + parser = argparse.ArgumentParser( + description="""This script combinee several analysis reports to a single report.""", + formatter_class=argparse.RawTextHelpFormatter, + ) + parser.add_argument( + "-v", + "--verbosity", + dest="verbosity", + action="count", + default=0, + help="Set verbosity level", + ) + parser.add_argument( + "report_files", + action="store", + default=None, + nargs="+", + type=Path, + help="Axivion report file(s)", + ) + args = parser.parse_args() + + if args.verbosity == 1: + logging.basicConfig(level=logging.INFO) + elif args.verbosity > 1: + logging.basicConfig(level=logging.DEBUG) + else: + logging.basicConfig(level=logging.ERROR) + + for k, v in args.__dict__.items(): + logging.debug("%s: %s", k, v) + + valid = True + for report in args.report_files: + if not report.is_file(): + valid = False + logging.error("report: File '%s' does not exist.", report) + if not valid: + sys.exit("Invalid script arguments.") + + reports = [ + Analysis(i, json.loads(i.read_text(encoding="utf-8"))) + for i in args.report_files + ] + logging.info( + "Successfully loaded JSON report files:\n%s", + os.linesep.join(str(i) for i in args.report_files), + ) + + err = combine_analysis_reports(reports) + sys.exit(err) + + +if __name__ == "__main__": + main() diff --git a/tests/axivion/compiler-errata/README.md b/tests/axivion/compiler-errata/README.md index 5594368c..1568d76d 100644 --- a/tests/axivion/compiler-errata/README.md +++ b/tests/axivion/compiler-errata/README.md @@ -1,28 +1,29 @@ # Axivion Compiler Errata Tests -This directory and its subdirectories contain Compiler Errata tests for +This directory and its subdirectories contain Compiler Errata Tests (CET) for different compilers. -> **NOTE:** ``perform_tests.exe`` must be on PATH in the correct version. +> **NOTE:** `perform_tests.exe` must be on PATH in the correct version. -- The test files of the compiler errata tests are in the directory - ``./compiler-errata/``. - **The test files are not part of the public foxBMS 2 release.** - - ``ti-cgt-arm_20.2.6.lts``: - - [ARM Code Generation Tools v20.2.6.LTS](https://software-dl.ti.com/codegen/esd/cgt_public_sw/TMS470/20.2.6.LTS/README.html) - - test script: ``run_axivion_compiler_errata_ti-cgt-arm_20.2.6.lts_tests.bat`` - - Bauhaus version: X.Y.Z +- This test can be run using the test script: + `/tests/axivion/axivion_self_tests.py` +- The test files of the CET are in the directory + `/tests/axivion/compiler-errata`. + **These test files are not part of the public foxBMS 2 release.** + - For ARM Code Generation Tools v20.2.6.LTS: + - Tests: `/tests/axivion/compiler-errata/ti-cgt-arm_20.2.6.lts`: + - Compiler errata documentation: [ARM Code Generation Tools v20.2.6.LTS](https://software-dl.ti.com/codegen/esd/cgt_public_sw/TMS470/20.2.6.LTS/README.html) - To ensure that the test suite is not changed inadvertently, the SHA-256 of the directory is checked in CI: - ```console - tools\utils\cmd\run-python-script.bat tools\utils\verify_checksums.py tests\axivion\compiler-errata\ti-cgt-arm_20.2.6.lts -vv + + ```pwsh + PS C:\Users\vulpes\Documents\foxbms-2> .\fox.ps1 run-script tools\utils\verify_checksums.py tests\axivion\compiler-errata\ti-cgt-arm_20.2.6.lts -vv ``` -- If the compiler errata tests are changed/updated the following needs to be done: - - The changes need to be applied in ``./compiler-errata/`` + +- If the CET are changed/updated the following needs to be done: + - The changes need to be applied in + `/tests/axivion/compiler-errata/`. - The known SHA-256 of the test files needs to be updated in the CI step. - - the commit message **MUST** contain ``Axivion``. - This ensures that the compiler errata tests are run. -- When the Axivion Bauhaus Suite is updated, the compiler-errata tests need - also to be updated. +- When the Axivion Bauhaus Suite is updated, the CET also needs to be updated. The pinned Bauhaus version is found in - ``/conf/env/paths_win32.txt``. + `/conf/env/paths_win32.txt`. diff --git a/tests/axivion/compiler-errata/run_axivion_compiler_errata_ti-cgt-arm_20.2.6.lts_tests.bat b/tests/axivion/compiler-errata/run_axivion_compiler_errata_ti-cgt-arm_20.2.6.lts_tests.bat deleted file mode 100644 index 8b3a3ab7..00000000 --- a/tests/axivion/compiler-errata/run_axivion_compiler_errata_ti-cgt-arm_20.2.6.lts_tests.bat +++ /dev/null @@ -1,89 +0,0 @@ -@REM Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -@REM All rights reserved. -@REM -@REM SPDX-License-Identifier: BSD-3-Clause -@REM -@REM Redistribution and use in source and binary forms, with or without -@REM modification, are permitted provided that the following conditions are met: -@REM -@REM 1. Redistributions of source code must retain the above copyright notice, this -@REM list of conditions and the following disclaimer. -@REM -@REM 2. Redistributions in binary form must reproduce the above copyright notice, -@REM this list of conditions and the following disclaimer in the documentation -@REM and/or other materials provided with the distribution. -@REM -@REM 3. Neither the name of the copyright holder nor the names of its -@REM contributors may be used to endorse or promote products derived from -@REM this software without specific prior written permission. -@REM -@REM THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -@REM AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -@REM IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -@REM DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -@REM FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -@REM DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -@REM SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -@REM CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -@REM OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -@REM OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -@REM -@REM We kindly request you to use one or more of the following phrases to refer to -@REM foxBMS in your hardware, software, documentation or advertising materials: -@REM -@REM - "This product uses parts of foxBMS®" -@REM - "This product includes parts of foxBMS®" -@REM - "This product is derived from foxBMS®" - -@setlocal enableextensions enabledelayedexpansion - -@pushd %~dp0 -@CALL :NORMALIZE_PATH "%~dp0\..\" -@SET BAUHAUS_CONFIG=%NORMALIZED_PATH% -@ECHO Setting 'BAUHAUS_CONFIG' to '%BAUHAUS_CONFIG%' - -@for /f "tokens=*" %%s in (%~dp0..\..\..\conf\env\paths_win32.txt) do @( - @echo %%s | findstr /i "bauhaus">nul && (@SET BAUHAUS_DIR=%%s) -) - -@REM copy current compiler configuration to test directory -@copy /y %BAUHAUS_CONFIG%\compiler_config.json %~dp0\ti-cgt-arm_20.2.6.lts\test\ti_cgt_arm\cafeCC_config\compiler_config.json -@copy /y %BAUHAUS_CONFIG%\axivion_preinc.h %~dp0\ti-cgt-arm_20.2.6.lts\test\ti_cgt_arm\cafeCC_config\axivion_preinc.h - -@REM ensure output directory -@SET AXIVION_BUILD_DIR=%~dp0..\..\..\build\axivion -@IF NOT EXIST %AXIVION_BUILD_DIR% ( - @mkdir %AXIVION_BUILD_DIR% -) - -@REM prefer the perform_tests.exe that is found on PATH -@SET TEST_EXE=perform_tests.exe -@ECHO Searching program '%TEST_EXE%' -@WHERE %TEST_EXE% 1>NUL 2>NUL -@IF %ERRORLEVEL% neq 0 ( - @ECHO '%TEST_EXE%' is not in %%PATH%% - @SET TEST_RUNNER=%BAUHAUS_DIR%\%TEST_EXE% -) ELSE ( - @SET TEST_RUNNER=%TEST_EXE% -) - -@IF exist %TEST_RUNNER% ( - @ECHO Using '%TEST_RUNNER%' -) ELSE ( - @WHERE %TEST_EXE% 1>NUL 2>NUL - @IF %ERRORLEVEL% neq 0 ( - @ECHO Could not find program '%TEST_RUNNER%' - @EXIT /b 1 - ) -) -@echo Found '%TEST_RUNNER%' -%TEST_RUNNER% %* --language C11 ti-cgt-arm_20.2.6.lts/test/ti_cgt_arm/**/*.c ti-cgt-arm_20.2.6.lts/test/ti_cgt_arm/**/*.cpp -@SET TEST_RUNNER_EXIT_LEVEL=%ERRORLEVEL% - -@SET BAUHAUS_CONFIG= -@popd -@EXIT /B %TEST_RUNNER_EXIT_LEVEL% - -:NORMALIZE_PATH - @SET NORMALIZED_PATH=%~dpfn1 - @EXIT /B diff --git a/tests/axivion/compiler_config.json b/tests/axivion/compiler_config.json index c2a79f5b..77bffd0c 100644 --- a/tests/axivion/compiler_config.json +++ b/tests/axivion/compiler_config.json @@ -1,250 +1,250 @@ { - "Project": { - "TIARMToolchain": { - "_active": true, - "language_c": { - "features": {}, - "language_version": "C11", - "native_compiler": "C:\\ti\\ccs1200\\ccs\\tools\\compiler\\ti-cgt-arm_20.2.6.LTS\\bin\\armcl.EXE", - "preprocessing": { - "predefined_macros": { - "_OPTIMIZE_FOR_SPACE": "1", - "__32bis__": "1", - "__ARM_32BIT_STATE": "1", - "__ARM_ACLE": "200", - "__ARM_ARCH": "7", - "__ARM_ARCH_ISA_ARM": "1", - "__ARM_ARCH_ISA_THUMB": "2", - "__ARM_ARCH_PROFILE": "82", - "__ARM_BIG_ENDIAN": "1", - "__ARM_FEATURE_CLZ": "1", - "__ARM_FEATURE_DSP": "1", - "__ARM_FEATURE_LDREX": "15", - "__ARM_FEATURE_SAT": "1", - "__ARM_FEATURE_SIMD32": "1", - "__ARM_FEATURE_UNALIGNED": "1", - "__ARM_FP": "12", - "__ARM_FP16_ARGS": "1", - "__ARM_FP16_FORMAT_IEEE": "1", - "__ARM_PCS": "1", - "__ARM_PCS_VFP": "1", - "__ARM_SIZEOF_MINIMAL_ENUM": "1", - "__ARM_SIZEOF_WCHAR_T": "2", - "__BIG_ENDIAN__": "1", - "__CHAR_BIT__": "8", - "__COMPILER_VERSION__": "20002006", - "__EDG_VERSION__": "413", - "__ELF__": "1", - "__INT_MAX__": "2147483647", - "__LONG_LONG_MAX__": "9223372036854775807", - "__LONG_MAX__": "2147483647", - "__PRAGMA_REDEFINE_EXTNAME": "1", - "__PTRDIFF_T_TYPE__": "int", - "__SCHAR_MAX__": "127", - "__SHRT_MAX__": "32767", - "__SIZEOF_DOUBLE__": "8", - "__SIZEOF_FLOAT__": "4", - "__SIZEOF_INT__": "4", - "__SIZEOF_LONG_DOUBLE__": "8", - "__SIZEOF_LONG_LONG__": "8", - "__SIZEOF_LONG__": "4", - "__SIZEOF_PTRDIFF_T__": "4", - "__SIZEOF_SHORT__": "2", - "__SIZEOF_SIZE_T__": "4", - "__SIZEOF_WCHAR_T__": "2", - "__SIZEOF_WINT_T__": "2", - "__SIZE_T_TYPE__": "unsigned", - "__STDC_HOSTED__": "1", - "__STDC_NO_THREADS__": "1", - "__STDC_UTF_16__": "1", - "__STDC_UTF_32__": "1", - "__TI_ARM_V7R4__": "1", - "__TI_ARM_V7R5__": "1", - "__TI_ARM_V7__": "1", - "__TI_ARM__": "1", - "__TI_C99_COMPLEX_ENABLED__": "1", - "__TI_COMPILER_VERSION_QUAL_ID__": "22020", - "__TI_COMPILER_VERSION_QUAL__": "QUAL_LETTER", - "__TI_COMPILER_VERSION__": "20002006", - "__TI_EABI_SUPPORT__": "1", - "__TI_EABI__": "1", - "__TI_GNU_ATTRIBUTE_SUPPORT__": "1", - "__TI_STRICT_ANSI_MODE__": "1", - "__TI_STRICT_FP_MODE__": "1", - "__TI_TMS470_V7R4__": "1", - "__TI_TMS470_V7R5__": "1", - "__TI_TMS470_V7__": "1", - "__TI_VFPV3D16_SUPPORT__": "1", - "__TI_VFP_SUPPORT__": "1", - "__TI_WCHAR_T_BITS__": "16", - "__TMS470__": "1", - "__WCHAR_T_TYPE__": "unsigned short", - "__big_endian__": "1", - "__eabi__": "1", - "__edg_front_end__": "1", - "__unsigned_chars__": "1" - }, - "sys_include_path": [ - "C:/ti/ccs1200/ccs/tools/compiler/ti-cgt-arm_20.2.6.LTS/include" - ] - } - }, - "language_c.command.#": "C:\\ti\\ccs1200\\ccs\\tools\\compiler\\ti-cgt-arm_20.2.6.LTS\\bin\\armcl.EXE --silicon_version=7R5 --code_state=32 --float_support=VFPv3D16 -g --diag_wrap=off --display_error_number --enum_type=packed --abi=eabi --c11 -Ooff --issue_remarks --strict_ansi", - "language_c.info.#": "20.2.6\n", - "language_cxx": { - "features": { - "exceptions": false, - "runtime_type_information": false - }, - "language_version": "Cpp14", - "native_compiler": "C:\\ti\\ccs1200\\ccs\\tools\\compiler\\ti-cgt-arm_20.2.6.LTS\\bin\\armcl.EXE", - "preprocessing": { - "predefined_macros": { - "_BOOL": "1", - "_OPTIMIZE_FOR_SPACE": "1", - "_WCHAR_T": "1", - "__32bis__": "1", - "__ARM_32BIT_STATE": "1", - "__ARM_ACLE": "200", - "__ARM_ARCH": "7", - "__ARM_ARCH_ISA_ARM": "1", - "__ARM_ARCH_ISA_THUMB": "2", - "__ARM_ARCH_PROFILE": "82", - "__ARM_BIG_ENDIAN": "1", - "__ARM_FEATURE_CLZ": "1", - "__ARM_FEATURE_DSP": "1", - "__ARM_FEATURE_LDREX": "15", - "__ARM_FEATURE_SAT": "1", - "__ARM_FEATURE_SIMD32": "1", - "__ARM_FEATURE_UNALIGNED": "1", - "__ARM_FP": "12", - "__ARM_FP16_ARGS": "1", - "__ARM_FP16_FORMAT_IEEE": "1", - "__ARM_PCS": "1", - "__ARM_PCS_VFP": "1", - "__ARM_SIZEOF_MINIMAL_ENUM": "1", - "__ARM_SIZEOF_WCHAR_T": "2", - "__ARRAY_OPERATORS": "1", - "__BIG_ENDIAN__": "1", - "__CHAR16_T_AND_CHAR32_T": "1", - "__CHAR_BIT__": "8", - "__COMPILER_VERSION__": "20002006", - "__EDG_VERSION__": "413", - "__ELF__": "1", - "__INT_MAX__": "2147483647", - "__LONG_LONG_MAX__": "9223372036854775807", - "__LONG_MAX__": "2147483647", - "__PLACEMENT_DELETE": "1", - "__PRAGMA_REDEFINE_EXTNAME": "1", - "__PTRDIFF_T_TYPE__": "int", - "__SCHAR_MAX__": "127", - "__SHRT_MAX__": "32767", - "__SIZEOF_DOUBLE__": "8", - "__SIZEOF_FLOAT__": "4", - "__SIZEOF_INT__": "4", - "__SIZEOF_LONG_DOUBLE__": "8", - "__SIZEOF_LONG_LONG__": "8", - "__SIZEOF_LONG__": "4", - "__SIZEOF_PTRDIFF_T__": "4", - "__SIZEOF_SHORT__": "2", - "__SIZEOF_SIZE_T__": "4", - "__SIZEOF_WCHAR_T__": "2", - "__SIZEOF_WINT_T__": "2", - "__SIZE_T_TYPE__": "unsigned", - "__STDC_HOSTED__": "1", - "__TI_ARM_V7R4__": "1", - "__TI_ARM_V7R5__": "1", - "__TI_ARM_V7__": "1", - "__TI_ARM__": "1", - "__TI_C99_COMPLEX_ENABLED__": "1", - "__TI_COMPILER_VERSION_QUAL_ID__": "22020", - "__TI_COMPILER_VERSION_QUAL__": "QUAL_LETTER", - "__TI_COMPILER_VERSION__": "20002006", - "__TI_EABI_SUPPORT__": "1", - "__TI_EABI__": "1", - "__TI_GNU_ATTRIBUTE_SUPPORT__": "1", - "__TI_STRICT_ANSI_MODE__": "1", - "__TI_STRICT_FP_MODE__": "1", - "__TI_TMS470_V7R4__": "1", - "__TI_TMS470_V7R5__": "1", - "__TI_TMS470_V7__": "1", - "__TI_VFPV3D16_SUPPORT__": "1", - "__TI_VFP_SUPPORT__": "1", - "__TI_WCHAR_T_BITS__": "16", - "__TMS470__": "1", - "__VARIADIC_TEMPLATES": "1", - "__WCHAR_T_TYPE__": "unsigned short", - "__big_endian__": "1", - "__eabi__": "1", - "__edg_front_end__": "1", - "__unsigned_chars__": "1" - }, - "sys_include_path": [ - "C:/ti/ccs1200/ccs/tools/compiler/ti-cgt-arm_20.2.6.LTS/include/libcxx", - "C:/ti/ccs1200/ccs/tools/compiler/ti-cgt-arm_20.2.6.LTS/include" - ] - } - }, - "language_cxx.command.#": "C:\\ti\\ccs1200\\ccs\\tools\\compiler\\ti-cgt-arm_20.2.6.LTS\\bin\\armcl.EXE --silicon_version=7R5 --code_state=32 --float_support=VFPv3D16 -g --diag_wrap=off --display_error_number --enum_type=packed --abi=eabi --c11 -Ooff --issue_remarks --strict_ansi", - "language_cxx.info.#": "20.2.6\n", - "linker": { - "library_path": [] - }, - "preincludes": [ - "$(builtin:AXIVION_INSTALLDIR)\\profiles\\ti\\axivion_preinc.h" - ], - "switches": { - "mapping": { - "$(delta:-)": [] - } - }, - "types": { - "char_bits": 8, - "char_unsigned": true, - "double_type": { - "alignof": 8, - "sizeof": 8 - }, - "float_type": { - "alignof": 4, - "sizeof": 4 - }, - "int_type": { - "alignof": 4, - "sizeof": 4 - }, - "long_double_type": { - "alignof": 8, - "sizeof": 8 - }, - "long_long_type": { - "alignof": 8, - "sizeof": 8 - }, - "long_type": { - "alignof": 4, - "sizeof": 4 - }, - "pointer_type": { - "alignof": 4, - "sizeof": 4 - }, - "ptrdiff_t_type": "signed int", - "short_type": { - "alignof": 2, - "sizeof": 2 - }, - "size_t_type": "unsigned int", - "wchar_t_type": "unsigned short" - } + "Project": { + "TIARMToolchain": { + "_active": true, + "language_c": { + "features": {}, + "language_version": "C11", + "native_compiler": "C:\\ti\\ccs1200\\ccs\\tools\\compiler\\ti-cgt-arm_20.2.6.LTS\\bin\\armcl.EXE", + "preprocessing": { + "predefined_macros": { + "_OPTIMIZE_FOR_SPACE": "1", + "__32bis__": "1", + "__ARM_32BIT_STATE": "1", + "__ARM_ACLE": "200", + "__ARM_ARCH": "7", + "__ARM_ARCH_ISA_ARM": "1", + "__ARM_ARCH_ISA_THUMB": "2", + "__ARM_ARCH_PROFILE": "82", + "__ARM_BIG_ENDIAN": "1", + "__ARM_FEATURE_CLZ": "1", + "__ARM_FEATURE_DSP": "1", + "__ARM_FEATURE_LDREX": "15", + "__ARM_FEATURE_SAT": "1", + "__ARM_FEATURE_SIMD32": "1", + "__ARM_FEATURE_UNALIGNED": "1", + "__ARM_FP": "12", + "__ARM_FP16_ARGS": "1", + "__ARM_FP16_FORMAT_IEEE": "1", + "__ARM_PCS": "1", + "__ARM_PCS_VFP": "1", + "__ARM_SIZEOF_MINIMAL_ENUM": "1", + "__ARM_SIZEOF_WCHAR_T": "2", + "__BIG_ENDIAN__": "1", + "__CHAR_BIT__": "8", + "__COMPILER_VERSION__": "20002006", + "__EDG_VERSION__": "413", + "__ELF__": "1", + "__INT_MAX__": "2147483647", + "__LONG_LONG_MAX__": "9223372036854775807", + "__LONG_MAX__": "2147483647", + "__PRAGMA_REDEFINE_EXTNAME": "1", + "__PTRDIFF_T_TYPE__": "int", + "__SCHAR_MAX__": "127", + "__SHRT_MAX__": "32767", + "__SIZEOF_DOUBLE__": "8", + "__SIZEOF_FLOAT__": "4", + "__SIZEOF_INT__": "4", + "__SIZEOF_LONG_DOUBLE__": "8", + "__SIZEOF_LONG_LONG__": "8", + "__SIZEOF_LONG__": "4", + "__SIZEOF_PTRDIFF_T__": "4", + "__SIZEOF_SHORT__": "2", + "__SIZEOF_SIZE_T__": "4", + "__SIZEOF_WCHAR_T__": "2", + "__SIZEOF_WINT_T__": "2", + "__SIZE_T_TYPE__": "unsigned", + "__STDC_HOSTED__": "1", + "__STDC_NO_THREADS__": "1", + "__STDC_UTF_16__": "1", + "__STDC_UTF_32__": "1", + "__TI_ARM_V7R4__": "1", + "__TI_ARM_V7R5__": "1", + "__TI_ARM_V7__": "1", + "__TI_ARM__": "1", + "__TI_C99_COMPLEX_ENABLED__": "1", + "__TI_COMPILER_VERSION_QUAL_ID__": "22020", + "__TI_COMPILER_VERSION_QUAL__": "QUAL_LETTER", + "__TI_COMPILER_VERSION__": "20002006", + "__TI_EABI_SUPPORT__": "1", + "__TI_EABI__": "1", + "__TI_GNU_ATTRIBUTE_SUPPORT__": "1", + "__TI_STRICT_ANSI_MODE__": "1", + "__TI_STRICT_FP_MODE__": "1", + "__TI_TMS470_V7R4__": "1", + "__TI_TMS470_V7R5__": "1", + "__TI_TMS470_V7__": "1", + "__TI_VFPV3D16_SUPPORT__": "1", + "__TI_VFP_SUPPORT__": "1", + "__TI_WCHAR_T_BITS__": "16", + "__TMS470__": "1", + "__WCHAR_T_TYPE__": "unsigned short", + "__big_endian__": "1", + "__eabi__": "1", + "__edg_front_end__": "1", + "__unsigned_chars__": "1" + }, + "sys_include_path": [ + "C:/ti/ccs1200/ccs/tools/compiler/ti-cgt-arm_20.2.6.LTS/include" + ] } - }, - "_Format": "1.0", - "_Version": "7.5.2", - "_VersionNum": [ - 7, - 5, - 2, - 11578 - ] + }, + "language_c.command.#": "C:\\ti\\ccs1200\\ccs\\tools\\compiler\\ti-cgt-arm_20.2.6.LTS\\bin\\armcl.EXE --silicon_version=7R5 --code_state=32 --float_support=VFPv3D16 -g --diag_wrap=off --display_error_number --enum_type=packed --abi=eabi --c11 -Ooff --issue_remarks --strict_ansi", + "language_c.info.#": "20.2.6\n", + "language_cxx": { + "features": { + "exceptions": false, + "runtime_type_information": false + }, + "language_version": "Cpp14", + "native_compiler": "C:\\ti\\ccs1200\\ccs\\tools\\compiler\\ti-cgt-arm_20.2.6.LTS\\bin\\armcl.EXE", + "preprocessing": { + "predefined_macros": { + "_BOOL": "1", + "_OPTIMIZE_FOR_SPACE": "1", + "_WCHAR_T": "1", + "__32bis__": "1", + "__ARM_32BIT_STATE": "1", + "__ARM_ACLE": "200", + "__ARM_ARCH": "7", + "__ARM_ARCH_ISA_ARM": "1", + "__ARM_ARCH_ISA_THUMB": "2", + "__ARM_ARCH_PROFILE": "82", + "__ARM_BIG_ENDIAN": "1", + "__ARM_FEATURE_CLZ": "1", + "__ARM_FEATURE_DSP": "1", + "__ARM_FEATURE_LDREX": "15", + "__ARM_FEATURE_SAT": "1", + "__ARM_FEATURE_SIMD32": "1", + "__ARM_FEATURE_UNALIGNED": "1", + "__ARM_FP": "12", + "__ARM_FP16_ARGS": "1", + "__ARM_FP16_FORMAT_IEEE": "1", + "__ARM_PCS": "1", + "__ARM_PCS_VFP": "1", + "__ARM_SIZEOF_MINIMAL_ENUM": "1", + "__ARM_SIZEOF_WCHAR_T": "2", + "__ARRAY_OPERATORS": "1", + "__BIG_ENDIAN__": "1", + "__CHAR16_T_AND_CHAR32_T": "1", + "__CHAR_BIT__": "8", + "__COMPILER_VERSION__": "20002006", + "__EDG_VERSION__": "413", + "__ELF__": "1", + "__INT_MAX__": "2147483647", + "__LONG_LONG_MAX__": "9223372036854775807", + "__LONG_MAX__": "2147483647", + "__PLACEMENT_DELETE": "1", + "__PRAGMA_REDEFINE_EXTNAME": "1", + "__PTRDIFF_T_TYPE__": "int", + "__SCHAR_MAX__": "127", + "__SHRT_MAX__": "32767", + "__SIZEOF_DOUBLE__": "8", + "__SIZEOF_FLOAT__": "4", + "__SIZEOF_INT__": "4", + "__SIZEOF_LONG_DOUBLE__": "8", + "__SIZEOF_LONG_LONG__": "8", + "__SIZEOF_LONG__": "4", + "__SIZEOF_PTRDIFF_T__": "4", + "__SIZEOF_SHORT__": "2", + "__SIZEOF_SIZE_T__": "4", + "__SIZEOF_WCHAR_T__": "2", + "__SIZEOF_WINT_T__": "2", + "__SIZE_T_TYPE__": "unsigned", + "__STDC_HOSTED__": "1", + "__TI_ARM_V7R4__": "1", + "__TI_ARM_V7R5__": "1", + "__TI_ARM_V7__": "1", + "__TI_ARM__": "1", + "__TI_C99_COMPLEX_ENABLED__": "1", + "__TI_COMPILER_VERSION_QUAL_ID__": "22020", + "__TI_COMPILER_VERSION_QUAL__": "QUAL_LETTER", + "__TI_COMPILER_VERSION__": "20002006", + "__TI_EABI_SUPPORT__": "1", + "__TI_EABI__": "1", + "__TI_GNU_ATTRIBUTE_SUPPORT__": "1", + "__TI_STRICT_ANSI_MODE__": "1", + "__TI_STRICT_FP_MODE__": "1", + "__TI_TMS470_V7R4__": "1", + "__TI_TMS470_V7R5__": "1", + "__TI_TMS470_V7__": "1", + "__TI_VFPV3D16_SUPPORT__": "1", + "__TI_VFP_SUPPORT__": "1", + "__TI_WCHAR_T_BITS__": "16", + "__TMS470__": "1", + "__VARIADIC_TEMPLATES": "1", + "__WCHAR_T_TYPE__": "unsigned short", + "__big_endian__": "1", + "__eabi__": "1", + "__edg_front_end__": "1", + "__unsigned_chars__": "1" + }, + "sys_include_path": [ + "C:/ti/ccs1200/ccs/tools/compiler/ti-cgt-arm_20.2.6.LTS/include/libcxx", + "C:/ti/ccs1200/ccs/tools/compiler/ti-cgt-arm_20.2.6.LTS/include" + ] + } + }, + "language_cxx.command.#": "C:\\ti\\ccs1200\\ccs\\tools\\compiler\\ti-cgt-arm_20.2.6.LTS\\bin\\armcl.EXE --silicon_version=7R5 --code_state=32 --float_support=VFPv3D16 -g --diag_wrap=off --display_error_number --enum_type=packed --abi=eabi --c11 -Ooff --issue_remarks --strict_ansi", + "language_cxx.info.#": "20.2.6\n", + "linker": { + "library_path": [] + }, + "preincludes": [ + "$(builtin:AXIVION_INSTALLDIR)\\profiles\\ti\\axivion_preinc.h" + ], + "switches": { + "mapping": { + "$(delta:-)": [] + } + }, + "types": { + "char_bits": 8, + "char_unsigned": true, + "double_type": { + "alignof": 8, + "sizeof": 8 + }, + "float_type": { + "alignof": 4, + "sizeof": 4 + }, + "int_type": { + "alignof": 4, + "sizeof": 4 + }, + "long_double_type": { + "alignof": 8, + "sizeof": 8 + }, + "long_long_type": { + "alignof": 8, + "sizeof": 8 + }, + "long_type": { + "alignof": 4, + "sizeof": 4 + }, + "pointer_type": { + "alignof": 4, + "sizeof": 4 + }, + "ptrdiff_t_type": "signed int", + "short_type": { + "alignof": 2, + "sizeof": 2 + }, + "size_t_type": "unsigned int", + "wchar_t_type": "unsigned short" + } + } + }, + "_Format": "1.0", + "_Version": "7.5.2", + "_VersionNum": [ + 7, + 5, + 2, + 11578 + ] } diff --git a/tests/axivion/config-test/README.md b/tests/axivion/config-test/README.md new file mode 100644 index 00000000..7f98495b --- /dev/null +++ b/tests/axivion/config-test/README.md @@ -0,0 +1,10 @@ +# Axivion Configuration Tests + +This directory and its subdirectories contain the foxBMS 2 Configuration Tests (FCT). + +> **NOTE:** `perform_tests.exe` must be on PATH in the correct version. + +- This test can be run using the test script: + `/tests/axivion/axivion_self_tests.py` +- The test files of the FCT are in the directory + `/tests/axivion/config-test/`. diff --git a/tests/axivion/config-test/run_axivion_config_tests.bat b/tests/axivion/config-test/run_axivion_config_tests.bat deleted file mode 100644 index 60475e72..00000000 --- a/tests/axivion/config-test/run_axivion_config_tests.bat +++ /dev/null @@ -1,84 +0,0 @@ -@REM Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -@REM All rights reserved. -@REM -@REM SPDX-License-Identifier: BSD-3-Clause -@REM -@REM Redistribution and use in source and binary forms, with or without -@REM modification, are permitted provided that the following conditions are met: -@REM -@REM 1. Redistributions of source code must retain the above copyright notice, this -@REM list of conditions and the following disclaimer. -@REM -@REM 2. Redistributions in binary form must reproduce the above copyright notice, -@REM this list of conditions and the following disclaimer in the documentation -@REM and/or other materials provided with the distribution. -@REM -@REM 3. Neither the name of the copyright holder nor the names of its -@REM contributors may be used to endorse or promote products derived from -@REM this software without specific prior written permission. -@REM -@REM THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -@REM AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -@REM IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -@REM DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -@REM FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -@REM DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -@REM SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -@REM CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -@REM OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -@REM OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -@REM -@REM We kindly request you to use one or more of the following phrases to refer to -@REM foxBMS in your hardware, software, documentation or advertising materials: -@REM -@REM - "This product uses parts of foxBMS®" -@REM - "This product includes parts of foxBMS®" -@REM - "This product is derived from foxBMS®" - -@setlocal enableextensions enabledelayedexpansion - -@pushd %~dp0 -@CALL :NORMALIZE_PATH "%~dp0\..\" -@SET BAUHAUS_CONFIG=%NORMALIZED_PATH% -@ECHO Setting 'BAUHAUS_CONFIG' to '%BAUHAUS_CONFIG%' - -@for /f "tokens=*" %%s in (%~dp0..\..\..\conf\env\paths_win32.txt) do @( - @echo %%s | findstr /i "bauhaus">nul && (@SET BAUHAUS_DIR=%%s) -) - -@REM ensure output directory -@SET AXIVION_BUILD_DIR=%~dp0..\..\..\build\axivion -@IF NOT EXIST %AXIVION_BUILD_DIR% ( - @mkdir %AXIVION_BUILD_DIR% -) - -@REM prefer the perform_tests.exe that is found on PATH -@SET TEST_EXE=perform_tests.exe -@ECHO Searching program '%TEST_EXE%' -@WHERE %TEST_EXE% 1>NUL 2>NUL -@IF %ERRORLEVEL% neq 0 ( - @ECHO '%TEST_EXE%' is not in %%PATH%% - @SET TEST_RUNNER=%BAUHAUS_DIR%\%TEST_EXE% -) ELSE ( - @SET TEST_RUNNER=%TEST_EXE% -) - -@IF exist %TEST_RUNNER% ( - @ECHO Using '%TEST_RUNNER%' -) ELSE ( - @WHERE %TEST_EXE% 1>NUL 2>NUL - @IF %ERRORLEVEL% neq 0 ( - @ECHO Could not find program '%TEST_RUNNER%' - @EXIT /b 1 - ) -) -@echo Found '%TEST_RUNNER%' -@%TEST_RUNNER% test_*.c* -@SET TEST_RUNNER_EXIT_LEVEL=%ERRORLEVEL% -@SET BAUHAUS_CONFIG= -@popd -@EXIT /B %ERRORLEVEL% - -:NORMALIZE_PATH - @SET NORMALIZED_PATH=%~dpfn1 - @EXIT /B diff --git a/tests/axivion/config-test/test_macro-names.h b/tests/axivion/config-test/test_macro-names.h index 73f4b1a3..c61556f5 100644 --- a/tests/axivion/config-test/test_macro-names.h +++ b/tests/axivion/config-test/test_macro-names.h @@ -5,4 +5,5 @@ #ifndef FOXBMS__TEST_MACRO_NAMES_H_ #define FOXBMS__TEST_MACRO_NAMES_H_ -#endif /* FOXBMS__TEST_MACRO_NAMES_H_*/ + +#endif /* FOXBMS__TEST_MACRO_NAMES_H_ */ diff --git a/tests/axivion/config-test/test_parameter-names-0.c b/tests/axivion/config-test/test_parameter-names-0.c new file mode 100644 index 00000000..6310a7b0 --- /dev/null +++ b/tests/axivion/config-test/test_parameter-names-0.c @@ -0,0 +1,123 @@ +/* + * @prefix TEST + */ + +// test: analysis(['CodingStyle-Naming.Parameter']) +#include + +void TEST_VoidOk00(void) { /* ok */ +} +/* suffixes */ +void TEST_SuffixOk00(int abc) { /* ok */ +} +void TEST_SuffixOk01(int abcPascalCase) { /* ok */ +} +void TEST_SuffixOk02(int abc_degC) { /* ok */ +} +void TEST_SuffixOk03(int abc_ddegC) { /* ok */ +} +void TEST_SuffixOk04(int abc_dK) { /* ok */ +} +void TEST_SuffixOk05(int abc_ohm) { /* ok */ +} +void TEST_SuffixOk06(int abc_kOhm) { /* ok */ +} +void TEST_SuffixOk07(int abc_ms) { /* ok */ +} +void TEST_SuffixOk08(int abc_us) { /* ok */ +} +void TEST_SuffixOk20(int abc_perc) { /* ok */ +} +void TEST_SuffixOk21(int abc_mV) { /* ok */ +} +void TEST_SuffixOk22(int abc_V) { /* ok */ +} +void TEST_SuffixOk23(int abc_mA) { /* ok */ +} +void TEST_SuffixOk24(int abc_A) { /* ok */ +} +void TEST_SuffixOk25(int abc_mAs) { /* ok */ +} +void TEST_SuffixOk26(int abc_mAh) { /* ok */ +} +void TEST_SuffixOk27(int abc_As) { /* ok */ +} +void TEST_SuffixOk28(int abc_Wh) { /* ok */ +} +void TEST_SuffixOk29(int abc_t) { /* ok */ +} +void TEST_SuffixOk30(int abc_Hz) { /* ok */ +} +void TEST_SuffixNotOk00(int abc_SuffixNotOk00) { /* not ok: invalid suffix */ + // test: TESTCASE.add_expected_stdout("test_parameter-names-0.c:51:29: error: The parameter name is not 'camelCase' or does not pre- or suffix the parameter correctly. [abc_SuffixNotOk00] (Rule CodingStyle-Naming.Parameter)") +} + +/* const */ +void TEST_ConstOk00(const int kConstOk00) { /* ok */ +} +void TEST_ConstNotOk00(const int constNotOk00) { /* not ok: 'k'-prefix missing */ + // test: TESTCASE.add_expected_stdout("test_parameter-names-0.c:58:34: error: The parameter name is not 'camelCase' or does not pre- or suffix the parameter correctly. [constNotOk00] (Rule CodingStyle-Naming.Parameter)") +} +void TEST_ConstNotOk01(const int kconstNotOk01) { /* not ok: 'k'-prefix, but not 'PascalCase' */ + // test: TESTCASE.add_expected_stdout("test_parameter-names-0.c:61:34: error: The parameter name is not 'camelCase' or does not pre- or suffix the parameter correctly. [kconstNotOk01] (Rule CodingStyle-Naming.Parameter)") +} +/* pointers */ +void TEST_PointerOk00(int *pPointerOk00) { /* ok */ +} +void TEST_PointerNotOk00(int *ointerNotOk00) { /* not ok: 'p'-prefix missing */ + // test: TESTCASE.add_expected_stdout("test_parameter-names-0.c:67:31: error: The parameter name is not 'camelCase' or does not pre- or suffix the parameter correctly. [ointerNotOk00] (Rule CodingStyle-Naming.Parameter)") +} +void TEST_PointerNotOk01(int *ppointerNotOk00) { /* not ok: 'p'-prefix, but not 'PascalCase' */ + // test: TESTCASE.add_expected_stdout("test_parameter-names-0.c:70:31: error: The parameter name is not 'camelCase' or does not pre- or suffix the parameter correctly. [ppointerNotOk00] (Rule CodingStyle-Naming.Parameter)") +} +/* pointer to const */ +void TEST_PointerToConstOk00(const int *pkPointerToConstOk00) { /* ok */ +} +void TEST_PointerToConstNotOk00(const int *ointerToConstNotOk00) { /* not ok: 'pk'-prefix missing */ + // test: TESTCASE.add_expected_stdout("test_parameter-names-0.c:76:44: error: The parameter name is not 'camelCase' or does not pre- or suffix the parameter correctly. [ointerToConstNotOk00] (Rule CodingStyle-Naming.Parameter)") +} +void TEST_PointerToConstNotOk01(const int *pPointerToConstNotOk01) { /* not ok: 'k'-infix missing */ + // test: TESTCASE.add_expected_stdout("test_parameter-names-0.c:79:44: error: The parameter name is not 'camelCase' or does not pre- or suffix the parameter correctly. [pPointerToConstNotOk01] (Rule CodingStyle-Naming.Parameter)") +} +void TEST_PointerToConstNotOk02(const int *kPointerToConstNotOk02) { /* not ok: 'p'-prefix missing */ + // test: TESTCASE.add_expected_stdout("test_parameter-names-0.c:82:44: error: The parameter name is not 'camelCase' or does not pre- or suffix the parameter correctly. [kPointerToConstNotOk02] (Rule CodingStyle-Naming.Parameter)") +} +void TEST_PointerToConstNotOk03(const int *pkpointerToConstNotOk03) { /* not ok: not 'PascalCase' */ + // test: TESTCASE.add_expected_stdout("test_parameter-names-0.c:85:44: error: The parameter name is not 'camelCase' or does not pre- or suffix the parameter correctly. [pkpointerToConstNotOk03] (Rule CodingStyle-Naming.Parameter)") +} +void TEST_PointerToConstNotOk04(const int *kpPointerToConstNotOk04) { /* not ok: wrong order in prefix */ + // test: TESTCASE.add_expected_stdout("test_parameter-names-0.c:88:44: error: The parameter name is not 'camelCase' or does not pre- or suffix the parameter correctly. [kpPointerToConstNotOk04] (Rule CodingStyle-Naming.Parameter)") +} +/* const pointer to */ +void TEST_ConstPointerOk00(int *const kpConstPointerOk00) { /* ok */ +} +void TEST_ConstPointerNotOk00(int *const constPointerNotOk00) { /* not ok: 'kp'-prefix missing */ + // test: TESTCASE.add_expected_stdout("test_parameter-names-0.c:94:42: error: The parameter name is not 'camelCase' or does not pre- or suffix the parameter correctly. [constPointerNotOk00] (Rule CodingStyle-Naming.Parameter)") +} +void TEST_ConstPointerNotOk01(int *const pConstPointerNotOk01) { /* not ok: 'k'-prefix missing */ + // test: TESTCASE.add_expected_stdout("test_parameter-names-0.c:97:42: error: The parameter name is not 'camelCase' or does not pre- or suffix the parameter correctly. [pConstPointerNotOk01] (Rule CodingStyle-Naming.Parameter)") +} +void TEST_ConstPointerNotOk02(int *const kConstPointerNotOk02) { /* not ok: 'p'-infix missing */ + // test: TESTCASE.add_expected_stdout("test_parameter-names-0.c:100:42: error: The parameter name is not 'camelCase' or does not pre- or suffix the parameter correctly. [kConstPointerNotOk02] (Rule CodingStyle-Naming.Parameter)") +} +void TEST_ConstPointerNotOk03(int *const pkconstPointerNotOk03) { /* not ok: not 'PascalCase' */ + // test: TESTCASE.add_expected_stdout("test_parameter-names-0.c:103:42: error: The parameter name is not 'camelCase' or does not pre- or suffix the parameter correctly. [pkconstPointerNotOk03] (Rule CodingStyle-Naming.Parameter)") +} +void TEST_ConstPointerNotOk04(int *const pkConstPointerNotOk04) { /* not ok: wrong order in prefix */ + // test: TESTCASE.add_expected_stdout("test_parameter-names-0.c:106:42: error: The parameter name is not 'camelCase' or does not pre- or suffix the parameter correctly. [pkConstPointerNotOk04] (Rule CodingStyle-Naming.Parameter)") +} +/* const pointers to const */ +void TEST_ConstPointerToConstOk00(const int *const kpkConstPointerToConstOk00) { /* ok */ +} +void TEST_ConstPointerToConstNotOk00(const int *const constPointerToConstNotOk00) { /* not ok: 'kpk'-prefix missing */ + // test: TESTCASE.add_expected_stdout("test_parameter-names-0.c:112:55: error: The parameter name is not 'camelCase' or does not pre- or suffix the parameter correctly. [constPointerToConstNotOk00] (Rule CodingStyle-Naming.Parameter)") +} +void TEST_ConstPointerToConstNotOk01(const int *const kpConstPointerToConstNotOk01) { /* not ok: 'k'-infix missing */ + // test: TESTCASE.add_expected_stdout("test_parameter-names-0.c:115:55: error: The parameter name is not 'camelCase' or does not pre- or suffix the parameter correctly. [kpConstPointerToConstNotOk01] (Rule CodingStyle-Naming.Parameter)") +} +void TEST_ConstPointerToConstNotOk02(const int *const kkConstPointerToConstNotOk02) { /* not ok: 'p'-infix missing */ + // test: TESTCASE.add_expected_stdout("test_parameter-names-0.c:118:55: error: The parameter name is not 'camelCase' or does not pre- or suffix the parameter correctly. [kkConstPointerToConstNotOk02] (Rule CodingStyle-Naming.Parameter)") +} +void TEST_ConstPointerToConstNotOk03(const int *const pkConstPointerToConstNotOk03) { /* not ok: 'k'-prefix missing */ + // test: TESTCASE.add_expected_stdout("test_parameter-names-0.c:121:55: error: The parameter name is not 'camelCase' or does not pre- or suffix the parameter correctly. [pkConstPointerToConstNotOk03] (Rule CodingStyle-Naming.Parameter)") +} diff --git a/tests/axivion/config-test/test_parameter-names-1.c b/tests/axivion/config-test/test_parameter-names-1.c new file mode 100644 index 00000000..254eeec9 --- /dev/null +++ b/tests/axivion/config-test/test_parameter-names-1.c @@ -0,0 +1,33 @@ +/* + * @prefix TEST + */ + +// test: analysis(['CodingStyle-Naming.Parameter']) +#include + +void TEST_Function0(uint8_t AAmessageData) { /* not ok, uses/starts with uppercase letter*/ + // test: TESTCASE.add_expected_stdout("test_parameter-names-1.c:8:29: error: Names of parameters shall use the naming convention camelCase (and optional unit suffix preceded by _). [AAmessageData] (Rule CodingStyle-Naming.Parameter)") + // test: TESTCASE.add_expected_stdout("test_parameter-names-1.c:8:29: error: The parameter name is not 'camelCase' or does not pre- or suffix the parameter correctly. [AAmessageData] (Rule CodingStyle-Naming.Parameter)") +} + +/* this is a collection of valid parameter names, that were actually used in the + * code base, but due to bugs in the checker implementation, these parameter + * names were labeled as invalid. + * The purpose of the this check is to make sure, that these valid names + * will no longer be flagged as invalid. */ +/* clang-format off */ +void TEST_Function01(uint8_t messageData) { /* ok */ } +void TEST_Function02(uint8_t value1) { /* ok */ } +void TEST_Function03(uint8_t pRegisterAddress) { /* ok */ } +void TEST_Function04(uint8_t kpReceiveMessage) { /* ok */ } +void TEST_Function05(uint8_t spi) { /* ok */ } +void TEST_Function06(uint8_t pc) { /* ok */ } +void TEST_Function08(uint8_t controlOrDiagnostic) { /* ok */ } +void TEST_Function09(uint8_t outputAllDevices) { /* ok */ } +void TEST_Function10(uint8_t readData) { /* ok */ } +void TEST_Function11(uint8_t writeData) { /* ok */ } +void TEST_Function12(uint8_t data) { /* ok */ } +void TEST_Function13(uint8_t cellVoltage_mV) { /* ok */ } +void TEST_Function14(uint8_t cellTemperature_ddegC) { /* ok */ } +void TEST_Function15(uint8_t x1) { /* ok */ } +/* clang-format on */ diff --git a/tests/axivion/config-test/test_parameter-names.c b/tests/axivion/config-test/test_parameter-names.c deleted file mode 100644 index 010c634d..00000000 --- a/tests/axivion/config-test/test_parameter-names.c +++ /dev/null @@ -1,123 +0,0 @@ -/* - * @prefix TEST - */ - -// test: analysis(['CodingStyle-Naming.Parameter']) -#include - -void TEST_VoidOk00(void) { /* ok */ -} -/* suffixes */ -void TEST_SuffixOk00(int abc) { /* ok */ -} -void TEST_SuffixOk01(int abcPascalCase) { /* ok */ -} -void TEST_SuffixOk02(int abc_degC) { /* ok */ -} -void TEST_SuffixOk03(int abc_ddegC) { /* ok */ -} -void TEST_SuffixOk04(int abc_dK) { /* ok */ -} -void TEST_SuffixOk05(int abc_ohm) { /* ok */ -} -void TEST_SuffixOk06(int abc_kOhm) { /* ok */ -} -void TEST_SuffixOk07(int abc_ms) { /* ok */ -} -void TEST_SuffixOk08(int abc_us) { /* ok */ -} -void TEST_SuffixOk20(int abc_perc) { /* ok */ -} -void TEST_SuffixOk21(int abc_mV) { /* ok */ -} -void TEST_SuffixOk22(int abc_V) { /* ok */ -} -void TEST_SuffixOk23(int abc_mA) { /* ok */ -} -void TEST_SuffixOk24(int abc_A) { /* ok */ -} -void TEST_SuffixOk25(int abc_mAs) { /* ok */ -} -void TEST_SuffixOk26(int abc_mAh) { /* ok */ -} -void TEST_SuffixOk27(int abc_As) { /* ok */ -} -void TEST_SuffixOk28(int abc_Wh) { /* ok */ -} -void TEST_SuffixOk29(int abc_t) { /* ok */ -} -void TEST_SuffixOk30(int abc_Hz) { /* ok */ -} -void TEST_SuffixNotOk00(int abc_SuffixNotOk00) { /* not ok: invalid suffix */ - // test: TESTCASE.add_expected_stdout("test_parameter-names.c:51:29: error: The parameter name is not 'camelCase' or does not pre- or suffix the parameter correctly. [abc_SuffixNotOk00] (Rule CodingStyle-Naming.Parameter)") -} - -/* const */ -void TEST_ConstOk00(const int kConstOk00) { /* ok */ -} -void TEST_ConstNotOk00(const int constNotOk00) { /* not ok: 'k'-prefix missing */ - // test: TESTCASE.add_expected_stdout("test_parameter-names.c:58:34: error: The parameter name is not 'camelCase' or does not pre- or suffix the parameter correctly. [constNotOk00] (Rule CodingStyle-Naming.Parameter)") -} -void TEST_ConstNotOk01(const int kconstNotOk01) { /* not ok: 'k'-prefix, but not 'PascalCase' */ - // test: TESTCASE.add_expected_stdout("test_parameter-names.c:61:34: error: The parameter name is not 'camelCase' or does not pre- or suffix the parameter correctly. [kconstNotOk01] (Rule CodingStyle-Naming.Parameter)") -} -/* pointers */ -void TEST_PointerOk00(int *pPointerOk00) { /* ok */ -} -void TEST_PointerNotOk00(int *ointerNotOk00) { /* not ok: 'p'-prefix missing */ - // test: TESTCASE.add_expected_stdout("test_parameter-names.c:67:31: error: The parameter name is not 'camelCase' or does not pre- or suffix the parameter correctly. [ointerNotOk00] (Rule CodingStyle-Naming.Parameter)") -} -void TEST_PointerNotOk01(int *ppointerNotOk00) { /* not ok: 'p'-prefix, but not 'PascalCase' */ - // test: TESTCASE.add_expected_stdout("test_parameter-names.c:70:31: error: The parameter name is not 'camelCase' or does not pre- or suffix the parameter correctly. [ppointerNotOk00] (Rule CodingStyle-Naming.Parameter)") -} -/* pointer to const */ -void TEST_PointerToConstOk00(const int *pkPointerToConstOk00) { /* ok */ -} -void TEST_PointerToConstNotOk00(const int *ointerToConstNotOk00) { /* not ok: 'pk'-prefix missing */ - // test: TESTCASE.add_expected_stdout("test_parameter-names.c:76:44: error: The parameter name is not 'camelCase' or does not pre- or suffix the parameter correctly. [ointerToConstNotOk00] (Rule CodingStyle-Naming.Parameter)") -} -void TEST_PointerToConstNotOk01(const int *pPointerToConstNotOk01) { /* not ok: 'k'-infix missing */ - // test: TESTCASE.add_expected_stdout("test_parameter-names.c:79:44: error: The parameter name is not 'camelCase' or does not pre- or suffix the parameter correctly. [pPointerToConstNotOk01] (Rule CodingStyle-Naming.Parameter)") -} -void TEST_PointerToConstNotOk02(const int *kPointerToConstNotOk02) { /* not ok: 'p'-prefix missing */ - // test: TESTCASE.add_expected_stdout("test_parameter-names.c:82:44: error: The parameter name is not 'camelCase' or does not pre- or suffix the parameter correctly. [kPointerToConstNotOk02] (Rule CodingStyle-Naming.Parameter)") -} -void TEST_PointerToConstNotOk03(const int *pkpointerToConstNotOk03) { /* not ok: not 'PascalCase' */ - // test: TESTCASE.add_expected_stdout("test_parameter-names.c:85:44: error: The parameter name is not 'camelCase' or does not pre- or suffix the parameter correctly. [pkpointerToConstNotOk03] (Rule CodingStyle-Naming.Parameter)") -} -void TEST_PointerToConstNotOk04(const int *kpPointerToConstNotOk04) { /* not ok: wrong order in prefix */ - // test: TESTCASE.add_expected_stdout("test_parameter-names.c:88:44: error: The parameter name is not 'camelCase' or does not pre- or suffix the parameter correctly. [kpPointerToConstNotOk04] (Rule CodingStyle-Naming.Parameter)") -} -/* const pointer to */ -void TEST_ConstPointerOk00(int *const kpConstPointerOk00) { /* ok */ -} -void TEST_ConstPointerNotOk00(int *const constPointerNotOk00) { /* not ok: 'kp'-prefix missing */ - // test: TESTCASE.add_expected_stdout("test_parameter-names.c:94:42: error: The parameter name is not 'camelCase' or does not pre- or suffix the parameter correctly. [constPointerNotOk00] (Rule CodingStyle-Naming.Parameter)") -} -void TEST_ConstPointerNotOk01(int *const pConstPointerNotOk01) { /* not ok: 'k'-prefix missing */ - // test: TESTCASE.add_expected_stdout("test_parameter-names.c:97:42: error: The parameter name is not 'camelCase' or does not pre- or suffix the parameter correctly. [pConstPointerNotOk01] (Rule CodingStyle-Naming.Parameter)") -} -void TEST_ConstPointerNotOk02(int *const kConstPointerNotOk02) { /* not ok: 'p'-infix missing */ - // test: TESTCASE.add_expected_stdout("test_parameter-names.c:100:42: error: The parameter name is not 'camelCase' or does not pre- or suffix the parameter correctly. [kConstPointerNotOk02] (Rule CodingStyle-Naming.Parameter)") -} -void TEST_ConstPointerNotOk03(int *const pkconstPointerNotOk03) { /* not ok: not 'PascalCase' */ - // test: TESTCASE.add_expected_stdout("test_parameter-names.c:103:42: error: The parameter name is not 'camelCase' or does not pre- or suffix the parameter correctly. [pkconstPointerNotOk03] (Rule CodingStyle-Naming.Parameter)") -} -void TEST_ConstPointerNotOk04(int *const pkConstPointerNotOk04) { /* not ok: wrong order in prefix */ - // test: TESTCASE.add_expected_stdout("test_parameter-names.c:106:42: error: The parameter name is not 'camelCase' or does not pre- or suffix the parameter correctly. [pkConstPointerNotOk04] (Rule CodingStyle-Naming.Parameter)") -} -/* const pointers to const */ -void TEST_ConstPointerToConstOk00(const int *const kpkConstPointerToConstOk00) { /* ok */ -} -void TEST_ConstPointerToConstNotOk00(const int *const constPointerToConstNotOk00) { /* not ok: 'kpk'-prefix missing */ - // test: TESTCASE.add_expected_stdout("test_parameter-names.c:112:55: error: The parameter name is not 'camelCase' or does not pre- or suffix the parameter correctly. [constPointerToConstNotOk00] (Rule CodingStyle-Naming.Parameter)") -} -void TEST_ConstPointerToConstNotOk01(const int *const kpConstPointerToConstNotOk01) { /* not ok: 'k'-infix missing */ - // test: TESTCASE.add_expected_stdout("test_parameter-names.c:115:55: error: The parameter name is not 'camelCase' or does not pre- or suffix the parameter correctly. [kpConstPointerToConstNotOk01] (Rule CodingStyle-Naming.Parameter)") -} -void TEST_ConstPointerToConstNotOk02(const int *const kkConstPointerToConstNotOk02) { /* not ok: 'p'-infix missing */ - // test: TESTCASE.add_expected_stdout("test_parameter-names.c:118:55: error: The parameter name is not 'camelCase' or does not pre- or suffix the parameter correctly. [kkConstPointerToConstNotOk02] (Rule CodingStyle-Naming.Parameter)") -} -void TEST_ConstPointerToConstNotOk03(const int *const pkConstPointerToConstNotOk03) { /* not ok: 'k'-prefix missing */ - // test: TESTCASE.add_expected_stdout("test_parameter-names.c:121:55: error: The parameter name is not 'camelCase' or does not pre- or suffix the parameter correctly. [pkConstPointerToConstNotOk03] (Rule CodingStyle-Naming.Parameter)") -} diff --git a/tests/axivion/forbidden-violations/check_forbidden_violations.py b/tests/axivion/forbidden-violations/check_forbidden_violations.py deleted file mode 100644 index 2c900054..00000000 --- a/tests/axivion/forbidden-violations/check_forbidden_violations.py +++ /dev/null @@ -1,141 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Simple script that searches for the names of 'eliminated' violations in codebase""" - -import argparse -import json -import logging -import sys -import os -from pathlib import Path - - -def main(): - """This script searches a JSON report of Axivion for the names - of violations that we have fixed completely in order to prevent a - regression. - """ - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - parser.add_argument( - "-f", - "--file", - dest="forbidden", - action="store", - default="forbidden-violations.txt", - help="List of forbidden rules (one rule per line)", - ) - parser.add_argument( - "report", - action="store", - default=None, - help="Axivion report file", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - valid = True - if not Path(args.forbidden).is_file(): - valid = False - logging.error(f"File '{args.forbidden}' does not exist.") - if not Path(args.report).is_file(): - valid = False - logging.error(f"File '{args.report}' does not exist.") - if not valid: - sys.exit("Invalid script arguments.") - forbidden_rules = [] - - with open(args.forbidden, mode="r", encoding="utf-8") as forbidden: - lines = forbidden.readlines() - lines = [rule.rstrip() for rule in lines] - for rule in lines: - if not rule: - continue - if not rule.lstrip().startswith("#"): - forbidden_rules.append(rule) - logging.info( - "loaded the following rules as forbidden:\n" - f"{os.linesep.join(forbidden_rules)}" - ) - - with open(args.report, mode="r", encoding="utf-8") as report: - report_json = json.load(report) - logging.info(f"successfully loaded a JSON report file '{args.report}'.") - - fatal_violations_found = False - for violation in report_json: - error_number = violation["errorNumber"] - logging.debug(f"checking violation {error_number}") - if error_number in forbidden_rules: - suppressed = violation["suppressed"] - violation_text = ( - f"found forbidden violation {error_number} in " - f"{violation['path']}:{violation['line']}:{violation['column']}" - f" with justification: {violation['justification']}" - f" suppressed: {suppressed}" - ) - if suppressed: - logging.info(violation_text) - else: - logging.fatal(violation_text) - fatal_violations_found = True - - if fatal_violations_found: - sys.exit(1) - else: - logging.info("no forbidden violations found") - - -if __name__ == "__main__": - main() diff --git a/tests/axivion/mapping.gxl b/tests/axivion/mapping.gxl index 1cc13e52..7b7233c1 100644 --- a/tests/axivion/mapping.gxl +++ b/tests/axivion/mapping.gxl @@ -344,15 +344,6 @@ f src/app/driver/config/interlock_cfg.h - - - - nxpfs85xx_cfg.h - - - f src/app/driver/config/nxpfs85xx_cfg.h - - diff --git a/tests/axivion/qualification-test/README.md b/tests/axivion/qualification-test/README.md index ed540caf..e7fc85af 100644 --- a/tests/axivion/qualification-test/README.md +++ b/tests/axivion/qualification-test/README.md @@ -3,21 +3,26 @@ This directory and its subdirectories contain the Axivion Tool Qualification Kit (TQK). -> **NOTE:** ``perform_tests.exe`` must be on PATH in the correct version. +> **NOTE:** `perform_tests.exe` must be on PATH in the correct version. -- The test files of the TQK are in the directory ``./qualification-kit/``. - **The test files are not part of the public foxBMS 2 release.** - - test script: ``run_axivion_qualification_kit_tests.bat`` +- This test can be run using the test script: + `/tests/axivion/axivion_self_tests.py` +- The test files of the TQK are in the directory + `/tests/axivion/qualification-test/qualification-kit/`. + **These test files are not part of the public foxBMS 2 release.** - To ensure that the test suite is not changed inadvertently, the SHA-256 of the directory is checked in CI: - ```console - \tools\utils\cmd\run-python-script.bat tools\utils\verify_checksums.py tests\axivion\qualification-test\qualification-kit -vv + + ```pwsh + PS C:\Users\vulpes\Documents\foxbms-2> .\fox.ps1 run-script tools\utils\verify_checksums.py tests\axivion\qualification-test\qualification-kit -vv ``` + - If the TQK is changed/updated the following needs to be done: - - The changes need to be applied in ``./qualification-kit/`` + - The changes need to be applied in + `/tests/axivion/qualification-test/qualification-kit/`. - The known SHA-256 of the test files needs to be updated in the CI step. - - the commit message **MUST** contain ``Axivion``. - This ensures that the TQK is run. -- When the Axivion Bauhaus Suite is updated, the TQK needs also to be updated. + - The commit message **MUST** contain ``Update Axivion``. + This ensures that the TQK tests are run. +- When the Axivion Bauhaus Suite is updated, the TQK also needs to be updated. The pinned Bauhaus version is found in ``/conf/env/paths_win32.txt``. diff --git a/tests/axivion/qualification-test/run_axivion_qualification_kit_tests.bat b/tests/axivion/qualification-test/run_axivion_qualification_kit_tests.bat deleted file mode 100644 index 6b98fbf1..00000000 --- a/tests/axivion/qualification-test/run_axivion_qualification_kit_tests.bat +++ /dev/null @@ -1,85 +0,0 @@ -@REM Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -@REM All rights reserved. -@REM -@REM SPDX-License-Identifier: BSD-3-Clause -@REM -@REM Redistribution and use in source and binary forms, with or without -@REM modification, are permitted provided that the following conditions are met: -@REM -@REM 1. Redistributions of source code must retain the above copyright notice, this -@REM list of conditions and the following disclaimer. -@REM -@REM 2. Redistributions in binary form must reproduce the above copyright notice, -@REM this list of conditions and the following disclaimer in the documentation -@REM and/or other materials provided with the distribution. -@REM -@REM 3. Neither the name of the copyright holder nor the names of its -@REM contributors may be used to endorse or promote products derived from -@REM this software without specific prior written permission. -@REM -@REM THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -@REM AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -@REM IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -@REM DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -@REM FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -@REM DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -@REM SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -@REM CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -@REM OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -@REM OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -@REM -@REM We kindly request you to use one or more of the following phrases to refer to -@REM foxBMS in your hardware, software, documentation or advertising materials: -@REM -@REM - "This product uses parts of foxBMS®" -@REM - "This product includes parts of foxBMS®" -@REM - "This product is derived from foxBMS®" - -@setlocal enableextensions enabledelayedexpansion - -@pushd %~dp0 -@CALL :NORMALIZE_PATH "%~dp0\..\" -@SET BAUHAUS_CONFIG=%NORMALIZED_PATH% -@ECHO Setting 'BAUHAUS_CONFIG' to '%BAUHAUS_CONFIG%' - -@for /f "tokens=*" %%s in (%~dp0..\..\..\conf\env\paths_win32.txt) do @( - @echo %%s | findstr /i "bauhaus">nul && (@SET BAUHAUS_DIR=%%s) -) - -@REM ensure output directory -@SET AXIVION_BUILD_DIR=%~dp0..\..\..\build\axivion -@IF NOT EXIST %AXIVION_BUILD_DIR% ( - @mkdir %AXIVION_BUILD_DIR% -) - -@REM prefer the perform_tests.exe that is found on PATH -@SET TEST_EXE=perform_tests.exe -@ECHO Searching program '%TEST_EXE%' -@WHERE %TEST_EXE% 1>NUL 2>NUL -@IF %ERRORLEVEL% neq 0 ( - @ECHO '%TEST_EXE%' is not in %%PATH%% - @SET TEST_RUNNER=%BAUHAUS_DIR%\%TEST_EXE% -) ELSE ( - @SET TEST_RUNNER=%TEST_EXE% -) - -@IF exist %TEST_RUNNER% ( - @ECHO Using '%TEST_RUNNER%' -) ELSE ( - @WHERE %TEST_EXE% 1>NUL 2>NUL - @IF %ERRORLEVEL% neq 0 ( - @ECHO Could not find program '%TEST_RUNNER%' - @EXIT /b 1 - ) -) -@echo Found '%TEST_RUNNER%' -%TEST_RUNNER% %* --language C11 **/*.c **/*.cpp -@SET TEST_RUNNER_EXIT_LEVEL=%ERRORLEVEL% - -@SET BAUHAUS_CONFIG= -@popd -@EXIT /B %TEST_RUNNER_EXIT_LEVEL% - -:NORMALIZE_PATH - @SET NORMALIZED_PATH=%~dpfn1 - @EXIT /B diff --git a/tests/axivion/rule_config_addon.json b/tests/axivion/rule_config_addon.json index b7c28db7..8f65f2a7 100644 --- a/tests/axivion/rule_config_addon.json +++ b/tests/axivion/rule_config_addon.json @@ -1,108 +1,108 @@ { - "Analysis": { - "Analysis-GlobalOptions": { - "_additional_rules": [ - "addon" - ] - }, - "IISB-DoxygenCommentAtDeclaration": { - "_active": true - }, - "IISB-DoxygenFileComment": { - "_active": true - }, - "IISB-FileEncodingCheck": { - "_active": true - }, - "IISB-FileLicenseComment": { - "_active": true - }, - "IISB-LiteralSuffixesCheck": { - "_active": true, - "exclude_in_macros": [ - "adcGROUP1", - "adcREG1", - "AVCLK1_FREQ", - "canREG1", - "canREG2", - "crcREG1", - "dmaRAMREG", - "ecapREG1", - "esmREG", - "etpwmREG1", - "FLT_EPSILON", - "FLT_MAX", - "FLT_MIN", - "FS8x_C*", - "FS8X_FS_A*", - "FS8X_FS_BAD_*", - "FS8X_FS_C*", - "FS8X_FS_D*", - "FS8X_FS_E*", - "FS8X_FS_FC*", - "FS8X_FS_FS*", - "FS8X_FS_G*", - "FS8X_FS_I*", - "FS8X_FS_LBIST_OK_*", - "FS8X_FS_O*", - "FS8X_FS_R*", - "FS8X_FS_S*", - "FS8X_FS_V*", - "FS8X_FS_WD_*", - "FS8X_FS_WDW_*", - "FS8X_M_*", - "FS8x_WD_SEED_DEFAULT", - "HCLK_FREQ", - "hetREG1", - "hetREG2", - "I2C_REPEATMODE", - "i2cREG1", - "MC33775_ALLM_APP_CTRL_*", - "MC33775_ALLM_CFG_*", - "MC33775_ALLM_VCVB_*", - "MC33775_BAL_CH_CFG_*", - "MC33775_BAL_GLOB_CFG_*", - "MC33775_I2C_CFG_*", - "MC33775_I2C_CTRL_*", - "MC33775_I2C_DATA*", - "MC33775_I2C_STAT_*", - "MC33775_I2C_STAT_*", - "MC33775_PRMM_AIN_CFG_*", - "MC33775_PRMM_APP_*", - "MC33775_SECM_AIN_CFG_*", - "MC33775_SECM_APP_AIN4_*", - "MC33775_SECM_PER_NPNISENSE_*", - "MC33775_SYS_COM_CFG_BUSFW_*", - "MC33775_SYS_COM_CFG_OFFSET", - "MC33775_SYS_COM_TO_CFG_*", - "MC33775_SYS_MODE_OFFSET", - "MC33775_SYS_MODE_TARGETMODE_*", - "MC33775_SYS_UID_LOW_OFFSET", - "MC33775_SYS_VERSION_OFFSET", - "NULL_PTR", - "RTI_FREQ", - "spiREG1", - "spiREG2", - "spiREG3", - "spiREG4", - "spiREG5", - "SYS_EXCEPTION", - "systemREG1", - "UINT32_MAX", - "UINT64_MAX" - ], - "excludes": [] - }, - "IISB-UniqueFileNameCheck": { - "_active": true - } + "Analysis": { + "Analysis-GlobalOptions": { + "_additional_rules": [ + "addon" + ] }, - "_Format": "1.0", - "_Version": "7.5.2", - "_VersionNum": [ - 7, - 5, - 2, - 11578 - ] + "IISB-DoxygenCommentAtDeclaration": { + "_active": true + }, + "IISB-DoxygenFileComment": { + "_active": true + }, + "IISB-FileEncodingCheck": { + "_active": true + }, + "IISB-FileLicenseComment": { + "_active": true + }, + "IISB-LiteralSuffixesCheck": { + "_active": true, + "exclude_in_macros": [ + "adcGROUP1", + "adcREG1", + "AVCLK1_FREQ", + "canREG1", + "canREG2", + "crcREG1", + "dmaRAMREG", + "ecapREG1", + "esmREG", + "etpwmREG1", + "FLT_EPSILON", + "FLT_MAX", + "FLT_MIN", + "FS8x_C*", + "FS8X_FS_A*", + "FS8X_FS_BAD_*", + "FS8X_FS_C*", + "FS8X_FS_D*", + "FS8X_FS_E*", + "FS8X_FS_FC*", + "FS8X_FS_FS*", + "FS8X_FS_G*", + "FS8X_FS_I*", + "FS8X_FS_LBIST_OK_*", + "FS8X_FS_O*", + "FS8X_FS_R*", + "FS8X_FS_S*", + "FS8X_FS_V*", + "FS8X_FS_WD_*", + "FS8X_FS_WDW_*", + "FS8X_M_*", + "FS8x_WD_SEED_DEFAULT", + "HCLK_FREQ", + "hetREG1", + "hetREG2", + "I2C_REPEATMODE", + "i2cREG1", + "MC33775_ALLM_APP_CTRL_*", + "MC33775_ALLM_CFG_*", + "MC33775_ALLM_VCVB_*", + "MC33775_BAL_CH_CFG_*", + "MC33775_BAL_GLOB_CFG_*", + "MC33775_I2C_CFG_*", + "MC33775_I2C_CTRL_*", + "MC33775_I2C_DATA*", + "MC33775_I2C_STAT_*", + "MC33775_I2C_STAT_*", + "MC33775_PRMM_AIN_CFG_*", + "MC33775_PRMM_APP_*", + "MC33775_SECM_AIN_CFG_*", + "MC33775_SECM_APP_AIN4_*", + "MC33775_SECM_PER_NPNISENSE_*", + "MC33775_SYS_COM_CFG_BUSFW_*", + "MC33775_SYS_COM_CFG_OFFSET", + "MC33775_SYS_COM_TO_CFG_*", + "MC33775_SYS_MODE_OFFSET", + "MC33775_SYS_MODE_TARGETMODE_*", + "MC33775_SYS_UID_LOW_OFFSET", + "MC33775_SYS_VERSION_OFFSET", + "NULL_PTR", + "RTI_FREQ", + "spiREG1", + "spiREG2", + "spiREG3", + "spiREG4", + "spiREG5", + "SYS_EXCEPTION", + "systemREG1", + "UINT32_MAX", + "UINT64_MAX" + ], + "excludes": [] + }, + "IISB-UniqueFileNameCheck": { + "_active": true + } + }, + "_Format": "1.0", + "_Version": "7.5.2", + "_VersionNum": [ + 7, + 5, + 2, + 11578 + ] } diff --git a/tests/axivion/rule_config_bad_tokens.json b/tests/axivion/rule_config_bad_tokens.json index 6b085d0d..e9734ed6 100644 --- a/tests/axivion/rule_config_bad_tokens.json +++ b/tests/axivion/rule_config_bad_tokens.json @@ -1,30 +1,30 @@ { - "Analysis": { - "Metric-TokenFileMetric.Check": { - "_active": false - }, - "Metric-TokenFileMetric.Debug": { - "_active": true - }, - "Metric-TokenFileMetric.Fixme": { - "_active": true - }, - "Metric-TokenFileMetric.Hack": { - "_active": true - }, - "Metric-TokenFileMetric.Todo": { - "_active": true - }, - "Metric-TokenFileMetric.XXX": { - "_active": true - } + "Analysis": { + "Metric-TokenFileMetric.Check": { + "_active": false }, - "_Format": "1.0", - "_Version": "7.5.2", - "_VersionNum": [ - 7, - 5, - 2, - 11578 - ] + "Metric-TokenFileMetric.Debug": { + "_active": true + }, + "Metric-TokenFileMetric.Fixme": { + "_active": true + }, + "Metric-TokenFileMetric.Hack": { + "_active": true + }, + "Metric-TokenFileMetric.Todo": { + "_active": true + }, + "Metric-TokenFileMetric.XXX": { + "_active": true + } + }, + "_Format": "1.0", + "_Version": "7.5.2", + "_VersionNum": [ + 7, + 5, + 2, + 11578 + ] } diff --git a/tests/axivion/rule_config_c.json b/tests/axivion/rule_config_c.json index d1245e28..c8467a07 100644 --- a/tests/axivion/rule_config_c.json +++ b/tests/axivion/rule_config_c.json @@ -1,1395 +1,1395 @@ { - "Analysis": { - "Analysis-GlobalOptions": { - "scanner": { - "additional_basic_characters": "\\$@" - }, - "side_effects": { - "effect_free_functions": [ - "__curpc", - "MPU_xTaskGetTickCount" - ], - "local_effect_functions": [ - "FAS_ASSERT", - "FAS_StoreAssertLocation" - ], - "side_effect_functions": [ - "FAS_DisableInterrupts", - "fclose", - "fopen", - "fprintf", - "fputs", - "freopen", - "FSYS_RaisePrivilege", - "printf", - "tmpfile", - "xPortRaisePrivilege" - ] - } - }, - "Architecture": { - "child_order": [ - "Architecture-CyclesView", - "Architecture-DeadCodeView", - "Architecture-ActivateMembers", - "Architecture-ComputeDependencyProperties", - "Architecture-CSharpRFGTransformations", - "Architecture-XAMLAnalysis", - "Architecture-AddDynamicVariableAccesses", - "Architecture-CopyIntoEntriesView", - "Architecture-GXLImport", - "Architecture-RhapsodyImporter", - "Architecture-ARXMLImport", - "Architecture-CopyAndProjectView", - "Architecture-CreateTypes", - "Architecture-CustomRFGFunction", - "Architecture-InsertSystemNode", - "Architecture-ObfuscateNames", - "Architecture-ProjectView", - "Architecture-RemoveView", - "Architecture-StripBasepath", - "Architecture-TransitiveClosure", - "Architecture-CopyView", - "Architecture-CheckRFGEquality", - "Architecture-MatchGraphs", - "Architecture-EAImporter", - "Architecture-EdgeInterpretation", - "Architecture-GravisRoleAttributes", - "Architecture-HierarchicalMapping", - "Architecture-TaggedValuesMapping", - "Architecture-ScriptedArchitecture", - "Architecture-ArchitectureCheck", - "Architecture-ProcessLine", - "Architecture-CycleDetection", - "Architecture-GXLExport", - "Architecture-SaveRFG" - ] - }, - "Architecture-CyclesView": { - "_active": true - }, - "Architecture-DeadCodeView": { - "_active": true - }, - "Architecture-GXLExport": { - "_active": true - }, - "Architecture-SaveRFG": { - "_active": true - }, - "AutosarC++19_03-A2.13.5": { - "_active": true, - "languages": [ - "C" - ] - }, - "CWE-Bad-Coding-Practices-562": { - "_active": true - }, - "CWE-Complexity-Issues-1075": { - "_active": true - }, - "CWE-Error-Conditions-617": { - "_active": true - }, - "CWE-Pointer-Issues-467": { - "_active": true - }, - "CWE-Pointer-Issues-476": { - "_active": true - }, - "CertC-DCL00": { - "_active": false, - "exclude_in_macros": [ - "FAS_ASSERT" - ] - }, - "CertC-DCL01": { - "_active": true - }, - "CertC-DCL03": { - "_active": true - }, - "CertC-INT09": { - "_active": true, - "languages": [ - "C" - ] - }, - "CertC-PRE01": { - "_active": true, - "languages": [ - "C", - "Assembler" - ] - }, - "CertC-PRE04": { - "_active": true, - "languages": [ - "C", - "Assembler" - ] - }, - "CertC-PRE06": { - "_active": true, - "languages": [ - "C", - "Assembler" - ] - }, - "CertC-PRE08": { - "_active": true, - "languages": [ - "C", - "Assembler" - ] - }, - "CertC-PRE31": { - "_active": true, - "languages": [ - "C", - "Assembler" - ] - }, - "CertC-PRE32": { - "_active": true, - "languages": [ - "C", - "Assembler" - ] - }, - "CloneDetection": { - "_active": true, - "no_sequences": true, - "pre_excludes": [ - "/*", - "C:/*" - ] - }, - "CodeAnnotations": { - "show_debug_output": false - }, - "CodingStyle-AllmanBraces": { - "_active": false - }, - "CodingStyle-FileExtensionNaming": { - "_active": true, - "allowed_extensions": [ - ".asm", - ".c", - ".h" - ], - "languages": [ - "C", - "Assembler" - ] - }, - "CodingStyle-FilenameNaming": { - "_active": true, - "allowed_charset": "a-z0-9\\-_", - "languages": [ - "C", - "Assembler" - ], - "show_charset": true - }, - "CodingStyle-LinesOfCodeInFile": { - "languages": [ - "C", - "Assembler" - ], - "max_value": 800 - }, - "CodingStyle-MaxOneStmtPerLine": { - "_active": true, - "ignore_stmts": [ - "Exit_Switch", - "Statement_Sequence", - "Switch_Case_Label" - ] - }, - "CodingStyle-MaximumLineLength": { - "_active": true, - "languages": [ - "C", - "Assembler" - ], - "maximum_length": 120 - }, - "CodingStyle-Naming.Enum": { - "_active": true, - "naming_convention": "^[A-Z][A-Z0-9]*_e$" - }, - "CodingStyle-Naming.Enumerator": { - "_active": false - }, - "CodingStyle-Naming.Function": { - "_active": true - }, - "CodingStyle-Naming.GlobalVariable": { - "_active": true - }, - "CodingStyle-Naming.Label": { - "_active": false - }, - "CodingStyle-Naming.LocalVariable": { - "_active": false - }, - "CodingStyle-Naming.Macro": { - "_active": true - }, - "CodingStyle-Naming.Parameter": { - "_active": true - }, - "CodingStyle-Naming.Struct": { - "_active": true, - "naming_convention": "^[A-Z][A-Z0-9]*_s$" - }, - "CodingStyle-Naming.StructField": { - "_active": true - }, - "CodingStyle-Naming.Union": { - "_active": false - }, - "CodingStyle-Naming.UserType": { - "_active": false - }, - "CodingStyle-NoBlankLinesAtBraces": { - "_active": true, - "languages": [ - "C", - "Assembler" - ] - }, - "CodingStyle-NoDoubleUnderscoreInMacro": { - "_active": true, - "exclude_in_macros": [ - "FOXBMS__*_H_" - ], - "languages": [ - "C", - "Assembler" - ] - }, - "CodingStyle-NoSingleCharIdentifier": { - "_active": true, - "exclude_loop_counter": true, - "languages": [ - "C", - "Assembler" - ], - "whitelist": [] - }, - "CodingStyle-NoTabs": { - "_active": true, - "languages": [ - "C", - "Assembler" - ] - }, - "CodingStyle-NoTrailingWhitespace": { - "_active": true, - "languages": [ - "C", - "Assembler" - ] - }, - "CodingStyle-NoWhitespaceMemberSelection": { - "_active": true - }, - "CodingStyle-NoWhitespacePointerReference": { - "_active": false, - "languages": [ - "C", - "Assembler" - ] - }, - "CodingStyle-NoWhitespacePointerReferenceInverse": { - "_active": false, - "languages": [ - "C", - "Assembler" - ] - }, - "CodingStyle-StrongTypeViolations": { - "_active": false, - "languages": [ - "C", - "Assembler" - ] - }, - "CodingStyle-TooManyIncludes": { - "_active": true, - "languages": [ - "C", - "Assembler" - ] - }, - "CycleDetection-CallgraphCycles": { - "_active": true - }, - "CycleDetection-IncludeCycles": { - "_active": true - }, - "DeadCodeDetection": { - "_active": true - }, - "EnableDisable": { - "_active": true - }, - "EnableDisableSingleRule": { - "_active": false - }, - "EntryPoints-EntriesByName": { - "_active": true, - "names": [ - "*Notification", - "_c_int00", - "FTSK_CreateTask*", - "main", - "vApplicationIdleHook", - "vApplicationStackOverflowHook" - ] - }, - "Externals-CStdLib.NoReturn": { - "functions": [ - "__assert_fail", - "_wassert", - "abort", - "exit", - "FAS_InfiniteLoop" - ] - }, - "FaultDetection-BadEnumValue": { - "_active": true - }, - "FaultDetection-DivisionByZero": { - "_active": true, - "abstract_interpretation_div_by_zero": true - }, - "FaultDetection-EscapingLocalAddress": { - "_active": true - }, - "FaultDetection-MemoryLeak": { - "_active": true - }, - "FaultDetection-NullPointerDereference": { - "_active": true - }, - "FaultDetection-RemovableStatements": { - "_active": true, - "exclude_in_macros": { - "$(delta:+)": [ - "assert" - ] - } - }, - "FaultDetection-UninitializedVariable": { - "_active": true - }, - "FaultDetection-UnrelatedPointerComparison": { - "_active": true - }, - "FaultDetection-UnrelatedPointerSubtraction": { - "_active": true - }, - "FaultDetection-UnusedAssignments": { - "_active": true - }, - "FaultDetection-UseAfterFree": { - "_active": true - }, - "Generic-CComments": { - "_active": true - }, - "Generic-DoxygenCommentAtDefinition": { - "_active": false - }, - "Generic-DoxygenCommentInHeader": { - "_active": true, - "ignore_tool_comments": "\\/\\*\\s+AXIVION .*\\s+\\*\\/" - }, - "Generic-DuplicateIncludeGuard": { - "_active": true - }, - "Generic-FinalNewline": { - "_active": true, - "_copy_from": "Generic-NoCompilerWarnings", - "languages": [ - "C", - "Assembler" - ], - "reported_severities": [ - "remark" - ] - }, - "Generic-ForbiddenFunctions": { - "_active": true - }, - "Generic-IncludeKind": { - "_active": true, - "enforced_system_headers": [ - "*/float.h", - "*/math.h", - "*/stdbool.h", - "*/stdint.h", - "*/stdlib.h", - "*/string.h" - ] - }, - "Generic-InitializeAllVariables": { - "_active": true - }, - "Generic-LocalInclude": { - "_active": true, - "enums_can_be_redeclared": true, - "excludes": [], - "interface_headers": [ - "*/*_api.h", - "*/Python.h", - "*/*_fwd.h", - "Q*" - ], - "msg": { - "add_include": { - "disabled": false - }, - "add_symbol_declaration": { - "disabled": false - }, - "circular_include": { - "disabled": false - }, - "more_precise_include": { - "disabled": false - }, - "move_include": { - "disabled": false - }, - "unused_include": { - "disabled": false - } - }, - "routines_can_be_redeclared": true, - "typedefs_can_be_redeclared": true - }, - "Generic-LocalScope": { - "_active": true, - "move_global_const_into_function": false, - "treat_initialization_as_use": true - }, - "Generic-MaxComplexity": { - "_active": true, - "maxcomplexity": 20 - }, - "Generic-MaxConditions": { - "_active": true, - "maxconditions": 5 - }, - "Generic-MaxNesting": { - "_active": true, - "maxnesting": 5 - }, - "Generic-MaxOneStmtPerLine": { - "_active": true - }, - "Generic-MaxParams": { - "_active": true - }, - "Generic-MissingIncludeGuard": { - "_active": true, - "languages": [ - "C" - ] - }, - "Generic-MissingOverride": { - "_active": true - }, - "Generic-MissingParameterAssert": { - "_active": true, - "macro_names": [ - "assert", - "FAS_ASSERT" - ] - }, - "Generic-MissingSelfHeaderInclude": { - "_active": true - }, - "Generic-MixedUpArgumentOrder": { - "_active": true - }, - "Generic-NoAbsoluteInclude": { - "_active": true - }, - "Generic-NoCommaSequence": { - "_active": true - }, - "Generic-NoCompilerWarnings": { - "_active": true - }, - "Generic-NoConditionalOperator": { - "_active": true - }, - "Generic-NoConstCasts": { - "_active": true - }, - "Generic-NoConstOnLHS": { - "_active": true - }, - "Generic-NoConstOnRHS": { - "_active": false - }, - "Generic-NoDiscardedReturnCode": { - "_active": true - }, - "Generic-NoEllipsis": { - "_active": true - }, - "Generic-NoEmptyLoops": { - "_active": true, - "languages": [ - "C", - "Assembler" - ] - }, - "Generic-NoEmptyStructs": { - "_active": true - }, - "Generic-NoExternInImpl": { - "_active": true - }, - "Generic-NoFunctionDefinitionInHeader": { - "_active": true - }, - "Generic-NoImplicitTypeConversion": { - "_active": false - }, - "Generic-NoIncludePaths": { - "_active": true, - "allow_downward_paths": true - }, - "Generic-NoIrregularInclude": { - "_active": true - }, - "Generic-NoLeakingReferenceToLocal": { - "_active": true - }, - "Generic-NoLinkerWarnings": { - "_active": true - }, - "Generic-NoMagicNumbers": { - "_active": true, - "exclude_single_uses": false - }, - "Generic-NoMalloc": { - "_active": true - }, - "Generic-NoPrecisionLoss": { - "_active": true - }, - "Generic-NoReferenceToLocalVariable": { - "_active": true - }, - "Generic-NoSemicolonAtEndOfMacro": { - "_active": true - }, - "Generic-NoSingleCharIdentifier": { - "_active": true, - "exclude_loop_counter": true, - "excludes": [], - "whitelist": [] - }, - "Generic-NoStaticInHeader": { - "_active": true - }, - "Generic-NoTabs": { - "_active": true, - "languages": [ - "C", - "Assembler" - ] - }, - "Generic-NoTrailingWhitespace": { - "_active": true, - "languages": [ - "C", - "Assembler" - ] - }, - "Generic-NoTypeConversionToBool": { - "_active": true - }, - "Generic-NoUncheckedPointerParamDereference": { - "_active": true - }, - "Generic-NoUnsafeMacro": { - "_active": true - }, - "Generic-NoWhitespaceMemberSelection": { - "_active": true - }, - "Generic-TooManyIncludes": { - "_active": true - }, - "Generic-TypedefCheck": { - "_active": true, - "report_identical_redefinitions": false - }, - "Generic-WrongIncludeCasing": { - "_active": true - }, - "Metric-CloneRatio": { - "_active": true - }, - "Metric-ExtendedMcCabe": { - "_active": true - }, - "Metric-Includes.DirectIncluders": { - "_active": true - }, - "Metric-Includes.DirectIncludes": { - "_active": true - }, - "Metric-Includes.IncludeBurden": { - "_active": true - }, - "Metric-Includes.MaximumIncludeDepth": { - "_active": true - }, - "Metric-Includes.MaximumIncluderDepth": { - "_active": true - }, - "Metric-Includes.TransitiveIncluders": { - "_active": true - }, - "Metric-Includes.TransitiveIncludes": { - "_active": true - }, - "Metric-IssueCount.Architecture": { - "_active": true - }, - "Metric-IssueCount.Clone": { - "_active": true - }, - "Metric-IssueCount.Cycle": { - "_active": true - }, - "Metric-IssueCount.DeadEntity": { - "_active": true - }, - "Metric-IssueCount.Metric": { - "_active": true - }, - "Metric-IssueCount.Style": { - "_active": true - }, - "Metric-LogNPathCeiling": { - "_active": true - }, - "Metric-LogNPathFloor": { - "_active": true - }, - "Metric-McCabeComplexity": { - "_active": true - }, - "Metric-NumberOfCalledRoutines": { - "_active": true, - "max_value": 20 - }, - "Metric-NumberOfCallingRoutines": { - "_active": true, - "max_value": 20 - }, - "Metric-NumberOfGotos": { - "_active": true - }, - "Metric-NumberOfInvocations": { - "_active": true - }, - "Metric-NumberOfParameters": { - "_active": true, - "max_value": 5 - }, - "Metric-NumberOfReturns": { - "_active": true, - "max_value": 1 - }, - "Metric-NumberOfSCCs": { - "_active": true - }, - "Metric-NumberOfStatements": { - "_active": true - }, - "Metric-SwitchComplexity": { - "_active": true - }, - "Metric-TokenMetric.Check": { - "_active": false - }, - "Metric-TokenMetric.Debug": { - "_active": true - }, - "Metric-TokenMetric.Fixme": { - "_active": true - }, - "Metric-TokenMetric.Hack": { - "_active": true - }, - "Metric-TokenMetric.Todo": { - "_active": true - }, - "Metric-TokenMetric.XXX": { - "_active": true - }, - "MisraC-13.3": { - "_active": true - }, - "MisraC-13.6": { - "_active": true - }, - "MisraC2012-1.1": { - "_active": true, - "standards": [ - "--c11", - "--c99" - ] - }, - "MisraC2012-1.2": { - "_active": true, - "exclude_in_macros": [ - "GEN_MUST_CHECK_RETURN", - "VER_VERSION_INFORMATION" - ] - }, - "MisraC2012-1.3": { - "_active": true - }, - "MisraC2012-1.4": { - "_active": true - }, - "MisraC2012-10.1": { - "_active": true - }, - "MisraC2012-10.2": { - "_active": true - }, - "MisraC2012-10.3": { - "_active": true - }, - "MisraC2012-10.4": { - "_active": true - }, - "MisraC2012-10.5": { - "_active": true - }, - "MisraC2012-10.6": { - "_active": true - }, - "MisraC2012-10.7": { - "_active": true - }, - "MisraC2012-10.8": { - "_active": true - }, - "MisraC2012-11.1": { - "_active": true - }, - "MisraC2012-11.2": { - "_active": true - }, - "MisraC2012-11.3": { - "_active": true - }, - "MisraC2012-11.4": { - "_active": true - }, - "MisraC2012-11.5": { - "_active": true - }, - "MisraC2012-11.6": { - "_active": true - }, - "MisraC2012-11.7": { - "_active": true - }, - "MisraC2012-11.8": { - "_active": true - }, - "MisraC2012-11.9": { - "_active": true - }, - "MisraC2012-12.1": { - "_active": true - }, - "MisraC2012-12.2": { - "_active": true - }, - "MisraC2012-12.3": { - "_active": true - }, - "MisraC2012-12.4": { - "_active": true - }, - "MisraC2012-12.5": { - "_active": true - }, - "MisraC2012-13": { - "exclude_in_macros": [ - "FAS_ASSERT" - ] - }, - "MisraC2012-13.1": { - "_active": true - }, - "MisraC2012-13.2": { - "_active": true - }, - "MisraC2012-13.3": { - "_active": true - }, - "MisraC2012-13.4": { - "_active": true - }, - "MisraC2012-13.5": { - "_active": true - }, - "MisraC2012-13.6": { - "_active": true - }, - "MisraC2012-14.1": { - "_active": true - }, - "MisraC2012-14.2": { - "_active": true - }, - "MisraC2012-14.3": { - "_active": true, - "exclude_in_macros": [ - "FAS_ASSERT" - ] - }, - "MisraC2012-14.4": { - "_active": true - }, - "MisraC2012-15.1": { - "_active": true - }, - "MisraC2012-15.2": { - "_active": true - }, - "MisraC2012-15.3": { - "_active": true - }, - "MisraC2012-15.4": { - "_active": true - }, - "MisraC2012-15.5": { - "_active": true - }, - "MisraC2012-15.6": { - "_active": true - }, - "MisraC2012-15.7": { - "_active": true - }, - "MisraC2012-16.1": { - "_active": true - }, - "MisraC2012-16.2": { - "_active": true - }, - "MisraC2012-16.3": { - "_active": true - }, - "MisraC2012-16.4": { - "_active": true - }, - "MisraC2012-16.5": { - "_active": true - }, - "MisraC2012-16.6": { - "_active": true - }, - "MisraC2012-16.7": { - "_active": true - }, - "MisraC2012-17.1": { - "_active": true - }, - "MisraC2012-17.2": { - "_active": true - }, - "MisraC2012-17.3": { - "_active": true - }, - "MisraC2012-17.4": { - "_active": true - }, - "MisraC2012-17.5": { - "_active": true - }, - "MisraC2012-17.6": { - "_active": true - }, - "MisraC2012-17.7": { - "_active": true - }, - "MisraC2012-17.8": { - "_active": true - }, - "MisraC2012-18.1": { - "_active": true - }, - "MisraC2012-18.2": { - "_active": true - }, - "MisraC2012-18.3": { - "_active": true - }, - "MisraC2012-18.4": { - "_active": true - }, - "MisraC2012-18.5": { - "_active": true - }, - "MisraC2012-18.6": { - "_active": true - }, - "MisraC2012-18.7": { - "_active": true - }, - "MisraC2012-18.8": { - "_active": true - }, - "MisraC2012-19.1": { - "_active": true - }, - "MisraC2012-19.2": { - "_active": true - }, - "MisraC2012-2.1": { - "_active": true - }, - "MisraC2012-2.2": { - "_active": true, - "exclude_in_macros": [ - "FAS_ASSERT" + "Analysis": { + "Analysis-GlobalOptions": { + "scanner": { + "additional_basic_characters": "\\$@" + }, + "side_effects": { + "effect_free_functions": [ + "__curpc", + "MPU_xTaskGetTickCount" + ], + "local_effect_functions": [ + "FAS_ASSERT", + "FAS_StoreAssertLocation" + ], + "side_effect_functions": [ + "FAS_DisableInterrupts", + "fclose", + "fopen", + "fprintf", + "fputs", + "freopen", + "FSYS_RaisePrivilege", + "printf", + "tmpfile", + "xPortRaisePrivilege" + ] + } + }, + "Architecture": { + "child_order": [ + "Architecture-CyclesView", + "Architecture-DeadCodeView", + "Architecture-ActivateMembers", + "Architecture-ComputeDependencyProperties", + "Architecture-CSharpRFGTransformations", + "Architecture-XAMLAnalysis", + "Architecture-AddDynamicVariableAccesses", + "Architecture-CopyIntoEntriesView", + "Architecture-GXLImport", + "Architecture-RhapsodyImporter", + "Architecture-ARXMLImport", + "Architecture-CopyAndProjectView", + "Architecture-CreateTypes", + "Architecture-CustomRFGFunction", + "Architecture-InsertSystemNode", + "Architecture-ObfuscateNames", + "Architecture-ProjectView", + "Architecture-RemoveView", + "Architecture-StripBasepath", + "Architecture-TransitiveClosure", + "Architecture-CopyView", + "Architecture-CheckRFGEquality", + "Architecture-MatchGraphs", + "Architecture-EAImporter", + "Architecture-EdgeInterpretation", + "Architecture-GravisRoleAttributes", + "Architecture-HierarchicalMapping", + "Architecture-TaggedValuesMapping", + "Architecture-ScriptedArchitecture", + "Architecture-ArchitectureCheck", + "Architecture-ProcessLine", + "Architecture-CycleDetection", + "Architecture-GXLExport", + "Architecture-SaveRFG" + ] + }, + "Architecture-CyclesView": { + "_active": true + }, + "Architecture-DeadCodeView": { + "_active": true + }, + "Architecture-GXLExport": { + "_active": true + }, + "Architecture-SaveRFG": { + "_active": true + }, + "AutosarC++19_03-A2.13.5": { + "_active": true, + "languages": [ + "C" + ] + }, + "CWE-Bad-Coding-Practices-562": { + "_active": true + }, + "CWE-Complexity-Issues-1075": { + "_active": true + }, + "CWE-Error-Conditions-617": { + "_active": true + }, + "CWE-Pointer-Issues-467": { + "_active": true + }, + "CWE-Pointer-Issues-476": { + "_active": true + }, + "CertC-DCL00": { + "_active": false, + "exclude_in_macros": [ + "FAS_ASSERT" + ] + }, + "CertC-DCL01": { + "_active": true + }, + "CertC-DCL03": { + "_active": true + }, + "CertC-INT09": { + "_active": true, + "languages": [ + "C" + ] + }, + "CertC-PRE01": { + "_active": true, + "languages": [ + "C", + "Assembler" + ] + }, + "CertC-PRE04": { + "_active": true, + "languages": [ + "C", + "Assembler" + ] + }, + "CertC-PRE06": { + "_active": true, + "languages": [ + "C", + "Assembler" + ] + }, + "CertC-PRE08": { + "_active": true, + "languages": [ + "C", + "Assembler" + ] + }, + "CertC-PRE31": { + "_active": true, + "languages": [ + "C", + "Assembler" + ] + }, + "CertC-PRE32": { + "_active": true, + "languages": [ + "C", + "Assembler" + ] + }, + "CloneDetection": { + "_active": true, + "no_sequences": true, + "pre_excludes": [ + "/*", + "C:/*" + ] + }, + "CodeAnnotations": { + "show_debug_output": false + }, + "CodingStyle-AllmanBraces": { + "_active": false + }, + "CodingStyle-FileExtensionNaming": { + "_active": true, + "allowed_extensions": [ + ".asm", + ".c", + ".h" + ], + "languages": [ + "C", + "Assembler" + ] + }, + "CodingStyle-FilenameNaming": { + "_active": true, + "allowed_charset": "a-z0-9\\-_", + "languages": [ + "C", + "Assembler" + ], + "show_charset": true + }, + "CodingStyle-LinesOfCodeInFile": { + "languages": [ + "C", + "Assembler" + ], + "max_value": 800 + }, + "CodingStyle-MaxOneStmtPerLine": { + "_active": true, + "ignore_stmts": [ + "Exit_Switch", + "Statement_Sequence", + "Switch_Case_Label" + ] + }, + "CodingStyle-MaximumLineLength": { + "_active": true, + "languages": [ + "C", + "Assembler" + ], + "maximum_length": 120 + }, + "CodingStyle-Naming.Enum": { + "_active": true, + "naming_convention": "^[A-Z][A-Z0-9]*_e$" + }, + "CodingStyle-Naming.Enumerator": { + "_active": false + }, + "CodingStyle-Naming.Function": { + "_active": true + }, + "CodingStyle-Naming.GlobalVariable": { + "_active": true + }, + "CodingStyle-Naming.Label": { + "_active": false + }, + "CodingStyle-Naming.LocalVariable": { + "_active": false + }, + "CodingStyle-Naming.Macro": { + "_active": true + }, + "CodingStyle-Naming.Parameter": { + "_active": true + }, + "CodingStyle-Naming.Struct": { + "_active": true, + "naming_convention": "^[A-Z][A-Z0-9]*_s$" + }, + "CodingStyle-Naming.StructField": { + "_active": true + }, + "CodingStyle-Naming.Union": { + "_active": false + }, + "CodingStyle-Naming.UserType": { + "_active": false + }, + "CodingStyle-NoBlankLinesAtBraces": { + "_active": true, + "languages": [ + "C", + "Assembler" + ] + }, + "CodingStyle-NoDoubleUnderscoreInMacro": { + "_active": true, + "exclude_in_macros": [ + "FOXBMS__*_H_" + ], + "languages": [ + "C", + "Assembler" + ] + }, + "CodingStyle-NoSingleCharIdentifier": { + "_active": true, + "exclude_loop_counter": true, + "languages": [ + "C", + "Assembler" + ], + "whitelist": [] + }, + "CodingStyle-NoTabs": { + "_active": true, + "languages": [ + "C", + "Assembler" + ] + }, + "CodingStyle-NoTrailingWhitespace": { + "_active": true, + "languages": [ + "C", + "Assembler" + ] + }, + "CodingStyle-NoWhitespaceMemberSelection": { + "_active": true + }, + "CodingStyle-NoWhitespacePointerReference": { + "_active": false, + "languages": [ + "C", + "Assembler" + ] + }, + "CodingStyle-NoWhitespacePointerReferenceInverse": { + "_active": false, + "languages": [ + "C", + "Assembler" + ] + }, + "CodingStyle-StrongTypeViolations": { + "_active": false, + "languages": [ + "C", + "Assembler" + ] + }, + "CodingStyle-TooManyIncludes": { + "_active": true, + "languages": [ + "C", + "Assembler" + ] + }, + "CycleDetection-CallgraphCycles": { + "_active": true + }, + "CycleDetection-IncludeCycles": { + "_active": true + }, + "DeadCodeDetection": { + "_active": true + }, + "EnableDisable": { + "_active": true + }, + "EnableDisableSingleRule": { + "_active": false + }, + "EntryPoints-EntriesByName": { + "_active": true, + "names": [ + "*Notification", + "_c_int00", + "FTSK_CreateTask*", + "main", + "vApplicationIdleHook", + "vApplicationStackOverflowHook" + ] + }, + "Externals-CStdLib.NoReturn": { + "functions": [ + "__assert_fail", + "_wassert", + "abort", + "exit", + "FAS_InfiniteLoop" + ] + }, + "FaultDetection-BadEnumValue": { + "_active": true + }, + "FaultDetection-DivisionByZero": { + "_active": true, + "abstract_interpretation_div_by_zero": true + }, + "FaultDetection-EscapingLocalAddress": { + "_active": true + }, + "FaultDetection-MemoryLeak": { + "_active": true + }, + "FaultDetection-NullPointerDereference": { + "_active": true + }, + "FaultDetection-RemovableStatements": { + "_active": true, + "exclude_in_macros": { + "$(delta:+)": [ + "assert" + ] + } + }, + "FaultDetection-UninitializedVariable": { + "_active": true + }, + "FaultDetection-UnrelatedPointerComparison": { + "_active": true + }, + "FaultDetection-UnrelatedPointerSubtraction": { + "_active": true + }, + "FaultDetection-UnusedAssignments": { + "_active": true + }, + "FaultDetection-UseAfterFree": { + "_active": true + }, + "Generic-CComments": { + "_active": true + }, + "Generic-DoxygenCommentAtDefinition": { + "_active": false + }, + "Generic-DoxygenCommentInHeader": { + "_active": true, + "ignore_tool_comments": "\\/\\*\\s+AXIVION .*\\s+\\*\\/" + }, + "Generic-DuplicateIncludeGuard": { + "_active": true + }, + "Generic-FinalNewline": { + "_active": true, + "_copy_from": "Generic-NoCompilerWarnings", + "languages": [ + "C", + "Assembler" + ], + "reported_severities": [ + "remark" + ] + }, + "Generic-ForbiddenFunctions": { + "_active": true + }, + "Generic-IncludeKind": { + "_active": true, + "enforced_system_headers": [ + "*/float.h", + "*/math.h", + "*/stdbool.h", + "*/stdint.h", + "*/stdlib.h", + "*/string.h" + ] + }, + "Generic-InitializeAllVariables": { + "_active": true + }, + "Generic-LocalInclude": { + "_active": true, + "enums_can_be_redeclared": true, + "excludes": [], + "interface_headers": [ + "*/*_api.h", + "*/Python.h", + "*/*_fwd.h", + "Q*" + ], + "msg": { + "add_include": { + "disabled": false + }, + "add_symbol_declaration": { + "disabled": false + }, + "circular_include": { + "disabled": false + }, + "more_precise_include": { + "disabled": false + }, + "move_include": { + "disabled": false + }, + "unused_include": { + "disabled": false + } + }, + "routines_can_be_redeclared": true, + "typedefs_can_be_redeclared": true + }, + "Generic-LocalScope": { + "_active": true, + "move_global_const_into_function": false, + "treat_initialization_as_use": true + }, + "Generic-MaxComplexity": { + "_active": true, + "maxcomplexity": 20 + }, + "Generic-MaxConditions": { + "_active": true, + "maxconditions": 5 + }, + "Generic-MaxNesting": { + "_active": true, + "maxnesting": 5 + }, + "Generic-MaxOneStmtPerLine": { + "_active": true + }, + "Generic-MaxParams": { + "_active": true + }, + "Generic-MissingIncludeGuard": { + "_active": true, + "languages": [ + "C" + ] + }, + "Generic-MissingOverride": { + "_active": true + }, + "Generic-MissingParameterAssert": { + "_active": true, + "macro_names": [ + "assert", + "FAS_ASSERT" + ] + }, + "Generic-MissingSelfHeaderInclude": { + "_active": true + }, + "Generic-MixedUpArgumentOrder": { + "_active": true + }, + "Generic-NoAbsoluteInclude": { + "_active": true + }, + "Generic-NoCommaSequence": { + "_active": true + }, + "Generic-NoCompilerWarnings": { + "_active": true + }, + "Generic-NoConditionalOperator": { + "_active": true + }, + "Generic-NoConstCasts": { + "_active": true + }, + "Generic-NoConstOnLHS": { + "_active": true + }, + "Generic-NoConstOnRHS": { + "_active": false + }, + "Generic-NoDiscardedReturnCode": { + "_active": true + }, + "Generic-NoEllipsis": { + "_active": true + }, + "Generic-NoEmptyLoops": { + "_active": true, + "languages": [ + "C", + "Assembler" + ] + }, + "Generic-NoEmptyStructs": { + "_active": true + }, + "Generic-NoExternInImpl": { + "_active": true + }, + "Generic-NoFunctionDefinitionInHeader": { + "_active": true + }, + "Generic-NoImplicitTypeConversion": { + "_active": false + }, + "Generic-NoIncludePaths": { + "_active": true, + "allow_downward_paths": true + }, + "Generic-NoIrregularInclude": { + "_active": true + }, + "Generic-NoLeakingReferenceToLocal": { + "_active": true + }, + "Generic-NoLinkerWarnings": { + "_active": true + }, + "Generic-NoMagicNumbers": { + "_active": true, + "exclude_single_uses": false + }, + "Generic-NoMalloc": { + "_active": true + }, + "Generic-NoPrecisionLoss": { + "_active": true + }, + "Generic-NoReferenceToLocalVariable": { + "_active": true + }, + "Generic-NoSemicolonAtEndOfMacro": { + "_active": true + }, + "Generic-NoSingleCharIdentifier": { + "_active": true, + "exclude_loop_counter": true, + "excludes": [], + "whitelist": [] + }, + "Generic-NoStaticInHeader": { + "_active": true + }, + "Generic-NoTabs": { + "_active": true, + "languages": [ + "C", + "Assembler" + ] + }, + "Generic-NoTrailingWhitespace": { + "_active": true, + "languages": [ + "C", + "Assembler" + ] + }, + "Generic-NoTypeConversionToBool": { + "_active": true + }, + "Generic-NoUncheckedPointerParamDereference": { + "_active": true + }, + "Generic-NoUnsafeMacro": { + "_active": true + }, + "Generic-NoWhitespaceMemberSelection": { + "_active": true + }, + "Generic-TooManyIncludes": { + "_active": true + }, + "Generic-TypedefCheck": { + "_active": true, + "report_identical_redefinitions": false + }, + "Generic-WrongIncludeCasing": { + "_active": true + }, + "Metric-CloneRatio": { + "_active": true + }, + "Metric-ExtendedMcCabe": { + "_active": true + }, + "Metric-Includes.DirectIncluders": { + "_active": true + }, + "Metric-Includes.DirectIncludes": { + "_active": true + }, + "Metric-Includes.IncludeBurden": { + "_active": true + }, + "Metric-Includes.MaximumIncludeDepth": { + "_active": true + }, + "Metric-Includes.MaximumIncluderDepth": { + "_active": true + }, + "Metric-Includes.TransitiveIncluders": { + "_active": true + }, + "Metric-Includes.TransitiveIncludes": { + "_active": true + }, + "Metric-IssueCount.Architecture": { + "_active": true + }, + "Metric-IssueCount.Clone": { + "_active": true + }, + "Metric-IssueCount.Cycle": { + "_active": true + }, + "Metric-IssueCount.DeadEntity": { + "_active": true + }, + "Metric-IssueCount.Metric": { + "_active": true + }, + "Metric-IssueCount.Style": { + "_active": true + }, + "Metric-LogNPathCeiling": { + "_active": true + }, + "Metric-LogNPathFloor": { + "_active": true + }, + "Metric-McCabeComplexity": { + "_active": true + }, + "Metric-NumberOfCalledRoutines": { + "_active": true, + "max_value": 20 + }, + "Metric-NumberOfCallingRoutines": { + "_active": true, + "max_value": 20 + }, + "Metric-NumberOfGotos": { + "_active": true + }, + "Metric-NumberOfInvocations": { + "_active": true + }, + "Metric-NumberOfParameters": { + "_active": true, + "max_value": 5 + }, + "Metric-NumberOfReturns": { + "_active": true, + "max_value": 1 + }, + "Metric-NumberOfSCCs": { + "_active": true + }, + "Metric-NumberOfStatements": { + "_active": true + }, + "Metric-SwitchComplexity": { + "_active": true + }, + "Metric-TokenMetric.Check": { + "_active": false + }, + "Metric-TokenMetric.Debug": { + "_active": true + }, + "Metric-TokenMetric.Fixme": { + "_active": true + }, + "Metric-TokenMetric.Hack": { + "_active": true + }, + "Metric-TokenMetric.Todo": { + "_active": true + }, + "Metric-TokenMetric.XXX": { + "_active": true + }, + "MisraC-13.3": { + "_active": true + }, + "MisraC-13.6": { + "_active": true + }, + "MisraC2012-1.1": { + "_active": true, + "standards": [ + "--c11", + "--c99" + ] + }, + "MisraC2012-1.2": { + "_active": true, + "exclude_in_macros": [ + "GEN_MUST_CHECK_RETURN", + "VER_VERSION_INFORMATION" + ] + }, + "MisraC2012-1.3": { + "_active": true + }, + "MisraC2012-1.4": { + "_active": true + }, + "MisraC2012-10.1": { + "_active": true + }, + "MisraC2012-10.2": { + "_active": true + }, + "MisraC2012-10.3": { + "_active": true + }, + "MisraC2012-10.4": { + "_active": true + }, + "MisraC2012-10.5": { + "_active": true + }, + "MisraC2012-10.6": { + "_active": true + }, + "MisraC2012-10.7": { + "_active": true + }, + "MisraC2012-10.8": { + "_active": true + }, + "MisraC2012-11.1": { + "_active": true + }, + "MisraC2012-11.2": { + "_active": true + }, + "MisraC2012-11.3": { + "_active": true + }, + "MisraC2012-11.4": { + "_active": true + }, + "MisraC2012-11.5": { + "_active": true + }, + "MisraC2012-11.6": { + "_active": true + }, + "MisraC2012-11.7": { + "_active": true + }, + "MisraC2012-11.8": { + "_active": true + }, + "MisraC2012-11.9": { + "_active": true + }, + "MisraC2012-12.1": { + "_active": true + }, + "MisraC2012-12.2": { + "_active": true + }, + "MisraC2012-12.3": { + "_active": true + }, + "MisraC2012-12.4": { + "_active": true + }, + "MisraC2012-12.5": { + "_active": true + }, + "MisraC2012-13": { + "exclude_in_macros": [ + "FAS_ASSERT" + ] + }, + "MisraC2012-13.1": { + "_active": true + }, + "MisraC2012-13.2": { + "_active": true + }, + "MisraC2012-13.3": { + "_active": true + }, + "MisraC2012-13.4": { + "_active": true + }, + "MisraC2012-13.5": { + "_active": true + }, + "MisraC2012-13.6": { + "_active": true + }, + "MisraC2012-14.1": { + "_active": true + }, + "MisraC2012-14.2": { + "_active": true + }, + "MisraC2012-14.3": { + "_active": true, + "exclude_in_macros": [ + "FAS_ASSERT" + ] + }, + "MisraC2012-14.4": { + "_active": true + }, + "MisraC2012-15.1": { + "_active": true + }, + "MisraC2012-15.2": { + "_active": true + }, + "MisraC2012-15.3": { + "_active": true + }, + "MisraC2012-15.4": { + "_active": true + }, + "MisraC2012-15.5": { + "_active": true + }, + "MisraC2012-15.6": { + "_active": true + }, + "MisraC2012-15.7": { + "_active": true + }, + "MisraC2012-16.1": { + "_active": true + }, + "MisraC2012-16.2": { + "_active": true + }, + "MisraC2012-16.3": { + "_active": true + }, + "MisraC2012-16.4": { + "_active": true + }, + "MisraC2012-16.5": { + "_active": true + }, + "MisraC2012-16.6": { + "_active": true + }, + "MisraC2012-16.7": { + "_active": true + }, + "MisraC2012-17.1": { + "_active": true + }, + "MisraC2012-17.2": { + "_active": true + }, + "MisraC2012-17.3": { + "_active": true + }, + "MisraC2012-17.4": { + "_active": true + }, + "MisraC2012-17.5": { + "_active": true + }, + "MisraC2012-17.6": { + "_active": true + }, + "MisraC2012-17.7": { + "_active": true + }, + "MisraC2012-17.8": { + "_active": true + }, + "MisraC2012-18.1": { + "_active": true + }, + "MisraC2012-18.2": { + "_active": true + }, + "MisraC2012-18.3": { + "_active": true + }, + "MisraC2012-18.4": { + "_active": true + }, + "MisraC2012-18.5": { + "_active": true + }, + "MisraC2012-18.6": { + "_active": true + }, + "MisraC2012-18.7": { + "_active": true + }, + "MisraC2012-18.8": { + "_active": true + }, + "MisraC2012-19.1": { + "_active": true + }, + "MisraC2012-19.2": { + "_active": true + }, + "MisraC2012-2.1": { + "_active": true + }, + "MisraC2012-2.2": { + "_active": true, + "exclude_in_macros": [ + "FAS_ASSERT" + ] + }, + "MisraC2012-2.3": { + "_active": true + }, + "MisraC2012-2.4": { + "_active": true + }, + "MisraC2012-2.5": { + "_active": true + }, + "MisraC2012-2.6": { + "_active": true + }, + "MisraC2012-2.7": { + "_active": true + }, + "MisraC2012-20.1": { + "_active": true + }, + "MisraC2012-20.10": { + "_active": true + }, + "MisraC2012-20.11": { + "_active": true + }, + "MisraC2012-20.12": { + "_active": true + }, + "MisraC2012-20.13": { + "_active": true + }, + "MisraC2012-20.14": { + "_active": true + }, + "MisraC2012-20.2": { + "_active": true + }, + "MisraC2012-20.3": { + "_active": true + }, + "MisraC2012-20.4": { + "_active": true + }, + "MisraC2012-20.5": { + "_active": true + }, + "MisraC2012-20.6": { + "_active": true + }, + "MisraC2012-20.7": { + "_active": true + }, + "MisraC2012-20.8": { + "_active": true + }, + "MisraC2012-20.9": { + "_active": true + }, + "MisraC2012-21.1": { + "_active": true + }, + "MisraC2012-21.10": { + "_active": true + }, + "MisraC2012-21.11": { + "_active": true + }, + "MisraC2012-21.12": { + "_active": true + }, + "MisraC2012-21.13": { + "_active": true + }, + "MisraC2012-21.14": { + "_active": true + }, + "MisraC2012-21.15": { + "_active": true + }, + "MisraC2012-21.16": { + "_active": true + }, + "MisraC2012-21.17": { + "_active": true + }, + "MisraC2012-21.18": { + "_active": true + }, + "MisraC2012-21.19": { + "_active": true + }, + "MisraC2012-21.2": { + "_active": true + }, + "MisraC2012-21.20": { + "_active": true + }, + "MisraC2012-21.21": { + "_active": true + }, + "MisraC2012-21.3": { + "_active": true + }, + "MisraC2012-21.4": { + "_active": true + }, + "MisraC2012-21.5": { + "_active": true + }, + "MisraC2012-21.6": { + "_active": true + }, + "MisraC2012-21.7": { + "_active": true + }, + "MisraC2012-21.8": { + "_active": true + }, + "MisraC2012-21.9": { + "_active": true + }, + "MisraC2012-22.1": { + "_active": true + }, + "MisraC2012-22.10": { + "_active": true + }, + "MisraC2012-22.2": { + "_active": true + }, + "MisraC2012-22.3": { + "_active": true + }, + "MisraC2012-22.4": { + "_active": true + }, + "MisraC2012-22.5": { + "_active": true + }, + "MisraC2012-22.6": { + "_active": true + }, + "MisraC2012-22.7": { + "_active": true + }, + "MisraC2012-22.8": { + "_active": true + }, + "MisraC2012-22.9": { + "_active": true + }, + "MisraC2012-3.1": { + "_active": true + }, + "MisraC2012-3.2": { + "_active": true + }, + "MisraC2012-4.1": { + "_active": true + }, + "MisraC2012-4.2": { + "_active": true + }, + "MisraC2012-5.1": { + "_active": true + }, + "MisraC2012-5.2": { + "_active": true + }, + "MisraC2012-5.3": { + "_active": true + }, + "MisraC2012-5.4": { + "_active": true + }, + "MisraC2012-5.5": { + "_active": true + }, + "MisraC2012-5.6": { + "_active": true + }, + "MisraC2012-5.7": { + "_active": true + }, + "MisraC2012-5.8": { + "_active": true + }, + "MisraC2012-5.9": { + "_active": true + }, + "MisraC2012-6.1": { + "_active": true + }, + "MisraC2012-6.2": { + "_active": true + }, + "MisraC2012-7.1": { + "_active": true + }, + "MisraC2012-7.2": { + "_active": true + }, + "MisraC2012-7.3": { + "_active": true + }, + "MisraC2012-7.4": { + "_active": true + }, + "MisraC2012-8.1": { + "_active": true + }, + "MisraC2012-8.10": { + "_active": true + }, + "MisraC2012-8.11": { + "_active": true + }, + "MisraC2012-8.12": { + "_active": true + }, + "MisraC2012-8.13": { + "_active": true + }, + "MisraC2012-8.14": { + "_active": true + }, + "MisraC2012-8.2": { + "_active": true + }, + "MisraC2012-8.3": { + "_active": true + }, + "MisraC2012-8.4": { + "_active": true + }, + "MisraC2012-8.5": { + "_active": true + }, + "MisraC2012-8.6": { + "_active": true + }, + "MisraC2012-8.7": { + "_active": true + }, + "MisraC2012-8.8": { + "_active": true + }, + "MisraC2012-8.9": { + "_active": true + }, + "MisraC2012-9.1": { + "_active": true + }, + "MisraC2012-9.2": { + "_active": true + }, + "MisraC2012-9.3": { + "_active": true + }, + "MisraC2012-9.4": { + "_active": true + }, + "MisraC2012-9.5": { + "_active": true + }, + "MisraC2012Directive-1.1": { + "_active": true + }, + "MisraC2012Directive-2.1": { + "_active": true + }, + "MisraC2012Directive-4.1": { + "_active": true, + "abstract_interpretation_div_by_zero": true, + "abstract_interpretation_overflow": true + }, + "MisraC2012Directive-4.10": { + "_active": true + }, + "MisraC2012Directive-4.11": { + "_active": true + }, + "MisraC2012Directive-4.12": { + "_active": true + }, + "MisraC2012Directive-4.13": { + "_active": true + }, + "MisraC2012Directive-4.14": { + "_active": true, + "external_sources": { + "return_values_of": { + "excluded": { + "$(delta:+)": [ + "__curpc", + "abs", + "labs", + "llabs", + "fminf", + "fabsf" ] - }, - "MisraC2012-2.3": { - "_active": true - }, - "MisraC2012-2.4": { - "_active": true - }, - "MisraC2012-2.5": { - "_active": true - }, - "MisraC2012-2.6": { - "_active": true - }, - "MisraC2012-2.7": { - "_active": true - }, - "MisraC2012-20.1": { - "_active": true - }, - "MisraC2012-20.10": { - "_active": true - }, - "MisraC2012-20.11": { - "_active": true - }, - "MisraC2012-20.12": { - "_active": true - }, - "MisraC2012-20.13": { - "_active": true - }, - "MisraC2012-20.14": { - "_active": true - }, - "MisraC2012-20.2": { - "_active": true - }, - "MisraC2012-20.3": { - "_active": true - }, - "MisraC2012-20.4": { - "_active": true - }, - "MisraC2012-20.5": { - "_active": true - }, - "MisraC2012-20.6": { - "_active": true - }, - "MisraC2012-20.7": { - "_active": true - }, - "MisraC2012-20.8": { - "_active": true - }, - "MisraC2012-20.9": { - "_active": true - }, - "MisraC2012-21.1": { - "_active": true - }, - "MisraC2012-21.10": { - "_active": true - }, - "MisraC2012-21.11": { - "_active": true - }, - "MisraC2012-21.12": { - "_active": true - }, - "MisraC2012-21.13": { - "_active": true - }, - "MisraC2012-21.14": { - "_active": true - }, - "MisraC2012-21.15": { - "_active": true - }, - "MisraC2012-21.16": { - "_active": true - }, - "MisraC2012-21.17": { - "_active": true - }, - "MisraC2012-21.18": { - "_active": true - }, - "MisraC2012-21.19": { - "_active": true - }, - "MisraC2012-21.2": { - "_active": true - }, - "MisraC2012-21.20": { - "_active": true - }, - "MisraC2012-21.21": { - "_active": true - }, - "MisraC2012-21.3": { - "_active": true - }, - "MisraC2012-21.4": { - "_active": true - }, - "MisraC2012-21.5": { - "_active": true - }, - "MisraC2012-21.6": { - "_active": true - }, - "MisraC2012-21.7": { - "_active": true - }, - "MisraC2012-21.8": { - "_active": true - }, - "MisraC2012-21.9": { - "_active": true - }, - "MisraC2012-22.1": { - "_active": true - }, - "MisraC2012-22.10": { - "_active": true - }, - "MisraC2012-22.2": { - "_active": true - }, - "MisraC2012-22.3": { - "_active": true - }, - "MisraC2012-22.4": { - "_active": true - }, - "MisraC2012-22.5": { - "_active": true - }, - "MisraC2012-22.6": { - "_active": true - }, - "MisraC2012-22.7": { - "_active": true - }, - "MisraC2012-22.8": { - "_active": true - }, - "MisraC2012-22.9": { - "_active": true - }, - "MisraC2012-3.1": { - "_active": true - }, - "MisraC2012-3.2": { - "_active": true - }, - "MisraC2012-4.1": { - "_active": true - }, - "MisraC2012-4.2": { - "_active": true - }, - "MisraC2012-5.1": { - "_active": true - }, - "MisraC2012-5.2": { - "_active": true - }, - "MisraC2012-5.3": { - "_active": true - }, - "MisraC2012-5.4": { - "_active": true - }, - "MisraC2012-5.5": { - "_active": true - }, - "MisraC2012-5.6": { - "_active": true - }, - "MisraC2012-5.7": { - "_active": true - }, - "MisraC2012-5.8": { - "_active": true - }, - "MisraC2012-5.9": { - "_active": true - }, - "MisraC2012-6.1": { - "_active": true - }, - "MisraC2012-6.2": { - "_active": true - }, - "MisraC2012-7.1": { - "_active": true - }, - "MisraC2012-7.2": { - "_active": true - }, - "MisraC2012-7.3": { - "_active": true - }, - "MisraC2012-7.4": { - "_active": true - }, - "MisraC2012-8.1": { - "_active": true - }, - "MisraC2012-8.10": { - "_active": true - }, - "MisraC2012-8.11": { - "_active": true - }, - "MisraC2012-8.12": { - "_active": true - }, - "MisraC2012-8.13": { - "_active": true - }, - "MisraC2012-8.14": { - "_active": true - }, - "MisraC2012-8.2": { - "_active": true - }, - "MisraC2012-8.3": { - "_active": true - }, - "MisraC2012-8.4": { - "_active": true - }, - "MisraC2012-8.5": { - "_active": true - }, - "MisraC2012-8.6": { - "_active": true - }, - "MisraC2012-8.7": { - "_active": true - }, - "MisraC2012-8.8": { - "_active": true - }, - "MisraC2012-8.9": { - "_active": true - }, - "MisraC2012-9.1": { - "_active": true - }, - "MisraC2012-9.2": { - "_active": true - }, - "MisraC2012-9.3": { - "_active": true - }, - "MisraC2012-9.4": { - "_active": true - }, - "MisraC2012-9.5": { - "_active": true - }, - "MisraC2012Directive-1.1": { - "_active": true - }, - "MisraC2012Directive-2.1": { - "_active": true - }, - "MisraC2012Directive-4.1": { - "_active": true, - "abstract_interpretation_div_by_zero": true, - "abstract_interpretation_overflow": true - }, - "MisraC2012Directive-4.10": { - "_active": true - }, - "MisraC2012Directive-4.11": { - "_active": true - }, - "MisraC2012Directive-4.12": { - "_active": true - }, - "MisraC2012Directive-4.13": { - "_active": true - }, - "MisraC2012Directive-4.14": { - "_active": true, - "external_sources": { - "return_values_of": { - "excluded": { - "$(delta:+)": [ - "__curpc", - "abs", - "labs", - "llabs", - "fminf", - "fabsf" - ] - } - } - } - }, - "MisraC2012Directive-4.2": { - "_active": true - }, - "MisraC2012Directive-4.3": { - "_active": true - }, - "MisraC2012Directive-4.4": { - "_active": true - }, - "MisraC2012Directive-4.5": { - "_active": true - }, - "MisraC2012Directive-4.6": { - "_active": true - }, - "MisraC2012Directive-4.7": { - "_active": true - }, - "MisraC2012Directive-4.8": { - "_active": true, - "excludes": { - "$(delta:+)": [ - "src/app/engine/config/database_cfg.h" - ] - } - }, - "MisraC2012Directive-4.9": { - "_active": true - }, - "NextCodeline": { - "_active": true - }, - "NextConstruct": { - "_active": true - }, - "NextLine": { - "_active": true - }, - "Parallelism-IncorrectCriticalRegion": { - "_active": true, - "enter_critical_functions": [ - "OS_EnterTaskCritical" - ], - "exit_critical_functions": [ - "OS_ExitTaskCritical" - ], - "nested_critical_regions": false - }, - "Parallelism-UnsafeVarAccess": { - "_active": true, - "enter_critical_functions": [ - "OS_EnterTaskCritical" - ], - "excluded_routines": [ - "FTSK_InitializeUserCodeEngine", - "FTSK_InitializeUserCodePreCyclicTasks", - "prvAddCurrentTaskToDelayedList", - "prvCopyDataFromQueue", - "prvCopyDataToQueue", - "prvIsQueueEmpty", - "prvIsQueueFull", - "prvResetNextTaskUnblockTime", - "prvUnlockQueue", - "uxListRemove", - "uxQueueMessagesWaiting", - "vListInsert", - "vListInsertEnd", - "xQueueGenericSend", - "xQueueReceive", - "xTaskIncrementTick", - "xTaskRemoveFromEventList", - "xTaskResumeAll" - ], - "exit_critical_functions": [ - "OS_ExitTaskCritical" - ], - "inspect_pointers": true, - "nested_critical_regions": false, - "strict_priorities": true - }, - "SameRoutine": { - "_active": true, - "entity": { - "group": 2, - "value": "ENTITY_AS_GLOBBING" - }, - "format": "\\s*AXIVION\\s+Routine\\s+([^:]*):\\s+([^:]*)(:.*)?", - "justification": { - "group": 3 - } - }, - "SaveRFG": { - "_active": true - }, - "StaticSemanticAnalysis": { - "_active": true, - "callgraph_options": { - "use_full_pointer_analysis": true - }, - "global_classic_options": { - "abstract_interpretation": true - } + } } + } + }, + "MisraC2012Directive-4.2": { + "_active": true + }, + "MisraC2012Directive-4.3": { + "_active": true + }, + "MisraC2012Directive-4.4": { + "_active": true + }, + "MisraC2012Directive-4.5": { + "_active": true + }, + "MisraC2012Directive-4.6": { + "_active": true + }, + "MisraC2012Directive-4.7": { + "_active": true + }, + "MisraC2012Directive-4.8": { + "_active": true, + "excludes": { + "$(delta:+)": [ + "src/app/engine/config/database_cfg.h" + ] + } + }, + "MisraC2012Directive-4.9": { + "_active": true + }, + "NextCodeline": { + "_active": true + }, + "NextConstruct": { + "_active": true + }, + "NextLine": { + "_active": true + }, + "Parallelism-IncorrectCriticalRegion": { + "_active": true, + "enter_critical_functions": [ + "OS_EnterTaskCritical" + ], + "exit_critical_functions": [ + "OS_ExitTaskCritical" + ], + "nested_critical_regions": false + }, + "Parallelism-UnsafeVarAccess": { + "_active": true, + "enter_critical_functions": [ + "OS_EnterTaskCritical" + ], + "excluded_routines": [ + "FTSK_InitializeUserCodeEngine", + "FTSK_InitializeUserCodePreCyclicTasks", + "prvAddCurrentTaskToDelayedList", + "prvCopyDataFromQueue", + "prvCopyDataToQueue", + "prvIsQueueEmpty", + "prvIsQueueFull", + "prvResetNextTaskUnblockTime", + "prvUnlockQueue", + "uxListRemove", + "uxQueueMessagesWaiting", + "vListInsert", + "vListInsertEnd", + "xQueueGenericSend", + "xQueueReceive", + "xTaskIncrementTick", + "xTaskRemoveFromEventList", + "xTaskResumeAll" + ], + "exit_critical_functions": [ + "OS_ExitTaskCritical" + ], + "inspect_pointers": true, + "nested_critical_regions": false, + "strict_priorities": true + }, + "SameRoutine": { + "_active": true, + "entity": { + "group": 2, + "value": "ENTITY_AS_GLOBBING" + }, + "format": "\\s*AXIVION\\s+Routine\\s+([^:]*):\\s+([^:]*)(:.*)?", + "justification": { + "group": 3 + } + }, + "SaveRFG": { + "_active": true }, - "_Format": "1.0", - "_Version": "7.5.2", - "_VersionNum": [ - 7, - 5, - 2, - 11578 - ] + "StaticSemanticAnalysis": { + "_active": true, + "callgraph_options": { + "use_full_pointer_analysis": true + }, + "global_classic_options": { + "abstract_interpretation": true + } + } + }, + "_Format": "1.0", + "_Version": "7.5.2", + "_VersionNum": [ + 7, + 5, + 2, + 11578 + ] } diff --git a/tests/axivion/rule_config_c.py b/tests/axivion/rule_config_c.py old mode 100644 new mode 100755 index 90f66109..9422134d --- a/tests/axivion/rule_config_c.py +++ b/tests/axivion/rule_config_c.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -40,9 +39,9 @@ """Axivion rules configured for the foxBMS 2 project.""" -import axivion.config # pylint: disable=import-error +import axivion.config # pylint: disable=import-error,no-name-in-module -analysis = axivion.config.get_analysis() +analysis = axivion.config.get_analysis() # pylint: disable=c-extension-no-member analysis["Generic-LocalInclude"].msg["add_include"].disabled = False analysis["Generic-LocalInclude"].msg["add_symbol_declaration"].disabled = False diff --git a/tests/axivion/rule_config_include_guard.py b/tests/axivion/rule_config_include_guard.py old mode 100644 new mode 100755 index a34e4251..c75626cc --- a/tests/axivion/rule_config_include_guard.py +++ b/tests/axivion/rule_config_include_guard.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -43,11 +42,13 @@ from typing import Union from pathlib import Path -import axivion.config # pylint: disable=import-error -from bauhaus import ir # pylint: disable=import-error -from bauhaus import scanner # pylint: disable=import-error +# pylint: disable=import-error +import axivion.config # pylint: disable=no-name-in-module +from bauhaus import ir +from bauhaus import scanner -ANALYSIS = axivion.config.get_analysis() +# pylint: enable=import-error +ANALYSIS = axivion.config.get_analysis() # pylint: disable=c-extension-no-member def create_include_guard(file_name: str) -> str: @@ -74,4 +75,4 @@ def check_include_guard( RULE_NAME = "Generic-MissingIncludeGuard" -ANALYSIS[RULE_NAME].macro_name_restrictions.append((check_include_guard)) +ANALYSIS[RULE_NAME].macro_name_restrictions.append(check_include_guard) diff --git a/tests/axivion/rule_config_metric_lines.json b/tests/axivion/rule_config_metric_lines.json index 2c174e38..f63f619d 100644 --- a/tests/axivion/rule_config_metric_lines.json +++ b/tests/axivion/rule_config_metric_lines.json @@ -1,104 +1,104 @@ { - "Analysis": { - "Metric-Comment.Density": { - "_active": true, - "min_value": 0.15 - }, - "Metric-Lines.Class.LOC": { - "_active": false - }, - "Metric-Lines.Comment": { - "_active": true - }, - "Metric-Lines.Empty": { - "_active": true, - "max_value": 20, - "min_value": 0 - }, - "Metric-Lines.File.Code": { - "_active": true, - "min_value": 0 - }, - "Metric-Lines.File.Comment": { - "_active": true, - "min_value": 10 - }, - "Metric-Lines.File.CommentRatio": { - "_active": true, - "min_value": 0.15 - }, - "Metric-Lines.File.LOC": { - "_active": true, - "max_value": 800, - "min_value": 0 - }, - "Metric-Lines.LOC": { - "_active": true - }, - "Metric-Lines.OnlyComment": { - "_active": true - }, - "Metric-Lines.PP.Define": { - "_active": true - }, - "Metric-Lines.PP.Elif": { - "_active": true - }, - "Metric-Lines.PP.Else": { - "_active": true - }, - "Metric-Lines.PP.Endif": { - "_active": true - }, - "Metric-Lines.PP.Error": { - "_active": true - }, - "Metric-Lines.PP.Ident": { - "_active": true - }, - "Metric-Lines.PP.If": { - "_active": true - }, - "Metric-Lines.PP.Ifdef": { - "_active": true - }, - "Metric-Lines.PP.Ifndef": { - "_active": true - }, - "Metric-Lines.PP.Include": { - "_active": true - }, - "Metric-Lines.PP.Line": { - "_active": true - }, - "Metric-Lines.PP.Pragma": { - "_active": true - }, - "Metric-Lines.PP.Undef": { - "_active": true - }, - "Metric-Lines.PP.Warning": { - "_active": true - }, - "Metric-Lines.Routine.Code": { - "_active": true, - "min_value": 1 - }, - "Metric-Lines.Routine.CommentRatio": { - "_active": true, - "min_value": 0.15 - }, - "Metric-Lines.Routine.LOC": { - "_active": true, - "max_value": 100 - } - }, - "_Format": "1.0", - "_Version": "7.5.2", - "_VersionNum": [ - 7, - 5, - 2, - 11578 - ] + "Analysis": { + "Metric-Comment.Density": { + "_active": true, + "min_value": 0.15 + }, + "Metric-Lines.Class.LOC": { + "_active": false + }, + "Metric-Lines.Comment": { + "_active": true + }, + "Metric-Lines.Empty": { + "_active": true, + "max_value": 20, + "min_value": 0 + }, + "Metric-Lines.File.Code": { + "_active": true, + "min_value": 0 + }, + "Metric-Lines.File.Comment": { + "_active": true, + "min_value": 10 + }, + "Metric-Lines.File.CommentRatio": { + "_active": true, + "min_value": 0.15 + }, + "Metric-Lines.File.LOC": { + "_active": true, + "max_value": 800, + "min_value": 0 + }, + "Metric-Lines.LOC": { + "_active": true + }, + "Metric-Lines.OnlyComment": { + "_active": true + }, + "Metric-Lines.PP.Define": { + "_active": true + }, + "Metric-Lines.PP.Elif": { + "_active": true + }, + "Metric-Lines.PP.Else": { + "_active": true + }, + "Metric-Lines.PP.Endif": { + "_active": true + }, + "Metric-Lines.PP.Error": { + "_active": true + }, + "Metric-Lines.PP.Ident": { + "_active": true + }, + "Metric-Lines.PP.If": { + "_active": true + }, + "Metric-Lines.PP.Ifdef": { + "_active": true + }, + "Metric-Lines.PP.Ifndef": { + "_active": true + }, + "Metric-Lines.PP.Include": { + "_active": true + }, + "Metric-Lines.PP.Line": { + "_active": true + }, + "Metric-Lines.PP.Pragma": { + "_active": true + }, + "Metric-Lines.PP.Undef": { + "_active": true + }, + "Metric-Lines.PP.Warning": { + "_active": true + }, + "Metric-Lines.Routine.Code": { + "_active": true, + "min_value": 1 + }, + "Metric-Lines.Routine.CommentRatio": { + "_active": true, + "min_value": 0.15 + }, + "Metric-Lines.Routine.LOC": { + "_active": true, + "max_value": 100 + } + }, + "_Format": "1.0", + "_Version": "7.5.2", + "_VersionNum": [ + 7, + 5, + 2, + 11578 + ] } diff --git a/tests/axivion/rule_config_names.json b/tests/axivion/rule_config_names.json index ae7e49d9..0a334a1f 100644 --- a/tests/axivion/rule_config_names.json +++ b/tests/axivion/rule_config_names.json @@ -1,168 +1,168 @@ { - "Analysis": { - "CodingStyle-Naming.Function": { - "_active": true, - "exceptions": [ - "__TI_auto_init", - "_c_int00", - "canMessageNotification", - "DllMain", - "dmaGroupANotification", - "ecapNotification", - "exit", - "main", - "spiNotification", - "vApplicationGetIdleTaskMemory", - "vApplicationIdleHook", - "WinMain", - "wmain", - "wWinMain" - ], - "languages": [ - "C", - "Assembler" - ], - "msg": { - "non_compliant_name": { - "text": "Function names shall use the naming convention (prefix.upper())_PascalCase." - } - }, - "naming_convention": "^[A-Z][A-Z0-9]{1,4}_([A-Z]([a-z]|[0-9]{1,}[A-Za-z]))[A-Za-z0-9_]{0,}" - }, - "CodingStyle-Naming.GlobalVariable": { - "_active": true, - "languages": [ - "C", - "Assembler" - ], - "msg": { - "non_compliant_name": { - "text": "Names of global variables shall use the naming convention (prefix.lower())_camelCase (and optional unit suffix preceded by _)." - } - }, - "naming_convention": "^[a-z][a-z0-9]{1,4}_(([a-z]|[0-9]{1,}[A-Za-z]))[A-Za-z0-9_]{0,}" - }, - "CodingStyle-Naming.LocalVariable": { - "_active": true, - "languages": [ - "C", - "Assembler" - ], - "msg": { - "non_compliant_name": { - "text": "Names of local variables shall use the naming convention (prefix.lower())_camelCase (and optional unit suffix preceded by _)." - } - }, - "naming_convention": "^(([a-z]|[0-9]{1,}[A-Za-z]))[A-Za-z0-9_]{0,}" - }, - "CodingStyle-Naming.Macro": { - "_active": true, - "exclude_in_macros": [ - "GEN_REPEAT_U*u" - ], - "languages": [ - "C", - "Assembler" - ], - "msg": { - "non_compliant_name": { - "text": "Macro names shall use the naming convention '(prefix.upper())_ALL_CAPS' (and optional unit suffix preceded by _) or for include guards 'FOXBMS__FILENAME_H_'." - } - }, - "naming_convention": "(([A-Z][A-Z0-9]{1,4})_([A-Z0-9]([A-Z0-9_]*)).*)(? str: @style.workitem(inputs=(ir.Graph, comments.scan_and_cache_comments), repeat=True) class ModulePrefixLookup(style.WorkItem): - """Fetches the module prefix based on a regex from the provided source file - - hint: check that this regex is consistent with - 'conf/guidelines/rules.json:languages:C:doxygen:regex:{xy}' - setting - """ + """Fetches the module prefix based on a regex from the provided source file""" prefix_re = re.compile(r"@prefix\s+(\S+)(?:\s|\n|$)", flags=re.MULTILINE) @@ -209,15 +203,15 @@ def check_macro_name(node: ir.Node, module_prefixes: ModulePrefixLookup) -> bool not node.type() == "Predefined_Object_Macro_Definition" and not node.Name.startswith("__") ): - logging.debug(f"node.Name: {node.Name}") + logging.debug("node.Name: %s", node.Name) else: logging.getLogger().setLevel(logging.FATAL) # ignore output for file in containing_modules(node): if file in module_prefixes: - logging.debug(f"found prefix: {module_prefixes[file]}") + logging.debug("found prefix: %s", module_prefixes[file]) if not node.Name.startswith(module_prefixes[file].upper() + "_"): - logging.debug(f"Check if '{node.Name}' is a include guard.") + logging.debug("Check if '%s' is a include guard.", node.Name) # check that we are not hitting an include guard, as # include guards use the pattern 'FOXBMS__{FILENAME}_H_' file_name_to_guard = "".join( @@ -225,21 +219,21 @@ def check_macro_name(node: ir.Node, module_prefixes: ModulePrefixLookup) -> bool ) define_guard = f"FOXBMS__{file_name_to_guard}_H_" if node.Name == define_guard: - logging.debug(f"found include guard ('{node.Name}').") - logging.debug(f"Done for '{node.Name}'.\n") + logging.debug("found include guard ('%s').", node.Name) + logging.debug("Done for '%s'.\n", node.Name) return True - logging.debug(f"'{node.Name}' is not an include guard.") + logging.debug("'%s' is not an include guard.", node.Name) # we have not hit an include guard, now check that the macro starts # with the prefix is all uppercase and optionally ends with one of # the valid suffixes if not node.Name.startswith(module_prefixes[file].upper() + "_"): # macro does not use the module prefix - logging.error(f"'{node.Name}' is missing the prefix.") - logging.debug(f"Done for '{node.Name}'.\n") + logging.error("'%s' is missing the prefix.", node.Name) + logging.debug("Done for '%s'.\n", node.Name) return False if node.Name == node.Name.upper(): - logging.debug(f"'{node.Name}' uses a valid name.") - logging.debug(f"Done for '{node.Name}'.\n") + logging.debug("'%s' uses a valid name.", node.Name) + logging.debug("Done for '%s'.\n", node.Name) return True # we start with the prefix, but the macro is not all uppercase, # so maybe we appended a valid suffix @@ -249,10 +243,10 @@ def check_macro_name(node: ir.Node, module_prefixes: ModulePrefixLookup) -> bool # we need to subtract additionally -1 because of the underscore without_suffix = node.Name[: len(node.Name) - len(suffix) - 1] if without_suffix == without_suffix.upper(): - logging.debug(f"Done for '{node.Name}'.\n") + logging.debug("Done for '%s'.\n", node.Name) return True - logging.error(f"'{node.Name}' uses an invalid macro name.") - logging.debug(f"Done for '{node.Name}'.\n") + logging.error("'%s' uses an invalid macro name.", node.Name) + logging.debug("Done for '%s'.\n", node.Name) logging.getLogger().setLevel(logging.DEBUG) # reset logging level return False diff --git a/tests/axivion/scripts/README.md b/tests/axivion/scripts/README.md index 00264a89..f0c719ab 100644 --- a/tests/axivion/scripts/README.md +++ b/tests/axivion/scripts/README.md @@ -6,29 +6,30 @@ These are helper scripts for the interaction with the Axivion Bauhaus Suite in the foxBMS 2 project (The Axivion configuration is described in this [README.md](../README.md)). -- ``scripts/start_analysis.bat``, ``scripts/start_local_analysis.bat``, -``scripts/start_local_dashserver.bat`` are helper scripts to run Axivion. Files here might need to be updated to the local Axivion setup. - ``gravis_export_architecture_svg.py`` is a startup script for ``gravis`` to create a SVG of the architecture. The script needs to be invoked by as follows: + + ```pwsh + .\fox.ps1 run-program gravis --script tests\axivion\scripts\gravis_export_architecture_svg.py ``` - gravis --script tests/axivion/scripts/gravis_export_architecture_svg.py - ``` -- ``scripts/ci_check_freshness_of_architecture_svg.py`` is used to check + +- ``ci_check_freshness_of_architecture_svg.py`` is used to check whether the git timestamps of the architecture documentation and the rendered SVG are aligned, i.e., one can not change the architecture without updating the architecture image in the documentation. The script needs to be invoked by as follows: + + ```pwsh + .\fox.ps1 run-script tests\axivion\scripts\ci_check_freshness_of_architecture_svg.py ``` - tools/utils/cmd/run-python-script.bat tests/axivion/scripts ci_check_freshness_of_architecture_svg.py - ``` + - ``scripts/wrapper_make_race_pdfs.bat`` wrapper script to simplify creating the race condition report. ## Local Build -1. Run once ``tests/axivion/scripts/start_local_dashserver.bat`` to start a - local dashserver. -1. Then, run ``tests/axivion/scripts/start_local_analysis.bat`` to run a local - analysis build. +1. Run once ``.\fox.ps1 axivion local-dashserver`` to start a local dashserver. +1. Then, run ``.\fox.ps1 axivion local-analysis`` to run a local analysis + build. diff --git a/tests/axivion/scripts/check_axivion_versions.py b/tests/axivion/scripts/check_axivion_versions.py old mode 100644 new mode 100755 index 6fa5f498..e1ff1936 --- a/tests/axivion/scripts/check_axivion_versions.py +++ b/tests/axivion/scripts/check_axivion_versions.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -41,32 +40,38 @@ """Check that the Axivion version specifier is the same in all configuration files""" -import sys import json +import logging +import sys +import shutil +from subprocess import Popen, PIPE from pathlib import Path -import git -from git.exc import InvalidGitRepositoryError -SCRIPT_DIR = Path(__file__).parent.resolve() +def get_repo_root(): + """extract the commit date of a file as datetime from git""" + git = shutil.which("git") + if not git: + sys.exit("Could not find git.") + cmd = [git, "rev-parse", "--show-toplevel"] + with Popen(cmd, cwd=str(Path(__file__).parent), stdout=PIPE) as p: + std_out = p.communicate()[0] + root = Path(std_out.decode("utf-8").strip()) + logging.debug("Repository root is: %s", root) + return root + -try: - repo = git.Repo(SCRIPT_DIR, search_parent_directories=True) - REPO_ROOT = Path(repo.git.rev_parse("--show-toplevel")) -except InvalidGitRepositoryError: - sys.exit("Test can only be run in a git repository.") +CONFIG_FILES_EXCL = ["axivion_config.json", "axivion_self_tests.json"] def get_axivion_configuration_files() -> list: """Find all Axivion configuration files""" + repo_root = get_repo_root() return [ i - for i in (REPO_ROOT / "tests/axivion").glob("*.json") - if not i.name == "axivion_config.json" - ] + [ - i - for i in (REPO_ROOT / "tests/unit/axivion").glob("*.json") - if not i.name == "axivion_config.json" + for i in list((repo_root / "tests/axivion").glob("*.json")) + + list((repo_root / "tests/unit/axivion").glob("*.json")) + if i.name not in CONFIG_FILES_EXCL ] @@ -75,18 +80,12 @@ def main(): errors = [] file_and_version_info = [] for i in get_axivion_configuration_files(): - with open(i, "r", encoding="utf-8") as f: - cfg = json.load(f) - try: - cfg["_Version"] - except KeyError: + with open(i, encoding="utf-8") as f: + cfg: dict = json.load(f) + if not cfg.get("_Version", ""): errors.append(f"{i}: '_Version' not specified") - continue - try: - cfg["_VersionNum"] - except KeyError: + if not cfg.get("_VersionNum", ""): errors.append(f"{i}: '_VersionNum' not specified") - continue file_and_version_info.append((i, cfg["_Version"], cfg["_VersionNum"])) @@ -113,6 +112,9 @@ def main(): for i in errors: print(i, file=sys.stderr) + if any(True for i in sys.argv if "-v" in i): + print("All version numbers match.") + sys.exit(len(errors)) diff --git a/tests/axivion/scripts/ci_check_freshness_of_architecture_svg.py b/tests/axivion/scripts/ci_check_freshness_of_architecture_svg.py old mode 100644 new mode 100755 index 27ce1aa3..cb515af4 --- a/tests/axivion/scripts/ci_check_freshness_of_architecture_svg.py +++ b/tests/axivion/scripts/ci_check_freshness_of_architecture_svg.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -47,22 +46,28 @@ In order to fix a failure, check the documentation on how to update the architecture SVG. """ + import argparse import datetime import logging import os import sys +import shutil from pathlib import Path +from subprocess import Popen, PIPE -from git import Repo +SCRIPT_DIR = Path(__file__).parent def get_git_change_date(filename): """extract the commit date of a file as datetime from git""" - repo = Repo(filename, search_parent_directories=True) - extracted_date = repo.git.log("-1", "--date=short", "--pretty=%at", filename) + git = shutil.which("git") + cmd = [git, "log", "-1", "--date=short", "--pretty=%at", filename] + with Popen(cmd, cwd=SCRIPT_DIR, stdout=PIPE) as p: + std_out = p.communicate()[0] + extracted_date = std_out.decode("utf-8").strip() timestamp = datetime.datetime.fromtimestamp(int(extracted_date)) - logging.debug(f"extracted timestamp from file {filename}: {timestamp}") + logging.debug("extracted timestamp from file %s: %s", filename, timestamp) return timestamp @@ -86,27 +91,25 @@ def main(): else: logging.basicConfig(level=logging.ERROR) - print("Searching for the file change dates.") - - script_dir = Path(__file__).parent + logging.debug("Searching for the file change dates.") file_architecture = os.path.abspath( os.path.join( - script_dir, + SCRIPT_DIR, "..", "architecture.gxl", ) ) file_layout = os.path.abspath( os.path.join( - script_dir, + SCRIPT_DIR, "..", "architecture_hierarchy_belongs_to_layout.gvl", ) ) file_output = os.path.abspath( os.path.join( - script_dir, + SCRIPT_DIR, "..", "..", "..", @@ -120,7 +123,7 @@ def main(): def get_date_helper(filename): date = get_git_change_date(filename) - logging.debug(f"timestamp for {filename}: {date}") + logging.debug("timestamp for %s: %s", filename, date) return date date_architecture = get_date_helper(file_architecture) @@ -128,9 +131,9 @@ def get_date_helper(filename): date_output = get_date_helper(file_output) date_oldest_educt = max(date_architecture, date_layout) - logging.info(f"oldest educt is from {date_oldest_educt}.") + logging.info("oldest educt is from %s.", date_oldest_educt) - logging.info(f"youngest product is from {date_output}.") + logging.info("youngest product is from %s.", date_output) if date_oldest_educt > date_output: logging.error( @@ -139,7 +142,7 @@ def get_date_helper(filename): ) sys.exit(1) - print("Architecture SVG is up to date.") + logging.debug("Architecture SVG is up to date.") if __name__ == "__main__": diff --git a/tests/axivion/scripts/dependency_analysis.py b/tests/axivion/scripts/dependency_analysis.py old mode 100644 new mode 100755 index 94624fbf..f5a1f7cf --- a/tests/axivion/scripts/dependency_analysis.py +++ b/tests/axivion/scripts/dependency_analysis.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -61,7 +60,7 @@ def get_git_root(path: str) -> str: """helper function to find the repository root Args: - path (string): path of test_f_guidelines + path (string): path of file in git repository Returns: root (string): root path of the git repository @@ -114,7 +113,8 @@ def find_axivion(): sys.exit("Could not find an Axivion installation.") sys.path.append(ax_install) -from bauhaus import rfg # pylint: disable=import-error,wrong-import-position +# pylint: disable-next=import-error,wrong-import-position +from bauhaus import rfg # noqa: E402 class RfgParsing: @@ -226,12 +226,12 @@ def main(): args.rfg_file = Path(args.rfg_file) if not args.rfg_file.is_file(): sys.exit(f"Could not find input file '{args.rfg_file.resolve()}'.") - logging.debug(f"Found input file '{args.rfg_file.resolve()}'.") + logging.debug("Found input file '%s'.", args.rfg_file.resolve()) logging.info("Analysing rfg file...") rfg_analysis = RfgParsing(rfg.Graph(args.rfg_file.resolve())) rfg_analysis.export_dependencies(ignore=args.ignore_locs) logging.info("Done...") - logging.info(f"Saving output to '{args.out.resolve()}'") + logging.info("Saving output to '%s'", args.out.resolve()) rfg_analysis.save(args.out.resolve()) logging.info("Done...") diff --git a/tests/axivion/scripts/gravis_export_architecture_svg.py b/tests/axivion/scripts/gravis_export_architecture_svg.py old mode 100644 new mode 100755 index 0750c099..adda2b52 --- a/tests/axivion/scripts/gravis_export_architecture_svg.py +++ b/tests/axivion/scripts/gravis_export_architecture_svg.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -45,8 +44,10 @@ layout that is stored under version control and exporting this view as a replacement to the original architecture svg. """ + import os import sys +from pathlib import Path try: from bauhaus import gravis @@ -99,5 +100,5 @@ gravis.load_layout(file_layout) gravis.update() gravis.save_as_svg(file_output_architecture) - print(f"exported architecture to {file_output_architecture}") + print(f"exported architecture to {Path(file_output_architecture).resolve()}") exit(0) # pylint: disable=consider-using-sys-exit; (Described in Axivion docs) diff --git a/tests/axivion/scripts/start_analysis.bat b/tests/axivion/scripts/start_analysis.bat deleted file mode 100644 index 298adaa6..00000000 --- a/tests/axivion/scripts/start_analysis.bat +++ /dev/null @@ -1,52 +0,0 @@ -@REM Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -@REM All rights reserved. -@REM -@REM SPDX-License-Identifier: BSD-3-Clause -@REM -@REM Redistribution and use in source and binary forms, with or without -@REM modification, are permitted provided that the following conditions are met: -@REM -@REM 1. Redistributions of source code must retain the above copyright notice, this -@REM list of conditions and the following disclaimer. -@REM -@REM 2. Redistributions in binary form must reproduce the above copyright notice, -@REM this list of conditions and the following disclaimer in the documentation -@REM and/or other materials provided with the distribution. -@REM -@REM 3. Neither the name of the copyright holder nor the names of its -@REM contributors may be used to endorse or promote products derived from -@REM this software without specific prior written permission. -@REM -@REM THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -@REM AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -@REM IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -@REM DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -@REM FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -@REM DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -@REM SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -@REM CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -@REM OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -@REM OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -@REM -@REM We kindly request you to use one or more of the following phrases to refer to -@REM foxBMS in your hardware, software, documentation or advertising materials: -@REM -@REM - "This product uses parts of foxBMS®" -@REM - "This product includes parts of foxBMS®" -@REM - "This product is derived from foxBMS®" - -@SETLOCAL EnableExtensions EnableDelayedExpansion - -@IF DEFINED AXIVION_LOCAL_BUILD ( - set SKIP_PREBUILD_CLEAN=%AXIVION_LOCAL_BUILD% -) -@IF DEFINED AXIVION_INCREMENTAL_BUILD ( - set SKIP_POSTBUILD_CLEAN=%AXIVION_INCREMENTAL_BUILD% -) - -@SET AXIVION_BUILD_DIR=%~dp0\..\..\..\build\axivion -@IF NOT EXIST %AXIVION_BUILD_DIR% ( - @mkdir %AXIVION_BUILD_DIR% -) -@SET BAUHAUS_CONFIG=%~dp0\..\ -@axivion_ci diff --git a/tests/axivion/scripts/start_local_analysis.bat b/tests/axivion/scripts/start_local_analysis.bat deleted file mode 100644 index 958dbd9c..00000000 --- a/tests/axivion/scripts/start_local_analysis.bat +++ /dev/null @@ -1,66 +0,0 @@ -@REM Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -@REM All rights reserved. -@REM -@REM SPDX-License-Identifier: BSD-3-Clause -@REM -@REM Redistribution and use in source and binary forms, with or without -@REM modification, are permitted provided that the following conditions are met: -@REM -@REM 1. Redistributions of source code must retain the above copyright notice, this -@REM list of conditions and the following disclaimer. -@REM -@REM 2. Redistributions in binary form must reproduce the above copyright notice, -@REM this list of conditions and the following disclaimer in the documentation -@REM and/or other materials provided with the distribution. -@REM -@REM 3. Neither the name of the copyright holder nor the names of its -@REM contributors may be used to endorse or promote products derived from -@REM this software without specific prior written permission. -@REM -@REM THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -@REM AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -@REM IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -@REM DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -@REM FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -@REM DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -@REM SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -@REM CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -@REM OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -@REM OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -@REM -@REM We kindly request you to use one or more of the following phrases to refer to -@REM foxBMS in your hardware, software, documentation or advertising materials: -@REM -@REM - "This product uses parts of foxBMS®" -@REM - "This product includes parts of foxBMS®" -@REM - "This product is derived from foxBMS®" - -@SETLOCAL EnableExtensions EnableDelayedExpansion - -@set AXIVION=TRUE -@set AXIVION_LOCAL_BUILD=TRUE -@set STORE_REQUESTS_CA_BUNDLE=%REQUESTS_CA_BUNDLE% -@set REQUESTS_CA_BUNDLE=%USERPROFILE%\.bauhaus\auto.crt - - -@FOR /F "tokens=* USEBACKQ" %%F IN (`git branch --show-current`) DO @( - @SET AXIVION_BRANCH_NAME=%%F -) - -@SET projectName=foxbms-2 -@SET analysisProjectName = %projectName% + "-" + %AXIVION_BRANCH_NAME% + "-" + %USERNAME% -@ECHO %analysisProjectName% - -@SET projectShadowRepo=%USERPROFILE%\.bauhaus\%projectName% -@ECHO Shadow repo is at '%projectShadowRepo%'. -@IF NOT EXIST %projectShadowRepo% ( - @mkdir %projectShadowRepo% -) - -@IF %ERRORLEVEL% NEQ 0 ( - @EXIT /b %ERRORLEVEL% -) -@ECHO Dashboard url is: %AXIVION_DASHBOARD_URL% - -@call %~dp0start_analysis.bat -@set REQUESTS_CA_BUNDLE=%STORE_REQUESTS_CA_BUNDLE% diff --git a/tests/axivion/scripts/start_local_dashserver.bat b/tests/axivion/scripts/start_local_dashserver.bat deleted file mode 100644 index 9a7a0605..00000000 --- a/tests/axivion/scripts/start_local_dashserver.bat +++ /dev/null @@ -1,40 +0,0 @@ -@REM Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -@REM All rights reserved. -@REM -@REM SPDX-License-Identifier: BSD-3-Clause -@REM -@REM Redistribution and use in source and binary forms, with or without -@REM modification, are permitted provided that the following conditions are met: -@REM -@REM 1. Redistributions of source code must retain the above copyright notice, this -@REM list of conditions and the following disclaimer. -@REM -@REM 2. Redistributions in binary form must reproduce the above copyright notice, -@REM this list of conditions and the following disclaimer in the documentation -@REM and/or other materials provided with the distribution. -@REM -@REM 3. Neither the name of the copyright holder nor the names of its -@REM contributors may be used to endorse or promote products derived from -@REM this software without specific prior written permission. -@REM -@REM THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -@REM AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -@REM IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -@REM DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -@REM FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -@REM DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -@REM SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -@REM CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -@REM OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -@REM OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -@REM -@REM We kindly request you to use one or more of the following phrases to refer to -@REM foxBMS in your hardware, software, documentation or advertising materials: -@REM -@REM - "This product uses parts of foxBMS®" -@REM - "This product includes parts of foxBMS®" -@REM - "This product is derived from foxBMS®" - -@SETLOCAL EnableExtensions EnableDelayedExpansion - -dashserver start --local --noauth --install_file=%USERPROFILE%\.bauhaus\localbuild\projects\foxbms-2.db diff --git a/tests/axivion/scripts/wrapper_make_race_pdfs.bat b/tests/axivion/scripts/wrapper_make_race_pdfs.bat deleted file mode 100644 index c8f6b7e4..00000000 --- a/tests/axivion/scripts/wrapper_make_race_pdfs.bat +++ /dev/null @@ -1,42 +0,0 @@ -@REM Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -@REM All rights reserved. -@REM -@REM SPDX-License-Identifier: BSD-3-Clause -@REM -@REM Redistribution and use in source and binary forms, with or without -@REM modification, are permitted provided that the following conditions are met: -@REM -@REM 1. Redistributions of source code must retain the above copyright notice, this -@REM list of conditions and the following disclaimer. -@REM -@REM 2. Redistributions in binary form must reproduce the above copyright notice, -@REM this list of conditions and the following disclaimer in the documentation -@REM and/or other materials provided with the distribution. -@REM -@REM 3. Neither the name of the copyright holder nor the names of its -@REM contributors may be used to endorse or promote products derived from -@REM this software without specific prior written permission. -@REM -@REM THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -@REM AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -@REM IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -@REM DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -@REM FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -@REM DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -@REM SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -@REM CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -@REM OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -@REM OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -@REM -@REM We kindly request you to use one or more of the following phrases to refer to -@REM foxBMS in your hardware, software, documentation or advertising materials: -@REM -@REM - "This product uses parts of foxBMS®" -@REM - "This product includes parts of foxBMS®" -@REM - "This product is derived from foxBMS®" - -@SETLOCAL EnableExtensions EnableDelayedExpansion - -@SET BAUHAUS_CONFIG=%~dp0\..\ -@SET PATH=%PATH%;C:\Bauhaus\7.5.0\doc\html\_downloads\87991abe35fa881bf14ce6d55f075d2d -@call make_race_pdfs.bat %USERPROFILE%\.bauhaus\localbuild\projects\foxbms-2.ir %USERPROFILE%\.bauhaus\localbuild\projects\foxbms-2.rfg diff --git a/tests/axivion/violations/check_violations.py b/tests/axivion/violations/check_violations.py new file mode 100755 index 00000000..6ec2158e --- /dev/null +++ b/tests/axivion/violations/check_violations.py @@ -0,0 +1,275 @@ +#!/usr/bin/env python3 +# +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# All rights reserved. +# +# SPDX-License-Identifier: BSD-3-Clause +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# We kindly request you to use one or more of the following phrases to refer to +# foxBMS in your hardware, software, documentation or advertising materials: +# +# - "This product uses parts of foxBMS®" +# - "This product includes parts of foxBMS®" +# - "This product is derived from foxBMS®" + +"""Script that crates a custom reporting based on the Axivion analysis. +1. It checks, that certain types of already 'eliminated' violations in the + entire codebase are not re-introduced. +2. It checks, that files that are violation free, stay violation free. +""" + +import argparse +import json +import logging +import sys +import os +from pathlib import Path +from dataclasses import dataclass +import subprocess +from typing import List, Tuple + + +@dataclass +class Analysis: + """Stores the analysis report path and the report itself""" + + file: Path + analysis: dict + + +def parse_config_file(config_file: Path) -> List[str]: + """Parses the line separated configuration files (line comments are enabled + by lines starting with '#')""" + config_txt = config_file.read_text(encoding="utf-8") + config = [] + for line in config_txt.splitlines(): + if not line or line.lstrip().startswith("#"): + continue + config.append(line.strip()) + return sorted(config) + + +def get_location(violation: dict) -> Tuple[str, int, int]: + """Returns the location of a violation""" + file_path = violation.get("path", "") + if not file_path: + file_path = violation.get("leftPath", "") + if not file_path: + file_path = "." + line = violation.get("line", "") or violation.get("leftLine", 0) + column = violation.get("column", 1) + return (file_path, line, column) + + +def check_rule_violations(config_file: Path, report: Analysis) -> int: + """Checks that certain violations are not present in the codebase.""" + err = 0 + forbidden_rules = parse_config_file(config_file) + logging.info("Rules that shall be followed:\n%s", os.linesep.join(forbidden_rules)) + for violation in report.analysis: + error_number = violation["errorNumber"] + file_path, line, column = get_location(violation) + logging.debug("Checking violation '%s' for file '%s'.", error_number, file_path) + if error_number in forbidden_rules: + msg = ( + f"Found forbidden violation {error_number} in " + f"{file_path}:{line}:{column}." + ) + if suppressed := violation["suppressed"]: + justification = violation["justification"] + msg += f" (justification: {justification}, suppressed: {suppressed})" + logging.debug(msg) + else: + logging.critical(msg) + err += 1 + return err + + +def check_violation_free_files_is_up_to_date(config_file: Path) -> int: + """Check that the files list is up-to-date""" + err = 0 + config_txt = config_file.read_text(encoding="utf-8") + config = [] + for line in config_txt.splitlines(): + if not line: + continue + if line.lstrip().startswith("#src/"): + pass + elif line.lstrip().startswith("#"): + continue + config.append(line.strip().lstrip("#")) + expected_files = sorted(config) + cmd = ["git", "rev-parse", "--show-toplevel"] + cwd = Path(__file__).parent + root = "" + with subprocess.Popen(cmd, stdout=subprocess.PIPE, cwd=cwd) as p: + root = p.communicate()[0].decode("utf-8").strip() + if not root: + sys.exit("Could not determine the repository root.") + cmd = ["git", "ls-files", "src/app/*.c", "src/app/*.h"] + with subprocess.Popen(cmd, stdout=subprocess.PIPE, cwd=root) as p: + stdout: bytes = p.communicate()[0] + files = sorted(stdout.decode("utf-8").splitlines()) + if not expected_files == files: + logging.error( + "File '%s' is not up-to-date:\n%s", + config_file, + set(expected_files) - set(files), + ) + err = 1 + else: + logging.debug("Expected files match actual files.") + return err + + +def check_file_violations(config_file: Path, report: Analysis) -> int: + """Checks that files listed as violation free, do not introduce violations.""" + err = 0 + files_with_no_violations = parse_config_file(config_file) + logging.info( + "Files that are required to be violation free:\n%s", + os.linesep.join(files_with_no_violations), + ) + for violation in report.analysis: + # if a violation is suppressed and justified, we can skip this violation + if violation["suppressed"] and violation["justification"]: + continue + file_path, line, column = get_location(violation) + if file_path in files_with_no_violations: + msg = ( + f"'{file_path}' is listed as violation free, but introduces " + f"'{violation['errorNumber']}' at '{file_path}:{line}:{column}'." + ) + logging.critical(msg) + err += 1 + return err + + +def main(): + """This script searches based on a json report of Axivion analysis for + - violations that are not allowed anywhere in the code base + - files that completely free of violations + in order to prevent a regression. + """ + parser = argparse.ArgumentParser( + description="""This script searches in the json report of Axivion analysis for + - violations that are not allowed anywhere in the code base + - files that completely free of violations\nin order to prevent a regression.""", + formatter_class=argparse.RawTextHelpFormatter, + ) + parser.add_argument( + "-v", + "--verbosity", + dest="verbosity", + action="count", + default=0, + help="Set verbosity level", + ) + parser.add_argument( + "-r", + "--forbidden-rule-violations", + dest="forbidden_rule_violations", + action="store", + type=Path, + help="Line separated file specifying a list of forbidden rules", + ) + parser.add_argument( + "-f", + "--violation-free-files", + dest="violation_free_files", + action="store", + type=Path, + help="Line separated file specifying a list of violation free files", + ) + parser.add_argument( + "report", + action="store", + default=None, + nargs="+", + type=Path, + help="Axivion report file", + ) + args = parser.parse_args() + + if args.verbosity == 1: + logging.basicConfig(level=logging.INFO) + elif args.verbosity > 1: + logging.basicConfig(level=logging.DEBUG) + else: + logging.basicConfig(level=logging.ERROR) + + for k, v in args.__dict__.items(): + logging.debug("%s: %s", k, v) + + valid = True + if not args.forbidden_rule_violations and not args.violation_free_files: + parser.print_help(sys.stderr) + sys.exit( + "\nYou need to specify --forbidden-rule-violations or --violation-free-files." + ) + # if provided, check if valid + if args.forbidden_rule_violations and not args.forbidden_rule_violations.is_file(): + valid = False + logging.error( + "forbidden-rule-violations: File '%s' does not exist.", + args.forbidden_rule_violations, + ) + # if provided, check if valid + if args.violation_free_files and not args.violation_free_files.is_file(): + valid = False + logging.error( + "violation-free-files: File '%s' does not exist.", + args.violation_free_files, + ) + for report in args.report: + if not report.is_file(): + valid = False + logging.error("report: File '%s' does not exist.", report) + if not valid: + sys.exit("Invalid script arguments.") + + reports = [ + Analysis(i, json.loads(i.read_text(encoding="utf-8"))) for i in args.report + ] + logging.info( + "Successfully loaded JSON report files:\n%s", + os.linesep.join(str(i) for i in args.report), + ) + + err = 0 + for report in reports: + if args.forbidden_rule_violations: + err += check_rule_violations(args.forbidden_rule_violations, report) + if args.violation_free_files: + err += check_violation_free_files_is_up_to_date(args.violation_free_files) + err += check_file_violations(args.violation_free_files, report) + sys.exit(err) + + +if __name__ == "__main__": + main() diff --git a/tests/axivion/forbidden-violations/forbidden-violations.txt b/tests/axivion/violations/forbidden-violations.txt similarity index 100% rename from tests/axivion/forbidden-violations/forbidden-violations.txt rename to tests/axivion/violations/forbidden-violations.txt diff --git a/tests/axivion/violations/violation-free-files.txt b/tests/axivion/violations/violation-free-files.txt new file mode 100644 index 00000000..c816d309 --- /dev/null +++ b/tests/axivion/violations/violation-free-files.txt @@ -0,0 +1,372 @@ +# Add file paths (relative to the repository root) that are violation free + +#src/app/application/algorithm/algorithm.c +#src/app/application/algorithm/algorithm.h +#src/app/application/algorithm/config/algorithm_cfg.c +#src/app/application/algorithm/config/algorithm_cfg.h +#src/app/application/algorithm/moving_average/moving_average.c +#src/app/application/algorithm/moving_average/moving_average.h +#src/app/application/algorithm/state_estimation/soc/counting/soc_counting.c +#src/app/application/algorithm/state_estimation/soc/counting/soc_counting_cfg.h +#src/app/application/algorithm/state_estimation/soc/debug/soc_debug.c +#src/app/application/algorithm/state_estimation/soc/none/soc_none.c +#src/app/application/algorithm/state_estimation/soe/counting/soe_counting.c +#src/app/application/algorithm/state_estimation/soe/counting/soe_counting_cfg.h +#src/app/application/algorithm/state_estimation/soe/debug/soe_debug.c +#src/app/application/algorithm/state_estimation/soe/debug/soe_debug_cfg.h +#src/app/application/algorithm/state_estimation/soe/none/soe_none.c +#src/app/application/algorithm/state_estimation/soe/none/soe_none_cfg.h +#src/app/application/algorithm/state_estimation/sof/trapezoid/sof_trapezoid.c +#src/app/application/algorithm/state_estimation/sof/trapezoid/sof_trapezoid.h +#src/app/application/algorithm/state_estimation/sof/trapezoid/sof_trapezoid_cfg.c +#src/app/application/algorithm/state_estimation/sof/trapezoid/sof_trapezoid_cfg.h +#src/app/application/algorithm/state_estimation/soh/debug/soh_debug.c +#src/app/application/algorithm/state_estimation/soh/none/soh_none.c +#src/app/application/algorithm/state_estimation/state_estimation.c +#src/app/application/algorithm/state_estimation/state_estimation.h +#src/app/application/bal/bal.c +#src/app/application/bal/bal.h +#src/app/application/bal/history/bal_strategy_history.c +#src/app/application/bal/none/bal_strategy_none.c +#src/app/application/bal/voltage/bal_strategy_voltage.c +#src/app/application/bal/voltage/bal_strategy_voltage.h +#src/app/application/bms/bms.c +#src/app/application/bms/bms.h +#src/app/application/config/bal_cfg.c +#src/app/application/config/bal_cfg.h +#src/app/application/config/battery_cell_cfg.c +#src/app/application/config/battery_cell_cfg.h +#src/app/application/config/battery_system_cfg.c +#src/app/application/config/battery_system_cfg.h +#src/app/application/config/bms_cfg.h +#src/app/application/config/plausibility_cfg.h +#src/app/application/config/soa_cfg.c +#src/app/application/config/soa_cfg.h +#src/app/application/plausibility/plausibility.c +#src/app/application/plausibility/plausibility.h +#src/app/application/redundancy/redundancy.c +#src/app/application/redundancy/redundancy.h +#src/app/application/soa/soa.c +#src/app/application/soa/soa.h +#src/app/driver/adc/adc.c +#src/app/driver/adc/adc.h +#src/app/driver/afe/adi/ades1830/adi_ades1830_balancing.c +#src/app/driver/afe/adi/ades1830/adi_ades1830_defs.h +#src/app/driver/afe/adi/ades1830/adi_ades1830_gpio_voltages.c +#src/app/driver/afe/adi/ades1830/config/adi_ades1830_cfg.c +#src/app/driver/afe/adi/common/ades183x/adi_ades183x.c +#src/app/driver/afe/adi/common/ades183x/adi_ades183x.h +#src/app/driver/afe/adi/common/ades183x/adi_ades183x_balancing.h +#src/app/driver/afe/adi/common/ades183x/adi_ades183x_buffers.c +#src/app/driver/afe/adi/common/ades183x/adi_ades183x_buffers.h +#src/app/driver/afe/adi/common/ades183x/adi_ades183x_commands.c +#src/app/driver/afe/adi/common/ades183x/adi_ades183x_commands.h +#src/app/driver/afe/adi/common/ades183x/adi_ades183x_commands_voltages.c +#src/app/driver/afe/adi/common/ades183x/adi_ades183x_commands_voltages.h +#src/app/driver/afe/adi/common/ades183x/adi_ades183x_defs.h +#src/app/driver/afe/adi/common/ades183x/adi_ades183x_diagnostic.h +#src/app/driver/afe/adi/common/ades183x/adi_ades183x_diagnostic_w.c +#src/app/driver/afe/adi/common/ades183x/adi_ades183x_gpio_voltages.h +#src/app/driver/afe/adi/common/ades183x/adi_ades183x_helpers.c +#src/app/driver/afe/adi/common/ades183x/adi_ades183x_helpers.h +#src/app/driver/afe/adi/common/ades183x/adi_ades183x_initialization.c +#src/app/driver/afe/adi/common/ades183x/adi_ades183x_initialization.h +#src/app/driver/afe/adi/common/ades183x/adi_ades183x_temperatures.c +#src/app/driver/afe/adi/common/ades183x/adi_ades183x_temperatures.h +#src/app/driver/afe/adi/common/ades183x/adi_ades183x_voltages.c +#src/app/driver/afe/adi/common/ades183x/adi_ades183x_voltages.h +#src/app/driver/afe/adi/common/ades183x/api/adi_ades183x_afe.c +#src/app/driver/afe/adi/common/ades183x/api/adi_ades183x_afe_dma.c +#src/app/driver/afe/adi/common/ades183x/config/adi_ades183x_cfg.c +#src/app/driver/afe/adi/common/ades183x/config/adi_ades183x_cfg.h +#src/app/driver/afe/adi/common/ades183x/pec/adi_ades183x_pec.c +#src/app/driver/afe/adi/common/ades183x/pec/adi_ades183x_pec.h +#src/app/driver/afe/api/afe.h +#src/app/driver/afe/api/afe_dma.h +#src/app/driver/afe/api/afe_plausibility.c +#src/app/driver/afe/api/afe_plausibility.h +#src/app/driver/afe/debug/can/api/debug_can_afe.c +#src/app/driver/afe/debug/can/api/debug_can_afe_dma.c +#src/app/driver/afe/debug/can/debug_can.c +#src/app/driver/afe/debug/can/debug_can.h +#src/app/driver/afe/debug/default/api/debug_default_afe.c +#src/app/driver/afe/debug/default/api/debug_default_afe_dma.c +#src/app/driver/afe/debug/default/debug_default.c +#src/app/driver/afe/debug/default/debug_default.h +#src/app/driver/afe/ltc/6806/config/ltc_6806_cfg.c +#src/app/driver/afe/ltc/6806/config/ltc_6806_cfg.h +#src/app/driver/afe/ltc/6806/ltc_6806.c +#src/app/driver/afe/ltc/6813-1/config/ltc_6813-1_cfg.c +#src/app/driver/afe/ltc/6813-1/config/ltc_6813-1_cfg.h +#src/app/driver/afe/ltc/6813-1/ltc_6813-1.c +#src/app/driver/afe/ltc/api/ltc_afe.c +#src/app/driver/afe/ltc/common/config/ltc_cfg.h +#src/app/driver/afe/ltc/common/ltc.h +#src/app/driver/afe/ltc/common/ltc_afe_dma.c +#src/app/driver/afe/ltc/common/ltc_afe_dma.h +#src/app/driver/afe/ltc/common/ltc_defs.h +#src/app/driver/afe/ltc/common/ltc_pec.c +#src/app/driver/afe/ltc/common/ltc_pec.h +#src/app/driver/afe/maxim/api/mxm_afe.c +#src/app/driver/afe/maxim/common/config/mxm_cfg.c +#src/app/driver/afe/maxim/common/config/mxm_cfg.h +#src/app/driver/afe/maxim/common/mxm_17841b.c +#src/app/driver/afe/maxim/common/mxm_17841b.h +#src/app/driver/afe/maxim/common/mxm_1785x.c +#src/app/driver/afe/maxim/common/mxm_1785x.h +#src/app/driver/afe/maxim/common/mxm_1785x_tools.c +#src/app/driver/afe/maxim/common/mxm_1785x_tools.h +#src/app/driver/afe/maxim/common/mxm_41b_register_map.h +#src/app/driver/afe/maxim/common/mxm_afe_dma.c +#src/app/driver/afe/maxim/common/mxm_basic_defines.h +#src/app/driver/afe/maxim/common/mxm_battery_management.c +#src/app/driver/afe/maxim/common/mxm_battery_management.h +#src/app/driver/afe/maxim/common/mxm_bit_extract.c +#src/app/driver/afe/maxim/common/mxm_bit_extract.h +#src/app/driver/afe/maxim/common/mxm_crc8.c +#src/app/driver/afe/maxim/common/mxm_crc8.h +#src/app/driver/afe/maxim/common/mxm_register_map.h +#src/app/driver/afe/maxim/common/mxm_registry.c +#src/app/driver/afe/maxim/common/mxm_registry.h +#src/app/driver/afe/maxim/max17852/mxm_17852.c +#src/app/driver/afe/nxp/api/nxp_afe.c +#src/app/driver/afe/nxp/api/nxp_afe.h +#src/app/driver/afe/nxp/mc33775a/api/nxp_mc33775a_afe.c +#src/app/driver/afe/nxp/mc33775a/config/nxp_mc33775a_cfg.c +#src/app/driver/afe/nxp/mc33775a/config/nxp_mc33775a_cfg.h +#src/app/driver/afe/nxp/mc33775a/nxp_afe_dma.c +#src/app/driver/afe/nxp/mc33775a/nxp_afe_dma.h +#src/app/driver/afe/nxp/mc33775a/nxp_mc33775a-ll.c +#src/app/driver/afe/nxp/mc33775a/nxp_mc33775a-ll.h +#src/app/driver/afe/nxp/mc33775a/nxp_mc33775a.c +#src/app/driver/afe/nxp/mc33775a/nxp_mc33775a.h +#src/app/driver/afe/nxp/mc33775a/nxp_mc33775a_defs.h +#src/app/driver/afe/nxp/mc33775a/vendor/MC33775A.h +#src/app/driver/afe/nxp/mc33775a/vendor/uc_msg_t.c +#src/app/driver/afe/nxp/mc33775a/vendor/uc_msg_t.h +#src/app/driver/afe/ti/api/ti_afe.c +#src/app/driver/afe/ti/api/ti_afe.h +#src/app/driver/afe/ti/common/api/ti_bq79xxx_afe_dma.c +#src/app/driver/afe/ti/dummy/api/ti_dummy_afe.c +#src/app/driver/afe/ti/dummy/ti_dummy.c +#src/app/driver/afe/ti/dummy/ti_dummy.h +#src/app/driver/can/can.c +#src/app/driver/can/can.h +#src/app/driver/can/cbs/can_helper.c +#src/app/driver/can/cbs/can_helper.h +#src/app/driver/can/cbs/rx/can_cbs_rx.h +#src/app/driver/can/cbs/rx/can_cbs_rx_aerosol-sensor.c +#src/app/driver/can/cbs/rx/can_cbs_rx_bms-state-request.c +#src/app/driver/can/cbs/rx/can_cbs_rx_cell-temperatures.c +#src/app/driver/can/cbs/rx/can_cbs_rx_cell-voltages.c +#src/app/driver/can/cbs/rx/can_cbs_rx_current-sensor.c +#src/app/driver/can/cbs/rx/can_cbs_rx_debug.c +#src/app/driver/can/cbs/rx/can_cbs_rx_imd-info.c +#src/app/driver/can/cbs/rx/can_cbs_rx_imd-info.h +#src/app/driver/can/cbs/rx/can_cbs_rx_imd-response.c +#src/app/driver/can/cbs/rx/can_cbs_rx_imd-response.h +#src/app/driver/can/cbs/tx-async/can_cbs_tx_crash-dump.c +#src/app/driver/can/cbs/tx-async/can_cbs_tx_crash-dump.h +#src/app/driver/can/cbs/tx-async/can_cbs_tx_debug-build-configuration.c +#src/app/driver/can/cbs/tx-async/can_cbs_tx_debug-build-configuration.h +#src/app/driver/can/cbs/tx-async/can_cbs_tx_debug-response.c +#src/app/driver/can/cbs/tx-async/can_cbs_tx_debug-response.h +#src/app/driver/can/cbs/tx-async/can_cbs_tx_debug-unsupported-multiplexer-values.c +#src/app/driver/can/cbs/tx-async/can_cbs_tx_debug-unsupported-multiplexer-values.h +#src/app/driver/can/cbs/tx-async/can_cbs_tx_imd-request.c +#src/app/driver/can/cbs/tx-async/can_cbs_tx_imd-request.h +#src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_bms-state-details.c +#src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_bms-state.c +#src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_cell-temperatures.c +#src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_cell-voltages.c +#src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_cyclic.h +#src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_pack-limits.c +#src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_pack-minimum-maximum-values.c +#src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_pack-state-estimation.c +#src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_pack-values-p0.c +#src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_pack-values-p1.c +#src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_string-minimum-maximum-values.c +#src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_string-state-estimation.c +#src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_string-state.c +#src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_string-values-p0.c +#src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_string-values-p1.c +#src/app/driver/checksum/checksum.c +#src/app/driver/checksum/checksum.h +#src/app/driver/config/can_cfg.c +#src/app/driver/config/can_cfg.h +#src/app/driver/config/can_cfg_rx-message-definitions.h +#src/app/driver/config/can_cfg_rx.c +#src/app/driver/config/can_cfg_tx-async-message-definitions.h +#src/app/driver/config/can_cfg_tx-cyclic-message-definitions.h +#src/app/driver/config/can_cfg_tx_cyclic.c +#src/app/driver/config/contactor_cfg.c +#src/app/driver/config/contactor_cfg.h +#src/app/driver/config/dma_cfg.c +#src/app/driver/config/dma_cfg.h +#src/app/driver/config/fram_cfg.c +#src/app/driver/config/fram_cfg.h +#src/app/driver/config/interlock_cfg.h +#src/app/driver/config/pex_cfg.c +#src/app/driver/config/pex_cfg.h +#src/app/driver/config/spi_cfg.c +#src/app/driver/config/spi_cfg.h +#src/app/driver/config/sps_cfg.c +#src/app/driver/config/sps_cfg.h +#src/app/driver/config/tsi_plausibility_cfg.h +#src/app/driver/contactor/contactor.c +#src/app/driver/contactor/contactor.h +#src/app/driver/crc/crc.c +#src/app/driver/crc/crc.h +#src/app/driver/dma/dma.c +#src/app/driver/dma/dma.h +#src/app/driver/foxmath/foxmath.c +#src/app/driver/foxmath/foxmath.h +#src/app/driver/foxmath/utils.h +#src/app/driver/fram/fram.c +#src/app/driver/fram/fram.h +#src/app/driver/htsensor/htsensor.c +#src/app/driver/htsensor/htsensor.h +#src/app/driver/i2c/i2c.c +#src/app/driver/i2c/i2c.h +#src/app/driver/imd/bender/ir155/bender_ir155.c +#src/app/driver/imd/bender/ir155/bender_ir155.h +#src/app/driver/imd/bender/ir155/bender_ir155_helper.c +#src/app/driver/imd/bender/ir155/bender_ir155_helper.h +#src/app/driver/imd/bender/ir155/config/bender_ir155_cfg.h +#src/app/driver/imd/bender/iso165c/bender_iso165c.c +#src/app/driver/imd/bender/iso165c/bender_iso165c.h +#src/app/driver/imd/bender/iso165c/config/bender_iso165c_cfg.h +#src/app/driver/imd/imd.c +#src/app/driver/imd/imd.h +#src/app/driver/imd/none/no-imd.c +#src/app/driver/imd/none/no-imd.h +#src/app/driver/interlock/interlock.c +#src/app/driver/interlock/interlock.h +#src/app/driver/io/io.c +#src/app/driver/io/io.h +#src/app/driver/led/led.c +#src/app/driver/led/led.h +#src/app/driver/mcu/mcu.c +#src/app/driver/mcu/mcu.h +#src/app/driver/meas/meas.c +#src/app/driver/meas/meas.h +#src/app/driver/pex/pex.c +#src/app/driver/pex/pex.h +#src/app/driver/pwm/pwm.c +#src/app/driver/pwm/pwm.h +#src/app/driver/rtc/rtc.c +#src/app/driver/rtc/rtc.h +#src/app/driver/sbc/fs8x_driver/sbc_fs8x.c +#src/app/driver/sbc/fs8x_driver/sbc_fs8x.h +#src/app/driver/sbc/fs8x_driver/sbc_fs8x_assert.h +#src/app/driver/sbc/fs8x_driver/sbc_fs8x_common.h +#src/app/driver/sbc/fs8x_driver/sbc_fs8x_communication.c +#src/app/driver/sbc/fs8x_driver/sbc_fs8x_communication.h +#src/app/driver/sbc/fs8x_driver/sbc_fs8x_map.h +#src/app/driver/sbc/nxpfs85xx.c +#src/app/driver/sbc/nxpfs85xx.h +#src/app/driver/sbc/sbc.c +#src/app/driver/sbc/sbc.h +#src/app/driver/spi/spi.c +#src/app/driver/spi/spi.h +#src/app/driver/spi/spi_cfg-helper.h +#src/app/driver/sps/sps.c +#src/app/driver/sps/sps.h +#src/app/driver/sps/sps_types.h +#src/app/driver/ts/api/tsi.h +#src/app/driver/ts/api/tsi_limits.c +#src/app/driver/ts/beta.c +#src/app/driver/ts/beta.h +#src/app/driver/ts/epcos/b57251v5103j060/epcos_b57251v5103j060.c +#src/app/driver/ts/epcos/b57251v5103j060/epcos_b57251v5103j060.h +#src/app/driver/ts/epcos/b57251v5103j060/lookup-table/epcos_b57251v5103j060_lookup-table.c +#src/app/driver/ts/epcos/b57251v5103j060/polynomial/epcos_b57251v5103j060_polynomial.c +#src/app/driver/ts/epcos/b57861s0103f045/epcos_b57861s0103f045.c +#src/app/driver/ts/epcos/b57861s0103f045/epcos_b57861s0103f045.h +#src/app/driver/ts/epcos/b57861s0103f045/lookup-table/epcos_b57861s0103f045_lookup-table.c +#src/app/driver/ts/epcos/b57861s0103f045/polynomial/epcos_b57861s0103f045_polynomial.c +#src/app/driver/ts/fake/none/fake_none.c +#src/app/driver/ts/fake/none/fake_none.h +#src/app/driver/ts/fake/none/lookup-table/fake_none_lookup-table.c +#src/app/driver/ts/fake/none/polynomial/fake_none_polynomial.c +#src/app/driver/ts/murata/ncxxxxh103/lookup-table/murata_ncxxxxh103_lookup-table.c +#src/app/driver/ts/murata/ncxxxxh103/murata_ncxxxxh103.c +#src/app/driver/ts/murata/ncxxxxh103/murata_ncxxxxh103.h +#src/app/driver/ts/murata/ncxxxxh103/polynomial/murata_ncxxxxh103_polynomial.c +#src/app/driver/ts/semitec/103jt/lookup-table/semitec_103jt_lookup-table.c +#src/app/driver/ts/semitec/103jt/semitec_103jt.c +#src/app/driver/ts/semitec/103jt/semitec_103jt.h +#src/app/driver/ts/temperature_sensor_defs.h +#src/app/driver/ts/vishay/ntcalug01a103g/lookup-table/vishay_ntcalug01a103g_lookup-table.c +#src/app/driver/ts/vishay/ntcalug01a103g/polynomial/vishay_ntcalug01a103g_polynomial.c +#src/app/driver/ts/vishay/ntcalug01a103g/vishay_ntcalug01a103g.c +#src/app/driver/ts/vishay/ntcalug01a103g/vishay_ntcalug01a103g.h +#src/app/driver/ts/vishay/ntcle317e4103sba/lookup-table/vishay_ntcle317e4103sba_lookup-table.c +#src/app/driver/ts/vishay/ntcle317e4103sba/vishay_ntcle317e4103sba.c +#src/app/driver/ts/vishay/ntcle317e4103sba/vishay_ntcle317e4103sba.h +#src/app/driver/ts/vishay/ntcle413e2103f102l/lookup-table/vishay_ntcle413e2103f102l_lookup-table.c +#src/app/driver/ts/vishay/ntcle413e2103f102l/vishay_ntcle413e2103f102l.c +#src/app/driver/ts/vishay/ntcle413e2103f102l/vishay_ntcle413e2103f102l.h +#src/app/engine/config/database_cfg.c +#src/app/engine/config/database_cfg.h +#src/app/engine/config/diag_cfg.c +#src/app/engine/config/diag_cfg.h +#src/app/engine/config/sys_cfg.c +#src/app/engine/config/sys_cfg.h +#src/app/engine/config/sys_mon_cfg.c +#src/app/engine/config/sys_mon_cfg.h +#src/app/engine/database/database.c +#src/app/engine/database/database.h +#src/app/engine/database/database_helper.c +#src/app/engine/database/database_helper.h +#src/app/engine/diag/cbs/diag_cbs.h +#src/app/engine/diag/cbs/diag_cbs_aerosol-sensor.c +#src/app/engine/diag/cbs/diag_cbs_afe.c +#src/app/engine/diag/cbs/diag_cbs_bms.c +#src/app/engine/diag/cbs/diag_cbs_can.c +#src/app/engine/diag/cbs/diag_cbs_contactor.c +#src/app/engine/diag/cbs/diag_cbs_current-sensor.c +#src/app/engine/diag/cbs/diag_cbs_current.c +#src/app/engine/diag/cbs/diag_cbs_deep-discharge.c +#src/app/engine/diag/cbs/diag_cbs_dummy.c +#src/app/engine/diag/cbs/diag_cbs_fram.c +#src/app/engine/diag/cbs/diag_cbs_i2c.c +#src/app/engine/diag/cbs/diag_cbs_insulation.c +#src/app/engine/diag/cbs/diag_cbs_interlock.c +#src/app/engine/diag/cbs/diag_cbs_plausibility.c +#src/app/engine/diag/cbs/diag_cbs_power-measurement.c +#src/app/engine/diag/cbs/diag_cbs_rtc.c +#src/app/engine/diag/cbs/diag_cbs_sbc.c +#src/app/engine/diag/cbs/diag_cbs_sys-mon.c +#src/app/engine/diag/cbs/diag_cbs_temperature.c +#src/app/engine/diag/cbs/diag_cbs_voltage.c +#src/app/engine/diag/diag.c +#src/app/engine/diag/diag.h +#src/app/engine/hw_info/master_info.c +#src/app/engine/hw_info/master_info.h +#src/app/engine/sys/reset.c +#src/app/engine/sys/reset.h +#src/app/engine/sys/sys.c +#src/app/engine/sys/sys.h +#src/app/engine/sys_mon/sys_mon.c +#src/app/engine/sys_mon/sys_mon.h +#src/app/main/fassert.c +#src/app/main/fstartup.c +#src/app/main/include/config/version_cfg.h +#src/app/main/include/fassert.h +#src/app/main/include/fstartup.h +#src/app/main/include/fstd_types.h +#src/app/main/include/fsystem.h +#src/app/main/include/general.h +#src/app/main/include/infinite-loop-helper.h +src/app/main/include/main.h +#src/app/main/main.c +#src/app/task/config/ftask_cfg.c +#src/app/task/config/ftask_cfg.h +#src/app/task/ftask/freertos/ftask_freertos.c +#src/app/task/ftask/ftask.c +#src/app/task/ftask/ftask.h +#src/app/task/os/freertos/os_freertos.c +#src/app/task/os/freertos/os_freertos_config-validation.h +#src/app/task/os/os.c +#src/app/task/os/os.h diff --git a/tests/c-std/c-std-test-inline-helper.h b/tests/c-std/c-std-test-inline-helper.h index 48350452..899e0bd4 100644 --- a/tests/c-std/c-std-test-inline-helper.h +++ b/tests/c-std/c-std-test-inline-helper.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,12 +43,13 @@ * @file c-std-test-inline-helper.h * @author foxBMS Team * @date 2022-03-16 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup TESTS * @prefix TEST * * @brief Helper file to test assert macro + * @details TODO */ #ifndef FOXBMS__C_STD_TEST_INLINE_HELPER_H_ diff --git a/tests/c-std/c-std-test.c b/tests/c-std/c-std-test.c index b365e9c3..ca77fa41 100644 --- a/tests/c-std/c-std-test.c +++ b/tests/c-std/c-std-test.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,12 +43,13 @@ * @file c-std-test.c * @author foxBMS Team * @date 2022-03-16 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup TESTS * @prefix TEST * * @brief Dummy file to test assert macro + * @details TODO */ /*========== Includes =======================================================*/ diff --git a/tests/c-std/c-std-test.json b/tests/c-std/c-std-test.json index 97df85cc..87479149 100644 --- a/tests/c-std/c-std-test.json +++ b/tests/c-std/c-std-test.json @@ -1,16 +1,16 @@ { - "c89": [ - "#warning \"Ignoring static asserts in C89/C90 mode (FAS_STATIC_ASSERT).\"" - ], - "c90": [ - "#warning \"Ignoring static asserts in C89/C90 mode (FAS_STATIC_ASSERT).\"" - ], - "iso9899:199409": [ - "#warning \"Ignoring static asserts in C94 mode (FAS_STATIC_ASSERT).\"" - ], - "c99": [ - "#warning \"Ignoring static asserts in C99 mode (FAS_STATIC_ASSERT).\"" - ], - "c11": [], - "c17": [] + "c11": [], + "c17": [], + "c89": [ + "#warning \"Ignoring static asserts in C89/C90 mode (FAS_STATIC_ASSERT).\"" + ], + "c90": [ + "#warning \"Ignoring static asserts in C89/C90 mode (FAS_STATIC_ASSERT).\"" + ], + "c99": [ + "#warning \"Ignoring static asserts in C99 mode (FAS_STATIC_ASSERT).\"" + ], + "iso9899:199409": [ + "#warning \"Ignoring static asserts in C94 mode (FAS_STATIC_ASSERT).\"" + ] } diff --git a/tests/c-std/c-std-test.py b/tests/c-std/c-std-test.py old mode 100644 new mode 100755 index 420cd0ac..5971c2c7 --- a/tests/c-std/c-std-test.py +++ b/tests/c-std/c-std-test.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -41,6 +40,7 @@ # pylint: disable=invalid-name """Template for Python scripts""" + import argparse import json import logging @@ -62,7 +62,7 @@ sys.exit("Test can only be run in a git repository.") -def main(): +def main(): # pylint: disable=too-many-locals """This script compiles the c standard test suite and runs the tests""" parser = argparse.ArgumentParser() parser.add_argument( @@ -93,7 +93,7 @@ def main(): standard_specifier = "--std=" standards = ["c89", "c90", "iso9899:199409", "c99", "c11", "c17"] out_specifier = "-o" - + longest_standard_name = max(len(i) for i in standards) outs = {} for i in standards: cmd = [ @@ -117,19 +117,32 @@ def main(): ] outs[i] = err - with open(Path(SCRIPT_DIR / "c-std-test.json"), "r", encoding="utf-8") as f: + logging_msg = "" + for k, v in outs.items(): + ws = " " * (longest_standard_name - len(k) + 1) + if v: + logging_msg += f"{k}{ws}:: {os.linesep.join(v)}\n" + else: + logging_msg += f"{k}{ws}:: None\n" + logging.debug( + "The following warnings occurred during compiling:\n%s", logging_msg.strip() + ) + with open(Path(SCRIPT_DIR / "c-std-test.json"), encoding="utf-8") as f: expected_output = json.load(f) test_errors = 0 for std, warning in outs.items(): expected_warning = expected_output[std] if not warning == expected_warning: - logging.error(f"Warning did not match for {std}.") - logging.error(f"Expected: {warning}") - logging.error(f"Got: {expected_warning}") + logging.error("Warning did not match for %s.", std) + logging.error("Expected: %s", warning) + logging.error("Got: %s", expected_warning) test_errors += 1 else: - logging.debug(f"Got expected warning for {std}.") + if warning: + logging.debug("Got expected result (compiler warning) for %s.", std) + else: + logging.debug("Got expected result (no warning) for %s.", std) sys.exit(test_errors) diff --git a/tests/can/check_ids.py b/tests/can/check_ids.py old mode 100644 new mode 100755 index 5e4395a2..910bac83 --- a/tests/can/check_ids.py +++ b/tests/can/check_ids.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -40,17 +39,18 @@ """Python script to check if all callbacks defined in the .dbc file are implemented in callback functions.""" + import argparse +import dataclasses +import json import logging import os import re import sys -from pathlib import Path -from dataclasses import dataclass from enum import Enum, auto +from pathlib import Path import cantools -import tabulate HAVE_GIT = False try: @@ -69,7 +69,7 @@ def get_git_root(path: str) -> str: """helper function to find the repository root Args: - path (string): path of test_f_guidelines + path (string): path of file in git repository Returns: root (string): root path of the git repository @@ -94,11 +94,18 @@ def get_git_root(path: str) -> str: / DRIVER_CONFIGURATION_FILES / Path("can_cfg_rx-message-definitions.h") ) -TX_MESSAGES = ( +TX_CYCLIC_MESSAGES = ( + ROOT + / SRC_DIR_REL + / DRIVER_CONFIGURATION_FILES + / Path("can_cfg_tx-cyclic-message-definitions.h") +) + +TX_ASYNC_MESSAGES = ( ROOT / SRC_DIR_REL / DRIVER_CONFIGURATION_FILES - / Path("can_cfg_tx-message-definitions.h") + / Path("can_cfg_tx-async-message-definitions.h") ) @@ -109,111 +116,137 @@ class RxTx(Enum): Rx = auto() # pylint: disable=invalid-name -@dataclass -class ExpectedCanMessageDefines: +@dataclasses.dataclass +class ExpectedCanMessageDefines: # pylint: disable=too-many-instance-attributes """container for defines""" - msg_name: str - exp_message_id_macro: str - exp_period_macro: str - exp_phase_macro: str - exp_full_message_macro: str - msg_id: str - direction: RxTx + dbc_name: str + dbc_id: str + dbc_direction: RxTx + dbc_cyclic: bool + exp_id_macro: list[str, str] + exp_id_type_macro: list[str, str] + exp_period_macro: list[str, str] + exp_phase_macro: list[str, str] + exp_endianness_macro: list[str, str] + exp_dlc_macro: list[str, str] + exp_full_msg_macro: list[str, str] -@dataclass +@dataclasses.dataclass class FoundCanMessageDefine: """container for defines""" define_name: str msg_id: str where: str - not_periodic: bool = False + cyclic: bool = True def construct_msg_define(msg) -> ExpectedCanMessageDefines: """Create the base expected define name for the message""" define_name: str = msg.name - if define_name.lower().startswith("foxbms_"): - define_name = define_name[7:] + if define_name.lower().startswith("f_"): + define_name = define_name[2:] basic_define_name = define_name[0].upper() message_macro = basic_define_name + # Split define name for i, char in enumerate(define_name[1:]): if define_name[i].islower() and char.isupper(): # i!!! message_macro = message_macro + "_" elif define_name[i].isnumeric() and char.isupper(): # i!!! message_macro = message_macro + "_" message_macro = message_macro + char.upper() - message_id_macro = message_macro + "_ID" - period_macro = message_macro + "_PERIOD_ms" - phase_macro = message_macro + "_PHASE_ms" - full_message_macro = message_macro + "_MESSAGE" + # fmt: off + exp_id_macro = message_macro + "_ID" + exp_id_type_macro = message_macro + "_ID_TYPE" + exp_period_macro = message_macro + "_PERIOD_ms" + exp_phase_macro = message_macro + "_PHASE_ms" + exp_endianness_macro = message_macro + "_ENDIANNESS" + exp_dlc_macro = message_macro + "_DLC" + exp_full_msg_macro = message_macro + "_MESSAGE" + # fmt: on # once we are here, we know that this regex will match m = FILE_RE_COMPILED.search(msg.comment) # pylint: disable=invalid-name if m.group(3).lower() == "rx": direction = RxTx.Rx pref = "CANRX_" - phase_macro = "Rx has no phase" # receive messages have no phase - message_id_macro = pref + message_id_macro - period_macro = pref + period_macro - full_message_macro = pref + full_message_macro + exp_phase_macro = "Rx - ND" + exp_period_macro = pref + exp_period_macro + exp_full_msg_macro = pref + exp_full_msg_macro elif m.group(3).lower() == "tx": direction = RxTx.Tx pref = "CANTX_" + if msg.cycle_time: - phase_macro = pref + phase_macro - period_macro = pref + period_macro - message_id_macro = pref + message_id_macro - full_message_macro = pref + full_message_macro + exp_phase_macro = pref + exp_phase_macro + exp_period_macro = pref + exp_period_macro + exp_full_msg_macro = pref + exp_full_msg_macro else: - # there will be at least one whitespace in the file, and therefore - # we just search for that and treat that as 'macro' - phase_macro = " " - period_macro = " " - message_id_macro = pref + message_id_macro - full_message_macro = " " + exp_phase_macro = "Tx - async - ND" + exp_period_macro = "Tx - async - ND" + exp_full_msg_macro = "Tx - async - ND" else: sys.exit("Something went wrong.") - logging.debug(f"created define '{message_id_macro}' for '{msg.name}'.") - logging.debug(f"created define '{period_macro}' for '{msg.name}'.") - if phase_macro != "Rx has no phase": - logging.debug(f"created define '{phase_macro}' for '{msg.name}'.") - logging.debug(f"created define '{full_message_macro}' for '{msg.name}'.") + exp_id_macro = pref + exp_id_macro + exp_id_type_macro = pref + exp_id_type_macro + exp_endianness_macro = pref + exp_endianness_macro + exp_dlc_macro = pref + exp_dlc_macro + # now we have all defines we need to search for + + logging.debug("%s:\n", msg.name) + logging.debug(" created define '%s' for '%s'.", exp_id_macro, msg.name) + logging.debug(" created define '%s' for '%s'.", exp_id_type_macro, msg.name) + if not exp_period_macro.endswith("- ND"): + logging.debug(" created define '%s' for '%s'.", exp_period_macro, msg.name) + if not exp_phase_macro.endswith("- ND"): + logging.debug(" created define '%s' for '%s'.", exp_phase_macro, msg.name) + logging.debug(" created define '%s' for '%s'.", exp_endianness_macro, msg.name) + logging.debug(" created define '%s' for '%s'.", exp_dlc_macro, msg.name) + if not exp_full_msg_macro.endswith("- ND"): + logging.debug(" created define '%s' for '%s'.\n", exp_full_msg_macro, msg.name) + cyclic = False + if msg.cycle_time: + cyclic = True return ExpectedCanMessageDefines( msg.name, - message_id_macro, - period_macro, - phase_macro, - full_message_macro, - hex(msg.frame_id), - direction, + hex(msg.frame_id).upper().replace("X", "x"), + direction.name.lower(), + cyclic, + (exp_id_macro, ""), + (exp_id_type_macro, ""), + (exp_period_macro, ""), + (exp_phase_macro, ""), + (exp_endianness_macro, ""), + (exp_dlc_macro, ""), + (exp_full_msg_macro, ""), ) def get_defines_from_file( - file_to_check: Path, selector: str + file_to_check: Path, + selector: str, + cyclic: bool = False, ) -> list[FoundCanMessageDefine]: """Generate a list of specific CAN defines found in a provided file.""" defines = [] - with open(file_to_check, "r", encoding="utf-8") as f: + with open(file_to_check, encoding="utf-8") as f: txt = f.read() for i, line in enumerate(txt.splitlines()): line: str = line.strip() if not line.startswith("#define"): continue - if not selector in line: + if selector not in line: continue line = line.split() found_define = FoundCanMessageDefine( - line[1], line[2][1:-1], f"{file_to_check}:{i-1}" + line[1], line[2][1:-1], f"{file_to_check}:{i+1}" ) if found_define.msg_id.endswith("u"): found_define.msg_id = found_define.msg_id[:-1] - if "check_ids:not-periodic" in line: - found_define.not_periodic = True + found_define.cyclic = cyclic defines.append(found_define) logging.debug(found_define) return defines @@ -223,28 +256,30 @@ def log_found_msgs( selector: str, implemented_defines: list[FoundCanMessageDefine] ) -> None: """Logging helper for found messages""" - header = ["Name", "Define name", "ID"] - table = [] + out_str = "" for i in implemented_defines: - table.append([i.where, i.define_name, i.msg_id]) - table = tabulate.tabulate(table, header, tablefmt="pipe") - logging.info(f"Implemented {selector} defines are:\n{table}\n") + out_str += f"{i.where}: {i.define_name} : {i.msg_id} [{i.cyclic}]\n" + logging.info("Implemented %s defines are:\n%s\n", selector, out_str) def log_found(expected_define_name, where) -> None: """Logging helper for found messages""" - logging.debug(f"-> Found expected: {expected_define_name} @ {where}") + logging.debug("-> Found expected: %s @ %s", expected_define_name, where) def log_not_found(exp: ExpectedCanMessageDefines, i: str, expected_file: str) -> None: """Logging helper for NOT found messages""" logging.error( - f"Did not find {exp.direction.name} implementation of expected macro '{i}' for" - f"'{exp.exp_message_id_macro} ({exp.msg_id})' in '{expected_file}'." + "Did not find expected macro implementation '%s' for '%s' (%s) for in '%s'.", + i, + exp.dbc_name, + exp.dbc_id, + expected_file, ) -def main(): # pylint: disable=too-many-branches +# pylint: disable-next=too-many-branches,too-many-locals,too-many-statements +def main(): """This script checks that the CAN message IDs that are defined in the dbc file are correctly implemented.""" parser = argparse.ArgumentParser() @@ -265,15 +300,20 @@ def main(): # pylint: disable=too-many-branches help="DBC file to be verified.", ) parser.add_argument( - "-t", - "--tx-message-definition-file", - dest="tx_message_definition_file", + "--tx-cyclic-message-definition-file", + dest="tx_cyclic_message_definition_file", + action="store", + default=TX_CYCLIC_MESSAGES, + help="Path to file containing the implementation TX CAN message IDs", + ) + parser.add_argument( + "--tx-async-message-definition-file", + dest="tx_async_message_definition_file", action="store", - default=TX_MESSAGES, + default=TX_ASYNC_MESSAGES, help="Path to file containing the implementation TX CAN message IDs", ) parser.add_argument( - "-r", "--rx-message-definition-file", dest="rx_message_definition_file", action="store", @@ -301,142 +341,254 @@ def main(): # pylint: disable=too-many-branches if not i.comment: errors += 1 logging.error( - f"Could not find any comment for message '{i.name}' ({hex(i.frame_id)})." + "Could not find any comment for message '%s' (%s).", + i.name, + hex(i.frame_id), ) continue logging.info( - f"Found comment for message '{i.name}' ({hex(i.frame_id)}): '{i.comment}'." + "Found comment for message '%s' (%s): '%s'.", + i.name, + hex(i.frame_id), + i.comment, ) m = FILE_RE_COMPILED.search(i.comment) # pylint: disable=invalid-name if not m: errors += 1 logging.error( - "Could not find comment for message " - f"'{i.name}' ({hex(i.frame_id)}) that matches '{FILE_RE}'." + "Could not find comment for message '%s' (%s) that matches '%s'.", + i.name, + hex(i.frame_id), + FILE_RE, ) continue if errors: - return errors - - if not isinstance(args.tx_message_definition_file, Path): - args.tx_message_definition_file = Path(args.tx_message_definition_file) - if not args.tx_message_definition_file.is_file(): - sys.exit(f"'{args.tx_message_definition_file}' is not a valid file path.") + sys.exit(errors) if not isinstance(args.rx_message_definition_file, Path): args.rx_message_definition_file = Path(args.rx_message_definition_file) - if not args.rx_message_definition_file.is_file(): - sys.exit(f"'{args.rx_message_definition_file}' is not a valid file path.") + if not isinstance(args.tx_async_message_definition_file, Path): + args.tx_async_message_definition_file = Path( + args.tx_async_message_definition_file + ) + if not isinstance(args.tx_cyclic_message_definition_file, Path): + args.tx_cyclic_message_definition_file = Path( + args.tx_cyclic_message_definition_file + ) + + for i in ( + args.rx_message_definition_file, + args.tx_async_message_definition_file, + args.tx_cyclic_message_definition_file, + ): + if not i.is_file(): + errors += 1 + sys.exit(f"'{i}' is not a valid file path.") + if errors: + sys.exit(errors) expected_defines = [construct_msg_define(msg) for msg in sorted_messages] - header = [ - "Name", - "Expected message macro", - "Expected period macro", - "Expected phase macro", - "Full message macro", - "ID", - "Direction", - ] - table = [] + dump = {} for i in expected_defines: - table.append( - [ - i.msg_name, - i.exp_message_id_macro, - i.exp_period_macro, - i.exp_phase_macro, - i.exp_full_message_macro, - i.msg_id, - i.direction.name, - ] - ) - table = tabulate.tabulate(table, header, tablefmt="pipe") - logging.info(f"Expected defines are:\n{table}\n") - - all_tx_defines = get_defines_from_file(args.tx_message_definition_file, "CANTX") + dump[i.dbc_name] = dataclasses.asdict(i) + with open("expected-defines.json.log", "w", encoding="utf-8") as f: + f.write(json.dumps(dump, indent=4)) + + all_tx_defines = get_defines_from_file( + args.tx_cyclic_message_definition_file, + selector="CANTX", + cyclic=True, + ) implemented_tx_defines = [ i for i in all_tx_defines if (i.define_name.startswith("CANTX_") and i.define_name.endswith("_ID")) ] + all_tx_defines.extend( + get_defines_from_file( + args.tx_async_message_definition_file, + selector="CANTX", + cyclic=False, + ) + ) + implemented_tx_defines.extend( + [ + i + for i in all_tx_defines + if (i.define_name.startswith("CANTX_") and i.define_name.endswith("_ID")) + ] + ) log_found_msgs("TX", implemented_tx_defines) - all_rx_defines = get_defines_from_file(args.rx_message_definition_file, "CANRX") + all_rx_defines = get_defines_from_file( + args.rx_message_definition_file, "CANRX", cyclic=True + ) implemented_rx_defines = [ i for i in all_rx_defines if (i.define_name.startswith("CANRX_") and i.define_name.endswith("_ID")) ] log_found_msgs("RX", implemented_rx_defines) - errors = len(expected_defines) * 4 + # check that the ID is assigned to the correct macro + all_implemented_defines = implemented_tx_defines + implemented_rx_defines + for message, values in dump.items(): + for i in all_implemented_defines: + if not values["exp_id_macro"][0] == i.define_name: + continue + expected_id = int(values["dbc_id"], 16) + implemented_id = int(i.msg_id, 16) + if implemented_id != expected_id: + sys.exit( + f"The message '{message}' expects the macro " + f"'{values['exp_id_macro'][0]}' to implement the ID " + f"'{hex(expected_id)}', but it implements ID " + f"'{hex(implemented_id)}'." + ) + + # We expect 7 defines in the 'best' case: + # - *_ID + # - *_ID_TYPE + # - *_PERIOD_ms - only if cyclic (tx and rx) + # - *_PHASE_ms - only if cyclic tx + # - *_ENDIANNESS + # - *_DLC + # - *_MESSAGE - only if cyclic /tx and rx) + errors = len(expected_defines) * 7 for exp in expected_defines: - for i in [ - exp.exp_message_id_macro, + for i, _ in [ + exp.exp_id_macro, + exp.exp_id_type_macro, exp.exp_period_macro, exp.exp_phase_macro, - exp.exp_full_message_macro, + exp.exp_endianness_macro, + exp.exp_dlc_macro, + exp.exp_full_msg_macro, ]: - if i == " ": + # all macros that do not need to be defined end marked like that. + if i.endswith("- ND"): errors -= 1 continue + found = False - if exp.direction == RxTx.Rx: + if exp.dbc_direction == "rx": implemented_macros = all_rx_defines expected_file = args.rx_message_definition_file - if i == "Rx has no phase": # rx messages do not have a phase - found = True - errors -= 1 - continue - elif exp.direction == RxTx.Tx: + elif exp.dbc_direction == "tx": implemented_macros = all_tx_defines - expected_file = args.tx_message_definition_file + if exp.dbc_cyclic: + expected_file = args.tx_cyclic_message_definition_file + else: + expected_file = args.tx_async_message_definition_file else: - sys.exit("Something went really wrong...") - logging.debug(f"Searching {i} ({exp.msg_id}) in {expected_file}") + sys.exit("Something went really wrong when searching for macros...") + + logging.debug("Searching %s (%s) in %s", i, exp.dbc_id, expected_file) for macro in implemented_macros: - logging.debug(f" Comparing against {macro.define_name}") + logging.debug(" Comparing against %s", macro.define_name) if macro.define_name == i: - log_found(i, macro.where) + posix_where = Path(macro.where).as_posix() + if i == exp.exp_id_macro[0]: + exp.exp_id_macro = (exp.exp_id_macro[0], posix_where) + elif i == exp.exp_id_type_macro[0]: + exp.exp_id_type_macro = (exp.exp_id_type_macro[0], posix_where) + elif i == exp.exp_period_macro[0]: + exp.exp_period_macro = (exp.exp_period_macro[0], posix_where) + elif i == exp.exp_phase_macro[0]: + exp.exp_phase_macro = (exp.exp_phase_macro[0], posix_where) + elif i == exp.exp_endianness_macro[0]: + exp.exp_endianness_macro = ( + exp.exp_endianness_macro[0], + posix_where, + ) + elif i == exp.exp_dlc_macro[0]: + exp.exp_dlc_macro = (exp.exp_dlc_macro[0], posix_where) + elif i == exp.exp_full_msg_macro[0]: + exp.exp_full_msg_macro = ( + exp.exp_full_msg_macro[0], + posix_where, + ) + log_found(i, posix_where) errors -= 1 found = True break if not found: log_not_found(exp, i, expected_file) + if errors: + sys.exit(errors) - # check if the id, period and phase macro appear twice in the message - # definition file. If so, we can assume that it has been defined once - # and used a second time. - not_periodic_signals = [ - i.define_name for i in all_tx_defines + all_rx_defines if i.not_periodic - ] - for i in [ - exp.exp_message_id_macro, - exp.exp_period_macro, - exp.exp_phase_macro, - ]: - if i in not_periodic_signals: + dump = {} + for i in expected_defines: + dump[i.dbc_name] = dataclasses.asdict(i) + with open("found-defines.json.log", "w", encoding="utf-8") as f: + f.write(json.dumps(dump, indent=4)) + + for i in expected_defines: + last_match = 0 + nr_ = 1 + for j in dataclasses.asdict(i): + attr = getattr(i, j) + if not isinstance(attr, tuple): continue - if exp.direction == RxTx.Rx: - expected_file = args.rx_message_definition_file - if i == "Rx has no phase": # rx messages do not have a phase - continue - elif exp.direction == RxTx.Tx: - expected_file = args.tx_message_definition_file + if not attr[0].startswith(("CANTX_", "CANRX_")): + continue + if attr[0].endswith("_MESSAGE"): + continue + if last_match > 0: + if last_match + nr_ != int(attr[1].rsplit(":", maxsplit=1)[-1]): + logging.error("wrong line for %s", attr) + nr_ += 1 else: - sys.exit("Something went really wrong...") - - with open(expected_file, "r", encoding="utf-8") as f: - txt = f.read() - # some message might start with the same name, therefore checking - # if it occurs two times is not good, but modulo 2 and no remainder - # is! - if not txt.count(i) % 2 == 0 and i != " ": - errors += 1 - logging.error( - f"Expected to find {i} twice: definition and in *_MESSAGE usage.\n" - f"Found it {txt.count(i)} times." - ) + last_match = attr[1].rsplit(":", maxsplit=1) + last_match = last_match[-1] + last_match = int(last_match) + # check if the id, period and phase macro appear twice in the message + # definition file. If so, we can assume that it has been defined once + # and used a second time. + + expected_tx_txt = args.tx_cyclic_message_definition_file.read_text(encoding="utf-8") + expected_rx_txt = args.rx_message_definition_file.read_text(encoding="utf-8") + + end_re = r"\s+}\n" + for i in expected_defines: + if not i.dbc_cyclic and i.dbc_direction == "tx": + continue + start_re = ( + rf"#define\s+{i.exp_full_msg_macro[0]}\s+\\\n" + rf"\s+{{\s+\\\n" + rf"\s+\.id\s+=\s+{i.exp_id_macro[0]},\s+\\\n" + rf"\s+\.idType\s+=\s+{i.exp_id_type_macro[0]},\s+\\\n" + rf"\s+\.dlc\s+=\s+{i.exp_dlc_macro[0]},\s+\\\n" + rf"\s+\.endianness\s+=\s+{i.exp_endianness_macro[0]},\s+\\\n" + rf"\s+}},\s+\\\n" + r"\s+{\s+\\\n" + ) + if i.dbc_direction == "tx": + message_re = ( + start_re + + rf"\s+\.period\s+=\s+{i.exp_period_macro[0]}," + + rf"\s+\.phase\s+=\s+{i.exp_phase_macro[0]}\s+\\\n" + + end_re + ) + expected_txt = expected_tx_txt + elif i.dbc_direction == "rx": + message_re = ( + start_re + rf"\s+\.period\s+=\s+{i.exp_period_macro[0]}\s+\\\n" + end_re + ) + expected_txt = expected_rx_txt + else: + logging.error( + "variable 'message_re' did not get defined for %s. Something went wrong", + i, + ) + errors += 1 + continue + m = re.search(message_re, expected_txt, flags=re.MULTILINE) + if not m: + errors += 1 + logging.error( + "Could not find expected message definition for %s.", + i.exp_full_msg_macro[0], + ) return errors @@ -444,5 +596,5 @@ def main(): # pylint: disable=too-many-branches if __name__ == "__main__": nr_of_errors = main() if nr_of_errors: - logging.error(f"{nr_of_errors} errors found.") + logging.error("%s errors found.", nr_of_errors) sys.exit(nr_of_errors) diff --git a/tests/can/check_implemented.py b/tests/can/check_implemented.py old mode 100644 new mode 100755 index 31674943..29fa7c9f --- a/tests/can/check_implemented.py +++ b/tests/can/check_implemented.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -40,6 +39,7 @@ """Python script to check if all callbacks defined in the .dbc file are implemented in callback functions.""" + import argparse import logging import os @@ -66,7 +66,7 @@ def get_git_root(path: str) -> str: """helper function to find the repository root Args: - path (string): path of test_f_guidelines + path (string): path of file in git repository Returns: root (string): root path of the git repository @@ -90,11 +90,12 @@ def evaluate_implementation(callback_file: Path, function_name: str) -> bool: """Checks whether a function name is found in a source file or not.""" found = False impl = callback_file.read_text() - if function_name in impl: - logging.info(f"Found '{function_name}' in '{callback_file}'.") + search_str = rf"extern\s+(uint32_t|void|STD_RETURN_TYPE_e)\s+{function_name}\(" + if re.search(search_str, impl, flags=re.MULTILINE): + logging.info("Found '%s' in '%s'.", function_name, callback_file) found = True else: - logging.error(f"Did not find '{function_name}' in '{callback_file}'.") + logging.error("Did not find '%s' in '%s'.", function_name, callback_file) return found @@ -151,18 +152,25 @@ def main(): if not i.comment: errors += 1 logging.error( - f"Could not find any comment for message '{i.name}' ({hex(i.frame_id)})." + "Could not find any comment for message '%s' (%s).", + i.name, + hex(i.frame_id), ) continue logging.info( - f"Found comment for message '{i.name}' ({hex(i.frame_id)}): '{i.comment}'." + "Found comment for message '%s' (%s): '%s'.", + i.name, + hex(i.frame_id), + i.comment, ) m = FILE_RE_COMPILED.search(i.comment) # pylint: disable=invalid-name if not m: errors += 1 logging.error( - "Could not find comment for message " - f"'{i.name}' ({hex(i.frame_id)}) that matches '{FILE_RE}'." + "Could not find comment for message '%s' (%s) that matches '%s'.", + i.name, + hex(i.frame_id), + FILE_RE, ) continue # we found a comment should point to the correct implementation file @@ -172,15 +180,17 @@ def main(): except IndexError: errors += 1 logging.error( - f"Could not find implementation file '{m[1]}' for " - f"message '{i.name}'." + "Could not find implementation file '%s' for message '%s'.", + m[1], + i.name, ) continue if not search_file.is_file(): errors += 1 logging.error( - f"Path to implementation file '{search_file}' for " - f"message '{i.name}' is not a file." + "Path to implementation file '%s' for message '%s' is not a file.", + search_file, + i.name, ) continue # now we are sure, that the file that should contain the implementation diff --git a/tests/ccs/ccs1000/ccs1000_cc-options.yaml b/tests/ccs/ccs1000/ccs1000_cc-options.yaml index 1d63abfd..57c2391a 100644 --- a/tests/ccs/ccs1000/ccs1000_cc-options.yaml +++ b/tests/ccs/ccs1000/ccs1000_cc-options.yaml @@ -1,4 +1,4 @@ -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -67,7 +67,7 @@ CFLAGS: - --emit_warnings_as_errors # additional flags that are ONLY applied to foxBMS sources foxbms: - - -Ooff + - -O0 - -DASSERT_LEVEL=0 - --issue_remarks - --strict_ansi diff --git a/tests/ccs/ccs1000/ccs1000_linker_pulls.json b/tests/ccs/ccs1000/ccs1000_linker_pulls.json index b3cf64d3..a2916327 100644 --- a/tests/ccs/ccs1000/ccs1000_linker_pulls.json +++ b/tests/ccs/ccs1000/ccs1000_linker_pulls.json @@ -1,5 +1,5 @@ { - "_c_int00": "src/app/main/fstartup.c.1.obj", - "canMessageNotification": "src/app/driver/libfoxbms-driver.a", - "dmaGroupANotification": "src/app/driver/libfoxbms-driver.a" + "_c_int00": "src/app/main/fstartup.c.1.obj", + "canMessageNotification": "src/app/driver/libfoxbms-driver.a", + "dmaGroupANotification": "src/app/driver/libfoxbms-driver.a" } diff --git a/tests/ccs/ccs1000/ccs1000_paths_win32.txt b/tests/ccs/ccs1000/ccs1000_paths_win32.txt index f5c13260..9e31e6ea 100644 --- a/tests/ccs/ccs1000/ccs1000_paths_win32.txt +++ b/tests/ccs/ccs1000/ccs1000_paths_win32.txt @@ -4,7 +4,9 @@ C:\ti\ccs1000\ccs\utils\bin C:\ti\ccs1000\ccs\utils\cygwin C:\ti\ccs1000\ccs\utils\tiobj2bin C:\ti\Hercules\HALCoGen\v04.07.01 -C:\Program Files\LLVM\13.0.0\bin -C:\Ruby\Ruby272-x64\bin +C:\Ruby\Ruby3.1.3-x64\bin C:\MinGW64\x86_64-8.1.0-release-posix-seh-rt_v6-rev0\mingw64\bin -C:\Bauhaus\7.2.0\bin +C:\Bauhaus\7.5.2\bin +$DOT_DIR$\11.0.0\bin +$DOXYGEN_DIR$\1.11.0 +$GIT_DIR$\bin diff --git a/tests/ccs/ccs1011/ccs1011_cc-options.yaml b/tests/ccs/ccs1011/ccs1011_cc-options.yaml index 6e2507a9..ee26784d 100644 --- a/tests/ccs/ccs1011/ccs1011_cc-options.yaml +++ b/tests/ccs/ccs1011/ccs1011_cc-options.yaml @@ -1,4 +1,4 @@ -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -67,7 +67,7 @@ CFLAGS: - --emit_warnings_as_errors # additional flags that are ONLY applied to foxBMS sources foxbms: - - -Ooff + - -O0 - -DASSERT_LEVEL=0 - --issue_remarks - --strict_ansi diff --git a/tests/ccs/ccs1011/ccs1011_linker_pulls.json b/tests/ccs/ccs1011/ccs1011_linker_pulls.json index b3cf64d3..a2916327 100644 --- a/tests/ccs/ccs1011/ccs1011_linker_pulls.json +++ b/tests/ccs/ccs1011/ccs1011_linker_pulls.json @@ -1,5 +1,5 @@ { - "_c_int00": "src/app/main/fstartup.c.1.obj", - "canMessageNotification": "src/app/driver/libfoxbms-driver.a", - "dmaGroupANotification": "src/app/driver/libfoxbms-driver.a" + "_c_int00": "src/app/main/fstartup.c.1.obj", + "canMessageNotification": "src/app/driver/libfoxbms-driver.a", + "dmaGroupANotification": "src/app/driver/libfoxbms-driver.a" } diff --git a/tests/ccs/ccs1011/ccs1011_paths_win32.txt b/tests/ccs/ccs1011/ccs1011_paths_win32.txt index d644a353..04550feb 100644 --- a/tests/ccs/ccs1011/ccs1011_paths_win32.txt +++ b/tests/ccs/ccs1011/ccs1011_paths_win32.txt @@ -4,7 +4,9 @@ C:\ti\ccs1011\ccs\utils\bin C:\ti\ccs1011\ccs\utils\cygwin C:\ti\ccs1011\ccs\utils\tiobj2bin C:\ti\Hercules\HALCoGen\v04.07.01 -C:\Program Files\LLVM\13.0.0\bin -C:\Ruby\Ruby272-x64\bin +C:\Ruby\Ruby3.1.3-x64\bin C:\MinGW64\x86_64-8.1.0-release-posix-seh-rt_v6-rev0\mingw64\bin -C:\Bauhaus\7.2.0\bin +C:\Bauhaus\7.5.2\bin +$DOT_DIR$\11.0.0\bin +$DOXYGEN_DIR$\1.11.0 +$GIT_DIR$\bin diff --git a/tests/ccs/ccs1020/ccs1020_cc-options.yaml b/tests/ccs/ccs1020/ccs1020_cc-options.yaml index 18effc20..5e159247 100644 --- a/tests/ccs/ccs1020/ccs1020_cc-options.yaml +++ b/tests/ccs/ccs1020/ccs1020_cc-options.yaml @@ -1,4 +1,4 @@ -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -67,7 +67,7 @@ CFLAGS: - --emit_warnings_as_errors # additional flags that are ONLY applied to foxBMS sources foxbms: - - -Ooff + - -O0 - -DASSERT_LEVEL=0 - --issue_remarks - --strict_ansi diff --git a/tests/ccs/ccs1020/ccs1020_linker_pulls.json b/tests/ccs/ccs1020/ccs1020_linker_pulls.json index b3cf64d3..a2916327 100644 --- a/tests/ccs/ccs1020/ccs1020_linker_pulls.json +++ b/tests/ccs/ccs1020/ccs1020_linker_pulls.json @@ -1,5 +1,5 @@ { - "_c_int00": "src/app/main/fstartup.c.1.obj", - "canMessageNotification": "src/app/driver/libfoxbms-driver.a", - "dmaGroupANotification": "src/app/driver/libfoxbms-driver.a" + "_c_int00": "src/app/main/fstartup.c.1.obj", + "canMessageNotification": "src/app/driver/libfoxbms-driver.a", + "dmaGroupANotification": "src/app/driver/libfoxbms-driver.a" } diff --git a/tests/ccs/ccs1020/ccs1020_paths_win32.txt b/tests/ccs/ccs1020/ccs1020_paths_win32.txt index 895ee8da..29ee20a2 100644 --- a/tests/ccs/ccs1020/ccs1020_paths_win32.txt +++ b/tests/ccs/ccs1020/ccs1020_paths_win32.txt @@ -4,7 +4,9 @@ C:\ti\ccs1020\ccs\utils\bin C:\ti\ccs1020\ccs\utils\cygwin C:\ti\ccs1020\ccs\utils\tiobj2bin C:\ti\Hercules\HALCoGen\v04.07.01 -C:\Program Files\LLVM\13.0.0\bin -C:\Ruby\Ruby272-x64\bin +C:\Ruby\Ruby3.1.3-x64\bin C:\MinGW64\x86_64-8.1.0-release-posix-seh-rt_v6-rev0\mingw64\bin -C:\Bauhaus\7.2.0\bin +C:\Bauhaus\7.5.2\bin +$DOT_DIR$\11.0.0\bin +$DOXYGEN_DIR$\1.11.0 +$GIT_DIR$\bin diff --git a/tests/ccs/ccs1030/ccs1030_cc-options.yaml b/tests/ccs/ccs1030/ccs1030_cc-options.yaml index 12707580..47c02c68 100644 --- a/tests/ccs/ccs1030/ccs1030_cc-options.yaml +++ b/tests/ccs/ccs1030/ccs1030_cc-options.yaml @@ -1,4 +1,4 @@ -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -67,7 +67,7 @@ CFLAGS: - --emit_warnings_as_errors # additional flags that are ONLY applied to foxBMS sources foxbms: - - -Ooff + - -O0 - -DASSERT_LEVEL=0 - --issue_remarks - --strict_ansi diff --git a/tests/ccs/ccs1030/ccs1030_linker_pulls.json b/tests/ccs/ccs1030/ccs1030_linker_pulls.json index b3cf64d3..a2916327 100644 --- a/tests/ccs/ccs1030/ccs1030_linker_pulls.json +++ b/tests/ccs/ccs1030/ccs1030_linker_pulls.json @@ -1,5 +1,5 @@ { - "_c_int00": "src/app/main/fstartup.c.1.obj", - "canMessageNotification": "src/app/driver/libfoxbms-driver.a", - "dmaGroupANotification": "src/app/driver/libfoxbms-driver.a" + "_c_int00": "src/app/main/fstartup.c.1.obj", + "canMessageNotification": "src/app/driver/libfoxbms-driver.a", + "dmaGroupANotification": "src/app/driver/libfoxbms-driver.a" } diff --git a/tests/ccs/ccs1030/ccs1030_paths_win32.txt b/tests/ccs/ccs1030/ccs1030_paths_win32.txt index 3773bec9..256d442c 100644 --- a/tests/ccs/ccs1030/ccs1030_paths_win32.txt +++ b/tests/ccs/ccs1030/ccs1030_paths_win32.txt @@ -4,7 +4,9 @@ C:\ti\ccs1030\ccs\utils\bin C:\ti\ccs1030\ccs\utils\cygwin C:\ti\ccs1030\ccs\utils\tiobj2bin C:\ti\Hercules\HALCoGen\v04.07.01 -C:\Program Files\LLVM\13.0.0\bin -C:\Ruby\Ruby272-x64\bin +C:\Ruby\Ruby3.1.3-x64\bin C:\MinGW64\x86_64-8.1.0-release-posix-seh-rt_v6-rev0\mingw64\bin -C:\Bauhaus\7.2.0\bin +C:\Bauhaus\7.5.2\bin +$DOT_DIR$\11.0.0\bin +$DOXYGEN_DIR$\1.11.0 +$GIT_DIR$\bin diff --git a/tests/ccs/ccs1031/ccs1031_cc-options.yaml b/tests/ccs/ccs1031/ccs1031_cc-options.yaml index 12707580..47c02c68 100644 --- a/tests/ccs/ccs1031/ccs1031_cc-options.yaml +++ b/tests/ccs/ccs1031/ccs1031_cc-options.yaml @@ -1,4 +1,4 @@ -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -67,7 +67,7 @@ CFLAGS: - --emit_warnings_as_errors # additional flags that are ONLY applied to foxBMS sources foxbms: - - -Ooff + - -O0 - -DASSERT_LEVEL=0 - --issue_remarks - --strict_ansi diff --git a/tests/ccs/ccs1031/ccs1031_linker_pulls.json b/tests/ccs/ccs1031/ccs1031_linker_pulls.json index b3cf64d3..a2916327 100644 --- a/tests/ccs/ccs1031/ccs1031_linker_pulls.json +++ b/tests/ccs/ccs1031/ccs1031_linker_pulls.json @@ -1,5 +1,5 @@ { - "_c_int00": "src/app/main/fstartup.c.1.obj", - "canMessageNotification": "src/app/driver/libfoxbms-driver.a", - "dmaGroupANotification": "src/app/driver/libfoxbms-driver.a" + "_c_int00": "src/app/main/fstartup.c.1.obj", + "canMessageNotification": "src/app/driver/libfoxbms-driver.a", + "dmaGroupANotification": "src/app/driver/libfoxbms-driver.a" } diff --git a/tests/ccs/ccs1031/ccs1031_paths_win32.txt b/tests/ccs/ccs1031/ccs1031_paths_win32.txt index 130086aa..52e5a8b0 100644 --- a/tests/ccs/ccs1031/ccs1031_paths_win32.txt +++ b/tests/ccs/ccs1031/ccs1031_paths_win32.txt @@ -4,7 +4,9 @@ C:\ti\ccs1031\ccs\utils\bin C:\ti\ccs1031\ccs\utils\cygwin C:\ti\ccs1031\ccs\utils\tiobj2bin C:\ti\Hercules\HALCoGen\v04.07.01 -C:\Program Files\LLVM\13.0.0\bin -C:\Ruby\Ruby272-x64\bin +C:\Ruby\Ruby3.1.3-x64\bin C:\MinGW64\x86_64-8.1.0-release-posix-seh-rt_v6-rev0\mingw64\bin -C:\Bauhaus\7.2.0\bin +C:\Bauhaus\7.5.2\bin +$DOT_DIR$\11.0.0\bin +$DOXYGEN_DIR$\1.11.0 +$GIT_DIR$\bin diff --git a/tests/ccs/ccs1040/ccs1040_cc-options.yaml b/tests/ccs/ccs1040/ccs1040_cc-options.yaml index 73278199..4f618aac 100644 --- a/tests/ccs/ccs1040/ccs1040_cc-options.yaml +++ b/tests/ccs/ccs1040/ccs1040_cc-options.yaml @@ -1,4 +1,4 @@ -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -67,7 +67,7 @@ CFLAGS: - --emit_warnings_as_errors # additional flags that are ONLY applied to foxBMS sources foxbms: - - -Ooff + - -O0 - -DASSERT_LEVEL=0 - --issue_remarks - --strict_ansi diff --git a/tests/ccs/ccs1040/ccs1040_linker_pulls.json b/tests/ccs/ccs1040/ccs1040_linker_pulls.json index b3cf64d3..a2916327 100644 --- a/tests/ccs/ccs1040/ccs1040_linker_pulls.json +++ b/tests/ccs/ccs1040/ccs1040_linker_pulls.json @@ -1,5 +1,5 @@ { - "_c_int00": "src/app/main/fstartup.c.1.obj", - "canMessageNotification": "src/app/driver/libfoxbms-driver.a", - "dmaGroupANotification": "src/app/driver/libfoxbms-driver.a" + "_c_int00": "src/app/main/fstartup.c.1.obj", + "canMessageNotification": "src/app/driver/libfoxbms-driver.a", + "dmaGroupANotification": "src/app/driver/libfoxbms-driver.a" } diff --git a/tests/ccs/ccs1040/ccs1040_paths_win32.txt b/tests/ccs/ccs1040/ccs1040_paths_win32.txt index e634000d..6855298f 100644 --- a/tests/ccs/ccs1040/ccs1040_paths_win32.txt +++ b/tests/ccs/ccs1040/ccs1040_paths_win32.txt @@ -4,7 +4,9 @@ C:\ti\ccs1040\ccs\utils\bin C:\ti\ccs1040\ccs\utils\cygwin C:\ti\ccs1040\ccs\utils\tiobj2bin C:\ti\Hercules\HALCoGen\v04.07.01 -C:\Program Files\LLVM\13.0.0\bin -C:\Ruby\Ruby272-x64\bin +C:\Ruby\Ruby3.1.3-x64\bin C:\MinGW64\x86_64-8.1.0-release-posix-seh-rt_v6-rev0\mingw64\bin -C:\Bauhaus\7.2.0\bin +C:\Bauhaus\7.5.2\bin +$DOT_DIR$\11.0.0\bin +$DOXYGEN_DIR$\1.11.0 +$GIT_DIR$\bin diff --git a/tests/ccs/ccs1100-c99/ccs1100-c99_cc-options.yaml b/tests/ccs/ccs1100-c99/ccs1100-c99_cc-options.yaml index eff972de..b7dd8e27 100644 --- a/tests/ccs/ccs1100-c99/ccs1100-c99_cc-options.yaml +++ b/tests/ccs/ccs1100-c99/ccs1100-c99_cc-options.yaml @@ -1,4 +1,4 @@ -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -67,7 +67,7 @@ CFLAGS: - --emit_warnings_as_errors # additional flags that are ONLY applied to foxBMS sources foxbms: - - -Ooff + - -O0 - -DASSERT_LEVEL=0 - --issue_remarks - --strict_ansi diff --git a/tests/ccs/ccs1100-c99/ccs1100-c99_linker_pulls.json b/tests/ccs/ccs1100-c99/ccs1100-c99_linker_pulls.json index b3cf64d3..a2916327 100644 --- a/tests/ccs/ccs1100-c99/ccs1100-c99_linker_pulls.json +++ b/tests/ccs/ccs1100-c99/ccs1100-c99_linker_pulls.json @@ -1,5 +1,5 @@ { - "_c_int00": "src/app/main/fstartup.c.1.obj", - "canMessageNotification": "src/app/driver/libfoxbms-driver.a", - "dmaGroupANotification": "src/app/driver/libfoxbms-driver.a" + "_c_int00": "src/app/main/fstartup.c.1.obj", + "canMessageNotification": "src/app/driver/libfoxbms-driver.a", + "dmaGroupANotification": "src/app/driver/libfoxbms-driver.a" } diff --git a/tests/ccs/ccs1100-c99/ccs1100-c99_paths_win32.txt b/tests/ccs/ccs1100-c99/ccs1100-c99_paths_win32.txt index 5affa8b4..7e0b280e 100644 --- a/tests/ccs/ccs1100-c99/ccs1100-c99_paths_win32.txt +++ b/tests/ccs/ccs1100-c99/ccs1100-c99_paths_win32.txt @@ -4,7 +4,9 @@ C:\ti\ccs1100\ccs\utils\bin C:\ti\ccs1100\ccs\utils\cygwin C:\ti\ccs1100\ccs\utils\tiobj2bin C:\ti\Hercules\HALCoGen\v04.07.01 -C:\Program Files\LLVM\13.0.0\bin -C:\Ruby\Ruby272-x64\bin +C:\Ruby\Ruby3.1.3-x64\bin C:\MinGW64\x86_64-8.1.0-release-posix-seh-rt_v6-rev0\mingw64\bin -C:\Bauhaus\7.2.0\bin +C:\Bauhaus\7.5.2\bin +$DOT_DIR$\11.0.0\bin +$DOXYGEN_DIR$\1.11.0 +$GIT_DIR$\bin diff --git a/tests/ccs/ccs1100/ccs1100_cc-options.yaml b/tests/ccs/ccs1100/ccs1100_cc-options.yaml index 73278199..4f618aac 100644 --- a/tests/ccs/ccs1100/ccs1100_cc-options.yaml +++ b/tests/ccs/ccs1100/ccs1100_cc-options.yaml @@ -1,4 +1,4 @@ -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -67,7 +67,7 @@ CFLAGS: - --emit_warnings_as_errors # additional flags that are ONLY applied to foxBMS sources foxbms: - - -Ooff + - -O0 - -DASSERT_LEVEL=0 - --issue_remarks - --strict_ansi diff --git a/tests/ccs/ccs1100/ccs1100_linker_pulls.json b/tests/ccs/ccs1100/ccs1100_linker_pulls.json index b3cf64d3..a2916327 100644 --- a/tests/ccs/ccs1100/ccs1100_linker_pulls.json +++ b/tests/ccs/ccs1100/ccs1100_linker_pulls.json @@ -1,5 +1,5 @@ { - "_c_int00": "src/app/main/fstartup.c.1.obj", - "canMessageNotification": "src/app/driver/libfoxbms-driver.a", - "dmaGroupANotification": "src/app/driver/libfoxbms-driver.a" + "_c_int00": "src/app/main/fstartup.c.1.obj", + "canMessageNotification": "src/app/driver/libfoxbms-driver.a", + "dmaGroupANotification": "src/app/driver/libfoxbms-driver.a" } diff --git a/tests/ccs/ccs1100/ccs1100_paths_win32.txt b/tests/ccs/ccs1100/ccs1100_paths_win32.txt index 5affa8b4..7e0b280e 100644 --- a/tests/ccs/ccs1100/ccs1100_paths_win32.txt +++ b/tests/ccs/ccs1100/ccs1100_paths_win32.txt @@ -4,7 +4,9 @@ C:\ti\ccs1100\ccs\utils\bin C:\ti\ccs1100\ccs\utils\cygwin C:\ti\ccs1100\ccs\utils\tiobj2bin C:\ti\Hercules\HALCoGen\v04.07.01 -C:\Program Files\LLVM\13.0.0\bin -C:\Ruby\Ruby272-x64\bin +C:\Ruby\Ruby3.1.3-x64\bin C:\MinGW64\x86_64-8.1.0-release-posix-seh-rt_v6-rev0\mingw64\bin -C:\Bauhaus\7.2.0\bin +C:\Bauhaus\7.5.2\bin +$DOT_DIR$\11.0.0\bin +$DOXYGEN_DIR$\1.11.0 +$GIT_DIR$\bin diff --git a/tests/ccs/ccs1200/ccs1200_cc-options.yaml b/tests/ccs/ccs1200/ccs1200_cc-options.yaml index 71255718..74b753ef 100644 --- a/tests/ccs/ccs1200/ccs1200_cc-options.yaml +++ b/tests/ccs/ccs1200/ccs1200_cc-options.yaml @@ -1,4 +1,4 @@ -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -67,7 +67,7 @@ CFLAGS: - --emit_warnings_as_errors # additional flags that are ONLY applied to foxBMS sources foxbms: - - -Ooff + - -O0 - -DASSERT_LEVEL=0 - --issue_remarks - --strict_ansi diff --git a/tests/ccs/ccs1200/ccs1200_linker_pulls.json b/tests/ccs/ccs1200/ccs1200_linker_pulls.json index b3cf64d3..a2916327 100644 --- a/tests/ccs/ccs1200/ccs1200_linker_pulls.json +++ b/tests/ccs/ccs1200/ccs1200_linker_pulls.json @@ -1,5 +1,5 @@ { - "_c_int00": "src/app/main/fstartup.c.1.obj", - "canMessageNotification": "src/app/driver/libfoxbms-driver.a", - "dmaGroupANotification": "src/app/driver/libfoxbms-driver.a" + "_c_int00": "src/app/main/fstartup.c.1.obj", + "canMessageNotification": "src/app/driver/libfoxbms-driver.a", + "dmaGroupANotification": "src/app/driver/libfoxbms-driver.a" } diff --git a/tests/ccs/ccs1200/ccs1200_paths_win32.txt b/tests/ccs/ccs1200/ccs1200_paths_win32.txt index c1970e61..8521b347 100644 --- a/tests/ccs/ccs1200/ccs1200_paths_win32.txt +++ b/tests/ccs/ccs1200/ccs1200_paths_win32.txt @@ -4,7 +4,9 @@ C:\ti\ccs1200\ccs\utils\bin C:\ti\ccs1200\ccs\utils\cygwin C:\ti\ccs1200\ccs\utils\tiobj2bin C:\ti\Hercules\HALCoGen\v04.07.01 -C:\Program Files\LLVM\13.0.0\bin -C:\Ruby\Ruby272-x64\bin +C:\Ruby\Ruby3.1.3-x64\bin C:\MinGW64\x86_64-8.1.0-release-posix-seh-rt_v6-rev0\mingw64\bin -C:\Bauhaus\7.2.0\bin +C:\Bauhaus\7.5.2\bin +$DOT_DIR$\11.0.0\bin +$DOXYGEN_DIR$\1.11.0 +$GIT_DIR$\bin diff --git a/tests/scripts/gui/test_info_dialog.py b/tests/ccs/ccs_build_helper.py old mode 100644 new mode 100755 similarity index 54% rename from tests/scripts/gui/test_info_dialog.py rename to tests/ccs/ccs_build_helper.py index 13b26c9d..c3f06556 --- a/tests/scripts/gui/test_info_dialog.py +++ b/tests/ccs/ccs_build_helper.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -38,14 +37,14 @@ # - "This product includes parts of foxBMS®" # - "This product is derived from foxBMS®" -"""Implements tests for the foxBMS 2 info dialog. -""" +"""Helper script to configure the CCS variants build""" +import argparse +import logging import os +import shutil import sys -import unittest - -import wx +from pathlib import Path HAVE_GIT = False try: @@ -61,7 +60,7 @@ def get_git_root(path: str) -> str: """helper function to find the repository root Args: - path (string): path of test_f_guidelines + path (string): path of file in git repository Returns: root (string): root path of the git repository @@ -76,43 +75,72 @@ def get_git_root(path: str) -> str: return root -ROOT = get_git_root(os.path.realpath(__file__)) - -sys.path.insert(1, os.path.abspath(os.path.join(ROOT, "tools", "gui"))) -from fgui.misc import info_dialog # pylint:disable=wrong-import-position - - -class TestDialog(unittest.TestCase): - """Testing the info dialog""" - - def setUp(self): - self.app = wx.App() - self.frame = wx.Frame() - self.frame.Show() - - def tearDown(self): - wx.CallAfter(self.app.ExitMainLoop) - self.app.MainLoop() - - def test_dialog(self): - """Tests the info dialog""" - - def click_ok(): - """programmatically click the 'ok' button""" - ok_clicked = wx.CommandEvent(wx.wxEVT_COMMAND_BUTTON_CLICKED, wx.ID_OK) - self.info_diag.ProcessEvent(ok_clicked) - - wx.CallAfter(click_ok) - self.show_dialog() - - def show_dialog(self): - """Shows the dialog""" - - # pylint:disable=attribute-defined-outside-init - self.info_diag = info_dialog.FoxbmsInfoDialog(None) - self.info_diag.ShowModal() - self.info_diag.Destroy() +ROOT = Path(get_git_root(os.path.realpath(__file__))) + + +def main(): + """This script does this and that""" + parser = argparse.ArgumentParser() + parser.add_argument( + "-v", + "--verbosity", + dest="verbosity", + action="count", + default=0, + help="set verbosity level", + ) + parser.add_argument( + "--ccs-version", + dest="ccs_version", + required=True, + choices=[ + "ccs1000", + "ccs1011", + "ccs1020", + "ccs1030", + "ccs1031", + "ccs1040", + "ccs1100", + "ccs1100-c99", + "ccs1200", + ], + help="set the CCS version", + ) + args = parser.parse_args() + + if args.verbosity == 1: + logging.basicConfig(level=logging.INFO) + elif args.verbosity > 1: + logging.basicConfig(level=logging.DEBUG) + else: + logging.basicConfig(level=logging.ERROR) + + logging.debug("Verbosity: %s", args.verbosity) + logging.debug("CCS version: %s", args.ccs_version) + if sys.platform.lower() == "linux": + plat = "linux" + elif sys.platform.lower() == "win32": + plat = "win32" + else: + plat = "" + sys.exit("Unsupported platform.") + logging.debug("Platform: %s", plat) + + srcs = [ + ROOT / f"tests/ccs/{args.ccs_version}/{args.ccs_version}_cc-options.yaml", + ROOT / f"tests/ccs/{args.ccs_version}/{args.ccs_version}_linker_pulls.json", + ROOT / f"tests/ccs/{args.ccs_version}/{args.ccs_version}_remarks.txt", + ROOT / f"tests/ccs/{args.ccs_version}/{args.ccs_version}_paths_{plat}.txt", + ] + dests = [ + ROOT / "conf/cc/cc-options.yaml", + ROOT / "conf/cc/linker_pulls.json", + ROOT / "conf/cc/remarks.txt", + ROOT / f"conf/env/paths_{plat}.txt", + ] + for src, dest in zip(srcs, dests): + shutil.copy(src, dest) if __name__ == "__main__": - unittest.main() + main() diff --git a/tests/cli/__init__.py b/tests/cli/__init__.py new file mode 100755 index 00000000..2271a78a --- /dev/null +++ b/tests/cli/__init__.py @@ -0,0 +1,38 @@ +#!/usr/bin/env python3 +# +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# All rights reserved. +# +# SPDX-License-Identifier: BSD-3-Clause +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# We kindly request you to use one or more of the following phrases to refer to +# foxBMS in your hardware, software, documentation or advertising materials: +# +# - "This product uses parts of foxBMS®" +# - "This product includes parts of foxBMS®" +# - "This product is derived from foxBMS®" diff --git a/tests/cli/cmd_axivion/__init__.py b/tests/cli/cmd_axivion/__init__.py new file mode 100755 index 00000000..2271a78a --- /dev/null +++ b/tests/cli/cmd_axivion/__init__.py @@ -0,0 +1,38 @@ +#!/usr/bin/env python3 +# +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# All rights reserved. +# +# SPDX-License-Identifier: BSD-3-Clause +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# We kindly request you to use one or more of the following phrases to refer to +# foxBMS in your hardware, software, documentation or advertising materials: +# +# - "This product uses parts of foxBMS®" +# - "This product includes parts of foxBMS®" +# - "This product is derived from foxBMS®" diff --git a/tests/cli/cmd_axivion/test_axivion_impl.py b/tests/cli/cmd_axivion/test_axivion_impl.py new file mode 100755 index 00000000..6fdd6714 --- /dev/null +++ b/tests/cli/cmd_axivion/test_axivion_impl.py @@ -0,0 +1,101 @@ +#!/usr/bin/env python3 +# +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# All rights reserved. +# +# SPDX-License-Identifier: BSD-3-Clause +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# We kindly request you to use one or more of the following phrases to refer to +# foxBMS in your hardware, software, documentation or advertising materials: +# +# - "This product uses parts of foxBMS®" +# - "This product includes parts of foxBMS®" +# - "This product is derived from foxBMS®" + +"""Testing the 'axivion' command""" + +import sys +import unittest +from pathlib import Path +from unittest.mock import patch + +sys.path.insert(0, str(Path(__file__).parent.parent.parent.parent)) +# pylint: disable=wrong-import-position +from cli.cmd_axivion import axivion_impl +from cli.helpers.spr import SubprocessResult +# pylint: enable=wrong-import-position + +# Tests possible - +# For export_arch +# 1. gravis not found +# 2. Check for verbosity, gravis only supports -v ? Should I do this test? +# 3. More possible test - default or alternate path found + +# check_architecture + + +class TestArchitecture(unittest.TestCase): + """Test architecture""" + + @patch("cli.cmd_axivion.axivion_impl.shutil.which", return_value=None) + def test_gravis_not_found(self, mock_which): # pylint:disable=unused-argument + """Test for no gravis path found""" + # Call the function under test + result = axivion_impl.export_architecture(verbosity=0) + # Check if the result is as expected + self.assertEqual(result, SubprocessResult(1)) + + @patch("cli.cmd_axivion.axivion_impl.shutil.which") + @patch("cli.cmd_axivion.axivion_impl.run_process") + def test_gravis_found_default_path_with_verbosity( + self, mock_run_process, mock_which + ): + """Simple check""" + mock_which.return_value = "/path/to/gravis" + mock_run_process.return_value = SubprocessResult(0) + + result = axivion_impl.export_architecture(verbosity=1) + + # Check if shutil.which was called exactly once with argument 'gravis' + mock_which.assert_called_once_with("gravis") + mock_run_process.assert_called_once_with( + cmd=[ + "/path/to/gravis", + "--script", + str(axivion_impl.GRAVIS_EXPORT_SCRIPT), + "-v", + ], + cwd=axivion_impl.PROJECT_ROOT, + stderr=None, + stdout=None, + ) + self.assertEqual(result, SubprocessResult(0)) + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/cli/cmd_ci/__init__.py b/tests/cli/cmd_ci/__init__.py new file mode 100755 index 00000000..2271a78a --- /dev/null +++ b/tests/cli/cmd_ci/__init__.py @@ -0,0 +1,38 @@ +#!/usr/bin/env python3 +# +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# All rights reserved. +# +# SPDX-License-Identifier: BSD-3-Clause +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# We kindly request you to use one or more of the following phrases to refer to +# foxBMS in your hardware, software, documentation or advertising materials: +# +# - "This product uses parts of foxBMS®" +# - "This product includes parts of foxBMS®" +# - "This product is derived from foxBMS®" diff --git a/tests/env/packages/env_test_wxpython.py b/tests/cli/cmd_ci/test_create_readme.py old mode 100644 new mode 100755 similarity index 54% rename from tests/env/packages/env_test_wxpython.py rename to tests/cli/cmd_ci/test_create_readme.py index 7581cebe..a4bdd490 --- a/tests/env/packages/env_test_wxpython.py +++ b/tests/cli/cmd_ci/test_create_readme.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -38,51 +37,43 @@ # - "This product includes parts of foxBMS®" # - "This product is derived from foxBMS®" -"""Testing 'wxpython' package""" +"""Testing the SubprocessResult implementation""" -import argparse -import logging -import os import sys +import unittest +from pathlib import Path +from unittest import mock -# package to test -import wx +sys.path.insert(0, str(Path(__file__).parent.parent.parent.parent)) +# pylint: disable-next=wrong-import-position +from cli.cmd_ci import create_readme -class TestFrame(wx.Frame): # pylint: disable=too-many-ancestors, too-few-public-methods - """dummy frame""" +class TestSpR(unittest.TestCase): + """Test of the main entry point""" - def __init__(self): - super().__init__(parent=None, title="Hello foxBMS") - self.Show() + @mock.patch("cli.cmd_ci.create_readme.CI_CONFIG", Path("does/not/exist")) + def test_create_readme_no_ci_config(self): + """test for not existing '.gitlab-ci.yml'-file""" + ret = create_readme.create_readme() + self.assertEqual(1, ret) + @mock.patch("cli.cmd_ci.create_readme.CI_README", Path("does/not/exist")) + def test_create_readme_no_ci_readme(self): + """test for not existing '.gitlab/README.md'-file""" + ret = create_readme.create_readme() + self.assertEqual(1, ret) -def main(): - """Testing 'wxpython' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() + @mock.patch("cli.cmd_ci.create_readme.CI_CONFIG", Path("fox.bat")) + def test_invalid_ci_config(self): + """'.gitlab-ci.yml'-file is invalid""" + with self.assertRaises(SystemExit) as cm: + create_readme.create_readme() + self.assertIn("fox.bat is not a valid yaml file while s", cm.exception.code) - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - if sys.platform.lower() == "linux" and not os.environ.get("DISPLAY"): - sys.exit(0) - - app = wx.App() # pylint: disable=unused-variable - frame = TestFrame() # pylint: disable=unused-variable - - -if __name__ == "__main__": - main() + @mock.patch("cli.cmd_ci.create_readme.CI_CONFIG", Path(".pre-commit-config.yaml")) + def test_valid_ci_config_but_key_is_missing(self): + """'.gitlab-ci.yml'-file misses the 'stages' key""" + with self.assertRaises(SystemExit) as cm: + create_readme.create_readme() + self.assertEqual(cm.exception.code, "Could not determine stages.") diff --git a/tests/cli/helpers/__init__.py b/tests/cli/helpers/__init__.py new file mode 100755 index 00000000..2271a78a --- /dev/null +++ b/tests/cli/helpers/__init__.py @@ -0,0 +1,38 @@ +#!/usr/bin/env python3 +# +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# All rights reserved. +# +# SPDX-License-Identifier: BSD-3-Clause +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# We kindly request you to use one or more of the following phrases to refer to +# foxBMS in your hardware, software, documentation or advertising materials: +# +# - "This product uses parts of foxBMS®" +# - "This product includes parts of foxBMS®" +# - "This product is derived from foxBMS®" diff --git a/tests/cli/helpers/test_spr.py b/tests/cli/helpers/test_spr.py new file mode 100755 index 00000000..686e1b4d --- /dev/null +++ b/tests/cli/helpers/test_spr.py @@ -0,0 +1,97 @@ +#!/usr/bin/env python3 +# +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# All rights reserved. +# +# SPDX-License-Identifier: BSD-3-Clause +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# We kindly request you to use one or more of the following phrases to refer to +# foxBMS in your hardware, software, documentation or advertising materials: +# +# - "This product uses parts of foxBMS®" +# - "This product includes parts of foxBMS®" +# - "This product is derived from foxBMS®" + +"""Testing the SubprocessResult implementation""" + +import sys +import unittest +from pathlib import Path + +sys.path.insert(0, str(Path(__file__).parent.parent.parent.parent)) +# pylint: disable-next=wrong-import-position +from cli.helpers.spr import SubprocessResult, prepare_subprocess_output, run_process + + +class TestSpR(unittest.TestCase): + """Test of the main entry point""" + + def test_prepare_subprocess_output(self): + """basic prepare_subprocess_output test""" + ret = prepare_subprocess_output(-1, b"foxBMS", b"dummy") + self.assertEqual(-1, ret.returncode) + self.assertEqual("foxBMS", ret.out) + self.assertEqual("dummy", ret.err) + + ret = prepare_subprocess_output(1, b"", b"") + self.assertEqual(1, ret.returncode) + self.assertEqual("", ret.out) + self.assertEqual("", ret.err) + + def test_add_sprs(self): + """test adding of two 'SubprocessResult's""" + ret = prepare_subprocess_output( + -1, b"foxBMS", b"dummy" + ) + prepare_subprocess_output(1, b"1", b"2") + self.assertEqual(2, ret.returncode) + self.assertEqual("foxBMS\nnew:\n1", ret.out) + self.assertEqual("dummy\nnew:\n2", ret.err) + + def test_run_process_no_program(self): + """test running a program, without providing a program""" + ret = run_process([]) + self.assertEqual(1, ret.returncode) + self.assertEqual("", ret.out) + self.assertEqual("No program provided.", ret.err) + + def test_run_process_invalid_program(self): + """test running a program, without providing a valid program""" + cmd = ["asdasdasasd"] + ret = run_process(cmd) + self.assertEqual(1, ret.returncode) + self.assertEqual("", ret.out) + self.assertEqual(f"Program '{cmd[0]}' does not exist.", ret.err) + + def test_spr_str(self): + """Test string-representation of the SubprocessResult class""" + dummy = SubprocessResult(1, "abc", "def") + self.assertEqual("return code: 1\n\nout:abc\n\ndef\n", str(dummy)) + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/cli/test_main.py b/tests/cli/test_main.py new file mode 100755 index 00000000..82cd3cb8 --- /dev/null +++ b/tests/cli/test_main.py @@ -0,0 +1,120 @@ +#!/usr/bin/env python3 +# +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# All rights reserved. +# +# SPDX-License-Identifier: BSD-3-Clause +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# We kindly request you to use one or more of the following phrases to refer to +# foxBMS in your hardware, software, documentation or advertising materials: +# +# - "This product uses parts of foxBMS®" +# - "This product includes parts of foxBMS®" +# - "This product is derived from foxBMS®" + +"""CLI testing""" + +import sys +import unittest +from pathlib import Path + +from click.testing import CliRunner + +sys.path.insert(0, str(Path(__file__).parent.parent.parent)) +# pylint: disable=wrong-import-position +from cli.cli import main +from cli.helpers.misc import PROJECT_ROOT + +# pylint: enable=wrong-import-position + + +class TestFoxCliMain(unittest.TestCase): + """Test of the main entry point""" + + def test_main_no_args(self): + """test main entry point, when no commands are provided""" + runner = CliRunner() + result = runner.invoke(main) + self.assertEqual(0, result.exit_code) + + def test_main_waf(self): + """test main entry point, when 'waf' commands are provided""" + runner = CliRunner() + result = runner.invoke(main, ["waf", "--help"]) + self.assertEqual(0, result.exit_code) + + runner = CliRunner() + result = runner.invoke(main, ["waf", "--cwd", str(PROJECT_ROOT), "--help"]) + self.assertEqual(0, result.exit_code) + + def test_misc_build_crc_code(self): + """build CRC example code""" + runner = CliRunner() + result = runner.invoke(main, ["misc", "build-crc-code"]) + self.assertEqual(0, result.exit_code) + + def test_misc_build_doc_code(self): + """build CRC example code""" + runner = CliRunner() + result = runner.invoke(main, ["misc", "build-doc-code"]) + self.assertEqual(0, result.exit_code) + + def test_install(self): + """check installation message""" + runner = CliRunner() + result = runner.invoke(main, ["install"]) + self.assertEqual(0, result.exit_code) + + def test_install_check(self): + """check installation '--check'-option""" + runner = CliRunner() + result = runner.invoke(main, ["install", "--check"]) + self.assertEqual(0, result.exit_code) + + def test_ci_create_readme(self): + """check CI readme creation""" + runner = CliRunner() + result = runner.invoke(main, ["ci", "create-readme"]) + self.assertEqual(0, result.exit_code) + + def test_ci_check_ci_config(self): + """check CI configuration style""" + runner = CliRunner() + result = runner.invoke(main, ["ci", "check-ci-config"]) + self.assertEqual(0, result.exit_code) + + def test_ci_check_coverage(self): + """check CI coverage checker""" + runner = CliRunner() + runner.invoke(main, ["ci", "check-coverage"]) + # ignore the result (i.e., no assert), as the function will be tested + # anyway + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/dbc/check_parseable.py b/tests/dbc/check_parseable.py old mode 100644 new mode 100755 index 955ee5d8..6da90dd8 --- a/tests/dbc/check_parseable.py +++ b/tests/dbc/check_parseable.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -40,15 +39,15 @@ """Ensure that the CAN definition files (symbol and dbc) are parsable.""" -import sys import logging +import sys from pathlib import Path -import git -from git.exc import InvalidGitRepositoryError + +import cantools import click import colorama -import cantools - +import git +from git.exc import InvalidGitRepositoryError SCRIPT_DIR = Path(__file__).parent.resolve() @@ -71,7 +70,10 @@ def set_logging_level(verbose: int = 0) -> None: logging.basicConfig(level=logging.ERROR) -@click.command(context_settings=dict(help_option_names=["-h", "--help"])) +context_settings = {"help_option_names": ["-h", "--help"]} + + +@click.command(context_settings=context_settings) @click.option("-v", "--verbose", default=0, count=True, help="Verbose information.") @click.option( "-s", @@ -96,13 +98,17 @@ def main(ctx: click.Context, verbose: int, symbol_file: Path, dbc_file: Path) -> """Convert symbol file to dbc file""" colorama.init() set_logging_level(verbose) - logging.debug("Parsing symbol file...") - cantools.database.load_file(str(symbol_file)) - logging.debug("done") + logging.warning( + "Symbol file checking disabled, due to a 'cantools' bug " + "(https://github.com/cantools/cantools/issues/458)" + ) + # logging.debug("Parsing symbol file...") + # cantools.database.load_file(str(symbol_file)) + # logging.debug("done") logging.debug("Parsing dbc file...") cantools.database.load_file(str(dbc_file)) logging.debug("done") - logging.info(f"{symbol_file} and {dbc_file} files are parsable.") + logging.info("%s and %s files are parsable.", symbol_file, dbc_file) ctx.exit(0) diff --git a/tests/dbc/overlapping-signals.py b/tests/dbc/overlapping-signals.py old mode 100644 new mode 100755 index 6e929c79..ce3343c9 --- a/tests/dbc/overlapping-signals.py +++ b/tests/dbc/overlapping-signals.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -44,6 +43,7 @@ import unittest from pathlib import Path + import cantools from cantools.database import load_file diff --git a/tests/env/conda_env_linux.json b/tests/env/conda_env_linux.json deleted file mode 100644 index 03d17c57..00000000 --- a/tests/env/conda_env_linux.json +++ /dev/null @@ -1,2462 +0,0 @@ -[ - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "main", - "channel": "pkgs/main", - "dist_name": "_libgcc_mutex-0.1-main", - "name": "_libgcc_mutex", - "platform": "linux-64", - "version": "0.1" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 17, - "build_string": "1_gnu", - "channel": "pkgs/main", - "dist_name": "_openmp_mutex-4.5-1_gnu", - "name": "_openmp_mutex", - "platform": "linux-64", - "version": "4.5" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "alabaster-0.7.12-pypi_0", - "name": "alabaster", - "platform": "pypi", - "version": "0.7.12" - }, - { - "base_url": "https://conda.anaconda.org/conda-forge", - "build_number": 0, - "build_string": "h516909a_0", - "channel": "conda-forge", - "dist_name": "alsa-lib-1.2.3-h516909a_0", - "name": "alsa-lib", - "platform": "linux-64", - "version": "1.2.3" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "appdirs-1.4.4-pypi_0", - "name": "appdirs", - "platform": "pypi", - "version": "1.4.4" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "argon2-cffi-21.1.0-pypi_0", - "name": "argon2-cffi", - "platform": "pypi", - "version": "21.1.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "argparse-addons-0.7.0-pypi_0", - "name": "argparse-addons", - "platform": "pypi", - "version": "0.7.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "arpeggio-1.10.2-pypi_0", - "name": "arpeggio", - "platform": "pypi", - "version": "1.10.2" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "astroid-2.8.4-pypi_0", - "name": "astroid", - "platform": "pypi", - "version": "2.8.4" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "h28cd5cc_0", - "channel": "pkgs/main", - "dist_name": "atk-1.0-2.36.0-h28cd5cc_0", - "name": "atk-1.0", - "platform": "linux-64", - "version": "2.36.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "attrs-21.2.0-pypi_0", - "name": "attrs", - "platform": "pypi", - "version": "21.2.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "babel-2.9.1-pypi_0", - "name": "babel", - "platform": "pypi", - "version": "2.9.1" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "backcall-0.2.0-pypi_0", - "name": "backcall", - "platform": "pypi", - "version": "0.2.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "beautifulsoup4-4.10.0-pypi_0", - "name": "beautifulsoup4", - "platform": "pypi", - "version": "4.10.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "bitstruct-8.11.1-pypi_0", - "name": "bitstruct", - "platform": "pypi", - "version": "8.11.1" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "black-21.10b0-pypi_0", - "name": "black", - "platform": "pypi", - "version": "21.10b0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "bleach-4.1.0-pypi_0", - "name": "bleach", - "platform": "pypi", - "version": "4.1.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "bokeh-2.4.1-pypi_0", - "name": "bokeh", - "platform": "pypi", - "version": "2.4.1" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "bottle-0.12.19-pypi_0", - "name": "bottle", - "platform": "pypi", - "version": "0.12.19" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 1003, - "build_string": "py39h27cfd23_1003", - "channel": "pkgs/main", - "dist_name": "brotlipy-0.7.0-py39h27cfd23_1003", - "name": "brotlipy", - "platform": "linux-64", - "version": "0.7.0" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 2, - "build_string": "h06a4308_2", - "channel": "pkgs/main", - "dist_name": "ca-certificates-2021.10.26-h06a4308_2", - "name": "ca-certificates", - "platform": "linux-64", - "version": "2021.10.26" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 1, - "build_string": "hf32fb01_1", - "channel": "pkgs/main", - "dist_name": "cairo-1.16.0-hf32fb01_1", - "name": "cairo", - "platform": "linux-64", - "version": "1.16.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "cantools-36.5.0-pypi_0", - "name": "cantools", - "platform": "pypi", - "version": "36.5.0" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "py39h06a4308_0", - "channel": "pkgs/main", - "dist_name": "certifi-2021.10.8-py39h06a4308_0", - "name": "certifi", - "platform": "linux-64", - "version": "2021.10.8" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "cffconvert-2.0.0-pypi_0", - "name": "cffconvert", - "platform": "pypi", - "version": "2.0.0" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "py39h400218f_0", - "channel": "pkgs/main", - "dist_name": "cffi-1.14.6-py39h400218f_0", - "name": "cffi", - "platform": "linux-64", - "version": "1.14.6" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "pyhd3eb1b0_0", - "channel": "pkgs/main", - "dist_name": "charset-normalizer-2.0.4-pyhd3eb1b0_0", - "name": "charset-normalizer", - "platform": "noarch", - "version": "2.0.4" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "click-8.0.3-pypi_0", - "name": "click", - "platform": "pypi", - "version": "8.0.3" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "cloudpickle-2.0.0-pypi_0", - "name": "cloudpickle", - "platform": "pypi", - "version": "2.0.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "colorama-0.4.4-pypi_0", - "name": "colorama", - "platform": "pypi", - "version": "0.4.4" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "coverage-6.1.2-pypi_0", - "name": "coverage", - "platform": "pypi", - "version": "6.1.2" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "crcmod-1.7-pypi_0", - "name": "crcmod", - "platform": "pypi", - "version": "1.7" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "py39hd23ed53_0", - "channel": "pkgs/main", - "dist_name": "cryptography-35.0.0-py39hd23ed53_0", - "name": "cryptography", - "platform": "linux-64", - "version": "35.0.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "cycler-0.11.0-pypi_0", - "name": "cycler", - "platform": "pypi", - "version": "0.11.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "dask-2021.11.1-pypi_0", - "name": "dask", - "platform": "pypi", - "version": "2021.11.1" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "debugpy-1.5.1-pypi_0", - "name": "debugpy", - "platform": "pypi", - "version": "1.5.1" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "decorator-5.1.0-pypi_0", - "name": "decorator", - "platform": "pypi", - "version": "5.1.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "defusedxml-0.7.1-pypi_0", - "name": "defusedxml", - "platform": "pypi", - "version": "0.7.1" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "diskcache-5.2.1-pypi_0", - "name": "diskcache", - "platform": "pypi", - "version": "5.2.1" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "docopt-0.6.2-pypi_0", - "name": "docopt", - "platform": "pypi", - "version": "0.6.2" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "docutils-0.16-pypi_0", - "name": "docutils", - "platform": "pypi", - "version": "0.16" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "entrypoints-0.3-pypi_0", - "name": "entrypoints", - "platform": "pypi", - "version": "0.3" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "et-xmlfile-1.1.0-pypi_0", - "name": "et-xmlfile", - "platform": "pypi", - "version": "1.1.0" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 2, - "build_string": "h2531618_2", - "channel": "pkgs/main", - "dist_name": "expat-2.4.1-h2531618_2", - "name": "expat", - "platform": "linux-64", - "version": "2.4.1" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "filterpy-1.4.5-pypi_0", - "name": "filterpy", - "platform": "pypi", - "version": "1.4.5" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "hd3eb1b0_0", - "channel": "pkgs/main", - "dist_name": "font-ttf-dejavu-sans-mono-2.37-hd3eb1b0_0", - "name": "font-ttf-dejavu-sans-mono", - "platform": "noarch", - "version": "2.37" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "hcb22688_0", - "channel": "pkgs/main", - "dist_name": "font-ttf-inconsolata-2.001-hcb22688_0", - "name": "font-ttf-inconsolata", - "platform": "noarch", - "version": "2.001" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "hd3eb1b0_0", - "channel": "pkgs/main", - "dist_name": "font-ttf-source-code-pro-2.030-hd3eb1b0_0", - "name": "font-ttf-source-code-pro", - "platform": "noarch", - "version": "2.030" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "h8b1ccd4_0", - "channel": "pkgs/main", - "dist_name": "font-ttf-ubuntu-0.83-h8b1ccd4_0", - "name": "font-ttf-ubuntu", - "platform": "noarch", - "version": "0.83" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "h6c09931_0", - "channel": "pkgs/main", - "dist_name": "fontconfig-2.13.1-h6c09931_0", - "name": "fontconfig", - "platform": "linux-64", - "version": "2.13.1" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "h8fa9717_0", - "channel": "pkgs/main", - "dist_name": "fonts-anaconda-1-h8fa9717_0", - "name": "fonts-anaconda", - "platform": "noarch", - "version": "1" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "hd3eb1b0_0", - "channel": "pkgs/main", - "dist_name": "fonts-conda-ecosystem-1-hd3eb1b0_0", - "name": "fonts-conda-ecosystem", - "platform": "noarch", - "version": "1" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "h70c0345_0", - "channel": "pkgs/main", - "dist_name": "freetype-2.11.0-h70c0345_0", - "name": "freetype", - "platform": "linux-64", - "version": "2.11.0" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "h7b6447c_0", - "channel": "pkgs/main", - "dist_name": "fribidi-1.0.10-h7b6447c_0", - "name": "fribidi", - "platform": "linux-64", - "version": "1.0.10" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "fsspec-2021.11.0-pypi_0", - "name": "fsspec", - "platform": "pypi", - "version": "2021.11.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "gcovr-5.0-pypi_0", - "name": "gcovr", - "platform": "pypi", - "version": "5.0" - }, - { - "base_url": "https://conda.anaconda.org/conda-forge", - "build_number": 0, - "build_string": "h04a7f16_0", - "channel": "conda-forge", - "dist_name": "gdk-pixbuf-2.42.6-h04a7f16_0", - "name": "gdk-pixbuf", - "platform": "linux-64", - "version": "2.42.6" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "hf68c758_0", - "channel": "pkgs/main", - "dist_name": "gettext-0.21.0-hf68c758_0", - "name": "gettext", - "platform": "linux-64", - "version": "0.21.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "gitdb-4.0.9-pypi_0", - "name": "gitdb", - "platform": "pypi", - "version": "4.0.9" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "gitpython-3.1.24-pypi_0", - "name": "gitpython", - "platform": "pypi", - "version": "3.1.24" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "h36276a3_0", - "channel": "pkgs/main", - "dist_name": "glib-2.68.2-h36276a3_0", - "name": "glib", - "platform": "linux-64", - "version": "2.68.2" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 1, - "build_string": "py39h2109141_1", - "channel": "pkgs/main", - "dist_name": "gobject-introspection-1.68.0-py39h2109141_1", - "name": "gobject-introspection", - "platform": "linux-64", - "version": "1.68.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "gprof2dot-2021.2.21-pypi_0", - "name": "gprof2dot", - "platform": "pypi", - "version": "2021.2.21" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "h23475e2_0", - "channel": "pkgs/main", - "dist_name": "graphite2-1.3.14-h23475e2_0", - "name": "graphite2", - "platform": "linux-64", - "version": "1.3.14" - }, - { - "base_url": "https://conda.anaconda.org/conda-forge", - "build_number": 2, - "build_string": "hf529b03_2", - "channel": "conda-forge", - "dist_name": "gst-plugins-base-1.18.4-hf529b03_2", - "name": "gst-plugins-base", - "platform": "linux-64", - "version": "1.18.4" - }, - { - "base_url": "https://conda.anaconda.org/conda-forge", - "build_number": 2, - "build_string": "h76c114f_2", - "channel": "conda-forge", - "dist_name": "gstreamer-1.18.4-h76c114f_2", - "name": "gstreamer", - "platform": "linux-64", - "version": "1.18.4" - }, - { - "base_url": "https://conda.anaconda.org/conda-forge", - "build_number": 1, - "build_string": "h539f30e_1", - "channel": "conda-forge", - "dist_name": "gtk2-2.24.33-h539f30e_1", - "name": "gtk2", - "platform": "linux-64", - "version": "2.24.33" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "h6f93f22_0", - "channel": "pkgs/main", - "dist_name": "harfbuzz-2.8.1-h6f93f22_0", - "name": "harfbuzz", - "platform": "linux-64", - "version": "2.8.1" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "httplib2-0.20.2-pypi_0", - "name": "httplib2", - "platform": "pypi", - "version": "0.20.2" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 3, - "build_string": "he6710b0_3", - "channel": "pkgs/main", - "dist_name": "icu-58.2-he6710b0_3", - "name": "icu", - "platform": "linux-64", - "version": "58.2" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "pyhd3eb1b0_0", - "channel": "pkgs/main", - "dist_name": "idna-3.2-pyhd3eb1b0_0", - "name": "idna", - "platform": "noarch", - "version": "3.2" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "imagesize-1.3.0-pypi_0", - "name": "imagesize", - "platform": "pypi", - "version": "1.3.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "ipykernel-6.5.0-pypi_0", - "name": "ipykernel", - "platform": "pypi", - "version": "6.5.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "ipython-7.29.0-pypi_0", - "name": "ipython", - "platform": "pypi", - "version": "7.29.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "ipython-genutils-0.2.0-pypi_0", - "name": "ipython-genutils", - "platform": "pypi", - "version": "0.2.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "ipywidgets-7.6.5-pypi_0", - "name": "ipywidgets", - "platform": "pypi", - "version": "7.6.5" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "isort-5.10.1-pypi_0", - "name": "isort", - "platform": "pypi", - "version": "5.10.1" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "jdcal-1.4.1-pypi_0", - "name": "jdcal", - "platform": "pypi", - "version": "1.4.1" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "jedi-0.18.0-pypi_0", - "name": "jedi", - "platform": "pypi", - "version": "0.18.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "jinja2-2.11.3-pypi_0", - "name": "jinja2", - "platform": "pypi", - "version": "2.11.3" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "joblib-1.1.0-pypi_0", - "name": "joblib", - "platform": "pypi", - "version": "1.1.0" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "h7f8727e_0", - "channel": "pkgs/main", - "dist_name": "jpeg-9d-h7f8727e_0", - "name": "jpeg", - "platform": "linux-64", - "version": "9d" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "jsonschema-3.2.0-pypi_0", - "name": "jsonschema", - "platform": "pypi", - "version": "3.2.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "jupyter-1.0.0-pypi_0", - "name": "jupyter", - "platform": "pypi", - "version": "1.0.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "jupyter-client-7.0.6-pypi_0", - "name": "jupyter-client", - "platform": "pypi", - "version": "7.0.6" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "jupyter-console-6.4.0-pypi_0", - "name": "jupyter-console", - "platform": "pypi", - "version": "6.4.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "jupyter-core-4.9.1-pypi_0", - "name": "jupyter-core", - "platform": "pypi", - "version": "4.9.1" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "jupyterlab-pygments-0.1.2-pypi_0", - "name": "jupyterlab-pygments", - "platform": "pypi", - "version": "0.1.2" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "jupyterlab-widgets-1.0.2-pypi_0", - "name": "jupyterlab-widgets", - "platform": "pypi", - "version": "1.0.2" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "kiwisolver-1.3.2-pypi_0", - "name": "kiwisolver", - "platform": "pypi", - "version": "1.3.2" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "latexcodec-2.0.1-pypi_0", - "name": "latexcodec", - "platform": "pypi", - "version": "2.0.1" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "lazy-object-proxy-1.6.0-pypi_0", - "name": "lazy-object-proxy", - "platform": "pypi", - "version": "1.6.0" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 9, - "build_string": "h7274673_9", - "channel": "pkgs/main", - "dist_name": "ld_impl_linux-64-2.35.1-h7274673_9", - "name": "ld_impl_linux-64", - "platform": "linux-64", - "version": "2.35.1" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 2, - "build_string": "he6710b0_2", - "channel": "pkgs/main", - "dist_name": "libffi-3.3-he6710b0_2", - "name": "libffi", - "platform": "linux-64", - "version": "3.3" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 17, - "build_string": "h5101ec6_17", - "channel": "pkgs/main", - "dist_name": "libgcc-ng-9.3.0-h5101ec6_17", - "name": "libgcc-ng", - "platform": "linux-64", - "version": "9.3.0" - }, - { - "base_url": "https://conda.anaconda.org/conda-forge", - "build_number": 0, - "build_string": "h3e27bee_0", - "channel": "conda-forge", - "dist_name": "libglib-2.68.2-h3e27bee_0", - "name": "libglib", - "platform": "linux-64", - "version": "2.68.2" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 1, - "build_string": "hf484d3e_1", - "channel": "pkgs/main", - "dist_name": "libglu-9.0.0-hf484d3e_1", - "name": "libglu", - "platform": "linux-64", - "version": "9.0.0" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 17, - "build_string": "h5101ec6_17", - "channel": "pkgs/main", - "dist_name": "libgomp-9.3.0-h5101ec6_17", - "name": "libgomp", - "platform": "linux-64", - "version": "9.3.0" - }, - { - "base_url": "https://conda.anaconda.org/conda-forge", - "build_number": 0, - "build_string": "h516909a_0", - "channel": "conda-forge", - "dist_name": "libiconv-1.16-h516909a_0", - "name": "libiconv", - "platform": "linux-64", - "version": "1.16" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 1, - "build_string": "h27cfd23_1", - "channel": "pkgs/main", - "dist_name": "libogg-1.3.5-h27cfd23_1", - "name": "libogg", - "platform": "linux-64", - "version": "1.3.5" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "h7b6447c_0", - "channel": "pkgs/main", - "dist_name": "libopus-1.3.1-h7b6447c_0", - "name": "libopus", - "platform": "linux-64", - "version": "1.3.1" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "hbc83047_0", - "channel": "pkgs/main", - "dist_name": "libpng-1.6.37-hbc83047_0", - "name": "libpng", - "platform": "linux-64", - "version": "1.6.37" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 17, - "build_string": "hd4cf53a_17", - "channel": "pkgs/main", - "dist_name": "libstdcxx-ng-9.3.0-hd4cf53a_17", - "name": "libstdcxx-ng", - "platform": "linux-64", - "version": "9.3.0" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "h85742a9_0", - "channel": "pkgs/main", - "dist_name": "libtiff-4.2.0-h85742a9_0", - "name": "libtiff", - "platform": "linux-64", - "version": "4.2.0" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 2, - "build_string": "h7f8727e_2", - "channel": "pkgs/main", - "dist_name": "libuuid-1.0.3-h7f8727e_2", - "name": "libuuid", - "platform": "linux-64", - "version": "1.0.3" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "h7b6447c_0", - "channel": "pkgs/main", - "dist_name": "libvorbis-1.3.7-h7b6447c_0", - "name": "libvorbis", - "platform": "linux-64", - "version": "1.3.7" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "h27cfd23_0", - "channel": "pkgs/main", - "dist_name": "libwebp-base-1.2.0-h27cfd23_0", - "name": "libwebp-base", - "platform": "linux-64", - "version": "1.2.0" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "h7b6447c_0", - "channel": "pkgs/main", - "dist_name": "libxcb-1.14-h7b6447c_0", - "name": "libxcb", - "platform": "linux-64", - "version": "1.14" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "h03d6c58_0", - "channel": "pkgs/main", - "dist_name": "libxml2-2.9.12-h03d6c58_0", - "name": "libxml2", - "platform": "linux-64", - "version": "2.9.12" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "locket-0.2.1-pypi_0", - "name": "locket", - "platform": "pypi", - "version": "0.2.1" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "lxml-4.6.4-pypi_0", - "name": "lxml", - "platform": "pypi", - "version": "4.6.4" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 1, - "build_string": "h295c915_1", - "channel": "pkgs/main", - "dist_name": "lz4-c-1.9.3-h295c915_1", - "name": "lz4-c", - "platform": "linux-64", - "version": "1.9.3" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "markdown-3.3.4-pypi_0", - "name": "markdown", - "platform": "pypi", - "version": "3.3.4" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "markupsafe-2.0.1-pypi_0", - "name": "markupsafe", - "platform": "pypi", - "version": "2.0.1" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "matplotlib-3.4.3-pypi_0", - "name": "matplotlib", - "platform": "pypi", - "version": "3.4.3" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "matplotlib-inline-0.1.3-pypi_0", - "name": "matplotlib-inline", - "platform": "pypi", - "version": "0.1.3" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "mccabe-0.6.1-pypi_0", - "name": "mccabe", - "platform": "pypi", - "version": "0.6.1" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "mistune-0.8.4-pypi_0", - "name": "mistune", - "platform": "pypi", - "version": "0.8.4" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "msgpack-1.0.2-pypi_0", - "name": "msgpack", - "platform": "pypi", - "version": "1.0.2" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "mypy-0.910-pypi_0", - "name": "mypy", - "platform": "pypi", - "version": "0.910" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "mypy-extensions-0.4.3-pypi_0", - "name": "mypy-extensions", - "platform": "pypi", - "version": "0.4.3" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "nbclient-0.5.8-pypi_0", - "name": "nbclient", - "platform": "pypi", - "version": "0.5.8" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "nbconvert-6.3.0-pypi_0", - "name": "nbconvert", - "platform": "pypi", - "version": "6.3.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "nbformat-5.1.3-pypi_0", - "name": "nbformat", - "platform": "pypi", - "version": "5.1.3" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 2, - "build_string": "h7f8727e_2", - "channel": "pkgs/main", - "dist_name": "ncurses-6.3-h7f8727e_2", - "name": "ncurses", - "platform": "linux-64", - "version": "6.3" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "nest-asyncio-1.5.1-pypi_0", - "name": "nest-asyncio", - "platform": "pypi", - "version": "1.5.1" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 3, - "build_string": "py39hd09550d_3", - "channel": "pkgs/main", - "dist_name": "ninja-1.10.2-py39hd09550d_3", - "name": "ninja", - "platform": "linux-64", - "version": "1.10.2" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "notebook-6.4.5-pypi_0", - "name": "notebook", - "platform": "pypi", - "version": "6.4.5" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "numpy-1.22.4-pypi_0", - "name": "numpy", - "platform": "pypi", - "version": "1.22.4" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "openpyxl-2.6.4-pypi_0", - "name": "openpyxl", - "platform": "pypi", - "version": "2.6.4" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "h7f8727e_0", - "channel": "pkgs/main", - "dist_name": "openssl-1.1.1l-h7f8727e_0", - "name": "openssl", - "platform": "linux-64", - "version": "1.1.1l" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "packaging-21.2-pypi_0", - "name": "packaging", - "platform": "pypi", - "version": "21.2" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "pandas-1.3.4-pypi_0", - "name": "pandas", - "platform": "pypi", - "version": "1.3.4" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "pandas-stubs-1.2.0.37-pypi_0", - "name": "pandas-stubs", - "platform": "pypi", - "version": "1.2.0.37" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "h06a4308_0", - "channel": "pkgs/main", - "dist_name": "pandoc-2.12-h06a4308_0", - "name": "pandoc", - "platform": "linux-64", - "version": "2.12" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "pandocfilters-1.5.0-pypi_0", - "name": "pandocfilters", - "platform": "pypi", - "version": "1.5.0" - }, - { - "base_url": "https://conda.anaconda.org/conda-forge", - "build_number": 0, - "build_string": "hb8ff022_0", - "channel": "conda-forge", - "dist_name": "pango-1.48.5-hb8ff022_0", - "name": "pango", - "platform": "linux-64", - "version": "1.48.5" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "parso-0.8.2-pypi_0", - "name": "parso", - "platform": "pypi", - "version": "0.8.2" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "partd-1.2.0-pypi_0", - "name": "partd", - "platform": "pypi", - "version": "1.2.0" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 2, - "build_string": "py39h06a4308_2", - "channel": "pkgs/main", - "dist_name": "pathlib2-2.3.6-py39h06a4308_2", - "name": "pathlib2", - "platform": "linux-64", - "version": "2.3.6" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "pathspec-0.9.0-pypi_0", - "name": "pathspec", - "platform": "pypi", - "version": "0.9.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "patsy-0.5.2-pypi_0", - "name": "patsy", - "platform": "pypi", - "version": "0.5.2" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "h295c915_0", - "channel": "pkgs/main", - "dist_name": "pcre-8.45-h295c915_0", - "name": "pcre", - "platform": "linux-64", - "version": "8.45" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "pexpect-4.8.0-pypi_0", - "name": "pexpect", - "platform": "pypi", - "version": "4.8.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "pickleshare-0.7.5-pypi_0", - "name": "pickleshare", - "platform": "pypi", - "version": "0.7.5" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "pillow-8.4.0-pypi_0", - "name": "pillow", - "platform": "pypi", - "version": "8.4.0" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "py39h06a4308_0", - "channel": "pkgs/main", - "dist_name": "pip-21.2.4-py39h06a4308_0", - "name": "pip", - "platform": "linux-64", - "version": "21.2.4" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "pip-licenses-3.5.3-pypi_0", - "name": "pip-licenses", - "platform": "pypi", - "version": "3.5.3" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 1, - "build_string": "h7f8727e_1", - "channel": "pkgs/main", - "dist_name": "pixman-0.40.0-h7f8727e_1", - "name": "pixman", - "platform": "linux-64", - "version": "0.40.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "plantuml-0.3.0-pypi_0", - "name": "plantuml", - "platform": "pypi", - "version": "0.3.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "plantuml-markdown-3.4.4-pypi_0", - "name": "plantuml-markdown", - "platform": "pypi", - "version": "3.4.4" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "platformdirs-2.4.0-pypi_0", - "name": "platformdirs", - "platform": "pypi", - "version": "2.4.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "prometheus-client-0.12.0-pypi_0", - "name": "prometheus-client", - "platform": "pypi", - "version": "0.12.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "prompt-toolkit-3.0.22-pypi_0", - "name": "prompt-toolkit", - "platform": "pypi", - "version": "3.0.22" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "psutil-5.8.0-pypi_0", - "name": "psutil", - "platform": "pypi", - "version": "5.8.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "ptable-0.9.2-pypi_0", - "name": "ptable", - "platform": "pypi", - "version": "0.9.2" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 1, - "build_string": "h0ce48e5_1", - "channel": "pkgs/main", - "dist_name": "pthread-stubs-0.3-h0ce48e5_1", - "name": "pthread-stubs", - "platform": "linux-64", - "version": "0.3" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "ptyprocess-0.7.0-pypi_0", - "name": "ptyprocess", - "platform": "pypi", - "version": "0.7.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "pybtex-0.24.0-pypi_0", - "name": "pybtex", - "platform": "pypi", - "version": "0.24.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "pybtex-docutils-1.0.1-pypi_0", - "name": "pybtex-docutils", - "platform": "pypi", - "version": "1.0.1" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "pyhd3eb1b0_0", - "channel": "pkgs/main", - "dist_name": "pycparser-2.21-pyhd3eb1b0_0", - "name": "pycparser", - "platform": "noarch", - "version": "2.21" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "pyenchant-3.2.2-pypi_0", - "name": "pyenchant", - "platform": "pypi", - "version": "3.2.2" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "pygments-2.10.0-pypi_0", - "name": "pygments", - "platform": "pypi", - "version": "2.10.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "pykwalify-1.8.0-pypi_0", - "name": "pykwalify", - "platform": "pypi", - "version": "1.8.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "pylint-2.11.1-pypi_0", - "name": "pylint", - "platform": "pypi", - "version": "2.11.1" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 1, - "build_string": "pyhd3eb1b0_1", - "channel": "pkgs/main", - "dist_name": "pyopenssl-21.0.0-pyhd3eb1b0_1", - "name": "pyopenssl", - "platform": "noarch", - "version": "21.0.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "pyparsing-2.4.7-pypi_0", - "name": "pyparsing", - "platform": "pypi", - "version": "2.4.7" - }, - { - "base_url": "https://conda.anaconda.org/conda-forge", - "build_number": 0, - "build_string": "py_0", - "channel": "conda-forge", - "dist_name": "pypubsub-4.0.3-py_0", - "name": "pypubsub", - "platform": "noarch", - "version": "4.0.3" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "pyrsistent-0.18.0-pypi_0", - "name": "pyrsistent", - "platform": "pypi", - "version": "0.18.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "pyserial-3.5-pypi_0", - "name": "pyserial", - "platform": "pypi", - "version": "3.5" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "pysimplegui-4.55.1-pypi_0", - "name": "pysimplegui", - "platform": "pypi", - "version": "4.55.1" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "py39h06a4308_0", - "channel": "pkgs/main", - "dist_name": "pysocks-1.7.1-py39h06a4308_0", - "name": "pysocks", - "platform": "linux-64", - "version": "1.7.1" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 1, - "build_string": "h12debd9_1", - "channel": "pkgs/main", - "dist_name": "python-3.9.7-h12debd9_1", - "name": "python", - "platform": "linux-64", - "version": "3.9.7" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "python-can-4.0.0.dev2-pypi_0", - "name": "python-can", - "platform": "pypi", - "version": "4.0.0.dev2" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "python-datauri-0.2.9-pypi_0", - "name": "python-datauri", - "platform": "pypi", - "version": "0.2.9" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "python-dateutil-2.8.2-pypi_0", - "name": "python-dateutil", - "platform": "pypi", - "version": "2.8.2" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "python-lin-0.1.1-pypi_0", - "name": "python-lin", - "platform": "pypi", - "version": "0.1.1" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "python-markdown-math-0.6-pypi_0", - "name": "python-markdown-math", - "platform": "pypi", - "version": "0.6" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "python-uds-1.0.2-pypi_0", - "name": "python-uds", - "platform": "pypi", - "version": "1.0.2" - }, - { - "base_url": "https://conda.anaconda.org/conda-forge", - "build_number": 2, - "build_string": "2_cp39", - "channel": "conda-forge", - "dist_name": "python_abi-3.9-2_cp39", - "name": "python_abi", - "platform": "linux-64", - "version": "3.9" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "pytz-2021.3-pypi_0", - "name": "pytz", - "platform": "pypi", - "version": "2021.3" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "pyvisa-1.11.3-pypi_0", - "name": "pyvisa", - "platform": "pypi", - "version": "1.11.3" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "pyyaml-5.4.1-pypi_0", - "name": "pyyaml", - "platform": "pypi", - "version": "5.4.1" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "pyzmq-22.3.0-pypi_0", - "name": "pyzmq", - "platform": "pypi", - "version": "22.3.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "qtconsole-5.2.0-pypi_0", - "name": "qtconsole", - "platform": "pypi", - "version": "5.2.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "qtpy-1.11.2-pypi_0", - "name": "qtpy", - "platform": "pypi", - "version": "1.11.2" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "h27cfd23_0", - "channel": "pkgs/main", - "dist_name": "readline-8.1-h27cfd23_0", - "name": "readline", - "platform": "linux-64", - "version": "8.1" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "regex-2021.11.10-pypi_0", - "name": "regex", - "platform": "pypi", - "version": "2021.11.10" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "pyhd3eb1b0_0", - "channel": "pkgs/main", - "dist_name": "requests-2.26.0-pyhd3eb1b0_0", - "name": "requests", - "platform": "noarch", - "version": "2.26.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "requests-file-1.5.1-pypi_0", - "name": "requests-file", - "platform": "pypi", - "version": "1.5.1" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "rope-0.21.1-pypi_0", - "name": "rope", - "platform": "pypi", - "version": "0.21.1" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "rsinstrument-1.19.0.75-pypi_0", - "name": "rsinstrument", - "platform": "pypi", - "version": "1.19.0.75" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "ruamel-yaml-0.17.17-pypi_0", - "name": "ruamel-yaml", - "platform": "pypi", - "version": "0.17.17" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "ruamel-yaml-clib-0.2.6-pypi_0", - "name": "ruamel-yaml-clib", - "platform": "pypi", - "version": "0.2.6" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "scipy-1.7.2-pypi_0", - "name": "scipy", - "platform": "pypi", - "version": "1.7.2" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "seaborn-0.11.2-pypi_0", - "name": "seaborn", - "platform": "pypi", - "version": "0.11.2" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "send2trash-1.8.0-pypi_0", - "name": "send2trash", - "platform": "pypi", - "version": "1.8.0" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "py39h06a4308_0", - "channel": "pkgs/main", - "dist_name": "setuptools-58.0.4-py39h06a4308_0", - "name": "setuptools", - "platform": "linux-64", - "version": "58.0.4" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "pyhd3eb1b0_0", - "channel": "pkgs/main", - "dist_name": "six-1.16.0-pyhd3eb1b0_0", - "name": "six", - "platform": "noarch", - "version": "1.16.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "smmap-5.0.0-pypi_0", - "name": "smmap", - "platform": "pypi", - "version": "5.0.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "snowballstemmer-2.1.0-pypi_0", - "name": "snowballstemmer", - "platform": "pypi", - "version": "2.1.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "soupsieve-2.3.1-pypi_0", - "name": "soupsieve", - "platform": "pypi", - "version": "2.3.1" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "sphinx-4.3.0-pypi_0", - "name": "sphinx", - "platform": "pypi", - "version": "4.3.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "sphinx-copybutton-0.3.3-pypi_0", - "name": "sphinx-copybutton", - "platform": "pypi", - "version": "0.3.3" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "sphinx-panels-0.6.0-pypi_0", - "name": "sphinx-panels", - "platform": "pypi", - "version": "0.6.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "sphinx-rtd-theme-1.0.0-pypi_0", - "name": "sphinx-rtd-theme", - "platform": "pypi", - "version": "1.0.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "sphinxcontrib-applehelp-1.0.2-pypi_0", - "name": "sphinxcontrib-applehelp", - "platform": "pypi", - "version": "1.0.2" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "sphinxcontrib-bibtex-2.4.1-pypi_0", - "name": "sphinxcontrib-bibtex", - "platform": "pypi", - "version": "2.4.1" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "sphinxcontrib-devhelp-1.0.2-pypi_0", - "name": "sphinxcontrib-devhelp", - "platform": "pypi", - "version": "1.0.2" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "sphinxcontrib-htmlhelp-2.0.0-pypi_0", - "name": "sphinxcontrib-htmlhelp", - "platform": "pypi", - "version": "2.0.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "sphinxcontrib-jsmath-1.0.1-pypi_0", - "name": "sphinxcontrib-jsmath", - "platform": "pypi", - "version": "1.0.1" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "sphinxcontrib-mermaid-0.7.1-pypi_0", - "name": "sphinxcontrib-mermaid", - "platform": "pypi", - "version": "0.7.1" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "sphinxcontrib-plantuml-0.21-pypi_0", - "name": "sphinxcontrib-plantuml", - "platform": "pypi", - "version": "0.21" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "sphinxcontrib-programoutput-0.17-pypi_0", - "name": "sphinxcontrib-programoutput", - "platform": "pypi", - "version": "0.17" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "sphinxcontrib-qthelp-1.0.3-pypi_0", - "name": "sphinxcontrib-qthelp", - "platform": "pypi", - "version": "1.0.3" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "sphinxcontrib-serializinghtml-1.1.5-pypi_0", - "name": "sphinxcontrib-serializinghtml", - "platform": "pypi", - "version": "1.1.5" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "sphinxcontrib-spelling-7.2.1-pypi_0", - "name": "sphinxcontrib-spelling", - "platform": "pypi", - "version": "7.2.1" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "hc218d9a_0", - "channel": "pkgs/main", - "dist_name": "sqlite-3.36.0-hc218d9a_0", - "name": "sqlite", - "platform": "linux-64", - "version": "3.36.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "statsmodels-0.13.0-pypi_0", - "name": "statsmodels", - "platform": "pypi", - "version": "0.13.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "tabulate-0.8.9-pypi_0", - "name": "tabulate", - "platform": "pypi", - "version": "0.8.9" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "tenacity-8.0.1-pypi_0", - "name": "tenacity", - "platform": "pypi", - "version": "8.0.1" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "terminado-0.12.1-pypi_0", - "name": "terminado", - "platform": "pypi", - "version": "0.12.1" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "testpath-0.5.0-pypi_0", - "name": "testpath", - "platform": "pypi", - "version": "0.5.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "textparser-0.23.0-pypi_0", - "name": "textparser", - "platform": "pypi", - "version": "0.23.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "textx-2.3.0-pypi_0", - "name": "textx", - "platform": "pypi", - "version": "2.3.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "threadpoolctl-3.0.0-pypi_0", - "name": "threadpoolctl", - "platform": "pypi", - "version": "3.0.0" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "h1ccaba5_0", - "channel": "pkgs/main", - "dist_name": "tk-8.6.11-h1ccaba5_0", - "name": "tk", - "platform": "linux-64", - "version": "8.6.11" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "toml-0.10.2-pypi_0", - "name": "toml", - "platform": "pypi", - "version": "0.10.2" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "tomli-1.2.2-pypi_0", - "name": "tomli", - "platform": "pypi", - "version": "1.2.2" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "toolz-0.11.2-pypi_0", - "name": "toolz", - "platform": "pypi", - "version": "0.11.2" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "tornado-6.1-pypi_0", - "name": "tornado", - "platform": "pypi", - "version": "6.1" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "traitlets-5.1.1-pypi_0", - "name": "traitlets", - "platform": "pypi", - "version": "5.1.1" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "typing-extensions-3.10.0.2-pypi_0", - "name": "typing-extensions", - "platform": "pypi", - "version": "3.10.0.2" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "hda174b7_0", - "channel": "pkgs/main", - "dist_name": "tzdata-2021e-hda174b7_0", - "name": "tzdata", - "platform": "noarch", - "version": "2021e" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "uptime-3.0.1-pypi_0", - "name": "uptime", - "platform": "pypi", - "version": "3.0.1" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "pyhd3eb1b0_0", - "channel": "pkgs/main", - "dist_name": "urllib3-1.26.7-pyhd3eb1b0_0", - "name": "urllib3", - "platform": "noarch", - "version": "1.26.7" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "wcwidth-0.2.5-pypi_0", - "name": "wcwidth", - "platform": "pypi", - "version": "0.2.5" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "webencodings-0.5.1-pypi_0", - "name": "webencodings", - "platform": "pypi", - "version": "0.5.1" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 1, - "build_string": "pyhd3eb1b0_1", - "channel": "pkgs/main", - "dist_name": "wheel-0.37.0-pyhd3eb1b0_1", - "name": "wheel", - "platform": "noarch", - "version": "0.37.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "widgetsnbextension-3.5.2-pypi_0", - "name": "widgetsnbextension", - "platform": "pypi", - "version": "3.5.2" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "wrapt-1.13.3-pypi_0", - "name": "wrapt", - "platform": "pypi", - "version": "1.13.3" - }, - { - "base_url": "https://conda.anaconda.org/conda-forge", - "build_number": 1, - "build_string": "py39h09f47c6_1", - "channel": "conda-forge", - "dist_name": "wxpython-4.1.1-py39h09f47c6_1", - "name": "wxpython", - "platform": "linux-64", - "version": "4.1.1" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "xlsxwriter-1.4.5-pypi_0", - "name": "xlsxwriter", - "platform": "pypi", - "version": "1.4.5" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "h7b6447c_0", - "channel": "pkgs/main", - "dist_name": "xz-5.2.5-h7b6447c_0", - "name": "xz", - "platform": "linux-64", - "version": "5.2.5" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 3, - "build_string": "h7b6447c_3", - "channel": "pkgs/main", - "dist_name": "zlib-1.2.11-h7b6447c_3", - "name": "zlib", - "platform": "linux-64", - "version": "1.2.11" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "haebb681_0", - "channel": "pkgs/main", - "dist_name": "zstd-1.4.9-haebb681_0", - "name": "zstd", - "platform": "linux-64", - "version": "1.4.9" - } -] diff --git a/tests/env/conda_env_win32.json b/tests/env/conda_env_win32.json deleted file mode 100644 index cc152198..00000000 --- a/tests/env/conda_env_win32.json +++ /dev/null @@ -1,1932 +0,0 @@ -[ - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "alabaster-0.7.12-pypi_0", - "name": "alabaster", - "platform": "pypi", - "version": "0.7.12" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "appdirs-1.4.4-pypi_0", - "name": "appdirs", - "platform": "pypi", - "version": "1.4.4" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "argon2-cffi-21.1.0-pypi_0", - "name": "argon2-cffi", - "platform": "pypi", - "version": "21.1.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "argparse-addons-0.7.0-pypi_0", - "name": "argparse-addons", - "platform": "pypi", - "version": "0.7.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "arpeggio-1.10.2-pypi_0", - "name": "arpeggio", - "platform": "pypi", - "version": "1.10.2" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "astroid-2.8.4-pypi_0", - "name": "astroid", - "platform": "pypi", - "version": "2.8.4" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "attrs-21.2.0-pypi_0", - "name": "attrs", - "platform": "pypi", - "version": "21.2.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "babel-2.9.1-pypi_0", - "name": "babel", - "platform": "pypi", - "version": "2.9.1" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "backcall-0.2.0-pypi_0", - "name": "backcall", - "platform": "pypi", - "version": "0.2.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "beautifulsoup4-4.10.0-pypi_0", - "name": "beautifulsoup4", - "platform": "pypi", - "version": "4.10.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "bitstruct-8.11.1-pypi_0", - "name": "bitstruct", - "platform": "pypi", - "version": "8.11.1" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "black-21.10b0-pypi_0", - "name": "black", - "platform": "pypi", - "version": "21.10b0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "bleach-4.1.0-pypi_0", - "name": "bleach", - "platform": "pypi", - "version": "4.1.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "bokeh-2.4.1-pypi_0", - "name": "bokeh", - "platform": "pypi", - "version": "2.4.1" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "bottle-0.12.19-pypi_0", - "name": "bottle", - "platform": "pypi", - "version": "0.12.19" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 2, - "build_string": "haa95532_2", - "channel": "pkgs/main", - "dist_name": "ca-certificates-2021.10.26-haa95532_2", - "name": "ca-certificates", - "platform": "win-64", - "version": "2021.10.26" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "cantools-36.5.0-pypi_0", - "name": "cantools", - "platform": "pypi", - "version": "36.5.0" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "py39haa95532_0", - "channel": "pkgs/main", - "dist_name": "certifi-2021.10.8-py39haa95532_0", - "name": "certifi", - "platform": "win-64", - "version": "2021.10.8" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "cffconvert-2.0.0-pypi_0", - "name": "cffconvert", - "platform": "pypi", - "version": "2.0.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "cffi-1.15.0-pypi_0", - "name": "cffi", - "platform": "pypi", - "version": "1.15.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "charset-normalizer-2.0.7-pypi_0", - "name": "charset-normalizer", - "platform": "pypi", - "version": "2.0.7" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "click-8.0.3-pypi_0", - "name": "click", - "platform": "pypi", - "version": "8.0.3" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "cloudpickle-2.0.0-pypi_0", - "name": "cloudpickle", - "platform": "pypi", - "version": "2.0.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "colorama-0.4.4-pypi_0", - "name": "colorama", - "platform": "pypi", - "version": "0.4.4" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 4, - "build_string": "4", - "channel": "pkgs/main", - "dist_name": "console_shortcut-0.1.1-4", - "name": "console_shortcut", - "platform": "win-64", - "version": "0.1.1" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "coverage-6.1.1-pypi_0", - "name": "coverage", - "platform": "pypi", - "version": "6.1.1" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "crcmod-1.7-pypi_0", - "name": "crcmod", - "platform": "pypi", - "version": "1.7" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "cycler-0.11.0-pypi_0", - "name": "cycler", - "platform": "pypi", - "version": "0.11.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "dask-2021.11.1-pypi_0", - "name": "dask", - "platform": "pypi", - "version": "2021.11.1" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "debugpy-1.5.1-pypi_0", - "name": "debugpy", - "platform": "pypi", - "version": "1.5.1" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "decorator-5.1.0-pypi_0", - "name": "decorator", - "platform": "pypi", - "version": "5.1.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "defusedxml-0.7.1-pypi_0", - "name": "defusedxml", - "platform": "pypi", - "version": "0.7.1" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "diskcache-5.2.1-pypi_0", - "name": "diskcache", - "platform": "pypi", - "version": "5.2.1" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "docopt-0.6.2-pypi_0", - "name": "docopt", - "platform": "pypi", - "version": "0.6.2" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "docutils-0.16-pypi_0", - "name": "docutils", - "platform": "pypi", - "version": "0.16" - }, - { - "base_url": "https://conda.anaconda.org/foxbms", - "build_number": 1, - "build_string": "1", - "channel": "foxbms", - "dist_name": "doxygen-1.9.1-1", - "name": "doxygen", - "platform": "win-64", - "version": "1.9.1" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "entrypoints-0.3-pypi_0", - "name": "entrypoints", - "platform": "pypi", - "version": "0.3" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "et-xmlfile-1.1.0-pypi_0", - "name": "et-xmlfile", - "platform": "pypi", - "version": "1.1.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "filterpy-1.4.5-pypi_0", - "name": "filterpy", - "platform": "pypi", - "version": "1.4.5" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "fsspec-2021.11.0-pypi_0", - "name": "fsspec", - "platform": "pypi", - "version": "2021.11.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "gcovr-5.0-pypi_0", - "name": "gcovr", - "platform": "pypi", - "version": "5.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "gitdb-4.0.9-pypi_0", - "name": "gitdb", - "platform": "pypi", - "version": "4.0.9" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "gitpython-3.1.24-pypi_0", - "name": "gitpython", - "platform": "pypi", - "version": "3.1.24" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "gprof2dot-2021.2.21-pypi_0", - "name": "gprof2dot", - "platform": "pypi", - "version": "2021.2.21" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 2, - "build_string": "hfd603c8_2", - "channel": "pkgs/main", - "dist_name": "graphviz-2.38-hfd603c8_2", - "name": "graphviz", - "platform": "win-64", - "version": "2.38" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "httplib2-0.20.2-pypi_0", - "name": "httplib2", - "platform": "pypi", - "version": "0.20.2" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "idna-3.3-pypi_0", - "name": "idna", - "platform": "pypi", - "version": "3.3" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "imagesize-1.3.0-pypi_0", - "name": "imagesize", - "platform": "pypi", - "version": "1.3.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "ipykernel-6.5.0-pypi_0", - "name": "ipykernel", - "platform": "pypi", - "version": "6.5.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "ipython-7.29.0-pypi_0", - "name": "ipython", - "platform": "pypi", - "version": "7.29.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "ipython-genutils-0.2.0-pypi_0", - "name": "ipython-genutils", - "platform": "pypi", - "version": "0.2.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "ipywidgets-7.6.5-pypi_0", - "name": "ipywidgets", - "platform": "pypi", - "version": "7.6.5" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "isort-5.10.1-pypi_0", - "name": "isort", - "platform": "pypi", - "version": "5.10.1" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "jdcal-1.4.1-pypi_0", - "name": "jdcal", - "platform": "pypi", - "version": "1.4.1" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "jedi-0.18.0-pypi_0", - "name": "jedi", - "platform": "pypi", - "version": "0.18.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "jinja2-2.11.3-pypi_0", - "name": "jinja2", - "platform": "pypi", - "version": "2.11.3" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "joblib-1.1.0-pypi_0", - "name": "joblib", - "platform": "pypi", - "version": "1.1.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "jsonschema-3.2.0-pypi_0", - "name": "jsonschema", - "platform": "pypi", - "version": "3.2.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "jupyter-1.0.0-pypi_0", - "name": "jupyter", - "platform": "pypi", - "version": "1.0.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "jupyter-client-7.0.6-pypi_0", - "name": "jupyter-client", - "platform": "pypi", - "version": "7.0.6" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "jupyter-console-6.4.0-pypi_0", - "name": "jupyter-console", - "platform": "pypi", - "version": "6.4.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "jupyter-core-4.9.1-pypi_0", - "name": "jupyter-core", - "platform": "pypi", - "version": "4.9.1" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "jupyterlab-pygments-0.1.2-pypi_0", - "name": "jupyterlab-pygments", - "platform": "pypi", - "version": "0.1.2" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "jupyterlab-widgets-1.0.2-pypi_0", - "name": "jupyterlab-widgets", - "platform": "pypi", - "version": "1.0.2" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "kiwisolver-1.3.2-pypi_0", - "name": "kiwisolver", - "platform": "pypi", - "version": "1.3.2" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "latexcodec-2.0.1-pypi_0", - "name": "latexcodec", - "platform": "pypi", - "version": "2.0.1" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "lazy-object-proxy-1.6.0-pypi_0", - "name": "lazy-object-proxy", - "platform": "pypi", - "version": "1.6.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "locket-0.2.1-pypi_0", - "name": "locket", - "platform": "pypi", - "version": "0.2.1" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "lxml-4.6.4-pypi_0", - "name": "lxml", - "platform": "pypi", - "version": "4.6.4" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "markdown-3.3.4-pypi_0", - "name": "markdown", - "platform": "pypi", - "version": "3.3.4" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "markupsafe-2.0.1-pypi_0", - "name": "markupsafe", - "platform": "pypi", - "version": "2.0.1" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "matplotlib-3.4.3-pypi_0", - "name": "matplotlib", - "platform": "pypi", - "version": "3.4.3" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "matplotlib-inline-0.1.3-pypi_0", - "name": "matplotlib-inline", - "platform": "pypi", - "version": "0.1.3" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "mccabe-0.6.1-pypi_0", - "name": "mccabe", - "platform": "pypi", - "version": "0.6.1" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "mistune-0.8.4-pypi_0", - "name": "mistune", - "platform": "pypi", - "version": "0.8.4" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "mypy-0.910-pypi_0", - "name": "mypy", - "platform": "pypi", - "version": "0.910" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "mypy-extensions-0.4.3-pypi_0", - "name": "mypy-extensions", - "platform": "pypi", - "version": "0.4.3" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "nbclient-0.5.5-pypi_0", - "name": "nbclient", - "platform": "pypi", - "version": "0.5.5" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "nbconvert-6.2.0-pypi_0", - "name": "nbconvert", - "platform": "pypi", - "version": "6.2.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "nbformat-5.1.3-pypi_0", - "name": "nbformat", - "platform": "pypi", - "version": "5.1.3" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "nest-asyncio-1.5.1-pypi_0", - "name": "nest-asyncio", - "platform": "pypi", - "version": "1.5.1" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "notebook-6.4.5-pypi_0", - "name": "notebook", - "platform": "pypi", - "version": "6.4.5" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "numpy-1.22.4-pypi_0", - "name": "numpy", - "platform": "pypi", - "version": "1.22.4" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "openpyxl-2.6.4-pypi_0", - "name": "openpyxl", - "platform": "pypi", - "version": "2.6.4" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "h2bbff1b_0", - "channel": "pkgs/main", - "dist_name": "openssl-1.1.1l-h2bbff1b_0", - "name": "openssl", - "platform": "win-64", - "version": "1.1.1l" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "packaging-21.2-pypi_0", - "name": "packaging", - "platform": "pypi", - "version": "21.2" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "pandas-1.3.4-pypi_0", - "name": "pandas", - "platform": "pypi", - "version": "1.3.4" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "pandas-stubs-1.2.0.37-pypi_0", - "name": "pandas-stubs", - "platform": "pypi", - "version": "1.2.0.37" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "haa95532_0", - "channel": "pkgs/main", - "dist_name": "pandoc-2.12-haa95532_0", - "name": "pandoc", - "platform": "win-64", - "version": "2.12" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "pandocfilters-1.5.0-pypi_0", - "name": "pandocfilters", - "platform": "pypi", - "version": "1.5.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "parso-0.8.2-pypi_0", - "name": "parso", - "platform": "pypi", - "version": "0.8.2" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "partd-1.2.0-pypi_0", - "name": "partd", - "platform": "pypi", - "version": "1.2.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "pathspec-0.9.0-pypi_0", - "name": "pathspec", - "platform": "pypi", - "version": "0.9.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "patsy-0.5.2-pypi_0", - "name": "patsy", - "platform": "pypi", - "version": "0.5.2" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "pickleshare-0.7.5-pypi_0", - "name": "pickleshare", - "platform": "pypi", - "version": "0.7.5" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "pillow-8.4.0-pypi_0", - "name": "pillow", - "platform": "pypi", - "version": "8.4.0" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "py39haa95532_0", - "channel": "pkgs/main", - "dist_name": "pip-21.2.4-py39haa95532_0", - "name": "pip", - "platform": "win-64", - "version": "21.2.4" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "pip-licenses-3.5.3-pypi_0", - "name": "pip-licenses", - "platform": "pypi", - "version": "3.5.3" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "plantuml-0.3.0-pypi_0", - "name": "plantuml", - "platform": "pypi", - "version": "0.3.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "plantuml-markdown-3.4.4-pypi_0", - "name": "plantuml-markdown", - "platform": "pypi", - "version": "3.4.4" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "platformdirs-2.4.0-pypi_0", - "name": "platformdirs", - "platform": "pypi", - "version": "2.4.0" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 3, - "build_string": "3", - "channel": "pkgs/main", - "dist_name": "powershell_shortcut-0.0.1-3", - "name": "powershell_shortcut", - "platform": "win-64", - "version": "0.0.1" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "prometheus-client-0.12.0-pypi_0", - "name": "prometheus-client", - "platform": "pypi", - "version": "0.12.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "prompt-toolkit-3.0.22-pypi_0", - "name": "prompt-toolkit", - "platform": "pypi", - "version": "3.0.22" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "psutil-5.8.0-pypi_0", - "name": "psutil", - "platform": "pypi", - "version": "5.8.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "ptable-0.9.2-pypi_0", - "name": "ptable", - "platform": "pypi", - "version": "0.9.2" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "pybtex-0.24.0-pypi_0", - "name": "pybtex", - "platform": "pypi", - "version": "0.24.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "pybtex-docutils-1.0.1-pypi_0", - "name": "pybtex-docutils", - "platform": "pypi", - "version": "1.0.1" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "pycparser-2.21-pypi_0", - "name": "pycparser", - "platform": "pypi", - "version": "2.21" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "pyenchant-3.2.2-pypi_0", - "name": "pyenchant", - "platform": "pypi", - "version": "3.2.2" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "pygments-2.10.0-pypi_0", - "name": "pygments", - "platform": "pypi", - "version": "2.10.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "pykwalify-1.8.0-pypi_0", - "name": "pykwalify", - "platform": "pypi", - "version": "1.8.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "pylint-2.11.1-pypi_0", - "name": "pylint", - "platform": "pypi", - "version": "2.11.1" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "pyparsing-2.4.7-pypi_0", - "name": "pyparsing", - "platform": "pypi", - "version": "2.4.7" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "pyrsistent-0.18.0-pypi_0", - "name": "pyrsistent", - "platform": "pypi", - "version": "0.18.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "pyserial-3.5-pypi_0", - "name": "pyserial", - "platform": "pypi", - "version": "3.5" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "pysimplegui-4.55.1-pypi_0", - "name": "pysimplegui", - "platform": "pypi", - "version": "4.55.1" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 1, - "build_string": "h6244533_1", - "channel": "pkgs/main", - "dist_name": "python-3.9.7-h6244533_1", - "name": "python", - "platform": "win-64", - "version": "3.9.7" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "python-can-4.0.0.dev2-pypi_0", - "name": "python-can", - "platform": "pypi", - "version": "4.0.0.dev2" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "python-datauri-0.2.9-pypi_0", - "name": "python-datauri", - "platform": "pypi", - "version": "0.2.9" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "python-dateutil-2.8.2-pypi_0", - "name": "python-dateutil", - "platform": "pypi", - "version": "2.8.2" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "python-lin-0.1.1-pypi_0", - "name": "python-lin", - "platform": "pypi", - "version": "0.1.1" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "python-markdown-math-0.6-pypi_0", - "name": "python-markdown-math", - "platform": "pypi", - "version": "0.6" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "python-uds-1.0.2-pypi_0", - "name": "python-uds", - "platform": "pypi", - "version": "1.0.2" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "pytz-2021.3-pypi_0", - "name": "pytz", - "platform": "pypi", - "version": "2021.3" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "pyvisa-1.11.3-pypi_0", - "name": "pyvisa", - "platform": "pypi", - "version": "1.11.3" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 1, - "build_string": "py39hbaba5e8_1", - "channel": "pkgs/main", - "dist_name": "pywin32-228-py39hbaba5e8_1", - "name": "pywin32", - "platform": "win-64", - "version": "228" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "pywinpty-1.1.5-pypi_0", - "name": "pywinpty", - "platform": "pypi", - "version": "1.1.5" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "pyyaml-5.4.1-pypi_0", - "name": "pyyaml", - "platform": "pypi", - "version": "5.4.1" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "pyzmq-22.3.0-pypi_0", - "name": "pyzmq", - "platform": "pypi", - "version": "22.3.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "qtconsole-5.2.0-pypi_0", - "name": "qtconsole", - "platform": "pypi", - "version": "5.2.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "qtpy-1.11.2-pypi_0", - "name": "qtpy", - "platform": "pypi", - "version": "1.11.2" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "regex-2021.11.10-pypi_0", - "name": "regex", - "platform": "pypi", - "version": "2021.11.10" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "requests-2.26.0-pypi_0", - "name": "requests", - "platform": "pypi", - "version": "2.26.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "requests-file-1.5.1-pypi_0", - "name": "requests-file", - "platform": "pypi", - "version": "1.5.1" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "rope-0.21.0-pypi_0", - "name": "rope", - "platform": "pypi", - "version": "0.21.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "rsinstrument-1.19.0.75-pypi_0", - "name": "rsinstrument", - "platform": "pypi", - "version": "1.19.0.75" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "ruamel-yaml-0.17.17-pypi_0", - "name": "ruamel-yaml", - "platform": "pypi", - "version": "0.17.17" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "ruamel-yaml-clib-0.2.6-pypi_0", - "name": "ruamel-yaml-clib", - "platform": "pypi", - "version": "0.2.6" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "scipy-1.7.2-pypi_0", - "name": "scipy", - "platform": "pypi", - "version": "1.7.2" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "seaborn-0.11.2-pypi_0", - "name": "seaborn", - "platform": "pypi", - "version": "0.11.2" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "send2trash-1.8.0-pypi_0", - "name": "send2trash", - "platform": "pypi", - "version": "1.8.0" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "py39haa95532_0", - "channel": "pkgs/main", - "dist_name": "setuptools-58.0.4-py39haa95532_0", - "name": "setuptools", - "platform": "win-64", - "version": "58.0.4" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "six-1.16.0-pypi_0", - "name": "six", - "platform": "pypi", - "version": "1.16.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "smmap-5.0.0-pypi_0", - "name": "smmap", - "platform": "pypi", - "version": "5.0.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "snowballstemmer-2.1.0-pypi_0", - "name": "snowballstemmer", - "platform": "pypi", - "version": "2.1.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "soupsieve-2.3-pypi_0", - "name": "soupsieve", - "platform": "pypi", - "version": "2.3" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "sphinx-4.3.0-pypi_0", - "name": "sphinx", - "platform": "pypi", - "version": "4.3.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "sphinx-copybutton-0.3.3-pypi_0", - "name": "sphinx-copybutton", - "platform": "pypi", - "version": "0.3.3" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "sphinx-panels-0.6.0-pypi_0", - "name": "sphinx-panels", - "platform": "pypi", - "version": "0.6.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "sphinx-rtd-theme-1.0.0-pypi_0", - "name": "sphinx-rtd-theme", - "platform": "pypi", - "version": "1.0.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "sphinxcontrib-applehelp-1.0.2-pypi_0", - "name": "sphinxcontrib-applehelp", - "platform": "pypi", - "version": "1.0.2" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "sphinxcontrib-bibtex-2.4.1-pypi_0", - "name": "sphinxcontrib-bibtex", - "platform": "pypi", - "version": "2.4.1" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "sphinxcontrib-devhelp-1.0.2-pypi_0", - "name": "sphinxcontrib-devhelp", - "platform": "pypi", - "version": "1.0.2" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "sphinxcontrib-htmlhelp-2.0.0-pypi_0", - "name": "sphinxcontrib-htmlhelp", - "platform": "pypi", - "version": "2.0.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "sphinxcontrib-jsmath-1.0.1-pypi_0", - "name": "sphinxcontrib-jsmath", - "platform": "pypi", - "version": "1.0.1" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "sphinxcontrib-mermaid-0.7.1-pypi_0", - "name": "sphinxcontrib-mermaid", - "platform": "pypi", - "version": "0.7.1" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "sphinxcontrib-plantuml-0.21-pypi_0", - "name": "sphinxcontrib-plantuml", - "platform": "pypi", - "version": "0.21" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "sphinxcontrib-programoutput-0.17-pypi_0", - "name": "sphinxcontrib-programoutput", - "platform": "pypi", - "version": "0.17" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "sphinxcontrib-qthelp-1.0.3-pypi_0", - "name": "sphinxcontrib-qthelp", - "platform": "pypi", - "version": "1.0.3" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "sphinxcontrib-serializinghtml-1.1.5-pypi_0", - "name": "sphinxcontrib-serializinghtml", - "platform": "pypi", - "version": "1.1.5" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "sphinxcontrib-spelling-7.2.1-pypi_0", - "name": "sphinxcontrib-spelling", - "platform": "pypi", - "version": "7.2.1" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "h2bbff1b_0", - "channel": "pkgs/main", - "dist_name": "sqlite-3.36.0-h2bbff1b_0", - "name": "sqlite", - "platform": "win-64", - "version": "3.36.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "statsmodels-0.13.0-pypi_0", - "name": "statsmodels", - "platform": "pypi", - "version": "0.13.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "tabulate-0.8.9-pypi_0", - "name": "tabulate", - "platform": "pypi", - "version": "0.8.9" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "tenacity-8.0.1-pypi_0", - "name": "tenacity", - "platform": "pypi", - "version": "8.0.1" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "terminado-0.12.1-pypi_0", - "name": "terminado", - "platform": "pypi", - "version": "0.12.1" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "testpath-0.5.0-pypi_0", - "name": "testpath", - "platform": "pypi", - "version": "0.5.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "textparser-0.23.0-pypi_0", - "name": "textparser", - "platform": "pypi", - "version": "0.23.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "textx-2.3.0-pypi_0", - "name": "textx", - "platform": "pypi", - "version": "2.3.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "threadpoolctl-3.0.0-pypi_0", - "name": "threadpoolctl", - "platform": "pypi", - "version": "3.0.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "toml-0.10.2-pypi_0", - "name": "toml", - "platform": "pypi", - "version": "0.10.2" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "tomli-1.2.2-pypi_0", - "name": "tomli", - "platform": "pypi", - "version": "1.2.2" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "toolz-0.11.2-pypi_0", - "name": "toolz", - "platform": "pypi", - "version": "0.11.2" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "tornado-6.1-pypi_0", - "name": "tornado", - "platform": "pypi", - "version": "6.1" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "traitlets-5.1.1-pypi_0", - "name": "traitlets", - "platform": "pypi", - "version": "5.1.1" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "typing-extensions-3.10.0.2-pypi_0", - "name": "typing-extensions", - "platform": "pypi", - "version": "3.10.0.2" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 0, - "build_string": "hda174b7_0", - "channel": "pkgs/main", - "dist_name": "tzdata-2021e-hda174b7_0", - "name": "tzdata", - "platform": "noarch", - "version": "2021e" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "uptime-3.0.1-pypi_0", - "name": "uptime", - "platform": "pypi", - "version": "3.0.1" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "urllib3-1.26.7-pypi_0", - "name": "urllib3", - "platform": "pypi", - "version": "1.26.7" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 1, - "build_string": "h21ff451_1", - "channel": "pkgs/main", - "dist_name": "vc-14.2-h21ff451_1", - "name": "vc", - "platform": "win-64", - "version": "14.2" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 2, - "build_string": "h5e58377_2", - "channel": "pkgs/main", - "dist_name": "vs2015_runtime-14.27.29016-h5e58377_2", - "name": "vs2015_runtime", - "platform": "win-64", - "version": "14.27.29016" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "wcwidth-0.2.5-pypi_0", - "name": "wcwidth", - "platform": "pypi", - "version": "0.2.5" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "webencodings-0.5.1-pypi_0", - "name": "webencodings", - "platform": "pypi", - "version": "0.5.1" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 1, - "build_string": "pyhd3eb1b0_1", - "channel": "pkgs/main", - "dist_name": "wheel-0.37.0-pyhd3eb1b0_1", - "name": "wheel", - "platform": "noarch", - "version": "0.37.0" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "widgetsnbextension-3.5.2-pypi_0", - "name": "widgetsnbextension", - "platform": "pypi", - "version": "3.5.2" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 2, - "build_string": "py39haa95532_2", - "channel": "pkgs/main", - "dist_name": "wincertstore-0.2-py39haa95532_2", - "name": "wincertstore", - "platform": "win-64", - "version": "0.2" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "windows-curses-2.2.0-pypi_0", - "name": "windows-curses", - "platform": "pypi", - "version": "2.2.0" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 4, - "build_string": "4", - "channel": "pkgs/main", - "dist_name": "winpty-0.4.3-4", - "name": "winpty", - "platform": "win-64", - "version": "0.4.3" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "wrapt-1.13.3-pypi_0", - "name": "wrapt", - "platform": "pypi", - "version": "1.13.3" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "wxpython-4.1.1-pypi_0", - "name": "wxpython", - "platform": "pypi", - "version": "4.1.1" - }, - { - "base_url": "https://conda.anaconda.org/pypi", - "build_number": 0, - "build_string": "pypi_0", - "channel": "pypi", - "dist_name": "xlsxwriter-1.4.5-pypi_0", - "name": "xlsxwriter", - "platform": "pypi", - "version": "1.4.5" - }, - { - "base_url": "https://repo.anaconda.com/pkgs/main", - "build_number": 4, - "build_string": "h62dcd97_4", - "channel": "pkgs/main", - "dist_name": "zlib-1.2.11-h62dcd97_4", - "name": "zlib", - "platform": "win-64", - "version": "1.2.11" - } -] diff --git a/tests/env/packages/env_test_argparse-addons.py b/tests/env/packages/env_test_argparse-addons.py deleted file mode 100644 index 2eb766e2..00000000 --- a/tests/env/packages/env_test_argparse-addons.py +++ /dev/null @@ -1,84 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -# pylint: disable=invalid-name - -"""Testing 'argparse-addons' package""" - -import argparse -import logging - -# package to test -import argparse_addons # pylint: disable=unused-import - - -def main(): - """Testing 'argparse-addons' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - - # start test arguments - # https://github.com/eerimoq/argparse_addons/blob/af6c473f176a41b26c17da354c008bf87257bfe6/examples/integer.py - parser.add_argument("--min-max", type=argparse_addons.Integer(0, 255)) - parser.add_argument("--min", type=argparse_addons.Integer(0, None)) - parser.add_argument("--max", type=argparse_addons.Integer(None, 255)) - parser.add_argument("--any", type=argparse_addons.Integer()) - # end - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - logging.debug(f"{argparse_addons.__name__} {argparse_addons.__version__}") - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_astroid.py b/tests/env/packages/env_test_astroid.py deleted file mode 100644 index 59e1b65f..00000000 --- a/tests/env/packages/env_test_astroid.py +++ /dev/null @@ -1,107 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'astroid' package""" - -import argparse -import logging -import unittest - -# package to test -import astroid -from astroid import builder - - -class BoundMethodModelTest(unittest.TestCase): - """Example from - https://github.com/PyCQA/astroid/blob/1d14e985baf8847be60b81b7f6140e8606fd862a/tests/unittest_object_model.py#L79 - """ - - def test_bound_method_model(self): - """Example from - https://github.com/PyCQA/astroid/blob/1d14e985baf8847be60b81b7f6140e8606fd862a/tests/unittest_object_model.py#L80 - """ - ast_nodes = builder.extract_node( - """ - class A: - def test(self): pass - a = A() - a.test.__func__ #@ - a.test.__self__ #@ - """ - ) - - func = next(ast_nodes[0].infer()) - self.assertIsInstance(func, astroid.FunctionDef) - self.assertEqual(func.name, "test") - - self_ = next(ast_nodes[1].infer()) - self.assertIsInstance(self_, astroid.Instance) - self.assertEqual(self_.name, "A") - - -def main(): - """Testing 'astroid' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - logging.debug(f"{astroid.__name__} {astroid.__version__}") - - d = BoundMethodModelTest() - d.test_bound_method_model() - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_atk-1.0_linux.py b/tests/env/packages/env_test_atk-1.0_linux.py deleted file mode 100644 index 4aef1897..00000000 --- a/tests/env/packages/env_test_atk-1.0_linux.py +++ /dev/null @@ -1,73 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -# pylint: disable=invalid-name - -"""Testing 'env_test_atk-1.0_linux' package""" - -import argparse -import logging - -# nothing to test - - -def main(): - """Testing 'env_test_atk-1.0_linux' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_attrs.py b/tests/env/packages/env_test_attrs.py deleted file mode 100644 index 8ec1ceff..00000000 --- a/tests/env/packages/env_test_attrs.py +++ /dev/null @@ -1,80 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'attrs' package""" - -import argparse -import logging - -# package to test -import attr - - -def main(): - """Testing 'attrs' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - logging.debug(f"{attr.__name__} {attr.__version__}") - - @attr.s - class Empty: # pylint: disable=missing-class-docstring,too-few-public-methods - pass - - Empty() - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_babel.py b/tests/env/packages/env_test_babel.py deleted file mode 100644 index 4412310c..00000000 --- a/tests/env/packages/env_test_babel.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'babel' package""" - -import argparse -import logging - -# package to test -import babel # pylint: disable=unused-import - - -def main(): - """Testing 'babel' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_backcall.py b/tests/env/packages/env_test_backcall.py deleted file mode 100644 index 2af1eed8..00000000 --- a/tests/env/packages/env_test_backcall.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'backcall' package""" - -import argparse -import logging - -# package to test -import backcall # pylint: disable=unused-import - - -def main(): - """Testing 'backcall' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_beautifulsoup4.py b/tests/env/packages/env_test_beautifulsoup4.py deleted file mode 100644 index 07f15db4..00000000 --- a/tests/env/packages/env_test_beautifulsoup4.py +++ /dev/null @@ -1,74 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'beautifulsoup4' package""" - -import argparse -import logging - -# package to test -import bs4 - - -def main(): - """Testing 'bs4' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - logging.debug(f"{bs4.__name__} {bs4.__version__}") - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_bitstruct.py b/tests/env/packages/env_test_bitstruct.py deleted file mode 100644 index ab11ecbc..00000000 --- a/tests/env/packages/env_test_bitstruct.py +++ /dev/null @@ -1,76 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'bitstruct' package""" - -import argparse -import logging - -# package to test -import bitstruct - - -def main(): - """Testing 'bitstruct' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - assert bitstruct.pack("u1u3u4s16", 1, 2, 3, -4) == b"\xa3\xff\xfc" - assert bitstruct.unpack("u1u3u4s16", b"\xa3\xff\xfc") == (1, 2, 3, -4) - assert bitstruct.calcsize("u1u3u4s16") == 24 - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_black.py b/tests/env/packages/env_test_black.py deleted file mode 100644 index f6aa60d4..00000000 --- a/tests/env/packages/env_test_black.py +++ /dev/null @@ -1,81 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'black' package""" - -import argparse -import logging - -# package to test -import black -from click.testing import CliRunner - - -def main(): - """Testing 'black' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - def test_black(): - """test black helper function""" - runner = CliRunner() - result = runner.invoke(black.main, ["--help"]) - assert result.exit_code == 0, result.output - - test_black() - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_bleach.py b/tests/env/packages/env_test_bleach.py deleted file mode 100644 index 785e751a..00000000 --- a/tests/env/packages/env_test_bleach.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'bleach' package""" - -import argparse -import logging - -# package to test -import bleach # pylint: disable=unused-import - - -def main(): - """Testing 'bleach' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_bokeh.py b/tests/env/packages/env_test_bokeh.py deleted file mode 100644 index bd81011b..00000000 --- a/tests/env/packages/env_test_bokeh.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'bokeh' package""" - -import argparse -import logging - -# package to test -import bokeh # pylint: disable=unused-import - - -def main(): - """Testing 'bokeh' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_bottle.py b/tests/env/packages/env_test_bottle.py deleted file mode 100644 index f1129e37..00000000 --- a/tests/env/packages/env_test_bottle.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'bottle' package""" - -import argparse -import logging - -# package to test -import bottle # pylint: disable=unused-import - - -def main(): - """Testing 'bottle' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_brotlipy_linux.py b/tests/env/packages/env_test_brotlipy_linux.py deleted file mode 100644 index 0fa9900d..00000000 --- a/tests/env/packages/env_test_brotlipy_linux.py +++ /dev/null @@ -1,69 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'brotlipy' package""" - -import argparse -import logging - - -def main(): - """Testing 'brotlipy' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_ca-certificates.py b/tests/env/packages/env_test_ca-certificates.py deleted file mode 100644 index 4d490974..00000000 --- a/tests/env/packages/env_test_ca-certificates.py +++ /dev/null @@ -1,73 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -# pylint: disable=invalid-name - -"""Testing 'ca-certificates' package""" - -import argparse -import logging - -# tested by certifi - - -def main(): - """Testing 'ca-certificates' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_cairo_linux.py b/tests/env/packages/env_test_cairo_linux.py deleted file mode 100644 index a26166a0..00000000 --- a/tests/env/packages/env_test_cairo_linux.py +++ /dev/null @@ -1,69 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'cairo' package""" - -import argparse -import logging - - -def main(): - """Testing 'cairo' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_cantools.py b/tests/env/packages/env_test_cantools.py deleted file mode 100644 index b90e945d..00000000 --- a/tests/env/packages/env_test_cantools.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'cantools' package""" - -import argparse -import logging - -# package to test -import cantools # pylint: disable=unused-import - - -def main(): - """Testing 'cantools' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_certifi.py b/tests/env/packages/env_test_certifi.py deleted file mode 100644 index cad4da0e..00000000 --- a/tests/env/packages/env_test_certifi.py +++ /dev/null @@ -1,74 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'certifi' package""" - -import argparse -import logging - -# package to test -import certifi - - -def main(): - """Testing 'certifi' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - certifi.where() - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_cffconvert.py b/tests/env/packages/env_test_cffconvert.py deleted file mode 100644 index 71392f89..00000000 --- a/tests/env/packages/env_test_cffconvert.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'cffconvert' package""" - -import argparse -import logging - -# package to test -import cffconvert.cli.cli # pylint: disable=unused-import - - -def main(): - """Testing 'cffconvert' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_cffi.py b/tests/env/packages/env_test_cffi.py deleted file mode 100644 index b4821d2a..00000000 --- a/tests/env/packages/env_test_cffi.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'cffi' package""" - -import argparse -import logging - -# package to test -import cffi # pylint: disable=unused-import - - -def main(): - """Testing 'cffi' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_charset-normalizer.py b/tests/env/packages/env_test_charset-normalizer.py deleted file mode 100644 index 6fe8eeda..00000000 --- a/tests/env/packages/env_test_charset-normalizer.py +++ /dev/null @@ -1,77 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -# pylint: disable=invalid-name - -"""Testing 'charset-normalizer' package""" - -import argparse -import logging - -# package to test -import charset_normalizer - - -def main(): - """Testing 'charset-normalizer' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - logging.debug(f"{charset_normalizer.__name__} {charset_normalizer.__version__}") - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_click.py b/tests/env/packages/env_test_click.py deleted file mode 100644 index 494c0f3d..00000000 --- a/tests/env/packages/env_test_click.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'click' package""" - -import argparse -import logging - -# package to test -import click # pylint: disable=unused-import - - -def main(): - """Testing 'click' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_cloudpickle.py b/tests/env/packages/env_test_cloudpickle.py deleted file mode 100644 index d3d90f86..00000000 --- a/tests/env/packages/env_test_cloudpickle.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'cloudpickle' package""" - -import argparse -import logging - -# package to test -import cloudpickle # pylint: disable=unused-import - - -def main(): - """Testing 'cloudpickle' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_colorama.py b/tests/env/packages/env_test_colorama.py deleted file mode 100644 index c74c2b92..00000000 --- a/tests/env/packages/env_test_colorama.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'colorama' package""" - -import argparse -import logging - -# package to test -import colorama # pylint: disable=unused-import - - -def main(): - """Testing 'colorama' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_console_shortcut_win32.py b/tests/env/packages/env_test_console_shortcut_win32.py deleted file mode 100644 index 7cb42d0c..00000000 --- a/tests/env/packages/env_test_console_shortcut_win32.py +++ /dev/null @@ -1,71 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'console_shortcut' package""" - -import argparse -import logging - -# nothing to test - - -def main(): - """Testing 'console_shortcut' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_coverage.py b/tests/env/packages/env_test_coverage.py deleted file mode 100644 index c1f57967..00000000 --- a/tests/env/packages/env_test_coverage.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'coverage' package""" - -import argparse -import logging - -# package to test -import coverage # pylint: disable=unused-import - - -def main(): - """Testing 'coverage' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_crcmod.py b/tests/env/packages/env_test_crcmod.py deleted file mode 100644 index 8923a7dc..00000000 --- a/tests/env/packages/env_test_crcmod.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'crcmod' package""" - -import argparse -import logging - -# package to test -import crcmod # pylint: disable=unused-import - - -def main(): - """Testing 'crcmod' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_cycler.py b/tests/env/packages/env_test_cycler.py deleted file mode 100644 index 079736d3..00000000 --- a/tests/env/packages/env_test_cycler.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'cycler' package""" - -import argparse -import logging - -# package to test -import cycler # pylint: disable=unused-import - - -def main(): - """Testing 'cycler' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_dask.py b/tests/env/packages/env_test_dask.py deleted file mode 100644 index 347d211f..00000000 --- a/tests/env/packages/env_test_dask.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'dask' package""" - -import argparse -import logging - -# package to test -import dask # pylint: disable=unused-import - - -def main(): - """Testing 'dask' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_debugpy.py b/tests/env/packages/env_test_debugpy.py deleted file mode 100644 index d2da13d9..00000000 --- a/tests/env/packages/env_test_debugpy.py +++ /dev/null @@ -1,74 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'debugpy' package""" - -import argparse -import logging - -# package to test -import debugpy - - -def main(): - """Testing 'debugpy' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - logging.debug(f"{debugpy.__name__} {debugpy.__version__}") - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_decorator.py b/tests/env/packages/env_test_decorator.py deleted file mode 100644 index bd7bd4ed..00000000 --- a/tests/env/packages/env_test_decorator.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'decorator' package""" - -import argparse -import logging - -# package to test -import decorator # pylint: disable=unused-import - - -def main(): - """Testing 'decorator' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_defusedxml.py b/tests/env/packages/env_test_defusedxml.py deleted file mode 100644 index 56c6b1aa..00000000 --- a/tests/env/packages/env_test_defusedxml.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'defusedxml' package""" - -import argparse -import logging - -# package to test -import defusedxml # pylint: disable=unused-import - - -def main(): - """Testing 'defusedxml' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_diskcache.py b/tests/env/packages/env_test_diskcache.py deleted file mode 100644 index edcf0004..00000000 --- a/tests/env/packages/env_test_diskcache.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'diskcache' package""" - -import argparse -import logging - -# package to test -import diskcache # pylint: disable=unused-import - - -def main(): - """Testing 'diskcache' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_docopt.py b/tests/env/packages/env_test_docopt.py deleted file mode 100644 index fa1bcd33..00000000 --- a/tests/env/packages/env_test_docopt.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'docopt' package""" - -import argparse -import logging - -# package to test -import docopt # pylint: disable=unused-import - - -def main(): - """Testing 'docopt' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_docutils.py b/tests/env/packages/env_test_docutils.py deleted file mode 100644 index efb25f17..00000000 --- a/tests/env/packages/env_test_docutils.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'docutils' package""" - -import argparse -import logging - -# package to test -import docutils # pylint: disable=unused-import - - -def main(): - """Testing 'docutils' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_doxygen_win32.py b/tests/env/packages/env_test_doxygen_win32.py deleted file mode 100644 index 07c853ce..00000000 --- a/tests/env/packages/env_test_doxygen_win32.py +++ /dev/null @@ -1,71 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'doxygen' package""" - -import argparse -import logging - -# nothing to test - - -def main(): - """Testing 'doxygen' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_entrypoints.py b/tests/env/packages/env_test_entrypoints.py deleted file mode 100644 index 3d565fb3..00000000 --- a/tests/env/packages/env_test_entrypoints.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'entrypoints' package""" - -import argparse -import logging - -# package to test -import entrypoints # pylint: disable=unused-import - - -def main(): - """Testing 'entrypoints' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_et-xmlfile.py b/tests/env/packages/env_test_et-xmlfile.py deleted file mode 100644 index 0317d987..00000000 --- a/tests/env/packages/env_test_et-xmlfile.py +++ /dev/null @@ -1,73 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -# pylint: disable=invalid-name - -"""Testing 'et-xmlfile' package""" - -import argparse -import logging - -# nothing to test - - -def main(): - """Testing 'et-xmlfile' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_expat_linux.py b/tests/env/packages/env_test_expat_linux.py deleted file mode 100644 index 0e4f7e5c..00000000 --- a/tests/env/packages/env_test_expat_linux.py +++ /dev/null @@ -1,69 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'expat' package""" - -import argparse -import logging - - -def main(): - """Testing 'expat' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_filterpy.py b/tests/env/packages/env_test_filterpy.py deleted file mode 100644 index e0ea2b9d..00000000 --- a/tests/env/packages/env_test_filterpy.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'filterpy' package""" - -import argparse -import logging - -# package to test -import filterpy # pylint: disable=unused-import - - -def main(): - """Testing 'filterpy' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_font-ttf-dejavu-sans-mono_linux.py b/tests/env/packages/env_test_font-ttf-dejavu-sans-mono_linux.py deleted file mode 100644 index 3e020a84..00000000 --- a/tests/env/packages/env_test_font-ttf-dejavu-sans-mono_linux.py +++ /dev/null @@ -1,71 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -# pylint:disable=invalid-name - -"""Testing 'font-ttf-dejavu-sans-mono' package""" - -import argparse -import logging - - -def main(): - """Testing 'font-ttf-dejavu-sans-mono' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_font-ttf-inconsolata_linux.py b/tests/env/packages/env_test_font-ttf-inconsolata_linux.py deleted file mode 100644 index e91c059a..00000000 --- a/tests/env/packages/env_test_font-ttf-inconsolata_linux.py +++ /dev/null @@ -1,71 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -# pylint:disable=invalid-name - -"""Testing 'font-ttf-inconsolata' package""" - -import argparse -import logging - - -def main(): - """Testing 'font-ttf-inconsolata' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_font-ttf-source-code-pro_linux.py b/tests/env/packages/env_test_font-ttf-source-code-pro_linux.py deleted file mode 100644 index a2dbf520..00000000 --- a/tests/env/packages/env_test_font-ttf-source-code-pro_linux.py +++ /dev/null @@ -1,71 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -# pylint:disable=invalid-name - -"""Testing 'font-ttf-source-code-pro' package""" - -import argparse -import logging - - -def main(): - """Testing 'font-ttf-source-code-pro' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_font-ttf-ubuntu_linux.py b/tests/env/packages/env_test_font-ttf-ubuntu_linux.py deleted file mode 100644 index 92fea760..00000000 --- a/tests/env/packages/env_test_font-ttf-ubuntu_linux.py +++ /dev/null @@ -1,71 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -# pylint:disable=invalid-name - -"""Testing 'font-ttf-ubuntu' package""" - -import argparse -import logging - - -def main(): - """Testing 'font-ttf-ubuntu' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_fontconfig_linux.py b/tests/env/packages/env_test_fontconfig_linux.py deleted file mode 100644 index 28cabed1..00000000 --- a/tests/env/packages/env_test_fontconfig_linux.py +++ /dev/null @@ -1,69 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'fontconfig' package""" - -import argparse -import logging - - -def main(): - """Testing 'fontconfig' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_fonts-anaconda_linux.py b/tests/env/packages/env_test_fonts-anaconda_linux.py deleted file mode 100644 index 66aef2f4..00000000 --- a/tests/env/packages/env_test_fonts-anaconda_linux.py +++ /dev/null @@ -1,71 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -# pylint:disable=invalid-name - -"""Testing 'fonts-anaconda' package""" - -import argparse -import logging - - -def main(): - """Testing 'fonts-anaconda' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_fonts-conda-ecosystem_linux.py b/tests/env/packages/env_test_fonts-conda-ecosystem_linux.py deleted file mode 100644 index d51ca7b6..00000000 --- a/tests/env/packages/env_test_fonts-conda-ecosystem_linux.py +++ /dev/null @@ -1,71 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -# pylint:disable=invalid-name - -"""Testing 'fonts-conda-ecosystem' package""" - -import argparse -import logging - - -def main(): - """Testing 'fonts-conda-ecosystem' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_freetype_linux.py b/tests/env/packages/env_test_freetype_linux.py deleted file mode 100644 index ed5a7ecb..00000000 --- a/tests/env/packages/env_test_freetype_linux.py +++ /dev/null @@ -1,69 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'freetype' package""" - -import argparse -import logging - - -def main(): - """Testing 'freetype' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_fribidi_linux.py b/tests/env/packages/env_test_fribidi_linux.py deleted file mode 100644 index 6d130aa5..00000000 --- a/tests/env/packages/env_test_fribidi_linux.py +++ /dev/null @@ -1,69 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'fribidi' package""" - -import argparse -import logging - - -def main(): - """Testing 'fribidi' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_fsspec.py b/tests/env/packages/env_test_fsspec.py deleted file mode 100644 index 5d5b725e..00000000 --- a/tests/env/packages/env_test_fsspec.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'fsspec' package""" - -import argparse -import logging - -# package to test -import fsspec # pylint: disable=unused-import - - -def main(): - """Testing 'fsspec' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_gcovr.py b/tests/env/packages/env_test_gcovr.py deleted file mode 100644 index e55b741e..00000000 --- a/tests/env/packages/env_test_gcovr.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'gcovr' package""" - -import argparse -import logging - -# package to test -import gcovr # pylint: disable=unused-import - - -def main(): - """Testing 'gcovr' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_gdk-pixbuf_linux.py b/tests/env/packages/env_test_gdk-pixbuf_linux.py deleted file mode 100644 index 07560a0d..00000000 --- a/tests/env/packages/env_test_gdk-pixbuf_linux.py +++ /dev/null @@ -1,71 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -# pylint:disable=invalid-name - -"""Testing 'gdk-pixbuf' package""" - -import argparse -import logging - - -def main(): - """Testing 'gdk-pixbuf' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_gettext_linux.py b/tests/env/packages/env_test_gettext_linux.py deleted file mode 100644 index 6c76b9f5..00000000 --- a/tests/env/packages/env_test_gettext_linux.py +++ /dev/null @@ -1,69 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'gettext' package""" - -import argparse -import logging - - -def main(): - """Testing 'gettext' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_gitdb.py b/tests/env/packages/env_test_gitdb.py deleted file mode 100644 index 686178d7..00000000 --- a/tests/env/packages/env_test_gitdb.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'gitdb' package""" - -import argparse -import logging - -# package to test -import gitdb # pylint: disable=unused-import - - -def main(): - """Testing 'gitdb' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_gitpython.py b/tests/env/packages/env_test_gitpython.py deleted file mode 100644 index a2b1e975..00000000 --- a/tests/env/packages/env_test_gitpython.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'gitpython' package""" - -import argparse -import logging - -# package to test -import git # pylint: disable=unused-import - - -def main(): - """Testing 'gitpython' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_glib_linux.py b/tests/env/packages/env_test_glib_linux.py deleted file mode 100644 index d3529b28..00000000 --- a/tests/env/packages/env_test_glib_linux.py +++ /dev/null @@ -1,69 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'glib' package""" - -import argparse -import logging - - -def main(): - """Testing 'glib' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_gobject-introspection_linux.py b/tests/env/packages/env_test_gobject-introspection_linux.py deleted file mode 100644 index 27946f92..00000000 --- a/tests/env/packages/env_test_gobject-introspection_linux.py +++ /dev/null @@ -1,71 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -# pylint:disable=invalid-name - -"""Testing 'gobject-introspection' package""" - -import argparse -import logging - - -def main(): - """Testing 'gobject-introspection' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_gprof2dot.py b/tests/env/packages/env_test_gprof2dot.py deleted file mode 100644 index 0d9a640c..00000000 --- a/tests/env/packages/env_test_gprof2dot.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'gprof2dot' package""" - -import argparse -import logging - -# package to test -import gprof2dot # pylint: disable=unused-import - - -def main(): - """Testing 'gprof2dot' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_graphite2_linux.py b/tests/env/packages/env_test_graphite2_linux.py deleted file mode 100644 index 887b9a57..00000000 --- a/tests/env/packages/env_test_graphite2_linux.py +++ /dev/null @@ -1,69 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'graphite2' package""" - -import argparse -import logging - - -def main(): - """Testing 'graphite2' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_graphviz_win32.py b/tests/env/packages/env_test_graphviz_win32.py deleted file mode 100644 index e9dbb855..00000000 --- a/tests/env/packages/env_test_graphviz_win32.py +++ /dev/null @@ -1,71 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'graphviz' package""" - -import argparse -import logging - -# nothing to test - - -def main(): - """Testing 'graphviz' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_gst-plugins-base_linux.py b/tests/env/packages/env_test_gst-plugins-base_linux.py deleted file mode 100644 index 71655ffb..00000000 --- a/tests/env/packages/env_test_gst-plugins-base_linux.py +++ /dev/null @@ -1,71 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -# pylint:disable=invalid-name - -"""Testing 'gst-plugins-base' package""" - -import argparse -import logging - - -def main(): - """Testing 'gst-plugins-base' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_gstreamer_linux.py b/tests/env/packages/env_test_gstreamer_linux.py deleted file mode 100644 index e5be04fc..00000000 --- a/tests/env/packages/env_test_gstreamer_linux.py +++ /dev/null @@ -1,69 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'gstreamer' package""" - -import argparse -import logging - - -def main(): - """Testing 'gstreamer' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_gtk2_linux.py b/tests/env/packages/env_test_gtk2_linux.py deleted file mode 100644 index e991d506..00000000 --- a/tests/env/packages/env_test_gtk2_linux.py +++ /dev/null @@ -1,69 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'gtk2' package""" - -import argparse -import logging - - -def main(): - """Testing 'gtk2' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_harfbuzz_linux.py b/tests/env/packages/env_test_harfbuzz_linux.py deleted file mode 100644 index e62563f5..00000000 --- a/tests/env/packages/env_test_harfbuzz_linux.py +++ /dev/null @@ -1,69 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'harfbuzz' package""" - -import argparse -import logging - - -def main(): - """Testing 'harfbuzz' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_httplib2.py b/tests/env/packages/env_test_httplib2.py deleted file mode 100644 index 540a98e4..00000000 --- a/tests/env/packages/env_test_httplib2.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'httplib2' package""" - -import argparse -import logging - -# package to test -import httplib2 # pylint: disable=unused-import - - -def main(): - """Testing 'httplib2' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_icu_linux.py b/tests/env/packages/env_test_icu_linux.py deleted file mode 100644 index b4f93d19..00000000 --- a/tests/env/packages/env_test_icu_linux.py +++ /dev/null @@ -1,69 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'icu' package""" - -import argparse -import logging - - -def main(): - """Testing 'icu' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_idna.py b/tests/env/packages/env_test_idna.py deleted file mode 100644 index 6fd91a35..00000000 --- a/tests/env/packages/env_test_idna.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'idna' package""" - -import argparse -import logging - -# package to test -import idna # pylint: disable=unused-import - - -def main(): - """Testing 'idna' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_imagesize.py b/tests/env/packages/env_test_imagesize.py deleted file mode 100644 index 6faebc66..00000000 --- a/tests/env/packages/env_test_imagesize.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'imagesize' package""" - -import argparse -import logging - -# package to test -import imagesize # pylint: disable=unused-import - - -def main(): - """Testing 'imagesize' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_ipykernel.py b/tests/env/packages/env_test_ipykernel.py deleted file mode 100644 index 301374c9..00000000 --- a/tests/env/packages/env_test_ipykernel.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'ipykernel' package""" - -import argparse -import logging - -# package to test -import ipykernel # pylint: disable=unused-import - - -def main(): - """Testing 'ipykernel' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_ipython-genutils.py b/tests/env/packages/env_test_ipython-genutils.py deleted file mode 100644 index ec92baa9..00000000 --- a/tests/env/packages/env_test_ipython-genutils.py +++ /dev/null @@ -1,74 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -# pylint: disable=invalid-name - -"""Testing 'ipython_genutils' package""" - -import argparse -import logging - -# package to test -import ipython_genutils # pylint: disable=unused-import - - -def main(): - """Testing 'ipython_genutils' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_ipython.py b/tests/env/packages/env_test_ipython.py deleted file mode 100644 index ee3f36ee..00000000 --- a/tests/env/packages/env_test_ipython.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'ipython' package""" - -import argparse -import logging - -# package to test -import IPython # pylint: disable=unused-import - - -def main(): - """Testing 'ipython' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_ipywidgets.py b/tests/env/packages/env_test_ipywidgets.py deleted file mode 100644 index 741eeb22..00000000 --- a/tests/env/packages/env_test_ipywidgets.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'ipywidgets' package""" - -import argparse -import logging - -# package to test -import ipywidgets # pylint: disable=unused-import - - -def main(): - """Testing 'ipywidgets' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_isort.py b/tests/env/packages/env_test_isort.py deleted file mode 100644 index 8f14ce54..00000000 --- a/tests/env/packages/env_test_isort.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'isort' package""" - -import argparse -import logging - -# package to test -import isort # pylint: disable=unused-import - - -def main(): - """Testing 'isort' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_jdcal.py b/tests/env/packages/env_test_jdcal.py deleted file mode 100644 index e1cb379e..00000000 --- a/tests/env/packages/env_test_jdcal.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'jdcal' package""" - -import argparse -import logging - -# package to test -import jdcal # pylint: disable=unused-import - - -def main(): - """Testing 'jdcal' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_jedi.py b/tests/env/packages/env_test_jedi.py deleted file mode 100644 index b96fe931..00000000 --- a/tests/env/packages/env_test_jedi.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'jedi' package""" - -import argparse -import logging - -# package to test -import jedi # pylint: disable=unused-import - - -def main(): - """Testing 'jedi' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_jinja2.py b/tests/env/packages/env_test_jinja2.py deleted file mode 100644 index 5fce5d75..00000000 --- a/tests/env/packages/env_test_jinja2.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'jinja2' package""" - -import argparse -import logging - -# package to test -import jinja2 # pylint: disable=unused-import - - -def main(): - """Testing 'jinja2' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_joblib.py b/tests/env/packages/env_test_joblib.py deleted file mode 100644 index d8b88cde..00000000 --- a/tests/env/packages/env_test_joblib.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'joblib' package""" - -import argparse -import logging - -# package to test -import joblib # pylint: disable=unused-import - - -def main(): - """Testing 'joblib' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_jpeg_linux.py b/tests/env/packages/env_test_jpeg_linux.py deleted file mode 100644 index b42044ea..00000000 --- a/tests/env/packages/env_test_jpeg_linux.py +++ /dev/null @@ -1,69 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'jpeg' package""" - -import argparse -import logging - - -def main(): - """Testing 'jpeg' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_jsonschema.py b/tests/env/packages/env_test_jsonschema.py deleted file mode 100644 index 421cc81b..00000000 --- a/tests/env/packages/env_test_jsonschema.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'jsonschema' package""" - -import argparse -import logging - -# package to test -import jsonschema # pylint: disable=unused-import - - -def main(): - """Testing 'jsonschema' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_jupyter-client.py b/tests/env/packages/env_test_jupyter-client.py deleted file mode 100644 index c5651870..00000000 --- a/tests/env/packages/env_test_jupyter-client.py +++ /dev/null @@ -1,74 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'jupyter_client' package""" - -# pylint: disable=invalid-name - -import argparse -import logging - -# package to test -import jupyter_client # pylint: disable=unused-import - - -def main(): - """Testing 'jupyter_client' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_jupyter-console.py b/tests/env/packages/env_test_jupyter-console.py deleted file mode 100644 index 80f2fe5e..00000000 --- a/tests/env/packages/env_test_jupyter-console.py +++ /dev/null @@ -1,75 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -# pylint: disable=invalid-name - -"""Testing 'jupyter_console' package""" - - -import argparse -import logging - -# package to test -import jupyter_console # pylint: disable=unused-import - - -def main(): - """Testing 'jupyter_console' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_jupyter-core.py b/tests/env/packages/env_test_jupyter-core.py deleted file mode 100644 index f02f677a..00000000 --- a/tests/env/packages/env_test_jupyter-core.py +++ /dev/null @@ -1,74 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -# pylint: disable=invalid-name - -"""Testing 'jupyter_core' package""" - -import argparse -import logging - -# package to test -import jupyter_core # pylint: disable=unused-import - - -def main(): - """Testing 'jupyter_core' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_jupyter.py b/tests/env/packages/env_test_jupyter.py deleted file mode 100644 index 73c97827..00000000 --- a/tests/env/packages/env_test_jupyter.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'jupyter' package""" - -import argparse -import logging - -# package to test -import jupyter # pylint: disable=unused-import - - -def main(): - """Testing 'jupyter' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_jupyterlab-pygments.py b/tests/env/packages/env_test_jupyterlab-pygments.py deleted file mode 100644 index 2f1525d1..00000000 --- a/tests/env/packages/env_test_jupyterlab-pygments.py +++ /dev/null @@ -1,74 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -# pylint: disable=invalid-name - -"""Testing 'jupyterlab_pygments' package""" - -import argparse -import logging - -# package to test -import jupyterlab_pygments # pylint: disable=unused-import - - -def main(): - """Testing 'jupyterlab_pygments' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_jupyterlab-widgets.py b/tests/env/packages/env_test_jupyterlab-widgets.py deleted file mode 100644 index d78cab28..00000000 --- a/tests/env/packages/env_test_jupyterlab-widgets.py +++ /dev/null @@ -1,76 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'kiwisolver' package""" - -# pylint: disable=invalid-name - -import argparse -import logging - -# package to test -import jupyterlab_widgets - - -def main(): - """Testing 'kiwisolver' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - logging.debug(f"{jupyterlab_widgets.__name__} {jupyterlab_widgets.__version__}") - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_kiwisolver.py b/tests/env/packages/env_test_kiwisolver.py deleted file mode 100644 index c24b30f6..00000000 --- a/tests/env/packages/env_test_kiwisolver.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'kiwisolver' package""" - -import argparse -import logging - -# package to test -import kiwisolver # pylint: disable=unused-import - - -def main(): - """Testing 'kiwisolver' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_latexcodec.py b/tests/env/packages/env_test_latexcodec.py deleted file mode 100644 index c08623fe..00000000 --- a/tests/env/packages/env_test_latexcodec.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'latexcodec' package""" - -import argparse -import logging - -# package to test -import latexcodec # pylint: disable=unused-import - - -def main(): - """Testing 'latexcodec' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_lazy-object-proxy.py b/tests/env/packages/env_test_lazy-object-proxy.py deleted file mode 100644 index e4109998..00000000 --- a/tests/env/packages/env_test_lazy-object-proxy.py +++ /dev/null @@ -1,74 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -# pylint: disable=invalid-name - -"""Testing 'lazy-object-proxy' package""" - -import argparse -import logging - -# package to test -import lazy_object_proxy # pylint: disable=unused-import - - -def main(): - """Testing 'lazy-object-proxy' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_ld_impl_linux-64_linux.py b/tests/env/packages/env_test_ld_impl_linux-64_linux.py deleted file mode 100644 index 30c43bd7..00000000 --- a/tests/env/packages/env_test_ld_impl_linux-64_linux.py +++ /dev/null @@ -1,71 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -# pylint:disable=invalid-name - -"""Testing 'ld_impl_linux-64' package""" - -import argparse -import logging - - -def main(): - """Testing 'ld_impl_linux-64' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_libffi_linux.py b/tests/env/packages/env_test_libffi_linux.py deleted file mode 100644 index 086bbbc3..00000000 --- a/tests/env/packages/env_test_libffi_linux.py +++ /dev/null @@ -1,69 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'libffi' package""" - -import argparse -import logging - - -def main(): - """Testing 'libffi' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_libgcc-ng_linux.py b/tests/env/packages/env_test_libgcc-ng_linux.py deleted file mode 100644 index 000a281f..00000000 --- a/tests/env/packages/env_test_libgcc-ng_linux.py +++ /dev/null @@ -1,71 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -# pylint:disable=invalid-name - -"""Testing 'libgcc-ng' package""" - -import argparse -import logging - - -def main(): - """Testing 'libgcc-ng' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_libglib_linux.py b/tests/env/packages/env_test_libglib_linux.py deleted file mode 100644 index 299bc334..00000000 --- a/tests/env/packages/env_test_libglib_linux.py +++ /dev/null @@ -1,69 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'libglib' package""" - -import argparse -import logging - - -def main(): - """Testing 'libglib' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_libglu_linux.py b/tests/env/packages/env_test_libglu_linux.py deleted file mode 100644 index 6b6fe9d7..00000000 --- a/tests/env/packages/env_test_libglu_linux.py +++ /dev/null @@ -1,70 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'libglu' package""" - -import argparse -import logging - - -def main(): - """Testing 'libglu' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_libgomp_linux.py b/tests/env/packages/env_test_libgomp_linux.py deleted file mode 100644 index 2796bab0..00000000 --- a/tests/env/packages/env_test_libgomp_linux.py +++ /dev/null @@ -1,69 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'libgomp' package""" - -import argparse -import logging - - -def main(): - """Testing 'libgomp' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_libiconv_linux.py b/tests/env/packages/env_test_libiconv_linux.py deleted file mode 100644 index b4a61632..00000000 --- a/tests/env/packages/env_test_libiconv_linux.py +++ /dev/null @@ -1,69 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'libiconv' package""" - -import argparse -import logging - - -def main(): - """Testing 'libiconv' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_libogg_linux.py b/tests/env/packages/env_test_libogg_linux.py deleted file mode 100644 index 53a8314f..00000000 --- a/tests/env/packages/env_test_libogg_linux.py +++ /dev/null @@ -1,69 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'libogg' package""" - -import argparse -import logging - - -def main(): - """Testing 'libogg' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_libopus_linux.py b/tests/env/packages/env_test_libopus_linux.py deleted file mode 100644 index 333093ad..00000000 --- a/tests/env/packages/env_test_libopus_linux.py +++ /dev/null @@ -1,69 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'libopus' package""" - -import argparse -import logging - - -def main(): - """Testing 'libopus' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_libpng_linux.py b/tests/env/packages/env_test_libpng_linux.py deleted file mode 100644 index f294eafe..00000000 --- a/tests/env/packages/env_test_libpng_linux.py +++ /dev/null @@ -1,69 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'libpng' package""" - -import argparse -import logging - - -def main(): - """Testing 'libpng' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_libstdcxx-ng_linux.py b/tests/env/packages/env_test_libstdcxx-ng_linux.py deleted file mode 100644 index d54b329a..00000000 --- a/tests/env/packages/env_test_libstdcxx-ng_linux.py +++ /dev/null @@ -1,71 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -# pylint:disable=invalid-name - -"""Testing 'libstdcxx-ng' package""" - -import argparse -import logging - - -def main(): - """Testing 'libstdcxx-ng' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_libtiff_linux.py b/tests/env/packages/env_test_libtiff_linux.py deleted file mode 100644 index 8c6b7975..00000000 --- a/tests/env/packages/env_test_libtiff_linux.py +++ /dev/null @@ -1,69 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'libtiff' package""" - -import argparse -import logging - - -def main(): - """Testing 'libtiff' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_libuuid_linux.py b/tests/env/packages/env_test_libuuid_linux.py deleted file mode 100644 index cbaaa7b5..00000000 --- a/tests/env/packages/env_test_libuuid_linux.py +++ /dev/null @@ -1,69 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'libuuid' package""" - -import argparse -import logging - - -def main(): - """Testing 'libuuid' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_libvorbis_linux.py b/tests/env/packages/env_test_libvorbis_linux.py deleted file mode 100644 index fbf7ca20..00000000 --- a/tests/env/packages/env_test_libvorbis_linux.py +++ /dev/null @@ -1,69 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'libvorbis' package""" - -import argparse -import logging - - -def main(): - """Testing 'libvorbis' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_libwebp-base_linux.py b/tests/env/packages/env_test_libwebp-base_linux.py deleted file mode 100644 index 90535ac9..00000000 --- a/tests/env/packages/env_test_libwebp-base_linux.py +++ /dev/null @@ -1,71 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -# pylint:disable=invalid-name - -"""Testing 'libwebp-base' package""" - -import argparse -import logging - - -def main(): - """Testing 'libwebp-base' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_libxcb_linux.py b/tests/env/packages/env_test_libxcb_linux.py deleted file mode 100644 index ec7a8cbc..00000000 --- a/tests/env/packages/env_test_libxcb_linux.py +++ /dev/null @@ -1,69 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'libxcb' package""" - -import argparse -import logging - - -def main(): - """Testing 'libxcb' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_libxml2_linux.py b/tests/env/packages/env_test_libxml2_linux.py deleted file mode 100644 index 220c8e40..00000000 --- a/tests/env/packages/env_test_libxml2_linux.py +++ /dev/null @@ -1,69 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'libxml2' package""" - -import argparse -import logging - - -def main(): - """Testing 'libxml2' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_locket.py b/tests/env/packages/env_test_locket.py deleted file mode 100644 index 9cc452b4..00000000 --- a/tests/env/packages/env_test_locket.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'locket' package""" - -import argparse -import logging - -# package to test -import locket # pylint: disable=unused-import - - -def main(): - """Testing 'locket' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_lxml.py b/tests/env/packages/env_test_lxml.py deleted file mode 100644 index 68d81946..00000000 --- a/tests/env/packages/env_test_lxml.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'lxml' package""" - -import argparse -import logging - -# package to test -import lxml # pylint: disable=unused-import - - -def main(): - """Testing 'lxml' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_lz4-c_linux.py b/tests/env/packages/env_test_lz4-c_linux.py deleted file mode 100644 index 19a263e8..00000000 --- a/tests/env/packages/env_test_lz4-c_linux.py +++ /dev/null @@ -1,71 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -# pylint:disable=invalid-name - -"""Testing 'lz4-c' package""" - -import argparse -import logging - - -def main(): - """Testing 'lz4-c' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_markdown.py b/tests/env/packages/env_test_markdown.py deleted file mode 100644 index 845c3915..00000000 --- a/tests/env/packages/env_test_markdown.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'markdown' package""" - -import argparse -import logging - -# package to test -import markdown # pylint: disable=unused-import - - -def main(): - """Testing 'markdown' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_markupsafe.py b/tests/env/packages/env_test_markupsafe.py deleted file mode 100644 index b41fd927..00000000 --- a/tests/env/packages/env_test_markupsafe.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'markupsafe' package""" - -import argparse -import logging - -# package to test -import markupsafe # pylint: disable=unused-import - - -def main(): - """Testing 'markupsafe' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_matplotlib-inline.py b/tests/env/packages/env_test_matplotlib-inline.py deleted file mode 100644 index b633c022..00000000 --- a/tests/env/packages/env_test_matplotlib-inline.py +++ /dev/null @@ -1,74 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'matplotlib' package""" - -# pylint: disable=invalid-name - -import argparse -import logging - -# package to test -import matplotlib # pylint: disable=unused-import - - -def main(): - """Testing 'matplotlib' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_matplotlib.py b/tests/env/packages/env_test_matplotlib.py deleted file mode 100644 index eb1edcaa..00000000 --- a/tests/env/packages/env_test_matplotlib.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'matplotlib' package""" - -import argparse -import logging - -# package to test -import matplotlib # pylint: disable=unused-import - - -def main(): - """Testing 'matplotlib' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_mccabe.py b/tests/env/packages/env_test_mccabe.py deleted file mode 100644 index 25a97a06..00000000 --- a/tests/env/packages/env_test_mccabe.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'mccabe' package""" - -import argparse -import logging - -# package to test -import mccabe # pylint: disable=unused-import - - -def main(): - """Testing 'mccabe' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_mistune.py b/tests/env/packages/env_test_mistune.py deleted file mode 100644 index 683e72a4..00000000 --- a/tests/env/packages/env_test_mistune.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'mistune' package""" - -import argparse -import logging - -# package to test -import mistune # pylint: disable=unused-import - - -def main(): - """Testing 'mistune' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_msgpack_linux.py b/tests/env/packages/env_test_msgpack_linux.py deleted file mode 100644 index bac4eb5d..00000000 --- a/tests/env/packages/env_test_msgpack_linux.py +++ /dev/null @@ -1,69 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'msgpack' package""" - -import argparse -import logging - - -def main(): - """Testing 'msgpack' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_mypy-extensions.py b/tests/env/packages/env_test_mypy-extensions.py deleted file mode 100644 index 1b6c8733..00000000 --- a/tests/env/packages/env_test_mypy-extensions.py +++ /dev/null @@ -1,74 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -# pylint: disable=invalid-name - -"""Testing 'mypy-extensions' package""" - -import argparse -import logging - -# package to test -import mypy_extensions # pylint: disable=unused-import - - -def main(): - """Testing 'mypy-extensions' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_mypy.py b/tests/env/packages/env_test_mypy.py deleted file mode 100644 index 3f07b3e6..00000000 --- a/tests/env/packages/env_test_mypy.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'mypy' package""" - -import argparse -import logging - -# package to test -import mypy # pylint: disable=unused-import - - -def main(): - """Testing 'mypy' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_nbclient.py b/tests/env/packages/env_test_nbclient.py deleted file mode 100644 index 645ddd21..00000000 --- a/tests/env/packages/env_test_nbclient.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'nbclient' package""" - -import argparse -import logging - -# package to test -import nbclient # pylint: disable=unused-import - - -def main(): - """Testing 'nbclient' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_nbconvert.py b/tests/env/packages/env_test_nbconvert.py deleted file mode 100644 index 4d31bb4d..00000000 --- a/tests/env/packages/env_test_nbconvert.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'nbconvert' package""" - -import argparse -import logging - -# package to test -import nbconvert # pylint: disable=unused-import - - -def main(): - """Testing 'nbconvert' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_nbformat.py b/tests/env/packages/env_test_nbformat.py deleted file mode 100644 index da084a56..00000000 --- a/tests/env/packages/env_test_nbformat.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'nbformat' package""" - -import argparse -import logging - -# package to test -import nbformat # pylint: disable=unused-import - - -def main(): - """Testing 'nbformat' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_ncurses_linux.py b/tests/env/packages/env_test_ncurses_linux.py deleted file mode 100644 index fbad252e..00000000 --- a/tests/env/packages/env_test_ncurses_linux.py +++ /dev/null @@ -1,69 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'ncurses' package""" - -import argparse -import logging - - -def main(): - """Testing 'ncurses' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_nest-asyncio.py b/tests/env/packages/env_test_nest-asyncio.py deleted file mode 100644 index 62dfcb7e..00000000 --- a/tests/env/packages/env_test_nest-asyncio.py +++ /dev/null @@ -1,74 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -# pylint: disable=invalid-name - -"""Testing 'nest-asyncio' package""" - -import argparse -import logging - -# package to test -import nest_asyncio # pylint: disable=unused-import - - -def main(): - """Testing 'nest-asyncio' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_ninja_linux.py b/tests/env/packages/env_test_ninja_linux.py deleted file mode 100644 index 73158e38..00000000 --- a/tests/env/packages/env_test_ninja_linux.py +++ /dev/null @@ -1,69 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'ninja' package""" - -import argparse -import logging - - -def main(): - """Testing 'ninja' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_notebook.py b/tests/env/packages/env_test_notebook.py deleted file mode 100644 index cc1e30f7..00000000 --- a/tests/env/packages/env_test_notebook.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'notebook' package""" - -import argparse -import logging - -# package to test -import notebook # pylint: disable=unused-import - - -def main(): - """Testing 'notebook' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_numpy.py b/tests/env/packages/env_test_numpy.py deleted file mode 100644 index 7bfaee7a..00000000 --- a/tests/env/packages/env_test_numpy.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'numpy' package""" - -import argparse -import logging - -# package to test -import numpy # pylint: disable=unused-import - - -def main(): - """Testing 'numpy' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_openpyxl.py b/tests/env/packages/env_test_openpyxl.py deleted file mode 100644 index a2a211de..00000000 --- a/tests/env/packages/env_test_openpyxl.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'openpyxl' package""" - -import argparse -import logging - -# package to test -import openpyxl # pylint: disable=unused-import - - -def main(): - """Testing 'openpyxl' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_openssl.py b/tests/env/packages/env_test_openssl.py deleted file mode 100644 index 21b8eb60..00000000 --- a/tests/env/packages/env_test_openssl.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'openssl' package""" - -import argparse -import logging - -# package to test -# nothing to test - - -def main(): - """Testing 'openssl' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_packaging.py b/tests/env/packages/env_test_packaging.py deleted file mode 100644 index 23bfb218..00000000 --- a/tests/env/packages/env_test_packaging.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'packaging' package""" - -import argparse -import logging - -# package to test -import packaging # pylint: disable=unused-import - - -def main(): - """Testing 'packaging' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_pandas-stubs.py b/tests/env/packages/env_test_pandas-stubs.py deleted file mode 100644 index e430a5b5..00000000 --- a/tests/env/packages/env_test_pandas-stubs.py +++ /dev/null @@ -1,74 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'pandas' package""" - -# pylint: disable=invalid-name - -import argparse -import logging - -# package to test -import pandas # pylint: disable=unused-import - - -def main(): - """Testing 'pandas' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_pandas.py b/tests/env/packages/env_test_pandas.py deleted file mode 100644 index 562027a7..00000000 --- a/tests/env/packages/env_test_pandas.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'pandas' package""" - -import argparse -import logging - -# package to test -import pandas # pylint: disable=unused-import - - -def main(): - """Testing 'pandas' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_pandocfilters.py b/tests/env/packages/env_test_pandocfilters.py deleted file mode 100644 index 64da33c5..00000000 --- a/tests/env/packages/env_test_pandocfilters.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'pandocfilters' package""" - -import argparse -import logging - -# package to test -import pandocfilters # pylint: disable=unused-import - - -def main(): - """Testing 'pandocfilters' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_pango_linux.py b/tests/env/packages/env_test_pango_linux.py deleted file mode 100644 index 8df7d320..00000000 --- a/tests/env/packages/env_test_pango_linux.py +++ /dev/null @@ -1,69 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'pango' package""" - -import argparse -import logging - - -def main(): - """Testing 'pango' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_parso.py b/tests/env/packages/env_test_parso.py deleted file mode 100644 index f6926710..00000000 --- a/tests/env/packages/env_test_parso.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'parso' package""" - -import argparse -import logging - -# package to test -import parso # pylint: disable=unused-import - - -def main(): - """Testing 'parso' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_partd.py b/tests/env/packages/env_test_partd.py deleted file mode 100644 index 8d0b8c8d..00000000 --- a/tests/env/packages/env_test_partd.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'partd' package""" - -import argparse -import logging - -# package to test -import partd # pylint: disable=unused-import - - -def main(): - """Testing 'partd' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_pathlib2_linux.py b/tests/env/packages/env_test_pathlib2_linux.py deleted file mode 100644 index b0fdfe70..00000000 --- a/tests/env/packages/env_test_pathlib2_linux.py +++ /dev/null @@ -1,69 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'pathlib2' package""" - -import argparse -import logging - - -def main(): - """Testing 'pathlib2' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_patsy.py b/tests/env/packages/env_test_patsy.py deleted file mode 100644 index 311e9cee..00000000 --- a/tests/env/packages/env_test_patsy.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'patsy' package""" - -import argparse -import logging - -# package to test -import patsy # pylint: disable=unused-import - - -def main(): - """Testing 'patsy' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_pcre_linux.py b/tests/env/packages/env_test_pcre_linux.py deleted file mode 100644 index 2964f4c6..00000000 --- a/tests/env/packages/env_test_pcre_linux.py +++ /dev/null @@ -1,69 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'pcre' package""" - -import argparse -import logging - - -def main(): - """Testing 'pcre' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_pexpect_linux.py b/tests/env/packages/env_test_pexpect_linux.py deleted file mode 100644 index 3cb6273b..00000000 --- a/tests/env/packages/env_test_pexpect_linux.py +++ /dev/null @@ -1,69 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'pexpect' package""" - -import argparse -import logging - - -def main(): - """Testing 'pexpect' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_pickleshare.py b/tests/env/packages/env_test_pickleshare.py deleted file mode 100644 index 2e0fc4eb..00000000 --- a/tests/env/packages/env_test_pickleshare.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'pickleshare' package""" - -import argparse -import logging - -# package to test -import pickleshare # pylint: disable=unused-import - - -def main(): - """Testing 'pickleshare' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_pillow.py b/tests/env/packages/env_test_pillow.py deleted file mode 100644 index 276fff97..00000000 --- a/tests/env/packages/env_test_pillow.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'pillow' package""" - -import argparse -import logging - -# package to test -import PIL # pylint: disable=unused-import - - -def main(): - """Testing 'pillow' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_pip-licenses.py b/tests/env/packages/env_test_pip-licenses.py deleted file mode 100644 index a85c6b44..00000000 --- a/tests/env/packages/env_test_pip-licenses.py +++ /dev/null @@ -1,74 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -# pylint: disable=invalid-name - -"""Testing 'pip-licenses' package""" - -import argparse -import logging - -# package to test -import piplicenses # pylint: disable=unused-import - - -def main(): - """Testing 'pip-licenses' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_pip.py b/tests/env/packages/env_test_pip.py deleted file mode 100644 index 77c6e28e..00000000 --- a/tests/env/packages/env_test_pip.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'pip' package""" - -import argparse -import logging - -# package to test -import pip # pylint: disable=unused-import - - -def main(): - """Testing 'pip' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_pixman_linux.py b/tests/env/packages/env_test_pixman_linux.py deleted file mode 100644 index 7c553320..00000000 --- a/tests/env/packages/env_test_pixman_linux.py +++ /dev/null @@ -1,69 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'pixman' package""" - -import argparse -import logging - - -def main(): - """Testing 'pixman' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_plantuml-markdown.py b/tests/env/packages/env_test_plantuml-markdown.py deleted file mode 100644 index fcb0d701..00000000 --- a/tests/env/packages/env_test_plantuml-markdown.py +++ /dev/null @@ -1,73 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -# pylint: disable=invalid-name - -"""Testing 'plantuml-markdown' package""" - -import argparse -import logging - -# nothing to test - - -def main(): - """Testing 'plantuml-markdown' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_plantuml.py b/tests/env/packages/env_test_plantuml.py deleted file mode 100644 index bb06ec43..00000000 --- a/tests/env/packages/env_test_plantuml.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'plantuml' package""" - -import argparse -import logging - -# package to test -import plantuml # pylint: disable=unused-import - - -def main(): - """Testing 'plantuml' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_platformdirs.py b/tests/env/packages/env_test_platformdirs.py deleted file mode 100644 index bd2c97af..00000000 --- a/tests/env/packages/env_test_platformdirs.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'platformdirs' package""" - -import argparse -import logging - -# package to test -import platformdirs # pylint: disable=unused-import - - -def main(): - """Testing 'platformdirs' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_powershell_shortcut_win32.py b/tests/env/packages/env_test_powershell_shortcut_win32.py deleted file mode 100644 index 385f0a45..00000000 --- a/tests/env/packages/env_test_powershell_shortcut_win32.py +++ /dev/null @@ -1,71 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'powershell_shortcut' package""" - -import argparse -import logging - -# nothing to test - - -def main(): - """Testing 'powershell_shortcut' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_prometheus-client.py b/tests/env/packages/env_test_prometheus-client.py deleted file mode 100644 index 28bdaa27..00000000 --- a/tests/env/packages/env_test_prometheus-client.py +++ /dev/null @@ -1,79 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'prometheus_client' package""" - -# pylint: disable=invalid-name - -import argparse -import logging - -# package to test -import prometheus_client - - -def main(): - """Testing 'prometheus_client' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - # https://github.com/prometheus/client_python#counter - c = prometheus_client.Counter("my_failures", "Description of counter") - c.inc() # Increment by 1 - c.inc(1.6) # Increment by given value - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_prompt-toolkit.py b/tests/env/packages/env_test_prompt-toolkit.py deleted file mode 100644 index c13c5c41..00000000 --- a/tests/env/packages/env_test_prompt-toolkit.py +++ /dev/null @@ -1,74 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -# pylint: disable=invalid-name - -"""Testing 'prompt-toolkit' package""" - -import argparse -import logging - -# package to test -import prompt_toolkit # pylint: disable=unused-import - - -def main(): - """Testing 'prompt-toolkit' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_psutil.py b/tests/env/packages/env_test_psutil.py deleted file mode 100644 index 69e5501a..00000000 --- a/tests/env/packages/env_test_psutil.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'psutil' package""" - -import argparse -import logging - -# package to test -import psutil # pylint: disable=unused-import - - -def main(): - """Testing 'psutil' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_ptable.py b/tests/env/packages/env_test_ptable.py deleted file mode 100644 index e5162355..00000000 --- a/tests/env/packages/env_test_ptable.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'ptable' package""" - -import argparse -import logging - -# package to test -import prettytable # pylint: disable=unused-import - - -def main(): - """Testing 'ptable' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_pthread-stubs_linux.py b/tests/env/packages/env_test_pthread-stubs_linux.py deleted file mode 100644 index 7f6d1470..00000000 --- a/tests/env/packages/env_test_pthread-stubs_linux.py +++ /dev/null @@ -1,71 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -# pylint:disable=invalid-name - -"""Testing 'pthread-stubs' package""" - -import argparse -import logging - - -def main(): - """Testing 'pthread-stubs' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_ptyprocess_linux.py b/tests/env/packages/env_test_ptyprocess_linux.py deleted file mode 100644 index 15281bfb..00000000 --- a/tests/env/packages/env_test_ptyprocess_linux.py +++ /dev/null @@ -1,69 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'ptyprocess' package""" - -import argparse -import logging - - -def main(): - """Testing 'ptyprocess' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_pybtex-docutils.py b/tests/env/packages/env_test_pybtex-docutils.py deleted file mode 100644 index 559066a4..00000000 --- a/tests/env/packages/env_test_pybtex-docutils.py +++ /dev/null @@ -1,97 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -# pylint: disable=invalid-name - -"""Testing 'pybtex-docutils' package""" - -import argparse -import io -import logging - -# package to test -import pybtex.database.input.bibtex -import pybtex.plugin - - -def main(): - """Testing 'pybtex-docutils' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - # documentation example from - # https://pybtex-docutils.readthedocs.io/en/latest/quickstart.html#minimal-example - style = pybtex.plugin.find_plugin("pybtex.style.formatting", "plain")() - backend = pybtex.plugin.find_plugin("pybtex.backends", "docutils")() - parser = pybtex.database.input.bibtex.Parser() - data = parser.parse_stream( - io.StringIO( - """ - @Book{1985:lindley, - author = {D. Lindley}, - title = {Making Decisions}, - publisher = {Wiley}, - year = {1985}, - edition = {2nd}, - } - """ - ) - ) - for entry in style.format_entries(data.entries.values()): - backend.paragraph(entry) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_pybtex.py b/tests/env/packages/env_test_pybtex.py deleted file mode 100644 index 212cbe57..00000000 --- a/tests/env/packages/env_test_pybtex.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'pybtex' package""" - -import argparse -import logging - -# package to test -import pybtex # pylint: disable=unused-import - - -def main(): - """Testing 'pybtex' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_pycparser.py b/tests/env/packages/env_test_pycparser.py deleted file mode 100644 index 62e78032..00000000 --- a/tests/env/packages/env_test_pycparser.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'pycparser' package""" - -import argparse -import logging - -# package to test -import pycparser # pylint: disable=unused-import - - -def main(): - """Testing 'pycparser' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_pyenchant.py b/tests/env/packages/env_test_pyenchant.py deleted file mode 100644 index 87db421d..00000000 --- a/tests/env/packages/env_test_pyenchant.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'pyenchant' package""" - -import argparse -import logging - -# package to test -import enchant # pylint: disable=unused-import - - -def main(): - """Testing 'pyenchant' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_pygments.py b/tests/env/packages/env_test_pygments.py deleted file mode 100644 index b2b4cdf2..00000000 --- a/tests/env/packages/env_test_pygments.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'pygments' package""" - -import argparse -import logging - -# package to test -import pygments # pylint: disable=unused-import - - -def main(): - """Testing 'pygments' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_pykwalify.py b/tests/env/packages/env_test_pykwalify.py deleted file mode 100644 index 04c95c4d..00000000 --- a/tests/env/packages/env_test_pykwalify.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'pykwalify' package""" - -import argparse -import logging - -# package to test -import pykwalify # pylint: disable=unused-import - - -def main(): - """Testing 'pykwalify' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_pylint.py b/tests/env/packages/env_test_pylint.py deleted file mode 100644 index 65f3850b..00000000 --- a/tests/env/packages/env_test_pylint.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'pylint' package""" - -import argparse -import logging - -# package to test -import pylint # pylint: disable=unused-import - - -def main(): - """Testing 'pylint' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_pyopenssl_linux.py b/tests/env/packages/env_test_pyopenssl_linux.py deleted file mode 100644 index 6c8d8604..00000000 --- a/tests/env/packages/env_test_pyopenssl_linux.py +++ /dev/null @@ -1,69 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'pyopenssl' package""" - -import argparse -import logging - - -def main(): - """Testing 'pyopenssl' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_pyparsing.py b/tests/env/packages/env_test_pyparsing.py deleted file mode 100644 index 697c7b21..00000000 --- a/tests/env/packages/env_test_pyparsing.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'pyparsing' package""" - -import argparse -import logging - -# package to test -import pyparsing # pylint: disable=unused-import - - -def main(): - """Testing 'pyparsing' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_pypubsub_linux.py b/tests/env/packages/env_test_pypubsub_linux.py deleted file mode 100644 index 40cccb34..00000000 --- a/tests/env/packages/env_test_pypubsub_linux.py +++ /dev/null @@ -1,69 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'pypubsub' package""" - -import argparse -import logging - - -def main(): - """Testing 'pypubsub' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_pyrsistent.py b/tests/env/packages/env_test_pyrsistent.py deleted file mode 100644 index 615f77bf..00000000 --- a/tests/env/packages/env_test_pyrsistent.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'pyrsistent' package""" - -import argparse -import logging - -# package to test -import pyrsistent # pylint: disable=unused-import - - -def main(): - """Testing 'pyrsistent' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_pyserial.py b/tests/env/packages/env_test_pyserial.py deleted file mode 100644 index 6f277663..00000000 --- a/tests/env/packages/env_test_pyserial.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'pyserial' package""" - -import argparse -import logging - -# package to test -import serial # pylint: disable=unused-import - - -def main(): - """Testing 'pyserial' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_pysimplegui.py b/tests/env/packages/env_test_pysimplegui.py deleted file mode 100644 index 853ae1df..00000000 --- a/tests/env/packages/env_test_pysimplegui.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'pysimplegui' package""" - -import argparse -import logging - -# package to test -import PySimpleGUI # pylint: disable=unused-import - - -def main(): - """Testing 'pysimplegui' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_pysocks_linux.py b/tests/env/packages/env_test_pysocks_linux.py deleted file mode 100644 index cfe098ee..00000000 --- a/tests/env/packages/env_test_pysocks_linux.py +++ /dev/null @@ -1,69 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'pysocks' package""" - -import argparse -import logging - - -def main(): - """Testing 'pysocks' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_python-can.py b/tests/env/packages/env_test_python-can.py deleted file mode 100644 index ade6dffd..00000000 --- a/tests/env/packages/env_test_python-can.py +++ /dev/null @@ -1,74 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -# pylint: disable=invalid-name - -"""Testing 'python-can' package""" - -import argparse -import logging - -# package to test -import can # pylint: disable=unused-import - - -def main(): - """Testing 'python-can' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_python-datauri.py b/tests/env/packages/env_test_python-datauri.py deleted file mode 100644 index 1f638e74..00000000 --- a/tests/env/packages/env_test_python-datauri.py +++ /dev/null @@ -1,76 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -# pylint: disable=invalid-name - -"""Testing 'python-datauri' package""" - -import argparse -import logging - -# package to test -import datauri - - -def main(): - """Testing 'python-datauri' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - logging.debug(datauri.__name__) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_python-lin.py b/tests/env/packages/env_test_python-lin.py deleted file mode 100644 index c561cb71..00000000 --- a/tests/env/packages/env_test_python-lin.py +++ /dev/null @@ -1,74 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'python-lin' package""" - -# pylint: disable=invalid-name - -import argparse -import logging - -# package to test -import lin # pylint: disable=unused-import - - -def main(): - """Testing 'python-lin' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_python-markdown-math.py b/tests/env/packages/env_test_python-markdown-math.py deleted file mode 100644 index e0d184ef..00000000 --- a/tests/env/packages/env_test_python-markdown-math.py +++ /dev/null @@ -1,74 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -# pylint: disable=invalid-name - -"""Testing 'python-markdown-math' package""" - -import argparse -import logging - -# package to test -import markdown # pylint: disable=unused-import - - -def main(): - """Testing 'python-markdown-math' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_python-uds.py b/tests/env/packages/env_test_python-uds.py deleted file mode 100644 index 183cd1fa..00000000 --- a/tests/env/packages/env_test_python-uds.py +++ /dev/null @@ -1,74 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'python-uds' package""" - -# pylint: disable=invalid-name - -import argparse -import logging - -# package to test -import uds # pylint: disable=unused-import - - -def main(): - """Testing 'python-uds' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_python_abi_linux.py b/tests/env/packages/env_test_python_abi_linux.py deleted file mode 100644 index 1136740c..00000000 --- a/tests/env/packages/env_test_python_abi_linux.py +++ /dev/null @@ -1,69 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'python_abi' package""" - -import argparse -import logging - - -def main(): - """Testing 'python_abi' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_pytz.py b/tests/env/packages/env_test_pytz.py deleted file mode 100644 index 0bdb9bed..00000000 --- a/tests/env/packages/env_test_pytz.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'pytz' package""" - -import argparse -import logging - -# package to test -import pytz # pylint: disable=unused-import - - -def main(): - """Testing 'pytz' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_pyvisa.py b/tests/env/packages/env_test_pyvisa.py deleted file mode 100644 index e5ffb077..00000000 --- a/tests/env/packages/env_test_pyvisa.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'pyvisa' package""" - -import argparse -import logging - -# package to test -import pyvisa # pylint: disable=unused-import - - -def main(): - """Testing 'pyvisa' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_pywin32_win32.py b/tests/env/packages/env_test_pywin32_win32.py deleted file mode 100644 index b128b609..00000000 --- a/tests/env/packages/env_test_pywin32_win32.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'pywin32' package""" - -import argparse -import logging - -# package to test -import win32api # pylint: disable=unused-import,import-error - - -def main(): - """Testing 'pywin32' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_pywinpty_win32.py b/tests/env/packages/env_test_pywinpty_win32.py deleted file mode 100644 index 2103bb0c..00000000 --- a/tests/env/packages/env_test_pywinpty_win32.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'pywinpty' package""" - -import argparse -import logging - -# package to test -import winpty # pylint: disable=unused-import,import-error - - -def main(): - """Testing 'pywinpty' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_pyyaml.py b/tests/env/packages/env_test_pyyaml.py deleted file mode 100644 index 2876347c..00000000 --- a/tests/env/packages/env_test_pyyaml.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'pyyaml' package""" - -import argparse -import logging - -# package to test -import yaml # pylint: disable=unused-import - - -def main(): - """Testing 'pyyaml' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_pyzmq.py b/tests/env/packages/env_test_pyzmq.py deleted file mode 100644 index 2ff7dc93..00000000 --- a/tests/env/packages/env_test_pyzmq.py +++ /dev/null @@ -1,71 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'pyzmq' package""" - -import argparse -import logging - -# nothing to test - - -def main(): - """Testing 'pyzmq' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_qtconsole.py b/tests/env/packages/env_test_qtconsole.py deleted file mode 100644 index 98d6c190..00000000 --- a/tests/env/packages/env_test_qtconsole.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'qtconsole' package""" - -import argparse -import logging - -# package to test -import qtconsole # pylint: disable=unused-import - - -def main(): - """Testing 'qtconsole' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_qtpy.py b/tests/env/packages/env_test_qtpy.py deleted file mode 100644 index b1b129dc..00000000 --- a/tests/env/packages/env_test_qtpy.py +++ /dev/null @@ -1,74 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'qtpy' package""" - -import argparse -import logging - -# package to test -# import qtpy # pylint: disable=unused-import -# we do not use qtpy (or qt at all), it is just pulled in as a (unused) -# dependency of a package that we use. - - -def main(): - """Testing 'qtpy' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_readline_linux.py b/tests/env/packages/env_test_readline_linux.py deleted file mode 100644 index 88ae4704..00000000 --- a/tests/env/packages/env_test_readline_linux.py +++ /dev/null @@ -1,69 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'readline' package""" - -import argparse -import logging - - -def main(): - """Testing 'readline' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_regex.py b/tests/env/packages/env_test_regex.py deleted file mode 100644 index 04ebefe3..00000000 --- a/tests/env/packages/env_test_regex.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'regex' package""" - -import argparse -import logging - -# package to test -import regex # pylint: disable=unused-import - - -def main(): - """Testing 'regex' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_requests-file.py b/tests/env/packages/env_test_requests-file.py deleted file mode 100644 index 4cead91b..00000000 --- a/tests/env/packages/env_test_requests-file.py +++ /dev/null @@ -1,78 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'requests-file' package""" - -# pylint: disable=invalid-name - -import argparse -import logging - -# package to test -import requests -from requests_file import FileAdapter - - -def main(): - """Testing 'requests-file' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - out = requests.Session() - out.mount("file://", FileAdapter()) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_requests.py b/tests/env/packages/env_test_requests.py deleted file mode 100644 index 079cd2f3..00000000 --- a/tests/env/packages/env_test_requests.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'requests' package""" - -import argparse -import logging - -# package to test -import requests # pylint: disable=unused-import - - -def main(): - """Testing 'requests' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_rope.py b/tests/env/packages/env_test_rope.py deleted file mode 100644 index 27336e81..00000000 --- a/tests/env/packages/env_test_rope.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'rope' package""" - -import argparse -import logging - -# package to test -import rope # pylint: disable=unused-import - - -def main(): - """Testing 'rope' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_rsinstrument.py b/tests/env/packages/env_test_rsinstrument.py deleted file mode 100644 index d922944c..00000000 --- a/tests/env/packages/env_test_rsinstrument.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'rsinstrument' package""" - -import argparse -import logging - -# package to test -import RsInstrument # pylint: disable=unused-import - - -def main(): - """Testing 'rsinstrument' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_ruamel-yaml-clib.py b/tests/env/packages/env_test_ruamel-yaml-clib.py deleted file mode 100644 index 68cc60cd..00000000 --- a/tests/env/packages/env_test_ruamel-yaml-clib.py +++ /dev/null @@ -1,74 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -# pylint: disable=invalid-name - -"""Testing 'ruamel_yaml' package""" - -import argparse -import logging - -# package to test -import yaml # pylint: disable=unused-import - - -def main(): - """Testing 'ruamel_yaml' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_ruamel-yaml.py b/tests/env/packages/env_test_ruamel-yaml.py deleted file mode 100644 index 08f7f21a..00000000 --- a/tests/env/packages/env_test_ruamel-yaml.py +++ /dev/null @@ -1,74 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'ruamel_yaml' package""" - -# pylint: disable=invalid-name - -import argparse -import logging - -# package to test -import yaml # pylint: disable=unused-import - - -def main(): - """Testing 'ruamel_yaml' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_scipy.py b/tests/env/packages/env_test_scipy.py deleted file mode 100644 index 27787c81..00000000 --- a/tests/env/packages/env_test_scipy.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'scipy' package""" - -import argparse -import logging - -# package to test -import scipy # pylint: disable=unused-import - - -def main(): - """Testing 'scipy' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_seaborn.py b/tests/env/packages/env_test_seaborn.py deleted file mode 100644 index a84e87c7..00000000 --- a/tests/env/packages/env_test_seaborn.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'seaborn' package""" - -import argparse -import logging - -# package to test -import seaborn # pylint: disable=unused-import - - -def main(): - """Testing 'seaborn' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_send2trash.py b/tests/env/packages/env_test_send2trash.py deleted file mode 100644 index 7212b30e..00000000 --- a/tests/env/packages/env_test_send2trash.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'send2trash' package""" - -import argparse -import logging - -# package to test -import send2trash # pylint: disable=unused-import - - -def main(): - """Testing 'send2trash' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_setuptools.py b/tests/env/packages/env_test_setuptools.py deleted file mode 100644 index 9493c4d7..00000000 --- a/tests/env/packages/env_test_setuptools.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'setuptools' package""" - -import argparse -import logging - -# package to test -import setuptools # pylint: disable=unused-import - - -def main(): - """Testing 'setuptools' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_six.py b/tests/env/packages/env_test_six.py deleted file mode 100644 index 2d8b5860..00000000 --- a/tests/env/packages/env_test_six.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'six' package""" - -import argparse -import logging - -# package to test -import six # pylint: disable=unused-import - - -def main(): - """Testing 'six' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_smmap.py b/tests/env/packages/env_test_smmap.py deleted file mode 100644 index 9a6c7f36..00000000 --- a/tests/env/packages/env_test_smmap.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'smmap' package""" - -import argparse -import logging - -# package to test -import smmap # pylint: disable=unused-import - - -def main(): - """Testing 'smmap' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_snowballstemmer.py b/tests/env/packages/env_test_snowballstemmer.py deleted file mode 100644 index edbf6592..00000000 --- a/tests/env/packages/env_test_snowballstemmer.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'snowballstemmer' package""" - -import argparse -import logging - -# package to test -import snowballstemmer # pylint: disable=unused-import - - -def main(): - """Testing 'snowballstemmer' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_sphinx-copybutton.py b/tests/env/packages/env_test_sphinx-copybutton.py deleted file mode 100644 index 0e1a0a5f..00000000 --- a/tests/env/packages/env_test_sphinx-copybutton.py +++ /dev/null @@ -1,74 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'sphinx-copybutton' package""" - -# pylint: disable=invalid-name - -import argparse -import logging - -# package to test -import sphinx_copybutton # pylint: disable=unused-import - - -def main(): - """Testing 'sphinx-copybutton' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_sphinx-panels.py b/tests/env/packages/env_test_sphinx-panels.py deleted file mode 100644 index 68782030..00000000 --- a/tests/env/packages/env_test_sphinx-panels.py +++ /dev/null @@ -1,74 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'sphinx-panels' package""" - -# pylint: disable=invalid-name - -import argparse -import logging - -# package to test -import sphinx_panels # pylint: disable=unused-import - - -def main(): - """Testing 'sphinx-panels' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_sphinx-rtd-theme.py b/tests/env/packages/env_test_sphinx-rtd-theme.py deleted file mode 100644 index 89b5293b..00000000 --- a/tests/env/packages/env_test_sphinx-rtd-theme.py +++ /dev/null @@ -1,74 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -# pylint: disable=invalid-name - -"""Testing 'sphinx-rtd-theme' package""" - -import argparse -import logging - -# package to test -import sphinx_rtd_theme # pylint: disable=unused-import - - -def main(): - """Testing 'sphinx-rtd-theme' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_sphinx.py b/tests/env/packages/env_test_sphinx.py deleted file mode 100644 index 1c327e87..00000000 --- a/tests/env/packages/env_test_sphinx.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'sphinx' package""" - -import argparse -import logging - -# package to test -import sphinx # pylint: disable=unused-import - - -def main(): - """Testing 'sphinx' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_sphinxcontrib-applehelp.py b/tests/env/packages/env_test_sphinxcontrib-applehelp.py deleted file mode 100644 index 1cb2348b..00000000 --- a/tests/env/packages/env_test_sphinxcontrib-applehelp.py +++ /dev/null @@ -1,74 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -# pylint: disable=invalid-name - -"""Testing 'sphinxcontrib-applehelp' package""" - -import argparse -import logging - -# package to test -from sphinxcontrib import applehelp # pylint: disable=unused-import - - -def main(): - """Testing 'sphinxcontrib-applehelp' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_sphinxcontrib-bibtex.py b/tests/env/packages/env_test_sphinxcontrib-bibtex.py deleted file mode 100644 index 16f11208..00000000 --- a/tests/env/packages/env_test_sphinxcontrib-bibtex.py +++ /dev/null @@ -1,74 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -# pylint: disable=invalid-name - -"""Testing 'sphinxcontrib-bibtex' package""" - -import argparse -import logging - -# package to test -from sphinxcontrib import bibtex # pylint: disable=unused-import - - -def main(): - """Testing 'sphinxcontrib-bibtex' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_sphinxcontrib-devhelp.py b/tests/env/packages/env_test_sphinxcontrib-devhelp.py deleted file mode 100644 index 01eaa957..00000000 --- a/tests/env/packages/env_test_sphinxcontrib-devhelp.py +++ /dev/null @@ -1,74 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -# pylint: disable=invalid-name - -"""Testing 'sphinxcontrib-devhelp' package""" - -import argparse -import logging - -# package to test -from sphinxcontrib import devhelp # pylint: disable=unused-import - - -def main(): - """Testing 'sphinxcontrib-devhelp' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_sphinxcontrib-htmlhelp.py b/tests/env/packages/env_test_sphinxcontrib-htmlhelp.py deleted file mode 100644 index 234ba077..00000000 --- a/tests/env/packages/env_test_sphinxcontrib-htmlhelp.py +++ /dev/null @@ -1,74 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -# pylint: disable=invalid-name - -"""Testing 'sphinxcontrib-htmlhelp' package""" - -import argparse -import logging - -# package to test -from sphinxcontrib import htmlhelp # pylint: disable=unused-import - - -def main(): - """Testing 'sphinxcontrib-htmlhelp' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_sphinxcontrib-jsmath.py b/tests/env/packages/env_test_sphinxcontrib-jsmath.py deleted file mode 100644 index 05a1f27d..00000000 --- a/tests/env/packages/env_test_sphinxcontrib-jsmath.py +++ /dev/null @@ -1,74 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -# pylint: disable=invalid-name - -"""Testing 'sphinxcontrib-jsmath' package""" - -import argparse -import logging - -# package to test -from sphinxcontrib import jsmath # pylint: disable=unused-import - - -def main(): - """Testing 'sphinxcontrib-jsmath' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_sphinxcontrib-mermaid.py b/tests/env/packages/env_test_sphinxcontrib-mermaid.py deleted file mode 100644 index aaefd0d6..00000000 --- a/tests/env/packages/env_test_sphinxcontrib-mermaid.py +++ /dev/null @@ -1,74 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'sphinxcontrib-mermaid' package""" - -# pylint: disable=invalid-name - -import argparse -import logging - -# package to test -from sphinxcontrib import mermaid # pylint: disable=unused-import - - -def main(): - """Testing 'sphinxcontrib-mermaid' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_sphinxcontrib-plantuml.py b/tests/env/packages/env_test_sphinxcontrib-plantuml.py deleted file mode 100644 index da9c5cb7..00000000 --- a/tests/env/packages/env_test_sphinxcontrib-plantuml.py +++ /dev/null @@ -1,74 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -# pylint: disable=invalid-name - -"""Testing 'sphinxcontrib-plantuml' package""" - -import argparse -import logging - -# package to test -from sphinxcontrib import plantuml # pylint: disable=unused-import - - -def main(): - """Testing 'sphinxcontrib-plantuml' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_sphinxcontrib-programoutput.py b/tests/env/packages/env_test_sphinxcontrib-programoutput.py deleted file mode 100644 index 9cbee2ed..00000000 --- a/tests/env/packages/env_test_sphinxcontrib-programoutput.py +++ /dev/null @@ -1,74 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'sphinxcontrib-programoutput' package""" - -# pylint: disable=invalid-name - -import argparse -import logging - -# package to test -from sphinxcontrib import programoutput # pylint: disable=unused-import - - -def main(): - """Testing 'sphinxcontrib-programoutput' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_sphinxcontrib-qthelp.py b/tests/env/packages/env_test_sphinxcontrib-qthelp.py deleted file mode 100644 index 33eca7d7..00000000 --- a/tests/env/packages/env_test_sphinxcontrib-qthelp.py +++ /dev/null @@ -1,74 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -# pylint: disable=invalid-name - -"""Testing 'sphinxcontrib-qthelp' package""" - -import argparse -import logging - -# package to test -from sphinxcontrib import qthelp # pylint: disable=unused-import - - -def main(): - """Testing 'sphinxcontrib-qthelp' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_sphinxcontrib-serializinghtml.py b/tests/env/packages/env_test_sphinxcontrib-serializinghtml.py deleted file mode 100644 index 3735b772..00000000 --- a/tests/env/packages/env_test_sphinxcontrib-serializinghtml.py +++ /dev/null @@ -1,74 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -# pylint: disable=invalid-name - -"""Testing 'sphinxcontrib-serializinghtml' package""" - -import argparse -import logging - -# package to test -from sphinxcontrib import serializinghtml # pylint: disable=unused-import - - -def main(): - """Testing 'sphinxcontrib-serializinghtml' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_sphinxcontrib-spelling.py b/tests/env/packages/env_test_sphinxcontrib-spelling.py deleted file mode 100644 index 8285a736..00000000 --- a/tests/env/packages/env_test_sphinxcontrib-spelling.py +++ /dev/null @@ -1,74 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -# pylint: disable=invalid-name - -"""Testing 'sphinxcontrib-spelling' package""" - -import argparse -import logging - -# package to test -from sphinxcontrib import spelling # pylint: disable=unused-import - - -def main(): - """Testing 'sphinxcontrib-spelling' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_sqlite.py b/tests/env/packages/env_test_sqlite.py deleted file mode 100644 index 296b8ee3..00000000 --- a/tests/env/packages/env_test_sqlite.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'sqlite' package""" - -import argparse -import logging - -# package to test -import sqlite3 # pylint: disable=unused-import - - -def main(): - """Testing 'sqlite' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_statsmodels.py b/tests/env/packages/env_test_statsmodels.py deleted file mode 100644 index 135927e1..00000000 --- a/tests/env/packages/env_test_statsmodels.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'statsmodels' package""" - -import argparse -import logging - -# package to test -import statsmodels # pylint: disable=unused-import - - -def main(): - """Testing 'statsmodels' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_tabulate.py b/tests/env/packages/env_test_tabulate.py deleted file mode 100644 index 63906ef4..00000000 --- a/tests/env/packages/env_test_tabulate.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'tabulate' package""" - -import argparse -import logging - -# package to test -import tabulate # pylint: disable=unused-import - - -def main(): - """Testing 'tabulate' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_tenacity.py b/tests/env/packages/env_test_tenacity.py deleted file mode 100644 index 5bd6b20f..00000000 --- a/tests/env/packages/env_test_tenacity.py +++ /dev/null @@ -1,86 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'tenacity' package""" - -import argparse -import logging -import random - -# package to test -from tenacity import retry - -# test case based on -# https://github.com/jd/tenacity/blob/a7f548520e4ee871ad8aeb354ecfa1a324c8ca19/doc/source/index.rst - - -@retry -def do_something_unreliable(): - """Test function""" - if random.randint(0, 10) > 1: - raise IOError("Broken sauce, everything is hosed!!!111one") - return "Awesome sauce!" - - -def main(): - """Testing 'tenacity' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - logging.debug(do_something_unreliable()) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_terminado.py b/tests/env/packages/env_test_terminado.py deleted file mode 100644 index d76f5adf..00000000 --- a/tests/env/packages/env_test_terminado.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'terminado' package""" - -import argparse -import logging - -# package to test -import terminado # pylint: disable=unused-import - - -def main(): - """Testing 'terminado' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_testpath.py b/tests/env/packages/env_test_testpath.py deleted file mode 100644 index 83a22ca9..00000000 --- a/tests/env/packages/env_test_testpath.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'testpath' package""" - -import argparse -import logging - -# package to test -import testpath # pylint: disable=unused-import - - -def main(): - """Testing 'testpath' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_textparser.py b/tests/env/packages/env_test_textparser.py deleted file mode 100644 index 1f42695d..00000000 --- a/tests/env/packages/env_test_textparser.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'textparser' package""" - -import argparse -import logging - -# package to test -import textparser # pylint: disable=unused-import - - -def main(): - """Testing 'textparser' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_textx.py b/tests/env/packages/env_test_textx.py deleted file mode 100644 index 8eb6aa60..00000000 --- a/tests/env/packages/env_test_textx.py +++ /dev/null @@ -1,74 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'textx' package""" - -import argparse -import logging - -# package to test -import textx - - -def main(): - """Testing 'textx' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - logging.debug(f"{textx.__name__} {textx.__version__}") - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_threadpoolctl.py b/tests/env/packages/env_test_threadpoolctl.py deleted file mode 100644 index c7c77254..00000000 --- a/tests/env/packages/env_test_threadpoolctl.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'threadpoolctl' package""" - -import argparse -import logging - -# package to test -import threadpoolctl # pylint: disable=unused-import - - -def main(): - """Testing 'threadpoolctl' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_tk_linux.py b/tests/env/packages/env_test_tk_linux.py deleted file mode 100644 index 7c663820..00000000 --- a/tests/env/packages/env_test_tk_linux.py +++ /dev/null @@ -1,69 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'tk' package""" - -import argparse -import logging - - -def main(): - """Testing 'tk' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_toml.py b/tests/env/packages/env_test_toml.py deleted file mode 100644 index 7d0f829b..00000000 --- a/tests/env/packages/env_test_toml.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'toml' package""" - -import argparse -import logging - -# package to test -import toml # pylint: disable=unused-import - - -def main(): - """Testing 'toml' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_tomli.py b/tests/env/packages/env_test_tomli.py deleted file mode 100644 index 1ce16528..00000000 --- a/tests/env/packages/env_test_tomli.py +++ /dev/null @@ -1,74 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'tomli' package""" - -import argparse -import logging - -# package to test -import tomli - - -def main(): - """Testing 'tomli' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - logging.debug(f"{tomli.__name__} {tomli.__version__}") - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_toolz.py b/tests/env/packages/env_test_toolz.py deleted file mode 100644 index 79e436c7..00000000 --- a/tests/env/packages/env_test_toolz.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'toolz' package""" - -import argparse -import logging - -# package to test -import toolz # pylint: disable=unused-import - - -def main(): - """Testing 'toolz' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_tornado.py b/tests/env/packages/env_test_tornado.py deleted file mode 100644 index 6726c1bf..00000000 --- a/tests/env/packages/env_test_tornado.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'tornado' package""" - -import argparse -import logging - -# package to test -import tornado # pylint: disable=unused-import - - -def main(): - """Testing 'tornado' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_traitlets.py b/tests/env/packages/env_test_traitlets.py deleted file mode 100644 index 20dcf2ec..00000000 --- a/tests/env/packages/env_test_traitlets.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'traitlets' package""" - -import argparse -import logging - -# package to test -import traitlets # pylint: disable=unused-import - - -def main(): - """Testing 'traitlets' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_typing-extensions.py b/tests/env/packages/env_test_typing-extensions.py deleted file mode 100644 index a3603461..00000000 --- a/tests/env/packages/env_test_typing-extensions.py +++ /dev/null @@ -1,74 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'typing_extensions' package""" - -# pylint: disable=invalid-name - -import argparse -import logging - -# package to test -import typing_extensions # pylint: disable=unused-import - - -def main(): - """Testing 'typing_extensions' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_tzdata.py b/tests/env/packages/env_test_tzdata.py deleted file mode 100644 index 8aa19097..00000000 --- a/tests/env/packages/env_test_tzdata.py +++ /dev/null @@ -1,75 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'tzdata' package""" - -import argparse -import logging - -# package to test -from datetime import datetime -from zoneinfo import ZoneInfo - -dt = datetime.now(ZoneInfo("America/New_York")) - - -def main(): - """Testing 'tzdata' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_uptime.py b/tests/env/packages/env_test_uptime.py deleted file mode 100644 index 19758247..00000000 --- a/tests/env/packages/env_test_uptime.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'uptime' package""" - -import argparse -import logging - -# package to test -import uptime # pylint: disable=unused-import - - -def main(): - """Testing 'uptime' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_urllib3.py b/tests/env/packages/env_test_urllib3.py deleted file mode 100644 index c13e0a2a..00000000 --- a/tests/env/packages/env_test_urllib3.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'urllib3' package""" - -import argparse -import logging - -# package to test -import urllib3 # pylint: disable=unused-import - - -def main(): - """Testing 'urllib3' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_vc_win32.py b/tests/env/packages/env_test_vc_win32.py deleted file mode 100644 index 5e51e895..00000000 --- a/tests/env/packages/env_test_vc_win32.py +++ /dev/null @@ -1,71 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'vc' package""" - -import argparse -import logging - -# nothing to test - - -def main(): - """Testing 'vc' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_vs2015_runtime_win32.py b/tests/env/packages/env_test_vs2015_runtime_win32.py deleted file mode 100644 index b040efb1..00000000 --- a/tests/env/packages/env_test_vs2015_runtime_win32.py +++ /dev/null @@ -1,71 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'vs2015_runtime' package""" - -import argparse -import logging - -# nothing to test - - -def main(): - """Testing 'vs2015_runtime' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_wcwidth.py b/tests/env/packages/env_test_wcwidth.py deleted file mode 100644 index dae752c9..00000000 --- a/tests/env/packages/env_test_wcwidth.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'wcwidth' package""" - -import argparse -import logging - -# package to test -import wcwidth # pylint: disable=unused-import - - -def main(): - """Testing 'wcwidth' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_webencodings.py b/tests/env/packages/env_test_webencodings.py deleted file mode 100644 index 40623f27..00000000 --- a/tests/env/packages/env_test_webencodings.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'webencodings' package""" - -import argparse -import logging - -# package to test -import webencodings # pylint: disable=unused-import - - -def main(): - """Testing 'webencodings' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_wheel.py b/tests/env/packages/env_test_wheel.py deleted file mode 100644 index 875644c4..00000000 --- a/tests/env/packages/env_test_wheel.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'wheel' package""" - -import argparse -import logging - -# package to test -import wheel # pylint: disable=unused-import - - -def main(): - """Testing 'wheel' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_widgetsnbextension.py b/tests/env/packages/env_test_widgetsnbextension.py deleted file mode 100644 index fc3a8fe1..00000000 --- a/tests/env/packages/env_test_widgetsnbextension.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'widgetsnbextension' package""" - -import argparse -import logging - -# package to test -import widgetsnbextension # pylint: disable=unused-import - - -def main(): - """Testing 'widgetsnbextension' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_wincertstore_win32.py b/tests/env/packages/env_test_wincertstore_win32.py deleted file mode 100644 index 86371011..00000000 --- a/tests/env/packages/env_test_wincertstore_win32.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'wincertstore' package""" - -import argparse -import logging - -# package to test -import wincertstore # pylint: disable=unused-import,import-error - - -def main(): - """Testing 'wincertstore' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_windows-curses_win32.py b/tests/env/packages/env_test_windows-curses_win32.py deleted file mode 100644 index 73b9a790..00000000 --- a/tests/env/packages/env_test_windows-curses_win32.py +++ /dev/null @@ -1,74 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -# pylint: disable=invalid-name - -"""Testing 'windows-curses' package""" - -import argparse - -# package to test -import curses # pylint: disable=unused-import -import logging - - -def main(): - """Testing 'windows-curses' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_winpty_win32.py b/tests/env/packages/env_test_winpty_win32.py deleted file mode 100644 index b3b252e5..00000000 --- a/tests/env/packages/env_test_winpty_win32.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'winpty' package""" - -import argparse -import logging - -# package to test -import winpty # pylint: disable=unused-import,import-error - - -def main(): - """Testing 'winpty' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_wrapt.py b/tests/env/packages/env_test_wrapt.py deleted file mode 100644 index 2cb7f181..00000000 --- a/tests/env/packages/env_test_wrapt.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'wrapt' package""" - -import argparse -import logging - -# package to test -import wrapt # pylint: disable=unused-import - - -def main(): - """Testing 'wrapt' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_xlsxwriter.py b/tests/env/packages/env_test_xlsxwriter.py deleted file mode 100644 index aba1c23f..00000000 --- a/tests/env/packages/env_test_xlsxwriter.py +++ /dev/null @@ -1,74 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'xlsxwriter' package""" - -import argparse -import logging - -# package to test -import xlsxwriter - - -def main(): - """Testing 'zlib' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - logging.debug(f"{xlsxwriter.__name__} {xlsxwriter.__version__}") - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_xz_linux.py b/tests/env/packages/env_test_xz_linux.py deleted file mode 100644 index 5de0f433..00000000 --- a/tests/env/packages/env_test_xz_linux.py +++ /dev/null @@ -1,69 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'xz' package""" - -import argparse -import logging - - -def main(): - """Testing 'xz' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_zlib.py b/tests/env/packages/env_test_zlib.py deleted file mode 100644 index 06434eaf..00000000 --- a/tests/env/packages/env_test_zlib.py +++ /dev/null @@ -1,74 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'zlib' package""" - -import argparse -import logging - -# package to test -import zlib - - -def main(): - """Testing 'zlib' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - logging.debug(f"{zlib.__name__} {zlib.__version__}") - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages/env_test_zstd_linux.py b/tests/env/packages/env_test_zstd_linux.py deleted file mode 100644 index 4e79a4b1..00000000 --- a/tests/env/packages/env_test_zstd_linux.py +++ /dev/null @@ -1,69 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Testing 'zstd' package""" - -import argparse -import logging - - -def main(): - """Testing 'zstd' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - -if __name__ == "__main__": - main() diff --git a/tests/env/packages_test.py b/tests/env/packages_test.py deleted file mode 100644 index 9c415131..00000000 --- a/tests/env/packages_test.py +++ /dev/null @@ -1,156 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Basic test of all packages in conda environment""" -import argparse -import glob -import json -import logging -import os -import pathlib -import shutil -import subprocess -import sys - -SCRIPT_DIR = os.path.dirname(os.path.realpath(__file__)) - - -def main(): - """This script tests our conda environment""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-f", - "--file", - dest="file", - action="store", - default=os.path.join(SCRIPT_DIR, f"conda_env_{sys.platform}.json"), - help="Specify environment file to test against", - ) - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - env_file = pathlib.Path(args.file) - logging.info(env_file) - env_config = json.loads(env_file.read_text(encoding="utf-8")) - logging.debug(env_config) - conda = shutil.which("conda") - logging.info(f"Conda instance at: {conda}") - if not conda: - sys.exit("Could not find conda binary.") - cmd = [conda, "list", "--json"] - # pylint: disable=consider-using-with - p = subprocess.Popen(cmd, stdout=subprocess.PIPE) - current_config = json.loads(p.communicate()[0]) - if not current_config == env_config: - raise BaseException("Environments differ.") - test_scripts = [] - for i in env_config: - tmp = os.path.join(SCRIPT_DIR, "packages", f"env_test_{i['name']}.py") - if not os.path.isfile(tmp): - tmp = os.path.join( - SCRIPT_DIR, - "packages", - f"env_test_{i['name']}_{sys.platform.lower()}.py", - ) - if not os.path.isfile(tmp): - raise FileNotFoundError(f"Could not find expected test file'{tmp}'.") - test_scripts.append(tmp) - packages = pathlib.Path(os.path.join(SCRIPT_DIR, "packages")).as_posix() - globbed_test_scripts = glob.glob(packages + "/env_test_**.py") - fixed_globbed_test_scripts = [] - for i in globbed_test_scripts: - if sys.platform.lower() == "linux": - if not i.endswith("_win32.py"): - fixed_globbed_test_scripts.append(i) - else: - continue - elif sys.platform.lower() == "win32": - if not i.endswith("_linux.py"): - fixed_globbed_test_scripts.append(i) - else: - continue - else: - sys.exit("Unsupported platform.") - logging.debug(f"Added package '{i}.") - - stemmed_globbed_test_scripts = set( - map(lambda x: pathlib.Path(x).stem, fixed_globbed_test_scripts) - ) - stemmed_test_scripts = set(map(lambda x: pathlib.Path(x).stem, test_scripts)) - difference = stemmed_globbed_test_scripts.difference(stemmed_test_scripts) - if difference: - logging.error( - f"Difference in env test python scripts detected: {sorted(difference)}" - ) - sys.exit("Exiting.") - cmd_list = zip([sys.executable] * len(test_scripts), test_scripts) - test_processes = [] - for i in cmd_list: - # pylint: disable=consider-using-with - proc = subprocess.Popen(i, stdout=subprocess.PIPE, stderr=subprocess.PIPE) - test_processes.append(proc) - - for i in test_processes: - i.wait() - exit_code = 0 - for i in test_processes: - if i.returncode: - print(i.returncode, i.args, i.stderr.read().decode("utf-8")) - exit_code += 1 - - sys.exit(exit_code) - - -if __name__ == "__main__": - main() diff --git a/tests/os-information/README.md b/tests/os-information/README.md index dfa7969d..0679739c 100644 --- a/tests/os-information/README.md +++ b/tests/os-information/README.md @@ -16,16 +16,22 @@ might use ``FreeRTOS`` specific includes, types etc. ### Functions The following regular expression can be used to check for ``FreeRTOS`` specific + - macros: - ``` + + ```text (taskENTER_CRITICAL|taskEXIT_CRITICAL) ``` + - functions: - ``` + + ```text (uxQueueMessagesWaiting|vTaskDelayUntil|xQueueReceive|xQueueSendToBack|xQueueSendToBackFromISR|xTaskGetTickCount) ``` + - types: - ``` + + ```text (QueueHandle_t|TaskHandle_t) ``` @@ -49,7 +55,7 @@ The corresponding OS agnostic macros, functions and types are listed below: The following regular expression can be used to check for ``FreeRTOS`` specific includes: -``` +```text #include.*"(atomic.h|croutine.h|deprecated_definitions.h|event_groups.h|FreeRTOS.h|FreeRTOSConfig.h|list.h|message_buffer.h|mpu_prototypes.h|mpu_wrappers.h|portable.h|projdefs.h|queue.h|semphr.h|StackMacros.h|stack_macros.h|stream_buffer.h|task.h|timers.h) ``` @@ -58,6 +64,6 @@ includes: The following regular expression can be used to check for ``FreeRTOS`` specific types and defines: -``` +```text (pdFALSE|pdTRUE|pdPASS|pdFAIL) ``` diff --git a/tests/re-names/README.md b/tests/re-names/README.md index d41b8d08..022f75ee 100644 --- a/tests/re-names/README.md +++ b/tests/re-names/README.md @@ -8,8 +8,8 @@ test (``tests/axivion/rule_config_names.py``). ## Running the Test -```console -\tools\utils\cmd\run-python-script.bat tests\re-names\test_names_regex.py +```pwsh +PS C:\Users\vulpes\Documents\foxbms-2> .\fox.ps1 run-script tests\re-names\test_names_regex.py ``` ## Adding Tests diff --git a/tests/re-names/function.json b/tests/re-names/function.json index 30cd7f68..c750591b 100644 --- a/tests/re-names/function.json +++ b/tests/re-names/function.json @@ -1,40 +1,40 @@ { - "valid": [ - "ABC_Az", - "ABC_Az1", - "ABC_I2c", - "ABC_Function", - "ABC_Function0", - "ABC_MyFunction", - "ABC_MyOtherFunction", - "ABC_MyOther0Function", - "ABC_MyOtherFunction0" - ], - "invalid": [ - "_", - "_01", - "_ab", - "a", - "ABC", - "ABC_", - "ABC_A", - "ABC_A1", - "ABC_I2", - "PREFIXONLY", - "PREFIXBUTNOUNDERSCORE", - "noprefix", - "lowercaseprefix_function", - "abc_function", - "abc_function0", - "abc_myfunction", - "abc_myotherfunction", - "abc_myother0function", - "abc_myotherfunction0", - "abc_function_s", - "abc_function_perc", - "abc_myfunction_perc", - "abc_myotherfunction_perc", - "abc_my0otherfunction_perc", - "abc_my0otherfunction1_perc" - ] + "invalid": [ + "_", + "_01", + "_ab", + "a", + "ABC", + "ABC_", + "ABC_A", + "ABC_A1", + "ABC_I2", + "PREFIXONLY", + "PREFIXBUTNOUNDERSCORE", + "noprefix", + "lowercaseprefix_function", + "abc_function", + "abc_function0", + "abc_myfunction", + "abc_myotherfunction", + "abc_myother0function", + "abc_myotherfunction0", + "abc_function_s", + "abc_function_perc", + "abc_myfunction_perc", + "abc_myotherfunction_perc", + "abc_my0otherfunction_perc", + "abc_my0otherfunction1_perc" + ], + "valid": [ + "ABC_Az", + "ABC_Az1", + "ABC_I2c", + "ABC_Function", + "ABC_Function0", + "ABC_MyFunction", + "ABC_MyOtherFunction", + "ABC_MyOther0Function", + "ABC_MyOtherFunction0" + ] } diff --git a/tests/re-names/global-variable.json b/tests/re-names/global-variable.json index 897d4b91..d761cbd4 100644 --- a/tests/re-names/global-variable.json +++ b/tests/re-names/global-variable.json @@ -1,46 +1,46 @@ { - "valid": [ - "abc_my", - "abc_my_ddegC", - "abc_myVar", - "abc_myVar1", - "abc_my1Var1", - "abc_myVar1Var", - "abc_myVar1Var1", - "abc_myVar1_mA", - "abc_myVar1_K", - "abc_myVar1_perc", - "abc_myVar1_degC", - "abc_myVar1_ddegC", - "abc_myVar1_uV" - ], - "invalid": [ - "_", - "myVar_", - "myVar", - "myVar1", - "my1Var1", - "myVar1Var", - "myVar1Var1", - "MyVar", - "MyVar1", - "My1Var1", - "MyVar1Var", - "MyVar1Var1", - "ABC_myVar", - "ABC_myVar1", - "ABC_my1Var1", - "ABC_myVar1Var", - "ABC_myVar1Var1", - "Abc_myVar", - "Abc_myVar1", - "Abc_my1Var1", - "Abc_myVar1Var", - "Abc_myVar1Var1", - "aBc_myVar", - "aBc_myVar1", - "aBc_my1Var1", - "aBc_myVar1Var", - "aBc_myVar1Var1" - ] + "invalid": [ + "_", + "myVar_", + "myVar", + "myVar1", + "my1Var1", + "myVar1Var", + "myVar1Var1", + "MyVar", + "MyVar1", + "My1Var1", + "MyVar1Var", + "MyVar1Var1", + "ABC_myVar", + "ABC_myVar1", + "ABC_my1Var1", + "ABC_myVar1Var", + "ABC_myVar1Var1", + "Abc_myVar", + "Abc_myVar1", + "Abc_my1Var1", + "Abc_myVar1Var", + "Abc_myVar1Var1", + "aBc_myVar", + "aBc_myVar1", + "aBc_my1Var1", + "aBc_myVar1Var", + "aBc_myVar1Var1" + ], + "valid": [ + "abc_my", + "abc_my_ddegC", + "abc_myVar", + "abc_myVar1", + "abc_my1Var1", + "abc_myVar1Var", + "abc_myVar1Var1", + "abc_myVar1_mA", + "abc_myVar1_K", + "abc_myVar1_perc", + "abc_myVar1_degC", + "abc_myVar1_ddegC", + "abc_myVar1_uV" + ] } diff --git a/tests/re-names/local-variable.json b/tests/re-names/local-variable.json index 4d44ef31..b7fa844c 100644 --- a/tests/re-names/local-variable.json +++ b/tests/re-names/local-variable.json @@ -1,27 +1,27 @@ { - "valid": [ - "my", - "my_ddegC", - "myVar", - "myVar1", - "my1Var1", - "myVar1Var", - "myVar1Var1", - "myVar1_mA", - "myVar1_K", - "myVar1_s", - "myVar1_ms", - "myVar1_perc", - "myVar1_degC", - "myVar1_ddegC", - "myVar1_uV" - ], - "invalid": [ - "_", - "MyVar", - "MyVar1", - "My1Var1", - "MyVar1Var", - "MyVar1Var1" - ] + "invalid": [ + "_", + "MyVar", + "MyVar1", + "My1Var1", + "MyVar1Var", + "MyVar1Var1" + ], + "valid": [ + "my", + "my_ddegC", + "myVar", + "myVar1", + "my1Var1", + "myVar1Var", + "myVar1Var1", + "myVar1_mA", + "myVar1_K", + "myVar1_s", + "myVar1_ms", + "myVar1_perc", + "myVar1_degC", + "myVar1_ddegC", + "myVar1_uV" + ] } diff --git a/tests/re-names/macro.json b/tests/re-names/macro.json index a319f621..958bbd7d 100644 --- a/tests/re-names/macro.json +++ b/tests/re-names/macro.json @@ -1,26 +1,26 @@ { - "valid": [ - "ABC_ABC", - "ABC_A123", - "ABC_123", - "ABC_123_12", - "ABC_123_AB", - "ABC_123_AB_mV", - "ABC_123_AB_perc", - "FOXBMS__ABC_ABC_123_H_", - "FOXBMS__ABC_ABC_023_H_" - ], - "invalid": [ - "_ABC", - "_ABC_", - "_abc", - "_abc_", - "abc", - "abc_", - "ABC_", - "ABC_abc", - "ABC_ABC_123_", - "FOXBMS__ABC_ABC_123_H", - "FOXBMS__ABC_ABC_123_" - ] + "invalid": [ + "_ABC", + "_ABC_", + "_abc", + "_abc_", + "abc", + "abc_", + "ABC_", + "ABC_abc", + "ABC_ABC_123_", + "FOXBMS__ABC_ABC_123_H", + "FOXBMS__ABC_ABC_123_" + ], + "valid": [ + "ABC_ABC", + "ABC_A123", + "ABC_123", + "ABC_123_12", + "ABC_123_AB", + "ABC_123_AB_mV", + "ABC_123_AB_perc", + "FOXBMS__ABC_ABC_123_H_", + "FOXBMS__ABC_ABC_023_H_" + ] } diff --git a/tests/re-names/test_names_regex.py b/tests/re-names/test_names_regex.py old mode 100644 new mode 100755 index bdc55bb6..4e2a29e3 --- a/tests/re-names/test_names_regex.py +++ b/tests/re-names/test_names_regex.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -38,8 +37,12 @@ # - "This product includes parts of foxBMS®" # - "This product is derived from foxBMS®" -"""Test regular expressions that are used to validate function, variable etc. -names in the Axivion analysis.""" +"""The Axivion analysis is also used to test that functions, variables etc. +adhere to a certain naming schema. A basic check is that names match a regular +expression regular. These regular expressions are defined in the Axivion +configuration files. +The tests as well as the expected results are in the *.json files in this +directory.""" import json import os diff --git a/tests/re-names/typedefed-enum.json b/tests/re-names/typedefed-enum.json index 7ddbc0c1..bf3770fe 100644 --- a/tests/re-names/typedefed-enum.json +++ b/tests/re-names/typedefed-enum.json @@ -1,24 +1,24 @@ { - "valid": [ - "ABC_ABC_e", - "ABC_A123_e", - "ABC_123_e", - "ABC_123_12_e", - "ABC_123_AB_e" - ], - "invalid": [ - "_ABC", - "_ABC_", - "_abc", - "_abc_", - "abc", - "abc_", - "ABC_", - "ABC_abc", - "ABC_ABC_123_", - "ABC_E", - "ABC_Ge", - "ABC_ABC_s", - "ABC_e" - ] + "invalid": [ + "_ABC", + "_ABC_", + "_abc", + "_abc_", + "abc", + "abc_", + "ABC_", + "ABC_abc", + "ABC_ABC_123_", + "ABC_E", + "ABC_Ge", + "ABC_ABC_s", + "ABC_e" + ], + "valid": [ + "ABC_ABC_e", + "ABC_A123_e", + "ABC_123_e", + "ABC_123_12_e", + "ABC_123_AB_e" + ] } diff --git a/tests/re-names/typedefed-struct.json b/tests/re-names/typedefed-struct.json index 3c482f41..94e98452 100644 --- a/tests/re-names/typedefed-struct.json +++ b/tests/re-names/typedefed-struct.json @@ -1,24 +1,24 @@ { - "valid": [ - "ABC_ABC_s", - "ABC_A123_s", - "ABC_123_s", - "ABC_123_12_s", - "ABC_123_AB_s" - ], - "invalid": [ - "_ABC", - "_ABC_", - "_abc", - "_abc_", - "abc", - "abc_", - "ABC_", - "ABC_abc", - "ABC_ABC_123_", - "ABC_S", - "ABC_ms", - "ABC_ABC_e", - "ABC_s" - ] + "invalid": [ + "_ABC", + "_ABC_", + "_abc", + "_abc_", + "abc", + "abc_", + "ABC_", + "ABC_abc", + "ABC_ABC_123_", + "ABC_S", + "ABC_ms", + "ABC_ABC_e", + "ABC_s" + ], + "valid": [ + "ABC_ABC_s", + "ABC_A123_s", + "ABC_123_s", + "ABC_123_12_s", + "ABC_123_AB_s" + ] } diff --git a/tests/scripts/.gitignore b/tests/scripts/.gitignore deleted file mode 100644 index 6350e986..00000000 --- a/tests/scripts/.gitignore +++ /dev/null @@ -1 +0,0 @@ -.coverage diff --git a/tests/scripts/gui/__init__.py b/tests/scripts/gui/__init__.py deleted file mode 100644 index 4e58ee64..00000000 --- a/tests/scripts/gui/__init__.py +++ /dev/null @@ -1,43 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -# waf-tools is not a proper python module name, but this is OK since we need -# it just for the unit test discovery -# pylint: disable-all diff --git a/tests/scripts/run_tests.bat b/tests/scripts/run_tests.bat deleted file mode 100644 index e8372d6c..00000000 --- a/tests/scripts/run_tests.bat +++ /dev/null @@ -1,87 +0,0 @@ -@REM Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -@REM All rights reserved. -@REM -@REM SPDX-License-Identifier: BSD-3-Clause -@REM -@REM Redistribution and use in source and binary forms, with or without -@REM modification, are permitted provided that the following conditions are met: -@REM -@REM 1. Redistributions of source code must retain the above copyright notice, this -@REM list of conditions and the following disclaimer. -@REM -@REM 2. Redistributions in binary form must reproduce the above copyright notice, -@REM this list of conditions and the following disclaimer in the documentation -@REM and/or other materials provided with the distribution. -@REM -@REM 3. Neither the name of the copyright holder nor the names of its -@REM contributors may be used to endorse or promote products derived from -@REM this software without specific prior written permission. -@REM -@REM THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -@REM AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -@REM IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -@REM DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -@REM FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -@REM DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -@REM SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -@REM CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -@REM OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -@REM OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -@REM -@REM We kindly request you to use one or more of the following phrases to refer to -@REM foxBMS in your hardware, software, documentation or advertising materials: -@REM -@REM - "This product uses parts of foxBMS®" -@REM - "This product includes parts of foxBMS®" -@REM - "This product is derived from foxBMS®" - -@SET BASE_DIR=%~dp0\..\.. -@PUSHD %BASE_DIR%\tests\scripts -@ECHO ========================================================================= -@ECHO Unit testing waf-tools -@CALL %BASE_DIR%\tools\utils\cmd\run-python-coverage.bat run --source=%BASE_DIR%\tools\waf-tools -m unittest discover --start-directory waf-tools --top-level-directory . -@IF %ERRORLEVEL% NEQ 0 ( - @ECHO Unit testing waf tools failed - @EXIT /b %ERRORLEVEL% -) ELSE ( - @ECHO Unit testing waf tools successful -) -@ECHO ========================================================================= -@ECHO Unit testing GUI -@CALL %BASE_DIR%\tools\utils\cmd\run-python-coverage.bat run --append --source=%BASE_DIR%\tools\gui -m unittest discover --start-directory gui --top-level-directory . -@IF %ERRORLEVEL% NEQ 0 ( - @ECHO Unit testing the GUI failed - @POPD - @EXIT /b %ERRORLEVEL% -) ELSE ( - @ECHO Unit testing GUI successful -) -@ECHO ========================================================================= -@ECHO Creating report -@CALL %BASE_DIR%\tools\utils\cmd\run-python-coverage.bat report -@IF %ERRORLEVEL% NEQ 0 ( - @ECHO Could not create coverage report - @POPD - @EXIT /b %ERRORLEVEL% -) ELSE ( - @ECHO Coverage Report created -) -@CALL %BASE_DIR%\tools\utils\cmd\run-python-coverage.bat html --directory=%BASE_DIR%\build\unit_test_scripts\ -@IF %ERRORLEVEL% NEQ 0 ( - @ECHO Could not create html coverage report - @POPD - @EXIT /b %ERRORLEVEL% -) ELSE ( - @ECHO HTML Coverage Report created -) -@CALL %BASE_DIR%\tools\utils\cmd\run-python-coverage.bat xml -o %BASE_DIR%\build\unit_test_scripts\CoberturaCoverageScripts.xml -@IF %ERRORLEVEL% NEQ 0 ( - @ECHO Could not create xml coverage report - @POPD - @EXIT /b %ERRORLEVEL% -) ELSE ( - @ECHO XML Coverage Report created -) -@ECHO ========================================================================= -@ECHO Done -@POPD diff --git a/tests/scripts/waf-core/README.md b/tests/scripts/waf-core/README.md deleted file mode 100644 index 8610574c..00000000 --- a/tests/scripts/waf-core/README.md +++ /dev/null @@ -1,6 +0,0 @@ -# unit tests for the waf core - -This directory contains a selection of unit tests taken from the -[original waf repository](https://gitlab.com/ita1024/waf/-/tree/master/tests) -at revision 3f8bb163290eb8fbfc3b26d61dd04aa5a6a29d4a. -The code belongs to its original authors. diff --git a/tests/scripts/waf-core/general/wscript b/tests/scripts/waf-core/general/wscript deleted file mode 100644 index eab051cf..00000000 --- a/tests/scripts/waf-core/general/wscript +++ /dev/null @@ -1,82 +0,0 @@ -#! /usr/bin/env python -# encoding: utf-8 -# Thomas Nagy, 2016 (ita) - -top = '.' -out = 'build' - -import functools -from waflib import Utils, Logs - -def configure(conf): - pass - -def fun1(): - return 0 - -def fun2(arg1, arg2): - return 1 - -def fun(arg1, arg2, task, one=1, two=2): - print(arg1, arg2, task, one, two) - -par1 = functools.partial(fun, 'arg1') -par2 = functools.partial(par1, 'arg2', one=11, two=22) - -def fun3(): - return 32 -par3 = functools.partial(par1, 'arg2', one=11, two=22) - -def build(bld): - - bld.failure = 0 - def disp(color, result): - Logs.pprint(color, result) - if color == 'RED': - bld.failure=1 - def stop_status(bld): - if bld.failure: - bld.fatal('One or several test failed, check the outputs above') - bld.add_post_fun(stop_status) - - def simple_hash(fun): - status = '' - try: - Utils.h_cmd(fun) - except Exception as e: - status = str(e) - return status - - def hash_test(name, fun): - ret = simple_hash(fun) - if not ret: - color = "GREEN" - else: - color = "RED" - ret = ret or 'ok' - disp(color, '%s\t\t%s' % (name, ret)) - - hash_test('simple function 1', fun1) - hash_test('simple function 2', fun1) - hash_test('simple partial', par1) - hash_test('nested partial', par2) - - def hash_twice(name, fun): - try: - ret1 = Utils.h_cmd(fun) - ret2 = Utils.h_cmd(fun) - except Exception as e: - msg = str(e) - color = 'RED' - else: - if ret1 == ret2: - msg = 'ok %r' % ret1 - color = 'GREEN' - else: - msg = '%r != %r' % (ret1, ret2) - color = 'RED' - disp(color, '%s\t\t%s' % (name, msg)) - - hash_twice('consistent on fun3', fun3) - hash_twice('consistent on par3', par3) - diff --git a/tests/scripts/waf-core/init/side_cwd/side.txt b/tests/scripts/waf-core/init/side_cwd/side.txt deleted file mode 100644 index 9c558e35..00000000 --- a/tests/scripts/waf-core/init/side_cwd/side.txt +++ /dev/null @@ -1 +0,0 @@ -. diff --git a/tests/scripts/waf-core/init/up_cwd/project/sub/test.txt b/tests/scripts/waf-core/init/up_cwd/project/sub/test.txt deleted file mode 100644 index 9c558e35..00000000 --- a/tests/scripts/waf-core/init/up_cwd/project/sub/test.txt +++ /dev/null @@ -1 +0,0 @@ -. diff --git a/tests/scripts/waf-core/init/up_cwd/project/wscript b/tests/scripts/waf-core/init/up_cwd/project/wscript deleted file mode 100644 index 226b104b..00000000 --- a/tests/scripts/waf-core/init/up_cwd/project/wscript +++ /dev/null @@ -1,58 +0,0 @@ -#! /usr/bin/env waf - -top = '.' -out = 'tmp_out' - -import os, random, time, sys - -sys.path.insert( - 1, - os.path.abspath(os.path.join("..", "..", "..", "..", "..", "..", "tools", "waf3-2.0.22-1241519b19b496207abef1f72bbf61c2")), -) -from waflib import ConfigSet, Context, Build, Configure, Utils - -Configure.autoconfig='clobber' - -def options(opt): - opt.add_option('--based', action='store', default='foo', help='base directory', dest='based') - opt.add_option('--dumpf', action='store', default='foo', help='dump config to this file', dest='dumpf') - opt.add_option('--force-autoconfig', action='store', default=False, dest='force_autoconfig') - -def configure(ctx): - # force autoconfig to depend on an always-changing file - once - if ctx.options.force_autoconfig: - fname = ctx.options.dumpf + '_autoconfig' - s = "%f%d" % (time.time(), random.randint(0, 10**9)) - Utils.writef(fname, s) - ctx.files.append(fname) - Configure.autoconfig = False - -def build(ctx): - pass - -def write_conf(ctx): - if not ctx.options.dumpf: - raise ValueError('Missing --dumpf option') - if not ctx.options.based: - raise ValueError('Missing --based option') - - def g(x): - # path from conf.options.based - based = ctx.root.find_node(ctx.options.based) - node = ctx.root.find_node(x) - return node.path_from(based) - - env = ConfigSet.ConfigSet() - env.cwd_dir = g(os.getcwd()) - env.top_dir = g(Context.top_dir) - env.out_dir = g(Context.out_dir) - env.run_dir = g(Context.run_dir) - env.launch_dir = g(Context.launch_dir) - - env.store(ctx.options.dumpf) - -for y in (Build.BuildContext, Configure.ConfigurationContext): - class tmp(y): - def execute(self, *k, **kw): - super(self.__class__, self).execute(*k, **kw) - write_conf(self) diff --git a/tests/scripts/waf-core/init/wscript b/tests/scripts/waf-core/init/wscript deleted file mode 100644 index 119477e7..00000000 --- a/tests/scripts/waf-core/init/wscript +++ /dev/null @@ -1,141 +0,0 @@ -#! /usr/bin/env python - -top = '.' -out = 'build' - -import os, shutil, sys -from waflib import ConfigSet, Context, Logs, Utils - -def options(opt): - pass - -def configure(conf): - pass - - -def run_command(ctx, *k, **kw): - with open(os.devnull, 'w') as f: - kw['stdout'] = f - ret = ctx.exec_command(*k, **kw) - if ret: - ctx.fatal('Command failed ret:%r - %r %r' % (ret, k, kw)) - return ret - -def cleanup(ctx): - for y in ('side_cwd', 'up_cwd'): - lst = ctx.path.find_node(y).ant_glob(['**/.lock-waf*']) - for k in lst: - k.delete() - - for k in ctx.path.ant_glob('**/tmp_out', dir=True): - shutil.rmtree(k.abspath()) - -def build(bld): - failures = [] - up_cwd = bld.path.find_node('up_cwd').abspath() - side_cwd = bld.path.find_node('side_cwd').abspath() - proj_cwd = bld.path.find_node('up_cwd/project').abspath() - proj_sub_cwd = bld.path.find_node('up_cwd/project/sub').abspath() - proj_out_cwd = bld.path.make_node('up_cwd/project/tmp_out').abspath() - wscript = bld.path.find_node('up_cwd/project/wscript').abspath() - - d_node = bld.path.make_node('path_to_record') - dumpf_default = d_node.abspath() - - def make_cmd(cmd, based=proj_cwd, dumpf=dumpf_default): - if Utils.is_win32: - return ['python'] + list(cmd) + ['--based=%s' % based, '--dumpf=%s' % dumpf] - return list(cmd) + ['--based=%s' % based, '--dumpf=%s' % dumpf] - - def test_cmd(cmd, cwd, test_name, cwd_dir='.', top_dir='.', out_dir='tmp_out', run_dir='.', launch_dir='.'): - cmd = make_cmd(cmd) - try: - run_command(bld, cmd, cwd=cwd) - v = ConfigSet.ConfigSet(dumpf_default) - finally: - for k in bld.path.ant_glob('**/path_to_record'): - k.delete() - - err = [] - def check_err(got, expected, var_name): - if got != expected: - Logs.pprint('RED', '- %s: %s -> got:%r expected:%r' % (test_name, var_name, got, expected)) - err.append(var_name) - - check_err(v.cwd_dir, cwd_dir, 'cwd') - check_err(v.top_dir, top_dir, 'top') - check_err(v.run_dir, run_dir, 'run') - check_err(v.out_dir, out_dir, 'out') - check_err(v.launch_dir, launch_dir, 'launch') - if err: - failures.append(test_name) - else: - Logs.pprint('GREEN', '- %s: ok' % test_name) - - exe = os.path.abspath(os.path.join(Context.launch_dir, sys.argv[0])) - - cleanup(bld) - - test_cmd([exe, 'configure'], proj_cwd, 'regular configure') - test_cmd([exe], proj_cwd, ' regular build from top') - test_cmd([exe], proj_out_cwd, ' regular build from out', launch_dir='tmp_out') - test_cmd([exe], proj_sub_cwd, ' regular build from subfolder', launch_dir='sub') - cleanup(bld) - - test_cmd([exe, 'configure', '--top=%s' % proj_cwd, '--out=%s' % proj_out_cwd], proj_cwd, 'configure with top/out from proj cwd') - test_cmd([exe], proj_cwd, ' next build from top') - test_cmd([exe], proj_out_cwd, ' next build from out', launch_dir='tmp_out') - test_cmd([exe], proj_sub_cwd, ' next build from subfolder', launch_dir='sub') - test_cmd([exe, '--top=%s' % proj_cwd, '--out=foobar'], proj_cwd, - ' next build from top, verify out_dir==lock_file.out_dir') - test_cmd([exe, '--top=%s' % proj_cwd, '--out=foobar'], proj_sub_cwd, - ' next build from subfolder, verify out_dir==lock_file.out_dir', launch_dir='sub') - cleanup(bld) - - test_cmd([exe, 'configure', '--top=%s' % proj_cwd, '--out=%s' % proj_out_cwd], up_cwd, 'configure with top/out from up cwd', - launch_dir='..') - test_cmd([exe], proj_cwd, ' next build from top') - test_cmd([exe], proj_out_cwd, ' next build from out', launch_dir='tmp_out') - test_cmd([exe], proj_sub_cwd, ' next build from subfolder', launch_dir='sub') - cleanup(bld) - - # calling the wscript currently does not work on our platform - #test_cmd([wscript, 'configure'], proj_cwd, 'wscript configure') - #test_cmd([wscript], proj_cwd, ' next build from top') - #test_cmd([wscript], proj_out_cwd, ' next build from out', launch_dir='tmp_out') - #test_cmd([wscript], proj_sub_cwd, ' next build from subfolder', launch_dir='sub') - #cleanup(bld) - - # test_cmd([wscript, 'configure', '--top=%s' % proj_cwd, '--out=%s' % proj_out_cwd], proj_cwd, 'wscript configure with top/out from proj cwd') - # test_cmd([wscript], proj_cwd, ' next build from top') - # test_cmd([wscript], proj_out_cwd, ' next build from out', launch_dir='tmp_out') - # test_cmd([wscript], proj_sub_cwd, ' next build from subfolder', launch_dir='sub') - # cleanup(bld) - - # test_cmd([wscript, 'configure', '--top=%s' % proj_cwd, '--out=%s' % proj_out_cwd], up_cwd, 'wscript configure with top/out from up cwd', - # launch_dir='..') - # test_cmd([wscript], proj_cwd, ' next build from top') - # test_cmd([wscript], proj_out_cwd, ' next build from out', launch_dir='tmp_out') - # test_cmd([wscript], proj_sub_cwd, ' next build from subfolder', launch_dir='sub') - # cleanup(bld) - - # test_cmd([exe, '--top=%s' % proj_cwd], proj_cwd, 'autoconfig') - # cleanup(bld) - - # test_cmd([wscript, 'configure', '--top=project', '--out=project/tmp_out'], up_cwd, 'wscript configure with relative top/out from up cwd', - # launch_dir='..') - # test_cmd([wscript], proj_cwd, ' next build from top') - # test_cmd([wscript], proj_out_cwd, ' next build from out', launch_dir='tmp_out') - # test_cmd([wscript], proj_sub_cwd, ' next build from subfolder', launch_dir='sub') - # cleanup(bld) - - # test_cmd([exe, '--force-autoconfig', '--top=project'], up_cwd, 'autoconfig from up 1', launch_dir='..') - # os.remove(dumpf_default + '_autoconfig') - # test_cmd([exe, '--force-autoconfig', '--top=project'], up_cwd, 'autoconfig from up 2', launch_dir='..') - # os.remove(dumpf_default + '_autoconfig') - # test_cmd([exe, '--force-autoconfig', '--out=badout'], proj_cwd, 'autoconfig with clobber') - # cleanup(bld) - - if failures: - bld.fatal('there were errors') - diff --git a/tests/scripts/waf-core/install/wscript b/tests/scripts/waf-core/install/wscript deleted file mode 100644 index 565e6188..00000000 --- a/tests/scripts/waf-core/install/wscript +++ /dev/null @@ -1,92 +0,0 @@ -#! /usr/bin/env python -# encoding: utf-8 -# Thomas Nagy, 2016 -# - -import os -from waflib import Build, Options, TaskGen, Utils - -def build(bld): - pass - -@TaskGen.feature('ruler') -@TaskGen.before('process_rule') -def test_helper(self): - if not self.bld.is_install or self.bld.is_install == Build.UNINSTALL: - while self.meths: # do not generate tasks: the target file may not be there - self.meths.pop() - return - - tg = self.bld.get_tgen_by_name(self.bring_in) - tg.post() # let it create its installation task - assert tg.install_task.outputs - self.source = tg.install_task.outputs - -def configure(conf): - - tmpdir_top = conf.bldnode.make_node('tmpdir') - tmpdir_top.delete(evict=False) - tmpdir = tmpdir_top.make_node('foo') - - def build(bld): - bld.is_install = env.INSTALL - bld.path.make_node('tmpfile').write('test') - - bld.install_as('${PREFIX}/bin/foo', 'tmpfile', chmod=Utils.O755) - bld.symlink_as('${PREFIX}/bin/bar', '../tmpfile', win32_install=True) - tsk = bld.install_files('${PREFIX}/bin', 'tmpfile', chmod=Utils.O755, name='cheese', win32_install=True) - bld(rule='ls -l ${SRC}', always=True, bring_in='cheese', features='ruler') - - # preserve the folder structure or not (relative_trick) - bld.path.make_node('blah/blah').mkdir() - bld(features='subst', source='tmpfile', target='blah/blah/rel1', is_copy=True, install_path='${PREFIX}') - - bld(features='subst', source='tmpfile', target='blah/blah/rel2', is_copy=True) - bld.install_files('${PREFIX}', 'blah/blah/rel2', relative_base=bld.path.get_bld(), relative_trick=True) - - bld(features='subst', source='tmpfile', target='blah/blah/rel3', is_copy=True) - bld.install_files('${PREFIX}', 'blah/blah/rel3', relative_base=bld.path.search_node('blah').get_bld(), relative_trick=True) - - bld(features='subst', source='tmpfile', target='blah/blah/rel4', is_copy=True) - bld.install_files('lib', 'blah/blah/rel4', win32_install=True) - - def check(env): - tmpdir_top.delete(evict=False) - - env.INSTALL = Build.INSTALL - conf.run_build(build_fun=build, msg='building', okmsg='ok', errmsg='eh', env=env) - - assert tmpdir.exists() - assert tmpdir.make_node('bin/foo').exists() - assert tmpdir.make_node('bin/tmpfile').exists() - assert tmpdir.make_node('bin/foo').read() == tmpdir.make_node('bin/tmpfile').read() - assert os.path.lexists(tmpdir.make_node('bin/bar').abspath()) - if not Utils.is_win32: - assert os.readlink(tmpdir.make_node('bin/bar').abspath()) == '../tmpfile' - assert tmpdir.make_node('rel1').exists() - assert tmpdir.make_node('blah/blah/rel2').exists() - assert tmpdir.make_node('blah/rel3').exists() - assert tmpdir.make_node('lib/rel4').exists() - - env.INSTALL = Build.UNINSTALL - conf.run_build(build_fun=build, msg='building', okmsg='ok', errmsg='eh', env=env) - assert not tmpdir.exists() - assert not tmpdir.make_node('bin/foo').exists() - assert not tmpdir.make_node('bin/tmpfile').exists() - assert not os.path.lexists(tmpdir.make_node('bin/bar').abspath()) - assert not tmpdir.exists() - assert not tmpdir.make_node('rel1').exists() - assert not tmpdir.make_node('blah/blah/rel2').exists() - assert not tmpdir.make_node('blah/rel3').exists() - - env = conf.env.derive() - env.PREFIX = tmpdir.abspath() - Options.options.destdir = None - check(env) - - env = conf.env.derive() - env.PREFIX = '/foo' - Options.options.destdir = tmpdir_top.abspath() - check(env) - - diff --git a/tests/scripts/waf-core/install_group/wscript b/tests/scripts/waf-core/install_group/wscript deleted file mode 100644 index 0b26a899..00000000 --- a/tests/scripts/waf-core/install_group/wscript +++ /dev/null @@ -1,72 +0,0 @@ -#! /usr/bin/env python - -from waflib import Utils, Build, Logs -import os - -GRP = os.environ.get('WAF_TEST_GROUP', 'adm') - -def test_chown(bld): - def create_and_chown(tsk): - tsk.outputs[0].write('test') - Utils.lchown(tsk.outputs[0].abspath(), -1, GRP) - bld.conf.env.CAN_CHOWN = True - bld(rule=create_and_chown, target='foo.txt', always=True) - -def test_grp(bld): - def check_path(tsk): - import grp - entry = grp.getgrnam(GRP) - assert entry[0] == GRP - bld.conf.env.CAN_GRP = True - bld(rule=check_path, always=True) - -def test_chown_install(bld): - bld.is_install = Build.INSTALL - - dest_file = bld.bldnode.make_node('test/foo') - dest_link = bld.bldnode.make_node('test/foo_link') - - tmpfile = bld.bldnode.make_node('foo.txt') - tmpfile.write('this is a test') - - bld.install_as(dest_file, - tmpfile, - install_group=GRP) - bld.symlink_as(dest_link, - 'foo', - install_group=GRP) - - bld.add_group() - - def check_path(tsk): - import grp - gid = grp.getgrnam(GRP)[2] - assert os.stat(dest_file.abspath()).st_gid == gid - assert os.stat(dest_link.abspath()).st_gid == gid - bld(rule=check_path, always=True) - -def configure(conf): - conf.test(build_fun=test_grp, - msg='Checking for the python module grp', - okmsg='ok', - errmsg='grp is missing', - mandatory=False) - if not conf.env.CAN_GRP: - return - - conf.test(build_fun=test_chown, - msg='Checking for Utils.lchown', - okmsg='ok', - errmsg='chown does not seem to work', - mandatory=False) - if not conf.env.CAN_CHOWN: - return - - conf.test(build_fun=test_chown_install, - msg='Testing install_group="adm"', - okmsg='ok', - errmsg='there is a regression') - -def build(bld): - pass - diff --git a/tests/scripts/waf-core/preproc/recursion/a.c b/tests/scripts/waf-core/preproc/recursion/a.c deleted file mode 100644 index 3a9c9f79..00000000 --- a/tests/scripts/waf-core/preproc/recursion/a.c +++ /dev/null @@ -1,6 +0,0 @@ -#include "a.h" - -int main() { - return 0; -} - diff --git a/tests/scripts/waf-core/preproc/recursion/a.h b/tests/scripts/waf-core/preproc/recursion/a.h deleted file mode 100644 index f3e46db3..00000000 --- a/tests/scripts/waf-core/preproc/recursion/a.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifdef FOO -#include "c.h" -#endif - -#ifdef BAR -#include "b.h" -#endif - diff --git a/tests/scripts/waf-core/preproc/recursion/b.h b/tests/scripts/waf-core/preproc/recursion/b.h deleted file mode 100644 index f40c757c..00000000 --- a/tests/scripts/waf-core/preproc/recursion/b.h +++ /dev/null @@ -1 +0,0 @@ -#include "c.h" diff --git a/tests/scripts/waf-core/preproc/recursion/c.h b/tests/scripts/waf-core/preproc/recursion/c.h deleted file mode 100644 index 9c974ec9..00000000 --- a/tests/scripts/waf-core/preproc/recursion/c.h +++ /dev/null @@ -1,3 +0,0 @@ -#undef FOO -#undef BAR -#include "a.h" diff --git a/tests/scripts/waf-core/preproc/src/a.h b/tests/scripts/waf-core/preproc/src/a.h deleted file mode 100644 index 9101be30..00000000 --- a/tests/scripts/waf-core/preproc/src/a.h +++ /dev/null @@ -1 +0,0 @@ -#warning "a" diff --git a/tests/scripts/waf-core/preproc/src/b.h b/tests/scripts/waf-core/preproc/src/b.h deleted file mode 100644 index e69de29b..00000000 diff --git a/tests/scripts/waf-core/preproc/src/c.h b/tests/scripts/waf-core/preproc/src/c.h deleted file mode 100644 index e69de29b..00000000 diff --git a/tests/scripts/waf-core/preproc/src/d.h b/tests/scripts/waf-core/preproc/src/d.h deleted file mode 100644 index e69de29b..00000000 diff --git a/tests/scripts/waf-core/preproc/src/e.h b/tests/scripts/waf-core/preproc/src/e.h deleted file mode 100644 index 2cd37d21..00000000 --- a/tests/scripts/waf-core/preproc/src/e.h +++ /dev/null @@ -1 +0,0 @@ -#warning "e" diff --git a/tests/scripts/waf-core/preproc/src/f.h b/tests/scripts/waf-core/preproc/src/f.h deleted file mode 100644 index e69de29b..00000000 diff --git a/tests/scripts/waf-core/preproc/src/g.h b/tests/scripts/waf-core/preproc/src/g.h deleted file mode 100644 index e69de29b..00000000 diff --git a/tests/scripts/waf-core/preproc/src/h.h b/tests/scripts/waf-core/preproc/src/h.h deleted file mode 100644 index e69de29b..00000000 diff --git a/tests/scripts/waf-core/preproc/src/main.c b/tests/scripts/waf-core/preproc/src/main.c deleted file mode 100644 index 9ee24a54..00000000 --- a/tests/scripts/waf-core/preproc/src/main.c +++ /dev/null @@ -1,46 +0,0 @@ - -#if A -const char* c = "foo /*"; - #if B -const char* d = " bar */"; -// /* - #if C -// */ - #include "a.h" - #else - #include "b.h" - #endif - #else - #if C - #include "c.h" - #else - #include "d.h" - #endif - #endif -#elif B - #if C - # if 1 - 1 - #include "a.h" - # endif - # if 0 - #include "a.h" - # endif - #include - #else - #include "f.h" - #endif -#elif C - #include "g.h" -#else - #include "h.h" -#endif - - -/* -#include "a.h" -*/ -//#include "a.h" - -int main() { - return 0; -} diff --git a/tests/scripts/waf-core/preproc/src/pasting.c b/tests/scripts/waf-core/preproc/src/pasting.c deleted file mode 100644 index b9001e2b..00000000 --- a/tests/scripts/waf-core/preproc/src/pasting.c +++ /dev/null @@ -1,9 +0,0 @@ -#define STRINGIFY2( x) #x -#define STRINGIFY(x) STRINGIFY2(x) - -#define PASTE2( x, y) x ## y -#define PASTE(x, y) PASTE2(x, y) - -#include STRINGIFY(PASTE(PREFIX_VAL, PASTE(a, SUFFIX_VAL)).h) - -int main() {return 0;} diff --git a/tests/scripts/waf-core/preproc/wscript b/tests/scripts/waf-core/preproc/wscript deleted file mode 100644 index 8b6a5c1d..00000000 --- a/tests/scripts/waf-core/preproc/wscript +++ /dev/null @@ -1,198 +0,0 @@ -#! /usr/bin/env python -# encoding: utf-8 -# Thomas Nagy, 2012 (ita) - -VERSION='0.0.1' -APPNAME='preproc_test' -top = '.' -out = 'build' - -from waflib import Utils -from waflib.Tools import c_preproc -from waflib.Tools.c_preproc import NUM, OP, IDENT - -from waflib.Logs import pprint - -def configure(conf): - pass - -def build(bld): - - bld.failure = 0 - def disp(color, result): - pprint(color, result) - if color == 'RED': - bld.failure=1 - def stop_status(bld): - if bld.failure: - bld.fatal('One or several test failed, check the outputs above') - bld.add_post_fun(stop_status) - - defs = { - 'm1' : "m1 9 + 9", - 'fun0' : "fun0(x, y) x y", - 'fun1' : "fun1(x, y) x ## y", - 'fun2' : "fun2(x) #x", - 'fun3' : "fun3(x, y) x * y", - 'fun4' : "fun4(x) fun2(x)", - 'fun5' : "fun5(x, y, z) x ## y ## z", - 'fun6' : "fun6(x, y) ", - 'fun7' : "fun() 7", - } - - def test(x, result, fun=c_preproc.reduce_tokens): - toks = c_preproc.tokenize(x) - c_preproc.reduce_tokens(toks, defs, []) - ret = c_preproc.stringize(toks) - - if ret == result: - color = "GREEN" - else: - color = "RED" - disp(color, "%s\t\t%r" % (ret, toks)) - - test("1 + m1 + 1", "1+9+9+1") - test("1 + fun0(1, +) 1", "1+1+1") - test("fun2(mmm)", "mmm") - test("m1", "9+9") - test("fun2(m1)", "m1") - test("fun4(m1)", "9+9") - test("fun1(m, m)", "mm") - test("fun5(a, b, c)", "abc") - test("fun1(>, =)", ">=") - test("fun1(a, 12)", "a12") - test("fun5(a, _, 12)", "a_12") - test("fun6(math, h)", "") - - def test(x, result): - ret = c_preproc.extract_include(x, defs) - if ret == result: - color = "GREEN" - else: - color = "RED" - disp(color, "%s" % str(ret)) - - test("fun6(math, h)", ("<", "math.h")) - - def test(x, result): - toks = c_preproc.tokenize(x) - c_preproc.reduce_tokens(toks, defs, []) - (_, ret) = c_preproc.reduce_eval(toks) - if int(ret) == result: - color = "GREEN" - else: - color = "RED" - disp(color, "%s\t\t%r" % (ret, toks)) - - test("1+1", 2) - test("1-1", 0) - test("1?77:0", 77) - test("0?0:88", 88) - test("1+2*3", 7) - test("1*2+3", 5) - - test("7*m1*3", 90) - test("m1*3", 36) - test("defined m1", 1) - test("defined(m1)", 1) - test("defined inex", 0) - test("defined(inex)", 0) - test("fun7()", 7) - - test("0&&2<3", 0) - test("(5>1)*6", 6) - test("1,2,3*9,9", 9) - - test("0x52 > 02", 1) - - # lazy evaluation - test("defined(foo) && foo > 2", 0) - test("defined(m1) && m1 > 20", 0) - test("defined(m1) || m1 > 20", 1) - - # undefined macros -> 0 - test("not_possibly_defined || another", 0) - - test("1+2+((3+4)+5)+6==(6*7)/2==1*-1*-1", 1) - - - def add_defs(a, b, c, expected): - main = bld.path.find_resource('src/main.c') - bld.env.DEFINES = ['A=%s' % str(a), 'B=%s' % str(b), 'C=%s' % str(c)] - gruik = c_preproc.c_parser([main.parent]) - gruik.start(main, bld.env) - - if len(gruik.nodes) == 1 and gruik.nodes[0].name == expected: - color = "GREEN" - else: - color = "RED" - disp(color, "%r %r %r -> header %s (got %r)" % (a, b, c, expected, gruik.nodes)) - - add_defs(1, 1, 1, 'a.h') - add_defs(1, 1, 0, 'b.h') - add_defs(1, 0, 1, 'c.h') - add_defs(1, 0, 0, 'd.h') - add_defs(0, 1, 1, 'e.h') - add_defs(0, 1, 0, 'f.h') - add_defs(0, 0, 1, 'g.h') - add_defs(0, 0, 0, 'h.h') - - - defs = { - 'a' : 'a 0', - 'b' : 'b 1', - 'c' : 'c 1', - 'd' : 'd 0', - 'e' : 'e a || b || c || d' - } - - - def test_pasting(): - main = bld.path.find_resource('src/pasting.c') - bld.env.DEFINES = ['PREFIX_VAL=', 'SUFFIX_VAL='] - gruik = c_preproc.c_parser([main.parent]) - gruik.start(main, bld.env) - if len(gruik.nodes) == 1 and gruik.nodes[0].name == 'a.h': - color = "GREEN" - else: - color = "RED" - disp(color, "token pasting -> %r (expected a.h)" % gruik.nodes) - - test_pasting() - - def test(x, result): - toks = c_preproc.tokenize(x) - c_preproc.reduce_tokens(toks, defs, []) - (_, ret) = c_preproc.reduce_eval(toks) - if int(ret) == result: - color = "GREEN" - else: - color = "RED" - disp(color, "%s\t\t%r" % (ret, toks)) - - test('a||b||c||d', 1) - test('a&&b&&c&&d', 0) - test('e', 1) - - def test_rec(defines, expected): - main = bld.path.find_resource('recursion/a.c') - bld.env.DEFINES = defines.split() - gruik = c_preproc.c_parser([main.parent]) - gruik.start(main, bld.env) - result = "".join([x.name[0] for x in gruik.nodes]) - if result == expected: - color = "GREEN" - else: - color = "RED" - disp(color, "%s\t\t%r" % (expected, gruik.nodes)) - - test_rec("", "a") - test_rec("FOO=1", "ac") - test_rec("BAR=1", "abc") - test_rec("FOO=1 BAR=1", "ac") - - return - test("1?1,(0?5:9):3,4", 0) # <- invalid expression - - - diff --git a/tests/scripts/waf-core/run_waf_core_unit_tests.sh b/tests/scripts/waf-core/run_waf_core_unit_tests.sh deleted file mode 100755 index d9b03ad3..00000000 --- a/tests/scripts/waf-core/run_waf_core_unit_tests.sh +++ /dev/null @@ -1,89 +0,0 @@ -#!/usr/bin/env bash -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -set -e -SCRIPTDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" -if [ "$(expr substr $(uname -s) 1 5)" == "Linux" ]; then - WAFSCRIPT="$SCRIPTDIR/../../../tools/utils/bash/run-python.sh $SCRIPTDIR/../../../tools/waf" -elif [ "$(expr substr $(uname -s) 1 9)" == "CYGWIN_NT" ]; then - echo "Cygwin is not supported." - exit 1 -elif [ "$(expr substr $(uname -s) 1 10)" == "MINGW32_NT" ]; then - echo "32bit Windows is not supported." - exit 1 -elif [ "$(expr substr $(uname -s) 1 10)" == "MINGW64_NT" ] || [ "$(expr substr $(uname -s) 1 7)" == "MSYS_NT" ] ; then - WAFSCRIPT="$SCRIPTDIR/../../../tools/utils/cmd/run-python.bat $SCRIPTDIR/../../../tools/waf" -fi - -echo "" -echo "running preproc test" -echo "" -cd $SCRIPTDIR/preproc/ -$WAFSCRIPT distclean -$WAFSCRIPT configure build - -echo "" -echo "running install test" -echo "" -cd $SCRIPTDIR/install/ -$WAFSCRIPT distclean -# this test does not work on our platform and we don't need the feature -# $WAFSCRIPT configure build - -echo "" -echo "running general test" -echo "" -cd $SCRIPTDIR/general/ -$WAFSCRIPT distclean -$WAFSCRIPT configure build - -echo "" -echo "running init test" -echo "" -cd $SCRIPTDIR/init/ -$WAFSCRIPT distclean -$WAFSCRIPT configure build - -echo "" -echo "running install_group test" -echo "" -export WAF_TEST_GROUP=waftest -cd $SCRIPTDIR/install_group -$WAFSCRIPT distclean -$WAFSCRIPT configure build diff --git a/tests/scripts/waf-tools/__init__.py b/tests/scripts/waf-tools/__init__.py deleted file mode 100644 index 4e58ee64..00000000 --- a/tests/scripts/waf-tools/__init__.py +++ /dev/null @@ -1,43 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -# waf-tools is not a proper python module name, but this is OK since we need -# it just for the unit test discovery -# pylint: disable-all diff --git a/tests/scripts/waf-tools/f_guidelines/test_f_guidelines.py b/tests/scripts/waf-tools/f_guidelines/test_f_guidelines.py deleted file mode 100644 index 0fcf4daf..00000000 --- a/tests/scripts/waf-tools/f_guidelines/test_f_guidelines.py +++ /dev/null @@ -1,454 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Implements tests for the waf tool ``f_guidelines``. -""" - -import json -import os -import re -import sys -import unittest - -HAVE_GIT = False -try: - from git import Repo - from git.exc import InvalidGitRepositoryError - - HAVE_GIT = True -except ImportError: - pass - - -def get_git_root(path: str) -> str: - """helper function to find the repository root - - Args: - path (string): path of test_f_guidelines - - Returns: - root (string): root path of the git repository - """ - root = os.path.join(os.path.dirname(path), "..", "..", "..", "..") - if HAVE_GIT: - try: - repo = Repo(path, search_parent_directories=True) - root = repo.git.rev_parse("--show-toplevel") - except InvalidGitRepositoryError: - pass - return root - - -ROOT = get_git_root(os.path.realpath(__file__)) -SCRIPT_PATH = os.path.abspath(os.path.dirname(__file__)) -TEST_FILES_PATH = os.path.join(SCRIPT_PATH, "tests") - -try: - import f_guidelines - from f_guidelines import GuidelineViolations -except ImportError: - sys.path.extend( - [ - os.path.join(ROOT, "tools", "waf-tools"), - os.path.join(ROOT, "tools", "waf3-2.0.22-1241519b19b496207abef1f72bbf61c2"), - ] - ) - import f_guidelines - from f_guidelines import GuidelineViolations - -rules_file = os.path.join(ROOT, "conf", "guidelines", "rules.json") -with open(rules_file, encoding="utf-8") as open_file: - rules = json.loads(open_file.read()) - - -def get_results(tests_folder, result_json_file): - """returns result json - - Args: - tests_folder (string): folder name of the test - """ - result_path = os.path.join(TEST_FILES_PATH, tests_folder, result_json_file) - with open(result_path, encoding="utf-8") as file: - results = json.loads(file.read()) - return results - - -def get_txt(f): - """returns the content of file""" - txt = None - with open( - os.path.join(TEST_FILES_PATH, f), - "r", - newline=os.linesep, - encoding="utf-8", - ) as text_file: - txt = text_file.read() - return txt - - -class TestGuidelineMethods(unittest.TestCase): - """Unit test class for the ``f_guidelines`` tool""" - - def general_tester(self, result, function_result): - """function for reiterative tests - - Args: - result (list): list containing the defined results of one test - function_result (list): list containing the results from the called - test function - - """ - - if not result: - self.assertEqual(result, function_result) - else: - output = [] - for res in result: - if len(res) == 2: - output.append((GuidelineViolations[res[0]], res[1])) - if len(res) == 3: - output.append((GuidelineViolations[res[0]], res[1], res[2])) - self.assertEqual(output, function_result) - - def test_filenames(self): - """Unit test for valid filenames - - test_filenames uses python unittest to check the return value of the - f_guidelines filename test function with bad and good filenames. - - """ - bad_names = ["BAD_NAME", "Bad%name", "bad name"] - regex = re.compile(rules["file_names"]["regex"]) - for i in bad_names: - self.assertEqual( - GuidelineViolations.GENERAL_FORBIDDEN_FILENAME, - f_guidelines.filenames.test(i, regex), - ) - good_names = ["good_name", "good-name"] - for i in good_names: - self.assertEqual( - GuidelineViolations.NO_VIOLATION, - f_guidelines.filenames.test(i, regex), - ) - - def test_posix_3_206(self): - """Unit test for empty line at end of text - - test_posix_3_206 uses python unittest to check the return value of the - f_guidelines posix_3_206 test function. Only one empty line is allowed - at the end of each text. - - """ - - results = get_results("general_tests", "general_test_results.json")[ - "test_rule" - ][1] - for test_file, result in results.items(): - txt = get_txt(os.path.join("general_tests", test_file)) - self.assertEqual( - GuidelineViolations[result[0]], - f_guidelines.posix_3_206.test(txt), - ) - - def test_trailing_whitespace(self): - """Unit test for no trailing whitespace in lines of text - - test_trailing_whitespace uses python unittest to check the return value - of the f_guidelines trailing_whitespace test function. There should be no - trailing whitespace at the end of a line. - - """ - - results = get_results("general_tests", "general_test_results.json")[ - "test_rule" - ][2] - for test_file, result in results.items(): - txt = get_txt(os.path.join("general_tests", test_file)) - self.general_tester(result, f_guidelines.trailing_whitespace.test(txt)) - - def test_tabs(self): - """Unit test for no tabs in lines of text - - test_tabs uses python unittest to check the return value - of the tabs test function. Tabs are not allowed. Whitespace is used - for indentation. - - """ - - results = get_results("general_tests", "general_test_results.json")[ - "test_rule" - ][3] - - for test_file, result in results.items(): - txt = get_txt(os.path.join("general_tests", test_file)) - self.general_tester(result, f_guidelines.tabs.test(txt)) - - def test_unique_filename(self): - """Unit test for unique filenames - - test_unique_filename uses python unittest to check the return value - of the f_guidelines unique_filenames test function. In the repository - a filename can not exit more than one time. - - """ - - self.assertEqual( - (GuidelineViolations.NO_VIOLATION, []), - f_guidelines.unique_filenames.test(["testE234aQ.py", "testE23haQ.py"]), - ) - self.assertEqual( - ( - (GuidelineViolations.GENERAL_NOT_UNIQUE_FILENAME), - ["test_f_guidelines.py"], - ), - f_guidelines.unique_filenames.test( - ["test_f_guidelines.py", "test_f_guidelines.py"] - ), - ) - - def test_encoding(self): - """test guideline-check that files MUST be UTF-8""" - - results = get_results("general_tests", "general_test_results.json")[ - "test_rule" - ][0] - rule_name = "encoding" - for test_file, result in results.items(): - test_file_path = os.path.join(TEST_FILES_PATH, "general_tests", test_file) - # result[1][0] is NO_VIOLATION or GENERAL_ENCODING - # result[0] is utf-8 or ascii - self.assertEqual( - GuidelineViolations[result[1][0]], - f_guidelines.encoding.test(test_file_path, rule_name, result[0])[0], - ) - - def test_c_define_guard(self): - """checks the define guard""" - - guard_config = rules["languages"]["C"]["define_guard"] - results = get_results("c-005_tests", "c-005_test_results.json") - for test_file, result in results.items(): - txt = get_txt(os.path.join("c-005_tests", test_file)) - self.general_tester( - result, - f_guidelines.c_check_define_guard.test(test_file, txt, guard_config), - ) - - def test_header(self): - """Unit test to check the header - - test_header uses python unittest to check the return value - of the f_guidelines check_header test function. Depending of the file type - the file has to start with a specific header. - - """ - - python_header = rules["languages"]["Python"]["header"]["text"] - results = get_results("header_tests", "header_test_results.json") - for test_file, result in results.items(): - test_header = get_txt(os.path.join("header_tests", test_file)) - # First line is skipped because file should start with header not - # with comment - test_header = os.linesep.join(test_header.splitlines()[1:]) + os.linesep - self.general_tester( - result, f_guidelines.check_header.test(test_header, python_header) - ) - - def test_doxygen(self): - """Unit test for FILE LEVEL doxygen comment style in c and h files - - test_doxygen uses python unittest to check the return value - of the f_guidelines c_check_doxygen test function. There has to be - a doxygen comment in a specific style. - - """ - config = rules["languages"]["C"]["doxygen"]["regex"] - results = get_results("c-004_tests", "c-004_test_results.json") - for test_file, result in results["default_regex"].items(): - txt = get_txt(os.path.join("c-004_tests", test_file)) - self.general_tester( - result, - f_guidelines.c_check_doxygen.test( - test_file, - txt, - config, - "1.0.0", - ), - ) - - # Tests for changed doxygen regular expressions - config = get_results("c-004_tests", "c-004_test_configured_rules.json") - config = config["regex"] - for test_file, result in results["changed_regex"].items(): - txt = get_txt(os.path.join("c-004_tests", test_file)) - self.general_tester( - result, - f_guidelines.c_check_doxygen.test( - test_file, - txt, - config, - "1.0.0", - ), - ) - - def test_c_sections(self): - """Unit test for c section check in c and h files - - test_c_sections uses python unittest to check the return value - of the f_guidelines c_check_sections test function. There have to be - section comments in the right order for c and h files. - - """ - c_section_rules = rules["languages"]["C"]["sections"] - section_strings = [] - section_strings.append(c_section_rules["source"]["sections"]) - results = get_results("c-006_tests", "c-006_test_results.json") - for test_file, result in results.items(): - txt = get_txt(os.path.join("c-006_tests", test_file)) - if not result: - self.assertEqual( - result, - f_guidelines.c_check_sections.test(txt, section_strings[0]), - ) - else: - output = [] - for res_list in result: - output.append( - ( - GuidelineViolations[res_list[0]], - res_list[1], - "".join(res_list[2]), - ) - ) - self.assertEqual( - output, - f_guidelines.c_check_sections.test(txt, section_strings[0]), - ) - - def test_c_comment_style(self): - """Unit test for c comment style check in c and h files - - test_c_comment_style uses python unittest to check the return value - of the f_guidelines c_check_comment_style test function. There are forbidden - comment styles which has to be checked - - """ - c_comment_style_regex = re.compile(r"(? upper line is switched with lower line <--------- /* - -/*========== Static Constant and Variable Definitions =======================*/ - -/*========== Static Function Prototypes =====================================*/ - -/*========== Static Function Implementations ================================*/ - -/*========== Extern Function Implementations ================================*/ - -/*========== Externalized Static Function Implementations (Unit Test) =======*/ - - -#ifdef UNITY_UNIT_TEST -#endif diff --git a/tests/scripts/waf-tools/f_guidelines/tests/c-006_tests/c-006_test2.c b/tests/scripts/waf-tools/f_guidelines/tests/c-006_tests/c-006_test2.c deleted file mode 100644 index a3515af2..00000000 --- a/tests/scripts/waf-tools/f_guidelines/tests/c-006_tests/c-006_test2.c +++ /dev/null @@ -1,23 +0,0 @@ -/* This test raises a C:006 error because the second section is wrong - * should be about macros and definitions - */ - -/*========== Includes =======================================================*/ - -/*========== test ===========================================================*/ - -/*========== Static Constant and Variable Definitions =======================*/ - -/*========== Extern Constant and Variable Definitions =======================*/ - -/*========== Static Function Prototypes =====================================*/ - -/*========== Static Function Implementations ================================*/ - -/*========== Extern Function Implementations ================================*/ - -/*========== Externalized Static Function Implementations (Unit Test) =======*/ - - -#ifdef UNITY_UNIT_TEST -#endif diff --git a/tests/scripts/waf-tools/f_guidelines/tests/c-006_tests/c-006_test3.c b/tests/scripts/waf-tools/f_guidelines/tests/c-006_tests/c-006_test3.c deleted file mode 100644 index 632cc778..00000000 --- a/tests/scripts/waf-tools/f_guidelines/tests/c-006_tests/c-006_test3.c +++ /dev/null @@ -1,5 +0,0 @@ -/* This test raises a C:006 error because only two sections can be found */ - -/*========== Includes =======================================================*/ - -/*========== Macros and Definitions =========================================*/ diff --git a/tests/scripts/waf-tools/f_guidelines/tests/c-006_tests/c-006_test4.c b/tests/scripts/waf-tools/f_guidelines/tests/c-006_tests/c-006_test4.c deleted file mode 100644 index 07e30321..00000000 --- a/tests/scripts/waf-tools/f_guidelines/tests/c-006_tests/c-006_test4.c +++ /dev/null @@ -1,23 +0,0 @@ -/* This test raises a C:006 error Extern Function Implementations as - * duplicate at the first line and Static Constant and Variable Definitions missing - */ - -/*========== Extern Function Implementations ================================*/ - -/*========== Includes =======================================================*/ - -/*========== Macros and Definitions =========================================*/ - -/*========== Extern Constant and Variable Definitions =======================*/ - -/*========== Static Function Prototypes =====================================*/ - -/*========== Static Function Implementations ================================*/ - -/*========== Extern Function Implementations ================================*/ - -/*========== Externalized Static Function Implementations (Unit Test) =======*/ - - -#ifdef UNITY_UNIT_TEST -#endif diff --git a/tests/scripts/waf-tools/f_guidelines/tests/c-006_tests/c-006_test5.c b/tests/scripts/waf-tools/f_guidelines/tests/c-006_tests/c-006_test5.c deleted file mode 100644 index d6039336..00000000 --- a/tests/scripts/waf-tools/f_guidelines/tests/c-006_tests/c-006_test5.c +++ /dev/null @@ -1,22 +0,0 @@ -/* # This test raise a C:006 error because ahead of Static Constant and - Definitions is no empty line - */ - -/*========== Includes =======================================================*/ - -/*========== Macros and Definitions =========================================*/ -/*========== Static Constant and Variable Definitions =======================*/ - -/*========== Extern Constant and Variable Definitions =======================*/ - -/*========== Static Function Prototypes =====================================*/ - -/*========== Static Function Implementations ================================*/ - -/*========== Extern Function Implementations ================================*/ - -/*========== Externalized Static Function Implementations (Unit Test) =======*/ - - -#ifdef UNITY_UNIT_TEST -#endif diff --git a/tests/scripts/waf-tools/f_guidelines/tests/c-006_tests/c-006_test_results.json b/tests/scripts/waf-tools/f_guidelines/tests/c-006_tests/c-006_test_results.json deleted file mode 100644 index ea1d8531..00000000 --- a/tests/scripts/waf-tools/f_guidelines/tests/c-006_tests/c-006_test_results.json +++ /dev/null @@ -1,154 +0,0 @@ -{ - "c-006_test0.c": [], - "c-006_test1.c": [ - [ - "C_SECTION", - 7, - [ - "Between /*========== Extern ", - "Constant and Variable Definitions =======================*/ and", - " the previous section should be 1 other sections" - ] - ], - [ - "C_SECTION", - 11, - [ - "/*========== Static Constant and Variable Definitions ===========", - "============*/ must be before the previous section" - ] - ], - [ - "C_SECTION", - 13, - [ - "Between /*========== Static Function Prototypes =================", - "====================*/ and the previous section should be 1 other ", - "sections" - ] - ] - ], - "c-006_test2.c": [ - [ - "C_SECTION", - 9, - [ - "Between /*========== Static Constant and Variable Definitions ", - "=======================*/ and the previous section should be ", - "1 other sections" - ] - ], - [ - "C_SECTION", - 0, - [ - "/*========== Macros and Definitions =========================", - "================*/ is missing" - ] - ] - ], - "c-006_test3.c": [ - [ - "C_SECTION", - 0, - [ - "/*========== Static Constant and Variable Definitions ===========", - "============*/ is missing" - ] - ], - [ - "C_SECTION", - 0, - [ - "/*========== Extern Constant and Variable Definitions ========", - "===============*/ is missing" - ] - ], - [ - "C_SECTION", - 0, - [ - "/*========== Static Function Prototypes =====================", - "================*/ is missing" - ] - ], - [ - "C_SECTION", - 0, - [ - "/*========== Static Function Implementations ================", - "================*/ is missing" - ] - ], - [ - "C_SECTION", - 0, - [ - "/*========== Extern Function Implementations ===============", - "=================*/ is missing" - ] - ], - [ - "C_SECTION", - 0, - [ - "/*========== Externalized Static Function Implementations ", - "(Unit Test) =======*/ is missing" - ] - ] - ], - "c-006_test4.c": [ - [ - "C_SECTION", - 0, - [ - "'/*========== Extern Function Implementations ===============", - "=================*/' found more often than expected." - ] - ], - [ - "C_SECTION", - 7, - [ - "/*========== Includes =====================================", - "==================*/ must be before the previous section" - ] - ], - [ - "C_SECTION", - 11, - [ - "Between /*========== Extern Constant and Variable Definitions ", - "=======================*/ and the previous section should be ", - "1 other sections" - ] - ], - [ - "C_SECTION", - 17, - [ - "/*========== Extern Function Implementations ===============", - "=================*/ is a duplicate" - ] - ], - [ - "C_SECTION", - 0, - [ - "/*========== Static Constant and Variable Definitions ======", - "=================*/ is missing" - ] - ] - ], - "c-006_test5.c": [ - [ - "C_SECTION", - 8, - [ - "Ahead of /*========== Static Constant and Variable Definitions ", - "=======================*/ must be one ", - "empty line" - ] - ] - ] -} diff --git a/tests/scripts/waf-tools/f_guidelines/tests/c-029_tests/c-029_test0.c b/tests/scripts/waf-tools/f_guidelines/tests/c-029_tests/c-029_test0.c deleted file mode 100644 index 5e7a7326..00000000 --- a/tests/scripts/waf-tools/f_guidelines/tests/c-029_tests/c-029_test0.c +++ /dev/null @@ -1 +0,0 @@ -/* This file does not raise an C:029 error */ diff --git a/tests/scripts/waf-tools/f_guidelines/tests/c-029_tests/c-029_test1.c b/tests/scripts/waf-tools/f_guidelines/tests/c-029_tests/c-029_test1.c deleted file mode 100644 index cc9a5c73..00000000 --- a/tests/scripts/waf-tools/f_guidelines/tests/c-029_tests/c-029_test1.c +++ /dev/null @@ -1 +0,0 @@ -// This test raises C029 error because of used C99 comments diff --git a/tests/scripts/waf-tools/f_guidelines/tests/c-029_tests/c-029_test_results.json b/tests/scripts/waf-tools/f_guidelines/tests/c-029_tests/c-029_test_results.json deleted file mode 100644 index 21aa81d9..00000000 --- a/tests/scripts/waf-tools/f_guidelines/tests/c-029_tests/c-029_test_results.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "c-029_test0.c": [], - "c-029_test1.c": [ - 1 - ] -} diff --git a/tests/scripts/waf-tools/f_guidelines/tests/general_tests/general-003_test0.txt b/tests/scripts/waf-tools/f_guidelines/tests/general_tests/general-003_test0.txt deleted file mode 100644 index 29568185..00000000 --- a/tests/scripts/waf-tools/f_guidelines/tests/general_tests/general-003_test0.txt +++ /dev/null @@ -1 +0,0 @@ -This file is utf-8. diff --git a/tests/scripts/waf-tools/f_guidelines/tests/general_tests/general-003_test1.txt b/tests/scripts/waf-tools/f_guidelines/tests/general_tests/general-003_test1.txt deleted file mode 100644 index ce572dc7..00000000 --- a/tests/scripts/waf-tools/f_guidelines/tests/general_tests/general-003_test1.txt +++ /dev/null @@ -1 +0,0 @@ -This files includes a BOM. diff --git a/tests/scripts/waf-tools/f_guidelines/tests/general_tests/general-003_test2.txt b/tests/scripts/waf-tools/f_guidelines/tests/general_tests/general-003_test2.txt deleted file mode 100644 index 00287f470e451e70b6ff0dc3703078a18e356cdd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 82 zcmezOpCN=HgCUclm_dOd4M^uOqykx`Kz=G%EF377$B@F1&rlBJ>oOQJ7%`YK7y#8I V1I1FnstXtr8Pb6)JqBI|E&$LJ4)Xv2 diff --git a/tests/scripts/waf-tools/f_guidelines/tests/general_tests/general-003_test3.txt b/tests/scripts/waf-tools/f_guidelines/tests/general_tests/general-003_test3.txt deleted file mode 100644 index 9154da42..00000000 --- a/tests/scripts/waf-tools/f_guidelines/tests/general_tests/general-003_test3.txt +++ /dev/null @@ -1 +0,0 @@ -This file uses ascii encoding and does not raise a general-003 error. diff --git a/tests/scripts/waf-tools/f_guidelines/tests/general_tests/general-003_test4.txt b/tests/scripts/waf-tools/f_guidelines/tests/general_tests/general-003_test4.txt deleted file mode 100644 index 8035c82c..00000000 --- a/tests/scripts/waf-tools/f_guidelines/tests/general_tests/general-003_test4.txt +++ /dev/null @@ -1 +0,0 @@ -This file uses utf-8 encoding and the sign ° does raise a general-003 error. diff --git a/tests/scripts/waf-tools/f_guidelines/tests/general_tests/general-004_test0.txt b/tests/scripts/waf-tools/f_guidelines/tests/general_tests/general-004_test0.txt deleted file mode 100644 index 240e33d8..00000000 --- a/tests/scripts/waf-tools/f_guidelines/tests/general_tests/general-004_test0.txt +++ /dev/null @@ -1,2 +0,0 @@ -#This test file should not raise an general-004 error because -#it ends with a new line diff --git a/tests/scripts/waf-tools/f_guidelines/tests/general_tests/general-004_test1.txt b/tests/scripts/waf-tools/f_guidelines/tests/general_tests/general-004_test1.txt deleted file mode 100644 index 059d20af..00000000 --- a/tests/scripts/waf-tools/f_guidelines/tests/general_tests/general-004_test1.txt +++ /dev/null @@ -1,3 +0,0 @@ -#This test file should not raise an general-004 error because -#it ends with a new line -Just one line of text. diff --git a/tests/scripts/waf-tools/f_guidelines/tests/general_tests/general-004_test2.txt b/tests/scripts/waf-tools/f_guidelines/tests/general_tests/general-004_test2.txt deleted file mode 100644 index 05441303..00000000 --- a/tests/scripts/waf-tools/f_guidelines/tests/general_tests/general-004_test2.txt +++ /dev/null @@ -1 +0,0 @@ -This line is not a line as it misses a newline character, and this is bad. \ No newline at end of file diff --git a/tests/scripts/waf-tools/f_guidelines/tests/general_tests/general-004_test3.txt b/tests/scripts/waf-tools/f_guidelines/tests/general_tests/general-004_test3.txt deleted file mode 100644 index c37c5620..00000000 --- a/tests/scripts/waf-tools/f_guidelines/tests/general_tests/general-004_test3.txt +++ /dev/null @@ -1,3 +0,0 @@ -This file has many empty newlines at the end and this is bad. - - diff --git a/tests/scripts/waf-tools/f_guidelines/tests/general_tests/general-004_test4.txt b/tests/scripts/waf-tools/f_guidelines/tests/general_tests/general-004_test4.txt deleted file mode 100644 index 2999ed7e..00000000 --- a/tests/scripts/waf-tools/f_guidelines/tests/general_tests/general-004_test4.txt +++ /dev/null @@ -1,7 +0,0 @@ -#This test file should not raise an general-004 error because -#it ends with a new line -This file has more lines - -some empty line - -but at the end, the file is good. diff --git a/tests/scripts/waf-tools/f_guidelines/tests/general_tests/general-005_test0.txt b/tests/scripts/waf-tools/f_guidelines/tests/general_tests/general-005_test0.txt deleted file mode 100644 index 10896b1e..00000000 --- a/tests/scripts/waf-tools/f_guidelines/tests/general_tests/general-005_test0.txt +++ /dev/null @@ -1,2 +0,0 @@ -#This file should not raise a general-005 because no trailing whitespace -This file has no trailing whitespace. diff --git a/tests/scripts/waf-tools/f_guidelines/tests/general_tests/general-005_test1.txt b/tests/scripts/waf-tools/f_guidelines/tests/general_tests/general-005_test1.txt deleted file mode 100644 index 007f2b67..00000000 --- a/tests/scripts/waf-tools/f_guidelines/tests/general_tests/general-005_test1.txt +++ /dev/null @@ -1,5 +0,0 @@ -#This file should raise a general-005 because of the trailing whitespace at the end of some lines -This line includes trailing whitespace -This line includes trailing whitespace -This line does not include trailing whitespace -This line includes trailing whitespace diff --git a/tests/scripts/waf-tools/f_guidelines/tests/general_tests/general-005_test2.txt b/tests/scripts/waf-tools/f_guidelines/tests/general_tests/general-005_test2.txt deleted file mode 100644 index 66ac0e03..00000000 --- a/tests/scripts/waf-tools/f_guidelines/tests/general_tests/general-005_test2.txt +++ /dev/null @@ -1,6 +0,0 @@ -This file should raise a general-005 because of the trailing whitespace at the -end of some lines - Line without trailing whitespace at the end -Line with trailing whitespace -Line without trailing whitespace -Again line with trailing whitespace diff --git a/tests/scripts/waf-tools/f_guidelines/tests/general_tests/general-006_test0.txt b/tests/scripts/waf-tools/f_guidelines/tests/general_tests/general-006_test0.txt deleted file mode 100644 index f957400f..00000000 --- a/tests/scripts/waf-tools/f_guidelines/tests/general_tests/general-006_test0.txt +++ /dev/null @@ -1 +0,0 @@ -This file does not use tabs any tabs at at, and this is good. diff --git a/tests/scripts/waf-tools/f_guidelines/tests/general_tests/general-006_test1.txt b/tests/scripts/waf-tools/f_guidelines/tests/general_tests/general-006_test1.txt deleted file mode 100644 index 8e20e25a..00000000 --- a/tests/scripts/waf-tools/f_guidelines/tests/general_tests/general-006_test1.txt +++ /dev/null @@ -1,4 +0,0 @@ -This line does not include tabs. -This line includes tabs. -This line does not include tabs. -This line includes tabs. diff --git a/tests/scripts/waf-tools/f_guidelines/tests/general_tests/general-006_test2.txt b/tests/scripts/waf-tools/f_guidelines/tests/general_tests/general-006_test2.txt deleted file mode 100644 index 937d7eb7..00000000 --- a/tests/scripts/waf-tools/f_guidelines/tests/general_tests/general-006_test2.txt +++ /dev/null @@ -1,3 +0,0 @@ -This file raises an general-006 error because as it uses tabs -tab at the end of the line - tab at the beginning of the line diff --git a/tests/scripts/waf-tools/f_guidelines/tests/general_tests/general-006_test3.txt b/tests/scripts/waf-tools/f_guidelines/tests/general_tests/general-006_test3.txt deleted file mode 100644 index 72c404ce..00000000 --- a/tests/scripts/waf-tools/f_guidelines/tests/general_tests/general-006_test3.txt +++ /dev/null @@ -1,3 +0,0 @@ -This file raises no general-006 error since no tabs are used -some word in a line - no Tabs diff --git a/tests/scripts/waf-tools/f_guidelines/tests/general_tests/general-006_test4.txt b/tests/scripts/waf-tools/f_guidelines/tests/general_tests/general-006_test4.txt deleted file mode 100644 index 7dfb7a49..00000000 --- a/tests/scripts/waf-tools/f_guidelines/tests/general_tests/general-006_test4.txt +++ /dev/null @@ -1,6 +0,0 @@ -This file should raise a general-006 error because it includes tabs - """tab -no tab -no tab -tab -tab diff --git a/tests/scripts/waf-tools/f_guidelines/tests/general_tests/general_test_results.json b/tests/scripts/waf-tools/f_guidelines/tests/general_tests/general_test_results.json deleted file mode 100644 index 38425486..00000000 --- a/tests/scripts/waf-tools/f_guidelines/tests/general_tests/general_test_results.json +++ /dev/null @@ -1,118 +0,0 @@ -{ - "test_rule": [ - { - "general-003_test0.txt": [ - "utf-8", - [ - "NO_VIOLATION" - ] - ], - "general-003_test1.txt": [ - "utf-8", - [ - "GENERAL_ENCODING" - ] - ], - "general-003_test2.txt": [ - "utf-8", - [ - "GENERAL_ENCODING" - ] - ], - "general-003_test3.txt": [ - "ascii", - [ - "NO_VIOLATION" - ] - ], - "general-003_test4.txt": [ - "ascii", - [ - "GENERAL_ENCODING" - ] - ] - }, - { - "general-004_test0.txt": [ - "NO_VIOLATION" - ], - "general-004_test1.txt": [ - "NO_VIOLATION" - ], - "general-004_test2.txt": [ - "GENERAL_EOF_NO_EMPTY_NEWLINE" - ], - "general-004_test3.txt": [ - "GENERAL_EOF_TOO_MANY_EMPTY_NEWLINES" - ], - "general-004_test4.txt": [ - "NO_VIOLATION" - ] - }, - { - "general-005_test0.txt": [], - "general-005_test1.txt": [ - [ - "GENERAL_TRAILING_WHITESPACE", - 2 - ], - [ - "GENERAL_TRAILING_WHITESPACE", - 3 - ], - [ - "GENERAL_TRAILING_WHITESPACE", - 5 - ] - ], - "general-005_test2.txt": [ - [ - "GENERAL_TRAILING_WHITESPACE", - 4 - ], - [ - "GENERAL_TRAILING_WHITESPACE", - 6 - ] - ] - }, - { - "general-006_test0.txt": [], - "general-006_test1.txt": [ - [ - "GENERAL_TABS", - 2 - ], - [ - "GENERAL_TABS", - 4 - ] - ], - "general-006_test2.txt": [ - [ - "GENERAL_TABS", - 2 - ], - [ - "GENERAL_TABS", - 3 - ] - ], - "general-006_test3.txt": [], - "general-006_test4.txt": [ - [ - "GENERAL_TABS", - 2 - ], - [ - "GENERAL_TABS", - 5 - ], - [ - "GENERAL_TABS", - 6 - ] - ] - } - ] -} diff --git a/tests/scripts/waf-tools/f_guidelines/tests/header_tests/header_test0.py b/tests/scripts/waf-tools/f_guidelines/tests/header_tests/header_test0.py deleted file mode 100644 index ed088d51..00000000 --- a/tests/scripts/waf-tools/f_guidelines/tests/header_tests/header_test0.py +++ /dev/null @@ -1,42 +0,0 @@ -# This test should not raise a header error -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - @YEAR@, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -# code diff --git a/tests/scripts/waf-tools/f_guidelines/tests/header_tests/header_test1.py b/tests/scripts/waf-tools/f_guidelines/tests/header_tests/header_test1.py deleted file mode 100644 index 37a6c70c..00000000 --- a/tests/scripts/waf-tools/f_guidelines/tests/header_tests/header_test1.py +++ /dev/null @@ -1,42 +0,0 @@ -# This test should raise a header error because in line 5 is a wrong header line -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - @YEAR@, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# ------> Some text that should not be in the header <------ -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -# code diff --git a/tests/scripts/waf-tools/f_guidelines/tests/header_tests/header_test2.py b/tests/scripts/waf-tools/f_guidelines/tests/header_tests/header_test2.py deleted file mode 100644 index 1c0bc509..00000000 --- a/tests/scripts/waf-tools/f_guidelines/tests/header_tests/header_test2.py +++ /dev/null @@ -1,16 +0,0 @@ -# This test should not raise a header error because header is too short -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - @YEAR@, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, diff --git a/tests/scripts/waf-tools/f_guidelines/tests/header_tests/header_test3.py b/tests/scripts/waf-tools/f_guidelines/tests/header_tests/header_test3.py deleted file mode 100644 index 147e7ea5..00000000 --- a/tests/scripts/waf-tools/f_guidelines/tests/header_tests/header_test3.py +++ /dev/null @@ -1,42 +0,0 @@ -# This test should raise a header error because two lines are wrong -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - @YEAR@, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# ------------> Wrong line <-------------- -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -------------> Again wrong line <--------------- -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -# code diff --git a/tests/scripts/waf-tools/f_guidelines/tests/header_tests/header_test_results.json b/tests/scripts/waf-tools/f_guidelines/tests/header_tests/header_test_results.json deleted file mode 100644 index 7f063cd1..00000000 --- a/tests/scripts/waf-tools/f_guidelines/tests/header_tests/header_test_results.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "header_test0.py": [], - "header_test1.py": [ - [ - "HEADER", - 7 - ] - ], - "header_test2.py": [ - [ - "HEADER", - 16 - ] - ], - "header_test3.py": [ - [ - "HEADER", - 7 - ], - [ - "HEADER", - 22 - ] - ] -} diff --git a/tests/scripts/waf-tools/f_guidelines/tests/rst-003_tests/rst-003_test0.rst b/tests/scripts/waf-tools/f_guidelines/tests/rst-003_tests/rst-003_test0.rst deleted file mode 100644 index 7500d912..00000000 --- a/tests/scripts/waf-tools/f_guidelines/tests/rst-003_tests/rst-003_test0.rst +++ /dev/null @@ -1,2 +0,0 @@ -.. - This file will raise a rst003 error because no macro.rst is included diff --git a/tests/scripts/waf-tools/f_guidelines/tests/rst-003_tests/rst-003_test1.rst b/tests/scripts/waf-tools/f_guidelines/tests/rst-003_tests/rst-003_test1.rst deleted file mode 100644 index 1434b3c9..00000000 --- a/tests/scripts/waf-tools/f_guidelines/tests/rst-003_tests/rst-003_test1.rst +++ /dev/null @@ -1,4 +0,0 @@ -.. include:: ./../../macros.txt - -.. - This test is not raising a rst003 error because macros.txt is included diff --git a/tests/scripts/waf-tools/f_guidelines/tests/rst-003_tests/rst-003_test2.rst b/tests/scripts/waf-tools/f_guidelines/tests/rst-003_tests/rst-003_test2.rst deleted file mode 100644 index a94dd298..00000000 --- a/tests/scripts/waf-tools/f_guidelines/tests/rst-003_tests/rst-003_test2.rst +++ /dev/null @@ -1,4 +0,0 @@ -.. include:: ../../../macros.txt - -.. - This test is not raising a rst003 error because macros.txt is included diff --git a/tests/scripts/waf-tools/f_guidelines/tests/rst-003_tests/rst-003_test3.rst b/tests/scripts/waf-tools/f_guidelines/tests/rst-003_tests/rst-003_test3.rst deleted file mode 100644 index c3a44e15..00000000 --- a/tests/scripts/waf-tools/f_guidelines/tests/rst-003_tests/rst-003_test3.rst +++ /dev/null @@ -1,4 +0,0 @@ -.. include:: .../../../macros.txt - -.. - This test is not raising a rst003 error because of macros.txt is invalid diff --git a/tests/scripts/waf-tools/f_guidelines/tests/rst-003_tests/rst-003_test4.rst b/tests/scripts/waf-tools/f_guidelines/tests/rst-003_tests/rst-003_test4.rst deleted file mode 100644 index 9197eefc..00000000 --- a/tests/scripts/waf-tools/f_guidelines/tests/rst-003_tests/rst-003_test4.rst +++ /dev/null @@ -1,4 +0,0 @@ -.. include:: ./path/to/macros.txt - -.. - This test is not raising a rst003 error because macros.txt is included diff --git a/tests/scripts/waf-tools/f_guidelines/tests/rst-003_tests/rst-003_test5.rst b/tests/scripts/waf-tools/f_guidelines/tests/rst-003_tests/rst-003_test5.rst deleted file mode 100644 index 8b6a5e67..00000000 --- a/tests/scripts/waf-tools/f_guidelines/tests/rst-003_tests/rst-003_test5.rst +++ /dev/null @@ -1,5 +0,0 @@ -.. include:: ./path/to./macros.txt - -.. - This test is raising a rst003 error because macros.txt is included with . in - the folder name diff --git a/tests/scripts/waf-tools/f_guidelines/tests/rst-003_tests/rst-003_test6.rst b/tests/scripts/waf-tools/f_guidelines/tests/rst-003_tests/rst-003_test6.rst deleted file mode 100644 index cc4cd301..00000000 --- a/tests/scripts/waf-tools/f_guidelines/tests/rst-003_tests/rst-003_test6.rst +++ /dev/null @@ -1,4 +0,0 @@ -.. include:: ./path/../macros.txt - -.. - This test is not raising a rst003 error because macros.txt is included diff --git a/tests/scripts/waf-tools/f_guidelines/tests/rst-003_tests/rst-003_test7.rst b/tests/scripts/waf-tools/f_guidelines/tests/rst-003_tests/rst-003_test7.rst deleted file mode 100644 index 65fca8ad..00000000 --- a/tests/scripts/waf-tools/f_guidelines/tests/rst-003_tests/rst-003_test7.rst +++ /dev/null @@ -1,5 +0,0 @@ -wrong .. include:: ./../../macros.txt - -.. - This test is raising a rst003 error because the word wrong is not allowed - ahead of the include diff --git a/tests/scripts/waf-tools/f_guidelines/tests/rst-003_tests/rst-003_test_results.json b/tests/scripts/waf-tools/f_guidelines/tests/rst-003_tests/rst-003_test_results.json deleted file mode 100644 index 643ca63d..00000000 --- a/tests/scripts/waf-tools/f_guidelines/tests/rst-003_tests/rst-003_test_results.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "rst-003_test0.rst": "RST_MISSING_INCLUDE", - "rst-003_test1.rst": "NO_VIOLATION", - "rst-003_test2.rst": "NO_VIOLATION", - "rst-003_test3.rst": "RST_MISSING_INCLUDE", - "rst-003_test4.rst": "NO_VIOLATION", - "rst-003_test5.rst": "RST_MISSING_INCLUDE", - "rst-003_test6.rst": "NO_VIOLATION", - "rst-003_test7.rst": "RST_MISSING_INCLUDE" -} diff --git a/tests/scripts/waf-tools/f_guidelines/tests/rst-007_tests/rst-007_test_results.json b/tests/scripts/waf-tools/f_guidelines/tests/rst-007_tests/rst-007_test_results.json deleted file mode 100644 index 13ed9f09..00000000 --- a/tests/scripts/waf-tools/f_guidelines/tests/rst-007_tests/rst-007_test_results.json +++ /dev/null @@ -1,79 +0,0 @@ -{ - "rst_007_test0.rst": [], - "rst_007_test1.rst": [ - [ - "Caption RESTRUCTUREDTEXT_CODING_WRONG was not found", - 0 - ] - ], - "rst_007_test2.rst": [ - [ - "Caption underline (allowed symbols as '#*=-^\"') is missing", - 0 - ] - ], - "rst_007_test3.rst": [ - [ - "File label not found at the beginning of the file", - 0 - ] - ], - "rst_007_test4.rst": [ - [ - "The caption RESTRUCTUREDTEXT_CODING_GUIDELINES was not found two lines after the file label", - 7 - ] - ], - "rst_007_test5.rst": [ - [ - "Overline of the caption was not found two lines after the file label", - 5 - ], - [ - "The caption RESTRUCTUREDTEXT_CODING_GUIDELINES was not found three lines after the file label", - 6 - ] - ], - "rst_007_test6.rst": [ - [ - "Caption underline equal to overline is missing", - 0 - ] - ], - "rst_007_test7.rst": [ - [ - "Underline was not found directly after caption", - 9 - ] - ], - "rst_007_test8.rst": [ - [ - "Length of underline/overline is not equal to the length of the caption", - 0 - ] - ], - "rst_007_test9.rst": [ - [ - "Overline contains not allowed symbols (allowed symbols as '#*)", - 0 - ], - [ - "The caption RESTRUCTUREDTEXT_CODING_GUIDELINES was not found two lines after the file label", - 8 - ], - [ - "Length of underline/overline is not equal to the length of the caption", - 0 - ] - ], - "rst_007_test10.rst": [ - [ - "Caption underline equal to overline is missing", - 0 - ], - [ - "Length of underline/overline is not equal to the length of the caption", - 0 - ] - ] -} diff --git a/tests/scripts/waf-tools/f_guidelines/tests/rst-007_tests/rst_007_test0.rst b/tests/scripts/waf-tools/f_guidelines/tests/rst-007_tests/rst_007_test0.rst deleted file mode 100644 index 95a32391..00000000 --- a/tests/scripts/waf-tools/f_guidelines/tests/rst-007_tests/rst_007_test0.rst +++ /dev/null @@ -1,10 +0,0 @@ -This test does not raise a rst_007 error -.. include:: ./../../macros.txt - -.. _RESTRUCTUREDTEXT_CODING_GUIDELINES: - -reStructuredText Coding Guidelines -================================== - -These coding guidelines **MUST** be applied to all ``reStructuredText`` source -files. diff --git a/tests/scripts/waf-tools/f_guidelines/tests/rst-007_tests/rst_007_test1.rst b/tests/scripts/waf-tools/f_guidelines/tests/rst-007_tests/rst_007_test1.rst deleted file mode 100644 index f742b6a0..00000000 --- a/tests/scripts/waf-tools/f_guidelines/tests/rst-007_tests/rst_007_test1.rst +++ /dev/null @@ -1,11 +0,0 @@ -This test does raise a rst_007 error, because file label is not the same as -the file heading -.. include:: ./../../macros.txt - -.. _RESTRUCTUREDTEXT_CODING_Wrong: - -reStructuredText Coding Guidelines -================================== - -These coding guidelines **MUST** be applied to all ``reStructuredText`` source -files. diff --git a/tests/scripts/waf-tools/f_guidelines/tests/rst-007_tests/rst_007_test10.rst b/tests/scripts/waf-tools/f_guidelines/tests/rst-007_tests/rst_007_test10.rst deleted file mode 100644 index 57252d4a..00000000 --- a/tests/scripts/waf-tools/f_guidelines/tests/rst-007_tests/rst_007_test10.rst +++ /dev/null @@ -1,12 +0,0 @@ -This test raise a rst_007 error, because overline and underlines are too long and -have the wrong symbols -.. include:: ./../../macros.txt - -.. _RESTRUCTUREDTEXT_CODING_GUIDELINES: - -############## -reStructuredText Coding Guidelines -############################################ - -These coding guidelines **MUST** be applied to all ``reStructuredText`` source -files. diff --git a/tests/scripts/waf-tools/f_guidelines/tests/rst-007_tests/rst_007_test2.rst b/tests/scripts/waf-tools/f_guidelines/tests/rst-007_tests/rst_007_test2.rst deleted file mode 100644 index 0b735644..00000000 --- a/tests/scripts/waf-tools/f_guidelines/tests/rst-007_tests/rst_007_test2.rst +++ /dev/null @@ -1,10 +0,0 @@ -This test does raise a rst_007 error, because the file heading is wrong underlined -.. include:: ./../../macros.txt - -.. _RESTRUCTUREDTEXT_CODING_GUIDELINES: - -reStructuredText Coding Guidelines -$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ - -These coding guidelines **MUST** be applied to all ``reStructuredText`` source -files. diff --git a/tests/scripts/waf-tools/f_guidelines/tests/rst-007_tests/rst_007_test3.rst b/tests/scripts/waf-tools/f_guidelines/tests/rst-007_tests/rst_007_test3.rst deleted file mode 100644 index 7b694f08..00000000 --- a/tests/scripts/waf-tools/f_guidelines/tests/rst-007_tests/rst_007_test3.rst +++ /dev/null @@ -1,8 +0,0 @@ -This test does raise a rst_007 error, because no file label is defined -.. include:: ./../../macros.txt - -reStructuredText Coding Guidelines -================================== - -These coding guidelines **MUST** be applied to all ``reStructuredText`` source -files. diff --git a/tests/scripts/waf-tools/f_guidelines/tests/rst-007_tests/rst_007_test4.rst b/tests/scripts/waf-tools/f_guidelines/tests/rst-007_tests/rst_007_test4.rst deleted file mode 100644 index 404c690f..00000000 --- a/tests/scripts/waf-tools/f_guidelines/tests/rst-007_tests/rst_007_test4.rst +++ /dev/null @@ -1,11 +0,0 @@ -This test does raise a rst_007 error, because caption does not come two lines after the label -.. include:: ./../../macros.txt - -.. _RESTRUCTUREDTEXT_CODING_GUIDELINES: - - -reStructuredText Coding Guidelines -================================== - -These coding guidelines **MUST** be applied to all ``reStructuredText`` source -files. diff --git a/tests/scripts/waf-tools/f_guidelines/tests/rst-007_tests/rst_007_test5.rst b/tests/scripts/waf-tools/f_guidelines/tests/rst-007_tests/rst_007_test5.rst deleted file mode 100644 index 36df0c2a..00000000 --- a/tests/scripts/waf-tools/f_guidelines/tests/rst-007_tests/rst_007_test5.rst +++ /dev/null @@ -1,10 +0,0 @@ -This test does raise a rst_007 error because between overline and label should be one empty line -.. include:: ./../../macros.txt - -.. _RESTRUCTUREDTEXT_CODING_GUIDELINES: -################################## -reStructuredText Coding Guidelines -################################## - -These coding guidelines **MUST** be applied to all ``reStructuredText`` source -files. diff --git a/tests/scripts/waf-tools/f_guidelines/tests/rst-007_tests/rst_007_test6.rst b/tests/scripts/waf-tools/f_guidelines/tests/rst-007_tests/rst_007_test6.rst deleted file mode 100644 index 312f5207..00000000 --- a/tests/scripts/waf-tools/f_guidelines/tests/rst-007_tests/rst_007_test6.rst +++ /dev/null @@ -1,11 +0,0 @@ -This test raise a rst_007 error, because wrong sign was used for the caption underline -.. include:: ./../../macros.txt - -.. _RESTRUCTUREDTEXT_CODING_GUIDELINES: - -################################## -reStructuredText Coding Guidelines ----------------------------------- - -These coding guidelines **MUST** be applied to all ``reStructuredText`` source -files. diff --git a/tests/scripts/waf-tools/f_guidelines/tests/rst-007_tests/rst_007_test7.rst b/tests/scripts/waf-tools/f_guidelines/tests/rst-007_tests/rst_007_test7.rst deleted file mode 100644 index 6aba61ee..00000000 --- a/tests/scripts/waf-tools/f_guidelines/tests/rst-007_tests/rst_007_test7.rst +++ /dev/null @@ -1,12 +0,0 @@ -This test does raise a rst_007 error, because underline is not directly after -the file caption -.. include:: ./../../macros.txt - -.. _RESTRUCTUREDTEXT_CODING_GUIDELINES: - -reStructuredText Coding Guidelines - -================================== - -These coding guidelines **MUST** be applied to all ``reStructuredText`` source -files. diff --git a/tests/scripts/waf-tools/f_guidelines/tests/rst-007_tests/rst_007_test8.rst b/tests/scripts/waf-tools/f_guidelines/tests/rst-007_tests/rst_007_test8.rst deleted file mode 100644 index f6bb9613..00000000 --- a/tests/scripts/waf-tools/f_guidelines/tests/rst-007_tests/rst_007_test8.rst +++ /dev/null @@ -1,10 +0,0 @@ -This test raise a rst_007 error, because underline is longer than the caption -.. include:: ./../../macros.txt - -.. _RESTRUCTUREDTEXT_CODING_GUIDELINES: - -reStructuredText Coding Guidelines -========================================== - -These coding guidelines **MUST** be applied to all ``reStructuredText`` source -files. diff --git a/tests/scripts/waf-tools/f_guidelines/tests/rst-007_tests/rst_007_test9.rst b/tests/scripts/waf-tools/f_guidelines/tests/rst-007_tests/rst_007_test9.rst deleted file mode 100644 index 4ef55f59..00000000 --- a/tests/scripts/waf-tools/f_guidelines/tests/rst-007_tests/rst_007_test9.rst +++ /dev/null @@ -1,12 +0,0 @@ -This test raise a rst_007 error, because overline and underlines are too long and -have the wrong symbols -.. include:: ./../../macros.txt - -.. _RESTRUCTUREDTEXT_CODING_GUIDELINES: - -========================================== -reStructuredText Coding Guidelines -========================================== - -These coding guidelines **MUST** be applied to all ``reStructuredText`` source -files. diff --git a/tests/scripts/waf-tools/f_hcg/__init__.py b/tests/scripts/waf-tools/f_hcg/__init__.py deleted file mode 100644 index 6c184964..00000000 --- a/tests/scripts/waf-tools/f_hcg/__init__.py +++ /dev/null @@ -1,43 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -# f_hcg is not a proper python module name, but this is OK since we need -# it just for the unit test discovery -# pylint: disable-all diff --git a/tests/scripts/waf-tools/f_hcg/test_f_hcg.py b/tests/scripts/waf-tools/f_hcg/test_f_hcg.py deleted file mode 100644 index cf6a46d0..00000000 --- a/tests/scripts/waf-tools/f_hcg/test_f_hcg.py +++ /dev/null @@ -1,130 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Implements tests for the waf tool ``f_hcg``. -""" - -import json -import os -import sys -import unittest - -HAVE_GIT = False -try: - from git import Repo - from git.exc import InvalidGitRepositoryError - - HAVE_GIT = True -except ImportError: - pass - - -def get_git_root(path: str) -> str: - """helper function to find the repository root - - Args: - path (string): path of test_f_guidelines - - Returns: - root (string): root path of the git repository - """ - root = os.path.join(os.path.dirname(path), "..", "..", "..", "..") - try: - repo = Repo(path, search_parent_directories=True) - root = repo.git.rev_parse("--show-toplevel") - except InvalidGitRepositoryError: - pass - return root - - -ROOT = get_git_root(os.path.realpath(__file__)) - - -try: - import f_hcg -except ImportError: - sys.path.extend( - [ - os.path.join(ROOT, "tools", "waf-tools"), - os.path.join(ROOT, "tools", "waf3-2.0.22-1241519b19b496207abef1f72bbf61c2"), - ] - ) - import f_hcg - - -class TestHcgMethods(unittest.TestCase): - """Unit test class for the ``f_hcg`` tool""" - - def test_hcg(self): - """Checks that generated sources, headers and have-to-be-removed files - from a HALCoGen configuration file are the same as the ones that are - expected.""" - script_dir = os.path.join(ROOT, "tests", "scripts", "waf-tools", "f_hcg") - nr_of_tests = 4 - for i in range(nr_of_tests): - with open( - os.path.join(script_dir, "tests", f"test_hcg{i}.json"), - "r", - encoding="utf-8", - ) as hcg_file: - valid = json.load(hcg_file) - hcg_configuration = f_hcg.NodeStructure( - os.path.join(script_dir, "tests", f"test_hcg{i}.hcg") - ) - hcg_configuration.parse_xml() - self.assertEqual(hcg_configuration.sources, valid["sources"]) - self.assertEqual(hcg_configuration.headers, valid["headers"]) - self.assertEqual(hcg_configuration.removes, valid["removes"]) - - with open( - os.path.join(script_dir, "tests", "test_hcg_raises.json"), - "r", - encoding="utf-8", - ) as hcg_file: - valid = json.load(hcg_file) - hcg_configuration = f_hcg.NodeStructure( - os.path.join(script_dir, "tests", "test_hcg_raises.hcg") - ) - with self.assertRaises(BaseException): - hcg_configuration.parse_xml() - - -if __name__ == "__main__": - unittest.main() diff --git a/tests/scripts/waf-tools/f_hcg/tests/test_hcg0.dil b/tests/scripts/waf-tools/f_hcg/tests/test_hcg0.dil deleted file mode 100644 index de31e3ec..00000000 --- a/tests/scripts/waf-tools/f_hcg/tests/test_hcg0.dil +++ /dev/null @@ -1,11975 +0,0 @@ -# TMS570LC4357ZWT 09/23/20 12:17:05 -# -ARCH=TMS570LC4357ZWT -# -DRIVER.TOOLS.VAR.GCC.VALUE=0 -DRIVER.TOOLS.VAR.ARM.VALUE=0 -DRIVER.TOOLS.VAR.IAR.VALUE=0 -DRIVER.TOOLS.VAR.GHS.VALUE=0 -DRIVER.TOOLS.VAR.TI.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_AVCLK4_DIVIDER.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_PERMISSION.VALUE=PRIV_RW_USER_RW_NOEXEC -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_SUB_3_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_TYPE.VALUE=NORMAL_OIWTNOWA_NONSHARED -DRIVER.SYSTEM.VAR.VIM_CHANNEL_122_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_114_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_106_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_70_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_62_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_54_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_46_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_38_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CAPTURE_EVENT_SOURCE_0.VALUE=0 -DRIVER.SYSTEM.VAR.FLASH_EEPROM_DATA_1_WAIT_STATE_FREQ.VALUE=32.0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_PERMISSION_VALUE.VALUE=0x1200 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_81_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_73_NAME.VALUE=het2LowLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_65_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_57_NAME.VALUE=adc2Group2Interrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_49_NAME.VALUE=mibspi4HighLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_2_MAPPING.VALUE=2 -DRIVER.SYSTEM.VAR.VIM_CAPTURE_EVENT_SOURCE_1.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_SIZE.VALUE=4_KB -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_SUB_1_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_SUB_4_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_111_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_103_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.EQEP2_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.FLASH_DATA_3_WAIT_STATE_FREQ.VALUE=180.0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_96_MAPPING.VALUE=96 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_88_MAPPING.VALUE=88 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_1_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_SUB_2_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_SUB_7_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_END_ADDRESS.VALUE=0x0000001f -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_SUB_5_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_DATA_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_11_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.LIN2_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.SPI3_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_PLL1_BYPASS_ON_SLIP.VALUE=0x20000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_TYPE_VALUE.VALUE=0x0002 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_124_NAME.VALUE=epcFullInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_116_NAME.VALUE=sci4HighLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_108_NAME.VALUE=ecap5Interrupt -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_SUB_5_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_BASE_ADDRESS.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_SIZE.VALUE=128_MB -DRIVER.SYSTEM.VAR.VIM_CHANNEL_100_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_98_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_20_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_12_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_2_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.CRC_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.MIBSPI1_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_HCLK_FREQ.VALUE=100.000 -DRIVER.SYSTEM.VAR.CLKT_PLL2_FREQ.VALUE=80.00 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_81_MAPPING.VALUE=81 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_73_MAPPING.VALUE=73 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_65_MAPPING.VALUE=65 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_57_MAPPING.VALUE=57 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_49_MAPPING.VALUE=49 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_40_NAME.VALUE=dmaBTCAInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_32_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_24_NAME.VALUE=het1LowLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_16_NAME.VALUE=can1HighLevelInterrupt -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_SUB_6_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_SUB_0_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_92_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_84_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_76_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_68_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_31_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_23_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_15_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.ECLK_CLKSRC.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_TYPE_VALUE.VALUE=0x0006 -DRIVER.SYSTEM.VAR.CLKT_PLL2_OUTPUT_DIV.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_EXT2_ENABLE.VALUE=FALSE -DRIVER.SYSTEM.VAR.CLKT_PLL1_SOURCE_ENABLE.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_SUB_1_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_END_ADDRESS.VALUE=0x6fffffff -DRIVER.SYSTEM.VAR.VIM_CHANNEL_96_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_88_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_9_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_4_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_RTI2_PRE_SOURCE.VALUE=PLL1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_SIZE_VALUE.VALUE=0x1A -DRIVER.SYSTEM.VAR.VIM_CHANNEL_99_NAME.VALUE=etpwm5TripZoneInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_50_MAPPING.VALUE=50 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_42_MAPPING.VALUE=42 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_34_MAPPING.VALUE=34 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_26_MAPPING.VALUE=26 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_18_MAPPING.VALUE=18 -DRIVER.SYSTEM.VAR.CLKT_VCLK3_DOMAIN_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.FLASH_ECC_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.FLASH_BANKS.VALUE=4 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_TYPE.VALUE=NORMAL_OIWTNOWA_SHARED -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_SUB_4_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_SUB_2_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_IRQ_DISP_ENTRY.VALUE=_isrStub -DRIVER.SYSTEM.VAR.VIM_CHANNEL_111_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_103_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_92_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_84_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_76_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_68_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CAN3_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_AVCLK1_SOURCE.VALUE=VCLK -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_SUB_2_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_SUB_5_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.ETPWM4_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.DCC2_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_PLL1_RESET_ON_OSCILLATOR_FAIL.VALUE=0x00800000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_PERMISSION_VALUE.VALUE=0x0500 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_11_MAPPING.VALUE=11 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_PERMISSION.VALUE=PRIV_RW_USER_RW_NOEXEC -DRIVER.SYSTEM.VAR.LBIST_ENA.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_AVCLK2_DOMAIN_ENABLE.VALUE=FALSE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_SUB_3_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_SUB_6_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_TYPE.VALUE=NORMAL_OIWBWA_NONSHARED -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_END_ADDRESS.VALUE=0x00007fff -DRIVER.SYSTEM.VAR.VIM_CHANNEL_41_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_33_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_25_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_17_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_3_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.ECAP6_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.SCI_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.FLASH_DATA_1_WAIT_STATE_FREQ.VALUE=90.0 -DRIVER.SYSTEM.VAR.RAM_STACK_IRQ_BASE.VALUE=0x08000500 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_125_MAPPING.VALUE=125 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_117_MAPPING.VALUE=117 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_109_MAPPING.VALUE=109 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_90_NAME.VALUE=etpwm1Interrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_82_NAME.VALUE=dcc1DoneInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_74_NAME.VALUE=sciLowLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_66_NAME.VALUE=i2cInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_58_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.CLKT_AVCLK3_DOMAIN_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_PMU_GLOBAL_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_SIZE.VALUE=512_KB -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_END_ADDRESS.VALUE=0x0807ffff -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_SUB_4_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_BASE_ADDRESS.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_TASK_REGION_STACK.VALUE=12 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_97_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_89_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_81_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_73_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_70_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_65_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_62_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_57_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_54_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_49_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_46_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_38_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.EMAC_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_8_MAPPING.VALUE=8 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_2_NAME.VALUE=vPortPreemptiveTick -DRIVER.SYSTEM.VAR.CORE_PMU_COUNTER0_EVENT.VALUE=0x11 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_PERMISSION.VALUE=PRIV_RW_USER_RW_NOEXEC -DRIVER.SYSTEM.VAR.FLASH_ADDRESS_WAIT_STATES.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_SUB_7_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_RESET_ENTRY.VALUE=_c_int00 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_127_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_122_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_119_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_114_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_106_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_9_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.ADC1_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.MIBSPI_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.ECLK_VCLK1_FREQ.VALUE=100.000 -DRIVER.SYSTEM.VAR.CLKT_EXTERNAL_FREQ.VALUE=25.0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_SIZE_VALUE.VALUE=0x04 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_125_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_117_NAME.VALUE=can4LowLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_110_MAPPING.VALUE=110 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_109_NAME.VALUE=ecap6Interrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_102_MAPPING.VALUE=102 -DRIVER.SYSTEM.VAR.CLKT_AVCLK3_DIVIDER.VALUE=1 -DRIVER.SYSTEM.VAR.RAM_LENGTH.VALUE=0x00080000 -DRIVER.SYSTEM.VAR.CORE_MPU_TOTAL_REGION.VALUE=16 -DRIVER.SYSTEM.VAR.CLKT_VCLK1_DOMAIN_ENABLE.VALUE=FALSE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_SUB_2_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_SIZE.VALUE=256_MB -DRIVER.SYSTEM.VAR.VIM_CHANNEL_124_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_116_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_108_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.I2C2_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_41_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_33_NAME.VALUE=dmaFTCAInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_25_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_17_NAME.VALUE=spi2HighLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_1_MAPPING.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_EXTERNAL_SOURCE_ENABLE.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_SUB_0_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_END_ADDRESS.VALUE=0x0000001f -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_BASE_ADDRESS.VALUE=0xF0000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_SUB_3_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_40_INT_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_32_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_24_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_16_INT_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_5_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_PERMISSION_VALUE.VALUE=0x1200 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_TYPE_VALUE.VALUE=0x0006 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_95_MAPPING.VALUE=95 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_87_MAPPING.VALUE=87 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_79_MAPPING.VALUE=79 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_SUB_1_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_SUB_6_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_SUB_4_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_IRQ_VIC_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_121_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_113_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_105_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_70_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_62_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_54_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_50_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_46_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_42_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_38_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_34_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_26_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_18_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.SPI1_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.FLASH_EEPROM_DATA_8_WAIT_STATE_FREQ.VALUE=144.0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_100_NAME.VALUE=etpwm6Interrupt -DRIVER.SYSTEM.VAR.CLKT_RTI2_DIVIDER.VALUE=1 -DRIVER.SYSTEM.VAR.RAM_ECC_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_SUB_4_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_TYPE.VALUE=NORMAL_OINC_SHARED -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_SUB_7_DISABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_99_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.CLKT_EXTERNAL_FREQ_INPUT.VALUE=25.0 -DRIVER.SYSTEM.VAR.STC_INTERVAL.VALUE=40 -DRIVER.SYSTEM.VAR.CLKT_LPO_HIGH_TRIM_VALUE.VALUE=16 -DRIVER.SYSTEM.VAR.CLKT_GCLK_FREQ.VALUE=300.000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_PERMISSION_VALUE.VALUE=0x0600 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_80_MAPPING.VALUE=80 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_72_MAPPING.VALUE=72 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_64_MAPPING.VALUE=64 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_56_MAPPING.VALUE=56 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_48_MAPPING.VALUE=48 -DRIVER.SYSTEM.VAR.CLKT_PLL1_REF_CLOCK_DIV.VALUE=10 -DRIVER.SYSTEM.VAR.FLASHW_BASE_ADDRESS.VALUE=0xFFF87000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_SUB_5_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_FIQ_ENTRY.VALUE="ldr pc,[pc,#-0x1b0]" -DRIVER.SYSTEM.VAR.VIM_CHANNEL_10_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.SCILIN_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.SPI_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.ALL_DVR_ENA.VALUE=1 -DRIVER.SYSTEM.VAR.CCM_MENU_VALUE.VALUE=0x0001 -DRIVER.SYSTEM.VAR.PBIST_ENA1.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_VCLK4_DIVIDER.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_SUB_0_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_TYPE.VALUE=DEVICE_NONSHAREABLE -DRIVER.SYSTEM.VAR.VIM_CHANNEL_97_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_89_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_OSCILLATOR_FREQ.VALUE=20.0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_91_NAME.VALUE=etpwm1TripZoneInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_83_NAME.VALUE=dcc2DoneInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_75_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_67_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_59_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_41_MAPPING.VALUE=41 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_33_MAPPING.VALUE=33 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_25_MAPPING.VALUE=25 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_17_MAPPING.VALUE=17 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_SUB_3_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_SUB_1_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_IRQ_MODE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_11_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_11_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.PMM_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.EMIF_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CAN1_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CAN_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_TYPE_VALUE.VALUE=0x0006 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_3_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.CLKT_PLL1_OUTPUT_DIV.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_PERMISSION.VALUE=PRIV_RW_USER_RO_NOEXEC -DRIVER.SYSTEM.VAR.CLKT_PLL2_FM_ENABLE.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_SUB_1_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_SUB_4_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_BASE_ADDRESS.VALUE=0xF8000000 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_92_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_91_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_84_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_83_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_76_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_75_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_68_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_67_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_59_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_8_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.ETPWM2_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.HET1_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_RTI1_PRE_SOURCE.VALUE=PLL1 -DRIVER.SYSTEM.VAR.FLASH_MODE_VALUE.VALUE=3 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_SIZE_VALUE.VALUE=0x1B -DRIVER.SYSTEM.VAR.CORE_MPU_TASK_REGION_NUM.VALUE=3 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_126_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_118_NAME.VALUE=lin2LowLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_10_MAPPING.VALUE=10 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_SUB_2_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_SIZE.VALUE=128_MB -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_SUB_5_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_125_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_117_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_109_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_91_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_83_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_75_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_67_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_59_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_3_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.ECAP4_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_PLL2_BYPASS_ON_SLIP.VALUE=0x20000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_PERMISSION_VALUE.VALUE=0x1300 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_124_MAPPING.VALUE=124 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_116_MAPPING.VALUE=116 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_108_MAPPING.VALUE=108 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_50_NAME.VALUE=adc2Group0Interrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_42_NAME.VALUE=can2LowLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_34_NAME.VALUE=dmaLFSAInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_26_NAME.VALUE=mibspi1LowLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_18_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.FLASH_ARBITRATION.VALUE=FIX -DRIVER.SYSTEM.VAR.CLKT_LPO_HIGH_SOURCE_ENABLE.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_SUB_3_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_110_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_102_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.SCI4_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.PBIST_ALGO_9_10.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_EXTERNAL2_FREQ_INPUT.VALUE=40.0 -DRIVER.SYSTEM.VAR.FLASH_EEPROM_DATA_6_WAIT_STATE_FREQ.VALUE=112.0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_SIZE_VALUE.VALUE=0x12 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_7_MAPPING.VALUE=7 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_PERMISSION.VALUE=PRIV_RW_USER_RO_NOEXEC -DRIVER.SYSTEM.VAR.CLKT_RTI2_DOMAIN_ENABLE.VALUE=FALSE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_SUB_6_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_BACKGROUND_REGION_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_8_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_2_INT_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CONFIG.VALUE=TRUE -DRIVER.SYSTEM.VAR.CRC2_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_101_MAPPING.VALUE=101 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_101_NAME.VALUE=etpwm6TripZoneInterrupt -DRIVER.SYSTEM.VAR.RAM_STACK_ABORT_LENGTH.VALUE=0x00000100 -DRIVER.SYSTEM.VAR.FLASH_EEPROM_DATA_WAIT_STATES.VALUE=6 -DRIVER.SYSTEM.VAR.FLASH_DATA_MAX_WAIT_STATES.VALUE=3 -DRIVER.SYSTEM.VAR.FLASH_MODE.VALUE=PIPELINE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_TYPE.VALUE=DEVICE_NONSHAREABLE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_SUB_7_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_SUB_1_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_61_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_61_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_53_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_53_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_45_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_45_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_40_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_37_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_37_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_32_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_29_INT_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_29_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_24_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_16_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.MINIT_VALUE.VALUE=0x1E57F -DRIVER.SYSTEM.VAR.VIM_CHANNEL_0_MAPPING.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_PLL1_DIV.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_PERMISSION.VALUE=PRIV_RO_USER_RO_NOEXEC -DRIVER.SYSTEM.VAR.CLKT_VCLK4_DOMAIN_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_PLL2_ENABLE.VALUE=FALSE -DRIVER.SYSTEM.VAR.RAM_BASE_ADDRESS.VALUE=0x08000000 -DRIVER.SYSTEM.VAR.CORE_PMU_EVENT_EXPORT_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_SUB_2_DISABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_126_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_118_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_110_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_102_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_96_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_88_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.GIO_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_SIZE_VALUE.VALUE=0x04 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_94_MAPPING.VALUE=94 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_86_MAPPING.VALUE=86 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_78_MAPPING.VALUE=78 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_SUB_0_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_SUB_5_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_TYPE.VALUE=STRONGLYORDERED_SHAREABLE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_SUB_3_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_BASE_ADDRESS.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_UNDEF_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_8_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.MIBSPI4_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.RAM_STACK_ABORT_BASE.VALUE=0x08000600 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_92_NAME.VALUE=etpwm2Interrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_84_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_76_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_68_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.CLKT_RTI1_DIVIDER.VALUE=2 -DRIVER.SYSTEM.VAR.CLKT_AVCLK4_DOMAIN_ENABLE.VALUE=FALSE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_SUB_3_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_SUB_6_DISABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_123_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_115_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_107_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_31_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_23_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_15_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_1_INT_TYPE.VALUE=FIQ -DRIVER.SYSTEM.VAR.CLKT_GHV_WAKUP_SOURCE.VALUE=PLL1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_TYPE_VALUE.VALUE=0x0000 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_71_MAPPING.VALUE=71 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_63_MAPPING.VALUE=63 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_55_MAPPING.VALUE=55 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_47_MAPPING.VALUE=47 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_39_MAPPING.VALUE=39 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_4_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.CLKT_HCLK_DIVIDER.VALUE=2 -DRIVER.SYSTEM.VAR.CORE_PMU_COUNTER1_EVENT.VALUE=0x11 -DRIVER.SYSTEM.VAR.EFUSE_SELFTEST_ENA.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_AVCLK4_DOMAIN_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.RAM_LINK_BASE_ADDRESS.VALUE=0x08000800 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_BASE_ADDRESS.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_SUB_4_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_SUB_7_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_120_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_112_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_104_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_30_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_22_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_14_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_PERMISSION_VALUE.VALUE=0x1600 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_127_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_119_NAME.VALUE=sci4LowLevelInterrupt -DRIVER.SYSTEM.VAR.CLKT_PLL2_DIV.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_VCLK3_DIVIDER.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_LPO_TRIM_OTP_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_SUB_7_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_SIZE.VALUE=8_MB -DRIVER.SYSTEM.VAR.VIM_CHANNEL_95_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_87_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_79_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_61_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_53_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_45_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_37_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_29_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_AVCLK4_SOURCE.VALUE=EXTERNAL1 -DRIVER.SYSTEM.VAR.FLASH_EEPROM_DATA_4_WAIT_STATE_FREQ.VALUE=80.0 -DRIVER.SYSTEM.VAR.FLASH_ADDRESS_WAIT_STATES_FREQ.VALUE=120.0 -DRIVER.SYSTEM.VAR.RAM_STACK_BASE.VALUE=0x08000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_TYPE_VALUE.VALUE=0x0010 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_51_NAME.VALUE=adc2Group1Interrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_43_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_40_MAPPING.VALUE=40 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_35_NAME.VALUE=can2HighLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_32_MAPPING.VALUE=32 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_27_NAME.VALUE=lin1LowLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_24_MAPPING.VALUE=24 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_19_NAME.VALUE=crcInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_16_MAPPING.VALUE=16 -DRIVER.SYSTEM.VAR.CLKT_VCLK3_DOMAIN_ENABLE.VALUE=FALSE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_SUB_2_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_END_ADDRESS.VALUE=0xf07fffff -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_SUB_0_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.ETPWM7_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_1.VALUE=0 -DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_2.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_SUB_0_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_SUB_3_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_96_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_88_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_3.VALUE=0 -DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_4.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_110_NAME.VALUE=eqep1Interrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_102_NAME.VALUE=etpwm7Interrupt -DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_5.VALUE=0 -DRIVER.SYSTEM.VAR.LBIST_STT.VALUE=1 -DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_6.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_SUB_1_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_SUB_4_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_ECC_AVAILABLE.VALUE=TRUE -DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_7.VALUE=0 -DRIVER.SYSTEM.VAR.ECAP2_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_8.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_TYPE_VALUE.VALUE=0x000C -DRIVER.SYSTEM.VAR.VIM_CHANNEL_123_MAPPING.VALUE=123 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_115_MAPPING.VALUE=115 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_107_MAPPING.VALUE=107 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_10_NAME.VALUE=het1HighLevelInterrupt -DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_9.VALUE=0 -DRIVER.SYSTEM.VAR.RAM_STACK_USER_LENGTH.VALUE=0x00000300 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_PERMISSION.VALUE=PRIV_RW_USER_RO_NOEXEC -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_SUB_2_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_SUB_7_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_END_ADDRESS.VALUE=0xffffffff -DRIVER.SYSTEM.VAR.CORE_CACHE_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_80_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_72_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_64_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_56_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_48_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_10_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_7_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.SCI2_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.LIN_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_RTI1_FREQ.VALUE=100.000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_SIZE_VALUE.VALUE=0x1A -DRIVER.SYSTEM.VAR.VIM_CHANNEL_6_MAPPING.VALUE=6 -DRIVER.SYSTEM.VAR.CLKT_PLL2_SPEADING_AMOUNT.VALUE=61 -DRIVER.SYSTEM.VAR.CLKT_PLL2_SPEADING_RATE.VALUE=255 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_SUB_5_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_BASE_ADDRESS.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_TYPE.VALUE=NORMAL_OIWTNOWA_SHARED -DRIVER.SYSTEM.VAR.VIM_CHANNEL_121_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_113_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_105_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_90_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_90_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_82_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_82_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_74_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_74_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_66_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_66_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_58_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_58_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_PLL2_RESET_ON_SLIP.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.ECLK_FREQ.VALUE=2.222 -DRIVER.SYSTEM.VAR.CLKT_AVCLK1_FREQ.VALUE=100.000 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_100_MAPPING.VALUE=100 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_93_NAME.VALUE=etpwm2TripZoneInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_85_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_77_NAME.VALUE=EMACTxIntISR -DRIVER.SYSTEM.VAR.VIM_CHANNEL_69_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.RAM_STACK_IRQ_LENGTH.VALUE=0x00000100 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_SUB_6_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_SUB_0_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_2_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_RTI2_POST_SOURCE.VALUE=VCLK -DRIVER.SYSTEM.VAR.FLASH_EEPROM_DATA_10_WAIT_STATE_FREQ.VALUE=176.0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_SIZE_VALUE.VALUE=0x0B -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_PERMISSION_VALUE.VALUE=0x1600 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_PERMISSION_VALUE.VALUE=0x1200 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_5_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.RAM_STACK_LENGTH.VALUE=0x00000800 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_PERMISSION.VALUE=PRIV_RO_USER_NA_EXEC -DRIVER.SYSTEM.VAR.CLKT_LPO_BIAS.VALUE=true -DRIVER.SYSTEM.VAR.CLKT_AVCLK3_DIVIDER1.VALUE=4 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_SUB_1_DISABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_END_ADDRESS.VALUE=0x003fffff -DRIVER.SYSTEM.VAR.CORE_PRAGMA_ENA.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_101_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_4_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_1_INT_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.SPI4_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_AVCLK4_POST_SOURCE.VALUE=VCLKA4_DIVR -DRIVER.SYSTEM.VAR.CLKT_VCLK1_FREQ.VALUE=100.000 -DRIVER.SYSTEM.VAR.CLKT_AVCLK3_FREQ1.VALUE=100.000 -DRIVER.SYSTEM.VAR.FLASH_EEPROM_DATA_2_WAIT_STATE_FREQ.VALUE=48.0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_93_MAPPING.VALUE=93 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_85_MAPPING.VALUE=85 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_77_MAPPING.VALUE=77 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_69_MAPPING.VALUE=69 -DRIVER.SYSTEM.VAR.CLKT_AVCLK3_FREQ2.VALUE=18.750 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_END_ADDRESS.VALUE=0x0000001f -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_SUB_4_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_SIZE.VALUE=32_BYTES -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_BASE_ADDRESS.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_SUB_2_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_60_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_52_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_44_INT_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_41_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_36_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_33_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_28_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_25_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_17_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.MIBSPI2_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_PLL1_MUL.VALUE=150 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_60_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_52_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_44_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_36_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_28_NAME.VALUE=adc1Group2Interrupt -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_PERMISSION.VALUE=PRIV_RO_USER_RO_NOEXEC -DRIVER.SYSTEM.VAR.CLKT_OSC_ENABLE.VALUE=TRUE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_SUB_2_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_SIZE.VALUE=32_BYTES -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_SUB_5_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_SVC_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_125_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_117_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_109_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_98_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_31_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_23_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_15_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.PINMUX_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.PBIST_ALGO_3_4.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_LPO_BIAS_VALUE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_70_MAPPING.VALUE=70 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_62_MAPPING.VALUE=62 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_54_MAPPING.VALUE=54 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_46_MAPPING.VALUE=46 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_38_MAPPING.VALUE=38 -DRIVER.SYSTEM.VAR.CLKT_AVCLK1_DOMAIN_ENABLE.VALUE=FALSE -DRIVER.SYSTEM.VAR.CLKT_EXTERNAL2_SOURCE_ENABLE.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_SUB_3_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_SUB_6_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_PREFETCH_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_95_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_87_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_79_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_TASK_REGION_LAST.VALUE=15 -DRIVER.SYSTEM.VAR.CORE_MPU_TASK_REGION_FIRST.VALUE=13 -DRIVER.SYSTEM.VAR.PBIST_ALGO_15.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_111_NAME.VALUE=eqep2Interrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_103_NAME.VALUE=etpwm7TripZoneInterrupt -DRIVER.SYSTEM.VAR.PBIST_ALGO_16.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_VCLK2_DIVIDER.VALUE=0 -DRIVER.SYSTEM.VAR.RAM_LINK_LENGTH.VALUE=0x0007f800 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_SUB_6_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_END_ADDRESS.VALUE=0x0000001f -DRIVER.SYSTEM.VAR.VIM_CHANNEL_30_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_22_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_14_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_7_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CAN4_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_LPO_OSCFRQCONFIGCNT_VALUE.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_AVCLK2_SOURCE.VALUE=PLL2 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_TYPE_VALUE.VALUE=0x0010 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_31_MAPPING.VALUE=31 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_23_MAPPING.VALUE=23 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_15_MAPPING.VALUE=15 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_11_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.PBIST_ALGO_5_6.VALUE=0 -DRIVER.SYSTEM.VAR.PBIST_ENA.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_HCLK_DOMAIN_ENABLE.VALUE=TRUE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_SUB_7_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_SUB_1_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_122_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_114_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_111_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_106_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_103_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_10_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.ETPWM5_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.ETPWM_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_PLL2_MUL.VALUE=40 -DRIVER.SYSTEM.VAR.CLKT_RTI2_FREQ.VALUE=0.0 -DRIVER.SYSTEM.VAR.CLKT_LPO_LOW_FREQ.VALUE=0.080 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_TYPE.VALUE=NORMAL_OINC_NONSHARED -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_SUB_2_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_PREFETCH_ENTRY.VALUE=_prefetch -DRIVER.SYSTEM.VAR.VIM_CHANNEL_91_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_83_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_75_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_67_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_59_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.CLKT_AVCLK2_FREQ.VALUE=80.000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_TYPE_VALUE.VALUE=0x000C -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_PERMISSION_VALUE.VALUE=0x1600 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_PERMISSION_VALUE.VALUE=0x1200 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_94_NAME.VALUE=etpwm3Interrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_86_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_78_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.ECLK_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_OSCILLATOR_SOURCE_ENABLE.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_SUB_0_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_BASE_ADDRESS.VALUE=0x60000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_SUB_3_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_124_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_116_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_108_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_60_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_52_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_44_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_36_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_28_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.PBIST_ALGO_7_8.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_PLL2_RESET_ON_OSCILLATOR_FAIL.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.FLASH_BANK_LINK_BASE_ADDRESS_0.VALUE=0x00008020 -DRIVER.SYSTEM.VAR.FLASH_BANK_LINK_BASE_ADDRESS_1.VALUE=0x00200000 -DRIVER.SYSTEM.VAR.FLASH_EEPROM_DATA_0_WAIT_STATE_FREQ.VALUE=16.0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_SIZE_VALUE.VALUE=0x04 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_122_MAPPING.VALUE=122 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_114_MAPPING.VALUE=114 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_106_MAPPING.VALUE=106 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_6_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.CORE_PMU_COUNTER2_EVENT.VALUE=0x11 -DRIVER.SYSTEM.VAR.FLASH_DATA_WAIT_STATES.VALUE=2 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_SUB_1_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_SUB_6_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_95_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_87_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_79_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.ADC2_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_VCLK2_FREQ.VALUE=100.000 -DRIVER.SYSTEM.VAR.FLASH_DATA_2_WAIT_STATE_FREQ.VALUE=135.0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_5_MAPPING.VALUE=5 -DRIVER.SYSTEM.VAR.VIM_CHANNELS.VALUE=128 -DRIVER.SYSTEM.VAR.FLASH_BANK_LINK_BASE_ADDRESS_7.VALUE=0xF0200000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_SUB_4_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_SIZE.VALUE=32_BYTES -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_SUB_7_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_7_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.ESM_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_99_MAPPING.VALUE=99 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_61_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_53_NAME.VALUE=mibspi5HighLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_45_NAME.VALUE=can3HighLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_37_NAME.VALUE=mibspi3HighInterruptLevel -DRIVER.SYSTEM.VAR.VIM_CHANNEL_29_NAME.VALUE=can1LowLevelInterrupt -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_PERMISSION.VALUE=PRIV_RW_USER_RO_NOEXEC -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_SUB_5_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_SIZE.VALUE=32_BYTES -DRIVER.SYSTEM.VAR.VIM_CHANNEL_127_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_119_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_60_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_52_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_44_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_36_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_28_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_6_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.EQEP1_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_LPO_HIGH_FREQ.VALUE=10.000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_SIZE_VALUE.VALUE=0x12 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_SUB_0_DISABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_IRQ_ENTRY.VALUE="ldr pc,[pc,#-0x1b0]" -DRIVER.SYSTEM.VAR.VIM_CHANNEL_101_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_81_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_73_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_65_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_57_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_49_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.ECAP_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.LIN1_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.SPI2_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_GHV_POWER_DOWN_SOURCE.VALUE=LPO_LOW -DRIVER.SYSTEM.VAR.RAM_STACK_USER_BASE.VALUE=0x08000000 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_120_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_112_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_104_NAME.VALUE=ecap1Interrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_92_MAPPING.VALUE=92 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_84_MAPPING.VALUE=84 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_76_MAPPING.VALUE=76 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_68_MAPPING.VALUE=68 -DRIVER.SYSTEM.VAR.CLKT_GCLK_DOMAIN_ENABLE.VALUE=TRUE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_SUB_3_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_SUB_1_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_81_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_73_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_65_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_57_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_49_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.SYSTEM_INIT.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_SIZE_VALUE.VALUE=0x04 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_20_NAME.VALUE=esmLowInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_12_NAME.VALUE=mibspi1HighLevelInterrupt -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_PERMISSION.VALUE=PRIV_RO_USER_RO_EXEC -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_SUB_1_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_SUB_4_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_BASE_ADDRESS.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_1_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_0_INT_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_0_INT_TYPE.VALUE=FIQ -DRIVER.SYSTEM.VAR.FLASH_EEPROM_DATA_9_WAIT_STATE_FREQ.VALUE=160.0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_PERMISSION_VALUE.VALUE=0x0600 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_PERMISSION_VALUE.VALUE=0x1200 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_61_MAPPING.VALUE=61 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_53_MAPPING.VALUE=53 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_45_MAPPING.VALUE=45 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_37_MAPPING.VALUE=37 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_29_MAPPING.VALUE=29 -DRIVER.SYSTEM.VAR.ECLK_PORT_BIT0_DIR.VALUE=1 -DRIVER.SYSTEM.VAR.FLASH_LENGTH.VALUE=0x00400000 -DRIVER.SYSTEM.VAR.RAM_STACK_FIQ_LENGTH.VALUE=0x00000100 -DRIVER.SYSTEM.VAR.CLKT_EXT1_ENABLE.VALUE=FALSE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_SUB_2_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_SUB_7_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_TYPE.VALUE=DEVICE_NONSHAREABLE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_SUB_5_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_100_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_51_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_43_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_35_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_27_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_21_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_19_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_13_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_ECC_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_AVCLK3_FREQ.VALUE=100.000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_TYPE_VALUE.VALUE=0x0006 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_95_NAME.VALUE=etpwm3TripZoneInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_87_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_79_NAME.VALUE=EMACRxIntISR -DRIVER.SYSTEM.VAR.CLKT_VCLK1_DIVIDER.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_PERMISSION.VALUE=PRIV_RO_USER_RO_NOEXEC -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_SUB_5_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_BASE_ADDRESS.VALUE=0x0807F000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_TYPE.VALUE=NORMAL_OIWTNOWA_SHARED -DRIVER.SYSTEM.VAR.VIM_CHANNEL_124_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_116_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_108_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_94_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_86_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_78_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.CAN2_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.ECLK_PORT_BIT0_DOUT.VALUE=1 -DRIVER.SYSTEM.VAR.PBIST_ALGO_1.VALUE=0 -DRIVER.SYSTEM.VAR.FLASH_DATA_0_WAIT_STATE_FREQ.VALUE=45.0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_30_MAPPING.VALUE=30 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_22_MAPPING.VALUE=22 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_14_MAPPING.VALUE=14 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_7_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.PBIST_ALGO_2.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_RTI1_DOMAIN_ENABLE.VALUE=FALSE -DRIVER.SYSTEM.VAR.CLKT_AVCLK1_DOMAIN_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_SUB_6_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_SUB_0_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_127_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_119_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_30_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_22_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_14_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.ETPWM3_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.DCC1_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.HET2_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_VCLK3_FREQ.VALUE=100.000 -DRIVER.SYSTEM.VAR.CLKT_AVCLK4_FREQ1.VALUE=25.000 -DRIVER.SYSTEM.VAR.PBIST_ALGO_11_12.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_PLL2_SOURCE_ENABLE.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.FLASH_EEPROM_DATA_MAX_WAIT_STATES.VALUE=11 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_SUB_7_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_END_ADDRESS.VALUE=0x0000001f -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_SUB_1_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_94_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_86_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_78_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_21_INT_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_13_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.ECAP5_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.ADC_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_TYPE_VALUE.VALUE=0x000B -DRIVER.SYSTEM.VAR.VIM_CHANNEL_70_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_62_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_54_NAME.VALUE=mibspi4LowLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_46_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_38_NAME.VALUE=mibspi3LowLevelInterrupt -DRIVER.SYSTEM.VAR.FEE_FLASH_ECC_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_SIZE.VALUE=32_BYTES -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_SUB_2_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_RESET_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_110_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_102_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_6_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_121_MAPPING.VALUE=121 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_113_MAPPING.VALUE=113 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_105_MAPPING.VALUE=105 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_SUB_0_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_SUB_5_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_RESERVED_ENTRY.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_121_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_113_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_105_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_71_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_63_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_55_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_47_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_39_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_TYPE_VALUE.VALUE=0x0006 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_121_NAME.VALUE=crc2Interrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_113_NAME.VALUE=can4HighLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_105_NAME.VALUE=ecap2Interrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_4_MAPPING.VALUE=4 -DRIVER.SYSTEM.VAR.CLKT_AVCLK3_DOMAIN_ENABLE.VALUE=FALSE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_SUB_3_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_END_ADDRESS.VALUE=0x87ffffff -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_SUB_6_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_SIZE.VALUE=4_MB -DRIVER.SYSTEM.VAR.VIM_CHANNEL_120_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_112_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_104_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.I2C1_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.FLASH_EEPROM_DATA_7_WAIT_STATE_FREQ.VALUE=128.0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_PERMISSION_VALUE.VALUE=0x1300 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_SIZE_VALUE.VALUE=0x04 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_PERMISSION_VALUE.VALUE=0x0300 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_98_MAPPING.VALUE=98 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_21_NAME.VALUE=vPortYieldWithinAPI -DRIVER.SYSTEM.VAR.VIM_CHANNEL_13_NAME.VALUE=lin1HighLevelInterrupt -DRIVER.SYSTEM.VAR.ECLK_PORT_BIT0_FUN.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_BASE_ADDRESS.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_SUB_4_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_SUB_7_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_94_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_86_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_78_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_51_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_43_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_35_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_27_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_19_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.HET_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.PBIST_ALGO_13_14.VALUE=0 -DRIVER.SYSTEM.VAR.RAM_STACK_UNDEF_BASE.VALUE=0x08000700 -DRIVER.SYSTEM.VAR.RAM_STACK_SVC_BASE.VALUE=0x08000300 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_SUB_7_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_TYPE.VALUE=NORMAL_OIWTNOWA_SHARED -DRIVER.SYSTEM.VAR.VIM_CHANNEL_99_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_3_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.DMM_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.MIBSPI5_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.FLASH_BANK_CONFIG_0.VALUE=ACTIVE -DRIVER.SYSTEM.VAR.CLKT_AVCLK4_FREQ.VALUE=25.000 -DRIVER.SYSTEM.VAR.FLASH_BANK_CONFIG_1.VALUE=ACTIVE -DRIVER.SYSTEM.VAR.VIM_CHANNEL_96_NAME.VALUE=etpwm4Interrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_91_MAPPING.VALUE=91 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_88_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_83_MAPPING.VALUE=83 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_75_MAPPING.VALUE=75 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_67_MAPPING.VALUE=67 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_59_MAPPING.VALUE=59 -DRIVER.SYSTEM.VAR.FLASH_BANK_CONFIG_2.VALUE=SLEEP -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_PERMISSION.VALUE=PRIV_RW_USER_RW_EXEC -DRIVER.SYSTEM.VAR.CLKT_VCLK2_DOMAIN_ENABLE.VALUE=FALSE -DRIVER.SYSTEM.VAR.FLASH_BANK_CONFIG_3.VALUE=SLEEP -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_TYPE.VALUE=NORMAL_OIWTNOWA_SHARED -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_SUB_2_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_END_ADDRESS.VALUE=0x0807ffff -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_SUB_0_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_40_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_32_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_24_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_16_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_5_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.ECLK_PORT_BIT0_PDR.VALUE=1 -DRIVER.SYSTEM.VAR.FLASH_BANK_CONFIG_4.VALUE=SLEEP -DRIVER.SYSTEM.VAR.FLASH_BANK_CONFIG_5.VALUE=SLEEP -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_SIZE_VALUE.VALUE=0x0E -DRIVER.SYSTEM.VAR.VIM_CHANNEL_8_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.ECLK_PRESCALER.VALUE=45 -DRIVER.SYSTEM.VAR.FLASH_BANK_CONFIG_6.VALUE=SLEEP -DRIVER.SYSTEM.VAR.FLASH_BANK_CONFIG_7.VALUE=ACTIVE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_END_ADDRESS.VALUE=0xffffffff -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_SUB_0_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_BASE_ADDRESS.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_SUB_3_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_126_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_118_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_97_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_89_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_80_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_72_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_64_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_56_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_48_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_VCLK4_FREQ.VALUE=75.0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_60_MAPPING.VALUE=60 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_52_MAPPING.VALUE=52 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_44_MAPPING.VALUE=44 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_36_MAPPING.VALUE=36 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_28_MAPPING.VALUE=28 -DRIVER.SYSTEM.VAR.CLKT_PLL1_BAND_WIDTH_ADJUSTMENT.VALUE=7 -DRIVER.SYSTEM.VAR.CLKT_LPO_LOW_SOURCE_ENABLE.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_SUB_1_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_SUB_6_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_SUB_4_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_PLL2_MUL_VAL.VALUE=2700 -DRIVER.SYSTEM.VAR.CLKT_RTI1_POST_SOURCE.VALUE=VCLK -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_SIZE_VALUE.VALUE=0x04 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_71_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_63_NAME.VALUE=het2HighLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_55_NAME.VALUE=can3LowLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_47_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_39_NAME.VALUE=dmaHBCAInterrupt -DRIVER.SYSTEM.VAR.CLKT_PLL2_BAND_WIDTH_ADJUSTMENT.VALUE=7 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_SUB_4_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_SIZE.VALUE=32_BYTES -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_SUB_7_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_DATA_ENTRY.VALUE=_dabort -DRIVER.SYSTEM.VAR.VIM_CHANNEL_80_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_72_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_64_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_56_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_48_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_21_MAPPING.VALUE=21 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_13_MAPPING.VALUE=13 -DRIVER.SYSTEM.VAR.CLKT_PLL2_REF_CLOCK_DIV.VALUE=10 -DRIVER.SYSTEM.VAR.CLKT_PLL1_SPEADING_RATE.VALUE=255 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_SUB_5_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_END_ADDRESS.VALUE=0x0000001f -DRIVER.SYSTEM.VAR.VIM_CHANNEL_50_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_42_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_34_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_26_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_18_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_0_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.ETPWM1_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_PLL1_RESET_ON_SLIP.VALUE=0x80000000 -DRIVER.SYSTEM.VAR.FLASH_EEPROM_DATA_5_WAIT_STATE_FREQ.VALUE=96.0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_TYPE_VALUE.VALUE=0x0010 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_PERMISSION_VALUE.VALUE=0x0300 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_127_MAPPING.VALUE=127 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_122_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_119_MAPPING.VALUE=119 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_114_NAME.VALUE=i2c2Interrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_106_NAME.VALUE=ecap3nterrupt -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_PERMISSION.VALUE=PRIV_RO_USER_RO_EXEC -DRIVER.SYSTEM.VAR.CLKT_PLL1_FM_ENABLE.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_SUB_6_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_SUB_0_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_SIZE.VALUE=32_KB -DRIVER.SYSTEM.VAR.VIM_CHANNEL_123_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_115_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_107_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_90_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_82_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_74_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_66_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_58_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.ECAP3_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_30_NAME.VALUE=mibspi2LowLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_22_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_14_NAME.VALUE=adc1Group0Interrupt -DRIVER.SYSTEM.VAR.CLKT_LPOLO_ENABLE.VALUE=FALSE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_SUB_1_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_123_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_115_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_107_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.SCI3_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.ECLK_PORT_BIT0_PSL.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_120_MAPPING.VALUE=120 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_112_MAPPING.VALUE=112 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_104_MAPPING.VALUE=104 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_END_ADDRESS.VALUE=0x0000001f -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_SUB_4_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_BASE_ADDRESS.VALUE=0x80000000 -DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_SVC_ENTRY.VALUE=vPortSWI -DRIVER.SYSTEM.VAR.VIM_CHANNEL_21_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_20_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_13_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_12_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CONFIG_NEW.VALUE=1 -DRIVER.SYSTEM.VAR.CRC1_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_EXTERNAL2_FREQ.VALUE=40.0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_TYPE_VALUE.VALUE=0x0002 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_97_NAME.VALUE=etpwm4TripZoneInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_89_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_3_MAPPING.VALUE=3 -DRIVER.SYSTEM.VAR.CLKT_LPOHI_ENABLE.VALUE=FALSE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_SUB_2_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_TYPE.VALUE=NORMAL_OIWTNOWA_SHARED -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_SUB_5_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_101_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_99_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_93_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_85_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_77_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_69_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_6_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.CLKT_GHV_NORMAL_SOURCE.VALUE=PLL1 -DRIVER.SYSTEM.VAR.CLKT_AVCLK3_DIV_FREQ.VALUE=75.0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_97_MAPPING.VALUE=97 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_89_MAPPING.VALUE=89 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_9_NAME.VALUE=gioHighLevelInterrupt -DRIVER.SYSTEM.VAR.CLKT_PLL1_ENABLE.VALUE=TRUE -DRIVER.SYSTEM.VAR.FLASH_BASE_ADDRESS.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_SUB_3_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_SUB_6_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_51_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_43_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_35_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_27_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_19_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_5_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_M3.VALUE=0 -DRIVER.SYSTEM.VAR.SPI5_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_TYPE_VALUE.VALUE=0x0006 -DRIVER.SYSTEM.VAR.CLKT_AVCLK2_DOMAIN_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_SUB_6_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_TYPE.VALUE=NORMAL_OIWTNOWA_NONSHARED -DRIVER.SYSTEM.VAR.VIM_CHANNEL_120_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_112_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_104_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_100_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.RTP_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.MIBSPI3_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.FLASH_BANK_LINK_LENGTH_0.VALUE=0x001F7FE0 -DRIVER.SYSTEM.VAR.FLASH_BANK_LINK_LENGTH_1.VALUE=0x00200000 -DRIVER.SYSTEM.VAR.FLASH_EEPROM_DATA_11_WAIT_STATE_FREQ.VALUE=192.0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_SIZE_VALUE.VALUE=0x16 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_90_MAPPING.VALUE=90 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_82_MAPPING.VALUE=82 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_80_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_74_MAPPING.VALUE=74 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_72_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_66_MAPPING.VALUE=66 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_64_NAME.VALUE=sci3HighLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_58_MAPPING.VALUE=58 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_56_NAME.VALUE=mibspi5LowLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_48_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_SIZE.VALUE=32_BYTES -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_SUB_7_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_SUB_1_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_93_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_85_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_77_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_69_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.EQEP_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.RTI_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.STC_MAX_TIMEOUT.VALUE=0xFFFFFFFF -DRIVER.SYSTEM.VAR.CLKT_LPO_LOW_TRIM.VALUE=100.00 -DRIVER.SYSTEM.VAR.FLASH_EEPROM_DATA_3_WAIT_STATE_FREQ.VALUE=64.0 -DRIVER.SYSTEM.VAR.RAM_STACK_FIQ_BASE.VALUE=0x08000400 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_PERMISSION_VALUE.VALUE=0x1300 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_0_NAME.VALUE=esmHighInterrupt -DRIVER.SYSTEM.VAR.FLASH_BANK_LINK_LENGTH_7.VALUE=0x000020000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_SUB_2_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_50_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_42_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_34_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_26_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_18_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.FEE_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_10.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_LPO_LOW_TRIM_VALUE.VALUE=16 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_123_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_115_NAME.VALUE=lin2HighLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_107_NAME.VALUE=ecap4Interrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_51_MAPPING.VALUE=51 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_43_MAPPING.VALUE=43 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_35_MAPPING.VALUE=35 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_27_MAPPING.VALUE=27 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_19_MAPPING.VALUE=19 -DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_11.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_PERMISSION.VALUE=PRIV_RW_USER_RW_EXEC -DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_12.VALUE=0 -DRIVER.SYSTEM.VAR.CCM_MENU.VALUE=NONE -DRIVER.SYSTEM.VAR.CLKT_RESERVED_SOURCE_ENABLE.VALUE=0x00000004 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_SUB_0_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_SUB_5_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_SIZE.VALUE=512_KB -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_BASE_ADDRESS.VALUE=0x08000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_SUB_3_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_98_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_20_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_12_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_4_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_13.VALUE=0 -DRIVER.SYSTEM.VAR.POM_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_PLL1_MUL_VAL.VALUE=9500 -DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_14.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_AVCLK3_SOURCE.VALUE=VCLK -DRIVER.SYSTEM.VAR.CLKT_PLL1_FREQ.VALUE=300.00 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_SIZE_VALUE.VALUE=0x15 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_31_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_23_NAME.VALUE=gioLowLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_15_NAME.VALUE=adc1Group1Interrupt -DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_15.VALUE=0 -DRIVER.SYSTEM.VAR.RAM_STACK_UNDEF_LENGTH.VALUE=0x00000100 -DRIVER.SYSTEM.VAR.RAM_STACK_SVC_LENGTH.VALUE=0x00000100 -DRIVER.SYSTEM.VAR.CLKT_LPO_TRIM_OTP_LOC.VALUE=0xF00801B4 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_SUB_3_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_SUB_6_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_UNDEF_ENTRY.VALUE=_undef -DRIVER.SYSTEM.VAR.VIM_CHANNEL_93_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_85_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_77_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_71_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_69_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_63_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_55_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_47_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_39_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.ETPWM6_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.DCC_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_20_MAPPING.VALUE=20 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_12_MAPPING.VALUE=12 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_PERMISSION.VALUE=PRIV_RW_USER_RO_NOEXEC -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_BASE_ADDRESS.VALUE=0xFFF80000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_SUB_4_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_SUB_7_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_ENDIAN_LITTLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_126_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_125_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_118_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_117_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_109_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.OS_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_SIZE_VALUE.VALUE=0x04 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_126_MAPPING.VALUE=126 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_118_MAPPING.VALUE=118 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_98_NAME.VALUE=etpwm5Interrupt -DRIVER.SYSTEM.VAR.ECLK_PORT_BIT0_PULL.VALUE=2 -DRIVER.SYSTEM.VAR.ECLK_SUSPEND.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_PLL1_SPEADING_AMOUNT.VALUE=61 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_TYPE.VALUE=NORMAL_OIWTNOWA_SHARED -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_SUB_5_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_VFP_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.ECAP1_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.I2C_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.AJSM_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.ECLK_OSCILLATOR_FREQ.VALUE=20.000 -DRIVER.SYSTEM.VAR.CLKT_LPO_HIGH_TRIM.VALUE=100.00 -DRIVER.SYSTEM.VAR.CLKT_AVCLK4_SPL_SOURCE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_9_MAPPING.VALUE=9 -DRIVER.SYSTEM.VAR.VIM_ECC_INTERRUPT_MAPPED_TO_VIM.VALUE=FALSE -DRIVER.SYSTEM.VAR.CLKT_VCLK4_DOMAIN_ENABLE.VALUE=FALSE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_SUB_0_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_71_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_63_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_55_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_47_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_41_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_39_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_33_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_25_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_17_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_9_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.SCI1_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_CRYSTAL_FREQ.VALUE=20.0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_TYPE_VALUE.VALUE=0x0008 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_111_MAPPING.VALUE=111 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_103_MAPPING.VALUE=103 -DRIVER.SYSTEM.VAR.VIM_PHANTOM_NAME.VALUE=phantomInterrupt -DRIVER.OS.VAR.OS_USERECERSIVEMUTEXES.VALUE=0 -DRIVER.OS.VAR.OS_USETIMERS.VALUE=0 -DRIVER.OS.VAR.OS_USECNTSEMAPHORE.VALUE=0 -DRIVER.OS.VAR.OS_GENERATERUNTIMESTATS.VALUE=0 -DRIVER.OS.VAR.OS_USEMPU.VALUE=0 -DRIVER.OS.VAR.OS_TOTALHEAPSIZE.VALUE=8192 -DRIVER.OS.VAR.OS_USEVERBOSESTACK.VALUE=2 -DRIVER.OS.VAR.OS_TIMERPRIORITY.VALUE=0 -DRIVER.OS.VAR.OS_SVCENABLE.VALUE=0 -DRIVER.OS.VAR.OS_MAXTASKNAMELEN.VALUE=16 -DRIVER.OS.VAR.OS_MAXPRIORITIES.VALUE=5 -DRIVER.OS.VAR.OS_TIMERTASKSTACKDEPTH.VALUE=0 -DRIVER.OS.VAR.OS_COROUTINEPRIORITIES.VALUE=2 -DRIVER.OS.VAR.OS_USECOROUTINES.VALUE=0 -DRIVER.OS.VAR.OS_USEMUTEXES.VALUE=0 -DRIVER.OS.VAR.OS_CPUCLOCKHZ.VALUE=100000000 -DRIVER.OS.VAR.OS_USEMALLOCFAILEDHOOK.VALUE=0 -DRIVER.OS.VAR.OS_MINSTACKSIZE.VALUE=128 -DRIVER.OS.VAR.OS_SYSTEM_MODE.VALUE=0x1F -DRIVER.OS.VAR.OS_USEPREEMPTION.VALUE=1 -DRIVER.OS.VAR.OS_IDLESHOULDYIELD.VALUE=1 -DRIVER.OS.VAR.OS_USEIDLEHOOK.VALUE=0 -DRIVER.OS.VAR.OS_TICKRATEHZ.VALUE=1000 -DRIVER.OS.VAR.OS_TIMERPQUEUELENGTH.VALUE=0 -DRIVER.OS.VAR.OS_USETRACE.VALUE=0 -DRIVER.OS.VAR.OS_USESTACK.VALUE=0 -DRIVER.OS.VAR.OS_USETICKHOOK.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL93_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL85_INT_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL77_INT_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL69_INT_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL0_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL21_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL13_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL71_INT_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL63_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL55_INT_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL47_INT_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL39_INT_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL94_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL86_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL78_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL3_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL41_INT_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL33_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL25_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL17_INT_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL88_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL9_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL50_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL42_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL34_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL26_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL18_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL81_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL73_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL65_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL57_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL49_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL2_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL11_INT_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL50_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL42_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL34_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL26_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL18_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL8_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL5_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL11_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL71_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL63_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL55_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL47_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL39_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL92_INT_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL84_INT_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL76_INT_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL68_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL11_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL70_INT_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL62_INT_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL54_INT_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL46_INT_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL38_INT_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL92_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL84_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL76_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL68_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL1_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL94_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL86_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL78_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL7_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL40_INT_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL32_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL24_INT_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL16_INT_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL71_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL63_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL55_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL47_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL39_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL0_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL40_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL32_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL24_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL16_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL40_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL32_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL24_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL16_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL10_INT_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL89_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL6_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL89_INT_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL4_INT_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL61_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL53_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL45_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL37_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL29_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL91_INT_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL83_INT_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL75_INT_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL67_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL59_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL61_INT_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL53_INT_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL45_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL37_INT_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL29_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL92_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL84_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL76_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL68_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL5_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL61_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL53_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL45_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL37_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL29_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL90_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL82_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL74_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL66_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL58_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_LOW_TIME.VALUE=163.840 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL30_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL22_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL14_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL31_INT_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL23_INT_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL15_INT_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL9_INT_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL30_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL22_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL14_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL95_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL87_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL79_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL4_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL88_INT_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL3_INT_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL51_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL43_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL35_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL27_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL19_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL90_INT_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL82_INT_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL74_INT_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL66_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL58_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL89_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL90_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL82_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL74_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL66_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL58_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL3_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL9_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL51_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL43_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL35_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL27_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL19_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL60_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL52_INT_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL44_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL36_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL28_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL20_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL12_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL80_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL72_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL64_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL56_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL48_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_VCLK_FREQ.VALUE=100 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL30_INT_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL22_INT_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL14_INT_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL8_INT_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL20_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL12_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL93_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL85_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL77_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL69_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL2_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL95_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL87_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL79_INT_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL2_INT_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL95_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL87_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL79_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL8_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL80_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL72_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL64_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL56_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL48_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL1_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL41_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL33_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL25_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL17_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL81_INT_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL73_INT_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL65_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL57_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL49_INT_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL41_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL33_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL25_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL17_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL10_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL7_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL51_INT_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL43_INT_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL35_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL27_INT_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL19_INT_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL70_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL62_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL54_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL46_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL38_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL21_INT_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL13_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL7_INT_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL10_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL93_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL85_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL77_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL69_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL6_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL91_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL83_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL75_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL67_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL59_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL0_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL94_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL86_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL78_INT_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL1_INT_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL70_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL62_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL54_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL46_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL38_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_BASE.VALUE=0xFFFFF500 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL31_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL23_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL15_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL31_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL23_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL15_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL80_INT_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL72_INT_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL64_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL56_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL48_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL88_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL5_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL50_INT_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL42_INT_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL34_INT_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL26_INT_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL18_INT_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL60_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL52_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL44_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL36_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL28_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL20_INT_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL12_INT_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL6_INT_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL91_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL83_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL75_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL67_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL59_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL4_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL60_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL52_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL44_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL36_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL28_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_LPC.VALUE=16384 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL21_ENABLE.VALUE=1 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL13_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL81_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL73_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL65_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL57_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL49_INT_LEVEL.VALUE=0 -DRIVER.RTI.VAR.RTI_1_COMPARE_2_SOURCE.VALUE=0x00000100 -DRIVER.RTI.VAR.RTI_1_COMPARE_3_FREQ.VALUE=0.000100000 -DRIVER.RTI.VAR.RTI_1_FREQ.VALUE=110.000 -DRIVER.RTI.VAR.RTI_1_COMPARE_1_ACTUALTIME.VALUE=5.000 -DRIVER.RTI.VAR.RTI_1_COUNTER_1_UC_COMPARE.VALUE=10 -DRIVER.RTI.VAR.RTI_1_COMPARE_1_TIME.VALUE=5.000 -DRIVER.RTI.VAR.RTI_1_COMPARE_3_UPDATE.VALUE=100000 -DRIVER.RTI.VAR.RTI_1_CONTINUE_ON_SUSPEND_ENABLE.VALUE=0x00000000 -DRIVER.RTI.VAR.RTI_1_COMPARE_1_INPUT_FREQ.VALUE=10.000000000 -DRIVER.RTI.VAR.RTI_1_COMPARE_0_SOURCE.VALUE=0x00000000 -DRIVER.RTI.VAR.RTI_1_COMPARE_2_TIME.VALUE=8.000 -DRIVER.RTI.VAR.RTI_1_COMPARE_0_ACTUALTIME.VALUE=1.000 -DRIVER.RTI.VAR.RTI_1_COUNTER_0_UC_COMPARE.VALUE=10 -DRIVER.RTI.VAR.RTI_1_COMPARE_1_UPDATE.VALUE=50000 -DRIVER.RTI.VAR.RTI_1_COMPARE_3_TIME.VALUE=10.000 -DRIVER.RTI.VAR.RTI_1_COUNTER_0_NTU_SOURCE.VALUE=1 -DRIVER.RTI.VAR.RTI_1_COMPARE_0_INPUT_FREQ.VALUE=10.000000000 -DRIVER.RTI.VAR.RTI_1_COUNTER_0_RTI_FREQ.VALUE=0.0 -DRIVER.RTI.VAR.RTI_1_COUNTER_0_FREQ.VALUE=10.000000000 -DRIVER.RTI.VAR.RTI_1_COUNTER_1_FREQUENCY.VALUE=10.000 -DRIVER.RTI.VAR.RTI_1_COMPARE_3_SOURCE.VALUE=0x00001000 -DRIVER.RTI.VAR.RTI_1_COUNTER_1_FREQ.VALUE=10.000000000 -DRIVER.RTI.VAR.RTI_1_COUNTER_0_NTU_SOURCE_REG.VALUE=0x0 -DRIVER.RTI.VAR.RTI_1_COMPARE_1_SOURCE.VALUE=0x00000000 -DRIVER.RTI.VAR.RTI_1_NTU_1_FREQ.VALUE=0.0 -DRIVER.RTI.VAR.RTI_1_COMPARE_3_ACTUALTIME.VALUE=10.000 -DRIVER.RTI.VAR.RTI_1_COMPARE_0_FREQ.VALUE=0.001000000 -DRIVER.RTI.VAR.RTI_1_COMPARE_2_UPDATE.VALUE=80000 -DRIVER.RTI.VAR.RTI_1_BASE.VALUE=0xFFFFFC00 -DRIVER.RTI.VAR.RTI_1_NTU_2_FREQ.VALUE=0.0 -DRIVER.RTI.VAR.RTI_1_COMPARE_3_INPUT_FREQ.VALUE=10.000000000 -DRIVER.RTI.VAR.RTI_1_COMPARE_1_FREQ.VALUE=0.000200000 -DRIVER.RTI.VAR.RTI_1_COUNTER_0_CAPTURE_SOURCE_ENABLE.VALUE=0 -DRIVER.RTI.VAR.RTI_1_COUNTER_1_CAPTURE_SOURCE_ENABLE.VALUE=0 -DRIVER.RTI.VAR.RTI_1_COMPARE_0_UPDATE.VALUE=10000 -DRIVER.RTI.VAR.RTI_1_NTU_3_FREQ.VALUE=220.0 -DRIVER.RTI.VAR.RTI_1_COMPARE_0.VALUE=10000 -DRIVER.RTI.VAR.RTI_1_COMPARE_2_ACTUALTIME.VALUE=8.000 -DRIVER.RTI.VAR.RTI_1_COMPARE_1.VALUE=50000 -DRIVER.RTI.VAR.RTI_1_COMPARE_2.VALUE=80000 -DRIVER.RTI.VAR.RTI_1_COMPARE_3.VALUE=100000 -DRIVER.RTI.VAR.RTI_1_COUNTER_0_NTU_FREQ.VALUE=0.0 -DRIVER.RTI.VAR.RTI_1_COMPARE_2_FREQ.VALUE=0.000125000 -DRIVER.RTI.VAR.RTI_1_COMPARE_0_TIME.VALUE=1.000 -DRIVER.RTI.VAR.RTI_1_NTU_4_FREQ.VALUE=0.0 -DRIVER.RTI.VAR.RTI_1_COMPARE_2_INPUT_FREQ.VALUE=10.000000000 -DRIVER.RTI.VAR.RTI_1_COUNTER_0_FREQUENCY.VALUE=10.000 -DRIVER.GIO.VAR.GIO_PORT1_BIT4_PULL.VALUE=2 -DRIVER.GIO.VAR.GIO_PORT0_BIT5_DIR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT4_PULDIS.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT7_DOUT.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT0_BIT2_LVL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT7_PSL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT3_PDR.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT0_BIT2_POL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT6_ENA.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT2_PSL.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT0_BIT6_DIR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT2_DOUT.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT0_BIT3_LVL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT4_PDR.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT0_BIT3_POL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT5_PULDIS.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT7_ENA.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT0_BIT3_PSL.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT1_BIT5_PULL.VALUE=2 -DRIVER.GIO.VAR.GIO_PORT0_BIT7_DIR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT4_LVL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT5_PDR.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT0_BIT4_POL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT2_PULDIS.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT4_PSL.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT0_BIT0_PULL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT3_DOUT.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT0_BIT5_LVL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT6_PDR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT5_POL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT5_PSL.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT1_BIT6_PULL.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT0_BIT6_LVL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT3_PULDIS.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT7_PDR.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT0_BIT6_POL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT0_DOUT.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT0_BIT6_PSL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT1_PULL.VALUE=2 -DRIVER.GIO.VAR.GIO_PORT0_BIT4_DOUT.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT0_BIT7_LVL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT7_PULDIS.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT7_POL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT0_PULDIS.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT0_BIT7_PSL.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT1_BIT7_PULL.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT1_BIT1_DOUT.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT0_BIT2_PULL.VALUE=2 -DRIVER.GIO.VAR.GIO_PORT1_BIT1_PULDIS.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT5_DOUT.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT1_BIT0_ENA.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT0_BIT5_PULDIS.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT0_DIR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT2_DOUT.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT0_BIT3_PULL.VALUE=2 -DRIVER.GIO.VAR.GIO_PORT1_BIT1_ENA.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT0_BIT6_DOUT.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT1_BIT1_DIR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT6_PULDIS.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT2_ENA.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT1_BIT2_DIR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT0_PDR.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT1_BIT0_PULL.VALUE=2 -DRIVER.GIO.VAR.GIO_PORT0_BIT3_PULDIS.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT3_DOUT.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT0_BIT4_PULL.VALUE=2 -DRIVER.GIO.VAR.GIO_PORT1_BIT3_ENA.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT0_BIT7_DOUT.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT1_BIT3_DIR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT0_LVL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT1_PDR.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT1_BIT0_POL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT4_ENA.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT1_BIT0_PSL.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT1_BIT4_DIR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT4_PULDIS.VALUE=0 -DRIVER.GIO.VAR.GIO_BASE_PORTA.VALUE=0xFFF7BC34 -DRIVER.GIO.VAR.GIO_BASE_PORTB.VALUE=0xFFF7BC54 -DRIVER.GIO.VAR.GIO_PORT1_BIT1_LVL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT2_PDR.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT1_BIT1_POL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT1_PULL.VALUE=2 -DRIVER.GIO.VAR.GIO_PORT1_BIT4_DOUT.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT0_BIT5_PULL.VALUE=2 -DRIVER.GIO.VAR.GIO_PORT1_BIT5_ENA.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT1_BIT1_PSL.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT1_BIT5_DIR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT2_LVL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT1_PULDIS.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT0_ENA.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT3_PDR.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT1_BIT2_POL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT0_DIR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT6_ENA.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT2_PSL.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT1_BIT6_DIR.VALUE=1 -DRIVER.GIO.VAR.GIO_BASE.VALUE=0xFFF7BC00 -DRIVER.GIO.VAR.GIO_PORT1_BIT3_LVL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT1_ENA.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT1_BIT4_PDR.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT1_BIT3_POL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT2_PULL.VALUE=2 -DRIVER.GIO.VAR.GIO_PORT0_BIT1_DIR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT5_DOUT.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT0_BIT6_PULL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT7_ENA.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT2_PULDIS.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT3_PSL.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT1_BIT7_DIR.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT1_BIT4_LVL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT2_ENA.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT1_BIT5_PDR.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT1_BIT4_POL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT2_DIR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT0_DOUT.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT6_PULDIS.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT1_BIT4_PSL.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT0_BIT0_PDR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORTB_ENABLE.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT1_BIT5_LVL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT3_ENA.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT1_BIT6_PDR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT5_POL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT3_PULL.VALUE=2 -DRIVER.GIO.VAR.GIO_PORT0_BIT3_DIR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT6_DOUT.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT0_BIT7_PULL.VALUE=2 -DRIVER.GIO.VAR.GIO_PORT0_BIT0_LVL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT5_PSL.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT0_BIT1_PDR.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT0_BIT0_POL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT6_LVL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT7_PULDIS.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT4_ENA.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT1_BIT7_PDR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT6_POL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT0_PSL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT4_DIR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT0_PULDIS.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT1_DOUT.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT0_BIT1_LVL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT6_PSL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT2_PDR.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT0_BIT1_POL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT7_LVL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT5_ENA.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT1_BIT7_POL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT1_PSL.VALUE=1 -DRIVER.SCI.VAR.SCI4_PORT_BIT2_PULL.VALUE=2 -DRIVER.SCI.VAR.SCI1_PORT_BIT2_DOUT.VALUE=1 -DRIVER.SCI.VAR.SCI4_BASE.VALUE=0xFFF7E700 -DRIVER.SCI.VAR.SCI4_LENGTH.VALUE=8 -DRIVER.SCI.VAR.SCI3_BREAKINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI2_PORT_BIT0_DOUT.VALUE=0 -DRIVER.SCI.VAR.SCI1_PORT_BIT2_PSL.VALUE=1 -DRIVER.SCI.VAR.SCI3_PORT_BIT0_FUN.VALUE=0 -DRIVER.SCI.VAR.SCI4_ACTUALBAUDRATE.VALUE=3125000 -DRIVER.SCI.VAR.SCI4_FEINTENA.VALUE=1 -DRIVER.SCI.VAR.SCI3_PORT_BIT2_DIR.VALUE=1 -DRIVER.SCI.VAR.SCI1_BAUDRATE.VALUE=3125000 -DRIVER.SCI.VAR.SCI4_OEINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI4_TXINTENA.VALUE=1 -DRIVER.SCI.VAR.SCI3_PORT_BIT0_PDR.VALUE=0 -DRIVER.SCI.VAR.SCI2_PEINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI1_STOPBITS.VALUE=2 -DRIVER.SCI.VAR.SCI3_PORT_BIT1_FUN.VALUE=1 -DRIVER.SCI.VAR.SCI3_WAKEINTENA.VALUE=1 -DRIVER.SCI.VAR.SCI1_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.SCI.VAR.SCI1_RXINTENA.VALUE=1 -DRIVER.SCI.VAR.SCI4_WAKEINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI1_FEINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI1_PORT_BIT0_PULL.VALUE=2 -DRIVER.SCI.VAR.SCI3_PORT_BIT1_PDR.VALUE=1 -DRIVER.SCI.VAR.SCI1_TXINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI2_PORT_BIT1_DOUT.VALUE=1 -DRIVER.SCI.VAR.SCI3_PORT_BIT2_FUN.VALUE=1 -DRIVER.SCI.VAR.SCI4_TIMMINGMODE.VALUE=1 -DRIVER.SCI.VAR.SCI3_CLKMODE.VALUE=1 -DRIVER.SCI.VAR.SCI3_PORT_BIT0_PSL.VALUE=1 -DRIVER.SCI.VAR.SCI2_LENGTH.VALUE=8 -DRIVER.SCI.VAR.SCI1_BASE_PORT.VALUE=0xFFF7E440 -DRIVER.SCI.VAR.SCI4_BAUDRATE.VALUE=3125000 -DRIVER.SCI.VAR.SCI3_OEINTENA.VALUE=1 -DRIVER.SCI.VAR.SCI2_PARITYENA.VALUE=1 -DRIVER.SCI.VAR.SCI1_EVENPARITY.VALUE=0 -DRIVER.SCI.VAR.SCI3_PORT_BIT2_PDR.VALUE=1 -DRIVER.SCI.VAR.SCI2_BREAKINTENA.VALUE=1 -DRIVER.SCI.VAR.SCI1_PEINTENA.VALUE=1 -DRIVER.SCI.VAR.SCI1_TIMMINGMODE.VALUE=1 -DRIVER.SCI.VAR.SCI3_PORT_BIT1_PSL.VALUE=1 -DRIVER.SCI.VAR.SCI4_STOPBITS.VALUE=2 -DRIVER.SCI.VAR.SCI4_RXINTENA.VALUE=1 -DRIVER.SCI.VAR.SCI4_FEINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI1_PORT_BIT1_PULL.VALUE=2 -DRIVER.SCI.VAR.SCI4_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.SCI.VAR.SCI2_PORT_BIT2_DOUT.VALUE=1 -DRIVER.SCI.VAR.SCI4_TXINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI3_PORT_BIT2_PSL.VALUE=1 -DRIVER.SCI.VAR.SCI3_PORT_BIT0_DOUT.VALUE=0 -DRIVER.SCI.VAR.SCI2_WAKEINTENA.VALUE=1 -DRIVER.SCI.VAR.SCI3_WAKEINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI1_RXINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI2_CLKMODE.VALUE=1 -DRIVER.SCI.VAR.SCI1_PRESCALE.VALUE=1 -DRIVER.SCI.VAR.SCI4_PEINTENA.VALUE=1 -DRIVER.SCI.VAR.SCI2_PORT_BIT0_DIR.VALUE=0 -DRIVER.SCI.VAR.SCI1_PORT_BIT2_PULL.VALUE=2 -DRIVER.SCI.VAR.SCI3_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.SCI.VAR.SCI3_FEINTENA.VALUE=1 -DRIVER.SCI.VAR.SCI2_PORT_BIT0_PULL.VALUE=2 -DRIVER.SCI.VAR.SCI3_OEINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI3_TXINTENA.VALUE=1 -DRIVER.SCI.VAR.SCI1_ACTUALBAUDRATE.VALUE=3125000 -DRIVER.SCI.VAR.SCI3_PORT_BIT1_DOUT.VALUE=1 -DRIVER.SCI.VAR.SCI2_BREAKINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI1_PEINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI2_PORT_BIT1_DIR.VALUE=0 -DRIVER.SCI.VAR.SCI4_RXINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI4_BASE_PORT.VALUE=0xFFF7E740 -DRIVER.SCI.VAR.SCI4_PRESCALE.VALUE=1 -DRIVER.SCI.VAR.SCI2_PORT_BIT0_FUN.VALUE=0 -DRIVER.SCI.VAR.SCI2_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.SCI.VAR.SCI2_PORT_BIT2_DIR.VALUE=1 -DRIVER.SCI.VAR.SCI1_WAKEINTENA.VALUE=1 -DRIVER.SCI.VAR.SCI1_CLKMODE.VALUE=1 -DRIVER.SCI.VAR.SCI2_PORT_BIT1_PULL.VALUE=2 -DRIVER.SCI.VAR.SCI2_WAKEINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI2_PORT_BIT0_PDR.VALUE=0 -DRIVER.SCI.VAR.SCI3_BAUDRATE.VALUE=3125000 -DRIVER.SCI.VAR.SCI2_OEINTENA.VALUE=1 -DRIVER.SCI.VAR.SCI3_PORT_BIT2_DOUT.VALUE=1 -DRIVER.SCI.VAR.SCI2_PORT_BIT1_FUN.VALUE=1 -DRIVER.SCI.VAR.SCI4_PORT_BIT0_DOUT.VALUE=0 -DRIVER.SCI.VAR.SCI4_PEINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI4_BREAKINTENA.VALUE=1 -DRIVER.SCI.VAR.SCI3_TIMMINGMODE.VALUE=1 -DRIVER.SCI.VAR.SCI3_STOPBITS.VALUE=2 -DRIVER.SCI.VAR.SCI3_RXINTENA.VALUE=1 -DRIVER.SCI.VAR.SCI2_PORT_BIT1_PDR.VALUE=1 -DRIVER.SCI.VAR.SCI3_FEINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI1_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.SCI.VAR.SCI2_PORT_BIT2_FUN.VALUE=1 -DRIVER.SCI.VAR.SCI1_BREAKINTENA.VALUE=1 -DRIVER.SCI.VAR.SCI2_PORT_BIT0_PSL.VALUE=1 -DRIVER.SCI.VAR.SCI3_TXINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI4_PORT_BIT0_DIR.VALUE=0 -DRIVER.SCI.VAR.SCI2_PORT_BIT2_PULL.VALUE=2 -DRIVER.SCI.VAR.SCI2_PORT_BIT2_PDR.VALUE=1 -DRIVER.SCI.VAR.SCI3_PORT_BIT0_PULL.VALUE=2 -DRIVER.SCI.VAR.SCI2_BASE_PORT.VALUE=0xFFF7E640 -DRIVER.SCI.VAR.SCI3_PARITYENA.VALUE=1 -DRIVER.SCI.VAR.SCI2_ACTUALBAUDRATE.VALUE=3125000 -DRIVER.SCI.VAR.SCI4_PORT_BIT1_DOUT.VALUE=1 -DRIVER.SCI.VAR.SCI2_PORT_BIT1_PSL.VALUE=1 -DRIVER.SCI.VAR.SCI3_LENGTH.VALUE=8 -DRIVER.SCI.VAR.SCI3_PEINTENA.VALUE=1 -DRIVER.SCI.VAR.SCI4_PORT_BIT1_DIR.VALUE=0 -DRIVER.SCI.VAR.SCI1_WAKEINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI2_FEINTENA.VALUE=1 -DRIVER.SCI.VAR.SCI2_PORT_BIT2_PSL.VALUE=1 -DRIVER.SCI.VAR.SCI4_PORT_BIT0_FUN.VALUE=0 -DRIVER.SCI.VAR.SCI2_OEINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI4_EVENPARITY.VALUE=0 -DRIVER.SCI.VAR.SCI2_TXINTENA.VALUE=1 -DRIVER.SCI.VAR.SCI4_PORT_BIT2_DIR.VALUE=1 -DRIVER.SCI.VAR.SCI4_PORT_BIT2_PULDIS.VALUE=0 -DRIVER.SCI.VAR.SCI4_BREAKINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI3_PORT_BIT1_PULL.VALUE=2 -DRIVER.SCI.VAR.SCI4_PORT_BIT0_PDR.VALUE=0 -DRIVER.SCI.VAR.SCI3_RXINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI4_PORT_BIT2_DOUT.VALUE=1 -DRIVER.SCI.VAR.SCI1_BASE.VALUE=0xFFF7E400 -DRIVER.SCI.VAR.SCI4_PORT_BIT1_FUN.VALUE=1 -DRIVER.SCI.VAR.SCI3_PRESCALE.VALUE=1 -DRIVER.SCI.VAR.SCI1_PORT_BIT0_DIR.VALUE=0 -DRIVER.SCI.VAR.SCI1_BREAKINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI4_PORT_BIT1_PDR.VALUE=1 -DRIVER.SCI.VAR.SCI1_LENGTH.VALUE=8 -DRIVER.SCI.VAR.SCI4_PORT_BIT2_FUN.VALUE=1 -DRIVER.SCI.VAR.SCI3_PORT_BIT2_PULDIS.VALUE=0 -DRIVER.SCI.VAR.SCI2_BAUDRATE.VALUE=3125000 -DRIVER.SCI.VAR.SCI1_PARITYENA.VALUE=1 -DRIVER.SCI.VAR.SCI1_OEINTENA.VALUE=1 -DRIVER.SCI.VAR.SCI4_PORT_BIT0_PSL.VALUE=1 -DRIVER.SCI.VAR.SCI1_PORT_BIT1_DIR.VALUE=0 -DRIVER.SCI.VAR.SCI3_PORT_BIT2_PULL.VALUE=2 -DRIVER.SCI.VAR.SCI3_PEINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI4_PORT_BIT2_PDR.VALUE=1 -DRIVER.SCI.VAR.SCI2_STOPBITS.VALUE=2 -DRIVER.SCI.VAR.SCI4_PORT_BIT0_PULL.VALUE=2 -DRIVER.SCI.VAR.SCI2_RXINTENA.VALUE=1 -DRIVER.SCI.VAR.SCI1_PORT_BIT0_DOUT.VALUE=0 -DRIVER.SCI.VAR.SCI2_BASE.VALUE=0xFFF7E600 -DRIVER.SCI.VAR.SCI2_FEINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI1_PORT_BIT0_FUN.VALUE=0 -DRIVER.SCI.VAR.SCI4_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.SCI.VAR.SCI3_ACTUALBAUDRATE.VALUE=3125000 -DRIVER.SCI.VAR.SCI4_PORT_BIT1_PSL.VALUE=1 -DRIVER.SCI.VAR.SCI1_PORT_BIT2_DIR.VALUE=1 -DRIVER.SCI.VAR.SCI3_EVENPARITY.VALUE=0 -DRIVER.SCI.VAR.SCI2_TXINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI3_BREAKINTENA.VALUE=1 -DRIVER.SCI.VAR.SCI2_TIMMINGMODE.VALUE=1 -DRIVER.SCI.VAR.SCI1_PORT_BIT0_PDR.VALUE=0 -DRIVER.SCI.VAR.SCI2_PORT_BIT2_PULDIS.VALUE=0 -DRIVER.SCI.VAR.SCI1_PORT_BIT1_FUN.VALUE=1 -DRIVER.SCI.VAR.SCI4_PORT_BIT2_PSL.VALUE=1 -DRIVER.SCI.VAR.SCI4_OEINTENA.VALUE=1 -DRIVER.SCI.VAR.SCI2_PEINTENA.VALUE=1 -DRIVER.SCI.VAR.SCI1_PORT_BIT1_PDR.VALUE=1 -DRIVER.SCI.VAR.SCI4_PORT_BIT1_PULL.VALUE=2 -DRIVER.SCI.VAR.SCI3_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.SCI.VAR.SCI1_PORT_BIT1_DOUT.VALUE=1 -DRIVER.SCI.VAR.SCI3_BASE.VALUE=0xFFF7E500 -DRIVER.SCI.VAR.SCI1_PORT_BIT2_FUN.VALUE=1 -DRIVER.SCI.VAR.SCI4_WAKEINTENA.VALUE=1 -DRIVER.SCI.VAR.SCI1_FEINTENA.VALUE=1 -DRIVER.SCI.VAR.SCI1_PORT_BIT0_PSL.VALUE=1 -DRIVER.SCI.VAR.SCI3_PORT_BIT0_DIR.VALUE=0 -DRIVER.SCI.VAR.SCI1_OEINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI1_PORT_BIT2_PULDIS.VALUE=0 -DRIVER.SCI.VAR.SCI1_TXINTENA.VALUE=1 -DRIVER.SCI.VAR.SCI1_PORT_BIT2_PDR.VALUE=1 -DRIVER.SCI.VAR.SCI1_PORT_BIT1_PSL.VALUE=1 -DRIVER.SCI.VAR.SCI2_RXINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI3_PORT_BIT1_DIR.VALUE=0 -DRIVER.SCI.VAR.SCI3_BASE_PORT.VALUE=0xFFF7E540 -DRIVER.SCI.VAR.SCI4_PARITYENA.VALUE=1 -DRIVER.SCI.VAR.SCI4_CLKMODE.VALUE=1 -DRIVER.SCI.VAR.SCI2_EVENPARITY.VALUE=0 -DRIVER.SCI.VAR.SCI2_PRESCALE.VALUE=1 -DRIVER.SCI.VAR.SCI2_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG0_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PARITYENA2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_DLENERRLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG4_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI2_BASE_PORT.VALUE=0xFFF7F618 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT17_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT25_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_BITERRENA.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PARITYENA3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_RXINTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG5_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT25_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT17_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT8_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG1_BUF_CSNR.VALUE=CS_1 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT1_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_CLKMOD.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT11_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT5_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_PHASE0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG5_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI1_PHASE1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT27_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT19_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT3_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG3_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT9_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG6_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PHASE2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT8_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG6_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG5_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI1_PHASE3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT25_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT17_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG2_BUF_CSNR.VALUE=CS_2 -DRIVER.MIBSPI.VAR.MIBSPI4_TG6_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT1_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT11_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_BASE.VALUE=0xFFF7FA00 -DRIVER.MIBSPI.VAR.MIBSPI5_TG0_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT5_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG6_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI3_TG7_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT1_PULDIS.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG6_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT17_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT25_PDR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG5_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG1_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_C2TDELAYACTUAL.VALUE=20.000 -DRIVER.MIBSPI.VAR.MIBSPI4_TG7_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT1_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG4_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT11_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG5_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TXINTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TIMEOUTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_RAM_PARITY_ENA.VALUE=0x0000000A -DRIVER.MIBSPI.VAR.MIBSPI3_TG7_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI1_TG1_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI1_TG1_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT27_PDR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT19_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG7_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG0_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_WDELAY0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT3_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG7_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG2_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG0_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI4_WDELAY1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG3_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI4_WDELAY2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PARERRLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT8_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG5_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG0_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_WDELAY3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG0_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT9_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG4_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG3_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT8_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT4_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG7_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG7_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG2_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT26_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT18_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG3_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT2_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG4_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG0_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_ACTUALBAUDRATE0.VALUE=25000.000 -DRIVER.MIBSPI.VAR.MIBSPI2_T2EDELAYACTUAL.VALUE=0.000 -DRIVER.MIBSPI.VAR.MIBSPI3_TG2_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI3_ACTUALBAUDRATE1.VALUE=16666.667 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT0_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG5_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT10_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_ACTUALBAUDRATE2.VALUE=10000.000 -DRIVER.MIBSPI.VAR.MIBSPI2_TG5_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT3_PULL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG0_LENGTH.VALUE=8 -DRIVER.MIBSPI.VAR.MIBSPI5_TG0_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI3_TG0_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_ACTUALBAUDRATE3.VALUE=4000.000 -DRIVER.MIBSPI.VAR.MIBSPI2_TG3_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG2_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT9_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG5_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG7_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_C2EDELAYACTUAL.VALUE=0.000 -DRIVER.MIBSPI.VAR.MIBSPI2_BAUDRATE0.VALUE=25000.000 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT8_PDR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG1_BUF_CSNR.VALUE=CS_1 -DRIVER.MIBSPI.VAR.MIBSPI2_BAUDRATE1.VALUE=16000.000 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT2_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG5_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG4_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT1_PULL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_BAUDRATE2.VALUE=10000.000 -DRIVER.MIBSPI.VAR.MIBSPI4_TG2_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG1_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG3_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI3_TG0_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI2_BAUDRATE3.VALUE=4000.000 -DRIVER.MIBSPI.VAR.MIBSPI5_TG6_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_T2CDELAYACTUAL.VALUE=10.000 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT4_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT4_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG2_BUF_CSNR.VALUE=CS_2 -DRIVER.MIBSPI.VAR.MIBSPI2_TG4_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI3_TG7_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI3_TG5_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG1_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT9_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG2_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PARERRENA.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG1_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI3_OVRNINTENA.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT8_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG6_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI1_TG6_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT26_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT18_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT0_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT10_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT2_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG3_BUF_CSNR.VALUE=CS_3 -DRIVER.MIBSPI.VAR.MIBSPI2_POLARITY0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT17_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT25_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG1_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_POLARITY1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_C2TDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT10_PULL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG6_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_OVRNINTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT5_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG0_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI2_POLARITY2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG2_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI5_RXINTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT17_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT25_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT4_PULDIS.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG4_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI3_TG5_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_DEYSNCENA.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_POLARITY3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT11_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT1_PULDIS.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT27_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT19_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT0_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG4_BUF_CSNR.VALUE=CS_4 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT3_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG2_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_WAITENA0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_BASE.VALUE=0xFFF7FC00 -DRIVER.MIBSPI.VAR.MIBSPI2_WAITENA1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG6_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT1_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_DEYSNCLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG5_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PARPOL0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT11_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT17_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT25_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_WAITENA2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG4_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT10_PULDIS.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PARPOL1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG7_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI2_WAITENA3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG5_BUF_CSNR.VALUE=CS_5 -DRIVER.MIBSPI.VAR.MIBSPI4_TG4_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PARPOL2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG2_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT9_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG2_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PARPOL3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT3_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT0_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG2_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI5_TG5_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI1_TXINTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG0_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG1_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT5_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PRESCALE0.VALUE=3 -DRIVER.MIBSPI.VAR.MIBSPI1_CLKMOD.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG3_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI1_PRESCALE1.VALUE=5 -DRIVER.MIBSPI.VAR.MIBSPI5_TG5_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TXINTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG2_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG1_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PRESCALE2.VALUE=9 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT9_PULDIS.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TIMEOUTENA.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG7_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_DLENERRENA.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_PRESCALE3.VALUE=24 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT1_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT11_PDR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG3_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PARITYENA0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG5_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT8_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG5_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_ACTUALBAUDRATE0.VALUE=25000.000 -DRIVER.MIBSPI.VAR.MIBSPI3_PARITYENA1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_ACTUALBAUDRATE1.VALUE=16666.667 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT9_PULL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PARITYENA2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_DLENERRLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG4_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI1_TG2_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_ACTUALBAUDRATE2.VALUE=10000.000 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT2_PULDIS.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_PARITYENA3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_BITERRENA.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG1_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_ACTUALBAUDRATE3.VALUE=4000.000 -DRIVER.MIBSPI.VAR.MIBSPI5_TG4_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT4_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG6_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG6_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG4_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG5_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI3_T2EDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT2_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_BITERRLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_SHIFTDIR0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT8_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG3_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_RXINTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_CSDEF.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT4_PULL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG5_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_SHIFTDIR1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG2_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG1_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT0_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG4_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_SHIFTDIR2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT10_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG7_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG6_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_WDELAY0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT17_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT25_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_T2CDELAYACTUAL.VALUE=10.000 -DRIVER.MIBSPI.VAR.MIBSPI4_SHIFTDIR3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_WDELAY1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG1_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI4_MASTER.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_WDELAY2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT2_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT1_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG2_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG3_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_WDELAY3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG2_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT8_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_ENABLEHIGHZ.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT5_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG7_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG4_BUF_CSNR.VALUE=CS_4 -DRIVER.MIBSPI.VAR.MIBSPI3_TG7_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT10_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG3_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT0_PULL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT10_PULL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG5_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG4_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT4_PULDIS.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG3_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT27_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT19_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT2_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG5_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT3_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG5_BUF_CSNR.VALUE=CS_5 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT9_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG0_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI2_C2EDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT11_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI4_TG3_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI3_TG2_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT17_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT25_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG5_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG4_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI5_TG1_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT1_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT5_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG6_BUF_CSNR.VALUE=CS_6 -DRIVER.MIBSPI.VAR.MIBSPI4_C2TDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT3_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG2_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_BASE_PORT.VALUE=0xFFF7FC18 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT9_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT0_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG6_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG5_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI2_TG0_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI2_TG0_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT1_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_WAITENA0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG7_BUF_CSNR.VALUE=CS_7 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT11_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG0_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG3_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_WAITENA1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG2_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI5_WAITENA2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG2_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG5_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT2_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_WAITENA3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT9_PULDIS.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT10_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG2_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG1_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT17_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT25_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_C2TDELAYACTUAL.VALUE=20.000 -DRIVER.MIBSPI.VAR.MIBSPI2_T2CDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG4_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT11_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG4_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_RAM_PARITY_ENA.VALUE=0x0000000A -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT2_PULDIS.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TXINTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG1_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI1_TG3_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT3_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG2_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT0_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG6_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG1_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_BASE_RAM.VALUE=0xFF080000 -DRIVER.MIBSPI.VAR.MIBSPI1_TG4_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI5_TG2_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT8_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_PARPOL0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG7_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI2_TG0_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_CHARLEN0.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI3_TG2_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PARPOL1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PARERRENA.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_CHARLEN1.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI2_OVRNINTENA.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG4_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI5_TG5_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG3_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PHASE0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PARPOL2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_CHARLEN2.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI4_PHASE1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PARPOL3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_CHARLEN3.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI5_PARERRLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT8_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI4_PHASE2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG7_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG6_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_OVRNINTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT1_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG0_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT5_PULL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG1_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG2_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI4_PHASE3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG4_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_DEYSNCENA.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_RXINTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT2_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG0_BUF_CSNR.VALUE=CS_0 -DRIVER.MIBSPI.VAR.MIBSPI3_T2EDELAYACTUAL.VALUE=0.000 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT8_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG1_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI5_RXINTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT10_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_DEYSNCLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT3_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT3_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG7_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT4_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG5_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG5_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI2_TG5_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG4_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT9_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG1_BUF_CSNR.VALUE=CS_1 -DRIVER.MIBSPI.VAR.MIBSPI4_C2EDELAYACTUAL.VALUE=0.000 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT8_PDR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG0_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT25_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT17_PULL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT1_PULL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT11_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI1_TG2_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT0_PULDIS.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG3_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI4_TG4_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT10_PULDIS.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG6_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG5_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI5_BAUDRATE0.VALUE=25000.000 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT4_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT1_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG7_BUF_CSNR.VALUE=CS_7 -DRIVER.MIBSPI.VAR.MIBSPI1_TG3_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_BAUDRATE1.VALUE=16000.000 -DRIVER.MIBSPI.VAR.MIBSPI4_TG3_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI5_TG6_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI5_BAUDRATE2.VALUE=10000.000 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT9_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG1_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG7_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG1_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TXINTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_BAUDRATE3.VALUE=4000.000 -DRIVER.MIBSPI.VAR.MIBSPI4_TG7_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TIMEOUTENA.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG6_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI3_TG6_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI1_DLENERRENA.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT10_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT2_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG5_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG1_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG0_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT17_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT25_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_WDELAY0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PARITYENA0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG1_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_C2EDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_WDELAY1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PARITYENA1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TIMEOUTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT2_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_WDELAY2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PARITYENA2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_DLENERRLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_MASTER.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG7_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT9_PULDIS.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG7_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_WDELAY3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PARITYENA3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_BITERRENA.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT3_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT0_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG7_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_POLARITY0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT10_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT0_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG2_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG4_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG4_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_POLARITY1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG5_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI5_POLARITY2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT11_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG7_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_BITERRLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT4_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_SHIFTDIR0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG4_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG3_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT26_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT18_PULDIS.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG6_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_POLARITY3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG7_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT2_PULDIS.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_SHIFTDIR1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_RAM_PARITY_ENA.VALUE=0x0000000A -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT11_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG3_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG2_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT9_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG3_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_SHIFTDIR2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_SHIFTDIR3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG7_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT0_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG1_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT11_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG0_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG4_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT2_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG7_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG5_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG0_BUF_CSNR.VALUE=CS_0 -DRIVER.MIBSPI.VAR.MIBSPI5_T2CDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG7_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI5_TG0_LENGTH.VALUE=8 -DRIVER.MIBSPI.VAR.MIBSPI4_TG7_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG2_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG0_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG6_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG5_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG3_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT11_PDR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PRESCALE0.VALUE=3 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT8_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG7_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG1_BUF_CSNR.VALUE=CS_1 -DRIVER.MIBSPI.VAR.MIBSPI5_BASE_RAM.VALUE=0xFF0A0000 -DRIVER.MIBSPI.VAR.MIBSPI4_PRESCALE1.VALUE=5 -DRIVER.MIBSPI.VAR.MIBSPI2_TG0_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI5_CHARLEN0.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT9_PULL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PRESCALE2.VALUE=9 -DRIVER.MIBSPI.VAR.MIBSPI3_TG3_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI3_CSDEF.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT3_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG1_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_CHARLEN1.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI4_TG0_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI4_PRESCALE3.VALUE=24 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT4_PULDIS.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_CHARLEN2.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI3_TG6_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG2_BUF_CSNR.VALUE=CS_2 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT1_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT9_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_CHARLEN3.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT8_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG7_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG2_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_BASE_PORT.VALUE=0xFFF7F818 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT5_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT4_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI2_TG5_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG1_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT0_PULDIS.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_RXINTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG7_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT10_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG3_BUF_CSNR.VALUE=CS_3 -DRIVER.MIBSPI.VAR.MIBSPI2_TG0_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_T2CDELAYACTUAL.VALUE=10.000 -DRIVER.MIBSPI.VAR.MIBSPI1_WAITENA0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG2_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI1_WAITENA1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT26_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT18_PULL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT1_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT2_PULL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG5_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI2_PARPOL0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG4_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_WAITENA2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PARPOL1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG7_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI1_TG0_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_WAITENA3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG4_BUF_CSNR.VALUE=CS_4 -DRIVER.MIBSPI.VAR.MIBSPI4_TG7_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG2_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_CLKMOD.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT5_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT3_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PARPOL2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PHASE0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG6_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI2_PARPOL3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PHASE1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT10_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG3_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT0_PULL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG4_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PHASE2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT9_PULDIS.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PHASE3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT3_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT9_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG1_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT10_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT0_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TXINTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT4_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG4_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG7_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT2_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG2_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI1_PARERRENA.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_OVRNINTENA.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT1_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT11_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT2_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG5_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG4_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT9_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT0_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG6_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PARERRLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG6_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_OVRNINTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG0_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI4_TG0_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI2_TG2_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG0_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT11_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG4_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG5_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG2_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG1_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI2_T2EDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG4_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT2_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG4_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_DEYSNCLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_RXINTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG1_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG3_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI2_TG1_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG0_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI3_TG6_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG4_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_C2TDELAYACTUAL.VALUE=20.000 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT4_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_WDELAY0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_WDELAY1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT11_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_WDELAY2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG1_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI3_TG2_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT17_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT25_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG1_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI1_TG5_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_WDELAY3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG7_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG6_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT0_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG7_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_BAUDRATE0.VALUE=25000.000 -DRIVER.MIBSPI.VAR.MIBSPI1_TG3_BUF_CSNR.VALUE=CS_3 -DRIVER.MIBSPI.VAR.MIBSPI3_TG3_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI3_BAUDRATE1.VALUE=16000.000 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT8_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG6_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI4_TG4_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG0_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_BAUDRATE2.VALUE=10000.000 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT5_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT17_PULL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT25_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI1_TG1_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG3_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT0_PULDIS.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG4_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI3_TG4_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG2_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI3_BAUDRATE3.VALUE=4000.000 -DRIVER.MIBSPI.VAR.MIBSPI3_TIMEOUTENA.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT10_PULDIS.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_ENABLEHIGHZ.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT3_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG4_BUF_CSNR.VALUE=CS_4 -DRIVER.MIBSPI.VAR.MIBSPI1_PARITYENA0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_C2EDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PARITYENA1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT8_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI5_TG5_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT1_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG7_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TIMEOUTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT5_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI1_PARITYENA2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_DLENERRLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG4_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG3_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG3_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI1_TG7_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI1_PARITYENA3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_T2EDELAYACTUAL.VALUE=0.000 -DRIVER.MIBSPI.VAR.MIBSPI4_ACTUALBAUDRATE0.VALUE=25000.000 -DRIVER.MIBSPI.VAR.MIBSPI3_TG5_BUF_CSNR.VALUE=CS_5 -DRIVER.MIBSPI.VAR.MIBSPI3_POLARITY0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT8_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG2_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_ACTUALBAUDRATE1.VALUE=16666.667 -DRIVER.MIBSPI.VAR.MIBSPI3_C2TDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_POLARITY1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG5_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT27_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT19_PULL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT10_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG4_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT3_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_ACTUALBAUDRATE2.VALUE=10000.000 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT3_PULL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_POLARITY2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT10_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT0_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG3_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_BITERRLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG4_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI4_TG5_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI4_ACTUALBAUDRATE3.VALUE=4000.000 -DRIVER.MIBSPI.VAR.MIBSPI4_DEYSNCENA.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_POLARITY3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG7_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT9_PULDIS.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT8_PDR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_C2EDELAYACTUAL.VALUE=0.000 -DRIVER.MIBSPI.VAR.MIBSPI4_TG6_BUF_CSNR.VALUE=CS_6 -DRIVER.MIBSPI.VAR.MIBSPI4_TG0_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_WAITENA0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT5_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG6_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_WAITENA1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT1_PULL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG7_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_WAITENA2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG1_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI1_TG1_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT5_PULDIS.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG6_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_WAITENA3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT2_PULDIS.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG7_BUF_CSNR.VALUE=CS_7 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT17_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT25_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT4_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT1_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG0_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG2_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG3_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_ENABLEHIGHZ.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT11_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT1_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG7_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI1_T2CDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT9_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG1_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG0_LENGTH.VALUE=8 -DRIVER.MIBSPI.VAR.MIBSPI5_TG6_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT11_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TXINTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT10_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT2_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG1_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG1_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT4_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PRESCALE0.VALUE=3 -DRIVER.MIBSPI.VAR.MIBSPI1_TG6_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PRESCALE1.VALUE=5 -DRIVER.MIBSPI.VAR.MIBSPI1_TG0_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI1_BASE_RAM.VALUE=0xFF0E0000 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT10_PULL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT2_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT8_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG3_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI2_TG1_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PRESCALE2.VALUE=9 -DRIVER.MIBSPI.VAR.MIBSPI1_PARPOL0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_CHARLEN0.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI2_PRESCALE3.VALUE=24 -DRIVER.MIBSPI.VAR.MIBSPI1_PARPOL1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_CHARLEN1.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT0_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG5_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG1_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG4_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_CLKMOD.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG7_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PARPOL2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_CHARLEN2.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI5_TG4_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI1_PARPOL3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_CHARLEN3.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT11_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT17_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT25_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT4_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG2_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG4_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT11_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT1_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_BASE_PORT.VALUE=0xFFF7F418 -DRIVER.MIBSPI.VAR.MIBSPI4_BITERRENA.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_RAM_PARITY_ENA.VALUE=0x0000000A -DRIVER.MIBSPI.VAR.MIBSPI1_TG3_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT9_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG7_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_T2EDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_SHIFTDIR0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_RXINTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG1_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG5_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT3_PULDIS.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_SHIFTDIR1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT0_PULDIS.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG4_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG3_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI5_TG0_BUF_CSNR.VALUE=CS_0 -DRIVER.MIBSPI.VAR.MIBSPI5_SHIFTDIR2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT2_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG5_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_SHIFTDIR3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG6_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI5_TG2_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_CSDEF.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI2_TG4_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT8_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI3_TG5_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG4_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT11_PDR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT8_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT5_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_ACTUALBAUDRATE0.VALUE=25000.000 -DRIVER.MIBSPI.VAR.MIBSPI1_TG6_BUF_CSNR.VALUE=CS_6 -DRIVER.MIBSPI.VAR.MIBSPI1_TG1_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_ACTUALBAUDRATE1.VALUE=16666.667 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT9_PULL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG2_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI5_MASTER.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT3_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG1_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT9_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_ACTUALBAUDRATE2.VALUE=10000.000 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT10_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT0_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG6_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG5_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI2_ACTUALBAUDRATE3.VALUE=4000.000 -DRIVER.MIBSPI.VAR.MIBSPI1_TG0_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI5_TG6_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT1_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG3_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT9_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG7_BUF_CSNR.VALUE=CS_7 -DRIVER.MIBSPI.VAR.MIBSPI2_TG0_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG0_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_C2EDELAYACTUAL.VALUE=0.000 -DRIVER.MIBSPI.VAR.MIBSPI4_C2EDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT5_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT4_PULL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG5_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT2_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG6_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PARERRLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_OVRNINTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG7_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_DLENERRENA.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG6_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT5_PULDIS.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT10_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG5_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_T2CDELAYACTUAL.VALUE=10.000 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT17_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT25_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG1_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG1_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI5_TG1_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT2_PULL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG4_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI5_TG7_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI2_TG1_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI1_TG2_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT5_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT3_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG3_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG2_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT10_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT2_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT0_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT0_PULL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG3_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT10_PULL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT8_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG1_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT9_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT3_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG3_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT0_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG7_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_BAUDRATE0.VALUE=25000.000 -DRIVER.MIBSPI.VAR.MIBSPI4_T2CDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG3_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI1_BAUDRATE1.VALUE=16000.000 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT11_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT17_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT25_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT4_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG6_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT11_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT1_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG6_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_BAUDRATE2.VALUE=10000.000 -DRIVER.MIBSPI.VAR.MIBSPI5_TG0_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG2_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI2_TIMEOUTENA.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT17_PULDIS.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT25_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_BAUDRATE3.VALUE=4000.000 -DRIVER.MIBSPI.VAR.MIBSPI5_TG4_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT2_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG6_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG5_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG0_BUF_CSNR.VALUE=CS_0 -DRIVER.MIBSPI.VAR.MIBSPI4_BASE_RAM.VALUE=0xFF060000 -DRIVER.MIBSPI.VAR.MIBSPI4_TG6_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG5_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_CHARLEN0.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI3_TIMEOUTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT3_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG0_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT3_PULDIS.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_CHARLEN1.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI4_PARERRENA.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG4_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT10_PULDIS.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT0_PULDIS.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG5_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT11_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG7_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_CHARLEN2.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI3_TG1_BUF_CSNR.VALUE=CS_1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT8_PDR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG0_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_POLARITY0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_CHARLEN3.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI1_TG5_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI1_POLARITY1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_BASE.VALUE=0xFFF7F400 -DRIVER.MIBSPI.VAR.MIBSPI2_TG6_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG2_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_POLARITY2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG0_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI4_TG3_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI4_TG3_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_RXINTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_DEYSNCENA.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG6_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_POLARITY3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PHASE0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT17_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT25_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT4_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG2_BUF_CSNR.VALUE=CS_2 -DRIVER.MIBSPI.VAR.MIBSPI4_C2TDELAYACTUAL.VALUE=20.000 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT11_PDR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT1_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PHASE1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PHASE2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_DEYSNCLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG7_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT9_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG1_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT9_PULL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PHASE3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG7_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG6_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI1_TG7_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG6_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI5_TG3_BUF_CSNR.VALUE=CS_3 -DRIVER.MIBSPI.VAR.MIBSPI4_TG0_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG1_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG2_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT5_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG0_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG6_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG0_LENGTH.VALUE=8 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT2_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT8_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG4_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI3_TG6_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT5_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG7_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT3_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG1_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT10_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT0_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG7_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG7_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT5_PULL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TXINTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT4_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG3_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT1_PULDIS.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG5_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_ENABLE.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT11_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG7_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI5_TG0_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_T2EDELAYACTUAL.VALUE=0.000 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT8_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG2_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT9_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG3_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG4_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI5_TG7_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT3_PULL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG6_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT0_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT10_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG3_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG2_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT10_PULL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT0_PULL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_OVRNINTENA.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_BITERRENA.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT5_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG4_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG4_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT3_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT2_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG5_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG0_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_T2EDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT1_PULL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG0_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI4_BITERRLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT11_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI3_SHIFTDIR0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_MASTER.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_SHIFTDIR1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG0_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG3_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG5_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG2_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_SHIFTDIR2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT8_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT1_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG6_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI3_SHIFTDIR3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG6_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG1_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT3_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG4_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT27_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT19_PULDIS.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT3_PULDIS.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG1_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG0_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI5_TG4_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT17_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT25_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT4_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG7_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG6_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG6_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT11_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT1_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG2_BUF_CSNR.VALUE=CS_2 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT8_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG2_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT5_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG3_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG2_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG1_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI5_TG7_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG4_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PRESCALE0.VALUE=3 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT10_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG3_BUF_CSNR.VALUE=CS_3 -DRIVER.MIBSPI.VAR.MIBSPI5_PRESCALE1.VALUE=5 -DRIVER.MIBSPI.VAR.MIBSPI2_BASE.VALUE=0xFFF7F600 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT25_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT17_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG1_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PRESCALE2.VALUE=9 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT1_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG4_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT11_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG3_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PRESCALE3.VALUE=24 -DRIVER.MIBSPI.VAR.MIBSPI4_TG2_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI4_DLENERRENA.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_RAM_PARITY_ENA.VALUE=0x0000000A -DRIVER.MIBSPI.VAR.MIBSPI5_PARITYENA0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG7_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG4_BUF_CSNR.VALUE=CS_4 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT3_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PARITYENA1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG1_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI2_C2TDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PARITYENA2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_DLENERRLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_CSDEF.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI4_BASE_PORT.VALUE=0xFFF7FA18 -DRIVER.MIBSPI.VAR.MIBSPI3_TG4_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI2_TG3_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG3_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI5_PARITYENA3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT8_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT5_PULDIS.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG5_BUF_CSNR.VALUE=CS_5 -DRIVER.MIBSPI.VAR.MIBSPI3_WAITENA0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT9_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG4_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_WAITENA1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG3_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_WAITENA2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT8_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT4_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG7_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT1_PULDIS.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_WAITENA3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG6_BUF_CSNR.VALUE=CS_6 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT5_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG6_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG2_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT2_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_T2EDELAYACTUAL.VALUE=0.000 -DRIVER.MIBSPI.VAR.MIBSPI1_TG3_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT9_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT0_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG3_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT10_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG6_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI3_TG0_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI2_TG1_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TXINTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TIMEOUTENA.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG1_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG0_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_CLKMOD.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_ENABLEHIGHZ.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT9_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_PHASE0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_C2EDELAYACTUAL.VALUE=0.000 -DRIVER.MIBSPI.VAR.MIBSPI5_TG7_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI3_PHASE1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT26_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT18_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT17_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT25_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT4_PULL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG5_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT2_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG5_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PHASE2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TIMEOUTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT11_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT1_PULL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG0_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PHASE3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PARERRENA.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG3_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI4_T2CDELAYACTUAL.VALUE=10.000 -DRIVER.MIBSPI.VAR.MIBSPI3_TG5_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT4_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT4_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG6_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG0_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT2_PULL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG3_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PARERRLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG1_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG1_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT3_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG4_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG2_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT0_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT10_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT2_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG7_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG6_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_T2EDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT8_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_RXINTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG7_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_DEYSNCLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT5_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG1_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI3_TG3_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG4_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI2_TG3_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG2_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI5_WDELAY0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT0_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT10_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT3_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_ENABLEHIGHZ.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_WDELAY1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG2_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT25_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT17_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG5_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI5_TG3_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_WDELAY2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT1_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT11_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG0_LENGTH.VALUE=8 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT17_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT25_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG2_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI5_TG2_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_WDELAY3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG4_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG3_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT11_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_BAUDRATE0.VALUE=25000.000 -DRIVER.MIBSPI.VAR.MIBSPI1_TG5_BUF_CSNR.VALUE=CS_5 -DRIVER.MIBSPI.VAR.MIBSPI4_BAUDRATE1.VALUE=16000.000 -DRIVER.MIBSPI.VAR.MIBSPI3_BASE.VALUE=0xFFF7F800 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT27_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT19_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG6_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_BAUDRATE2.VALUE=10000.000 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT3_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG0_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_MASTER.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG5_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_BAUDRATE3.VALUE=4000.000 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT8_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG5_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI3_TG4_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI2_TG6_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT8_PDR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG1_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG0_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG6_BUF_CSNR.VALUE=CS_6 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT5_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG0_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG4_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI3_C2EDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG7_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI2_TG2_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG2_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT25_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT17_PULDIS.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG6_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG5_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI4_TG5_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_OVRNINTENA.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT1_PULDIS.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT11_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT25_PDR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT17_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG3_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_C2TDELAYACTUAL.VALUE=20.000 -DRIVER.MIBSPI.VAR.MIBSPI4_POLARITY0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT1_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG7_BUF_CSNR.VALUE=CS_7 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT11_PDR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG0_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG3_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_C2TDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_POLARITY1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG6_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_OVRNINTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT9_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG0_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI4_POLARITY2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT9_PULL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG0_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_BITERRLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_SHIFTDIR0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT10_PULDIS.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG6_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI5_DEYSNCENA.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG6_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI4_POLARITY3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_SHIFTDIR1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG1_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG1_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG3_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT4_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_SHIFTDIR2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG6_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI1_SHIFTDIR3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT26_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT18_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG0_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT2_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT17_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT25_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT8_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG2_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG2_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT0_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT10_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG4_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_T2CDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT5_PULL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT4_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG2_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI3_TG0_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT2_PULL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_CSDEF.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI5_TG7_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI5_TG7_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TXINTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT3_PULDIS.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG3_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG2_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_ACTUALBAUDRATE0.VALUE=25000.000 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT9_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT8_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG6_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PRESCALE0.VALUE=3 -DRIVER.MIBSPI.VAR.MIBSPI2_TG3_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT5_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_ACTUALBAUDRATE1.VALUE=16666.667 -DRIVER.MIBSPI.VAR.MIBSPI3_PRESCALE1.VALUE=5 -DRIVER.MIBSPI.VAR.MIBSPI3_BASE_RAM.VALUE=0xFF0C0000 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT3_PULL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT0_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_ACTUALBAUDRATE2.VALUE=10000.000 -DRIVER.MIBSPI.VAR.MIBSPI5_PARPOL0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG1_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT10_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG3_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PRESCALE2.VALUE=9 -DRIVER.MIBSPI.VAR.MIBSPI3_CHARLEN0.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT0_PULL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_ACTUALBAUDRATE3.VALUE=4000.000 -DRIVER.MIBSPI.VAR.MIBSPI5_PARPOL1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PRESCALE3.VALUE=24 -DRIVER.MIBSPI.VAR.MIBSPI3_CHARLEN1.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI3_DLENERRENA.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT26_PDR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT18_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PARPOL2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG5_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PARITYENA0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT2_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG5_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG0_BUF_CSNR.VALUE=CS_0 -DRIVER.MIBSPI.VAR.MIBSPI3_CHARLEN2.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT3_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_PARPOL3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PARITYENA1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_CHARLEN3.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI1_TG1_TRGSRC.VALUE=TRG_DISABLED -DRIVER.SPI.VAR.SPI5_PORT_BIT26_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT18_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT4_PULL.VALUE=0 -DRIVER.SPI.VAR.SPI3_PHASE2.VALUE=0 -DRIVER.SPI.VAR.SPI2_TIMEOUTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT1_PULL.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT25_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT17_PULDIS.VALUE=1 -DRIVER.SPI.VAR.SPI3_PHASE3.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT11_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI4_T2CDELAYACTUAL.VALUE=10.000 -DRIVER.SPI.VAR.SPI4_POLARITY0.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT1_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT4_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI4_POLARITY1.VALUE=0 -DRIVER.SPI.VAR.SPI2_T2EDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT2_PULL.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT9_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI4_POLARITY2.VALUE=0 -DRIVER.SPI.VAR.SPI2_BITERRLVL.VALUE=0 -DRIVER.SPI.VAR.SPI1_SHIFTDIR0.VALUE=0 -DRIVER.SPI.VAR.SPI1_RXINTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT10_PULDIS.VALUE=1 -DRIVER.SPI.VAR.SPI5_DEYSNCENA.VALUE=1 -DRIVER.SPI.VAR.SPI4_POLARITY3.VALUE=0 -DRIVER.SPI.VAR.SPI1_SHIFTDIR1.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT5_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT10_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT2_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT4_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI1_SHIFTDIR2.VALUE=0 -DRIVER.SPI.VAR.SPI1_SHIFTDIR3.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT2_FUN.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT10_PULL.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT8_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT0_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT0_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT25_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT17_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT11_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI3_PORT_BIT4_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT11_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT25_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT17_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT0_PULDIS.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT9_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI3_PRESCALE0.VALUE=24 -DRIVER.SPI.VAR.SPI3_PRESCALE1.VALUE=2 -DRIVER.SPI.VAR.SPI1_C2EDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT27_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT19_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT0_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI3_PRESCALE2.VALUE=3 -DRIVER.SPI.VAR.SPI1_MASTER.VALUE=1 -DRIVER.SPI.VAR.SPI3_PRESCALE3.VALUE=99 -DRIVER.SPI.VAR.SPI3_PORT_BIT2_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI3_C2TDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI2_BASE_PORT.VALUE=0xFFF7F618 -DRIVER.SPI.VAR.SPI5_BITERRENA.VALUE=1 -DRIVER.SPI.VAR.SPI4_OVRNINTENA.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT9_PULDIS.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT25_PDR.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT17_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI5_C2TDELAYACTUAL.VALUE=20.000 -DRIVER.SPI.VAR.SPI4_PORT_BIT10_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT8_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI4_WAITENA0.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT11_PDR.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT5_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI4_WAITENA1.VALUE=0 -DRIVER.SPI.VAR.SPI5_OVRNINTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI4_WAITENA2.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT3_FUN.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT9_PULL.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT9_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT5_PULDIS.VALUE=1 -DRIVER.SPI.VAR.SPI4_WAITENA3.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT2_PULDIS.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT1_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI1_T2CDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT26_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT18_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT5_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI3_TXINTENA.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT10_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI1_BASE_RAM.VALUE=0xFF0E0000 -DRIVER.SPI.VAR.SPI5_PORT_BIT1_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT5_PULL.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT2_PULL.VALUE=0 -DRIVER.SPI.VAR.SPI1_CHARLEN0.VALUE=8 -DRIVER.SPI.VAR.SPI1_CHARLEN1.VALUE=16 -DRIVER.SPI.VAR.SPI4_PORT_BIT8_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT3_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT5_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI1_CHARLEN2.VALUE=16 -DRIVER.SPI.VAR.SPI1_CHARLEN3.VALUE=16 -DRIVER.SPI.VAR.SPI5_PORT_BIT3_PULL.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT10_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT0_PULL.VALUE=0 -DRIVER.SPI.VAR.SPI2_PARERRLVL.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT8_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI3_DLENERRENA.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT26_PDR.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT18_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT9_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI4_PARITYENA0.VALUE=0 -DRIVER.SPI.VAR.SPI4_ENABLEHIGHZ.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT3_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI5_T2EDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI4_PARITYENA1.VALUE=0 -DRIVER.SPI.VAR.SPI4_PARITYENA2.VALUE=0 -DRIVER.SPI.VAR.SPI4_DLENERRLVL.VALUE=0 -DRIVER.SPI.VAR.SPI4_RXINTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT4_FUN.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT25_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT17_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT11_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI5_PORT_BIT3_PULDIS.VALUE=1 -DRIVER.SPI.VAR.SPI4_PARITYENA3.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT0_PULDIS.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT2_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT1_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI3_CLKMOD.VALUE=1 -DRIVER.SPI.VAR.SPI1_PHASE0.VALUE=1 -DRIVER.SPI.VAR.SPI1_PHASE1.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT27_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT19_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT0_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI1_PHASE2.VALUE=0 -DRIVER.SPI.VAR.SPI1_PHASE3.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT25_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT17_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT11_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI2_BAUDRATE0.VALUE=10000.000 -DRIVER.SPI.VAR.SPI1_PORT_BIT8_PDR.VALUE=1 -DRIVER.SPI.VAR.SPI2_BAUDRATE1.VALUE=1000.000 -DRIVER.SPI.VAR.SPI5_PORT_BIT2_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI2_BAUDRATE2.VALUE=1000.000 -DRIVER.SPI.VAR.SPI2_BAUDRATE3.VALUE=1000.000 -DRIVER.SPI.VAR.SPI5_WDELAY0.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT4_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT10_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT25_PDR.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT17_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI1_C2TDELAYACTUAL.VALUE=20.000 -DRIVER.SPI.VAR.SPI1_ENABLEHIGHZ.VALUE=1 -DRIVER.SPI.VAR.SPI5_WDELAY1.VALUE=0 -DRIVER.SPI.VAR.SPI4_C2EDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI5_WDELAY2.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT11_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT9_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI1_TIMEOUTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI5_WDELAY3.VALUE=0 -DRIVER.SPI.VAR.SPI5_PARERRENA.VALUE=1 -DRIVER.SPI.VAR.SPI4_RAM_PARITY_ENA.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT5_PULDIS.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT27_PDR.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT19_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT0_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT11_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI2_POLARITY0.VALUE=0 -DRIVER.SPI.VAR.SPI2_POLARITY1.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT5_FUN.VALUE=0 -DRIVER.SPI.VAR.SPI2_POLARITY2.VALUE=0 -DRIVER.SPI.VAR.SPI3_DEYSNCENA.VALUE=1 -DRIVER.SPI.VAR.SPI2_POLARITY3.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT11_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT3_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT1_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI5_DEYSNCLVL.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT8_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI4_PORT_BIT10_PULDIS.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT26_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT18_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI2_T2EDELAYACTUAL.VALUE=0.000 -DRIVER.SPI.VAR.SPI1_PORT_BIT9_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI4_T2CDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT3_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT10_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT0_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT3_PULL.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT9_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT5_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI3_C2EDELAYACTUAL.VALUE=0.000 -DRIVER.SPI.VAR.SPI1_PRESCALE0.VALUE=99 -DRIVER.SPI.VAR.SPI4_BASE_RAM.VALUE=0xFF060000 -DRIVER.SPI.VAR.SPI1_PRESCALE1.VALUE=99 -DRIVER.SPI.VAR.SPI5_PORT_BIT4_PULL.VALUE=0 -DRIVER.SPI.VAR.SPI4_CHARLEN0.VALUE=8 -DRIVER.SPI.VAR.SPI2_PORT_BIT1_PULL.VALUE=0 -DRIVER.SPI.VAR.SPI1_PRESCALE2.VALUE=99 -DRIVER.SPI.VAR.SPI4_PORT_BIT3_PULDIS.VALUE=1 -DRIVER.SPI.VAR.SPI4_CHARLEN1.VALUE=16 -DRIVER.SPI.VAR.SPI1_PORT_BIT0_PULDIS.VALUE=1 -DRIVER.SPI.VAR.SPI1_PRESCALE3.VALUE=99 -DRIVER.SPI.VAR.SPI5_PORT_BIT1_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI5_T2CDELAYACTUAL.VALUE=10.000 -DRIVER.SPI.VAR.SPI4_CHARLEN2.VALUE=16 -DRIVER.SPI.VAR.SPI1_PORT_BIT8_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI4_CHARLEN3.VALUE=16 -DRIVER.SPI.VAR.SPI1_BASE.VALUE=0xFFF7F400 -DRIVER.SPI.VAR.SPI3_BITERRENA.VALUE=1 -DRIVER.SPI.VAR.SPI3_OVRNINTENA.VALUE=1 -DRIVER.SPI.VAR.SPI3_RXINTENA.VALUE=1 -DRIVER.SPI.VAR.SPI5_ACTUALBAUDRATE0.VALUE=2000.000 -DRIVER.SPI.VAR.SPI3_PORT_BIT10_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT4_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT2_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT25_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT17_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI5_ACTUALBAUDRATE1.VALUE=1000.000 -DRIVER.SPI.VAR.SPI5_PORT_BIT2_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI5_ACTUALBAUDRATE2.VALUE=1000.000 -DRIVER.SPI.VAR.SPI5_PARPOL0.VALUE=0 -DRIVER.SPI.VAR.SPI5_BITERRLVL.VALUE=0 -DRIVER.SPI.VAR.SPI4_SHIFTDIR0.VALUE=0 -DRIVER.SPI.VAR.SPI4_OVRNINTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT8_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI5_ACTUALBAUDRATE3.VALUE=1000.000 -DRIVER.SPI.VAR.SPI5_PARPOL1.VALUE=0 -DRIVER.SPI.VAR.SPI4_SHIFTDIR1.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT27_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT19_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT0_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI5_PARPOL2.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT0_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI4_SHIFTDIR2.VALUE=0 -DRIVER.SPI.VAR.SPI5_PARPOL3.VALUE=0 -DRIVER.SPI.VAR.SPI4_SHIFTDIR3.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT4_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT11_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT1_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT8_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT25_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT17_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT11_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI3_TXINTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT1_PULDIS.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT2_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT9_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI1_CLKMOD.VALUE=1 -DRIVER.SPI.VAR.SPI5_TIMEOUTENA.VALUE=1 -DRIVER.SPI.VAR.SPI2_DLENERRENA.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT11_PDR.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT5_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI3_PARITYENA0.VALUE=0 -DRIVER.SPI.VAR.SPI3_PARITYENA1.VALUE=0 -DRIVER.SPI.VAR.SPI1_T2EDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT3_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI5_BASE_PORT.VALUE=0xFFF7FC18 -DRIVER.SPI.VAR.SPI3_PORT_BIT9_PULL.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT9_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI3_PARITYENA2.VALUE=0 -DRIVER.SPI.VAR.SPI3_DLENERRLVL.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT0_FUN.VALUE=0 -DRIVER.SPI.VAR.SPI3_PARITYENA3.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT1_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI4_WDELAY0.VALUE=0 -DRIVER.SPI.VAR.SPI4_WDELAY1.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT5_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI4_WDELAY2.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT2_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT4_PULL.VALUE=0 -DRIVER.SPI.VAR.SPI4_WDELAY3.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT3_PULDIS.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT10_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI1_T2CDELAYACTUAL.VALUE=10.000 -DRIVER.SPI.VAR.SPI5_PORT_BIT5_PULL.VALUE=0 -DRIVER.SPI.VAR.SPI4_MASTER.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT2_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI5_PORT_BIT8_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT3_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI3_ACTUALBAUDRATE0.VALUE=4000.000 -DRIVER.SPI.VAR.SPI2_PORT_BIT0_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI3_ACTUALBAUDRATE1.VALUE=33333.333 -DRIVER.SPI.VAR.SPI2_BASE.VALUE=0xFFF7F600 -DRIVER.SPI.VAR.SPI4_PORT_BIT10_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT8_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT0_PULL.VALUE=0 -DRIVER.SPI.VAR.SPI3_ACTUALBAUDRATE2.VALUE=25000.000 -DRIVER.SPI.VAR.SPI3_ACTUALBAUDRATE3.VALUE=1000.000 -DRIVER.SPI.VAR.SPI3_PARERRENA.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT3_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI2_C2TDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT4_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI5_PARERRLVL.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT1_FUN.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT8_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT5_PULDIS.VALUE=1 -DRIVER.SPI.VAR.SPI1_DEYSNCENA.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT2_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT1_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI3_WAITENA0.VALUE=0 -DRIVER.SPI.VAR.SPI3_WAITENA1.VALUE=0 -DRIVER.SPI.VAR.SPI3_WAITENA2.VALUE=0 -DRIVER.SPI.VAR.SPI3_DEYSNCLVL.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT3_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT1_PULDIS.VALUE=1 -DRIVER.SPI.VAR.SPI3_WAITENA3.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT26_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT18_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT11_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT8_PDR.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT10_PULL.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT10_PULDIS.VALUE=1 -DRIVER.SPI.VAR.SPI2_TXINTENA.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT4_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI5_BAUDRATE0.VALUE=2000.000 -DRIVER.SPI.VAR.SPI2_PORT_BIT1_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI2_C2TDELAYACTUAL.VALUE=20.000 -DRIVER.SPI.VAR.SPI5_BAUDRATE1.VALUE=1000.000 -DRIVER.SPI.VAR.SPI5_BAUDRATE2.VALUE=1000.000 -DRIVER.SPI.VAR.SPI4_PORT_BIT11_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI4_PARPOL0.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT9_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI5_BAUDRATE3.VALUE=1000.000 -DRIVER.SPI.VAR.SPI5_RAM_PARITY_ENA.VALUE=0 -DRIVER.SPI.VAR.SPI4_PARPOL1.VALUE=0 -DRIVER.SPI.VAR.SPI4_PARPOL2.VALUE=0 -DRIVER.SPI.VAR.SPI4_PARPOL3.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT5_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT2_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT3_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI2_OVRNINTENA.VALUE=1 -DRIVER.SPI.VAR.SPI1_BITERRENA.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT3_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI5_POLARITY0.VALUE=0 -DRIVER.SPI.VAR.SPI4_PHASE0.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT0_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI5_POLARITY1.VALUE=0 -DRIVER.SPI.VAR.SPI4_T2EDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI4_PHASE1.VALUE=0 -DRIVER.SPI.VAR.SPI5_POLARITY2.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT8_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI4_PHASE2.VALUE=0 -DRIVER.SPI.VAR.SPI3_BITERRLVL.VALUE=0 -DRIVER.SPI.VAR.SPI3_OVRNINTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI3_RXINTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI2_SHIFTDIR0.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT5_PULL.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT26_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT18_PULDIS.VALUE=1 -DRIVER.SPI.VAR.SPI5_POLARITY3.VALUE=0 -DRIVER.SPI.VAR.SPI4_PHASE3.VALUE=0 -DRIVER.SPI.VAR.SPI2_SHIFTDIR1.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT9_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI3_T2EDELAYACTUAL.VALUE=0.000 -DRIVER.SPI.VAR.SPI2_SHIFTDIR2.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT8_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI1_ACTUALBAUDRATE0.VALUE=1000.000 -DRIVER.SPI.VAR.SPI2_SHIFTDIR3.VALUE=0 -DRIVER.SPI.VAR.SPI1_ACTUALBAUDRATE1.VALUE=1000.000 -DRIVER.SPI.VAR.SPI4_PORT_BIT10_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT0_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT3_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI1_ACTUALBAUDRATE2.VALUE=1000.000 -DRIVER.SPI.VAR.SPI5_PORT_BIT11_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI1_ACTUALBAUDRATE3.VALUE=1000.000 -DRIVER.SPI.VAR.SPI5_PORT_BIT9_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT5_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI4_C2EDELAYACTUAL.VALUE=0.000 -DRIVER.SPI.VAR.SPI2_PORT_BIT2_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI3_BASE.VALUE=0xFFF7F800 -DRIVER.SPI.VAR.SPI3_PORT_BIT1_PULL.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT8_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI4_PRESCALE0.VALUE=24 -DRIVER.SPI.VAR.SPI3_PORT_BIT8_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT4_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI3_WDELAY0.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT25_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT17_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI4_PRESCALE1.VALUE=99 -DRIVER.SPI.VAR.SPI3_C2EDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI3_WDELAY1.VALUE=0 -DRIVER.SPI.VAR.SPI4_PRESCALE2.VALUE=99 -DRIVER.SPI.VAR.SPI3_WDELAY2.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT3_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI4_PRESCALE3.VALUE=99 -DRIVER.SPI.VAR.SPI4_TIMEOUTENA.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT1_PULDIS.VALUE=1 -DRIVER.SPI.VAR.SPI3_WDELAY3.VALUE=0 -DRIVER.SPI.VAR.SPI1_DLENERRENA.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT4_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT10_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT2_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI3_ENABLEHIGHZ.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT1_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI2_PARITYENA0.VALUE=0 -DRIVER.SPI.VAR.SPI5_C2TDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI2_PARITYENA1.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT8_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI5_TIMEOUTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI3_BASE_PORT.VALUE=0xFFF7F818 -DRIVER.SPI.VAR.SPI2_PORT_BIT10_PULL.VALUE=0 -DRIVER.SPI.VAR.SPI2_PARITYENA2.VALUE=0 -DRIVER.SPI.VAR.SPI2_DLENERRLVL.VALUE=0 -DRIVER.SPI.VAR.SPI2_MASTER.VALUE=1 -DRIVER.SPI.VAR.SPI2_PARITYENA3.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT27_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT19_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT0_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT11_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT11_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI4_PORT_BIT1_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI1_RAM_PARITY_ENA.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT3_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI3_T2CDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI5_TXINTENA.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT3_PULDIS.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT9_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI3_BASE_RAM.VALUE=0xFF0C0000 -DRIVER.SPI.VAR.SPI3_CHARLEN0.VALUE=16 -DRIVER.SPI.VAR.SPI3_CHARLEN1.VALUE=8 -DRIVER.SPI.VAR.SPI1_PARERRENA.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT10_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT5_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT11_PDR.VALUE=1 -DRIVER.SPI.VAR.SPI3_CHARLEN2.VALUE=16 -DRIVER.SPI.VAR.SPI2_PORT_BIT2_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI3_CHARLEN3.VALUE=16 -DRIVER.SPI.VAR.SPI5_PORT_BIT9_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT9_PULL.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT0_FUN.VALUE=0 -DRIVER.SPI.VAR.SPI3_PARERRLVL.VALUE=0 -DRIVER.SPI.VAR.SPI2_RXINTENA.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT9_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT2_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI3_PARPOL0.VALUE=0 -DRIVER.SPI.VAR.SPI1_DEYSNCLVL.VALUE=0 -DRIVER.SPI.VAR.SPI3_PARPOL1.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT8_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT10_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI3_PARPOL2.VALUE=0 -DRIVER.SPI.VAR.SPI2_T2CDELAYACTUAL.VALUE=10.000 -DRIVER.SPI.VAR.SPI4_BASE.VALUE=0xFFF7FA00 -DRIVER.SPI.VAR.SPI3_PARPOL3.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT2_PULL.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT4_PULDIS.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT1_PULDIS.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT0_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI4_CLKMOD.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT5_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI3_BAUDRATE0.VALUE=4000.000 -DRIVER.SPI.VAR.SPI2_PHASE0.VALUE=0 -DRIVER.SPI.VAR.SPI3_BAUDRATE1.VALUE=33333.000 -DRIVER.SPI.VAR.SPI2_PHASE1.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT10_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT8_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT0_PULL.VALUE=0 -DRIVER.SPI.VAR.SPI3_BAUDRATE2.VALUE=25000.000 -DRIVER.SPI.VAR.SPI2_PHASE2.VALUE=0 -DRIVER.SPI.VAR.SPI2_TXINTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI3_BAUDRATE3.VALUE=1000.000 -DRIVER.SPI.VAR.SPI2_PORT_BIT10_PULDIS.VALUE=1 -DRIVER.SPI.VAR.SPI2_PHASE3.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT3_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT3_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT0_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT25_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI5_PORT_BIT17_PULL.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT1_FUN.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT11_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI1_OVRNINTENA.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT1_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI3_POLARITY0.VALUE=0 -DRIVER.SPI.VAR.SPI3_POLARITY1.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT3_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI3_POLARITY2.VALUE=0 -DRIVER.SPI.VAR.SPI2_OVRNINTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT0_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI1_BITERRLVL.VALUE=0 -DRIVER.SPI.VAR.SPI4_DEYSNCENA.VALUE=1 -DRIVER.SPI.VAR.SPI3_POLARITY3.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT8_PDR.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT11_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI2_WDELAY0.VALUE=0 -DRIVER.SPI.VAR.SPI2_WDELAY1.VALUE=0 -DRIVER.SPI.VAR.SPI2_WDELAY2.VALUE=0 -DRIVER.SPI.VAR.SPI2_WDELAY3.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT1_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT10_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI3_C2TDELAYACTUAL.VALUE=20.000 -DRIVER.SPI.VAR.SPI5_PORT_BIT11_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT9_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT11_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT11_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI2_PRESCALE0.VALUE=9 -DRIVER.SPI.VAR.SPI2_PRESCALE1.VALUE=99 -DRIVER.SPI.VAR.SPI4_PORT_BIT2_FUN.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT8_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI2_PRESCALE2.VALUE=99 -DRIVER.SPI.VAR.SPI3_TIMEOUTENA.VALUE=1 -DRIVER.SPI.VAR.SPI2_PRESCALE3.VALUE=99 -DRIVER.SPI.VAR.SPI1_PORT_BIT8_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT0_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI1_PARITYENA0.VALUE=0 -DRIVER.SPI.VAR.SPI1_C2TDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI1_PARITYENA1.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT8_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI4_PORT_BIT4_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI4_TIMEOUTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT1_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI1_PARITYENA2.VALUE=0 -DRIVER.SPI.VAR.SPI1_DLENERRLVL.VALUE=0 -DRIVER.SPI.VAR.SPI1_BASE_PORT.VALUE=0xFFF7F418 -DRIVER.SPI.VAR.SPI5_RXINTENA.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT4_PULDIS.VALUE=1 -DRIVER.SPI.VAR.SPI4_BITERRENA.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT1_PULDIS.VALUE=1 -DRIVER.SPI.VAR.SPI1_PARITYENA3.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT9_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI4_T2EDELAYACTUAL.VALUE=0.000 -DRIVER.SPI.VAR.SPI2_PORT_BIT8_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI2_WAITENA0.VALUE=0 -DRIVER.SPI.VAR.SPI5_BASE.VALUE=0xFFF7FC00 -DRIVER.SPI.VAR.SPI2_WAITENA1.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT10_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI5_SHIFTDIR0.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT3_PULL.VALUE=0 -DRIVER.SPI.VAR.SPI2_WAITENA2.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT10_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI5_SHIFTDIR1.VALUE=0 -DRIVER.SPI.VAR.SPI2_WAITENA3.VALUE=0 -DRIVER.SPI.VAR.SPI5_C2EDELAYACTUAL.VALUE=0.000 -DRIVER.SPI.VAR.SPI5_SHIFTDIR2.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT2_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI5_SHIFTDIR3.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT1_PULL.VALUE=0 -DRIVER.SPI.VAR.SPI1_TXINTENA.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT8_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT4_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT1_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT26_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI5_PORT_BIT18_PULL.VALUE=0 -DRIVER.SPI.VAR.SPI5_TXINTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT3_FUN.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT9_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI2_PARPOL0.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT0_FUN.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT9_PULDIS.VALUE=1 -DRIVER.SPI.VAR.SPI2_PARPOL1.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT10_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT2_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT1_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI2_PARPOL2.VALUE=0 -DRIVER.SPI.VAR.SPI2_PARPOL3.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT5_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT2_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI1_PARERRLVL.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT2_PULDIS.VALUE=1 -DRIVER.SPI.VAR.SPI2_CLKMOD.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT10_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI3_T2EDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT11_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI2_RXINTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT11_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI2_RAM_PARITY_ENA.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT3_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT11_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT0_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT8_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT9_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI1_BAUDRATE0.VALUE=1000.000 -DRIVER.SPI.VAR.SPI1_BAUDRATE1.VALUE=1000.000 -DRIVER.SPI.VAR.SPI4_PORT_BIT4_FUN.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT8_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI1_PORT_BIT1_FUN.VALUE=0 -DRIVER.SPI.VAR.SPI1_BAUDRATE2.VALUE=1000.000 -DRIVER.SPI.VAR.SPI3_PORT_BIT4_PULDIS.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT25_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT17_PULDIS.VALUE=1 -DRIVER.SPI.VAR.SPI1_BAUDRATE3.VALUE=1000.000 -DRIVER.SPI.VAR.SPI5_PORT_BIT11_PDR.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT2_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI1_WDELAY0.VALUE=0 -DRIVER.SPI.VAR.SPI2_C2EDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI1_WDELAY1.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT9_PULL.VALUE=0 -DRIVER.SPI.VAR.SPI5_MASTER.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT10_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT3_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI1_WDELAY2.VALUE=0 -DRIVER.SPI.VAR.SPI4_PARERRENA.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT10_PULDIS.VALUE=1 -DRIVER.SPI.VAR.SPI1_WDELAY3.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT9_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT8_PDR.VALUE=1 -DRIVER.SPI.VAR.SPI1_C2EDELAYACTUAL.VALUE=0.000 -DRIVER.SPI.VAR.SPI1_POLARITY0.VALUE=0 -DRIVER.SPI.VAR.SPI4_C2TDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI1_POLARITY1.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT4_PULL.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT25_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI1_PORT_BIT17_PULL.VALUE=0 -DRIVER.SPI.VAR.SPI1_POLARITY2.VALUE=0 -DRIVER.SPI.VAR.SPI1_OVRNINTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI5_DLENERRENA.VALUE=1 -DRIVER.SPI.VAR.SPI2_DEYSNCENA.VALUE=1 -DRIVER.SPI.VAR.SPI1_POLARITY3.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT10_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI5_WAITENA0.VALUE=0 -DRIVER.SPI.VAR.SPI5_ENABLEHIGHZ.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT4_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI3_T2CDELAYACTUAL.VALUE=10.000 -DRIVER.SPI.VAR.SPI1_PORT_BIT1_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI5_WAITENA1.VALUE=0 -DRIVER.SPI.VAR.SPI5_WAITENA2.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT2_PULL.VALUE=0 -DRIVER.SPI.VAR.SPI4_DEYSNCLVL.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT9_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI5_WAITENA3.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT9_PULDIS.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT5_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI4_ACTUALBAUDRATE0.VALUE=4000.000 -DRIVER.SPI.VAR.SPI1_PORT_BIT10_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT2_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI4_ACTUALBAUDRATE1.VALUE=1000.000 -DRIVER.SPI.VAR.SPI2_T2CDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT27_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI5_PORT_BIT19_PULL.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT0_PULL.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT5_FUN.VALUE=0 -DRIVER.SPI.VAR.SPI4_ACTUALBAUDRATE2.VALUE=1000.000 -DRIVER.SPI.VAR.SPI1_PORT_BIT2_FUN.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT2_PULDIS.VALUE=1 -DRIVER.SPI.VAR.SPI4_ACTUALBAUDRATE3.VALUE=1000.000 -DRIVER.SPI.VAR.SPI4_TXINTENA.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT3_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT3_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT0_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT0_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI2_BASE_RAM.VALUE=0xFF080000 -DRIVER.SPI.VAR.SPI2_CHARLEN0.VALUE=8 -DRIVER.SPI.VAR.SPI1_PORT_BIT11_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT4_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT11_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI2_CHARLEN1.VALUE=16 -DRIVER.SPI.VAR.SPI2_TIMEOUTENA.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT9_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI2_CHARLEN2.VALUE=16 -DRIVER.SPI.VAR.SPI2_ENABLEHIGHZ.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT11_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI2_CHARLEN3.VALUE=16 -DRIVER.SPI.VAR.SPI3_PORT_BIT0_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI3_TIMEOUTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI2_BITERRENA.VALUE=1 -DRIVER.SPI.VAR.SPI1_RXINTENA.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT11_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT5_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT2_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT10_PULL.VALUE=0 -DRIVER.SPI.VAR.SPI5_RXINTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI4_BITERRLVL.VALUE=0 -DRIVER.SPI.VAR.SPI3_SHIFTDIR0.VALUE=0 -DRIVER.SPI.VAR.SPI1_PARPOL0.VALUE=0 -DRIVER.SPI.VAR.SPI3_SHIFTDIR1.VALUE=0 -DRIVER.SPI.VAR.SPI1_PARPOL1.VALUE=0 -DRIVER.SPI.VAR.SPI5_PHASE0.VALUE=0 -DRIVER.SPI.VAR.SPI4_C2TDELAYACTUAL.VALUE=20.000 -DRIVER.SPI.VAR.SPI3_SHIFTDIR2.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT8_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT11_PDR.VALUE=1 -DRIVER.SPI.VAR.SPI1_PARPOL2.VALUE=0 -DRIVER.SPI.VAR.SPI5_PHASE1.VALUE=0 -DRIVER.SPI.VAR.SPI3_SHIFTDIR3.VALUE=0 -DRIVER.SPI.VAR.SPI1_PARPOL3.VALUE=0 -DRIVER.SPI.VAR.SPI5_PHASE2.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT9_PULL.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT3_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT27_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT19_PULDIS.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT0_PULDIS.VALUE=1 -DRIVER.SPI.VAR.SPI5_PHASE3.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT4_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT1_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT8_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT5_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI1_TXINTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI5_PRESCALE0.VALUE=49 -DRIVER.SPI.VAR.SPI1_PORT_BIT10_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI5_C2EDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI5_PRESCALE1.VALUE=99 -DRIVER.SPI.VAR.SPI5_PRESCALE2.VALUE=99 -DRIVER.SPI.VAR.SPI3_PORT_BIT5_PULL.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT1_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI5_PRESCALE3.VALUE=99 -DRIVER.SPI.VAR.SPI3_PORT_BIT9_PULDIS.VALUE=1 -DRIVER.SPI.VAR.SPI5_T2EDELAYACTUAL.VALUE=0.000 -DRIVER.SPI.VAR.SPI3_PORT_BIT8_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI2_ACTUALBAUDRATE0.VALUE=10000.000 -DRIVER.SPI.VAR.SPI1_PORT_BIT3_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI2_ACTUALBAUDRATE1.VALUE=1000.000 -DRIVER.SPI.VAR.SPI4_PORT_BIT3_PULL.VALUE=0 -DRIVER.SPI.VAR.SPI4_BASE_PORT.VALUE=0xFFF7FA18 -DRIVER.SPI.VAR.SPI2_PORT_BIT10_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI2_ACTUALBAUDRATE2.VALUE=1000.000 -DRIVER.SPI.VAR.SPI1_PORT_BIT0_PULL.VALUE=0 -DRIVER.SPI.VAR.SPI5_OVRNINTENA.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT2_PULDIS.VALUE=1 -DRIVER.SPI.VAR.SPI2_ACTUALBAUDRATE3.VALUE=1000.000 -DRIVER.SPI.VAR.SPI2_PORT_BIT9_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT3_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT1_PULL.VALUE=0 -DRIVER.SPI.VAR.SPI3_MASTER.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT4_FUN.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT4_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT5_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT1_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT2_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI5_T2CDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT9_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT0_FUN.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT11_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI5_BASE_RAM.VALUE=0xFF0A0000 -DRIVER.SPI.VAR.SPI5_CHARLEN0.VALUE=16 -DRIVER.SPI.VAR.SPI3_PORT_BIT10_PULL.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT2_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI5_CHARLEN1.VALUE=16 -DRIVER.SPI.VAR.SPI2_PARERRENA.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT4_PULDIS.VALUE=1 -DRIVER.SPI.VAR.SPI5_CHARLEN2.VALUE=16 -DRIVER.SPI.VAR.SPI1_PORT_BIT4_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI5_CHARLEN3.VALUE=16 -DRIVER.SPI.VAR.SPI5_PORT_BIT25_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT17_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT11_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI4_PARERRLVL.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT11_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT0_PULDIS.VALUE=1 -DRIVER.SPI.VAR.SPI4_DLENERRENA.VALUE=1 -DRIVER.SPI.VAR.SPI4_RXINTENA.VALUE=1 -DRIVER.SPI.VAR.SPI3_RAM_PARITY_ENA.VALUE=0 -DRIVER.SPI.VAR.SPI5_PARITYENA0.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT0_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI1_WAITENA0.VALUE=0 -DRIVER.SPI.VAR.SPI5_PARITYENA1.VALUE=0 -DRIVER.SPI.VAR.SPI1_WAITENA1.VALUE=0 -DRIVER.SPI.VAR.SPI5_PARITYENA2.VALUE=0 -DRIVER.SPI.VAR.SPI5_DLENERRLVL.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT8_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI2_DEYSNCLVL.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT5_FUN.VALUE=0 -DRIVER.SPI.VAR.SPI1_WAITENA2.VALUE=0 -DRIVER.SPI.VAR.SPI5_PARITYENA3.VALUE=0 -DRIVER.SPI.VAR.SPI1_WAITENA3.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT3_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT1_FUN.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT8_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI2_PORT_BIT9_PULDIS.VALUE=1 -DRIVER.SPI.VAR.SPI4_BAUDRATE0.VALUE=4000 -DRIVER.SPI.VAR.SPI1_T2EDELAYACTUAL.VALUE=0.000 -DRIVER.SPI.VAR.SPI4_BAUDRATE1.VALUE=1000.000 -DRIVER.SPI.VAR.SPI4_BAUDRATE2.VALUE=1000.000 -DRIVER.SPI.VAR.SPI4_TXINTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT3_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT10_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT5_PULDIS.VALUE=1 -DRIVER.SPI.VAR.SPI4_BAUDRATE3.VALUE=1000.000 -DRIVER.SPI.VAR.SPI2_PORT_BIT2_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI1_TIMEOUTENA.VALUE=1 -DRIVER.SPI.VAR.SPI5_CLKMOD.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT8_PDR.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT9_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI3_PHASE0.VALUE=0 -DRIVER.SPI.VAR.SPI2_C2EDELAYACTUAL.VALUE=0.000 -DRIVER.SPI.VAR.SPI1_PORT_BIT5_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI3_PHASE1.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_51_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_51_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_43_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_43_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_35_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_35_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_27_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_27_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_19_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_19_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_51_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_43_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_35_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_27_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_19_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_21_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_21_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_13_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_13_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_59_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_9_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_30_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_22_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_14_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_4_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_61_BOOL_ENA.VALUE=1 -DRIVER.CAN.VAR.CAN_1_MESSAGE_53_BOOL_ENA.VALUE=1 -DRIVER.CAN.VAR.CAN_1_MESSAGE_45_BOOL_ENA.VALUE=1 -DRIVER.CAN.VAR.CAN_1_MESSAGE_37_BOOL_ENA.VALUE=1 -DRIVER.CAN.VAR.CAN_1_MESSAGE_29_BOOL_ENA.VALUE=1 -DRIVER.CAN.VAR.CAN_1_MESSAGE_6_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_RAM_PARITY_ENA.VALUE=0x00000005 -DRIVER.CAN.VAR.CAN_1_MESSAGE_59_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_64_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_56_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_48_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_SYNC.VALUE=1 -DRIVER.CAN.VAR.CAN_4_MESSAGE_62_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_54_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_46_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_38_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_SHIFT.VALUE=0 -DRIVER.CAN.VAR.CAN_4_AUTO_BUS_ON.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_4_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_4_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_40_INT_ENA_REF.VALUE=0x00000001 -DRIVER.CAN.VAR.CAN_1_MESSAGE_32_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_24_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_16_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_57_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_49_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_64_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_56_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_48_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_31_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_23_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_15_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_51_INT_ENA.VALUE=0x00000400 -DRIVER.CAN.VAR.CAN_1_MESSAGE_43_INT_ENA.VALUE=0x00000400 -DRIVER.CAN.VAR.CAN_1_MESSAGE_35_INT_ENA.VALUE=0x00000400 -DRIVER.CAN.VAR.CAN_1_MESSAGE_27_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_19_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_BAUDRATE.VALUE=500 -DRIVER.CAN.VAR.CAN_2_PORT_RX_PDR.VALUE=1 -DRIVER.CAN.VAR.CAN_2_MESSAGE_63_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_55_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_47_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_39_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_30_ID.VALUE=30 -DRIVER.CAN.VAR.CAN_2_MESSAGE_22_ID.VALUE=22 -DRIVER.CAN.VAR.CAN_2_MESSAGE_14_ID.VALUE=14 -DRIVER.CAN.VAR.CAN_2_MESSAGE_9_ID.VALUE=9 -DRIVER.CAN.VAR.CAN_1_MESSAGE_57_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_49_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_60_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_52_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_44_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_36_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_28_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_RAMBASE.VALUE=0xFF1C0000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_30_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_22_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_14_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_51_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_43_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_35_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_27_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_19_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_9_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_PORT_RX_PULDIS.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_57_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_49_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_4_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_2_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_64_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_56_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_48_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_NOMINAL_BIT_RATE.VALUE=1000.000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_51_MASK.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_43_MASK.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_35_MASK.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_27_MASK.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_19_MASK.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_1_BOOL_ENA.VALUE=1 -DRIVER.CAN.VAR.CAN_3_MESSAGE_57_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_51_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_49_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_43_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_35_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_27_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_19_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_10_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_5_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_64_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_64_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_56_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_56_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_48_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_48_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_40_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_32_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_24_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_16_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_9_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_60_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_52_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_50_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_44_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_42_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_36_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_34_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_28_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_26_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_18_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_60_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_58_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_52_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_44_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_36_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_28_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_PIN_MODE.VALUE=1 -DRIVER.CAN.VAR.CAN_2_PHASE_SEG.VALUE=1 -DRIVER.CAN.VAR.CAN_1_MESSAGE_30_ENA.VALUE=0x80000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_22_ENA.VALUE=0x80000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_20_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_14_ENA.VALUE=0x80000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_12_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_31_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_23_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_15_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_7_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_51_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_43_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_35_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_31_ID.VALUE=31 -DRIVER.CAN.VAR.CAN_2_MESSAGE_27_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_23_ID.VALUE=23 -DRIVER.CAN.VAR.CAN_2_MESSAGE_19_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_15_ID.VALUE=15 -DRIVER.CAN.VAR.CAN_4_MESSAGE_1_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_NOMINAL_BIT_TIME.VALUE=10 -DRIVER.CAN.VAR.CAN_4_MESSAGE_60_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_60_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_52_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_52_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_51_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_44_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_44_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_43_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_36_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_36_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_35_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_28_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_28_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_27_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_19_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_9_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_30_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_30_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_22_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_22_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_21_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_14_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_14_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_13_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_AUTO_BUS_ON.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_60_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_52_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_44_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_36_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_28_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_63_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_55_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_47_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_39_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_31_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_23_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_15_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_10_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_5_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_PORT_TX_PULDIS.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_30_BOOL_ENA.VALUE=1 -DRIVER.CAN.VAR.CAN_1_MESSAGE_22_BOOL_ENA.VALUE=1 -DRIVER.CAN.VAR.CAN_1_MESSAGE_14_BOOL_ENA.VALUE=1 -DRIVER.CAN.VAR.CAN_4_MESSAGE_51_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_43_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_35_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_27_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_19_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_7_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_21_INT_LEVEL.VALUE=0x00200000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_13_INT_LEVEL.VALUE=0x00002000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_57_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_49_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_BASE.VALUE=0xFFF7DC00 -DRIVER.CAN.VAR.CAN_4_MESSAGE_9_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_40_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_32_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_24_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_16_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_10_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_10_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_5_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_5_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_6_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_40_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_32_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_24_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_16_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_11_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_1_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_8_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_3_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_3_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_10_MASK.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_4_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_21_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_13_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_64_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_56_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_48_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_40_ID.VALUE=40 -DRIVER.CAN.VAR.CAN_2_MESSAGE_32_ID.VALUE=32 -DRIVER.CAN.VAR.CAN_2_MESSAGE_24_ID.VALUE=24 -DRIVER.CAN.VAR.CAN_2_MESSAGE_16_ID.VALUE=16 -DRIVER.CAN.VAR.CAN_1_MESSAGE_1_INT_LEVEL.VALUE=0x00000002 -DRIVER.CAN.VAR.CAN_4_MESSAGE_61_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_53_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_45_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_37_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_29_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_31_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_23_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_15_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_1_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_1_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_21_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_13_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_6_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_6_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_IDENTIFIER_MODE.VALUE=0x40000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_57_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_49_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_11_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_57_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_49_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_40_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_32_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_24_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_16_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_3_MASK.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_60_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_52_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_44_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_36_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_28_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_11_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_6_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_PORT_RX_PULL.VALUE=1 -DRIVER.CAN.VAR.CAN_4_MESSAGE_40_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_32_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_24_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_16_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_57_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_57_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_49_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_49_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_6_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_PORT_TX_DIN.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_10_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_61_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_53_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_45_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_37_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_29_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_59_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_51_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_43_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_35_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_27_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_19_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_1_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_31_ENA.VALUE=0x80000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_23_ENA.VALUE=0x80000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_15_ENA.VALUE=0x80000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_40_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_32_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_24_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_16_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_8_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_PORT_RX_PSL.VALUE=1 -DRIVER.CAN.VAR.CAN_2_MESSAGE_41_ID.VALUE=41 -DRIVER.CAN.VAR.CAN_2_MESSAGE_33_ID.VALUE=33 -DRIVER.CAN.VAR.CAN_2_MESSAGE_25_ID.VALUE=25 -DRIVER.CAN.VAR.CAN_2_MESSAGE_17_ID.VALUE=17 -DRIVER.CAN.VAR.CAN_1_MESSAGE_10_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_2_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_BRP_FREQ.VALUE=10.000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_61_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_61_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_53_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_53_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_45_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_45_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_37_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_37_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_29_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_29_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_6_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_21_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_13_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_PORT_TX_DIR.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_31_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_31_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_23_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_23_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_15_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_15_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_3_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_21_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_13_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_5_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_11_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_6_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_4_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_PROP_SEG.VALUE=1 -DRIVER.CAN.VAR.CAN_3_MESSAGE_1_ID.VALUE=1 -DRIVER.CAN.VAR.CAN_2_MESSAGE_64_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_56_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_48_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_1_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_SYNC.VALUE=1 -DRIVER.CAN.VAR.CAN_3_MESSAGE_58_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_11_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_11_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_10_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_6_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_6_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_3_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_2_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_60_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_52_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_44_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_36_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_28_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_57_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_49_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_NOMINAL_BIT_RATE.VALUE=1000.000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_64_BOOL_ENA.VALUE=1 -DRIVER.CAN.VAR.CAN_1_MESSAGE_56_BOOL_ENA.VALUE=1 -DRIVER.CAN.VAR.CAN_1_MESSAGE_48_BOOL_ENA.VALUE=1 -DRIVER.CAN.VAR.CAN_4_MESSAGE_64_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_56_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_48_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_57_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_50_ID.VALUE=50 -DRIVER.CAN.VAR.CAN_2_MESSAGE_49_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_42_ID.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_34_ID.VALUE=34 -DRIVER.CAN.VAR.CAN_2_MESSAGE_26_ID.VALUE=26 -DRIVER.CAN.VAR.CAN_2_MESSAGE_18_ID.VALUE=18 -DRIVER.CAN.VAR.CAN_1_MESSAGE_50_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_42_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_34_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_26_INT_LEVEL.VALUE=0x04000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_18_INT_LEVEL.VALUE=0x00040000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_62_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_54_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_46_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_38_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_PROPAGATION_DELAY.VALUE=700 -DRIVER.CAN.VAR.CAN_1_MESSAGE_40_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_32_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_24_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_16_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_21_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_13_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_2_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_2_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_3_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_58_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_BAUDRATE.VALUE=1000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_58_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_50_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_42_BOOL_ENA.VALUE=1 -DRIVER.CAN.VAR.CAN_2_MESSAGE_34_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_26_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_18_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_60_MASK.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_57_INT_ENA.VALUE=0x00000400 -DRIVER.CAN.VAR.CAN_1_MESSAGE_52_MASK.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_49_INT_ENA.VALUE=0x00000400 -DRIVER.CAN.VAR.CAN_1_MESSAGE_44_MASK.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_36_MASK.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_28_MASK.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_10_ID.VALUE=10 -DRIVER.CAN.VAR.CAN_4_MESSAGE_9_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_61_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_53_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_50_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_45_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_42_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_37_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_34_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_29_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_26_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_18_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_2_ID.VALUE=2 -DRIVER.CAN.VAR.CAN_1_MESSAGE_6_INT_LEVEL.VALUE=0x00000040 -DRIVER.CAN.VAR.CAN_3_NOMINAL_BIT_TIME.VALUE=10 -DRIVER.CAN.VAR.CAN_2_MESSAGE_20_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_12_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_7_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_3_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_58_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_58_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_10_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_SAMPLE_POINT.VALUE=90.000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_62_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_54_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_46_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_38_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_8_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_7_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_61_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_53_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_45_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_37_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_29_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_21_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_20_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_13_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_12_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_40_ENA.VALUE=0x80000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_32_ENA.VALUE=0x80000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_24_ENA.VALUE=0x80000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_16_ENA.VALUE=0x80000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_5_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_4_BOOL_ENA.VALUE=1 -DRIVER.CAN.VAR.CAN_4_MESSAGE_41_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_33_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_25_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_17_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_9_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_51_ID.VALUE=51 -DRIVER.CAN.VAR.CAN_2_MESSAGE_43_ID.VALUE=43 -DRIVER.CAN.VAR.CAN_2_MESSAGE_35_ID.VALUE=35 -DRIVER.CAN.VAR.CAN_2_MESSAGE_27_ID.VALUE=27 -DRIVER.CAN.VAR.CAN_2_MESSAGE_20_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_19_ID.VALUE=19 -DRIVER.CAN.VAR.CAN_2_MESSAGE_12_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_3_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_11_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_3_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_62_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_62_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_54_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_54_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_46_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_46_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_38_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_38_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_40_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_40_DIR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_32_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_32_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_24_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_24_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_16_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_16_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_64_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_56_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_48_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_40_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_32_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_24_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_20_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_16_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_12_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_7_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_50_INT_ENA.VALUE=0x00000400 -DRIVER.CAN.VAR.CAN_1_MESSAGE_42_INT_ENA.VALUE=0x00000800 -DRIVER.CAN.VAR.CAN_1_MESSAGE_34_INT_ENA.VALUE=0x00000400 -DRIVER.CAN.VAR.CAN_1_MESSAGE_26_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_18_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_20_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_12_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_11_ID.VALUE=11 -DRIVER.CAN.VAR.CAN_3_MESSAGE_3_ID.VALUE=3 -DRIVER.CAN.VAR.CAN_2_PORT_RX_DOUT.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_2_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_59_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_BASE.VALUE=0xFFF7DE00 -DRIVER.CAN.VAR.CAN_1_RAMBASE.VALUE=0xFF1E0000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_10_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_20_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_20_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_12_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_12_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_7_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_7_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_PORT_RX_PULL.VALUE=2 -DRIVER.CAN.VAR.CAN_4_MESSAGE_63_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_55_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_47_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_41_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_39_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_33_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_25_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_17_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_3_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_1_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_9_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_IDENTIFIER_MODE.VALUE=0x40000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_41_BOOL_ENA.VALUE=1 -DRIVER.CAN.VAR.CAN_1_MESSAGE_33_BOOL_ENA.VALUE=1 -DRIVER.CAN.VAR.CAN_1_MESSAGE_25_BOOL_ENA.VALUE=1 -DRIVER.CAN.VAR.CAN_1_MESSAGE_17_BOOL_ENA.VALUE=1 -DRIVER.CAN.VAR.CAN_1_MESSAGE_11_MASK.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_60_ID.VALUE=60 -DRIVER.CAN.VAR.CAN_2_MESSAGE_58_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_52_ID.VALUE=52 -DRIVER.CAN.VAR.CAN_2_MESSAGE_44_ID.VALUE=44 -DRIVER.CAN.VAR.CAN_2_MESSAGE_36_ID.VALUE=36 -DRIVER.CAN.VAR.CAN_2_MESSAGE_28_ID.VALUE=28 -DRIVER.CAN.VAR.CAN_4_MESSAGE_63_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_55_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_47_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_39_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_41_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_33_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_25_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_17_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_PORT_RX_DIN.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_3_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_3_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_41_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_33_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_25_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_17_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_7_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_59_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_20_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_12_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_9_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_11_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_6_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_11_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_4_MASK.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_20_ID.VALUE=20 -DRIVER.CAN.VAR.CAN_4_MESSAGE_12_ID.VALUE=12 -DRIVER.CAN.VAR.CAN_3_MESSAGE_62_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_54_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_46_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_38_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_4_ID.VALUE=4 -DRIVER.CAN.VAR.CAN_1_MESSAGE_63_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_55_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_47_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_39_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_21_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_13_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_8_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_PORT_RX_DIR.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_59_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_59_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_AUTO_RETRANSMISSION.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_PORT_TX_FUN.VALUE=1 -DRIVER.CAN.VAR.CAN_1_MESSAGE_59_INT_ENA_REF.VALUE=0x00000001 -DRIVER.CAN.VAR.CAN_4_MESSAGE_63_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_55_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_47_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_39_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_62_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_54_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_46_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_38_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_2_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_41_ENA.VALUE=0x80000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_33_ENA.VALUE=0x80000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_25_ENA.VALUE=0x80000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_17_ENA.VALUE=0x80000000 -DRIVER.CAN.VAR.CAN_4_PORT_TX_DOUT.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_50_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_42_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_34_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_26_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_18_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_AUTO_BUS_ON_TR.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_63_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_55_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_47_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_39_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_61_ID.VALUE=61 -DRIVER.CAN.VAR.CAN_2_MESSAGE_53_ID.VALUE=53 -DRIVER.CAN.VAR.CAN_2_MESSAGE_45_ID.VALUE=45 -DRIVER.CAN.VAR.CAN_2_MESSAGE_37_ID.VALUE=37 -DRIVER.CAN.VAR.CAN_2_MESSAGE_29_ID.VALUE=29 -DRIVER.CAN.VAR.CAN_1_MESSAGE_20_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_12_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_4_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_1_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_63_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_63_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_55_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_55_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_47_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_47_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_39_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_39_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_PORT_TX_PULL.VALUE=2 -DRIVER.CAN.VAR.CAN_1_MESSAGE_41_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_41_DIR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_33_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_33_DIR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_25_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_25_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_17_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_17_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_10_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_62_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_54_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_46_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_38_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_2_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_21_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_13_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_8_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_NOMINAL_BIT_RATE.VALUE=500.000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_21_ID.VALUE=21 -DRIVER.CAN.VAR.CAN_4_MESSAGE_13_ID.VALUE=13 -DRIVER.CAN.VAR.CAN_3_MESSAGE_5_ID.VALUE=5 -DRIVER.CAN.VAR.CAN_2_MESSAGE_41_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_33_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_25_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_17_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_8_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_3_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_BRPE_FREQ.VALUE=10.000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_59_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_21_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_21_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_13_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_13_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_8_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_8_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_PORT_RX_DIN.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_40_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_32_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_24_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_16_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_4_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_PROP_SEG.VALUE=7 -DRIVER.CAN.VAR.CAN_3_MESSAGE_8_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_58_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_31_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_23_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_15_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_RAM_PARITY_ENA.VALUE=0x0000000A -DRIVER.CAN.VAR.CAN_1_MESSAGE_10_BOOL_ENA.VALUE=1 -DRIVER.CAN.VAR.CAN_1_MESSAGE_1_ENA.VALUE=0x80000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_41_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_33_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_25_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_17_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_5_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_PORT_TX_PDR.VALUE=1 -DRIVER.CAN.VAR.CAN_2_MESSAGE_62_ID.VALUE=62 -DRIVER.CAN.VAR.CAN_2_MESSAGE_59_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_54_ID.VALUE=54 -DRIVER.CAN.VAR.CAN_2_MESSAGE_46_ID.VALUE=46 -DRIVER.CAN.VAR.CAN_2_MESSAGE_38_ID.VALUE=38 -DRIVER.CAN.VAR.CAN_1_MESSAGE_11_INT_LEVEL.VALUE=0x00000800 -DRIVER.CAN.VAR.CAN_4_MESSAGE_64_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_56_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_48_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_NOMINAL_BIT_TIME.VALUE=10 -DRIVER.CAN.VAR.CAN_1_MESSAGE_50_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_42_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_34_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_26_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_18_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_4_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_4_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_PORT_RX_DIR.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_64_INT_ENA_REF.VALUE=0x00000001 -DRIVER.CAN.VAR.CAN_1_MESSAGE_56_INT_ENA_REF.VALUE=0x00000001 -DRIVER.CAN.VAR.CAN_1_MESSAGE_48_INT_ENA_REF.VALUE=0x00000001 -DRIVER.CAN.VAR.CAN_1_MESSAGE_1_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_1_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_59_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_58_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_61_MASK.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_59_BOOL_ENA.VALUE=1 -DRIVER.CAN.VAR.CAN_1_MESSAGE_53_MASK.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_45_MASK.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_37_MASK.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_29_MASK.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_TQ.VALUE=250.000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_30_ID.VALUE=30 -DRIVER.CAN.VAR.CAN_4_MESSAGE_22_ID.VALUE=22 -DRIVER.CAN.VAR.CAN_4_MESSAGE_14_ID.VALUE=14 -DRIVER.CAN.VAR.CAN_4_MESSAGE_2_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_63_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_55_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_47_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_39_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_11_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_6_ID.VALUE=6 -DRIVER.CAN.VAR.CAN_2_MESSAGE_30_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_22_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_14_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_9_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_59_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_64_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_56_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_48_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_62_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_54_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_46_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_38_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_61_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_53_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_45_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_37_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_29_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_3_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_50_ENA.VALUE=0x80000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_42_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_34_ENA.VALUE=0x80000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_26_ENA.VALUE=0x80000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_18_ENA.VALUE=0x80000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_51_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_43_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_35_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_27_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_19_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_63_ID.VALUE=63 -DRIVER.CAN.VAR.CAN_2_MESSAGE_55_ID.VALUE=55 -DRIVER.CAN.VAR.CAN_2_MESSAGE_47_ID.VALUE=47 -DRIVER.CAN.VAR.CAN_2_MESSAGE_39_ID.VALUE=39 -DRIVER.CAN.VAR.CAN_1_MESSAGE_21_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_13_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_5_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_10_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_2_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_64_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_64_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_56_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_56_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_48_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_48_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_64_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_56_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_48_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_50_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_50_DIR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_42_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_42_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_34_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_34_DIR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_26_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_26_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_18_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_18_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_51_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_43_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_35_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_31_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_27_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_23_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_19_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_15_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_41_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_33_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_30_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_25_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_22_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_17_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_14_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_9_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_TQ.VALUE=100.000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_7_BOOL_ENA.VALUE=1 -DRIVER.CAN.VAR.CAN_1_BRPE.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_31_ID.VALUE=31 -DRIVER.CAN.VAR.CAN_4_MESSAGE_23_ID.VALUE=23 -DRIVER.CAN.VAR.CAN_4_MESSAGE_15_ID.VALUE=15 -DRIVER.CAN.VAR.CAN_3_MESSAGE_7_ID.VALUE=7 -DRIVER.CAN.VAR.CAN_2_MESSAGE_4_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_BASE.VALUE=0xFFF7E000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_59_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_30_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_30_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_22_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_22_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_14_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_14_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_9_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_9_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_61_INT_ENA_REF.VALUE=0x00000001 -DRIVER.CAN.VAR.CAN_1_MESSAGE_53_INT_ENA_REF.VALUE=0x00000001 -DRIVER.CAN.VAR.CAN_1_MESSAGE_45_INT_ENA_REF.VALUE=0x00000001 -DRIVER.CAN.VAR.CAN_1_MESSAGE_37_INT_ENA_REF.VALUE=0x00000001 -DRIVER.CAN.VAR.CAN_1_MESSAGE_29_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_50_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_42_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_34_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_26_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_18_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_5_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_10_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_1_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_PORT_TX_PULDIS.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_64_INT_ENA.VALUE=0x00000400 -DRIVER.CAN.VAR.CAN_1_MESSAGE_56_INT_ENA.VALUE=0x00000400 -DRIVER.CAN.VAR.CAN_1_MESSAGE_48_INT_ENA.VALUE=0x00000400 -DRIVER.CAN.VAR.CAN_1_MESSAGE_20_MASK.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_12_MASK.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_2_ENA.VALUE=0x80000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_64_ID.VALUE=64 -DRIVER.CAN.VAR.CAN_2_MESSAGE_62_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_56_ID.VALUE=56 -DRIVER.CAN.VAR.CAN_2_MESSAGE_54_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_48_ID.VALUE=48 -DRIVER.CAN.VAR.CAN_2_MESSAGE_46_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_38_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_PORT_TX_DOUT.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_57_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_49_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_51_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_43_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_35_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_27_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_19_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_PORT_RX_FUN.VALUE=1 -DRIVER.CAN.VAR.CAN_4_MESSAGE_5_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_5_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_64_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_56_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_48_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_10_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_10_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_2_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_2_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_58_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_8_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_7_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_21_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_20_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_13_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_12_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_TQ.VALUE=100.000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_60_BOOL_ENA.VALUE=1 -DRIVER.CAN.VAR.CAN_1_MESSAGE_52_BOOL_ENA.VALUE=1 -DRIVER.CAN.VAR.CAN_1_MESSAGE_44_BOOL_ENA.VALUE=1 -DRIVER.CAN.VAR.CAN_1_MESSAGE_36_BOOL_ENA.VALUE=1 -DRIVER.CAN.VAR.CAN_1_MESSAGE_28_BOOL_ENA.VALUE=1 -DRIVER.CAN.VAR.CAN_1_MESSAGE_5_MASK.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_4_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_62_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_54_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_46_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_40_ID.VALUE=40 -DRIVER.CAN.VAR.CAN_4_MESSAGE_38_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_32_ID.VALUE=32 -DRIVER.CAN.VAR.CAN_4_MESSAGE_24_ID.VALUE=24 -DRIVER.CAN.VAR.CAN_4_MESSAGE_16_ID.VALUE=16 -DRIVER.CAN.VAR.CAN_3_MESSAGE_64_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_56_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_48_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_8_ID.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_40_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_32_INT_LEVEL.VALUE=0x00000001 -DRIVER.CAN.VAR.CAN_1_MESSAGE_24_INT_LEVEL.VALUE=0x01000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_16_INT_LEVEL.VALUE=0x00010000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_10_ID.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_31_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_23_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_15_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_61_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_53_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_45_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_37_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_29_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_63_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_57_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_55_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_49_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_47_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_39_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_30_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_22_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_14_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_9_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_3_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_51_ENA.VALUE=0x80000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_43_ENA.VALUE=0x80000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_41_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_35_ENA.VALUE=0x80000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_33_INT_ENA.VALUE=0x00000400 -DRIVER.CAN.VAR.CAN_1_MESSAGE_27_ENA.VALUE=0x80000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_25_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_19_ENA.VALUE=0x80000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_17_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_60_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_52_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_44_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_36_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_28_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_7_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_40_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_32_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_24_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_16_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_PORT_TX_PSL.VALUE=1 -DRIVER.CAN.VAR.CAN_2_MESSAGE_57_ID.VALUE=57 -DRIVER.CAN.VAR.CAN_2_MESSAGE_49_ID.VALUE=49 -DRIVER.CAN.VAR.CAN_1_MESSAGE_30_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_22_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_14_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_4_INT_LEVEL.VALUE=0x00000010 -DRIVER.CAN.VAR.CAN_4_MESSAGE_6_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_11_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_3_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_SAMPLE_POINT_REFERENCE.VALUE=87 -DRIVER.CAN.VAR.CAN_1_PROPAGATION_DELAY.VALUE=125 -DRIVER.CAN.VAR.CAN_4_MESSAGE_64_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_57_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_57_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_56_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_49_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_49_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_48_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_51_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_51_DIR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_50_INT_ENA_REF.VALUE=0x00000001 -DRIVER.CAN.VAR.CAN_1_MESSAGE_43_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_43_DIR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_42_INT_ENA_REF.VALUE=0x00000001 -DRIVER.CAN.VAR.CAN_1_MESSAGE_35_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_35_DIR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_34_INT_ENA_REF.VALUE=0x00000001 -DRIVER.CAN.VAR.CAN_1_MESSAGE_27_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_27_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_26_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_19_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_19_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_18_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_3_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_TQ.VALUE=100.000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_1_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_31_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_23_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_15_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_PORT_RX_PDR.VALUE=1 -DRIVER.CAN.VAR.CAN_4_MESSAGE_41_ID.VALUE=41 -DRIVER.CAN.VAR.CAN_4_MESSAGE_33_ID.VALUE=33 -DRIVER.CAN.VAR.CAN_4_MESSAGE_25_ID.VALUE=25 -DRIVER.CAN.VAR.CAN_4_MESSAGE_17_ID.VALUE=17 -DRIVER.CAN.VAR.CAN_3_MESSAGE_9_ID.VALUE=9 -DRIVER.CAN.VAR.CAN_2_MESSAGE_10_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_10_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_5_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_1_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_11_ID.VALUE=0 -DRIVER.CAN.VAR.CAN_1_NOMINAL_BIT_TIME.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_61_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_53_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_45_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_37_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_29_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_31_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_31_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_23_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_23_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_15_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_15_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_PORT_RX_FUN.VALUE=1 -DRIVER.CAN.VAR.CAN_4_MESSAGE_40_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_32_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_24_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_16_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_6_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_57_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_49_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_11_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_8_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_ENABLE.VALUE=1 -DRIVER.CAN.VAR.CAN_2_MESSAGE_59_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_10_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_3_ENA.VALUE=0x80000000 -DRIVER.CAN.VAR.CAN_1_PIN_MODE.VALUE=1 -DRIVER.CAN.VAR.CAN_4_MESSAGE_10_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_1_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_58_ID.VALUE=58 -DRIVER.CAN.VAR.CAN_4_MESSAGE_58_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_SAMPLE_POINT_REFERENCE.VALUE=75 -DRIVER.CAN.VAR.CAN_1_MESSAGE_60_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_52_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_44_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_36_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_28_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_6_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_6_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_11_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_11_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_50_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_42_INT_ENA_REF.VALUE=0x00000001 -DRIVER.CAN.VAR.CAN_2_MESSAGE_34_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_26_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_18_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_3_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_3_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_51_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_43_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_35_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_27_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_19_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_61_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_53_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_45_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_37_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_29_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_PORT_RX_PULDIS.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_62_MASK.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_54_MASK.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_46_MASK.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_38_MASK.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_21_BOOL_ENA.VALUE=1 -DRIVER.CAN.VAR.CAN_1_MESSAGE_13_BOOL_ENA.VALUE=1 -DRIVER.CAN.VAR.CAN_4_MESSAGE_50_ID.VALUE=50 -DRIVER.CAN.VAR.CAN_4_MESSAGE_42_ID.VALUE=42 -DRIVER.CAN.VAR.CAN_4_MESSAGE_34_ID.VALUE=34 -DRIVER.CAN.VAR.CAN_4_MESSAGE_26_ID.VALUE=26 -DRIVER.CAN.VAR.CAN_4_MESSAGE_18_ID.VALUE=18 -DRIVER.CAN.VAR.CAN_3_MESSAGE_57_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_49_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_59_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_20_ID.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_12_ID.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_40_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_32_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_24_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_16_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_61_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_53_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_45_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_37_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_29_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_AUTO_BUS_ON.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_31_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_23_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_15_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_58_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_63_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_55_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_47_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_39_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_1_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_2_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_60_ENA.VALUE=0x80000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_52_ENA.VALUE=0x80000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_44_ENA.VALUE=0x80000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_36_ENA.VALUE=0x80000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_28_ENA.VALUE=0x80000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_61_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_59_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_53_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_45_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_37_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_29_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_59_ID.VALUE=59 -DRIVER.CAN.VAR.CAN_1_PORT_RX_PDR.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_61_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_53_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_45_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_37_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_31_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_29_INT_LEVEL.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_23_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_15_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_7_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_20_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_12_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_SAMPLE_POINT_REFERENCE.VALUE=75 -DRIVER.CAN.VAR.CAN_1_MESSAGE_4_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_58_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_58_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_50_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_42_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_34_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_26_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_18_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_60_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_60_DIR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_52_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_52_DIR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_44_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_44_DIR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_36_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_36_DIR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_28_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_28_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_8_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_SHIFT.VALUE=18 -DRIVER.CAN.VAR.CAN_2_MESSAGE_64_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_56_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_50_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_48_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_42_MASK.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_40_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_34_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_32_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_30_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_26_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_24_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_22_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_18_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_16_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_14_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_9_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_BRPE.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_51_ID.VALUE=51 -DRIVER.CAN.VAR.CAN_4_MESSAGE_43_ID.VALUE=43 -DRIVER.CAN.VAR.CAN_4_MESSAGE_35_ID.VALUE=35 -DRIVER.CAN.VAR.CAN_4_MESSAGE_27_ID.VALUE=27 -DRIVER.CAN.VAR.CAN_4_MESSAGE_19_ID.VALUE=19 -DRIVER.CAN.VAR.CAN_3_MESSAGE_61_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_53_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_45_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_37_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_29_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_11_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_6_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_21_ID.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_13_ID.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_9_INT_LEVEL.VALUE=0x00000200 -DRIVER.CAN.VAR.CAN_4_BASE.VALUE=0xFFF7E200 -DRIVER.CAN.VAR.CAN_2_MESSAGE_40_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_40_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_32_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_32_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_31_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_24_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_24_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_23_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_16_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_16_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_15_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_8_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_51_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_43_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_35_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_27_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_19_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_7_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_57_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_50_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_49_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_42_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_34_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_26_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_20_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_18_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_12_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_21_MASK.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_13_MASK.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_4_ENA.VALUE=0x80000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_2_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_31_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_23_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_15_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_6_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_59_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_SAMPLE_POINT_REFERENCE.VALUE=75 -DRIVER.CAN.VAR.CAN_1_MESSAGE_61_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_53_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_45_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_37_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_29_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_BRPE_FREQ.VALUE=4.000 -DRIVER.CAN.VAR.CAN_1_BRP_FREQ.VALUE=4.000 -DRIVER.CAN.VAR.CAN_4_PORT_TX_DIN.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_50_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_42_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_34_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_26_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_18_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_7_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_7_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_20_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_20_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_12_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_12_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_8_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_20_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_12_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_4_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_4_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_20_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_12_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_9_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_30_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_22_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_14_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_4_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_2_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_6_MASK.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_PORT_RX_PSL.VALUE=1 -DRIVER.CAN.VAR.CAN_4_MESSAGE_60_ID.VALUE=60 -DRIVER.CAN.VAR.CAN_4_MESSAGE_52_ID.VALUE=52 -DRIVER.CAN.VAR.CAN_4_MESSAGE_44_ID.VALUE=44 -DRIVER.CAN.VAR.CAN_4_MESSAGE_36_ID.VALUE=36 -DRIVER.CAN.VAR.CAN_4_MESSAGE_31_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_28_ID.VALUE=28 -DRIVER.CAN.VAR.CAN_4_MESSAGE_23_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_15_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_58_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_3_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_30_ID.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_22_ID.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_14_ID.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_41_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_33_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_25_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_17_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_PORT_TX_DIR.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_8_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_31_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_23_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_15_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_5_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_59_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_50_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_42_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_34_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_26_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_18_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_4_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_63_BOOL_ENA.VALUE=1 -DRIVER.CAN.VAR.CAN_1_MESSAGE_61_ENA.VALUE=0x80000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_55_BOOL_ENA.VALUE=1 -DRIVER.CAN.VAR.CAN_1_MESSAGE_53_ENA.VALUE=0x80000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_47_BOOL_ENA.VALUE=1 -DRIVER.CAN.VAR.CAN_1_MESSAGE_45_ENA.VALUE=0x80000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_39_BOOL_ENA.VALUE=1 -DRIVER.CAN.VAR.CAN_1_MESSAGE_37_ENA.VALUE=0x80000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_29_ENA.VALUE=0x80000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_62_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_54_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_46_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_38_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_1_ID.VALUE=1 -DRIVER.CAN.VAR.CAN_1_MESSAGE_40_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_32_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_24_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_16_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_8_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_21_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_13_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_5_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_59_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_59_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_20_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_12_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_5_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_61_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_61_DIR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_53_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_53_DIR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_45_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_45_DIR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_37_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_37_DIR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_29_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_29_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_10_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_2_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_BAUDRATE.VALUE=1000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_41_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_41_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_33_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_33_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_25_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_25_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_17_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_17_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_63_INT_ENA.VALUE=0x00000400 -DRIVER.CAN.VAR.CAN_1_MESSAGE_55_INT_ENA.VALUE=0x00000400 -DRIVER.CAN.VAR.CAN_1_MESSAGE_47_INT_ENA.VALUE=0x00000400 -DRIVER.CAN.VAR.CAN_1_MESSAGE_39_INT_ENA.VALUE=0x00000400 -DRIVER.CAN.VAR.CAN_4_MESSAGE_61_ID.VALUE=61 -DRIVER.CAN.VAR.CAN_4_MESSAGE_53_ID.VALUE=53 -DRIVER.CAN.VAR.CAN_4_MESSAGE_45_ID.VALUE=45 -DRIVER.CAN.VAR.CAN_4_MESSAGE_37_ID.VALUE=37 -DRIVER.CAN.VAR.CAN_4_MESSAGE_29_ID.VALUE=29 -DRIVER.CAN.VAR.CAN_2_MESSAGE_20_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_12_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_7_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_58_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_31_ID.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_23_ID.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_15_ID.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_1_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_31_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_23_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_15_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_5_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_41_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_41_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_33_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_33_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_25_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_25_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_17_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_17_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_PORT_TX_DIN.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_8_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_6_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_6_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_21_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_13_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_11_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_11_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_5_ENA.VALUE=0x80000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_3_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_3_BOOL_ENA.VALUE=1 -DRIVER.CAN.VAR.CAN_4_MESSAGE_3_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_2_ID.VALUE=2 -DRIVER.CAN.VAR.CAN_3_MESSAGE_58_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_PORT_RX_PSL.VALUE=1 -DRIVER.CAN.VAR.CAN_4_AUTO_BUS_ON_TIME.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_62_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_54_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_46_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_38_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_8_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_8_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_5_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_AUTO_RETRANSMISSION.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_21_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_21_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_20_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_13_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_13_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_12_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_SAMPLE_POINT.VALUE=90.000 -DRIVER.CAN.VAR.CAN_1_PORT_TX_DIR.VALUE=1 -DRIVER.CAN.VAR.CAN_1_MESSAGE_5_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_5_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_2_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_62_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_54_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_46_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_38_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_PIN_MODE.VALUE=1 -DRIVER.CAN.VAR.CAN_3_MESSAGE_1_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_RAM_PARITY_ENA.VALUE=0x0000000A -DRIVER.CAN.VAR.CAN_3_PHASE_SEG.VALUE=1 -DRIVER.CAN.VAR.CAN_1_MESSAGE_63_MASK.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_55_MASK.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_47_MASK.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_40_INT_ENA.VALUE=0x00000400 -DRIVER.CAN.VAR.CAN_1_MESSAGE_39_MASK.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_32_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_24_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_16_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_62_ID.VALUE=62 -DRIVER.CAN.VAR.CAN_4_MESSAGE_54_ID.VALUE=54 -DRIVER.CAN.VAR.CAN_4_MESSAGE_46_ID.VALUE=46 -DRIVER.CAN.VAR.CAN_4_MESSAGE_38_ID.VALUE=38 -DRIVER.CAN.VAR.CAN_3_MESSAGE_59_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_60_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_52_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_44_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_36_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_28_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_40_ID.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_32_ID.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_24_ID.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_16_ID.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_50_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_42_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_34_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_26_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_18_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_1_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_1_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_2_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_62_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_54_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_46_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_38_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_64_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_56_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_48_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_59_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_62_ENA.VALUE=0x80000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_54_ENA.VALUE=0x80000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_46_ENA.VALUE=0x80000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_40_BOOL_ENA.VALUE=1 -DRIVER.CAN.VAR.CAN_1_MESSAGE_38_ENA.VALUE=0x80000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_32_BOOL_ENA.VALUE=1 -DRIVER.CAN.VAR.CAN_1_MESSAGE_24_BOOL_ENA.VALUE=1 -DRIVER.CAN.VAR.CAN_1_MESSAGE_16_BOOL_ENA.VALUE=1 -DRIVER.CAN.VAR.CAN_4_MESSAGE_63_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_60_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_55_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_52_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_47_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_44_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_39_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_36_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_28_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_3_ID.VALUE=3 -DRIVER.CAN.VAR.CAN_3_PORT_RX_DOUT.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_8_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_41_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_33_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_30_INT_LEVEL.VALUE=0x40000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_25_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_22_INT_LEVEL.VALUE=0x00400000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_17_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_14_INT_LEVEL.VALUE=0x00004000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_9_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_30_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_22_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_14_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_6_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_20_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_12_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_2_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_PORT_RX_PULL.VALUE=2 -DRIVER.CAN.VAR.CAN_1_MESSAGE_62_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_62_DIR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_54_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_54_DIR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_46_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_46_DIR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_38_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_38_DIR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_31_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_23_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_15_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_7_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_BRPE.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_51_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_50_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_43_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_42_ENA.VALUE=0x80000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_35_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_34_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_27_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_26_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_19_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_18_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_10_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_5_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MASK.VALUE=0x1FFFFFFF -DRIVER.CAN.VAR.CAN_4_MESSAGE_63_ID.VALUE=63 -DRIVER.CAN.VAR.CAN_4_MESSAGE_55_ID.VALUE=55 -DRIVER.CAN.VAR.CAN_4_MESSAGE_47_ID.VALUE=47 -DRIVER.CAN.VAR.CAN_4_MESSAGE_39_ID.VALUE=39 -DRIVER.CAN.VAR.CAN_4_MESSAGE_5_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_30_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_22_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_14_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_21_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_13_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_8_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_41_ID.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_33_ID.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_25_ID.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_17_ID.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_2_INT_LEVEL.VALUE=0x00000004 -DRIVER.CAN.VAR.CAN_4_MESSAGE_10_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_2_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_2_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_50_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_50_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_42_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_42_DIR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_34_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_34_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_26_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_26_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_18_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_18_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_60_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_52_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_44_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_36_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_28_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_9_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_30_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_22_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_14_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_60_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_59_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_52_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_44_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_36_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_28_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_30_MASK.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_22_MASK.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_14_MASK.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_6_ENA.VALUE=0x80000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_4_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_4_ID.VALUE=4 -DRIVER.CAN.VAR.CAN_1_MESSAGE_1_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_1_ID.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_63_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_55_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_47_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_39_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_PORT_TX_FUN.VALUE=1 -DRIVER.CAN.VAR.CAN_4_MESSAGE_9_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_9_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_30_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_30_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_22_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_22_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_14_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_14_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_6_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_6_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_10_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_PORT_TX_PULDIS.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_61_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_53_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_45_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_37_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_31_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_29_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_23_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_15_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_2_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_7_MASK.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_64_ID.VALUE=64 -DRIVER.CAN.VAR.CAN_4_MESSAGE_56_ID.VALUE=56 -DRIVER.CAN.VAR.CAN_4_MESSAGE_48_ID.VALUE=48 -DRIVER.CAN.VAR.CAN_1_MESSAGE_50_ID.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_42_ID.VALUE=42 -DRIVER.CAN.VAR.CAN_1_MESSAGE_34_ID.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_26_ID.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_18_ID.VALUE=0 -DRIVER.CAN.VAR.CAN_4_BRP_FREQ.VALUE=10.000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_51_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_43_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_35_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_27_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_19_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_PORT_TX_PULL.VALUE=2 -DRIVER.CAN.VAR.CAN_4_MESSAGE_10_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_10_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_2_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_2_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_BRP.VALUE=24 -DRIVER.CAN.VAR.CAN_4_MESSAGE_31_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_23_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_15_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_7_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_PROP_SEG.VALUE=7 -DRIVER.CAN.VAR.CAN_2_MESSAGE_21_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_13_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_10_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_8_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_5_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_63_ENA.VALUE=0x80000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_55_ENA.VALUE=0x80000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_47_ENA.VALUE=0x80000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_39_ENA.VALUE=0x80000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_64_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_56_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_48_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_5_ID.VALUE=5 -DRIVER.CAN.VAR.CAN_3_MESSAGE_10_ID.VALUE=10 -DRIVER.CAN.VAR.CAN_2_MESSAGE_57_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_49_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_50_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_42_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_34_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_26_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_18_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_2_ID.VALUE=0 -DRIVER.CAN.VAR.CAN_1_AUTO_BUS_ON_TR.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_31_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_23_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_15_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_7_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_PORT_RX_DIN.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_63_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_63_DIR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_55_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_55_DIR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_47_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_47_DIR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_39_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_39_DIR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_11_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_64_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_56_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_48_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_3_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_51_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_43_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_35_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_27_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_19_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_58_BOOL_ENA.VALUE=1 -DRIVER.CAN.VAR.CAN_4_PORT_TX_PDR.VALUE=1 -DRIVER.CAN.VAR.CAN_4_MESSAGE_57_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_57_ID.VALUE=57 -DRIVER.CAN.VAR.CAN_4_MESSAGE_49_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_49_ID.VALUE=49 -DRIVER.CAN.VAR.CAN_2_MESSAGE_30_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_22_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_14_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_9_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_51_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_51_ID.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_43_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_43_ID.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_35_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_35_ID.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_27_INT_LEVEL.VALUE=0x08000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_27_ID.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_19_INT_LEVEL.VALUE=0x00080000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_19_ID.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_11_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_3_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_AUTO_BUS_ON_TIME.VALUE=0 -DRIVER.CAN.VAR.CAN_3_PORT_RX_DIR.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_51_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_51_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_43_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_43_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_35_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_35_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_27_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_27_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_19_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_19_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_PORT_TX_FUN.VALUE=1 -DRIVER.CAN.VAR.CAN_1_MESSAGE_58_INT_ENA_REF.VALUE=0x00000001 -DRIVER.CAN.VAR.CAN_4_MESSAGE_1_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_31_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_23_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_15_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_60_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_52_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_44_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_36_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_28_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_1_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_7_ENA.VALUE=0x80000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_6_ID.VALUE=6 -DRIVER.CAN.VAR.CAN_4_MESSAGE_5_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_51_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_43_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_35_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_27_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_19_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_11_ID.VALUE=11 -DRIVER.CAN.VAR.CAN_3_MESSAGE_10_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_7_INT_LEVEL.VALUE=0x00000080 -DRIVER.CAN.VAR.CAN_1_MESSAGE_3_ID.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_2_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_64_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_56_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_48_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_31_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_31_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_23_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_23_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_15_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_15_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_7_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_7_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_11_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_9_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_41_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_33_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_30_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_25_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_22_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_17_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_14_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_3_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_64_MASK.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_56_MASK.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_48_MASK.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_9_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_6_BOOL_ENA.VALUE=1 -DRIVER.CAN.VAR.CAN_4_MESSAGE_58_ID.VALUE=58 -DRIVER.CAN.VAR.CAN_2_MESSAGE_21_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_13_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_4_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_60_ID.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_52_ID.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_44_ID.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_36_ID.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_28_ID.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_60_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_52_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_44_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_36_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_28_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_11_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_11_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_3_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_3_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_58_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_BRP.VALUE=9 -DRIVER.CAN.VAR.CAN_3_MESSAGE_57_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_49_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_PORT_RX_PULDIS.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_64_ENA.VALUE=0x80000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_62_INT_ENA.VALUE=0x00000400 -DRIVER.CAN.VAR.CAN_1_MESSAGE_56_ENA.VALUE=0x80000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_54_INT_ENA.VALUE=0x00000400 -DRIVER.CAN.VAR.CAN_1_MESSAGE_48_ENA.VALUE=0x80000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_46_INT_ENA.VALUE=0x00000400 -DRIVER.CAN.VAR.CAN_1_MESSAGE_38_INT_ENA.VALUE=0x00000400 -DRIVER.CAN.VAR.CAN_4_MESSAGE_57_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_49_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_21_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_13_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_7_ID.VALUE=7 -DRIVER.CAN.VAR.CAN_3_MESSAGE_20_ID.VALUE=20 -DRIVER.CAN.VAR.CAN_3_MESSAGE_12_ID.VALUE=12 -DRIVER.CAN.VAR.CAN_3_MESSAGE_1_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_PORT_TX_PDR.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_51_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_43_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_35_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_27_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_19_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_4_ID.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_40_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_32_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_24_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_16_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_8_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_NOMINAL_AUTO_BUS_ON_TIME.VALUE=0.000 -DRIVER.CAN.VAR.CAN_2_SHIFT.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_64_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_64_DIR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_63_INT_ENA_REF.VALUE=0x00000001 -DRIVER.CAN.VAR.CAN_1_MESSAGE_56_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_56_DIR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_55_INT_ENA_REF.VALUE=0x00000001 -DRIVER.CAN.VAR.CAN_1_MESSAGE_48_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_48_DIR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_47_INT_ENA_REF.VALUE=0x00000001 -DRIVER.CAN.VAR.CAN_1_MESSAGE_39_INT_ENA_REF.VALUE=0x00000001 -DRIVER.CAN.VAR.CAN_4_MESSAGE_57_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_49_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_5_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_BRPE.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_10_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MASK.VALUE=0x1FFFFFFF -DRIVER.CAN.VAR.CAN_2_MESSAGE_60_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_60_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_52_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_52_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_44_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_44_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_36_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_36_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_28_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_28_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_51_BOOL_ENA.VALUE=1 -DRIVER.CAN.VAR.CAN_1_MESSAGE_43_BOOL_ENA.VALUE=1 -DRIVER.CAN.VAR.CAN_1_MESSAGE_35_BOOL_ENA.VALUE=1 -DRIVER.CAN.VAR.CAN_1_MESSAGE_27_BOOL_ENA.VALUE=1 -DRIVER.CAN.VAR.CAN_1_MESSAGE_19_BOOL_ENA.VALUE=1 -DRIVER.CAN.VAR.CAN_1_MESSAGE_2_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_59_ID.VALUE=59 -DRIVER.CAN.VAR.CAN_2_PORT_TX_DOUT.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_31_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_23_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_15_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_61_ID.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_53_ID.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_45_ID.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_37_ID.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_29_ID.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_20_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_12_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_4_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_58_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_60_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_60_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_52_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_52_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_44_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_44_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_36_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_36_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_28_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_28_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_PORT_TX_PULL.VALUE=2 -DRIVER.CAN.VAR.CAN_4_MESSAGE_61_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_61_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_53_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_53_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_45_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_45_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_37_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_37_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_29_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_29_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_40_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_32_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_24_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_16_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_21_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_13_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_8_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_31_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_31_MASK.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_23_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_23_MASK.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_15_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_15_MASK.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_8_ENA.VALUE=0x80000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_8_ID.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_6_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_21_ID.VALUE=21 -DRIVER.CAN.VAR.CAN_3_MESSAGE_13_ID.VALUE=13 -DRIVER.CAN.VAR.CAN_3_MESSAGE_11_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_64_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_56_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_48_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_5_ID.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_3_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_57_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_49_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_40_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_40_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_32_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_32_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_24_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_24_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_16_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_16_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_63_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_55_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_47_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_39_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_8_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_8_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_20_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_12_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_2_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_40_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_32_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_24_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_16_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_4_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_58_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_8_MASK.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_PORT_TX_PSL.VALUE=1 -DRIVER.CAN.VAR.CAN_3_MESSAGE_64_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_56_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_48_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_62_ID.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_54_ID.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_46_ID.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_38_ID.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_61_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_53_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_45_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_37_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_29_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_58_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_20_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_20_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_12_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_12_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_4_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_4_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_BRP.VALUE=9 -DRIVER.CAN.VAR.CAN_1_MESSAGE_60_INT_ENA_REF.VALUE=0x00000001 -DRIVER.CAN.VAR.CAN_1_MESSAGE_52_INT_ENA_REF.VALUE=0x00000001 -DRIVER.CAN.VAR.CAN_1_MESSAGE_44_INT_ENA_REF.VALUE=0x00000001 -DRIVER.CAN.VAR.CAN_1_MESSAGE_36_INT_ENA_REF.VALUE=0x00000001 -DRIVER.CAN.VAR.CAN_1_MESSAGE_28_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_30_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_22_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_14_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_64_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_56_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_48_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_6_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_IDENTIFIER_MODE.VALUE=0x40000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_11_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_6_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_57_ENA.VALUE=0x80000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_49_ENA.VALUE=0x80000000 -DRIVER.CAN.VAR.CAN_1_PHASE_SEG.VALUE=3 -DRIVER.CAN.VAR.CAN_4_MESSAGE_58_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_9_ID.VALUE=9 -DRIVER.CAN.VAR.CAN_3_MESSAGE_30_ID.VALUE=30 -DRIVER.CAN.VAR.CAN_3_MESSAGE_22_ID.VALUE=22 -DRIVER.CAN.VAR.CAN_3_MESSAGE_14_ID.VALUE=14 -DRIVER.CAN.VAR.CAN_2_MESSAGE_50_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_42_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_34_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_26_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_18_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_9_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_60_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_52_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_44_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_36_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_28_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_6_ID.VALUE=0 -DRIVER.CAN.VAR.CAN_4_BRPE_FREQ.VALUE=10.000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_41_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_33_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_25_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_17_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_AUTO_BUS_ON_TIME.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_9_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_PORT_RX_FUN.VALUE=1 -DRIVER.CAN.VAR.CAN_3_MESSAGE_63_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_55_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_47_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_39_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_57_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_57_DIR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_49_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_49_DIR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_50_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_42_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_34_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_26_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_20_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_18_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_12_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_4_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_61_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_53_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_51_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_45_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_43_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_37_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_35_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_29_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_27_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_19_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_20_BOOL_ENA.VALUE=1 -DRIVER.CAN.VAR.CAN_1_MESSAGE_12_BOOL_ENA.VALUE=1 -DRIVER.CAN.VAR.CAN_4_MESSAGE_50_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_42_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_34_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_26_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_18_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_6_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_40_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_32_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_24_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_16_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_63_ID.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_55_ID.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_47_ID.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_39_ID.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_20_INT_LEVEL.VALUE=0x00100000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_12_INT_LEVEL.VALUE=0x00001000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_21_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_13_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_5_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_61_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_61_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_60_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_53_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_53_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_52_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_45_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_45_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_44_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_37_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_37_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_36_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_29_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_29_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_28_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_2_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_41_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_33_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_25_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_17_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_1_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_9_ENA.VALUE=0x80000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_7_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_3_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_31_ID.VALUE=31 -DRIVER.CAN.VAR.CAN_3_MESSAGE_23_ID.VALUE=23 -DRIVER.CAN.VAR.CAN_3_MESSAGE_20_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_20_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_15_ID.VALUE=15 -DRIVER.CAN.VAR.CAN_3_MESSAGE_12_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_12_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_PORT_TX_PSL.VALUE=1 -DRIVER.CAN.VAR.CAN_1_MESSAGE_7_ID.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_4_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_58_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_63_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_55_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_47_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_39_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_41_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_41_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_33_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_33_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_25_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_25_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_17_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_17_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_41_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_33_INT_ENA_REF.VALUE=0x00000001 -DRIVER.CAN.VAR.CAN_1_MESSAGE_25_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_17_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_9_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_9_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_21_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_13_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_5_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_63_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_55_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_47_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_39_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_20_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_12_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_7_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_57_MASK.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_49_MASK.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_PORT_RX_PDR.VALUE=1 -DRIVER.CAN.VAR.CAN_1_MESSAGE_64_ID.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_56_ID.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_48_ID.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_62_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_54_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_46_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_38_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_21_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_21_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_13_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_13_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_BRP.VALUE=9 -DRIVER.CAN.VAR.CAN_3_MESSAGE_60_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_52_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_44_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_36_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_28_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_5_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_5_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_RAM_PARITY_ENA.VALUE=0x0000000A -DRIVER.CAN.VAR.CAN_3_MESSAGE_63_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_58_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_55_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_47_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_41_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_39_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_33_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_25_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_17_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_58_ENA.VALUE=0x80000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_9_BOOL_ENA.VALUE=1 -DRIVER.CAN.VAR.CAN_4_MESSAGE_59_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_40_ID.VALUE=40 -DRIVER.CAN.VAR.CAN_3_MESSAGE_32_ID.VALUE=32 -DRIVER.CAN.VAR.CAN_3_MESSAGE_24_ID.VALUE=24 -DRIVER.CAN.VAR.CAN_3_MESSAGE_16_ID.VALUE=16 -DRIVER.CAN.VAR.CAN_1_MESSAGE_61_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_53_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_45_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_37_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_29_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_8_ID.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_50_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_42_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_34_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_26_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_18_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_NOMINAL_AUTO_BUS_ON_TIME.VALUE=0.000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_41_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_33_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_25_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_17_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_58_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_58_DIR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_AUTO_RETRANSMISSION.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_11_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MASK.VALUE=0x1FFFFFFF -DRIVER.CAN.VAR.CAN_3_MESSAGE_3_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_62_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_61_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_54_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_53_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_46_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_45_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_38_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_37_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_29_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_63_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_55_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_47_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_41_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_39_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_33_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_25_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_17_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_57_ID.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_49_ID.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_30_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_22_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_14_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_6_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_60_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_52_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_44_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_36_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_28_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_62_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_62_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_54_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_54_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_46_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_46_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_38_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_38_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_AUTO_BUS_ON.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_30_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_22_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_14_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_62_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_54_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_46_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_38_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_50_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_42_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_40_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_34_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_32_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_26_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_24_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_18_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_16_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_62_BOOL_ENA.VALUE=1 -DRIVER.CAN.VAR.CAN_1_MESSAGE_54_BOOL_ENA.VALUE=1 -DRIVER.CAN.VAR.CAN_1_MESSAGE_46_BOOL_ENA.VALUE=1 -DRIVER.CAN.VAR.CAN_1_MESSAGE_40_MASK.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_38_BOOL_ENA.VALUE=1 -DRIVER.CAN.VAR.CAN_1_MESSAGE_32_MASK.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_24_MASK.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_16_MASK.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_8_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_63_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_55_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_47_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_39_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_8_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_41_ID.VALUE=41 -DRIVER.CAN.VAR.CAN_3_MESSAGE_33_ID.VALUE=33 -DRIVER.CAN.VAR.CAN_3_MESSAGE_25_ID.VALUE=25 -DRIVER.CAN.VAR.CAN_3_MESSAGE_21_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_17_ID.VALUE=17 -DRIVER.CAN.VAR.CAN_3_MESSAGE_13_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_41_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_33_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_25_INT_LEVEL.VALUE=0x02000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_17_INT_LEVEL.VALUE=0x00020000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_9_ID.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_5_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_59_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_SJW.VALUE=3 -DRIVER.CAN.VAR.CAN_3_MESSAGE_50_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_50_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_42_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_42_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_41_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_34_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_34_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_33_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_26_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_26_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_25_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_18_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_18_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_17_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_7_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_59_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_30_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_22_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_14_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_41_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_33_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_25_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_17_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_6_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_40_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_32_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_24_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_16_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_BAUDRATE.VALUE=1000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_61_INT_ENA.VALUE=0x00000400 -DRIVER.CAN.VAR.CAN_1_MESSAGE_53_INT_ENA.VALUE=0x00000400 -DRIVER.CAN.VAR.CAN_1_MESSAGE_45_INT_ENA.VALUE=0x00000400 -DRIVER.CAN.VAR.CAN_1_MESSAGE_37_INT_ENA.VALUE=0x00000400 -DRIVER.CAN.VAR.CAN_1_MESSAGE_29_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_9_MASK.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_IDENTIFIER_MODE.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_8_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_41_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_33_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_25_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_17_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_1_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_58_ID.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_5_INT_LEVEL.VALUE=0x00000020 -DRIVER.CAN.VAR.CAN_4_RAMBASE.VALUE=0xFF180000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_63_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_55_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_47_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_39_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_AUTO_BUS_ON_TIME.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_30_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_30_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_22_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_22_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_14_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_14_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_6_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_6_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_30_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_22_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_14_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_7_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_PORT_TX_PULDIS.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_5_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_4_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_10_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_20_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_12_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_7_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_59_ENA.VALUE=0x80000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_2_BOOL_ENA.VALUE=1 -DRIVER.CAN.VAR.CAN_1_MESSAGE_1_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_50_ID.VALUE=50 -DRIVER.CAN.VAR.CAN_3_MESSAGE_42_ID.VALUE=42 -DRIVER.CAN.VAR.CAN_3_MESSAGE_34_ID.VALUE=34 -DRIVER.CAN.VAR.CAN_3_MESSAGE_26_ID.VALUE=26 -DRIVER.CAN.VAR.CAN_3_MESSAGE_18_ID.VALUE=18 -DRIVER.CAN.VAR.CAN_2_MESSAGE_11_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_2_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_62_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_54_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_46_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_38_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_51_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_43_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_35_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_27_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_19_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_41_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_33_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_25_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_17_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_PORT_TX_DIN.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_7_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_59_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_59_DIR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_11_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_60_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_52_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_44_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_36_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_28_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_21_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_13_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_59_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_5_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_PIN_MODE.VALUE=1 -DRIVER.CAN.VAR.CAN_2_MESSAGE_63_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_55_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_47_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_39_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_30_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_22_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_14_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_11_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_PORT_RX_PSL.VALUE=1 -DRIVER.CAN.VAR.CAN_2_MESSAGE_50_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_42_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_34_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_26_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_18_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_AUTO_BUS_ON_TR.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_59_ID.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_31_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_23_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_15_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_PROPAGATION_DELAY.VALUE=700 -DRIVER.CAN.VAR.CAN_3_MESSAGE_7_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_7_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_SAMPLE_POINT.VALUE=90.000 -DRIVER.CAN.VAR.CAN_3_PORT_TX_DIR.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_30_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_22_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_14_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_63_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_63_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_55_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_55_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_47_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_47_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_39_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_39_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_4_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_61_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_53_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_45_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_37_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_29_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_3_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_ENABLE.VALUE=1 -DRIVER.CAN.VAR.CAN_3_MESSAGE_51_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_43_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_35_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_27_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_19_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_57_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_49_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_31_BOOL_ENA.VALUE=1 -DRIVER.CAN.VAR.CAN_1_MESSAGE_23_BOOL_ENA.VALUE=1 -DRIVER.CAN.VAR.CAN_1_MESSAGE_15_BOOL_ENA.VALUE=1 -DRIVER.CAN.VAR.CAN_4_MESSAGE_9_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_51_ID.VALUE=51 -DRIVER.CAN.VAR.CAN_3_MESSAGE_43_ID.VALUE=43 -DRIVER.CAN.VAR.CAN_3_MESSAGE_35_ID.VALUE=35 -DRIVER.CAN.VAR.CAN_3_MESSAGE_30_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_27_ID.VALUE=27 -DRIVER.CAN.VAR.CAN_3_MESSAGE_22_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_19_ID.VALUE=19 -DRIVER.CAN.VAR.CAN_3_MESSAGE_14_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_6_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_SJW.VALUE=1 -DRIVER.CAN.VAR.CAN_3_MESSAGE_51_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_51_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_43_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_43_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_35_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_35_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_27_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_27_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_19_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_19_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_11_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_4_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_31_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_23_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_21_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_15_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_13_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_7_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_5_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_4_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_58_MASK.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_PORT_RX_DOUT.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_10_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_2_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_62_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_54_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_46_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_38_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_64_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_56_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_48_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_31_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_31_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_30_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_23_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_23_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_22_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_15_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_15_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_14_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_PORT_RX_PULL.VALUE=2 -DRIVER.CAN.VAR.CAN_3_MESSAGE_7_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_7_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_4_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_59_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_58_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_50_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_42_INT_ENA.VALUE=0x00000400 -DRIVER.CAN.VAR.CAN_2_MESSAGE_34_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_26_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_18_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_62_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_60_ID.VALUE=60 -DRIVER.CAN.VAR.CAN_3_MESSAGE_54_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_52_ID.VALUE=52 -DRIVER.CAN.VAR.CAN_3_MESSAGE_46_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_44_ID.VALUE=44 -DRIVER.CAN.VAR.CAN_3_MESSAGE_38_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_36_ID.VALUE=36 -DRIVER.CAN.VAR.CAN_3_MESSAGE_28_ID.VALUE=28 -DRIVER.CAN.VAR.CAN_1_MESSAGE_63_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_55_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_47_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_39_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_60_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_52_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_44_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_36_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_28_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_NOMINAL_AUTO_BUS_ON_TIME.VALUE=0.000 -DRIVER.CAN.VAR.CAN_1_SYNC.VALUE=1 -DRIVER.CAN.VAR.CAN_4_MESSAGE_4_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_11_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_SHIFT.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_1_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_PORT_RX_PULDIS.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_60_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_52_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_44_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_36_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_28_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_64_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_62_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_56_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_54_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_48_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_46_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_38_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_51_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_43_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_40_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_35_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_32_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_27_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_24_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_19_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_16_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_7_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_1_ID.VALUE=1 -DRIVER.CAN.VAR.CAN_4_MESSAGE_40_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_32_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_24_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_16_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_8_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_BRP_FREQ.VALUE=10.000 -DRIVER.CAN.VAR.CAN_2_BRPE_FREQ.VALUE=10.000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_10_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_64_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_64_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_56_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_56_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_48_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_48_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_1_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_63_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_55_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_47_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_39_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_30_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_22_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_14_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_60_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_52_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_44_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_36_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_28_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_6_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_11_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_6_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_PROP_SEG.VALUE=7 -DRIVER.CAN.VAR.CAN_1_MESSAGE_41_MASK.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_33_MASK.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_25_MASK.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_17_MASK.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_40_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_32_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_24_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_16_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_61_ID.VALUE=61 -DRIVER.CAN.VAR.CAN_3_MESSAGE_53_ID.VALUE=53 -DRIVER.CAN.VAR.CAN_3_MESSAGE_45_ID.VALUE=45 -DRIVER.CAN.VAR.CAN_3_MESSAGE_37_ID.VALUE=37 -DRIVER.CAN.VAR.CAN_3_MESSAGE_31_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_29_ID.VALUE=29 -DRIVER.CAN.VAR.CAN_3_MESSAGE_23_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_15_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_4_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_10_INT_LEVEL.VALUE=0x00000400 -DRIVER.CAN.VAR.CAN_1_MESSAGE_7_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_SJW.VALUE=1 -DRIVER.CAN.VAR.CAN_2_MESSAGE_1_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_11_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_60_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_60_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_52_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_52_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_44_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_44_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_36_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_36_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_28_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_28_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_1_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_40_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_32_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_24_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_16_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_62_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_54_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_50_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_46_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_42_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_38_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_34_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_26_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_18_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_8_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_57_BOOL_ENA.VALUE=1 -DRIVER.CAN.VAR.CAN_1_MESSAGE_49_BOOL_ENA.VALUE=1 -DRIVER.CAN.VAR.CAN_1_MESSAGE_10_ENA.VALUE=0x80000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_11_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_1_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_10_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_3_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_2_ID.VALUE=2 -DRIVER.CAN.VAR.CAN_2_MESSAGE_57_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_49_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_40_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_40_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_32_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_32_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_24_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_24_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_16_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_16_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_1_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_8_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_8_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_10_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_10_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_SAMPLE_POINT.VALUE=62.500 -DRIVER.CAN.VAR.CAN_2_MESSAGE_51_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_43_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_35_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_27_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_21_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_19_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_13_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_8_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_1_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_59_INT_ENA.VALUE=0x00000400 -DRIVER.CAN.VAR.CAN_3_MESSAGE_62_ID.VALUE=62 -DRIVER.CAN.VAR.CAN_3_MESSAGE_54_ID.VALUE=54 -DRIVER.CAN.VAR.CAN_3_MESSAGE_46_ID.VALUE=46 -DRIVER.CAN.VAR.CAN_3_MESSAGE_38_ID.VALUE=38 -DRIVER.CAN.VAR.CAN_1_MESSAGE_64_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_59_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_56_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_48_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_61_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_53_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_45_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_37_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_29_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_PORT_TX_FUN.VALUE=1 -DRIVER.CAN.VAR.CAN_2_MESSAGE_1_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_1_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_30_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_22_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_14_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_8_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_31_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_23_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_21_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_15_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_13_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_6_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_57_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_49_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_7_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_5_BOOL_ENA.VALUE=1 -DRIVER.CAN.VAR.CAN_3_MESSAGE_59_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_60_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_52_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_44_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_36_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_28_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_3_ID.VALUE=3 -DRIVER.CAN.VAR.CAN_1_PORT_RX_DOUT.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_41_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_33_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_25_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_17_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_9_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_11_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_57_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_57_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_49_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_49_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_58_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_4_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_PHASE_SEG.VALUE=1 -DRIVER.CAN.VAR.CAN_3_MESSAGE_61_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_53_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_45_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_37_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_29_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_60_INT_ENA.VALUE=0x00000400 -DRIVER.CAN.VAR.CAN_1_MESSAGE_52_INT_ENA.VALUE=0x00000400 -DRIVER.CAN.VAR.CAN_1_MESSAGE_44_INT_ENA.VALUE=0x00000400 -DRIVER.CAN.VAR.CAN_1_MESSAGE_36_INT_ENA.VALUE=0x00000400 -DRIVER.CAN.VAR.CAN_1_MESSAGE_28_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_1_MASK.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_63_ID.VALUE=63 -DRIVER.CAN.VAR.CAN_3_MESSAGE_55_ID.VALUE=55 -DRIVER.CAN.VAR.CAN_3_MESSAGE_47_ID.VALUE=47 -DRIVER.CAN.VAR.CAN_3_MESSAGE_40_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_39_ID.VALUE=39 -DRIVER.CAN.VAR.CAN_3_MESSAGE_32_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_24_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_16_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_61_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_53_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_45_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_37_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_29_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_8_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_SJW.VALUE=1 -DRIVER.CAN.VAR.CAN_3_RAMBASE.VALUE=0xFF1A0000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_2_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_61_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_61_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_53_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_53_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_45_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_45_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_37_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_37_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_29_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_29_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_PORT_RX_DIN.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_64_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_56_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_48_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_41_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_33_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_25_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_17_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_3_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_9_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_59_MASK.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_50_BOOL_ENA.VALUE=1 -DRIVER.CAN.VAR.CAN_1_MESSAGE_42_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_34_BOOL_ENA.VALUE=1 -DRIVER.CAN.VAR.CAN_1_MESSAGE_26_BOOL_ENA.VALUE=1 -DRIVER.CAN.VAR.CAN_1_MESSAGE_18_BOOL_ENA.VALUE=1 -DRIVER.CAN.VAR.CAN_1_MESSAGE_11_ENA.VALUE=0x80000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_61_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_53_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_45_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_37_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_29_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_20_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_12_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_PORT_TX_PDR.VALUE=1 -DRIVER.CAN.VAR.CAN_3_MESSAGE_9_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_4_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_4_ID.VALUE=4 -DRIVER.CAN.VAR.CAN_1_MESSAGE_31_INT_LEVEL.VALUE=0x80000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_23_INT_LEVEL.VALUE=0x00800000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_15_INT_LEVEL.VALUE=0x00008000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_58_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_41_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_41_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_33_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_33_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_25_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_25_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_17_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_17_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_9_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_9_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_PORT_RX_DIR.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_57_INT_ENA_REF.VALUE=0x00000001 -DRIVER.CAN.VAR.CAN_1_MESSAGE_49_INT_ENA_REF.VALUE=0x00000001 -DRIVER.CAN.VAR.CAN_1_MESSAGE_11_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_11_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_51_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_43_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_35_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_27_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_19_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_20_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_12_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_7_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_2_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_21_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_13_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_6_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_PORT_TX_DOUT.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_64_ID.VALUE=64 -DRIVER.CAN.VAR.CAN_3_MESSAGE_56_ID.VALUE=56 -DRIVER.CAN.VAR.CAN_3_MESSAGE_48_ID.VALUE=48 -DRIVER.CAN.VAR.CAN_3_MESSAGE_31_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_23_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_15_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_57_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_49_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_3_INT_LEVEL.VALUE=0x00000008 -DRIVER.CAN.VAR.CAN_4_NOMINAL_AUTO_BUS_ON_TIME.VALUE=0.000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_62_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_54_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_46_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_38_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_SYNC.VALUE=1 -DRIVER.CAN.VAR.CAN_2_PORT_TX_PULL.VALUE=2 -DRIVER.CAN.VAR.CAN_2_MESSAGE_2_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_2_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_1_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_64_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_63_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_58_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_56_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_55_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_48_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_47_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_39_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_61_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_53_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_45_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_37_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_29_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_10_ID.VALUE=10 -DRIVER.CAN.VAR.CAN_2_MESSAGE_5_ID.VALUE=5 -DRIVER.CAN.VAR.CAN_4_MESSAGE_50_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_42_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_34_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_26_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_18_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_20_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_12_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_58_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_58_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_57_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_49_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_64_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_56_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_48_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_20_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_12_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_63_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_62_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_55_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_54_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_47_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_46_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_39_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_38_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_4_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_50_MASK.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_42_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_34_MASK.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_26_MASK.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_18_MASK.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_57_ID.VALUE=57 -DRIVER.CAN.VAR.CAN_3_MESSAGE_49_ID.VALUE=49 -DRIVER.CAN.VAR.CAN_3_MESSAGE_41_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_33_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_25_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_17_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_9_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_3_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_62_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_62_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_54_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_54_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_46_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_46_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_38_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_38_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_62_INT_ENA_REF.VALUE=0x00000001 -DRIVER.CAN.VAR.CAN_1_MESSAGE_54_INT_ENA_REF.VALUE=0x00000001 -DRIVER.CAN.VAR.CAN_1_MESSAGE_46_INT_ENA_REF.VALUE=0x00000001 -DRIVER.CAN.VAR.CAN_1_MESSAGE_38_INT_ENA_REF.VALUE=0x00000001 -DRIVER.CAN.VAR.CAN_4_MESSAGE_50_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_42_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_41_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_34_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_33_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_26_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_25_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_18_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_17_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_NOMINAL_BIT_RATE.VALUE=1000.000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_51_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_43_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_35_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_27_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_19_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_9_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_41_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_33_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_25_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_17_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_20_ENA.VALUE=0x80000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_12_ENA.VALUE=0x80000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_11_BOOL_ENA.VALUE=1 -DRIVER.CAN.VAR.CAN_4_MESSAGE_21_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_13_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_5_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_58_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_11_ID.VALUE=11 -DRIVER.CAN.VAR.CAN_2_MESSAGE_6_ID.VALUE=6 -DRIVER.CAN.VAR.CAN_3_PROPAGATION_DELAY.VALUE=700 -DRIVER.CAN.VAR.CAN_2_MESSAGE_59_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_50_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_50_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_42_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_42_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_34_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_34_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_26_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_26_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_18_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_18_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_57_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_49_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_AUTO_RETRANSMISSION.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_20_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_20_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_12_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_12_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_30_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_22_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_14_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_9_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_3_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_58_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_58_ID.VALUE=58 -DRIVER.CAN.VAR.CAN_1_MESSAGE_60_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_58_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_52_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_44_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_36_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_28_INT_LEVEL.VALUE=0x10000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_63_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_55_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_47_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_39_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_62_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_54_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_46_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_38_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_3_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_3_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_31_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_23_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_15_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_7_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_62_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_59_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_54_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_46_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_38_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_10_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_5_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_PORT_TX_PSL.VALUE=1 -DRIVER.CAN.VAR.CAN_3_MESSAGE_60_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_52_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_44_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_36_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_28_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_62_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_54_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_46_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_38_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_20_ID.VALUE=20 -DRIVER.CAN.VAR.CAN_2_MESSAGE_12_ID.VALUE=12 -DRIVER.CAN.VAR.CAN_2_MESSAGE_7_ID.VALUE=7 -DRIVER.CAN.VAR.CAN_1_MESSAGE_8_INT_LEVEL.VALUE=0x00000100 -DRIVER.CAN.VAR.CAN_4_MESSAGE_51_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_43_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_35_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_27_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_19_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_21_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_13_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_57_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_49_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_59_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_59_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_51_INT_ENA_REF.VALUE=0x00000001 -DRIVER.CAN.VAR.CAN_1_MESSAGE_43_INT_ENA_REF.VALUE=0x00000001 -DRIVER.CAN.VAR.CAN_1_MESSAGE_35_INT_ENA_REF.VALUE=0x00000001 -DRIVER.CAN.VAR.CAN_1_MESSAGE_27_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_19_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_5_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_63_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_61_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_55_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_53_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_47_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_45_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_40_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_39_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_37_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_32_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_29_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_24_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_16_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_10_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_8_BOOL_ENA.VALUE=1 -DRIVER.CAN.VAR.CAN_1_MESSAGE_2_MASK.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_59_ID.VALUE=59 -DRIVER.CAN.VAR.CAN_3_MESSAGE_50_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_42_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_34_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_26_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_18_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_AUTO_BUS_ON_TR.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_30_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_22_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_14_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_5_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_4_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_63_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_63_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_62_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_55_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_55_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_54_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_47_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_47_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_46_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_39_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_39_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_38_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_PORT_RX_FUN.VALUE=1 -DRIVER.CAN.VAR.CAN_4_MESSAGE_51_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_43_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_35_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_27_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_19_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_10_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_2_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_58_INT_ENA.VALUE=0x00000400 -DRIVER.CAN.VAR.CAN_1_MESSAGE_21_ENA.VALUE=0x80000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_13_ENA.VALUE=0x80000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_30_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_30_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_22_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_22_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_14_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_14_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_6_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_2_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_21_ID.VALUE=21 -DRIVER.CAN.VAR.CAN_2_MESSAGE_13_ID.VALUE=13 -DRIVER.CAN.VAR.CAN_2_MESSAGE_8_ID.VALUE=8 -DRIVER.ADC.VAR.ADC2_GROUP1_DISCHARGE_PRESCALER.VALUE=0 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN21_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN13_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_ACTUAL_DISCHARGE_TIME.VALUE=0.00 -DRIVER.ADC.VAR.ADC2_GROUP1_RESOLUTION.VALUE=12_BIT -DRIVER.ADC.VAR.ADC2_GROUP0_PIN3_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_PARITY_ENABLE.VALUE=0x00000005 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN25_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN17_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_ACTUAL_DISCHARGE_TIME.VALUE=0.00 -DRIVER.ADC.VAR.ADC1_GROUP2_RESOLUTION.VALUE=12_BIT -DRIVER.ADC.VAR.ADC2_GROUP2_PIN7_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN10_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_TRIGGER_EDGE_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_RAM_PARITY_ENA.VALUE=0 -DRIVER.ADC.VAR.ADC2_GROUP1_EXTENDED_SAMPLE_TIME.VALUE=300.00 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN0_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_RAM_PARITY_ENA.VALUE=0 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN3_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_CHANNEL_TOTAL_TIME.VALUE=1.600000 -DRIVER.ADC.VAR.ADC1_GROUP1_FIFO_SIZE.VALUE=16 -DRIVER.ADC.VAR.ADC1_GROUP2_DISCHARGE_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_SAMPLE_PRESCALER.VALUE=1 -DRIVER.ADC.VAR.ADC1_GROUP1_LENGTH.VALUE=16 -DRIVER.ADC.VAR.ADC2_GROUP1_ID_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN18_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_CONVERSION_TIME.VALUE=1.300 -DRIVER.ADC.VAR.ADC2_PORT_BIT0_DIR.VALUE=0 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN4_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN11_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN7_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_ALT_TRIG.VALUE=0 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN23_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN15_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN29_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN0_ENABLE.VALUE=0x00000001 -DRIVER.ADC.VAR.ADC2_GROUP2_CONVERSION_TIME.VALUE=1.300 -DRIVER.ADC.VAR.ADC2_GROUP2_LENGTH.VALUE=32 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN19_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_DISCHARGE_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN4_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN30_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN22_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN14_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_ACTUAL_SAMPLE_TIME.VALUE=300.00 -DRIVER.ADC.VAR.ADC2_GROUP2_SAMPLE_PRESCALER.VALUE=1 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN20_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN12_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN26_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN18_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN8_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN11_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_BND.VALUE=2 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN1_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN31_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN23_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN15_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_DISCHARGE_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_SAMPLE_PRESCALER.VALUE=1 -DRIVER.ADC.VAR.ADC2_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN5_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN8_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_ID_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_EXTENDED_SAMPLE_TIME.VALUE=300.00 -DRIVER.ADC.VAR.ADC1_GROUP0_CONVERSION_TIME.VALUE=1.300 -DRIVER.ADC.VAR.ADC2_GROUP0_RESOLUTION.VALUE=12_BIT -DRIVER.ADC.VAR.ADC1_GROUP1_PIN1_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_RESOLUTION.VALUE=12_BIT -DRIVER.ADC.VAR.ADC2_GROUP1_TRIGGER_EDGE_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_CONVERSION_TIME.VALUE=1.300 -DRIVER.ADC.VAR.ADC2_BND.VALUE=2 -DRIVER.ADC.VAR.ADC2_GROUP1_DISCHARGE_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_PORT_BIT0_PDR.VALUE=1 -DRIVER.ADC.VAR.ADC2_ACTUAL_CYCLE_TIME.VALUE=100.00 -DRIVER.ADC.VAR.ADC2_GROUP1_SAMPLE_PRESCALER.VALUE=1 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN9_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN24_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN16_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_SAMPLE_TIME.VALUE=300.00 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN2_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_TRIGGER_MODE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN5_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_DISCHARGE_PRESCALER.VALUE=0 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN21_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN13_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN9_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN27_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN19_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_DISCHARGE_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_RAM_PARITY_ENA.VALUE=0x0000000A -DRIVER.ADC.VAR.ADC2_GROUP1_SCAN_TIME.VALUE=0.000 -DRIVER.ADC.VAR.ADC2_GROUP0_CHANNEL_TOTAL_TIME.VALUE=0.000000 -DRIVER.ADC.VAR.ADC1_GROUP2_SAMPLE_TIME.VALUE=300.00 -DRIVER.ADC.VAR.ADC2_GROUP0_LENGTH.VALUE=16 -DRIVER.ADC.VAR.ADC1_GROUP0_SAMPLE_PRESCALER.VALUE=1 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN17_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN2_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN20_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN12_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN10_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN24_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN16_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_ACTUAL_SAMPLE_TIME.VALUE=300.00 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN6_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN28_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_TRIGGER_MODE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_PORT_BIT0_PSL.VALUE=1 -DRIVER.ADC.VAR.ADC1_GROUP2_CHANNEL_TOTAL_TIME.VALUE=0.000000 -DRIVER.ADC.VAR.ADC1_GROUP0_DISCHARGE_TIME.VALUE=0.00 -DRIVER.ADC.VAR.ADC2_LENGTH.VALUE=64 -DRIVER.ADC.VAR.ADC2_GROUP0_DISCHARGE_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN21_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN13_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_PINS.VALUE=0 -DRIVER.ADC.VAR.ADC2_GROUP0_DISCHARGE_TIME.VALUE=0.00 -DRIVER.ADC.VAR.ADC2_GROUP0_SAMPLE_PRESCALER.VALUE=1 -DRIVER.ADC.VAR.ADC1_GROUP0_DISCHARGE_PRESCALER.VALUE=0 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN3_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN6_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_RAMBASE.VALUE=0xFF3A0000 -DRIVER.ADC.VAR.ADC2_GROUP0_BND.VALUE=8 -DRIVER.ADC.VAR.ADC1_PORT_BIT0_DOUT.VALUE=1 -DRIVER.ADC.VAR.ADC1_GROUP1_SCAN_TIME.VALUE=0.000 -DRIVER.ADC.VAR.ADC1_GROUP0_RESOLUTION.VALUE=12_BIT -DRIVER.ADC.VAR.ADC2_GROUP2_FIFO_SIZE.VALUE=16 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN7_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN22_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN14_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_HW_TRIGGER_SOURCE.VALUE=GIOB0 -DRIVER.ADC.VAR.ADC2_GROUP1_BND.VALUE=8 -DRIVER.ADC.VAR.ADC2_GROUP0_HW_TRIGGER_SOURCE_ALT.VALUE=EVENT -DRIVER.ADC.VAR.ADC2_GROUP1_PIN18_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN0_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN3_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_ALT_TRIG_COMP.VALUE=1 -DRIVER.ADC.VAR.ADC2_GROUP1_HW_TRIGGER_SOURCE_ALT.VALUE=EVENT -DRIVER.ADC.VAR.ADC2_GROUP1_PIN11_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN7_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN25_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN17_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_PARITY_ENABLE.VALUE=0x00000005 -DRIVER.ADC.VAR.ADC1_ACTUAL_CYCLE_TIME.VALUE=100.00 -DRIVER.ADC.VAR.ADC2_GROUP2_HW_TRIGGER_SOURCE_ALT.VALUE=EVENT -DRIVER.ADC.VAR.ADC2_GROUP2_PIN23_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN15_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN0_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_CONTINUOUS_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN29_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN10_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_PINS.VALUE=0 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN30_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN22_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN14_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN4_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN26_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN18_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN8_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_TRIGGER_EDGE_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN11_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN1_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_FIFO_SIZE.VALUE=16 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN4_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_RAMBASE.VALUE=0xFF3E0000 -DRIVER.ADC.VAR.ADC1_BASE.VALUE=0xFFF7C000 -DRIVER.ADC.VAR.ADC1_PORT_BIT0_DIR.VALUE=0 -DRIVER.ADC.VAR.ADC2_RAM_PARITY_ENA.VALUE=0x0000000A -DRIVER.ADC.VAR.ADC2_GROUP2_HW_TRIGGER_SOURCE.VALUE=GIOB1 -DRIVER.ADC.VAR.ADC2_GROUP2_ID_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_ACTUAL_SAMPLE_TIME.VALUE=300.00 -DRIVER.ADC.VAR.ADC1_GROUP2_LENGTH.VALUE=32 -DRIVER.ADC.VAR.ADC1_GROUP0_BND.VALUE=8 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN19_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_CHANNEL_TOTAL_TIME.VALUE=0.000000 -DRIVER.ADC.VAR.ADC2_GROUP2_CONTINUOUS_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN5_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN20_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN12_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN8_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_TRIGGER_EDGE_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_PINS.VALUE=0 -DRIVER.ADC.VAR.ADC2_GROUP0_EXTENDED_SAMPLE_TIME.VALUE=300.00 -DRIVER.ADC.VAR.ADC1_GROUP1_DISCHARGE_TIME.VALUE=0.00 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN24_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN16_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN1_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_EXTENDED_SAMPLE_TIME.VALUE=300.00 -DRIVER.ADC.VAR.ADC2_GROUP1_DISCHARGE_TIME.VALUE=0.00 -DRIVER.ADC.VAR.ADC2_GROUP2_TRIGGER_MODE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_FIFO_SIZE.VALUE=16 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN5_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN31_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN23_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN15_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_BND.VALUE=8 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN21_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN13_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN27_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN19_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_PORT_BIT0_DOUT.VALUE=1 -DRIVER.ADC.VAR.ADC2_CYCLE_TIME.VALUE=100.00 -DRIVER.ADC.VAR.ADC1_GROUP1_HW_TRIGGER_SOURCE.VALUE=GIOB0 -DRIVER.ADC.VAR.ADC1_GROUP1_DISCHARGE_PRESCALER.VALUE=0 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN9_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_PRESCALE.VALUE=9 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN20_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN12_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_RAM_PARITY_ENA.VALUE=0 -DRIVER.ADC.VAR.ADC2_GROUP0_SAMPLE_TIME.VALUE=300.00 -DRIVER.ADC.VAR.ADC2_BASE.VALUE=0xFFF7C200 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN2_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_RAM_PARITY_ENA.VALUE=0 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN24_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN16_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_ID_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN6_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN9_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_CONTINUOUS_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_PORT_BIT0_PDR.VALUE=1 -DRIVER.ADC.VAR.ADC1_GROUP1_SAMPLE_TIME.VALUE=300.00 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN2_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_CONVERSION_TIME.VALUE=1.300 -DRIVER.ADC.VAR.ADC1_GROUP0_FIFO_SIZE.VALUE=16 -DRIVER.ADC.VAR.ADC1_PORT_BIT0_PULL.VALUE=2 -DRIVER.ADC.VAR.ADC1_GROUP0_LENGTH.VALUE=16 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN17_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_CONVERSION_TIME.VALUE=1.300 -DRIVER.ADC.VAR.ADC1_GROUP0_PINS.VALUE=1 -DRIVER.ADC.VAR.ADC1_GROUP0_ACTUAL_SAMPLE_TIME.VALUE=300.00 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN3_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN10_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_ID_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN6_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_SCAN_TIME.VALUE=0.000 -DRIVER.ADC.VAR.ADC2_GROUP1_HW_TRIGGER_SOURCE.VALUE=GIOB1 -DRIVER.ADC.VAR.ADC1_GROUP1_CHANNEL_TOTAL_TIME.VALUE=1.600000 -DRIVER.ADC.VAR.ADC1_GROUP0_EXTENDED_SAMPLE_TIME.VALUE=300.00 -DRIVER.ADC.VAR.ADC1_GROUP0_HW_TRIGGER_SOURCE_ALT.VALUE=EVENT -DRIVER.ADC.VAR.ADC2_GROUP1_PIN22_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN14_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN28_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_PORT_BIT0_PSL.VALUE=1 -DRIVER.ADC.VAR.ADC1_GROUP2_EXTENDED_SAMPLE_TIME.VALUE=300.00 -DRIVER.ADC.VAR.ADC2_GROUP1_LENGTH.VALUE=16 -DRIVER.ADC.VAR.ADC1_GROUP1_HW_TRIGGER_SOURCE_ALT.VALUE=EVENT -DRIVER.ADC.VAR.ADC2_GROUP2_PIN18_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN3_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN21_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN13_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_ACTUAL_DISCHARGE_TIME.VALUE=0.00 -DRIVER.ADC.VAR.ADC1_GROUP2_HW_TRIGGER_SOURCE_ALT.VALUE=EVENT -DRIVER.ADC.VAR.ADC2_GROUP2_PIN11_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_CONTINUOUS_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN25_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN17_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_ACTUAL_DISCHARGE_TIME.VALUE=0.00 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN7_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN29_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN10_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_ACTUAL_DISCHARGE_TIME.VALUE=0.00 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN0_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN30_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN22_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN14_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_CYCLE_TIME.VALUE=100.00 -DRIVER.ADC.VAR.ADC2_GROUP0_DISCHARGE_PRESCALER.VALUE=0 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN4_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN7_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_DISCHARGE_TIME.VALUE=0.00 -DRIVER.ADC.VAR.ADC1_GROUP0_HW_TRIGGER_SOURCE.VALUE=GIOB0 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN0_ENABLE.VALUE=0x00000001 -DRIVER.ADC.VAR.ADC1_GROUP0_ID_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_DISCHARGE_TIME.VALUE=0.00 -DRIVER.ADC.VAR.ADC1_GROUP2_SCAN_TIME.VALUE=0.000 -DRIVER.ADC.VAR.ADC1_GROUP1_PINS.VALUE=1 -DRIVER.ADC.VAR.ADC1_GROUP1_TRIGGER_EDGE_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_ALT_TRIG_COMP.VALUE=1 -DRIVER.ADC.VAR.ADC1_GROUP0_CONTINUOUS_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN8_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN23_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN15_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_ALT_TRIG.VALUE=0 -DRIVER.ADC.VAR.ADC1_GROUP1_RAM_PARITY_ENA.VALUE=0 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN19_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN1_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_RAM_PARITY_ENA.VALUE=0 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN4_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_DISCHARGE_PRESCALER.VALUE=0 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN20_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN12_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN8_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN26_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN18_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_RESOLUTION.VALUE=12_BIT -DRIVER.ADC.VAR.ADC2_GROUP2_PIN24_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN16_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN1_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN11_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_SCAN_TIME.VALUE=0.000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN31_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN23_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN15_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_HW_TRIGGER_SOURCE.VALUE=GIOB1 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN5_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN27_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN19_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_PRESCALE.VALUE=9 -DRIVER.ADC.VAR.ADC2_GROUP0_ACTUAL_SAMPLE_TIME.VALUE=300.00 -DRIVER.ADC.VAR.ADC1_GROUP2_PINS.VALUE=0 -DRIVER.ADC.VAR.ADC2_PORT_BIT0_PULL.VALUE=2 -DRIVER.ADC.VAR.ADC1_LENGTH.VALUE=64 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN9_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN20_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN12_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_SAMPLE_TIME.VALUE=300.00 -DRIVER.ADC.VAR.ADC2_GROUP1_CHANNEL_TOTAL_TIME.VALUE=0.000000 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN2_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_CONTINUOUS_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN5_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_ACTUAL_SAMPLE_TIME.VALUE=300.00 -DRIVER.ADC.VAR.ADC1_GROUP0_SCAN_TIME.VALUE=0.000 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN6_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN21_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN13_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_TRIGGER_EDGE_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN9_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_SAMPLE_TIME.VALUE=300.00 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN17_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_FIFO_SIZE.VALUE=16 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN2_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN10_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN6_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN24_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN16_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN22_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN14_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN28_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_TRIGGER_MODE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_ACTUAL_DISCHARGE_TIME.VALUE=0.00 -DRIVER.LIN.VAR.LIN2_PORT_BIT1_PDR.VALUE=0 -DRIVER.LIN.VAR.LIN1_TOAWUSINTENA.VALUE=0x00000040 -DRIVER.LIN.VAR.LIN1_TOA3WUSINTENA.VALUE=0x00000080 -DRIVER.LIN.VAR.LIN1_PORT_BIT2_DOUT.VALUE=0 -DRIVER.LIN.VAR.LIN2_PORT_BIT2_FUN.VALUE=4 -DRIVER.LIN.VAR.LIN1_HGENCTRL.VALUE=1 -DRIVER.LIN.VAR.LIN2_PORT_BIT0_PSL.VALUE=1 -DRIVER.LIN.VAR.LIN2_PORT_BIT0_DOUT.VALUE=0 -DRIVER.LIN.VAR.LIN1_PBEINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.LIN.VAR.LIN2_PORT_BIT2_PDR.VALUE=0 -DRIVER.LIN.VAR.LIN1_BASE_PORT.VALUE=0xFFF7E440 -DRIVER.LIN.VAR.LIN2_PARITYENA.VALUE=0 -DRIVER.LIN.VAR.LIN2_WAKEINTENA.VALUE=0x00000002 -DRIVER.LIN.VAR.LIN2_FEINTENA.VALUE=0x04000000 -DRIVER.LIN.VAR.LIN1_CEINTENA.VALUE=0x20000000 -DRIVER.LIN.VAR.LIN2_PORT_BIT1_PSL.VALUE=2 -DRIVER.LIN.VAR.LIN2_OEINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_TXINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PORT_BIT0_PULL.VALUE=2 -DRIVER.LIN.VAR.LIN1_MAXPRESCALE.VALUE=4507 -DRIVER.LIN.VAR.LIN2_IDINTENA.VALUE=0x00002000 -DRIVER.LIN.VAR.LIN1_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.LIN.VAR.LIN1_RX_MASK.VALUE=0xFF -DRIVER.LIN.VAR.LIN2_PORT_BIT2_PSL.VALUE=4 -DRIVER.LIN.VAR.LIN2_PORT_BIT1_DOUT.VALUE=0 -DRIVER.LIN.VAR.LIN1_BREAKINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_NREINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_TOINTENA.VALUE=0x00000010 -DRIVER.LIN.VAR.LIN1_TOAWUSINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_TOA3WUSINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_BAUDRATE.VALUE=20.000 -DRIVER.LIN.VAR.LIN1_OEINTENA.VALUE=0x02000000 -DRIVER.LIN.VAR.LIN1_PORT_BIT0_DIR.VALUE=0 -DRIVER.LIN.VAR.LIN1_PORT_BIT1_PULL.VALUE=0 -DRIVER.LIN.VAR.LIN2_RXINTENA.VALUE=0x00000200 -DRIVER.LIN.VAR.LIN1_WAKEINTENA.VALUE=0x00000002 -DRIVER.LIN.VAR.LIN2_PORT_BIT2_DOUT.VALUE=0 -DRIVER.LIN.VAR.LIN2_WAKEINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_FEINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PORT_BIT1_DIR.VALUE=0 -DRIVER.LIN.VAR.LIN1_CEINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_PBEINTENA.VALUE=0x40000000 -DRIVER.LIN.VAR.LIN2_TXINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PORT_BIT0_FUN.VALUE=0 -DRIVER.LIN.VAR.LIN2_IDINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PORT_BIT2_DIR.VALUE=0 -DRIVER.LIN.VAR.LIN2_SBREAK.VALUE=13 -DRIVER.LIN.VAR.LIN2_TOAWUSINTENA.VALUE=0x00000040 -DRIVER.LIN.VAR.LIN1_PORT_BIT2_PULL.VALUE=0 -DRIVER.LIN.VAR.LIN1_BREAKINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_PEINTENA.VALUE=0x01000000 -DRIVER.LIN.VAR.LIN1_PORT_BIT0_PDR.VALUE=0 -DRIVER.LIN.VAR.LIN1_BASE.VALUE=0xFFF7E400 -DRIVER.LIN.VAR.LIN2_PORT_BIT0_PULL.VALUE=2 -DRIVER.LIN.VAR.LIN1_LENGTH.VALUE=8 -DRIVER.LIN.VAR.LIN2_TOINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PORT_BIT1_FUN.VALUE=2 -DRIVER.LIN.VAR.LIN2_BEINTENA.VALUE=0x80000000 -DRIVER.LIN.VAR.LIN1_ACTUALBAUDRATE.VALUE=19.968 -DRIVER.LIN.VAR.LIN1_FEINTENA.VALUE=0x04000000 -DRIVER.LIN.VAR.LIN1_OEINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_NREINTENA.VALUE=0x08000000 -DRIVER.LIN.VAR.LIN1_TXINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PORT_BIT1_PDR.VALUE=0 -DRIVER.LIN.VAR.LIN1_MSTMOD.VALUE=1 -DRIVER.LIN.VAR.LIN2_ISFEINTENA.VALUE=0x10000000 -DRIVER.LIN.VAR.LIN1_PORT_BIT2_FUN.VALUE=4 -DRIVER.LIN.VAR.LIN2_TX_MASK.VALUE=0xFF -DRIVER.LIN.VAR.LIN1_PORT_BIT0_PSL.VALUE=1 -DRIVER.LIN.VAR.LIN2_RXINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_WAKEINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_IDINTENA.VALUE=0x00002000 -DRIVER.LIN.VAR.LIN2_PRESCALE.VALUE=312 -DRIVER.LIN.VAR.LIN1_PORT_BIT2_PDR.VALUE=0 -DRIVER.LIN.VAR.LIN2_BASE.VALUE=0xFFF7E600 -DRIVER.LIN.VAR.LIN2_PORT_BIT1_PULL.VALUE=0 -DRIVER.LIN.VAR.LIN2_PBEINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_PORT_BIT1_PULDIS.VALUE=2 -DRIVER.LIN.VAR.LIN1_TOINTENA.VALUE=0x00000010 -DRIVER.LIN.VAR.LIN1_PORT_BIT1_PSL.VALUE=2 -DRIVER.LIN.VAR.LIN2_BASE_PORT.VALUE=0xFFF7E640 -DRIVER.LIN.VAR.LIN1_BAUDRATE.VALUE=20.000 -DRIVER.LIN.VAR.LIN2_TOAWUSINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_PEINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PORT_BIT2_PSL.VALUE=4 -DRIVER.LIN.VAR.LIN2_MAXBAUDRATE.VALUE=22.188 -DRIVER.LIN.VAR.LIN1_RXINTENA.VALUE=0x00000200 -DRIVER.LIN.VAR.LIN2_BEINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_FEINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_PORT_BIT2_PULL.VALUE=0 -DRIVER.LIN.VAR.LIN1_PORT_BIT1_PULDIS.VALUE=2 -DRIVER.LIN.VAR.LIN1_TX_MASK.VALUE=0xFF -DRIVER.LIN.VAR.LIN2_NREINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_TXINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_ISFEINTENA.VALUE=0x10000000 -DRIVER.LIN.VAR.LIN2_ISFEINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_ACTUALBAUDRATE.VALUE=19.968 -DRIVER.LIN.VAR.LIN1_IDINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_TOA3WUSINTENA.VALUE=0x00000080 -DRIVER.LIN.VAR.LIN1_PEINTENA.VALUE=0x01000000 -DRIVER.LIN.VAR.LIN1_TOINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PARITYENA.VALUE=1 -DRIVER.LIN.VAR.LIN1_BEINTENA.VALUE=0x80000000 -DRIVER.LIN.VAR.LIN1_RXINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_HGENCTRL.VALUE=1 -DRIVER.LIN.VAR.LIN1_PRESCALE.VALUE=312 -DRIVER.LIN.VAR.LIN1_ISFEINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_SDEL.VALUE=1 -DRIVER.LIN.VAR.LIN2_LENGTH.VALUE=8 -DRIVER.LIN.VAR.LIN2_MAXPRESCALE.VALUE=4507 -DRIVER.LIN.VAR.LIN2_CEINTENA.VALUE=0x20000000 -DRIVER.LIN.VAR.LIN2_BREAKINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PORT_BIT0_DOUT.VALUE=0 -DRIVER.LIN.VAR.LIN2_TOA3WUSINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PEINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_MSTMOD.VALUE=1 -DRIVER.LIN.VAR.LIN2_PORT_BIT0_DIR.VALUE=0 -DRIVER.LIN.VAR.LIN1_BEINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PBEINTENA.VALUE=0x40000000 -DRIVER.LIN.VAR.LIN2_SDEL.VALUE=1 -DRIVER.LIN.VAR.LIN2_PORT_BIT1_DIR.VALUE=0 -DRIVER.LIN.VAR.LIN1_MAXBAUDRATE.VALUE=22.188 -DRIVER.LIN.VAR.LIN2_PORT_BIT2_PULDIS.VALUE=4 -DRIVER.LIN.VAR.LIN1_SBREAK.VALUE=13 -DRIVER.LIN.VAR.LIN2_OEINTENA.VALUE=0x02000000 -DRIVER.LIN.VAR.LIN1_PORT_BIT1_DOUT.VALUE=0 -DRIVER.LIN.VAR.LIN2_PORT_BIT0_FUN.VALUE=0 -DRIVER.LIN.VAR.LIN2_PORT_BIT2_DIR.VALUE=0 -DRIVER.LIN.VAR.LIN2_PORT_BIT0_PDR.VALUE=0 -DRIVER.LIN.VAR.LIN2_PORT_BIT1_FUN.VALUE=2 -DRIVER.LIN.VAR.LIN2_CEINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_NREINTENA.VALUE=0x08000000 -DRIVER.LIN.VAR.LIN2_BREAKINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_RX_MASK.VALUE=0xFF -DRIVER.LIN.VAR.LIN1_PORT_BIT2_PULDIS.VALUE=4 -DRIVER.HET.VAR.HET2_EDGE5_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM5_PERIOD_PRESCALER.VALUE=99968 -DRIVER.HET.VAR.HET2_PWM0_PERIOD_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT0_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_INT_X0.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE4_BOTH.VALUE=0 -DRIVER.HET.VAR.HET1_BIT1_DIR.VALUE=0x00000002 -DRIVER.HET.VAR.HET2_BIT6_HRSHARE.VALUE=0x00000008 -DRIVER.HET.VAR.HET2_INT_X1.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM2_DUTY.VALUE=50 -DRIVER.HET.VAR.HET1_BIT29_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT0_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_IGNORE_SUSPEND_ENABLE.VALUE=0x00020000 -DRIVER.HET.VAR.HET2_PWM3_PERIOD.VALUE=1000.000 -DRIVER.HET.VAR.HET2_PWM1_PIN_SELECT.VALUE=10 -DRIVER.HET.VAR.HET2_BIT20_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT12_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT3_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_INT_X2.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X3.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM2_DUTYTIME.VALUE=500.480 -DRIVER.HET.VAR.HET2_INT_X4.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM6_ACTION.VALUE=3 -DRIVER.HET.VAR.HET1_PWM0_DUTY_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT4_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_PWM3_ENA.VALUE=0 -DRIVER.HET.VAR.HET2_BIT4_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X5.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_IGNORE_SUSPEND_ENABLE.VALUE=0x00020000 -DRIVER.HET.VAR.HET1_BIT30_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT26_HRSHARE.VALUE=0x00002000 -DRIVER.HET.VAR.HET1_BIT22_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT18_HRSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT14_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM4_ACTUALPERIOD.VALUE=1000.960 -DRIVER.HET.VAR.HET2_BIT3_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X6.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE0_PIN_SELECT.VALUE=9 -DRIVER.HET.VAR.HET1_BIT28_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT7_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_INT_X7.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT7_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X8.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM3_PERIOD_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT26_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT18_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT10_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X9.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT11_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT11_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_PWM4_PIN_SELECT.VALUE=16 -DRIVER.HET.VAR.HET2_PWM4_DUTYTIME.VALUE=500.480 -DRIVER.HET.VAR.HET1_RAM_BASE.VALUE=0xFF460000 -DRIVER.HET.VAR.HET2_EDGE6_BOTH.VALUE=0 -DRIVER.HET.VAR.HET2_PWM2_DUTY_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT31_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT23_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT15_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE2_EVENT.VALUE=1 -DRIVER.HET.VAR.HET2_BIT11_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PIN_ENABLE.VALUE=0 -DRIVER.HET.VAR.HET1_CAP3_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_BIT24_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT16_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT5_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT27_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT19_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE6_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT24_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_BIT16_PULL.VALUE=2 -DRIVER.HET.VAR.HET1_BIT2_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM6_DUTY_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE3_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET2_EDGE5_PIN_SELECT.VALUE=21 -DRIVER.HET.VAR.HET2_BIT21_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT13_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM7_PERIOD.VALUE=1000.000 -DRIVER.HET.VAR.HET1_BIT27_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT19_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_CAP5_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET2_PWM4_ENA.VALUE=0 -DRIVER.HET.VAR.HET2_BIT8_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM1_POLARITY.VALUE=3 -DRIVER.HET.VAR.HET2_CAP2_PIN_SELECT.VALUE=4 -DRIVER.HET.VAR.HET2_BIT4_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM0_PERIOD.VALUE=1000.000 -DRIVER.HET.VAR.HET1_BIT29_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT0_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT8_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM4_PERIOD_PRESCALER.VALUE=99968 -DRIVER.HET.VAR.HET2_BIT1_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT20_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT12_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM7_ACTION.VALUE=3 -DRIVER.HET.VAR.HET2_PWM4_PERIOD_PRESCALER.VALUE=99968 -DRIVER.HET.VAR.HET2_BIT26_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_BIT24_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT18_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_BIT16_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM3_DUTY_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM3_POLARITY.VALUE=3 -DRIVER.HET.VAR.HET2_BIT28_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT0_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM1_ACTUALPERIOD.VALUE=1000.960 -DRIVER.HET.VAR.HET2_BIT29_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT6_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_CAP5_PIN_SELECT.VALUE=26 -DRIVER.HET.VAR.HET1_BIT28_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT10_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_EDGE7_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM0_ACTION.VALUE=3 -DRIVER.HET.VAR.HET2_BIT1_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_EDGE7_EVENT.VALUE=1 -DRIVER.HET.VAR.HET1_EDGE5_BOTH.VALUE=0 -DRIVER.HET.VAR.HET1_PWM5_DUTY_PRESCALER.VALUE=50176 -DRIVER.HET.VAR.HET1_BIT3_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE7_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_EDGE1_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM3_DUTY.VALUE=50 -DRIVER.HET.VAR.HET1_PWM1_PERIOD_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT30_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT22_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT14_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT4_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_EDGE4_EVENT.VALUE=1 -DRIVER.HET.VAR.HET1_BIT5_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_MASTER.VALUE=1 -DRIVER.HET.VAR.HET2_EDGE5_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM5_ENA.VALUE=0 -DRIVER.HET.VAR.HET2_PWM0_PERIOD_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT2_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT5_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM7_ACTUALPERIOD.VALUE=1000.960 -DRIVER.HET.VAR.HET1_BIT8_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT1_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_LR_ACTUALTIME.VALUE=1280.000 -DRIVER.HET.VAR.HET1_PWM5_DUTYTIME.VALUE=500.480 -DRIVER.HET.VAR.HET2_PWM5_PERIOD_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM4_DUTY_PRESCALER.VALUE=50176 -DRIVER.HET.VAR.HET2_BIT9_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM3_DUTY_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM0_DUTY_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT5_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM6_PIN_SELECT.VALUE=18 -DRIVER.HET.VAR.HET2_BIT21_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT20_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT13_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT12_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_EDGE7_BOTH.VALUE=0 -DRIVER.HET.VAR.HET2_BIT25_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT17_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM6_DUTY_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM0_ENA.VALUE=0 -DRIVER.HET.VAR.HET1_BIT30_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT27_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT22_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT19_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT14_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM1_PERIOD.VALUE=1000.000 -DRIVER.HET.VAR.HET2_BIT7_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE5_PIN_SELECT.VALUE=21 -DRIVER.HET.VAR.HET1_BIT29_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT0_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET_DIS_BLACKBOX.VALUE=0 -DRIVER.HET.VAR.HET2_PWM7_DUTYTIME.VALUE=500.480 -DRIVER.HET.VAR.HET2_HR_ACTUALFREQUENCY.VALUE=100.000 -DRIVER.HET.VAR.HET2_PWM5_DUTY_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM4_ACTION.VALUE=3 -DRIVER.HET.VAR.HET1_BIT25_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_BIT17_PULL.VALUE=2 -DRIVER.HET.VAR.HET1_BIT4_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE0_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_CAP6_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_BIT20_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT12_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT31_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT23_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT15_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X10.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT28_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_INT_X11.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X20.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X12.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM3_PERIOD_PRESCALER.VALUE=99968 -DRIVER.HET.VAR.HET2_PWM6_ENA.VALUE=0 -DRIVER.HET.VAR.HET2_BIT24_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT16_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X21.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X13.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_HR_PRESCALE.VALUE=0 -DRIVER.HET.VAR.HET1_EDGE6_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_PWM6_PERIOD_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_LR_PRESCALE.VALUE=7 -DRIVER.HET.VAR.HET2_PWM0_PIN_SELECT.VALUE=8 -DRIVER.HET.VAR.HET2_BIT6_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X30.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X22.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X14.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT2_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X31.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X23.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X15.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM3_PERIOD_PRESCALER.VALUE=99968 -DRIVER.HET.VAR.HET2_INT_X24.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X16.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BASE_PORT.VALUE=0xFFF7B84C -DRIVER.HET.VAR.HET2_PWM5_PERIOD_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT0_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X25.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X17.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM4_POLARITY.VALUE=3 -DRIVER.HET.VAR.HET1_PWM3_DUTY_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT10_HRSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT30_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT22_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT14_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X26.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X18.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X27.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X19.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT27_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_BIT26_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT19_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_BIT18_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X28.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM2_PERIOD_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM1_DUTY_PRESCALER.VALUE=50176 -DRIVER.HET.VAR.HET2_PWM0_DUTY.VALUE=50 -DRIVER.HET.VAR.HET2_BIT26_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT18_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X29.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM1_ENA.VALUE=0 -DRIVER.HET.VAR.HET2_CAP7_PIN_SELECT.VALUE=30 -DRIVER.HET.VAR.HET2_BIT8_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM5_PERIOD.VALUE=1000.000 -DRIVER.HET.VAR.HET1_PWM4_ACTUALPERIOD.VALUE=1000.960 -DRIVER.HET.VAR.HET1_PWM3_PIN_SELECT.VALUE=14 -DRIVER.HET.VAR.HET1_BIT11_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT1_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM0_DUTYTIME.VALUE=500.480 -DRIVER.HET.VAR.HET2_BIT2_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_EDGE6_BOTH.VALUE=0 -DRIVER.HET.VAR.HET1_BIT5_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM6_POLARITY.VALUE=3 -DRIVER.HET.VAR.HET2_BIT30_HRSHARE.VALUE=0x00008000 -DRIVER.HET.VAR.HET2_BIT22_HRSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT14_HRSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT6_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM4_DUTY.VALUE=50 -DRIVER.HET.VAR.HET1_BIT20_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT12_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PIN_ENABLE.VALUE=0 -DRIVER.HET.VAR.HET2_BIT24_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT16_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT5_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_PWM0_DUTY_PRESCALER.VALUE=50176 -DRIVER.HET.VAR.HET1_BIT6_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_PWM7_ENA.VALUE=0 -DRIVER.HET.VAR.HET1_PWM0_DUTY_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT8_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE4_PIN_SELECT.VALUE=20 -DRIVER.HET.VAR.HET2_BIT7_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT9_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT3_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM5_ACTION.VALUE=3 -DRIVER.HET.VAR.HET2_BIT10_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_CAP1_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_EDGE6_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_CAP1_PIN_SELECT.VALUE=2 -DRIVER.HET.VAR.HET2_BIT31_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT23_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT21_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT15_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT13_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT27_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT19_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE3_EVENT.VALUE=1 -DRIVER.HET.VAR.HET1_PWM6_DUTY_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM2_ENA.VALUE=0 -DRIVER.HET.VAR.HET2_BIT9_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT2_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE0_EVENT.VALUE=1 -DRIVER.HET.VAR.HET1_PWM2_PERIOD_PRESCALER.VALUE=99968 -DRIVER.HET.VAR.HET1_BIT26_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_BIT18_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_BIT6_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE3_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT24_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT16_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT25_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT17_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_CAP4_PIN_SELECT.VALUE=24 -DRIVER.HET.VAR.HET1_BIT29_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT0_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_PWM2_PERIOD_PRESCALER.VALUE=99968 -DRIVER.HET.VAR.HET2_EDGE3_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_BIT3_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT2_HRSHARE.VALUE=0x00000002 -DRIVER.HET.VAR.HET2_PWM6_PERIOD.VALUE=1000.000 -DRIVER.HET.VAR.HET2_BIT8_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM1_ACTUALPERIOD.VALUE=1000.960 -DRIVER.HET.VAR.HET1_BIT4_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT4_HRSHARE.VALUE=0x00000004 -DRIVER.HET.VAR.HET1_BIT25_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT17_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT24_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT16_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM1_DUTYTIME.VALUE=500.480 -DRIVER.HET.VAR.HET2_PWM4_PERIOD_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT28_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_BIT28_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM2_ACTION.VALUE=3 -DRIVER.HET.VAR.HET2_PWM1_DUTY.VALUE=50 -DRIVER.HET.VAR.HET2_BIT29_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM7_POLARITY.VALUE=3 -DRIVER.HET.VAR.HET1_PWM3_ENA.VALUE=0 -DRIVER.HET.VAR.HET1_BIT24_HRSHARE.VALUE=0x00001000 -DRIVER.HET.VAR.HET1_BIT16_HRSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT10_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM5_PIN_SELECT.VALUE=17 -DRIVER.HET.VAR.HET1_BIT20_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT12_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT3_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X10.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X11.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT3_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_EDGE7_BOTH.VALUE=0 -DRIVER.HET.VAR.HET1_EDGE0_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT7_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X20.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X12.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT30_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT22_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT14_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM5_DUTY.VALUE=50 -DRIVER.HET.VAR.HET1_BIT10_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X21.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X13.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM5_ACTUALPERIOD.VALUE=1000.960 -DRIVER.HET.VAR.HET2_BIT26_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT18_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT6_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_EDGE4_PIN_SELECT.VALUE=20 -DRIVER.HET.VAR.HET1_INT_X30.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X22.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X14.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM3_DUTYTIME.VALUE=500.480 -DRIVER.HET.VAR.HET1_INT_X31.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X23.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X15.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE5_EVENT.VALUE=1 -DRIVER.HET.VAR.HET2_PWM1_DUTY_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM7_PERIOD_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM6_DUTY_PRESCALER.VALUE=50176 -DRIVER.HET.VAR.HET1_BIT7_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_INT_X24.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X16.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT28_HRSHARE.VALUE=0x00004000 -DRIVER.HET.VAR.HET1_CAP2_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_PWM3_PERIOD_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT6_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X25.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X17.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT9_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT5_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X26.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X18.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X27.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X19.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT11_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_INT_X28.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM2_PERIOD_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_RAM_SIZE.VALUE=160 -DRIVER.HET.VAR.HET1_EDGE2_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_INT_X29.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT30_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT25_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT22_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT17_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT14_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_PWM3_PERIOD.VALUE=1000.000 -DRIVER.HET.VAR.HET2_PWM5_DUTY_PRESCALER.VALUE=50176 -DRIVER.HET.VAR.HET2_BIT29_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM1_PERIOD_PRESCALER.VALUE=99968 -DRIVER.HET.VAR.HET1_BIT10_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_CAP4_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET2_BIT8_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT4_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM4_ENA.VALUE=0 -DRIVER.HET.VAR.HET1_PWM0_POLARITY.VALUE=3 -DRIVER.HET.VAR.HET1_BIT4_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM1_PERIOD_PRESCALER.VALUE=99968 -DRIVER.HET.VAR.HET1_EDGE1_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM1_PERIOD_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT27_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_BIT19_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_BIT8_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT30_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT22_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT14_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_CAP6_PIN_SELECT.VALUE=28 -DRIVER.HET.VAR.HET2_BIT27_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT19_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM2_PIN_SELECT.VALUE=12 -DRIVER.HET.VAR.HET1_BIT1_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_PWM3_ACTION.VALUE=3 -DRIVER.HET.VAR.HET2_PWM2_POLARITY.VALUE=3 -DRIVER.HET.VAR.HET1_EDGE4_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT28_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT6_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE0_BOTH.VALUE=0 -DRIVER.HET.VAR.HET2_EDGE6_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET2_PWM5_DUTY_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT8_HRSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT4_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE3_PIN_SELECT.VALUE=15 -DRIVER.HET.VAR.HET2_PWM2_ACTUALPERIOD.VALUE=1000.960 -DRIVER.HET.VAR.HET2_BIT26_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT18_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT29_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_BIT11_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT10_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_EDGE1_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM7_PERIOD_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM2_DUTY.VALUE=50 -DRIVER.HET.VAR.HET1_PWM5_ENA.VALUE=0 -DRIVER.HET.VAR.HET1_BIT8_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_CAP0_PIN_SELECT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT21_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT13_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT5_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM4_DUTYTIME.VALUE=500.480 -DRIVER.HET.VAR.HET2_BIT4_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_EDGE2_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM2_DUTY_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM2_DUTY_PRESCALER.VALUE=50176 -DRIVER.HET.VAR.HET1_BIT9_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT6_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM6_DUTY.VALUE=50 -DRIVER.HET.VAR.HET1_BIT1_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM4_PERIOD.VALUE=1000.000 -DRIVER.HET.VAR.HET2_BIT28_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT7_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_PWM7_ACTION.VALUE=3 -DRIVER.HET.VAR.HET1_BIT8_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_PWM2_DUTY_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT20_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT12_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT31_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT23_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT15_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_CAP3_PIN_SELECT.VALUE=6 -DRIVER.HET.VAR.HET1_BIT7_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM6_DUTYTIME.VALUE=500.480 -DRIVER.HET.VAR.HET2_PWM4_DUTY_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM1_DUTY_PRESCALER.VALUE=50176 -DRIVER.HET.VAR.HET2_BIT20_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_BIT12_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_PWM0_PERIOD_PRESCALER.VALUE=99968 -DRIVER.HET.VAR.HET1_PWM0_ACTION.VALUE=3 -DRIVER.HET.VAR.HET2_BIT27_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT19_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_CAP5_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_BIT26_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT18_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT31_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT27_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT23_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT19_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT15_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_PWM0_PERIOD_PRESCALER.VALUE=99968 -DRIVER.HET.VAR.HET1_EDGE4_EVENT.VALUE=1 -DRIVER.HET.VAR.HET1_BIT20_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT12_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT20_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT12_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE5_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_PWM6_ENA.VALUE=0 -DRIVER.HET.VAR.HET1_BIT6_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE1_EVENT.VALUE=1 -DRIVER.HET.VAR.HET2_PWM3_PERIOD_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE3_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT28_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_CAP7_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_PWM3_POLARITY.VALUE=3 -DRIVER.HET.VAR.HET2_PWM4_PIN_SELECT.VALUE=16 -DRIVER.HET.VAR.HET2_BIT29_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT10_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT2_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT9_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM5_DUTY_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM0_PERIOD_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE3_PIN_SELECT.VALUE=15 -DRIVER.HET.VAR.HET1_PWM1_PERIOD.VALUE=1000.000 -DRIVER.HET.VAR.HET1_BIT8_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BASE.VALUE=0xFFF7B800 -DRIVER.HET.VAR.HET2_EDGE1_BOTH.VALUE=0 -DRIVER.HET.VAR.HET1_PWM6_PERIOD_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM5_POLARITY.VALUE=3 -DRIVER.HET.VAR.HET2_BIT20_HRSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT12_HRSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT2_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT2_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT28_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM7_PIN_SELECT.VALUE=19 -DRIVER.HET.VAR.HET1_PWM5_ACTUALPERIOD.VALUE=1000.960 -DRIVER.HET.VAR.HET1_LR_ACTUALTIME.VALUE=1280.000 -DRIVER.HET.VAR.HET1_BIT21_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT13_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT11_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_PWM3_DUTY.VALUE=50 -DRIVER.HET.VAR.HET1_PWM7_ENA.VALUE=0 -DRIVER.HET.VAR.HET1_HR_PRESCALE.VALUE=0 -DRIVER.HET.VAR.HET1_BIT30_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT22_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT14_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT7_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_HR_ACTUALFREQUENCY.VALUE=100.000 -DRIVER.HET.VAR.HET2_PWM1_ACTION.VALUE=3 -DRIVER.HET.VAR.HET2_BIT5_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_EDGE4_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_CAP0_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET2_BIT4_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE2_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM7_DUTY.VALUE=50 -DRIVER.HET.VAR.HET1_PWM2_DUTY_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT8_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT11_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM7_DUTYTIME.VALUE=500.480 -DRIVER.HET.VAR.HET2_EDGE6_EVENT.VALUE=1 -DRIVER.HET.VAR.HET2_MASTER.VALUE=1 -DRIVER.HET.VAR.HET1_PWM5_DUTY_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM0_PERIOD_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT9_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_EDGE6_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT10_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_CAP5_PIN_SELECT.VALUE=26 -DRIVER.HET.VAR.HET1_PWM1_PIN_SELECT.VALUE=10 -DRIVER.HET.VAR.HET1_BIT9_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT21_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_BIT13_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_PWM7_DUTY_PRESCALER.VALUE=50176 -DRIVER.HET.VAR.HET1_PWM5_PERIOD_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT24_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT16_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT6_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_RAM_PARITY_ENA.VALUE=0x0000000A -DRIVER.HET.VAR.HET2_BIT29_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT24_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT16_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT10_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM7_DUTY_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE0_BOTH.VALUE=0 -DRIVER.HET.VAR.HET1_BIT30_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT22_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT14_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X0.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE2_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET2_PWM4_PERIOD_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT28_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT0_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT0_HRSHARE.VALUE=0x00000001 -DRIVER.HET.VAR.HET1_INT_X1.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE2_PIN_SELECT.VALUE=13 -DRIVER.HET.VAR.HET2_PWM2_PERIOD.VALUE=1000.000 -DRIVER.HET.VAR.HET1_BIT8_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X2.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_DIS_BLACKBOX.VALUE=0 -DRIVER.HET.VAR.HET2_LR_TIME.VALUE=800.000 -DRIVER.HET.VAR.HET1_INT_X3.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM6_DUTY_PRESCALER.VALUE=50176 -DRIVER.HET.VAR.HET1_EDGE5_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM5_ACTION.VALUE=3 -DRIVER.HET.VAR.HET1_BIT29_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_BIT0_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_INT_X4.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT2_HRSHARE.VALUE=0x00000002 -DRIVER.HET.VAR.HET1_BIT21_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT13_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X5.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM2_ACTUALPERIOD.VALUE=1000.960 -DRIVER.HET.VAR.HET1_BIT20_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT12_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT3_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_INT_X6.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM0_DUTYTIME.VALUE=500.480 -DRIVER.HET.VAR.HET1_INT_X7.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BASE_PORT.VALUE=0xFFF7B94C -DRIVER.HET.VAR.HET1_INT_X8.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT25_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT17_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT2_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM6_POLARITY.VALUE=3 -DRIVER.HET.VAR.HET1_BIT30_HRSHARE.VALUE=0x00008000 -DRIVER.HET.VAR.HET1_BIT22_HRSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT14_HRSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X9.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BASE.VALUE=0xFFF7B900 -DRIVER.HET.VAR.HET2_EDGE2_BOTH.VALUE=0 -DRIVER.HET.VAR.HET1_EDGE0_EVENT.VALUE=1 -DRIVER.HET.VAR.HET2_BIT28_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT10_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_CAP2_PIN_SELECT.VALUE=4 -DRIVER.HET.VAR.HET1_BIT11_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM2_DUTYTIME.VALUE=500.480 -DRIVER.HET.VAR.HET2_PWM0_DUTY_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT31_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT23_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT20_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_BIT15_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT12_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_PWM4_DUTY.VALUE=50 -DRIVER.HET.VAR.HET2_BIT26_HRSHARE.VALUE=0x00002000 -DRIVER.HET.VAR.HET2_BIT18_HRSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_CAP1_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_BIT30_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT22_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT14_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM6_ACTUALPERIOD.VALUE=1000.960 -DRIVER.HET.VAR.HET1_PWM6_PERIOD.VALUE=1000.000 -DRIVER.HET.VAR.HET1_BIT31_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT23_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT15_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT9_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT6_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_EDGE6_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT7_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE1_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_RAM_SIZE.VALUE=160 -DRIVER.HET.VAR.HET2_BIT9_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT21_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT13_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM2_PERIOD_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT0_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM3_DUTY_PRESCALER.VALUE=50176 -DRIVER.HET.VAR.HET2_CAP3_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET2_BIT0_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM3_PIN_SELECT.VALUE=14 -DRIVER.HET.VAR.HET2_PWM6_ACTION.VALUE=3 -DRIVER.HET.VAR.HET2_BIT30_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_BIT22_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_BIT14_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_EDGE7_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT25_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT17_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_EDGE2_PIN_SELECT.VALUE=13 -DRIVER.HET.VAR.HET1_BIT20_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT12_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_HR_FREQUENCY.VALUE=100.000 -DRIVER.HET.VAR.HET2_PWM2_DUTY_PRESCALER.VALUE=50176 -DRIVER.HET.VAR.HET1_EDGE5_EVENT.VALUE=1 -DRIVER.HET.VAR.HET1_EDGE1_BOTH.VALUE=0 -DRIVER.HET.VAR.HET1_PWM5_PERIOD_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT24_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT16_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM1_POLARITY.VALUE=3 -DRIVER.HET.VAR.HET2_BIT26_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT18_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE0_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT0_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_PWM6_PIN_SELECT.VALUE=18 -DRIVER.HET.VAR.HET2_EDGE2_EVENT.VALUE=1 -DRIVER.HET.VAR.HET1_EDGE7_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT1_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_EDGE5_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET2_EDGE4_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT6_HRSHARE.VALUE=0x00000008 -DRIVER.HET.VAR.HET1_BIT30_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT22_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT14_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT4_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT1_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM7_DUTY_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT8_HRSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT0_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT4_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE7_PIN_SELECT.VALUE=23 -DRIVER.HET.VAR.HET2_PWM7_PERIOD.VALUE=1000.000 -DRIVER.HET.VAR.HET2_PWM3_ACTUALPERIOD.VALUE=1000.960 -DRIVER.HET.VAR.HET1_PWM3_DUTYTIME.VALUE=500.480 -DRIVER.HET.VAR.HET2_EDGE3_BOTH.VALUE=0 -DRIVER.HET.VAR.HET1_PWM1_DUTY_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM2_PERIOD_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT28_HRSHARE.VALUE=0x00004000 -DRIVER.HET.VAR.HET1_BIT26_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT18_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_CAP4_PIN_SELECT.VALUE=24 -DRIVER.HET.VAR.HET2_PWM0_PERIOD.VALUE=1000.000 -DRIVER.HET.VAR.HET1_PWM0_PIN_SELECT.VALUE=8 -DRIVER.HET.VAR.HET1_BIT21_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT13_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_LR_TIME.VALUE=800.000 -DRIVER.HET.VAR.HET2_EDGE0_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM3_ACTION.VALUE=3 -DRIVER.HET.VAR.HET1_BIT25_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT21_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_BIT17_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT13_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_PWM5_DUTY.VALUE=50 -DRIVER.HET.VAR.HET2_PWM1_PERIOD_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT20_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT12_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT11_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT24_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT16_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_PWM5_DUTYTIME.VALUE=500.480 -DRIVER.HET.VAR.HET2_RAM_BASE.VALUE=0xFF440000 -DRIVER.HET.VAR.HET2_PWM3_DUTY_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT7_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_PWM4_DUTY_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT31_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT23_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT15_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_CAP4_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_BIT8_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE1_PIN_SELECT.VALUE=11 -DRIVER.HET.VAR.HET1_CAP7_PIN_SELECT.VALUE=30 -DRIVER.HET.VAR.HET1_BIT31_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT23_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT15_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE7_EVENT.VALUE=1 -DRIVER.HET.VAR.HET2_BIT2_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE4_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET2_BIT31_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_BIT23_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_BIT15_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_BIT10_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_CAP6_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_PWM2_POLARITY.VALUE=3 -DRIVER.HET.VAR.HET2_BIT26_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT18_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT0_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM4_PERIOD.VALUE=1000.000 -DRIVER.HET.VAR.HET1_BIT30_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT22_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT14_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE1_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM7_PERIOD_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE2_BOTH.VALUE=0 -DRIVER.HET.VAR.HET1_BIT26_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT18_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM1_DUTY_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT24_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT16_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT5_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_RAM_PARITY_ENA.VALUE=0x0000000A -DRIVER.HET.VAR.HET1_PWM7_PERIOD_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM0_DUTY.VALUE=50 -DRIVER.HET.VAR.HET2_PWM0_ACTUALPERIOD.VALUE=1000.960 -DRIVER.HET.VAR.HET2_BIT1_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_CAP1_PIN_SELECT.VALUE=2 -DRIVER.HET.VAR.HET1_PWM7_PERIOD_PRESCALER.VALUE=99968 -DRIVER.HET.VAR.HET1_BIT2_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_PWM6_PERIOD_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM4_POLARITY.VALUE=3 -DRIVER.HET.VAR.HET2_BIT10_HRSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM7_DUTY_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT10_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE7_PIN_SELECT.VALUE=23 -DRIVER.HET.VAR.HET1_BIT24_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT16_PDR.VALUE=0x00010000 -DRIVER.HET.VAR.HET1_BIT5_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_PWM7_PERIOD_PRESCALER.VALUE=99968 -DRIVER.HET.VAR.HET2_PWM7_DUTY_PRESCALER.VALUE=50176 -DRIVER.HET.VAR.HET2_PWM4_ACTION.VALUE=3 -DRIVER.HET.VAR.HET2_BIT3_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE5_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT6_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM6_ACTUALPERIOD.VALUE=1000.960 -DRIVER.HET.VAR.HET2_EDGE4_BOTH.VALUE=0 -DRIVER.HET.VAR.HET2_PWM1_PERIOD_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT11_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE1_EVENT.VALUE=1 -DRIVER.HET.VAR.HET2_LR_PRESCALE.VALUE=7 -DRIVER.HET.VAR.HET2_PWM2_PIN_SELECT.VALUE=12 -DRIVER.HET.VAR.HET2_BIT1_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT31_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT23_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT15_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM6_DUTYTIME.VALUE=500.480 -DRIVER.HET.VAR.HET2_EDGE2_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM4_DUTY_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT30_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_BIT27_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT22_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_BIT19_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT14_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_EDGE2_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM6_DUTY.VALUE=50 -DRIVER.HET.VAR.HET2_BIT8_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM4_DUTY_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT9_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE1_PIN_SELECT.VALUE=11 -DRIVER.HET.VAR.HET1_BIT25_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT17_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT8_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_PWM4_PERIOD_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM0_ENA.VALUE=0 -DRIVER.HET.VAR.HET2_BIT30_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT22_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT14_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT2_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM5_PERIOD.VALUE=1000.000 -DRIVER.HET.VAR.HET2_BIT0_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM5_PIN_SELECT.VALUE=17 -DRIVER.HET.VAR.HET1_BIT25_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT17_PDR.VALUE=0x00020000 -DRIVER.HET.VAR.HET2_PWM6_DUTY_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT4_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE1_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_CAP7_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_BIT28_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT24_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT16_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT24_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_BIT20_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT16_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_BIT12_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM4_DUTY_PRESCALER.VALUE=50176 -DRIVER.HET.VAR.HET1_PWM1_ACTION.VALUE=3 -DRIVER.HET.VAR.HET2_BIT28_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT0_HRSHARE.VALUE=0x00000001 -DRIVER.HET.VAR.HET1_EDGE7_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_PWM1_DUTY_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE6_PIN_SELECT.VALUE=22 -DRIVER.HET.VAR.HET2_BIT27_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT19_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT2_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_DIS_BLACKBOX.VALUE=0 -DRIVER.HET.VAR.HET1_BIT24_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT16_PSL.VALUE=0x00010000 -DRIVER.HET.VAR.HET2_EDGE3_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE6_EVENT.VALUE=1 -DRIVER.HET.VAR.HET1_EDGE3_BOTH.VALUE=0 -DRIVER.HET.VAR.HET1_PWM6_PERIOD_PRESCALER.VALUE=99968 -DRIVER.HET.VAR.HET1_BIT28_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT21_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT13_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM5_POLARITY.VALUE=3 -DRIVER.HET.VAR.HET1_PWM1_DUTY.VALUE=50 -DRIVER.HET.VAR.HET1_BIT20_HRSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT12_HRSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_CAP3_PIN_SELECT.VALUE=6 -DRIVER.HET.VAR.HET2_BIT10_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT2_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_PWM3_ACTUALPERIOD.VALUE=1000.960 -DRIVER.HET.VAR.HET2_EDGE3_EVENT.VALUE=1 -DRIVER.HET.VAR.HET2_PWM6_PERIOD_PRESCALER.VALUE=99968 -DRIVER.HET.VAR.HET2_PWM3_DUTY_PRESCALER.VALUE=50176 -DRIVER.HET.VAR.HET1_BIT3_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_PWM1_ENA.VALUE=0 -DRIVER.HET.VAR.HET2_BIT1_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT26_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT18_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT6_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_PWM1_DUTYTIME.VALUE=500.480 -DRIVER.HET.VAR.HET2_BIT5_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM7_POLARITY.VALUE=3 -DRIVER.HET.VAR.HET2_BIT24_HRSHARE.VALUE=0x00001000 -DRIVER.HET.VAR.HET2_BIT16_HRSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_CAP0_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_BIT4_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE0_PIN_SELECT.VALUE=9 -DRIVER.HET.VAR.HET2_BIT10_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_CAP6_PIN_SELECT.VALUE=28 -DRIVER.HET.VAR.HET1_PWM2_PERIOD.VALUE=1000.000 -DRIVER.HET.VAR.HET2_EDGE5_BOTH.VALUE=0 -DRIVER.HET.VAR.HET2_BIT21_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT13_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT3_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE0_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET2_PWM7_ACTUALPERIOD.VALUE=1000.960 -DRIVER.HET.VAR.HET2_BIT3_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT25_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT17_PSL.VALUE=0x00020000 -DRIVER.HET.VAR.HET2_EDGE4_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT31_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_BIT29_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT23_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_BIT15_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_BIT0_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_CAP2_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET2_PWM7_DUTY.VALUE=50 -DRIVER.HET.VAR.HET2_BIT6_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM4_PERIOD_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT11_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT26_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT18_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_PWM6_PERIOD_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM2_ACTION.VALUE=3 -DRIVER.HET.VAR.HET2_BIT9_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_PWM7_DUTY_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM3_PERIOD_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM2_ENA.VALUE=0 -DRIVER.HET.VAR.HET2_BIT20_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT12_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE3_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM7_PIN_SELECT.VALUE=19 -DRIVER.HET.VAR.HET2_BIT2_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_CAP0_PIN_SELECT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT27_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT19_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT6_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM0_DUTY_PRESCALER.VALUE=50176 -DRIVER.HET.VAR.HET2_EDGE7_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM0_POLARITY.VALUE=3 -DRIVER.HET.VAR.HET1_BIT26_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT18_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT10_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE6_PIN_SELECT.VALUE=22 -DRIVER.HET.VAR.HET1_PWM0_ACTUALPERIOD.VALUE=1000.960 -DRIVER.HET.VAR.HET2_HR_FREQUENCY.VALUE=100.000 -DRIVER.HET.VAR.HET2_BIT30_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT25_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_BIT22_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT17_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_BIT14_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM5_PERIOD_PRESCALER.VALUE=99968 -DRIVER.HET.VAR.HET2_EDGE4_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET2_EDGE0_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT7_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT4_HRSHARE.VALUE=0x00000004 -DRIVER.HET.VAR.HET1_BIT2_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT28_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT4_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT26_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT18_PSL.VALUE=0x00000000 -DRIVER.RTP.VAR.RTP_PORT_BIT1_DOUT.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT3_FUN.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT1_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT5_DIR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT14_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT11_DIR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT3_PDR.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT8_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT4_FUN.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT6_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT2_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT10_FUN.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT6_DIR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT14_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT12_DIR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT17_DOUT.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT4_PDR.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT10_PDR.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT2_DOUT.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT5_FUN.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT3_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT11_FUN.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT7_DIR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT13_DIR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT5_PDR.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT11_PDR.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT9_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT6_FUN.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT12_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT4_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT12_FUN.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT8_DIR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT10_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT15_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT14_DIR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT18_DOUT.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT6_PDR.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT0_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT4_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT12_PDR.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT3_DOUT.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT7_FUN.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT5_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT13_FUN.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT9_DIR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT11_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT15_DIR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT7_PDR.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT13_PDR.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT8_FUN.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT6_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT14_FUN.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT12_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT16_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT16_DIR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT17_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT8_PDR.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT1_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT10_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT14_PDR.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT4_DOUT.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT9_FUN.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT7_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT15_FUN.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT9_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT13_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT10_DOUT.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT17_DIR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT2_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT9_PDR.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT15_PDR.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT8_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT16_FUN.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT14_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT18_DIR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT17_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_BASE_PORT.VALUE=0xFFFFFA38 -DRIVER.RTP.VAR.RTP_PORT_BIT2_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT16_PDR.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT5_DOUT.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT9_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT17_FUN.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT15_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT15_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT11_DOUT.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT17_PDR.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT7_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT18_FUN.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT16_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT18_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT3_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT18_PDR.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT6_DOUT.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT17_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT12_DOUT.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT13_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT18_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT4_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT5_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT7_DOUT.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT10_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT13_DOUT.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT18_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT5_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT11_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT8_DOUT.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT0_DIR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT11_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT14_DOUT.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT3_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT1_DIR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT6_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT0_FUN.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT9_DOUT.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT2_DIR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT12_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT16_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT15_DOUT.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT0_PDR.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT0_DOUT.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT1_FUN.VALUE=0 -DRIVER.RTP.VAR.RTP_BASE.VALUE=0xFFFFFA00 -DRIVER.RTP.VAR.RTP_PORT_BIT3_DIR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT8_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT1_PDR.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT7_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT2_FUN.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT0_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT4_DIR.VALUE=0 -DRIVER.RTP.VAR.RTP_BASE_RAM.VALUE=0xFFF83000 -DRIVER.RTP.VAR.RTP_PORT_BIT13_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT10_DIR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT16_DOUT.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT2_PDR.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT14_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT17_DOUT.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT17_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT4_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT1_DIR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT18_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT0_FUN.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT15_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT4_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT2_DIR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT7_DOUT.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT15_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT18_DOUT.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT0_PDR.VALUE=1 -DRIVER.DMM.VAR.DMM_BASE.VALUE=0xFFFFF700 -DRIVER.DMM.VAR.DMM_PORT_BIT1_FUN.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT3_DIR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT9_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT1_PDR.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT2_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT2_FUN.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT0_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT5_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT4_DIR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT8_DOUT.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT16_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT2_PDR.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT13_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT3_FUN.VALUE=1 -DRIVER.DMM.VAR.DMM_BASE_PORT.VALUE=0xFFFFF770 -DRIVER.DMM.VAR.DMM_PORT_BIT1_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT5_DIR.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT10_DOUT.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT3_PDR.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT4_FUN.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT2_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT6_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT6_DIR.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT7_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT9_DOUT.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT17_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT4_PDR.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT5_FUN.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT3_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT0_DOUT.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT7_DIR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT18_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT11_DOUT.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT11_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT5_PDR.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT6_FUN.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT4_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT8_DIR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT7_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT18_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT6_PDR.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT10_DIR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT7_FUN.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT5_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT5_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT1_DOUT.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT9_DIR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT12_DOUT.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT7_PDR.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT11_DIR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT8_FUN.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT16_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT6_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT8_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT10_FUN.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT8_PDR.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT12_DIR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT9_FUN.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT10_PDR.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT7_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT2_DOUT.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT10_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT13_DOUT.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT11_FUN.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT9_PDR.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT13_DIR.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT3_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT11_PDR.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT8_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT9_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT12_FUN.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT10_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT14_DIR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT14_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT0_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT12_PDR.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT9_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT3_DOUT.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT11_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT14_DOUT.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT13_FUN.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT11_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT15_DIR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT13_PDR.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT8_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT14_FUN.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT12_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT16_DIR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT1_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT14_PDR.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT4_DOUT.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT12_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT15_DOUT.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT15_FUN.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT12_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT13_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT17_DIR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT15_PDR.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT16_FUN.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT14_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT18_DIR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT2_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT6_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT16_PDR.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT5_DOUT.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT13_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT16_DOUT.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT17_FUN.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT15_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT17_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT17_PDR.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT10_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT18_FUN.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT16_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT3_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT0_DIR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT18_PDR.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT6_DOUT.VALUE=1 -DRIVER.I2C.VAR.I2C1_STOPBITS.VALUE=2 -DRIVER.I2C.VAR.I2C1_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.I2C.VAR.I2C1_BASE_PORT.VALUE=0xFFF7D44C -DRIVER.I2C.VAR.I2C2_PARITYENA.VALUE=0 -DRIVER.I2C.VAR.I2C1_DATACOUNT.VALUE=8 -DRIVER.I2C.VAR.I2C2_PORT_BIT0_PULL.VALUE=2 -DRIVER.I2C.VAR.I2C1_IGNACK.VALUE=0 -DRIVER.I2C.VAR.I2C1_ADDRMODE.VALUE=7BIT_AMODE -DRIVER.I2C.VAR.I2C2_ALINTLVL.VALUE=0 -DRIVER.I2C.VAR.I2C2_TXDMA.VALUE=0 -DRIVER.I2C.VAR.I2C1_BC_VALUE.VALUE=0x0003 -DRIVER.I2C.VAR.I2C1_TXRX_VALUE.VALUE=0 -DRIVER.I2C.VAR.I2C2_ICXRDYINTLVL.VALUE=0 -DRIVER.I2C.VAR.I2C2_MODCLK.VALUE=8 -DRIVER.I2C.VAR.I2C2_PORT_BIT1_PULL.VALUE=2 -DRIVER.I2C.VAR.I2C2_PORT_BIT0_DIR.VALUE=0 -DRIVER.I2C.VAR.I2C1_ALINTENA.VALUE=1 -DRIVER.I2C.VAR.I2C1_PRESCALE.VALUE=12 -DRIVER.I2C.VAR.I2C2_ARDYINTENA.VALUE=1 -DRIVER.I2C.VAR.I2C2_PORT_BIT1_DIR.VALUE=0 -DRIVER.I2C.VAR.I2C2_PORT_BIT0_FUN.VALUE=0 -DRIVER.I2C.VAR.I2C1_MSMODE.VALUE=1 -DRIVER.I2C.VAR.I2C1_AASLVL.VALUE=0 -DRIVER.I2C.VAR.I2C2_PORT_BIT0_PDR.VALUE=1 -DRIVER.I2C.VAR.I2C2_RM_ENA.VALUE=0 -DRIVER.I2C.VAR.I2C2_PORT_BIT1_FUN.VALUE=0 -DRIVER.I2C.VAR.I2C2_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.I2C.VAR.I2C2_SCDLVL.VALUE=0 -DRIVER.I2C.VAR.I2C2_PORT_BIT1_PDR.VALUE=1 -DRIVER.I2C.VAR.I2C2_STPCND.VALUE=1 -DRIVER.I2C.VAR.I2C1_ALINTLVL.VALUE=0 -DRIVER.I2C.VAR.I2C2_PORT_BIT0_PSL.VALUE=1 -DRIVER.I2C.VAR.I2C1_ARDYINTENA.VALUE=1 -DRIVER.I2C.VAR.I2C2_ARDYINTLVL.VALUE=0 -DRIVER.I2C.VAR.I2C1_ICRRDYINTENA.VALUE=1 -DRIVER.I2C.VAR.I2C2_BASE_PORT.VALUE=0xFFF7D54C -DRIVER.I2C.VAR.I2C1_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.I2C.VAR.I2C2_PORT_BIT1_PSL.VALUE=1 -DRIVER.I2C.VAR.I2C2_DATACOUNT.VALUE=8 -DRIVER.I2C.VAR.I2C1_LENGTH.VALUE=8 -DRIVER.I2C.VAR.I2C1_TXRX.VALUE=TRANSMITTER -DRIVER.I2C.VAR.I2C2_NACKINTENA.VALUE=1 -DRIVER.I2C.VAR.I2C2_IGNACK.VALUE=0 -DRIVER.I2C.VAR.I2C1_PORT_BIT0_DOUT.VALUE=1 -DRIVER.I2C.VAR.I2C1_STACND.VALUE=1 -DRIVER.I2C.VAR.I2C2_TXRX.VALUE=TRANSMITTER -DRIVER.I2C.VAR.I2C1_PORT_BIT0_DIR.VALUE=0 -DRIVER.I2C.VAR.I2C1_ARDYINTLVL.VALUE=0 -DRIVER.I2C.VAR.I2C1_ICRRDYINTLVL.VALUE=0 -DRIVER.I2C.VAR.I2C1_PARITYENA.VALUE=0 -DRIVER.I2C.VAR.I2C1_BASE.VALUE=0xFFF7D400 -DRIVER.I2C.VAR.I2C1_PORT_BIT1_DIR.VALUE=0 -DRIVER.I2C.VAR.I2C1_PORT_BIT1_DOUT.VALUE=1 -DRIVER.I2C.VAR.I2C1_ICXRDYINTENA.VALUE=1 -DRIVER.I2C.VAR.I2C1_PORT_BIT0_FUN.VALUE=0 -DRIVER.I2C.VAR.I2C1_NACKINTENA.VALUE=1 -DRIVER.I2C.VAR.I2C2_NACKINTLVL.VALUE=0 -DRIVER.I2C.VAR.I2C2_BAUDRATE.VALUE=400 -DRIVER.I2C.VAR.I2C1_AAS.VALUE=1 -DRIVER.I2C.VAR.I2C1_BCM.VALUE=1 -DRIVER.I2C.VAR.I2C1_PORT_BIT0_PDR.VALUE=1 -DRIVER.I2C.VAR.I2C2_MSMODE.VALUE=1 -DRIVER.I2C.VAR.I2C2_STOPBITS.VALUE=2 -DRIVER.I2C.VAR.I2C1_BC.VALUE=8_BIT -DRIVER.I2C.VAR.I2C1_PORT_BIT1_FUN.VALUE=0 -DRIVER.I2C.VAR.I2C2_EVENPARITY.VALUE=0 -DRIVER.I2C.VAR.I2C2_ICRRDYINTENA.VALUE=1 -DRIVER.I2C.VAR.I2C1_FDF.VALUE=0 -DRIVER.I2C.VAR.I2C2_BASE.VALUE=0xFFF7D500 -DRIVER.I2C.VAR.I2C2_AASLVL.VALUE=0 -DRIVER.I2C.VAR.I2C2_AAS.VALUE=1 -DRIVER.I2C.VAR.I2C1_ICCH.VALUE=5 -DRIVER.I2C.VAR.I2C2_BCM.VALUE=1 -DRIVER.I2C.VAR.I2C2_BC.VALUE=8_BIT -DRIVER.I2C.VAR.I2C1_MODCLK.VALUE=8 -DRIVER.I2C.VAR.I2C1_ADDRMODE_VALUE.VALUE=0x0001 -DRIVER.I2C.VAR.I2C2_PORT_BIT0_DOUT.VALUE=1 -DRIVER.I2C.VAR.I2C1_ICCL.VALUE=5 -DRIVER.I2C.VAR.I2C1_PORT_BIT1_PDR.VALUE=1 -DRIVER.I2C.VAR.I2C2_ADDRMODE.VALUE=7BIT_AMODE -DRIVER.I2C.VAR.I2C2_FDF.VALUE=0 -DRIVER.I2C.VAR.I2C1_PORT_BIT0_PSL.VALUE=1 -DRIVER.I2C.VAR.I2C1_RXDMA.VALUE=0 -DRIVER.I2C.VAR.I2C1_PORT_BIT1_PSL.VALUE=1 -DRIVER.I2C.VAR.I2C2_BC_VALUE.VALUE=0x0003 -DRIVER.I2C.VAR.I2C1_PORT_BIT0_PULL.VALUE=2 -DRIVER.I2C.VAR.I2C1_ICXRDYINTLVL.VALUE=0 -DRIVER.I2C.VAR.I2C2_ICCH.VALUE=5 -DRIVER.I2C.VAR.I2C1_NACKINTLVL.VALUE=0 -DRIVER.I2C.VAR.I2C2_ICCL.VALUE=5 -DRIVER.I2C.VAR.I2C2_PORT_BIT1_DOUT.VALUE=1 -DRIVER.I2C.VAR.I2C1_SCD.VALUE=1 -DRIVER.I2C.VAR.I2C1_TXDMA.VALUE=0 -DRIVER.I2C.VAR.I2C2_LENGTH.VALUE=8 -DRIVER.I2C.VAR.I2C1_EVENPARITY.VALUE=0 -DRIVER.I2C.VAR.I2C1_RM_ENA.VALUE=0 -DRIVER.I2C.VAR.I2C2_ICRRDYINTLVL.VALUE=0 -DRIVER.I2C.VAR.I2C2_ALINTENA.VALUE=1 -DRIVER.I2C.VAR.I2C2_PRESCALE.VALUE=12 -DRIVER.I2C.VAR.I2C2_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.I2C.VAR.I2C1_SCDLVL.VALUE=0 -DRIVER.I2C.VAR.I2C2_SCD.VALUE=1 -DRIVER.I2C.VAR.I2C1_PORT_BIT1_PULL.VALUE=2 -DRIVER.I2C.VAR.I2C2_TXRX_VALUE.VALUE=0 -DRIVER.I2C.VAR.I2C1_STPCND.VALUE=1 -DRIVER.I2C.VAR.I2C2_ICXRDYINTENA.VALUE=1 -DRIVER.I2C.VAR.I2C2_ADDRMODE_VALUE.VALUE=0x0001 -DRIVER.I2C.VAR.I2C1_BAUDRATE.VALUE=400 -DRIVER.I2C.VAR.I2C2_STACND.VALUE=1 -DRIVER.I2C.VAR.I2C2_RXDMA.VALUE=0 -DRIVER.DCC.VAR.DCC1_ENABLE_KEY.VALUE=10 -DRIVER.DCC.VAR.PINMUX_BASE.VALUE=0xFFFFEA00 -DRIVER.DCC.VAR.DCC1_DETECTION_TIME.VALUE=3000.00 -DRIVER.DCC.VAR.DCC1_CLOCK_SOURCE1_VALUE.VALUE=0x0002 -DRIVER.DCC.VAR.DCC1_ENABLE_ERROR_INTERRUPT.VALUE=0xA -DRIVER.DCC.VAR.DCC2_ENABLE.VALUE=0xA -DRIVER.DCC.VAR.PINMUX_BASE_PORT.VALUE=0xFFFFEA40 -DRIVER.DCC.VAR.DCC2_ENABLE_ERROR_INTERRUPT.VALUE=0xA -DRIVER.DCC.VAR.DCC2_CLOCK_SOURCE0_VALUE.VALUE=0x0001 -DRIVER.DCC.VAR.DCC2_CLOCK_SOURCE0_FREQ.VALUE=20.0 -DRIVER.DCC.VAR.DCC2_VALID0_SEED.VALUE=396 -DRIVER.DCC.VAR.DCC2_CLKT_N2HET2_0_FREQ.VALUE=0.032875 -DRIVER.DCC.VAR.DCC2_CLOCK_SOURCE1_FREQ.VALUE=0.032875 -DRIVER.DCC.VAR.DCC2_DETECTION_TIME.VALUE=1000.00 -DRIVER.DCC.VAR.DCC2_CLOCK_DRIFT.VALUE=1.002 -DRIVER.DCC.VAR.DCC2_CLOCK_SOURCE1_VALUE.VALUE=0x0002 -DRIVER.DCC.VAR.DCC1_CLKT_N2HET1_31_FREQ.VALUE=25.0 -DRIVER.DCC.VAR.DCC2_COUNT0_SEED.VALUE=19582 -DRIVER.DCC.VAR.DCC2_CLOCK_SOURCE0.VALUE=OSCIN -DRIVER.DCC.VAR.DCC2_CLOCK_SOURCE1.VALUE=N2HET2_0 -DRIVER.DCC.VAR.DCC1_CLOCK_SOURCE0_FREQ.VALUE=20.0 -DRIVER.DCC.VAR.DCC1_VALID0_SEED.VALUE=4 -DRIVER.DCC.VAR.DCC1_BASE.VALUE=0xFFFFEC00 -DRIVER.DCC.VAR.DCC2_COUNT1_SEED.VALUE=33 -DRIVER.DCC.VAR.DCC1_CLOCK_SOURCE1_FREQ.VALUE=25.0 -DRIVER.DCC.VAR.DCC1_CLOCK_DRIFT.VALUE=0.004 -DRIVER.DCC.VAR.DCC1_ENABLE.VALUE=0xA -DRIVER.DCC.VAR.DCC1_ENABLE_SINGLESHOT_MODE.VALUE=0x5 -DRIVER.DCC.VAR.DCC2_ENABLE_SINGLESHOT_MODE.VALUE=0xA -DRIVER.DCC.VAR.DCC2_BASE.VALUE=0xFFFFF400 -DRIVER.DCC.VAR.DCC1_DONE_INTERRUPT_ENABLE.VALUE=0xA -DRIVER.DCC.VAR.DCC2_DONE_INTERRUPT_ENABLE.VALUE=0xA -DRIVER.DCC.VAR.DCC2_ENABLE_KEY.VALUE=5 -DRIVER.DCC.VAR.DCC1_COUNT0_SEED.VALUE=59978 -DRIVER.DCC.VAR.DCC1_CLOCK_SOURCE0_VALUE.VALUE=0x0001 -DRIVER.DCC.VAR.DCC1_CLOCK_SOURCE0.VALUE=OSCIN -DRIVER.DCC.VAR.DCC1_CLOCK_SOURCE1.VALUE=EXTCLKIN1 -DRIVER.DCC.VAR.CLKT_TCK_FREQ.VALUE=12.0 -DRIVER.DCC.VAR.DCC1_COUNT1_SEED.VALUE=74975 -DRIVER.PINMUX.VAR.EQEP2A_FILTER.VALUE=0 -DRIVER.PINMUX.VAR.MUX61_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX53_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX45_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX37_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX29_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX7_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX61_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX53_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX45_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX37_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX29_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX7_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_SOC4A_SELECT.VALUE=ON -DRIVER.PINMUX.VAR.ETPWM_TIME_BASE_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX61_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX53_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX50_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX45_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX42_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX37_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX34_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX29_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX26_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX18_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX61_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX53_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX45_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX37_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX29_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX61_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX53_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX45_OPTION4.VALUE=1 -DRIVER.PINMUX.VAR.MUX37_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX29_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX61_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX53_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX45_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX37_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX29_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX99_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_96_SELECT.VALUE=4 -DRIVER.PINMUX.VAR.PIN_MUX_88_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_5_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX30_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX22_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX14_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX30_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX22_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX14_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX30_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX22_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX14_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_81_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_73_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_65_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_57_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_49_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX30_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX22_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX14_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL5_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX30_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX22_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX14_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL5_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX30_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX22_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX14_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX101_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL55_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL47_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL39_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_50_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_42_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_34_SELECT.VALUE=5 -DRIVER.PINMUX.VAR.PIN_MUX_26_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_18_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.ECAP5_FILTER.VALUE=0 -DRIVER.PINMUX.VAR.EMIF_OUTPUT_ENABLE_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.PINMUX10.VALUE="PINMUX_BALL_K17_EMIF_nCS_3 | PINMUX_BALL_M17_EMIF_nCS_4 | PINMUX_BALL_R3_EMIF_nRAS | PINMUX_BALL_P3_EMIF_nWAIT" -DRIVER.PINMUX.VAR.MUX11_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL40_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL32_SELECT.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL24_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL16_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_11_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX11.VALUE="PINMUX_BALL_D17_EMIF_nWE | PINMUX_BALL_E9_ETMDATA_08 | PINMUX_BALL_E8_ETMDATA_09 | PINMUX_BALL_E7_ETMDATA_10" -DRIVER.PINMUX.VAR.PINMUX20.VALUE="PINMUX_BALL_M1_GIOA_7 | PINMUX_BALL_F2_GIOB_2 | PINMUX_BALL_W10_GIOB_3 | PINMUX_BALL_J2_GIOB_6" -DRIVER.PINMUX.VAR.PINMUX12.VALUE="PINMUX_BALL_E6_ETMDATA_11 | PINMUX_BALL_E13_ETMDATA_12 | PINMUX_BALL_E12_ETMDATA_13 | PINMUX_BALL_E11_ETMDATA_14" -DRIVER.PINMUX.VAR.PINMUX21.VALUE="PINMUX_BALL_F1_GIOB_7 | PINMUX_BALL_R2_MIBSPI1SOMI_1 | PINMUX_BALL_F3_MIBSPI1NCS_1 | PINMUX_BALL_G3_MIBSPI1NCS_2" -DRIVER.PINMUX.VAR.PINMUX13.VALUE="PINMUX_BALL_E10_ETMDATA_15 | PINMUX_BALL_K15_ETMDATA_16 | PINMUX_BALL_L15_ETMDATA_17 | PINMUX_BALL_M15_ETMDATA_18" -DRIVER.PINMUX.VAR.ECAP3_FILTER_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.PINMUX30.VALUE="PINMUX_BALL_E18_MIBSPI1SIMO_1 | PINMUX_BALL_V7_MIBSPI4NCS_3 | PINMUX_BALL_D19_MIBSPI4NCS_4 | PINMUX_BALL_E3_MIBSPI3NCS_4" -DRIVER.PINMUX.VAR.PINMUX22.VALUE="PINMUX_BALL_J3_MIBSPI1NCS_3 | PINMUX_BALL_G19_MIBSPI1NENA | PINMUX_BALL_V9_MIBSPI3CLK | PINMUX_BALL_V10_MIBSPI3NCS_0" -DRIVER.PINMUX.VAR.PINMUX14.VALUE="PINMUX_BALL_N15_ETMDATA_19 | PINMUX_BALL_E5_ETMDATA_20 | PINMUX_BALL_F5_ETMDATA_21 | PINMUX_BALL_G5_ETMDATA_22" -DRIVER.PINMUX.VAR.MUX92_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX84_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX76_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX68_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX31.VALUE="PINMUX_BALL_B4_MIBSPI4NCS_5 | PINMUX_BALL_N2_N2HET1_13 | PINMUX_BALL_N1_MIBSPI1NCS_4 | PINMUX_BALL_A4_N2HET1_16" -DRIVER.PINMUX.VAR.PINMUX23.VALUE="PINMUX_BALL_V5_MIBSPI3NCS_1 | PINMUX_BALL_B2_MIBSPI3NCS_2 | PINMUX_BALL_C3_MIBSPI3NCS_3 | PINMUX_BALL_W9_MIBSPI3NCS_5" -DRIVER.PINMUX.VAR.PINMUX15.VALUE="PINMUX_BALL_K5_ETMDATA_23 | PINMUX_BALL_L5_ETMDATA_24 | PINMUX_BALL_M5_ETMDATA_25 | PINMUX_BALL_N5_ETMDATA_26" -DRIVER.PINMUX.VAR.PINMUX32.VALUE="PINMUX_BALL_A13_N2HET1_17 | PINMUX_BALL_J1_N2HET1_18 | PINMUX_BALL_B13_N2HET1_19 | PINMUX_BALL_P2_N2HET1_20" -DRIVER.PINMUX.VAR.PINMUX24.VALUE="PINMUX_BALL_W8_MIBSPI3SIMO | PINMUX_BALL_V8_MIBSPI3SOMI | PINMUX_BALL_H19_MIBSPI5CLK | PINMUX_BALL_E19_MIBSPI5NCS_0" -DRIVER.PINMUX.VAR.PINMUX16.VALUE="PINMUX_BALL_P5_ETMDATA_27 | PINMUX_BALL_R5_ETMDATA_28 | PINMUX_BALL_R6_ETMDATA_29 | PINMUX_BALL_R7_ETMDATA_30" -DRIVER.PINMUX.VAR.SIGNAL56_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL48_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX131_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX123_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX115_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX107_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX33.VALUE="PINMUX_BALL_H4_N2HET1_21 | PINMUX_BALL_B3_N2HET1_22 | PINMUX_BALL_J4_N2HET1_23 | PINMUX_BALL_P1_N2HET1_24" -DRIVER.PINMUX.VAR.PINMUX25.VALUE="PINMUX_BALL_B6_MIBSPI5NCS_1 | PINMUX_BALL_W6_MIBSPI5NCS_2 | PINMUX_BALL_T12_MIBSPI5NCS_3 | PINMUX_BALL_H18_MIBSPI5NENA" -DRIVER.PINMUX.VAR.PINMUX17.VALUE="PINMUX_BALL_R8_ETMDATA_31 | PINMUX_BALL_R9_ETMTRACECLKIN | PINMUX_BALL_R10_ETMTRACECLKOUT | PINMUX_BALL_R11_ETMTRACECTL" -DRIVER.PINMUX.VAR.SIGNAL56_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL48_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX131_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX123_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX115_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX107_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.GIOB6_DMA_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.EQEP2B_FILTER_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.ETPWM7_EQEPERR_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.PINMUX34.VALUE="PINMUX_BALL_A14_N2HET1_26 | PINMUX_BALL_K19_N2HET1_28 | PINMUX_BALL_B11_N2HET1_30 | PINMUX_BALL_D8_N2HET2_01" -DRIVER.PINMUX.VAR.PINMUX26.VALUE="PINMUX_BALL_J19_MIBSPI5SIMO_0 | PINMUX_BALL_E16_MIBSPI5SIMO_1 | PINMUX_BALL_H17_MIBSPI5SIMO_2 | PINMUX_BALL_G17_MIBSPI5SIMO_3" -DRIVER.PINMUX.VAR.PINMUX18.VALUE="PINMUX_BALL_B15_FRAYTX1 | PINMUX_BALL_B8_FRAYTX2 | PINMUX_BALL_B16_FRAYTXEN1 | PINMUX_BALL_B9_FRAYTXEN2" -DRIVER.PINMUX.VAR.MUX131_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX123_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX115_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX107_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX35.VALUE="PINMUX_BALL_D7_N2HET2_02 | PINMUX_BALL_D3_MIBSPI2NCS_1 | PINMUX_BALL_D2_MIBSPI2SOMI | PINMUX_BALL_D1_MIBSPI2SIMO" -DRIVER.PINMUX.VAR.PINMUX27.VALUE="PINMUX_BALL_J18_MIBSPI5SOMI_0 | PINMUX_BALL_E17_MIBSPI5SOMI_1 | PINMUX_BALL_H16_MIBSPI5SOMI_2 | PINMUX_BALL_G16_MIBSPI5SOMI_3" -DRIVER.PINMUX.VAR.PINMUX19.VALUE="PINMUX_BALL_C1_GIOA_2 | PINMUX_BALL_E1_GIOA_3 | PINMUX_BALL_B5_GIOA_5 | PINMUX_BALL_H3_GIOA_6" -DRIVER.PINMUX.VAR.MUX131_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX123_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX115_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX107_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX36.VALUE="PINMUX_BALL_P4_N2HET2_19 | PINMUX_BALL_T5_N2HET2_20 | PINMUX_BALL_T4_MII_RXCLK | PINMUX_BALL_U7_MII_TX_CLK" -DRIVER.PINMUX.VAR.PINMUX28.VALUE="PINMUX_BALL_K18_MIBSPI4CLK | PINMUX_BALL_V2_N2HET1_01 | PINMUX_BALL_W5_MIBSPI4SIMO | PINMUX_BALL_U1_MIBSPI4NCS_0" -DRIVER.PINMUX.VAR.MUX131_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX123_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX115_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX107_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX98_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX37.VALUE="PINMUX_BALL_E2_MIBSPI2CLK | PINMUX_BALL_N3_MIBSPI2NCS_0" -DRIVER.PINMUX.VAR.PINMUX29.VALUE="PINMUX_BALL_B12_MIBSPI4NCS_1 | PINMUX_BALL_V6_MIBSPI4SOMI | PINMUX_BALL_W3_N2HET1_06 | PINMUX_BALL_T1_MIBSPI4NCS_2" -DRIVER.PINMUX.VAR.MUX131_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX123_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX115_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX107_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX98_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX98_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX7_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL3_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX98_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX80.VALUE=SIGNAL_AD2EVT_T10 -DRIVER.PINMUX.VAR.SIGNAL41_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL33_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL25_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL17_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX100_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX98_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.TEMP2_ENABLE.VALUE=1 -DRIVER.PINMUX.VAR.PINMUX81.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL41_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL33_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL25_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL17_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX100_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX98_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX90.VALUE="SIGNAL_MII_RX_DV_U6 | SIGNAL_MII_RX_ER_U5 | SIGNAL_MII_RXCLK_T4 | SIGNAL_MII_RXD_0_U4" -DRIVER.PINMUX.VAR.PINMUX82.VALUE=0 -DRIVER.PINMUX.VAR.MUX127_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX119_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX100_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_133_SELECT.VALUE=1 -DRIVER.PINMUX.VAR.PIN_MUX_125_SELECT.VALUE=1 -DRIVER.PINMUX.VAR.PIN_MUX_117_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_109_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX91.VALUE="SIGNAL_MII_RXD_1_T3 | SIGNAL_MII_RXD_2_U3 | SIGNAL_MII_RXD_3_V3 | SIGNAL_MII_TX_CLK_U7" -DRIVER.PINMUX.VAR.PINMUX83.VALUE=SIGNAL_GIOA_0_A5 -DRIVER.PINMUX.VAR.MUX100_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX92.VALUE="SIGNAL_N2HET1_17_F3 | SIGNAL_N2HET1_19_G3 | SIGNAL_N2HET1_21_H4 | SIGNAL_N2HET1_23_J4" -DRIVER.PINMUX.VAR.PINMUX84.VALUE="SIGNAL_GIOA_1_C2 | SIGNAL_GIOA_2_C1 | SIGNAL_GIOA_3_E1 | SIGNAL_GIOA_4_A6" -DRIVER.PINMUX.VAR.MUX100_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX91_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX83_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX75_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX67_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX59_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX93.VALUE="SIGNAL_N2HET1_25_M3 | SIGNAL_N2HET1_27_A9 | SIGNAL_N2HET1_29_A3 | SIGNAL_N2HET1_31_J17" -DRIVER.PINMUX.VAR.PINMUX85.VALUE="SIGNAL_GIOA_5_R9 | SIGNAL_GIOA_6_H3 | SIGNAL_GIOA_7_M1 | SIGNAL_GIOB_0_M2" -DRIVER.PINMUX.VAR.MUX100_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX91_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX83_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX75_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX67_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX59_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.GIOB0_DMA_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.GIOA2_DMA_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.PINMUX94.VALUE="SIGNAL_N2HET2_00_D6 | SIGNAL_N2HET2_01_D8 | SIGNAL_N2HET2_02_D7 | SIGNAL_N2HET2_03_E2" -DRIVER.PINMUX.VAR.PINMUX86.VALUE="SIGNAL_GIOB_1_K2 | SIGNAL_GIOB_2_B9 | SIGNAL_GIOB_3_W10 | SIGNAL_GIOB_4_G1" -DRIVER.PINMUX.VAR.MUX91_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX83_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX75_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX67_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX61_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX59_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX53_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX45_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX37_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX29_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_110_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_102_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX95.VALUE="SIGNAL_N2HET2_04_D13 | SIGNAL_N2HET2_05_D12 | SIGNAL_N2HET2_06_D11 | SIGNAL_N2HET2_07_N3" -DRIVER.PINMUX.VAR.PINMUX87.VALUE="SIGNAL_GIOB_5_G2 | SIGNAL_GIOB_6_J2 | SIGNAL_GIOB_7_F1 | SIGNAL_MDIO_F4" -DRIVER.PINMUX.VAR.MUX91_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX83_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX75_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX67_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX59_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM2_EQEPERR12.VALUE=EQEPERR12 -DRIVER.PINMUX.VAR.PINMUX96.VALUE="SIGNAL_N2HET2_08_K16 | SIGNAL_N2HET2_09_L16 | SIGNAL_N2HET2_10_M16 | SIGNAL_N2HET2_11_N16" -DRIVER.PINMUX.VAR.PINMUX88.VALUE="SIGNAL_MIBSPI1NCS_4_U10 | SIGNAL_MIBSPI1NCS_5_U9" -DRIVER.PINMUX.VAR.SIGNAL10_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX91_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX83_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX75_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX67_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX59_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX6_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX97.VALUE="SIGNAL_N2HET2_12_D3 | SIGNAL_N2HET2_13_D2 | SIGNAL_N2HET2_14_D1 | SIGNAL_N2HET2_15_K4" -DRIVER.PINMUX.VAR.PINMUX89.VALUE="SIGNAL_MII_COL_W4 | SIGNAL_MII_CRS_V4" -DRIVER.PINMUX.VAR.SIGNAL10_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX91_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX83_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX75_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX67_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX59_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX6_OPTION1.VALUE=1 -DRIVER.PINMUX.VAR.PINMUX98.VALUE="SIGNAL_N2HET2_16_L4 | SIGNAL_N2HET2_18_N4 | SIGNAL_N2HET2_20_T5 | SIGNAL_N2HET2_22_T7" -DRIVER.PINMUX.VAR.MUX6_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX99.VALUE="SIGNAL_nTZ1_1_N19 | SIGNAL_nTZ1_2_F1 | SIGNAL_nTZ1_3_J3" -DRIVER.PINMUX.VAR.MUX6_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.EQEP1A_FILTER.VALUE=0 -DRIVER.PINMUX.VAR.MUX60_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX52_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX44_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX36_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX28_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX6_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX60_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX52_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX44_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX36_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX28_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX6_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.EQEP1I_FILTER_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.ETPWM_SOC3A_SELECT.VALUE=ON -DRIVER.PINMUX.VAR.MUX60_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX52_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX44_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX36_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX28_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX60_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX52_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX44_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX36_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX28_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX60_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX52_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX44_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX36_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX28_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX60_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX52_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX44_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX36_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX28_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.TEMP3_ENABLE_SELECT.VALUE=ON -DRIVER.PINMUX.VAR.MUX120_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX112_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX104_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_94_SELECT.VALUE=1 -DRIVER.PINMUX.VAR.PIN_MUX_86_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_78_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_3_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX21_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX13_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX21_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX13_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM3_EQEPERR_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.GIOA_DISABLE_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX30_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX22_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX21_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX14_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX13_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_71_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_63_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_55_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_47_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_39_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX21_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX13_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL4_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX21_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX13_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL4_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX21_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX13_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX95_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX87_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX79_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL61_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL53_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL45_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL37_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL29_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_40_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_32_SELECT.VALUE=4 -DRIVER.PINMUX.VAR.PIN_MUX_24_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_16_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.ECAP3_FILTER.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM7_EQEPERR12.VALUE=EQEPERR12 -DRIVER.PINMUX.VAR.MUX129_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX129_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_TBCLK_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX129_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL30_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL22_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL14_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX129_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX129_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX129_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.I2C1.VALUE=0 -DRIVER.PINMUX.VAR.I2C2.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL55_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL47_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL39_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX130_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX122_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX114_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX106_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL55_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL47_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL39_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX130_OPTION1.VALUE=1 -DRIVER.PINMUX.VAR.MUX122_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX114_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX106_OPTION1.VALUE=1 -DRIVER.PINMUX.VAR.MUX130_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX122_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX114_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX106_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL8_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.GATE_EMIF_CLK.VALUE=1 -DRIVER.PINMUX.VAR.MUX130_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX122_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX114_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX106_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX130_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX122_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX114_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX106_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX97_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX89_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX130_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX122_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX114_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX106_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX97_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX89_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.EQEP1A_FILTER_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX97_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX89_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX80_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX72_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX64_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX56_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX48_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL1_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.GIOA0_DMA.VALUE=0 -DRIVER.PINMUX.VAR.MUX97_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX89_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL40_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL32_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL24_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL16_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX97_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX89_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL40_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL32_OPTION1.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL24_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL16_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX97_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX89_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.GIOB5_DMA_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.GIOA7_DMA_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.PIN_MUX_131_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_123_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_115_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_107_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX90_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX82_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX74_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX66_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX58_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX90_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX82_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX74_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX66_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX58_OPTION1.VALUE=1 -DRIVER.PINMUX.VAR.MUX90_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX82_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX74_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX66_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX58_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX3_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_100_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX90_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX82_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX74_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX66_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX58_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX90_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX82_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX74_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX66_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX58_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX5_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX90_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX82_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX74_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX66_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX58_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX5_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.EQEP1S_FILTER_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX131_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX123_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX115_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX107_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX5_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX5_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX51_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX43_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX35_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX27_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX19_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX5_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX51_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX43_OPTION1.VALUE=1 -DRIVER.PINMUX.VAR.MUX35_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX27_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX19_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX5_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.GIOA1_DMA_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.ECAP5_FILTER_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.ETPWM_SOC2A_SELECT.VALUE=ON -DRIVER.PINMUX.VAR.MUX51_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX43_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX41_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX35_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX33_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX27_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX25_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX19_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX17_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_99_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_8_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.GIOA1_DMA.VALUE=0 -DRIVER.PINMUX.VAR.MUX51_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX43_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX35_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX27_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX19_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX51_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX43_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX35_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX27_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX19_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX51_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX43_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX35_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX27_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX19_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.ALT_ADC_SELECT.VALUE=1 -DRIVER.PINMUX.VAR.MUX98_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_92_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_84_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_76_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_68_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_1_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX20_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX12_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX20_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX12_OPTION1.VALUE=1 -DRIVER.PINMUX.VAR.MUX20_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX12_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL58_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_61_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_53_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_45_SELECT.VALUE=4 -DRIVER.PINMUX.VAR.PIN_MUX_37_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_29_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX20_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX12_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL3_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX20_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX12_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL3_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX20_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX12_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX100_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL51_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL43_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL35_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL27_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL19_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_30_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_22_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_14_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.ECAP1_FILTER.VALUE=0 -DRIVER.PINMUX.VAR.CAN4.VALUE=0 -DRIVER.PINMUX.VAR.MUX128_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX128_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX128_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX10_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL20_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL12_SELECT.VALUE=1 -DRIVER.PINMUX.VAR.GIOB0_DMA.VALUE=0 -DRIVER.PINMUX.VAR.GIOA2_DMA.VALUE=0 -DRIVER.PINMUX.VAR.MUX128_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX128_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX128_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.ETHERNET_SELECT.VALUE=MII -DRIVER.PINMUX.VAR.MUX91_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX83_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX75_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX67_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX59_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM5_EQEPERR12.VALUE=EQEPERR12 -DRIVER.PINMUX.VAR.CONCOUNT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL54_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL46_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL38_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX121_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX113_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX105_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL54_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL46_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL38_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX121_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX113_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX105_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.EQEP2I_FILTER_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX121_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX113_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX105_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL6_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX121_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX113_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX105_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX121_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX113_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX105_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX96_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX88_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX121_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX113_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX105_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX96_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX88_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX96_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX88_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX6_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_128_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX96_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX88_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL31_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL23_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL15_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX96_OPTION4.VALUE=1 -DRIVER.PINMUX.VAR.MUX88_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.TEMP_CHECK.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL31_OPTION1.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL23_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL15_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX96_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX88_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM4_EQEPERR_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.GIOB_DISABLE_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX134_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX126_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX118_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_121_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_113_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_105_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.GIOB1_DMA.VALUE=0 -DRIVER.PINMUX.VAR.GIOA3_DMA.VALUE=0 -DRIVER.PINMUX.VAR.EQEP2I_FILTER.VALUE=0 -DRIVER.PINMUX.VAR.MUX81_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX73_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX65_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX57_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX49_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX81_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX73_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX65_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX57_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX49_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_TZ2_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX81_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX73_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX65_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX60_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX57_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX52_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX49_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX44_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX36_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX28_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX81_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX73_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX65_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX57_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX49_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.EQEP2B_FILTER.VALUE=0 -DRIVER.PINMUX.VAR.MUX81_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX73_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX65_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX57_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX49_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX4_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX81_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX73_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX65_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX57_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX49_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX4_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.GIOB4_DMA_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.GIOA6_DMA_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.ECAP.VALUE=0 -DRIVER.PINMUX.VAR.MUX4_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX4_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX50_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX42_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX34_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX26_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX18_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX4_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX50_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX42_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX34_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX26_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX18_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX4_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_SOC1A_SELECT.VALUE=ON -DRIVER.PINMUX.VAR.MUX50_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX42_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX34_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX26_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX18_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_97_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_89_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_6_SELECT.VALUE=1 -DRIVER.PINMUX.VAR.MUX50_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX42_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX34_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX26_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX18_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL9_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX50_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX42_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX34_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX26_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX18_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL9_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX50_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX42_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX34_OPTION5.VALUE=1 -DRIVER.PINMUX.VAR.MUX26_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX18_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.ECAP2_FILTER_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX111_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX103_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_90_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_82_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_74_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_66_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_58_SELECT.VALUE=1 -DRIVER.PINMUX.VAR.GIOB2_DMA.VALUE=0 -DRIVER.PINMUX.VAR.GIOA4_DMA.VALUE=0 -DRIVER.PINMUX.VAR.MUX11_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX11_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.GIOA0_DMA_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.EQEP2A_FILTER_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX21_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX13_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX11_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL56_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL48_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_51_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_43_SELECT.VALUE=1 -DRIVER.PINMUX.VAR.PIN_MUX_35_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_27_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_19_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX11_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.ECAP6_FILTER.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL2_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX11_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_TBCLK_SYNC_ENABLE.VALUE=0 -DRIVER.PINMUX.VAR.AD1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL2_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX11_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.AD2.VALUE=0 -DRIVER.PINMUX.VAR.MUX94_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX86_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX78_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL41_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL33_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL25_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL17_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_20_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_12_SELECT.VALUE=1 -DRIVER.PINMUX.VAR.MUX127_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX119_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX127_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX119_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX127_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX119_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL10_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX127_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX119_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX127_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX119_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX127_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX119_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.EQEP2S_FILTER_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX9_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.GIOB3_DMA.VALUE=0 -DRIVER.PINMUX.VAR.GIOA5_DMA.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL61_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL53_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL45_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL37_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL29_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX120_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX112_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX104_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL61_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL53_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL45_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL37_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL29_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX120_OPTION1.VALUE=1 -DRIVER.PINMUX.VAR.MUX112_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX104_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX129_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX120_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX112_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX104_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL4_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.ALT_ADC.VALUE=0 -DRIVER.PINMUX.VAR.I2C.VALUE=0 -DRIVER.PINMUX.VAR.MUX120_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX112_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX104_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX120_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX112_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX104_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX95_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX87_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX79_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.TEMP3_ENABLE.VALUE=1 -DRIVER.PINMUX.VAR.MUX120_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX112_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX104_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX95_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX87_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX79_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX95_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX87_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX79_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX71_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX63_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX55_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX47_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX39_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_134_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_126_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_118_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX95_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX87_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX79_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM3_EQEPERR12.VALUE=EQEPERR12 -DRIVER.PINMUX.VAR.SIGNAL30_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL22_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL14_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX95_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX87_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX79_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL30_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL22_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL14_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX95_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX87_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX79_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.TEMP2_ENABLE_SELECT.VALUE=ON -DRIVER.PINMUX.VAR.PIN_MUX_111_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_103_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.EQEP1I_FILTER.VALUE=0 -DRIVER.PINMUX.VAR.MUX80_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX72_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX64_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX56_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX48_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.HET1.VALUE=1 -DRIVER.PINMUX.VAR.MUX80_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX72_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX64_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX56_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX48_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_SOC7A_SELECT.VALUE=ON -DRIVER.PINMUX.VAR.HET2.VALUE=0 -DRIVER.PINMUX.VAR.MUX80_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX72_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX64_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX56_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX48_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX2_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.GIOB4_DMA.VALUE=0 -DRIVER.PINMUX.VAR.GIOA6_DMA.VALUE=0 -DRIVER.PINMUX.VAR.MUX80_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX72_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX64_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX56_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX48_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.EQEP1B_FILTER.VALUE=0 -DRIVER.PINMUX.VAR.MUX80_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX72_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX64_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX56_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX48_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX3_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX80_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX72_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX64_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX56_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX48_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX3_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX130_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX122_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX114_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX106_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX3_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX3_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.EMIF.VALUE=0 -DRIVER.PINMUX.VAR.MUX41_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX33_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX25_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX17_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX3_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_TZ1.VALUE=ASYNC -DRIVER.PINMUX.VAR.MUX41_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX33_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX25_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX17_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX3_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_TZ2.VALUE=ASYNC -DRIVER.PINMUX.VAR.MUX41_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX40_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX33_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX32_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX25_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX24_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX17_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX16_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_95_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_87_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_79_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_4_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_TZ3.VALUE=ASYNC -DRIVER.PINMUX.VAR.MUX41_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX33_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX25_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX17_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL8_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX41_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX33_OPTION4.VALUE=1 -DRIVER.PINMUX.VAR.MUX25_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX17_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL8_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX41_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX33_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX25_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX17_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.GIOB3_DMA_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.GIOA5_DMA_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX97_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX89_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_80_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_72_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_64_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_56_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_48_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.GIOA.VALUE=0 -DRIVER.PINMUX.VAR.GIOB.VALUE=1 -DRIVER.PINMUX.VAR.MUX10_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.GIOB_DISABLE.VALUE=0 -DRIVER.PINMUX.VAR.MUX10_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX10_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL54_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL46_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL38_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_41_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_33_SELECT.VALUE=4 -DRIVER.PINMUX.VAR.PIN_MUX_25_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_17_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.GIOB5_DMA.VALUE=0 -DRIVER.PINMUX.VAR.GIOA7_DMA.VALUE=0 -DRIVER.PINMUX.VAR.MUX10_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.ECAP4_FILTER.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL1_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX10_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL1_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX10_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM5_EQEPERR_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.SIGNAL31_SELECT.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL23_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL15_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_10_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL59_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX134_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX126_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX118_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL59_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX134_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX126_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX118_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.EQEP.VALUE=0 -DRIVER.PINMUX.VAR.MUX134_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX126_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX118_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX134_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX126_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX118_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX134_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX126_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX118_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX134_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX126_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX118_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX90_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX82_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX74_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX66_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX58_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL9_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MIBSPI1.VALUE=1 -DRIVER.PINMUX.VAR.MIBSPI2.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL60_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL52_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL44_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL36_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL28_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX111_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX103_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MIBSPI3.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL60_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL52_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL44_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL36_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL28_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX111_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX103_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MIBSPI4.VALUE=1 -DRIVER.PINMUX.VAR.OHCI0.VALUE=0 -DRIVER.PINMUX.VAR.MUX111_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX103_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL2_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.GIOB6_DMA.VALUE=0 -DRIVER.PINMUX.VAR.MIBSPI5.VALUE=0 -DRIVER.PINMUX.VAR.W2FC.VALUE=0 -DRIVER.PINMUX.VAR.OHCI1.VALUE=0 -DRIVER.PINMUX.VAR.MUX111_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX103_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.EQEP2S_FILTER.VALUE=0 -DRIVER.PINMUX.VAR.MUX111_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX103_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX94_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX86_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX78_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.TEMP1_ENABLE.VALUE=1 -DRIVER.PINMUX.VAR.MUX111_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX103_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX94_OPTION1.VALUE=1 -DRIVER.PINMUX.VAR.MUX86_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX78_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.ECAP4_FILTER_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX94_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX86_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX78_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX5_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_132_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_124_SELECT.VALUE=1 -DRIVER.PINMUX.VAR.PIN_MUX_116_SELECT.VALUE=1 -DRIVER.PINMUX.VAR.PIN_MUX_108_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX94_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX86_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX78_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL21_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL13_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX94_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX86_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX78_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX9_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL21_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL13_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX94_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX86_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX78_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX9_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX133_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX125_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX117_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX109_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX9_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_101_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX9_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX71_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX63_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX55_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX47_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX39_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX9_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX71_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX63_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX55_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX47_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX39_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX9_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_SOC6A_SELECT.VALUE=ON -DRIVER.PINMUX.VAR.MUX71_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX63_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX55_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX51_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX47_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX43_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX39_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX35_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX27_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX19_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX71_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX63_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX55_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX47_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX39_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM1_EQEPERR12.VALUE=EQEPERR12 -DRIVER.PINMUX.VAR.MUX71_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX63_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX55_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX47_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX39_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX2_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.EMIF_OUTPUT_ENABLE.VALUE=0 -DRIVER.PINMUX.VAR.MUX71_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX63_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX55_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX47_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX39_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX2_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM1_EQEPERR_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX2_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_9_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.GIOB7_DMA.VALUE=0 -DRIVER.PINMUX.VAR.MUX2_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX40_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX32_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX24_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX16_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX2_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX40_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX32_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX24_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX16_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX2_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_EPWM1SYNCI_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX40_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX32_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX24_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX16_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_93_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_85_SELECT.VALUE=1 -DRIVER.PINMUX.VAR.PIN_MUX_77_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_69_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_2_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX40_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX32_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX24_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX16_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL7_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX40_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX32_OPTION4.VALUE=1 -DRIVER.PINMUX.VAR.MUX24_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX16_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL7_OPTION1.VALUE=1 -DRIVER.PINMUX.VAR.MUX40_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX32_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX24_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX16_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX110_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX102_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL59_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_70_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_62_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_54_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_46_SELECT.VALUE=1 -DRIVER.PINMUX.VAR.PIN_MUX_38_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MII.VALUE=0 -DRIVER.PINMUX.VAR.SCI2.VALUE=0 -DRIVER.PINMUX.VAR.GIOA_DISABLE.VALUE=0 -DRIVER.PINMUX.VAR.SCI3.VALUE=0 -DRIVER.PINMUX.VAR.GATE_EMIF_CLK_SELECT.VALUE=ON -DRIVER.PINMUX.VAR.SCI4.VALUE=0 -DRIVER.PINMUX.VAR.MUX20_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX12_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL60_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL52_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL44_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL36_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL28_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_31_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_23_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_15_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.ECAP2_FILTER.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_TIME_BASE_SYNC_ENABLE.VALUE=0 -DRIVER.PINMUX.VAR.GIOB2_DMA_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.GIOA4_DMA_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX93_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX85_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX77_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX69_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL21_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL13_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_EPWM1SYNCI.VALUE=ASYNC -DRIVER.PINMUX.VAR.ETPWM6_EQEPERR12.VALUE=EQEPERR12 -DRIVER.PINMUX.VAR.SIGNAL58_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX133_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX125_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX117_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX109_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL58_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX133_OPTION1.VALUE=1 -DRIVER.PINMUX.VAR.MUX125_OPTION1.VALUE=1 -DRIVER.PINMUX.VAR.MUX117_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX109_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX133_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX125_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX117_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX109_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_SOC1A.VALUE=1 -DRIVER.PINMUX.VAR.SCI.VALUE=0 -DRIVER.PINMUX.VAR.MUX133_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX125_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX117_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX109_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX133_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX125_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX117_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX109_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_SOC2A.VALUE=1 -DRIVER.PINMUX.VAR.MUX133_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX125_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX117_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX109_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX8_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL7_SELECT.VALUE=1 -DRIVER.PINMUX.VAR.ETPWM_SOC3A.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL51_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL43_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL35_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL27_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL19_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX110_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX102_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.ETPWM_SOC4A.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL51_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL43_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL35_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL27_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL19_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX110_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX102_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX128_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX110_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX102_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_129_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_SOC5A.VALUE=1 -DRIVER.PINMUX.VAR.ETPWM.VALUE=0 -DRIVER.PINMUX.VAR.MUX110_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX102_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.EQEP1S_FILTER.VALUE=0 -DRIVER.PINMUX.VAR.MUX110_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX102_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX93_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX85_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX77_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX69_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_SOC6A.VALUE=1 -DRIVER.PINMUX.VAR.MUX110_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX102_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX93_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX85_OPTION1.VALUE=1 -DRIVER.PINMUX.VAR.MUX77_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX69_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX93_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX85_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX77_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX70_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX69_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX62_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX54_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX46_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX38_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_130_SELECT.VALUE=1 -DRIVER.PINMUX.VAR.PIN_MUX_122_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_114_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_106_SELECT.VALUE=1 -DRIVER.PINMUX.VAR.ETPWM_SOC7A.VALUE=1 -DRIVER.PINMUX.VAR.MUX93_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX85_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX77_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX69_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL20_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL12_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX93_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX85_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX77_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX69_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX8_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL20_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL12_OPTION1.VALUE=1 -DRIVER.PINMUX.VAR.MUX93_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX85_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX77_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX69_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX8_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.ECAP1_FILTER_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.ETPWM_TZ3_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX8_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX8_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX70_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX62_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX54_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX46_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX38_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX8_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX70_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX62_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX54_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX46_OPTION1.VALUE=1 -DRIVER.PINMUX.VAR.MUX38_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX8_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.EQEP1B_FILTER_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.ETPWM_SOC5A_SELECT.VALUE=ON -DRIVER.PINMUX.VAR.ETPWM6_EQEPERR_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX70_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX62_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX54_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX46_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX38_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX1_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX70_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX62_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX54_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX46_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX38_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX70_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX62_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX54_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX46_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX38_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX1_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX70_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX62_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX54_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX46_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX38_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX1_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX121_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX113_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX105_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX1_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_98_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_7_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX1_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX31_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX23_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX15_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX1_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX31_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX23_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX15_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX1_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX31_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX31_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX23_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX23_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX15_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX15_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_91_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_83_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_75_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_67_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_59_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX31_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX23_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX15_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL6_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX31_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX23_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX15_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL6_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX31_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX23_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX15_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX96_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX88_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL57_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL49_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_60_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_52_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_44_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_36_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_28_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.GIOB7_DMA_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.ECAP6_FILTER_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.SIGNAL50_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL42_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL34_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL26_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL18_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_21_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_13_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL11_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SPI2.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL57_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL49_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX132_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX124_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX116_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX108_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL57_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL49_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX132_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX124_OPTION1.VALUE=1 -DRIVER.PINMUX.VAR.MUX116_OPTION1.VALUE=1 -DRIVER.PINMUX.VAR.MUX108_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.TEMP1_ENABLE_SELECT.VALUE=ON -DRIVER.PINMUX.VAR.SPI4.VALUE=0 -DRIVER.PINMUX.VAR.MUX132_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX124_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX116_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX108_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.RMII.VALUE=0 -DRIVER.PINMUX.VAR.MUX132_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX124_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX116_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX108_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX0.VALUE="PINMUX_BALL_N19_AD1EVT | PINMUX_BALL_D4_EMIF_ADDR_00 | PINMUX_BALL_D5_EMIF_ADDR_01 | PINMUX_BALL_C4_EMIF_ADDR_06" -DRIVER.PINMUX.VAR.MUX132_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX124_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX116_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX108_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX99_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX1.VALUE="PINMUX_BALL_C5_EMIF_ADDR_07 | PINMUX_BALL_C6_EMIF_ADDR_08 | PINMUX_BALL_C7_EMIF_ADDR_09 | PINMUX_BALL_C8_EMIF_ADDR_10" -DRIVER.PINMUX.VAR.MUX132_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX124_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX116_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX108_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX99_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.GIOB1_DMA_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.GIOA3_DMA_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.ETPWM2_EQEPERR_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.PINMUX2.VALUE="PINMUX_BALL_C9_EMIF_ADDR_11 | PINMUX_BALL_C10_EMIF_ADDR_12 | PINMUX_BALL_C11_EMIF_ADDR_13 | PINMUX_BALL_C12_EMIF_ADDR_14" -DRIVER.PINMUX.VAR.MUX99_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX81_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX73_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX65_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX57_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX49_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL5_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX3.VALUE="PINMUX_BALL_C13_EMIF_ADDR_15 | PINMUX_BALL_D14_EMIF_ADDR_16 | PINMUX_BALL_C14_EMIF_ADDR_17 | PINMUX_BALL_D15_EMIF_ADDR_18" -DRIVER.PINMUX.VAR.MUX99_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM4_EQEPERR12.VALUE=EQEPERR12 -DRIVER.PINMUX.VAR.PINMUX4.VALUE="PINMUX_BALL_C15_EMIF_ADDR_19 | PINMUX_BALL_C16_EMIF_ADDR_20 | PINMUX_BALL_C17_EMIF_ADDR_21" -DRIVER.PINMUX.VAR.SIGNAL50_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL42_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL34_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL26_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL18_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX101_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX99_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX5.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL50_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL42_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL34_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL26_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL18_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX101_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX99_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX6.VALUE=0 -DRIVER.PINMUX.VAR.MUX101_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_127_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_119_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.ALT_ADC_A.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX7.VALUE=0 -DRIVER.PINMUX.VAR.MUX101_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.ALT_ADC_B.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX8.VALUE=PINMUX_BALL_D16_EMIF_BA_1 -DRIVER.PINMUX.VAR.MUX101_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX92_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX84_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX76_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX68_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.PINMUX9.VALUE="PINMUX_BALL_R4_EMIF_nCAS | PINMUX_BALL_N17_EMIF_nCS_0 | PINMUX_BALL_L17_EMIF_nCS_2" -DRIVER.PINMUX.VAR.MUX101_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX92_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX84_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX76_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX68_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX92_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX84_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX76_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX68_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX4_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_120_SELECT.VALUE=1 -DRIVER.PINMUX.VAR.PIN_MUX_112_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_104_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX92_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX84_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX76_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX68_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL11_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX92_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX84_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX76_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX68_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX7_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL11_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX92_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX84_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX76_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX68_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX7_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_TZ1_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX132_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX124_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX116_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX108_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX7_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX7_OPTION3.VALUE=0 -DRIVER.CRC.VAR.HTU_CPB_7_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC1_CH1_URI.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC1_CH2_TOE.VALUE=0x00001000 -DRIVER.CRC.VAR.HTU_DCP0_TRDIR_1.VALUE=HET_TO_MAIN_MEM -DRIVER.CRC.VAR.CRC2_CH2_WDTO.VALUE=0x00000000 -DRIVER.CRC.VAR.HTU_ICPBL_7_SEL_1.VALUE=HIGH -DRIVER.CRC.VAR.HTU_ICPA_5_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.HTU_ICPB_1_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.HTU_DEBMOD_1.VALUE=0 -DRIVER.CRC.VAR.CRC1_CH2_URI.VALUE=0x00000000 -DRIVER.CRC.VAR.HTU_ICPAL_1_SEL_1.VALUE=HIGH -DRIVER.CRC.VAR.HTU_ENABUS_1.VALUE=0 -DRIVER.CRC.VAR.CRC1_CH2_MODE.VALUE=AUTO -DRIVER.CRC.VAR.HTU_CPA_2_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC2_CH1_PSSIH.VALUE=0 -DRIVER.CRC.VAR.CRC2_CH1_PSSIL.VALUE=0 -DRIVER.CRC.VAR.HTU_MP1_ACC_1.VALUE=READ_ONLY -DRIVER.CRC.VAR.HTU_CONTPAR_1.VALUE=0 -DRIVER.CRC.VAR.HTU_ICPB_6_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.HTU_DCP0_EC_1.VALUE=0 -DRIVER.CRC.VAR.HTU_DCP0_CPBFULADD_1.VALUE=0 -DRIVER.CRC.VAR.HTU_ICPAL_6_SEL_1.VALUE=HIGH -DRIVER.CRC.VAR.CRC1_CH1_PSIH.VALUE=0 -DRIVER.CRC.VAR.HTU_CPA_7_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.HTU_CPB_3_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC1_BASE.VALUE=0xFE000000 -DRIVER.CRC.VAR.CRC1_CH1_PSIL.VALUE=0 -DRIVER.CRC.VAR.HTU_DCP0_FC_1.VALUE=0 -DRIVER.CRC.VAR.HTU_BASE.VALUE=0xFFF7A400 -DRIVER.CRC.VAR.HTU_ICPBL_3_SEL_1.VALUE=HIGH -DRIVER.CRC.VAR.HTU_ICPA_1_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC1_CH1_WDTO.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC1_CH2_PSIH.VALUE=0 -DRIVER.CRC.VAR.CRC2_BASE.VALUE=0xFB000000 -DRIVER.CRC.VAR.CRC1_CH2_PSIL.VALUE=0 -DRIVER.CRC.VAR.HTU_ICPA_6_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.HTU_ICPB_2_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.HTU_DCP0_CPAFULADD_1.VALUE=0 -DRIVER.CRC.VAR.HTU_ICPAL_2_SEL_1.VALUE=HIGH -DRIVER.CRC.VAR.HTU_CPA_3_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC2_CH2_PSSIH.VALUE=0 -DRIVER.CRC.VAR.CRC2_CH2_PSSIL.VALUE=0 -DRIVER.CRC.VAR.HTU_MP1_STADD_1.VALUE=0 -DRIVER.CRC.VAR.HTU_ICPB_7_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC1_CH2_WDTO.VALUE=0x00000000 -DRIVER.CRC.VAR.HTU_ICPAL_7_SEL_1.VALUE=HIGH -DRIVER.CRC.VAR.HTU_CPB_4_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC2_CH1_BCTO.VALUE=0x00000000 -DRIVER.CRC.VAR.HTU_MP0_ENA_1.VALUE=0 -DRIVER.CRC.VAR.HTU_ICPBL_4_SEL_1.VALUE=HIGH -DRIVER.CRC.VAR.HTU_ICPA_2_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.HTU_PAR_1.VALUE=0 -DRIVER.CRC.VAR.HTU_CONT_1.VALUE=0 -DRIVER.CRC.VAR.HTU_ENAREQ_1.VALUE=0 -DRIVER.CRC.VAR.CRC2_CH2_BCTO.VALUE=0x00000000 -DRIVER.CRC.VAR.HTU_MP1_ERRENA_1.VALUE=0 -DRIVER.CRC.VAR.HTU_MP0_STADD_1.VALUE=0 -DRIVER.CRC.VAR.HTU_ICPA_7_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.HTU_ICPB_3_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.HTU_ICPAL_3_SEL_1.VALUE=HIGH -DRIVER.CRC.VAR.HTU_CPA_4_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.HTU_CPB_0_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.HTU_DCP0_MMADD_1.VALUE=POST_INCREMENT -DRIVER.CRC.VAR.CRC2_CH1_CCI.VALUE=0x00000000 -DRIVER.CRC.VAR.HTU_ENAINTMAP_1.VALUE=0 -DRIVER.CRC.VAR.CRC2_CH1_CFI.VALUE=0x00000002 -DRIVER.CRC.VAR.HTU_ICPBL_0_SEL_1.VALUE=HIGH -DRIVER.CRC.VAR.HTU_CPB_5_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC2_CH2_CCI.VALUE=0x00000000 -DRIVER.CRC.VAR.HTU_MP1_ENA_1.VALUE=0 -DRIVER.CRC.VAR.CRC1_CH2_MODE_VALUE.VALUE=0x0001 -DRIVER.CRC.VAR.HTU_DCP0_HETADD.VALUE=0 -DRIVER.CRC.VAR.CRC2_CH2_CFI.VALUE=0x00000200 -DRIVER.CRC.VAR.HTU_ICPBL_5_SEL_1.VALUE=HIGH -DRIVER.CRC.VAR.HTU_ICPA_3_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC2_CH1_DTE.VALUE=0 -DRIVER.CRC.VAR.CRC2_CH1_CVH.VALUE=0x00000000 -DRIVER.CRC.VAR.HTU_CPA_0_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.HTU_RES_1.VALUE=0 -DRIVER.CRC.VAR.CRC1_CH1_BCTO.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC2_CH1_CVL.VALUE=0x00000000 -DRIVER.CRC.VAR.HTU_DCP0_CPATMOD_1.VALUE=POST_INCREMENT -DRIVER.CRC.VAR.CRC1_CH1_CCI.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC2_CH1_MODE.VALUE=AUTO -DRIVER.CRC.VAR.CRC1_CH1_PSSIH.VALUE=0 -DRIVER.CRC.VAR.CRC2_CH2_DTE.VALUE=1 -DRIVER.CRC.VAR.CRC1_CH1_CFI.VALUE=0x00000002 -DRIVER.CRC.VAR.CRC1_CH1_PSSIL.VALUE=0 -DRIVER.CRC.VAR.HTU_MP1_ENDADD_1.VALUE=0 -DRIVER.CRC.VAR.HTU_ICPB_4_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC2_CH2_CVH.VALUE=0x00000000 -DRIVER.CRC.VAR.HTU_ICPAL_4_SEL_1.VALUE=HIGH -DRIVER.CRC.VAR.CRC2_CH2_CVL.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC2_CH1_PCP.VALUE=0x00000000 -DRIVER.CRC.VAR.HTU_CPA_5_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.HTU_CPB_1_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC1_CH2_CCI.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC1_CH2_CFI.VALUE=0x00000200 -DRIVER.CRC.VAR.CRC2_CH1_SCP.VALUE=0x00000000 -DRIVER.CRC.VAR.HTU_VBHOLD_1.VALUE=0 -DRIVER.CRC.VAR.CRC1_CH2_BCTO.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC1_CH1_MODE_VALUE.VALUE=0x0001 -DRIVER.CRC.VAR.CRC2_CH2_PCP.VALUE=0x00000000 -DRIVER.CRC.VAR.HTU_MP0_ERRENA_1.VALUE=0 -DRIVER.CRC.VAR.HTU_ICPBL_1_SEL_1.VALUE=HIGH -DRIVER.CRC.VAR.CRC2_CH1_PSA.VALUE=1 -DRIVER.CRC.VAR.CRC2_CH2_MODE.VALUE=AUTO -DRIVER.CRC.VAR.CRC2_CH1_ORI.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC1_CH1_DTE.VALUE=0 -DRIVER.CRC.VAR.HTU_CPB_6_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC1_CH1_CVH.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC1_CH1_CVL.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC2_CH2_SCP.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC2_CH2_MODE_VALUE.VALUE=0x0001 -DRIVER.CRC.VAR.CRC2_CH1_TOE.VALUE=0x00000010 -DRIVER.CRC.VAR.CRC2_CH2_PSA.VALUE=1 -DRIVER.CRC.VAR.CRC2_CH2_ORI.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC1_CH2_DTE.VALUE=1 -DRIVER.CRC.VAR.HTU_DCP0_TRDAT_1.VALUE=32BIT -DRIVER.CRC.VAR.HTU_ICPBL_6_SEL_1.VALUE=HIGH -DRIVER.CRC.VAR.HTU_ICPA_4_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.HTU_ICPB_0_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC1_CH2_CVH.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC2_CH1_PSIH.VALUE=0 -DRIVER.CRC.VAR.HTU_ICPAL_0_SEL_1.VALUE=HIGH -DRIVER.CRC.VAR.CRC1_CH2_CVL.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC2_CH1_URI.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC2_CH1_PSIL.VALUE=0 -DRIVER.CRC.VAR.CRC1_CH1_PCP.VALUE=0x00000000 -DRIVER.CRC.VAR.HTU_CPA_1_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC2_CH2_TOE.VALUE=0x00001000 -DRIVER.CRC.VAR.HTU_DCP0_CPBTMOD_1.VALUE=POST_INCREMENT -DRIVER.CRC.VAR.CRC1_CH2_PSSIH.VALUE=0 -DRIVER.CRC.VAR.HTU_MP0_ACC_1.VALUE=READ_ONLY -DRIVER.CRC.VAR.CRC1_CH2_PSSIL.VALUE=0 -DRIVER.CRC.VAR.CRC1_CH1_SCP.VALUE=0x00000000 -DRIVER.CRC.VAR.HTU_ICPB_5_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC2_CH2_URI.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC1_CH2_PCP.VALUE=0x00000000 -DRIVER.CRC.VAR.HTU_ICPAL_5_SEL_1.VALUE=HIGH -DRIVER.CRC.VAR.CRC1_CH1_PSA.VALUE=1 -DRIVER.CRC.VAR.CRC1_CH1_ORI.VALUE=0x00000000 -DRIVER.CRC.VAR.HTU_DCP0_ADMOD_1.VALUE=INCREMENT_16BIT -DRIVER.CRC.VAR.HTU_CPA_6_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.HTU_CPB_2_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC2_CH1_WDTO.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC2_CH2_PSIH.VALUE=0 -DRIVER.CRC.VAR.CRC1_CH2_SCP.VALUE=0x00000000 -DRIVER.CRC.VAR.HTU_ENA_1.VALUE=0 -DRIVER.CRC.VAR.CRC1_CH1_TOE.VALUE=0x00000010 -DRIVER.CRC.VAR.CRC1_CH1_MODE.VALUE=AUTO -DRIVER.CRC.VAR.CRC2_CH2_PSIL.VALUE=0 -DRIVER.CRC.VAR.CRC1_CH2_PSA.VALUE=1 -DRIVER.CRC.VAR.CRC1_CH2_ORI.VALUE=0x00000000 -DRIVER.CRC.VAR.HTU_MP0_ENDADD_1.VALUE=0 -DRIVER.CRC.VAR.HTU_ICPBL_2_SEL_1.VALUE=HIGH -DRIVER.CRC.VAR.HTU_ICPA_0_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC2_CH1_MODE_VALUE.VALUE=0x0001 -DRIVER.EMAC.VAR.EMAC_PHY_CUSTOM.VALUE=0 -DRIVER.EMAC.VAR.EMAC_ADD1.VALUE=FF -DRIVER.EMAC.VAR.EMAC_ADD2.VALUE=FF -DRIVER.EMAC.VAR.EMAC_ADD3.VALUE=FF -DRIVER.EMAC.VAR.EMAC_ADD4.VALUE=FF -DRIVER.EMAC.VAR.EMAC_ADD5.VALUE=FF -DRIVER.EMAC.VAR.EMAC_ADD6.VALUE=FF -DRIVER.EMAC.VAR.EMAC_CTRL_BASE.VALUE=0xFCF78800 -DRIVER.EMAC.VAR.EMAC_PHY_DP83640.VALUE=1 -DRIVER.EMAC.VAR.EMAC_LOOPBACK_ENA.VALUE=0 -DRIVER.EMAC.VAR.MDIO_BASE.VALUE=0xFCF78900 -DRIVER.EMAC.VAR.EMAC_BASE.VALUE=0xFCF78000 -DRIVER.EMAC.VAR.EMAC_BASE_PORT.VALUE=0xFFFFFFFF -DRIVER.EMAC.VAR.EMAC_TRANSMIT_ENA.VALUE=1 -DRIVER.EMAC.VAR.EMAC_PHY_TLK111.VALUE=0 -DRIVER.EMAC.VAR.EMAC_CHANNELNUMBER.VALUE=0 -DRIVER.EMAC.VAR.EMAC_RX_PBUF_ALLOC.VALUE=10 -DRIVER.EMAC.VAR.EMAC_UNICAST_ENA.VALUE=1 -DRIVER.EMAC.VAR.EMAC_FULL_DUPLEX_ENA.VALUE=1 -DRIVER.EMAC.VAR.EMAC_PHYADDRESS.VALUE=0 -DRIVER.EMAC.VAR.EMAC_MII_ENA.VALUE=1 -DRIVER.EMAC.VAR.EMAC_CTRL_RAM_BASE.VALUE=0xFC520000 -DRIVER.EMAC.VAR.EMAC_BROADCAST_ENA.VALUE=1 -DRIVER.EMAC.VAR.EMAC_RECEIVE_ENA.VALUE=1 -DRIVER.EMIF.VAR.EMIF_ASYNC2_TAVAV.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC1_TD.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC3_EXTENDED_WAIT.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC1_TH.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC2_TA.VALUE=1 -DRIVER.EMIF.VAR.EMIF_ASYNC3_WAIT.VALUE=pin0 -DRIVER.EMIF.VAR.EMIF_ASYNC2_TD.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC2_NOR_FLASH.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC2_TEHQZ.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC2_TH.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC3_TA.VALUE=1 -DRIVER.EMIF.VAR.EMIF_ASYNC3_TD.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ENA_SDRAM.VALUE=1 -DRIVER.EMIF.VAR.EMIF_ASYNC3_TH.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC2_TELQV.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC2_PAGE_MODE.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC1_ENA.VALUE=1 -DRIVER.EMIF.VAR.EMIF_SDRAM_REFRESH_CYCLES.VALUE=6 -DRIVER.EMIF.VAR.EMIF_AVAILABLE.VALUE=1 -DRIVER.EMIF.VAR.EMIF_SDRAM_TRC_MAX.VALUE=160 -DRIVER.EMIF.VAR.EMIF_ASYNC3_TEHEL.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC2_ENA.VALUE=1 -DRIVER.EMIF.VAR.EMIF_ASYNC1_R_STROBE.VALUE=2 -DRIVER.EMIF.VAR.EMIF_SDRAM_TRAS_MAX.VALUE=160 -DRIVER.EMIF.VAR.EMIF_ASYNC3_TELEH.VALUE=0 -DRIVER.EMIF.VAR.EMIF_SDRAM_TRRD_MAX.VALUE=80 -DRIVER.EMIF.VAR.EMIF_ASYNC3_STROBE_MODE.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC3_ENA.VALUE=1 -DRIVER.EMIF.VAR.EMIF_ASYNC1_ASIZE.VALUE=16_bit -DRIVER.EMIF.VAR.EMIF_SDRAM_TRC_VAL.VALUE=6 -DRIVER.EMIF.VAR.EMIF_ASYNC3_TAVAV.VALUE=0 -DRIVER.EMIF.VAR.EMIF_SDRAM_BANKS.VALUE=4 -DRIVER.EMIF.VAR.EMIF_ASYNC1_PAGE_DELAY_VAL.VALUE=0 -DRIVER.EMIF.VAR.EMIF_SDRAM_TRAS_VAL.VALUE=3 -DRIVER.EMIF.VAR.EMIF_SDRAM_TRRD_VAL.VALUE=1 -DRIVER.EMIF.VAR.EMIF_BASE.VALUE=0xFCFFE800 -DRIVER.EMIF.VAR.EMIF_ASYNC3_TEHQZ.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC1_W_STROBE.VALUE=2 -DRIVER.EMIF.VAR.EMIF_ASYNC3_TELQV.VALUE=0 -DRIVER.EMIF.VAR.EMIF_SDRAM_TXSR_MAX.VALUE=320 -DRIVER.EMIF.VAR.EMIF_ASYNC2_PAGE_SIZE.VALUE=8_words -DRIVER.EMIF.VAR.EMIF_CLKFRQ.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC3_W_HOLD.VALUE=2 -DRIVER.EMIF.VAR.EMIF_ASYNC2_R_HOLD.VALUE=1 -DRIVER.EMIF.VAR.EMIF_SDRAM_TREFRESH_VAL.VALUE=8191 -DRIVER.EMIF.VAR.EMIF_ASYNC3_R_SETUP.VALUE=3 -DRIVER.EMIF.VAR.EMIF_SDRAM_TXSR_VAL.VALUE=7 -DRIVER.EMIF.VAR.EMIF_ASYNC1_TSU.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC2_EXTENDED_WAIT.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC2_ASIZE.VALUE=16_bit -DRIVER.EMIF.VAR.EMIF_ASYNC2_TSU.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC3_W_SETUP.VALUE=1 -DRIVER.EMIF.VAR.EMIF_ASYNC3_NOR_FLASH.VALUE=0 -DRIVER.EMIF.VAR.EMIF_SDRAM_TWR_MAX.VALUE=80 -DRIVER.EMIF.VAR.EMIF_ASYNC2_PAGE_DELAY_VAL.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC1_W_HOLD.VALUE=2 -DRIVER.EMIF.VAR.EMIF_SDRAM_INIT_TIME.VALUE=100 -DRIVER.EMIF.VAR.EMIF_SDRAM_TREFRESH_DEFAULT.VALUE=1005 -DRIVER.EMIF.VAR.EMIF_ASYNC3_TSU.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC3_PAGE_MODE.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC2_STROBE_MODE.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC2_R_SETUP.VALUE=3 -DRIVER.EMIF.VAR.EMIF_SDRAM_TWR_VAL.VALUE=1 -DRIVER.EMIF.VAR.EMIF_ASYNC3_R_STROBE.VALUE=2 -DRIVER.EMIF.VAR.EMIF_SDRAM_TRCD_MAX.VALUE=80 -DRIVER.EMIF.VAR.EMIF_CLK.VALUE=0 -DRIVER.EMIF.VAR.EMIF_SDRAM_TRCD.VALUE=20 -DRIVER.EMIF.VAR.EMIF_ASYNC2_W_SETUP.VALUE=1 -DRIVER.EMIF.VAR.EMIF_SDRAM_TRFC.VALUE=60 -DRIVER.EMIF.VAR.EMIF_ASYNC3_ASIZE.VALUE=16_bit -DRIVER.EMIF.VAR.EMIF_SDRAM_TRAS.VALUE=40 -DRIVER.EMIF.VAR.EMIF_ASYNC1_NOR_FLASH.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC3_PAGE_DELAY.VALUE=0 -DRIVER.EMIF.VAR.EMIF_SDRAM_CAS_LATENCY.VALUE=2 -DRIVER.EMIF.VAR.EMIF_ASYNC_WAIT_POLARITY0.VALUE=pin_low -DRIVER.EMIF.VAR.EMIF_SDRAM_TRCD_VAL.VALUE=1 -DRIVER.EMIF.VAR.EMIF_ASYNC_WAIT_POLARITY1.VALUE=pin_high -DRIVER.EMIF.VAR.EMIF_ASYNC1_PAGE_MODE.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC1_R_SETUP.VALUE=3 -DRIVER.EMIF.VAR.EMIF_SDRAM_TRC.VALUE=60 -DRIVER.EMIF.VAR.EMIF_SDRAM_TRRD.VALUE=20 -DRIVER.EMIF.VAR.EMIF_ASYNC3_PAGE_DELAY_VAL.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC3_W_STROBE.VALUE=2 -DRIVER.EMIF.VAR.EMIF_ASYNC1_TEHEL.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC_MAX_EXT_WAIT.VALUE=0 -DRIVER.EMIF.VAR.EMIF_SDRAM_TRP.VALUE=20 -DRIVER.EMIF.VAR.EMIF_ASYNC3_PAGE_SIZE.VALUE=8_words -DRIVER.EMIF.VAR.EMIF_ASYNC1_W_SETUP.VALUE=1 -DRIVER.EMIF.VAR.EMIF_ASYNC1_TELEH.VALUE=0 -DRIVER.EMIF.VAR.EMIF_SDRAM_REFRESH_CYCLES_MAX.VALUE=0 -DRIVER.EMIF.VAR.EMIF_MS.VALUE=0.001 -DRIVER.EMIF.VAR.EMIF_NS.VALUE=0.000000001 -DRIVER.EMIF.VAR.EMIF_SDRAM_TWR.VALUE=20 -DRIVER.EMIF.VAR.EMIF_ASYNC1_EXTENDED_WAIT.VALUE=0 -DRIVER.EMIF.VAR.EMIF_SDRAM_REFRESH_PERIOD.VALUE=16 -DRIVER.EMIF.VAR.EMIF_ASYNC3_R_HOLD.VALUE=1 -DRIVER.EMIF.VAR.EMIF_ASYNC1_TAVAV.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC2_PAGE_DELAY.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC1_WAIT.VALUE=pin0 -DRIVER.EMIF.VAR.EMIF_SDRAM_TRP_MAX.VALUE=80 -DRIVER.EMIF.VAR.EMIF_SDRAM_TXSR.VALUE=70 -DRIVER.EMIF.VAR.EMIF_ASYNC1_TEHQZ.VALUE=0 -DRIVER.EMIF.VAR.EMIF_SDRAM_TRFC_MAX.VALUE=320 -DRIVER.EMIF.VAR.EMIF_ASYNC2_R_STROBE.VALUE=2 -DRIVER.EMIF.VAR.EMIF_ASYNC1_TELQV.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC1_STROBE_MODE.VALUE=0 -DRIVER.EMIF.VAR.EMIF_SDRAM_TRP_VAL.VALUE=1 -DRIVER.EMIF.VAR.EMIF_SDRAM_REFRESH_PERIOD_MAX.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC2_W_HOLD.VALUE=2 -DRIVER.EMIF.VAR.EMIF_ASYNC1_PAGE_SIZE.VALUE=8_words -DRIVER.EMIF.VAR.EMIF_ASYNC2_WAIT.VALUE=pin0 -DRIVER.EMIF.VAR.EMIF_ASYNC2_TEHEL.VALUE=0 -DRIVER.EMIF.VAR.EMIF_SDRAM_TRFC_VAL.VALUE=6 -DRIVER.EMIF.VAR.EMIF_ASYNC1_R_HOLD.VALUE=1 -DRIVER.EMIF.VAR.EMIF_SDRAM_PAGE_SIZE.VALUE=elements_1024 -DRIVER.EMIF.VAR.EMIF_ASYNC2_TELEH.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC1_PAGE_DELAY.VALUE=0 -DRIVER.EMIF.VAR.EMIF_IBANK.VALUE=2 -DRIVER.EMIF.VAR.EMIF_ASYNC2_W_STROBE.VALUE=2 -DRIVER.EMIF.VAR.EMIF_ASYNC1_TA.VALUE=1 -DRIVER.POM.VAR.POM_OVRLY_START_ADD28.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD29.VALUE=0x00000000 -DRIVER.POM.VAR.POM_REGION_10_ENA.VALUE=0 -DRIVER.POM.VAR.POM_TIMEOUT_ENABLE.VALUE=0 -DRIVER.POM.VAR.POM_REGION_11_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_20_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_12_ENA.VALUE=0 -DRIVER.POM.VAR.POM_NO_OF_REGION.VALUE=1 -DRIVER.POM.VAR.POM_REGION_21_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_13_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_30_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_22_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_14_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_31_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_23_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_15_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_1_ENA.VALUE=1 -DRIVER.POM.VAR.POM_REGION_32_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_24_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_16_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_2_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_25_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_17_ENA.VALUE=0 -DRIVER.POM.VAR.POM_OVRLY_START_ADD1.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD2.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD3.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD4.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD5.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD6.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD7.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD8.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVLY_TRG_REGION.VALUE=INTERNAL_RAM -DRIVER.POM.VAR.POM_OVRLY_START_ADD9.VALUE=0x00000000 -DRIVER.POM.VAR.POM_REGION_3_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_26_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_18_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_4_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_27_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_19_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_5_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_28_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_6_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_SIZE10.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE11.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE20.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE12.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_29_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_SIZE21.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE13.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE30.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE22.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE14.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE31.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE23.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE15.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE32.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE24.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE16.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE25.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE17.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE26.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE18.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE27.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE19.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE28.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE29.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_7_ENA.VALUE=0 -DRIVER.POM.VAR.POM_BASE.VALUE=0xFFA04000 -DRIVER.POM.VAR.POM_PROG_START_ADD10.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD11.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD20.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD12.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD21.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD13.VALUE=0x00000000 -DRIVER.POM.VAR.POM_REGION_8_ENA.VALUE=0 -DRIVER.POM.VAR.POM_PROG_START_ADD30.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD22.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD14.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD31.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD23.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD15.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD32.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD24.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD16.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD25.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD17.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD26.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD18.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD27.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD19.VALUE=0x00000000 -DRIVER.POM.VAR.POM_REGION_SIZE1.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_PROG_START_ADD28.VALUE=0x00000000 -DRIVER.POM.VAR.POM_REGION_SIZE2.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_PROG_START_ADD29.VALUE=0x00000000 -DRIVER.POM.VAR.POM_REGION_SIZE3.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE4.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE5.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE6.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE7.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE8.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE9.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_9_ENA.VALUE=0 -DRIVER.POM.VAR.POM_PROG_START_ADD1.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD2.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD3.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD4.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD5.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD6.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD7.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD8.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD9.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD10.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD11.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD20.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD12.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD21.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD13.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD30.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD22.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD14.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD31.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD23.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD15.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD32.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD24.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD16.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD25.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD17.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD26.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD18.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD27.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD19.VALUE=0x00000000 -DRIVER.PMM.VAR.PMM_RAM_PWR_DOMAIN2_ENABLE.VALUE=0 -DRIVER.PMM.VAR.PMM_PWR_DOMAIN5_ENABLE.VALUE=0 -DRIVER.PMM.VAR.PMM_PWR_DOMAIN3_ENABLE.VALUE=0 -DRIVER.PMM.VAR.PMM_RAM_PWR_DOMAIN3_ENABLE.VALUE=0 -DRIVER.PMM.VAR.PMM_RAM_PWR_DOMAIN1_ENABLE.VALUE=0 -DRIVER.PMM.VAR.PMM_PWR_DOMAIN4_ENABLE.VALUE=0 -DRIVER.PMM.VAR.PMM_PWR_DOMAIN2_ENABLE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_OSHT_WIDTH.VALUE=100 -DRIVER.ETPWM.VAR.ETPWM3_PWMA_PERIOD_REG.VALUE=1000 -DRIVER.ETPWM.VAR.ETPWM2_PWMA_COMPARE.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM5_CHOPPER_PERIOD.VALUE=100.000 -DRIVER.ETPWM.VAR.ETPWM3_PWMA_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM3_PWMA_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM7_PWMB_PERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM3_PWMB_DEADBAND_OUT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM5_HSPCLKDIV.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM4_CLKDIV_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_SOCA_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM1_DEADBAND_INPUT.VALUE=PWMA_RED_FED -DRIVER.ETPWM.VAR.ETPWM7_BASE.VALUE=0xFCF79200 -DRIVER.ETPWM.VAR.ETPWM5_TB_ACTUALFREQUENCY.VALUE=80.000 -DRIVER.ETPWM.VAR.ETPWM6_DCBEVT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM6_DCBEVT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_ENABLE_SOCA.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_CBC.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_ENABLE_SOCB.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_PWMA_FALLING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_CHOPPER_PERIOD_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM2_PWMA_ENA.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM4_PWMB_PERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM6_RDELAY_SOURCE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_PWMA_DUTYTIME.VALUE=500.000 -DRIVER.ETPWM.VAR.ETPWM1_CHOPPER_DUTY_NEW.VALUE=50.0 -DRIVER.ETPWM.VAR.ETPWM7_SOCB_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM1_OSHT_ACTUAL_WIDTH.VALUE=100 -DRIVER.ETPWM.VAR.ETPWM7_PWMB_FALLING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_PWMB_COMPARE.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM2_PWMB_POLARITY.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM1_OSHT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_OSHT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_PWMA_DEADBAND_OUT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM4_ENABLE_SOCA.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_OSHT3.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_ENABLE_SOCB.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_OSHT4.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_OSHT_WIDTH_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM1_OSHT5.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_PWMA_PERIOD_REG.VALUE=1000 -DRIVER.ETPWM.VAR.ETPWM1_OSHT6.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_CHOPPER_PERIOD.VALUE=100.000 -DRIVER.ETPWM.VAR.ETPWM1_PWMB_PERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM2_CBC.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_CLKDIV.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM2_PWMB_ENA.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM4_SOCB_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM7_CHOPPER_MODE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_PWMB_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM7_DEADBAND_OUTPUT.VALUE=PWMA_PWMB_NIL -DRIVER.ETPWM.VAR.ETPWM4_PWMB_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM1_ENABLE_SOCA.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_PWMB_DEADBAND_INVERT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM1_ENABLE_SOCB.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_CHOPPER_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM5_DCAEVT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_HSPCLKDIV_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM5_DCAEVT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_CHOPPER_DUTYTIME.VALUE=50.000 -DRIVER.ETPWM.VAR.ETPWM6_OSHT_ACTUAL_WIDTH.VALUE=100 -DRIVER.ETPWM.VAR.ETPWM4_PWMB_DEADBAND_INVERT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM7_PWMB_POLARITY.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_OSHT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_PWMA_RISING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_OSHT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM6_PWMA_DEADBAND_OUT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM1_SOCB_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_OSHT3.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_PWMB_DUTYTIME.VALUE=500.000 -DRIVER.ETPWM.VAR.ETPWM3_CBC.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_TB_ACTUALFREQUENCY.VALUE=80.000 -DRIVER.ETPWM.VAR.ETPWM1_FDELAY_SOURCE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_OSHT4.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM6_PWMB_DEADBAND_INVERT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_OSHT5.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_PWMB_COMPARE.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM2_PWMB_RISING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_OSHT6.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM6_DEADBAND_INPUT.VALUE=PWMA_RED_FED -DRIVER.ETPWM.VAR.ETPWM6_SELECT_SOCA.VALUE=DCAEVT1 -DRIVER.ETPWM.VAR.ETPWM6_SELECT_SOCB.VALUE=DCBEVT1 -DRIVER.ETPWM.VAR.ETPWM6_SELECT_EVENT.VALUE=NO_EVENT -DRIVER.ETPWM.VAR.ETPWM5_OSHT_WIDTH.VALUE=100 -DRIVER.ETPWM.VAR.ETPWM1_PWMA_DEADBAND_INVERT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM5_PWMA_ENA.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM3_CHOPPER_PERIOD_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_PWMA_DEADBAND_INVERT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_PWMB_PERIOD_REG.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM5_DCBEVT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_OSHT_WIDTH_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM1_PWMA_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM5_DCBEVT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_PWMA_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM5_PWMA_DEADBAND_INVERT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_HSPCLKDIV.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_PWMA_FALLING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_PWMA_RISING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM4_CHOPPER_MODE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_CLKDIV_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM2_PWMB_DEADBAND_OUT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_TB_FREQUENCY.VALUE=110.000 -DRIVER.ETPWM.VAR.ETPWM4_CBC.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_SELECT_SOCA.VALUE=DCAEVT1 -DRIVER.ETPWM.VAR.ETPWM7_PWMA_DEADBAND_INVERT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_SELECT_SOCB.VALUE=DCBEVT1 -DRIVER.ETPWM.VAR.ETPWM6_PWMB_RISING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM5_PWMA_POLARITY.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM4_CHOPPER_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM5_DEADBAND_OUTPUT.VALUE=PWMA_PWMB_NIL -DRIVER.ETPWM.VAR.ETPWM6_FDELAY_SOURCE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_RDELAY_SOURCE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_PWMA_DUTYTIME.VALUE=500.000 -DRIVER.ETPWM.VAR.ETPWM6_PWMB_FALLING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_PWMA_COMPARE.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM5_PWMB_ENA.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_CHOPPER_PERIOD.VALUE=100.000 -DRIVER.ETPWM.VAR.ETPWM6_CHOPPER_DUTYTIME.VALUE=50.000 -DRIVER.ETPWM.VAR.ETPWM1_PWMB_FALLING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM3_SELECT_EVENT.VALUE=NO_EVENT -DRIVER.ETPWM.VAR.ETPWM2_CLKDIV.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_PWMA_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM7_PWMA_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM2_DEADBAND_INPUT.VALUE=PWMA_RED_FED -DRIVER.ETPWM.VAR.ETPWM5_CBC.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_CBC1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_CBC2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_CBC3.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_CHOPPER_DUTYTIME_REG.VALUE=3 -DRIVER.ETPWM.VAR.ETPWM7_PWMB_DEADBAND_OUT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM1_CBC4.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_CBC5.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_CBC6.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_DCAEVT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_PWMB_PERIOD_REG.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM3_CHOPPER_DUTYTIME_REG.VALUE=3 -DRIVER.ETPWM.VAR.ETPWM1_CHOPPER_MODE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM5_PWMA_PERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM4_DCAEVT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_TB_ACTUALFREQUENCY.VALUE=80.000 -DRIVER.ETPWM.VAR.ETPWM3_TB_FREQUENCY.VALUE=110.000 -DRIVER.ETPWM.VAR.ETPWM2_PWMB_FALLING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM5_CHOPPER_DUTYTIME_REG.VALUE=3 -DRIVER.ETPWM.VAR.ETPWM2_OSHT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_CHOPPER_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM1_PWMB_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM1_HSPCLKDIV_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM7_INTERRUPT_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM2_OSHT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_OSHT3.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_OSHT4.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_CHOPPER_DUTYTIME_REG.VALUE=3 -DRIVER.ETPWM.VAR.ETPWM4_PWMB_POLARITY.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_PWMA_COMPARE.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM2_OSHT5.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_DEADBAND_OUTPUT.VALUE=PWMA_PWMB_NIL -DRIVER.ETPWM.VAR.ETPWM3_PWMB_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM2_OSHT6.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM6_CBC.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_PWMB_DUTYTIME.VALUE=500.000 -DRIVER.ETPWM.VAR.ETPWM6_OSHT_WIDTH_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM2_CHOPPER_PERIOD.VALUE=100.000 -DRIVER.ETPWM.VAR.ETPWM2_PWMA_PERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM5_CHOPPER_DUTYTIME.VALUE=50.000 -DRIVER.ETPWM.VAR.ETPWM5_OSHT_ACTUAL_WIDTH.VALUE=100 -DRIVER.ETPWM.VAR.ETPWM4_DCBEVT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_SOCA_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM5_PWMA_DEADBAND_OUT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM4_DCBEVT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_PWMB_FALLING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM4_OSHT_WIDTH.VALUE=100 -DRIVER.ETPWM.VAR.ETPWM5_PWMA_FALLING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM4_PWMA_RISING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM1_PWMA_ENA.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM7_OSHT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM6_PWMB_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM6_PWMA_PERIOD_REG.VALUE=1000 -DRIVER.ETPWM.VAR.ETPWM6_HSPCLKDIV_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM4_PWMB_RISING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM7_OSHT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM6_PWMB_PERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM7_CBC.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_OSHT3.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_CBC1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_OSHT4.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_CBC2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_HSPCLKDIV.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM7_OSHT5.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_PWMB_FALLING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM2_CBC3.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_PWMB_PERIOD_REG.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM2_PWMA_POLARITY.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM2_CLKDIV_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM7_OSHT6.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_SOCA_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM2_CBC4.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_OST.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_CHOPPER_ACTUALPERIOD.VALUE=100.000 -DRIVER.ETPWM.VAR.ETPWM1_PWMA_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM7_PWMB_DUTYTIME.VALUE=500.000 -DRIVER.ETPWM.VAR.ETPWM3_FDELAY_SOURCE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM2_CBC5.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_CLKDIV.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM2_CBC6.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_PWMB_COMPARE.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM7_DEADBAND_INPUT.VALUE=PWMA_RED_FED -DRIVER.ETPWM.VAR.ETPWM6_INTERRUPT_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM3_CHOPPER_ACTUALPERIOD.VALUE=100.000 -DRIVER.ETPWM.VAR.ETPWM1_PWMB_DEADBAND_OUT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_ENABLE_SOCA.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_PWMB_FALLING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM1_BASE.VALUE=0xFCF78C00 -DRIVER.ETPWM.VAR.ETPWM6_ENABLE_SOCB.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_PWMB_ENA.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM5_CHOPPER_ACTUALPERIOD.VALUE=100.000 -DRIVER.ETPWM.VAR.ETPWM3_PWMB_PERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM1_DEADBAND_OUTPUT.VALUE=PWMA_PWMB_NIL -DRIVER.ETPWM.VAR.ETPWM4_TB_ACTUALFREQUENCY.VALUE=80.000 -DRIVER.ETPWM.VAR.ETPWM2_OSHT_WIDTH_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM7_CHOPPER_ACTUALPERIOD.VALUE=100.000 -DRIVER.ETPWM.VAR.ETPWM6_SOCB_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM4_CHOPPER_DUTYTIME.VALUE=50.000 -DRIVER.ETPWM.VAR.ETPWM5_CHOPPER_PERIOD_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM4_PWMA_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM3_DCAEVT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_DCAEVT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_OST.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_ENABLE_SOCA.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM6_HSPCLKDIV.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_ENABLE_SOCB.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_PWMA_POLARITY.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM2_PWMA_FALLING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_PWMA_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM5_RDELAY_SOURCE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM5_PWMB_FALLING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM5_PWMA_DUTYTIME.VALUE=500.000 -DRIVER.ETPWM.VAR.ETPWM4_PWMA_PERIOD_REG.VALUE=1000 -DRIVER.ETPWM.VAR.ETPWM7_CHOPPER_PERIOD.VALUE=100.000 -DRIVER.ETPWM.VAR.ETPWM6_PWMB_DEADBAND_OUT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_SOCB_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM4_PWMB_COMPARE.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM4_PWMA_ENA.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM2_PWMB_FALLING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM1_PWMB_POLARITY.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_CBC1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_SELECT_EVENT.VALUE=NO_EVENT -DRIVER.ETPWM.VAR.ETPWM3_CBC2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_DCBEVT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_CBC3.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_INTERRUPT_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM3_OST.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_DCBEVT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_CBC4.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_DEADBAND_INPUT.VALUE=PWMA_RED_FED -DRIVER.ETPWM.VAR.ETPWM3_CBC5.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_CBC6.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_PWMA_FALLING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM2_PWMB_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM6_PWMB_FALLING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM2_BASE.VALUE=0xFCF78D00 -DRIVER.ETPWM.VAR.ETPWM7_CHOPPER_DUTY_NEW.VALUE=50.0 -DRIVER.ETPWM.VAR.ETPWM7_CLKDIV_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM5_CHOPPER_MODE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_OSHT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_OSHT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_TB_FREQUENCY.VALUE=110.000 -DRIVER.ETPWM.VAR.ETPWM5_SELECT_SOCA.VALUE=DCAEVT1 -DRIVER.ETPWM.VAR.ETPWM3_OSHT3.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_CHOPPER_DUTYTIME.VALUE=50.000 -DRIVER.ETPWM.VAR.ETPWM5_SELECT_SOCB.VALUE=DCBEVT1 -DRIVER.ETPWM.VAR.ETPWM4_OSHT_ACTUAL_WIDTH.VALUE=100 -DRIVER.ETPWM.VAR.ETPWM3_OSHT4.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_OSHT_WIDTH.VALUE=100 -DRIVER.ETPWM.VAR.ETPWM5_CHOPPER_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM4_PWMB_FALLING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM4_PWMB_ENA.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM3_OSHT5.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_HSPCLKDIV_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM4_PWMA_DEADBAND_OUT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_OSHT6.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_TB_ACTUALFREQUENCY.VALUE=80.000 -DRIVER.ETPWM.VAR.ETPWM5_CLKDIV.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM7_PWMA_COMPARE.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM6_PWMB_POLARITY.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM4_PWMB_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM4_OST.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_PWMB_DUTYTIME.VALUE=500.000 -DRIVER.ETPWM.VAR.ETPWM7_OSHT_WIDTH_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM2_CHOPPER_PERIOD_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM2_PWMA_PERIOD_REG.VALUE=1000 -DRIVER.ETPWM.VAR.ETPWM1_PWMB_COMPARE.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM1_CLKDIV_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_CHOPPER_PERIOD.VALUE=100.000 -DRIVER.ETPWM.VAR.ETPWM7_PWMB_FALLING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM2_SELECT_SOCA.VALUE=DCAEVT1 -DRIVER.ETPWM.VAR.ETPWM4_SELECT_EVENT.VALUE=NO_EVENT -DRIVER.ETPWM.VAR.ETPWM2_SELECT_SOCB.VALUE=DCBEVT1 -DRIVER.ETPWM.VAR.ETPWM7_PWMB_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM2_DCAEVT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_INTERRUPT_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM2_DCAEVT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_CBC1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_PWMB_RISING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM4_CBC2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_PWMA_ENA.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM4_CBC3.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_CHOPPER_MODE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM1_PWMA_FALLING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM7_PWMA_PERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM5_OST.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_CBC4.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_CBC5.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_TB_FREQUENCY.VALUE=110.000 -DRIVER.ETPWM.VAR.ETPWM4_CBC6.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM6_CHOPPER_DUTY_NEW.VALUE=50.0 -DRIVER.ETPWM.VAR.ETPWM4_PWMA_POLARITY.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM2_CHOPPER_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM2_PWMA_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM5_FDELAY_SOURCE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_BASE.VALUE=0xFCF78E00 -DRIVER.ETPWM.VAR.ETPWM2_CHOPPER_DUTYTIME.VALUE=50.000 -DRIVER.ETPWM.VAR.ETPWM2_RDELAY_SOURCE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM2_PWMB_RISING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM2_PWMA_DUTYTIME.VALUE=500.000 -DRIVER.ETPWM.VAR.ETPWM1_PWMA_FALLING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM4_HSPCLKDIV.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM4_PWMA_COMPARE.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM1_PWMB_FALLING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM1_PWMB_DEADBAND_INVERT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM7_PWMA_RISING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM2_DCBEVT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_PWMA_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM4_PWMA_PERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM2_DCBEVT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_PWMB_RISING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM3_PWMB_DEADBAND_INVERT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM1_SELECT_EVENT.VALUE=NO_EVENT -DRIVER.ETPWM.VAR.ETPWM7_PWMB_PERIOD_REG.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM7_PWMB_RISING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM7_PWMB_ENA.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM3_OSHT_WIDTH_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM3_PWMA_FALLING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM7_SOCA_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_OST.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_PWMB_DEADBAND_OUT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM5_PWMB_DEADBAND_INVERT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_TB_ACTUALFREQUENCY.VALUE=80.000 -DRIVER.ETPWM.VAR.ETPWM4_PWMB_RISING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM2_PWMA_FALLING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM7_PWMB_DEADBAND_INVERT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM7_PWMA_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM3_PWMB_FALLING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_DEADBAND_OUTPUT.VALUE=PWMA_PWMB_NIL -DRIVER.ETPWM.VAR.ETPWM3_INTERRUPT_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM1_PWMA_PERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM7_RDELAY_SOURCE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM7_PWMA_DUTYTIME.VALUE=500.000 -DRIVER.ETPWM.VAR.ETPWM1_TB_FREQUENCY.VALUE=110.000 -DRIVER.ETPWM.VAR.ETPWM3_CLKDIV.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM2_PWMA_DEADBAND_INVERT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM7_CHOPPER_PERIOD_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_CLKDIV_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM4_SOCA_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM1_PWMB_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM5_CBC1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_PWMB_RISING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM5_CBC2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_PWMA_DEADBAND_INVERT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM2_OSHT_WIDTH.VALUE=100 -DRIVER.ETPWM.VAR.ETPWM5_CBC3.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_CHOPPER_DUTY_NEW.VALUE=50.0 -DRIVER.ETPWM.VAR.ETPWM3_PWMB_POLARITY.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM1_PWMA_COMPARE.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM7_OST.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_CBC4.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_CBC5.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_CHOPPER_DUTYTIME.VALUE=50.000 -DRIVER.ETPWM.VAR.ETPWM1_PWMB_DUTYTIME.VALUE=500.000 -DRIVER.ETPWM.VAR.ETPWM6_PWMA_DEADBAND_INVERT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM5_CBC6.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_OSHT_ACTUAL_WIDTH.VALUE=100 -DRIVER.ETPWM.VAR.ETPWM2_PWMB_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM5_PWMB_PERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM4_DEADBAND_INPUT.VALUE=PWMA_RED_FED -DRIVER.ETPWM.VAR.ETPWM3_PWMA_DEADBAND_OUT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_PWMB_RISING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM4_BASE.VALUE=0xFCF78F00 -DRIVER.ETPWM.VAR.ETPWM3_PWMA_FALLING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM4_OSHT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_DCAEVT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_PWMA_RISING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM4_OSHT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_SOCA_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM1_DCAEVT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_OSHT3.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_OSHT4.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_PWMB_PERIOD_REG.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM4_OSHT5.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_PWMB_RISING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM4_OSHT6.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_PWMB_RISING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM5_ENABLE_SOCA.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_ENABLE_SOCB.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_HSPCLKDIV_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_PWMB_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM2_PWMB_PERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM3_PWMA_ENA.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM1_PWMA_POLARITY.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM5_SOCB_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM4_DEADBAND_OUTPUT.VALUE=PWMA_PWMB_NIL -DRIVER.ETPWM.VAR.ETPWM2_INTERRUPT_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_PWMB_DUTYTIME.VALUE=500.000 -DRIVER.ETPWM.VAR.ETPWM4_PWMA_FALLING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM2_FDELAY_SOURCE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM1_PWMA_RISING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM7_PWMB_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM5_PWMB_COMPARE.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM5_PWMA_RISING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM2_CHOPPER_DUTYTIME_REG.VALUE=3 -DRIVER.ETPWM.VAR.ETPWM1_DCBEVT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_CHOPPER_PERIOD.VALUE=100.000 -DRIVER.ETPWM.VAR.ETPWM1_DCBEVT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_TB_ACTUALFREQUENCY.VALUE=80.000 -DRIVER.ETPWM.VAR.ETPWM2_ENABLE_SOCA.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_ENABLE_SOCB.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_HSPCLKDIV.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM5_PWMB_RISING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM4_CHOPPER_DUTYTIME_REG.VALUE=3 -DRIVER.ETPWM.VAR.ETPWM4_CHOPPER_DUTY_NEW.VALUE=50.0 -DRIVER.ETPWM.VAR.ETPWM6_CBC1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_PWMA_RISING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM6_CBC2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM6_CBC3.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM6_CHOPPER_DUTYTIME_REG.VALUE=3 -DRIVER.ETPWM.VAR.ETPWM4_CHOPPER_PERIOD_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_CBC4.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_SOCB_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_CBC5.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM6_CBC6.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_PWMA_PERIOD_REG.VALUE=1000 -DRIVER.ETPWM.VAR.ETPWM6_CHOPPER_MODE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_PWMB_ENA.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM4_PWMA_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM7_SELECT_SOCA.VALUE=DCAEVT1 -DRIVER.ETPWM.VAR.ETPWM5_PWMA_FALLING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM5_BASE.VALUE=0xFCF79000 -DRIVER.ETPWM.VAR.ETPWM3_PWMA_RISING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM7_SELECT_SOCB.VALUE=DCBEVT1 -DRIVER.ETPWM.VAR.ETPWM7_OSHT_WIDTH.VALUE=100 -DRIVER.ETPWM.VAR.ETPWM1_CLKDIV.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_CHOPPER_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM6_PWMA_POLARITY.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_PWMB_PERIOD_REG.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM4_PWMB_DEADBAND_OUT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM7_FDELAY_SOURCE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM4_RDELAY_SOURCE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM4_PWMA_DUTYTIME.VALUE=500.000 -DRIVER.ETPWM.VAR.ETPWM7_DCAEVT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_PWMA_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM7_DCAEVT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_PWMA_RISING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM7_HSPCLKDIV.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM5_CLKDIV_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM2_PWMB_COMPARE.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM2_DEADBAND_OUTPUT.VALUE=PWMA_PWMB_NIL -DRIVER.ETPWM.VAR.ETPWM1_INTERRUPT_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM4_SELECT_SOCA.VALUE=DCAEVT1 -DRIVER.ETPWM.VAR.ETPWM5_SELECT_EVENT.VALUE=NO_EVENT -DRIVER.ETPWM.VAR.ETPWM4_SELECT_SOCB.VALUE=DCBEVT1 -DRIVER.ETPWM.VAR.ETPWM1_OSHT_WIDTH.VALUE=100 -DRIVER.ETPWM.VAR.ETPWM4_OSHT_WIDTH_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_PWMA_FALLING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM5_PWMA_RISING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM6_PWMA_ENA.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM3_CHOPPER_DUTY_NEW.VALUE=50.0 -DRIVER.ETPWM.VAR.ETPWM2_CHOPPER_ACTUALPERIOD.VALUE=100.000 -DRIVER.ETPWM.VAR.ETPWM2_OSHT_ACTUAL_WIDTH.VALUE=100 -DRIVER.ETPWM.VAR.ETPWM7_DCBEVT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_CHOPPER_MODE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM7_DCBEVT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_CHOPPER_ACTUALPERIOD.VALUE=100.000 -DRIVER.ETPWM.VAR.ETPWM2_PWMA_DEADBAND_OUT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM7_CBC1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM6_PWMA_RISING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM5_TB_FREQUENCY.VALUE=110.000 -DRIVER.ETPWM.VAR.ETPWM1_SELECT_SOCA.VALUE=DCAEVT1 -DRIVER.ETPWM.VAR.ETPWM7_CBC2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_SELECT_SOCB.VALUE=DCBEVT1 -DRIVER.ETPWM.VAR.ETPWM7_CBC3.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_PWMA_PERIOD_REG.VALUE=1000 -DRIVER.ETPWM.VAR.ETPWM3_CHOPPER_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM2_HSPCLKDIV_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM7_CBC4.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM6_CHOPPER_ACTUALPERIOD.VALUE=100.000 -DRIVER.ETPWM.VAR.ETPWM7_CBC5.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_CBC6.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_PWMB_POLARITY.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM5_PWMA_COMPARE.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM3_PWMA_RISING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM1_CHOPPER_PERIOD_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM1_PWMB_PERIOD_REG.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM7_PWMA_FALLING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM7_PWMA_RISING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM6_BASE.VALUE=0xFCF79100 -DRIVER.ETPWM.VAR.ETPWM3_PWMB_DUTYTIME.VALUE=500.000 -DRIVER.ETPWM.VAR.ETPWM6_PWMB_ENA.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM5_OSHT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_PWMB_RISING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_PWMA_PERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM5_OSHT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_DEADBAND_INPUT.VALUE=PWMA_RED_FED -DRIVER.ETPWM.VAR.ETPWM5_PWMB_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM5_OSHT3.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_OSHT4.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_SELECT_EVENT.VALUE=NO_EVENT -DRIVER.ETPWM.VAR.ETPWM5_OSHT5.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_PWMB_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM5_OSHT6.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_OSHT_ACTUAL_WIDTH.VALUE=100 -DRIVER.ETPWM.VAR.ETPWM6_CLKDIV.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM7_PWMA_DEADBAND_OUT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM7_HSPCLKDIV_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM2_CHOPPER_DUTY_NEW.VALUE=50.0 -DRIVER.ETPWM.VAR.ETPWM3_PWMA_PERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM2_TB_FREQUENCY.VALUE=110.000 -DRIVER.ETPWM.VAR.ETPWM6_DCAEVT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_PWMA_POLARITY.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_SOCA_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_DCAEVT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_FDELAY_SOURCE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM1_RDELAY_SOURCE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM1_PWMA_DUTYTIME.VALUE=500.000 -DRIVER.ECAP.VAR.ECAP1_PRESCALE_REG.VALUE=0 -DRIVER.ECAP.VAR.ECAP2_ENA_PWM.VALUE=0 -DRIVER.ECAP.VAR.ECAP4_PRD.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP6_RESET_COUNTER_CAP1.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP6_RESET_COUNTER_CAP2.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP6_RESET_COUNTER_CAP3.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP6_RESET_COUNTER_CAP4.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP5_PWM_DUTY.VALUE=50 -DRIVER.ECAP.VAR.ECAP5_PWM_PERIOD.VALUE=1000.000 -DRIVER.ECAP.VAR.ECAP4_CAP2_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP5_PRESCALE.VALUE=1 -DRIVER.ECAP.VAR.ECAP5_PRD.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP6_PWM_COMPARE.VALUE=37 -DRIVER.ECAP.VAR.ECAP5_CAP4_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP5_ENA_LOAD.VALUE=0 -DRIVER.ECAP.VAR.ECAP6_PWM_PERIOD_REG.VALUE=74 -DRIVER.ECAP.VAR.ECAP6_WRAP_COUNTER.VALUE=CAPTURE_EVENT1 -DRIVER.ECAP.VAR.ECAP3_PWM_COMPARE.VALUE=37 -DRIVER.ECAP.VAR.ECAP2_CAP1_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP6_PRD.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP4_PWM_DUTYTIME.VALUE=500 -DRIVER.ECAP.VAR.ECAP3_RESET_COUNTER_CAP1.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP3_CAP3_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP3_RESET_COUNTER_CAP2.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP3_RESET_COUNTER_CAP3.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP3_RESET_COUNTER_CAP4.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP1_ENA_PWM.VALUE=0 -DRIVER.ECAP.VAR.ECAP3_WRAP_COUNTER.VALUE=CAPTURE_EVENT1 -DRIVER.ECAP.VAR.ECAP2_PWM_PERIOD_REG.VALUE=74 -DRIVER.ECAP.VAR.ECAP5_RESET_COUNTER.VALUE=0 -DRIVER.ECAP.VAR.ECAP5_CEVT1.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP4_CAPTURE_MODE.VALUE=CONTINUOUS -DRIVER.ECAP.VAR.ECAP5_CEVT2.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP5_CEVT3.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP5_CEVT4.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP1_PWM_DUTY.VALUE=50 -DRIVER.ECAP.VAR.ECAP1_CAP2_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP4_PWM_PERIOD.VALUE=1000.000 -DRIVER.ECAP.VAR.ECAP1_PWM_DUTYTIME.VALUE=500 -DRIVER.ECAP.VAR.ECAP5_CNTOVF.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP5_PRESCALE_REG.VALUE=0 -DRIVER.ECAP.VAR.ECAP2_CAP4_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP1_PRESCALE.VALUE=1 -DRIVER.ECAP.VAR.ECAP1_ENA_LOAD.VALUE=0 -DRIVER.ECAP.VAR.ECAP6_CAP2_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP1_CAPTURE_MODE.VALUE=CONTINUOUS -DRIVER.ECAP.VAR.ECAP2_PRESCALE_REG.VALUE=0 -DRIVER.ECAP.VAR.ECAP4_PWM_DUTY.VALUE=50 -DRIVER.ECAP.VAR.ECAP6_PWM_ACTUALPERIOD.VALUE=1000 -DRIVER.ECAP.VAR.ECAP4_CAP1_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP1_CEVT1.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP1_CEVT2.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP1_CEVT3.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP2_RESET_COUNTER.VALUE=0 -DRIVER.ECAP.VAR.ECAP1_CEVT4.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP4_PRESCALE.VALUE=1 -DRIVER.ECAP.VAR.ECAP5_CAP3_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP4_ENA_LOAD.VALUE=0 -DRIVER.ECAP.VAR.ECAP3_CNTOVF.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP3_PWM_PERIOD.VALUE=1000.000 -DRIVER.ECAP.VAR.ECAP5_RESET_COUNTER_CAP1.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP5_RESET_COUNTER_CAP2.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP5_RESET_COUNTER_CAP3.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP5_RESET_COUNTER_CAP4.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP6_CEVT1.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP3_PWM_PERIOD_REG.VALUE=74 -DRIVER.ECAP.VAR.ECAP6_CEVT2.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP6_CEVT3.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP6_CEVT4.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP5_PWM_COMPARE.VALUE=37 -DRIVER.ECAP.VAR.ECAP5_PWM_ACTUALPERIOD.VALUE=1000 -DRIVER.ECAP.VAR.ECAP6_ENA_PWM.VALUE=0 -DRIVER.ECAP.VAR.ECAP3_CAP2_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP5_PWM_DUTYTIME.VALUE=500 -DRIVER.ECAP.VAR.ECAP1_BASE.VALUE=0xFCF79300 -DRIVER.ECAP.VAR.ECAP4_CAP4_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP2_PWM_COMPARE.VALUE=37 -DRIVER.ECAP.VAR.ECAP4_WRAP_COUNTER.VALUE=CAPTURE_EVENT1 -DRIVER.ECAP.VAR.ECAP5_CAPTURE_MODE.VALUE=CONTINUOUS -DRIVER.ECAP.VAR.ECAP1_CAP1_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP2_RESET_COUNTER_CAP1.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP4_PWM_ACTUALPERIOD.VALUE=1000 -DRIVER.ECAP.VAR.ECAP2_RESET_COUNTER_CAP2.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP1_CNTOVF.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP2_PWM_DUTYTIME.VALUE=500 -DRIVER.ECAP.VAR.ECAP2_RESET_COUNTER_CAP3.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP2_RESET_COUNTER_CAP4.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP2_CAP3_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP6_PRESCALE_REG.VALUE=0 -DRIVER.ECAP.VAR.ECAP2_BASE.VALUE=0xFCF79400 -DRIVER.ECAP.VAR.ECAP2_CEVT1.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP2_CEVT2.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP2_PWM_PERIOD.VALUE=1000.000 -DRIVER.ECAP.VAR.ECAP2_CEVT3.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP2_CEVT4.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP1_WRAP_COUNTER.VALUE=CAPTURE_EVENT1 -DRIVER.ECAP.VAR.ECAP6_CAP1_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP5_ENA_PWM.VALUE=0 -DRIVER.ECAP.VAR.ECAP4_RESET_COUNTER.VALUE=0 -DRIVER.ECAP.VAR.ECAP2_CAPTURE_MODE.VALUE=CONTINUOUS -DRIVER.ECAP.VAR.ECAP3_PWM_ACTUALPERIOD.VALUE=1000 -DRIVER.ECAP.VAR.ECAP3_PWM_DUTY.VALUE=50 -DRIVER.ECAP.VAR.ECAP3_PRESCALE_REG.VALUE=0 -DRIVER.ECAP.VAR.ECAP1_CAP4_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP4_PWM_PERIOD_REG.VALUE=74 -DRIVER.ECAP.VAR.ECAP3_PRESCALE.VALUE=1 -DRIVER.ECAP.VAR.ECAP6_CNTOVF.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP3_BASE.VALUE=0xFCF79500 -DRIVER.ECAP.VAR.ECAP5_CAP2_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP3_ENA_LOAD.VALUE=0 -DRIVER.ECAP.VAR.ECAP6_CAP4_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP1_CMP.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP2_PWM_ACTUALPERIOD.VALUE=1000 -DRIVER.ECAP.VAR.ECAP4_ENA_PWM.VALUE=0 -DRIVER.ECAP.VAR.ECAP3_CAP1_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP1_PWM_PERIOD.VALUE=1000.000 -DRIVER.ECAP.VAR.ECAP1_RESET_COUNTER.VALUE=0 -DRIVER.ECAP.VAR.ECAP6_PWM_DUTY.VALUE=50 -DRIVER.ECAP.VAR.ECAP2_CMP.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP6_PWM_DUTYTIME.VALUE=500 -DRIVER.ECAP.VAR.ECAP4_CAP3_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP4_BASE.VALUE=0xFCF79600 -DRIVER.ECAP.VAR.ECAP6_PRESCALE.VALUE=1 -DRIVER.ECAP.VAR.ECAP4_PWM_COMPARE.VALUE=37 -DRIVER.ECAP.VAR.ECAP4_RESET_COUNTER_CAP1.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP3_CEVT1.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP4_RESET_COUNTER_CAP2.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP3_CEVT2.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP4_RESET_COUNTER_CAP3.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP3_CEVT3.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP4_RESET_COUNTER_CAP4.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP3_CEVT4.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP6_ENA_LOAD.VALUE=0 -DRIVER.ECAP.VAR.ECAP5_WRAP_COUNTER.VALUE=CAPTURE_EVENT1 -DRIVER.ECAP.VAR.ECAP4_CNTOVF.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP3_CMP.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP1_PWM_ACTUALPERIOD.VALUE=1000 -DRIVER.ECAP.VAR.ECAP6_RESET_COUNTER.VALUE=0 -DRIVER.ECAP.VAR.ECAP6_CAPTURE_MODE.VALUE=CONTINUOUS -DRIVER.ECAP.VAR.ECAP1_PWM_COMPARE.VALUE=37 -DRIVER.ECAP.VAR.ECAP2_CAP2_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP3_PWM_DUTYTIME.VALUE=500 -DRIVER.ECAP.VAR.ECAP3_CAP4_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP4_CMP.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP1_PRD.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP5_PWM_PERIOD_REG.VALUE=74 -DRIVER.ECAP.VAR.ECAP6_PWM_PERIOD.VALUE=1000.000 -DRIVER.ECAP.VAR.ECAP5_BASE.VALUE=0xFCF79700 -DRIVER.ECAP.VAR.ECAP3_ENA_PWM.VALUE=0 -DRIVER.ECAP.VAR.ECAP2_WRAP_COUNTER.VALUE=CAPTURE_EVENT1 -DRIVER.ECAP.VAR.ECAP3_CAPTURE_MODE.VALUE=CONTINUOUS -DRIVER.ECAP.VAR.ECAP1_RESET_COUNTER_CAP1.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP1_RESET_COUNTER_CAP2.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP1_RESET_COUNTER_CAP3.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP1_RESET_COUNTER_CAP4.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP5_CMP.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP2_PRD.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP2_PWM_DUTY.VALUE=50 -DRIVER.ECAP.VAR.ECAP1_CAP3_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP4_PRESCALE_REG.VALUE=0 -DRIVER.ECAP.VAR.ECAP2_PRESCALE.VALUE=1 -DRIVER.ECAP.VAR.ECAP2_CNTOVF.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP5_CAP1_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP1_PWM_PERIOD_REG.VALUE=74 -DRIVER.ECAP.VAR.ECAP6_CMP.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP2_ENA_LOAD.VALUE=0 -DRIVER.ECAP.VAR.ECAP3_PRD.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP3_RESET_COUNTER.VALUE=0 -DRIVER.ECAP.VAR.ECAP6_BASE.VALUE=0xFCF79800 -DRIVER.ECAP.VAR.ECAP6_CAP3_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP4_CEVT1.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP4_CEVT2.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP4_CEVT3.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP4_CEVT4.VALUE=0x0000 -DRIVER.EQEP.VAR.EQEP2_QUPRD.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_INDEX_EVT_INIT_ENABLE.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_IGATE.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_QPE_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_PC_RST_MODE.VALUE=MAX_POSITION -DRIVER.EQEP.VAR.EQEP1_UTO_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_SEL_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_INDEX_EVT_SELECT.VALUE=RISING_EDGE -DRIVER.EQEP.VAR.EQEP2_PCE_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_PCU_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_BASE.VALUE=0xFCF79900 -DRIVER.EQEP.VAR.EQEP1_INV_QEPS_POL.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_INV_QEPA_POL.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_PCSHDW.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_PC_INIT_VALUE.VALUE=0x00000000 -DRIVER.EQEP.VAR.EQEP2_PCR_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_BASE.VALUE=0xFCF79A00 -DRIVER.EQEP.VAR.EQEP1_ENABLE_CAPTURE.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_INV_QEPB_POL.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_MAXPC_VALUE.VALUE=0x00000000 -DRIVER.EQEP.VAR.EQEP1_PCM_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_PCPOL.VALUE=ACTIVE_HIGH -DRIVER.EQEP.VAR.EQEP2_UNIT_POS_PRESCALER.VALUE=PS_512 -DRIVER.EQEP.VAR.EQEP2_CAP_CLK_PRESCALER.VALUE=PS_8 -DRIVER.EQEP.VAR.EQEP1_PCSPW.VALUE=0x000 -DRIVER.EQEP.VAR.EQEP1_POSCMP.VALUE=0x00000000 -DRIVER.EQEP.VAR.EQEP2_PC_MODE.VALUE=DIRECTION_COUNT -DRIVER.EQEP.VAR.EQEP1_PCE_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_INV_QEPS_POL.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_SET_INIT_AT_STARTUP.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_ENABLE_CAPTURE.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_STROBE_EVT_SELECT.VALUE=DIRECTON_DEPENDENT -DRIVER.EQEP.VAR.EQEP2_PCPOL.VALUE=ACTIVE_HIGH -DRIVER.EQEP.VAR.EQEP2_INV_QEPA_POL.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_CAP_CLK_PRESCALER.VALUE=PS_8 -DRIVER.EQEP.VAR.EQEP2_QDC_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_QCLM.VALUE=ON_POSITION_COUNTER_READ -DRIVER.EQEP.VAR.EQEP1_PC_MODE.VALUE=DIRECTION_COUNT -DRIVER.EQEP.VAR.EQEP2_WTO_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_SWI_ENABLE.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_PCR_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_INV_QEPB_POL.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_IEL.VALUE=RISING_EDGE -DRIVER.EQEP.VAR.EQEP2_PCSPW.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_PC_INIT_VALUE.VALUE=0x00000000 -DRIVER.EQEP.VAR.EQEP1_PCLOAD.VALUE=QPOSCNT_EQ_QPSCMP -DRIVER.EQEP.VAR.EQEP2_IEL_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_IEL.VALUE=RISING_EDGE -DRIVER.EQEP.VAR.EQEP1_MAXPC_VALUE.VALUE=0x00000000 -DRIVER.EQEP.VAR.EQEP1_INV_QEPI_POL.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_QCLM.VALUE=ON_POSITION_COUNTER_READ -DRIVER.EQEP.VAR.EQEP1_STROBE_EVT_INIT_ENABLE.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_PCO_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_STROBE_EVT_INIT_ENABLE.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_EXT_CLK_RATE.VALUE=RESOLUTION_1x -DRIVER.EQEP.VAR.EQEP1_STROBE_EVT_SELECT.VALUE=DIRECTON_DEPENDENT -DRIVER.EQEP.VAR.EQEP1_UNIT_POS_PRESCALER.VALUE=PS_512 -DRIVER.EQEP.VAR.EQEP1_WDPRD.VALUE=0x0000 -DRIVER.EQEP.VAR.EQEP1_SEL.VALUE=RISING_EDGE -DRIVER.EQEP.VAR.EQEP1_SOEN.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_QPE_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_PC_RST_MODE.VALUE=MAX_POSITION -DRIVER.EQEP.VAR.EQEP1_WDE.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_SET_INIT_AT_STARTUP.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_UTO_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_SWI_ENABLE.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_POSITIVE_ROTATION.VALUE=CLOCKWISE -DRIVER.EQEP.VAR.EQEP2_SEL_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_SEL.VALUE=RISING_EDGE -DRIVER.EQEP.VAR.EQEP2_PCU_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_WDE.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_SPSEL.VALUE=INDEX_PIN -DRIVER.EQEP.VAR.EQEP1_PCSHDW.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_SWAP.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_SOEN.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_POSCMP.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_QUPRD.VALUE=0x00000000 -DRIVER.EQEP.VAR.EQEP1_IGATE.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_QDC_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_SWAP.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_WDPRD.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_WTO_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_POSITIVE_ROTATION.VALUE=CLOCKWISE -DRIVER.EQEP.VAR.EQEP2_INV_QEPI_POL.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_PCM_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_IEL_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_EXT_CLK_RATE.VALUE=RESOLUTION_1x -DRIVER.EQEP.VAR.EQEP2_SPSEL.VALUE=INDEX_PIN -DRIVER.EQEP.VAR.EQEP1_PCO_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_INDEX_EVT_SELECT.VALUE=RISING_EDGE -DRIVER.EQEP.VAR.EQEP1_INDEX_EVT_INIT_ENABLE.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_PCLOAD.VALUE=QPOSCNT_EQ_QPSCMP -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_11_NUMBER.VALUE=11 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_10_END.VALUE=9 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_7_NUMBER.VALUE=7 -DRIVER.FEE.VAR.FEE_START_SECTOR.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_3_DEVICE_INDEX.VALUE=0x00000000 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_13_DATASETS.VALUE=1 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_4_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_21_START.VALUE=20 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_13_START.VALUE=12 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_9_START.VALUE=8 -DRIVER.FEE.VAR.FEE_VS29_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_11_OFFSET.VALUE=0 -DRIVER.FEE.VAR.FEE_VS30_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VS22_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VS14_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_9_OFFSET.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_32_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_24_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_16_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_11_END.VALUE=10 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_11_SIZE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_2_WRITE_CYCLES.VALUE=0x8 -DRIVER.FEE.VAR.FEE_VS7_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_2_OFFSET.VALUE=0 -DRIVER.FEE.VAR.FEE_READ_CYCLE_COUNT.VALUE=10 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_5_IMED_DATA.VALUE=TRUE -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_3_DATASETS.VALUE=1 -DRIVER.FEE.VAR.FEE_NUMBER_OF_VIRTUAL_SECTORS.VALUE=4 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX15_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX4_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_FLASH_CRC_ENABLE.VALUE=STD_ON -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_26_START.VALUE=25 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_18_START.VALUE=17 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_7_SIZE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_12_NUMBER.VALUE=12 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_20_END.VALUE=19 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_12_END.VALUE=11 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_10_EEP.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_16_WRITE_CYCLES.VALUE=0x8 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_5_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_3_NUMBER.VALUE=3 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_32_NUMBER.VALUE=32 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_24_NUMBER.VALUE=24 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_16_NUMBER.VALUE=16 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_13_IMED_DATA.VALUE=TRUE -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_16_DATASETS.VALUE=1 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_5_NUMBER.VALUE=5 -DRIVER.FEE.VAR.FEE_SECTORS_EEP1.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_33_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_25_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_17_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_21_END.VALUE=20 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_13_END.VALUE=12 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_12_SIZE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_16_OFFSET.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_14_DEVICE_INDEX.VALUE=0x00000000 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_11_EEP.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_5_START.VALUE=4 -DRIVER.FEE.VAR.FEE_BLOCK_NUMBER.VALUE=1 -DRIVER.FEE.VAR.FEE_VS27_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VS19_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VS20_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VS12_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_7_OFFSET.VALUE=0 -DRIVER.FEE.VAR.FEE_DRIVER_INDEX.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_6_DATASETS.VALUE=1 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_13_WRITE_CYCLES.VALUE=0x8 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_9_WRITE_CYCLES.VALUE=0x8 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_8_SIZE.VALUE=0 -DRIVER.FEE.VAR.FEE_VS5_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_30_END.VALUE=29 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_22_END.VALUE=21 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_14_END.VALUE=13 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX9_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_12_EEP.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX13_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX2_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_6_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_30_START.VALUE=29 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_22_START.VALUE=21 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_14_START.VALUE=13 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_3_IMED_DATA.VALUE=TRUE -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_11_DEVICE_INDEX.VALUE=0x00000000 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_7_DEVICE_INDEX.VALUE=0x00000000 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_10_NUMBER.VALUE=10 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_26_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_18_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_NUMBER_OF_EEPS.VALUE=1 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_8_NUMBER.VALUE=8 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_31_END.VALUE=30 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_29_NUMBER.VALUE=29 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_23_END.VALUE=22 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_15_END.VALUE=14 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_13_SIZE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_13_EEP.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_1_NUMBER.VALUE=1 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_30_NUMBER.VALUE=30 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_22_NUMBER.VALUE=22 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_14_NUMBER.VALUE=14 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_10_WRITE_CYCLES.VALUE=0x8 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_6_WRITE_CYCLES.VALUE=0x8 -DRIVER.FEE.VAR.FEE_DEVICE_INDEX.VALUE=0 -DRIVER.FEE.VAR.FEE_PAGE_OVERHEAD.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_3_NUMBER.VALUE=3 -DRIVER.FEE.VAR.FEE_TI_FEE_SW_MAJOR_VERSION.VALUE=1 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_27_START.VALUE=26 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_19_START.VALUE=18 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_11_IMED_DATA.VALUE=TRUE -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_9_SIZE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_8_IMED_DATA.VALUE=TRUE -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_14_OFFSET.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_12_DATASETS.VALUE=1 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_9_DATASETS.VALUE=1 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_32_END.VALUE=31 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_24_END.VALUE=23 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_16_END.VALUE=15 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_1_END.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_1_START.VALUE=0 -DRIVER.FEE.VAR.FEE_VS33_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VS25_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VS17_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_14_EEP.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_4_DEVICE_INDEX.VALUE=0x00000000 -DRIVER.FEE.VAR.FEE_SECTOR_NUMBER.VALUE=1 -DRIVER.FEE.VAR.FEE_VS10_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUALPAGE_SIZE.VALUE=8 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_5_OFFSET.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_7_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VS3_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX7_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_3_WRITE_CYCLES.VALUE=0x8 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_1_EEP.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_2_DATASETS.VALUE=1 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_27_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_19_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_33_END.VALUE=32 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_25_END.VALUE=24 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_17_END.VALUE=16 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_2_END.VALUE=1 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_16_IMED_DATA.VALUE=TRUE -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_14_SIZE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX11_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_FLASH_WRITECOUNTER_SAVE.VALUE=STD_ON -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_15_EEP.VALUE=0 -DRIVER.FEE.VAR.FEE_VS_INDEX.VALUE=2 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_15_NUMBER.VALUE=15 -DRIVER.FEE.VAR.FEE_TI_FEE_SW_PATCH_VERSION.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_10_START.VALUE=9 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_6_START.VALUE=5 -DRIVER.FEE.VAR.FEE_JOBERROR_NOTIFICATION.VALUE=JobErrorNotification -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_1_DEVICE_INDEX.VALUE=0x00000000 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_10_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_6_NUMBER.VALUE=6 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_27_NUMBER.VALUE=27 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_19_NUMBER.VALUE=19 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_1_IMED_DATA.VALUE=TRUE -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_2_EEP.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_26_END.VALUE=25 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_20_NUMBER.VALUE=20 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_18_END.VALUE=17 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_12_NUMBER.VALUE=12 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_8_NUMBER.VALUE=8 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_3_END.VALUE=2 -DRIVER.FEE.VAR.FEE_BLOCK_SIZE.VALUE=0x10 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_16_EEP.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_15_DATASETS.VALUE=1 -DRIVER.FEE.VAR.FEE_TOTAL_BLOCKS_DATASETS.VALUE=1 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_1_NUMBER.VALUE=1 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_8_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_31_START.VALUE=30 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_23_START.VALUE=22 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_15_START.VALUE=14 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_1_SIZE.VALUE=8 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_12_OFFSET.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX.VALUE=1 -DRIVER.FEE.VAR.FEE_VS31_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VS23_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VS15_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_15_DEVICE_INDEX.VALUE=0x00000000 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_3_EEP.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_28_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_27_END.VALUE=26 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_19_END.VALUE=18 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_4_END.VALUE=3 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_15_SIZE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_6_IMED_DATA.VALUE=TRUE -DRIVER.FEE.VAR.FEE_VS8_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_3_OFFSET.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_5_DATASETS.VALUE=1 -DRIVER.FEE.VAR.FEE_MAXIMUM_BLOCKING_TIME.VALUE=600 -DRIVER.FEE.VAR.FEE_VS1_ENABLE.VALUE=1 -DRIVER.FEE.VAR.FEE_NO_OF_UNCONFIGURED_BLOCKS_TO_COPY.VALUE=0 -DRIVER.FEE.VAR.FEE_FLASH_BANK_NUM.VALUE=7 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX16_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_14_WRITE_CYCLES.VALUE=0x8 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX5_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_11_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_28_START.VALUE=27 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_4_EEP.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_13_NUMBER.VALUE=13 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_28_END.VALUE=27 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_5_END.VALUE=4 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_2_START.VALUE=1 -DRIVER.FEE.VAR.FEE_SECTOR_OVERHEAD.VALUE=16 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_14_IMED_DATA.VALUE=TRUE -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_12_DEVICE_INDEX.VALUE=0x00000000 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_8_DEVICE_INDEX.VALUE=0x00000000 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_9_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_4_NUMBER.VALUE=4 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_33_NUMBER.VALUE=32 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_25_NUMBER.VALUE=25 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_17_NUMBER.VALUE=17 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_2_SIZE.VALUE=0 -DRIVER.FEE.VAR.FEE_TI_FEE_SW_MINOR_VERSION.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_10_NUMBER.VALUE=10 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_6_NUMBER.VALUE=6 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_5_EEP.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_29_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_29_END.VALUE=28 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_6_END.VALUE=5 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_16_SIZE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_11_WRITE_CYCLES.VALUE=0x8 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_7_WRITE_CYCLES.VALUE=0x8 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_11_START.VALUE=10 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_7_START.VALUE=6 -DRIVER.FEE.VAR.FEE_VS28_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VERSIONINFO_API.VALUE=STD_ON -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_10_OFFSET.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_11_DATASETS.VALUE=1 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_8_DATASETS.VALUE=1 -DRIVER.FEE.VAR.MAX_BLOCK_TIME.VALUE=600 -DRIVER.FEE.VAR.FEE_VS21_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VS13_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_8_OFFSET.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_20_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_12_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VS6_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_WRITE_CYCLES.VALUE=10 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_6_EEP.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_5_DEVICE_INDEX.VALUE=0x00000000 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_1_OFFSET.VALUE=16 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_7_END.VALUE=6 -DRIVER.FEE.VAR.FEE_NUMBER_OF_BLOCKS.VALUE=1 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_BANK.VALUE=1 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX14_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_4_IMED_DATA.VALUE=TRUE -DRIVER.FEE.VAR.FEE_BLOCK_INDEX3_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_NUMBER_OF_EIGHTBYTEWRITES.VALUE=1 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_1_DATASETS.VALUE=1 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_32_START.VALUE=31 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_24_START.VALUE=23 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_16_START.VALUE=15 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_4_WRITE_CYCLES.VALUE=0x8 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_3_SIZE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_11_NUMBER.VALUE=11 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_7_EEP.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_9_NUMBER.VALUE=9 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_8_END.VALUE=7 -DRIVER.FEE.VAR.FEE_END_SECTOR.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_1_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_2_NUMBER.VALUE=2 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_31_NUMBER.VALUE=31 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_23_NUMBER.VALUE=23 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_15_NUMBER.VALUE=15 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_2_DEVICE_INDEX.VALUE=0x00000000 -DRIVER.FEE.VAR.FEE_FLASH_ERROR_CORRECTION_HANDLING.VALUE=TI_Fee_None -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_4_NUMBER.VALUE=4 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_12_IMED_DATA.VALUE=TRUE -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_9_IMED_DATA.VALUE=TRUE -DRIVER.FEE.VAR.FEE_DEVERROR_DETECT.VALUE=STD_ON -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_14_DATASETS.VALUE=1 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_21_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_13_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_29_START.VALUE=28 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_15_OFFSET.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_8_EEP.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_9_END.VALUE=8 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_3_START.VALUE=2 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_1_WRITE_CYCLES.VALUE=0x8 -DRIVER.FEE.VAR.FEE_VS26_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VS18_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VS11_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_6_OFFSET.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_4_SIZE.VALUE=0 -DRIVER.FEE.VAR.FEE_VS4_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_16_DEVICE_INDEX.VALUE=0x00000000 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_4_DATASETS.VALUE=1 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX8_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_MAX_NUMBER_OF_LINKS.VALUE=256 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_9_EEP.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX12_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX1_ENABLE.VALUE=1 -DRIVER.FEE.VAR.FEE_FLASH_ERROR_CORRECTION_ENABLE.VALUE=STD_ON -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_2_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_DATASELECT_BITS.VALUE=0 -DRIVER.FEE.VAR.FEE_OPERATING_FREQ.VALUE=100.000 -DRIVER.FEE.VAR.FEE_TOTAL_SECTORS.VALUE=32 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_16_NUMBER.VALUE=16 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_20_START.VALUE=19 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_12_START.VALUE=11 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_8_START.VALUE=7 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_15_WRITE_CYCLES.VALUE=0x8 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_2_IMED_DATA.VALUE=TRUE -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_30_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_22_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_14_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_7_NUMBER.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_28_NUMBER.VALUE=28 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_21_NUMBER.VALUE=21 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_13_NUMBER.VALUE=13 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_9_NUMBER.VALUE=9 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_13_DEVICE_INDEX.VALUE=0x00000000 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_9_DEVICE_INDEX.VALUE=0x00000000 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_2_NUMBER.VALUE=2 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_33_START.VALUE=32 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_25_START.VALUE=24 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_17_START.VALUE=16 -DRIVER.FEE.VAR.FEE_JOBEND_NOTIFICATION.VALUE=JobEndNotification -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_5_SIZE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_13_OFFSET.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_12_WRITE_CYCLES.VALUE=0x8 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_10_IMED_DATA.VALUE=TRUE -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_8_WRITE_CYCLES.VALUE=0x8 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_7_IMED_DATA.VALUE=TRUE -DRIVER.FEE.VAR.FEE_VS32_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VS24_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VS16_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_ENABLE_ECC.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_OVERHEAD.VALUE=24 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_10_DATASETS.VALUE=1 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_7_DATASETS.VALUE=1 -DRIVER.FEE.VAR.FEE_VS9_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_4_OFFSET.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_3_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VS2_ENABLE.VALUE=1 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX6_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_10_DEVICE_INDEX.VALUE=0x00000000 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_6_DEVICE_INDEX.VALUE=0x00000000 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_31_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_23_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_15_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_10_SIZE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX10_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_14_NUMBER.VALUE=14 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_4_START.VALUE=3 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_15_IMED_DATA.VALUE=TRUE -DRIVER.FEE.VAR.FEE_CHECK_BANK7_ACCESS.VALUE=STD_OFF -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_5_WRITE_CYCLES.VALUE=0x8 -DRIVER.FEE.VAR.FEE_POLLING_MODE.VALUE=STD_ON -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_5_NUMBER.VALUE=5 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_26_NUMBER.VALUE=26 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_18_NUMBER.VALUE=18 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_6_SIZE.VALUE=0 -DRIVER.AJSM.VAR.AJSM_NEW_KEY_WORD_2.VALUE=0xFFFDFFFE -DRIVER.AJSM.VAR.AJSM_NEW_KEY_WORD_3.VALUE=0xFFEFFFFF -DRIVER.AJSM.VAR.AJSM_VISIBLE_KEY_WORD_0.VALUE=0xEFFDFFFF -DRIVER.AJSM.VAR.AJSM_VISIBLE_KEY_WORD_1.VALUE=0xFFFFFFFF -DRIVER.AJSM.VAR.AJSM_VISIBLE_KEY_WORD_2.VALUE=0xFFFDFFFE -DRIVER.AJSM.VAR.AJSM_VISIBLE_KEY_WORD_3.VALUE=0xFFEFFFFF -DRIVER.AJSM.VAR.AJSM_SCAN_PATTERN_WORD_0.VALUE=PATTERN_NOT_REQUIRED -DRIVER.AJSM.VAR.AJSM_VISIBLE_KEY_ECC_BYTE_0.VALUE=0xED -DRIVER.AJSM.VAR.AJSM_SCAN_PATTERN_WORD_1.VALUE=PATTERN_NOT_REQUIRED -DRIVER.AJSM.VAR.AJSM_VISIBLE_KEY_ECC_BYTE_1.VALUE=0xED -DRIVER.AJSM.VAR.AJSM_SCAN_PATTERN_WORD_2.VALUE=PATTERN_NOT_REQUIRED -DRIVER.AJSM.VAR.AJSM_SCAN_PATTERN_WORD_3.VALUE=PATTERN_NOT_REQUIRED -DRIVER.AJSM.VAR.AJSM_NEW_KEY_ECC_BYTE_0.VALUE=0xED -DRIVER.AJSM.VAR.AJSM_NEW_KEY_ECC_BYTE_1.VALUE=0xED -DRIVER.AJSM.VAR.AJSM_SCAN_PATTERN.VALUE=PATTERN_NOT_REQUIRED -DRIVER.AJSM.VAR.AJSM_NEW_KEY_WORD_0.VALUE=0xEFFDFFFF -DRIVER.AJSM.VAR.AJSM_NEW_KEY_WORD_1.VALUE=0xFFFFFFFF diff --git a/tests/scripts/waf-tools/f_hcg/tests/test_hcg0.hcg b/tests/scripts/waf-tools/f_hcg/tests/test_hcg0.hcg deleted file mode 100644 index 69285940..00000000 --- a/tests/scripts/waf-tools/f_hcg/tests/test_hcg0.hcg +++ /dev/null @@ -1,1122 +0,0 @@ - - - - TMS570LC43x - TMS570LC4357ZWT_FREERTOS - test_hcg0.dil - ti - - - 04.07.01 - - - - - - - - - - - - - - - - - - - - - - - - - HL_hal_stdtypes.h - include\HL_hal_stdtypes.h - - - HL_sys_common.h - include\HL_sys_common.h - - - HL_reg_system.h - include\HL_reg_system.h - - - HL_reg_flash.h - include\HL_reg_flash.h - - - HL_reg_l2ramw.h - include\HL_reg_l2ramw.h - - - HL_reg_vim.h - include\HL_reg_vim.h - - - HL_reg_pbist.h - include\HL_reg_pbist.h - - - HL_reg_stc.h - include\HL_reg_stc.h - - - HL_reg_efc.h - include\HL_reg_efc.h - - - HL_reg_pcr.h - include\HL_reg_pcr.h - - - HL_reg_pmm.h - include\HL_reg_pmm.h - - - HL_reg_dma.h - include\HL_reg_dma.h - - - HL_reg_ccmr5.h - include\HL_reg_ccmr5.h - - - HL_sys_core.h - include\HL_sys_core.h - - - HL_system.h - include\HL_system.h - - - HL_sys_vim.h - include\HL_sys_vim.h - - - HL_sys_mpu.h - include\HL_sys_mpu.h - - - HL_sys_pmu.h - include\HL_sys_pmu.h - - - HL_sys_pcr.h - include\HL_sys_pcr.h - - - HL_sys_pmm.h - include\HL_sys_pmm.h - - - HL_sys_dma.h - include\HL_sys_dma.h - - - HL_sys_core.s - source\HL_sys_core.s - - - HL_sys_intvecs.s - source\HL_sys_intvecs.s - - - HL_sys_mpu.s - source\HL_sys_mpu.s - - - HL_sys_pmu.s - source\HL_sys_pmu.s - - - HL_sys_pcr.c - source\HL_sys_pcr.c - - - HL_sys_pmm.c - source\HL_sys_pmm.c - - - HL_sys_dma.c - source\HL_sys_dma.c - - - HL_system.c - source\HL_system.c - - - HL_sys_phantom.c - source\HL_sys_phantom.c - - - HL_sys_startup.c - source\HL_sys_startup.c - - - HL_sys_vim.c - source\HL_sys_vim.c - - - HL_sys_main.c - source\HL_sys_main.c - - - HL_notification.c - source\HL_notification.c - - - HL_sys_link.ld - source\HL_sys_link.ld - - - HL_reg_epc.h - include\HL_reg_epc.h - - - HL_reg_nmpu.h - include\HL_reg_nmpu.h - - - HL_reg_scm.h - include\HL_reg_scm.h - - - HL_reg_sdcmmr.h - include\HL_reg_sdcmmr.h - - - HL_epc.h - include\HL_epc.h - - - HL_epc.c - source\HL_epc.c - - - HL_nmpu.h - include\HL_nmpu.h - - - HL_nmpu.c - source\HL_nmpu.c - - - HL_errata.h - include\HL_errata.h - - - HL_errata.c - source\HL_errata.c - - - HL_Test.h - - - os_projdefs.h - - - FreeRTOSConfig.h - - - os_portmacro.h - - - os_mpu_wrappers.h - - - os_portable.h - - - FreeRTOS.h - - - os_list.h - - - os_queue.h - - - os_semphr.h - - - os_croutine.h - - - os_StackMacros.h - - - os_task.h - - - os_timer.h - - - os_port.c - - - os_portasm.s - - - os_tasks.c - - - os_queue.c - - - os_list.c - - - os_croutine.c - - - os_timer.c - - - os_mpu_wrappers.c - - - os_heap.c - - - os_event_groups.c - - - os_event_groups.h - - - HL_reg_pinmux.h - - - HL_pinmux.h - - - HL_pinmux.c - - - HL_reg_gio.h - - - HL_gio.h - - - HL_gio.c - - - HL_reg_esm.h - - - HL_esm.h - - - HL_esm.c - - - HL_reg_sci.h - - - HL_sci.h - - - HL_sci.c - - - HL_reg_lin.h - - - HL_lin.h - - - HL_lin.c - - - HL_reg_mibspi.h - - - HL_mibspi.h - - - - - HL_reg_spi.h - - - HL_spi.h - - - HL_spi.c - - - HL_reg_can.h - - - HL_can.h - - - HL_can.c - - - HL_reg_adc.h - - - HL_adc.h - - - HL_adc.c - - - - - - - - - std_nhet.h - - - HL_reg_het.h - - - HL_het.h - - - HL_het.c - - - HL_reg_htu.h - - - HL_htu.h - - - - - - - - - HL_reg_i2c.h - - - HL_i2c.h - - - HL_i2c.c - - - HL_emac.h - - - HL_hw_emac.h - - - HL_hw_emac_ctrl.h - - - HL_hw_mdio.h - - - HL_hw_reg_access.h - - - HL_mdio.h - - - HL_emac.c - - - HL_mdio.c - - - HL_phy_dp83640.c - - - HL_phy_dp83640.h - - - HL_phy_tlk111.c - - - HL_phy_tlk111.h - - - HL_emac_phyConfig.h - - - HL_reg_dcc.h - - - HL_dcc.h - - - HL_dcc.c - - - HL_reg_rtp.h - - - HL_rtp.h - - - - HL_reg_dmm.h - - - HL_dmm.h - - - - HL_reg_emif.h - - - HL_emif.h - - - HL_emif.c - - - HL_reg_pom.h - - - HL_pom.h - - - HL_pom.c - - - HL_reg_crc.h - - - HL_crc.h - - - HL_crc.c - - - HL_reg_etpwm.h - - - HL_etpwm.h - - - HL_etpwm.c - - - HL_reg_ecap.h - - - HL_ecap.h - - - HL_ecap.c - - - HL_reg_eqep.h - - - HL_eqep.h - - - HL_eqep.c - - - Device_TMS570LC43.h - - - Device_header.h - - - Device_types.h - - - ti_fee_cfg.h - - - MemMap.h - - - ti_fee_types.h - - - ti_fee.h - - - fee_interface.h - - - Device_TMS570LC43.c - - - ti_fee_cfg.c - - - ti_fee_Info.c - - - ti_fee_ini.c - - - ti_fee_main.c - - - ti_fee_read.c - - - ti_fee_writeSync.c - - - ti_fee_writeAsync.c - - - ti_fee_util.c - - - ti_fee_cancel.c - - - ti_fee_format.c - - - ti_fee_eraseimmediateblock.c - - - ti_fee_invalidateblock.c - - - ti_fee_shutdown.c - - - Fapi_UserDefinedFunctions.c - - - ti_fee_readSync.c - - - HL_ajsm.s - - - HL_errata_SSWF021_45.h - include\HL_errata_SSWF021_45.h - - - HL_errata_SSWF021_45_defs.h - include\HL_errata_SSWF021_45_defs.h - - - HL_errata_SSWF021_45.c - source\HL_errata_SSWF021_45.c - - - HL_sys_vim.h - include\HL_sys_vim.h - - - HL_sys_core.asm - source\HL_sys_core.asm - - - HL_sys_intvecs.asm - source\HL_sys_intvecs.asm - - - HL_sys_mpu.asm - source\HL_sys_mpu.asm - - - HL_sys_pmu.asm - source\HL_sys_pmu.asm - - - HL_sys_link.cmd - source\HL_sys_link.cmd - - - os_portasm.asm - - - HL_ajsm.asm - - - 0 - 0 - - - - - include\os_projdefs.h - - - include\FreeRTOSConfig.h - - - include\os_portmacro.h - - - include\os_mpu_wrappers.h - - - include\os_portable.h - - - include\FreeRTOS.h - - - include\os_list.h - - - include\os_queue.h - - - include\os_semphr.h - - - include\os_croutine.h - - - include\os_StackMacros.h - - - include\os_task.h - - - include\os_timer.h - - - source\os_port.c - - - source\os_portasm.s - - - source\os_tasks.c - - - source\os_queue.c - - - source\os_list.c - - - source\os_croutine.c - - - source\os_timer.c - - - source\os_mpu_wrappers.c - - - source\os_heap.c - - - source\os_event_groups.c - - - include\os_event_groups.h - - - source\os_portasm.asm - - - - - - - include\HL_reg_pinmux.h - - - include\HL_pinmux.h - - - source\HL_pinmux.c - - - - - - - include\HL_reg_gio.h - - - include\HL_gio.h - - - source\HL_gio.c - - - - - - - include\HL_reg_esm.h - - - include\HL_esm.h - - - source\HL_esm.c - - - - - - - include\HL_reg_sci.h - - - include\HL_sci.h - - - source\HL_sci.c - - - - - - - include\HL_reg_lin.h - - - include\HL_lin.h - - - source\HL_lin.c - - - - - - - include\HL_reg_mibspi.h - - - include\HL_mibspi.h - - - - - - - - - - include\HL_reg_spi.h - - - include\HL_spi.h - - - source\HL_spi.c - - - - - - - include\HL_reg_can.h - - - include\HL_can.h - - - source\HL_can.c - - - - - - - include\HL_reg_adc.h - - - include\HL_adc.h - - - source\HL_adc.c - - - - - - - include\std_nhet.h - - - include\HL_reg_het.h - - - include\HL_het.h - - - source\HL_het.c - - - include\HL_reg_htu.h - - - include\HL_htu.h - - - - - - - include\HL_reg_i2c.h - - - include\HL_i2c.h - - - source\HL_i2c.c - - - - - - - include\HL_emac.h - - - include\HL_hw_emac.h - - - include\HL_hw_emac_ctrl.h - - - include\HL_hw_mdio.h - - - include\HL_hw_reg_access.h - - - include\HL_mdio.h - - - source\HL_emac.c - - - source\HL_mdio.c - - - source\HL_phy_dp83640.c - - - include\HL_phy_dp83640.h - - - source\HL_phy_tlk111.c - - - include\HL_phy_tlk111.h - - - include\HL_emac_phyConfig.h - - - - - - - include\HL_reg_dcc.h - - - include\HL_dcc.h - - - source\HL_dcc.c - - - - - - - include\HL_reg_rtp.h - - - include\HL_rtp.h - - - - - - - - - - include\HL_reg_dmm.h - - - include\HL_dmm.h - - - - - - - - - - include\HL_reg_emif.h - - - include\HL_emif.h - - - source\HL_emif.c - - - - - - - include\HL_reg_pom.h - - - include\HL_pom.h - - - source\HL_pom.c - - - - - - - include\HL_reg_crc.h - - - include\HL_crc.h - - - source\HL_crc.c - - - - - - - include\HL_reg_etpwm.h - - - include\HL_etpwm.h - - - source\HL_etpwm.c - - - - - - - include\HL_reg_ecap.h - - - include\HL_ecap.h - - - source\HL_ecap.c - - - - - - - include\HL_reg_eqep.h - - - include\HL_eqep.h - - - source\HL_eqep.c - - - - - - - include\Device_TMS570LC43.h - - - include\Device_header.h - - - include\Device_types.h - - - include\ti_fee_cfg.h - - - include\MemMap.h - - - include\ti_fee_types.h - - - include\ti_fee.h - - - include\fee_interface.h - - - source\Device_TMS570LC43.c - - - source\ti_fee_cfg.c - - - source\ti_fee_Info.c - - - source\ti_fee_ini.c - - - source\ti_fee_main.c - - - source\ti_fee_read.c - - - source\ti_fee_writeSync.c - - - source\ti_fee_writeAsync.c - - - source\ti_fee_util.c - - - source\ti_fee_cancel.c - - - source\ti_fee_format.c - - - source\ti_fee_eraseimmediateblock.c - - - source\ti_fee_invalidateblock.c - - - source\ti_fee_shutdown.c - - - source\Fapi_UserDefinedFunctions.c - - - source\ti_fee_readSync.c - - - - - - - source\HL_ajsm.s - - - source\HL_ajsm.asm - - - - diff --git a/tests/scripts/waf-tools/f_hcg/tests/test_hcg0.json b/tests/scripts/waf-tools/f_hcg/tests/test_hcg0.json deleted file mode 100644 index 9538a1ec..00000000 --- a/tests/scripts/waf-tools/f_hcg/tests/test_hcg0.json +++ /dev/null @@ -1,177 +0,0 @@ -{ - "sources": [ - "source\\HL_sys_pcr.c", - "source\\HL_sys_pmm.c", - "source\\HL_sys_dma.c", - "source\\HL_system.c", - "source\\HL_sys_phantom.c", - "source\\HL_sys_startup.c", - "source\\HL_sys_vim.c", - "source\\HL_notification.c", - "source\\HL_epc.c", - "source\\HL_nmpu.c", - "source\\HL_errata.c", - "source\\HL_errata_SSWF021_45.c", - "source\\HL_sys_core.asm", - "source\\HL_sys_intvecs.asm", - "source\\HL_sys_mpu.asm", - "source\\HL_sys_pmu.asm", - "source\\HL_pinmux.c", - "source\\HL_gio.c", - "source\\HL_esm.c", - "source\\HL_sci.c", - "source\\HL_lin.c", - "source\\HL_spi.c", - "source\\HL_can.c", - "source\\HL_adc.c", - "source\\HL_het.c", - "source\\HL_i2c.c", - "source\\HL_emac.c", - "source\\HL_mdio.c", - "source\\HL_phy_dp83640.c", - "source\\HL_phy_tlk111.c", - "source\\HL_dcc.c", - "source\\HL_emif.c", - "source\\HL_pom.c", - "source\\HL_crc.c", - "source\\HL_etpwm.c", - "source\\HL_ecap.c", - "source\\HL_eqep.c", - "source\\Device_TMS570LC43.c", - "source\\ti_fee_cfg.c", - "source\\ti_fee_Info.c", - "source\\ti_fee_ini.c", - "source\\ti_fee_main.c", - "source\\ti_fee_read.c", - "source\\ti_fee_writeSync.c", - "source\\ti_fee_writeAsync.c", - "source\\ti_fee_util.c", - "source\\ti_fee_cancel.c", - "source\\ti_fee_format.c", - "source\\ti_fee_eraseimmediateblock.c", - "source\\ti_fee_invalidateblock.c", - "source\\ti_fee_shutdown.c", - "source\\Fapi_UserDefinedFunctions.c", - "source\\ti_fee_readSync.c", - "source\\HL_ajsm.asm" - ], - "headers": [ - "include\\HL_hal_stdtypes.h", - "include\\HL_sys_common.h", - "include\\HL_reg_system.h", - "include\\HL_reg_flash.h", - "include\\HL_reg_l2ramw.h", - "include\\HL_reg_vim.h", - "include\\HL_reg_pbist.h", - "include\\HL_reg_stc.h", - "include\\HL_reg_efc.h", - "include\\HL_reg_pcr.h", - "include\\HL_reg_pmm.h", - "include\\HL_reg_dma.h", - "include\\HL_reg_ccmr5.h", - "include\\HL_sys_core.h", - "include\\HL_system.h", - "include\\HL_sys_mpu.h", - "include\\HL_sys_pmu.h", - "include\\HL_sys_pcr.h", - "include\\HL_sys_pmm.h", - "include\\HL_sys_dma.h", - "include\\HL_reg_epc.h", - "include\\HL_reg_nmpu.h", - "include\\HL_reg_scm.h", - "include\\HL_reg_sdcmmr.h", - "include\\HL_epc.h", - "include\\HL_nmpu.h", - "include\\HL_errata.h", - "include\\HL_errata_SSWF021_45.h", - "include\\HL_errata_SSWF021_45_defs.h", - "include\\HL_sys_vim.h", - "include\\HL_reg_pinmux.h", - "include\\HL_pinmux.h", - "include\\HL_reg_gio.h", - "include\\HL_gio.h", - "include\\HL_reg_esm.h", - "include\\HL_esm.h", - "include\\HL_reg_sci.h", - "include\\HL_sci.h", - "include\\HL_reg_lin.h", - "include\\HL_lin.h", - "include\\HL_reg_mibspi.h", - "include\\HL_mibspi.h", - "include\\HL_reg_spi.h", - "include\\HL_spi.h", - "include\\HL_reg_can.h", - "include\\HL_can.h", - "include\\HL_reg_adc.h", - "include\\HL_adc.h", - "include\\std_nhet.h", - "include\\HL_reg_het.h", - "include\\HL_het.h", - "include\\HL_reg_htu.h", - "include\\HL_htu.h", - "include\\HL_reg_i2c.h", - "include\\HL_i2c.h", - "include\\HL_emac.h", - "include\\HL_hw_emac.h", - "include\\HL_hw_emac_ctrl.h", - "include\\HL_hw_mdio.h", - "include\\HL_hw_reg_access.h", - "include\\HL_mdio.h", - "include\\HL_phy_dp83640.h", - "include\\HL_phy_tlk111.h", - "include\\HL_emac_phyConfig.h", - "include\\HL_reg_dcc.h", - "include\\HL_dcc.h", - "include\\HL_reg_rtp.h", - "include\\HL_rtp.h", - "include\\HL_reg_dmm.h", - "include\\HL_dmm.h", - "include\\HL_reg_emif.h", - "include\\HL_emif.h", - "include\\HL_reg_pom.h", - "include\\HL_pom.h", - "include\\HL_reg_crc.h", - "include\\HL_crc.h", - "include\\HL_reg_etpwm.h", - "include\\HL_etpwm.h", - "include\\HL_reg_ecap.h", - "include\\HL_ecap.h", - "include\\HL_reg_eqep.h", - "include\\HL_eqep.h", - "include\\Device_TMS570LC43.h", - "include\\Device_header.h", - "include\\Device_types.h", - "include\\ti_fee_cfg.h", - "include\\MemMap.h", - "include\\ti_fee_types.h", - "include\\ti_fee.h", - "include\\fee_interface.h" - ], - "removes": [ - "source\\HL_sys_main.c", - "include\\os_projdefs.h", - "include\\FreeRTOSConfig.h", - "include\\os_portmacro.h", - "include\\os_mpu_wrappers.h", - "include\\os_portable.h", - "include\\FreeRTOS.h", - "include\\os_list.h", - "include\\os_queue.h", - "include\\os_semphr.h", - "include\\os_croutine.h", - "include\\os_StackMacros.h", - "include\\os_task.h", - "include\\os_timer.h", - "source\\os_port.c", - "source\\os_tasks.c", - "source\\os_queue.c", - "source\\os_list.c", - "source\\os_croutine.c", - "source\\os_timer.c", - "source\\os_mpu_wrappers.c", - "source\\os_heap.c", - "source\\os_event_groups.c", - "include\\os_event_groups.h", - "source\\os_portasm.asm" - ] -} diff --git a/tests/scripts/waf-tools/f_hcg/tests/test_hcg1.dil b/tests/scripts/waf-tools/f_hcg/tests/test_hcg1.dil deleted file mode 100644 index 48453388..00000000 --- a/tests/scripts/waf-tools/f_hcg/tests/test_hcg1.dil +++ /dev/null @@ -1,11969 +0,0 @@ -# TMS570LC4357ZWT 09/24/20 17:56:50 -# -ARCH=TMS570LC4357ZWT -# -DRIVER.TOOLS.VAR.GCC.VALUE=0 -DRIVER.TOOLS.VAR.ARM.VALUE=0 -DRIVER.TOOLS.VAR.IAR.VALUE=0 -DRIVER.TOOLS.VAR.GHS.VALUE=0 -DRIVER.TOOLS.VAR.TI.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_AVCLK4_DIVIDER.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_PERMISSION.VALUE=PRIV_RW_USER_RW_NOEXEC -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_SUB_3_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_TYPE.VALUE=NORMAL_OIWTNOWA_NONSHARED -DRIVER.SYSTEM.VAR.VIM_CHANNEL_122_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_114_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_106_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_70_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_62_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_54_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_46_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_38_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CAPTURE_EVENT_SOURCE_0.VALUE=0 -DRIVER.SYSTEM.VAR.FLASH_EEPROM_DATA_1_WAIT_STATE_FREQ.VALUE=32.0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_PERMISSION_VALUE.VALUE=0x1300 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_81_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_73_NAME.VALUE=het2LowLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_65_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_57_NAME.VALUE=adc2Group2Interrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_49_NAME.VALUE=mibspi4HighLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_2_MAPPING.VALUE=2 -DRIVER.SYSTEM.VAR.VIM_CAPTURE_EVENT_SOURCE_1.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_SIZE.VALUE=32_BYTES -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_SUB_1_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_SUB_4_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_111_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_103_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.EQEP2_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.FLASH_DATA_3_WAIT_STATE_FREQ.VALUE=180.0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_96_MAPPING.VALUE=96 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_88_MAPPING.VALUE=88 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_1_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_SUB_2_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_SUB_7_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_END_ADDRESS.VALUE=0x0000001f -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_SUB_5_DISABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_DATA_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_11_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.LIN2_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.SPI3_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_PLL1_BYPASS_ON_SLIP.VALUE=0x20000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_TYPE_VALUE.VALUE=0x0008 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_124_NAME.VALUE=epcFullInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_116_NAME.VALUE=sci4HighLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_108_NAME.VALUE=ecap5Interrupt -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_SUB_5_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_BASE_ADDRESS.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_SIZE.VALUE=128_MB -DRIVER.SYSTEM.VAR.VIM_CHANNEL_100_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_98_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_20_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_12_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_2_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.CRC_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.MIBSPI1_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_HCLK_FREQ.VALUE=150.000 -DRIVER.SYSTEM.VAR.CLKT_PLL2_FREQ.VALUE=300.00 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_81_MAPPING.VALUE=81 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_73_MAPPING.VALUE=73 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_65_MAPPING.VALUE=65 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_57_MAPPING.VALUE=57 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_49_MAPPING.VALUE=49 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_40_NAME.VALUE=dmaBTCAInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_32_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_24_NAME.VALUE=het1LowLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_16_NAME.VALUE=can1HighLevelInterrupt -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_SUB_6_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_SUB_0_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_92_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_84_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_76_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_68_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_31_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_23_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_15_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.ECLK_CLKSRC.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_TYPE_VALUE.VALUE=0x0006 -DRIVER.SYSTEM.VAR.CLKT_PLL2_OUTPUT_DIV.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_EXT2_ENABLE.VALUE=FALSE -DRIVER.SYSTEM.VAR.CLKT_PLL1_SOURCE_ENABLE.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_SUB_1_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_END_ADDRESS.VALUE=0x6fffffff -DRIVER.SYSTEM.VAR.VIM_CHANNEL_96_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_88_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_9_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_4_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_RTI2_PRE_SOURCE.VALUE=PLL1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_SIZE_VALUE.VALUE=0x1A -DRIVER.SYSTEM.VAR.VIM_CHANNEL_99_NAME.VALUE=etpwm5TripZoneInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_50_MAPPING.VALUE=50 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_42_MAPPING.VALUE=42 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_34_MAPPING.VALUE=34 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_26_MAPPING.VALUE=26 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_18_MAPPING.VALUE=18 -DRIVER.SYSTEM.VAR.CLKT_VCLK3_DOMAIN_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.FLASH_ECC_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.FLASH_BANKS.VALUE=4 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_TYPE.VALUE=NORMAL_OIWTNOWA_SHARED -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_SUB_4_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_SUB_2_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_IRQ_DISP_ENTRY.VALUE=_irqDispatch -DRIVER.SYSTEM.VAR.VIM_CHANNEL_111_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_103_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_92_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_84_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_76_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_68_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CAN3_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_AVCLK1_SOURCE.VALUE=VCLK -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_SUB_2_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_SUB_5_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.ETPWM4_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.DCC2_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_PLL1_RESET_ON_OSCILLATOR_FAIL.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_PERMISSION_VALUE.VALUE=0x0600 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_11_MAPPING.VALUE=11 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_PERMISSION.VALUE=PRIV_RW_USER_RW_NOEXEC -DRIVER.SYSTEM.VAR.LBIST_ENA.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_AVCLK2_DOMAIN_ENABLE.VALUE=TRUE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_SUB_3_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_SUB_6_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_TYPE.VALUE=NORMAL_OIWBWA_NONSHARED -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_END_ADDRESS.VALUE=0x003fffff -DRIVER.SYSTEM.VAR.VIM_CHANNEL_41_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_33_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_25_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_17_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_3_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.ECAP6_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.SCI_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.FLASH_DATA_1_WAIT_STATE_FREQ.VALUE=90.0 -DRIVER.SYSTEM.VAR.RAM_STACK_IRQ_BASE.VALUE=0x08001200 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_125_MAPPING.VALUE=125 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_117_MAPPING.VALUE=117 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_109_MAPPING.VALUE=109 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_90_NAME.VALUE=etpwm1Interrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_82_NAME.VALUE=dcc1DoneInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_74_NAME.VALUE=sciLowLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_66_NAME.VALUE=i2cInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_58_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.CLKT_AVCLK3_DOMAIN_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_PMU_GLOBAL_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_SIZE.VALUE=512_KB -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_END_ADDRESS.VALUE=0x0000001f -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_SUB_4_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_BASE_ADDRESS.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_97_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_89_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_81_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_73_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_70_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_65_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_62_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_57_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_54_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_49_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_46_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_38_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.EMAC_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_8_MAPPING.VALUE=8 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_2_NAME.VALUE=rtiCompare0Interrupt -DRIVER.SYSTEM.VAR.CORE_PMU_COUNTER0_EVENT.VALUE=0x11 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_PERMISSION.VALUE=PRIV_RO_USER_RO_NOEXEC -DRIVER.SYSTEM.VAR.FLASH_ADDRESS_WAIT_STATES.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_SUB_7_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_RESET_ENTRY.VALUE=_c_int00 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_127_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_122_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_119_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_114_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_106_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_9_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.ADC1_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.MIBSPI_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.ECLK_VCLK1_FREQ.VALUE=75.000 -DRIVER.SYSTEM.VAR.CLKT_EXTERNAL_FREQ.VALUE=00.0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_SIZE_VALUE.VALUE=0x04 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_125_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_117_NAME.VALUE=can4LowLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_110_MAPPING.VALUE=110 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_109_NAME.VALUE=ecap6Interrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_102_MAPPING.VALUE=102 -DRIVER.SYSTEM.VAR.CLKT_AVCLK3_DIVIDER.VALUE=1 -DRIVER.SYSTEM.VAR.RAM_LENGTH.VALUE=0x00080000 -DRIVER.SYSTEM.VAR.CLKT_VCLK1_DOMAIN_ENABLE.VALUE=FALSE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_SUB_2_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_SIZE.VALUE=256_MB -DRIVER.SYSTEM.VAR.VIM_CHANNEL_124_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_116_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_108_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.I2C2_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_41_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_33_NAME.VALUE=dmaFTCAInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_25_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_17_NAME.VALUE=spi2HighLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_1_MAPPING.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_EXTERNAL_SOURCE_ENABLE.VALUE=0x00000008 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_SUB_0_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_END_ADDRESS.VALUE=0x0000001f -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_BASE_ADDRESS.VALUE=0xF0000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_SUB_3_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_40_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_32_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_24_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_16_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_5_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_PERMISSION_VALUE.VALUE=0x1200 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_TYPE_VALUE.VALUE=0x0006 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_95_MAPPING.VALUE=95 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_87_MAPPING.VALUE=87 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_79_MAPPING.VALUE=79 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_SUB_1_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_SUB_6_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_SUB_4_DISABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_IRQ_VIC_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_121_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_113_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_105_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_70_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_62_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_54_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_50_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_46_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_42_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_38_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_34_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_26_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_18_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.SPI1_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.FLASH_EEPROM_DATA_8_WAIT_STATE_FREQ.VALUE=144.0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_100_NAME.VALUE=etpwm6Interrupt -DRIVER.SYSTEM.VAR.CLKT_RTI2_DIVIDER.VALUE=1 -DRIVER.SYSTEM.VAR.RAM_ECC_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_SUB_4_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_TYPE.VALUE=NORMAL_OIWTNOWA_SHARED -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_SUB_7_DISABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_99_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.CLKT_EXTERNAL_FREQ_INPUT.VALUE=16.0 -DRIVER.SYSTEM.VAR.STC_INTERVAL.VALUE=40 -DRIVER.SYSTEM.VAR.CLKT_LPO_HIGH_TRIM_VALUE.VALUE=16 -DRIVER.SYSTEM.VAR.CLKT_GCLK_FREQ.VALUE=300.000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_PERMISSION_VALUE.VALUE=0x1000 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_80_MAPPING.VALUE=80 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_72_MAPPING.VALUE=72 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_64_MAPPING.VALUE=64 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_56_MAPPING.VALUE=56 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_48_MAPPING.VALUE=48 -DRIVER.SYSTEM.VAR.CLKT_PLL1_REF_CLOCK_DIV.VALUE=8 -DRIVER.SYSTEM.VAR.FLASHW_BASE_ADDRESS.VALUE=0xFFF87000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_SUB_5_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_FIQ_ENTRY.VALUE="ldr pc,[pc,#-0x1b0]" -DRIVER.SYSTEM.VAR.VIM_CHANNEL_10_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.SCILIN_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.SPI_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.ALL_DVR_ENA.VALUE=1 -DRIVER.SYSTEM.VAR.CCM_MENU_VALUE.VALUE=0x0001 -DRIVER.SYSTEM.VAR.PBIST_ENA1.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_VCLK4_DIVIDER.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_SUB_0_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_TYPE.VALUE=DEVICE_NONSHAREABLE -DRIVER.SYSTEM.VAR.VIM_CHANNEL_97_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_89_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_OSCILLATOR_FREQ.VALUE=16.0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_91_NAME.VALUE=etpwm1TripZoneInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_83_NAME.VALUE=dcc2DoneInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_75_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_67_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_59_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_41_MAPPING.VALUE=41 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_33_MAPPING.VALUE=33 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_25_MAPPING.VALUE=25 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_17_MAPPING.VALUE=17 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_SUB_3_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_SUB_1_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_IRQ_MODE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_11_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_11_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.PMM_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.EMIF_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CAN1_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CAN_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_TYPE_VALUE.VALUE=0x0006 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_3_NAME.VALUE=rtiCompare1Interrupt -DRIVER.SYSTEM.VAR.CLKT_PLL1_OUTPUT_DIV.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_PERMISSION.VALUE=PRIV_RW_USER_RO_NOEXEC -DRIVER.SYSTEM.VAR.CLKT_PLL2_FM_ENABLE.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_SUB_1_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_SUB_4_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_BASE_ADDRESS.VALUE=0xF8000000 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_92_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_91_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_84_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_83_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_76_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_75_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_68_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_67_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_59_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_8_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.ETPWM2_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.HET1_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_RTI1_PRE_SOURCE.VALUE=PLL1 -DRIVER.SYSTEM.VAR.FLASH_MODE_VALUE.VALUE=3 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_SIZE_VALUE.VALUE=0x1B -DRIVER.SYSTEM.VAR.VIM_CHANNEL_126_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_118_NAME.VALUE=lin2LowLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_10_MAPPING.VALUE=10 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_SUB_2_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_SIZE.VALUE=128_MB -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_SUB_5_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_125_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_117_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_109_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_91_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_83_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_75_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_67_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_59_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_3_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.ECAP4_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_PLL2_BYPASS_ON_SLIP.VALUE=0x20000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_PERMISSION_VALUE.VALUE=0x1600 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_124_MAPPING.VALUE=124 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_116_MAPPING.VALUE=116 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_108_MAPPING.VALUE=108 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_50_NAME.VALUE=adc2Group0Interrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_42_NAME.VALUE=can2LowLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_34_NAME.VALUE=dmaLFSAInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_26_NAME.VALUE=mibspi1LowLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_18_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.FLASH_ARBITRATION.VALUE=FIX -DRIVER.SYSTEM.VAR.CLKT_LPO_HIGH_SOURCE_ENABLE.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_SUB_3_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_110_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_102_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.SCI4_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.PBIST_ALGO_9_10.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_EXTERNAL2_FREQ_INPUT.VALUE=16.0 -DRIVER.SYSTEM.VAR.FLASH_EEPROM_DATA_6_WAIT_STATE_FREQ.VALUE=112.0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_SIZE_VALUE.VALUE=0x12 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_7_MAPPING.VALUE=7 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_PERMISSION.VALUE=PRIV_RW_USER_RW_NOEXEC -DRIVER.SYSTEM.VAR.CLKT_RTI2_DOMAIN_ENABLE.VALUE=FALSE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_SUB_6_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_BACKGROUND_REGION_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_8_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_2_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CONFIG.VALUE=TRUE -DRIVER.SYSTEM.VAR.CRC2_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_101_MAPPING.VALUE=101 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_101_NAME.VALUE=etpwm6TripZoneInterrupt -DRIVER.SYSTEM.VAR.RAM_STACK_ABORT_LENGTH.VALUE=0x00000100 -DRIVER.SYSTEM.VAR.FLASH_EEPROM_DATA_WAIT_STATES.VALUE=9 -DRIVER.SYSTEM.VAR.FLASH_DATA_MAX_WAIT_STATES.VALUE=3 -DRIVER.SYSTEM.VAR.FLASH_MODE.VALUE=PIPELINE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_TYPE.VALUE=DEVICE_NONSHAREABLE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_SUB_7_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_SUB_1_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_61_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_61_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_53_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_53_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_45_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_45_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_40_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_37_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_37_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_32_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_29_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_29_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_24_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_16_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.MINIT_VALUE.VALUE=0x1E57F -DRIVER.SYSTEM.VAR.VIM_CHANNEL_0_MAPPING.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_PLL1_DIV.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_PERMISSION.VALUE=PRIV_RO_USER_RO_NOEXEC -DRIVER.SYSTEM.VAR.CLKT_VCLK4_DOMAIN_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_PLL2_ENABLE.VALUE=FALSE -DRIVER.SYSTEM.VAR.RAM_BASE_ADDRESS.VALUE=0x08000000 -DRIVER.SYSTEM.VAR.CORE_PMU_EVENT_EXPORT_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_SUB_2_DISABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_126_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_118_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_110_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_102_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_96_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_88_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.GIO_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_SIZE_VALUE.VALUE=0x04 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_94_MAPPING.VALUE=94 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_86_MAPPING.VALUE=86 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_78_MAPPING.VALUE=78 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_SUB_0_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_SUB_5_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_TYPE.VALUE=STRONGLYORDERED_SHAREABLE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_SUB_3_DISABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_BASE_ADDRESS.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_UNDEF_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_8_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.MIBSPI4_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.RAM_STACK_ABORT_BASE.VALUE=0x08001300 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_92_NAME.VALUE=etpwm2Interrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_84_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_76_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_68_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.CLKT_RTI1_DIVIDER.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_AVCLK4_DOMAIN_ENABLE.VALUE=FALSE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_SUB_3_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_SUB_6_DISABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_123_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_115_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_107_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_31_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_23_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_15_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_1_INT_TYPE.VALUE=FIQ -DRIVER.SYSTEM.VAR.CLKT_GHV_WAKUP_SOURCE.VALUE=PLL1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_TYPE_VALUE.VALUE=0x0000 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_71_MAPPING.VALUE=71 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_63_MAPPING.VALUE=63 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_55_MAPPING.VALUE=55 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_47_MAPPING.VALUE=47 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_39_MAPPING.VALUE=39 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_4_NAME.VALUE=rtiCompare2Interrupt -DRIVER.SYSTEM.VAR.CLKT_HCLK_DIVIDER.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_PMU_COUNTER1_EVENT.VALUE=0x11 -DRIVER.SYSTEM.VAR.EFUSE_SELFTEST_ENA.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_AVCLK4_DOMAIN_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.RAM_LINK_BASE_ADDRESS.VALUE=0x08001500 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_BASE_ADDRESS.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_SUB_4_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_SUB_7_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_120_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_112_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_104_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_30_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_22_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_14_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_PERMISSION_VALUE.VALUE=0x1600 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_127_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_119_NAME.VALUE=sci4LowLevelInterrupt -DRIVER.SYSTEM.VAR.CLKT_PLL2_DIV.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_VCLK3_DIVIDER.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_LPO_TRIM_OTP_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_SUB_7_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_SIZE.VALUE=8_MB -DRIVER.SYSTEM.VAR.VIM_CHANNEL_95_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_87_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_79_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_61_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_53_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_45_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_37_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_29_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_AVCLK4_SOURCE.VALUE=VCLK -DRIVER.SYSTEM.VAR.FLASH_EEPROM_DATA_4_WAIT_STATE_FREQ.VALUE=80.0 -DRIVER.SYSTEM.VAR.FLASH_ADDRESS_WAIT_STATES_FREQ.VALUE=120.0 -DRIVER.SYSTEM.VAR.RAM_STACK_BASE.VALUE=0x08000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_TYPE_VALUE.VALUE=0x0010 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_51_NAME.VALUE=adc2Group1Interrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_43_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_40_MAPPING.VALUE=40 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_35_NAME.VALUE=can2HighLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_32_MAPPING.VALUE=32 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_27_NAME.VALUE=lin1LowLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_24_MAPPING.VALUE=24 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_19_NAME.VALUE=crcInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_16_MAPPING.VALUE=16 -DRIVER.SYSTEM.VAR.CLKT_VCLK3_DOMAIN_ENABLE.VALUE=FALSE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_SUB_2_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_END_ADDRESS.VALUE=0xf07fffff -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_SUB_0_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.ETPWM7_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_1.VALUE=0 -DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_2.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_SUB_0_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_SUB_3_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_96_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_88_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_3.VALUE=0 -DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_4.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_110_NAME.VALUE=eqep1Interrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_102_NAME.VALUE=etpwm7Interrupt -DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_5.VALUE=0 -DRIVER.SYSTEM.VAR.LBIST_STT.VALUE=1 -DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_6.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_SUB_1_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_SUB_4_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_ECC_AVAILABLE.VALUE=TRUE -DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_7.VALUE=0 -DRIVER.SYSTEM.VAR.ECAP2_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_8.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_TYPE_VALUE.VALUE=0x000C -DRIVER.SYSTEM.VAR.VIM_CHANNEL_123_MAPPING.VALUE=123 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_115_MAPPING.VALUE=115 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_107_MAPPING.VALUE=107 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_10_NAME.VALUE=het1HighLevelInterrupt -DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_9.VALUE=0 -DRIVER.SYSTEM.VAR.RAM_STACK_USER_LENGTH.VALUE=0x00001000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_PERMISSION.VALUE=PRIV_RW_USER_RO_NOEXEC -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_SUB_2_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_SUB_7_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_END_ADDRESS.VALUE=0xffffffff -DRIVER.SYSTEM.VAR.CORE_CACHE_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_80_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_72_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_64_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_56_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_48_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_10_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_7_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.SCI2_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.LIN_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_RTI1_FREQ.VALUE=75.000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_SIZE_VALUE.VALUE=0x1A -DRIVER.SYSTEM.VAR.VIM_CHANNEL_6_MAPPING.VALUE=6 -DRIVER.SYSTEM.VAR.CLKT_PLL2_SPEADING_AMOUNT.VALUE=61 -DRIVER.SYSTEM.VAR.CLKT_PLL2_SPEADING_RATE.VALUE=255 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_SUB_5_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_BASE_ADDRESS.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_TYPE.VALUE=NORMAL_OIWTNOWA_SHARED -DRIVER.SYSTEM.VAR.VIM_CHANNEL_121_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_113_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_105_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_90_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_90_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_82_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_82_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_74_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_74_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_66_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_66_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_58_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_58_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_PLL2_RESET_ON_SLIP.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.ECLK_FREQ.VALUE=9.375 -DRIVER.SYSTEM.VAR.CLKT_AVCLK1_FREQ.VALUE=75.000 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_100_MAPPING.VALUE=100 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_93_NAME.VALUE=etpwm2TripZoneInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_85_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_77_NAME.VALUE=EMACTxIntISR -DRIVER.SYSTEM.VAR.VIM_CHANNEL_69_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.RAM_STACK_IRQ_LENGTH.VALUE=0x00000100 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_SUB_6_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_SUB_0_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_2_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_RTI2_POST_SOURCE.VALUE=VCLK -DRIVER.SYSTEM.VAR.FLASH_EEPROM_DATA_10_WAIT_STATE_FREQ.VALUE=176.0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_SIZE_VALUE.VALUE=0x04 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_PERMISSION_VALUE.VALUE=0x1600 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_PERMISSION_VALUE.VALUE=0x1200 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_5_NAME.VALUE=rtiCompare3Interrupt -DRIVER.SYSTEM.VAR.RAM_STACK_LENGTH.VALUE=0x00001500 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_PERMISSION.VALUE=PRIV_RO_USER_RO_EXEC -DRIVER.SYSTEM.VAR.CLKT_LPO_BIAS.VALUE=true -DRIVER.SYSTEM.VAR.CLKT_AVCLK3_DIVIDER1.VALUE=4 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_SUB_1_DISABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_END_ADDRESS.VALUE=0xffffffff -DRIVER.SYSTEM.VAR.CORE_PRAGMA_ENA.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_101_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_4_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_1_INT_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.SPI4_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_AVCLK4_POST_SOURCE.VALUE=VCLKA4_DIVR -DRIVER.SYSTEM.VAR.CLKT_VCLK1_FREQ.VALUE=75.000 -DRIVER.SYSTEM.VAR.CLKT_AVCLK3_FREQ1.VALUE=75.000 -DRIVER.SYSTEM.VAR.FLASH_EEPROM_DATA_2_WAIT_STATE_FREQ.VALUE=48.0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_93_MAPPING.VALUE=93 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_85_MAPPING.VALUE=85 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_77_MAPPING.VALUE=77 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_69_MAPPING.VALUE=69 -DRIVER.SYSTEM.VAR.CLKT_AVCLK3_FREQ2.VALUE=18.750 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_END_ADDRESS.VALUE=0x0000001f -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_SUB_4_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_SIZE.VALUE=32_BYTES -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_BASE_ADDRESS.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_SUB_2_DISABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_60_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_52_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_44_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_41_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_36_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_33_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_28_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_25_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_17_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.MIBSPI2_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_PLL1_MUL.VALUE=150 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_60_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_52_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_44_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_36_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_28_NAME.VALUE=adc1Group2Interrupt -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_PERMISSION.VALUE=PRIV_RO_USER_RO_NOEXEC -DRIVER.SYSTEM.VAR.CLKT_OSC_ENABLE.VALUE=TRUE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_SUB_2_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_SIZE.VALUE=32_BYTES -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_SUB_5_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_SVC_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_125_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_117_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_109_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_98_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_31_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_23_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_15_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.PINMUX_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.PBIST_ALGO_3_4.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_LPO_BIAS_VALUE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_70_MAPPING.VALUE=70 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_62_MAPPING.VALUE=62 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_54_MAPPING.VALUE=54 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_46_MAPPING.VALUE=46 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_38_MAPPING.VALUE=38 -DRIVER.SYSTEM.VAR.CLKT_AVCLK1_DOMAIN_ENABLE.VALUE=FALSE -DRIVER.SYSTEM.VAR.CLKT_EXTERNAL2_SOURCE_ENABLE.VALUE=0x00000080 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_SUB_3_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_SUB_6_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_PREFETCH_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_95_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_87_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_79_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.PBIST_ALGO_15.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_111_NAME.VALUE=eqep2Interrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_103_NAME.VALUE=etpwm7TripZoneInterrupt -DRIVER.SYSTEM.VAR.PBIST_ALGO_16.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_VCLK2_DIVIDER.VALUE=1 -DRIVER.SYSTEM.VAR.RAM_LINK_LENGTH.VALUE=0x0007EB00 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_SUB_6_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_END_ADDRESS.VALUE=0x0000001f -DRIVER.SYSTEM.VAR.VIM_CHANNEL_30_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_22_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_14_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_7_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CAN4_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_LPO_OSCFRQCONFIGCNT_VALUE.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_AVCLK2_SOURCE.VALUE=VCLK -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_TYPE_VALUE.VALUE=0x0010 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_31_MAPPING.VALUE=31 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_23_MAPPING.VALUE=23 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_15_MAPPING.VALUE=15 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_11_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.PBIST_ALGO_5_6.VALUE=0 -DRIVER.SYSTEM.VAR.PBIST_ENA.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_HCLK_DOMAIN_ENABLE.VALUE=TRUE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_SUB_7_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_SUB_1_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_122_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_114_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_111_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_106_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_103_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_10_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.ETPWM5_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.ETPWM_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_PLL2_MUL.VALUE=150 -DRIVER.SYSTEM.VAR.CLKT_RTI2_FREQ.VALUE=0.0 -DRIVER.SYSTEM.VAR.CLKT_LPO_LOW_FREQ.VALUE=0.080 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_TYPE.VALUE=NORMAL_OINC_NONSHARED -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_SUB_2_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_PREFETCH_ENTRY.VALUE=_prefetch -DRIVER.SYSTEM.VAR.VIM_CHANNEL_91_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_83_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_75_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_67_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_59_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.CLKT_AVCLK2_FREQ.VALUE=0.000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_TYPE_VALUE.VALUE=0x0006 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_PERMISSION_VALUE.VALUE=0x1600 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_PERMISSION_VALUE.VALUE=0x1200 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_94_NAME.VALUE=etpwm3Interrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_86_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_78_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.ECLK_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_OSCILLATOR_SOURCE_ENABLE.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_SUB_0_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_BASE_ADDRESS.VALUE=0x60000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_SUB_3_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_124_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_116_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_108_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_60_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_52_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_44_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_36_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_28_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.PBIST_ALGO_7_8.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_PLL2_RESET_ON_OSCILLATOR_FAIL.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.FLASH_BANK_LINK_BASE_ADDRESS_0.VALUE=0x00000020 -DRIVER.SYSTEM.VAR.FLASH_BANK_LINK_BASE_ADDRESS_1.VALUE=0x00200000 -DRIVER.SYSTEM.VAR.FLASH_EEPROM_DATA_0_WAIT_STATE_FREQ.VALUE=16.0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_SIZE_VALUE.VALUE=0x04 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_122_MAPPING.VALUE=122 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_114_MAPPING.VALUE=114 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_106_MAPPING.VALUE=106 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_6_NAME.VALUE=rtiOverflow0Interrupt -DRIVER.SYSTEM.VAR.CORE_PMU_COUNTER2_EVENT.VALUE=0x11 -DRIVER.SYSTEM.VAR.FLASH_DATA_WAIT_STATES.VALUE=3 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_SUB_1_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_SUB_6_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_95_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_87_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_79_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.ADC2_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_VCLK2_FREQ.VALUE=75.000 -DRIVER.SYSTEM.VAR.FLASH_DATA_2_WAIT_STATE_FREQ.VALUE=135.0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_5_MAPPING.VALUE=5 -DRIVER.SYSTEM.VAR.VIM_CHANNELS.VALUE=128 -DRIVER.SYSTEM.VAR.FLASH_BANK_LINK_BASE_ADDRESS_7.VALUE=0xF0200000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_SUB_4_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_SIZE.VALUE=32_BYTES -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_SUB_7_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_7_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.ESM_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_99_MAPPING.VALUE=99 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_61_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_53_NAME.VALUE=mibspi5HighLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_45_NAME.VALUE=can3HighLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_37_NAME.VALUE=mibspi3HighInterruptLevel -DRIVER.SYSTEM.VAR.VIM_CHANNEL_29_NAME.VALUE=can1LowLevelInterrupt -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_PERMISSION.VALUE=PRIV_RW_USER_RO_NOEXEC -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_SUB_5_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_SIZE.VALUE=32_BYTES -DRIVER.SYSTEM.VAR.VIM_CHANNEL_127_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_119_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_60_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_52_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_44_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_36_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_28_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_6_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.EQEP1_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_LPO_HIGH_FREQ.VALUE=10.000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_SIZE_VALUE.VALUE=0x12 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_SUB_0_DISABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_IRQ_ENTRY.VALUE="ldr pc,[pc,#-0x1b0]" -DRIVER.SYSTEM.VAR.VIM_CHANNEL_101_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_81_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_73_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_65_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_57_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_49_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.ECAP_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.LIN1_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.SPI2_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_GHV_POWER_DOWN_SOURCE.VALUE=PLL1 -DRIVER.SYSTEM.VAR.RAM_STACK_USER_BASE.VALUE=0x08000000 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_120_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_112_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_104_NAME.VALUE=ecap1Interrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_92_MAPPING.VALUE=92 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_84_MAPPING.VALUE=84 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_76_MAPPING.VALUE=76 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_68_MAPPING.VALUE=68 -DRIVER.SYSTEM.VAR.CLKT_GCLK_DOMAIN_ENABLE.VALUE=TRUE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_SUB_3_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_SUB_1_DISABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_81_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_73_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_65_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_57_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_49_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.SYSTEM_INIT.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_SIZE_VALUE.VALUE=0x04 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_20_NAME.VALUE=esmLowInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_12_NAME.VALUE=mibspi1HighLevelInterrupt -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_PERMISSION.VALUE=PRIV_NA_USER_NA_NOEXEC -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_SUB_1_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_SUB_4_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_BASE_ADDRESS.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_1_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_0_INT_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_0_INT_TYPE.VALUE=FIQ -DRIVER.SYSTEM.VAR.FLASH_EEPROM_DATA_9_WAIT_STATE_FREQ.VALUE=160.0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_PERMISSION_VALUE.VALUE=0x0600 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_PERMISSION_VALUE.VALUE=0x1200 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_61_MAPPING.VALUE=61 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_53_MAPPING.VALUE=53 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_45_MAPPING.VALUE=45 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_37_MAPPING.VALUE=37 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_29_MAPPING.VALUE=29 -DRIVER.SYSTEM.VAR.ECLK_PORT_BIT0_DIR.VALUE=1 -DRIVER.SYSTEM.VAR.FLASH_LENGTH.VALUE=0x00400000 -DRIVER.SYSTEM.VAR.RAM_STACK_FIQ_LENGTH.VALUE=0x00000100 -DRIVER.SYSTEM.VAR.CLKT_EXT1_ENABLE.VALUE=FALSE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_SUB_2_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_SUB_7_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_TYPE.VALUE=DEVICE_NONSHAREABLE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_SUB_5_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_100_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_51_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_43_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_35_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_27_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_21_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_19_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_13_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_ECC_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_AVCLK3_FREQ.VALUE=75.000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_TYPE_VALUE.VALUE=0x0006 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_95_NAME.VALUE=etpwm3TripZoneInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_87_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_79_NAME.VALUE=EMACRxIntISR -DRIVER.SYSTEM.VAR.CLKT_VCLK1_DIVIDER.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_PERMISSION.VALUE=PRIV_RO_USER_RO_NOEXEC -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_SUB_5_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_BASE_ADDRESS.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_TYPE.VALUE=NORMAL_OIWTNOWA_SHARED -DRIVER.SYSTEM.VAR.VIM_CHANNEL_124_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_116_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_108_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_94_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_86_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_78_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.CAN2_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.ECLK_PORT_BIT0_DOUT.VALUE=0 -DRIVER.SYSTEM.VAR.PBIST_ALGO_1.VALUE=0 -DRIVER.SYSTEM.VAR.FLASH_DATA_0_WAIT_STATE_FREQ.VALUE=45.0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_30_MAPPING.VALUE=30 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_22_MAPPING.VALUE=22 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_14_MAPPING.VALUE=14 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_7_NAME.VALUE=rtiOverflow1Interrupt -DRIVER.SYSTEM.VAR.PBIST_ALGO_2.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_RTI1_DOMAIN_ENABLE.VALUE=FALSE -DRIVER.SYSTEM.VAR.CLKT_AVCLK1_DOMAIN_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_SUB_6_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_SUB_0_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_127_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_119_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_30_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_22_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_14_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.ETPWM3_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.DCC1_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.HET2_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_VCLK3_FREQ.VALUE=75.000 -DRIVER.SYSTEM.VAR.CLKT_AVCLK4_FREQ1.VALUE=75.000 -DRIVER.SYSTEM.VAR.PBIST_ALGO_11_12.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_PLL2_SOURCE_ENABLE.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.FLASH_EEPROM_DATA_MAX_WAIT_STATES.VALUE=11 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_SUB_7_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_END_ADDRESS.VALUE=0x0000001f -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_SUB_1_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_94_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_86_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_78_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_21_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_13_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.ECAP5_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.ADC_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_TYPE_VALUE.VALUE=0x000B -DRIVER.SYSTEM.VAR.VIM_CHANNEL_70_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_62_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_54_NAME.VALUE=mibspi4LowLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_46_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_38_NAME.VALUE=mibspi3LowLevelInterrupt -DRIVER.SYSTEM.VAR.FEE_FLASH_ECC_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_SIZE.VALUE=32_BYTES -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_SUB_2_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_RESET_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_110_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_102_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_6_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_121_MAPPING.VALUE=121 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_113_MAPPING.VALUE=113 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_105_MAPPING.VALUE=105 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_SUB_0_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_SUB_5_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_RESERVED_ENTRY.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_121_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_113_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_105_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_71_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_63_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_55_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_47_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_39_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_TYPE_VALUE.VALUE=0x0006 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_121_NAME.VALUE=crc2Interrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_113_NAME.VALUE=can4HighLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_105_NAME.VALUE=ecap2Interrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_4_MAPPING.VALUE=4 -DRIVER.SYSTEM.VAR.CLKT_AVCLK3_DOMAIN_ENABLE.VALUE=FALSE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_SUB_3_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_END_ADDRESS.VALUE=0x87ffffff -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_SUB_6_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_SIZE.VALUE=4_GB -DRIVER.SYSTEM.VAR.VIM_CHANNEL_120_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_112_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_104_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.I2C1_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.FLASH_EEPROM_DATA_7_WAIT_STATE_FREQ.VALUE=128.0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_PERMISSION_VALUE.VALUE=0x1300 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_SIZE_VALUE.VALUE=0x04 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_PERMISSION_VALUE.VALUE=0x0300 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_98_MAPPING.VALUE=98 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_21_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_13_NAME.VALUE=lin1HighLevelInterrupt -DRIVER.SYSTEM.VAR.ECLK_PORT_BIT0_FUN.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_BASE_ADDRESS.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_SUB_4_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_SUB_7_DISABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_94_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_86_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_78_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_51_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_43_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_35_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_27_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_19_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.HET_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.PBIST_ALGO_13_14.VALUE=0 -DRIVER.SYSTEM.VAR.RAM_STACK_UNDEF_BASE.VALUE=0x08001400 -DRIVER.SYSTEM.VAR.RAM_STACK_SVC_BASE.VALUE=0x08001000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_SUB_7_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_TYPE.VALUE=NORMAL_OIWTNOWA_SHARED -DRIVER.SYSTEM.VAR.VIM_CHANNEL_99_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_3_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.DMM_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.MIBSPI5_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.FLASH_BANK_CONFIG_0.VALUE=ACTIVE -DRIVER.SYSTEM.VAR.CLKT_AVCLK4_FREQ.VALUE=75.000 -DRIVER.SYSTEM.VAR.FLASH_BANK_CONFIG_1.VALUE=ACTIVE -DRIVER.SYSTEM.VAR.VIM_CHANNEL_96_NAME.VALUE=etpwm4Interrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_91_MAPPING.VALUE=91 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_88_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_83_MAPPING.VALUE=83 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_75_MAPPING.VALUE=75 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_67_MAPPING.VALUE=67 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_59_MAPPING.VALUE=59 -DRIVER.SYSTEM.VAR.FLASH_BANK_CONFIG_2.VALUE=SLEEP -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_PERMISSION.VALUE=PRIV_RW_USER_RW_EXEC -DRIVER.SYSTEM.VAR.CLKT_VCLK2_DOMAIN_ENABLE.VALUE=FALSE -DRIVER.SYSTEM.VAR.FLASH_BANK_CONFIG_3.VALUE=SLEEP -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_TYPE.VALUE=NORMAL_OIWTNOWA_SHARED -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_SUB_2_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_END_ADDRESS.VALUE=0x0807ffff -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_SUB_0_DISABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_40_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_32_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_24_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_16_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_5_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.ECLK_PORT_BIT0_PDR.VALUE=0 -DRIVER.SYSTEM.VAR.FLASH_BANK_CONFIG_4.VALUE=SLEEP -DRIVER.SYSTEM.VAR.FLASH_BANK_CONFIG_5.VALUE=SLEEP -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_SIZE_VALUE.VALUE=0x15 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_8_NAME.VALUE=rtiTimebaseInterrupt -DRIVER.SYSTEM.VAR.ECLK_PRESCALER.VALUE=8 -DRIVER.SYSTEM.VAR.FLASH_BANK_CONFIG_6.VALUE=SLEEP -DRIVER.SYSTEM.VAR.FLASH_BANK_CONFIG_7.VALUE=ACTIVE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_END_ADDRESS.VALUE=0xffffffff -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_SUB_0_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_BASE_ADDRESS.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_SUB_3_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_126_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_118_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_97_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_89_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_80_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_72_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_64_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_56_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_48_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_VCLK4_FREQ.VALUE=75.0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_60_MAPPING.VALUE=60 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_52_MAPPING.VALUE=52 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_44_MAPPING.VALUE=44 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_36_MAPPING.VALUE=36 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_28_MAPPING.VALUE=28 -DRIVER.SYSTEM.VAR.CLKT_PLL1_BAND_WIDTH_ADJUSTMENT.VALUE=7 -DRIVER.SYSTEM.VAR.CLKT_LPO_LOW_SOURCE_ENABLE.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_SUB_1_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_SUB_6_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_SUB_4_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_PLL2_MUL_VAL.VALUE=9500 -DRIVER.SYSTEM.VAR.CLKT_RTI1_POST_SOURCE.VALUE=VCLK -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_SIZE_VALUE.VALUE=0x04 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_71_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_63_NAME.VALUE=het2HighLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_55_NAME.VALUE=can3LowLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_47_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_39_NAME.VALUE=dmaHBCAInterrupt -DRIVER.SYSTEM.VAR.CLKT_PLL2_BAND_WIDTH_ADJUSTMENT.VALUE=7 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_SUB_4_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_SIZE.VALUE=32_BYTES -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_SUB_7_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_DATA_ENTRY.VALUE=_dabort -DRIVER.SYSTEM.VAR.VIM_CHANNEL_80_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_72_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_64_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_56_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_48_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_21_MAPPING.VALUE=21 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_13_MAPPING.VALUE=13 -DRIVER.SYSTEM.VAR.CLKT_PLL2_REF_CLOCK_DIV.VALUE=8 -DRIVER.SYSTEM.VAR.CLKT_PLL1_SPEADING_RATE.VALUE=255 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_SUB_5_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_END_ADDRESS.VALUE=0x0000001f -DRIVER.SYSTEM.VAR.VIM_CHANNEL_50_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_42_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_34_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_26_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_18_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_0_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.ETPWM1_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_PLL1_RESET_ON_SLIP.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.FLASH_EEPROM_DATA_5_WAIT_STATE_FREQ.VALUE=96.0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_TYPE_VALUE.VALUE=0x0010 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_PERMISSION_VALUE.VALUE=0x0300 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_127_MAPPING.VALUE=127 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_122_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_119_MAPPING.VALUE=119 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_114_NAME.VALUE=i2c2Interrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_106_NAME.VALUE=ecap3nterrupt -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_PERMISSION.VALUE=PRIV_RO_USER_RO_EXEC -DRIVER.SYSTEM.VAR.CLKT_PLL1_FM_ENABLE.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_SUB_6_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_SUB_0_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_SIZE.VALUE=4_MB -DRIVER.SYSTEM.VAR.VIM_CHANNEL_123_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_115_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_107_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_90_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_82_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_74_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_66_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_58_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.ECAP3_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_30_NAME.VALUE=mibspi2LowLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_22_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_14_NAME.VALUE=adc1Group0Interrupt -DRIVER.SYSTEM.VAR.CLKT_LPOLO_ENABLE.VALUE=FALSE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_SUB_1_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_123_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_115_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_107_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.SCI3_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.ECLK_PORT_BIT0_PSL.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_120_MAPPING.VALUE=120 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_112_MAPPING.VALUE=112 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_104_MAPPING.VALUE=104 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_END_ADDRESS.VALUE=0x0000001f -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_SUB_4_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_BASE_ADDRESS.VALUE=0x80000000 -DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_SVC_ENTRY.VALUE=_svc -DRIVER.SYSTEM.VAR.VIM_CHANNEL_21_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_20_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_13_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_12_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CONFIG_NEW.VALUE=1 -DRIVER.SYSTEM.VAR.CRC1_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_EXTERNAL2_FREQ.VALUE=00.0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_TYPE_VALUE.VALUE=0x0002 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_97_NAME.VALUE=etpwm4TripZoneInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_89_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_3_MAPPING.VALUE=3 -DRIVER.SYSTEM.VAR.CLKT_LPOHI_ENABLE.VALUE=FALSE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_SUB_2_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_TYPE.VALUE=NORMAL_OIWTNOWA_SHARED -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_SUB_5_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_101_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_99_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_93_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_85_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_77_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_69_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_6_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.CLKT_GHV_NORMAL_SOURCE.VALUE=PLL1 -DRIVER.SYSTEM.VAR.CLKT_AVCLK3_DIV_FREQ.VALUE=75.0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_97_MAPPING.VALUE=97 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_89_MAPPING.VALUE=89 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_9_NAME.VALUE=gioHighLevelInterrupt -DRIVER.SYSTEM.VAR.CLKT_PLL1_ENABLE.VALUE=TRUE -DRIVER.SYSTEM.VAR.FLASH_BASE_ADDRESS.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_SUB_3_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_SUB_6_DISABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_51_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_43_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_35_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_27_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_19_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_5_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.SPI5_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_TYPE_VALUE.VALUE=0x0006 -DRIVER.SYSTEM.VAR.CLKT_AVCLK2_DOMAIN_DISABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_SUB_6_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_TYPE.VALUE=NORMAL_OINC_NONSHARED -DRIVER.SYSTEM.VAR.VIM_CHANNEL_120_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_112_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_104_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_100_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.RTP_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.MIBSPI3_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.FLASH_BANK_LINK_LENGTH_0.VALUE=0x001FFFE0 -DRIVER.SYSTEM.VAR.FLASH_BANK_LINK_LENGTH_1.VALUE=0x00200000 -DRIVER.SYSTEM.VAR.FLASH_EEPROM_DATA_11_WAIT_STATE_FREQ.VALUE=192.0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_SIZE_VALUE.VALUE=0x16 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_90_MAPPING.VALUE=90 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_82_MAPPING.VALUE=82 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_80_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_74_MAPPING.VALUE=74 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_72_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_66_MAPPING.VALUE=66 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_64_NAME.VALUE=sci3HighLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_58_MAPPING.VALUE=58 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_56_NAME.VALUE=mibspi5LowLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_48_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_SIZE.VALUE=32_BYTES -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_SUB_7_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_SUB_1_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_93_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_85_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_77_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_69_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.EQEP_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.RTI_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.STC_MAX_TIMEOUT.VALUE=0xFFFFFFFF -DRIVER.SYSTEM.VAR.CLKT_LPO_LOW_TRIM.VALUE=100.00 -DRIVER.SYSTEM.VAR.FLASH_EEPROM_DATA_3_WAIT_STATE_FREQ.VALUE=64.0 -DRIVER.SYSTEM.VAR.RAM_STACK_FIQ_BASE.VALUE=0x08001100 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_PERMISSION_VALUE.VALUE=0x1300 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_0_NAME.VALUE=esmHighInterrupt -DRIVER.SYSTEM.VAR.FLASH_BANK_LINK_LENGTH_7.VALUE=0x000020000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_SUB_2_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_50_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_42_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_34_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_26_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_18_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.FEE_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_10.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_LPO_LOW_TRIM_VALUE.VALUE=16 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_123_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_115_NAME.VALUE=lin2HighLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_107_NAME.VALUE=ecap4Interrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_51_MAPPING.VALUE=51 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_43_MAPPING.VALUE=43 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_35_MAPPING.VALUE=35 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_27_MAPPING.VALUE=27 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_19_MAPPING.VALUE=19 -DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_11.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_PERMISSION.VALUE=PRIV_RW_USER_RW_EXEC -DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_12.VALUE=0 -DRIVER.SYSTEM.VAR.CCM_MENU.VALUE=NONE -DRIVER.SYSTEM.VAR.CLKT_RESERVED_SOURCE_ENABLE.VALUE=0x00000004 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_SUB_0_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_SUB_5_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_SIZE.VALUE=512_KB -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_BASE_ADDRESS.VALUE=0x08000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_SUB_3_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_98_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_20_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_12_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_4_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_13.VALUE=0 -DRIVER.SYSTEM.VAR.POM_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_PLL1_MUL_VAL.VALUE=9500 -DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_14.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_AVCLK3_SOURCE.VALUE=VCLK -DRIVER.SYSTEM.VAR.CLKT_PLL1_FREQ.VALUE=300.00 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_SIZE_VALUE.VALUE=0x1F -DRIVER.SYSTEM.VAR.VIM_CHANNEL_31_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_23_NAME.VALUE=gioLowLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_15_NAME.VALUE=adc1Group1Interrupt -DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_15.VALUE=0 -DRIVER.SYSTEM.VAR.RAM_STACK_UNDEF_LENGTH.VALUE=0x00000100 -DRIVER.SYSTEM.VAR.RAM_STACK_SVC_LENGTH.VALUE=0x00000100 -DRIVER.SYSTEM.VAR.CLKT_LPO_TRIM_OTP_LOC.VALUE=0xF00801B4 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_SUB_3_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_SUB_6_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_UNDEF_ENTRY.VALUE=_undef -DRIVER.SYSTEM.VAR.VIM_CHANNEL_93_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_85_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_77_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_71_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_69_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_63_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_55_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_47_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_39_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.ETPWM6_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.DCC_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_20_MAPPING.VALUE=20 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_12_MAPPING.VALUE=12 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_PERMISSION.VALUE=PRIV_RW_USER_RO_NOEXEC -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_BASE_ADDRESS.VALUE=0xFFF80000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_SUB_4_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_SUB_7_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_ENDIAN_LITTLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_126_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_125_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_118_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_117_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_109_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.OS_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_SIZE_VALUE.VALUE=0x04 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_126_MAPPING.VALUE=126 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_118_MAPPING.VALUE=118 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_98_NAME.VALUE=etpwm5Interrupt -DRIVER.SYSTEM.VAR.ECLK_PORT_BIT0_PULL.VALUE=2 -DRIVER.SYSTEM.VAR.ECLK_SUSPEND.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_PLL1_SPEADING_AMOUNT.VALUE=61 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_TYPE.VALUE=NORMAL_OIWTNOWA_SHARED -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_SUB_5_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_VFP_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.ECAP1_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.I2C_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.AJSM_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.ECLK_OSCILLATOR_FREQ.VALUE=16.000 -DRIVER.SYSTEM.VAR.CLKT_LPO_HIGH_TRIM.VALUE=100.00 -DRIVER.SYSTEM.VAR.CLKT_AVCLK4_SPL_SOURCE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_9_MAPPING.VALUE=9 -DRIVER.SYSTEM.VAR.VIM_ECC_INTERRUPT_MAPPED_TO_VIM.VALUE=FALSE -DRIVER.SYSTEM.VAR.CLKT_VCLK4_DOMAIN_ENABLE.VALUE=FALSE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_SUB_0_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_71_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_63_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_55_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_47_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_41_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_39_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_33_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_25_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_17_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_9_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.SCI1_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_CRYSTAL_FREQ.VALUE=16.0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_TYPE_VALUE.VALUE=0x0008 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_111_MAPPING.VALUE=111 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_103_MAPPING.VALUE=103 -DRIVER.SYSTEM.VAR.VIM_PHANTOM_NAME.VALUE=phantomInterrupt -DRIVER.OS.VAR.OS_USERECERSIVEMUTEXES.VALUE=0 -DRIVER.OS.VAR.OS_USETIMERS.VALUE=0 -DRIVER.OS.VAR.OS_USECNTSEMAPHORE.VALUE=0 -DRIVER.OS.VAR.OS_GENERATERUNTIMESTATS.VALUE=0 -DRIVER.OS.VAR.OS_USEMPU.VALUE=0 -DRIVER.OS.VAR.OS_TOTALHEAPSIZE.VALUE=8192 -DRIVER.OS.VAR.OS_USEVERBOSESTACK.VALUE=2 -DRIVER.OS.VAR.OS_TIMERPRIORITY.VALUE=0 -DRIVER.OS.VAR.OS_SVCENABLE.VALUE=0 -DRIVER.OS.VAR.OS_MAXTASKNAMELEN.VALUE=16 -DRIVER.OS.VAR.OS_MAXPRIORITIES.VALUE=5 -DRIVER.OS.VAR.OS_TIMERTASKSTACKDEPTH.VALUE=0 -DRIVER.OS.VAR.OS_COROUTINEPRIORITIES.VALUE=2 -DRIVER.OS.VAR.OS_USECOROUTINES.VALUE=0 -DRIVER.OS.VAR.OS_USEMUTEXES.VALUE=0 -DRIVER.OS.VAR.OS_CPUCLOCKHZ.VALUE=80000000 -DRIVER.OS.VAR.OS_USEMALLOCFAILEDHOOK.VALUE=0 -DRIVER.OS.VAR.OS_MINSTACKSIZE.VALUE=128 -DRIVER.OS.VAR.OS_SYSTEM_MODE.VALUE=0x1F -DRIVER.OS.VAR.OS_USEPREEMPTION.VALUE=1 -DRIVER.OS.VAR.OS_IDLESHOULDYIELD.VALUE=1 -DRIVER.OS.VAR.OS_USEIDLEHOOK.VALUE=0 -DRIVER.OS.VAR.OS_TICKRATEHZ.VALUE=1000 -DRIVER.OS.VAR.OS_TIMERPQUEUELENGTH.VALUE=0 -DRIVER.OS.VAR.OS_USETRACE.VALUE=0 -DRIVER.OS.VAR.OS_USESTACK.VALUE=0 -DRIVER.OS.VAR.OS_USETICKHOOK.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL93_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL85_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL77_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL69_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL0_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL21_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL13_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL71_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL63_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL55_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL47_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL39_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL94_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL86_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL78_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL3_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL41_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL33_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL25_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL17_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL88_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL9_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL50_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL42_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL34_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL26_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL18_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL81_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL73_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL65_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL57_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL49_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL2_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL11_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL50_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL42_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL34_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL26_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL18_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL8_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL5_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL11_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL71_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL63_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL55_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL47_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL39_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL92_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL84_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL76_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL68_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL11_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL70_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL62_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL54_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL46_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL38_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL92_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL84_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL76_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL68_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL1_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL94_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL86_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL78_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL7_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL40_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL32_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL24_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL16_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL71_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL63_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL55_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL47_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL39_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL0_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL40_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL32_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL24_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL16_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL40_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL32_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL24_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL16_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL10_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL89_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL6_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL89_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL4_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL61_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL53_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL45_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL37_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL29_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL91_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL83_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL75_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL67_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL59_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL61_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL53_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL45_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL37_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL29_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL92_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL84_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL76_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL68_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL5_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL61_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL53_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL45_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL37_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL29_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL90_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL82_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL74_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL66_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL58_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_LOW_TIME.VALUE=218.453 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL30_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL22_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL14_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL31_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL23_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL15_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL9_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL30_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL22_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL14_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL95_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL87_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL79_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL4_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL88_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL3_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL51_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL43_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL35_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL27_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL19_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL90_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL82_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL74_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL66_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL58_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL89_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL90_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL82_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL74_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL66_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL58_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL3_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL9_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL51_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL43_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL35_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL27_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL19_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL60_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL52_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL44_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL36_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL28_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL20_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL12_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL80_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL72_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL64_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL56_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL48_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_VCLK_FREQ.VALUE=75 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL30_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL22_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL14_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL8_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL20_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL12_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL93_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL85_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL77_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL69_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL2_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL95_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL87_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL79_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL2_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL95_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL87_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL79_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL8_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL80_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL72_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL64_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL56_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL48_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL1_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL41_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL33_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL25_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL17_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL81_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL73_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL65_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL57_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL49_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL41_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL33_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL25_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL17_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL10_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL7_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL51_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL43_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL35_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL27_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL19_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL70_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL62_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL54_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL46_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL38_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL21_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL13_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL7_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL10_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL93_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL85_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL77_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL69_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL6_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL91_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL83_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL75_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL67_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL59_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL0_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL94_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL86_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL78_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL1_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL70_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL62_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL54_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL46_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL38_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_BASE.VALUE=0xFFFFF500 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL31_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL23_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL15_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL31_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL23_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL15_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL80_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL72_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL64_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL56_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL48_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL88_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL5_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL50_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL42_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL34_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL26_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL18_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL60_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL52_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL44_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL36_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL28_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL20_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL12_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL6_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL91_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL83_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL75_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL67_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL59_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL4_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL60_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL52_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL44_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL36_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL28_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_LPC.VALUE=16384 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL21_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL13_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL81_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL73_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL65_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL57_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL49_INT_LEVEL.VALUE=0 -DRIVER.RTI.VAR.RTI_1_COMPARE_2_SOURCE.VALUE=0x00000100 -DRIVER.RTI.VAR.RTI_1_COMPARE_3_FREQ.VALUE=0.000100000 -DRIVER.RTI.VAR.RTI_1_FREQ.VALUE=75.000 -DRIVER.RTI.VAR.RTI_1_COMPARE_1_ACTUALTIME.VALUE=5.000 -DRIVER.RTI.VAR.RTI_1_COUNTER_1_UC_COMPARE.VALUE=7 -DRIVER.RTI.VAR.RTI_1_COMPARE_1_TIME.VALUE=5.000 -DRIVER.RTI.VAR.RTI_1_COMPARE_3_UPDATE.VALUE=93750 -DRIVER.RTI.VAR.RTI_1_CONTINUE_ON_SUSPEND_ENABLE.VALUE=0x00000000 -DRIVER.RTI.VAR.RTI_1_COMPARE_1_INPUT_FREQ.VALUE=9.375000000 -DRIVER.RTI.VAR.RTI_1_COMPARE_0_SOURCE.VALUE=0x00000000 -DRIVER.RTI.VAR.RTI_1_COMPARE_2_TIME.VALUE=8.000 -DRIVER.RTI.VAR.RTI_1_COMPARE_0_ACTUALTIME.VALUE=1.000 -DRIVER.RTI.VAR.RTI_1_COUNTER_0_UC_COMPARE.VALUE=7 -DRIVER.RTI.VAR.RTI_1_COMPARE_1_UPDATE.VALUE=46875 -DRIVER.RTI.VAR.RTI_1_COMPARE_3_TIME.VALUE=10.000 -DRIVER.RTI.VAR.RTI_1_COUNTER_0_NTU_SOURCE.VALUE=1 -DRIVER.RTI.VAR.RTI_1_COMPARE_0_INPUT_FREQ.VALUE=9.375000000 -DRIVER.RTI.VAR.RTI_1_COUNTER_0_RTI_FREQ.VALUE=0.0 -DRIVER.RTI.VAR.RTI_1_COUNTER_0_FREQ.VALUE=9.375000000 -DRIVER.RTI.VAR.RTI_1_COUNTER_1_FREQUENCY.VALUE=10.000 -DRIVER.RTI.VAR.RTI_1_COMPARE_3_SOURCE.VALUE=0x00001000 -DRIVER.RTI.VAR.RTI_1_COUNTER_1_FREQ.VALUE=9.375000000 -DRIVER.RTI.VAR.RTI_1_COUNTER_0_NTU_SOURCE_REG.VALUE=0x5 -DRIVER.RTI.VAR.RTI_1_COMPARE_1_SOURCE.VALUE=0x00000000 -DRIVER.RTI.VAR.RTI_1_NTU_1_FREQ.VALUE=0.0 -DRIVER.RTI.VAR.RTI_1_COMPARE_3_ACTUALTIME.VALUE=10.000 -DRIVER.RTI.VAR.RTI_1_COMPARE_0_FREQ.VALUE=0.001000000 -DRIVER.RTI.VAR.RTI_1_COMPARE_2_UPDATE.VALUE=75000 -DRIVER.RTI.VAR.RTI_1_BASE.VALUE=0xFFFFFC00 -DRIVER.RTI.VAR.RTI_1_NTU_2_FREQ.VALUE=0.0 -DRIVER.RTI.VAR.RTI_1_COMPARE_3_INPUT_FREQ.VALUE=9.375000000 -DRIVER.RTI.VAR.RTI_1_COMPARE_1_FREQ.VALUE=0.000200000 -DRIVER.RTI.VAR.RTI_1_COUNTER_0_CAPTURE_SOURCE_ENABLE.VALUE=0 -DRIVER.RTI.VAR.RTI_1_COUNTER_1_CAPTURE_SOURCE_ENABLE.VALUE=0 -DRIVER.RTI.VAR.RTI_1_COMPARE_0_UPDATE.VALUE=9375 -DRIVER.RTI.VAR.RTI_1_NTU_3_FREQ.VALUE=300.000 -DRIVER.RTI.VAR.RTI_1_COMPARE_0.VALUE=9375 -DRIVER.RTI.VAR.RTI_1_COMPARE_2_ACTUALTIME.VALUE=8.000 -DRIVER.RTI.VAR.RTI_1_COMPARE_1.VALUE=46875 -DRIVER.RTI.VAR.RTI_1_COMPARE_2.VALUE=75000 -DRIVER.RTI.VAR.RTI_1_COMPARE_3.VALUE=93750 -DRIVER.RTI.VAR.RTI_1_COUNTER_0_NTU_FREQ.VALUE=0.000 -DRIVER.RTI.VAR.RTI_1_COMPARE_2_FREQ.VALUE=0.000125000 -DRIVER.RTI.VAR.RTI_1_COMPARE_0_TIME.VALUE=1.000 -DRIVER.RTI.VAR.RTI_1_NTU_4_FREQ.VALUE=0.000 -DRIVER.RTI.VAR.RTI_1_COMPARE_2_INPUT_FREQ.VALUE=9.375000000 -DRIVER.RTI.VAR.RTI_1_COUNTER_0_FREQUENCY.VALUE=10.000 -DRIVER.GIO.VAR.GIO_PORT1_BIT4_PULL.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT0_BIT5_DIR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT4_PULDIS.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT7_DOUT.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT2_LVL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT7_PSL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT3_PDR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT2_POL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT6_ENA.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT2_PSL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT6_DIR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT2_DOUT.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT3_LVL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT4_PDR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT3_POL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT5_PULDIS.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT7_ENA.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT3_PSL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT5_PULL.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT0_BIT7_DIR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT4_LVL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT5_PDR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT4_POL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT2_PULDIS.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT4_PSL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT0_PULL.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT0_BIT3_DOUT.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT5_LVL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT6_PDR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT5_POL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT5_PSL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT6_PULL.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT0_BIT6_LVL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT3_PULDIS.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT7_PDR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT6_POL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT0_DOUT.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT6_PSL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT1_PULL.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT0_BIT4_DOUT.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT7_LVL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT7_PULDIS.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT7_POL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT0_PULDIS.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT7_PSL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT7_PULL.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT1_BIT1_DOUT.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT2_PULL.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT1_BIT1_PULDIS.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT5_DOUT.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT0_ENA.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT5_PULDIS.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT0_DIR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT2_DOUT.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT3_PULL.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT1_BIT1_ENA.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT6_DOUT.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT1_DIR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT6_PULDIS.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT2_ENA.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT2_DIR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT0_PDR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT0_PULL.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT0_BIT3_PULDIS.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT3_DOUT.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT4_PULL.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT1_BIT3_ENA.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT7_DOUT.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT3_DIR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT0_LVL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT1_PDR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT0_POL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT4_ENA.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT0_PSL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT4_DIR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT4_PULDIS.VALUE=0 -DRIVER.GIO.VAR.GIO_BASE_PORTA.VALUE=0xFFF7BC34 -DRIVER.GIO.VAR.GIO_BASE_PORTB.VALUE=0xFFF7BC54 -DRIVER.GIO.VAR.GIO_PORT1_BIT1_LVL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT2_PDR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT1_POL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT1_PULL.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT1_BIT4_DOUT.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT5_PULL.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT1_BIT5_ENA.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT1_PSL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT5_DIR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT2_LVL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT1_PULDIS.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT0_ENA.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT3_PDR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT2_POL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT0_DIR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT6_ENA.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT2_PSL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT6_DIR.VALUE=0 -DRIVER.GIO.VAR.GIO_BASE.VALUE=0xFFF7BC00 -DRIVER.GIO.VAR.GIO_PORT1_BIT3_LVL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT1_ENA.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT4_PDR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT3_POL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT2_PULL.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT0_BIT1_DIR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT5_DOUT.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT6_PULL.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT1_BIT7_ENA.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT2_PULDIS.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT3_PSL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT7_DIR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT4_LVL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT2_ENA.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT5_PDR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT4_POL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT2_DIR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT0_DOUT.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT6_PULDIS.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT4_PSL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT0_PDR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORTB_ENABLE.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT1_BIT5_LVL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT3_ENA.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT6_PDR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT5_POL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT3_PULL.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT0_BIT3_DIR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT6_DOUT.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT7_PULL.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT0_BIT0_LVL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT5_PSL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT1_PDR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT0_POL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT6_LVL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT7_PULDIS.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT4_ENA.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT7_PDR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT6_POL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT0_PSL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT4_DIR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT0_PULDIS.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT1_DOUT.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT1_LVL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT6_PSL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT2_PDR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT1_POL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT7_LVL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT5_ENA.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT7_POL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT1_PSL.VALUE=0 -DRIVER.SCI.VAR.SCI4_PORT_BIT2_PULL.VALUE=2 -DRIVER.SCI.VAR.SCI1_PORT_BIT2_DOUT.VALUE=0 -DRIVER.SCI.VAR.SCI4_BASE.VALUE=0xFFF7E700 -DRIVER.SCI.VAR.SCI4_LENGTH.VALUE=8 -DRIVER.SCI.VAR.SCI3_BREAKINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI2_PORT_BIT0_DOUT.VALUE=0 -DRIVER.SCI.VAR.SCI1_PORT_BIT2_PSL.VALUE=1 -DRIVER.SCI.VAR.SCI3_PORT_BIT0_FUN.VALUE=0 -DRIVER.SCI.VAR.SCI4_ACTUALBAUDRATE.VALUE=9606 -DRIVER.SCI.VAR.SCI4_FEINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI3_PORT_BIT2_DIR.VALUE=0 -DRIVER.SCI.VAR.SCI1_BAUDRATE.VALUE=9600 -DRIVER.SCI.VAR.SCI4_OEINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI4_TXINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI3_PORT_BIT0_PDR.VALUE=0 -DRIVER.SCI.VAR.SCI2_PEINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI1_STOPBITS.VALUE=2 -DRIVER.SCI.VAR.SCI3_PORT_BIT1_FUN.VALUE=1 -DRIVER.SCI.VAR.SCI3_WAKEINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI1_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.SCI.VAR.SCI1_RXINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI4_WAKEINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI1_FEINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI1_PORT_BIT0_PULL.VALUE=2 -DRIVER.SCI.VAR.SCI3_PORT_BIT1_PDR.VALUE=0 -DRIVER.SCI.VAR.SCI1_TXINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI2_PORT_BIT1_DOUT.VALUE=0 -DRIVER.SCI.VAR.SCI3_PORT_BIT2_FUN.VALUE=1 -DRIVER.SCI.VAR.SCI4_TIMMINGMODE.VALUE=1 -DRIVER.SCI.VAR.SCI3_CLKMODE.VALUE=1 -DRIVER.SCI.VAR.SCI3_PORT_BIT0_PSL.VALUE=1 -DRIVER.SCI.VAR.SCI2_LENGTH.VALUE=8 -DRIVER.SCI.VAR.SCI1_BASE_PORT.VALUE=0xFFF7E440 -DRIVER.SCI.VAR.SCI4_BAUDRATE.VALUE=9600 -DRIVER.SCI.VAR.SCI3_OEINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI2_PARITYENA.VALUE=0 -DRIVER.SCI.VAR.SCI1_EVENPARITY.VALUE=0 -DRIVER.SCI.VAR.SCI3_PORT_BIT2_PDR.VALUE=0 -DRIVER.SCI.VAR.SCI2_BREAKINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI1_PEINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI1_TIMMINGMODE.VALUE=1 -DRIVER.SCI.VAR.SCI3_PORT_BIT1_PSL.VALUE=1 -DRIVER.SCI.VAR.SCI4_STOPBITS.VALUE=2 -DRIVER.SCI.VAR.SCI4_RXINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI4_FEINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI1_PORT_BIT1_PULL.VALUE=2 -DRIVER.SCI.VAR.SCI4_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.SCI.VAR.SCI2_PORT_BIT2_DOUT.VALUE=0 -DRIVER.SCI.VAR.SCI4_TXINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI3_PORT_BIT2_PSL.VALUE=1 -DRIVER.SCI.VAR.SCI3_PORT_BIT0_DOUT.VALUE=0 -DRIVER.SCI.VAR.SCI2_WAKEINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI3_WAKEINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI1_RXINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI2_CLKMODE.VALUE=1 -DRIVER.SCI.VAR.SCI1_PRESCALE.VALUE=487 -DRIVER.SCI.VAR.SCI4_PEINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI2_PORT_BIT0_DIR.VALUE=0 -DRIVER.SCI.VAR.SCI1_PORT_BIT2_PULL.VALUE=2 -DRIVER.SCI.VAR.SCI3_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.SCI.VAR.SCI3_FEINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI2_PORT_BIT0_PULL.VALUE=2 -DRIVER.SCI.VAR.SCI3_OEINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI3_TXINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI1_ACTUALBAUDRATE.VALUE=9606 -DRIVER.SCI.VAR.SCI3_PORT_BIT1_DOUT.VALUE=0 -DRIVER.SCI.VAR.SCI2_BREAKINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI1_PEINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI2_PORT_BIT1_DIR.VALUE=0 -DRIVER.SCI.VAR.SCI4_RXINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI4_BASE_PORT.VALUE=0xFFF7E740 -DRIVER.SCI.VAR.SCI4_PRESCALE.VALUE=487 -DRIVER.SCI.VAR.SCI2_PORT_BIT0_FUN.VALUE=0 -DRIVER.SCI.VAR.SCI2_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.SCI.VAR.SCI2_PORT_BIT2_DIR.VALUE=0 -DRIVER.SCI.VAR.SCI1_WAKEINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI1_CLKMODE.VALUE=1 -DRIVER.SCI.VAR.SCI2_PORT_BIT1_PULL.VALUE=2 -DRIVER.SCI.VAR.SCI2_WAKEINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI2_PORT_BIT0_PDR.VALUE=0 -DRIVER.SCI.VAR.SCI3_BAUDRATE.VALUE=9600 -DRIVER.SCI.VAR.SCI2_OEINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI3_PORT_BIT2_DOUT.VALUE=0 -DRIVER.SCI.VAR.SCI2_PORT_BIT1_FUN.VALUE=1 -DRIVER.SCI.VAR.SCI4_PORT_BIT0_DOUT.VALUE=0 -DRIVER.SCI.VAR.SCI4_PEINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI4_BREAKINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI3_TIMMINGMODE.VALUE=1 -DRIVER.SCI.VAR.SCI3_STOPBITS.VALUE=2 -DRIVER.SCI.VAR.SCI3_RXINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI2_PORT_BIT1_PDR.VALUE=0 -DRIVER.SCI.VAR.SCI3_FEINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI1_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.SCI.VAR.SCI2_PORT_BIT2_FUN.VALUE=1 -DRIVER.SCI.VAR.SCI1_BREAKINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI2_PORT_BIT0_PSL.VALUE=1 -DRIVER.SCI.VAR.SCI3_TXINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI4_PORT_BIT0_DIR.VALUE=0 -DRIVER.SCI.VAR.SCI2_PORT_BIT2_PULL.VALUE=2 -DRIVER.SCI.VAR.SCI2_PORT_BIT2_PDR.VALUE=0 -DRIVER.SCI.VAR.SCI3_PORT_BIT0_PULL.VALUE=2 -DRIVER.SCI.VAR.SCI2_BASE_PORT.VALUE=0xFFF7E640 -DRIVER.SCI.VAR.SCI3_PARITYENA.VALUE=0 -DRIVER.SCI.VAR.SCI2_ACTUALBAUDRATE.VALUE=9606 -DRIVER.SCI.VAR.SCI4_PORT_BIT1_DOUT.VALUE=0 -DRIVER.SCI.VAR.SCI2_PORT_BIT1_PSL.VALUE=1 -DRIVER.SCI.VAR.SCI3_LENGTH.VALUE=8 -DRIVER.SCI.VAR.SCI3_PEINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI4_PORT_BIT1_DIR.VALUE=0 -DRIVER.SCI.VAR.SCI1_WAKEINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI2_FEINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI2_PORT_BIT2_PSL.VALUE=1 -DRIVER.SCI.VAR.SCI4_PORT_BIT0_FUN.VALUE=0 -DRIVER.SCI.VAR.SCI2_OEINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI4_EVENPARITY.VALUE=0 -DRIVER.SCI.VAR.SCI2_TXINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI4_PORT_BIT2_DIR.VALUE=0 -DRIVER.SCI.VAR.SCI4_PORT_BIT2_PULDIS.VALUE=0 -DRIVER.SCI.VAR.SCI4_BREAKINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI3_PORT_BIT1_PULL.VALUE=2 -DRIVER.SCI.VAR.SCI4_PORT_BIT0_PDR.VALUE=0 -DRIVER.SCI.VAR.SCI3_RXINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI4_PORT_BIT2_DOUT.VALUE=0 -DRIVER.SCI.VAR.SCI1_BASE.VALUE=0xFFF7E400 -DRIVER.SCI.VAR.SCI4_PORT_BIT1_FUN.VALUE=1 -DRIVER.SCI.VAR.SCI3_PRESCALE.VALUE=487 -DRIVER.SCI.VAR.SCI1_PORT_BIT0_DIR.VALUE=0 -DRIVER.SCI.VAR.SCI1_BREAKINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI4_PORT_BIT1_PDR.VALUE=0 -DRIVER.SCI.VAR.SCI1_LENGTH.VALUE=8 -DRIVER.SCI.VAR.SCI4_PORT_BIT2_FUN.VALUE=1 -DRIVER.SCI.VAR.SCI3_PORT_BIT2_PULDIS.VALUE=0 -DRIVER.SCI.VAR.SCI2_BAUDRATE.VALUE=9600 -DRIVER.SCI.VAR.SCI1_PARITYENA.VALUE=0 -DRIVER.SCI.VAR.SCI1_OEINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI4_PORT_BIT0_PSL.VALUE=1 -DRIVER.SCI.VAR.SCI1_PORT_BIT1_DIR.VALUE=0 -DRIVER.SCI.VAR.SCI3_PORT_BIT2_PULL.VALUE=2 -DRIVER.SCI.VAR.SCI3_PEINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI4_PORT_BIT2_PDR.VALUE=0 -DRIVER.SCI.VAR.SCI2_STOPBITS.VALUE=2 -DRIVER.SCI.VAR.SCI4_PORT_BIT0_PULL.VALUE=2 -DRIVER.SCI.VAR.SCI2_RXINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI1_PORT_BIT0_DOUT.VALUE=0 -DRIVER.SCI.VAR.SCI2_BASE.VALUE=0xFFF7E600 -DRIVER.SCI.VAR.SCI2_FEINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI1_PORT_BIT0_FUN.VALUE=0 -DRIVER.SCI.VAR.SCI4_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.SCI.VAR.SCI3_ACTUALBAUDRATE.VALUE=9606 -DRIVER.SCI.VAR.SCI4_PORT_BIT1_PSL.VALUE=1 -DRIVER.SCI.VAR.SCI1_PORT_BIT2_DIR.VALUE=0 -DRIVER.SCI.VAR.SCI3_EVENPARITY.VALUE=0 -DRIVER.SCI.VAR.SCI2_TXINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI3_BREAKINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI2_TIMMINGMODE.VALUE=1 -DRIVER.SCI.VAR.SCI1_PORT_BIT0_PDR.VALUE=0 -DRIVER.SCI.VAR.SCI2_PORT_BIT2_PULDIS.VALUE=0 -DRIVER.SCI.VAR.SCI1_PORT_BIT1_FUN.VALUE=1 -DRIVER.SCI.VAR.SCI4_PORT_BIT2_PSL.VALUE=1 -DRIVER.SCI.VAR.SCI4_OEINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI2_PEINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI1_PORT_BIT1_PDR.VALUE=0 -DRIVER.SCI.VAR.SCI4_PORT_BIT1_PULL.VALUE=2 -DRIVER.SCI.VAR.SCI3_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.SCI.VAR.SCI1_PORT_BIT1_DOUT.VALUE=0 -DRIVER.SCI.VAR.SCI3_BASE.VALUE=0xFFF7E500 -DRIVER.SCI.VAR.SCI1_PORT_BIT2_FUN.VALUE=1 -DRIVER.SCI.VAR.SCI4_WAKEINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI1_FEINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI1_PORT_BIT0_PSL.VALUE=1 -DRIVER.SCI.VAR.SCI3_PORT_BIT0_DIR.VALUE=0 -DRIVER.SCI.VAR.SCI1_OEINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI1_PORT_BIT2_PULDIS.VALUE=0 -DRIVER.SCI.VAR.SCI1_TXINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI1_PORT_BIT2_PDR.VALUE=0 -DRIVER.SCI.VAR.SCI1_PORT_BIT1_PSL.VALUE=1 -DRIVER.SCI.VAR.SCI2_RXINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI3_PORT_BIT1_DIR.VALUE=0 -DRIVER.SCI.VAR.SCI3_BASE_PORT.VALUE=0xFFF7E540 -DRIVER.SCI.VAR.SCI4_PARITYENA.VALUE=0 -DRIVER.SCI.VAR.SCI4_CLKMODE.VALUE=1 -DRIVER.SCI.VAR.SCI2_EVENPARITY.VALUE=0 -DRIVER.SCI.VAR.SCI2_PRESCALE.VALUE=487 -DRIVER.SCI.VAR.SCI2_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG0_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PARITYENA2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_DLENERRLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG4_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI2_BASE_PORT.VALUE=0xFFF7F618 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT17_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT25_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_BITERRENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PARITYENA3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_RXINTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG5_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT25_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT17_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT8_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG1_BUF_CSNR.VALUE=CS_1 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT1_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_CLKMOD.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT11_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT5_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_PHASE0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG5_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI1_PHASE1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT27_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT19_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT3_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG3_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT9_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG6_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PHASE2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT8_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG6_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG5_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI1_PHASE3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT25_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT17_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG2_BUF_CSNR.VALUE=CS_2 -DRIVER.MIBSPI.VAR.MIBSPI4_TG6_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT1_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT11_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_BASE.VALUE=0xFFF7FA00 -DRIVER.MIBSPI.VAR.MIBSPI5_TG0_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT5_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG6_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI3_TG7_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG6_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT17_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT25_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG5_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG1_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_C2TDELAYACTUAL.VALUE=26.667 -DRIVER.MIBSPI.VAR.MIBSPI4_TG7_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT1_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG4_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT11_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG5_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TXINTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TIMEOUTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_RAM_PARITY_ENA.VALUE=0x00000005 -DRIVER.MIBSPI.VAR.MIBSPI3_TG7_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI1_TG1_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI1_TG1_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT27_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT19_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG7_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG0_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_WDELAY0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT3_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG7_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG2_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG0_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI4_WDELAY1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG3_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI4_WDELAY2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PARERRLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT8_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG5_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG0_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_WDELAY3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG0_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT9_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG4_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG3_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT8_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT4_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG7_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG7_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG2_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT26_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT18_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG3_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT2_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG4_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG0_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_ACTUALBAUDRATE0.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI2_T2EDELAYACTUAL.VALUE=0.000 -DRIVER.MIBSPI.VAR.MIBSPI3_TG2_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI3_ACTUALBAUDRATE1.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT0_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG5_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT10_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_ACTUALBAUDRATE2.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI2_TG5_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT3_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI1_TG0_LENGTH.VALUE=8 -DRIVER.MIBSPI.VAR.MIBSPI5_TG0_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI3_TG0_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_ACTUALBAUDRATE3.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI2_TG3_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG2_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT9_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG5_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG7_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_C2EDELAYACTUAL.VALUE=0.000 -DRIVER.MIBSPI.VAR.MIBSPI2_BAUDRATE0.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT8_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG1_BUF_CSNR.VALUE=CS_1 -DRIVER.MIBSPI.VAR.MIBSPI2_BAUDRATE1.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT2_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG5_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG4_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT1_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI2_BAUDRATE2.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI4_TG2_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG1_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG3_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI3_TG0_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI2_BAUDRATE3.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI5_TG6_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_T2CDELAYACTUAL.VALUE=13.333 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT4_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT4_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG2_BUF_CSNR.VALUE=CS_2 -DRIVER.MIBSPI.VAR.MIBSPI2_TG4_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI3_TG7_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI3_TG5_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG1_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT9_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG2_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PARERRENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG1_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI3_OVRNINTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT8_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG6_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI1_TG6_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT26_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT18_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT0_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT10_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT2_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG3_BUF_CSNR.VALUE=CS_3 -DRIVER.MIBSPI.VAR.MIBSPI2_POLARITY0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT17_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT25_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG1_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_POLARITY1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_C2TDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT10_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI4_TG6_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_OVRNINTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT5_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG0_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI2_POLARITY2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG2_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI5_RXINTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT17_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT25_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT4_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG4_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI3_TG5_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_DEYSNCENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_POLARITY3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT11_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT27_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT19_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT0_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG4_BUF_CSNR.VALUE=CS_4 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT3_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG2_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_WAITENA0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_BASE.VALUE=0xFFF7FC00 -DRIVER.MIBSPI.VAR.MIBSPI2_WAITENA1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG6_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT1_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_DEYSNCLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG5_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PARPOL0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT11_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT17_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT25_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_WAITENA2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG4_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT10_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PARPOL1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG7_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI2_WAITENA3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG5_BUF_CSNR.VALUE=CS_5 -DRIVER.MIBSPI.VAR.MIBSPI4_TG4_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PARPOL2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG2_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT9_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG2_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PARPOL3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT3_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT0_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG2_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI5_TG5_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI1_TXINTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG0_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG1_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT5_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PRESCALE0.VALUE=74 -DRIVER.MIBSPI.VAR.MIBSPI1_CLKMOD.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG3_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI1_PRESCALE1.VALUE=74 -DRIVER.MIBSPI.VAR.MIBSPI5_TG5_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TXINTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG2_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG1_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PRESCALE2.VALUE=74 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT9_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TIMEOUTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG7_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_DLENERRENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PRESCALE3.VALUE=74 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT1_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT11_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG3_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PARITYENA0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG5_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT8_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG5_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_ACTUALBAUDRATE0.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI3_PARITYENA1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_ACTUALBAUDRATE1.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT9_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI3_PARITYENA2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_DLENERRLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG4_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI1_TG2_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_ACTUALBAUDRATE2.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT2_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PARITYENA3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_BITERRENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG1_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_ACTUALBAUDRATE3.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI5_TG4_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT4_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG6_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG6_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG4_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG5_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI3_T2EDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT2_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_BITERRLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_SHIFTDIR0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT8_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG3_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_RXINTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_CSDEF.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT4_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI1_TG5_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_SHIFTDIR1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG2_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG1_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT0_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG4_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_SHIFTDIR2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT10_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG7_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG6_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_WDELAY0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT17_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT25_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_T2CDELAYACTUAL.VALUE=13.333 -DRIVER.MIBSPI.VAR.MIBSPI4_SHIFTDIR3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_WDELAY1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG1_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI4_MASTER.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_WDELAY2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT2_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT1_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG2_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG3_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_WDELAY3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG2_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT8_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_ENABLEHIGHZ.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT5_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG7_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG4_BUF_CSNR.VALUE=CS_4 -DRIVER.MIBSPI.VAR.MIBSPI3_TG7_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT10_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG3_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT0_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT10_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI1_TG5_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG4_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT4_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG3_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT27_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT19_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT2_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG5_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT3_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG5_BUF_CSNR.VALUE=CS_5 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT9_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG0_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI2_C2EDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT11_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI4_TG3_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI3_TG2_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT17_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT25_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG5_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG4_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI5_TG1_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT1_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT5_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG6_BUF_CSNR.VALUE=CS_6 -DRIVER.MIBSPI.VAR.MIBSPI4_C2TDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT3_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG2_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_BASE_PORT.VALUE=0xFFF7FC18 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT9_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT0_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG6_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG5_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI2_TG0_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI2_TG0_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT1_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_WAITENA0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG7_BUF_CSNR.VALUE=CS_7 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT11_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG0_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG3_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_WAITENA1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG2_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI5_WAITENA2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG2_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG5_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT2_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_WAITENA3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT9_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT10_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG2_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG1_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT17_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT25_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_C2TDELAYACTUAL.VALUE=26.667 -DRIVER.MIBSPI.VAR.MIBSPI2_T2CDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG4_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT11_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG4_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_RAM_PARITY_ENA.VALUE=0x00000005 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT2_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TXINTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG1_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI1_TG3_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT3_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG2_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT0_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG6_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG1_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_BASE_RAM.VALUE=0xFF080000 -DRIVER.MIBSPI.VAR.MIBSPI1_TG4_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI5_TG2_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT8_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_PARPOL0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG7_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI2_TG0_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_CHARLEN0.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI3_TG2_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PARPOL1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PARERRENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_CHARLEN1.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI2_OVRNINTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG4_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI5_TG5_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG3_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PHASE0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PARPOL2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_CHARLEN2.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI4_PHASE1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PARPOL3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_CHARLEN3.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI5_PARERRLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT8_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI4_PHASE2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG7_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG6_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_OVRNINTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT1_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG0_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT5_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI5_TG1_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG2_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI4_PHASE3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG4_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_DEYSNCENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_RXINTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT2_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG0_BUF_CSNR.VALUE=CS_0 -DRIVER.MIBSPI.VAR.MIBSPI3_T2EDELAYACTUAL.VALUE=0.000 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT8_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG1_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI5_RXINTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT10_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_DEYSNCLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT3_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT3_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG7_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT4_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG5_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG5_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI2_TG5_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG4_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT9_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG1_BUF_CSNR.VALUE=CS_1 -DRIVER.MIBSPI.VAR.MIBSPI4_C2EDELAYACTUAL.VALUE=0.000 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT8_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG0_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT25_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT17_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT1_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT11_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI1_TG2_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG3_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI4_TG4_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT10_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG6_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG5_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI5_BAUDRATE0.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT4_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT1_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG7_BUF_CSNR.VALUE=CS_7 -DRIVER.MIBSPI.VAR.MIBSPI1_TG3_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_BAUDRATE1.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI4_TG3_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI5_TG6_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI5_BAUDRATE2.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT9_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG1_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG7_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG1_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TXINTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_BAUDRATE3.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI4_TG7_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TIMEOUTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG6_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI3_TG6_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI1_DLENERRENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT10_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT2_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG5_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG1_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG0_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT17_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT25_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_WDELAY0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PARITYENA0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG1_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_C2EDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_WDELAY1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PARITYENA1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TIMEOUTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT2_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_WDELAY2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PARITYENA2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_DLENERRLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_MASTER.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG7_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT9_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG7_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_WDELAY3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PARITYENA3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_BITERRENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT3_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT0_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG7_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_POLARITY0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT10_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT0_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG2_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG4_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG4_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_POLARITY1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG5_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI5_POLARITY2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT11_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG7_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_BITERRLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT4_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_SHIFTDIR0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG4_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG3_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT26_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT18_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG6_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_POLARITY3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG7_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT2_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_SHIFTDIR1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_RAM_PARITY_ENA.VALUE=0x00000005 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT11_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG3_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG2_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT9_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG3_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_SHIFTDIR2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_SHIFTDIR3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG7_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT0_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG1_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT11_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG0_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG4_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT2_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG7_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG5_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG0_BUF_CSNR.VALUE=CS_0 -DRIVER.MIBSPI.VAR.MIBSPI5_T2CDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG7_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI5_TG0_LENGTH.VALUE=8 -DRIVER.MIBSPI.VAR.MIBSPI4_TG7_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG2_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG0_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG6_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG5_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG3_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT11_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PRESCALE0.VALUE=74 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT8_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG7_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG1_BUF_CSNR.VALUE=CS_1 -DRIVER.MIBSPI.VAR.MIBSPI5_BASE_RAM.VALUE=0xFF0A0000 -DRIVER.MIBSPI.VAR.MIBSPI4_PRESCALE1.VALUE=74 -DRIVER.MIBSPI.VAR.MIBSPI2_TG0_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI5_CHARLEN0.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT9_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI4_PRESCALE2.VALUE=74 -DRIVER.MIBSPI.VAR.MIBSPI3_TG3_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI3_CSDEF.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT3_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG1_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_CHARLEN1.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI4_TG0_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI4_PRESCALE3.VALUE=74 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT4_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_CHARLEN2.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI3_TG6_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG2_BUF_CSNR.VALUE=CS_2 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT1_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT9_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_CHARLEN3.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT8_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG7_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG2_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_BASE_PORT.VALUE=0xFFF7F818 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT5_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT4_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI2_TG5_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG1_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_RXINTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG7_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT10_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG3_BUF_CSNR.VALUE=CS_3 -DRIVER.MIBSPI.VAR.MIBSPI2_TG0_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_T2CDELAYACTUAL.VALUE=13.333 -DRIVER.MIBSPI.VAR.MIBSPI1_WAITENA0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG2_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI1_WAITENA1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT26_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT18_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT1_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT2_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI2_TG5_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI2_PARPOL0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG4_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_WAITENA2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PARPOL1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG7_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI1_TG0_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_WAITENA3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG4_BUF_CSNR.VALUE=CS_4 -DRIVER.MIBSPI.VAR.MIBSPI4_TG7_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG2_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_CLKMOD.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT5_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT3_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PARPOL2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PHASE0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG6_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI2_PARPOL3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PHASE1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT10_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG3_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT0_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI3_TG4_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PHASE2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT9_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PHASE3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT3_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT9_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG1_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT10_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT0_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TXINTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT4_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG4_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG7_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT2_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG2_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI1_PARERRENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_OVRNINTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT1_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT11_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT2_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG5_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG4_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT9_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT0_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG6_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PARERRLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG6_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_OVRNINTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG0_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI4_TG0_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI2_TG2_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG0_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT11_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG4_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG5_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG2_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG1_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI2_T2EDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG4_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT2_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG4_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_DEYSNCLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_RXINTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG1_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG3_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI2_TG1_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG0_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI3_TG6_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG4_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_C2TDELAYACTUAL.VALUE=26.667 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT4_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_WDELAY0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_WDELAY1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT11_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_WDELAY2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG1_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI3_TG2_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT17_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT25_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG1_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI1_TG5_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_WDELAY3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG7_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG6_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT0_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG7_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_BAUDRATE0.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI1_TG3_BUF_CSNR.VALUE=CS_3 -DRIVER.MIBSPI.VAR.MIBSPI3_TG3_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI3_BAUDRATE1.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT8_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG6_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI4_TG4_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG0_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_BAUDRATE2.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT5_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT17_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT25_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI1_TG1_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG3_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG4_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI3_TG4_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG2_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI3_BAUDRATE3.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI3_TIMEOUTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT10_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_ENABLEHIGHZ.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT3_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG4_BUF_CSNR.VALUE=CS_4 -DRIVER.MIBSPI.VAR.MIBSPI1_PARITYENA0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_C2EDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PARITYENA1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT8_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI5_TG5_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT1_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG7_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TIMEOUTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT5_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI1_PARITYENA2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_DLENERRLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG4_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG3_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG3_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI1_TG7_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI1_PARITYENA3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_T2EDELAYACTUAL.VALUE=0.000 -DRIVER.MIBSPI.VAR.MIBSPI4_ACTUALBAUDRATE0.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI3_TG5_BUF_CSNR.VALUE=CS_5 -DRIVER.MIBSPI.VAR.MIBSPI3_POLARITY0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT8_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG2_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_ACTUALBAUDRATE1.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI3_C2TDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_POLARITY1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG5_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT27_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT19_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT10_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG4_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT3_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_ACTUALBAUDRATE2.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT3_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI3_POLARITY2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT10_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT0_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG3_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_BITERRLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG4_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI4_TG5_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI4_ACTUALBAUDRATE3.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI4_DEYSNCENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_POLARITY3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG7_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT9_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT8_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_C2EDELAYACTUAL.VALUE=0.000 -DRIVER.MIBSPI.VAR.MIBSPI4_TG6_BUF_CSNR.VALUE=CS_6 -DRIVER.MIBSPI.VAR.MIBSPI4_TG0_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_WAITENA0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT5_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG6_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_WAITENA1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT1_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI4_TG7_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_WAITENA2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG1_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI1_TG1_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT5_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG6_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_WAITENA3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT2_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG7_BUF_CSNR.VALUE=CS_7 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT17_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT25_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT4_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT1_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG0_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG2_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG3_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_ENABLEHIGHZ.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT11_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT1_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG7_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI1_T2CDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT9_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG1_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG0_LENGTH.VALUE=8 -DRIVER.MIBSPI.VAR.MIBSPI5_TG6_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT11_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TXINTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT10_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT2_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG1_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG1_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT4_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PRESCALE0.VALUE=74 -DRIVER.MIBSPI.VAR.MIBSPI1_TG6_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PRESCALE1.VALUE=74 -DRIVER.MIBSPI.VAR.MIBSPI1_TG0_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI1_BASE_RAM.VALUE=0xFF0E0000 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT10_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT2_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT8_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG3_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI2_TG1_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PRESCALE2.VALUE=74 -DRIVER.MIBSPI.VAR.MIBSPI1_PARPOL0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_CHARLEN0.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI2_PRESCALE3.VALUE=74 -DRIVER.MIBSPI.VAR.MIBSPI1_PARPOL1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_CHARLEN1.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT0_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG5_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG1_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG4_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_CLKMOD.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG7_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PARPOL2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_CHARLEN2.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI5_TG4_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI1_PARPOL3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_CHARLEN3.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT11_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT17_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT25_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT4_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG2_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG4_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT11_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT1_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_BASE_PORT.VALUE=0xFFF7F418 -DRIVER.MIBSPI.VAR.MIBSPI4_BITERRENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_RAM_PARITY_ENA.VALUE=0x00000005 -DRIVER.MIBSPI.VAR.MIBSPI1_TG3_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT9_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG7_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_T2EDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_SHIFTDIR0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_RXINTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG1_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG5_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT3_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_SHIFTDIR1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG4_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG3_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI5_TG0_BUF_CSNR.VALUE=CS_0 -DRIVER.MIBSPI.VAR.MIBSPI5_SHIFTDIR2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT2_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG5_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_SHIFTDIR3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG6_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI5_TG2_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_CSDEF.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI2_TG4_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT8_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI3_TG5_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG4_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT11_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT8_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT5_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_ACTUALBAUDRATE0.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI1_TG6_BUF_CSNR.VALUE=CS_6 -DRIVER.MIBSPI.VAR.MIBSPI1_TG1_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_ACTUALBAUDRATE1.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT9_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI5_TG2_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI5_MASTER.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT3_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG1_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT9_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_ACTUALBAUDRATE2.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT10_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT0_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG6_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG5_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI2_ACTUALBAUDRATE3.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI1_TG0_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI5_TG6_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT1_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG3_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT9_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG7_BUF_CSNR.VALUE=CS_7 -DRIVER.MIBSPI.VAR.MIBSPI2_TG0_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG0_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_C2EDELAYACTUAL.VALUE=0.000 -DRIVER.MIBSPI.VAR.MIBSPI4_C2EDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT5_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT4_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI3_TG5_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT2_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG6_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PARERRLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_OVRNINTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG7_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_DLENERRENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG6_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT5_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT10_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG5_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_T2CDELAYACTUAL.VALUE=13.333 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT17_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT25_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG1_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG1_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI5_TG1_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT2_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI4_TG4_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI5_TG7_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI2_TG1_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI1_TG2_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT5_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT3_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG3_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG2_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT10_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT2_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT0_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT0_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI5_TG3_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT10_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT8_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG1_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT9_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT3_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG3_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT0_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG7_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_BAUDRATE0.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI4_T2CDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG3_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI1_BAUDRATE1.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT11_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT17_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT25_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT4_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG6_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT11_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT1_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG6_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_BAUDRATE2.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI5_TG0_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG2_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI2_TIMEOUTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT17_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT25_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_BAUDRATE3.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI5_TG4_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT2_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG6_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG5_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG0_BUF_CSNR.VALUE=CS_0 -DRIVER.MIBSPI.VAR.MIBSPI4_BASE_RAM.VALUE=0xFF060000 -DRIVER.MIBSPI.VAR.MIBSPI4_TG6_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG5_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_CHARLEN0.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI3_TIMEOUTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT3_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG0_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT3_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_CHARLEN1.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI4_PARERRENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG4_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT10_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG5_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT11_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG7_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_CHARLEN2.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI3_TG1_BUF_CSNR.VALUE=CS_1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT8_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG0_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_POLARITY0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_CHARLEN3.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI1_TG5_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI1_POLARITY1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_BASE.VALUE=0xFFF7F400 -DRIVER.MIBSPI.VAR.MIBSPI2_TG6_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG2_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_POLARITY2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG0_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI4_TG3_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI4_TG3_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_RXINTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_DEYSNCENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG6_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_POLARITY3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PHASE0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT17_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT25_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT4_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG2_BUF_CSNR.VALUE=CS_2 -DRIVER.MIBSPI.VAR.MIBSPI4_C2TDELAYACTUAL.VALUE=26.667 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT11_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT1_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PHASE1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PHASE2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_DEYSNCLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG7_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT9_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG1_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT9_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI5_PHASE3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG7_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG6_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI1_TG7_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG6_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI5_TG3_BUF_CSNR.VALUE=CS_3 -DRIVER.MIBSPI.VAR.MIBSPI4_TG0_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG1_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG2_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT5_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG0_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG6_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG0_LENGTH.VALUE=8 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT2_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT8_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG4_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI3_TG6_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT5_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG7_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT3_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG1_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT10_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT0_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG7_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG7_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT5_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI3_TXINTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT4_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG3_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG5_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_ENABLE.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT11_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG7_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI5_TG0_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_T2EDELAYACTUAL.VALUE=0.000 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT8_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG2_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT9_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG3_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG4_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI5_TG7_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT3_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI4_TG6_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT0_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT10_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG3_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG2_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT10_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT0_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI5_OVRNINTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_BITERRENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT5_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG4_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG4_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT3_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT2_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG5_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG0_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_T2EDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT1_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI5_TG0_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI4_BITERRLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT11_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI3_SHIFTDIR0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_MASTER.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_SHIFTDIR1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG0_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG3_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG5_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG2_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_SHIFTDIR2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT8_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT1_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG6_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI3_SHIFTDIR3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG6_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG1_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT3_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG4_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT27_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT19_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT3_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG1_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG0_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI5_TG4_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT17_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT25_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT4_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG7_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG6_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG6_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT11_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT1_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG2_BUF_CSNR.VALUE=CS_2 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT8_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG2_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT5_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG3_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG2_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG1_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI5_TG7_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG4_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PRESCALE0.VALUE=74 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT10_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG3_BUF_CSNR.VALUE=CS_3 -DRIVER.MIBSPI.VAR.MIBSPI5_PRESCALE1.VALUE=74 -DRIVER.MIBSPI.VAR.MIBSPI2_BASE.VALUE=0xFFF7F600 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT25_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT17_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG1_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PRESCALE2.VALUE=74 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT1_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG4_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT11_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG3_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PRESCALE3.VALUE=74 -DRIVER.MIBSPI.VAR.MIBSPI4_TG2_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI4_DLENERRENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_RAM_PARITY_ENA.VALUE=0x00000005 -DRIVER.MIBSPI.VAR.MIBSPI5_PARITYENA0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG7_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG4_BUF_CSNR.VALUE=CS_4 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT3_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PARITYENA1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG1_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI2_C2TDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PARITYENA2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_DLENERRLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_CSDEF.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI4_BASE_PORT.VALUE=0xFFF7FA18 -DRIVER.MIBSPI.VAR.MIBSPI3_TG4_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI2_TG3_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG3_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI5_PARITYENA3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT8_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT5_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG5_BUF_CSNR.VALUE=CS_5 -DRIVER.MIBSPI.VAR.MIBSPI3_WAITENA0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT9_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG4_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_WAITENA1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG3_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_WAITENA2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT8_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT4_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG7_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_WAITENA3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG6_BUF_CSNR.VALUE=CS_6 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT5_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG6_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG2_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT2_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_T2EDELAYACTUAL.VALUE=0.000 -DRIVER.MIBSPI.VAR.MIBSPI1_TG3_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT9_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT0_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG3_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT10_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG6_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI3_TG0_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI2_TG1_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TXINTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TIMEOUTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG1_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG0_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_CLKMOD.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_ENABLEHIGHZ.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT9_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PHASE0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_C2EDELAYACTUAL.VALUE=0.000 -DRIVER.MIBSPI.VAR.MIBSPI5_TG7_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI3_PHASE1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT26_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT18_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT17_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT25_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT4_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI4_TG5_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT2_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG5_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PHASE2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TIMEOUTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT11_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT1_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI4_TG0_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PHASE3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PARERRENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG3_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI4_T2CDELAYACTUAL.VALUE=13.333 -DRIVER.MIBSPI.VAR.MIBSPI3_TG5_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT4_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT4_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG6_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG0_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT2_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI4_TG3_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PARERRLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG1_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG1_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT3_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG4_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG2_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT0_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT10_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT2_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG7_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG6_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_T2EDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT8_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_RXINTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG7_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_DEYSNCLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT5_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG1_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI3_TG3_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG4_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI2_TG3_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG2_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI5_WDELAY0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT0_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT10_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT3_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_ENABLEHIGHZ.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_WDELAY1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG2_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT25_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT17_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG5_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI5_TG3_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_WDELAY2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT1_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT11_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG0_LENGTH.VALUE=8 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT17_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT25_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG2_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI5_TG2_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_WDELAY3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG4_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG3_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT11_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_BAUDRATE0.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI1_TG5_BUF_CSNR.VALUE=CS_5 -DRIVER.MIBSPI.VAR.MIBSPI4_BAUDRATE1.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI3_BASE.VALUE=0xFFF7F800 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT27_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT19_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG6_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_BAUDRATE2.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT3_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG0_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_MASTER.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG5_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_BAUDRATE3.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT8_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG5_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI3_TG4_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI2_TG6_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT8_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG1_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG0_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG6_BUF_CSNR.VALUE=CS_6 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT5_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG0_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG4_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI3_C2EDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG7_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI2_TG2_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG2_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT25_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT17_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG6_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG5_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI4_TG5_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_OVRNINTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT11_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT25_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT17_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG3_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_C2TDELAYACTUAL.VALUE=26.667 -DRIVER.MIBSPI.VAR.MIBSPI4_POLARITY0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT1_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG7_BUF_CSNR.VALUE=CS_7 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT11_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG0_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG3_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_C2TDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_POLARITY1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG6_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_OVRNINTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT9_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG0_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI4_POLARITY2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT9_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI2_TG0_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_BITERRLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_SHIFTDIR0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT10_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG6_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI5_DEYSNCENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG6_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI4_POLARITY3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_SHIFTDIR1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG1_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG1_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG3_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT4_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_SHIFTDIR2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG6_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI1_SHIFTDIR3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT26_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT18_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG0_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT2_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT17_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT25_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT8_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG2_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG2_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT0_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT10_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG4_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_T2CDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT5_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT4_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG2_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI3_TG0_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT2_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI1_CSDEF.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI5_TG7_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI5_TG7_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TXINTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT3_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG3_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG2_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_ACTUALBAUDRATE0.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT9_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT8_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG6_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PRESCALE0.VALUE=74 -DRIVER.MIBSPI.VAR.MIBSPI2_TG3_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT5_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_ACTUALBAUDRATE1.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI3_PRESCALE1.VALUE=74 -DRIVER.MIBSPI.VAR.MIBSPI3_BASE_RAM.VALUE=0xFF0C0000 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT3_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT0_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_ACTUALBAUDRATE2.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI5_PARPOL0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG1_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT10_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG3_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PRESCALE2.VALUE=74 -DRIVER.MIBSPI.VAR.MIBSPI3_CHARLEN0.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT0_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI5_ACTUALBAUDRATE3.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI5_PARPOL1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PRESCALE3.VALUE=74 -DRIVER.MIBSPI.VAR.MIBSPI3_CHARLEN1.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI3_DLENERRENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT26_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT18_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PARPOL2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG5_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PARITYENA0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT2_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG5_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG0_BUF_CSNR.VALUE=CS_0 -DRIVER.MIBSPI.VAR.MIBSPI3_CHARLEN2.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT3_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_PARPOL3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PARITYENA1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_CHARLEN3.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI1_TG1_TRGSRC.VALUE=TRG_DISABLED -DRIVER.SPI.VAR.SPI5_PORT_BIT26_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT18_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT4_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI3_PHASE2.VALUE=0 -DRIVER.SPI.VAR.SPI2_TIMEOUTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT1_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI5_PORT_BIT25_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT17_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI3_PHASE3.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT11_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI4_T2CDELAYACTUAL.VALUE=13.333 -DRIVER.SPI.VAR.SPI4_POLARITY0.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT1_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT4_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI4_POLARITY1.VALUE=0 -DRIVER.SPI.VAR.SPI2_T2EDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT2_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI4_PORT_BIT9_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI4_POLARITY2.VALUE=0 -DRIVER.SPI.VAR.SPI2_BITERRLVL.VALUE=0 -DRIVER.SPI.VAR.SPI1_SHIFTDIR0.VALUE=0 -DRIVER.SPI.VAR.SPI1_RXINTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT10_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI5_DEYSNCENA.VALUE=0 -DRIVER.SPI.VAR.SPI4_POLARITY3.VALUE=0 -DRIVER.SPI.VAR.SPI1_SHIFTDIR1.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT5_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT10_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT2_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT4_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI1_SHIFTDIR2.VALUE=0 -DRIVER.SPI.VAR.SPI1_SHIFTDIR3.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT2_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT10_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI1_PORT_BIT8_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT0_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT0_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT25_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT17_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT11_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI3_PORT_BIT4_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT11_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT25_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT17_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT9_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI3_PRESCALE0.VALUE=74 -DRIVER.SPI.VAR.SPI3_PRESCALE1.VALUE=74 -DRIVER.SPI.VAR.SPI1_C2EDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT27_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT19_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT0_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI3_PRESCALE2.VALUE=74 -DRIVER.SPI.VAR.SPI1_MASTER.VALUE=1 -DRIVER.SPI.VAR.SPI3_PRESCALE3.VALUE=74 -DRIVER.SPI.VAR.SPI3_PORT_BIT2_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI3_C2TDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI2_BASE_PORT.VALUE=0xFFF7F618 -DRIVER.SPI.VAR.SPI5_BITERRENA.VALUE=0 -DRIVER.SPI.VAR.SPI4_OVRNINTENA.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT9_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT25_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT17_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI5_C2TDELAYACTUAL.VALUE=26.667 -DRIVER.SPI.VAR.SPI4_PORT_BIT10_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT8_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI4_WAITENA0.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT11_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT5_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI4_WAITENA1.VALUE=0 -DRIVER.SPI.VAR.SPI5_OVRNINTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI4_WAITENA2.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT3_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT9_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI1_PORT_BIT9_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT5_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI4_WAITENA3.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT2_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT1_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI1_T2CDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT26_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT18_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT5_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI3_TXINTENA.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT10_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI1_BASE_RAM.VALUE=0xFF0E0000 -DRIVER.SPI.VAR.SPI5_PORT_BIT1_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT5_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI1_PORT_BIT2_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI1_CHARLEN0.VALUE=16 -DRIVER.SPI.VAR.SPI1_CHARLEN1.VALUE=16 -DRIVER.SPI.VAR.SPI4_PORT_BIT8_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT3_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT5_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI1_CHARLEN2.VALUE=16 -DRIVER.SPI.VAR.SPI1_CHARLEN3.VALUE=16 -DRIVER.SPI.VAR.SPI5_PORT_BIT3_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI3_PORT_BIT10_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT0_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI2_PARERRLVL.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT8_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI3_DLENERRENA.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT26_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT18_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT9_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI4_PARITYENA0.VALUE=0 -DRIVER.SPI.VAR.SPI4_ENABLEHIGHZ.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT3_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI5_T2EDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI4_PARITYENA1.VALUE=0 -DRIVER.SPI.VAR.SPI4_PARITYENA2.VALUE=0 -DRIVER.SPI.VAR.SPI4_DLENERRLVL.VALUE=0 -DRIVER.SPI.VAR.SPI4_RXINTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT4_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT25_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT17_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT11_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI5_PORT_BIT3_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI4_PARITYENA3.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT2_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT1_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI3_CLKMOD.VALUE=1 -DRIVER.SPI.VAR.SPI1_PHASE0.VALUE=0 -DRIVER.SPI.VAR.SPI1_PHASE1.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT27_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT19_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT0_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI1_PHASE2.VALUE=0 -DRIVER.SPI.VAR.SPI1_PHASE3.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT25_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT17_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT11_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI2_BAUDRATE0.VALUE=1000.000 -DRIVER.SPI.VAR.SPI1_PORT_BIT8_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI2_BAUDRATE1.VALUE=1000.000 -DRIVER.SPI.VAR.SPI5_PORT_BIT2_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI2_BAUDRATE2.VALUE=1000.000 -DRIVER.SPI.VAR.SPI2_BAUDRATE3.VALUE=1000.000 -DRIVER.SPI.VAR.SPI5_WDELAY0.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT4_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT10_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT25_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT17_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI1_C2TDELAYACTUAL.VALUE=26.667 -DRIVER.SPI.VAR.SPI1_ENABLEHIGHZ.VALUE=0 -DRIVER.SPI.VAR.SPI5_WDELAY1.VALUE=0 -DRIVER.SPI.VAR.SPI4_C2EDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI5_WDELAY2.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT11_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT9_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI1_TIMEOUTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI5_WDELAY3.VALUE=0 -DRIVER.SPI.VAR.SPI5_PARERRENA.VALUE=0 -DRIVER.SPI.VAR.SPI4_RAM_PARITY_ENA.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT5_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT27_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT19_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT0_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT11_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI2_POLARITY0.VALUE=0 -DRIVER.SPI.VAR.SPI2_POLARITY1.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT5_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI2_POLARITY2.VALUE=0 -DRIVER.SPI.VAR.SPI3_DEYSNCENA.VALUE=0 -DRIVER.SPI.VAR.SPI2_POLARITY3.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT11_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT3_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT1_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI5_DEYSNCLVL.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT8_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI4_PORT_BIT10_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT26_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT18_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI2_T2EDELAYACTUAL.VALUE=0.000 -DRIVER.SPI.VAR.SPI1_PORT_BIT9_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI4_T2CDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT3_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT10_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT0_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT3_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI4_PORT_BIT9_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT5_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI3_C2EDELAYACTUAL.VALUE=0.000 -DRIVER.SPI.VAR.SPI1_PRESCALE0.VALUE=74 -DRIVER.SPI.VAR.SPI4_BASE_RAM.VALUE=0xFF060000 -DRIVER.SPI.VAR.SPI1_PRESCALE1.VALUE=74 -DRIVER.SPI.VAR.SPI5_PORT_BIT4_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI4_CHARLEN0.VALUE=16 -DRIVER.SPI.VAR.SPI2_PORT_BIT1_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI1_PRESCALE2.VALUE=74 -DRIVER.SPI.VAR.SPI4_PORT_BIT3_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI4_CHARLEN1.VALUE=16 -DRIVER.SPI.VAR.SPI1_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI1_PRESCALE3.VALUE=74 -DRIVER.SPI.VAR.SPI5_PORT_BIT1_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI5_T2CDELAYACTUAL.VALUE=13.333 -DRIVER.SPI.VAR.SPI4_CHARLEN2.VALUE=16 -DRIVER.SPI.VAR.SPI1_PORT_BIT8_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI4_CHARLEN3.VALUE=16 -DRIVER.SPI.VAR.SPI1_BASE.VALUE=0xFFF7F400 -DRIVER.SPI.VAR.SPI3_BITERRENA.VALUE=0 -DRIVER.SPI.VAR.SPI3_OVRNINTENA.VALUE=0 -DRIVER.SPI.VAR.SPI3_RXINTENA.VALUE=0 -DRIVER.SPI.VAR.SPI5_ACTUALBAUDRATE0.VALUE=1000.000 -DRIVER.SPI.VAR.SPI3_PORT_BIT10_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT4_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT2_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT25_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT17_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI5_ACTUALBAUDRATE1.VALUE=1000.000 -DRIVER.SPI.VAR.SPI5_PORT_BIT2_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI5_ACTUALBAUDRATE2.VALUE=1000.000 -DRIVER.SPI.VAR.SPI5_PARPOL0.VALUE=0 -DRIVER.SPI.VAR.SPI5_BITERRLVL.VALUE=0 -DRIVER.SPI.VAR.SPI4_SHIFTDIR0.VALUE=0 -DRIVER.SPI.VAR.SPI4_OVRNINTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT8_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI5_ACTUALBAUDRATE3.VALUE=1000.000 -DRIVER.SPI.VAR.SPI5_PARPOL1.VALUE=0 -DRIVER.SPI.VAR.SPI4_SHIFTDIR1.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT27_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT19_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT0_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI5_PARPOL2.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT0_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI4_SHIFTDIR2.VALUE=0 -DRIVER.SPI.VAR.SPI5_PARPOL3.VALUE=0 -DRIVER.SPI.VAR.SPI4_SHIFTDIR3.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT4_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT11_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT1_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT8_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT25_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT17_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT11_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI3_TXINTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT2_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT9_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI1_CLKMOD.VALUE=1 -DRIVER.SPI.VAR.SPI5_TIMEOUTENA.VALUE=0 -DRIVER.SPI.VAR.SPI2_DLENERRENA.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT11_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT5_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI3_PARITYENA0.VALUE=0 -DRIVER.SPI.VAR.SPI3_PARITYENA1.VALUE=0 -DRIVER.SPI.VAR.SPI1_T2EDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT3_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI5_BASE_PORT.VALUE=0xFFF7FC18 -DRIVER.SPI.VAR.SPI3_PORT_BIT9_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI3_PORT_BIT9_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI3_PARITYENA2.VALUE=0 -DRIVER.SPI.VAR.SPI3_DLENERRLVL.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT0_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI3_PARITYENA3.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT1_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI4_WDELAY0.VALUE=0 -DRIVER.SPI.VAR.SPI4_WDELAY1.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT5_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI4_WDELAY2.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT2_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT4_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI4_WDELAY3.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT3_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT10_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI1_T2CDELAYACTUAL.VALUE=13.333 -DRIVER.SPI.VAR.SPI5_PORT_BIT5_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI4_MASTER.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT2_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI5_PORT_BIT8_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT3_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI3_ACTUALBAUDRATE0.VALUE=1000.000 -DRIVER.SPI.VAR.SPI2_PORT_BIT0_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI3_ACTUALBAUDRATE1.VALUE=1000.000 -DRIVER.SPI.VAR.SPI2_BASE.VALUE=0xFFF7F600 -DRIVER.SPI.VAR.SPI4_PORT_BIT10_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT8_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT0_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI3_ACTUALBAUDRATE2.VALUE=1000.000 -DRIVER.SPI.VAR.SPI3_ACTUALBAUDRATE3.VALUE=1000.000 -DRIVER.SPI.VAR.SPI3_PARERRENA.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT3_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI2_C2TDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT4_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI5_PARERRLVL.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT1_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT8_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT5_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI1_DEYSNCENA.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT2_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT1_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI3_WAITENA0.VALUE=0 -DRIVER.SPI.VAR.SPI3_WAITENA1.VALUE=0 -DRIVER.SPI.VAR.SPI3_WAITENA2.VALUE=0 -DRIVER.SPI.VAR.SPI3_DEYSNCLVL.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT3_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI3_WAITENA3.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT26_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT18_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT11_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT8_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT10_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI3_PORT_BIT10_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI2_TXINTENA.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT4_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI5_BAUDRATE0.VALUE=1000.000 -DRIVER.SPI.VAR.SPI2_PORT_BIT1_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI2_C2TDELAYACTUAL.VALUE=26.667 -DRIVER.SPI.VAR.SPI5_BAUDRATE1.VALUE=1000.000 -DRIVER.SPI.VAR.SPI5_BAUDRATE2.VALUE=1000.000 -DRIVER.SPI.VAR.SPI4_PORT_BIT11_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI4_PARPOL0.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT9_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI5_BAUDRATE3.VALUE=1000.000 -DRIVER.SPI.VAR.SPI5_RAM_PARITY_ENA.VALUE=0 -DRIVER.SPI.VAR.SPI4_PARPOL1.VALUE=0 -DRIVER.SPI.VAR.SPI4_PARPOL2.VALUE=0 -DRIVER.SPI.VAR.SPI4_PARPOL3.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT5_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT2_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT3_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI2_OVRNINTENA.VALUE=0 -DRIVER.SPI.VAR.SPI1_BITERRENA.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT3_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI5_POLARITY0.VALUE=0 -DRIVER.SPI.VAR.SPI4_PHASE0.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT0_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI5_POLARITY1.VALUE=0 -DRIVER.SPI.VAR.SPI4_T2EDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI4_PHASE1.VALUE=0 -DRIVER.SPI.VAR.SPI5_POLARITY2.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT8_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI4_PHASE2.VALUE=0 -DRIVER.SPI.VAR.SPI3_BITERRLVL.VALUE=0 -DRIVER.SPI.VAR.SPI3_OVRNINTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI3_RXINTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI2_SHIFTDIR0.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT5_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI5_PORT_BIT26_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT18_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI5_POLARITY3.VALUE=0 -DRIVER.SPI.VAR.SPI4_PHASE3.VALUE=0 -DRIVER.SPI.VAR.SPI2_SHIFTDIR1.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT9_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI3_T2EDELAYACTUAL.VALUE=0.000 -DRIVER.SPI.VAR.SPI2_SHIFTDIR2.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT8_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI1_ACTUALBAUDRATE0.VALUE=1000.000 -DRIVER.SPI.VAR.SPI2_SHIFTDIR3.VALUE=0 -DRIVER.SPI.VAR.SPI1_ACTUALBAUDRATE1.VALUE=1000.000 -DRIVER.SPI.VAR.SPI4_PORT_BIT10_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT0_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT3_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI1_ACTUALBAUDRATE2.VALUE=1000.000 -DRIVER.SPI.VAR.SPI5_PORT_BIT11_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI1_ACTUALBAUDRATE3.VALUE=1000.000 -DRIVER.SPI.VAR.SPI5_PORT_BIT9_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT5_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI4_C2EDELAYACTUAL.VALUE=0.000 -DRIVER.SPI.VAR.SPI2_PORT_BIT2_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI3_BASE.VALUE=0xFFF7F800 -DRIVER.SPI.VAR.SPI3_PORT_BIT1_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI3_PORT_BIT8_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI4_PRESCALE0.VALUE=74 -DRIVER.SPI.VAR.SPI3_PORT_BIT8_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT4_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI3_WDELAY0.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT25_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT17_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI4_PRESCALE1.VALUE=74 -DRIVER.SPI.VAR.SPI3_C2EDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI3_WDELAY1.VALUE=0 -DRIVER.SPI.VAR.SPI4_PRESCALE2.VALUE=74 -DRIVER.SPI.VAR.SPI3_WDELAY2.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT3_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI4_PRESCALE3.VALUE=74 -DRIVER.SPI.VAR.SPI4_TIMEOUTENA.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI3_WDELAY3.VALUE=0 -DRIVER.SPI.VAR.SPI1_DLENERRENA.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT4_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT10_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT2_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI3_ENABLEHIGHZ.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT1_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI2_PARITYENA0.VALUE=0 -DRIVER.SPI.VAR.SPI5_C2TDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI2_PARITYENA1.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT8_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI5_TIMEOUTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI3_BASE_PORT.VALUE=0xFFF7F818 -DRIVER.SPI.VAR.SPI2_PORT_BIT10_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI2_PARITYENA2.VALUE=0 -DRIVER.SPI.VAR.SPI2_DLENERRLVL.VALUE=0 -DRIVER.SPI.VAR.SPI2_MASTER.VALUE=1 -DRIVER.SPI.VAR.SPI2_PARITYENA3.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT27_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT19_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT0_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT11_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT11_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI4_PORT_BIT1_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI1_RAM_PARITY_ENA.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT3_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI3_T2CDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI5_TXINTENA.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT3_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT9_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI3_BASE_RAM.VALUE=0xFF0C0000 -DRIVER.SPI.VAR.SPI3_CHARLEN0.VALUE=16 -DRIVER.SPI.VAR.SPI3_CHARLEN1.VALUE=16 -DRIVER.SPI.VAR.SPI1_PARERRENA.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT10_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT5_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT11_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI3_CHARLEN2.VALUE=16 -DRIVER.SPI.VAR.SPI2_PORT_BIT2_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI3_CHARLEN3.VALUE=16 -DRIVER.SPI.VAR.SPI5_PORT_BIT9_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT9_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI4_PORT_BIT0_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI3_PARERRLVL.VALUE=0 -DRIVER.SPI.VAR.SPI2_RXINTENA.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT9_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT2_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI3_PARPOL0.VALUE=0 -DRIVER.SPI.VAR.SPI1_DEYSNCLVL.VALUE=0 -DRIVER.SPI.VAR.SPI3_PARPOL1.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT8_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT10_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI3_PARPOL2.VALUE=0 -DRIVER.SPI.VAR.SPI2_T2CDELAYACTUAL.VALUE=13.333 -DRIVER.SPI.VAR.SPI4_BASE.VALUE=0xFFF7FA00 -DRIVER.SPI.VAR.SPI3_PARPOL3.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT2_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI5_PORT_BIT4_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT0_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI4_CLKMOD.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT5_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI3_BAUDRATE0.VALUE=1000.000 -DRIVER.SPI.VAR.SPI2_PHASE0.VALUE=0 -DRIVER.SPI.VAR.SPI3_BAUDRATE1.VALUE=1000.000 -DRIVER.SPI.VAR.SPI2_PHASE1.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT10_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT8_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT0_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI3_BAUDRATE2.VALUE=1000.000 -DRIVER.SPI.VAR.SPI2_PHASE2.VALUE=0 -DRIVER.SPI.VAR.SPI2_TXINTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI3_BAUDRATE3.VALUE=1000.000 -DRIVER.SPI.VAR.SPI2_PORT_BIT10_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI2_PHASE3.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT3_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT3_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT0_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT25_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI5_PORT_BIT17_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI4_PORT_BIT1_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT11_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI1_OVRNINTENA.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT1_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI3_POLARITY0.VALUE=0 -DRIVER.SPI.VAR.SPI3_POLARITY1.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT3_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI3_POLARITY2.VALUE=0 -DRIVER.SPI.VAR.SPI2_OVRNINTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT0_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI1_BITERRLVL.VALUE=0 -DRIVER.SPI.VAR.SPI4_DEYSNCENA.VALUE=0 -DRIVER.SPI.VAR.SPI3_POLARITY3.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT8_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT11_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI2_WDELAY0.VALUE=0 -DRIVER.SPI.VAR.SPI2_WDELAY1.VALUE=0 -DRIVER.SPI.VAR.SPI2_WDELAY2.VALUE=0 -DRIVER.SPI.VAR.SPI2_WDELAY3.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT1_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT10_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI3_C2TDELAYACTUAL.VALUE=26.667 -DRIVER.SPI.VAR.SPI5_PORT_BIT11_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT9_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT11_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT11_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI2_PRESCALE0.VALUE=74 -DRIVER.SPI.VAR.SPI2_PRESCALE1.VALUE=74 -DRIVER.SPI.VAR.SPI4_PORT_BIT2_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT8_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI2_PRESCALE2.VALUE=74 -DRIVER.SPI.VAR.SPI3_TIMEOUTENA.VALUE=0 -DRIVER.SPI.VAR.SPI2_PRESCALE3.VALUE=74 -DRIVER.SPI.VAR.SPI1_PORT_BIT8_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT0_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI1_PARITYENA0.VALUE=0 -DRIVER.SPI.VAR.SPI1_C2TDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI1_PARITYENA1.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT8_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI4_PORT_BIT4_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI4_TIMEOUTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT1_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI1_PARITYENA2.VALUE=0 -DRIVER.SPI.VAR.SPI1_DLENERRLVL.VALUE=0 -DRIVER.SPI.VAR.SPI1_BASE_PORT.VALUE=0xFFF7F418 -DRIVER.SPI.VAR.SPI5_RXINTENA.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT4_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI4_BITERRENA.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI1_PARITYENA3.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT9_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI4_T2EDELAYACTUAL.VALUE=0.000 -DRIVER.SPI.VAR.SPI2_PORT_BIT8_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI2_WAITENA0.VALUE=0 -DRIVER.SPI.VAR.SPI5_BASE.VALUE=0xFFF7FC00 -DRIVER.SPI.VAR.SPI2_WAITENA1.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT10_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI5_SHIFTDIR0.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT3_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI2_WAITENA2.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT10_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI5_SHIFTDIR1.VALUE=0 -DRIVER.SPI.VAR.SPI2_WAITENA3.VALUE=0 -DRIVER.SPI.VAR.SPI5_C2EDELAYACTUAL.VALUE=0.000 -DRIVER.SPI.VAR.SPI5_SHIFTDIR2.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT2_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI5_SHIFTDIR3.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT1_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI1_TXINTENA.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT8_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT4_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT1_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT26_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI5_PORT_BIT18_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI5_TXINTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT3_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT9_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI2_PARPOL0.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT0_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT9_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI2_PARPOL1.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT10_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT2_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT1_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI2_PARPOL2.VALUE=0 -DRIVER.SPI.VAR.SPI2_PARPOL3.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT5_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT2_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI1_PARERRLVL.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT2_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI2_CLKMOD.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT10_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI3_T2EDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT11_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI2_RXINTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT11_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI2_RAM_PARITY_ENA.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT3_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT11_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT0_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT8_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT9_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI1_BAUDRATE0.VALUE=1000.000 -DRIVER.SPI.VAR.SPI1_BAUDRATE1.VALUE=1000.000 -DRIVER.SPI.VAR.SPI4_PORT_BIT4_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT8_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI1_PORT_BIT1_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI1_BAUDRATE2.VALUE=1000.000 -DRIVER.SPI.VAR.SPI3_PORT_BIT4_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT25_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT17_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI1_BAUDRATE3.VALUE=1000.000 -DRIVER.SPI.VAR.SPI5_PORT_BIT11_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT2_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI1_WDELAY0.VALUE=0 -DRIVER.SPI.VAR.SPI2_C2EDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI1_WDELAY1.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT9_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI5_MASTER.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT10_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT3_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI1_WDELAY2.VALUE=0 -DRIVER.SPI.VAR.SPI4_PARERRENA.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT10_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI1_WDELAY3.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT9_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT8_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI1_C2EDELAYACTUAL.VALUE=0.000 -DRIVER.SPI.VAR.SPI1_POLARITY0.VALUE=0 -DRIVER.SPI.VAR.SPI4_C2TDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI1_POLARITY1.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT4_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI1_PORT_BIT25_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI1_PORT_BIT17_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI1_POLARITY2.VALUE=0 -DRIVER.SPI.VAR.SPI1_OVRNINTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI5_DLENERRENA.VALUE=0 -DRIVER.SPI.VAR.SPI2_DEYSNCENA.VALUE=0 -DRIVER.SPI.VAR.SPI1_POLARITY3.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT10_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI5_WAITENA0.VALUE=0 -DRIVER.SPI.VAR.SPI5_ENABLEHIGHZ.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT4_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI3_T2CDELAYACTUAL.VALUE=13.333 -DRIVER.SPI.VAR.SPI1_PORT_BIT1_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI5_WAITENA1.VALUE=0 -DRIVER.SPI.VAR.SPI5_WAITENA2.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT2_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI4_DEYSNCLVL.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT9_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI5_WAITENA3.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT9_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT5_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI4_ACTUALBAUDRATE0.VALUE=1000.000 -DRIVER.SPI.VAR.SPI1_PORT_BIT10_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT2_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI4_ACTUALBAUDRATE1.VALUE=1000.000 -DRIVER.SPI.VAR.SPI2_T2CDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT27_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI5_PORT_BIT19_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI5_PORT_BIT0_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI4_PORT_BIT5_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI4_ACTUALBAUDRATE2.VALUE=1000.000 -DRIVER.SPI.VAR.SPI1_PORT_BIT2_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT2_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI4_ACTUALBAUDRATE3.VALUE=1000.000 -DRIVER.SPI.VAR.SPI4_TXINTENA.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT3_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT3_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT0_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT0_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI2_BASE_RAM.VALUE=0xFF080000 -DRIVER.SPI.VAR.SPI2_CHARLEN0.VALUE=16 -DRIVER.SPI.VAR.SPI1_PORT_BIT11_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT4_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT11_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI2_CHARLEN1.VALUE=16 -DRIVER.SPI.VAR.SPI2_TIMEOUTENA.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT9_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI2_CHARLEN2.VALUE=16 -DRIVER.SPI.VAR.SPI2_ENABLEHIGHZ.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT11_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI2_CHARLEN3.VALUE=16 -DRIVER.SPI.VAR.SPI3_PORT_BIT0_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI3_TIMEOUTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI2_BITERRENA.VALUE=0 -DRIVER.SPI.VAR.SPI1_RXINTENA.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT11_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT5_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT2_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT10_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI5_RXINTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI4_BITERRLVL.VALUE=0 -DRIVER.SPI.VAR.SPI3_SHIFTDIR0.VALUE=0 -DRIVER.SPI.VAR.SPI1_PARPOL0.VALUE=0 -DRIVER.SPI.VAR.SPI3_SHIFTDIR1.VALUE=0 -DRIVER.SPI.VAR.SPI1_PARPOL1.VALUE=0 -DRIVER.SPI.VAR.SPI5_PHASE0.VALUE=0 -DRIVER.SPI.VAR.SPI4_C2TDELAYACTUAL.VALUE=26.667 -DRIVER.SPI.VAR.SPI3_SHIFTDIR2.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT8_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT11_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI1_PARPOL2.VALUE=0 -DRIVER.SPI.VAR.SPI5_PHASE1.VALUE=0 -DRIVER.SPI.VAR.SPI3_SHIFTDIR3.VALUE=0 -DRIVER.SPI.VAR.SPI1_PARPOL3.VALUE=0 -DRIVER.SPI.VAR.SPI5_PHASE2.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT9_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI1_PORT_BIT3_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT27_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT19_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI5_PHASE3.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT4_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT1_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT8_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT5_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI1_TXINTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI5_PRESCALE0.VALUE=74 -DRIVER.SPI.VAR.SPI1_PORT_BIT10_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI5_C2EDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI5_PRESCALE1.VALUE=74 -DRIVER.SPI.VAR.SPI5_PRESCALE2.VALUE=74 -DRIVER.SPI.VAR.SPI3_PORT_BIT5_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI3_PORT_BIT1_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI5_PRESCALE3.VALUE=74 -DRIVER.SPI.VAR.SPI3_PORT_BIT9_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI5_T2EDELAYACTUAL.VALUE=0.000 -DRIVER.SPI.VAR.SPI3_PORT_BIT8_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI2_ACTUALBAUDRATE0.VALUE=1000.000 -DRIVER.SPI.VAR.SPI1_PORT_BIT3_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI2_ACTUALBAUDRATE1.VALUE=1000.000 -DRIVER.SPI.VAR.SPI4_PORT_BIT3_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI4_BASE_PORT.VALUE=0xFFF7FA18 -DRIVER.SPI.VAR.SPI2_PORT_BIT10_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI2_ACTUALBAUDRATE2.VALUE=1000.000 -DRIVER.SPI.VAR.SPI1_PORT_BIT0_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI5_OVRNINTENA.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT2_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI2_ACTUALBAUDRATE3.VALUE=1000.000 -DRIVER.SPI.VAR.SPI2_PORT_BIT9_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT3_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT1_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI3_MASTER.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT4_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT4_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT5_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT1_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT2_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI5_T2CDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT9_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT0_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT11_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI5_BASE_RAM.VALUE=0xFF0A0000 -DRIVER.SPI.VAR.SPI5_CHARLEN0.VALUE=16 -DRIVER.SPI.VAR.SPI3_PORT_BIT10_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI3_PORT_BIT2_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI5_CHARLEN1.VALUE=16 -DRIVER.SPI.VAR.SPI2_PARERRENA.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT4_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI5_CHARLEN2.VALUE=16 -DRIVER.SPI.VAR.SPI1_PORT_BIT4_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI5_CHARLEN3.VALUE=16 -DRIVER.SPI.VAR.SPI5_PORT_BIT25_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT17_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT11_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI4_PARERRLVL.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT11_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI4_DLENERRENA.VALUE=0 -DRIVER.SPI.VAR.SPI4_RXINTENA.VALUE=0 -DRIVER.SPI.VAR.SPI3_RAM_PARITY_ENA.VALUE=0 -DRIVER.SPI.VAR.SPI5_PARITYENA0.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT0_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI1_WAITENA0.VALUE=0 -DRIVER.SPI.VAR.SPI5_PARITYENA1.VALUE=0 -DRIVER.SPI.VAR.SPI1_WAITENA1.VALUE=0 -DRIVER.SPI.VAR.SPI5_PARITYENA2.VALUE=0 -DRIVER.SPI.VAR.SPI5_DLENERRLVL.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT8_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI2_DEYSNCLVL.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT5_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI1_WAITENA2.VALUE=0 -DRIVER.SPI.VAR.SPI5_PARITYENA3.VALUE=0 -DRIVER.SPI.VAR.SPI1_WAITENA3.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT3_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT1_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT8_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI2_PORT_BIT9_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI4_BAUDRATE0.VALUE=1000.000 -DRIVER.SPI.VAR.SPI1_T2EDELAYACTUAL.VALUE=0.000 -DRIVER.SPI.VAR.SPI4_BAUDRATE1.VALUE=1000.000 -DRIVER.SPI.VAR.SPI4_BAUDRATE2.VALUE=1000.000 -DRIVER.SPI.VAR.SPI4_TXINTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT3_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT10_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT5_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI4_BAUDRATE3.VALUE=1000.000 -DRIVER.SPI.VAR.SPI2_PORT_BIT2_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI1_TIMEOUTENA.VALUE=0 -DRIVER.SPI.VAR.SPI5_CLKMOD.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT8_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT9_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI3_PHASE0.VALUE=0 -DRIVER.SPI.VAR.SPI2_C2EDELAYACTUAL.VALUE=0.000 -DRIVER.SPI.VAR.SPI1_PORT_BIT5_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI3_PHASE1.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_51_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_51_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_43_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_43_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_35_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_35_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_27_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_27_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_19_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_19_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_51_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_43_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_35_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_27_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_19_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_21_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_21_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_13_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_13_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_59_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_9_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_30_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_22_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_14_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_4_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_61_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_53_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_45_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_37_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_29_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_6_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_RAM_PARITY_ENA.VALUE=0x00000005 -DRIVER.CAN.VAR.CAN_1_MESSAGE_59_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_64_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_56_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_48_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_SYNC.VALUE=1 -DRIVER.CAN.VAR.CAN_4_MESSAGE_62_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_54_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_46_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_38_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_SHIFT.VALUE=0 -DRIVER.CAN.VAR.CAN_4_AUTO_BUS_ON.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_4_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_4_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_40_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_32_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_24_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_16_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_57_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_49_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_64_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_56_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_48_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_31_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_23_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_15_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_51_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_43_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_35_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_27_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_19_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_BAUDRATE.VALUE=500 -DRIVER.CAN.VAR.CAN_2_PORT_RX_PDR.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_63_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_55_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_47_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_39_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_30_ID.VALUE=30 -DRIVER.CAN.VAR.CAN_2_MESSAGE_22_ID.VALUE=22 -DRIVER.CAN.VAR.CAN_2_MESSAGE_14_ID.VALUE=14 -DRIVER.CAN.VAR.CAN_2_MESSAGE_9_ID.VALUE=9 -DRIVER.CAN.VAR.CAN_1_MESSAGE_57_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_49_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_60_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_52_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_44_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_36_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_28_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_RAMBASE.VALUE=0xFF1C0000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_30_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_22_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_14_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_51_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_43_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_35_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_27_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_19_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_9_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_PORT_RX_PULDIS.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_57_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_49_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_4_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_2_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_64_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_56_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_48_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_NOMINAL_BIT_RATE.VALUE=500.000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_51_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_43_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_35_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_27_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_19_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_1_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_57_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_51_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_49_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_43_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_35_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_27_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_19_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_10_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_5_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_64_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_64_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_56_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_56_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_48_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_48_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_40_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_32_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_24_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_16_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_9_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_60_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_52_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_50_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_44_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_42_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_36_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_34_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_28_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_26_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_18_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_60_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_58_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_52_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_44_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_36_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_28_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_PIN_MODE.VALUE=1 -DRIVER.CAN.VAR.CAN_2_PHASE_SEG.VALUE=4 -DRIVER.CAN.VAR.CAN_1_MESSAGE_30_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_22_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_20_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_14_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_12_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_31_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_23_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_15_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_7_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_51_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_43_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_35_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_31_ID.VALUE=31 -DRIVER.CAN.VAR.CAN_2_MESSAGE_27_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_23_ID.VALUE=23 -DRIVER.CAN.VAR.CAN_2_MESSAGE_19_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_15_ID.VALUE=15 -DRIVER.CAN.VAR.CAN_4_MESSAGE_1_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_NOMINAL_BIT_TIME.VALUE=15 -DRIVER.CAN.VAR.CAN_4_MESSAGE_60_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_60_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_52_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_52_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_51_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_44_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_44_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_43_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_36_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_36_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_35_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_28_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_28_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_27_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_19_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_9_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_30_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_30_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_22_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_22_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_21_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_14_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_14_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_13_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_AUTO_BUS_ON.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_60_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_52_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_44_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_36_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_28_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_63_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_55_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_47_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_39_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_31_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_23_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_15_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_10_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_5_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_PORT_TX_PULDIS.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_30_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_22_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_14_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_51_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_43_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_35_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_27_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_19_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_7_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_21_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_13_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_57_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_49_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_BASE.VALUE=0xFFF7DC00 -DRIVER.CAN.VAR.CAN_4_MESSAGE_9_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_40_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_32_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_24_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_16_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_10_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_10_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_5_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_5_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_6_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_40_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_32_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_24_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_16_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_11_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_1_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_8_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_3_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_3_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_10_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_4_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_21_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_13_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_64_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_56_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_48_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_40_ID.VALUE=40 -DRIVER.CAN.VAR.CAN_2_MESSAGE_32_ID.VALUE=32 -DRIVER.CAN.VAR.CAN_2_MESSAGE_24_ID.VALUE=24 -DRIVER.CAN.VAR.CAN_2_MESSAGE_16_ID.VALUE=16 -DRIVER.CAN.VAR.CAN_1_MESSAGE_1_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_61_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_53_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_45_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_37_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_29_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_31_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_23_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_15_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_1_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_1_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_21_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_13_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_6_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_6_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_IDENTIFIER_MODE.VALUE=0x40000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_57_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_49_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_11_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_57_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_49_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_40_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_32_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_24_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_16_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_3_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_60_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_52_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_44_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_36_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_28_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_11_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_6_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_PORT_RX_PULL.VALUE=1 -DRIVER.CAN.VAR.CAN_4_MESSAGE_40_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_32_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_24_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_16_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_57_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_57_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_49_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_49_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_6_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_PORT_TX_DIN.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_10_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_61_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_53_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_45_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_37_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_29_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_59_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_51_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_43_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_35_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_27_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_19_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_1_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_31_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_23_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_15_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_40_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_32_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_24_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_16_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_8_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_PORT_RX_PSL.VALUE=1 -DRIVER.CAN.VAR.CAN_2_MESSAGE_41_ID.VALUE=41 -DRIVER.CAN.VAR.CAN_2_MESSAGE_33_ID.VALUE=33 -DRIVER.CAN.VAR.CAN_2_MESSAGE_25_ID.VALUE=25 -DRIVER.CAN.VAR.CAN_2_MESSAGE_17_ID.VALUE=17 -DRIVER.CAN.VAR.CAN_1_MESSAGE_10_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_2_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_BRP_FREQ.VALUE=7.500 -DRIVER.CAN.VAR.CAN_4_MESSAGE_61_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_61_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_53_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_53_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_45_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_45_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_37_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_37_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_29_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_29_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_6_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_21_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_13_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_PORT_TX_DIR.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_31_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_31_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_23_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_23_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_15_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_15_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_3_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_21_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_13_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_5_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_11_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_6_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_4_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_PROP_SEG.VALUE=6 -DRIVER.CAN.VAR.CAN_3_MESSAGE_1_ID.VALUE=1 -DRIVER.CAN.VAR.CAN_2_MESSAGE_64_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_56_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_48_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_1_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_SYNC.VALUE=1 -DRIVER.CAN.VAR.CAN_3_MESSAGE_58_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_11_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_11_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_10_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_6_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_6_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_3_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_2_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_60_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_52_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_44_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_36_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_28_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_57_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_49_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_NOMINAL_BIT_RATE.VALUE=500.000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_64_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_56_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_48_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_64_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_56_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_48_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_57_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_50_ID.VALUE=50 -DRIVER.CAN.VAR.CAN_2_MESSAGE_49_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_42_ID.VALUE=42 -DRIVER.CAN.VAR.CAN_2_MESSAGE_34_ID.VALUE=34 -DRIVER.CAN.VAR.CAN_2_MESSAGE_26_ID.VALUE=26 -DRIVER.CAN.VAR.CAN_2_MESSAGE_18_ID.VALUE=18 -DRIVER.CAN.VAR.CAN_1_MESSAGE_50_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_42_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_34_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_26_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_18_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_62_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_54_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_46_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_38_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_PROPAGATION_DELAY.VALUE=700 -DRIVER.CAN.VAR.CAN_1_MESSAGE_40_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_32_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_24_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_16_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_21_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_13_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_2_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_2_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_3_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_58_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_BAUDRATE.VALUE=500 -DRIVER.CAN.VAR.CAN_3_MESSAGE_58_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_50_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_42_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_34_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_26_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_18_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_60_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_57_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_52_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_49_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_44_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_36_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_28_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_10_ID.VALUE=10 -DRIVER.CAN.VAR.CAN_4_MESSAGE_9_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_61_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_53_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_50_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_45_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_42_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_37_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_34_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_29_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_26_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_18_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_2_ID.VALUE=2 -DRIVER.CAN.VAR.CAN_1_MESSAGE_6_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_NOMINAL_BIT_TIME.VALUE=15 -DRIVER.CAN.VAR.CAN_2_MESSAGE_20_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_12_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_7_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_3_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_58_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_58_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_10_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_SAMPLE_POINT.VALUE=73.333 -DRIVER.CAN.VAR.CAN_4_MESSAGE_62_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_54_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_46_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_38_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_8_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_7_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_61_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_53_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_45_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_37_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_29_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_21_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_20_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_13_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_12_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_40_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_32_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_24_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_16_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_5_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_4_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_41_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_33_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_25_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_17_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_9_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_51_ID.VALUE=51 -DRIVER.CAN.VAR.CAN_2_MESSAGE_43_ID.VALUE=43 -DRIVER.CAN.VAR.CAN_2_MESSAGE_35_ID.VALUE=35 -DRIVER.CAN.VAR.CAN_2_MESSAGE_27_ID.VALUE=27 -DRIVER.CAN.VAR.CAN_2_MESSAGE_20_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_19_ID.VALUE=19 -DRIVER.CAN.VAR.CAN_2_MESSAGE_12_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_3_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_11_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_3_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_62_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_62_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_54_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_54_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_46_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_46_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_38_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_38_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_40_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_40_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_32_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_32_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_24_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_24_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_16_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_16_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_64_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_56_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_48_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_40_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_32_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_24_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_20_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_16_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_12_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_7_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_50_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_42_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_34_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_26_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_18_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_20_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_12_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_11_ID.VALUE=11 -DRIVER.CAN.VAR.CAN_3_MESSAGE_3_ID.VALUE=3 -DRIVER.CAN.VAR.CAN_2_PORT_RX_DOUT.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_2_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_59_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_BASE.VALUE=0xFFF7DE00 -DRIVER.CAN.VAR.CAN_1_RAMBASE.VALUE=0xFF1E0000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_10_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_20_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_20_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_12_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_12_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_7_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_7_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_PORT_RX_PULL.VALUE=2 -DRIVER.CAN.VAR.CAN_4_MESSAGE_63_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_55_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_47_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_41_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_39_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_33_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_25_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_17_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_3_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_1_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_9_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_IDENTIFIER_MODE.VALUE=0x40000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_41_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_33_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_25_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_17_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_11_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_60_ID.VALUE=60 -DRIVER.CAN.VAR.CAN_2_MESSAGE_58_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_52_ID.VALUE=52 -DRIVER.CAN.VAR.CAN_2_MESSAGE_44_ID.VALUE=44 -DRIVER.CAN.VAR.CAN_2_MESSAGE_36_ID.VALUE=36 -DRIVER.CAN.VAR.CAN_2_MESSAGE_28_ID.VALUE=28 -DRIVER.CAN.VAR.CAN_4_MESSAGE_63_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_55_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_47_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_39_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_41_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_33_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_25_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_17_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_PORT_RX_DIN.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_3_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_3_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_41_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_33_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_25_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_17_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_7_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_59_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_20_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_12_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_9_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_11_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_6_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_11_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_4_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_20_ID.VALUE=20 -DRIVER.CAN.VAR.CAN_4_MESSAGE_12_ID.VALUE=12 -DRIVER.CAN.VAR.CAN_3_MESSAGE_62_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_54_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_46_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_38_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_4_ID.VALUE=4 -DRIVER.CAN.VAR.CAN_1_MESSAGE_63_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_55_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_47_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_39_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_21_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_13_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_8_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_PORT_RX_DIR.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_59_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_59_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_AUTO_RETRANSMISSION.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_PORT_TX_FUN.VALUE=1 -DRIVER.CAN.VAR.CAN_1_MESSAGE_59_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_63_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_55_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_47_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_39_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_62_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_54_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_46_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_38_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_2_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_41_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_33_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_25_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_17_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_PORT_TX_DOUT.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_50_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_42_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_34_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_26_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_18_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_AUTO_BUS_ON_TR.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_63_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_55_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_47_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_39_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_61_ID.VALUE=61 -DRIVER.CAN.VAR.CAN_2_MESSAGE_53_ID.VALUE=53 -DRIVER.CAN.VAR.CAN_2_MESSAGE_45_ID.VALUE=45 -DRIVER.CAN.VAR.CAN_2_MESSAGE_37_ID.VALUE=37 -DRIVER.CAN.VAR.CAN_2_MESSAGE_29_ID.VALUE=29 -DRIVER.CAN.VAR.CAN_1_MESSAGE_20_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_12_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_4_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_1_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_63_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_63_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_55_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_55_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_47_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_47_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_39_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_39_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_PORT_TX_PULL.VALUE=2 -DRIVER.CAN.VAR.CAN_1_MESSAGE_41_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_41_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_33_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_33_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_25_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_25_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_17_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_17_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_10_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_62_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_54_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_46_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_38_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_2_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_21_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_13_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_8_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_NOMINAL_BIT_RATE.VALUE=500.000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_21_ID.VALUE=21 -DRIVER.CAN.VAR.CAN_4_MESSAGE_13_ID.VALUE=13 -DRIVER.CAN.VAR.CAN_3_MESSAGE_5_ID.VALUE=5 -DRIVER.CAN.VAR.CAN_2_MESSAGE_41_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_33_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_25_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_17_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_8_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_3_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_BRPE_FREQ.VALUE=7.500 -DRIVER.CAN.VAR.CAN_2_MESSAGE_59_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_21_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_21_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_13_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_13_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_8_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_8_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_PORT_RX_DIN.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_40_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_32_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_24_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_16_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_4_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_PROP_SEG.VALUE=6 -DRIVER.CAN.VAR.CAN_3_MESSAGE_8_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_58_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_31_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_23_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_15_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_RAM_PARITY_ENA.VALUE=0x00000005 -DRIVER.CAN.VAR.CAN_1_MESSAGE_10_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_1_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_41_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_33_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_25_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_17_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_5_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_PORT_TX_PDR.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_62_ID.VALUE=62 -DRIVER.CAN.VAR.CAN_2_MESSAGE_59_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_54_ID.VALUE=54 -DRIVER.CAN.VAR.CAN_2_MESSAGE_46_ID.VALUE=46 -DRIVER.CAN.VAR.CAN_2_MESSAGE_38_ID.VALUE=38 -DRIVER.CAN.VAR.CAN_1_MESSAGE_11_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_64_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_56_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_48_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_NOMINAL_BIT_TIME.VALUE=15 -DRIVER.CAN.VAR.CAN_1_MESSAGE_50_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_42_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_34_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_26_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_18_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_4_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_4_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_PORT_RX_DIR.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_64_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_56_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_48_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_1_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_1_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_59_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_58_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_61_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_59_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_53_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_45_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_37_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_29_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_TQ.VALUE=133.333 -DRIVER.CAN.VAR.CAN_4_MESSAGE_30_ID.VALUE=30 -DRIVER.CAN.VAR.CAN_4_MESSAGE_22_ID.VALUE=22 -DRIVER.CAN.VAR.CAN_4_MESSAGE_14_ID.VALUE=14 -DRIVER.CAN.VAR.CAN_4_MESSAGE_2_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_63_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_55_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_47_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_39_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_11_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_6_ID.VALUE=6 -DRIVER.CAN.VAR.CAN_2_MESSAGE_30_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_22_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_14_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_9_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_59_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_64_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_56_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_48_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_62_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_54_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_46_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_38_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_61_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_53_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_45_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_37_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_29_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_3_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_50_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_42_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_34_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_26_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_18_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_51_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_43_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_35_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_27_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_19_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_63_ID.VALUE=63 -DRIVER.CAN.VAR.CAN_2_MESSAGE_55_ID.VALUE=55 -DRIVER.CAN.VAR.CAN_2_MESSAGE_47_ID.VALUE=47 -DRIVER.CAN.VAR.CAN_2_MESSAGE_39_ID.VALUE=39 -DRIVER.CAN.VAR.CAN_1_MESSAGE_21_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_13_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_5_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_10_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_2_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_64_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_64_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_56_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_56_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_48_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_48_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_64_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_56_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_48_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_50_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_50_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_42_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_42_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_34_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_34_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_26_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_26_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_18_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_18_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_51_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_43_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_35_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_31_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_27_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_23_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_19_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_15_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_41_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_33_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_30_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_25_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_22_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_17_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_14_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_9_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_TQ.VALUE=133.333 -DRIVER.CAN.VAR.CAN_1_MESSAGE_7_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_BRPE.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_31_ID.VALUE=31 -DRIVER.CAN.VAR.CAN_4_MESSAGE_23_ID.VALUE=23 -DRIVER.CAN.VAR.CAN_4_MESSAGE_15_ID.VALUE=15 -DRIVER.CAN.VAR.CAN_3_MESSAGE_7_ID.VALUE=7 -DRIVER.CAN.VAR.CAN_2_MESSAGE_4_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_BASE.VALUE=0xFFF7E000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_59_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_30_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_30_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_22_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_22_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_14_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_14_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_9_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_9_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_61_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_53_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_45_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_37_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_29_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_50_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_42_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_34_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_26_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_18_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_5_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_10_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_1_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_PORT_TX_PULDIS.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_64_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_56_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_48_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_20_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_12_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_2_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_64_ID.VALUE=64 -DRIVER.CAN.VAR.CAN_2_MESSAGE_62_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_56_ID.VALUE=56 -DRIVER.CAN.VAR.CAN_2_MESSAGE_54_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_48_ID.VALUE=48 -DRIVER.CAN.VAR.CAN_2_MESSAGE_46_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_38_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_PORT_TX_DOUT.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_57_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_49_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_51_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_43_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_35_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_27_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_19_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_PORT_RX_FUN.VALUE=1 -DRIVER.CAN.VAR.CAN_4_MESSAGE_5_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_5_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_64_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_56_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_48_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_10_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_10_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_2_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_2_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_58_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_8_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_7_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_21_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_20_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_13_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_12_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_TQ.VALUE=133.333 -DRIVER.CAN.VAR.CAN_1_MESSAGE_60_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_52_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_44_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_36_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_28_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_5_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_4_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_62_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_54_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_46_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_40_ID.VALUE=40 -DRIVER.CAN.VAR.CAN_4_MESSAGE_38_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_32_ID.VALUE=32 -DRIVER.CAN.VAR.CAN_4_MESSAGE_24_ID.VALUE=24 -DRIVER.CAN.VAR.CAN_4_MESSAGE_16_ID.VALUE=16 -DRIVER.CAN.VAR.CAN_3_MESSAGE_64_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_56_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_48_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_8_ID.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_40_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_32_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_24_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_16_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_10_ID.VALUE=10 -DRIVER.CAN.VAR.CAN_2_MESSAGE_31_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_23_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_15_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_61_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_53_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_45_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_37_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_29_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_63_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_57_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_55_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_49_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_47_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_39_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_30_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_22_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_14_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_9_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_3_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_51_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_43_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_41_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_35_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_33_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_27_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_25_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_19_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_17_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_60_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_52_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_44_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_36_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_28_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_7_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_40_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_32_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_24_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_16_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_PORT_TX_PSL.VALUE=1 -DRIVER.CAN.VAR.CAN_2_MESSAGE_57_ID.VALUE=57 -DRIVER.CAN.VAR.CAN_2_MESSAGE_49_ID.VALUE=49 -DRIVER.CAN.VAR.CAN_1_MESSAGE_30_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_22_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_14_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_4_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_6_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_11_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_3_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_SAMPLE_POINT_REFERENCE.VALUE=75 -DRIVER.CAN.VAR.CAN_1_PROPAGATION_DELAY.VALUE=700 -DRIVER.CAN.VAR.CAN_4_MESSAGE_64_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_57_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_57_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_56_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_49_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_49_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_48_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_51_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_51_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_50_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_43_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_43_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_42_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_35_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_35_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_34_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_27_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_27_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_26_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_19_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_19_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_18_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_3_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_TQ.VALUE=133.333 -DRIVER.CAN.VAR.CAN_3_MESSAGE_1_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_31_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_23_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_15_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_PORT_RX_PDR.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_41_ID.VALUE=41 -DRIVER.CAN.VAR.CAN_4_MESSAGE_33_ID.VALUE=33 -DRIVER.CAN.VAR.CAN_4_MESSAGE_25_ID.VALUE=25 -DRIVER.CAN.VAR.CAN_4_MESSAGE_17_ID.VALUE=17 -DRIVER.CAN.VAR.CAN_3_MESSAGE_9_ID.VALUE=9 -DRIVER.CAN.VAR.CAN_2_MESSAGE_10_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_10_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_5_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_1_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_11_ID.VALUE=11 -DRIVER.CAN.VAR.CAN_1_NOMINAL_BIT_TIME.VALUE=15 -DRIVER.CAN.VAR.CAN_3_MESSAGE_61_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_53_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_45_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_37_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_29_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_31_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_31_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_23_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_23_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_15_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_15_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_PORT_RX_FUN.VALUE=1 -DRIVER.CAN.VAR.CAN_4_MESSAGE_40_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_32_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_24_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_16_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_6_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_57_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_49_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_11_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_8_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_ENABLE.VALUE=1 -DRIVER.CAN.VAR.CAN_2_MESSAGE_59_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_10_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_3_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_PIN_MODE.VALUE=1 -DRIVER.CAN.VAR.CAN_4_MESSAGE_10_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_1_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_58_ID.VALUE=58 -DRIVER.CAN.VAR.CAN_4_MESSAGE_58_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_SAMPLE_POINT_REFERENCE.VALUE=75 -DRIVER.CAN.VAR.CAN_1_MESSAGE_60_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_52_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_44_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_36_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_28_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_6_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_6_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_11_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_11_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_50_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_42_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_34_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_26_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_18_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_3_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_3_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_51_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_43_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_35_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_27_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_19_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_61_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_53_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_45_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_37_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_29_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_PORT_RX_PULDIS.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_62_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_54_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_46_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_38_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_21_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_13_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_50_ID.VALUE=50 -DRIVER.CAN.VAR.CAN_4_MESSAGE_42_ID.VALUE=42 -DRIVER.CAN.VAR.CAN_4_MESSAGE_34_ID.VALUE=34 -DRIVER.CAN.VAR.CAN_4_MESSAGE_26_ID.VALUE=26 -DRIVER.CAN.VAR.CAN_4_MESSAGE_18_ID.VALUE=18 -DRIVER.CAN.VAR.CAN_3_MESSAGE_57_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_49_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_59_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_20_ID.VALUE=20 -DRIVER.CAN.VAR.CAN_1_MESSAGE_12_ID.VALUE=12 -DRIVER.CAN.VAR.CAN_2_MESSAGE_40_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_32_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_24_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_16_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_61_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_53_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_45_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_37_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_29_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_AUTO_BUS_ON.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_31_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_23_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_15_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_58_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_63_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_55_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_47_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_39_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_1_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_2_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_60_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_52_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_44_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_36_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_28_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_61_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_59_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_53_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_45_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_37_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_29_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_59_ID.VALUE=59 -DRIVER.CAN.VAR.CAN_1_PORT_RX_PDR.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_61_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_53_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_45_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_37_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_31_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_29_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_23_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_15_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_7_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_20_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_12_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_SAMPLE_POINT_REFERENCE.VALUE=75 -DRIVER.CAN.VAR.CAN_1_MESSAGE_4_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_58_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_58_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_50_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_42_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_34_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_26_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_18_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_60_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_60_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_52_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_52_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_44_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_44_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_36_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_36_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_28_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_28_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_8_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_SHIFT.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_64_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_56_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_50_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_48_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_42_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_40_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_34_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_32_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_30_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_26_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_24_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_22_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_18_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_16_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_14_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_9_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_BRPE.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MASK.VALUE=0x1FFFFFFF -DRIVER.CAN.VAR.CAN_4_MESSAGE_51_ID.VALUE=51 -DRIVER.CAN.VAR.CAN_4_MESSAGE_43_ID.VALUE=43 -DRIVER.CAN.VAR.CAN_4_MESSAGE_35_ID.VALUE=35 -DRIVER.CAN.VAR.CAN_4_MESSAGE_27_ID.VALUE=27 -DRIVER.CAN.VAR.CAN_4_MESSAGE_19_ID.VALUE=19 -DRIVER.CAN.VAR.CAN_3_MESSAGE_61_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_53_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_45_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_37_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_29_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_11_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_6_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_21_ID.VALUE=21 -DRIVER.CAN.VAR.CAN_1_MESSAGE_13_ID.VALUE=13 -DRIVER.CAN.VAR.CAN_1_MESSAGE_9_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_BASE.VALUE=0xFFF7E200 -DRIVER.CAN.VAR.CAN_2_MESSAGE_40_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_40_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_32_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_32_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_31_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_24_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_24_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_23_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_16_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_16_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_15_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_8_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_51_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_43_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_35_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_27_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_19_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_7_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_57_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_50_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_49_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_42_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_34_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_26_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_20_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_18_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_12_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_21_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_13_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_4_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_2_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_31_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_23_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_15_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_6_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_59_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_SAMPLE_POINT_REFERENCE.VALUE=75 -DRIVER.CAN.VAR.CAN_1_MESSAGE_61_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_53_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_45_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_37_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_29_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_BRPE_FREQ.VALUE=7.500 -DRIVER.CAN.VAR.CAN_1_BRP_FREQ.VALUE=7.500 -DRIVER.CAN.VAR.CAN_4_PORT_TX_DIN.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_50_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_42_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_34_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_26_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_18_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_7_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_7_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_20_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_20_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_12_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_12_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_8_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_20_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_12_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_4_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_4_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_20_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_12_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_9_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_30_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_22_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_14_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_4_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_2_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_6_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_PORT_RX_PSL.VALUE=1 -DRIVER.CAN.VAR.CAN_4_MESSAGE_60_ID.VALUE=60 -DRIVER.CAN.VAR.CAN_4_MESSAGE_52_ID.VALUE=52 -DRIVER.CAN.VAR.CAN_4_MESSAGE_44_ID.VALUE=44 -DRIVER.CAN.VAR.CAN_4_MESSAGE_36_ID.VALUE=36 -DRIVER.CAN.VAR.CAN_4_MESSAGE_31_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_28_ID.VALUE=28 -DRIVER.CAN.VAR.CAN_4_MESSAGE_23_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_15_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_58_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_3_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_30_ID.VALUE=30 -DRIVER.CAN.VAR.CAN_1_MESSAGE_22_ID.VALUE=22 -DRIVER.CAN.VAR.CAN_1_MESSAGE_14_ID.VALUE=14 -DRIVER.CAN.VAR.CAN_2_MESSAGE_41_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_33_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_25_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_17_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_PORT_TX_DIR.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_8_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_31_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_23_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_15_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_5_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_59_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_50_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_42_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_34_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_26_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_18_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_4_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_63_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_61_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_55_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_53_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_47_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_45_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_39_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_37_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_29_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_62_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_54_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_46_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_38_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_1_ID.VALUE=1 -DRIVER.CAN.VAR.CAN_1_MESSAGE_40_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_32_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_24_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_16_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_8_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_21_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_13_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_5_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_59_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_59_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_20_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_12_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_5_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_61_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_61_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_53_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_53_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_45_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_45_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_37_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_37_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_29_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_29_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_10_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_2_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_BAUDRATE.VALUE=500 -DRIVER.CAN.VAR.CAN_2_MESSAGE_41_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_41_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_33_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_33_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_25_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_25_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_17_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_17_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_63_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_55_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_47_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_39_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_61_ID.VALUE=61 -DRIVER.CAN.VAR.CAN_4_MESSAGE_53_ID.VALUE=53 -DRIVER.CAN.VAR.CAN_4_MESSAGE_45_ID.VALUE=45 -DRIVER.CAN.VAR.CAN_4_MESSAGE_37_ID.VALUE=37 -DRIVER.CAN.VAR.CAN_4_MESSAGE_29_ID.VALUE=29 -DRIVER.CAN.VAR.CAN_2_MESSAGE_20_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_12_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_7_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_58_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_31_ID.VALUE=31 -DRIVER.CAN.VAR.CAN_1_MESSAGE_23_ID.VALUE=23 -DRIVER.CAN.VAR.CAN_1_MESSAGE_15_ID.VALUE=15 -DRIVER.CAN.VAR.CAN_3_MESSAGE_1_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_31_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_23_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_15_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_5_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_41_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_41_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_33_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_33_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_25_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_25_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_17_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_17_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_PORT_TX_DIN.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_8_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_6_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_6_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_21_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_13_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_11_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_11_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_5_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_3_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_3_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_3_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_2_ID.VALUE=2 -DRIVER.CAN.VAR.CAN_3_MESSAGE_58_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_PORT_RX_PSL.VALUE=1 -DRIVER.CAN.VAR.CAN_4_AUTO_BUS_ON_TIME.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_62_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_54_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_46_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_38_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_8_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_8_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_5_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_AUTO_RETRANSMISSION.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_21_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_21_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_20_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_13_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_13_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_12_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_SAMPLE_POINT.VALUE=73.333 -DRIVER.CAN.VAR.CAN_1_PORT_TX_DIR.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_5_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_5_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_2_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_62_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_54_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_46_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_38_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_PIN_MODE.VALUE=1 -DRIVER.CAN.VAR.CAN_3_MESSAGE_1_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_RAM_PARITY_ENA.VALUE=0x00000005 -DRIVER.CAN.VAR.CAN_3_PHASE_SEG.VALUE=4 -DRIVER.CAN.VAR.CAN_1_MESSAGE_63_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_55_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_47_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_40_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_39_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_32_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_24_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_16_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_62_ID.VALUE=62 -DRIVER.CAN.VAR.CAN_4_MESSAGE_54_ID.VALUE=54 -DRIVER.CAN.VAR.CAN_4_MESSAGE_46_ID.VALUE=46 -DRIVER.CAN.VAR.CAN_4_MESSAGE_38_ID.VALUE=38 -DRIVER.CAN.VAR.CAN_3_MESSAGE_59_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_60_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_52_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_44_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_36_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_28_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_40_ID.VALUE=40 -DRIVER.CAN.VAR.CAN_1_MESSAGE_32_ID.VALUE=32 -DRIVER.CAN.VAR.CAN_1_MESSAGE_24_ID.VALUE=24 -DRIVER.CAN.VAR.CAN_1_MESSAGE_16_ID.VALUE=16 -DRIVER.CAN.VAR.CAN_2_MESSAGE_50_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_42_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_34_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_26_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_18_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_1_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_1_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_2_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_62_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_54_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_46_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_38_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_64_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_56_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_48_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_59_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_62_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_54_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_46_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_40_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_38_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_32_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_24_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_16_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_63_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_60_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_55_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_52_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_47_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_44_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_39_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_36_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_28_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_3_ID.VALUE=3 -DRIVER.CAN.VAR.CAN_3_PORT_RX_DOUT.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_8_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_41_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_33_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_30_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_25_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_22_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_17_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_14_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_9_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_30_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_22_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_14_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_6_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_20_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_12_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_2_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_PORT_RX_PULL.VALUE=2 -DRIVER.CAN.VAR.CAN_1_MESSAGE_62_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_62_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_54_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_54_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_46_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_46_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_38_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_38_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_31_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_23_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_15_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_7_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_BRPE.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_51_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_50_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_43_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_42_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_35_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_34_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_27_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_26_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_19_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_18_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_10_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_5_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MASK.VALUE=0x1FFFFFFF -DRIVER.CAN.VAR.CAN_4_MESSAGE_63_ID.VALUE=63 -DRIVER.CAN.VAR.CAN_4_MESSAGE_55_ID.VALUE=55 -DRIVER.CAN.VAR.CAN_4_MESSAGE_47_ID.VALUE=47 -DRIVER.CAN.VAR.CAN_4_MESSAGE_39_ID.VALUE=39 -DRIVER.CAN.VAR.CAN_4_MESSAGE_5_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_30_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_22_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_14_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_21_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_13_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_8_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_41_ID.VALUE=41 -DRIVER.CAN.VAR.CAN_1_MESSAGE_33_ID.VALUE=33 -DRIVER.CAN.VAR.CAN_1_MESSAGE_25_ID.VALUE=25 -DRIVER.CAN.VAR.CAN_1_MESSAGE_17_ID.VALUE=17 -DRIVER.CAN.VAR.CAN_1_MESSAGE_2_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_10_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_2_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_2_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_50_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_50_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_42_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_42_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_34_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_34_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_26_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_26_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_18_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_18_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_60_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_52_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_44_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_36_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_28_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_9_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_30_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_22_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_14_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_60_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_59_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_52_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_44_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_36_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_28_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_30_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_22_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_14_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_6_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_4_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_4_ID.VALUE=4 -DRIVER.CAN.VAR.CAN_1_MESSAGE_1_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_1_ID.VALUE=1 -DRIVER.CAN.VAR.CAN_1_MESSAGE_63_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_55_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_47_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_39_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_PORT_TX_FUN.VALUE=1 -DRIVER.CAN.VAR.CAN_4_MESSAGE_9_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_9_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_30_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_30_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_22_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_22_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_14_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_14_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_6_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_6_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_10_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_PORT_TX_PULDIS.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_61_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_53_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_45_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_37_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_31_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_29_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_23_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_15_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_2_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_7_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_64_ID.VALUE=64 -DRIVER.CAN.VAR.CAN_4_MESSAGE_56_ID.VALUE=56 -DRIVER.CAN.VAR.CAN_4_MESSAGE_48_ID.VALUE=48 -DRIVER.CAN.VAR.CAN_1_MESSAGE_50_ID.VALUE=50 -DRIVER.CAN.VAR.CAN_1_MESSAGE_42_ID.VALUE=42 -DRIVER.CAN.VAR.CAN_1_MESSAGE_34_ID.VALUE=34 -DRIVER.CAN.VAR.CAN_1_MESSAGE_26_ID.VALUE=26 -DRIVER.CAN.VAR.CAN_1_MESSAGE_18_ID.VALUE=18 -DRIVER.CAN.VAR.CAN_4_BRP_FREQ.VALUE=7.500 -DRIVER.CAN.VAR.CAN_2_MESSAGE_51_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_43_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_35_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_27_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_19_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_PORT_TX_PULL.VALUE=2 -DRIVER.CAN.VAR.CAN_4_MESSAGE_10_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_10_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_2_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_2_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_BRP.VALUE=9 -DRIVER.CAN.VAR.CAN_4_MESSAGE_31_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_23_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_15_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_7_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_PROP_SEG.VALUE=6 -DRIVER.CAN.VAR.CAN_2_MESSAGE_21_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_13_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_10_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_8_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_5_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_63_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_55_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_47_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_39_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_64_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_56_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_48_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_5_ID.VALUE=5 -DRIVER.CAN.VAR.CAN_3_MESSAGE_10_ID.VALUE=10 -DRIVER.CAN.VAR.CAN_2_MESSAGE_57_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_49_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_50_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_42_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_34_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_26_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_18_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_2_ID.VALUE=2 -DRIVER.CAN.VAR.CAN_1_AUTO_BUS_ON_TR.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_31_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_23_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_15_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_7_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_PORT_RX_DIN.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_63_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_63_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_55_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_55_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_47_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_47_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_39_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_39_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_11_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_64_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_56_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_48_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_3_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_51_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_43_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_35_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_27_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_19_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_58_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_PORT_TX_PDR.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_57_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_57_ID.VALUE=57 -DRIVER.CAN.VAR.CAN_4_MESSAGE_49_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_49_ID.VALUE=49 -DRIVER.CAN.VAR.CAN_2_MESSAGE_30_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_22_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_14_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_9_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_51_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_51_ID.VALUE=51 -DRIVER.CAN.VAR.CAN_1_MESSAGE_43_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_43_ID.VALUE=43 -DRIVER.CAN.VAR.CAN_1_MESSAGE_35_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_35_ID.VALUE=35 -DRIVER.CAN.VAR.CAN_1_MESSAGE_27_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_27_ID.VALUE=27 -DRIVER.CAN.VAR.CAN_1_MESSAGE_19_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_19_ID.VALUE=19 -DRIVER.CAN.VAR.CAN_4_MESSAGE_11_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_3_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_AUTO_BUS_ON_TIME.VALUE=0 -DRIVER.CAN.VAR.CAN_3_PORT_RX_DIR.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_51_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_51_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_43_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_43_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_35_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_35_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_27_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_27_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_19_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_19_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_PORT_TX_FUN.VALUE=1 -DRIVER.CAN.VAR.CAN_1_MESSAGE_58_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_1_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_31_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_23_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_15_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_60_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_52_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_44_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_36_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_28_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_1_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_7_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_6_ID.VALUE=6 -DRIVER.CAN.VAR.CAN_4_MESSAGE_5_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_51_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_43_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_35_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_27_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_19_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_11_ID.VALUE=11 -DRIVER.CAN.VAR.CAN_3_MESSAGE_10_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_7_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_3_ID.VALUE=3 -DRIVER.CAN.VAR.CAN_1_MESSAGE_2_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_64_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_56_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_48_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_31_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_31_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_23_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_23_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_15_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_15_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_7_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_7_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_11_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_9_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_41_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_33_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_30_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_25_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_22_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_17_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_14_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_3_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_64_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_56_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_48_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_9_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_6_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_58_ID.VALUE=58 -DRIVER.CAN.VAR.CAN_2_MESSAGE_21_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_13_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_4_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_60_ID.VALUE=60 -DRIVER.CAN.VAR.CAN_1_MESSAGE_52_ID.VALUE=52 -DRIVER.CAN.VAR.CAN_1_MESSAGE_44_ID.VALUE=44 -DRIVER.CAN.VAR.CAN_1_MESSAGE_36_ID.VALUE=36 -DRIVER.CAN.VAR.CAN_1_MESSAGE_28_ID.VALUE=28 -DRIVER.CAN.VAR.CAN_2_MESSAGE_60_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_52_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_44_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_36_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_28_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_11_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_11_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_3_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_3_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_58_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_BRP.VALUE=9 -DRIVER.CAN.VAR.CAN_3_MESSAGE_57_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_49_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_PORT_RX_PULDIS.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_64_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_62_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_56_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_54_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_48_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_46_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_38_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_57_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_49_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_21_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_13_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_7_ID.VALUE=7 -DRIVER.CAN.VAR.CAN_3_MESSAGE_20_ID.VALUE=20 -DRIVER.CAN.VAR.CAN_3_MESSAGE_12_ID.VALUE=12 -DRIVER.CAN.VAR.CAN_3_MESSAGE_1_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_PORT_TX_PDR.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_51_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_43_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_35_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_27_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_19_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_4_ID.VALUE=4 -DRIVER.CAN.VAR.CAN_3_MESSAGE_40_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_32_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_24_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_16_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_8_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_NOMINAL_AUTO_BUS_ON_TIME.VALUE=0.000 -DRIVER.CAN.VAR.CAN_2_SHIFT.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_64_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_64_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_63_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_56_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_56_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_55_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_48_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_48_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_47_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_39_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_57_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_49_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_5_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_BRPE.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_10_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MASK.VALUE=0x1FFFFFFF -DRIVER.CAN.VAR.CAN_2_MESSAGE_60_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_60_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_52_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_52_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_44_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_44_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_36_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_36_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_28_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_28_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_51_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_43_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_35_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_27_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_19_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_2_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_59_ID.VALUE=59 -DRIVER.CAN.VAR.CAN_2_PORT_TX_DOUT.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_31_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_23_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_15_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_61_ID.VALUE=61 -DRIVER.CAN.VAR.CAN_1_MESSAGE_53_ID.VALUE=53 -DRIVER.CAN.VAR.CAN_1_MESSAGE_45_ID.VALUE=45 -DRIVER.CAN.VAR.CAN_1_MESSAGE_37_ID.VALUE=37 -DRIVER.CAN.VAR.CAN_1_MESSAGE_29_ID.VALUE=29 -DRIVER.CAN.VAR.CAN_4_MESSAGE_20_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_12_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_4_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_58_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_60_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_60_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_52_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_52_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_44_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_44_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_36_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_36_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_28_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_28_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_PORT_TX_PULL.VALUE=2 -DRIVER.CAN.VAR.CAN_4_MESSAGE_61_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_61_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_53_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_53_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_45_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_45_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_37_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_37_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_29_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_29_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_40_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_32_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_24_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_16_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_21_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_13_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_8_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_31_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_31_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_23_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_23_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_15_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_15_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_8_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_8_ID.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_6_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_21_ID.VALUE=21 -DRIVER.CAN.VAR.CAN_3_MESSAGE_13_ID.VALUE=13 -DRIVER.CAN.VAR.CAN_3_MESSAGE_11_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_64_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_56_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_48_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_5_ID.VALUE=5 -DRIVER.CAN.VAR.CAN_1_MESSAGE_3_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_57_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_49_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_40_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_40_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_32_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_32_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_24_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_24_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_16_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_16_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_63_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_55_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_47_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_39_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_8_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_8_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_20_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_12_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_2_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_40_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_32_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_24_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_16_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_4_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_58_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_8_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_PORT_TX_PSL.VALUE=1 -DRIVER.CAN.VAR.CAN_3_MESSAGE_64_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_56_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_48_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_62_ID.VALUE=62 -DRIVER.CAN.VAR.CAN_1_MESSAGE_54_ID.VALUE=54 -DRIVER.CAN.VAR.CAN_1_MESSAGE_46_ID.VALUE=46 -DRIVER.CAN.VAR.CAN_1_MESSAGE_38_ID.VALUE=38 -DRIVER.CAN.VAR.CAN_2_MESSAGE_61_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_53_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_45_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_37_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_29_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_58_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_20_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_20_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_12_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_12_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_4_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_4_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_BRP.VALUE=9 -DRIVER.CAN.VAR.CAN_1_MESSAGE_60_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_52_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_44_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_36_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_28_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_30_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_22_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_14_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_64_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_56_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_48_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_6_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_IDENTIFIER_MODE.VALUE=0x40000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_11_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_6_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_57_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_49_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_PHASE_SEG.VALUE=4 -DRIVER.CAN.VAR.CAN_4_MESSAGE_58_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_9_ID.VALUE=9 -DRIVER.CAN.VAR.CAN_3_MESSAGE_30_ID.VALUE=30 -DRIVER.CAN.VAR.CAN_3_MESSAGE_22_ID.VALUE=22 -DRIVER.CAN.VAR.CAN_3_MESSAGE_14_ID.VALUE=14 -DRIVER.CAN.VAR.CAN_2_MESSAGE_50_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_42_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_34_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_26_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_18_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_9_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_60_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_52_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_44_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_36_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_28_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_6_ID.VALUE=6 -DRIVER.CAN.VAR.CAN_4_BRPE_FREQ.VALUE=7.500 -DRIVER.CAN.VAR.CAN_3_MESSAGE_41_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_33_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_25_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_17_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_AUTO_BUS_ON_TIME.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_9_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_PORT_RX_FUN.VALUE=1 -DRIVER.CAN.VAR.CAN_3_MESSAGE_63_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_55_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_47_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_39_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_57_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_57_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_49_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_49_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_50_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_42_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_34_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_26_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_20_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_18_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_12_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_4_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_61_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_53_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_51_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_45_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_43_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_37_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_35_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_29_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_27_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_19_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_20_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_12_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_50_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_42_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_34_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_26_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_18_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_6_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_40_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_32_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_24_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_16_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_63_ID.VALUE=63 -DRIVER.CAN.VAR.CAN_1_MESSAGE_55_ID.VALUE=55 -DRIVER.CAN.VAR.CAN_1_MESSAGE_47_ID.VALUE=47 -DRIVER.CAN.VAR.CAN_1_MESSAGE_39_ID.VALUE=39 -DRIVER.CAN.VAR.CAN_1_MESSAGE_20_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_12_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_21_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_13_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_5_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_61_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_61_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_60_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_53_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_53_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_52_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_45_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_45_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_44_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_37_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_37_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_36_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_29_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_29_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_28_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_2_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_41_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_33_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_25_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_17_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_1_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_9_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_7_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_3_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_31_ID.VALUE=31 -DRIVER.CAN.VAR.CAN_3_MESSAGE_23_ID.VALUE=23 -DRIVER.CAN.VAR.CAN_3_MESSAGE_20_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_20_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_15_ID.VALUE=15 -DRIVER.CAN.VAR.CAN_3_MESSAGE_12_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_12_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_PORT_TX_PSL.VALUE=1 -DRIVER.CAN.VAR.CAN_1_MESSAGE_7_ID.VALUE=7 -DRIVER.CAN.VAR.CAN_1_MESSAGE_4_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_58_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_63_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_55_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_47_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_39_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_41_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_41_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_33_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_33_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_25_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_25_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_17_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_17_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_41_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_33_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_25_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_17_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_9_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_9_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_21_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_13_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_5_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_63_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_55_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_47_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_39_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_20_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_12_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_7_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_57_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_49_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_PORT_RX_PDR.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_64_ID.VALUE=64 -DRIVER.CAN.VAR.CAN_1_MESSAGE_56_ID.VALUE=56 -DRIVER.CAN.VAR.CAN_1_MESSAGE_48_ID.VALUE=48 -DRIVER.CAN.VAR.CAN_2_MESSAGE_62_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_54_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_46_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_38_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_21_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_21_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_13_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_13_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_BRP.VALUE=9 -DRIVER.CAN.VAR.CAN_3_MESSAGE_60_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_52_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_44_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_36_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_28_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_5_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_5_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_RAM_PARITY_ENA.VALUE=0x00000005 -DRIVER.CAN.VAR.CAN_3_MESSAGE_63_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_58_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_55_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_47_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_41_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_39_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_33_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_25_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_17_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_58_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_9_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_59_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_40_ID.VALUE=40 -DRIVER.CAN.VAR.CAN_3_MESSAGE_32_ID.VALUE=32 -DRIVER.CAN.VAR.CAN_3_MESSAGE_24_ID.VALUE=24 -DRIVER.CAN.VAR.CAN_3_MESSAGE_16_ID.VALUE=16 -DRIVER.CAN.VAR.CAN_1_MESSAGE_61_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_53_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_45_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_37_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_29_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_8_ID.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_50_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_42_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_34_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_26_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_18_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_NOMINAL_AUTO_BUS_ON_TIME.VALUE=0.000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_41_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_33_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_25_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_17_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_58_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_58_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_AUTO_RETRANSMISSION.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_11_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MASK.VALUE=0x1FFFFFFF -DRIVER.CAN.VAR.CAN_3_MESSAGE_3_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_62_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_61_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_54_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_53_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_46_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_45_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_38_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_37_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_29_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_63_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_55_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_47_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_41_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_39_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_33_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_25_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_17_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_57_ID.VALUE=57 -DRIVER.CAN.VAR.CAN_1_MESSAGE_49_ID.VALUE=49 -DRIVER.CAN.VAR.CAN_4_MESSAGE_30_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_22_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_14_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_6_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_60_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_52_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_44_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_36_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_28_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_62_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_62_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_54_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_54_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_46_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_46_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_38_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_38_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_AUTO_BUS_ON.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_30_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_22_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_14_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_62_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_54_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_46_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_38_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_50_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_42_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_40_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_34_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_32_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_26_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_24_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_18_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_16_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_62_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_54_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_46_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_40_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_38_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_32_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_24_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_16_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_8_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_63_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_55_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_47_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_39_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_8_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_41_ID.VALUE=41 -DRIVER.CAN.VAR.CAN_3_MESSAGE_33_ID.VALUE=33 -DRIVER.CAN.VAR.CAN_3_MESSAGE_25_ID.VALUE=25 -DRIVER.CAN.VAR.CAN_3_MESSAGE_21_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_17_ID.VALUE=17 -DRIVER.CAN.VAR.CAN_3_MESSAGE_13_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_41_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_33_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_25_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_17_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_9_ID.VALUE=9 -DRIVER.CAN.VAR.CAN_1_MESSAGE_5_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_59_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_SJW.VALUE=4 -DRIVER.CAN.VAR.CAN_3_MESSAGE_50_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_50_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_42_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_42_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_41_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_34_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_34_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_33_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_26_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_26_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_25_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_18_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_18_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_17_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_7_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_59_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_30_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_22_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_14_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_41_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_33_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_25_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_17_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_6_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_40_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_32_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_24_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_16_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_BAUDRATE.VALUE=500 -DRIVER.CAN.VAR.CAN_1_MESSAGE_61_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_53_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_45_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_37_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_29_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_9_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_IDENTIFIER_MODE.VALUE=0x40000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_8_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_41_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_33_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_25_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_17_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_1_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_58_ID.VALUE=58 -DRIVER.CAN.VAR.CAN_1_MESSAGE_5_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_RAMBASE.VALUE=0xFF180000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_63_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_55_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_47_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_39_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_AUTO_BUS_ON_TIME.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_30_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_30_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_22_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_22_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_14_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_14_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_6_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_6_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_30_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_22_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_14_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_7_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_PORT_TX_PULDIS.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_5_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_4_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_10_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_20_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_12_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_7_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_59_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_2_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_1_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_50_ID.VALUE=50 -DRIVER.CAN.VAR.CAN_3_MESSAGE_42_ID.VALUE=42 -DRIVER.CAN.VAR.CAN_3_MESSAGE_34_ID.VALUE=34 -DRIVER.CAN.VAR.CAN_3_MESSAGE_26_ID.VALUE=26 -DRIVER.CAN.VAR.CAN_3_MESSAGE_18_ID.VALUE=18 -DRIVER.CAN.VAR.CAN_2_MESSAGE_11_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_2_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_62_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_54_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_46_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_38_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_51_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_43_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_35_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_27_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_19_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_41_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_33_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_25_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_17_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_PORT_TX_DIN.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_7_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_59_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_59_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_11_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_60_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_52_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_44_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_36_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_28_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_21_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_13_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_59_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_5_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_PIN_MODE.VALUE=1 -DRIVER.CAN.VAR.CAN_2_MESSAGE_63_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_55_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_47_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_39_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_30_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_22_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_14_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_11_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_PORT_RX_PSL.VALUE=1 -DRIVER.CAN.VAR.CAN_2_MESSAGE_50_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_42_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_34_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_26_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_18_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_AUTO_BUS_ON_TR.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_59_ID.VALUE=59 -DRIVER.CAN.VAR.CAN_4_MESSAGE_31_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_23_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_15_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_PROPAGATION_DELAY.VALUE=700 -DRIVER.CAN.VAR.CAN_3_MESSAGE_7_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_7_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_SAMPLE_POINT.VALUE=73.333 -DRIVER.CAN.VAR.CAN_3_PORT_TX_DIR.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_30_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_22_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_14_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_63_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_63_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_55_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_55_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_47_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_47_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_39_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_39_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_4_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_61_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_53_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_45_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_37_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_29_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_3_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_ENABLE.VALUE=1 -DRIVER.CAN.VAR.CAN_3_MESSAGE_51_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_43_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_35_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_27_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_19_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_57_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_49_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_31_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_23_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_15_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_9_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_51_ID.VALUE=51 -DRIVER.CAN.VAR.CAN_3_MESSAGE_43_ID.VALUE=43 -DRIVER.CAN.VAR.CAN_3_MESSAGE_35_ID.VALUE=35 -DRIVER.CAN.VAR.CAN_3_MESSAGE_30_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_27_ID.VALUE=27 -DRIVER.CAN.VAR.CAN_3_MESSAGE_22_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_19_ID.VALUE=19 -DRIVER.CAN.VAR.CAN_3_MESSAGE_14_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_6_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_SJW.VALUE=4 -DRIVER.CAN.VAR.CAN_3_MESSAGE_51_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_51_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_43_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_43_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_35_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_35_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_27_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_27_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_19_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_19_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_11_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_4_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_31_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_23_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_21_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_15_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_13_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_7_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_5_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_4_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_58_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_PORT_RX_DOUT.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_10_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_2_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_62_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_54_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_46_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_38_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_64_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_56_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_48_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_31_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_31_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_30_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_23_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_23_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_22_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_15_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_15_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_14_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_PORT_RX_PULL.VALUE=1 -DRIVER.CAN.VAR.CAN_3_MESSAGE_7_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_7_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_4_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_59_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_58_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_50_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_42_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_34_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_26_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_18_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_62_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_60_ID.VALUE=60 -DRIVER.CAN.VAR.CAN_3_MESSAGE_54_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_52_ID.VALUE=52 -DRIVER.CAN.VAR.CAN_3_MESSAGE_46_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_44_ID.VALUE=44 -DRIVER.CAN.VAR.CAN_3_MESSAGE_38_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_36_ID.VALUE=36 -DRIVER.CAN.VAR.CAN_3_MESSAGE_28_ID.VALUE=28 -DRIVER.CAN.VAR.CAN_1_MESSAGE_63_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_55_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_47_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_39_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_60_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_52_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_44_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_36_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_28_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_NOMINAL_AUTO_BUS_ON_TIME.VALUE=0.000 -DRIVER.CAN.VAR.CAN_1_SYNC.VALUE=1 -DRIVER.CAN.VAR.CAN_4_MESSAGE_4_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_11_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_SHIFT.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_1_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_PORT_RX_PULDIS.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_60_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_52_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_44_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_36_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_28_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_64_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_62_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_56_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_54_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_48_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_46_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_38_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_51_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_43_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_40_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_35_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_32_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_27_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_24_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_19_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_16_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_7_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_1_ID.VALUE=1 -DRIVER.CAN.VAR.CAN_4_MESSAGE_40_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_32_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_24_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_16_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_8_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_BRP_FREQ.VALUE=7.500 -DRIVER.CAN.VAR.CAN_2_BRPE_FREQ.VALUE=7.500 -DRIVER.CAN.VAR.CAN_1_MESSAGE_10_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_64_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_64_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_56_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_56_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_48_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_48_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_1_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_63_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_55_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_47_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_39_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_30_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_22_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_14_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_60_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_52_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_44_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_36_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_28_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_6_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_11_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_6_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_PROP_SEG.VALUE=6 -DRIVER.CAN.VAR.CAN_1_MESSAGE_41_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_33_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_25_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_17_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_40_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_32_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_24_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_16_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_61_ID.VALUE=61 -DRIVER.CAN.VAR.CAN_3_MESSAGE_53_ID.VALUE=53 -DRIVER.CAN.VAR.CAN_3_MESSAGE_45_ID.VALUE=45 -DRIVER.CAN.VAR.CAN_3_MESSAGE_37_ID.VALUE=37 -DRIVER.CAN.VAR.CAN_3_MESSAGE_31_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_29_ID.VALUE=29 -DRIVER.CAN.VAR.CAN_3_MESSAGE_23_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_15_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_4_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_10_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_7_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_SJW.VALUE=4 -DRIVER.CAN.VAR.CAN_2_MESSAGE_1_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_11_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_60_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_60_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_52_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_52_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_44_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_44_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_36_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_36_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_28_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_28_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_1_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_40_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_32_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_24_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_16_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_62_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_54_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_50_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_46_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_42_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_38_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_34_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_26_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_18_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_8_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_57_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_49_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_10_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_11_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_1_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_10_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_3_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_2_ID.VALUE=2 -DRIVER.CAN.VAR.CAN_2_MESSAGE_57_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_49_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_40_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_40_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_32_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_32_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_24_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_24_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_16_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_16_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_1_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_8_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_8_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_10_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_10_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_SAMPLE_POINT.VALUE=73.333 -DRIVER.CAN.VAR.CAN_2_MESSAGE_51_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_43_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_35_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_27_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_21_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_19_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_13_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_8_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_1_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_59_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_62_ID.VALUE=62 -DRIVER.CAN.VAR.CAN_3_MESSAGE_54_ID.VALUE=54 -DRIVER.CAN.VAR.CAN_3_MESSAGE_46_ID.VALUE=46 -DRIVER.CAN.VAR.CAN_3_MESSAGE_38_ID.VALUE=38 -DRIVER.CAN.VAR.CAN_1_MESSAGE_64_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_59_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_56_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_48_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_61_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_53_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_45_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_37_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_29_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_PORT_TX_FUN.VALUE=1 -DRIVER.CAN.VAR.CAN_2_MESSAGE_1_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_1_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_30_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_22_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_14_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_8_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_31_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_23_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_21_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_15_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_13_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_6_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_57_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_49_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_7_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_5_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_59_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_60_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_52_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_44_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_36_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_28_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_3_ID.VALUE=3 -DRIVER.CAN.VAR.CAN_1_PORT_RX_DOUT.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_41_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_33_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_25_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_17_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_9_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_11_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_57_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_57_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_49_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_49_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_58_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_4_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_PHASE_SEG.VALUE=4 -DRIVER.CAN.VAR.CAN_3_MESSAGE_61_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_53_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_45_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_37_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_29_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_60_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_52_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_44_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_36_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_28_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_1_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_63_ID.VALUE=63 -DRIVER.CAN.VAR.CAN_3_MESSAGE_55_ID.VALUE=55 -DRIVER.CAN.VAR.CAN_3_MESSAGE_47_ID.VALUE=47 -DRIVER.CAN.VAR.CAN_3_MESSAGE_40_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_39_ID.VALUE=39 -DRIVER.CAN.VAR.CAN_3_MESSAGE_32_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_24_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_16_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_61_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_53_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_45_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_37_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_29_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_8_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_SJW.VALUE=4 -DRIVER.CAN.VAR.CAN_3_RAMBASE.VALUE=0xFF1A0000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_2_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_61_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_61_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_53_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_53_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_45_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_45_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_37_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_37_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_29_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_29_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_PORT_RX_DIN.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_64_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_56_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_48_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_41_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_33_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_25_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_17_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_3_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_9_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_59_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_50_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_42_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_34_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_26_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_18_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_11_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_61_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_53_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_45_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_37_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_29_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_20_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_12_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_PORT_TX_PDR.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_9_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_4_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_4_ID.VALUE=4 -DRIVER.CAN.VAR.CAN_1_MESSAGE_31_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_23_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_15_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_58_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_41_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_41_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_33_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_33_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_25_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_25_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_17_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_17_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_9_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_9_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_PORT_RX_DIR.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_57_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_49_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_11_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_11_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_51_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_43_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_35_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_27_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_19_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_20_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_12_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_7_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_2_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_21_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_13_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_6_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_PORT_TX_DOUT.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_64_ID.VALUE=64 -DRIVER.CAN.VAR.CAN_3_MESSAGE_56_ID.VALUE=56 -DRIVER.CAN.VAR.CAN_3_MESSAGE_48_ID.VALUE=48 -DRIVER.CAN.VAR.CAN_3_MESSAGE_31_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_23_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_15_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_57_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_49_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_3_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_NOMINAL_AUTO_BUS_ON_TIME.VALUE=0.000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_62_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_54_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_46_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_38_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_SYNC.VALUE=1 -DRIVER.CAN.VAR.CAN_2_PORT_TX_PULL.VALUE=2 -DRIVER.CAN.VAR.CAN_2_MESSAGE_2_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_2_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_1_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_64_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_63_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_58_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_56_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_55_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_48_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_47_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_39_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_61_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_53_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_45_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_37_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_29_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_10_ID.VALUE=10 -DRIVER.CAN.VAR.CAN_2_MESSAGE_5_ID.VALUE=5 -DRIVER.CAN.VAR.CAN_4_MESSAGE_50_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_42_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_34_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_26_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_18_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_20_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_12_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_58_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_58_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_57_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_49_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_64_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_56_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_48_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_20_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_12_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_63_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_62_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_55_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_54_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_47_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_46_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_39_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_38_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_4_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_50_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_42_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_34_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_26_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_18_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_57_ID.VALUE=57 -DRIVER.CAN.VAR.CAN_3_MESSAGE_49_ID.VALUE=49 -DRIVER.CAN.VAR.CAN_3_MESSAGE_41_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_33_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_25_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_17_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_9_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_3_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_62_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_62_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_54_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_54_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_46_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_46_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_38_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_38_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_62_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_54_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_46_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_38_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_50_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_42_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_41_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_34_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_33_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_26_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_25_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_18_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_17_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_NOMINAL_BIT_RATE.VALUE=500.000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_51_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_43_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_35_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_27_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_19_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_9_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_41_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_33_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_25_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_17_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_20_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_12_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_11_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_21_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_13_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_5_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_58_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_11_ID.VALUE=11 -DRIVER.CAN.VAR.CAN_2_MESSAGE_6_ID.VALUE=6 -DRIVER.CAN.VAR.CAN_3_PROPAGATION_DELAY.VALUE=700 -DRIVER.CAN.VAR.CAN_2_MESSAGE_59_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_50_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_50_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_42_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_42_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_34_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_34_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_26_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_26_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_18_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_18_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_57_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_49_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_AUTO_RETRANSMISSION.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_20_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_20_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_12_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_12_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_30_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_22_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_14_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_9_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_3_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_58_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_58_ID.VALUE=58 -DRIVER.CAN.VAR.CAN_1_MESSAGE_60_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_58_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_52_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_44_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_36_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_28_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_63_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_55_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_47_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_39_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_62_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_54_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_46_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_38_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_3_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_3_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_31_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_23_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_15_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_7_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_62_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_59_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_54_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_46_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_38_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_10_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_5_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_PORT_TX_PSL.VALUE=1 -DRIVER.CAN.VAR.CAN_3_MESSAGE_60_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_52_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_44_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_36_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_28_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_62_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_54_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_46_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_38_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_20_ID.VALUE=20 -DRIVER.CAN.VAR.CAN_2_MESSAGE_12_ID.VALUE=12 -DRIVER.CAN.VAR.CAN_2_MESSAGE_7_ID.VALUE=7 -DRIVER.CAN.VAR.CAN_1_MESSAGE_8_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_51_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_43_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_35_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_27_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_19_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_21_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_13_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_57_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_49_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_59_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_59_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_51_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_43_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_35_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_27_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_19_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_5_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_63_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_61_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_55_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_53_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_47_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_45_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_40_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_39_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_37_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_32_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_29_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_24_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_16_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_10_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_8_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_2_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_59_ID.VALUE=59 -DRIVER.CAN.VAR.CAN_3_MESSAGE_50_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_42_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_34_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_26_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_18_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_AUTO_BUS_ON_TR.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_30_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_22_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_14_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_5_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_4_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_63_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_63_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_62_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_55_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_55_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_54_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_47_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_47_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_46_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_39_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_39_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_38_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_PORT_RX_FUN.VALUE=1 -DRIVER.CAN.VAR.CAN_4_MESSAGE_51_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_43_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_35_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_27_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_19_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_10_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_2_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_58_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_21_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_13_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_30_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_30_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_22_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_22_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_14_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_14_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_6_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_2_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_21_ID.VALUE=21 -DRIVER.CAN.VAR.CAN_2_MESSAGE_13_ID.VALUE=13 -DRIVER.CAN.VAR.CAN_2_MESSAGE_8_ID.VALUE=8 -DRIVER.ADC.VAR.ADC2_GROUP1_DISCHARGE_PRESCALER.VALUE=0 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN21_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN13_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_ACTUAL_DISCHARGE_TIME.VALUE=0.00 -DRIVER.ADC.VAR.ADC2_GROUP1_RESOLUTION.VALUE=12_BIT -DRIVER.ADC.VAR.ADC2_GROUP0_PIN3_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_PARITY_ENABLE.VALUE=0x00000005 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN25_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN17_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_ACTUAL_DISCHARGE_TIME.VALUE=0.00 -DRIVER.ADC.VAR.ADC1_GROUP2_RESOLUTION.VALUE=12_BIT -DRIVER.ADC.VAR.ADC2_GROUP2_PIN7_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN10_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_TRIGGER_EDGE_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_RAM_PARITY_ENA.VALUE=0 -DRIVER.ADC.VAR.ADC2_GROUP1_EXTENDED_SAMPLE_TIME.VALUE=300.00 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN0_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_RAM_PARITY_ENA.VALUE=0 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN3_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_CHANNEL_TOTAL_TIME.VALUE=0.000000 -DRIVER.ADC.VAR.ADC1_GROUP1_FIFO_SIZE.VALUE=16 -DRIVER.ADC.VAR.ADC1_GROUP2_DISCHARGE_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_SAMPLE_PRESCALER.VALUE=1 -DRIVER.ADC.VAR.ADC1_GROUP1_LENGTH.VALUE=16 -DRIVER.ADC.VAR.ADC2_GROUP1_ID_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN18_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_CONVERSION_TIME.VALUE=1.300 -DRIVER.ADC.VAR.ADC2_PORT_BIT0_DIR.VALUE=0 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN4_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN11_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN7_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_ALT_TRIG.VALUE=0 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN23_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN15_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN29_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN0_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_CONVERSION_TIME.VALUE=1.300 -DRIVER.ADC.VAR.ADC2_GROUP2_LENGTH.VALUE=32 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN19_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_DISCHARGE_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN4_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN30_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN22_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN14_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_ACTUAL_SAMPLE_TIME.VALUE=320.01 -DRIVER.ADC.VAR.ADC2_GROUP2_SAMPLE_PRESCALER.VALUE=1 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN20_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN12_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN26_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN18_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN8_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN11_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_BND.VALUE=2 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN1_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN31_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN23_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN15_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_DISCHARGE_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_SAMPLE_PRESCALER.VALUE=1 -DRIVER.ADC.VAR.ADC2_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN5_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN8_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_ID_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_EXTENDED_SAMPLE_TIME.VALUE=300.00 -DRIVER.ADC.VAR.ADC1_GROUP0_CONVERSION_TIME.VALUE=1.300 -DRIVER.ADC.VAR.ADC2_GROUP0_RESOLUTION.VALUE=12_BIT -DRIVER.ADC.VAR.ADC1_GROUP1_PIN1_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_RESOLUTION.VALUE=12_BIT -DRIVER.ADC.VAR.ADC2_GROUP1_TRIGGER_EDGE_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_CONVERSION_TIME.VALUE=1.300 -DRIVER.ADC.VAR.ADC2_BND.VALUE=2 -DRIVER.ADC.VAR.ADC2_GROUP1_DISCHARGE_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_PORT_BIT0_PDR.VALUE=0 -DRIVER.ADC.VAR.ADC2_ACTUAL_CYCLE_TIME.VALUE=106.67 -DRIVER.ADC.VAR.ADC2_GROUP1_SAMPLE_PRESCALER.VALUE=1 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN9_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN24_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN16_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_SAMPLE_TIME.VALUE=300.00 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN2_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_TRIGGER_MODE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN5_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_DISCHARGE_PRESCALER.VALUE=0 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN21_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN13_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN9_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN27_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN19_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_DISCHARGE_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_RAM_PARITY_ENA.VALUE=0x00000005 -DRIVER.ADC.VAR.ADC2_GROUP1_SCAN_TIME.VALUE=0.000 -DRIVER.ADC.VAR.ADC2_GROUP0_CHANNEL_TOTAL_TIME.VALUE=0.000000 -DRIVER.ADC.VAR.ADC1_GROUP2_SAMPLE_TIME.VALUE=300.00 -DRIVER.ADC.VAR.ADC2_GROUP0_LENGTH.VALUE=16 -DRIVER.ADC.VAR.ADC1_GROUP0_SAMPLE_PRESCALER.VALUE=1 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN17_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN2_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN20_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN12_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN10_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN24_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN16_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_ACTUAL_SAMPLE_TIME.VALUE=320.01 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN6_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN28_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_TRIGGER_MODE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_PORT_BIT0_PSL.VALUE=1 -DRIVER.ADC.VAR.ADC1_GROUP2_CHANNEL_TOTAL_TIME.VALUE=0.000000 -DRIVER.ADC.VAR.ADC1_GROUP0_DISCHARGE_TIME.VALUE=0.00 -DRIVER.ADC.VAR.ADC2_LENGTH.VALUE=64 -DRIVER.ADC.VAR.ADC2_GROUP0_DISCHARGE_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN21_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN13_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_PINS.VALUE=0 -DRIVER.ADC.VAR.ADC2_GROUP0_DISCHARGE_TIME.VALUE=0.00 -DRIVER.ADC.VAR.ADC2_GROUP0_SAMPLE_PRESCALER.VALUE=1 -DRIVER.ADC.VAR.ADC1_GROUP0_DISCHARGE_PRESCALER.VALUE=0 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN3_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN6_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_RAMBASE.VALUE=0xFF3A0000 -DRIVER.ADC.VAR.ADC2_GROUP0_BND.VALUE=8 -DRIVER.ADC.VAR.ADC1_PORT_BIT0_DOUT.VALUE=0 -DRIVER.ADC.VAR.ADC1_GROUP1_SCAN_TIME.VALUE=0.000 -DRIVER.ADC.VAR.ADC1_GROUP0_RESOLUTION.VALUE=12_BIT -DRIVER.ADC.VAR.ADC2_GROUP2_FIFO_SIZE.VALUE=16 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN7_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN22_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN14_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_HW_TRIGGER_SOURCE.VALUE=EVENT -DRIVER.ADC.VAR.ADC2_GROUP1_BND.VALUE=8 -DRIVER.ADC.VAR.ADC2_GROUP0_HW_TRIGGER_SOURCE_ALT.VALUE=EVENT -DRIVER.ADC.VAR.ADC2_GROUP1_PIN18_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN0_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN3_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_ALT_TRIG_COMP.VALUE=1 -DRIVER.ADC.VAR.ADC2_GROUP1_HW_TRIGGER_SOURCE_ALT.VALUE=EVENT -DRIVER.ADC.VAR.ADC2_GROUP1_PIN11_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN7_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN25_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN17_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_PARITY_ENABLE.VALUE=0x00000005 -DRIVER.ADC.VAR.ADC1_ACTUAL_CYCLE_TIME.VALUE=106.67 -DRIVER.ADC.VAR.ADC2_GROUP2_HW_TRIGGER_SOURCE_ALT.VALUE=EVENT -DRIVER.ADC.VAR.ADC2_GROUP2_PIN23_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN15_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN0_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_CONTINUOUS_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN29_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN10_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_PINS.VALUE=0 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN30_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN22_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN14_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN4_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN26_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN18_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN8_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_TRIGGER_EDGE_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN11_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN1_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_FIFO_SIZE.VALUE=16 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN4_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_RAMBASE.VALUE=0xFF3E0000 -DRIVER.ADC.VAR.ADC1_BASE.VALUE=0xFFF7C000 -DRIVER.ADC.VAR.ADC1_PORT_BIT0_DIR.VALUE=0 -DRIVER.ADC.VAR.ADC2_RAM_PARITY_ENA.VALUE=0x00000005 -DRIVER.ADC.VAR.ADC2_GROUP2_HW_TRIGGER_SOURCE.VALUE=EVENT -DRIVER.ADC.VAR.ADC2_GROUP2_ID_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_ACTUAL_SAMPLE_TIME.VALUE=320.01 -DRIVER.ADC.VAR.ADC1_GROUP2_LENGTH.VALUE=32 -DRIVER.ADC.VAR.ADC1_GROUP0_BND.VALUE=8 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN19_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_CHANNEL_TOTAL_TIME.VALUE=0.000000 -DRIVER.ADC.VAR.ADC2_GROUP2_CONTINUOUS_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN5_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN20_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN12_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN8_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_TRIGGER_EDGE_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_PINS.VALUE=0 -DRIVER.ADC.VAR.ADC2_GROUP0_EXTENDED_SAMPLE_TIME.VALUE=300.00 -DRIVER.ADC.VAR.ADC1_GROUP1_DISCHARGE_TIME.VALUE=0.00 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN24_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN16_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN1_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_EXTENDED_SAMPLE_TIME.VALUE=300.00 -DRIVER.ADC.VAR.ADC2_GROUP1_DISCHARGE_TIME.VALUE=0.00 -DRIVER.ADC.VAR.ADC2_GROUP2_TRIGGER_MODE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_FIFO_SIZE.VALUE=16 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN5_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN31_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN23_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN15_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_BND.VALUE=8 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN21_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN13_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN27_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN19_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_PORT_BIT0_DOUT.VALUE=0 -DRIVER.ADC.VAR.ADC2_CYCLE_TIME.VALUE=100.00 -DRIVER.ADC.VAR.ADC1_GROUP1_HW_TRIGGER_SOURCE.VALUE=EVENT -DRIVER.ADC.VAR.ADC1_GROUP1_DISCHARGE_PRESCALER.VALUE=0 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN9_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_PRESCALE.VALUE=7 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN20_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN12_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_RAM_PARITY_ENA.VALUE=0 -DRIVER.ADC.VAR.ADC2_GROUP0_SAMPLE_TIME.VALUE=300.00 -DRIVER.ADC.VAR.ADC2_BASE.VALUE=0xFFF7C200 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN2_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_RAM_PARITY_ENA.VALUE=0 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN24_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN16_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_ID_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN6_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN9_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_CONTINUOUS_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_PORT_BIT0_PDR.VALUE=0 -DRIVER.ADC.VAR.ADC1_GROUP1_SAMPLE_TIME.VALUE=300.00 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN2_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_CONVERSION_TIME.VALUE=1.300 -DRIVER.ADC.VAR.ADC1_GROUP0_FIFO_SIZE.VALUE=16 -DRIVER.ADC.VAR.ADC1_PORT_BIT0_PULL.VALUE=2 -DRIVER.ADC.VAR.ADC1_GROUP0_LENGTH.VALUE=16 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN17_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_CONVERSION_TIME.VALUE=1.300 -DRIVER.ADC.VAR.ADC1_GROUP0_PINS.VALUE=0 -DRIVER.ADC.VAR.ADC1_GROUP0_ACTUAL_SAMPLE_TIME.VALUE=320.01 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN3_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN10_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_ID_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN6_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_SCAN_TIME.VALUE=0.000 -DRIVER.ADC.VAR.ADC2_GROUP1_HW_TRIGGER_SOURCE.VALUE=EVENT -DRIVER.ADC.VAR.ADC1_GROUP1_CHANNEL_TOTAL_TIME.VALUE=0.000000 -DRIVER.ADC.VAR.ADC1_GROUP0_EXTENDED_SAMPLE_TIME.VALUE=300.00 -DRIVER.ADC.VAR.ADC1_GROUP0_HW_TRIGGER_SOURCE_ALT.VALUE=EVENT -DRIVER.ADC.VAR.ADC2_GROUP1_PIN22_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN14_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN28_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_PORT_BIT0_PSL.VALUE=1 -DRIVER.ADC.VAR.ADC1_GROUP2_EXTENDED_SAMPLE_TIME.VALUE=300.00 -DRIVER.ADC.VAR.ADC2_GROUP1_LENGTH.VALUE=16 -DRIVER.ADC.VAR.ADC1_GROUP1_HW_TRIGGER_SOURCE_ALT.VALUE=EVENT -DRIVER.ADC.VAR.ADC2_GROUP2_PIN18_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN3_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN21_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN13_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_ACTUAL_DISCHARGE_TIME.VALUE=0.00 -DRIVER.ADC.VAR.ADC1_GROUP2_HW_TRIGGER_SOURCE_ALT.VALUE=EVENT -DRIVER.ADC.VAR.ADC2_GROUP2_PIN11_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_CONTINUOUS_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN25_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN17_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_ACTUAL_DISCHARGE_TIME.VALUE=0.00 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN7_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN29_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN10_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_ACTUAL_DISCHARGE_TIME.VALUE=0.00 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN0_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN30_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN22_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN14_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_CYCLE_TIME.VALUE=100.00 -DRIVER.ADC.VAR.ADC2_GROUP0_DISCHARGE_PRESCALER.VALUE=0 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN4_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN7_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_DISCHARGE_TIME.VALUE=0.00 -DRIVER.ADC.VAR.ADC1_GROUP0_HW_TRIGGER_SOURCE.VALUE=EVENT -DRIVER.ADC.VAR.ADC1_GROUP1_PIN0_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_ID_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_DISCHARGE_TIME.VALUE=0.00 -DRIVER.ADC.VAR.ADC1_GROUP2_SCAN_TIME.VALUE=0.000 -DRIVER.ADC.VAR.ADC1_GROUP1_PINS.VALUE=0 -DRIVER.ADC.VAR.ADC1_GROUP1_TRIGGER_EDGE_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_ALT_TRIG_COMP.VALUE=1 -DRIVER.ADC.VAR.ADC1_GROUP0_CONTINUOUS_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN8_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN23_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN15_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_ALT_TRIG.VALUE=0 -DRIVER.ADC.VAR.ADC1_GROUP1_RAM_PARITY_ENA.VALUE=0 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN19_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN1_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_RAM_PARITY_ENA.VALUE=0 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN4_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_DISCHARGE_PRESCALER.VALUE=0 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN20_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN12_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN8_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN26_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN18_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_RESOLUTION.VALUE=12_BIT -DRIVER.ADC.VAR.ADC2_GROUP2_PIN24_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN16_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN1_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN11_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_SCAN_TIME.VALUE=0.000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN31_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN23_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN15_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_HW_TRIGGER_SOURCE.VALUE=EVENT -DRIVER.ADC.VAR.ADC2_GROUP0_PIN5_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN27_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN19_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_PRESCALE.VALUE=7 -DRIVER.ADC.VAR.ADC2_GROUP0_ACTUAL_SAMPLE_TIME.VALUE=320.01 -DRIVER.ADC.VAR.ADC1_GROUP2_PINS.VALUE=0 -DRIVER.ADC.VAR.ADC2_PORT_BIT0_PULL.VALUE=2 -DRIVER.ADC.VAR.ADC1_LENGTH.VALUE=64 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN9_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN20_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN12_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_SAMPLE_TIME.VALUE=300.00 -DRIVER.ADC.VAR.ADC2_GROUP1_CHANNEL_TOTAL_TIME.VALUE=0.000000 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN2_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_CONTINUOUS_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN5_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_ACTUAL_SAMPLE_TIME.VALUE=320.01 -DRIVER.ADC.VAR.ADC1_GROUP0_SCAN_TIME.VALUE=0.000 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN6_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN21_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN13_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_TRIGGER_EDGE_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN9_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_SAMPLE_TIME.VALUE=300.00 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN17_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_FIFO_SIZE.VALUE=16 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN2_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN10_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN6_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN24_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN16_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN22_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN14_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN28_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_TRIGGER_MODE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_ACTUAL_DISCHARGE_TIME.VALUE=0.00 -DRIVER.LIN.VAR.LIN2_PORT_BIT1_PDR.VALUE=0 -DRIVER.LIN.VAR.LIN1_TOAWUSINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_TOA3WUSINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PORT_BIT2_DOUT.VALUE=0 -DRIVER.LIN.VAR.LIN2_PORT_BIT2_FUN.VALUE=4 -DRIVER.LIN.VAR.LIN1_HGENCTRL.VALUE=1 -DRIVER.LIN.VAR.LIN2_PORT_BIT0_PSL.VALUE=1 -DRIVER.LIN.VAR.LIN2_PORT_BIT0_DOUT.VALUE=0 -DRIVER.LIN.VAR.LIN1_PBEINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.LIN.VAR.LIN2_PORT_BIT2_PDR.VALUE=0 -DRIVER.LIN.VAR.LIN1_BASE_PORT.VALUE=0xFFF7E440 -DRIVER.LIN.VAR.LIN2_PARITYENA.VALUE=0 -DRIVER.LIN.VAR.LIN2_WAKEINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_FEINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_CEINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_PORT_BIT1_PSL.VALUE=2 -DRIVER.LIN.VAR.LIN2_OEINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_TXINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PORT_BIT0_PULL.VALUE=2 -DRIVER.LIN.VAR.LIN1_MAXPRESCALE.VALUE=3370 -DRIVER.LIN.VAR.LIN2_IDINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.LIN.VAR.LIN1_RX_MASK.VALUE=0xFF -DRIVER.LIN.VAR.LIN2_PORT_BIT2_PSL.VALUE=4 -DRIVER.LIN.VAR.LIN2_PORT_BIT1_DOUT.VALUE=0 -DRIVER.LIN.VAR.LIN1_BREAKINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_NREINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_TOINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_TOAWUSINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_TOA3WUSINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_BAUDRATE.VALUE=20.000 -DRIVER.LIN.VAR.LIN1_OEINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PORT_BIT0_DIR.VALUE=0 -DRIVER.LIN.VAR.LIN1_PORT_BIT1_PULL.VALUE=2 -DRIVER.LIN.VAR.LIN2_RXINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_WAKEINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_PORT_BIT2_DOUT.VALUE=0 -DRIVER.LIN.VAR.LIN2_WAKEINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_FEINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PORT_BIT1_DIR.VALUE=0 -DRIVER.LIN.VAR.LIN1_CEINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_PBEINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_TXINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PORT_BIT0_FUN.VALUE=0 -DRIVER.LIN.VAR.LIN2_IDINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PORT_BIT2_DIR.VALUE=0 -DRIVER.LIN.VAR.LIN2_SBREAK.VALUE=13 -DRIVER.LIN.VAR.LIN2_TOAWUSINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PORT_BIT2_PULL.VALUE=2 -DRIVER.LIN.VAR.LIN1_BREAKINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_PEINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PORT_BIT0_PDR.VALUE=0 -DRIVER.LIN.VAR.LIN1_BASE.VALUE=0xFFF7E400 -DRIVER.LIN.VAR.LIN2_PORT_BIT0_PULL.VALUE=2 -DRIVER.LIN.VAR.LIN1_LENGTH.VALUE=8 -DRIVER.LIN.VAR.LIN2_TOINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PORT_BIT1_FUN.VALUE=2 -DRIVER.LIN.VAR.LIN2_BEINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_ACTUALBAUDRATE.VALUE=20.032 -DRIVER.LIN.VAR.LIN1_FEINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_OEINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_NREINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_TXINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PORT_BIT1_PDR.VALUE=0 -DRIVER.LIN.VAR.LIN1_MSTMOD.VALUE=1 -DRIVER.LIN.VAR.LIN2_ISFEINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PORT_BIT2_FUN.VALUE=4 -DRIVER.LIN.VAR.LIN2_TX_MASK.VALUE=0xFF -DRIVER.LIN.VAR.LIN1_PORT_BIT0_PSL.VALUE=1 -DRIVER.LIN.VAR.LIN2_RXINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_WAKEINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_IDINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_PRESCALE.VALUE=233 -DRIVER.LIN.VAR.LIN1_PORT_BIT2_PDR.VALUE=0 -DRIVER.LIN.VAR.LIN2_BASE.VALUE=0xFFF7E600 -DRIVER.LIN.VAR.LIN2_PORT_BIT1_PULL.VALUE=2 -DRIVER.LIN.VAR.LIN2_PBEINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.LIN.VAR.LIN1_TOINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PORT_BIT1_PSL.VALUE=2 -DRIVER.LIN.VAR.LIN2_BASE_PORT.VALUE=0xFFF7E640 -DRIVER.LIN.VAR.LIN1_BAUDRATE.VALUE=20.000 -DRIVER.LIN.VAR.LIN2_TOAWUSINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_PEINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PORT_BIT2_PSL.VALUE=4 -DRIVER.LIN.VAR.LIN2_MAXBAUDRATE.VALUE=22.255 -DRIVER.LIN.VAR.LIN1_RXINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_BEINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_FEINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_PORT_BIT2_PULL.VALUE=2 -DRIVER.LIN.VAR.LIN1_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.LIN.VAR.LIN1_TX_MASK.VALUE=0xFF -DRIVER.LIN.VAR.LIN2_NREINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_TXINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_ISFEINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_ISFEINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_ACTUALBAUDRATE.VALUE=20.032 -DRIVER.LIN.VAR.LIN1_IDINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_TOA3WUSINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PEINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_TOINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PARITYENA.VALUE=0 -DRIVER.LIN.VAR.LIN1_BEINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_RXINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_HGENCTRL.VALUE=1 -DRIVER.LIN.VAR.LIN1_PRESCALE.VALUE=233 -DRIVER.LIN.VAR.LIN1_ISFEINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_SDEL.VALUE=1 -DRIVER.LIN.VAR.LIN2_LENGTH.VALUE=8 -DRIVER.LIN.VAR.LIN2_MAXPRESCALE.VALUE=3370 -DRIVER.LIN.VAR.LIN2_CEINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_BREAKINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PORT_BIT0_DOUT.VALUE=0 -DRIVER.LIN.VAR.LIN2_TOA3WUSINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PEINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_MSTMOD.VALUE=1 -DRIVER.LIN.VAR.LIN2_PORT_BIT0_DIR.VALUE=0 -DRIVER.LIN.VAR.LIN1_BEINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PBEINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_SDEL.VALUE=1 -DRIVER.LIN.VAR.LIN2_PORT_BIT1_DIR.VALUE=0 -DRIVER.LIN.VAR.LIN1_MAXBAUDRATE.VALUE=22.255 -DRIVER.LIN.VAR.LIN2_PORT_BIT2_PULDIS.VALUE=0 -DRIVER.LIN.VAR.LIN1_SBREAK.VALUE=13 -DRIVER.LIN.VAR.LIN2_OEINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PORT_BIT1_DOUT.VALUE=0 -DRIVER.LIN.VAR.LIN2_PORT_BIT0_FUN.VALUE=0 -DRIVER.LIN.VAR.LIN2_PORT_BIT2_DIR.VALUE=0 -DRIVER.LIN.VAR.LIN2_PORT_BIT0_PDR.VALUE=0 -DRIVER.LIN.VAR.LIN2_PORT_BIT1_FUN.VALUE=2 -DRIVER.LIN.VAR.LIN2_CEINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_NREINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_BREAKINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_RX_MASK.VALUE=0xFF -DRIVER.LIN.VAR.LIN1_PORT_BIT2_PULDIS.VALUE=0 -DRIVER.HET.VAR.HET2_EDGE5_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM5_PERIOD_PRESCALER.VALUE=149888 -DRIVER.HET.VAR.HET2_PWM0_PERIOD_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT0_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_INT_X0.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE4_BOTH.VALUE=0 -DRIVER.HET.VAR.HET1_BIT1_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT6_HRSHARE.VALUE=0x00000008 -DRIVER.HET.VAR.HET2_INT_X1.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM2_DUTY.VALUE=50 -DRIVER.HET.VAR.HET1_BIT29_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT0_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_IGNORE_SUSPEND_ENABLE.VALUE=0x00020000 -DRIVER.HET.VAR.HET2_PWM3_PERIOD.VALUE=1000.000 -DRIVER.HET.VAR.HET2_PWM1_PIN_SELECT.VALUE=10 -DRIVER.HET.VAR.HET2_BIT20_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT12_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT3_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_INT_X2.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X3.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM2_DUTYTIME.VALUE=500.053 -DRIVER.HET.VAR.HET2_INT_X4.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM6_ACTION.VALUE=3 -DRIVER.HET.VAR.HET1_PWM0_DUTY_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT4_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_PWM3_ENA.VALUE=0 -DRIVER.HET.VAR.HET2_BIT4_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X5.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_IGNORE_SUSPEND_ENABLE.VALUE=0x00020000 -DRIVER.HET.VAR.HET1_BIT30_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT26_HRSHARE.VALUE=0x00002000 -DRIVER.HET.VAR.HET1_BIT22_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT18_HRSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT14_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM4_ACTUALPERIOD.VALUE=1000.106 -DRIVER.HET.VAR.HET2_BIT3_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X6.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE0_PIN_SELECT.VALUE=9 -DRIVER.HET.VAR.HET1_BIT28_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT7_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_INT_X7.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT7_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X8.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM3_PERIOD_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT26_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT18_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT10_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X9.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT11_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT11_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_PWM4_PIN_SELECT.VALUE=16 -DRIVER.HET.VAR.HET2_PWM4_DUTYTIME.VALUE=500.053 -DRIVER.HET.VAR.HET1_RAM_BASE.VALUE=0xFF460000 -DRIVER.HET.VAR.HET2_EDGE6_BOTH.VALUE=0 -DRIVER.HET.VAR.HET2_PWM2_DUTY_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT31_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT23_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT15_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE2_EVENT.VALUE=1 -DRIVER.HET.VAR.HET2_BIT11_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PIN_ENABLE.VALUE=0 -DRIVER.HET.VAR.HET1_CAP3_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_BIT24_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT16_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT5_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT27_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT19_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE6_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT24_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_BIT16_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_BIT2_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM6_DUTY_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE3_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET2_EDGE5_PIN_SELECT.VALUE=21 -DRIVER.HET.VAR.HET2_BIT21_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT13_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM7_PERIOD.VALUE=1000.000 -DRIVER.HET.VAR.HET1_BIT27_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT19_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_CAP5_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET2_PWM4_ENA.VALUE=0 -DRIVER.HET.VAR.HET2_BIT8_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM1_POLARITY.VALUE=3 -DRIVER.HET.VAR.HET2_CAP2_PIN_SELECT.VALUE=4 -DRIVER.HET.VAR.HET2_BIT4_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM0_PERIOD.VALUE=1000.000 -DRIVER.HET.VAR.HET1_BIT29_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT0_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT8_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM4_PERIOD_PRESCALER.VALUE=149888 -DRIVER.HET.VAR.HET2_BIT1_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT20_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT12_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM7_ACTION.VALUE=3 -DRIVER.HET.VAR.HET2_PWM4_PERIOD_PRESCALER.VALUE=149888 -DRIVER.HET.VAR.HET2_BIT26_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_BIT24_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT18_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_BIT16_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM3_DUTY_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM3_POLARITY.VALUE=3 -DRIVER.HET.VAR.HET2_BIT28_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT0_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM1_ACTUALPERIOD.VALUE=1000.106 -DRIVER.HET.VAR.HET2_BIT29_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT6_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_CAP5_PIN_SELECT.VALUE=26 -DRIVER.HET.VAR.HET1_BIT28_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT10_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_EDGE7_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM0_ACTION.VALUE=3 -DRIVER.HET.VAR.HET2_BIT1_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_EDGE7_EVENT.VALUE=1 -DRIVER.HET.VAR.HET1_EDGE5_BOTH.VALUE=0 -DRIVER.HET.VAR.HET1_PWM5_DUTY_PRESCALER.VALUE=75136 -DRIVER.HET.VAR.HET1_BIT3_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE7_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_EDGE1_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM3_DUTY.VALUE=50 -DRIVER.HET.VAR.HET1_PWM1_PERIOD_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT30_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT22_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT14_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT4_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_EDGE4_EVENT.VALUE=1 -DRIVER.HET.VAR.HET1_BIT5_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_MASTER.VALUE=1 -DRIVER.HET.VAR.HET2_EDGE5_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM5_ENA.VALUE=0 -DRIVER.HET.VAR.HET2_PWM0_PERIOD_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT2_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT5_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM7_ACTUALPERIOD.VALUE=1000.106 -DRIVER.HET.VAR.HET1_BIT8_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT1_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_LR_ACTUALTIME.VALUE=853.333 -DRIVER.HET.VAR.HET1_PWM5_DUTYTIME.VALUE=500.053 -DRIVER.HET.VAR.HET2_PWM5_PERIOD_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM4_DUTY_PRESCALER.VALUE=75136 -DRIVER.HET.VAR.HET2_BIT9_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM3_DUTY_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM0_DUTY_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT5_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM6_PIN_SELECT.VALUE=18 -DRIVER.HET.VAR.HET2_BIT21_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT20_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT13_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT12_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_EDGE7_BOTH.VALUE=0 -DRIVER.HET.VAR.HET2_BIT25_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT17_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM6_DUTY_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM0_ENA.VALUE=0 -DRIVER.HET.VAR.HET1_BIT30_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT27_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT22_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT19_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT14_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM1_PERIOD.VALUE=1000.000 -DRIVER.HET.VAR.HET2_BIT7_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE5_PIN_SELECT.VALUE=21 -DRIVER.HET.VAR.HET1_BIT29_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT0_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET_DIS_BLACKBOX.VALUE=0 -DRIVER.HET.VAR.HET2_PWM7_DUTYTIME.VALUE=500.053 -DRIVER.HET.VAR.HET2_HR_ACTUALFREQUENCY.VALUE=75.000 -DRIVER.HET.VAR.HET2_PWM5_DUTY_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM4_ACTION.VALUE=3 -DRIVER.HET.VAR.HET1_BIT25_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_BIT17_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_BIT4_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE0_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_CAP6_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_BIT20_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT12_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT31_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT23_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT15_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X10.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT28_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_INT_X11.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X20.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X12.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM3_PERIOD_PRESCALER.VALUE=149888 -DRIVER.HET.VAR.HET2_PWM6_ENA.VALUE=0 -DRIVER.HET.VAR.HET2_BIT24_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT16_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X21.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X13.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_HR_PRESCALE.VALUE=0 -DRIVER.HET.VAR.HET1_EDGE6_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_PWM6_PERIOD_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_LR_PRESCALE.VALUE=6 -DRIVER.HET.VAR.HET2_PWM0_PIN_SELECT.VALUE=8 -DRIVER.HET.VAR.HET2_BIT6_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X30.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X22.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X14.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT2_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X31.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X23.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X15.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM3_PERIOD_PRESCALER.VALUE=149888 -DRIVER.HET.VAR.HET2_INT_X24.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X16.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BASE_PORT.VALUE=0xFFF7B84C -DRIVER.HET.VAR.HET2_PWM5_PERIOD_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT0_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X25.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X17.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM4_POLARITY.VALUE=3 -DRIVER.HET.VAR.HET1_PWM3_DUTY_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT10_HRSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT30_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT22_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT14_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X26.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X18.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X27.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X19.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT27_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_BIT26_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT19_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_BIT18_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X28.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM2_PERIOD_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM1_DUTY_PRESCALER.VALUE=75136 -DRIVER.HET.VAR.HET2_PWM0_DUTY.VALUE=50 -DRIVER.HET.VAR.HET2_BIT26_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT18_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X29.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM1_ENA.VALUE=0 -DRIVER.HET.VAR.HET2_CAP7_PIN_SELECT.VALUE=30 -DRIVER.HET.VAR.HET2_BIT8_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM5_PERIOD.VALUE=1000.000 -DRIVER.HET.VAR.HET1_PWM4_ACTUALPERIOD.VALUE=1000.106 -DRIVER.HET.VAR.HET1_PWM3_PIN_SELECT.VALUE=14 -DRIVER.HET.VAR.HET1_BIT11_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT1_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM0_DUTYTIME.VALUE=500.053 -DRIVER.HET.VAR.HET2_BIT2_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_EDGE6_BOTH.VALUE=0 -DRIVER.HET.VAR.HET1_BIT5_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM6_POLARITY.VALUE=3 -DRIVER.HET.VAR.HET2_BIT30_HRSHARE.VALUE=0x00008000 -DRIVER.HET.VAR.HET2_BIT22_HRSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT14_HRSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT6_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM4_DUTY.VALUE=50 -DRIVER.HET.VAR.HET1_BIT20_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT12_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PIN_ENABLE.VALUE=0 -DRIVER.HET.VAR.HET2_BIT24_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT16_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT5_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_PWM0_DUTY_PRESCALER.VALUE=75136 -DRIVER.HET.VAR.HET1_BIT6_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_PWM7_ENA.VALUE=0 -DRIVER.HET.VAR.HET1_PWM0_DUTY_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT8_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE4_PIN_SELECT.VALUE=20 -DRIVER.HET.VAR.HET2_BIT7_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT9_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT3_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM5_ACTION.VALUE=3 -DRIVER.HET.VAR.HET2_BIT10_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_CAP1_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_EDGE6_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_CAP1_PIN_SELECT.VALUE=2 -DRIVER.HET.VAR.HET2_BIT31_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT23_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT21_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT15_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT13_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT27_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT19_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE3_EVENT.VALUE=1 -DRIVER.HET.VAR.HET1_PWM6_DUTY_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM2_ENA.VALUE=0 -DRIVER.HET.VAR.HET2_BIT9_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT2_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE0_EVENT.VALUE=1 -DRIVER.HET.VAR.HET1_PWM2_PERIOD_PRESCALER.VALUE=149888 -DRIVER.HET.VAR.HET1_BIT26_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_BIT18_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_BIT6_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE3_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT24_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT16_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT25_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT17_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_CAP4_PIN_SELECT.VALUE=24 -DRIVER.HET.VAR.HET1_BIT29_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT0_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_PWM2_PERIOD_PRESCALER.VALUE=149888 -DRIVER.HET.VAR.HET2_EDGE3_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_BIT3_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT2_HRSHARE.VALUE=0x00000002 -DRIVER.HET.VAR.HET2_PWM6_PERIOD.VALUE=1000.000 -DRIVER.HET.VAR.HET2_BIT8_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM1_ACTUALPERIOD.VALUE=1000.106 -DRIVER.HET.VAR.HET1_BIT4_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT4_HRSHARE.VALUE=0x00000004 -DRIVER.HET.VAR.HET1_BIT25_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT17_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT24_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT16_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM1_DUTYTIME.VALUE=500.053 -DRIVER.HET.VAR.HET2_PWM4_PERIOD_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT28_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_BIT28_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM2_ACTION.VALUE=3 -DRIVER.HET.VAR.HET2_PWM1_DUTY.VALUE=50 -DRIVER.HET.VAR.HET2_BIT29_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM7_POLARITY.VALUE=3 -DRIVER.HET.VAR.HET1_PWM3_ENA.VALUE=0 -DRIVER.HET.VAR.HET1_BIT24_HRSHARE.VALUE=0x00001000 -DRIVER.HET.VAR.HET1_BIT16_HRSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT10_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM5_PIN_SELECT.VALUE=17 -DRIVER.HET.VAR.HET1_BIT20_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT12_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT3_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X10.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X11.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT3_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_EDGE7_BOTH.VALUE=0 -DRIVER.HET.VAR.HET1_EDGE0_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT7_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X20.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X12.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT30_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT22_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT14_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM5_DUTY.VALUE=50 -DRIVER.HET.VAR.HET1_BIT10_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X21.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X13.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM5_ACTUALPERIOD.VALUE=1000.106 -DRIVER.HET.VAR.HET2_BIT26_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT18_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT6_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_EDGE4_PIN_SELECT.VALUE=20 -DRIVER.HET.VAR.HET1_INT_X30.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X22.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X14.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM3_DUTYTIME.VALUE=500.053 -DRIVER.HET.VAR.HET1_INT_X31.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X23.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X15.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE5_EVENT.VALUE=1 -DRIVER.HET.VAR.HET2_PWM1_DUTY_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM7_PERIOD_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM6_DUTY_PRESCALER.VALUE=75136 -DRIVER.HET.VAR.HET1_BIT7_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_INT_X24.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X16.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT28_HRSHARE.VALUE=0x00004000 -DRIVER.HET.VAR.HET1_CAP2_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_PWM3_PERIOD_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT6_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X25.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X17.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT9_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT5_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X26.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X18.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X27.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X19.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT11_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_INT_X28.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM2_PERIOD_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_RAM_SIZE.VALUE=160 -DRIVER.HET.VAR.HET1_EDGE2_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_INT_X29.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT30_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT25_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT22_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT17_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT14_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_PWM3_PERIOD.VALUE=1000.000 -DRIVER.HET.VAR.HET2_PWM5_DUTY_PRESCALER.VALUE=75136 -DRIVER.HET.VAR.HET2_BIT29_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM1_PERIOD_PRESCALER.VALUE=149888 -DRIVER.HET.VAR.HET1_BIT10_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_CAP4_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET2_BIT8_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT4_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM4_ENA.VALUE=0 -DRIVER.HET.VAR.HET1_PWM0_POLARITY.VALUE=3 -DRIVER.HET.VAR.HET1_BIT4_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM1_PERIOD_PRESCALER.VALUE=149888 -DRIVER.HET.VAR.HET1_EDGE1_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM1_PERIOD_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT27_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_BIT19_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_BIT8_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT30_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT22_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT14_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_CAP6_PIN_SELECT.VALUE=28 -DRIVER.HET.VAR.HET2_BIT27_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT19_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM2_PIN_SELECT.VALUE=12 -DRIVER.HET.VAR.HET1_BIT1_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_PWM3_ACTION.VALUE=3 -DRIVER.HET.VAR.HET2_PWM2_POLARITY.VALUE=3 -DRIVER.HET.VAR.HET1_EDGE4_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT28_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT6_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE0_BOTH.VALUE=0 -DRIVER.HET.VAR.HET2_EDGE6_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET2_PWM5_DUTY_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT8_HRSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT4_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE3_PIN_SELECT.VALUE=15 -DRIVER.HET.VAR.HET2_PWM2_ACTUALPERIOD.VALUE=1000.106 -DRIVER.HET.VAR.HET2_BIT26_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT18_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT29_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_BIT11_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT10_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_EDGE1_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM7_PERIOD_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM2_DUTY.VALUE=50 -DRIVER.HET.VAR.HET1_PWM5_ENA.VALUE=0 -DRIVER.HET.VAR.HET1_BIT8_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_CAP0_PIN_SELECT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT21_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT13_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT5_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM4_DUTYTIME.VALUE=500.053 -DRIVER.HET.VAR.HET2_BIT4_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_EDGE2_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM2_DUTY_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM2_DUTY_PRESCALER.VALUE=75136 -DRIVER.HET.VAR.HET1_BIT9_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT6_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM6_DUTY.VALUE=50 -DRIVER.HET.VAR.HET1_BIT1_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM4_PERIOD.VALUE=1000.000 -DRIVER.HET.VAR.HET2_BIT28_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT7_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_PWM7_ACTION.VALUE=3 -DRIVER.HET.VAR.HET1_BIT8_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_PWM2_DUTY_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT20_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT12_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT31_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT23_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT15_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_CAP3_PIN_SELECT.VALUE=6 -DRIVER.HET.VAR.HET1_BIT7_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM6_DUTYTIME.VALUE=500.053 -DRIVER.HET.VAR.HET2_PWM4_DUTY_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM1_DUTY_PRESCALER.VALUE=75136 -DRIVER.HET.VAR.HET2_BIT20_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_BIT12_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_PWM0_PERIOD_PRESCALER.VALUE=149888 -DRIVER.HET.VAR.HET1_PWM0_ACTION.VALUE=3 -DRIVER.HET.VAR.HET2_BIT27_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT19_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_CAP5_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_BIT26_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT18_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT31_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT27_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT23_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT19_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT15_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_PWM0_PERIOD_PRESCALER.VALUE=149888 -DRIVER.HET.VAR.HET1_EDGE4_EVENT.VALUE=1 -DRIVER.HET.VAR.HET1_BIT20_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT12_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT20_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT12_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE5_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_PWM6_ENA.VALUE=0 -DRIVER.HET.VAR.HET1_BIT6_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE1_EVENT.VALUE=1 -DRIVER.HET.VAR.HET2_PWM3_PERIOD_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE3_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT28_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_CAP7_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_PWM3_POLARITY.VALUE=3 -DRIVER.HET.VAR.HET2_PWM4_PIN_SELECT.VALUE=16 -DRIVER.HET.VAR.HET2_BIT29_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT10_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT2_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT9_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM5_DUTY_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM0_PERIOD_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE3_PIN_SELECT.VALUE=15 -DRIVER.HET.VAR.HET1_PWM1_PERIOD.VALUE=1000.000 -DRIVER.HET.VAR.HET1_BIT8_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BASE.VALUE=0xFFF7B800 -DRIVER.HET.VAR.HET2_EDGE1_BOTH.VALUE=0 -DRIVER.HET.VAR.HET1_PWM6_PERIOD_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM5_POLARITY.VALUE=3 -DRIVER.HET.VAR.HET2_BIT20_HRSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT12_HRSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT2_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT2_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT28_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM7_PIN_SELECT.VALUE=19 -DRIVER.HET.VAR.HET1_PWM5_ACTUALPERIOD.VALUE=1000.106 -DRIVER.HET.VAR.HET1_LR_ACTUALTIME.VALUE=853.333 -DRIVER.HET.VAR.HET1_BIT21_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT13_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT11_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_PWM3_DUTY.VALUE=50 -DRIVER.HET.VAR.HET1_PWM7_ENA.VALUE=0 -DRIVER.HET.VAR.HET1_HR_PRESCALE.VALUE=0 -DRIVER.HET.VAR.HET1_BIT30_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT22_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT14_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT7_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_HR_ACTUALFREQUENCY.VALUE=75.000 -DRIVER.HET.VAR.HET2_PWM1_ACTION.VALUE=3 -DRIVER.HET.VAR.HET2_BIT5_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_EDGE4_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_CAP0_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET2_BIT4_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE2_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM7_DUTY.VALUE=50 -DRIVER.HET.VAR.HET1_PWM2_DUTY_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT8_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT11_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM7_DUTYTIME.VALUE=500.053 -DRIVER.HET.VAR.HET2_EDGE6_EVENT.VALUE=1 -DRIVER.HET.VAR.HET2_MASTER.VALUE=1 -DRIVER.HET.VAR.HET1_PWM5_DUTY_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM0_PERIOD_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT9_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_EDGE6_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT10_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_CAP5_PIN_SELECT.VALUE=26 -DRIVER.HET.VAR.HET1_PWM1_PIN_SELECT.VALUE=10 -DRIVER.HET.VAR.HET1_BIT9_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT21_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_BIT13_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_PWM7_DUTY_PRESCALER.VALUE=75136 -DRIVER.HET.VAR.HET1_PWM5_PERIOD_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT24_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT16_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT6_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_RAM_PARITY_ENA.VALUE=0x00000005 -DRIVER.HET.VAR.HET2_BIT29_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT24_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT16_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT10_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM7_DUTY_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE0_BOTH.VALUE=0 -DRIVER.HET.VAR.HET1_BIT30_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT22_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT14_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X0.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE2_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET2_PWM4_PERIOD_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT28_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT0_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT0_HRSHARE.VALUE=0x00000001 -DRIVER.HET.VAR.HET1_INT_X1.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE2_PIN_SELECT.VALUE=13 -DRIVER.HET.VAR.HET2_PWM2_PERIOD.VALUE=1000.000 -DRIVER.HET.VAR.HET1_BIT8_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X2.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_DIS_BLACKBOX.VALUE=0 -DRIVER.HET.VAR.HET2_LR_TIME.VALUE=800.000 -DRIVER.HET.VAR.HET1_INT_X3.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM6_DUTY_PRESCALER.VALUE=75136 -DRIVER.HET.VAR.HET1_EDGE5_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM5_ACTION.VALUE=3 -DRIVER.HET.VAR.HET1_BIT29_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_BIT0_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_INT_X4.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT2_HRSHARE.VALUE=0x00000002 -DRIVER.HET.VAR.HET1_BIT21_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT13_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X5.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM2_ACTUALPERIOD.VALUE=1000.106 -DRIVER.HET.VAR.HET1_BIT20_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT12_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT3_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_INT_X6.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM0_DUTYTIME.VALUE=500.053 -DRIVER.HET.VAR.HET1_INT_X7.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BASE_PORT.VALUE=0xFFF7B94C -DRIVER.HET.VAR.HET1_INT_X8.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT25_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT17_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT2_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM6_POLARITY.VALUE=3 -DRIVER.HET.VAR.HET1_BIT30_HRSHARE.VALUE=0x00008000 -DRIVER.HET.VAR.HET1_BIT22_HRSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT14_HRSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X9.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BASE.VALUE=0xFFF7B900 -DRIVER.HET.VAR.HET2_EDGE2_BOTH.VALUE=0 -DRIVER.HET.VAR.HET1_EDGE0_EVENT.VALUE=1 -DRIVER.HET.VAR.HET2_BIT28_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT10_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_CAP2_PIN_SELECT.VALUE=4 -DRIVER.HET.VAR.HET1_BIT11_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM2_DUTYTIME.VALUE=500.053 -DRIVER.HET.VAR.HET2_PWM0_DUTY_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT31_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT23_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT20_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_BIT15_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT12_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_PWM4_DUTY.VALUE=50 -DRIVER.HET.VAR.HET2_BIT26_HRSHARE.VALUE=0x00002000 -DRIVER.HET.VAR.HET2_BIT18_HRSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_CAP1_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_BIT30_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT22_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT14_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM6_ACTUALPERIOD.VALUE=1000.106 -DRIVER.HET.VAR.HET1_PWM6_PERIOD.VALUE=1000.000 -DRIVER.HET.VAR.HET1_BIT31_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT23_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT15_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT9_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT6_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_EDGE6_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT7_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE1_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_RAM_SIZE.VALUE=160 -DRIVER.HET.VAR.HET2_BIT9_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT21_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT13_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM2_PERIOD_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT0_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM3_DUTY_PRESCALER.VALUE=75136 -DRIVER.HET.VAR.HET2_CAP3_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET2_BIT0_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM3_PIN_SELECT.VALUE=14 -DRIVER.HET.VAR.HET2_PWM6_ACTION.VALUE=3 -DRIVER.HET.VAR.HET2_BIT30_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_BIT22_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_BIT14_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_EDGE7_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT25_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT17_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_EDGE2_PIN_SELECT.VALUE=13 -DRIVER.HET.VAR.HET1_BIT20_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT12_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_HR_FREQUENCY.VALUE=110.000 -DRIVER.HET.VAR.HET2_PWM2_DUTY_PRESCALER.VALUE=75136 -DRIVER.HET.VAR.HET1_EDGE5_EVENT.VALUE=1 -DRIVER.HET.VAR.HET1_EDGE1_BOTH.VALUE=0 -DRIVER.HET.VAR.HET1_PWM5_PERIOD_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT24_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT16_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM1_POLARITY.VALUE=3 -DRIVER.HET.VAR.HET2_BIT26_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT18_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE0_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT0_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_PWM6_PIN_SELECT.VALUE=18 -DRIVER.HET.VAR.HET2_EDGE2_EVENT.VALUE=1 -DRIVER.HET.VAR.HET1_EDGE7_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT1_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_EDGE5_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET2_EDGE4_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT6_HRSHARE.VALUE=0x00000008 -DRIVER.HET.VAR.HET1_BIT30_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT22_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT14_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT4_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT1_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM7_DUTY_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT8_HRSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT0_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT4_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE7_PIN_SELECT.VALUE=23 -DRIVER.HET.VAR.HET2_PWM7_PERIOD.VALUE=1000.000 -DRIVER.HET.VAR.HET2_PWM3_ACTUALPERIOD.VALUE=1000.106 -DRIVER.HET.VAR.HET1_PWM3_DUTYTIME.VALUE=500.053 -DRIVER.HET.VAR.HET2_EDGE3_BOTH.VALUE=0 -DRIVER.HET.VAR.HET1_PWM1_DUTY_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM2_PERIOD_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT28_HRSHARE.VALUE=0x00004000 -DRIVER.HET.VAR.HET1_BIT26_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT18_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_CAP4_PIN_SELECT.VALUE=24 -DRIVER.HET.VAR.HET2_PWM0_PERIOD.VALUE=1000.000 -DRIVER.HET.VAR.HET1_PWM0_PIN_SELECT.VALUE=8 -DRIVER.HET.VAR.HET1_BIT21_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT13_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_LR_TIME.VALUE=800.000 -DRIVER.HET.VAR.HET2_EDGE0_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM3_ACTION.VALUE=3 -DRIVER.HET.VAR.HET1_BIT25_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT21_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_BIT17_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT13_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_PWM5_DUTY.VALUE=50 -DRIVER.HET.VAR.HET2_PWM1_PERIOD_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT20_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT12_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT11_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT24_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT16_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_PWM5_DUTYTIME.VALUE=500.053 -DRIVER.HET.VAR.HET2_RAM_BASE.VALUE=0xFF440000 -DRIVER.HET.VAR.HET2_PWM3_DUTY_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT7_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_PWM4_DUTY_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT31_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT23_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT15_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_CAP4_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_BIT8_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE1_PIN_SELECT.VALUE=11 -DRIVER.HET.VAR.HET1_CAP7_PIN_SELECT.VALUE=30 -DRIVER.HET.VAR.HET1_BIT31_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT23_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT15_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE7_EVENT.VALUE=1 -DRIVER.HET.VAR.HET2_BIT2_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE4_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET2_BIT31_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_BIT23_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_BIT15_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_BIT10_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_CAP6_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_PWM2_POLARITY.VALUE=3 -DRIVER.HET.VAR.HET2_BIT26_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT18_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT0_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM4_PERIOD.VALUE=1000.000 -DRIVER.HET.VAR.HET1_BIT30_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT22_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT14_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE1_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM7_PERIOD_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE2_BOTH.VALUE=0 -DRIVER.HET.VAR.HET1_BIT26_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT18_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM1_DUTY_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT24_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT16_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT5_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_RAM_PARITY_ENA.VALUE=0x00000005 -DRIVER.HET.VAR.HET1_PWM7_PERIOD_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM0_DUTY.VALUE=50 -DRIVER.HET.VAR.HET2_PWM0_ACTUALPERIOD.VALUE=1000.106 -DRIVER.HET.VAR.HET2_BIT1_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_CAP1_PIN_SELECT.VALUE=2 -DRIVER.HET.VAR.HET1_PWM7_PERIOD_PRESCALER.VALUE=149888 -DRIVER.HET.VAR.HET1_BIT2_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_PWM6_PERIOD_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM4_POLARITY.VALUE=3 -DRIVER.HET.VAR.HET2_BIT10_HRSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM7_DUTY_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT10_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE7_PIN_SELECT.VALUE=23 -DRIVER.HET.VAR.HET1_BIT24_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT16_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT5_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_PWM7_PERIOD_PRESCALER.VALUE=149888 -DRIVER.HET.VAR.HET2_PWM7_DUTY_PRESCALER.VALUE=75136 -DRIVER.HET.VAR.HET2_PWM4_ACTION.VALUE=3 -DRIVER.HET.VAR.HET2_BIT3_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE5_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT6_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM6_ACTUALPERIOD.VALUE=1000.106 -DRIVER.HET.VAR.HET2_EDGE4_BOTH.VALUE=0 -DRIVER.HET.VAR.HET2_PWM1_PERIOD_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT11_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE1_EVENT.VALUE=1 -DRIVER.HET.VAR.HET2_LR_PRESCALE.VALUE=6 -DRIVER.HET.VAR.HET2_PWM2_PIN_SELECT.VALUE=12 -DRIVER.HET.VAR.HET2_BIT1_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT31_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT23_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT15_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM6_DUTYTIME.VALUE=500.053 -DRIVER.HET.VAR.HET2_EDGE2_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM4_DUTY_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT30_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_BIT27_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT22_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_BIT19_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT14_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_EDGE2_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM6_DUTY.VALUE=50 -DRIVER.HET.VAR.HET2_BIT8_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM4_DUTY_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT9_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE1_PIN_SELECT.VALUE=11 -DRIVER.HET.VAR.HET1_BIT25_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT17_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT8_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_PWM4_PERIOD_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM0_ENA.VALUE=0 -DRIVER.HET.VAR.HET2_BIT30_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT22_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT14_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT2_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM5_PERIOD.VALUE=1000.000 -DRIVER.HET.VAR.HET2_BIT0_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM5_PIN_SELECT.VALUE=17 -DRIVER.HET.VAR.HET1_BIT25_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT17_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM6_DUTY_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT4_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE1_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_CAP7_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_BIT28_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT24_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT16_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT24_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_BIT20_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT16_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_BIT12_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM4_DUTY_PRESCALER.VALUE=75136 -DRIVER.HET.VAR.HET1_PWM1_ACTION.VALUE=3 -DRIVER.HET.VAR.HET2_BIT28_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT0_HRSHARE.VALUE=0x00000001 -DRIVER.HET.VAR.HET1_EDGE7_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_PWM1_DUTY_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE6_PIN_SELECT.VALUE=22 -DRIVER.HET.VAR.HET2_BIT27_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT19_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT2_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_DIS_BLACKBOX.VALUE=0 -DRIVER.HET.VAR.HET1_BIT24_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT16_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE3_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE6_EVENT.VALUE=1 -DRIVER.HET.VAR.HET1_EDGE3_BOTH.VALUE=0 -DRIVER.HET.VAR.HET1_PWM6_PERIOD_PRESCALER.VALUE=149888 -DRIVER.HET.VAR.HET1_BIT28_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT21_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT13_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM5_POLARITY.VALUE=3 -DRIVER.HET.VAR.HET1_PWM1_DUTY.VALUE=50 -DRIVER.HET.VAR.HET1_BIT20_HRSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT12_HRSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_CAP3_PIN_SELECT.VALUE=6 -DRIVER.HET.VAR.HET2_BIT10_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT2_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_PWM3_ACTUALPERIOD.VALUE=1000.106 -DRIVER.HET.VAR.HET2_EDGE3_EVENT.VALUE=1 -DRIVER.HET.VAR.HET2_PWM6_PERIOD_PRESCALER.VALUE=149888 -DRIVER.HET.VAR.HET2_PWM3_DUTY_PRESCALER.VALUE=75136 -DRIVER.HET.VAR.HET1_BIT3_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_PWM1_ENA.VALUE=0 -DRIVER.HET.VAR.HET2_BIT1_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT26_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT18_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT6_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_PWM1_DUTYTIME.VALUE=500.053 -DRIVER.HET.VAR.HET2_BIT5_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM7_POLARITY.VALUE=3 -DRIVER.HET.VAR.HET2_BIT24_HRSHARE.VALUE=0x00001000 -DRIVER.HET.VAR.HET2_BIT16_HRSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_CAP0_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_BIT4_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE0_PIN_SELECT.VALUE=9 -DRIVER.HET.VAR.HET2_BIT10_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_CAP6_PIN_SELECT.VALUE=28 -DRIVER.HET.VAR.HET1_PWM2_PERIOD.VALUE=1000.000 -DRIVER.HET.VAR.HET2_EDGE5_BOTH.VALUE=0 -DRIVER.HET.VAR.HET2_BIT21_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT13_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT3_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE0_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET2_PWM7_ACTUALPERIOD.VALUE=1000.106 -DRIVER.HET.VAR.HET2_BIT3_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT25_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT17_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE4_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT31_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_BIT29_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT23_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_BIT15_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_BIT0_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_CAP2_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET2_PWM7_DUTY.VALUE=50 -DRIVER.HET.VAR.HET2_BIT6_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM4_PERIOD_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT11_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT26_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT18_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_PWM6_PERIOD_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM2_ACTION.VALUE=3 -DRIVER.HET.VAR.HET2_BIT9_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_PWM7_DUTY_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM3_PERIOD_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM2_ENA.VALUE=0 -DRIVER.HET.VAR.HET2_BIT20_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT12_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE3_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM7_PIN_SELECT.VALUE=19 -DRIVER.HET.VAR.HET2_BIT2_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_CAP0_PIN_SELECT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT27_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT19_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT6_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM0_DUTY_PRESCALER.VALUE=75136 -DRIVER.HET.VAR.HET2_EDGE7_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM0_POLARITY.VALUE=3 -DRIVER.HET.VAR.HET1_BIT26_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT18_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT10_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE6_PIN_SELECT.VALUE=22 -DRIVER.HET.VAR.HET1_PWM0_ACTUALPERIOD.VALUE=1000.106 -DRIVER.HET.VAR.HET2_HR_FREQUENCY.VALUE=110.000 -DRIVER.HET.VAR.HET2_BIT30_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT25_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_BIT22_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT17_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_BIT14_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM5_PERIOD_PRESCALER.VALUE=149888 -DRIVER.HET.VAR.HET2_EDGE4_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET2_EDGE0_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT7_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT4_HRSHARE.VALUE=0x00000004 -DRIVER.HET.VAR.HET1_BIT2_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT28_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT4_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT26_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT18_PSL.VALUE=0x00000000 -DRIVER.RTP.VAR.RTP_PORT_BIT1_DOUT.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT3_FUN.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT1_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT5_DIR.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT14_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT11_DIR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT3_PDR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT8_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT4_FUN.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT6_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT2_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT10_FUN.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT6_DIR.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT14_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT12_DIR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT17_DOUT.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT4_PDR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT10_PDR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT2_DOUT.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT5_FUN.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT3_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT11_FUN.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT7_DIR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT13_DIR.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT5_PDR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT11_PDR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT9_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT6_FUN.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT12_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT4_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT12_FUN.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT8_DIR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT10_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT15_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT14_DIR.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT18_DOUT.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT6_PDR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT0_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT4_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT12_PDR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT3_DOUT.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT7_FUN.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT5_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT13_FUN.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT9_DIR.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT11_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT15_DIR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT7_PDR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT13_PDR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT8_FUN.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT6_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT14_FUN.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT12_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT16_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT16_DIR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT17_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT8_PDR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT1_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT10_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT14_PDR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT4_DOUT.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT9_FUN.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT7_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT15_FUN.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT9_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT13_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT10_DOUT.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT17_DIR.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT2_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT9_PDR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT15_PDR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT8_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT16_FUN.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT14_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT18_DIR.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT17_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_BASE_PORT.VALUE=0xFFFFFA38 -DRIVER.RTP.VAR.RTP_PORT_BIT2_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT16_PDR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT5_DOUT.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT9_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT17_FUN.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT15_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT15_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT11_DOUT.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT17_PDR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT7_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT18_FUN.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT16_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT18_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT3_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT18_PDR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT6_DOUT.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT17_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT12_DOUT.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT13_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT18_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT4_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT5_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT7_DOUT.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT10_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT13_DOUT.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT18_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT5_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT11_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT8_DOUT.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT0_DIR.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT11_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT14_DOUT.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT3_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT1_DIR.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT6_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT0_FUN.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT9_DOUT.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT2_DIR.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT12_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT16_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT15_DOUT.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT0_PDR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT0_DOUT.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT1_FUN.VALUE=1 -DRIVER.RTP.VAR.RTP_BASE.VALUE=0xFFFFFA00 -DRIVER.RTP.VAR.RTP_PORT_BIT3_DIR.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT8_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT1_PDR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT7_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT2_FUN.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT0_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT4_DIR.VALUE=0 -DRIVER.RTP.VAR.RTP_BASE_RAM.VALUE=0xFFF83000 -DRIVER.RTP.VAR.RTP_PORT_BIT13_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT10_DIR.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT16_DOUT.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT2_PDR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT14_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT17_DOUT.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT17_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT4_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT1_DIR.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT18_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT0_FUN.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT15_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT4_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT2_DIR.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT7_DOUT.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT15_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT18_DOUT.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT0_PDR.VALUE=0 -DRIVER.DMM.VAR.DMM_BASE.VALUE=0xFFFFF700 -DRIVER.DMM.VAR.DMM_PORT_BIT1_FUN.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT3_DIR.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT9_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT1_PDR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT2_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT2_FUN.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT0_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT5_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT4_DIR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT8_DOUT.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT16_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT2_PDR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT13_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT3_FUN.VALUE=1 -DRIVER.DMM.VAR.DMM_BASE_PORT.VALUE=0xFFFFF770 -DRIVER.DMM.VAR.DMM_PORT_BIT1_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT5_DIR.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT10_DOUT.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT3_PDR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT4_FUN.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT2_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT6_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT6_DIR.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT7_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT9_DOUT.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT17_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT4_PDR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT5_FUN.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT3_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT0_DOUT.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT7_DIR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT18_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT11_DOUT.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT11_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT5_PDR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT6_FUN.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT4_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT8_DIR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT7_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT18_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT6_PDR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT10_DIR.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT7_FUN.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT5_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT5_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT1_DOUT.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT9_DIR.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT12_DOUT.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT7_PDR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT11_DIR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT8_FUN.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT16_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT6_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT8_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT10_FUN.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT8_PDR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT12_DIR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT9_FUN.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT10_PDR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT7_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT2_DOUT.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT10_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT13_DOUT.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT11_FUN.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT9_PDR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT13_DIR.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT3_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT11_PDR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT8_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT9_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT12_FUN.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT10_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT14_DIR.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT14_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT0_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT12_PDR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT9_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT3_DOUT.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT11_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT14_DOUT.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT13_FUN.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT11_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT15_DIR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT13_PDR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT8_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT14_FUN.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT12_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT16_DIR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT1_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT14_PDR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT4_DOUT.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT12_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT15_DOUT.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT15_FUN.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT12_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT13_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT17_DIR.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT15_PDR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT16_FUN.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT14_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT18_DIR.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT2_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT6_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT16_PDR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT5_DOUT.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT13_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT16_DOUT.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT17_FUN.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT15_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT17_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT17_PDR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT10_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT18_FUN.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT16_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT3_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT0_DIR.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT18_PDR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT6_DOUT.VALUE=0 -DRIVER.I2C.VAR.I2C1_STOPBITS.VALUE=2 -DRIVER.I2C.VAR.I2C1_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.I2C.VAR.I2C1_BASE_PORT.VALUE=0xFFF7D44C -DRIVER.I2C.VAR.I2C2_PARITYENA.VALUE=0 -DRIVER.I2C.VAR.I2C1_DATACOUNT.VALUE=8 -DRIVER.I2C.VAR.I2C2_PORT_BIT0_PULL.VALUE=2 -DRIVER.I2C.VAR.I2C1_IGNACK.VALUE=0 -DRIVER.I2C.VAR.I2C1_ADDRMODE.VALUE=7BIT_AMODE -DRIVER.I2C.VAR.I2C2_ALINTLVL.VALUE=0 -DRIVER.I2C.VAR.I2C2_TXDMA.VALUE=0 -DRIVER.I2C.VAR.I2C1_BC_VALUE.VALUE=0x0003 -DRIVER.I2C.VAR.I2C1_TXRX_VALUE.VALUE=0 -DRIVER.I2C.VAR.I2C2_ICXRDYINTLVL.VALUE=0 -DRIVER.I2C.VAR.I2C2_MODCLK.VALUE=8 -DRIVER.I2C.VAR.I2C2_PORT_BIT1_PULL.VALUE=2 -DRIVER.I2C.VAR.I2C2_PORT_BIT0_DIR.VALUE=0 -DRIVER.I2C.VAR.I2C1_ALINTENA.VALUE=0 -DRIVER.I2C.VAR.I2C1_PRESCALE.VALUE=8 -DRIVER.I2C.VAR.I2C2_ARDYINTENA.VALUE=0 -DRIVER.I2C.VAR.I2C2_PORT_BIT1_DIR.VALUE=0 -DRIVER.I2C.VAR.I2C2_PORT_BIT0_FUN.VALUE=0 -DRIVER.I2C.VAR.I2C1_MSMODE.VALUE=1 -DRIVER.I2C.VAR.I2C1_AASLVL.VALUE=0 -DRIVER.I2C.VAR.I2C2_PORT_BIT0_PDR.VALUE=0 -DRIVER.I2C.VAR.I2C2_RM_ENA.VALUE=0 -DRIVER.I2C.VAR.I2C2_PORT_BIT1_FUN.VALUE=0 -DRIVER.I2C.VAR.I2C2_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.I2C.VAR.I2C2_SCDLVL.VALUE=0 -DRIVER.I2C.VAR.I2C2_PORT_BIT1_PDR.VALUE=0 -DRIVER.I2C.VAR.I2C2_STPCND.VALUE=1 -DRIVER.I2C.VAR.I2C1_ALINTLVL.VALUE=0 -DRIVER.I2C.VAR.I2C2_PORT_BIT0_PSL.VALUE=1 -DRIVER.I2C.VAR.I2C1_ARDYINTENA.VALUE=0 -DRIVER.I2C.VAR.I2C2_ARDYINTLVL.VALUE=0 -DRIVER.I2C.VAR.I2C1_ICRRDYINTENA.VALUE=0 -DRIVER.I2C.VAR.I2C2_BASE_PORT.VALUE=0xFFF7D54C -DRIVER.I2C.VAR.I2C1_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.I2C.VAR.I2C2_PORT_BIT1_PSL.VALUE=1 -DRIVER.I2C.VAR.I2C2_DATACOUNT.VALUE=8 -DRIVER.I2C.VAR.I2C1_LENGTH.VALUE=8 -DRIVER.I2C.VAR.I2C1_TXRX.VALUE=TRANSMITTER -DRIVER.I2C.VAR.I2C2_NACKINTENA.VALUE=0 -DRIVER.I2C.VAR.I2C2_IGNACK.VALUE=0 -DRIVER.I2C.VAR.I2C1_PORT_BIT0_DOUT.VALUE=0 -DRIVER.I2C.VAR.I2C1_STACND.VALUE=1 -DRIVER.I2C.VAR.I2C2_TXRX.VALUE=TRANSMITTER -DRIVER.I2C.VAR.I2C1_PORT_BIT0_DIR.VALUE=0 -DRIVER.I2C.VAR.I2C1_ARDYINTLVL.VALUE=0 -DRIVER.I2C.VAR.I2C1_ICRRDYINTLVL.VALUE=0 -DRIVER.I2C.VAR.I2C1_PARITYENA.VALUE=0 -DRIVER.I2C.VAR.I2C1_BASE.VALUE=0xFFF7D400 -DRIVER.I2C.VAR.I2C1_PORT_BIT1_DIR.VALUE=0 -DRIVER.I2C.VAR.I2C1_PORT_BIT1_DOUT.VALUE=0 -DRIVER.I2C.VAR.I2C1_ICXRDYINTENA.VALUE=0 -DRIVER.I2C.VAR.I2C1_PORT_BIT0_FUN.VALUE=0 -DRIVER.I2C.VAR.I2C1_NACKINTENA.VALUE=0 -DRIVER.I2C.VAR.I2C2_NACKINTLVL.VALUE=0 -DRIVER.I2C.VAR.I2C2_BAUDRATE.VALUE=100 -DRIVER.I2C.VAR.I2C1_AAS.VALUE=0 -DRIVER.I2C.VAR.I2C1_BCM.VALUE=0 -DRIVER.I2C.VAR.I2C1_PORT_BIT0_PDR.VALUE=0 -DRIVER.I2C.VAR.I2C2_MSMODE.VALUE=1 -DRIVER.I2C.VAR.I2C2_STOPBITS.VALUE=2 -DRIVER.I2C.VAR.I2C1_BC.VALUE=8_BIT -DRIVER.I2C.VAR.I2C1_PORT_BIT1_FUN.VALUE=0 -DRIVER.I2C.VAR.I2C2_EVENPARITY.VALUE=0 -DRIVER.I2C.VAR.I2C2_ICRRDYINTENA.VALUE=0 -DRIVER.I2C.VAR.I2C1_FDF.VALUE=0 -DRIVER.I2C.VAR.I2C2_BASE.VALUE=0xFFF7D500 -DRIVER.I2C.VAR.I2C2_AASLVL.VALUE=0 -DRIVER.I2C.VAR.I2C2_AAS.VALUE=0 -DRIVER.I2C.VAR.I2C1_ICCH.VALUE=37 -DRIVER.I2C.VAR.I2C2_BCM.VALUE=0 -DRIVER.I2C.VAR.I2C2_BC.VALUE=2_BIT -DRIVER.I2C.VAR.I2C1_MODCLK.VALUE=8 -DRIVER.I2C.VAR.I2C1_ADDRMODE_VALUE.VALUE=0x0001 -DRIVER.I2C.VAR.I2C2_PORT_BIT0_DOUT.VALUE=0 -DRIVER.I2C.VAR.I2C1_ICCL.VALUE=37 -DRIVER.I2C.VAR.I2C1_PORT_BIT1_PDR.VALUE=0 -DRIVER.I2C.VAR.I2C2_ADDRMODE.VALUE=7BIT_AMODE -DRIVER.I2C.VAR.I2C2_FDF.VALUE=0 -DRIVER.I2C.VAR.I2C1_PORT_BIT0_PSL.VALUE=1 -DRIVER.I2C.VAR.I2C1_RXDMA.VALUE=0 -DRIVER.I2C.VAR.I2C1_PORT_BIT1_PSL.VALUE=1 -DRIVER.I2C.VAR.I2C2_BC_VALUE.VALUE=0x0003 -DRIVER.I2C.VAR.I2C1_PORT_BIT0_PULL.VALUE=2 -DRIVER.I2C.VAR.I2C1_ICXRDYINTLVL.VALUE=0 -DRIVER.I2C.VAR.I2C2_ICCH.VALUE=37 -DRIVER.I2C.VAR.I2C1_NACKINTLVL.VALUE=0 -DRIVER.I2C.VAR.I2C2_ICCL.VALUE=37 -DRIVER.I2C.VAR.I2C2_PORT_BIT1_DOUT.VALUE=0 -DRIVER.I2C.VAR.I2C1_SCD.VALUE=0 -DRIVER.I2C.VAR.I2C1_TXDMA.VALUE=0 -DRIVER.I2C.VAR.I2C2_LENGTH.VALUE=8 -DRIVER.I2C.VAR.I2C1_EVENPARITY.VALUE=0 -DRIVER.I2C.VAR.I2C1_RM_ENA.VALUE=0 -DRIVER.I2C.VAR.I2C2_ICRRDYINTLVL.VALUE=0 -DRIVER.I2C.VAR.I2C2_ALINTENA.VALUE=0 -DRIVER.I2C.VAR.I2C2_PRESCALE.VALUE=8 -DRIVER.I2C.VAR.I2C2_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.I2C.VAR.I2C1_SCDLVL.VALUE=0 -DRIVER.I2C.VAR.I2C2_SCD.VALUE=0 -DRIVER.I2C.VAR.I2C1_PORT_BIT1_PULL.VALUE=2 -DRIVER.I2C.VAR.I2C2_TXRX_VALUE.VALUE=0 -DRIVER.I2C.VAR.I2C1_STPCND.VALUE=1 -DRIVER.I2C.VAR.I2C2_ICXRDYINTENA.VALUE=0 -DRIVER.I2C.VAR.I2C2_ADDRMODE_VALUE.VALUE=0x0001 -DRIVER.I2C.VAR.I2C1_BAUDRATE.VALUE=100 -DRIVER.I2C.VAR.I2C2_STACND.VALUE=1 -DRIVER.I2C.VAR.I2C2_RXDMA.VALUE=0 -DRIVER.DCC.VAR.DCC1_ENABLE_KEY.VALUE=10 -DRIVER.DCC.VAR.PINMUX_BASE.VALUE=0xFFFFEA00 -DRIVER.DCC.VAR.DCC1_DETECTION_TIME.VALUE=2500.00 -DRIVER.DCC.VAR.DCC1_CLOCK_SOURCE1_VALUE.VALUE=0x0002 -DRIVER.DCC.VAR.DCC1_ENABLE_ERROR_INTERRUPT.VALUE=0xA -DRIVER.DCC.VAR.DCC2_ENABLE.VALUE=0xA -DRIVER.DCC.VAR.PINMUX_BASE_PORT.VALUE=0xFFFFEA40 -DRIVER.DCC.VAR.DCC2_ENABLE_ERROR_INTERRUPT.VALUE=0xA -DRIVER.DCC.VAR.DCC2_CLOCK_SOURCE0_VALUE.VALUE=0x0001 -DRIVER.DCC.VAR.DCC2_CLOCK_SOURCE0_FREQ.VALUE=0 -DRIVER.DCC.VAR.DCC2_VALID0_SEED.VALUE=0 -DRIVER.DCC.VAR.DCC2_CLKT_N2HET2_0_FREQ.VALUE=1 -DRIVER.DCC.VAR.DCC2_CLOCK_SOURCE1_FREQ.VALUE=0 -DRIVER.DCC.VAR.DCC2_DETECTION_TIME.VALUE=2500.00 -DRIVER.DCC.VAR.DCC2_CLOCK_DRIFT.VALUE=1.0 -DRIVER.DCC.VAR.DCC2_CLOCK_SOURCE1_VALUE.VALUE=0x0002 -DRIVER.DCC.VAR.DCC1_CLKT_N2HET1_31_FREQ.VALUE=1 -DRIVER.DCC.VAR.DCC2_COUNT0_SEED.VALUE=0 -DRIVER.DCC.VAR.DCC2_CLOCK_SOURCE0.VALUE=OSCIN -DRIVER.DCC.VAR.DCC2_CLOCK_SOURCE1.VALUE=VCLK -DRIVER.DCC.VAR.DCC1_CLOCK_SOURCE0_FREQ.VALUE=16.0 -DRIVER.DCC.VAR.DCC1_VALID0_SEED.VALUE=792 -DRIVER.DCC.VAR.DCC1_BASE.VALUE=0xFFFFEC00 -DRIVER.DCC.VAR.DCC2_COUNT1_SEED.VALUE=0 -DRIVER.DCC.VAR.DCC1_CLOCK_SOURCE1_FREQ.VALUE=300.00 -DRIVER.DCC.VAR.DCC1_CLOCK_DRIFT.VALUE=1.0 -DRIVER.DCC.VAR.DCC1_ENABLE.VALUE=0xA -DRIVER.DCC.VAR.DCC1_ENABLE_SINGLESHOT_MODE.VALUE=0x5 -DRIVER.DCC.VAR.DCC2_ENABLE_SINGLESHOT_MODE.VALUE=0x5 -DRIVER.DCC.VAR.DCC2_BASE.VALUE=0xFFFFF400 -DRIVER.DCC.VAR.DCC1_DONE_INTERRUPT_ENABLE.VALUE=0xA -DRIVER.DCC.VAR.DCC2_DONE_INTERRUPT_ENABLE.VALUE=0xA -DRIVER.DCC.VAR.DCC2_ENABLE_KEY.VALUE=0xA -DRIVER.DCC.VAR.DCC1_COUNT0_SEED.VALUE=39204 -DRIVER.DCC.VAR.DCC1_CLOCK_SOURCE0_VALUE.VALUE=0x0001 -DRIVER.DCC.VAR.DCC1_CLOCK_SOURCE0.VALUE=OSCIN -DRIVER.DCC.VAR.DCC1_CLOCK_SOURCE1.VALUE=PLL1 -DRIVER.DCC.VAR.CLKT_TCK_FREQ.VALUE=12.0 -DRIVER.DCC.VAR.DCC1_COUNT1_SEED.VALUE=742500 -DRIVER.PINMUX.VAR.EQEP2A_FILTER.VALUE=0 -DRIVER.PINMUX.VAR.MUX61_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX53_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX45_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX37_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX29_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX7_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX61_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX53_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX45_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX37_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX29_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX7_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_SOC4A_SELECT.VALUE=ON -DRIVER.PINMUX.VAR.ETPWM_TIME_BASE_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX61_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX53_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX50_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX45_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX42_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX37_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX34_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX29_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX26_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX18_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX61_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX53_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX45_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX37_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX29_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX61_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX53_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX45_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX37_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX29_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX61_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX53_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX45_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX37_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX29_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX99_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_96_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_88_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_5_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX30_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX22_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX14_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX30_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX22_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX14_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX30_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX22_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX14_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_81_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_73_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_65_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_57_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_49_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX30_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX22_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX14_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL5_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX30_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX22_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX14_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL5_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX30_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX22_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX14_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX101_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL55_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL47_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL39_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_50_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_42_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_34_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_26_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_18_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.ECAP5_FILTER.VALUE=0 -DRIVER.PINMUX.VAR.EMIF_OUTPUT_ENABLE_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.PINMUX10.VALUE="PINMUX_BALL_K17_EMIF_nCS_3 | PINMUX_BALL_M17_EMIF_nCS_4 | PINMUX_BALL_R3_EMIF_nRAS | PINMUX_BALL_P3_EMIF_nWAIT" -DRIVER.PINMUX.VAR.MUX11_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL40_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL32_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL24_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL16_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_11_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX11.VALUE="PINMUX_BALL_D17_EMIF_nWE | PINMUX_BALL_E9_ETMDATA_08 | PINMUX_BALL_E8_ETMDATA_09 | PINMUX_BALL_E7_ETMDATA_10" -DRIVER.PINMUX.VAR.PINMUX20.VALUE="PINMUX_BALL_M1_GIOA_7 | PINMUX_BALL_F2_GIOB_2 | PINMUX_BALL_W10_GIOB_3 | PINMUX_BALL_J2_GIOB_6" -DRIVER.PINMUX.VAR.PINMUX12.VALUE="PINMUX_BALL_E6_ETMDATA_11 | PINMUX_BALL_E13_ETMDATA_12 | PINMUX_BALL_E12_ETMDATA_13 | PINMUX_BALL_E11_ETMDATA_14" -DRIVER.PINMUX.VAR.PINMUX21.VALUE="PINMUX_BALL_F1_GIOB_7 | PINMUX_BALL_R2_MIBSPI1NCS_0 | PINMUX_BALL_F3_MIBSPI1NCS_1 | PINMUX_BALL_G3_MIBSPI1NCS_2" -DRIVER.PINMUX.VAR.PINMUX13.VALUE="PINMUX_BALL_E10_ETMDATA_15 | PINMUX_BALL_K15_ETMDATA_16 | PINMUX_BALL_L15_ETMDATA_17 | PINMUX_BALL_M15_ETMDATA_18" -DRIVER.PINMUX.VAR.ECAP3_FILTER_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.PINMUX30.VALUE="PINMUX_BALL_E18_N2HET1_08 | PINMUX_BALL_V7_N2HET1_09 | PINMUX_BALL_D19_N2HET1_10 | PINMUX_BALL_E3_N2HET1_11" -DRIVER.PINMUX.VAR.PINMUX22.VALUE="PINMUX_BALL_J3_MIBSPI1NCS_3 | PINMUX_BALL_G19_MIBSPI1NENA | PINMUX_BALL_V9_MIBSPI3CLK | PINMUX_BALL_V10_MIBSPI3NCS_0" -DRIVER.PINMUX.VAR.PINMUX14.VALUE="PINMUX_BALL_N15_ETMDATA_19 | PINMUX_BALL_E5_ETMDATA_20 | PINMUX_BALL_F5_ETMDATA_21 | PINMUX_BALL_G5_ETMDATA_22" -DRIVER.PINMUX.VAR.MUX92_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX84_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX76_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX68_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX31.VALUE="PINMUX_BALL_B4_N2HET1_12 | PINMUX_BALL_N2_N2HET1_13 | PINMUX_BALL_N1_N2HET1_15 | PINMUX_BALL_A4_N2HET1_16" -DRIVER.PINMUX.VAR.PINMUX23.VALUE="PINMUX_BALL_V5_MIBSPI3NCS_1 | PINMUX_BALL_B2_MIBSPI3NCS_2 | PINMUX_BALL_C3_MIBSPI3NCS_3 | PINMUX_BALL_W9_MIBSPI3NENA" -DRIVER.PINMUX.VAR.PINMUX15.VALUE="PINMUX_BALL_K5_ETMDATA_23 | PINMUX_BALL_L5_ETMDATA_24 | PINMUX_BALL_M5_ETMDATA_25 | PINMUX_BALL_N5_ETMDATA_26" -DRIVER.PINMUX.VAR.PINMUX32.VALUE="PINMUX_BALL_A13_N2HET1_17 | PINMUX_BALL_J1_N2HET1_18 | PINMUX_BALL_B13_N2HET1_19 | PINMUX_BALL_P2_N2HET1_20" -DRIVER.PINMUX.VAR.PINMUX24.VALUE="PINMUX_BALL_W8_MIBSPI3SIMO | PINMUX_BALL_V8_MIBSPI3SOMI | PINMUX_BALL_H19_MIBSPI5CLK | PINMUX_BALL_E19_MIBSPI5NCS_0" -DRIVER.PINMUX.VAR.PINMUX16.VALUE="PINMUX_BALL_P5_ETMDATA_27 | PINMUX_BALL_R5_ETMDATA_28 | PINMUX_BALL_R6_ETMDATA_29 | PINMUX_BALL_R7_ETMDATA_30" -DRIVER.PINMUX.VAR.SIGNAL56_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL48_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX131_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX123_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX115_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX107_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX33.VALUE="PINMUX_BALL_H4_N2HET1_21 | PINMUX_BALL_B3_N2HET1_22 | PINMUX_BALL_J4_N2HET1_23 | PINMUX_BALL_P1_N2HET1_24" -DRIVER.PINMUX.VAR.PINMUX25.VALUE="PINMUX_BALL_B6_MIBSPI5NCS_1 | PINMUX_BALL_W6_MIBSPI5NCS_2 | PINMUX_BALL_T12_MIBSPI5NCS_3 | PINMUX_BALL_H18_MIBSPI5NENA" -DRIVER.PINMUX.VAR.PINMUX17.VALUE="PINMUX_BALL_R8_ETMDATA_31 | PINMUX_BALL_R9_ETMTRACECLKIN | PINMUX_BALL_R10_ETMTRACECLKOUT | PINMUX_BALL_R11_ETMTRACECTL" -DRIVER.PINMUX.VAR.SIGNAL56_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL48_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX131_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX123_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX115_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX107_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.GIOB6_DMA_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.EQEP2B_FILTER_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.ETPWM7_EQEPERR_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.PINMUX34.VALUE="PINMUX_BALL_A14_N2HET1_26 | PINMUX_BALL_K19_N2HET1_28 | PINMUX_BALL_B11_N2HET1_30 | PINMUX_BALL_D8_N2HET2_01" -DRIVER.PINMUX.VAR.PINMUX26.VALUE="PINMUX_BALL_J19_MIBSPI5SIMO_0 | PINMUX_BALL_E16_MIBSPI5SIMO_1 | PINMUX_BALL_H17_MIBSPI5SIMO_2 | PINMUX_BALL_G17_MIBSPI5SIMO_3" -DRIVER.PINMUX.VAR.PINMUX18.VALUE="PINMUX_BALL_B15_FRAYTX1 | PINMUX_BALL_B8_FRAYTX2 | PINMUX_BALL_B16_FRAYTXEN1 | PINMUX_BALL_B9_FRAYTXEN2" -DRIVER.PINMUX.VAR.MUX131_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX123_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX115_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX107_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX35.VALUE="PINMUX_BALL_D7_N2HET2_02 | PINMUX_BALL_D3_N2HET2_12 | PINMUX_BALL_D2_N2HET2_13 | PINMUX_BALL_D1_N2HET2_14" -DRIVER.PINMUX.VAR.PINMUX27.VALUE="PINMUX_BALL_J18_MIBSPI5SOMI_0 | PINMUX_BALL_E17_MIBSPI5SOMI_1 | PINMUX_BALL_H16_MIBSPI5SOMI_2 | PINMUX_BALL_G16_MIBSPI5SOMI_3" -DRIVER.PINMUX.VAR.PINMUX19.VALUE="PINMUX_BALL_C1_GIOA_2 | PINMUX_BALL_E1_GIOA_3 | PINMUX_BALL_B5_GIOA_5 | PINMUX_BALL_H3_GIOA_6" -DRIVER.PINMUX.VAR.MUX131_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX123_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX115_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX107_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX36.VALUE="PINMUX_BALL_P4_N2HET2_19 | PINMUX_BALL_T5_N2HET2_20 | PINMUX_BALL_T4_MII_RXCLK | PINMUX_BALL_U7_MII_TX_CLK" -DRIVER.PINMUX.VAR.PINMUX28.VALUE="PINMUX_BALL_K18_N2HET1_00 | PINMUX_BALL_V2_N2HET1_01 | PINMUX_BALL_W5_N2HET1_02 | PINMUX_BALL_U1_N2HET1_03" -DRIVER.PINMUX.VAR.MUX131_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX123_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX115_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX107_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX98_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX37.VALUE="PINMUX_BALL_E2_N2HET2_03 | PINMUX_BALL_N3_N2HET2_07" -DRIVER.PINMUX.VAR.PINMUX29.VALUE="PINMUX_BALL_B12_N2HET1_04 | PINMUX_BALL_V6_N2HET1_05 | PINMUX_BALL_W3_N2HET1_06 | PINMUX_BALL_T1_N2HET1_07" -DRIVER.PINMUX.VAR.MUX131_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX123_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX115_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX107_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX98_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX98_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX7_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL3_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX98_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX80.VALUE=SIGNAL_AD2EVT_T10 -DRIVER.PINMUX.VAR.SIGNAL41_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL33_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL25_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL17_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX100_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX98_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.TEMP2_ENABLE.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX81.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL41_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL33_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL25_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL17_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX100_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX98_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX90.VALUE="SIGNAL_MII_RX_DV_U6 | SIGNAL_MII_RX_ER_U5 | SIGNAL_MII_RXCLK_T4 | SIGNAL_MII_RXD_0_U4" -DRIVER.PINMUX.VAR.PINMUX82.VALUE=0 -DRIVER.PINMUX.VAR.MUX127_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX119_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX100_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_133_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_125_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_117_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_109_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX91.VALUE="SIGNAL_MII_RXD_1_T3 | SIGNAL_MII_RXD_2_U3 | SIGNAL_MII_RXD_3_V3 | SIGNAL_MII_TX_CLK_U7" -DRIVER.PINMUX.VAR.PINMUX83.VALUE=SIGNAL_GIOA_0_A5 -DRIVER.PINMUX.VAR.MUX100_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX92.VALUE="SIGNAL_N2HET1_17_A13 | SIGNAL_N2HET1_19_B13 | SIGNAL_N2HET1_21_H4 | SIGNAL_N2HET1_23_J4" -DRIVER.PINMUX.VAR.PINMUX84.VALUE="SIGNAL_GIOA_1_C2 | SIGNAL_GIOA_2_C1 | SIGNAL_GIOA_3_E1 | SIGNAL_GIOA_4_A6" -DRIVER.PINMUX.VAR.MUX100_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX91_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX83_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX75_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX67_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX59_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX93.VALUE="SIGNAL_N2HET1_25_M3 | SIGNAL_N2HET1_27_A9 | SIGNAL_N2HET1_29_A3 | SIGNAL_N2HET1_31_J17" -DRIVER.PINMUX.VAR.PINMUX85.VALUE="SIGNAL_GIOA_5_B5 | SIGNAL_GIOA_6_H3 | SIGNAL_GIOA_7_M1 | SIGNAL_GIOB_0_M2" -DRIVER.PINMUX.VAR.MUX100_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX91_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX83_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX75_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX67_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX59_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.GIOB0_DMA_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.GIOA2_DMA_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.PINMUX94.VALUE="SIGNAL_N2HET2_00_D6 | SIGNAL_N2HET2_01_D8 | SIGNAL_N2HET2_02_D7 | SIGNAL_N2HET2_03_E2" -DRIVER.PINMUX.VAR.PINMUX86.VALUE="SIGNAL_GIOB_1_K2 | SIGNAL_GIOB_2_F2 | SIGNAL_GIOB_3_W10 | SIGNAL_GIOB_4_G1" -DRIVER.PINMUX.VAR.MUX91_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX83_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX75_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX67_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX61_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX59_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX53_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX45_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX37_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX29_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_110_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_102_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX95.VALUE="SIGNAL_N2HET2_04_D13 | SIGNAL_N2HET2_05_D12 | SIGNAL_N2HET2_06_D11 | SIGNAL_N2HET2_07_N3" -DRIVER.PINMUX.VAR.PINMUX87.VALUE="SIGNAL_GIOB_5_G2 | SIGNAL_GIOB_6_J2 | SIGNAL_GIOB_7_F1 | SIGNAL_MDIO_F4" -DRIVER.PINMUX.VAR.MUX91_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX83_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX75_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX67_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX59_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM2_EQEPERR12.VALUE=EQEPERR12 -DRIVER.PINMUX.VAR.PINMUX96.VALUE="SIGNAL_N2HET2_08_K16 | SIGNAL_N2HET2_09_L16 | SIGNAL_N2HET2_10_M16 | SIGNAL_N2HET2_11_N16" -DRIVER.PINMUX.VAR.PINMUX88.VALUE="SIGNAL_MIBSPI1NCS_4_U10 | SIGNAL_MIBSPI1NCS_5_U9" -DRIVER.PINMUX.VAR.SIGNAL10_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX91_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX83_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX75_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX67_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX59_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX6_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX97.VALUE="SIGNAL_N2HET2_12_D3 | SIGNAL_N2HET2_13_D2 | SIGNAL_N2HET2_14_D1 | SIGNAL_N2HET2_15_K4" -DRIVER.PINMUX.VAR.PINMUX89.VALUE="SIGNAL_MII_COL_W4 | SIGNAL_MII_CRS_V4" -DRIVER.PINMUX.VAR.SIGNAL10_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX91_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX83_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX75_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX67_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX59_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX6_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX98.VALUE="SIGNAL_N2HET2_16_L4 | SIGNAL_N2HET2_18_N4 | SIGNAL_N2HET2_20_T5 | SIGNAL_N2HET2_22_T7" -DRIVER.PINMUX.VAR.MUX6_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX99.VALUE="SIGNAL_nTZ1_1_N19 | SIGNAL_nTZ1_2_F1 | SIGNAL_nTZ1_3_J3" -DRIVER.PINMUX.VAR.MUX6_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.EQEP1A_FILTER.VALUE=0 -DRIVER.PINMUX.VAR.MUX60_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX52_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX44_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX36_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX28_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX6_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX60_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX52_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX44_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX36_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX28_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX6_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.EQEP1I_FILTER_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.ETPWM_SOC3A_SELECT.VALUE=ON -DRIVER.PINMUX.VAR.MUX60_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX52_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX44_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX36_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX28_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX60_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX52_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX44_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX36_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX28_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX60_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX52_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX44_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX36_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX28_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX60_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX52_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX44_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX36_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX28_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.TEMP3_ENABLE_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX120_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX112_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX104_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_94_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_86_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_78_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_3_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX21_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX13_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX21_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX13_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM3_EQEPERR_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.GIOA_DISABLE_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX30_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX22_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX21_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX14_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX13_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_71_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_63_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_55_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_47_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_39_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX21_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX13_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL4_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX21_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX13_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL4_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX21_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX13_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX95_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX87_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX79_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL61_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL53_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL45_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL37_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL29_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_40_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_32_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_24_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_16_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.ECAP3_FILTER.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM7_EQEPERR12.VALUE=EQEPERR12 -DRIVER.PINMUX.VAR.MUX129_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX129_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_TBCLK_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX129_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL30_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL22_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL14_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX129_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX129_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX129_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.I2C1.VALUE=0 -DRIVER.PINMUX.VAR.I2C2.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL55_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL47_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL39_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX130_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX122_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX114_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX106_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL55_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL47_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL39_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX130_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX122_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX114_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX106_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX130_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX122_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX114_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX106_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL8_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.GATE_EMIF_CLK.VALUE=0 -DRIVER.PINMUX.VAR.MUX130_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX122_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX114_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX106_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX130_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX122_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX114_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX106_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX97_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX89_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX130_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX122_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX114_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX106_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX97_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX89_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.EQEP1A_FILTER_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX97_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX89_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX80_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX72_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX64_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX56_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX48_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL1_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.GIOA0_DMA.VALUE=0 -DRIVER.PINMUX.VAR.MUX97_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX89_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL40_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL32_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL24_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL16_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX97_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX89_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL40_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL32_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL24_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL16_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX97_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX89_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.GIOB5_DMA_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.GIOA7_DMA_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.PIN_MUX_131_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_123_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_115_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_107_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX90_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX82_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX74_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX66_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX58_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX90_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX82_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX74_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX66_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX58_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX90_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX82_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX74_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX66_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX58_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX3_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_100_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX90_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX82_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX74_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX66_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX58_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX90_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX82_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX74_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX66_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX58_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX5_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX90_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX82_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX74_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX66_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX58_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX5_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.EQEP1S_FILTER_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX131_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX123_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX115_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX107_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX5_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX5_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX51_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX43_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX35_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX27_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX19_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX5_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX51_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX43_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX35_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX27_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX19_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX5_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.GIOA1_DMA_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.ECAP5_FILTER_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.ETPWM_SOC2A_SELECT.VALUE=ON -DRIVER.PINMUX.VAR.MUX51_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX43_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX41_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX35_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX33_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX27_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX25_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX19_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX17_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_99_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_8_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.GIOA1_DMA.VALUE=0 -DRIVER.PINMUX.VAR.MUX51_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX43_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX35_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX27_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX19_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX51_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX43_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX35_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX27_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX19_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX51_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX43_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX35_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX27_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX19_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.ALT_ADC_SELECT.VALUE=1 -DRIVER.PINMUX.VAR.MUX98_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_92_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_84_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_76_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_68_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_1_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX20_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX12_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX20_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX12_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX20_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX12_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL58_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_61_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_53_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_45_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_37_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_29_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX20_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX12_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL3_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX20_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX12_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL3_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX20_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX12_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX100_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL51_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL43_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL35_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL27_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL19_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_30_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_22_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_14_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.ECAP1_FILTER.VALUE=0 -DRIVER.PINMUX.VAR.CAN4.VALUE=0 -DRIVER.PINMUX.VAR.MUX128_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX128_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX128_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX10_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL20_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL12_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.GIOB0_DMA.VALUE=0 -DRIVER.PINMUX.VAR.GIOA2_DMA.VALUE=0 -DRIVER.PINMUX.VAR.MUX128_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX128_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX128_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.ETHERNET_SELECT.VALUE=MII -DRIVER.PINMUX.VAR.MUX91_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX83_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX75_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX67_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX59_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM5_EQEPERR12.VALUE=EQEPERR12 -DRIVER.PINMUX.VAR.CONCOUNT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL54_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL46_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL38_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX121_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX113_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX105_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL54_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL46_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL38_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX121_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX113_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX105_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.EQEP2I_FILTER_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX121_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX113_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX105_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL6_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX121_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX113_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX105_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX121_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX113_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX105_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX96_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX88_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX121_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX113_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX105_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX96_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX88_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX96_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX88_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX6_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_128_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX96_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX88_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL31_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL23_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL15_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX96_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX88_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.TEMP_CHECK.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL31_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL23_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL15_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX96_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX88_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM4_EQEPERR_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.GIOB_DISABLE_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX134_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX126_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX118_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_121_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_113_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_105_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.GIOB1_DMA.VALUE=0 -DRIVER.PINMUX.VAR.GIOA3_DMA.VALUE=0 -DRIVER.PINMUX.VAR.EQEP2I_FILTER.VALUE=0 -DRIVER.PINMUX.VAR.MUX81_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX73_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX65_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX57_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX49_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX81_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX73_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX65_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX57_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX49_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_TZ2_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX81_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX73_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX65_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX60_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX57_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX52_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX49_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX44_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX36_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX28_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX81_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX73_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX65_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX57_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX49_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.EQEP2B_FILTER.VALUE=0 -DRIVER.PINMUX.VAR.MUX81_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX73_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX65_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX57_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX49_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX4_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX81_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX73_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX65_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX57_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX49_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX4_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.GIOB4_DMA_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.GIOA6_DMA_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.ECAP.VALUE=0 -DRIVER.PINMUX.VAR.MUX4_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX4_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX50_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX42_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX34_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX26_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX18_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX4_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX50_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX42_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX34_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX26_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX18_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX4_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_SOC1A_SELECT.VALUE=ON -DRIVER.PINMUX.VAR.MUX50_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX42_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX34_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX26_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX18_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_97_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_89_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_6_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX50_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX42_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX34_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX26_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX18_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL9_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX50_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX42_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX34_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX26_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX18_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL9_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX50_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX42_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX34_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX26_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX18_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.ECAP2_FILTER_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX111_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX103_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_90_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_82_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_74_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_66_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_58_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.GIOB2_DMA.VALUE=0 -DRIVER.PINMUX.VAR.GIOA4_DMA.VALUE=0 -DRIVER.PINMUX.VAR.MUX11_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX11_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.GIOA0_DMA_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.EQEP2A_FILTER_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX21_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX13_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX11_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL56_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL48_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_51_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_43_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_35_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_27_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_19_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX11_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.ECAP6_FILTER.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL2_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX11_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_TBCLK_SYNC_ENABLE.VALUE=0 -DRIVER.PINMUX.VAR.AD1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL2_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX11_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.AD2.VALUE=0 -DRIVER.PINMUX.VAR.MUX94_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX86_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX78_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL41_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL33_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL25_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL17_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_20_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_12_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX127_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX119_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX127_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX119_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX127_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX119_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL10_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX127_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX119_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX127_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX119_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX127_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX119_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.EQEP2S_FILTER_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX9_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.GIOB3_DMA.VALUE=0 -DRIVER.PINMUX.VAR.GIOA5_DMA.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL61_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL53_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL45_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL37_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL29_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX120_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX112_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX104_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL61_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL53_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL45_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL37_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL29_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX120_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX112_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX104_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX129_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX120_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX112_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX104_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL4_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.ALT_ADC.VALUE=0 -DRIVER.PINMUX.VAR.I2C.VALUE=0 -DRIVER.PINMUX.VAR.MUX120_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX112_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX104_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX120_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX112_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX104_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX95_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX87_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX79_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.TEMP3_ENABLE.VALUE=0 -DRIVER.PINMUX.VAR.MUX120_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX112_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX104_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX95_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX87_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX79_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX95_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX87_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX79_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX71_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX63_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX55_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX47_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX39_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_134_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_126_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_118_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX95_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX87_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX79_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM3_EQEPERR12.VALUE=EQEPERR12 -DRIVER.PINMUX.VAR.SIGNAL30_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL22_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL14_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX95_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX87_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX79_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL30_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL22_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL14_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX95_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX87_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX79_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.TEMP2_ENABLE_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.PIN_MUX_111_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_103_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.EQEP1I_FILTER.VALUE=0 -DRIVER.PINMUX.VAR.MUX80_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX72_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX64_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX56_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX48_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.HET1.VALUE=0 -DRIVER.PINMUX.VAR.MUX80_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX72_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX64_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX56_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX48_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_SOC7A_SELECT.VALUE=ON -DRIVER.PINMUX.VAR.HET2.VALUE=0 -DRIVER.PINMUX.VAR.MUX80_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX72_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX64_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX56_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX48_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX2_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.GIOB4_DMA.VALUE=0 -DRIVER.PINMUX.VAR.GIOA6_DMA.VALUE=0 -DRIVER.PINMUX.VAR.MUX80_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX72_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX64_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX56_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX48_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.EQEP1B_FILTER.VALUE=0 -DRIVER.PINMUX.VAR.MUX80_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX72_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX64_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX56_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX48_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX3_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX80_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX72_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX64_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX56_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX48_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX3_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX130_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX122_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX114_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX106_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX3_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX3_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.EMIF.VALUE=0 -DRIVER.PINMUX.VAR.MUX41_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX33_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX25_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX17_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX3_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_TZ1.VALUE=ASYNC -DRIVER.PINMUX.VAR.MUX41_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX33_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX25_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX17_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX3_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_TZ2.VALUE=ASYNC -DRIVER.PINMUX.VAR.MUX41_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX40_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX33_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX32_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX25_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX24_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX17_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX16_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_95_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_87_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_79_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_4_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_TZ3.VALUE=ASYNC -DRIVER.PINMUX.VAR.MUX41_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX33_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX25_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX17_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL8_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX41_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX33_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX25_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX17_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL8_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX41_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX33_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX25_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX17_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.GIOB3_DMA_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.GIOA5_DMA_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX97_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX89_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_80_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_72_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_64_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_56_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_48_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.GIOA.VALUE=0 -DRIVER.PINMUX.VAR.GIOB.VALUE=0 -DRIVER.PINMUX.VAR.MUX10_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.GIOB_DISABLE.VALUE=0 -DRIVER.PINMUX.VAR.MUX10_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX10_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL54_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL46_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL38_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_41_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_33_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_25_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_17_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.GIOB5_DMA.VALUE=0 -DRIVER.PINMUX.VAR.GIOA7_DMA.VALUE=0 -DRIVER.PINMUX.VAR.MUX10_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.ECAP4_FILTER.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL1_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX10_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL1_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX10_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM5_EQEPERR_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.SIGNAL31_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL23_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL15_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_10_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL59_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX134_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX126_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX118_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL59_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX134_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX126_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX118_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.EQEP.VALUE=0 -DRIVER.PINMUX.VAR.MUX134_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX126_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX118_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX134_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX126_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX118_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX134_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX126_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX118_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX134_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX126_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX118_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX90_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX82_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX74_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX66_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX58_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL9_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MIBSPI1.VALUE=0 -DRIVER.PINMUX.VAR.MIBSPI2.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL60_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL52_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL44_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL36_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL28_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX111_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX103_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MIBSPI3.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL60_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL52_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL44_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL36_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL28_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX111_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX103_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MIBSPI4.VALUE=0 -DRIVER.PINMUX.VAR.OHCI0.VALUE=0 -DRIVER.PINMUX.VAR.MUX111_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX103_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL2_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.GIOB6_DMA.VALUE=0 -DRIVER.PINMUX.VAR.MIBSPI5.VALUE=0 -DRIVER.PINMUX.VAR.W2FC.VALUE=0 -DRIVER.PINMUX.VAR.OHCI1.VALUE=0 -DRIVER.PINMUX.VAR.MUX111_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX103_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.EQEP2S_FILTER.VALUE=0 -DRIVER.PINMUX.VAR.MUX111_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX103_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX94_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX86_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX78_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.TEMP1_ENABLE.VALUE=0 -DRIVER.PINMUX.VAR.MUX111_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX103_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX94_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX86_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX78_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.ECAP4_FILTER_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX94_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX86_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX78_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX5_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_132_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_124_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_116_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_108_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX94_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX86_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX78_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL21_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL13_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX94_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX86_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX78_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX9_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL21_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL13_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX94_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX86_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX78_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX9_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX133_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX125_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX117_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX109_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX9_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_101_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX9_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX71_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX63_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX55_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX47_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX39_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX9_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX71_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX63_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX55_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX47_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX39_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX9_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_SOC6A_SELECT.VALUE=ON -DRIVER.PINMUX.VAR.MUX71_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX63_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX55_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX51_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX47_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX43_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX39_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX35_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX27_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX19_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX71_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX63_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX55_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX47_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX39_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM1_EQEPERR12.VALUE=EQEPERR12 -DRIVER.PINMUX.VAR.MUX71_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX63_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX55_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX47_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX39_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX2_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.EMIF_OUTPUT_ENABLE.VALUE=0 -DRIVER.PINMUX.VAR.MUX71_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX63_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX55_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX47_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX39_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX2_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM1_EQEPERR_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX2_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_9_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.GIOB7_DMA.VALUE=0 -DRIVER.PINMUX.VAR.MUX2_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX40_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX32_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX24_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX16_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX2_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX40_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX32_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX24_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX16_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX2_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_EPWM1SYNCI_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX40_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX32_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX24_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX16_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_93_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_85_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_77_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_69_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_2_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX40_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX32_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX24_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX16_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL7_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX40_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX32_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX24_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX16_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL7_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX40_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX32_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX24_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX16_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX110_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX102_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL59_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_70_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_62_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_54_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_46_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_38_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MII.VALUE=0 -DRIVER.PINMUX.VAR.SCI2.VALUE=0 -DRIVER.PINMUX.VAR.GIOA_DISABLE.VALUE=0 -DRIVER.PINMUX.VAR.SCI3.VALUE=0 -DRIVER.PINMUX.VAR.GATE_EMIF_CLK_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.SCI4.VALUE=0 -DRIVER.PINMUX.VAR.MUX20_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX12_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL60_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL52_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL44_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL36_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL28_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_31_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_23_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_15_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.ECAP2_FILTER.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_TIME_BASE_SYNC_ENABLE.VALUE=0 -DRIVER.PINMUX.VAR.GIOB2_DMA_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.GIOA4_DMA_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX93_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX85_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX77_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX69_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL21_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL13_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_EPWM1SYNCI.VALUE=ASYNC -DRIVER.PINMUX.VAR.ETPWM6_EQEPERR12.VALUE=EQEPERR12 -DRIVER.PINMUX.VAR.SIGNAL58_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX133_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX125_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX117_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX109_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL58_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX133_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX125_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX117_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX109_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX133_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX125_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX117_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX109_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_SOC1A.VALUE=1 -DRIVER.PINMUX.VAR.SCI.VALUE=0 -DRIVER.PINMUX.VAR.MUX133_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX125_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX117_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX109_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX133_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX125_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX117_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX109_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_SOC2A.VALUE=1 -DRIVER.PINMUX.VAR.MUX133_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX125_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX117_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX109_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX8_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL7_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_SOC3A.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL51_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL43_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL35_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL27_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL19_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX110_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX102_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_SOC4A.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL51_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL43_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL35_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL27_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL19_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX110_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX102_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX128_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX110_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX102_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_129_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_SOC5A.VALUE=1 -DRIVER.PINMUX.VAR.ETPWM.VALUE=0 -DRIVER.PINMUX.VAR.MUX110_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX102_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.EQEP1S_FILTER.VALUE=0 -DRIVER.PINMUX.VAR.MUX110_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX102_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX93_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX85_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX77_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX69_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_SOC6A.VALUE=1 -DRIVER.PINMUX.VAR.MUX110_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX102_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX93_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX85_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX77_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX69_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX93_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX85_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX77_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX70_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX69_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX62_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX54_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX46_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX38_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_130_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_122_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_114_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_106_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_SOC7A.VALUE=1 -DRIVER.PINMUX.VAR.MUX93_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX85_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX77_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX69_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL20_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL12_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX93_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX85_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX77_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX69_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX8_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL20_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL12_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX93_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX85_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX77_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX69_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX8_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.ECAP1_FILTER_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.ETPWM_TZ3_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX8_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX8_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX70_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX62_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX54_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX46_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX38_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX8_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX70_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX62_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX54_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX46_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX38_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX8_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.EQEP1B_FILTER_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.ETPWM_SOC5A_SELECT.VALUE=ON -DRIVER.PINMUX.VAR.ETPWM6_EQEPERR_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX70_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX62_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX54_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX46_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX38_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX1_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX70_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX62_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX54_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX46_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX38_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX70_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX62_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX54_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX46_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX38_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX1_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX70_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX62_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX54_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX46_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX38_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX1_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX121_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX113_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX105_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX1_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_98_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_7_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX1_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX31_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX23_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX15_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX1_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX31_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX23_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX15_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX1_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX31_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX31_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX23_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX23_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX15_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX15_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_91_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_83_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_75_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_67_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_59_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX31_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX23_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX15_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL6_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX31_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX23_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX15_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL6_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX31_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX23_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX15_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX96_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX88_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL57_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL49_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_60_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_52_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_44_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_36_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_28_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.GIOB7_DMA_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.ECAP6_FILTER_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.SIGNAL50_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL42_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL34_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL26_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL18_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_21_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_13_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL11_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SPI2.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL57_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL49_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX132_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX124_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX116_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX108_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL57_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL49_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX132_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX124_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX116_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX108_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.TEMP1_ENABLE_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.SPI4.VALUE=0 -DRIVER.PINMUX.VAR.MUX132_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX124_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX116_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX108_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.RMII.VALUE=0 -DRIVER.PINMUX.VAR.MUX132_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX124_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX116_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX108_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX0.VALUE="PINMUX_BALL_N19_AD1EVT | PINMUX_BALL_D4_EMIF_ADDR_00 | PINMUX_BALL_D5_EMIF_ADDR_01 | PINMUX_BALL_C4_EMIF_ADDR_06" -DRIVER.PINMUX.VAR.MUX132_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX124_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX116_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX108_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX99_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX1.VALUE="PINMUX_BALL_C5_EMIF_ADDR_07 | PINMUX_BALL_C6_EMIF_ADDR_08 | PINMUX_BALL_C7_EMIF_ADDR_09 | PINMUX_BALL_C8_EMIF_ADDR_10" -DRIVER.PINMUX.VAR.MUX132_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX124_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX116_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX108_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX99_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.GIOB1_DMA_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.GIOA3_DMA_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.ETPWM2_EQEPERR_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.PINMUX2.VALUE="PINMUX_BALL_C9_EMIF_ADDR_11 | PINMUX_BALL_C10_EMIF_ADDR_12 | PINMUX_BALL_C11_EMIF_ADDR_13 | PINMUX_BALL_C12_EMIF_ADDR_14" -DRIVER.PINMUX.VAR.MUX99_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX81_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX73_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX65_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX57_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX49_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL5_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX3.VALUE="PINMUX_BALL_C13_EMIF_ADDR_15 | PINMUX_BALL_D14_EMIF_ADDR_16 | PINMUX_BALL_C14_EMIF_ADDR_17 | PINMUX_BALL_D15_EMIF_ADDR_18" -DRIVER.PINMUX.VAR.MUX99_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM4_EQEPERR12.VALUE=EQEPERR12 -DRIVER.PINMUX.VAR.PINMUX4.VALUE="PINMUX_BALL_C15_EMIF_ADDR_19 | PINMUX_BALL_C16_EMIF_ADDR_20 | PINMUX_BALL_C17_EMIF_ADDR_21" -DRIVER.PINMUX.VAR.SIGNAL50_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL42_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL34_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL26_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL18_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX101_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX99_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX5.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL50_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL42_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL34_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL26_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL18_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX101_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX99_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX6.VALUE=0 -DRIVER.PINMUX.VAR.MUX101_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_127_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_119_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.ALT_ADC_A.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX7.VALUE=0 -DRIVER.PINMUX.VAR.MUX101_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.ALT_ADC_B.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX8.VALUE=PINMUX_BALL_D16_EMIF_BA_1 -DRIVER.PINMUX.VAR.MUX101_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX92_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX84_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX76_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX68_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX9.VALUE="PINMUX_BALL_R4_EMIF_nCAS | PINMUX_BALL_N17_EMIF_nCS_0 | PINMUX_BALL_L17_EMIF_nCS_2" -DRIVER.PINMUX.VAR.MUX101_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX92_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX84_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX76_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX68_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX92_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX84_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX76_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX68_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX4_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_120_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_112_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_104_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX92_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX84_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX76_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX68_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL11_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX92_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX84_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX76_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX68_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX7_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL11_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX92_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX84_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX76_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX68_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX7_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_TZ1_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX132_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX124_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX116_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX108_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX7_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX7_OPTION3.VALUE=0 -DRIVER.CRC.VAR.HTU_CPB_7_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC1_CH1_URI.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC1_CH2_TOE.VALUE=0x00000000 -DRIVER.CRC.VAR.HTU_DCP0_TRDIR_1.VALUE=HET_TO_MAIN_MEM -DRIVER.CRC.VAR.CRC2_CH2_WDTO.VALUE=0 -DRIVER.CRC.VAR.HTU_ICPBL_7_SEL_1.VALUE=HIGH -DRIVER.CRC.VAR.HTU_ICPA_5_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.HTU_ICPB_1_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.HTU_DEBMOD_1.VALUE=0 -DRIVER.CRC.VAR.CRC1_CH2_URI.VALUE=0x00000000 -DRIVER.CRC.VAR.HTU_ICPAL_1_SEL_1.VALUE=HIGH -DRIVER.CRC.VAR.HTU_ENABUS_1.VALUE=0 -DRIVER.CRC.VAR.CRC1_CH2_MODE.VALUE=FULL_CPU -DRIVER.CRC.VAR.HTU_CPA_2_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC2_CH1_PSSIH.VALUE=0 -DRIVER.CRC.VAR.CRC2_CH1_PSSIL.VALUE=0 -DRIVER.CRC.VAR.HTU_MP1_ACC_1.VALUE=READ_ONLY -DRIVER.CRC.VAR.HTU_CONTPAR_1.VALUE=0 -DRIVER.CRC.VAR.HTU_ICPB_6_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.HTU_DCP0_EC_1.VALUE=0 -DRIVER.CRC.VAR.HTU_DCP0_CPBFULADD_1.VALUE=0 -DRIVER.CRC.VAR.HTU_ICPAL_6_SEL_1.VALUE=HIGH -DRIVER.CRC.VAR.CRC1_CH1_PSIH.VALUE=0 -DRIVER.CRC.VAR.HTU_CPA_7_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.HTU_CPB_3_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC1_BASE.VALUE=0xFE000000 -DRIVER.CRC.VAR.CRC1_CH1_PSIL.VALUE=0 -DRIVER.CRC.VAR.HTU_DCP0_FC_1.VALUE=0 -DRIVER.CRC.VAR.HTU_BASE.VALUE=0xFFF7A400 -DRIVER.CRC.VAR.HTU_ICPBL_3_SEL_1.VALUE=HIGH -DRIVER.CRC.VAR.HTU_ICPA_1_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC1_CH1_WDTO.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC1_CH2_PSIH.VALUE=0 -DRIVER.CRC.VAR.CRC2_BASE.VALUE=0xFB000000 -DRIVER.CRC.VAR.CRC1_CH2_PSIL.VALUE=0 -DRIVER.CRC.VAR.HTU_ICPA_6_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.HTU_ICPB_2_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.HTU_DCP0_CPAFULADD_1.VALUE=0 -DRIVER.CRC.VAR.HTU_ICPAL_2_SEL_1.VALUE=HIGH -DRIVER.CRC.VAR.HTU_CPA_3_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC2_CH2_PSSIH.VALUE=0 -DRIVER.CRC.VAR.CRC2_CH2_PSSIL.VALUE=0 -DRIVER.CRC.VAR.HTU_MP1_STADD_1.VALUE=0 -DRIVER.CRC.VAR.HTU_ICPB_7_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC1_CH2_WDTO.VALUE=0x00000000 -DRIVER.CRC.VAR.HTU_ICPAL_7_SEL_1.VALUE=HIGH -DRIVER.CRC.VAR.HTU_CPB_4_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC2_CH1_BCTO.VALUE=0 -DRIVER.CRC.VAR.HTU_MP0_ENA_1.VALUE=0 -DRIVER.CRC.VAR.HTU_ICPBL_4_SEL_1.VALUE=HIGH -DRIVER.CRC.VAR.HTU_ICPA_2_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.HTU_PAR_1.VALUE=0 -DRIVER.CRC.VAR.HTU_CONT_1.VALUE=0 -DRIVER.CRC.VAR.HTU_ENAREQ_1.VALUE=0 -DRIVER.CRC.VAR.CRC2_CH2_BCTO.VALUE=0 -DRIVER.CRC.VAR.HTU_MP1_ERRENA_1.VALUE=0 -DRIVER.CRC.VAR.HTU_MP0_STADD_1.VALUE=0 -DRIVER.CRC.VAR.HTU_ICPA_7_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.HTU_ICPB_3_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.HTU_ICPAL_3_SEL_1.VALUE=HIGH -DRIVER.CRC.VAR.HTU_CPA_4_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.HTU_CPB_0_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.HTU_DCP0_MMADD_1.VALUE=POST_INCREMENT -DRIVER.CRC.VAR.CRC2_CH1_CCI.VALUE=0x00000000 -DRIVER.CRC.VAR.HTU_ENAINTMAP_1.VALUE=0 -DRIVER.CRC.VAR.CRC2_CH1_CFI.VALUE=0x00000000 -DRIVER.CRC.VAR.HTU_ICPBL_0_SEL_1.VALUE=HIGH -DRIVER.CRC.VAR.HTU_CPB_5_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC2_CH2_CCI.VALUE=0x00000000 -DRIVER.CRC.VAR.HTU_MP1_ENA_1.VALUE=0 -DRIVER.CRC.VAR.CRC1_CH2_MODE_VALUE.VALUE=0x0001 -DRIVER.CRC.VAR.HTU_DCP0_HETADD.VALUE=0 -DRIVER.CRC.VAR.CRC2_CH2_CFI.VALUE=0x00000000 -DRIVER.CRC.VAR.HTU_ICPBL_5_SEL_1.VALUE=HIGH -DRIVER.CRC.VAR.HTU_ICPA_3_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC2_CH1_DTE.VALUE=0 -DRIVER.CRC.VAR.CRC2_CH1_CVH.VALUE=0 -DRIVER.CRC.VAR.HTU_CPA_0_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.HTU_RES_1.VALUE=0 -DRIVER.CRC.VAR.CRC1_CH1_BCTO.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC2_CH1_CVL.VALUE=0 -DRIVER.CRC.VAR.HTU_DCP0_CPATMOD_1.VALUE=POST_INCREMENT -DRIVER.CRC.VAR.CRC1_CH1_CCI.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC2_CH1_MODE.VALUE=FULL_CPU -DRIVER.CRC.VAR.CRC1_CH1_PSSIH.VALUE=0 -DRIVER.CRC.VAR.CRC2_CH2_DTE.VALUE=1 -DRIVER.CRC.VAR.CRC1_CH1_CFI.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC1_CH1_PSSIL.VALUE=0 -DRIVER.CRC.VAR.HTU_MP1_ENDADD_1.VALUE=0 -DRIVER.CRC.VAR.HTU_ICPB_4_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC2_CH2_CVH.VALUE=0 -DRIVER.CRC.VAR.HTU_ICPAL_4_SEL_1.VALUE=HIGH -DRIVER.CRC.VAR.CRC2_CH2_CVL.VALUE=0 -DRIVER.CRC.VAR.CRC2_CH1_PCP.VALUE=0 -DRIVER.CRC.VAR.HTU_CPA_5_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.HTU_CPB_1_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC1_CH2_CCI.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC1_CH2_CFI.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC2_CH1_SCP.VALUE=0 -DRIVER.CRC.VAR.HTU_VBHOLD_1.VALUE=0 -DRIVER.CRC.VAR.CRC1_CH2_BCTO.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC1_CH1_MODE_VALUE.VALUE=0x0001 -DRIVER.CRC.VAR.CRC2_CH2_PCP.VALUE=0 -DRIVER.CRC.VAR.HTU_MP0_ERRENA_1.VALUE=0 -DRIVER.CRC.VAR.HTU_ICPBL_1_SEL_1.VALUE=HIGH -DRIVER.CRC.VAR.CRC2_CH1_PSA.VALUE=1 -DRIVER.CRC.VAR.CRC2_CH2_MODE.VALUE=FULL_CPU -DRIVER.CRC.VAR.CRC2_CH1_ORI.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC1_CH1_DTE.VALUE=0 -DRIVER.CRC.VAR.HTU_CPB_6_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC1_CH1_CVH.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC1_CH1_CVL.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC2_CH2_SCP.VALUE=0 -DRIVER.CRC.VAR.CRC2_CH2_MODE_VALUE.VALUE=0x0001 -DRIVER.CRC.VAR.CRC2_CH1_TOE.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC2_CH2_PSA.VALUE=1 -DRIVER.CRC.VAR.CRC2_CH2_ORI.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC1_CH2_DTE.VALUE=1 -DRIVER.CRC.VAR.HTU_DCP0_TRDAT_1.VALUE=32BIT -DRIVER.CRC.VAR.HTU_ICPBL_6_SEL_1.VALUE=HIGH -DRIVER.CRC.VAR.HTU_ICPA_4_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.HTU_ICPB_0_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC1_CH2_CVH.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC2_CH1_PSIH.VALUE=0 -DRIVER.CRC.VAR.HTU_ICPAL_0_SEL_1.VALUE=HIGH -DRIVER.CRC.VAR.CRC1_CH2_CVL.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC2_CH1_URI.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC2_CH1_PSIL.VALUE=0 -DRIVER.CRC.VAR.CRC1_CH1_PCP.VALUE=0x00000000 -DRIVER.CRC.VAR.HTU_CPA_1_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC2_CH2_TOE.VALUE=0x00000000 -DRIVER.CRC.VAR.HTU_DCP0_CPBTMOD_1.VALUE=POST_INCREMENT -DRIVER.CRC.VAR.CRC1_CH2_PSSIH.VALUE=0 -DRIVER.CRC.VAR.HTU_MP0_ACC_1.VALUE=READ_ONLY -DRIVER.CRC.VAR.CRC1_CH2_PSSIL.VALUE=0 -DRIVER.CRC.VAR.CRC1_CH1_SCP.VALUE=0x00000000 -DRIVER.CRC.VAR.HTU_ICPB_5_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC2_CH2_URI.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC1_CH2_PCP.VALUE=0x00000000 -DRIVER.CRC.VAR.HTU_ICPAL_5_SEL_1.VALUE=HIGH -DRIVER.CRC.VAR.CRC1_CH1_PSA.VALUE=1 -DRIVER.CRC.VAR.CRC1_CH1_ORI.VALUE=0x00000000 -DRIVER.CRC.VAR.HTU_DCP0_ADMOD_1.VALUE=INCREMENT_16BIT -DRIVER.CRC.VAR.HTU_CPA_6_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.HTU_CPB_2_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC2_CH1_WDTO.VALUE=0 -DRIVER.CRC.VAR.CRC2_CH2_PSIH.VALUE=0 -DRIVER.CRC.VAR.CRC1_CH2_SCP.VALUE=0x00000000 -DRIVER.CRC.VAR.HTU_ENA_1.VALUE=0 -DRIVER.CRC.VAR.CRC1_CH1_TOE.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC1_CH1_MODE.VALUE=FULL_CPU -DRIVER.CRC.VAR.CRC2_CH2_PSIL.VALUE=0 -DRIVER.CRC.VAR.CRC1_CH2_PSA.VALUE=1 -DRIVER.CRC.VAR.CRC1_CH2_ORI.VALUE=0x00000000 -DRIVER.CRC.VAR.HTU_MP0_ENDADD_1.VALUE=0 -DRIVER.CRC.VAR.HTU_ICPBL_2_SEL_1.VALUE=HIGH -DRIVER.CRC.VAR.HTU_ICPA_0_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC2_CH1_MODE_VALUE.VALUE=0x0001 -DRIVER.EMAC.VAR.EMAC_PHY_CUSTOM.VALUE=0 -DRIVER.EMAC.VAR.EMAC_ADD1.VALUE=FF -DRIVER.EMAC.VAR.EMAC_ADD2.VALUE=FF -DRIVER.EMAC.VAR.EMAC_ADD3.VALUE=FF -DRIVER.EMAC.VAR.EMAC_ADD4.VALUE=FF -DRIVER.EMAC.VAR.EMAC_ADD5.VALUE=FF -DRIVER.EMAC.VAR.EMAC_ADD6.VALUE=FF -DRIVER.EMAC.VAR.EMAC_CTRL_BASE.VALUE=0xFCF78800 -DRIVER.EMAC.VAR.EMAC_PHY_DP83640.VALUE=1 -DRIVER.EMAC.VAR.EMAC_LOOPBACK_ENA.VALUE=0 -DRIVER.EMAC.VAR.MDIO_BASE.VALUE=0xFCF78900 -DRIVER.EMAC.VAR.EMAC_BASE.VALUE=0xFCF78000 -DRIVER.EMAC.VAR.EMAC_BASE_PORT.VALUE=0xFFFFFFFF -DRIVER.EMAC.VAR.EMAC_TRANSMIT_ENA.VALUE=1 -DRIVER.EMAC.VAR.EMAC_PHY_TLK111.VALUE=0 -DRIVER.EMAC.VAR.EMAC_CHANNELNUMBER.VALUE=0 -DRIVER.EMAC.VAR.EMAC_RX_PBUF_ALLOC.VALUE=10 -DRIVER.EMAC.VAR.EMAC_UNICAST_ENA.VALUE=1 -DRIVER.EMAC.VAR.EMAC_FULL_DUPLEX_ENA.VALUE=1 -DRIVER.EMAC.VAR.EMAC_PHYADDRESS.VALUE=1 -DRIVER.EMAC.VAR.EMAC_MII_ENA.VALUE=1 -DRIVER.EMAC.VAR.EMAC_CTRL_RAM_BASE.VALUE=0xFC520000 -DRIVER.EMAC.VAR.EMAC_BROADCAST_ENA.VALUE=1 -DRIVER.EMAC.VAR.EMAC_RECEIVE_ENA.VALUE=1 -DRIVER.EMIF.VAR.EMIF_ASYNC2_TAVAV.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC1_TD.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC3_EXTENDED_WAIT.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC1_TH.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC2_TA.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC3_WAIT.VALUE=pin0 -DRIVER.EMIF.VAR.EMIF_ASYNC2_TD.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC2_NOR_FLASH.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC2_TEHQZ.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC2_TH.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC3_TA.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC3_TD.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ENA_SDRAM.VALUE=1 -DRIVER.EMIF.VAR.EMIF_ASYNC3_TH.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC2_TELQV.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC2_PAGE_MODE.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC1_ENA.VALUE=1 -DRIVER.EMIF.VAR.EMIF_SDRAM_REFRESH_CYCLES.VALUE=0 -DRIVER.EMIF.VAR.EMIF_AVAILABLE.VALUE=1 -DRIVER.EMIF.VAR.EMIF_SDRAM_TRC_MAX.VALUE=213 -DRIVER.EMIF.VAR.EMIF_ASYNC3_TEHEL.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC2_ENA.VALUE=1 -DRIVER.EMIF.VAR.EMIF_ASYNC1_R_STROBE.VALUE=63 -DRIVER.EMIF.VAR.EMIF_SDRAM_TRAS_MAX.VALUE=213 -DRIVER.EMIF.VAR.EMIF_ASYNC3_TELEH.VALUE=0 -DRIVER.EMIF.VAR.EMIF_SDRAM_TRRD_MAX.VALUE=107 -DRIVER.EMIF.VAR.EMIF_ASYNC3_STROBE_MODE.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC3_ENA.VALUE=1 -DRIVER.EMIF.VAR.EMIF_ASYNC1_ASIZE.VALUE=8_bit -DRIVER.EMIF.VAR.EMIF_SDRAM_TRC_VAL.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC3_TAVAV.VALUE=0 -DRIVER.EMIF.VAR.EMIF_SDRAM_BANKS.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC1_PAGE_DELAY_VAL.VALUE=0 -DRIVER.EMIF.VAR.EMIF_SDRAM_TRAS_VAL.VALUE=0 -DRIVER.EMIF.VAR.EMIF_SDRAM_TRRD_VAL.VALUE=0 -DRIVER.EMIF.VAR.EMIF_BASE.VALUE=0xFCFFE800 -DRIVER.EMIF.VAR.EMIF_ASYNC3_TEHQZ.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC1_W_STROBE.VALUE=63 -DRIVER.EMIF.VAR.EMIF_ASYNC3_TELQV.VALUE=0 -DRIVER.EMIF.VAR.EMIF_SDRAM_TXSR_MAX.VALUE=427 -DRIVER.EMIF.VAR.EMIF_ASYNC2_PAGE_SIZE.VALUE=4_words -DRIVER.EMIF.VAR.EMIF_CLKFRQ.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC3_W_HOLD.VALUE=7 -DRIVER.EMIF.VAR.EMIF_ASYNC2_R_HOLD.VALUE=7 -DRIVER.EMIF.VAR.EMIF_SDRAM_TREFRESH_VAL.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC3_R_SETUP.VALUE=15 -DRIVER.EMIF.VAR.EMIF_SDRAM_TXSR_VAL.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC1_TSU.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC2_EXTENDED_WAIT.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC2_ASIZE.VALUE=8_bit -DRIVER.EMIF.VAR.EMIF_ASYNC2_TSU.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC3_W_SETUP.VALUE=15 -DRIVER.EMIF.VAR.EMIF_ASYNC3_NOR_FLASH.VALUE=0 -DRIVER.EMIF.VAR.EMIF_SDRAM_TWR_MAX.VALUE=107 -DRIVER.EMIF.VAR.EMIF_ASYNC2_PAGE_DELAY_VAL.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC1_W_HOLD.VALUE=7 -DRIVER.EMIF.VAR.EMIF_SDRAM_INIT_TIME.VALUE=200 -DRIVER.EMIF.VAR.EMIF_SDRAM_TREFRESH_DEFAULT.VALUE=1605 -DRIVER.EMIF.VAR.EMIF_ASYNC3_TSU.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC3_PAGE_MODE.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC2_STROBE_MODE.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC2_R_SETUP.VALUE=15 -DRIVER.EMIF.VAR.EMIF_SDRAM_TWR_VAL.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC3_R_STROBE.VALUE=63 -DRIVER.EMIF.VAR.EMIF_SDRAM_TRCD_MAX.VALUE=107 -DRIVER.EMIF.VAR.EMIF_CLK.VALUE=0 -DRIVER.EMIF.VAR.EMIF_SDRAM_TRCD.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC2_W_SETUP.VALUE=15 -DRIVER.EMIF.VAR.EMIF_SDRAM_TRFC.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC3_ASIZE.VALUE=8_bit -DRIVER.EMIF.VAR.EMIF_SDRAM_TRAS.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC1_NOR_FLASH.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC3_PAGE_DELAY.VALUE=0 -DRIVER.EMIF.VAR.EMIF_SDRAM_CAS_LATENCY.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC_WAIT_POLARITY0.VALUE=pin_low -DRIVER.EMIF.VAR.EMIF_SDRAM_TRCD_VAL.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC_WAIT_POLARITY1.VALUE=pin_high -DRIVER.EMIF.VAR.EMIF_ASYNC1_PAGE_MODE.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC1_R_SETUP.VALUE=15 -DRIVER.EMIF.VAR.EMIF_SDRAM_TRC.VALUE=0 -DRIVER.EMIF.VAR.EMIF_SDRAM_TRRD.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC3_PAGE_DELAY_VAL.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC3_W_STROBE.VALUE=63 -DRIVER.EMIF.VAR.EMIF_ASYNC1_TEHEL.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC_MAX_EXT_WAIT.VALUE=0 -DRIVER.EMIF.VAR.EMIF_SDRAM_TRP.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC3_PAGE_SIZE.VALUE=4_words -DRIVER.EMIF.VAR.EMIF_ASYNC1_W_SETUP.VALUE=15 -DRIVER.EMIF.VAR.EMIF_ASYNC1_TELEH.VALUE=0 -DRIVER.EMIF.VAR.EMIF_SDRAM_REFRESH_CYCLES_MAX.VALUE=0 -DRIVER.EMIF.VAR.EMIF_MS.VALUE=0.001 -DRIVER.EMIF.VAR.EMIF_NS.VALUE=0.000000001 -DRIVER.EMIF.VAR.EMIF_SDRAM_TWR.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC1_EXTENDED_WAIT.VALUE=0 -DRIVER.EMIF.VAR.EMIF_SDRAM_REFRESH_PERIOD.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC3_R_HOLD.VALUE=7 -DRIVER.EMIF.VAR.EMIF_ASYNC1_TAVAV.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC2_PAGE_DELAY.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC1_WAIT.VALUE=pin0 -DRIVER.EMIF.VAR.EMIF_SDRAM_TRP_MAX.VALUE=107 -DRIVER.EMIF.VAR.EMIF_SDRAM_TXSR.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC1_TEHQZ.VALUE=0 -DRIVER.EMIF.VAR.EMIF_SDRAM_TRFC_MAX.VALUE=427 -DRIVER.EMIF.VAR.EMIF_ASYNC2_R_STROBE.VALUE=63 -DRIVER.EMIF.VAR.EMIF_ASYNC1_TELQV.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC1_STROBE_MODE.VALUE=0 -DRIVER.EMIF.VAR.EMIF_SDRAM_TRP_VAL.VALUE=0 -DRIVER.EMIF.VAR.EMIF_SDRAM_REFRESH_PERIOD_MAX.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC2_W_HOLD.VALUE=7 -DRIVER.EMIF.VAR.EMIF_ASYNC1_PAGE_SIZE.VALUE=4_words -DRIVER.EMIF.VAR.EMIF_ASYNC2_WAIT.VALUE=pin0 -DRIVER.EMIF.VAR.EMIF_ASYNC2_TEHEL.VALUE=0 -DRIVER.EMIF.VAR.EMIF_SDRAM_TRFC_VAL.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC1_R_HOLD.VALUE=7 -DRIVER.EMIF.VAR.EMIF_SDRAM_PAGE_SIZE.VALUE=elements_256 -DRIVER.EMIF.VAR.EMIF_ASYNC2_TELEH.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC1_PAGE_DELAY.VALUE=0 -DRIVER.EMIF.VAR.EMIF_IBANK.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC2_W_STROBE.VALUE=63 -DRIVER.EMIF.VAR.EMIF_ASYNC1_TA.VALUE=0 -DRIVER.POM.VAR.POM_OVRLY_START_ADD28.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD29.VALUE=0x00000000 -DRIVER.POM.VAR.POM_REGION_10_ENA.VALUE=0 -DRIVER.POM.VAR.POM_TIMEOUT_ENABLE.VALUE=0 -DRIVER.POM.VAR.POM_REGION_11_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_20_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_12_ENA.VALUE=0 -DRIVER.POM.VAR.POM_NO_OF_REGION.VALUE=1 -DRIVER.POM.VAR.POM_REGION_21_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_13_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_30_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_22_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_14_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_31_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_23_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_15_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_1_ENA.VALUE=1 -DRIVER.POM.VAR.POM_REGION_32_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_24_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_16_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_2_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_25_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_17_ENA.VALUE=0 -DRIVER.POM.VAR.POM_OVRLY_START_ADD1.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD2.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD3.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD4.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD5.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD6.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD7.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD8.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVLY_TRG_REGION.VALUE=INTERNAL_RAM -DRIVER.POM.VAR.POM_OVRLY_START_ADD9.VALUE=0x00000000 -DRIVER.POM.VAR.POM_REGION_3_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_26_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_18_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_4_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_27_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_19_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_5_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_28_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_6_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_SIZE10.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE11.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE20.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE12.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_29_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_SIZE21.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE13.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE30.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE22.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE14.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE31.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE23.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE15.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE32.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE24.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE16.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE25.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE17.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE26.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE18.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE27.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE19.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE28.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE29.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_7_ENA.VALUE=0 -DRIVER.POM.VAR.POM_BASE.VALUE=0xFFA04000 -DRIVER.POM.VAR.POM_PROG_START_ADD10.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD11.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD20.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD12.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD21.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD13.VALUE=0x00000000 -DRIVER.POM.VAR.POM_REGION_8_ENA.VALUE=0 -DRIVER.POM.VAR.POM_PROG_START_ADD30.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD22.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD14.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD31.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD23.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD15.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD32.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD24.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD16.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD25.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD17.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD26.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD18.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD27.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD19.VALUE=0x00000000 -DRIVER.POM.VAR.POM_REGION_SIZE1.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_PROG_START_ADD28.VALUE=0x00000000 -DRIVER.POM.VAR.POM_REGION_SIZE2.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_PROG_START_ADD29.VALUE=0x00000000 -DRIVER.POM.VAR.POM_REGION_SIZE3.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE4.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE5.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE6.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE7.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE8.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE9.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_9_ENA.VALUE=0 -DRIVER.POM.VAR.POM_PROG_START_ADD1.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD2.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD3.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD4.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD5.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD6.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD7.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD8.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD9.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD10.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD11.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD20.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD12.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD21.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD13.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD30.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD22.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD14.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD31.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD23.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD15.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD32.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD24.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD16.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD25.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD17.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD26.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD18.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD27.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD19.VALUE=0x00000000 -DRIVER.PMM.VAR.PMM_RAM_PWR_DOMAIN2_ENABLE.VALUE=0 -DRIVER.PMM.VAR.PMM_PWR_DOMAIN5_ENABLE.VALUE=0 -DRIVER.PMM.VAR.PMM_PWR_DOMAIN3_ENABLE.VALUE=0 -DRIVER.PMM.VAR.PMM_RAM_PWR_DOMAIN3_ENABLE.VALUE=0 -DRIVER.PMM.VAR.PMM_RAM_PWR_DOMAIN1_ENABLE.VALUE=0 -DRIVER.PMM.VAR.PMM_PWR_DOMAIN4_ENABLE.VALUE=0 -DRIVER.PMM.VAR.PMM_PWR_DOMAIN2_ENABLE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_OSHT_WIDTH.VALUE=100 -DRIVER.ETPWM.VAR.ETPWM3_PWMA_PERIOD_REG.VALUE=1000 -DRIVER.ETPWM.VAR.ETPWM2_PWMA_COMPARE.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM5_CHOPPER_PERIOD.VALUE=100.000 -DRIVER.ETPWM.VAR.ETPWM3_PWMA_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM3_PWMA_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM7_PWMB_PERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM3_PWMB_DEADBAND_OUT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM5_HSPCLKDIV.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM4_CLKDIV_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_SOCA_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM1_DEADBAND_INPUT.VALUE=PWMA_RED_FED -DRIVER.ETPWM.VAR.ETPWM7_BASE.VALUE=0xFCF79200 -DRIVER.ETPWM.VAR.ETPWM5_TB_ACTUALFREQUENCY.VALUE=80.000 -DRIVER.ETPWM.VAR.ETPWM6_DCBEVT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM6_DCBEVT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_ENABLE_SOCA.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_CBC.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_ENABLE_SOCB.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_PWMA_FALLING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_CHOPPER_PERIOD_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM2_PWMA_ENA.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM4_PWMB_PERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM6_RDELAY_SOURCE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_PWMA_DUTYTIME.VALUE=500.000 -DRIVER.ETPWM.VAR.ETPWM1_CHOPPER_DUTY_NEW.VALUE=50.0 -DRIVER.ETPWM.VAR.ETPWM7_SOCB_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM1_OSHT_ACTUAL_WIDTH.VALUE=100 -DRIVER.ETPWM.VAR.ETPWM7_PWMB_FALLING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_PWMB_COMPARE.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM2_PWMB_POLARITY.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM1_OSHT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_OSHT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_PWMA_DEADBAND_OUT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM4_ENABLE_SOCA.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_OSHT3.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_ENABLE_SOCB.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_OSHT4.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_OSHT_WIDTH_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM1_OSHT5.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_PWMA_PERIOD_REG.VALUE=1000 -DRIVER.ETPWM.VAR.ETPWM1_OSHT6.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_CHOPPER_PERIOD.VALUE=100.000 -DRIVER.ETPWM.VAR.ETPWM1_PWMB_PERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM2_CBC.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_CLKDIV.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM2_PWMB_ENA.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM4_SOCB_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM7_CHOPPER_MODE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_PWMB_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM7_DEADBAND_OUTPUT.VALUE=PWMA_PWMB_NIL -DRIVER.ETPWM.VAR.ETPWM4_PWMB_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM1_ENABLE_SOCA.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_PWMB_DEADBAND_INVERT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM1_ENABLE_SOCB.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_CHOPPER_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM5_DCAEVT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_HSPCLKDIV_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM5_DCAEVT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_CHOPPER_DUTYTIME.VALUE=50.000 -DRIVER.ETPWM.VAR.ETPWM6_OSHT_ACTUAL_WIDTH.VALUE=100 -DRIVER.ETPWM.VAR.ETPWM4_PWMB_DEADBAND_INVERT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM7_PWMB_POLARITY.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_OSHT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_PWMA_RISING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_OSHT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM6_PWMA_DEADBAND_OUT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM1_SOCB_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_OSHT3.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_PWMB_DUTYTIME.VALUE=500.000 -DRIVER.ETPWM.VAR.ETPWM3_CBC.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_TB_ACTUALFREQUENCY.VALUE=80.000 -DRIVER.ETPWM.VAR.ETPWM1_FDELAY_SOURCE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_OSHT4.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM6_PWMB_DEADBAND_INVERT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_OSHT5.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_PWMB_COMPARE.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM2_PWMB_RISING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_OSHT6.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM6_DEADBAND_INPUT.VALUE=PWMA_RED_FED -DRIVER.ETPWM.VAR.ETPWM6_SELECT_SOCA.VALUE=DCAEVT1 -DRIVER.ETPWM.VAR.ETPWM6_SELECT_SOCB.VALUE=DCBEVT1 -DRIVER.ETPWM.VAR.ETPWM6_SELECT_EVENT.VALUE=NO_EVENT -DRIVER.ETPWM.VAR.ETPWM5_OSHT_WIDTH.VALUE=100 -DRIVER.ETPWM.VAR.ETPWM1_PWMA_DEADBAND_INVERT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM5_PWMA_ENA.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM3_CHOPPER_PERIOD_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_PWMA_DEADBAND_INVERT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_PWMB_PERIOD_REG.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM5_DCBEVT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_OSHT_WIDTH_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM1_PWMA_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM5_DCBEVT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_PWMA_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM5_PWMA_DEADBAND_INVERT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_HSPCLKDIV.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_PWMA_FALLING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_PWMA_RISING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM4_CHOPPER_MODE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_CLKDIV_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM2_PWMB_DEADBAND_OUT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_TB_FREQUENCY.VALUE=110.000 -DRIVER.ETPWM.VAR.ETPWM4_CBC.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_SELECT_SOCA.VALUE=DCAEVT1 -DRIVER.ETPWM.VAR.ETPWM7_PWMA_DEADBAND_INVERT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_SELECT_SOCB.VALUE=DCBEVT1 -DRIVER.ETPWM.VAR.ETPWM6_PWMB_RISING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM5_PWMA_POLARITY.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM4_CHOPPER_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM5_DEADBAND_OUTPUT.VALUE=PWMA_PWMB_NIL -DRIVER.ETPWM.VAR.ETPWM6_FDELAY_SOURCE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_RDELAY_SOURCE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_PWMA_DUTYTIME.VALUE=500.000 -DRIVER.ETPWM.VAR.ETPWM6_PWMB_FALLING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_PWMA_COMPARE.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM5_PWMB_ENA.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_CHOPPER_PERIOD.VALUE=100.000 -DRIVER.ETPWM.VAR.ETPWM6_CHOPPER_DUTYTIME.VALUE=50.000 -DRIVER.ETPWM.VAR.ETPWM1_PWMB_FALLING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM3_SELECT_EVENT.VALUE=NO_EVENT -DRIVER.ETPWM.VAR.ETPWM2_CLKDIV.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_PWMA_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM7_PWMA_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM2_DEADBAND_INPUT.VALUE=PWMA_RED_FED -DRIVER.ETPWM.VAR.ETPWM5_CBC.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_CBC1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_CBC2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_CBC3.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_CHOPPER_DUTYTIME_REG.VALUE=3 -DRIVER.ETPWM.VAR.ETPWM7_PWMB_DEADBAND_OUT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM1_CBC4.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_CBC5.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_CBC6.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_DCAEVT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_PWMB_PERIOD_REG.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM3_CHOPPER_DUTYTIME_REG.VALUE=3 -DRIVER.ETPWM.VAR.ETPWM1_CHOPPER_MODE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM5_PWMA_PERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM4_DCAEVT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_TB_ACTUALFREQUENCY.VALUE=80.000 -DRIVER.ETPWM.VAR.ETPWM3_TB_FREQUENCY.VALUE=110.000 -DRIVER.ETPWM.VAR.ETPWM2_PWMB_FALLING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM5_CHOPPER_DUTYTIME_REG.VALUE=3 -DRIVER.ETPWM.VAR.ETPWM2_OSHT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_CHOPPER_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM1_PWMB_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM1_HSPCLKDIV_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM7_INTERRUPT_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM2_OSHT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_OSHT3.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_OSHT4.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_CHOPPER_DUTYTIME_REG.VALUE=3 -DRIVER.ETPWM.VAR.ETPWM4_PWMB_POLARITY.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_PWMA_COMPARE.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM2_OSHT5.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_DEADBAND_OUTPUT.VALUE=PWMA_PWMB_NIL -DRIVER.ETPWM.VAR.ETPWM3_PWMB_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM2_OSHT6.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM6_CBC.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_PWMB_DUTYTIME.VALUE=500.000 -DRIVER.ETPWM.VAR.ETPWM6_OSHT_WIDTH_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM2_CHOPPER_PERIOD.VALUE=100.000 -DRIVER.ETPWM.VAR.ETPWM2_PWMA_PERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM5_CHOPPER_DUTYTIME.VALUE=50.000 -DRIVER.ETPWM.VAR.ETPWM5_OSHT_ACTUAL_WIDTH.VALUE=100 -DRIVER.ETPWM.VAR.ETPWM4_DCBEVT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_SOCA_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM5_PWMA_DEADBAND_OUT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM4_DCBEVT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_PWMB_FALLING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM4_OSHT_WIDTH.VALUE=100 -DRIVER.ETPWM.VAR.ETPWM5_PWMA_FALLING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM4_PWMA_RISING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM1_PWMA_ENA.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM7_OSHT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM6_PWMB_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM6_PWMA_PERIOD_REG.VALUE=1000 -DRIVER.ETPWM.VAR.ETPWM6_HSPCLKDIV_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM4_PWMB_RISING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM7_OSHT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM6_PWMB_PERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM7_CBC.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_OSHT3.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_CBC1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_OSHT4.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_CBC2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_HSPCLKDIV.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM7_OSHT5.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_PWMB_FALLING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM2_CBC3.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_PWMB_PERIOD_REG.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM2_PWMA_POLARITY.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM2_CLKDIV_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM7_OSHT6.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_SOCA_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM2_CBC4.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_OST.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_CHOPPER_ACTUALPERIOD.VALUE=100.000 -DRIVER.ETPWM.VAR.ETPWM1_PWMA_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM7_PWMB_DUTYTIME.VALUE=500.000 -DRIVER.ETPWM.VAR.ETPWM3_FDELAY_SOURCE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM2_CBC5.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_CLKDIV.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM2_CBC6.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_PWMB_COMPARE.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM7_DEADBAND_INPUT.VALUE=PWMA_RED_FED -DRIVER.ETPWM.VAR.ETPWM6_INTERRUPT_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM3_CHOPPER_ACTUALPERIOD.VALUE=100.000 -DRIVER.ETPWM.VAR.ETPWM1_PWMB_DEADBAND_OUT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_ENABLE_SOCA.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_PWMB_FALLING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM1_BASE.VALUE=0xFCF78C00 -DRIVER.ETPWM.VAR.ETPWM6_ENABLE_SOCB.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_PWMB_ENA.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM5_CHOPPER_ACTUALPERIOD.VALUE=100.000 -DRIVER.ETPWM.VAR.ETPWM3_PWMB_PERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM1_DEADBAND_OUTPUT.VALUE=PWMA_PWMB_NIL -DRIVER.ETPWM.VAR.ETPWM4_TB_ACTUALFREQUENCY.VALUE=80.000 -DRIVER.ETPWM.VAR.ETPWM2_OSHT_WIDTH_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM7_CHOPPER_ACTUALPERIOD.VALUE=100.000 -DRIVER.ETPWM.VAR.ETPWM6_SOCB_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM4_CHOPPER_DUTYTIME.VALUE=50.000 -DRIVER.ETPWM.VAR.ETPWM5_CHOPPER_PERIOD_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM4_PWMA_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM3_DCAEVT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_DCAEVT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_OST.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_ENABLE_SOCA.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM6_HSPCLKDIV.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_ENABLE_SOCB.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_PWMA_POLARITY.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM2_PWMA_FALLING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_PWMA_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM5_RDELAY_SOURCE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM5_PWMB_FALLING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM5_PWMA_DUTYTIME.VALUE=500.000 -DRIVER.ETPWM.VAR.ETPWM4_PWMA_PERIOD_REG.VALUE=1000 -DRIVER.ETPWM.VAR.ETPWM7_CHOPPER_PERIOD.VALUE=100.000 -DRIVER.ETPWM.VAR.ETPWM6_PWMB_DEADBAND_OUT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_SOCB_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM4_PWMB_COMPARE.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM4_PWMA_ENA.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM2_PWMB_FALLING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM1_PWMB_POLARITY.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_CBC1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_SELECT_EVENT.VALUE=NO_EVENT -DRIVER.ETPWM.VAR.ETPWM3_CBC2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_DCBEVT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_CBC3.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_INTERRUPT_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM3_OST.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_DCBEVT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_CBC4.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_DEADBAND_INPUT.VALUE=PWMA_RED_FED -DRIVER.ETPWM.VAR.ETPWM3_CBC5.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_CBC6.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_PWMA_FALLING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM2_PWMB_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM6_PWMB_FALLING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM2_BASE.VALUE=0xFCF78D00 -DRIVER.ETPWM.VAR.ETPWM7_CHOPPER_DUTY_NEW.VALUE=50.0 -DRIVER.ETPWM.VAR.ETPWM7_CLKDIV_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM5_CHOPPER_MODE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_OSHT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_OSHT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_TB_FREQUENCY.VALUE=110.000 -DRIVER.ETPWM.VAR.ETPWM5_SELECT_SOCA.VALUE=DCAEVT1 -DRIVER.ETPWM.VAR.ETPWM3_OSHT3.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_CHOPPER_DUTYTIME.VALUE=50.000 -DRIVER.ETPWM.VAR.ETPWM5_SELECT_SOCB.VALUE=DCBEVT1 -DRIVER.ETPWM.VAR.ETPWM4_OSHT_ACTUAL_WIDTH.VALUE=100 -DRIVER.ETPWM.VAR.ETPWM3_OSHT4.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_OSHT_WIDTH.VALUE=100 -DRIVER.ETPWM.VAR.ETPWM5_CHOPPER_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM4_PWMB_FALLING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM4_PWMB_ENA.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM3_OSHT5.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_HSPCLKDIV_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM4_PWMA_DEADBAND_OUT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_OSHT6.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_TB_ACTUALFREQUENCY.VALUE=80.000 -DRIVER.ETPWM.VAR.ETPWM5_CLKDIV.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM7_PWMA_COMPARE.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM6_PWMB_POLARITY.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM4_PWMB_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM4_OST.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_PWMB_DUTYTIME.VALUE=500.000 -DRIVER.ETPWM.VAR.ETPWM7_OSHT_WIDTH_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM2_CHOPPER_PERIOD_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM2_PWMA_PERIOD_REG.VALUE=1000 -DRIVER.ETPWM.VAR.ETPWM1_PWMB_COMPARE.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM1_CLKDIV_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_CHOPPER_PERIOD.VALUE=100.000 -DRIVER.ETPWM.VAR.ETPWM7_PWMB_FALLING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM2_SELECT_SOCA.VALUE=DCAEVT1 -DRIVER.ETPWM.VAR.ETPWM4_SELECT_EVENT.VALUE=NO_EVENT -DRIVER.ETPWM.VAR.ETPWM2_SELECT_SOCB.VALUE=DCBEVT1 -DRIVER.ETPWM.VAR.ETPWM7_PWMB_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM2_DCAEVT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_INTERRUPT_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM2_DCAEVT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_CBC1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_PWMB_RISING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM4_CBC2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_PWMA_ENA.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM4_CBC3.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_CHOPPER_MODE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM1_PWMA_FALLING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM7_PWMA_PERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM5_OST.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_CBC4.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_CBC5.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_TB_FREQUENCY.VALUE=110.000 -DRIVER.ETPWM.VAR.ETPWM4_CBC6.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM6_CHOPPER_DUTY_NEW.VALUE=50.0 -DRIVER.ETPWM.VAR.ETPWM4_PWMA_POLARITY.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM2_CHOPPER_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM2_PWMA_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM5_FDELAY_SOURCE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_BASE.VALUE=0xFCF78E00 -DRIVER.ETPWM.VAR.ETPWM2_CHOPPER_DUTYTIME.VALUE=50.000 -DRIVER.ETPWM.VAR.ETPWM2_RDELAY_SOURCE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM2_PWMB_RISING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM2_PWMA_DUTYTIME.VALUE=500.000 -DRIVER.ETPWM.VAR.ETPWM1_PWMA_FALLING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM4_HSPCLKDIV.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM4_PWMA_COMPARE.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM1_PWMB_FALLING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM1_PWMB_DEADBAND_INVERT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM7_PWMA_RISING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM2_DCBEVT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_PWMA_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM4_PWMA_PERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM2_DCBEVT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_PWMB_RISING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM3_PWMB_DEADBAND_INVERT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM1_SELECT_EVENT.VALUE=NO_EVENT -DRIVER.ETPWM.VAR.ETPWM7_PWMB_PERIOD_REG.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM7_PWMB_RISING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM7_PWMB_ENA.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM3_OSHT_WIDTH_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM3_PWMA_FALLING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM7_SOCA_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_OST.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_PWMB_DEADBAND_OUT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM5_PWMB_DEADBAND_INVERT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_TB_ACTUALFREQUENCY.VALUE=80.000 -DRIVER.ETPWM.VAR.ETPWM4_PWMB_RISING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM2_PWMA_FALLING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM7_PWMB_DEADBAND_INVERT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM7_PWMA_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM3_PWMB_FALLING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_DEADBAND_OUTPUT.VALUE=PWMA_PWMB_NIL -DRIVER.ETPWM.VAR.ETPWM3_INTERRUPT_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM1_PWMA_PERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM7_RDELAY_SOURCE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM7_PWMA_DUTYTIME.VALUE=500.000 -DRIVER.ETPWM.VAR.ETPWM1_TB_FREQUENCY.VALUE=110.000 -DRIVER.ETPWM.VAR.ETPWM3_CLKDIV.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM2_PWMA_DEADBAND_INVERT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM7_CHOPPER_PERIOD_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_CLKDIV_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM4_SOCA_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM1_PWMB_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM5_CBC1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_PWMB_RISING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM5_CBC2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_PWMA_DEADBAND_INVERT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM2_OSHT_WIDTH.VALUE=100 -DRIVER.ETPWM.VAR.ETPWM5_CBC3.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_CHOPPER_DUTY_NEW.VALUE=50.0 -DRIVER.ETPWM.VAR.ETPWM3_PWMB_POLARITY.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM1_PWMA_COMPARE.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM7_OST.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_CBC4.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_CBC5.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_CHOPPER_DUTYTIME.VALUE=50.000 -DRIVER.ETPWM.VAR.ETPWM1_PWMB_DUTYTIME.VALUE=500.000 -DRIVER.ETPWM.VAR.ETPWM6_PWMA_DEADBAND_INVERT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM5_CBC6.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_OSHT_ACTUAL_WIDTH.VALUE=100 -DRIVER.ETPWM.VAR.ETPWM2_PWMB_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM5_PWMB_PERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM4_DEADBAND_INPUT.VALUE=PWMA_RED_FED -DRIVER.ETPWM.VAR.ETPWM3_PWMA_DEADBAND_OUT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_PWMB_RISING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM4_BASE.VALUE=0xFCF78F00 -DRIVER.ETPWM.VAR.ETPWM3_PWMA_FALLING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM4_OSHT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_DCAEVT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_PWMA_RISING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM4_OSHT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_SOCA_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM1_DCAEVT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_OSHT3.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_OSHT4.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_PWMB_PERIOD_REG.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM4_OSHT5.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_PWMB_RISING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM4_OSHT6.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_PWMB_RISING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM5_ENABLE_SOCA.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_ENABLE_SOCB.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_HSPCLKDIV_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_PWMB_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM2_PWMB_PERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM3_PWMA_ENA.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM1_PWMA_POLARITY.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM5_SOCB_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM4_DEADBAND_OUTPUT.VALUE=PWMA_PWMB_NIL -DRIVER.ETPWM.VAR.ETPWM2_INTERRUPT_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_PWMB_DUTYTIME.VALUE=500.000 -DRIVER.ETPWM.VAR.ETPWM4_PWMA_FALLING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM2_FDELAY_SOURCE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM1_PWMA_RISING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM7_PWMB_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM5_PWMB_COMPARE.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM5_PWMA_RISING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM2_CHOPPER_DUTYTIME_REG.VALUE=3 -DRIVER.ETPWM.VAR.ETPWM1_DCBEVT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_CHOPPER_PERIOD.VALUE=100.000 -DRIVER.ETPWM.VAR.ETPWM1_DCBEVT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_TB_ACTUALFREQUENCY.VALUE=80.000 -DRIVER.ETPWM.VAR.ETPWM2_ENABLE_SOCA.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_ENABLE_SOCB.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_HSPCLKDIV.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM5_PWMB_RISING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM4_CHOPPER_DUTYTIME_REG.VALUE=3 -DRIVER.ETPWM.VAR.ETPWM4_CHOPPER_DUTY_NEW.VALUE=50.0 -DRIVER.ETPWM.VAR.ETPWM6_CBC1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_PWMA_RISING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM6_CBC2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM6_CBC3.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM6_CHOPPER_DUTYTIME_REG.VALUE=3 -DRIVER.ETPWM.VAR.ETPWM4_CHOPPER_PERIOD_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_CBC4.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_SOCB_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_CBC5.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM6_CBC6.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_PWMA_PERIOD_REG.VALUE=1000 -DRIVER.ETPWM.VAR.ETPWM6_CHOPPER_MODE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_PWMB_ENA.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM4_PWMA_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM7_SELECT_SOCA.VALUE=DCAEVT1 -DRIVER.ETPWM.VAR.ETPWM5_PWMA_FALLING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM5_BASE.VALUE=0xFCF79000 -DRIVER.ETPWM.VAR.ETPWM3_PWMA_RISING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM7_SELECT_SOCB.VALUE=DCBEVT1 -DRIVER.ETPWM.VAR.ETPWM7_OSHT_WIDTH.VALUE=100 -DRIVER.ETPWM.VAR.ETPWM1_CLKDIV.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_CHOPPER_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM6_PWMA_POLARITY.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_PWMB_PERIOD_REG.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM4_PWMB_DEADBAND_OUT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM7_FDELAY_SOURCE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM4_RDELAY_SOURCE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM4_PWMA_DUTYTIME.VALUE=500.000 -DRIVER.ETPWM.VAR.ETPWM7_DCAEVT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_PWMA_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM7_DCAEVT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_PWMA_RISING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM7_HSPCLKDIV.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM5_CLKDIV_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM2_PWMB_COMPARE.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM2_DEADBAND_OUTPUT.VALUE=PWMA_PWMB_NIL -DRIVER.ETPWM.VAR.ETPWM1_INTERRUPT_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM4_SELECT_SOCA.VALUE=DCAEVT1 -DRIVER.ETPWM.VAR.ETPWM5_SELECT_EVENT.VALUE=NO_EVENT -DRIVER.ETPWM.VAR.ETPWM4_SELECT_SOCB.VALUE=DCBEVT1 -DRIVER.ETPWM.VAR.ETPWM1_OSHT_WIDTH.VALUE=100 -DRIVER.ETPWM.VAR.ETPWM4_OSHT_WIDTH_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_PWMA_FALLING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM5_PWMA_RISING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM6_PWMA_ENA.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM3_CHOPPER_DUTY_NEW.VALUE=50.0 -DRIVER.ETPWM.VAR.ETPWM2_CHOPPER_ACTUALPERIOD.VALUE=100.000 -DRIVER.ETPWM.VAR.ETPWM2_OSHT_ACTUAL_WIDTH.VALUE=100 -DRIVER.ETPWM.VAR.ETPWM7_DCBEVT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_CHOPPER_MODE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM7_DCBEVT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_CHOPPER_ACTUALPERIOD.VALUE=100.000 -DRIVER.ETPWM.VAR.ETPWM2_PWMA_DEADBAND_OUT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM7_CBC1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM6_PWMA_RISING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM5_TB_FREQUENCY.VALUE=110.000 -DRIVER.ETPWM.VAR.ETPWM1_SELECT_SOCA.VALUE=DCAEVT1 -DRIVER.ETPWM.VAR.ETPWM7_CBC2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_SELECT_SOCB.VALUE=DCBEVT1 -DRIVER.ETPWM.VAR.ETPWM7_CBC3.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_PWMA_PERIOD_REG.VALUE=1000 -DRIVER.ETPWM.VAR.ETPWM3_CHOPPER_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM2_HSPCLKDIV_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM7_CBC4.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM6_CHOPPER_ACTUALPERIOD.VALUE=100.000 -DRIVER.ETPWM.VAR.ETPWM7_CBC5.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_CBC6.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_PWMB_POLARITY.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM5_PWMA_COMPARE.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM3_PWMA_RISING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM1_CHOPPER_PERIOD_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM1_PWMB_PERIOD_REG.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM7_PWMA_FALLING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM7_PWMA_RISING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM6_BASE.VALUE=0xFCF79100 -DRIVER.ETPWM.VAR.ETPWM3_PWMB_DUTYTIME.VALUE=500.000 -DRIVER.ETPWM.VAR.ETPWM6_PWMB_ENA.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM5_OSHT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_PWMB_RISING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_PWMA_PERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM5_OSHT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_DEADBAND_INPUT.VALUE=PWMA_RED_FED -DRIVER.ETPWM.VAR.ETPWM5_PWMB_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM5_OSHT3.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_OSHT4.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_SELECT_EVENT.VALUE=NO_EVENT -DRIVER.ETPWM.VAR.ETPWM5_OSHT5.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_PWMB_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM5_OSHT6.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_OSHT_ACTUAL_WIDTH.VALUE=100 -DRIVER.ETPWM.VAR.ETPWM6_CLKDIV.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM7_PWMA_DEADBAND_OUT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM7_HSPCLKDIV_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM2_CHOPPER_DUTY_NEW.VALUE=50.0 -DRIVER.ETPWM.VAR.ETPWM3_PWMA_PERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM2_TB_FREQUENCY.VALUE=110.000 -DRIVER.ETPWM.VAR.ETPWM6_DCAEVT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_PWMA_POLARITY.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_SOCA_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_DCAEVT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_FDELAY_SOURCE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM1_RDELAY_SOURCE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM1_PWMA_DUTYTIME.VALUE=500.000 -DRIVER.ECAP.VAR.ECAP1_PRESCALE_REG.VALUE=0 -DRIVER.ECAP.VAR.ECAP2_ENA_PWM.VALUE=0 -DRIVER.ECAP.VAR.ECAP4_PRD.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP6_RESET_COUNTER_CAP1.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP6_RESET_COUNTER_CAP2.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP6_RESET_COUNTER_CAP3.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP6_RESET_COUNTER_CAP4.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP5_PWM_DUTY.VALUE=50 -DRIVER.ECAP.VAR.ECAP5_PWM_PERIOD.VALUE=1000.000 -DRIVER.ECAP.VAR.ECAP4_CAP2_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP5_PRESCALE.VALUE=0 -DRIVER.ECAP.VAR.ECAP5_PRD.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP6_PWM_COMPARE.VALUE=50 -DRIVER.ECAP.VAR.ECAP5_CAP4_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP5_ENA_LOAD.VALUE=0 -DRIVER.ECAP.VAR.ECAP6_PWM_PERIOD_REG.VALUE=0 -DRIVER.ECAP.VAR.ECAP6_WRAP_COUNTER.VALUE=CAPTURE_EVENT1 -DRIVER.ECAP.VAR.ECAP3_PWM_COMPARE.VALUE=50 -DRIVER.ECAP.VAR.ECAP2_CAP1_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP6_PRD.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP4_PWM_DUTYTIME.VALUE=500.000 -DRIVER.ECAP.VAR.ECAP3_RESET_COUNTER_CAP1.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP3_CAP3_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP3_RESET_COUNTER_CAP2.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP3_RESET_COUNTER_CAP3.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP3_RESET_COUNTER_CAP4.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP1_ENA_PWM.VALUE=0 -DRIVER.ECAP.VAR.ECAP3_WRAP_COUNTER.VALUE=CAPTURE_EVENT1 -DRIVER.ECAP.VAR.ECAP2_PWM_PERIOD_REG.VALUE=0 -DRIVER.ECAP.VAR.ECAP5_RESET_COUNTER.VALUE=0 -DRIVER.ECAP.VAR.ECAP5_CEVT1.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP4_CAPTURE_MODE.VALUE=ONE_SHOT -DRIVER.ECAP.VAR.ECAP5_CEVT2.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP5_CEVT3.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP5_CEVT4.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP1_PWM_DUTY.VALUE=50 -DRIVER.ECAP.VAR.ECAP1_CAP2_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP4_PWM_PERIOD.VALUE=1000.000 -DRIVER.ECAP.VAR.ECAP1_PWM_DUTYTIME.VALUE=500.000 -DRIVER.ECAP.VAR.ECAP5_CNTOVF.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP5_PRESCALE_REG.VALUE=0 -DRIVER.ECAP.VAR.ECAP2_CAP4_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP1_PRESCALE.VALUE=0 -DRIVER.ECAP.VAR.ECAP1_ENA_LOAD.VALUE=0 -DRIVER.ECAP.VAR.ECAP6_CAP2_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP1_CAPTURE_MODE.VALUE=ONE_SHOT -DRIVER.ECAP.VAR.ECAP2_PRESCALE_REG.VALUE=0 -DRIVER.ECAP.VAR.ECAP4_PWM_DUTY.VALUE=50 -DRIVER.ECAP.VAR.ECAP6_PWM_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ECAP.VAR.ECAP4_CAP1_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP1_CEVT1.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP1_CEVT2.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP1_CEVT3.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP2_RESET_COUNTER.VALUE=0 -DRIVER.ECAP.VAR.ECAP1_CEVT4.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP4_PRESCALE.VALUE=0 -DRIVER.ECAP.VAR.ECAP5_CAP3_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP4_ENA_LOAD.VALUE=0 -DRIVER.ECAP.VAR.ECAP3_CNTOVF.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP3_PWM_PERIOD.VALUE=1000.000 -DRIVER.ECAP.VAR.ECAP5_RESET_COUNTER_CAP1.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP5_RESET_COUNTER_CAP2.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP5_RESET_COUNTER_CAP3.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP5_RESET_COUNTER_CAP4.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP6_CEVT1.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP3_PWM_PERIOD_REG.VALUE=0 -DRIVER.ECAP.VAR.ECAP6_CEVT2.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP6_CEVT3.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP6_CEVT4.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP5_PWM_COMPARE.VALUE=50 -DRIVER.ECAP.VAR.ECAP5_PWM_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ECAP.VAR.ECAP6_ENA_PWM.VALUE=0 -DRIVER.ECAP.VAR.ECAP3_CAP2_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP5_PWM_DUTYTIME.VALUE=500.000 -DRIVER.ECAP.VAR.ECAP1_BASE.VALUE=0xFCF79300 -DRIVER.ECAP.VAR.ECAP4_CAP4_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP2_PWM_COMPARE.VALUE=50 -DRIVER.ECAP.VAR.ECAP4_WRAP_COUNTER.VALUE=CAPTURE_EVENT1 -DRIVER.ECAP.VAR.ECAP5_CAPTURE_MODE.VALUE=ONE_SHOT -DRIVER.ECAP.VAR.ECAP1_CAP1_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP2_RESET_COUNTER_CAP1.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP4_PWM_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ECAP.VAR.ECAP2_RESET_COUNTER_CAP2.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP1_CNTOVF.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP2_PWM_DUTYTIME.VALUE=500.000 -DRIVER.ECAP.VAR.ECAP2_RESET_COUNTER_CAP3.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP2_RESET_COUNTER_CAP4.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP2_CAP3_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP6_PRESCALE_REG.VALUE=0 -DRIVER.ECAP.VAR.ECAP2_BASE.VALUE=0xFCF79400 -DRIVER.ECAP.VAR.ECAP2_CEVT1.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP2_CEVT2.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP2_PWM_PERIOD.VALUE=1000.000 -DRIVER.ECAP.VAR.ECAP2_CEVT3.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP2_CEVT4.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP1_WRAP_COUNTER.VALUE=CAPTURE_EVENT1 -DRIVER.ECAP.VAR.ECAP6_CAP1_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP5_ENA_PWM.VALUE=0 -DRIVER.ECAP.VAR.ECAP4_RESET_COUNTER.VALUE=0 -DRIVER.ECAP.VAR.ECAP2_CAPTURE_MODE.VALUE=ONE_SHOT -DRIVER.ECAP.VAR.ECAP3_PWM_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ECAP.VAR.ECAP3_PWM_DUTY.VALUE=50 -DRIVER.ECAP.VAR.ECAP3_PRESCALE_REG.VALUE=0 -DRIVER.ECAP.VAR.ECAP1_CAP4_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP4_PWM_PERIOD_REG.VALUE=0 -DRIVER.ECAP.VAR.ECAP3_PRESCALE.VALUE=0 -DRIVER.ECAP.VAR.ECAP6_CNTOVF.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP3_BASE.VALUE=0xFCF79500 -DRIVER.ECAP.VAR.ECAP5_CAP2_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP3_ENA_LOAD.VALUE=0 -DRIVER.ECAP.VAR.ECAP6_CAP4_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP1_CMP.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP2_PWM_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ECAP.VAR.ECAP4_ENA_PWM.VALUE=0 -DRIVER.ECAP.VAR.ECAP3_CAP1_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP1_PWM_PERIOD.VALUE=1000.000 -DRIVER.ECAP.VAR.ECAP1_RESET_COUNTER.VALUE=0 -DRIVER.ECAP.VAR.ECAP6_PWM_DUTY.VALUE=50 -DRIVER.ECAP.VAR.ECAP2_CMP.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP6_PWM_DUTYTIME.VALUE=500.000 -DRIVER.ECAP.VAR.ECAP4_CAP3_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP4_BASE.VALUE=0xFCF79600 -DRIVER.ECAP.VAR.ECAP6_PRESCALE.VALUE=0 -DRIVER.ECAP.VAR.ECAP4_PWM_COMPARE.VALUE=50 -DRIVER.ECAP.VAR.ECAP4_RESET_COUNTER_CAP1.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP3_CEVT1.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP4_RESET_COUNTER_CAP2.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP3_CEVT2.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP4_RESET_COUNTER_CAP3.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP3_CEVT3.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP4_RESET_COUNTER_CAP4.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP3_CEVT4.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP6_ENA_LOAD.VALUE=0 -DRIVER.ECAP.VAR.ECAP5_WRAP_COUNTER.VALUE=CAPTURE_EVENT1 -DRIVER.ECAP.VAR.ECAP4_CNTOVF.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP3_CMP.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP1_PWM_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ECAP.VAR.ECAP6_RESET_COUNTER.VALUE=0 -DRIVER.ECAP.VAR.ECAP6_CAPTURE_MODE.VALUE=ONE_SHOT -DRIVER.ECAP.VAR.ECAP1_PWM_COMPARE.VALUE=50 -DRIVER.ECAP.VAR.ECAP2_CAP2_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP3_PWM_DUTYTIME.VALUE=500.000 -DRIVER.ECAP.VAR.ECAP3_CAP4_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP4_CMP.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP1_PRD.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP5_PWM_PERIOD_REG.VALUE=0 -DRIVER.ECAP.VAR.ECAP6_PWM_PERIOD.VALUE=1000.000 -DRIVER.ECAP.VAR.ECAP5_BASE.VALUE=0xFCF79700 -DRIVER.ECAP.VAR.ECAP3_ENA_PWM.VALUE=0 -DRIVER.ECAP.VAR.ECAP2_WRAP_COUNTER.VALUE=CAPTURE_EVENT1 -DRIVER.ECAP.VAR.ECAP3_CAPTURE_MODE.VALUE=ONE_SHOT -DRIVER.ECAP.VAR.ECAP1_RESET_COUNTER_CAP1.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP1_RESET_COUNTER_CAP2.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP1_RESET_COUNTER_CAP3.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP1_RESET_COUNTER_CAP4.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP5_CMP.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP2_PRD.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP2_PWM_DUTY.VALUE=50 -DRIVER.ECAP.VAR.ECAP1_CAP3_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP4_PRESCALE_REG.VALUE=0 -DRIVER.ECAP.VAR.ECAP2_PRESCALE.VALUE=0 -DRIVER.ECAP.VAR.ECAP2_CNTOVF.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP5_CAP1_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP1_PWM_PERIOD_REG.VALUE=0 -DRIVER.ECAP.VAR.ECAP6_CMP.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP2_ENA_LOAD.VALUE=0 -DRIVER.ECAP.VAR.ECAP3_PRD.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP3_RESET_COUNTER.VALUE=0 -DRIVER.ECAP.VAR.ECAP6_BASE.VALUE=0xFCF79800 -DRIVER.ECAP.VAR.ECAP6_CAP3_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP4_CEVT1.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP4_CEVT2.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP4_CEVT3.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP4_CEVT4.VALUE=0x0000 -DRIVER.EQEP.VAR.EQEP2_QUPRD.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_INDEX_EVT_INIT_ENABLE.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_IGATE.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_QPE_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_PC_RST_MODE.VALUE=MAX_POSITION -DRIVER.EQEP.VAR.EQEP1_UTO_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_SEL_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_INDEX_EVT_SELECT.VALUE=RISING_EDGE -DRIVER.EQEP.VAR.EQEP2_PCE_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_PCU_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_BASE.VALUE=0xFCF79900 -DRIVER.EQEP.VAR.EQEP1_INV_QEPS_POL.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_INV_QEPA_POL.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_PCSHDW.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_PC_INIT_VALUE.VALUE=0x00000000 -DRIVER.EQEP.VAR.EQEP2_PCR_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_BASE.VALUE=0xFCF79A00 -DRIVER.EQEP.VAR.EQEP1_ENABLE_CAPTURE.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_INV_QEPB_POL.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_MAXPC_VALUE.VALUE=0x00000000 -DRIVER.EQEP.VAR.EQEP1_PCM_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_PCPOL.VALUE=ACTIVE_HIGH -DRIVER.EQEP.VAR.EQEP2_UNIT_POS_PRESCALER.VALUE=PS_512 -DRIVER.EQEP.VAR.EQEP2_CAP_CLK_PRESCALER.VALUE=PS_8 -DRIVER.EQEP.VAR.EQEP1_PCSPW.VALUE=0x000 -DRIVER.EQEP.VAR.EQEP1_POSCMP.VALUE=0x00000000 -DRIVER.EQEP.VAR.EQEP2_PC_MODE.VALUE=DIRECTION_COUNT -DRIVER.EQEP.VAR.EQEP1_PCE_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_INV_QEPS_POL.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_SET_INIT_AT_STARTUP.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_ENABLE_CAPTURE.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_STROBE_EVT_SELECT.VALUE=DIRECTON_DEPENDENT -DRIVER.EQEP.VAR.EQEP2_PCPOL.VALUE=ACTIVE_HIGH -DRIVER.EQEP.VAR.EQEP2_INV_QEPA_POL.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_CAP_CLK_PRESCALER.VALUE=PS_8 -DRIVER.EQEP.VAR.EQEP2_QDC_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_QCLM.VALUE=ON_POSITION_COUNTER_READ -DRIVER.EQEP.VAR.EQEP1_PC_MODE.VALUE=DIRECTION_COUNT -DRIVER.EQEP.VAR.EQEP2_WTO_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_SWI_ENABLE.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_PCR_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_INV_QEPB_POL.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_IEL.VALUE=RISING_EDGE -DRIVER.EQEP.VAR.EQEP2_PCSPW.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_PC_INIT_VALUE.VALUE=0x00000000 -DRIVER.EQEP.VAR.EQEP1_PCLOAD.VALUE=QPOSCNT_EQ_QPSCMP -DRIVER.EQEP.VAR.EQEP2_IEL_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_IEL.VALUE=RISING_EDGE -DRIVER.EQEP.VAR.EQEP1_MAXPC_VALUE.VALUE=0x00000000 -DRIVER.EQEP.VAR.EQEP1_INV_QEPI_POL.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_QCLM.VALUE=ON_POSITION_COUNTER_READ -DRIVER.EQEP.VAR.EQEP1_STROBE_EVT_INIT_ENABLE.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_PCO_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_STROBE_EVT_INIT_ENABLE.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_EXT_CLK_RATE.VALUE=RESOLUTION_1x -DRIVER.EQEP.VAR.EQEP1_STROBE_EVT_SELECT.VALUE=DIRECTON_DEPENDENT -DRIVER.EQEP.VAR.EQEP1_UNIT_POS_PRESCALER.VALUE=PS_512 -DRIVER.EQEP.VAR.EQEP1_WDPRD.VALUE=0x0000 -DRIVER.EQEP.VAR.EQEP1_SEL.VALUE=RISING_EDGE -DRIVER.EQEP.VAR.EQEP1_SOEN.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_QPE_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_PC_RST_MODE.VALUE=MAX_POSITION -DRIVER.EQEP.VAR.EQEP1_WDE.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_SET_INIT_AT_STARTUP.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_UTO_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_SWI_ENABLE.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_POSITIVE_ROTATION.VALUE=CLOCKWISE -DRIVER.EQEP.VAR.EQEP2_SEL_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_SEL.VALUE=RISING_EDGE -DRIVER.EQEP.VAR.EQEP2_PCU_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_WDE.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_SPSEL.VALUE=INDEX_PIN -DRIVER.EQEP.VAR.EQEP1_PCSHDW.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_SWAP.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_SOEN.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_POSCMP.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_QUPRD.VALUE=0x00000000 -DRIVER.EQEP.VAR.EQEP1_IGATE.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_QDC_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_SWAP.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_WDPRD.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_WTO_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_POSITIVE_ROTATION.VALUE=CLOCKWISE -DRIVER.EQEP.VAR.EQEP2_INV_QEPI_POL.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_PCM_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_IEL_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_EXT_CLK_RATE.VALUE=RESOLUTION_1x -DRIVER.EQEP.VAR.EQEP2_SPSEL.VALUE=INDEX_PIN -DRIVER.EQEP.VAR.EQEP1_PCO_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_INDEX_EVT_SELECT.VALUE=RISING_EDGE -DRIVER.EQEP.VAR.EQEP1_INDEX_EVT_INIT_ENABLE.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_PCLOAD.VALUE=QPOSCNT_EQ_QPSCMP -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_11_NUMBER.VALUE=11 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_10_END.VALUE=9 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_7_NUMBER.VALUE=7 -DRIVER.FEE.VAR.FEE_START_SECTOR.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_3_DEVICE_INDEX.VALUE=0x00000000 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_13_DATASETS.VALUE=1 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_4_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_21_START.VALUE=20 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_13_START.VALUE=12 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_9_START.VALUE=8 -DRIVER.FEE.VAR.FEE_VS29_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_11_OFFSET.VALUE=0 -DRIVER.FEE.VAR.FEE_VS30_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VS22_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VS14_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_9_OFFSET.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_32_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_24_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_16_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_11_END.VALUE=10 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_11_SIZE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_2_WRITE_CYCLES.VALUE=0x8 -DRIVER.FEE.VAR.FEE_VS7_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_2_OFFSET.VALUE=0 -DRIVER.FEE.VAR.FEE_READ_CYCLE_COUNT.VALUE=10 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_5_IMED_DATA.VALUE=TRUE -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_3_DATASETS.VALUE=1 -DRIVER.FEE.VAR.FEE_NUMBER_OF_VIRTUAL_SECTORS.VALUE=4 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX15_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX4_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_FLASH_CRC_ENABLE.VALUE=STD_ON -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_26_START.VALUE=25 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_18_START.VALUE=17 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_7_SIZE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_12_NUMBER.VALUE=12 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_20_END.VALUE=19 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_12_END.VALUE=11 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_10_EEP.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_16_WRITE_CYCLES.VALUE=0x8 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_5_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_3_NUMBER.VALUE=3 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_32_NUMBER.VALUE=32 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_24_NUMBER.VALUE=24 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_16_NUMBER.VALUE=16 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_13_IMED_DATA.VALUE=TRUE -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_16_DATASETS.VALUE=1 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_5_NUMBER.VALUE=5 -DRIVER.FEE.VAR.FEE_SECTORS_EEP1.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_33_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_25_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_17_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_21_END.VALUE=20 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_13_END.VALUE=12 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_12_SIZE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_16_OFFSET.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_14_DEVICE_INDEX.VALUE=0x00000000 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_11_EEP.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_5_START.VALUE=4 -DRIVER.FEE.VAR.FEE_BLOCK_NUMBER.VALUE=1 -DRIVER.FEE.VAR.FEE_VS27_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VS19_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VS20_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VS12_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_7_OFFSET.VALUE=0 -DRIVER.FEE.VAR.FEE_DRIVER_INDEX.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_6_DATASETS.VALUE=1 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_13_WRITE_CYCLES.VALUE=0x8 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_9_WRITE_CYCLES.VALUE=0x8 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_8_SIZE.VALUE=0 -DRIVER.FEE.VAR.FEE_VS5_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_30_END.VALUE=29 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_22_END.VALUE=21 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_14_END.VALUE=13 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX9_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_12_EEP.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX13_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX2_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_6_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_30_START.VALUE=29 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_22_START.VALUE=21 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_14_START.VALUE=13 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_3_IMED_DATA.VALUE=TRUE -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_11_DEVICE_INDEX.VALUE=0x00000000 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_7_DEVICE_INDEX.VALUE=0x00000000 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_10_NUMBER.VALUE=10 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_26_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_18_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_NUMBER_OF_EEPS.VALUE=1 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_8_NUMBER.VALUE=8 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_31_END.VALUE=30 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_29_NUMBER.VALUE=29 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_23_END.VALUE=22 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_15_END.VALUE=14 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_13_SIZE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_13_EEP.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_1_NUMBER.VALUE=1 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_30_NUMBER.VALUE=30 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_22_NUMBER.VALUE=22 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_14_NUMBER.VALUE=14 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_10_WRITE_CYCLES.VALUE=0x8 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_6_WRITE_CYCLES.VALUE=0x8 -DRIVER.FEE.VAR.FEE_DEVICE_INDEX.VALUE=0 -DRIVER.FEE.VAR.FEE_PAGE_OVERHEAD.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_3_NUMBER.VALUE=3 -DRIVER.FEE.VAR.FEE_TI_FEE_SW_MAJOR_VERSION.VALUE=1 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_27_START.VALUE=26 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_19_START.VALUE=18 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_11_IMED_DATA.VALUE=TRUE -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_9_SIZE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_8_IMED_DATA.VALUE=TRUE -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_14_OFFSET.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_12_DATASETS.VALUE=1 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_9_DATASETS.VALUE=1 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_32_END.VALUE=31 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_24_END.VALUE=23 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_16_END.VALUE=15 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_1_END.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_1_START.VALUE=0 -DRIVER.FEE.VAR.FEE_VS33_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VS25_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VS17_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_14_EEP.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_4_DEVICE_INDEX.VALUE=0x00000000 -DRIVER.FEE.VAR.FEE_SECTOR_NUMBER.VALUE=1 -DRIVER.FEE.VAR.FEE_VS10_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUALPAGE_SIZE.VALUE=8 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_5_OFFSET.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_7_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VS3_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX7_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_3_WRITE_CYCLES.VALUE=0x8 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_1_EEP.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_2_DATASETS.VALUE=1 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_27_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_19_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_33_END.VALUE=32 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_25_END.VALUE=24 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_17_END.VALUE=16 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_2_END.VALUE=1 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_16_IMED_DATA.VALUE=TRUE -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_14_SIZE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX11_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_FLASH_WRITECOUNTER_SAVE.VALUE=STD_ON -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_15_EEP.VALUE=0 -DRIVER.FEE.VAR.FEE_VS_INDEX.VALUE=2 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_15_NUMBER.VALUE=15 -DRIVER.FEE.VAR.FEE_TI_FEE_SW_PATCH_VERSION.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_10_START.VALUE=9 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_6_START.VALUE=5 -DRIVER.FEE.VAR.FEE_JOBERROR_NOTIFICATION.VALUE=JobErrorNotification -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_1_DEVICE_INDEX.VALUE=0x00000000 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_10_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_6_NUMBER.VALUE=6 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_27_NUMBER.VALUE=27 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_19_NUMBER.VALUE=19 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_1_IMED_DATA.VALUE=TRUE -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_2_EEP.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_26_END.VALUE=25 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_20_NUMBER.VALUE=20 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_18_END.VALUE=17 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_12_NUMBER.VALUE=12 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_8_NUMBER.VALUE=8 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_3_END.VALUE=2 -DRIVER.FEE.VAR.FEE_BLOCK_SIZE.VALUE=0x10 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_16_EEP.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_15_DATASETS.VALUE=1 -DRIVER.FEE.VAR.FEE_TOTAL_BLOCKS_DATASETS.VALUE=1 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_1_NUMBER.VALUE=1 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_8_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_31_START.VALUE=30 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_23_START.VALUE=22 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_15_START.VALUE=14 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_1_SIZE.VALUE=8 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_12_OFFSET.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX.VALUE=1 -DRIVER.FEE.VAR.FEE_VS31_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VS23_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VS15_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_15_DEVICE_INDEX.VALUE=0x00000000 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_3_EEP.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_28_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_27_END.VALUE=26 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_19_END.VALUE=18 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_4_END.VALUE=3 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_15_SIZE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_6_IMED_DATA.VALUE=TRUE -DRIVER.FEE.VAR.FEE_VS8_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_3_OFFSET.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_5_DATASETS.VALUE=1 -DRIVER.FEE.VAR.FEE_MAXIMUM_BLOCKING_TIME.VALUE=600 -DRIVER.FEE.VAR.FEE_VS1_ENABLE.VALUE=1 -DRIVER.FEE.VAR.FEE_NO_OF_UNCONFIGURED_BLOCKS_TO_COPY.VALUE=0 -DRIVER.FEE.VAR.FEE_FLASH_BANK_NUM.VALUE=7 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX16_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_14_WRITE_CYCLES.VALUE=0x8 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX5_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_11_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_28_START.VALUE=27 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_4_EEP.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_13_NUMBER.VALUE=13 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_28_END.VALUE=27 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_5_END.VALUE=4 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_2_START.VALUE=1 -DRIVER.FEE.VAR.FEE_SECTOR_OVERHEAD.VALUE=16 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_14_IMED_DATA.VALUE=TRUE -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_12_DEVICE_INDEX.VALUE=0x00000000 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_8_DEVICE_INDEX.VALUE=0x00000000 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_9_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_4_NUMBER.VALUE=4 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_33_NUMBER.VALUE=32 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_25_NUMBER.VALUE=25 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_17_NUMBER.VALUE=17 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_2_SIZE.VALUE=0 -DRIVER.FEE.VAR.FEE_TI_FEE_SW_MINOR_VERSION.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_10_NUMBER.VALUE=10 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_6_NUMBER.VALUE=6 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_5_EEP.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_29_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_29_END.VALUE=28 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_6_END.VALUE=5 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_16_SIZE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_11_WRITE_CYCLES.VALUE=0x8 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_7_WRITE_CYCLES.VALUE=0x8 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_11_START.VALUE=10 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_7_START.VALUE=6 -DRIVER.FEE.VAR.FEE_VS28_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VERSIONINFO_API.VALUE=STD_ON -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_10_OFFSET.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_11_DATASETS.VALUE=1 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_8_DATASETS.VALUE=1 -DRIVER.FEE.VAR.MAX_BLOCK_TIME.VALUE=600 -DRIVER.FEE.VAR.FEE_VS21_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VS13_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_8_OFFSET.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_20_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_12_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VS6_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_WRITE_CYCLES.VALUE=10 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_6_EEP.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_5_DEVICE_INDEX.VALUE=0x00000000 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_1_OFFSET.VALUE=16 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_7_END.VALUE=6 -DRIVER.FEE.VAR.FEE_NUMBER_OF_BLOCKS.VALUE=1 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_BANK.VALUE=1 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX14_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_4_IMED_DATA.VALUE=TRUE -DRIVER.FEE.VAR.FEE_BLOCK_INDEX3_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_NUMBER_OF_EIGHTBYTEWRITES.VALUE=1 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_1_DATASETS.VALUE=1 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_32_START.VALUE=31 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_24_START.VALUE=23 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_16_START.VALUE=15 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_4_WRITE_CYCLES.VALUE=0x8 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_3_SIZE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_11_NUMBER.VALUE=11 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_7_EEP.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_9_NUMBER.VALUE=9 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_8_END.VALUE=7 -DRIVER.FEE.VAR.FEE_END_SECTOR.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_1_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_2_NUMBER.VALUE=2 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_31_NUMBER.VALUE=31 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_23_NUMBER.VALUE=23 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_15_NUMBER.VALUE=15 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_2_DEVICE_INDEX.VALUE=0x00000000 -DRIVER.FEE.VAR.FEE_FLASH_ERROR_CORRECTION_HANDLING.VALUE=TI_Fee_None -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_4_NUMBER.VALUE=4 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_12_IMED_DATA.VALUE=TRUE -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_9_IMED_DATA.VALUE=TRUE -DRIVER.FEE.VAR.FEE_DEVERROR_DETECT.VALUE=STD_ON -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_14_DATASETS.VALUE=1 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_21_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_13_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_29_START.VALUE=28 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_15_OFFSET.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_8_EEP.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_9_END.VALUE=8 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_3_START.VALUE=2 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_1_WRITE_CYCLES.VALUE=0x8 -DRIVER.FEE.VAR.FEE_VS26_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VS18_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VS11_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_6_OFFSET.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_4_SIZE.VALUE=0 -DRIVER.FEE.VAR.FEE_VS4_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_16_DEVICE_INDEX.VALUE=0x00000000 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_4_DATASETS.VALUE=1 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX8_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_MAX_NUMBER_OF_LINKS.VALUE=256 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_9_EEP.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX12_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX1_ENABLE.VALUE=1 -DRIVER.FEE.VAR.FEE_FLASH_ERROR_CORRECTION_ENABLE.VALUE=STD_ON -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_2_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_DATASELECT_BITS.VALUE=0 -DRIVER.FEE.VAR.FEE_OPERATING_FREQ.VALUE=150.000 -DRIVER.FEE.VAR.FEE_TOTAL_SECTORS.VALUE=32 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_16_NUMBER.VALUE=16 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_20_START.VALUE=19 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_12_START.VALUE=11 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_8_START.VALUE=7 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_15_WRITE_CYCLES.VALUE=0x8 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_2_IMED_DATA.VALUE=TRUE -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_30_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_22_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_14_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_7_NUMBER.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_28_NUMBER.VALUE=28 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_21_NUMBER.VALUE=21 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_13_NUMBER.VALUE=13 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_9_NUMBER.VALUE=9 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_13_DEVICE_INDEX.VALUE=0x00000000 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_9_DEVICE_INDEX.VALUE=0x00000000 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_2_NUMBER.VALUE=2 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_33_START.VALUE=32 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_25_START.VALUE=24 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_17_START.VALUE=16 -DRIVER.FEE.VAR.FEE_JOBEND_NOTIFICATION.VALUE=JobEndNotification -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_5_SIZE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_13_OFFSET.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_12_WRITE_CYCLES.VALUE=0x8 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_10_IMED_DATA.VALUE=TRUE -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_8_WRITE_CYCLES.VALUE=0x8 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_7_IMED_DATA.VALUE=TRUE -DRIVER.FEE.VAR.FEE_VS32_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VS24_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VS16_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_ENABLE_ECC.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_OVERHEAD.VALUE=24 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_10_DATASETS.VALUE=1 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_7_DATASETS.VALUE=1 -DRIVER.FEE.VAR.FEE_VS9_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_4_OFFSET.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_3_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VS2_ENABLE.VALUE=1 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX6_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_10_DEVICE_INDEX.VALUE=0x00000000 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_6_DEVICE_INDEX.VALUE=0x00000000 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_31_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_23_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_15_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_10_SIZE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX10_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_14_NUMBER.VALUE=14 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_4_START.VALUE=3 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_15_IMED_DATA.VALUE=TRUE -DRIVER.FEE.VAR.FEE_CHECK_BANK7_ACCESS.VALUE=STD_OFF -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_5_WRITE_CYCLES.VALUE=0x8 -DRIVER.FEE.VAR.FEE_POLLING_MODE.VALUE=STD_ON -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_5_NUMBER.VALUE=5 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_26_NUMBER.VALUE=26 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_18_NUMBER.VALUE=18 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_6_SIZE.VALUE=0 -DRIVER.AJSM.VAR.AJSM_NEW_KEY_WORD_2.VALUE=0xFFFDFFFE -DRIVER.AJSM.VAR.AJSM_NEW_KEY_WORD_3.VALUE=0xFFEFFFFF -DRIVER.AJSM.VAR.AJSM_VISIBLE_KEY_WORD_0.VALUE=0xEFFDFFFF -DRIVER.AJSM.VAR.AJSM_VISIBLE_KEY_WORD_1.VALUE=0xFFFFFFFF -DRIVER.AJSM.VAR.AJSM_VISIBLE_KEY_WORD_2.VALUE=0xFFFDFFFE -DRIVER.AJSM.VAR.AJSM_VISIBLE_KEY_WORD_3.VALUE=0xFFEFFFFF -DRIVER.AJSM.VAR.AJSM_SCAN_PATTERN_WORD_0.VALUE=PATTERN_NOT_REQUIRED -DRIVER.AJSM.VAR.AJSM_VISIBLE_KEY_ECC_BYTE_0.VALUE=0xED -DRIVER.AJSM.VAR.AJSM_SCAN_PATTERN_WORD_1.VALUE=PATTERN_NOT_REQUIRED -DRIVER.AJSM.VAR.AJSM_VISIBLE_KEY_ECC_BYTE_1.VALUE=0xED -DRIVER.AJSM.VAR.AJSM_SCAN_PATTERN_WORD_2.VALUE=PATTERN_NOT_REQUIRED -DRIVER.AJSM.VAR.AJSM_SCAN_PATTERN_WORD_3.VALUE=PATTERN_NOT_REQUIRED -DRIVER.AJSM.VAR.AJSM_NEW_KEY_ECC_BYTE_0.VALUE=0xED -DRIVER.AJSM.VAR.AJSM_NEW_KEY_ECC_BYTE_1.VALUE=0xED -DRIVER.AJSM.VAR.AJSM_SCAN_PATTERN.VALUE=PATTERN_NOT_REQUIRED -DRIVER.AJSM.VAR.AJSM_NEW_KEY_WORD_0.VALUE=0xEFFDFFFF -DRIVER.AJSM.VAR.AJSM_NEW_KEY_WORD_1.VALUE=0xFFFFFFFF diff --git a/tests/scripts/waf-tools/f_hcg/tests/test_hcg1.hcg b/tests/scripts/waf-tools/f_hcg/tests/test_hcg1.hcg deleted file mode 100644 index 5f1de359..00000000 --- a/tests/scripts/waf-tools/f_hcg/tests/test_hcg1.hcg +++ /dev/null @@ -1,915 +0,0 @@ - - - - TMS570LC43x - TMS570LC4357ZWT - test_hcg1.dil - ti - - - 04.07.01 - - - - - - - - - - - - - - - - - - - - - - - - - HL_hal_stdtypes.h - include\HL_hal_stdtypes.h - - - HL_sys_common.h - include\HL_sys_common.h - - - HL_reg_system.h - include\HL_reg_system.h - - - HL_reg_flash.h - include\HL_reg_flash.h - - - HL_reg_l2ramw.h - include\HL_reg_l2ramw.h - - - HL_reg_vim.h - include\HL_reg_vim.h - - - HL_reg_pbist.h - include\HL_reg_pbist.h - - - HL_reg_stc.h - include\HL_reg_stc.h - - - HL_reg_efc.h - include\HL_reg_efc.h - - - HL_reg_pcr.h - include\HL_reg_pcr.h - - - HL_reg_pmm.h - include\HL_reg_pmm.h - - - HL_reg_dma.h - include\HL_reg_dma.h - - - HL_reg_ccmr5.h - include\HL_reg_ccmr5.h - - - HL_sys_core.h - include\HL_sys_core.h - - - HL_system.h - include\HL_system.h - - - HL_sys_vim.h - include\HL_sys_vim.h - - - HL_sys_mpu.h - include\HL_sys_mpu.h - - - HL_sys_pmu.h - include\HL_sys_pmu.h - - - HL_sys_pcr.h - include\HL_sys_pcr.h - - - HL_sys_pmm.h - include\HL_sys_pmm.h - - - HL_sys_dma.h - include\HL_sys_dma.h - - - HL_sys_core.asm - source\HL_sys_core.asm - - - HL_sys_intvecs.asm - source\HL_sys_intvecs.asm - - - HL_sys_mpu.asm - source\HL_sys_mpu.asm - - - HL_sys_pmu.asm - source\HL_sys_pmu.asm - - - HL_sys_pcr.c - source\HL_sys_pcr.c - - - HL_sys_pmm.c - source\HL_sys_pmm.c - - - HL_sys_dma.c - source\HL_sys_dma.c - - - HL_system.c - source\HL_system.c - - - HL_sys_phantom.c - source\HL_sys_phantom.c - - - HL_sys_startup.c - source\HL_sys_startup.c - - - HL_sys_vim.c - source\HL_sys_vim.c - - - HL_sys_main.c - source\HL_sys_main.c - - - HL_notification.c - source\HL_notification.c - - - HL_sys_link.cmd - source\HL_sys_link.cmd - - - HL_reg_epc.h - include\HL_reg_epc.h - - - HL_reg_nmpu.h - include\HL_reg_nmpu.h - - - HL_reg_scm.h - include\HL_reg_scm.h - - - HL_reg_sdcmmr.h - include\HL_reg_sdcmmr.h - - - HL_epc.h - include\HL_epc.h - - - HL_epc.c - source\HL_epc.c - - - HL_nmpu.h - include\HL_nmpu.h - - - HL_nmpu.c - source\HL_nmpu.c - - - HL_errata.h - include\HL_errata.h - - - HL_errata.c - source\HL_errata.c - - - HL_Test.h - - - HL_errata_SSWF021_45.h - include\HL_errata_SSWF021_45.h - - - HL_errata_SSWF021_45_defs.h - include\HL_errata_SSWF021_45_defs.h - - - HL_errata_SSWF021_45.c - source\HL_errata_SSWF021_45.c - - - HL_reg_pinmux.h - - - HL_pinmux.h - - - HL_pinmux.c - - - HL_reg_rti.h - - - HL_rti.h - - - HL_rti.c - - - HL_reg_gio.h - - - HL_gio.h - - - HL_gio.c - - - HL_reg_esm.h - - - HL_esm.h - - - HL_esm.c - - - HL_reg_sci.h - - - HL_sci.h - - - HL_sci.c - - - HL_reg_lin.h - - - HL_lin.h - - - HL_lin.c - - - HL_reg_mibspi.h - - - HL_mibspi.h - - - HL_mibspi.c - - - HL_reg_spi.h - - - HL_spi.h - - - - HL_reg_can.h - - - HL_can.h - - - HL_can.c - - - HL_reg_adc.h - - - HL_adc.h - - - HL_adc.c - - - - - - - - - std_nhet.h - - - HL_reg_het.h - - - HL_het.h - - - HL_het.c - - - HL_reg_htu.h - - - HL_htu.h - - - - - - - - - HL_reg_i2c.h - - - HL_i2c.h - - - HL_i2c.c - - - HL_emac.h - - - HL_hw_emac.h - - - HL_hw_emac_ctrl.h - - - HL_hw_mdio.h - - - HL_hw_reg_access.h - - - HL_mdio.h - - - HL_emac.c - - - HL_mdio.c - - - HL_phy_dp83640.c - - - HL_phy_dp83640.h - - - HL_phy_tlk111.c - - - HL_phy_tlk111.h - - - HL_emac_phyConfig.h - - - HL_reg_dcc.h - - - HL_dcc.h - - - HL_dcc.c - - - HL_reg_rtp.h - - - HL_rtp.h - - - - HL_reg_dmm.h - - - HL_dmm.h - - - - HL_reg_emif.h - - - HL_emif.h - - - HL_emif.c - - - HL_reg_pom.h - - - HL_pom.h - - - HL_pom.c - - - HL_reg_crc.h - - - HL_crc.h - - - HL_crc.c - - - HL_reg_etpwm.h - - - HL_etpwm.h - - - HL_etpwm.c - - - HL_reg_ecap.h - - - HL_ecap.h - - - HL_ecap.c - - - HL_reg_eqep.h - - - HL_eqep.h - - - HL_eqep.c - - - Device_TMS570LC43.h - - - Device_header.h - - - Device_types.h - - - ti_fee_cfg.h - - - MemMap.h - - - ti_fee_types.h - - - ti_fee.h - - - fee_interface.h - - - - - - - - - - - - - - - - - - - - - - - include\HL_reg_pinmux.h - - - include\HL_pinmux.h - - - source\HL_pinmux.c - - - - - - - include\HL_reg_rti.h - - - include\HL_rti.h - - - source\HL_rti.c - - - - - - - include\HL_reg_gio.h - - - include\HL_gio.h - - - source\HL_gio.c - - - - - - - include\HL_reg_esm.h - - - include\HL_esm.h - - - source\HL_esm.c - - - - - - - include\HL_reg_sci.h - - - include\HL_sci.h - - - source\HL_sci.c - - - - - - - include\HL_reg_lin.h - - - include\HL_lin.h - - - source\HL_lin.c - - - - - - - include\HL_reg_mibspi.h - - - include\HL_mibspi.h - - - source\HL_mibspi.c - - - - - - - include\HL_reg_spi.h - - - include\HL_spi.h - - - - - - - - - - include\HL_reg_can.h - - - include\HL_can.h - - - source\HL_can.c - - - - - - - include\HL_reg_adc.h - - - include\HL_adc.h - - - source\HL_adc.c - - - - - - - include\std_nhet.h - - - include\HL_reg_het.h - - - include\HL_het.h - - - source\HL_het.c - - - include\HL_reg_htu.h - - - include\HL_htu.h - - - - - - - include\HL_reg_i2c.h - - - include\HL_i2c.h - - - source\HL_i2c.c - - - - - - - include\HL_emac.h - - - include\HL_hw_emac.h - - - include\HL_hw_emac_ctrl.h - - - include\HL_hw_mdio.h - - - include\HL_hw_reg_access.h - - - include\HL_mdio.h - - - source\HL_emac.c - - - source\HL_mdio.c - - - source\HL_phy_dp83640.c - - - include\HL_phy_dp83640.h - - - source\HL_phy_tlk111.c - - - include\HL_phy_tlk111.h - - - include\HL_emac_phyConfig.h - - - - - - - include\HL_reg_dcc.h - - - include\HL_dcc.h - - - source\HL_dcc.c - - - - - - - include\HL_reg_rtp.h - - - include\HL_rtp.h - - - - - - - - - - include\HL_reg_dmm.h - - - include\HL_dmm.h - - - - - - - - - - include\HL_reg_emif.h - - - include\HL_emif.h - - - source\HL_emif.c - - - - - - - include\HL_reg_pom.h - - - include\HL_pom.h - - - source\HL_pom.c - - - - - - - include\HL_reg_crc.h - - - include\HL_crc.h - - - source\HL_crc.c - - - - - - - include\HL_reg_etpwm.h - - - include\HL_etpwm.h - - - source\HL_etpwm.c - - - - - - - include\HL_reg_ecap.h - - - include\HL_ecap.h - - - source\HL_ecap.c - - - - - - - include\HL_reg_eqep.h - - - include\HL_eqep.h - - - source\HL_eqep.c - - - - - - - include\Device_TMS570LC43.h - - - include\Device_header.h - - - include\Device_types.h - - - include\ti_fee_cfg.h - - - include\MemMap.h - - - include\ti_fee_types.h - - - include\ti_fee.h - - - include\fee_interface.h - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/tests/scripts/waf-tools/f_hcg/tests/test_hcg1.json b/tests/scripts/waf-tools/f_hcg/tests/test_hcg1.json deleted file mode 100644 index b5ff5ac4..00000000 --- a/tests/scripts/waf-tools/f_hcg/tests/test_hcg1.json +++ /dev/null @@ -1,139 +0,0 @@ -{ - "sources": [ - "source\\HL_sys_core.asm", - "source\\HL_sys_intvecs.asm", - "source\\HL_sys_mpu.asm", - "source\\HL_sys_pmu.asm", - "source\\HL_sys_pcr.c", - "source\\HL_sys_pmm.c", - "source\\HL_sys_dma.c", - "source\\HL_system.c", - "source\\HL_sys_phantom.c", - "source\\HL_sys_startup.c", - "source\\HL_sys_vim.c", - "source\\HL_notification.c", - "source\\HL_epc.c", - "source\\HL_nmpu.c", - "source\\HL_errata.c", - "source\\HL_errata_SSWF021_45.c", - "source\\HL_pinmux.c", - "source\\HL_rti.c", - "source\\HL_gio.c", - "source\\HL_esm.c", - "source\\HL_sci.c", - "source\\HL_lin.c", - "source\\HL_mibspi.c", - "source\\HL_can.c", - "source\\HL_adc.c", - "source\\HL_het.c", - "source\\HL_i2c.c", - "source\\HL_emac.c", - "source\\HL_mdio.c", - "source\\HL_phy_dp83640.c", - "source\\HL_phy_tlk111.c", - "source\\HL_dcc.c", - "source\\HL_emif.c", - "source\\HL_pom.c", - "source\\HL_crc.c", - "source\\HL_etpwm.c", - "source\\HL_ecap.c", - "source\\HL_eqep.c" - ], - "headers": [ - "include\\HL_hal_stdtypes.h", - "include\\HL_sys_common.h", - "include\\HL_reg_system.h", - "include\\HL_reg_flash.h", - "include\\HL_reg_l2ramw.h", - "include\\HL_reg_vim.h", - "include\\HL_reg_pbist.h", - "include\\HL_reg_stc.h", - "include\\HL_reg_efc.h", - "include\\HL_reg_pcr.h", - "include\\HL_reg_pmm.h", - "include\\HL_reg_dma.h", - "include\\HL_reg_ccmr5.h", - "include\\HL_sys_core.h", - "include\\HL_system.h", - "include\\HL_sys_vim.h", - "include\\HL_sys_mpu.h", - "include\\HL_sys_pmu.h", - "include\\HL_sys_pcr.h", - "include\\HL_sys_pmm.h", - "include\\HL_sys_dma.h", - "include\\HL_reg_epc.h", - "include\\HL_reg_nmpu.h", - "include\\HL_reg_scm.h", - "include\\HL_reg_sdcmmr.h", - "include\\HL_epc.h", - "include\\HL_nmpu.h", - "include\\HL_errata.h", - "include\\HL_errata_SSWF021_45.h", - "include\\HL_errata_SSWF021_45_defs.h", - "include\\HL_reg_pinmux.h", - "include\\HL_pinmux.h", - "include\\HL_reg_rti.h", - "include\\HL_rti.h", - "include\\HL_reg_gio.h", - "include\\HL_gio.h", - "include\\HL_reg_esm.h", - "include\\HL_esm.h", - "include\\HL_reg_sci.h", - "include\\HL_sci.h", - "include\\HL_reg_lin.h", - "include\\HL_lin.h", - "include\\HL_reg_mibspi.h", - "include\\HL_mibspi.h", - "include\\HL_reg_spi.h", - "include\\HL_spi.h", - "include\\HL_reg_can.h", - "include\\HL_can.h", - "include\\HL_reg_adc.h", - "include\\HL_adc.h", - "include\\std_nhet.h", - "include\\HL_reg_het.h", - "include\\HL_het.h", - "include\\HL_reg_htu.h", - "include\\HL_htu.h", - "include\\HL_reg_i2c.h", - "include\\HL_i2c.h", - "include\\HL_emac.h", - "include\\HL_hw_emac.h", - "include\\HL_hw_emac_ctrl.h", - "include\\HL_hw_mdio.h", - "include\\HL_hw_reg_access.h", - "include\\HL_mdio.h", - "include\\HL_phy_dp83640.h", - "include\\HL_phy_tlk111.h", - "include\\HL_emac_phyConfig.h", - "include\\HL_reg_dcc.h", - "include\\HL_dcc.h", - "include\\HL_reg_rtp.h", - "include\\HL_rtp.h", - "include\\HL_reg_dmm.h", - "include\\HL_dmm.h", - "include\\HL_reg_emif.h", - "include\\HL_emif.h", - "include\\HL_reg_pom.h", - "include\\HL_pom.h", - "include\\HL_reg_crc.h", - "include\\HL_crc.h", - "include\\HL_reg_etpwm.h", - "include\\HL_etpwm.h", - "include\\HL_reg_ecap.h", - "include\\HL_ecap.h", - "include\\HL_reg_eqep.h", - "include\\HL_eqep.h", - "include\\Device_TMS570LC43.h", - "include\\Device_header.h", - "include\\Device_types.h", - "include\\ti_fee_cfg.h", - "include\\MemMap.h", - "include\\ti_fee_types.h", - "include\\ti_fee.h", - "include\\fee_interface.h" - ], - "removes": [ - "source\\HL_sys_main.c" - ] -} diff --git a/tests/scripts/waf-tools/f_hcg/tests/test_hcg2.dil b/tests/scripts/waf-tools/f_hcg/tests/test_hcg2.dil deleted file mode 100644 index 9d4e360f..00000000 --- a/tests/scripts/waf-tools/f_hcg/tests/test_hcg2.dil +++ /dev/null @@ -1,11969 +0,0 @@ -# TMS570LC4357ZWT 09/24/20 18:29:25 -# -ARCH=TMS570LC4357ZWT -# -DRIVER.TOOLS.VAR.GCC.VALUE=0 -DRIVER.TOOLS.VAR.ARM.VALUE=0 -DRIVER.TOOLS.VAR.IAR.VALUE=0 -DRIVER.TOOLS.VAR.GHS.VALUE=0 -DRIVER.TOOLS.VAR.TI.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_AVCLK4_DIVIDER.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_PERMISSION.VALUE=PRIV_RW_USER_RW_NOEXEC -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_SUB_3_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_TYPE.VALUE=NORMAL_OIWTNOWA_NONSHARED -DRIVER.SYSTEM.VAR.VIM_CHANNEL_122_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_114_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_106_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_70_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_62_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_54_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_46_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_38_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CAPTURE_EVENT_SOURCE_0.VALUE=0 -DRIVER.SYSTEM.VAR.FLASH_EEPROM_DATA_1_WAIT_STATE_FREQ.VALUE=32.0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_PERMISSION_VALUE.VALUE=0x1300 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_81_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_73_NAME.VALUE=het2LowLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_65_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_57_NAME.VALUE=adc2Group2Interrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_49_NAME.VALUE=mibspi4HighLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_2_MAPPING.VALUE=2 -DRIVER.SYSTEM.VAR.VIM_CAPTURE_EVENT_SOURCE_1.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_SIZE.VALUE=32_BYTES -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_SUB_1_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_SUB_4_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_111_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_103_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.EQEP2_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.FLASH_DATA_3_WAIT_STATE_FREQ.VALUE=180.0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_96_MAPPING.VALUE=96 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_88_MAPPING.VALUE=88 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_1_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_SUB_2_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_SUB_7_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_END_ADDRESS.VALUE=0x0000001f -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_SUB_5_DISABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_DATA_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_11_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.LIN2_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.SPI3_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_PLL1_BYPASS_ON_SLIP.VALUE=0x20000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_TYPE_VALUE.VALUE=0x0008 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_124_NAME.VALUE=epcFullInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_116_NAME.VALUE=sci4HighLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_108_NAME.VALUE=ecap5Interrupt -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_SUB_5_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_BASE_ADDRESS.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_SIZE.VALUE=128_MB -DRIVER.SYSTEM.VAR.VIM_CHANNEL_100_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_98_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_20_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_12_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_2_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.CRC_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.MIBSPI1_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_HCLK_FREQ.VALUE=150.000 -DRIVER.SYSTEM.VAR.CLKT_PLL2_FREQ.VALUE=300.00 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_81_MAPPING.VALUE=81 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_73_MAPPING.VALUE=73 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_65_MAPPING.VALUE=65 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_57_MAPPING.VALUE=57 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_49_MAPPING.VALUE=49 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_40_NAME.VALUE=dmaBTCAInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_32_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_24_NAME.VALUE=het1LowLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_16_NAME.VALUE=can1HighLevelInterrupt -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_SUB_6_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_SUB_0_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_92_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_84_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_76_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_68_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_31_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_23_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_15_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.ECLK_CLKSRC.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_TYPE_VALUE.VALUE=0x0006 -DRIVER.SYSTEM.VAR.CLKT_PLL2_OUTPUT_DIV.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_EXT2_ENABLE.VALUE=FALSE -DRIVER.SYSTEM.VAR.CLKT_PLL1_SOURCE_ENABLE.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_SUB_1_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_END_ADDRESS.VALUE=0x6fffffff -DRIVER.SYSTEM.VAR.VIM_CHANNEL_96_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_88_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_9_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_4_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_RTI2_PRE_SOURCE.VALUE=PLL1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_SIZE_VALUE.VALUE=0x1A -DRIVER.SYSTEM.VAR.VIM_CHANNEL_99_NAME.VALUE=etpwm5TripZoneInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_50_MAPPING.VALUE=50 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_42_MAPPING.VALUE=42 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_34_MAPPING.VALUE=34 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_26_MAPPING.VALUE=26 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_18_MAPPING.VALUE=18 -DRIVER.SYSTEM.VAR.CLKT_VCLK3_DOMAIN_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.FLASH_ECC_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.FLASH_BANKS.VALUE=4 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_TYPE.VALUE=NORMAL_OIWTNOWA_SHARED -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_SUB_4_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_SUB_2_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_IRQ_DISP_ENTRY.VALUE=_irqDispatch -DRIVER.SYSTEM.VAR.VIM_CHANNEL_111_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_103_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_92_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_84_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_76_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_68_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CAN3_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_AVCLK1_SOURCE.VALUE=VCLK -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_SUB_2_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_SUB_5_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.ETPWM4_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.DCC2_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_PLL1_RESET_ON_OSCILLATOR_FAIL.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_PERMISSION_VALUE.VALUE=0x0600 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_11_MAPPING.VALUE=11 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_PERMISSION.VALUE=PRIV_RW_USER_RW_NOEXEC -DRIVER.SYSTEM.VAR.LBIST_ENA.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_AVCLK2_DOMAIN_ENABLE.VALUE=TRUE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_SUB_3_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_SUB_6_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_TYPE.VALUE=NORMAL_OIWBWA_NONSHARED -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_END_ADDRESS.VALUE=0x003fffff -DRIVER.SYSTEM.VAR.VIM_CHANNEL_41_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_33_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_25_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_17_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_3_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.ECAP6_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.SCI_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.FLASH_DATA_1_WAIT_STATE_FREQ.VALUE=90.0 -DRIVER.SYSTEM.VAR.RAM_STACK_IRQ_BASE.VALUE=0x08001200 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_125_MAPPING.VALUE=125 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_117_MAPPING.VALUE=117 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_109_MAPPING.VALUE=109 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_90_NAME.VALUE=etpwm1Interrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_82_NAME.VALUE=dcc1DoneInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_74_NAME.VALUE=sciLowLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_66_NAME.VALUE=i2cInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_58_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.CLKT_AVCLK3_DOMAIN_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_PMU_GLOBAL_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_SIZE.VALUE=512_KB -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_END_ADDRESS.VALUE=0x0000001f -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_SUB_4_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_BASE_ADDRESS.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_97_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_89_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_81_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_73_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_70_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_65_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_62_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_57_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_54_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_49_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_46_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_38_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.EMAC_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_8_MAPPING.VALUE=8 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_2_NAME.VALUE=rtiCompare0Interrupt -DRIVER.SYSTEM.VAR.CORE_PMU_COUNTER0_EVENT.VALUE=0x11 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_PERMISSION.VALUE=PRIV_RO_USER_RO_NOEXEC -DRIVER.SYSTEM.VAR.FLASH_ADDRESS_WAIT_STATES.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_SUB_7_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_RESET_ENTRY.VALUE=_c_int00 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_127_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_122_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_119_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_114_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_106_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_9_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.ADC1_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.MIBSPI_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.ECLK_VCLK1_FREQ.VALUE=75.000 -DRIVER.SYSTEM.VAR.CLKT_EXTERNAL_FREQ.VALUE=00.0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_SIZE_VALUE.VALUE=0x04 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_125_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_117_NAME.VALUE=can4LowLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_110_MAPPING.VALUE=110 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_109_NAME.VALUE=ecap6Interrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_102_MAPPING.VALUE=102 -DRIVER.SYSTEM.VAR.CLKT_AVCLK3_DIVIDER.VALUE=1 -DRIVER.SYSTEM.VAR.RAM_LENGTH.VALUE=0x00080000 -DRIVER.SYSTEM.VAR.CLKT_VCLK1_DOMAIN_ENABLE.VALUE=FALSE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_SUB_2_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_SIZE.VALUE=256_MB -DRIVER.SYSTEM.VAR.VIM_CHANNEL_124_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_116_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_108_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.I2C2_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_41_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_33_NAME.VALUE=dmaFTCAInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_25_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_17_NAME.VALUE=spi2HighLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_1_MAPPING.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_EXTERNAL_SOURCE_ENABLE.VALUE=0x00000008 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_SUB_0_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_END_ADDRESS.VALUE=0x0000001f -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_BASE_ADDRESS.VALUE=0xF0000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_SUB_3_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_40_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_32_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_24_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_16_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_5_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_PERMISSION_VALUE.VALUE=0x1200 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_TYPE_VALUE.VALUE=0x0006 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_95_MAPPING.VALUE=95 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_87_MAPPING.VALUE=87 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_79_MAPPING.VALUE=79 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_SUB_1_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_SUB_6_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_SUB_4_DISABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_IRQ_VIC_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_121_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_113_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_105_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_70_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_62_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_54_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_50_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_46_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_42_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_38_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_34_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_26_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_18_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.SPI1_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.FLASH_EEPROM_DATA_8_WAIT_STATE_FREQ.VALUE=144.0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_100_NAME.VALUE=etpwm6Interrupt -DRIVER.SYSTEM.VAR.CLKT_RTI2_DIVIDER.VALUE=1 -DRIVER.SYSTEM.VAR.RAM_ECC_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_SUB_4_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_TYPE.VALUE=NORMAL_OIWTNOWA_SHARED -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_SUB_7_DISABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_99_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.CLKT_EXTERNAL_FREQ_INPUT.VALUE=16.0 -DRIVER.SYSTEM.VAR.STC_INTERVAL.VALUE=40 -DRIVER.SYSTEM.VAR.CLKT_LPO_HIGH_TRIM_VALUE.VALUE=16 -DRIVER.SYSTEM.VAR.CLKT_GCLK_FREQ.VALUE=300.000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_PERMISSION_VALUE.VALUE=0x1000 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_80_MAPPING.VALUE=80 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_72_MAPPING.VALUE=72 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_64_MAPPING.VALUE=64 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_56_MAPPING.VALUE=56 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_48_MAPPING.VALUE=48 -DRIVER.SYSTEM.VAR.CLKT_PLL1_REF_CLOCK_DIV.VALUE=8 -DRIVER.SYSTEM.VAR.FLASHW_BASE_ADDRESS.VALUE=0xFFF87000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_SUB_5_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_FIQ_ENTRY.VALUE="ldr pc,[pc,#-0x1b0]" -DRIVER.SYSTEM.VAR.VIM_CHANNEL_10_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.SCILIN_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.SPI_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.ALL_DVR_ENA.VALUE=1 -DRIVER.SYSTEM.VAR.CCM_MENU_VALUE.VALUE=0x0001 -DRIVER.SYSTEM.VAR.PBIST_ENA1.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_VCLK4_DIVIDER.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_SUB_0_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_TYPE.VALUE=DEVICE_NONSHAREABLE -DRIVER.SYSTEM.VAR.VIM_CHANNEL_97_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_89_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_OSCILLATOR_FREQ.VALUE=16.0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_91_NAME.VALUE=etpwm1TripZoneInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_83_NAME.VALUE=dcc2DoneInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_75_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_67_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_59_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_41_MAPPING.VALUE=41 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_33_MAPPING.VALUE=33 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_25_MAPPING.VALUE=25 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_17_MAPPING.VALUE=17 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_SUB_3_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_SUB_1_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_IRQ_MODE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_11_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_11_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.PMM_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.EMIF_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CAN1_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CAN_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_TYPE_VALUE.VALUE=0x0006 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_3_NAME.VALUE=rtiCompare1Interrupt -DRIVER.SYSTEM.VAR.CLKT_PLL1_OUTPUT_DIV.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_PERMISSION.VALUE=PRIV_RW_USER_RO_NOEXEC -DRIVER.SYSTEM.VAR.CLKT_PLL2_FM_ENABLE.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_SUB_1_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_SUB_4_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_BASE_ADDRESS.VALUE=0xF8000000 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_92_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_91_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_84_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_83_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_76_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_75_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_68_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_67_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_59_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_8_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.ETPWM2_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.HET1_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_RTI1_PRE_SOURCE.VALUE=PLL1 -DRIVER.SYSTEM.VAR.FLASH_MODE_VALUE.VALUE=3 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_SIZE_VALUE.VALUE=0x1B -DRIVER.SYSTEM.VAR.VIM_CHANNEL_126_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_118_NAME.VALUE=lin2LowLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_10_MAPPING.VALUE=10 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_SUB_2_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_SIZE.VALUE=128_MB -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_SUB_5_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_125_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_117_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_109_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_91_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_83_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_75_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_67_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_59_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_3_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.ECAP4_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_PLL2_BYPASS_ON_SLIP.VALUE=0x20000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_PERMISSION_VALUE.VALUE=0x1600 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_124_MAPPING.VALUE=124 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_116_MAPPING.VALUE=116 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_108_MAPPING.VALUE=108 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_50_NAME.VALUE=adc2Group0Interrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_42_NAME.VALUE=can2LowLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_34_NAME.VALUE=dmaLFSAInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_26_NAME.VALUE=mibspi1LowLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_18_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.FLASH_ARBITRATION.VALUE=FIX -DRIVER.SYSTEM.VAR.CLKT_LPO_HIGH_SOURCE_ENABLE.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_SUB_3_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_110_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_102_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.SCI4_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.PBIST_ALGO_9_10.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_EXTERNAL2_FREQ_INPUT.VALUE=16.0 -DRIVER.SYSTEM.VAR.FLASH_EEPROM_DATA_6_WAIT_STATE_FREQ.VALUE=112.0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_SIZE_VALUE.VALUE=0x12 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_7_MAPPING.VALUE=7 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_PERMISSION.VALUE=PRIV_RW_USER_RW_NOEXEC -DRIVER.SYSTEM.VAR.CLKT_RTI2_DOMAIN_ENABLE.VALUE=FALSE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_SUB_6_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_BACKGROUND_REGION_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_8_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_2_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CONFIG.VALUE=TRUE -DRIVER.SYSTEM.VAR.CRC2_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_101_MAPPING.VALUE=101 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_101_NAME.VALUE=etpwm6TripZoneInterrupt -DRIVER.SYSTEM.VAR.RAM_STACK_ABORT_LENGTH.VALUE=0x00000100 -DRIVER.SYSTEM.VAR.FLASH_EEPROM_DATA_WAIT_STATES.VALUE=9 -DRIVER.SYSTEM.VAR.FLASH_DATA_MAX_WAIT_STATES.VALUE=3 -DRIVER.SYSTEM.VAR.FLASH_MODE.VALUE=PIPELINE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_TYPE.VALUE=DEVICE_NONSHAREABLE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_SUB_7_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_SUB_1_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_61_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_61_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_53_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_53_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_45_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_45_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_40_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_37_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_37_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_32_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_29_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_29_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_24_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_16_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.MINIT_VALUE.VALUE=0x1E57F -DRIVER.SYSTEM.VAR.VIM_CHANNEL_0_MAPPING.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_PLL1_DIV.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_PERMISSION.VALUE=PRIV_RO_USER_RO_NOEXEC -DRIVER.SYSTEM.VAR.CLKT_VCLK4_DOMAIN_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_PLL2_ENABLE.VALUE=FALSE -DRIVER.SYSTEM.VAR.RAM_BASE_ADDRESS.VALUE=0x08000000 -DRIVER.SYSTEM.VAR.CORE_PMU_EVENT_EXPORT_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_SUB_2_DISABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_126_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_118_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_110_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_102_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_96_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_88_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.GIO_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_SIZE_VALUE.VALUE=0x04 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_94_MAPPING.VALUE=94 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_86_MAPPING.VALUE=86 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_78_MAPPING.VALUE=78 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_SUB_0_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_SUB_5_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_TYPE.VALUE=STRONGLYORDERED_SHAREABLE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_SUB_3_DISABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_BASE_ADDRESS.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_UNDEF_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_8_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.MIBSPI4_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.RAM_STACK_ABORT_BASE.VALUE=0x08001300 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_92_NAME.VALUE=etpwm2Interrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_84_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_76_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_68_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.CLKT_RTI1_DIVIDER.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_AVCLK4_DOMAIN_ENABLE.VALUE=FALSE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_SUB_3_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_SUB_6_DISABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_123_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_115_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_107_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_31_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_23_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_15_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_1_INT_TYPE.VALUE=FIQ -DRIVER.SYSTEM.VAR.CLKT_GHV_WAKUP_SOURCE.VALUE=PLL1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_TYPE_VALUE.VALUE=0x0000 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_71_MAPPING.VALUE=71 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_63_MAPPING.VALUE=63 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_55_MAPPING.VALUE=55 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_47_MAPPING.VALUE=47 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_39_MAPPING.VALUE=39 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_4_NAME.VALUE=rtiCompare2Interrupt -DRIVER.SYSTEM.VAR.CLKT_HCLK_DIVIDER.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_PMU_COUNTER1_EVENT.VALUE=0x11 -DRIVER.SYSTEM.VAR.EFUSE_SELFTEST_ENA.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_AVCLK4_DOMAIN_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.RAM_LINK_BASE_ADDRESS.VALUE=0x08001500 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_BASE_ADDRESS.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_SUB_4_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_SUB_7_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_120_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_112_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_104_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_30_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_22_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_14_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_PERMISSION_VALUE.VALUE=0x1600 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_127_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_119_NAME.VALUE=sci4LowLevelInterrupt -DRIVER.SYSTEM.VAR.CLKT_PLL2_DIV.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_VCLK3_DIVIDER.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_LPO_TRIM_OTP_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_SUB_7_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_SIZE.VALUE=8_MB -DRIVER.SYSTEM.VAR.VIM_CHANNEL_95_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_87_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_79_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_61_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_53_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_45_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_37_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_29_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_AVCLK4_SOURCE.VALUE=VCLK -DRIVER.SYSTEM.VAR.FLASH_EEPROM_DATA_4_WAIT_STATE_FREQ.VALUE=80.0 -DRIVER.SYSTEM.VAR.FLASH_ADDRESS_WAIT_STATES_FREQ.VALUE=120.0 -DRIVER.SYSTEM.VAR.RAM_STACK_BASE.VALUE=0x08000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_TYPE_VALUE.VALUE=0x0010 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_51_NAME.VALUE=adc2Group1Interrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_43_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_40_MAPPING.VALUE=40 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_35_NAME.VALUE=can2HighLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_32_MAPPING.VALUE=32 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_27_NAME.VALUE=lin1LowLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_24_MAPPING.VALUE=24 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_19_NAME.VALUE=crcInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_16_MAPPING.VALUE=16 -DRIVER.SYSTEM.VAR.CLKT_VCLK3_DOMAIN_ENABLE.VALUE=FALSE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_SUB_2_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_END_ADDRESS.VALUE=0xf07fffff -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_SUB_0_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.ETPWM7_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_1.VALUE=0 -DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_2.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_SUB_0_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_SUB_3_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_96_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_88_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_3.VALUE=0 -DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_4.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_110_NAME.VALUE=eqep1Interrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_102_NAME.VALUE=etpwm7Interrupt -DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_5.VALUE=0 -DRIVER.SYSTEM.VAR.LBIST_STT.VALUE=1 -DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_6.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_SUB_1_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_SUB_4_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_ECC_AVAILABLE.VALUE=TRUE -DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_7.VALUE=0 -DRIVER.SYSTEM.VAR.ECAP2_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_8.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_TYPE_VALUE.VALUE=0x000C -DRIVER.SYSTEM.VAR.VIM_CHANNEL_123_MAPPING.VALUE=123 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_115_MAPPING.VALUE=115 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_107_MAPPING.VALUE=107 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_10_NAME.VALUE=het1HighLevelInterrupt -DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_9.VALUE=0 -DRIVER.SYSTEM.VAR.RAM_STACK_USER_LENGTH.VALUE=0x00001000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_PERMISSION.VALUE=PRIV_RW_USER_RO_NOEXEC -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_SUB_2_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_SUB_7_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_END_ADDRESS.VALUE=0xffffffff -DRIVER.SYSTEM.VAR.CORE_CACHE_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_80_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_72_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_64_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_56_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_48_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_10_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_7_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.SCI2_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.LIN_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_RTI1_FREQ.VALUE=75.000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_SIZE_VALUE.VALUE=0x1A -DRIVER.SYSTEM.VAR.VIM_CHANNEL_6_MAPPING.VALUE=6 -DRIVER.SYSTEM.VAR.CLKT_PLL2_SPEADING_AMOUNT.VALUE=61 -DRIVER.SYSTEM.VAR.CLKT_PLL2_SPEADING_RATE.VALUE=255 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_SUB_5_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_BASE_ADDRESS.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_TYPE.VALUE=NORMAL_OIWTNOWA_SHARED -DRIVER.SYSTEM.VAR.VIM_CHANNEL_121_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_113_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_105_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_90_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_90_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_82_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_82_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_74_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_74_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_66_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_66_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_58_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_58_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_PLL2_RESET_ON_SLIP.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.ECLK_FREQ.VALUE=9.375 -DRIVER.SYSTEM.VAR.CLKT_AVCLK1_FREQ.VALUE=75.000 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_100_MAPPING.VALUE=100 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_93_NAME.VALUE=etpwm2TripZoneInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_85_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_77_NAME.VALUE=EMACTxIntISR -DRIVER.SYSTEM.VAR.VIM_CHANNEL_69_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.RAM_STACK_IRQ_LENGTH.VALUE=0x00000100 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_SUB_6_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_SUB_0_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_2_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_RTI2_POST_SOURCE.VALUE=VCLK -DRIVER.SYSTEM.VAR.FLASH_EEPROM_DATA_10_WAIT_STATE_FREQ.VALUE=176.0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_SIZE_VALUE.VALUE=0x04 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_PERMISSION_VALUE.VALUE=0x1600 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_PERMISSION_VALUE.VALUE=0x1200 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_5_NAME.VALUE=rtiCompare3Interrupt -DRIVER.SYSTEM.VAR.RAM_STACK_LENGTH.VALUE=0x00001500 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_PERMISSION.VALUE=PRIV_RO_USER_RO_EXEC -DRIVER.SYSTEM.VAR.CLKT_LPO_BIAS.VALUE=true -DRIVER.SYSTEM.VAR.CLKT_AVCLK3_DIVIDER1.VALUE=4 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_SUB_1_DISABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_END_ADDRESS.VALUE=0xffffffff -DRIVER.SYSTEM.VAR.CORE_PRAGMA_ENA.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_101_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_4_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_1_INT_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.SPI4_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_AVCLK4_POST_SOURCE.VALUE=VCLKA4_DIVR -DRIVER.SYSTEM.VAR.CLKT_VCLK1_FREQ.VALUE=75.000 -DRIVER.SYSTEM.VAR.CLKT_AVCLK3_FREQ1.VALUE=75.000 -DRIVER.SYSTEM.VAR.FLASH_EEPROM_DATA_2_WAIT_STATE_FREQ.VALUE=48.0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_93_MAPPING.VALUE=93 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_85_MAPPING.VALUE=85 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_77_MAPPING.VALUE=77 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_69_MAPPING.VALUE=69 -DRIVER.SYSTEM.VAR.CLKT_AVCLK3_FREQ2.VALUE=18.750 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_END_ADDRESS.VALUE=0x0000001f -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_SUB_4_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_SIZE.VALUE=32_BYTES -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_BASE_ADDRESS.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_SUB_2_DISABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_60_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_52_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_44_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_41_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_36_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_33_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_28_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_25_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_17_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.MIBSPI2_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_PLL1_MUL.VALUE=150 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_60_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_52_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_44_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_36_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_28_NAME.VALUE=adc1Group2Interrupt -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_PERMISSION.VALUE=PRIV_RO_USER_RO_NOEXEC -DRIVER.SYSTEM.VAR.CLKT_OSC_ENABLE.VALUE=TRUE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_SUB_2_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_SIZE.VALUE=32_BYTES -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_SUB_5_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_SVC_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_125_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_117_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_109_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_98_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_31_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_23_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_15_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.PINMUX_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.PBIST_ALGO_3_4.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_LPO_BIAS_VALUE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_70_MAPPING.VALUE=70 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_62_MAPPING.VALUE=62 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_54_MAPPING.VALUE=54 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_46_MAPPING.VALUE=46 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_38_MAPPING.VALUE=38 -DRIVER.SYSTEM.VAR.CLKT_AVCLK1_DOMAIN_ENABLE.VALUE=FALSE -DRIVER.SYSTEM.VAR.CLKT_EXTERNAL2_SOURCE_ENABLE.VALUE=0x00000080 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_SUB_3_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_SUB_6_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_PREFETCH_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_95_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_87_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_79_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.PBIST_ALGO_15.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_111_NAME.VALUE=eqep2Interrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_103_NAME.VALUE=etpwm7TripZoneInterrupt -DRIVER.SYSTEM.VAR.PBIST_ALGO_16.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_VCLK2_DIVIDER.VALUE=1 -DRIVER.SYSTEM.VAR.RAM_LINK_LENGTH.VALUE=0x0007EB00 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_SUB_6_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_END_ADDRESS.VALUE=0x0000001f -DRIVER.SYSTEM.VAR.VIM_CHANNEL_30_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_22_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_14_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_7_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CAN4_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_LPO_OSCFRQCONFIGCNT_VALUE.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_AVCLK2_SOURCE.VALUE=VCLK -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_TYPE_VALUE.VALUE=0x0010 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_31_MAPPING.VALUE=31 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_23_MAPPING.VALUE=23 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_15_MAPPING.VALUE=15 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_11_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.PBIST_ALGO_5_6.VALUE=0 -DRIVER.SYSTEM.VAR.PBIST_ENA.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_HCLK_DOMAIN_ENABLE.VALUE=TRUE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_SUB_7_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_SUB_1_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_122_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_114_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_111_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_106_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_103_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_10_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.ETPWM5_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.ETPWM_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_PLL2_MUL.VALUE=150 -DRIVER.SYSTEM.VAR.CLKT_RTI2_FREQ.VALUE=0.0 -DRIVER.SYSTEM.VAR.CLKT_LPO_LOW_FREQ.VALUE=0.080 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_TYPE.VALUE=NORMAL_OINC_NONSHARED -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_SUB_2_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_PREFETCH_ENTRY.VALUE=_prefetch -DRIVER.SYSTEM.VAR.VIM_CHANNEL_91_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_83_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_75_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_67_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_59_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.CLKT_AVCLK2_FREQ.VALUE=0.000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_TYPE_VALUE.VALUE=0x0006 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_PERMISSION_VALUE.VALUE=0x1600 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_PERMISSION_VALUE.VALUE=0x1200 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_94_NAME.VALUE=etpwm3Interrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_86_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_78_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.ECLK_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_OSCILLATOR_SOURCE_ENABLE.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_SUB_0_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_BASE_ADDRESS.VALUE=0x60000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_SUB_3_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_124_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_116_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_108_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_60_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_52_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_44_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_36_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_28_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.PBIST_ALGO_7_8.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_PLL2_RESET_ON_OSCILLATOR_FAIL.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.FLASH_BANK_LINK_BASE_ADDRESS_0.VALUE=0x00000020 -DRIVER.SYSTEM.VAR.FLASH_BANK_LINK_BASE_ADDRESS_1.VALUE=0x00200000 -DRIVER.SYSTEM.VAR.FLASH_EEPROM_DATA_0_WAIT_STATE_FREQ.VALUE=16.0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_SIZE_VALUE.VALUE=0x04 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_122_MAPPING.VALUE=122 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_114_MAPPING.VALUE=114 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_106_MAPPING.VALUE=106 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_6_NAME.VALUE=rtiOverflow0Interrupt -DRIVER.SYSTEM.VAR.CORE_PMU_COUNTER2_EVENT.VALUE=0x11 -DRIVER.SYSTEM.VAR.FLASH_DATA_WAIT_STATES.VALUE=3 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_SUB_1_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_SUB_6_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_95_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_87_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_79_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.ADC2_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_VCLK2_FREQ.VALUE=75.000 -DRIVER.SYSTEM.VAR.FLASH_DATA_2_WAIT_STATE_FREQ.VALUE=135.0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_5_MAPPING.VALUE=5 -DRIVER.SYSTEM.VAR.VIM_CHANNELS.VALUE=128 -DRIVER.SYSTEM.VAR.FLASH_BANK_LINK_BASE_ADDRESS_7.VALUE=0xF0200000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_SUB_4_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_SIZE.VALUE=32_BYTES -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_SUB_7_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_7_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.ESM_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_99_MAPPING.VALUE=99 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_61_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_53_NAME.VALUE=mibspi5HighLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_45_NAME.VALUE=can3HighLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_37_NAME.VALUE=mibspi3HighInterruptLevel -DRIVER.SYSTEM.VAR.VIM_CHANNEL_29_NAME.VALUE=can1LowLevelInterrupt -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_PERMISSION.VALUE=PRIV_RW_USER_RO_NOEXEC -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_SUB_5_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_SIZE.VALUE=32_BYTES -DRIVER.SYSTEM.VAR.VIM_CHANNEL_127_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_119_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_60_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_52_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_44_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_36_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_28_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_6_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.EQEP1_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_LPO_HIGH_FREQ.VALUE=10.000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_SIZE_VALUE.VALUE=0x12 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_SUB_0_DISABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_IRQ_ENTRY.VALUE="ldr pc,[pc,#-0x1b0]" -DRIVER.SYSTEM.VAR.VIM_CHANNEL_101_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_81_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_73_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_65_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_57_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_49_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.ECAP_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.LIN1_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.SPI2_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_GHV_POWER_DOWN_SOURCE.VALUE=PLL1 -DRIVER.SYSTEM.VAR.RAM_STACK_USER_BASE.VALUE=0x08000000 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_120_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_112_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_104_NAME.VALUE=ecap1Interrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_92_MAPPING.VALUE=92 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_84_MAPPING.VALUE=84 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_76_MAPPING.VALUE=76 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_68_MAPPING.VALUE=68 -DRIVER.SYSTEM.VAR.CLKT_GCLK_DOMAIN_ENABLE.VALUE=TRUE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_SUB_3_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_SUB_1_DISABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_81_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_73_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_65_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_57_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_49_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.SYSTEM_INIT.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_SIZE_VALUE.VALUE=0x04 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_20_NAME.VALUE=esmLowInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_12_NAME.VALUE=mibspi1HighLevelInterrupt -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_PERMISSION.VALUE=PRIV_NA_USER_NA_NOEXEC -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_SUB_1_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_SUB_4_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_BASE_ADDRESS.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_1_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_0_INT_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_0_INT_TYPE.VALUE=FIQ -DRIVER.SYSTEM.VAR.FLASH_EEPROM_DATA_9_WAIT_STATE_FREQ.VALUE=160.0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_PERMISSION_VALUE.VALUE=0x0600 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_PERMISSION_VALUE.VALUE=0x1200 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_61_MAPPING.VALUE=61 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_53_MAPPING.VALUE=53 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_45_MAPPING.VALUE=45 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_37_MAPPING.VALUE=37 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_29_MAPPING.VALUE=29 -DRIVER.SYSTEM.VAR.ECLK_PORT_BIT0_DIR.VALUE=1 -DRIVER.SYSTEM.VAR.FLASH_LENGTH.VALUE=0x00400000 -DRIVER.SYSTEM.VAR.RAM_STACK_FIQ_LENGTH.VALUE=0x00000100 -DRIVER.SYSTEM.VAR.CLKT_EXT1_ENABLE.VALUE=FALSE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_SUB_2_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_SUB_7_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_TYPE.VALUE=DEVICE_NONSHAREABLE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_SUB_5_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_100_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_51_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_43_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_35_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_27_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_21_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_19_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_13_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_ECC_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_AVCLK3_FREQ.VALUE=75.000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_TYPE_VALUE.VALUE=0x0006 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_95_NAME.VALUE=etpwm3TripZoneInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_87_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_79_NAME.VALUE=EMACRxIntISR -DRIVER.SYSTEM.VAR.CLKT_VCLK1_DIVIDER.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_PERMISSION.VALUE=PRIV_RO_USER_RO_NOEXEC -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_SUB_5_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_BASE_ADDRESS.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_TYPE.VALUE=NORMAL_OIWTNOWA_SHARED -DRIVER.SYSTEM.VAR.VIM_CHANNEL_124_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_116_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_108_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_94_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_86_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_78_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.CAN2_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.ECLK_PORT_BIT0_DOUT.VALUE=0 -DRIVER.SYSTEM.VAR.PBIST_ALGO_1.VALUE=0 -DRIVER.SYSTEM.VAR.FLASH_DATA_0_WAIT_STATE_FREQ.VALUE=45.0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_30_MAPPING.VALUE=30 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_22_MAPPING.VALUE=22 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_14_MAPPING.VALUE=14 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_7_NAME.VALUE=rtiOverflow1Interrupt -DRIVER.SYSTEM.VAR.PBIST_ALGO_2.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_RTI1_DOMAIN_ENABLE.VALUE=FALSE -DRIVER.SYSTEM.VAR.CLKT_AVCLK1_DOMAIN_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_SUB_6_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_SUB_0_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_127_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_119_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_30_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_22_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_14_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.ETPWM3_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.DCC1_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.HET2_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_VCLK3_FREQ.VALUE=75.000 -DRIVER.SYSTEM.VAR.CLKT_AVCLK4_FREQ1.VALUE=75.000 -DRIVER.SYSTEM.VAR.PBIST_ALGO_11_12.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_PLL2_SOURCE_ENABLE.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.FLASH_EEPROM_DATA_MAX_WAIT_STATES.VALUE=11 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_SUB_7_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_END_ADDRESS.VALUE=0x0000001f -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_SUB_1_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_94_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_86_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_78_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_21_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_13_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.ECAP5_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.ADC_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_TYPE_VALUE.VALUE=0x000B -DRIVER.SYSTEM.VAR.VIM_CHANNEL_70_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_62_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_54_NAME.VALUE=mibspi4LowLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_46_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_38_NAME.VALUE=mibspi3LowLevelInterrupt -DRIVER.SYSTEM.VAR.FEE_FLASH_ECC_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_SIZE.VALUE=32_BYTES -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_SUB_2_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_RESET_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_110_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_102_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_6_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_121_MAPPING.VALUE=121 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_113_MAPPING.VALUE=113 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_105_MAPPING.VALUE=105 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_SUB_0_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_SUB_5_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_RESERVED_ENTRY.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_121_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_113_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_105_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_71_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_63_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_55_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_47_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_39_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_TYPE_VALUE.VALUE=0x0006 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_121_NAME.VALUE=crc2Interrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_113_NAME.VALUE=can4HighLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_105_NAME.VALUE=ecap2Interrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_4_MAPPING.VALUE=4 -DRIVER.SYSTEM.VAR.CLKT_AVCLK3_DOMAIN_ENABLE.VALUE=FALSE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_SUB_3_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_END_ADDRESS.VALUE=0x87ffffff -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_SUB_6_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_SIZE.VALUE=4_GB -DRIVER.SYSTEM.VAR.VIM_CHANNEL_120_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_112_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_104_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.I2C1_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.FLASH_EEPROM_DATA_7_WAIT_STATE_FREQ.VALUE=128.0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_PERMISSION_VALUE.VALUE=0x1300 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_SIZE_VALUE.VALUE=0x04 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_PERMISSION_VALUE.VALUE=0x0300 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_98_MAPPING.VALUE=98 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_21_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_13_NAME.VALUE=lin1HighLevelInterrupt -DRIVER.SYSTEM.VAR.ECLK_PORT_BIT0_FUN.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_BASE_ADDRESS.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_SUB_4_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_SUB_7_DISABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_94_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_86_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_78_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_51_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_43_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_35_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_27_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_19_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.HET_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.PBIST_ALGO_13_14.VALUE=0 -DRIVER.SYSTEM.VAR.RAM_STACK_UNDEF_BASE.VALUE=0x08001400 -DRIVER.SYSTEM.VAR.RAM_STACK_SVC_BASE.VALUE=0x08001000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_SUB_7_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_TYPE.VALUE=NORMAL_OIWTNOWA_SHARED -DRIVER.SYSTEM.VAR.VIM_CHANNEL_99_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_3_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.DMM_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.MIBSPI5_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.FLASH_BANK_CONFIG_0.VALUE=ACTIVE -DRIVER.SYSTEM.VAR.CLKT_AVCLK4_FREQ.VALUE=75.000 -DRIVER.SYSTEM.VAR.FLASH_BANK_CONFIG_1.VALUE=ACTIVE -DRIVER.SYSTEM.VAR.VIM_CHANNEL_96_NAME.VALUE=etpwm4Interrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_91_MAPPING.VALUE=91 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_88_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_83_MAPPING.VALUE=83 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_75_MAPPING.VALUE=75 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_67_MAPPING.VALUE=67 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_59_MAPPING.VALUE=59 -DRIVER.SYSTEM.VAR.FLASH_BANK_CONFIG_2.VALUE=SLEEP -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_PERMISSION.VALUE=PRIV_RW_USER_RW_EXEC -DRIVER.SYSTEM.VAR.CLKT_VCLK2_DOMAIN_ENABLE.VALUE=FALSE -DRIVER.SYSTEM.VAR.FLASH_BANK_CONFIG_3.VALUE=SLEEP -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_TYPE.VALUE=NORMAL_OIWTNOWA_SHARED -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_SUB_2_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_END_ADDRESS.VALUE=0x0807ffff -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_SUB_0_DISABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_40_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_32_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_24_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_16_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_5_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.ECLK_PORT_BIT0_PDR.VALUE=0 -DRIVER.SYSTEM.VAR.FLASH_BANK_CONFIG_4.VALUE=SLEEP -DRIVER.SYSTEM.VAR.FLASH_BANK_CONFIG_5.VALUE=SLEEP -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_SIZE_VALUE.VALUE=0x15 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_8_NAME.VALUE=rtiTimebaseInterrupt -DRIVER.SYSTEM.VAR.ECLK_PRESCALER.VALUE=8 -DRIVER.SYSTEM.VAR.FLASH_BANK_CONFIG_6.VALUE=SLEEP -DRIVER.SYSTEM.VAR.FLASH_BANK_CONFIG_7.VALUE=ACTIVE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_END_ADDRESS.VALUE=0xffffffff -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_SUB_0_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_BASE_ADDRESS.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_SUB_3_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_126_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_118_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_97_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_89_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_80_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_72_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_64_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_56_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_48_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_VCLK4_FREQ.VALUE=75.0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_60_MAPPING.VALUE=60 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_52_MAPPING.VALUE=52 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_44_MAPPING.VALUE=44 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_36_MAPPING.VALUE=36 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_28_MAPPING.VALUE=28 -DRIVER.SYSTEM.VAR.CLKT_PLL1_BAND_WIDTH_ADJUSTMENT.VALUE=7 -DRIVER.SYSTEM.VAR.CLKT_LPO_LOW_SOURCE_ENABLE.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_SUB_1_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_SUB_6_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_SUB_4_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_PLL2_MUL_VAL.VALUE=9500 -DRIVER.SYSTEM.VAR.CLKT_RTI1_POST_SOURCE.VALUE=VCLK -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_SIZE_VALUE.VALUE=0x04 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_71_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_63_NAME.VALUE=het2HighLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_55_NAME.VALUE=can3LowLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_47_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_39_NAME.VALUE=dmaHBCAInterrupt -DRIVER.SYSTEM.VAR.CLKT_PLL2_BAND_WIDTH_ADJUSTMENT.VALUE=7 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_SUB_4_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_SIZE.VALUE=32_BYTES -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_SUB_7_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_DATA_ENTRY.VALUE=_dabort -DRIVER.SYSTEM.VAR.VIM_CHANNEL_80_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_72_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_64_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_56_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_48_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_21_MAPPING.VALUE=21 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_13_MAPPING.VALUE=13 -DRIVER.SYSTEM.VAR.CLKT_PLL2_REF_CLOCK_DIV.VALUE=8 -DRIVER.SYSTEM.VAR.CLKT_PLL1_SPEADING_RATE.VALUE=255 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_SUB_5_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_END_ADDRESS.VALUE=0x0000001f -DRIVER.SYSTEM.VAR.VIM_CHANNEL_50_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_42_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_34_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_26_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_18_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_0_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.ETPWM1_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_PLL1_RESET_ON_SLIP.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.FLASH_EEPROM_DATA_5_WAIT_STATE_FREQ.VALUE=96.0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_TYPE_VALUE.VALUE=0x0010 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_PERMISSION_VALUE.VALUE=0x0300 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_127_MAPPING.VALUE=127 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_122_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_119_MAPPING.VALUE=119 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_114_NAME.VALUE=i2c2Interrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_106_NAME.VALUE=ecap3nterrupt -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_PERMISSION.VALUE=PRIV_RO_USER_RO_EXEC -DRIVER.SYSTEM.VAR.CLKT_PLL1_FM_ENABLE.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_SUB_6_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_SUB_0_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_SIZE.VALUE=4_MB -DRIVER.SYSTEM.VAR.VIM_CHANNEL_123_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_115_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_107_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_90_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_82_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_74_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_66_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_58_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.ECAP3_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_30_NAME.VALUE=mibspi2LowLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_22_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_14_NAME.VALUE=adc1Group0Interrupt -DRIVER.SYSTEM.VAR.CLKT_LPOLO_ENABLE.VALUE=FALSE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_SUB_1_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_123_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_115_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_107_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.SCI3_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.ECLK_PORT_BIT0_PSL.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_120_MAPPING.VALUE=120 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_112_MAPPING.VALUE=112 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_104_MAPPING.VALUE=104 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_END_ADDRESS.VALUE=0x0000001f -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_SUB_4_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_BASE_ADDRESS.VALUE=0x80000000 -DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_SVC_ENTRY.VALUE=_svc -DRIVER.SYSTEM.VAR.VIM_CHANNEL_21_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_20_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_13_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_12_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CONFIG_NEW.VALUE=1 -DRIVER.SYSTEM.VAR.CRC1_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_EXTERNAL2_FREQ.VALUE=00.0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_TYPE_VALUE.VALUE=0x0002 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_97_NAME.VALUE=etpwm4TripZoneInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_89_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_3_MAPPING.VALUE=3 -DRIVER.SYSTEM.VAR.CLKT_LPOHI_ENABLE.VALUE=FALSE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_SUB_2_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_TYPE.VALUE=NORMAL_OIWTNOWA_SHARED -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_SUB_5_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_101_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_99_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_93_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_85_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_77_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_69_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_6_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.CLKT_GHV_NORMAL_SOURCE.VALUE=PLL1 -DRIVER.SYSTEM.VAR.CLKT_AVCLK3_DIV_FREQ.VALUE=75.0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_97_MAPPING.VALUE=97 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_89_MAPPING.VALUE=89 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_9_NAME.VALUE=gioHighLevelInterrupt -DRIVER.SYSTEM.VAR.CLKT_PLL1_ENABLE.VALUE=TRUE -DRIVER.SYSTEM.VAR.FLASH_BASE_ADDRESS.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_SUB_3_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_SUB_6_DISABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_51_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_43_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_35_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_27_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_19_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_5_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.SPI5_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_TYPE_VALUE.VALUE=0x0006 -DRIVER.SYSTEM.VAR.CLKT_AVCLK2_DOMAIN_DISABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_SUB_6_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_TYPE.VALUE=NORMAL_OINC_NONSHARED -DRIVER.SYSTEM.VAR.VIM_CHANNEL_120_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_112_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_104_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_100_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.RTP_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.MIBSPI3_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.FLASH_BANK_LINK_LENGTH_0.VALUE=0x001FFFE0 -DRIVER.SYSTEM.VAR.FLASH_BANK_LINK_LENGTH_1.VALUE=0x00200000 -DRIVER.SYSTEM.VAR.FLASH_EEPROM_DATA_11_WAIT_STATE_FREQ.VALUE=192.0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_SIZE_VALUE.VALUE=0x16 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_90_MAPPING.VALUE=90 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_82_MAPPING.VALUE=82 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_80_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_74_MAPPING.VALUE=74 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_72_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_66_MAPPING.VALUE=66 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_64_NAME.VALUE=sci3HighLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_58_MAPPING.VALUE=58 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_56_NAME.VALUE=mibspi5LowLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_48_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_SIZE.VALUE=32_BYTES -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_SUB_7_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_SUB_1_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_93_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_85_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_77_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_69_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.EQEP_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.RTI_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.STC_MAX_TIMEOUT.VALUE=0xFFFFFFFF -DRIVER.SYSTEM.VAR.CLKT_LPO_LOW_TRIM.VALUE=100.00 -DRIVER.SYSTEM.VAR.FLASH_EEPROM_DATA_3_WAIT_STATE_FREQ.VALUE=64.0 -DRIVER.SYSTEM.VAR.RAM_STACK_FIQ_BASE.VALUE=0x08001100 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_PERMISSION_VALUE.VALUE=0x1300 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_0_NAME.VALUE=esmHighInterrupt -DRIVER.SYSTEM.VAR.FLASH_BANK_LINK_LENGTH_7.VALUE=0x000020000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_SUB_2_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_50_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_42_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_34_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_26_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_18_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.FEE_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_10.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_LPO_LOW_TRIM_VALUE.VALUE=16 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_123_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_115_NAME.VALUE=lin2HighLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_107_NAME.VALUE=ecap4Interrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_51_MAPPING.VALUE=51 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_43_MAPPING.VALUE=43 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_35_MAPPING.VALUE=35 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_27_MAPPING.VALUE=27 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_19_MAPPING.VALUE=19 -DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_11.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_PERMISSION.VALUE=PRIV_RW_USER_RW_EXEC -DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_12.VALUE=0 -DRIVER.SYSTEM.VAR.CCM_MENU.VALUE=NONE -DRIVER.SYSTEM.VAR.CLKT_RESERVED_SOURCE_ENABLE.VALUE=0x00000004 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_SUB_0_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_SUB_5_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_SIZE.VALUE=512_KB -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_BASE_ADDRESS.VALUE=0x08000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_SUB_3_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_98_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_20_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_12_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_4_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_13.VALUE=0 -DRIVER.SYSTEM.VAR.POM_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_PLL1_MUL_VAL.VALUE=9500 -DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_14.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_AVCLK3_SOURCE.VALUE=VCLK -DRIVER.SYSTEM.VAR.CLKT_PLL1_FREQ.VALUE=300.00 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_SIZE_VALUE.VALUE=0x1F -DRIVER.SYSTEM.VAR.VIM_CHANNEL_31_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_23_NAME.VALUE=gioLowLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_15_NAME.VALUE=adc1Group1Interrupt -DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_15.VALUE=0 -DRIVER.SYSTEM.VAR.RAM_STACK_UNDEF_LENGTH.VALUE=0x00000100 -DRIVER.SYSTEM.VAR.RAM_STACK_SVC_LENGTH.VALUE=0x00000100 -DRIVER.SYSTEM.VAR.CLKT_LPO_TRIM_OTP_LOC.VALUE=0xF00801B4 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_SUB_3_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_SUB_6_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_UNDEF_ENTRY.VALUE=_undef -DRIVER.SYSTEM.VAR.VIM_CHANNEL_93_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_85_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_77_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_71_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_69_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_63_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_55_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_47_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_39_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.ETPWM6_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.DCC_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_20_MAPPING.VALUE=20 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_12_MAPPING.VALUE=12 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_PERMISSION.VALUE=PRIV_RW_USER_RO_NOEXEC -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_BASE_ADDRESS.VALUE=0xFFF80000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_SUB_4_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_SUB_7_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_ENDIAN_LITTLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_126_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_125_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_118_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_117_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_109_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.OS_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_SIZE_VALUE.VALUE=0x04 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_126_MAPPING.VALUE=126 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_118_MAPPING.VALUE=118 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_98_NAME.VALUE=etpwm5Interrupt -DRIVER.SYSTEM.VAR.ECLK_PORT_BIT0_PULL.VALUE=2 -DRIVER.SYSTEM.VAR.ECLK_SUSPEND.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_PLL1_SPEADING_AMOUNT.VALUE=61 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_TYPE.VALUE=NORMAL_OIWTNOWA_SHARED -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_SUB_5_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_VFP_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.ECAP1_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.I2C_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.AJSM_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.ECLK_OSCILLATOR_FREQ.VALUE=16.000 -DRIVER.SYSTEM.VAR.CLKT_LPO_HIGH_TRIM.VALUE=100.00 -DRIVER.SYSTEM.VAR.CLKT_AVCLK4_SPL_SOURCE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_9_MAPPING.VALUE=9 -DRIVER.SYSTEM.VAR.VIM_ECC_INTERRUPT_MAPPED_TO_VIM.VALUE=FALSE -DRIVER.SYSTEM.VAR.CLKT_VCLK4_DOMAIN_ENABLE.VALUE=FALSE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_SUB_0_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_71_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_63_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_55_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_47_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_41_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_39_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_33_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_25_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_17_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_9_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.SCI1_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_CRYSTAL_FREQ.VALUE=16.0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_TYPE_VALUE.VALUE=0x0008 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_111_MAPPING.VALUE=111 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_103_MAPPING.VALUE=103 -DRIVER.SYSTEM.VAR.VIM_PHANTOM_NAME.VALUE=phantomInterrupt -DRIVER.OS.VAR.OS_USERECERSIVEMUTEXES.VALUE=0 -DRIVER.OS.VAR.OS_USETIMERS.VALUE=0 -DRIVER.OS.VAR.OS_USECNTSEMAPHORE.VALUE=0 -DRIVER.OS.VAR.OS_GENERATERUNTIMESTATS.VALUE=0 -DRIVER.OS.VAR.OS_USEMPU.VALUE=0 -DRIVER.OS.VAR.OS_TOTALHEAPSIZE.VALUE=8192 -DRIVER.OS.VAR.OS_USEVERBOSESTACK.VALUE=2 -DRIVER.OS.VAR.OS_TIMERPRIORITY.VALUE=0 -DRIVER.OS.VAR.OS_SVCENABLE.VALUE=0 -DRIVER.OS.VAR.OS_MAXTASKNAMELEN.VALUE=16 -DRIVER.OS.VAR.OS_MAXPRIORITIES.VALUE=5 -DRIVER.OS.VAR.OS_TIMERTASKSTACKDEPTH.VALUE=0 -DRIVER.OS.VAR.OS_COROUTINEPRIORITIES.VALUE=2 -DRIVER.OS.VAR.OS_USECOROUTINES.VALUE=0 -DRIVER.OS.VAR.OS_USEMUTEXES.VALUE=0 -DRIVER.OS.VAR.OS_CPUCLOCKHZ.VALUE=80000000 -DRIVER.OS.VAR.OS_USEMALLOCFAILEDHOOK.VALUE=0 -DRIVER.OS.VAR.OS_MINSTACKSIZE.VALUE=128 -DRIVER.OS.VAR.OS_SYSTEM_MODE.VALUE=0x1F -DRIVER.OS.VAR.OS_USEPREEMPTION.VALUE=1 -DRIVER.OS.VAR.OS_IDLESHOULDYIELD.VALUE=1 -DRIVER.OS.VAR.OS_USEIDLEHOOK.VALUE=0 -DRIVER.OS.VAR.OS_TICKRATEHZ.VALUE=1000 -DRIVER.OS.VAR.OS_TIMERPQUEUELENGTH.VALUE=0 -DRIVER.OS.VAR.OS_USETRACE.VALUE=0 -DRIVER.OS.VAR.OS_USESTACK.VALUE=0 -DRIVER.OS.VAR.OS_USETICKHOOK.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL93_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL85_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL77_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL69_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL0_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL21_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL13_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL71_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL63_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL55_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL47_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL39_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL94_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL86_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL78_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL3_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL41_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL33_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL25_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL17_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL88_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL9_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL50_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL42_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL34_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL26_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL18_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL81_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL73_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL65_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL57_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL49_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL2_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL11_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL50_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL42_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL34_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL26_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL18_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL8_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL5_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL11_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL71_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL63_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL55_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL47_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL39_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL92_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL84_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL76_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL68_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL11_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL70_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL62_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL54_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL46_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL38_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL92_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL84_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL76_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL68_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL1_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL94_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL86_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL78_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL7_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL40_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL32_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL24_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL16_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL71_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL63_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL55_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL47_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL39_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL0_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL40_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL32_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL24_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL16_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL40_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL32_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL24_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL16_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL10_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL89_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL6_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL89_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL4_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL61_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL53_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL45_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL37_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL29_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL91_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL83_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL75_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL67_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL59_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL61_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL53_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL45_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL37_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL29_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL92_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL84_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL76_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL68_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL5_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL61_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL53_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL45_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL37_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL29_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL90_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL82_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL74_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL66_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL58_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_LOW_TIME.VALUE=218.453 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL30_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL22_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL14_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL31_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL23_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL15_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL9_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL30_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL22_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL14_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL95_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL87_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL79_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL4_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL88_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL3_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL51_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL43_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL35_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL27_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL19_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL90_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL82_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL74_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL66_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL58_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL89_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL90_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL82_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL74_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL66_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL58_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL3_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL9_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL51_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL43_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL35_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL27_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL19_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL60_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL52_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL44_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL36_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL28_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL20_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL12_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL80_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL72_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL64_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL56_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL48_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_VCLK_FREQ.VALUE=75 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL30_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL22_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL14_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL8_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL20_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL12_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL93_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL85_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL77_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL69_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL2_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL95_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL87_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL79_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL2_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL95_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL87_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL79_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL8_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL80_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL72_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL64_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL56_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL48_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL1_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL41_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL33_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL25_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL17_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL81_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL73_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL65_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL57_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL49_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL41_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL33_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL25_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL17_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL10_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL7_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL51_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL43_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL35_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL27_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL19_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL70_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL62_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL54_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL46_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL38_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL21_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL13_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL7_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL10_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL93_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL85_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL77_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL69_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL6_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL91_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL83_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL75_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL67_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL59_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL0_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL94_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL86_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL78_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL1_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL70_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL62_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL54_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL46_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL38_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_BASE.VALUE=0xFFFFF500 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL31_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL23_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL15_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL31_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL23_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL15_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL80_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL72_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL64_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL56_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL48_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL88_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL5_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL50_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL42_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL34_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL26_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL18_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL60_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL52_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL44_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL36_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL28_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL20_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL12_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL6_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL91_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL83_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL75_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL67_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL59_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL4_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL60_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL52_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL44_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL36_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL28_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_LPC.VALUE=16384 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL21_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL13_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL81_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL73_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL65_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL57_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL49_INT_LEVEL.VALUE=0 -DRIVER.RTI.VAR.RTI_1_COMPARE_2_SOURCE.VALUE=0x00000100 -DRIVER.RTI.VAR.RTI_1_COMPARE_3_FREQ.VALUE=0.000100000 -DRIVER.RTI.VAR.RTI_1_FREQ.VALUE=75.000 -DRIVER.RTI.VAR.RTI_1_COMPARE_1_ACTUALTIME.VALUE=5.000 -DRIVER.RTI.VAR.RTI_1_COUNTER_1_UC_COMPARE.VALUE=7 -DRIVER.RTI.VAR.RTI_1_COMPARE_1_TIME.VALUE=5.000 -DRIVER.RTI.VAR.RTI_1_COMPARE_3_UPDATE.VALUE=93750 -DRIVER.RTI.VAR.RTI_1_CONTINUE_ON_SUSPEND_ENABLE.VALUE=0x00000000 -DRIVER.RTI.VAR.RTI_1_COMPARE_1_INPUT_FREQ.VALUE=9.375000000 -DRIVER.RTI.VAR.RTI_1_COMPARE_0_SOURCE.VALUE=0x00000000 -DRIVER.RTI.VAR.RTI_1_COMPARE_2_TIME.VALUE=8.000 -DRIVER.RTI.VAR.RTI_1_COMPARE_0_ACTUALTIME.VALUE=1.000 -DRIVER.RTI.VAR.RTI_1_COUNTER_0_UC_COMPARE.VALUE=7 -DRIVER.RTI.VAR.RTI_1_COMPARE_1_UPDATE.VALUE=46875 -DRIVER.RTI.VAR.RTI_1_COMPARE_3_TIME.VALUE=10.000 -DRIVER.RTI.VAR.RTI_1_COUNTER_0_NTU_SOURCE.VALUE=1 -DRIVER.RTI.VAR.RTI_1_COMPARE_0_INPUT_FREQ.VALUE=9.375000000 -DRIVER.RTI.VAR.RTI_1_COUNTER_0_RTI_FREQ.VALUE=0.0 -DRIVER.RTI.VAR.RTI_1_COUNTER_0_FREQ.VALUE=9.375000000 -DRIVER.RTI.VAR.RTI_1_COUNTER_1_FREQUENCY.VALUE=10.000 -DRIVER.RTI.VAR.RTI_1_COMPARE_3_SOURCE.VALUE=0x00001000 -DRIVER.RTI.VAR.RTI_1_COUNTER_1_FREQ.VALUE=9.375000000 -DRIVER.RTI.VAR.RTI_1_COUNTER_0_NTU_SOURCE_REG.VALUE=0x5 -DRIVER.RTI.VAR.RTI_1_COMPARE_1_SOURCE.VALUE=0x00000000 -DRIVER.RTI.VAR.RTI_1_NTU_1_FREQ.VALUE=0.0 -DRIVER.RTI.VAR.RTI_1_COMPARE_3_ACTUALTIME.VALUE=10.000 -DRIVER.RTI.VAR.RTI_1_COMPARE_0_FREQ.VALUE=0.001000000 -DRIVER.RTI.VAR.RTI_1_COMPARE_2_UPDATE.VALUE=75000 -DRIVER.RTI.VAR.RTI_1_BASE.VALUE=0xFFFFFC00 -DRIVER.RTI.VAR.RTI_1_NTU_2_FREQ.VALUE=0.0 -DRIVER.RTI.VAR.RTI_1_COMPARE_3_INPUT_FREQ.VALUE=9.375000000 -DRIVER.RTI.VAR.RTI_1_COMPARE_1_FREQ.VALUE=0.000200000 -DRIVER.RTI.VAR.RTI_1_COUNTER_0_CAPTURE_SOURCE_ENABLE.VALUE=0 -DRIVER.RTI.VAR.RTI_1_COUNTER_1_CAPTURE_SOURCE_ENABLE.VALUE=0 -DRIVER.RTI.VAR.RTI_1_COMPARE_0_UPDATE.VALUE=9375 -DRIVER.RTI.VAR.RTI_1_NTU_3_FREQ.VALUE=300.000 -DRIVER.RTI.VAR.RTI_1_COMPARE_0.VALUE=9375 -DRIVER.RTI.VAR.RTI_1_COMPARE_2_ACTUALTIME.VALUE=8.000 -DRIVER.RTI.VAR.RTI_1_COMPARE_1.VALUE=46875 -DRIVER.RTI.VAR.RTI_1_COMPARE_2.VALUE=75000 -DRIVER.RTI.VAR.RTI_1_COMPARE_3.VALUE=93750 -DRIVER.RTI.VAR.RTI_1_COUNTER_0_NTU_FREQ.VALUE=0.000 -DRIVER.RTI.VAR.RTI_1_COMPARE_2_FREQ.VALUE=0.000125000 -DRIVER.RTI.VAR.RTI_1_COMPARE_0_TIME.VALUE=1.000 -DRIVER.RTI.VAR.RTI_1_NTU_4_FREQ.VALUE=0.000 -DRIVER.RTI.VAR.RTI_1_COMPARE_2_INPUT_FREQ.VALUE=9.375000000 -DRIVER.RTI.VAR.RTI_1_COUNTER_0_FREQUENCY.VALUE=10.000 -DRIVER.GIO.VAR.GIO_PORT1_BIT4_PULL.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT0_BIT5_DIR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT4_PULDIS.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT7_DOUT.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT2_LVL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT7_PSL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT3_PDR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT2_POL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT6_ENA.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT2_PSL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT6_DIR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT2_DOUT.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT3_LVL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT4_PDR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT3_POL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT5_PULDIS.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT7_ENA.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT3_PSL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT5_PULL.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT0_BIT7_DIR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT4_LVL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT5_PDR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT4_POL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT2_PULDIS.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT4_PSL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT0_PULL.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT0_BIT3_DOUT.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT5_LVL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT6_PDR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT5_POL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT5_PSL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT6_PULL.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT0_BIT6_LVL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT3_PULDIS.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT7_PDR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT6_POL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT0_DOUT.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT6_PSL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT1_PULL.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT0_BIT4_DOUT.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT7_LVL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT7_PULDIS.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT7_POL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT0_PULDIS.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT7_PSL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT7_PULL.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT1_BIT1_DOUT.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT2_PULL.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT1_BIT1_PULDIS.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT5_DOUT.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT0_ENA.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT5_PULDIS.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT0_DIR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT2_DOUT.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT3_PULL.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT1_BIT1_ENA.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT6_DOUT.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT1_DIR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT6_PULDIS.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT2_ENA.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT2_DIR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT0_PDR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT0_PULL.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT0_BIT3_PULDIS.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT3_DOUT.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT4_PULL.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT1_BIT3_ENA.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT7_DOUT.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT3_DIR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT0_LVL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT1_PDR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT0_POL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT4_ENA.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT0_PSL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT4_DIR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT4_PULDIS.VALUE=0 -DRIVER.GIO.VAR.GIO_BASE_PORTA.VALUE=0xFFF7BC34 -DRIVER.GIO.VAR.GIO_BASE_PORTB.VALUE=0xFFF7BC54 -DRIVER.GIO.VAR.GIO_PORT1_BIT1_LVL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT2_PDR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT1_POL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT1_PULL.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT1_BIT4_DOUT.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT5_PULL.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT1_BIT5_ENA.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT1_PSL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT5_DIR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT2_LVL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT1_PULDIS.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT0_ENA.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT3_PDR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT2_POL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT0_DIR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT6_ENA.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT2_PSL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT6_DIR.VALUE=0 -DRIVER.GIO.VAR.GIO_BASE.VALUE=0xFFF7BC00 -DRIVER.GIO.VAR.GIO_PORT1_BIT3_LVL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT1_ENA.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT4_PDR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT3_POL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT2_PULL.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT0_BIT1_DIR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT5_DOUT.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT6_PULL.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT1_BIT7_ENA.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT2_PULDIS.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT3_PSL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT7_DIR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT4_LVL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT2_ENA.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT5_PDR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT4_POL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT2_DIR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT0_DOUT.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT6_PULDIS.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT4_PSL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT0_PDR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORTB_ENABLE.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT1_BIT5_LVL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT3_ENA.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT6_PDR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT5_POL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT3_PULL.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT0_BIT3_DIR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT6_DOUT.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT7_PULL.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT0_BIT0_LVL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT5_PSL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT1_PDR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT0_POL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT6_LVL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT7_PULDIS.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT4_ENA.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT7_PDR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT6_POL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT0_PSL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT4_DIR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT0_PULDIS.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT1_DOUT.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT1_LVL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT6_PSL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT2_PDR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT1_POL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT7_LVL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT5_ENA.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT7_POL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT1_PSL.VALUE=0 -DRIVER.SCI.VAR.SCI4_PORT_BIT2_PULL.VALUE=2 -DRIVER.SCI.VAR.SCI1_PORT_BIT2_DOUT.VALUE=0 -DRIVER.SCI.VAR.SCI4_BASE.VALUE=0xFFF7E700 -DRIVER.SCI.VAR.SCI4_LENGTH.VALUE=8 -DRIVER.SCI.VAR.SCI3_BREAKINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI2_PORT_BIT0_DOUT.VALUE=0 -DRIVER.SCI.VAR.SCI1_PORT_BIT2_PSL.VALUE=1 -DRIVER.SCI.VAR.SCI3_PORT_BIT0_FUN.VALUE=0 -DRIVER.SCI.VAR.SCI4_ACTUALBAUDRATE.VALUE=9606 -DRIVER.SCI.VAR.SCI4_FEINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI3_PORT_BIT2_DIR.VALUE=0 -DRIVER.SCI.VAR.SCI1_BAUDRATE.VALUE=9600 -DRIVER.SCI.VAR.SCI4_OEINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI4_TXINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI3_PORT_BIT0_PDR.VALUE=0 -DRIVER.SCI.VAR.SCI2_PEINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI1_STOPBITS.VALUE=2 -DRIVER.SCI.VAR.SCI3_PORT_BIT1_FUN.VALUE=1 -DRIVER.SCI.VAR.SCI3_WAKEINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI1_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.SCI.VAR.SCI1_RXINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI4_WAKEINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI1_FEINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI1_PORT_BIT0_PULL.VALUE=2 -DRIVER.SCI.VAR.SCI3_PORT_BIT1_PDR.VALUE=0 -DRIVER.SCI.VAR.SCI1_TXINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI2_PORT_BIT1_DOUT.VALUE=0 -DRIVER.SCI.VAR.SCI3_PORT_BIT2_FUN.VALUE=1 -DRIVER.SCI.VAR.SCI4_TIMMINGMODE.VALUE=1 -DRIVER.SCI.VAR.SCI3_CLKMODE.VALUE=1 -DRIVER.SCI.VAR.SCI3_PORT_BIT0_PSL.VALUE=1 -DRIVER.SCI.VAR.SCI2_LENGTH.VALUE=8 -DRIVER.SCI.VAR.SCI1_BASE_PORT.VALUE=0xFFF7E440 -DRIVER.SCI.VAR.SCI4_BAUDRATE.VALUE=9600 -DRIVER.SCI.VAR.SCI3_OEINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI2_PARITYENA.VALUE=0 -DRIVER.SCI.VAR.SCI1_EVENPARITY.VALUE=0 -DRIVER.SCI.VAR.SCI3_PORT_BIT2_PDR.VALUE=0 -DRIVER.SCI.VAR.SCI2_BREAKINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI1_PEINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI1_TIMMINGMODE.VALUE=1 -DRIVER.SCI.VAR.SCI3_PORT_BIT1_PSL.VALUE=1 -DRIVER.SCI.VAR.SCI4_STOPBITS.VALUE=2 -DRIVER.SCI.VAR.SCI4_RXINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI4_FEINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI1_PORT_BIT1_PULL.VALUE=2 -DRIVER.SCI.VAR.SCI4_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.SCI.VAR.SCI2_PORT_BIT2_DOUT.VALUE=0 -DRIVER.SCI.VAR.SCI4_TXINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI3_PORT_BIT2_PSL.VALUE=1 -DRIVER.SCI.VAR.SCI3_PORT_BIT0_DOUT.VALUE=0 -DRIVER.SCI.VAR.SCI2_WAKEINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI3_WAKEINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI1_RXINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI2_CLKMODE.VALUE=1 -DRIVER.SCI.VAR.SCI1_PRESCALE.VALUE=487 -DRIVER.SCI.VAR.SCI4_PEINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI2_PORT_BIT0_DIR.VALUE=0 -DRIVER.SCI.VAR.SCI1_PORT_BIT2_PULL.VALUE=2 -DRIVER.SCI.VAR.SCI3_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.SCI.VAR.SCI3_FEINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI2_PORT_BIT0_PULL.VALUE=2 -DRIVER.SCI.VAR.SCI3_OEINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI3_TXINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI1_ACTUALBAUDRATE.VALUE=9606 -DRIVER.SCI.VAR.SCI3_PORT_BIT1_DOUT.VALUE=0 -DRIVER.SCI.VAR.SCI2_BREAKINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI1_PEINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI2_PORT_BIT1_DIR.VALUE=0 -DRIVER.SCI.VAR.SCI4_RXINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI4_BASE_PORT.VALUE=0xFFF7E740 -DRIVER.SCI.VAR.SCI4_PRESCALE.VALUE=487 -DRIVER.SCI.VAR.SCI2_PORT_BIT0_FUN.VALUE=0 -DRIVER.SCI.VAR.SCI2_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.SCI.VAR.SCI2_PORT_BIT2_DIR.VALUE=0 -DRIVER.SCI.VAR.SCI1_WAKEINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI1_CLKMODE.VALUE=1 -DRIVER.SCI.VAR.SCI2_PORT_BIT1_PULL.VALUE=2 -DRIVER.SCI.VAR.SCI2_WAKEINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI2_PORT_BIT0_PDR.VALUE=0 -DRIVER.SCI.VAR.SCI3_BAUDRATE.VALUE=9600 -DRIVER.SCI.VAR.SCI2_OEINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI3_PORT_BIT2_DOUT.VALUE=0 -DRIVER.SCI.VAR.SCI2_PORT_BIT1_FUN.VALUE=1 -DRIVER.SCI.VAR.SCI4_PORT_BIT0_DOUT.VALUE=0 -DRIVER.SCI.VAR.SCI4_PEINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI4_BREAKINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI3_TIMMINGMODE.VALUE=1 -DRIVER.SCI.VAR.SCI3_STOPBITS.VALUE=2 -DRIVER.SCI.VAR.SCI3_RXINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI2_PORT_BIT1_PDR.VALUE=0 -DRIVER.SCI.VAR.SCI3_FEINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI1_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.SCI.VAR.SCI2_PORT_BIT2_FUN.VALUE=1 -DRIVER.SCI.VAR.SCI1_BREAKINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI2_PORT_BIT0_PSL.VALUE=1 -DRIVER.SCI.VAR.SCI3_TXINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI4_PORT_BIT0_DIR.VALUE=0 -DRIVER.SCI.VAR.SCI2_PORT_BIT2_PULL.VALUE=2 -DRIVER.SCI.VAR.SCI2_PORT_BIT2_PDR.VALUE=0 -DRIVER.SCI.VAR.SCI3_PORT_BIT0_PULL.VALUE=2 -DRIVER.SCI.VAR.SCI2_BASE_PORT.VALUE=0xFFF7E640 -DRIVER.SCI.VAR.SCI3_PARITYENA.VALUE=0 -DRIVER.SCI.VAR.SCI2_ACTUALBAUDRATE.VALUE=9606 -DRIVER.SCI.VAR.SCI4_PORT_BIT1_DOUT.VALUE=0 -DRIVER.SCI.VAR.SCI2_PORT_BIT1_PSL.VALUE=1 -DRIVER.SCI.VAR.SCI3_LENGTH.VALUE=8 -DRIVER.SCI.VAR.SCI3_PEINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI4_PORT_BIT1_DIR.VALUE=0 -DRIVER.SCI.VAR.SCI1_WAKEINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI2_FEINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI2_PORT_BIT2_PSL.VALUE=1 -DRIVER.SCI.VAR.SCI4_PORT_BIT0_FUN.VALUE=0 -DRIVER.SCI.VAR.SCI2_OEINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI4_EVENPARITY.VALUE=0 -DRIVER.SCI.VAR.SCI2_TXINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI4_PORT_BIT2_DIR.VALUE=0 -DRIVER.SCI.VAR.SCI4_PORT_BIT2_PULDIS.VALUE=0 -DRIVER.SCI.VAR.SCI4_BREAKINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI3_PORT_BIT1_PULL.VALUE=2 -DRIVER.SCI.VAR.SCI4_PORT_BIT0_PDR.VALUE=0 -DRIVER.SCI.VAR.SCI3_RXINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI4_PORT_BIT2_DOUT.VALUE=0 -DRIVER.SCI.VAR.SCI1_BASE.VALUE=0xFFF7E400 -DRIVER.SCI.VAR.SCI4_PORT_BIT1_FUN.VALUE=1 -DRIVER.SCI.VAR.SCI3_PRESCALE.VALUE=487 -DRIVER.SCI.VAR.SCI1_PORT_BIT0_DIR.VALUE=0 -DRIVER.SCI.VAR.SCI1_BREAKINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI4_PORT_BIT1_PDR.VALUE=0 -DRIVER.SCI.VAR.SCI1_LENGTH.VALUE=8 -DRIVER.SCI.VAR.SCI4_PORT_BIT2_FUN.VALUE=1 -DRIVER.SCI.VAR.SCI3_PORT_BIT2_PULDIS.VALUE=0 -DRIVER.SCI.VAR.SCI2_BAUDRATE.VALUE=9600 -DRIVER.SCI.VAR.SCI1_PARITYENA.VALUE=0 -DRIVER.SCI.VAR.SCI1_OEINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI4_PORT_BIT0_PSL.VALUE=1 -DRIVER.SCI.VAR.SCI1_PORT_BIT1_DIR.VALUE=0 -DRIVER.SCI.VAR.SCI3_PORT_BIT2_PULL.VALUE=2 -DRIVER.SCI.VAR.SCI3_PEINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI4_PORT_BIT2_PDR.VALUE=0 -DRIVER.SCI.VAR.SCI2_STOPBITS.VALUE=2 -DRIVER.SCI.VAR.SCI4_PORT_BIT0_PULL.VALUE=2 -DRIVER.SCI.VAR.SCI2_RXINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI1_PORT_BIT0_DOUT.VALUE=0 -DRIVER.SCI.VAR.SCI2_BASE.VALUE=0xFFF7E600 -DRIVER.SCI.VAR.SCI2_FEINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI1_PORT_BIT0_FUN.VALUE=0 -DRIVER.SCI.VAR.SCI4_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.SCI.VAR.SCI3_ACTUALBAUDRATE.VALUE=9606 -DRIVER.SCI.VAR.SCI4_PORT_BIT1_PSL.VALUE=1 -DRIVER.SCI.VAR.SCI1_PORT_BIT2_DIR.VALUE=0 -DRIVER.SCI.VAR.SCI3_EVENPARITY.VALUE=0 -DRIVER.SCI.VAR.SCI2_TXINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI3_BREAKINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI2_TIMMINGMODE.VALUE=1 -DRIVER.SCI.VAR.SCI1_PORT_BIT0_PDR.VALUE=0 -DRIVER.SCI.VAR.SCI2_PORT_BIT2_PULDIS.VALUE=0 -DRIVER.SCI.VAR.SCI1_PORT_BIT1_FUN.VALUE=1 -DRIVER.SCI.VAR.SCI4_PORT_BIT2_PSL.VALUE=1 -DRIVER.SCI.VAR.SCI4_OEINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI2_PEINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI1_PORT_BIT1_PDR.VALUE=0 -DRIVER.SCI.VAR.SCI4_PORT_BIT1_PULL.VALUE=2 -DRIVER.SCI.VAR.SCI3_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.SCI.VAR.SCI1_PORT_BIT1_DOUT.VALUE=0 -DRIVER.SCI.VAR.SCI3_BASE.VALUE=0xFFF7E500 -DRIVER.SCI.VAR.SCI1_PORT_BIT2_FUN.VALUE=1 -DRIVER.SCI.VAR.SCI4_WAKEINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI1_FEINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI1_PORT_BIT0_PSL.VALUE=1 -DRIVER.SCI.VAR.SCI3_PORT_BIT0_DIR.VALUE=0 -DRIVER.SCI.VAR.SCI1_OEINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI1_PORT_BIT2_PULDIS.VALUE=0 -DRIVER.SCI.VAR.SCI1_TXINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI1_PORT_BIT2_PDR.VALUE=0 -DRIVER.SCI.VAR.SCI1_PORT_BIT1_PSL.VALUE=1 -DRIVER.SCI.VAR.SCI2_RXINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI3_PORT_BIT1_DIR.VALUE=0 -DRIVER.SCI.VAR.SCI3_BASE_PORT.VALUE=0xFFF7E540 -DRIVER.SCI.VAR.SCI4_PARITYENA.VALUE=0 -DRIVER.SCI.VAR.SCI4_CLKMODE.VALUE=1 -DRIVER.SCI.VAR.SCI2_EVENPARITY.VALUE=0 -DRIVER.SCI.VAR.SCI2_PRESCALE.VALUE=487 -DRIVER.SCI.VAR.SCI2_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG0_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PARITYENA2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_DLENERRLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG4_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI2_BASE_PORT.VALUE=0xFFF7F618 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT17_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT25_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_BITERRENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PARITYENA3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_RXINTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG5_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT25_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT17_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT8_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG1_BUF_CSNR.VALUE=CS_1 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT1_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_CLKMOD.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT11_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT5_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_PHASE0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG5_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI1_PHASE1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT27_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT19_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT3_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG3_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT9_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG6_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PHASE2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT8_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG6_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG5_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI1_PHASE3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT25_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT17_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG2_BUF_CSNR.VALUE=CS_2 -DRIVER.MIBSPI.VAR.MIBSPI4_TG6_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT1_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT11_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_BASE.VALUE=0xFFF7FA00 -DRIVER.MIBSPI.VAR.MIBSPI5_TG0_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT5_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG6_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI3_TG7_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG6_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT17_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT25_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG5_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG1_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_C2TDELAYACTUAL.VALUE=26.667 -DRIVER.MIBSPI.VAR.MIBSPI4_TG7_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT1_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG4_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT11_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG5_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TXINTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TIMEOUTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_RAM_PARITY_ENA.VALUE=0x00000005 -DRIVER.MIBSPI.VAR.MIBSPI3_TG7_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI1_TG1_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI1_TG1_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT27_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT19_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG7_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG0_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_WDELAY0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT3_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG7_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG2_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG0_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI4_WDELAY1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG3_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI4_WDELAY2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PARERRLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT8_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG5_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG0_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_WDELAY3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG0_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT9_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG4_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG3_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT8_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT4_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG7_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG7_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG2_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT26_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT18_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG3_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT2_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG4_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG0_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_ACTUALBAUDRATE0.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI2_T2EDELAYACTUAL.VALUE=0.000 -DRIVER.MIBSPI.VAR.MIBSPI3_TG2_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI3_ACTUALBAUDRATE1.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT0_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG5_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT10_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_ACTUALBAUDRATE2.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI2_TG5_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT3_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI1_TG0_LENGTH.VALUE=8 -DRIVER.MIBSPI.VAR.MIBSPI5_TG0_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI3_TG0_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_ACTUALBAUDRATE3.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI2_TG3_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG2_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT9_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG5_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG7_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_C2EDELAYACTUAL.VALUE=0.000 -DRIVER.MIBSPI.VAR.MIBSPI2_BAUDRATE0.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT8_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG1_BUF_CSNR.VALUE=CS_1 -DRIVER.MIBSPI.VAR.MIBSPI2_BAUDRATE1.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT2_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG5_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG4_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT1_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI2_BAUDRATE2.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI4_TG2_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG1_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG3_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI3_TG0_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI2_BAUDRATE3.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI5_TG6_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_T2CDELAYACTUAL.VALUE=13.333 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT4_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT4_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG2_BUF_CSNR.VALUE=CS_2 -DRIVER.MIBSPI.VAR.MIBSPI2_TG4_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI3_TG7_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI3_TG5_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG1_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT9_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG2_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PARERRENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG1_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI3_OVRNINTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT8_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG6_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI1_TG6_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT26_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT18_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT0_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT10_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT2_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG3_BUF_CSNR.VALUE=CS_3 -DRIVER.MIBSPI.VAR.MIBSPI2_POLARITY0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT17_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT25_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG1_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_POLARITY1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_C2TDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT10_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI4_TG6_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_OVRNINTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT5_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG0_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI2_POLARITY2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG2_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI5_RXINTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT17_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT25_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT4_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG4_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI3_TG5_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_DEYSNCENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_POLARITY3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT11_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT27_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT19_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT0_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG4_BUF_CSNR.VALUE=CS_4 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT3_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG2_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_WAITENA0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_BASE.VALUE=0xFFF7FC00 -DRIVER.MIBSPI.VAR.MIBSPI2_WAITENA1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG6_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT1_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_DEYSNCLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG5_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PARPOL0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT11_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT17_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT25_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_WAITENA2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG4_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT10_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PARPOL1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG7_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI2_WAITENA3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG5_BUF_CSNR.VALUE=CS_5 -DRIVER.MIBSPI.VAR.MIBSPI4_TG4_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PARPOL2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG2_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT9_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG2_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PARPOL3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT3_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT0_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG2_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI5_TG5_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI1_TXINTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG0_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG1_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT5_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PRESCALE0.VALUE=74 -DRIVER.MIBSPI.VAR.MIBSPI1_CLKMOD.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG3_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI1_PRESCALE1.VALUE=74 -DRIVER.MIBSPI.VAR.MIBSPI5_TG5_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TXINTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG2_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG1_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PRESCALE2.VALUE=74 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT9_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TIMEOUTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG7_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_DLENERRENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PRESCALE3.VALUE=74 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT1_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT11_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG3_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PARITYENA0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG5_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT8_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG5_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_ACTUALBAUDRATE0.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI3_PARITYENA1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_ACTUALBAUDRATE1.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT9_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI3_PARITYENA2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_DLENERRLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG4_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI1_TG2_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_ACTUALBAUDRATE2.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT2_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PARITYENA3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_BITERRENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG1_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_ACTUALBAUDRATE3.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI5_TG4_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT4_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG6_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG6_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG4_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG5_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI3_T2EDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT2_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_BITERRLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_SHIFTDIR0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT8_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG3_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_RXINTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_CSDEF.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT4_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI1_TG5_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_SHIFTDIR1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG2_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG1_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT0_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG4_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_SHIFTDIR2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT10_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG7_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG6_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_WDELAY0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT17_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT25_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_T2CDELAYACTUAL.VALUE=13.333 -DRIVER.MIBSPI.VAR.MIBSPI4_SHIFTDIR3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_WDELAY1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG1_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI4_MASTER.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_WDELAY2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT2_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT1_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG2_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG3_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_WDELAY3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG2_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT8_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_ENABLEHIGHZ.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT5_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG7_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG4_BUF_CSNR.VALUE=CS_4 -DRIVER.MIBSPI.VAR.MIBSPI3_TG7_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT10_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG3_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT0_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT10_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI1_TG5_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG4_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT4_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG3_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT27_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT19_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT2_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG5_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT3_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG5_BUF_CSNR.VALUE=CS_5 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT9_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG0_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI2_C2EDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT11_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI4_TG3_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI3_TG2_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT17_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT25_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG5_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG4_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI5_TG1_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT1_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT5_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG6_BUF_CSNR.VALUE=CS_6 -DRIVER.MIBSPI.VAR.MIBSPI4_C2TDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT3_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG2_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_BASE_PORT.VALUE=0xFFF7FC18 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT9_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT0_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG6_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG5_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI2_TG0_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI2_TG0_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT1_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_WAITENA0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG7_BUF_CSNR.VALUE=CS_7 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT11_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG0_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG3_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_WAITENA1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG2_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI5_WAITENA2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG2_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG5_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT2_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_WAITENA3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT9_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT10_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG2_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG1_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT17_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT25_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_C2TDELAYACTUAL.VALUE=26.667 -DRIVER.MIBSPI.VAR.MIBSPI2_T2CDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG4_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT11_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG4_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_RAM_PARITY_ENA.VALUE=0x00000005 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT2_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TXINTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG1_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI1_TG3_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT3_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG2_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT0_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG6_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG1_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_BASE_RAM.VALUE=0xFF080000 -DRIVER.MIBSPI.VAR.MIBSPI1_TG4_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI5_TG2_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT8_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_PARPOL0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG7_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI2_TG0_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_CHARLEN0.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI3_TG2_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PARPOL1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PARERRENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_CHARLEN1.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI2_OVRNINTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG4_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI5_TG5_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG3_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PHASE0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PARPOL2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_CHARLEN2.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI4_PHASE1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PARPOL3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_CHARLEN3.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI5_PARERRLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT8_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI4_PHASE2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG7_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG6_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_OVRNINTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT1_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG0_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT5_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI5_TG1_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG2_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI4_PHASE3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG4_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_DEYSNCENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_RXINTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT2_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG0_BUF_CSNR.VALUE=CS_0 -DRIVER.MIBSPI.VAR.MIBSPI3_T2EDELAYACTUAL.VALUE=0.000 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT8_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG1_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI5_RXINTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT10_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_DEYSNCLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT3_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT3_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG7_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT4_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG5_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG5_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI2_TG5_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG4_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT9_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG1_BUF_CSNR.VALUE=CS_1 -DRIVER.MIBSPI.VAR.MIBSPI4_C2EDELAYACTUAL.VALUE=0.000 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT8_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG0_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT25_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT17_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT1_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT11_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI1_TG2_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG3_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI4_TG4_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT10_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG6_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG5_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI5_BAUDRATE0.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT4_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT1_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG7_BUF_CSNR.VALUE=CS_7 -DRIVER.MIBSPI.VAR.MIBSPI1_TG3_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_BAUDRATE1.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI4_TG3_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI5_TG6_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI5_BAUDRATE2.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT9_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG1_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG7_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG1_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TXINTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_BAUDRATE3.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI4_TG7_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TIMEOUTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG6_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI3_TG6_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI1_DLENERRENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT10_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT2_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG5_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG1_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG0_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT17_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT25_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_WDELAY0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PARITYENA0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG1_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_C2EDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_WDELAY1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PARITYENA1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TIMEOUTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT2_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_WDELAY2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PARITYENA2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_DLENERRLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_MASTER.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG7_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT9_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG7_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_WDELAY3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PARITYENA3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_BITERRENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT3_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT0_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG7_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_POLARITY0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT10_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT0_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG2_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG4_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG4_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_POLARITY1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG5_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI5_POLARITY2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT11_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG7_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_BITERRLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT4_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_SHIFTDIR0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG4_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG3_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT26_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT18_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG6_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_POLARITY3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG7_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT2_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_SHIFTDIR1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_RAM_PARITY_ENA.VALUE=0x00000005 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT11_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG3_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG2_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT9_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG3_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_SHIFTDIR2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_SHIFTDIR3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG7_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT0_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG1_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT11_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG0_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG4_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT2_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG7_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG5_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG0_BUF_CSNR.VALUE=CS_0 -DRIVER.MIBSPI.VAR.MIBSPI5_T2CDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG7_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI5_TG0_LENGTH.VALUE=8 -DRIVER.MIBSPI.VAR.MIBSPI4_TG7_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG2_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG0_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG6_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG5_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG3_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT11_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PRESCALE0.VALUE=74 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT8_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG7_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG1_BUF_CSNR.VALUE=CS_1 -DRIVER.MIBSPI.VAR.MIBSPI5_BASE_RAM.VALUE=0xFF0A0000 -DRIVER.MIBSPI.VAR.MIBSPI4_PRESCALE1.VALUE=74 -DRIVER.MIBSPI.VAR.MIBSPI2_TG0_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI5_CHARLEN0.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT9_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI4_PRESCALE2.VALUE=74 -DRIVER.MIBSPI.VAR.MIBSPI3_TG3_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI3_CSDEF.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT3_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG1_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_CHARLEN1.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI4_TG0_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI4_PRESCALE3.VALUE=74 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT4_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_CHARLEN2.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI3_TG6_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG2_BUF_CSNR.VALUE=CS_2 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT1_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT9_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_CHARLEN3.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT8_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG7_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG2_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_BASE_PORT.VALUE=0xFFF7F818 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT5_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT4_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI2_TG5_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG1_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_RXINTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG7_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT10_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG3_BUF_CSNR.VALUE=CS_3 -DRIVER.MIBSPI.VAR.MIBSPI2_TG0_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_T2CDELAYACTUAL.VALUE=13.333 -DRIVER.MIBSPI.VAR.MIBSPI1_WAITENA0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG2_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI1_WAITENA1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT26_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT18_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT1_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT2_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI2_TG5_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI2_PARPOL0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG4_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_WAITENA2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PARPOL1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG7_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI1_TG0_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_WAITENA3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG4_BUF_CSNR.VALUE=CS_4 -DRIVER.MIBSPI.VAR.MIBSPI4_TG7_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG2_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_CLKMOD.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT5_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT3_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PARPOL2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PHASE0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG6_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI2_PARPOL3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PHASE1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT10_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG3_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT0_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI3_TG4_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PHASE2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT9_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PHASE3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT3_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT9_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG1_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT10_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT0_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TXINTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT4_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG4_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG7_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT2_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG2_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI1_PARERRENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_OVRNINTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT1_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT11_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT2_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG5_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG4_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT9_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT0_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG6_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PARERRLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG6_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_OVRNINTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG0_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI4_TG0_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI2_TG2_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG0_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT11_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG4_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG5_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG2_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG1_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI2_T2EDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG4_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT2_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG4_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_DEYSNCLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_RXINTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG1_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG3_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI2_TG1_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG0_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI3_TG6_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG4_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_C2TDELAYACTUAL.VALUE=26.667 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT4_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_WDELAY0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_WDELAY1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT11_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_WDELAY2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG1_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI3_TG2_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT17_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT25_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG1_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI1_TG5_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_WDELAY3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG7_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG6_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT0_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG7_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_BAUDRATE0.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI1_TG3_BUF_CSNR.VALUE=CS_3 -DRIVER.MIBSPI.VAR.MIBSPI3_TG3_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI3_BAUDRATE1.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT8_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG6_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI4_TG4_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG0_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_BAUDRATE2.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT5_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT17_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT25_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI1_TG1_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG3_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG4_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI3_TG4_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG2_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI3_BAUDRATE3.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI3_TIMEOUTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT10_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_ENABLEHIGHZ.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT3_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG4_BUF_CSNR.VALUE=CS_4 -DRIVER.MIBSPI.VAR.MIBSPI1_PARITYENA0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_C2EDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PARITYENA1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT8_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI5_TG5_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT1_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG7_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TIMEOUTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT5_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI1_PARITYENA2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_DLENERRLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG4_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG3_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG3_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI1_TG7_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI1_PARITYENA3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_T2EDELAYACTUAL.VALUE=0.000 -DRIVER.MIBSPI.VAR.MIBSPI4_ACTUALBAUDRATE0.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI3_TG5_BUF_CSNR.VALUE=CS_5 -DRIVER.MIBSPI.VAR.MIBSPI3_POLARITY0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT8_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG2_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_ACTUALBAUDRATE1.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI3_C2TDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_POLARITY1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG5_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT27_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT19_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT10_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG4_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT3_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_ACTUALBAUDRATE2.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT3_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI3_POLARITY2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT10_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT0_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG3_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_BITERRLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG4_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI4_TG5_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI4_ACTUALBAUDRATE3.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI4_DEYSNCENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_POLARITY3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG7_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT9_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT8_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_C2EDELAYACTUAL.VALUE=0.000 -DRIVER.MIBSPI.VAR.MIBSPI4_TG6_BUF_CSNR.VALUE=CS_6 -DRIVER.MIBSPI.VAR.MIBSPI4_TG0_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_WAITENA0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT5_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG6_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_WAITENA1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT1_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI4_TG7_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_WAITENA2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG1_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI1_TG1_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT5_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG6_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_WAITENA3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT2_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG7_BUF_CSNR.VALUE=CS_7 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT17_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT25_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT4_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT1_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG0_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG2_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG3_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_ENABLEHIGHZ.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT11_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT1_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG7_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI1_T2CDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT9_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG1_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG0_LENGTH.VALUE=8 -DRIVER.MIBSPI.VAR.MIBSPI5_TG6_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT11_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TXINTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT10_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT2_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG1_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG1_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT4_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PRESCALE0.VALUE=74 -DRIVER.MIBSPI.VAR.MIBSPI1_TG6_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PRESCALE1.VALUE=74 -DRIVER.MIBSPI.VAR.MIBSPI1_TG0_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI1_BASE_RAM.VALUE=0xFF0E0000 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT10_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT2_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT8_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG3_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI2_TG1_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PRESCALE2.VALUE=74 -DRIVER.MIBSPI.VAR.MIBSPI1_PARPOL0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_CHARLEN0.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI2_PRESCALE3.VALUE=74 -DRIVER.MIBSPI.VAR.MIBSPI1_PARPOL1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_CHARLEN1.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT0_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG5_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG1_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG4_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_CLKMOD.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG7_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PARPOL2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_CHARLEN2.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI5_TG4_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI1_PARPOL3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_CHARLEN3.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT11_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT17_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT25_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT4_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG2_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG4_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT11_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT1_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_BASE_PORT.VALUE=0xFFF7F418 -DRIVER.MIBSPI.VAR.MIBSPI4_BITERRENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_RAM_PARITY_ENA.VALUE=0x00000005 -DRIVER.MIBSPI.VAR.MIBSPI1_TG3_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT9_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG7_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_T2EDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_SHIFTDIR0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_RXINTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG1_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG5_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT3_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_SHIFTDIR1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG4_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG3_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI5_TG0_BUF_CSNR.VALUE=CS_0 -DRIVER.MIBSPI.VAR.MIBSPI5_SHIFTDIR2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT2_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG5_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_SHIFTDIR3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG6_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI5_TG2_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_CSDEF.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI2_TG4_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT8_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI3_TG5_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG4_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT11_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT8_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT5_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_ACTUALBAUDRATE0.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI1_TG6_BUF_CSNR.VALUE=CS_6 -DRIVER.MIBSPI.VAR.MIBSPI1_TG1_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_ACTUALBAUDRATE1.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT9_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI5_TG2_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI5_MASTER.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT3_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG1_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT9_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_ACTUALBAUDRATE2.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT10_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT0_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG6_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG5_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI2_ACTUALBAUDRATE3.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI1_TG0_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI5_TG6_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT1_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG3_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT9_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG7_BUF_CSNR.VALUE=CS_7 -DRIVER.MIBSPI.VAR.MIBSPI2_TG0_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG0_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_C2EDELAYACTUAL.VALUE=0.000 -DRIVER.MIBSPI.VAR.MIBSPI4_C2EDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT5_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT4_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI3_TG5_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT2_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG6_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PARERRLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_OVRNINTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG7_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_DLENERRENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG6_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT5_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT10_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG5_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_T2CDELAYACTUAL.VALUE=13.333 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT17_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT25_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG1_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG1_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI5_TG1_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT2_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI4_TG4_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI5_TG7_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI2_TG1_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI1_TG2_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT5_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT3_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG3_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG2_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT10_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT2_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT0_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT0_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI5_TG3_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT10_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT8_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG1_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT9_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT3_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG3_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT0_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG7_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_BAUDRATE0.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI4_T2CDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG3_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI1_BAUDRATE1.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT11_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT17_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT25_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT4_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG6_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT11_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT1_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG6_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_BAUDRATE2.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI5_TG0_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG2_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI2_TIMEOUTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT17_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT25_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_BAUDRATE3.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI5_TG4_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT2_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG6_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG5_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG0_BUF_CSNR.VALUE=CS_0 -DRIVER.MIBSPI.VAR.MIBSPI4_BASE_RAM.VALUE=0xFF060000 -DRIVER.MIBSPI.VAR.MIBSPI4_TG6_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG5_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_CHARLEN0.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI3_TIMEOUTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT3_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG0_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT3_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_CHARLEN1.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI4_PARERRENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG4_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT10_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG5_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT11_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG7_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_CHARLEN2.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI3_TG1_BUF_CSNR.VALUE=CS_1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT8_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG0_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_POLARITY0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_CHARLEN3.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI1_TG5_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI1_POLARITY1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_BASE.VALUE=0xFFF7F400 -DRIVER.MIBSPI.VAR.MIBSPI2_TG6_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG2_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_POLARITY2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG0_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI4_TG3_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI4_TG3_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_RXINTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_DEYSNCENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG6_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_POLARITY3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PHASE0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT17_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT25_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT4_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG2_BUF_CSNR.VALUE=CS_2 -DRIVER.MIBSPI.VAR.MIBSPI4_C2TDELAYACTUAL.VALUE=26.667 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT11_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT1_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PHASE1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PHASE2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_DEYSNCLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG7_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT9_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG1_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT9_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI5_PHASE3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG7_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG6_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI1_TG7_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG6_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI5_TG3_BUF_CSNR.VALUE=CS_3 -DRIVER.MIBSPI.VAR.MIBSPI4_TG0_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG1_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG2_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT5_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG0_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG6_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG0_LENGTH.VALUE=8 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT2_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT8_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG4_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI3_TG6_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT5_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG7_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT3_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG1_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT10_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT0_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG7_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG7_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT5_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI3_TXINTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT4_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG3_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG5_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_ENABLE.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT11_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG7_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI5_TG0_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_T2EDELAYACTUAL.VALUE=0.000 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT8_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG2_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT9_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG3_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG4_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI5_TG7_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT3_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI4_TG6_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT0_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT10_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG3_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG2_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT10_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT0_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI5_OVRNINTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_BITERRENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT5_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG4_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG4_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT3_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT2_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG5_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG0_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_T2EDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT1_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI5_TG0_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI4_BITERRLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT11_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI3_SHIFTDIR0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_MASTER.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_SHIFTDIR1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG0_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG3_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG5_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG2_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_SHIFTDIR2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT8_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT1_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG6_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI3_SHIFTDIR3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG6_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG1_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT3_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG4_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT27_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT19_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT3_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG1_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG0_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI5_TG4_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT17_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT25_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT4_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG7_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG6_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG6_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT11_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT1_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG2_BUF_CSNR.VALUE=CS_2 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT8_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG2_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT5_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG3_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG2_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG1_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI5_TG7_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG4_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PRESCALE0.VALUE=74 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT10_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG3_BUF_CSNR.VALUE=CS_3 -DRIVER.MIBSPI.VAR.MIBSPI5_PRESCALE1.VALUE=74 -DRIVER.MIBSPI.VAR.MIBSPI2_BASE.VALUE=0xFFF7F600 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT25_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT17_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG1_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PRESCALE2.VALUE=74 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT1_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG4_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT11_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG3_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PRESCALE3.VALUE=74 -DRIVER.MIBSPI.VAR.MIBSPI4_TG2_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI4_DLENERRENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_RAM_PARITY_ENA.VALUE=0x00000005 -DRIVER.MIBSPI.VAR.MIBSPI5_PARITYENA0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG7_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG4_BUF_CSNR.VALUE=CS_4 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT3_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PARITYENA1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG1_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI2_C2TDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PARITYENA2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_DLENERRLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_CSDEF.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI4_BASE_PORT.VALUE=0xFFF7FA18 -DRIVER.MIBSPI.VAR.MIBSPI3_TG4_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI2_TG3_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG3_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI5_PARITYENA3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT8_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT5_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG5_BUF_CSNR.VALUE=CS_5 -DRIVER.MIBSPI.VAR.MIBSPI3_WAITENA0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT9_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG4_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_WAITENA1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG3_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_WAITENA2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT8_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT4_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG7_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_WAITENA3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG6_BUF_CSNR.VALUE=CS_6 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT5_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG6_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG2_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT2_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_T2EDELAYACTUAL.VALUE=0.000 -DRIVER.MIBSPI.VAR.MIBSPI1_TG3_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT9_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT0_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG3_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT10_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG6_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI3_TG0_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI2_TG1_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TXINTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TIMEOUTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG1_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG0_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_CLKMOD.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_ENABLEHIGHZ.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT9_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PHASE0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_C2EDELAYACTUAL.VALUE=0.000 -DRIVER.MIBSPI.VAR.MIBSPI5_TG7_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI3_PHASE1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT26_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT18_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT17_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT25_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT4_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI4_TG5_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT2_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG5_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PHASE2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TIMEOUTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT11_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT1_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI4_TG0_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PHASE3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PARERRENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG3_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI4_T2CDELAYACTUAL.VALUE=13.333 -DRIVER.MIBSPI.VAR.MIBSPI3_TG5_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT4_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT4_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG6_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG0_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT2_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI4_TG3_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PARERRLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG1_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG1_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT3_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG4_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG2_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT0_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT10_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT2_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG7_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG6_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_T2EDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT8_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_RXINTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG7_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_DEYSNCLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT5_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG1_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI3_TG3_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG4_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI2_TG3_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG2_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI5_WDELAY0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT0_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT10_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT3_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_ENABLEHIGHZ.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_WDELAY1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG2_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT25_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT17_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG5_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI5_TG3_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_WDELAY2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT1_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT11_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG0_LENGTH.VALUE=8 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT17_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT25_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG2_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI5_TG2_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_WDELAY3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG4_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG3_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT11_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_BAUDRATE0.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI1_TG5_BUF_CSNR.VALUE=CS_5 -DRIVER.MIBSPI.VAR.MIBSPI4_BAUDRATE1.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI3_BASE.VALUE=0xFFF7F800 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT27_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT19_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG6_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_BAUDRATE2.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT3_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG0_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_MASTER.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG5_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_BAUDRATE3.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT8_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG5_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI3_TG4_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI2_TG6_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT8_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG1_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG0_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG6_BUF_CSNR.VALUE=CS_6 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT5_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG0_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG4_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI3_C2EDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG7_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI2_TG2_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG2_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT25_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT17_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG6_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG5_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI4_TG5_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_OVRNINTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT11_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT25_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT17_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG3_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_C2TDELAYACTUAL.VALUE=26.667 -DRIVER.MIBSPI.VAR.MIBSPI4_POLARITY0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT1_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG7_BUF_CSNR.VALUE=CS_7 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT11_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG0_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG3_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_C2TDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_POLARITY1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG6_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_OVRNINTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT9_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG0_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI4_POLARITY2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT9_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI2_TG0_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_BITERRLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_SHIFTDIR0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT10_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG6_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI5_DEYSNCENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG6_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI4_POLARITY3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_SHIFTDIR1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG1_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG1_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG3_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT4_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_SHIFTDIR2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG6_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI1_SHIFTDIR3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT26_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT18_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG0_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT2_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT17_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT25_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT8_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG2_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG2_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT0_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT10_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG4_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_T2CDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT5_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT4_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG2_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI3_TG0_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT2_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI1_CSDEF.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI5_TG7_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI5_TG7_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TXINTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT3_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG3_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG2_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_ACTUALBAUDRATE0.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT9_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT8_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG6_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PRESCALE0.VALUE=74 -DRIVER.MIBSPI.VAR.MIBSPI2_TG3_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT5_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_ACTUALBAUDRATE1.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI3_PRESCALE1.VALUE=74 -DRIVER.MIBSPI.VAR.MIBSPI3_BASE_RAM.VALUE=0xFF0C0000 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT3_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT0_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_ACTUALBAUDRATE2.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI5_PARPOL0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG1_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT10_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG3_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PRESCALE2.VALUE=74 -DRIVER.MIBSPI.VAR.MIBSPI3_CHARLEN0.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT0_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI5_ACTUALBAUDRATE3.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI5_PARPOL1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PRESCALE3.VALUE=74 -DRIVER.MIBSPI.VAR.MIBSPI3_CHARLEN1.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI3_DLENERRENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT26_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT18_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PARPOL2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG5_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PARITYENA0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT2_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG5_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG0_BUF_CSNR.VALUE=CS_0 -DRIVER.MIBSPI.VAR.MIBSPI3_CHARLEN2.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT3_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_PARPOL3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PARITYENA1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_CHARLEN3.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI1_TG1_TRGSRC.VALUE=TRG_DISABLED -DRIVER.SPI.VAR.SPI5_PORT_BIT26_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT18_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT4_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI3_PHASE2.VALUE=0 -DRIVER.SPI.VAR.SPI2_TIMEOUTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT1_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI5_PORT_BIT25_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT17_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI3_PHASE3.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT11_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI4_T2CDELAYACTUAL.VALUE=13.333 -DRIVER.SPI.VAR.SPI4_POLARITY0.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT1_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT4_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI4_POLARITY1.VALUE=0 -DRIVER.SPI.VAR.SPI2_T2EDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT2_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI4_PORT_BIT9_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI4_POLARITY2.VALUE=0 -DRIVER.SPI.VAR.SPI2_BITERRLVL.VALUE=0 -DRIVER.SPI.VAR.SPI1_SHIFTDIR0.VALUE=0 -DRIVER.SPI.VAR.SPI1_RXINTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT10_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI5_DEYSNCENA.VALUE=0 -DRIVER.SPI.VAR.SPI4_POLARITY3.VALUE=0 -DRIVER.SPI.VAR.SPI1_SHIFTDIR1.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT5_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT10_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT2_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT4_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI1_SHIFTDIR2.VALUE=0 -DRIVER.SPI.VAR.SPI1_SHIFTDIR3.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT2_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT10_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI1_PORT_BIT8_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT0_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT0_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT25_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT17_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT11_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI3_PORT_BIT4_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT11_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT25_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT17_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT9_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI3_PRESCALE0.VALUE=74 -DRIVER.SPI.VAR.SPI3_PRESCALE1.VALUE=74 -DRIVER.SPI.VAR.SPI1_C2EDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT27_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT19_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT0_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI3_PRESCALE2.VALUE=74 -DRIVER.SPI.VAR.SPI1_MASTER.VALUE=1 -DRIVER.SPI.VAR.SPI3_PRESCALE3.VALUE=74 -DRIVER.SPI.VAR.SPI3_PORT_BIT2_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI3_C2TDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI2_BASE_PORT.VALUE=0xFFF7F618 -DRIVER.SPI.VAR.SPI5_BITERRENA.VALUE=0 -DRIVER.SPI.VAR.SPI4_OVRNINTENA.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT9_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT25_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT17_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI5_C2TDELAYACTUAL.VALUE=26.667 -DRIVER.SPI.VAR.SPI4_PORT_BIT10_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT8_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI4_WAITENA0.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT11_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT5_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI4_WAITENA1.VALUE=0 -DRIVER.SPI.VAR.SPI5_OVRNINTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI4_WAITENA2.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT3_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT9_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI1_PORT_BIT9_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT5_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI4_WAITENA3.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT2_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT1_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI1_T2CDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT26_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT18_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT5_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI3_TXINTENA.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT10_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI1_BASE_RAM.VALUE=0xFF0E0000 -DRIVER.SPI.VAR.SPI5_PORT_BIT1_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT5_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI1_PORT_BIT2_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI1_CHARLEN0.VALUE=16 -DRIVER.SPI.VAR.SPI1_CHARLEN1.VALUE=16 -DRIVER.SPI.VAR.SPI4_PORT_BIT8_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT3_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT5_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI1_CHARLEN2.VALUE=16 -DRIVER.SPI.VAR.SPI1_CHARLEN3.VALUE=16 -DRIVER.SPI.VAR.SPI5_PORT_BIT3_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI3_PORT_BIT10_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT0_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI2_PARERRLVL.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT8_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI3_DLENERRENA.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT26_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT18_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT9_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI4_PARITYENA0.VALUE=0 -DRIVER.SPI.VAR.SPI4_ENABLEHIGHZ.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT3_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI5_T2EDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI4_PARITYENA1.VALUE=0 -DRIVER.SPI.VAR.SPI4_PARITYENA2.VALUE=0 -DRIVER.SPI.VAR.SPI4_DLENERRLVL.VALUE=0 -DRIVER.SPI.VAR.SPI4_RXINTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT4_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT25_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT17_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT11_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI5_PORT_BIT3_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI4_PARITYENA3.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT2_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT1_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI3_CLKMOD.VALUE=1 -DRIVER.SPI.VAR.SPI1_PHASE0.VALUE=0 -DRIVER.SPI.VAR.SPI1_PHASE1.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT27_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT19_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT0_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI1_PHASE2.VALUE=0 -DRIVER.SPI.VAR.SPI1_PHASE3.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT25_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT17_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT11_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI2_BAUDRATE0.VALUE=1000.000 -DRIVER.SPI.VAR.SPI1_PORT_BIT8_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI2_BAUDRATE1.VALUE=1000.000 -DRIVER.SPI.VAR.SPI5_PORT_BIT2_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI2_BAUDRATE2.VALUE=1000.000 -DRIVER.SPI.VAR.SPI2_BAUDRATE3.VALUE=1000.000 -DRIVER.SPI.VAR.SPI5_WDELAY0.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT4_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT10_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT25_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT17_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI1_C2TDELAYACTUAL.VALUE=26.667 -DRIVER.SPI.VAR.SPI1_ENABLEHIGHZ.VALUE=0 -DRIVER.SPI.VAR.SPI5_WDELAY1.VALUE=0 -DRIVER.SPI.VAR.SPI4_C2EDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI5_WDELAY2.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT11_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT9_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI1_TIMEOUTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI5_WDELAY3.VALUE=0 -DRIVER.SPI.VAR.SPI5_PARERRENA.VALUE=0 -DRIVER.SPI.VAR.SPI4_RAM_PARITY_ENA.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT5_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT27_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT19_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT0_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT11_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI2_POLARITY0.VALUE=0 -DRIVER.SPI.VAR.SPI2_POLARITY1.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT5_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI2_POLARITY2.VALUE=0 -DRIVER.SPI.VAR.SPI3_DEYSNCENA.VALUE=0 -DRIVER.SPI.VAR.SPI2_POLARITY3.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT11_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT3_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT1_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI5_DEYSNCLVL.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT8_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI4_PORT_BIT10_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT26_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT18_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI2_T2EDELAYACTUAL.VALUE=0.000 -DRIVER.SPI.VAR.SPI1_PORT_BIT9_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI4_T2CDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT3_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT10_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT0_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT3_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI4_PORT_BIT9_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT5_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI3_C2EDELAYACTUAL.VALUE=0.000 -DRIVER.SPI.VAR.SPI1_PRESCALE0.VALUE=74 -DRIVER.SPI.VAR.SPI4_BASE_RAM.VALUE=0xFF060000 -DRIVER.SPI.VAR.SPI1_PRESCALE1.VALUE=74 -DRIVER.SPI.VAR.SPI5_PORT_BIT4_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI4_CHARLEN0.VALUE=16 -DRIVER.SPI.VAR.SPI2_PORT_BIT1_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI1_PRESCALE2.VALUE=74 -DRIVER.SPI.VAR.SPI4_PORT_BIT3_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI4_CHARLEN1.VALUE=16 -DRIVER.SPI.VAR.SPI1_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI1_PRESCALE3.VALUE=74 -DRIVER.SPI.VAR.SPI5_PORT_BIT1_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI5_T2CDELAYACTUAL.VALUE=13.333 -DRIVER.SPI.VAR.SPI4_CHARLEN2.VALUE=16 -DRIVER.SPI.VAR.SPI1_PORT_BIT8_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI4_CHARLEN3.VALUE=16 -DRIVER.SPI.VAR.SPI1_BASE.VALUE=0xFFF7F400 -DRIVER.SPI.VAR.SPI3_BITERRENA.VALUE=0 -DRIVER.SPI.VAR.SPI3_OVRNINTENA.VALUE=0 -DRIVER.SPI.VAR.SPI3_RXINTENA.VALUE=0 -DRIVER.SPI.VAR.SPI5_ACTUALBAUDRATE0.VALUE=1000.000 -DRIVER.SPI.VAR.SPI3_PORT_BIT10_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT4_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT2_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT25_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT17_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI5_ACTUALBAUDRATE1.VALUE=1000.000 -DRIVER.SPI.VAR.SPI5_PORT_BIT2_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI5_ACTUALBAUDRATE2.VALUE=1000.000 -DRIVER.SPI.VAR.SPI5_PARPOL0.VALUE=0 -DRIVER.SPI.VAR.SPI5_BITERRLVL.VALUE=0 -DRIVER.SPI.VAR.SPI4_SHIFTDIR0.VALUE=0 -DRIVER.SPI.VAR.SPI4_OVRNINTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT8_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI5_ACTUALBAUDRATE3.VALUE=1000.000 -DRIVER.SPI.VAR.SPI5_PARPOL1.VALUE=0 -DRIVER.SPI.VAR.SPI4_SHIFTDIR1.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT27_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT19_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT0_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI5_PARPOL2.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT0_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI4_SHIFTDIR2.VALUE=0 -DRIVER.SPI.VAR.SPI5_PARPOL3.VALUE=0 -DRIVER.SPI.VAR.SPI4_SHIFTDIR3.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT4_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT11_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT1_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT8_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT25_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT17_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT11_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI3_TXINTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT2_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT9_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI1_CLKMOD.VALUE=1 -DRIVER.SPI.VAR.SPI5_TIMEOUTENA.VALUE=0 -DRIVER.SPI.VAR.SPI2_DLENERRENA.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT11_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT5_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI3_PARITYENA0.VALUE=0 -DRIVER.SPI.VAR.SPI3_PARITYENA1.VALUE=0 -DRIVER.SPI.VAR.SPI1_T2EDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT3_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI5_BASE_PORT.VALUE=0xFFF7FC18 -DRIVER.SPI.VAR.SPI3_PORT_BIT9_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI3_PORT_BIT9_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI3_PARITYENA2.VALUE=0 -DRIVER.SPI.VAR.SPI3_DLENERRLVL.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT0_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI3_PARITYENA3.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT1_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI4_WDELAY0.VALUE=0 -DRIVER.SPI.VAR.SPI4_WDELAY1.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT5_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI4_WDELAY2.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT2_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT4_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI4_WDELAY3.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT3_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT10_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI1_T2CDELAYACTUAL.VALUE=13.333 -DRIVER.SPI.VAR.SPI5_PORT_BIT5_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI4_MASTER.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT2_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI5_PORT_BIT8_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT3_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI3_ACTUALBAUDRATE0.VALUE=1000.000 -DRIVER.SPI.VAR.SPI2_PORT_BIT0_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI3_ACTUALBAUDRATE1.VALUE=1000.000 -DRIVER.SPI.VAR.SPI2_BASE.VALUE=0xFFF7F600 -DRIVER.SPI.VAR.SPI4_PORT_BIT10_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT8_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT0_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI3_ACTUALBAUDRATE2.VALUE=1000.000 -DRIVER.SPI.VAR.SPI3_ACTUALBAUDRATE3.VALUE=1000.000 -DRIVER.SPI.VAR.SPI3_PARERRENA.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT3_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI2_C2TDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT4_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI5_PARERRLVL.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT1_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT8_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT5_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI1_DEYSNCENA.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT2_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT1_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI3_WAITENA0.VALUE=0 -DRIVER.SPI.VAR.SPI3_WAITENA1.VALUE=0 -DRIVER.SPI.VAR.SPI3_WAITENA2.VALUE=0 -DRIVER.SPI.VAR.SPI3_DEYSNCLVL.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT3_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI3_WAITENA3.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT26_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT18_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT11_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT8_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT10_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI3_PORT_BIT10_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI2_TXINTENA.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT4_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI5_BAUDRATE0.VALUE=1000.000 -DRIVER.SPI.VAR.SPI2_PORT_BIT1_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI2_C2TDELAYACTUAL.VALUE=26.667 -DRIVER.SPI.VAR.SPI5_BAUDRATE1.VALUE=1000.000 -DRIVER.SPI.VAR.SPI5_BAUDRATE2.VALUE=1000.000 -DRIVER.SPI.VAR.SPI4_PORT_BIT11_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI4_PARPOL0.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT9_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI5_BAUDRATE3.VALUE=1000.000 -DRIVER.SPI.VAR.SPI5_RAM_PARITY_ENA.VALUE=0 -DRIVER.SPI.VAR.SPI4_PARPOL1.VALUE=0 -DRIVER.SPI.VAR.SPI4_PARPOL2.VALUE=0 -DRIVER.SPI.VAR.SPI4_PARPOL3.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT5_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT2_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT3_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI2_OVRNINTENA.VALUE=0 -DRIVER.SPI.VAR.SPI1_BITERRENA.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT3_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI5_POLARITY0.VALUE=0 -DRIVER.SPI.VAR.SPI4_PHASE0.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT0_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI5_POLARITY1.VALUE=0 -DRIVER.SPI.VAR.SPI4_T2EDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI4_PHASE1.VALUE=0 -DRIVER.SPI.VAR.SPI5_POLARITY2.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT8_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI4_PHASE2.VALUE=0 -DRIVER.SPI.VAR.SPI3_BITERRLVL.VALUE=0 -DRIVER.SPI.VAR.SPI3_OVRNINTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI3_RXINTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI2_SHIFTDIR0.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT5_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI5_PORT_BIT26_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT18_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI5_POLARITY3.VALUE=0 -DRIVER.SPI.VAR.SPI4_PHASE3.VALUE=0 -DRIVER.SPI.VAR.SPI2_SHIFTDIR1.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT9_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI3_T2EDELAYACTUAL.VALUE=0.000 -DRIVER.SPI.VAR.SPI2_SHIFTDIR2.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT8_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI1_ACTUALBAUDRATE0.VALUE=1000.000 -DRIVER.SPI.VAR.SPI2_SHIFTDIR3.VALUE=0 -DRIVER.SPI.VAR.SPI1_ACTUALBAUDRATE1.VALUE=1000.000 -DRIVER.SPI.VAR.SPI4_PORT_BIT10_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT0_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT3_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI1_ACTUALBAUDRATE2.VALUE=1000.000 -DRIVER.SPI.VAR.SPI5_PORT_BIT11_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI1_ACTUALBAUDRATE3.VALUE=1000.000 -DRIVER.SPI.VAR.SPI5_PORT_BIT9_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT5_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI4_C2EDELAYACTUAL.VALUE=0.000 -DRIVER.SPI.VAR.SPI2_PORT_BIT2_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI3_BASE.VALUE=0xFFF7F800 -DRIVER.SPI.VAR.SPI3_PORT_BIT1_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI3_PORT_BIT8_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI4_PRESCALE0.VALUE=74 -DRIVER.SPI.VAR.SPI3_PORT_BIT8_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT4_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI3_WDELAY0.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT25_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT17_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI4_PRESCALE1.VALUE=74 -DRIVER.SPI.VAR.SPI3_C2EDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI3_WDELAY1.VALUE=0 -DRIVER.SPI.VAR.SPI4_PRESCALE2.VALUE=74 -DRIVER.SPI.VAR.SPI3_WDELAY2.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT3_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI4_PRESCALE3.VALUE=74 -DRIVER.SPI.VAR.SPI4_TIMEOUTENA.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI3_WDELAY3.VALUE=0 -DRIVER.SPI.VAR.SPI1_DLENERRENA.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT4_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT10_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT2_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI3_ENABLEHIGHZ.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT1_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI2_PARITYENA0.VALUE=0 -DRIVER.SPI.VAR.SPI5_C2TDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI2_PARITYENA1.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT8_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI5_TIMEOUTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI3_BASE_PORT.VALUE=0xFFF7F818 -DRIVER.SPI.VAR.SPI2_PORT_BIT10_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI2_PARITYENA2.VALUE=0 -DRIVER.SPI.VAR.SPI2_DLENERRLVL.VALUE=0 -DRIVER.SPI.VAR.SPI2_MASTER.VALUE=1 -DRIVER.SPI.VAR.SPI2_PARITYENA3.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT27_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT19_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT0_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT11_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT11_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI4_PORT_BIT1_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI1_RAM_PARITY_ENA.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT3_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI3_T2CDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI5_TXINTENA.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT3_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT9_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI3_BASE_RAM.VALUE=0xFF0C0000 -DRIVER.SPI.VAR.SPI3_CHARLEN0.VALUE=16 -DRIVER.SPI.VAR.SPI3_CHARLEN1.VALUE=16 -DRIVER.SPI.VAR.SPI1_PARERRENA.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT10_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT5_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT11_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI3_CHARLEN2.VALUE=16 -DRIVER.SPI.VAR.SPI2_PORT_BIT2_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI3_CHARLEN3.VALUE=16 -DRIVER.SPI.VAR.SPI5_PORT_BIT9_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT9_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI4_PORT_BIT0_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI3_PARERRLVL.VALUE=0 -DRIVER.SPI.VAR.SPI2_RXINTENA.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT9_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT2_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI3_PARPOL0.VALUE=0 -DRIVER.SPI.VAR.SPI1_DEYSNCLVL.VALUE=0 -DRIVER.SPI.VAR.SPI3_PARPOL1.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT8_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT10_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI3_PARPOL2.VALUE=0 -DRIVER.SPI.VAR.SPI2_T2CDELAYACTUAL.VALUE=13.333 -DRIVER.SPI.VAR.SPI4_BASE.VALUE=0xFFF7FA00 -DRIVER.SPI.VAR.SPI3_PARPOL3.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT2_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI5_PORT_BIT4_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT0_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI4_CLKMOD.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT5_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI3_BAUDRATE0.VALUE=1000.000 -DRIVER.SPI.VAR.SPI2_PHASE0.VALUE=0 -DRIVER.SPI.VAR.SPI3_BAUDRATE1.VALUE=1000.000 -DRIVER.SPI.VAR.SPI2_PHASE1.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT10_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT8_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT0_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI3_BAUDRATE2.VALUE=1000.000 -DRIVER.SPI.VAR.SPI2_PHASE2.VALUE=0 -DRIVER.SPI.VAR.SPI2_TXINTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI3_BAUDRATE3.VALUE=1000.000 -DRIVER.SPI.VAR.SPI2_PORT_BIT10_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI2_PHASE3.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT3_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT3_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT0_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT25_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI5_PORT_BIT17_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI4_PORT_BIT1_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT11_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI1_OVRNINTENA.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT1_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI3_POLARITY0.VALUE=0 -DRIVER.SPI.VAR.SPI3_POLARITY1.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT3_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI3_POLARITY2.VALUE=0 -DRIVER.SPI.VAR.SPI2_OVRNINTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT0_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI1_BITERRLVL.VALUE=0 -DRIVER.SPI.VAR.SPI4_DEYSNCENA.VALUE=0 -DRIVER.SPI.VAR.SPI3_POLARITY3.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT8_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT11_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI2_WDELAY0.VALUE=0 -DRIVER.SPI.VAR.SPI2_WDELAY1.VALUE=0 -DRIVER.SPI.VAR.SPI2_WDELAY2.VALUE=0 -DRIVER.SPI.VAR.SPI2_WDELAY3.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT1_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT10_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI3_C2TDELAYACTUAL.VALUE=26.667 -DRIVER.SPI.VAR.SPI5_PORT_BIT11_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT9_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT11_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT11_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI2_PRESCALE0.VALUE=74 -DRIVER.SPI.VAR.SPI2_PRESCALE1.VALUE=74 -DRIVER.SPI.VAR.SPI4_PORT_BIT2_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT8_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI2_PRESCALE2.VALUE=74 -DRIVER.SPI.VAR.SPI3_TIMEOUTENA.VALUE=0 -DRIVER.SPI.VAR.SPI2_PRESCALE3.VALUE=74 -DRIVER.SPI.VAR.SPI1_PORT_BIT8_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT0_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI1_PARITYENA0.VALUE=0 -DRIVER.SPI.VAR.SPI1_C2TDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI1_PARITYENA1.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT8_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI4_PORT_BIT4_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI4_TIMEOUTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT1_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI1_PARITYENA2.VALUE=0 -DRIVER.SPI.VAR.SPI1_DLENERRLVL.VALUE=0 -DRIVER.SPI.VAR.SPI1_BASE_PORT.VALUE=0xFFF7F418 -DRIVER.SPI.VAR.SPI5_RXINTENA.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT4_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI4_BITERRENA.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI1_PARITYENA3.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT9_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI4_T2EDELAYACTUAL.VALUE=0.000 -DRIVER.SPI.VAR.SPI2_PORT_BIT8_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI2_WAITENA0.VALUE=0 -DRIVER.SPI.VAR.SPI5_BASE.VALUE=0xFFF7FC00 -DRIVER.SPI.VAR.SPI2_WAITENA1.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT10_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI5_SHIFTDIR0.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT3_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI2_WAITENA2.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT10_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI5_SHIFTDIR1.VALUE=0 -DRIVER.SPI.VAR.SPI2_WAITENA3.VALUE=0 -DRIVER.SPI.VAR.SPI5_C2EDELAYACTUAL.VALUE=0.000 -DRIVER.SPI.VAR.SPI5_SHIFTDIR2.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT2_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI5_SHIFTDIR3.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT1_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI1_TXINTENA.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT8_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT4_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT1_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT26_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI5_PORT_BIT18_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI5_TXINTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT3_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT9_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI2_PARPOL0.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT0_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT9_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI2_PARPOL1.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT10_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT2_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT1_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI2_PARPOL2.VALUE=0 -DRIVER.SPI.VAR.SPI2_PARPOL3.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT5_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT2_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI1_PARERRLVL.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT2_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI2_CLKMOD.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT10_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI3_T2EDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT11_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI2_RXINTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT11_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI2_RAM_PARITY_ENA.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT3_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT11_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT0_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT8_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT9_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI1_BAUDRATE0.VALUE=1000.000 -DRIVER.SPI.VAR.SPI1_BAUDRATE1.VALUE=1000.000 -DRIVER.SPI.VAR.SPI4_PORT_BIT4_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT8_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI1_PORT_BIT1_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI1_BAUDRATE2.VALUE=1000.000 -DRIVER.SPI.VAR.SPI3_PORT_BIT4_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT25_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT17_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI1_BAUDRATE3.VALUE=1000.000 -DRIVER.SPI.VAR.SPI5_PORT_BIT11_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT2_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI1_WDELAY0.VALUE=0 -DRIVER.SPI.VAR.SPI2_C2EDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI1_WDELAY1.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT9_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI5_MASTER.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT10_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT3_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI1_WDELAY2.VALUE=0 -DRIVER.SPI.VAR.SPI4_PARERRENA.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT10_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI1_WDELAY3.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT9_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT8_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI1_C2EDELAYACTUAL.VALUE=0.000 -DRIVER.SPI.VAR.SPI1_POLARITY0.VALUE=0 -DRIVER.SPI.VAR.SPI4_C2TDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI1_POLARITY1.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT4_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI1_PORT_BIT25_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI1_PORT_BIT17_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI1_POLARITY2.VALUE=0 -DRIVER.SPI.VAR.SPI1_OVRNINTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI5_DLENERRENA.VALUE=0 -DRIVER.SPI.VAR.SPI2_DEYSNCENA.VALUE=0 -DRIVER.SPI.VAR.SPI1_POLARITY3.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT10_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI5_WAITENA0.VALUE=0 -DRIVER.SPI.VAR.SPI5_ENABLEHIGHZ.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT4_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI3_T2CDELAYACTUAL.VALUE=13.333 -DRIVER.SPI.VAR.SPI1_PORT_BIT1_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI5_WAITENA1.VALUE=0 -DRIVER.SPI.VAR.SPI5_WAITENA2.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT2_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI4_DEYSNCLVL.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT9_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI5_WAITENA3.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT9_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT5_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI4_ACTUALBAUDRATE0.VALUE=1000.000 -DRIVER.SPI.VAR.SPI1_PORT_BIT10_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT2_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI4_ACTUALBAUDRATE1.VALUE=1000.000 -DRIVER.SPI.VAR.SPI2_T2CDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT27_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI5_PORT_BIT19_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI5_PORT_BIT0_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI4_PORT_BIT5_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI4_ACTUALBAUDRATE2.VALUE=1000.000 -DRIVER.SPI.VAR.SPI1_PORT_BIT2_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT2_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI4_ACTUALBAUDRATE3.VALUE=1000.000 -DRIVER.SPI.VAR.SPI4_TXINTENA.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT3_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT3_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT0_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT0_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI2_BASE_RAM.VALUE=0xFF080000 -DRIVER.SPI.VAR.SPI2_CHARLEN0.VALUE=16 -DRIVER.SPI.VAR.SPI1_PORT_BIT11_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT4_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT11_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI2_CHARLEN1.VALUE=16 -DRIVER.SPI.VAR.SPI2_TIMEOUTENA.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT9_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI2_CHARLEN2.VALUE=16 -DRIVER.SPI.VAR.SPI2_ENABLEHIGHZ.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT11_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI2_CHARLEN3.VALUE=16 -DRIVER.SPI.VAR.SPI3_PORT_BIT0_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI3_TIMEOUTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI2_BITERRENA.VALUE=0 -DRIVER.SPI.VAR.SPI1_RXINTENA.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT11_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT5_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT2_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT10_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI5_RXINTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI4_BITERRLVL.VALUE=0 -DRIVER.SPI.VAR.SPI3_SHIFTDIR0.VALUE=0 -DRIVER.SPI.VAR.SPI1_PARPOL0.VALUE=0 -DRIVER.SPI.VAR.SPI3_SHIFTDIR1.VALUE=0 -DRIVER.SPI.VAR.SPI1_PARPOL1.VALUE=0 -DRIVER.SPI.VAR.SPI5_PHASE0.VALUE=0 -DRIVER.SPI.VAR.SPI4_C2TDELAYACTUAL.VALUE=26.667 -DRIVER.SPI.VAR.SPI3_SHIFTDIR2.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT8_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT11_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI1_PARPOL2.VALUE=0 -DRIVER.SPI.VAR.SPI5_PHASE1.VALUE=0 -DRIVER.SPI.VAR.SPI3_SHIFTDIR3.VALUE=0 -DRIVER.SPI.VAR.SPI1_PARPOL3.VALUE=0 -DRIVER.SPI.VAR.SPI5_PHASE2.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT9_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI1_PORT_BIT3_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT27_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT19_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI5_PHASE3.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT4_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT1_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT8_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT5_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI1_TXINTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI5_PRESCALE0.VALUE=74 -DRIVER.SPI.VAR.SPI1_PORT_BIT10_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI5_C2EDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI5_PRESCALE1.VALUE=74 -DRIVER.SPI.VAR.SPI5_PRESCALE2.VALUE=74 -DRIVER.SPI.VAR.SPI3_PORT_BIT5_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI3_PORT_BIT1_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI5_PRESCALE3.VALUE=74 -DRIVER.SPI.VAR.SPI3_PORT_BIT9_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI5_T2EDELAYACTUAL.VALUE=0.000 -DRIVER.SPI.VAR.SPI3_PORT_BIT8_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI2_ACTUALBAUDRATE0.VALUE=1000.000 -DRIVER.SPI.VAR.SPI1_PORT_BIT3_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI2_ACTUALBAUDRATE1.VALUE=1000.000 -DRIVER.SPI.VAR.SPI4_PORT_BIT3_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI4_BASE_PORT.VALUE=0xFFF7FA18 -DRIVER.SPI.VAR.SPI2_PORT_BIT10_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI2_ACTUALBAUDRATE2.VALUE=1000.000 -DRIVER.SPI.VAR.SPI1_PORT_BIT0_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI5_OVRNINTENA.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT2_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI2_ACTUALBAUDRATE3.VALUE=1000.000 -DRIVER.SPI.VAR.SPI2_PORT_BIT9_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT3_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT1_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI3_MASTER.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT4_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT4_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT5_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT1_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT2_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI5_T2CDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT9_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT0_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT11_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI5_BASE_RAM.VALUE=0xFF0A0000 -DRIVER.SPI.VAR.SPI5_CHARLEN0.VALUE=16 -DRIVER.SPI.VAR.SPI3_PORT_BIT10_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI3_PORT_BIT2_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI5_CHARLEN1.VALUE=16 -DRIVER.SPI.VAR.SPI2_PARERRENA.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT4_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI5_CHARLEN2.VALUE=16 -DRIVER.SPI.VAR.SPI1_PORT_BIT4_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI5_CHARLEN3.VALUE=16 -DRIVER.SPI.VAR.SPI5_PORT_BIT25_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT17_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT11_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI4_PARERRLVL.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT11_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI4_DLENERRENA.VALUE=0 -DRIVER.SPI.VAR.SPI4_RXINTENA.VALUE=0 -DRIVER.SPI.VAR.SPI3_RAM_PARITY_ENA.VALUE=0 -DRIVER.SPI.VAR.SPI5_PARITYENA0.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT0_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI1_WAITENA0.VALUE=0 -DRIVER.SPI.VAR.SPI5_PARITYENA1.VALUE=0 -DRIVER.SPI.VAR.SPI1_WAITENA1.VALUE=0 -DRIVER.SPI.VAR.SPI5_PARITYENA2.VALUE=0 -DRIVER.SPI.VAR.SPI5_DLENERRLVL.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT8_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI2_DEYSNCLVL.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT5_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI1_WAITENA2.VALUE=0 -DRIVER.SPI.VAR.SPI5_PARITYENA3.VALUE=0 -DRIVER.SPI.VAR.SPI1_WAITENA3.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT3_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT1_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT8_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI2_PORT_BIT9_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI4_BAUDRATE0.VALUE=1000.000 -DRIVER.SPI.VAR.SPI1_T2EDELAYACTUAL.VALUE=0.000 -DRIVER.SPI.VAR.SPI4_BAUDRATE1.VALUE=1000.000 -DRIVER.SPI.VAR.SPI4_BAUDRATE2.VALUE=1000.000 -DRIVER.SPI.VAR.SPI4_TXINTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT3_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT10_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT5_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI4_BAUDRATE3.VALUE=1000.000 -DRIVER.SPI.VAR.SPI2_PORT_BIT2_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI1_TIMEOUTENA.VALUE=0 -DRIVER.SPI.VAR.SPI5_CLKMOD.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT8_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT9_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI3_PHASE0.VALUE=0 -DRIVER.SPI.VAR.SPI2_C2EDELAYACTUAL.VALUE=0.000 -DRIVER.SPI.VAR.SPI1_PORT_BIT5_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI3_PHASE1.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_51_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_51_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_43_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_43_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_35_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_35_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_27_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_27_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_19_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_19_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_51_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_43_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_35_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_27_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_19_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_21_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_21_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_13_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_13_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_59_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_9_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_30_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_22_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_14_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_4_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_61_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_53_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_45_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_37_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_29_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_6_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_RAM_PARITY_ENA.VALUE=0x00000005 -DRIVER.CAN.VAR.CAN_1_MESSAGE_59_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_64_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_56_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_48_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_SYNC.VALUE=1 -DRIVER.CAN.VAR.CAN_4_MESSAGE_62_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_54_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_46_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_38_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_SHIFT.VALUE=0 -DRIVER.CAN.VAR.CAN_4_AUTO_BUS_ON.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_4_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_4_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_40_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_32_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_24_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_16_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_57_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_49_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_64_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_56_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_48_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_31_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_23_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_15_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_51_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_43_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_35_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_27_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_19_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_BAUDRATE.VALUE=500 -DRIVER.CAN.VAR.CAN_2_PORT_RX_PDR.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_63_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_55_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_47_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_39_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_30_ID.VALUE=30 -DRIVER.CAN.VAR.CAN_2_MESSAGE_22_ID.VALUE=22 -DRIVER.CAN.VAR.CAN_2_MESSAGE_14_ID.VALUE=14 -DRIVER.CAN.VAR.CAN_2_MESSAGE_9_ID.VALUE=9 -DRIVER.CAN.VAR.CAN_1_MESSAGE_57_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_49_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_60_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_52_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_44_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_36_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_28_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_RAMBASE.VALUE=0xFF1C0000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_30_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_22_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_14_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_51_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_43_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_35_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_27_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_19_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_9_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_PORT_RX_PULDIS.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_57_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_49_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_4_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_2_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_64_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_56_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_48_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_NOMINAL_BIT_RATE.VALUE=500.000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_51_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_43_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_35_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_27_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_19_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_1_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_57_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_51_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_49_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_43_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_35_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_27_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_19_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_10_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_5_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_64_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_64_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_56_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_56_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_48_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_48_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_40_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_32_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_24_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_16_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_9_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_60_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_52_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_50_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_44_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_42_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_36_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_34_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_28_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_26_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_18_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_60_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_58_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_52_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_44_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_36_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_28_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_PIN_MODE.VALUE=1 -DRIVER.CAN.VAR.CAN_2_PHASE_SEG.VALUE=4 -DRIVER.CAN.VAR.CAN_1_MESSAGE_30_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_22_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_20_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_14_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_12_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_31_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_23_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_15_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_7_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_51_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_43_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_35_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_31_ID.VALUE=31 -DRIVER.CAN.VAR.CAN_2_MESSAGE_27_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_23_ID.VALUE=23 -DRIVER.CAN.VAR.CAN_2_MESSAGE_19_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_15_ID.VALUE=15 -DRIVER.CAN.VAR.CAN_4_MESSAGE_1_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_NOMINAL_BIT_TIME.VALUE=15 -DRIVER.CAN.VAR.CAN_4_MESSAGE_60_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_60_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_52_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_52_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_51_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_44_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_44_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_43_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_36_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_36_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_35_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_28_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_28_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_27_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_19_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_9_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_30_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_30_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_22_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_22_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_21_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_14_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_14_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_13_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_AUTO_BUS_ON.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_60_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_52_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_44_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_36_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_28_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_63_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_55_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_47_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_39_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_31_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_23_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_15_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_10_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_5_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_PORT_TX_PULDIS.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_30_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_22_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_14_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_51_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_43_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_35_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_27_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_19_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_7_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_21_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_13_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_57_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_49_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_BASE.VALUE=0xFFF7DC00 -DRIVER.CAN.VAR.CAN_4_MESSAGE_9_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_40_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_32_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_24_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_16_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_10_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_10_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_5_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_5_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_6_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_40_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_32_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_24_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_16_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_11_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_1_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_8_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_3_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_3_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_10_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_4_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_21_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_13_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_64_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_56_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_48_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_40_ID.VALUE=40 -DRIVER.CAN.VAR.CAN_2_MESSAGE_32_ID.VALUE=32 -DRIVER.CAN.VAR.CAN_2_MESSAGE_24_ID.VALUE=24 -DRIVER.CAN.VAR.CAN_2_MESSAGE_16_ID.VALUE=16 -DRIVER.CAN.VAR.CAN_1_MESSAGE_1_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_61_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_53_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_45_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_37_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_29_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_31_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_23_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_15_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_1_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_1_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_21_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_13_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_6_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_6_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_IDENTIFIER_MODE.VALUE=0x40000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_57_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_49_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_11_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_57_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_49_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_40_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_32_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_24_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_16_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_3_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_60_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_52_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_44_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_36_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_28_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_11_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_6_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_PORT_RX_PULL.VALUE=1 -DRIVER.CAN.VAR.CAN_4_MESSAGE_40_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_32_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_24_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_16_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_57_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_57_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_49_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_49_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_6_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_PORT_TX_DIN.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_10_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_61_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_53_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_45_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_37_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_29_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_59_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_51_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_43_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_35_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_27_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_19_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_1_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_31_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_23_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_15_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_40_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_32_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_24_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_16_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_8_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_PORT_RX_PSL.VALUE=1 -DRIVER.CAN.VAR.CAN_2_MESSAGE_41_ID.VALUE=41 -DRIVER.CAN.VAR.CAN_2_MESSAGE_33_ID.VALUE=33 -DRIVER.CAN.VAR.CAN_2_MESSAGE_25_ID.VALUE=25 -DRIVER.CAN.VAR.CAN_2_MESSAGE_17_ID.VALUE=17 -DRIVER.CAN.VAR.CAN_1_MESSAGE_10_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_2_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_BRP_FREQ.VALUE=7.500 -DRIVER.CAN.VAR.CAN_4_MESSAGE_61_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_61_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_53_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_53_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_45_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_45_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_37_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_37_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_29_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_29_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_6_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_21_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_13_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_PORT_TX_DIR.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_31_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_31_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_23_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_23_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_15_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_15_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_3_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_21_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_13_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_5_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_11_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_6_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_4_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_PROP_SEG.VALUE=6 -DRIVER.CAN.VAR.CAN_3_MESSAGE_1_ID.VALUE=1 -DRIVER.CAN.VAR.CAN_2_MESSAGE_64_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_56_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_48_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_1_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_SYNC.VALUE=1 -DRIVER.CAN.VAR.CAN_3_MESSAGE_58_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_11_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_11_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_10_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_6_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_6_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_3_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_2_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_60_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_52_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_44_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_36_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_28_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_57_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_49_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_NOMINAL_BIT_RATE.VALUE=500.000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_64_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_56_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_48_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_64_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_56_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_48_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_57_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_50_ID.VALUE=50 -DRIVER.CAN.VAR.CAN_2_MESSAGE_49_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_42_ID.VALUE=42 -DRIVER.CAN.VAR.CAN_2_MESSAGE_34_ID.VALUE=34 -DRIVER.CAN.VAR.CAN_2_MESSAGE_26_ID.VALUE=26 -DRIVER.CAN.VAR.CAN_2_MESSAGE_18_ID.VALUE=18 -DRIVER.CAN.VAR.CAN_1_MESSAGE_50_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_42_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_34_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_26_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_18_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_62_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_54_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_46_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_38_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_PROPAGATION_DELAY.VALUE=700 -DRIVER.CAN.VAR.CAN_1_MESSAGE_40_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_32_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_24_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_16_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_21_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_13_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_2_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_2_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_3_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_58_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_BAUDRATE.VALUE=500 -DRIVER.CAN.VAR.CAN_3_MESSAGE_58_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_50_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_42_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_34_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_26_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_18_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_60_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_57_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_52_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_49_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_44_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_36_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_28_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_10_ID.VALUE=10 -DRIVER.CAN.VAR.CAN_4_MESSAGE_9_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_61_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_53_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_50_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_45_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_42_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_37_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_34_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_29_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_26_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_18_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_2_ID.VALUE=2 -DRIVER.CAN.VAR.CAN_1_MESSAGE_6_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_NOMINAL_BIT_TIME.VALUE=15 -DRIVER.CAN.VAR.CAN_2_MESSAGE_20_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_12_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_7_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_3_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_58_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_58_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_10_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_SAMPLE_POINT.VALUE=73.333 -DRIVER.CAN.VAR.CAN_4_MESSAGE_62_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_54_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_46_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_38_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_8_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_7_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_61_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_53_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_45_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_37_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_29_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_21_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_20_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_13_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_12_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_40_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_32_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_24_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_16_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_5_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_4_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_41_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_33_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_25_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_17_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_9_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_51_ID.VALUE=51 -DRIVER.CAN.VAR.CAN_2_MESSAGE_43_ID.VALUE=43 -DRIVER.CAN.VAR.CAN_2_MESSAGE_35_ID.VALUE=35 -DRIVER.CAN.VAR.CAN_2_MESSAGE_27_ID.VALUE=27 -DRIVER.CAN.VAR.CAN_2_MESSAGE_20_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_19_ID.VALUE=19 -DRIVER.CAN.VAR.CAN_2_MESSAGE_12_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_3_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_11_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_3_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_62_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_62_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_54_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_54_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_46_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_46_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_38_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_38_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_40_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_40_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_32_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_32_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_24_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_24_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_16_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_16_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_64_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_56_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_48_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_40_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_32_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_24_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_20_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_16_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_12_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_7_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_50_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_42_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_34_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_26_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_18_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_20_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_12_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_11_ID.VALUE=11 -DRIVER.CAN.VAR.CAN_3_MESSAGE_3_ID.VALUE=3 -DRIVER.CAN.VAR.CAN_2_PORT_RX_DOUT.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_2_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_59_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_BASE.VALUE=0xFFF7DE00 -DRIVER.CAN.VAR.CAN_1_RAMBASE.VALUE=0xFF1E0000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_10_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_20_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_20_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_12_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_12_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_7_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_7_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_PORT_RX_PULL.VALUE=2 -DRIVER.CAN.VAR.CAN_4_MESSAGE_63_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_55_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_47_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_41_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_39_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_33_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_25_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_17_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_3_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_1_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_9_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_IDENTIFIER_MODE.VALUE=0x40000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_41_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_33_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_25_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_17_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_11_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_60_ID.VALUE=60 -DRIVER.CAN.VAR.CAN_2_MESSAGE_58_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_52_ID.VALUE=52 -DRIVER.CAN.VAR.CAN_2_MESSAGE_44_ID.VALUE=44 -DRIVER.CAN.VAR.CAN_2_MESSAGE_36_ID.VALUE=36 -DRIVER.CAN.VAR.CAN_2_MESSAGE_28_ID.VALUE=28 -DRIVER.CAN.VAR.CAN_4_MESSAGE_63_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_55_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_47_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_39_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_41_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_33_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_25_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_17_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_PORT_RX_DIN.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_3_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_3_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_41_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_33_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_25_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_17_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_7_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_59_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_20_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_12_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_9_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_11_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_6_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_11_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_4_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_20_ID.VALUE=20 -DRIVER.CAN.VAR.CAN_4_MESSAGE_12_ID.VALUE=12 -DRIVER.CAN.VAR.CAN_3_MESSAGE_62_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_54_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_46_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_38_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_4_ID.VALUE=4 -DRIVER.CAN.VAR.CAN_1_MESSAGE_63_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_55_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_47_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_39_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_21_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_13_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_8_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_PORT_RX_DIR.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_59_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_59_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_AUTO_RETRANSMISSION.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_PORT_TX_FUN.VALUE=1 -DRIVER.CAN.VAR.CAN_1_MESSAGE_59_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_63_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_55_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_47_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_39_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_62_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_54_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_46_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_38_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_2_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_41_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_33_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_25_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_17_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_PORT_TX_DOUT.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_50_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_42_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_34_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_26_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_18_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_AUTO_BUS_ON_TR.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_63_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_55_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_47_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_39_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_61_ID.VALUE=61 -DRIVER.CAN.VAR.CAN_2_MESSAGE_53_ID.VALUE=53 -DRIVER.CAN.VAR.CAN_2_MESSAGE_45_ID.VALUE=45 -DRIVER.CAN.VAR.CAN_2_MESSAGE_37_ID.VALUE=37 -DRIVER.CAN.VAR.CAN_2_MESSAGE_29_ID.VALUE=29 -DRIVER.CAN.VAR.CAN_1_MESSAGE_20_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_12_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_4_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_1_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_63_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_63_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_55_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_55_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_47_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_47_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_39_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_39_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_PORT_TX_PULL.VALUE=2 -DRIVER.CAN.VAR.CAN_1_MESSAGE_41_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_41_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_33_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_33_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_25_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_25_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_17_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_17_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_10_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_62_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_54_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_46_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_38_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_2_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_21_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_13_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_8_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_NOMINAL_BIT_RATE.VALUE=500.000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_21_ID.VALUE=21 -DRIVER.CAN.VAR.CAN_4_MESSAGE_13_ID.VALUE=13 -DRIVER.CAN.VAR.CAN_3_MESSAGE_5_ID.VALUE=5 -DRIVER.CAN.VAR.CAN_2_MESSAGE_41_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_33_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_25_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_17_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_8_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_3_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_BRPE_FREQ.VALUE=7.500 -DRIVER.CAN.VAR.CAN_2_MESSAGE_59_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_21_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_21_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_13_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_13_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_8_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_8_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_PORT_RX_DIN.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_40_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_32_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_24_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_16_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_4_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_PROP_SEG.VALUE=6 -DRIVER.CAN.VAR.CAN_3_MESSAGE_8_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_58_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_31_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_23_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_15_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_RAM_PARITY_ENA.VALUE=0x00000005 -DRIVER.CAN.VAR.CAN_1_MESSAGE_10_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_1_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_41_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_33_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_25_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_17_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_5_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_PORT_TX_PDR.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_62_ID.VALUE=62 -DRIVER.CAN.VAR.CAN_2_MESSAGE_59_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_54_ID.VALUE=54 -DRIVER.CAN.VAR.CAN_2_MESSAGE_46_ID.VALUE=46 -DRIVER.CAN.VAR.CAN_2_MESSAGE_38_ID.VALUE=38 -DRIVER.CAN.VAR.CAN_1_MESSAGE_11_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_64_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_56_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_48_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_NOMINAL_BIT_TIME.VALUE=15 -DRIVER.CAN.VAR.CAN_1_MESSAGE_50_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_42_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_34_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_26_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_18_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_4_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_4_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_PORT_RX_DIR.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_64_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_56_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_48_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_1_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_1_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_59_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_58_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_61_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_59_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_53_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_45_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_37_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_29_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_TQ.VALUE=133.333 -DRIVER.CAN.VAR.CAN_4_MESSAGE_30_ID.VALUE=30 -DRIVER.CAN.VAR.CAN_4_MESSAGE_22_ID.VALUE=22 -DRIVER.CAN.VAR.CAN_4_MESSAGE_14_ID.VALUE=14 -DRIVER.CAN.VAR.CAN_4_MESSAGE_2_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_63_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_55_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_47_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_39_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_11_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_6_ID.VALUE=6 -DRIVER.CAN.VAR.CAN_2_MESSAGE_30_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_22_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_14_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_9_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_59_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_64_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_56_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_48_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_62_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_54_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_46_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_38_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_61_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_53_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_45_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_37_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_29_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_3_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_50_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_42_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_34_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_26_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_18_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_51_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_43_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_35_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_27_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_19_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_63_ID.VALUE=63 -DRIVER.CAN.VAR.CAN_2_MESSAGE_55_ID.VALUE=55 -DRIVER.CAN.VAR.CAN_2_MESSAGE_47_ID.VALUE=47 -DRIVER.CAN.VAR.CAN_2_MESSAGE_39_ID.VALUE=39 -DRIVER.CAN.VAR.CAN_1_MESSAGE_21_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_13_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_5_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_10_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_2_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_64_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_64_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_56_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_56_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_48_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_48_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_64_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_56_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_48_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_50_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_50_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_42_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_42_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_34_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_34_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_26_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_26_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_18_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_18_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_51_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_43_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_35_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_31_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_27_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_23_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_19_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_15_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_41_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_33_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_30_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_25_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_22_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_17_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_14_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_9_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_TQ.VALUE=133.333 -DRIVER.CAN.VAR.CAN_1_MESSAGE_7_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_BRPE.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_31_ID.VALUE=31 -DRIVER.CAN.VAR.CAN_4_MESSAGE_23_ID.VALUE=23 -DRIVER.CAN.VAR.CAN_4_MESSAGE_15_ID.VALUE=15 -DRIVER.CAN.VAR.CAN_3_MESSAGE_7_ID.VALUE=7 -DRIVER.CAN.VAR.CAN_2_MESSAGE_4_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_BASE.VALUE=0xFFF7E000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_59_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_30_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_30_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_22_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_22_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_14_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_14_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_9_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_9_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_61_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_53_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_45_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_37_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_29_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_50_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_42_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_34_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_26_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_18_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_5_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_10_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_1_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_PORT_TX_PULDIS.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_64_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_56_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_48_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_20_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_12_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_2_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_64_ID.VALUE=64 -DRIVER.CAN.VAR.CAN_2_MESSAGE_62_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_56_ID.VALUE=56 -DRIVER.CAN.VAR.CAN_2_MESSAGE_54_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_48_ID.VALUE=48 -DRIVER.CAN.VAR.CAN_2_MESSAGE_46_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_38_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_PORT_TX_DOUT.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_57_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_49_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_51_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_43_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_35_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_27_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_19_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_PORT_RX_FUN.VALUE=1 -DRIVER.CAN.VAR.CAN_4_MESSAGE_5_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_5_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_64_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_56_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_48_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_10_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_10_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_2_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_2_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_58_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_8_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_7_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_21_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_20_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_13_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_12_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_TQ.VALUE=133.333 -DRIVER.CAN.VAR.CAN_1_MESSAGE_60_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_52_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_44_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_36_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_28_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_5_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_4_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_62_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_54_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_46_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_40_ID.VALUE=40 -DRIVER.CAN.VAR.CAN_4_MESSAGE_38_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_32_ID.VALUE=32 -DRIVER.CAN.VAR.CAN_4_MESSAGE_24_ID.VALUE=24 -DRIVER.CAN.VAR.CAN_4_MESSAGE_16_ID.VALUE=16 -DRIVER.CAN.VAR.CAN_3_MESSAGE_64_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_56_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_48_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_8_ID.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_40_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_32_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_24_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_16_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_10_ID.VALUE=10 -DRIVER.CAN.VAR.CAN_2_MESSAGE_31_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_23_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_15_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_61_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_53_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_45_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_37_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_29_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_63_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_57_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_55_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_49_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_47_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_39_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_30_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_22_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_14_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_9_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_3_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_51_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_43_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_41_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_35_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_33_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_27_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_25_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_19_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_17_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_60_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_52_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_44_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_36_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_28_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_7_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_40_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_32_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_24_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_16_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_PORT_TX_PSL.VALUE=1 -DRIVER.CAN.VAR.CAN_2_MESSAGE_57_ID.VALUE=57 -DRIVER.CAN.VAR.CAN_2_MESSAGE_49_ID.VALUE=49 -DRIVER.CAN.VAR.CAN_1_MESSAGE_30_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_22_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_14_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_4_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_6_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_11_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_3_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_SAMPLE_POINT_REFERENCE.VALUE=75 -DRIVER.CAN.VAR.CAN_1_PROPAGATION_DELAY.VALUE=700 -DRIVER.CAN.VAR.CAN_4_MESSAGE_64_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_57_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_57_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_56_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_49_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_49_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_48_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_51_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_51_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_50_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_43_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_43_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_42_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_35_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_35_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_34_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_27_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_27_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_26_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_19_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_19_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_18_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_3_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_TQ.VALUE=133.333 -DRIVER.CAN.VAR.CAN_3_MESSAGE_1_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_31_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_23_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_15_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_PORT_RX_PDR.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_41_ID.VALUE=41 -DRIVER.CAN.VAR.CAN_4_MESSAGE_33_ID.VALUE=33 -DRIVER.CAN.VAR.CAN_4_MESSAGE_25_ID.VALUE=25 -DRIVER.CAN.VAR.CAN_4_MESSAGE_17_ID.VALUE=17 -DRIVER.CAN.VAR.CAN_3_MESSAGE_9_ID.VALUE=9 -DRIVER.CAN.VAR.CAN_2_MESSAGE_10_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_10_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_5_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_1_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_11_ID.VALUE=11 -DRIVER.CAN.VAR.CAN_1_NOMINAL_BIT_TIME.VALUE=15 -DRIVER.CAN.VAR.CAN_3_MESSAGE_61_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_53_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_45_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_37_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_29_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_31_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_31_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_23_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_23_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_15_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_15_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_PORT_RX_FUN.VALUE=1 -DRIVER.CAN.VAR.CAN_4_MESSAGE_40_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_32_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_24_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_16_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_6_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_57_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_49_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_11_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_8_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_ENABLE.VALUE=1 -DRIVER.CAN.VAR.CAN_2_MESSAGE_59_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_10_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_3_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_PIN_MODE.VALUE=1 -DRIVER.CAN.VAR.CAN_4_MESSAGE_10_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_1_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_58_ID.VALUE=58 -DRIVER.CAN.VAR.CAN_4_MESSAGE_58_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_SAMPLE_POINT_REFERENCE.VALUE=75 -DRIVER.CAN.VAR.CAN_1_MESSAGE_60_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_52_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_44_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_36_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_28_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_6_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_6_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_11_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_11_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_50_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_42_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_34_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_26_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_18_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_3_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_3_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_51_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_43_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_35_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_27_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_19_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_61_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_53_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_45_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_37_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_29_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_PORT_RX_PULDIS.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_62_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_54_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_46_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_38_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_21_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_13_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_50_ID.VALUE=50 -DRIVER.CAN.VAR.CAN_4_MESSAGE_42_ID.VALUE=42 -DRIVER.CAN.VAR.CAN_4_MESSAGE_34_ID.VALUE=34 -DRIVER.CAN.VAR.CAN_4_MESSAGE_26_ID.VALUE=26 -DRIVER.CAN.VAR.CAN_4_MESSAGE_18_ID.VALUE=18 -DRIVER.CAN.VAR.CAN_3_MESSAGE_57_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_49_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_59_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_20_ID.VALUE=20 -DRIVER.CAN.VAR.CAN_1_MESSAGE_12_ID.VALUE=12 -DRIVER.CAN.VAR.CAN_2_MESSAGE_40_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_32_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_24_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_16_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_61_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_53_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_45_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_37_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_29_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_AUTO_BUS_ON.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_31_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_23_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_15_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_58_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_63_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_55_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_47_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_39_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_1_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_2_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_60_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_52_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_44_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_36_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_28_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_61_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_59_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_53_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_45_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_37_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_29_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_59_ID.VALUE=59 -DRIVER.CAN.VAR.CAN_1_PORT_RX_PDR.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_61_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_53_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_45_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_37_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_31_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_29_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_23_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_15_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_7_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_20_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_12_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_SAMPLE_POINT_REFERENCE.VALUE=75 -DRIVER.CAN.VAR.CAN_1_MESSAGE_4_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_58_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_58_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_50_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_42_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_34_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_26_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_18_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_60_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_60_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_52_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_52_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_44_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_44_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_36_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_36_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_28_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_28_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_8_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_SHIFT.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_64_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_56_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_50_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_48_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_42_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_40_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_34_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_32_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_30_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_26_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_24_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_22_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_18_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_16_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_14_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_9_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_BRPE.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MASK.VALUE=0x1FFFFFFF -DRIVER.CAN.VAR.CAN_4_MESSAGE_51_ID.VALUE=51 -DRIVER.CAN.VAR.CAN_4_MESSAGE_43_ID.VALUE=43 -DRIVER.CAN.VAR.CAN_4_MESSAGE_35_ID.VALUE=35 -DRIVER.CAN.VAR.CAN_4_MESSAGE_27_ID.VALUE=27 -DRIVER.CAN.VAR.CAN_4_MESSAGE_19_ID.VALUE=19 -DRIVER.CAN.VAR.CAN_3_MESSAGE_61_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_53_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_45_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_37_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_29_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_11_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_6_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_21_ID.VALUE=21 -DRIVER.CAN.VAR.CAN_1_MESSAGE_13_ID.VALUE=13 -DRIVER.CAN.VAR.CAN_1_MESSAGE_9_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_BASE.VALUE=0xFFF7E200 -DRIVER.CAN.VAR.CAN_2_MESSAGE_40_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_40_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_32_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_32_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_31_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_24_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_24_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_23_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_16_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_16_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_15_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_8_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_51_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_43_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_35_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_27_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_19_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_7_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_57_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_50_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_49_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_42_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_34_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_26_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_20_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_18_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_12_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_21_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_13_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_4_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_2_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_31_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_23_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_15_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_6_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_59_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_SAMPLE_POINT_REFERENCE.VALUE=75 -DRIVER.CAN.VAR.CAN_1_MESSAGE_61_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_53_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_45_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_37_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_29_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_BRPE_FREQ.VALUE=7.500 -DRIVER.CAN.VAR.CAN_1_BRP_FREQ.VALUE=7.500 -DRIVER.CAN.VAR.CAN_4_PORT_TX_DIN.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_50_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_42_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_34_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_26_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_18_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_7_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_7_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_20_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_20_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_12_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_12_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_8_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_20_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_12_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_4_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_4_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_20_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_12_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_9_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_30_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_22_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_14_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_4_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_2_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_6_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_PORT_RX_PSL.VALUE=1 -DRIVER.CAN.VAR.CAN_4_MESSAGE_60_ID.VALUE=60 -DRIVER.CAN.VAR.CAN_4_MESSAGE_52_ID.VALUE=52 -DRIVER.CAN.VAR.CAN_4_MESSAGE_44_ID.VALUE=44 -DRIVER.CAN.VAR.CAN_4_MESSAGE_36_ID.VALUE=36 -DRIVER.CAN.VAR.CAN_4_MESSAGE_31_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_28_ID.VALUE=28 -DRIVER.CAN.VAR.CAN_4_MESSAGE_23_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_15_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_58_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_3_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_30_ID.VALUE=30 -DRIVER.CAN.VAR.CAN_1_MESSAGE_22_ID.VALUE=22 -DRIVER.CAN.VAR.CAN_1_MESSAGE_14_ID.VALUE=14 -DRIVER.CAN.VAR.CAN_2_MESSAGE_41_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_33_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_25_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_17_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_PORT_TX_DIR.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_8_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_31_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_23_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_15_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_5_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_59_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_50_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_42_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_34_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_26_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_18_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_4_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_63_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_61_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_55_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_53_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_47_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_45_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_39_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_37_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_29_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_62_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_54_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_46_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_38_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_1_ID.VALUE=1 -DRIVER.CAN.VAR.CAN_1_MESSAGE_40_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_32_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_24_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_16_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_8_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_21_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_13_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_5_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_59_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_59_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_20_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_12_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_5_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_61_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_61_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_53_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_53_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_45_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_45_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_37_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_37_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_29_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_29_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_10_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_2_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_BAUDRATE.VALUE=500 -DRIVER.CAN.VAR.CAN_2_MESSAGE_41_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_41_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_33_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_33_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_25_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_25_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_17_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_17_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_63_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_55_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_47_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_39_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_61_ID.VALUE=61 -DRIVER.CAN.VAR.CAN_4_MESSAGE_53_ID.VALUE=53 -DRIVER.CAN.VAR.CAN_4_MESSAGE_45_ID.VALUE=45 -DRIVER.CAN.VAR.CAN_4_MESSAGE_37_ID.VALUE=37 -DRIVER.CAN.VAR.CAN_4_MESSAGE_29_ID.VALUE=29 -DRIVER.CAN.VAR.CAN_2_MESSAGE_20_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_12_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_7_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_58_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_31_ID.VALUE=31 -DRIVER.CAN.VAR.CAN_1_MESSAGE_23_ID.VALUE=23 -DRIVER.CAN.VAR.CAN_1_MESSAGE_15_ID.VALUE=15 -DRIVER.CAN.VAR.CAN_3_MESSAGE_1_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_31_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_23_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_15_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_5_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_41_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_41_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_33_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_33_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_25_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_25_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_17_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_17_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_PORT_TX_DIN.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_8_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_6_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_6_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_21_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_13_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_11_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_11_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_5_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_3_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_3_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_3_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_2_ID.VALUE=2 -DRIVER.CAN.VAR.CAN_3_MESSAGE_58_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_PORT_RX_PSL.VALUE=1 -DRIVER.CAN.VAR.CAN_4_AUTO_BUS_ON_TIME.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_62_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_54_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_46_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_38_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_8_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_8_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_5_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_AUTO_RETRANSMISSION.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_21_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_21_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_20_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_13_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_13_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_12_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_SAMPLE_POINT.VALUE=73.333 -DRIVER.CAN.VAR.CAN_1_PORT_TX_DIR.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_5_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_5_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_2_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_62_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_54_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_46_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_38_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_PIN_MODE.VALUE=1 -DRIVER.CAN.VAR.CAN_3_MESSAGE_1_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_RAM_PARITY_ENA.VALUE=0x00000005 -DRIVER.CAN.VAR.CAN_3_PHASE_SEG.VALUE=4 -DRIVER.CAN.VAR.CAN_1_MESSAGE_63_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_55_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_47_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_40_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_39_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_32_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_24_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_16_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_62_ID.VALUE=62 -DRIVER.CAN.VAR.CAN_4_MESSAGE_54_ID.VALUE=54 -DRIVER.CAN.VAR.CAN_4_MESSAGE_46_ID.VALUE=46 -DRIVER.CAN.VAR.CAN_4_MESSAGE_38_ID.VALUE=38 -DRIVER.CAN.VAR.CAN_3_MESSAGE_59_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_60_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_52_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_44_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_36_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_28_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_40_ID.VALUE=40 -DRIVER.CAN.VAR.CAN_1_MESSAGE_32_ID.VALUE=32 -DRIVER.CAN.VAR.CAN_1_MESSAGE_24_ID.VALUE=24 -DRIVER.CAN.VAR.CAN_1_MESSAGE_16_ID.VALUE=16 -DRIVER.CAN.VAR.CAN_2_MESSAGE_50_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_42_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_34_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_26_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_18_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_1_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_1_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_2_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_62_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_54_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_46_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_38_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_64_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_56_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_48_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_59_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_62_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_54_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_46_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_40_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_38_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_32_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_24_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_16_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_63_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_60_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_55_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_52_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_47_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_44_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_39_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_36_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_28_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_3_ID.VALUE=3 -DRIVER.CAN.VAR.CAN_3_PORT_RX_DOUT.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_8_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_41_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_33_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_30_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_25_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_22_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_17_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_14_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_9_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_30_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_22_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_14_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_6_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_20_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_12_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_2_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_PORT_RX_PULL.VALUE=2 -DRIVER.CAN.VAR.CAN_1_MESSAGE_62_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_62_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_54_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_54_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_46_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_46_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_38_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_38_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_31_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_23_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_15_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_7_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_BRPE.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_51_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_50_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_43_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_42_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_35_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_34_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_27_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_26_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_19_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_18_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_10_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_5_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MASK.VALUE=0x1FFFFFFF -DRIVER.CAN.VAR.CAN_4_MESSAGE_63_ID.VALUE=63 -DRIVER.CAN.VAR.CAN_4_MESSAGE_55_ID.VALUE=55 -DRIVER.CAN.VAR.CAN_4_MESSAGE_47_ID.VALUE=47 -DRIVER.CAN.VAR.CAN_4_MESSAGE_39_ID.VALUE=39 -DRIVER.CAN.VAR.CAN_4_MESSAGE_5_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_30_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_22_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_14_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_21_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_13_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_8_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_41_ID.VALUE=41 -DRIVER.CAN.VAR.CAN_1_MESSAGE_33_ID.VALUE=33 -DRIVER.CAN.VAR.CAN_1_MESSAGE_25_ID.VALUE=25 -DRIVER.CAN.VAR.CAN_1_MESSAGE_17_ID.VALUE=17 -DRIVER.CAN.VAR.CAN_1_MESSAGE_2_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_10_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_2_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_2_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_50_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_50_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_42_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_42_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_34_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_34_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_26_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_26_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_18_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_18_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_60_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_52_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_44_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_36_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_28_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_9_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_30_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_22_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_14_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_60_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_59_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_52_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_44_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_36_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_28_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_30_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_22_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_14_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_6_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_4_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_4_ID.VALUE=4 -DRIVER.CAN.VAR.CAN_1_MESSAGE_1_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_1_ID.VALUE=1 -DRIVER.CAN.VAR.CAN_1_MESSAGE_63_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_55_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_47_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_39_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_PORT_TX_FUN.VALUE=1 -DRIVER.CAN.VAR.CAN_4_MESSAGE_9_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_9_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_30_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_30_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_22_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_22_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_14_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_14_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_6_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_6_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_10_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_PORT_TX_PULDIS.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_61_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_53_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_45_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_37_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_31_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_29_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_23_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_15_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_2_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_7_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_64_ID.VALUE=64 -DRIVER.CAN.VAR.CAN_4_MESSAGE_56_ID.VALUE=56 -DRIVER.CAN.VAR.CAN_4_MESSAGE_48_ID.VALUE=48 -DRIVER.CAN.VAR.CAN_1_MESSAGE_50_ID.VALUE=50 -DRIVER.CAN.VAR.CAN_1_MESSAGE_42_ID.VALUE=42 -DRIVER.CAN.VAR.CAN_1_MESSAGE_34_ID.VALUE=34 -DRIVER.CAN.VAR.CAN_1_MESSAGE_26_ID.VALUE=26 -DRIVER.CAN.VAR.CAN_1_MESSAGE_18_ID.VALUE=18 -DRIVER.CAN.VAR.CAN_4_BRP_FREQ.VALUE=7.500 -DRIVER.CAN.VAR.CAN_2_MESSAGE_51_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_43_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_35_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_27_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_19_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_PORT_TX_PULL.VALUE=2 -DRIVER.CAN.VAR.CAN_4_MESSAGE_10_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_10_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_2_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_2_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_BRP.VALUE=9 -DRIVER.CAN.VAR.CAN_4_MESSAGE_31_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_23_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_15_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_7_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_PROP_SEG.VALUE=6 -DRIVER.CAN.VAR.CAN_2_MESSAGE_21_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_13_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_10_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_8_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_5_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_63_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_55_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_47_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_39_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_64_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_56_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_48_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_5_ID.VALUE=5 -DRIVER.CAN.VAR.CAN_3_MESSAGE_10_ID.VALUE=10 -DRIVER.CAN.VAR.CAN_2_MESSAGE_57_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_49_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_50_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_42_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_34_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_26_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_18_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_2_ID.VALUE=2 -DRIVER.CAN.VAR.CAN_1_AUTO_BUS_ON_TR.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_31_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_23_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_15_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_7_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_PORT_RX_DIN.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_63_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_63_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_55_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_55_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_47_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_47_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_39_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_39_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_11_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_64_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_56_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_48_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_3_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_51_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_43_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_35_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_27_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_19_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_58_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_PORT_TX_PDR.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_57_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_57_ID.VALUE=57 -DRIVER.CAN.VAR.CAN_4_MESSAGE_49_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_49_ID.VALUE=49 -DRIVER.CAN.VAR.CAN_2_MESSAGE_30_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_22_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_14_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_9_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_51_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_51_ID.VALUE=51 -DRIVER.CAN.VAR.CAN_1_MESSAGE_43_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_43_ID.VALUE=43 -DRIVER.CAN.VAR.CAN_1_MESSAGE_35_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_35_ID.VALUE=35 -DRIVER.CAN.VAR.CAN_1_MESSAGE_27_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_27_ID.VALUE=27 -DRIVER.CAN.VAR.CAN_1_MESSAGE_19_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_19_ID.VALUE=19 -DRIVER.CAN.VAR.CAN_4_MESSAGE_11_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_3_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_AUTO_BUS_ON_TIME.VALUE=0 -DRIVER.CAN.VAR.CAN_3_PORT_RX_DIR.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_51_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_51_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_43_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_43_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_35_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_35_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_27_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_27_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_19_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_19_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_PORT_TX_FUN.VALUE=1 -DRIVER.CAN.VAR.CAN_1_MESSAGE_58_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_1_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_31_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_23_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_15_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_60_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_52_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_44_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_36_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_28_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_1_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_7_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_6_ID.VALUE=6 -DRIVER.CAN.VAR.CAN_4_MESSAGE_5_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_51_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_43_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_35_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_27_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_19_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_11_ID.VALUE=11 -DRIVER.CAN.VAR.CAN_3_MESSAGE_10_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_7_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_3_ID.VALUE=3 -DRIVER.CAN.VAR.CAN_1_MESSAGE_2_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_64_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_56_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_48_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_31_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_31_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_23_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_23_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_15_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_15_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_7_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_7_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_11_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_9_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_41_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_33_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_30_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_25_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_22_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_17_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_14_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_3_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_64_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_56_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_48_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_9_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_6_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_58_ID.VALUE=58 -DRIVER.CAN.VAR.CAN_2_MESSAGE_21_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_13_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_4_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_60_ID.VALUE=60 -DRIVER.CAN.VAR.CAN_1_MESSAGE_52_ID.VALUE=52 -DRIVER.CAN.VAR.CAN_1_MESSAGE_44_ID.VALUE=44 -DRIVER.CAN.VAR.CAN_1_MESSAGE_36_ID.VALUE=36 -DRIVER.CAN.VAR.CAN_1_MESSAGE_28_ID.VALUE=28 -DRIVER.CAN.VAR.CAN_2_MESSAGE_60_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_52_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_44_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_36_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_28_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_11_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_11_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_3_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_3_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_58_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_BRP.VALUE=9 -DRIVER.CAN.VAR.CAN_3_MESSAGE_57_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_49_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_PORT_RX_PULDIS.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_64_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_62_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_56_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_54_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_48_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_46_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_38_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_57_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_49_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_21_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_13_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_7_ID.VALUE=7 -DRIVER.CAN.VAR.CAN_3_MESSAGE_20_ID.VALUE=20 -DRIVER.CAN.VAR.CAN_3_MESSAGE_12_ID.VALUE=12 -DRIVER.CAN.VAR.CAN_3_MESSAGE_1_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_PORT_TX_PDR.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_51_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_43_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_35_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_27_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_19_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_4_ID.VALUE=4 -DRIVER.CAN.VAR.CAN_3_MESSAGE_40_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_32_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_24_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_16_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_8_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_NOMINAL_AUTO_BUS_ON_TIME.VALUE=0.000 -DRIVER.CAN.VAR.CAN_2_SHIFT.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_64_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_64_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_63_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_56_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_56_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_55_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_48_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_48_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_47_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_39_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_57_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_49_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_5_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_BRPE.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_10_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MASK.VALUE=0x1FFFFFFF -DRIVER.CAN.VAR.CAN_2_MESSAGE_60_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_60_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_52_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_52_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_44_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_44_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_36_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_36_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_28_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_28_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_51_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_43_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_35_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_27_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_19_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_2_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_59_ID.VALUE=59 -DRIVER.CAN.VAR.CAN_2_PORT_TX_DOUT.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_31_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_23_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_15_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_61_ID.VALUE=61 -DRIVER.CAN.VAR.CAN_1_MESSAGE_53_ID.VALUE=53 -DRIVER.CAN.VAR.CAN_1_MESSAGE_45_ID.VALUE=45 -DRIVER.CAN.VAR.CAN_1_MESSAGE_37_ID.VALUE=37 -DRIVER.CAN.VAR.CAN_1_MESSAGE_29_ID.VALUE=29 -DRIVER.CAN.VAR.CAN_4_MESSAGE_20_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_12_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_4_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_58_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_60_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_60_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_52_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_52_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_44_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_44_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_36_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_36_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_28_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_28_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_PORT_TX_PULL.VALUE=2 -DRIVER.CAN.VAR.CAN_4_MESSAGE_61_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_61_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_53_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_53_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_45_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_45_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_37_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_37_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_29_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_29_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_40_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_32_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_24_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_16_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_21_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_13_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_8_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_31_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_31_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_23_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_23_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_15_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_15_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_8_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_8_ID.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_6_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_21_ID.VALUE=21 -DRIVER.CAN.VAR.CAN_3_MESSAGE_13_ID.VALUE=13 -DRIVER.CAN.VAR.CAN_3_MESSAGE_11_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_64_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_56_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_48_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_5_ID.VALUE=5 -DRIVER.CAN.VAR.CAN_1_MESSAGE_3_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_57_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_49_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_40_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_40_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_32_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_32_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_24_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_24_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_16_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_16_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_63_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_55_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_47_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_39_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_8_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_8_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_20_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_12_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_2_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_40_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_32_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_24_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_16_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_4_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_58_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_8_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_PORT_TX_PSL.VALUE=1 -DRIVER.CAN.VAR.CAN_3_MESSAGE_64_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_56_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_48_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_62_ID.VALUE=62 -DRIVER.CAN.VAR.CAN_1_MESSAGE_54_ID.VALUE=54 -DRIVER.CAN.VAR.CAN_1_MESSAGE_46_ID.VALUE=46 -DRIVER.CAN.VAR.CAN_1_MESSAGE_38_ID.VALUE=38 -DRIVER.CAN.VAR.CAN_2_MESSAGE_61_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_53_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_45_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_37_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_29_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_58_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_20_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_20_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_12_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_12_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_4_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_4_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_BRP.VALUE=9 -DRIVER.CAN.VAR.CAN_1_MESSAGE_60_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_52_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_44_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_36_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_28_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_30_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_22_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_14_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_64_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_56_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_48_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_6_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_IDENTIFIER_MODE.VALUE=0x40000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_11_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_6_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_57_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_49_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_PHASE_SEG.VALUE=4 -DRIVER.CAN.VAR.CAN_4_MESSAGE_58_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_9_ID.VALUE=9 -DRIVER.CAN.VAR.CAN_3_MESSAGE_30_ID.VALUE=30 -DRIVER.CAN.VAR.CAN_3_MESSAGE_22_ID.VALUE=22 -DRIVER.CAN.VAR.CAN_3_MESSAGE_14_ID.VALUE=14 -DRIVER.CAN.VAR.CAN_2_MESSAGE_50_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_42_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_34_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_26_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_18_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_9_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_60_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_52_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_44_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_36_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_28_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_6_ID.VALUE=6 -DRIVER.CAN.VAR.CAN_4_BRPE_FREQ.VALUE=7.500 -DRIVER.CAN.VAR.CAN_3_MESSAGE_41_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_33_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_25_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_17_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_AUTO_BUS_ON_TIME.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_9_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_PORT_RX_FUN.VALUE=1 -DRIVER.CAN.VAR.CAN_3_MESSAGE_63_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_55_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_47_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_39_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_57_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_57_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_49_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_49_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_50_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_42_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_34_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_26_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_20_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_18_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_12_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_4_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_61_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_53_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_51_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_45_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_43_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_37_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_35_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_29_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_27_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_19_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_20_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_12_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_50_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_42_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_34_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_26_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_18_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_6_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_40_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_32_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_24_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_16_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_63_ID.VALUE=63 -DRIVER.CAN.VAR.CAN_1_MESSAGE_55_ID.VALUE=55 -DRIVER.CAN.VAR.CAN_1_MESSAGE_47_ID.VALUE=47 -DRIVER.CAN.VAR.CAN_1_MESSAGE_39_ID.VALUE=39 -DRIVER.CAN.VAR.CAN_1_MESSAGE_20_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_12_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_21_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_13_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_5_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_61_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_61_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_60_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_53_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_53_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_52_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_45_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_45_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_44_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_37_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_37_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_36_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_29_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_29_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_28_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_2_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_41_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_33_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_25_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_17_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_1_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_9_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_7_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_3_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_31_ID.VALUE=31 -DRIVER.CAN.VAR.CAN_3_MESSAGE_23_ID.VALUE=23 -DRIVER.CAN.VAR.CAN_3_MESSAGE_20_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_20_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_15_ID.VALUE=15 -DRIVER.CAN.VAR.CAN_3_MESSAGE_12_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_12_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_PORT_TX_PSL.VALUE=1 -DRIVER.CAN.VAR.CAN_1_MESSAGE_7_ID.VALUE=7 -DRIVER.CAN.VAR.CAN_1_MESSAGE_4_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_58_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_63_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_55_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_47_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_39_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_41_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_41_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_33_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_33_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_25_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_25_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_17_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_17_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_41_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_33_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_25_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_17_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_9_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_9_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_21_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_13_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_5_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_63_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_55_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_47_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_39_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_20_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_12_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_7_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_57_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_49_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_PORT_RX_PDR.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_64_ID.VALUE=64 -DRIVER.CAN.VAR.CAN_1_MESSAGE_56_ID.VALUE=56 -DRIVER.CAN.VAR.CAN_1_MESSAGE_48_ID.VALUE=48 -DRIVER.CAN.VAR.CAN_2_MESSAGE_62_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_54_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_46_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_38_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_21_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_21_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_13_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_13_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_BRP.VALUE=9 -DRIVER.CAN.VAR.CAN_3_MESSAGE_60_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_52_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_44_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_36_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_28_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_5_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_5_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_RAM_PARITY_ENA.VALUE=0x00000005 -DRIVER.CAN.VAR.CAN_3_MESSAGE_63_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_58_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_55_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_47_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_41_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_39_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_33_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_25_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_17_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_58_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_9_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_59_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_40_ID.VALUE=40 -DRIVER.CAN.VAR.CAN_3_MESSAGE_32_ID.VALUE=32 -DRIVER.CAN.VAR.CAN_3_MESSAGE_24_ID.VALUE=24 -DRIVER.CAN.VAR.CAN_3_MESSAGE_16_ID.VALUE=16 -DRIVER.CAN.VAR.CAN_1_MESSAGE_61_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_53_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_45_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_37_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_29_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_8_ID.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_50_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_42_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_34_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_26_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_18_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_NOMINAL_AUTO_BUS_ON_TIME.VALUE=0.000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_41_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_33_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_25_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_17_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_58_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_58_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_AUTO_RETRANSMISSION.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_11_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MASK.VALUE=0x1FFFFFFF -DRIVER.CAN.VAR.CAN_3_MESSAGE_3_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_62_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_61_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_54_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_53_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_46_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_45_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_38_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_37_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_29_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_63_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_55_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_47_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_41_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_39_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_33_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_25_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_17_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_57_ID.VALUE=57 -DRIVER.CAN.VAR.CAN_1_MESSAGE_49_ID.VALUE=49 -DRIVER.CAN.VAR.CAN_4_MESSAGE_30_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_22_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_14_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_6_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_60_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_52_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_44_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_36_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_28_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_62_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_62_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_54_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_54_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_46_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_46_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_38_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_38_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_AUTO_BUS_ON.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_30_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_22_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_14_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_62_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_54_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_46_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_38_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_50_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_42_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_40_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_34_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_32_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_26_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_24_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_18_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_16_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_62_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_54_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_46_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_40_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_38_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_32_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_24_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_16_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_8_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_63_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_55_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_47_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_39_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_8_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_41_ID.VALUE=41 -DRIVER.CAN.VAR.CAN_3_MESSAGE_33_ID.VALUE=33 -DRIVER.CAN.VAR.CAN_3_MESSAGE_25_ID.VALUE=25 -DRIVER.CAN.VAR.CAN_3_MESSAGE_21_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_17_ID.VALUE=17 -DRIVER.CAN.VAR.CAN_3_MESSAGE_13_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_41_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_33_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_25_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_17_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_9_ID.VALUE=9 -DRIVER.CAN.VAR.CAN_1_MESSAGE_5_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_59_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_SJW.VALUE=4 -DRIVER.CAN.VAR.CAN_3_MESSAGE_50_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_50_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_42_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_42_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_41_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_34_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_34_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_33_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_26_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_26_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_25_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_18_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_18_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_17_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_7_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_59_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_30_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_22_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_14_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_41_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_33_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_25_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_17_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_6_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_40_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_32_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_24_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_16_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_BAUDRATE.VALUE=500 -DRIVER.CAN.VAR.CAN_1_MESSAGE_61_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_53_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_45_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_37_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_29_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_9_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_IDENTIFIER_MODE.VALUE=0x40000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_8_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_41_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_33_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_25_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_17_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_1_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_58_ID.VALUE=58 -DRIVER.CAN.VAR.CAN_1_MESSAGE_5_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_RAMBASE.VALUE=0xFF180000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_63_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_55_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_47_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_39_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_AUTO_BUS_ON_TIME.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_30_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_30_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_22_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_22_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_14_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_14_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_6_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_6_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_30_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_22_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_14_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_7_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_PORT_TX_PULDIS.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_5_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_4_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_10_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_20_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_12_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_7_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_59_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_2_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_1_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_50_ID.VALUE=50 -DRIVER.CAN.VAR.CAN_3_MESSAGE_42_ID.VALUE=42 -DRIVER.CAN.VAR.CAN_3_MESSAGE_34_ID.VALUE=34 -DRIVER.CAN.VAR.CAN_3_MESSAGE_26_ID.VALUE=26 -DRIVER.CAN.VAR.CAN_3_MESSAGE_18_ID.VALUE=18 -DRIVER.CAN.VAR.CAN_2_MESSAGE_11_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_2_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_62_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_54_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_46_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_38_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_51_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_43_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_35_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_27_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_19_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_41_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_33_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_25_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_17_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_PORT_TX_DIN.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_7_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_59_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_59_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_11_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_60_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_52_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_44_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_36_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_28_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_21_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_13_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_59_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_5_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_PIN_MODE.VALUE=1 -DRIVER.CAN.VAR.CAN_2_MESSAGE_63_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_55_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_47_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_39_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_30_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_22_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_14_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_11_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_PORT_RX_PSL.VALUE=1 -DRIVER.CAN.VAR.CAN_2_MESSAGE_50_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_42_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_34_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_26_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_18_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_AUTO_BUS_ON_TR.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_59_ID.VALUE=59 -DRIVER.CAN.VAR.CAN_4_MESSAGE_31_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_23_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_15_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_PROPAGATION_DELAY.VALUE=700 -DRIVER.CAN.VAR.CAN_3_MESSAGE_7_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_7_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_SAMPLE_POINT.VALUE=73.333 -DRIVER.CAN.VAR.CAN_3_PORT_TX_DIR.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_30_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_22_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_14_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_63_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_63_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_55_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_55_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_47_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_47_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_39_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_39_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_4_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_61_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_53_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_45_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_37_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_29_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_3_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_ENABLE.VALUE=1 -DRIVER.CAN.VAR.CAN_3_MESSAGE_51_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_43_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_35_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_27_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_19_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_57_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_49_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_31_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_23_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_15_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_9_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_51_ID.VALUE=51 -DRIVER.CAN.VAR.CAN_3_MESSAGE_43_ID.VALUE=43 -DRIVER.CAN.VAR.CAN_3_MESSAGE_35_ID.VALUE=35 -DRIVER.CAN.VAR.CAN_3_MESSAGE_30_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_27_ID.VALUE=27 -DRIVER.CAN.VAR.CAN_3_MESSAGE_22_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_19_ID.VALUE=19 -DRIVER.CAN.VAR.CAN_3_MESSAGE_14_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_6_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_SJW.VALUE=4 -DRIVER.CAN.VAR.CAN_3_MESSAGE_51_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_51_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_43_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_43_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_35_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_35_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_27_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_27_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_19_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_19_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_11_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_4_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_31_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_23_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_21_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_15_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_13_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_7_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_5_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_4_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_58_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_PORT_RX_DOUT.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_10_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_2_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_62_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_54_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_46_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_38_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_64_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_56_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_48_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_31_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_31_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_30_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_23_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_23_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_22_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_15_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_15_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_14_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_PORT_RX_PULL.VALUE=1 -DRIVER.CAN.VAR.CAN_3_MESSAGE_7_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_7_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_4_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_59_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_58_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_50_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_42_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_34_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_26_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_18_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_62_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_60_ID.VALUE=60 -DRIVER.CAN.VAR.CAN_3_MESSAGE_54_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_52_ID.VALUE=52 -DRIVER.CAN.VAR.CAN_3_MESSAGE_46_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_44_ID.VALUE=44 -DRIVER.CAN.VAR.CAN_3_MESSAGE_38_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_36_ID.VALUE=36 -DRIVER.CAN.VAR.CAN_3_MESSAGE_28_ID.VALUE=28 -DRIVER.CAN.VAR.CAN_1_MESSAGE_63_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_55_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_47_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_39_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_60_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_52_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_44_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_36_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_28_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_NOMINAL_AUTO_BUS_ON_TIME.VALUE=0.000 -DRIVER.CAN.VAR.CAN_1_SYNC.VALUE=1 -DRIVER.CAN.VAR.CAN_4_MESSAGE_4_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_11_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_SHIFT.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_1_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_PORT_RX_PULDIS.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_60_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_52_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_44_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_36_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_28_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_64_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_62_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_56_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_54_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_48_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_46_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_38_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_51_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_43_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_40_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_35_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_32_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_27_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_24_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_19_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_16_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_7_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_1_ID.VALUE=1 -DRIVER.CAN.VAR.CAN_4_MESSAGE_40_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_32_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_24_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_16_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_8_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_BRP_FREQ.VALUE=7.500 -DRIVER.CAN.VAR.CAN_2_BRPE_FREQ.VALUE=7.500 -DRIVER.CAN.VAR.CAN_1_MESSAGE_10_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_64_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_64_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_56_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_56_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_48_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_48_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_1_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_63_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_55_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_47_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_39_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_30_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_22_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_14_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_60_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_52_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_44_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_36_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_28_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_6_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_11_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_6_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_PROP_SEG.VALUE=6 -DRIVER.CAN.VAR.CAN_1_MESSAGE_41_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_33_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_25_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_17_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_40_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_32_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_24_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_16_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_61_ID.VALUE=61 -DRIVER.CAN.VAR.CAN_3_MESSAGE_53_ID.VALUE=53 -DRIVER.CAN.VAR.CAN_3_MESSAGE_45_ID.VALUE=45 -DRIVER.CAN.VAR.CAN_3_MESSAGE_37_ID.VALUE=37 -DRIVER.CAN.VAR.CAN_3_MESSAGE_31_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_29_ID.VALUE=29 -DRIVER.CAN.VAR.CAN_3_MESSAGE_23_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_15_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_4_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_10_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_7_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_SJW.VALUE=4 -DRIVER.CAN.VAR.CAN_2_MESSAGE_1_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_11_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_60_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_60_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_52_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_52_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_44_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_44_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_36_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_36_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_28_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_28_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_1_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_40_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_32_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_24_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_16_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_62_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_54_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_50_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_46_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_42_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_38_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_34_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_26_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_18_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_8_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_57_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_49_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_10_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_11_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_1_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_10_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_3_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_2_ID.VALUE=2 -DRIVER.CAN.VAR.CAN_2_MESSAGE_57_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_49_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_40_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_40_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_32_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_32_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_24_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_24_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_16_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_16_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_1_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_8_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_8_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_10_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_10_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_SAMPLE_POINT.VALUE=73.333 -DRIVER.CAN.VAR.CAN_2_MESSAGE_51_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_43_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_35_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_27_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_21_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_19_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_13_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_8_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_1_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_59_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_62_ID.VALUE=62 -DRIVER.CAN.VAR.CAN_3_MESSAGE_54_ID.VALUE=54 -DRIVER.CAN.VAR.CAN_3_MESSAGE_46_ID.VALUE=46 -DRIVER.CAN.VAR.CAN_3_MESSAGE_38_ID.VALUE=38 -DRIVER.CAN.VAR.CAN_1_MESSAGE_64_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_59_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_56_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_48_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_61_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_53_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_45_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_37_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_29_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_PORT_TX_FUN.VALUE=1 -DRIVER.CAN.VAR.CAN_2_MESSAGE_1_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_1_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_30_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_22_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_14_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_8_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_31_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_23_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_21_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_15_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_13_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_6_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_57_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_49_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_7_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_5_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_59_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_60_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_52_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_44_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_36_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_28_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_3_ID.VALUE=3 -DRIVER.CAN.VAR.CAN_1_PORT_RX_DOUT.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_41_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_33_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_25_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_17_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_9_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_11_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_57_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_57_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_49_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_49_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_58_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_4_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_PHASE_SEG.VALUE=4 -DRIVER.CAN.VAR.CAN_3_MESSAGE_61_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_53_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_45_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_37_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_29_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_60_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_52_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_44_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_36_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_28_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_1_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_63_ID.VALUE=63 -DRIVER.CAN.VAR.CAN_3_MESSAGE_55_ID.VALUE=55 -DRIVER.CAN.VAR.CAN_3_MESSAGE_47_ID.VALUE=47 -DRIVER.CAN.VAR.CAN_3_MESSAGE_40_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_39_ID.VALUE=39 -DRIVER.CAN.VAR.CAN_3_MESSAGE_32_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_24_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_16_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_61_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_53_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_45_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_37_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_29_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_8_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_SJW.VALUE=4 -DRIVER.CAN.VAR.CAN_3_RAMBASE.VALUE=0xFF1A0000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_2_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_61_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_61_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_53_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_53_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_45_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_45_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_37_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_37_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_29_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_29_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_PORT_RX_DIN.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_64_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_56_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_48_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_41_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_33_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_25_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_17_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_3_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_9_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_59_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_50_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_42_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_34_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_26_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_18_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_11_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_61_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_53_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_45_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_37_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_29_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_20_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_12_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_PORT_TX_PDR.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_9_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_4_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_4_ID.VALUE=4 -DRIVER.CAN.VAR.CAN_1_MESSAGE_31_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_23_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_15_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_58_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_41_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_41_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_33_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_33_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_25_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_25_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_17_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_17_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_9_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_9_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_PORT_RX_DIR.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_57_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_49_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_11_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_11_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_51_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_43_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_35_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_27_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_19_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_20_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_12_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_7_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_2_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_21_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_13_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_6_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_PORT_TX_DOUT.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_64_ID.VALUE=64 -DRIVER.CAN.VAR.CAN_3_MESSAGE_56_ID.VALUE=56 -DRIVER.CAN.VAR.CAN_3_MESSAGE_48_ID.VALUE=48 -DRIVER.CAN.VAR.CAN_3_MESSAGE_31_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_23_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_15_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_57_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_49_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_3_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_NOMINAL_AUTO_BUS_ON_TIME.VALUE=0.000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_62_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_54_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_46_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_38_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_SYNC.VALUE=1 -DRIVER.CAN.VAR.CAN_2_PORT_TX_PULL.VALUE=2 -DRIVER.CAN.VAR.CAN_2_MESSAGE_2_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_2_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_1_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_64_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_63_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_58_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_56_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_55_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_48_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_47_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_39_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_61_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_53_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_45_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_37_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_29_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_10_ID.VALUE=10 -DRIVER.CAN.VAR.CAN_2_MESSAGE_5_ID.VALUE=5 -DRIVER.CAN.VAR.CAN_4_MESSAGE_50_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_42_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_34_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_26_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_18_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_20_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_12_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_58_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_58_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_57_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_49_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_64_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_56_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_48_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_20_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_12_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_63_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_62_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_55_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_54_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_47_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_46_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_39_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_38_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_4_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_50_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_42_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_34_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_26_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_18_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_57_ID.VALUE=57 -DRIVER.CAN.VAR.CAN_3_MESSAGE_49_ID.VALUE=49 -DRIVER.CAN.VAR.CAN_3_MESSAGE_41_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_33_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_25_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_17_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_9_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_3_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_62_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_62_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_54_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_54_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_46_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_46_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_38_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_38_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_62_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_54_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_46_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_38_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_50_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_42_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_41_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_34_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_33_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_26_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_25_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_18_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_17_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_NOMINAL_BIT_RATE.VALUE=500.000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_51_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_43_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_35_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_27_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_19_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_9_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_41_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_33_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_25_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_17_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_20_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_12_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_11_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_21_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_13_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_5_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_58_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_11_ID.VALUE=11 -DRIVER.CAN.VAR.CAN_2_MESSAGE_6_ID.VALUE=6 -DRIVER.CAN.VAR.CAN_3_PROPAGATION_DELAY.VALUE=700 -DRIVER.CAN.VAR.CAN_2_MESSAGE_59_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_50_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_50_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_42_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_42_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_34_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_34_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_26_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_26_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_18_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_18_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_57_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_49_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_AUTO_RETRANSMISSION.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_20_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_20_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_12_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_12_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_30_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_22_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_14_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_9_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_3_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_58_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_58_ID.VALUE=58 -DRIVER.CAN.VAR.CAN_1_MESSAGE_60_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_58_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_52_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_44_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_36_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_28_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_63_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_55_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_47_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_39_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_62_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_54_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_46_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_38_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_3_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_3_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_31_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_23_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_15_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_7_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_62_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_59_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_54_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_46_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_38_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_10_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_5_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_PORT_TX_PSL.VALUE=1 -DRIVER.CAN.VAR.CAN_3_MESSAGE_60_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_52_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_44_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_36_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_28_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_62_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_54_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_46_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_38_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_20_ID.VALUE=20 -DRIVER.CAN.VAR.CAN_2_MESSAGE_12_ID.VALUE=12 -DRIVER.CAN.VAR.CAN_2_MESSAGE_7_ID.VALUE=7 -DRIVER.CAN.VAR.CAN_1_MESSAGE_8_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_51_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_43_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_35_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_27_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_19_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_21_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_13_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_57_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_49_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_59_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_59_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_51_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_43_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_35_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_27_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_19_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_5_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_63_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_61_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_55_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_53_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_47_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_45_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_40_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_39_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_37_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_32_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_29_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_24_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_16_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_10_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_8_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_2_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_59_ID.VALUE=59 -DRIVER.CAN.VAR.CAN_3_MESSAGE_50_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_42_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_34_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_26_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_18_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_AUTO_BUS_ON_TR.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_30_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_22_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_14_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_5_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_4_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_63_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_63_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_62_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_55_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_55_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_54_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_47_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_47_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_46_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_39_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_39_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_38_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_PORT_RX_FUN.VALUE=1 -DRIVER.CAN.VAR.CAN_4_MESSAGE_51_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_43_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_35_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_27_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_19_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_10_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_2_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_58_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_21_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_13_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_30_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_30_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_22_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_22_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_14_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_14_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_6_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_2_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_21_ID.VALUE=21 -DRIVER.CAN.VAR.CAN_2_MESSAGE_13_ID.VALUE=13 -DRIVER.CAN.VAR.CAN_2_MESSAGE_8_ID.VALUE=8 -DRIVER.ADC.VAR.ADC2_GROUP1_DISCHARGE_PRESCALER.VALUE=0 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN21_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN13_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_ACTUAL_DISCHARGE_TIME.VALUE=0.00 -DRIVER.ADC.VAR.ADC2_GROUP1_RESOLUTION.VALUE=12_BIT -DRIVER.ADC.VAR.ADC2_GROUP0_PIN3_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_PARITY_ENABLE.VALUE=0x00000005 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN25_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN17_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_ACTUAL_DISCHARGE_TIME.VALUE=0.00 -DRIVER.ADC.VAR.ADC1_GROUP2_RESOLUTION.VALUE=12_BIT -DRIVER.ADC.VAR.ADC2_GROUP2_PIN7_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN10_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_TRIGGER_EDGE_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_RAM_PARITY_ENA.VALUE=0 -DRIVER.ADC.VAR.ADC2_GROUP1_EXTENDED_SAMPLE_TIME.VALUE=300.00 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN0_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_RAM_PARITY_ENA.VALUE=0 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN3_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_CHANNEL_TOTAL_TIME.VALUE=0.000000 -DRIVER.ADC.VAR.ADC1_GROUP1_FIFO_SIZE.VALUE=16 -DRIVER.ADC.VAR.ADC1_GROUP2_DISCHARGE_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_SAMPLE_PRESCALER.VALUE=1 -DRIVER.ADC.VAR.ADC1_GROUP1_LENGTH.VALUE=16 -DRIVER.ADC.VAR.ADC2_GROUP1_ID_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN18_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_CONVERSION_TIME.VALUE=1.300 -DRIVER.ADC.VAR.ADC2_PORT_BIT0_DIR.VALUE=0 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN4_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN11_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN7_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_ALT_TRIG.VALUE=0 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN23_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN15_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN29_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN0_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_CONVERSION_TIME.VALUE=1.300 -DRIVER.ADC.VAR.ADC2_GROUP2_LENGTH.VALUE=32 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN19_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_DISCHARGE_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN4_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN30_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN22_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN14_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_ACTUAL_SAMPLE_TIME.VALUE=320.01 -DRIVER.ADC.VAR.ADC2_GROUP2_SAMPLE_PRESCALER.VALUE=1 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN20_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN12_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN26_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN18_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN8_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN11_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_BND.VALUE=2 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN1_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN31_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN23_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN15_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_DISCHARGE_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_SAMPLE_PRESCALER.VALUE=1 -DRIVER.ADC.VAR.ADC2_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN5_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN8_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_ID_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_EXTENDED_SAMPLE_TIME.VALUE=300.00 -DRIVER.ADC.VAR.ADC1_GROUP0_CONVERSION_TIME.VALUE=1.300 -DRIVER.ADC.VAR.ADC2_GROUP0_RESOLUTION.VALUE=12_BIT -DRIVER.ADC.VAR.ADC1_GROUP1_PIN1_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_RESOLUTION.VALUE=12_BIT -DRIVER.ADC.VAR.ADC2_GROUP1_TRIGGER_EDGE_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_CONVERSION_TIME.VALUE=1.300 -DRIVER.ADC.VAR.ADC2_BND.VALUE=2 -DRIVER.ADC.VAR.ADC2_GROUP1_DISCHARGE_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_PORT_BIT0_PDR.VALUE=0 -DRIVER.ADC.VAR.ADC2_ACTUAL_CYCLE_TIME.VALUE=106.67 -DRIVER.ADC.VAR.ADC2_GROUP1_SAMPLE_PRESCALER.VALUE=1 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN9_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN24_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN16_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_SAMPLE_TIME.VALUE=300.00 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN2_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_TRIGGER_MODE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN5_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_DISCHARGE_PRESCALER.VALUE=0 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN21_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN13_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN9_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN27_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN19_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_DISCHARGE_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_RAM_PARITY_ENA.VALUE=0x00000005 -DRIVER.ADC.VAR.ADC2_GROUP1_SCAN_TIME.VALUE=0.000 -DRIVER.ADC.VAR.ADC2_GROUP0_CHANNEL_TOTAL_TIME.VALUE=0.000000 -DRIVER.ADC.VAR.ADC1_GROUP2_SAMPLE_TIME.VALUE=300.00 -DRIVER.ADC.VAR.ADC2_GROUP0_LENGTH.VALUE=16 -DRIVER.ADC.VAR.ADC1_GROUP0_SAMPLE_PRESCALER.VALUE=1 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN17_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN2_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN20_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN12_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN10_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN24_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN16_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_ACTUAL_SAMPLE_TIME.VALUE=320.01 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN6_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN28_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_TRIGGER_MODE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_PORT_BIT0_PSL.VALUE=1 -DRIVER.ADC.VAR.ADC1_GROUP2_CHANNEL_TOTAL_TIME.VALUE=0.000000 -DRIVER.ADC.VAR.ADC1_GROUP0_DISCHARGE_TIME.VALUE=0.00 -DRIVER.ADC.VAR.ADC2_LENGTH.VALUE=64 -DRIVER.ADC.VAR.ADC2_GROUP0_DISCHARGE_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN21_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN13_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_PINS.VALUE=0 -DRIVER.ADC.VAR.ADC2_GROUP0_DISCHARGE_TIME.VALUE=0.00 -DRIVER.ADC.VAR.ADC2_GROUP0_SAMPLE_PRESCALER.VALUE=1 -DRIVER.ADC.VAR.ADC1_GROUP0_DISCHARGE_PRESCALER.VALUE=0 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN3_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN6_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_RAMBASE.VALUE=0xFF3A0000 -DRIVER.ADC.VAR.ADC2_GROUP0_BND.VALUE=8 -DRIVER.ADC.VAR.ADC1_PORT_BIT0_DOUT.VALUE=0 -DRIVER.ADC.VAR.ADC1_GROUP1_SCAN_TIME.VALUE=0.000 -DRIVER.ADC.VAR.ADC1_GROUP0_RESOLUTION.VALUE=12_BIT -DRIVER.ADC.VAR.ADC2_GROUP2_FIFO_SIZE.VALUE=16 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN7_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN22_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN14_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_HW_TRIGGER_SOURCE.VALUE=EVENT -DRIVER.ADC.VAR.ADC2_GROUP1_BND.VALUE=8 -DRIVER.ADC.VAR.ADC2_GROUP0_HW_TRIGGER_SOURCE_ALT.VALUE=EVENT -DRIVER.ADC.VAR.ADC2_GROUP1_PIN18_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN0_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN3_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_ALT_TRIG_COMP.VALUE=1 -DRIVER.ADC.VAR.ADC2_GROUP1_HW_TRIGGER_SOURCE_ALT.VALUE=EVENT -DRIVER.ADC.VAR.ADC2_GROUP1_PIN11_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN7_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN25_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN17_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_PARITY_ENABLE.VALUE=0x00000005 -DRIVER.ADC.VAR.ADC1_ACTUAL_CYCLE_TIME.VALUE=106.67 -DRIVER.ADC.VAR.ADC2_GROUP2_HW_TRIGGER_SOURCE_ALT.VALUE=EVENT -DRIVER.ADC.VAR.ADC2_GROUP2_PIN23_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN15_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN0_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_CONTINUOUS_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN29_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN10_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_PINS.VALUE=0 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN30_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN22_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN14_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN4_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN26_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN18_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN8_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_TRIGGER_EDGE_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN11_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN1_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_FIFO_SIZE.VALUE=16 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN4_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_RAMBASE.VALUE=0xFF3E0000 -DRIVER.ADC.VAR.ADC1_BASE.VALUE=0xFFF7C000 -DRIVER.ADC.VAR.ADC1_PORT_BIT0_DIR.VALUE=0 -DRIVER.ADC.VAR.ADC2_RAM_PARITY_ENA.VALUE=0x00000005 -DRIVER.ADC.VAR.ADC2_GROUP2_HW_TRIGGER_SOURCE.VALUE=EVENT -DRIVER.ADC.VAR.ADC2_GROUP2_ID_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_ACTUAL_SAMPLE_TIME.VALUE=320.01 -DRIVER.ADC.VAR.ADC1_GROUP2_LENGTH.VALUE=32 -DRIVER.ADC.VAR.ADC1_GROUP0_BND.VALUE=8 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN19_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_CHANNEL_TOTAL_TIME.VALUE=0.000000 -DRIVER.ADC.VAR.ADC2_GROUP2_CONTINUOUS_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN5_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN20_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN12_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN8_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_TRIGGER_EDGE_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_PINS.VALUE=0 -DRIVER.ADC.VAR.ADC2_GROUP0_EXTENDED_SAMPLE_TIME.VALUE=300.00 -DRIVER.ADC.VAR.ADC1_GROUP1_DISCHARGE_TIME.VALUE=0.00 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN24_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN16_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN1_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_EXTENDED_SAMPLE_TIME.VALUE=300.00 -DRIVER.ADC.VAR.ADC2_GROUP1_DISCHARGE_TIME.VALUE=0.00 -DRIVER.ADC.VAR.ADC2_GROUP2_TRIGGER_MODE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_FIFO_SIZE.VALUE=16 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN5_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN31_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN23_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN15_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_BND.VALUE=8 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN21_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN13_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN27_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN19_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_PORT_BIT0_DOUT.VALUE=0 -DRIVER.ADC.VAR.ADC2_CYCLE_TIME.VALUE=100.00 -DRIVER.ADC.VAR.ADC1_GROUP1_HW_TRIGGER_SOURCE.VALUE=EVENT -DRIVER.ADC.VAR.ADC1_GROUP1_DISCHARGE_PRESCALER.VALUE=0 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN9_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_PRESCALE.VALUE=7 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN20_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN12_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_RAM_PARITY_ENA.VALUE=0 -DRIVER.ADC.VAR.ADC2_GROUP0_SAMPLE_TIME.VALUE=300.00 -DRIVER.ADC.VAR.ADC2_BASE.VALUE=0xFFF7C200 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN2_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_RAM_PARITY_ENA.VALUE=0 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN24_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN16_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_ID_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN6_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN9_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_CONTINUOUS_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_PORT_BIT0_PDR.VALUE=0 -DRIVER.ADC.VAR.ADC1_GROUP1_SAMPLE_TIME.VALUE=300.00 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN2_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_CONVERSION_TIME.VALUE=1.300 -DRIVER.ADC.VAR.ADC1_GROUP0_FIFO_SIZE.VALUE=16 -DRIVER.ADC.VAR.ADC1_PORT_BIT0_PULL.VALUE=2 -DRIVER.ADC.VAR.ADC1_GROUP0_LENGTH.VALUE=16 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN17_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_CONVERSION_TIME.VALUE=1.300 -DRIVER.ADC.VAR.ADC1_GROUP0_PINS.VALUE=0 -DRIVER.ADC.VAR.ADC1_GROUP0_ACTUAL_SAMPLE_TIME.VALUE=320.01 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN3_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN10_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_ID_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN6_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_SCAN_TIME.VALUE=0.000 -DRIVER.ADC.VAR.ADC2_GROUP1_HW_TRIGGER_SOURCE.VALUE=EVENT -DRIVER.ADC.VAR.ADC1_GROUP1_CHANNEL_TOTAL_TIME.VALUE=0.000000 -DRIVER.ADC.VAR.ADC1_GROUP0_EXTENDED_SAMPLE_TIME.VALUE=300.00 -DRIVER.ADC.VAR.ADC1_GROUP0_HW_TRIGGER_SOURCE_ALT.VALUE=EVENT -DRIVER.ADC.VAR.ADC2_GROUP1_PIN22_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN14_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN28_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_PORT_BIT0_PSL.VALUE=1 -DRIVER.ADC.VAR.ADC1_GROUP2_EXTENDED_SAMPLE_TIME.VALUE=300.00 -DRIVER.ADC.VAR.ADC2_GROUP1_LENGTH.VALUE=16 -DRIVER.ADC.VAR.ADC1_GROUP1_HW_TRIGGER_SOURCE_ALT.VALUE=EVENT -DRIVER.ADC.VAR.ADC2_GROUP2_PIN18_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN3_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN21_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN13_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_ACTUAL_DISCHARGE_TIME.VALUE=0.00 -DRIVER.ADC.VAR.ADC1_GROUP2_HW_TRIGGER_SOURCE_ALT.VALUE=EVENT -DRIVER.ADC.VAR.ADC2_GROUP2_PIN11_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_CONTINUOUS_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN25_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN17_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_ACTUAL_DISCHARGE_TIME.VALUE=0.00 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN7_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN29_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN10_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_ACTUAL_DISCHARGE_TIME.VALUE=0.00 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN0_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN30_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN22_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN14_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_CYCLE_TIME.VALUE=100.00 -DRIVER.ADC.VAR.ADC2_GROUP0_DISCHARGE_PRESCALER.VALUE=0 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN4_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN7_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_DISCHARGE_TIME.VALUE=0.00 -DRIVER.ADC.VAR.ADC1_GROUP0_HW_TRIGGER_SOURCE.VALUE=EVENT -DRIVER.ADC.VAR.ADC1_GROUP1_PIN0_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_ID_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_DISCHARGE_TIME.VALUE=0.00 -DRIVER.ADC.VAR.ADC1_GROUP2_SCAN_TIME.VALUE=0.000 -DRIVER.ADC.VAR.ADC1_GROUP1_PINS.VALUE=0 -DRIVER.ADC.VAR.ADC1_GROUP1_TRIGGER_EDGE_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_ALT_TRIG_COMP.VALUE=1 -DRIVER.ADC.VAR.ADC1_GROUP0_CONTINUOUS_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN8_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN23_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN15_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_ALT_TRIG.VALUE=0 -DRIVER.ADC.VAR.ADC1_GROUP1_RAM_PARITY_ENA.VALUE=0 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN19_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN1_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_RAM_PARITY_ENA.VALUE=0 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN4_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_DISCHARGE_PRESCALER.VALUE=0 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN20_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN12_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN8_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN26_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN18_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_RESOLUTION.VALUE=12_BIT -DRIVER.ADC.VAR.ADC2_GROUP2_PIN24_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN16_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN1_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN11_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_SCAN_TIME.VALUE=0.000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN31_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN23_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN15_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_HW_TRIGGER_SOURCE.VALUE=EVENT -DRIVER.ADC.VAR.ADC2_GROUP0_PIN5_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN27_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN19_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_PRESCALE.VALUE=7 -DRIVER.ADC.VAR.ADC2_GROUP0_ACTUAL_SAMPLE_TIME.VALUE=320.01 -DRIVER.ADC.VAR.ADC1_GROUP2_PINS.VALUE=0 -DRIVER.ADC.VAR.ADC2_PORT_BIT0_PULL.VALUE=2 -DRIVER.ADC.VAR.ADC1_LENGTH.VALUE=64 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN9_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN20_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN12_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_SAMPLE_TIME.VALUE=300.00 -DRIVER.ADC.VAR.ADC2_GROUP1_CHANNEL_TOTAL_TIME.VALUE=0.000000 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN2_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_CONTINUOUS_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN5_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_ACTUAL_SAMPLE_TIME.VALUE=320.01 -DRIVER.ADC.VAR.ADC1_GROUP0_SCAN_TIME.VALUE=0.000 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN6_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN21_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN13_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_TRIGGER_EDGE_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN9_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_SAMPLE_TIME.VALUE=300.00 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN17_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_FIFO_SIZE.VALUE=16 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN2_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN10_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN6_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN24_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN16_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN22_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN14_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN28_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_TRIGGER_MODE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_ACTUAL_DISCHARGE_TIME.VALUE=0.00 -DRIVER.LIN.VAR.LIN2_PORT_BIT1_PDR.VALUE=0 -DRIVER.LIN.VAR.LIN1_TOAWUSINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_TOA3WUSINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PORT_BIT2_DOUT.VALUE=0 -DRIVER.LIN.VAR.LIN2_PORT_BIT2_FUN.VALUE=4 -DRIVER.LIN.VAR.LIN1_HGENCTRL.VALUE=1 -DRIVER.LIN.VAR.LIN2_PORT_BIT0_PSL.VALUE=1 -DRIVER.LIN.VAR.LIN2_PORT_BIT0_DOUT.VALUE=0 -DRIVER.LIN.VAR.LIN1_PBEINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.LIN.VAR.LIN2_PORT_BIT2_PDR.VALUE=0 -DRIVER.LIN.VAR.LIN1_BASE_PORT.VALUE=0xFFF7E440 -DRIVER.LIN.VAR.LIN2_PARITYENA.VALUE=0 -DRIVER.LIN.VAR.LIN2_WAKEINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_FEINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_CEINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_PORT_BIT1_PSL.VALUE=2 -DRIVER.LIN.VAR.LIN2_OEINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_TXINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PORT_BIT0_PULL.VALUE=2 -DRIVER.LIN.VAR.LIN1_MAXPRESCALE.VALUE=3370 -DRIVER.LIN.VAR.LIN2_IDINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.LIN.VAR.LIN1_RX_MASK.VALUE=0xFF -DRIVER.LIN.VAR.LIN2_PORT_BIT2_PSL.VALUE=4 -DRIVER.LIN.VAR.LIN2_PORT_BIT1_DOUT.VALUE=0 -DRIVER.LIN.VAR.LIN1_BREAKINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_NREINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_TOINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_TOAWUSINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_TOA3WUSINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_BAUDRATE.VALUE=20.000 -DRIVER.LIN.VAR.LIN1_OEINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PORT_BIT0_DIR.VALUE=0 -DRIVER.LIN.VAR.LIN1_PORT_BIT1_PULL.VALUE=2 -DRIVER.LIN.VAR.LIN2_RXINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_WAKEINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_PORT_BIT2_DOUT.VALUE=0 -DRIVER.LIN.VAR.LIN2_WAKEINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_FEINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PORT_BIT1_DIR.VALUE=0 -DRIVER.LIN.VAR.LIN1_CEINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_PBEINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_TXINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PORT_BIT0_FUN.VALUE=0 -DRIVER.LIN.VAR.LIN2_IDINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PORT_BIT2_DIR.VALUE=0 -DRIVER.LIN.VAR.LIN2_SBREAK.VALUE=13 -DRIVER.LIN.VAR.LIN2_TOAWUSINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PORT_BIT2_PULL.VALUE=2 -DRIVER.LIN.VAR.LIN1_BREAKINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_PEINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PORT_BIT0_PDR.VALUE=0 -DRIVER.LIN.VAR.LIN1_BASE.VALUE=0xFFF7E400 -DRIVER.LIN.VAR.LIN2_PORT_BIT0_PULL.VALUE=2 -DRIVER.LIN.VAR.LIN1_LENGTH.VALUE=8 -DRIVER.LIN.VAR.LIN2_TOINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PORT_BIT1_FUN.VALUE=2 -DRIVER.LIN.VAR.LIN2_BEINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_ACTUALBAUDRATE.VALUE=20.032 -DRIVER.LIN.VAR.LIN1_FEINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_OEINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_NREINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_TXINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PORT_BIT1_PDR.VALUE=0 -DRIVER.LIN.VAR.LIN1_MSTMOD.VALUE=1 -DRIVER.LIN.VAR.LIN2_ISFEINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PORT_BIT2_FUN.VALUE=4 -DRIVER.LIN.VAR.LIN2_TX_MASK.VALUE=0xFF -DRIVER.LIN.VAR.LIN1_PORT_BIT0_PSL.VALUE=1 -DRIVER.LIN.VAR.LIN2_RXINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_WAKEINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_IDINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_PRESCALE.VALUE=233 -DRIVER.LIN.VAR.LIN1_PORT_BIT2_PDR.VALUE=0 -DRIVER.LIN.VAR.LIN2_BASE.VALUE=0xFFF7E600 -DRIVER.LIN.VAR.LIN2_PORT_BIT1_PULL.VALUE=2 -DRIVER.LIN.VAR.LIN2_PBEINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.LIN.VAR.LIN1_TOINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PORT_BIT1_PSL.VALUE=2 -DRIVER.LIN.VAR.LIN2_BASE_PORT.VALUE=0xFFF7E640 -DRIVER.LIN.VAR.LIN1_BAUDRATE.VALUE=20.000 -DRIVER.LIN.VAR.LIN2_TOAWUSINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_PEINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PORT_BIT2_PSL.VALUE=4 -DRIVER.LIN.VAR.LIN2_MAXBAUDRATE.VALUE=22.255 -DRIVER.LIN.VAR.LIN1_RXINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_BEINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_FEINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_PORT_BIT2_PULL.VALUE=2 -DRIVER.LIN.VAR.LIN1_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.LIN.VAR.LIN1_TX_MASK.VALUE=0xFF -DRIVER.LIN.VAR.LIN2_NREINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_TXINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_ISFEINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_ISFEINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_ACTUALBAUDRATE.VALUE=20.032 -DRIVER.LIN.VAR.LIN1_IDINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_TOA3WUSINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PEINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_TOINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PARITYENA.VALUE=0 -DRIVER.LIN.VAR.LIN1_BEINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_RXINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_HGENCTRL.VALUE=1 -DRIVER.LIN.VAR.LIN1_PRESCALE.VALUE=233 -DRIVER.LIN.VAR.LIN1_ISFEINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_SDEL.VALUE=1 -DRIVER.LIN.VAR.LIN2_LENGTH.VALUE=8 -DRIVER.LIN.VAR.LIN2_MAXPRESCALE.VALUE=3370 -DRIVER.LIN.VAR.LIN2_CEINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_BREAKINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PORT_BIT0_DOUT.VALUE=0 -DRIVER.LIN.VAR.LIN2_TOA3WUSINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PEINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_MSTMOD.VALUE=1 -DRIVER.LIN.VAR.LIN2_PORT_BIT0_DIR.VALUE=0 -DRIVER.LIN.VAR.LIN1_BEINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PBEINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_SDEL.VALUE=1 -DRIVER.LIN.VAR.LIN2_PORT_BIT1_DIR.VALUE=0 -DRIVER.LIN.VAR.LIN1_MAXBAUDRATE.VALUE=22.255 -DRIVER.LIN.VAR.LIN2_PORT_BIT2_PULDIS.VALUE=0 -DRIVER.LIN.VAR.LIN1_SBREAK.VALUE=13 -DRIVER.LIN.VAR.LIN2_OEINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PORT_BIT1_DOUT.VALUE=0 -DRIVER.LIN.VAR.LIN2_PORT_BIT0_FUN.VALUE=0 -DRIVER.LIN.VAR.LIN2_PORT_BIT2_DIR.VALUE=0 -DRIVER.LIN.VAR.LIN2_PORT_BIT0_PDR.VALUE=0 -DRIVER.LIN.VAR.LIN2_PORT_BIT1_FUN.VALUE=2 -DRIVER.LIN.VAR.LIN2_CEINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_NREINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_BREAKINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_RX_MASK.VALUE=0xFF -DRIVER.LIN.VAR.LIN1_PORT_BIT2_PULDIS.VALUE=0 -DRIVER.HET.VAR.HET2_EDGE5_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM5_PERIOD_PRESCALER.VALUE=149888 -DRIVER.HET.VAR.HET2_PWM0_PERIOD_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT0_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_INT_X0.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE4_BOTH.VALUE=0 -DRIVER.HET.VAR.HET1_BIT1_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT6_HRSHARE.VALUE=0x00000008 -DRIVER.HET.VAR.HET2_INT_X1.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM2_DUTY.VALUE=50 -DRIVER.HET.VAR.HET1_BIT29_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT0_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_IGNORE_SUSPEND_ENABLE.VALUE=0x00020000 -DRIVER.HET.VAR.HET2_PWM3_PERIOD.VALUE=1000.000 -DRIVER.HET.VAR.HET2_PWM1_PIN_SELECT.VALUE=10 -DRIVER.HET.VAR.HET2_BIT20_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT12_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT3_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_INT_X2.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X3.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM2_DUTYTIME.VALUE=500.053 -DRIVER.HET.VAR.HET2_INT_X4.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM6_ACTION.VALUE=3 -DRIVER.HET.VAR.HET1_PWM0_DUTY_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT4_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_PWM3_ENA.VALUE=0 -DRIVER.HET.VAR.HET2_BIT4_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X5.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_IGNORE_SUSPEND_ENABLE.VALUE=0x00020000 -DRIVER.HET.VAR.HET1_BIT30_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT26_HRSHARE.VALUE=0x00002000 -DRIVER.HET.VAR.HET1_BIT22_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT18_HRSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT14_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM4_ACTUALPERIOD.VALUE=1000.106 -DRIVER.HET.VAR.HET2_BIT3_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X6.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE0_PIN_SELECT.VALUE=9 -DRIVER.HET.VAR.HET1_BIT28_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT7_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_INT_X7.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT7_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X8.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM3_PERIOD_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT26_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT18_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT10_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X9.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT11_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT11_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_PWM4_PIN_SELECT.VALUE=16 -DRIVER.HET.VAR.HET2_PWM4_DUTYTIME.VALUE=500.053 -DRIVER.HET.VAR.HET1_RAM_BASE.VALUE=0xFF460000 -DRIVER.HET.VAR.HET2_EDGE6_BOTH.VALUE=0 -DRIVER.HET.VAR.HET2_PWM2_DUTY_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT31_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT23_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT15_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE2_EVENT.VALUE=1 -DRIVER.HET.VAR.HET2_BIT11_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PIN_ENABLE.VALUE=0 -DRIVER.HET.VAR.HET1_CAP3_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_BIT24_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT16_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT5_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT27_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT19_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE6_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT24_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_BIT16_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_BIT2_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM6_DUTY_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE3_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET2_EDGE5_PIN_SELECT.VALUE=21 -DRIVER.HET.VAR.HET2_BIT21_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT13_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM7_PERIOD.VALUE=1000.000 -DRIVER.HET.VAR.HET1_BIT27_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT19_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_CAP5_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET2_PWM4_ENA.VALUE=0 -DRIVER.HET.VAR.HET2_BIT8_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM1_POLARITY.VALUE=3 -DRIVER.HET.VAR.HET2_CAP2_PIN_SELECT.VALUE=4 -DRIVER.HET.VAR.HET2_BIT4_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM0_PERIOD.VALUE=1000.000 -DRIVER.HET.VAR.HET1_BIT29_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT0_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT8_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM4_PERIOD_PRESCALER.VALUE=149888 -DRIVER.HET.VAR.HET2_BIT1_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT20_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT12_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM7_ACTION.VALUE=3 -DRIVER.HET.VAR.HET2_PWM4_PERIOD_PRESCALER.VALUE=149888 -DRIVER.HET.VAR.HET2_BIT26_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_BIT24_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT18_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_BIT16_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM3_DUTY_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM3_POLARITY.VALUE=3 -DRIVER.HET.VAR.HET2_BIT28_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT0_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM1_ACTUALPERIOD.VALUE=1000.106 -DRIVER.HET.VAR.HET2_BIT29_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT6_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_CAP5_PIN_SELECT.VALUE=26 -DRIVER.HET.VAR.HET1_BIT28_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT10_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_EDGE7_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM0_ACTION.VALUE=3 -DRIVER.HET.VAR.HET2_BIT1_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_EDGE7_EVENT.VALUE=1 -DRIVER.HET.VAR.HET1_EDGE5_BOTH.VALUE=0 -DRIVER.HET.VAR.HET1_PWM5_DUTY_PRESCALER.VALUE=75136 -DRIVER.HET.VAR.HET1_BIT3_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE7_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_EDGE1_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM3_DUTY.VALUE=50 -DRIVER.HET.VAR.HET1_PWM1_PERIOD_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT30_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT22_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT14_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT4_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_EDGE4_EVENT.VALUE=1 -DRIVER.HET.VAR.HET1_BIT5_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_MASTER.VALUE=1 -DRIVER.HET.VAR.HET2_EDGE5_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM5_ENA.VALUE=0 -DRIVER.HET.VAR.HET2_PWM0_PERIOD_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT2_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT5_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM7_ACTUALPERIOD.VALUE=1000.106 -DRIVER.HET.VAR.HET1_BIT8_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT1_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_LR_ACTUALTIME.VALUE=853.333 -DRIVER.HET.VAR.HET1_PWM5_DUTYTIME.VALUE=500.053 -DRIVER.HET.VAR.HET2_PWM5_PERIOD_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM4_DUTY_PRESCALER.VALUE=75136 -DRIVER.HET.VAR.HET2_BIT9_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM3_DUTY_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM0_DUTY_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT5_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM6_PIN_SELECT.VALUE=18 -DRIVER.HET.VAR.HET2_BIT21_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT20_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT13_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT12_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_EDGE7_BOTH.VALUE=0 -DRIVER.HET.VAR.HET2_BIT25_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT17_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM6_DUTY_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM0_ENA.VALUE=0 -DRIVER.HET.VAR.HET1_BIT30_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT27_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT22_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT19_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT14_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM1_PERIOD.VALUE=1000.000 -DRIVER.HET.VAR.HET2_BIT7_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE5_PIN_SELECT.VALUE=21 -DRIVER.HET.VAR.HET1_BIT29_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT0_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET_DIS_BLACKBOX.VALUE=0 -DRIVER.HET.VAR.HET2_PWM7_DUTYTIME.VALUE=500.053 -DRIVER.HET.VAR.HET2_HR_ACTUALFREQUENCY.VALUE=75.000 -DRIVER.HET.VAR.HET2_PWM5_DUTY_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM4_ACTION.VALUE=3 -DRIVER.HET.VAR.HET1_BIT25_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_BIT17_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_BIT4_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE0_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_CAP6_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_BIT20_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT12_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT31_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT23_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT15_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X10.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT28_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_INT_X11.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X20.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X12.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM3_PERIOD_PRESCALER.VALUE=149888 -DRIVER.HET.VAR.HET2_PWM6_ENA.VALUE=0 -DRIVER.HET.VAR.HET2_BIT24_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT16_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X21.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X13.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_HR_PRESCALE.VALUE=0 -DRIVER.HET.VAR.HET1_EDGE6_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_PWM6_PERIOD_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_LR_PRESCALE.VALUE=6 -DRIVER.HET.VAR.HET2_PWM0_PIN_SELECT.VALUE=8 -DRIVER.HET.VAR.HET2_BIT6_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X30.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X22.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X14.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT2_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X31.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X23.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X15.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM3_PERIOD_PRESCALER.VALUE=149888 -DRIVER.HET.VAR.HET2_INT_X24.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X16.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BASE_PORT.VALUE=0xFFF7B84C -DRIVER.HET.VAR.HET2_PWM5_PERIOD_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT0_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X25.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X17.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM4_POLARITY.VALUE=3 -DRIVER.HET.VAR.HET1_PWM3_DUTY_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT10_HRSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT30_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT22_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT14_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X26.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X18.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X27.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X19.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT27_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_BIT26_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT19_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_BIT18_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X28.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM2_PERIOD_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM1_DUTY_PRESCALER.VALUE=75136 -DRIVER.HET.VAR.HET2_PWM0_DUTY.VALUE=50 -DRIVER.HET.VAR.HET2_BIT26_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT18_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X29.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM1_ENA.VALUE=0 -DRIVER.HET.VAR.HET2_CAP7_PIN_SELECT.VALUE=30 -DRIVER.HET.VAR.HET2_BIT8_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM5_PERIOD.VALUE=1000.000 -DRIVER.HET.VAR.HET1_PWM4_ACTUALPERIOD.VALUE=1000.106 -DRIVER.HET.VAR.HET1_PWM3_PIN_SELECT.VALUE=14 -DRIVER.HET.VAR.HET1_BIT11_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT1_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM0_DUTYTIME.VALUE=500.053 -DRIVER.HET.VAR.HET2_BIT2_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_EDGE6_BOTH.VALUE=0 -DRIVER.HET.VAR.HET1_BIT5_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM6_POLARITY.VALUE=3 -DRIVER.HET.VAR.HET2_BIT30_HRSHARE.VALUE=0x00008000 -DRIVER.HET.VAR.HET2_BIT22_HRSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT14_HRSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT6_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM4_DUTY.VALUE=50 -DRIVER.HET.VAR.HET1_BIT20_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT12_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PIN_ENABLE.VALUE=0 -DRIVER.HET.VAR.HET2_BIT24_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT16_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT5_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_PWM0_DUTY_PRESCALER.VALUE=75136 -DRIVER.HET.VAR.HET1_BIT6_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_PWM7_ENA.VALUE=0 -DRIVER.HET.VAR.HET1_PWM0_DUTY_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT8_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE4_PIN_SELECT.VALUE=20 -DRIVER.HET.VAR.HET2_BIT7_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT9_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT3_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM5_ACTION.VALUE=3 -DRIVER.HET.VAR.HET2_BIT10_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_CAP1_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_EDGE6_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_CAP1_PIN_SELECT.VALUE=2 -DRIVER.HET.VAR.HET2_BIT31_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT23_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT21_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT15_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT13_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT27_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT19_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE3_EVENT.VALUE=1 -DRIVER.HET.VAR.HET1_PWM6_DUTY_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM2_ENA.VALUE=0 -DRIVER.HET.VAR.HET2_BIT9_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT2_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE0_EVENT.VALUE=1 -DRIVER.HET.VAR.HET1_PWM2_PERIOD_PRESCALER.VALUE=149888 -DRIVER.HET.VAR.HET1_BIT26_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_BIT18_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_BIT6_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE3_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT24_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT16_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT25_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT17_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_CAP4_PIN_SELECT.VALUE=24 -DRIVER.HET.VAR.HET1_BIT29_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT0_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_PWM2_PERIOD_PRESCALER.VALUE=149888 -DRIVER.HET.VAR.HET2_EDGE3_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_BIT3_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT2_HRSHARE.VALUE=0x00000002 -DRIVER.HET.VAR.HET2_PWM6_PERIOD.VALUE=1000.000 -DRIVER.HET.VAR.HET2_BIT8_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM1_ACTUALPERIOD.VALUE=1000.106 -DRIVER.HET.VAR.HET1_BIT4_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT4_HRSHARE.VALUE=0x00000004 -DRIVER.HET.VAR.HET1_BIT25_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT17_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT24_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT16_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM1_DUTYTIME.VALUE=500.053 -DRIVER.HET.VAR.HET2_PWM4_PERIOD_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT28_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_BIT28_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM2_ACTION.VALUE=3 -DRIVER.HET.VAR.HET2_PWM1_DUTY.VALUE=50 -DRIVER.HET.VAR.HET2_BIT29_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM7_POLARITY.VALUE=3 -DRIVER.HET.VAR.HET1_PWM3_ENA.VALUE=0 -DRIVER.HET.VAR.HET1_BIT24_HRSHARE.VALUE=0x00001000 -DRIVER.HET.VAR.HET1_BIT16_HRSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT10_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM5_PIN_SELECT.VALUE=17 -DRIVER.HET.VAR.HET1_BIT20_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT12_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT3_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X10.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X11.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT3_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_EDGE7_BOTH.VALUE=0 -DRIVER.HET.VAR.HET1_EDGE0_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT7_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X20.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X12.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT30_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT22_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT14_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM5_DUTY.VALUE=50 -DRIVER.HET.VAR.HET1_BIT10_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X21.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X13.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM5_ACTUALPERIOD.VALUE=1000.106 -DRIVER.HET.VAR.HET2_BIT26_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT18_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT6_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_EDGE4_PIN_SELECT.VALUE=20 -DRIVER.HET.VAR.HET1_INT_X30.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X22.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X14.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM3_DUTYTIME.VALUE=500.053 -DRIVER.HET.VAR.HET1_INT_X31.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X23.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X15.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE5_EVENT.VALUE=1 -DRIVER.HET.VAR.HET2_PWM1_DUTY_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM7_PERIOD_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM6_DUTY_PRESCALER.VALUE=75136 -DRIVER.HET.VAR.HET1_BIT7_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_INT_X24.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X16.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT28_HRSHARE.VALUE=0x00004000 -DRIVER.HET.VAR.HET1_CAP2_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_PWM3_PERIOD_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT6_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X25.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X17.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT9_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT5_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X26.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X18.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X27.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X19.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT11_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_INT_X28.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM2_PERIOD_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_RAM_SIZE.VALUE=160 -DRIVER.HET.VAR.HET1_EDGE2_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_INT_X29.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT30_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT25_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT22_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT17_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT14_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_PWM3_PERIOD.VALUE=1000.000 -DRIVER.HET.VAR.HET2_PWM5_DUTY_PRESCALER.VALUE=75136 -DRIVER.HET.VAR.HET2_BIT29_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM1_PERIOD_PRESCALER.VALUE=149888 -DRIVER.HET.VAR.HET1_BIT10_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_CAP4_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET2_BIT8_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT4_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM4_ENA.VALUE=0 -DRIVER.HET.VAR.HET1_PWM0_POLARITY.VALUE=3 -DRIVER.HET.VAR.HET1_BIT4_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM1_PERIOD_PRESCALER.VALUE=149888 -DRIVER.HET.VAR.HET1_EDGE1_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM1_PERIOD_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT27_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_BIT19_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_BIT8_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT30_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT22_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT14_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_CAP6_PIN_SELECT.VALUE=28 -DRIVER.HET.VAR.HET2_BIT27_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT19_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM2_PIN_SELECT.VALUE=12 -DRIVER.HET.VAR.HET1_BIT1_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_PWM3_ACTION.VALUE=3 -DRIVER.HET.VAR.HET2_PWM2_POLARITY.VALUE=3 -DRIVER.HET.VAR.HET1_EDGE4_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT28_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT6_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE0_BOTH.VALUE=0 -DRIVER.HET.VAR.HET2_EDGE6_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET2_PWM5_DUTY_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT8_HRSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT4_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE3_PIN_SELECT.VALUE=15 -DRIVER.HET.VAR.HET2_PWM2_ACTUALPERIOD.VALUE=1000.106 -DRIVER.HET.VAR.HET2_BIT26_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT18_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT29_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_BIT11_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT10_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_EDGE1_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM7_PERIOD_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM2_DUTY.VALUE=50 -DRIVER.HET.VAR.HET1_PWM5_ENA.VALUE=0 -DRIVER.HET.VAR.HET1_BIT8_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_CAP0_PIN_SELECT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT21_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT13_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT5_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM4_DUTYTIME.VALUE=500.053 -DRIVER.HET.VAR.HET2_BIT4_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_EDGE2_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM2_DUTY_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM2_DUTY_PRESCALER.VALUE=75136 -DRIVER.HET.VAR.HET1_BIT9_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT6_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM6_DUTY.VALUE=50 -DRIVER.HET.VAR.HET1_BIT1_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM4_PERIOD.VALUE=1000.000 -DRIVER.HET.VAR.HET2_BIT28_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT7_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_PWM7_ACTION.VALUE=3 -DRIVER.HET.VAR.HET1_BIT8_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_PWM2_DUTY_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT20_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT12_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT31_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT23_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT15_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_CAP3_PIN_SELECT.VALUE=6 -DRIVER.HET.VAR.HET1_BIT7_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM6_DUTYTIME.VALUE=500.053 -DRIVER.HET.VAR.HET2_PWM4_DUTY_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM1_DUTY_PRESCALER.VALUE=75136 -DRIVER.HET.VAR.HET2_BIT20_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_BIT12_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_PWM0_PERIOD_PRESCALER.VALUE=149888 -DRIVER.HET.VAR.HET1_PWM0_ACTION.VALUE=3 -DRIVER.HET.VAR.HET2_BIT27_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT19_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_CAP5_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_BIT26_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT18_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT31_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT27_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT23_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT19_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT15_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_PWM0_PERIOD_PRESCALER.VALUE=149888 -DRIVER.HET.VAR.HET1_EDGE4_EVENT.VALUE=1 -DRIVER.HET.VAR.HET1_BIT20_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT12_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT20_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT12_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE5_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_PWM6_ENA.VALUE=0 -DRIVER.HET.VAR.HET1_BIT6_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE1_EVENT.VALUE=1 -DRIVER.HET.VAR.HET2_PWM3_PERIOD_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE3_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT28_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_CAP7_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_PWM3_POLARITY.VALUE=3 -DRIVER.HET.VAR.HET2_PWM4_PIN_SELECT.VALUE=16 -DRIVER.HET.VAR.HET2_BIT29_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT10_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT2_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT9_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM5_DUTY_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM0_PERIOD_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE3_PIN_SELECT.VALUE=15 -DRIVER.HET.VAR.HET1_PWM1_PERIOD.VALUE=1000.000 -DRIVER.HET.VAR.HET1_BIT8_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BASE.VALUE=0xFFF7B800 -DRIVER.HET.VAR.HET2_EDGE1_BOTH.VALUE=0 -DRIVER.HET.VAR.HET1_PWM6_PERIOD_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM5_POLARITY.VALUE=3 -DRIVER.HET.VAR.HET2_BIT20_HRSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT12_HRSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT2_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT2_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT28_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM7_PIN_SELECT.VALUE=19 -DRIVER.HET.VAR.HET1_PWM5_ACTUALPERIOD.VALUE=1000.106 -DRIVER.HET.VAR.HET1_LR_ACTUALTIME.VALUE=853.333 -DRIVER.HET.VAR.HET1_BIT21_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT13_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT11_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_PWM3_DUTY.VALUE=50 -DRIVER.HET.VAR.HET1_PWM7_ENA.VALUE=0 -DRIVER.HET.VAR.HET1_HR_PRESCALE.VALUE=0 -DRIVER.HET.VAR.HET1_BIT30_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT22_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT14_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT7_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_HR_ACTUALFREQUENCY.VALUE=75.000 -DRIVER.HET.VAR.HET2_PWM1_ACTION.VALUE=3 -DRIVER.HET.VAR.HET2_BIT5_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_EDGE4_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_CAP0_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET2_BIT4_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE2_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM7_DUTY.VALUE=50 -DRIVER.HET.VAR.HET1_PWM2_DUTY_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT8_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT11_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM7_DUTYTIME.VALUE=500.053 -DRIVER.HET.VAR.HET2_EDGE6_EVENT.VALUE=1 -DRIVER.HET.VAR.HET2_MASTER.VALUE=1 -DRIVER.HET.VAR.HET1_PWM5_DUTY_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM0_PERIOD_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT9_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_EDGE6_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT10_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_CAP5_PIN_SELECT.VALUE=26 -DRIVER.HET.VAR.HET1_PWM1_PIN_SELECT.VALUE=10 -DRIVER.HET.VAR.HET1_BIT9_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT21_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_BIT13_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_PWM7_DUTY_PRESCALER.VALUE=75136 -DRIVER.HET.VAR.HET1_PWM5_PERIOD_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT24_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT16_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT6_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_RAM_PARITY_ENA.VALUE=0x00000005 -DRIVER.HET.VAR.HET2_BIT29_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT24_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT16_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT10_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM7_DUTY_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE0_BOTH.VALUE=0 -DRIVER.HET.VAR.HET1_BIT30_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT22_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT14_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X0.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE2_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET2_PWM4_PERIOD_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT28_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT0_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT0_HRSHARE.VALUE=0x00000001 -DRIVER.HET.VAR.HET1_INT_X1.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE2_PIN_SELECT.VALUE=13 -DRIVER.HET.VAR.HET2_PWM2_PERIOD.VALUE=1000.000 -DRIVER.HET.VAR.HET1_BIT8_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X2.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_DIS_BLACKBOX.VALUE=0 -DRIVER.HET.VAR.HET2_LR_TIME.VALUE=800.000 -DRIVER.HET.VAR.HET1_INT_X3.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM6_DUTY_PRESCALER.VALUE=75136 -DRIVER.HET.VAR.HET1_EDGE5_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM5_ACTION.VALUE=3 -DRIVER.HET.VAR.HET1_BIT29_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_BIT0_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_INT_X4.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT2_HRSHARE.VALUE=0x00000002 -DRIVER.HET.VAR.HET1_BIT21_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT13_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X5.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM2_ACTUALPERIOD.VALUE=1000.106 -DRIVER.HET.VAR.HET1_BIT20_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT12_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT3_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_INT_X6.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM0_DUTYTIME.VALUE=500.053 -DRIVER.HET.VAR.HET1_INT_X7.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BASE_PORT.VALUE=0xFFF7B94C -DRIVER.HET.VAR.HET1_INT_X8.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT25_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT17_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT2_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM6_POLARITY.VALUE=3 -DRIVER.HET.VAR.HET1_BIT30_HRSHARE.VALUE=0x00008000 -DRIVER.HET.VAR.HET1_BIT22_HRSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT14_HRSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X9.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BASE.VALUE=0xFFF7B900 -DRIVER.HET.VAR.HET2_EDGE2_BOTH.VALUE=0 -DRIVER.HET.VAR.HET1_EDGE0_EVENT.VALUE=1 -DRIVER.HET.VAR.HET2_BIT28_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT10_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_CAP2_PIN_SELECT.VALUE=4 -DRIVER.HET.VAR.HET1_BIT11_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM2_DUTYTIME.VALUE=500.053 -DRIVER.HET.VAR.HET2_PWM0_DUTY_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT31_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT23_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT20_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_BIT15_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT12_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_PWM4_DUTY.VALUE=50 -DRIVER.HET.VAR.HET2_BIT26_HRSHARE.VALUE=0x00002000 -DRIVER.HET.VAR.HET2_BIT18_HRSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_CAP1_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_BIT30_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT22_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT14_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM6_ACTUALPERIOD.VALUE=1000.106 -DRIVER.HET.VAR.HET1_PWM6_PERIOD.VALUE=1000.000 -DRIVER.HET.VAR.HET1_BIT31_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT23_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT15_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT9_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT6_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_EDGE6_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT7_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE1_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_RAM_SIZE.VALUE=160 -DRIVER.HET.VAR.HET2_BIT9_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT21_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT13_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM2_PERIOD_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT0_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM3_DUTY_PRESCALER.VALUE=75136 -DRIVER.HET.VAR.HET2_CAP3_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET2_BIT0_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM3_PIN_SELECT.VALUE=14 -DRIVER.HET.VAR.HET2_PWM6_ACTION.VALUE=3 -DRIVER.HET.VAR.HET2_BIT30_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_BIT22_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_BIT14_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_EDGE7_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT25_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT17_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_EDGE2_PIN_SELECT.VALUE=13 -DRIVER.HET.VAR.HET1_BIT20_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT12_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_HR_FREQUENCY.VALUE=110.000 -DRIVER.HET.VAR.HET2_PWM2_DUTY_PRESCALER.VALUE=75136 -DRIVER.HET.VAR.HET1_EDGE5_EVENT.VALUE=1 -DRIVER.HET.VAR.HET1_EDGE1_BOTH.VALUE=0 -DRIVER.HET.VAR.HET1_PWM5_PERIOD_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT24_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT16_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM1_POLARITY.VALUE=3 -DRIVER.HET.VAR.HET2_BIT26_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT18_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE0_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT0_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_PWM6_PIN_SELECT.VALUE=18 -DRIVER.HET.VAR.HET2_EDGE2_EVENT.VALUE=1 -DRIVER.HET.VAR.HET1_EDGE7_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT1_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_EDGE5_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET2_EDGE4_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT6_HRSHARE.VALUE=0x00000008 -DRIVER.HET.VAR.HET1_BIT30_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT22_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT14_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT4_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT1_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM7_DUTY_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT8_HRSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT0_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT4_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE7_PIN_SELECT.VALUE=23 -DRIVER.HET.VAR.HET2_PWM7_PERIOD.VALUE=1000.000 -DRIVER.HET.VAR.HET2_PWM3_ACTUALPERIOD.VALUE=1000.106 -DRIVER.HET.VAR.HET1_PWM3_DUTYTIME.VALUE=500.053 -DRIVER.HET.VAR.HET2_EDGE3_BOTH.VALUE=0 -DRIVER.HET.VAR.HET1_PWM1_DUTY_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM2_PERIOD_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT28_HRSHARE.VALUE=0x00004000 -DRIVER.HET.VAR.HET1_BIT26_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT18_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_CAP4_PIN_SELECT.VALUE=24 -DRIVER.HET.VAR.HET2_PWM0_PERIOD.VALUE=1000.000 -DRIVER.HET.VAR.HET1_PWM0_PIN_SELECT.VALUE=8 -DRIVER.HET.VAR.HET1_BIT21_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT13_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_LR_TIME.VALUE=800.000 -DRIVER.HET.VAR.HET2_EDGE0_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM3_ACTION.VALUE=3 -DRIVER.HET.VAR.HET1_BIT25_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT21_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_BIT17_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT13_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_PWM5_DUTY.VALUE=50 -DRIVER.HET.VAR.HET2_PWM1_PERIOD_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT20_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT12_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT11_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT24_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT16_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_PWM5_DUTYTIME.VALUE=500.053 -DRIVER.HET.VAR.HET2_RAM_BASE.VALUE=0xFF440000 -DRIVER.HET.VAR.HET2_PWM3_DUTY_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT7_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_PWM4_DUTY_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT31_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT23_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT15_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_CAP4_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_BIT8_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE1_PIN_SELECT.VALUE=11 -DRIVER.HET.VAR.HET1_CAP7_PIN_SELECT.VALUE=30 -DRIVER.HET.VAR.HET1_BIT31_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT23_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT15_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE7_EVENT.VALUE=1 -DRIVER.HET.VAR.HET2_BIT2_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE4_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET2_BIT31_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_BIT23_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_BIT15_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_BIT10_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_CAP6_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_PWM2_POLARITY.VALUE=3 -DRIVER.HET.VAR.HET2_BIT26_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT18_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT0_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM4_PERIOD.VALUE=1000.000 -DRIVER.HET.VAR.HET1_BIT30_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT22_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT14_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE1_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM7_PERIOD_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE2_BOTH.VALUE=0 -DRIVER.HET.VAR.HET1_BIT26_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT18_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM1_DUTY_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT24_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT16_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT5_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_RAM_PARITY_ENA.VALUE=0x00000005 -DRIVER.HET.VAR.HET1_PWM7_PERIOD_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM0_DUTY.VALUE=50 -DRIVER.HET.VAR.HET2_PWM0_ACTUALPERIOD.VALUE=1000.106 -DRIVER.HET.VAR.HET2_BIT1_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_CAP1_PIN_SELECT.VALUE=2 -DRIVER.HET.VAR.HET1_PWM7_PERIOD_PRESCALER.VALUE=149888 -DRIVER.HET.VAR.HET1_BIT2_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_PWM6_PERIOD_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM4_POLARITY.VALUE=3 -DRIVER.HET.VAR.HET2_BIT10_HRSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM7_DUTY_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT10_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE7_PIN_SELECT.VALUE=23 -DRIVER.HET.VAR.HET1_BIT24_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT16_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT5_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_PWM7_PERIOD_PRESCALER.VALUE=149888 -DRIVER.HET.VAR.HET2_PWM7_DUTY_PRESCALER.VALUE=75136 -DRIVER.HET.VAR.HET2_PWM4_ACTION.VALUE=3 -DRIVER.HET.VAR.HET2_BIT3_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE5_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT6_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM6_ACTUALPERIOD.VALUE=1000.106 -DRIVER.HET.VAR.HET2_EDGE4_BOTH.VALUE=0 -DRIVER.HET.VAR.HET2_PWM1_PERIOD_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT11_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE1_EVENT.VALUE=1 -DRIVER.HET.VAR.HET2_LR_PRESCALE.VALUE=6 -DRIVER.HET.VAR.HET2_PWM2_PIN_SELECT.VALUE=12 -DRIVER.HET.VAR.HET2_BIT1_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT31_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT23_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT15_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM6_DUTYTIME.VALUE=500.053 -DRIVER.HET.VAR.HET2_EDGE2_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM4_DUTY_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT30_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_BIT27_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT22_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_BIT19_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT14_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_EDGE2_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM6_DUTY.VALUE=50 -DRIVER.HET.VAR.HET2_BIT8_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM4_DUTY_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT9_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE1_PIN_SELECT.VALUE=11 -DRIVER.HET.VAR.HET1_BIT25_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT17_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT8_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_PWM4_PERIOD_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM0_ENA.VALUE=0 -DRIVER.HET.VAR.HET2_BIT30_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT22_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT14_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT2_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM5_PERIOD.VALUE=1000.000 -DRIVER.HET.VAR.HET2_BIT0_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM5_PIN_SELECT.VALUE=17 -DRIVER.HET.VAR.HET1_BIT25_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT17_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM6_DUTY_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT4_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE1_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_CAP7_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_BIT28_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT24_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT16_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT24_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_BIT20_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT16_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_BIT12_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM4_DUTY_PRESCALER.VALUE=75136 -DRIVER.HET.VAR.HET1_PWM1_ACTION.VALUE=3 -DRIVER.HET.VAR.HET2_BIT28_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT0_HRSHARE.VALUE=0x00000001 -DRIVER.HET.VAR.HET1_EDGE7_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_PWM1_DUTY_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE6_PIN_SELECT.VALUE=22 -DRIVER.HET.VAR.HET2_BIT27_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT19_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT2_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_DIS_BLACKBOX.VALUE=0 -DRIVER.HET.VAR.HET1_BIT24_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT16_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE3_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE6_EVENT.VALUE=1 -DRIVER.HET.VAR.HET1_EDGE3_BOTH.VALUE=0 -DRIVER.HET.VAR.HET1_PWM6_PERIOD_PRESCALER.VALUE=149888 -DRIVER.HET.VAR.HET1_BIT28_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT21_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT13_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM5_POLARITY.VALUE=3 -DRIVER.HET.VAR.HET1_PWM1_DUTY.VALUE=50 -DRIVER.HET.VAR.HET1_BIT20_HRSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT12_HRSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_CAP3_PIN_SELECT.VALUE=6 -DRIVER.HET.VAR.HET2_BIT10_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT2_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_PWM3_ACTUALPERIOD.VALUE=1000.106 -DRIVER.HET.VAR.HET2_EDGE3_EVENT.VALUE=1 -DRIVER.HET.VAR.HET2_PWM6_PERIOD_PRESCALER.VALUE=149888 -DRIVER.HET.VAR.HET2_PWM3_DUTY_PRESCALER.VALUE=75136 -DRIVER.HET.VAR.HET1_BIT3_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_PWM1_ENA.VALUE=0 -DRIVER.HET.VAR.HET2_BIT1_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT26_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT18_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT6_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_PWM1_DUTYTIME.VALUE=500.053 -DRIVER.HET.VAR.HET2_BIT5_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM7_POLARITY.VALUE=3 -DRIVER.HET.VAR.HET2_BIT24_HRSHARE.VALUE=0x00001000 -DRIVER.HET.VAR.HET2_BIT16_HRSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_CAP0_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_BIT4_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE0_PIN_SELECT.VALUE=9 -DRIVER.HET.VAR.HET2_BIT10_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_CAP6_PIN_SELECT.VALUE=28 -DRIVER.HET.VAR.HET1_PWM2_PERIOD.VALUE=1000.000 -DRIVER.HET.VAR.HET2_EDGE5_BOTH.VALUE=0 -DRIVER.HET.VAR.HET2_BIT21_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT13_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT3_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE0_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET2_PWM7_ACTUALPERIOD.VALUE=1000.106 -DRIVER.HET.VAR.HET2_BIT3_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT25_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT17_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE4_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT31_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_BIT29_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT23_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_BIT15_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_BIT0_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_CAP2_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET2_PWM7_DUTY.VALUE=50 -DRIVER.HET.VAR.HET2_BIT6_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM4_PERIOD_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT11_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT26_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT18_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_PWM6_PERIOD_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM2_ACTION.VALUE=3 -DRIVER.HET.VAR.HET2_BIT9_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_PWM7_DUTY_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM3_PERIOD_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM2_ENA.VALUE=0 -DRIVER.HET.VAR.HET2_BIT20_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT12_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE3_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM7_PIN_SELECT.VALUE=19 -DRIVER.HET.VAR.HET2_BIT2_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_CAP0_PIN_SELECT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT27_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT19_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT6_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM0_DUTY_PRESCALER.VALUE=75136 -DRIVER.HET.VAR.HET2_EDGE7_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM0_POLARITY.VALUE=3 -DRIVER.HET.VAR.HET1_BIT26_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT18_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT10_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE6_PIN_SELECT.VALUE=22 -DRIVER.HET.VAR.HET1_PWM0_ACTUALPERIOD.VALUE=1000.106 -DRIVER.HET.VAR.HET2_HR_FREQUENCY.VALUE=110.000 -DRIVER.HET.VAR.HET2_BIT30_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT25_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_BIT22_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT17_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_BIT14_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM5_PERIOD_PRESCALER.VALUE=149888 -DRIVER.HET.VAR.HET2_EDGE4_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET2_EDGE0_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT7_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT4_HRSHARE.VALUE=0x00000004 -DRIVER.HET.VAR.HET1_BIT2_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT28_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT4_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT26_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT18_PSL.VALUE=0x00000000 -DRIVER.RTP.VAR.RTP_PORT_BIT1_DOUT.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT3_FUN.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT1_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT5_DIR.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT14_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT11_DIR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT3_PDR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT8_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT4_FUN.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT6_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT2_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT10_FUN.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT6_DIR.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT14_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT12_DIR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT17_DOUT.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT4_PDR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT10_PDR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT2_DOUT.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT5_FUN.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT3_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT11_FUN.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT7_DIR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT13_DIR.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT5_PDR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT11_PDR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT9_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT6_FUN.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT12_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT4_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT12_FUN.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT8_DIR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT10_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT15_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT14_DIR.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT18_DOUT.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT6_PDR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT0_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT4_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT12_PDR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT3_DOUT.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT7_FUN.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT5_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT13_FUN.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT9_DIR.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT11_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT15_DIR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT7_PDR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT13_PDR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT8_FUN.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT6_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT14_FUN.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT12_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT16_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT16_DIR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT17_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT8_PDR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT1_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT10_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT14_PDR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT4_DOUT.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT9_FUN.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT7_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT15_FUN.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT9_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT13_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT10_DOUT.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT17_DIR.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT2_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT9_PDR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT15_PDR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT8_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT16_FUN.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT14_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT18_DIR.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT17_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_BASE_PORT.VALUE=0xFFFFFA38 -DRIVER.RTP.VAR.RTP_PORT_BIT2_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT16_PDR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT5_DOUT.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT9_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT17_FUN.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT15_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT15_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT11_DOUT.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT17_PDR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT7_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT18_FUN.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT16_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT18_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT3_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT18_PDR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT6_DOUT.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT17_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT12_DOUT.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT13_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT18_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT4_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT5_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT7_DOUT.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT10_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT13_DOUT.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT18_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT5_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT11_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT8_DOUT.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT0_DIR.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT11_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT14_DOUT.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT3_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT1_DIR.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT6_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT0_FUN.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT9_DOUT.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT2_DIR.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT12_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT16_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT15_DOUT.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT0_PDR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT0_DOUT.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT1_FUN.VALUE=1 -DRIVER.RTP.VAR.RTP_BASE.VALUE=0xFFFFFA00 -DRIVER.RTP.VAR.RTP_PORT_BIT3_DIR.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT8_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT1_PDR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT7_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT2_FUN.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT0_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT4_DIR.VALUE=0 -DRIVER.RTP.VAR.RTP_BASE_RAM.VALUE=0xFFF83000 -DRIVER.RTP.VAR.RTP_PORT_BIT13_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT10_DIR.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT16_DOUT.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT2_PDR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT14_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT17_DOUT.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT17_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT4_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT1_DIR.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT18_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT0_FUN.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT15_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT4_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT2_DIR.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT7_DOUT.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT15_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT18_DOUT.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT0_PDR.VALUE=0 -DRIVER.DMM.VAR.DMM_BASE.VALUE=0xFFFFF700 -DRIVER.DMM.VAR.DMM_PORT_BIT1_FUN.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT3_DIR.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT9_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT1_PDR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT2_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT2_FUN.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT0_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT5_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT4_DIR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT8_DOUT.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT16_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT2_PDR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT13_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT3_FUN.VALUE=1 -DRIVER.DMM.VAR.DMM_BASE_PORT.VALUE=0xFFFFF770 -DRIVER.DMM.VAR.DMM_PORT_BIT1_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT5_DIR.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT10_DOUT.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT3_PDR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT4_FUN.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT2_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT6_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT6_DIR.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT7_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT9_DOUT.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT17_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT4_PDR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT5_FUN.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT3_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT0_DOUT.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT7_DIR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT18_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT11_DOUT.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT11_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT5_PDR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT6_FUN.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT4_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT8_DIR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT7_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT18_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT6_PDR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT10_DIR.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT7_FUN.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT5_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT5_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT1_DOUT.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT9_DIR.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT12_DOUT.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT7_PDR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT11_DIR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT8_FUN.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT16_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT6_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT8_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT10_FUN.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT8_PDR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT12_DIR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT9_FUN.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT10_PDR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT7_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT2_DOUT.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT10_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT13_DOUT.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT11_FUN.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT9_PDR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT13_DIR.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT3_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT11_PDR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT8_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT9_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT12_FUN.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT10_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT14_DIR.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT14_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT0_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT12_PDR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT9_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT3_DOUT.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT11_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT14_DOUT.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT13_FUN.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT11_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT15_DIR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT13_PDR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT8_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT14_FUN.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT12_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT16_DIR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT1_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT14_PDR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT4_DOUT.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT12_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT15_DOUT.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT15_FUN.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT12_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT13_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT17_DIR.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT15_PDR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT16_FUN.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT14_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT18_DIR.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT2_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT6_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT16_PDR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT5_DOUT.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT13_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT16_DOUT.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT17_FUN.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT15_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT17_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT17_PDR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT10_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT18_FUN.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT16_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT3_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT0_DIR.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT18_PDR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT6_DOUT.VALUE=0 -DRIVER.I2C.VAR.I2C1_STOPBITS.VALUE=2 -DRIVER.I2C.VAR.I2C1_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.I2C.VAR.I2C1_BASE_PORT.VALUE=0xFFF7D44C -DRIVER.I2C.VAR.I2C2_PARITYENA.VALUE=0 -DRIVER.I2C.VAR.I2C1_DATACOUNT.VALUE=8 -DRIVER.I2C.VAR.I2C2_PORT_BIT0_PULL.VALUE=2 -DRIVER.I2C.VAR.I2C1_IGNACK.VALUE=0 -DRIVER.I2C.VAR.I2C1_ADDRMODE.VALUE=7BIT_AMODE -DRIVER.I2C.VAR.I2C2_ALINTLVL.VALUE=0 -DRIVER.I2C.VAR.I2C2_TXDMA.VALUE=0 -DRIVER.I2C.VAR.I2C1_BC_VALUE.VALUE=0x0003 -DRIVER.I2C.VAR.I2C1_TXRX_VALUE.VALUE=0 -DRIVER.I2C.VAR.I2C2_ICXRDYINTLVL.VALUE=0 -DRIVER.I2C.VAR.I2C2_MODCLK.VALUE=8 -DRIVER.I2C.VAR.I2C2_PORT_BIT1_PULL.VALUE=2 -DRIVER.I2C.VAR.I2C2_PORT_BIT0_DIR.VALUE=0 -DRIVER.I2C.VAR.I2C1_ALINTENA.VALUE=0 -DRIVER.I2C.VAR.I2C1_PRESCALE.VALUE=8 -DRIVER.I2C.VAR.I2C2_ARDYINTENA.VALUE=0 -DRIVER.I2C.VAR.I2C2_PORT_BIT1_DIR.VALUE=0 -DRIVER.I2C.VAR.I2C2_PORT_BIT0_FUN.VALUE=0 -DRIVER.I2C.VAR.I2C1_MSMODE.VALUE=1 -DRIVER.I2C.VAR.I2C1_AASLVL.VALUE=0 -DRIVER.I2C.VAR.I2C2_PORT_BIT0_PDR.VALUE=0 -DRIVER.I2C.VAR.I2C2_RM_ENA.VALUE=0 -DRIVER.I2C.VAR.I2C2_PORT_BIT1_FUN.VALUE=0 -DRIVER.I2C.VAR.I2C2_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.I2C.VAR.I2C2_SCDLVL.VALUE=0 -DRIVER.I2C.VAR.I2C2_PORT_BIT1_PDR.VALUE=0 -DRIVER.I2C.VAR.I2C2_STPCND.VALUE=1 -DRIVER.I2C.VAR.I2C1_ALINTLVL.VALUE=0 -DRIVER.I2C.VAR.I2C2_PORT_BIT0_PSL.VALUE=1 -DRIVER.I2C.VAR.I2C1_ARDYINTENA.VALUE=0 -DRIVER.I2C.VAR.I2C2_ARDYINTLVL.VALUE=0 -DRIVER.I2C.VAR.I2C1_ICRRDYINTENA.VALUE=0 -DRIVER.I2C.VAR.I2C2_BASE_PORT.VALUE=0xFFF7D54C -DRIVER.I2C.VAR.I2C1_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.I2C.VAR.I2C2_PORT_BIT1_PSL.VALUE=1 -DRIVER.I2C.VAR.I2C2_DATACOUNT.VALUE=8 -DRIVER.I2C.VAR.I2C1_LENGTH.VALUE=8 -DRIVER.I2C.VAR.I2C1_TXRX.VALUE=TRANSMITTER -DRIVER.I2C.VAR.I2C2_NACKINTENA.VALUE=0 -DRIVER.I2C.VAR.I2C2_IGNACK.VALUE=0 -DRIVER.I2C.VAR.I2C1_PORT_BIT0_DOUT.VALUE=0 -DRIVER.I2C.VAR.I2C1_STACND.VALUE=1 -DRIVER.I2C.VAR.I2C2_TXRX.VALUE=TRANSMITTER -DRIVER.I2C.VAR.I2C1_PORT_BIT0_DIR.VALUE=0 -DRIVER.I2C.VAR.I2C1_ARDYINTLVL.VALUE=0 -DRIVER.I2C.VAR.I2C1_ICRRDYINTLVL.VALUE=0 -DRIVER.I2C.VAR.I2C1_PARITYENA.VALUE=0 -DRIVER.I2C.VAR.I2C1_BASE.VALUE=0xFFF7D400 -DRIVER.I2C.VAR.I2C1_PORT_BIT1_DIR.VALUE=0 -DRIVER.I2C.VAR.I2C1_PORT_BIT1_DOUT.VALUE=0 -DRIVER.I2C.VAR.I2C1_ICXRDYINTENA.VALUE=0 -DRIVER.I2C.VAR.I2C1_PORT_BIT0_FUN.VALUE=0 -DRIVER.I2C.VAR.I2C1_NACKINTENA.VALUE=0 -DRIVER.I2C.VAR.I2C2_NACKINTLVL.VALUE=0 -DRIVER.I2C.VAR.I2C2_BAUDRATE.VALUE=100 -DRIVER.I2C.VAR.I2C1_AAS.VALUE=0 -DRIVER.I2C.VAR.I2C1_BCM.VALUE=0 -DRIVER.I2C.VAR.I2C1_PORT_BIT0_PDR.VALUE=0 -DRIVER.I2C.VAR.I2C2_MSMODE.VALUE=1 -DRIVER.I2C.VAR.I2C2_STOPBITS.VALUE=2 -DRIVER.I2C.VAR.I2C1_BC.VALUE=8_BIT -DRIVER.I2C.VAR.I2C1_PORT_BIT1_FUN.VALUE=0 -DRIVER.I2C.VAR.I2C2_EVENPARITY.VALUE=0 -DRIVER.I2C.VAR.I2C2_ICRRDYINTENA.VALUE=0 -DRIVER.I2C.VAR.I2C1_FDF.VALUE=0 -DRIVER.I2C.VAR.I2C2_BASE.VALUE=0xFFF7D500 -DRIVER.I2C.VAR.I2C2_AASLVL.VALUE=0 -DRIVER.I2C.VAR.I2C2_AAS.VALUE=0 -DRIVER.I2C.VAR.I2C1_ICCH.VALUE=37 -DRIVER.I2C.VAR.I2C2_BCM.VALUE=0 -DRIVER.I2C.VAR.I2C2_BC.VALUE=2_BIT -DRIVER.I2C.VAR.I2C1_MODCLK.VALUE=8 -DRIVER.I2C.VAR.I2C1_ADDRMODE_VALUE.VALUE=0x0001 -DRIVER.I2C.VAR.I2C2_PORT_BIT0_DOUT.VALUE=0 -DRIVER.I2C.VAR.I2C1_ICCL.VALUE=37 -DRIVER.I2C.VAR.I2C1_PORT_BIT1_PDR.VALUE=0 -DRIVER.I2C.VAR.I2C2_ADDRMODE.VALUE=7BIT_AMODE -DRIVER.I2C.VAR.I2C2_FDF.VALUE=0 -DRIVER.I2C.VAR.I2C1_PORT_BIT0_PSL.VALUE=1 -DRIVER.I2C.VAR.I2C1_RXDMA.VALUE=0 -DRIVER.I2C.VAR.I2C1_PORT_BIT1_PSL.VALUE=1 -DRIVER.I2C.VAR.I2C2_BC_VALUE.VALUE=0x0003 -DRIVER.I2C.VAR.I2C1_PORT_BIT0_PULL.VALUE=2 -DRIVER.I2C.VAR.I2C1_ICXRDYINTLVL.VALUE=0 -DRIVER.I2C.VAR.I2C2_ICCH.VALUE=37 -DRIVER.I2C.VAR.I2C1_NACKINTLVL.VALUE=0 -DRIVER.I2C.VAR.I2C2_ICCL.VALUE=37 -DRIVER.I2C.VAR.I2C2_PORT_BIT1_DOUT.VALUE=0 -DRIVER.I2C.VAR.I2C1_SCD.VALUE=0 -DRIVER.I2C.VAR.I2C1_TXDMA.VALUE=0 -DRIVER.I2C.VAR.I2C2_LENGTH.VALUE=8 -DRIVER.I2C.VAR.I2C1_EVENPARITY.VALUE=0 -DRIVER.I2C.VAR.I2C1_RM_ENA.VALUE=0 -DRIVER.I2C.VAR.I2C2_ICRRDYINTLVL.VALUE=0 -DRIVER.I2C.VAR.I2C2_ALINTENA.VALUE=0 -DRIVER.I2C.VAR.I2C2_PRESCALE.VALUE=8 -DRIVER.I2C.VAR.I2C2_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.I2C.VAR.I2C1_SCDLVL.VALUE=0 -DRIVER.I2C.VAR.I2C2_SCD.VALUE=0 -DRIVER.I2C.VAR.I2C1_PORT_BIT1_PULL.VALUE=2 -DRIVER.I2C.VAR.I2C2_TXRX_VALUE.VALUE=0 -DRIVER.I2C.VAR.I2C1_STPCND.VALUE=1 -DRIVER.I2C.VAR.I2C2_ICXRDYINTENA.VALUE=0 -DRIVER.I2C.VAR.I2C2_ADDRMODE_VALUE.VALUE=0x0001 -DRIVER.I2C.VAR.I2C1_BAUDRATE.VALUE=100 -DRIVER.I2C.VAR.I2C2_STACND.VALUE=1 -DRIVER.I2C.VAR.I2C2_RXDMA.VALUE=0 -DRIVER.DCC.VAR.DCC1_ENABLE_KEY.VALUE=10 -DRIVER.DCC.VAR.PINMUX_BASE.VALUE=0xFFFFEA00 -DRIVER.DCC.VAR.DCC1_DETECTION_TIME.VALUE=2500.00 -DRIVER.DCC.VAR.DCC1_CLOCK_SOURCE1_VALUE.VALUE=0x0002 -DRIVER.DCC.VAR.DCC1_ENABLE_ERROR_INTERRUPT.VALUE=0xA -DRIVER.DCC.VAR.DCC2_ENABLE.VALUE=0xA -DRIVER.DCC.VAR.PINMUX_BASE_PORT.VALUE=0xFFFFEA40 -DRIVER.DCC.VAR.DCC2_ENABLE_ERROR_INTERRUPT.VALUE=0xA -DRIVER.DCC.VAR.DCC2_CLOCK_SOURCE0_VALUE.VALUE=0x0001 -DRIVER.DCC.VAR.DCC2_CLOCK_SOURCE0_FREQ.VALUE=0 -DRIVER.DCC.VAR.DCC2_VALID0_SEED.VALUE=0 -DRIVER.DCC.VAR.DCC2_CLKT_N2HET2_0_FREQ.VALUE=1 -DRIVER.DCC.VAR.DCC2_CLOCK_SOURCE1_FREQ.VALUE=0 -DRIVER.DCC.VAR.DCC2_DETECTION_TIME.VALUE=2500.00 -DRIVER.DCC.VAR.DCC2_CLOCK_DRIFT.VALUE=1.0 -DRIVER.DCC.VAR.DCC2_CLOCK_SOURCE1_VALUE.VALUE=0x0002 -DRIVER.DCC.VAR.DCC1_CLKT_N2HET1_31_FREQ.VALUE=1 -DRIVER.DCC.VAR.DCC2_COUNT0_SEED.VALUE=0 -DRIVER.DCC.VAR.DCC2_CLOCK_SOURCE0.VALUE=OSCIN -DRIVER.DCC.VAR.DCC2_CLOCK_SOURCE1.VALUE=VCLK -DRIVER.DCC.VAR.DCC1_CLOCK_SOURCE0_FREQ.VALUE=16.0 -DRIVER.DCC.VAR.DCC1_VALID0_SEED.VALUE=792 -DRIVER.DCC.VAR.DCC1_BASE.VALUE=0xFFFFEC00 -DRIVER.DCC.VAR.DCC2_COUNT1_SEED.VALUE=0 -DRIVER.DCC.VAR.DCC1_CLOCK_SOURCE1_FREQ.VALUE=300.0 -DRIVER.DCC.VAR.DCC1_CLOCK_DRIFT.VALUE=1.0 -DRIVER.DCC.VAR.DCC1_ENABLE.VALUE=0xA -DRIVER.DCC.VAR.DCC1_ENABLE_SINGLESHOT_MODE.VALUE=0x5 -DRIVER.DCC.VAR.DCC2_ENABLE_SINGLESHOT_MODE.VALUE=0x5 -DRIVER.DCC.VAR.DCC2_BASE.VALUE=0xFFFFF400 -DRIVER.DCC.VAR.DCC1_DONE_INTERRUPT_ENABLE.VALUE=0xA -DRIVER.DCC.VAR.DCC2_DONE_INTERRUPT_ENABLE.VALUE=0xA -DRIVER.DCC.VAR.DCC2_ENABLE_KEY.VALUE=0xA -DRIVER.DCC.VAR.DCC1_COUNT0_SEED.VALUE=39204 -DRIVER.DCC.VAR.DCC1_CLOCK_SOURCE0_VALUE.VALUE=0x0001 -DRIVER.DCC.VAR.DCC1_CLOCK_SOURCE0.VALUE=OSCIN -DRIVER.DCC.VAR.DCC1_CLOCK_SOURCE1.VALUE=PLL1 -DRIVER.DCC.VAR.CLKT_TCK_FREQ.VALUE=12.0 -DRIVER.DCC.VAR.DCC1_COUNT1_SEED.VALUE=742500 -DRIVER.PINMUX.VAR.EQEP2A_FILTER.VALUE=0 -DRIVER.PINMUX.VAR.MUX61_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX53_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX45_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX37_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX29_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX7_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX61_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX53_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX45_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX37_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX29_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX7_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_SOC4A_SELECT.VALUE=ON -DRIVER.PINMUX.VAR.ETPWM_TIME_BASE_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX61_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX53_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX50_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX45_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX42_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX37_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX34_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX29_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX26_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX18_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX61_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX53_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX45_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX37_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX29_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX61_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX53_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX45_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX37_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX29_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX61_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX53_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX45_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX37_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX29_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX99_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_96_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_88_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_5_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX30_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX22_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX14_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX30_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX22_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX14_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX30_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX22_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX14_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_81_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_73_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_65_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_57_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_49_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX30_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX22_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX14_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL5_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX30_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX22_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX14_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL5_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX30_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX22_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX14_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX101_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL55_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL47_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL39_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_50_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_42_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_34_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_26_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_18_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.ECAP5_FILTER.VALUE=0 -DRIVER.PINMUX.VAR.EMIF_OUTPUT_ENABLE_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.PINMUX10.VALUE="PINMUX_BALL_K17_EMIF_nCS_3 | PINMUX_BALL_M17_EMIF_nCS_4 | PINMUX_BALL_R3_EMIF_nRAS | PINMUX_BALL_P3_EMIF_nWAIT" -DRIVER.PINMUX.VAR.MUX11_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL40_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL32_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL24_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL16_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_11_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX11.VALUE="PINMUX_BALL_D17_EMIF_nWE | PINMUX_BALL_E9_ETMDATA_08 | PINMUX_BALL_E8_ETMDATA_09 | PINMUX_BALL_E7_ETMDATA_10" -DRIVER.PINMUX.VAR.PINMUX20.VALUE="PINMUX_BALL_M1_GIOA_7 | PINMUX_BALL_F2_GIOB_2 | PINMUX_BALL_W10_GIOB_3 | PINMUX_BALL_J2_GIOB_6" -DRIVER.PINMUX.VAR.PINMUX12.VALUE="PINMUX_BALL_E6_ETMDATA_11 | PINMUX_BALL_E13_ETMDATA_12 | PINMUX_BALL_E12_ETMDATA_13 | PINMUX_BALL_E11_ETMDATA_14" -DRIVER.PINMUX.VAR.PINMUX21.VALUE="PINMUX_BALL_F1_GIOB_7 | PINMUX_BALL_R2_MIBSPI1NCS_0 | PINMUX_BALL_F3_MIBSPI1NCS_1 | PINMUX_BALL_G3_MIBSPI1NCS_2" -DRIVER.PINMUX.VAR.PINMUX13.VALUE="PINMUX_BALL_E10_ETMDATA_15 | PINMUX_BALL_K15_ETMDATA_16 | PINMUX_BALL_L15_ETMDATA_17 | PINMUX_BALL_M15_ETMDATA_18" -DRIVER.PINMUX.VAR.ECAP3_FILTER_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.PINMUX30.VALUE="PINMUX_BALL_E18_N2HET1_08 | PINMUX_BALL_V7_N2HET1_09 | PINMUX_BALL_D19_N2HET1_10 | PINMUX_BALL_E3_N2HET1_11" -DRIVER.PINMUX.VAR.PINMUX22.VALUE="PINMUX_BALL_J3_MIBSPI1NCS_3 | PINMUX_BALL_G19_MIBSPI1NENA | PINMUX_BALL_V9_MIBSPI3CLK | PINMUX_BALL_V10_MIBSPI3NCS_0" -DRIVER.PINMUX.VAR.PINMUX14.VALUE="PINMUX_BALL_N15_ETMDATA_19 | PINMUX_BALL_E5_ETMDATA_20 | PINMUX_BALL_F5_ETMDATA_21 | PINMUX_BALL_G5_ETMDATA_22" -DRIVER.PINMUX.VAR.MUX92_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX84_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX76_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX68_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX31.VALUE="PINMUX_BALL_B4_N2HET1_12 | PINMUX_BALL_N2_N2HET1_13 | PINMUX_BALL_N1_N2HET1_15 | PINMUX_BALL_A4_N2HET1_16" -DRIVER.PINMUX.VAR.PINMUX23.VALUE="PINMUX_BALL_V5_MIBSPI3NCS_1 | PINMUX_BALL_B2_MIBSPI3NCS_2 | PINMUX_BALL_C3_MIBSPI3NCS_3 | PINMUX_BALL_W9_MIBSPI3NENA" -DRIVER.PINMUX.VAR.PINMUX15.VALUE="PINMUX_BALL_K5_ETMDATA_23 | PINMUX_BALL_L5_ETMDATA_24 | PINMUX_BALL_M5_ETMDATA_25 | PINMUX_BALL_N5_ETMDATA_26" -DRIVER.PINMUX.VAR.PINMUX32.VALUE="PINMUX_BALL_A13_N2HET1_17 | PINMUX_BALL_J1_N2HET1_18 | PINMUX_BALL_B13_N2HET1_19 | PINMUX_BALL_P2_N2HET1_20" -DRIVER.PINMUX.VAR.PINMUX24.VALUE="PINMUX_BALL_W8_MIBSPI3SIMO | PINMUX_BALL_V8_MIBSPI3SOMI | PINMUX_BALL_H19_MIBSPI5CLK | PINMUX_BALL_E19_MIBSPI5NCS_0" -DRIVER.PINMUX.VAR.PINMUX16.VALUE="PINMUX_BALL_P5_ETMDATA_27 | PINMUX_BALL_R5_ETMDATA_28 | PINMUX_BALL_R6_ETMDATA_29 | PINMUX_BALL_R7_ETMDATA_30" -DRIVER.PINMUX.VAR.SIGNAL56_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL48_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX131_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX123_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX115_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX107_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX33.VALUE="PINMUX_BALL_H4_N2HET1_21 | PINMUX_BALL_B3_N2HET1_22 | PINMUX_BALL_J4_N2HET1_23 | PINMUX_BALL_P1_N2HET1_24" -DRIVER.PINMUX.VAR.PINMUX25.VALUE="PINMUX_BALL_B6_MIBSPI5NCS_1 | PINMUX_BALL_W6_MIBSPI5NCS_2 | PINMUX_BALL_T12_MIBSPI5NCS_3 | PINMUX_BALL_H18_MIBSPI5NENA" -DRIVER.PINMUX.VAR.PINMUX17.VALUE="PINMUX_BALL_R8_ETMDATA_31 | PINMUX_BALL_R9_ETMTRACECLKIN | PINMUX_BALL_R10_ETMTRACECLKOUT | PINMUX_BALL_R11_ETMTRACECTL" -DRIVER.PINMUX.VAR.SIGNAL56_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL48_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX131_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX123_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX115_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX107_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.GIOB6_DMA_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.EQEP2B_FILTER_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.ETPWM7_EQEPERR_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.PINMUX34.VALUE="PINMUX_BALL_A14_N2HET1_26 | PINMUX_BALL_K19_N2HET1_28 | PINMUX_BALL_B11_N2HET1_30 | PINMUX_BALL_D8_N2HET2_01" -DRIVER.PINMUX.VAR.PINMUX26.VALUE="PINMUX_BALL_J19_MIBSPI5SIMO_0 | PINMUX_BALL_E16_MIBSPI5SIMO_1 | PINMUX_BALL_H17_MIBSPI5SIMO_2 | PINMUX_BALL_G17_MIBSPI5SIMO_3" -DRIVER.PINMUX.VAR.PINMUX18.VALUE="PINMUX_BALL_B15_FRAYTX1 | PINMUX_BALL_B8_FRAYTX2 | PINMUX_BALL_B16_FRAYTXEN1 | PINMUX_BALL_B9_FRAYTXEN2" -DRIVER.PINMUX.VAR.MUX131_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX123_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX115_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX107_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX35.VALUE="PINMUX_BALL_D7_N2HET2_02 | PINMUX_BALL_D3_N2HET2_12 | PINMUX_BALL_D2_N2HET2_13 | PINMUX_BALL_D1_N2HET2_14" -DRIVER.PINMUX.VAR.PINMUX27.VALUE="PINMUX_BALL_J18_MIBSPI5SOMI_0 | PINMUX_BALL_E17_MIBSPI5SOMI_1 | PINMUX_BALL_H16_MIBSPI5SOMI_2 | PINMUX_BALL_G16_MIBSPI5SOMI_3" -DRIVER.PINMUX.VAR.PINMUX19.VALUE="PINMUX_BALL_C1_GIOA_2 | PINMUX_BALL_E1_GIOA_3 | PINMUX_BALL_B5_GIOA_5 | PINMUX_BALL_H3_GIOA_6" -DRIVER.PINMUX.VAR.MUX131_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX123_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX115_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX107_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX36.VALUE="PINMUX_BALL_P4_N2HET2_19 | PINMUX_BALL_T5_N2HET2_20 | PINMUX_BALL_T4_MII_RXCLK | PINMUX_BALL_U7_MII_TX_CLK" -DRIVER.PINMUX.VAR.PINMUX28.VALUE="PINMUX_BALL_K18_N2HET1_00 | PINMUX_BALL_V2_N2HET1_01 | PINMUX_BALL_W5_N2HET1_02 | PINMUX_BALL_U1_N2HET1_03" -DRIVER.PINMUX.VAR.MUX131_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX123_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX115_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX107_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX98_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX37.VALUE="PINMUX_BALL_E2_N2HET2_03 | PINMUX_BALL_N3_N2HET2_07" -DRIVER.PINMUX.VAR.PINMUX29.VALUE="PINMUX_BALL_B12_N2HET1_04 | PINMUX_BALL_V6_N2HET1_05 | PINMUX_BALL_W3_N2HET1_06 | PINMUX_BALL_T1_N2HET1_07" -DRIVER.PINMUX.VAR.MUX131_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX123_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX115_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX107_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX98_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX98_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX7_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL3_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX98_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX80.VALUE=SIGNAL_AD2EVT_T10 -DRIVER.PINMUX.VAR.SIGNAL41_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL33_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL25_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL17_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX100_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX98_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.TEMP2_ENABLE.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX81.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL41_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL33_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL25_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL17_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX100_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX98_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX90.VALUE="SIGNAL_MII_RX_DV_U6 | SIGNAL_MII_RX_ER_U5 | SIGNAL_MII_RXCLK_T4 | SIGNAL_MII_RXD_0_U4" -DRIVER.PINMUX.VAR.PINMUX82.VALUE=0 -DRIVER.PINMUX.VAR.MUX127_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX119_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX100_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_133_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_125_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_117_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_109_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX91.VALUE="SIGNAL_MII_RXD_1_T3 | SIGNAL_MII_RXD_2_U3 | SIGNAL_MII_RXD_3_V3 | SIGNAL_MII_TX_CLK_U7" -DRIVER.PINMUX.VAR.PINMUX83.VALUE=SIGNAL_GIOA_0_A5 -DRIVER.PINMUX.VAR.MUX100_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX92.VALUE="SIGNAL_N2HET1_17_A13 | SIGNAL_N2HET1_19_B13 | SIGNAL_N2HET1_21_H4 | SIGNAL_N2HET1_23_J4" -DRIVER.PINMUX.VAR.PINMUX84.VALUE="SIGNAL_GIOA_1_C2 | SIGNAL_GIOA_2_C1 | SIGNAL_GIOA_3_E1 | SIGNAL_GIOA_4_A6" -DRIVER.PINMUX.VAR.MUX100_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX91_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX83_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX75_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX67_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX59_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX93.VALUE="SIGNAL_N2HET1_25_M3 | SIGNAL_N2HET1_27_A9 | SIGNAL_N2HET1_29_A3 | SIGNAL_N2HET1_31_J17" -DRIVER.PINMUX.VAR.PINMUX85.VALUE="SIGNAL_GIOA_5_B5 | SIGNAL_GIOA_6_H3 | SIGNAL_GIOA_7_M1 | SIGNAL_GIOB_0_M2" -DRIVER.PINMUX.VAR.MUX100_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX91_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX83_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX75_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX67_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX59_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.GIOB0_DMA_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.GIOA2_DMA_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.PINMUX94.VALUE="SIGNAL_N2HET2_00_D6 | SIGNAL_N2HET2_01_D8 | SIGNAL_N2HET2_02_D7 | SIGNAL_N2HET2_03_E2" -DRIVER.PINMUX.VAR.PINMUX86.VALUE="SIGNAL_GIOB_1_K2 | SIGNAL_GIOB_2_F2 | SIGNAL_GIOB_3_W10 | SIGNAL_GIOB_4_G1" -DRIVER.PINMUX.VAR.MUX91_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX83_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX75_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX67_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX61_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX59_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX53_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX45_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX37_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX29_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_110_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_102_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX95.VALUE="SIGNAL_N2HET2_04_D13 | SIGNAL_N2HET2_05_D12 | SIGNAL_N2HET2_06_D11 | SIGNAL_N2HET2_07_N3" -DRIVER.PINMUX.VAR.PINMUX87.VALUE="SIGNAL_GIOB_5_G2 | SIGNAL_GIOB_6_J2 | SIGNAL_GIOB_7_F1 | SIGNAL_MDIO_F4" -DRIVER.PINMUX.VAR.MUX91_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX83_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX75_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX67_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX59_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM2_EQEPERR12.VALUE=EQEPERR12 -DRIVER.PINMUX.VAR.PINMUX96.VALUE="SIGNAL_N2HET2_08_K16 | SIGNAL_N2HET2_09_L16 | SIGNAL_N2HET2_10_M16 | SIGNAL_N2HET2_11_N16" -DRIVER.PINMUX.VAR.PINMUX88.VALUE="SIGNAL_MIBSPI1NCS_4_U10 | SIGNAL_MIBSPI1NCS_5_U9" -DRIVER.PINMUX.VAR.SIGNAL10_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX91_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX83_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX75_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX67_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX59_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX6_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX97.VALUE="SIGNAL_N2HET2_12_D3 | SIGNAL_N2HET2_13_D2 | SIGNAL_N2HET2_14_D1 | SIGNAL_N2HET2_15_K4" -DRIVER.PINMUX.VAR.PINMUX89.VALUE="SIGNAL_MII_COL_W4 | SIGNAL_MII_CRS_V4" -DRIVER.PINMUX.VAR.SIGNAL10_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX91_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX83_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX75_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX67_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX59_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX6_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX98.VALUE="SIGNAL_N2HET2_16_L4 | SIGNAL_N2HET2_18_N4 | SIGNAL_N2HET2_20_T5 | SIGNAL_N2HET2_22_T7" -DRIVER.PINMUX.VAR.MUX6_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX99.VALUE="SIGNAL_nTZ1_1_N19 | SIGNAL_nTZ1_2_F1 | SIGNAL_nTZ1_3_J3" -DRIVER.PINMUX.VAR.MUX6_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.EQEP1A_FILTER.VALUE=0 -DRIVER.PINMUX.VAR.MUX60_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX52_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX44_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX36_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX28_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX6_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX60_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX52_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX44_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX36_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX28_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX6_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.EQEP1I_FILTER_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.ETPWM_SOC3A_SELECT.VALUE=ON -DRIVER.PINMUX.VAR.MUX60_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX52_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX44_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX36_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX28_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX60_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX52_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX44_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX36_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX28_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX60_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX52_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX44_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX36_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX28_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX60_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX52_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX44_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX36_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX28_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.TEMP3_ENABLE_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX120_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX112_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX104_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_94_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_86_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_78_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_3_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX21_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX13_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX21_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX13_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM3_EQEPERR_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.GIOA_DISABLE_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX30_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX22_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX21_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX14_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX13_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_71_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_63_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_55_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_47_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_39_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX21_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX13_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL4_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX21_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX13_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL4_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX21_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX13_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX95_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX87_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX79_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL61_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL53_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL45_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL37_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL29_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_40_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_32_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_24_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_16_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.ECAP3_FILTER.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM7_EQEPERR12.VALUE=EQEPERR12 -DRIVER.PINMUX.VAR.MUX129_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX129_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_TBCLK_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX129_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL30_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL22_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL14_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX129_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX129_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX129_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.I2C1.VALUE=0 -DRIVER.PINMUX.VAR.I2C2.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL55_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL47_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL39_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX130_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX122_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX114_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX106_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL55_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL47_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL39_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX130_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX122_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX114_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX106_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX130_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX122_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX114_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX106_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL8_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.GATE_EMIF_CLK.VALUE=0 -DRIVER.PINMUX.VAR.MUX130_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX122_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX114_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX106_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX130_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX122_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX114_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX106_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX97_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX89_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX130_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX122_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX114_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX106_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX97_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX89_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.EQEP1A_FILTER_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX97_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX89_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX80_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX72_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX64_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX56_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX48_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL1_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.GIOA0_DMA.VALUE=0 -DRIVER.PINMUX.VAR.MUX97_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX89_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL40_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL32_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL24_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL16_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX97_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX89_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL40_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL32_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL24_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL16_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX97_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX89_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.GIOB5_DMA_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.GIOA7_DMA_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.PIN_MUX_131_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_123_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_115_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_107_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX90_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX82_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX74_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX66_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX58_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX90_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX82_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX74_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX66_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX58_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX90_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX82_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX74_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX66_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX58_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX3_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_100_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX90_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX82_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX74_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX66_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX58_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX90_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX82_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX74_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX66_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX58_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX5_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX90_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX82_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX74_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX66_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX58_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX5_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.EQEP1S_FILTER_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX131_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX123_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX115_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX107_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX5_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX5_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX51_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX43_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX35_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX27_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX19_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX5_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX51_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX43_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX35_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX27_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX19_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX5_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.GIOA1_DMA_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.ECAP5_FILTER_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.ETPWM_SOC2A_SELECT.VALUE=ON -DRIVER.PINMUX.VAR.MUX51_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX43_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX41_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX35_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX33_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX27_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX25_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX19_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX17_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_99_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_8_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.GIOA1_DMA.VALUE=0 -DRIVER.PINMUX.VAR.MUX51_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX43_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX35_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX27_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX19_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX51_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX43_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX35_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX27_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX19_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX51_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX43_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX35_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX27_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX19_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.ALT_ADC_SELECT.VALUE=1 -DRIVER.PINMUX.VAR.MUX98_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_92_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_84_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_76_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_68_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_1_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX20_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX12_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX20_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX12_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX20_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX12_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL58_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_61_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_53_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_45_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_37_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_29_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX20_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX12_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL3_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX20_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX12_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL3_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX20_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX12_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX100_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL51_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL43_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL35_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL27_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL19_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_30_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_22_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_14_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.ECAP1_FILTER.VALUE=0 -DRIVER.PINMUX.VAR.CAN4.VALUE=0 -DRIVER.PINMUX.VAR.MUX128_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX128_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX128_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX10_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL20_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL12_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.GIOB0_DMA.VALUE=0 -DRIVER.PINMUX.VAR.GIOA2_DMA.VALUE=0 -DRIVER.PINMUX.VAR.MUX128_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX128_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX128_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.ETHERNET_SELECT.VALUE=MII -DRIVER.PINMUX.VAR.MUX91_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX83_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX75_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX67_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX59_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM5_EQEPERR12.VALUE=EQEPERR12 -DRIVER.PINMUX.VAR.CONCOUNT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL54_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL46_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL38_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX121_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX113_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX105_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL54_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL46_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL38_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX121_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX113_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX105_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.EQEP2I_FILTER_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX121_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX113_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX105_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL6_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX121_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX113_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX105_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX121_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX113_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX105_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX96_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX88_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX121_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX113_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX105_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX96_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX88_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX96_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX88_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX6_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_128_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX96_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX88_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL31_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL23_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL15_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX96_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX88_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.TEMP_CHECK.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL31_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL23_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL15_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX96_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX88_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM4_EQEPERR_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.GIOB_DISABLE_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX134_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX126_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX118_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_121_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_113_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_105_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.GIOB1_DMA.VALUE=0 -DRIVER.PINMUX.VAR.GIOA3_DMA.VALUE=0 -DRIVER.PINMUX.VAR.EQEP2I_FILTER.VALUE=0 -DRIVER.PINMUX.VAR.MUX81_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX73_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX65_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX57_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX49_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX81_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX73_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX65_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX57_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX49_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_TZ2_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX81_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX73_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX65_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX60_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX57_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX52_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX49_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX44_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX36_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX28_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX81_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX73_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX65_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX57_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX49_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.EQEP2B_FILTER.VALUE=0 -DRIVER.PINMUX.VAR.MUX81_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX73_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX65_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX57_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX49_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX4_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX81_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX73_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX65_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX57_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX49_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX4_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.GIOB4_DMA_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.GIOA6_DMA_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.ECAP.VALUE=0 -DRIVER.PINMUX.VAR.MUX4_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX4_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX50_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX42_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX34_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX26_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX18_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX4_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX50_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX42_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX34_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX26_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX18_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX4_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_SOC1A_SELECT.VALUE=ON -DRIVER.PINMUX.VAR.MUX50_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX42_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX34_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX26_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX18_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_97_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_89_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_6_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX50_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX42_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX34_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX26_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX18_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL9_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX50_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX42_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX34_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX26_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX18_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL9_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX50_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX42_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX34_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX26_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX18_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.ECAP2_FILTER_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX111_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX103_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_90_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_82_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_74_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_66_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_58_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.GIOB2_DMA.VALUE=0 -DRIVER.PINMUX.VAR.GIOA4_DMA.VALUE=0 -DRIVER.PINMUX.VAR.MUX11_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX11_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.GIOA0_DMA_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.EQEP2A_FILTER_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX21_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX13_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX11_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL56_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL48_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_51_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_43_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_35_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_27_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_19_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX11_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.ECAP6_FILTER.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL2_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX11_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_TBCLK_SYNC_ENABLE.VALUE=0 -DRIVER.PINMUX.VAR.AD1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL2_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX11_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.AD2.VALUE=0 -DRIVER.PINMUX.VAR.MUX94_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX86_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX78_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL41_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL33_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL25_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL17_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_20_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_12_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX127_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX119_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX127_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX119_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX127_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX119_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL10_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX127_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX119_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX127_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX119_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX127_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX119_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.EQEP2S_FILTER_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX9_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.GIOB3_DMA.VALUE=0 -DRIVER.PINMUX.VAR.GIOA5_DMA.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL61_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL53_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL45_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL37_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL29_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX120_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX112_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX104_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL61_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL53_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL45_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL37_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL29_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX120_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX112_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX104_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX129_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX120_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX112_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX104_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL4_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.ALT_ADC.VALUE=0 -DRIVER.PINMUX.VAR.I2C.VALUE=0 -DRIVER.PINMUX.VAR.MUX120_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX112_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX104_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX120_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX112_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX104_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX95_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX87_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX79_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.TEMP3_ENABLE.VALUE=0 -DRIVER.PINMUX.VAR.MUX120_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX112_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX104_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX95_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX87_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX79_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX95_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX87_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX79_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX71_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX63_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX55_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX47_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX39_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_134_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_126_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_118_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX95_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX87_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX79_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM3_EQEPERR12.VALUE=EQEPERR12 -DRIVER.PINMUX.VAR.SIGNAL30_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL22_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL14_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX95_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX87_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX79_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL30_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL22_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL14_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX95_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX87_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX79_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.TEMP2_ENABLE_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.PIN_MUX_111_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_103_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.EQEP1I_FILTER.VALUE=0 -DRIVER.PINMUX.VAR.MUX80_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX72_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX64_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX56_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX48_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.HET1.VALUE=0 -DRIVER.PINMUX.VAR.MUX80_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX72_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX64_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX56_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX48_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_SOC7A_SELECT.VALUE=ON -DRIVER.PINMUX.VAR.HET2.VALUE=0 -DRIVER.PINMUX.VAR.MUX80_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX72_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX64_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX56_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX48_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX2_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.GIOB4_DMA.VALUE=0 -DRIVER.PINMUX.VAR.GIOA6_DMA.VALUE=0 -DRIVER.PINMUX.VAR.MUX80_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX72_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX64_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX56_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX48_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.EQEP1B_FILTER.VALUE=0 -DRIVER.PINMUX.VAR.MUX80_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX72_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX64_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX56_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX48_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX3_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX80_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX72_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX64_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX56_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX48_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX3_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX130_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX122_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX114_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX106_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX3_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX3_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.EMIF.VALUE=0 -DRIVER.PINMUX.VAR.MUX41_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX33_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX25_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX17_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX3_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_TZ1.VALUE=ASYNC -DRIVER.PINMUX.VAR.MUX41_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX33_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX25_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX17_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX3_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_TZ2.VALUE=ASYNC -DRIVER.PINMUX.VAR.MUX41_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX40_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX33_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX32_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX25_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX24_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX17_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX16_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_95_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_87_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_79_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_4_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_TZ3.VALUE=ASYNC -DRIVER.PINMUX.VAR.MUX41_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX33_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX25_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX17_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL8_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX41_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX33_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX25_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX17_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL8_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX41_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX33_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX25_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX17_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.GIOB3_DMA_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.GIOA5_DMA_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX97_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX89_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_80_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_72_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_64_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_56_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_48_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.GIOA.VALUE=0 -DRIVER.PINMUX.VAR.GIOB.VALUE=0 -DRIVER.PINMUX.VAR.MUX10_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.GIOB_DISABLE.VALUE=0 -DRIVER.PINMUX.VAR.MUX10_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX10_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL54_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL46_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL38_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_41_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_33_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_25_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_17_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.GIOB5_DMA.VALUE=0 -DRIVER.PINMUX.VAR.GIOA7_DMA.VALUE=0 -DRIVER.PINMUX.VAR.MUX10_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.ECAP4_FILTER.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL1_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX10_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL1_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX10_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM5_EQEPERR_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.SIGNAL31_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL23_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL15_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_10_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL59_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX134_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX126_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX118_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL59_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX134_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX126_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX118_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.EQEP.VALUE=0 -DRIVER.PINMUX.VAR.MUX134_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX126_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX118_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX134_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX126_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX118_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX134_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX126_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX118_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX134_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX126_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX118_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX90_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX82_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX74_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX66_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX58_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL9_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MIBSPI1.VALUE=0 -DRIVER.PINMUX.VAR.MIBSPI2.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL60_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL52_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL44_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL36_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL28_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX111_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX103_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MIBSPI3.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL60_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL52_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL44_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL36_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL28_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX111_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX103_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MIBSPI4.VALUE=0 -DRIVER.PINMUX.VAR.OHCI0.VALUE=0 -DRIVER.PINMUX.VAR.MUX111_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX103_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL2_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.GIOB6_DMA.VALUE=0 -DRIVER.PINMUX.VAR.MIBSPI5.VALUE=0 -DRIVER.PINMUX.VAR.W2FC.VALUE=0 -DRIVER.PINMUX.VAR.OHCI1.VALUE=0 -DRIVER.PINMUX.VAR.MUX111_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX103_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.EQEP2S_FILTER.VALUE=0 -DRIVER.PINMUX.VAR.MUX111_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX103_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX94_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX86_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX78_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.TEMP1_ENABLE.VALUE=0 -DRIVER.PINMUX.VAR.MUX111_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX103_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX94_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX86_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX78_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.ECAP4_FILTER_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX94_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX86_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX78_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX5_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_132_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_124_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_116_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_108_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX94_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX86_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX78_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL21_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL13_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX94_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX86_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX78_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX9_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL21_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL13_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX94_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX86_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX78_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX9_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX133_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX125_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX117_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX109_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX9_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_101_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX9_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX71_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX63_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX55_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX47_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX39_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX9_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX71_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX63_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX55_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX47_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX39_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX9_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_SOC6A_SELECT.VALUE=ON -DRIVER.PINMUX.VAR.MUX71_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX63_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX55_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX51_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX47_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX43_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX39_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX35_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX27_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX19_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX71_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX63_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX55_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX47_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX39_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM1_EQEPERR12.VALUE=EQEPERR12 -DRIVER.PINMUX.VAR.MUX71_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX63_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX55_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX47_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX39_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX2_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.EMIF_OUTPUT_ENABLE.VALUE=0 -DRIVER.PINMUX.VAR.MUX71_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX63_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX55_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX47_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX39_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX2_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM1_EQEPERR_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX2_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_9_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.GIOB7_DMA.VALUE=0 -DRIVER.PINMUX.VAR.MUX2_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX40_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX32_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX24_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX16_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX2_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX40_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX32_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX24_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX16_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX2_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_EPWM1SYNCI_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX40_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX32_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX24_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX16_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_93_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_85_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_77_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_69_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_2_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX40_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX32_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX24_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX16_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL7_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX40_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX32_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX24_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX16_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL7_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX40_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX32_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX24_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX16_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX110_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX102_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL59_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_70_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_62_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_54_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_46_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_38_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MII.VALUE=0 -DRIVER.PINMUX.VAR.SCI2.VALUE=0 -DRIVER.PINMUX.VAR.GIOA_DISABLE.VALUE=0 -DRIVER.PINMUX.VAR.SCI3.VALUE=0 -DRIVER.PINMUX.VAR.GATE_EMIF_CLK_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.SCI4.VALUE=0 -DRIVER.PINMUX.VAR.MUX20_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX12_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL60_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL52_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL44_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL36_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL28_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_31_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_23_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_15_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.ECAP2_FILTER.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_TIME_BASE_SYNC_ENABLE.VALUE=0 -DRIVER.PINMUX.VAR.GIOB2_DMA_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.GIOA4_DMA_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX93_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX85_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX77_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX69_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL21_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL13_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_EPWM1SYNCI.VALUE=ASYNC -DRIVER.PINMUX.VAR.ETPWM6_EQEPERR12.VALUE=EQEPERR12 -DRIVER.PINMUX.VAR.SIGNAL58_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX133_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX125_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX117_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX109_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL58_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX133_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX125_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX117_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX109_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX133_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX125_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX117_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX109_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_SOC1A.VALUE=1 -DRIVER.PINMUX.VAR.SCI.VALUE=0 -DRIVER.PINMUX.VAR.MUX133_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX125_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX117_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX109_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX133_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX125_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX117_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX109_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_SOC2A.VALUE=1 -DRIVER.PINMUX.VAR.MUX133_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX125_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX117_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX109_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX8_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL7_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_SOC3A.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL51_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL43_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL35_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL27_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL19_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX110_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX102_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_SOC4A.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL51_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL43_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL35_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL27_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL19_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX110_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX102_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX128_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX110_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX102_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_129_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_SOC5A.VALUE=1 -DRIVER.PINMUX.VAR.ETPWM.VALUE=0 -DRIVER.PINMUX.VAR.MUX110_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX102_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.EQEP1S_FILTER.VALUE=0 -DRIVER.PINMUX.VAR.MUX110_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX102_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX93_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX85_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX77_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX69_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_SOC6A.VALUE=1 -DRIVER.PINMUX.VAR.MUX110_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX102_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX93_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX85_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX77_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX69_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX93_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX85_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX77_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX70_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX69_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX62_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX54_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX46_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX38_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_130_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_122_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_114_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_106_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_SOC7A.VALUE=1 -DRIVER.PINMUX.VAR.MUX93_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX85_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX77_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX69_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL20_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL12_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX93_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX85_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX77_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX69_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX8_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL20_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL12_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX93_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX85_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX77_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX69_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX8_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.ECAP1_FILTER_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.ETPWM_TZ3_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX8_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX8_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX70_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX62_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX54_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX46_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX38_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX8_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX70_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX62_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX54_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX46_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX38_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX8_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.EQEP1B_FILTER_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.ETPWM_SOC5A_SELECT.VALUE=ON -DRIVER.PINMUX.VAR.ETPWM6_EQEPERR_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX70_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX62_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX54_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX46_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX38_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX1_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX70_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX62_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX54_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX46_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX38_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX70_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX62_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX54_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX46_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX38_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX1_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX70_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX62_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX54_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX46_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX38_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX1_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX121_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX113_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX105_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX1_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_98_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_7_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX1_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX31_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX23_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX15_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX1_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX31_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX23_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX15_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX1_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX31_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX31_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX23_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX23_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX15_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX15_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_91_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_83_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_75_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_67_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_59_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX31_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX23_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX15_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL6_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX31_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX23_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX15_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL6_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX31_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX23_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX15_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX96_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX88_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL57_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL49_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_60_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_52_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_44_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_36_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_28_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.GIOB7_DMA_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.ECAP6_FILTER_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.SIGNAL50_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL42_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL34_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL26_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL18_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_21_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_13_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL11_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SPI2.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL57_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL49_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX132_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX124_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX116_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX108_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL57_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL49_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX132_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX124_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX116_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX108_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.TEMP1_ENABLE_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.SPI4.VALUE=0 -DRIVER.PINMUX.VAR.MUX132_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX124_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX116_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX108_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.RMII.VALUE=0 -DRIVER.PINMUX.VAR.MUX132_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX124_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX116_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX108_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX0.VALUE="PINMUX_BALL_N19_AD1EVT | PINMUX_BALL_D4_EMIF_ADDR_00 | PINMUX_BALL_D5_EMIF_ADDR_01 | PINMUX_BALL_C4_EMIF_ADDR_06" -DRIVER.PINMUX.VAR.MUX132_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX124_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX116_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX108_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX99_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX1.VALUE="PINMUX_BALL_C5_EMIF_ADDR_07 | PINMUX_BALL_C6_EMIF_ADDR_08 | PINMUX_BALL_C7_EMIF_ADDR_09 | PINMUX_BALL_C8_EMIF_ADDR_10" -DRIVER.PINMUX.VAR.MUX132_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX124_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX116_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX108_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX99_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.GIOB1_DMA_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.GIOA3_DMA_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.ETPWM2_EQEPERR_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.PINMUX2.VALUE="PINMUX_BALL_C9_EMIF_ADDR_11 | PINMUX_BALL_C10_EMIF_ADDR_12 | PINMUX_BALL_C11_EMIF_ADDR_13 | PINMUX_BALL_C12_EMIF_ADDR_14" -DRIVER.PINMUX.VAR.MUX99_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX81_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX73_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX65_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX57_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX49_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL5_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX3.VALUE="PINMUX_BALL_C13_EMIF_ADDR_15 | PINMUX_BALL_D14_EMIF_ADDR_16 | PINMUX_BALL_C14_EMIF_ADDR_17 | PINMUX_BALL_D15_EMIF_ADDR_18" -DRIVER.PINMUX.VAR.MUX99_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM4_EQEPERR12.VALUE=EQEPERR12 -DRIVER.PINMUX.VAR.PINMUX4.VALUE="PINMUX_BALL_C15_EMIF_ADDR_19 | PINMUX_BALL_C16_EMIF_ADDR_20 | PINMUX_BALL_C17_EMIF_ADDR_21" -DRIVER.PINMUX.VAR.SIGNAL50_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL42_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL34_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL26_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL18_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX101_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX99_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX5.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL50_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL42_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL34_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL26_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL18_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX101_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX99_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX6.VALUE=0 -DRIVER.PINMUX.VAR.MUX101_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_127_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_119_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.ALT_ADC_A.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX7.VALUE=0 -DRIVER.PINMUX.VAR.MUX101_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.ALT_ADC_B.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX8.VALUE=PINMUX_BALL_D16_EMIF_BA_1 -DRIVER.PINMUX.VAR.MUX101_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX92_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX84_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX76_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX68_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX9.VALUE="PINMUX_BALL_R4_EMIF_nCAS | PINMUX_BALL_N17_EMIF_nCS_0 | PINMUX_BALL_L17_EMIF_nCS_2" -DRIVER.PINMUX.VAR.MUX101_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX92_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX84_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX76_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX68_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX92_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX84_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX76_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX68_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX4_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_120_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_112_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_104_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX92_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX84_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX76_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX68_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL11_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX92_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX84_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX76_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX68_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX7_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL11_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX92_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX84_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX76_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX68_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX7_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_TZ1_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX132_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX124_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX116_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX108_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX7_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX7_OPTION3.VALUE=0 -DRIVER.CRC.VAR.HTU_CPB_7_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC1_CH1_URI.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC1_CH2_TOE.VALUE=0x00000000 -DRIVER.CRC.VAR.HTU_DCP0_TRDIR_1.VALUE=HET_TO_MAIN_MEM -DRIVER.CRC.VAR.CRC2_CH2_WDTO.VALUE=0 -DRIVER.CRC.VAR.HTU_ICPBL_7_SEL_1.VALUE=HIGH -DRIVER.CRC.VAR.HTU_ICPA_5_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.HTU_ICPB_1_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.HTU_DEBMOD_1.VALUE=0 -DRIVER.CRC.VAR.CRC1_CH2_URI.VALUE=0x00000000 -DRIVER.CRC.VAR.HTU_ICPAL_1_SEL_1.VALUE=HIGH -DRIVER.CRC.VAR.HTU_ENABUS_1.VALUE=0 -DRIVER.CRC.VAR.CRC1_CH2_MODE.VALUE=FULL_CPU -DRIVER.CRC.VAR.HTU_CPA_2_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC2_CH1_PSSIH.VALUE=0 -DRIVER.CRC.VAR.CRC2_CH1_PSSIL.VALUE=0 -DRIVER.CRC.VAR.HTU_MP1_ACC_1.VALUE=READ_ONLY -DRIVER.CRC.VAR.HTU_CONTPAR_1.VALUE=0 -DRIVER.CRC.VAR.HTU_ICPB_6_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.HTU_DCP0_EC_1.VALUE=0 -DRIVER.CRC.VAR.HTU_DCP0_CPBFULADD_1.VALUE=0 -DRIVER.CRC.VAR.HTU_ICPAL_6_SEL_1.VALUE=HIGH -DRIVER.CRC.VAR.CRC1_CH1_PSIH.VALUE=0 -DRIVER.CRC.VAR.HTU_CPA_7_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.HTU_CPB_3_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC1_BASE.VALUE=0xFE000000 -DRIVER.CRC.VAR.CRC1_CH1_PSIL.VALUE=0 -DRIVER.CRC.VAR.HTU_DCP0_FC_1.VALUE=0 -DRIVER.CRC.VAR.HTU_BASE.VALUE=0xFFF7A400 -DRIVER.CRC.VAR.HTU_ICPBL_3_SEL_1.VALUE=HIGH -DRIVER.CRC.VAR.HTU_ICPA_1_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC1_CH1_WDTO.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC1_CH2_PSIH.VALUE=0 -DRIVER.CRC.VAR.CRC2_BASE.VALUE=0xFB000000 -DRIVER.CRC.VAR.CRC1_CH2_PSIL.VALUE=0 -DRIVER.CRC.VAR.HTU_ICPA_6_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.HTU_ICPB_2_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.HTU_DCP0_CPAFULADD_1.VALUE=0 -DRIVER.CRC.VAR.HTU_ICPAL_2_SEL_1.VALUE=HIGH -DRIVER.CRC.VAR.HTU_CPA_3_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC2_CH2_PSSIH.VALUE=0 -DRIVER.CRC.VAR.CRC2_CH2_PSSIL.VALUE=0 -DRIVER.CRC.VAR.HTU_MP1_STADD_1.VALUE=0 -DRIVER.CRC.VAR.HTU_ICPB_7_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC1_CH2_WDTO.VALUE=0x00000000 -DRIVER.CRC.VAR.HTU_ICPAL_7_SEL_1.VALUE=HIGH -DRIVER.CRC.VAR.HTU_CPB_4_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC2_CH1_BCTO.VALUE=0 -DRIVER.CRC.VAR.HTU_MP0_ENA_1.VALUE=0 -DRIVER.CRC.VAR.HTU_ICPBL_4_SEL_1.VALUE=HIGH -DRIVER.CRC.VAR.HTU_ICPA_2_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.HTU_PAR_1.VALUE=0 -DRIVER.CRC.VAR.HTU_CONT_1.VALUE=0 -DRIVER.CRC.VAR.HTU_ENAREQ_1.VALUE=0 -DRIVER.CRC.VAR.CRC2_CH2_BCTO.VALUE=0 -DRIVER.CRC.VAR.HTU_MP1_ERRENA_1.VALUE=0 -DRIVER.CRC.VAR.HTU_MP0_STADD_1.VALUE=0 -DRIVER.CRC.VAR.HTU_ICPA_7_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.HTU_ICPB_3_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.HTU_ICPAL_3_SEL_1.VALUE=HIGH -DRIVER.CRC.VAR.HTU_CPA_4_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.HTU_CPB_0_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.HTU_DCP0_MMADD_1.VALUE=POST_INCREMENT -DRIVER.CRC.VAR.CRC2_CH1_CCI.VALUE=0x00000000 -DRIVER.CRC.VAR.HTU_ENAINTMAP_1.VALUE=0 -DRIVER.CRC.VAR.CRC2_CH1_CFI.VALUE=0x00000000 -DRIVER.CRC.VAR.HTU_ICPBL_0_SEL_1.VALUE=HIGH -DRIVER.CRC.VAR.HTU_CPB_5_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC2_CH2_CCI.VALUE=0x00000000 -DRIVER.CRC.VAR.HTU_MP1_ENA_1.VALUE=0 -DRIVER.CRC.VAR.CRC1_CH2_MODE_VALUE.VALUE=0x0001 -DRIVER.CRC.VAR.HTU_DCP0_HETADD.VALUE=0 -DRIVER.CRC.VAR.CRC2_CH2_CFI.VALUE=0x00000000 -DRIVER.CRC.VAR.HTU_ICPBL_5_SEL_1.VALUE=HIGH -DRIVER.CRC.VAR.HTU_ICPA_3_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC2_CH1_DTE.VALUE=0 -DRIVER.CRC.VAR.CRC2_CH1_CVH.VALUE=0 -DRIVER.CRC.VAR.HTU_CPA_0_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.HTU_RES_1.VALUE=0 -DRIVER.CRC.VAR.CRC1_CH1_BCTO.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC2_CH1_CVL.VALUE=0 -DRIVER.CRC.VAR.HTU_DCP0_CPATMOD_1.VALUE=POST_INCREMENT -DRIVER.CRC.VAR.CRC1_CH1_CCI.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC2_CH1_MODE.VALUE=FULL_CPU -DRIVER.CRC.VAR.CRC1_CH1_PSSIH.VALUE=0 -DRIVER.CRC.VAR.CRC2_CH2_DTE.VALUE=1 -DRIVER.CRC.VAR.CRC1_CH1_CFI.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC1_CH1_PSSIL.VALUE=0 -DRIVER.CRC.VAR.HTU_MP1_ENDADD_1.VALUE=0 -DRIVER.CRC.VAR.HTU_ICPB_4_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC2_CH2_CVH.VALUE=0 -DRIVER.CRC.VAR.HTU_ICPAL_4_SEL_1.VALUE=HIGH -DRIVER.CRC.VAR.CRC2_CH2_CVL.VALUE=0 -DRIVER.CRC.VAR.CRC2_CH1_PCP.VALUE=0 -DRIVER.CRC.VAR.HTU_CPA_5_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.HTU_CPB_1_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC1_CH2_CCI.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC1_CH2_CFI.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC2_CH1_SCP.VALUE=0 -DRIVER.CRC.VAR.HTU_VBHOLD_1.VALUE=0 -DRIVER.CRC.VAR.CRC1_CH2_BCTO.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC1_CH1_MODE_VALUE.VALUE=0x0001 -DRIVER.CRC.VAR.CRC2_CH2_PCP.VALUE=0 -DRIVER.CRC.VAR.HTU_MP0_ERRENA_1.VALUE=0 -DRIVER.CRC.VAR.HTU_ICPBL_1_SEL_1.VALUE=HIGH -DRIVER.CRC.VAR.CRC2_CH1_PSA.VALUE=1 -DRIVER.CRC.VAR.CRC2_CH2_MODE.VALUE=FULL_CPU -DRIVER.CRC.VAR.CRC2_CH1_ORI.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC1_CH1_DTE.VALUE=0 -DRIVER.CRC.VAR.HTU_CPB_6_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC1_CH1_CVH.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC1_CH1_CVL.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC2_CH2_SCP.VALUE=0 -DRIVER.CRC.VAR.CRC2_CH2_MODE_VALUE.VALUE=0x0001 -DRIVER.CRC.VAR.CRC2_CH1_TOE.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC2_CH2_PSA.VALUE=1 -DRIVER.CRC.VAR.CRC2_CH2_ORI.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC1_CH2_DTE.VALUE=1 -DRIVER.CRC.VAR.HTU_DCP0_TRDAT_1.VALUE=32BIT -DRIVER.CRC.VAR.HTU_ICPBL_6_SEL_1.VALUE=HIGH -DRIVER.CRC.VAR.HTU_ICPA_4_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.HTU_ICPB_0_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC1_CH2_CVH.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC2_CH1_PSIH.VALUE=0 -DRIVER.CRC.VAR.HTU_ICPAL_0_SEL_1.VALUE=HIGH -DRIVER.CRC.VAR.CRC1_CH2_CVL.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC2_CH1_URI.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC2_CH1_PSIL.VALUE=0 -DRIVER.CRC.VAR.CRC1_CH1_PCP.VALUE=0x00000000 -DRIVER.CRC.VAR.HTU_CPA_1_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC2_CH2_TOE.VALUE=0x00000000 -DRIVER.CRC.VAR.HTU_DCP0_CPBTMOD_1.VALUE=POST_INCREMENT -DRIVER.CRC.VAR.CRC1_CH2_PSSIH.VALUE=0 -DRIVER.CRC.VAR.HTU_MP0_ACC_1.VALUE=READ_ONLY -DRIVER.CRC.VAR.CRC1_CH2_PSSIL.VALUE=0 -DRIVER.CRC.VAR.CRC1_CH1_SCP.VALUE=0x00000000 -DRIVER.CRC.VAR.HTU_ICPB_5_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC2_CH2_URI.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC1_CH2_PCP.VALUE=0x00000000 -DRIVER.CRC.VAR.HTU_ICPAL_5_SEL_1.VALUE=HIGH -DRIVER.CRC.VAR.CRC1_CH1_PSA.VALUE=1 -DRIVER.CRC.VAR.CRC1_CH1_ORI.VALUE=0x00000000 -DRIVER.CRC.VAR.HTU_DCP0_ADMOD_1.VALUE=INCREMENT_16BIT -DRIVER.CRC.VAR.HTU_CPA_6_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.HTU_CPB_2_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC2_CH1_WDTO.VALUE=0 -DRIVER.CRC.VAR.CRC2_CH2_PSIH.VALUE=0 -DRIVER.CRC.VAR.CRC1_CH2_SCP.VALUE=0x00000000 -DRIVER.CRC.VAR.HTU_ENA_1.VALUE=0 -DRIVER.CRC.VAR.CRC1_CH1_TOE.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC1_CH1_MODE.VALUE=FULL_CPU -DRIVER.CRC.VAR.CRC2_CH2_PSIL.VALUE=0 -DRIVER.CRC.VAR.CRC1_CH2_PSA.VALUE=1 -DRIVER.CRC.VAR.CRC1_CH2_ORI.VALUE=0x00000000 -DRIVER.CRC.VAR.HTU_MP0_ENDADD_1.VALUE=0 -DRIVER.CRC.VAR.HTU_ICPBL_2_SEL_1.VALUE=HIGH -DRIVER.CRC.VAR.HTU_ICPA_0_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC2_CH1_MODE_VALUE.VALUE=0x0001 -DRIVER.EMAC.VAR.EMAC_PHY_CUSTOM.VALUE=0 -DRIVER.EMAC.VAR.EMAC_ADD1.VALUE=FF -DRIVER.EMAC.VAR.EMAC_ADD2.VALUE=FF -DRIVER.EMAC.VAR.EMAC_ADD3.VALUE=FF -DRIVER.EMAC.VAR.EMAC_ADD4.VALUE=FF -DRIVER.EMAC.VAR.EMAC_ADD5.VALUE=FF -DRIVER.EMAC.VAR.EMAC_ADD6.VALUE=FF -DRIVER.EMAC.VAR.EMAC_CTRL_BASE.VALUE=0xFCF78800 -DRIVER.EMAC.VAR.EMAC_PHY_DP83640.VALUE=1 -DRIVER.EMAC.VAR.EMAC_LOOPBACK_ENA.VALUE=0 -DRIVER.EMAC.VAR.MDIO_BASE.VALUE=0xFCF78900 -DRIVER.EMAC.VAR.EMAC_BASE.VALUE=0xFCF78000 -DRIVER.EMAC.VAR.EMAC_BASE_PORT.VALUE=0xFFFFFFFF -DRIVER.EMAC.VAR.EMAC_TRANSMIT_ENA.VALUE=1 -DRIVER.EMAC.VAR.EMAC_PHY_TLK111.VALUE=0 -DRIVER.EMAC.VAR.EMAC_CHANNELNUMBER.VALUE=0 -DRIVER.EMAC.VAR.EMAC_RX_PBUF_ALLOC.VALUE=10 -DRIVER.EMAC.VAR.EMAC_UNICAST_ENA.VALUE=1 -DRIVER.EMAC.VAR.EMAC_FULL_DUPLEX_ENA.VALUE=1 -DRIVER.EMAC.VAR.EMAC_PHYADDRESS.VALUE=1 -DRIVER.EMAC.VAR.EMAC_MII_ENA.VALUE=1 -DRIVER.EMAC.VAR.EMAC_CTRL_RAM_BASE.VALUE=0xFC520000 -DRIVER.EMAC.VAR.EMAC_BROADCAST_ENA.VALUE=1 -DRIVER.EMAC.VAR.EMAC_RECEIVE_ENA.VALUE=1 -DRIVER.EMIF.VAR.EMIF_ASYNC2_TAVAV.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC1_TD.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC3_EXTENDED_WAIT.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC1_TH.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC2_TA.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC3_WAIT.VALUE=pin0 -DRIVER.EMIF.VAR.EMIF_ASYNC2_TD.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC2_NOR_FLASH.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC2_TEHQZ.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC2_TH.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC3_TA.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC3_TD.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ENA_SDRAM.VALUE=1 -DRIVER.EMIF.VAR.EMIF_ASYNC3_TH.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC2_TELQV.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC2_PAGE_MODE.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC1_ENA.VALUE=1 -DRIVER.EMIF.VAR.EMIF_SDRAM_REFRESH_CYCLES.VALUE=0 -DRIVER.EMIF.VAR.EMIF_AVAILABLE.VALUE=1 -DRIVER.EMIF.VAR.EMIF_SDRAM_TRC_MAX.VALUE=213 -DRIVER.EMIF.VAR.EMIF_ASYNC3_TEHEL.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC2_ENA.VALUE=1 -DRIVER.EMIF.VAR.EMIF_ASYNC1_R_STROBE.VALUE=63 -DRIVER.EMIF.VAR.EMIF_SDRAM_TRAS_MAX.VALUE=213 -DRIVER.EMIF.VAR.EMIF_ASYNC3_TELEH.VALUE=0 -DRIVER.EMIF.VAR.EMIF_SDRAM_TRRD_MAX.VALUE=107 -DRIVER.EMIF.VAR.EMIF_ASYNC3_STROBE_MODE.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC3_ENA.VALUE=1 -DRIVER.EMIF.VAR.EMIF_ASYNC1_ASIZE.VALUE=8_bit -DRIVER.EMIF.VAR.EMIF_SDRAM_TRC_VAL.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC3_TAVAV.VALUE=0 -DRIVER.EMIF.VAR.EMIF_SDRAM_BANKS.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC1_PAGE_DELAY_VAL.VALUE=0 -DRIVER.EMIF.VAR.EMIF_SDRAM_TRAS_VAL.VALUE=0 -DRIVER.EMIF.VAR.EMIF_SDRAM_TRRD_VAL.VALUE=0 -DRIVER.EMIF.VAR.EMIF_BASE.VALUE=0xFCFFE800 -DRIVER.EMIF.VAR.EMIF_ASYNC3_TEHQZ.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC1_W_STROBE.VALUE=63 -DRIVER.EMIF.VAR.EMIF_ASYNC3_TELQV.VALUE=0 -DRIVER.EMIF.VAR.EMIF_SDRAM_TXSR_MAX.VALUE=427 -DRIVER.EMIF.VAR.EMIF_ASYNC2_PAGE_SIZE.VALUE=4_words -DRIVER.EMIF.VAR.EMIF_CLKFRQ.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC3_W_HOLD.VALUE=7 -DRIVER.EMIF.VAR.EMIF_ASYNC2_R_HOLD.VALUE=7 -DRIVER.EMIF.VAR.EMIF_SDRAM_TREFRESH_VAL.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC3_R_SETUP.VALUE=15 -DRIVER.EMIF.VAR.EMIF_SDRAM_TXSR_VAL.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC1_TSU.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC2_EXTENDED_WAIT.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC2_ASIZE.VALUE=8_bit -DRIVER.EMIF.VAR.EMIF_ASYNC2_TSU.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC3_W_SETUP.VALUE=15 -DRIVER.EMIF.VAR.EMIF_ASYNC3_NOR_FLASH.VALUE=0 -DRIVER.EMIF.VAR.EMIF_SDRAM_TWR_MAX.VALUE=107 -DRIVER.EMIF.VAR.EMIF_ASYNC2_PAGE_DELAY_VAL.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC1_W_HOLD.VALUE=7 -DRIVER.EMIF.VAR.EMIF_SDRAM_INIT_TIME.VALUE=200 -DRIVER.EMIF.VAR.EMIF_SDRAM_TREFRESH_DEFAULT.VALUE=1605 -DRIVER.EMIF.VAR.EMIF_ASYNC3_TSU.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC3_PAGE_MODE.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC2_STROBE_MODE.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC2_R_SETUP.VALUE=15 -DRIVER.EMIF.VAR.EMIF_SDRAM_TWR_VAL.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC3_R_STROBE.VALUE=63 -DRIVER.EMIF.VAR.EMIF_SDRAM_TRCD_MAX.VALUE=107 -DRIVER.EMIF.VAR.EMIF_CLK.VALUE=0 -DRIVER.EMIF.VAR.EMIF_SDRAM_TRCD.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC2_W_SETUP.VALUE=15 -DRIVER.EMIF.VAR.EMIF_SDRAM_TRFC.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC3_ASIZE.VALUE=8_bit -DRIVER.EMIF.VAR.EMIF_SDRAM_TRAS.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC1_NOR_FLASH.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC3_PAGE_DELAY.VALUE=0 -DRIVER.EMIF.VAR.EMIF_SDRAM_CAS_LATENCY.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC_WAIT_POLARITY0.VALUE=pin_low -DRIVER.EMIF.VAR.EMIF_SDRAM_TRCD_VAL.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC_WAIT_POLARITY1.VALUE=pin_high -DRIVER.EMIF.VAR.EMIF_ASYNC1_PAGE_MODE.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC1_R_SETUP.VALUE=15 -DRIVER.EMIF.VAR.EMIF_SDRAM_TRC.VALUE=0 -DRIVER.EMIF.VAR.EMIF_SDRAM_TRRD.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC3_PAGE_DELAY_VAL.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC3_W_STROBE.VALUE=63 -DRIVER.EMIF.VAR.EMIF_ASYNC1_TEHEL.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC_MAX_EXT_WAIT.VALUE=0 -DRIVER.EMIF.VAR.EMIF_SDRAM_TRP.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC3_PAGE_SIZE.VALUE=4_words -DRIVER.EMIF.VAR.EMIF_ASYNC1_W_SETUP.VALUE=15 -DRIVER.EMIF.VAR.EMIF_ASYNC1_TELEH.VALUE=0 -DRIVER.EMIF.VAR.EMIF_SDRAM_REFRESH_CYCLES_MAX.VALUE=0 -DRIVER.EMIF.VAR.EMIF_MS.VALUE=0.001 -DRIVER.EMIF.VAR.EMIF_NS.VALUE=0.000000001 -DRIVER.EMIF.VAR.EMIF_SDRAM_TWR.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC1_EXTENDED_WAIT.VALUE=0 -DRIVER.EMIF.VAR.EMIF_SDRAM_REFRESH_PERIOD.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC3_R_HOLD.VALUE=7 -DRIVER.EMIF.VAR.EMIF_ASYNC1_TAVAV.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC2_PAGE_DELAY.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC1_WAIT.VALUE=pin0 -DRIVER.EMIF.VAR.EMIF_SDRAM_TRP_MAX.VALUE=107 -DRIVER.EMIF.VAR.EMIF_SDRAM_TXSR.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC1_TEHQZ.VALUE=0 -DRIVER.EMIF.VAR.EMIF_SDRAM_TRFC_MAX.VALUE=427 -DRIVER.EMIF.VAR.EMIF_ASYNC2_R_STROBE.VALUE=63 -DRIVER.EMIF.VAR.EMIF_ASYNC1_TELQV.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC1_STROBE_MODE.VALUE=0 -DRIVER.EMIF.VAR.EMIF_SDRAM_TRP_VAL.VALUE=0 -DRIVER.EMIF.VAR.EMIF_SDRAM_REFRESH_PERIOD_MAX.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC2_W_HOLD.VALUE=7 -DRIVER.EMIF.VAR.EMIF_ASYNC1_PAGE_SIZE.VALUE=4_words -DRIVER.EMIF.VAR.EMIF_ASYNC2_WAIT.VALUE=pin0 -DRIVER.EMIF.VAR.EMIF_ASYNC2_TEHEL.VALUE=0 -DRIVER.EMIF.VAR.EMIF_SDRAM_TRFC_VAL.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC1_R_HOLD.VALUE=7 -DRIVER.EMIF.VAR.EMIF_SDRAM_PAGE_SIZE.VALUE=elements_256 -DRIVER.EMIF.VAR.EMIF_ASYNC2_TELEH.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC1_PAGE_DELAY.VALUE=0 -DRIVER.EMIF.VAR.EMIF_IBANK.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC2_W_STROBE.VALUE=63 -DRIVER.EMIF.VAR.EMIF_ASYNC1_TA.VALUE=0 -DRIVER.POM.VAR.POM_OVRLY_START_ADD28.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD29.VALUE=0x00000000 -DRIVER.POM.VAR.POM_REGION_10_ENA.VALUE=0 -DRIVER.POM.VAR.POM_TIMEOUT_ENABLE.VALUE=0 -DRIVER.POM.VAR.POM_REGION_11_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_20_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_12_ENA.VALUE=0 -DRIVER.POM.VAR.POM_NO_OF_REGION.VALUE=1 -DRIVER.POM.VAR.POM_REGION_21_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_13_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_30_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_22_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_14_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_31_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_23_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_15_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_1_ENA.VALUE=1 -DRIVER.POM.VAR.POM_REGION_32_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_24_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_16_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_2_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_25_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_17_ENA.VALUE=0 -DRIVER.POM.VAR.POM_OVRLY_START_ADD1.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD2.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD3.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD4.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD5.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD6.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD7.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD8.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVLY_TRG_REGION.VALUE=INTERNAL_RAM -DRIVER.POM.VAR.POM_OVRLY_START_ADD9.VALUE=0x00000000 -DRIVER.POM.VAR.POM_REGION_3_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_26_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_18_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_4_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_27_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_19_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_5_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_28_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_6_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_SIZE10.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE11.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE20.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE12.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_29_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_SIZE21.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE13.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE30.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE22.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE14.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE31.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE23.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE15.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE32.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE24.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE16.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE25.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE17.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE26.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE18.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE27.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE19.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE28.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE29.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_7_ENA.VALUE=0 -DRIVER.POM.VAR.POM_BASE.VALUE=0xFFA04000 -DRIVER.POM.VAR.POM_PROG_START_ADD10.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD11.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD20.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD12.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD21.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD13.VALUE=0x00000000 -DRIVER.POM.VAR.POM_REGION_8_ENA.VALUE=0 -DRIVER.POM.VAR.POM_PROG_START_ADD30.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD22.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD14.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD31.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD23.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD15.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD32.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD24.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD16.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD25.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD17.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD26.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD18.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD27.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD19.VALUE=0x00000000 -DRIVER.POM.VAR.POM_REGION_SIZE1.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_PROG_START_ADD28.VALUE=0x00000000 -DRIVER.POM.VAR.POM_REGION_SIZE2.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_PROG_START_ADD29.VALUE=0x00000000 -DRIVER.POM.VAR.POM_REGION_SIZE3.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE4.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE5.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE6.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE7.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE8.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE9.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_9_ENA.VALUE=0 -DRIVER.POM.VAR.POM_PROG_START_ADD1.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD2.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD3.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD4.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD5.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD6.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD7.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD8.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD9.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD10.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD11.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD20.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD12.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD21.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD13.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD30.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD22.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD14.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD31.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD23.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD15.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD32.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD24.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD16.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD25.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD17.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD26.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD18.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD27.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD19.VALUE=0x00000000 -DRIVER.PMM.VAR.PMM_RAM_PWR_DOMAIN2_ENABLE.VALUE=0 -DRIVER.PMM.VAR.PMM_PWR_DOMAIN5_ENABLE.VALUE=0 -DRIVER.PMM.VAR.PMM_PWR_DOMAIN3_ENABLE.VALUE=0 -DRIVER.PMM.VAR.PMM_RAM_PWR_DOMAIN3_ENABLE.VALUE=0 -DRIVER.PMM.VAR.PMM_RAM_PWR_DOMAIN1_ENABLE.VALUE=0 -DRIVER.PMM.VAR.PMM_PWR_DOMAIN4_ENABLE.VALUE=0 -DRIVER.PMM.VAR.PMM_PWR_DOMAIN2_ENABLE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_OSHT_WIDTH.VALUE=100 -DRIVER.ETPWM.VAR.ETPWM3_PWMA_PERIOD_REG.VALUE=1000 -DRIVER.ETPWM.VAR.ETPWM2_PWMA_COMPARE.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM5_CHOPPER_PERIOD.VALUE=100.000 -DRIVER.ETPWM.VAR.ETPWM3_PWMA_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM3_PWMA_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM7_PWMB_PERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM3_PWMB_DEADBAND_OUT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM5_HSPCLKDIV.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM4_CLKDIV_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_SOCA_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM1_DEADBAND_INPUT.VALUE=PWMA_RED_FED -DRIVER.ETPWM.VAR.ETPWM7_BASE.VALUE=0xFCF79200 -DRIVER.ETPWM.VAR.ETPWM5_TB_ACTUALFREQUENCY.VALUE=80.000 -DRIVER.ETPWM.VAR.ETPWM6_DCBEVT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM6_DCBEVT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_ENABLE_SOCA.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_CBC.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_ENABLE_SOCB.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_PWMA_FALLING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_CHOPPER_PERIOD_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM2_PWMA_ENA.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM4_PWMB_PERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM6_RDELAY_SOURCE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_PWMA_DUTYTIME.VALUE=500.000 -DRIVER.ETPWM.VAR.ETPWM1_CHOPPER_DUTY_NEW.VALUE=50.0 -DRIVER.ETPWM.VAR.ETPWM7_SOCB_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM1_OSHT_ACTUAL_WIDTH.VALUE=100 -DRIVER.ETPWM.VAR.ETPWM7_PWMB_FALLING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_PWMB_COMPARE.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM2_PWMB_POLARITY.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM1_OSHT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_OSHT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_PWMA_DEADBAND_OUT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM4_ENABLE_SOCA.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_OSHT3.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_ENABLE_SOCB.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_OSHT4.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_OSHT_WIDTH_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM1_OSHT5.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_PWMA_PERIOD_REG.VALUE=1000 -DRIVER.ETPWM.VAR.ETPWM1_OSHT6.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_CHOPPER_PERIOD.VALUE=100.000 -DRIVER.ETPWM.VAR.ETPWM1_PWMB_PERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM2_CBC.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_CLKDIV.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM2_PWMB_ENA.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM4_SOCB_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM7_CHOPPER_MODE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_PWMB_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM7_DEADBAND_OUTPUT.VALUE=PWMA_PWMB_NIL -DRIVER.ETPWM.VAR.ETPWM4_PWMB_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM1_ENABLE_SOCA.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_PWMB_DEADBAND_INVERT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM1_ENABLE_SOCB.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_CHOPPER_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM5_DCAEVT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_HSPCLKDIV_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM5_DCAEVT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_CHOPPER_DUTYTIME.VALUE=50.000 -DRIVER.ETPWM.VAR.ETPWM6_OSHT_ACTUAL_WIDTH.VALUE=100 -DRIVER.ETPWM.VAR.ETPWM4_PWMB_DEADBAND_INVERT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM7_PWMB_POLARITY.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_OSHT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_PWMA_RISING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_OSHT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM6_PWMA_DEADBAND_OUT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM1_SOCB_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_OSHT3.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_PWMB_DUTYTIME.VALUE=500.000 -DRIVER.ETPWM.VAR.ETPWM3_CBC.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_TB_ACTUALFREQUENCY.VALUE=80.000 -DRIVER.ETPWM.VAR.ETPWM1_FDELAY_SOURCE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_OSHT4.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM6_PWMB_DEADBAND_INVERT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_OSHT5.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_PWMB_COMPARE.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM2_PWMB_RISING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_OSHT6.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM6_DEADBAND_INPUT.VALUE=PWMA_RED_FED -DRIVER.ETPWM.VAR.ETPWM6_SELECT_SOCA.VALUE=DCAEVT1 -DRIVER.ETPWM.VAR.ETPWM6_SELECT_SOCB.VALUE=DCBEVT1 -DRIVER.ETPWM.VAR.ETPWM6_SELECT_EVENT.VALUE=NO_EVENT -DRIVER.ETPWM.VAR.ETPWM5_OSHT_WIDTH.VALUE=100 -DRIVER.ETPWM.VAR.ETPWM1_PWMA_DEADBAND_INVERT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM5_PWMA_ENA.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM3_CHOPPER_PERIOD_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_PWMA_DEADBAND_INVERT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_PWMB_PERIOD_REG.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM5_DCBEVT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_OSHT_WIDTH_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM1_PWMA_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM5_DCBEVT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_PWMA_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM5_PWMA_DEADBAND_INVERT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_HSPCLKDIV.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_PWMA_FALLING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_PWMA_RISING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM4_CHOPPER_MODE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_CLKDIV_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM2_PWMB_DEADBAND_OUT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_TB_FREQUENCY.VALUE=110.000 -DRIVER.ETPWM.VAR.ETPWM4_CBC.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_SELECT_SOCA.VALUE=DCAEVT1 -DRIVER.ETPWM.VAR.ETPWM7_PWMA_DEADBAND_INVERT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_SELECT_SOCB.VALUE=DCBEVT1 -DRIVER.ETPWM.VAR.ETPWM6_PWMB_RISING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM5_PWMA_POLARITY.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM4_CHOPPER_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM5_DEADBAND_OUTPUT.VALUE=PWMA_PWMB_NIL -DRIVER.ETPWM.VAR.ETPWM6_FDELAY_SOURCE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_RDELAY_SOURCE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_PWMA_DUTYTIME.VALUE=500.000 -DRIVER.ETPWM.VAR.ETPWM6_PWMB_FALLING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_PWMA_COMPARE.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM5_PWMB_ENA.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_CHOPPER_PERIOD.VALUE=100.000 -DRIVER.ETPWM.VAR.ETPWM6_CHOPPER_DUTYTIME.VALUE=50.000 -DRIVER.ETPWM.VAR.ETPWM1_PWMB_FALLING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM3_SELECT_EVENT.VALUE=NO_EVENT -DRIVER.ETPWM.VAR.ETPWM2_CLKDIV.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_PWMA_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM7_PWMA_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM2_DEADBAND_INPUT.VALUE=PWMA_RED_FED -DRIVER.ETPWM.VAR.ETPWM5_CBC.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_CBC1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_CBC2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_CBC3.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_CHOPPER_DUTYTIME_REG.VALUE=3 -DRIVER.ETPWM.VAR.ETPWM7_PWMB_DEADBAND_OUT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM1_CBC4.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_CBC5.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_CBC6.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_DCAEVT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_PWMB_PERIOD_REG.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM3_CHOPPER_DUTYTIME_REG.VALUE=3 -DRIVER.ETPWM.VAR.ETPWM1_CHOPPER_MODE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM5_PWMA_PERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM4_DCAEVT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_TB_ACTUALFREQUENCY.VALUE=80.000 -DRIVER.ETPWM.VAR.ETPWM3_TB_FREQUENCY.VALUE=110.000 -DRIVER.ETPWM.VAR.ETPWM2_PWMB_FALLING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM5_CHOPPER_DUTYTIME_REG.VALUE=3 -DRIVER.ETPWM.VAR.ETPWM2_OSHT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_CHOPPER_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM1_PWMB_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM1_HSPCLKDIV_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM7_INTERRUPT_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM2_OSHT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_OSHT3.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_OSHT4.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_CHOPPER_DUTYTIME_REG.VALUE=3 -DRIVER.ETPWM.VAR.ETPWM4_PWMB_POLARITY.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_PWMA_COMPARE.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM2_OSHT5.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_DEADBAND_OUTPUT.VALUE=PWMA_PWMB_NIL -DRIVER.ETPWM.VAR.ETPWM3_PWMB_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM2_OSHT6.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM6_CBC.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_PWMB_DUTYTIME.VALUE=500.000 -DRIVER.ETPWM.VAR.ETPWM6_OSHT_WIDTH_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM2_CHOPPER_PERIOD.VALUE=100.000 -DRIVER.ETPWM.VAR.ETPWM2_PWMA_PERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM5_CHOPPER_DUTYTIME.VALUE=50.000 -DRIVER.ETPWM.VAR.ETPWM5_OSHT_ACTUAL_WIDTH.VALUE=100 -DRIVER.ETPWM.VAR.ETPWM4_DCBEVT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_SOCA_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM5_PWMA_DEADBAND_OUT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM4_DCBEVT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_PWMB_FALLING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM4_OSHT_WIDTH.VALUE=100 -DRIVER.ETPWM.VAR.ETPWM5_PWMA_FALLING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM4_PWMA_RISING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM1_PWMA_ENA.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM7_OSHT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM6_PWMB_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM6_PWMA_PERIOD_REG.VALUE=1000 -DRIVER.ETPWM.VAR.ETPWM6_HSPCLKDIV_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM4_PWMB_RISING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM7_OSHT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM6_PWMB_PERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM7_CBC.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_OSHT3.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_CBC1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_OSHT4.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_CBC2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_HSPCLKDIV.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM7_OSHT5.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_PWMB_FALLING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM2_CBC3.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_PWMB_PERIOD_REG.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM2_PWMA_POLARITY.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM2_CLKDIV_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM7_OSHT6.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_SOCA_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM2_CBC4.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_OST.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_CHOPPER_ACTUALPERIOD.VALUE=100.000 -DRIVER.ETPWM.VAR.ETPWM1_PWMA_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM7_PWMB_DUTYTIME.VALUE=500.000 -DRIVER.ETPWM.VAR.ETPWM3_FDELAY_SOURCE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM2_CBC5.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_CLKDIV.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM2_CBC6.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_PWMB_COMPARE.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM7_DEADBAND_INPUT.VALUE=PWMA_RED_FED -DRIVER.ETPWM.VAR.ETPWM6_INTERRUPT_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM3_CHOPPER_ACTUALPERIOD.VALUE=100.000 -DRIVER.ETPWM.VAR.ETPWM1_PWMB_DEADBAND_OUT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_ENABLE_SOCA.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_PWMB_FALLING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM1_BASE.VALUE=0xFCF78C00 -DRIVER.ETPWM.VAR.ETPWM6_ENABLE_SOCB.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_PWMB_ENA.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM5_CHOPPER_ACTUALPERIOD.VALUE=100.000 -DRIVER.ETPWM.VAR.ETPWM3_PWMB_PERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM1_DEADBAND_OUTPUT.VALUE=PWMA_PWMB_NIL -DRIVER.ETPWM.VAR.ETPWM4_TB_ACTUALFREQUENCY.VALUE=80.000 -DRIVER.ETPWM.VAR.ETPWM2_OSHT_WIDTH_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM7_CHOPPER_ACTUALPERIOD.VALUE=100.000 -DRIVER.ETPWM.VAR.ETPWM6_SOCB_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM4_CHOPPER_DUTYTIME.VALUE=50.000 -DRIVER.ETPWM.VAR.ETPWM5_CHOPPER_PERIOD_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM4_PWMA_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM3_DCAEVT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_DCAEVT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_OST.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_ENABLE_SOCA.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM6_HSPCLKDIV.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_ENABLE_SOCB.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_PWMA_POLARITY.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM2_PWMA_FALLING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_PWMA_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM5_RDELAY_SOURCE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM5_PWMB_FALLING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM5_PWMA_DUTYTIME.VALUE=500.000 -DRIVER.ETPWM.VAR.ETPWM4_PWMA_PERIOD_REG.VALUE=1000 -DRIVER.ETPWM.VAR.ETPWM7_CHOPPER_PERIOD.VALUE=100.000 -DRIVER.ETPWM.VAR.ETPWM6_PWMB_DEADBAND_OUT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_SOCB_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM4_PWMB_COMPARE.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM4_PWMA_ENA.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM2_PWMB_FALLING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM1_PWMB_POLARITY.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_CBC1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_SELECT_EVENT.VALUE=NO_EVENT -DRIVER.ETPWM.VAR.ETPWM3_CBC2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_DCBEVT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_CBC3.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_INTERRUPT_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM3_OST.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_DCBEVT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_CBC4.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_DEADBAND_INPUT.VALUE=PWMA_RED_FED -DRIVER.ETPWM.VAR.ETPWM3_CBC5.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_CBC6.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_PWMA_FALLING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM2_PWMB_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM6_PWMB_FALLING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM2_BASE.VALUE=0xFCF78D00 -DRIVER.ETPWM.VAR.ETPWM7_CHOPPER_DUTY_NEW.VALUE=50.0 -DRIVER.ETPWM.VAR.ETPWM7_CLKDIV_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM5_CHOPPER_MODE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_OSHT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_OSHT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_TB_FREQUENCY.VALUE=110.000 -DRIVER.ETPWM.VAR.ETPWM5_SELECT_SOCA.VALUE=DCAEVT1 -DRIVER.ETPWM.VAR.ETPWM3_OSHT3.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_CHOPPER_DUTYTIME.VALUE=50.000 -DRIVER.ETPWM.VAR.ETPWM5_SELECT_SOCB.VALUE=DCBEVT1 -DRIVER.ETPWM.VAR.ETPWM4_OSHT_ACTUAL_WIDTH.VALUE=100 -DRIVER.ETPWM.VAR.ETPWM3_OSHT4.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_OSHT_WIDTH.VALUE=100 -DRIVER.ETPWM.VAR.ETPWM5_CHOPPER_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM4_PWMB_FALLING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM4_PWMB_ENA.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM3_OSHT5.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_HSPCLKDIV_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM4_PWMA_DEADBAND_OUT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_OSHT6.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_TB_ACTUALFREQUENCY.VALUE=80.000 -DRIVER.ETPWM.VAR.ETPWM5_CLKDIV.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM7_PWMA_COMPARE.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM6_PWMB_POLARITY.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM4_PWMB_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM4_OST.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_PWMB_DUTYTIME.VALUE=500.000 -DRIVER.ETPWM.VAR.ETPWM7_OSHT_WIDTH_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM2_CHOPPER_PERIOD_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM2_PWMA_PERIOD_REG.VALUE=1000 -DRIVER.ETPWM.VAR.ETPWM1_PWMB_COMPARE.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM1_CLKDIV_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_CHOPPER_PERIOD.VALUE=100.000 -DRIVER.ETPWM.VAR.ETPWM7_PWMB_FALLING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM2_SELECT_SOCA.VALUE=DCAEVT1 -DRIVER.ETPWM.VAR.ETPWM4_SELECT_EVENT.VALUE=NO_EVENT -DRIVER.ETPWM.VAR.ETPWM2_SELECT_SOCB.VALUE=DCBEVT1 -DRIVER.ETPWM.VAR.ETPWM7_PWMB_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM2_DCAEVT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_INTERRUPT_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM2_DCAEVT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_CBC1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_PWMB_RISING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM4_CBC2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_PWMA_ENA.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM4_CBC3.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_CHOPPER_MODE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM1_PWMA_FALLING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM7_PWMA_PERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM5_OST.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_CBC4.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_CBC5.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_TB_FREQUENCY.VALUE=110.000 -DRIVER.ETPWM.VAR.ETPWM4_CBC6.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM6_CHOPPER_DUTY_NEW.VALUE=50.0 -DRIVER.ETPWM.VAR.ETPWM4_PWMA_POLARITY.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM2_CHOPPER_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM2_PWMA_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM5_FDELAY_SOURCE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_BASE.VALUE=0xFCF78E00 -DRIVER.ETPWM.VAR.ETPWM2_CHOPPER_DUTYTIME.VALUE=50.000 -DRIVER.ETPWM.VAR.ETPWM2_RDELAY_SOURCE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM2_PWMB_RISING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM2_PWMA_DUTYTIME.VALUE=500.000 -DRIVER.ETPWM.VAR.ETPWM1_PWMA_FALLING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM4_HSPCLKDIV.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM4_PWMA_COMPARE.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM1_PWMB_FALLING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM1_PWMB_DEADBAND_INVERT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM7_PWMA_RISING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM2_DCBEVT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_PWMA_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM4_PWMA_PERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM2_DCBEVT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_PWMB_RISING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM3_PWMB_DEADBAND_INVERT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM1_SELECT_EVENT.VALUE=NO_EVENT -DRIVER.ETPWM.VAR.ETPWM7_PWMB_PERIOD_REG.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM7_PWMB_RISING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM7_PWMB_ENA.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM3_OSHT_WIDTH_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM3_PWMA_FALLING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM7_SOCA_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_OST.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_PWMB_DEADBAND_OUT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM5_PWMB_DEADBAND_INVERT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_TB_ACTUALFREQUENCY.VALUE=80.000 -DRIVER.ETPWM.VAR.ETPWM4_PWMB_RISING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM2_PWMA_FALLING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM7_PWMB_DEADBAND_INVERT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM7_PWMA_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM3_PWMB_FALLING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_DEADBAND_OUTPUT.VALUE=PWMA_PWMB_NIL -DRIVER.ETPWM.VAR.ETPWM3_INTERRUPT_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM1_PWMA_PERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM7_RDELAY_SOURCE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM7_PWMA_DUTYTIME.VALUE=500.000 -DRIVER.ETPWM.VAR.ETPWM1_TB_FREQUENCY.VALUE=110.000 -DRIVER.ETPWM.VAR.ETPWM3_CLKDIV.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM2_PWMA_DEADBAND_INVERT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM7_CHOPPER_PERIOD_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_CLKDIV_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM4_SOCA_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM1_PWMB_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM5_CBC1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_PWMB_RISING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM5_CBC2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_PWMA_DEADBAND_INVERT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM2_OSHT_WIDTH.VALUE=100 -DRIVER.ETPWM.VAR.ETPWM5_CBC3.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_CHOPPER_DUTY_NEW.VALUE=50.0 -DRIVER.ETPWM.VAR.ETPWM3_PWMB_POLARITY.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM1_PWMA_COMPARE.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM7_OST.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_CBC4.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_CBC5.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_CHOPPER_DUTYTIME.VALUE=50.000 -DRIVER.ETPWM.VAR.ETPWM1_PWMB_DUTYTIME.VALUE=500.000 -DRIVER.ETPWM.VAR.ETPWM6_PWMA_DEADBAND_INVERT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM5_CBC6.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_OSHT_ACTUAL_WIDTH.VALUE=100 -DRIVER.ETPWM.VAR.ETPWM2_PWMB_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM5_PWMB_PERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM4_DEADBAND_INPUT.VALUE=PWMA_RED_FED -DRIVER.ETPWM.VAR.ETPWM3_PWMA_DEADBAND_OUT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_PWMB_RISING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM4_BASE.VALUE=0xFCF78F00 -DRIVER.ETPWM.VAR.ETPWM3_PWMA_FALLING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM4_OSHT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_DCAEVT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_PWMA_RISING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM4_OSHT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_SOCA_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM1_DCAEVT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_OSHT3.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_OSHT4.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_PWMB_PERIOD_REG.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM4_OSHT5.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_PWMB_RISING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM4_OSHT6.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_PWMB_RISING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM5_ENABLE_SOCA.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_ENABLE_SOCB.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_HSPCLKDIV_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_PWMB_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM2_PWMB_PERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM3_PWMA_ENA.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM1_PWMA_POLARITY.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM5_SOCB_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM4_DEADBAND_OUTPUT.VALUE=PWMA_PWMB_NIL -DRIVER.ETPWM.VAR.ETPWM2_INTERRUPT_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_PWMB_DUTYTIME.VALUE=500.000 -DRIVER.ETPWM.VAR.ETPWM4_PWMA_FALLING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM2_FDELAY_SOURCE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM1_PWMA_RISING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM7_PWMB_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM5_PWMB_COMPARE.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM5_PWMA_RISING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM2_CHOPPER_DUTYTIME_REG.VALUE=3 -DRIVER.ETPWM.VAR.ETPWM1_DCBEVT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_CHOPPER_PERIOD.VALUE=100.000 -DRIVER.ETPWM.VAR.ETPWM1_DCBEVT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_TB_ACTUALFREQUENCY.VALUE=80.000 -DRIVER.ETPWM.VAR.ETPWM2_ENABLE_SOCA.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_ENABLE_SOCB.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_HSPCLKDIV.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM5_PWMB_RISING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM4_CHOPPER_DUTYTIME_REG.VALUE=3 -DRIVER.ETPWM.VAR.ETPWM4_CHOPPER_DUTY_NEW.VALUE=50.0 -DRIVER.ETPWM.VAR.ETPWM6_CBC1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_PWMA_RISING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM6_CBC2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM6_CBC3.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM6_CHOPPER_DUTYTIME_REG.VALUE=3 -DRIVER.ETPWM.VAR.ETPWM4_CHOPPER_PERIOD_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_CBC4.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_SOCB_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_CBC5.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM6_CBC6.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_PWMA_PERIOD_REG.VALUE=1000 -DRIVER.ETPWM.VAR.ETPWM6_CHOPPER_MODE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_PWMB_ENA.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM4_PWMA_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM7_SELECT_SOCA.VALUE=DCAEVT1 -DRIVER.ETPWM.VAR.ETPWM5_PWMA_FALLING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM5_BASE.VALUE=0xFCF79000 -DRIVER.ETPWM.VAR.ETPWM3_PWMA_RISING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM7_SELECT_SOCB.VALUE=DCBEVT1 -DRIVER.ETPWM.VAR.ETPWM7_OSHT_WIDTH.VALUE=100 -DRIVER.ETPWM.VAR.ETPWM1_CLKDIV.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_CHOPPER_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM6_PWMA_POLARITY.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_PWMB_PERIOD_REG.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM4_PWMB_DEADBAND_OUT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM7_FDELAY_SOURCE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM4_RDELAY_SOURCE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM4_PWMA_DUTYTIME.VALUE=500.000 -DRIVER.ETPWM.VAR.ETPWM7_DCAEVT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_PWMA_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM7_DCAEVT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_PWMA_RISING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM7_HSPCLKDIV.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM5_CLKDIV_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM2_PWMB_COMPARE.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM2_DEADBAND_OUTPUT.VALUE=PWMA_PWMB_NIL -DRIVER.ETPWM.VAR.ETPWM1_INTERRUPT_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM4_SELECT_SOCA.VALUE=DCAEVT1 -DRIVER.ETPWM.VAR.ETPWM5_SELECT_EVENT.VALUE=NO_EVENT -DRIVER.ETPWM.VAR.ETPWM4_SELECT_SOCB.VALUE=DCBEVT1 -DRIVER.ETPWM.VAR.ETPWM1_OSHT_WIDTH.VALUE=100 -DRIVER.ETPWM.VAR.ETPWM4_OSHT_WIDTH_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_PWMA_FALLING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM5_PWMA_RISING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM6_PWMA_ENA.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM3_CHOPPER_DUTY_NEW.VALUE=50.0 -DRIVER.ETPWM.VAR.ETPWM2_CHOPPER_ACTUALPERIOD.VALUE=100.000 -DRIVER.ETPWM.VAR.ETPWM2_OSHT_ACTUAL_WIDTH.VALUE=100 -DRIVER.ETPWM.VAR.ETPWM7_DCBEVT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_CHOPPER_MODE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM7_DCBEVT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_CHOPPER_ACTUALPERIOD.VALUE=100.000 -DRIVER.ETPWM.VAR.ETPWM2_PWMA_DEADBAND_OUT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM7_CBC1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM6_PWMA_RISING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM5_TB_FREQUENCY.VALUE=110.000 -DRIVER.ETPWM.VAR.ETPWM1_SELECT_SOCA.VALUE=DCAEVT1 -DRIVER.ETPWM.VAR.ETPWM7_CBC2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_SELECT_SOCB.VALUE=DCBEVT1 -DRIVER.ETPWM.VAR.ETPWM7_CBC3.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_PWMA_PERIOD_REG.VALUE=1000 -DRIVER.ETPWM.VAR.ETPWM3_CHOPPER_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM2_HSPCLKDIV_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM7_CBC4.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM6_CHOPPER_ACTUALPERIOD.VALUE=100.000 -DRIVER.ETPWM.VAR.ETPWM7_CBC5.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_CBC6.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_PWMB_POLARITY.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM5_PWMA_COMPARE.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM3_PWMA_RISING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM1_CHOPPER_PERIOD_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM1_PWMB_PERIOD_REG.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM7_PWMA_FALLING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM7_PWMA_RISING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM6_BASE.VALUE=0xFCF79100 -DRIVER.ETPWM.VAR.ETPWM3_PWMB_DUTYTIME.VALUE=500.000 -DRIVER.ETPWM.VAR.ETPWM6_PWMB_ENA.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM5_OSHT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_PWMB_RISING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_PWMA_PERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM5_OSHT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_DEADBAND_INPUT.VALUE=PWMA_RED_FED -DRIVER.ETPWM.VAR.ETPWM5_PWMB_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM5_OSHT3.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_OSHT4.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_SELECT_EVENT.VALUE=NO_EVENT -DRIVER.ETPWM.VAR.ETPWM5_OSHT5.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_PWMB_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM5_OSHT6.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_OSHT_ACTUAL_WIDTH.VALUE=100 -DRIVER.ETPWM.VAR.ETPWM6_CLKDIV.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM7_PWMA_DEADBAND_OUT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM7_HSPCLKDIV_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM2_CHOPPER_DUTY_NEW.VALUE=50.0 -DRIVER.ETPWM.VAR.ETPWM3_PWMA_PERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM2_TB_FREQUENCY.VALUE=110.000 -DRIVER.ETPWM.VAR.ETPWM6_DCAEVT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_PWMA_POLARITY.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_SOCA_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_DCAEVT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_FDELAY_SOURCE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM1_RDELAY_SOURCE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM1_PWMA_DUTYTIME.VALUE=500.000 -DRIVER.ECAP.VAR.ECAP1_PRESCALE_REG.VALUE=0 -DRIVER.ECAP.VAR.ECAP2_ENA_PWM.VALUE=0 -DRIVER.ECAP.VAR.ECAP4_PRD.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP6_RESET_COUNTER_CAP1.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP6_RESET_COUNTER_CAP2.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP6_RESET_COUNTER_CAP3.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP6_RESET_COUNTER_CAP4.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP5_PWM_DUTY.VALUE=50 -DRIVER.ECAP.VAR.ECAP5_PWM_PERIOD.VALUE=1000.000 -DRIVER.ECAP.VAR.ECAP4_CAP2_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP5_PRESCALE.VALUE=0 -DRIVER.ECAP.VAR.ECAP5_PRD.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP6_PWM_COMPARE.VALUE=50 -DRIVER.ECAP.VAR.ECAP5_CAP4_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP5_ENA_LOAD.VALUE=0 -DRIVER.ECAP.VAR.ECAP6_PWM_PERIOD_REG.VALUE=0 -DRIVER.ECAP.VAR.ECAP6_WRAP_COUNTER.VALUE=CAPTURE_EVENT1 -DRIVER.ECAP.VAR.ECAP3_PWM_COMPARE.VALUE=50 -DRIVER.ECAP.VAR.ECAP2_CAP1_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP6_PRD.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP4_PWM_DUTYTIME.VALUE=500.000 -DRIVER.ECAP.VAR.ECAP3_RESET_COUNTER_CAP1.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP3_CAP3_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP3_RESET_COUNTER_CAP2.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP3_RESET_COUNTER_CAP3.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP3_RESET_COUNTER_CAP4.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP1_ENA_PWM.VALUE=0 -DRIVER.ECAP.VAR.ECAP3_WRAP_COUNTER.VALUE=CAPTURE_EVENT1 -DRIVER.ECAP.VAR.ECAP2_PWM_PERIOD_REG.VALUE=0 -DRIVER.ECAP.VAR.ECAP5_RESET_COUNTER.VALUE=0 -DRIVER.ECAP.VAR.ECAP5_CEVT1.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP4_CAPTURE_MODE.VALUE=ONE_SHOT -DRIVER.ECAP.VAR.ECAP5_CEVT2.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP5_CEVT3.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP5_CEVT4.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP1_PWM_DUTY.VALUE=50 -DRIVER.ECAP.VAR.ECAP1_CAP2_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP4_PWM_PERIOD.VALUE=1000.000 -DRIVER.ECAP.VAR.ECAP1_PWM_DUTYTIME.VALUE=500.000 -DRIVER.ECAP.VAR.ECAP5_CNTOVF.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP5_PRESCALE_REG.VALUE=0 -DRIVER.ECAP.VAR.ECAP2_CAP4_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP1_PRESCALE.VALUE=0 -DRIVER.ECAP.VAR.ECAP1_ENA_LOAD.VALUE=0 -DRIVER.ECAP.VAR.ECAP6_CAP2_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP1_CAPTURE_MODE.VALUE=ONE_SHOT -DRIVER.ECAP.VAR.ECAP2_PRESCALE_REG.VALUE=0 -DRIVER.ECAP.VAR.ECAP4_PWM_DUTY.VALUE=50 -DRIVER.ECAP.VAR.ECAP6_PWM_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ECAP.VAR.ECAP4_CAP1_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP1_CEVT1.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP1_CEVT2.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP1_CEVT3.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP2_RESET_COUNTER.VALUE=0 -DRIVER.ECAP.VAR.ECAP1_CEVT4.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP4_PRESCALE.VALUE=0 -DRIVER.ECAP.VAR.ECAP5_CAP3_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP4_ENA_LOAD.VALUE=0 -DRIVER.ECAP.VAR.ECAP3_CNTOVF.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP3_PWM_PERIOD.VALUE=1000.000 -DRIVER.ECAP.VAR.ECAP5_RESET_COUNTER_CAP1.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP5_RESET_COUNTER_CAP2.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP5_RESET_COUNTER_CAP3.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP5_RESET_COUNTER_CAP4.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP6_CEVT1.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP3_PWM_PERIOD_REG.VALUE=0 -DRIVER.ECAP.VAR.ECAP6_CEVT2.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP6_CEVT3.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP6_CEVT4.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP5_PWM_COMPARE.VALUE=50 -DRIVER.ECAP.VAR.ECAP5_PWM_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ECAP.VAR.ECAP6_ENA_PWM.VALUE=0 -DRIVER.ECAP.VAR.ECAP3_CAP2_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP5_PWM_DUTYTIME.VALUE=500.000 -DRIVER.ECAP.VAR.ECAP1_BASE.VALUE=0xFCF79300 -DRIVER.ECAP.VAR.ECAP4_CAP4_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP2_PWM_COMPARE.VALUE=50 -DRIVER.ECAP.VAR.ECAP4_WRAP_COUNTER.VALUE=CAPTURE_EVENT1 -DRIVER.ECAP.VAR.ECAP5_CAPTURE_MODE.VALUE=ONE_SHOT -DRIVER.ECAP.VAR.ECAP1_CAP1_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP2_RESET_COUNTER_CAP1.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP4_PWM_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ECAP.VAR.ECAP2_RESET_COUNTER_CAP2.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP1_CNTOVF.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP2_PWM_DUTYTIME.VALUE=500.000 -DRIVER.ECAP.VAR.ECAP2_RESET_COUNTER_CAP3.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP2_RESET_COUNTER_CAP4.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP2_CAP3_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP6_PRESCALE_REG.VALUE=0 -DRIVER.ECAP.VAR.ECAP2_BASE.VALUE=0xFCF79400 -DRIVER.ECAP.VAR.ECAP2_CEVT1.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP2_CEVT2.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP2_PWM_PERIOD.VALUE=1000.000 -DRIVER.ECAP.VAR.ECAP2_CEVT3.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP2_CEVT4.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP1_WRAP_COUNTER.VALUE=CAPTURE_EVENT1 -DRIVER.ECAP.VAR.ECAP6_CAP1_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP5_ENA_PWM.VALUE=0 -DRIVER.ECAP.VAR.ECAP4_RESET_COUNTER.VALUE=0 -DRIVER.ECAP.VAR.ECAP2_CAPTURE_MODE.VALUE=ONE_SHOT -DRIVER.ECAP.VAR.ECAP3_PWM_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ECAP.VAR.ECAP3_PWM_DUTY.VALUE=50 -DRIVER.ECAP.VAR.ECAP3_PRESCALE_REG.VALUE=0 -DRIVER.ECAP.VAR.ECAP1_CAP4_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP4_PWM_PERIOD_REG.VALUE=0 -DRIVER.ECAP.VAR.ECAP3_PRESCALE.VALUE=0 -DRIVER.ECAP.VAR.ECAP6_CNTOVF.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP3_BASE.VALUE=0xFCF79500 -DRIVER.ECAP.VAR.ECAP5_CAP2_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP3_ENA_LOAD.VALUE=0 -DRIVER.ECAP.VAR.ECAP6_CAP4_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP1_CMP.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP2_PWM_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ECAP.VAR.ECAP4_ENA_PWM.VALUE=0 -DRIVER.ECAP.VAR.ECAP3_CAP1_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP1_PWM_PERIOD.VALUE=1000.000 -DRIVER.ECAP.VAR.ECAP1_RESET_COUNTER.VALUE=0 -DRIVER.ECAP.VAR.ECAP6_PWM_DUTY.VALUE=50 -DRIVER.ECAP.VAR.ECAP2_CMP.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP6_PWM_DUTYTIME.VALUE=500.000 -DRIVER.ECAP.VAR.ECAP4_CAP3_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP4_BASE.VALUE=0xFCF79600 -DRIVER.ECAP.VAR.ECAP6_PRESCALE.VALUE=0 -DRIVER.ECAP.VAR.ECAP4_PWM_COMPARE.VALUE=50 -DRIVER.ECAP.VAR.ECAP4_RESET_COUNTER_CAP1.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP3_CEVT1.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP4_RESET_COUNTER_CAP2.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP3_CEVT2.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP4_RESET_COUNTER_CAP3.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP3_CEVT3.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP4_RESET_COUNTER_CAP4.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP3_CEVT4.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP6_ENA_LOAD.VALUE=0 -DRIVER.ECAP.VAR.ECAP5_WRAP_COUNTER.VALUE=CAPTURE_EVENT1 -DRIVER.ECAP.VAR.ECAP4_CNTOVF.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP3_CMP.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP1_PWM_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ECAP.VAR.ECAP6_RESET_COUNTER.VALUE=0 -DRIVER.ECAP.VAR.ECAP6_CAPTURE_MODE.VALUE=ONE_SHOT -DRIVER.ECAP.VAR.ECAP1_PWM_COMPARE.VALUE=50 -DRIVER.ECAP.VAR.ECAP2_CAP2_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP3_PWM_DUTYTIME.VALUE=500.000 -DRIVER.ECAP.VAR.ECAP3_CAP4_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP4_CMP.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP1_PRD.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP5_PWM_PERIOD_REG.VALUE=0 -DRIVER.ECAP.VAR.ECAP6_PWM_PERIOD.VALUE=1000.000 -DRIVER.ECAP.VAR.ECAP5_BASE.VALUE=0xFCF79700 -DRIVER.ECAP.VAR.ECAP3_ENA_PWM.VALUE=0 -DRIVER.ECAP.VAR.ECAP2_WRAP_COUNTER.VALUE=CAPTURE_EVENT1 -DRIVER.ECAP.VAR.ECAP3_CAPTURE_MODE.VALUE=ONE_SHOT -DRIVER.ECAP.VAR.ECAP1_RESET_COUNTER_CAP1.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP1_RESET_COUNTER_CAP2.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP1_RESET_COUNTER_CAP3.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP1_RESET_COUNTER_CAP4.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP5_CMP.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP2_PRD.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP2_PWM_DUTY.VALUE=50 -DRIVER.ECAP.VAR.ECAP1_CAP3_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP4_PRESCALE_REG.VALUE=0 -DRIVER.ECAP.VAR.ECAP2_PRESCALE.VALUE=0 -DRIVER.ECAP.VAR.ECAP2_CNTOVF.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP5_CAP1_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP1_PWM_PERIOD_REG.VALUE=0 -DRIVER.ECAP.VAR.ECAP6_CMP.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP2_ENA_LOAD.VALUE=0 -DRIVER.ECAP.VAR.ECAP3_PRD.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP3_RESET_COUNTER.VALUE=0 -DRIVER.ECAP.VAR.ECAP6_BASE.VALUE=0xFCF79800 -DRIVER.ECAP.VAR.ECAP6_CAP3_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP4_CEVT1.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP4_CEVT2.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP4_CEVT3.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP4_CEVT4.VALUE=0x0000 -DRIVER.EQEP.VAR.EQEP2_QUPRD.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_INDEX_EVT_INIT_ENABLE.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_IGATE.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_QPE_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_PC_RST_MODE.VALUE=MAX_POSITION -DRIVER.EQEP.VAR.EQEP1_UTO_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_SEL_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_INDEX_EVT_SELECT.VALUE=RISING_EDGE -DRIVER.EQEP.VAR.EQEP2_PCE_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_PCU_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_BASE.VALUE=0xFCF79900 -DRIVER.EQEP.VAR.EQEP1_INV_QEPS_POL.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_INV_QEPA_POL.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_PCSHDW.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_PC_INIT_VALUE.VALUE=0x00000000 -DRIVER.EQEP.VAR.EQEP2_PCR_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_BASE.VALUE=0xFCF79A00 -DRIVER.EQEP.VAR.EQEP1_ENABLE_CAPTURE.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_INV_QEPB_POL.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_MAXPC_VALUE.VALUE=0x00000000 -DRIVER.EQEP.VAR.EQEP1_PCM_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_PCPOL.VALUE=ACTIVE_HIGH -DRIVER.EQEP.VAR.EQEP2_UNIT_POS_PRESCALER.VALUE=PS_512 -DRIVER.EQEP.VAR.EQEP2_CAP_CLK_PRESCALER.VALUE=PS_8 -DRIVER.EQEP.VAR.EQEP1_PCSPW.VALUE=0x000 -DRIVER.EQEP.VAR.EQEP1_POSCMP.VALUE=0x00000000 -DRIVER.EQEP.VAR.EQEP2_PC_MODE.VALUE=DIRECTION_COUNT -DRIVER.EQEP.VAR.EQEP1_PCE_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_INV_QEPS_POL.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_SET_INIT_AT_STARTUP.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_ENABLE_CAPTURE.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_STROBE_EVT_SELECT.VALUE=DIRECTON_DEPENDENT -DRIVER.EQEP.VAR.EQEP2_PCPOL.VALUE=ACTIVE_HIGH -DRIVER.EQEP.VAR.EQEP2_INV_QEPA_POL.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_CAP_CLK_PRESCALER.VALUE=PS_8 -DRIVER.EQEP.VAR.EQEP2_QDC_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_QCLM.VALUE=ON_POSITION_COUNTER_READ -DRIVER.EQEP.VAR.EQEP1_PC_MODE.VALUE=DIRECTION_COUNT -DRIVER.EQEP.VAR.EQEP2_WTO_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_SWI_ENABLE.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_PCR_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_INV_QEPB_POL.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_IEL.VALUE=RISING_EDGE -DRIVER.EQEP.VAR.EQEP2_PCSPW.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_PC_INIT_VALUE.VALUE=0x00000000 -DRIVER.EQEP.VAR.EQEP1_PCLOAD.VALUE=QPOSCNT_EQ_QPSCMP -DRIVER.EQEP.VAR.EQEP2_IEL_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_IEL.VALUE=RISING_EDGE -DRIVER.EQEP.VAR.EQEP1_MAXPC_VALUE.VALUE=0x00000000 -DRIVER.EQEP.VAR.EQEP1_INV_QEPI_POL.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_QCLM.VALUE=ON_POSITION_COUNTER_READ -DRIVER.EQEP.VAR.EQEP1_STROBE_EVT_INIT_ENABLE.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_PCO_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_STROBE_EVT_INIT_ENABLE.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_EXT_CLK_RATE.VALUE=RESOLUTION_1x -DRIVER.EQEP.VAR.EQEP1_STROBE_EVT_SELECT.VALUE=DIRECTON_DEPENDENT -DRIVER.EQEP.VAR.EQEP1_UNIT_POS_PRESCALER.VALUE=PS_512 -DRIVER.EQEP.VAR.EQEP1_WDPRD.VALUE=0x0000 -DRIVER.EQEP.VAR.EQEP1_SEL.VALUE=RISING_EDGE -DRIVER.EQEP.VAR.EQEP1_SOEN.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_QPE_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_PC_RST_MODE.VALUE=MAX_POSITION -DRIVER.EQEP.VAR.EQEP1_WDE.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_SET_INIT_AT_STARTUP.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_UTO_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_SWI_ENABLE.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_POSITIVE_ROTATION.VALUE=CLOCKWISE -DRIVER.EQEP.VAR.EQEP2_SEL_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_SEL.VALUE=RISING_EDGE -DRIVER.EQEP.VAR.EQEP2_PCU_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_WDE.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_SPSEL.VALUE=INDEX_PIN -DRIVER.EQEP.VAR.EQEP1_PCSHDW.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_SWAP.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_SOEN.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_POSCMP.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_QUPRD.VALUE=0x00000000 -DRIVER.EQEP.VAR.EQEP1_IGATE.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_QDC_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_SWAP.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_WDPRD.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_WTO_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_POSITIVE_ROTATION.VALUE=CLOCKWISE -DRIVER.EQEP.VAR.EQEP2_INV_QEPI_POL.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_PCM_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_IEL_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_EXT_CLK_RATE.VALUE=RESOLUTION_1x -DRIVER.EQEP.VAR.EQEP2_SPSEL.VALUE=INDEX_PIN -DRIVER.EQEP.VAR.EQEP1_PCO_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_INDEX_EVT_SELECT.VALUE=RISING_EDGE -DRIVER.EQEP.VAR.EQEP1_INDEX_EVT_INIT_ENABLE.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_PCLOAD.VALUE=QPOSCNT_EQ_QPSCMP -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_11_NUMBER.VALUE=11 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_10_END.VALUE=9 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_7_NUMBER.VALUE=7 -DRIVER.FEE.VAR.FEE_START_SECTOR.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_3_DEVICE_INDEX.VALUE=0x00000000 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_13_DATASETS.VALUE=1 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_4_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_21_START.VALUE=20 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_13_START.VALUE=12 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_9_START.VALUE=8 -DRIVER.FEE.VAR.FEE_VS29_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_11_OFFSET.VALUE=0 -DRIVER.FEE.VAR.FEE_VS30_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VS22_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VS14_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_9_OFFSET.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_32_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_24_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_16_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_11_END.VALUE=10 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_11_SIZE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_2_WRITE_CYCLES.VALUE=0x8 -DRIVER.FEE.VAR.FEE_VS7_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_2_OFFSET.VALUE=0 -DRIVER.FEE.VAR.FEE_READ_CYCLE_COUNT.VALUE=10 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_5_IMED_DATA.VALUE=TRUE -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_3_DATASETS.VALUE=1 -DRIVER.FEE.VAR.FEE_NUMBER_OF_VIRTUAL_SECTORS.VALUE=4 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX15_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX4_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_FLASH_CRC_ENABLE.VALUE=STD_ON -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_26_START.VALUE=25 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_18_START.VALUE=17 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_7_SIZE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_12_NUMBER.VALUE=12 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_20_END.VALUE=19 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_12_END.VALUE=11 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_10_EEP.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_16_WRITE_CYCLES.VALUE=0x8 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_5_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_3_NUMBER.VALUE=3 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_32_NUMBER.VALUE=32 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_24_NUMBER.VALUE=24 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_16_NUMBER.VALUE=16 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_13_IMED_DATA.VALUE=TRUE -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_16_DATASETS.VALUE=1 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_5_NUMBER.VALUE=5 -DRIVER.FEE.VAR.FEE_SECTORS_EEP1.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_33_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_25_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_17_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_21_END.VALUE=20 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_13_END.VALUE=12 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_12_SIZE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_16_OFFSET.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_14_DEVICE_INDEX.VALUE=0x00000000 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_11_EEP.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_5_START.VALUE=4 -DRIVER.FEE.VAR.FEE_BLOCK_NUMBER.VALUE=1 -DRIVER.FEE.VAR.FEE_VS27_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VS19_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VS20_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VS12_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_7_OFFSET.VALUE=0 -DRIVER.FEE.VAR.FEE_DRIVER_INDEX.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_6_DATASETS.VALUE=1 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_13_WRITE_CYCLES.VALUE=0x8 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_9_WRITE_CYCLES.VALUE=0x8 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_8_SIZE.VALUE=0 -DRIVER.FEE.VAR.FEE_VS5_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_30_END.VALUE=29 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_22_END.VALUE=21 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_14_END.VALUE=13 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX9_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_12_EEP.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX13_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX2_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_6_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_30_START.VALUE=29 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_22_START.VALUE=21 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_14_START.VALUE=13 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_3_IMED_DATA.VALUE=TRUE -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_11_DEVICE_INDEX.VALUE=0x00000000 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_7_DEVICE_INDEX.VALUE=0x00000000 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_10_NUMBER.VALUE=10 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_26_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_18_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_NUMBER_OF_EEPS.VALUE=1 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_8_NUMBER.VALUE=8 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_31_END.VALUE=30 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_29_NUMBER.VALUE=29 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_23_END.VALUE=22 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_15_END.VALUE=14 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_13_SIZE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_13_EEP.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_1_NUMBER.VALUE=1 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_30_NUMBER.VALUE=30 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_22_NUMBER.VALUE=22 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_14_NUMBER.VALUE=14 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_10_WRITE_CYCLES.VALUE=0x8 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_6_WRITE_CYCLES.VALUE=0x8 -DRIVER.FEE.VAR.FEE_DEVICE_INDEX.VALUE=0 -DRIVER.FEE.VAR.FEE_PAGE_OVERHEAD.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_3_NUMBER.VALUE=3 -DRIVER.FEE.VAR.FEE_TI_FEE_SW_MAJOR_VERSION.VALUE=1 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_27_START.VALUE=26 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_19_START.VALUE=18 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_11_IMED_DATA.VALUE=TRUE -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_9_SIZE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_8_IMED_DATA.VALUE=TRUE -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_14_OFFSET.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_12_DATASETS.VALUE=1 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_9_DATASETS.VALUE=1 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_32_END.VALUE=31 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_24_END.VALUE=23 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_16_END.VALUE=15 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_1_END.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_1_START.VALUE=0 -DRIVER.FEE.VAR.FEE_VS33_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VS25_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VS17_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_14_EEP.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_4_DEVICE_INDEX.VALUE=0x00000000 -DRIVER.FEE.VAR.FEE_SECTOR_NUMBER.VALUE=1 -DRIVER.FEE.VAR.FEE_VS10_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUALPAGE_SIZE.VALUE=8 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_5_OFFSET.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_7_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VS3_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX7_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_3_WRITE_CYCLES.VALUE=0x8 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_1_EEP.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_2_DATASETS.VALUE=1 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_27_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_19_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_33_END.VALUE=32 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_25_END.VALUE=24 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_17_END.VALUE=16 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_2_END.VALUE=1 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_16_IMED_DATA.VALUE=TRUE -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_14_SIZE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX11_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_FLASH_WRITECOUNTER_SAVE.VALUE=STD_ON -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_15_EEP.VALUE=0 -DRIVER.FEE.VAR.FEE_VS_INDEX.VALUE=2 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_15_NUMBER.VALUE=15 -DRIVER.FEE.VAR.FEE_TI_FEE_SW_PATCH_VERSION.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_10_START.VALUE=9 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_6_START.VALUE=5 -DRIVER.FEE.VAR.FEE_JOBERROR_NOTIFICATION.VALUE=JobErrorNotification -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_1_DEVICE_INDEX.VALUE=0x00000000 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_10_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_6_NUMBER.VALUE=6 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_27_NUMBER.VALUE=27 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_19_NUMBER.VALUE=19 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_1_IMED_DATA.VALUE=TRUE -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_2_EEP.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_26_END.VALUE=25 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_20_NUMBER.VALUE=20 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_18_END.VALUE=17 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_12_NUMBER.VALUE=12 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_8_NUMBER.VALUE=8 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_3_END.VALUE=2 -DRIVER.FEE.VAR.FEE_BLOCK_SIZE.VALUE=0x10 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_16_EEP.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_15_DATASETS.VALUE=1 -DRIVER.FEE.VAR.FEE_TOTAL_BLOCKS_DATASETS.VALUE=1 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_1_NUMBER.VALUE=1 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_8_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_31_START.VALUE=30 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_23_START.VALUE=22 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_15_START.VALUE=14 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_1_SIZE.VALUE=8 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_12_OFFSET.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX.VALUE=1 -DRIVER.FEE.VAR.FEE_VS31_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VS23_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VS15_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_15_DEVICE_INDEX.VALUE=0x00000000 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_3_EEP.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_28_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_27_END.VALUE=26 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_19_END.VALUE=18 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_4_END.VALUE=3 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_15_SIZE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_6_IMED_DATA.VALUE=TRUE -DRIVER.FEE.VAR.FEE_VS8_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_3_OFFSET.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_5_DATASETS.VALUE=1 -DRIVER.FEE.VAR.FEE_MAXIMUM_BLOCKING_TIME.VALUE=600 -DRIVER.FEE.VAR.FEE_VS1_ENABLE.VALUE=1 -DRIVER.FEE.VAR.FEE_NO_OF_UNCONFIGURED_BLOCKS_TO_COPY.VALUE=0 -DRIVER.FEE.VAR.FEE_FLASH_BANK_NUM.VALUE=7 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX16_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_14_WRITE_CYCLES.VALUE=0x8 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX5_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_11_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_28_START.VALUE=27 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_4_EEP.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_13_NUMBER.VALUE=13 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_28_END.VALUE=27 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_5_END.VALUE=4 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_2_START.VALUE=1 -DRIVER.FEE.VAR.FEE_SECTOR_OVERHEAD.VALUE=16 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_14_IMED_DATA.VALUE=TRUE -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_12_DEVICE_INDEX.VALUE=0x00000000 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_8_DEVICE_INDEX.VALUE=0x00000000 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_9_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_4_NUMBER.VALUE=4 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_33_NUMBER.VALUE=32 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_25_NUMBER.VALUE=25 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_17_NUMBER.VALUE=17 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_2_SIZE.VALUE=0 -DRIVER.FEE.VAR.FEE_TI_FEE_SW_MINOR_VERSION.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_10_NUMBER.VALUE=10 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_6_NUMBER.VALUE=6 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_5_EEP.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_29_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_29_END.VALUE=28 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_6_END.VALUE=5 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_16_SIZE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_11_WRITE_CYCLES.VALUE=0x8 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_7_WRITE_CYCLES.VALUE=0x8 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_11_START.VALUE=10 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_7_START.VALUE=6 -DRIVER.FEE.VAR.FEE_VS28_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VERSIONINFO_API.VALUE=STD_ON -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_10_OFFSET.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_11_DATASETS.VALUE=1 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_8_DATASETS.VALUE=1 -DRIVER.FEE.VAR.MAX_BLOCK_TIME.VALUE=600 -DRIVER.FEE.VAR.FEE_VS21_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VS13_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_8_OFFSET.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_20_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_12_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VS6_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_WRITE_CYCLES.VALUE=10 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_6_EEP.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_5_DEVICE_INDEX.VALUE=0x00000000 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_1_OFFSET.VALUE=16 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_7_END.VALUE=6 -DRIVER.FEE.VAR.FEE_NUMBER_OF_BLOCKS.VALUE=1 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_BANK.VALUE=1 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX14_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_4_IMED_DATA.VALUE=TRUE -DRIVER.FEE.VAR.FEE_BLOCK_INDEX3_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_NUMBER_OF_EIGHTBYTEWRITES.VALUE=1 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_1_DATASETS.VALUE=1 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_32_START.VALUE=31 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_24_START.VALUE=23 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_16_START.VALUE=15 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_4_WRITE_CYCLES.VALUE=0x8 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_3_SIZE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_11_NUMBER.VALUE=11 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_7_EEP.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_9_NUMBER.VALUE=9 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_8_END.VALUE=7 -DRIVER.FEE.VAR.FEE_END_SECTOR.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_1_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_2_NUMBER.VALUE=2 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_31_NUMBER.VALUE=31 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_23_NUMBER.VALUE=23 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_15_NUMBER.VALUE=15 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_2_DEVICE_INDEX.VALUE=0x00000000 -DRIVER.FEE.VAR.FEE_FLASH_ERROR_CORRECTION_HANDLING.VALUE=TI_Fee_None -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_4_NUMBER.VALUE=4 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_12_IMED_DATA.VALUE=TRUE -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_9_IMED_DATA.VALUE=TRUE -DRIVER.FEE.VAR.FEE_DEVERROR_DETECT.VALUE=STD_ON -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_14_DATASETS.VALUE=1 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_21_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_13_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_29_START.VALUE=28 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_15_OFFSET.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_8_EEP.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_9_END.VALUE=8 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_3_START.VALUE=2 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_1_WRITE_CYCLES.VALUE=0x8 -DRIVER.FEE.VAR.FEE_VS26_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VS18_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VS11_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_6_OFFSET.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_4_SIZE.VALUE=0 -DRIVER.FEE.VAR.FEE_VS4_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_16_DEVICE_INDEX.VALUE=0x00000000 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_4_DATASETS.VALUE=1 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX8_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_MAX_NUMBER_OF_LINKS.VALUE=256 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_9_EEP.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX12_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX1_ENABLE.VALUE=1 -DRIVER.FEE.VAR.FEE_FLASH_ERROR_CORRECTION_ENABLE.VALUE=STD_ON -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_2_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_DATASELECT_BITS.VALUE=0 -DRIVER.FEE.VAR.FEE_OPERATING_FREQ.VALUE=150.000 -DRIVER.FEE.VAR.FEE_TOTAL_SECTORS.VALUE=32 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_16_NUMBER.VALUE=16 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_20_START.VALUE=19 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_12_START.VALUE=11 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_8_START.VALUE=7 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_15_WRITE_CYCLES.VALUE=0x8 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_2_IMED_DATA.VALUE=TRUE -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_30_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_22_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_14_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_7_NUMBER.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_28_NUMBER.VALUE=28 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_21_NUMBER.VALUE=21 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_13_NUMBER.VALUE=13 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_9_NUMBER.VALUE=9 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_13_DEVICE_INDEX.VALUE=0x00000000 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_9_DEVICE_INDEX.VALUE=0x00000000 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_2_NUMBER.VALUE=2 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_33_START.VALUE=32 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_25_START.VALUE=24 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_17_START.VALUE=16 -DRIVER.FEE.VAR.FEE_JOBEND_NOTIFICATION.VALUE=JobEndNotification -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_5_SIZE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_13_OFFSET.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_12_WRITE_CYCLES.VALUE=0x8 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_10_IMED_DATA.VALUE=TRUE -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_8_WRITE_CYCLES.VALUE=0x8 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_7_IMED_DATA.VALUE=TRUE -DRIVER.FEE.VAR.FEE_VS32_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VS24_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VS16_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_ENABLE_ECC.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_OVERHEAD.VALUE=24 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_10_DATASETS.VALUE=1 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_7_DATASETS.VALUE=1 -DRIVER.FEE.VAR.FEE_VS9_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_4_OFFSET.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_3_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VS2_ENABLE.VALUE=1 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX6_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_10_DEVICE_INDEX.VALUE=0x00000000 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_6_DEVICE_INDEX.VALUE=0x00000000 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_31_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_23_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_15_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_10_SIZE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX10_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_14_NUMBER.VALUE=14 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_4_START.VALUE=3 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_15_IMED_DATA.VALUE=TRUE -DRIVER.FEE.VAR.FEE_CHECK_BANK7_ACCESS.VALUE=STD_OFF -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_5_WRITE_CYCLES.VALUE=0x8 -DRIVER.FEE.VAR.FEE_POLLING_MODE.VALUE=STD_ON -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_5_NUMBER.VALUE=5 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_26_NUMBER.VALUE=26 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_18_NUMBER.VALUE=18 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_6_SIZE.VALUE=0 -DRIVER.AJSM.VAR.AJSM_NEW_KEY_WORD_2.VALUE=0xFFFDFFFE -DRIVER.AJSM.VAR.AJSM_NEW_KEY_WORD_3.VALUE=0xFFEFFFFF -DRIVER.AJSM.VAR.AJSM_VISIBLE_KEY_WORD_0.VALUE=0xEFFDFFFF -DRIVER.AJSM.VAR.AJSM_VISIBLE_KEY_WORD_1.VALUE=0xFFFFFFFF -DRIVER.AJSM.VAR.AJSM_VISIBLE_KEY_WORD_2.VALUE=0xFFFDFFFE -DRIVER.AJSM.VAR.AJSM_VISIBLE_KEY_WORD_3.VALUE=0xFFEFFFFF -DRIVER.AJSM.VAR.AJSM_SCAN_PATTERN_WORD_0.VALUE=PATTERN_NOT_REQUIRED -DRIVER.AJSM.VAR.AJSM_VISIBLE_KEY_ECC_BYTE_0.VALUE=0xED -DRIVER.AJSM.VAR.AJSM_SCAN_PATTERN_WORD_1.VALUE=PATTERN_NOT_REQUIRED -DRIVER.AJSM.VAR.AJSM_VISIBLE_KEY_ECC_BYTE_1.VALUE=0xED -DRIVER.AJSM.VAR.AJSM_SCAN_PATTERN_WORD_2.VALUE=PATTERN_NOT_REQUIRED -DRIVER.AJSM.VAR.AJSM_SCAN_PATTERN_WORD_3.VALUE=PATTERN_NOT_REQUIRED -DRIVER.AJSM.VAR.AJSM_NEW_KEY_ECC_BYTE_0.VALUE=0xED -DRIVER.AJSM.VAR.AJSM_NEW_KEY_ECC_BYTE_1.VALUE=0xED -DRIVER.AJSM.VAR.AJSM_SCAN_PATTERN.VALUE=PATTERN_NOT_REQUIRED -DRIVER.AJSM.VAR.AJSM_NEW_KEY_WORD_0.VALUE=0xEFFDFFFF -DRIVER.AJSM.VAR.AJSM_NEW_KEY_WORD_1.VALUE=0xFFFFFFFF diff --git a/tests/scripts/waf-tools/f_hcg/tests/test_hcg2.hcg b/tests/scripts/waf-tools/f_hcg/tests/test_hcg2.hcg deleted file mode 100644 index 243c67c9..00000000 --- a/tests/scripts/waf-tools/f_hcg/tests/test_hcg2.hcg +++ /dev/null @@ -1,945 +0,0 @@ - - - - TMS570LC43x - TMS570LC4357ZWT - test_hcg2.dil - ti - - - 04.07.01 - - - - - - - - - - - - - - - - - - - - - - - - - HL_hal_stdtypes.h - include\HL_hal_stdtypes.h - - - HL_sys_common.h - include\HL_sys_common.h - - - HL_reg_system.h - include\HL_reg_system.h - - - HL_reg_flash.h - include\HL_reg_flash.h - - - HL_reg_l2ramw.h - include\HL_reg_l2ramw.h - - - HL_reg_vim.h - include\HL_reg_vim.h - - - HL_reg_pbist.h - include\HL_reg_pbist.h - - - HL_reg_stc.h - include\HL_reg_stc.h - - - HL_reg_efc.h - include\HL_reg_efc.h - - - HL_reg_pcr.h - include\HL_reg_pcr.h - - - HL_reg_pmm.h - include\HL_reg_pmm.h - - - HL_reg_dma.h - include\HL_reg_dma.h - - - HL_reg_ccmr5.h - include\HL_reg_ccmr5.h - - - HL_sys_core.h - include\HL_sys_core.h - - - HL_system.h - include\HL_system.h - - - HL_sys_vim.h - include\HL_sys_vim.h - - - HL_sys_mpu.h - include\HL_sys_mpu.h - - - HL_sys_pmu.h - include\HL_sys_pmu.h - - - HL_sys_pcr.h - include\HL_sys_pcr.h - - - HL_sys_pmm.h - include\HL_sys_pmm.h - - - HL_sys_dma.h - include\HL_sys_dma.h - - - HL_sys_core.asm - source\HL_sys_core.asm - - - HL_sys_intvecs.asm - source\HL_sys_intvecs.asm - - - HL_sys_mpu.asm - source\HL_sys_mpu.asm - - - HL_sys_pmu.asm - source\HL_sys_pmu.asm - - - HL_sys_pcr.c - source\HL_sys_pcr.c - - - HL_sys_pmm.c - source\HL_sys_pmm.c - - - HL_sys_dma.c - source\HL_sys_dma.c - - - HL_system.c - source\HL_system.c - - - HL_sys_phantom.c - source\HL_sys_phantom.c - - - HL_sys_startup.c - source\HL_sys_startup.c - - - HL_sys_vim.c - source\HL_sys_vim.c - - - HL_sys_main.c - source\HL_sys_main.c - - - HL_notification.c - source\HL_notification.c - - - HL_sys_link.cmd - source\HL_sys_link.cmd - - - HL_reg_epc.h - include\HL_reg_epc.h - - - HL_reg_nmpu.h - include\HL_reg_nmpu.h - - - HL_reg_scm.h - include\HL_reg_scm.h - - - HL_reg_sdcmmr.h - include\HL_reg_sdcmmr.h - - - HL_epc.h - include\HL_epc.h - - - HL_epc.c - source\HL_epc.c - - - HL_nmpu.h - include\HL_nmpu.h - - - HL_nmpu.c - source\HL_nmpu.c - - - HL_errata.h - include\HL_errata.h - - - HL_errata.c - source\HL_errata.c - - - HL_Test.h - - - HL_errata_SSWF021_45.h - include\HL_errata_SSWF021_45.h - - - HL_errata_SSWF021_45_defs.h - include\HL_errata_SSWF021_45_defs.h - - - HL_errata_SSWF021_45.c - source\HL_errata_SSWF021_45.c - - - HL_reg_pinmux.h - - - HL_pinmux.h - - - HL_pinmux.c - - - HL_reg_rti.h - - - HL_rti.h - - - HL_rti.c - - - HL_reg_gio.h - - - HL_gio.h - - - HL_gio.c - - - HL_reg_esm.h - - - HL_esm.h - - - HL_esm.c - - - HL_reg_sci.h - - - HL_sci.h - - - HL_sci.c - - - HL_reg_lin.h - - - HL_lin.h - - - - HL_reg_mibspi.h - - - HL_mibspi.h - - - HL_mibspi.c - - - HL_reg_spi.h - - - HL_spi.h - - - - HL_reg_can.h - - - HL_can.h - - - HL_can.c - - - HL_reg_adc.h - - - HL_adc.h - - - HL_adc.c - - - - - - - - - std_nhet.h - - - HL_reg_het.h - - - HL_het.h - - - HL_het.c - - - HL_reg_htu.h - - - HL_htu.h - - - - - - - - - HL_reg_i2c.h - - - HL_i2c.h - - - HL_i2c.c - - - HL_emac.h - - - HL_hw_emac.h - - - HL_hw_emac_ctrl.h - - - HL_hw_mdio.h - - - HL_hw_reg_access.h - - - HL_mdio.h - - - HL_emac.c - - - HL_mdio.c - - - HL_phy_dp83640.c - - - HL_phy_dp83640.h - - - HL_phy_tlk111.c - - - HL_phy_tlk111.h - - - HL_emac_phyConfig.h - - - HL_reg_dcc.h - - - HL_dcc.h - - - HL_dcc.c - - - HL_reg_rtp.h - - - HL_rtp.h - - - - HL_reg_dmm.h - - - HL_dmm.h - - - - HL_reg_emif.h - - - HL_emif.h - - - HL_emif.c - - - HL_reg_pom.h - - - HL_pom.h - - - HL_pom.c - - - HL_reg_crc.h - - - HL_crc.h - - - HL_crc.c - - - HL_reg_etpwm.h - - - HL_etpwm.h - - - HL_etpwm.c - - - HL_reg_ecap.h - - - HL_ecap.h - - - HL_ecap.c - - - HL_reg_eqep.h - - - HL_eqep.h - - - HL_eqep.c - - - Device_TMS570LC43.h - - - Device_header.h - - - Device_types.h - - - ti_fee_cfg.h - - - MemMap.h - - - ti_fee_types.h - - - ti_fee.h - - - fee_interface.h - - - Device_TMS570LC43.c - - - ti_fee_cfg.c - - - ti_fee_Info.c - - - ti_fee_ini.c - - - ti_fee_main.c - - - ti_fee_read.c - - - ti_fee_writeSync.c - - - ti_fee_writeAsync.c - - - ti_fee_util.c - - - ti_fee_cancel.c - - - ti_fee_format.c - - - ti_fee_eraseimmediateblock.c - - - ti_fee_invalidateblock.c - - - ti_fee_shutdown.c - - - Fapi_UserDefinedFunctions.c - - - ti_fee_readSync.c - - - - - - - include\HL_reg_pinmux.h - - - include\HL_pinmux.h - - - source\HL_pinmux.c - - - - - - - include\HL_reg_rti.h - - - include\HL_rti.h - - - source\HL_rti.c - - - - - - - include\HL_reg_gio.h - - - include\HL_gio.h - - - source\HL_gio.c - - - - - - - include\HL_reg_esm.h - - - include\HL_esm.h - - - source\HL_esm.c - - - - - - - include\HL_reg_sci.h - - - include\HL_sci.h - - - source\HL_sci.c - - - - - - - include\HL_reg_lin.h - - - include\HL_lin.h - - - - - - - - - - include\HL_reg_mibspi.h - - - include\HL_mibspi.h - - - source\HL_mibspi.c - - - - - - - include\HL_reg_spi.h - - - include\HL_spi.h - - - - - - - - - - include\HL_reg_can.h - - - include\HL_can.h - - - source\HL_can.c - - - - - - - include\HL_reg_adc.h - - - include\HL_adc.h - - - source\HL_adc.c - - - - - - - include\std_nhet.h - - - include\HL_reg_het.h - - - include\HL_het.h - - - source\HL_het.c - - - include\HL_reg_htu.h - - - include\HL_htu.h - - - - - - - include\HL_reg_i2c.h - - - include\HL_i2c.h - - - source\HL_i2c.c - - - - - - - include\HL_emac.h - - - include\HL_hw_emac.h - - - include\HL_hw_emac_ctrl.h - - - include\HL_hw_mdio.h - - - include\HL_hw_reg_access.h - - - include\HL_mdio.h - - - source\HL_emac.c - - - source\HL_mdio.c - - - source\HL_phy_dp83640.c - - - include\HL_phy_dp83640.h - - - source\HL_phy_tlk111.c - - - include\HL_phy_tlk111.h - - - include\HL_emac_phyConfig.h - - - - - - - include\HL_reg_dcc.h - - - include\HL_dcc.h - - - source\HL_dcc.c - - - - - - - include\HL_reg_rtp.h - - - include\HL_rtp.h - - - - - - - - - - include\HL_reg_dmm.h - - - include\HL_dmm.h - - - - - - - - - - include\HL_reg_emif.h - - - include\HL_emif.h - - - source\HL_emif.c - - - - - - - include\HL_reg_pom.h - - - include\HL_pom.h - - - source\HL_pom.c - - - - - - - include\HL_reg_crc.h - - - include\HL_crc.h - - - source\HL_crc.c - - - - - - - include\HL_reg_etpwm.h - - - include\HL_etpwm.h - - - source\HL_etpwm.c - - - - - - - include\HL_reg_ecap.h - - - include\HL_ecap.h - - - source\HL_ecap.c - - - - - - - include\HL_reg_eqep.h - - - include\HL_eqep.h - - - source\HL_eqep.c - - - - - - - include\Device_TMS570LC43.h - - - include\Device_header.h - - - include\Device_types.h - - - include\ti_fee_cfg.h - - - include\MemMap.h - - - include\ti_fee_types.h - - - include\ti_fee.h - - - include\fee_interface.h - - - source\Device_TMS570LC43.c - - - source\ti_fee_cfg.c - - - source\ti_fee_Info.c - - - source\ti_fee_ini.c - - - source\ti_fee_main.c - - - source\ti_fee_read.c - - - source\ti_fee_writeSync.c - - - source\ti_fee_writeAsync.c - - - source\ti_fee_util.c - - - source\ti_fee_cancel.c - - - source\ti_fee_format.c - - - source\ti_fee_eraseimmediateblock.c - - - source\ti_fee_invalidateblock.c - - - source\ti_fee_shutdown.c - - - source\Fapi_UserDefinedFunctions.c - - - source\ti_fee_readSync.c - - - - diff --git a/tests/scripts/waf-tools/f_hcg/tests/test_hcg2.json b/tests/scripts/waf-tools/f_hcg/tests/test_hcg2.json deleted file mode 100644 index 241de7bf..00000000 --- a/tests/scripts/waf-tools/f_hcg/tests/test_hcg2.json +++ /dev/null @@ -1,154 +0,0 @@ -{ - "sources": [ - "source\\HL_sys_core.asm", - "source\\HL_sys_intvecs.asm", - "source\\HL_sys_mpu.asm", - "source\\HL_sys_pmu.asm", - "source\\HL_sys_pcr.c", - "source\\HL_sys_pmm.c", - "source\\HL_sys_dma.c", - "source\\HL_system.c", - "source\\HL_sys_phantom.c", - "source\\HL_sys_startup.c", - "source\\HL_sys_vim.c", - "source\\HL_notification.c", - "source\\HL_epc.c", - "source\\HL_nmpu.c", - "source\\HL_errata.c", - "source\\HL_errata_SSWF021_45.c", - "source\\HL_pinmux.c", - "source\\HL_rti.c", - "source\\HL_gio.c", - "source\\HL_esm.c", - "source\\HL_sci.c", - "source\\HL_mibspi.c", - "source\\HL_can.c", - "source\\HL_adc.c", - "source\\HL_het.c", - "source\\HL_i2c.c", - "source\\HL_emac.c", - "source\\HL_mdio.c", - "source\\HL_phy_dp83640.c", - "source\\HL_phy_tlk111.c", - "source\\HL_dcc.c", - "source\\HL_emif.c", - "source\\HL_pom.c", - "source\\HL_crc.c", - "source\\HL_etpwm.c", - "source\\HL_ecap.c", - "source\\HL_eqep.c", - "source\\Device_TMS570LC43.c", - "source\\ti_fee_cfg.c", - "source\\ti_fee_Info.c", - "source\\ti_fee_ini.c", - "source\\ti_fee_main.c", - "source\\ti_fee_read.c", - "source\\ti_fee_writeSync.c", - "source\\ti_fee_writeAsync.c", - "source\\ti_fee_util.c", - "source\\ti_fee_cancel.c", - "source\\ti_fee_format.c", - "source\\ti_fee_eraseimmediateblock.c", - "source\\ti_fee_invalidateblock.c", - "source\\ti_fee_shutdown.c", - "source\\Fapi_UserDefinedFunctions.c", - "source\\ti_fee_readSync.c" - ], - "headers": [ - "include\\HL_hal_stdtypes.h", - "include\\HL_sys_common.h", - "include\\HL_reg_system.h", - "include\\HL_reg_flash.h", - "include\\HL_reg_l2ramw.h", - "include\\HL_reg_vim.h", - "include\\HL_reg_pbist.h", - "include\\HL_reg_stc.h", - "include\\HL_reg_efc.h", - "include\\HL_reg_pcr.h", - "include\\HL_reg_pmm.h", - "include\\HL_reg_dma.h", - "include\\HL_reg_ccmr5.h", - "include\\HL_sys_core.h", - "include\\HL_system.h", - "include\\HL_sys_vim.h", - "include\\HL_sys_mpu.h", - "include\\HL_sys_pmu.h", - "include\\HL_sys_pcr.h", - "include\\HL_sys_pmm.h", - "include\\HL_sys_dma.h", - "include\\HL_reg_epc.h", - "include\\HL_reg_nmpu.h", - "include\\HL_reg_scm.h", - "include\\HL_reg_sdcmmr.h", - "include\\HL_epc.h", - "include\\HL_nmpu.h", - "include\\HL_errata.h", - "include\\HL_errata_SSWF021_45.h", - "include\\HL_errata_SSWF021_45_defs.h", - "include\\HL_reg_pinmux.h", - "include\\HL_pinmux.h", - "include\\HL_reg_rti.h", - "include\\HL_rti.h", - "include\\HL_reg_gio.h", - "include\\HL_gio.h", - "include\\HL_reg_esm.h", - "include\\HL_esm.h", - "include\\HL_reg_sci.h", - "include\\HL_sci.h", - "include\\HL_reg_lin.h", - "include\\HL_lin.h", - "include\\HL_reg_mibspi.h", - "include\\HL_mibspi.h", - "include\\HL_reg_spi.h", - "include\\HL_spi.h", - "include\\HL_reg_can.h", - "include\\HL_can.h", - "include\\HL_reg_adc.h", - "include\\HL_adc.h", - "include\\std_nhet.h", - "include\\HL_reg_het.h", - "include\\HL_het.h", - "include\\HL_reg_htu.h", - "include\\HL_htu.h", - "include\\HL_reg_i2c.h", - "include\\HL_i2c.h", - "include\\HL_emac.h", - "include\\HL_hw_emac.h", - "include\\HL_hw_emac_ctrl.h", - "include\\HL_hw_mdio.h", - "include\\HL_hw_reg_access.h", - "include\\HL_mdio.h", - "include\\HL_phy_dp83640.h", - "include\\HL_phy_tlk111.h", - "include\\HL_emac_phyConfig.h", - "include\\HL_reg_dcc.h", - "include\\HL_dcc.h", - "include\\HL_reg_rtp.h", - "include\\HL_rtp.h", - "include\\HL_reg_dmm.h", - "include\\HL_dmm.h", - "include\\HL_reg_emif.h", - "include\\HL_emif.h", - "include\\HL_reg_pom.h", - "include\\HL_pom.h", - "include\\HL_reg_crc.h", - "include\\HL_crc.h", - "include\\HL_reg_etpwm.h", - "include\\HL_etpwm.h", - "include\\HL_reg_ecap.h", - "include\\HL_ecap.h", - "include\\HL_reg_eqep.h", - "include\\HL_eqep.h", - "include\\Device_TMS570LC43.h", - "include\\Device_header.h", - "include\\Device_types.h", - "include\\ti_fee_cfg.h", - "include\\MemMap.h", - "include\\ti_fee_types.h", - "include\\ti_fee.h", - "include\\fee_interface.h" - ], - "removes": [ - "source\\HL_sys_main.c" - ] -} diff --git a/tests/scripts/waf-tools/f_hcg/tests/test_hcg3.dil b/tests/scripts/waf-tools/f_hcg/tests/test_hcg3.dil deleted file mode 100644 index b5b3c164..00000000 --- a/tests/scripts/waf-tools/f_hcg/tests/test_hcg3.dil +++ /dev/null @@ -1,11975 +0,0 @@ -# TMS570LC4357ZWT 09/24/20 18:38:46 -# -ARCH=TMS570LC4357ZWT -# -DRIVER.TOOLS.VAR.GCC.VALUE=0 -DRIVER.TOOLS.VAR.ARM.VALUE=0 -DRIVER.TOOLS.VAR.IAR.VALUE=0 -DRIVER.TOOLS.VAR.GHS.VALUE=0 -DRIVER.TOOLS.VAR.TI.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_AVCLK4_DIVIDER.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_PERMISSION.VALUE=PRIV_RW_USER_RW_NOEXEC -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_SUB_3_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_TYPE.VALUE=NORMAL_OIWTNOWA_NONSHARED -DRIVER.SYSTEM.VAR.VIM_CHANNEL_122_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_114_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_106_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_70_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_62_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_54_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_46_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_38_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CAPTURE_EVENT_SOURCE_0.VALUE=0 -DRIVER.SYSTEM.VAR.FLASH_EEPROM_DATA_1_WAIT_STATE_FREQ.VALUE=32.0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_PERMISSION_VALUE.VALUE=0x1200 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_81_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_73_NAME.VALUE=het2LowLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_65_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_57_NAME.VALUE=adc2Group2Interrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_49_NAME.VALUE=mibspi4HighLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_2_MAPPING.VALUE=2 -DRIVER.SYSTEM.VAR.VIM_CAPTURE_EVENT_SOURCE_1.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_SIZE.VALUE=32_BYTES -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_SUB_1_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_SUB_4_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_111_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_103_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.EQEP2_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.FLASH_DATA_3_WAIT_STATE_FREQ.VALUE=180.0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_96_MAPPING.VALUE=96 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_88_MAPPING.VALUE=88 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_1_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_SUB_2_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_SUB_7_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_END_ADDRESS.VALUE=0x0000001f -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_SUB_5_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_DATA_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_11_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.LIN2_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.SPI3_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_PLL1_BYPASS_ON_SLIP.VALUE=0x20000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_TYPE_VALUE.VALUE=0x0002 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_124_NAME.VALUE=epcFullInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_116_NAME.VALUE=sci4HighLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_108_NAME.VALUE=ecap5Interrupt -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_SUB_5_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_BASE_ADDRESS.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_SIZE.VALUE=128_MB -DRIVER.SYSTEM.VAR.VIM_CHANNEL_100_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_98_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_20_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_12_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_2_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.CRC_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.MIBSPI1_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_HCLK_FREQ.VALUE=150.000 -DRIVER.SYSTEM.VAR.CLKT_PLL2_FREQ.VALUE=300.00 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_81_MAPPING.VALUE=81 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_73_MAPPING.VALUE=73 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_65_MAPPING.VALUE=65 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_57_MAPPING.VALUE=57 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_49_MAPPING.VALUE=49 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_40_NAME.VALUE=dmaBTCAInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_32_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_24_NAME.VALUE=het1LowLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_16_NAME.VALUE=can1HighLevelInterrupt -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_SUB_6_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_SUB_0_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_92_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_84_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_76_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_68_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_31_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_23_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_15_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.ECLK_CLKSRC.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_TYPE_VALUE.VALUE=0x0006 -DRIVER.SYSTEM.VAR.CLKT_PLL2_OUTPUT_DIV.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_EXT2_ENABLE.VALUE=FALSE -DRIVER.SYSTEM.VAR.CLKT_PLL1_SOURCE_ENABLE.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_SUB_1_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_END_ADDRESS.VALUE=0x6fffffff -DRIVER.SYSTEM.VAR.VIM_CHANNEL_96_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_88_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_9_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_4_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_RTI2_PRE_SOURCE.VALUE=PLL1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_SIZE_VALUE.VALUE=0x1A -DRIVER.SYSTEM.VAR.VIM_CHANNEL_99_NAME.VALUE=etpwm5TripZoneInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_50_MAPPING.VALUE=50 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_42_MAPPING.VALUE=42 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_34_MAPPING.VALUE=34 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_26_MAPPING.VALUE=26 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_18_MAPPING.VALUE=18 -DRIVER.SYSTEM.VAR.CLKT_VCLK3_DOMAIN_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.FLASH_ECC_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.FLASH_BANKS.VALUE=4 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_TYPE.VALUE=NORMAL_OIWTNOWA_SHARED -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_SUB_4_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_SUB_2_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_IRQ_DISP_ENTRY.VALUE=_isrStub -DRIVER.SYSTEM.VAR.VIM_CHANNEL_111_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_103_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_92_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_84_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_76_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_68_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CAN3_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_AVCLK1_SOURCE.VALUE=VCLK -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_SUB_2_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_SUB_5_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.ETPWM4_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.DCC2_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_PLL1_RESET_ON_OSCILLATOR_FAIL.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_PERMISSION_VALUE.VALUE=0x0500 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_11_MAPPING.VALUE=11 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_PERMISSION.VALUE=PRIV_RW_USER_RW_NOEXEC -DRIVER.SYSTEM.VAR.LBIST_ENA.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_AVCLK2_DOMAIN_ENABLE.VALUE=TRUE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_SUB_3_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_SUB_6_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_TYPE.VALUE=NORMAL_OIWBWA_NONSHARED -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_END_ADDRESS.VALUE=0x00007fff -DRIVER.SYSTEM.VAR.VIM_CHANNEL_41_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_33_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_25_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_17_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_3_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.ECAP6_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.SCI_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.FLASH_DATA_1_WAIT_STATE_FREQ.VALUE=90.0 -DRIVER.SYSTEM.VAR.RAM_STACK_IRQ_BASE.VALUE=0x08000500 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_125_MAPPING.VALUE=125 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_117_MAPPING.VALUE=117 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_109_MAPPING.VALUE=109 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_90_NAME.VALUE=etpwm1Interrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_82_NAME.VALUE=dcc1DoneInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_74_NAME.VALUE=sciLowLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_66_NAME.VALUE=i2cInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_58_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.CLKT_AVCLK3_DOMAIN_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_PMU_GLOBAL_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_SIZE.VALUE=512_KB -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_END_ADDRESS.VALUE=0x0000001f -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_SUB_4_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_BASE_ADDRESS.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_TASK_REGION_STACK.VALUE=12 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_97_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_89_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_81_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_73_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_70_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_65_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_62_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_57_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_54_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_49_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_46_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_38_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.EMAC_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_8_MAPPING.VALUE=8 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_2_NAME.VALUE=vPortPreemptiveTick -DRIVER.SYSTEM.VAR.CORE_PMU_COUNTER0_EVENT.VALUE=0x11 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_PERMISSION.VALUE=PRIV_RO_USER_RO_NOEXEC -DRIVER.SYSTEM.VAR.FLASH_ADDRESS_WAIT_STATES.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_SUB_7_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_RESET_ENTRY.VALUE=_c_int00 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_127_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_122_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_119_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_114_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_106_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_9_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.ADC1_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.MIBSPI_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.ECLK_VCLK1_FREQ.VALUE=75.000 -DRIVER.SYSTEM.VAR.CLKT_EXTERNAL_FREQ.VALUE=00.0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_SIZE_VALUE.VALUE=0x04 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_125_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_117_NAME.VALUE=can4LowLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_110_MAPPING.VALUE=110 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_109_NAME.VALUE=ecap6Interrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_102_MAPPING.VALUE=102 -DRIVER.SYSTEM.VAR.CLKT_AVCLK3_DIVIDER.VALUE=1 -DRIVER.SYSTEM.VAR.RAM_LENGTH.VALUE=0x00080000 -DRIVER.SYSTEM.VAR.CORE_MPU_TOTAL_REGION.VALUE=16 -DRIVER.SYSTEM.VAR.CLKT_VCLK1_DOMAIN_ENABLE.VALUE=FALSE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_SUB_2_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_SIZE.VALUE=256_MB -DRIVER.SYSTEM.VAR.VIM_CHANNEL_124_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_116_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_108_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.I2C2_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_41_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_33_NAME.VALUE=dmaFTCAInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_25_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_17_NAME.VALUE=spi2HighLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_1_MAPPING.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_EXTERNAL_SOURCE_ENABLE.VALUE=0x00000008 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_SUB_0_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_END_ADDRESS.VALUE=0x0000001f -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_BASE_ADDRESS.VALUE=0xF0000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_SUB_3_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_40_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_32_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_24_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_16_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_5_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_PERMISSION_VALUE.VALUE=0x1200 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_TYPE_VALUE.VALUE=0x0006 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_95_MAPPING.VALUE=95 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_87_MAPPING.VALUE=87 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_79_MAPPING.VALUE=79 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_SUB_1_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_SUB_6_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_SUB_4_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_IRQ_VIC_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_121_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_113_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_105_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_70_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_62_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_54_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_50_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_46_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_42_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_38_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_34_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_26_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_18_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.SPI1_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.FLASH_EEPROM_DATA_8_WAIT_STATE_FREQ.VALUE=144.0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_100_NAME.VALUE=etpwm6Interrupt -DRIVER.SYSTEM.VAR.CLKT_RTI2_DIVIDER.VALUE=1 -DRIVER.SYSTEM.VAR.RAM_ECC_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_SUB_4_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_TYPE.VALUE=NORMAL_OIWTNOWA_SHARED -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_SUB_7_DISABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_99_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.CLKT_EXTERNAL_FREQ_INPUT.VALUE=16.0 -DRIVER.SYSTEM.VAR.STC_INTERVAL.VALUE=40 -DRIVER.SYSTEM.VAR.CLKT_LPO_HIGH_TRIM_VALUE.VALUE=16 -DRIVER.SYSTEM.VAR.CLKT_GCLK_FREQ.VALUE=300.000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_PERMISSION_VALUE.VALUE=0x0600 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_80_MAPPING.VALUE=80 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_72_MAPPING.VALUE=72 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_64_MAPPING.VALUE=64 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_56_MAPPING.VALUE=56 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_48_MAPPING.VALUE=48 -DRIVER.SYSTEM.VAR.CLKT_PLL1_REF_CLOCK_DIV.VALUE=8 -DRIVER.SYSTEM.VAR.FLASHW_BASE_ADDRESS.VALUE=0xFFF87000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_SUB_5_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_FIQ_ENTRY.VALUE="ldr pc,[pc,#-0x1b0]" -DRIVER.SYSTEM.VAR.VIM_CHANNEL_10_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.SCILIN_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.SPI_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.ALL_DVR_ENA.VALUE=1 -DRIVER.SYSTEM.VAR.CCM_MENU_VALUE.VALUE=0x0001 -DRIVER.SYSTEM.VAR.PBIST_ENA1.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_VCLK4_DIVIDER.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_SUB_0_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_TYPE.VALUE=DEVICE_NONSHAREABLE -DRIVER.SYSTEM.VAR.VIM_CHANNEL_97_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_89_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_OSCILLATOR_FREQ.VALUE=16.0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_91_NAME.VALUE=etpwm1TripZoneInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_83_NAME.VALUE=dcc2DoneInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_75_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_67_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_59_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_41_MAPPING.VALUE=41 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_33_MAPPING.VALUE=33 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_25_MAPPING.VALUE=25 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_17_MAPPING.VALUE=17 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_SUB_3_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_SUB_1_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_IRQ_MODE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_11_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_11_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.PMM_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.EMIF_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CAN1_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CAN_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_TYPE_VALUE.VALUE=0x0006 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_3_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.CLKT_PLL1_OUTPUT_DIV.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_PERMISSION.VALUE=PRIV_RW_USER_RO_NOEXEC -DRIVER.SYSTEM.VAR.CLKT_PLL2_FM_ENABLE.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_SUB_1_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_SUB_4_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_BASE_ADDRESS.VALUE=0xF8000000 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_92_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_91_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_84_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_83_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_76_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_75_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_68_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_67_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_59_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_8_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.ETPWM2_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.HET1_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_RTI1_PRE_SOURCE.VALUE=PLL1 -DRIVER.SYSTEM.VAR.FLASH_MODE_VALUE.VALUE=3 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_SIZE_VALUE.VALUE=0x1B -DRIVER.SYSTEM.VAR.CORE_MPU_TASK_REGION_NUM.VALUE=3 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_126_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_118_NAME.VALUE=lin2LowLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_10_MAPPING.VALUE=10 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_SUB_2_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_SIZE.VALUE=128_MB -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_SUB_5_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_125_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_117_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_109_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_91_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_83_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_75_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_67_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_59_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_3_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.ECAP4_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_PLL2_BYPASS_ON_SLIP.VALUE=0x20000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_PERMISSION_VALUE.VALUE=0x1600 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_124_MAPPING.VALUE=124 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_116_MAPPING.VALUE=116 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_108_MAPPING.VALUE=108 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_50_NAME.VALUE=adc2Group0Interrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_42_NAME.VALUE=can2LowLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_34_NAME.VALUE=dmaLFSAInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_26_NAME.VALUE=mibspi1LowLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_18_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.FLASH_ARBITRATION.VALUE=FIX -DRIVER.SYSTEM.VAR.CLKT_LPO_HIGH_SOURCE_ENABLE.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_SUB_3_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_110_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_102_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.SCI4_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.PBIST_ALGO_9_10.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_EXTERNAL2_FREQ_INPUT.VALUE=16.0 -DRIVER.SYSTEM.VAR.FLASH_EEPROM_DATA_6_WAIT_STATE_FREQ.VALUE=112.0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_SIZE_VALUE.VALUE=0x12 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_7_MAPPING.VALUE=7 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_PERMISSION.VALUE=PRIV_RW_USER_RO_NOEXEC -DRIVER.SYSTEM.VAR.CLKT_RTI2_DOMAIN_ENABLE.VALUE=FALSE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_SUB_6_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_BACKGROUND_REGION_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_8_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_2_INT_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CONFIG.VALUE=TRUE -DRIVER.SYSTEM.VAR.CRC2_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_101_MAPPING.VALUE=101 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_101_NAME.VALUE=etpwm6TripZoneInterrupt -DRIVER.SYSTEM.VAR.RAM_STACK_ABORT_LENGTH.VALUE=0x00000100 -DRIVER.SYSTEM.VAR.FLASH_EEPROM_DATA_WAIT_STATES.VALUE=9 -DRIVER.SYSTEM.VAR.FLASH_DATA_MAX_WAIT_STATES.VALUE=3 -DRIVER.SYSTEM.VAR.FLASH_MODE.VALUE=PIPELINE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_TYPE.VALUE=DEVICE_NONSHAREABLE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_SUB_7_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_SUB_1_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_61_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_61_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_53_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_53_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_45_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_45_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_40_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_37_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_37_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_32_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_29_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_29_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_24_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_16_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.MINIT_VALUE.VALUE=0x1E57F -DRIVER.SYSTEM.VAR.VIM_CHANNEL_0_MAPPING.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_PLL1_DIV.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_PERMISSION.VALUE=PRIV_RO_USER_RO_NOEXEC -DRIVER.SYSTEM.VAR.CLKT_VCLK4_DOMAIN_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_PLL2_ENABLE.VALUE=FALSE -DRIVER.SYSTEM.VAR.RAM_BASE_ADDRESS.VALUE=0x08000000 -DRIVER.SYSTEM.VAR.CORE_PMU_EVENT_EXPORT_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_SUB_2_DISABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_126_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_118_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_110_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_102_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_96_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_88_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.GIO_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_SIZE_VALUE.VALUE=0x04 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_94_MAPPING.VALUE=94 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_86_MAPPING.VALUE=86 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_78_MAPPING.VALUE=78 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_SUB_0_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_SUB_5_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_TYPE.VALUE=STRONGLYORDERED_SHAREABLE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_SUB_3_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_BASE_ADDRESS.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_UNDEF_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_8_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.MIBSPI4_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.RAM_STACK_ABORT_BASE.VALUE=0x08000600 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_92_NAME.VALUE=etpwm2Interrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_84_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_76_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_68_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.CLKT_RTI1_DIVIDER.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_AVCLK4_DOMAIN_ENABLE.VALUE=FALSE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_SUB_3_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_SUB_6_DISABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_123_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_115_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_107_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_31_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_23_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_15_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_1_INT_TYPE.VALUE=FIQ -DRIVER.SYSTEM.VAR.CLKT_GHV_WAKUP_SOURCE.VALUE=PLL1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_TYPE_VALUE.VALUE=0x0000 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_71_MAPPING.VALUE=71 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_63_MAPPING.VALUE=63 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_55_MAPPING.VALUE=55 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_47_MAPPING.VALUE=47 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_39_MAPPING.VALUE=39 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_4_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.CLKT_HCLK_DIVIDER.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_PMU_COUNTER1_EVENT.VALUE=0x11 -DRIVER.SYSTEM.VAR.EFUSE_SELFTEST_ENA.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_AVCLK4_DOMAIN_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.RAM_LINK_BASE_ADDRESS.VALUE=0x08000800 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_BASE_ADDRESS.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_SUB_4_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_SUB_7_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_120_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_112_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_104_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_30_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_22_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_14_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_PERMISSION_VALUE.VALUE=0x1600 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_127_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_119_NAME.VALUE=sci4LowLevelInterrupt -DRIVER.SYSTEM.VAR.CLKT_PLL2_DIV.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_VCLK3_DIVIDER.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_LPO_TRIM_OTP_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_SUB_7_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_SIZE.VALUE=8_MB -DRIVER.SYSTEM.VAR.VIM_CHANNEL_95_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_87_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_79_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_61_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_53_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_45_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_37_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_29_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_AVCLK4_SOURCE.VALUE=VCLK -DRIVER.SYSTEM.VAR.FLASH_EEPROM_DATA_4_WAIT_STATE_FREQ.VALUE=80.0 -DRIVER.SYSTEM.VAR.FLASH_ADDRESS_WAIT_STATES_FREQ.VALUE=120.0 -DRIVER.SYSTEM.VAR.RAM_STACK_BASE.VALUE=0x08000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_TYPE_VALUE.VALUE=0x0010 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_51_NAME.VALUE=adc2Group1Interrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_43_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_40_MAPPING.VALUE=40 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_35_NAME.VALUE=can2HighLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_32_MAPPING.VALUE=32 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_27_NAME.VALUE=lin1LowLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_24_MAPPING.VALUE=24 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_19_NAME.VALUE=crcInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_16_MAPPING.VALUE=16 -DRIVER.SYSTEM.VAR.CLKT_VCLK3_DOMAIN_ENABLE.VALUE=FALSE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_SUB_2_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_END_ADDRESS.VALUE=0xf07fffff -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_SUB_0_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.ETPWM7_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_1.VALUE=0 -DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_2.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_SUB_0_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_SUB_3_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_96_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_88_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_3.VALUE=0 -DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_4.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_110_NAME.VALUE=eqep1Interrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_102_NAME.VALUE=etpwm7Interrupt -DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_5.VALUE=0 -DRIVER.SYSTEM.VAR.LBIST_STT.VALUE=1 -DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_6.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_SUB_1_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_SUB_4_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_ECC_AVAILABLE.VALUE=TRUE -DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_7.VALUE=0 -DRIVER.SYSTEM.VAR.ECAP2_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_8.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_TYPE_VALUE.VALUE=0x000C -DRIVER.SYSTEM.VAR.VIM_CHANNEL_123_MAPPING.VALUE=123 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_115_MAPPING.VALUE=115 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_107_MAPPING.VALUE=107 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_10_NAME.VALUE=het1HighLevelInterrupt -DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_9.VALUE=0 -DRIVER.SYSTEM.VAR.RAM_STACK_USER_LENGTH.VALUE=0x00000300 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_PERMISSION.VALUE=PRIV_RW_USER_RO_NOEXEC -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_SUB_2_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_SUB_7_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_END_ADDRESS.VALUE=0xffffffff -DRIVER.SYSTEM.VAR.CORE_CACHE_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_80_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_72_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_64_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_56_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_48_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_10_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_7_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.SCI2_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.LIN_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_RTI1_FREQ.VALUE=75.000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_SIZE_VALUE.VALUE=0x1A -DRIVER.SYSTEM.VAR.VIM_CHANNEL_6_MAPPING.VALUE=6 -DRIVER.SYSTEM.VAR.CLKT_PLL2_SPEADING_AMOUNT.VALUE=61 -DRIVER.SYSTEM.VAR.CLKT_PLL2_SPEADING_RATE.VALUE=255 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_SUB_5_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_BASE_ADDRESS.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_TYPE.VALUE=NORMAL_OIWTNOWA_SHARED -DRIVER.SYSTEM.VAR.VIM_CHANNEL_121_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_113_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_105_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_90_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_90_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_82_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_82_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_74_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_74_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_66_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_66_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_58_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_58_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_PLL2_RESET_ON_SLIP.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.ECLK_FREQ.VALUE=9.375 -DRIVER.SYSTEM.VAR.CLKT_AVCLK1_FREQ.VALUE=75.000 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_100_MAPPING.VALUE=100 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_93_NAME.VALUE=etpwm2TripZoneInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_85_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_77_NAME.VALUE=EMACTxIntISR -DRIVER.SYSTEM.VAR.VIM_CHANNEL_69_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.RAM_STACK_IRQ_LENGTH.VALUE=0x00000100 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_SUB_6_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_SUB_0_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_2_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_RTI2_POST_SOURCE.VALUE=VCLK -DRIVER.SYSTEM.VAR.FLASH_EEPROM_DATA_10_WAIT_STATE_FREQ.VALUE=176.0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_SIZE_VALUE.VALUE=0x04 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_PERMISSION_VALUE.VALUE=0x1600 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_PERMISSION_VALUE.VALUE=0x1200 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_5_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.RAM_STACK_LENGTH.VALUE=0x00000800 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_PERMISSION.VALUE=PRIV_RO_USER_NA_EXEC -DRIVER.SYSTEM.VAR.CLKT_LPO_BIAS.VALUE=true -DRIVER.SYSTEM.VAR.CLKT_AVCLK3_DIVIDER1.VALUE=4 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_SUB_1_DISABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_END_ADDRESS.VALUE=0x003fffff -DRIVER.SYSTEM.VAR.CORE_PRAGMA_ENA.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_101_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_4_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_1_INT_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.SPI4_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_AVCLK4_POST_SOURCE.VALUE=VCLKA4_DIVR -DRIVER.SYSTEM.VAR.CLKT_VCLK1_FREQ.VALUE=75.000 -DRIVER.SYSTEM.VAR.CLKT_AVCLK3_FREQ1.VALUE=75.000 -DRIVER.SYSTEM.VAR.FLASH_EEPROM_DATA_2_WAIT_STATE_FREQ.VALUE=48.0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_93_MAPPING.VALUE=93 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_85_MAPPING.VALUE=85 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_77_MAPPING.VALUE=77 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_69_MAPPING.VALUE=69 -DRIVER.SYSTEM.VAR.CLKT_AVCLK3_FREQ2.VALUE=18.750 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_END_ADDRESS.VALUE=0x0000001f -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_SUB_4_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_SIZE.VALUE=32_BYTES -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_BASE_ADDRESS.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_SUB_2_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_60_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_52_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_44_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_41_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_36_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_33_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_28_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_25_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_17_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.MIBSPI2_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_PLL1_MUL.VALUE=150 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_60_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_52_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_44_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_36_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_28_NAME.VALUE=adc1Group2Interrupt -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_PERMISSION.VALUE=PRIV_RO_USER_RO_NOEXEC -DRIVER.SYSTEM.VAR.CLKT_OSC_ENABLE.VALUE=TRUE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_SUB_2_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_SIZE.VALUE=32_BYTES -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_SUB_5_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_SVC_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_125_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_117_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_109_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_98_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_31_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_23_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_15_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.PINMUX_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.PBIST_ALGO_3_4.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_LPO_BIAS_VALUE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_70_MAPPING.VALUE=70 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_62_MAPPING.VALUE=62 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_54_MAPPING.VALUE=54 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_46_MAPPING.VALUE=46 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_38_MAPPING.VALUE=38 -DRIVER.SYSTEM.VAR.CLKT_AVCLK1_DOMAIN_ENABLE.VALUE=FALSE -DRIVER.SYSTEM.VAR.CLKT_EXTERNAL2_SOURCE_ENABLE.VALUE=0x00000080 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_SUB_3_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_SUB_6_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_PREFETCH_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_95_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_87_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_79_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_TASK_REGION_LAST.VALUE=15 -DRIVER.SYSTEM.VAR.CORE_MPU_TASK_REGION_FIRST.VALUE=13 -DRIVER.SYSTEM.VAR.PBIST_ALGO_15.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_111_NAME.VALUE=eqep2Interrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_103_NAME.VALUE=etpwm7TripZoneInterrupt -DRIVER.SYSTEM.VAR.PBIST_ALGO_16.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_VCLK2_DIVIDER.VALUE=1 -DRIVER.SYSTEM.VAR.RAM_LINK_LENGTH.VALUE=0x0007F800 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_SUB_6_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_END_ADDRESS.VALUE=0x0000001f -DRIVER.SYSTEM.VAR.VIM_CHANNEL_30_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_22_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_14_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_7_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CAN4_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_LPO_OSCFRQCONFIGCNT_VALUE.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_AVCLK2_SOURCE.VALUE=VCLK -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_TYPE_VALUE.VALUE=0x0010 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_31_MAPPING.VALUE=31 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_23_MAPPING.VALUE=23 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_15_MAPPING.VALUE=15 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_11_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.PBIST_ALGO_5_6.VALUE=0 -DRIVER.SYSTEM.VAR.PBIST_ENA.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_HCLK_DOMAIN_ENABLE.VALUE=TRUE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_SUB_7_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_SUB_1_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_122_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_114_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_111_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_106_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_103_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_10_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.ETPWM5_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.ETPWM_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_PLL2_MUL.VALUE=150 -DRIVER.SYSTEM.VAR.CLKT_RTI2_FREQ.VALUE=0.0 -DRIVER.SYSTEM.VAR.CLKT_LPO_LOW_FREQ.VALUE=0.080 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_TYPE.VALUE=NORMAL_OINC_NONSHARED -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_SUB_2_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_PREFETCH_ENTRY.VALUE=_prefetch -DRIVER.SYSTEM.VAR.VIM_CHANNEL_91_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_83_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_75_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_67_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_59_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.CLKT_AVCLK2_FREQ.VALUE=0.000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_TYPE_VALUE.VALUE=0x0006 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_PERMISSION_VALUE.VALUE=0x1600 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_PERMISSION_VALUE.VALUE=0x1200 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_94_NAME.VALUE=etpwm3Interrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_86_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_78_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.ECLK_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_OSCILLATOR_SOURCE_ENABLE.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_SUB_0_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_BASE_ADDRESS.VALUE=0x60000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_SUB_3_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_124_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_116_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_108_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_60_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_52_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_44_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_36_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_28_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.PBIST_ALGO_7_8.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_PLL2_RESET_ON_OSCILLATOR_FAIL.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.FLASH_BANK_LINK_BASE_ADDRESS_0.VALUE=0x00008020 -DRIVER.SYSTEM.VAR.FLASH_BANK_LINK_BASE_ADDRESS_1.VALUE=0x00200000 -DRIVER.SYSTEM.VAR.FLASH_EEPROM_DATA_0_WAIT_STATE_FREQ.VALUE=16.0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_SIZE_VALUE.VALUE=0x04 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_122_MAPPING.VALUE=122 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_114_MAPPING.VALUE=114 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_106_MAPPING.VALUE=106 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_6_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.CORE_PMU_COUNTER2_EVENT.VALUE=0x11 -DRIVER.SYSTEM.VAR.FLASH_DATA_WAIT_STATES.VALUE=3 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_SUB_1_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_SUB_6_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_95_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_87_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_79_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.ADC2_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_VCLK2_FREQ.VALUE=75.000 -DRIVER.SYSTEM.VAR.FLASH_DATA_2_WAIT_STATE_FREQ.VALUE=135.0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_5_MAPPING.VALUE=5 -DRIVER.SYSTEM.VAR.VIM_CHANNELS.VALUE=128 -DRIVER.SYSTEM.VAR.FLASH_BANK_LINK_BASE_ADDRESS_7.VALUE=0xF0200000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_SUB_4_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_SIZE.VALUE=32_BYTES -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_SUB_7_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_7_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.ESM_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_99_MAPPING.VALUE=99 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_61_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_53_NAME.VALUE=mibspi5HighLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_45_NAME.VALUE=can3HighLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_37_NAME.VALUE=mibspi3HighInterruptLevel -DRIVER.SYSTEM.VAR.VIM_CHANNEL_29_NAME.VALUE=can1LowLevelInterrupt -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_PERMISSION.VALUE=PRIV_RW_USER_RO_NOEXEC -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_SUB_5_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_SIZE.VALUE=32_BYTES -DRIVER.SYSTEM.VAR.VIM_CHANNEL_127_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_119_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_60_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_52_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_44_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_36_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_28_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_6_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.EQEP1_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_LPO_HIGH_FREQ.VALUE=10.000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_SIZE_VALUE.VALUE=0x12 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_SUB_0_DISABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_IRQ_ENTRY.VALUE="ldr pc,[pc,#-0x1b0]" -DRIVER.SYSTEM.VAR.VIM_CHANNEL_101_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_81_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_73_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_65_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_57_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_49_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.ECAP_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.LIN1_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.SPI2_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_GHV_POWER_DOWN_SOURCE.VALUE=PLL1 -DRIVER.SYSTEM.VAR.RAM_STACK_USER_BASE.VALUE=0x08000000 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_120_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_112_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_104_NAME.VALUE=ecap1Interrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_92_MAPPING.VALUE=92 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_84_MAPPING.VALUE=84 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_76_MAPPING.VALUE=76 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_68_MAPPING.VALUE=68 -DRIVER.SYSTEM.VAR.CLKT_GCLK_DOMAIN_ENABLE.VALUE=TRUE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_SUB_3_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_SUB_1_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_81_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_73_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_65_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_57_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_49_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.SYSTEM_INIT.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_SIZE_VALUE.VALUE=0x04 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_20_NAME.VALUE=esmLowInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_12_NAME.VALUE=mibspi1HighLevelInterrupt -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_PERMISSION.VALUE=PRIV_RO_USER_RO_EXEC -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_SUB_1_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_SUB_4_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_BASE_ADDRESS.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_1_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_0_INT_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_0_INT_TYPE.VALUE=FIQ -DRIVER.SYSTEM.VAR.FLASH_EEPROM_DATA_9_WAIT_STATE_FREQ.VALUE=160.0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_PERMISSION_VALUE.VALUE=0x0600 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_PERMISSION_VALUE.VALUE=0x1200 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_61_MAPPING.VALUE=61 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_53_MAPPING.VALUE=53 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_45_MAPPING.VALUE=45 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_37_MAPPING.VALUE=37 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_29_MAPPING.VALUE=29 -DRIVER.SYSTEM.VAR.ECLK_PORT_BIT0_DIR.VALUE=1 -DRIVER.SYSTEM.VAR.FLASH_LENGTH.VALUE=0x00400000 -DRIVER.SYSTEM.VAR.RAM_STACK_FIQ_LENGTH.VALUE=0x00000100 -DRIVER.SYSTEM.VAR.CLKT_EXT1_ENABLE.VALUE=FALSE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_SUB_2_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_SUB_7_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_TYPE.VALUE=DEVICE_NONSHAREABLE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_SUB_5_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_100_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_51_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_43_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_35_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_27_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_21_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_19_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_13_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_ECC_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_AVCLK3_FREQ.VALUE=75.000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_TYPE_VALUE.VALUE=0x0006 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_95_NAME.VALUE=etpwm3TripZoneInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_87_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_79_NAME.VALUE=EMACRxIntISR -DRIVER.SYSTEM.VAR.CLKT_VCLK1_DIVIDER.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_PERMISSION.VALUE=PRIV_RO_USER_RO_NOEXEC -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_SUB_5_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_BASE_ADDRESS.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_TYPE.VALUE=NORMAL_OIWTNOWA_SHARED -DRIVER.SYSTEM.VAR.VIM_CHANNEL_124_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_116_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_108_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_94_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_86_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_78_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.CAN2_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.ECLK_PORT_BIT0_DOUT.VALUE=0 -DRIVER.SYSTEM.VAR.PBIST_ALGO_1.VALUE=0 -DRIVER.SYSTEM.VAR.FLASH_DATA_0_WAIT_STATE_FREQ.VALUE=45.0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_30_MAPPING.VALUE=30 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_22_MAPPING.VALUE=22 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_14_MAPPING.VALUE=14 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_7_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.PBIST_ALGO_2.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_RTI1_DOMAIN_ENABLE.VALUE=FALSE -DRIVER.SYSTEM.VAR.CLKT_AVCLK1_DOMAIN_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_SUB_6_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_SUB_0_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_127_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_119_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_30_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_22_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_14_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.ETPWM3_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.DCC1_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.HET2_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_VCLK3_FREQ.VALUE=75.000 -DRIVER.SYSTEM.VAR.CLKT_AVCLK4_FREQ1.VALUE=75.000 -DRIVER.SYSTEM.VAR.PBIST_ALGO_11_12.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_PLL2_SOURCE_ENABLE.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.FLASH_EEPROM_DATA_MAX_WAIT_STATES.VALUE=11 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_SUB_7_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_END_ADDRESS.VALUE=0x0000001f -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_SUB_1_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_94_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_86_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_78_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_21_INT_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_13_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.ECAP5_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.ADC_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_TYPE_VALUE.VALUE=0x000B -DRIVER.SYSTEM.VAR.VIM_CHANNEL_70_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_62_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_54_NAME.VALUE=mibspi4LowLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_46_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_38_NAME.VALUE=mibspi3LowLevelInterrupt -DRIVER.SYSTEM.VAR.FEE_FLASH_ECC_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_SIZE.VALUE=32_BYTES -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_SUB_2_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_RESET_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_110_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_102_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_6_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_121_MAPPING.VALUE=121 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_113_MAPPING.VALUE=113 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_105_MAPPING.VALUE=105 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_SUB_0_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_SUB_5_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_RESERVED_ENTRY.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_121_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_113_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_105_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_71_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_63_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_55_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_47_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_39_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_TYPE_VALUE.VALUE=0x0006 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_121_NAME.VALUE=crc2Interrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_113_NAME.VALUE=can4HighLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_105_NAME.VALUE=ecap2Interrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_4_MAPPING.VALUE=4 -DRIVER.SYSTEM.VAR.CLKT_AVCLK3_DOMAIN_ENABLE.VALUE=FALSE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_SUB_3_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_END_ADDRESS.VALUE=0x87ffffff -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_SUB_6_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_SIZE.VALUE=4_MB -DRIVER.SYSTEM.VAR.VIM_CHANNEL_120_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_112_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_104_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.I2C1_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.FLASH_EEPROM_DATA_7_WAIT_STATE_FREQ.VALUE=128.0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_PERMISSION_VALUE.VALUE=0x1300 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_SIZE_VALUE.VALUE=0x04 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_PERMISSION_VALUE.VALUE=0x0300 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_98_MAPPING.VALUE=98 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_21_NAME.VALUE=vPortYeildWithinAPI -DRIVER.SYSTEM.VAR.VIM_CHANNEL_13_NAME.VALUE=lin1HighLevelInterrupt -DRIVER.SYSTEM.VAR.ECLK_PORT_BIT0_FUN.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_BASE_ADDRESS.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_SUB_4_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_SUB_7_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_94_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_86_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_78_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_51_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_43_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_35_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_27_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_19_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.HET_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.PBIST_ALGO_13_14.VALUE=0 -DRIVER.SYSTEM.VAR.RAM_STACK_UNDEF_BASE.VALUE=0x08000700 -DRIVER.SYSTEM.VAR.RAM_STACK_SVC_BASE.VALUE=0x08000300 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_SUB_7_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_TYPE.VALUE=NORMAL_OIWTNOWA_SHARED -DRIVER.SYSTEM.VAR.VIM_CHANNEL_99_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_3_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.DMM_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.MIBSPI5_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.FLASH_BANK_CONFIG_0.VALUE=ACTIVE -DRIVER.SYSTEM.VAR.CLKT_AVCLK4_FREQ.VALUE=75.000 -DRIVER.SYSTEM.VAR.FLASH_BANK_CONFIG_1.VALUE=ACTIVE -DRIVER.SYSTEM.VAR.VIM_CHANNEL_96_NAME.VALUE=etpwm4Interrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_91_MAPPING.VALUE=91 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_88_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_83_MAPPING.VALUE=83 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_75_MAPPING.VALUE=75 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_67_MAPPING.VALUE=67 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_59_MAPPING.VALUE=59 -DRIVER.SYSTEM.VAR.FLASH_BANK_CONFIG_2.VALUE=SLEEP -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_PERMISSION.VALUE=PRIV_RW_USER_RW_EXEC -DRIVER.SYSTEM.VAR.CLKT_VCLK2_DOMAIN_ENABLE.VALUE=FALSE -DRIVER.SYSTEM.VAR.FLASH_BANK_CONFIG_3.VALUE=SLEEP -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_TYPE.VALUE=NORMAL_OIWTNOWA_SHARED -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_SUB_2_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_END_ADDRESS.VALUE=0x0807ffff -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_SUB_0_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_40_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_32_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_24_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_16_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_5_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.ECLK_PORT_BIT0_PDR.VALUE=0 -DRIVER.SYSTEM.VAR.FLASH_BANK_CONFIG_4.VALUE=SLEEP -DRIVER.SYSTEM.VAR.FLASH_BANK_CONFIG_5.VALUE=SLEEP -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_SIZE_VALUE.VALUE=0x0E -DRIVER.SYSTEM.VAR.VIM_CHANNEL_8_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.ECLK_PRESCALER.VALUE=8 -DRIVER.SYSTEM.VAR.FLASH_BANK_CONFIG_6.VALUE=SLEEP -DRIVER.SYSTEM.VAR.FLASH_BANK_CONFIG_7.VALUE=ACTIVE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_END_ADDRESS.VALUE=0xffffffff -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_SUB_0_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_BASE_ADDRESS.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_SUB_3_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_126_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_118_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_97_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_89_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_80_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_72_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_64_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_56_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_48_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_VCLK4_FREQ.VALUE=75.0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_60_MAPPING.VALUE=60 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_52_MAPPING.VALUE=52 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_44_MAPPING.VALUE=44 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_36_MAPPING.VALUE=36 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_28_MAPPING.VALUE=28 -DRIVER.SYSTEM.VAR.CLKT_PLL1_BAND_WIDTH_ADJUSTMENT.VALUE=7 -DRIVER.SYSTEM.VAR.CLKT_LPO_LOW_SOURCE_ENABLE.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_SUB_1_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_SUB_6_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_SUB_4_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_PLL2_MUL_VAL.VALUE=9500 -DRIVER.SYSTEM.VAR.CLKT_RTI1_POST_SOURCE.VALUE=VCLK -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_SIZE_VALUE.VALUE=0x04 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_71_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_63_NAME.VALUE=het2HighLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_55_NAME.VALUE=can3LowLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_47_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_39_NAME.VALUE=dmaHBCAInterrupt -DRIVER.SYSTEM.VAR.CLKT_PLL2_BAND_WIDTH_ADJUSTMENT.VALUE=7 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_SUB_4_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_SIZE.VALUE=32_BYTES -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_SUB_7_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_DATA_ENTRY.VALUE=_dabort -DRIVER.SYSTEM.VAR.VIM_CHANNEL_80_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_72_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_64_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_56_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_48_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_21_MAPPING.VALUE=21 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_13_MAPPING.VALUE=13 -DRIVER.SYSTEM.VAR.CLKT_PLL2_REF_CLOCK_DIV.VALUE=8 -DRIVER.SYSTEM.VAR.CLKT_PLL1_SPEADING_RATE.VALUE=255 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_SUB_5_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_END_ADDRESS.VALUE=0x0000001f -DRIVER.SYSTEM.VAR.VIM_CHANNEL_50_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_42_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_34_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_26_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_18_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_0_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.ETPWM1_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_PLL1_RESET_ON_SLIP.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.FLASH_EEPROM_DATA_5_WAIT_STATE_FREQ.VALUE=96.0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_TYPE_VALUE.VALUE=0x0010 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_PERMISSION_VALUE.VALUE=0x0300 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_127_MAPPING.VALUE=127 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_122_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_119_MAPPING.VALUE=119 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_114_NAME.VALUE=i2c2Interrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_106_NAME.VALUE=ecap3nterrupt -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_PERMISSION.VALUE=PRIV_RO_USER_RO_EXEC -DRIVER.SYSTEM.VAR.CLKT_PLL1_FM_ENABLE.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_SUB_6_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_SUB_0_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_SIZE.VALUE=32_KB -DRIVER.SYSTEM.VAR.VIM_CHANNEL_123_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_115_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_107_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_90_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_82_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_74_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_66_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_58_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.ECAP3_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_30_NAME.VALUE=mibspi2LowLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_22_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_14_NAME.VALUE=adc1Group0Interrupt -DRIVER.SYSTEM.VAR.CLKT_LPOLO_ENABLE.VALUE=FALSE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_SUB_1_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_123_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_115_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_107_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.SCI3_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.ECLK_PORT_BIT0_PSL.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_120_MAPPING.VALUE=120 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_112_MAPPING.VALUE=112 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_104_MAPPING.VALUE=104 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_END_ADDRESS.VALUE=0x0000001f -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_SUB_4_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_BASE_ADDRESS.VALUE=0x80000000 -DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_SVC_ENTRY.VALUE=vPortSWI -DRIVER.SYSTEM.VAR.VIM_CHANNEL_21_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_20_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_13_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_12_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CONFIG_NEW.VALUE=1 -DRIVER.SYSTEM.VAR.CRC1_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_EXTERNAL2_FREQ.VALUE=00.0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_TYPE_VALUE.VALUE=0x0002 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_97_NAME.VALUE=etpwm4TripZoneInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_89_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_3_MAPPING.VALUE=3 -DRIVER.SYSTEM.VAR.CLKT_LPOHI_ENABLE.VALUE=FALSE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_SUB_2_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_TYPE.VALUE=NORMAL_OIWTNOWA_SHARED -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_SUB_5_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_101_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_99_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_93_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_85_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_77_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_69_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_6_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.CLKT_GHV_NORMAL_SOURCE.VALUE=PLL1 -DRIVER.SYSTEM.VAR.CLKT_AVCLK3_DIV_FREQ.VALUE=75.0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_97_MAPPING.VALUE=97 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_89_MAPPING.VALUE=89 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_9_NAME.VALUE=gioHighLevelInterrupt -DRIVER.SYSTEM.VAR.CLKT_PLL1_ENABLE.VALUE=TRUE -DRIVER.SYSTEM.VAR.FLASH_BASE_ADDRESS.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_SUB_3_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_SUB_6_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_51_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_43_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_35_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_27_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_19_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_5_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_M3.VALUE=0 -DRIVER.SYSTEM.VAR.SPI5_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_TYPE_VALUE.VALUE=0x0006 -DRIVER.SYSTEM.VAR.CLKT_AVCLK2_DOMAIN_DISABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_SUB_6_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_TYPE.VALUE=NORMAL_OIWTNOWA_NONSHARED -DRIVER.SYSTEM.VAR.VIM_CHANNEL_120_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_112_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_104_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_100_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.RTP_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.MIBSPI3_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.FLASH_BANK_LINK_LENGTH_0.VALUE=0x001F7FE0 -DRIVER.SYSTEM.VAR.FLASH_BANK_LINK_LENGTH_1.VALUE=0x00200000 -DRIVER.SYSTEM.VAR.FLASH_EEPROM_DATA_11_WAIT_STATE_FREQ.VALUE=192.0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_SIZE_VALUE.VALUE=0x16 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_90_MAPPING.VALUE=90 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_82_MAPPING.VALUE=82 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_80_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_74_MAPPING.VALUE=74 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_72_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_66_MAPPING.VALUE=66 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_64_NAME.VALUE=sci3HighLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_58_MAPPING.VALUE=58 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_56_NAME.VALUE=mibspi5LowLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_48_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_SIZE.VALUE=32_BYTES -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_SUB_7_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_SUB_1_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_93_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_85_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_77_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_69_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.EQEP_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.RTI_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.STC_MAX_TIMEOUT.VALUE=0xFFFFFFFF -DRIVER.SYSTEM.VAR.CLKT_LPO_LOW_TRIM.VALUE=100.00 -DRIVER.SYSTEM.VAR.FLASH_EEPROM_DATA_3_WAIT_STATE_FREQ.VALUE=64.0 -DRIVER.SYSTEM.VAR.RAM_STACK_FIQ_BASE.VALUE=0x08000400 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_PERMISSION_VALUE.VALUE=0x1300 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_0_NAME.VALUE=esmHighInterrupt -DRIVER.SYSTEM.VAR.FLASH_BANK_LINK_LENGTH_7.VALUE=0x000020000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_SUB_2_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_50_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_42_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_34_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_26_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_18_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.FEE_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_10.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_LPO_LOW_TRIM_VALUE.VALUE=16 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_123_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_115_NAME.VALUE=lin2HighLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_107_NAME.VALUE=ecap4Interrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_51_MAPPING.VALUE=51 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_43_MAPPING.VALUE=43 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_35_MAPPING.VALUE=35 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_27_MAPPING.VALUE=27 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_19_MAPPING.VALUE=19 -DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_11.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_PERMISSION.VALUE=PRIV_RW_USER_RW_EXEC -DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_12.VALUE=0 -DRIVER.SYSTEM.VAR.CCM_MENU.VALUE=NONE -DRIVER.SYSTEM.VAR.CLKT_RESERVED_SOURCE_ENABLE.VALUE=0x00000004 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_SUB_0_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_SUB_5_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_SIZE.VALUE=512_KB -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_BASE_ADDRESS.VALUE=0x08000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_SUB_3_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_98_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_20_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_12_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_4_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_13.VALUE=0 -DRIVER.SYSTEM.VAR.POM_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_PLL1_MUL_VAL.VALUE=9500 -DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_14.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_AVCLK3_SOURCE.VALUE=VCLK -DRIVER.SYSTEM.VAR.CLKT_PLL1_FREQ.VALUE=300.00 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_SIZE_VALUE.VALUE=0x15 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_31_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_23_NAME.VALUE=gioLowLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_15_NAME.VALUE=adc1Group1Interrupt -DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_15.VALUE=0 -DRIVER.SYSTEM.VAR.RAM_STACK_UNDEF_LENGTH.VALUE=0x00000100 -DRIVER.SYSTEM.VAR.RAM_STACK_SVC_LENGTH.VALUE=0x00000100 -DRIVER.SYSTEM.VAR.CLKT_LPO_TRIM_OTP_LOC.VALUE=0xF00801B4 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_SUB_3_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_SUB_6_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_UNDEF_ENTRY.VALUE=_undef -DRIVER.SYSTEM.VAR.VIM_CHANNEL_93_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_85_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_77_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_71_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_69_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_63_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_55_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_47_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_39_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.ETPWM6_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.DCC_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_20_MAPPING.VALUE=20 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_12_MAPPING.VALUE=12 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_PERMISSION.VALUE=PRIV_RW_USER_RO_NOEXEC -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_BASE_ADDRESS.VALUE=0xFFF80000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_SUB_4_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_SUB_7_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_ENDIAN_LITTLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_126_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_125_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_118_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_117_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_109_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.OS_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_SIZE_VALUE.VALUE=0x04 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_126_MAPPING.VALUE=126 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_118_MAPPING.VALUE=118 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_98_NAME.VALUE=etpwm5Interrupt -DRIVER.SYSTEM.VAR.ECLK_PORT_BIT0_PULL.VALUE=2 -DRIVER.SYSTEM.VAR.ECLK_SUSPEND.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_PLL1_SPEADING_AMOUNT.VALUE=61 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_TYPE.VALUE=NORMAL_OIWTNOWA_SHARED -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_SUB_5_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_VFP_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.ECAP1_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.I2C_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.AJSM_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.ECLK_OSCILLATOR_FREQ.VALUE=16.000 -DRIVER.SYSTEM.VAR.CLKT_LPO_HIGH_TRIM.VALUE=100.00 -DRIVER.SYSTEM.VAR.CLKT_AVCLK4_SPL_SOURCE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_9_MAPPING.VALUE=9 -DRIVER.SYSTEM.VAR.VIM_ECC_INTERRUPT_MAPPED_TO_VIM.VALUE=FALSE -DRIVER.SYSTEM.VAR.CLKT_VCLK4_DOMAIN_ENABLE.VALUE=FALSE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_SUB_0_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_71_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_63_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_55_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_47_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_41_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_39_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_33_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_25_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_17_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_9_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.SCI1_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_CRYSTAL_FREQ.VALUE=16.0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_TYPE_VALUE.VALUE=0x0008 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_111_MAPPING.VALUE=111 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_103_MAPPING.VALUE=103 -DRIVER.SYSTEM.VAR.VIM_PHANTOM_NAME.VALUE=phantomInterrupt -DRIVER.OS.VAR.OS_USERECERSIVEMUTEXES.VALUE=0 -DRIVER.OS.VAR.OS_USETIMERS.VALUE=0 -DRIVER.OS.VAR.OS_USECNTSEMAPHORE.VALUE=0 -DRIVER.OS.VAR.OS_GENERATERUNTIMESTATS.VALUE=0 -DRIVER.OS.VAR.OS_USEMPU.VALUE=0 -DRIVER.OS.VAR.OS_TOTALHEAPSIZE.VALUE=8192 -DRIVER.OS.VAR.OS_USEVERBOSESTACK.VALUE=2 -DRIVER.OS.VAR.OS_TIMERPRIORITY.VALUE=0 -DRIVER.OS.VAR.OS_SVCENABLE.VALUE=0 -DRIVER.OS.VAR.OS_MAXTASKNAMELEN.VALUE=16 -DRIVER.OS.VAR.OS_MAXPRIORITIES.VALUE=5 -DRIVER.OS.VAR.OS_TIMERTASKSTACKDEPTH.VALUE=0 -DRIVER.OS.VAR.OS_COROUTINEPRIORITIES.VALUE=2 -DRIVER.OS.VAR.OS_USECOROUTINES.VALUE=0 -DRIVER.OS.VAR.OS_USEMUTEXES.VALUE=0 -DRIVER.OS.VAR.OS_CPUCLOCKHZ.VALUE=75000000 -DRIVER.OS.VAR.OS_USEMALLOCFAILEDHOOK.VALUE=0 -DRIVER.OS.VAR.OS_MINSTACKSIZE.VALUE=128 -DRIVER.OS.VAR.OS_SYSTEM_MODE.VALUE=0x1F -DRIVER.OS.VAR.OS_USEPREEMPTION.VALUE=1 -DRIVER.OS.VAR.OS_IDLESHOULDYIELD.VALUE=1 -DRIVER.OS.VAR.OS_USEIDLEHOOK.VALUE=0 -DRIVER.OS.VAR.OS_TICKRATEHZ.VALUE=1000 -DRIVER.OS.VAR.OS_TIMERPQUEUELENGTH.VALUE=0 -DRIVER.OS.VAR.OS_USETRACE.VALUE=0 -DRIVER.OS.VAR.OS_USESTACK.VALUE=0 -DRIVER.OS.VAR.OS_USETICKHOOK.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL93_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL85_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL77_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL69_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL0_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL21_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL13_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL71_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL63_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL55_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL47_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL39_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL94_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL86_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL78_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL3_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL41_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL33_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL25_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL17_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL88_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL9_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL50_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL42_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL34_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL26_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL18_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL81_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL73_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL65_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL57_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL49_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL2_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL11_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL50_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL42_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL34_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL26_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL18_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL8_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL5_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL11_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL71_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL63_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL55_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL47_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL39_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL92_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL84_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL76_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL68_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL11_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL70_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL62_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL54_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL46_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL38_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL92_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL84_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL76_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL68_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL1_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL94_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL86_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL78_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL7_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL40_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL32_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL24_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL16_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL71_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL63_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL55_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL47_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL39_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL0_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL40_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL32_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL24_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL16_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL40_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL32_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL24_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL16_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL10_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL89_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL6_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL89_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL4_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL61_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL53_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL45_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL37_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL29_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL91_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL83_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL75_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL67_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL59_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL61_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL53_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL45_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL37_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL29_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL92_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL84_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL76_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL68_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL5_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL61_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL53_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL45_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL37_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL29_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL90_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL82_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL74_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL66_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL58_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_LOW_TIME.VALUE=218.453 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL30_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL22_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL14_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL31_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL23_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL15_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL9_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL30_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL22_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL14_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL95_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL87_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL79_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL4_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL88_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL3_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL51_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL43_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL35_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL27_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL19_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL90_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL82_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL74_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL66_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL58_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL89_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL90_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL82_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL74_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL66_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL58_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL3_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL9_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL51_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL43_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL35_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL27_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL19_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL60_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL52_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL44_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL36_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL28_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL20_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL12_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL80_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL72_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL64_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL56_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL48_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_VCLK_FREQ.VALUE=75 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL30_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL22_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL14_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL8_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL20_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL12_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL93_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL85_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL77_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL69_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL2_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL95_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL87_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL79_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL2_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL95_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL87_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL79_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL8_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL80_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL72_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL64_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL56_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL48_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL1_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL41_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL33_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL25_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL17_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL81_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL73_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL65_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL57_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL49_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL41_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL33_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL25_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL17_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL10_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL7_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL51_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL43_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL35_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL27_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL19_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL70_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL62_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL54_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL46_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL38_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL21_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL13_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL7_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL10_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL93_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL85_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL77_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL69_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL6_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL91_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL83_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL75_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL67_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL59_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL0_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL94_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL86_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL78_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL1_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL70_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL62_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL54_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL46_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL38_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_BASE.VALUE=0xFFFFF500 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL31_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL23_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL15_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL31_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL23_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL15_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL80_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL72_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL64_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL56_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL48_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL88_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL5_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL50_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL42_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL34_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL26_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL18_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL60_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL52_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL44_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL36_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL28_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL20_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL12_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL6_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL91_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL83_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL75_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL67_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL59_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL4_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL60_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL52_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL44_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL36_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL28_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_LPC.VALUE=16384 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL21_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL13_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL81_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL73_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL65_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL57_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL49_INT_LEVEL.VALUE=0 -DRIVER.RTI.VAR.RTI_1_COMPARE_2_SOURCE.VALUE=0x00000100 -DRIVER.RTI.VAR.RTI_1_COMPARE_3_FREQ.VALUE=0.000100000 -DRIVER.RTI.VAR.RTI_1_FREQ.VALUE=110.000 -DRIVER.RTI.VAR.RTI_1_COMPARE_1_ACTUALTIME.VALUE=5.000 -DRIVER.RTI.VAR.RTI_1_COUNTER_1_UC_COMPARE.VALUE=10 -DRIVER.RTI.VAR.RTI_1_COMPARE_1_TIME.VALUE=5.000 -DRIVER.RTI.VAR.RTI_1_COMPARE_3_UPDATE.VALUE=100000 -DRIVER.RTI.VAR.RTI_1_CONTINUE_ON_SUSPEND_ENABLE.VALUE=0x00000000 -DRIVER.RTI.VAR.RTI_1_COMPARE_1_INPUT_FREQ.VALUE=10.000000000 -DRIVER.RTI.VAR.RTI_1_COMPARE_0_SOURCE.VALUE=0x00000000 -DRIVER.RTI.VAR.RTI_1_COMPARE_2_TIME.VALUE=8.000 -DRIVER.RTI.VAR.RTI_1_COMPARE_0_ACTUALTIME.VALUE=1.000 -DRIVER.RTI.VAR.RTI_1_COUNTER_0_UC_COMPARE.VALUE=10 -DRIVER.RTI.VAR.RTI_1_COMPARE_1_UPDATE.VALUE=50000 -DRIVER.RTI.VAR.RTI_1_COMPARE_3_TIME.VALUE=10.000 -DRIVER.RTI.VAR.RTI_1_COUNTER_0_NTU_SOURCE.VALUE=1 -DRIVER.RTI.VAR.RTI_1_COMPARE_0_INPUT_FREQ.VALUE=10.000000000 -DRIVER.RTI.VAR.RTI_1_COUNTER_0_RTI_FREQ.VALUE=0.0 -DRIVER.RTI.VAR.RTI_1_COUNTER_0_FREQ.VALUE=10.000000000 -DRIVER.RTI.VAR.RTI_1_COUNTER_1_FREQUENCY.VALUE=10.000 -DRIVER.RTI.VAR.RTI_1_COMPARE_3_SOURCE.VALUE=0x00001000 -DRIVER.RTI.VAR.RTI_1_COUNTER_1_FREQ.VALUE=10.000000000 -DRIVER.RTI.VAR.RTI_1_COUNTER_0_NTU_SOURCE_REG.VALUE=0x0 -DRIVER.RTI.VAR.RTI_1_COMPARE_1_SOURCE.VALUE=0x00000000 -DRIVER.RTI.VAR.RTI_1_NTU_1_FREQ.VALUE=0.0 -DRIVER.RTI.VAR.RTI_1_COMPARE_3_ACTUALTIME.VALUE=10.000 -DRIVER.RTI.VAR.RTI_1_COMPARE_0_FREQ.VALUE=0.001000000 -DRIVER.RTI.VAR.RTI_1_COMPARE_2_UPDATE.VALUE=80000 -DRIVER.RTI.VAR.RTI_1_BASE.VALUE=0xFFFFFC00 -DRIVER.RTI.VAR.RTI_1_NTU_2_FREQ.VALUE=0.0 -DRIVER.RTI.VAR.RTI_1_COMPARE_3_INPUT_FREQ.VALUE=10.000000000 -DRIVER.RTI.VAR.RTI_1_COMPARE_1_FREQ.VALUE=0.000200000 -DRIVER.RTI.VAR.RTI_1_COUNTER_0_CAPTURE_SOURCE_ENABLE.VALUE=0 -DRIVER.RTI.VAR.RTI_1_COUNTER_1_CAPTURE_SOURCE_ENABLE.VALUE=0 -DRIVER.RTI.VAR.RTI_1_COMPARE_0_UPDATE.VALUE=10000 -DRIVER.RTI.VAR.RTI_1_NTU_3_FREQ.VALUE=220.0 -DRIVER.RTI.VAR.RTI_1_COMPARE_0.VALUE=10000 -DRIVER.RTI.VAR.RTI_1_COMPARE_2_ACTUALTIME.VALUE=8.000 -DRIVER.RTI.VAR.RTI_1_COMPARE_1.VALUE=50000 -DRIVER.RTI.VAR.RTI_1_COMPARE_2.VALUE=80000 -DRIVER.RTI.VAR.RTI_1_COMPARE_3.VALUE=100000 -DRIVER.RTI.VAR.RTI_1_COUNTER_0_NTU_FREQ.VALUE=0.0 -DRIVER.RTI.VAR.RTI_1_COMPARE_2_FREQ.VALUE=0.000125000 -DRIVER.RTI.VAR.RTI_1_COMPARE_0_TIME.VALUE=1.000 -DRIVER.RTI.VAR.RTI_1_NTU_4_FREQ.VALUE=0.0 -DRIVER.RTI.VAR.RTI_1_COMPARE_2_INPUT_FREQ.VALUE=10.000000000 -DRIVER.RTI.VAR.RTI_1_COUNTER_0_FREQUENCY.VALUE=10.000 -DRIVER.GIO.VAR.GIO_PORT1_BIT4_PULL.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT0_BIT5_DIR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT4_PULDIS.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT7_DOUT.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT2_LVL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT7_PSL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT3_PDR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT2_POL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT6_ENA.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT2_PSL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT6_DIR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT2_DOUT.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT3_LVL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT4_PDR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT3_POL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT5_PULDIS.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT7_ENA.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT3_PSL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT5_PULL.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT0_BIT7_DIR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT4_LVL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT5_PDR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT4_POL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT2_PULDIS.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT4_PSL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT0_PULL.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT0_BIT3_DOUT.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT5_LVL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT6_PDR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT5_POL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT5_PSL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT6_PULL.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT0_BIT6_LVL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT3_PULDIS.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT7_PDR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT6_POL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT0_DOUT.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT6_PSL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT1_PULL.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT0_BIT4_DOUT.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT7_LVL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT7_PULDIS.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT7_POL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT0_PULDIS.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT7_PSL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT7_PULL.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT1_BIT1_DOUT.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT2_PULL.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT1_BIT1_PULDIS.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT5_DOUT.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT0_ENA.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT5_PULDIS.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT0_DIR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT2_DOUT.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT3_PULL.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT1_BIT1_ENA.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT6_DOUT.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT1_DIR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT6_PULDIS.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT2_ENA.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT2_DIR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT0_PDR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT0_PULL.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT0_BIT3_PULDIS.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT3_DOUT.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT4_PULL.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT1_BIT3_ENA.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT7_DOUT.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT3_DIR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT0_LVL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT1_PDR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT0_POL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT4_ENA.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT0_PSL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT4_DIR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT4_PULDIS.VALUE=0 -DRIVER.GIO.VAR.GIO_BASE_PORTA.VALUE=0xFFF7BC34 -DRIVER.GIO.VAR.GIO_BASE_PORTB.VALUE=0xFFF7BC54 -DRIVER.GIO.VAR.GIO_PORT1_BIT1_LVL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT2_PDR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT1_POL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT1_PULL.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT1_BIT4_DOUT.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT5_PULL.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT1_BIT5_ENA.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT1_PSL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT5_DIR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT2_LVL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT1_PULDIS.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT0_ENA.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT3_PDR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT2_POL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT0_DIR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT6_ENA.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT2_PSL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT6_DIR.VALUE=0 -DRIVER.GIO.VAR.GIO_BASE.VALUE=0xFFF7BC00 -DRIVER.GIO.VAR.GIO_PORT1_BIT3_LVL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT1_ENA.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT4_PDR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT3_POL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT2_PULL.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT0_BIT1_DIR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT5_DOUT.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT6_PULL.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT1_BIT7_ENA.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT2_PULDIS.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT3_PSL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT7_DIR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT4_LVL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT2_ENA.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT5_PDR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT4_POL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT2_DIR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT0_DOUT.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT6_PULDIS.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT4_PSL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT0_PDR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORTB_ENABLE.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT1_BIT5_LVL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT3_ENA.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT6_PDR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT5_POL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT3_PULL.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT0_BIT3_DIR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT6_DOUT.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT7_PULL.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT0_BIT0_LVL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT5_PSL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT1_PDR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT0_POL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT6_LVL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT7_PULDIS.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT4_ENA.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT7_PDR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT6_POL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT0_PSL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT4_DIR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT0_PULDIS.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT1_DOUT.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT1_LVL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT6_PSL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT2_PDR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT1_POL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT7_LVL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT5_ENA.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT7_POL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT1_PSL.VALUE=0 -DRIVER.SCI.VAR.SCI4_PORT_BIT2_PULL.VALUE=2 -DRIVER.SCI.VAR.SCI1_PORT_BIT2_DOUT.VALUE=0 -DRIVER.SCI.VAR.SCI4_BASE.VALUE=0xFFF7E700 -DRIVER.SCI.VAR.SCI4_LENGTH.VALUE=8 -DRIVER.SCI.VAR.SCI3_BREAKINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI2_PORT_BIT0_DOUT.VALUE=0 -DRIVER.SCI.VAR.SCI1_PORT_BIT2_PSL.VALUE=1 -DRIVER.SCI.VAR.SCI3_PORT_BIT0_FUN.VALUE=0 -DRIVER.SCI.VAR.SCI4_ACTUALBAUDRATE.VALUE=9606 -DRIVER.SCI.VAR.SCI4_FEINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI3_PORT_BIT2_DIR.VALUE=0 -DRIVER.SCI.VAR.SCI1_BAUDRATE.VALUE=9600 -DRIVER.SCI.VAR.SCI4_OEINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI4_TXINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI3_PORT_BIT0_PDR.VALUE=0 -DRIVER.SCI.VAR.SCI2_PEINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI1_STOPBITS.VALUE=2 -DRIVER.SCI.VAR.SCI3_PORT_BIT1_FUN.VALUE=1 -DRIVER.SCI.VAR.SCI3_WAKEINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI1_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.SCI.VAR.SCI1_RXINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI4_WAKEINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI1_FEINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI1_PORT_BIT0_PULL.VALUE=2 -DRIVER.SCI.VAR.SCI3_PORT_BIT1_PDR.VALUE=0 -DRIVER.SCI.VAR.SCI1_TXINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI2_PORT_BIT1_DOUT.VALUE=0 -DRIVER.SCI.VAR.SCI3_PORT_BIT2_FUN.VALUE=1 -DRIVER.SCI.VAR.SCI4_TIMMINGMODE.VALUE=1 -DRIVER.SCI.VAR.SCI3_CLKMODE.VALUE=1 -DRIVER.SCI.VAR.SCI3_PORT_BIT0_PSL.VALUE=1 -DRIVER.SCI.VAR.SCI2_LENGTH.VALUE=8 -DRIVER.SCI.VAR.SCI1_BASE_PORT.VALUE=0xFFF7E440 -DRIVER.SCI.VAR.SCI4_BAUDRATE.VALUE=9600 -DRIVER.SCI.VAR.SCI3_OEINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI2_PARITYENA.VALUE=0 -DRIVER.SCI.VAR.SCI1_EVENPARITY.VALUE=0 -DRIVER.SCI.VAR.SCI3_PORT_BIT2_PDR.VALUE=0 -DRIVER.SCI.VAR.SCI2_BREAKINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI1_PEINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI1_TIMMINGMODE.VALUE=1 -DRIVER.SCI.VAR.SCI3_PORT_BIT1_PSL.VALUE=1 -DRIVER.SCI.VAR.SCI4_STOPBITS.VALUE=2 -DRIVER.SCI.VAR.SCI4_RXINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI4_FEINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI1_PORT_BIT1_PULL.VALUE=2 -DRIVER.SCI.VAR.SCI4_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.SCI.VAR.SCI2_PORT_BIT2_DOUT.VALUE=0 -DRIVER.SCI.VAR.SCI4_TXINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI3_PORT_BIT2_PSL.VALUE=1 -DRIVER.SCI.VAR.SCI3_PORT_BIT0_DOUT.VALUE=0 -DRIVER.SCI.VAR.SCI2_WAKEINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI3_WAKEINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI1_RXINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI2_CLKMODE.VALUE=1 -DRIVER.SCI.VAR.SCI1_PRESCALE.VALUE=487 -DRIVER.SCI.VAR.SCI4_PEINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI2_PORT_BIT0_DIR.VALUE=0 -DRIVER.SCI.VAR.SCI1_PORT_BIT2_PULL.VALUE=2 -DRIVER.SCI.VAR.SCI3_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.SCI.VAR.SCI3_FEINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI2_PORT_BIT0_PULL.VALUE=2 -DRIVER.SCI.VAR.SCI3_OEINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI3_TXINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI1_ACTUALBAUDRATE.VALUE=9606 -DRIVER.SCI.VAR.SCI3_PORT_BIT1_DOUT.VALUE=0 -DRIVER.SCI.VAR.SCI2_BREAKINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI1_PEINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI2_PORT_BIT1_DIR.VALUE=0 -DRIVER.SCI.VAR.SCI4_RXINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI4_BASE_PORT.VALUE=0xFFF7E740 -DRIVER.SCI.VAR.SCI4_PRESCALE.VALUE=487 -DRIVER.SCI.VAR.SCI2_PORT_BIT0_FUN.VALUE=0 -DRIVER.SCI.VAR.SCI2_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.SCI.VAR.SCI2_PORT_BIT2_DIR.VALUE=0 -DRIVER.SCI.VAR.SCI1_WAKEINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI1_CLKMODE.VALUE=1 -DRIVER.SCI.VAR.SCI2_PORT_BIT1_PULL.VALUE=2 -DRIVER.SCI.VAR.SCI2_WAKEINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI2_PORT_BIT0_PDR.VALUE=0 -DRIVER.SCI.VAR.SCI3_BAUDRATE.VALUE=9600 -DRIVER.SCI.VAR.SCI2_OEINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI3_PORT_BIT2_DOUT.VALUE=0 -DRIVER.SCI.VAR.SCI2_PORT_BIT1_FUN.VALUE=1 -DRIVER.SCI.VAR.SCI4_PORT_BIT0_DOUT.VALUE=0 -DRIVER.SCI.VAR.SCI4_PEINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI4_BREAKINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI3_TIMMINGMODE.VALUE=1 -DRIVER.SCI.VAR.SCI3_STOPBITS.VALUE=2 -DRIVER.SCI.VAR.SCI3_RXINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI2_PORT_BIT1_PDR.VALUE=0 -DRIVER.SCI.VAR.SCI3_FEINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI1_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.SCI.VAR.SCI2_PORT_BIT2_FUN.VALUE=1 -DRIVER.SCI.VAR.SCI1_BREAKINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI2_PORT_BIT0_PSL.VALUE=1 -DRIVER.SCI.VAR.SCI3_TXINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI4_PORT_BIT0_DIR.VALUE=0 -DRIVER.SCI.VAR.SCI2_PORT_BIT2_PULL.VALUE=2 -DRIVER.SCI.VAR.SCI2_PORT_BIT2_PDR.VALUE=0 -DRIVER.SCI.VAR.SCI3_PORT_BIT0_PULL.VALUE=2 -DRIVER.SCI.VAR.SCI2_BASE_PORT.VALUE=0xFFF7E640 -DRIVER.SCI.VAR.SCI3_PARITYENA.VALUE=0 -DRIVER.SCI.VAR.SCI2_ACTUALBAUDRATE.VALUE=9606 -DRIVER.SCI.VAR.SCI4_PORT_BIT1_DOUT.VALUE=0 -DRIVER.SCI.VAR.SCI2_PORT_BIT1_PSL.VALUE=1 -DRIVER.SCI.VAR.SCI3_LENGTH.VALUE=8 -DRIVER.SCI.VAR.SCI3_PEINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI4_PORT_BIT1_DIR.VALUE=0 -DRIVER.SCI.VAR.SCI1_WAKEINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI2_FEINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI2_PORT_BIT2_PSL.VALUE=1 -DRIVER.SCI.VAR.SCI4_PORT_BIT0_FUN.VALUE=0 -DRIVER.SCI.VAR.SCI2_OEINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI4_EVENPARITY.VALUE=0 -DRIVER.SCI.VAR.SCI2_TXINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI4_PORT_BIT2_DIR.VALUE=0 -DRIVER.SCI.VAR.SCI4_PORT_BIT2_PULDIS.VALUE=0 -DRIVER.SCI.VAR.SCI4_BREAKINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI3_PORT_BIT1_PULL.VALUE=2 -DRIVER.SCI.VAR.SCI4_PORT_BIT0_PDR.VALUE=0 -DRIVER.SCI.VAR.SCI3_RXINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI4_PORT_BIT2_DOUT.VALUE=0 -DRIVER.SCI.VAR.SCI1_BASE.VALUE=0xFFF7E400 -DRIVER.SCI.VAR.SCI4_PORT_BIT1_FUN.VALUE=1 -DRIVER.SCI.VAR.SCI3_PRESCALE.VALUE=487 -DRIVER.SCI.VAR.SCI1_PORT_BIT0_DIR.VALUE=0 -DRIVER.SCI.VAR.SCI1_BREAKINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI4_PORT_BIT1_PDR.VALUE=0 -DRIVER.SCI.VAR.SCI1_LENGTH.VALUE=8 -DRIVER.SCI.VAR.SCI4_PORT_BIT2_FUN.VALUE=1 -DRIVER.SCI.VAR.SCI3_PORT_BIT2_PULDIS.VALUE=0 -DRIVER.SCI.VAR.SCI2_BAUDRATE.VALUE=9600 -DRIVER.SCI.VAR.SCI1_PARITYENA.VALUE=0 -DRIVER.SCI.VAR.SCI1_OEINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI4_PORT_BIT0_PSL.VALUE=1 -DRIVER.SCI.VAR.SCI1_PORT_BIT1_DIR.VALUE=0 -DRIVER.SCI.VAR.SCI3_PORT_BIT2_PULL.VALUE=2 -DRIVER.SCI.VAR.SCI3_PEINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI4_PORT_BIT2_PDR.VALUE=0 -DRIVER.SCI.VAR.SCI2_STOPBITS.VALUE=2 -DRIVER.SCI.VAR.SCI4_PORT_BIT0_PULL.VALUE=2 -DRIVER.SCI.VAR.SCI2_RXINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI1_PORT_BIT0_DOUT.VALUE=0 -DRIVER.SCI.VAR.SCI2_BASE.VALUE=0xFFF7E600 -DRIVER.SCI.VAR.SCI2_FEINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI1_PORT_BIT0_FUN.VALUE=0 -DRIVER.SCI.VAR.SCI4_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.SCI.VAR.SCI3_ACTUALBAUDRATE.VALUE=9606 -DRIVER.SCI.VAR.SCI4_PORT_BIT1_PSL.VALUE=1 -DRIVER.SCI.VAR.SCI1_PORT_BIT2_DIR.VALUE=0 -DRIVER.SCI.VAR.SCI3_EVENPARITY.VALUE=0 -DRIVER.SCI.VAR.SCI2_TXINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI3_BREAKINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI2_TIMMINGMODE.VALUE=1 -DRIVER.SCI.VAR.SCI1_PORT_BIT0_PDR.VALUE=0 -DRIVER.SCI.VAR.SCI2_PORT_BIT2_PULDIS.VALUE=0 -DRIVER.SCI.VAR.SCI1_PORT_BIT1_FUN.VALUE=1 -DRIVER.SCI.VAR.SCI4_PORT_BIT2_PSL.VALUE=1 -DRIVER.SCI.VAR.SCI4_OEINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI2_PEINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI1_PORT_BIT1_PDR.VALUE=0 -DRIVER.SCI.VAR.SCI4_PORT_BIT1_PULL.VALUE=2 -DRIVER.SCI.VAR.SCI3_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.SCI.VAR.SCI1_PORT_BIT1_DOUT.VALUE=0 -DRIVER.SCI.VAR.SCI3_BASE.VALUE=0xFFF7E500 -DRIVER.SCI.VAR.SCI1_PORT_BIT2_FUN.VALUE=1 -DRIVER.SCI.VAR.SCI4_WAKEINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI1_FEINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI1_PORT_BIT0_PSL.VALUE=1 -DRIVER.SCI.VAR.SCI3_PORT_BIT0_DIR.VALUE=0 -DRIVER.SCI.VAR.SCI1_OEINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI1_PORT_BIT2_PULDIS.VALUE=0 -DRIVER.SCI.VAR.SCI1_TXINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI1_PORT_BIT2_PDR.VALUE=0 -DRIVER.SCI.VAR.SCI1_PORT_BIT1_PSL.VALUE=1 -DRIVER.SCI.VAR.SCI2_RXINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI3_PORT_BIT1_DIR.VALUE=0 -DRIVER.SCI.VAR.SCI3_BASE_PORT.VALUE=0xFFF7E540 -DRIVER.SCI.VAR.SCI4_PARITYENA.VALUE=0 -DRIVER.SCI.VAR.SCI4_CLKMODE.VALUE=1 -DRIVER.SCI.VAR.SCI2_EVENPARITY.VALUE=0 -DRIVER.SCI.VAR.SCI2_PRESCALE.VALUE=487 -DRIVER.SCI.VAR.SCI2_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG0_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PARITYENA2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_DLENERRLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG4_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI2_BASE_PORT.VALUE=0xFFF7F618 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT17_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT25_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_BITERRENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PARITYENA3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_RXINTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG5_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT25_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT17_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT8_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG1_BUF_CSNR.VALUE=CS_1 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT1_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_CLKMOD.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT11_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT5_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_PHASE0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG5_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI1_PHASE1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT27_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT19_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT3_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG3_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT9_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG6_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PHASE2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT8_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG6_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG5_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI1_PHASE3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT25_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT17_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG2_BUF_CSNR.VALUE=CS_2 -DRIVER.MIBSPI.VAR.MIBSPI4_TG6_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT1_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT11_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_BASE.VALUE=0xFFF7FA00 -DRIVER.MIBSPI.VAR.MIBSPI5_TG0_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT5_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG6_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI3_TG7_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG6_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT17_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT25_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG5_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG1_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_C2TDELAYACTUAL.VALUE=26.667 -DRIVER.MIBSPI.VAR.MIBSPI4_TG7_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT1_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG4_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT11_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG5_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TXINTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TIMEOUTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_RAM_PARITY_ENA.VALUE=0x00000005 -DRIVER.MIBSPI.VAR.MIBSPI3_TG7_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI1_TG1_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI1_TG1_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT27_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT19_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG7_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG0_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_WDELAY0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT3_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG7_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG2_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG0_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI4_WDELAY1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG3_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI4_WDELAY2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PARERRLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT8_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG5_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG0_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_WDELAY3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG0_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT9_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG4_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG3_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT8_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT4_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG7_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG7_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG2_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT26_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT18_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG3_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT2_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG4_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG0_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_ACTUALBAUDRATE0.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI2_T2EDELAYACTUAL.VALUE=0.000 -DRIVER.MIBSPI.VAR.MIBSPI3_TG2_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI3_ACTUALBAUDRATE1.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT0_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG5_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT10_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_ACTUALBAUDRATE2.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI2_TG5_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT3_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI1_TG0_LENGTH.VALUE=8 -DRIVER.MIBSPI.VAR.MIBSPI5_TG0_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI3_TG0_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_ACTUALBAUDRATE3.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI2_TG3_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG2_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT9_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG5_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG7_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_C2EDELAYACTUAL.VALUE=0.000 -DRIVER.MIBSPI.VAR.MIBSPI2_BAUDRATE0.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT8_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG1_BUF_CSNR.VALUE=CS_1 -DRIVER.MIBSPI.VAR.MIBSPI2_BAUDRATE1.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT2_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG5_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG4_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT1_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI2_BAUDRATE2.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI4_TG2_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG1_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG3_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI3_TG0_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI2_BAUDRATE3.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI5_TG6_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_T2CDELAYACTUAL.VALUE=13.333 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT4_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT4_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG2_BUF_CSNR.VALUE=CS_2 -DRIVER.MIBSPI.VAR.MIBSPI2_TG4_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI3_TG7_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI3_TG5_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG1_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT9_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG2_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PARERRENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG1_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI3_OVRNINTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT8_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG6_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI1_TG6_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT26_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT18_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT0_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT10_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT2_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG3_BUF_CSNR.VALUE=CS_3 -DRIVER.MIBSPI.VAR.MIBSPI2_POLARITY0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT17_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT25_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG1_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_POLARITY1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_C2TDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT10_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI4_TG6_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_OVRNINTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT5_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG0_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI2_POLARITY2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG2_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI5_RXINTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT17_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT25_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT4_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG4_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI3_TG5_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_DEYSNCENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_POLARITY3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT11_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT27_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT19_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT0_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG4_BUF_CSNR.VALUE=CS_4 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT3_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG2_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_WAITENA0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_BASE.VALUE=0xFFF7FC00 -DRIVER.MIBSPI.VAR.MIBSPI2_WAITENA1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG6_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT1_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_DEYSNCLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG5_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PARPOL0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT11_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT17_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT25_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_WAITENA2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG4_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT10_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PARPOL1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG7_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI2_WAITENA3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG5_BUF_CSNR.VALUE=CS_5 -DRIVER.MIBSPI.VAR.MIBSPI4_TG4_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PARPOL2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG2_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT9_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG2_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PARPOL3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT3_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT0_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG2_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI5_TG5_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI1_TXINTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG0_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG1_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT5_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PRESCALE0.VALUE=74 -DRIVER.MIBSPI.VAR.MIBSPI1_CLKMOD.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG3_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI1_PRESCALE1.VALUE=74 -DRIVER.MIBSPI.VAR.MIBSPI5_TG5_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TXINTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG2_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG1_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PRESCALE2.VALUE=74 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT9_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TIMEOUTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG7_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_DLENERRENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PRESCALE3.VALUE=74 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT1_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT11_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG3_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PARITYENA0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG5_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT8_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG5_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_ACTUALBAUDRATE0.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI3_PARITYENA1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_ACTUALBAUDRATE1.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT9_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI3_PARITYENA2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_DLENERRLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG4_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI1_TG2_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_ACTUALBAUDRATE2.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT2_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PARITYENA3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_BITERRENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG1_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_ACTUALBAUDRATE3.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI5_TG4_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT4_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG6_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG6_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG4_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG5_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI3_T2EDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT2_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_BITERRLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_SHIFTDIR0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT8_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG3_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_RXINTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_CSDEF.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT4_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI1_TG5_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_SHIFTDIR1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG2_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG1_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT0_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG4_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_SHIFTDIR2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT10_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG7_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG6_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_WDELAY0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT17_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT25_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_T2CDELAYACTUAL.VALUE=13.333 -DRIVER.MIBSPI.VAR.MIBSPI4_SHIFTDIR3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_WDELAY1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG1_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI4_MASTER.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_WDELAY2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT2_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT1_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG2_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG3_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_WDELAY3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG2_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT8_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_ENABLEHIGHZ.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT5_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG7_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG4_BUF_CSNR.VALUE=CS_4 -DRIVER.MIBSPI.VAR.MIBSPI3_TG7_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT10_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG3_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT0_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT10_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI1_TG5_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG4_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT4_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG3_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT27_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT19_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT2_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG5_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT3_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG5_BUF_CSNR.VALUE=CS_5 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT9_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG0_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI2_C2EDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT11_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI4_TG3_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI3_TG2_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT17_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT25_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG5_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG4_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI5_TG1_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT1_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT5_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG6_BUF_CSNR.VALUE=CS_6 -DRIVER.MIBSPI.VAR.MIBSPI4_C2TDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT3_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG2_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_BASE_PORT.VALUE=0xFFF7FC18 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT9_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT0_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG6_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG5_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI2_TG0_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI2_TG0_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT1_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_WAITENA0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG7_BUF_CSNR.VALUE=CS_7 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT11_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG0_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG3_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_WAITENA1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG2_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI5_WAITENA2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG2_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG5_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT2_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_WAITENA3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT9_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT10_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG2_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG1_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT17_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT25_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_C2TDELAYACTUAL.VALUE=26.667 -DRIVER.MIBSPI.VAR.MIBSPI2_T2CDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG4_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT11_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG4_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_RAM_PARITY_ENA.VALUE=0x00000005 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT2_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TXINTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG1_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI1_TG3_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT3_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG2_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT0_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG6_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG1_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_BASE_RAM.VALUE=0xFF080000 -DRIVER.MIBSPI.VAR.MIBSPI1_TG4_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI5_TG2_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT8_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_PARPOL0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG7_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI2_TG0_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_CHARLEN0.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI3_TG2_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PARPOL1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PARERRENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_CHARLEN1.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI2_OVRNINTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG4_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI5_TG5_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG3_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PHASE0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PARPOL2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_CHARLEN2.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI4_PHASE1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PARPOL3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_CHARLEN3.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI5_PARERRLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT8_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI4_PHASE2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG7_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG6_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_OVRNINTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT1_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG0_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT5_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI5_TG1_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG2_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI4_PHASE3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG4_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_DEYSNCENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_RXINTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT2_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG0_BUF_CSNR.VALUE=CS_0 -DRIVER.MIBSPI.VAR.MIBSPI3_T2EDELAYACTUAL.VALUE=0.000 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT8_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG1_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI5_RXINTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT10_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_DEYSNCLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT3_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT3_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG7_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT4_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG5_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG5_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI2_TG5_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG4_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT9_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG1_BUF_CSNR.VALUE=CS_1 -DRIVER.MIBSPI.VAR.MIBSPI4_C2EDELAYACTUAL.VALUE=0.000 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT8_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG0_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT25_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT17_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT1_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT11_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI1_TG2_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG3_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI4_TG4_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT10_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG6_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG5_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI5_BAUDRATE0.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT4_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT1_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG7_BUF_CSNR.VALUE=CS_7 -DRIVER.MIBSPI.VAR.MIBSPI1_TG3_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_BAUDRATE1.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI4_TG3_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI5_TG6_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI5_BAUDRATE2.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT9_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG1_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG7_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG1_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TXINTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_BAUDRATE3.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI4_TG7_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TIMEOUTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG6_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI3_TG6_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI1_DLENERRENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT10_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT2_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG5_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG1_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG0_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT17_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT25_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_WDELAY0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PARITYENA0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG1_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_C2EDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_WDELAY1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PARITYENA1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TIMEOUTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT2_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_WDELAY2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PARITYENA2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_DLENERRLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_MASTER.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG7_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT9_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG7_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_WDELAY3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PARITYENA3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_BITERRENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT3_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT0_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG7_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_POLARITY0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT10_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT0_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG2_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG4_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG4_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_POLARITY1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG5_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI5_POLARITY2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT11_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG7_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_BITERRLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT4_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_SHIFTDIR0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG4_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG3_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT26_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT18_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG6_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_POLARITY3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG7_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT2_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_SHIFTDIR1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_RAM_PARITY_ENA.VALUE=0x00000005 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT11_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG3_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG2_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT9_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG3_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_SHIFTDIR2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_SHIFTDIR3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG7_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT0_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG1_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT11_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG0_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG4_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT2_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG7_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG5_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG0_BUF_CSNR.VALUE=CS_0 -DRIVER.MIBSPI.VAR.MIBSPI5_T2CDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG7_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI5_TG0_LENGTH.VALUE=8 -DRIVER.MIBSPI.VAR.MIBSPI4_TG7_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG2_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG0_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG6_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG5_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG3_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT11_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PRESCALE0.VALUE=74 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT8_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG7_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG1_BUF_CSNR.VALUE=CS_1 -DRIVER.MIBSPI.VAR.MIBSPI5_BASE_RAM.VALUE=0xFF0A0000 -DRIVER.MIBSPI.VAR.MIBSPI4_PRESCALE1.VALUE=74 -DRIVER.MIBSPI.VAR.MIBSPI2_TG0_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI5_CHARLEN0.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT9_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI4_PRESCALE2.VALUE=74 -DRIVER.MIBSPI.VAR.MIBSPI3_TG3_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI3_CSDEF.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT3_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG1_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_CHARLEN1.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI4_TG0_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI4_PRESCALE3.VALUE=74 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT4_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_CHARLEN2.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI3_TG6_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG2_BUF_CSNR.VALUE=CS_2 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT1_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT9_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_CHARLEN3.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT8_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG7_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG2_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_BASE_PORT.VALUE=0xFFF7F818 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT5_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT4_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI2_TG5_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG1_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_RXINTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG7_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT10_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG3_BUF_CSNR.VALUE=CS_3 -DRIVER.MIBSPI.VAR.MIBSPI2_TG0_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_T2CDELAYACTUAL.VALUE=13.333 -DRIVER.MIBSPI.VAR.MIBSPI1_WAITENA0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG2_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI1_WAITENA1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT26_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT18_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT1_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT2_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI2_TG5_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI2_PARPOL0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG4_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_WAITENA2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PARPOL1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG7_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI1_TG0_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_WAITENA3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG4_BUF_CSNR.VALUE=CS_4 -DRIVER.MIBSPI.VAR.MIBSPI4_TG7_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG2_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_CLKMOD.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT5_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT3_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PARPOL2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PHASE0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG6_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI2_PARPOL3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PHASE1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT10_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG3_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT0_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI3_TG4_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PHASE2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT9_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PHASE3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT3_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT9_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG1_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT10_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT0_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TXINTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT4_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG4_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG7_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT2_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG2_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI1_PARERRENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_OVRNINTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT1_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT11_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT2_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG5_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG4_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT9_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT0_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG6_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PARERRLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG6_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_OVRNINTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG0_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI4_TG0_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI2_TG2_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG0_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT11_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG4_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG5_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG2_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG1_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI2_T2EDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG4_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT2_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG4_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_DEYSNCLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_RXINTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG1_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG3_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI2_TG1_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG0_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI3_TG6_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG4_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_C2TDELAYACTUAL.VALUE=26.667 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT4_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_WDELAY0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_WDELAY1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT11_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_WDELAY2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG1_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI3_TG2_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT17_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT25_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG1_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI1_TG5_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_WDELAY3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG7_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG6_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT0_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG7_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_BAUDRATE0.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI1_TG3_BUF_CSNR.VALUE=CS_3 -DRIVER.MIBSPI.VAR.MIBSPI3_TG3_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI3_BAUDRATE1.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT8_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG6_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI4_TG4_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG0_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_BAUDRATE2.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT5_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT17_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT25_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI1_TG1_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG3_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG4_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI3_TG4_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG2_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI3_BAUDRATE3.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI3_TIMEOUTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT10_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_ENABLEHIGHZ.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT3_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG4_BUF_CSNR.VALUE=CS_4 -DRIVER.MIBSPI.VAR.MIBSPI1_PARITYENA0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_C2EDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PARITYENA1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT8_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI5_TG5_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT1_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG7_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TIMEOUTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT5_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI1_PARITYENA2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_DLENERRLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG4_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG3_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG3_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI1_TG7_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI1_PARITYENA3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_T2EDELAYACTUAL.VALUE=0.000 -DRIVER.MIBSPI.VAR.MIBSPI4_ACTUALBAUDRATE0.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI3_TG5_BUF_CSNR.VALUE=CS_5 -DRIVER.MIBSPI.VAR.MIBSPI3_POLARITY0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT8_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG2_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_ACTUALBAUDRATE1.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI3_C2TDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_POLARITY1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG5_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT27_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT19_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT10_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG4_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT3_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_ACTUALBAUDRATE2.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT3_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI3_POLARITY2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT10_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT0_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG3_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_BITERRLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG4_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI4_TG5_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI4_ACTUALBAUDRATE3.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI4_DEYSNCENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_POLARITY3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG7_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT9_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT8_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_C2EDELAYACTUAL.VALUE=0.000 -DRIVER.MIBSPI.VAR.MIBSPI4_TG6_BUF_CSNR.VALUE=CS_6 -DRIVER.MIBSPI.VAR.MIBSPI4_TG0_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_WAITENA0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT5_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG6_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_WAITENA1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT1_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI4_TG7_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_WAITENA2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG1_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI1_TG1_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT5_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG6_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_WAITENA3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT2_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG7_BUF_CSNR.VALUE=CS_7 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT17_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT25_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT4_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT1_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG0_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG2_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG3_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_ENABLEHIGHZ.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT11_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT1_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG7_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI1_T2CDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT9_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG1_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG0_LENGTH.VALUE=8 -DRIVER.MIBSPI.VAR.MIBSPI5_TG6_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT11_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TXINTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT10_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT2_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG1_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG1_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT4_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PRESCALE0.VALUE=74 -DRIVER.MIBSPI.VAR.MIBSPI1_TG6_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PRESCALE1.VALUE=74 -DRIVER.MIBSPI.VAR.MIBSPI1_TG0_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI1_BASE_RAM.VALUE=0xFF0E0000 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT10_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT2_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT8_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG3_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI2_TG1_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PRESCALE2.VALUE=74 -DRIVER.MIBSPI.VAR.MIBSPI1_PARPOL0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_CHARLEN0.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI2_PRESCALE3.VALUE=74 -DRIVER.MIBSPI.VAR.MIBSPI1_PARPOL1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_CHARLEN1.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT0_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG5_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG1_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG4_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_CLKMOD.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG7_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PARPOL2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_CHARLEN2.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI5_TG4_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI1_PARPOL3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_CHARLEN3.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT11_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT17_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT25_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT4_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG2_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG4_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT11_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT1_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_BASE_PORT.VALUE=0xFFF7F418 -DRIVER.MIBSPI.VAR.MIBSPI4_BITERRENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_RAM_PARITY_ENA.VALUE=0x00000005 -DRIVER.MIBSPI.VAR.MIBSPI1_TG3_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT9_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG7_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_T2EDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_SHIFTDIR0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_RXINTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG1_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG5_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT3_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_SHIFTDIR1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG4_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG3_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI5_TG0_BUF_CSNR.VALUE=CS_0 -DRIVER.MIBSPI.VAR.MIBSPI5_SHIFTDIR2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT2_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG5_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_SHIFTDIR3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG6_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI5_TG2_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_CSDEF.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI2_TG4_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT8_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI3_TG5_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG4_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT11_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT8_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT5_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_ACTUALBAUDRATE0.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI1_TG6_BUF_CSNR.VALUE=CS_6 -DRIVER.MIBSPI.VAR.MIBSPI1_TG1_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_ACTUALBAUDRATE1.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT9_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI5_TG2_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI5_MASTER.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT3_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG1_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT9_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_ACTUALBAUDRATE2.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT10_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT0_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG6_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG5_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI2_ACTUALBAUDRATE3.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI1_TG0_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI5_TG6_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT1_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG3_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT9_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG7_BUF_CSNR.VALUE=CS_7 -DRIVER.MIBSPI.VAR.MIBSPI2_TG0_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG0_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_C2EDELAYACTUAL.VALUE=0.000 -DRIVER.MIBSPI.VAR.MIBSPI4_C2EDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT5_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT4_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI3_TG5_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT2_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG6_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PARERRLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_OVRNINTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG7_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_DLENERRENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG6_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT5_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT10_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG5_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_T2CDELAYACTUAL.VALUE=13.333 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT17_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT25_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG1_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG1_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI5_TG1_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT2_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI4_TG4_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI5_TG7_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI2_TG1_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI1_TG2_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT5_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT3_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG3_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG2_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT10_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT2_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT0_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT0_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI5_TG3_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT10_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT8_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG1_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT9_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT3_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG3_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT0_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG7_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_BAUDRATE0.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI4_T2CDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG3_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI1_BAUDRATE1.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT11_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT17_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT25_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT4_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG6_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT11_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT1_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG6_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_BAUDRATE2.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI5_TG0_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG2_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI2_TIMEOUTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT17_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT25_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_BAUDRATE3.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI5_TG4_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT2_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG6_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG5_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG0_BUF_CSNR.VALUE=CS_0 -DRIVER.MIBSPI.VAR.MIBSPI4_BASE_RAM.VALUE=0xFF060000 -DRIVER.MIBSPI.VAR.MIBSPI4_TG6_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG5_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_CHARLEN0.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI3_TIMEOUTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT3_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG0_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT3_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_CHARLEN1.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI4_PARERRENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG4_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT10_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG5_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT11_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG7_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_CHARLEN2.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI3_TG1_BUF_CSNR.VALUE=CS_1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT8_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG0_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_POLARITY0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_CHARLEN3.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI1_TG5_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI1_POLARITY1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_BASE.VALUE=0xFFF7F400 -DRIVER.MIBSPI.VAR.MIBSPI2_TG6_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG2_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_POLARITY2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG0_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI4_TG3_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI4_TG3_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_RXINTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_DEYSNCENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG6_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_POLARITY3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PHASE0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT17_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT25_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT4_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG2_BUF_CSNR.VALUE=CS_2 -DRIVER.MIBSPI.VAR.MIBSPI4_C2TDELAYACTUAL.VALUE=26.667 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT11_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT1_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PHASE1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PHASE2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_DEYSNCLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG7_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT9_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG1_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT9_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI5_PHASE3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG7_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG6_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI1_TG7_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG6_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI5_TG3_BUF_CSNR.VALUE=CS_3 -DRIVER.MIBSPI.VAR.MIBSPI4_TG0_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG1_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG2_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT5_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG0_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG6_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG0_LENGTH.VALUE=8 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT2_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT8_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG4_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI3_TG6_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT5_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG7_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT3_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG1_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT10_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT0_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG7_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG7_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT5_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI3_TXINTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT4_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG3_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG5_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_ENABLE.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT11_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG7_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI5_TG0_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_T2EDELAYACTUAL.VALUE=0.000 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT8_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG2_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT9_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG3_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG4_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI5_TG7_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT3_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI4_TG6_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT0_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT10_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG3_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG2_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT10_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT0_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI5_OVRNINTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_BITERRENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT5_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG4_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG4_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT3_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT2_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG5_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG0_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_T2EDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT1_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI5_TG0_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI4_BITERRLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT11_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI3_SHIFTDIR0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_MASTER.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_SHIFTDIR1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG0_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG3_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG5_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG2_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_SHIFTDIR2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT8_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT1_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG6_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI3_SHIFTDIR3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG6_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG1_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT3_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG4_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT27_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT19_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT3_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG1_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG0_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI5_TG4_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT17_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT25_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT4_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG7_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG6_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG6_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT11_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT1_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG2_BUF_CSNR.VALUE=CS_2 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT8_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG2_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT5_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG3_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG2_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG1_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI5_TG7_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG4_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PRESCALE0.VALUE=74 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT10_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG3_BUF_CSNR.VALUE=CS_3 -DRIVER.MIBSPI.VAR.MIBSPI5_PRESCALE1.VALUE=74 -DRIVER.MIBSPI.VAR.MIBSPI2_BASE.VALUE=0xFFF7F600 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT25_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT17_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG1_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PRESCALE2.VALUE=74 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT1_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG4_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT11_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG3_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PRESCALE3.VALUE=74 -DRIVER.MIBSPI.VAR.MIBSPI4_TG2_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI4_DLENERRENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_RAM_PARITY_ENA.VALUE=0x00000005 -DRIVER.MIBSPI.VAR.MIBSPI5_PARITYENA0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG7_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG4_BUF_CSNR.VALUE=CS_4 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT3_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PARITYENA1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG1_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI2_C2TDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PARITYENA2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_DLENERRLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_CSDEF.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI4_BASE_PORT.VALUE=0xFFF7FA18 -DRIVER.MIBSPI.VAR.MIBSPI3_TG4_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI2_TG3_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG3_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI5_PARITYENA3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT8_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT5_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG5_BUF_CSNR.VALUE=CS_5 -DRIVER.MIBSPI.VAR.MIBSPI3_WAITENA0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT9_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG4_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_WAITENA1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG3_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_WAITENA2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT8_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT4_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG7_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_WAITENA3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG6_BUF_CSNR.VALUE=CS_6 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT5_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG6_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG2_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT2_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_T2EDELAYACTUAL.VALUE=0.000 -DRIVER.MIBSPI.VAR.MIBSPI1_TG3_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT9_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT0_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG3_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT10_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG6_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI3_TG0_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI2_TG1_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TXINTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TIMEOUTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG1_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG0_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_CLKMOD.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_ENABLEHIGHZ.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT9_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PHASE0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_C2EDELAYACTUAL.VALUE=0.000 -DRIVER.MIBSPI.VAR.MIBSPI5_TG7_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI3_PHASE1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT26_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT18_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT17_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT25_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT4_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI4_TG5_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT2_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG5_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PHASE2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TIMEOUTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT11_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT1_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI4_TG0_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PHASE3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PARERRENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG3_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI4_T2CDELAYACTUAL.VALUE=13.333 -DRIVER.MIBSPI.VAR.MIBSPI3_TG5_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT4_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT4_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG6_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG0_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT2_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI4_TG3_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PARERRLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG1_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG1_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT3_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG4_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG2_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT0_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT10_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT2_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG7_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG6_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_T2EDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT8_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_RXINTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG7_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_DEYSNCLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT5_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG1_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI3_TG3_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG4_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI2_TG3_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG2_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI5_WDELAY0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT0_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT10_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT3_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_ENABLEHIGHZ.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_WDELAY1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG2_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT25_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT17_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG5_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI5_TG3_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_WDELAY2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT1_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT11_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG0_LENGTH.VALUE=8 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT17_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT25_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG2_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI5_TG2_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_WDELAY3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG4_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG3_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT11_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_BAUDRATE0.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI1_TG5_BUF_CSNR.VALUE=CS_5 -DRIVER.MIBSPI.VAR.MIBSPI4_BAUDRATE1.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI3_BASE.VALUE=0xFFF7F800 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT27_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT19_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG6_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_BAUDRATE2.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT3_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG0_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_MASTER.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG5_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_BAUDRATE3.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT8_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG5_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI3_TG4_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI2_TG6_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT8_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG1_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG0_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG6_BUF_CSNR.VALUE=CS_6 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT5_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG0_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG4_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI3_C2EDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG7_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI2_TG2_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG2_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT25_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT17_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG6_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG5_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI4_TG5_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_OVRNINTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT11_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT25_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT17_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG3_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_C2TDELAYACTUAL.VALUE=26.667 -DRIVER.MIBSPI.VAR.MIBSPI4_POLARITY0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT1_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG7_BUF_CSNR.VALUE=CS_7 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT11_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG0_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG3_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_C2TDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_POLARITY1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG6_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_OVRNINTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT9_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG0_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI4_POLARITY2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT9_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI2_TG0_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_BITERRLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_SHIFTDIR0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT10_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG6_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI5_DEYSNCENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG6_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI4_POLARITY3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_SHIFTDIR1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG1_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG1_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG3_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT4_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_SHIFTDIR2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG6_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI1_SHIFTDIR3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT26_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT18_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG0_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT2_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT17_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT25_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT8_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG2_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG2_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT0_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT10_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG4_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_T2CDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT5_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT4_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG2_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI3_TG0_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT2_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI1_CSDEF.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI5_TG7_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI5_TG7_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TXINTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT3_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG3_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG2_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_ACTUALBAUDRATE0.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT9_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT8_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG6_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PRESCALE0.VALUE=74 -DRIVER.MIBSPI.VAR.MIBSPI2_TG3_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT5_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_ACTUALBAUDRATE1.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI3_PRESCALE1.VALUE=74 -DRIVER.MIBSPI.VAR.MIBSPI3_BASE_RAM.VALUE=0xFF0C0000 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT3_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT0_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_ACTUALBAUDRATE2.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI5_PARPOL0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG1_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT10_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG3_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PRESCALE2.VALUE=74 -DRIVER.MIBSPI.VAR.MIBSPI3_CHARLEN0.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT0_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI5_ACTUALBAUDRATE3.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI5_PARPOL1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PRESCALE3.VALUE=74 -DRIVER.MIBSPI.VAR.MIBSPI3_CHARLEN1.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI3_DLENERRENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT26_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT18_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PARPOL2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG5_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PARITYENA0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT2_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG5_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG0_BUF_CSNR.VALUE=CS_0 -DRIVER.MIBSPI.VAR.MIBSPI3_CHARLEN2.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT3_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_PARPOL3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PARITYENA1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_CHARLEN3.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI1_TG1_TRGSRC.VALUE=TRG_DISABLED -DRIVER.SPI.VAR.SPI5_PORT_BIT26_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT18_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT4_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI3_PHASE2.VALUE=0 -DRIVER.SPI.VAR.SPI2_TIMEOUTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT1_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI5_PORT_BIT25_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT17_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI3_PHASE3.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT11_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI4_T2CDELAYACTUAL.VALUE=13.333 -DRIVER.SPI.VAR.SPI4_POLARITY0.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT1_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT4_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI4_POLARITY1.VALUE=0 -DRIVER.SPI.VAR.SPI2_T2EDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT2_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI4_PORT_BIT9_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI4_POLARITY2.VALUE=0 -DRIVER.SPI.VAR.SPI2_BITERRLVL.VALUE=0 -DRIVER.SPI.VAR.SPI1_SHIFTDIR0.VALUE=0 -DRIVER.SPI.VAR.SPI1_RXINTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT10_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI5_DEYSNCENA.VALUE=0 -DRIVER.SPI.VAR.SPI4_POLARITY3.VALUE=0 -DRIVER.SPI.VAR.SPI1_SHIFTDIR1.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT5_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT10_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT2_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT4_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI1_SHIFTDIR2.VALUE=0 -DRIVER.SPI.VAR.SPI1_SHIFTDIR3.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT2_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT10_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI1_PORT_BIT8_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT0_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT0_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT25_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT17_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT11_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI3_PORT_BIT4_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT11_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT25_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT17_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT9_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI3_PRESCALE0.VALUE=74 -DRIVER.SPI.VAR.SPI3_PRESCALE1.VALUE=74 -DRIVER.SPI.VAR.SPI1_C2EDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT27_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT19_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT0_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI3_PRESCALE2.VALUE=74 -DRIVER.SPI.VAR.SPI1_MASTER.VALUE=1 -DRIVER.SPI.VAR.SPI3_PRESCALE3.VALUE=74 -DRIVER.SPI.VAR.SPI3_PORT_BIT2_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI3_C2TDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI2_BASE_PORT.VALUE=0xFFF7F618 -DRIVER.SPI.VAR.SPI5_BITERRENA.VALUE=0 -DRIVER.SPI.VAR.SPI4_OVRNINTENA.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT9_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT25_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT17_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI5_C2TDELAYACTUAL.VALUE=26.667 -DRIVER.SPI.VAR.SPI4_PORT_BIT10_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT8_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI4_WAITENA0.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT11_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT5_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI4_WAITENA1.VALUE=0 -DRIVER.SPI.VAR.SPI5_OVRNINTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI4_WAITENA2.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT3_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT9_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI1_PORT_BIT9_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT5_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI4_WAITENA3.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT2_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT1_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI1_T2CDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT26_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT18_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT5_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI3_TXINTENA.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT10_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI1_BASE_RAM.VALUE=0xFF0E0000 -DRIVER.SPI.VAR.SPI5_PORT_BIT1_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT5_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI1_PORT_BIT2_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI1_CHARLEN0.VALUE=16 -DRIVER.SPI.VAR.SPI1_CHARLEN1.VALUE=16 -DRIVER.SPI.VAR.SPI4_PORT_BIT8_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT3_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT5_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI1_CHARLEN2.VALUE=16 -DRIVER.SPI.VAR.SPI1_CHARLEN3.VALUE=16 -DRIVER.SPI.VAR.SPI5_PORT_BIT3_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI3_PORT_BIT10_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT0_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI2_PARERRLVL.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT8_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI3_DLENERRENA.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT26_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT18_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT9_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI4_PARITYENA0.VALUE=0 -DRIVER.SPI.VAR.SPI4_ENABLEHIGHZ.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT3_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI5_T2EDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI4_PARITYENA1.VALUE=0 -DRIVER.SPI.VAR.SPI4_PARITYENA2.VALUE=0 -DRIVER.SPI.VAR.SPI4_DLENERRLVL.VALUE=0 -DRIVER.SPI.VAR.SPI4_RXINTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT4_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT25_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT17_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT11_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI5_PORT_BIT3_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI4_PARITYENA3.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT2_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT1_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI3_CLKMOD.VALUE=1 -DRIVER.SPI.VAR.SPI1_PHASE0.VALUE=0 -DRIVER.SPI.VAR.SPI1_PHASE1.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT27_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT19_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT0_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI1_PHASE2.VALUE=0 -DRIVER.SPI.VAR.SPI1_PHASE3.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT25_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT17_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT11_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI2_BAUDRATE0.VALUE=1000.000 -DRIVER.SPI.VAR.SPI1_PORT_BIT8_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI2_BAUDRATE1.VALUE=1000.000 -DRIVER.SPI.VAR.SPI5_PORT_BIT2_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI2_BAUDRATE2.VALUE=1000.000 -DRIVER.SPI.VAR.SPI2_BAUDRATE3.VALUE=1000.000 -DRIVER.SPI.VAR.SPI5_WDELAY0.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT4_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT10_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT25_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT17_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI1_C2TDELAYACTUAL.VALUE=26.667 -DRIVER.SPI.VAR.SPI1_ENABLEHIGHZ.VALUE=0 -DRIVER.SPI.VAR.SPI5_WDELAY1.VALUE=0 -DRIVER.SPI.VAR.SPI4_C2EDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI5_WDELAY2.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT11_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT9_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI1_TIMEOUTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI5_WDELAY3.VALUE=0 -DRIVER.SPI.VAR.SPI5_PARERRENA.VALUE=0 -DRIVER.SPI.VAR.SPI4_RAM_PARITY_ENA.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT5_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT27_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT19_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT0_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT11_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI2_POLARITY0.VALUE=0 -DRIVER.SPI.VAR.SPI2_POLARITY1.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT5_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI2_POLARITY2.VALUE=0 -DRIVER.SPI.VAR.SPI3_DEYSNCENA.VALUE=0 -DRIVER.SPI.VAR.SPI2_POLARITY3.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT11_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT3_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT1_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI5_DEYSNCLVL.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT8_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI4_PORT_BIT10_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT26_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT18_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI2_T2EDELAYACTUAL.VALUE=0.000 -DRIVER.SPI.VAR.SPI1_PORT_BIT9_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI4_T2CDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT3_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT10_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT0_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT3_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI4_PORT_BIT9_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT5_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI3_C2EDELAYACTUAL.VALUE=0.000 -DRIVER.SPI.VAR.SPI1_PRESCALE0.VALUE=74 -DRIVER.SPI.VAR.SPI4_BASE_RAM.VALUE=0xFF060000 -DRIVER.SPI.VAR.SPI1_PRESCALE1.VALUE=74 -DRIVER.SPI.VAR.SPI5_PORT_BIT4_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI4_CHARLEN0.VALUE=16 -DRIVER.SPI.VAR.SPI2_PORT_BIT1_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI1_PRESCALE2.VALUE=74 -DRIVER.SPI.VAR.SPI4_PORT_BIT3_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI4_CHARLEN1.VALUE=16 -DRIVER.SPI.VAR.SPI1_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI1_PRESCALE3.VALUE=74 -DRIVER.SPI.VAR.SPI5_PORT_BIT1_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI5_T2CDELAYACTUAL.VALUE=13.333 -DRIVER.SPI.VAR.SPI4_CHARLEN2.VALUE=16 -DRIVER.SPI.VAR.SPI1_PORT_BIT8_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI4_CHARLEN3.VALUE=16 -DRIVER.SPI.VAR.SPI1_BASE.VALUE=0xFFF7F400 -DRIVER.SPI.VAR.SPI3_BITERRENA.VALUE=0 -DRIVER.SPI.VAR.SPI3_OVRNINTENA.VALUE=0 -DRIVER.SPI.VAR.SPI3_RXINTENA.VALUE=0 -DRIVER.SPI.VAR.SPI5_ACTUALBAUDRATE0.VALUE=1000.000 -DRIVER.SPI.VAR.SPI3_PORT_BIT10_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT4_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT2_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT25_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT17_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI5_ACTUALBAUDRATE1.VALUE=1000.000 -DRIVER.SPI.VAR.SPI5_PORT_BIT2_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI5_ACTUALBAUDRATE2.VALUE=1000.000 -DRIVER.SPI.VAR.SPI5_PARPOL0.VALUE=0 -DRIVER.SPI.VAR.SPI5_BITERRLVL.VALUE=0 -DRIVER.SPI.VAR.SPI4_SHIFTDIR0.VALUE=0 -DRIVER.SPI.VAR.SPI4_OVRNINTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT8_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI5_ACTUALBAUDRATE3.VALUE=1000.000 -DRIVER.SPI.VAR.SPI5_PARPOL1.VALUE=0 -DRIVER.SPI.VAR.SPI4_SHIFTDIR1.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT27_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT19_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT0_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI5_PARPOL2.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT0_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI4_SHIFTDIR2.VALUE=0 -DRIVER.SPI.VAR.SPI5_PARPOL3.VALUE=0 -DRIVER.SPI.VAR.SPI4_SHIFTDIR3.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT4_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT11_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT1_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT8_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT25_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT17_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT11_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI3_TXINTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT2_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT9_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI1_CLKMOD.VALUE=1 -DRIVER.SPI.VAR.SPI5_TIMEOUTENA.VALUE=0 -DRIVER.SPI.VAR.SPI2_DLENERRENA.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT11_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT5_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI3_PARITYENA0.VALUE=0 -DRIVER.SPI.VAR.SPI3_PARITYENA1.VALUE=0 -DRIVER.SPI.VAR.SPI1_T2EDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT3_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI5_BASE_PORT.VALUE=0xFFF7FC18 -DRIVER.SPI.VAR.SPI3_PORT_BIT9_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI3_PORT_BIT9_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI3_PARITYENA2.VALUE=0 -DRIVER.SPI.VAR.SPI3_DLENERRLVL.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT0_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI3_PARITYENA3.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT1_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI4_WDELAY0.VALUE=0 -DRIVER.SPI.VAR.SPI4_WDELAY1.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT5_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI4_WDELAY2.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT2_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT4_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI4_WDELAY3.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT3_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT10_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI1_T2CDELAYACTUAL.VALUE=13.333 -DRIVER.SPI.VAR.SPI5_PORT_BIT5_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI4_MASTER.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT2_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI5_PORT_BIT8_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT3_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI3_ACTUALBAUDRATE0.VALUE=1000.000 -DRIVER.SPI.VAR.SPI2_PORT_BIT0_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI3_ACTUALBAUDRATE1.VALUE=1000.000 -DRIVER.SPI.VAR.SPI2_BASE.VALUE=0xFFF7F600 -DRIVER.SPI.VAR.SPI4_PORT_BIT10_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT8_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT0_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI3_ACTUALBAUDRATE2.VALUE=1000.000 -DRIVER.SPI.VAR.SPI3_ACTUALBAUDRATE3.VALUE=1000.000 -DRIVER.SPI.VAR.SPI3_PARERRENA.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT3_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI2_C2TDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT4_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI5_PARERRLVL.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT1_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT8_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT5_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI1_DEYSNCENA.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT2_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT1_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI3_WAITENA0.VALUE=0 -DRIVER.SPI.VAR.SPI3_WAITENA1.VALUE=0 -DRIVER.SPI.VAR.SPI3_WAITENA2.VALUE=0 -DRIVER.SPI.VAR.SPI3_DEYSNCLVL.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT3_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI3_WAITENA3.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT26_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT18_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT11_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT8_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT10_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI3_PORT_BIT10_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI2_TXINTENA.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT4_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI5_BAUDRATE0.VALUE=1000.000 -DRIVER.SPI.VAR.SPI2_PORT_BIT1_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI2_C2TDELAYACTUAL.VALUE=26.667 -DRIVER.SPI.VAR.SPI5_BAUDRATE1.VALUE=1000.000 -DRIVER.SPI.VAR.SPI5_BAUDRATE2.VALUE=1000.000 -DRIVER.SPI.VAR.SPI4_PORT_BIT11_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI4_PARPOL0.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT9_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI5_BAUDRATE3.VALUE=1000.000 -DRIVER.SPI.VAR.SPI5_RAM_PARITY_ENA.VALUE=0 -DRIVER.SPI.VAR.SPI4_PARPOL1.VALUE=0 -DRIVER.SPI.VAR.SPI4_PARPOL2.VALUE=0 -DRIVER.SPI.VAR.SPI4_PARPOL3.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT5_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT2_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT3_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI2_OVRNINTENA.VALUE=0 -DRIVER.SPI.VAR.SPI1_BITERRENA.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT3_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI5_POLARITY0.VALUE=0 -DRIVER.SPI.VAR.SPI4_PHASE0.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT0_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI5_POLARITY1.VALUE=0 -DRIVER.SPI.VAR.SPI4_T2EDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI4_PHASE1.VALUE=0 -DRIVER.SPI.VAR.SPI5_POLARITY2.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT8_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI4_PHASE2.VALUE=0 -DRIVER.SPI.VAR.SPI3_BITERRLVL.VALUE=0 -DRIVER.SPI.VAR.SPI3_OVRNINTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI3_RXINTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI2_SHIFTDIR0.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT5_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI5_PORT_BIT26_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT18_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI5_POLARITY3.VALUE=0 -DRIVER.SPI.VAR.SPI4_PHASE3.VALUE=0 -DRIVER.SPI.VAR.SPI2_SHIFTDIR1.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT9_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI3_T2EDELAYACTUAL.VALUE=0.000 -DRIVER.SPI.VAR.SPI2_SHIFTDIR2.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT8_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI1_ACTUALBAUDRATE0.VALUE=1000.000 -DRIVER.SPI.VAR.SPI2_SHIFTDIR3.VALUE=0 -DRIVER.SPI.VAR.SPI1_ACTUALBAUDRATE1.VALUE=1000.000 -DRIVER.SPI.VAR.SPI4_PORT_BIT10_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT0_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT3_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI1_ACTUALBAUDRATE2.VALUE=1000.000 -DRIVER.SPI.VAR.SPI5_PORT_BIT11_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI1_ACTUALBAUDRATE3.VALUE=1000.000 -DRIVER.SPI.VAR.SPI5_PORT_BIT9_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT5_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI4_C2EDELAYACTUAL.VALUE=0.000 -DRIVER.SPI.VAR.SPI2_PORT_BIT2_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI3_BASE.VALUE=0xFFF7F800 -DRIVER.SPI.VAR.SPI3_PORT_BIT1_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI3_PORT_BIT8_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI4_PRESCALE0.VALUE=74 -DRIVER.SPI.VAR.SPI3_PORT_BIT8_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT4_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI3_WDELAY0.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT25_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT17_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI4_PRESCALE1.VALUE=74 -DRIVER.SPI.VAR.SPI3_C2EDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI3_WDELAY1.VALUE=0 -DRIVER.SPI.VAR.SPI4_PRESCALE2.VALUE=74 -DRIVER.SPI.VAR.SPI3_WDELAY2.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT3_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI4_PRESCALE3.VALUE=74 -DRIVER.SPI.VAR.SPI4_TIMEOUTENA.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI3_WDELAY3.VALUE=0 -DRIVER.SPI.VAR.SPI1_DLENERRENA.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT4_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT10_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT2_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI3_ENABLEHIGHZ.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT1_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI2_PARITYENA0.VALUE=0 -DRIVER.SPI.VAR.SPI5_C2TDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI2_PARITYENA1.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT8_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI5_TIMEOUTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI3_BASE_PORT.VALUE=0xFFF7F818 -DRIVER.SPI.VAR.SPI2_PORT_BIT10_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI2_PARITYENA2.VALUE=0 -DRIVER.SPI.VAR.SPI2_DLENERRLVL.VALUE=0 -DRIVER.SPI.VAR.SPI2_MASTER.VALUE=1 -DRIVER.SPI.VAR.SPI2_PARITYENA3.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT27_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT19_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT0_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT11_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT11_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI4_PORT_BIT1_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI1_RAM_PARITY_ENA.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT3_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI3_T2CDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI5_TXINTENA.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT3_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT9_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI3_BASE_RAM.VALUE=0xFF0C0000 -DRIVER.SPI.VAR.SPI3_CHARLEN0.VALUE=16 -DRIVER.SPI.VAR.SPI3_CHARLEN1.VALUE=16 -DRIVER.SPI.VAR.SPI1_PARERRENA.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT10_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT5_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT11_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI3_CHARLEN2.VALUE=16 -DRIVER.SPI.VAR.SPI2_PORT_BIT2_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI3_CHARLEN3.VALUE=16 -DRIVER.SPI.VAR.SPI5_PORT_BIT9_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT9_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI4_PORT_BIT0_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI3_PARERRLVL.VALUE=0 -DRIVER.SPI.VAR.SPI2_RXINTENA.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT9_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT2_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI3_PARPOL0.VALUE=0 -DRIVER.SPI.VAR.SPI1_DEYSNCLVL.VALUE=0 -DRIVER.SPI.VAR.SPI3_PARPOL1.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT8_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT10_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI3_PARPOL2.VALUE=0 -DRIVER.SPI.VAR.SPI2_T2CDELAYACTUAL.VALUE=13.333 -DRIVER.SPI.VAR.SPI4_BASE.VALUE=0xFFF7FA00 -DRIVER.SPI.VAR.SPI3_PARPOL3.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT2_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI5_PORT_BIT4_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT0_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI4_CLKMOD.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT5_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI3_BAUDRATE0.VALUE=1000.000 -DRIVER.SPI.VAR.SPI2_PHASE0.VALUE=0 -DRIVER.SPI.VAR.SPI3_BAUDRATE1.VALUE=1000.000 -DRIVER.SPI.VAR.SPI2_PHASE1.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT10_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT8_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT0_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI3_BAUDRATE2.VALUE=1000.000 -DRIVER.SPI.VAR.SPI2_PHASE2.VALUE=0 -DRIVER.SPI.VAR.SPI2_TXINTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI3_BAUDRATE3.VALUE=1000.000 -DRIVER.SPI.VAR.SPI2_PORT_BIT10_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI2_PHASE3.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT3_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT3_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT0_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT25_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI5_PORT_BIT17_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI4_PORT_BIT1_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT11_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI1_OVRNINTENA.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT1_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI3_POLARITY0.VALUE=0 -DRIVER.SPI.VAR.SPI3_POLARITY1.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT3_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI3_POLARITY2.VALUE=0 -DRIVER.SPI.VAR.SPI2_OVRNINTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT0_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI1_BITERRLVL.VALUE=0 -DRIVER.SPI.VAR.SPI4_DEYSNCENA.VALUE=0 -DRIVER.SPI.VAR.SPI3_POLARITY3.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT8_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT11_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI2_WDELAY0.VALUE=0 -DRIVER.SPI.VAR.SPI2_WDELAY1.VALUE=0 -DRIVER.SPI.VAR.SPI2_WDELAY2.VALUE=0 -DRIVER.SPI.VAR.SPI2_WDELAY3.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT1_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT10_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI3_C2TDELAYACTUAL.VALUE=26.667 -DRIVER.SPI.VAR.SPI5_PORT_BIT11_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT9_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT11_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT11_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI2_PRESCALE0.VALUE=74 -DRIVER.SPI.VAR.SPI2_PRESCALE1.VALUE=74 -DRIVER.SPI.VAR.SPI4_PORT_BIT2_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT8_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI2_PRESCALE2.VALUE=74 -DRIVER.SPI.VAR.SPI3_TIMEOUTENA.VALUE=0 -DRIVER.SPI.VAR.SPI2_PRESCALE3.VALUE=74 -DRIVER.SPI.VAR.SPI1_PORT_BIT8_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT0_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI1_PARITYENA0.VALUE=0 -DRIVER.SPI.VAR.SPI1_C2TDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI1_PARITYENA1.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT8_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI4_PORT_BIT4_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI4_TIMEOUTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT1_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI1_PARITYENA2.VALUE=0 -DRIVER.SPI.VAR.SPI1_DLENERRLVL.VALUE=0 -DRIVER.SPI.VAR.SPI1_BASE_PORT.VALUE=0xFFF7F418 -DRIVER.SPI.VAR.SPI5_RXINTENA.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT4_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI4_BITERRENA.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI1_PARITYENA3.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT9_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI4_T2EDELAYACTUAL.VALUE=0.000 -DRIVER.SPI.VAR.SPI2_PORT_BIT8_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI2_WAITENA0.VALUE=0 -DRIVER.SPI.VAR.SPI5_BASE.VALUE=0xFFF7FC00 -DRIVER.SPI.VAR.SPI2_WAITENA1.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT10_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI5_SHIFTDIR0.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT3_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI2_WAITENA2.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT10_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI5_SHIFTDIR1.VALUE=0 -DRIVER.SPI.VAR.SPI2_WAITENA3.VALUE=0 -DRIVER.SPI.VAR.SPI5_C2EDELAYACTUAL.VALUE=0.000 -DRIVER.SPI.VAR.SPI5_SHIFTDIR2.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT2_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI5_SHIFTDIR3.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT1_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI1_TXINTENA.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT8_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT4_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT1_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT26_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI5_PORT_BIT18_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI5_TXINTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT3_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT9_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI2_PARPOL0.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT0_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT9_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI2_PARPOL1.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT10_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT2_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT1_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI2_PARPOL2.VALUE=0 -DRIVER.SPI.VAR.SPI2_PARPOL3.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT5_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT2_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI1_PARERRLVL.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT2_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI2_CLKMOD.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT10_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI3_T2EDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT11_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI2_RXINTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT11_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI2_RAM_PARITY_ENA.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT3_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT11_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT0_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT8_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT9_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI1_BAUDRATE0.VALUE=1000.000 -DRIVER.SPI.VAR.SPI1_BAUDRATE1.VALUE=1000.000 -DRIVER.SPI.VAR.SPI4_PORT_BIT4_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT8_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI1_PORT_BIT1_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI1_BAUDRATE2.VALUE=1000.000 -DRIVER.SPI.VAR.SPI3_PORT_BIT4_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT25_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT17_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI1_BAUDRATE3.VALUE=1000.000 -DRIVER.SPI.VAR.SPI5_PORT_BIT11_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT2_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI1_WDELAY0.VALUE=0 -DRIVER.SPI.VAR.SPI2_C2EDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI1_WDELAY1.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT9_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI5_MASTER.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT10_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT3_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI1_WDELAY2.VALUE=0 -DRIVER.SPI.VAR.SPI4_PARERRENA.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT10_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI1_WDELAY3.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT9_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT8_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI1_C2EDELAYACTUAL.VALUE=0.000 -DRIVER.SPI.VAR.SPI1_POLARITY0.VALUE=0 -DRIVER.SPI.VAR.SPI4_C2TDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI1_POLARITY1.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT4_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI1_PORT_BIT25_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI1_PORT_BIT17_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI1_POLARITY2.VALUE=0 -DRIVER.SPI.VAR.SPI1_OVRNINTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI5_DLENERRENA.VALUE=0 -DRIVER.SPI.VAR.SPI2_DEYSNCENA.VALUE=0 -DRIVER.SPI.VAR.SPI1_POLARITY3.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT10_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI5_WAITENA0.VALUE=0 -DRIVER.SPI.VAR.SPI5_ENABLEHIGHZ.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT4_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI3_T2CDELAYACTUAL.VALUE=13.333 -DRIVER.SPI.VAR.SPI1_PORT_BIT1_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI5_WAITENA1.VALUE=0 -DRIVER.SPI.VAR.SPI5_WAITENA2.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT2_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI4_DEYSNCLVL.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT9_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI5_WAITENA3.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT9_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT5_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI4_ACTUALBAUDRATE0.VALUE=1000.000 -DRIVER.SPI.VAR.SPI1_PORT_BIT10_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT2_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI4_ACTUALBAUDRATE1.VALUE=1000.000 -DRIVER.SPI.VAR.SPI2_T2CDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT27_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI5_PORT_BIT19_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI5_PORT_BIT0_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI4_PORT_BIT5_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI4_ACTUALBAUDRATE2.VALUE=1000.000 -DRIVER.SPI.VAR.SPI1_PORT_BIT2_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT2_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI4_ACTUALBAUDRATE3.VALUE=1000.000 -DRIVER.SPI.VAR.SPI4_TXINTENA.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT3_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT3_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT0_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT0_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI2_BASE_RAM.VALUE=0xFF080000 -DRIVER.SPI.VAR.SPI2_CHARLEN0.VALUE=16 -DRIVER.SPI.VAR.SPI1_PORT_BIT11_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT4_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT11_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI2_CHARLEN1.VALUE=16 -DRIVER.SPI.VAR.SPI2_TIMEOUTENA.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT9_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI2_CHARLEN2.VALUE=16 -DRIVER.SPI.VAR.SPI2_ENABLEHIGHZ.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT11_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI2_CHARLEN3.VALUE=16 -DRIVER.SPI.VAR.SPI3_PORT_BIT0_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI3_TIMEOUTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI2_BITERRENA.VALUE=0 -DRIVER.SPI.VAR.SPI1_RXINTENA.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT11_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT5_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT2_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT10_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI5_RXINTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI4_BITERRLVL.VALUE=0 -DRIVER.SPI.VAR.SPI3_SHIFTDIR0.VALUE=0 -DRIVER.SPI.VAR.SPI1_PARPOL0.VALUE=0 -DRIVER.SPI.VAR.SPI3_SHIFTDIR1.VALUE=0 -DRIVER.SPI.VAR.SPI1_PARPOL1.VALUE=0 -DRIVER.SPI.VAR.SPI5_PHASE0.VALUE=0 -DRIVER.SPI.VAR.SPI4_C2TDELAYACTUAL.VALUE=26.667 -DRIVER.SPI.VAR.SPI3_SHIFTDIR2.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT8_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT11_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI1_PARPOL2.VALUE=0 -DRIVER.SPI.VAR.SPI5_PHASE1.VALUE=0 -DRIVER.SPI.VAR.SPI3_SHIFTDIR3.VALUE=0 -DRIVER.SPI.VAR.SPI1_PARPOL3.VALUE=0 -DRIVER.SPI.VAR.SPI5_PHASE2.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT9_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI1_PORT_BIT3_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT27_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT19_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI5_PHASE3.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT4_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT1_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT8_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT5_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI1_TXINTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI5_PRESCALE0.VALUE=74 -DRIVER.SPI.VAR.SPI1_PORT_BIT10_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI5_C2EDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI5_PRESCALE1.VALUE=74 -DRIVER.SPI.VAR.SPI5_PRESCALE2.VALUE=74 -DRIVER.SPI.VAR.SPI3_PORT_BIT5_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI3_PORT_BIT1_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI5_PRESCALE3.VALUE=74 -DRIVER.SPI.VAR.SPI3_PORT_BIT9_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI5_T2EDELAYACTUAL.VALUE=0.000 -DRIVER.SPI.VAR.SPI3_PORT_BIT8_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI2_ACTUALBAUDRATE0.VALUE=1000.000 -DRIVER.SPI.VAR.SPI1_PORT_BIT3_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI2_ACTUALBAUDRATE1.VALUE=1000.000 -DRIVER.SPI.VAR.SPI4_PORT_BIT3_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI4_BASE_PORT.VALUE=0xFFF7FA18 -DRIVER.SPI.VAR.SPI2_PORT_BIT10_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI2_ACTUALBAUDRATE2.VALUE=1000.000 -DRIVER.SPI.VAR.SPI1_PORT_BIT0_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI5_OVRNINTENA.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT2_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI2_ACTUALBAUDRATE3.VALUE=1000.000 -DRIVER.SPI.VAR.SPI2_PORT_BIT9_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT3_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT1_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI3_MASTER.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT4_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT4_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT5_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT1_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT2_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI5_T2CDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT9_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT0_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT11_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI5_BASE_RAM.VALUE=0xFF0A0000 -DRIVER.SPI.VAR.SPI5_CHARLEN0.VALUE=16 -DRIVER.SPI.VAR.SPI3_PORT_BIT10_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI3_PORT_BIT2_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI5_CHARLEN1.VALUE=16 -DRIVER.SPI.VAR.SPI2_PARERRENA.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT4_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI5_CHARLEN2.VALUE=16 -DRIVER.SPI.VAR.SPI1_PORT_BIT4_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI5_CHARLEN3.VALUE=16 -DRIVER.SPI.VAR.SPI5_PORT_BIT25_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT17_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT11_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI4_PARERRLVL.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT11_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI4_DLENERRENA.VALUE=0 -DRIVER.SPI.VAR.SPI4_RXINTENA.VALUE=0 -DRIVER.SPI.VAR.SPI3_RAM_PARITY_ENA.VALUE=0 -DRIVER.SPI.VAR.SPI5_PARITYENA0.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT0_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI1_WAITENA0.VALUE=0 -DRIVER.SPI.VAR.SPI5_PARITYENA1.VALUE=0 -DRIVER.SPI.VAR.SPI1_WAITENA1.VALUE=0 -DRIVER.SPI.VAR.SPI5_PARITYENA2.VALUE=0 -DRIVER.SPI.VAR.SPI5_DLENERRLVL.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT8_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI2_DEYSNCLVL.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT5_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI1_WAITENA2.VALUE=0 -DRIVER.SPI.VAR.SPI5_PARITYENA3.VALUE=0 -DRIVER.SPI.VAR.SPI1_WAITENA3.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT3_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT1_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT8_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI2_PORT_BIT9_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI4_BAUDRATE0.VALUE=1000.000 -DRIVER.SPI.VAR.SPI1_T2EDELAYACTUAL.VALUE=0.000 -DRIVER.SPI.VAR.SPI4_BAUDRATE1.VALUE=1000.000 -DRIVER.SPI.VAR.SPI4_BAUDRATE2.VALUE=1000.000 -DRIVER.SPI.VAR.SPI4_TXINTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT3_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT10_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT5_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI4_BAUDRATE3.VALUE=1000.000 -DRIVER.SPI.VAR.SPI2_PORT_BIT2_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI1_TIMEOUTENA.VALUE=0 -DRIVER.SPI.VAR.SPI5_CLKMOD.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT8_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT9_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI3_PHASE0.VALUE=0 -DRIVER.SPI.VAR.SPI2_C2EDELAYACTUAL.VALUE=0.000 -DRIVER.SPI.VAR.SPI1_PORT_BIT5_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI3_PHASE1.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_51_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_51_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_43_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_43_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_35_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_35_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_27_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_27_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_19_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_19_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_51_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_43_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_35_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_27_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_19_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_21_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_21_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_13_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_13_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_59_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_9_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_30_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_22_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_14_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_4_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_61_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_53_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_45_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_37_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_29_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_6_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_RAM_PARITY_ENA.VALUE=0x00000005 -DRIVER.CAN.VAR.CAN_1_MESSAGE_59_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_64_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_56_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_48_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_SYNC.VALUE=1 -DRIVER.CAN.VAR.CAN_4_MESSAGE_62_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_54_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_46_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_38_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_SHIFT.VALUE=0 -DRIVER.CAN.VAR.CAN_4_AUTO_BUS_ON.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_4_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_4_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_40_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_32_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_24_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_16_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_57_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_49_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_64_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_56_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_48_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_31_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_23_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_15_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_51_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_43_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_35_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_27_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_19_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_BAUDRATE.VALUE=500 -DRIVER.CAN.VAR.CAN_2_PORT_RX_PDR.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_63_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_55_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_47_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_39_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_30_ID.VALUE=30 -DRIVER.CAN.VAR.CAN_2_MESSAGE_22_ID.VALUE=22 -DRIVER.CAN.VAR.CAN_2_MESSAGE_14_ID.VALUE=14 -DRIVER.CAN.VAR.CAN_2_MESSAGE_9_ID.VALUE=9 -DRIVER.CAN.VAR.CAN_1_MESSAGE_57_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_49_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_60_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_52_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_44_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_36_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_28_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_RAMBASE.VALUE=0xFF1C0000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_30_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_22_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_14_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_51_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_43_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_35_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_27_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_19_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_9_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_PORT_RX_PULDIS.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_57_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_49_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_4_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_2_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_64_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_56_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_48_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_NOMINAL_BIT_RATE.VALUE=500.000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_51_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_43_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_35_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_27_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_19_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_1_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_57_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_51_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_49_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_43_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_35_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_27_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_19_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_10_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_5_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_64_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_64_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_56_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_56_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_48_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_48_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_40_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_32_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_24_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_16_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_9_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_60_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_52_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_50_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_44_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_42_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_36_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_34_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_28_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_26_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_18_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_60_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_58_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_52_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_44_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_36_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_28_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_PIN_MODE.VALUE=1 -DRIVER.CAN.VAR.CAN_2_PHASE_SEG.VALUE=4 -DRIVER.CAN.VAR.CAN_1_MESSAGE_30_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_22_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_20_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_14_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_12_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_31_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_23_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_15_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_7_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_51_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_43_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_35_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_31_ID.VALUE=31 -DRIVER.CAN.VAR.CAN_2_MESSAGE_27_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_23_ID.VALUE=23 -DRIVER.CAN.VAR.CAN_2_MESSAGE_19_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_15_ID.VALUE=15 -DRIVER.CAN.VAR.CAN_4_MESSAGE_1_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_NOMINAL_BIT_TIME.VALUE=15 -DRIVER.CAN.VAR.CAN_4_MESSAGE_60_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_60_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_52_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_52_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_51_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_44_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_44_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_43_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_36_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_36_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_35_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_28_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_28_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_27_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_19_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_9_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_30_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_30_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_22_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_22_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_21_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_14_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_14_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_13_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_AUTO_BUS_ON.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_60_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_52_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_44_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_36_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_28_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_63_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_55_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_47_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_39_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_31_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_23_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_15_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_10_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_5_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_PORT_TX_PULDIS.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_30_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_22_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_14_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_51_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_43_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_35_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_27_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_19_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_7_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_21_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_13_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_57_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_49_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_BASE.VALUE=0xFFF7DC00 -DRIVER.CAN.VAR.CAN_4_MESSAGE_9_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_40_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_32_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_24_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_16_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_10_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_10_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_5_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_5_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_6_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_40_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_32_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_24_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_16_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_11_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_1_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_8_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_3_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_3_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_10_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_4_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_21_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_13_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_64_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_56_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_48_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_40_ID.VALUE=40 -DRIVER.CAN.VAR.CAN_2_MESSAGE_32_ID.VALUE=32 -DRIVER.CAN.VAR.CAN_2_MESSAGE_24_ID.VALUE=24 -DRIVER.CAN.VAR.CAN_2_MESSAGE_16_ID.VALUE=16 -DRIVER.CAN.VAR.CAN_1_MESSAGE_1_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_61_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_53_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_45_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_37_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_29_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_31_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_23_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_15_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_1_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_1_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_21_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_13_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_6_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_6_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_IDENTIFIER_MODE.VALUE=0x40000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_57_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_49_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_11_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_57_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_49_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_40_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_32_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_24_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_16_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_3_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_60_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_52_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_44_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_36_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_28_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_11_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_6_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_PORT_RX_PULL.VALUE=1 -DRIVER.CAN.VAR.CAN_4_MESSAGE_40_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_32_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_24_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_16_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_57_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_57_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_49_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_49_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_6_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_PORT_TX_DIN.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_10_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_61_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_53_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_45_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_37_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_29_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_59_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_51_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_43_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_35_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_27_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_19_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_1_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_31_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_23_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_15_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_40_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_32_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_24_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_16_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_8_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_PORT_RX_PSL.VALUE=1 -DRIVER.CAN.VAR.CAN_2_MESSAGE_41_ID.VALUE=41 -DRIVER.CAN.VAR.CAN_2_MESSAGE_33_ID.VALUE=33 -DRIVER.CAN.VAR.CAN_2_MESSAGE_25_ID.VALUE=25 -DRIVER.CAN.VAR.CAN_2_MESSAGE_17_ID.VALUE=17 -DRIVER.CAN.VAR.CAN_1_MESSAGE_10_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_2_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_BRP_FREQ.VALUE=7.500 -DRIVER.CAN.VAR.CAN_4_MESSAGE_61_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_61_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_53_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_53_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_45_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_45_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_37_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_37_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_29_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_29_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_6_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_21_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_13_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_PORT_TX_DIR.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_31_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_31_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_23_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_23_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_15_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_15_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_3_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_21_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_13_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_5_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_11_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_6_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_4_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_PROP_SEG.VALUE=6 -DRIVER.CAN.VAR.CAN_3_MESSAGE_1_ID.VALUE=1 -DRIVER.CAN.VAR.CAN_2_MESSAGE_64_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_56_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_48_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_1_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_SYNC.VALUE=1 -DRIVER.CAN.VAR.CAN_3_MESSAGE_58_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_11_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_11_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_10_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_6_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_6_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_3_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_2_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_60_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_52_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_44_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_36_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_28_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_57_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_49_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_NOMINAL_BIT_RATE.VALUE=500.000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_64_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_56_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_48_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_64_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_56_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_48_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_57_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_50_ID.VALUE=50 -DRIVER.CAN.VAR.CAN_2_MESSAGE_49_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_42_ID.VALUE=42 -DRIVER.CAN.VAR.CAN_2_MESSAGE_34_ID.VALUE=34 -DRIVER.CAN.VAR.CAN_2_MESSAGE_26_ID.VALUE=26 -DRIVER.CAN.VAR.CAN_2_MESSAGE_18_ID.VALUE=18 -DRIVER.CAN.VAR.CAN_1_MESSAGE_50_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_42_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_34_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_26_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_18_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_62_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_54_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_46_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_38_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_PROPAGATION_DELAY.VALUE=700 -DRIVER.CAN.VAR.CAN_1_MESSAGE_40_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_32_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_24_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_16_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_21_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_13_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_2_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_2_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_3_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_58_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_BAUDRATE.VALUE=500 -DRIVER.CAN.VAR.CAN_3_MESSAGE_58_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_50_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_42_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_34_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_26_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_18_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_60_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_57_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_52_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_49_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_44_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_36_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_28_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_10_ID.VALUE=10 -DRIVER.CAN.VAR.CAN_4_MESSAGE_9_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_61_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_53_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_50_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_45_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_42_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_37_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_34_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_29_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_26_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_18_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_2_ID.VALUE=2 -DRIVER.CAN.VAR.CAN_1_MESSAGE_6_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_NOMINAL_BIT_TIME.VALUE=15 -DRIVER.CAN.VAR.CAN_2_MESSAGE_20_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_12_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_7_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_3_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_58_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_58_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_10_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_SAMPLE_POINT.VALUE=73.333 -DRIVER.CAN.VAR.CAN_4_MESSAGE_62_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_54_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_46_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_38_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_8_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_7_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_61_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_53_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_45_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_37_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_29_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_21_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_20_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_13_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_12_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_40_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_32_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_24_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_16_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_5_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_4_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_41_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_33_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_25_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_17_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_9_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_51_ID.VALUE=51 -DRIVER.CAN.VAR.CAN_2_MESSAGE_43_ID.VALUE=43 -DRIVER.CAN.VAR.CAN_2_MESSAGE_35_ID.VALUE=35 -DRIVER.CAN.VAR.CAN_2_MESSAGE_27_ID.VALUE=27 -DRIVER.CAN.VAR.CAN_2_MESSAGE_20_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_19_ID.VALUE=19 -DRIVER.CAN.VAR.CAN_2_MESSAGE_12_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_3_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_11_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_3_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_62_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_62_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_54_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_54_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_46_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_46_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_38_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_38_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_40_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_40_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_32_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_32_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_24_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_24_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_16_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_16_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_64_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_56_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_48_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_40_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_32_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_24_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_20_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_16_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_12_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_7_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_50_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_42_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_34_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_26_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_18_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_20_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_12_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_11_ID.VALUE=11 -DRIVER.CAN.VAR.CAN_3_MESSAGE_3_ID.VALUE=3 -DRIVER.CAN.VAR.CAN_2_PORT_RX_DOUT.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_2_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_59_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_BASE.VALUE=0xFFF7DE00 -DRIVER.CAN.VAR.CAN_1_RAMBASE.VALUE=0xFF1E0000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_10_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_20_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_20_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_12_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_12_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_7_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_7_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_PORT_RX_PULL.VALUE=2 -DRIVER.CAN.VAR.CAN_4_MESSAGE_63_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_55_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_47_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_41_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_39_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_33_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_25_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_17_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_3_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_1_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_9_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_IDENTIFIER_MODE.VALUE=0x40000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_41_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_33_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_25_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_17_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_11_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_60_ID.VALUE=60 -DRIVER.CAN.VAR.CAN_2_MESSAGE_58_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_52_ID.VALUE=52 -DRIVER.CAN.VAR.CAN_2_MESSAGE_44_ID.VALUE=44 -DRIVER.CAN.VAR.CAN_2_MESSAGE_36_ID.VALUE=36 -DRIVER.CAN.VAR.CAN_2_MESSAGE_28_ID.VALUE=28 -DRIVER.CAN.VAR.CAN_4_MESSAGE_63_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_55_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_47_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_39_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_41_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_33_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_25_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_17_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_PORT_RX_DIN.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_3_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_3_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_41_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_33_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_25_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_17_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_7_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_59_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_20_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_12_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_9_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_11_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_6_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_11_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_4_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_20_ID.VALUE=20 -DRIVER.CAN.VAR.CAN_4_MESSAGE_12_ID.VALUE=12 -DRIVER.CAN.VAR.CAN_3_MESSAGE_62_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_54_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_46_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_38_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_4_ID.VALUE=4 -DRIVER.CAN.VAR.CAN_1_MESSAGE_63_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_55_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_47_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_39_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_21_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_13_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_8_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_PORT_RX_DIR.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_59_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_59_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_AUTO_RETRANSMISSION.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_PORT_TX_FUN.VALUE=1 -DRIVER.CAN.VAR.CAN_1_MESSAGE_59_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_63_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_55_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_47_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_39_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_62_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_54_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_46_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_38_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_2_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_41_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_33_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_25_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_17_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_PORT_TX_DOUT.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_50_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_42_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_34_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_26_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_18_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_AUTO_BUS_ON_TR.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_63_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_55_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_47_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_39_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_61_ID.VALUE=61 -DRIVER.CAN.VAR.CAN_2_MESSAGE_53_ID.VALUE=53 -DRIVER.CAN.VAR.CAN_2_MESSAGE_45_ID.VALUE=45 -DRIVER.CAN.VAR.CAN_2_MESSAGE_37_ID.VALUE=37 -DRIVER.CAN.VAR.CAN_2_MESSAGE_29_ID.VALUE=29 -DRIVER.CAN.VAR.CAN_1_MESSAGE_20_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_12_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_4_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_1_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_63_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_63_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_55_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_55_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_47_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_47_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_39_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_39_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_PORT_TX_PULL.VALUE=2 -DRIVER.CAN.VAR.CAN_1_MESSAGE_41_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_41_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_33_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_33_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_25_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_25_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_17_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_17_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_10_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_62_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_54_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_46_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_38_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_2_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_21_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_13_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_8_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_NOMINAL_BIT_RATE.VALUE=500.000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_21_ID.VALUE=21 -DRIVER.CAN.VAR.CAN_4_MESSAGE_13_ID.VALUE=13 -DRIVER.CAN.VAR.CAN_3_MESSAGE_5_ID.VALUE=5 -DRIVER.CAN.VAR.CAN_2_MESSAGE_41_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_33_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_25_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_17_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_8_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_3_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_BRPE_FREQ.VALUE=7.500 -DRIVER.CAN.VAR.CAN_2_MESSAGE_59_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_21_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_21_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_13_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_13_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_8_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_8_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_PORT_RX_DIN.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_40_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_32_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_24_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_16_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_4_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_PROP_SEG.VALUE=6 -DRIVER.CAN.VAR.CAN_3_MESSAGE_8_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_58_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_31_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_23_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_15_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_RAM_PARITY_ENA.VALUE=0x00000005 -DRIVER.CAN.VAR.CAN_1_MESSAGE_10_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_1_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_41_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_33_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_25_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_17_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_5_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_PORT_TX_PDR.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_62_ID.VALUE=62 -DRIVER.CAN.VAR.CAN_2_MESSAGE_59_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_54_ID.VALUE=54 -DRIVER.CAN.VAR.CAN_2_MESSAGE_46_ID.VALUE=46 -DRIVER.CAN.VAR.CAN_2_MESSAGE_38_ID.VALUE=38 -DRIVER.CAN.VAR.CAN_1_MESSAGE_11_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_64_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_56_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_48_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_NOMINAL_BIT_TIME.VALUE=15 -DRIVER.CAN.VAR.CAN_1_MESSAGE_50_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_42_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_34_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_26_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_18_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_4_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_4_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_PORT_RX_DIR.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_64_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_56_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_48_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_1_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_1_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_59_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_58_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_61_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_59_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_53_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_45_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_37_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_29_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_TQ.VALUE=133.333 -DRIVER.CAN.VAR.CAN_4_MESSAGE_30_ID.VALUE=30 -DRIVER.CAN.VAR.CAN_4_MESSAGE_22_ID.VALUE=22 -DRIVER.CAN.VAR.CAN_4_MESSAGE_14_ID.VALUE=14 -DRIVER.CAN.VAR.CAN_4_MESSAGE_2_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_63_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_55_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_47_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_39_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_11_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_6_ID.VALUE=6 -DRIVER.CAN.VAR.CAN_2_MESSAGE_30_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_22_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_14_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_9_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_59_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_64_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_56_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_48_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_62_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_54_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_46_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_38_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_61_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_53_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_45_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_37_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_29_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_3_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_50_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_42_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_34_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_26_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_18_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_51_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_43_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_35_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_27_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_19_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_63_ID.VALUE=63 -DRIVER.CAN.VAR.CAN_2_MESSAGE_55_ID.VALUE=55 -DRIVER.CAN.VAR.CAN_2_MESSAGE_47_ID.VALUE=47 -DRIVER.CAN.VAR.CAN_2_MESSAGE_39_ID.VALUE=39 -DRIVER.CAN.VAR.CAN_1_MESSAGE_21_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_13_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_5_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_10_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_2_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_64_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_64_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_56_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_56_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_48_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_48_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_64_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_56_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_48_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_50_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_50_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_42_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_42_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_34_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_34_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_26_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_26_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_18_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_18_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_51_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_43_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_35_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_31_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_27_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_23_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_19_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_15_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_41_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_33_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_30_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_25_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_22_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_17_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_14_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_9_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_TQ.VALUE=133.333 -DRIVER.CAN.VAR.CAN_1_MESSAGE_7_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_BRPE.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_31_ID.VALUE=31 -DRIVER.CAN.VAR.CAN_4_MESSAGE_23_ID.VALUE=23 -DRIVER.CAN.VAR.CAN_4_MESSAGE_15_ID.VALUE=15 -DRIVER.CAN.VAR.CAN_3_MESSAGE_7_ID.VALUE=7 -DRIVER.CAN.VAR.CAN_2_MESSAGE_4_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_BASE.VALUE=0xFFF7E000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_59_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_30_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_30_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_22_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_22_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_14_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_14_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_9_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_9_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_61_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_53_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_45_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_37_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_29_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_50_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_42_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_34_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_26_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_18_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_5_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_10_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_1_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_PORT_TX_PULDIS.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_64_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_56_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_48_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_20_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_12_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_2_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_64_ID.VALUE=64 -DRIVER.CAN.VAR.CAN_2_MESSAGE_62_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_56_ID.VALUE=56 -DRIVER.CAN.VAR.CAN_2_MESSAGE_54_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_48_ID.VALUE=48 -DRIVER.CAN.VAR.CAN_2_MESSAGE_46_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_38_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_PORT_TX_DOUT.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_57_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_49_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_51_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_43_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_35_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_27_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_19_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_PORT_RX_FUN.VALUE=1 -DRIVER.CAN.VAR.CAN_4_MESSAGE_5_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_5_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_64_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_56_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_48_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_10_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_10_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_2_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_2_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_58_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_8_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_7_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_21_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_20_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_13_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_12_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_TQ.VALUE=133.333 -DRIVER.CAN.VAR.CAN_1_MESSAGE_60_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_52_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_44_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_36_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_28_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_5_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_4_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_62_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_54_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_46_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_40_ID.VALUE=40 -DRIVER.CAN.VAR.CAN_4_MESSAGE_38_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_32_ID.VALUE=32 -DRIVER.CAN.VAR.CAN_4_MESSAGE_24_ID.VALUE=24 -DRIVER.CAN.VAR.CAN_4_MESSAGE_16_ID.VALUE=16 -DRIVER.CAN.VAR.CAN_3_MESSAGE_64_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_56_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_48_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_8_ID.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_40_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_32_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_24_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_16_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_10_ID.VALUE=10 -DRIVER.CAN.VAR.CAN_2_MESSAGE_31_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_23_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_15_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_61_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_53_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_45_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_37_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_29_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_63_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_57_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_55_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_49_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_47_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_39_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_30_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_22_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_14_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_9_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_3_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_51_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_43_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_41_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_35_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_33_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_27_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_25_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_19_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_17_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_60_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_52_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_44_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_36_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_28_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_7_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_40_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_32_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_24_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_16_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_PORT_TX_PSL.VALUE=1 -DRIVER.CAN.VAR.CAN_2_MESSAGE_57_ID.VALUE=57 -DRIVER.CAN.VAR.CAN_2_MESSAGE_49_ID.VALUE=49 -DRIVER.CAN.VAR.CAN_1_MESSAGE_30_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_22_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_14_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_4_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_6_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_11_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_3_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_SAMPLE_POINT_REFERENCE.VALUE=75 -DRIVER.CAN.VAR.CAN_1_PROPAGATION_DELAY.VALUE=700 -DRIVER.CAN.VAR.CAN_4_MESSAGE_64_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_57_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_57_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_56_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_49_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_49_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_48_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_51_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_51_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_50_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_43_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_43_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_42_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_35_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_35_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_34_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_27_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_27_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_26_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_19_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_19_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_18_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_3_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_TQ.VALUE=133.333 -DRIVER.CAN.VAR.CAN_3_MESSAGE_1_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_31_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_23_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_15_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_PORT_RX_PDR.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_41_ID.VALUE=41 -DRIVER.CAN.VAR.CAN_4_MESSAGE_33_ID.VALUE=33 -DRIVER.CAN.VAR.CAN_4_MESSAGE_25_ID.VALUE=25 -DRIVER.CAN.VAR.CAN_4_MESSAGE_17_ID.VALUE=17 -DRIVER.CAN.VAR.CAN_3_MESSAGE_9_ID.VALUE=9 -DRIVER.CAN.VAR.CAN_2_MESSAGE_10_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_10_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_5_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_1_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_11_ID.VALUE=11 -DRIVER.CAN.VAR.CAN_1_NOMINAL_BIT_TIME.VALUE=15 -DRIVER.CAN.VAR.CAN_3_MESSAGE_61_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_53_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_45_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_37_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_29_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_31_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_31_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_23_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_23_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_15_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_15_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_PORT_RX_FUN.VALUE=1 -DRIVER.CAN.VAR.CAN_4_MESSAGE_40_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_32_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_24_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_16_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_6_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_57_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_49_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_11_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_8_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_ENABLE.VALUE=1 -DRIVER.CAN.VAR.CAN_2_MESSAGE_59_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_10_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_3_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_PIN_MODE.VALUE=1 -DRIVER.CAN.VAR.CAN_4_MESSAGE_10_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_1_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_58_ID.VALUE=58 -DRIVER.CAN.VAR.CAN_4_MESSAGE_58_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_SAMPLE_POINT_REFERENCE.VALUE=75 -DRIVER.CAN.VAR.CAN_1_MESSAGE_60_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_52_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_44_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_36_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_28_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_6_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_6_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_11_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_11_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_50_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_42_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_34_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_26_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_18_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_3_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_3_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_51_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_43_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_35_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_27_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_19_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_61_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_53_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_45_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_37_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_29_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_PORT_RX_PULDIS.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_62_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_54_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_46_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_38_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_21_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_13_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_50_ID.VALUE=50 -DRIVER.CAN.VAR.CAN_4_MESSAGE_42_ID.VALUE=42 -DRIVER.CAN.VAR.CAN_4_MESSAGE_34_ID.VALUE=34 -DRIVER.CAN.VAR.CAN_4_MESSAGE_26_ID.VALUE=26 -DRIVER.CAN.VAR.CAN_4_MESSAGE_18_ID.VALUE=18 -DRIVER.CAN.VAR.CAN_3_MESSAGE_57_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_49_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_59_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_20_ID.VALUE=20 -DRIVER.CAN.VAR.CAN_1_MESSAGE_12_ID.VALUE=12 -DRIVER.CAN.VAR.CAN_2_MESSAGE_40_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_32_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_24_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_16_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_61_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_53_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_45_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_37_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_29_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_AUTO_BUS_ON.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_31_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_23_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_15_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_58_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_63_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_55_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_47_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_39_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_1_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_2_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_60_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_52_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_44_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_36_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_28_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_61_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_59_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_53_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_45_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_37_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_29_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_59_ID.VALUE=59 -DRIVER.CAN.VAR.CAN_1_PORT_RX_PDR.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_61_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_53_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_45_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_37_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_31_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_29_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_23_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_15_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_7_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_20_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_12_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_SAMPLE_POINT_REFERENCE.VALUE=75 -DRIVER.CAN.VAR.CAN_1_MESSAGE_4_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_58_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_58_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_50_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_42_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_34_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_26_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_18_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_60_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_60_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_52_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_52_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_44_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_44_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_36_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_36_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_28_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_28_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_8_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_SHIFT.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_64_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_56_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_50_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_48_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_42_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_40_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_34_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_32_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_30_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_26_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_24_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_22_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_18_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_16_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_14_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_9_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_BRPE.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MASK.VALUE=0x1FFFFFFF -DRIVER.CAN.VAR.CAN_4_MESSAGE_51_ID.VALUE=51 -DRIVER.CAN.VAR.CAN_4_MESSAGE_43_ID.VALUE=43 -DRIVER.CAN.VAR.CAN_4_MESSAGE_35_ID.VALUE=35 -DRIVER.CAN.VAR.CAN_4_MESSAGE_27_ID.VALUE=27 -DRIVER.CAN.VAR.CAN_4_MESSAGE_19_ID.VALUE=19 -DRIVER.CAN.VAR.CAN_3_MESSAGE_61_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_53_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_45_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_37_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_29_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_11_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_6_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_21_ID.VALUE=21 -DRIVER.CAN.VAR.CAN_1_MESSAGE_13_ID.VALUE=13 -DRIVER.CAN.VAR.CAN_1_MESSAGE_9_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_BASE.VALUE=0xFFF7E200 -DRIVER.CAN.VAR.CAN_2_MESSAGE_40_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_40_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_32_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_32_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_31_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_24_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_24_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_23_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_16_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_16_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_15_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_8_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_51_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_43_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_35_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_27_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_19_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_7_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_57_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_50_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_49_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_42_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_34_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_26_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_20_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_18_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_12_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_21_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_13_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_4_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_2_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_31_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_23_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_15_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_6_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_59_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_SAMPLE_POINT_REFERENCE.VALUE=75 -DRIVER.CAN.VAR.CAN_1_MESSAGE_61_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_53_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_45_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_37_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_29_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_BRPE_FREQ.VALUE=7.500 -DRIVER.CAN.VAR.CAN_1_BRP_FREQ.VALUE=7.500 -DRIVER.CAN.VAR.CAN_4_PORT_TX_DIN.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_50_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_42_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_34_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_26_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_18_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_7_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_7_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_20_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_20_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_12_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_12_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_8_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_20_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_12_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_4_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_4_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_20_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_12_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_9_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_30_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_22_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_14_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_4_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_2_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_6_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_PORT_RX_PSL.VALUE=1 -DRIVER.CAN.VAR.CAN_4_MESSAGE_60_ID.VALUE=60 -DRIVER.CAN.VAR.CAN_4_MESSAGE_52_ID.VALUE=52 -DRIVER.CAN.VAR.CAN_4_MESSAGE_44_ID.VALUE=44 -DRIVER.CAN.VAR.CAN_4_MESSAGE_36_ID.VALUE=36 -DRIVER.CAN.VAR.CAN_4_MESSAGE_31_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_28_ID.VALUE=28 -DRIVER.CAN.VAR.CAN_4_MESSAGE_23_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_15_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_58_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_3_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_30_ID.VALUE=30 -DRIVER.CAN.VAR.CAN_1_MESSAGE_22_ID.VALUE=22 -DRIVER.CAN.VAR.CAN_1_MESSAGE_14_ID.VALUE=14 -DRIVER.CAN.VAR.CAN_2_MESSAGE_41_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_33_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_25_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_17_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_PORT_TX_DIR.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_8_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_31_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_23_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_15_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_5_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_59_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_50_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_42_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_34_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_26_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_18_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_4_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_63_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_61_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_55_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_53_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_47_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_45_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_39_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_37_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_29_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_62_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_54_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_46_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_38_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_1_ID.VALUE=1 -DRIVER.CAN.VAR.CAN_1_MESSAGE_40_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_32_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_24_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_16_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_8_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_21_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_13_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_5_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_59_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_59_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_20_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_12_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_5_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_61_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_61_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_53_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_53_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_45_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_45_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_37_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_37_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_29_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_29_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_10_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_2_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_BAUDRATE.VALUE=500 -DRIVER.CAN.VAR.CAN_2_MESSAGE_41_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_41_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_33_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_33_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_25_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_25_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_17_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_17_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_63_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_55_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_47_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_39_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_61_ID.VALUE=61 -DRIVER.CAN.VAR.CAN_4_MESSAGE_53_ID.VALUE=53 -DRIVER.CAN.VAR.CAN_4_MESSAGE_45_ID.VALUE=45 -DRIVER.CAN.VAR.CAN_4_MESSAGE_37_ID.VALUE=37 -DRIVER.CAN.VAR.CAN_4_MESSAGE_29_ID.VALUE=29 -DRIVER.CAN.VAR.CAN_2_MESSAGE_20_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_12_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_7_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_58_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_31_ID.VALUE=31 -DRIVER.CAN.VAR.CAN_1_MESSAGE_23_ID.VALUE=23 -DRIVER.CAN.VAR.CAN_1_MESSAGE_15_ID.VALUE=15 -DRIVER.CAN.VAR.CAN_3_MESSAGE_1_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_31_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_23_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_15_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_5_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_41_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_41_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_33_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_33_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_25_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_25_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_17_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_17_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_PORT_TX_DIN.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_8_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_6_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_6_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_21_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_13_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_11_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_11_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_5_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_3_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_3_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_3_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_2_ID.VALUE=2 -DRIVER.CAN.VAR.CAN_3_MESSAGE_58_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_PORT_RX_PSL.VALUE=1 -DRIVER.CAN.VAR.CAN_4_AUTO_BUS_ON_TIME.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_62_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_54_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_46_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_38_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_8_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_8_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_5_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_AUTO_RETRANSMISSION.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_21_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_21_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_20_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_13_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_13_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_12_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_SAMPLE_POINT.VALUE=73.333 -DRIVER.CAN.VAR.CAN_1_PORT_TX_DIR.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_5_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_5_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_2_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_62_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_54_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_46_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_38_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_PIN_MODE.VALUE=1 -DRIVER.CAN.VAR.CAN_3_MESSAGE_1_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_RAM_PARITY_ENA.VALUE=0x00000005 -DRIVER.CAN.VAR.CAN_3_PHASE_SEG.VALUE=4 -DRIVER.CAN.VAR.CAN_1_MESSAGE_63_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_55_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_47_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_40_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_39_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_32_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_24_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_16_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_62_ID.VALUE=62 -DRIVER.CAN.VAR.CAN_4_MESSAGE_54_ID.VALUE=54 -DRIVER.CAN.VAR.CAN_4_MESSAGE_46_ID.VALUE=46 -DRIVER.CAN.VAR.CAN_4_MESSAGE_38_ID.VALUE=38 -DRIVER.CAN.VAR.CAN_3_MESSAGE_59_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_60_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_52_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_44_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_36_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_28_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_40_ID.VALUE=40 -DRIVER.CAN.VAR.CAN_1_MESSAGE_32_ID.VALUE=32 -DRIVER.CAN.VAR.CAN_1_MESSAGE_24_ID.VALUE=24 -DRIVER.CAN.VAR.CAN_1_MESSAGE_16_ID.VALUE=16 -DRIVER.CAN.VAR.CAN_2_MESSAGE_50_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_42_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_34_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_26_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_18_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_1_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_1_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_2_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_62_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_54_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_46_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_38_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_64_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_56_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_48_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_59_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_62_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_54_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_46_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_40_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_38_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_32_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_24_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_16_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_63_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_60_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_55_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_52_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_47_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_44_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_39_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_36_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_28_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_3_ID.VALUE=3 -DRIVER.CAN.VAR.CAN_3_PORT_RX_DOUT.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_8_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_41_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_33_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_30_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_25_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_22_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_17_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_14_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_9_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_30_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_22_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_14_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_6_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_20_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_12_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_2_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_PORT_RX_PULL.VALUE=2 -DRIVER.CAN.VAR.CAN_1_MESSAGE_62_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_62_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_54_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_54_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_46_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_46_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_38_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_38_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_31_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_23_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_15_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_7_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_BRPE.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_51_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_50_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_43_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_42_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_35_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_34_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_27_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_26_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_19_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_18_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_10_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_5_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MASK.VALUE=0x1FFFFFFF -DRIVER.CAN.VAR.CAN_4_MESSAGE_63_ID.VALUE=63 -DRIVER.CAN.VAR.CAN_4_MESSAGE_55_ID.VALUE=55 -DRIVER.CAN.VAR.CAN_4_MESSAGE_47_ID.VALUE=47 -DRIVER.CAN.VAR.CAN_4_MESSAGE_39_ID.VALUE=39 -DRIVER.CAN.VAR.CAN_4_MESSAGE_5_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_30_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_22_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_14_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_21_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_13_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_8_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_41_ID.VALUE=41 -DRIVER.CAN.VAR.CAN_1_MESSAGE_33_ID.VALUE=33 -DRIVER.CAN.VAR.CAN_1_MESSAGE_25_ID.VALUE=25 -DRIVER.CAN.VAR.CAN_1_MESSAGE_17_ID.VALUE=17 -DRIVER.CAN.VAR.CAN_1_MESSAGE_2_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_10_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_2_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_2_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_50_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_50_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_42_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_42_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_34_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_34_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_26_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_26_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_18_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_18_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_60_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_52_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_44_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_36_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_28_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_9_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_30_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_22_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_14_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_60_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_59_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_52_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_44_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_36_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_28_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_30_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_22_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_14_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_6_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_4_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_4_ID.VALUE=4 -DRIVER.CAN.VAR.CAN_1_MESSAGE_1_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_1_ID.VALUE=1 -DRIVER.CAN.VAR.CAN_1_MESSAGE_63_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_55_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_47_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_39_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_PORT_TX_FUN.VALUE=1 -DRIVER.CAN.VAR.CAN_4_MESSAGE_9_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_9_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_30_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_30_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_22_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_22_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_14_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_14_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_6_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_6_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_10_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_PORT_TX_PULDIS.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_61_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_53_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_45_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_37_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_31_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_29_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_23_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_15_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_2_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_7_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_64_ID.VALUE=64 -DRIVER.CAN.VAR.CAN_4_MESSAGE_56_ID.VALUE=56 -DRIVER.CAN.VAR.CAN_4_MESSAGE_48_ID.VALUE=48 -DRIVER.CAN.VAR.CAN_1_MESSAGE_50_ID.VALUE=50 -DRIVER.CAN.VAR.CAN_1_MESSAGE_42_ID.VALUE=42 -DRIVER.CAN.VAR.CAN_1_MESSAGE_34_ID.VALUE=34 -DRIVER.CAN.VAR.CAN_1_MESSAGE_26_ID.VALUE=26 -DRIVER.CAN.VAR.CAN_1_MESSAGE_18_ID.VALUE=18 -DRIVER.CAN.VAR.CAN_4_BRP_FREQ.VALUE=7.500 -DRIVER.CAN.VAR.CAN_2_MESSAGE_51_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_43_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_35_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_27_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_19_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_PORT_TX_PULL.VALUE=2 -DRIVER.CAN.VAR.CAN_4_MESSAGE_10_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_10_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_2_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_2_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_BRP.VALUE=9 -DRIVER.CAN.VAR.CAN_4_MESSAGE_31_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_23_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_15_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_7_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_PROP_SEG.VALUE=6 -DRIVER.CAN.VAR.CAN_2_MESSAGE_21_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_13_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_10_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_8_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_5_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_63_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_55_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_47_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_39_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_64_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_56_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_48_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_5_ID.VALUE=5 -DRIVER.CAN.VAR.CAN_3_MESSAGE_10_ID.VALUE=10 -DRIVER.CAN.VAR.CAN_2_MESSAGE_57_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_49_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_50_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_42_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_34_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_26_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_18_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_2_ID.VALUE=2 -DRIVER.CAN.VAR.CAN_1_AUTO_BUS_ON_TR.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_31_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_23_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_15_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_7_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_PORT_RX_DIN.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_63_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_63_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_55_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_55_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_47_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_47_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_39_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_39_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_11_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_64_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_56_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_48_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_3_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_51_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_43_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_35_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_27_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_19_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_58_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_PORT_TX_PDR.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_57_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_57_ID.VALUE=57 -DRIVER.CAN.VAR.CAN_4_MESSAGE_49_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_49_ID.VALUE=49 -DRIVER.CAN.VAR.CAN_2_MESSAGE_30_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_22_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_14_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_9_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_51_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_51_ID.VALUE=51 -DRIVER.CAN.VAR.CAN_1_MESSAGE_43_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_43_ID.VALUE=43 -DRIVER.CAN.VAR.CAN_1_MESSAGE_35_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_35_ID.VALUE=35 -DRIVER.CAN.VAR.CAN_1_MESSAGE_27_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_27_ID.VALUE=27 -DRIVER.CAN.VAR.CAN_1_MESSAGE_19_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_19_ID.VALUE=19 -DRIVER.CAN.VAR.CAN_4_MESSAGE_11_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_3_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_AUTO_BUS_ON_TIME.VALUE=0 -DRIVER.CAN.VAR.CAN_3_PORT_RX_DIR.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_51_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_51_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_43_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_43_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_35_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_35_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_27_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_27_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_19_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_19_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_PORT_TX_FUN.VALUE=1 -DRIVER.CAN.VAR.CAN_1_MESSAGE_58_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_1_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_31_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_23_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_15_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_60_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_52_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_44_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_36_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_28_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_1_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_7_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_6_ID.VALUE=6 -DRIVER.CAN.VAR.CAN_4_MESSAGE_5_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_51_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_43_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_35_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_27_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_19_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_11_ID.VALUE=11 -DRIVER.CAN.VAR.CAN_3_MESSAGE_10_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_7_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_3_ID.VALUE=3 -DRIVER.CAN.VAR.CAN_1_MESSAGE_2_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_64_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_56_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_48_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_31_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_31_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_23_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_23_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_15_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_15_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_7_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_7_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_11_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_9_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_41_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_33_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_30_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_25_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_22_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_17_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_14_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_3_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_64_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_56_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_48_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_9_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_6_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_58_ID.VALUE=58 -DRIVER.CAN.VAR.CAN_2_MESSAGE_21_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_13_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_4_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_60_ID.VALUE=60 -DRIVER.CAN.VAR.CAN_1_MESSAGE_52_ID.VALUE=52 -DRIVER.CAN.VAR.CAN_1_MESSAGE_44_ID.VALUE=44 -DRIVER.CAN.VAR.CAN_1_MESSAGE_36_ID.VALUE=36 -DRIVER.CAN.VAR.CAN_1_MESSAGE_28_ID.VALUE=28 -DRIVER.CAN.VAR.CAN_2_MESSAGE_60_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_52_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_44_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_36_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_28_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_11_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_11_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_3_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_3_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_58_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_BRP.VALUE=9 -DRIVER.CAN.VAR.CAN_3_MESSAGE_57_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_49_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_PORT_RX_PULDIS.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_64_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_62_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_56_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_54_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_48_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_46_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_38_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_57_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_49_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_21_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_13_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_7_ID.VALUE=7 -DRIVER.CAN.VAR.CAN_3_MESSAGE_20_ID.VALUE=20 -DRIVER.CAN.VAR.CAN_3_MESSAGE_12_ID.VALUE=12 -DRIVER.CAN.VAR.CAN_3_MESSAGE_1_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_PORT_TX_PDR.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_51_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_43_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_35_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_27_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_19_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_4_ID.VALUE=4 -DRIVER.CAN.VAR.CAN_3_MESSAGE_40_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_32_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_24_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_16_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_8_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_NOMINAL_AUTO_BUS_ON_TIME.VALUE=0.000 -DRIVER.CAN.VAR.CAN_2_SHIFT.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_64_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_64_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_63_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_56_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_56_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_55_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_48_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_48_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_47_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_39_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_57_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_49_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_5_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_BRPE.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_10_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MASK.VALUE=0x1FFFFFFF -DRIVER.CAN.VAR.CAN_2_MESSAGE_60_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_60_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_52_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_52_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_44_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_44_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_36_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_36_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_28_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_28_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_51_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_43_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_35_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_27_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_19_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_2_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_59_ID.VALUE=59 -DRIVER.CAN.VAR.CAN_2_PORT_TX_DOUT.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_31_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_23_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_15_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_61_ID.VALUE=61 -DRIVER.CAN.VAR.CAN_1_MESSAGE_53_ID.VALUE=53 -DRIVER.CAN.VAR.CAN_1_MESSAGE_45_ID.VALUE=45 -DRIVER.CAN.VAR.CAN_1_MESSAGE_37_ID.VALUE=37 -DRIVER.CAN.VAR.CAN_1_MESSAGE_29_ID.VALUE=29 -DRIVER.CAN.VAR.CAN_4_MESSAGE_20_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_12_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_4_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_58_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_60_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_60_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_52_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_52_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_44_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_44_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_36_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_36_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_28_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_28_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_PORT_TX_PULL.VALUE=2 -DRIVER.CAN.VAR.CAN_4_MESSAGE_61_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_61_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_53_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_53_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_45_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_45_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_37_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_37_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_29_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_29_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_40_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_32_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_24_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_16_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_21_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_13_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_8_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_31_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_31_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_23_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_23_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_15_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_15_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_8_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_8_ID.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_6_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_21_ID.VALUE=21 -DRIVER.CAN.VAR.CAN_3_MESSAGE_13_ID.VALUE=13 -DRIVER.CAN.VAR.CAN_3_MESSAGE_11_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_64_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_56_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_48_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_5_ID.VALUE=5 -DRIVER.CAN.VAR.CAN_1_MESSAGE_3_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_57_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_49_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_40_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_40_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_32_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_32_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_24_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_24_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_16_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_16_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_63_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_55_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_47_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_39_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_8_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_8_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_20_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_12_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_2_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_40_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_32_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_24_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_16_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_4_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_58_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_8_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_PORT_TX_PSL.VALUE=1 -DRIVER.CAN.VAR.CAN_3_MESSAGE_64_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_56_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_48_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_62_ID.VALUE=62 -DRIVER.CAN.VAR.CAN_1_MESSAGE_54_ID.VALUE=54 -DRIVER.CAN.VAR.CAN_1_MESSAGE_46_ID.VALUE=46 -DRIVER.CAN.VAR.CAN_1_MESSAGE_38_ID.VALUE=38 -DRIVER.CAN.VAR.CAN_2_MESSAGE_61_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_53_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_45_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_37_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_29_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_58_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_20_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_20_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_12_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_12_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_4_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_4_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_BRP.VALUE=9 -DRIVER.CAN.VAR.CAN_1_MESSAGE_60_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_52_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_44_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_36_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_28_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_30_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_22_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_14_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_64_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_56_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_48_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_6_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_IDENTIFIER_MODE.VALUE=0x40000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_11_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_6_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_57_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_49_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_PHASE_SEG.VALUE=4 -DRIVER.CAN.VAR.CAN_4_MESSAGE_58_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_9_ID.VALUE=9 -DRIVER.CAN.VAR.CAN_3_MESSAGE_30_ID.VALUE=30 -DRIVER.CAN.VAR.CAN_3_MESSAGE_22_ID.VALUE=22 -DRIVER.CAN.VAR.CAN_3_MESSAGE_14_ID.VALUE=14 -DRIVER.CAN.VAR.CAN_2_MESSAGE_50_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_42_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_34_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_26_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_18_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_9_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_60_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_52_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_44_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_36_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_28_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_6_ID.VALUE=6 -DRIVER.CAN.VAR.CAN_4_BRPE_FREQ.VALUE=7.500 -DRIVER.CAN.VAR.CAN_3_MESSAGE_41_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_33_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_25_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_17_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_AUTO_BUS_ON_TIME.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_9_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_PORT_RX_FUN.VALUE=1 -DRIVER.CAN.VAR.CAN_3_MESSAGE_63_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_55_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_47_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_39_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_57_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_57_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_49_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_49_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_50_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_42_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_34_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_26_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_20_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_18_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_12_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_4_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_61_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_53_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_51_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_45_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_43_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_37_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_35_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_29_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_27_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_19_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_20_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_12_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_50_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_42_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_34_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_26_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_18_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_6_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_40_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_32_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_24_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_16_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_63_ID.VALUE=63 -DRIVER.CAN.VAR.CAN_1_MESSAGE_55_ID.VALUE=55 -DRIVER.CAN.VAR.CAN_1_MESSAGE_47_ID.VALUE=47 -DRIVER.CAN.VAR.CAN_1_MESSAGE_39_ID.VALUE=39 -DRIVER.CAN.VAR.CAN_1_MESSAGE_20_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_12_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_21_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_13_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_5_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_61_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_61_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_60_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_53_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_53_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_52_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_45_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_45_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_44_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_37_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_37_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_36_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_29_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_29_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_28_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_2_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_41_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_33_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_25_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_17_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_1_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_9_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_7_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_3_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_31_ID.VALUE=31 -DRIVER.CAN.VAR.CAN_3_MESSAGE_23_ID.VALUE=23 -DRIVER.CAN.VAR.CAN_3_MESSAGE_20_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_20_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_15_ID.VALUE=15 -DRIVER.CAN.VAR.CAN_3_MESSAGE_12_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_12_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_PORT_TX_PSL.VALUE=1 -DRIVER.CAN.VAR.CAN_1_MESSAGE_7_ID.VALUE=7 -DRIVER.CAN.VAR.CAN_1_MESSAGE_4_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_58_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_63_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_55_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_47_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_39_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_41_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_41_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_33_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_33_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_25_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_25_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_17_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_17_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_41_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_33_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_25_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_17_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_9_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_9_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_21_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_13_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_5_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_63_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_55_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_47_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_39_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_20_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_12_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_7_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_57_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_49_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_PORT_RX_PDR.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_64_ID.VALUE=64 -DRIVER.CAN.VAR.CAN_1_MESSAGE_56_ID.VALUE=56 -DRIVER.CAN.VAR.CAN_1_MESSAGE_48_ID.VALUE=48 -DRIVER.CAN.VAR.CAN_2_MESSAGE_62_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_54_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_46_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_38_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_21_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_21_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_13_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_13_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_BRP.VALUE=9 -DRIVER.CAN.VAR.CAN_3_MESSAGE_60_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_52_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_44_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_36_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_28_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_5_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_5_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_RAM_PARITY_ENA.VALUE=0x00000005 -DRIVER.CAN.VAR.CAN_3_MESSAGE_63_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_58_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_55_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_47_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_41_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_39_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_33_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_25_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_17_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_58_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_9_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_59_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_40_ID.VALUE=40 -DRIVER.CAN.VAR.CAN_3_MESSAGE_32_ID.VALUE=32 -DRIVER.CAN.VAR.CAN_3_MESSAGE_24_ID.VALUE=24 -DRIVER.CAN.VAR.CAN_3_MESSAGE_16_ID.VALUE=16 -DRIVER.CAN.VAR.CAN_1_MESSAGE_61_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_53_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_45_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_37_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_29_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_8_ID.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_50_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_42_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_34_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_26_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_18_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_NOMINAL_AUTO_BUS_ON_TIME.VALUE=0.000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_41_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_33_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_25_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_17_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_58_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_58_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_AUTO_RETRANSMISSION.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_11_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MASK.VALUE=0x1FFFFFFF -DRIVER.CAN.VAR.CAN_3_MESSAGE_3_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_62_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_61_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_54_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_53_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_46_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_45_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_38_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_37_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_29_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_63_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_55_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_47_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_41_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_39_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_33_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_25_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_17_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_57_ID.VALUE=57 -DRIVER.CAN.VAR.CAN_1_MESSAGE_49_ID.VALUE=49 -DRIVER.CAN.VAR.CAN_4_MESSAGE_30_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_22_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_14_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_6_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_60_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_52_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_44_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_36_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_28_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_62_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_62_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_54_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_54_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_46_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_46_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_38_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_38_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_AUTO_BUS_ON.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_30_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_22_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_14_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_62_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_54_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_46_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_38_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_50_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_42_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_40_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_34_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_32_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_26_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_24_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_18_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_16_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_62_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_54_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_46_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_40_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_38_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_32_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_24_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_16_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_8_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_63_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_55_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_47_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_39_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_8_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_41_ID.VALUE=41 -DRIVER.CAN.VAR.CAN_3_MESSAGE_33_ID.VALUE=33 -DRIVER.CAN.VAR.CAN_3_MESSAGE_25_ID.VALUE=25 -DRIVER.CAN.VAR.CAN_3_MESSAGE_21_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_17_ID.VALUE=17 -DRIVER.CAN.VAR.CAN_3_MESSAGE_13_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_41_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_33_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_25_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_17_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_9_ID.VALUE=9 -DRIVER.CAN.VAR.CAN_1_MESSAGE_5_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_59_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_SJW.VALUE=4 -DRIVER.CAN.VAR.CAN_3_MESSAGE_50_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_50_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_42_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_42_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_41_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_34_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_34_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_33_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_26_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_26_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_25_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_18_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_18_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_17_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_7_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_59_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_30_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_22_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_14_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_41_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_33_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_25_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_17_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_6_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_40_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_32_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_24_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_16_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_BAUDRATE.VALUE=500 -DRIVER.CAN.VAR.CAN_1_MESSAGE_61_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_53_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_45_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_37_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_29_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_9_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_IDENTIFIER_MODE.VALUE=0x40000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_8_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_41_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_33_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_25_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_17_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_1_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_58_ID.VALUE=58 -DRIVER.CAN.VAR.CAN_1_MESSAGE_5_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_RAMBASE.VALUE=0xFF180000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_63_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_55_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_47_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_39_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_AUTO_BUS_ON_TIME.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_30_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_30_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_22_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_22_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_14_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_14_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_6_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_6_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_30_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_22_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_14_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_7_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_PORT_TX_PULDIS.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_5_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_4_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_10_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_20_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_12_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_7_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_59_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_2_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_1_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_50_ID.VALUE=50 -DRIVER.CAN.VAR.CAN_3_MESSAGE_42_ID.VALUE=42 -DRIVER.CAN.VAR.CAN_3_MESSAGE_34_ID.VALUE=34 -DRIVER.CAN.VAR.CAN_3_MESSAGE_26_ID.VALUE=26 -DRIVER.CAN.VAR.CAN_3_MESSAGE_18_ID.VALUE=18 -DRIVER.CAN.VAR.CAN_2_MESSAGE_11_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_2_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_62_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_54_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_46_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_38_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_51_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_43_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_35_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_27_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_19_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_41_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_33_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_25_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_17_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_PORT_TX_DIN.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_7_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_59_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_59_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_11_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_60_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_52_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_44_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_36_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_28_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_21_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_13_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_59_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_5_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_PIN_MODE.VALUE=1 -DRIVER.CAN.VAR.CAN_2_MESSAGE_63_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_55_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_47_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_39_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_30_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_22_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_14_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_11_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_PORT_RX_PSL.VALUE=1 -DRIVER.CAN.VAR.CAN_2_MESSAGE_50_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_42_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_34_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_26_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_18_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_AUTO_BUS_ON_TR.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_59_ID.VALUE=59 -DRIVER.CAN.VAR.CAN_4_MESSAGE_31_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_23_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_15_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_PROPAGATION_DELAY.VALUE=700 -DRIVER.CAN.VAR.CAN_3_MESSAGE_7_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_7_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_SAMPLE_POINT.VALUE=73.333 -DRIVER.CAN.VAR.CAN_3_PORT_TX_DIR.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_30_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_22_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_14_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_63_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_63_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_55_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_55_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_47_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_47_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_39_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_39_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_4_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_61_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_53_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_45_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_37_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_29_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_3_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_ENABLE.VALUE=1 -DRIVER.CAN.VAR.CAN_3_MESSAGE_51_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_43_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_35_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_27_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_19_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_57_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_49_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_31_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_23_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_15_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_9_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_51_ID.VALUE=51 -DRIVER.CAN.VAR.CAN_3_MESSAGE_43_ID.VALUE=43 -DRIVER.CAN.VAR.CAN_3_MESSAGE_35_ID.VALUE=35 -DRIVER.CAN.VAR.CAN_3_MESSAGE_30_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_27_ID.VALUE=27 -DRIVER.CAN.VAR.CAN_3_MESSAGE_22_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_19_ID.VALUE=19 -DRIVER.CAN.VAR.CAN_3_MESSAGE_14_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_6_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_SJW.VALUE=4 -DRIVER.CAN.VAR.CAN_3_MESSAGE_51_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_51_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_43_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_43_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_35_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_35_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_27_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_27_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_19_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_19_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_11_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_4_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_31_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_23_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_21_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_15_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_13_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_7_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_5_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_4_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_58_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_PORT_RX_DOUT.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_10_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_2_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_62_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_54_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_46_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_38_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_64_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_56_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_48_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_31_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_31_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_30_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_23_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_23_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_22_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_15_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_15_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_14_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_PORT_RX_PULL.VALUE=1 -DRIVER.CAN.VAR.CAN_3_MESSAGE_7_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_7_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_4_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_59_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_58_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_50_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_42_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_34_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_26_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_18_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_62_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_60_ID.VALUE=60 -DRIVER.CAN.VAR.CAN_3_MESSAGE_54_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_52_ID.VALUE=52 -DRIVER.CAN.VAR.CAN_3_MESSAGE_46_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_44_ID.VALUE=44 -DRIVER.CAN.VAR.CAN_3_MESSAGE_38_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_36_ID.VALUE=36 -DRIVER.CAN.VAR.CAN_3_MESSAGE_28_ID.VALUE=28 -DRIVER.CAN.VAR.CAN_1_MESSAGE_63_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_55_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_47_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_39_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_60_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_52_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_44_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_36_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_28_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_NOMINAL_AUTO_BUS_ON_TIME.VALUE=0.000 -DRIVER.CAN.VAR.CAN_1_SYNC.VALUE=1 -DRIVER.CAN.VAR.CAN_4_MESSAGE_4_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_11_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_SHIFT.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_1_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_PORT_RX_PULDIS.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_60_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_52_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_44_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_36_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_28_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_64_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_62_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_56_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_54_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_48_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_46_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_38_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_51_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_43_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_40_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_35_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_32_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_27_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_24_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_19_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_16_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_7_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_1_ID.VALUE=1 -DRIVER.CAN.VAR.CAN_4_MESSAGE_40_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_32_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_24_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_16_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_8_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_BRP_FREQ.VALUE=7.500 -DRIVER.CAN.VAR.CAN_2_BRPE_FREQ.VALUE=7.500 -DRIVER.CAN.VAR.CAN_1_MESSAGE_10_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_64_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_64_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_56_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_56_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_48_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_48_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_1_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_63_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_55_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_47_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_39_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_30_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_22_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_14_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_60_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_52_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_44_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_36_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_28_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_6_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_11_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_6_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_PROP_SEG.VALUE=6 -DRIVER.CAN.VAR.CAN_1_MESSAGE_41_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_33_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_25_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_17_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_40_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_32_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_24_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_16_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_61_ID.VALUE=61 -DRIVER.CAN.VAR.CAN_3_MESSAGE_53_ID.VALUE=53 -DRIVER.CAN.VAR.CAN_3_MESSAGE_45_ID.VALUE=45 -DRIVER.CAN.VAR.CAN_3_MESSAGE_37_ID.VALUE=37 -DRIVER.CAN.VAR.CAN_3_MESSAGE_31_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_29_ID.VALUE=29 -DRIVER.CAN.VAR.CAN_3_MESSAGE_23_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_15_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_4_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_10_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_7_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_SJW.VALUE=4 -DRIVER.CAN.VAR.CAN_2_MESSAGE_1_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_11_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_60_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_60_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_52_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_52_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_44_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_44_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_36_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_36_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_28_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_28_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_1_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_40_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_32_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_24_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_16_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_62_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_54_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_50_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_46_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_42_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_38_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_34_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_26_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_18_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_8_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_57_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_49_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_10_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_11_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_1_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_10_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_3_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_2_ID.VALUE=2 -DRIVER.CAN.VAR.CAN_2_MESSAGE_57_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_49_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_40_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_40_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_32_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_32_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_24_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_24_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_16_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_16_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_1_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_8_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_8_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_10_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_10_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_SAMPLE_POINT.VALUE=73.333 -DRIVER.CAN.VAR.CAN_2_MESSAGE_51_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_43_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_35_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_27_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_21_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_19_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_13_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_8_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_1_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_59_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_62_ID.VALUE=62 -DRIVER.CAN.VAR.CAN_3_MESSAGE_54_ID.VALUE=54 -DRIVER.CAN.VAR.CAN_3_MESSAGE_46_ID.VALUE=46 -DRIVER.CAN.VAR.CAN_3_MESSAGE_38_ID.VALUE=38 -DRIVER.CAN.VAR.CAN_1_MESSAGE_64_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_59_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_56_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_48_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_61_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_53_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_45_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_37_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_29_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_PORT_TX_FUN.VALUE=1 -DRIVER.CAN.VAR.CAN_2_MESSAGE_1_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_1_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_30_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_22_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_14_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_8_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_31_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_23_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_21_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_15_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_13_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_6_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_57_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_49_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_7_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_5_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_59_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_60_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_52_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_44_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_36_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_28_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_3_ID.VALUE=3 -DRIVER.CAN.VAR.CAN_1_PORT_RX_DOUT.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_41_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_33_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_25_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_17_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_9_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_11_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_57_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_57_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_49_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_49_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_58_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_4_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_PHASE_SEG.VALUE=4 -DRIVER.CAN.VAR.CAN_3_MESSAGE_61_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_53_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_45_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_37_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_29_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_60_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_52_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_44_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_36_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_28_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_1_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_63_ID.VALUE=63 -DRIVER.CAN.VAR.CAN_3_MESSAGE_55_ID.VALUE=55 -DRIVER.CAN.VAR.CAN_3_MESSAGE_47_ID.VALUE=47 -DRIVER.CAN.VAR.CAN_3_MESSAGE_40_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_39_ID.VALUE=39 -DRIVER.CAN.VAR.CAN_3_MESSAGE_32_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_24_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_16_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_61_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_53_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_45_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_37_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_29_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_8_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_SJW.VALUE=4 -DRIVER.CAN.VAR.CAN_3_RAMBASE.VALUE=0xFF1A0000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_2_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_61_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_61_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_53_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_53_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_45_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_45_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_37_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_37_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_29_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_29_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_PORT_RX_DIN.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_64_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_56_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_48_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_41_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_33_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_25_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_17_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_3_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_9_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_59_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_50_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_42_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_34_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_26_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_18_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_11_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_61_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_53_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_45_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_37_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_29_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_20_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_12_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_PORT_TX_PDR.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_9_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_4_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_4_ID.VALUE=4 -DRIVER.CAN.VAR.CAN_1_MESSAGE_31_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_23_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_15_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_58_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_41_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_41_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_33_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_33_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_25_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_25_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_17_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_17_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_9_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_9_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_PORT_RX_DIR.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_57_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_49_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_11_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_11_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_51_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_43_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_35_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_27_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_19_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_20_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_12_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_7_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_2_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_21_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_13_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_6_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_PORT_TX_DOUT.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_64_ID.VALUE=64 -DRIVER.CAN.VAR.CAN_3_MESSAGE_56_ID.VALUE=56 -DRIVER.CAN.VAR.CAN_3_MESSAGE_48_ID.VALUE=48 -DRIVER.CAN.VAR.CAN_3_MESSAGE_31_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_23_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_15_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_57_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_49_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_3_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_NOMINAL_AUTO_BUS_ON_TIME.VALUE=0.000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_62_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_54_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_46_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_38_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_SYNC.VALUE=1 -DRIVER.CAN.VAR.CAN_2_PORT_TX_PULL.VALUE=2 -DRIVER.CAN.VAR.CAN_2_MESSAGE_2_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_2_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_1_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_64_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_63_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_58_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_56_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_55_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_48_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_47_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_39_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_61_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_53_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_45_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_37_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_29_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_10_ID.VALUE=10 -DRIVER.CAN.VAR.CAN_2_MESSAGE_5_ID.VALUE=5 -DRIVER.CAN.VAR.CAN_4_MESSAGE_50_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_42_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_34_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_26_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_18_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_20_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_12_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_58_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_58_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_57_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_49_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_64_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_56_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_48_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_20_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_12_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_63_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_62_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_55_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_54_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_47_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_46_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_39_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_38_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_4_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_50_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_42_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_34_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_26_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_18_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_57_ID.VALUE=57 -DRIVER.CAN.VAR.CAN_3_MESSAGE_49_ID.VALUE=49 -DRIVER.CAN.VAR.CAN_3_MESSAGE_41_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_33_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_25_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_17_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_9_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_3_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_62_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_62_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_54_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_54_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_46_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_46_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_38_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_38_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_62_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_54_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_46_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_38_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_50_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_42_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_41_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_34_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_33_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_26_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_25_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_18_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_17_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_NOMINAL_BIT_RATE.VALUE=500.000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_51_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_43_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_35_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_27_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_19_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_9_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_41_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_33_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_25_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_17_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_20_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_12_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_11_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_21_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_13_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_5_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_58_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_11_ID.VALUE=11 -DRIVER.CAN.VAR.CAN_2_MESSAGE_6_ID.VALUE=6 -DRIVER.CAN.VAR.CAN_3_PROPAGATION_DELAY.VALUE=700 -DRIVER.CAN.VAR.CAN_2_MESSAGE_59_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_50_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_50_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_42_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_42_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_34_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_34_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_26_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_26_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_18_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_18_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_57_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_49_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_AUTO_RETRANSMISSION.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_20_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_20_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_12_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_12_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_30_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_22_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_14_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_9_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_3_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_58_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_58_ID.VALUE=58 -DRIVER.CAN.VAR.CAN_1_MESSAGE_60_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_58_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_52_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_44_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_36_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_28_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_63_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_55_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_47_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_39_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_62_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_54_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_46_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_38_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_3_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_3_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_31_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_23_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_15_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_7_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_62_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_59_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_54_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_46_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_38_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_10_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_5_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_PORT_TX_PSL.VALUE=1 -DRIVER.CAN.VAR.CAN_3_MESSAGE_60_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_52_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_44_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_36_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_28_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_62_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_54_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_46_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_38_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_20_ID.VALUE=20 -DRIVER.CAN.VAR.CAN_2_MESSAGE_12_ID.VALUE=12 -DRIVER.CAN.VAR.CAN_2_MESSAGE_7_ID.VALUE=7 -DRIVER.CAN.VAR.CAN_1_MESSAGE_8_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_51_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_43_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_35_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_27_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_19_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_21_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_13_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_57_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_49_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_59_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_59_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_51_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_43_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_35_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_27_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_19_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_5_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_63_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_61_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_55_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_53_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_47_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_45_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_40_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_39_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_37_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_32_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_29_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_24_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_16_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_10_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_8_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_2_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_59_ID.VALUE=59 -DRIVER.CAN.VAR.CAN_3_MESSAGE_50_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_42_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_34_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_26_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_18_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_AUTO_BUS_ON_TR.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_30_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_22_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_14_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_5_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_4_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_63_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_63_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_62_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_55_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_55_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_54_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_47_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_47_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_46_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_39_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_39_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_38_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_PORT_RX_FUN.VALUE=1 -DRIVER.CAN.VAR.CAN_4_MESSAGE_51_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_43_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_35_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_27_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_19_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_10_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_2_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_58_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_21_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_13_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_30_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_30_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_22_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_22_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_14_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_14_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_6_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_2_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_21_ID.VALUE=21 -DRIVER.CAN.VAR.CAN_2_MESSAGE_13_ID.VALUE=13 -DRIVER.CAN.VAR.CAN_2_MESSAGE_8_ID.VALUE=8 -DRIVER.ADC.VAR.ADC2_GROUP1_DISCHARGE_PRESCALER.VALUE=0 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN21_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN13_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_ACTUAL_DISCHARGE_TIME.VALUE=0.00 -DRIVER.ADC.VAR.ADC2_GROUP1_RESOLUTION.VALUE=12_BIT -DRIVER.ADC.VAR.ADC2_GROUP0_PIN3_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_PARITY_ENABLE.VALUE=0x00000005 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN25_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN17_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_ACTUAL_DISCHARGE_TIME.VALUE=0.00 -DRIVER.ADC.VAR.ADC1_GROUP2_RESOLUTION.VALUE=12_BIT -DRIVER.ADC.VAR.ADC2_GROUP2_PIN7_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN10_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_TRIGGER_EDGE_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_RAM_PARITY_ENA.VALUE=0 -DRIVER.ADC.VAR.ADC2_GROUP1_EXTENDED_SAMPLE_TIME.VALUE=300.00 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN0_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_RAM_PARITY_ENA.VALUE=0 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN3_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_CHANNEL_TOTAL_TIME.VALUE=0.000000 -DRIVER.ADC.VAR.ADC1_GROUP1_FIFO_SIZE.VALUE=16 -DRIVER.ADC.VAR.ADC1_GROUP2_DISCHARGE_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_SAMPLE_PRESCALER.VALUE=1 -DRIVER.ADC.VAR.ADC1_GROUP1_LENGTH.VALUE=16 -DRIVER.ADC.VAR.ADC2_GROUP1_ID_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN18_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_CONVERSION_TIME.VALUE=1.300 -DRIVER.ADC.VAR.ADC2_PORT_BIT0_DIR.VALUE=0 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN4_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN11_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN7_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_ALT_TRIG.VALUE=0 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN23_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN15_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN29_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN0_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_CONVERSION_TIME.VALUE=1.300 -DRIVER.ADC.VAR.ADC2_GROUP2_LENGTH.VALUE=32 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN19_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_DISCHARGE_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN4_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN30_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN22_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN14_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_ACTUAL_SAMPLE_TIME.VALUE=320.01 -DRIVER.ADC.VAR.ADC2_GROUP2_SAMPLE_PRESCALER.VALUE=1 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN20_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN12_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN26_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN18_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN8_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN11_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_BND.VALUE=2 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN1_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN31_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN23_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN15_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_DISCHARGE_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_SAMPLE_PRESCALER.VALUE=1 -DRIVER.ADC.VAR.ADC2_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN5_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN8_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_ID_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_EXTENDED_SAMPLE_TIME.VALUE=300.00 -DRIVER.ADC.VAR.ADC1_GROUP0_CONVERSION_TIME.VALUE=1.300 -DRIVER.ADC.VAR.ADC2_GROUP0_RESOLUTION.VALUE=12_BIT -DRIVER.ADC.VAR.ADC1_GROUP1_PIN1_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_RESOLUTION.VALUE=12_BIT -DRIVER.ADC.VAR.ADC2_GROUP1_TRIGGER_EDGE_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_CONVERSION_TIME.VALUE=1.300 -DRIVER.ADC.VAR.ADC2_BND.VALUE=2 -DRIVER.ADC.VAR.ADC2_GROUP1_DISCHARGE_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_PORT_BIT0_PDR.VALUE=0 -DRIVER.ADC.VAR.ADC2_ACTUAL_CYCLE_TIME.VALUE=106.67 -DRIVER.ADC.VAR.ADC2_GROUP1_SAMPLE_PRESCALER.VALUE=1 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN9_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN24_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN16_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_SAMPLE_TIME.VALUE=300.00 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN2_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_TRIGGER_MODE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN5_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_DISCHARGE_PRESCALER.VALUE=0 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN21_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN13_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN9_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN27_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN19_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_DISCHARGE_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_RAM_PARITY_ENA.VALUE=0x00000005 -DRIVER.ADC.VAR.ADC2_GROUP1_SCAN_TIME.VALUE=0.000 -DRIVER.ADC.VAR.ADC2_GROUP0_CHANNEL_TOTAL_TIME.VALUE=0.000000 -DRIVER.ADC.VAR.ADC1_GROUP2_SAMPLE_TIME.VALUE=300.00 -DRIVER.ADC.VAR.ADC2_GROUP0_LENGTH.VALUE=16 -DRIVER.ADC.VAR.ADC1_GROUP0_SAMPLE_PRESCALER.VALUE=1 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN17_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN2_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN20_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN12_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN10_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN24_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN16_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_ACTUAL_SAMPLE_TIME.VALUE=320.01 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN6_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN28_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_TRIGGER_MODE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_PORT_BIT0_PSL.VALUE=1 -DRIVER.ADC.VAR.ADC1_GROUP2_CHANNEL_TOTAL_TIME.VALUE=0.000000 -DRIVER.ADC.VAR.ADC1_GROUP0_DISCHARGE_TIME.VALUE=0.00 -DRIVER.ADC.VAR.ADC2_LENGTH.VALUE=64 -DRIVER.ADC.VAR.ADC2_GROUP0_DISCHARGE_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN21_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN13_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_PINS.VALUE=0 -DRIVER.ADC.VAR.ADC2_GROUP0_DISCHARGE_TIME.VALUE=0.00 -DRIVER.ADC.VAR.ADC2_GROUP0_SAMPLE_PRESCALER.VALUE=1 -DRIVER.ADC.VAR.ADC1_GROUP0_DISCHARGE_PRESCALER.VALUE=0 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN3_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN6_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_RAMBASE.VALUE=0xFF3A0000 -DRIVER.ADC.VAR.ADC2_GROUP0_BND.VALUE=8 -DRIVER.ADC.VAR.ADC1_PORT_BIT0_DOUT.VALUE=0 -DRIVER.ADC.VAR.ADC1_GROUP1_SCAN_TIME.VALUE=0.000 -DRIVER.ADC.VAR.ADC1_GROUP0_RESOLUTION.VALUE=12_BIT -DRIVER.ADC.VAR.ADC2_GROUP2_FIFO_SIZE.VALUE=16 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN7_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN22_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN14_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_HW_TRIGGER_SOURCE.VALUE=EVENT -DRIVER.ADC.VAR.ADC2_GROUP1_BND.VALUE=8 -DRIVER.ADC.VAR.ADC2_GROUP0_HW_TRIGGER_SOURCE_ALT.VALUE=EVENT -DRIVER.ADC.VAR.ADC2_GROUP1_PIN18_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN0_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN3_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_ALT_TRIG_COMP.VALUE=1 -DRIVER.ADC.VAR.ADC2_GROUP1_HW_TRIGGER_SOURCE_ALT.VALUE=EVENT -DRIVER.ADC.VAR.ADC2_GROUP1_PIN11_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN7_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN25_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN17_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_PARITY_ENABLE.VALUE=0x00000005 -DRIVER.ADC.VAR.ADC1_ACTUAL_CYCLE_TIME.VALUE=106.67 -DRIVER.ADC.VAR.ADC2_GROUP2_HW_TRIGGER_SOURCE_ALT.VALUE=EVENT -DRIVER.ADC.VAR.ADC2_GROUP2_PIN23_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN15_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN0_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_CONTINUOUS_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN29_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN10_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_PINS.VALUE=0 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN30_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN22_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN14_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN4_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN26_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN18_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN8_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_TRIGGER_EDGE_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN11_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN1_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_FIFO_SIZE.VALUE=16 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN4_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_RAMBASE.VALUE=0xFF3E0000 -DRIVER.ADC.VAR.ADC1_BASE.VALUE=0xFFF7C000 -DRIVER.ADC.VAR.ADC1_PORT_BIT0_DIR.VALUE=0 -DRIVER.ADC.VAR.ADC2_RAM_PARITY_ENA.VALUE=0x00000005 -DRIVER.ADC.VAR.ADC2_GROUP2_HW_TRIGGER_SOURCE.VALUE=EVENT -DRIVER.ADC.VAR.ADC2_GROUP2_ID_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_ACTUAL_SAMPLE_TIME.VALUE=320.01 -DRIVER.ADC.VAR.ADC1_GROUP2_LENGTH.VALUE=32 -DRIVER.ADC.VAR.ADC1_GROUP0_BND.VALUE=8 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN19_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_CHANNEL_TOTAL_TIME.VALUE=0.000000 -DRIVER.ADC.VAR.ADC2_GROUP2_CONTINUOUS_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN5_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN20_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN12_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN8_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_TRIGGER_EDGE_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_PINS.VALUE=0 -DRIVER.ADC.VAR.ADC2_GROUP0_EXTENDED_SAMPLE_TIME.VALUE=300.00 -DRIVER.ADC.VAR.ADC1_GROUP1_DISCHARGE_TIME.VALUE=0.00 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN24_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN16_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN1_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_EXTENDED_SAMPLE_TIME.VALUE=300.00 -DRIVER.ADC.VAR.ADC2_GROUP1_DISCHARGE_TIME.VALUE=0.00 -DRIVER.ADC.VAR.ADC2_GROUP2_TRIGGER_MODE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_FIFO_SIZE.VALUE=16 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN5_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN31_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN23_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN15_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_BND.VALUE=8 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN21_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN13_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN27_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN19_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_PORT_BIT0_DOUT.VALUE=0 -DRIVER.ADC.VAR.ADC2_CYCLE_TIME.VALUE=100.00 -DRIVER.ADC.VAR.ADC1_GROUP1_HW_TRIGGER_SOURCE.VALUE=EVENT -DRIVER.ADC.VAR.ADC1_GROUP1_DISCHARGE_PRESCALER.VALUE=0 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN9_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_PRESCALE.VALUE=7 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN20_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN12_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_RAM_PARITY_ENA.VALUE=0 -DRIVER.ADC.VAR.ADC2_GROUP0_SAMPLE_TIME.VALUE=300.00 -DRIVER.ADC.VAR.ADC2_BASE.VALUE=0xFFF7C200 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN2_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_RAM_PARITY_ENA.VALUE=0 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN24_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN16_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_ID_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN6_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN9_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_CONTINUOUS_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_PORT_BIT0_PDR.VALUE=0 -DRIVER.ADC.VAR.ADC1_GROUP1_SAMPLE_TIME.VALUE=300.00 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN2_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_CONVERSION_TIME.VALUE=1.300 -DRIVER.ADC.VAR.ADC1_GROUP0_FIFO_SIZE.VALUE=16 -DRIVER.ADC.VAR.ADC1_PORT_BIT0_PULL.VALUE=2 -DRIVER.ADC.VAR.ADC1_GROUP0_LENGTH.VALUE=16 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN17_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_CONVERSION_TIME.VALUE=1.300 -DRIVER.ADC.VAR.ADC1_GROUP0_PINS.VALUE=0 -DRIVER.ADC.VAR.ADC1_GROUP0_ACTUAL_SAMPLE_TIME.VALUE=320.01 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN3_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN10_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_ID_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN6_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_SCAN_TIME.VALUE=0.000 -DRIVER.ADC.VAR.ADC2_GROUP1_HW_TRIGGER_SOURCE.VALUE=EVENT -DRIVER.ADC.VAR.ADC1_GROUP1_CHANNEL_TOTAL_TIME.VALUE=0.000000 -DRIVER.ADC.VAR.ADC1_GROUP0_EXTENDED_SAMPLE_TIME.VALUE=300.00 -DRIVER.ADC.VAR.ADC1_GROUP0_HW_TRIGGER_SOURCE_ALT.VALUE=EVENT -DRIVER.ADC.VAR.ADC2_GROUP1_PIN22_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN14_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN28_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_PORT_BIT0_PSL.VALUE=1 -DRIVER.ADC.VAR.ADC1_GROUP2_EXTENDED_SAMPLE_TIME.VALUE=300.00 -DRIVER.ADC.VAR.ADC2_GROUP1_LENGTH.VALUE=16 -DRIVER.ADC.VAR.ADC1_GROUP1_HW_TRIGGER_SOURCE_ALT.VALUE=EVENT -DRIVER.ADC.VAR.ADC2_GROUP2_PIN18_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN3_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN21_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN13_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_ACTUAL_DISCHARGE_TIME.VALUE=0.00 -DRIVER.ADC.VAR.ADC1_GROUP2_HW_TRIGGER_SOURCE_ALT.VALUE=EVENT -DRIVER.ADC.VAR.ADC2_GROUP2_PIN11_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_CONTINUOUS_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN25_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN17_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_ACTUAL_DISCHARGE_TIME.VALUE=0.00 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN7_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN29_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN10_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_ACTUAL_DISCHARGE_TIME.VALUE=0.00 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN0_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN30_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN22_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN14_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_CYCLE_TIME.VALUE=100.00 -DRIVER.ADC.VAR.ADC2_GROUP0_DISCHARGE_PRESCALER.VALUE=0 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN4_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN7_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_DISCHARGE_TIME.VALUE=0.00 -DRIVER.ADC.VAR.ADC1_GROUP0_HW_TRIGGER_SOURCE.VALUE=EVENT -DRIVER.ADC.VAR.ADC1_GROUP1_PIN0_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_ID_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_DISCHARGE_TIME.VALUE=0.00 -DRIVER.ADC.VAR.ADC1_GROUP2_SCAN_TIME.VALUE=0.000 -DRIVER.ADC.VAR.ADC1_GROUP1_PINS.VALUE=0 -DRIVER.ADC.VAR.ADC1_GROUP1_TRIGGER_EDGE_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_ALT_TRIG_COMP.VALUE=1 -DRIVER.ADC.VAR.ADC1_GROUP0_CONTINUOUS_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN8_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN23_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN15_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_ALT_TRIG.VALUE=0 -DRIVER.ADC.VAR.ADC1_GROUP1_RAM_PARITY_ENA.VALUE=0 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN19_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN1_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_RAM_PARITY_ENA.VALUE=0 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN4_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_DISCHARGE_PRESCALER.VALUE=0 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN20_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN12_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN8_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN26_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN18_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_RESOLUTION.VALUE=12_BIT -DRIVER.ADC.VAR.ADC2_GROUP2_PIN24_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN16_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN1_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN11_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_SCAN_TIME.VALUE=0.000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN31_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN23_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN15_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_HW_TRIGGER_SOURCE.VALUE=EVENT -DRIVER.ADC.VAR.ADC2_GROUP0_PIN5_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN27_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN19_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_PRESCALE.VALUE=7 -DRIVER.ADC.VAR.ADC2_GROUP0_ACTUAL_SAMPLE_TIME.VALUE=320.01 -DRIVER.ADC.VAR.ADC1_GROUP2_PINS.VALUE=0 -DRIVER.ADC.VAR.ADC2_PORT_BIT0_PULL.VALUE=2 -DRIVER.ADC.VAR.ADC1_LENGTH.VALUE=64 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN9_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN20_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN12_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_SAMPLE_TIME.VALUE=300.00 -DRIVER.ADC.VAR.ADC2_GROUP1_CHANNEL_TOTAL_TIME.VALUE=0.000000 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN2_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_CONTINUOUS_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN5_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_ACTUAL_SAMPLE_TIME.VALUE=320.01 -DRIVER.ADC.VAR.ADC1_GROUP0_SCAN_TIME.VALUE=0.000 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN6_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN21_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN13_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_TRIGGER_EDGE_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN9_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_SAMPLE_TIME.VALUE=300.00 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN17_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_FIFO_SIZE.VALUE=16 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN2_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN10_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN6_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN24_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN16_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN22_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN14_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN28_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_TRIGGER_MODE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_ACTUAL_DISCHARGE_TIME.VALUE=0.00 -DRIVER.LIN.VAR.LIN2_PORT_BIT1_PDR.VALUE=0 -DRIVER.LIN.VAR.LIN1_TOAWUSINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_TOA3WUSINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PORT_BIT2_DOUT.VALUE=0 -DRIVER.LIN.VAR.LIN2_PORT_BIT2_FUN.VALUE=4 -DRIVER.LIN.VAR.LIN1_HGENCTRL.VALUE=1 -DRIVER.LIN.VAR.LIN2_PORT_BIT0_PSL.VALUE=1 -DRIVER.LIN.VAR.LIN2_PORT_BIT0_DOUT.VALUE=0 -DRIVER.LIN.VAR.LIN1_PBEINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.LIN.VAR.LIN2_PORT_BIT2_PDR.VALUE=0 -DRIVER.LIN.VAR.LIN1_BASE_PORT.VALUE=0xFFF7E440 -DRIVER.LIN.VAR.LIN2_PARITYENA.VALUE=0 -DRIVER.LIN.VAR.LIN2_WAKEINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_FEINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_CEINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_PORT_BIT1_PSL.VALUE=2 -DRIVER.LIN.VAR.LIN2_OEINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_TXINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PORT_BIT0_PULL.VALUE=2 -DRIVER.LIN.VAR.LIN1_MAXPRESCALE.VALUE=3370 -DRIVER.LIN.VAR.LIN2_IDINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.LIN.VAR.LIN1_RX_MASK.VALUE=0xFF -DRIVER.LIN.VAR.LIN2_PORT_BIT2_PSL.VALUE=4 -DRIVER.LIN.VAR.LIN2_PORT_BIT1_DOUT.VALUE=0 -DRIVER.LIN.VAR.LIN1_BREAKINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_NREINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_TOINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_TOAWUSINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_TOA3WUSINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_BAUDRATE.VALUE=20.000 -DRIVER.LIN.VAR.LIN1_OEINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PORT_BIT0_DIR.VALUE=0 -DRIVER.LIN.VAR.LIN1_PORT_BIT1_PULL.VALUE=2 -DRIVER.LIN.VAR.LIN2_RXINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_WAKEINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_PORT_BIT2_DOUT.VALUE=0 -DRIVER.LIN.VAR.LIN2_WAKEINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_FEINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PORT_BIT1_DIR.VALUE=0 -DRIVER.LIN.VAR.LIN1_CEINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_PBEINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_TXINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PORT_BIT0_FUN.VALUE=0 -DRIVER.LIN.VAR.LIN2_IDINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PORT_BIT2_DIR.VALUE=0 -DRIVER.LIN.VAR.LIN2_SBREAK.VALUE=13 -DRIVER.LIN.VAR.LIN2_TOAWUSINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PORT_BIT2_PULL.VALUE=2 -DRIVER.LIN.VAR.LIN1_BREAKINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_PEINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PORT_BIT0_PDR.VALUE=0 -DRIVER.LIN.VAR.LIN1_BASE.VALUE=0xFFF7E400 -DRIVER.LIN.VAR.LIN2_PORT_BIT0_PULL.VALUE=2 -DRIVER.LIN.VAR.LIN1_LENGTH.VALUE=8 -DRIVER.LIN.VAR.LIN2_TOINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PORT_BIT1_FUN.VALUE=2 -DRIVER.LIN.VAR.LIN2_BEINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_ACTUALBAUDRATE.VALUE=20.032 -DRIVER.LIN.VAR.LIN1_FEINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_OEINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_NREINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_TXINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PORT_BIT1_PDR.VALUE=0 -DRIVER.LIN.VAR.LIN1_MSTMOD.VALUE=1 -DRIVER.LIN.VAR.LIN2_ISFEINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PORT_BIT2_FUN.VALUE=4 -DRIVER.LIN.VAR.LIN2_TX_MASK.VALUE=0xFF -DRIVER.LIN.VAR.LIN1_PORT_BIT0_PSL.VALUE=1 -DRIVER.LIN.VAR.LIN2_RXINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_WAKEINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_IDINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_PRESCALE.VALUE=233 -DRIVER.LIN.VAR.LIN1_PORT_BIT2_PDR.VALUE=0 -DRIVER.LIN.VAR.LIN2_BASE.VALUE=0xFFF7E600 -DRIVER.LIN.VAR.LIN2_PORT_BIT1_PULL.VALUE=2 -DRIVER.LIN.VAR.LIN2_PBEINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.LIN.VAR.LIN1_TOINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PORT_BIT1_PSL.VALUE=2 -DRIVER.LIN.VAR.LIN2_BASE_PORT.VALUE=0xFFF7E640 -DRIVER.LIN.VAR.LIN1_BAUDRATE.VALUE=20.000 -DRIVER.LIN.VAR.LIN2_TOAWUSINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_PEINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PORT_BIT2_PSL.VALUE=4 -DRIVER.LIN.VAR.LIN2_MAXBAUDRATE.VALUE=22.255 -DRIVER.LIN.VAR.LIN1_RXINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_BEINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_FEINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_PORT_BIT2_PULL.VALUE=2 -DRIVER.LIN.VAR.LIN1_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.LIN.VAR.LIN1_TX_MASK.VALUE=0xFF -DRIVER.LIN.VAR.LIN2_NREINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_TXINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_ISFEINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_ISFEINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_ACTUALBAUDRATE.VALUE=20.032 -DRIVER.LIN.VAR.LIN1_IDINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_TOA3WUSINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PEINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_TOINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PARITYENA.VALUE=0 -DRIVER.LIN.VAR.LIN1_BEINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_RXINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_HGENCTRL.VALUE=1 -DRIVER.LIN.VAR.LIN1_PRESCALE.VALUE=233 -DRIVER.LIN.VAR.LIN1_ISFEINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_SDEL.VALUE=1 -DRIVER.LIN.VAR.LIN2_LENGTH.VALUE=8 -DRIVER.LIN.VAR.LIN2_MAXPRESCALE.VALUE=3370 -DRIVER.LIN.VAR.LIN2_CEINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_BREAKINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PORT_BIT0_DOUT.VALUE=0 -DRIVER.LIN.VAR.LIN2_TOA3WUSINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PEINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_MSTMOD.VALUE=1 -DRIVER.LIN.VAR.LIN2_PORT_BIT0_DIR.VALUE=0 -DRIVER.LIN.VAR.LIN1_BEINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PBEINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_SDEL.VALUE=1 -DRIVER.LIN.VAR.LIN2_PORT_BIT1_DIR.VALUE=0 -DRIVER.LIN.VAR.LIN1_MAXBAUDRATE.VALUE=22.255 -DRIVER.LIN.VAR.LIN2_PORT_BIT2_PULDIS.VALUE=0 -DRIVER.LIN.VAR.LIN1_SBREAK.VALUE=13 -DRIVER.LIN.VAR.LIN2_OEINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PORT_BIT1_DOUT.VALUE=0 -DRIVER.LIN.VAR.LIN2_PORT_BIT0_FUN.VALUE=0 -DRIVER.LIN.VAR.LIN2_PORT_BIT2_DIR.VALUE=0 -DRIVER.LIN.VAR.LIN2_PORT_BIT0_PDR.VALUE=0 -DRIVER.LIN.VAR.LIN2_PORT_BIT1_FUN.VALUE=2 -DRIVER.LIN.VAR.LIN2_CEINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_NREINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_BREAKINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_RX_MASK.VALUE=0xFF -DRIVER.LIN.VAR.LIN1_PORT_BIT2_PULDIS.VALUE=0 -DRIVER.HET.VAR.HET2_EDGE5_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM5_PERIOD_PRESCALER.VALUE=149888 -DRIVER.HET.VAR.HET2_PWM0_PERIOD_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT0_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_INT_X0.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE4_BOTH.VALUE=0 -DRIVER.HET.VAR.HET1_BIT1_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT6_HRSHARE.VALUE=0x00000008 -DRIVER.HET.VAR.HET2_INT_X1.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM2_DUTY.VALUE=50 -DRIVER.HET.VAR.HET1_BIT29_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT0_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_IGNORE_SUSPEND_ENABLE.VALUE=0x00020000 -DRIVER.HET.VAR.HET2_PWM3_PERIOD.VALUE=1000.000 -DRIVER.HET.VAR.HET2_PWM1_PIN_SELECT.VALUE=10 -DRIVER.HET.VAR.HET2_BIT20_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT12_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT3_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_INT_X2.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X3.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM2_DUTYTIME.VALUE=500.053 -DRIVER.HET.VAR.HET2_INT_X4.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM6_ACTION.VALUE=3 -DRIVER.HET.VAR.HET1_PWM0_DUTY_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT4_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_PWM3_ENA.VALUE=0 -DRIVER.HET.VAR.HET2_BIT4_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X5.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_IGNORE_SUSPEND_ENABLE.VALUE=0x00020000 -DRIVER.HET.VAR.HET1_BIT30_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT26_HRSHARE.VALUE=0x00002000 -DRIVER.HET.VAR.HET1_BIT22_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT18_HRSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT14_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM4_ACTUALPERIOD.VALUE=1000.106 -DRIVER.HET.VAR.HET2_BIT3_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X6.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE0_PIN_SELECT.VALUE=9 -DRIVER.HET.VAR.HET1_BIT28_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT7_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_INT_X7.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT7_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X8.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM3_PERIOD_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT26_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT18_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT10_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X9.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT11_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT11_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_PWM4_PIN_SELECT.VALUE=16 -DRIVER.HET.VAR.HET2_PWM4_DUTYTIME.VALUE=500.053 -DRIVER.HET.VAR.HET1_RAM_BASE.VALUE=0xFF460000 -DRIVER.HET.VAR.HET2_EDGE6_BOTH.VALUE=0 -DRIVER.HET.VAR.HET2_PWM2_DUTY_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT31_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT23_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT15_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE2_EVENT.VALUE=1 -DRIVER.HET.VAR.HET2_BIT11_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PIN_ENABLE.VALUE=0 -DRIVER.HET.VAR.HET1_CAP3_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_BIT24_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT16_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT5_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT27_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT19_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE6_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT24_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_BIT16_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_BIT2_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM6_DUTY_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE3_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET2_EDGE5_PIN_SELECT.VALUE=21 -DRIVER.HET.VAR.HET2_BIT21_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT13_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM7_PERIOD.VALUE=1000.000 -DRIVER.HET.VAR.HET1_BIT27_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT19_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_CAP5_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET2_PWM4_ENA.VALUE=0 -DRIVER.HET.VAR.HET2_BIT8_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM1_POLARITY.VALUE=3 -DRIVER.HET.VAR.HET2_CAP2_PIN_SELECT.VALUE=4 -DRIVER.HET.VAR.HET2_BIT4_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM0_PERIOD.VALUE=1000.000 -DRIVER.HET.VAR.HET1_BIT29_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT0_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT8_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM4_PERIOD_PRESCALER.VALUE=149888 -DRIVER.HET.VAR.HET2_BIT1_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT20_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT12_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM7_ACTION.VALUE=3 -DRIVER.HET.VAR.HET2_PWM4_PERIOD_PRESCALER.VALUE=149888 -DRIVER.HET.VAR.HET2_BIT26_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_BIT24_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT18_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_BIT16_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM3_DUTY_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM3_POLARITY.VALUE=3 -DRIVER.HET.VAR.HET2_BIT28_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT0_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM1_ACTUALPERIOD.VALUE=1000.106 -DRIVER.HET.VAR.HET2_BIT29_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT6_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_CAP5_PIN_SELECT.VALUE=26 -DRIVER.HET.VAR.HET1_BIT28_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT10_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_EDGE7_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM0_ACTION.VALUE=3 -DRIVER.HET.VAR.HET2_BIT1_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_EDGE7_EVENT.VALUE=1 -DRIVER.HET.VAR.HET1_EDGE5_BOTH.VALUE=0 -DRIVER.HET.VAR.HET1_PWM5_DUTY_PRESCALER.VALUE=75136 -DRIVER.HET.VAR.HET1_BIT3_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE7_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_EDGE1_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM3_DUTY.VALUE=50 -DRIVER.HET.VAR.HET1_PWM1_PERIOD_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT30_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT22_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT14_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT4_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_EDGE4_EVENT.VALUE=1 -DRIVER.HET.VAR.HET1_BIT5_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_MASTER.VALUE=1 -DRIVER.HET.VAR.HET2_EDGE5_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM5_ENA.VALUE=0 -DRIVER.HET.VAR.HET2_PWM0_PERIOD_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT2_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT5_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM7_ACTUALPERIOD.VALUE=1000.106 -DRIVER.HET.VAR.HET1_BIT8_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT1_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_LR_ACTUALTIME.VALUE=853.333 -DRIVER.HET.VAR.HET1_PWM5_DUTYTIME.VALUE=500.053 -DRIVER.HET.VAR.HET2_PWM5_PERIOD_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM4_DUTY_PRESCALER.VALUE=75136 -DRIVER.HET.VAR.HET2_BIT9_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM3_DUTY_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM0_DUTY_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT5_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM6_PIN_SELECT.VALUE=18 -DRIVER.HET.VAR.HET2_BIT21_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT20_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT13_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT12_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_EDGE7_BOTH.VALUE=0 -DRIVER.HET.VAR.HET2_BIT25_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT17_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM6_DUTY_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM0_ENA.VALUE=0 -DRIVER.HET.VAR.HET1_BIT30_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT27_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT22_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT19_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT14_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM1_PERIOD.VALUE=1000.000 -DRIVER.HET.VAR.HET2_BIT7_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE5_PIN_SELECT.VALUE=21 -DRIVER.HET.VAR.HET1_BIT29_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT0_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET_DIS_BLACKBOX.VALUE=0 -DRIVER.HET.VAR.HET2_PWM7_DUTYTIME.VALUE=500.053 -DRIVER.HET.VAR.HET2_HR_ACTUALFREQUENCY.VALUE=75.000 -DRIVER.HET.VAR.HET2_PWM5_DUTY_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM4_ACTION.VALUE=3 -DRIVER.HET.VAR.HET1_BIT25_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_BIT17_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_BIT4_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE0_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_CAP6_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_BIT20_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT12_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT31_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT23_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT15_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X10.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT28_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_INT_X11.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X20.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X12.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM3_PERIOD_PRESCALER.VALUE=149888 -DRIVER.HET.VAR.HET2_PWM6_ENA.VALUE=0 -DRIVER.HET.VAR.HET2_BIT24_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT16_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X21.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X13.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_HR_PRESCALE.VALUE=0 -DRIVER.HET.VAR.HET1_EDGE6_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_PWM6_PERIOD_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_LR_PRESCALE.VALUE=6 -DRIVER.HET.VAR.HET2_PWM0_PIN_SELECT.VALUE=8 -DRIVER.HET.VAR.HET2_BIT6_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X30.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X22.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X14.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT2_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X31.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X23.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X15.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM3_PERIOD_PRESCALER.VALUE=149888 -DRIVER.HET.VAR.HET2_INT_X24.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X16.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BASE_PORT.VALUE=0xFFF7B84C -DRIVER.HET.VAR.HET2_PWM5_PERIOD_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT0_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X25.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X17.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM4_POLARITY.VALUE=3 -DRIVER.HET.VAR.HET1_PWM3_DUTY_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT10_HRSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT30_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT22_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT14_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X26.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X18.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X27.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X19.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT27_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_BIT26_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT19_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_BIT18_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X28.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM2_PERIOD_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM1_DUTY_PRESCALER.VALUE=75136 -DRIVER.HET.VAR.HET2_PWM0_DUTY.VALUE=50 -DRIVER.HET.VAR.HET2_BIT26_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT18_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X29.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM1_ENA.VALUE=0 -DRIVER.HET.VAR.HET2_CAP7_PIN_SELECT.VALUE=30 -DRIVER.HET.VAR.HET2_BIT8_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM5_PERIOD.VALUE=1000.000 -DRIVER.HET.VAR.HET1_PWM4_ACTUALPERIOD.VALUE=1000.106 -DRIVER.HET.VAR.HET1_PWM3_PIN_SELECT.VALUE=14 -DRIVER.HET.VAR.HET1_BIT11_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT1_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM0_DUTYTIME.VALUE=500.053 -DRIVER.HET.VAR.HET2_BIT2_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_EDGE6_BOTH.VALUE=0 -DRIVER.HET.VAR.HET1_BIT5_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM6_POLARITY.VALUE=3 -DRIVER.HET.VAR.HET2_BIT30_HRSHARE.VALUE=0x00008000 -DRIVER.HET.VAR.HET2_BIT22_HRSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT14_HRSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT6_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM4_DUTY.VALUE=50 -DRIVER.HET.VAR.HET1_BIT20_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT12_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PIN_ENABLE.VALUE=0 -DRIVER.HET.VAR.HET2_BIT24_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT16_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT5_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_PWM0_DUTY_PRESCALER.VALUE=75136 -DRIVER.HET.VAR.HET1_BIT6_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_PWM7_ENA.VALUE=0 -DRIVER.HET.VAR.HET1_PWM0_DUTY_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT8_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE4_PIN_SELECT.VALUE=20 -DRIVER.HET.VAR.HET2_BIT7_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT9_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT3_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM5_ACTION.VALUE=3 -DRIVER.HET.VAR.HET2_BIT10_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_CAP1_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_EDGE6_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_CAP1_PIN_SELECT.VALUE=2 -DRIVER.HET.VAR.HET2_BIT31_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT23_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT21_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT15_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT13_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT27_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT19_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE3_EVENT.VALUE=1 -DRIVER.HET.VAR.HET1_PWM6_DUTY_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM2_ENA.VALUE=0 -DRIVER.HET.VAR.HET2_BIT9_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT2_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE0_EVENT.VALUE=1 -DRIVER.HET.VAR.HET1_PWM2_PERIOD_PRESCALER.VALUE=149888 -DRIVER.HET.VAR.HET1_BIT26_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_BIT18_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_BIT6_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE3_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT24_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT16_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT25_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT17_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_CAP4_PIN_SELECT.VALUE=24 -DRIVER.HET.VAR.HET1_BIT29_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT0_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_PWM2_PERIOD_PRESCALER.VALUE=149888 -DRIVER.HET.VAR.HET2_EDGE3_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_BIT3_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT2_HRSHARE.VALUE=0x00000002 -DRIVER.HET.VAR.HET2_PWM6_PERIOD.VALUE=1000.000 -DRIVER.HET.VAR.HET2_BIT8_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM1_ACTUALPERIOD.VALUE=1000.106 -DRIVER.HET.VAR.HET1_BIT4_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT4_HRSHARE.VALUE=0x00000004 -DRIVER.HET.VAR.HET1_BIT25_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT17_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT24_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT16_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM1_DUTYTIME.VALUE=500.053 -DRIVER.HET.VAR.HET2_PWM4_PERIOD_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT28_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_BIT28_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM2_ACTION.VALUE=3 -DRIVER.HET.VAR.HET2_PWM1_DUTY.VALUE=50 -DRIVER.HET.VAR.HET2_BIT29_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM7_POLARITY.VALUE=3 -DRIVER.HET.VAR.HET1_PWM3_ENA.VALUE=0 -DRIVER.HET.VAR.HET1_BIT24_HRSHARE.VALUE=0x00001000 -DRIVER.HET.VAR.HET1_BIT16_HRSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT10_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM5_PIN_SELECT.VALUE=17 -DRIVER.HET.VAR.HET1_BIT20_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT12_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT3_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X10.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X11.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT3_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_EDGE7_BOTH.VALUE=0 -DRIVER.HET.VAR.HET1_EDGE0_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT7_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X20.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X12.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT30_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT22_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT14_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM5_DUTY.VALUE=50 -DRIVER.HET.VAR.HET1_BIT10_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X21.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X13.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM5_ACTUALPERIOD.VALUE=1000.106 -DRIVER.HET.VAR.HET2_BIT26_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT18_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT6_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_EDGE4_PIN_SELECT.VALUE=20 -DRIVER.HET.VAR.HET1_INT_X30.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X22.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X14.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM3_DUTYTIME.VALUE=500.053 -DRIVER.HET.VAR.HET1_INT_X31.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X23.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X15.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE5_EVENT.VALUE=1 -DRIVER.HET.VAR.HET2_PWM1_DUTY_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM7_PERIOD_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM6_DUTY_PRESCALER.VALUE=75136 -DRIVER.HET.VAR.HET1_BIT7_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_INT_X24.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X16.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT28_HRSHARE.VALUE=0x00004000 -DRIVER.HET.VAR.HET1_CAP2_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_PWM3_PERIOD_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT6_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X25.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X17.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT9_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT5_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X26.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X18.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X27.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X19.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT11_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_INT_X28.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM2_PERIOD_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_RAM_SIZE.VALUE=160 -DRIVER.HET.VAR.HET1_EDGE2_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_INT_X29.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT30_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT25_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT22_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT17_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT14_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_PWM3_PERIOD.VALUE=1000.000 -DRIVER.HET.VAR.HET2_PWM5_DUTY_PRESCALER.VALUE=75136 -DRIVER.HET.VAR.HET2_BIT29_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM1_PERIOD_PRESCALER.VALUE=149888 -DRIVER.HET.VAR.HET1_BIT10_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_CAP4_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET2_BIT8_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT4_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM4_ENA.VALUE=0 -DRIVER.HET.VAR.HET1_PWM0_POLARITY.VALUE=3 -DRIVER.HET.VAR.HET1_BIT4_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM1_PERIOD_PRESCALER.VALUE=149888 -DRIVER.HET.VAR.HET1_EDGE1_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM1_PERIOD_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT27_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_BIT19_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_BIT8_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT30_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT22_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT14_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_CAP6_PIN_SELECT.VALUE=28 -DRIVER.HET.VAR.HET2_BIT27_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT19_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM2_PIN_SELECT.VALUE=12 -DRIVER.HET.VAR.HET1_BIT1_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_PWM3_ACTION.VALUE=3 -DRIVER.HET.VAR.HET2_PWM2_POLARITY.VALUE=3 -DRIVER.HET.VAR.HET1_EDGE4_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT28_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT6_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE0_BOTH.VALUE=0 -DRIVER.HET.VAR.HET2_EDGE6_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET2_PWM5_DUTY_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT8_HRSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT4_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE3_PIN_SELECT.VALUE=15 -DRIVER.HET.VAR.HET2_PWM2_ACTUALPERIOD.VALUE=1000.106 -DRIVER.HET.VAR.HET2_BIT26_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT18_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT29_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_BIT11_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT10_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_EDGE1_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM7_PERIOD_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM2_DUTY.VALUE=50 -DRIVER.HET.VAR.HET1_PWM5_ENA.VALUE=0 -DRIVER.HET.VAR.HET1_BIT8_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_CAP0_PIN_SELECT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT21_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT13_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT5_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM4_DUTYTIME.VALUE=500.053 -DRIVER.HET.VAR.HET2_BIT4_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_EDGE2_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM2_DUTY_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM2_DUTY_PRESCALER.VALUE=75136 -DRIVER.HET.VAR.HET1_BIT9_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT6_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM6_DUTY.VALUE=50 -DRIVER.HET.VAR.HET1_BIT1_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM4_PERIOD.VALUE=1000.000 -DRIVER.HET.VAR.HET2_BIT28_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT7_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_PWM7_ACTION.VALUE=3 -DRIVER.HET.VAR.HET1_BIT8_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_PWM2_DUTY_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT20_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT12_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT31_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT23_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT15_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_CAP3_PIN_SELECT.VALUE=6 -DRIVER.HET.VAR.HET1_BIT7_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM6_DUTYTIME.VALUE=500.053 -DRIVER.HET.VAR.HET2_PWM4_DUTY_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM1_DUTY_PRESCALER.VALUE=75136 -DRIVER.HET.VAR.HET2_BIT20_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_BIT12_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_PWM0_PERIOD_PRESCALER.VALUE=149888 -DRIVER.HET.VAR.HET1_PWM0_ACTION.VALUE=3 -DRIVER.HET.VAR.HET2_BIT27_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT19_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_CAP5_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_BIT26_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT18_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT31_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT27_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT23_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT19_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT15_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_PWM0_PERIOD_PRESCALER.VALUE=149888 -DRIVER.HET.VAR.HET1_EDGE4_EVENT.VALUE=1 -DRIVER.HET.VAR.HET1_BIT20_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT12_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT20_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT12_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE5_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_PWM6_ENA.VALUE=0 -DRIVER.HET.VAR.HET1_BIT6_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE1_EVENT.VALUE=1 -DRIVER.HET.VAR.HET2_PWM3_PERIOD_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE3_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT28_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_CAP7_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_PWM3_POLARITY.VALUE=3 -DRIVER.HET.VAR.HET2_PWM4_PIN_SELECT.VALUE=16 -DRIVER.HET.VAR.HET2_BIT29_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT10_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT2_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT9_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM5_DUTY_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM0_PERIOD_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE3_PIN_SELECT.VALUE=15 -DRIVER.HET.VAR.HET1_PWM1_PERIOD.VALUE=1000.000 -DRIVER.HET.VAR.HET1_BIT8_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BASE.VALUE=0xFFF7B800 -DRIVER.HET.VAR.HET2_EDGE1_BOTH.VALUE=0 -DRIVER.HET.VAR.HET1_PWM6_PERIOD_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM5_POLARITY.VALUE=3 -DRIVER.HET.VAR.HET2_BIT20_HRSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT12_HRSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT2_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT2_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT28_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM7_PIN_SELECT.VALUE=19 -DRIVER.HET.VAR.HET1_PWM5_ACTUALPERIOD.VALUE=1000.106 -DRIVER.HET.VAR.HET1_LR_ACTUALTIME.VALUE=853.333 -DRIVER.HET.VAR.HET1_BIT21_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT13_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT11_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_PWM3_DUTY.VALUE=50 -DRIVER.HET.VAR.HET1_PWM7_ENA.VALUE=0 -DRIVER.HET.VAR.HET1_HR_PRESCALE.VALUE=0 -DRIVER.HET.VAR.HET1_BIT30_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT22_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT14_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT7_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_HR_ACTUALFREQUENCY.VALUE=75.000 -DRIVER.HET.VAR.HET2_PWM1_ACTION.VALUE=3 -DRIVER.HET.VAR.HET2_BIT5_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_EDGE4_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_CAP0_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET2_BIT4_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE2_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM7_DUTY.VALUE=50 -DRIVER.HET.VAR.HET1_PWM2_DUTY_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT8_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT11_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM7_DUTYTIME.VALUE=500.053 -DRIVER.HET.VAR.HET2_EDGE6_EVENT.VALUE=1 -DRIVER.HET.VAR.HET2_MASTER.VALUE=1 -DRIVER.HET.VAR.HET1_PWM5_DUTY_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM0_PERIOD_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT9_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_EDGE6_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT10_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_CAP5_PIN_SELECT.VALUE=26 -DRIVER.HET.VAR.HET1_PWM1_PIN_SELECT.VALUE=10 -DRIVER.HET.VAR.HET1_BIT9_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT21_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_BIT13_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_PWM7_DUTY_PRESCALER.VALUE=75136 -DRIVER.HET.VAR.HET1_PWM5_PERIOD_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT24_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT16_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT6_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_RAM_PARITY_ENA.VALUE=0x00000005 -DRIVER.HET.VAR.HET2_BIT29_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT24_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT16_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT10_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM7_DUTY_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE0_BOTH.VALUE=0 -DRIVER.HET.VAR.HET1_BIT30_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT22_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT14_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X0.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE2_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET2_PWM4_PERIOD_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT28_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT0_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT0_HRSHARE.VALUE=0x00000001 -DRIVER.HET.VAR.HET1_INT_X1.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE2_PIN_SELECT.VALUE=13 -DRIVER.HET.VAR.HET2_PWM2_PERIOD.VALUE=1000.000 -DRIVER.HET.VAR.HET1_BIT8_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X2.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_DIS_BLACKBOX.VALUE=0 -DRIVER.HET.VAR.HET2_LR_TIME.VALUE=800.000 -DRIVER.HET.VAR.HET1_INT_X3.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM6_DUTY_PRESCALER.VALUE=75136 -DRIVER.HET.VAR.HET1_EDGE5_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM5_ACTION.VALUE=3 -DRIVER.HET.VAR.HET1_BIT29_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_BIT0_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_INT_X4.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT2_HRSHARE.VALUE=0x00000002 -DRIVER.HET.VAR.HET1_BIT21_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT13_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X5.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM2_ACTUALPERIOD.VALUE=1000.106 -DRIVER.HET.VAR.HET1_BIT20_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT12_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT3_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_INT_X6.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM0_DUTYTIME.VALUE=500.053 -DRIVER.HET.VAR.HET1_INT_X7.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BASE_PORT.VALUE=0xFFF7B94C -DRIVER.HET.VAR.HET1_INT_X8.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT25_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT17_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT2_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM6_POLARITY.VALUE=3 -DRIVER.HET.VAR.HET1_BIT30_HRSHARE.VALUE=0x00008000 -DRIVER.HET.VAR.HET1_BIT22_HRSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT14_HRSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X9.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BASE.VALUE=0xFFF7B900 -DRIVER.HET.VAR.HET2_EDGE2_BOTH.VALUE=0 -DRIVER.HET.VAR.HET1_EDGE0_EVENT.VALUE=1 -DRIVER.HET.VAR.HET2_BIT28_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT10_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_CAP2_PIN_SELECT.VALUE=4 -DRIVER.HET.VAR.HET1_BIT11_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM2_DUTYTIME.VALUE=500.053 -DRIVER.HET.VAR.HET2_PWM0_DUTY_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT31_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT23_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT20_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_BIT15_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT12_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_PWM4_DUTY.VALUE=50 -DRIVER.HET.VAR.HET2_BIT26_HRSHARE.VALUE=0x00002000 -DRIVER.HET.VAR.HET2_BIT18_HRSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_CAP1_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_BIT30_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT22_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT14_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM6_ACTUALPERIOD.VALUE=1000.106 -DRIVER.HET.VAR.HET1_PWM6_PERIOD.VALUE=1000.000 -DRIVER.HET.VAR.HET1_BIT31_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT23_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT15_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT9_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT6_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_EDGE6_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT7_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE1_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_RAM_SIZE.VALUE=160 -DRIVER.HET.VAR.HET2_BIT9_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT21_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT13_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM2_PERIOD_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT0_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM3_DUTY_PRESCALER.VALUE=75136 -DRIVER.HET.VAR.HET2_CAP3_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET2_BIT0_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM3_PIN_SELECT.VALUE=14 -DRIVER.HET.VAR.HET2_PWM6_ACTION.VALUE=3 -DRIVER.HET.VAR.HET2_BIT30_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_BIT22_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_BIT14_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_EDGE7_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT25_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT17_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_EDGE2_PIN_SELECT.VALUE=13 -DRIVER.HET.VAR.HET1_BIT20_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT12_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_HR_FREQUENCY.VALUE=110.000 -DRIVER.HET.VAR.HET2_PWM2_DUTY_PRESCALER.VALUE=75136 -DRIVER.HET.VAR.HET1_EDGE5_EVENT.VALUE=1 -DRIVER.HET.VAR.HET1_EDGE1_BOTH.VALUE=0 -DRIVER.HET.VAR.HET1_PWM5_PERIOD_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT24_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT16_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM1_POLARITY.VALUE=3 -DRIVER.HET.VAR.HET2_BIT26_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT18_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE0_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT0_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_PWM6_PIN_SELECT.VALUE=18 -DRIVER.HET.VAR.HET2_EDGE2_EVENT.VALUE=1 -DRIVER.HET.VAR.HET1_EDGE7_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT1_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_EDGE5_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET2_EDGE4_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT6_HRSHARE.VALUE=0x00000008 -DRIVER.HET.VAR.HET1_BIT30_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT22_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT14_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT4_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT1_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM7_DUTY_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT8_HRSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT0_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT4_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE7_PIN_SELECT.VALUE=23 -DRIVER.HET.VAR.HET2_PWM7_PERIOD.VALUE=1000.000 -DRIVER.HET.VAR.HET2_PWM3_ACTUALPERIOD.VALUE=1000.106 -DRIVER.HET.VAR.HET1_PWM3_DUTYTIME.VALUE=500.053 -DRIVER.HET.VAR.HET2_EDGE3_BOTH.VALUE=0 -DRIVER.HET.VAR.HET1_PWM1_DUTY_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM2_PERIOD_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT28_HRSHARE.VALUE=0x00004000 -DRIVER.HET.VAR.HET1_BIT26_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT18_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_CAP4_PIN_SELECT.VALUE=24 -DRIVER.HET.VAR.HET2_PWM0_PERIOD.VALUE=1000.000 -DRIVER.HET.VAR.HET1_PWM0_PIN_SELECT.VALUE=8 -DRIVER.HET.VAR.HET1_BIT21_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT13_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_LR_TIME.VALUE=800.000 -DRIVER.HET.VAR.HET2_EDGE0_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM3_ACTION.VALUE=3 -DRIVER.HET.VAR.HET1_BIT25_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT21_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_BIT17_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT13_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_PWM5_DUTY.VALUE=50 -DRIVER.HET.VAR.HET2_PWM1_PERIOD_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT20_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT12_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT11_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT24_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT16_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_PWM5_DUTYTIME.VALUE=500.053 -DRIVER.HET.VAR.HET2_RAM_BASE.VALUE=0xFF440000 -DRIVER.HET.VAR.HET2_PWM3_DUTY_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT7_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_PWM4_DUTY_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT31_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT23_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT15_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_CAP4_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_BIT8_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE1_PIN_SELECT.VALUE=11 -DRIVER.HET.VAR.HET1_CAP7_PIN_SELECT.VALUE=30 -DRIVER.HET.VAR.HET1_BIT31_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT23_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT15_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE7_EVENT.VALUE=1 -DRIVER.HET.VAR.HET2_BIT2_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE4_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET2_BIT31_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_BIT23_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_BIT15_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_BIT10_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_CAP6_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_PWM2_POLARITY.VALUE=3 -DRIVER.HET.VAR.HET2_BIT26_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT18_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT0_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM4_PERIOD.VALUE=1000.000 -DRIVER.HET.VAR.HET1_BIT30_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT22_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT14_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE1_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM7_PERIOD_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE2_BOTH.VALUE=0 -DRIVER.HET.VAR.HET1_BIT26_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT18_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM1_DUTY_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT24_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT16_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT5_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_RAM_PARITY_ENA.VALUE=0x00000005 -DRIVER.HET.VAR.HET1_PWM7_PERIOD_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM0_DUTY.VALUE=50 -DRIVER.HET.VAR.HET2_PWM0_ACTUALPERIOD.VALUE=1000.106 -DRIVER.HET.VAR.HET2_BIT1_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_CAP1_PIN_SELECT.VALUE=2 -DRIVER.HET.VAR.HET1_PWM7_PERIOD_PRESCALER.VALUE=149888 -DRIVER.HET.VAR.HET1_BIT2_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_PWM6_PERIOD_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM4_POLARITY.VALUE=3 -DRIVER.HET.VAR.HET2_BIT10_HRSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM7_DUTY_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT10_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE7_PIN_SELECT.VALUE=23 -DRIVER.HET.VAR.HET1_BIT24_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT16_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT5_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_PWM7_PERIOD_PRESCALER.VALUE=149888 -DRIVER.HET.VAR.HET2_PWM7_DUTY_PRESCALER.VALUE=75136 -DRIVER.HET.VAR.HET2_PWM4_ACTION.VALUE=3 -DRIVER.HET.VAR.HET2_BIT3_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE5_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT6_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM6_ACTUALPERIOD.VALUE=1000.106 -DRIVER.HET.VAR.HET2_EDGE4_BOTH.VALUE=0 -DRIVER.HET.VAR.HET2_PWM1_PERIOD_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT11_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE1_EVENT.VALUE=1 -DRIVER.HET.VAR.HET2_LR_PRESCALE.VALUE=6 -DRIVER.HET.VAR.HET2_PWM2_PIN_SELECT.VALUE=12 -DRIVER.HET.VAR.HET2_BIT1_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT31_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT23_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT15_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM6_DUTYTIME.VALUE=500.053 -DRIVER.HET.VAR.HET2_EDGE2_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM4_DUTY_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT30_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_BIT27_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT22_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_BIT19_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT14_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_EDGE2_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM6_DUTY.VALUE=50 -DRIVER.HET.VAR.HET2_BIT8_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM4_DUTY_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT9_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE1_PIN_SELECT.VALUE=11 -DRIVER.HET.VAR.HET1_BIT25_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT17_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT8_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_PWM4_PERIOD_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM0_ENA.VALUE=0 -DRIVER.HET.VAR.HET2_BIT30_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT22_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT14_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT2_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM5_PERIOD.VALUE=1000.000 -DRIVER.HET.VAR.HET2_BIT0_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM5_PIN_SELECT.VALUE=17 -DRIVER.HET.VAR.HET1_BIT25_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT17_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM6_DUTY_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT4_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE1_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_CAP7_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_BIT28_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT24_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT16_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT24_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_BIT20_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT16_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_BIT12_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM4_DUTY_PRESCALER.VALUE=75136 -DRIVER.HET.VAR.HET1_PWM1_ACTION.VALUE=3 -DRIVER.HET.VAR.HET2_BIT28_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT0_HRSHARE.VALUE=0x00000001 -DRIVER.HET.VAR.HET1_EDGE7_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_PWM1_DUTY_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE6_PIN_SELECT.VALUE=22 -DRIVER.HET.VAR.HET2_BIT27_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT19_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT2_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_DIS_BLACKBOX.VALUE=0 -DRIVER.HET.VAR.HET1_BIT24_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT16_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE3_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE6_EVENT.VALUE=1 -DRIVER.HET.VAR.HET1_EDGE3_BOTH.VALUE=0 -DRIVER.HET.VAR.HET1_PWM6_PERIOD_PRESCALER.VALUE=149888 -DRIVER.HET.VAR.HET1_BIT28_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT21_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT13_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM5_POLARITY.VALUE=3 -DRIVER.HET.VAR.HET1_PWM1_DUTY.VALUE=50 -DRIVER.HET.VAR.HET1_BIT20_HRSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT12_HRSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_CAP3_PIN_SELECT.VALUE=6 -DRIVER.HET.VAR.HET2_BIT10_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT2_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_PWM3_ACTUALPERIOD.VALUE=1000.106 -DRIVER.HET.VAR.HET2_EDGE3_EVENT.VALUE=1 -DRIVER.HET.VAR.HET2_PWM6_PERIOD_PRESCALER.VALUE=149888 -DRIVER.HET.VAR.HET2_PWM3_DUTY_PRESCALER.VALUE=75136 -DRIVER.HET.VAR.HET1_BIT3_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_PWM1_ENA.VALUE=0 -DRIVER.HET.VAR.HET2_BIT1_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT26_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT18_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT6_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_PWM1_DUTYTIME.VALUE=500.053 -DRIVER.HET.VAR.HET2_BIT5_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM7_POLARITY.VALUE=3 -DRIVER.HET.VAR.HET2_BIT24_HRSHARE.VALUE=0x00001000 -DRIVER.HET.VAR.HET2_BIT16_HRSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_CAP0_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_BIT4_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE0_PIN_SELECT.VALUE=9 -DRIVER.HET.VAR.HET2_BIT10_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_CAP6_PIN_SELECT.VALUE=28 -DRIVER.HET.VAR.HET1_PWM2_PERIOD.VALUE=1000.000 -DRIVER.HET.VAR.HET2_EDGE5_BOTH.VALUE=0 -DRIVER.HET.VAR.HET2_BIT21_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT13_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT3_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE0_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET2_PWM7_ACTUALPERIOD.VALUE=1000.106 -DRIVER.HET.VAR.HET2_BIT3_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT25_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT17_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE4_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT31_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_BIT29_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT23_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_BIT15_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_BIT0_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_CAP2_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET2_PWM7_DUTY.VALUE=50 -DRIVER.HET.VAR.HET2_BIT6_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM4_PERIOD_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT11_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT26_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT18_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_PWM6_PERIOD_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM2_ACTION.VALUE=3 -DRIVER.HET.VAR.HET2_BIT9_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_PWM7_DUTY_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM3_PERIOD_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM2_ENA.VALUE=0 -DRIVER.HET.VAR.HET2_BIT20_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT12_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE3_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM7_PIN_SELECT.VALUE=19 -DRIVER.HET.VAR.HET2_BIT2_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_CAP0_PIN_SELECT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT27_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT19_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT6_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM0_DUTY_PRESCALER.VALUE=75136 -DRIVER.HET.VAR.HET2_EDGE7_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM0_POLARITY.VALUE=3 -DRIVER.HET.VAR.HET1_BIT26_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT18_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT10_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE6_PIN_SELECT.VALUE=22 -DRIVER.HET.VAR.HET1_PWM0_ACTUALPERIOD.VALUE=1000.106 -DRIVER.HET.VAR.HET2_HR_FREQUENCY.VALUE=110.000 -DRIVER.HET.VAR.HET2_BIT30_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT25_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_BIT22_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT17_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_BIT14_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM5_PERIOD_PRESCALER.VALUE=149888 -DRIVER.HET.VAR.HET2_EDGE4_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET2_EDGE0_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT7_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT4_HRSHARE.VALUE=0x00000004 -DRIVER.HET.VAR.HET1_BIT2_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT28_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT4_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT26_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT18_PSL.VALUE=0x00000000 -DRIVER.RTP.VAR.RTP_PORT_BIT1_DOUT.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT3_FUN.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT1_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT5_DIR.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT14_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT11_DIR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT3_PDR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT8_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT4_FUN.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT6_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT2_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT10_FUN.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT6_DIR.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT14_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT12_DIR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT17_DOUT.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT4_PDR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT10_PDR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT2_DOUT.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT5_FUN.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT3_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT11_FUN.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT7_DIR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT13_DIR.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT5_PDR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT11_PDR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT9_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT6_FUN.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT12_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT4_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT12_FUN.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT8_DIR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT10_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT15_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT14_DIR.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT18_DOUT.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT6_PDR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT0_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT4_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT12_PDR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT3_DOUT.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT7_FUN.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT5_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT13_FUN.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT9_DIR.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT11_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT15_DIR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT7_PDR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT13_PDR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT8_FUN.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT6_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT14_FUN.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT12_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT16_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT16_DIR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT17_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT8_PDR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT1_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT10_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT14_PDR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT4_DOUT.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT9_FUN.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT7_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT15_FUN.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT9_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT13_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT10_DOUT.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT17_DIR.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT2_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT9_PDR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT15_PDR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT8_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT16_FUN.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT14_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT18_DIR.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT17_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_BASE_PORT.VALUE=0xFFFFFA38 -DRIVER.RTP.VAR.RTP_PORT_BIT2_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT16_PDR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT5_DOUT.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT9_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT17_FUN.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT15_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT15_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT11_DOUT.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT17_PDR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT7_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT18_FUN.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT16_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT18_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT3_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT18_PDR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT6_DOUT.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT17_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT12_DOUT.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT13_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT18_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT4_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT5_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT7_DOUT.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT10_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT13_DOUT.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT18_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT5_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT11_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT8_DOUT.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT0_DIR.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT11_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT14_DOUT.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT3_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT1_DIR.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT6_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT0_FUN.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT9_DOUT.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT2_DIR.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT12_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT16_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT15_DOUT.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT0_PDR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT0_DOUT.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT1_FUN.VALUE=1 -DRIVER.RTP.VAR.RTP_BASE.VALUE=0xFFFFFA00 -DRIVER.RTP.VAR.RTP_PORT_BIT3_DIR.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT8_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT1_PDR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT7_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT2_FUN.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT0_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT4_DIR.VALUE=0 -DRIVER.RTP.VAR.RTP_BASE_RAM.VALUE=0xFFF83000 -DRIVER.RTP.VAR.RTP_PORT_BIT13_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT10_DIR.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT16_DOUT.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT2_PDR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT14_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT17_DOUT.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT17_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT4_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT1_DIR.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT18_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT0_FUN.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT15_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT4_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT2_DIR.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT7_DOUT.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT15_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT18_DOUT.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT0_PDR.VALUE=0 -DRIVER.DMM.VAR.DMM_BASE.VALUE=0xFFFFF700 -DRIVER.DMM.VAR.DMM_PORT_BIT1_FUN.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT3_DIR.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT9_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT1_PDR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT2_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT2_FUN.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT0_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT5_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT4_DIR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT8_DOUT.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT16_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT2_PDR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT13_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT3_FUN.VALUE=1 -DRIVER.DMM.VAR.DMM_BASE_PORT.VALUE=0xFFFFF770 -DRIVER.DMM.VAR.DMM_PORT_BIT1_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT5_DIR.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT10_DOUT.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT3_PDR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT4_FUN.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT2_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT6_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT6_DIR.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT7_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT9_DOUT.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT17_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT4_PDR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT5_FUN.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT3_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT0_DOUT.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT7_DIR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT18_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT11_DOUT.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT11_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT5_PDR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT6_FUN.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT4_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT8_DIR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT7_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT18_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT6_PDR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT10_DIR.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT7_FUN.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT5_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT5_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT1_DOUT.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT9_DIR.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT12_DOUT.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT7_PDR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT11_DIR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT8_FUN.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT16_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT6_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT8_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT10_FUN.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT8_PDR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT12_DIR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT9_FUN.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT10_PDR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT7_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT2_DOUT.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT10_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT13_DOUT.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT11_FUN.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT9_PDR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT13_DIR.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT3_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT11_PDR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT8_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT9_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT12_FUN.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT10_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT14_DIR.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT14_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT0_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT12_PDR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT9_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT3_DOUT.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT11_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT14_DOUT.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT13_FUN.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT11_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT15_DIR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT13_PDR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT8_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT14_FUN.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT12_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT16_DIR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT1_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT14_PDR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT4_DOUT.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT12_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT15_DOUT.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT15_FUN.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT12_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT13_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT17_DIR.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT15_PDR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT16_FUN.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT14_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT18_DIR.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT2_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT6_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT16_PDR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT5_DOUT.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT13_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT16_DOUT.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT17_FUN.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT15_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT17_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT17_PDR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT10_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT18_FUN.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT16_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT3_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT0_DIR.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT18_PDR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT6_DOUT.VALUE=0 -DRIVER.I2C.VAR.I2C1_STOPBITS.VALUE=2 -DRIVER.I2C.VAR.I2C1_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.I2C.VAR.I2C1_BASE_PORT.VALUE=0xFFF7D44C -DRIVER.I2C.VAR.I2C2_PARITYENA.VALUE=0 -DRIVER.I2C.VAR.I2C1_DATACOUNT.VALUE=8 -DRIVER.I2C.VAR.I2C2_PORT_BIT0_PULL.VALUE=2 -DRIVER.I2C.VAR.I2C1_IGNACK.VALUE=0 -DRIVER.I2C.VAR.I2C1_ADDRMODE.VALUE=7BIT_AMODE -DRIVER.I2C.VAR.I2C2_ALINTLVL.VALUE=0 -DRIVER.I2C.VAR.I2C2_TXDMA.VALUE=0 -DRIVER.I2C.VAR.I2C1_BC_VALUE.VALUE=0x0003 -DRIVER.I2C.VAR.I2C1_TXRX_VALUE.VALUE=0 -DRIVER.I2C.VAR.I2C2_ICXRDYINTLVL.VALUE=0 -DRIVER.I2C.VAR.I2C2_MODCLK.VALUE=8 -DRIVER.I2C.VAR.I2C2_PORT_BIT1_PULL.VALUE=2 -DRIVER.I2C.VAR.I2C2_PORT_BIT0_DIR.VALUE=0 -DRIVER.I2C.VAR.I2C1_ALINTENA.VALUE=0 -DRIVER.I2C.VAR.I2C1_PRESCALE.VALUE=8 -DRIVER.I2C.VAR.I2C2_ARDYINTENA.VALUE=0 -DRIVER.I2C.VAR.I2C2_PORT_BIT1_DIR.VALUE=0 -DRIVER.I2C.VAR.I2C2_PORT_BIT0_FUN.VALUE=0 -DRIVER.I2C.VAR.I2C1_MSMODE.VALUE=1 -DRIVER.I2C.VAR.I2C1_AASLVL.VALUE=0 -DRIVER.I2C.VAR.I2C2_PORT_BIT0_PDR.VALUE=0 -DRIVER.I2C.VAR.I2C2_RM_ENA.VALUE=0 -DRIVER.I2C.VAR.I2C2_PORT_BIT1_FUN.VALUE=0 -DRIVER.I2C.VAR.I2C2_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.I2C.VAR.I2C2_SCDLVL.VALUE=0 -DRIVER.I2C.VAR.I2C2_PORT_BIT1_PDR.VALUE=0 -DRIVER.I2C.VAR.I2C2_STPCND.VALUE=1 -DRIVER.I2C.VAR.I2C1_ALINTLVL.VALUE=0 -DRIVER.I2C.VAR.I2C2_PORT_BIT0_PSL.VALUE=1 -DRIVER.I2C.VAR.I2C1_ARDYINTENA.VALUE=0 -DRIVER.I2C.VAR.I2C2_ARDYINTLVL.VALUE=0 -DRIVER.I2C.VAR.I2C1_ICRRDYINTENA.VALUE=0 -DRIVER.I2C.VAR.I2C2_BASE_PORT.VALUE=0xFFF7D54C -DRIVER.I2C.VAR.I2C1_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.I2C.VAR.I2C2_PORT_BIT1_PSL.VALUE=1 -DRIVER.I2C.VAR.I2C2_DATACOUNT.VALUE=8 -DRIVER.I2C.VAR.I2C1_LENGTH.VALUE=8 -DRIVER.I2C.VAR.I2C1_TXRX.VALUE=TRANSMITTER -DRIVER.I2C.VAR.I2C2_NACKINTENA.VALUE=0 -DRIVER.I2C.VAR.I2C2_IGNACK.VALUE=0 -DRIVER.I2C.VAR.I2C1_PORT_BIT0_DOUT.VALUE=0 -DRIVER.I2C.VAR.I2C1_STACND.VALUE=1 -DRIVER.I2C.VAR.I2C2_TXRX.VALUE=TRANSMITTER -DRIVER.I2C.VAR.I2C1_PORT_BIT0_DIR.VALUE=0 -DRIVER.I2C.VAR.I2C1_ARDYINTLVL.VALUE=0 -DRIVER.I2C.VAR.I2C1_ICRRDYINTLVL.VALUE=0 -DRIVER.I2C.VAR.I2C1_PARITYENA.VALUE=0 -DRIVER.I2C.VAR.I2C1_BASE.VALUE=0xFFF7D400 -DRIVER.I2C.VAR.I2C1_PORT_BIT1_DIR.VALUE=0 -DRIVER.I2C.VAR.I2C1_PORT_BIT1_DOUT.VALUE=0 -DRIVER.I2C.VAR.I2C1_ICXRDYINTENA.VALUE=0 -DRIVER.I2C.VAR.I2C1_PORT_BIT0_FUN.VALUE=0 -DRIVER.I2C.VAR.I2C1_NACKINTENA.VALUE=0 -DRIVER.I2C.VAR.I2C2_NACKINTLVL.VALUE=0 -DRIVER.I2C.VAR.I2C2_BAUDRATE.VALUE=100 -DRIVER.I2C.VAR.I2C1_AAS.VALUE=0 -DRIVER.I2C.VAR.I2C1_BCM.VALUE=0 -DRIVER.I2C.VAR.I2C1_PORT_BIT0_PDR.VALUE=0 -DRIVER.I2C.VAR.I2C2_MSMODE.VALUE=1 -DRIVER.I2C.VAR.I2C2_STOPBITS.VALUE=2 -DRIVER.I2C.VAR.I2C1_BC.VALUE=8_BIT -DRIVER.I2C.VAR.I2C1_PORT_BIT1_FUN.VALUE=0 -DRIVER.I2C.VAR.I2C2_EVENPARITY.VALUE=0 -DRIVER.I2C.VAR.I2C2_ICRRDYINTENA.VALUE=0 -DRIVER.I2C.VAR.I2C1_FDF.VALUE=0 -DRIVER.I2C.VAR.I2C2_BASE.VALUE=0xFFF7D500 -DRIVER.I2C.VAR.I2C2_AASLVL.VALUE=0 -DRIVER.I2C.VAR.I2C2_AAS.VALUE=0 -DRIVER.I2C.VAR.I2C1_ICCH.VALUE=37 -DRIVER.I2C.VAR.I2C2_BCM.VALUE=0 -DRIVER.I2C.VAR.I2C2_BC.VALUE=2_BIT -DRIVER.I2C.VAR.I2C1_MODCLK.VALUE=8 -DRIVER.I2C.VAR.I2C1_ADDRMODE_VALUE.VALUE=0x0001 -DRIVER.I2C.VAR.I2C2_PORT_BIT0_DOUT.VALUE=0 -DRIVER.I2C.VAR.I2C1_ICCL.VALUE=37 -DRIVER.I2C.VAR.I2C1_PORT_BIT1_PDR.VALUE=0 -DRIVER.I2C.VAR.I2C2_ADDRMODE.VALUE=7BIT_AMODE -DRIVER.I2C.VAR.I2C2_FDF.VALUE=0 -DRIVER.I2C.VAR.I2C1_PORT_BIT0_PSL.VALUE=1 -DRIVER.I2C.VAR.I2C1_RXDMA.VALUE=0 -DRIVER.I2C.VAR.I2C1_PORT_BIT1_PSL.VALUE=1 -DRIVER.I2C.VAR.I2C2_BC_VALUE.VALUE=0x0003 -DRIVER.I2C.VAR.I2C1_PORT_BIT0_PULL.VALUE=2 -DRIVER.I2C.VAR.I2C1_ICXRDYINTLVL.VALUE=0 -DRIVER.I2C.VAR.I2C2_ICCH.VALUE=37 -DRIVER.I2C.VAR.I2C1_NACKINTLVL.VALUE=0 -DRIVER.I2C.VAR.I2C2_ICCL.VALUE=37 -DRIVER.I2C.VAR.I2C2_PORT_BIT1_DOUT.VALUE=0 -DRIVER.I2C.VAR.I2C1_SCD.VALUE=0 -DRIVER.I2C.VAR.I2C1_TXDMA.VALUE=0 -DRIVER.I2C.VAR.I2C2_LENGTH.VALUE=8 -DRIVER.I2C.VAR.I2C1_EVENPARITY.VALUE=0 -DRIVER.I2C.VAR.I2C1_RM_ENA.VALUE=0 -DRIVER.I2C.VAR.I2C2_ICRRDYINTLVL.VALUE=0 -DRIVER.I2C.VAR.I2C2_ALINTENA.VALUE=0 -DRIVER.I2C.VAR.I2C2_PRESCALE.VALUE=8 -DRIVER.I2C.VAR.I2C2_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.I2C.VAR.I2C1_SCDLVL.VALUE=0 -DRIVER.I2C.VAR.I2C2_SCD.VALUE=0 -DRIVER.I2C.VAR.I2C1_PORT_BIT1_PULL.VALUE=2 -DRIVER.I2C.VAR.I2C2_TXRX_VALUE.VALUE=0 -DRIVER.I2C.VAR.I2C1_STPCND.VALUE=1 -DRIVER.I2C.VAR.I2C2_ICXRDYINTENA.VALUE=0 -DRIVER.I2C.VAR.I2C2_ADDRMODE_VALUE.VALUE=0x0001 -DRIVER.I2C.VAR.I2C1_BAUDRATE.VALUE=100 -DRIVER.I2C.VAR.I2C2_STACND.VALUE=1 -DRIVER.I2C.VAR.I2C2_RXDMA.VALUE=0 -DRIVER.DCC.VAR.DCC1_ENABLE_KEY.VALUE=10 -DRIVER.DCC.VAR.PINMUX_BASE.VALUE=0xFFFFEA00 -DRIVER.DCC.VAR.DCC1_DETECTION_TIME.VALUE=2500.00 -DRIVER.DCC.VAR.DCC1_CLOCK_SOURCE1_VALUE.VALUE=0x0002 -DRIVER.DCC.VAR.DCC1_ENABLE_ERROR_INTERRUPT.VALUE=0xA -DRIVER.DCC.VAR.DCC2_ENABLE.VALUE=0xA -DRIVER.DCC.VAR.PINMUX_BASE_PORT.VALUE=0xFFFFEA40 -DRIVER.DCC.VAR.DCC2_ENABLE_ERROR_INTERRUPT.VALUE=0xA -DRIVER.DCC.VAR.DCC2_CLOCK_SOURCE0_VALUE.VALUE=0x0001 -DRIVER.DCC.VAR.DCC2_CLOCK_SOURCE0_FREQ.VALUE=0 -DRIVER.DCC.VAR.DCC2_VALID0_SEED.VALUE=0 -DRIVER.DCC.VAR.DCC2_CLKT_N2HET2_0_FREQ.VALUE=1 -DRIVER.DCC.VAR.DCC2_CLOCK_SOURCE1_FREQ.VALUE=0 -DRIVER.DCC.VAR.DCC2_DETECTION_TIME.VALUE=2500.00 -DRIVER.DCC.VAR.DCC2_CLOCK_DRIFT.VALUE=1.0 -DRIVER.DCC.VAR.DCC2_CLOCK_SOURCE1_VALUE.VALUE=0x0002 -DRIVER.DCC.VAR.DCC1_CLKT_N2HET1_31_FREQ.VALUE=1 -DRIVER.DCC.VAR.DCC2_COUNT0_SEED.VALUE=0 -DRIVER.DCC.VAR.DCC2_CLOCK_SOURCE0.VALUE=OSCIN -DRIVER.DCC.VAR.DCC2_CLOCK_SOURCE1.VALUE=VCLK -DRIVER.DCC.VAR.DCC1_CLOCK_SOURCE0_FREQ.VALUE=16.0 -DRIVER.DCC.VAR.DCC1_VALID0_SEED.VALUE=792 -DRIVER.DCC.VAR.DCC1_BASE.VALUE=0xFFFFEC00 -DRIVER.DCC.VAR.DCC2_COUNT1_SEED.VALUE=0 -DRIVER.DCC.VAR.DCC1_CLOCK_SOURCE1_FREQ.VALUE=300.0 -DRIVER.DCC.VAR.DCC1_CLOCK_DRIFT.VALUE=1.0 -DRIVER.DCC.VAR.DCC1_ENABLE.VALUE=0xA -DRIVER.DCC.VAR.DCC1_ENABLE_SINGLESHOT_MODE.VALUE=0x5 -DRIVER.DCC.VAR.DCC2_ENABLE_SINGLESHOT_MODE.VALUE=0x5 -DRIVER.DCC.VAR.DCC2_BASE.VALUE=0xFFFFF400 -DRIVER.DCC.VAR.DCC1_DONE_INTERRUPT_ENABLE.VALUE=0xA -DRIVER.DCC.VAR.DCC2_DONE_INTERRUPT_ENABLE.VALUE=0xA -DRIVER.DCC.VAR.DCC2_ENABLE_KEY.VALUE=0xA -DRIVER.DCC.VAR.DCC1_COUNT0_SEED.VALUE=39204 -DRIVER.DCC.VAR.DCC1_CLOCK_SOURCE0_VALUE.VALUE=0x0001 -DRIVER.DCC.VAR.DCC1_CLOCK_SOURCE0.VALUE=OSCIN -DRIVER.DCC.VAR.DCC1_CLOCK_SOURCE1.VALUE=PLL1 -DRIVER.DCC.VAR.CLKT_TCK_FREQ.VALUE=12.0 -DRIVER.DCC.VAR.DCC1_COUNT1_SEED.VALUE=742500 -DRIVER.PINMUX.VAR.EQEP2A_FILTER.VALUE=0 -DRIVER.PINMUX.VAR.MUX61_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX53_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX45_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX37_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX29_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX7_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX61_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX53_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX45_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX37_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX29_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX7_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_SOC4A_SELECT.VALUE=ON -DRIVER.PINMUX.VAR.ETPWM_TIME_BASE_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX61_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX53_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX50_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX45_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX42_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX37_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX34_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX29_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX26_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX18_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX61_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX53_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX45_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX37_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX29_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX61_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX53_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX45_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX37_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX29_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX61_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX53_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX45_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX37_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX29_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX99_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_96_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_88_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_5_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX30_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX22_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX14_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX30_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX22_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX14_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX30_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX22_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX14_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_81_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_73_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_65_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_57_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_49_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX30_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX22_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX14_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL5_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX30_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX22_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX14_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL5_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX30_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX22_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX14_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX101_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL55_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL47_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL39_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_50_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_42_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_34_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_26_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_18_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.ECAP5_FILTER.VALUE=0 -DRIVER.PINMUX.VAR.EMIF_OUTPUT_ENABLE_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.PINMUX10.VALUE="PINMUX_BALL_K17_EMIF_nCS_3 | PINMUX_BALL_M17_EMIF_nCS_4 | PINMUX_BALL_R3_EMIF_nRAS | PINMUX_BALL_P3_EMIF_nWAIT" -DRIVER.PINMUX.VAR.MUX11_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL40_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL32_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL24_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL16_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_11_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX11.VALUE="PINMUX_BALL_D17_EMIF_nWE | PINMUX_BALL_E9_ETMDATA_08 | PINMUX_BALL_E8_ETMDATA_09 | PINMUX_BALL_E7_ETMDATA_10" -DRIVER.PINMUX.VAR.PINMUX20.VALUE="PINMUX_BALL_M1_GIOA_7 | PINMUX_BALL_F2_GIOB_2 | PINMUX_BALL_W10_GIOB_3 | PINMUX_BALL_J2_GIOB_6" -DRIVER.PINMUX.VAR.PINMUX12.VALUE="PINMUX_BALL_E6_ETMDATA_11 | PINMUX_BALL_E13_ETMDATA_12 | PINMUX_BALL_E12_ETMDATA_13 | PINMUX_BALL_E11_ETMDATA_14" -DRIVER.PINMUX.VAR.PINMUX21.VALUE="PINMUX_BALL_F1_GIOB_7 | PINMUX_BALL_R2_MIBSPI1NCS_0 | PINMUX_BALL_F3_MIBSPI1NCS_1 | PINMUX_BALL_G3_MIBSPI1NCS_2" -DRIVER.PINMUX.VAR.PINMUX13.VALUE="PINMUX_BALL_E10_ETMDATA_15 | PINMUX_BALL_K15_ETMDATA_16 | PINMUX_BALL_L15_ETMDATA_17 | PINMUX_BALL_M15_ETMDATA_18" -DRIVER.PINMUX.VAR.ECAP3_FILTER_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.PINMUX30.VALUE="PINMUX_BALL_E18_N2HET1_08 | PINMUX_BALL_V7_N2HET1_09 | PINMUX_BALL_D19_N2HET1_10 | PINMUX_BALL_E3_N2HET1_11" -DRIVER.PINMUX.VAR.PINMUX22.VALUE="PINMUX_BALL_J3_MIBSPI1NCS_3 | PINMUX_BALL_G19_MIBSPI1NENA | PINMUX_BALL_V9_MIBSPI3CLK | PINMUX_BALL_V10_MIBSPI3NCS_0" -DRIVER.PINMUX.VAR.PINMUX14.VALUE="PINMUX_BALL_N15_ETMDATA_19 | PINMUX_BALL_E5_ETMDATA_20 | PINMUX_BALL_F5_ETMDATA_21 | PINMUX_BALL_G5_ETMDATA_22" -DRIVER.PINMUX.VAR.MUX92_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX84_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX76_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX68_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX31.VALUE="PINMUX_BALL_B4_N2HET1_12 | PINMUX_BALL_N2_N2HET1_13 | PINMUX_BALL_N1_N2HET1_15 | PINMUX_BALL_A4_N2HET1_16" -DRIVER.PINMUX.VAR.PINMUX23.VALUE="PINMUX_BALL_V5_MIBSPI3NCS_1 | PINMUX_BALL_B2_MIBSPI3NCS_2 | PINMUX_BALL_C3_MIBSPI3NCS_3 | PINMUX_BALL_W9_MIBSPI3NENA" -DRIVER.PINMUX.VAR.PINMUX15.VALUE="PINMUX_BALL_K5_ETMDATA_23 | PINMUX_BALL_L5_ETMDATA_24 | PINMUX_BALL_M5_ETMDATA_25 | PINMUX_BALL_N5_ETMDATA_26" -DRIVER.PINMUX.VAR.PINMUX32.VALUE="PINMUX_BALL_A13_N2HET1_17 | PINMUX_BALL_J1_N2HET1_18 | PINMUX_BALL_B13_N2HET1_19 | PINMUX_BALL_P2_N2HET1_20" -DRIVER.PINMUX.VAR.PINMUX24.VALUE="PINMUX_BALL_W8_MIBSPI3SIMO | PINMUX_BALL_V8_MIBSPI3SOMI | PINMUX_BALL_H19_MIBSPI5CLK | PINMUX_BALL_E19_MIBSPI5NCS_0" -DRIVER.PINMUX.VAR.PINMUX16.VALUE="PINMUX_BALL_P5_ETMDATA_27 | PINMUX_BALL_R5_ETMDATA_28 | PINMUX_BALL_R6_ETMDATA_29 | PINMUX_BALL_R7_ETMDATA_30" -DRIVER.PINMUX.VAR.SIGNAL56_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL48_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX131_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX123_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX115_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX107_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX33.VALUE="PINMUX_BALL_H4_N2HET1_21 | PINMUX_BALL_B3_N2HET1_22 | PINMUX_BALL_J4_N2HET1_23 | PINMUX_BALL_P1_N2HET1_24" -DRIVER.PINMUX.VAR.PINMUX25.VALUE="PINMUX_BALL_B6_MIBSPI5NCS_1 | PINMUX_BALL_W6_MIBSPI5NCS_2 | PINMUX_BALL_T12_MIBSPI5NCS_3 | PINMUX_BALL_H18_MIBSPI5NENA" -DRIVER.PINMUX.VAR.PINMUX17.VALUE="PINMUX_BALL_R8_ETMDATA_31 | PINMUX_BALL_R9_ETMTRACECLKIN | PINMUX_BALL_R10_ETMTRACECLKOUT | PINMUX_BALL_R11_ETMTRACECTL" -DRIVER.PINMUX.VAR.SIGNAL56_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL48_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX131_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX123_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX115_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX107_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.GIOB6_DMA_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.EQEP2B_FILTER_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.ETPWM7_EQEPERR_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.PINMUX34.VALUE="PINMUX_BALL_A14_N2HET1_26 | PINMUX_BALL_K19_N2HET1_28 | PINMUX_BALL_B11_N2HET1_30 | PINMUX_BALL_D8_N2HET2_01" -DRIVER.PINMUX.VAR.PINMUX26.VALUE="PINMUX_BALL_J19_MIBSPI5SIMO_0 | PINMUX_BALL_E16_MIBSPI5SIMO_1 | PINMUX_BALL_H17_MIBSPI5SIMO_2 | PINMUX_BALL_G17_MIBSPI5SIMO_3" -DRIVER.PINMUX.VAR.PINMUX18.VALUE="PINMUX_BALL_B15_FRAYTX1 | PINMUX_BALL_B8_FRAYTX2 | PINMUX_BALL_B16_FRAYTXEN1 | PINMUX_BALL_B9_FRAYTXEN2" -DRIVER.PINMUX.VAR.MUX131_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX123_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX115_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX107_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX35.VALUE="PINMUX_BALL_D7_N2HET2_02 | PINMUX_BALL_D3_N2HET2_12 | PINMUX_BALL_D2_N2HET2_13 | PINMUX_BALL_D1_N2HET2_14" -DRIVER.PINMUX.VAR.PINMUX27.VALUE="PINMUX_BALL_J18_MIBSPI5SOMI_0 | PINMUX_BALL_E17_MIBSPI5SOMI_1 | PINMUX_BALL_H16_MIBSPI5SOMI_2 | PINMUX_BALL_G16_MIBSPI5SOMI_3" -DRIVER.PINMUX.VAR.PINMUX19.VALUE="PINMUX_BALL_C1_GIOA_2 | PINMUX_BALL_E1_GIOA_3 | PINMUX_BALL_B5_GIOA_5 | PINMUX_BALL_H3_GIOA_6" -DRIVER.PINMUX.VAR.MUX131_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX123_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX115_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX107_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX36.VALUE="PINMUX_BALL_P4_N2HET2_19 | PINMUX_BALL_T5_N2HET2_20 | PINMUX_BALL_T4_MII_RXCLK | PINMUX_BALL_U7_MII_TX_CLK" -DRIVER.PINMUX.VAR.PINMUX28.VALUE="PINMUX_BALL_K18_N2HET1_00 | PINMUX_BALL_V2_N2HET1_01 | PINMUX_BALL_W5_N2HET1_02 | PINMUX_BALL_U1_N2HET1_03" -DRIVER.PINMUX.VAR.MUX131_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX123_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX115_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX107_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX98_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX37.VALUE="PINMUX_BALL_E2_N2HET2_03 | PINMUX_BALL_N3_N2HET2_07" -DRIVER.PINMUX.VAR.PINMUX29.VALUE="PINMUX_BALL_B12_N2HET1_04 | PINMUX_BALL_V6_N2HET1_05 | PINMUX_BALL_W3_N2HET1_06 | PINMUX_BALL_T1_N2HET1_07" -DRIVER.PINMUX.VAR.MUX131_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX123_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX115_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX107_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX98_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX98_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX7_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL3_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX98_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX80.VALUE=SIGNAL_AD2EVT_T10 -DRIVER.PINMUX.VAR.SIGNAL41_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL33_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL25_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL17_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX100_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX98_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.TEMP2_ENABLE.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX81.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL41_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL33_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL25_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL17_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX100_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX98_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX90.VALUE="SIGNAL_MII_RX_DV_U6 | SIGNAL_MII_RX_ER_U5 | SIGNAL_MII_RXCLK_T4 | SIGNAL_MII_RXD_0_U4" -DRIVER.PINMUX.VAR.PINMUX82.VALUE=0 -DRIVER.PINMUX.VAR.MUX127_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX119_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX100_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_133_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_125_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_117_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_109_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX91.VALUE="SIGNAL_MII_RXD_1_T3 | SIGNAL_MII_RXD_2_U3 | SIGNAL_MII_RXD_3_V3 | SIGNAL_MII_TX_CLK_U7" -DRIVER.PINMUX.VAR.PINMUX83.VALUE=SIGNAL_GIOA_0_A5 -DRIVER.PINMUX.VAR.MUX100_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX92.VALUE="SIGNAL_N2HET1_17_A13 | SIGNAL_N2HET1_19_B13 | SIGNAL_N2HET1_21_H4 | SIGNAL_N2HET1_23_J4" -DRIVER.PINMUX.VAR.PINMUX84.VALUE="SIGNAL_GIOA_1_C2 | SIGNAL_GIOA_2_C1 | SIGNAL_GIOA_3_E1 | SIGNAL_GIOA_4_A6" -DRIVER.PINMUX.VAR.MUX100_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX91_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX83_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX75_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX67_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX59_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX93.VALUE="SIGNAL_N2HET1_25_M3 | SIGNAL_N2HET1_27_A9 | SIGNAL_N2HET1_29_A3 | SIGNAL_N2HET1_31_J17" -DRIVER.PINMUX.VAR.PINMUX85.VALUE="SIGNAL_GIOA_5_B5 | SIGNAL_GIOA_6_H3 | SIGNAL_GIOA_7_M1 | SIGNAL_GIOB_0_M2" -DRIVER.PINMUX.VAR.MUX100_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX91_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX83_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX75_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX67_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX59_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.GIOB0_DMA_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.GIOA2_DMA_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.PINMUX94.VALUE="SIGNAL_N2HET2_00_D6 | SIGNAL_N2HET2_01_D8 | SIGNAL_N2HET2_02_D7 | SIGNAL_N2HET2_03_E2" -DRIVER.PINMUX.VAR.PINMUX86.VALUE="SIGNAL_GIOB_1_K2 | SIGNAL_GIOB_2_F2 | SIGNAL_GIOB_3_W10 | SIGNAL_GIOB_4_G1" -DRIVER.PINMUX.VAR.MUX91_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX83_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX75_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX67_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX61_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX59_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX53_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX45_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX37_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX29_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_110_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_102_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX95.VALUE="SIGNAL_N2HET2_04_D13 | SIGNAL_N2HET2_05_D12 | SIGNAL_N2HET2_06_D11 | SIGNAL_N2HET2_07_N3" -DRIVER.PINMUX.VAR.PINMUX87.VALUE="SIGNAL_GIOB_5_G2 | SIGNAL_GIOB_6_J2 | SIGNAL_GIOB_7_F1 | SIGNAL_MDIO_F4" -DRIVER.PINMUX.VAR.MUX91_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX83_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX75_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX67_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX59_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM2_EQEPERR12.VALUE=EQEPERR12 -DRIVER.PINMUX.VAR.PINMUX96.VALUE="SIGNAL_N2HET2_08_K16 | SIGNAL_N2HET2_09_L16 | SIGNAL_N2HET2_10_M16 | SIGNAL_N2HET2_11_N16" -DRIVER.PINMUX.VAR.PINMUX88.VALUE="SIGNAL_MIBSPI1NCS_4_U10 | SIGNAL_MIBSPI1NCS_5_U9" -DRIVER.PINMUX.VAR.SIGNAL10_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX91_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX83_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX75_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX67_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX59_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX6_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX97.VALUE="SIGNAL_N2HET2_12_D3 | SIGNAL_N2HET2_13_D2 | SIGNAL_N2HET2_14_D1 | SIGNAL_N2HET2_15_K4" -DRIVER.PINMUX.VAR.PINMUX89.VALUE="SIGNAL_MII_COL_W4 | SIGNAL_MII_CRS_V4" -DRIVER.PINMUX.VAR.SIGNAL10_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX91_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX83_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX75_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX67_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX59_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX6_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX98.VALUE="SIGNAL_N2HET2_16_L4 | SIGNAL_N2HET2_18_N4 | SIGNAL_N2HET2_20_T5 | SIGNAL_N2HET2_22_T7" -DRIVER.PINMUX.VAR.MUX6_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX99.VALUE="SIGNAL_nTZ1_1_N19 | SIGNAL_nTZ1_2_F1 | SIGNAL_nTZ1_3_J3" -DRIVER.PINMUX.VAR.MUX6_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.EQEP1A_FILTER.VALUE=0 -DRIVER.PINMUX.VAR.MUX60_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX52_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX44_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX36_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX28_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX6_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX60_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX52_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX44_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX36_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX28_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX6_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.EQEP1I_FILTER_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.ETPWM_SOC3A_SELECT.VALUE=ON -DRIVER.PINMUX.VAR.MUX60_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX52_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX44_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX36_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX28_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX60_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX52_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX44_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX36_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX28_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX60_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX52_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX44_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX36_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX28_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX60_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX52_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX44_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX36_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX28_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.TEMP3_ENABLE_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX120_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX112_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX104_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_94_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_86_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_78_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_3_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX21_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX13_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX21_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX13_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM3_EQEPERR_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.GIOA_DISABLE_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX30_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX22_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX21_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX14_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX13_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_71_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_63_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_55_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_47_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_39_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX21_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX13_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL4_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX21_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX13_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL4_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX21_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX13_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX95_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX87_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX79_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL61_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL53_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL45_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL37_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL29_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_40_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_32_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_24_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_16_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.ECAP3_FILTER.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM7_EQEPERR12.VALUE=EQEPERR12 -DRIVER.PINMUX.VAR.MUX129_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX129_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_TBCLK_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX129_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL30_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL22_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL14_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX129_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX129_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX129_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.I2C1.VALUE=0 -DRIVER.PINMUX.VAR.I2C2.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL55_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL47_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL39_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX130_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX122_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX114_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX106_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL55_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL47_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL39_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX130_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX122_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX114_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX106_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX130_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX122_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX114_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX106_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL8_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.GATE_EMIF_CLK.VALUE=0 -DRIVER.PINMUX.VAR.MUX130_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX122_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX114_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX106_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX130_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX122_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX114_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX106_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX97_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX89_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX130_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX122_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX114_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX106_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX97_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX89_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.EQEP1A_FILTER_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX97_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX89_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX80_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX72_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX64_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX56_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX48_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL1_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.GIOA0_DMA.VALUE=0 -DRIVER.PINMUX.VAR.MUX97_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX89_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL40_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL32_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL24_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL16_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX97_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX89_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL40_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL32_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL24_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL16_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX97_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX89_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.GIOB5_DMA_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.GIOA7_DMA_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.PIN_MUX_131_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_123_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_115_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_107_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX90_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX82_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX74_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX66_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX58_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX90_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX82_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX74_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX66_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX58_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX90_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX82_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX74_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX66_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX58_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX3_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_100_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX90_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX82_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX74_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX66_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX58_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX90_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX82_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX74_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX66_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX58_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX5_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX90_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX82_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX74_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX66_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX58_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX5_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.EQEP1S_FILTER_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX131_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX123_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX115_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX107_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX5_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX5_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX51_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX43_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX35_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX27_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX19_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX5_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX51_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX43_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX35_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX27_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX19_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX5_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.GIOA1_DMA_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.ECAP5_FILTER_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.ETPWM_SOC2A_SELECT.VALUE=ON -DRIVER.PINMUX.VAR.MUX51_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX43_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX41_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX35_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX33_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX27_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX25_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX19_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX17_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_99_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_8_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.GIOA1_DMA.VALUE=0 -DRIVER.PINMUX.VAR.MUX51_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX43_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX35_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX27_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX19_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX51_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX43_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX35_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX27_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX19_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX51_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX43_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX35_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX27_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX19_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.ALT_ADC_SELECT.VALUE=1 -DRIVER.PINMUX.VAR.MUX98_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_92_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_84_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_76_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_68_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_1_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX20_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX12_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX20_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX12_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX20_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX12_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL58_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_61_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_53_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_45_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_37_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_29_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX20_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX12_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL3_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX20_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX12_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL3_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX20_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX12_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX100_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL51_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL43_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL35_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL27_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL19_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_30_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_22_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_14_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.ECAP1_FILTER.VALUE=0 -DRIVER.PINMUX.VAR.CAN4.VALUE=0 -DRIVER.PINMUX.VAR.MUX128_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX128_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX128_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX10_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL20_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL12_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.GIOB0_DMA.VALUE=0 -DRIVER.PINMUX.VAR.GIOA2_DMA.VALUE=0 -DRIVER.PINMUX.VAR.MUX128_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX128_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX128_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.ETHERNET_SELECT.VALUE=MII -DRIVER.PINMUX.VAR.MUX91_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX83_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX75_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX67_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX59_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM5_EQEPERR12.VALUE=EQEPERR12 -DRIVER.PINMUX.VAR.CONCOUNT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL54_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL46_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL38_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX121_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX113_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX105_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL54_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL46_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL38_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX121_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX113_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX105_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.EQEP2I_FILTER_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX121_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX113_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX105_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL6_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX121_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX113_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX105_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX121_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX113_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX105_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX96_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX88_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX121_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX113_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX105_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX96_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX88_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX96_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX88_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX6_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_128_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX96_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX88_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL31_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL23_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL15_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX96_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX88_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.TEMP_CHECK.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL31_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL23_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL15_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX96_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX88_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM4_EQEPERR_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.GIOB_DISABLE_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX134_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX126_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX118_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_121_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_113_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_105_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.GIOB1_DMA.VALUE=0 -DRIVER.PINMUX.VAR.GIOA3_DMA.VALUE=0 -DRIVER.PINMUX.VAR.EQEP2I_FILTER.VALUE=0 -DRIVER.PINMUX.VAR.MUX81_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX73_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX65_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX57_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX49_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX81_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX73_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX65_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX57_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX49_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_TZ2_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX81_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX73_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX65_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX60_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX57_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX52_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX49_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX44_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX36_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX28_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX81_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX73_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX65_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX57_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX49_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.EQEP2B_FILTER.VALUE=0 -DRIVER.PINMUX.VAR.MUX81_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX73_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX65_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX57_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX49_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX4_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX81_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX73_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX65_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX57_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX49_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX4_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.GIOB4_DMA_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.GIOA6_DMA_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.ECAP.VALUE=0 -DRIVER.PINMUX.VAR.MUX4_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX4_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX50_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX42_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX34_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX26_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX18_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX4_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX50_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX42_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX34_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX26_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX18_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX4_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_SOC1A_SELECT.VALUE=ON -DRIVER.PINMUX.VAR.MUX50_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX42_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX34_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX26_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX18_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_97_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_89_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_6_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX50_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX42_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX34_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX26_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX18_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL9_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX50_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX42_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX34_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX26_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX18_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL9_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX50_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX42_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX34_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX26_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX18_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.ECAP2_FILTER_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX111_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX103_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_90_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_82_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_74_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_66_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_58_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.GIOB2_DMA.VALUE=0 -DRIVER.PINMUX.VAR.GIOA4_DMA.VALUE=0 -DRIVER.PINMUX.VAR.MUX11_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX11_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.GIOA0_DMA_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.EQEP2A_FILTER_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX21_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX13_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX11_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL56_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL48_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_51_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_43_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_35_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_27_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_19_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX11_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.ECAP6_FILTER.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL2_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX11_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_TBCLK_SYNC_ENABLE.VALUE=0 -DRIVER.PINMUX.VAR.AD1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL2_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX11_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.AD2.VALUE=0 -DRIVER.PINMUX.VAR.MUX94_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX86_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX78_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL41_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL33_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL25_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL17_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_20_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_12_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX127_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX119_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX127_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX119_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX127_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX119_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL10_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX127_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX119_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX127_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX119_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX127_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX119_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.EQEP2S_FILTER_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX9_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.GIOB3_DMA.VALUE=0 -DRIVER.PINMUX.VAR.GIOA5_DMA.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL61_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL53_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL45_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL37_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL29_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX120_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX112_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX104_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL61_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL53_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL45_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL37_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL29_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX120_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX112_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX104_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX129_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX120_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX112_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX104_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL4_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.ALT_ADC.VALUE=0 -DRIVER.PINMUX.VAR.I2C.VALUE=0 -DRIVER.PINMUX.VAR.MUX120_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX112_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX104_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX120_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX112_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX104_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX95_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX87_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX79_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.TEMP3_ENABLE.VALUE=0 -DRIVER.PINMUX.VAR.MUX120_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX112_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX104_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX95_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX87_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX79_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX95_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX87_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX79_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX71_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX63_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX55_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX47_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX39_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_134_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_126_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_118_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX95_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX87_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX79_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM3_EQEPERR12.VALUE=EQEPERR12 -DRIVER.PINMUX.VAR.SIGNAL30_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL22_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL14_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX95_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX87_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX79_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL30_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL22_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL14_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX95_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX87_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX79_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.TEMP2_ENABLE_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.PIN_MUX_111_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_103_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.EQEP1I_FILTER.VALUE=0 -DRIVER.PINMUX.VAR.MUX80_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX72_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX64_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX56_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX48_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.HET1.VALUE=0 -DRIVER.PINMUX.VAR.MUX80_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX72_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX64_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX56_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX48_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_SOC7A_SELECT.VALUE=ON -DRIVER.PINMUX.VAR.HET2.VALUE=0 -DRIVER.PINMUX.VAR.MUX80_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX72_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX64_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX56_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX48_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX2_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.GIOB4_DMA.VALUE=0 -DRIVER.PINMUX.VAR.GIOA6_DMA.VALUE=0 -DRIVER.PINMUX.VAR.MUX80_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX72_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX64_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX56_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX48_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.EQEP1B_FILTER.VALUE=0 -DRIVER.PINMUX.VAR.MUX80_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX72_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX64_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX56_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX48_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX3_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX80_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX72_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX64_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX56_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX48_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX3_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX130_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX122_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX114_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX106_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX3_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX3_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.EMIF.VALUE=0 -DRIVER.PINMUX.VAR.MUX41_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX33_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX25_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX17_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX3_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_TZ1.VALUE=ASYNC -DRIVER.PINMUX.VAR.MUX41_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX33_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX25_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX17_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX3_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_TZ2.VALUE=ASYNC -DRIVER.PINMUX.VAR.MUX41_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX40_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX33_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX32_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX25_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX24_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX17_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX16_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_95_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_87_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_79_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_4_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_TZ3.VALUE=ASYNC -DRIVER.PINMUX.VAR.MUX41_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX33_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX25_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX17_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL8_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX41_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX33_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX25_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX17_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL8_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX41_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX33_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX25_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX17_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.GIOB3_DMA_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.GIOA5_DMA_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX97_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX89_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_80_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_72_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_64_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_56_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_48_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.GIOA.VALUE=0 -DRIVER.PINMUX.VAR.GIOB.VALUE=0 -DRIVER.PINMUX.VAR.MUX10_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.GIOB_DISABLE.VALUE=0 -DRIVER.PINMUX.VAR.MUX10_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX10_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL54_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL46_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL38_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_41_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_33_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_25_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_17_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.GIOB5_DMA.VALUE=0 -DRIVER.PINMUX.VAR.GIOA7_DMA.VALUE=0 -DRIVER.PINMUX.VAR.MUX10_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.ECAP4_FILTER.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL1_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX10_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL1_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX10_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM5_EQEPERR_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.SIGNAL31_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL23_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL15_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_10_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL59_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX134_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX126_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX118_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL59_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX134_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX126_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX118_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.EQEP.VALUE=0 -DRIVER.PINMUX.VAR.MUX134_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX126_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX118_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX134_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX126_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX118_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX134_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX126_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX118_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX134_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX126_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX118_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX90_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX82_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX74_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX66_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX58_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL9_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MIBSPI1.VALUE=0 -DRIVER.PINMUX.VAR.MIBSPI2.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL60_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL52_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL44_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL36_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL28_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX111_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX103_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MIBSPI3.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL60_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL52_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL44_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL36_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL28_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX111_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX103_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MIBSPI4.VALUE=0 -DRIVER.PINMUX.VAR.OHCI0.VALUE=0 -DRIVER.PINMUX.VAR.MUX111_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX103_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL2_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.GIOB6_DMA.VALUE=0 -DRIVER.PINMUX.VAR.MIBSPI5.VALUE=0 -DRIVER.PINMUX.VAR.W2FC.VALUE=0 -DRIVER.PINMUX.VAR.OHCI1.VALUE=0 -DRIVER.PINMUX.VAR.MUX111_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX103_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.EQEP2S_FILTER.VALUE=0 -DRIVER.PINMUX.VAR.MUX111_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX103_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX94_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX86_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX78_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.TEMP1_ENABLE.VALUE=0 -DRIVER.PINMUX.VAR.MUX111_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX103_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX94_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX86_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX78_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.ECAP4_FILTER_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX94_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX86_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX78_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX5_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_132_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_124_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_116_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_108_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX94_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX86_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX78_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL21_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL13_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX94_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX86_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX78_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX9_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL21_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL13_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX94_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX86_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX78_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX9_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX133_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX125_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX117_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX109_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX9_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_101_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX9_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX71_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX63_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX55_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX47_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX39_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX9_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX71_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX63_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX55_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX47_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX39_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX9_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_SOC6A_SELECT.VALUE=ON -DRIVER.PINMUX.VAR.MUX71_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX63_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX55_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX51_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX47_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX43_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX39_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX35_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX27_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX19_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX71_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX63_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX55_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX47_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX39_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM1_EQEPERR12.VALUE=EQEPERR12 -DRIVER.PINMUX.VAR.MUX71_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX63_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX55_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX47_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX39_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX2_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.EMIF_OUTPUT_ENABLE.VALUE=0 -DRIVER.PINMUX.VAR.MUX71_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX63_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX55_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX47_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX39_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX2_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM1_EQEPERR_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX2_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_9_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.GIOB7_DMA.VALUE=0 -DRIVER.PINMUX.VAR.MUX2_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX40_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX32_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX24_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX16_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX2_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX40_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX32_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX24_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX16_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX2_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_EPWM1SYNCI_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX40_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX32_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX24_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX16_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_93_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_85_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_77_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_69_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_2_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX40_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX32_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX24_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX16_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL7_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX40_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX32_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX24_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX16_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL7_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX40_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX32_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX24_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX16_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX110_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX102_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL59_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_70_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_62_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_54_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_46_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_38_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MII.VALUE=0 -DRIVER.PINMUX.VAR.SCI2.VALUE=0 -DRIVER.PINMUX.VAR.GIOA_DISABLE.VALUE=0 -DRIVER.PINMUX.VAR.SCI3.VALUE=0 -DRIVER.PINMUX.VAR.GATE_EMIF_CLK_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.SCI4.VALUE=0 -DRIVER.PINMUX.VAR.MUX20_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX12_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL60_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL52_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL44_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL36_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL28_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_31_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_23_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_15_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.ECAP2_FILTER.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_TIME_BASE_SYNC_ENABLE.VALUE=0 -DRIVER.PINMUX.VAR.GIOB2_DMA_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.GIOA4_DMA_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX93_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX85_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX77_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX69_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL21_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL13_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_EPWM1SYNCI.VALUE=ASYNC -DRIVER.PINMUX.VAR.ETPWM6_EQEPERR12.VALUE=EQEPERR12 -DRIVER.PINMUX.VAR.SIGNAL58_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX133_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX125_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX117_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX109_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL58_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX133_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX125_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX117_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX109_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX133_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX125_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX117_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX109_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_SOC1A.VALUE=1 -DRIVER.PINMUX.VAR.SCI.VALUE=0 -DRIVER.PINMUX.VAR.MUX133_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX125_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX117_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX109_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX133_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX125_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX117_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX109_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_SOC2A.VALUE=1 -DRIVER.PINMUX.VAR.MUX133_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX125_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX117_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX109_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX8_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL7_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_SOC3A.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL51_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL43_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL35_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL27_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL19_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX110_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX102_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_SOC4A.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL51_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL43_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL35_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL27_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL19_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX110_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX102_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX128_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX110_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX102_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_129_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_SOC5A.VALUE=1 -DRIVER.PINMUX.VAR.ETPWM.VALUE=0 -DRIVER.PINMUX.VAR.MUX110_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX102_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.EQEP1S_FILTER.VALUE=0 -DRIVER.PINMUX.VAR.MUX110_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX102_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX93_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX85_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX77_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX69_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_SOC6A.VALUE=1 -DRIVER.PINMUX.VAR.MUX110_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX102_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX93_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX85_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX77_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX69_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX93_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX85_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX77_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX70_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX69_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX62_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX54_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX46_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX38_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_130_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_122_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_114_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_106_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_SOC7A.VALUE=1 -DRIVER.PINMUX.VAR.MUX93_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX85_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX77_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX69_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL20_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL12_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX93_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX85_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX77_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX69_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX8_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL20_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL12_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX93_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX85_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX77_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX69_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX8_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.ECAP1_FILTER_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.ETPWM_TZ3_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX8_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX8_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX70_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX62_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX54_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX46_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX38_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX8_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX70_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX62_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX54_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX46_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX38_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX8_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.EQEP1B_FILTER_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.ETPWM_SOC5A_SELECT.VALUE=ON -DRIVER.PINMUX.VAR.ETPWM6_EQEPERR_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX70_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX62_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX54_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX46_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX38_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX1_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX70_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX62_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX54_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX46_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX38_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX70_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX62_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX54_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX46_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX38_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX1_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX70_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX62_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX54_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX46_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX38_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX1_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX121_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX113_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX105_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX1_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_98_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_7_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX1_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX31_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX23_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX15_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX1_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX31_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX23_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX15_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX1_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX31_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX31_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX23_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX23_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX15_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX15_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_91_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_83_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_75_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_67_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_59_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX31_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX23_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX15_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL6_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX31_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX23_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX15_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL6_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX31_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX23_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX15_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX96_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX88_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL57_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL49_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_60_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_52_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_44_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_36_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_28_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.GIOB7_DMA_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.ECAP6_FILTER_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.SIGNAL50_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL42_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL34_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL26_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL18_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_21_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_13_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL11_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SPI2.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL57_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL49_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX132_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX124_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX116_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX108_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL57_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL49_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX132_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX124_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX116_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX108_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.TEMP1_ENABLE_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.SPI4.VALUE=0 -DRIVER.PINMUX.VAR.MUX132_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX124_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX116_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX108_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.RMII.VALUE=0 -DRIVER.PINMUX.VAR.MUX132_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX124_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX116_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX108_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX0.VALUE="PINMUX_BALL_N19_AD1EVT | PINMUX_BALL_D4_EMIF_ADDR_00 | PINMUX_BALL_D5_EMIF_ADDR_01 | PINMUX_BALL_C4_EMIF_ADDR_06" -DRIVER.PINMUX.VAR.MUX132_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX124_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX116_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX108_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX99_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX1.VALUE="PINMUX_BALL_C5_EMIF_ADDR_07 | PINMUX_BALL_C6_EMIF_ADDR_08 | PINMUX_BALL_C7_EMIF_ADDR_09 | PINMUX_BALL_C8_EMIF_ADDR_10" -DRIVER.PINMUX.VAR.MUX132_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX124_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX116_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX108_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX99_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.GIOB1_DMA_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.GIOA3_DMA_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.ETPWM2_EQEPERR_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.PINMUX2.VALUE="PINMUX_BALL_C9_EMIF_ADDR_11 | PINMUX_BALL_C10_EMIF_ADDR_12 | PINMUX_BALL_C11_EMIF_ADDR_13 | PINMUX_BALL_C12_EMIF_ADDR_14" -DRIVER.PINMUX.VAR.MUX99_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX81_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX73_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX65_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX57_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX49_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL5_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX3.VALUE="PINMUX_BALL_C13_EMIF_ADDR_15 | PINMUX_BALL_D14_EMIF_ADDR_16 | PINMUX_BALL_C14_EMIF_ADDR_17 | PINMUX_BALL_D15_EMIF_ADDR_18" -DRIVER.PINMUX.VAR.MUX99_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM4_EQEPERR12.VALUE=EQEPERR12 -DRIVER.PINMUX.VAR.PINMUX4.VALUE="PINMUX_BALL_C15_EMIF_ADDR_19 | PINMUX_BALL_C16_EMIF_ADDR_20 | PINMUX_BALL_C17_EMIF_ADDR_21" -DRIVER.PINMUX.VAR.SIGNAL50_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL42_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL34_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL26_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL18_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX101_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX99_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX5.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL50_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL42_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL34_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL26_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL18_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX101_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX99_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX6.VALUE=0 -DRIVER.PINMUX.VAR.MUX101_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_127_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_119_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.ALT_ADC_A.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX7.VALUE=0 -DRIVER.PINMUX.VAR.MUX101_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.ALT_ADC_B.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX8.VALUE=PINMUX_BALL_D16_EMIF_BA_1 -DRIVER.PINMUX.VAR.MUX101_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX92_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX84_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX76_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX68_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX9.VALUE="PINMUX_BALL_R4_EMIF_nCAS | PINMUX_BALL_N17_EMIF_nCS_0 | PINMUX_BALL_L17_EMIF_nCS_2" -DRIVER.PINMUX.VAR.MUX101_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX92_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX84_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX76_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX68_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX92_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX84_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX76_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX68_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX4_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_120_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_112_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_104_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX92_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX84_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX76_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX68_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL11_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX92_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX84_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX76_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX68_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX7_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL11_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX92_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX84_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX76_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX68_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX7_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_TZ1_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX132_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX124_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX116_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX108_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX7_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX7_OPTION3.VALUE=0 -DRIVER.CRC.VAR.HTU_CPB_7_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC1_CH1_URI.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC1_CH2_TOE.VALUE=0x00000000 -DRIVER.CRC.VAR.HTU_DCP0_TRDIR_1.VALUE=HET_TO_MAIN_MEM -DRIVER.CRC.VAR.CRC2_CH2_WDTO.VALUE=0 -DRIVER.CRC.VAR.HTU_ICPBL_7_SEL_1.VALUE=HIGH -DRIVER.CRC.VAR.HTU_ICPA_5_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.HTU_ICPB_1_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.HTU_DEBMOD_1.VALUE=0 -DRIVER.CRC.VAR.CRC1_CH2_URI.VALUE=0x00000000 -DRIVER.CRC.VAR.HTU_ICPAL_1_SEL_1.VALUE=HIGH -DRIVER.CRC.VAR.HTU_ENABUS_1.VALUE=0 -DRIVER.CRC.VAR.CRC1_CH2_MODE.VALUE=FULL_CPU -DRIVER.CRC.VAR.HTU_CPA_2_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC2_CH1_PSSIH.VALUE=0 -DRIVER.CRC.VAR.CRC2_CH1_PSSIL.VALUE=0 -DRIVER.CRC.VAR.HTU_MP1_ACC_1.VALUE=READ_ONLY -DRIVER.CRC.VAR.HTU_CONTPAR_1.VALUE=0 -DRIVER.CRC.VAR.HTU_ICPB_6_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.HTU_DCP0_EC_1.VALUE=0 -DRIVER.CRC.VAR.HTU_DCP0_CPBFULADD_1.VALUE=0 -DRIVER.CRC.VAR.HTU_ICPAL_6_SEL_1.VALUE=HIGH -DRIVER.CRC.VAR.CRC1_CH1_PSIH.VALUE=0 -DRIVER.CRC.VAR.HTU_CPA_7_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.HTU_CPB_3_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC1_BASE.VALUE=0xFE000000 -DRIVER.CRC.VAR.CRC1_CH1_PSIL.VALUE=0 -DRIVER.CRC.VAR.HTU_DCP0_FC_1.VALUE=0 -DRIVER.CRC.VAR.HTU_BASE.VALUE=0xFFF7A400 -DRIVER.CRC.VAR.HTU_ICPBL_3_SEL_1.VALUE=HIGH -DRIVER.CRC.VAR.HTU_ICPA_1_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC1_CH1_WDTO.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC1_CH2_PSIH.VALUE=0 -DRIVER.CRC.VAR.CRC2_BASE.VALUE=0xFB000000 -DRIVER.CRC.VAR.CRC1_CH2_PSIL.VALUE=0 -DRIVER.CRC.VAR.HTU_ICPA_6_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.HTU_ICPB_2_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.HTU_DCP0_CPAFULADD_1.VALUE=0 -DRIVER.CRC.VAR.HTU_ICPAL_2_SEL_1.VALUE=HIGH -DRIVER.CRC.VAR.HTU_CPA_3_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC2_CH2_PSSIH.VALUE=0 -DRIVER.CRC.VAR.CRC2_CH2_PSSIL.VALUE=0 -DRIVER.CRC.VAR.HTU_MP1_STADD_1.VALUE=0 -DRIVER.CRC.VAR.HTU_ICPB_7_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC1_CH2_WDTO.VALUE=0x00000000 -DRIVER.CRC.VAR.HTU_ICPAL_7_SEL_1.VALUE=HIGH -DRIVER.CRC.VAR.HTU_CPB_4_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC2_CH1_BCTO.VALUE=0 -DRIVER.CRC.VAR.HTU_MP0_ENA_1.VALUE=0 -DRIVER.CRC.VAR.HTU_ICPBL_4_SEL_1.VALUE=HIGH -DRIVER.CRC.VAR.HTU_ICPA_2_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.HTU_PAR_1.VALUE=0 -DRIVER.CRC.VAR.HTU_CONT_1.VALUE=0 -DRIVER.CRC.VAR.HTU_ENAREQ_1.VALUE=0 -DRIVER.CRC.VAR.CRC2_CH2_BCTO.VALUE=0 -DRIVER.CRC.VAR.HTU_MP1_ERRENA_1.VALUE=0 -DRIVER.CRC.VAR.HTU_MP0_STADD_1.VALUE=0 -DRIVER.CRC.VAR.HTU_ICPA_7_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.HTU_ICPB_3_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.HTU_ICPAL_3_SEL_1.VALUE=HIGH -DRIVER.CRC.VAR.HTU_CPA_4_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.HTU_CPB_0_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.HTU_DCP0_MMADD_1.VALUE=POST_INCREMENT -DRIVER.CRC.VAR.CRC2_CH1_CCI.VALUE=0x00000000 -DRIVER.CRC.VAR.HTU_ENAINTMAP_1.VALUE=0 -DRIVER.CRC.VAR.CRC2_CH1_CFI.VALUE=0x00000000 -DRIVER.CRC.VAR.HTU_ICPBL_0_SEL_1.VALUE=HIGH -DRIVER.CRC.VAR.HTU_CPB_5_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC2_CH2_CCI.VALUE=0x00000000 -DRIVER.CRC.VAR.HTU_MP1_ENA_1.VALUE=0 -DRIVER.CRC.VAR.CRC1_CH2_MODE_VALUE.VALUE=0x0001 -DRIVER.CRC.VAR.HTU_DCP0_HETADD.VALUE=0 -DRIVER.CRC.VAR.CRC2_CH2_CFI.VALUE=0x00000000 -DRIVER.CRC.VAR.HTU_ICPBL_5_SEL_1.VALUE=HIGH -DRIVER.CRC.VAR.HTU_ICPA_3_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC2_CH1_DTE.VALUE=0 -DRIVER.CRC.VAR.CRC2_CH1_CVH.VALUE=0 -DRIVER.CRC.VAR.HTU_CPA_0_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.HTU_RES_1.VALUE=0 -DRIVER.CRC.VAR.CRC1_CH1_BCTO.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC2_CH1_CVL.VALUE=0 -DRIVER.CRC.VAR.HTU_DCP0_CPATMOD_1.VALUE=POST_INCREMENT -DRIVER.CRC.VAR.CRC1_CH1_CCI.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC2_CH1_MODE.VALUE=FULL_CPU -DRIVER.CRC.VAR.CRC1_CH1_PSSIH.VALUE=0 -DRIVER.CRC.VAR.CRC2_CH2_DTE.VALUE=1 -DRIVER.CRC.VAR.CRC1_CH1_CFI.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC1_CH1_PSSIL.VALUE=0 -DRIVER.CRC.VAR.HTU_MP1_ENDADD_1.VALUE=0 -DRIVER.CRC.VAR.HTU_ICPB_4_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC2_CH2_CVH.VALUE=0 -DRIVER.CRC.VAR.HTU_ICPAL_4_SEL_1.VALUE=HIGH -DRIVER.CRC.VAR.CRC2_CH2_CVL.VALUE=0 -DRIVER.CRC.VAR.CRC2_CH1_PCP.VALUE=0 -DRIVER.CRC.VAR.HTU_CPA_5_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.HTU_CPB_1_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC1_CH2_CCI.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC1_CH2_CFI.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC2_CH1_SCP.VALUE=0 -DRIVER.CRC.VAR.HTU_VBHOLD_1.VALUE=0 -DRIVER.CRC.VAR.CRC1_CH2_BCTO.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC1_CH1_MODE_VALUE.VALUE=0x0001 -DRIVER.CRC.VAR.CRC2_CH2_PCP.VALUE=0 -DRIVER.CRC.VAR.HTU_MP0_ERRENA_1.VALUE=0 -DRIVER.CRC.VAR.HTU_ICPBL_1_SEL_1.VALUE=HIGH -DRIVER.CRC.VAR.CRC2_CH1_PSA.VALUE=1 -DRIVER.CRC.VAR.CRC2_CH2_MODE.VALUE=FULL_CPU -DRIVER.CRC.VAR.CRC2_CH1_ORI.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC1_CH1_DTE.VALUE=0 -DRIVER.CRC.VAR.HTU_CPB_6_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC1_CH1_CVH.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC1_CH1_CVL.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC2_CH2_SCP.VALUE=0 -DRIVER.CRC.VAR.CRC2_CH2_MODE_VALUE.VALUE=0x0001 -DRIVER.CRC.VAR.CRC2_CH1_TOE.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC2_CH2_PSA.VALUE=1 -DRIVER.CRC.VAR.CRC2_CH2_ORI.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC1_CH2_DTE.VALUE=1 -DRIVER.CRC.VAR.HTU_DCP0_TRDAT_1.VALUE=32BIT -DRIVER.CRC.VAR.HTU_ICPBL_6_SEL_1.VALUE=HIGH -DRIVER.CRC.VAR.HTU_ICPA_4_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.HTU_ICPB_0_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC1_CH2_CVH.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC2_CH1_PSIH.VALUE=0 -DRIVER.CRC.VAR.HTU_ICPAL_0_SEL_1.VALUE=HIGH -DRIVER.CRC.VAR.CRC1_CH2_CVL.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC2_CH1_URI.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC2_CH1_PSIL.VALUE=0 -DRIVER.CRC.VAR.CRC1_CH1_PCP.VALUE=0x00000000 -DRIVER.CRC.VAR.HTU_CPA_1_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC2_CH2_TOE.VALUE=0x00000000 -DRIVER.CRC.VAR.HTU_DCP0_CPBTMOD_1.VALUE=POST_INCREMENT -DRIVER.CRC.VAR.CRC1_CH2_PSSIH.VALUE=0 -DRIVER.CRC.VAR.HTU_MP0_ACC_1.VALUE=READ_ONLY -DRIVER.CRC.VAR.CRC1_CH2_PSSIL.VALUE=0 -DRIVER.CRC.VAR.CRC1_CH1_SCP.VALUE=0x00000000 -DRIVER.CRC.VAR.HTU_ICPB_5_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC2_CH2_URI.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC1_CH2_PCP.VALUE=0x00000000 -DRIVER.CRC.VAR.HTU_ICPAL_5_SEL_1.VALUE=HIGH -DRIVER.CRC.VAR.CRC1_CH1_PSA.VALUE=1 -DRIVER.CRC.VAR.CRC1_CH1_ORI.VALUE=0x00000000 -DRIVER.CRC.VAR.HTU_DCP0_ADMOD_1.VALUE=INCREMENT_16BIT -DRIVER.CRC.VAR.HTU_CPA_6_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.HTU_CPB_2_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC2_CH1_WDTO.VALUE=0 -DRIVER.CRC.VAR.CRC2_CH2_PSIH.VALUE=0 -DRIVER.CRC.VAR.CRC1_CH2_SCP.VALUE=0x00000000 -DRIVER.CRC.VAR.HTU_ENA_1.VALUE=0 -DRIVER.CRC.VAR.CRC1_CH1_TOE.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC1_CH1_MODE.VALUE=FULL_CPU -DRIVER.CRC.VAR.CRC2_CH2_PSIL.VALUE=0 -DRIVER.CRC.VAR.CRC1_CH2_PSA.VALUE=1 -DRIVER.CRC.VAR.CRC1_CH2_ORI.VALUE=0x00000000 -DRIVER.CRC.VAR.HTU_MP0_ENDADD_1.VALUE=0 -DRIVER.CRC.VAR.HTU_ICPBL_2_SEL_1.VALUE=HIGH -DRIVER.CRC.VAR.HTU_ICPA_0_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC2_CH1_MODE_VALUE.VALUE=0x0001 -DRIVER.EMAC.VAR.EMAC_PHY_CUSTOM.VALUE=0 -DRIVER.EMAC.VAR.EMAC_ADD1.VALUE=FF -DRIVER.EMAC.VAR.EMAC_ADD2.VALUE=FF -DRIVER.EMAC.VAR.EMAC_ADD3.VALUE=FF -DRIVER.EMAC.VAR.EMAC_ADD4.VALUE=FF -DRIVER.EMAC.VAR.EMAC_ADD5.VALUE=FF -DRIVER.EMAC.VAR.EMAC_ADD6.VALUE=FF -DRIVER.EMAC.VAR.EMAC_CTRL_BASE.VALUE=0xFCF78800 -DRIVER.EMAC.VAR.EMAC_PHY_DP83640.VALUE=1 -DRIVER.EMAC.VAR.EMAC_LOOPBACK_ENA.VALUE=0 -DRIVER.EMAC.VAR.MDIO_BASE.VALUE=0xFCF78900 -DRIVER.EMAC.VAR.EMAC_BASE.VALUE=0xFCF78000 -DRIVER.EMAC.VAR.EMAC_BASE_PORT.VALUE=0xFFFFFFFF -DRIVER.EMAC.VAR.EMAC_TRANSMIT_ENA.VALUE=1 -DRIVER.EMAC.VAR.EMAC_PHY_TLK111.VALUE=0 -DRIVER.EMAC.VAR.EMAC_CHANNELNUMBER.VALUE=0 -DRIVER.EMAC.VAR.EMAC_RX_PBUF_ALLOC.VALUE=10 -DRIVER.EMAC.VAR.EMAC_UNICAST_ENA.VALUE=1 -DRIVER.EMAC.VAR.EMAC_FULL_DUPLEX_ENA.VALUE=1 -DRIVER.EMAC.VAR.EMAC_PHYADDRESS.VALUE=1 -DRIVER.EMAC.VAR.EMAC_MII_ENA.VALUE=1 -DRIVER.EMAC.VAR.EMAC_CTRL_RAM_BASE.VALUE=0xFC520000 -DRIVER.EMAC.VAR.EMAC_BROADCAST_ENA.VALUE=1 -DRIVER.EMAC.VAR.EMAC_RECEIVE_ENA.VALUE=1 -DRIVER.EMIF.VAR.EMIF_ASYNC2_TAVAV.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC1_TD.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC3_EXTENDED_WAIT.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC1_TH.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC2_TA.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC3_WAIT.VALUE=pin0 -DRIVER.EMIF.VAR.EMIF_ASYNC2_TD.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC2_NOR_FLASH.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC2_TEHQZ.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC2_TH.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC3_TA.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC3_TD.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ENA_SDRAM.VALUE=1 -DRIVER.EMIF.VAR.EMIF_ASYNC3_TH.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC2_TELQV.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC2_PAGE_MODE.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC1_ENA.VALUE=1 -DRIVER.EMIF.VAR.EMIF_SDRAM_REFRESH_CYCLES.VALUE=0 -DRIVER.EMIF.VAR.EMIF_AVAILABLE.VALUE=1 -DRIVER.EMIF.VAR.EMIF_SDRAM_TRC_MAX.VALUE=213 -DRIVER.EMIF.VAR.EMIF_ASYNC3_TEHEL.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC2_ENA.VALUE=1 -DRIVER.EMIF.VAR.EMIF_ASYNC1_R_STROBE.VALUE=63 -DRIVER.EMIF.VAR.EMIF_SDRAM_TRAS_MAX.VALUE=213 -DRIVER.EMIF.VAR.EMIF_ASYNC3_TELEH.VALUE=0 -DRIVER.EMIF.VAR.EMIF_SDRAM_TRRD_MAX.VALUE=107 -DRIVER.EMIF.VAR.EMIF_ASYNC3_STROBE_MODE.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC3_ENA.VALUE=1 -DRIVER.EMIF.VAR.EMIF_ASYNC1_ASIZE.VALUE=8_bit -DRIVER.EMIF.VAR.EMIF_SDRAM_TRC_VAL.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC3_TAVAV.VALUE=0 -DRIVER.EMIF.VAR.EMIF_SDRAM_BANKS.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC1_PAGE_DELAY_VAL.VALUE=0 -DRIVER.EMIF.VAR.EMIF_SDRAM_TRAS_VAL.VALUE=0 -DRIVER.EMIF.VAR.EMIF_SDRAM_TRRD_VAL.VALUE=0 -DRIVER.EMIF.VAR.EMIF_BASE.VALUE=0xFCFFE800 -DRIVER.EMIF.VAR.EMIF_ASYNC3_TEHQZ.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC1_W_STROBE.VALUE=63 -DRIVER.EMIF.VAR.EMIF_ASYNC3_TELQV.VALUE=0 -DRIVER.EMIF.VAR.EMIF_SDRAM_TXSR_MAX.VALUE=427 -DRIVER.EMIF.VAR.EMIF_ASYNC2_PAGE_SIZE.VALUE=4_words -DRIVER.EMIF.VAR.EMIF_CLKFRQ.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC3_W_HOLD.VALUE=7 -DRIVER.EMIF.VAR.EMIF_ASYNC2_R_HOLD.VALUE=7 -DRIVER.EMIF.VAR.EMIF_SDRAM_TREFRESH_VAL.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC3_R_SETUP.VALUE=15 -DRIVER.EMIF.VAR.EMIF_SDRAM_TXSR_VAL.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC1_TSU.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC2_EXTENDED_WAIT.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC2_ASIZE.VALUE=8_bit -DRIVER.EMIF.VAR.EMIF_ASYNC2_TSU.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC3_W_SETUP.VALUE=15 -DRIVER.EMIF.VAR.EMIF_ASYNC3_NOR_FLASH.VALUE=0 -DRIVER.EMIF.VAR.EMIF_SDRAM_TWR_MAX.VALUE=107 -DRIVER.EMIF.VAR.EMIF_ASYNC2_PAGE_DELAY_VAL.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC1_W_HOLD.VALUE=7 -DRIVER.EMIF.VAR.EMIF_SDRAM_INIT_TIME.VALUE=200 -DRIVER.EMIF.VAR.EMIF_SDRAM_TREFRESH_DEFAULT.VALUE=1605 -DRIVER.EMIF.VAR.EMIF_ASYNC3_TSU.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC3_PAGE_MODE.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC2_STROBE_MODE.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC2_R_SETUP.VALUE=15 -DRIVER.EMIF.VAR.EMIF_SDRAM_TWR_VAL.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC3_R_STROBE.VALUE=63 -DRIVER.EMIF.VAR.EMIF_SDRAM_TRCD_MAX.VALUE=107 -DRIVER.EMIF.VAR.EMIF_CLK.VALUE=0 -DRIVER.EMIF.VAR.EMIF_SDRAM_TRCD.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC2_W_SETUP.VALUE=15 -DRIVER.EMIF.VAR.EMIF_SDRAM_TRFC.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC3_ASIZE.VALUE=8_bit -DRIVER.EMIF.VAR.EMIF_SDRAM_TRAS.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC1_NOR_FLASH.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC3_PAGE_DELAY.VALUE=0 -DRIVER.EMIF.VAR.EMIF_SDRAM_CAS_LATENCY.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC_WAIT_POLARITY0.VALUE=pin_low -DRIVER.EMIF.VAR.EMIF_SDRAM_TRCD_VAL.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC_WAIT_POLARITY1.VALUE=pin_high -DRIVER.EMIF.VAR.EMIF_ASYNC1_PAGE_MODE.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC1_R_SETUP.VALUE=15 -DRIVER.EMIF.VAR.EMIF_SDRAM_TRC.VALUE=0 -DRIVER.EMIF.VAR.EMIF_SDRAM_TRRD.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC3_PAGE_DELAY_VAL.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC3_W_STROBE.VALUE=63 -DRIVER.EMIF.VAR.EMIF_ASYNC1_TEHEL.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC_MAX_EXT_WAIT.VALUE=0 -DRIVER.EMIF.VAR.EMIF_SDRAM_TRP.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC3_PAGE_SIZE.VALUE=4_words -DRIVER.EMIF.VAR.EMIF_ASYNC1_W_SETUP.VALUE=15 -DRIVER.EMIF.VAR.EMIF_ASYNC1_TELEH.VALUE=0 -DRIVER.EMIF.VAR.EMIF_SDRAM_REFRESH_CYCLES_MAX.VALUE=0 -DRIVER.EMIF.VAR.EMIF_MS.VALUE=0.001 -DRIVER.EMIF.VAR.EMIF_NS.VALUE=0.000000001 -DRIVER.EMIF.VAR.EMIF_SDRAM_TWR.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC1_EXTENDED_WAIT.VALUE=0 -DRIVER.EMIF.VAR.EMIF_SDRAM_REFRESH_PERIOD.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC3_R_HOLD.VALUE=7 -DRIVER.EMIF.VAR.EMIF_ASYNC1_TAVAV.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC2_PAGE_DELAY.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC1_WAIT.VALUE=pin0 -DRIVER.EMIF.VAR.EMIF_SDRAM_TRP_MAX.VALUE=107 -DRIVER.EMIF.VAR.EMIF_SDRAM_TXSR.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC1_TEHQZ.VALUE=0 -DRIVER.EMIF.VAR.EMIF_SDRAM_TRFC_MAX.VALUE=427 -DRIVER.EMIF.VAR.EMIF_ASYNC2_R_STROBE.VALUE=63 -DRIVER.EMIF.VAR.EMIF_ASYNC1_TELQV.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC1_STROBE_MODE.VALUE=0 -DRIVER.EMIF.VAR.EMIF_SDRAM_TRP_VAL.VALUE=0 -DRIVER.EMIF.VAR.EMIF_SDRAM_REFRESH_PERIOD_MAX.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC2_W_HOLD.VALUE=7 -DRIVER.EMIF.VAR.EMIF_ASYNC1_PAGE_SIZE.VALUE=4_words -DRIVER.EMIF.VAR.EMIF_ASYNC2_WAIT.VALUE=pin0 -DRIVER.EMIF.VAR.EMIF_ASYNC2_TEHEL.VALUE=0 -DRIVER.EMIF.VAR.EMIF_SDRAM_TRFC_VAL.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC1_R_HOLD.VALUE=7 -DRIVER.EMIF.VAR.EMIF_SDRAM_PAGE_SIZE.VALUE=elements_256 -DRIVER.EMIF.VAR.EMIF_ASYNC2_TELEH.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC1_PAGE_DELAY.VALUE=0 -DRIVER.EMIF.VAR.EMIF_IBANK.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC2_W_STROBE.VALUE=63 -DRIVER.EMIF.VAR.EMIF_ASYNC1_TA.VALUE=0 -DRIVER.POM.VAR.POM_OVRLY_START_ADD28.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD29.VALUE=0x00000000 -DRIVER.POM.VAR.POM_REGION_10_ENA.VALUE=0 -DRIVER.POM.VAR.POM_TIMEOUT_ENABLE.VALUE=0 -DRIVER.POM.VAR.POM_REGION_11_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_20_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_12_ENA.VALUE=0 -DRIVER.POM.VAR.POM_NO_OF_REGION.VALUE=1 -DRIVER.POM.VAR.POM_REGION_21_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_13_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_30_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_22_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_14_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_31_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_23_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_15_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_1_ENA.VALUE=1 -DRIVER.POM.VAR.POM_REGION_32_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_24_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_16_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_2_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_25_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_17_ENA.VALUE=0 -DRIVER.POM.VAR.POM_OVRLY_START_ADD1.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD2.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD3.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD4.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD5.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD6.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD7.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD8.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVLY_TRG_REGION.VALUE=INTERNAL_RAM -DRIVER.POM.VAR.POM_OVRLY_START_ADD9.VALUE=0x00000000 -DRIVER.POM.VAR.POM_REGION_3_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_26_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_18_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_4_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_27_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_19_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_5_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_28_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_6_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_SIZE10.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE11.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE20.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE12.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_29_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_SIZE21.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE13.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE30.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE22.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE14.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE31.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE23.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE15.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE32.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE24.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE16.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE25.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE17.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE26.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE18.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE27.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE19.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE28.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE29.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_7_ENA.VALUE=0 -DRIVER.POM.VAR.POM_BASE.VALUE=0xFFA04000 -DRIVER.POM.VAR.POM_PROG_START_ADD10.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD11.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD20.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD12.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD21.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD13.VALUE=0x00000000 -DRIVER.POM.VAR.POM_REGION_8_ENA.VALUE=0 -DRIVER.POM.VAR.POM_PROG_START_ADD30.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD22.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD14.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD31.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD23.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD15.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD32.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD24.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD16.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD25.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD17.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD26.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD18.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD27.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD19.VALUE=0x00000000 -DRIVER.POM.VAR.POM_REGION_SIZE1.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_PROG_START_ADD28.VALUE=0x00000000 -DRIVER.POM.VAR.POM_REGION_SIZE2.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_PROG_START_ADD29.VALUE=0x00000000 -DRIVER.POM.VAR.POM_REGION_SIZE3.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE4.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE5.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE6.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE7.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE8.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE9.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_9_ENA.VALUE=0 -DRIVER.POM.VAR.POM_PROG_START_ADD1.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD2.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD3.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD4.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD5.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD6.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD7.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD8.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD9.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD10.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD11.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD20.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD12.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD21.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD13.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD30.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD22.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD14.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD31.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD23.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD15.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD32.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD24.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD16.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD25.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD17.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD26.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD18.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD27.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD19.VALUE=0x00000000 -DRIVER.PMM.VAR.PMM_RAM_PWR_DOMAIN2_ENABLE.VALUE=0 -DRIVER.PMM.VAR.PMM_PWR_DOMAIN5_ENABLE.VALUE=0 -DRIVER.PMM.VAR.PMM_PWR_DOMAIN3_ENABLE.VALUE=0 -DRIVER.PMM.VAR.PMM_RAM_PWR_DOMAIN3_ENABLE.VALUE=0 -DRIVER.PMM.VAR.PMM_RAM_PWR_DOMAIN1_ENABLE.VALUE=0 -DRIVER.PMM.VAR.PMM_PWR_DOMAIN4_ENABLE.VALUE=0 -DRIVER.PMM.VAR.PMM_PWR_DOMAIN2_ENABLE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_OSHT_WIDTH.VALUE=100 -DRIVER.ETPWM.VAR.ETPWM3_PWMA_PERIOD_REG.VALUE=1000 -DRIVER.ETPWM.VAR.ETPWM2_PWMA_COMPARE.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM5_CHOPPER_PERIOD.VALUE=100.000 -DRIVER.ETPWM.VAR.ETPWM3_PWMA_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM3_PWMA_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM7_PWMB_PERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM3_PWMB_DEADBAND_OUT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM5_HSPCLKDIV.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM4_CLKDIV_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_SOCA_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM1_DEADBAND_INPUT.VALUE=PWMA_RED_FED -DRIVER.ETPWM.VAR.ETPWM7_BASE.VALUE=0xFCF79200 -DRIVER.ETPWM.VAR.ETPWM5_TB_ACTUALFREQUENCY.VALUE=80.000 -DRIVER.ETPWM.VAR.ETPWM6_DCBEVT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM6_DCBEVT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_ENABLE_SOCA.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_CBC.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_ENABLE_SOCB.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_PWMA_FALLING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_CHOPPER_PERIOD_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM2_PWMA_ENA.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM4_PWMB_PERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM6_RDELAY_SOURCE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_PWMA_DUTYTIME.VALUE=500.000 -DRIVER.ETPWM.VAR.ETPWM1_CHOPPER_DUTY_NEW.VALUE=50.0 -DRIVER.ETPWM.VAR.ETPWM7_SOCB_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM1_OSHT_ACTUAL_WIDTH.VALUE=100 -DRIVER.ETPWM.VAR.ETPWM7_PWMB_FALLING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_PWMB_COMPARE.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM2_PWMB_POLARITY.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM1_OSHT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_OSHT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_PWMA_DEADBAND_OUT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM4_ENABLE_SOCA.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_OSHT3.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_ENABLE_SOCB.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_OSHT4.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_OSHT_WIDTH_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM1_OSHT5.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_PWMA_PERIOD_REG.VALUE=1000 -DRIVER.ETPWM.VAR.ETPWM1_OSHT6.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_CHOPPER_PERIOD.VALUE=100.000 -DRIVER.ETPWM.VAR.ETPWM1_PWMB_PERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM2_CBC.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_CLKDIV.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM2_PWMB_ENA.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM4_SOCB_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM7_CHOPPER_MODE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_PWMB_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM7_DEADBAND_OUTPUT.VALUE=PWMA_PWMB_NIL -DRIVER.ETPWM.VAR.ETPWM4_PWMB_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM1_ENABLE_SOCA.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_PWMB_DEADBAND_INVERT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM1_ENABLE_SOCB.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_CHOPPER_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM5_DCAEVT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_HSPCLKDIV_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM5_DCAEVT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_CHOPPER_DUTYTIME.VALUE=50.000 -DRIVER.ETPWM.VAR.ETPWM6_OSHT_ACTUAL_WIDTH.VALUE=100 -DRIVER.ETPWM.VAR.ETPWM4_PWMB_DEADBAND_INVERT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM7_PWMB_POLARITY.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_OSHT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_PWMA_RISING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_OSHT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM6_PWMA_DEADBAND_OUT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM1_SOCB_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_OSHT3.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_PWMB_DUTYTIME.VALUE=500.000 -DRIVER.ETPWM.VAR.ETPWM3_CBC.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_TB_ACTUALFREQUENCY.VALUE=80.000 -DRIVER.ETPWM.VAR.ETPWM1_FDELAY_SOURCE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_OSHT4.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM6_PWMB_DEADBAND_INVERT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_OSHT5.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_PWMB_COMPARE.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM2_PWMB_RISING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_OSHT6.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM6_DEADBAND_INPUT.VALUE=PWMA_RED_FED -DRIVER.ETPWM.VAR.ETPWM6_SELECT_SOCA.VALUE=DCAEVT1 -DRIVER.ETPWM.VAR.ETPWM6_SELECT_SOCB.VALUE=DCBEVT1 -DRIVER.ETPWM.VAR.ETPWM6_SELECT_EVENT.VALUE=NO_EVENT -DRIVER.ETPWM.VAR.ETPWM5_OSHT_WIDTH.VALUE=100 -DRIVER.ETPWM.VAR.ETPWM1_PWMA_DEADBAND_INVERT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM5_PWMA_ENA.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM3_CHOPPER_PERIOD_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_PWMA_DEADBAND_INVERT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_PWMB_PERIOD_REG.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM5_DCBEVT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_OSHT_WIDTH_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM1_PWMA_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM5_DCBEVT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_PWMA_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM5_PWMA_DEADBAND_INVERT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_HSPCLKDIV.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_PWMA_FALLING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_PWMA_RISING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM4_CHOPPER_MODE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_CLKDIV_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM2_PWMB_DEADBAND_OUT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_TB_FREQUENCY.VALUE=110.000 -DRIVER.ETPWM.VAR.ETPWM4_CBC.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_SELECT_SOCA.VALUE=DCAEVT1 -DRIVER.ETPWM.VAR.ETPWM7_PWMA_DEADBAND_INVERT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_SELECT_SOCB.VALUE=DCBEVT1 -DRIVER.ETPWM.VAR.ETPWM6_PWMB_RISING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM5_PWMA_POLARITY.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM4_CHOPPER_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM5_DEADBAND_OUTPUT.VALUE=PWMA_PWMB_NIL -DRIVER.ETPWM.VAR.ETPWM6_FDELAY_SOURCE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_RDELAY_SOURCE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_PWMA_DUTYTIME.VALUE=500.000 -DRIVER.ETPWM.VAR.ETPWM6_PWMB_FALLING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_PWMA_COMPARE.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM5_PWMB_ENA.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_CHOPPER_PERIOD.VALUE=100.000 -DRIVER.ETPWM.VAR.ETPWM6_CHOPPER_DUTYTIME.VALUE=50.000 -DRIVER.ETPWM.VAR.ETPWM1_PWMB_FALLING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM3_SELECT_EVENT.VALUE=NO_EVENT -DRIVER.ETPWM.VAR.ETPWM2_CLKDIV.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_PWMA_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM7_PWMA_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM2_DEADBAND_INPUT.VALUE=PWMA_RED_FED -DRIVER.ETPWM.VAR.ETPWM5_CBC.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_CBC1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_CBC2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_CBC3.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_CHOPPER_DUTYTIME_REG.VALUE=3 -DRIVER.ETPWM.VAR.ETPWM7_PWMB_DEADBAND_OUT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM1_CBC4.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_CBC5.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_CBC6.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_DCAEVT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_PWMB_PERIOD_REG.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM3_CHOPPER_DUTYTIME_REG.VALUE=3 -DRIVER.ETPWM.VAR.ETPWM1_CHOPPER_MODE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM5_PWMA_PERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM4_DCAEVT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_TB_ACTUALFREQUENCY.VALUE=80.000 -DRIVER.ETPWM.VAR.ETPWM3_TB_FREQUENCY.VALUE=110.000 -DRIVER.ETPWM.VAR.ETPWM2_PWMB_FALLING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM5_CHOPPER_DUTYTIME_REG.VALUE=3 -DRIVER.ETPWM.VAR.ETPWM2_OSHT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_CHOPPER_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM1_PWMB_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM1_HSPCLKDIV_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM7_INTERRUPT_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM2_OSHT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_OSHT3.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_OSHT4.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_CHOPPER_DUTYTIME_REG.VALUE=3 -DRIVER.ETPWM.VAR.ETPWM4_PWMB_POLARITY.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_PWMA_COMPARE.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM2_OSHT5.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_DEADBAND_OUTPUT.VALUE=PWMA_PWMB_NIL -DRIVER.ETPWM.VAR.ETPWM3_PWMB_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM2_OSHT6.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM6_CBC.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_PWMB_DUTYTIME.VALUE=500.000 -DRIVER.ETPWM.VAR.ETPWM6_OSHT_WIDTH_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM2_CHOPPER_PERIOD.VALUE=100.000 -DRIVER.ETPWM.VAR.ETPWM2_PWMA_PERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM5_CHOPPER_DUTYTIME.VALUE=50.000 -DRIVER.ETPWM.VAR.ETPWM5_OSHT_ACTUAL_WIDTH.VALUE=100 -DRIVER.ETPWM.VAR.ETPWM4_DCBEVT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_SOCA_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM5_PWMA_DEADBAND_OUT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM4_DCBEVT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_PWMB_FALLING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM4_OSHT_WIDTH.VALUE=100 -DRIVER.ETPWM.VAR.ETPWM5_PWMA_FALLING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM4_PWMA_RISING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM1_PWMA_ENA.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM7_OSHT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM6_PWMB_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM6_PWMA_PERIOD_REG.VALUE=1000 -DRIVER.ETPWM.VAR.ETPWM6_HSPCLKDIV_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM4_PWMB_RISING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM7_OSHT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM6_PWMB_PERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM7_CBC.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_OSHT3.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_CBC1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_OSHT4.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_CBC2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_HSPCLKDIV.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM7_OSHT5.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_PWMB_FALLING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM2_CBC3.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_PWMB_PERIOD_REG.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM2_PWMA_POLARITY.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM2_CLKDIV_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM7_OSHT6.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_SOCA_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM2_CBC4.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_OST.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_CHOPPER_ACTUALPERIOD.VALUE=100.000 -DRIVER.ETPWM.VAR.ETPWM1_PWMA_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM7_PWMB_DUTYTIME.VALUE=500.000 -DRIVER.ETPWM.VAR.ETPWM3_FDELAY_SOURCE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM2_CBC5.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_CLKDIV.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM2_CBC6.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_PWMB_COMPARE.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM7_DEADBAND_INPUT.VALUE=PWMA_RED_FED -DRIVER.ETPWM.VAR.ETPWM6_INTERRUPT_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM3_CHOPPER_ACTUALPERIOD.VALUE=100.000 -DRIVER.ETPWM.VAR.ETPWM1_PWMB_DEADBAND_OUT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_ENABLE_SOCA.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_PWMB_FALLING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM1_BASE.VALUE=0xFCF78C00 -DRIVER.ETPWM.VAR.ETPWM6_ENABLE_SOCB.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_PWMB_ENA.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM5_CHOPPER_ACTUALPERIOD.VALUE=100.000 -DRIVER.ETPWM.VAR.ETPWM3_PWMB_PERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM1_DEADBAND_OUTPUT.VALUE=PWMA_PWMB_NIL -DRIVER.ETPWM.VAR.ETPWM4_TB_ACTUALFREQUENCY.VALUE=80.000 -DRIVER.ETPWM.VAR.ETPWM2_OSHT_WIDTH_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM7_CHOPPER_ACTUALPERIOD.VALUE=100.000 -DRIVER.ETPWM.VAR.ETPWM6_SOCB_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM4_CHOPPER_DUTYTIME.VALUE=50.000 -DRIVER.ETPWM.VAR.ETPWM5_CHOPPER_PERIOD_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM4_PWMA_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM3_DCAEVT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_DCAEVT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_OST.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_ENABLE_SOCA.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM6_HSPCLKDIV.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_ENABLE_SOCB.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_PWMA_POLARITY.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM2_PWMA_FALLING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_PWMA_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM5_RDELAY_SOURCE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM5_PWMB_FALLING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM5_PWMA_DUTYTIME.VALUE=500.000 -DRIVER.ETPWM.VAR.ETPWM4_PWMA_PERIOD_REG.VALUE=1000 -DRIVER.ETPWM.VAR.ETPWM7_CHOPPER_PERIOD.VALUE=100.000 -DRIVER.ETPWM.VAR.ETPWM6_PWMB_DEADBAND_OUT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_SOCB_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM4_PWMB_COMPARE.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM4_PWMA_ENA.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM2_PWMB_FALLING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM1_PWMB_POLARITY.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_CBC1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_SELECT_EVENT.VALUE=NO_EVENT -DRIVER.ETPWM.VAR.ETPWM3_CBC2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_DCBEVT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_CBC3.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_INTERRUPT_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM3_OST.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_DCBEVT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_CBC4.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_DEADBAND_INPUT.VALUE=PWMA_RED_FED -DRIVER.ETPWM.VAR.ETPWM3_CBC5.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_CBC6.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_PWMA_FALLING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM2_PWMB_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM6_PWMB_FALLING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM2_BASE.VALUE=0xFCF78D00 -DRIVER.ETPWM.VAR.ETPWM7_CHOPPER_DUTY_NEW.VALUE=50.0 -DRIVER.ETPWM.VAR.ETPWM7_CLKDIV_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM5_CHOPPER_MODE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_OSHT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_OSHT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_TB_FREQUENCY.VALUE=110.000 -DRIVER.ETPWM.VAR.ETPWM5_SELECT_SOCA.VALUE=DCAEVT1 -DRIVER.ETPWM.VAR.ETPWM3_OSHT3.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_CHOPPER_DUTYTIME.VALUE=50.000 -DRIVER.ETPWM.VAR.ETPWM5_SELECT_SOCB.VALUE=DCBEVT1 -DRIVER.ETPWM.VAR.ETPWM4_OSHT_ACTUAL_WIDTH.VALUE=100 -DRIVER.ETPWM.VAR.ETPWM3_OSHT4.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_OSHT_WIDTH.VALUE=100 -DRIVER.ETPWM.VAR.ETPWM5_CHOPPER_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM4_PWMB_FALLING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM4_PWMB_ENA.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM3_OSHT5.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_HSPCLKDIV_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM4_PWMA_DEADBAND_OUT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_OSHT6.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_TB_ACTUALFREQUENCY.VALUE=80.000 -DRIVER.ETPWM.VAR.ETPWM5_CLKDIV.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM7_PWMA_COMPARE.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM6_PWMB_POLARITY.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM4_PWMB_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM4_OST.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_PWMB_DUTYTIME.VALUE=500.000 -DRIVER.ETPWM.VAR.ETPWM7_OSHT_WIDTH_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM2_CHOPPER_PERIOD_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM2_PWMA_PERIOD_REG.VALUE=1000 -DRIVER.ETPWM.VAR.ETPWM1_PWMB_COMPARE.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM1_CLKDIV_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_CHOPPER_PERIOD.VALUE=100.000 -DRIVER.ETPWM.VAR.ETPWM7_PWMB_FALLING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM2_SELECT_SOCA.VALUE=DCAEVT1 -DRIVER.ETPWM.VAR.ETPWM4_SELECT_EVENT.VALUE=NO_EVENT -DRIVER.ETPWM.VAR.ETPWM2_SELECT_SOCB.VALUE=DCBEVT1 -DRIVER.ETPWM.VAR.ETPWM7_PWMB_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM2_DCAEVT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_INTERRUPT_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM2_DCAEVT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_CBC1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_PWMB_RISING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM4_CBC2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_PWMA_ENA.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM4_CBC3.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_CHOPPER_MODE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM1_PWMA_FALLING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM7_PWMA_PERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM5_OST.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_CBC4.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_CBC5.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_TB_FREQUENCY.VALUE=110.000 -DRIVER.ETPWM.VAR.ETPWM4_CBC6.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM6_CHOPPER_DUTY_NEW.VALUE=50.0 -DRIVER.ETPWM.VAR.ETPWM4_PWMA_POLARITY.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM2_CHOPPER_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM2_PWMA_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM5_FDELAY_SOURCE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_BASE.VALUE=0xFCF78E00 -DRIVER.ETPWM.VAR.ETPWM2_CHOPPER_DUTYTIME.VALUE=50.000 -DRIVER.ETPWM.VAR.ETPWM2_RDELAY_SOURCE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM2_PWMB_RISING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM2_PWMA_DUTYTIME.VALUE=500.000 -DRIVER.ETPWM.VAR.ETPWM1_PWMA_FALLING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM4_HSPCLKDIV.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM4_PWMA_COMPARE.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM1_PWMB_FALLING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM1_PWMB_DEADBAND_INVERT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM7_PWMA_RISING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM2_DCBEVT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_PWMA_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM4_PWMA_PERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM2_DCBEVT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_PWMB_RISING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM3_PWMB_DEADBAND_INVERT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM1_SELECT_EVENT.VALUE=NO_EVENT -DRIVER.ETPWM.VAR.ETPWM7_PWMB_PERIOD_REG.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM7_PWMB_RISING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM7_PWMB_ENA.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM3_OSHT_WIDTH_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM3_PWMA_FALLING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM7_SOCA_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_OST.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_PWMB_DEADBAND_OUT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM5_PWMB_DEADBAND_INVERT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_TB_ACTUALFREQUENCY.VALUE=80.000 -DRIVER.ETPWM.VAR.ETPWM4_PWMB_RISING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM2_PWMA_FALLING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM7_PWMB_DEADBAND_INVERT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM7_PWMA_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM3_PWMB_FALLING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_DEADBAND_OUTPUT.VALUE=PWMA_PWMB_NIL -DRIVER.ETPWM.VAR.ETPWM3_INTERRUPT_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM1_PWMA_PERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM7_RDELAY_SOURCE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM7_PWMA_DUTYTIME.VALUE=500.000 -DRIVER.ETPWM.VAR.ETPWM1_TB_FREQUENCY.VALUE=110.000 -DRIVER.ETPWM.VAR.ETPWM3_CLKDIV.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM2_PWMA_DEADBAND_INVERT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM7_CHOPPER_PERIOD_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_CLKDIV_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM4_SOCA_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM1_PWMB_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM5_CBC1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_PWMB_RISING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM5_CBC2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_PWMA_DEADBAND_INVERT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM2_OSHT_WIDTH.VALUE=100 -DRIVER.ETPWM.VAR.ETPWM5_CBC3.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_CHOPPER_DUTY_NEW.VALUE=50.0 -DRIVER.ETPWM.VAR.ETPWM3_PWMB_POLARITY.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM1_PWMA_COMPARE.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM7_OST.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_CBC4.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_CBC5.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_CHOPPER_DUTYTIME.VALUE=50.000 -DRIVER.ETPWM.VAR.ETPWM1_PWMB_DUTYTIME.VALUE=500.000 -DRIVER.ETPWM.VAR.ETPWM6_PWMA_DEADBAND_INVERT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM5_CBC6.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_OSHT_ACTUAL_WIDTH.VALUE=100 -DRIVER.ETPWM.VAR.ETPWM2_PWMB_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM5_PWMB_PERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM4_DEADBAND_INPUT.VALUE=PWMA_RED_FED -DRIVER.ETPWM.VAR.ETPWM3_PWMA_DEADBAND_OUT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_PWMB_RISING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM4_BASE.VALUE=0xFCF78F00 -DRIVER.ETPWM.VAR.ETPWM3_PWMA_FALLING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM4_OSHT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_DCAEVT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_PWMA_RISING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM4_OSHT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_SOCA_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM1_DCAEVT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_OSHT3.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_OSHT4.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_PWMB_PERIOD_REG.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM4_OSHT5.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_PWMB_RISING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM4_OSHT6.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_PWMB_RISING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM5_ENABLE_SOCA.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_ENABLE_SOCB.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_HSPCLKDIV_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_PWMB_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM2_PWMB_PERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM3_PWMA_ENA.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM1_PWMA_POLARITY.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM5_SOCB_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM4_DEADBAND_OUTPUT.VALUE=PWMA_PWMB_NIL -DRIVER.ETPWM.VAR.ETPWM2_INTERRUPT_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_PWMB_DUTYTIME.VALUE=500.000 -DRIVER.ETPWM.VAR.ETPWM4_PWMA_FALLING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM2_FDELAY_SOURCE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM1_PWMA_RISING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM7_PWMB_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM5_PWMB_COMPARE.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM5_PWMA_RISING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM2_CHOPPER_DUTYTIME_REG.VALUE=3 -DRIVER.ETPWM.VAR.ETPWM1_DCBEVT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_CHOPPER_PERIOD.VALUE=100.000 -DRIVER.ETPWM.VAR.ETPWM1_DCBEVT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_TB_ACTUALFREQUENCY.VALUE=80.000 -DRIVER.ETPWM.VAR.ETPWM2_ENABLE_SOCA.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_ENABLE_SOCB.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_HSPCLKDIV.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM5_PWMB_RISING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM4_CHOPPER_DUTYTIME_REG.VALUE=3 -DRIVER.ETPWM.VAR.ETPWM4_CHOPPER_DUTY_NEW.VALUE=50.0 -DRIVER.ETPWM.VAR.ETPWM6_CBC1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_PWMA_RISING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM6_CBC2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM6_CBC3.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM6_CHOPPER_DUTYTIME_REG.VALUE=3 -DRIVER.ETPWM.VAR.ETPWM4_CHOPPER_PERIOD_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_CBC4.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_SOCB_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_CBC5.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM6_CBC6.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_PWMA_PERIOD_REG.VALUE=1000 -DRIVER.ETPWM.VAR.ETPWM6_CHOPPER_MODE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_PWMB_ENA.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM4_PWMA_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM7_SELECT_SOCA.VALUE=DCAEVT1 -DRIVER.ETPWM.VAR.ETPWM5_PWMA_FALLING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM5_BASE.VALUE=0xFCF79000 -DRIVER.ETPWM.VAR.ETPWM3_PWMA_RISING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM7_SELECT_SOCB.VALUE=DCBEVT1 -DRIVER.ETPWM.VAR.ETPWM7_OSHT_WIDTH.VALUE=100 -DRIVER.ETPWM.VAR.ETPWM1_CLKDIV.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_CHOPPER_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM6_PWMA_POLARITY.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_PWMB_PERIOD_REG.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM4_PWMB_DEADBAND_OUT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM7_FDELAY_SOURCE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM4_RDELAY_SOURCE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM4_PWMA_DUTYTIME.VALUE=500.000 -DRIVER.ETPWM.VAR.ETPWM7_DCAEVT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_PWMA_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM7_DCAEVT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_PWMA_RISING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM7_HSPCLKDIV.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM5_CLKDIV_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM2_PWMB_COMPARE.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM2_DEADBAND_OUTPUT.VALUE=PWMA_PWMB_NIL -DRIVER.ETPWM.VAR.ETPWM1_INTERRUPT_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM4_SELECT_SOCA.VALUE=DCAEVT1 -DRIVER.ETPWM.VAR.ETPWM5_SELECT_EVENT.VALUE=NO_EVENT -DRIVER.ETPWM.VAR.ETPWM4_SELECT_SOCB.VALUE=DCBEVT1 -DRIVER.ETPWM.VAR.ETPWM1_OSHT_WIDTH.VALUE=100 -DRIVER.ETPWM.VAR.ETPWM4_OSHT_WIDTH_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_PWMA_FALLING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM5_PWMA_RISING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM6_PWMA_ENA.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM3_CHOPPER_DUTY_NEW.VALUE=50.0 -DRIVER.ETPWM.VAR.ETPWM2_CHOPPER_ACTUALPERIOD.VALUE=100.000 -DRIVER.ETPWM.VAR.ETPWM2_OSHT_ACTUAL_WIDTH.VALUE=100 -DRIVER.ETPWM.VAR.ETPWM7_DCBEVT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_CHOPPER_MODE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM7_DCBEVT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_CHOPPER_ACTUALPERIOD.VALUE=100.000 -DRIVER.ETPWM.VAR.ETPWM2_PWMA_DEADBAND_OUT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM7_CBC1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM6_PWMA_RISING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM5_TB_FREQUENCY.VALUE=110.000 -DRIVER.ETPWM.VAR.ETPWM1_SELECT_SOCA.VALUE=DCAEVT1 -DRIVER.ETPWM.VAR.ETPWM7_CBC2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_SELECT_SOCB.VALUE=DCBEVT1 -DRIVER.ETPWM.VAR.ETPWM7_CBC3.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_PWMA_PERIOD_REG.VALUE=1000 -DRIVER.ETPWM.VAR.ETPWM3_CHOPPER_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM2_HSPCLKDIV_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM7_CBC4.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM6_CHOPPER_ACTUALPERIOD.VALUE=100.000 -DRIVER.ETPWM.VAR.ETPWM7_CBC5.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_CBC6.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_PWMB_POLARITY.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM5_PWMA_COMPARE.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM3_PWMA_RISING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM1_CHOPPER_PERIOD_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM1_PWMB_PERIOD_REG.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM7_PWMA_FALLING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM7_PWMA_RISING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM6_BASE.VALUE=0xFCF79100 -DRIVER.ETPWM.VAR.ETPWM3_PWMB_DUTYTIME.VALUE=500.000 -DRIVER.ETPWM.VAR.ETPWM6_PWMB_ENA.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM5_OSHT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_PWMB_RISING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_PWMA_PERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM5_OSHT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_DEADBAND_INPUT.VALUE=PWMA_RED_FED -DRIVER.ETPWM.VAR.ETPWM5_PWMB_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM5_OSHT3.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_OSHT4.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_SELECT_EVENT.VALUE=NO_EVENT -DRIVER.ETPWM.VAR.ETPWM5_OSHT5.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_PWMB_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM5_OSHT6.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_OSHT_ACTUAL_WIDTH.VALUE=100 -DRIVER.ETPWM.VAR.ETPWM6_CLKDIV.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM7_PWMA_DEADBAND_OUT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM7_HSPCLKDIV_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM2_CHOPPER_DUTY_NEW.VALUE=50.0 -DRIVER.ETPWM.VAR.ETPWM3_PWMA_PERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM2_TB_FREQUENCY.VALUE=110.000 -DRIVER.ETPWM.VAR.ETPWM6_DCAEVT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_PWMA_POLARITY.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_SOCA_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_DCAEVT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_FDELAY_SOURCE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM1_RDELAY_SOURCE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM1_PWMA_DUTYTIME.VALUE=500.000 -DRIVER.ECAP.VAR.ECAP1_PRESCALE_REG.VALUE=0 -DRIVER.ECAP.VAR.ECAP2_ENA_PWM.VALUE=0 -DRIVER.ECAP.VAR.ECAP4_PRD.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP6_RESET_COUNTER_CAP1.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP6_RESET_COUNTER_CAP2.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP6_RESET_COUNTER_CAP3.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP6_RESET_COUNTER_CAP4.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP5_PWM_DUTY.VALUE=50 -DRIVER.ECAP.VAR.ECAP5_PWM_PERIOD.VALUE=1000.000 -DRIVER.ECAP.VAR.ECAP4_CAP2_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP5_PRESCALE.VALUE=0 -DRIVER.ECAP.VAR.ECAP5_PRD.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP6_PWM_COMPARE.VALUE=50 -DRIVER.ECAP.VAR.ECAP5_CAP4_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP5_ENA_LOAD.VALUE=0 -DRIVER.ECAP.VAR.ECAP6_PWM_PERIOD_REG.VALUE=0 -DRIVER.ECAP.VAR.ECAP6_WRAP_COUNTER.VALUE=CAPTURE_EVENT1 -DRIVER.ECAP.VAR.ECAP3_PWM_COMPARE.VALUE=50 -DRIVER.ECAP.VAR.ECAP2_CAP1_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP6_PRD.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP4_PWM_DUTYTIME.VALUE=500.000 -DRIVER.ECAP.VAR.ECAP3_RESET_COUNTER_CAP1.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP3_CAP3_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP3_RESET_COUNTER_CAP2.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP3_RESET_COUNTER_CAP3.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP3_RESET_COUNTER_CAP4.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP1_ENA_PWM.VALUE=0 -DRIVER.ECAP.VAR.ECAP3_WRAP_COUNTER.VALUE=CAPTURE_EVENT1 -DRIVER.ECAP.VAR.ECAP2_PWM_PERIOD_REG.VALUE=0 -DRIVER.ECAP.VAR.ECAP5_RESET_COUNTER.VALUE=0 -DRIVER.ECAP.VAR.ECAP5_CEVT1.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP4_CAPTURE_MODE.VALUE=ONE_SHOT -DRIVER.ECAP.VAR.ECAP5_CEVT2.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP5_CEVT3.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP5_CEVT4.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP1_PWM_DUTY.VALUE=50 -DRIVER.ECAP.VAR.ECAP1_CAP2_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP4_PWM_PERIOD.VALUE=1000.000 -DRIVER.ECAP.VAR.ECAP1_PWM_DUTYTIME.VALUE=500.000 -DRIVER.ECAP.VAR.ECAP5_CNTOVF.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP5_PRESCALE_REG.VALUE=0 -DRIVER.ECAP.VAR.ECAP2_CAP4_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP1_PRESCALE.VALUE=0 -DRIVER.ECAP.VAR.ECAP1_ENA_LOAD.VALUE=0 -DRIVER.ECAP.VAR.ECAP6_CAP2_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP1_CAPTURE_MODE.VALUE=ONE_SHOT -DRIVER.ECAP.VAR.ECAP2_PRESCALE_REG.VALUE=0 -DRIVER.ECAP.VAR.ECAP4_PWM_DUTY.VALUE=50 -DRIVER.ECAP.VAR.ECAP6_PWM_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ECAP.VAR.ECAP4_CAP1_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP1_CEVT1.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP1_CEVT2.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP1_CEVT3.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP2_RESET_COUNTER.VALUE=0 -DRIVER.ECAP.VAR.ECAP1_CEVT4.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP4_PRESCALE.VALUE=0 -DRIVER.ECAP.VAR.ECAP5_CAP3_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP4_ENA_LOAD.VALUE=0 -DRIVER.ECAP.VAR.ECAP3_CNTOVF.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP3_PWM_PERIOD.VALUE=1000.000 -DRIVER.ECAP.VAR.ECAP5_RESET_COUNTER_CAP1.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP5_RESET_COUNTER_CAP2.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP5_RESET_COUNTER_CAP3.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP5_RESET_COUNTER_CAP4.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP6_CEVT1.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP3_PWM_PERIOD_REG.VALUE=0 -DRIVER.ECAP.VAR.ECAP6_CEVT2.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP6_CEVT3.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP6_CEVT4.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP5_PWM_COMPARE.VALUE=50 -DRIVER.ECAP.VAR.ECAP5_PWM_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ECAP.VAR.ECAP6_ENA_PWM.VALUE=0 -DRIVER.ECAP.VAR.ECAP3_CAP2_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP5_PWM_DUTYTIME.VALUE=500.000 -DRIVER.ECAP.VAR.ECAP1_BASE.VALUE=0xFCF79300 -DRIVER.ECAP.VAR.ECAP4_CAP4_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP2_PWM_COMPARE.VALUE=50 -DRIVER.ECAP.VAR.ECAP4_WRAP_COUNTER.VALUE=CAPTURE_EVENT1 -DRIVER.ECAP.VAR.ECAP5_CAPTURE_MODE.VALUE=ONE_SHOT -DRIVER.ECAP.VAR.ECAP1_CAP1_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP2_RESET_COUNTER_CAP1.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP4_PWM_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ECAP.VAR.ECAP2_RESET_COUNTER_CAP2.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP1_CNTOVF.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP2_PWM_DUTYTIME.VALUE=500.000 -DRIVER.ECAP.VAR.ECAP2_RESET_COUNTER_CAP3.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP2_RESET_COUNTER_CAP4.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP2_CAP3_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP6_PRESCALE_REG.VALUE=0 -DRIVER.ECAP.VAR.ECAP2_BASE.VALUE=0xFCF79400 -DRIVER.ECAP.VAR.ECAP2_CEVT1.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP2_CEVT2.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP2_PWM_PERIOD.VALUE=1000.000 -DRIVER.ECAP.VAR.ECAP2_CEVT3.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP2_CEVT4.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP1_WRAP_COUNTER.VALUE=CAPTURE_EVENT1 -DRIVER.ECAP.VAR.ECAP6_CAP1_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP5_ENA_PWM.VALUE=0 -DRIVER.ECAP.VAR.ECAP4_RESET_COUNTER.VALUE=0 -DRIVER.ECAP.VAR.ECAP2_CAPTURE_MODE.VALUE=ONE_SHOT -DRIVER.ECAP.VAR.ECAP3_PWM_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ECAP.VAR.ECAP3_PWM_DUTY.VALUE=50 -DRIVER.ECAP.VAR.ECAP3_PRESCALE_REG.VALUE=0 -DRIVER.ECAP.VAR.ECAP1_CAP4_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP4_PWM_PERIOD_REG.VALUE=0 -DRIVER.ECAP.VAR.ECAP3_PRESCALE.VALUE=0 -DRIVER.ECAP.VAR.ECAP6_CNTOVF.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP3_BASE.VALUE=0xFCF79500 -DRIVER.ECAP.VAR.ECAP5_CAP2_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP3_ENA_LOAD.VALUE=0 -DRIVER.ECAP.VAR.ECAP6_CAP4_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP1_CMP.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP2_PWM_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ECAP.VAR.ECAP4_ENA_PWM.VALUE=0 -DRIVER.ECAP.VAR.ECAP3_CAP1_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP1_PWM_PERIOD.VALUE=1000.000 -DRIVER.ECAP.VAR.ECAP1_RESET_COUNTER.VALUE=0 -DRIVER.ECAP.VAR.ECAP6_PWM_DUTY.VALUE=50 -DRIVER.ECAP.VAR.ECAP2_CMP.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP6_PWM_DUTYTIME.VALUE=500.000 -DRIVER.ECAP.VAR.ECAP4_CAP3_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP4_BASE.VALUE=0xFCF79600 -DRIVER.ECAP.VAR.ECAP6_PRESCALE.VALUE=0 -DRIVER.ECAP.VAR.ECAP4_PWM_COMPARE.VALUE=50 -DRIVER.ECAP.VAR.ECAP4_RESET_COUNTER_CAP1.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP3_CEVT1.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP4_RESET_COUNTER_CAP2.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP3_CEVT2.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP4_RESET_COUNTER_CAP3.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP3_CEVT3.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP4_RESET_COUNTER_CAP4.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP3_CEVT4.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP6_ENA_LOAD.VALUE=0 -DRIVER.ECAP.VAR.ECAP5_WRAP_COUNTER.VALUE=CAPTURE_EVENT1 -DRIVER.ECAP.VAR.ECAP4_CNTOVF.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP3_CMP.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP1_PWM_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ECAP.VAR.ECAP6_RESET_COUNTER.VALUE=0 -DRIVER.ECAP.VAR.ECAP6_CAPTURE_MODE.VALUE=ONE_SHOT -DRIVER.ECAP.VAR.ECAP1_PWM_COMPARE.VALUE=50 -DRIVER.ECAP.VAR.ECAP2_CAP2_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP3_PWM_DUTYTIME.VALUE=500.000 -DRIVER.ECAP.VAR.ECAP3_CAP4_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP4_CMP.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP1_PRD.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP5_PWM_PERIOD_REG.VALUE=0 -DRIVER.ECAP.VAR.ECAP6_PWM_PERIOD.VALUE=1000.000 -DRIVER.ECAP.VAR.ECAP5_BASE.VALUE=0xFCF79700 -DRIVER.ECAP.VAR.ECAP3_ENA_PWM.VALUE=0 -DRIVER.ECAP.VAR.ECAP2_WRAP_COUNTER.VALUE=CAPTURE_EVENT1 -DRIVER.ECAP.VAR.ECAP3_CAPTURE_MODE.VALUE=ONE_SHOT -DRIVER.ECAP.VAR.ECAP1_RESET_COUNTER_CAP1.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP1_RESET_COUNTER_CAP2.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP1_RESET_COUNTER_CAP3.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP1_RESET_COUNTER_CAP4.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP5_CMP.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP2_PRD.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP2_PWM_DUTY.VALUE=50 -DRIVER.ECAP.VAR.ECAP1_CAP3_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP4_PRESCALE_REG.VALUE=0 -DRIVER.ECAP.VAR.ECAP2_PRESCALE.VALUE=0 -DRIVER.ECAP.VAR.ECAP2_CNTOVF.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP5_CAP1_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP1_PWM_PERIOD_REG.VALUE=0 -DRIVER.ECAP.VAR.ECAP6_CMP.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP2_ENA_LOAD.VALUE=0 -DRIVER.ECAP.VAR.ECAP3_PRD.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP3_RESET_COUNTER.VALUE=0 -DRIVER.ECAP.VAR.ECAP6_BASE.VALUE=0xFCF79800 -DRIVER.ECAP.VAR.ECAP6_CAP3_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP4_CEVT1.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP4_CEVT2.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP4_CEVT3.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP4_CEVT4.VALUE=0x0000 -DRIVER.EQEP.VAR.EQEP2_QUPRD.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_INDEX_EVT_INIT_ENABLE.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_IGATE.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_QPE_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_PC_RST_MODE.VALUE=MAX_POSITION -DRIVER.EQEP.VAR.EQEP1_UTO_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_SEL_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_INDEX_EVT_SELECT.VALUE=RISING_EDGE -DRIVER.EQEP.VAR.EQEP2_PCE_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_PCU_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_BASE.VALUE=0xFCF79900 -DRIVER.EQEP.VAR.EQEP1_INV_QEPS_POL.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_INV_QEPA_POL.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_PCSHDW.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_PC_INIT_VALUE.VALUE=0x00000000 -DRIVER.EQEP.VAR.EQEP2_PCR_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_BASE.VALUE=0xFCF79A00 -DRIVER.EQEP.VAR.EQEP1_ENABLE_CAPTURE.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_INV_QEPB_POL.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_MAXPC_VALUE.VALUE=0x00000000 -DRIVER.EQEP.VAR.EQEP1_PCM_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_PCPOL.VALUE=ACTIVE_HIGH -DRIVER.EQEP.VAR.EQEP2_UNIT_POS_PRESCALER.VALUE=PS_512 -DRIVER.EQEP.VAR.EQEP2_CAP_CLK_PRESCALER.VALUE=PS_8 -DRIVER.EQEP.VAR.EQEP1_PCSPW.VALUE=0x000 -DRIVER.EQEP.VAR.EQEP1_POSCMP.VALUE=0x00000000 -DRIVER.EQEP.VAR.EQEP2_PC_MODE.VALUE=DIRECTION_COUNT -DRIVER.EQEP.VAR.EQEP1_PCE_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_INV_QEPS_POL.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_SET_INIT_AT_STARTUP.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_ENABLE_CAPTURE.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_STROBE_EVT_SELECT.VALUE=DIRECTON_DEPENDENT -DRIVER.EQEP.VAR.EQEP2_PCPOL.VALUE=ACTIVE_HIGH -DRIVER.EQEP.VAR.EQEP2_INV_QEPA_POL.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_CAP_CLK_PRESCALER.VALUE=PS_8 -DRIVER.EQEP.VAR.EQEP2_QDC_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_QCLM.VALUE=ON_POSITION_COUNTER_READ -DRIVER.EQEP.VAR.EQEP1_PC_MODE.VALUE=DIRECTION_COUNT -DRIVER.EQEP.VAR.EQEP2_WTO_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_SWI_ENABLE.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_PCR_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_INV_QEPB_POL.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_IEL.VALUE=RISING_EDGE -DRIVER.EQEP.VAR.EQEP2_PCSPW.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_PC_INIT_VALUE.VALUE=0x00000000 -DRIVER.EQEP.VAR.EQEP1_PCLOAD.VALUE=QPOSCNT_EQ_QPSCMP -DRIVER.EQEP.VAR.EQEP2_IEL_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_IEL.VALUE=RISING_EDGE -DRIVER.EQEP.VAR.EQEP1_MAXPC_VALUE.VALUE=0x00000000 -DRIVER.EQEP.VAR.EQEP1_INV_QEPI_POL.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_QCLM.VALUE=ON_POSITION_COUNTER_READ -DRIVER.EQEP.VAR.EQEP1_STROBE_EVT_INIT_ENABLE.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_PCO_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_STROBE_EVT_INIT_ENABLE.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_EXT_CLK_RATE.VALUE=RESOLUTION_1x -DRIVER.EQEP.VAR.EQEP1_STROBE_EVT_SELECT.VALUE=DIRECTON_DEPENDENT -DRIVER.EQEP.VAR.EQEP1_UNIT_POS_PRESCALER.VALUE=PS_512 -DRIVER.EQEP.VAR.EQEP1_WDPRD.VALUE=0x0000 -DRIVER.EQEP.VAR.EQEP1_SEL.VALUE=RISING_EDGE -DRIVER.EQEP.VAR.EQEP1_SOEN.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_QPE_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_PC_RST_MODE.VALUE=MAX_POSITION -DRIVER.EQEP.VAR.EQEP1_WDE.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_SET_INIT_AT_STARTUP.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_UTO_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_SWI_ENABLE.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_POSITIVE_ROTATION.VALUE=CLOCKWISE -DRIVER.EQEP.VAR.EQEP2_SEL_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_SEL.VALUE=RISING_EDGE -DRIVER.EQEP.VAR.EQEP2_PCU_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_WDE.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_SPSEL.VALUE=INDEX_PIN -DRIVER.EQEP.VAR.EQEP1_PCSHDW.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_SWAP.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_SOEN.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_POSCMP.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_QUPRD.VALUE=0x00000000 -DRIVER.EQEP.VAR.EQEP1_IGATE.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_QDC_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_SWAP.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_WDPRD.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_WTO_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_POSITIVE_ROTATION.VALUE=CLOCKWISE -DRIVER.EQEP.VAR.EQEP2_INV_QEPI_POL.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_PCM_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_IEL_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_EXT_CLK_RATE.VALUE=RESOLUTION_1x -DRIVER.EQEP.VAR.EQEP2_SPSEL.VALUE=INDEX_PIN -DRIVER.EQEP.VAR.EQEP1_PCO_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_INDEX_EVT_SELECT.VALUE=RISING_EDGE -DRIVER.EQEP.VAR.EQEP1_INDEX_EVT_INIT_ENABLE.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_PCLOAD.VALUE=QPOSCNT_EQ_QPSCMP -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_11_NUMBER.VALUE=11 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_10_END.VALUE=9 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_7_NUMBER.VALUE=7 -DRIVER.FEE.VAR.FEE_START_SECTOR.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_3_DEVICE_INDEX.VALUE=0x00000000 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_13_DATASETS.VALUE=1 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_4_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_21_START.VALUE=20 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_13_START.VALUE=12 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_9_START.VALUE=8 -DRIVER.FEE.VAR.FEE_VS29_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_11_OFFSET.VALUE=0 -DRIVER.FEE.VAR.FEE_VS30_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VS22_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VS14_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_9_OFFSET.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_32_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_24_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_16_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_11_END.VALUE=10 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_11_SIZE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_2_WRITE_CYCLES.VALUE=0x8 -DRIVER.FEE.VAR.FEE_VS7_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_2_OFFSET.VALUE=0 -DRIVER.FEE.VAR.FEE_READ_CYCLE_COUNT.VALUE=10 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_5_IMED_DATA.VALUE=TRUE -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_3_DATASETS.VALUE=1 -DRIVER.FEE.VAR.FEE_NUMBER_OF_VIRTUAL_SECTORS.VALUE=4 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX15_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX4_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_FLASH_CRC_ENABLE.VALUE=STD_ON -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_26_START.VALUE=25 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_18_START.VALUE=17 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_7_SIZE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_12_NUMBER.VALUE=12 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_20_END.VALUE=19 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_12_END.VALUE=11 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_10_EEP.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_16_WRITE_CYCLES.VALUE=0x8 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_5_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_3_NUMBER.VALUE=3 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_32_NUMBER.VALUE=32 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_24_NUMBER.VALUE=24 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_16_NUMBER.VALUE=16 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_13_IMED_DATA.VALUE=TRUE -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_16_DATASETS.VALUE=1 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_5_NUMBER.VALUE=5 -DRIVER.FEE.VAR.FEE_SECTORS_EEP1.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_33_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_25_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_17_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_21_END.VALUE=20 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_13_END.VALUE=12 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_12_SIZE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_16_OFFSET.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_14_DEVICE_INDEX.VALUE=0x00000000 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_11_EEP.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_5_START.VALUE=4 -DRIVER.FEE.VAR.FEE_BLOCK_NUMBER.VALUE=1 -DRIVER.FEE.VAR.FEE_VS27_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VS19_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VS20_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VS12_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_7_OFFSET.VALUE=0 -DRIVER.FEE.VAR.FEE_DRIVER_INDEX.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_6_DATASETS.VALUE=1 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_13_WRITE_CYCLES.VALUE=0x8 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_9_WRITE_CYCLES.VALUE=0x8 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_8_SIZE.VALUE=0 -DRIVER.FEE.VAR.FEE_VS5_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_30_END.VALUE=29 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_22_END.VALUE=21 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_14_END.VALUE=13 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX9_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_12_EEP.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX13_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX2_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_6_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_30_START.VALUE=29 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_22_START.VALUE=21 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_14_START.VALUE=13 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_3_IMED_DATA.VALUE=TRUE -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_11_DEVICE_INDEX.VALUE=0x00000000 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_7_DEVICE_INDEX.VALUE=0x00000000 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_10_NUMBER.VALUE=10 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_26_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_18_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_NUMBER_OF_EEPS.VALUE=1 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_8_NUMBER.VALUE=8 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_31_END.VALUE=30 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_29_NUMBER.VALUE=29 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_23_END.VALUE=22 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_15_END.VALUE=14 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_13_SIZE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_13_EEP.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_1_NUMBER.VALUE=1 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_30_NUMBER.VALUE=30 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_22_NUMBER.VALUE=22 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_14_NUMBER.VALUE=14 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_10_WRITE_CYCLES.VALUE=0x8 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_6_WRITE_CYCLES.VALUE=0x8 -DRIVER.FEE.VAR.FEE_DEVICE_INDEX.VALUE=0 -DRIVER.FEE.VAR.FEE_PAGE_OVERHEAD.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_3_NUMBER.VALUE=3 -DRIVER.FEE.VAR.FEE_TI_FEE_SW_MAJOR_VERSION.VALUE=1 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_27_START.VALUE=26 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_19_START.VALUE=18 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_11_IMED_DATA.VALUE=TRUE -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_9_SIZE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_8_IMED_DATA.VALUE=TRUE -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_14_OFFSET.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_12_DATASETS.VALUE=1 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_9_DATASETS.VALUE=1 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_32_END.VALUE=31 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_24_END.VALUE=23 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_16_END.VALUE=15 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_1_END.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_1_START.VALUE=0 -DRIVER.FEE.VAR.FEE_VS33_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VS25_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VS17_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_14_EEP.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_4_DEVICE_INDEX.VALUE=0x00000000 -DRIVER.FEE.VAR.FEE_SECTOR_NUMBER.VALUE=1 -DRIVER.FEE.VAR.FEE_VS10_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUALPAGE_SIZE.VALUE=8 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_5_OFFSET.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_7_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VS3_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX7_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_3_WRITE_CYCLES.VALUE=0x8 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_1_EEP.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_2_DATASETS.VALUE=1 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_27_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_19_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_33_END.VALUE=32 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_25_END.VALUE=24 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_17_END.VALUE=16 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_2_END.VALUE=1 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_16_IMED_DATA.VALUE=TRUE -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_14_SIZE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX11_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_FLASH_WRITECOUNTER_SAVE.VALUE=STD_ON -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_15_EEP.VALUE=0 -DRIVER.FEE.VAR.FEE_VS_INDEX.VALUE=2 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_15_NUMBER.VALUE=15 -DRIVER.FEE.VAR.FEE_TI_FEE_SW_PATCH_VERSION.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_10_START.VALUE=9 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_6_START.VALUE=5 -DRIVER.FEE.VAR.FEE_JOBERROR_NOTIFICATION.VALUE=JobErrorNotification -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_1_DEVICE_INDEX.VALUE=0x00000000 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_10_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_6_NUMBER.VALUE=6 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_27_NUMBER.VALUE=27 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_19_NUMBER.VALUE=19 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_1_IMED_DATA.VALUE=TRUE -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_2_EEP.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_26_END.VALUE=25 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_20_NUMBER.VALUE=20 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_18_END.VALUE=17 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_12_NUMBER.VALUE=12 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_8_NUMBER.VALUE=8 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_3_END.VALUE=2 -DRIVER.FEE.VAR.FEE_BLOCK_SIZE.VALUE=0x10 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_16_EEP.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_15_DATASETS.VALUE=1 -DRIVER.FEE.VAR.FEE_TOTAL_BLOCKS_DATASETS.VALUE=1 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_1_NUMBER.VALUE=1 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_8_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_31_START.VALUE=30 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_23_START.VALUE=22 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_15_START.VALUE=14 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_1_SIZE.VALUE=8 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_12_OFFSET.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX.VALUE=1 -DRIVER.FEE.VAR.FEE_VS31_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VS23_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VS15_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_15_DEVICE_INDEX.VALUE=0x00000000 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_3_EEP.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_28_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_27_END.VALUE=26 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_19_END.VALUE=18 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_4_END.VALUE=3 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_15_SIZE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_6_IMED_DATA.VALUE=TRUE -DRIVER.FEE.VAR.FEE_VS8_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_3_OFFSET.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_5_DATASETS.VALUE=1 -DRIVER.FEE.VAR.FEE_MAXIMUM_BLOCKING_TIME.VALUE=600 -DRIVER.FEE.VAR.FEE_VS1_ENABLE.VALUE=1 -DRIVER.FEE.VAR.FEE_NO_OF_UNCONFIGURED_BLOCKS_TO_COPY.VALUE=0 -DRIVER.FEE.VAR.FEE_FLASH_BANK_NUM.VALUE=7 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX16_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_14_WRITE_CYCLES.VALUE=0x8 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX5_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_11_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_28_START.VALUE=27 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_4_EEP.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_13_NUMBER.VALUE=13 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_28_END.VALUE=27 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_5_END.VALUE=4 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_2_START.VALUE=1 -DRIVER.FEE.VAR.FEE_SECTOR_OVERHEAD.VALUE=16 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_14_IMED_DATA.VALUE=TRUE -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_12_DEVICE_INDEX.VALUE=0x00000000 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_8_DEVICE_INDEX.VALUE=0x00000000 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_9_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_4_NUMBER.VALUE=4 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_33_NUMBER.VALUE=32 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_25_NUMBER.VALUE=25 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_17_NUMBER.VALUE=17 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_2_SIZE.VALUE=0 -DRIVER.FEE.VAR.FEE_TI_FEE_SW_MINOR_VERSION.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_10_NUMBER.VALUE=10 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_6_NUMBER.VALUE=6 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_5_EEP.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_29_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_29_END.VALUE=28 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_6_END.VALUE=5 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_16_SIZE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_11_WRITE_CYCLES.VALUE=0x8 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_7_WRITE_CYCLES.VALUE=0x8 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_11_START.VALUE=10 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_7_START.VALUE=6 -DRIVER.FEE.VAR.FEE_VS28_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VERSIONINFO_API.VALUE=STD_ON -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_10_OFFSET.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_11_DATASETS.VALUE=1 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_8_DATASETS.VALUE=1 -DRIVER.FEE.VAR.MAX_BLOCK_TIME.VALUE=600 -DRIVER.FEE.VAR.FEE_VS21_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VS13_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_8_OFFSET.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_20_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_12_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VS6_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_WRITE_CYCLES.VALUE=10 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_6_EEP.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_5_DEVICE_INDEX.VALUE=0x00000000 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_1_OFFSET.VALUE=16 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_7_END.VALUE=6 -DRIVER.FEE.VAR.FEE_NUMBER_OF_BLOCKS.VALUE=1 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_BANK.VALUE=1 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX14_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_4_IMED_DATA.VALUE=TRUE -DRIVER.FEE.VAR.FEE_BLOCK_INDEX3_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_NUMBER_OF_EIGHTBYTEWRITES.VALUE=1 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_1_DATASETS.VALUE=1 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_32_START.VALUE=31 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_24_START.VALUE=23 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_16_START.VALUE=15 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_4_WRITE_CYCLES.VALUE=0x8 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_3_SIZE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_11_NUMBER.VALUE=11 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_7_EEP.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_9_NUMBER.VALUE=9 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_8_END.VALUE=7 -DRIVER.FEE.VAR.FEE_END_SECTOR.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_1_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_2_NUMBER.VALUE=2 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_31_NUMBER.VALUE=31 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_23_NUMBER.VALUE=23 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_15_NUMBER.VALUE=15 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_2_DEVICE_INDEX.VALUE=0x00000000 -DRIVER.FEE.VAR.FEE_FLASH_ERROR_CORRECTION_HANDLING.VALUE=TI_Fee_None -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_4_NUMBER.VALUE=4 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_12_IMED_DATA.VALUE=TRUE -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_9_IMED_DATA.VALUE=TRUE -DRIVER.FEE.VAR.FEE_DEVERROR_DETECT.VALUE=STD_ON -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_14_DATASETS.VALUE=1 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_21_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_13_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_29_START.VALUE=28 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_15_OFFSET.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_8_EEP.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_9_END.VALUE=8 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_3_START.VALUE=2 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_1_WRITE_CYCLES.VALUE=0x8 -DRIVER.FEE.VAR.FEE_VS26_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VS18_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VS11_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_6_OFFSET.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_4_SIZE.VALUE=0 -DRIVER.FEE.VAR.FEE_VS4_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_16_DEVICE_INDEX.VALUE=0x00000000 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_4_DATASETS.VALUE=1 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX8_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_MAX_NUMBER_OF_LINKS.VALUE=256 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_9_EEP.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX12_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX1_ENABLE.VALUE=1 -DRIVER.FEE.VAR.FEE_FLASH_ERROR_CORRECTION_ENABLE.VALUE=STD_ON -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_2_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_DATASELECT_BITS.VALUE=0 -DRIVER.FEE.VAR.FEE_OPERATING_FREQ.VALUE=150.000 -DRIVER.FEE.VAR.FEE_TOTAL_SECTORS.VALUE=32 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_16_NUMBER.VALUE=16 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_20_START.VALUE=19 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_12_START.VALUE=11 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_8_START.VALUE=7 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_15_WRITE_CYCLES.VALUE=0x8 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_2_IMED_DATA.VALUE=TRUE -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_30_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_22_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_14_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_7_NUMBER.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_28_NUMBER.VALUE=28 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_21_NUMBER.VALUE=21 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_13_NUMBER.VALUE=13 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_9_NUMBER.VALUE=9 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_13_DEVICE_INDEX.VALUE=0x00000000 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_9_DEVICE_INDEX.VALUE=0x00000000 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_2_NUMBER.VALUE=2 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_33_START.VALUE=32 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_25_START.VALUE=24 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_17_START.VALUE=16 -DRIVER.FEE.VAR.FEE_JOBEND_NOTIFICATION.VALUE=JobEndNotification -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_5_SIZE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_13_OFFSET.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_12_WRITE_CYCLES.VALUE=0x8 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_10_IMED_DATA.VALUE=TRUE -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_8_WRITE_CYCLES.VALUE=0x8 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_7_IMED_DATA.VALUE=TRUE -DRIVER.FEE.VAR.FEE_VS32_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VS24_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VS16_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_ENABLE_ECC.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_OVERHEAD.VALUE=24 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_10_DATASETS.VALUE=1 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_7_DATASETS.VALUE=1 -DRIVER.FEE.VAR.FEE_VS9_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_4_OFFSET.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_3_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VS2_ENABLE.VALUE=1 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX6_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_10_DEVICE_INDEX.VALUE=0x00000000 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_6_DEVICE_INDEX.VALUE=0x00000000 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_31_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_23_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_15_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_10_SIZE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX10_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_14_NUMBER.VALUE=14 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_4_START.VALUE=3 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_15_IMED_DATA.VALUE=TRUE -DRIVER.FEE.VAR.FEE_CHECK_BANK7_ACCESS.VALUE=STD_OFF -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_5_WRITE_CYCLES.VALUE=0x8 -DRIVER.FEE.VAR.FEE_POLLING_MODE.VALUE=STD_ON -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_5_NUMBER.VALUE=5 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_26_NUMBER.VALUE=26 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_18_NUMBER.VALUE=18 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_6_SIZE.VALUE=0 -DRIVER.AJSM.VAR.AJSM_NEW_KEY_WORD_2.VALUE=0xFFFDFFFE -DRIVER.AJSM.VAR.AJSM_NEW_KEY_WORD_3.VALUE=0xFFEFFFFF -DRIVER.AJSM.VAR.AJSM_VISIBLE_KEY_WORD_0.VALUE=0xEFFDFFFF -DRIVER.AJSM.VAR.AJSM_VISIBLE_KEY_WORD_1.VALUE=0xFFFFFFFF -DRIVER.AJSM.VAR.AJSM_VISIBLE_KEY_WORD_2.VALUE=0xFFFDFFFE -DRIVER.AJSM.VAR.AJSM_VISIBLE_KEY_WORD_3.VALUE=0xFFEFFFFF -DRIVER.AJSM.VAR.AJSM_SCAN_PATTERN_WORD_0.VALUE=PATTERN_NOT_REQUIRED -DRIVER.AJSM.VAR.AJSM_VISIBLE_KEY_ECC_BYTE_0.VALUE=0xED -DRIVER.AJSM.VAR.AJSM_SCAN_PATTERN_WORD_1.VALUE=PATTERN_NOT_REQUIRED -DRIVER.AJSM.VAR.AJSM_VISIBLE_KEY_ECC_BYTE_1.VALUE=0xED -DRIVER.AJSM.VAR.AJSM_SCAN_PATTERN_WORD_2.VALUE=PATTERN_NOT_REQUIRED -DRIVER.AJSM.VAR.AJSM_SCAN_PATTERN_WORD_3.VALUE=PATTERN_NOT_REQUIRED -DRIVER.AJSM.VAR.AJSM_NEW_KEY_ECC_BYTE_0.VALUE=0xED -DRIVER.AJSM.VAR.AJSM_NEW_KEY_ECC_BYTE_1.VALUE=0xED -DRIVER.AJSM.VAR.AJSM_SCAN_PATTERN.VALUE=PATTERN_NOT_REQUIRED -DRIVER.AJSM.VAR.AJSM_NEW_KEY_WORD_0.VALUE=0xEFFDFFFF -DRIVER.AJSM.VAR.AJSM_NEW_KEY_WORD_1.VALUE=0xFFFFFFFF diff --git a/tests/scripts/waf-tools/f_hcg/tests/test_hcg3.hcg b/tests/scripts/waf-tools/f_hcg/tests/test_hcg3.hcg deleted file mode 100644 index 0eac777a..00000000 --- a/tests/scripts/waf-tools/f_hcg/tests/test_hcg3.hcg +++ /dev/null @@ -1,1069 +0,0 @@ - - - - TMS570LC43x - TMS570LC4357ZWT_FREERTOS - test_hcg3.dil - ti - - - 04.07.01 - - - - - - - - - - - - - - - - - - - - - - - - - HL_hal_stdtypes.h - include\HL_hal_stdtypes.h - - - HL_sys_common.h - include\HL_sys_common.h - - - HL_reg_system.h - include\HL_reg_system.h - - - HL_reg_flash.h - include\HL_reg_flash.h - - - HL_reg_l2ramw.h - include\HL_reg_l2ramw.h - - - HL_reg_vim.h - include\HL_reg_vim.h - - - HL_reg_pbist.h - include\HL_reg_pbist.h - - - HL_reg_stc.h - include\HL_reg_stc.h - - - HL_reg_efc.h - include\HL_reg_efc.h - - - HL_reg_pcr.h - include\HL_reg_pcr.h - - - HL_reg_pmm.h - include\HL_reg_pmm.h - - - HL_reg_dma.h - include\HL_reg_dma.h - - - HL_reg_ccmr5.h - include\HL_reg_ccmr5.h - - - HL_sys_core.h - include\HL_sys_core.h - - - HL_system.h - include\HL_system.h - - - HL_sys_vim.h - include\HL_sys_vim.h - - - HL_sys_mpu.h - include\HL_sys_mpu.h - - - HL_sys_pmu.h - include\HL_sys_pmu.h - - - HL_sys_pcr.h - include\HL_sys_pcr.h - - - HL_sys_pmm.h - include\HL_sys_pmm.h - - - HL_sys_dma.h - include\HL_sys_dma.h - - - HL_sys_core.asm - source\HL_sys_core.asm - - - HL_sys_intvecs.asm - source\HL_sys_intvecs.asm - - - HL_sys_mpu.asm - source\HL_sys_mpu.asm - - - HL_sys_pmu.asm - source\HL_sys_pmu.asm - - - HL_sys_pcr.c - source\HL_sys_pcr.c - - - HL_sys_pmm.c - source\HL_sys_pmm.c - - - HL_sys_dma.c - source\HL_sys_dma.c - - - HL_system.c - source\HL_system.c - - - HL_sys_phantom.c - source\HL_sys_phantom.c - - - HL_sys_startup.c - source\HL_sys_startup.c - - - HL_sys_vim.c - source\HL_sys_vim.c - - - HL_sys_main.c - source\HL_sys_main.c - - - HL_notification.c - source\HL_notification.c - - - HL_sys_link.cmd - source\HL_sys_link.cmd - - - HL_reg_epc.h - include\HL_reg_epc.h - - - HL_reg_nmpu.h - include\HL_reg_nmpu.h - - - HL_reg_scm.h - include\HL_reg_scm.h - - - HL_reg_sdcmmr.h - include\HL_reg_sdcmmr.h - - - HL_epc.h - include\HL_epc.h - - - HL_epc.c - source\HL_epc.c - - - HL_nmpu.h - include\HL_nmpu.h - - - HL_nmpu.c - source\HL_nmpu.c - - - HL_errata.h - include\HL_errata.h - - - HL_errata.c - source\HL_errata.c - - - HL_Test.h - - - HL_errata_SSWF021_45.h - include\HL_errata_SSWF021_45.h - - - HL_errata_SSWF021_45_defs.h - include\HL_errata_SSWF021_45_defs.h - - - HL_errata_SSWF021_45.c - source\HL_errata_SSWF021_45.c - - - os_projdefs.h - - - FreeRTOSConfig.h - - - os_portmacro.h - - - os_mpu_wrappers.h - - - os_portable.h - - - FreeRTOS.h - - - os_list.h - - - os_queue.h - - - os_semphr.h - - - os_croutine.h - - - os_StackMacros.h - - - os_task.h - - - os_timer.h - - - os_port.c - - - os_portasm.asm - - - os_tasks.c - - - os_queue.c - - - os_list.c - - - os_croutine.c - - - os_timer.c - - - os_mpu_wrappers.c - - - os_heap.c - - - os_event_groups.c - - - os_event_groups.h - - - HL_reg_pinmux.h - - - HL_pinmux.h - - - HL_pinmux.c - - - HL_reg_gio.h - - - HL_gio.h - - - HL_gio.c - - - HL_reg_esm.h - - - HL_esm.h - - - HL_esm.c - - - HL_reg_sci.h - - - HL_sci.h - - - HL_sci.c - - - HL_reg_lin.h - - - HL_lin.h - - - HL_lin.c - - - HL_reg_mibspi.h - - - HL_mibspi.h - - - HL_mibspi.c - - - HL_reg_spi.h - - - HL_spi.h - - - - HL_reg_can.h - - - HL_can.h - - - HL_can.c - - - HL_reg_adc.h - - - HL_adc.h - - - HL_adc.c - - - - - - - - - std_nhet.h - - - HL_reg_het.h - - - HL_het.h - - - HL_het.c - - - HL_reg_htu.h - - - HL_htu.h - - - - - - - - - HL_reg_i2c.h - - - HL_i2c.h - - - HL_i2c.c - - - HL_emac.h - - - HL_hw_emac.h - - - HL_hw_emac_ctrl.h - - - HL_hw_mdio.h - - - HL_hw_reg_access.h - - - HL_mdio.h - - - HL_phy_dp83640.h - - - HL_phy_tlk111.h - - - HL_emac_phyConfig.h - - - - - - - HL_reg_dcc.h - - - HL_dcc.h - - - - HL_reg_rtp.h - - - HL_rtp.h - - - - HL_reg_dmm.h - - - HL_dmm.h - - - - HL_reg_emif.h - - - HL_emif.h - - - - HL_reg_pom.h - - - HL_pom.h - - - - HL_reg_crc.h - - - HL_crc.h - - - HL_crc.c - - - HL_reg_etpwm.h - - - HL_etpwm.h - - - HL_etpwm.c - - - HL_reg_ecap.h - - - HL_ecap.h - - - HL_ecap.c - - - HL_reg_eqep.h - - - HL_eqep.h - - - HL_eqep.c - - - Device_TMS570LC43.h - - - Device_header.h - - - Device_types.h - - - ti_fee_cfg.h - - - MemMap.h - - - ti_fee_types.h - - - ti_fee.h - - - fee_interface.h - - - Device_TMS570LC43.c - - - ti_fee_cfg.c - - - ti_fee_Info.c - - - ti_fee_ini.c - - - ti_fee_main.c - - - ti_fee_read.c - - - ti_fee_writeSync.c - - - ti_fee_writeAsync.c - - - ti_fee_util.c - - - ti_fee_cancel.c - - - ti_fee_format.c - - - ti_fee_eraseimmediateblock.c - - - ti_fee_invalidateblock.c - - - ti_fee_shutdown.c - - - Fapi_UserDefinedFunctions.c - - - ti_fee_readSync.c - - - HL_ajsm.asm - - - - - - - include\os_projdefs.h - - - include\FreeRTOSConfig.h - - - include\os_portmacro.h - - - include\os_mpu_wrappers.h - - - include\os_portable.h - - - include\FreeRTOS.h - - - include\os_list.h - - - include\os_queue.h - - - include\os_semphr.h - - - include\os_croutine.h - - - include\os_StackMacros.h - - - include\os_task.h - - - include\os_timer.h - - - source\os_port.c - - - source\os_portasm.asm - - - source\os_tasks.c - - - source\os_queue.c - - - source\os_list.c - - - source\os_croutine.c - - - source\os_timer.c - - - source\os_mpu_wrappers.c - - - source\os_heap.c - - - source\os_event_groups.c - - - include\os_event_groups.h - - - - - - - include\HL_reg_pinmux.h - - - include\HL_pinmux.h - - - source\HL_pinmux.c - - - - - - - include\HL_reg_gio.h - - - include\HL_gio.h - - - source\HL_gio.c - - - - - - - include\HL_reg_esm.h - - - include\HL_esm.h - - - source\HL_esm.c - - - - - - - include\HL_reg_sci.h - - - include\HL_sci.h - - - source\HL_sci.c - - - - - - - include\HL_reg_lin.h - - - include\HL_lin.h - - - source\HL_lin.c - - - - - - - include\HL_reg_mibspi.h - - - include\HL_mibspi.h - - - source\HL_mibspi.c - - - - - - - include\HL_reg_spi.h - - - include\HL_spi.h - - - - - - - - - - include\HL_reg_can.h - - - include\HL_can.h - - - source\HL_can.c - - - - - - - include\HL_reg_adc.h - - - include\HL_adc.h - - - source\HL_adc.c - - - - - - - include\std_nhet.h - - - include\HL_reg_het.h - - - include\HL_het.h - - - source\HL_het.c - - - include\HL_reg_htu.h - - - include\HL_htu.h - - - - - - - include\HL_reg_i2c.h - - - include\HL_i2c.h - - - source\HL_i2c.c - - - - - - - include\HL_emac.h - - - include\HL_hw_emac.h - - - include\HL_hw_emac_ctrl.h - - - include\HL_hw_mdio.h - - - include\HL_hw_reg_access.h - - - include\HL_mdio.h - - - include\HL_phy_dp83640.h - - - include\HL_phy_tlk111.h - - - include\HL_emac_phyConfig.h - - - - - - - - - - - - - - - - - - - include\HL_reg_dcc.h - - - include\HL_dcc.h - - - - - - - - - - include\HL_reg_rtp.h - - - include\HL_rtp.h - - - - - - - - - - include\HL_reg_dmm.h - - - include\HL_dmm.h - - - - - - - - - - include\HL_reg_emif.h - - - include\HL_emif.h - - - - - - - - - - include\HL_reg_pom.h - - - include\HL_pom.h - - - - - - - - - - include\HL_reg_crc.h - - - include\HL_crc.h - - - source\HL_crc.c - - - - - - - include\HL_reg_etpwm.h - - - include\HL_etpwm.h - - - source\HL_etpwm.c - - - - - - - include\HL_reg_ecap.h - - - include\HL_ecap.h - - - source\HL_ecap.c - - - - - - - include\HL_reg_eqep.h - - - include\HL_eqep.h - - - source\HL_eqep.c - - - - - - - include\Device_TMS570LC43.h - - - include\Device_header.h - - - include\Device_types.h - - - include\ti_fee_cfg.h - - - include\MemMap.h - - - include\ti_fee_types.h - - - include\ti_fee.h - - - include\fee_interface.h - - - source\Device_TMS570LC43.c - - - source\ti_fee_cfg.c - - - source\ti_fee_Info.c - - - source\ti_fee_ini.c - - - source\ti_fee_main.c - - - source\ti_fee_read.c - - - source\ti_fee_writeSync.c - - - source\ti_fee_writeAsync.c - - - source\ti_fee_util.c - - - source\ti_fee_cancel.c - - - source\ti_fee_format.c - - - source\ti_fee_eraseimmediateblock.c - - - source\ti_fee_invalidateblock.c - - - source\ti_fee_shutdown.c - - - source\Fapi_UserDefinedFunctions.c - - - source\ti_fee_readSync.c - - - - - - - source\HL_ajsm.asm - - - - diff --git a/tests/scripts/waf-tools/f_hcg/tests/test_hcg3.json b/tests/scripts/waf-tools/f_hcg/tests/test_hcg3.json deleted file mode 100644 index c11b7065..00000000 --- a/tests/scripts/waf-tools/f_hcg/tests/test_hcg3.json +++ /dev/null @@ -1,170 +0,0 @@ -{ - "sources": [ - "source\\HL_sys_core.asm", - "source\\HL_sys_intvecs.asm", - "source\\HL_sys_mpu.asm", - "source\\HL_sys_pmu.asm", - "source\\HL_sys_pcr.c", - "source\\HL_sys_pmm.c", - "source\\HL_sys_dma.c", - "source\\HL_system.c", - "source\\HL_sys_phantom.c", - "source\\HL_sys_startup.c", - "source\\HL_sys_vim.c", - "source\\HL_notification.c", - "source\\HL_epc.c", - "source\\HL_nmpu.c", - "source\\HL_errata.c", - "source\\HL_errata_SSWF021_45.c", - "source\\HL_pinmux.c", - "source\\HL_gio.c", - "source\\HL_esm.c", - "source\\HL_sci.c", - "source\\HL_lin.c", - "source\\HL_mibspi.c", - "source\\HL_can.c", - "source\\HL_adc.c", - "source\\HL_het.c", - "source\\HL_i2c.c", - "source\\HL_crc.c", - "source\\HL_etpwm.c", - "source\\HL_ecap.c", - "source\\HL_eqep.c", - "source\\Device_TMS570LC43.c", - "source\\ti_fee_cfg.c", - "source\\ti_fee_Info.c", - "source\\ti_fee_ini.c", - "source\\ti_fee_main.c", - "source\\ti_fee_read.c", - "source\\ti_fee_writeSync.c", - "source\\ti_fee_writeAsync.c", - "source\\ti_fee_util.c", - "source\\ti_fee_cancel.c", - "source\\ti_fee_format.c", - "source\\ti_fee_eraseimmediateblock.c", - "source\\ti_fee_invalidateblock.c", - "source\\ti_fee_shutdown.c", - "source\\Fapi_UserDefinedFunctions.c", - "source\\ti_fee_readSync.c", - "source\\HL_ajsm.asm" - ], - "headers": [ - "include\\HL_hal_stdtypes.h", - "include\\HL_sys_common.h", - "include\\HL_reg_system.h", - "include\\HL_reg_flash.h", - "include\\HL_reg_l2ramw.h", - "include\\HL_reg_vim.h", - "include\\HL_reg_pbist.h", - "include\\HL_reg_stc.h", - "include\\HL_reg_efc.h", - "include\\HL_reg_pcr.h", - "include\\HL_reg_pmm.h", - "include\\HL_reg_dma.h", - "include\\HL_reg_ccmr5.h", - "include\\HL_sys_core.h", - "include\\HL_system.h", - "include\\HL_sys_vim.h", - "include\\HL_sys_mpu.h", - "include\\HL_sys_pmu.h", - "include\\HL_sys_pcr.h", - "include\\HL_sys_pmm.h", - "include\\HL_sys_dma.h", - "include\\HL_reg_epc.h", - "include\\HL_reg_nmpu.h", - "include\\HL_reg_scm.h", - "include\\HL_reg_sdcmmr.h", - "include\\HL_epc.h", - "include\\HL_nmpu.h", - "include\\HL_errata.h", - "include\\HL_errata_SSWF021_45.h", - "include\\HL_errata_SSWF021_45_defs.h", - "include\\HL_reg_pinmux.h", - "include\\HL_pinmux.h", - "include\\HL_reg_gio.h", - "include\\HL_gio.h", - "include\\HL_reg_esm.h", - "include\\HL_esm.h", - "include\\HL_reg_sci.h", - "include\\HL_sci.h", - "include\\HL_reg_lin.h", - "include\\HL_lin.h", - "include\\HL_reg_mibspi.h", - "include\\HL_mibspi.h", - "include\\HL_reg_spi.h", - "include\\HL_spi.h", - "include\\HL_reg_can.h", - "include\\HL_can.h", - "include\\HL_reg_adc.h", - "include\\HL_adc.h", - "include\\std_nhet.h", - "include\\HL_reg_het.h", - "include\\HL_het.h", - "include\\HL_reg_htu.h", - "include\\HL_htu.h", - "include\\HL_reg_i2c.h", - "include\\HL_i2c.h", - "include\\HL_emac.h", - "include\\HL_hw_emac.h", - "include\\HL_hw_emac_ctrl.h", - "include\\HL_hw_mdio.h", - "include\\HL_hw_reg_access.h", - "include\\HL_mdio.h", - "include\\HL_phy_dp83640.h", - "include\\HL_phy_tlk111.h", - "include\\HL_emac_phyConfig.h", - "include\\HL_reg_dcc.h", - "include\\HL_dcc.h", - "include\\HL_reg_rtp.h", - "include\\HL_rtp.h", - "include\\HL_reg_dmm.h", - "include\\HL_dmm.h", - "include\\HL_reg_emif.h", - "include\\HL_emif.h", - "include\\HL_reg_pom.h", - "include\\HL_pom.h", - "include\\HL_reg_crc.h", - "include\\HL_crc.h", - "include\\HL_reg_etpwm.h", - "include\\HL_etpwm.h", - "include\\HL_reg_ecap.h", - "include\\HL_ecap.h", - "include\\HL_reg_eqep.h", - "include\\HL_eqep.h", - "include\\Device_TMS570LC43.h", - "include\\Device_header.h", - "include\\Device_types.h", - "include\\ti_fee_cfg.h", - "include\\MemMap.h", - "include\\ti_fee_types.h", - "include\\ti_fee.h", - "include\\fee_interface.h" - ], - "removes": [ - "source\\HL_sys_main.c", - "include\\os_projdefs.h", - "include\\FreeRTOSConfig.h", - "include\\os_portmacro.h", - "include\\os_mpu_wrappers.h", - "include\\os_portable.h", - "include\\FreeRTOS.h", - "include\\os_list.h", - "include\\os_queue.h", - "include\\os_semphr.h", - "include\\os_croutine.h", - "include\\os_StackMacros.h", - "include\\os_task.h", - "include\\os_timer.h", - "source\\os_port.c", - "source\\os_portasm.asm", - "source\\os_tasks.c", - "source\\os_queue.c", - "source\\os_list.c", - "source\\os_croutine.c", - "source\\os_timer.c", - "source\\os_mpu_wrappers.c", - "source\\os_heap.c", - "source\\os_event_groups.c", - "include\\os_event_groups.h" - ] -} diff --git a/tests/scripts/waf-tools/f_hcg/tests/test_hcg_raises.dil b/tests/scripts/waf-tools/f_hcg/tests/test_hcg_raises.dil deleted file mode 100644 index b5b3c164..00000000 --- a/tests/scripts/waf-tools/f_hcg/tests/test_hcg_raises.dil +++ /dev/null @@ -1,11975 +0,0 @@ -# TMS570LC4357ZWT 09/24/20 18:38:46 -# -ARCH=TMS570LC4357ZWT -# -DRIVER.TOOLS.VAR.GCC.VALUE=0 -DRIVER.TOOLS.VAR.ARM.VALUE=0 -DRIVER.TOOLS.VAR.IAR.VALUE=0 -DRIVER.TOOLS.VAR.GHS.VALUE=0 -DRIVER.TOOLS.VAR.TI.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_AVCLK4_DIVIDER.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_PERMISSION.VALUE=PRIV_RW_USER_RW_NOEXEC -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_SUB_3_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_TYPE.VALUE=NORMAL_OIWTNOWA_NONSHARED -DRIVER.SYSTEM.VAR.VIM_CHANNEL_122_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_114_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_106_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_70_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_62_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_54_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_46_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_38_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CAPTURE_EVENT_SOURCE_0.VALUE=0 -DRIVER.SYSTEM.VAR.FLASH_EEPROM_DATA_1_WAIT_STATE_FREQ.VALUE=32.0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_PERMISSION_VALUE.VALUE=0x1200 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_81_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_73_NAME.VALUE=het2LowLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_65_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_57_NAME.VALUE=adc2Group2Interrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_49_NAME.VALUE=mibspi4HighLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_2_MAPPING.VALUE=2 -DRIVER.SYSTEM.VAR.VIM_CAPTURE_EVENT_SOURCE_1.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_SIZE.VALUE=32_BYTES -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_SUB_1_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_SUB_4_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_111_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_103_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.EQEP2_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.FLASH_DATA_3_WAIT_STATE_FREQ.VALUE=180.0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_96_MAPPING.VALUE=96 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_88_MAPPING.VALUE=88 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_1_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_SUB_2_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_SUB_7_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_END_ADDRESS.VALUE=0x0000001f -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_SUB_5_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_DATA_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_11_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.LIN2_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.SPI3_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_PLL1_BYPASS_ON_SLIP.VALUE=0x20000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_TYPE_VALUE.VALUE=0x0002 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_124_NAME.VALUE=epcFullInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_116_NAME.VALUE=sci4HighLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_108_NAME.VALUE=ecap5Interrupt -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_SUB_5_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_BASE_ADDRESS.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_SIZE.VALUE=128_MB -DRIVER.SYSTEM.VAR.VIM_CHANNEL_100_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_98_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_20_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_12_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_2_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.CRC_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.MIBSPI1_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_HCLK_FREQ.VALUE=150.000 -DRIVER.SYSTEM.VAR.CLKT_PLL2_FREQ.VALUE=300.00 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_81_MAPPING.VALUE=81 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_73_MAPPING.VALUE=73 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_65_MAPPING.VALUE=65 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_57_MAPPING.VALUE=57 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_49_MAPPING.VALUE=49 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_40_NAME.VALUE=dmaBTCAInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_32_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_24_NAME.VALUE=het1LowLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_16_NAME.VALUE=can1HighLevelInterrupt -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_SUB_6_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_SUB_0_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_92_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_84_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_76_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_68_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_31_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_23_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_15_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.ECLK_CLKSRC.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_TYPE_VALUE.VALUE=0x0006 -DRIVER.SYSTEM.VAR.CLKT_PLL2_OUTPUT_DIV.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_EXT2_ENABLE.VALUE=FALSE -DRIVER.SYSTEM.VAR.CLKT_PLL1_SOURCE_ENABLE.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_SUB_1_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_END_ADDRESS.VALUE=0x6fffffff -DRIVER.SYSTEM.VAR.VIM_CHANNEL_96_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_88_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_9_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_4_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_RTI2_PRE_SOURCE.VALUE=PLL1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_SIZE_VALUE.VALUE=0x1A -DRIVER.SYSTEM.VAR.VIM_CHANNEL_99_NAME.VALUE=etpwm5TripZoneInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_50_MAPPING.VALUE=50 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_42_MAPPING.VALUE=42 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_34_MAPPING.VALUE=34 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_26_MAPPING.VALUE=26 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_18_MAPPING.VALUE=18 -DRIVER.SYSTEM.VAR.CLKT_VCLK3_DOMAIN_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.FLASH_ECC_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.FLASH_BANKS.VALUE=4 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_TYPE.VALUE=NORMAL_OIWTNOWA_SHARED -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_SUB_4_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_SUB_2_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_IRQ_DISP_ENTRY.VALUE=_isrStub -DRIVER.SYSTEM.VAR.VIM_CHANNEL_111_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_103_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_92_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_84_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_76_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_68_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CAN3_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_AVCLK1_SOURCE.VALUE=VCLK -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_SUB_2_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_SUB_5_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.ETPWM4_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.DCC2_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_PLL1_RESET_ON_OSCILLATOR_FAIL.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_PERMISSION_VALUE.VALUE=0x0500 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_11_MAPPING.VALUE=11 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_PERMISSION.VALUE=PRIV_RW_USER_RW_NOEXEC -DRIVER.SYSTEM.VAR.LBIST_ENA.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_AVCLK2_DOMAIN_ENABLE.VALUE=TRUE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_SUB_3_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_SUB_6_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_TYPE.VALUE=NORMAL_OIWBWA_NONSHARED -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_END_ADDRESS.VALUE=0x00007fff -DRIVER.SYSTEM.VAR.VIM_CHANNEL_41_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_33_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_25_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_17_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_3_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.ECAP6_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.SCI_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.FLASH_DATA_1_WAIT_STATE_FREQ.VALUE=90.0 -DRIVER.SYSTEM.VAR.RAM_STACK_IRQ_BASE.VALUE=0x08000500 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_125_MAPPING.VALUE=125 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_117_MAPPING.VALUE=117 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_109_MAPPING.VALUE=109 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_90_NAME.VALUE=etpwm1Interrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_82_NAME.VALUE=dcc1DoneInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_74_NAME.VALUE=sciLowLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_66_NAME.VALUE=i2cInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_58_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.CLKT_AVCLK3_DOMAIN_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_PMU_GLOBAL_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_SIZE.VALUE=512_KB -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_END_ADDRESS.VALUE=0x0000001f -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_SUB_4_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_BASE_ADDRESS.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_TASK_REGION_STACK.VALUE=12 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_97_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_89_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_81_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_73_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_70_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_65_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_62_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_57_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_54_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_49_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_46_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_38_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.EMAC_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_8_MAPPING.VALUE=8 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_2_NAME.VALUE=vPortPreemptiveTick -DRIVER.SYSTEM.VAR.CORE_PMU_COUNTER0_EVENT.VALUE=0x11 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_PERMISSION.VALUE=PRIV_RO_USER_RO_NOEXEC -DRIVER.SYSTEM.VAR.FLASH_ADDRESS_WAIT_STATES.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_SUB_7_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_RESET_ENTRY.VALUE=_c_int00 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_127_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_122_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_119_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_114_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_106_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_9_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.ADC1_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.MIBSPI_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.ECLK_VCLK1_FREQ.VALUE=75.000 -DRIVER.SYSTEM.VAR.CLKT_EXTERNAL_FREQ.VALUE=00.0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_SIZE_VALUE.VALUE=0x04 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_125_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_117_NAME.VALUE=can4LowLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_110_MAPPING.VALUE=110 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_109_NAME.VALUE=ecap6Interrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_102_MAPPING.VALUE=102 -DRIVER.SYSTEM.VAR.CLKT_AVCLK3_DIVIDER.VALUE=1 -DRIVER.SYSTEM.VAR.RAM_LENGTH.VALUE=0x00080000 -DRIVER.SYSTEM.VAR.CORE_MPU_TOTAL_REGION.VALUE=16 -DRIVER.SYSTEM.VAR.CLKT_VCLK1_DOMAIN_ENABLE.VALUE=FALSE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_SUB_2_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_SIZE.VALUE=256_MB -DRIVER.SYSTEM.VAR.VIM_CHANNEL_124_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_116_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_108_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.I2C2_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_41_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_33_NAME.VALUE=dmaFTCAInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_25_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_17_NAME.VALUE=spi2HighLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_1_MAPPING.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_EXTERNAL_SOURCE_ENABLE.VALUE=0x00000008 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_SUB_0_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_END_ADDRESS.VALUE=0x0000001f -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_BASE_ADDRESS.VALUE=0xF0000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_SUB_3_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_40_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_32_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_24_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_16_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_5_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_PERMISSION_VALUE.VALUE=0x1200 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_TYPE_VALUE.VALUE=0x0006 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_95_MAPPING.VALUE=95 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_87_MAPPING.VALUE=87 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_79_MAPPING.VALUE=79 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_SUB_1_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_SUB_6_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_SUB_4_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_IRQ_VIC_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_121_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_113_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_105_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_70_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_62_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_54_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_50_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_46_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_42_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_38_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_34_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_26_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_18_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.SPI1_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.FLASH_EEPROM_DATA_8_WAIT_STATE_FREQ.VALUE=144.0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_100_NAME.VALUE=etpwm6Interrupt -DRIVER.SYSTEM.VAR.CLKT_RTI2_DIVIDER.VALUE=1 -DRIVER.SYSTEM.VAR.RAM_ECC_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_SUB_4_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_TYPE.VALUE=NORMAL_OIWTNOWA_SHARED -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_SUB_7_DISABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_99_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.CLKT_EXTERNAL_FREQ_INPUT.VALUE=16.0 -DRIVER.SYSTEM.VAR.STC_INTERVAL.VALUE=40 -DRIVER.SYSTEM.VAR.CLKT_LPO_HIGH_TRIM_VALUE.VALUE=16 -DRIVER.SYSTEM.VAR.CLKT_GCLK_FREQ.VALUE=300.000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_PERMISSION_VALUE.VALUE=0x0600 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_80_MAPPING.VALUE=80 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_72_MAPPING.VALUE=72 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_64_MAPPING.VALUE=64 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_56_MAPPING.VALUE=56 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_48_MAPPING.VALUE=48 -DRIVER.SYSTEM.VAR.CLKT_PLL1_REF_CLOCK_DIV.VALUE=8 -DRIVER.SYSTEM.VAR.FLASHW_BASE_ADDRESS.VALUE=0xFFF87000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_SUB_5_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_FIQ_ENTRY.VALUE="ldr pc,[pc,#-0x1b0]" -DRIVER.SYSTEM.VAR.VIM_CHANNEL_10_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.SCILIN_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.SPI_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.ALL_DVR_ENA.VALUE=1 -DRIVER.SYSTEM.VAR.CCM_MENU_VALUE.VALUE=0x0001 -DRIVER.SYSTEM.VAR.PBIST_ENA1.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_VCLK4_DIVIDER.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_SUB_0_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_TYPE.VALUE=DEVICE_NONSHAREABLE -DRIVER.SYSTEM.VAR.VIM_CHANNEL_97_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_89_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_OSCILLATOR_FREQ.VALUE=16.0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_91_NAME.VALUE=etpwm1TripZoneInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_83_NAME.VALUE=dcc2DoneInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_75_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_67_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_59_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_41_MAPPING.VALUE=41 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_33_MAPPING.VALUE=33 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_25_MAPPING.VALUE=25 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_17_MAPPING.VALUE=17 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_SUB_3_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_SUB_1_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_IRQ_MODE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_11_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_11_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.PMM_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.EMIF_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CAN1_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CAN_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_TYPE_VALUE.VALUE=0x0006 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_3_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.CLKT_PLL1_OUTPUT_DIV.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_PERMISSION.VALUE=PRIV_RW_USER_RO_NOEXEC -DRIVER.SYSTEM.VAR.CLKT_PLL2_FM_ENABLE.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_SUB_1_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_SUB_4_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_BASE_ADDRESS.VALUE=0xF8000000 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_92_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_91_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_84_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_83_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_76_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_75_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_68_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_67_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_59_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_8_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.ETPWM2_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.HET1_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_RTI1_PRE_SOURCE.VALUE=PLL1 -DRIVER.SYSTEM.VAR.FLASH_MODE_VALUE.VALUE=3 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_SIZE_VALUE.VALUE=0x1B -DRIVER.SYSTEM.VAR.CORE_MPU_TASK_REGION_NUM.VALUE=3 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_126_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_118_NAME.VALUE=lin2LowLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_10_MAPPING.VALUE=10 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_SUB_2_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_SIZE.VALUE=128_MB -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_SUB_5_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_125_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_117_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_109_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_91_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_83_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_75_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_67_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_59_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_3_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.ECAP4_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_PLL2_BYPASS_ON_SLIP.VALUE=0x20000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_PERMISSION_VALUE.VALUE=0x1600 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_124_MAPPING.VALUE=124 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_116_MAPPING.VALUE=116 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_108_MAPPING.VALUE=108 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_50_NAME.VALUE=adc2Group0Interrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_42_NAME.VALUE=can2LowLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_34_NAME.VALUE=dmaLFSAInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_26_NAME.VALUE=mibspi1LowLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_18_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.FLASH_ARBITRATION.VALUE=FIX -DRIVER.SYSTEM.VAR.CLKT_LPO_HIGH_SOURCE_ENABLE.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_SUB_3_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_110_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_102_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.SCI4_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.PBIST_ALGO_9_10.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_EXTERNAL2_FREQ_INPUT.VALUE=16.0 -DRIVER.SYSTEM.VAR.FLASH_EEPROM_DATA_6_WAIT_STATE_FREQ.VALUE=112.0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_SIZE_VALUE.VALUE=0x12 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_7_MAPPING.VALUE=7 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_PERMISSION.VALUE=PRIV_RW_USER_RO_NOEXEC -DRIVER.SYSTEM.VAR.CLKT_RTI2_DOMAIN_ENABLE.VALUE=FALSE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_SUB_6_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_BACKGROUND_REGION_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_8_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_2_INT_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CONFIG.VALUE=TRUE -DRIVER.SYSTEM.VAR.CRC2_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_101_MAPPING.VALUE=101 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_101_NAME.VALUE=etpwm6TripZoneInterrupt -DRIVER.SYSTEM.VAR.RAM_STACK_ABORT_LENGTH.VALUE=0x00000100 -DRIVER.SYSTEM.VAR.FLASH_EEPROM_DATA_WAIT_STATES.VALUE=9 -DRIVER.SYSTEM.VAR.FLASH_DATA_MAX_WAIT_STATES.VALUE=3 -DRIVER.SYSTEM.VAR.FLASH_MODE.VALUE=PIPELINE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_TYPE.VALUE=DEVICE_NONSHAREABLE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_SUB_7_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_SUB_1_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_61_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_61_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_53_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_53_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_45_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_45_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_40_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_37_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_37_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_32_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_29_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_29_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_24_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_16_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.MINIT_VALUE.VALUE=0x1E57F -DRIVER.SYSTEM.VAR.VIM_CHANNEL_0_MAPPING.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_PLL1_DIV.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_PERMISSION.VALUE=PRIV_RO_USER_RO_NOEXEC -DRIVER.SYSTEM.VAR.CLKT_VCLK4_DOMAIN_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_PLL2_ENABLE.VALUE=FALSE -DRIVER.SYSTEM.VAR.RAM_BASE_ADDRESS.VALUE=0x08000000 -DRIVER.SYSTEM.VAR.CORE_PMU_EVENT_EXPORT_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_SUB_2_DISABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_126_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_118_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_110_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_102_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_96_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_88_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.GIO_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_SIZE_VALUE.VALUE=0x04 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_94_MAPPING.VALUE=94 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_86_MAPPING.VALUE=86 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_78_MAPPING.VALUE=78 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_SUB_0_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_SUB_5_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_TYPE.VALUE=STRONGLYORDERED_SHAREABLE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_SUB_3_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_BASE_ADDRESS.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_UNDEF_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_8_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.MIBSPI4_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.RAM_STACK_ABORT_BASE.VALUE=0x08000600 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_92_NAME.VALUE=etpwm2Interrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_84_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_76_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_68_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.CLKT_RTI1_DIVIDER.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_AVCLK4_DOMAIN_ENABLE.VALUE=FALSE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_SUB_3_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_SUB_6_DISABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_123_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_115_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_107_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_31_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_23_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_15_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_1_INT_TYPE.VALUE=FIQ -DRIVER.SYSTEM.VAR.CLKT_GHV_WAKUP_SOURCE.VALUE=PLL1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_TYPE_VALUE.VALUE=0x0000 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_71_MAPPING.VALUE=71 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_63_MAPPING.VALUE=63 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_55_MAPPING.VALUE=55 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_47_MAPPING.VALUE=47 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_39_MAPPING.VALUE=39 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_4_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.CLKT_HCLK_DIVIDER.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_PMU_COUNTER1_EVENT.VALUE=0x11 -DRIVER.SYSTEM.VAR.EFUSE_SELFTEST_ENA.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_AVCLK4_DOMAIN_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.RAM_LINK_BASE_ADDRESS.VALUE=0x08000800 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_BASE_ADDRESS.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_SUB_4_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_SUB_7_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_120_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_112_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_104_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_30_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_22_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_14_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_PERMISSION_VALUE.VALUE=0x1600 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_127_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_119_NAME.VALUE=sci4LowLevelInterrupt -DRIVER.SYSTEM.VAR.CLKT_PLL2_DIV.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_VCLK3_DIVIDER.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_LPO_TRIM_OTP_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_SUB_7_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_SIZE.VALUE=8_MB -DRIVER.SYSTEM.VAR.VIM_CHANNEL_95_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_87_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_79_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_61_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_53_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_45_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_37_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_29_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_AVCLK4_SOURCE.VALUE=VCLK -DRIVER.SYSTEM.VAR.FLASH_EEPROM_DATA_4_WAIT_STATE_FREQ.VALUE=80.0 -DRIVER.SYSTEM.VAR.FLASH_ADDRESS_WAIT_STATES_FREQ.VALUE=120.0 -DRIVER.SYSTEM.VAR.RAM_STACK_BASE.VALUE=0x08000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_TYPE_VALUE.VALUE=0x0010 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_51_NAME.VALUE=adc2Group1Interrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_43_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_40_MAPPING.VALUE=40 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_35_NAME.VALUE=can2HighLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_32_MAPPING.VALUE=32 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_27_NAME.VALUE=lin1LowLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_24_MAPPING.VALUE=24 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_19_NAME.VALUE=crcInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_16_MAPPING.VALUE=16 -DRIVER.SYSTEM.VAR.CLKT_VCLK3_DOMAIN_ENABLE.VALUE=FALSE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_SUB_2_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_END_ADDRESS.VALUE=0xf07fffff -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_SUB_0_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.ETPWM7_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_1.VALUE=0 -DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_2.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_SUB_0_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_SUB_3_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_96_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_88_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_3.VALUE=0 -DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_4.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_110_NAME.VALUE=eqep1Interrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_102_NAME.VALUE=etpwm7Interrupt -DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_5.VALUE=0 -DRIVER.SYSTEM.VAR.LBIST_STT.VALUE=1 -DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_6.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_SUB_1_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_SUB_4_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_ECC_AVAILABLE.VALUE=TRUE -DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_7.VALUE=0 -DRIVER.SYSTEM.VAR.ECAP2_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_8.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_TYPE_VALUE.VALUE=0x000C -DRIVER.SYSTEM.VAR.VIM_CHANNEL_123_MAPPING.VALUE=123 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_115_MAPPING.VALUE=115 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_107_MAPPING.VALUE=107 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_10_NAME.VALUE=het1HighLevelInterrupt -DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_9.VALUE=0 -DRIVER.SYSTEM.VAR.RAM_STACK_USER_LENGTH.VALUE=0x00000300 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_PERMISSION.VALUE=PRIV_RW_USER_RO_NOEXEC -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_SUB_2_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_SUB_7_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_END_ADDRESS.VALUE=0xffffffff -DRIVER.SYSTEM.VAR.CORE_CACHE_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_80_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_72_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_64_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_56_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_48_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_10_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_7_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.SCI2_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.LIN_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_RTI1_FREQ.VALUE=75.000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_SIZE_VALUE.VALUE=0x1A -DRIVER.SYSTEM.VAR.VIM_CHANNEL_6_MAPPING.VALUE=6 -DRIVER.SYSTEM.VAR.CLKT_PLL2_SPEADING_AMOUNT.VALUE=61 -DRIVER.SYSTEM.VAR.CLKT_PLL2_SPEADING_RATE.VALUE=255 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_SUB_5_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_BASE_ADDRESS.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_TYPE.VALUE=NORMAL_OIWTNOWA_SHARED -DRIVER.SYSTEM.VAR.VIM_CHANNEL_121_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_113_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_105_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_90_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_90_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_82_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_82_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_74_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_74_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_66_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_66_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_58_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_58_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_PLL2_RESET_ON_SLIP.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.ECLK_FREQ.VALUE=9.375 -DRIVER.SYSTEM.VAR.CLKT_AVCLK1_FREQ.VALUE=75.000 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_100_MAPPING.VALUE=100 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_93_NAME.VALUE=etpwm2TripZoneInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_85_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_77_NAME.VALUE=EMACTxIntISR -DRIVER.SYSTEM.VAR.VIM_CHANNEL_69_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.RAM_STACK_IRQ_LENGTH.VALUE=0x00000100 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_SUB_6_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_SUB_0_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_2_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_RTI2_POST_SOURCE.VALUE=VCLK -DRIVER.SYSTEM.VAR.FLASH_EEPROM_DATA_10_WAIT_STATE_FREQ.VALUE=176.0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_SIZE_VALUE.VALUE=0x04 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_PERMISSION_VALUE.VALUE=0x1600 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_PERMISSION_VALUE.VALUE=0x1200 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_5_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.RAM_STACK_LENGTH.VALUE=0x00000800 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_PERMISSION.VALUE=PRIV_RO_USER_NA_EXEC -DRIVER.SYSTEM.VAR.CLKT_LPO_BIAS.VALUE=true -DRIVER.SYSTEM.VAR.CLKT_AVCLK3_DIVIDER1.VALUE=4 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_SUB_1_DISABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_END_ADDRESS.VALUE=0x003fffff -DRIVER.SYSTEM.VAR.CORE_PRAGMA_ENA.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_101_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_4_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_1_INT_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.SPI4_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_AVCLK4_POST_SOURCE.VALUE=VCLKA4_DIVR -DRIVER.SYSTEM.VAR.CLKT_VCLK1_FREQ.VALUE=75.000 -DRIVER.SYSTEM.VAR.CLKT_AVCLK3_FREQ1.VALUE=75.000 -DRIVER.SYSTEM.VAR.FLASH_EEPROM_DATA_2_WAIT_STATE_FREQ.VALUE=48.0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_93_MAPPING.VALUE=93 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_85_MAPPING.VALUE=85 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_77_MAPPING.VALUE=77 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_69_MAPPING.VALUE=69 -DRIVER.SYSTEM.VAR.CLKT_AVCLK3_FREQ2.VALUE=18.750 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_END_ADDRESS.VALUE=0x0000001f -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_SUB_4_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_SIZE.VALUE=32_BYTES -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_BASE_ADDRESS.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_SUB_2_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_60_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_52_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_44_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_41_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_36_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_33_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_28_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_25_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_17_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.MIBSPI2_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_PLL1_MUL.VALUE=150 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_60_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_52_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_44_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_36_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_28_NAME.VALUE=adc1Group2Interrupt -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_PERMISSION.VALUE=PRIV_RO_USER_RO_NOEXEC -DRIVER.SYSTEM.VAR.CLKT_OSC_ENABLE.VALUE=TRUE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_SUB_2_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_SIZE.VALUE=32_BYTES -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_SUB_5_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_SVC_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_125_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_117_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_109_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_98_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_31_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_23_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_15_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.PINMUX_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.PBIST_ALGO_3_4.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_LPO_BIAS_VALUE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_70_MAPPING.VALUE=70 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_62_MAPPING.VALUE=62 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_54_MAPPING.VALUE=54 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_46_MAPPING.VALUE=46 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_38_MAPPING.VALUE=38 -DRIVER.SYSTEM.VAR.CLKT_AVCLK1_DOMAIN_ENABLE.VALUE=FALSE -DRIVER.SYSTEM.VAR.CLKT_EXTERNAL2_SOURCE_ENABLE.VALUE=0x00000080 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_SUB_3_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_SUB_6_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_PREFETCH_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_95_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_87_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_79_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_TASK_REGION_LAST.VALUE=15 -DRIVER.SYSTEM.VAR.CORE_MPU_TASK_REGION_FIRST.VALUE=13 -DRIVER.SYSTEM.VAR.PBIST_ALGO_15.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_111_NAME.VALUE=eqep2Interrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_103_NAME.VALUE=etpwm7TripZoneInterrupt -DRIVER.SYSTEM.VAR.PBIST_ALGO_16.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_VCLK2_DIVIDER.VALUE=1 -DRIVER.SYSTEM.VAR.RAM_LINK_LENGTH.VALUE=0x0007F800 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_SUB_6_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_END_ADDRESS.VALUE=0x0000001f -DRIVER.SYSTEM.VAR.VIM_CHANNEL_30_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_22_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_14_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_7_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CAN4_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_LPO_OSCFRQCONFIGCNT_VALUE.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_AVCLK2_SOURCE.VALUE=VCLK -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_TYPE_VALUE.VALUE=0x0010 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_31_MAPPING.VALUE=31 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_23_MAPPING.VALUE=23 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_15_MAPPING.VALUE=15 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_11_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.PBIST_ALGO_5_6.VALUE=0 -DRIVER.SYSTEM.VAR.PBIST_ENA.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_HCLK_DOMAIN_ENABLE.VALUE=TRUE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_SUB_7_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_SUB_1_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_122_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_114_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_111_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_106_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_103_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_10_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.ETPWM5_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.ETPWM_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_PLL2_MUL.VALUE=150 -DRIVER.SYSTEM.VAR.CLKT_RTI2_FREQ.VALUE=0.0 -DRIVER.SYSTEM.VAR.CLKT_LPO_LOW_FREQ.VALUE=0.080 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_TYPE.VALUE=NORMAL_OINC_NONSHARED -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_SUB_2_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_PREFETCH_ENTRY.VALUE=_prefetch -DRIVER.SYSTEM.VAR.VIM_CHANNEL_91_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_83_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_75_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_67_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_59_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.CLKT_AVCLK2_FREQ.VALUE=0.000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_TYPE_VALUE.VALUE=0x0006 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_PERMISSION_VALUE.VALUE=0x1600 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_PERMISSION_VALUE.VALUE=0x1200 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_94_NAME.VALUE=etpwm3Interrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_86_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_78_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.ECLK_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_OSCILLATOR_SOURCE_ENABLE.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_SUB_0_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_BASE_ADDRESS.VALUE=0x60000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_SUB_3_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_124_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_116_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_108_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_60_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_52_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_44_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_36_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_28_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.PBIST_ALGO_7_8.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_PLL2_RESET_ON_OSCILLATOR_FAIL.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.FLASH_BANK_LINK_BASE_ADDRESS_0.VALUE=0x00008020 -DRIVER.SYSTEM.VAR.FLASH_BANK_LINK_BASE_ADDRESS_1.VALUE=0x00200000 -DRIVER.SYSTEM.VAR.FLASH_EEPROM_DATA_0_WAIT_STATE_FREQ.VALUE=16.0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_SIZE_VALUE.VALUE=0x04 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_122_MAPPING.VALUE=122 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_114_MAPPING.VALUE=114 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_106_MAPPING.VALUE=106 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_6_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.CORE_PMU_COUNTER2_EVENT.VALUE=0x11 -DRIVER.SYSTEM.VAR.FLASH_DATA_WAIT_STATES.VALUE=3 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_SUB_1_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_SUB_6_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_95_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_87_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_79_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.ADC2_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_VCLK2_FREQ.VALUE=75.000 -DRIVER.SYSTEM.VAR.FLASH_DATA_2_WAIT_STATE_FREQ.VALUE=135.0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_5_MAPPING.VALUE=5 -DRIVER.SYSTEM.VAR.VIM_CHANNELS.VALUE=128 -DRIVER.SYSTEM.VAR.FLASH_BANK_LINK_BASE_ADDRESS_7.VALUE=0xF0200000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_SUB_4_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_SIZE.VALUE=32_BYTES -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_SUB_7_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_7_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.ESM_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_99_MAPPING.VALUE=99 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_61_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_53_NAME.VALUE=mibspi5HighLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_45_NAME.VALUE=can3HighLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_37_NAME.VALUE=mibspi3HighInterruptLevel -DRIVER.SYSTEM.VAR.VIM_CHANNEL_29_NAME.VALUE=can1LowLevelInterrupt -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_PERMISSION.VALUE=PRIV_RW_USER_RO_NOEXEC -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_SUB_5_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_SIZE.VALUE=32_BYTES -DRIVER.SYSTEM.VAR.VIM_CHANNEL_127_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_119_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_60_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_52_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_44_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_36_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_28_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_6_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.EQEP1_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_LPO_HIGH_FREQ.VALUE=10.000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_SIZE_VALUE.VALUE=0x12 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_SUB_0_DISABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_IRQ_ENTRY.VALUE="ldr pc,[pc,#-0x1b0]" -DRIVER.SYSTEM.VAR.VIM_CHANNEL_101_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_81_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_73_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_65_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_57_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_49_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.ECAP_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.LIN1_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.SPI2_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_GHV_POWER_DOWN_SOURCE.VALUE=PLL1 -DRIVER.SYSTEM.VAR.RAM_STACK_USER_BASE.VALUE=0x08000000 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_120_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_112_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_104_NAME.VALUE=ecap1Interrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_92_MAPPING.VALUE=92 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_84_MAPPING.VALUE=84 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_76_MAPPING.VALUE=76 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_68_MAPPING.VALUE=68 -DRIVER.SYSTEM.VAR.CLKT_GCLK_DOMAIN_ENABLE.VALUE=TRUE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_SUB_3_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_SUB_1_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_81_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_73_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_65_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_57_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_49_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.SYSTEM_INIT.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_SIZE_VALUE.VALUE=0x04 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_20_NAME.VALUE=esmLowInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_12_NAME.VALUE=mibspi1HighLevelInterrupt -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_PERMISSION.VALUE=PRIV_RO_USER_RO_EXEC -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_SUB_1_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_SUB_4_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_BASE_ADDRESS.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_1_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_0_INT_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_0_INT_TYPE.VALUE=FIQ -DRIVER.SYSTEM.VAR.FLASH_EEPROM_DATA_9_WAIT_STATE_FREQ.VALUE=160.0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_PERMISSION_VALUE.VALUE=0x0600 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_PERMISSION_VALUE.VALUE=0x1200 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_61_MAPPING.VALUE=61 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_53_MAPPING.VALUE=53 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_45_MAPPING.VALUE=45 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_37_MAPPING.VALUE=37 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_29_MAPPING.VALUE=29 -DRIVER.SYSTEM.VAR.ECLK_PORT_BIT0_DIR.VALUE=1 -DRIVER.SYSTEM.VAR.FLASH_LENGTH.VALUE=0x00400000 -DRIVER.SYSTEM.VAR.RAM_STACK_FIQ_LENGTH.VALUE=0x00000100 -DRIVER.SYSTEM.VAR.CLKT_EXT1_ENABLE.VALUE=FALSE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_SUB_2_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_SUB_7_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_TYPE.VALUE=DEVICE_NONSHAREABLE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_SUB_5_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_100_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_51_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_43_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_35_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_27_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_21_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_19_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_13_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_ECC_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_AVCLK3_FREQ.VALUE=75.000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_TYPE_VALUE.VALUE=0x0006 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_95_NAME.VALUE=etpwm3TripZoneInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_87_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_79_NAME.VALUE=EMACRxIntISR -DRIVER.SYSTEM.VAR.CLKT_VCLK1_DIVIDER.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_PERMISSION.VALUE=PRIV_RO_USER_RO_NOEXEC -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_SUB_5_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_BASE_ADDRESS.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_TYPE.VALUE=NORMAL_OIWTNOWA_SHARED -DRIVER.SYSTEM.VAR.VIM_CHANNEL_124_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_116_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_108_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_94_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_86_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_78_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.CAN2_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.ECLK_PORT_BIT0_DOUT.VALUE=0 -DRIVER.SYSTEM.VAR.PBIST_ALGO_1.VALUE=0 -DRIVER.SYSTEM.VAR.FLASH_DATA_0_WAIT_STATE_FREQ.VALUE=45.0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_30_MAPPING.VALUE=30 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_22_MAPPING.VALUE=22 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_14_MAPPING.VALUE=14 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_7_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.PBIST_ALGO_2.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_RTI1_DOMAIN_ENABLE.VALUE=FALSE -DRIVER.SYSTEM.VAR.CLKT_AVCLK1_DOMAIN_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_SUB_6_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_SUB_0_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_127_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_119_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_30_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_22_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_14_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.ETPWM3_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.DCC1_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.HET2_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_VCLK3_FREQ.VALUE=75.000 -DRIVER.SYSTEM.VAR.CLKT_AVCLK4_FREQ1.VALUE=75.000 -DRIVER.SYSTEM.VAR.PBIST_ALGO_11_12.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_PLL2_SOURCE_ENABLE.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.FLASH_EEPROM_DATA_MAX_WAIT_STATES.VALUE=11 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_SUB_7_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_END_ADDRESS.VALUE=0x0000001f -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_SUB_1_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_94_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_86_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_78_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_21_INT_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_13_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.ECAP5_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.ADC_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_TYPE_VALUE.VALUE=0x000B -DRIVER.SYSTEM.VAR.VIM_CHANNEL_70_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_62_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_54_NAME.VALUE=mibspi4LowLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_46_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_38_NAME.VALUE=mibspi3LowLevelInterrupt -DRIVER.SYSTEM.VAR.FEE_FLASH_ECC_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_SIZE.VALUE=32_BYTES -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_SUB_2_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_RESET_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_110_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_102_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_6_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_121_MAPPING.VALUE=121 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_113_MAPPING.VALUE=113 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_105_MAPPING.VALUE=105 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_SUB_0_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_SUB_5_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_RESERVED_ENTRY.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_121_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_113_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_105_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_71_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_63_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_55_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_47_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_39_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_TYPE_VALUE.VALUE=0x0006 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_121_NAME.VALUE=crc2Interrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_113_NAME.VALUE=can4HighLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_105_NAME.VALUE=ecap2Interrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_4_MAPPING.VALUE=4 -DRIVER.SYSTEM.VAR.CLKT_AVCLK3_DOMAIN_ENABLE.VALUE=FALSE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_SUB_3_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_END_ADDRESS.VALUE=0x87ffffff -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_SUB_6_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_SIZE.VALUE=4_MB -DRIVER.SYSTEM.VAR.VIM_CHANNEL_120_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_112_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_104_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.I2C1_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.FLASH_EEPROM_DATA_7_WAIT_STATE_FREQ.VALUE=128.0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_PERMISSION_VALUE.VALUE=0x1300 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_SIZE_VALUE.VALUE=0x04 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_PERMISSION_VALUE.VALUE=0x0300 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_98_MAPPING.VALUE=98 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_21_NAME.VALUE=vPortYeildWithinAPI -DRIVER.SYSTEM.VAR.VIM_CHANNEL_13_NAME.VALUE=lin1HighLevelInterrupt -DRIVER.SYSTEM.VAR.ECLK_PORT_BIT0_FUN.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_BASE_ADDRESS.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_SUB_4_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_SUB_7_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_94_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_86_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_78_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_51_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_43_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_35_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_27_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_19_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.HET_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.PBIST_ALGO_13_14.VALUE=0 -DRIVER.SYSTEM.VAR.RAM_STACK_UNDEF_BASE.VALUE=0x08000700 -DRIVER.SYSTEM.VAR.RAM_STACK_SVC_BASE.VALUE=0x08000300 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_SUB_7_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_TYPE.VALUE=NORMAL_OIWTNOWA_SHARED -DRIVER.SYSTEM.VAR.VIM_CHANNEL_99_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_3_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.DMM_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.MIBSPI5_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.FLASH_BANK_CONFIG_0.VALUE=ACTIVE -DRIVER.SYSTEM.VAR.CLKT_AVCLK4_FREQ.VALUE=75.000 -DRIVER.SYSTEM.VAR.FLASH_BANK_CONFIG_1.VALUE=ACTIVE -DRIVER.SYSTEM.VAR.VIM_CHANNEL_96_NAME.VALUE=etpwm4Interrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_91_MAPPING.VALUE=91 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_88_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_83_MAPPING.VALUE=83 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_75_MAPPING.VALUE=75 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_67_MAPPING.VALUE=67 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_59_MAPPING.VALUE=59 -DRIVER.SYSTEM.VAR.FLASH_BANK_CONFIG_2.VALUE=SLEEP -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_PERMISSION.VALUE=PRIV_RW_USER_RW_EXEC -DRIVER.SYSTEM.VAR.CLKT_VCLK2_DOMAIN_ENABLE.VALUE=FALSE -DRIVER.SYSTEM.VAR.FLASH_BANK_CONFIG_3.VALUE=SLEEP -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_TYPE.VALUE=NORMAL_OIWTNOWA_SHARED -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_SUB_2_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_END_ADDRESS.VALUE=0x0807ffff -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_SUB_0_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_40_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_32_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_24_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_16_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_5_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.ECLK_PORT_BIT0_PDR.VALUE=0 -DRIVER.SYSTEM.VAR.FLASH_BANK_CONFIG_4.VALUE=SLEEP -DRIVER.SYSTEM.VAR.FLASH_BANK_CONFIG_5.VALUE=SLEEP -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_SIZE_VALUE.VALUE=0x0E -DRIVER.SYSTEM.VAR.VIM_CHANNEL_8_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.ECLK_PRESCALER.VALUE=8 -DRIVER.SYSTEM.VAR.FLASH_BANK_CONFIG_6.VALUE=SLEEP -DRIVER.SYSTEM.VAR.FLASH_BANK_CONFIG_7.VALUE=ACTIVE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_END_ADDRESS.VALUE=0xffffffff -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_SUB_0_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_BASE_ADDRESS.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_SUB_3_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_126_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_118_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_97_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_89_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_80_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_72_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_64_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_56_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_48_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_VCLK4_FREQ.VALUE=75.0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_60_MAPPING.VALUE=60 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_52_MAPPING.VALUE=52 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_44_MAPPING.VALUE=44 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_36_MAPPING.VALUE=36 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_28_MAPPING.VALUE=28 -DRIVER.SYSTEM.VAR.CLKT_PLL1_BAND_WIDTH_ADJUSTMENT.VALUE=7 -DRIVER.SYSTEM.VAR.CLKT_LPO_LOW_SOURCE_ENABLE.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_SUB_1_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_SUB_6_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_SUB_4_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_PLL2_MUL_VAL.VALUE=9500 -DRIVER.SYSTEM.VAR.CLKT_RTI1_POST_SOURCE.VALUE=VCLK -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_SIZE_VALUE.VALUE=0x04 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_71_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_63_NAME.VALUE=het2HighLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_55_NAME.VALUE=can3LowLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_47_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_39_NAME.VALUE=dmaHBCAInterrupt -DRIVER.SYSTEM.VAR.CLKT_PLL2_BAND_WIDTH_ADJUSTMENT.VALUE=7 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_SUB_4_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_SIZE.VALUE=32_BYTES -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_SUB_7_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_DATA_ENTRY.VALUE=_dabort -DRIVER.SYSTEM.VAR.VIM_CHANNEL_80_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_72_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_64_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_56_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_48_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_21_MAPPING.VALUE=21 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_13_MAPPING.VALUE=13 -DRIVER.SYSTEM.VAR.CLKT_PLL2_REF_CLOCK_DIV.VALUE=8 -DRIVER.SYSTEM.VAR.CLKT_PLL1_SPEADING_RATE.VALUE=255 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_SUB_5_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_END_ADDRESS.VALUE=0x0000001f -DRIVER.SYSTEM.VAR.VIM_CHANNEL_50_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_42_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_34_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_26_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_18_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_0_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.ETPWM1_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_PLL1_RESET_ON_SLIP.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.FLASH_EEPROM_DATA_5_WAIT_STATE_FREQ.VALUE=96.0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_TYPE_VALUE.VALUE=0x0010 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_PERMISSION_VALUE.VALUE=0x0300 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_127_MAPPING.VALUE=127 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_122_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_119_MAPPING.VALUE=119 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_114_NAME.VALUE=i2c2Interrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_106_NAME.VALUE=ecap3nterrupt -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_PERMISSION.VALUE=PRIV_RO_USER_RO_EXEC -DRIVER.SYSTEM.VAR.CLKT_PLL1_FM_ENABLE.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_SUB_6_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_SUB_0_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_SIZE.VALUE=32_KB -DRIVER.SYSTEM.VAR.VIM_CHANNEL_123_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_115_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_107_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_90_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_82_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_74_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_66_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_58_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.ECAP3_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_30_NAME.VALUE=mibspi2LowLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_22_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_14_NAME.VALUE=adc1Group0Interrupt -DRIVER.SYSTEM.VAR.CLKT_LPOLO_ENABLE.VALUE=FALSE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_SUB_1_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_123_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_115_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_107_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.SCI3_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.ECLK_PORT_BIT0_PSL.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_120_MAPPING.VALUE=120 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_112_MAPPING.VALUE=112 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_104_MAPPING.VALUE=104 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_END_ADDRESS.VALUE=0x0000001f -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_SUB_4_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_BASE_ADDRESS.VALUE=0x80000000 -DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_SVC_ENTRY.VALUE=vPortSWI -DRIVER.SYSTEM.VAR.VIM_CHANNEL_21_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_20_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_13_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_12_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CONFIG_NEW.VALUE=1 -DRIVER.SYSTEM.VAR.CRC1_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CLKT_EXTERNAL2_FREQ.VALUE=00.0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_TYPE_VALUE.VALUE=0x0002 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_97_NAME.VALUE=etpwm4TripZoneInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_89_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_3_MAPPING.VALUE=3 -DRIVER.SYSTEM.VAR.CLKT_LPOHI_ENABLE.VALUE=FALSE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_SUB_2_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_TYPE.VALUE=NORMAL_OIWTNOWA_SHARED -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_SUB_5_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_101_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_99_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_93_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_85_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_77_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_69_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_6_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.CLKT_GHV_NORMAL_SOURCE.VALUE=PLL1 -DRIVER.SYSTEM.VAR.CLKT_AVCLK3_DIV_FREQ.VALUE=75.0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_97_MAPPING.VALUE=97 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_89_MAPPING.VALUE=89 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_9_NAME.VALUE=gioHighLevelInterrupt -DRIVER.SYSTEM.VAR.CLKT_PLL1_ENABLE.VALUE=TRUE -DRIVER.SYSTEM.VAR.FLASH_BASE_ADDRESS.VALUE=0x00000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_SUB_3_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_SUB_6_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_51_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_43_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_35_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_27_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_19_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_5_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_M3.VALUE=0 -DRIVER.SYSTEM.VAR.SPI5_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_TYPE_VALUE.VALUE=0x0006 -DRIVER.SYSTEM.VAR.CLKT_AVCLK2_DOMAIN_DISABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_15_SUB_6_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_TYPE.VALUE=NORMAL_OIWTNOWA_NONSHARED -DRIVER.SYSTEM.VAR.VIM_CHANNEL_120_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_112_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_104_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_100_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.RTP_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.MIBSPI3_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.FLASH_BANK_LINK_LENGTH_0.VALUE=0x001F7FE0 -DRIVER.SYSTEM.VAR.FLASH_BANK_LINK_LENGTH_1.VALUE=0x00200000 -DRIVER.SYSTEM.VAR.FLASH_EEPROM_DATA_11_WAIT_STATE_FREQ.VALUE=192.0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_SIZE_VALUE.VALUE=0x16 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_90_MAPPING.VALUE=90 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_82_MAPPING.VALUE=82 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_80_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_74_MAPPING.VALUE=74 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_72_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_66_MAPPING.VALUE=66 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_64_NAME.VALUE=sci3HighLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_58_MAPPING.VALUE=58 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_56_NAME.VALUE=mibspi5LowLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_48_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_14_SIZE.VALUE=32_BYTES -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_SUB_7_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_SUB_1_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_93_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_85_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_77_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_69_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.EQEP_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.RTI_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.STC_MAX_TIMEOUT.VALUE=0xFFFFFFFF -DRIVER.SYSTEM.VAR.CLKT_LPO_LOW_TRIM.VALUE=100.00 -DRIVER.SYSTEM.VAR.FLASH_EEPROM_DATA_3_WAIT_STATE_FREQ.VALUE=64.0 -DRIVER.SYSTEM.VAR.RAM_STACK_FIQ_BASE.VALUE=0x08000400 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_PERMISSION_VALUE.VALUE=0x1300 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_0_NAME.VALUE=esmHighInterrupt -DRIVER.SYSTEM.VAR.FLASH_BANK_LINK_LENGTH_7.VALUE=0x000020000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_SUB_2_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_50_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_42_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_34_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_26_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_18_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.FEE_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_10.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_LPO_LOW_TRIM_VALUE.VALUE=16 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_123_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_115_NAME.VALUE=lin2HighLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_107_NAME.VALUE=ecap4Interrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_51_MAPPING.VALUE=51 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_43_MAPPING.VALUE=43 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_35_MAPPING.VALUE=35 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_27_MAPPING.VALUE=27 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_19_MAPPING.VALUE=19 -DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_11.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_PERMISSION.VALUE=PRIV_RW_USER_RW_EXEC -DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_12.VALUE=0 -DRIVER.SYSTEM.VAR.CCM_MENU.VALUE=NONE -DRIVER.SYSTEM.VAR.CLKT_RESERVED_SOURCE_ENABLE.VALUE=0x00000004 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_SUB_0_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_SUB_5_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_SIZE.VALUE=512_KB -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_BASE_ADDRESS.VALUE=0x08000000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_SUB_3_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_98_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_20_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_12_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_4_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_13.VALUE=0 -DRIVER.SYSTEM.VAR.POM_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_PLL1_MUL_VAL.VALUE=9500 -DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_14.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_AVCLK3_SOURCE.VALUE=VCLK -DRIVER.SYSTEM.VAR.CLKT_PLL1_FREQ.VALUE=300.00 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_1_SIZE_VALUE.VALUE=0x15 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_31_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_23_NAME.VALUE=gioLowLevelInterrupt -DRIVER.SYSTEM.VAR.VIM_CHANNEL_15_NAME.VALUE=adc1Group1Interrupt -DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_15.VALUE=0 -DRIVER.SYSTEM.VAR.RAM_STACK_UNDEF_LENGTH.VALUE=0x00000100 -DRIVER.SYSTEM.VAR.RAM_STACK_SVC_LENGTH.VALUE=0x00000100 -DRIVER.SYSTEM.VAR.CLKT_LPO_TRIM_OTP_LOC.VALUE=0xF00801B4 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_SUB_3_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_6_SUB_6_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_UNDEF_ENTRY.VALUE=_undef -DRIVER.SYSTEM.VAR.VIM_CHANNEL_93_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_85_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_77_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_71_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_69_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_63_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_55_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_47_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_39_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.ETPWM6_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.DCC_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_20_MAPPING.VALUE=20 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_12_MAPPING.VALUE=12 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_PERMISSION.VALUE=PRIV_RW_USER_RO_NOEXEC -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_16_BASE_ADDRESS.VALUE=0xFFF80000 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_SUB_4_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_SUB_7_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_ENDIAN_LITTLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_126_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_125_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_118_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_117_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_109_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.OS_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_SIZE_VALUE.VALUE=0x04 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_126_MAPPING.VALUE=126 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_118_MAPPING.VALUE=118 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_98_NAME.VALUE=etpwm5Interrupt -DRIVER.SYSTEM.VAR.ECLK_PORT_BIT0_PULL.VALUE=2 -DRIVER.SYSTEM.VAR.ECLK_SUSPEND.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_PLL1_SPEADING_AMOUNT.VALUE=61 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_13_TYPE.VALUE=NORMAL_OIWTNOWA_SHARED -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_SUB_5_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.CORE_VFP_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.ECAP1_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.I2C_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.AJSM_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.ECLK_OSCILLATOR_FREQ.VALUE=16.000 -DRIVER.SYSTEM.VAR.CLKT_LPO_HIGH_TRIM.VALUE=100.00 -DRIVER.SYSTEM.VAR.CLKT_AVCLK4_SPL_SOURCE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_9_MAPPING.VALUE=9 -DRIVER.SYSTEM.VAR.VIM_ECC_INTERRUPT_MAPPED_TO_VIM.VALUE=FALSE -DRIVER.SYSTEM.VAR.CLKT_VCLK4_DOMAIN_ENABLE.VALUE=FALSE -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_3_SUB_0_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_71_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_63_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_55_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_47_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_41_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_39_INT_PRAGMA_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_33_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_25_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_17_INT_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_9_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.SCI1_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.CLKT_CRYSTAL_FREQ.VALUE=16.0 -DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_TYPE_VALUE.VALUE=0x0008 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_111_MAPPING.VALUE=111 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_103_MAPPING.VALUE=103 -DRIVER.SYSTEM.VAR.VIM_PHANTOM_NAME.VALUE=phantomInterrupt -DRIVER.OS.VAR.OS_USERECERSIVEMUTEXES.VALUE=0 -DRIVER.OS.VAR.OS_USETIMERS.VALUE=0 -DRIVER.OS.VAR.OS_USECNTSEMAPHORE.VALUE=0 -DRIVER.OS.VAR.OS_GENERATERUNTIMESTATS.VALUE=0 -DRIVER.OS.VAR.OS_USEMPU.VALUE=0 -DRIVER.OS.VAR.OS_TOTALHEAPSIZE.VALUE=8192 -DRIVER.OS.VAR.OS_USEVERBOSESTACK.VALUE=2 -DRIVER.OS.VAR.OS_TIMERPRIORITY.VALUE=0 -DRIVER.OS.VAR.OS_SVCENABLE.VALUE=0 -DRIVER.OS.VAR.OS_MAXTASKNAMELEN.VALUE=16 -DRIVER.OS.VAR.OS_MAXPRIORITIES.VALUE=5 -DRIVER.OS.VAR.OS_TIMERTASKSTACKDEPTH.VALUE=0 -DRIVER.OS.VAR.OS_COROUTINEPRIORITIES.VALUE=2 -DRIVER.OS.VAR.OS_USECOROUTINES.VALUE=0 -DRIVER.OS.VAR.OS_USEMUTEXES.VALUE=0 -DRIVER.OS.VAR.OS_CPUCLOCKHZ.VALUE=75000000 -DRIVER.OS.VAR.OS_USEMALLOCFAILEDHOOK.VALUE=0 -DRIVER.OS.VAR.OS_MINSTACKSIZE.VALUE=128 -DRIVER.OS.VAR.OS_SYSTEM_MODE.VALUE=0x1F -DRIVER.OS.VAR.OS_USEPREEMPTION.VALUE=1 -DRIVER.OS.VAR.OS_IDLESHOULDYIELD.VALUE=1 -DRIVER.OS.VAR.OS_USEIDLEHOOK.VALUE=0 -DRIVER.OS.VAR.OS_TICKRATEHZ.VALUE=1000 -DRIVER.OS.VAR.OS_TIMERPQUEUELENGTH.VALUE=0 -DRIVER.OS.VAR.OS_USETRACE.VALUE=0 -DRIVER.OS.VAR.OS_USESTACK.VALUE=0 -DRIVER.OS.VAR.OS_USETICKHOOK.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL93_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL85_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL77_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL69_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL0_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL21_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL13_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL71_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL63_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL55_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL47_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL39_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL94_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL86_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL78_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL3_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL41_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL33_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL25_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL17_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL88_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL9_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL50_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL42_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL34_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL26_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL18_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL81_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL73_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL65_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL57_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL49_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL2_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL11_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL50_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL42_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL34_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL26_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL18_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL8_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL5_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL11_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL71_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL63_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL55_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL47_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL39_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL92_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL84_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL76_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL68_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL11_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL70_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL62_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL54_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL46_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL38_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL92_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL84_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL76_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL68_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL1_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL94_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL86_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL78_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL7_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL40_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL32_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL24_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL16_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL71_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL63_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL55_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL47_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL39_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL0_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL40_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL32_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL24_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL16_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL40_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL32_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL24_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL16_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL10_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL89_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL6_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL89_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL4_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL61_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL53_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL45_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL37_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL29_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL91_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL83_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL75_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL67_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL59_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL61_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL53_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL45_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL37_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL29_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL92_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL84_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL76_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL68_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL5_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL61_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL53_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL45_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL37_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL29_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL90_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL82_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL74_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL66_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL58_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_LOW_TIME.VALUE=218.453 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL30_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL22_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL14_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL31_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL23_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL15_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL9_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL30_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL22_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL14_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL95_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL87_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL79_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL4_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL88_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL3_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL51_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL43_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL35_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL27_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL19_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL90_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL82_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL74_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL66_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL58_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL89_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL90_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL82_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL74_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL66_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL58_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL3_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL9_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL51_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL43_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL35_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL27_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL19_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL60_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL52_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL44_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL36_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL28_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL20_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL12_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL80_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL72_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL64_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL56_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL48_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_VCLK_FREQ.VALUE=75 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL30_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL22_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL14_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL8_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL20_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL12_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL93_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL85_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL77_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL69_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL2_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL95_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL87_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL79_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL2_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL95_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL87_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL79_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL8_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL80_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL72_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL64_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL56_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL48_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL1_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL41_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL33_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL25_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL17_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL81_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL73_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL65_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL57_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL49_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL41_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL33_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL25_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL17_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL10_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL7_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL51_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL43_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL35_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL27_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL19_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL70_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL62_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL54_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL46_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL38_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL21_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL13_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL7_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL10_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL93_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL85_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL77_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL69_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL6_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL91_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL83_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL75_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL67_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL59_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL0_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL94_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL86_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL78_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL1_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL70_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL62_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL54_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL46_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL38_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_BASE.VALUE=0xFFFFF500 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL31_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL23_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL15_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL31_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL23_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL15_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL80_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL72_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL64_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL56_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL48_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL88_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL5_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL50_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL42_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL34_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL26_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL18_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL60_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL52_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL44_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL36_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL28_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL20_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL12_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL6_INT_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL91_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL83_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL75_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL67_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL59_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL4_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL60_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL52_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL44_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL36_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL28_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_LPC.VALUE=16384 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL21_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL13_ENABLE.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL81_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL73_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL65_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL57_INT_LEVEL.VALUE=0 -DRIVER.ESM.VAR.ESM_GROUP0_CHANNEL49_INT_LEVEL.VALUE=0 -DRIVER.RTI.VAR.RTI_1_COMPARE_2_SOURCE.VALUE=0x00000100 -DRIVER.RTI.VAR.RTI_1_COMPARE_3_FREQ.VALUE=0.000100000 -DRIVER.RTI.VAR.RTI_1_FREQ.VALUE=110.000 -DRIVER.RTI.VAR.RTI_1_COMPARE_1_ACTUALTIME.VALUE=5.000 -DRIVER.RTI.VAR.RTI_1_COUNTER_1_UC_COMPARE.VALUE=10 -DRIVER.RTI.VAR.RTI_1_COMPARE_1_TIME.VALUE=5.000 -DRIVER.RTI.VAR.RTI_1_COMPARE_3_UPDATE.VALUE=100000 -DRIVER.RTI.VAR.RTI_1_CONTINUE_ON_SUSPEND_ENABLE.VALUE=0x00000000 -DRIVER.RTI.VAR.RTI_1_COMPARE_1_INPUT_FREQ.VALUE=10.000000000 -DRIVER.RTI.VAR.RTI_1_COMPARE_0_SOURCE.VALUE=0x00000000 -DRIVER.RTI.VAR.RTI_1_COMPARE_2_TIME.VALUE=8.000 -DRIVER.RTI.VAR.RTI_1_COMPARE_0_ACTUALTIME.VALUE=1.000 -DRIVER.RTI.VAR.RTI_1_COUNTER_0_UC_COMPARE.VALUE=10 -DRIVER.RTI.VAR.RTI_1_COMPARE_1_UPDATE.VALUE=50000 -DRIVER.RTI.VAR.RTI_1_COMPARE_3_TIME.VALUE=10.000 -DRIVER.RTI.VAR.RTI_1_COUNTER_0_NTU_SOURCE.VALUE=1 -DRIVER.RTI.VAR.RTI_1_COMPARE_0_INPUT_FREQ.VALUE=10.000000000 -DRIVER.RTI.VAR.RTI_1_COUNTER_0_RTI_FREQ.VALUE=0.0 -DRIVER.RTI.VAR.RTI_1_COUNTER_0_FREQ.VALUE=10.000000000 -DRIVER.RTI.VAR.RTI_1_COUNTER_1_FREQUENCY.VALUE=10.000 -DRIVER.RTI.VAR.RTI_1_COMPARE_3_SOURCE.VALUE=0x00001000 -DRIVER.RTI.VAR.RTI_1_COUNTER_1_FREQ.VALUE=10.000000000 -DRIVER.RTI.VAR.RTI_1_COUNTER_0_NTU_SOURCE_REG.VALUE=0x0 -DRIVER.RTI.VAR.RTI_1_COMPARE_1_SOURCE.VALUE=0x00000000 -DRIVER.RTI.VAR.RTI_1_NTU_1_FREQ.VALUE=0.0 -DRIVER.RTI.VAR.RTI_1_COMPARE_3_ACTUALTIME.VALUE=10.000 -DRIVER.RTI.VAR.RTI_1_COMPARE_0_FREQ.VALUE=0.001000000 -DRIVER.RTI.VAR.RTI_1_COMPARE_2_UPDATE.VALUE=80000 -DRIVER.RTI.VAR.RTI_1_BASE.VALUE=0xFFFFFC00 -DRIVER.RTI.VAR.RTI_1_NTU_2_FREQ.VALUE=0.0 -DRIVER.RTI.VAR.RTI_1_COMPARE_3_INPUT_FREQ.VALUE=10.000000000 -DRIVER.RTI.VAR.RTI_1_COMPARE_1_FREQ.VALUE=0.000200000 -DRIVER.RTI.VAR.RTI_1_COUNTER_0_CAPTURE_SOURCE_ENABLE.VALUE=0 -DRIVER.RTI.VAR.RTI_1_COUNTER_1_CAPTURE_SOURCE_ENABLE.VALUE=0 -DRIVER.RTI.VAR.RTI_1_COMPARE_0_UPDATE.VALUE=10000 -DRIVER.RTI.VAR.RTI_1_NTU_3_FREQ.VALUE=220.0 -DRIVER.RTI.VAR.RTI_1_COMPARE_0.VALUE=10000 -DRIVER.RTI.VAR.RTI_1_COMPARE_2_ACTUALTIME.VALUE=8.000 -DRIVER.RTI.VAR.RTI_1_COMPARE_1.VALUE=50000 -DRIVER.RTI.VAR.RTI_1_COMPARE_2.VALUE=80000 -DRIVER.RTI.VAR.RTI_1_COMPARE_3.VALUE=100000 -DRIVER.RTI.VAR.RTI_1_COUNTER_0_NTU_FREQ.VALUE=0.0 -DRIVER.RTI.VAR.RTI_1_COMPARE_2_FREQ.VALUE=0.000125000 -DRIVER.RTI.VAR.RTI_1_COMPARE_0_TIME.VALUE=1.000 -DRIVER.RTI.VAR.RTI_1_NTU_4_FREQ.VALUE=0.0 -DRIVER.RTI.VAR.RTI_1_COMPARE_2_INPUT_FREQ.VALUE=10.000000000 -DRIVER.RTI.VAR.RTI_1_COUNTER_0_FREQUENCY.VALUE=10.000 -DRIVER.GIO.VAR.GIO_PORT1_BIT4_PULL.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT0_BIT5_DIR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT4_PULDIS.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT7_DOUT.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT2_LVL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT7_PSL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT3_PDR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT2_POL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT6_ENA.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT2_PSL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT6_DIR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT2_DOUT.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT3_LVL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT4_PDR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT3_POL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT5_PULDIS.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT7_ENA.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT3_PSL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT5_PULL.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT0_BIT7_DIR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT4_LVL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT5_PDR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT4_POL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT2_PULDIS.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT4_PSL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT0_PULL.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT0_BIT3_DOUT.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT5_LVL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT6_PDR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT5_POL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT5_PSL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT6_PULL.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT0_BIT6_LVL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT3_PULDIS.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT7_PDR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT6_POL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT0_DOUT.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT6_PSL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT1_PULL.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT0_BIT4_DOUT.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT7_LVL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT7_PULDIS.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT7_POL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT0_PULDIS.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT7_PSL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT7_PULL.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT1_BIT1_DOUT.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT2_PULL.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT1_BIT1_PULDIS.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT5_DOUT.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT0_ENA.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT5_PULDIS.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT0_DIR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT2_DOUT.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT3_PULL.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT1_BIT1_ENA.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT6_DOUT.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT1_DIR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT6_PULDIS.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT2_ENA.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT2_DIR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT0_PDR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT0_PULL.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT0_BIT3_PULDIS.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT3_DOUT.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT4_PULL.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT1_BIT3_ENA.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT7_DOUT.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT3_DIR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT0_LVL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT1_PDR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT0_POL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT4_ENA.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT0_PSL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT4_DIR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT4_PULDIS.VALUE=0 -DRIVER.GIO.VAR.GIO_BASE_PORTA.VALUE=0xFFF7BC34 -DRIVER.GIO.VAR.GIO_BASE_PORTB.VALUE=0xFFF7BC54 -DRIVER.GIO.VAR.GIO_PORT1_BIT1_LVL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT2_PDR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT1_POL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT1_PULL.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT1_BIT4_DOUT.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT5_PULL.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT1_BIT5_ENA.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT1_PSL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT5_DIR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT2_LVL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT1_PULDIS.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT0_ENA.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT3_PDR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT2_POL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT0_DIR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT6_ENA.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT2_PSL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT6_DIR.VALUE=0 -DRIVER.GIO.VAR.GIO_BASE.VALUE=0xFFF7BC00 -DRIVER.GIO.VAR.GIO_PORT1_BIT3_LVL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT1_ENA.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT4_PDR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT3_POL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT2_PULL.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT0_BIT1_DIR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT5_DOUT.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT6_PULL.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT1_BIT7_ENA.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT2_PULDIS.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT3_PSL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT7_DIR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT4_LVL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT2_ENA.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT5_PDR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT4_POL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT2_DIR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT0_DOUT.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT6_PULDIS.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT4_PSL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT0_PDR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORTB_ENABLE.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT1_BIT5_LVL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT3_ENA.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT6_PDR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT5_POL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT3_PULL.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT0_BIT3_DIR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT6_DOUT.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT7_PULL.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT0_BIT0_LVL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT5_PSL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT1_PDR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT0_POL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT6_LVL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT7_PULDIS.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT4_ENA.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT7_PDR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT6_POL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT0_PSL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT4_DIR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT0_PULDIS.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT1_DOUT.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT1_LVL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT6_PSL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT2_PDR.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT1_POL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT7_LVL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT5_ENA.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT7_POL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT1_PSL.VALUE=0 -DRIVER.SCI.VAR.SCI4_PORT_BIT2_PULL.VALUE=2 -DRIVER.SCI.VAR.SCI1_PORT_BIT2_DOUT.VALUE=0 -DRIVER.SCI.VAR.SCI4_BASE.VALUE=0xFFF7E700 -DRIVER.SCI.VAR.SCI4_LENGTH.VALUE=8 -DRIVER.SCI.VAR.SCI3_BREAKINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI2_PORT_BIT0_DOUT.VALUE=0 -DRIVER.SCI.VAR.SCI1_PORT_BIT2_PSL.VALUE=1 -DRIVER.SCI.VAR.SCI3_PORT_BIT0_FUN.VALUE=0 -DRIVER.SCI.VAR.SCI4_ACTUALBAUDRATE.VALUE=9606 -DRIVER.SCI.VAR.SCI4_FEINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI3_PORT_BIT2_DIR.VALUE=0 -DRIVER.SCI.VAR.SCI1_BAUDRATE.VALUE=9600 -DRIVER.SCI.VAR.SCI4_OEINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI4_TXINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI3_PORT_BIT0_PDR.VALUE=0 -DRIVER.SCI.VAR.SCI2_PEINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI1_STOPBITS.VALUE=2 -DRIVER.SCI.VAR.SCI3_PORT_BIT1_FUN.VALUE=1 -DRIVER.SCI.VAR.SCI3_WAKEINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI1_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.SCI.VAR.SCI1_RXINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI4_WAKEINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI1_FEINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI1_PORT_BIT0_PULL.VALUE=2 -DRIVER.SCI.VAR.SCI3_PORT_BIT1_PDR.VALUE=0 -DRIVER.SCI.VAR.SCI1_TXINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI2_PORT_BIT1_DOUT.VALUE=0 -DRIVER.SCI.VAR.SCI3_PORT_BIT2_FUN.VALUE=1 -DRIVER.SCI.VAR.SCI4_TIMMINGMODE.VALUE=1 -DRIVER.SCI.VAR.SCI3_CLKMODE.VALUE=1 -DRIVER.SCI.VAR.SCI3_PORT_BIT0_PSL.VALUE=1 -DRIVER.SCI.VAR.SCI2_LENGTH.VALUE=8 -DRIVER.SCI.VAR.SCI1_BASE_PORT.VALUE=0xFFF7E440 -DRIVER.SCI.VAR.SCI4_BAUDRATE.VALUE=9600 -DRIVER.SCI.VAR.SCI3_OEINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI2_PARITYENA.VALUE=0 -DRIVER.SCI.VAR.SCI1_EVENPARITY.VALUE=0 -DRIVER.SCI.VAR.SCI3_PORT_BIT2_PDR.VALUE=0 -DRIVER.SCI.VAR.SCI2_BREAKINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI1_PEINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI1_TIMMINGMODE.VALUE=1 -DRIVER.SCI.VAR.SCI3_PORT_BIT1_PSL.VALUE=1 -DRIVER.SCI.VAR.SCI4_STOPBITS.VALUE=2 -DRIVER.SCI.VAR.SCI4_RXINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI4_FEINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI1_PORT_BIT1_PULL.VALUE=2 -DRIVER.SCI.VAR.SCI4_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.SCI.VAR.SCI2_PORT_BIT2_DOUT.VALUE=0 -DRIVER.SCI.VAR.SCI4_TXINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI3_PORT_BIT2_PSL.VALUE=1 -DRIVER.SCI.VAR.SCI3_PORT_BIT0_DOUT.VALUE=0 -DRIVER.SCI.VAR.SCI2_WAKEINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI3_WAKEINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI1_RXINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI2_CLKMODE.VALUE=1 -DRIVER.SCI.VAR.SCI1_PRESCALE.VALUE=487 -DRIVER.SCI.VAR.SCI4_PEINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI2_PORT_BIT0_DIR.VALUE=0 -DRIVER.SCI.VAR.SCI1_PORT_BIT2_PULL.VALUE=2 -DRIVER.SCI.VAR.SCI3_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.SCI.VAR.SCI3_FEINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI2_PORT_BIT0_PULL.VALUE=2 -DRIVER.SCI.VAR.SCI3_OEINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI3_TXINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI1_ACTUALBAUDRATE.VALUE=9606 -DRIVER.SCI.VAR.SCI3_PORT_BIT1_DOUT.VALUE=0 -DRIVER.SCI.VAR.SCI2_BREAKINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI1_PEINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI2_PORT_BIT1_DIR.VALUE=0 -DRIVER.SCI.VAR.SCI4_RXINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI4_BASE_PORT.VALUE=0xFFF7E740 -DRIVER.SCI.VAR.SCI4_PRESCALE.VALUE=487 -DRIVER.SCI.VAR.SCI2_PORT_BIT0_FUN.VALUE=0 -DRIVER.SCI.VAR.SCI2_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.SCI.VAR.SCI2_PORT_BIT2_DIR.VALUE=0 -DRIVER.SCI.VAR.SCI1_WAKEINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI1_CLKMODE.VALUE=1 -DRIVER.SCI.VAR.SCI2_PORT_BIT1_PULL.VALUE=2 -DRIVER.SCI.VAR.SCI2_WAKEINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI2_PORT_BIT0_PDR.VALUE=0 -DRIVER.SCI.VAR.SCI3_BAUDRATE.VALUE=9600 -DRIVER.SCI.VAR.SCI2_OEINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI3_PORT_BIT2_DOUT.VALUE=0 -DRIVER.SCI.VAR.SCI2_PORT_BIT1_FUN.VALUE=1 -DRIVER.SCI.VAR.SCI4_PORT_BIT0_DOUT.VALUE=0 -DRIVER.SCI.VAR.SCI4_PEINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI4_BREAKINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI3_TIMMINGMODE.VALUE=1 -DRIVER.SCI.VAR.SCI3_STOPBITS.VALUE=2 -DRIVER.SCI.VAR.SCI3_RXINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI2_PORT_BIT1_PDR.VALUE=0 -DRIVER.SCI.VAR.SCI3_FEINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI1_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.SCI.VAR.SCI2_PORT_BIT2_FUN.VALUE=1 -DRIVER.SCI.VAR.SCI1_BREAKINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI2_PORT_BIT0_PSL.VALUE=1 -DRIVER.SCI.VAR.SCI3_TXINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI4_PORT_BIT0_DIR.VALUE=0 -DRIVER.SCI.VAR.SCI2_PORT_BIT2_PULL.VALUE=2 -DRIVER.SCI.VAR.SCI2_PORT_BIT2_PDR.VALUE=0 -DRIVER.SCI.VAR.SCI3_PORT_BIT0_PULL.VALUE=2 -DRIVER.SCI.VAR.SCI2_BASE_PORT.VALUE=0xFFF7E640 -DRIVER.SCI.VAR.SCI3_PARITYENA.VALUE=0 -DRIVER.SCI.VAR.SCI2_ACTUALBAUDRATE.VALUE=9606 -DRIVER.SCI.VAR.SCI4_PORT_BIT1_DOUT.VALUE=0 -DRIVER.SCI.VAR.SCI2_PORT_BIT1_PSL.VALUE=1 -DRIVER.SCI.VAR.SCI3_LENGTH.VALUE=8 -DRIVER.SCI.VAR.SCI3_PEINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI4_PORT_BIT1_DIR.VALUE=0 -DRIVER.SCI.VAR.SCI1_WAKEINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI2_FEINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI2_PORT_BIT2_PSL.VALUE=1 -DRIVER.SCI.VAR.SCI4_PORT_BIT0_FUN.VALUE=0 -DRIVER.SCI.VAR.SCI2_OEINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI4_EVENPARITY.VALUE=0 -DRIVER.SCI.VAR.SCI2_TXINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI4_PORT_BIT2_DIR.VALUE=0 -DRIVER.SCI.VAR.SCI4_PORT_BIT2_PULDIS.VALUE=0 -DRIVER.SCI.VAR.SCI4_BREAKINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI3_PORT_BIT1_PULL.VALUE=2 -DRIVER.SCI.VAR.SCI4_PORT_BIT0_PDR.VALUE=0 -DRIVER.SCI.VAR.SCI3_RXINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI4_PORT_BIT2_DOUT.VALUE=0 -DRIVER.SCI.VAR.SCI1_BASE.VALUE=0xFFF7E400 -DRIVER.SCI.VAR.SCI4_PORT_BIT1_FUN.VALUE=1 -DRIVER.SCI.VAR.SCI3_PRESCALE.VALUE=487 -DRIVER.SCI.VAR.SCI1_PORT_BIT0_DIR.VALUE=0 -DRIVER.SCI.VAR.SCI1_BREAKINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI4_PORT_BIT1_PDR.VALUE=0 -DRIVER.SCI.VAR.SCI1_LENGTH.VALUE=8 -DRIVER.SCI.VAR.SCI4_PORT_BIT2_FUN.VALUE=1 -DRIVER.SCI.VAR.SCI3_PORT_BIT2_PULDIS.VALUE=0 -DRIVER.SCI.VAR.SCI2_BAUDRATE.VALUE=9600 -DRIVER.SCI.VAR.SCI1_PARITYENA.VALUE=0 -DRIVER.SCI.VAR.SCI1_OEINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI4_PORT_BIT0_PSL.VALUE=1 -DRIVER.SCI.VAR.SCI1_PORT_BIT1_DIR.VALUE=0 -DRIVER.SCI.VAR.SCI3_PORT_BIT2_PULL.VALUE=2 -DRIVER.SCI.VAR.SCI3_PEINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI4_PORT_BIT2_PDR.VALUE=0 -DRIVER.SCI.VAR.SCI2_STOPBITS.VALUE=2 -DRIVER.SCI.VAR.SCI4_PORT_BIT0_PULL.VALUE=2 -DRIVER.SCI.VAR.SCI2_RXINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI1_PORT_BIT0_DOUT.VALUE=0 -DRIVER.SCI.VAR.SCI2_BASE.VALUE=0xFFF7E600 -DRIVER.SCI.VAR.SCI2_FEINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI1_PORT_BIT0_FUN.VALUE=0 -DRIVER.SCI.VAR.SCI4_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.SCI.VAR.SCI3_ACTUALBAUDRATE.VALUE=9606 -DRIVER.SCI.VAR.SCI4_PORT_BIT1_PSL.VALUE=1 -DRIVER.SCI.VAR.SCI1_PORT_BIT2_DIR.VALUE=0 -DRIVER.SCI.VAR.SCI3_EVENPARITY.VALUE=0 -DRIVER.SCI.VAR.SCI2_TXINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI3_BREAKINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI2_TIMMINGMODE.VALUE=1 -DRIVER.SCI.VAR.SCI1_PORT_BIT0_PDR.VALUE=0 -DRIVER.SCI.VAR.SCI2_PORT_BIT2_PULDIS.VALUE=0 -DRIVER.SCI.VAR.SCI1_PORT_BIT1_FUN.VALUE=1 -DRIVER.SCI.VAR.SCI4_PORT_BIT2_PSL.VALUE=1 -DRIVER.SCI.VAR.SCI4_OEINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI2_PEINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI1_PORT_BIT1_PDR.VALUE=0 -DRIVER.SCI.VAR.SCI4_PORT_BIT1_PULL.VALUE=2 -DRIVER.SCI.VAR.SCI3_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.SCI.VAR.SCI1_PORT_BIT1_DOUT.VALUE=0 -DRIVER.SCI.VAR.SCI3_BASE.VALUE=0xFFF7E500 -DRIVER.SCI.VAR.SCI1_PORT_BIT2_FUN.VALUE=1 -DRIVER.SCI.VAR.SCI4_WAKEINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI1_FEINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI1_PORT_BIT0_PSL.VALUE=1 -DRIVER.SCI.VAR.SCI3_PORT_BIT0_DIR.VALUE=0 -DRIVER.SCI.VAR.SCI1_OEINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI1_PORT_BIT2_PULDIS.VALUE=0 -DRIVER.SCI.VAR.SCI1_TXINTENA.VALUE=0 -DRIVER.SCI.VAR.SCI1_PORT_BIT2_PDR.VALUE=0 -DRIVER.SCI.VAR.SCI1_PORT_BIT1_PSL.VALUE=1 -DRIVER.SCI.VAR.SCI2_RXINTLVL.VALUE=0 -DRIVER.SCI.VAR.SCI3_PORT_BIT1_DIR.VALUE=0 -DRIVER.SCI.VAR.SCI3_BASE_PORT.VALUE=0xFFF7E540 -DRIVER.SCI.VAR.SCI4_PARITYENA.VALUE=0 -DRIVER.SCI.VAR.SCI4_CLKMODE.VALUE=1 -DRIVER.SCI.VAR.SCI2_EVENPARITY.VALUE=0 -DRIVER.SCI.VAR.SCI2_PRESCALE.VALUE=487 -DRIVER.SCI.VAR.SCI2_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG0_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PARITYENA2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_DLENERRLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG4_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI2_BASE_PORT.VALUE=0xFFF7F618 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT17_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT25_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_BITERRENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PARITYENA3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_RXINTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG5_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT25_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT17_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT8_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG1_BUF_CSNR.VALUE=CS_1 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT1_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_CLKMOD.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT11_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT5_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_PHASE0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG5_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI1_PHASE1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT27_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT19_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT3_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG3_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT9_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG6_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PHASE2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT8_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG6_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG5_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI1_PHASE3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT25_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT17_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG2_BUF_CSNR.VALUE=CS_2 -DRIVER.MIBSPI.VAR.MIBSPI4_TG6_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT1_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT11_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_BASE.VALUE=0xFFF7FA00 -DRIVER.MIBSPI.VAR.MIBSPI5_TG0_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT5_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG6_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI3_TG7_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG6_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT17_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT25_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG5_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG1_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_C2TDELAYACTUAL.VALUE=26.667 -DRIVER.MIBSPI.VAR.MIBSPI4_TG7_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT1_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG4_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT11_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG5_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TXINTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TIMEOUTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_RAM_PARITY_ENA.VALUE=0x00000005 -DRIVER.MIBSPI.VAR.MIBSPI3_TG7_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI1_TG1_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI1_TG1_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT27_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT19_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG7_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG0_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_WDELAY0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT3_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG7_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG2_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG0_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI4_WDELAY1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG3_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI4_WDELAY2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PARERRLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT8_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG5_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG0_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_WDELAY3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG0_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT9_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG4_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG3_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT8_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT4_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG7_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG7_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG2_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT26_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT18_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG3_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT2_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG4_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG0_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_ACTUALBAUDRATE0.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI2_T2EDELAYACTUAL.VALUE=0.000 -DRIVER.MIBSPI.VAR.MIBSPI3_TG2_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI3_ACTUALBAUDRATE1.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT0_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG5_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT10_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_ACTUALBAUDRATE2.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI2_TG5_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT3_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI1_TG0_LENGTH.VALUE=8 -DRIVER.MIBSPI.VAR.MIBSPI5_TG0_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI3_TG0_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_ACTUALBAUDRATE3.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI2_TG3_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG2_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT9_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG5_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG7_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_C2EDELAYACTUAL.VALUE=0.000 -DRIVER.MIBSPI.VAR.MIBSPI2_BAUDRATE0.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT8_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG1_BUF_CSNR.VALUE=CS_1 -DRIVER.MIBSPI.VAR.MIBSPI2_BAUDRATE1.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT2_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG5_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG4_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT1_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI2_BAUDRATE2.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI4_TG2_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG1_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG3_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI3_TG0_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI2_BAUDRATE3.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI5_TG6_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_T2CDELAYACTUAL.VALUE=13.333 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT4_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT4_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG2_BUF_CSNR.VALUE=CS_2 -DRIVER.MIBSPI.VAR.MIBSPI2_TG4_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI3_TG7_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI3_TG5_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG1_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT9_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG2_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PARERRENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG1_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI3_OVRNINTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT8_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG6_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI1_TG6_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT26_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT18_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT0_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT10_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT2_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG3_BUF_CSNR.VALUE=CS_3 -DRIVER.MIBSPI.VAR.MIBSPI2_POLARITY0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT17_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT25_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG1_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_POLARITY1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_C2TDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT10_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI4_TG6_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_OVRNINTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT5_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG0_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI2_POLARITY2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG2_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI5_RXINTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT17_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT25_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT4_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG4_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI3_TG5_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_DEYSNCENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_POLARITY3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT11_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT27_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT19_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT0_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG4_BUF_CSNR.VALUE=CS_4 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT3_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG2_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_WAITENA0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_BASE.VALUE=0xFFF7FC00 -DRIVER.MIBSPI.VAR.MIBSPI2_WAITENA1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG6_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT1_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_DEYSNCLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG5_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PARPOL0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT11_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT17_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT25_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_WAITENA2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG4_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT10_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PARPOL1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG7_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI2_WAITENA3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG5_BUF_CSNR.VALUE=CS_5 -DRIVER.MIBSPI.VAR.MIBSPI4_TG4_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PARPOL2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG2_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT9_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG2_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PARPOL3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT3_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT0_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG2_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI5_TG5_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI1_TXINTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG0_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG1_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT5_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PRESCALE0.VALUE=74 -DRIVER.MIBSPI.VAR.MIBSPI1_CLKMOD.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG3_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI1_PRESCALE1.VALUE=74 -DRIVER.MIBSPI.VAR.MIBSPI5_TG5_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TXINTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG2_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG1_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PRESCALE2.VALUE=74 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT9_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TIMEOUTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG7_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_DLENERRENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PRESCALE3.VALUE=74 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT1_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT11_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG3_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PARITYENA0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG5_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT8_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG5_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_ACTUALBAUDRATE0.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI3_PARITYENA1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_ACTUALBAUDRATE1.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT9_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI3_PARITYENA2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_DLENERRLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG4_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI1_TG2_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_ACTUALBAUDRATE2.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT2_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PARITYENA3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_BITERRENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG1_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_ACTUALBAUDRATE3.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI5_TG4_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT4_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG6_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG6_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG4_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG5_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI3_T2EDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT2_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_BITERRLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_SHIFTDIR0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT8_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG3_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_RXINTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_CSDEF.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT4_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI1_TG5_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_SHIFTDIR1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG2_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG1_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT0_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG4_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_SHIFTDIR2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT10_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG7_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG6_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_WDELAY0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT17_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT25_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_T2CDELAYACTUAL.VALUE=13.333 -DRIVER.MIBSPI.VAR.MIBSPI4_SHIFTDIR3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_WDELAY1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG1_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI4_MASTER.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_WDELAY2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT2_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT1_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG2_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG3_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_WDELAY3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG2_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT8_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_ENABLEHIGHZ.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT5_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG7_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG4_BUF_CSNR.VALUE=CS_4 -DRIVER.MIBSPI.VAR.MIBSPI3_TG7_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT10_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG3_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT0_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT10_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI1_TG5_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG4_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT4_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG3_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT27_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT19_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT2_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG5_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT3_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG5_BUF_CSNR.VALUE=CS_5 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT9_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG0_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI2_C2EDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT11_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI4_TG3_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI3_TG2_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT17_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT25_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG5_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG4_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI5_TG1_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT1_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT5_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG6_BUF_CSNR.VALUE=CS_6 -DRIVER.MIBSPI.VAR.MIBSPI4_C2TDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT3_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG2_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_BASE_PORT.VALUE=0xFFF7FC18 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT9_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT0_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG6_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG5_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI2_TG0_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI2_TG0_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT1_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_WAITENA0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG7_BUF_CSNR.VALUE=CS_7 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT11_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG0_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG3_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_WAITENA1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG2_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI5_WAITENA2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG2_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG5_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT2_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_WAITENA3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT9_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT10_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG2_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG1_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT17_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT25_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_C2TDELAYACTUAL.VALUE=26.667 -DRIVER.MIBSPI.VAR.MIBSPI2_T2CDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG4_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT11_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG4_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_RAM_PARITY_ENA.VALUE=0x00000005 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT2_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TXINTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG1_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI1_TG3_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT3_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG2_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT0_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG6_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG1_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_BASE_RAM.VALUE=0xFF080000 -DRIVER.MIBSPI.VAR.MIBSPI1_TG4_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI5_TG2_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT8_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_PARPOL0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG7_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI2_TG0_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_CHARLEN0.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI3_TG2_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PARPOL1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PARERRENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_CHARLEN1.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI2_OVRNINTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG4_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI5_TG5_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG3_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PHASE0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PARPOL2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_CHARLEN2.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI4_PHASE1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PARPOL3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_CHARLEN3.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI5_PARERRLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT8_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI4_PHASE2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG7_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG6_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_OVRNINTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT1_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG0_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT5_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI5_TG1_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG2_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI4_PHASE3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG4_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_DEYSNCENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_RXINTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT2_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG0_BUF_CSNR.VALUE=CS_0 -DRIVER.MIBSPI.VAR.MIBSPI3_T2EDELAYACTUAL.VALUE=0.000 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT8_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG1_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI5_RXINTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT10_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_DEYSNCLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT3_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT3_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG7_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT4_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG5_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG5_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI2_TG5_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG4_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT9_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG1_BUF_CSNR.VALUE=CS_1 -DRIVER.MIBSPI.VAR.MIBSPI4_C2EDELAYACTUAL.VALUE=0.000 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT8_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG0_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT25_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT17_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT1_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT11_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI1_TG2_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG3_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI4_TG4_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT10_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG6_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG5_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI5_BAUDRATE0.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT4_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT1_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG7_BUF_CSNR.VALUE=CS_7 -DRIVER.MIBSPI.VAR.MIBSPI1_TG3_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_BAUDRATE1.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI4_TG3_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI5_TG6_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI5_BAUDRATE2.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT9_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG1_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG7_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG1_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TXINTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_BAUDRATE3.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI4_TG7_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TIMEOUTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG6_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI3_TG6_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI1_DLENERRENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT10_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT2_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG5_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG1_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG0_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT17_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT25_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_WDELAY0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PARITYENA0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG1_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_C2EDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_WDELAY1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PARITYENA1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TIMEOUTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT2_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_WDELAY2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PARITYENA2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_DLENERRLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_MASTER.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG7_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT9_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG7_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_WDELAY3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PARITYENA3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_BITERRENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT3_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT0_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG7_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_POLARITY0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT10_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT0_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG2_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG4_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG4_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_POLARITY1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG5_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI5_POLARITY2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT11_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG7_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_BITERRLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT4_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_SHIFTDIR0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG4_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG3_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT26_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT18_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG6_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_POLARITY3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG7_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT2_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_SHIFTDIR1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_RAM_PARITY_ENA.VALUE=0x00000005 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT11_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG3_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG2_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT9_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG3_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_SHIFTDIR2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_SHIFTDIR3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG7_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT0_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG1_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT11_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG0_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG4_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT2_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG7_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG5_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG0_BUF_CSNR.VALUE=CS_0 -DRIVER.MIBSPI.VAR.MIBSPI5_T2CDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG7_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI5_TG0_LENGTH.VALUE=8 -DRIVER.MIBSPI.VAR.MIBSPI4_TG7_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG2_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG0_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG6_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG5_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG3_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT11_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PRESCALE0.VALUE=74 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT8_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG7_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG1_BUF_CSNR.VALUE=CS_1 -DRIVER.MIBSPI.VAR.MIBSPI5_BASE_RAM.VALUE=0xFF0A0000 -DRIVER.MIBSPI.VAR.MIBSPI4_PRESCALE1.VALUE=74 -DRIVER.MIBSPI.VAR.MIBSPI2_TG0_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI5_CHARLEN0.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT9_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI4_PRESCALE2.VALUE=74 -DRIVER.MIBSPI.VAR.MIBSPI3_TG3_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI3_CSDEF.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT3_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG1_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_CHARLEN1.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI4_TG0_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI4_PRESCALE3.VALUE=74 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT4_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_CHARLEN2.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI3_TG6_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG2_BUF_CSNR.VALUE=CS_2 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT1_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT9_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_CHARLEN3.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT8_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG7_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG2_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_BASE_PORT.VALUE=0xFFF7F818 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT5_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT4_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI2_TG5_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG1_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_RXINTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG7_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT10_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG3_BUF_CSNR.VALUE=CS_3 -DRIVER.MIBSPI.VAR.MIBSPI2_TG0_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_T2CDELAYACTUAL.VALUE=13.333 -DRIVER.MIBSPI.VAR.MIBSPI1_WAITENA0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG2_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI1_WAITENA1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT26_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT18_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT1_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT2_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI2_TG5_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI2_PARPOL0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG4_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_WAITENA2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PARPOL1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG7_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI1_TG0_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_WAITENA3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG4_BUF_CSNR.VALUE=CS_4 -DRIVER.MIBSPI.VAR.MIBSPI4_TG7_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG2_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_CLKMOD.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT5_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT3_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PARPOL2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PHASE0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG6_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI2_PARPOL3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PHASE1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT10_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG3_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT0_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI3_TG4_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PHASE2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT9_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PHASE3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT3_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT9_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG1_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT10_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT0_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TXINTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT4_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG4_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG7_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT2_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG2_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI1_PARERRENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_OVRNINTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT1_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT11_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT2_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG5_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG4_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT9_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT0_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG6_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PARERRLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG6_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_OVRNINTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG0_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI4_TG0_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI2_TG2_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG0_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT11_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG4_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG5_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG2_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG1_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI2_T2EDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG4_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT2_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG4_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_DEYSNCLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_RXINTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG1_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG3_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI2_TG1_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG0_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI3_TG6_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG4_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_C2TDELAYACTUAL.VALUE=26.667 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT4_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_WDELAY0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_WDELAY1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT11_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_WDELAY2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG1_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI3_TG2_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT17_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT25_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG1_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI1_TG5_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_WDELAY3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG7_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG6_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT0_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG7_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_BAUDRATE0.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI1_TG3_BUF_CSNR.VALUE=CS_3 -DRIVER.MIBSPI.VAR.MIBSPI3_TG3_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI3_BAUDRATE1.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT8_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG6_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI4_TG4_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG0_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_BAUDRATE2.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT5_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT17_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT25_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI1_TG1_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG3_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG4_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI3_TG4_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG2_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI3_BAUDRATE3.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI3_TIMEOUTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT10_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_ENABLEHIGHZ.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT3_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG4_BUF_CSNR.VALUE=CS_4 -DRIVER.MIBSPI.VAR.MIBSPI1_PARITYENA0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_C2EDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PARITYENA1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT8_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI5_TG5_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT1_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG7_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TIMEOUTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT5_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI1_PARITYENA2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_DLENERRLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG4_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG3_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG3_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI1_TG7_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI1_PARITYENA3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_T2EDELAYACTUAL.VALUE=0.000 -DRIVER.MIBSPI.VAR.MIBSPI4_ACTUALBAUDRATE0.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI3_TG5_BUF_CSNR.VALUE=CS_5 -DRIVER.MIBSPI.VAR.MIBSPI3_POLARITY0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT8_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG2_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_ACTUALBAUDRATE1.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI3_C2TDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_POLARITY1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG5_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT27_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT19_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT10_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG4_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT3_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_ACTUALBAUDRATE2.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT3_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI3_POLARITY2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT10_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT0_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG3_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_BITERRLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG4_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI4_TG5_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI4_ACTUALBAUDRATE3.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI4_DEYSNCENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_POLARITY3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG7_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT9_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT8_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_C2EDELAYACTUAL.VALUE=0.000 -DRIVER.MIBSPI.VAR.MIBSPI4_TG6_BUF_CSNR.VALUE=CS_6 -DRIVER.MIBSPI.VAR.MIBSPI4_TG0_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_WAITENA0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT5_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG6_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_WAITENA1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT1_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI4_TG7_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_WAITENA2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG1_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI1_TG1_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT5_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG6_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_WAITENA3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT2_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG7_BUF_CSNR.VALUE=CS_7 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT17_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT25_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT4_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT1_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG0_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG2_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG3_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_ENABLEHIGHZ.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT11_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT1_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG7_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI1_T2CDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT9_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG1_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG0_LENGTH.VALUE=8 -DRIVER.MIBSPI.VAR.MIBSPI5_TG6_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT11_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TXINTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT10_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT2_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG1_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG1_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT4_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PRESCALE0.VALUE=74 -DRIVER.MIBSPI.VAR.MIBSPI1_TG6_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PRESCALE1.VALUE=74 -DRIVER.MIBSPI.VAR.MIBSPI1_TG0_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI1_BASE_RAM.VALUE=0xFF0E0000 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT10_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT2_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT8_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG3_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI2_TG1_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PRESCALE2.VALUE=74 -DRIVER.MIBSPI.VAR.MIBSPI1_PARPOL0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_CHARLEN0.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI2_PRESCALE3.VALUE=74 -DRIVER.MIBSPI.VAR.MIBSPI1_PARPOL1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_CHARLEN1.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT0_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG5_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG1_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG4_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_CLKMOD.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG7_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PARPOL2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_CHARLEN2.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI5_TG4_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI1_PARPOL3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_CHARLEN3.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT11_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT17_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT25_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT4_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG2_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG4_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT11_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT1_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_BASE_PORT.VALUE=0xFFF7F418 -DRIVER.MIBSPI.VAR.MIBSPI4_BITERRENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_RAM_PARITY_ENA.VALUE=0x00000005 -DRIVER.MIBSPI.VAR.MIBSPI1_TG3_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT9_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG7_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_T2EDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_SHIFTDIR0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_RXINTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG1_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG5_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT3_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_SHIFTDIR1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG4_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG3_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI5_TG0_BUF_CSNR.VALUE=CS_0 -DRIVER.MIBSPI.VAR.MIBSPI5_SHIFTDIR2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT2_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG5_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_SHIFTDIR3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG6_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI5_TG2_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_CSDEF.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI2_TG4_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT8_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI3_TG5_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG4_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT11_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT8_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT5_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_ACTUALBAUDRATE0.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI1_TG6_BUF_CSNR.VALUE=CS_6 -DRIVER.MIBSPI.VAR.MIBSPI1_TG1_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_ACTUALBAUDRATE1.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT9_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI5_TG2_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI5_MASTER.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT3_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG1_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT9_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_ACTUALBAUDRATE2.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT10_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT0_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG6_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG5_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI2_ACTUALBAUDRATE3.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI1_TG0_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI5_TG6_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT1_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG3_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT9_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG7_BUF_CSNR.VALUE=CS_7 -DRIVER.MIBSPI.VAR.MIBSPI2_TG0_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG0_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_C2EDELAYACTUAL.VALUE=0.000 -DRIVER.MIBSPI.VAR.MIBSPI4_C2EDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT5_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT4_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI3_TG5_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT2_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG6_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PARERRLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_OVRNINTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG7_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_DLENERRENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG6_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT5_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT10_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG5_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_T2CDELAYACTUAL.VALUE=13.333 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT17_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT25_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG1_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG1_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI5_TG1_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT2_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI4_TG4_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI5_TG7_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI2_TG1_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI1_TG2_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT5_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT3_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG3_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG2_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT10_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT2_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT0_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT0_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI5_TG3_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT10_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT8_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG1_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT9_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT3_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG3_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT0_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG7_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_BAUDRATE0.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI4_T2CDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG3_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI1_BAUDRATE1.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT11_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT17_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT25_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT4_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG6_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT11_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT1_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG6_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_BAUDRATE2.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI5_TG0_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG2_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI2_TIMEOUTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT17_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT25_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_BAUDRATE3.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI5_TG4_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT2_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG6_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG5_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG0_BUF_CSNR.VALUE=CS_0 -DRIVER.MIBSPI.VAR.MIBSPI4_BASE_RAM.VALUE=0xFF060000 -DRIVER.MIBSPI.VAR.MIBSPI4_TG6_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG5_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_CHARLEN0.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI3_TIMEOUTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT3_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG0_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT3_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_CHARLEN1.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI4_PARERRENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG4_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT10_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG5_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT11_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG7_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_CHARLEN2.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI3_TG1_BUF_CSNR.VALUE=CS_1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT8_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG0_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_POLARITY0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_CHARLEN3.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI1_TG5_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI1_POLARITY1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_BASE.VALUE=0xFFF7F400 -DRIVER.MIBSPI.VAR.MIBSPI2_TG6_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG2_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_POLARITY2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG0_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI4_TG3_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI4_TG3_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_RXINTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_DEYSNCENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG6_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_POLARITY3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PHASE0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT17_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT25_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT4_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG2_BUF_CSNR.VALUE=CS_2 -DRIVER.MIBSPI.VAR.MIBSPI4_C2TDELAYACTUAL.VALUE=26.667 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT11_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT1_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PHASE1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PHASE2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_DEYSNCLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG7_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT9_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG1_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT9_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI5_PHASE3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG7_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG6_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI1_TG7_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG6_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI5_TG3_BUF_CSNR.VALUE=CS_3 -DRIVER.MIBSPI.VAR.MIBSPI4_TG0_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG1_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG2_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT5_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG0_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG6_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG0_LENGTH.VALUE=8 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT2_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT8_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG4_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI3_TG6_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT5_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG7_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT3_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG1_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT10_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT0_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG7_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG7_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT5_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI3_TXINTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT4_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG3_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG5_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_ENABLE.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT11_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG7_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI5_TG0_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_T2EDELAYACTUAL.VALUE=0.000 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT8_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG2_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT9_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG3_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG4_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI5_TG7_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT3_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI4_TG6_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT0_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT10_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG3_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG2_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT10_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT0_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI5_OVRNINTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_BITERRENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT5_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG4_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG4_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT3_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT2_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG5_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG0_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_T2EDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT1_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI5_TG0_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI4_BITERRLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT11_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI3_SHIFTDIR0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_MASTER.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_SHIFTDIR1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG0_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG3_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG5_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG2_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_SHIFTDIR2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT8_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT1_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG6_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI3_SHIFTDIR3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG6_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG1_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT3_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG4_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT27_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT19_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT3_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG1_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG0_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI5_TG4_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT17_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT25_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT4_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG7_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG6_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG6_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT11_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT1_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG2_BUF_CSNR.VALUE=CS_2 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT8_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG2_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT5_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG3_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG2_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG1_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI5_TG7_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG4_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PRESCALE0.VALUE=74 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT10_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG3_BUF_CSNR.VALUE=CS_3 -DRIVER.MIBSPI.VAR.MIBSPI5_PRESCALE1.VALUE=74 -DRIVER.MIBSPI.VAR.MIBSPI2_BASE.VALUE=0xFFF7F600 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT25_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT17_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG1_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PRESCALE2.VALUE=74 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT1_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG4_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT11_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG3_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PRESCALE3.VALUE=74 -DRIVER.MIBSPI.VAR.MIBSPI4_TG2_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI4_DLENERRENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_RAM_PARITY_ENA.VALUE=0x00000005 -DRIVER.MIBSPI.VAR.MIBSPI5_PARITYENA0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG7_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG4_BUF_CSNR.VALUE=CS_4 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT3_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PARITYENA1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG1_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI2_C2TDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PARITYENA2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_DLENERRLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_CSDEF.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI4_BASE_PORT.VALUE=0xFFF7FA18 -DRIVER.MIBSPI.VAR.MIBSPI3_TG4_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI2_TG3_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG3_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI5_PARITYENA3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT8_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT5_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG5_BUF_CSNR.VALUE=CS_5 -DRIVER.MIBSPI.VAR.MIBSPI3_WAITENA0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT9_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG4_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_WAITENA1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG3_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_WAITENA2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT8_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT4_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG7_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_WAITENA3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG6_BUF_CSNR.VALUE=CS_6 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT5_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG6_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG2_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT2_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_T2EDELAYACTUAL.VALUE=0.000 -DRIVER.MIBSPI.VAR.MIBSPI1_TG3_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT9_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT0_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG3_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT10_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG6_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI3_TG0_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI2_TG1_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TXINTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TIMEOUTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG1_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG0_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_CLKMOD.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_ENABLEHIGHZ.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT9_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PHASE0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_C2EDELAYACTUAL.VALUE=0.000 -DRIVER.MIBSPI.VAR.MIBSPI5_TG7_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI3_PHASE1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT26_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT18_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT17_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT25_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT4_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI4_TG5_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT2_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG5_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PHASE2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TIMEOUTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT11_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT1_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI4_TG0_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PHASE3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PARERRENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG3_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI4_T2CDELAYACTUAL.VALUE=13.333 -DRIVER.MIBSPI.VAR.MIBSPI3_TG5_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT4_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT4_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG6_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG0_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT2_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI4_TG3_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PARERRLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG1_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG1_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT3_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG4_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG2_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT0_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT10_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT2_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG7_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG6_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_T2EDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT8_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_RXINTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG7_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_DEYSNCLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT5_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG1_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI3_TG3_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG4_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI2_TG3_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG2_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI5_WDELAY0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT0_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT10_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT3_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_ENABLEHIGHZ.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_WDELAY1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG2_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT25_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT17_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG5_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI5_TG3_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_WDELAY2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT1_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT11_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG0_LENGTH.VALUE=8 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT17_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT25_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG2_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI5_TG2_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_WDELAY3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG4_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG3_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT11_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_BAUDRATE0.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI1_TG5_BUF_CSNR.VALUE=CS_5 -DRIVER.MIBSPI.VAR.MIBSPI4_BAUDRATE1.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI3_BASE.VALUE=0xFFF7F800 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT27_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT19_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG6_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_BAUDRATE2.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT3_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_TG0_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_MASTER.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG5_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_BAUDRATE3.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT8_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG5_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI3_TG4_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI2_TG6_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT8_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG1_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG0_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG6_BUF_CSNR.VALUE=CS_6 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT5_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG0_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG4_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI3_C2EDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG7_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI2_TG2_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG2_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT25_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT17_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG6_BUF_LOCK.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG5_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI4_TG5_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_OVRNINTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT11_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT25_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT17_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG3_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_C2TDELAYACTUAL.VALUE=26.667 -DRIVER.MIBSPI.VAR.MIBSPI4_POLARITY0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT1_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG7_BUF_CSNR.VALUE=CS_7 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT11_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG0_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_TG3_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_C2TDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_POLARITY1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG6_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_OVRNINTLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT9_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_TG0_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI4_POLARITY2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT9_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI2_TG0_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_BITERRLVL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_SHIFTDIR0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT10_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG6_BUF_MODE.VALUE=4 -DRIVER.MIBSPI.VAR.MIBSPI5_DEYSNCENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG6_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI4_POLARITY3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_SHIFTDIR1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG1_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG1_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG3_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT4_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_SHIFTDIR2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_TG6_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI1_SHIFTDIR3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT26_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT18_FUN.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_TG0_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT2_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT17_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT25_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT8_DIR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG2_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG2_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT0_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT10_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI2_TG4_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_T2CDELAY.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT5_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT4_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG2_TRGEVT.VALUE=TRG_ALWAYS -DRIVER.MIBSPI.VAR.MIBSPI3_TG0_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT2_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI1_CSDEF.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI5_TG7_CS_ENCODE.VALUE=0xFF -DRIVER.MIBSPI.VAR.MIBSPI5_TG7_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TXINTENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT3_PULDIS.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG3_BUF_WDEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_TG2_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_ACTUALBAUDRATE0.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT9_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PORT_BIT8_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG6_PRST.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PRESCALE0.VALUE=74 -DRIVER.MIBSPI.VAR.MIBSPI2_TG3_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT5_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_ACTUALBAUDRATE1.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI3_PRESCALE1.VALUE=74 -DRIVER.MIBSPI.VAR.MIBSPI3_BASE_RAM.VALUE=0xFF0C0000 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT3_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT0_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_ACTUALBAUDRATE2.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI5_PARPOL0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG1_LENGTH.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT10_DIR.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG3_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PRESCALE2.VALUE=74 -DRIVER.MIBSPI.VAR.MIBSPI3_CHARLEN0.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT0_PULL.VALUE=2 -DRIVER.MIBSPI.VAR.MIBSPI5_ACTUALBAUDRATE3.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI5_PARPOL1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PRESCALE3.VALUE=74 -DRIVER.MIBSPI.VAR.MIBSPI3_CHARLEN1.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI3_DLENERRENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT26_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT18_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI5_PARPOL2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_TG5_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI4_PARITYENA0.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT2_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG5_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG0_BUF_CSNR.VALUE=CS_0 -DRIVER.MIBSPI.VAR.MIBSPI3_CHARLEN2.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI2_PORT_BIT3_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI5_PARPOL3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI4_PARITYENA1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_CHARLEN3.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI1_TG1_TRGSRC.VALUE=TRG_DISABLED -DRIVER.SPI.VAR.SPI5_PORT_BIT26_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT18_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT4_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI3_PHASE2.VALUE=0 -DRIVER.SPI.VAR.SPI2_TIMEOUTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT1_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI5_PORT_BIT25_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT17_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI3_PHASE3.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT11_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI4_T2CDELAYACTUAL.VALUE=13.333 -DRIVER.SPI.VAR.SPI4_POLARITY0.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT1_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT4_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI4_POLARITY1.VALUE=0 -DRIVER.SPI.VAR.SPI2_T2EDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT2_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI4_PORT_BIT9_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI4_POLARITY2.VALUE=0 -DRIVER.SPI.VAR.SPI2_BITERRLVL.VALUE=0 -DRIVER.SPI.VAR.SPI1_SHIFTDIR0.VALUE=0 -DRIVER.SPI.VAR.SPI1_RXINTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT10_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI5_DEYSNCENA.VALUE=0 -DRIVER.SPI.VAR.SPI4_POLARITY3.VALUE=0 -DRIVER.SPI.VAR.SPI1_SHIFTDIR1.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT5_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT10_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT2_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT4_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI1_SHIFTDIR2.VALUE=0 -DRIVER.SPI.VAR.SPI1_SHIFTDIR3.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT2_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT10_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI1_PORT_BIT8_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT0_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT0_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT25_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT17_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT11_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI3_PORT_BIT4_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT11_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT25_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT17_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT9_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI3_PRESCALE0.VALUE=74 -DRIVER.SPI.VAR.SPI3_PRESCALE1.VALUE=74 -DRIVER.SPI.VAR.SPI1_C2EDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT27_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT19_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT0_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI3_PRESCALE2.VALUE=74 -DRIVER.SPI.VAR.SPI1_MASTER.VALUE=1 -DRIVER.SPI.VAR.SPI3_PRESCALE3.VALUE=74 -DRIVER.SPI.VAR.SPI3_PORT_BIT2_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI3_C2TDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI2_BASE_PORT.VALUE=0xFFF7F618 -DRIVER.SPI.VAR.SPI5_BITERRENA.VALUE=0 -DRIVER.SPI.VAR.SPI4_OVRNINTENA.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT9_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT25_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT17_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI5_C2TDELAYACTUAL.VALUE=26.667 -DRIVER.SPI.VAR.SPI4_PORT_BIT10_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT8_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI4_WAITENA0.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT11_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT5_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI4_WAITENA1.VALUE=0 -DRIVER.SPI.VAR.SPI5_OVRNINTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI4_WAITENA2.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT3_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT9_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI1_PORT_BIT9_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT5_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI4_WAITENA3.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT2_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT1_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI1_T2CDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT26_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT18_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT5_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI3_TXINTENA.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT10_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI1_BASE_RAM.VALUE=0xFF0E0000 -DRIVER.SPI.VAR.SPI5_PORT_BIT1_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT5_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI1_PORT_BIT2_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI1_CHARLEN0.VALUE=16 -DRIVER.SPI.VAR.SPI1_CHARLEN1.VALUE=16 -DRIVER.SPI.VAR.SPI4_PORT_BIT8_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT3_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT5_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI1_CHARLEN2.VALUE=16 -DRIVER.SPI.VAR.SPI1_CHARLEN3.VALUE=16 -DRIVER.SPI.VAR.SPI5_PORT_BIT3_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI3_PORT_BIT10_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT0_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI2_PARERRLVL.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT8_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI3_DLENERRENA.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT26_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT18_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT9_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI4_PARITYENA0.VALUE=0 -DRIVER.SPI.VAR.SPI4_ENABLEHIGHZ.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT3_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI5_T2EDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI4_PARITYENA1.VALUE=0 -DRIVER.SPI.VAR.SPI4_PARITYENA2.VALUE=0 -DRIVER.SPI.VAR.SPI4_DLENERRLVL.VALUE=0 -DRIVER.SPI.VAR.SPI4_RXINTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT4_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT25_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT17_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT11_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI5_PORT_BIT3_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI4_PARITYENA3.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT2_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT1_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI3_CLKMOD.VALUE=1 -DRIVER.SPI.VAR.SPI1_PHASE0.VALUE=0 -DRIVER.SPI.VAR.SPI1_PHASE1.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT27_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT19_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT0_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI1_PHASE2.VALUE=0 -DRIVER.SPI.VAR.SPI1_PHASE3.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT25_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT17_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT11_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI2_BAUDRATE0.VALUE=1000.000 -DRIVER.SPI.VAR.SPI1_PORT_BIT8_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI2_BAUDRATE1.VALUE=1000.000 -DRIVER.SPI.VAR.SPI5_PORT_BIT2_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI2_BAUDRATE2.VALUE=1000.000 -DRIVER.SPI.VAR.SPI2_BAUDRATE3.VALUE=1000.000 -DRIVER.SPI.VAR.SPI5_WDELAY0.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT4_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT10_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT25_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT17_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI1_C2TDELAYACTUAL.VALUE=26.667 -DRIVER.SPI.VAR.SPI1_ENABLEHIGHZ.VALUE=0 -DRIVER.SPI.VAR.SPI5_WDELAY1.VALUE=0 -DRIVER.SPI.VAR.SPI4_C2EDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI5_WDELAY2.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT11_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT9_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI1_TIMEOUTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI5_WDELAY3.VALUE=0 -DRIVER.SPI.VAR.SPI5_PARERRENA.VALUE=0 -DRIVER.SPI.VAR.SPI4_RAM_PARITY_ENA.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT5_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT27_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT19_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT0_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT11_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI2_POLARITY0.VALUE=0 -DRIVER.SPI.VAR.SPI2_POLARITY1.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT5_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI2_POLARITY2.VALUE=0 -DRIVER.SPI.VAR.SPI3_DEYSNCENA.VALUE=0 -DRIVER.SPI.VAR.SPI2_POLARITY3.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT11_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT3_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT1_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI5_DEYSNCLVL.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT8_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI4_PORT_BIT10_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT26_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT18_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI2_T2EDELAYACTUAL.VALUE=0.000 -DRIVER.SPI.VAR.SPI1_PORT_BIT9_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI4_T2CDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT3_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT10_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT0_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT3_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI4_PORT_BIT9_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT5_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI3_C2EDELAYACTUAL.VALUE=0.000 -DRIVER.SPI.VAR.SPI1_PRESCALE0.VALUE=74 -DRIVER.SPI.VAR.SPI4_BASE_RAM.VALUE=0xFF060000 -DRIVER.SPI.VAR.SPI1_PRESCALE1.VALUE=74 -DRIVER.SPI.VAR.SPI5_PORT_BIT4_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI4_CHARLEN0.VALUE=16 -DRIVER.SPI.VAR.SPI2_PORT_BIT1_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI1_PRESCALE2.VALUE=74 -DRIVER.SPI.VAR.SPI4_PORT_BIT3_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI4_CHARLEN1.VALUE=16 -DRIVER.SPI.VAR.SPI1_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI1_PRESCALE3.VALUE=74 -DRIVER.SPI.VAR.SPI5_PORT_BIT1_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI5_T2CDELAYACTUAL.VALUE=13.333 -DRIVER.SPI.VAR.SPI4_CHARLEN2.VALUE=16 -DRIVER.SPI.VAR.SPI1_PORT_BIT8_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI4_CHARLEN3.VALUE=16 -DRIVER.SPI.VAR.SPI1_BASE.VALUE=0xFFF7F400 -DRIVER.SPI.VAR.SPI3_BITERRENA.VALUE=0 -DRIVER.SPI.VAR.SPI3_OVRNINTENA.VALUE=0 -DRIVER.SPI.VAR.SPI3_RXINTENA.VALUE=0 -DRIVER.SPI.VAR.SPI5_ACTUALBAUDRATE0.VALUE=1000.000 -DRIVER.SPI.VAR.SPI3_PORT_BIT10_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT4_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT2_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT25_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT17_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI5_ACTUALBAUDRATE1.VALUE=1000.000 -DRIVER.SPI.VAR.SPI5_PORT_BIT2_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI5_ACTUALBAUDRATE2.VALUE=1000.000 -DRIVER.SPI.VAR.SPI5_PARPOL0.VALUE=0 -DRIVER.SPI.VAR.SPI5_BITERRLVL.VALUE=0 -DRIVER.SPI.VAR.SPI4_SHIFTDIR0.VALUE=0 -DRIVER.SPI.VAR.SPI4_OVRNINTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT8_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI5_ACTUALBAUDRATE3.VALUE=1000.000 -DRIVER.SPI.VAR.SPI5_PARPOL1.VALUE=0 -DRIVER.SPI.VAR.SPI4_SHIFTDIR1.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT27_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT19_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT0_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI5_PARPOL2.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT0_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI4_SHIFTDIR2.VALUE=0 -DRIVER.SPI.VAR.SPI5_PARPOL3.VALUE=0 -DRIVER.SPI.VAR.SPI4_SHIFTDIR3.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT4_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT11_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT1_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT8_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT25_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT17_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT11_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI3_TXINTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT2_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT9_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI1_CLKMOD.VALUE=1 -DRIVER.SPI.VAR.SPI5_TIMEOUTENA.VALUE=0 -DRIVER.SPI.VAR.SPI2_DLENERRENA.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT11_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT5_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI3_PARITYENA0.VALUE=0 -DRIVER.SPI.VAR.SPI3_PARITYENA1.VALUE=0 -DRIVER.SPI.VAR.SPI1_T2EDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT3_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI5_BASE_PORT.VALUE=0xFFF7FC18 -DRIVER.SPI.VAR.SPI3_PORT_BIT9_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI3_PORT_BIT9_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI3_PARITYENA2.VALUE=0 -DRIVER.SPI.VAR.SPI3_DLENERRLVL.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT0_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI3_PARITYENA3.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT1_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI4_WDELAY0.VALUE=0 -DRIVER.SPI.VAR.SPI4_WDELAY1.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT5_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI4_WDELAY2.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT2_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT4_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI4_WDELAY3.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT3_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT10_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI1_T2CDELAYACTUAL.VALUE=13.333 -DRIVER.SPI.VAR.SPI5_PORT_BIT5_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI4_MASTER.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT2_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI5_PORT_BIT8_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT3_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI3_ACTUALBAUDRATE0.VALUE=1000.000 -DRIVER.SPI.VAR.SPI2_PORT_BIT0_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI3_ACTUALBAUDRATE1.VALUE=1000.000 -DRIVER.SPI.VAR.SPI2_BASE.VALUE=0xFFF7F600 -DRIVER.SPI.VAR.SPI4_PORT_BIT10_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT8_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT0_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI3_ACTUALBAUDRATE2.VALUE=1000.000 -DRIVER.SPI.VAR.SPI3_ACTUALBAUDRATE3.VALUE=1000.000 -DRIVER.SPI.VAR.SPI3_PARERRENA.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT3_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI2_C2TDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT4_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI5_PARERRLVL.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT1_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT8_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT5_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI1_DEYSNCENA.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT2_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT1_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI3_WAITENA0.VALUE=0 -DRIVER.SPI.VAR.SPI3_WAITENA1.VALUE=0 -DRIVER.SPI.VAR.SPI3_WAITENA2.VALUE=0 -DRIVER.SPI.VAR.SPI3_DEYSNCLVL.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT3_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI3_WAITENA3.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT26_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT18_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT11_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT8_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT10_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI3_PORT_BIT10_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI2_TXINTENA.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT4_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI5_BAUDRATE0.VALUE=1000.000 -DRIVER.SPI.VAR.SPI2_PORT_BIT1_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI2_C2TDELAYACTUAL.VALUE=26.667 -DRIVER.SPI.VAR.SPI5_BAUDRATE1.VALUE=1000.000 -DRIVER.SPI.VAR.SPI5_BAUDRATE2.VALUE=1000.000 -DRIVER.SPI.VAR.SPI4_PORT_BIT11_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI4_PARPOL0.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT9_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI5_BAUDRATE3.VALUE=1000.000 -DRIVER.SPI.VAR.SPI5_RAM_PARITY_ENA.VALUE=0 -DRIVER.SPI.VAR.SPI4_PARPOL1.VALUE=0 -DRIVER.SPI.VAR.SPI4_PARPOL2.VALUE=0 -DRIVER.SPI.VAR.SPI4_PARPOL3.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT5_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT2_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT3_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI2_OVRNINTENA.VALUE=0 -DRIVER.SPI.VAR.SPI1_BITERRENA.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT3_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI5_POLARITY0.VALUE=0 -DRIVER.SPI.VAR.SPI4_PHASE0.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT0_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI5_POLARITY1.VALUE=0 -DRIVER.SPI.VAR.SPI4_T2EDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI4_PHASE1.VALUE=0 -DRIVER.SPI.VAR.SPI5_POLARITY2.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT8_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI4_PHASE2.VALUE=0 -DRIVER.SPI.VAR.SPI3_BITERRLVL.VALUE=0 -DRIVER.SPI.VAR.SPI3_OVRNINTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI3_RXINTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI2_SHIFTDIR0.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT5_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI5_PORT_BIT26_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT18_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI5_POLARITY3.VALUE=0 -DRIVER.SPI.VAR.SPI4_PHASE3.VALUE=0 -DRIVER.SPI.VAR.SPI2_SHIFTDIR1.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT9_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI3_T2EDELAYACTUAL.VALUE=0.000 -DRIVER.SPI.VAR.SPI2_SHIFTDIR2.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT8_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI1_ACTUALBAUDRATE0.VALUE=1000.000 -DRIVER.SPI.VAR.SPI2_SHIFTDIR3.VALUE=0 -DRIVER.SPI.VAR.SPI1_ACTUALBAUDRATE1.VALUE=1000.000 -DRIVER.SPI.VAR.SPI4_PORT_BIT10_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT0_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT3_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI1_ACTUALBAUDRATE2.VALUE=1000.000 -DRIVER.SPI.VAR.SPI5_PORT_BIT11_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI1_ACTUALBAUDRATE3.VALUE=1000.000 -DRIVER.SPI.VAR.SPI5_PORT_BIT9_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT5_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI4_C2EDELAYACTUAL.VALUE=0.000 -DRIVER.SPI.VAR.SPI2_PORT_BIT2_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI3_BASE.VALUE=0xFFF7F800 -DRIVER.SPI.VAR.SPI3_PORT_BIT1_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI3_PORT_BIT8_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI4_PRESCALE0.VALUE=74 -DRIVER.SPI.VAR.SPI3_PORT_BIT8_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT4_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI3_WDELAY0.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT25_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT17_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI4_PRESCALE1.VALUE=74 -DRIVER.SPI.VAR.SPI3_C2EDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI3_WDELAY1.VALUE=0 -DRIVER.SPI.VAR.SPI4_PRESCALE2.VALUE=74 -DRIVER.SPI.VAR.SPI3_WDELAY2.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT3_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI4_PRESCALE3.VALUE=74 -DRIVER.SPI.VAR.SPI4_TIMEOUTENA.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI3_WDELAY3.VALUE=0 -DRIVER.SPI.VAR.SPI1_DLENERRENA.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT4_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT10_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT2_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI3_ENABLEHIGHZ.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT1_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI2_PARITYENA0.VALUE=0 -DRIVER.SPI.VAR.SPI5_C2TDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI2_PARITYENA1.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT8_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI5_TIMEOUTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI3_BASE_PORT.VALUE=0xFFF7F818 -DRIVER.SPI.VAR.SPI2_PORT_BIT10_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI2_PARITYENA2.VALUE=0 -DRIVER.SPI.VAR.SPI2_DLENERRLVL.VALUE=0 -DRIVER.SPI.VAR.SPI2_MASTER.VALUE=1 -DRIVER.SPI.VAR.SPI2_PARITYENA3.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT27_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT19_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT0_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT11_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT11_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI4_PORT_BIT1_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI1_RAM_PARITY_ENA.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT3_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI3_T2CDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI5_TXINTENA.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT3_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT9_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI3_BASE_RAM.VALUE=0xFF0C0000 -DRIVER.SPI.VAR.SPI3_CHARLEN0.VALUE=16 -DRIVER.SPI.VAR.SPI3_CHARLEN1.VALUE=16 -DRIVER.SPI.VAR.SPI1_PARERRENA.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT10_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT5_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT11_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI3_CHARLEN2.VALUE=16 -DRIVER.SPI.VAR.SPI2_PORT_BIT2_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI3_CHARLEN3.VALUE=16 -DRIVER.SPI.VAR.SPI5_PORT_BIT9_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT9_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI4_PORT_BIT0_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI3_PARERRLVL.VALUE=0 -DRIVER.SPI.VAR.SPI2_RXINTENA.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT9_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT2_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI3_PARPOL0.VALUE=0 -DRIVER.SPI.VAR.SPI1_DEYSNCLVL.VALUE=0 -DRIVER.SPI.VAR.SPI3_PARPOL1.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT8_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT10_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI3_PARPOL2.VALUE=0 -DRIVER.SPI.VAR.SPI2_T2CDELAYACTUAL.VALUE=13.333 -DRIVER.SPI.VAR.SPI4_BASE.VALUE=0xFFF7FA00 -DRIVER.SPI.VAR.SPI3_PARPOL3.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT2_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI5_PORT_BIT4_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT0_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI4_CLKMOD.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT5_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI3_BAUDRATE0.VALUE=1000.000 -DRIVER.SPI.VAR.SPI2_PHASE0.VALUE=0 -DRIVER.SPI.VAR.SPI3_BAUDRATE1.VALUE=1000.000 -DRIVER.SPI.VAR.SPI2_PHASE1.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT10_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT8_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT0_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI3_BAUDRATE2.VALUE=1000.000 -DRIVER.SPI.VAR.SPI2_PHASE2.VALUE=0 -DRIVER.SPI.VAR.SPI2_TXINTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI3_BAUDRATE3.VALUE=1000.000 -DRIVER.SPI.VAR.SPI2_PORT_BIT10_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI2_PHASE3.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT3_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT3_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT0_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT25_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI5_PORT_BIT17_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI4_PORT_BIT1_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT11_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI1_OVRNINTENA.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT1_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI3_POLARITY0.VALUE=0 -DRIVER.SPI.VAR.SPI3_POLARITY1.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT3_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI3_POLARITY2.VALUE=0 -DRIVER.SPI.VAR.SPI2_OVRNINTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT0_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI1_BITERRLVL.VALUE=0 -DRIVER.SPI.VAR.SPI4_DEYSNCENA.VALUE=0 -DRIVER.SPI.VAR.SPI3_POLARITY3.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT8_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT11_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI2_WDELAY0.VALUE=0 -DRIVER.SPI.VAR.SPI2_WDELAY1.VALUE=0 -DRIVER.SPI.VAR.SPI2_WDELAY2.VALUE=0 -DRIVER.SPI.VAR.SPI2_WDELAY3.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT1_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT10_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI3_C2TDELAYACTUAL.VALUE=26.667 -DRIVER.SPI.VAR.SPI5_PORT_BIT11_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT9_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT11_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT11_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI2_PRESCALE0.VALUE=74 -DRIVER.SPI.VAR.SPI2_PRESCALE1.VALUE=74 -DRIVER.SPI.VAR.SPI4_PORT_BIT2_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT8_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI2_PRESCALE2.VALUE=74 -DRIVER.SPI.VAR.SPI3_TIMEOUTENA.VALUE=0 -DRIVER.SPI.VAR.SPI2_PRESCALE3.VALUE=74 -DRIVER.SPI.VAR.SPI1_PORT_BIT8_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT0_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI1_PARITYENA0.VALUE=0 -DRIVER.SPI.VAR.SPI1_C2TDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI1_PARITYENA1.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT8_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI4_PORT_BIT4_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI4_TIMEOUTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT1_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI1_PARITYENA2.VALUE=0 -DRIVER.SPI.VAR.SPI1_DLENERRLVL.VALUE=0 -DRIVER.SPI.VAR.SPI1_BASE_PORT.VALUE=0xFFF7F418 -DRIVER.SPI.VAR.SPI5_RXINTENA.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT4_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI4_BITERRENA.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI1_PARITYENA3.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT9_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI4_T2EDELAYACTUAL.VALUE=0.000 -DRIVER.SPI.VAR.SPI2_PORT_BIT8_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI2_WAITENA0.VALUE=0 -DRIVER.SPI.VAR.SPI5_BASE.VALUE=0xFFF7FC00 -DRIVER.SPI.VAR.SPI2_WAITENA1.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT10_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI5_SHIFTDIR0.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT3_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI2_WAITENA2.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT10_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI5_SHIFTDIR1.VALUE=0 -DRIVER.SPI.VAR.SPI2_WAITENA3.VALUE=0 -DRIVER.SPI.VAR.SPI5_C2EDELAYACTUAL.VALUE=0.000 -DRIVER.SPI.VAR.SPI5_SHIFTDIR2.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT2_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI5_SHIFTDIR3.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT1_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI1_TXINTENA.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT8_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT4_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT1_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT26_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI5_PORT_BIT18_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI5_TXINTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT3_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT9_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI2_PARPOL0.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT0_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT9_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI2_PARPOL1.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT10_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT2_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT1_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI2_PARPOL2.VALUE=0 -DRIVER.SPI.VAR.SPI2_PARPOL3.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT5_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT2_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI1_PARERRLVL.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT2_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI2_CLKMOD.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT10_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI3_T2EDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT11_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI2_RXINTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT11_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI2_RAM_PARITY_ENA.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT3_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT11_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT0_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT8_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT9_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI1_BAUDRATE0.VALUE=1000.000 -DRIVER.SPI.VAR.SPI1_BAUDRATE1.VALUE=1000.000 -DRIVER.SPI.VAR.SPI4_PORT_BIT4_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT8_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI1_PORT_BIT1_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI1_BAUDRATE2.VALUE=1000.000 -DRIVER.SPI.VAR.SPI3_PORT_BIT4_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT25_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT17_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI1_BAUDRATE3.VALUE=1000.000 -DRIVER.SPI.VAR.SPI5_PORT_BIT11_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT2_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI1_WDELAY0.VALUE=0 -DRIVER.SPI.VAR.SPI2_C2EDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI1_WDELAY1.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT9_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI5_MASTER.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT10_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT3_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI1_WDELAY2.VALUE=0 -DRIVER.SPI.VAR.SPI4_PARERRENA.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT10_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI1_WDELAY3.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT9_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT8_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI1_C2EDELAYACTUAL.VALUE=0.000 -DRIVER.SPI.VAR.SPI1_POLARITY0.VALUE=0 -DRIVER.SPI.VAR.SPI4_C2TDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI1_POLARITY1.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT4_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI1_PORT_BIT25_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI1_PORT_BIT17_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI1_POLARITY2.VALUE=0 -DRIVER.SPI.VAR.SPI1_OVRNINTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI5_DLENERRENA.VALUE=0 -DRIVER.SPI.VAR.SPI2_DEYSNCENA.VALUE=0 -DRIVER.SPI.VAR.SPI1_POLARITY3.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT10_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI5_WAITENA0.VALUE=0 -DRIVER.SPI.VAR.SPI5_ENABLEHIGHZ.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT4_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI3_T2CDELAYACTUAL.VALUE=13.333 -DRIVER.SPI.VAR.SPI1_PORT_BIT1_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI5_WAITENA1.VALUE=0 -DRIVER.SPI.VAR.SPI5_WAITENA2.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT2_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI4_DEYSNCLVL.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT9_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI5_WAITENA3.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT9_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT5_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI4_ACTUALBAUDRATE0.VALUE=1000.000 -DRIVER.SPI.VAR.SPI1_PORT_BIT10_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT2_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI4_ACTUALBAUDRATE1.VALUE=1000.000 -DRIVER.SPI.VAR.SPI2_T2CDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT27_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI5_PORT_BIT19_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI5_PORT_BIT0_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI4_PORT_BIT5_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI4_ACTUALBAUDRATE2.VALUE=1000.000 -DRIVER.SPI.VAR.SPI1_PORT_BIT2_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT2_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI4_ACTUALBAUDRATE3.VALUE=1000.000 -DRIVER.SPI.VAR.SPI4_TXINTENA.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT3_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT3_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT0_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT0_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI2_BASE_RAM.VALUE=0xFF080000 -DRIVER.SPI.VAR.SPI2_CHARLEN0.VALUE=16 -DRIVER.SPI.VAR.SPI1_PORT_BIT11_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT4_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT11_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI2_CHARLEN1.VALUE=16 -DRIVER.SPI.VAR.SPI2_TIMEOUTENA.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT9_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI2_CHARLEN2.VALUE=16 -DRIVER.SPI.VAR.SPI2_ENABLEHIGHZ.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT11_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI2_CHARLEN3.VALUE=16 -DRIVER.SPI.VAR.SPI3_PORT_BIT0_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI3_TIMEOUTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI2_BITERRENA.VALUE=0 -DRIVER.SPI.VAR.SPI1_RXINTENA.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT11_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT5_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT2_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT10_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI5_RXINTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI4_BITERRLVL.VALUE=0 -DRIVER.SPI.VAR.SPI3_SHIFTDIR0.VALUE=0 -DRIVER.SPI.VAR.SPI1_PARPOL0.VALUE=0 -DRIVER.SPI.VAR.SPI3_SHIFTDIR1.VALUE=0 -DRIVER.SPI.VAR.SPI1_PARPOL1.VALUE=0 -DRIVER.SPI.VAR.SPI5_PHASE0.VALUE=0 -DRIVER.SPI.VAR.SPI4_C2TDELAYACTUAL.VALUE=26.667 -DRIVER.SPI.VAR.SPI3_SHIFTDIR2.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT8_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT11_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI1_PARPOL2.VALUE=0 -DRIVER.SPI.VAR.SPI5_PHASE1.VALUE=0 -DRIVER.SPI.VAR.SPI3_SHIFTDIR3.VALUE=0 -DRIVER.SPI.VAR.SPI1_PARPOL3.VALUE=0 -DRIVER.SPI.VAR.SPI5_PHASE2.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT9_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI1_PORT_BIT3_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT27_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT19_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI5_PHASE3.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT4_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT1_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT8_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT5_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI1_TXINTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI5_PRESCALE0.VALUE=74 -DRIVER.SPI.VAR.SPI1_PORT_BIT10_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI5_C2EDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI5_PRESCALE1.VALUE=74 -DRIVER.SPI.VAR.SPI5_PRESCALE2.VALUE=74 -DRIVER.SPI.VAR.SPI3_PORT_BIT5_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI3_PORT_BIT1_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI5_PRESCALE3.VALUE=74 -DRIVER.SPI.VAR.SPI3_PORT_BIT9_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI5_T2EDELAYACTUAL.VALUE=0.000 -DRIVER.SPI.VAR.SPI3_PORT_BIT8_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI2_ACTUALBAUDRATE0.VALUE=1000.000 -DRIVER.SPI.VAR.SPI1_PORT_BIT3_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI2_ACTUALBAUDRATE1.VALUE=1000.000 -DRIVER.SPI.VAR.SPI4_PORT_BIT3_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI4_BASE_PORT.VALUE=0xFFF7FA18 -DRIVER.SPI.VAR.SPI2_PORT_BIT10_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI2_ACTUALBAUDRATE2.VALUE=1000.000 -DRIVER.SPI.VAR.SPI1_PORT_BIT0_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI5_OVRNINTENA.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT2_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI2_ACTUALBAUDRATE3.VALUE=1000.000 -DRIVER.SPI.VAR.SPI2_PORT_BIT9_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT3_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT1_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI3_MASTER.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT4_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT4_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT5_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT1_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT2_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI5_T2CDELAY.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT9_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT0_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI1_PORT_BIT11_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI5_BASE_RAM.VALUE=0xFF0A0000 -DRIVER.SPI.VAR.SPI5_CHARLEN0.VALUE=16 -DRIVER.SPI.VAR.SPI3_PORT_BIT10_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI3_PORT_BIT2_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI5_CHARLEN1.VALUE=16 -DRIVER.SPI.VAR.SPI2_PARERRENA.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT4_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI5_CHARLEN2.VALUE=16 -DRIVER.SPI.VAR.SPI1_PORT_BIT4_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI5_CHARLEN3.VALUE=16 -DRIVER.SPI.VAR.SPI5_PORT_BIT25_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT17_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI5_PORT_BIT11_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI4_PARERRLVL.VALUE=0 -DRIVER.SPI.VAR.SPI2_PORT_BIT11_DIR.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI4_DLENERRENA.VALUE=0 -DRIVER.SPI.VAR.SPI4_RXINTENA.VALUE=0 -DRIVER.SPI.VAR.SPI3_RAM_PARITY_ENA.VALUE=0 -DRIVER.SPI.VAR.SPI5_PARITYENA0.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT0_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI1_WAITENA0.VALUE=0 -DRIVER.SPI.VAR.SPI5_PARITYENA1.VALUE=0 -DRIVER.SPI.VAR.SPI1_WAITENA1.VALUE=0 -DRIVER.SPI.VAR.SPI5_PARITYENA2.VALUE=0 -DRIVER.SPI.VAR.SPI5_DLENERRLVL.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT8_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI2_DEYSNCLVL.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT5_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI1_WAITENA2.VALUE=0 -DRIVER.SPI.VAR.SPI5_PARITYENA3.VALUE=0 -DRIVER.SPI.VAR.SPI1_WAITENA3.VALUE=0 -DRIVER.SPI.VAR.SPI1_PORT_BIT3_PSL.VALUE=1 -DRIVER.SPI.VAR.SPI3_PORT_BIT1_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT8_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI2_PORT_BIT9_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI4_BAUDRATE0.VALUE=1000.000 -DRIVER.SPI.VAR.SPI1_T2EDELAYACTUAL.VALUE=0.000 -DRIVER.SPI.VAR.SPI4_BAUDRATE1.VALUE=1000.000 -DRIVER.SPI.VAR.SPI4_BAUDRATE2.VALUE=1000.000 -DRIVER.SPI.VAR.SPI4_TXINTLVL.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT3_DIR.VALUE=1 -DRIVER.SPI.VAR.SPI2_PORT_BIT10_FUN.VALUE=1 -DRIVER.SPI.VAR.SPI5_PORT_BIT5_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI4_BAUDRATE3.VALUE=1000.000 -DRIVER.SPI.VAR.SPI2_PORT_BIT2_PULDIS.VALUE=0 -DRIVER.SPI.VAR.SPI1_TIMEOUTENA.VALUE=0 -DRIVER.SPI.VAR.SPI5_CLKMOD.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT8_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI3_PORT_BIT9_DOUT.VALUE=0 -DRIVER.SPI.VAR.SPI3_PHASE0.VALUE=0 -DRIVER.SPI.VAR.SPI2_C2EDELAYACTUAL.VALUE=0.000 -DRIVER.SPI.VAR.SPI1_PORT_BIT5_PDR.VALUE=0 -DRIVER.SPI.VAR.SPI3_PHASE1.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_51_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_51_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_43_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_43_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_35_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_35_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_27_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_27_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_19_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_19_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_51_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_43_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_35_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_27_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_19_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_21_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_21_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_13_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_13_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_59_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_9_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_30_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_22_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_14_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_4_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_61_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_53_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_45_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_37_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_29_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_6_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_RAM_PARITY_ENA.VALUE=0x00000005 -DRIVER.CAN.VAR.CAN_1_MESSAGE_59_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_64_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_56_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_48_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_SYNC.VALUE=1 -DRIVER.CAN.VAR.CAN_4_MESSAGE_62_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_54_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_46_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_38_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_SHIFT.VALUE=0 -DRIVER.CAN.VAR.CAN_4_AUTO_BUS_ON.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_4_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_4_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_40_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_32_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_24_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_16_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_57_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_49_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_64_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_56_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_48_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_31_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_23_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_15_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_51_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_43_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_35_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_27_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_19_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_BAUDRATE.VALUE=500 -DRIVER.CAN.VAR.CAN_2_PORT_RX_PDR.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_63_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_55_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_47_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_39_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_30_ID.VALUE=30 -DRIVER.CAN.VAR.CAN_2_MESSAGE_22_ID.VALUE=22 -DRIVER.CAN.VAR.CAN_2_MESSAGE_14_ID.VALUE=14 -DRIVER.CAN.VAR.CAN_2_MESSAGE_9_ID.VALUE=9 -DRIVER.CAN.VAR.CAN_1_MESSAGE_57_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_49_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_60_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_52_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_44_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_36_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_28_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_RAMBASE.VALUE=0xFF1C0000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_30_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_22_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_14_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_51_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_43_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_35_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_27_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_19_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_9_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_PORT_RX_PULDIS.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_57_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_49_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_4_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_2_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_64_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_56_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_48_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_NOMINAL_BIT_RATE.VALUE=500.000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_51_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_43_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_35_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_27_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_19_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_1_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_57_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_51_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_49_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_43_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_35_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_27_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_19_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_10_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_5_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_64_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_64_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_56_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_56_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_48_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_48_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_40_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_32_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_24_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_16_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_9_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_60_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_52_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_50_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_44_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_42_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_36_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_34_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_28_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_26_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_18_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_60_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_58_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_52_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_44_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_36_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_28_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_PIN_MODE.VALUE=1 -DRIVER.CAN.VAR.CAN_2_PHASE_SEG.VALUE=4 -DRIVER.CAN.VAR.CAN_1_MESSAGE_30_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_22_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_20_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_14_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_12_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_31_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_23_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_15_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_7_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_51_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_43_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_35_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_31_ID.VALUE=31 -DRIVER.CAN.VAR.CAN_2_MESSAGE_27_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_23_ID.VALUE=23 -DRIVER.CAN.VAR.CAN_2_MESSAGE_19_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_15_ID.VALUE=15 -DRIVER.CAN.VAR.CAN_4_MESSAGE_1_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_NOMINAL_BIT_TIME.VALUE=15 -DRIVER.CAN.VAR.CAN_4_MESSAGE_60_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_60_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_52_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_52_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_51_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_44_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_44_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_43_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_36_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_36_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_35_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_28_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_28_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_27_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_19_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_9_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_30_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_30_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_22_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_22_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_21_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_14_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_14_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_13_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_AUTO_BUS_ON.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_60_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_52_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_44_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_36_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_28_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_63_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_55_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_47_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_39_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_31_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_23_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_15_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_10_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_5_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_PORT_TX_PULDIS.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_30_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_22_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_14_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_51_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_43_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_35_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_27_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_19_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_7_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_21_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_13_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_57_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_49_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_BASE.VALUE=0xFFF7DC00 -DRIVER.CAN.VAR.CAN_4_MESSAGE_9_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_40_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_32_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_24_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_16_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_10_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_10_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_5_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_5_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_6_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_40_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_32_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_24_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_16_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_11_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_1_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_8_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_3_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_3_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_10_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_4_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_21_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_13_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_64_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_56_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_48_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_40_ID.VALUE=40 -DRIVER.CAN.VAR.CAN_2_MESSAGE_32_ID.VALUE=32 -DRIVER.CAN.VAR.CAN_2_MESSAGE_24_ID.VALUE=24 -DRIVER.CAN.VAR.CAN_2_MESSAGE_16_ID.VALUE=16 -DRIVER.CAN.VAR.CAN_1_MESSAGE_1_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_61_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_53_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_45_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_37_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_29_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_31_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_23_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_15_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_1_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_1_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_21_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_13_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_6_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_6_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_IDENTIFIER_MODE.VALUE=0x40000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_57_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_49_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_11_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_57_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_49_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_40_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_32_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_24_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_16_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_3_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_60_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_52_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_44_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_36_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_28_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_11_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_6_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_PORT_RX_PULL.VALUE=1 -DRIVER.CAN.VAR.CAN_4_MESSAGE_40_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_32_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_24_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_16_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_57_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_57_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_49_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_49_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_6_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_PORT_TX_DIN.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_10_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_61_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_53_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_45_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_37_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_29_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_59_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_51_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_43_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_35_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_27_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_19_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_1_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_31_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_23_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_15_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_40_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_32_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_24_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_16_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_8_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_PORT_RX_PSL.VALUE=1 -DRIVER.CAN.VAR.CAN_2_MESSAGE_41_ID.VALUE=41 -DRIVER.CAN.VAR.CAN_2_MESSAGE_33_ID.VALUE=33 -DRIVER.CAN.VAR.CAN_2_MESSAGE_25_ID.VALUE=25 -DRIVER.CAN.VAR.CAN_2_MESSAGE_17_ID.VALUE=17 -DRIVER.CAN.VAR.CAN_1_MESSAGE_10_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_2_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_BRP_FREQ.VALUE=7.500 -DRIVER.CAN.VAR.CAN_4_MESSAGE_61_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_61_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_53_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_53_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_45_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_45_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_37_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_37_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_29_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_29_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_6_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_21_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_13_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_PORT_TX_DIR.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_31_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_31_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_23_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_23_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_15_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_15_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_3_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_21_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_13_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_5_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_11_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_6_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_4_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_PROP_SEG.VALUE=6 -DRIVER.CAN.VAR.CAN_3_MESSAGE_1_ID.VALUE=1 -DRIVER.CAN.VAR.CAN_2_MESSAGE_64_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_56_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_48_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_1_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_SYNC.VALUE=1 -DRIVER.CAN.VAR.CAN_3_MESSAGE_58_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_11_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_11_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_10_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_6_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_6_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_3_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_2_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_60_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_52_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_44_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_36_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_28_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_57_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_49_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_NOMINAL_BIT_RATE.VALUE=500.000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_64_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_56_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_48_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_64_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_56_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_48_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_57_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_50_ID.VALUE=50 -DRIVER.CAN.VAR.CAN_2_MESSAGE_49_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_42_ID.VALUE=42 -DRIVER.CAN.VAR.CAN_2_MESSAGE_34_ID.VALUE=34 -DRIVER.CAN.VAR.CAN_2_MESSAGE_26_ID.VALUE=26 -DRIVER.CAN.VAR.CAN_2_MESSAGE_18_ID.VALUE=18 -DRIVER.CAN.VAR.CAN_1_MESSAGE_50_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_42_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_34_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_26_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_18_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_62_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_54_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_46_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_38_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_PROPAGATION_DELAY.VALUE=700 -DRIVER.CAN.VAR.CAN_1_MESSAGE_40_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_32_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_24_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_16_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_21_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_13_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_2_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_2_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_3_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_58_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_BAUDRATE.VALUE=500 -DRIVER.CAN.VAR.CAN_3_MESSAGE_58_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_50_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_42_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_34_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_26_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_18_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_60_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_57_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_52_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_49_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_44_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_36_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_28_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_10_ID.VALUE=10 -DRIVER.CAN.VAR.CAN_4_MESSAGE_9_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_61_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_53_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_50_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_45_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_42_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_37_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_34_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_29_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_26_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_18_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_2_ID.VALUE=2 -DRIVER.CAN.VAR.CAN_1_MESSAGE_6_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_NOMINAL_BIT_TIME.VALUE=15 -DRIVER.CAN.VAR.CAN_2_MESSAGE_20_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_12_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_7_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_3_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_58_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_58_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_10_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_SAMPLE_POINT.VALUE=73.333 -DRIVER.CAN.VAR.CAN_4_MESSAGE_62_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_54_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_46_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_38_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_8_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_7_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_61_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_53_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_45_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_37_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_29_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_21_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_20_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_13_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_12_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_40_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_32_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_24_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_16_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_5_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_4_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_41_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_33_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_25_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_17_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_9_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_51_ID.VALUE=51 -DRIVER.CAN.VAR.CAN_2_MESSAGE_43_ID.VALUE=43 -DRIVER.CAN.VAR.CAN_2_MESSAGE_35_ID.VALUE=35 -DRIVER.CAN.VAR.CAN_2_MESSAGE_27_ID.VALUE=27 -DRIVER.CAN.VAR.CAN_2_MESSAGE_20_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_19_ID.VALUE=19 -DRIVER.CAN.VAR.CAN_2_MESSAGE_12_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_3_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_11_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_3_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_62_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_62_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_54_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_54_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_46_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_46_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_38_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_38_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_40_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_40_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_32_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_32_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_24_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_24_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_16_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_16_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_64_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_56_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_48_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_40_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_32_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_24_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_20_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_16_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_12_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_7_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_50_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_42_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_34_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_26_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_18_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_20_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_12_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_11_ID.VALUE=11 -DRIVER.CAN.VAR.CAN_3_MESSAGE_3_ID.VALUE=3 -DRIVER.CAN.VAR.CAN_2_PORT_RX_DOUT.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_2_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_59_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_BASE.VALUE=0xFFF7DE00 -DRIVER.CAN.VAR.CAN_1_RAMBASE.VALUE=0xFF1E0000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_10_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_20_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_20_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_12_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_12_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_7_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_7_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_PORT_RX_PULL.VALUE=2 -DRIVER.CAN.VAR.CAN_4_MESSAGE_63_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_55_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_47_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_41_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_39_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_33_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_25_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_17_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_3_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_1_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_9_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_IDENTIFIER_MODE.VALUE=0x40000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_41_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_33_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_25_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_17_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_11_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_60_ID.VALUE=60 -DRIVER.CAN.VAR.CAN_2_MESSAGE_58_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_52_ID.VALUE=52 -DRIVER.CAN.VAR.CAN_2_MESSAGE_44_ID.VALUE=44 -DRIVER.CAN.VAR.CAN_2_MESSAGE_36_ID.VALUE=36 -DRIVER.CAN.VAR.CAN_2_MESSAGE_28_ID.VALUE=28 -DRIVER.CAN.VAR.CAN_4_MESSAGE_63_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_55_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_47_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_39_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_41_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_33_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_25_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_17_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_PORT_RX_DIN.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_3_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_3_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_41_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_33_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_25_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_17_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_7_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_59_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_20_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_12_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_9_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_11_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_6_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_11_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_4_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_20_ID.VALUE=20 -DRIVER.CAN.VAR.CAN_4_MESSAGE_12_ID.VALUE=12 -DRIVER.CAN.VAR.CAN_3_MESSAGE_62_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_54_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_46_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_38_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_4_ID.VALUE=4 -DRIVER.CAN.VAR.CAN_1_MESSAGE_63_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_55_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_47_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_39_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_21_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_13_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_8_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_PORT_RX_DIR.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_59_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_59_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_AUTO_RETRANSMISSION.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_PORT_TX_FUN.VALUE=1 -DRIVER.CAN.VAR.CAN_1_MESSAGE_59_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_63_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_55_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_47_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_39_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_62_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_54_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_46_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_38_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_2_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_41_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_33_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_25_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_17_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_PORT_TX_DOUT.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_50_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_42_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_34_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_26_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_18_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_AUTO_BUS_ON_TR.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_63_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_55_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_47_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_39_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_61_ID.VALUE=61 -DRIVER.CAN.VAR.CAN_2_MESSAGE_53_ID.VALUE=53 -DRIVER.CAN.VAR.CAN_2_MESSAGE_45_ID.VALUE=45 -DRIVER.CAN.VAR.CAN_2_MESSAGE_37_ID.VALUE=37 -DRIVER.CAN.VAR.CAN_2_MESSAGE_29_ID.VALUE=29 -DRIVER.CAN.VAR.CAN_1_MESSAGE_20_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_12_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_4_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_1_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_63_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_63_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_55_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_55_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_47_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_47_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_39_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_39_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_PORT_TX_PULL.VALUE=2 -DRIVER.CAN.VAR.CAN_1_MESSAGE_41_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_41_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_33_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_33_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_25_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_25_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_17_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_17_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_10_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_62_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_54_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_46_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_38_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_2_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_21_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_13_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_8_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_NOMINAL_BIT_RATE.VALUE=500.000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_21_ID.VALUE=21 -DRIVER.CAN.VAR.CAN_4_MESSAGE_13_ID.VALUE=13 -DRIVER.CAN.VAR.CAN_3_MESSAGE_5_ID.VALUE=5 -DRIVER.CAN.VAR.CAN_2_MESSAGE_41_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_33_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_25_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_17_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_8_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_3_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_BRPE_FREQ.VALUE=7.500 -DRIVER.CAN.VAR.CAN_2_MESSAGE_59_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_21_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_21_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_13_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_13_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_8_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_8_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_PORT_RX_DIN.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_40_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_32_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_24_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_16_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_4_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_PROP_SEG.VALUE=6 -DRIVER.CAN.VAR.CAN_3_MESSAGE_8_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_58_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_31_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_23_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_15_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_RAM_PARITY_ENA.VALUE=0x00000005 -DRIVER.CAN.VAR.CAN_1_MESSAGE_10_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_1_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_41_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_33_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_25_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_17_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_5_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_PORT_TX_PDR.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_62_ID.VALUE=62 -DRIVER.CAN.VAR.CAN_2_MESSAGE_59_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_54_ID.VALUE=54 -DRIVER.CAN.VAR.CAN_2_MESSAGE_46_ID.VALUE=46 -DRIVER.CAN.VAR.CAN_2_MESSAGE_38_ID.VALUE=38 -DRIVER.CAN.VAR.CAN_1_MESSAGE_11_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_64_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_56_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_48_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_NOMINAL_BIT_TIME.VALUE=15 -DRIVER.CAN.VAR.CAN_1_MESSAGE_50_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_42_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_34_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_26_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_18_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_4_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_4_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_PORT_RX_DIR.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_64_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_56_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_48_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_1_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_1_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_59_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_58_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_61_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_59_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_53_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_45_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_37_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_29_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_TQ.VALUE=133.333 -DRIVER.CAN.VAR.CAN_4_MESSAGE_30_ID.VALUE=30 -DRIVER.CAN.VAR.CAN_4_MESSAGE_22_ID.VALUE=22 -DRIVER.CAN.VAR.CAN_4_MESSAGE_14_ID.VALUE=14 -DRIVER.CAN.VAR.CAN_4_MESSAGE_2_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_63_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_55_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_47_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_39_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_11_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_6_ID.VALUE=6 -DRIVER.CAN.VAR.CAN_2_MESSAGE_30_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_22_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_14_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_9_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_59_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_64_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_56_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_48_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_62_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_54_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_46_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_38_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_61_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_53_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_45_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_37_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_29_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_3_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_50_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_42_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_34_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_26_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_18_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_51_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_43_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_35_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_27_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_19_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_63_ID.VALUE=63 -DRIVER.CAN.VAR.CAN_2_MESSAGE_55_ID.VALUE=55 -DRIVER.CAN.VAR.CAN_2_MESSAGE_47_ID.VALUE=47 -DRIVER.CAN.VAR.CAN_2_MESSAGE_39_ID.VALUE=39 -DRIVER.CAN.VAR.CAN_1_MESSAGE_21_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_13_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_5_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_10_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_2_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_64_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_64_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_56_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_56_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_48_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_48_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_64_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_56_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_48_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_50_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_50_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_42_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_42_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_34_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_34_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_26_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_26_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_18_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_18_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_51_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_43_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_35_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_31_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_27_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_23_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_19_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_15_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_41_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_33_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_30_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_25_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_22_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_17_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_14_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_9_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_TQ.VALUE=133.333 -DRIVER.CAN.VAR.CAN_1_MESSAGE_7_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_BRPE.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_31_ID.VALUE=31 -DRIVER.CAN.VAR.CAN_4_MESSAGE_23_ID.VALUE=23 -DRIVER.CAN.VAR.CAN_4_MESSAGE_15_ID.VALUE=15 -DRIVER.CAN.VAR.CAN_3_MESSAGE_7_ID.VALUE=7 -DRIVER.CAN.VAR.CAN_2_MESSAGE_4_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_BASE.VALUE=0xFFF7E000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_59_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_30_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_30_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_22_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_22_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_14_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_14_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_9_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_9_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_61_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_53_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_45_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_37_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_29_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_50_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_42_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_34_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_26_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_18_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_5_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_10_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_1_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_PORT_TX_PULDIS.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_64_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_56_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_48_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_20_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_12_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_2_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_64_ID.VALUE=64 -DRIVER.CAN.VAR.CAN_2_MESSAGE_62_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_56_ID.VALUE=56 -DRIVER.CAN.VAR.CAN_2_MESSAGE_54_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_48_ID.VALUE=48 -DRIVER.CAN.VAR.CAN_2_MESSAGE_46_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_38_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_PORT_TX_DOUT.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_57_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_49_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_51_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_43_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_35_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_27_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_19_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_PORT_RX_FUN.VALUE=1 -DRIVER.CAN.VAR.CAN_4_MESSAGE_5_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_5_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_64_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_56_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_48_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_10_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_10_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_2_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_2_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_58_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_8_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_7_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_21_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_20_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_13_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_12_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_TQ.VALUE=133.333 -DRIVER.CAN.VAR.CAN_1_MESSAGE_60_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_52_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_44_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_36_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_28_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_5_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_4_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_62_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_54_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_46_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_40_ID.VALUE=40 -DRIVER.CAN.VAR.CAN_4_MESSAGE_38_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_32_ID.VALUE=32 -DRIVER.CAN.VAR.CAN_4_MESSAGE_24_ID.VALUE=24 -DRIVER.CAN.VAR.CAN_4_MESSAGE_16_ID.VALUE=16 -DRIVER.CAN.VAR.CAN_3_MESSAGE_64_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_56_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_48_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_8_ID.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_40_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_32_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_24_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_16_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_10_ID.VALUE=10 -DRIVER.CAN.VAR.CAN_2_MESSAGE_31_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_23_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_15_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_61_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_53_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_45_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_37_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_29_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_63_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_57_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_55_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_49_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_47_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_39_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_30_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_22_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_14_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_9_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_3_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_51_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_43_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_41_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_35_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_33_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_27_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_25_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_19_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_17_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_60_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_52_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_44_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_36_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_28_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_7_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_40_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_32_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_24_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_16_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_PORT_TX_PSL.VALUE=1 -DRIVER.CAN.VAR.CAN_2_MESSAGE_57_ID.VALUE=57 -DRIVER.CAN.VAR.CAN_2_MESSAGE_49_ID.VALUE=49 -DRIVER.CAN.VAR.CAN_1_MESSAGE_30_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_22_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_14_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_4_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_6_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_11_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_3_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_SAMPLE_POINT_REFERENCE.VALUE=75 -DRIVER.CAN.VAR.CAN_1_PROPAGATION_DELAY.VALUE=700 -DRIVER.CAN.VAR.CAN_4_MESSAGE_64_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_57_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_57_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_56_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_49_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_49_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_48_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_51_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_51_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_50_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_43_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_43_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_42_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_35_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_35_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_34_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_27_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_27_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_26_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_19_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_19_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_18_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_3_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_TQ.VALUE=133.333 -DRIVER.CAN.VAR.CAN_3_MESSAGE_1_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_31_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_23_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_15_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_PORT_RX_PDR.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_41_ID.VALUE=41 -DRIVER.CAN.VAR.CAN_4_MESSAGE_33_ID.VALUE=33 -DRIVER.CAN.VAR.CAN_4_MESSAGE_25_ID.VALUE=25 -DRIVER.CAN.VAR.CAN_4_MESSAGE_17_ID.VALUE=17 -DRIVER.CAN.VAR.CAN_3_MESSAGE_9_ID.VALUE=9 -DRIVER.CAN.VAR.CAN_2_MESSAGE_10_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_10_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_5_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_1_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_11_ID.VALUE=11 -DRIVER.CAN.VAR.CAN_1_NOMINAL_BIT_TIME.VALUE=15 -DRIVER.CAN.VAR.CAN_3_MESSAGE_61_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_53_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_45_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_37_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_29_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_31_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_31_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_23_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_23_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_15_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_15_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_PORT_RX_FUN.VALUE=1 -DRIVER.CAN.VAR.CAN_4_MESSAGE_40_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_32_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_24_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_16_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_6_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_57_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_49_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_11_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_8_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_ENABLE.VALUE=1 -DRIVER.CAN.VAR.CAN_2_MESSAGE_59_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_10_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_3_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_PIN_MODE.VALUE=1 -DRIVER.CAN.VAR.CAN_4_MESSAGE_10_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_1_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_58_ID.VALUE=58 -DRIVER.CAN.VAR.CAN_4_MESSAGE_58_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_SAMPLE_POINT_REFERENCE.VALUE=75 -DRIVER.CAN.VAR.CAN_1_MESSAGE_60_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_52_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_44_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_36_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_28_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_6_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_6_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_11_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_11_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_50_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_42_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_34_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_26_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_18_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_3_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_3_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_51_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_43_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_35_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_27_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_19_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_61_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_53_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_45_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_37_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_29_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_PORT_RX_PULDIS.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_62_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_54_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_46_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_38_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_21_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_13_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_50_ID.VALUE=50 -DRIVER.CAN.VAR.CAN_4_MESSAGE_42_ID.VALUE=42 -DRIVER.CAN.VAR.CAN_4_MESSAGE_34_ID.VALUE=34 -DRIVER.CAN.VAR.CAN_4_MESSAGE_26_ID.VALUE=26 -DRIVER.CAN.VAR.CAN_4_MESSAGE_18_ID.VALUE=18 -DRIVER.CAN.VAR.CAN_3_MESSAGE_57_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_49_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_59_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_20_ID.VALUE=20 -DRIVER.CAN.VAR.CAN_1_MESSAGE_12_ID.VALUE=12 -DRIVER.CAN.VAR.CAN_2_MESSAGE_40_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_32_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_24_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_16_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_61_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_53_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_45_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_37_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_29_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_AUTO_BUS_ON.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_31_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_23_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_15_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_58_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_63_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_55_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_47_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_39_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_1_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_2_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_60_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_52_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_44_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_36_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_28_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_61_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_59_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_53_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_45_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_37_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_29_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_59_ID.VALUE=59 -DRIVER.CAN.VAR.CAN_1_PORT_RX_PDR.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_61_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_53_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_45_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_37_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_31_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_29_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_23_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_15_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_7_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_20_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_12_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_SAMPLE_POINT_REFERENCE.VALUE=75 -DRIVER.CAN.VAR.CAN_1_MESSAGE_4_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_58_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_58_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_50_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_42_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_34_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_26_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_18_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_60_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_60_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_52_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_52_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_44_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_44_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_36_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_36_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_28_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_28_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_8_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_SHIFT.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_64_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_56_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_50_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_48_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_42_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_40_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_34_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_32_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_30_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_26_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_24_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_22_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_18_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_16_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_14_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_9_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_BRPE.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MASK.VALUE=0x1FFFFFFF -DRIVER.CAN.VAR.CAN_4_MESSAGE_51_ID.VALUE=51 -DRIVER.CAN.VAR.CAN_4_MESSAGE_43_ID.VALUE=43 -DRIVER.CAN.VAR.CAN_4_MESSAGE_35_ID.VALUE=35 -DRIVER.CAN.VAR.CAN_4_MESSAGE_27_ID.VALUE=27 -DRIVER.CAN.VAR.CAN_4_MESSAGE_19_ID.VALUE=19 -DRIVER.CAN.VAR.CAN_3_MESSAGE_61_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_53_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_45_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_37_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_29_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_11_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_6_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_21_ID.VALUE=21 -DRIVER.CAN.VAR.CAN_1_MESSAGE_13_ID.VALUE=13 -DRIVER.CAN.VAR.CAN_1_MESSAGE_9_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_BASE.VALUE=0xFFF7E200 -DRIVER.CAN.VAR.CAN_2_MESSAGE_40_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_40_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_32_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_32_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_31_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_24_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_24_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_23_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_16_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_16_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_15_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_8_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_51_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_43_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_35_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_27_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_19_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_7_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_57_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_50_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_49_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_42_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_34_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_26_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_20_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_18_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_12_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_21_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_13_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_4_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_2_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_31_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_23_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_15_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_6_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_59_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_SAMPLE_POINT_REFERENCE.VALUE=75 -DRIVER.CAN.VAR.CAN_1_MESSAGE_61_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_53_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_45_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_37_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_29_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_BRPE_FREQ.VALUE=7.500 -DRIVER.CAN.VAR.CAN_1_BRP_FREQ.VALUE=7.500 -DRIVER.CAN.VAR.CAN_4_PORT_TX_DIN.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_50_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_42_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_34_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_26_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_18_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_7_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_7_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_20_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_20_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_12_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_12_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_8_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_20_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_12_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_4_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_4_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_20_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_12_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_9_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_30_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_22_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_14_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_4_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_2_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_6_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_PORT_RX_PSL.VALUE=1 -DRIVER.CAN.VAR.CAN_4_MESSAGE_60_ID.VALUE=60 -DRIVER.CAN.VAR.CAN_4_MESSAGE_52_ID.VALUE=52 -DRIVER.CAN.VAR.CAN_4_MESSAGE_44_ID.VALUE=44 -DRIVER.CAN.VAR.CAN_4_MESSAGE_36_ID.VALUE=36 -DRIVER.CAN.VAR.CAN_4_MESSAGE_31_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_28_ID.VALUE=28 -DRIVER.CAN.VAR.CAN_4_MESSAGE_23_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_15_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_58_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_3_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_30_ID.VALUE=30 -DRIVER.CAN.VAR.CAN_1_MESSAGE_22_ID.VALUE=22 -DRIVER.CAN.VAR.CAN_1_MESSAGE_14_ID.VALUE=14 -DRIVER.CAN.VAR.CAN_2_MESSAGE_41_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_33_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_25_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_17_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_PORT_TX_DIR.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_8_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_31_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_23_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_15_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_5_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_59_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_50_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_42_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_34_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_26_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_18_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_4_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_63_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_61_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_55_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_53_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_47_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_45_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_39_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_37_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_29_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_62_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_54_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_46_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_38_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_1_ID.VALUE=1 -DRIVER.CAN.VAR.CAN_1_MESSAGE_40_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_32_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_24_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_16_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_8_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_21_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_13_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_5_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_59_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_59_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_20_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_12_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_5_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_61_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_61_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_53_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_53_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_45_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_45_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_37_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_37_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_29_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_29_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_10_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_2_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_BAUDRATE.VALUE=500 -DRIVER.CAN.VAR.CAN_2_MESSAGE_41_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_41_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_33_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_33_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_25_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_25_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_17_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_17_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_63_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_55_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_47_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_39_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_61_ID.VALUE=61 -DRIVER.CAN.VAR.CAN_4_MESSAGE_53_ID.VALUE=53 -DRIVER.CAN.VAR.CAN_4_MESSAGE_45_ID.VALUE=45 -DRIVER.CAN.VAR.CAN_4_MESSAGE_37_ID.VALUE=37 -DRIVER.CAN.VAR.CAN_4_MESSAGE_29_ID.VALUE=29 -DRIVER.CAN.VAR.CAN_2_MESSAGE_20_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_12_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_7_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_58_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_31_ID.VALUE=31 -DRIVER.CAN.VAR.CAN_1_MESSAGE_23_ID.VALUE=23 -DRIVER.CAN.VAR.CAN_1_MESSAGE_15_ID.VALUE=15 -DRIVER.CAN.VAR.CAN_3_MESSAGE_1_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_31_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_23_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_15_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_5_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_41_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_41_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_33_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_33_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_25_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_25_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_17_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_17_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_PORT_TX_DIN.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_8_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_6_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_6_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_21_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_13_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_11_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_11_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_5_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_3_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_3_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_3_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_2_ID.VALUE=2 -DRIVER.CAN.VAR.CAN_3_MESSAGE_58_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_PORT_RX_PSL.VALUE=1 -DRIVER.CAN.VAR.CAN_4_AUTO_BUS_ON_TIME.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_62_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_54_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_46_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_38_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_8_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_8_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_5_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_AUTO_RETRANSMISSION.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_21_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_21_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_20_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_13_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_13_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_12_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_SAMPLE_POINT.VALUE=73.333 -DRIVER.CAN.VAR.CAN_1_PORT_TX_DIR.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_5_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_5_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_2_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_62_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_54_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_46_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_38_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_PIN_MODE.VALUE=1 -DRIVER.CAN.VAR.CAN_3_MESSAGE_1_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_RAM_PARITY_ENA.VALUE=0x00000005 -DRIVER.CAN.VAR.CAN_3_PHASE_SEG.VALUE=4 -DRIVER.CAN.VAR.CAN_1_MESSAGE_63_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_55_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_47_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_40_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_39_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_32_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_24_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_16_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_62_ID.VALUE=62 -DRIVER.CAN.VAR.CAN_4_MESSAGE_54_ID.VALUE=54 -DRIVER.CAN.VAR.CAN_4_MESSAGE_46_ID.VALUE=46 -DRIVER.CAN.VAR.CAN_4_MESSAGE_38_ID.VALUE=38 -DRIVER.CAN.VAR.CAN_3_MESSAGE_59_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_60_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_52_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_44_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_36_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_28_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_40_ID.VALUE=40 -DRIVER.CAN.VAR.CAN_1_MESSAGE_32_ID.VALUE=32 -DRIVER.CAN.VAR.CAN_1_MESSAGE_24_ID.VALUE=24 -DRIVER.CAN.VAR.CAN_1_MESSAGE_16_ID.VALUE=16 -DRIVER.CAN.VAR.CAN_2_MESSAGE_50_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_42_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_34_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_26_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_18_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_1_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_1_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_2_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_62_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_54_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_46_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_38_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_64_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_56_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_48_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_59_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_62_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_54_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_46_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_40_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_38_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_32_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_24_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_16_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_63_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_60_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_55_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_52_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_47_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_44_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_39_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_36_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_28_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_3_ID.VALUE=3 -DRIVER.CAN.VAR.CAN_3_PORT_RX_DOUT.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_8_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_41_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_33_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_30_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_25_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_22_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_17_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_14_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_9_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_30_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_22_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_14_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_6_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_20_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_12_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_2_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_PORT_RX_PULL.VALUE=2 -DRIVER.CAN.VAR.CAN_1_MESSAGE_62_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_62_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_54_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_54_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_46_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_46_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_38_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_38_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_31_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_23_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_15_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_7_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_BRPE.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_51_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_50_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_43_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_42_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_35_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_34_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_27_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_26_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_19_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_18_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_10_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_5_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MASK.VALUE=0x1FFFFFFF -DRIVER.CAN.VAR.CAN_4_MESSAGE_63_ID.VALUE=63 -DRIVER.CAN.VAR.CAN_4_MESSAGE_55_ID.VALUE=55 -DRIVER.CAN.VAR.CAN_4_MESSAGE_47_ID.VALUE=47 -DRIVER.CAN.VAR.CAN_4_MESSAGE_39_ID.VALUE=39 -DRIVER.CAN.VAR.CAN_4_MESSAGE_5_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_30_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_22_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_14_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_21_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_13_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_8_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_41_ID.VALUE=41 -DRIVER.CAN.VAR.CAN_1_MESSAGE_33_ID.VALUE=33 -DRIVER.CAN.VAR.CAN_1_MESSAGE_25_ID.VALUE=25 -DRIVER.CAN.VAR.CAN_1_MESSAGE_17_ID.VALUE=17 -DRIVER.CAN.VAR.CAN_1_MESSAGE_2_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_10_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_2_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_2_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_50_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_50_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_42_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_42_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_34_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_34_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_26_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_26_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_18_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_18_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_60_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_52_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_44_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_36_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_28_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_9_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_30_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_22_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_14_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_60_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_59_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_52_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_44_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_36_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_28_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_30_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_22_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_14_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_6_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_4_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_4_ID.VALUE=4 -DRIVER.CAN.VAR.CAN_1_MESSAGE_1_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_1_ID.VALUE=1 -DRIVER.CAN.VAR.CAN_1_MESSAGE_63_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_55_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_47_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_39_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_PORT_TX_FUN.VALUE=1 -DRIVER.CAN.VAR.CAN_4_MESSAGE_9_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_9_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_30_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_30_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_22_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_22_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_14_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_14_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_6_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_6_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_10_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_PORT_TX_PULDIS.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_61_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_53_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_45_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_37_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_31_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_29_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_23_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_15_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_2_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_7_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_64_ID.VALUE=64 -DRIVER.CAN.VAR.CAN_4_MESSAGE_56_ID.VALUE=56 -DRIVER.CAN.VAR.CAN_4_MESSAGE_48_ID.VALUE=48 -DRIVER.CAN.VAR.CAN_1_MESSAGE_50_ID.VALUE=50 -DRIVER.CAN.VAR.CAN_1_MESSAGE_42_ID.VALUE=42 -DRIVER.CAN.VAR.CAN_1_MESSAGE_34_ID.VALUE=34 -DRIVER.CAN.VAR.CAN_1_MESSAGE_26_ID.VALUE=26 -DRIVER.CAN.VAR.CAN_1_MESSAGE_18_ID.VALUE=18 -DRIVER.CAN.VAR.CAN_4_BRP_FREQ.VALUE=7.500 -DRIVER.CAN.VAR.CAN_2_MESSAGE_51_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_43_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_35_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_27_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_19_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_PORT_TX_PULL.VALUE=2 -DRIVER.CAN.VAR.CAN_4_MESSAGE_10_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_10_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_2_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_2_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_BRP.VALUE=9 -DRIVER.CAN.VAR.CAN_4_MESSAGE_31_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_23_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_15_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_7_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_PROP_SEG.VALUE=6 -DRIVER.CAN.VAR.CAN_2_MESSAGE_21_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_13_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_10_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_8_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_5_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_63_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_55_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_47_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_39_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_64_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_56_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_48_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_5_ID.VALUE=5 -DRIVER.CAN.VAR.CAN_3_MESSAGE_10_ID.VALUE=10 -DRIVER.CAN.VAR.CAN_2_MESSAGE_57_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_49_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_50_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_42_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_34_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_26_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_18_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_2_ID.VALUE=2 -DRIVER.CAN.VAR.CAN_1_AUTO_BUS_ON_TR.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_31_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_23_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_15_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_7_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_PORT_RX_DIN.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_63_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_63_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_55_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_55_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_47_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_47_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_39_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_39_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_11_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_64_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_56_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_48_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_3_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_51_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_43_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_35_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_27_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_19_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_58_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_PORT_TX_PDR.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_57_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_57_ID.VALUE=57 -DRIVER.CAN.VAR.CAN_4_MESSAGE_49_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_49_ID.VALUE=49 -DRIVER.CAN.VAR.CAN_2_MESSAGE_30_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_22_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_14_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_9_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_51_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_51_ID.VALUE=51 -DRIVER.CAN.VAR.CAN_1_MESSAGE_43_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_43_ID.VALUE=43 -DRIVER.CAN.VAR.CAN_1_MESSAGE_35_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_35_ID.VALUE=35 -DRIVER.CAN.VAR.CAN_1_MESSAGE_27_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_27_ID.VALUE=27 -DRIVER.CAN.VAR.CAN_1_MESSAGE_19_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_19_ID.VALUE=19 -DRIVER.CAN.VAR.CAN_4_MESSAGE_11_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_3_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_AUTO_BUS_ON_TIME.VALUE=0 -DRIVER.CAN.VAR.CAN_3_PORT_RX_DIR.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_51_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_51_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_43_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_43_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_35_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_35_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_27_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_27_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_19_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_19_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_PORT_TX_FUN.VALUE=1 -DRIVER.CAN.VAR.CAN_1_MESSAGE_58_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_1_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_31_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_23_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_15_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_60_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_52_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_44_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_36_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_28_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_1_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_7_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_6_ID.VALUE=6 -DRIVER.CAN.VAR.CAN_4_MESSAGE_5_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_51_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_43_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_35_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_27_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_19_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_11_ID.VALUE=11 -DRIVER.CAN.VAR.CAN_3_MESSAGE_10_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_7_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_3_ID.VALUE=3 -DRIVER.CAN.VAR.CAN_1_MESSAGE_2_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_64_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_56_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_48_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_31_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_31_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_23_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_23_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_15_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_15_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_7_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_7_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_11_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_9_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_41_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_33_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_30_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_25_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_22_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_17_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_14_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_3_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_64_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_56_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_48_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_9_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_6_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_58_ID.VALUE=58 -DRIVER.CAN.VAR.CAN_2_MESSAGE_21_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_13_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_4_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_60_ID.VALUE=60 -DRIVER.CAN.VAR.CAN_1_MESSAGE_52_ID.VALUE=52 -DRIVER.CAN.VAR.CAN_1_MESSAGE_44_ID.VALUE=44 -DRIVER.CAN.VAR.CAN_1_MESSAGE_36_ID.VALUE=36 -DRIVER.CAN.VAR.CAN_1_MESSAGE_28_ID.VALUE=28 -DRIVER.CAN.VAR.CAN_2_MESSAGE_60_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_52_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_44_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_36_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_28_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_11_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_11_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_3_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_3_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_58_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_BRP.VALUE=9 -DRIVER.CAN.VAR.CAN_3_MESSAGE_57_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_49_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_PORT_RX_PULDIS.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_64_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_62_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_56_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_54_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_48_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_46_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_38_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_57_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_49_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_21_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_13_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_7_ID.VALUE=7 -DRIVER.CAN.VAR.CAN_3_MESSAGE_20_ID.VALUE=20 -DRIVER.CAN.VAR.CAN_3_MESSAGE_12_ID.VALUE=12 -DRIVER.CAN.VAR.CAN_3_MESSAGE_1_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_PORT_TX_PDR.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_51_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_43_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_35_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_27_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_19_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_4_ID.VALUE=4 -DRIVER.CAN.VAR.CAN_3_MESSAGE_40_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_32_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_24_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_16_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_8_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_NOMINAL_AUTO_BUS_ON_TIME.VALUE=0.000 -DRIVER.CAN.VAR.CAN_2_SHIFT.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_64_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_64_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_63_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_56_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_56_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_55_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_48_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_48_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_47_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_39_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_57_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_49_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_5_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_BRPE.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_10_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MASK.VALUE=0x1FFFFFFF -DRIVER.CAN.VAR.CAN_2_MESSAGE_60_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_60_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_52_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_52_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_44_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_44_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_36_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_36_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_28_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_28_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_51_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_43_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_35_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_27_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_19_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_2_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_59_ID.VALUE=59 -DRIVER.CAN.VAR.CAN_2_PORT_TX_DOUT.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_31_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_23_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_15_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_61_ID.VALUE=61 -DRIVER.CAN.VAR.CAN_1_MESSAGE_53_ID.VALUE=53 -DRIVER.CAN.VAR.CAN_1_MESSAGE_45_ID.VALUE=45 -DRIVER.CAN.VAR.CAN_1_MESSAGE_37_ID.VALUE=37 -DRIVER.CAN.VAR.CAN_1_MESSAGE_29_ID.VALUE=29 -DRIVER.CAN.VAR.CAN_4_MESSAGE_20_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_12_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_4_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_58_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_60_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_60_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_52_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_52_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_44_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_44_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_36_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_36_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_28_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_28_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_PORT_TX_PULL.VALUE=2 -DRIVER.CAN.VAR.CAN_4_MESSAGE_61_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_61_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_53_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_53_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_45_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_45_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_37_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_37_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_29_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_29_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_40_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_32_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_24_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_16_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_21_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_13_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_8_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_31_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_31_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_23_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_23_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_15_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_15_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_8_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_8_ID.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_6_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_21_ID.VALUE=21 -DRIVER.CAN.VAR.CAN_3_MESSAGE_13_ID.VALUE=13 -DRIVER.CAN.VAR.CAN_3_MESSAGE_11_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_64_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_56_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_48_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_5_ID.VALUE=5 -DRIVER.CAN.VAR.CAN_1_MESSAGE_3_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_57_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_49_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_40_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_40_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_32_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_32_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_24_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_24_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_16_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_16_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_63_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_55_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_47_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_39_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_8_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_8_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_20_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_12_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_2_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_40_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_32_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_24_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_16_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_4_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_58_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_8_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_PORT_TX_PSL.VALUE=1 -DRIVER.CAN.VAR.CAN_3_MESSAGE_64_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_56_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_48_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_62_ID.VALUE=62 -DRIVER.CAN.VAR.CAN_1_MESSAGE_54_ID.VALUE=54 -DRIVER.CAN.VAR.CAN_1_MESSAGE_46_ID.VALUE=46 -DRIVER.CAN.VAR.CAN_1_MESSAGE_38_ID.VALUE=38 -DRIVER.CAN.VAR.CAN_2_MESSAGE_61_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_53_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_45_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_37_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_29_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_58_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_20_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_20_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_12_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_12_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_4_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_4_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_BRP.VALUE=9 -DRIVER.CAN.VAR.CAN_1_MESSAGE_60_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_52_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_44_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_36_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_28_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_30_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_22_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_14_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_64_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_56_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_48_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_6_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_IDENTIFIER_MODE.VALUE=0x40000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_11_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_6_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_57_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_49_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_PHASE_SEG.VALUE=4 -DRIVER.CAN.VAR.CAN_4_MESSAGE_58_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_9_ID.VALUE=9 -DRIVER.CAN.VAR.CAN_3_MESSAGE_30_ID.VALUE=30 -DRIVER.CAN.VAR.CAN_3_MESSAGE_22_ID.VALUE=22 -DRIVER.CAN.VAR.CAN_3_MESSAGE_14_ID.VALUE=14 -DRIVER.CAN.VAR.CAN_2_MESSAGE_50_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_42_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_34_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_26_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_18_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_9_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_60_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_52_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_44_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_36_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_28_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_6_ID.VALUE=6 -DRIVER.CAN.VAR.CAN_4_BRPE_FREQ.VALUE=7.500 -DRIVER.CAN.VAR.CAN_3_MESSAGE_41_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_33_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_25_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_17_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_AUTO_BUS_ON_TIME.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_9_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_PORT_RX_FUN.VALUE=1 -DRIVER.CAN.VAR.CAN_3_MESSAGE_63_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_55_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_47_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_39_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_57_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_57_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_49_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_49_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_50_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_42_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_34_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_26_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_20_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_18_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_12_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_4_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_61_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_53_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_51_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_45_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_43_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_37_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_35_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_29_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_27_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_19_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_20_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_12_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_50_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_42_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_34_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_26_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_18_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_6_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_40_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_32_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_24_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_16_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_63_ID.VALUE=63 -DRIVER.CAN.VAR.CAN_1_MESSAGE_55_ID.VALUE=55 -DRIVER.CAN.VAR.CAN_1_MESSAGE_47_ID.VALUE=47 -DRIVER.CAN.VAR.CAN_1_MESSAGE_39_ID.VALUE=39 -DRIVER.CAN.VAR.CAN_1_MESSAGE_20_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_12_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_21_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_13_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_5_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_61_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_61_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_60_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_53_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_53_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_52_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_45_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_45_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_44_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_37_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_37_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_36_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_29_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_29_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_28_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_2_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_41_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_33_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_25_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_17_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_1_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_9_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_7_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_3_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_31_ID.VALUE=31 -DRIVER.CAN.VAR.CAN_3_MESSAGE_23_ID.VALUE=23 -DRIVER.CAN.VAR.CAN_3_MESSAGE_20_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_20_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_15_ID.VALUE=15 -DRIVER.CAN.VAR.CAN_3_MESSAGE_12_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_12_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_PORT_TX_PSL.VALUE=1 -DRIVER.CAN.VAR.CAN_1_MESSAGE_7_ID.VALUE=7 -DRIVER.CAN.VAR.CAN_1_MESSAGE_4_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_58_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_63_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_55_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_47_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_39_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_41_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_41_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_33_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_33_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_25_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_25_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_17_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_17_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_41_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_33_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_25_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_17_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_9_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_9_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_21_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_13_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_5_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_63_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_55_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_47_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_39_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_20_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_12_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_7_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_57_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_49_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_PORT_RX_PDR.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_64_ID.VALUE=64 -DRIVER.CAN.VAR.CAN_1_MESSAGE_56_ID.VALUE=56 -DRIVER.CAN.VAR.CAN_1_MESSAGE_48_ID.VALUE=48 -DRIVER.CAN.VAR.CAN_2_MESSAGE_62_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_54_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_46_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_38_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_21_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_21_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_13_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_13_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_BRP.VALUE=9 -DRIVER.CAN.VAR.CAN_3_MESSAGE_60_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_52_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_44_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_36_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_28_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_5_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_5_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_RAM_PARITY_ENA.VALUE=0x00000005 -DRIVER.CAN.VAR.CAN_3_MESSAGE_63_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_58_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_55_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_47_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_41_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_39_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_33_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_25_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_17_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_58_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_9_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_59_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_40_ID.VALUE=40 -DRIVER.CAN.VAR.CAN_3_MESSAGE_32_ID.VALUE=32 -DRIVER.CAN.VAR.CAN_3_MESSAGE_24_ID.VALUE=24 -DRIVER.CAN.VAR.CAN_3_MESSAGE_16_ID.VALUE=16 -DRIVER.CAN.VAR.CAN_1_MESSAGE_61_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_53_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_45_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_37_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_29_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_8_ID.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_50_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_42_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_34_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_26_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_18_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_NOMINAL_AUTO_BUS_ON_TIME.VALUE=0.000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_41_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_33_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_25_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_17_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_58_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_58_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_AUTO_RETRANSMISSION.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_11_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MASK.VALUE=0x1FFFFFFF -DRIVER.CAN.VAR.CAN_3_MESSAGE_3_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_62_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_61_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_54_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_53_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_46_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_45_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_38_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_37_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_29_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_63_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_55_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_47_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_41_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_39_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_33_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_25_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_17_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_57_ID.VALUE=57 -DRIVER.CAN.VAR.CAN_1_MESSAGE_49_ID.VALUE=49 -DRIVER.CAN.VAR.CAN_4_MESSAGE_30_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_22_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_14_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_6_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_60_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_52_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_44_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_36_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_28_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_62_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_62_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_54_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_54_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_46_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_46_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_38_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_38_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_AUTO_BUS_ON.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_30_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_22_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_14_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_62_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_54_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_46_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_38_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_50_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_42_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_40_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_34_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_32_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_26_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_24_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_18_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_16_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_62_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_54_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_46_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_40_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_38_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_32_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_24_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_16_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_8_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_63_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_55_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_47_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_39_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_8_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_41_ID.VALUE=41 -DRIVER.CAN.VAR.CAN_3_MESSAGE_33_ID.VALUE=33 -DRIVER.CAN.VAR.CAN_3_MESSAGE_25_ID.VALUE=25 -DRIVER.CAN.VAR.CAN_3_MESSAGE_21_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_17_ID.VALUE=17 -DRIVER.CAN.VAR.CAN_3_MESSAGE_13_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_41_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_33_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_25_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_17_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_9_ID.VALUE=9 -DRIVER.CAN.VAR.CAN_1_MESSAGE_5_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_59_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_SJW.VALUE=4 -DRIVER.CAN.VAR.CAN_3_MESSAGE_50_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_50_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_42_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_42_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_41_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_34_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_34_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_33_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_26_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_26_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_25_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_18_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_18_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_17_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_7_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_59_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_30_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_22_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_14_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_41_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_33_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_25_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_17_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_6_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_40_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_32_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_24_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_16_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_BAUDRATE.VALUE=500 -DRIVER.CAN.VAR.CAN_1_MESSAGE_61_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_53_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_45_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_37_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_29_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_9_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_IDENTIFIER_MODE.VALUE=0x40000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_8_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_41_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_33_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_25_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_17_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_1_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_58_ID.VALUE=58 -DRIVER.CAN.VAR.CAN_1_MESSAGE_5_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_RAMBASE.VALUE=0xFF180000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_63_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_55_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_47_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_39_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_AUTO_BUS_ON_TIME.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_30_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_30_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_22_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_22_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_14_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_14_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_6_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_6_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_30_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_22_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_14_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_7_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_PORT_TX_PULDIS.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_5_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_4_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_10_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_20_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_12_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_7_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_59_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_2_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_1_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_50_ID.VALUE=50 -DRIVER.CAN.VAR.CAN_3_MESSAGE_42_ID.VALUE=42 -DRIVER.CAN.VAR.CAN_3_MESSAGE_34_ID.VALUE=34 -DRIVER.CAN.VAR.CAN_3_MESSAGE_26_ID.VALUE=26 -DRIVER.CAN.VAR.CAN_3_MESSAGE_18_ID.VALUE=18 -DRIVER.CAN.VAR.CAN_2_MESSAGE_11_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_2_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_62_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_54_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_46_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_38_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_51_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_43_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_35_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_27_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_19_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_41_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_33_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_25_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_17_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_PORT_TX_DIN.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_7_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_59_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_59_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_11_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_60_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_52_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_44_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_36_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_28_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_21_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_13_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_59_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_5_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_PIN_MODE.VALUE=1 -DRIVER.CAN.VAR.CAN_2_MESSAGE_63_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_55_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_47_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_39_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_30_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_22_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_14_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_11_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_PORT_RX_PSL.VALUE=1 -DRIVER.CAN.VAR.CAN_2_MESSAGE_50_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_42_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_34_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_26_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_18_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_AUTO_BUS_ON_TR.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_59_ID.VALUE=59 -DRIVER.CAN.VAR.CAN_4_MESSAGE_31_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_23_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_15_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_PROPAGATION_DELAY.VALUE=700 -DRIVER.CAN.VAR.CAN_3_MESSAGE_7_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_7_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_SAMPLE_POINT.VALUE=73.333 -DRIVER.CAN.VAR.CAN_3_PORT_TX_DIR.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_30_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_22_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_14_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_63_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_63_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_55_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_55_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_47_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_47_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_39_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_39_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_4_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_61_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_53_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_45_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_37_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_29_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_3_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_ENABLE.VALUE=1 -DRIVER.CAN.VAR.CAN_3_MESSAGE_51_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_43_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_35_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_27_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_19_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_57_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_49_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_31_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_23_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_15_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_9_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_51_ID.VALUE=51 -DRIVER.CAN.VAR.CAN_3_MESSAGE_43_ID.VALUE=43 -DRIVER.CAN.VAR.CAN_3_MESSAGE_35_ID.VALUE=35 -DRIVER.CAN.VAR.CAN_3_MESSAGE_30_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_27_ID.VALUE=27 -DRIVER.CAN.VAR.CAN_3_MESSAGE_22_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_19_ID.VALUE=19 -DRIVER.CAN.VAR.CAN_3_MESSAGE_14_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_6_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_SJW.VALUE=4 -DRIVER.CAN.VAR.CAN_3_MESSAGE_51_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_51_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_43_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_43_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_35_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_35_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_27_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_27_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_19_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_19_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_11_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_4_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_31_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_23_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_21_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_15_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_13_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_7_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_5_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_4_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_58_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_PORT_RX_DOUT.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_10_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_2_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_62_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_54_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_46_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_38_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_64_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_56_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_48_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_31_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_31_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_30_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_23_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_23_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_22_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_15_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_15_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_14_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_PORT_RX_PULL.VALUE=1 -DRIVER.CAN.VAR.CAN_3_MESSAGE_7_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_7_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_4_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_59_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_58_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_50_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_42_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_34_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_26_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_18_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_62_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_60_ID.VALUE=60 -DRIVER.CAN.VAR.CAN_3_MESSAGE_54_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_52_ID.VALUE=52 -DRIVER.CAN.VAR.CAN_3_MESSAGE_46_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_44_ID.VALUE=44 -DRIVER.CAN.VAR.CAN_3_MESSAGE_38_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_36_ID.VALUE=36 -DRIVER.CAN.VAR.CAN_3_MESSAGE_28_ID.VALUE=28 -DRIVER.CAN.VAR.CAN_1_MESSAGE_63_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_55_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_47_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_39_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_60_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_52_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_44_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_36_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_28_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_NOMINAL_AUTO_BUS_ON_TIME.VALUE=0.000 -DRIVER.CAN.VAR.CAN_1_SYNC.VALUE=1 -DRIVER.CAN.VAR.CAN_4_MESSAGE_4_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_11_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_SHIFT.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_1_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_PORT_RX_PULDIS.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_60_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_52_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_44_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_36_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_28_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_64_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_62_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_56_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_54_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_48_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_46_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_38_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_51_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_43_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_40_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_35_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_32_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_27_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_24_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_19_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_16_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_7_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_1_ID.VALUE=1 -DRIVER.CAN.VAR.CAN_4_MESSAGE_40_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_32_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_24_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_16_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_8_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_BRP_FREQ.VALUE=7.500 -DRIVER.CAN.VAR.CAN_2_BRPE_FREQ.VALUE=7.500 -DRIVER.CAN.VAR.CAN_1_MESSAGE_10_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_64_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_64_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_56_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_56_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_48_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_48_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_1_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_63_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_55_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_47_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_39_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_30_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_22_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_14_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_60_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_52_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_44_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_36_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_28_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_6_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_11_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_6_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_PROP_SEG.VALUE=6 -DRIVER.CAN.VAR.CAN_1_MESSAGE_41_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_33_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_25_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_17_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_40_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_32_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_24_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_16_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_61_ID.VALUE=61 -DRIVER.CAN.VAR.CAN_3_MESSAGE_53_ID.VALUE=53 -DRIVER.CAN.VAR.CAN_3_MESSAGE_45_ID.VALUE=45 -DRIVER.CAN.VAR.CAN_3_MESSAGE_37_ID.VALUE=37 -DRIVER.CAN.VAR.CAN_3_MESSAGE_31_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_29_ID.VALUE=29 -DRIVER.CAN.VAR.CAN_3_MESSAGE_23_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_15_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_4_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_10_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_7_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_SJW.VALUE=4 -DRIVER.CAN.VAR.CAN_2_MESSAGE_1_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_11_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_60_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_60_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_52_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_52_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_44_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_44_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_36_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_36_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_28_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_28_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_1_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_40_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_32_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_24_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_16_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_62_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_54_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_50_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_46_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_42_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_38_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_34_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_26_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_18_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_8_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_57_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_49_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_10_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_11_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_1_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_10_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_3_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_2_ID.VALUE=2 -DRIVER.CAN.VAR.CAN_2_MESSAGE_57_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_49_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_40_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_40_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_32_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_32_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_24_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_24_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_16_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_16_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_1_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_8_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_8_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_10_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_10_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_SAMPLE_POINT.VALUE=73.333 -DRIVER.CAN.VAR.CAN_2_MESSAGE_51_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_43_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_35_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_27_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_21_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_19_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_13_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_8_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_1_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_59_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_62_ID.VALUE=62 -DRIVER.CAN.VAR.CAN_3_MESSAGE_54_ID.VALUE=54 -DRIVER.CAN.VAR.CAN_3_MESSAGE_46_ID.VALUE=46 -DRIVER.CAN.VAR.CAN_3_MESSAGE_38_ID.VALUE=38 -DRIVER.CAN.VAR.CAN_1_MESSAGE_64_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_59_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_56_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_48_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_61_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_53_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_45_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_37_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_29_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_PORT_TX_FUN.VALUE=1 -DRIVER.CAN.VAR.CAN_2_MESSAGE_1_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_1_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_30_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_22_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_14_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_8_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_31_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_23_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_21_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_15_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_13_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_6_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_57_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_49_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_7_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_5_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_59_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_60_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_52_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_44_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_36_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_28_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_3_ID.VALUE=3 -DRIVER.CAN.VAR.CAN_1_PORT_RX_DOUT.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_41_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_33_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_25_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_17_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_9_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_11_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_57_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_57_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_49_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_49_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_58_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_4_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_PHASE_SEG.VALUE=4 -DRIVER.CAN.VAR.CAN_3_MESSAGE_61_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_53_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_45_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_37_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_29_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_60_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_52_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_44_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_36_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_28_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_1_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_63_ID.VALUE=63 -DRIVER.CAN.VAR.CAN_3_MESSAGE_55_ID.VALUE=55 -DRIVER.CAN.VAR.CAN_3_MESSAGE_47_ID.VALUE=47 -DRIVER.CAN.VAR.CAN_3_MESSAGE_40_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_39_ID.VALUE=39 -DRIVER.CAN.VAR.CAN_3_MESSAGE_32_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_24_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_16_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_61_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_53_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_45_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_37_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_29_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_8_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_SJW.VALUE=4 -DRIVER.CAN.VAR.CAN_3_RAMBASE.VALUE=0xFF1A0000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_2_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_61_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_61_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_53_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_53_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_45_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_45_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_37_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_37_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_29_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_29_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_PORT_RX_DIN.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_64_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_56_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_48_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_41_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_33_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_25_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_17_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_3_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_9_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_59_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_50_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_42_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_34_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_26_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_18_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_11_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_61_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_53_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_45_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_37_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_29_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_20_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_12_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_PORT_TX_PDR.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_9_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_4_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_4_ID.VALUE=4 -DRIVER.CAN.VAR.CAN_1_MESSAGE_31_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_23_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_15_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_58_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_41_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_41_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_33_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_33_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_25_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_25_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_17_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_17_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_9_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_9_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_PORT_RX_DIR.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_57_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_49_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_11_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_11_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_51_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_43_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_35_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_27_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_19_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_20_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_12_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_7_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_2_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_21_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_13_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_6_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_PORT_TX_DOUT.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_64_ID.VALUE=64 -DRIVER.CAN.VAR.CAN_3_MESSAGE_56_ID.VALUE=56 -DRIVER.CAN.VAR.CAN_3_MESSAGE_48_ID.VALUE=48 -DRIVER.CAN.VAR.CAN_3_MESSAGE_31_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_23_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_15_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_57_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_49_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_3_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_NOMINAL_AUTO_BUS_ON_TIME.VALUE=0.000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_62_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_54_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_46_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_38_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_SYNC.VALUE=1 -DRIVER.CAN.VAR.CAN_2_PORT_TX_PULL.VALUE=2 -DRIVER.CAN.VAR.CAN_2_MESSAGE_2_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_2_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_1_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_64_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_63_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_58_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_56_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_55_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_48_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_47_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_39_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_61_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_53_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_45_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_37_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_29_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_10_ID.VALUE=10 -DRIVER.CAN.VAR.CAN_2_MESSAGE_5_ID.VALUE=5 -DRIVER.CAN.VAR.CAN_4_MESSAGE_50_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_42_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_34_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_26_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_18_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_20_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_12_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_58_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_58_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_57_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_49_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_64_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_56_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_48_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_20_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_12_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_63_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_62_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_55_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_54_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_47_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_46_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_39_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_38_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_4_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_50_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_42_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_34_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_26_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_18_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_57_ID.VALUE=57 -DRIVER.CAN.VAR.CAN_3_MESSAGE_49_ID.VALUE=49 -DRIVER.CAN.VAR.CAN_3_MESSAGE_41_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_33_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_25_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_17_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_9_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_3_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_62_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_62_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_54_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_54_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_46_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_46_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_38_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_38_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_62_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_54_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_46_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_38_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_50_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_42_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_41_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_34_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_33_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_26_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_25_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_18_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_17_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_NOMINAL_BIT_RATE.VALUE=500.000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_51_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_43_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_35_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_27_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_19_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_9_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_41_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_33_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_25_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_17_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_20_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_12_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_11_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_4_MESSAGE_21_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_13_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_5_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_58_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_11_ID.VALUE=11 -DRIVER.CAN.VAR.CAN_2_MESSAGE_6_ID.VALUE=6 -DRIVER.CAN.VAR.CAN_3_PROPAGATION_DELAY.VALUE=700 -DRIVER.CAN.VAR.CAN_2_MESSAGE_59_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_50_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_50_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_42_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_42_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_34_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_34_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_26_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_26_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_18_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_18_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_57_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_49_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_AUTO_RETRANSMISSION.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_20_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_20_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_12_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_12_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_30_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_22_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_14_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_9_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_3_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_58_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_58_ID.VALUE=58 -DRIVER.CAN.VAR.CAN_1_MESSAGE_60_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_58_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_52_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_44_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_36_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_28_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_63_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_55_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_47_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_39_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_2_MESSAGE_62_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_54_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_46_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_38_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_3_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_3_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_31_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_23_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_4_MESSAGE_15_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_7_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_2_MESSAGE_62_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_59_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_54_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_46_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_38_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_10_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_5_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_PORT_TX_PSL.VALUE=1 -DRIVER.CAN.VAR.CAN_3_MESSAGE_60_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_52_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_44_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_36_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_28_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_62_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_54_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_46_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_38_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_20_ID.VALUE=20 -DRIVER.CAN.VAR.CAN_2_MESSAGE_12_ID.VALUE=12 -DRIVER.CAN.VAR.CAN_2_MESSAGE_7_ID.VALUE=7 -DRIVER.CAN.VAR.CAN_1_MESSAGE_8_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_51_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_43_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_35_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_27_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_19_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_21_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_MESSAGE_13_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_4_MESSAGE_57_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_49_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_59_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_59_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_51_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_43_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_35_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_27_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_19_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_5_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_63_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_61_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_55_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_53_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_47_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_45_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_40_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_39_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_37_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_32_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_29_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_24_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_16_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_10_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_MESSAGE_8_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_2_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_3_MESSAGE_59_ID.VALUE=59 -DRIVER.CAN.VAR.CAN_3_MESSAGE_50_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_42_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_34_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_26_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_18_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_AUTO_BUS_ON_TR.VALUE=0 -DRIVER.CAN.VAR.CAN_2_MESSAGE_30_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_22_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_14_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_5_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_4_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_3_MESSAGE_63_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_63_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_62_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_55_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_55_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_54_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_47_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_47_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_46_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_39_EOB.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_39_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_38_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_PORT_RX_FUN.VALUE=1 -DRIVER.CAN.VAR.CAN_4_MESSAGE_51_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_43_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_35_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_27_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_19_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_10_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_3_MESSAGE_2_BOOL_ENA.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MESSAGE_58_INT_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_21_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_MESSAGE_13_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_30_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_30_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_22_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_22_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_14_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_4_MESSAGE_14_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_6_RTR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_3_MESSAGE_2_INT_LEVEL.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_2_MESSAGE_21_ID.VALUE=21 -DRIVER.CAN.VAR.CAN_2_MESSAGE_13_ID.VALUE=13 -DRIVER.CAN.VAR.CAN_2_MESSAGE_8_ID.VALUE=8 -DRIVER.ADC.VAR.ADC2_GROUP1_DISCHARGE_PRESCALER.VALUE=0 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN21_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN13_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_ACTUAL_DISCHARGE_TIME.VALUE=0.00 -DRIVER.ADC.VAR.ADC2_GROUP1_RESOLUTION.VALUE=12_BIT -DRIVER.ADC.VAR.ADC2_GROUP0_PIN3_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_PARITY_ENABLE.VALUE=0x00000005 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN25_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN17_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_ACTUAL_DISCHARGE_TIME.VALUE=0.00 -DRIVER.ADC.VAR.ADC1_GROUP2_RESOLUTION.VALUE=12_BIT -DRIVER.ADC.VAR.ADC2_GROUP2_PIN7_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN10_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_TRIGGER_EDGE_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_RAM_PARITY_ENA.VALUE=0 -DRIVER.ADC.VAR.ADC2_GROUP1_EXTENDED_SAMPLE_TIME.VALUE=300.00 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN0_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_RAM_PARITY_ENA.VALUE=0 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN3_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_CHANNEL_TOTAL_TIME.VALUE=0.000000 -DRIVER.ADC.VAR.ADC1_GROUP1_FIFO_SIZE.VALUE=16 -DRIVER.ADC.VAR.ADC1_GROUP2_DISCHARGE_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_SAMPLE_PRESCALER.VALUE=1 -DRIVER.ADC.VAR.ADC1_GROUP1_LENGTH.VALUE=16 -DRIVER.ADC.VAR.ADC2_GROUP1_ID_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN18_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_CONVERSION_TIME.VALUE=1.300 -DRIVER.ADC.VAR.ADC2_PORT_BIT0_DIR.VALUE=0 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN4_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN11_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN7_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_ALT_TRIG.VALUE=0 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN23_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN15_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN29_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN0_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_CONVERSION_TIME.VALUE=1.300 -DRIVER.ADC.VAR.ADC2_GROUP2_LENGTH.VALUE=32 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN19_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_DISCHARGE_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN4_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN30_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN22_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN14_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_ACTUAL_SAMPLE_TIME.VALUE=320.01 -DRIVER.ADC.VAR.ADC2_GROUP2_SAMPLE_PRESCALER.VALUE=1 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN20_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN12_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN26_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN18_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN8_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN11_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_BND.VALUE=2 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN1_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN31_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN23_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN15_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_DISCHARGE_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_SAMPLE_PRESCALER.VALUE=1 -DRIVER.ADC.VAR.ADC2_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN5_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN8_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_ID_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_EXTENDED_SAMPLE_TIME.VALUE=300.00 -DRIVER.ADC.VAR.ADC1_GROUP0_CONVERSION_TIME.VALUE=1.300 -DRIVER.ADC.VAR.ADC2_GROUP0_RESOLUTION.VALUE=12_BIT -DRIVER.ADC.VAR.ADC1_GROUP1_PIN1_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_RESOLUTION.VALUE=12_BIT -DRIVER.ADC.VAR.ADC2_GROUP1_TRIGGER_EDGE_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_CONVERSION_TIME.VALUE=1.300 -DRIVER.ADC.VAR.ADC2_BND.VALUE=2 -DRIVER.ADC.VAR.ADC2_GROUP1_DISCHARGE_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_PORT_BIT0_PDR.VALUE=0 -DRIVER.ADC.VAR.ADC2_ACTUAL_CYCLE_TIME.VALUE=106.67 -DRIVER.ADC.VAR.ADC2_GROUP1_SAMPLE_PRESCALER.VALUE=1 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN9_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN24_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN16_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_SAMPLE_TIME.VALUE=300.00 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN2_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_TRIGGER_MODE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN5_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_DISCHARGE_PRESCALER.VALUE=0 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN21_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN13_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN9_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN27_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN19_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_DISCHARGE_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_RAM_PARITY_ENA.VALUE=0x00000005 -DRIVER.ADC.VAR.ADC2_GROUP1_SCAN_TIME.VALUE=0.000 -DRIVER.ADC.VAR.ADC2_GROUP0_CHANNEL_TOTAL_TIME.VALUE=0.000000 -DRIVER.ADC.VAR.ADC1_GROUP2_SAMPLE_TIME.VALUE=300.00 -DRIVER.ADC.VAR.ADC2_GROUP0_LENGTH.VALUE=16 -DRIVER.ADC.VAR.ADC1_GROUP0_SAMPLE_PRESCALER.VALUE=1 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN17_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN2_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN20_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN12_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN10_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN24_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN16_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_ACTUAL_SAMPLE_TIME.VALUE=320.01 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN6_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN28_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_TRIGGER_MODE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_PORT_BIT0_PSL.VALUE=1 -DRIVER.ADC.VAR.ADC1_GROUP2_CHANNEL_TOTAL_TIME.VALUE=0.000000 -DRIVER.ADC.VAR.ADC1_GROUP0_DISCHARGE_TIME.VALUE=0.00 -DRIVER.ADC.VAR.ADC2_LENGTH.VALUE=64 -DRIVER.ADC.VAR.ADC2_GROUP0_DISCHARGE_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN21_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN13_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_PINS.VALUE=0 -DRIVER.ADC.VAR.ADC2_GROUP0_DISCHARGE_TIME.VALUE=0.00 -DRIVER.ADC.VAR.ADC2_GROUP0_SAMPLE_PRESCALER.VALUE=1 -DRIVER.ADC.VAR.ADC1_GROUP0_DISCHARGE_PRESCALER.VALUE=0 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN3_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN6_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_RAMBASE.VALUE=0xFF3A0000 -DRIVER.ADC.VAR.ADC2_GROUP0_BND.VALUE=8 -DRIVER.ADC.VAR.ADC1_PORT_BIT0_DOUT.VALUE=0 -DRIVER.ADC.VAR.ADC1_GROUP1_SCAN_TIME.VALUE=0.000 -DRIVER.ADC.VAR.ADC1_GROUP0_RESOLUTION.VALUE=12_BIT -DRIVER.ADC.VAR.ADC2_GROUP2_FIFO_SIZE.VALUE=16 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN7_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN22_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN14_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_HW_TRIGGER_SOURCE.VALUE=EVENT -DRIVER.ADC.VAR.ADC2_GROUP1_BND.VALUE=8 -DRIVER.ADC.VAR.ADC2_GROUP0_HW_TRIGGER_SOURCE_ALT.VALUE=EVENT -DRIVER.ADC.VAR.ADC2_GROUP1_PIN18_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN0_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN3_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_ALT_TRIG_COMP.VALUE=1 -DRIVER.ADC.VAR.ADC2_GROUP1_HW_TRIGGER_SOURCE_ALT.VALUE=EVENT -DRIVER.ADC.VAR.ADC2_GROUP1_PIN11_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN7_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN25_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN17_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_PARITY_ENABLE.VALUE=0x00000005 -DRIVER.ADC.VAR.ADC1_ACTUAL_CYCLE_TIME.VALUE=106.67 -DRIVER.ADC.VAR.ADC2_GROUP2_HW_TRIGGER_SOURCE_ALT.VALUE=EVENT -DRIVER.ADC.VAR.ADC2_GROUP2_PIN23_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN15_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN0_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_CONTINUOUS_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN29_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN10_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_PINS.VALUE=0 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN30_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN22_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN14_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN4_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN26_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN18_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN8_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_TRIGGER_EDGE_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN11_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN1_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_FIFO_SIZE.VALUE=16 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN4_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_RAMBASE.VALUE=0xFF3E0000 -DRIVER.ADC.VAR.ADC1_BASE.VALUE=0xFFF7C000 -DRIVER.ADC.VAR.ADC1_PORT_BIT0_DIR.VALUE=0 -DRIVER.ADC.VAR.ADC2_RAM_PARITY_ENA.VALUE=0x00000005 -DRIVER.ADC.VAR.ADC2_GROUP2_HW_TRIGGER_SOURCE.VALUE=EVENT -DRIVER.ADC.VAR.ADC2_GROUP2_ID_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_ACTUAL_SAMPLE_TIME.VALUE=320.01 -DRIVER.ADC.VAR.ADC1_GROUP2_LENGTH.VALUE=32 -DRIVER.ADC.VAR.ADC1_GROUP0_BND.VALUE=8 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN19_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_CHANNEL_TOTAL_TIME.VALUE=0.000000 -DRIVER.ADC.VAR.ADC2_GROUP2_CONTINUOUS_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN5_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN20_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN12_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN8_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_TRIGGER_EDGE_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_PINS.VALUE=0 -DRIVER.ADC.VAR.ADC2_GROUP0_EXTENDED_SAMPLE_TIME.VALUE=300.00 -DRIVER.ADC.VAR.ADC1_GROUP1_DISCHARGE_TIME.VALUE=0.00 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN24_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN16_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN1_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_EXTENDED_SAMPLE_TIME.VALUE=300.00 -DRIVER.ADC.VAR.ADC2_GROUP1_DISCHARGE_TIME.VALUE=0.00 -DRIVER.ADC.VAR.ADC2_GROUP2_TRIGGER_MODE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_FIFO_SIZE.VALUE=16 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN5_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN31_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN23_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN15_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_BND.VALUE=8 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN21_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN13_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN27_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN19_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_PORT_BIT0_DOUT.VALUE=0 -DRIVER.ADC.VAR.ADC2_CYCLE_TIME.VALUE=100.00 -DRIVER.ADC.VAR.ADC1_GROUP1_HW_TRIGGER_SOURCE.VALUE=EVENT -DRIVER.ADC.VAR.ADC1_GROUP1_DISCHARGE_PRESCALER.VALUE=0 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN9_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_PRESCALE.VALUE=7 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN20_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN12_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_RAM_PARITY_ENA.VALUE=0 -DRIVER.ADC.VAR.ADC2_GROUP0_SAMPLE_TIME.VALUE=300.00 -DRIVER.ADC.VAR.ADC2_BASE.VALUE=0xFFF7C200 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN2_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_RAM_PARITY_ENA.VALUE=0 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN24_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN16_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_ID_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN6_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN9_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_CONTINUOUS_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_PORT_BIT0_PDR.VALUE=0 -DRIVER.ADC.VAR.ADC1_GROUP1_SAMPLE_TIME.VALUE=300.00 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN2_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_CONVERSION_TIME.VALUE=1.300 -DRIVER.ADC.VAR.ADC1_GROUP0_FIFO_SIZE.VALUE=16 -DRIVER.ADC.VAR.ADC1_PORT_BIT0_PULL.VALUE=2 -DRIVER.ADC.VAR.ADC1_GROUP0_LENGTH.VALUE=16 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN17_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_CONVERSION_TIME.VALUE=1.300 -DRIVER.ADC.VAR.ADC1_GROUP0_PINS.VALUE=0 -DRIVER.ADC.VAR.ADC1_GROUP0_ACTUAL_SAMPLE_TIME.VALUE=320.01 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN3_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN10_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_ID_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN6_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_SCAN_TIME.VALUE=0.000 -DRIVER.ADC.VAR.ADC2_GROUP1_HW_TRIGGER_SOURCE.VALUE=EVENT -DRIVER.ADC.VAR.ADC1_GROUP1_CHANNEL_TOTAL_TIME.VALUE=0.000000 -DRIVER.ADC.VAR.ADC1_GROUP0_EXTENDED_SAMPLE_TIME.VALUE=300.00 -DRIVER.ADC.VAR.ADC1_GROUP0_HW_TRIGGER_SOURCE_ALT.VALUE=EVENT -DRIVER.ADC.VAR.ADC2_GROUP1_PIN22_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN14_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN28_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_PORT_BIT0_PSL.VALUE=1 -DRIVER.ADC.VAR.ADC1_GROUP2_EXTENDED_SAMPLE_TIME.VALUE=300.00 -DRIVER.ADC.VAR.ADC2_GROUP1_LENGTH.VALUE=16 -DRIVER.ADC.VAR.ADC1_GROUP1_HW_TRIGGER_SOURCE_ALT.VALUE=EVENT -DRIVER.ADC.VAR.ADC2_GROUP2_PIN18_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN3_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN21_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN13_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_ACTUAL_DISCHARGE_TIME.VALUE=0.00 -DRIVER.ADC.VAR.ADC1_GROUP2_HW_TRIGGER_SOURCE_ALT.VALUE=EVENT -DRIVER.ADC.VAR.ADC2_GROUP2_PIN11_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_CONTINUOUS_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN25_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN17_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_ACTUAL_DISCHARGE_TIME.VALUE=0.00 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN7_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN29_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN10_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_ACTUAL_DISCHARGE_TIME.VALUE=0.00 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN0_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN30_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN22_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN14_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_CYCLE_TIME.VALUE=100.00 -DRIVER.ADC.VAR.ADC2_GROUP0_DISCHARGE_PRESCALER.VALUE=0 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN4_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN7_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_DISCHARGE_TIME.VALUE=0.00 -DRIVER.ADC.VAR.ADC1_GROUP0_HW_TRIGGER_SOURCE.VALUE=EVENT -DRIVER.ADC.VAR.ADC1_GROUP1_PIN0_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_ID_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_DISCHARGE_TIME.VALUE=0.00 -DRIVER.ADC.VAR.ADC1_GROUP2_SCAN_TIME.VALUE=0.000 -DRIVER.ADC.VAR.ADC1_GROUP1_PINS.VALUE=0 -DRIVER.ADC.VAR.ADC1_GROUP1_TRIGGER_EDGE_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_ALT_TRIG_COMP.VALUE=1 -DRIVER.ADC.VAR.ADC1_GROUP0_CONTINUOUS_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN8_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN23_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN15_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_ALT_TRIG.VALUE=0 -DRIVER.ADC.VAR.ADC1_GROUP1_RAM_PARITY_ENA.VALUE=0 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN19_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN1_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_RAM_PARITY_ENA.VALUE=0 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN4_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_DISCHARGE_PRESCALER.VALUE=0 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN20_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN12_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN8_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN26_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN18_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_RESOLUTION.VALUE=12_BIT -DRIVER.ADC.VAR.ADC2_GROUP2_PIN24_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN16_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN1_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN11_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_SCAN_TIME.VALUE=0.000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN31_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN23_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN15_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_HW_TRIGGER_SOURCE.VALUE=EVENT -DRIVER.ADC.VAR.ADC2_GROUP0_PIN5_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN27_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN19_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_PRESCALE.VALUE=7 -DRIVER.ADC.VAR.ADC2_GROUP0_ACTUAL_SAMPLE_TIME.VALUE=320.01 -DRIVER.ADC.VAR.ADC1_GROUP2_PINS.VALUE=0 -DRIVER.ADC.VAR.ADC2_PORT_BIT0_PULL.VALUE=2 -DRIVER.ADC.VAR.ADC1_LENGTH.VALUE=64 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN9_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN20_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN12_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_SAMPLE_TIME.VALUE=300.00 -DRIVER.ADC.VAR.ADC2_GROUP1_CHANNEL_TOTAL_TIME.VALUE=0.000000 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN2_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_CONTINUOUS_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN5_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_ACTUAL_SAMPLE_TIME.VALUE=320.01 -DRIVER.ADC.VAR.ADC1_GROUP0_SCAN_TIME.VALUE=0.000 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN6_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN21_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_PIN13_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP0_TRIGGER_EDGE_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN9_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_SAMPLE_TIME.VALUE=300.00 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN17_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_FIFO_SIZE.VALUE=16 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN2_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP1_PIN10_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP2_PIN6_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN24_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_PIN16_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN22_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC2_GROUP2_PIN14_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN28_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_TRIGGER_MODE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP0_ACTUAL_DISCHARGE_TIME.VALUE=0.00 -DRIVER.LIN.VAR.LIN2_PORT_BIT1_PDR.VALUE=0 -DRIVER.LIN.VAR.LIN1_TOAWUSINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_TOA3WUSINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PORT_BIT2_DOUT.VALUE=0 -DRIVER.LIN.VAR.LIN2_PORT_BIT2_FUN.VALUE=4 -DRIVER.LIN.VAR.LIN1_HGENCTRL.VALUE=1 -DRIVER.LIN.VAR.LIN2_PORT_BIT0_PSL.VALUE=1 -DRIVER.LIN.VAR.LIN2_PORT_BIT0_DOUT.VALUE=0 -DRIVER.LIN.VAR.LIN1_PBEINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.LIN.VAR.LIN2_PORT_BIT2_PDR.VALUE=0 -DRIVER.LIN.VAR.LIN1_BASE_PORT.VALUE=0xFFF7E440 -DRIVER.LIN.VAR.LIN2_PARITYENA.VALUE=0 -DRIVER.LIN.VAR.LIN2_WAKEINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_FEINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_CEINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_PORT_BIT1_PSL.VALUE=2 -DRIVER.LIN.VAR.LIN2_OEINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_TXINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PORT_BIT0_PULL.VALUE=2 -DRIVER.LIN.VAR.LIN1_MAXPRESCALE.VALUE=3370 -DRIVER.LIN.VAR.LIN2_IDINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.LIN.VAR.LIN1_RX_MASK.VALUE=0xFF -DRIVER.LIN.VAR.LIN2_PORT_BIT2_PSL.VALUE=4 -DRIVER.LIN.VAR.LIN2_PORT_BIT1_DOUT.VALUE=0 -DRIVER.LIN.VAR.LIN1_BREAKINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_NREINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_TOINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_TOAWUSINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_TOA3WUSINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_BAUDRATE.VALUE=20.000 -DRIVER.LIN.VAR.LIN1_OEINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PORT_BIT0_DIR.VALUE=0 -DRIVER.LIN.VAR.LIN1_PORT_BIT1_PULL.VALUE=2 -DRIVER.LIN.VAR.LIN2_RXINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_WAKEINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_PORT_BIT2_DOUT.VALUE=0 -DRIVER.LIN.VAR.LIN2_WAKEINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_FEINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PORT_BIT1_DIR.VALUE=0 -DRIVER.LIN.VAR.LIN1_CEINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_PBEINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_TXINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PORT_BIT0_FUN.VALUE=0 -DRIVER.LIN.VAR.LIN2_IDINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PORT_BIT2_DIR.VALUE=0 -DRIVER.LIN.VAR.LIN2_SBREAK.VALUE=13 -DRIVER.LIN.VAR.LIN2_TOAWUSINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PORT_BIT2_PULL.VALUE=2 -DRIVER.LIN.VAR.LIN1_BREAKINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_PEINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PORT_BIT0_PDR.VALUE=0 -DRIVER.LIN.VAR.LIN1_BASE.VALUE=0xFFF7E400 -DRIVER.LIN.VAR.LIN2_PORT_BIT0_PULL.VALUE=2 -DRIVER.LIN.VAR.LIN1_LENGTH.VALUE=8 -DRIVER.LIN.VAR.LIN2_TOINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PORT_BIT1_FUN.VALUE=2 -DRIVER.LIN.VAR.LIN2_BEINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_ACTUALBAUDRATE.VALUE=20.032 -DRIVER.LIN.VAR.LIN1_FEINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_OEINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_NREINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_TXINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PORT_BIT1_PDR.VALUE=0 -DRIVER.LIN.VAR.LIN1_MSTMOD.VALUE=1 -DRIVER.LIN.VAR.LIN2_ISFEINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PORT_BIT2_FUN.VALUE=4 -DRIVER.LIN.VAR.LIN2_TX_MASK.VALUE=0xFF -DRIVER.LIN.VAR.LIN1_PORT_BIT0_PSL.VALUE=1 -DRIVER.LIN.VAR.LIN2_RXINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_WAKEINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_IDINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_PRESCALE.VALUE=233 -DRIVER.LIN.VAR.LIN1_PORT_BIT2_PDR.VALUE=0 -DRIVER.LIN.VAR.LIN2_BASE.VALUE=0xFFF7E600 -DRIVER.LIN.VAR.LIN2_PORT_BIT1_PULL.VALUE=2 -DRIVER.LIN.VAR.LIN2_PBEINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.LIN.VAR.LIN1_TOINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PORT_BIT1_PSL.VALUE=2 -DRIVER.LIN.VAR.LIN2_BASE_PORT.VALUE=0xFFF7E640 -DRIVER.LIN.VAR.LIN1_BAUDRATE.VALUE=20.000 -DRIVER.LIN.VAR.LIN2_TOAWUSINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_PEINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PORT_BIT2_PSL.VALUE=4 -DRIVER.LIN.VAR.LIN2_MAXBAUDRATE.VALUE=22.255 -DRIVER.LIN.VAR.LIN1_RXINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_BEINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_FEINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_PORT_BIT2_PULL.VALUE=2 -DRIVER.LIN.VAR.LIN1_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.LIN.VAR.LIN1_TX_MASK.VALUE=0xFF -DRIVER.LIN.VAR.LIN2_NREINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_TXINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_ISFEINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_ISFEINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_ACTUALBAUDRATE.VALUE=20.032 -DRIVER.LIN.VAR.LIN1_IDINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_TOA3WUSINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PEINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_TOINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PARITYENA.VALUE=0 -DRIVER.LIN.VAR.LIN1_BEINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_RXINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_HGENCTRL.VALUE=1 -DRIVER.LIN.VAR.LIN1_PRESCALE.VALUE=233 -DRIVER.LIN.VAR.LIN1_ISFEINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_SDEL.VALUE=1 -DRIVER.LIN.VAR.LIN2_LENGTH.VALUE=8 -DRIVER.LIN.VAR.LIN2_MAXPRESCALE.VALUE=3370 -DRIVER.LIN.VAR.LIN2_CEINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_BREAKINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PORT_BIT0_DOUT.VALUE=0 -DRIVER.LIN.VAR.LIN2_TOA3WUSINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PEINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_MSTMOD.VALUE=1 -DRIVER.LIN.VAR.LIN2_PORT_BIT0_DIR.VALUE=0 -DRIVER.LIN.VAR.LIN1_BEINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PBEINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_SDEL.VALUE=1 -DRIVER.LIN.VAR.LIN2_PORT_BIT1_DIR.VALUE=0 -DRIVER.LIN.VAR.LIN1_MAXBAUDRATE.VALUE=22.255 -DRIVER.LIN.VAR.LIN2_PORT_BIT2_PULDIS.VALUE=0 -DRIVER.LIN.VAR.LIN1_SBREAK.VALUE=13 -DRIVER.LIN.VAR.LIN2_OEINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_PORT_BIT1_DOUT.VALUE=0 -DRIVER.LIN.VAR.LIN2_PORT_BIT0_FUN.VALUE=0 -DRIVER.LIN.VAR.LIN2_PORT_BIT2_DIR.VALUE=0 -DRIVER.LIN.VAR.LIN2_PORT_BIT0_PDR.VALUE=0 -DRIVER.LIN.VAR.LIN2_PORT_BIT1_FUN.VALUE=2 -DRIVER.LIN.VAR.LIN2_CEINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN1_NREINTENA.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_BREAKINTLVL.VALUE=0x00000000 -DRIVER.LIN.VAR.LIN2_RX_MASK.VALUE=0xFF -DRIVER.LIN.VAR.LIN1_PORT_BIT2_PULDIS.VALUE=0 -DRIVER.HET.VAR.HET2_EDGE5_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM5_PERIOD_PRESCALER.VALUE=149888 -DRIVER.HET.VAR.HET2_PWM0_PERIOD_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT0_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_INT_X0.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE4_BOTH.VALUE=0 -DRIVER.HET.VAR.HET1_BIT1_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT6_HRSHARE.VALUE=0x00000008 -DRIVER.HET.VAR.HET2_INT_X1.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM2_DUTY.VALUE=50 -DRIVER.HET.VAR.HET1_BIT29_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT0_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_IGNORE_SUSPEND_ENABLE.VALUE=0x00020000 -DRIVER.HET.VAR.HET2_PWM3_PERIOD.VALUE=1000.000 -DRIVER.HET.VAR.HET2_PWM1_PIN_SELECT.VALUE=10 -DRIVER.HET.VAR.HET2_BIT20_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT12_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT3_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_INT_X2.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X3.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM2_DUTYTIME.VALUE=500.053 -DRIVER.HET.VAR.HET2_INT_X4.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM6_ACTION.VALUE=3 -DRIVER.HET.VAR.HET1_PWM0_DUTY_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT4_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_PWM3_ENA.VALUE=0 -DRIVER.HET.VAR.HET2_BIT4_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X5.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_IGNORE_SUSPEND_ENABLE.VALUE=0x00020000 -DRIVER.HET.VAR.HET1_BIT30_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT26_HRSHARE.VALUE=0x00002000 -DRIVER.HET.VAR.HET1_BIT22_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT18_HRSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT14_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM4_ACTUALPERIOD.VALUE=1000.106 -DRIVER.HET.VAR.HET2_BIT3_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X6.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE0_PIN_SELECT.VALUE=9 -DRIVER.HET.VAR.HET1_BIT28_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT7_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_INT_X7.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT7_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X8.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM3_PERIOD_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT26_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT18_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT10_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X9.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT11_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT11_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_PWM4_PIN_SELECT.VALUE=16 -DRIVER.HET.VAR.HET2_PWM4_DUTYTIME.VALUE=500.053 -DRIVER.HET.VAR.HET1_RAM_BASE.VALUE=0xFF460000 -DRIVER.HET.VAR.HET2_EDGE6_BOTH.VALUE=0 -DRIVER.HET.VAR.HET2_PWM2_DUTY_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT31_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT23_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT15_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE2_EVENT.VALUE=1 -DRIVER.HET.VAR.HET2_BIT11_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PIN_ENABLE.VALUE=0 -DRIVER.HET.VAR.HET1_CAP3_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_BIT24_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT16_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT5_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT27_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT19_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE6_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT24_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_BIT16_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_BIT2_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM6_DUTY_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE3_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET2_EDGE5_PIN_SELECT.VALUE=21 -DRIVER.HET.VAR.HET2_BIT21_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT13_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM7_PERIOD.VALUE=1000.000 -DRIVER.HET.VAR.HET1_BIT27_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT19_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_CAP5_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET2_PWM4_ENA.VALUE=0 -DRIVER.HET.VAR.HET2_BIT8_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM1_POLARITY.VALUE=3 -DRIVER.HET.VAR.HET2_CAP2_PIN_SELECT.VALUE=4 -DRIVER.HET.VAR.HET2_BIT4_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM0_PERIOD.VALUE=1000.000 -DRIVER.HET.VAR.HET1_BIT29_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT0_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT8_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM4_PERIOD_PRESCALER.VALUE=149888 -DRIVER.HET.VAR.HET2_BIT1_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT20_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT12_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM7_ACTION.VALUE=3 -DRIVER.HET.VAR.HET2_PWM4_PERIOD_PRESCALER.VALUE=149888 -DRIVER.HET.VAR.HET2_BIT26_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_BIT24_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT18_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_BIT16_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM3_DUTY_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM3_POLARITY.VALUE=3 -DRIVER.HET.VAR.HET2_BIT28_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT0_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM1_ACTUALPERIOD.VALUE=1000.106 -DRIVER.HET.VAR.HET2_BIT29_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT6_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_CAP5_PIN_SELECT.VALUE=26 -DRIVER.HET.VAR.HET1_BIT28_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT10_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_EDGE7_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM0_ACTION.VALUE=3 -DRIVER.HET.VAR.HET2_BIT1_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_EDGE7_EVENT.VALUE=1 -DRIVER.HET.VAR.HET1_EDGE5_BOTH.VALUE=0 -DRIVER.HET.VAR.HET1_PWM5_DUTY_PRESCALER.VALUE=75136 -DRIVER.HET.VAR.HET1_BIT3_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE7_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_EDGE1_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM3_DUTY.VALUE=50 -DRIVER.HET.VAR.HET1_PWM1_PERIOD_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT30_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT22_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT14_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT4_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_EDGE4_EVENT.VALUE=1 -DRIVER.HET.VAR.HET1_BIT5_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_MASTER.VALUE=1 -DRIVER.HET.VAR.HET2_EDGE5_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM5_ENA.VALUE=0 -DRIVER.HET.VAR.HET2_PWM0_PERIOD_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT2_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT5_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM7_ACTUALPERIOD.VALUE=1000.106 -DRIVER.HET.VAR.HET1_BIT8_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT1_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_LR_ACTUALTIME.VALUE=853.333 -DRIVER.HET.VAR.HET1_PWM5_DUTYTIME.VALUE=500.053 -DRIVER.HET.VAR.HET2_PWM5_PERIOD_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM4_DUTY_PRESCALER.VALUE=75136 -DRIVER.HET.VAR.HET2_BIT9_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM3_DUTY_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM0_DUTY_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT5_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM6_PIN_SELECT.VALUE=18 -DRIVER.HET.VAR.HET2_BIT21_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT20_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT13_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT12_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_EDGE7_BOTH.VALUE=0 -DRIVER.HET.VAR.HET2_BIT25_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT17_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM6_DUTY_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM0_ENA.VALUE=0 -DRIVER.HET.VAR.HET1_BIT30_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT27_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT22_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT19_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT14_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM1_PERIOD.VALUE=1000.000 -DRIVER.HET.VAR.HET2_BIT7_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE5_PIN_SELECT.VALUE=21 -DRIVER.HET.VAR.HET1_BIT29_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT0_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET_DIS_BLACKBOX.VALUE=0 -DRIVER.HET.VAR.HET2_PWM7_DUTYTIME.VALUE=500.053 -DRIVER.HET.VAR.HET2_HR_ACTUALFREQUENCY.VALUE=75.000 -DRIVER.HET.VAR.HET2_PWM5_DUTY_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM4_ACTION.VALUE=3 -DRIVER.HET.VAR.HET1_BIT25_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_BIT17_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_BIT4_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE0_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_CAP6_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_BIT20_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT12_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT31_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT23_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT15_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X10.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT28_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_INT_X11.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X20.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X12.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM3_PERIOD_PRESCALER.VALUE=149888 -DRIVER.HET.VAR.HET2_PWM6_ENA.VALUE=0 -DRIVER.HET.VAR.HET2_BIT24_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT16_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X21.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X13.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_HR_PRESCALE.VALUE=0 -DRIVER.HET.VAR.HET1_EDGE6_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_PWM6_PERIOD_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_LR_PRESCALE.VALUE=6 -DRIVER.HET.VAR.HET2_PWM0_PIN_SELECT.VALUE=8 -DRIVER.HET.VAR.HET2_BIT6_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X30.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X22.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X14.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT2_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X31.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X23.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X15.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM3_PERIOD_PRESCALER.VALUE=149888 -DRIVER.HET.VAR.HET2_INT_X24.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X16.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BASE_PORT.VALUE=0xFFF7B84C -DRIVER.HET.VAR.HET2_PWM5_PERIOD_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT0_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X25.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X17.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM4_POLARITY.VALUE=3 -DRIVER.HET.VAR.HET1_PWM3_DUTY_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT10_HRSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT30_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT22_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT14_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X26.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X18.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X27.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X19.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT27_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_BIT26_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT19_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_BIT18_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X28.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM2_PERIOD_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM1_DUTY_PRESCALER.VALUE=75136 -DRIVER.HET.VAR.HET2_PWM0_DUTY.VALUE=50 -DRIVER.HET.VAR.HET2_BIT26_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT18_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_INT_X29.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM1_ENA.VALUE=0 -DRIVER.HET.VAR.HET2_CAP7_PIN_SELECT.VALUE=30 -DRIVER.HET.VAR.HET2_BIT8_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM5_PERIOD.VALUE=1000.000 -DRIVER.HET.VAR.HET1_PWM4_ACTUALPERIOD.VALUE=1000.106 -DRIVER.HET.VAR.HET1_PWM3_PIN_SELECT.VALUE=14 -DRIVER.HET.VAR.HET1_BIT11_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT1_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM0_DUTYTIME.VALUE=500.053 -DRIVER.HET.VAR.HET2_BIT2_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_EDGE6_BOTH.VALUE=0 -DRIVER.HET.VAR.HET1_BIT5_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM6_POLARITY.VALUE=3 -DRIVER.HET.VAR.HET2_BIT30_HRSHARE.VALUE=0x00008000 -DRIVER.HET.VAR.HET2_BIT22_HRSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT14_HRSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT6_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM4_DUTY.VALUE=50 -DRIVER.HET.VAR.HET1_BIT20_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT12_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PIN_ENABLE.VALUE=0 -DRIVER.HET.VAR.HET2_BIT24_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT16_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT5_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_PWM0_DUTY_PRESCALER.VALUE=75136 -DRIVER.HET.VAR.HET1_BIT6_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_PWM7_ENA.VALUE=0 -DRIVER.HET.VAR.HET1_PWM0_DUTY_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT8_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE4_PIN_SELECT.VALUE=20 -DRIVER.HET.VAR.HET2_BIT7_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT9_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT3_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM5_ACTION.VALUE=3 -DRIVER.HET.VAR.HET2_BIT10_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_CAP1_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_EDGE6_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_CAP1_PIN_SELECT.VALUE=2 -DRIVER.HET.VAR.HET2_BIT31_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT23_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT21_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT15_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT13_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT27_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT19_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE3_EVENT.VALUE=1 -DRIVER.HET.VAR.HET1_PWM6_DUTY_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM2_ENA.VALUE=0 -DRIVER.HET.VAR.HET2_BIT9_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT2_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE0_EVENT.VALUE=1 -DRIVER.HET.VAR.HET1_PWM2_PERIOD_PRESCALER.VALUE=149888 -DRIVER.HET.VAR.HET1_BIT26_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_BIT18_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_BIT6_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE3_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT24_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT16_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT25_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT17_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_CAP4_PIN_SELECT.VALUE=24 -DRIVER.HET.VAR.HET1_BIT29_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT0_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_PWM2_PERIOD_PRESCALER.VALUE=149888 -DRIVER.HET.VAR.HET2_EDGE3_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_BIT3_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT2_HRSHARE.VALUE=0x00000002 -DRIVER.HET.VAR.HET2_PWM6_PERIOD.VALUE=1000.000 -DRIVER.HET.VAR.HET2_BIT8_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM1_ACTUALPERIOD.VALUE=1000.106 -DRIVER.HET.VAR.HET1_BIT4_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT4_HRSHARE.VALUE=0x00000004 -DRIVER.HET.VAR.HET1_BIT25_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT17_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT24_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT16_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM1_DUTYTIME.VALUE=500.053 -DRIVER.HET.VAR.HET2_PWM4_PERIOD_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT28_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_BIT28_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM2_ACTION.VALUE=3 -DRIVER.HET.VAR.HET2_PWM1_DUTY.VALUE=50 -DRIVER.HET.VAR.HET2_BIT29_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM7_POLARITY.VALUE=3 -DRIVER.HET.VAR.HET1_PWM3_ENA.VALUE=0 -DRIVER.HET.VAR.HET1_BIT24_HRSHARE.VALUE=0x00001000 -DRIVER.HET.VAR.HET1_BIT16_HRSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT10_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM5_PIN_SELECT.VALUE=17 -DRIVER.HET.VAR.HET1_BIT20_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT12_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT3_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X10.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X11.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT3_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_EDGE7_BOTH.VALUE=0 -DRIVER.HET.VAR.HET1_EDGE0_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT7_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X20.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X12.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT30_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT22_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT14_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM5_DUTY.VALUE=50 -DRIVER.HET.VAR.HET1_BIT10_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X21.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X13.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM5_ACTUALPERIOD.VALUE=1000.106 -DRIVER.HET.VAR.HET2_BIT26_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT18_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT6_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_EDGE4_PIN_SELECT.VALUE=20 -DRIVER.HET.VAR.HET1_INT_X30.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X22.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X14.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM3_DUTYTIME.VALUE=500.053 -DRIVER.HET.VAR.HET1_INT_X31.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X23.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X15.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE5_EVENT.VALUE=1 -DRIVER.HET.VAR.HET2_PWM1_DUTY_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM7_PERIOD_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM6_DUTY_PRESCALER.VALUE=75136 -DRIVER.HET.VAR.HET1_BIT7_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_INT_X24.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X16.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT28_HRSHARE.VALUE=0x00004000 -DRIVER.HET.VAR.HET1_CAP2_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_PWM3_PERIOD_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT6_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X25.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X17.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT9_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT5_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X26.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X18.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X27.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X19.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT11_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_INT_X28.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM2_PERIOD_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_RAM_SIZE.VALUE=160 -DRIVER.HET.VAR.HET1_EDGE2_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_INT_X29.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT30_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT25_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT22_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT17_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT14_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_PWM3_PERIOD.VALUE=1000.000 -DRIVER.HET.VAR.HET2_PWM5_DUTY_PRESCALER.VALUE=75136 -DRIVER.HET.VAR.HET2_BIT29_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM1_PERIOD_PRESCALER.VALUE=149888 -DRIVER.HET.VAR.HET1_BIT10_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_CAP4_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET2_BIT8_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT4_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM4_ENA.VALUE=0 -DRIVER.HET.VAR.HET1_PWM0_POLARITY.VALUE=3 -DRIVER.HET.VAR.HET1_BIT4_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM1_PERIOD_PRESCALER.VALUE=149888 -DRIVER.HET.VAR.HET1_EDGE1_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM1_PERIOD_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT27_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_BIT19_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_BIT8_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT30_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT22_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT14_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_CAP6_PIN_SELECT.VALUE=28 -DRIVER.HET.VAR.HET2_BIT27_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT19_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM2_PIN_SELECT.VALUE=12 -DRIVER.HET.VAR.HET1_BIT1_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_PWM3_ACTION.VALUE=3 -DRIVER.HET.VAR.HET2_PWM2_POLARITY.VALUE=3 -DRIVER.HET.VAR.HET1_EDGE4_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT28_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT6_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE0_BOTH.VALUE=0 -DRIVER.HET.VAR.HET2_EDGE6_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET2_PWM5_DUTY_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT8_HRSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT4_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE3_PIN_SELECT.VALUE=15 -DRIVER.HET.VAR.HET2_PWM2_ACTUALPERIOD.VALUE=1000.106 -DRIVER.HET.VAR.HET2_BIT26_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT18_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT29_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_BIT11_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT10_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_EDGE1_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM7_PERIOD_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM2_DUTY.VALUE=50 -DRIVER.HET.VAR.HET1_PWM5_ENA.VALUE=0 -DRIVER.HET.VAR.HET1_BIT8_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_CAP0_PIN_SELECT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT21_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT13_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT5_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM4_DUTYTIME.VALUE=500.053 -DRIVER.HET.VAR.HET2_BIT4_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_EDGE2_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM2_DUTY_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM2_DUTY_PRESCALER.VALUE=75136 -DRIVER.HET.VAR.HET1_BIT9_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT6_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM6_DUTY.VALUE=50 -DRIVER.HET.VAR.HET1_BIT1_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM4_PERIOD.VALUE=1000.000 -DRIVER.HET.VAR.HET2_BIT28_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT7_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_PWM7_ACTION.VALUE=3 -DRIVER.HET.VAR.HET1_BIT8_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_PWM2_DUTY_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT20_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT12_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT31_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT23_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT15_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_CAP3_PIN_SELECT.VALUE=6 -DRIVER.HET.VAR.HET1_BIT7_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM6_DUTYTIME.VALUE=500.053 -DRIVER.HET.VAR.HET2_PWM4_DUTY_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM1_DUTY_PRESCALER.VALUE=75136 -DRIVER.HET.VAR.HET2_BIT20_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_BIT12_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_PWM0_PERIOD_PRESCALER.VALUE=149888 -DRIVER.HET.VAR.HET1_PWM0_ACTION.VALUE=3 -DRIVER.HET.VAR.HET2_BIT27_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT19_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_CAP5_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_BIT26_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT18_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT31_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT27_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT23_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT19_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT15_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_PWM0_PERIOD_PRESCALER.VALUE=149888 -DRIVER.HET.VAR.HET1_EDGE4_EVENT.VALUE=1 -DRIVER.HET.VAR.HET1_BIT20_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT12_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT20_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT12_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE5_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_PWM6_ENA.VALUE=0 -DRIVER.HET.VAR.HET1_BIT6_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE1_EVENT.VALUE=1 -DRIVER.HET.VAR.HET2_PWM3_PERIOD_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE3_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT28_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_CAP7_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_PWM3_POLARITY.VALUE=3 -DRIVER.HET.VAR.HET2_PWM4_PIN_SELECT.VALUE=16 -DRIVER.HET.VAR.HET2_BIT29_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT10_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT2_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT9_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM5_DUTY_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM0_PERIOD_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE3_PIN_SELECT.VALUE=15 -DRIVER.HET.VAR.HET1_PWM1_PERIOD.VALUE=1000.000 -DRIVER.HET.VAR.HET1_BIT8_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BASE.VALUE=0xFFF7B800 -DRIVER.HET.VAR.HET2_EDGE1_BOTH.VALUE=0 -DRIVER.HET.VAR.HET1_PWM6_PERIOD_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM5_POLARITY.VALUE=3 -DRIVER.HET.VAR.HET2_BIT20_HRSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT12_HRSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT2_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT2_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT28_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM7_PIN_SELECT.VALUE=19 -DRIVER.HET.VAR.HET1_PWM5_ACTUALPERIOD.VALUE=1000.106 -DRIVER.HET.VAR.HET1_LR_ACTUALTIME.VALUE=853.333 -DRIVER.HET.VAR.HET1_BIT21_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT13_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT11_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_PWM3_DUTY.VALUE=50 -DRIVER.HET.VAR.HET1_PWM7_ENA.VALUE=0 -DRIVER.HET.VAR.HET1_HR_PRESCALE.VALUE=0 -DRIVER.HET.VAR.HET1_BIT30_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT22_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT14_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT7_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_HR_ACTUALFREQUENCY.VALUE=75.000 -DRIVER.HET.VAR.HET2_PWM1_ACTION.VALUE=3 -DRIVER.HET.VAR.HET2_BIT5_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_EDGE4_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_CAP0_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET2_BIT4_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE2_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM7_DUTY.VALUE=50 -DRIVER.HET.VAR.HET1_PWM2_DUTY_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT8_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT11_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM7_DUTYTIME.VALUE=500.053 -DRIVER.HET.VAR.HET2_EDGE6_EVENT.VALUE=1 -DRIVER.HET.VAR.HET2_MASTER.VALUE=1 -DRIVER.HET.VAR.HET1_PWM5_DUTY_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM0_PERIOD_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT9_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_EDGE6_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT10_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_CAP5_PIN_SELECT.VALUE=26 -DRIVER.HET.VAR.HET1_PWM1_PIN_SELECT.VALUE=10 -DRIVER.HET.VAR.HET1_BIT9_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT21_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_BIT13_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_PWM7_DUTY_PRESCALER.VALUE=75136 -DRIVER.HET.VAR.HET1_PWM5_PERIOD_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT24_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT16_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT6_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_RAM_PARITY_ENA.VALUE=0x00000005 -DRIVER.HET.VAR.HET2_BIT29_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT24_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT16_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT10_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM7_DUTY_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE0_BOTH.VALUE=0 -DRIVER.HET.VAR.HET1_BIT30_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT22_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT14_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X0.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE2_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET2_PWM4_PERIOD_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT28_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT0_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT0_HRSHARE.VALUE=0x00000001 -DRIVER.HET.VAR.HET1_INT_X1.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE2_PIN_SELECT.VALUE=13 -DRIVER.HET.VAR.HET2_PWM2_PERIOD.VALUE=1000.000 -DRIVER.HET.VAR.HET1_BIT8_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X2.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_DIS_BLACKBOX.VALUE=0 -DRIVER.HET.VAR.HET2_LR_TIME.VALUE=800.000 -DRIVER.HET.VAR.HET1_INT_X3.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM6_DUTY_PRESCALER.VALUE=75136 -DRIVER.HET.VAR.HET1_EDGE5_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM5_ACTION.VALUE=3 -DRIVER.HET.VAR.HET1_BIT29_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_BIT0_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_INT_X4.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT2_HRSHARE.VALUE=0x00000002 -DRIVER.HET.VAR.HET1_BIT21_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT13_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X5.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM2_ACTUALPERIOD.VALUE=1000.106 -DRIVER.HET.VAR.HET1_BIT20_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT12_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT3_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_INT_X6.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM0_DUTYTIME.VALUE=500.053 -DRIVER.HET.VAR.HET1_INT_X7.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BASE_PORT.VALUE=0xFFF7B94C -DRIVER.HET.VAR.HET1_INT_X8.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT25_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT17_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT2_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM6_POLARITY.VALUE=3 -DRIVER.HET.VAR.HET1_BIT30_HRSHARE.VALUE=0x00008000 -DRIVER.HET.VAR.HET1_BIT22_HRSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT14_HRSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_INT_X9.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BASE.VALUE=0xFFF7B900 -DRIVER.HET.VAR.HET2_EDGE2_BOTH.VALUE=0 -DRIVER.HET.VAR.HET1_EDGE0_EVENT.VALUE=1 -DRIVER.HET.VAR.HET2_BIT28_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT10_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_CAP2_PIN_SELECT.VALUE=4 -DRIVER.HET.VAR.HET1_BIT11_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM2_DUTYTIME.VALUE=500.053 -DRIVER.HET.VAR.HET2_PWM0_DUTY_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT31_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT23_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT20_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_BIT15_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT12_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_PWM4_DUTY.VALUE=50 -DRIVER.HET.VAR.HET2_BIT26_HRSHARE.VALUE=0x00002000 -DRIVER.HET.VAR.HET2_BIT18_HRSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_CAP1_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_BIT30_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT22_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT14_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM6_ACTUALPERIOD.VALUE=1000.106 -DRIVER.HET.VAR.HET1_PWM6_PERIOD.VALUE=1000.000 -DRIVER.HET.VAR.HET1_BIT31_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT23_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT15_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT9_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT6_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_EDGE6_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT7_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE1_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_RAM_SIZE.VALUE=160 -DRIVER.HET.VAR.HET2_BIT9_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT21_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT13_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM2_PERIOD_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT0_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM3_DUTY_PRESCALER.VALUE=75136 -DRIVER.HET.VAR.HET2_CAP3_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET2_BIT0_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM3_PIN_SELECT.VALUE=14 -DRIVER.HET.VAR.HET2_PWM6_ACTION.VALUE=3 -DRIVER.HET.VAR.HET2_BIT30_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_BIT22_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_BIT14_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_EDGE7_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT25_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT17_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_EDGE2_PIN_SELECT.VALUE=13 -DRIVER.HET.VAR.HET1_BIT20_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT12_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_HR_FREQUENCY.VALUE=110.000 -DRIVER.HET.VAR.HET2_PWM2_DUTY_PRESCALER.VALUE=75136 -DRIVER.HET.VAR.HET1_EDGE5_EVENT.VALUE=1 -DRIVER.HET.VAR.HET1_EDGE1_BOTH.VALUE=0 -DRIVER.HET.VAR.HET1_PWM5_PERIOD_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT24_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT16_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM1_POLARITY.VALUE=3 -DRIVER.HET.VAR.HET2_BIT26_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT18_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE0_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT0_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_PWM6_PIN_SELECT.VALUE=18 -DRIVER.HET.VAR.HET2_EDGE2_EVENT.VALUE=1 -DRIVER.HET.VAR.HET1_EDGE7_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT1_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_EDGE5_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET2_EDGE4_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT6_HRSHARE.VALUE=0x00000008 -DRIVER.HET.VAR.HET1_BIT30_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT22_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT14_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT4_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT1_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM7_DUTY_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT8_HRSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT0_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT4_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE7_PIN_SELECT.VALUE=23 -DRIVER.HET.VAR.HET2_PWM7_PERIOD.VALUE=1000.000 -DRIVER.HET.VAR.HET2_PWM3_ACTUALPERIOD.VALUE=1000.106 -DRIVER.HET.VAR.HET1_PWM3_DUTYTIME.VALUE=500.053 -DRIVER.HET.VAR.HET2_EDGE3_BOTH.VALUE=0 -DRIVER.HET.VAR.HET1_PWM1_DUTY_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM2_PERIOD_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT28_HRSHARE.VALUE=0x00004000 -DRIVER.HET.VAR.HET1_BIT26_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT18_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_CAP4_PIN_SELECT.VALUE=24 -DRIVER.HET.VAR.HET2_PWM0_PERIOD.VALUE=1000.000 -DRIVER.HET.VAR.HET1_PWM0_PIN_SELECT.VALUE=8 -DRIVER.HET.VAR.HET1_BIT21_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT13_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_LR_TIME.VALUE=800.000 -DRIVER.HET.VAR.HET2_EDGE0_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM3_ACTION.VALUE=3 -DRIVER.HET.VAR.HET1_BIT25_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT21_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_BIT17_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT13_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_PWM5_DUTY.VALUE=50 -DRIVER.HET.VAR.HET2_PWM1_PERIOD_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT20_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT12_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT11_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT24_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT16_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_PWM5_DUTYTIME.VALUE=500.053 -DRIVER.HET.VAR.HET2_RAM_BASE.VALUE=0xFF440000 -DRIVER.HET.VAR.HET2_PWM3_DUTY_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT7_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_PWM4_DUTY_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT31_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT23_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT15_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_CAP4_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_BIT8_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE1_PIN_SELECT.VALUE=11 -DRIVER.HET.VAR.HET1_CAP7_PIN_SELECT.VALUE=30 -DRIVER.HET.VAR.HET1_BIT31_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT23_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT15_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE7_EVENT.VALUE=1 -DRIVER.HET.VAR.HET2_BIT2_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE4_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET2_BIT31_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_BIT23_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_BIT15_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_BIT10_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_CAP6_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_PWM2_POLARITY.VALUE=3 -DRIVER.HET.VAR.HET2_BIT26_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT18_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT0_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM4_PERIOD.VALUE=1000.000 -DRIVER.HET.VAR.HET1_BIT30_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT22_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT14_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE1_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM7_PERIOD_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE2_BOTH.VALUE=0 -DRIVER.HET.VAR.HET1_BIT26_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT18_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM1_DUTY_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT24_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT16_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT5_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_RAM_PARITY_ENA.VALUE=0x00000005 -DRIVER.HET.VAR.HET1_PWM7_PERIOD_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM0_DUTY.VALUE=50 -DRIVER.HET.VAR.HET2_PWM0_ACTUALPERIOD.VALUE=1000.106 -DRIVER.HET.VAR.HET2_BIT1_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_CAP1_PIN_SELECT.VALUE=2 -DRIVER.HET.VAR.HET1_PWM7_PERIOD_PRESCALER.VALUE=149888 -DRIVER.HET.VAR.HET1_BIT2_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_PWM6_PERIOD_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM4_POLARITY.VALUE=3 -DRIVER.HET.VAR.HET2_BIT10_HRSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM7_DUTY_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT10_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE7_PIN_SELECT.VALUE=23 -DRIVER.HET.VAR.HET1_BIT24_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT16_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT5_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_PWM7_PERIOD_PRESCALER.VALUE=149888 -DRIVER.HET.VAR.HET2_PWM7_DUTY_PRESCALER.VALUE=75136 -DRIVER.HET.VAR.HET2_PWM4_ACTION.VALUE=3 -DRIVER.HET.VAR.HET2_BIT3_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE5_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT6_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM6_ACTUALPERIOD.VALUE=1000.106 -DRIVER.HET.VAR.HET2_EDGE4_BOTH.VALUE=0 -DRIVER.HET.VAR.HET2_PWM1_PERIOD_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT11_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE1_EVENT.VALUE=1 -DRIVER.HET.VAR.HET2_LR_PRESCALE.VALUE=6 -DRIVER.HET.VAR.HET2_PWM2_PIN_SELECT.VALUE=12 -DRIVER.HET.VAR.HET2_BIT1_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT31_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT23_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT15_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM6_DUTYTIME.VALUE=500.053 -DRIVER.HET.VAR.HET2_EDGE2_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM4_DUTY_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT30_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_BIT27_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT22_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_BIT19_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT14_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_EDGE2_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM6_DUTY.VALUE=50 -DRIVER.HET.VAR.HET2_BIT8_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM4_DUTY_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT9_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE1_PIN_SELECT.VALUE=11 -DRIVER.HET.VAR.HET1_BIT25_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT17_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT8_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_PWM4_PERIOD_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM0_ENA.VALUE=0 -DRIVER.HET.VAR.HET2_BIT30_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT22_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT14_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT2_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM5_PERIOD.VALUE=1000.000 -DRIVER.HET.VAR.HET2_BIT0_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM5_PIN_SELECT.VALUE=17 -DRIVER.HET.VAR.HET1_BIT25_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT17_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM6_DUTY_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT4_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE1_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_CAP7_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_BIT28_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT24_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT16_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT24_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_BIT20_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT16_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_BIT12_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM4_DUTY_PRESCALER.VALUE=75136 -DRIVER.HET.VAR.HET1_PWM1_ACTION.VALUE=3 -DRIVER.HET.VAR.HET2_BIT28_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT0_HRSHARE.VALUE=0x00000001 -DRIVER.HET.VAR.HET1_EDGE7_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_PWM1_DUTY_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE6_PIN_SELECT.VALUE=22 -DRIVER.HET.VAR.HET2_BIT27_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT19_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT2_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_DIS_BLACKBOX.VALUE=0 -DRIVER.HET.VAR.HET1_BIT24_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT16_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE3_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE6_EVENT.VALUE=1 -DRIVER.HET.VAR.HET1_EDGE3_BOTH.VALUE=0 -DRIVER.HET.VAR.HET1_PWM6_PERIOD_PRESCALER.VALUE=149888 -DRIVER.HET.VAR.HET1_BIT28_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT21_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT13_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM5_POLARITY.VALUE=3 -DRIVER.HET.VAR.HET1_PWM1_DUTY.VALUE=50 -DRIVER.HET.VAR.HET1_BIT20_HRSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT12_HRSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_CAP3_PIN_SELECT.VALUE=6 -DRIVER.HET.VAR.HET2_BIT10_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT2_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_PWM3_ACTUALPERIOD.VALUE=1000.106 -DRIVER.HET.VAR.HET2_EDGE3_EVENT.VALUE=1 -DRIVER.HET.VAR.HET2_PWM6_PERIOD_PRESCALER.VALUE=149888 -DRIVER.HET.VAR.HET2_PWM3_DUTY_PRESCALER.VALUE=75136 -DRIVER.HET.VAR.HET1_BIT3_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_PWM1_ENA.VALUE=0 -DRIVER.HET.VAR.HET2_BIT1_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT26_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT18_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT6_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_PWM1_DUTYTIME.VALUE=500.053 -DRIVER.HET.VAR.HET2_BIT5_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM7_POLARITY.VALUE=3 -DRIVER.HET.VAR.HET2_BIT24_HRSHARE.VALUE=0x00001000 -DRIVER.HET.VAR.HET2_BIT16_HRSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_CAP0_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET1_BIT4_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE0_PIN_SELECT.VALUE=9 -DRIVER.HET.VAR.HET2_BIT10_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_CAP6_PIN_SELECT.VALUE=28 -DRIVER.HET.VAR.HET1_PWM2_PERIOD.VALUE=1000.000 -DRIVER.HET.VAR.HET2_EDGE5_BOTH.VALUE=0 -DRIVER.HET.VAR.HET2_BIT21_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT13_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT3_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE0_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET2_PWM7_ACTUALPERIOD.VALUE=1000.106 -DRIVER.HET.VAR.HET2_BIT3_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT25_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT17_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_EDGE4_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT31_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_BIT29_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT23_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_BIT15_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_BIT0_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_CAP2_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET2_PWM7_DUTY.VALUE=50 -DRIVER.HET.VAR.HET2_BIT6_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM4_PERIOD_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT11_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT26_DOUT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT18_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_PWM6_PERIOD_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM2_ACTION.VALUE=3 -DRIVER.HET.VAR.HET2_BIT9_PULL.VALUE=1 -DRIVER.HET.VAR.HET1_PWM7_DUTY_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM3_PERIOD_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM2_ENA.VALUE=0 -DRIVER.HET.VAR.HET2_BIT20_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT12_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE3_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM7_PIN_SELECT.VALUE=19 -DRIVER.HET.VAR.HET2_BIT2_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_CAP0_PIN_SELECT.VALUE=0 -DRIVER.HET.VAR.HET1_BIT27_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT19_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT6_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM0_DUTY_PRESCALER.VALUE=75136 -DRIVER.HET.VAR.HET2_EDGE7_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_PWM0_POLARITY.VALUE=3 -DRIVER.HET.VAR.HET1_BIT26_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT18_XORSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT10_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_EDGE6_PIN_SELECT.VALUE=22 -DRIVER.HET.VAR.HET1_PWM0_ACTUALPERIOD.VALUE=1000.106 -DRIVER.HET.VAR.HET2_HR_FREQUENCY.VALUE=110.000 -DRIVER.HET.VAR.HET2_BIT30_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT25_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_BIT22_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT17_PULL.VALUE=1 -DRIVER.HET.VAR.HET2_BIT14_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_PWM5_PERIOD_PRESCALER.VALUE=149888 -DRIVER.HET.VAR.HET2_EDGE4_POLARITY.VALUE=0 -DRIVER.HET.VAR.HET2_EDGE0_INTENA.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT7_PULDIS.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT4_HRSHARE.VALUE=0x00000004 -DRIVER.HET.VAR.HET1_BIT2_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET2_BIT28_DOUT.VALUE=0 -DRIVER.HET.VAR.HET2_BIT4_PDR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT26_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT18_PSL.VALUE=0x00000000 -DRIVER.RTP.VAR.RTP_PORT_BIT1_DOUT.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT3_FUN.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT1_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT5_DIR.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT14_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT11_DIR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT3_PDR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT8_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT4_FUN.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT6_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT2_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT10_FUN.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT6_DIR.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT14_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT12_DIR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT17_DOUT.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT4_PDR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT10_PDR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT2_DOUT.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT5_FUN.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT3_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT11_FUN.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT7_DIR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT13_DIR.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT5_PDR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT11_PDR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT9_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT6_FUN.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT12_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT4_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT12_FUN.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT8_DIR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT10_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT15_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT14_DIR.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT18_DOUT.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT6_PDR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT0_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT4_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT12_PDR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT3_DOUT.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT7_FUN.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT5_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT13_FUN.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT9_DIR.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT11_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT15_DIR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT7_PDR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT13_PDR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT8_FUN.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT6_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT14_FUN.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT12_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT16_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT16_DIR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT17_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT8_PDR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT1_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT10_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT14_PDR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT4_DOUT.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT9_FUN.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT7_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT15_FUN.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT9_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT13_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT10_DOUT.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT17_DIR.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT2_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT9_PDR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT15_PDR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT8_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT16_FUN.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT14_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT18_DIR.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT17_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_BASE_PORT.VALUE=0xFFFFFA38 -DRIVER.RTP.VAR.RTP_PORT_BIT2_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT16_PDR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT5_DOUT.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT9_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT17_FUN.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT15_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT15_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT11_DOUT.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT17_PDR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT7_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT18_FUN.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT16_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT18_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT3_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT18_PDR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT6_DOUT.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT17_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT12_DOUT.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT13_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT18_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT4_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT5_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT7_DOUT.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT10_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT13_DOUT.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT18_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT5_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT11_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT8_DOUT.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT0_DIR.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT11_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT14_DOUT.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT3_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT1_DIR.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT6_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT0_FUN.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT9_DOUT.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT2_DIR.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT12_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT16_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT15_DOUT.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT0_PDR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT0_DOUT.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT1_FUN.VALUE=1 -DRIVER.RTP.VAR.RTP_BASE.VALUE=0xFFFFFA00 -DRIVER.RTP.VAR.RTP_PORT_BIT3_DIR.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT8_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT1_PDR.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT7_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT2_FUN.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT0_PSL.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT4_DIR.VALUE=0 -DRIVER.RTP.VAR.RTP_BASE_RAM.VALUE=0xFFF83000 -DRIVER.RTP.VAR.RTP_PORT_BIT13_PULL.VALUE=2 -DRIVER.RTP.VAR.RTP_PORT_BIT10_DIR.VALUE=1 -DRIVER.RTP.VAR.RTP_PORT_BIT16_DOUT.VALUE=0 -DRIVER.RTP.VAR.RTP_PORT_BIT2_PDR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT14_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT17_DOUT.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT17_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT4_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT1_DIR.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT18_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT0_FUN.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT15_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT4_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT2_DIR.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT7_DOUT.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT15_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT18_DOUT.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT0_PDR.VALUE=0 -DRIVER.DMM.VAR.DMM_BASE.VALUE=0xFFFFF700 -DRIVER.DMM.VAR.DMM_PORT_BIT1_FUN.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT3_DIR.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT9_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT1_PDR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT2_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT2_FUN.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT0_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT5_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT4_DIR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT8_DOUT.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT16_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT2_PDR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT13_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT3_FUN.VALUE=1 -DRIVER.DMM.VAR.DMM_BASE_PORT.VALUE=0xFFFFF770 -DRIVER.DMM.VAR.DMM_PORT_BIT1_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT5_DIR.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT10_DOUT.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT3_PDR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT4_FUN.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT2_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT6_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT6_DIR.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT7_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT9_DOUT.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT17_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT4_PDR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT5_FUN.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT3_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT0_DOUT.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT7_DIR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT18_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT11_DOUT.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT11_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT5_PDR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT6_FUN.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT4_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT8_DIR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT7_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT18_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT6_PDR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT10_DIR.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT7_FUN.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT5_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT5_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT1_DOUT.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT9_DIR.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT12_DOUT.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT7_PDR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT11_DIR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT8_FUN.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT16_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT6_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT8_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT10_FUN.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT8_PDR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT12_DIR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT9_FUN.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT10_PDR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT7_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT2_DOUT.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT10_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT13_DOUT.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT11_FUN.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT9_PDR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT13_DIR.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT3_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT11_PDR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT8_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT9_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT12_FUN.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT10_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT14_DIR.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT14_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT0_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT12_PDR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT9_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT3_DOUT.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT11_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT14_DOUT.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT13_FUN.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT11_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT15_DIR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT13_PDR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT8_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT14_FUN.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT12_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT16_DIR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT1_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT14_PDR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT4_DOUT.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT12_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT15_DOUT.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT15_FUN.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT12_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT13_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT17_DIR.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT15_PDR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT16_FUN.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT14_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT18_DIR.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT2_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT6_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT16_PDR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT5_DOUT.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT13_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT16_DOUT.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT17_FUN.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT15_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT17_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT17_PDR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT10_PULDIS.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT18_FUN.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT16_PSL.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT3_PULL.VALUE=2 -DRIVER.DMM.VAR.DMM_PORT_BIT0_DIR.VALUE=1 -DRIVER.DMM.VAR.DMM_PORT_BIT18_PDR.VALUE=0 -DRIVER.DMM.VAR.DMM_PORT_BIT6_DOUT.VALUE=0 -DRIVER.I2C.VAR.I2C1_STOPBITS.VALUE=2 -DRIVER.I2C.VAR.I2C1_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.I2C.VAR.I2C1_BASE_PORT.VALUE=0xFFF7D44C -DRIVER.I2C.VAR.I2C2_PARITYENA.VALUE=0 -DRIVER.I2C.VAR.I2C1_DATACOUNT.VALUE=8 -DRIVER.I2C.VAR.I2C2_PORT_BIT0_PULL.VALUE=2 -DRIVER.I2C.VAR.I2C1_IGNACK.VALUE=0 -DRIVER.I2C.VAR.I2C1_ADDRMODE.VALUE=7BIT_AMODE -DRIVER.I2C.VAR.I2C2_ALINTLVL.VALUE=0 -DRIVER.I2C.VAR.I2C2_TXDMA.VALUE=0 -DRIVER.I2C.VAR.I2C1_BC_VALUE.VALUE=0x0003 -DRIVER.I2C.VAR.I2C1_TXRX_VALUE.VALUE=0 -DRIVER.I2C.VAR.I2C2_ICXRDYINTLVL.VALUE=0 -DRIVER.I2C.VAR.I2C2_MODCLK.VALUE=8 -DRIVER.I2C.VAR.I2C2_PORT_BIT1_PULL.VALUE=2 -DRIVER.I2C.VAR.I2C2_PORT_BIT0_DIR.VALUE=0 -DRIVER.I2C.VAR.I2C1_ALINTENA.VALUE=0 -DRIVER.I2C.VAR.I2C1_PRESCALE.VALUE=8 -DRIVER.I2C.VAR.I2C2_ARDYINTENA.VALUE=0 -DRIVER.I2C.VAR.I2C2_PORT_BIT1_DIR.VALUE=0 -DRIVER.I2C.VAR.I2C2_PORT_BIT0_FUN.VALUE=0 -DRIVER.I2C.VAR.I2C1_MSMODE.VALUE=1 -DRIVER.I2C.VAR.I2C1_AASLVL.VALUE=0 -DRIVER.I2C.VAR.I2C2_PORT_BIT0_PDR.VALUE=0 -DRIVER.I2C.VAR.I2C2_RM_ENA.VALUE=0 -DRIVER.I2C.VAR.I2C2_PORT_BIT1_FUN.VALUE=0 -DRIVER.I2C.VAR.I2C2_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.I2C.VAR.I2C2_SCDLVL.VALUE=0 -DRIVER.I2C.VAR.I2C2_PORT_BIT1_PDR.VALUE=0 -DRIVER.I2C.VAR.I2C2_STPCND.VALUE=1 -DRIVER.I2C.VAR.I2C1_ALINTLVL.VALUE=0 -DRIVER.I2C.VAR.I2C2_PORT_BIT0_PSL.VALUE=1 -DRIVER.I2C.VAR.I2C1_ARDYINTENA.VALUE=0 -DRIVER.I2C.VAR.I2C2_ARDYINTLVL.VALUE=0 -DRIVER.I2C.VAR.I2C1_ICRRDYINTENA.VALUE=0 -DRIVER.I2C.VAR.I2C2_BASE_PORT.VALUE=0xFFF7D54C -DRIVER.I2C.VAR.I2C1_PORT_BIT1_PULDIS.VALUE=0 -DRIVER.I2C.VAR.I2C2_PORT_BIT1_PSL.VALUE=1 -DRIVER.I2C.VAR.I2C2_DATACOUNT.VALUE=8 -DRIVER.I2C.VAR.I2C1_LENGTH.VALUE=8 -DRIVER.I2C.VAR.I2C1_TXRX.VALUE=TRANSMITTER -DRIVER.I2C.VAR.I2C2_NACKINTENA.VALUE=0 -DRIVER.I2C.VAR.I2C2_IGNACK.VALUE=0 -DRIVER.I2C.VAR.I2C1_PORT_BIT0_DOUT.VALUE=0 -DRIVER.I2C.VAR.I2C1_STACND.VALUE=1 -DRIVER.I2C.VAR.I2C2_TXRX.VALUE=TRANSMITTER -DRIVER.I2C.VAR.I2C1_PORT_BIT0_DIR.VALUE=0 -DRIVER.I2C.VAR.I2C1_ARDYINTLVL.VALUE=0 -DRIVER.I2C.VAR.I2C1_ICRRDYINTLVL.VALUE=0 -DRIVER.I2C.VAR.I2C1_PARITYENA.VALUE=0 -DRIVER.I2C.VAR.I2C1_BASE.VALUE=0xFFF7D400 -DRIVER.I2C.VAR.I2C1_PORT_BIT1_DIR.VALUE=0 -DRIVER.I2C.VAR.I2C1_PORT_BIT1_DOUT.VALUE=0 -DRIVER.I2C.VAR.I2C1_ICXRDYINTENA.VALUE=0 -DRIVER.I2C.VAR.I2C1_PORT_BIT0_FUN.VALUE=0 -DRIVER.I2C.VAR.I2C1_NACKINTENA.VALUE=0 -DRIVER.I2C.VAR.I2C2_NACKINTLVL.VALUE=0 -DRIVER.I2C.VAR.I2C2_BAUDRATE.VALUE=100 -DRIVER.I2C.VAR.I2C1_AAS.VALUE=0 -DRIVER.I2C.VAR.I2C1_BCM.VALUE=0 -DRIVER.I2C.VAR.I2C1_PORT_BIT0_PDR.VALUE=0 -DRIVER.I2C.VAR.I2C2_MSMODE.VALUE=1 -DRIVER.I2C.VAR.I2C2_STOPBITS.VALUE=2 -DRIVER.I2C.VAR.I2C1_BC.VALUE=8_BIT -DRIVER.I2C.VAR.I2C1_PORT_BIT1_FUN.VALUE=0 -DRIVER.I2C.VAR.I2C2_EVENPARITY.VALUE=0 -DRIVER.I2C.VAR.I2C2_ICRRDYINTENA.VALUE=0 -DRIVER.I2C.VAR.I2C1_FDF.VALUE=0 -DRIVER.I2C.VAR.I2C2_BASE.VALUE=0xFFF7D500 -DRIVER.I2C.VAR.I2C2_AASLVL.VALUE=0 -DRIVER.I2C.VAR.I2C2_AAS.VALUE=0 -DRIVER.I2C.VAR.I2C1_ICCH.VALUE=37 -DRIVER.I2C.VAR.I2C2_BCM.VALUE=0 -DRIVER.I2C.VAR.I2C2_BC.VALUE=2_BIT -DRIVER.I2C.VAR.I2C1_MODCLK.VALUE=8 -DRIVER.I2C.VAR.I2C1_ADDRMODE_VALUE.VALUE=0x0001 -DRIVER.I2C.VAR.I2C2_PORT_BIT0_DOUT.VALUE=0 -DRIVER.I2C.VAR.I2C1_ICCL.VALUE=37 -DRIVER.I2C.VAR.I2C1_PORT_BIT1_PDR.VALUE=0 -DRIVER.I2C.VAR.I2C2_ADDRMODE.VALUE=7BIT_AMODE -DRIVER.I2C.VAR.I2C2_FDF.VALUE=0 -DRIVER.I2C.VAR.I2C1_PORT_BIT0_PSL.VALUE=1 -DRIVER.I2C.VAR.I2C1_RXDMA.VALUE=0 -DRIVER.I2C.VAR.I2C1_PORT_BIT1_PSL.VALUE=1 -DRIVER.I2C.VAR.I2C2_BC_VALUE.VALUE=0x0003 -DRIVER.I2C.VAR.I2C1_PORT_BIT0_PULL.VALUE=2 -DRIVER.I2C.VAR.I2C1_ICXRDYINTLVL.VALUE=0 -DRIVER.I2C.VAR.I2C2_ICCH.VALUE=37 -DRIVER.I2C.VAR.I2C1_NACKINTLVL.VALUE=0 -DRIVER.I2C.VAR.I2C2_ICCL.VALUE=37 -DRIVER.I2C.VAR.I2C2_PORT_BIT1_DOUT.VALUE=0 -DRIVER.I2C.VAR.I2C1_SCD.VALUE=0 -DRIVER.I2C.VAR.I2C1_TXDMA.VALUE=0 -DRIVER.I2C.VAR.I2C2_LENGTH.VALUE=8 -DRIVER.I2C.VAR.I2C1_EVENPARITY.VALUE=0 -DRIVER.I2C.VAR.I2C1_RM_ENA.VALUE=0 -DRIVER.I2C.VAR.I2C2_ICRRDYINTLVL.VALUE=0 -DRIVER.I2C.VAR.I2C2_ALINTENA.VALUE=0 -DRIVER.I2C.VAR.I2C2_PRESCALE.VALUE=8 -DRIVER.I2C.VAR.I2C2_PORT_BIT0_PULDIS.VALUE=0 -DRIVER.I2C.VAR.I2C1_SCDLVL.VALUE=0 -DRIVER.I2C.VAR.I2C2_SCD.VALUE=0 -DRIVER.I2C.VAR.I2C1_PORT_BIT1_PULL.VALUE=2 -DRIVER.I2C.VAR.I2C2_TXRX_VALUE.VALUE=0 -DRIVER.I2C.VAR.I2C1_STPCND.VALUE=1 -DRIVER.I2C.VAR.I2C2_ICXRDYINTENA.VALUE=0 -DRIVER.I2C.VAR.I2C2_ADDRMODE_VALUE.VALUE=0x0001 -DRIVER.I2C.VAR.I2C1_BAUDRATE.VALUE=100 -DRIVER.I2C.VAR.I2C2_STACND.VALUE=1 -DRIVER.I2C.VAR.I2C2_RXDMA.VALUE=0 -DRIVER.DCC.VAR.DCC1_ENABLE_KEY.VALUE=10 -DRIVER.DCC.VAR.PINMUX_BASE.VALUE=0xFFFFEA00 -DRIVER.DCC.VAR.DCC1_DETECTION_TIME.VALUE=2500.00 -DRIVER.DCC.VAR.DCC1_CLOCK_SOURCE1_VALUE.VALUE=0x0002 -DRIVER.DCC.VAR.DCC1_ENABLE_ERROR_INTERRUPT.VALUE=0xA -DRIVER.DCC.VAR.DCC2_ENABLE.VALUE=0xA -DRIVER.DCC.VAR.PINMUX_BASE_PORT.VALUE=0xFFFFEA40 -DRIVER.DCC.VAR.DCC2_ENABLE_ERROR_INTERRUPT.VALUE=0xA -DRIVER.DCC.VAR.DCC2_CLOCK_SOURCE0_VALUE.VALUE=0x0001 -DRIVER.DCC.VAR.DCC2_CLOCK_SOURCE0_FREQ.VALUE=0 -DRIVER.DCC.VAR.DCC2_VALID0_SEED.VALUE=0 -DRIVER.DCC.VAR.DCC2_CLKT_N2HET2_0_FREQ.VALUE=1 -DRIVER.DCC.VAR.DCC2_CLOCK_SOURCE1_FREQ.VALUE=0 -DRIVER.DCC.VAR.DCC2_DETECTION_TIME.VALUE=2500.00 -DRIVER.DCC.VAR.DCC2_CLOCK_DRIFT.VALUE=1.0 -DRIVER.DCC.VAR.DCC2_CLOCK_SOURCE1_VALUE.VALUE=0x0002 -DRIVER.DCC.VAR.DCC1_CLKT_N2HET1_31_FREQ.VALUE=1 -DRIVER.DCC.VAR.DCC2_COUNT0_SEED.VALUE=0 -DRIVER.DCC.VAR.DCC2_CLOCK_SOURCE0.VALUE=OSCIN -DRIVER.DCC.VAR.DCC2_CLOCK_SOURCE1.VALUE=VCLK -DRIVER.DCC.VAR.DCC1_CLOCK_SOURCE0_FREQ.VALUE=16.0 -DRIVER.DCC.VAR.DCC1_VALID0_SEED.VALUE=792 -DRIVER.DCC.VAR.DCC1_BASE.VALUE=0xFFFFEC00 -DRIVER.DCC.VAR.DCC2_COUNT1_SEED.VALUE=0 -DRIVER.DCC.VAR.DCC1_CLOCK_SOURCE1_FREQ.VALUE=300.0 -DRIVER.DCC.VAR.DCC1_CLOCK_DRIFT.VALUE=1.0 -DRIVER.DCC.VAR.DCC1_ENABLE.VALUE=0xA -DRIVER.DCC.VAR.DCC1_ENABLE_SINGLESHOT_MODE.VALUE=0x5 -DRIVER.DCC.VAR.DCC2_ENABLE_SINGLESHOT_MODE.VALUE=0x5 -DRIVER.DCC.VAR.DCC2_BASE.VALUE=0xFFFFF400 -DRIVER.DCC.VAR.DCC1_DONE_INTERRUPT_ENABLE.VALUE=0xA -DRIVER.DCC.VAR.DCC2_DONE_INTERRUPT_ENABLE.VALUE=0xA -DRIVER.DCC.VAR.DCC2_ENABLE_KEY.VALUE=0xA -DRIVER.DCC.VAR.DCC1_COUNT0_SEED.VALUE=39204 -DRIVER.DCC.VAR.DCC1_CLOCK_SOURCE0_VALUE.VALUE=0x0001 -DRIVER.DCC.VAR.DCC1_CLOCK_SOURCE0.VALUE=OSCIN -DRIVER.DCC.VAR.DCC1_CLOCK_SOURCE1.VALUE=PLL1 -DRIVER.DCC.VAR.CLKT_TCK_FREQ.VALUE=12.0 -DRIVER.DCC.VAR.DCC1_COUNT1_SEED.VALUE=742500 -DRIVER.PINMUX.VAR.EQEP2A_FILTER.VALUE=0 -DRIVER.PINMUX.VAR.MUX61_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX53_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX45_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX37_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX29_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX7_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX61_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX53_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX45_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX37_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX29_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX7_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_SOC4A_SELECT.VALUE=ON -DRIVER.PINMUX.VAR.ETPWM_TIME_BASE_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX61_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX53_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX50_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX45_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX42_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX37_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX34_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX29_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX26_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX18_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX61_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX53_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX45_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX37_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX29_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX61_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX53_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX45_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX37_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX29_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX61_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX53_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX45_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX37_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX29_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX99_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_96_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_88_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_5_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX30_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX22_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX14_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX30_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX22_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX14_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX30_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX22_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX14_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_81_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_73_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_65_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_57_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_49_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX30_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX22_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX14_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL5_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX30_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX22_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX14_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL5_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX30_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX22_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX14_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX101_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL55_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL47_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL39_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_50_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_42_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_34_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_26_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_18_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.ECAP5_FILTER.VALUE=0 -DRIVER.PINMUX.VAR.EMIF_OUTPUT_ENABLE_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.PINMUX10.VALUE="PINMUX_BALL_K17_EMIF_nCS_3 | PINMUX_BALL_M17_EMIF_nCS_4 | PINMUX_BALL_R3_EMIF_nRAS | PINMUX_BALL_P3_EMIF_nWAIT" -DRIVER.PINMUX.VAR.MUX11_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL40_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL32_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL24_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL16_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_11_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX11.VALUE="PINMUX_BALL_D17_EMIF_nWE | PINMUX_BALL_E9_ETMDATA_08 | PINMUX_BALL_E8_ETMDATA_09 | PINMUX_BALL_E7_ETMDATA_10" -DRIVER.PINMUX.VAR.PINMUX20.VALUE="PINMUX_BALL_M1_GIOA_7 | PINMUX_BALL_F2_GIOB_2 | PINMUX_BALL_W10_GIOB_3 | PINMUX_BALL_J2_GIOB_6" -DRIVER.PINMUX.VAR.PINMUX12.VALUE="PINMUX_BALL_E6_ETMDATA_11 | PINMUX_BALL_E13_ETMDATA_12 | PINMUX_BALL_E12_ETMDATA_13 | PINMUX_BALL_E11_ETMDATA_14" -DRIVER.PINMUX.VAR.PINMUX21.VALUE="PINMUX_BALL_F1_GIOB_7 | PINMUX_BALL_R2_MIBSPI1NCS_0 | PINMUX_BALL_F3_MIBSPI1NCS_1 | PINMUX_BALL_G3_MIBSPI1NCS_2" -DRIVER.PINMUX.VAR.PINMUX13.VALUE="PINMUX_BALL_E10_ETMDATA_15 | PINMUX_BALL_K15_ETMDATA_16 | PINMUX_BALL_L15_ETMDATA_17 | PINMUX_BALL_M15_ETMDATA_18" -DRIVER.PINMUX.VAR.ECAP3_FILTER_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.PINMUX30.VALUE="PINMUX_BALL_E18_N2HET1_08 | PINMUX_BALL_V7_N2HET1_09 | PINMUX_BALL_D19_N2HET1_10 | PINMUX_BALL_E3_N2HET1_11" -DRIVER.PINMUX.VAR.PINMUX22.VALUE="PINMUX_BALL_J3_MIBSPI1NCS_3 | PINMUX_BALL_G19_MIBSPI1NENA | PINMUX_BALL_V9_MIBSPI3CLK | PINMUX_BALL_V10_MIBSPI3NCS_0" -DRIVER.PINMUX.VAR.PINMUX14.VALUE="PINMUX_BALL_N15_ETMDATA_19 | PINMUX_BALL_E5_ETMDATA_20 | PINMUX_BALL_F5_ETMDATA_21 | PINMUX_BALL_G5_ETMDATA_22" -DRIVER.PINMUX.VAR.MUX92_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX84_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX76_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX68_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX31.VALUE="PINMUX_BALL_B4_N2HET1_12 | PINMUX_BALL_N2_N2HET1_13 | PINMUX_BALL_N1_N2HET1_15 | PINMUX_BALL_A4_N2HET1_16" -DRIVER.PINMUX.VAR.PINMUX23.VALUE="PINMUX_BALL_V5_MIBSPI3NCS_1 | PINMUX_BALL_B2_MIBSPI3NCS_2 | PINMUX_BALL_C3_MIBSPI3NCS_3 | PINMUX_BALL_W9_MIBSPI3NENA" -DRIVER.PINMUX.VAR.PINMUX15.VALUE="PINMUX_BALL_K5_ETMDATA_23 | PINMUX_BALL_L5_ETMDATA_24 | PINMUX_BALL_M5_ETMDATA_25 | PINMUX_BALL_N5_ETMDATA_26" -DRIVER.PINMUX.VAR.PINMUX32.VALUE="PINMUX_BALL_A13_N2HET1_17 | PINMUX_BALL_J1_N2HET1_18 | PINMUX_BALL_B13_N2HET1_19 | PINMUX_BALL_P2_N2HET1_20" -DRIVER.PINMUX.VAR.PINMUX24.VALUE="PINMUX_BALL_W8_MIBSPI3SIMO | PINMUX_BALL_V8_MIBSPI3SOMI | PINMUX_BALL_H19_MIBSPI5CLK | PINMUX_BALL_E19_MIBSPI5NCS_0" -DRIVER.PINMUX.VAR.PINMUX16.VALUE="PINMUX_BALL_P5_ETMDATA_27 | PINMUX_BALL_R5_ETMDATA_28 | PINMUX_BALL_R6_ETMDATA_29 | PINMUX_BALL_R7_ETMDATA_30" -DRIVER.PINMUX.VAR.SIGNAL56_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL48_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX131_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX123_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX115_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX107_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX33.VALUE="PINMUX_BALL_H4_N2HET1_21 | PINMUX_BALL_B3_N2HET1_22 | PINMUX_BALL_J4_N2HET1_23 | PINMUX_BALL_P1_N2HET1_24" -DRIVER.PINMUX.VAR.PINMUX25.VALUE="PINMUX_BALL_B6_MIBSPI5NCS_1 | PINMUX_BALL_W6_MIBSPI5NCS_2 | PINMUX_BALL_T12_MIBSPI5NCS_3 | PINMUX_BALL_H18_MIBSPI5NENA" -DRIVER.PINMUX.VAR.PINMUX17.VALUE="PINMUX_BALL_R8_ETMDATA_31 | PINMUX_BALL_R9_ETMTRACECLKIN | PINMUX_BALL_R10_ETMTRACECLKOUT | PINMUX_BALL_R11_ETMTRACECTL" -DRIVER.PINMUX.VAR.SIGNAL56_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL48_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX131_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX123_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX115_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX107_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.GIOB6_DMA_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.EQEP2B_FILTER_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.ETPWM7_EQEPERR_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.PINMUX34.VALUE="PINMUX_BALL_A14_N2HET1_26 | PINMUX_BALL_K19_N2HET1_28 | PINMUX_BALL_B11_N2HET1_30 | PINMUX_BALL_D8_N2HET2_01" -DRIVER.PINMUX.VAR.PINMUX26.VALUE="PINMUX_BALL_J19_MIBSPI5SIMO_0 | PINMUX_BALL_E16_MIBSPI5SIMO_1 | PINMUX_BALL_H17_MIBSPI5SIMO_2 | PINMUX_BALL_G17_MIBSPI5SIMO_3" -DRIVER.PINMUX.VAR.PINMUX18.VALUE="PINMUX_BALL_B15_FRAYTX1 | PINMUX_BALL_B8_FRAYTX2 | PINMUX_BALL_B16_FRAYTXEN1 | PINMUX_BALL_B9_FRAYTXEN2" -DRIVER.PINMUX.VAR.MUX131_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX123_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX115_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX107_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX35.VALUE="PINMUX_BALL_D7_N2HET2_02 | PINMUX_BALL_D3_N2HET2_12 | PINMUX_BALL_D2_N2HET2_13 | PINMUX_BALL_D1_N2HET2_14" -DRIVER.PINMUX.VAR.PINMUX27.VALUE="PINMUX_BALL_J18_MIBSPI5SOMI_0 | PINMUX_BALL_E17_MIBSPI5SOMI_1 | PINMUX_BALL_H16_MIBSPI5SOMI_2 | PINMUX_BALL_G16_MIBSPI5SOMI_3" -DRIVER.PINMUX.VAR.PINMUX19.VALUE="PINMUX_BALL_C1_GIOA_2 | PINMUX_BALL_E1_GIOA_3 | PINMUX_BALL_B5_GIOA_5 | PINMUX_BALL_H3_GIOA_6" -DRIVER.PINMUX.VAR.MUX131_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX123_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX115_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX107_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX36.VALUE="PINMUX_BALL_P4_N2HET2_19 | PINMUX_BALL_T5_N2HET2_20 | PINMUX_BALL_T4_MII_RXCLK | PINMUX_BALL_U7_MII_TX_CLK" -DRIVER.PINMUX.VAR.PINMUX28.VALUE="PINMUX_BALL_K18_N2HET1_00 | PINMUX_BALL_V2_N2HET1_01 | PINMUX_BALL_W5_N2HET1_02 | PINMUX_BALL_U1_N2HET1_03" -DRIVER.PINMUX.VAR.MUX131_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX123_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX115_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX107_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX98_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX37.VALUE="PINMUX_BALL_E2_N2HET2_03 | PINMUX_BALL_N3_N2HET2_07" -DRIVER.PINMUX.VAR.PINMUX29.VALUE="PINMUX_BALL_B12_N2HET1_04 | PINMUX_BALL_V6_N2HET1_05 | PINMUX_BALL_W3_N2HET1_06 | PINMUX_BALL_T1_N2HET1_07" -DRIVER.PINMUX.VAR.MUX131_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX123_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX115_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX107_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX98_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX98_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX7_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL3_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX98_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX80.VALUE=SIGNAL_AD2EVT_T10 -DRIVER.PINMUX.VAR.SIGNAL41_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL33_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL25_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL17_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX100_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX98_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.TEMP2_ENABLE.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX81.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL41_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL33_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL25_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL17_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX100_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX98_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX90.VALUE="SIGNAL_MII_RX_DV_U6 | SIGNAL_MII_RX_ER_U5 | SIGNAL_MII_RXCLK_T4 | SIGNAL_MII_RXD_0_U4" -DRIVER.PINMUX.VAR.PINMUX82.VALUE=0 -DRIVER.PINMUX.VAR.MUX127_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX119_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX100_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_133_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_125_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_117_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_109_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX91.VALUE="SIGNAL_MII_RXD_1_T3 | SIGNAL_MII_RXD_2_U3 | SIGNAL_MII_RXD_3_V3 | SIGNAL_MII_TX_CLK_U7" -DRIVER.PINMUX.VAR.PINMUX83.VALUE=SIGNAL_GIOA_0_A5 -DRIVER.PINMUX.VAR.MUX100_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX92.VALUE="SIGNAL_N2HET1_17_A13 | SIGNAL_N2HET1_19_B13 | SIGNAL_N2HET1_21_H4 | SIGNAL_N2HET1_23_J4" -DRIVER.PINMUX.VAR.PINMUX84.VALUE="SIGNAL_GIOA_1_C2 | SIGNAL_GIOA_2_C1 | SIGNAL_GIOA_3_E1 | SIGNAL_GIOA_4_A6" -DRIVER.PINMUX.VAR.MUX100_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX91_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX83_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX75_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX67_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX59_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX93.VALUE="SIGNAL_N2HET1_25_M3 | SIGNAL_N2HET1_27_A9 | SIGNAL_N2HET1_29_A3 | SIGNAL_N2HET1_31_J17" -DRIVER.PINMUX.VAR.PINMUX85.VALUE="SIGNAL_GIOA_5_B5 | SIGNAL_GIOA_6_H3 | SIGNAL_GIOA_7_M1 | SIGNAL_GIOB_0_M2" -DRIVER.PINMUX.VAR.MUX100_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX91_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX83_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX75_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX67_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX59_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.GIOB0_DMA_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.GIOA2_DMA_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.PINMUX94.VALUE="SIGNAL_N2HET2_00_D6 | SIGNAL_N2HET2_01_D8 | SIGNAL_N2HET2_02_D7 | SIGNAL_N2HET2_03_E2" -DRIVER.PINMUX.VAR.PINMUX86.VALUE="SIGNAL_GIOB_1_K2 | SIGNAL_GIOB_2_F2 | SIGNAL_GIOB_3_W10 | SIGNAL_GIOB_4_G1" -DRIVER.PINMUX.VAR.MUX91_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX83_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX75_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX67_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX61_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX59_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX53_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX45_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX37_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX29_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_110_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_102_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX95.VALUE="SIGNAL_N2HET2_04_D13 | SIGNAL_N2HET2_05_D12 | SIGNAL_N2HET2_06_D11 | SIGNAL_N2HET2_07_N3" -DRIVER.PINMUX.VAR.PINMUX87.VALUE="SIGNAL_GIOB_5_G2 | SIGNAL_GIOB_6_J2 | SIGNAL_GIOB_7_F1 | SIGNAL_MDIO_F4" -DRIVER.PINMUX.VAR.MUX91_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX83_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX75_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX67_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX59_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM2_EQEPERR12.VALUE=EQEPERR12 -DRIVER.PINMUX.VAR.PINMUX96.VALUE="SIGNAL_N2HET2_08_K16 | SIGNAL_N2HET2_09_L16 | SIGNAL_N2HET2_10_M16 | SIGNAL_N2HET2_11_N16" -DRIVER.PINMUX.VAR.PINMUX88.VALUE="SIGNAL_MIBSPI1NCS_4_U10 | SIGNAL_MIBSPI1NCS_5_U9" -DRIVER.PINMUX.VAR.SIGNAL10_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX91_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX83_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX75_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX67_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX59_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX6_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX97.VALUE="SIGNAL_N2HET2_12_D3 | SIGNAL_N2HET2_13_D2 | SIGNAL_N2HET2_14_D1 | SIGNAL_N2HET2_15_K4" -DRIVER.PINMUX.VAR.PINMUX89.VALUE="SIGNAL_MII_COL_W4 | SIGNAL_MII_CRS_V4" -DRIVER.PINMUX.VAR.SIGNAL10_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX91_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX83_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX75_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX67_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX59_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX6_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX98.VALUE="SIGNAL_N2HET2_16_L4 | SIGNAL_N2HET2_18_N4 | SIGNAL_N2HET2_20_T5 | SIGNAL_N2HET2_22_T7" -DRIVER.PINMUX.VAR.MUX6_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX99.VALUE="SIGNAL_nTZ1_1_N19 | SIGNAL_nTZ1_2_F1 | SIGNAL_nTZ1_3_J3" -DRIVER.PINMUX.VAR.MUX6_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.EQEP1A_FILTER.VALUE=0 -DRIVER.PINMUX.VAR.MUX60_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX52_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX44_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX36_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX28_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX6_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX60_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX52_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX44_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX36_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX28_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX6_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.EQEP1I_FILTER_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.ETPWM_SOC3A_SELECT.VALUE=ON -DRIVER.PINMUX.VAR.MUX60_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX52_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX44_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX36_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX28_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX60_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX52_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX44_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX36_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX28_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX60_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX52_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX44_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX36_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX28_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX60_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX52_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX44_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX36_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX28_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.TEMP3_ENABLE_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX120_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX112_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX104_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_94_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_86_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_78_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_3_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX21_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX13_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX21_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX13_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM3_EQEPERR_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.GIOA_DISABLE_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX30_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX22_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX21_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX14_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX13_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_71_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_63_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_55_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_47_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_39_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX21_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX13_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL4_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX21_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX13_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL4_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX21_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX13_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX95_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX87_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX79_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL61_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL53_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL45_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL37_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL29_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_40_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_32_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_24_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_16_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.ECAP3_FILTER.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM7_EQEPERR12.VALUE=EQEPERR12 -DRIVER.PINMUX.VAR.MUX129_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX129_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_TBCLK_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX129_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL30_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL22_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL14_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX129_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX129_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX129_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.I2C1.VALUE=0 -DRIVER.PINMUX.VAR.I2C2.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL55_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL47_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL39_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX130_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX122_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX114_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX106_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL55_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL47_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL39_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX130_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX122_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX114_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX106_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX130_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX122_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX114_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX106_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL8_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.GATE_EMIF_CLK.VALUE=0 -DRIVER.PINMUX.VAR.MUX130_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX122_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX114_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX106_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX130_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX122_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX114_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX106_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX97_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX89_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX130_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX122_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX114_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX106_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX97_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX89_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.EQEP1A_FILTER_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX97_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX89_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX80_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX72_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX64_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX56_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX48_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL1_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.GIOA0_DMA.VALUE=0 -DRIVER.PINMUX.VAR.MUX97_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX89_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL40_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL32_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL24_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL16_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX97_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX89_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL40_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL32_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL24_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL16_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX97_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX89_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.GIOB5_DMA_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.GIOA7_DMA_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.PIN_MUX_131_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_123_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_115_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_107_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX90_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX82_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX74_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX66_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX58_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX90_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX82_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX74_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX66_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX58_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX90_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX82_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX74_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX66_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX58_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX3_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_100_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX90_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX82_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX74_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX66_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX58_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX90_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX82_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX74_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX66_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX58_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX5_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX90_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX82_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX74_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX66_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX58_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX5_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.EQEP1S_FILTER_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX131_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX123_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX115_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX107_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX5_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX5_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX51_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX43_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX35_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX27_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX19_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX5_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX51_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX43_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX35_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX27_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX19_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX5_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.GIOA1_DMA_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.ECAP5_FILTER_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.ETPWM_SOC2A_SELECT.VALUE=ON -DRIVER.PINMUX.VAR.MUX51_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX43_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX41_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX35_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX33_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX27_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX25_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX19_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX17_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_99_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_8_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.GIOA1_DMA.VALUE=0 -DRIVER.PINMUX.VAR.MUX51_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX43_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX35_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX27_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX19_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX51_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX43_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX35_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX27_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX19_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX51_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX43_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX35_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX27_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX19_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.ALT_ADC_SELECT.VALUE=1 -DRIVER.PINMUX.VAR.MUX98_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_92_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_84_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_76_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_68_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_1_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX20_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX12_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX20_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX12_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX20_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX12_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL58_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_61_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_53_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_45_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_37_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_29_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX20_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX12_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL3_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX20_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX12_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL3_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX20_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX12_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX100_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL51_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL43_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL35_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL27_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL19_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_30_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_22_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_14_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.ECAP1_FILTER.VALUE=0 -DRIVER.PINMUX.VAR.CAN4.VALUE=0 -DRIVER.PINMUX.VAR.MUX128_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX128_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX128_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX10_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL20_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL12_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.GIOB0_DMA.VALUE=0 -DRIVER.PINMUX.VAR.GIOA2_DMA.VALUE=0 -DRIVER.PINMUX.VAR.MUX128_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX128_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX128_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.ETHERNET_SELECT.VALUE=MII -DRIVER.PINMUX.VAR.MUX91_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX83_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX75_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX67_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX59_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM5_EQEPERR12.VALUE=EQEPERR12 -DRIVER.PINMUX.VAR.CONCOUNT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL54_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL46_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL38_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX121_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX113_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX105_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL54_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL46_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL38_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX121_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX113_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX105_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.EQEP2I_FILTER_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX121_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX113_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX105_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL6_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX121_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX113_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX105_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX121_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX113_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX105_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX96_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX88_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX121_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX113_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX105_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX96_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX88_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX96_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX88_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX6_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_128_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX96_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX88_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL31_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL23_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL15_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX96_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX88_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.TEMP_CHECK.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL31_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL23_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL15_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX96_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX88_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM4_EQEPERR_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.GIOB_DISABLE_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX134_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX126_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX118_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_121_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_113_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_105_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.GIOB1_DMA.VALUE=0 -DRIVER.PINMUX.VAR.GIOA3_DMA.VALUE=0 -DRIVER.PINMUX.VAR.EQEP2I_FILTER.VALUE=0 -DRIVER.PINMUX.VAR.MUX81_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX73_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX65_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX57_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX49_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX81_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX73_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX65_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX57_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX49_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_TZ2_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX81_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX73_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX65_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX60_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX57_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX52_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX49_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX44_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX36_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX28_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX81_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX73_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX65_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX57_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX49_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.EQEP2B_FILTER.VALUE=0 -DRIVER.PINMUX.VAR.MUX81_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX73_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX65_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX57_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX49_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX4_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX81_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX73_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX65_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX57_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX49_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX4_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.GIOB4_DMA_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.GIOA6_DMA_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.ECAP.VALUE=0 -DRIVER.PINMUX.VAR.MUX4_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX4_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX50_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX42_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX34_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX26_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX18_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX4_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX50_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX42_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX34_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX26_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX18_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX4_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_SOC1A_SELECT.VALUE=ON -DRIVER.PINMUX.VAR.MUX50_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX42_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX34_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX26_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX18_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_97_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_89_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_6_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX50_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX42_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX34_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX26_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX18_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL9_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX50_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX42_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX34_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX26_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX18_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL9_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX50_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX42_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX34_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX26_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX18_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.ECAP2_FILTER_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX111_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX103_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_90_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_82_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_74_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_66_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_58_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.GIOB2_DMA.VALUE=0 -DRIVER.PINMUX.VAR.GIOA4_DMA.VALUE=0 -DRIVER.PINMUX.VAR.MUX11_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX11_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.GIOA0_DMA_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.EQEP2A_FILTER_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX21_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX13_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX11_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL56_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL48_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_51_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_43_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_35_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_27_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_19_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX11_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.ECAP6_FILTER.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL2_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX11_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_TBCLK_SYNC_ENABLE.VALUE=0 -DRIVER.PINMUX.VAR.AD1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL2_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX11_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.AD2.VALUE=0 -DRIVER.PINMUX.VAR.MUX94_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX86_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX78_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL41_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL33_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL25_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL17_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_20_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_12_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX127_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX119_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX127_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX119_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX127_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX119_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL10_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX127_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX119_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX127_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX119_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX127_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX119_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.EQEP2S_FILTER_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX9_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.GIOB3_DMA.VALUE=0 -DRIVER.PINMUX.VAR.GIOA5_DMA.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL61_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL53_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL45_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL37_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL29_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX120_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX112_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX104_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL61_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL53_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL45_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL37_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL29_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX120_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX112_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX104_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX129_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX120_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX112_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX104_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL4_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.ALT_ADC.VALUE=0 -DRIVER.PINMUX.VAR.I2C.VALUE=0 -DRIVER.PINMUX.VAR.MUX120_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX112_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX104_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX120_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX112_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX104_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX95_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX87_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX79_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.TEMP3_ENABLE.VALUE=0 -DRIVER.PINMUX.VAR.MUX120_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX112_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX104_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX95_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX87_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX79_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX95_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX87_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX79_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX71_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX63_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX55_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX47_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX39_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_134_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_126_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_118_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX95_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX87_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX79_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM3_EQEPERR12.VALUE=EQEPERR12 -DRIVER.PINMUX.VAR.SIGNAL30_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL22_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL14_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX95_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX87_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX79_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL30_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL22_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL14_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX95_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX87_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX79_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.TEMP2_ENABLE_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.PIN_MUX_111_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_103_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.EQEP1I_FILTER.VALUE=0 -DRIVER.PINMUX.VAR.MUX80_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX72_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX64_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX56_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX48_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.HET1.VALUE=0 -DRIVER.PINMUX.VAR.MUX80_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX72_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX64_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX56_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX48_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_SOC7A_SELECT.VALUE=ON -DRIVER.PINMUX.VAR.HET2.VALUE=0 -DRIVER.PINMUX.VAR.MUX80_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX72_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX64_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX56_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX48_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX2_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.GIOB4_DMA.VALUE=0 -DRIVER.PINMUX.VAR.GIOA6_DMA.VALUE=0 -DRIVER.PINMUX.VAR.MUX80_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX72_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX64_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX56_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX48_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.EQEP1B_FILTER.VALUE=0 -DRIVER.PINMUX.VAR.MUX80_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX72_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX64_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX56_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX48_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX3_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX80_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX72_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX64_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX56_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX48_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX3_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX130_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX122_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX114_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX106_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX3_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX3_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.EMIF.VALUE=0 -DRIVER.PINMUX.VAR.MUX41_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX33_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX25_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX17_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX3_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_TZ1.VALUE=ASYNC -DRIVER.PINMUX.VAR.MUX41_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX33_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX25_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX17_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX3_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_TZ2.VALUE=ASYNC -DRIVER.PINMUX.VAR.MUX41_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX40_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX33_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX32_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX25_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX24_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX17_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX16_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_95_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_87_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_79_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_4_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_TZ3.VALUE=ASYNC -DRIVER.PINMUX.VAR.MUX41_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX33_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX25_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX17_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL8_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX41_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX33_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX25_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX17_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL8_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX41_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX33_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX25_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX17_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.GIOB3_DMA_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.GIOA5_DMA_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX97_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX89_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_80_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_72_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_64_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_56_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_48_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.GIOA.VALUE=0 -DRIVER.PINMUX.VAR.GIOB.VALUE=0 -DRIVER.PINMUX.VAR.MUX10_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.GIOB_DISABLE.VALUE=0 -DRIVER.PINMUX.VAR.MUX10_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX10_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL54_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL46_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL38_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_41_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_33_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_25_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_17_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.GIOB5_DMA.VALUE=0 -DRIVER.PINMUX.VAR.GIOA7_DMA.VALUE=0 -DRIVER.PINMUX.VAR.MUX10_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.ECAP4_FILTER.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL1_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX10_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL1_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX10_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM5_EQEPERR_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.SIGNAL31_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL23_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL15_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_10_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL59_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX134_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX126_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX118_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL59_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX134_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX126_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX118_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.EQEP.VALUE=0 -DRIVER.PINMUX.VAR.MUX134_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX126_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX118_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX134_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX126_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX118_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX134_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX126_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX118_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX134_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX126_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX118_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX90_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX82_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX74_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX66_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX58_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL9_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MIBSPI1.VALUE=0 -DRIVER.PINMUX.VAR.MIBSPI2.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL60_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL52_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL44_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL36_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL28_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX111_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX103_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MIBSPI3.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL60_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL52_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL44_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL36_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL28_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX111_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX103_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MIBSPI4.VALUE=0 -DRIVER.PINMUX.VAR.OHCI0.VALUE=0 -DRIVER.PINMUX.VAR.MUX111_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX103_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL2_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.GIOB6_DMA.VALUE=0 -DRIVER.PINMUX.VAR.MIBSPI5.VALUE=0 -DRIVER.PINMUX.VAR.W2FC.VALUE=0 -DRIVER.PINMUX.VAR.OHCI1.VALUE=0 -DRIVER.PINMUX.VAR.MUX111_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX103_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.EQEP2S_FILTER.VALUE=0 -DRIVER.PINMUX.VAR.MUX111_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX103_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX94_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX86_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX78_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.TEMP1_ENABLE.VALUE=0 -DRIVER.PINMUX.VAR.MUX111_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX103_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX94_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX86_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX78_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.ECAP4_FILTER_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX94_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX86_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX78_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX5_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_132_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_124_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_116_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_108_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX94_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX86_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX78_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL21_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL13_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX94_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX86_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX78_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX9_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL21_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL13_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX94_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX86_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX78_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX9_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX133_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX125_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX117_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX109_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX9_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_101_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX9_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX71_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX63_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX55_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX47_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX39_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX9_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX71_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX63_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX55_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX47_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX39_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX9_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_SOC6A_SELECT.VALUE=ON -DRIVER.PINMUX.VAR.MUX71_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX63_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX55_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX51_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX47_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX43_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX39_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX35_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX27_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX19_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX71_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX63_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX55_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX47_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX39_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM1_EQEPERR12.VALUE=EQEPERR12 -DRIVER.PINMUX.VAR.MUX71_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX63_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX55_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX47_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX39_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX2_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.EMIF_OUTPUT_ENABLE.VALUE=0 -DRIVER.PINMUX.VAR.MUX71_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX63_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX55_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX47_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX39_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX2_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM1_EQEPERR_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX2_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_9_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.GIOB7_DMA.VALUE=0 -DRIVER.PINMUX.VAR.MUX2_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX40_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX32_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX24_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX16_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX2_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX40_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX32_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX24_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX16_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX2_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_EPWM1SYNCI_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX40_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX32_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX24_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX16_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_93_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_85_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_77_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_69_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_2_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX40_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX32_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX24_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX16_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL7_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX40_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX32_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX24_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX16_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL7_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX40_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX32_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX24_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX16_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX110_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX102_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL59_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_70_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_62_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_54_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_46_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_38_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MII.VALUE=0 -DRIVER.PINMUX.VAR.SCI2.VALUE=0 -DRIVER.PINMUX.VAR.GIOA_DISABLE.VALUE=0 -DRIVER.PINMUX.VAR.SCI3.VALUE=0 -DRIVER.PINMUX.VAR.GATE_EMIF_CLK_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.SCI4.VALUE=0 -DRIVER.PINMUX.VAR.MUX20_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX12_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL60_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL52_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL44_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL36_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL28_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_31_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_23_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_15_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.ECAP2_FILTER.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_TIME_BASE_SYNC_ENABLE.VALUE=0 -DRIVER.PINMUX.VAR.GIOB2_DMA_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.GIOA4_DMA_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX93_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX85_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX77_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX69_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL21_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL13_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_EPWM1SYNCI.VALUE=ASYNC -DRIVER.PINMUX.VAR.ETPWM6_EQEPERR12.VALUE=EQEPERR12 -DRIVER.PINMUX.VAR.SIGNAL58_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX133_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX125_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX117_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX109_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL58_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX133_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX125_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX117_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX109_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX133_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX125_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX117_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX109_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_SOC1A.VALUE=1 -DRIVER.PINMUX.VAR.SCI.VALUE=0 -DRIVER.PINMUX.VAR.MUX133_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX125_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX117_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX109_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX133_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX125_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX117_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX109_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_SOC2A.VALUE=1 -DRIVER.PINMUX.VAR.MUX133_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX125_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX117_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX109_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX8_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL7_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_SOC3A.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL51_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL43_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL35_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL27_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL19_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX110_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX102_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_SOC4A.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL51_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL43_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL35_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL27_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL19_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX110_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX102_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX128_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX110_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX102_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_129_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_SOC5A.VALUE=1 -DRIVER.PINMUX.VAR.ETPWM.VALUE=0 -DRIVER.PINMUX.VAR.MUX110_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX102_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.EQEP1S_FILTER.VALUE=0 -DRIVER.PINMUX.VAR.MUX110_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX102_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX93_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX85_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX77_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX69_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_SOC6A.VALUE=1 -DRIVER.PINMUX.VAR.MUX110_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX102_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX93_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX85_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX77_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX69_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX93_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX85_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX77_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX70_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX69_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX62_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX54_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX46_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX38_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_130_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_122_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_114_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_106_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_SOC7A.VALUE=1 -DRIVER.PINMUX.VAR.MUX93_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX85_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX77_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX69_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL20_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL12_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX93_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX85_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX77_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX69_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX8_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL20_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL12_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX93_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX85_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX77_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX69_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX8_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.ECAP1_FILTER_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.ETPWM_TZ3_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX8_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX8_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX70_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX62_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX54_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX46_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX38_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX8_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX70_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX62_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX54_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX46_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX38_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX8_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.EQEP1B_FILTER_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.ETPWM_SOC5A_SELECT.VALUE=ON -DRIVER.PINMUX.VAR.ETPWM6_EQEPERR_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX70_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX62_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX54_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX46_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX38_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX1_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX70_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX62_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX54_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX46_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX38_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX70_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX62_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX54_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX46_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX38_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX1_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX70_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX62_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX54_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX46_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX38_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX1_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX121_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX113_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX105_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX1_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_98_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_7_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX1_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX31_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX23_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX15_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX1_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX31_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX23_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX15_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX1_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX31_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX31_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX23_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX23_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX15_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX15_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_91_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_83_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_75_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_67_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_59_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX31_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX23_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX15_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL6_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX31_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX23_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX15_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL6_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX31_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX23_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX15_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX96_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX88_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL57_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL49_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_60_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_52_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_44_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_36_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_28_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.GIOB7_DMA_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.ECAP6_FILTER_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.SIGNAL50_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL42_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL34_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL26_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL18_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_21_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_13_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL11_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.SPI2.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL57_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL49_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX132_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX124_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX116_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX108_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL57_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL49_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX132_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX124_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX116_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX108_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.TEMP1_ENABLE_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.SPI4.VALUE=0 -DRIVER.PINMUX.VAR.MUX132_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX124_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX116_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX108_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.RMII.VALUE=0 -DRIVER.PINMUX.VAR.MUX132_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX124_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX116_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX108_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX0.VALUE="PINMUX_BALL_N19_AD1EVT | PINMUX_BALL_D4_EMIF_ADDR_00 | PINMUX_BALL_D5_EMIF_ADDR_01 | PINMUX_BALL_C4_EMIF_ADDR_06" -DRIVER.PINMUX.VAR.MUX132_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX124_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX116_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX108_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX99_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX1.VALUE="PINMUX_BALL_C5_EMIF_ADDR_07 | PINMUX_BALL_C6_EMIF_ADDR_08 | PINMUX_BALL_C7_EMIF_ADDR_09 | PINMUX_BALL_C8_EMIF_ADDR_10" -DRIVER.PINMUX.VAR.MUX132_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX124_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX116_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX108_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX99_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.GIOB1_DMA_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.GIOA3_DMA_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.ETPWM2_EQEPERR_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.PINMUX2.VALUE="PINMUX_BALL_C9_EMIF_ADDR_11 | PINMUX_BALL_C10_EMIF_ADDR_12 | PINMUX_BALL_C11_EMIF_ADDR_13 | PINMUX_BALL_C12_EMIF_ADDR_14" -DRIVER.PINMUX.VAR.MUX99_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX81_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX73_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX65_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX57_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX49_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL5_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX3.VALUE="PINMUX_BALL_C13_EMIF_ADDR_15 | PINMUX_BALL_D14_EMIF_ADDR_16 | PINMUX_BALL_C14_EMIF_ADDR_17 | PINMUX_BALL_D15_EMIF_ADDR_18" -DRIVER.PINMUX.VAR.MUX99_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM4_EQEPERR12.VALUE=EQEPERR12 -DRIVER.PINMUX.VAR.PINMUX4.VALUE="PINMUX_BALL_C15_EMIF_ADDR_19 | PINMUX_BALL_C16_EMIF_ADDR_20 | PINMUX_BALL_C17_EMIF_ADDR_21" -DRIVER.PINMUX.VAR.SIGNAL50_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL42_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL34_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL26_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.SIGNAL18_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX101_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX99_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX5.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL50_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL42_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL34_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL26_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL18_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX101_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX99_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX6.VALUE=0 -DRIVER.PINMUX.VAR.MUX101_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_127_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_119_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.ALT_ADC_A.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX7.VALUE=0 -DRIVER.PINMUX.VAR.MUX101_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.ALT_ADC_B.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX8.VALUE=PINMUX_BALL_D16_EMIF_BA_1 -DRIVER.PINMUX.VAR.MUX101_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX92_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX84_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX76_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX68_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.PINMUX9.VALUE="PINMUX_BALL_R4_EMIF_nCAS | PINMUX_BALL_N17_EMIF_nCS_0 | PINMUX_BALL_L17_EMIF_nCS_2" -DRIVER.PINMUX.VAR.MUX101_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX92_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX84_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX76_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX68_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX92_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX84_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX76_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX68_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX4_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_120_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_112_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_104_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.MUX92_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX84_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX76_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.MUX68_OPTION3.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL11_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX92_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX84_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX76_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX68_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX7_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.SIGNAL11_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX92_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX84_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX76_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX68_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX7_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.ETPWM_TZ1_SELECT.VALUE=OFF -DRIVER.PINMUX.VAR.MUX132_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX124_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX116_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX108_CONFLICT.VALUE=0 -DRIVER.PINMUX.VAR.MUX7_OPTION2.VALUE=0 -DRIVER.PINMUX.VAR.MUX7_OPTION3.VALUE=0 -DRIVER.CRC.VAR.HTU_CPB_7_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC1_CH1_URI.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC1_CH2_TOE.VALUE=0x00000000 -DRIVER.CRC.VAR.HTU_DCP0_TRDIR_1.VALUE=HET_TO_MAIN_MEM -DRIVER.CRC.VAR.CRC2_CH2_WDTO.VALUE=0 -DRIVER.CRC.VAR.HTU_ICPBL_7_SEL_1.VALUE=HIGH -DRIVER.CRC.VAR.HTU_ICPA_5_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.HTU_ICPB_1_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.HTU_DEBMOD_1.VALUE=0 -DRIVER.CRC.VAR.CRC1_CH2_URI.VALUE=0x00000000 -DRIVER.CRC.VAR.HTU_ICPAL_1_SEL_1.VALUE=HIGH -DRIVER.CRC.VAR.HTU_ENABUS_1.VALUE=0 -DRIVER.CRC.VAR.CRC1_CH2_MODE.VALUE=FULL_CPU -DRIVER.CRC.VAR.HTU_CPA_2_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC2_CH1_PSSIH.VALUE=0 -DRIVER.CRC.VAR.CRC2_CH1_PSSIL.VALUE=0 -DRIVER.CRC.VAR.HTU_MP1_ACC_1.VALUE=READ_ONLY -DRIVER.CRC.VAR.HTU_CONTPAR_1.VALUE=0 -DRIVER.CRC.VAR.HTU_ICPB_6_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.HTU_DCP0_EC_1.VALUE=0 -DRIVER.CRC.VAR.HTU_DCP0_CPBFULADD_1.VALUE=0 -DRIVER.CRC.VAR.HTU_ICPAL_6_SEL_1.VALUE=HIGH -DRIVER.CRC.VAR.CRC1_CH1_PSIH.VALUE=0 -DRIVER.CRC.VAR.HTU_CPA_7_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.HTU_CPB_3_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC1_BASE.VALUE=0xFE000000 -DRIVER.CRC.VAR.CRC1_CH1_PSIL.VALUE=0 -DRIVER.CRC.VAR.HTU_DCP0_FC_1.VALUE=0 -DRIVER.CRC.VAR.HTU_BASE.VALUE=0xFFF7A400 -DRIVER.CRC.VAR.HTU_ICPBL_3_SEL_1.VALUE=HIGH -DRIVER.CRC.VAR.HTU_ICPA_1_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC1_CH1_WDTO.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC1_CH2_PSIH.VALUE=0 -DRIVER.CRC.VAR.CRC2_BASE.VALUE=0xFB000000 -DRIVER.CRC.VAR.CRC1_CH2_PSIL.VALUE=0 -DRIVER.CRC.VAR.HTU_ICPA_6_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.HTU_ICPB_2_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.HTU_DCP0_CPAFULADD_1.VALUE=0 -DRIVER.CRC.VAR.HTU_ICPAL_2_SEL_1.VALUE=HIGH -DRIVER.CRC.VAR.HTU_CPA_3_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC2_CH2_PSSIH.VALUE=0 -DRIVER.CRC.VAR.CRC2_CH2_PSSIL.VALUE=0 -DRIVER.CRC.VAR.HTU_MP1_STADD_1.VALUE=0 -DRIVER.CRC.VAR.HTU_ICPB_7_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC1_CH2_WDTO.VALUE=0x00000000 -DRIVER.CRC.VAR.HTU_ICPAL_7_SEL_1.VALUE=HIGH -DRIVER.CRC.VAR.HTU_CPB_4_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC2_CH1_BCTO.VALUE=0 -DRIVER.CRC.VAR.HTU_MP0_ENA_1.VALUE=0 -DRIVER.CRC.VAR.HTU_ICPBL_4_SEL_1.VALUE=HIGH -DRIVER.CRC.VAR.HTU_ICPA_2_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.HTU_PAR_1.VALUE=0 -DRIVER.CRC.VAR.HTU_CONT_1.VALUE=0 -DRIVER.CRC.VAR.HTU_ENAREQ_1.VALUE=0 -DRIVER.CRC.VAR.CRC2_CH2_BCTO.VALUE=0 -DRIVER.CRC.VAR.HTU_MP1_ERRENA_1.VALUE=0 -DRIVER.CRC.VAR.HTU_MP0_STADD_1.VALUE=0 -DRIVER.CRC.VAR.HTU_ICPA_7_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.HTU_ICPB_3_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.HTU_ICPAL_3_SEL_1.VALUE=HIGH -DRIVER.CRC.VAR.HTU_CPA_4_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.HTU_CPB_0_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.HTU_DCP0_MMADD_1.VALUE=POST_INCREMENT -DRIVER.CRC.VAR.CRC2_CH1_CCI.VALUE=0x00000000 -DRIVER.CRC.VAR.HTU_ENAINTMAP_1.VALUE=0 -DRIVER.CRC.VAR.CRC2_CH1_CFI.VALUE=0x00000000 -DRIVER.CRC.VAR.HTU_ICPBL_0_SEL_1.VALUE=HIGH -DRIVER.CRC.VAR.HTU_CPB_5_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC2_CH2_CCI.VALUE=0x00000000 -DRIVER.CRC.VAR.HTU_MP1_ENA_1.VALUE=0 -DRIVER.CRC.VAR.CRC1_CH2_MODE_VALUE.VALUE=0x0001 -DRIVER.CRC.VAR.HTU_DCP0_HETADD.VALUE=0 -DRIVER.CRC.VAR.CRC2_CH2_CFI.VALUE=0x00000000 -DRIVER.CRC.VAR.HTU_ICPBL_5_SEL_1.VALUE=HIGH -DRIVER.CRC.VAR.HTU_ICPA_3_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC2_CH1_DTE.VALUE=0 -DRIVER.CRC.VAR.CRC2_CH1_CVH.VALUE=0 -DRIVER.CRC.VAR.HTU_CPA_0_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.HTU_RES_1.VALUE=0 -DRIVER.CRC.VAR.CRC1_CH1_BCTO.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC2_CH1_CVL.VALUE=0 -DRIVER.CRC.VAR.HTU_DCP0_CPATMOD_1.VALUE=POST_INCREMENT -DRIVER.CRC.VAR.CRC1_CH1_CCI.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC2_CH1_MODE.VALUE=FULL_CPU -DRIVER.CRC.VAR.CRC1_CH1_PSSIH.VALUE=0 -DRIVER.CRC.VAR.CRC2_CH2_DTE.VALUE=1 -DRIVER.CRC.VAR.CRC1_CH1_CFI.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC1_CH1_PSSIL.VALUE=0 -DRIVER.CRC.VAR.HTU_MP1_ENDADD_1.VALUE=0 -DRIVER.CRC.VAR.HTU_ICPB_4_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC2_CH2_CVH.VALUE=0 -DRIVER.CRC.VAR.HTU_ICPAL_4_SEL_1.VALUE=HIGH -DRIVER.CRC.VAR.CRC2_CH2_CVL.VALUE=0 -DRIVER.CRC.VAR.CRC2_CH1_PCP.VALUE=0 -DRIVER.CRC.VAR.HTU_CPA_5_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.HTU_CPB_1_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC1_CH2_CCI.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC1_CH2_CFI.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC2_CH1_SCP.VALUE=0 -DRIVER.CRC.VAR.HTU_VBHOLD_1.VALUE=0 -DRIVER.CRC.VAR.CRC1_CH2_BCTO.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC1_CH1_MODE_VALUE.VALUE=0x0001 -DRIVER.CRC.VAR.CRC2_CH2_PCP.VALUE=0 -DRIVER.CRC.VAR.HTU_MP0_ERRENA_1.VALUE=0 -DRIVER.CRC.VAR.HTU_ICPBL_1_SEL_1.VALUE=HIGH -DRIVER.CRC.VAR.CRC2_CH1_PSA.VALUE=1 -DRIVER.CRC.VAR.CRC2_CH2_MODE.VALUE=FULL_CPU -DRIVER.CRC.VAR.CRC2_CH1_ORI.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC1_CH1_DTE.VALUE=0 -DRIVER.CRC.VAR.HTU_CPB_6_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC1_CH1_CVH.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC1_CH1_CVL.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC2_CH2_SCP.VALUE=0 -DRIVER.CRC.VAR.CRC2_CH2_MODE_VALUE.VALUE=0x0001 -DRIVER.CRC.VAR.CRC2_CH1_TOE.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC2_CH2_PSA.VALUE=1 -DRIVER.CRC.VAR.CRC2_CH2_ORI.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC1_CH2_DTE.VALUE=1 -DRIVER.CRC.VAR.HTU_DCP0_TRDAT_1.VALUE=32BIT -DRIVER.CRC.VAR.HTU_ICPBL_6_SEL_1.VALUE=HIGH -DRIVER.CRC.VAR.HTU_ICPA_4_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.HTU_ICPB_0_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC1_CH2_CVH.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC2_CH1_PSIH.VALUE=0 -DRIVER.CRC.VAR.HTU_ICPAL_0_SEL_1.VALUE=HIGH -DRIVER.CRC.VAR.CRC1_CH2_CVL.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC2_CH1_URI.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC2_CH1_PSIL.VALUE=0 -DRIVER.CRC.VAR.CRC1_CH1_PCP.VALUE=0x00000000 -DRIVER.CRC.VAR.HTU_CPA_1_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC2_CH2_TOE.VALUE=0x00000000 -DRIVER.CRC.VAR.HTU_DCP0_CPBTMOD_1.VALUE=POST_INCREMENT -DRIVER.CRC.VAR.CRC1_CH2_PSSIH.VALUE=0 -DRIVER.CRC.VAR.HTU_MP0_ACC_1.VALUE=READ_ONLY -DRIVER.CRC.VAR.CRC1_CH2_PSSIL.VALUE=0 -DRIVER.CRC.VAR.CRC1_CH1_SCP.VALUE=0x00000000 -DRIVER.CRC.VAR.HTU_ICPB_5_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC2_CH2_URI.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC1_CH2_PCP.VALUE=0x00000000 -DRIVER.CRC.VAR.HTU_ICPAL_5_SEL_1.VALUE=HIGH -DRIVER.CRC.VAR.CRC1_CH1_PSA.VALUE=1 -DRIVER.CRC.VAR.CRC1_CH1_ORI.VALUE=0x00000000 -DRIVER.CRC.VAR.HTU_DCP0_ADMOD_1.VALUE=INCREMENT_16BIT -DRIVER.CRC.VAR.HTU_CPA_6_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.HTU_CPB_2_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC2_CH1_WDTO.VALUE=0 -DRIVER.CRC.VAR.CRC2_CH2_PSIH.VALUE=0 -DRIVER.CRC.VAR.CRC1_CH2_SCP.VALUE=0x00000000 -DRIVER.CRC.VAR.HTU_ENA_1.VALUE=0 -DRIVER.CRC.VAR.CRC1_CH1_TOE.VALUE=0x00000000 -DRIVER.CRC.VAR.CRC1_CH1_MODE.VALUE=FULL_CPU -DRIVER.CRC.VAR.CRC2_CH2_PSIL.VALUE=0 -DRIVER.CRC.VAR.CRC1_CH2_PSA.VALUE=1 -DRIVER.CRC.VAR.CRC1_CH2_ORI.VALUE=0x00000000 -DRIVER.CRC.VAR.HTU_MP0_ENDADD_1.VALUE=0 -DRIVER.CRC.VAR.HTU_ICPBL_2_SEL_1.VALUE=HIGH -DRIVER.CRC.VAR.HTU_ICPA_0_SEL_1.VALUE=ENABLE -DRIVER.CRC.VAR.CRC2_CH1_MODE_VALUE.VALUE=0x0001 -DRIVER.EMAC.VAR.EMAC_PHY_CUSTOM.VALUE=0 -DRIVER.EMAC.VAR.EMAC_ADD1.VALUE=FF -DRIVER.EMAC.VAR.EMAC_ADD2.VALUE=FF -DRIVER.EMAC.VAR.EMAC_ADD3.VALUE=FF -DRIVER.EMAC.VAR.EMAC_ADD4.VALUE=FF -DRIVER.EMAC.VAR.EMAC_ADD5.VALUE=FF -DRIVER.EMAC.VAR.EMAC_ADD6.VALUE=FF -DRIVER.EMAC.VAR.EMAC_CTRL_BASE.VALUE=0xFCF78800 -DRIVER.EMAC.VAR.EMAC_PHY_DP83640.VALUE=1 -DRIVER.EMAC.VAR.EMAC_LOOPBACK_ENA.VALUE=0 -DRIVER.EMAC.VAR.MDIO_BASE.VALUE=0xFCF78900 -DRIVER.EMAC.VAR.EMAC_BASE.VALUE=0xFCF78000 -DRIVER.EMAC.VAR.EMAC_BASE_PORT.VALUE=0xFFFFFFFF -DRIVER.EMAC.VAR.EMAC_TRANSMIT_ENA.VALUE=1 -DRIVER.EMAC.VAR.EMAC_PHY_TLK111.VALUE=0 -DRIVER.EMAC.VAR.EMAC_CHANNELNUMBER.VALUE=0 -DRIVER.EMAC.VAR.EMAC_RX_PBUF_ALLOC.VALUE=10 -DRIVER.EMAC.VAR.EMAC_UNICAST_ENA.VALUE=1 -DRIVER.EMAC.VAR.EMAC_FULL_DUPLEX_ENA.VALUE=1 -DRIVER.EMAC.VAR.EMAC_PHYADDRESS.VALUE=1 -DRIVER.EMAC.VAR.EMAC_MII_ENA.VALUE=1 -DRIVER.EMAC.VAR.EMAC_CTRL_RAM_BASE.VALUE=0xFC520000 -DRIVER.EMAC.VAR.EMAC_BROADCAST_ENA.VALUE=1 -DRIVER.EMAC.VAR.EMAC_RECEIVE_ENA.VALUE=1 -DRIVER.EMIF.VAR.EMIF_ASYNC2_TAVAV.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC1_TD.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC3_EXTENDED_WAIT.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC1_TH.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC2_TA.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC3_WAIT.VALUE=pin0 -DRIVER.EMIF.VAR.EMIF_ASYNC2_TD.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC2_NOR_FLASH.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC2_TEHQZ.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC2_TH.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC3_TA.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC3_TD.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ENA_SDRAM.VALUE=1 -DRIVER.EMIF.VAR.EMIF_ASYNC3_TH.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC2_TELQV.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC2_PAGE_MODE.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC1_ENA.VALUE=1 -DRIVER.EMIF.VAR.EMIF_SDRAM_REFRESH_CYCLES.VALUE=0 -DRIVER.EMIF.VAR.EMIF_AVAILABLE.VALUE=1 -DRIVER.EMIF.VAR.EMIF_SDRAM_TRC_MAX.VALUE=213 -DRIVER.EMIF.VAR.EMIF_ASYNC3_TEHEL.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC2_ENA.VALUE=1 -DRIVER.EMIF.VAR.EMIF_ASYNC1_R_STROBE.VALUE=63 -DRIVER.EMIF.VAR.EMIF_SDRAM_TRAS_MAX.VALUE=213 -DRIVER.EMIF.VAR.EMIF_ASYNC3_TELEH.VALUE=0 -DRIVER.EMIF.VAR.EMIF_SDRAM_TRRD_MAX.VALUE=107 -DRIVER.EMIF.VAR.EMIF_ASYNC3_STROBE_MODE.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC3_ENA.VALUE=1 -DRIVER.EMIF.VAR.EMIF_ASYNC1_ASIZE.VALUE=8_bit -DRIVER.EMIF.VAR.EMIF_SDRAM_TRC_VAL.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC3_TAVAV.VALUE=0 -DRIVER.EMIF.VAR.EMIF_SDRAM_BANKS.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC1_PAGE_DELAY_VAL.VALUE=0 -DRIVER.EMIF.VAR.EMIF_SDRAM_TRAS_VAL.VALUE=0 -DRIVER.EMIF.VAR.EMIF_SDRAM_TRRD_VAL.VALUE=0 -DRIVER.EMIF.VAR.EMIF_BASE.VALUE=0xFCFFE800 -DRIVER.EMIF.VAR.EMIF_ASYNC3_TEHQZ.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC1_W_STROBE.VALUE=63 -DRIVER.EMIF.VAR.EMIF_ASYNC3_TELQV.VALUE=0 -DRIVER.EMIF.VAR.EMIF_SDRAM_TXSR_MAX.VALUE=427 -DRIVER.EMIF.VAR.EMIF_ASYNC2_PAGE_SIZE.VALUE=4_words -DRIVER.EMIF.VAR.EMIF_CLKFRQ.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC3_W_HOLD.VALUE=7 -DRIVER.EMIF.VAR.EMIF_ASYNC2_R_HOLD.VALUE=7 -DRIVER.EMIF.VAR.EMIF_SDRAM_TREFRESH_VAL.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC3_R_SETUP.VALUE=15 -DRIVER.EMIF.VAR.EMIF_SDRAM_TXSR_VAL.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC1_TSU.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC2_EXTENDED_WAIT.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC2_ASIZE.VALUE=8_bit -DRIVER.EMIF.VAR.EMIF_ASYNC2_TSU.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC3_W_SETUP.VALUE=15 -DRIVER.EMIF.VAR.EMIF_ASYNC3_NOR_FLASH.VALUE=0 -DRIVER.EMIF.VAR.EMIF_SDRAM_TWR_MAX.VALUE=107 -DRIVER.EMIF.VAR.EMIF_ASYNC2_PAGE_DELAY_VAL.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC1_W_HOLD.VALUE=7 -DRIVER.EMIF.VAR.EMIF_SDRAM_INIT_TIME.VALUE=200 -DRIVER.EMIF.VAR.EMIF_SDRAM_TREFRESH_DEFAULT.VALUE=1605 -DRIVER.EMIF.VAR.EMIF_ASYNC3_TSU.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC3_PAGE_MODE.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC2_STROBE_MODE.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC2_R_SETUP.VALUE=15 -DRIVER.EMIF.VAR.EMIF_SDRAM_TWR_VAL.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC3_R_STROBE.VALUE=63 -DRIVER.EMIF.VAR.EMIF_SDRAM_TRCD_MAX.VALUE=107 -DRIVER.EMIF.VAR.EMIF_CLK.VALUE=0 -DRIVER.EMIF.VAR.EMIF_SDRAM_TRCD.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC2_W_SETUP.VALUE=15 -DRIVER.EMIF.VAR.EMIF_SDRAM_TRFC.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC3_ASIZE.VALUE=8_bit -DRIVER.EMIF.VAR.EMIF_SDRAM_TRAS.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC1_NOR_FLASH.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC3_PAGE_DELAY.VALUE=0 -DRIVER.EMIF.VAR.EMIF_SDRAM_CAS_LATENCY.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC_WAIT_POLARITY0.VALUE=pin_low -DRIVER.EMIF.VAR.EMIF_SDRAM_TRCD_VAL.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC_WAIT_POLARITY1.VALUE=pin_high -DRIVER.EMIF.VAR.EMIF_ASYNC1_PAGE_MODE.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC1_R_SETUP.VALUE=15 -DRIVER.EMIF.VAR.EMIF_SDRAM_TRC.VALUE=0 -DRIVER.EMIF.VAR.EMIF_SDRAM_TRRD.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC3_PAGE_DELAY_VAL.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC3_W_STROBE.VALUE=63 -DRIVER.EMIF.VAR.EMIF_ASYNC1_TEHEL.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC_MAX_EXT_WAIT.VALUE=0 -DRIVER.EMIF.VAR.EMIF_SDRAM_TRP.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC3_PAGE_SIZE.VALUE=4_words -DRIVER.EMIF.VAR.EMIF_ASYNC1_W_SETUP.VALUE=15 -DRIVER.EMIF.VAR.EMIF_ASYNC1_TELEH.VALUE=0 -DRIVER.EMIF.VAR.EMIF_SDRAM_REFRESH_CYCLES_MAX.VALUE=0 -DRIVER.EMIF.VAR.EMIF_MS.VALUE=0.001 -DRIVER.EMIF.VAR.EMIF_NS.VALUE=0.000000001 -DRIVER.EMIF.VAR.EMIF_SDRAM_TWR.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC1_EXTENDED_WAIT.VALUE=0 -DRIVER.EMIF.VAR.EMIF_SDRAM_REFRESH_PERIOD.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC3_R_HOLD.VALUE=7 -DRIVER.EMIF.VAR.EMIF_ASYNC1_TAVAV.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC2_PAGE_DELAY.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC1_WAIT.VALUE=pin0 -DRIVER.EMIF.VAR.EMIF_SDRAM_TRP_MAX.VALUE=107 -DRIVER.EMIF.VAR.EMIF_SDRAM_TXSR.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC1_TEHQZ.VALUE=0 -DRIVER.EMIF.VAR.EMIF_SDRAM_TRFC_MAX.VALUE=427 -DRIVER.EMIF.VAR.EMIF_ASYNC2_R_STROBE.VALUE=63 -DRIVER.EMIF.VAR.EMIF_ASYNC1_TELQV.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC1_STROBE_MODE.VALUE=0 -DRIVER.EMIF.VAR.EMIF_SDRAM_TRP_VAL.VALUE=0 -DRIVER.EMIF.VAR.EMIF_SDRAM_REFRESH_PERIOD_MAX.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC2_W_HOLD.VALUE=7 -DRIVER.EMIF.VAR.EMIF_ASYNC1_PAGE_SIZE.VALUE=4_words -DRIVER.EMIF.VAR.EMIF_ASYNC2_WAIT.VALUE=pin0 -DRIVER.EMIF.VAR.EMIF_ASYNC2_TEHEL.VALUE=0 -DRIVER.EMIF.VAR.EMIF_SDRAM_TRFC_VAL.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC1_R_HOLD.VALUE=7 -DRIVER.EMIF.VAR.EMIF_SDRAM_PAGE_SIZE.VALUE=elements_256 -DRIVER.EMIF.VAR.EMIF_ASYNC2_TELEH.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC1_PAGE_DELAY.VALUE=0 -DRIVER.EMIF.VAR.EMIF_IBANK.VALUE=0 -DRIVER.EMIF.VAR.EMIF_ASYNC2_W_STROBE.VALUE=63 -DRIVER.EMIF.VAR.EMIF_ASYNC1_TA.VALUE=0 -DRIVER.POM.VAR.POM_OVRLY_START_ADD28.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD29.VALUE=0x00000000 -DRIVER.POM.VAR.POM_REGION_10_ENA.VALUE=0 -DRIVER.POM.VAR.POM_TIMEOUT_ENABLE.VALUE=0 -DRIVER.POM.VAR.POM_REGION_11_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_20_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_12_ENA.VALUE=0 -DRIVER.POM.VAR.POM_NO_OF_REGION.VALUE=1 -DRIVER.POM.VAR.POM_REGION_21_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_13_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_30_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_22_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_14_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_31_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_23_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_15_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_1_ENA.VALUE=1 -DRIVER.POM.VAR.POM_REGION_32_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_24_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_16_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_2_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_25_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_17_ENA.VALUE=0 -DRIVER.POM.VAR.POM_OVRLY_START_ADD1.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD2.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD3.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD4.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD5.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD6.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD7.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD8.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVLY_TRG_REGION.VALUE=INTERNAL_RAM -DRIVER.POM.VAR.POM_OVRLY_START_ADD9.VALUE=0x00000000 -DRIVER.POM.VAR.POM_REGION_3_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_26_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_18_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_4_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_27_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_19_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_5_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_28_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_6_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_SIZE10.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE11.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE20.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE12.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_29_ENA.VALUE=0 -DRIVER.POM.VAR.POM_REGION_SIZE21.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE13.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE30.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE22.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE14.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE31.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE23.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE15.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE32.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE24.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE16.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE25.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE17.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE26.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE18.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE27.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE19.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE28.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE29.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_7_ENA.VALUE=0 -DRIVER.POM.VAR.POM_BASE.VALUE=0xFFA04000 -DRIVER.POM.VAR.POM_PROG_START_ADD10.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD11.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD20.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD12.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD21.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD13.VALUE=0x00000000 -DRIVER.POM.VAR.POM_REGION_8_ENA.VALUE=0 -DRIVER.POM.VAR.POM_PROG_START_ADD30.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD22.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD14.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD31.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD23.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD15.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD32.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD24.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD16.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD25.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD17.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD26.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD18.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD27.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD19.VALUE=0x00000000 -DRIVER.POM.VAR.POM_REGION_SIZE1.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_PROG_START_ADD28.VALUE=0x00000000 -DRIVER.POM.VAR.POM_REGION_SIZE2.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_PROG_START_ADD29.VALUE=0x00000000 -DRIVER.POM.VAR.POM_REGION_SIZE3.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE4.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE5.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE6.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE7.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE8.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_SIZE9.VALUE=SIZE_64BYTES -DRIVER.POM.VAR.POM_REGION_9_ENA.VALUE=0 -DRIVER.POM.VAR.POM_PROG_START_ADD1.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD2.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD3.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD4.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD5.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD6.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD7.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD8.VALUE=0x00000000 -DRIVER.POM.VAR.POM_PROG_START_ADD9.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD10.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD11.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD20.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD12.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD21.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD13.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD30.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD22.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD14.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD31.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD23.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD15.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD32.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD24.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD16.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD25.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD17.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD26.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD18.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD27.VALUE=0x00000000 -DRIVER.POM.VAR.POM_OVRLY_START_ADD19.VALUE=0x00000000 -DRIVER.PMM.VAR.PMM_RAM_PWR_DOMAIN2_ENABLE.VALUE=0 -DRIVER.PMM.VAR.PMM_PWR_DOMAIN5_ENABLE.VALUE=0 -DRIVER.PMM.VAR.PMM_PWR_DOMAIN3_ENABLE.VALUE=0 -DRIVER.PMM.VAR.PMM_RAM_PWR_DOMAIN3_ENABLE.VALUE=0 -DRIVER.PMM.VAR.PMM_RAM_PWR_DOMAIN1_ENABLE.VALUE=0 -DRIVER.PMM.VAR.PMM_PWR_DOMAIN4_ENABLE.VALUE=0 -DRIVER.PMM.VAR.PMM_PWR_DOMAIN2_ENABLE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_OSHT_WIDTH.VALUE=100 -DRIVER.ETPWM.VAR.ETPWM3_PWMA_PERIOD_REG.VALUE=1000 -DRIVER.ETPWM.VAR.ETPWM2_PWMA_COMPARE.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM5_CHOPPER_PERIOD.VALUE=100.000 -DRIVER.ETPWM.VAR.ETPWM3_PWMA_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM3_PWMA_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM7_PWMB_PERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM3_PWMB_DEADBAND_OUT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM5_HSPCLKDIV.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM4_CLKDIV_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_SOCA_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM1_DEADBAND_INPUT.VALUE=PWMA_RED_FED -DRIVER.ETPWM.VAR.ETPWM7_BASE.VALUE=0xFCF79200 -DRIVER.ETPWM.VAR.ETPWM5_TB_ACTUALFREQUENCY.VALUE=80.000 -DRIVER.ETPWM.VAR.ETPWM6_DCBEVT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM6_DCBEVT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_ENABLE_SOCA.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_CBC.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_ENABLE_SOCB.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_PWMA_FALLING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_CHOPPER_PERIOD_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM2_PWMA_ENA.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM4_PWMB_PERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM6_RDELAY_SOURCE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_PWMA_DUTYTIME.VALUE=500.000 -DRIVER.ETPWM.VAR.ETPWM1_CHOPPER_DUTY_NEW.VALUE=50.0 -DRIVER.ETPWM.VAR.ETPWM7_SOCB_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM1_OSHT_ACTUAL_WIDTH.VALUE=100 -DRIVER.ETPWM.VAR.ETPWM7_PWMB_FALLING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_PWMB_COMPARE.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM2_PWMB_POLARITY.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM1_OSHT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_OSHT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_PWMA_DEADBAND_OUT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM4_ENABLE_SOCA.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_OSHT3.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_ENABLE_SOCB.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_OSHT4.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_OSHT_WIDTH_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM1_OSHT5.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_PWMA_PERIOD_REG.VALUE=1000 -DRIVER.ETPWM.VAR.ETPWM1_OSHT6.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_CHOPPER_PERIOD.VALUE=100.000 -DRIVER.ETPWM.VAR.ETPWM1_PWMB_PERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM2_CBC.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_CLKDIV.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM2_PWMB_ENA.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM4_SOCB_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM7_CHOPPER_MODE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_PWMB_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM7_DEADBAND_OUTPUT.VALUE=PWMA_PWMB_NIL -DRIVER.ETPWM.VAR.ETPWM4_PWMB_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM1_ENABLE_SOCA.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_PWMB_DEADBAND_INVERT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM1_ENABLE_SOCB.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_CHOPPER_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM5_DCAEVT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_HSPCLKDIV_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM5_DCAEVT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_CHOPPER_DUTYTIME.VALUE=50.000 -DRIVER.ETPWM.VAR.ETPWM6_OSHT_ACTUAL_WIDTH.VALUE=100 -DRIVER.ETPWM.VAR.ETPWM4_PWMB_DEADBAND_INVERT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM7_PWMB_POLARITY.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_OSHT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_PWMA_RISING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_OSHT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM6_PWMA_DEADBAND_OUT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM1_SOCB_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_OSHT3.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_PWMB_DUTYTIME.VALUE=500.000 -DRIVER.ETPWM.VAR.ETPWM3_CBC.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_TB_ACTUALFREQUENCY.VALUE=80.000 -DRIVER.ETPWM.VAR.ETPWM1_FDELAY_SOURCE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_OSHT4.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM6_PWMB_DEADBAND_INVERT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_OSHT5.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_PWMB_COMPARE.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM2_PWMB_RISING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_OSHT6.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM6_DEADBAND_INPUT.VALUE=PWMA_RED_FED -DRIVER.ETPWM.VAR.ETPWM6_SELECT_SOCA.VALUE=DCAEVT1 -DRIVER.ETPWM.VAR.ETPWM6_SELECT_SOCB.VALUE=DCBEVT1 -DRIVER.ETPWM.VAR.ETPWM6_SELECT_EVENT.VALUE=NO_EVENT -DRIVER.ETPWM.VAR.ETPWM5_OSHT_WIDTH.VALUE=100 -DRIVER.ETPWM.VAR.ETPWM1_PWMA_DEADBAND_INVERT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM5_PWMA_ENA.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM3_CHOPPER_PERIOD_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_PWMA_DEADBAND_INVERT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_PWMB_PERIOD_REG.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM5_DCBEVT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_OSHT_WIDTH_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM1_PWMA_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM5_DCBEVT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_PWMA_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM5_PWMA_DEADBAND_INVERT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_HSPCLKDIV.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_PWMA_FALLING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_PWMA_RISING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM4_CHOPPER_MODE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_CLKDIV_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM2_PWMB_DEADBAND_OUT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_TB_FREQUENCY.VALUE=110.000 -DRIVER.ETPWM.VAR.ETPWM4_CBC.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_SELECT_SOCA.VALUE=DCAEVT1 -DRIVER.ETPWM.VAR.ETPWM7_PWMA_DEADBAND_INVERT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_SELECT_SOCB.VALUE=DCBEVT1 -DRIVER.ETPWM.VAR.ETPWM6_PWMB_RISING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM5_PWMA_POLARITY.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM4_CHOPPER_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM5_DEADBAND_OUTPUT.VALUE=PWMA_PWMB_NIL -DRIVER.ETPWM.VAR.ETPWM6_FDELAY_SOURCE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_RDELAY_SOURCE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_PWMA_DUTYTIME.VALUE=500.000 -DRIVER.ETPWM.VAR.ETPWM6_PWMB_FALLING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_PWMA_COMPARE.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM5_PWMB_ENA.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_CHOPPER_PERIOD.VALUE=100.000 -DRIVER.ETPWM.VAR.ETPWM6_CHOPPER_DUTYTIME.VALUE=50.000 -DRIVER.ETPWM.VAR.ETPWM1_PWMB_FALLING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM3_SELECT_EVENT.VALUE=NO_EVENT -DRIVER.ETPWM.VAR.ETPWM2_CLKDIV.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_PWMA_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM7_PWMA_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM2_DEADBAND_INPUT.VALUE=PWMA_RED_FED -DRIVER.ETPWM.VAR.ETPWM5_CBC.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_CBC1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_CBC2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_CBC3.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_CHOPPER_DUTYTIME_REG.VALUE=3 -DRIVER.ETPWM.VAR.ETPWM7_PWMB_DEADBAND_OUT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM1_CBC4.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_CBC5.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_CBC6.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_DCAEVT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_PWMB_PERIOD_REG.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM3_CHOPPER_DUTYTIME_REG.VALUE=3 -DRIVER.ETPWM.VAR.ETPWM1_CHOPPER_MODE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM5_PWMA_PERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM4_DCAEVT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_TB_ACTUALFREQUENCY.VALUE=80.000 -DRIVER.ETPWM.VAR.ETPWM3_TB_FREQUENCY.VALUE=110.000 -DRIVER.ETPWM.VAR.ETPWM2_PWMB_FALLING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM5_CHOPPER_DUTYTIME_REG.VALUE=3 -DRIVER.ETPWM.VAR.ETPWM2_OSHT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_CHOPPER_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM1_PWMB_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM1_HSPCLKDIV_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM7_INTERRUPT_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM2_OSHT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_OSHT3.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_OSHT4.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_CHOPPER_DUTYTIME_REG.VALUE=3 -DRIVER.ETPWM.VAR.ETPWM4_PWMB_POLARITY.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_PWMA_COMPARE.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM2_OSHT5.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_DEADBAND_OUTPUT.VALUE=PWMA_PWMB_NIL -DRIVER.ETPWM.VAR.ETPWM3_PWMB_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM2_OSHT6.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM6_CBC.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_PWMB_DUTYTIME.VALUE=500.000 -DRIVER.ETPWM.VAR.ETPWM6_OSHT_WIDTH_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM2_CHOPPER_PERIOD.VALUE=100.000 -DRIVER.ETPWM.VAR.ETPWM2_PWMA_PERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM5_CHOPPER_DUTYTIME.VALUE=50.000 -DRIVER.ETPWM.VAR.ETPWM5_OSHT_ACTUAL_WIDTH.VALUE=100 -DRIVER.ETPWM.VAR.ETPWM4_DCBEVT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_SOCA_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM5_PWMA_DEADBAND_OUT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM4_DCBEVT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_PWMB_FALLING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM4_OSHT_WIDTH.VALUE=100 -DRIVER.ETPWM.VAR.ETPWM5_PWMA_FALLING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM4_PWMA_RISING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM1_PWMA_ENA.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM7_OSHT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM6_PWMB_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM6_PWMA_PERIOD_REG.VALUE=1000 -DRIVER.ETPWM.VAR.ETPWM6_HSPCLKDIV_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM4_PWMB_RISING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM7_OSHT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM6_PWMB_PERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM7_CBC.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_OSHT3.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_CBC1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_OSHT4.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_CBC2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_HSPCLKDIV.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM7_OSHT5.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_PWMB_FALLING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM2_CBC3.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_PWMB_PERIOD_REG.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM2_PWMA_POLARITY.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM2_CLKDIV_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM7_OSHT6.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_SOCA_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM2_CBC4.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_OST.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_CHOPPER_ACTUALPERIOD.VALUE=100.000 -DRIVER.ETPWM.VAR.ETPWM1_PWMA_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM7_PWMB_DUTYTIME.VALUE=500.000 -DRIVER.ETPWM.VAR.ETPWM3_FDELAY_SOURCE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM2_CBC5.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_CLKDIV.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM2_CBC6.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_PWMB_COMPARE.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM7_DEADBAND_INPUT.VALUE=PWMA_RED_FED -DRIVER.ETPWM.VAR.ETPWM6_INTERRUPT_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM3_CHOPPER_ACTUALPERIOD.VALUE=100.000 -DRIVER.ETPWM.VAR.ETPWM1_PWMB_DEADBAND_OUT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_ENABLE_SOCA.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_PWMB_FALLING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM1_BASE.VALUE=0xFCF78C00 -DRIVER.ETPWM.VAR.ETPWM6_ENABLE_SOCB.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_PWMB_ENA.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM5_CHOPPER_ACTUALPERIOD.VALUE=100.000 -DRIVER.ETPWM.VAR.ETPWM3_PWMB_PERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM1_DEADBAND_OUTPUT.VALUE=PWMA_PWMB_NIL -DRIVER.ETPWM.VAR.ETPWM4_TB_ACTUALFREQUENCY.VALUE=80.000 -DRIVER.ETPWM.VAR.ETPWM2_OSHT_WIDTH_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM7_CHOPPER_ACTUALPERIOD.VALUE=100.000 -DRIVER.ETPWM.VAR.ETPWM6_SOCB_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM4_CHOPPER_DUTYTIME.VALUE=50.000 -DRIVER.ETPWM.VAR.ETPWM5_CHOPPER_PERIOD_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM4_PWMA_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM3_DCAEVT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_DCAEVT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_OST.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_ENABLE_SOCA.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM6_HSPCLKDIV.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_ENABLE_SOCB.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_PWMA_POLARITY.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM2_PWMA_FALLING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_PWMA_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM5_RDELAY_SOURCE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM5_PWMB_FALLING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM5_PWMA_DUTYTIME.VALUE=500.000 -DRIVER.ETPWM.VAR.ETPWM4_PWMA_PERIOD_REG.VALUE=1000 -DRIVER.ETPWM.VAR.ETPWM7_CHOPPER_PERIOD.VALUE=100.000 -DRIVER.ETPWM.VAR.ETPWM6_PWMB_DEADBAND_OUT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_SOCB_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM4_PWMB_COMPARE.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM4_PWMA_ENA.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM2_PWMB_FALLING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM1_PWMB_POLARITY.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_CBC1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_SELECT_EVENT.VALUE=NO_EVENT -DRIVER.ETPWM.VAR.ETPWM3_CBC2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_DCBEVT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_CBC3.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_INTERRUPT_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM3_OST.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_DCBEVT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_CBC4.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_DEADBAND_INPUT.VALUE=PWMA_RED_FED -DRIVER.ETPWM.VAR.ETPWM3_CBC5.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_CBC6.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_PWMA_FALLING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM2_PWMB_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM6_PWMB_FALLING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM2_BASE.VALUE=0xFCF78D00 -DRIVER.ETPWM.VAR.ETPWM7_CHOPPER_DUTY_NEW.VALUE=50.0 -DRIVER.ETPWM.VAR.ETPWM7_CLKDIV_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM5_CHOPPER_MODE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_OSHT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_OSHT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_TB_FREQUENCY.VALUE=110.000 -DRIVER.ETPWM.VAR.ETPWM5_SELECT_SOCA.VALUE=DCAEVT1 -DRIVER.ETPWM.VAR.ETPWM3_OSHT3.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_CHOPPER_DUTYTIME.VALUE=50.000 -DRIVER.ETPWM.VAR.ETPWM5_SELECT_SOCB.VALUE=DCBEVT1 -DRIVER.ETPWM.VAR.ETPWM4_OSHT_ACTUAL_WIDTH.VALUE=100 -DRIVER.ETPWM.VAR.ETPWM3_OSHT4.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_OSHT_WIDTH.VALUE=100 -DRIVER.ETPWM.VAR.ETPWM5_CHOPPER_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM4_PWMB_FALLING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM4_PWMB_ENA.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM3_OSHT5.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_HSPCLKDIV_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM4_PWMA_DEADBAND_OUT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_OSHT6.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_TB_ACTUALFREQUENCY.VALUE=80.000 -DRIVER.ETPWM.VAR.ETPWM5_CLKDIV.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM7_PWMA_COMPARE.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM6_PWMB_POLARITY.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM4_PWMB_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM4_OST.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_PWMB_DUTYTIME.VALUE=500.000 -DRIVER.ETPWM.VAR.ETPWM7_OSHT_WIDTH_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM2_CHOPPER_PERIOD_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM2_PWMA_PERIOD_REG.VALUE=1000 -DRIVER.ETPWM.VAR.ETPWM1_PWMB_COMPARE.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM1_CLKDIV_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_CHOPPER_PERIOD.VALUE=100.000 -DRIVER.ETPWM.VAR.ETPWM7_PWMB_FALLING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM2_SELECT_SOCA.VALUE=DCAEVT1 -DRIVER.ETPWM.VAR.ETPWM4_SELECT_EVENT.VALUE=NO_EVENT -DRIVER.ETPWM.VAR.ETPWM2_SELECT_SOCB.VALUE=DCBEVT1 -DRIVER.ETPWM.VAR.ETPWM7_PWMB_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM2_DCAEVT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_INTERRUPT_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM2_DCAEVT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_CBC1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_PWMB_RISING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM4_CBC2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_PWMA_ENA.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM4_CBC3.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_CHOPPER_MODE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM1_PWMA_FALLING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM7_PWMA_PERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM5_OST.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_CBC4.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_CBC5.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_TB_FREQUENCY.VALUE=110.000 -DRIVER.ETPWM.VAR.ETPWM4_CBC6.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM6_CHOPPER_DUTY_NEW.VALUE=50.0 -DRIVER.ETPWM.VAR.ETPWM4_PWMA_POLARITY.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM2_CHOPPER_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM2_PWMA_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM5_FDELAY_SOURCE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_BASE.VALUE=0xFCF78E00 -DRIVER.ETPWM.VAR.ETPWM2_CHOPPER_DUTYTIME.VALUE=50.000 -DRIVER.ETPWM.VAR.ETPWM2_RDELAY_SOURCE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM2_PWMB_RISING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM2_PWMA_DUTYTIME.VALUE=500.000 -DRIVER.ETPWM.VAR.ETPWM1_PWMA_FALLING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM4_HSPCLKDIV.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM4_PWMA_COMPARE.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM1_PWMB_FALLING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM1_PWMB_DEADBAND_INVERT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM7_PWMA_RISING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM2_DCBEVT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_PWMA_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM4_PWMA_PERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM2_DCBEVT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_PWMB_RISING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM3_PWMB_DEADBAND_INVERT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM1_SELECT_EVENT.VALUE=NO_EVENT -DRIVER.ETPWM.VAR.ETPWM7_PWMB_PERIOD_REG.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM7_PWMB_RISING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM7_PWMB_ENA.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM3_OSHT_WIDTH_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM3_PWMA_FALLING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM7_SOCA_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_OST.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_PWMB_DEADBAND_OUT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM5_PWMB_DEADBAND_INVERT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_TB_ACTUALFREQUENCY.VALUE=80.000 -DRIVER.ETPWM.VAR.ETPWM4_PWMB_RISING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM2_PWMA_FALLING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM7_PWMB_DEADBAND_INVERT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM7_PWMA_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM3_PWMB_FALLING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_DEADBAND_OUTPUT.VALUE=PWMA_PWMB_NIL -DRIVER.ETPWM.VAR.ETPWM3_INTERRUPT_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM1_PWMA_PERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM7_RDELAY_SOURCE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM7_PWMA_DUTYTIME.VALUE=500.000 -DRIVER.ETPWM.VAR.ETPWM1_TB_FREQUENCY.VALUE=110.000 -DRIVER.ETPWM.VAR.ETPWM3_CLKDIV.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM2_PWMA_DEADBAND_INVERT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM7_CHOPPER_PERIOD_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_CLKDIV_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM4_SOCA_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM1_PWMB_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM5_CBC1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_PWMB_RISING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM5_CBC2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_PWMA_DEADBAND_INVERT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM2_OSHT_WIDTH.VALUE=100 -DRIVER.ETPWM.VAR.ETPWM5_CBC3.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_CHOPPER_DUTY_NEW.VALUE=50.0 -DRIVER.ETPWM.VAR.ETPWM3_PWMB_POLARITY.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM1_PWMA_COMPARE.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM7_OST.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_CBC4.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_CBC5.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_CHOPPER_DUTYTIME.VALUE=50.000 -DRIVER.ETPWM.VAR.ETPWM1_PWMB_DUTYTIME.VALUE=500.000 -DRIVER.ETPWM.VAR.ETPWM6_PWMA_DEADBAND_INVERT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM5_CBC6.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_OSHT_ACTUAL_WIDTH.VALUE=100 -DRIVER.ETPWM.VAR.ETPWM2_PWMB_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM5_PWMB_PERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM4_DEADBAND_INPUT.VALUE=PWMA_RED_FED -DRIVER.ETPWM.VAR.ETPWM3_PWMA_DEADBAND_OUT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_PWMB_RISING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM4_BASE.VALUE=0xFCF78F00 -DRIVER.ETPWM.VAR.ETPWM3_PWMA_FALLING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM4_OSHT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_DCAEVT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_PWMA_RISING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM4_OSHT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_SOCA_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM1_DCAEVT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_OSHT3.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_OSHT4.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_PWMB_PERIOD_REG.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM4_OSHT5.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_PWMB_RISING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM4_OSHT6.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_PWMB_RISING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM5_ENABLE_SOCA.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_ENABLE_SOCB.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_HSPCLKDIV_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_PWMB_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM2_PWMB_PERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM3_PWMA_ENA.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM1_PWMA_POLARITY.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM5_SOCB_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM4_DEADBAND_OUTPUT.VALUE=PWMA_PWMB_NIL -DRIVER.ETPWM.VAR.ETPWM2_INTERRUPT_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_PWMB_DUTYTIME.VALUE=500.000 -DRIVER.ETPWM.VAR.ETPWM4_PWMA_FALLING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM2_FDELAY_SOURCE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM1_PWMA_RISING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM7_PWMB_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM5_PWMB_COMPARE.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM5_PWMA_RISING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM2_CHOPPER_DUTYTIME_REG.VALUE=3 -DRIVER.ETPWM.VAR.ETPWM1_DCBEVT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_CHOPPER_PERIOD.VALUE=100.000 -DRIVER.ETPWM.VAR.ETPWM1_DCBEVT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_TB_ACTUALFREQUENCY.VALUE=80.000 -DRIVER.ETPWM.VAR.ETPWM2_ENABLE_SOCA.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_ENABLE_SOCB.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_HSPCLKDIV.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM5_PWMB_RISING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM4_CHOPPER_DUTYTIME_REG.VALUE=3 -DRIVER.ETPWM.VAR.ETPWM4_CHOPPER_DUTY_NEW.VALUE=50.0 -DRIVER.ETPWM.VAR.ETPWM6_CBC1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_PWMA_RISING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM6_CBC2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM6_CBC3.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM6_CHOPPER_DUTYTIME_REG.VALUE=3 -DRIVER.ETPWM.VAR.ETPWM4_CHOPPER_PERIOD_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_CBC4.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_SOCB_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_CBC5.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM6_CBC6.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_PWMA_PERIOD_REG.VALUE=1000 -DRIVER.ETPWM.VAR.ETPWM6_CHOPPER_MODE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_PWMB_ENA.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM4_PWMA_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM7_SELECT_SOCA.VALUE=DCAEVT1 -DRIVER.ETPWM.VAR.ETPWM5_PWMA_FALLING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM5_BASE.VALUE=0xFCF79000 -DRIVER.ETPWM.VAR.ETPWM3_PWMA_RISING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM7_SELECT_SOCB.VALUE=DCBEVT1 -DRIVER.ETPWM.VAR.ETPWM7_OSHT_WIDTH.VALUE=100 -DRIVER.ETPWM.VAR.ETPWM1_CLKDIV.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_CHOPPER_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM6_PWMA_POLARITY.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_PWMB_PERIOD_REG.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM4_PWMB_DEADBAND_OUT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM7_FDELAY_SOURCE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM4_RDELAY_SOURCE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM4_PWMA_DUTYTIME.VALUE=500.000 -DRIVER.ETPWM.VAR.ETPWM7_DCAEVT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_PWMA_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM7_DCAEVT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_PWMA_RISING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM7_HSPCLKDIV.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM5_CLKDIV_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM2_PWMB_COMPARE.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM2_DEADBAND_OUTPUT.VALUE=PWMA_PWMB_NIL -DRIVER.ETPWM.VAR.ETPWM1_INTERRUPT_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM4_SELECT_SOCA.VALUE=DCAEVT1 -DRIVER.ETPWM.VAR.ETPWM5_SELECT_EVENT.VALUE=NO_EVENT -DRIVER.ETPWM.VAR.ETPWM4_SELECT_SOCB.VALUE=DCBEVT1 -DRIVER.ETPWM.VAR.ETPWM1_OSHT_WIDTH.VALUE=100 -DRIVER.ETPWM.VAR.ETPWM4_OSHT_WIDTH_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_PWMA_FALLING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM5_PWMA_RISING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM6_PWMA_ENA.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM3_CHOPPER_DUTY_NEW.VALUE=50.0 -DRIVER.ETPWM.VAR.ETPWM2_CHOPPER_ACTUALPERIOD.VALUE=100.000 -DRIVER.ETPWM.VAR.ETPWM2_OSHT_ACTUAL_WIDTH.VALUE=100 -DRIVER.ETPWM.VAR.ETPWM7_DCBEVT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_CHOPPER_MODE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM7_DCBEVT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_CHOPPER_ACTUALPERIOD.VALUE=100.000 -DRIVER.ETPWM.VAR.ETPWM2_PWMA_DEADBAND_OUT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM7_CBC1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM6_PWMA_RISING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM5_TB_FREQUENCY.VALUE=110.000 -DRIVER.ETPWM.VAR.ETPWM1_SELECT_SOCA.VALUE=DCAEVT1 -DRIVER.ETPWM.VAR.ETPWM7_CBC2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM1_SELECT_SOCB.VALUE=DCBEVT1 -DRIVER.ETPWM.VAR.ETPWM7_CBC3.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_PWMA_PERIOD_REG.VALUE=1000 -DRIVER.ETPWM.VAR.ETPWM3_CHOPPER_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM2_HSPCLKDIV_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM7_CBC4.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM6_CHOPPER_ACTUALPERIOD.VALUE=100.000 -DRIVER.ETPWM.VAR.ETPWM7_CBC5.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_CBC6.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_PWMB_POLARITY.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM5_PWMA_COMPARE.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM3_PWMA_RISING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM1_CHOPPER_PERIOD_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM1_PWMB_PERIOD_REG.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM7_PWMA_FALLING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM7_PWMA_RISING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM6_BASE.VALUE=0xFCF79100 -DRIVER.ETPWM.VAR.ETPWM3_PWMB_DUTYTIME.VALUE=500.000 -DRIVER.ETPWM.VAR.ETPWM6_PWMB_ENA.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM5_OSHT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_PWMB_RISING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_PWMA_PERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM5_OSHT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_DEADBAND_INPUT.VALUE=PWMA_RED_FED -DRIVER.ETPWM.VAR.ETPWM5_PWMB_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM5_OSHT3.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_OSHT4.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_SELECT_EVENT.VALUE=NO_EVENT -DRIVER.ETPWM.VAR.ETPWM5_OSHT5.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_PWMB_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM5_OSHT6.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_OSHT_ACTUAL_WIDTH.VALUE=100 -DRIVER.ETPWM.VAR.ETPWM6_CLKDIV.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM7_PWMA_DEADBAND_OUT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM7_HSPCLKDIV_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM2_CHOPPER_DUTY_NEW.VALUE=50.0 -DRIVER.ETPWM.VAR.ETPWM3_PWMA_PERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM2_TB_FREQUENCY.VALUE=110.000 -DRIVER.ETPWM.VAR.ETPWM6_DCAEVT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_PWMA_POLARITY.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_SOCA_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_DCAEVT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_FDELAY_SOURCE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM1_RDELAY_SOURCE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM1_PWMA_DUTYTIME.VALUE=500.000 -DRIVER.ECAP.VAR.ECAP1_PRESCALE_REG.VALUE=0 -DRIVER.ECAP.VAR.ECAP2_ENA_PWM.VALUE=0 -DRIVER.ECAP.VAR.ECAP4_PRD.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP6_RESET_COUNTER_CAP1.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP6_RESET_COUNTER_CAP2.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP6_RESET_COUNTER_CAP3.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP6_RESET_COUNTER_CAP4.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP5_PWM_DUTY.VALUE=50 -DRIVER.ECAP.VAR.ECAP5_PWM_PERIOD.VALUE=1000.000 -DRIVER.ECAP.VAR.ECAP4_CAP2_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP5_PRESCALE.VALUE=0 -DRIVER.ECAP.VAR.ECAP5_PRD.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP6_PWM_COMPARE.VALUE=50 -DRIVER.ECAP.VAR.ECAP5_CAP4_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP5_ENA_LOAD.VALUE=0 -DRIVER.ECAP.VAR.ECAP6_PWM_PERIOD_REG.VALUE=0 -DRIVER.ECAP.VAR.ECAP6_WRAP_COUNTER.VALUE=CAPTURE_EVENT1 -DRIVER.ECAP.VAR.ECAP3_PWM_COMPARE.VALUE=50 -DRIVER.ECAP.VAR.ECAP2_CAP1_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP6_PRD.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP4_PWM_DUTYTIME.VALUE=500.000 -DRIVER.ECAP.VAR.ECAP3_RESET_COUNTER_CAP1.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP3_CAP3_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP3_RESET_COUNTER_CAP2.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP3_RESET_COUNTER_CAP3.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP3_RESET_COUNTER_CAP4.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP1_ENA_PWM.VALUE=0 -DRIVER.ECAP.VAR.ECAP3_WRAP_COUNTER.VALUE=CAPTURE_EVENT1 -DRIVER.ECAP.VAR.ECAP2_PWM_PERIOD_REG.VALUE=0 -DRIVER.ECAP.VAR.ECAP5_RESET_COUNTER.VALUE=0 -DRIVER.ECAP.VAR.ECAP5_CEVT1.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP4_CAPTURE_MODE.VALUE=ONE_SHOT -DRIVER.ECAP.VAR.ECAP5_CEVT2.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP5_CEVT3.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP5_CEVT4.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP1_PWM_DUTY.VALUE=50 -DRIVER.ECAP.VAR.ECAP1_CAP2_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP4_PWM_PERIOD.VALUE=1000.000 -DRIVER.ECAP.VAR.ECAP1_PWM_DUTYTIME.VALUE=500.000 -DRIVER.ECAP.VAR.ECAP5_CNTOVF.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP5_PRESCALE_REG.VALUE=0 -DRIVER.ECAP.VAR.ECAP2_CAP4_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP1_PRESCALE.VALUE=0 -DRIVER.ECAP.VAR.ECAP1_ENA_LOAD.VALUE=0 -DRIVER.ECAP.VAR.ECAP6_CAP2_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP1_CAPTURE_MODE.VALUE=ONE_SHOT -DRIVER.ECAP.VAR.ECAP2_PRESCALE_REG.VALUE=0 -DRIVER.ECAP.VAR.ECAP4_PWM_DUTY.VALUE=50 -DRIVER.ECAP.VAR.ECAP6_PWM_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ECAP.VAR.ECAP4_CAP1_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP1_CEVT1.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP1_CEVT2.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP1_CEVT3.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP2_RESET_COUNTER.VALUE=0 -DRIVER.ECAP.VAR.ECAP1_CEVT4.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP4_PRESCALE.VALUE=0 -DRIVER.ECAP.VAR.ECAP5_CAP3_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP4_ENA_LOAD.VALUE=0 -DRIVER.ECAP.VAR.ECAP3_CNTOVF.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP3_PWM_PERIOD.VALUE=1000.000 -DRIVER.ECAP.VAR.ECAP5_RESET_COUNTER_CAP1.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP5_RESET_COUNTER_CAP2.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP5_RESET_COUNTER_CAP3.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP5_RESET_COUNTER_CAP4.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP6_CEVT1.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP3_PWM_PERIOD_REG.VALUE=0 -DRIVER.ECAP.VAR.ECAP6_CEVT2.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP6_CEVT3.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP6_CEVT4.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP5_PWM_COMPARE.VALUE=50 -DRIVER.ECAP.VAR.ECAP5_PWM_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ECAP.VAR.ECAP6_ENA_PWM.VALUE=0 -DRIVER.ECAP.VAR.ECAP3_CAP2_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP5_PWM_DUTYTIME.VALUE=500.000 -DRIVER.ECAP.VAR.ECAP1_BASE.VALUE=0xFCF79300 -DRIVER.ECAP.VAR.ECAP4_CAP4_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP2_PWM_COMPARE.VALUE=50 -DRIVER.ECAP.VAR.ECAP4_WRAP_COUNTER.VALUE=CAPTURE_EVENT1 -DRIVER.ECAP.VAR.ECAP5_CAPTURE_MODE.VALUE=ONE_SHOT -DRIVER.ECAP.VAR.ECAP1_CAP1_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP2_RESET_COUNTER_CAP1.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP4_PWM_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ECAP.VAR.ECAP2_RESET_COUNTER_CAP2.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP1_CNTOVF.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP2_PWM_DUTYTIME.VALUE=500.000 -DRIVER.ECAP.VAR.ECAP2_RESET_COUNTER_CAP3.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP2_RESET_COUNTER_CAP4.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP2_CAP3_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP6_PRESCALE_REG.VALUE=0 -DRIVER.ECAP.VAR.ECAP2_BASE.VALUE=0xFCF79400 -DRIVER.ECAP.VAR.ECAP2_CEVT1.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP2_CEVT2.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP2_PWM_PERIOD.VALUE=1000.000 -DRIVER.ECAP.VAR.ECAP2_CEVT3.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP2_CEVT4.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP1_WRAP_COUNTER.VALUE=CAPTURE_EVENT1 -DRIVER.ECAP.VAR.ECAP6_CAP1_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP5_ENA_PWM.VALUE=0 -DRIVER.ECAP.VAR.ECAP4_RESET_COUNTER.VALUE=0 -DRIVER.ECAP.VAR.ECAP2_CAPTURE_MODE.VALUE=ONE_SHOT -DRIVER.ECAP.VAR.ECAP3_PWM_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ECAP.VAR.ECAP3_PWM_DUTY.VALUE=50 -DRIVER.ECAP.VAR.ECAP3_PRESCALE_REG.VALUE=0 -DRIVER.ECAP.VAR.ECAP1_CAP4_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP4_PWM_PERIOD_REG.VALUE=0 -DRIVER.ECAP.VAR.ECAP3_PRESCALE.VALUE=0 -DRIVER.ECAP.VAR.ECAP6_CNTOVF.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP3_BASE.VALUE=0xFCF79500 -DRIVER.ECAP.VAR.ECAP5_CAP2_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP3_ENA_LOAD.VALUE=0 -DRIVER.ECAP.VAR.ECAP6_CAP4_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP1_CMP.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP2_PWM_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ECAP.VAR.ECAP4_ENA_PWM.VALUE=0 -DRIVER.ECAP.VAR.ECAP3_CAP1_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP1_PWM_PERIOD.VALUE=1000.000 -DRIVER.ECAP.VAR.ECAP1_RESET_COUNTER.VALUE=0 -DRIVER.ECAP.VAR.ECAP6_PWM_DUTY.VALUE=50 -DRIVER.ECAP.VAR.ECAP2_CMP.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP6_PWM_DUTYTIME.VALUE=500.000 -DRIVER.ECAP.VAR.ECAP4_CAP3_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP4_BASE.VALUE=0xFCF79600 -DRIVER.ECAP.VAR.ECAP6_PRESCALE.VALUE=0 -DRIVER.ECAP.VAR.ECAP4_PWM_COMPARE.VALUE=50 -DRIVER.ECAP.VAR.ECAP4_RESET_COUNTER_CAP1.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP3_CEVT1.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP4_RESET_COUNTER_CAP2.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP3_CEVT2.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP4_RESET_COUNTER_CAP3.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP3_CEVT3.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP4_RESET_COUNTER_CAP4.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP3_CEVT4.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP6_ENA_LOAD.VALUE=0 -DRIVER.ECAP.VAR.ECAP5_WRAP_COUNTER.VALUE=CAPTURE_EVENT1 -DRIVER.ECAP.VAR.ECAP4_CNTOVF.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP3_CMP.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP1_PWM_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ECAP.VAR.ECAP6_RESET_COUNTER.VALUE=0 -DRIVER.ECAP.VAR.ECAP6_CAPTURE_MODE.VALUE=ONE_SHOT -DRIVER.ECAP.VAR.ECAP1_PWM_COMPARE.VALUE=50 -DRIVER.ECAP.VAR.ECAP2_CAP2_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP3_PWM_DUTYTIME.VALUE=500.000 -DRIVER.ECAP.VAR.ECAP3_CAP4_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP4_CMP.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP1_PRD.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP5_PWM_PERIOD_REG.VALUE=0 -DRIVER.ECAP.VAR.ECAP6_PWM_PERIOD.VALUE=1000.000 -DRIVER.ECAP.VAR.ECAP5_BASE.VALUE=0xFCF79700 -DRIVER.ECAP.VAR.ECAP3_ENA_PWM.VALUE=0 -DRIVER.ECAP.VAR.ECAP2_WRAP_COUNTER.VALUE=CAPTURE_EVENT1 -DRIVER.ECAP.VAR.ECAP3_CAPTURE_MODE.VALUE=ONE_SHOT -DRIVER.ECAP.VAR.ECAP1_RESET_COUNTER_CAP1.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP1_RESET_COUNTER_CAP2.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP1_RESET_COUNTER_CAP3.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP1_RESET_COUNTER_CAP4.VALUE=RESET_DISABLE -DRIVER.ECAP.VAR.ECAP5_CMP.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP2_PRD.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP2_PWM_DUTY.VALUE=50 -DRIVER.ECAP.VAR.ECAP1_CAP3_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP4_PRESCALE_REG.VALUE=0 -DRIVER.ECAP.VAR.ECAP2_PRESCALE.VALUE=0 -DRIVER.ECAP.VAR.ECAP2_CNTOVF.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP5_CAP1_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP1_PWM_PERIOD_REG.VALUE=0 -DRIVER.ECAP.VAR.ECAP6_CMP.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP2_ENA_LOAD.VALUE=0 -DRIVER.ECAP.VAR.ECAP3_PRD.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP3_RESET_COUNTER.VALUE=0 -DRIVER.ECAP.VAR.ECAP6_BASE.VALUE=0xFCF79800 -DRIVER.ECAP.VAR.ECAP6_CAP3_POLARITY.VALUE=RISING_EDGE -DRIVER.ECAP.VAR.ECAP4_CEVT1.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP4_CEVT2.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP4_CEVT3.VALUE=0x0000 -DRIVER.ECAP.VAR.ECAP4_CEVT4.VALUE=0x0000 -DRIVER.EQEP.VAR.EQEP2_QUPRD.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_INDEX_EVT_INIT_ENABLE.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_IGATE.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_QPE_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_PC_RST_MODE.VALUE=MAX_POSITION -DRIVER.EQEP.VAR.EQEP1_UTO_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_SEL_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_INDEX_EVT_SELECT.VALUE=RISING_EDGE -DRIVER.EQEP.VAR.EQEP2_PCE_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_PCU_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_BASE.VALUE=0xFCF79900 -DRIVER.EQEP.VAR.EQEP1_INV_QEPS_POL.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_INV_QEPA_POL.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_PCSHDW.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_PC_INIT_VALUE.VALUE=0x00000000 -DRIVER.EQEP.VAR.EQEP2_PCR_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_BASE.VALUE=0xFCF79A00 -DRIVER.EQEP.VAR.EQEP1_ENABLE_CAPTURE.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_INV_QEPB_POL.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_MAXPC_VALUE.VALUE=0x00000000 -DRIVER.EQEP.VAR.EQEP1_PCM_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_PCPOL.VALUE=ACTIVE_HIGH -DRIVER.EQEP.VAR.EQEP2_UNIT_POS_PRESCALER.VALUE=PS_512 -DRIVER.EQEP.VAR.EQEP2_CAP_CLK_PRESCALER.VALUE=PS_8 -DRIVER.EQEP.VAR.EQEP1_PCSPW.VALUE=0x000 -DRIVER.EQEP.VAR.EQEP1_POSCMP.VALUE=0x00000000 -DRIVER.EQEP.VAR.EQEP2_PC_MODE.VALUE=DIRECTION_COUNT -DRIVER.EQEP.VAR.EQEP1_PCE_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_INV_QEPS_POL.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_SET_INIT_AT_STARTUP.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_ENABLE_CAPTURE.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_STROBE_EVT_SELECT.VALUE=DIRECTON_DEPENDENT -DRIVER.EQEP.VAR.EQEP2_PCPOL.VALUE=ACTIVE_HIGH -DRIVER.EQEP.VAR.EQEP2_INV_QEPA_POL.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_CAP_CLK_PRESCALER.VALUE=PS_8 -DRIVER.EQEP.VAR.EQEP2_QDC_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_QCLM.VALUE=ON_POSITION_COUNTER_READ -DRIVER.EQEP.VAR.EQEP1_PC_MODE.VALUE=DIRECTION_COUNT -DRIVER.EQEP.VAR.EQEP2_WTO_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_SWI_ENABLE.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_PCR_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_INV_QEPB_POL.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_IEL.VALUE=RISING_EDGE -DRIVER.EQEP.VAR.EQEP2_PCSPW.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_PC_INIT_VALUE.VALUE=0x00000000 -DRIVER.EQEP.VAR.EQEP1_PCLOAD.VALUE=QPOSCNT_EQ_QPSCMP -DRIVER.EQEP.VAR.EQEP2_IEL_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_IEL.VALUE=RISING_EDGE -DRIVER.EQEP.VAR.EQEP1_MAXPC_VALUE.VALUE=0x00000000 -DRIVER.EQEP.VAR.EQEP1_INV_QEPI_POL.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_QCLM.VALUE=ON_POSITION_COUNTER_READ -DRIVER.EQEP.VAR.EQEP1_STROBE_EVT_INIT_ENABLE.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_PCO_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_STROBE_EVT_INIT_ENABLE.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_EXT_CLK_RATE.VALUE=RESOLUTION_1x -DRIVER.EQEP.VAR.EQEP1_STROBE_EVT_SELECT.VALUE=DIRECTON_DEPENDENT -DRIVER.EQEP.VAR.EQEP1_UNIT_POS_PRESCALER.VALUE=PS_512 -DRIVER.EQEP.VAR.EQEP1_WDPRD.VALUE=0x0000 -DRIVER.EQEP.VAR.EQEP1_SEL.VALUE=RISING_EDGE -DRIVER.EQEP.VAR.EQEP1_SOEN.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_QPE_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_PC_RST_MODE.VALUE=MAX_POSITION -DRIVER.EQEP.VAR.EQEP1_WDE.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_SET_INIT_AT_STARTUP.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_UTO_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_SWI_ENABLE.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_POSITIVE_ROTATION.VALUE=CLOCKWISE -DRIVER.EQEP.VAR.EQEP2_SEL_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_SEL.VALUE=RISING_EDGE -DRIVER.EQEP.VAR.EQEP2_PCU_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_WDE.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_SPSEL.VALUE=INDEX_PIN -DRIVER.EQEP.VAR.EQEP1_PCSHDW.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_SWAP.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_SOEN.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_POSCMP.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_QUPRD.VALUE=0x00000000 -DRIVER.EQEP.VAR.EQEP1_IGATE.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_QDC_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_SWAP.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_WDPRD.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_WTO_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_POSITIVE_ROTATION.VALUE=CLOCKWISE -DRIVER.EQEP.VAR.EQEP2_INV_QEPI_POL.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_PCM_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP1_IEL_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_EXT_CLK_RATE.VALUE=RESOLUTION_1x -DRIVER.EQEP.VAR.EQEP2_SPSEL.VALUE=INDEX_PIN -DRIVER.EQEP.VAR.EQEP1_PCO_INT_ENA.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_INDEX_EVT_SELECT.VALUE=RISING_EDGE -DRIVER.EQEP.VAR.EQEP1_INDEX_EVT_INIT_ENABLE.VALUE=0 -DRIVER.EQEP.VAR.EQEP2_PCLOAD.VALUE=QPOSCNT_EQ_QPSCMP -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_11_NUMBER.VALUE=11 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_10_END.VALUE=9 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_7_NUMBER.VALUE=7 -DRIVER.FEE.VAR.FEE_START_SECTOR.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_3_DEVICE_INDEX.VALUE=0x00000000 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_13_DATASETS.VALUE=1 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_4_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_21_START.VALUE=20 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_13_START.VALUE=12 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_9_START.VALUE=8 -DRIVER.FEE.VAR.FEE_VS29_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_11_OFFSET.VALUE=0 -DRIVER.FEE.VAR.FEE_VS30_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VS22_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VS14_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_9_OFFSET.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_32_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_24_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_16_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_11_END.VALUE=10 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_11_SIZE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_2_WRITE_CYCLES.VALUE=0x8 -DRIVER.FEE.VAR.FEE_VS7_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_2_OFFSET.VALUE=0 -DRIVER.FEE.VAR.FEE_READ_CYCLE_COUNT.VALUE=10 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_5_IMED_DATA.VALUE=TRUE -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_3_DATASETS.VALUE=1 -DRIVER.FEE.VAR.FEE_NUMBER_OF_VIRTUAL_SECTORS.VALUE=4 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX15_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX4_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_FLASH_CRC_ENABLE.VALUE=STD_ON -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_26_START.VALUE=25 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_18_START.VALUE=17 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_7_SIZE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_12_NUMBER.VALUE=12 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_20_END.VALUE=19 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_12_END.VALUE=11 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_10_EEP.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_16_WRITE_CYCLES.VALUE=0x8 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_5_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_3_NUMBER.VALUE=3 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_32_NUMBER.VALUE=32 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_24_NUMBER.VALUE=24 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_16_NUMBER.VALUE=16 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_13_IMED_DATA.VALUE=TRUE -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_16_DATASETS.VALUE=1 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_5_NUMBER.VALUE=5 -DRIVER.FEE.VAR.FEE_SECTORS_EEP1.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_33_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_25_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_17_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_21_END.VALUE=20 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_13_END.VALUE=12 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_12_SIZE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_16_OFFSET.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_14_DEVICE_INDEX.VALUE=0x00000000 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_11_EEP.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_5_START.VALUE=4 -DRIVER.FEE.VAR.FEE_BLOCK_NUMBER.VALUE=1 -DRIVER.FEE.VAR.FEE_VS27_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VS19_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VS20_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VS12_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_7_OFFSET.VALUE=0 -DRIVER.FEE.VAR.FEE_DRIVER_INDEX.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_6_DATASETS.VALUE=1 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_13_WRITE_CYCLES.VALUE=0x8 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_9_WRITE_CYCLES.VALUE=0x8 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_8_SIZE.VALUE=0 -DRIVER.FEE.VAR.FEE_VS5_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_30_END.VALUE=29 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_22_END.VALUE=21 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_14_END.VALUE=13 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX9_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_12_EEP.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX13_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX2_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_6_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_30_START.VALUE=29 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_22_START.VALUE=21 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_14_START.VALUE=13 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_3_IMED_DATA.VALUE=TRUE -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_11_DEVICE_INDEX.VALUE=0x00000000 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_7_DEVICE_INDEX.VALUE=0x00000000 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_10_NUMBER.VALUE=10 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_26_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_18_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_NUMBER_OF_EEPS.VALUE=1 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_8_NUMBER.VALUE=8 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_31_END.VALUE=30 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_29_NUMBER.VALUE=29 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_23_END.VALUE=22 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_15_END.VALUE=14 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_13_SIZE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_13_EEP.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_1_NUMBER.VALUE=1 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_30_NUMBER.VALUE=30 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_22_NUMBER.VALUE=22 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_14_NUMBER.VALUE=14 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_10_WRITE_CYCLES.VALUE=0x8 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_6_WRITE_CYCLES.VALUE=0x8 -DRIVER.FEE.VAR.FEE_DEVICE_INDEX.VALUE=0 -DRIVER.FEE.VAR.FEE_PAGE_OVERHEAD.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_3_NUMBER.VALUE=3 -DRIVER.FEE.VAR.FEE_TI_FEE_SW_MAJOR_VERSION.VALUE=1 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_27_START.VALUE=26 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_19_START.VALUE=18 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_11_IMED_DATA.VALUE=TRUE -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_9_SIZE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_8_IMED_DATA.VALUE=TRUE -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_14_OFFSET.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_12_DATASETS.VALUE=1 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_9_DATASETS.VALUE=1 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_32_END.VALUE=31 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_24_END.VALUE=23 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_16_END.VALUE=15 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_1_END.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_1_START.VALUE=0 -DRIVER.FEE.VAR.FEE_VS33_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VS25_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VS17_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_14_EEP.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_4_DEVICE_INDEX.VALUE=0x00000000 -DRIVER.FEE.VAR.FEE_SECTOR_NUMBER.VALUE=1 -DRIVER.FEE.VAR.FEE_VS10_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUALPAGE_SIZE.VALUE=8 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_5_OFFSET.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_7_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VS3_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX7_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_3_WRITE_CYCLES.VALUE=0x8 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_1_EEP.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_2_DATASETS.VALUE=1 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_27_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_19_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_33_END.VALUE=32 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_25_END.VALUE=24 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_17_END.VALUE=16 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_2_END.VALUE=1 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_16_IMED_DATA.VALUE=TRUE -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_14_SIZE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX11_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_FLASH_WRITECOUNTER_SAVE.VALUE=STD_ON -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_15_EEP.VALUE=0 -DRIVER.FEE.VAR.FEE_VS_INDEX.VALUE=2 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_15_NUMBER.VALUE=15 -DRIVER.FEE.VAR.FEE_TI_FEE_SW_PATCH_VERSION.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_10_START.VALUE=9 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_6_START.VALUE=5 -DRIVER.FEE.VAR.FEE_JOBERROR_NOTIFICATION.VALUE=JobErrorNotification -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_1_DEVICE_INDEX.VALUE=0x00000000 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_10_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_6_NUMBER.VALUE=6 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_27_NUMBER.VALUE=27 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_19_NUMBER.VALUE=19 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_1_IMED_DATA.VALUE=TRUE -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_2_EEP.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_26_END.VALUE=25 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_20_NUMBER.VALUE=20 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_18_END.VALUE=17 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_12_NUMBER.VALUE=12 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_8_NUMBER.VALUE=8 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_3_END.VALUE=2 -DRIVER.FEE.VAR.FEE_BLOCK_SIZE.VALUE=0x10 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_16_EEP.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_15_DATASETS.VALUE=1 -DRIVER.FEE.VAR.FEE_TOTAL_BLOCKS_DATASETS.VALUE=1 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_1_NUMBER.VALUE=1 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_8_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_31_START.VALUE=30 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_23_START.VALUE=22 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_15_START.VALUE=14 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_1_SIZE.VALUE=8 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_12_OFFSET.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX.VALUE=1 -DRIVER.FEE.VAR.FEE_VS31_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VS23_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VS15_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_15_DEVICE_INDEX.VALUE=0x00000000 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_3_EEP.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_28_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_27_END.VALUE=26 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_19_END.VALUE=18 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_4_END.VALUE=3 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_15_SIZE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_6_IMED_DATA.VALUE=TRUE -DRIVER.FEE.VAR.FEE_VS8_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_3_OFFSET.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_5_DATASETS.VALUE=1 -DRIVER.FEE.VAR.FEE_MAXIMUM_BLOCKING_TIME.VALUE=600 -DRIVER.FEE.VAR.FEE_VS1_ENABLE.VALUE=1 -DRIVER.FEE.VAR.FEE_NO_OF_UNCONFIGURED_BLOCKS_TO_COPY.VALUE=0 -DRIVER.FEE.VAR.FEE_FLASH_BANK_NUM.VALUE=7 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX16_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_14_WRITE_CYCLES.VALUE=0x8 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX5_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_11_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_28_START.VALUE=27 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_4_EEP.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_13_NUMBER.VALUE=13 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_28_END.VALUE=27 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_5_END.VALUE=4 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_2_START.VALUE=1 -DRIVER.FEE.VAR.FEE_SECTOR_OVERHEAD.VALUE=16 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_14_IMED_DATA.VALUE=TRUE -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_12_DEVICE_INDEX.VALUE=0x00000000 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_8_DEVICE_INDEX.VALUE=0x00000000 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_9_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_4_NUMBER.VALUE=4 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_33_NUMBER.VALUE=32 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_25_NUMBER.VALUE=25 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_17_NUMBER.VALUE=17 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_2_SIZE.VALUE=0 -DRIVER.FEE.VAR.FEE_TI_FEE_SW_MINOR_VERSION.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_10_NUMBER.VALUE=10 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_6_NUMBER.VALUE=6 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_5_EEP.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_29_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_29_END.VALUE=28 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_6_END.VALUE=5 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_16_SIZE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_11_WRITE_CYCLES.VALUE=0x8 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_7_WRITE_CYCLES.VALUE=0x8 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_11_START.VALUE=10 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_7_START.VALUE=6 -DRIVER.FEE.VAR.FEE_VS28_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VERSIONINFO_API.VALUE=STD_ON -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_10_OFFSET.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_11_DATASETS.VALUE=1 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_8_DATASETS.VALUE=1 -DRIVER.FEE.VAR.MAX_BLOCK_TIME.VALUE=600 -DRIVER.FEE.VAR.FEE_VS21_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VS13_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_8_OFFSET.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_20_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_12_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VS6_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_WRITE_CYCLES.VALUE=10 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_6_EEP.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_5_DEVICE_INDEX.VALUE=0x00000000 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_1_OFFSET.VALUE=16 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_7_END.VALUE=6 -DRIVER.FEE.VAR.FEE_NUMBER_OF_BLOCKS.VALUE=1 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_BANK.VALUE=1 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX14_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_4_IMED_DATA.VALUE=TRUE -DRIVER.FEE.VAR.FEE_BLOCK_INDEX3_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_NUMBER_OF_EIGHTBYTEWRITES.VALUE=1 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_1_DATASETS.VALUE=1 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_32_START.VALUE=31 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_24_START.VALUE=23 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_16_START.VALUE=15 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_4_WRITE_CYCLES.VALUE=0x8 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_3_SIZE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_11_NUMBER.VALUE=11 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_7_EEP.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_9_NUMBER.VALUE=9 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_8_END.VALUE=7 -DRIVER.FEE.VAR.FEE_END_SECTOR.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_1_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_2_NUMBER.VALUE=2 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_31_NUMBER.VALUE=31 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_23_NUMBER.VALUE=23 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_15_NUMBER.VALUE=15 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_2_DEVICE_INDEX.VALUE=0x00000000 -DRIVER.FEE.VAR.FEE_FLASH_ERROR_CORRECTION_HANDLING.VALUE=TI_Fee_None -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_4_NUMBER.VALUE=4 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_12_IMED_DATA.VALUE=TRUE -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_9_IMED_DATA.VALUE=TRUE -DRIVER.FEE.VAR.FEE_DEVERROR_DETECT.VALUE=STD_ON -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_14_DATASETS.VALUE=1 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_21_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_13_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_29_START.VALUE=28 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_15_OFFSET.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_8_EEP.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_9_END.VALUE=8 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_3_START.VALUE=2 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_1_WRITE_CYCLES.VALUE=0x8 -DRIVER.FEE.VAR.FEE_VS26_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VS18_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VS11_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_6_OFFSET.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_4_SIZE.VALUE=0 -DRIVER.FEE.VAR.FEE_VS4_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_16_DEVICE_INDEX.VALUE=0x00000000 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_4_DATASETS.VALUE=1 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX8_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_MAX_NUMBER_OF_LINKS.VALUE=256 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_9_EEP.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX12_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX1_ENABLE.VALUE=1 -DRIVER.FEE.VAR.FEE_FLASH_ERROR_CORRECTION_ENABLE.VALUE=STD_ON -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_2_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_DATASELECT_BITS.VALUE=0 -DRIVER.FEE.VAR.FEE_OPERATING_FREQ.VALUE=150.000 -DRIVER.FEE.VAR.FEE_TOTAL_SECTORS.VALUE=32 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_16_NUMBER.VALUE=16 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_20_START.VALUE=19 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_12_START.VALUE=11 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_8_START.VALUE=7 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_15_WRITE_CYCLES.VALUE=0x8 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_2_IMED_DATA.VALUE=TRUE -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_30_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_22_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_14_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_7_NUMBER.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_28_NUMBER.VALUE=28 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_21_NUMBER.VALUE=21 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_13_NUMBER.VALUE=13 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_9_NUMBER.VALUE=9 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_13_DEVICE_INDEX.VALUE=0x00000000 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_9_DEVICE_INDEX.VALUE=0x00000000 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_2_NUMBER.VALUE=2 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_33_START.VALUE=32 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_25_START.VALUE=24 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_17_START.VALUE=16 -DRIVER.FEE.VAR.FEE_JOBEND_NOTIFICATION.VALUE=JobEndNotification -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_5_SIZE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_13_OFFSET.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_12_WRITE_CYCLES.VALUE=0x8 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_10_IMED_DATA.VALUE=TRUE -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_8_WRITE_CYCLES.VALUE=0x8 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_7_IMED_DATA.VALUE=TRUE -DRIVER.FEE.VAR.FEE_VS32_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VS24_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_VS16_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_ENABLE_ECC.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_OVERHEAD.VALUE=24 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_10_DATASETS.VALUE=1 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_7_DATASETS.VALUE=1 -DRIVER.FEE.VAR.FEE_VS9_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_4_OFFSET.VALUE=0 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_3_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VS2_ENABLE.VALUE=1 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX6_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_10_DEVICE_INDEX.VALUE=0x00000000 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_6_DEVICE_INDEX.VALUE=0x00000000 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_31_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_23_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_15_BANK.VALUE=7 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_10_SIZE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX10_ENABLE.VALUE=0 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_14_NUMBER.VALUE=14 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_4_START.VALUE=3 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_15_IMED_DATA.VALUE=TRUE -DRIVER.FEE.VAR.FEE_CHECK_BANK7_ACCESS.VALUE=STD_OFF -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_5_WRITE_CYCLES.VALUE=0x8 -DRIVER.FEE.VAR.FEE_POLLING_MODE.VALUE=STD_ON -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_5_NUMBER.VALUE=5 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_26_NUMBER.VALUE=26 -DRIVER.FEE.VAR.FEE_VIRTUAL_SECTOR_18_NUMBER.VALUE=18 -DRIVER.FEE.VAR.FEE_BLOCK_INDEX_6_SIZE.VALUE=0 -DRIVER.AJSM.VAR.AJSM_NEW_KEY_WORD_2.VALUE=0xFFFDFFFE -DRIVER.AJSM.VAR.AJSM_NEW_KEY_WORD_3.VALUE=0xFFEFFFFF -DRIVER.AJSM.VAR.AJSM_VISIBLE_KEY_WORD_0.VALUE=0xEFFDFFFF -DRIVER.AJSM.VAR.AJSM_VISIBLE_KEY_WORD_1.VALUE=0xFFFFFFFF -DRIVER.AJSM.VAR.AJSM_VISIBLE_KEY_WORD_2.VALUE=0xFFFDFFFE -DRIVER.AJSM.VAR.AJSM_VISIBLE_KEY_WORD_3.VALUE=0xFFEFFFFF -DRIVER.AJSM.VAR.AJSM_SCAN_PATTERN_WORD_0.VALUE=PATTERN_NOT_REQUIRED -DRIVER.AJSM.VAR.AJSM_VISIBLE_KEY_ECC_BYTE_0.VALUE=0xED -DRIVER.AJSM.VAR.AJSM_SCAN_PATTERN_WORD_1.VALUE=PATTERN_NOT_REQUIRED -DRIVER.AJSM.VAR.AJSM_VISIBLE_KEY_ECC_BYTE_1.VALUE=0xED -DRIVER.AJSM.VAR.AJSM_SCAN_PATTERN_WORD_2.VALUE=PATTERN_NOT_REQUIRED -DRIVER.AJSM.VAR.AJSM_SCAN_PATTERN_WORD_3.VALUE=PATTERN_NOT_REQUIRED -DRIVER.AJSM.VAR.AJSM_NEW_KEY_ECC_BYTE_0.VALUE=0xED -DRIVER.AJSM.VAR.AJSM_NEW_KEY_ECC_BYTE_1.VALUE=0xED -DRIVER.AJSM.VAR.AJSM_SCAN_PATTERN.VALUE=PATTERN_NOT_REQUIRED -DRIVER.AJSM.VAR.AJSM_NEW_KEY_WORD_0.VALUE=0xEFFDFFFF -DRIVER.AJSM.VAR.AJSM_NEW_KEY_WORD_1.VALUE=0xFFFFFFFF diff --git a/tests/scripts/waf-tools/f_hcg/tests/test_hcg_raises.hcg b/tests/scripts/waf-tools/f_hcg/tests/test_hcg_raises.hcg deleted file mode 100644 index e2e1dabe..00000000 --- a/tests/scripts/waf-tools/f_hcg/tests/test_hcg_raises.hcg +++ /dev/null @@ -1,1069 +0,0 @@ - - - - TMS570LC43x - TMS570LC4357ZWT_FREERTOS - test_hcg_raises.dil - gcc - - - 04.07.01 - - - - - - - - - - - - - - - - - - - - - - - - - HL_hal_stdtypes.h - include\HL_hal_stdtypes.h - - - HL_sys_common.h - include\HL_sys_common.h - - - HL_reg_system.h - include\HL_reg_system.h - - - HL_reg_flash.h - include\HL_reg_flash.h - - - HL_reg_l2ramw.h - include\HL_reg_l2ramw.h - - - HL_reg_vim.h - include\HL_reg_vim.h - - - HL_reg_pbist.h - include\HL_reg_pbist.h - - - HL_reg_stc.h - include\HL_reg_stc.h - - - HL_reg_efc.h - include\HL_reg_efc.h - - - HL_reg_pcr.h - include\HL_reg_pcr.h - - - HL_reg_pmm.h - include\HL_reg_pmm.h - - - HL_reg_dma.h - include\HL_reg_dma.h - - - HL_reg_ccmr5.h - include\HL_reg_ccmr5.h - - - HL_sys_core.h - include\HL_sys_core.h - - - HL_system.h - include\HL_system.h - - - HL_sys_vim.h - include\HL_sys_vim.h - - - HL_sys_mpu.h - include\HL_sys_mpu.h - - - HL_sys_pmu.h - include\HL_sys_pmu.h - - - HL_sys_pcr.h - include\HL_sys_pcr.h - - - HL_sys_pmm.h - include\HL_sys_pmm.h - - - HL_sys_dma.h - include\HL_sys_dma.h - - - HL_sys_core.asm - source\HL_sys_core.asm - - - HL_sys_intvecs.asm - source\HL_sys_intvecs.asm - - - HL_sys_mpu.asm - source\HL_sys_mpu.asm - - - HL_sys_pmu.asm - source\HL_sys_pmu.asm - - - HL_sys_pcr.c - source\HL_sys_pcr.c - - - HL_sys_pmm.c - source\HL_sys_pmm.c - - - HL_sys_dma.c - source\HL_sys_dma.c - - - HL_system.c - source\HL_system.c - - - HL_sys_phantom.c - source\HL_sys_phantom.c - - - HL_sys_startup.c - source\HL_sys_startup.c - - - HL_sys_vim.c - source\HL_sys_vim.c - - - HL_sys_main.c - source\HL_sys_main.c - - - HL_notification.c - source\HL_notification.c - - - HL_sys_link.cmd - source\HL_sys_link.cmd - - - HL_reg_epc.h - include\HL_reg_epc.h - - - HL_reg_nmpu.h - include\HL_reg_nmpu.h - - - HL_reg_scm.h - include\HL_reg_scm.h - - - HL_reg_sdcmmr.h - include\HL_reg_sdcmmr.h - - - HL_epc.h - include\HL_epc.h - - - HL_epc.c - source\HL_epc.c - - - HL_nmpu.h - include\HL_nmpu.h - - - HL_nmpu.c - source\HL_nmpu.c - - - HL_errata.h - include\HL_errata.h - - - HL_errata.c - source\HL_errata.c - - - HL_Test.h - - - HL_errata_SSWF021_45.h - include\HL_errata_SSWF021_45.h - - - HL_errata_SSWF021_45_defs.h - include\HL_errata_SSWF021_45_defs.h - - - HL_errata_SSWF021_45.c - source\HL_errata_SSWF021_45.c - - - os_projdefs.h - - - FreeRTOSConfig.h - - - os_portmacro.h - - - os_mpu_wrappers.h - - - os_portable.h - - - FreeRTOS.h - - - os_list.h - - - os_queue.h - - - os_semphr.h - - - os_croutine.h - - - os_StackMacros.h - - - os_task.h - - - os_timer.h - - - os_port.c - - - os_portasm.asm - - - os_tasks.c - - - os_queue.c - - - os_list.c - - - os_croutine.c - - - os_timer.c - - - os_mpu_wrappers.c - - - os_heap.c - - - os_event_groups.c - - - os_event_groups.h - - - HL_reg_pinmux.h - - - HL_pinmux.h - - - HL_pinmux.c - - - HL_reg_gio.h - - - HL_gio.h - - - HL_gio.c - - - HL_reg_esm.h - - - HL_esm.h - - - HL_esm.c - - - HL_reg_sci.h - - - HL_sci.h - - - HL_sci.c - - - HL_reg_lin.h - - - HL_lin.h - - - HL_lin.c - - - HL_reg_mibspi.h - - - HL_mibspi.h - - - HL_mibspi.c - - - HL_reg_spi.h - - - HL_spi.h - - - - HL_reg_can.h - - - HL_can.h - - - HL_can.c - - - HL_reg_adc.h - - - HL_adc.h - - - HL_adc.c - - - - - - - - - std_nhet.h - - - HL_reg_het.h - - - HL_het.h - - - HL_het.c - - - HL_reg_htu.h - - - HL_htu.h - - - - - - - - - HL_reg_i2c.h - - - HL_i2c.h - - - HL_i2c.c - - - HL_emac.h - - - HL_hw_emac.h - - - HL_hw_emac_ctrl.h - - - HL_hw_mdio.h - - - HL_hw_reg_access.h - - - HL_mdio.h - - - HL_phy_dp83640.h - - - HL_phy_tlk111.h - - - HL_emac_phyConfig.h - - - - - - - HL_reg_dcc.h - - - HL_dcc.h - - - - HL_reg_rtp.h - - - HL_rtp.h - - - - HL_reg_dmm.h - - - HL_dmm.h - - - - HL_reg_emif.h - - - HL_emif.h - - - - HL_reg_pom.h - - - HL_pom.h - - - - HL_reg_crc.h - - - HL_crc.h - - - HL_crc.c - - - HL_reg_etpwm.h - - - HL_etpwm.h - - - HL_etpwm.c - - - HL_reg_ecap.h - - - HL_ecap.h - - - HL_ecap.c - - - HL_reg_eqep.h - - - HL_eqep.h - - - HL_eqep.c - - - Device_TMS570LC43.h - - - Device_header.h - - - Device_types.h - - - ti_fee_cfg.h - - - MemMap.h - - - ti_fee_types.h - - - ti_fee.h - - - fee_interface.h - - - Device_TMS570LC43.c - - - ti_fee_cfg.c - - - ti_fee_Info.c - - - ti_fee_ini.c - - - ti_fee_main.c - - - ti_fee_read.c - - - ti_fee_writeSync.c - - - ti_fee_writeAsync.c - - - ti_fee_util.c - - - ti_fee_cancel.c - - - ti_fee_format.c - - - ti_fee_eraseimmediateblock.c - - - ti_fee_invalidateblock.c - - - ti_fee_shutdown.c - - - Fapi_UserDefinedFunctions.c - - - ti_fee_readSync.c - - - HL_ajsm.asm - - - - - - - include\os_projdefs.h - - - include\FreeRTOSConfig.h - - - include\os_portmacro.h - - - include\os_mpu_wrappers.h - - - include\os_portable.h - - - include\FreeRTOS.h - - - include\os_list.h - - - include\os_queue.h - - - include\os_semphr.h - - - include\os_croutine.h - - - include\os_StackMacros.h - - - include\os_task.h - - - include\os_timer.h - - - source\os_port.c - - - source\os_portasm.asm - - - source\os_tasks.c - - - source\os_queue.c - - - source\os_list.c - - - source\os_croutine.c - - - source\os_timer.c - - - source\os_mpu_wrappers.c - - - source\os_heap.c - - - source\os_event_groups.c - - - include\os_event_groups.h - - - - - - - include\HL_reg_pinmux.h - - - include\HL_pinmux.h - - - source\HL_pinmux.c - - - - - - - include\HL_reg_gio.h - - - include\HL_gio.h - - - source\HL_gio.c - - - - - - - include\HL_reg_esm.h - - - include\HL_esm.h - - - source\HL_esm.c - - - - - - - include\HL_reg_sci.h - - - include\HL_sci.h - - - source\HL_sci.c - - - - - - - include\HL_reg_lin.h - - - include\HL_lin.h - - - source\HL_lin.c - - - - - - - include\HL_reg_mibspi.h - - - include\HL_mibspi.h - - - source\HL_mibspi.c - - - - - - - include\HL_reg_spi.h - - - include\HL_spi.h - - - - - - - - - - include\HL_reg_can.h - - - include\HL_can.h - - - source\HL_can.c - - - - - - - include\HL_reg_adc.h - - - include\HL_adc.h - - - source\HL_adc.c - - - - - - - include\std_nhet.h - - - include\HL_reg_het.h - - - include\HL_het.h - - - source\HL_het.c - - - include\HL_reg_htu.h - - - include\HL_htu.h - - - - - - - include\HL_reg_i2c.h - - - include\HL_i2c.h - - - source\HL_i2c.c - - - - - - - include\HL_emac.h - - - include\HL_hw_emac.h - - - include\HL_hw_emac_ctrl.h - - - include\HL_hw_mdio.h - - - include\HL_hw_reg_access.h - - - include\HL_mdio.h - - - include\HL_phy_dp83640.h - - - include\HL_phy_tlk111.h - - - include\HL_emac_phyConfig.h - - - - - - - - - - - - - - - - - - - include\HL_reg_dcc.h - - - include\HL_dcc.h - - - - - - - - - - include\HL_reg_rtp.h - - - include\HL_rtp.h - - - - - - - - - - include\HL_reg_dmm.h - - - include\HL_dmm.h - - - - - - - - - - include\HL_reg_emif.h - - - include\HL_emif.h - - - - - - - - - - include\HL_reg_pom.h - - - include\HL_pom.h - - - - - - - - - - include\HL_reg_crc.h - - - include\HL_crc.h - - - source\HL_crc.c - - - - - - - include\HL_reg_etpwm.h - - - include\HL_etpwm.h - - - source\HL_etpwm.c - - - - - - - include\HL_reg_ecap.h - - - include\HL_ecap.h - - - source\HL_ecap.c - - - - - - - include\HL_reg_eqep.h - - - include\HL_eqep.h - - - source\HL_eqep.c - - - - - - - include\Device_TMS570LC43.h - - - include\Device_header.h - - - include\Device_types.h - - - include\ti_fee_cfg.h - - - include\MemMap.h - - - include\ti_fee_types.h - - - include\ti_fee.h - - - include\fee_interface.h - - - source\Device_TMS570LC43.c - - - source\ti_fee_cfg.c - - - source\ti_fee_Info.c - - - source\ti_fee_ini.c - - - source\ti_fee_main.c - - - source\ti_fee_read.c - - - source\ti_fee_writeSync.c - - - source\ti_fee_writeAsync.c - - - source\ti_fee_util.c - - - source\ti_fee_cancel.c - - - source\ti_fee_format.c - - - source\ti_fee_eraseimmediateblock.c - - - source\ti_fee_invalidateblock.c - - - source\ti_fee_shutdown.c - - - source\Fapi_UserDefinedFunctions.c - - - source\ti_fee_readSync.c - - - - - - - source\HL_ajsm.asm - - - - diff --git a/tests/scripts/waf-tools/f_hcg/tests/test_hcg_raises.json b/tests/scripts/waf-tools/f_hcg/tests/test_hcg_raises.json deleted file mode 100644 index 99f7c17c..00000000 --- a/tests/scripts/waf-tools/f_hcg/tests/test_hcg_raises.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "sources": [], - "headers": [], - "removes": [] -} diff --git a/tests/scripts/waf-tools/f_ti_arm_cgt/__init__.py b/tests/scripts/waf-tools/f_ti_arm_cgt/__init__.py deleted file mode 100644 index d3780093..00000000 --- a/tests/scripts/waf-tools/f_ti_arm_cgt/__init__.py +++ /dev/null @@ -1,43 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -# f_ti_arm_cgt is not a proper python module name, but this is OK since we need -# it just for the unit test discovery -# pylint: disable-all diff --git a/tests/scripts/waf-tools/f_ti_arm_cgt/test_f_ti_arm_cgt.py b/tests/scripts/waf-tools/f_ti_arm_cgt/test_f_ti_arm_cgt.py deleted file mode 100644 index 8c308b04..00000000 --- a/tests/scripts/waf-tools/f_ti_arm_cgt/test_f_ti_arm_cgt.py +++ /dev/null @@ -1,128 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Implements tests for the waf tool ``f_ti_arm_cgt``. -""" - -import json -import os -import sys -import unittest - -HAVE_GIT = False -try: - from git import Repo - from git.exc import InvalidGitRepositoryError - - HAVE_GIT = True -except ImportError: - pass - - -def get_git_root(path: str) -> str: - """helper function to find the repository root - - Args: - path (string): path of test_f_guidelines - - Returns: - root (string): root path of the git repository - """ - root = os.path.join(os.path.dirname(path), "..", "..", "..", "..") - try: - repo = Repo(path, search_parent_directories=True) - root = repo.git.rev_parse("--show-toplevel") - except InvalidGitRepositoryError: - pass - return root - - -ROOT = get_git_root(os.path.realpath(__file__)) -SCRIPT_PATH = os.path.abspath(os.path.dirname(__file__)) -TEST_FILES_PATH = os.path.join(SCRIPT_PATH, "tests") - - -def get_txt(f): - """returns the content of file""" - txt = None - with open(os.path.join(TEST_FILES_PATH, f), "r", encoding="utf-8") as text_file: - txt = text_file.read() - return txt - - -try: - import f_ti_arm_cgt -except ImportError: - sys.path.extend( - [ - os.path.join(ROOT, "tools", "waf-tools"), - os.path.join(ROOT, "tools", "waf3-2.0.22-1241519b19b496207abef1f72bbf61c2"), - ] - ) - import f_ti_arm_cgt - - -class TestArmcl(unittest.TestCase): - """Unit test class for the ``f_ti_arm_cgt`` tool""" - - def test_linkercheck(self): - """Unit test for valid linker symbols - - test_linkercheck uses python unittest to check the return value of the - f_ti_arm_cgt cprogram parse_output function. - - """ - result_path = os.path.join(TEST_FILES_PATH, "f_ti_arm_cgt_result.json") - with open(result_path, encoding="utf-8") as file: - results = json.loads(file.read()) - for key, output in results.items(): - test_text = get_txt(key) - linker_output_path = key.split(".")[0] + ".txt" - linker_output_text = get_txt(linker_output_path) - self.assertEqual( - (output[0], output[1]), - f_ti_arm_cgt.cprogram.parse_output( - test_text, "test_path", linker_output_text - ), - ) - - -if __name__ == "__main__": - unittest.main() diff --git a/tests/scripts/waf-tools/f_ti_arm_cgt/tests/f_ti_arm_cgt_result.json b/tests/scripts/waf-tools/f_ti_arm_cgt/tests/f_ti_arm_cgt_result.json deleted file mode 100644 index 10f6f704..00000000 --- a/tests/scripts/waf-tools/f_ti_arm_cgt/tests/f_ti_arm_cgt_result.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "f_ti_arm_cgt_test0.json": [ - [ - "Found '_c_int00' as expected in 'test_path\\src\\app\\main\\fstartup.c.1.obj'.", - "Found 'canMessageNotification' as expected in 'test_path\\src\\app\\driver\\libfoxbms-driver.a'.", - "Found 'dmaGroupANotification' as expected in 'test_path\\src\\app\\driver\\libfoxbms-driver.a'.", - "Found 'handlePLLLockFail' as expected in 'test_path\\src\\app\\main\\fstartup.c.1.obj'." - ], - [] - ], - "f_ti_arm_cgt_test1.json": [ - [ - "Found 'canMessageNotification' as expected in 'test_path\\src\\app\\driver\\libfoxbms-driver.a'.", - "Found 'dmaGroupANotification' as expected in 'test_path\\src\\app\\driver\\libfoxbms-driver.a'.", - "Found 'handlePLLLockFail' as expected in 'test_path\\src\\app\\main\\fstartup.c.1.obj'." - ], - [ - "Did not find the symbol 'NotExistingSymbol'." - ] - ], - "f_ti_arm_cgt_test2.json": [ - [ - "Found '_c_int00' as expected in 'test_path\\src\\app\\main\\fstartup.c.1.obj'.", - "Found 'canMessageNotification' as expected in 'test_path\\src\\app\\driver\\libfoxbms-driver.a'.", - "Found 'dmaGroupANotification' as expected in 'test_path\\src\\app\\driver\\libfoxbms-driver.a'." - ], - [ - "Did not find 'handlePLLLockFail' where it was expected ('test_path\\wrong path').", - "Instead it was found in 'test_path\\src\\app\\main\\fstartup.c.1.obj'." - ] - ], - "f_ti_arm_cgt_test3.json": [ - [], - [] - ] -} diff --git a/tests/scripts/waf-tools/f_ti_arm_cgt/tests/f_ti_arm_cgt_test0.json b/tests/scripts/waf-tools/f_ti_arm_cgt/tests/f_ti_arm_cgt_test0.json deleted file mode 100644 index 752c7230..00000000 --- a/tests/scripts/waf-tools/f_ti_arm_cgt/tests/f_ti_arm_cgt_test0.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "_c_int00": "src/app/main/fstartup.c.1.obj", - "canMessageNotification": "src/app/driver/libfoxbms-driver.a", - "dmaGroupANotification": "src/app/driver/libfoxbms-driver.a", - "handlePLLLockFail": "src/app/main/fstartup.c.1.obj" -} diff --git a/tests/scripts/waf-tools/f_ti_arm_cgt/tests/f_ti_arm_cgt_test0.txt b/tests/scripts/waf-tools/f_ti_arm_cgt/tests/f_ti_arm_cgt_test0.txt deleted file mode 100644 index 6764d611..00000000 --- a/tests/scripts/waf-tools/f_ti_arm_cgt/tests/f_ti_arm_cgt_test0.txt +++ /dev/null @@ -1,16 +0,0 @@ -remark #10252-D: Symbol "_c_int00" (pulled from "src\app\main\fstartup.c.1.obj") defined in 3 places: - src\app\main\fstartup.c.1.obj - src\hal\libfoxbms-hal.a - C:\ti\ccs1000\ccs\tools\compiler\ti-cgt-arm_20.2.0.LTS\lib\rtsv7R4_A_be_v3D16_eabi.lib - -remark #10252-D: Symbol "canMessageNotification" (pulled from "src\app\driver\libfoxbms-driver.a") defined in 2 places: - src\app\driver\libfoxbms-driver.a - src\hal\libfoxbms-hal.a - -remark #10252-D: Symbol "dmaGroupANotification" (pulled from "src\app\driver\libfoxbms-driver.a") defined in 2 places: - src\app\driver\libfoxbms-driver.a - src\hal\libfoxbms-hal.a - -remark #10252-D: Symbol "handlePLLLockFail" (pulled from "src\app\main\fstartup.c.1.obj") defined in 2 places: - src\app\main\fstartup.c.1.obj - src\hal\libfoxbms-hal.a diff --git a/tests/scripts/waf-tools/f_ti_arm_cgt/tests/f_ti_arm_cgt_test1.json b/tests/scripts/waf-tools/f_ti_arm_cgt/tests/f_ti_arm_cgt_test1.json deleted file mode 100644 index 8cf6b54f..00000000 --- a/tests/scripts/waf-tools/f_ti_arm_cgt/tests/f_ti_arm_cgt_test1.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "NotExistingSymbol": "src/app/main/fstartup.c.1.obj", - "canMessageNotification": "src/app/driver/libfoxbms-driver.a", - "dmaGroupANotification": "src/app/driver/libfoxbms-driver.a", - "handlePLLLockFail": "src/app/main/fstartup.c.1.obj" -} diff --git a/tests/scripts/waf-tools/f_ti_arm_cgt/tests/f_ti_arm_cgt_test1.txt b/tests/scripts/waf-tools/f_ti_arm_cgt/tests/f_ti_arm_cgt_test1.txt deleted file mode 100644 index 6764d611..00000000 --- a/tests/scripts/waf-tools/f_ti_arm_cgt/tests/f_ti_arm_cgt_test1.txt +++ /dev/null @@ -1,16 +0,0 @@ -remark #10252-D: Symbol "_c_int00" (pulled from "src\app\main\fstartup.c.1.obj") defined in 3 places: - src\app\main\fstartup.c.1.obj - src\hal\libfoxbms-hal.a - C:\ti\ccs1000\ccs\tools\compiler\ti-cgt-arm_20.2.0.LTS\lib\rtsv7R4_A_be_v3D16_eabi.lib - -remark #10252-D: Symbol "canMessageNotification" (pulled from "src\app\driver\libfoxbms-driver.a") defined in 2 places: - src\app\driver\libfoxbms-driver.a - src\hal\libfoxbms-hal.a - -remark #10252-D: Symbol "dmaGroupANotification" (pulled from "src\app\driver\libfoxbms-driver.a") defined in 2 places: - src\app\driver\libfoxbms-driver.a - src\hal\libfoxbms-hal.a - -remark #10252-D: Symbol "handlePLLLockFail" (pulled from "src\app\main\fstartup.c.1.obj") defined in 2 places: - src\app\main\fstartup.c.1.obj - src\hal\libfoxbms-hal.a diff --git a/tests/scripts/waf-tools/f_ti_arm_cgt/tests/f_ti_arm_cgt_test2.json b/tests/scripts/waf-tools/f_ti_arm_cgt/tests/f_ti_arm_cgt_test2.json deleted file mode 100644 index 206107bc..00000000 --- a/tests/scripts/waf-tools/f_ti_arm_cgt/tests/f_ti_arm_cgt_test2.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "_c_int00": "src/app/main/fstartup.c.1.obj", - "canMessageNotification": "src/app/driver/libfoxbms-driver.a", - "dmaGroupANotification": "src/app/driver/libfoxbms-driver.a", - "handlePLLLockFail": "wrong path" -} diff --git a/tests/scripts/waf-tools/f_ti_arm_cgt/tests/f_ti_arm_cgt_test2.txt b/tests/scripts/waf-tools/f_ti_arm_cgt/tests/f_ti_arm_cgt_test2.txt deleted file mode 100644 index 6764d611..00000000 --- a/tests/scripts/waf-tools/f_ti_arm_cgt/tests/f_ti_arm_cgt_test2.txt +++ /dev/null @@ -1,16 +0,0 @@ -remark #10252-D: Symbol "_c_int00" (pulled from "src\app\main\fstartup.c.1.obj") defined in 3 places: - src\app\main\fstartup.c.1.obj - src\hal\libfoxbms-hal.a - C:\ti\ccs1000\ccs\tools\compiler\ti-cgt-arm_20.2.0.LTS\lib\rtsv7R4_A_be_v3D16_eabi.lib - -remark #10252-D: Symbol "canMessageNotification" (pulled from "src\app\driver\libfoxbms-driver.a") defined in 2 places: - src\app\driver\libfoxbms-driver.a - src\hal\libfoxbms-hal.a - -remark #10252-D: Symbol "dmaGroupANotification" (pulled from "src\app\driver\libfoxbms-driver.a") defined in 2 places: - src\app\driver\libfoxbms-driver.a - src\hal\libfoxbms-hal.a - -remark #10252-D: Symbol "handlePLLLockFail" (pulled from "src\app\main\fstartup.c.1.obj") defined in 2 places: - src\app\main\fstartup.c.1.obj - src\hal\libfoxbms-hal.a diff --git a/tests/scripts/waf-tools/f_ti_arm_cgt/tests/f_ti_arm_cgt_test3.json b/tests/scripts/waf-tools/f_ti_arm_cgt/tests/f_ti_arm_cgt_test3.json deleted file mode 100644 index 0967ef42..00000000 --- a/tests/scripts/waf-tools/f_ti_arm_cgt/tests/f_ti_arm_cgt_test3.json +++ /dev/null @@ -1 +0,0 @@ -{} diff --git a/tests/scripts/waf-tools/f_ti_arm_cgt/tests/f_ti_arm_cgt_test3.txt b/tests/scripts/waf-tools/f_ti_arm_cgt/tests/f_ti_arm_cgt_test3.txt deleted file mode 100644 index e69de29b..00000000 diff --git a/tests/unit/README.md b/tests/unit/README.md index 14e159d0..c4052278 100644 --- a/tests/unit/README.md +++ b/tests/unit/README.md @@ -5,7 +5,7 @@ The *standard* way of building and running the unit tests is to run ``waf build_unit_test`` in the root of the repository. -This runs the unit test suite using Ceedling. +This runs the unit test suite using ``Ceedling``. The overview of the results of the unit tests (if they are successfully run) is then found at @@ -20,28 +20,31 @@ is done for the actual software (``/src``). ### Workflow To achieve this, this directory holds a configuration to build the unit tests -directly, without using Ceedling, but instead using ``gcc`` and ``cafeCC`` +directly, without using ``Ceedling``, but instead using ``gcc`` and ``cafeCC`` directly. -**However, it is required to first run the Ceedling based unit test, as this +**However, it is required to first run the ``Ceedling`` based unit test, as this creates the mocks and runners for the test files.** The workflow is therefore as follows (assuming the user name is ``vulpes`` and the repository is cloned into ``C:\Users\vulpes\Documents\foxbms-2``): -```cmd -C:\Users\vulpes>cd "C:\Users\vulpes\Documents\foxbms-2" -C:\Users\vulpes\Documents\foxbms-2>waf build_unit_test -@REM the mocks and unit tests are now created and the test suite runs -C:\Users\vulpes\Documents\foxbms-2>cd "tests\unit" -@REM configure the project -C:\Users\vulpes\Documents\foxbms-2\tests\unit>run_ut_gcc_build.bat configure -@REM use 'build_host' to create a host build of the unit tests; this is the -@REM same as ceedling does; this just exists to ensure, that the test suite -@REM builds and works as expected -C:\Users\vulpes\Documents\foxbms-2\tests\unit>run_ut_gcc_build.bat build_host -@REM Run an Axivion build (argument: 'build_axivion'), to pass the results to -@REM Axivion Suite -C:\Users\vulpes\Documents\foxbms-2\tests\unit>run_ut_gcc_build.bat build_axivion +```pwsh +PS C:\Users\vulpes>cd "C:\Users\vulpes\Documents\foxbms-2" +# build the unit tests (as mocks etc. are required) +PS C:\Users\vulpes\Documents\foxbms-2> .\fox.ps1 waf build_unit_test +# the mocks and unit tests are now created and the test suite runs +PS C:\Users\vulpes\Documents\foxbms-2> cd "tests\unit" +# set the environment variable 'BAUHAUS_CONFIG' +$env:BAUHAUS_CONFIG="C:\Users\vulpes\Documents\foxbms-2\tests\unit\axivion" +# configure the project +PS C:\Users\vulpes\Documents\foxbms-2> .\fox.ps1 waf --cwd tests\unit configure +# use 'build_host' to create a host build of the unit tests; this is the +# same as ceedling does; this just exists to ensure, that the test suite +# builds and works as expected +PS C:\Users\vulpes\Documents\foxbms-2> .\fox.ps1 waf --cwd tests\unit build_host +# Run an Axivion build (argument: 'build_axivion'), to pass the results to +# Axivion Suite +PS C:\Users\vulpes\Documents\foxbms-2> .\fox.ps1 waf --cwd tests\unit build_axivion ``` The analysis of the test source is configured in @@ -51,175 +54,149 @@ The analysis of the test source is configured in - Analyze what ceedling does, when it creates a test suite for a specific test, e.g., ``src/app/driver/crc/crc.c`` by running: - ```cmd - C:\Users\vulpes\Documents\foxbms-2>cd "build\unit_test" - C:\Users\vulpes\Documents\foxbms-2>..\..\conf\unit\ceedling.cmd test:test_crc.c - ``` -- Ceedling will then tell what it actually does: + + ```pwsh + PS C:\Users\vulpes\Documents\foxbms-2> cd "build\unit_test" + PS C:\Users\vulpes\Documents\foxbms-2> .\fox.ps1 ceedling test:test_crc.c ``` - Test 'test_crc.c' - ----------------- - Generating include list for fassert.h... - Creating mock for fassert... + +- ``Ceedling`` will then tell what it actually does: + + ```cmd + C:\Users\vulpes\Documents\foxbms-2> .\fox.ps1 ceedling test:test_crc.c + + Loaded project configuration at default location using ./project.yml + + Ceedling set up completed in 17.22 seconds + + Preparing Build Paths... + + Extracting Build Directive Macros + --------------------------------- + Parsing test_crc.c... + + Ingesting Test Configurations + ----------------------------- + Collecting search paths, flags, and defines for test_crc.c... + + Collecting Testing Context + -------------------------- + Extracting #include statements via preprocessor from test_crc.c... + Processing #include statements for test_crc.c... + + Determining Files to be Generated... + + Preprocessing for Mocks + ----------------------- + Preprocessing test_crc::fassert.h... + Extracting #include statements via preprocessor from test_crc::fassert.h... + + Mocking + ------- + Generating mock for test_crc::fassert.h... + + Preprocessing for Test Runners + ------------------------------ + Preprocessing test_crc.c... + Loading #include statement listing file for test_crc.c... + + Test Runners + ------------ Generating runner for test_crc.c... - Compiling test_crc_runner.c... + + Determining Artifacts to Be Built... + + Building Objects + ---------------- Compiling test_crc.c... - Compiling Mockfassert.c... - Compiling crc.c... + Compiling test_crc::crc.c... + Compiling test_crc::unity.c... + Compiling test_crc::cmock.c... + Compiling test_crc::CException.c... + Compiling test_crc::test_crc_runner.c... + Compiling test_crc::Mockfassert.c... + + Building Test Executables + ------------------------- Linking test_crc.out... + + Executing + --------- Running test_crc.out... + + Running Raw Tests Output Report + ------------------------------- + Tests produced no extra console output. + + -------------------- + OVERALL TEST SUMMARY + -------------------- + TESTED: 1 + PASSED: 1 + FAILED: 0 + IGNORED: 0 + + Running Test Suite Reports + -------------------------- + Generating artifact ./artifacts/test/junit_tests_report.xml... + Generating artifact ./artifacts/test/cppunit_tests_report.xml... + + Ceedling operations completed in 5.25 seconds ``` + - It can be seen, that the test of the ``crc`` module requires generating some mocks and compiling these and other files, linking all that together and finally running the created test binary. -- In order to add this Ceedling-based test to this build, the following needs - to be done in ``build.test.json``: - - a new list item must be created with this basic setup: - ```json - { - "uut": { - "source": "", - "includes": [], - "framework-includes": [] - }, - "test": { - "includes": [], - "framework-includes": [] - }, - "runner": { - "includes": [], - "framework-includes": [], - "use": [] - } - } - ``` - - - In this item the source of the new *unit-under-test* (key: ``uut``, sub key - ``source``) must be added, e.g., for this exampling it then would be - - ``"source" : "src/app/driver/crc/crc.c"``. - - - Trying to compile this unit-under-test (``run_ut_gcc_build.bat -v -j 1``) - will fail, as most likely includes are missing. - - Therefore, the includes now need to added. The includes from the source - tree (key: ``includes``) are added by the using the path relative to the - repository root and the Ceedling and mock includes (key: - ``framework-includes``) are added by using magic names. - These magic names, and their respective values they are replaced with, are: - - ``cexception`` for ``tools/vendor/ceedling/vendor/c_exception/lib``, - - ``mocks`` for ``build/unit_test/test/mocks``, - - ``cmock`` for ``tools/vendor/ceedling/vendor/cmock/src`` and - - ``unity`` for ``tools/vendor/ceedling/vendor/unity/src``. - - Add ``includes`` and ``framework-includes`` as required, i.e., the - unit-under-test needs to compile without any error. - For this example, the ``uut`` key looks then like this: - ```json - "uut": { - "source": "src/app/driver/crc/crc.c", - "includes": [ - "src/app/main/include" - ], - "framework-includes": [ - "cexception" - ] - } - ``` - - At next, the ``test`` key needs to defined. - The name of the test file is derived from the unit-under-test, i.e., in - example it is ``tests/unit/app/driver/crc/test_crc.c``. - The build system therefore automatically derives the name of the test file - and only the ``includes`` and ``framework`` includes needed to be added. - This works the same as way as described above. - For this example, the ``test`` key looks then like this: - ```json - "test": { - "includes": [ - "src/app/driver/crc", - "src/app/main/include", - "src/os/freertos/include", - "src/os/freertos/include", - "src/os/freertos/portable/ccs/arm_cortex-r5" - ], - "framework-includes": [ - "cexception", - "mocks", - "unity" - ] - } - ``` - - As last step, the test runner needs to added using the key ``runner``. - The name of the test runner source is also derived automatically and is - therefore omitted in the configuration file. - Adding ``includes`` and ``framework-includes`` again works the same way. - As creating the test runner requires a linking step, it is needed to add a - list of required objects in order to link the binary (key: ``use``). - The ``use`` key again accepts the magic strings. These are for the Ceedling - objects: - - ``cexception`` built from - ``tools/vendor/ceedling/vendor/c_exception/lib/CException.c``, - - ``cmock`` built from - ``tools/vendor/ceedling/vendor/cmock/src/cmock.c`` and - - ``unity`` built from - ``tools/vendor/ceedling/vendor/unity/src/unity.c``. - - Furthermore, all other objects from other build steps for this binary - that are required for linking are also defined by magic strings. - The magic string for a object is the base name of the file that is compiled - in all lowercase and without file extension. - Based on the output from the original ceedling build it is seen, that - ``Mockfassert.c`` needs to be compiled for that test, which means the - object is required for linking. - To add this object the entry in the ``use`` list would be ``mockfassert``. - The unit-under-test as well as the test and the test runner are - automatically added as required objects and are therefore omitted. - For this example, the ``runner`` key looks then like this: - ```json - "runner": { - "includes": [ - "src/app/main/include", - "src/os/freertos/include", - "src/os/freertos/include", - "src/os/freertos/portable/ccs/arm_cortex-r5" - ], - "framework-includes": [ - "cexception", - "cmock", - "mocks", - "unity" - ], - "use": [ - "cexception", - "cmock", - "mockfassert", - "unity" - ] - } - ``` - - For some tests, more than just the unit-under-test, test file and test - runner are needed to be compiled and linked into the final test binary. - For these cases, the ``needs`` key can used. - This key contains a list of the additional sources. - For each entry in ``needs``, the ``source``, the ``includes`` and the - ``framework-includes`` can be added as needed in the same way as described above. - The objects that are created do not need to be added to the list in the - ``use`` key of the runner, as they are automatically added by the build - system. - - -### Adding a New Mock to Build - -If a new mock is created, it needs to be added in ``build.mocks.json``. -There it is only required to provide the path of the mock relative to -``build/unit_test`` using the key ``source`` and the includes relative to the -repository root using the key ``includes``. - - -# Configuration +- In order to add this ``Ceedling``-based test to this build, the following + needs to be done in ``build.json``. + The list of ``includes`` can be derived from the test file itself (see the + ``TEST_INCLUDE_PATH`` macro) and the paths configured in + ``conf/unit/project_win32.yml`` or ``conf/unit/project_posix.yml``. + The list of ``sources`` from the list of included mocks, plus the unit under + test itself plus all files that are added via ``TEST_SOURCE_FILE`` in the + test file. + Specific ``defines`` can be added per test. + For the file ``src/app/driver/crc/crc.c`` the setup looks then like this: + + ```json + "src/app/driver/crc/crc.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/test/mocks/test_crc", + "src/app/driver/crc", + "src/app/application/config", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5" + ], + "sources": [ + "build/unit_test/test/mocks/test_crc/Mockfassert.c", + "src/app/driver/crc/crc.c", + "tests/unit/app/driver/crc/test_crc.c", + "build/unit_test/test/runners/test_crc_runner.c" + ] + } + ] + ``` + + Note: This is a list of tests, i.e., there can be multiple tests per + implementation file, see for example for ``src/app/driver/can/can.c``: + + - ``tests/unit/app/driver/can/test_can.c`` + - ``tests/unit/app/driver/can/test_can_1.c`` + - ``tests/unit/app/driver/can/test_can_2.c`` + +## Configuration Most of the Axivion configuration is the same for the embedded source and the unit tests (compare ``test/axivion/axivion_config.json`` and ``tests/unit/axivion/axivion_config.json``). The main difference is that unit test functions need to start with ``test`` as the ceedling requires this (and accordingly to our guidelines would functions -would need to start with ``TEST``.) +would need to start with ``TEST``). diff --git a/tests/unit/app/application/algorithm/config/test_algorithm_cfg.c b/tests/unit/app/application/algorithm/config/test_algorithm_cfg.c index 4f285de2..6ed7ac52 100644 --- a/tests/unit/app/application/algorithm/config/test_algorithm_cfg.c +++ b/tests/unit/app/application/algorithm/config/test_algorithm_cfg.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_algorithm_cfg.c * @author foxBMS Team * @date 2020-06-30 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/application/algorithm/moving_average/test_moving_average.c b/tests/unit/app/application/algorithm/moving_average/test_moving_average.c index 053cb897..e1d57e99 100644 --- a/tests/unit/app/application/algorithm/moving_average/test_moving_average.c +++ b/tests/unit/app/application/algorithm/moving_average/test_moving_average.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_moving_average.c * @author foxBMS Team * @date 2020-07-01 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/application/algorithm/state_estimation/soc/counting/test_soc_counting.c b/tests/unit/app/application/algorithm/state_estimation/soc/counting/test_soc_counting.c index cb8dee89..85984687 100644 --- a/tests/unit/app/application/algorithm/state_estimation/soc/counting/test_soc_counting.c +++ b/tests/unit/app/application/algorithm/state_estimation/soc/counting/test_soc_counting.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_soc_counting.c * @author foxBMS Team * @date 2020-10-07 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * @@ -63,6 +63,7 @@ #include "foxmath.h" #include "state_estimation.h" +#include "test_assert_helper.h" #include @@ -83,6 +84,12 @@ TEST_INCLUDE_PATH("../../src/app/task/config") /*========== Definitions and Implementations for Unit Test ==================*/ FRAM_SOC_s fram_soc = {0}; +/**local copy of DATA_BLOCK_SOC_s table**/ +static DATA_BLOCK_SOC_s cp_pTableSoc = {.header.uniqueId = DATA_BLOCK_ID_SOC}; +/** Maximum SOC in percentage */ +#define SOC_MAXIMUM_SOC_perc (100.0f) +/** Minimum SOC in percentage */ +#define SOC_MINIMUM_SOC_perc (0.0f) /*========== Setup and Teardown =============================================*/ void setUp(void) { @@ -98,4 +105,61 @@ void testSE_GetStateOfChargeFromVoltage(void) { TEST_ASSERT_EQUAL(64.0f, test_soc); } +void testSOC_CheckDatabaseSocPercentageLimits(void) { + TEST_ASSERT_FAIL_ASSERT(TEST_SOC_CheckDatabaseSocPercentageLimits(&cp_pTableSoc, BS_NR_OF_STRINGS)); + for (uint8_t s = 0; s < BS_NR_OF_STRINGS; s++) { + TEST_ASSERT_FAIL_ASSERT(TEST_SOC_CheckDatabaseSocPercentageLimits(NULL_PTR, s)); + TEST_ASSERT_PASS_ASSERT(TEST_SOC_CheckDatabaseSocPercentageLimits(&cp_pTableSoc, s)); + + cp_pTableSoc.averageSoc_perc[s] = 101.0f; + TEST_SOC_CheckDatabaseSocPercentageLimits(&cp_pTableSoc, s); + TEST_ASSERT_EQUAL_FLOAT(SOC_MAXIMUM_SOC_perc, cp_pTableSoc.averageSoc_perc[s]); + cp_pTableSoc.averageSoc_perc[s] = -1.0f; + TEST_SOC_CheckDatabaseSocPercentageLimits(&cp_pTableSoc, s); + TEST_ASSERT_EQUAL_FLOAT(SOC_MINIMUM_SOC_perc, cp_pTableSoc.averageSoc_perc[s]); + + cp_pTableSoc.minimumSoc_perc[s] = 101.0f; + TEST_SOC_CheckDatabaseSocPercentageLimits(&cp_pTableSoc, s); + TEST_ASSERT_EQUAL_FLOAT(SOC_MAXIMUM_SOC_perc, cp_pTableSoc.minimumSoc_perc[s]); + cp_pTableSoc.minimumSoc_perc[s] = -1.0f; + TEST_SOC_CheckDatabaseSocPercentageLimits(&cp_pTableSoc, s); + TEST_ASSERT_EQUAL_FLOAT(SOC_MINIMUM_SOC_perc, cp_pTableSoc.minimumSoc_perc[s]); + + cp_pTableSoc.maximumSoc_perc[s] = 101.0f; + TEST_SOC_CheckDatabaseSocPercentageLimits(&cp_pTableSoc, s); + TEST_ASSERT_EQUAL_FLOAT(SOC_MAXIMUM_SOC_perc, cp_pTableSoc.maximumSoc_perc[s]); + cp_pTableSoc.maximumSoc_perc[s] = -1.0f; + TEST_SOC_CheckDatabaseSocPercentageLimits(&cp_pTableSoc, s); + TEST_ASSERT_EQUAL_FLOAT(SOC_MINIMUM_SOC_perc, cp_pTableSoc.maximumSoc_perc[s]); + } +} + +void testSOC_UpdateNvmValues(void) { + TEST_ASSERT_FAIL_ASSERT(TEST_SOC_UpdateNvmValues(&cp_pTableSoc, BS_NR_OF_STRINGS)); + for (uint8_t s = 0; s < BS_NR_OF_STRINGS; s++) { + TEST_ASSERT_FAIL_ASSERT(TEST_SOC_UpdateNvmValues(NULL_PTR, s)); + TEST_ASSERT_PASS_ASSERT(TEST_SOC_UpdateNvmValues(&cp_pTableSoc, s)); + + cp_pTableSoc.averageSoc_perc[s] = 1.0f; + TEST_SOC_UpdateNvmValues(&cp_pTableSoc, s); + TEST_ASSERT_EQUAL_FLOAT(1.0f, fram_soc.averageSoc_perc[s]); + + cp_pTableSoc.minimumSoc_perc[s] = 1.0f; + TEST_SOC_UpdateNvmValues(&cp_pTableSoc, s); + TEST_ASSERT_EQUAL_FLOAT(1.0f, fram_soc.minimumSoc_perc[s]); + + cp_pTableSoc.maximumSoc_perc[s] = 1.0f; + TEST_SOC_UpdateNvmValues(&cp_pTableSoc, s); + TEST_ASSERT_EQUAL_FLOAT(1.0f, fram_soc.maximumSoc_perc[s]); + + cp_pTableSoc.chargeThroughput_As[s] = 1.0f; + TEST_SOC_UpdateNvmValues(&cp_pTableSoc, s); + TEST_ASSERT_EQUAL_FLOAT(1.0f, fram_soc.chargeThroughput_As[s]); + + cp_pTableSoc.dischargeThroughput_As[s] = 1.0f; + TEST_SOC_UpdateNvmValues(&cp_pTableSoc, s); + TEST_ASSERT_EQUAL_FLOAT(1.0f, fram_soc.dischargeThroughput_As[s]); + } +} + /*========== Test Cases =====================================================*/ diff --git a/tests/unit/app/application/algorithm/state_estimation/soc/debug/test_soc_debug.c b/tests/unit/app/application/algorithm/state_estimation/soc/debug/test_soc_debug.c index e26ea859..323df4b1 100644 --- a/tests/unit/app/application/algorithm/state_estimation/soc/debug/test_soc_debug.c +++ b/tests/unit/app/application/algorithm/state_estimation/soc/debug/test_soc_debug.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_soc_debug.c * @author foxBMS Team * @date 2020-10-14 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * @@ -57,6 +57,9 @@ #include "Mockdatabase.h" #include "state_estimation.h" +#include "test_assert_helper.h" + +#include /*========== Unit Testing Framework Directives ==============================*/ TEST_SOURCE_FILE("soc_debug.c") @@ -74,7 +77,21 @@ void setUp(void) { void tearDown(void) { } -void testDummy(void) { +void testSE_InitializeStateOfCharge(void) { + DATA_BLOCK_SOC_s se_tableSocEstimation = {.header.uniqueId = DATA_BLOCK_ID_SOC}; + + TEST_ASSERT_FAIL_ASSERT(SE_InitializeStateOfCharge(NULL_PTR, true, 0u)); + TEST_ASSERT_FAIL_ASSERT(SE_InitializeStateOfCharge(&se_tableSocEstimation, true, BS_NR_OF_STRINGS)); +} + +void testSE_CalculateStateOfCharge(void) { + DATA_BLOCK_SOC_s se_tableSocEstimation = {.header.uniqueId = DATA_BLOCK_ID_SOC}; + TEST_ASSERT_FAIL_ASSERT(SE_CalculateStateOfCharge(NULL_PTR)); + SE_CalculateStateOfCharge(&se_tableSocEstimation); +} + +void testSE_GetStateOfChargeFromVoltage(void) { + TEST_ASSERT_EQUAL_FLOAT(0.50f, SE_GetStateOfChargeFromVoltage(0u)); } /*========== Test Cases =====================================================*/ diff --git a/tests/unit/app/application/algorithm/state_estimation/soc/none/test_soc_none.c b/tests/unit/app/application/algorithm/state_estimation/soc/none/test_soc_none.c index d368d373..50c94737 100644 --- a/tests/unit/app/application/algorithm/state_estimation/soc/none/test_soc_none.c +++ b/tests/unit/app/application/algorithm/state_estimation/soc/none/test_soc_none.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_soc_none.c * @author foxBMS Team * @date 2020-10-14 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * @@ -57,6 +57,7 @@ #include "Mockdatabase.h" #include "state_estimation.h" +#include "test_assert_helper.h" /*========== Unit Testing Framework Directives ==============================*/ TEST_SOURCE_FILE("soc_none.c") @@ -64,8 +65,10 @@ TEST_SOURCE_FILE("soe_none.c") TEST_SOURCE_FILE("soh_none.c") TEST_INCLUDE_PATH("../../src/app/application/algorithm/state_estimation") +TEST_INCLUDE_PATH("../../src/app/task/config") /*========== Definitions and Implementations for Unit Test ==================*/ +DATA_BLOCK_SOC_s table_testSoc = {.header.uniqueId = DATA_BLOCK_ID_SOC}; /*========== Setup and Teardown =============================================*/ void setUp(void) { @@ -74,7 +77,72 @@ void setUp(void) { void tearDown(void) { } -void testDummy(void) { +/*========== Test Cases =====================================================*/ +/** + * @brief Testing extern function #SE_InitializeStateOfCharge + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/3: NULL_PTR for pSocValues -> assert + * - AT2/3: invalid energy counter option -> assert + * - AT3/3: invalid string number -> assert + * - Routine validation: + * - RT1/1: function shall do nothing + */ +void testSE_InitializeStateOfCharge(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/3 ======= */ + TEST_ASSERT_FAIL_ASSERT(SE_InitializeStateOfCharge(NULL_PTR, true, BS_NR_OF_STRINGS - 1u)); + /* ======= AT2/3 ======= */ + /* true/false not testable due to implicit cast */ + /* ======= AT3/3 ======= */ + TEST_ASSERT_FAIL_ASSERT(SE_InitializeStateOfCharge(&table_testSoc, true, BS_NR_OF_STRINGS)); + + /* ======= Routine tests =============================================== */ + /* ======= RT1/1: Test implementation */ + /* ======= RT1/1: call function under test */ + SE_InitializeStateOfCharge(&table_testSoc, true, BS_NR_OF_STRINGS - 1u); + /* ======= RT1/1: test output verification */ + /* nothing to be verified */ } -/*========== Test Cases =====================================================*/ +/** + * @brief Testing extern function #SE_CalculateStateOfCharge + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/1: NULL_PTR for pSohValues -> assert + * - Routine validation: + * - RT1/1: function shall do nothing + */ +void testSE_CalculateStateOfCharge(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/1 ======= */ + TEST_ASSERT_FAIL_ASSERT(SE_CalculateStateOfCharge(NULL_PTR)); + + /* ======= Routine tests =============================================== */ + /* ======= RT1/1: Test implementation */ + /* ======= RT1/1: call function under test */ + SE_CalculateStateOfCharge(&table_testSoc); + /* ======= RT1/1: test output verification */ + /* nothing to be verified */ +} + +/** + * @brief Testing extern function #SE_GetStateOfChargeFromVoltage + * @details The following cases need to be tested: + * - Argument validation: + * - none (void function) + * - Routine validation: + * - RT1/1: function shall return 0.0f + */ +void testSE_GetStateOfChargeFromVoltage(void) { + /* ======= Assertion tests ============================================= */ + /* none */ + + /* ======= Routine tests =============================================== */ + /* ======= RT1/1: Test implementation */ + const float_t expectedSocFromVoltage = 0.0f; + /* ======= RT1/1: call function under test */ + const float_t socFromVoltage = SE_GetStateOfChargeFromVoltage(1); + /* ======= RT1/1: test output verification */ + TEST_ASSERT_EQUAL_FLOAT(expectedSocFromVoltage, socFromVoltage); +} diff --git a/tests/unit/app/application/algorithm/state_estimation/soe/counting/test_soe_counting.c b/tests/unit/app/application/algorithm/state_estimation/soe/counting/test_soe_counting.c index 1759d393..ea174dfe 100644 --- a/tests/unit/app/application/algorithm/state_estimation/soe/counting/test_soe_counting.c +++ b/tests/unit/app/application/algorithm/state_estimation/soe/counting/test_soe_counting.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_soe_counting.c * @author foxBMS Team * @date 2020-10-07 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/application/algorithm/state_estimation/soe/debug/test_soe_debug.c b/tests/unit/app/application/algorithm/state_estimation/soe/debug/test_soe_debug.c index a6abbddf..6d7d25c9 100644 --- a/tests/unit/app/application/algorithm/state_estimation/soe/debug/test_soe_debug.c +++ b/tests/unit/app/application/algorithm/state_estimation/soe/debug/test_soe_debug.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_soe_debug.c * @author foxBMS Team * @date 2020-10-14 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * @@ -57,6 +57,9 @@ #include "Mockdatabase.h" #include "state_estimation.h" +#include "test_assert_helper.h" + +#include /*========== Unit Testing Framework Directives ==============================*/ TEST_SOURCE_FILE("soc_debug.c") @@ -74,7 +77,16 @@ void setUp(void) { void tearDown(void) { } -void testDummy(void) { +void testSE_InitializeStateOfEnergy(void) { + DATA_BLOCK_SOE_s se_tableSoeEstimation = {.header.uniqueId = DATA_BLOCK_ID_SOE}; + TEST_ASSERT_FAIL_ASSERT(SE_InitializeStateOfEnergy(NULL_PTR, true, 0u)); + TEST_ASSERT_FAIL_ASSERT(SE_InitializeStateOfEnergy(&se_tableSoeEstimation, true, BS_NR_OF_STRINGS)); + + SE_InitializeStateOfEnergy(&se_tableSoeEstimation, true, 0u); +} + +void testSE_CalculateStateOfEnergy(void) { + TEST_ASSERT_FAIL_ASSERT(SE_CalculateStateOfEnergy(NULL_PTR)); } /*========== Test Cases =====================================================*/ diff --git a/tests/unit/app/application/algorithm/state_estimation/soe/none/test_soe_none.c b/tests/unit/app/application/algorithm/state_estimation/soe/none/test_soe_none.c index d124b470..f24bf8bb 100644 --- a/tests/unit/app/application/algorithm/state_estimation/soe/none/test_soe_none.c +++ b/tests/unit/app/application/algorithm/state_estimation/soe/none/test_soe_none.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_soe_none.c * @author foxBMS Team * @date 2020-10-14 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * @@ -57,6 +57,7 @@ #include "Mockdatabase.h" #include "state_estimation.h" +#include "test_assert_helper.h" /*========== Unit Testing Framework Directives ==============================*/ TEST_SOURCE_FILE("soc_none.c") @@ -64,8 +65,10 @@ TEST_SOURCE_FILE("soe_none.c") TEST_SOURCE_FILE("soh_none.c") TEST_INCLUDE_PATH("../../src/app/application/algorithm/state_estimation") +TEST_INCLUDE_PATH("../../src/app/task/config") /*========== Definitions and Implementations for Unit Test ==================*/ +DATA_BLOCK_SOE_s table_testSoe = {.header.uniqueId = DATA_BLOCK_ID_SOE}; /*========== Setup and Teardown =============================================*/ void setUp(void) { @@ -74,7 +77,51 @@ void setUp(void) { void tearDown(void) { } -void testDummy(void) { +/*========== Test Cases =====================================================*/ +/** + * @brief Testing extern function #SE_InitializeStateOfEnergy + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/3: NULL_PTR for pSoeValues -> assert + * - AT2/3: invalid energy counter option -> assert + * - AT3/3: invalid string number -> assert + * - Routine validation: + * - RT1/1: function shall do nothing + */ +void testSE_InitializeStateOfEnergy(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/3 ======= */ + TEST_ASSERT_FAIL_ASSERT(SE_InitializeStateOfEnergy(NULL_PTR, true, BS_NR_OF_STRINGS - 1u)); + /* ======= AT2/3 ======= */ + /* true/false not testable due to implicit cast */ + /* ======= AT3/3 ======= */ + TEST_ASSERT_FAIL_ASSERT(SE_InitializeStateOfEnergy(&table_testSoe, true, BS_NR_OF_STRINGS)); + + /* ======= Routine tests =============================================== */ + /* ======= RT1/1: Test implementation */ + /* ======= RT1/1: call function under test */ + SE_InitializeStateOfEnergy(&table_testSoe, true, BS_NR_OF_STRINGS - 1u); + /* ======= RT1/1: test output verification */ + /* nothing to be verified */ } -/*========== Test Cases =====================================================*/ +/** + * @brief Testing extern function #SE_CalculateStateOfEnergy + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/1: NULL_PTR for pSohValues -> assert + * - Routine validation: + * - RT1/1: function shall do nothing + */ +void testSE_CalculateStateOfEnergy(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/1 ======= */ + TEST_ASSERT_FAIL_ASSERT(SE_CalculateStateOfEnergy(NULL_PTR)); + + /* ======= Routine tests =============================================== */ + /* ======= RT1/1: Test implementation */ + /* ======= RT1/1: call function under test */ + SE_CalculateStateOfEnergy(&table_testSoe); + /* ======= RT1/1: test output verification */ + /* nothing to be verified */ +} diff --git a/tests/unit/app/application/algorithm/state_estimation/sof/trapezoid/test_sof_trapezoid.c b/tests/unit/app/application/algorithm/state_estimation/sof/trapezoid/test_sof_trapezoid.c index 533fa4e8..3e55a102 100644 --- a/tests/unit/app/application/algorithm/state_estimation/sof/trapezoid/test_sof_trapezoid.c +++ b/tests/unit/app/application/algorithm/state_estimation/sof/trapezoid/test_sof_trapezoid.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_sof_trapezoid.c * @author foxBMS Team * @date 2020-10-07 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * @@ -56,11 +56,11 @@ #include "unity.h" #include "Mockbms.h" #include "Mockdatabase.h" +#include "Mockfoxmath.h" #include "Mockfram.h" #include "sof_trapezoid_cfg.h" -#include "foxmath.h" #include "sof_trapezoid.h" /*========== Unit Testing Framework Directives ==============================*/ diff --git a/tests/unit/app/application/algorithm/state_estimation/sof/trapezoid/test_sof_trapezoid_cfg.c b/tests/unit/app/application/algorithm/state_estimation/sof/trapezoid/test_sof_trapezoid_cfg.c index ccebba53..3ff411c3 100644 --- a/tests/unit/app/application/algorithm/state_estimation/sof/trapezoid/test_sof_trapezoid_cfg.c +++ b/tests/unit/app/application/algorithm/state_estimation/sof/trapezoid/test_sof_trapezoid_cfg.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_sof_trapezoid_cfg.c * @author foxBMS Team * @date 2020-10-07 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/application/algorithm/state_estimation/soh/debug/test_soh_debug.c b/tests/unit/app/application/algorithm/state_estimation/soh/debug/test_soh_debug.c index 57e835d5..eadc81e4 100644 --- a/tests/unit/app/application/algorithm/state_estimation/soh/debug/test_soh_debug.c +++ b/tests/unit/app/application/algorithm/state_estimation/soh/debug/test_soh_debug.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_soh_debug.c * @author foxBMS Team * @date 2020-10-14 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * @@ -76,11 +76,24 @@ void tearDown(void) { } /*========== Test Cases =====================================================*/ -/** test invalid input values */ -void testInvalidInput(void) { - DATA_BLOCK_SOH_s table_testSoh = {.header.uniqueId = DATA_BLOCK_ID_SOH}; - TEST_ASSERT_FAIL_ASSERT(SE_InitializeStateOfHealth(NULL_PTR, BS_NR_OF_STRINGS - 1u)); - TEST_ASSERT_FAIL_ASSERT(SE_InitializeStateOfHealth(&table_testSoh, BS_NR_OF_STRINGS)); +void testSE_InitializeStateOfHealth(void) { + static DATA_BLOCK_SOH_s se_tableSohEstimation = {.header.uniqueId = DATA_BLOCK_ID_SOH}; + TEST_ASSERT_FAIL_ASSERT(SE_InitializeStateOfHealth(NULL_PTR, 0u)); + TEST_ASSERT_FAIL_ASSERT(SE_InitializeStateOfHealth(&se_tableSohEstimation, BS_NR_OF_STRINGS)); + + SE_InitializeStateOfHealth(&se_tableSohEstimation, 0u); + TEST_ASSERT_EQUAL_FLOAT(0.0f, se_tableSohEstimation.averageSoh_perc[0]); + TEST_ASSERT_EQUAL_FLOAT(0.0f, se_tableSohEstimation.minimumSoh_perc[0]); + TEST_ASSERT_EQUAL_FLOAT(0.0f, se_tableSohEstimation.maximumSoh_perc[0]); +} + +void testSE_CalculateStateOfHealth(void) { + static DATA_BLOCK_SOH_s se_tableSohEstimation = {.header.uniqueId = DATA_BLOCK_ID_SOH}; TEST_ASSERT_FAIL_ASSERT(SE_CalculateStateOfHealth(NULL_PTR)); + + SE_CalculateStateOfHealth(&se_tableSohEstimation); + TEST_ASSERT_EQUAL_FLOAT(50.0f, se_tableSohEstimation.averageSoh_perc[0]); + TEST_ASSERT_EQUAL_FLOAT(49.9f, se_tableSohEstimation.minimumSoh_perc[0]); + TEST_ASSERT_EQUAL_FLOAT(50.1f, se_tableSohEstimation.maximumSoh_perc[0]); } diff --git a/tests/unit/app/application/algorithm/state_estimation/soh/none/test_soh_none.c b/tests/unit/app/application/algorithm/state_estimation/soh/none/test_soh_none.c index 120a839e..45ecf08c 100644 --- a/tests/unit/app/application/algorithm/state_estimation/soh/none/test_soh_none.c +++ b/tests/unit/app/application/algorithm/state_estimation/soh/none/test_soh_none.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_soh_none.c * @author foxBMS Team * @date 2020-10-14 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * @@ -68,6 +68,7 @@ TEST_INCLUDE_PATH("../../src/app/application/algorithm/state_estimation") TEST_INCLUDE_PATH("../../src/app/task/config") /*========== Definitions and Implementations for Unit Test ==================*/ +DATA_BLOCK_SOH_s table_testSoh = {.header.uniqueId = DATA_BLOCK_ID_SOH}; /*========== Setup and Teardown =============================================*/ void setUp(void) { @@ -77,11 +78,47 @@ void tearDown(void) { } /*========== Test Cases =====================================================*/ -/** test invalid input values */ -void testInvalidInput(void) { - DATA_BLOCK_SOH_s table_testSoh = {.header.uniqueId = DATA_BLOCK_ID_SOH}; +/** + * @brief Testing extern function #SE_InitializeStateOfHealth + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/2: NULL_PTR for pSohValues -> assert + * - AT2/2: invalid string number -> assert + * - Routine validation: + * - RT1/1: function shall do nothing + */ +void testSE_InitializeStateOfHealth(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/2 ======= */ TEST_ASSERT_FAIL_ASSERT(SE_InitializeStateOfHealth(NULL_PTR, BS_NR_OF_STRINGS - 1u)); + /* ======= AT2/2 ======= */ TEST_ASSERT_FAIL_ASSERT(SE_InitializeStateOfHealth(&table_testSoh, BS_NR_OF_STRINGS)); + /* ======= Routine tests =============================================== */ + /* ======= RT1/1: Test implementation */ + /* ======= RT1/1: call function under test */ + SE_InitializeStateOfHealth(&table_testSoh, BS_NR_OF_STRINGS - 1u); + /* ======= RT1/1: test output verification */ + /* nothing to be verified */ +} + +/** + * @brief Testing extern function #SE_CalculateStateOfHealth + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/1: NULL_PTR for pSohValues -> assert + * - Routine validation: + * - RT1/1: function shall do nothing + */ +void testSE_CalculateStateOfHealth(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/1 ======= */ TEST_ASSERT_FAIL_ASSERT(SE_CalculateStateOfHealth(NULL_PTR)); + + /* ======= Routine tests =============================================== */ + /* ======= RT1/1: Test implementation */ + /* ======= RT1/1: call function under test */ + SE_CalculateStateOfHealth(&table_testSoh); + /* ======= RT1/1: test output verification */ + /* nothing to be verified */ } diff --git a/tests/unit/app/application/algorithm/state_estimation/test_state_estimation.c b/tests/unit/app/application/algorithm/state_estimation/test_state_estimation.c index 462223fc..a19c8133 100644 --- a/tests/unit/app/application/algorithm/state_estimation/test_state_estimation.c +++ b/tests/unit/app/application/algorithm/state_estimation/test_state_estimation.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_state_estimation.c * @author foxBMS Team * @date 2020-10-14 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/application/algorithm/test_algorithm.c b/tests/unit/app/application/algorithm/test_algorithm.c index 09924510..23bf603b 100644 --- a/tests/unit/app/application/algorithm/test_algorithm.c +++ b/tests/unit/app/application/algorithm/test_algorithm.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_algorithm.c * @author foxBMS Team * @date 2020-06-30 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/application/bal/history/test_bal_strategy_history.c b/tests/unit/app/application/bal/history/test_bal_strategy_history.c index f1017fe5..bd6d8b44 100644 --- a/tests/unit/app/application/bal/history/test_bal_strategy_history.c +++ b/tests/unit/app/application/bal/history/test_bal_strategy_history.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_bal_strategy_history.c * @author foxBMS Team * @date 2020-06-05 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * @@ -96,11 +96,11 @@ void tearDown(void) { /*========== Test Cases =====================================================*/ void testCheckBalancingInitByDisablingBalancing(void) { DATA_BLOCK_BALANCING_CONTROL_s *pBalancing = TEST_BAL_GetBalancingControl(); - pBalancing->enableBalancing = 1; + pBalancing->enableBalancing = true; DATA_Read1DataBlock_IgnoreAndReturn(STD_OK); DATA_Write1DataBlock_IgnoreAndReturn(STD_OK); BAL_Init(pBalancing); - TEST_ASSERT_EQUAL(0, pBalancing->enableBalancing); + TEST_ASSERT_EQUAL(false, pBalancing->enableBalancing); } void testBalancingGetState(void) { diff --git a/tests/unit/app/application/bal/none/test_bal_strategy_none.c b/tests/unit/app/application/bal/none/test_bal_strategy_none.c index 4902c990..ceab1abc 100644 --- a/tests/unit/app/application/bal/none/test_bal_strategy_none.c +++ b/tests/unit/app/application/bal/none/test_bal_strategy_none.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_bal_strategy_none.c * @author foxBMS Team * @date 2020-08-03 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/application/bal/test_bal.c b/tests/unit/app/application/bal/test_bal.c index 20614336..8d6a3056 100644 --- a/tests/unit/app/application/bal/test_bal.c +++ b/tests/unit/app/application/bal/test_bal.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_bal.c * @author foxBMS Team * @date 2020-08-05 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * @@ -119,7 +119,7 @@ void testSubstateChanged(void) { TEST_ASSERT_EQUAL(initState.substate, BAL_CHECK_IMBALANCES); } -void testFiniteStateMachineCheckReEntranceFunction(void) { +void testFiniteStateMachineCheckReentranceFunction(void) { OS_EnterTaskCritical_Expect(); OS_ExitTaskCritical_Expect(); uint8_t returnValue = 0; @@ -168,7 +168,7 @@ void testFiniteStateMachineCheckStateRequestFunction3(void) { } void testFiniteStateMachineCheckStateRequestFunction4(void) { BAL_RETURN_TYPE_e returnValue = BAL_OK; - returnValue = BAL_CheckStateRequest(&initState, BAL_STATE_ALLOWBALANCING_REQUEST); + returnValue = BAL_CheckStateRequest(&initState, BAL_STATE_ALLOW_BALANCING_REQUEST); TEST_ASSERT_EQUAL(returnValue, BAL_OK); } void testFiniteStateMachineCheckStateRequestFunction5(void) { @@ -193,20 +193,20 @@ void testFiniteStateMachineCheckStateRequestFunction7(void) { TEST_ASSERT_EQUAL(returnValue, BAL_ILLEGAL_REQUEST); } -void testProcessStateUninitalized0(void) { - BAL_ProcessStateUninitalized(&initState, BAL_STATE_INIT_REQUEST); +void testProcessStateUninitialized0(void) { + BAL_ProcessStateUninitialized(&initState, BAL_STATE_INIT_REQUEST); TEST_ASSERT_EQUAL(initState.timer, BAL_STATEMACH_SHORTTIME_100ms); TEST_ASSERT_EQUAL(initState.state, BAL_STATEMACH_INITIALIZATION); TEST_ASSERT_EQUAL(initState.substate, BAL_ENTRY); } -void testProcessStateUninitalized1(void) { - BAL_ProcessStateUninitalized(&initState, BAL_STATE_NO_REQUEST); +void testProcessStateUninitialized1(void) { + BAL_ProcessStateUninitialized(&initState, BAL_STATE_NO_REQUEST); } -void testProcessStateUninitalized2(void) { +void testProcessStateUninitialized2(void) { initState.errorRequestCounter = 0xFE; - BAL_ProcessStateUninitalized(&initState, BAL_STATE_ERROR_REQUEST); + BAL_ProcessStateUninitialized(&initState, BAL_STATE_ERROR_REQUEST); TEST_ASSERT_EQUAL(initState.errorRequestCounter, 0xFF); } diff --git a/tests/unit/app/application/bal/voltage/test_bal_strategy_voltage.c b/tests/unit/app/application/bal/voltage/test_bal_strategy_voltage.c index 3a34e800..eddb5601 100644 --- a/tests/unit/app/application/bal/voltage/test_bal_strategy_voltage.c +++ b/tests/unit/app/application/bal/voltage/test_bal_strategy_voltage.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_bal_strategy_voltage.c * @author foxBMS Team * @date 2020-06-05 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * @@ -94,11 +94,11 @@ void tearDown(void) { /*========== Test Cases =====================================================*/ void testCheckBalancingInitByDisablingBalancing(void) { DATA_BLOCK_BALANCING_CONTROL_s *pBalancing = TEST_BAL_GetBalancingControl(); - pBalancing->enableBalancing = 1; + pBalancing->enableBalancing = true; DATA_Read1DataBlock_IgnoreAndReturn(STD_OK); DATA_Write1DataBlock_IgnoreAndReturn(STD_OK); BAL_Init(pBalancing); - TEST_ASSERT_EQUAL(0, pBalancing->enableBalancing); + TEST_ASSERT_EQUAL(false, pBalancing->enableBalancing); } void testBalancingGetState(void) { diff --git a/tests/unit/app/application/bms/test_bms.c b/tests/unit/app/application/bms/test_bms.c index 11d1f3da..23acdc94 100644 --- a/tests/unit/app/application/bms/test_bms.c +++ b/tests/unit/app/application/bms/test_bms.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_bms.c * @author foxBMS Team * @date 2020-04-01 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/application/config/battery_system_cfg_unit_test.h b/tests/unit/app/application/config/battery_system_cfg_unit_test.h new file mode 100644 index 00000000..d4a682fe --- /dev/null +++ b/tests/unit/app/application/config/battery_system_cfg_unit_test.h @@ -0,0 +1,398 @@ +/** + * + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * We kindly request you to use one or more of the following phrases to refer to + * foxBMS in your hardware, software, documentation or advertising materials: + * + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" + * + */ + +/** + * @file battery_system_cfg_unit_test.h + * @author foxBMS Team + * @date 2019-12-10 (date of creation) + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup BATTERY_SYSTEM_CONFIGURATION + * @prefix BS + * + * @brief Configuration of the battery system (e.g., number of battery + * modules, battery cells, temperature sensors) + * @details This files contains basic macros of the battery system in order to + * derive needed inputs in other parts of the software. These macros + * are all depended on the hardware. + */ + +#ifndef FOXBMS__BATTERY_SYSTEM_CFG_UNIT_TEST_H_ +#define FOXBMS__BATTERY_SYSTEM_CFG_UNIT_TEST_H_ + +/*========== Includes =======================================================*/ +#include "general.h" + +#include "fassert.h" + +#include +#include + +/*========== Unit Testing Framework Directives ==============================*/ + +/*========== Macros and Definitions =========================================*/ + +/** Symbolic identifiers for strings with precharge */ +typedef enum { + BS_STRING_WITH_PRECHARGE, + BS_STRING_WITHOUT_PRECHARGE, +} BS_STRING_PRECHARGE_PRESENT_e; + +/** Symbolic identifiers for strings. */ +#if defined(TEST_BS_NR_OF_STRINGS) && (TEST_BS_NR_OF_STRINGS == 1u) +/* in case someone defines the standard case (see macro BS_NR_OF_STRINGS )*/ +typedef enum { + BS_STRING0 = 0u, + BS_STRING_MAX = 1u, +} BS_STRING_ID_e; +#elif defined(TEST_BS_NR_OF_STRINGS) && (TEST_BS_NR_OF_STRINGS == 2u) +typedef enum { + BS_STRING0 = 0u, + BS_STRING1 = 1u, + BS_STRING_MAX = 2u, +} BS_STRING_ID_e; +#elif defined(TEST_BS_NR_OF_STRINGS) && (TEST_BS_NR_OF_STRINGS > 2u) +#error "Setting currently not supported" +#else +/* default case: see macro BS_NR_OF_STRINGS */ +typedef enum { + BS_STRING0 = 0u, + BS_STRING_MAX = 1u, +} BS_STRING_ID_e; +#endif /* TEST_BS_NR_OF_STRINGS */ + +/** Define if discharge current is seen as positive or negative */ +#define BS_POSITIVE_DISCHARGE_CURRENT (true) + +/** + * @brief Number of parallel strings in the battery pack + * @details For details see + * Naming Conventions. + * Implementation detail: The number of parallel strings cannot exceed + * #GEN_REPEAT_MAXIMUM_REPETITIONS unless the implementation of the + * repetition macro is adapted. + * @ptype uint + */ +#ifdef TEST_BS_NR_OF_STRINGS +/* define TEST_BS_NR_OF_STRINGS with wanted number of strings for unit test*/ +#define BS_NR_OF_STRINGS (TEST_BS_NR_OF_STRINGS) +#else +#define BS_NR_OF_STRINGS (1u) +#endif + +/* safety check: due to implementation BS_NR_OF_STRINGS may not be larger than GEN_REPEAT_MAXIMUM_REPETITIONS */ +#if (BS_NR_OF_STRINGS > GEN_REPEAT_MAXIMUM_REPETITIONS) +#error "Too large number of strings, please check implementation of GEN_REPEAT_U()." +#endif + +/** + * @brief number of modules in a string + * @details For details see + * Naming Conventions. + * @ptype uint + */ +#ifdef TEST_BS_NR_OF_MODULES_PER_STRING +#define BS_NR_OF_MODULES_PER_STRING (TEST_BS_NR_OF_MODULES_PER_STRING) +#else +#define BS_NR_OF_MODULES_PER_STRING (1u) +#endif + +/** + * @brief number of cells per module + * @details number of cells per module, where parallel cells are + * counted as one cell block. + * For details see + * Naming Conventions. + * @ptype uint + */ +#if defined(TEST_BS_NR_OF_CELL_BLOCKS_PER_MODULE) +#define BS_NR_OF_CELL_BLOCKS_PER_MODULE (TEST_BS_NR_OF_CELL_BLOCKS_PER_MODULE) +#else +#define BS_NR_OF_CELL_BLOCKS_PER_MODULE (18u) +#endif + +/** + * @brief number of parallel connected battery cells in a cell block + * @details For details see + * Naming Conventions. + * @ptype uint + */ +#define BS_NR_OF_PARALLEL_CELLS_PER_CELL_BLOCK (1u) + +/** Value of the balancing resistors on the slave-board */ +#define BS_BALANCING_RESISTANCE_ohm (100.0) + +/** + * @def BS_NR_OF_GPIOS_PER_MODULE + * @brief Defines the number of GPIOs + */ +#define BS_NR_OF_GPIOS_PER_MODULE (10u) + +/** + * @def BS_NR_OF_GPAS_PER_MODULE + * @brief Defines the number of GPA inputs + */ +#define BS_NR_OF_GPAS_PER_MODULE (2u) + +/** + * @brief number of temperature sensors per battery module + * @ptype int + */ +#define BS_NR_OF_TEMP_SENSORS_PER_MODULE (8u) + +#if BS_NR_OF_TEMP_SENSORS_PER_MODULE > BS_NR_OF_GPIOS_PER_MODULE +#error "Number of temperature inputs cannot be higher than number of GPIOs" +#endif + +/** number of battery cells in a string */ +#define BS_NR_OF_CELL_BLOCKS_PER_STRING (BS_NR_OF_MODULES_PER_STRING * BS_NR_OF_CELL_BLOCKS_PER_MODULE) +/** number of battery cells in the battery system*/ +#define BS_NR_OF_CELL_BLOCKS (BS_NR_OF_CELL_BLOCKS_PER_STRING * BS_NR_OF_STRINGS) +/** number of temperature sensors in a string */ +#define BS_NR_OF_TEMP_SENSORS_PER_STRING (BS_NR_OF_MODULES_PER_STRING * BS_NR_OF_TEMP_SENSORS_PER_MODULE) +/** total number of temperature sensors in the battery system */ +#define BS_NR_OF_TEMP_SENSORS (BS_NR_OF_TEMP_SENSORS_PER_STRING * BS_NR_OF_STRINGS) + +/** + * @details - If set to false, foxBMS does not check for the presence of a + * current sensor. + * - If set to true, foxBMS checks for the presence of a current + * sensor. If sensor stops responding during runtime, an error is + * raised. + */ +#define BS_CURRENT_SENSOR_PRESENT (false) + +#if BS_CURRENT_SENSOR_PRESENT == true +/** + * defines if the Isabellenhuette current sensor is used in cyclic or triggered mode + */ +#define CURRENT_SENSOR_ISABELLENHUETTE_CYCLIC +/* #define CURRENT_SENSOR_ISABELLENHUETTE_TRIGGERED */ + +/** Delay in ms after which it is considered the current measurement is not responding anymore. */ +#define BS_CURRENT_MEASUREMENT_RESPONSE_TIMEOUT_ms (200u) + +/** Delay in ms after which it is considered the coulomb counting is not responding anymore. */ +#define BS_COULOMB_COUNTING_MEASUREMENT_RESPONSE_TIMEOUT_ms (2000u) + +/** Delay in ms after which it is considered the energy counting is not responding anymore. */ +#define BS_ENERGY_COUNTING_MEASUREMENT_RESPONSE_TIMEOUT_ms (2000u) + +#endif /* BS_CURRENT_SENSOR_PRESENT == true */ + +/** + * @brief Maximum break current of main contactors. + * @details The contacts of the main contactors can be welded, when attempting + * to interrupt the current flow while a current higher than the + * maximum break current of the contactor is flowing. + * + * Thus, the contactors will not be opened if the floating current is + * above this value. The fuse should trigger to interrupt current + * flows above this value. + */ +#define BS_MAIN_CONTACTORS_MAXIMUM_BREAK_CURRENT_mA (500000) + +/** + * @brief Maximum fuse trigger duration + * @details If the current is above #BS_MAIN_CONTACTORS_MAXIMUM_BREAK_CURRENT_mA, + * the BMS state machine will wait this time until the fuse triggers so + * that the current will be interrupted by the fuse and not the + * contactors. After this time, the BMS will nevertheless try to open + * the contactors. + */ +#define BS_MAIN_FUSE_MAXIMUM_TRIGGER_DURATION_ms (30000u) + +/** + * @brief Maximum string current limit in mA that is used in the SOA module + * to check for string overcurrent + * @details When maximum safety limit (MSL) is violated, error state is + * requested and contactors will open. + */ +#define BS_MAXIMUM_STRING_CURRENT_mA (10000u) + +/** + * @brief Maximum pack current limit in mA that is used in the SOA module + * to check for pack overcurrent + * @details When maximum safety limit (MSL) is violated, error state is + * requested and contactors will open. + */ +#define BS_MAXIMUM_PACK_CURRENT_mA (10000u * BS_NR_OF_STRINGS) + +/** + * @brief Define if interlock feedback should be discarded or not + * @details True: interlock feedback will be discarded + * False: interlock feedback will evaluated + */ +#define BS_IGNORE_INTERLOCK_FEEDBACK (false) + +/** + * @brief Defines whether CAN timing shall be evaluated or not + * @details - If set to false, foxBMS does not check CAN timing. + * - If set to true, foxBMS checks CAN timing. A valid request must + * come every 100ms, within the 95-150ms window. + */ +#define BS_CHECK_CAN_TIMING (true) + +/** + * @brief Defines whether balancing shall be available or not + * @details - If set to true, balancing is deactivated completely. + * - If set to false, foxBMS checks when balancing must be done and + * activates it accordingly. + */ +#define BS_BALANCING_DEFAULT_INACTIVE (true) + +/** + * @brief number of high voltage inputs measured by current sensors (like + * IVT-MOD) + * @ptype int + */ +#define BS_NR_OF_VOLTAGES_FROM_CURRENT_SENSOR (3u) + +/** Number of contactors in addition to string contactors (e.g., PRECHARGE).*/ +#define BS_NR_OF_CONTACTORS_OUTSIDE_STRINGS (1u) + +/** Total number of contactors in system: + * - Two contactors per string (string+ and string-) + * - One optional precharge contactor for each string */ +#define BS_NR_OF_CONTACTORS ((2u * BS_NR_OF_STRINGS) + BS_NR_OF_CONTACTORS_OUTSIDE_STRINGS) + +/** + * @brief current threshold for determining rest state of battery. If absolute + * current is below this limit value the battery is resting. + */ +#define BS_REST_CURRENT_mA (200) + +/** + * @brief Wait time in 10ms before battery system is at rest. Balancing for + * example only starts if battery system is at rest. + */ +#define BS_RELAXATION_PERIOD_10ms (60000u) + +/** + * @brief current sensor threshold for 0 current in mA as the sensor has a + * jitter. + */ +#define BS_CS_THRESHOLD_NO_CURRENT_mA (200u) + +/** + * @brief Maximum voltage drop over fuse. + * @details If the measured voltage difference between battery voltage + * voltage after fuse is larger than this value. It can be concluded, + * that the fuse has tripped. The voltage difference can be estimated + * by the maximum current and the resistance. + * For a Cooper Bussmann 1000A fuse the voltage drop can be estimated + * to: I_max = 1000A and P_loss = 206W + * -> voltage drop at 1000A roughly 206mV + * -> select 500mV because of measurement inaccuracies + */ +#define BS_MAX_VOLTAGE_DROP_OVER_FUSE_mV (500) + +/** + * @brief TODO + * @details Set to true if fuse in NORMAL path should be checked. This can only + * be done if one dedicated HV measurement is used to monitor the + * voltage directly after the fuse. Then a voltage difference between + * V_bat and V_fuse indicates a tripped fuse. + * + * V_bat +------+ V_fuse Precharge/Main+ contactor + * -----+---| FUSE |-----+------------/ ----------------- + * +------+ + */ +#define BS_CHECK_FUSE_PLACED_IN_NORMAL_PATH (true) + +/** + * @brief TODO + * @details Set to true if fuse in CHARGE path should be checked. This can only + * be done if one dedicated HV measurement is used to monitor + * voltage directly after the fuse. Then a voltage difference between + * V_bat and V_fuse indicates a tripped fuse. + * + * V_bat +------+ V_fuse Precharge/Charge+ contactor + * -----+---| FUSE |-----+------------/ ----------------- + * +------+ + */ +#define BS_CHECK_FUSE_PLACED_IN_CHARGE_PATH (false) + +/** + * \defgroup open wire check configuration + * @details If open-wire check is performed, depending on the AFE + * implementation, cell voltages and temperatures are not updated + * and thus old values can be transmitted on the CAN bus. Check + * time is dependent on module configuration and external + * capacitance. Activate open-wire check with care! See the AFE + * implementation for details. + * @{ + */ +/** enable open-wire checks during standby */ +#define BS_STANDBY_PERIODIC_OPEN_WIRE_CHECK (false) + +/** Periodic open-wire check time in STANDBY state in ms */ +#define BS_STANDBY_OPEN_WIRE_PERIOD_ms (600000) + +/** open-wire check in normal mode (set to true or false) */ +#define BS_NORMAL_PERIODIC_OPEN_WIRE_CHECK (false) + +/** Periodic open-wire check time in NORMAL state in ms */ +#define BS_NORMAL_OPEN_WIRE_PERIOD_ms (600000) + +/** open-wire check in charge mode (set to true or false) */ +#define BS_CHARGE_PERIODIC_OPEN_WIRE_CHECK (false) + +/** Periodic open-wire check time in CHARGE state in ms */ +#define BS_CHARGE_OPEN_WIRE_PERIOD_ms (600000) + +/** Periodic open-wire check time in ERROR state in ms */ +#define BS_ERROR_OPEN_WIRE_PERIOD_ms (30000) +/**@}*/ + +FAS_STATIC_ASSERT((BS_NR_OF_STRINGS <= (uint8_t)UINT8_MAX), "This code assumes BS_NR_OF_STRINGS fits into uint8_t"); + +/*========== Extern Constant and Variable Declarations ======================*/ +/** Defines whether a string can be used to precharge or not */ +extern BS_STRING_PRECHARGE_PRESENT_e bs_stringsWithPrecharge[BS_NR_OF_STRINGS]; + +/*========== Extern Function Prototypes =====================================*/ + +/*========== Externalized Static Functions Prototypes (Unit Test) ===========*/ +#ifdef UNITY_UNIT_TEST +#endif + +#endif /* FOXBMS__BATTERY_SYSTEM_CFG_UNIT_TEST_H_ */ diff --git a/tests/unit/app/application/config/test_bal_cfg.c b/tests/unit/app/application/config/test_bal_cfg.c index e03ba75d..4bac82b4 100644 --- a/tests/unit/app/application/config/test_bal_cfg.c +++ b/tests/unit/app/application/config/test_bal_cfg.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_bal_cfg.c * @author foxBMS Team * @date 2022-02-26 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/application/config/test_battery_cell_cfg.c b/tests/unit/app/application/config/test_battery_cell_cfg.c index 0c3c7c5a..c09a2202 100644 --- a/tests/unit/app/application/config/test_battery_cell_cfg.c +++ b/tests/unit/app/application/config/test_battery_cell_cfg.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_battery_cell_cfg.c * @author foxBMS Team * @date 2020-10-08 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/application/config/test_battery_system_cfg.c b/tests/unit/app/application/config/test_battery_system_cfg.c index c5c04ec2..498a178b 100644 --- a/tests/unit/app/application/config/test_battery_system_cfg.c +++ b/tests/unit/app/application/config/test_battery_system_cfg.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_battery_system_cfg.c * @author foxBMS Team * @date 2020-04-02 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/application/config/test_soa_cfg.c b/tests/unit/app/application/config/test_soa_cfg.c index be42013b..06e2ae1d 100644 --- a/tests/unit/app/application/config/test_soa_cfg.c +++ b/tests/unit/app/application/config/test_soa_cfg.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_soa_cfg.c * @author foxBMS Team * @date 2020-04-01 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * @@ -59,6 +59,8 @@ #include "soa_cfg.h" +#include "test_assert_helper.h" + #include #include @@ -157,6 +159,8 @@ void testSOA_IsCellCurrentLimitViolated(void) { } void testSOA_IsCurrentOnOpenString(void) { + TEST_ASSERT_FAIL_ASSERT(SOA_IsCurrentOnOpenString(BMS_CHARGING, BS_NR_OF_STRINGS)); + BMS_IsStringClosed_ExpectAndReturn(0u, false); BMS_IsStringPrecharging_ExpectAndReturn(0u, false); TEST_ASSERT_EQUAL(true, SOA_IsCurrentOnOpenString(BMS_CHARGING, 0u)); @@ -168,4 +172,18 @@ void testSOA_IsCurrentOnOpenString(void) { BMS_IsStringClosed_ExpectAndReturn(0u, false); BMS_IsStringPrecharging_ExpectAndReturn(0u, true); TEST_ASSERT_EQUAL(false, SOA_IsCurrentOnOpenString(BMS_CHARGING, 0u)); + + BMS_IsStringClosed_ExpectAndReturn(0u, false); + BMS_IsStringPrecharging_ExpectAndReturn(0u, false); + TEST_ASSERT_EQUAL(true, SOA_IsCurrentOnOpenString(BMS_DISCHARGING, 0u)); + + BMS_IsStringClosed_ExpectAndReturn(0u, true); + BMS_IsStringPrecharging_ExpectAndReturn(0u, false); + TEST_ASSERT_EQUAL(false, SOA_IsCurrentOnOpenString(BMS_DISCHARGING, 0u)); + + BMS_IsStringClosed_ExpectAndReturn(0u, false); + BMS_IsStringPrecharging_ExpectAndReturn(0u, true); + TEST_ASSERT_EQUAL(false, SOA_IsCurrentOnOpenString(BMS_DISCHARGING, 0u)); + + TEST_ASSERT_EQUAL(false, SOA_IsCurrentOnOpenString(BMS_RELAXATION, 0u)); } diff --git a/tests/unit/app/application/plausibility/test_plausibility.c b/tests/unit/app/application/plausibility/test_plausibility.c index 5ee6379f..2aa42f8a 100644 --- a/tests/unit/app/application/plausibility/test_plausibility.c +++ b/tests/unit/app/application/plausibility/test_plausibility.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_plausibility.c * @author foxBMS Team * @date 2020-04-01 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * @@ -76,61 +76,61 @@ void tearDown(void) { /*========== Test Cases =====================================================*/ -void testCheckPackVoltagecellVoltageandcurrentSensorBothZero(void) { +void testCheckPackVoltageCellVoltageAndCurrentSensorBothZero(void) { int32_t packVoltage_mV = 0; int32_t highVoltage_mV = 0; TEST_ASSERT_EQUAL(PL_CheckStringVoltage(packVoltage_mV, highVoltage_mV), STD_OK); } -void testCheckPackVoltagecellVoltageandcurrentSensorBothMaximum(void) { +void testCheckPackVoltageCellVoltageAndCurrentSensorBothMaximum(void) { int32_t packVoltage_mV = INT32_MAX; int32_t highVoltage_mV = INT32_MAX; TEST_ASSERT_EQUAL(PL_CheckStringVoltage(packVoltage_mV, highVoltage_mV), STD_OK); } -void testCheckPackVoltagecellVoltageandcurrentSensorDifferenceEqualsTolerance(void) { +void testCheckPackVoltageCellVoltageAndCurrentSensorDifferenceEqualsTolerance(void) { int32_t packVoltage_mV = 0; int32_t highVoltage_mV = PL_STRING_VOLTAGE_TOLERANCE_mV; TEST_ASSERT_EQUAL(PL_CheckStringVoltage(packVoltage_mV, highVoltage_mV), STD_NOT_OK); } -void testCheckPackVoltagecellVoltageandcurrentSensorDifferenceEqualsToleranceMinusOne(void) { +void testCheckPackVoltageCellVoltageAndCurrentSensorDifferenceEqualsToleranceMinusOne(void) { int32_t packVoltage_mV = 0; int32_t highVoltage_mV = PL_STRING_VOLTAGE_TOLERANCE_mV - 1; TEST_ASSERT_EQUAL(PL_CheckStringVoltage(packVoltage_mV, highVoltage_mV), STD_OK); } -void testCheckPackVoltagecellVoltageandcurrentSensorDifferenceEqualsTolerancePlusOne(void) { +void testCheckPackVoltageCellVoltageAndCurrentSensorDifferenceEqualsTolerancePlusOne(void) { int32_t packVoltage_mV = 0; int32_t highVoltage_mV = PL_STRING_VOLTAGE_TOLERANCE_mV + 1; TEST_ASSERT_EQUAL(PL_CheckStringVoltage(packVoltage_mV, highVoltage_mV), STD_NOT_OK); } -void testCheckPackVoltagecellVoltageandcurrentSensorDifferenceEqualValue(void) { +void testCheckPackVoltageCellVoltageAndCurrentSensorDifferenceEqualValue(void) { int32_t packVoltage_mV = 4242; int32_t highVoltage_mV = 4242; TEST_ASSERT_EQUAL(PL_CheckStringVoltage(packVoltage_mV, highVoltage_mV), STD_OK); } -void testCheckPackVoltagecellVoltageandcurrentSensorDifferenceINT32MaxMinus(void) { +void testCheckPackVoltageCellVoltageAndCurrentSensorDifferenceINT32MaxMinus(void) { int32_t packVoltage_mV = 0; int32_t highVoltage_mV = INT32_MAX; TEST_ASSERT_EQUAL(PL_CheckStringVoltage(packVoltage_mV, highVoltage_mV), STD_NOT_OK); } -void testCheckPackVoltagecellVoltageandcurrentSensorDifferenceINT32MaxPlus(void) { +void testCheckPackVoltageCellVoltageAndCurrentSensorDifferenceINT32MaxPlus(void) { int32_t packVoltage_mV = INT32_MAX - (PL_STRING_VOLTAGE_TOLERANCE_mV + 100); int32_t highVoltage_mV = INT32_MAX; TEST_ASSERT_EQUAL(PL_CheckStringVoltage(packVoltage_mV, highVoltage_mV), STD_NOT_OK); } -void testCheckPackVoltagecellVoltageandcurrentSensorDifferenceINT32MaxPlusTooMuch(void) { +void testCheckPackVoltageCellVoltageAndCurrentSensorDifferenceINT32MaxPlusTooMuch(void) { int32_t packVoltage_mV = INT32_MAX - (PL_STRING_VOLTAGE_TOLERANCE_mV + 1); int32_t highVoltage_mV = INT32_MAX; TEST_ASSERT_EQUAL(PL_CheckStringVoltage(packVoltage_mV, highVoltage_mV), STD_NOT_OK); } -void testCheckPackVoltagecellVoltageandcurrentSensorDifferenceINT32Max(void) { +void testCheckPackVoltageCellVoltageAndCurrentSensorDifferenceINT32Max(void) { int32_t packVoltage_mV = INT32_MAX; int32_t highVoltage_mV = INT32_MAX; TEST_ASSERT_EQUAL(PL_CheckStringVoltage(packVoltage_mV, highVoltage_mV), STD_OK); diff --git a/tests/unit/app/application/redundancy/test_redundancy.c b/tests/unit/app/application/redundancy/test_redundancy.c index 68429d76..1c384524 100644 --- a/tests/unit/app/application/redundancy/test_redundancy.c +++ b/tests/unit/app/application/redundancy/test_redundancy.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_redundancy.c * @author foxBMS Team * @date 2020-07-31 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/application/soa/test_soa.c b/tests/unit/app/application/soa/test_soa.c index c9a0ee55..9d66342e 100644 --- a/tests/unit/app/application/soa/test_soa.c +++ b/tests/unit/app/application/soa/test_soa.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,12 +43,13 @@ * @file test_soa.c * @author foxBMS Team * @date 2020-04-01 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * - * @brief Tests for SOA module responsible for the current, voltage and temperature checking of the safe operating area. + * @brief Tests for SOA module responsible for the current, voltage and + * temperature checking of the safe operating area. * */ @@ -58,10 +59,11 @@ #include "Mockcontactor.h" #include "Mockdatabase.h" #include "Mockdiag.h" +#include "Mockfoxmath.h" #include "Mocksoa_cfg.h" -#include "foxmath.h" #include "soa.h" +#include "test_assert_helper.h" /*========== Unit Testing Framework Directives ==============================*/ TEST_INCLUDE_PATH("../../src/app/application/bms") @@ -82,7 +84,87 @@ void setUp(void) { void tearDown(void) { } -void testDummy(void) { +/*========== Test Cases =====================================================*/ +/** + * @brief Testing function SOA_CheckVoltages + * @details The following cases will be tested: + * - Argument validation: + * - AT1/1: NULL_PTR for pMinimumMaximumCellVoltages → assert + * - Routine validation: + * - RT1/x: TODO + */ +void testSOA_CheckVoltages(void) { + /* ======= Assertion tests ============================================= */ + DATA_BLOCK_MIN_MAX_s pMinimumMaximumCellVoltages = {.header.uniqueId = DATA_BLOCK_ID_MIN_MAX}; + /* ======= AT1/1: Assertion test */ + TEST_ASSERT_FAIL_ASSERT(SOA_CheckVoltages(NULL_PTR)); + + /* ======= Routine tests =============================================== */ + /* ======= RT1/x: Test implementation */ + for (uint8_t s = 0u; s < BS_NR_OF_STRINGS; s++) { + DIAG_Handler_ExpectAndReturn( + DIAG_ID_CELL_VOLTAGE_OVERVOLTAGE_MSL, DIAG_EVENT_OK, DIAG_STRING, s, DIAG_HANDLER_RETURN_OK); + DIAG_Handler_ExpectAndReturn( + DIAG_ID_CELL_VOLTAGE_OVERVOLTAGE_RSL, DIAG_EVENT_OK, DIAG_STRING, s, DIAG_HANDLER_RETURN_OK); + DIAG_Handler_ExpectAndReturn( + DIAG_ID_CELL_VOLTAGE_OVERVOLTAGE_MOL, DIAG_EVENT_OK, DIAG_STRING, s, DIAG_HANDLER_RETURN_OK); + + DIAG_Handler_ExpectAndReturn( + DIAG_ID_CELL_VOLTAGE_UNDERVOLTAGE_MOL, DIAG_EVENT_NOT_OK, DIAG_STRING, s, DIAG_HANDLER_RETURN_OK); + DIAG_Handler_ExpectAndReturn( + DIAG_ID_CELL_VOLTAGE_UNDERVOLTAGE_RSL, DIAG_EVENT_NOT_OK, DIAG_STRING, s, DIAG_HANDLER_RETURN_OK); + DIAG_Handler_ExpectAndReturn( + DIAG_ID_CELL_VOLTAGE_UNDERVOLTAGE_MSL, DIAG_EVENT_NOT_OK, DIAG_STRING, s, DIAG_HANDLER_RETURN_OK); + } + /* ======= RT1/1: call function under test */ + SOA_CheckVoltages(&pMinimumMaximumCellVoltages); + + /* ======= RT1/1: test output verification */ + /* TODO */ } -/*========== Test Cases =====================================================*/ +/** + * @brief Testing function SOA_CheckTemperatures + * @details The following cases will be tested: + * - Argument validation: + * - AT1/2: NULL_PTR for pMinimumMaximumCellTemperatures → assert + * - AT2/2: NULL_PTR for pCurrent → assert + * - Routine validation: + * - RT1/x: TODO + */ +void testSOA_CheckTemperatures(void) { + /* ======= Assertion tests ============================================= */ + DATA_BLOCK_MIN_MAX_s pMinimumMaximumCellVoltages = {.header.uniqueId = DATA_BLOCK_ID_MIN_MAX}; + DATA_BLOCK_PACK_VALUES_s pCurrent = {.header.uniqueId = DATA_BLOCK_ID_PACK_VALUES}; + int32_t i_current; + + /* ======= AT1/2: Assertion test */ + TEST_ASSERT_FAIL_ASSERT(SOA_CheckTemperatures(NULL_PTR, &pCurrent)); + /* ======= AT2/2: Assertion test */ + TEST_ASSERT_FAIL_ASSERT(SOA_CheckTemperatures(&pMinimumMaximumCellVoltages, NULL_PTR)); + + /* ======= Routine tests =============================================== */ + /* ======= RT1/x: Test implementation */ + for (uint8_t s = 0u; s < BS_NR_OF_STRINGS; s++) { + i_current = pCurrent.stringCurrent_mA[s]; + BMS_GetCurrentFlowDirection_ExpectAndReturn(i_current, BMS_AT_REST); + DIAG_Handler_ExpectAndReturn( + DIAG_ID_TEMP_OVERTEMPERATURE_CHARGE_MSL, DIAG_EVENT_OK, DIAG_STRING, s, DIAG_HANDLER_RETURN_OK); + DIAG_Handler_ExpectAndReturn( + DIAG_ID_TEMP_OVERTEMPERATURE_CHARGE_RSL, DIAG_EVENT_OK, DIAG_STRING, s, DIAG_HANDLER_RETURN_OK); + DIAG_Handler_ExpectAndReturn( + DIAG_ID_TEMP_OVERTEMPERATURE_CHARGE_MOL, DIAG_EVENT_OK, DIAG_STRING, s, DIAG_HANDLER_RETURN_OK); + BMS_GetCurrentFlowDirection_ExpectAndReturn(i_current, BMS_AT_REST); + DIAG_Handler_ExpectAndReturn( + DIAG_ID_TEMP_UNDERTEMPERATURE_CHARGE_MSL, DIAG_EVENT_OK, DIAG_STRING, s, DIAG_HANDLER_RETURN_OK); + DIAG_Handler_ExpectAndReturn( + DIAG_ID_TEMP_UNDERTEMPERATURE_CHARGE_RSL, DIAG_EVENT_OK, DIAG_STRING, s, DIAG_HANDLER_RETURN_OK); + DIAG_Handler_ExpectAndReturn( + DIAG_ID_TEMP_UNDERTEMPERATURE_CHARGE_MOL, DIAG_EVENT_OK, DIAG_STRING, s, DIAG_HANDLER_RETURN_OK); + } + /* ======= RT1/1: call function under test */ + SOA_CheckTemperatures(&pMinimumMaximumCellVoltages, &pCurrent); + + /* ======= RT1/1: test output verification */ + /* TODO */ +} diff --git a/tests/unit/app/driver/adc/test_adc.c b/tests/unit/app/driver/adc/test_adc.c index 4a1c14c4..30281080 100644 --- a/tests/unit/app/driver/adc/test_adc.c +++ b/tests/unit/app/driver/adc/test_adc.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_adc.c * @author foxBMS Team * @date 2020-04-01 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * @@ -58,7 +58,12 @@ #include "Mockdatabase.h" #include "Mockfassert.h" +#include "HL_reg_adc.h" + #include "adc.h" +#include "test_assert_helper.h" + +#include /*========== Unit Testing Framework Directives ==============================*/ TEST_INCLUDE_PATH("../../src/app/driver/adc") @@ -74,5 +79,44 @@ void tearDown(void) { /*========== Test Cases =====================================================*/ -void testDummy(void) { +void testADC_ConvertVoltage(void) { + TEST_ASSERT_EQUAL_FLOAT(15.25879f, TEST_ADC_ConvertVoltage(12u)); + TEST_ASSERT_EQUAL_FLOAT(0.6103516f, TEST_ADC_ConvertVoltage(0u)); + TEST_ASSERT_EQUAL_FLOAT(79999.39f, TEST_ADC_ConvertVoltage(UINT16_MAX)); +} + +void testADC_Control(void) { + TEST_ADC_SetAdcConversionState(ADC_START_CONVERSION); + adcStartConversion_Expect(adcREG1, adcGROUP1); + ADC_Control(); + TEST_ASSERT_EQUAL(ADC_WAIT_CONVERSION_FINISHED, TEST_ADC_GetAdcConversionState()); + + /* stay in ADC_WAIT_CONVERSION_FINISHED 2-times */ + adcIsConversionComplete_ExpectAndReturn(adcREG1, adcGROUP1, 0u); + ADC_Control(); + TEST_ASSERT_EQUAL(ADC_WAIT_CONVERSION_FINISHED, TEST_ADC_GetAdcConversionState()); + + adcIsConversionComplete_ExpectAndReturn(adcREG1, adcGROUP1, 0u); + ADC_Control(); + TEST_ASSERT_EQUAL(ADC_WAIT_CONVERSION_FINISHED, TEST_ADC_GetAdcConversionState()); + + /* reached endbit */ + adcIsConversionComplete_ExpectAndReturn(adcREG1, adcGROUP1, ADC_CONVERSION_ENDDBIT); + ADC_Control(); + TEST_ASSERT_EQUAL(ADC_CONVERSION_FINISHED, TEST_ADC_GetAdcConversionState()); + + /* convert */ + /* + [../../tests/unit/app/driver/adc/test_adc.c] + Test: testADC_Control + At line (88): "Function DATA_Write1DataBlock. Called more times than expected." + */ + /* static adcData_t adc_adc1RawVoltages[MCU_ADC1_MAX_NR_CHANNELS] = {0}; + + adcGetData_ExpectAndReturn(adcREG1, adcGROUP1, &adc_adc1RawVoltages[0], 0u); + adcGetData_IgnoreArg_data(); + adcGetData_ReturnArrayThruPtr_data(&adc_adc1RawVoltages[0], MCU_ADC1_MAX_NR_CHANNELS); + ADC_Control(); + TEST_ASSERT_EQUAL(ADC_START_CONVERSION, TEST_ADC_GetAdcConversionState()); + */ } diff --git a/tests/unit/app/driver/afe/adi/ades1830/adi_ades1830_helpers_test-data-rdb.c b/tests/unit/app/driver/afe/adi/ades1830/adi_ades1830_helpers_test-data-rdb.c index 00d412fb..f412ae71 100644 --- a/tests/unit/app/driver/afe/adi/ades1830/adi_ades1830_helpers_test-data-rdb.c +++ b/tests/unit/app/driver/afe/adi/ades1830/adi_ades1830_helpers_test-data-rdb.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file adi_ades1830_helpers_test-data-rdb.c * @author foxBMS Team * @date 2022-12-07 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/afe/adi/ades1830/adi_ades1830_helpers_test-data-rdb.h b/tests/unit/app/driver/afe/adi/ades1830/adi_ades1830_helpers_test-data-rdb.h index d039511a..6e0f0fd5 100644 --- a/tests/unit/app/driver/afe/adi/ades1830/adi_ades1830_helpers_test-data-rdb.h +++ b/tests/unit/app/driver/afe/adi/ades1830/adi_ades1830_helpers_test-data-rdb.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file adi_ades1830_helpers_test-data-rdb.h * @author foxBMS Team * @date 2022-12-07 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * * @brief Test of some module - * + * @details TODO */ #ifndef FOXBMS__ADI_ADES1830_HELPERS_TEST_DATA_RDB_H_ diff --git a/tests/unit/app/driver/afe/adi/ades1830/adi_ades1830_helpers_test-data-wdb.c b/tests/unit/app/driver/afe/adi/ades1830/adi_ades1830_helpers_test-data-wdb.c index 8d7b1cda..72f37ad2 100644 --- a/tests/unit/app/driver/afe/adi/ades1830/adi_ades1830_helpers_test-data-wdb.c +++ b/tests/unit/app/driver/afe/adi/ades1830/adi_ades1830_helpers_test-data-wdb.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file adi_ades1830_helpers_test-data-wdb.c * @author foxBMS Team * @date 2022-12-07 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * * @brief Test of some module - * + * @details TODO */ /*========== Includes =======================================================*/ diff --git a/tests/unit/app/driver/afe/adi/ades1830/adi_ades1830_helpers_test-data-wdb.h b/tests/unit/app/driver/afe/adi/ades1830/adi_ades1830_helpers_test-data-wdb.h index 001eefd3..859464fa 100644 --- a/tests/unit/app/driver/afe/adi/ades1830/adi_ades1830_helpers_test-data-wdb.h +++ b/tests/unit/app/driver/afe/adi/ades1830/adi_ades1830_helpers_test-data-wdb.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file adi_ades1830_helpers_test-data-wdb.h * @author foxBMS Team * @date 2022-12-07 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * * @brief Test of some module - * + * @details TODO */ #ifndef FOXBMS__ADI_ADES1830_HELPERS_TEST_DATA_WDB_H_ diff --git a/tests/unit/app/driver/afe/adi/ades1830/api/test_adi_ades1830_afe.c b/tests/unit/app/driver/afe/adi/ades1830/api/test_adi_ades1830_afe.c index 2ce6cec0..a5e31362 100644 --- a/tests/unit/app/driver/afe/adi/ades1830/api/test_adi_ades1830_afe.c +++ b/tests/unit/app/driver/afe/adi/ades1830/api/test_adi_ades1830_afe.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_adi_ades1830_afe.c * @author foxBMS Team * @date 2020-08-10 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/afe/adi/ades1830/api/test_adi_ades1830_afe_dma.c b/tests/unit/app/driver/afe/adi/ades1830/api/test_adi_ades1830_afe_dma.c index 9623dfbe..53f18ae3 100644 --- a/tests/unit/app/driver/afe/adi/ades1830/api/test_adi_ades1830_afe_dma.c +++ b/tests/unit/app/driver/afe/adi/ades1830/api/test_adi_ades1830_afe_dma.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_adi_ades1830_afe_dma.c * @author foxBMS Team * @date 2020-08-10 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/afe/adi/ades1830/config/test_adi_ades1830_cfg.c b/tests/unit/app/driver/afe/adi/ades1830/config/test_adi_ades1830_cfg.c index 2bf554a1..58c6c759 100644 --- a/tests/unit/app/driver/afe/adi/ades1830/config/test_adi_ades1830_cfg.c +++ b/tests/unit/app/driver/afe/adi/ades1830/config/test_adi_ades1830_cfg.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_adi_ades1830_cfg.c * @author foxBMS Team * @date 2020-12-09 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS_CONFIGURATION * @prefix ADI * @@ -69,7 +69,7 @@ TEST_INCLUDE_PATH("../../src/app/driver/spi") TEST_INCLUDE_PATH("../../src/app/driver/ts/api") /*========== Definitions and Implementations for Unit Test ==================*/ -#define TEST_TEMPERATURE (100) +#define TEST_TEMPERATURE (10) /*========== Setup and Teardown =============================================*/ void setUp(void) { diff --git a/tests/unit/app/driver/afe/adi/ades1830/pec/test_adi_ades1830_pec.c b/tests/unit/app/driver/afe/adi/ades1830/pec/test_adi_ades1830_pec.c index bf4b8fa5..4e8029c4 100644 --- a/tests/unit/app/driver/afe/adi/ades1830/pec/test_adi_ades1830_pec.c +++ b/tests/unit/app/driver/afe/adi/ades1830/pec/test_adi_ades1830_pec.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_adi_ades1830_pec.c * @author foxBMS Team * @date 2022-11-04 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/afe/adi/ades1830/test_adi_ades1830.c b/tests/unit/app/driver/afe/adi/ades1830/test_adi_ades1830.c index 7896783d..8c0fe4ff 100644 --- a/tests/unit/app/driver/afe/adi/ades1830/test_adi_ades1830.c +++ b/tests/unit/app/driver/afe/adi/ades1830/test_adi_ades1830.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_adi_ades1830.c * @author foxBMS Team * @date 2020-08-10 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * @@ -176,13 +176,13 @@ void testADI_MakeRequest(void) { } void testADI_ActivateInterfaceBoard(void) { - /* 8 pins are needed, and they are aligned after PEX_PIN10 so we make the test code short with some loop */ + /* 8 pins are needed, and they are aligned after PEX_PORT_1_PIN_0 so we make the test code short with some loop */ const uint8_t nrOfPins = 8u; for (uint8_t i = 0; i < nrOfPins; i++) { - PEX_SetPinDirectionOutput_Expect(PEX_PORT_EXPANDER3, PEX_PIN10 + i); + PEX_SetPinDirectionOutput_Expect(PEX_PORT_EXPANDER3, PEX_PORT_1_PIN_0 + i); } for (uint8_t i = 0; i < nrOfPins; i++) { - PEX_SetPin_Expect(PEX_PORT_EXPANDER3, PEX_PIN10 + i); + PEX_SetPin_Expect(PEX_PORT_EXPANDER3, PEX_PORT_1_PIN_0 + i); } ADI_ActivateInterfaceBoard(); } diff --git a/tests/unit/app/driver/afe/adi/ades1830/test_adi_ades1830_balancing.c b/tests/unit/app/driver/afe/adi/ades1830/test_adi_ades1830_balancing.c index a84a1e10..87266bc9 100644 --- a/tests/unit/app/driver/afe/adi/ades1830/test_adi_ades1830_balancing.c +++ b/tests/unit/app/driver/afe/adi/ades1830/test_adi_ades1830_balancing.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,9 +43,9 @@ * @file test_adi_ades1830_balancing.c * @author foxBMS Team * @date 2019-08-27 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup SOME_GROUP + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup DRIVERS * @prefix ADI * * @brief Implementation of some software @@ -187,19 +187,16 @@ void testADI_DetermineBalancingRegisterConfiguration(void) { ADI_GetStoredVoltageIndex_IgnoreAndReturn(c); } /* Reset balancing control table */ - adi_stateBase.data.balancingControl - ->balancingState[s][(m * (BS_NR_OF_CELL_BLOCKS_PER_MODULE)) + c] = 0u; + adi_stateBase.data.balancingControl->activateBalancing[s][m][c] = false; /* Set balancing control table values for 0xAA pattern */ if (data == 0xAAu) { if (c % 2u != 0u) { - adi_stateBase.data.balancingControl - ->balancingState[s][(m * (BS_NR_OF_CELL_BLOCKS_PER_MODULE)) + c] = 1u; + adi_stateBase.data.balancingControl->activateBalancing[s][m][c] = true; } } /* Set balancing control table values for 0x55 pattern */ if (data == 0x55u) { if (c % 2u == 0u) { - adi_stateBase.data.balancingControl - ->balancingState[s][(m * (BS_NR_OF_CELL_BLOCKS_PER_MODULE)) + c] = 1u; + adi_stateBase.data.balancingControl->activateBalancing[s][m][c] = true; } } } diff --git a/tests/unit/app/driver/afe/adi/ades1830/test_adi_ades1830_buffers.c b/tests/unit/app/driver/afe/adi/ades1830/test_adi_ades1830_buffers.c index eb535090..0cc0ed6d 100644 --- a/tests/unit/app/driver/afe/adi/ades1830/test_adi_ades1830_buffers.c +++ b/tests/unit/app/driver/afe/adi/ades1830/test_adi_ades1830_buffers.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_adi_ades1830_buffers.c * @author foxBMS Team * @date 2022-12-07 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/afe/adi/ades1830/test_adi_ades1830_commands.c b/tests/unit/app/driver/afe/adi/ades1830/test_adi_ades1830_commands.c index ff561ee0..a59dd0e0 100644 --- a/tests/unit/app/driver/afe/adi/ades1830/test_adi_ades1830_commands.c +++ b/tests/unit/app/driver/afe/adi/ades1830/test_adi_ades1830_commands.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_adi_ades1830_commands.c * @author foxBMS Team * @date 2022-12-07 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/afe/adi/ades1830/test_adi_ades1830_commands_voltages.c b/tests/unit/app/driver/afe/adi/ades1830/test_adi_ades1830_commands_voltages.c index 9900a815..170271dd 100644 --- a/tests/unit/app/driver/afe/adi/ades1830/test_adi_ades1830_commands_voltages.c +++ b/tests/unit/app/driver/afe/adi/ades1830/test_adi_ades1830_commands_voltages.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_adi_ades1830_commands_voltages.c * @author foxBMS Team * @date 2022-12-07 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/afe/adi/ades1830/test_adi_ades1830_diagnostic_w.c b/tests/unit/app/driver/afe/adi/ades1830/test_adi_ades1830_diagnostic_w.c index 2f0cec47..849ac7ee 100644 --- a/tests/unit/app/driver/afe/adi/ades1830/test_adi_ades1830_diagnostic_w.c +++ b/tests/unit/app/driver/afe/adi/ades1830/test_adi_ades1830_diagnostic_w.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_adi_ades1830_diagnostic_w.c * @author foxBMS Team * @date 2023-10-09 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * @@ -59,6 +59,8 @@ TEST_SOURCE_FILE("adi_ades183x_diagnostic_w.c") TEST_INCLUDE_PATH("../../src/app/driver/afe/adi/ades1830") +TEST_INCLUDE_PATH("../../src/app/driver/afe/adi/common/ades183x") +TEST_INCLUDE_PATH("../../src/app/driver/afe/adi/common/ades183x/config") TEST_INCLUDE_PATH("../../src/app/driver/config") TEST_INCLUDE_PATH("../../src/app/driver/spi") diff --git a/tests/unit/app/driver/afe/adi/ades1830/test_adi_ades1830_gpio_voltages.c b/tests/unit/app/driver/afe/adi/ades1830/test_adi_ades1830_gpio_voltages.c index bf599c85..687212bd 100644 --- a/tests/unit/app/driver/afe/adi/ades1830/test_adi_ades1830_gpio_voltages.c +++ b/tests/unit/app/driver/afe/adi/ades1830/test_adi_ades1830_gpio_voltages.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_adi_ades1830_gpio_voltages.c * @author foxBMS Team * @date 2022-12-08 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * @@ -55,6 +55,7 @@ /*========== Includes =======================================================*/ #include "unity.h" #include "Mockadi_ades183x_cfg.h" +#include "Mockadi_ades183x_diagnostic.h" #include "Mockos.h" #include "Mockspi.h" diff --git a/tests/unit/app/driver/afe/adi/ades1830/test_adi_ades1830_helpers.c b/tests/unit/app/driver/afe/adi/ades1830/test_adi_ades1830_helpers.c index 62a360ce..d964fe0a 100644 --- a/tests/unit/app/driver/afe/adi/ades1830/test_adi_ades1830_helpers.c +++ b/tests/unit/app/driver/afe/adi/ades1830/test_adi_ades1830_helpers.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_adi_ades1830_helpers.c * @author foxBMS Team * @date 2022-12-07 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/afe/adi/ades1830/test_adi_ades1830_initialization.c b/tests/unit/app/driver/afe/adi/ades1830/test_adi_ades1830_initialization.c index d2edd6d7..17082883 100644 --- a/tests/unit/app/driver/afe/adi/ades1830/test_adi_ades1830_initialization.c +++ b/tests/unit/app/driver/afe/adi/ades1830/test_adi_ades1830_initialization.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_adi_ades1830_initialization.c * @author foxBMS Team * @date 2022-12-07 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/afe/adi/ades1830/test_adi_ades1830_temperatures.c b/tests/unit/app/driver/afe/adi/ades1830/test_adi_ades1830_temperatures.c index 580ea209..c6426b1d 100644 --- a/tests/unit/app/driver/afe/adi/ades1830/test_adi_ades1830_temperatures.c +++ b/tests/unit/app/driver/afe/adi/ades1830/test_adi_ades1830_temperatures.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,20 +43,40 @@ * @file test_adi_ades1830_temperatures.c * @author foxBMS Team * @date 2022-12-07 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * - * @brief Test of some module + * @brief Test of the temperature measurement functionality + * @details This file implements parts of the tests of the external and + * internal (static) functions of adi_ades183x_temperatures.c. + * The interface function #ADI_GetTemperatures is tested directly, + * while the static functions are tested via their externalize + * wrappers. * + * The internal functions + * - #ADI_GetStoredTemperatureIndex (external wrapper + * #TEST_ADI_GetStoredTemperatureIndex) + * + * are validated to call the expected routines with the expected + * arguments. + * + * The interface function #ADI_GetTemperatures is tested to call the + * expected functions and based on their output correctly set the + * measured temperature in the data table of the driver. */ /*========== Includes =======================================================*/ + #include "unity.h" #include "Mockadi_ades183x_cfg.h" #include "Mockadi_ades183x_helpers.h" +/* clang-format off */ +#include "general.h" +/* clang-format on */ + #include "adi_ades183x_buffers.h" /* use the real command config */ #include "adi_ades183x_commands.h" /* use the real buffer configuration */ #include "adi_ades183x_temperatures.h" @@ -88,33 +108,29 @@ static DATA_BLOCK_CELL_TEMPERATURE_s adi_cellTemperature = {.header.uniqueId = D static DATA_BLOCK_ALL_GPIO_VOLTAGES_s adi_allGpioVoltage = {.header.uniqueId = DATA_BLOCK_ID_ALL_GPIO_VOLTAGES_BASE}; ADI_STATE_s adi_stateBase = { - .currentString = 0, + .currentString = 0u, .data.cellTemperature = &adi_cellTemperature, .data.allGpioVoltages = &adi_allGpioVoltage, }; + +const uint16_t testGpioVoltage_mV = 300u; +/* this test checks, that the driver works as expected, when the temperature + * inputs are used */ const uint8_t adi_temperatureInputsUsed[BS_NR_OF_GPIOS_PER_MODULE] = { - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, -}; + GEN_REPEAT_U(1u, GEN_STRIP(BS_NR_OF_GPIOS_PER_MODULE))}; /*========== Setup and Teardown =============================================*/ void setUp(void) { + /* set all GPIO voltages to a test value, so that we can later in the + * test validate the function call of mocked functions. */ for (uint8_t s = 0u; s < BS_NR_OF_STRINGS; s++) { adi_stateBase.currentString = s; for (uint16_t m = 0u; m < BS_NR_OF_MODULES_PER_STRING; m++) { for (uint16_t registerGpioIndex = 0u; registerGpioIndex < BS_NR_OF_GPIOS_PER_MODULE; registerGpioIndex++) { if (adi_temperatureInputsUsed[registerGpioIndex] == 1u) { - adi_stateBase.data.allGpioVoltages - ->gpioVoltages_mV[adi_stateBase.currentString] - [(m * BS_NR_OF_GPIOS_PER_MODULE) + registerGpioIndex] = 300.0; + uint16_t cellIndex = (m * BS_NR_OF_GPIOS_PER_MODULE) + registerGpioIndex; + adi_stateBase.data.allGpioVoltages->gpioVoltages_mV[adi_stateBase.currentString][cellIndex] = + testGpioVoltage_mV; } } } @@ -127,34 +143,98 @@ void tearDown(void) { /*========== Test Cases =====================================================*/ /*========== Externalized Static Function Test Cases ========================*/ +/** + * @brief Testing static function ADI_GetStoredTemperatureIndex + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/1: invalid GPIO number → assert + * - Routine validation: + * - RT1/2: all inputs are used as inputs, therefore the index array + * shall be fully set. + * - RT2/2: inputs are not used as inputs. This test is implemented + * in + * tests/unit/app/driver/afe/adi/ades1830/test_adi_ades1830_temperatures_2.c + */ +void testADI_GetStoredTemperatureIndex(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/1: Assertion test */ + TEST_ASSERT_FAIL_ASSERT(TEST_ADI_GetStoredTemperatureIndex(BS_NR_OF_GPIOS_PER_MODULE)); + + /* ======= Routine tests =============================================== */ + + /* ======= RT1/1: Test implementation */ + uint16_t calculatedTemperatureIndex[BS_NR_OF_GPIOS_PER_MODULE] = { + GEN_REPEAT_U(0u, GEN_STRIP(BS_NR_OF_GPIOS_PER_MODULE))}; + uint16_t expectedTemperatureIndex[BS_NR_OF_GPIOS_PER_MODULE] = {0u, 1u, 2u, 3u, 4u, 5u, 6u, 7u, 8u, 9u}; + + /* ======= RT1/1: call function under test */ + for (uint8_t c = 0; c < BS_NR_OF_GPIOS_PER_MODULE; c++) { + calculatedTemperatureIndex[c] = TEST_ADI_GetStoredTemperatureIndex(c); + } + + /* ======= RT1/1: test output verification */ + for (uint8_t c = 0; c < BS_NR_OF_GPIOS_PER_MODULE; c++) { + TEST_ASSERT_EQUAL_UINT16(expectedTemperatureIndex[c], calculatedTemperatureIndex[c]); + } +} + +/*========== Extern Function Test Cases =====================================*/ + +/** + * @brief Testing extern function #ADI_GetTemperatures + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/1: NULL_PTR for adiState → assert + * - Routine validation: + * - RT1/2: set read temperature in the data table + * - RT2/2: inputs are not used for temperature measurement. This + * test is implemented in + * tests/unit/app/driver/afe/adi/ades1830/test_adi_ades1830_temperatures_2.c + */ void testADI_GetTemperatures(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/1: Assertion test */ + TEST_ASSERT_FAIL_ASSERT(ADI_GetTemperatures(NULL_PTR)); + + /* ======= Routine tests =============================================== */ + /* ======= RT1/2: Test implementation */ + const int16_t testTemperature_ddegC = 250; + /* all temperatures are set to 25.0 C*/ + int16_t expectedTemperatures[BS_NR_OF_STRINGS][BS_NR_OF_MODULES_PER_STRING][BS_NR_OF_GPIOS_PER_MODULE]; + + for (uint8_t s = 0u; s < BS_NR_OF_STRINGS; s++) { + adi_stateBase.currentString = s; + for (uint16_t m = 0u; m < BS_NR_OF_MODULES_PER_STRING; m++) { + for (uint16_t registerGpioIndex = 0u; registerGpioIndex < BS_NR_OF_GPIOS_PER_MODULE; registerGpioIndex++) { + for (uint8_t ts = 0; ts < registerGpioIndex; ts++) { + expectedTemperatures[adi_stateBase.currentString][m][ts] = testTemperature_ddegC; + } + } + } + } + + /* ======= RT1/2: call function under test */ for (uint8_t s = 0u; s < BS_NR_OF_STRINGS; s++) { adi_stateBase.currentString = s; for (uint16_t m = 0u; m < BS_NR_OF_MODULES_PER_STRING; m++) { for (uint16_t registerGpioIndex = 0u; registerGpioIndex < BS_NR_OF_GPIOS_PER_MODULE; registerGpioIndex++) { - ADI_ConvertGpioVoltageToTemperature_ExpectAndReturn(300, 250); + ADI_ConvertGpioVoltageToTemperature_ExpectAndReturn(testGpioVoltage_mV, testTemperature_ddegC); } } ADI_GetTemperatures(&adi_stateBase); + } + + /* ======= RT1/2: test output verification */ + for (uint8_t s = 0u; s < BS_NR_OF_STRINGS; s++) { + adi_stateBase.currentString = s; for (uint16_t m = 0u; m < BS_NR_OF_MODULES_PER_STRING; m++) { for (uint16_t registerGpioIndex = 0u; registerGpioIndex < BS_NR_OF_GPIOS_PER_MODULE; registerGpioIndex++) { for (uint8_t ts = 0; ts < registerGpioIndex; ts++) { TEST_ASSERT_EQUAL_INT16( - 250, + expectedTemperatures[adi_stateBase.currentString][m][ts], adi_stateBase.data.cellTemperature->cellTemperature_ddegC[adi_stateBase.currentString][m][ts]); } } } } } - -/*========== Extern Function Test Cases =====================================*/ -void testADI_GetStoredTemperatureIndex(void) { - /* Invalid index */ - TEST_ASSERT_FAIL_ASSERT(TEST_ADI_GetStoredTemperatureIndex(BS_NR_OF_GPIOS_PER_MODULE)); - - /* All inputs used, indices must be equal */ - for (uint8_t c = 0; c < BS_NR_OF_GPIOS_PER_MODULE; c++) { - TEST_ASSERT_EQUAL_UINT16(c, TEST_ADI_GetStoredTemperatureIndex(c)); - } -} diff --git a/tests/unit/app/driver/afe/adi/ades1830/test_adi_ades1830_temperatures_2.c b/tests/unit/app/driver/afe/adi/ades1830/test_adi_ades1830_temperatures_2.c new file mode 100644 index 00000000..6bf632ed --- /dev/null +++ b/tests/unit/app/driver/afe/adi/ades1830/test_adi_ades1830_temperatures_2.c @@ -0,0 +1,225 @@ +/** + * + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * We kindly request you to use one or more of the following phrases to refer to + * foxBMS in your hardware, software, documentation or advertising materials: + * + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" + * + */ + +/** + * @file test_adi_ades1830_temperatures_2.c + * @author foxBMS Team + * @date 2024-01-30 (date of creation) + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup UNIT_TEST_IMPLEMENTATION + * @prefix TEST + * + * @brief Additional tests of the temperature measurement functionality + * @details This file implements additional parts of the tests of the external + * and internal (static) functions of adi_ades183x_temperatures.c. + * The interface function #ADI_GetTemperatures is tested directly, + * while the static functions are tested via their externalize + * wrappers. + * + * The internal functions + * - #ADI_GetStoredTemperatureIndex (external wrapper + * #TEST_ADI_GetStoredTemperatureIndex) + * + * are validated to call the expected routines with the expected + * arguments. + * + * The interface function #ADI_GetTemperatures is tested to call the + * expected functions and based on their output correctly set the + * measured temperature in the data table of the driver. + */ + +/*========== Includes =======================================================*/ + +#include "unity.h" +#include "Mockadi_ades183x_cfg.h" +#include "Mockadi_ades183x_helpers.h" + +/* clang-format off */ +#include "general.h" +/* clang-format on */ + +#include "adi_ades183x_buffers.h" /* use the real command config */ +#include "adi_ades183x_commands.h" /* use the real buffer configuration */ +#include "adi_ades183x_temperatures.h" +#include "test_assert_helper.h" + +/*========== Unit Testing Framework Directives ==============================*/ +TEST_SOURCE_FILE("adi_ades183x_temperatures.c") + +TEST_INCLUDE_PATH("../../src/app/application/config") +TEST_INCLUDE_PATH("../../src/app/driver/afe/adi/ades1830") +TEST_INCLUDE_PATH("../../src/app/driver/afe/adi/common/ades183x") +TEST_INCLUDE_PATH("../../src/app/driver/afe/adi/common/ades183x/config") +TEST_INCLUDE_PATH("../../src/app/driver/afe/adi/common/ades183x/pec") +TEST_INCLUDE_PATH("../../src/app/driver/afe/api") +TEST_INCLUDE_PATH("../../src/app/driver/config") +TEST_INCLUDE_PATH("../../src/app/driver/dma") +TEST_INCLUDE_PATH("../../src/app/driver/io") +TEST_INCLUDE_PATH("../../src/app/driver/pex") +TEST_INCLUDE_PATH("../../src/app/driver/rtc") +TEST_INCLUDE_PATH("../../src/app/driver/spi") +TEST_INCLUDE_PATH("../../src/app/driver/ts/api") +TEST_INCLUDE_PATH("../../src/app/engine/database") +TEST_INCLUDE_PATH("../../src/app/engine/diag") +TEST_INCLUDE_PATH("../../src/app/task/config") +TEST_INCLUDE_PATH("../../src/app/task/ftask") + +/*========== Definitions and Implementations for Unit Test ==================*/ +static DATA_BLOCK_CELL_TEMPERATURE_s adi_cellTemperature = {.header.uniqueId = DATA_BLOCK_ID_CELL_TEMPERATURE_BASE}; +static DATA_BLOCK_ALL_GPIO_VOLTAGES_s adi_allGpioVoltage = {.header.uniqueId = DATA_BLOCK_ID_ALL_GPIO_VOLTAGES_BASE}; + +ADI_STATE_s adi_stateBase = { + .currentString = 0u, + .data.cellTemperature = &adi_cellTemperature, + .data.allGpioVoltages = &adi_allGpioVoltage, +}; + +const uint16_t testTemperature_ddegC = 42; + +/* this test checks, that the driver works as expected, when the temperature + inputs are *not* used */ +const uint8_t adi_temperatureInputsUsed[BS_NR_OF_GPIOS_PER_MODULE] = { + GEN_REPEAT_U(0u, GEN_STRIP(BS_NR_OF_GPIOS_PER_MODULE))}; + +/*========== Setup and Teardown =============================================*/ +void setUp(void) { + /* set all temperatures to a test value, so that we can later check, that + these were not changed */ + for (uint8_t s = 0u; s < BS_NR_OF_STRINGS; s++) { + adi_stateBase.currentString = s; + for (uint16_t m = 0u; m < BS_NR_OF_MODULES_PER_STRING; m++) { + for (uint16_t registerGpioIndex = 0u; registerGpioIndex < BS_NR_OF_GPIOS_PER_MODULE; registerGpioIndex++) { + for (uint8_t ts = 0; ts < registerGpioIndex; ts++) { + adi_stateBase.data.cellTemperature->cellTemperature_ddegC[adi_stateBase.currentString][m][ts] = + testTemperature_ddegC; + } + } + } + } +} + +void tearDown(void) { +} + +/*========== Test Cases =====================================================*/ + +/*========== Externalized Static Function Test Cases ========================*/ +/** + * @brief Testing static function ADI_GetStoredTemperatureIndex + * @details The following additional cases need to be tested: + * - Routine validation: + * - RT2/2: all inputs are *not* used as inputs, therefore the index + * array shall be fully set. + * + * For all other test cases: see the test description of + * ADI_GetTemperatures in + * tests/unit/app/driver/afe/adi/ades1830/test_adi_ades1830_temperatures.c + */ +void testADI_GetStoredTemperatureIndex(void) { + /* ======= Routine tests =============================================== */ + + /* ======= RT1/1: Test implementation */ + uint16_t calculatedTemperatureIndex[BS_NR_OF_GPIOS_PER_MODULE] = { + GEN_REPEAT_U(0u, GEN_STRIP(BS_NR_OF_GPIOS_PER_MODULE))}; + uint16_t expectedTemperatureIndex[BS_NR_OF_GPIOS_PER_MODULE] = { + GEN_REPEAT_U(0u, GEN_STRIP(BS_NR_OF_GPIOS_PER_MODULE))}; + + /* ======= RT1/1: call function under test */ + for (uint8_t c = 0; c < BS_NR_OF_GPIOS_PER_MODULE; c++) { + calculatedTemperatureIndex[c] = TEST_ADI_GetStoredTemperatureIndex(c); + } + + /* ======= RT1/1: test output verification */ + for (uint8_t c = 0; c < BS_NR_OF_GPIOS_PER_MODULE; c++) { + TEST_ASSERT_EQUAL_UINT16(expectedTemperatureIndex[c], calculatedTemperatureIndex[c]); + } +} + +/*========== Extern Function Test Cases =====================================*/ + +/** + * @brief Testing extern function #ADI_GetTemperatures + * @details The following additional cases need to be tested: + * - Routine validation: + * - RT2/2: the input table does not set the temperature + * measurement, i.e., no temperature measurement shall be + * performed. + * + * For all other test cases: see the test description of + * ADI_GetTemperatures in + * tests/unit/app/driver/afe/adi/ades1830/test_adi_ades1830_temperatures.c + */ +void testADI_GetTemperatures(void) { + /* ======= Routine tests =============================================== */ + /* ======= RT2/2: Test implementation */ + + int16_t expectedTemperatures[BS_NR_OF_STRINGS][BS_NR_OF_MODULES_PER_STRING][BS_NR_OF_GPIOS_PER_MODULE]; + for (uint8_t s = 0u; s < BS_NR_OF_STRINGS; s++) { + adi_stateBase.currentString = s; + for (uint16_t m = 0u; m < BS_NR_OF_MODULES_PER_STRING; m++) { + for (uint16_t registerGpioIndex = 0u; registerGpioIndex < BS_NR_OF_GPIOS_PER_MODULE; registerGpioIndex++) { + for (uint8_t ts = 0; ts < registerGpioIndex; ts++) { + expectedTemperatures[adi_stateBase.currentString][m][ts] = testTemperature_ddegC; + } + } + } + } + + /* ======= RT2/2: call function under test */ + for (uint8_t s = 0u; s < BS_NR_OF_STRINGS; s++) { + adi_stateBase.currentString = s; + ADI_GetTemperatures(&adi_stateBase); + } + /* ======= RT2/2: test output verification */ + for (uint8_t s = 0u; s < BS_NR_OF_STRINGS; s++) { + adi_stateBase.currentString = s; + for (uint16_t m = 0u; m < BS_NR_OF_MODULES_PER_STRING; m++) { + for (uint16_t registerGpioIndex = 0u; registerGpioIndex < BS_NR_OF_GPIOS_PER_MODULE; registerGpioIndex++) { + for (uint8_t ts = 0; ts < registerGpioIndex; ts++) { + TEST_ASSERT_EQUAL_INT16( + expectedTemperatures[adi_stateBase.currentString][m][ts], + adi_stateBase.data.cellTemperature->cellTemperature_ddegC[adi_stateBase.currentString][m][ts]); + } + } + } + } +} diff --git a/tests/unit/app/driver/afe/adi/ades1830/test_adi_ades1830_voltages.c b/tests/unit/app/driver/afe/adi/ades1830/test_adi_ades1830_voltages.c index b3809b01..71bc64d5 100644 --- a/tests/unit/app/driver/afe/adi/ades1830/test_adi_ades1830_voltages.c +++ b/tests/unit/app/driver/afe/adi/ades1830/test_adi_ades1830_voltages.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_adi_ades1830_voltages.c * @author foxBMS Team * @date 2022-12-07 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * @@ -55,6 +55,7 @@ /*========== Includes =======================================================*/ #include "unity.h" #include "Mockadi_ades183x_cfg.h" +#include "Mockadi_ades183x_diagnostic.h" #include "Mockos.h" #include "Mockspi.h" @@ -246,88 +247,6 @@ void testADI_ReadAndStoreVoltages(void) { /* Invalid store location */ TEST_ASSERT_FAIL_ASSERT( TEST_ADI_ReadAndStoreVoltages(&adi_stateBase, &commandBytes, ADI_VOLTAGE_STORE_LOCATION_E_MAX)); - - /* Test storing of data */ - /* Command parameter changes the register read so this has no effet due to the mocking, - as the values in the read data register are simulated */ - DATA_BLOCK_CELL_VOLTAGE_s *pVoltageTable = NULL_PTR; - - for (ADI_VOLTAGE_STORE_LOCATION_e storeLocation = ADI_CELL_VOLTAGE; - storeLocation < ADI_VOLTAGE_STORE_LOCATION_E_MAX; - storeLocation++) { - for (uint8_t registerOffset = ADI_RESULT_REGISTER_SET_A; registerOffset <= ADI_RESULT_REGISTER_SET_F; - registerOffset++) { - SPI_TransmitDummyByte_IgnoreAndReturn(STD_OK); - SPI_TransmitReceiveDataDma_IgnoreAndReturn(STD_OK); - OS_WaitForNotification_IgnoreAndReturn(OS_SUCCESS); - } - - /* Set store buffer with store location */ - switch (storeLocation) { - case ADI_CELL_VOLTAGE: - pVoltageTable = adi_stateBase.data.cellVoltage; - break; - case ADI_AVERAGE_CELL_VOLTAGE: - pVoltageTable = adi_stateBase.data.cellVoltageAverage; - break; - case ADI_FILTERED_CELL_VOLTAGE: - pVoltageTable = adi_stateBase.data.cellVoltageFiltered; - break; - case ADI_REDUNDANT_CELL_VOLTAGE: - pVoltageTable = adi_stateBase.data.cellVoltageRedundant; - break; - case ADI_CELL_VOLTAGE_OPEN_WIRE_EVEN: - pVoltageTable = adi_stateBase.data.cellVoltageOpenWireEven; - break; - case ADI_CELL_VOLTAGE_OPEN_WIRE_ODD: - pVoltageTable = adi_stateBase.data.cellVoltageOpenWireOdd; - break; - case ADI_CELL_VOLTAGE_AVERAGE_OPEN_WIRE: - pVoltageTable = adi_stateBase.data.cellVoltageAverageOpenWire; - break; - case ADI_CELL_VOLTAGE_REDUNDANT_OPEN_WIRE: - pVoltageTable = adi_stateBase.data.cellVoltageRedundantOpenWire; - break; - default: - break; - } - for (uint8_t s = 0u; s < BS_NR_OF_STRINGS; s++) { - adi_stateBase.currentString = s; - /* Prepare voltage data to simulate data read from AFE registers */ - for (uint16_t i = 4u; i < ADI_N_BYTES_FOR_DATA_TRANSMISSION; i += 8) { - /* Set raw data, corresponds to a cell voltage of 1884mV */ - uint8_t bufferMSB = 0x0Au; - uint8_t bufferLSB = 0x01u; - /* Set receive buffer with raw data */ - adi_bufferRxPecTest[i] = bufferLSB; - adi_bufferRxPecTest[i + 1u] = bufferMSB; - adi_bufferRxPecTest[i + 2u] = bufferLSB; - adi_bufferRxPecTest[i + 3u] = bufferMSB; - adi_bufferRxPecTest[i + 4u] = bufferLSB; - adi_bufferRxPecTest[i + 5u] = bufferMSB; - /* Two PEC bytes */ - adi_bufferRxPecTest[i + 6u] = 0x00u; - adi_bufferRxPecTest[i + 7u] = 0x2Bu; - } - /* Reset cell voltage values */ - for (uint16_t m = 0u; m < BS_NR_OF_MODULES_PER_STRING; m++) { - for (uint8_t cb = 0u; cb < BS_NR_OF_CELL_BLOCKS_PER_MODULE; cb++) { - pVoltageTable->cellVoltage_mV[s][m][cb] = 0; - } - } - /* Reset PEC error flags */ - for (uint16_t m = 0; m < BS_NR_OF_MODULES_PER_STRING; m++) { - adi_stateBase.data.errorTable->crcIsOk[s][m] = true; - } - TEST_ADI_ReadAndStoreVoltages(&adi_stateBase, &commandBytes, storeLocation); - for (uint16_t m = 0u; m < BS_NR_OF_MODULES_PER_STRING; m++) { - for (uint8_t cb = 0u; cb < BS_NR_OF_CELL_BLOCKS_PER_MODULE; cb++) { - /* Check that stored values corresponds to raw values */ - TEST_ASSERT_EQUAL(1884, pVoltageTable->cellVoltage_mV[s][m][cb]); - } - } - } - } } void testADI_SaveRxToCellVoltageBuffer(void) { @@ -343,183 +262,6 @@ void testADI_SaveRxToCellVoltageBuffer(void) { /* Test invalid store location */ TEST_ASSERT_FAIL_ASSERT(TEST_ADI_SaveRxToCellVoltageBuffer( &adi_stateBase, adi_dataReceive, ADI_RESULT_REGISTER_SET_A, ADI_VOLTAGE_STORE_LOCATION_E_MAX)); - - DATA_BLOCK_CELL_VOLTAGE_s *pVoltageTable = NULL_PTR; - - /* Test three cases for each store location: - -raw buffer contains cleared values, values must not be stored - -PEC error set, values must not be stored - -everything OK, values must be stored */ - for (ADI_VOLTAGE_STORE_LOCATION_e storeLocation = ADI_CELL_VOLTAGE; - storeLocation < ADI_VOLTAGE_STORE_LOCATION_E_MAX; - storeLocation++) { - /* Set store buffer with store location */ - switch (storeLocation) { - case ADI_CELL_VOLTAGE: - pVoltageTable = adi_stateBase.data.cellVoltage; - break; - case ADI_AVERAGE_CELL_VOLTAGE: - pVoltageTable = adi_stateBase.data.cellVoltageAverage; - break; - case ADI_FILTERED_CELL_VOLTAGE: - pVoltageTable = adi_stateBase.data.cellVoltageFiltered; - break; - case ADI_REDUNDANT_CELL_VOLTAGE: - pVoltageTable = adi_stateBase.data.cellVoltageRedundant; - break; - case ADI_CELL_VOLTAGE_OPEN_WIRE_EVEN: - pVoltageTable = adi_stateBase.data.cellVoltageOpenWireEven; - break; - case ADI_CELL_VOLTAGE_OPEN_WIRE_ODD: - pVoltageTable = adi_stateBase.data.cellVoltageOpenWireOdd; - break; - case ADI_CELL_VOLTAGE_AVERAGE_OPEN_WIRE: - pVoltageTable = adi_stateBase.data.cellVoltageAverageOpenWire; - break; - case ADI_CELL_VOLTAGE_REDUNDANT_OPEN_WIRE: - pVoltageTable = adi_stateBase.data.cellVoltageRedundantOpenWire; - break; - default: - break; - } - for (uint8_t s = 0u; s < BS_NR_OF_STRINGS; s++) { - adi_stateBase.currentString = s; - /* First test: buffer contains cleared values */ - /* Prepare voltage data */ - for (uint16_t m = 0u; m < BS_NR_OF_MODULES_PER_STRING; m++) { - /* Parse all voltages contained in one register */ - for (uint16_t c = 0u; c < ADI_MAX_NUMBER_OF_VOLTAGES_IN_REGISTER; c++) { - /* Set raw data, corresponds to cleared values */ - uint8_t bufferMSB = (ADI_REGISTER_CLEARED_VALUE & 0xFF00u) >> 8u; - uint8_t bufferLSB = ADI_REGISTER_CLEARED_VALUE & 0xFFu; - /* Set receive buffer with raw data */ - adi_dataReceive[(ADI_RAW_VOLTAGE_SIZE_IN_BYTES * c) + (m * ADI_MAX_REGISTER_SIZE_IN_BYTES) + 1u] = - bufferMSB; - adi_dataReceive[(ADI_RAW_VOLTAGE_SIZE_IN_BYTES * c) + (m * ADI_MAX_REGISTER_SIZE_IN_BYTES)] = - bufferLSB; - } - } - /* Reset cell voltage values */ - for (uint16_t m = 0u; m < BS_NR_OF_MODULES_PER_STRING; m++) { - for (uint8_t cb = 0u; cb < BS_NR_OF_CELL_BLOCKS_PER_STRING; cb++) { - pVoltageTable->cellVoltage_mV[s][m][cb] = 0; - } - } - /* Reset PEC error flags */ - for (uint16_t m = 0; m < BS_NR_OF_MODULES_PER_STRING; m++) { - adi_stateBase.data.errorTable->crcIsOk[s][m] = true; - } - /* Save buffer to store location */ - TEST_ADI_SaveRxToCellVoltageBuffer( - &adi_stateBase, adi_dataReceive, ADI_RESULT_REGISTER_SET_A, storeLocation); - TEST_ADI_SaveRxToCellVoltageBuffer( - &adi_stateBase, adi_dataReceive, ADI_RESULT_REGISTER_SET_B, storeLocation); - TEST_ADI_SaveRxToCellVoltageBuffer( - &adi_stateBase, adi_dataReceive, ADI_RESULT_REGISTER_SET_C, storeLocation); - TEST_ADI_SaveRxToCellVoltageBuffer( - &adi_stateBase, adi_dataReceive, ADI_RESULT_REGISTER_SET_D, storeLocation); - TEST_ADI_SaveRxToCellVoltageBuffer( - &adi_stateBase, adi_dataReceive, ADI_RESULT_REGISTER_SET_E, storeLocation); - TEST_ADI_SaveRxToCellVoltageBuffer( - &adi_stateBase, adi_dataReceive, ADI_RESULT_REGISTER_SET_F, storeLocation); - for (uint16_t m = 0u; m < BS_NR_OF_MODULES_PER_STRING; m++) { - for (uint8_t cb = 0u; cb < BS_NR_OF_CELL_BLOCKS_PER_STRING; cb++) { - /* As cleared value are stored in buffer, they must not be stored in the voltage table */ - TEST_ASSERT_EQUAL(0, pVoltageTable->cellVoltage_mV[s][m][cb]); - } - } - /* Second test: wrong PEC */ - /* Prepare voltage data */ - for (uint16_t m = 0u; m < BS_NR_OF_MODULES_PER_STRING; m++) { - /* Parse all voltages contained in one register */ - for (uint16_t c = 0u; c < ADI_MAX_NUMBER_OF_VOLTAGES_IN_REGISTER; c++) { - /* Set raw data, corresponds to a cell voltage of 1884mV */ - uint8_t bufferMSB = 0x0Au; - uint8_t bufferLSB = 0x01u; - /* Set receive buffer with raw data */ - adi_dataReceive[(ADI_RAW_VOLTAGE_SIZE_IN_BYTES * c) + (m * ADI_MAX_REGISTER_SIZE_IN_BYTES) + 1u] = - bufferMSB; - adi_dataReceive[(ADI_RAW_VOLTAGE_SIZE_IN_BYTES * c) + (m * ADI_MAX_REGISTER_SIZE_IN_BYTES)] = - bufferLSB; - } - } - /* Reset cell voltage values */ - for (uint16_t m = 0u; m < BS_NR_OF_MODULES_PER_STRING; m++) { - for (uint8_t cb = 0u; cb < BS_NR_OF_CELL_BLOCKS_PER_MODULE; cb++) { - pVoltageTable->cellVoltage_mV[s][m][cb] = 0; - } - } - /* Set PEC error flags */ - for (uint16_t m = 0; m < BS_NR_OF_MODULES_PER_STRING; m++) { - adi_stateBase.data.errorTable->crcIsOk[s][m] = false; - } - /* Save buffer to store location */ - TEST_ADI_SaveRxToCellVoltageBuffer( - &adi_stateBase, adi_dataReceive, ADI_RESULT_REGISTER_SET_A, storeLocation); - TEST_ADI_SaveRxToCellVoltageBuffer( - &adi_stateBase, adi_dataReceive, ADI_RESULT_REGISTER_SET_B, storeLocation); - TEST_ADI_SaveRxToCellVoltageBuffer( - &adi_stateBase, adi_dataReceive, ADI_RESULT_REGISTER_SET_C, storeLocation); - TEST_ADI_SaveRxToCellVoltageBuffer( - &adi_stateBase, adi_dataReceive, ADI_RESULT_REGISTER_SET_D, storeLocation); - TEST_ADI_SaveRxToCellVoltageBuffer( - &adi_stateBase, adi_dataReceive, ADI_RESULT_REGISTER_SET_E, storeLocation); - TEST_ADI_SaveRxToCellVoltageBuffer( - &adi_stateBase, adi_dataReceive, ADI_RESULT_REGISTER_SET_F, storeLocation); - for (uint16_t m = 0u; m < BS_NR_OF_MODULES_PER_STRING; m++) { - for (uint8_t cb = 0u; cb < BS_NR_OF_CELL_BLOCKS_PER_STRING; cb++) { - /* As PEC error is detected, the values must not be stored */ - TEST_ASSERT_EQUAL(0, pVoltageTable->cellVoltage_mV[s][m][cb]); - } - } - /* Third test: store values */ - /* Prepare voltage data */ - for (uint16_t m = 0u; m < BS_NR_OF_MODULES_PER_STRING; m++) { - /* Parse all voltages contained in one register */ - for (uint16_t c = 0u; c < ADI_MAX_NUMBER_OF_VOLTAGES_IN_REGISTER; c++) { - /* Set raw data, corresponds to a cell voltage of 1884mV */ - uint8_t bufferMSB = 0x0Au; - uint8_t bufferLSB = 0x01u; - /* Set receive buffer with raw data */ - adi_dataReceive - [ADI_COMMAND_AND_PEC_SIZE_IN_BYTES + (ADI_RAW_VOLTAGE_SIZE_IN_BYTES * c) + - (m * (ADI_MAX_REGISTER_SIZE_IN_BYTES + ADI_PEC_SIZE_IN_BYTES)) + 1u] = bufferMSB; - adi_dataReceive - [ADI_COMMAND_AND_PEC_SIZE_IN_BYTES + (ADI_RAW_VOLTAGE_SIZE_IN_BYTES * c) + - (m * (ADI_MAX_REGISTER_SIZE_IN_BYTES + ADI_PEC_SIZE_IN_BYTES))] = bufferLSB; - } - } - /* Reset cell voltage values */ - for (uint16_t m = 0u; m < BS_NR_OF_MODULES_PER_STRING; m++) { - for (uint8_t cb = 0u; cb < BS_NR_OF_CELL_BLOCKS_PER_MODULE; cb++) { - pVoltageTable->cellVoltage_mV[s][m][cb] = 0; - } - } - /* Reset PEC error flags */ - for (uint16_t m = 0; m < BS_NR_OF_MODULES_PER_STRING; m++) { - adi_stateBase.data.errorTable->crcIsOk[s][m] = true; - } - /* Save buffer to store location */ - TEST_ADI_SaveRxToCellVoltageBuffer( - &adi_stateBase, adi_dataReceive, ADI_RESULT_REGISTER_SET_A, storeLocation); - TEST_ADI_SaveRxToCellVoltageBuffer( - &adi_stateBase, adi_dataReceive, ADI_RESULT_REGISTER_SET_B, storeLocation); - TEST_ADI_SaveRxToCellVoltageBuffer( - &adi_stateBase, adi_dataReceive, ADI_RESULT_REGISTER_SET_C, storeLocation); - TEST_ADI_SaveRxToCellVoltageBuffer( - &adi_stateBase, adi_dataReceive, ADI_RESULT_REGISTER_SET_D, storeLocation); - TEST_ADI_SaveRxToCellVoltageBuffer( - &adi_stateBase, adi_dataReceive, ADI_RESULT_REGISTER_SET_E, storeLocation); - TEST_ADI_SaveRxToCellVoltageBuffer( - &adi_stateBase, adi_dataReceive, ADI_RESULT_REGISTER_SET_F, storeLocation); - for (uint16_t m = 0u; m < BS_NR_OF_MODULES_PER_STRING; m++) { - for (uint8_t cb = 0u; cb < BS_NR_OF_CELL_BLOCKS_PER_MODULE; cb++) { - /* Everything OK, the values must be stored */ - TEST_ASSERT_EQUAL(1884, pVoltageTable->cellVoltage_mV[s][m][cb]); - } - } - } - } } /*========== Extern Function Test Cases =====================================*/ @@ -541,89 +283,4 @@ void testADI_GetVoltages(void) { /* Invalid store location */ TEST_ASSERT_FAIL_ASSERT( ADI_GetVoltages(&adi_stateBase, ADI_CELL_VOLTAGE_REGISTER, ADI_VOLTAGE_STORE_LOCATION_E_MAX)); - - /* Test reading of voltages */ - - /* SPI and OS functions are ignored */ - SPI_TransmitDummyByte_IgnoreAndReturn(STD_OK); - SPI_TransmitReceiveDataDma_IgnoreAndReturn(STD_OK); - OS_WaitForNotification_IgnoreAndReturn(OS_SUCCESS); - DATA_BLOCK_CELL_VOLTAGE_s *pVoltageTable = NULL_PTR; - - /* Prepare voltage data to simulate data read from AFE registers */ - for (uint16_t i = 4u; i < ADI_N_BYTES_FOR_DATA_TRANSMISSION; i += 8) { - /* Set raw data, corresponds to a cell voltage of 1884mV */ - uint8_t bufferMSB = 0x0Au; - uint8_t bufferLSB = 0x01u; - /* Set receive buffer with raw data */ - adi_bufferRxPecTest[i] = bufferLSB; - adi_bufferRxPecTest[i + 1u] = bufferMSB; - adi_bufferRxPecTest[i + 2u] = bufferLSB; - adi_bufferRxPecTest[i + 3u] = bufferMSB; - adi_bufferRxPecTest[i + 4u] = bufferLSB; - adi_bufferRxPecTest[i + 5u] = bufferMSB; - /* Two PEC bytes */ - adi_bufferRxPecTest[i + 6u] = 0x00u; - adi_bufferRxPecTest[i + 7u] = 0x2Bu; - } - - for (uint8_t s = 0u; s < BS_NR_OF_STRINGS; s++) { - adi_stateBase.currentString = s; - - for (ADI_VOLTAGE_STORE_LOCATION_e storeLocation = ADI_CELL_VOLTAGE; - storeLocation < ADI_VOLTAGE_STORE_LOCATION_E_MAX; - storeLocation++) { - for (ADI_VOLTAGE_REGISTER_TYPE_e registerType = ADI_CELL_VOLTAGE_REGISTER; - registerType < ADI_VOLTAGE_REGISTER_TYPE_E_MAX; - registerType++) { - switch (storeLocation) { - case ADI_CELL_VOLTAGE: - pVoltageTable = adi_stateBase.data.cellVoltage; - break; - case ADI_AVERAGE_CELL_VOLTAGE: - pVoltageTable = adi_stateBase.data.cellVoltageAverage; - break; - case ADI_FILTERED_CELL_VOLTAGE: - pVoltageTable = adi_stateBase.data.cellVoltageFiltered; - break; - case ADI_REDUNDANT_CELL_VOLTAGE: - pVoltageTable = adi_stateBase.data.cellVoltageRedundant; - break; - case ADI_CELL_VOLTAGE_OPEN_WIRE_EVEN: - pVoltageTable = adi_stateBase.data.cellVoltageOpenWireEven; - break; - case ADI_CELL_VOLTAGE_OPEN_WIRE_ODD: - pVoltageTable = adi_stateBase.data.cellVoltageOpenWireOdd; - break; - case ADI_CELL_VOLTAGE_AVERAGE_OPEN_WIRE: - pVoltageTable = adi_stateBase.data.cellVoltageAverageOpenWire; - break; - case ADI_CELL_VOLTAGE_REDUNDANT_OPEN_WIRE: - pVoltageTable = adi_stateBase.data.cellVoltageRedundantOpenWire; - break; - default: - break; - } - /* Reset cell voltage values */ - for (uint16_t m = 0u; m < BS_NR_OF_MODULES_PER_STRING; m++) { - for (uint8_t cb = 0u; cb < BS_NR_OF_CELL_BLOCKS_PER_MODULE; cb++) { - pVoltageTable->cellVoltage_mV[s][m][cb] = 0; - } - } - /* Reset PEC error flags */ - for (uint16_t m = 0; m < BS_NR_OF_MODULES_PER_STRING; m++) { - adi_stateBase.data.errorTable->crcIsOk[s][m] = true; - } - - /* Now get voltages by reading data (mocked) and storing it to the voltage table */ - ADI_GetVoltages(&adi_stateBase, registerType, storeLocation); - for (uint16_t m = 0u; m < BS_NR_OF_MODULES_PER_STRING; m++) { - for (uint8_t cb = 0u; cb < BS_NR_OF_CELL_BLOCKS_PER_MODULE; cb++) { - /* As cleared values are stored in buffer, they must not be stored in the voltage table */ - TEST_ASSERT_EQUAL(1884, pVoltageTable->cellVoltage_mV[s][m][cb]); - } - } - } - } - } } diff --git a/tests/unit/app/driver/afe/adi/ades1830/test_adi_ades1830_voltages.c.txt b/tests/unit/app/driver/afe/adi/ades1830/test_adi_ades1830_voltages.c.txt new file mode 100644 index 00000000..155bff76 --- /dev/null +++ b/tests/unit/app/driver/afe/adi/ades1830/test_adi_ades1830_voltages.c.txt @@ -0,0 +1,630 @@ +/** + * + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * We kindly request you to use one or more of the following phrases to refer to + * foxBMS in your hardware, software, documentation or advertising materials: + * + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" + * + */ + +/** + * @file test_adi_ades1830_voltages.c + * @author foxBMS Team + * @date 2022-12-07 (date of creation) + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup UNIT_TEST_IMPLEMENTATION + * @prefix TEST + * + * @brief Test of some module + * + */ + +/*========== Includes =======================================================*/ +#include "unity.h" +#include "Mockadi_ades183x_cfg.h" +#include "Mockadi_ades183x_diagnostic.h" +#include "Mockos.h" +#include "Mockspi.h" + +#include "adi_ades183x_buffers.h" /* use the real buffer configuration */ +#include "adi_ades183x_commands.h" +#include "adi_ades183x_commands_voltages.h" +#include "adi_ades183x_defs.h" +#include "adi_ades183x_helpers.h" +#include "adi_ades183x_pec.h" +#include "adi_ades183x_voltages.h" +#include "spi_cfg-helper.h" +#include "test_assert_helper.h" + +#include +#include + +/*========== Unit Testing Framework Directives ==============================*/ +TEST_SOURCE_FILE("adi_ades183x_buffers.c") +TEST_SOURCE_FILE("adi_ades183x_voltages.c") + +TEST_INCLUDE_PATH("../../src/app/application/config") +TEST_INCLUDE_PATH("../../src/app/driver/afe/adi/ades1830") +TEST_INCLUDE_PATH("../../src/app/driver/afe/adi/common/ades183x") +TEST_INCLUDE_PATH("../../src/app/driver/afe/adi/common/ades183x/config") +TEST_INCLUDE_PATH("../../src/app/driver/afe/adi/common/ades183x/pec") +TEST_INCLUDE_PATH("../../src/app/driver/afe/api") +TEST_INCLUDE_PATH("../../src/app/driver/config") +TEST_INCLUDE_PATH("../../src/app/driver/dma") +TEST_INCLUDE_PATH("../../src/app/driver/io") +TEST_INCLUDE_PATH("../../src/app/driver/pex") +TEST_INCLUDE_PATH("../../src/app/driver/rtc") +TEST_INCLUDE_PATH("../../src/app/driver/spi") +TEST_INCLUDE_PATH("../../src/app/driver/ts/api") +TEST_INCLUDE_PATH("../../src/app/engine/database") +TEST_INCLUDE_PATH("../../src/app/engine/diag") +TEST_INCLUDE_PATH("../../src/app/task/config") +TEST_INCLUDE_PATH("../../src/app/task/ftask") + +/*========== Definitions and Implementations for Unit Test ==================*/ + +static DATA_BLOCK_CELL_VOLTAGE_s adi_cellVoltageTable = {.header.uniqueId = DATA_BLOCK_ID_CELL_VOLTAGE_BASE}; +static DATA_BLOCK_CELL_VOLTAGE_s adi_cellVoltageAverageTable = {.header.uniqueId = DATA_BLOCK_ID_CELL_VOLTAGE_BASE}; +static DATA_BLOCK_CELL_VOLTAGE_s adi_cellVoltageFilteredTable = {.header.uniqueId = DATA_BLOCK_ID_CELL_VOLTAGE_BASE}; +static DATA_BLOCK_CELL_VOLTAGE_s adi_cellVoltageRedundantTable = {.header.uniqueId = DATA_BLOCK_ID_CELL_VOLTAGE_BASE}; +static DATA_BLOCK_CELL_VOLTAGE_s adi_cellVoltageOpenWireEvenTable = { + .header.uniqueId = DATA_BLOCK_ID_CELL_VOLTAGE_BASE}; +static DATA_BLOCK_CELL_VOLTAGE_s adi_cellVoltageOpenWireOddTable = {.header.uniqueId = DATA_BLOCK_ID_CELL_VOLTAGE_BASE}; +static DATA_BLOCK_CELL_VOLTAGE_s adi_cellVoltageAverageOpenWireTable = { + .header.uniqueId = DATA_BLOCK_ID_CELL_VOLTAGE_BASE}; +static DATA_BLOCK_CELL_VOLTAGE_s adi_cellVoltageRedundantOpenWireTable = { + .header.uniqueId = DATA_BLOCK_ID_CELL_VOLTAGE_BASE}; +static ADI_ERROR_TABLE_s adi_errorTable = {0}; /*!< init in ADI_ResetErrorTable-function */ +static uint16_t adi_bufferRxPecTest[ADI_N_BYTES_FOR_DATA_TRANSMISSION] = {0}; +static uint16_t adi_bufferTxPecTest[ADI_N_BYTES_FOR_DATA_TRANSMISSION] = {0}; + +ADI_STATE_s adi_stateBase = { + .data.txBuffer = adi_bufferTxPecTest, + .data.rxBuffer = adi_bufferRxPecTest, + .data.cellVoltage = &adi_cellVoltageTable, + .data.cellVoltageAverage = &adi_cellVoltageAverageTable, + .data.cellVoltageFiltered = &adi_cellVoltageFilteredTable, + .data.cellVoltageRedundant = &adi_cellVoltageRedundantTable, + .data.cellVoltageOpenWireEven = &adi_cellVoltageOpenWireEvenTable, + .data.cellVoltageOpenWireOdd = &adi_cellVoltageOpenWireOddTable, + .data.cellVoltageAverageOpenWire = &adi_cellVoltageAverageOpenWireTable, + .data.cellVoltageRedundantOpenWire = &adi_cellVoltageRedundantOpenWireTable, + .data.errorTable = &adi_errorTable, +}; + +ADI_COMMAND_READ_REGISTERS_s commandBytes = { + .registerA = {0}, + .registerB = {0}, + .registerC = {0}, + .registerD = {0}, + .registerE = {0}, + .registerF = {0}, +}; + +/* If this configuration is changed, testADI_GetStoredVoltageIndex() must be adapted */ +const uint8_t adi_voltageInputsUsed[ADI_MAX_SUPPORTED_CELLS] = { + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, +}; + +/** SPI data configuration struct for ADI communication */ +static spiDAT1_t spi_kAdiDataConfig[BS_NR_OF_STRINGS] = { + { /* struct is implemented in the TI HAL and uses uppercase true and false */ + .CS_HOLD = TRUE, /* If true, HW chip select kept active between words */ + .WDEL = FALSE, /* Activation of delay between words */ + .DFSEL = SPI_FMT_0, /* Data word format selection */ + .CSNR = SPI_HARDWARE_CHIP_SELECT_2_ACTIVE}, +}; + +/** + * SPI interface configuration for ADI communication + * This is a list of structs because of multi string + */ +SPI_INTERFACE_CONFIG_s spi_adiInterface[BS_NR_OF_STRINGS] = { + { + .pConfig = &spi_kAdiDataConfig[0u], + .pNode = spiREG1, + .pGioPort = &(spiREG1->PC3), + .csPin = 2u, + .csType = SPI_CHIP_SELECT_HARDWARE, + }, +}; + +/*========== Setup and Teardown =============================================*/ +void setUp(void) { +} + +void tearDown(void) { +} + +/*========== Test Cases =====================================================*/ + +/*========== Externalized Static Function Test Cases ========================*/ +void testADI_CopyCommandBytesCellVoltageRegister(void) { + TEST_ASSERT_FAIL_ASSERT(TEST_ADI_CopyCommandBytesCellVoltageRegister(NULL_PTR)); + + TEST_ADI_CopyCommandBytesCellVoltageRegister(&commandBytes); + for (uint8_t i = 0u; i < ADI_COMMAND_DEFINITION_LENGTH; i++) { + TEST_ASSERT_EQUAL(adi_cmdRdcva[i], commandBytes.registerA[i]); + TEST_ASSERT_EQUAL(adi_cmdRdcvb[i], commandBytes.registerB[i]); + TEST_ASSERT_EQUAL(adi_cmdRdcvc[i], commandBytes.registerC[i]); + TEST_ASSERT_EQUAL(adi_cmdRdcvd[i], commandBytes.registerD[i]); + TEST_ASSERT_EQUAL(adi_cmdRdcve[i], commandBytes.registerE[i]); + TEST_ASSERT_EQUAL(adi_cmdRdcvf[i], commandBytes.registerF[i]); + } +} +void testADI_CopyCommandBytesAverageCellVoltageRegisters(void) { + TEST_ASSERT_FAIL_ASSERT(TEST_ADI_CopyCommandBytesAverageCellVoltageRegisters(NULL_PTR)); + + TEST_ADI_CopyCommandBytesAverageCellVoltageRegisters(&commandBytes); + for (uint8_t i = 0u; i < ADI_COMMAND_DEFINITION_LENGTH; i++) { + TEST_ASSERT_EQUAL(adi_cmdRdaca[i], commandBytes.registerA[i]); + TEST_ASSERT_EQUAL(adi_cmdRdacb[i], commandBytes.registerB[i]); + TEST_ASSERT_EQUAL(adi_cmdRdacc[i], commandBytes.registerC[i]); + TEST_ASSERT_EQUAL(adi_cmdRdacd[i], commandBytes.registerD[i]); + TEST_ASSERT_EQUAL(adi_cmdRdace[i], commandBytes.registerE[i]); + TEST_ASSERT_EQUAL(adi_cmdRdacf[i], commandBytes.registerF[i]); + } +} +void testADI_CopyCommandBytesFilteredCellVoltageRegisters(void) { + TEST_ASSERT_FAIL_ASSERT(TEST_ADI_CopyCommandBytesFilteredCellVoltageRegisters(NULL_PTR)); + + TEST_ADI_CopyCommandBytesFilteredCellVoltageRegisters(&commandBytes); + for (uint8_t i = 0u; i < ADI_COMMAND_DEFINITION_LENGTH; i++) { + TEST_ASSERT_EQUAL(adi_cmdRdfca[i], commandBytes.registerA[i]); + TEST_ASSERT_EQUAL(adi_cmdRdfcb[i], commandBytes.registerB[i]); + TEST_ASSERT_EQUAL(adi_cmdRdfcc[i], commandBytes.registerC[i]); + TEST_ASSERT_EQUAL(adi_cmdRdfcd[i], commandBytes.registerD[i]); + TEST_ASSERT_EQUAL(adi_cmdRdfce[i], commandBytes.registerE[i]); + TEST_ASSERT_EQUAL(adi_cmdRdfcf[i], commandBytes.registerF[i]); + } +} +void testADI_CopyCommandBytesRedundantCellVoltageRegisters(void) { + TEST_ASSERT_FAIL_ASSERT(TEST_ADI_CopyCommandBytesRedundantCellVoltageRegisters(NULL_PTR)); + + TEST_ADI_CopyCommandBytesRedundantCellVoltageRegisters(&commandBytes); + for (uint8_t i = 0u; i < ADI_COMMAND_DEFINITION_LENGTH; i++) { + TEST_ASSERT_EQUAL(adi_cmdRdsva[i], commandBytes.registerA[i]); + TEST_ASSERT_EQUAL(adi_cmdRdsvb[i], commandBytes.registerB[i]); + TEST_ASSERT_EQUAL(adi_cmdRdsvc[i], commandBytes.registerC[i]); + TEST_ASSERT_EQUAL(adi_cmdRdsvd[i], commandBytes.registerD[i]); + TEST_ASSERT_EQUAL(adi_cmdRdsve[i], commandBytes.registerE[i]); + TEST_ASSERT_EQUAL(adi_cmdRdsvf[i], commandBytes.registerF[i]); + } +} +void testADI_ReadAndStoreVoltages(void) { + /* Invalid state */ + TEST_ASSERT_FAIL_ASSERT(TEST_ADI_ReadAndStoreVoltages(NULL_PTR, &commandBytes, ADI_CELL_VOLTAGE)); + /* Invalid command bytes */ + TEST_ASSERT_FAIL_ASSERT(TEST_ADI_ReadAndStoreVoltages(&adi_stateBase, NULL_PTR, ADI_CELL_VOLTAGE)); + /* Invalid store location */ + TEST_ASSERT_FAIL_ASSERT( + TEST_ADI_ReadAndStoreVoltages(&adi_stateBase, &commandBytes, ADI_VOLTAGE_STORE_LOCATION_E_MAX)); + + /* Test storing of data */ + /* Command parameter changes the register read so this has no effect due to the mocking, + as the values in the read data register are simulated */ + DATA_BLOCK_CELL_VOLTAGE_s *pVoltageTable = NULL_PTR; + + for (ADI_VOLTAGE_STORE_LOCATION_e storeLocation = ADI_CELL_VOLTAGE; + storeLocation < ADI_VOLTAGE_STORE_LOCATION_E_MAX; + storeLocation++) { + for (uint8_t registerOffset = ADI_RESULT_REGISTER_SET_A; registerOffset <= ADI_RESULT_REGISTER_SET_F; + registerOffset++) { + SPI_TransmitDummyByte_IgnoreAndReturn(STD_OK); + SPI_TransmitReceiveDataDma_IgnoreAndReturn(STD_OK); + OS_WaitForNotification_IgnoreAndReturn(OS_SUCCESS); + } + + /* Set store buffer with store location */ + switch (storeLocation) { + case ADI_CELL_VOLTAGE: + pVoltageTable = adi_stateBase.data.cellVoltage; + break; + case ADI_AVERAGE_CELL_VOLTAGE: + pVoltageTable = adi_stateBase.data.cellVoltageAverage; + break; + case ADI_FILTERED_CELL_VOLTAGE: + pVoltageTable = adi_stateBase.data.cellVoltageFiltered; + break; + case ADI_REDUNDANT_CELL_VOLTAGE: + pVoltageTable = adi_stateBase.data.cellVoltageRedundant; + break; + case ADI_CELL_VOLTAGE_OPEN_WIRE_EVEN: + pVoltageTable = adi_stateBase.data.cellVoltageOpenWireEven; + break; + case ADI_CELL_VOLTAGE_OPEN_WIRE_ODD: + pVoltageTable = adi_stateBase.data.cellVoltageOpenWireOdd; + break; + case ADI_CELL_VOLTAGE_AVERAGE_OPEN_WIRE: + pVoltageTable = adi_stateBase.data.cellVoltageAverageOpenWire; + break; + case ADI_CELL_VOLTAGE_REDUNDANT_OPEN_WIRE: + pVoltageTable = adi_stateBase.data.cellVoltageRedundantOpenWire; + break; + default: + break; + } + for (uint8_t s = 0u; s < BS_NR_OF_STRINGS; s++) { + adi_stateBase.currentString = s; + /* Prepare voltage data to simulate data read from AFE registers */ + for (uint16_t i = 4u; i < ADI_N_BYTES_FOR_DATA_TRANSMISSION; i += 8) { + /* Set raw data, corresponds to a cell voltage of 1884mV */ + uint8_t bufferMSB = 0x0Au; + uint8_t bufferLSB = 0x01u; + /* Set receive buffer with raw data */ + adi_bufferRxPecTest[i] = bufferLSB; + adi_bufferRxPecTest[i + 1u] = bufferMSB; + adi_bufferRxPecTest[i + 2u] = bufferLSB; + adi_bufferRxPecTest[i + 3u] = bufferMSB; + adi_bufferRxPecTest[i + 4u] = bufferLSB; + adi_bufferRxPecTest[i + 5u] = bufferMSB; + /* Two PEC bytes */ + adi_bufferRxPecTest[i + 6u] = 0x00u; + adi_bufferRxPecTest[i + 7u] = 0x2Bu; + } + /* Reset cell voltage values */ + for (uint16_t m = 0u; m < BS_NR_OF_MODULES_PER_STRING; m++) { + for (uint8_t cb = 0u; cb < BS_NR_OF_CELL_BLOCKS_PER_MODULE; cb++) { + pVoltageTable->cellVoltage_mV[s][m][cb] = 0; + } + } + /* Reset PEC error flags */ + for (uint16_t m = 0; m < BS_NR_OF_MODULES_PER_STRING; m++) { + adi_stateBase.data.errorTable->crcIsOk[s][m] = true; + } + TEST_ADI_ReadAndStoreVoltages(&adi_stateBase, &commandBytes, storeLocation); + for (uint16_t m = 0u; m < BS_NR_OF_MODULES_PER_STRING; m++) { + for (uint8_t cb = 0u; cb < BS_NR_OF_CELL_BLOCKS_PER_MODULE; cb++) { + /* Check that stored values corresponds to raw values */ + TEST_ASSERT_EQUAL(1884, pVoltageTable->cellVoltage_mV[s][m][cb]); + } + } + } + } +} + +void testADI_SaveRxToCellVoltageBuffer(void) { + /* Test invalid state */ + TEST_ASSERT_FAIL_ASSERT( + TEST_ADI_SaveRxToCellVoltageBuffer(NULL_PTR, adi_dataReceive, ADI_RESULT_REGISTER_SET_A, ADI_CELL_VOLTAGE)); + /* Test invalid data */ + TEST_ASSERT_FAIL_ASSERT( + TEST_ADI_SaveRxToCellVoltageBuffer(&adi_stateBase, NULL_PTR, ADI_RESULT_REGISTER_SET_A, ADI_CELL_VOLTAGE)); + /* Test invalid register set */ + TEST_ASSERT_FAIL_ASSERT(TEST_ADI_SaveRxToCellVoltageBuffer( + &adi_stateBase, adi_dataReceive, (ADI_RESULT_REGISTER_SET_F + 1u), ADI_CELL_VOLTAGE)); + /* Test invalid store location */ + TEST_ASSERT_FAIL_ASSERT(TEST_ADI_SaveRxToCellVoltageBuffer( + &adi_stateBase, adi_dataReceive, ADI_RESULT_REGISTER_SET_A, ADI_VOLTAGE_STORE_LOCATION_E_MAX)); + + DATA_BLOCK_CELL_VOLTAGE_s *pVoltageTable = NULL_PTR; + + /* Test three cases for each store location: + -raw buffer contains cleared values, values must not be stored + -PEC error set, values must not be stored + -everything OK, values must be stored */ + for (ADI_VOLTAGE_STORE_LOCATION_e storeLocation = ADI_CELL_VOLTAGE; + storeLocation < ADI_VOLTAGE_STORE_LOCATION_E_MAX; + storeLocation++) { + /* Set store buffer with store location */ + switch (storeLocation) { + case ADI_CELL_VOLTAGE: + pVoltageTable = adi_stateBase.data.cellVoltage; + break; + case ADI_AVERAGE_CELL_VOLTAGE: + pVoltageTable = adi_stateBase.data.cellVoltageAverage; + break; + case ADI_FILTERED_CELL_VOLTAGE: + pVoltageTable = adi_stateBase.data.cellVoltageFiltered; + break; + case ADI_REDUNDANT_CELL_VOLTAGE: + pVoltageTable = adi_stateBase.data.cellVoltageRedundant; + break; + case ADI_CELL_VOLTAGE_OPEN_WIRE_EVEN: + pVoltageTable = adi_stateBase.data.cellVoltageOpenWireEven; + break; + case ADI_CELL_VOLTAGE_OPEN_WIRE_ODD: + pVoltageTable = adi_stateBase.data.cellVoltageOpenWireOdd; + break; + case ADI_CELL_VOLTAGE_AVERAGE_OPEN_WIRE: + pVoltageTable = adi_stateBase.data.cellVoltageAverageOpenWire; + break; + case ADI_CELL_VOLTAGE_REDUNDANT_OPEN_WIRE: + pVoltageTable = adi_stateBase.data.cellVoltageRedundantOpenWire; + break; + default: + break; + } + for (uint8_t s = 0u; s < BS_NR_OF_STRINGS; s++) { + adi_stateBase.currentString = s; + /* First test: buffer contains cleared values */ + /* Prepare voltage data */ + for (uint16_t m = 0u; m < BS_NR_OF_MODULES_PER_STRING; m++) { + /* Parse all voltages contained in one register */ + for (uint16_t c = 0u; c < ADI_MAX_NUMBER_OF_VOLTAGES_IN_REGISTER; c++) { + /* Set raw data, corresponds to cleared values */ + uint8_t bufferMSB = (ADI_REGISTER_CLEARED_VALUE & 0xFF00u) >> 8u; + uint8_t bufferLSB = ADI_REGISTER_CLEARED_VALUE & 0xFFu; + /* Set receive buffer with raw data */ + adi_dataReceive[(ADI_RAW_VOLTAGE_SIZE_IN_BYTES * c) + (m * ADI_MAX_REGISTER_SIZE_IN_BYTES) + 1u] = + bufferMSB; + adi_dataReceive[(ADI_RAW_VOLTAGE_SIZE_IN_BYTES * c) + (m * ADI_MAX_REGISTER_SIZE_IN_BYTES)] = + bufferLSB; + } + } + /* Reset cell voltage values */ + for (uint16_t m = 0u; m < BS_NR_OF_MODULES_PER_STRING; m++) { + for (uint8_t cb = 0u; cb < BS_NR_OF_CELL_BLOCKS_PER_STRING; cb++) { + pVoltageTable->cellVoltage_mV[s][m][cb] = 0; + } + } + /* Reset PEC error flags */ + for (uint16_t m = 0; m < BS_NR_OF_MODULES_PER_STRING; m++) { + adi_stateBase.data.errorTable->crcIsOk[s][m] = true; + } + /* Save buffer to store location */ + TEST_ADI_SaveRxToCellVoltageBuffer( + &adi_stateBase, adi_dataReceive, ADI_RESULT_REGISTER_SET_A, storeLocation); + TEST_ADI_SaveRxToCellVoltageBuffer( + &adi_stateBase, adi_dataReceive, ADI_RESULT_REGISTER_SET_B, storeLocation); + TEST_ADI_SaveRxToCellVoltageBuffer( + &adi_stateBase, adi_dataReceive, ADI_RESULT_REGISTER_SET_C, storeLocation); + TEST_ADI_SaveRxToCellVoltageBuffer( + &adi_stateBase, adi_dataReceive, ADI_RESULT_REGISTER_SET_D, storeLocation); + TEST_ADI_SaveRxToCellVoltageBuffer( + &adi_stateBase, adi_dataReceive, ADI_RESULT_REGISTER_SET_E, storeLocation); + TEST_ADI_SaveRxToCellVoltageBuffer( + &adi_stateBase, adi_dataReceive, ADI_RESULT_REGISTER_SET_F, storeLocation); + for (uint16_t m = 0u; m < BS_NR_OF_MODULES_PER_STRING; m++) { + for (uint8_t cb = 0u; cb < BS_NR_OF_CELL_BLOCKS_PER_STRING; cb++) { + /* As cleared value are stored in buffer, they must not be stored in the voltage table */ + TEST_ASSERT_EQUAL(0, pVoltageTable->cellVoltage_mV[s][m][cb]); + } + } + /* Second test: wrong PEC */ + /* Prepare voltage data */ + for (uint16_t m = 0u; m < BS_NR_OF_MODULES_PER_STRING; m++) { + /* Parse all voltages contained in one register */ + for (uint16_t c = 0u; c < ADI_MAX_NUMBER_OF_VOLTAGES_IN_REGISTER; c++) { + /* Set raw data, corresponds to a cell voltage of 1884mV */ + uint8_t bufferMSB = 0x0Au; + uint8_t bufferLSB = 0x01u; + /* Set receive buffer with raw data */ + adi_dataReceive[(ADI_RAW_VOLTAGE_SIZE_IN_BYTES * c) + (m * ADI_MAX_REGISTER_SIZE_IN_BYTES) + 1u] = + bufferMSB; + adi_dataReceive[(ADI_RAW_VOLTAGE_SIZE_IN_BYTES * c) + (m * ADI_MAX_REGISTER_SIZE_IN_BYTES)] = + bufferLSB; + } + } + /* Reset cell voltage values */ + for (uint16_t m = 0u; m < BS_NR_OF_MODULES_PER_STRING; m++) { + for (uint8_t cb = 0u; cb < BS_NR_OF_CELL_BLOCKS_PER_MODULE; cb++) { + pVoltageTable->cellVoltage_mV[s][m][cb] = 0; + } + } + /* Set PEC error flags */ + for (uint16_t m = 0; m < BS_NR_OF_MODULES_PER_STRING; m++) { + adi_stateBase.data.errorTable->crcIsOk[s][m] = false; + } + /* Save buffer to store location */ + TEST_ADI_SaveRxToCellVoltageBuffer( + &adi_stateBase, adi_dataReceive, ADI_RESULT_REGISTER_SET_A, storeLocation); + TEST_ADI_SaveRxToCellVoltageBuffer( + &adi_stateBase, adi_dataReceive, ADI_RESULT_REGISTER_SET_B, storeLocation); + TEST_ADI_SaveRxToCellVoltageBuffer( + &adi_stateBase, adi_dataReceive, ADI_RESULT_REGISTER_SET_C, storeLocation); + TEST_ADI_SaveRxToCellVoltageBuffer( + &adi_stateBase, adi_dataReceive, ADI_RESULT_REGISTER_SET_D, storeLocation); + TEST_ADI_SaveRxToCellVoltageBuffer( + &adi_stateBase, adi_dataReceive, ADI_RESULT_REGISTER_SET_E, storeLocation); + TEST_ADI_SaveRxToCellVoltageBuffer( + &adi_stateBase, adi_dataReceive, ADI_RESULT_REGISTER_SET_F, storeLocation); + for (uint16_t m = 0u; m < BS_NR_OF_MODULES_PER_STRING; m++) { + for (uint8_t cb = 0u; cb < BS_NR_OF_CELL_BLOCKS_PER_STRING; cb++) { + /* As PEC error is detected, the values must not be stored */ + TEST_ASSERT_EQUAL(0, pVoltageTable->cellVoltage_mV[s][m][cb]); + } + } + /* Third test: store values */ + /* Prepare voltage data */ + for (uint16_t m = 0u; m < BS_NR_OF_MODULES_PER_STRING; m++) { + /* Parse all voltages contained in one register */ + for (uint16_t c = 0u; c < ADI_MAX_NUMBER_OF_VOLTAGES_IN_REGISTER; c++) { + /* Set raw data, corresponds to a cell voltage of 1884mV */ + uint8_t bufferMSB = 0x0Au; + uint8_t bufferLSB = 0x01u; + /* Set receive buffer with raw data */ + adi_dataReceive + [ADI_COMMAND_AND_PEC_SIZE_IN_BYTES + (ADI_RAW_VOLTAGE_SIZE_IN_BYTES * c) + + (m * (ADI_MAX_REGISTER_SIZE_IN_BYTES + ADI_PEC_SIZE_IN_BYTES)) + 1u] = bufferMSB; + adi_dataReceive + [ADI_COMMAND_AND_PEC_SIZE_IN_BYTES + (ADI_RAW_VOLTAGE_SIZE_IN_BYTES * c) + + (m * (ADI_MAX_REGISTER_SIZE_IN_BYTES + ADI_PEC_SIZE_IN_BYTES))] = bufferLSB; + } + } + /* Reset cell voltage values */ + for (uint16_t m = 0u; m < BS_NR_OF_MODULES_PER_STRING; m++) { + for (uint8_t cb = 0u; cb < BS_NR_OF_CELL_BLOCKS_PER_MODULE; cb++) { + pVoltageTable->cellVoltage_mV[s][m][cb] = 0; + } + } + /* Reset PEC error flags */ + for (uint16_t m = 0; m < BS_NR_OF_MODULES_PER_STRING; m++) { + adi_stateBase.data.errorTable->crcIsOk[s][m] = true; + } + /* Save buffer to store location */ + TEST_ADI_SaveRxToCellVoltageBuffer( + &adi_stateBase, adi_dataReceive, ADI_RESULT_REGISTER_SET_A, storeLocation); + TEST_ADI_SaveRxToCellVoltageBuffer( + &adi_stateBase, adi_dataReceive, ADI_RESULT_REGISTER_SET_B, storeLocation); + TEST_ADI_SaveRxToCellVoltageBuffer( + &adi_stateBase, adi_dataReceive, ADI_RESULT_REGISTER_SET_C, storeLocation); + TEST_ADI_SaveRxToCellVoltageBuffer( + &adi_stateBase, adi_dataReceive, ADI_RESULT_REGISTER_SET_D, storeLocation); + TEST_ADI_SaveRxToCellVoltageBuffer( + &adi_stateBase, adi_dataReceive, ADI_RESULT_REGISTER_SET_E, storeLocation); + TEST_ADI_SaveRxToCellVoltageBuffer( + &adi_stateBase, adi_dataReceive, ADI_RESULT_REGISTER_SET_F, storeLocation); + for (uint16_t m = 0u; m < BS_NR_OF_MODULES_PER_STRING; m++) { + for (uint8_t cb = 0u; cb < BS_NR_OF_CELL_BLOCKS_PER_MODULE; cb++) { + /* Everything OK, the values must be stored */ + TEST_ASSERT_EQUAL(1884, pVoltageTable->cellVoltage_mV[s][m][cb]); + } + } + } + } +} + +/*========== Extern Function Test Cases =====================================*/ +void testADI_GetStoredVoltageIndex(void) { + /* Invalid index */ + TEST_ASSERT_FAIL_ASSERT(ADI_GetStoredVoltageIndex(ADI_MAX_SUPPORTED_CELLS)); + + /* All inputs used, indices must be equal */ + for (uint8_t c = 0u; c < ADI_MAX_SUPPORTED_CELLS; c++) { + TEST_ASSERT_EQUAL(c, ADI_GetStoredVoltageIndex(c)); + } +} + +void testADI_GetVoltages(void) { + /* Invalid pointer */ + TEST_ASSERT_FAIL_ASSERT(ADI_GetVoltages(NULL_PTR, ADI_CELL_VOLTAGE_REGISTER, ADI_CELL_VOLTAGE)); + /* Invalid register type */ + TEST_ASSERT_FAIL_ASSERT(ADI_GetVoltages(&adi_stateBase, ADI_VOLTAGE_REGISTER_TYPE_E_MAX, ADI_CELL_VOLTAGE)); + /* Invalid store location */ + TEST_ASSERT_FAIL_ASSERT( + ADI_GetVoltages(&adi_stateBase, ADI_CELL_VOLTAGE_REGISTER, ADI_VOLTAGE_STORE_LOCATION_E_MAX)); + + /* Test reading of voltages */ + + /* SPI and OS functions are ignored */ + SPI_TransmitDummyByte_IgnoreAndReturn(STD_OK); + SPI_TransmitReceiveDataDma_IgnoreAndReturn(STD_OK); + OS_WaitForNotification_IgnoreAndReturn(OS_SUCCESS); + DATA_BLOCK_CELL_VOLTAGE_s *pVoltageTable = NULL_PTR; + + /* Prepare voltage data to simulate data read from AFE registers */ + for (uint16_t i = 4u; i < ADI_N_BYTES_FOR_DATA_TRANSMISSION; i += 8) { + /* Set raw data, corresponds to a cell voltage of 1884mV */ + uint8_t bufferMSB = 0x0Au; + uint8_t bufferLSB = 0x01u; + /* Set receive buffer with raw data */ + adi_bufferRxPecTest[i] = bufferLSB; + adi_bufferRxPecTest[i + 1u] = bufferMSB; + adi_bufferRxPecTest[i + 2u] = bufferLSB; + adi_bufferRxPecTest[i + 3u] = bufferMSB; + adi_bufferRxPecTest[i + 4u] = bufferLSB; + adi_bufferRxPecTest[i + 5u] = bufferMSB; + /* Two PEC bytes */ + adi_bufferRxPecTest[i + 6u] = 0x00u; + adi_bufferRxPecTest[i + 7u] = 0x2Bu; + } + + for (uint8_t s = 0u; s < BS_NR_OF_STRINGS; s++) { + adi_stateBase.currentString = s; + + for (ADI_VOLTAGE_STORE_LOCATION_e storeLocation = ADI_CELL_VOLTAGE; + storeLocation < ADI_VOLTAGE_STORE_LOCATION_E_MAX; + storeLocation++) { + for (ADI_VOLTAGE_REGISTER_TYPE_e registerType = ADI_CELL_VOLTAGE_REGISTER; + registerType < ADI_VOLTAGE_REGISTER_TYPE_E_MAX; + registerType++) { + switch (storeLocation) { + case ADI_CELL_VOLTAGE: + pVoltageTable = adi_stateBase.data.cellVoltage; + break; + case ADI_AVERAGE_CELL_VOLTAGE: + pVoltageTable = adi_stateBase.data.cellVoltageAverage; + break; + case ADI_FILTERED_CELL_VOLTAGE: + pVoltageTable = adi_stateBase.data.cellVoltageFiltered; + break; + case ADI_REDUNDANT_CELL_VOLTAGE: + pVoltageTable = adi_stateBase.data.cellVoltageRedundant; + break; + case ADI_CELL_VOLTAGE_OPEN_WIRE_EVEN: + pVoltageTable = adi_stateBase.data.cellVoltageOpenWireEven; + break; + case ADI_CELL_VOLTAGE_OPEN_WIRE_ODD: + pVoltageTable = adi_stateBase.data.cellVoltageOpenWireOdd; + break; + case ADI_CELL_VOLTAGE_AVERAGE_OPEN_WIRE: + pVoltageTable = adi_stateBase.data.cellVoltageAverageOpenWire; + break; + case ADI_CELL_VOLTAGE_REDUNDANT_OPEN_WIRE: + pVoltageTable = adi_stateBase.data.cellVoltageRedundantOpenWire; + break; + default: + break; + } + /* Reset cell voltage values */ + for (uint16_t m = 0u; m < BS_NR_OF_MODULES_PER_STRING; m++) { + for (uint8_t cb = 0u; cb < BS_NR_OF_CELL_BLOCKS_PER_MODULE; cb++) { + pVoltageTable->cellVoltage_mV[s][m][cb] = 0; + } + } + /* Reset PEC error flags */ + for (uint16_t m = 0; m < BS_NR_OF_MODULES_PER_STRING; m++) { + adi_stateBase.data.errorTable->crcIsOk[s][m] = true; + } + + /* Now get voltages by reading data (mocked) and storing it to the voltage table */ + ADI_GetVoltages(&adi_stateBase, registerType, storeLocation); + for (uint16_t m = 0u; m < BS_NR_OF_MODULES_PER_STRING; m++) { + for (uint8_t cb = 0u; cb < BS_NR_OF_CELL_BLOCKS_PER_MODULE; cb++) { + /* As cleared values are stored in buffer, they must not be stored in the voltage table */ + TEST_ASSERT_EQUAL(1884, pVoltageTable->cellVoltage_mV[s][m][cb]); + } + } + } + } + } +} diff --git a/tests/unit/app/driver/afe/adi/common/ades183x/api/test_adi_ades183x_afe.c b/tests/unit/app/driver/afe/adi/common/ades183x/api/test_adi_ades183x_afe.c index b5d01e87..19ff3b43 100644 --- a/tests/unit/app/driver/afe/adi/common/ades183x/api/test_adi_ades183x_afe.c +++ b/tests/unit/app/driver/afe/adi/common/ades183x/api/test_adi_ades183x_afe.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_adi_ades183x_afe.c * @author foxBMS Team * @date 2022-12-07 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/afe/adi/common/ades183x/api/test_adi_ades183x_afe_dma.c b/tests/unit/app/driver/afe/adi/common/ades183x/api/test_adi_ades183x_afe_dma.c index cbe91d0f..d13383c7 100644 --- a/tests/unit/app/driver/afe/adi/common/ades183x/api/test_adi_ades183x_afe_dma.c +++ b/tests/unit/app/driver/afe/adi/common/ades183x/api/test_adi_ades183x_afe_dma.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_adi_ades183x_afe_dma.c * @author foxBMS Team * @date 2022-12-07 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/afe/adi/common/ades183x/config/test_adi_ades183x_cfg.c b/tests/unit/app/driver/afe/adi/common/ades183x/config/test_adi_ades183x_cfg.c index f47d842d..e82a7105 100644 --- a/tests/unit/app/driver/afe/adi/common/ades183x/config/test_adi_ades183x_cfg.c +++ b/tests/unit/app/driver/afe/adi/common/ades183x/config/test_adi_ades183x_cfg.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_adi_ades183x_cfg.c * @author foxBMS Team * @date 2022-12-07 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/afe/adi/common/ades183x/pec/test_adi_ades183x_pec.c b/tests/unit/app/driver/afe/adi/common/ades183x/pec/test_adi_ades183x_pec.c index 95d77478..31f8c691 100644 --- a/tests/unit/app/driver/afe/adi/common/ades183x/pec/test_adi_ades183x_pec.c +++ b/tests/unit/app/driver/afe/adi/common/ades183x/pec/test_adi_ades183x_pec.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_adi_ades183x_pec.c * @author foxBMS Team * @date 2022-12-07 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/afe/adi/common/ades183x/test_adi_ades183x.c b/tests/unit/app/driver/afe/adi/common/ades183x/test_adi_ades183x.c index 77211d84..813e1738 100644 --- a/tests/unit/app/driver/afe/adi/common/ades183x/test_adi_ades183x.c +++ b/tests/unit/app/driver/afe/adi/common/ades183x/test_adi_ades183x.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_adi_ades183x.c * @author foxBMS Team * @date 2022-12-07 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/afe/adi/common/ades183x/test_adi_ades183x_buffers.c b/tests/unit/app/driver/afe/adi/common/ades183x/test_adi_ades183x_buffers.c index 353a1b46..b2aac695 100644 --- a/tests/unit/app/driver/afe/adi/common/ades183x/test_adi_ades183x_buffers.c +++ b/tests/unit/app/driver/afe/adi/common/ades183x/test_adi_ades183x_buffers.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_adi_ades183x_buffers.c * @author foxBMS Team * @date 2022-12-07 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/afe/adi/common/ades183x/test_adi_ades183x_commands.c b/tests/unit/app/driver/afe/adi/common/ades183x/test_adi_ades183x_commands.c index 7251b714..b7c2a70b 100644 --- a/tests/unit/app/driver/afe/adi/common/ades183x/test_adi_ades183x_commands.c +++ b/tests/unit/app/driver/afe/adi/common/ades183x/test_adi_ades183x_commands.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_adi_ades183x_commands.c * @author foxBMS Team * @date 2022-12-07 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/afe/adi/common/ades183x/test_adi_ades183x_commands_voltages.c b/tests/unit/app/driver/afe/adi/common/ades183x/test_adi_ades183x_commands_voltages.c index 8d021dbb..add50e52 100644 --- a/tests/unit/app/driver/afe/adi/common/ades183x/test_adi_ades183x_commands_voltages.c +++ b/tests/unit/app/driver/afe/adi/common/ades183x/test_adi_ades183x_commands_voltages.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_adi_ades183x_commands_voltages.c * @author foxBMS Team * @date 2022-12-07 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/afe/adi/common/ades183x/test_adi_ades183x_diagnostic_w.c b/tests/unit/app/driver/afe/adi/common/ades183x/test_adi_ades183x_diagnostic_w.c index 343ceb34..acf798f9 100644 --- a/tests/unit/app/driver/afe/adi/common/ades183x/test_adi_ades183x_diagnostic_w.c +++ b/tests/unit/app/driver/afe/adi/common/ades183x/test_adi_ades183x_diagnostic_w.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_adi_ades183x_diagnostic_w.c * @author foxBMS Team * @date 2023-10-09 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/afe/adi/common/ades183x/test_adi_ades183x_helpers.c b/tests/unit/app/driver/afe/adi/common/ades183x/test_adi_ades183x_helpers.c index 83ab524d..6e3284cc 100644 --- a/tests/unit/app/driver/afe/adi/common/ades183x/test_adi_ades183x_helpers.c +++ b/tests/unit/app/driver/afe/adi/common/ades183x/test_adi_ades183x_helpers.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_adi_ades183x_helpers.c * @author foxBMS Team * @date 2022-12-07 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/afe/adi/common/ades183x/test_adi_ades183x_initialization.c b/tests/unit/app/driver/afe/adi/common/ades183x/test_adi_ades183x_initialization.c index b870bb69..57113b64 100644 --- a/tests/unit/app/driver/afe/adi/common/ades183x/test_adi_ades183x_initialization.c +++ b/tests/unit/app/driver/afe/adi/common/ades183x/test_adi_ades183x_initialization.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_adi_ades183x_initialization.c * @author foxBMS Team * @date 2022-12-07 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/afe/adi/common/ades183x/test_adi_ades183x_temperatures.c b/tests/unit/app/driver/afe/adi/common/ades183x/test_adi_ades183x_temperatures.c index 3b3ebbbd..85110435 100644 --- a/tests/unit/app/driver/afe/adi/common/ades183x/test_adi_ades183x_temperatures.c +++ b/tests/unit/app/driver/afe/adi/common/ades183x/test_adi_ades183x_temperatures.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_adi_ades183x_temperatures.c * @author foxBMS Team * @date 2022-12-07 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/afe/adi/common/ades183x/test_adi_ades183x_voltages.c b/tests/unit/app/driver/afe/adi/common/ades183x/test_adi_ades183x_voltages.c index 2183fec5..3c9c7d7f 100644 --- a/tests/unit/app/driver/afe/adi/common/ades183x/test_adi_ades183x_voltages.c +++ b/tests/unit/app/driver/afe/adi/common/ades183x/test_adi_ades183x_voltages.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_adi_ades183x_voltages.c * @author foxBMS Team * @date 2022-12-07 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/afe/api/test_afe_plausibility.c b/tests/unit/app/driver/afe/api/test_afe_plausibility.c index 78d99eb0..5421d64d 100644 --- a/tests/unit/app/driver/afe/api/test_afe_plausibility.c +++ b/tests/unit/app/driver/afe/api/test_afe_plausibility.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_afe_plausibility.c * @author foxBMS Team * @date 2020-07-13 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/afe/debug/can/api/test_debug_can_afe.c b/tests/unit/app/driver/afe/debug/can/api/test_debug_can_afe.c new file mode 100644 index 00000000..ad5010e7 --- /dev/null +++ b/tests/unit/app/driver/afe/debug/can/api/test_debug_can_afe.c @@ -0,0 +1,123 @@ +/** + * + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * We kindly request you to use one or more of the following phrases to refer to + * foxBMS in your hardware, software, documentation or advertising materials: + * + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" + * + */ + +/** + * @file test_debug_can_afe.c + * @author foxBMS Team + * @date 2020-05-25 (date of creation) + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup UNIT_TEST_IMPLEMENTATION + * @prefix TEST + * + * @brief Test of the debug_can_afe.c module + * + */ + +/*========== Includes =======================================================*/ + +#include "unity.h" +#include "Mockdatabase.h" +#include "Mockdebug_can.h" + +#include "afe.h" + +/*========== Unit Testing Framework Directives ==============================*/ +TEST_SOURCE_FILE("debug_can_afe.c") + +TEST_INCLUDE_PATH("../../src/app/driver/afe/api") +TEST_INCLUDE_PATH("../../src/app/driver/afe/debug/can") +TEST_INCLUDE_PATH("../../src/app/engine/database") + +/*========== Definitions and Implementations for Unit Test ==================*/ + +/*========== Setup and Teardown =============================================*/ +void setUp(void) { +} + +void tearDown(void) { +} + +/*========== Test Cases =====================================================*/ +void testAFE_TriggerIcAlwaysOk(void) { + DECAN_TriggerAfe_ExpectAndReturn(STD_OK); + TEST_ASSERT_EQUAL(STD_OK, AFE_TriggerIc()); +} + +void testAFE_InitializeDummy(void) { + DECAN_Initialize_ExpectAndReturn(STD_OK); + TEST_ASSERT_EQUAL(STD_OK, AFE_Initialize()); +} + +void testAFE_StartMeasurement(void) { + TEST_ASSERT_EQUAL(STD_OK, AFE_StartMeasurement()); +} + +void testAFE_IsFirstMeasurementCycleFinished(void) { + TEST_ASSERT_EQUAL(true, AFE_IsFirstMeasurementCycleFinished()); +} + +void testAFE_RequestIoWrite(void) { + TEST_ASSERT_EQUAL(STD_OK, AFE_RequestIoWrite(0)); +} +void testAFE_RequestIoRead(void) { + TEST_ASSERT_EQUAL(STD_OK, AFE_RequestIoRead(0)); +} + +void testAFE_RequestTemperatureRead(void) { + TEST_ASSERT_EQUAL(STD_OK, AFE_RequestTemperatureRead(0)); +} + +void testAFE_RequestBalancingFeedbackRead(void) { + TEST_ASSERT_EQUAL(STD_OK, AFE_RequestBalancingFeedbackRead(0)); +} + +void testAFE_RequestEepromRead(void) { + TEST_ASSERT_EQUAL(STD_OK, AFE_RequestEepromRead(0)); +} + +void testAFE_RequestEepromWrite(void) { + TEST_ASSERT_EQUAL(STD_OK, AFE_RequestEepromWrite(0)); +} + +void testAFE_RequestOpenWireCheck(void) { + TEST_ASSERT_EQUAL(STD_OK, AFE_RequestOpenWireCheck(0)); +} diff --git a/tests/unit/app/driver/afe/debug/can/api/test_debug_can_afe_dma.c b/tests/unit/app/driver/afe/debug/can/api/test_debug_can_afe_dma.c new file mode 100644 index 00000000..feaa608f --- /dev/null +++ b/tests/unit/app/driver/afe/debug/can/api/test_debug_can_afe_dma.c @@ -0,0 +1,82 @@ +/** + * + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * We kindly request you to use one or more of the following phrases to refer to + * foxBMS in your hardware, software, documentation or advertising materials: + * + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" + * + */ + +/** + * @file test_debug_can_afe_dma.c + * @author foxBMS Team + * @date 2020-06-10 (date of creation) + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup UNIT_TEST_IMPLEMENTATION + * @prefix TEST + * + * @brief Test of the debug_can_afe_dma.c module + * + */ + +/*========== Includes =======================================================*/ +#include "unity.h" +#include "Mockdebug_can.h" +#include "Mockfassert.h" + +#include "afe_dma.h" + +/*========== Unit Testing Framework Directives ==============================*/ +TEST_SOURCE_FILE("debug_can_afe_dma.c") + +TEST_INCLUDE_PATH("../../src/app/driver/afe/api") +TEST_INCLUDE_PATH("../../src/app/driver/afe/debug/can") +TEST_INCLUDE_PATH("../../src/app/driver/config") + +/*========== Definitions and Implementations for Unit Test ==================*/ + +/*========== Setup and Teardown =============================================*/ +void setUp(void) { +} + +void tearDown(void) { +} + +/*========== Test Cases =====================================================*/ + +void testAFE_DmaCallback(void) { + AFE_DmaCallback(0); +} diff --git a/tests/unit/app/driver/afe/debug/can/test_debug_can.c b/tests/unit/app/driver/afe/debug/can/test_debug_can.c new file mode 100644 index 00000000..686e6976 --- /dev/null +++ b/tests/unit/app/driver/afe/debug/can/test_debug_can.c @@ -0,0 +1,323 @@ +/** + * + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * We kindly request you to use one or more of the following phrases to refer to + * foxBMS in your hardware, software, documentation or advertising materials: + * + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" + * + */ + +/** + * @file test_debug_can.c + * @author foxBMS Team + * @date 2020-09-17 (date of creation) + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup UNIT_TEST_IMPLEMENTATION + * @prefix TEST + * + * @brief Test of the debug_can.c module + * + */ + +/*========== Includes =======================================================*/ +#include "unity.h" +#include "Mockcan_helper.h" +#include "Mockdatabase.h" +#include "Mockdatabase_cfg.h" +#include "Mockftask.h" +#include "Mockos.h" + +#include "can_cfg_rx-message-definitions.h" +#include "debug_can.h" +#include "fstd_types.h" +#include "test_assert_helper.h" + +#include +#include +#include + +/*========== Unit Testing Framework Directives ==============================*/ +TEST_SOURCE_FILE("debug_can.c") + +TEST_INCLUDE_PATH("../../src/app/driver/afe/api") +TEST_INCLUDE_PATH("../../src/app/driver/afe/debug/can") +TEST_INCLUDE_PATH("../../src/app/driver/can") +TEST_INCLUDE_PATH("../../src/app/driver/can/cbs") +TEST_INCLUDE_PATH("../../src/app/driver/config") +TEST_INCLUDE_PATH("../../src/app/driver/rtc") +TEST_INCLUDE_PATH("../../src/app/engine/config") +TEST_INCLUDE_PATH("../../src/app/engine/database") +TEST_INCLUDE_PATH("../../src/app/task/config") +TEST_INCLUDE_PATH("../../src/app/task/ftask") + +/*========== Definitions and Implementations for Unit Test ==================*/ +OS_QUEUE ftsk_canToAfeCellVoltagesQueue; +OS_QUEUE ftsk_canToAfeCellTemperaturesQueue; + +/*========== Setup and Teardown =============================================*/ +void setUp(void) { +} + +void tearDown(void) { +} + +/*========== Test Cases =====================================================*/ + +/*========== Externalized Static Function Test Cases ========================*/ + +/** + * @brief Testing static function modified modulo + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/2: a=0, b=1; assert; + * - AT2/2: a=1, b=0; assert; + * - Routine validation: + * - RT1/3: a=1, b=1; c=1; + * - RT2/3: a=1, b=2; c=1; + * - RT3/3: a=2, b=2; c=2; + */ +void testModified_modulo(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/2: a=0, b=1; assert */ + uint16_t a = 0; + uint16_t b = 1; + TEST_ASSERT_FAIL_ASSERT(TEST_DECAN_ModifiedModuloFunction(a, b)); + + /* ======= AT2/2: a=1, b=0; assert */ + a = 1; + b = 0; + TEST_ASSERT_FAIL_ASSERT(TEST_DECAN_ModifiedModuloFunction(a, b)); + + /* ======= Routine tests =============================================== */ + /* ======= RT1/3: a=1, b=1; c=1 */ + a = 1; + b = 1; + TEST_ASSERT_EQUAL_INT16(1, TEST_DECAN_ModifiedModuloFunction(a, b)); + + /* ======= RT2/3: a=1, b=2; c=1 */ + a = 1; + b = 2; + TEST_ASSERT_EQUAL_INT16(1, TEST_DECAN_ModifiedModuloFunction(a, b)); + + /* ======= RT3/3: a=2, b=2; c=2 */ + a = 2; + b = 2; + TEST_ASSERT_EQUAL_INT16(2, TEST_DECAN_ModifiedModuloFunction(a, b)); +} + +/** + * @brief Testing static function DECAN_ConvertIndexForVoltage + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/1: oneNumIdxOfVoltage = BS_NR_OF_STRINGS * BS_NR_OF_MODULES_PER_STRING * + * BS_NR_OF_CELL_BLOCKS_PER_MODULE; assert; + * - Routine validation: + * - RT1/5: oneNumIdxOfVoltage=0; s=0, m=0, cb=0; + * - RT2/5: oneNumIdxOfVoltage=BS_NR_OF_CELL_BLOCKS_PER_MODULE-1; + * s=0, m=0, cb=BS_NR_OF_CELL_BLOCKS_PER_MODULE-1; + * - RT3/5: oneNumIdxOfVoltage=BS_NR_OF_CELL_BLOCKS_PER_MODULE; s=0, m=1, cb=0; + * - RT4/5: oneNumIdxOfVoltage=BS_NR_OF_CELL_BLOCKS_PER_MODULE; + * s=0, m=BS_NR_OF_MODULES_PER_STRING-1, cb=BS_NR_OF_CELL_BLOCKS_PER_MODULE-1; + * - RT5/5: oneNumIdxOfVoltage=BS_NR_OF_MODULES_PER_STRING*BS_NR_OF_CELL_BLOCKS_PER_MODULE; s=1, m=0, cb=0; + */ +void testDECAN_ConvertIndexForVoltage(void) { + uint16_t s = 0; + uint16_t m = 0; + uint16_t cb = 0; + uint16_t oneNumIdxOfVoltage = 0; + + /* Because the following test requires: number of strings > 1; + number of modules per string > 1; To ensure the test can be run, + the defines will be checked first */ + TEST_ASSERT_EQUAL_INT16(4, BS_NR_OF_MODULES_PER_STRING); + TEST_ASSERT_EQUAL_INT16(2, BS_NR_OF_STRINGS); + TEST_ASSERT_EQUAL_INT16(18, BS_NR_OF_CELL_BLOCKS_PER_MODULE); + + /* ======= Assertion tests ============================================= */ + /* ======= AT1/1: Assertion Test of the beyond-upper-boundary case */ + oneNumIdxOfVoltage = BS_NR_OF_STRINGS * BS_NR_OF_MODULES_PER_STRING * BS_NR_OF_CELL_BLOCKS_PER_MODULE; + TEST_ASSERT_FAIL_ASSERT(TEST_DECAN_ConvertIndexForVoltage(&s, &m, &cb, oneNumIdxOfVoltage)); + + /* ======= Routine tests =============================================== */ + /* ======= RT1/5: oneNumIdxOfVoltage=0; s=0, m=0, cb=0 */ + oneNumIdxOfVoltage = 0; + TEST_DECAN_ConvertIndexForVoltage(&s, &m, &cb, oneNumIdxOfVoltage); + TEST_ASSERT_EQUAL_INT16(0, s); + TEST_ASSERT_EQUAL_INT16(0, m); + TEST_ASSERT_EQUAL_INT16(0, cb); + + /* ======= RT2/5: oneNumIdxOfVoltage=BS_NR_OF_CELL_BLOCKS_PER_MODULE; + s=0, m=0, cb=BS_NR_OF_CELL_BLOCKS_PER_MODULE - 1 */ + oneNumIdxOfVoltage = BS_NR_OF_CELL_BLOCKS_PER_MODULE - 1; + TEST_DECAN_ConvertIndexForVoltage(&s, &m, &cb, oneNumIdxOfVoltage); + TEST_ASSERT_EQUAL_INT16(0, s); + TEST_ASSERT_EQUAL_INT16(0, m); + TEST_ASSERT_EQUAL_INT16(BS_NR_OF_CELL_BLOCKS_PER_MODULE - 1, cb); + + /* ======= RT3/5: oneNumIdxOfVoltage=BS_NR_OF_CELL_BLOCKS_PER_MODULE; + s=0, m=1, cb=0 */ + oneNumIdxOfVoltage = BS_NR_OF_CELL_BLOCKS_PER_MODULE; + TEST_DECAN_ConvertIndexForVoltage(&s, &m, &cb, oneNumIdxOfVoltage); + TEST_ASSERT_EQUAL_INT16(0, s); + TEST_ASSERT_EQUAL_INT16(1, m); + TEST_ASSERT_EQUAL_INT16(0, cb); + + /* ======= RT4/5: oneNumIdxOfVoltage=BS_NR_OF_CELL_BLOCKS_PER_MODULE; + s=0, m=BS_NR_OF_MODULES_PER_STRING-1, cb=BS_NR_OF_CELL_BLOCKS_PER_MODULE-1 */ + oneNumIdxOfVoltage = BS_NR_OF_MODULES_PER_STRING * BS_NR_OF_CELL_BLOCKS_PER_MODULE - 1; + TEST_DECAN_ConvertIndexForVoltage(&s, &m, &cb, oneNumIdxOfVoltage); + TEST_ASSERT_EQUAL_INT16(0, s); + TEST_ASSERT_EQUAL_INT16(BS_NR_OF_MODULES_PER_STRING - 1, m); + TEST_ASSERT_EQUAL_INT16(BS_NR_OF_CELL_BLOCKS_PER_MODULE - 1, cb); + + /* ======= RT5/5: BS_NR_OF_MODULES_PER_STRING*BS_NR_OF_CELL_BLOCKS_PER_MODULE; + s=1, m=0, cb=0 */ + oneNumIdxOfVoltage = BS_NR_OF_MODULES_PER_STRING * BS_NR_OF_CELL_BLOCKS_PER_MODULE; + TEST_DECAN_ConvertIndexForVoltage(&s, &m, &cb, oneNumIdxOfVoltage); + TEST_ASSERT_EQUAL_INT16(1, s); + TEST_ASSERT_EQUAL_INT16(0, m); + TEST_ASSERT_EQUAL_INT16(0, cb); +} + +/** + * @brief Testing static function DECAN_ConvertIndexForTemperature + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/1: oneNumIdxOfTemperature = BS_NR_OF_STRINGS * BS_NR_OF_MODULES_PER_STRING * + * BS_NR_OF_TEMP_SENSORS_PER_MODULE; assert; + * - Routine validation: + * - RT1/5: oneNumIdxOfTemperature=0; s=0, m=0, ts=0; + * - RT2/5: oneNumIdxOfTemperature=BS_NR_OF_TEMP_SENSORS_PER_MODULE; + * s=0, m=0, ts=BS_NR_OF_TEMP_SENSORS_PER_MODULE-1 + * - RT3/5: oneNumIdxOfTemperature=BS_NR_OF_TEMP_SENSORS_PER_MODULE; s=0, m=1, ts=0; + * - RT4/5: oneNumIdxOfTemperature=BS_NR_OF_MODULES_PER_STRING * BS_NR_OF_TEMP_SENSORS_PER_MODULE; + * s=0, m=BS_NR_OF_MODULES_PER_STRING-1, ts=BS_NR_OF_TEMP_SENSORS_PER_MODULE-1 + * - RT5/5: oneNumIdxOfTemperature=BS_NR_OF_MODULES_PER_STRING*BS_NR_OF_TEMP_SENSORS_PER_MODULE; s=1, m=0, + * ts=0; + */ +void testDECAN_ConvertIndexForTemperature(void) { + uint16_t s = 0; + uint16_t m = 0; + uint16_t ts = 0; + uint16_t oneNumIdxOfTemperature = 0; + + /* ======= Assertion tests ============================================= */ + /* ======= AT1/1: Assertion Test of the beyond-upper-boundary case */ + oneNumIdxOfTemperature = BS_NR_OF_STRINGS * BS_NR_OF_MODULES_PER_STRING * BS_NR_OF_TEMP_SENSORS_PER_MODULE; + TEST_ASSERT_FAIL_ASSERT(TEST_DECAN_ConvertIndexForTemperature(&s, &m, &ts, oneNumIdxOfTemperature)); + + /* ======= Routine tests =============================================== */ + /* ======= RT1/5: oneNumIdxOfTemperature=0; s=0, m=0, ts=0 */ + oneNumIdxOfTemperature = 0; + TEST_DECAN_ConvertIndexForTemperature(&s, &m, &ts, oneNumIdxOfTemperature); + TEST_ASSERT_EQUAL_INT16(0, s); + TEST_ASSERT_EQUAL_INT16(0, m); + TEST_ASSERT_EQUAL_INT16(0, ts); + + /* ======= RT2/5: oneNumIdxOfTemperature=BS_NR_OF_TEMP_SENSORS_PER_MODULE; + s=0, m=0, ts=BS_NR_OF_TEMP_SENSORS_PER_MODULE-1 */ + oneNumIdxOfTemperature = BS_NR_OF_TEMP_SENSORS_PER_MODULE - 1; + TEST_DECAN_ConvertIndexForTemperature(&s, &m, &ts, oneNumIdxOfTemperature); + TEST_ASSERT_EQUAL_INT16(0, s); + TEST_ASSERT_EQUAL_INT16(0, m); + TEST_ASSERT_EQUAL_INT16(BS_NR_OF_TEMP_SENSORS_PER_MODULE - 1, ts); + + /* ======= RT3/5: oneNumIdxOfTemperature=BS_NR_OF_TEMP_SENSORS_PER_MODULE; + s=0, m=1, ts=0 */ + oneNumIdxOfTemperature = BS_NR_OF_TEMP_SENSORS_PER_MODULE; + TEST_DECAN_ConvertIndexForTemperature(&s, &m, &ts, oneNumIdxOfTemperature); + TEST_ASSERT_EQUAL_INT16(0, s); + TEST_ASSERT_EQUAL_INT16(1, m); + TEST_ASSERT_EQUAL_INT16(0, ts); + + /* ======= RT4/5: oneNumIdxOfTemperature=BS_NR_OF_MODULES_PER_STRING * BS_NR_OF_TEMP_SENSORS_PER_MODULE; + s=0, m=BS_NR_OF_MODULES_PER_STRING-1, ts=BS_NR_OF_TEMP_SENSORS_PER_MODULE-1 */ + oneNumIdxOfTemperature = BS_NR_OF_MODULES_PER_STRING * BS_NR_OF_TEMP_SENSORS_PER_MODULE - 1; + TEST_DECAN_ConvertIndexForTemperature(&s, &m, &ts, oneNumIdxOfTemperature); + TEST_ASSERT_EQUAL_INT16(0, s); + TEST_ASSERT_EQUAL_INT16(BS_NR_OF_MODULES_PER_STRING - 1, m); + TEST_ASSERT_EQUAL_INT16(BS_NR_OF_TEMP_SENSORS_PER_MODULE - 1, ts); + + /* ======= RT5/5: BS_NR_OF_MODULES_PER_STRING*BS_NR_OF_TEMP_SENSORS_PER_MODULE; + s=1, m=0, ts=0 */ + oneNumIdxOfTemperature = BS_NR_OF_MODULES_PER_STRING * BS_NR_OF_TEMP_SENSORS_PER_MODULE; + TEST_DECAN_ConvertIndexForTemperature(&s, &m, &ts, oneNumIdxOfTemperature); + TEST_ASSERT_EQUAL_INT16(1, s); + TEST_ASSERT_EQUAL_INT16(0, m); + TEST_ASSERT_EQUAL_INT16(0, ts); +} + +/** + * @brief Testing static function DECAN_ReceiveCanCellVoltages + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/1: if function can be successfully run or not; + */ +void testDECAN_ReceiveCanCellVoltages(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/1: test if the function can be successfully run or not */ + uint64_t messageData = 0u; + OS_ReceiveFromQueue_ExpectAndReturn( + ftsk_canToAfeCellVoltagesQueue, &messageData, DECAN_CAN2AFE_QUEUE_TIMEOUT_MS, OS_SUCCESS); + for (uint8_t i = 0; i < CAN_NUM_OF_VOLTAGES_IN_CAN_CELL_VOLTAGES_MSG * 2 + 1; i++) { + CAN_RxGetSignalDataFromMessageData_Ignore(); + } + DATA_Write1DataBlock_IgnoreAndReturn(STD_OK); + DATA_Read1DataBlock_IgnoreAndReturn(STD_OK); + DATA_Write1DataBlock_IgnoreAndReturn(STD_OK); + TEST_ASSERT_EQUAL(STD_OK, TEST_DECAN_ReceiveCanCellVoltages()); +} + +/** + * @brief Testing static function DECAN_ReceiveCanCellVoltages + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/1: if function can be successfully run or not; + */ +void testDECAN_ReceiveCanCellTemperatures(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/1: test if the function can be successfully run or not */ + uint64_t messageData = 0u; + OS_ReceiveFromQueue_ExpectAndReturn( + ftsk_canToAfeCellTemperaturesQueue, &messageData, DECAN_CAN2AFE_QUEUE_TIMEOUT_MS, OS_SUCCESS); + for (uint8_t i = 0; i < CAN_NUM_OF_VOLTAGES_IN_CAN_CELL_VOLTAGES_MSG * 2 + 1; i++) { + CAN_RxGetSignalDataFromMessageData_Ignore(); + } + DATA_Write1DataBlock_IgnoreAndReturn(STD_OK); + DATA_Read1DataBlock_IgnoreAndReturn(STD_OK); + DATA_Write1DataBlock_IgnoreAndReturn(STD_OK); + TEST_ASSERT_EQUAL(STD_OK, TEST_DECAN_ReceiveCanCellVoltages()); +} diff --git a/tests/unit/app/driver/afe/debug/default/api/test_debug_default_afe.c b/tests/unit/app/driver/afe/debug/default/api/test_debug_default_afe.c index a174e08b..78886cb2 100644 --- a/tests/unit/app/driver/afe/debug/default/api/test_debug_default_afe.c +++ b/tests/unit/app/driver/afe/debug/default/api/test_debug_default_afe.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_debug_default_afe.c * @author foxBMS Team * @date 2020-05-25 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/afe/debug/default/api/test_debug_default_afe_dma.c b/tests/unit/app/driver/afe/debug/default/api/test_debug_default_afe_dma.c index ec3c5b80..9e0c1ba5 100644 --- a/tests/unit/app/driver/afe/debug/default/api/test_debug_default_afe_dma.c +++ b/tests/unit/app/driver/afe/debug/default/api/test_debug_default_afe_dma.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_debug_default_afe_dma.c * @author foxBMS Team * @date 2020-06-10 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/afe/debug/default/test_debug_default.c b/tests/unit/app/driver/afe/debug/default/test_debug_default.c index cec17342..f7d3a348 100644 --- a/tests/unit/app/driver/afe/debug/default/test_debug_default.c +++ b/tests/unit/app/driver/afe/debug/default/test_debug_default.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_debug_default.c * @author foxBMS Team * @date 2020-09-17 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/afe/ltc/6806/config/test_ltc_6806_cfg.c b/tests/unit/app/driver/afe/ltc/6806/config/test_ltc_6806_cfg.c index ec9a3784..a73413f7 100644 --- a/tests/unit/app/driver/afe/ltc/6806/config/test_ltc_6806_cfg.c +++ b/tests/unit/app/driver/afe/ltc/6806/config/test_ltc_6806_cfg.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_ltc_6806_cfg.c * @author foxBMS Team * @date 2020-04-01 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/afe/ltc/6806/test_ltc_6806.c b/tests/unit/app/driver/afe/ltc/6806/test_ltc_6806.c index 006c7a8a..d4cc1d19 100644 --- a/tests/unit/app/driver/afe/ltc/6806/test_ltc_6806.c +++ b/tests/unit/app/driver/afe/ltc/6806/test_ltc_6806.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_ltc_6806.c * @author foxBMS Team * @date 2020-07-13 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * @@ -105,7 +105,7 @@ static spiDAT1_t spi_kLtcDataConfig[BS_NR_OF_STRINGS] = { /** * SPI interface configuration for LTC communication - * This is a list of structs because of multistring + * This is a list of structs because of multi-string */ SPI_INTERFACE_CONFIG_s spi_ltcInterface[BS_NR_OF_STRINGS] = { { diff --git a/tests/unit/app/driver/afe/ltc/6806/test_ltc_6806_pec_in_arrays.c b/tests/unit/app/driver/afe/ltc/6806/test_ltc_6806_pec_in_arrays.c index c5950d52..48f2d246 100644 --- a/tests/unit/app/driver/afe/ltc/6806/test_ltc_6806_pec_in_arrays.c +++ b/tests/unit/app/driver/afe/ltc/6806/test_ltc_6806_pec_in_arrays.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_ltc_6806_pec_in_arrays.c * @author foxBMS Team * @date 2020-12-16 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/afe/ltc/6813-1/config/test_ltc_6813-1_cfg.c b/tests/unit/app/driver/afe/ltc/6813-1/config/test_ltc_6813-1_cfg.c index b3c10e78..686c7bf7 100644 --- a/tests/unit/app/driver/afe/ltc/6813-1/config/test_ltc_6813-1_cfg.c +++ b/tests/unit/app/driver/afe/ltc/6813-1/config/test_ltc_6813-1_cfg.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_ltc_6813-1_cfg.c * @author foxBMS Team * @date 2020-04-01 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * @@ -58,7 +58,11 @@ #include "ltc_6813-1_cfg.h" +#include "test_assert_helper.h" + /*========== Unit Testing Framework Directives ==============================*/ +TEST_SOURCE_FILE("ltc_6813-1_cfg.c") + TEST_INCLUDE_PATH("../../src/app/driver/afe/api") TEST_INCLUDE_PATH("../../src/app/driver/afe/ltc/6813-1/config") TEST_INCLUDE_PATH("../../src/app/driver/afe/ltc/common") @@ -78,5 +82,15 @@ void tearDown(void) { /*========== Test Cases =====================================================*/ -void testDummy(void) { +void testLTC_GetVoltageInputIndexFromCellBlockIndex(void) { + /* Assertion Test 1: Invalid index */ + TEST_ASSERT_FAIL_ASSERT(LTC_GetVoltageInputIndexFromCellBlockIndex(BS_NR_OF_CELL_BLOCKS)); + + /* Assertion Test 2: Valid index */ + TEST_ASSERT_PASS_ASSERT(LTC_GetVoltageInputIndexFromCellBlockIndex(0u)); + + /* Routine test 1: As defined in ltc-6813-1_cfg.c */ + for (uint8_t cb = 0u; cb < BS_NR_OF_CELL_BLOCKS_PER_MODULE; cb++) { + TEST_ASSERT_EQUAL_UINT8(LTC_GetVoltageInputIndexFromCellBlockIndex(cb), cb); + } } diff --git a/tests/unit/app/driver/afe/ltc/6813-1/test_ltc_6813-1.c b/tests/unit/app/driver/afe/ltc/6813-1/test_ltc_6813-1.c index 33f23d9b..ebf2fe7a 100644 --- a/tests/unit/app/driver/afe/ltc/6813-1/test_ltc_6813-1.c +++ b/tests/unit/app/driver/afe/ltc/6813-1/test_ltc_6813-1.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_ltc_6813-1.c * @author foxBMS Team * @date 2020-03-30 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/afe/ltc/6813-1/test_ltc_6813-1_pec_in_arrays.c b/tests/unit/app/driver/afe/ltc/6813-1/test_ltc_6813-1_pec_in_arrays.c index 644482a5..efa19375 100644 --- a/tests/unit/app/driver/afe/ltc/6813-1/test_ltc_6813-1_pec_in_arrays.c +++ b/tests/unit/app/driver/afe/ltc/6813-1/test_ltc_6813-1_pec_in_arrays.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_ltc_6813-1_pec_in_arrays.c * @author foxBMS Team * @date 2020-03-30 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * @@ -150,9 +150,9 @@ void testCommandArrays(void) { TEST_ASSERT_PEC_CORRECT_IN_ARRAY(ltc_cmdADAX_normal_GPIO3); TEST_ASSERT_PEC_CORRECT_IN_ARRAY(ltc_cmdADAX_filtered_GPIO3); TEST_ASSERT_PEC_CORRECT_IN_ARRAY(ltc_cmdADAX_fast_GPIO3); - TEST_ASSERT_PEC_CORRECT_IN_ARRAY(ltc_cmdADAX_normal_ALLGPIOS); - TEST_ASSERT_PEC_CORRECT_IN_ARRAY(ltc_cmdADAX_filtered_ALLGPIOS); - TEST_ASSERT_PEC_CORRECT_IN_ARRAY(ltc_cmdADAX_fast_ALLGPIOS); + TEST_ASSERT_PEC_CORRECT_IN_ARRAY(ltc_cmdADAX_normal_ALL_GPIOS); + TEST_ASSERT_PEC_CORRECT_IN_ARRAY(ltc_cmdADAX_filtered_ALL_GPIOS); + TEST_ASSERT_PEC_CORRECT_IN_ARRAY(ltc_cmdADAX_fast_ALL_GPIOS); TEST_ASSERT_PEC_CORRECT_IN_ARRAY(ltc_BC_cmdADOW_PUP_normal_DCP0); TEST_ASSERT_PEC_CORRECT_IN_ARRAY(ltc_BC_cmdADOW_PDOWN_normal_DCP0); TEST_ASSERT_PEC_CORRECT_IN_ARRAY(ltc_BC_cmdADOW_PUP_filtered_DCP0); diff --git a/tests/unit/app/driver/afe/ltc/api/test_ltc_afe.c b/tests/unit/app/driver/afe/ltc/api/test_ltc_afe.c index bf503d9a..d23e2528 100644 --- a/tests/unit/app/driver/afe/ltc/api/test_ltc_afe.c +++ b/tests/unit/app/driver/afe/ltc/api/test_ltc_afe.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_ltc_afe.c * @author foxBMS Team * @date 2020-05-25 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * @@ -84,8 +84,6 @@ uint8_t ltc_TXPECbuffer[LTC_N_BYTES_FOR_DATA_TRANSMISSION] = {0}; #define BIG_ENDIAN (3u) #define ELEMENT_COUNT (1u) -#define DMAREQEN_BIT (0x10000u) -#define SPIEN_BIT (0x1000000u) #define DMA_REQ_LINE_TX (DMA_REQ_LINE_SPI1_TX) #define DMA_REQ_LINE_RX (DMA_REQ_LINE_SPI1_RX) diff --git a/tests/unit/app/driver/afe/ltc/common/test_ltc_afe_dma.c b/tests/unit/app/driver/afe/ltc/common/test_ltc_afe_dma.c index 286af9b5..e2982210 100644 --- a/tests/unit/app/driver/afe/ltc/common/test_ltc_afe_dma.c +++ b/tests/unit/app/driver/afe/ltc/common/test_ltc_afe_dma.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_ltc_afe_dma.c * @author foxBMS Team * @date 2020-06-10 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * @@ -91,8 +91,6 @@ uint8_t ltc_TXPECbuffer[LTC_N_BYTES_FOR_DATA_TRANSMISSION] = {0}; #define BIG_ENDIAN (3u) #define ELEMENT_COUNT (1u) -#define DMAREQEN_BIT (0x10000u) -#define SPIEN_BIT (0x1000000u) #define DMA_REQ_LINE_TX (DMA_REQ_LINE_SPI1_TX) #define DMA_REQ_LINE_RX (DMA_REQ_LINE_SPI1_RX) @@ -102,11 +100,11 @@ LTC_STATE_s ltc_stateBase = { .statereq = LTC_STATE_NO_REQUEST, .state = LTC_STATEMACH_UNINITIALIZED, .substate = 0, - .laststate = LTC_STATEMACH_UNINITIALIZED, - .lastsubstate = 0, - .adcModereq = LTC_ADCMODE_FAST_DCP0, + .lastState = LTC_STATEMACH_UNINITIALIZED, + .lastSubstate = 0, + .adcModeRequest = LTC_ADCMODE_FAST_DCP0, .adcMode = LTC_ADCMODE_FAST_DCP0, - .adcMeasChreq = LTC_ADCMEAS_UNDEFINED, + .adcMeasChannelRequest = LTC_ADCMEAS_UNDEFINED, .adcMeasCh = LTC_ADCMEAS_UNDEFINED, .numberOfMeasuredMux = 32, .triggerentry = 0, diff --git a/tests/unit/app/driver/afe/ltc/common/test_ltc_pec.c b/tests/unit/app/driver/afe/ltc/common/test_ltc_pec.c index a8a7ad68..6e97ff38 100644 --- a/tests/unit/app/driver/afe/ltc/common/test_ltc_pec.c +++ b/tests/unit/app/driver/afe/ltc/common/test_ltc_pec.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_ltc_pec.c * @author foxBMS Team * @date 2022-11-04 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/afe/maxim/api/test_mxm_afe.c b/tests/unit/app/driver/afe/maxim/api/test_mxm_afe.c index c23310d9..dc814b8b 100644 --- a/tests/unit/app/driver/afe/maxim/api/test_mxm_afe.c +++ b/tests/unit/app/driver/afe/maxim/api/test_mxm_afe.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_mxm_afe.c * @author foxBMS Team * @date 2020-06-17 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/afe/maxim/common/config/test_mxm_cfg.c b/tests/unit/app/driver/afe/maxim/common/config/test_mxm_cfg.c index fd9fc614..573f6a08 100644 --- a/tests/unit/app/driver/afe/maxim/common/config/test_mxm_cfg.c +++ b/tests/unit/app/driver/afe/maxim/common/config/test_mxm_cfg.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_mxm_cfg.c * @author foxBMS Team * @date 2020-06-24 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/afe/maxim/common/test_mxm_17841b.c b/tests/unit/app/driver/afe/maxim/common/test_mxm_17841b.c index a5b87ebf..169ca810 100644 --- a/tests/unit/app/driver/afe/maxim/common/test_mxm_17841b.c +++ b/tests/unit/app/driver/afe/maxim/common/test_mxm_17841b.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_mxm_17841b.c * @author foxBMS Team * @date 2020-06-22 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix MXM * @@ -61,7 +61,7 @@ #include "Mockos.h" #include "mxm_17841b.h" -#include "mxm_bitextract.h" +#include "mxm_bit_extract.h" #include "test_assert_helper.h" #include @@ -148,7 +148,7 @@ void testSetStateRequestInvalidInstancePointer(void) { * #MXM_STATEMACH_41B_INIT. This is check by evaluating the return * value of #MXM_41BSetStateRequest(). */ -void testOnlyAllowedTransitionFromUnitializedIsInit(void) { +void testOnlyAllowedTransitionFromUninitializedIsInitialized(void) { TEST_ASSERT_EQUAL( STD_NOT_OK, MXM_41BSetStateRequest( @@ -247,34 +247,34 @@ void testWriteRegisterFunctionWithLegalValues(void) { TEST_ASSERT_EQUAL((0x10u | (1u << 5u)), mxm_41bState.regConfig2); /* standard state should be third, second, first and zero bit set */ - TEST_ASSERT_EQUAL(0xFu, mxm_41bState.regConfig3); + TEST_ASSERT_EQUAL(0x0Fu, mxm_41bState.regConfig3); /* 0us --> 0 */ TEST_ASSERT_EQUAL( STD_OK, MXM_41BWriteRegisterFunction(&mxm_41bState, MXM_41B_REG_FUNCTION_KEEP_ALIVE, MXM_41B_REG_KEEP_ALIVE_0US)); - TEST_ASSERT_EQUAL(0x0u, mxm_41bState.regConfig3); + TEST_ASSERT_EQUAL(0x00u, mxm_41bState.regConfig3); /* 10us --> 1 */ TEST_ASSERT_EQUAL( STD_OK, MXM_41BWriteRegisterFunction(&mxm_41bState, MXM_41B_REG_FUNCTION_KEEP_ALIVE, MXM_41B_REG_KEEP_ALIVE_10US)); - TEST_ASSERT_EQUAL(0x1u, mxm_41bState.regConfig3); + TEST_ASSERT_EQUAL(0x01u, mxm_41bState.regConfig3); /* 640us --> 0x7 */ TEST_ASSERT_EQUAL( STD_OK, MXM_41BWriteRegisterFunction(&mxm_41bState, MXM_41B_REG_FUNCTION_KEEP_ALIVE, MXM_41B_REG_KEEP_ALIVE_640US)); - TEST_ASSERT_EQUAL(0x7u, mxm_41bState.regConfig3); + TEST_ASSERT_EQUAL(0x07u, mxm_41bState.regConfig3); /* INF DLY --> 0xF */ TEST_ASSERT_EQUAL( STD_OK, MXM_41BWriteRegisterFunction(&mxm_41bState, MXM_41B_REG_FUNCTION_KEEP_ALIVE, MXM_41B_REG_KEEP_ALIVE_INF_DLY)); - TEST_ASSERT_EQUAL(0xFu, mxm_41bState.regConfig3); + TEST_ASSERT_EQUAL(0x0Fu, mxm_41bState.regConfig3); /* standard state should be zero */ - TEST_ASSERT_EQUAL(0x0u, mxm_41bState.regRxIntEnable); + TEST_ASSERT_EQUAL(0x00u, mxm_41bState.regRxIntEnable); /* rx error int on --> 0x80 */ TEST_ASSERT_EQUAL( @@ -284,20 +284,20 @@ void testWriteRegisterFunctionWithLegalValues(void) { /* rx error int off --> 0 */ TEST_ASSERT_EQUAL( STD_OK, MXM_41BWriteRegisterFunction(&mxm_41bState, MXM_41B_REG_FUNCTION_RX_ERROR_INT, MXM_41B_REG_FALSE)); - TEST_ASSERT_EQUAL(0x0u, mxm_41bState.regRxIntEnable); + TEST_ASSERT_EQUAL(0x00u, mxm_41bState.regRxIntEnable); /* standard state should be zero */ - TEST_ASSERT_EQUAL(0x0u, mxm_41bState.regRxIntEnable); + TEST_ASSERT_EQUAL(0x00u, mxm_41bState.regRxIntEnable); /* rx overflow int on --> 0x8 */ TEST_ASSERT_EQUAL( STD_OK, MXM_41BWriteRegisterFunction(&mxm_41bState, MXM_41B_REG_FUNCTION_RX_OVERFLOW_INT, MXM_41B_REG_TRUE)); - TEST_ASSERT_EQUAL(0x8u, mxm_41bState.regRxIntEnable); + TEST_ASSERT_EQUAL(0x08u, mxm_41bState.regRxIntEnable); /* rx overflow int off --> 0 */ TEST_ASSERT_EQUAL( STD_OK, MXM_41BWriteRegisterFunction(&mxm_41bState, MXM_41B_REG_FUNCTION_RX_OVERFLOW_INT, MXM_41B_REG_FALSE)); - TEST_ASSERT_EQUAL(0x0u, mxm_41bState.regRxIntEnable); + TEST_ASSERT_EQUAL(0x00u, mxm_41bState.regRxIntEnable); } /** @} * end of tests for function MXM_41BWriteRegisterFunction */ @@ -570,7 +570,7 @@ void testStateInitNormalFlow(void) { /* next call the timestamp will be checked again, simulate time is up */ OS_CheckTimeHasPassed_ExpectAndReturn(shutdownTimestamp, 0u, true); OS_CheckTimeHasPassed_IgnoreArg_timeToPass_ms(); - /* now the bridge IC should be reenabled */ + /* now the bridge IC should be re-enabled */ MXM_EnableBridgeIc_Expect(); MXM_41BStateMachine(&mxm_41bState); diff --git a/tests/unit/app/driver/afe/maxim/common/test_mxm_1785x.c b/tests/unit/app/driver/afe/maxim/common/test_mxm_1785x.c index d53adc11..1e7af234 100644 --- a/tests/unit/app/driver/afe/maxim/common/test_mxm_1785x.c +++ b/tests/unit/app/driver/afe/maxim/common/test_mxm_1785x.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_mxm_1785x.c * @author foxBMS Team * @date 2020-07-02 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix MXM * @@ -112,14 +112,14 @@ static MXM_MONITORING_INSTANCE_s mxm_instance = { .lsb = 0x00, .msb = 0x00, .deviceAddress = 0x00, - .blocksize = 0, + .blockSize = 0, .model = MXM_MODEL_ID_MAX17852, }, .resultSelfCheck = STD_NOT_OK, .selfCheck = { .crc = STD_NOT_OK, - .conv = STD_NOT_OK, + .conversion = STD_NOT_OK, .firstSetBit = STD_NOT_OK, .extractValueFromRegister = STD_NOT_OK, .parseVoltageReadall = STD_NOT_OK, @@ -161,8 +161,8 @@ void tearDown(void) { } /*========== Test Cases =====================================================*/ -void testMXM_ParseVoltageReadallTest(void) { - TEST_ASSERT_PASS_ASSERT(TEST_ASSERT_EQUAL(STD_OK, TEST_MXM_ParseVoltageReadallTest(&mxm_instance))); +void testMXM_ParseVoltageReadAllTest(void) { + TEST_ASSERT_PASS_ASSERT(TEST_ASSERT_EQUAL(STD_OK, TEST_MXM_ParseVoltageReadAllTest(&mxm_instance))); } /** This test aims to provoke the assertion that checks if the battery system fits the internal configuration */ @@ -178,17 +178,17 @@ void testMXM_ConstructBalancingBufferTest(void) { TEST_ASSERT_PASS_ASSERT(MXM_ConstructBalancingBuffer(&balancingInstance)); } -void testTEST_MXM_ParseVoltageReadallNullPointer(void) { +void testTEST_MXM_ParseVoltageReadAllNullPointer(void) { uint8_t voltRxBuffer = 0; - MXM_DATA_STORAGE_s datastorage = {0}; + MXM_DATA_STORAGE_s dataStorage = {0}; - TEST_ASSERT_FAIL_ASSERT(TEST_MXM_ParseVoltageReadall(NULL_PTR, 0u, &datastorage, 0u)); + TEST_ASSERT_FAIL_ASSERT(TEST_MXM_ParseVoltageReadAll(NULL_PTR, 0u, &dataStorage, 0u)); - TEST_ASSERT_FAIL_ASSERT(TEST_MXM_ParseVoltageReadall(&voltRxBuffer, 0u, NULL_PTR, 0u)); + TEST_ASSERT_FAIL_ASSERT(TEST_MXM_ParseVoltageReadAll(&voltRxBuffer, 0u, NULL_PTR, 0u)); } -void testMXM_ParseVoltageReadallTestNullPointer(void) { - TEST_ASSERT_FAIL_ASSERT(TEST_MXM_ParseVoltageReadallTest(NULL_PTR)); +void testMXM_ParseVoltageReadAllTestNullPointer(void) { + TEST_ASSERT_FAIL_ASSERT(TEST_MXM_ParseVoltageReadAllTest(NULL_PTR)); } void testMXM_ParseVoltagesIntoDBNullPointer(void) { diff --git a/tests/unit/app/driver/afe/maxim/common/test_mxm_1785x_tools.c b/tests/unit/app/driver/afe/maxim/common/test_mxm_1785x_tools.c index 301cfd5d..dd7987b6 100644 --- a/tests/unit/app/driver/afe/maxim/common/test_mxm_1785x_tools.c +++ b/tests/unit/app/driver/afe/maxim/common/test_mxm_1785x_tools.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_mxm_1785x_tools.c * @author foxBMS Team * @date 2020-07-15 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix MXM * diff --git a/tests/unit/app/driver/afe/maxim/common/test_mxm_afe_dma.c b/tests/unit/app/driver/afe/maxim/common/test_mxm_afe_dma.c index e3cca6c2..5c1fb387 100644 --- a/tests/unit/app/driver/afe/maxim/common/test_mxm_afe_dma.c +++ b/tests/unit/app/driver/afe/maxim/common/test_mxm_afe_dma.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_mxm_afe_dma.c * @author foxBMS Team * @date 2020-06-17 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/afe/maxim/common/test_mxm_battery_management.c b/tests/unit/app/driver/afe/maxim/common/test_mxm_battery_management.c index 561d5f8a..8d06cc8d 100644 --- a/tests/unit/app/driver/afe/maxim/common/test_mxm_battery_management.c +++ b/tests/unit/app/driver/afe/maxim/common/test_mxm_battery_management.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_mxm_battery_management.c * @author foxBMS Team * @date 2020-07-02 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix MXM * diff --git a/tests/unit/app/driver/afe/maxim/common/test_mxm_bitextract.c b/tests/unit/app/driver/afe/maxim/common/test_mxm_bit_extract.c similarity index 88% rename from tests/unit/app/driver/afe/maxim/common/test_mxm_bitextract.c rename to tests/unit/app/driver/afe/maxim/common/test_mxm_bit_extract.c index cbd51b2f..64191718 100644 --- a/tests/unit/app/driver/afe/maxim/common/test_mxm_bitextract.c +++ b/tests/unit/app/driver/afe/maxim/common/test_mxm_bit_extract.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,22 +33,22 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ /** - * @file test_mxm_bitextract.c + * @file test_mxm_bit_extract.c * @author foxBMS Team * @date 2020-04-07 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * - * @brief Test for test_mxm_bitextract.c + * @brief Test for test_mxm_bit_extract.c * * @details def * @@ -57,7 +57,7 @@ /*========== Includes =======================================================*/ #include "unity.h" -#include "mxm_bitextract.h" +#include "mxm_bit_extract.h" /*========== Unit Testing Framework Directives ==============================*/ TEST_INCLUDE_PATH("../../src/app/driver/afe/maxim/common") @@ -97,7 +97,7 @@ void testWriteValueTXPreambles(void) { void testWriteValueKeepAlive(void) { uint8_t reg = 0u; - TEST_ASSERT_EQUAL(0xFu, mxm_41bWriteValue(0xFu, 4, MXM_41B_KEEP_ALIVE, reg)); + TEST_ASSERT_EQUAL(0x0Fu, mxm_41bWriteValue(0x0Fu, 4, MXM_41B_KEEP_ALIVE, reg)); } void testWriteValueRXErrorInt(void) { @@ -119,7 +119,7 @@ void testReadValuePositionZero(void) { } void testReadValuePositionZeroWithMoreBits(void) { - uint8_t reg = 0xFu; + uint8_t reg = 0x0Fu; TEST_ASSERT_EQUAL(1u, mxm_41bReadValue(reg, 1, 0)); } @@ -140,7 +140,7 @@ void testReadValueTXPreambles(void) { void testReadValueKeepAlive(void) { uint8_t reg = 0x0Fu; - TEST_ASSERT_EQUAL(0xFu, mxm_41bReadValue(reg, 4, MXM_41B_KEEP_ALIVE)); + TEST_ASSERT_EQUAL(0x0Fu, mxm_41bReadValue(reg, 4, MXM_41B_KEEP_ALIVE)); } void testReadValueKeepAliveOne(void) { @@ -150,7 +150,7 @@ void testReadValueKeepAliveOne(void) { void testReadValueKeepAliveFiveBits(void) { uint8_t reg = 0x1Fu; - TEST_ASSERT_EQUAL(0xFu, mxm_41bReadValue(reg, 4, MXM_41B_KEEP_ALIVE)); + TEST_ASSERT_EQUAL(0x0Fu, mxm_41bReadValue(reg, 4, MXM_41B_KEEP_ALIVE)); } void testReadValueRXError(void) { diff --git a/tests/unit/app/driver/afe/maxim/common/test_mxm_crc8.c b/tests/unit/app/driver/afe/maxim/common/test_mxm_crc8.c index ed3c8c6c..dd409545 100644 --- a/tests/unit/app/driver/afe/maxim/common/test_mxm_crc8.c +++ b/tests/unit/app/driver/afe/maxim/common/test_mxm_crc8.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_mxm_crc8.c * @author foxBMS Team * @date 2020-03-13 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix MXM * diff --git a/tests/unit/app/driver/afe/maxim/common/test_mxm_register_map.c b/tests/unit/app/driver/afe/maxim/common/test_mxm_register_map.c index 9cf127b0..713bfca0 100644 --- a/tests/unit/app/driver/afe/maxim/common/test_mxm_register_map.c +++ b/tests/unit/app/driver/afe/maxim/common/test_mxm_register_map.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_mxm_register_map.c * @author foxBMS Team * @date 2020-04-07 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/afe/maxim/common/test_mxm_registry.c b/tests/unit/app/driver/afe/maxim/common/test_mxm_registry.c index 3fe94bf0..f9b54dbc 100644 --- a/tests/unit/app/driver/afe/maxim/common/test_mxm_registry.c +++ b/tests/unit/app/driver/afe/maxim/common/test_mxm_registry.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_mxm_registry.c * @author foxBMS Team * @date 2020-07-16 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix MXM * @@ -95,14 +95,14 @@ static MXM_MONITORING_INSTANCE_s mxm_state = { .lsb = 0x00, .msb = 0x00, .deviceAddress = 0x00, - .blocksize = 0, + .blockSize = 0, .model = MXM_MODEL_ID_MAX17852, }, .resultSelfCheck = STD_NOT_OK, .selfCheck = { .crc = STD_NOT_OK, - .conv = STD_NOT_OK, + .conversion = STD_NOT_OK, .firstSetBit = STD_NOT_OK, .extractValueFromRegister = STD_NOT_OK, .parseVoltageReadall = STD_NOT_OK, @@ -353,7 +353,7 @@ void testMXM_CheckIfADeviceHasBeenReset(void) { } /** check that invalid values trip #MXM_CheckIfADeviceIsConnected() */ -void testMXM_CheckIfADeviceIsConnectedinvalidValues(void) { +void testMXM_CheckIfADeviceIsConnectedInvalidValues(void) { TEST_ASSERT_FAIL_ASSERT(MXM_CheckIfADeviceIsConnected(NULL_PTR, 0u)); TEST_ASSERT_FAIL_ASSERT(MXM_CheckIfADeviceIsConnected(&mxm_state, MXM_MAXIMUM_NR_OF_MODULES + 1u)); } diff --git a/tests/unit/app/driver/afe/maxim/max17852/test_mxm_17852.c b/tests/unit/app/driver/afe/maxim/max17852/test_mxm_17852.c index f4a14517..73054c17 100644 --- a/tests/unit/app/driver/afe/maxim/max17852/test_mxm_17852.c +++ b/tests/unit/app/driver/afe/maxim/max17852/test_mxm_17852.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_mxm_17852.c * @author foxBMS Team * @date 2021-11-30 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix MXM * @@ -112,14 +112,14 @@ static MXM_MONITORING_INSTANCE_s mxm_instance = { .lsb = 0x00, .msb = 0x00, .deviceAddress = 0x00, - .blocksize = 0, + .blockSize = 0, .model = MXM_MODEL_ID_MAX17852, }, .resultSelfCheck = STD_NOT_OK, .selfCheck = { .crc = STD_NOT_OK, - .conv = STD_NOT_OK, + .conversion = STD_NOT_OK, .firstSetBit = STD_NOT_OK, .extractValueFromRegister = STD_NOT_OK, .parseVoltageReadall = STD_NOT_OK, diff --git a/tests/unit/app/driver/afe/nxp/api/test_nxp_afe.c b/tests/unit/app/driver/afe/nxp/api/test_nxp_afe.c index f69812d5..3f30914f 100644 --- a/tests/unit/app/driver/afe/nxp/api/test_nxp_afe.c +++ b/tests/unit/app/driver/afe/nxp/api/test_nxp_afe.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_nxp_afe.c * @author foxBMS Team * @date 2020-06-10 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/afe/nxp/mc33775a/api/test_nxp_mc33775a_afe.c b/tests/unit/app/driver/afe/nxp/mc33775a/api/test_nxp_mc33775a_afe.c index bd15b33a..342e69b1 100644 --- a/tests/unit/app/driver/afe/nxp/mc33775a/api/test_nxp_mc33775a_afe.c +++ b/tests/unit/app/driver/afe/nxp/mc33775a/api/test_nxp_mc33775a_afe.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_nxp_mc33775a_afe.c * @author foxBMS Team * @date 2020-06-10 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/afe/nxp/mc33775a/config/test_nxp_mc33775a_cfg.c b/tests/unit/app/driver/afe/nxp/mc33775a/config/test_nxp_mc33775a_cfg.c index ca29f41b..a5852867 100644 --- a/tests/unit/app/driver/afe/nxp/mc33775a/config/test_nxp_mc33775a_cfg.c +++ b/tests/unit/app/driver/afe/nxp/mc33775a/config/test_nxp_mc33775a_cfg.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_nxp_mc33775a_cfg.c * @author foxBMS Team * @date 2020-06-10 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/afe/nxp/mc33775a/test_nxp_afe_dma.c b/tests/unit/app/driver/afe/nxp/mc33775a/test_nxp_afe_dma.c index 3d862f21..11636a06 100644 --- a/tests/unit/app/driver/afe/nxp/mc33775a/test_nxp_afe_dma.c +++ b/tests/unit/app/driver/afe/nxp/mc33775a/test_nxp_afe_dma.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_nxp_afe_dma.c * @author foxBMS Team * @date 2020-06-10 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/afe/nxp/mc33775a/test_nxp_mc33775a-ll.c b/tests/unit/app/driver/afe/nxp/mc33775a/test_nxp_mc33775a-ll.c index 9852a414..86fb07bc 100644 --- a/tests/unit/app/driver/afe/nxp/mc33775a/test_nxp_mc33775a-ll.c +++ b/tests/unit/app/driver/afe/nxp/mc33775a/test_nxp_mc33775a-ll.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_nxp_mc33775a-ll.c * @author foxBMS Team * @date 2021-10-20 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/afe/nxp/mc33775a/test_nxp_mc33775a.c b/tests/unit/app/driver/afe/nxp/mc33775a/test_nxp_mc33775a.c index 3f9785f2..339471c4 100644 --- a/tests/unit/app/driver/afe/nxp/mc33775a/test_nxp_mc33775a.c +++ b/tests/unit/app/driver/afe/nxp/mc33775a/test_nxp_mc33775a.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_nxp_mc33775a.c * @author foxBMS Team * @date 2021-10-20 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * @@ -68,10 +68,15 @@ #include "Mockspi.h" #include "MC33775A.h" +#include "foxmath.h" #include "nxp_mc33775a.h" #include "spi_cfg-helper.h" #include "uc_msg_t.h" +/* clang-format off */ +#include "test_assert_helper.h" +/* clang-format on */ + #include #include @@ -84,6 +89,7 @@ TEST_INCLUDE_PATH("../../src/app/driver/afe/nxp/mc33775a/config") TEST_INCLUDE_PATH("../../src/app/driver/afe/nxp/mc33775a/vendor") TEST_INCLUDE_PATH("../../src/app/driver/config") TEST_INCLUDE_PATH("../../src/app/driver/dma") +TEST_INCLUDE_PATH("../../src/app/driver/foxmath") TEST_INCLUDE_PATH("../../src/app/driver/io") TEST_INCLUDE_PATH("../../src/app/driver/rtc") TEST_INCLUDE_PATH("../../src/app/driver/spi") @@ -183,3 +189,290 @@ void tearDown(void) { } /*========== Test Cases =====================================================*/ +void testN775_BalanceControl(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/1 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_N775_BalanceControl(NULL_PTR)); + + /* ======= Routine tests =============================================== */ + DATA_BLOCK_BALANCING_CONTROL_s n775_tableBalancingControl = {.header.uniqueId = DATA_BLOCK_ID_BALANCING_CONTROL}; + + N775_STATE_s n775_testState = { + .currentString = 0u, + .pSpiTxSequence = spi_nxp775InterfaceTx, + .n775Data.balancingControl = &n775_tableBalancingControl, + }; + + /* ======= RT1/1 ======= */ + /* Only test function N775_BalanceControl */ + N775_CommunicationWrite_Ignore(); + DATA_Read1DataBlock_IgnoreAndReturn(STD_OK); + + /* Activate balancing for all cells */ + for (uint8_t s = 0u; s < BS_NR_OF_STRINGS; s++) { + for (uint8_t m = 0u; m < BS_NR_OF_MODULES_PER_STRING; m++) { + for (uint8_t cb = 0u; cb < BS_NR_OF_CELL_BLOCKS_PER_MODULE; cb++) { + n775_testState.n775Data.balancingControl->activateBalancing[s][m][cb] = true; + } + } + } + + for (uint8_t m = 0u; m < BS_NR_OF_MODULES_PER_STRING; m++) { + N775_CommunicationWrite_Ignore(); + } + TEST_ASSERT_PASS_ASSERT(TEST_N775_BalanceControl(&n775_testState)); +} + +void testN775_BalanceSetup(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/1 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_N775_BalanceSetup(NULL_PTR)) +} +void testN775_CaptureMeasurement(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/1 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_N775_CaptureMeasurement(NULL_PTR)); +} +void testN775_Enumerate(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/1 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_N775_Enumerate(NULL_PTR)); +} +void testN775_ErrorHandling(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/1 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_N775_ErrorHandling(NULL_PTR, N775_COMMUNICATION_OK, 0u)); + + /* ======= Routine tests =============================================== */ + N775_ERROR_TABLE_s n775_errorTable = {0}; + + N775_STATE_s n775TestState = { + .currentString = 0u, + .n775Data.errorTable = &n775_errorTable, + }; + + /* ======= RT1/4: Test implementation */ + uint8_t currentModule = 0u; + + n775TestState.n775Data.errorTable->communicationOk[n775TestState.currentString][currentModule] = false; + n775TestState.n775Data.errorTable->noCommunicationTimeout[n775TestState.currentString][currentModule] = false; + n775TestState.n775Data.errorTable->crcIsValid[n775TestState.currentString][currentModule] = false; + /* ======= RT1/4: call function under test */ + TEST_N775_ErrorHandling(&n775TestState, N775_COMMUNICATION_OK, 0u); + /* ======= RT1/4: test output verification */ + TEST_ASSERT_TRUE(n775TestState.n775Data.errorTable->communicationOk[n775TestState.currentString][currentModule]); + TEST_ASSERT_TRUE( + n775TestState.n775Data.errorTable->noCommunicationTimeout[n775TestState.currentString][currentModule]); + TEST_ASSERT_TRUE(n775TestState.n775Data.errorTable->crcIsValid[n775TestState.currentString][currentModule]); + + /* ======= RT2/4: Test implementation */ + n775TestState.n775Data.errorTable->communicationOk[n775TestState.currentString][currentModule] = true; + n775TestState.n775Data.errorTable->noCommunicationTimeout[n775TestState.currentString][currentModule] = true; + n775TestState.n775Data.errorTable->crcIsValid[n775TestState.currentString][currentModule] = true; + /* ======= RT2/4: call function under test */ + TEST_N775_ErrorHandling(&n775TestState, N775_COMMUNICATION_ERROR_SHORT_MESSAGE, 0u); + /* ======= RT2/4: test output verification */ + TEST_ASSERT_FALSE(n775TestState.n775Data.errorTable->communicationOk[n775TestState.currentString][currentModule]); + TEST_ASSERT_TRUE( + n775TestState.n775Data.errorTable->noCommunicationTimeout[n775TestState.currentString][currentModule]); + TEST_ASSERT_TRUE(n775TestState.n775Data.errorTable->crcIsValid[n775TestState.currentString][currentModule]); + + /* ======= RT3/4: Test implementation */ + n775TestState.n775Data.errorTable->communicationOk[n775TestState.currentString][currentModule] = true; + n775TestState.n775Data.errorTable->noCommunicationTimeout[n775TestState.currentString][currentModule] = true; + n775TestState.n775Data.errorTable->crcIsValid[n775TestState.currentString][currentModule] = true; + /* ======= RT3/4: call function under test */ + TEST_N775_ErrorHandling(&n775TestState, N775_COMMUNICATION_ERROR_TIMEOUT, 0u); + /* ======= RT3/4: test output verification */ + TEST_ASSERT_FALSE(n775TestState.n775Data.errorTable->communicationOk[n775TestState.currentString][currentModule]); + TEST_ASSERT_FALSE( + n775TestState.n775Data.errorTable->noCommunicationTimeout[n775TestState.currentString][currentModule]); + TEST_ASSERT_TRUE(n775TestState.n775Data.errorTable->crcIsValid[n775TestState.currentString][currentModule]); + + /* ======= RT4/4: Test implementation */ + n775TestState.n775Data.errorTable->communicationOk[n775TestState.currentString][currentModule] = true; + n775TestState.n775Data.errorTable->noCommunicationTimeout[n775TestState.currentString][currentModule] = true; + n775TestState.n775Data.errorTable->crcIsValid[n775TestState.currentString][currentModule] = true; + /* ======= RT4/4: call function under test */ + TEST_N775_ErrorHandling(&n775TestState, N775_COMMUNICATION_ERROR_WRONG_CRC, 0u); + /* ======= RT4/4: test output verification */ + TEST_ASSERT_FALSE(n775TestState.n775Data.errorTable->communicationOk[n775TestState.currentString][currentModule]); + TEST_ASSERT_TRUE( + n775TestState.n775Data.errorTable->noCommunicationTimeout[n775TestState.currentString][currentModule]); + TEST_ASSERT_FALSE(n775TestState.n775Data.errorTable->crcIsValid[n775TestState.currentString][currentModule]); +} + +void testN775_IncrementMuxIndex(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/1 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_N775_IncrementMuxIndex(NULL_PTR)); + + /* ======= Routine tests =============================================== */ + N775_STATE_s n775TestState = { + .currentString = 0u, + .pMuxSequenceStart = {0}, + .pMuxSequence = {0}, + }; + + /* ======= RT1/2: Test implementation */ + n775TestState.currentMux[n775TestState.currentString] = 0u; + /* ======= RT1/2: call function under test */ + TEST_N775_IncrementMuxIndex(&n775TestState); + /* ======= RT1/2: test output verification */ + /* TODO: assert missing */ + + /* ======= RT2/2: Test implementation */ + n775TestState.currentMux[n775TestState.currentString] = N775_MUX_SEQUENCE_LENGTH; + /* ======= RT2/2: call function under test */ + TEST_N775_IncrementMuxIndex(&n775TestState); + /* ======= RT2/2: test output verification */ + TEST_ASSERT_EQUAL(0u, n775TestState.currentMux[n775TestState.currentString]); +} +void testN775_IncrementStringSequence(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/1 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_N775_IncrementStringSequence(NULL_PTR)); +} +void testN775_Initialize(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/1 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_N775_Initialize(NULL_PTR)); +} +void testN775_InitializeDatabase(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/1 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_N775_InitializeDatabase(NULL_PTR)); +} +void testN775_InitializeI2c(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/1 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_N775_InitializeI2c(NULL_PTR)); +} +void testN775_ResetStringSequence(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/1 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_N775_ResetStringSequence(NULL_PTR)); +} +void testN775_ResetMuxIndex(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/1 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_N775_ResetMuxIndex(NULL_PTR)); +} +void testN775_SetFirstMeasurementCycleFinished(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/1 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_N775_SetFirstMeasurementCycleFinished(NULL_PTR)); + + /* ======= Routine tests =============================================== */ + N775_STATE_s n775TestState = { + .firstMeasurementMade = false, + }; + + /* ======= RT1/2: Test implementation */ + OS_EnterTaskCritical_Expect(); + OS_ExitTaskCritical_Expect(); + /* ======= RT1/2: call function under test */ + TEST_N775_SetFirstMeasurementCycleFinished(&n775TestState); + /* ======= RT1/2: test output verification */ + TEST_ASSERT_TRUE(n775TestState.firstMeasurementMade); +} +void testN775_SetMuxChannel(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/1 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_N775_SetMuxChannel(NULL_PTR)); +} +void testN775_StartMeasurement(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/1 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_N775_StartMeasurement(NULL_PTR)); +} +void testN775_TransmitI2c(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/1 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_N775_TransmitI2c(NULL_PTR)); +} +void testN775_Wait(void) { + const uint32_t waitTime = 1u; + uint32_t currentTime = 2u; + OS_GetTickCount_ExpectAndReturn(currentTime); + OS_DelayTaskUntil_Expect(¤tTime, waitTime); + TEST_N775_Wait(waitTime); +} + +/** + * @brief Testing extern function #N775_I2cRead + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/2: NULL_PTR for pData -> → assert + * - AT2/2: invalid data length -> → assert + * - Routine validation: + * - TODO + */ +void testN775_I2cRead(void) { + /* ======= Assertion tests ============================================= */ + uint8_t data = 0u; + const uint8_t validModuleNumber = 0u; + const uint8_t validDeviceAddress = 0u; + const uint8_t validDataLength = 1u; + const uint8_t invalidDataLengthTooSmall = 0u; + const uint8_t invalidDataLengthTooLarge = 14u; + /* ======= AT1/2 ======= */ + TEST_ASSERT_FAIL_ASSERT(N775_I2cRead(validModuleNumber, validDeviceAddress, NULL_PTR, validDataLength)); + /* ======= AT1/2:1 ===== */ + TEST_ASSERT_FAIL_ASSERT(N775_I2cRead(validModuleNumber, validDeviceAddress, &data, invalidDataLengthTooSmall)); + /* ======= AT1/2:2 ===== */ + TEST_ASSERT_FAIL_ASSERT(N775_I2cRead(validModuleNumber, validDeviceAddress, &data, invalidDataLengthTooLarge)); + /* ======= Routine tests =============================================== */ +} + +void testN775_I2cWrite(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/1 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_N775_TransmitI2c(NULL_PTR)); +} + +/** + * @brief Testing extern function #N775_I2cRead + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/5: NULL_PTR for pDataWrite -> → assert + * - AT2/5: NULL_PTR for pDataRead -> → assert + * - AT3/5: invalid write data length -> → assert + * - AT4/5: invalid read data length -> → assert + * - AT5/5: invalid data length combination -> → assert + * - Routine validation: + * - TODO + */ +void testN775_I2cWriteRead(void) { + /* ======= Assertion tests ============================================= */ + uint8_t writeData = 0u; + uint8_t readData = 0u; + + const uint8_t validModuleNumber = 0u; + const uint8_t validDeviceAddress = 0u; + + /* ======= AT1/5 ======= */ + TEST_ASSERT_FAIL_ASSERT(N775_I2cWriteRead(validModuleNumber, validDeviceAddress, NULL_PTR, 1u, &readData, 1u)); + /* ======= AT2/5 ======= */ + TEST_ASSERT_FAIL_ASSERT(N775_I2cWriteRead(validModuleNumber, validDeviceAddress, &writeData, 1u, NULL_PTR, 1u)); + /* ======= AT3/5 ======= */ + TEST_ASSERT_FAIL_ASSERT(N775_I2cWriteRead(validModuleNumber, validDeviceAddress, &writeData, 0u, &readData, 1u)); + /* ======= AT4/5 ======= */ + TEST_ASSERT_FAIL_ASSERT(N775_I2cWriteRead(validModuleNumber, validDeviceAddress, &writeData, 1u, &readData, 0u)); + /* ======= AT5/5 ======= */ + TEST_ASSERT_FAIL_ASSERT(N775_I2cWriteRead(validModuleNumber, validDeviceAddress, &writeData, 6u, &readData, 7u)); + + /* ======= Routine tests =============================================== */ +} + +void testN775_IsFirstMeasurementCycleFinished(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/1 ======= */ + TEST_ASSERT_FAIL_ASSERT(N775_IsFirstMeasurementCycleFinished(NULL_PTR)); +} + +void testN775_Measure(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/1 ======= */ + TEST_ASSERT_FAIL_ASSERT(N775_Measure(NULL_PTR)); +} diff --git a/tests/unit/app/driver/afe/ti/api/test_ti_afe.c b/tests/unit/app/driver/afe/ti/api/test_ti_afe.c index 406abd45..6715c2e1 100644 --- a/tests/unit/app/driver/afe/ti/api/test_ti_afe.c +++ b/tests/unit/app/driver/afe/ti/api/test_ti_afe.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_ti_afe.c * @author foxBMS Team * @date 2023-09-11 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/afe/ti/common/api/test_ti_bq79xxx_afe_dma.c b/tests/unit/app/driver/afe/ti/common/api/test_ti_bq79xxx_afe_dma.c index b7ae66d1..18dff1b0 100644 --- a/tests/unit/app/driver/afe/ti/common/api/test_ti_bq79xxx_afe_dma.c +++ b/tests/unit/app/driver/afe/ti/common/api/test_ti_bq79xxx_afe_dma.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_ti_bq79xxx_afe_dma.c * @author foxBMS Team * @date 2023-09-11 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/afe/ti/dummy/api/test_ti_dummy_afe.c b/tests/unit/app/driver/afe/ti/dummy/api/test_ti_dummy_afe.c index 342f15bc..912b0ea0 100644 --- a/tests/unit/app/driver/afe/ti/dummy/api/test_ti_dummy_afe.c +++ b/tests/unit/app/driver/afe/ti/dummy/api/test_ti_dummy_afe.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_ti_dummy_afe.c * @author foxBMS Team * @date 2023-09-11 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/afe/ti/dummy/test_ti_dummy.c b/tests/unit/app/driver/afe/ti/dummy/test_ti_dummy.c index 73f538cf..747047b9 100644 --- a/tests/unit/app/driver/afe/ti/dummy/test_ti_dummy.c +++ b/tests/unit/app/driver/afe/ti/dummy/test_ti_dummy.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_ti_dummy.c * @author foxBMS Team * @date 2023-09-11 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/can/cbs/rx/test_can_cbs_rx_aerosol-sensor.c b/tests/unit/app/driver/can/cbs/rx/test_can_cbs_rx_aerosol-sensor.c index 8fdff0ca..32f87537 100644 --- a/tests/unit/app/driver/can/cbs/rx/test_can_cbs_rx_aerosol-sensor.c +++ b/tests/unit/app/driver/can/cbs/rx/test_can_cbs_rx_aerosol-sensor.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_can_cbs_rx_aerosol-sensor.c * @author foxBMS Team * @date 2023-08-31 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * @@ -296,37 +296,37 @@ void testCANRX_AerosolSensor(void) { /* ======= AT1/5 ======= */ CAN_MESSAGE_PROPERTIES_s testMessageInvalidId = { - .id = CAN_MAX_11BIT_ID, /* invalid message id */ - .idType = CANRX_AEROSOL_SENSOR_ID_TYPE, /* valid id type */ - .dlc = CAN_DEFAULT_DLC, /* valid dlc */ - .endianness = CANRX_AEROSOL_SENSOR_ENDIANNESS, /* valid endianness */ + .id = CAN_MAX_11BIT_ID, /* invalid message id */ + .idType = CANRX_BAS_AEROSOL_SENSOR_ID_TYPE, /* valid id type */ + .dlc = CAN_DEFAULT_DLC, /* valid dlc */ + .endianness = CANRX_BAS_AEROSOL_SENSOR_ENDIANNESS, /* valid endianness */ }; TEST_ASSERT_FAIL_ASSERT(CANRX_AerosolSensor(testMessageInvalidId, canData, &can_kShim)); /* ======= AT2/5 ======= */ CAN_MESSAGE_PROPERTIES_s testMessageInvalidIdType = { - .id = CANRX_AEROSOL_SENSOR_ID, /* valid message id */ - .idType = CAN_EXTENDED_IDENTIFIER_29_BIT, /* invalid id type */ - .dlc = CAN_DEFAULT_DLC, /* valid dlc */ - .endianness = CANRX_AEROSOL_SENSOR_ENDIANNESS, /* valid endianness */ + .id = CANRX_BAS_AEROSOL_SENSOR_ID, /* valid message id */ + .idType = CAN_EXTENDED_IDENTIFIER_29_BIT, /* invalid id type */ + .dlc = CAN_DEFAULT_DLC, /* valid dlc */ + .endianness = CANRX_BAS_AEROSOL_SENSOR_ENDIANNESS, /* valid endianness */ }; TEST_ASSERT_FAIL_ASSERT(CANRX_AerosolSensor(testMessageInvalidIdType, canData, &can_kShim)); /* ======= AT3/5 ======= */ CAN_MESSAGE_PROPERTIES_s testMessageInvalidDlc = { - .id = CANRX_AEROSOL_SENSOR_ID, /* valid message id */ - .idType = CANRX_AEROSOL_SENSOR_ID_TYPE, /* valid id type */ - .dlc = CAN_DEFAULT_DLC + 1u, /* invalid dlc */ - .endianness = CANRX_AEROSOL_SENSOR_ENDIANNESS, /* valid endianness */ + .id = CANRX_BAS_AEROSOL_SENSOR_ID, /* valid message id */ + .idType = CANRX_BAS_AEROSOL_SENSOR_ID_TYPE, /* valid id type */ + .dlc = CAN_DEFAULT_DLC + 1u, /* invalid dlc */ + .endianness = CANRX_BAS_AEROSOL_SENSOR_ENDIANNESS, /* valid endianness */ }; TEST_ASSERT_FAIL_ASSERT(CANRX_AerosolSensor(testMessageInvalidDlc, canData, &can_kShim)); /* ======= AT4/5 ======= */ CAN_MESSAGE_PROPERTIES_s validTestMessage = { - .id = CANRX_AEROSOL_SENSOR_ID, /* valid message id */ - .idType = CANRX_AEROSOL_SENSOR_ID_TYPE, /* valid id type */ - .dlc = CAN_DEFAULT_DLC, /* valid dlc */ - .endianness = CANRX_AEROSOL_SENSOR_ENDIANNESS, /* valid endianness */ + .id = CANRX_BAS_AEROSOL_SENSOR_ID, /* valid message id */ + .idType = CANRX_BAS_AEROSOL_SENSOR_ID_TYPE, /* valid id type */ + .dlc = CAN_DEFAULT_DLC, /* valid dlc */ + .endianness = CANRX_BAS_AEROSOL_SENSOR_ENDIANNESS, /* valid endianness */ }; TEST_ASSERT_FAIL_ASSERT(CANRX_AerosolSensor(validTestMessage, NULL_PTR, &can_kShim)); diff --git a/tests/unit/app/driver/can/cbs/rx/test_can_cbs_rx_bms-state-request.c b/tests/unit/app/driver/can/cbs/rx/test_can_cbs_rx_bms-state-request.c index 287504f3..8a487601 100644 --- a/tests/unit/app/driver/can/cbs/rx/test_can_cbs_rx_bms-state-request.c +++ b/tests/unit/app/driver/can/cbs/rx/test_can_cbs_rx_bms-state-request.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_can_cbs_rx_bms-state-request.c * @author foxBMS Team * @date 2021-07-28 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * @@ -58,6 +58,7 @@ #include "Mockbal_cfg.h" #include "Mockbms_cfg.h" #include "Mockcan.h" +#include "Mockcan_helper.h" #include "Mockdatabase.h" #include "Mockdiag.h" #include "Mockfoxmath.h" @@ -69,7 +70,6 @@ #include "can_cbs_rx.h" #include "can_cfg_rx-message-definitions.h" -#include "can_helper.h" #include "test_assert_helper.h" #include @@ -112,6 +112,12 @@ static DATA_BLOCK_AEROSOL_SENSOR_s can_tableAerosolSensor = {.header.uniqueId = OS_QUEUE imd_canDataQueue = NULL_PTR; +uint64_t testSignalData[5u] = {0u, 1u, 2u, 3u, 0x10000u}; + +uint64_t testMessageData = UINT64_MAX; + +uint64_t testMessageDataZero = 0u; + const CAN_SHIM_s can_kShim = { .pQueueImd = &imd_canDataQueue, .pTableCellVoltage = &can_tableCellVoltages, @@ -132,6 +138,8 @@ const CAN_SHIM_s can_kShim = { .pTableAerosolSensor = &can_tableAerosolSensor, }; +uint8_t testCanData[CAN_MAX_DLC] = {0x01u, 0x23u, 0x45u, 0x67u, 0x89u, 0xABu, 0xCDu, 0xEFu}; + /*========== Setup and Teardown =============================================*/ void setUp(void) { can_tableStateRequest.previousStateRequestViaCan = 0u; @@ -144,5 +152,279 @@ void tearDown(void) { } /*========== Test Cases =====================================================*/ -void testDummy(void) { +/** + * @brief Testing CANTX_BmsStateRequest + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/6: message id invalid -> assert + * - AT2/6: message id type invalid -> assert + * - AT3/6: message dlc invalid -> assert + * - AT4/6: message endianness invalid -> assert + * - AT5/6: NULL_PTR for kpkCanData -> assert + * - AT6/6: NULL_PTR for kpkCanShim -> assert + * - Routine validation: + * - RT1/1: All functions are called successfully + */ +void testCANRX_BmsStateRequest(void) { + /* ======= Assertion tests ============================================= */ + CAN_MESSAGE_PROPERTIES_s testMessage = { + .id = CAN_MAX_11BIT_ID, + .idType = CAN_STANDARD_IDENTIFIER_11_BIT, + .dlc = 8u, + .endianness = CAN_BIG_ENDIAN, + }; + /* ======= AT1/6 ======= */ + TEST_ASSERT_FAIL_ASSERT(CANRX_BmsStateRequest(testMessage, testCanData, &can_kShim)); + testMessage.id = CANRX_BMS_STATE_REQUEST_ID; + /* ======= AT2/6 ======= */ + testMessage.idType = CAN_EXTENDED_IDENTIFIER_29_BIT; + TEST_ASSERT_FAIL_ASSERT(CANRX_BmsStateRequest(testMessage, testCanData, &can_kShim)); + testMessage.idType = CAN_STANDARD_IDENTIFIER_11_BIT; + /* ======= AT3/6 ======= */ + testMessage.dlc = 0u; + TEST_ASSERT_FAIL_ASSERT(CANRX_BmsStateRequest(testMessage, testCanData, &can_kShim)); + testMessage.dlc = CAN_MAX_DLC; + /* ======= AT4/6 ======= */ + testMessage.endianness = CAN_LITTLE_ENDIAN; + TEST_ASSERT_FAIL_ASSERT(CANRX_BmsStateRequest(testMessage, testCanData, &can_kShim)); + testMessage.endianness = CAN_BIG_ENDIAN; + /* ======= AT5/6 ======= */ + TEST_ASSERT_FAIL_ASSERT(CANRX_BmsStateRequest(testMessage, NULL_PTR, &can_kShim)); + /* ======= AT6/6 ======= */ + TEST_ASSERT_FAIL_ASSERT(CANRX_BmsStateRequest(testMessage, testCanData, NULL_PTR)); + + /* ======= Routine tests =============================================== */ + /* ======= RT1/1: Test implementation */ + DIAG_Handler_IgnoreAndReturn(DIAG_HANDLER_RETURN_OK); + SYSM_ClearAllTimingViolations_Ignore(); + OS_CheckTimeHasPassed_IgnoreAndReturn(false); + BAL_GetInitializationState_IgnoreAndReturn(STD_OK); + BAL_SetStateRequest_IgnoreAndReturn(BAL_OK); + BAL_SetBalancingThreshold_Ignore(); + + DATA_Read1DataBlock_ExpectAndReturn(can_kShim.pTableStateRequest, STD_OK); + CAN_RxGetMessageDataFromCanData_Expect(&testMessageDataZero, testCanData, CANRX_BMS_STATE_REQUEST_ENDIANNESS); + CAN_RxGetMessageDataFromCanData_ReturnThruPtr_pMessage(&testMessageData); + CAN_RxGetSignalDataFromMessageData_Expect( + testMessageData, 1u, 2u, &testSignalData[0u], CANRX_BMS_STATE_REQUEST_ENDIANNESS); + CAN_RxGetSignalDataFromMessageData_Expect( + testMessageData, 2u, 1u, &testSignalData[0u], CANRX_BMS_STATE_REQUEST_ENDIANNESS); + CAN_RxGetSignalDataFromMessageData_Expect( + testMessageData, 8u, 1u, &testSignalData[0u], CANRX_BMS_STATE_REQUEST_ENDIANNESS); + CAN_RxGetSignalDataFromMessageData_Expect( + testMessageData, 23u, 8u, &testSignalData[0u], CANRX_BMS_STATE_REQUEST_ENDIANNESS); + DATA_Write1DataBlock_ExpectAndReturn(can_kShim.pTableStateRequest, STD_OK); + /* ======= RT1/1: Call function under test */ + uint32_t testResult = CANRX_BmsStateRequest(testMessage, testCanData, &can_kShim); + /* ======= RT1/1: Test output verification */ + TEST_ASSERT_EQUAL(0u, testResult); +} + +/** + * @brief Testing CANRX_ClearAllPersistentFlags + * @details The following cases need to be tested: + * - Argument validation: + * - None + * - Routine validation: + * - RT1/2: No clearing of flags requested + * - RT2/2: Clearing of flags requested 1 String + */ +void testCANRX_ClearAllPersistentFlags(void) { + /* ======= Routine tests =============================================== */ + /* ======= RT1/2: Test implementation */ + CAN_RxGetSignalDataFromMessageData_Expect( + testMessageData, 2u, 1u, &testSignalData[0u], CANRX_BMS_STATE_REQUEST_ENDIANNESS); + CAN_RxGetSignalDataFromMessageData_ReturnThruPtr_pCanSignal(&testSignalData[0u]); + /* ======= RT1/2: Call function under test */ + TEST_CANRX_ClearAllPersistentFlags(testMessageData); + + /* ======= RT2/2: Test implementation */ + CAN_RxGetSignalDataFromMessageData_Expect( + testMessageData, 2u, 1u, &testSignalData[0u], CANRX_BMS_STATE_REQUEST_ENDIANNESS); + CAN_RxGetSignalDataFromMessageData_ReturnThruPtr_pCanSignal(&testSignalData[1u]); + DIAG_Handler_ExpectAndReturn( + DIAG_ID_DEEP_DISCHARGE_DETECTED, DIAG_EVENT_OK, DIAG_STRING, 0u, DIAG_HANDLER_RETURN_OK); + SYSM_ClearAllTimingViolations_Expect(); + /* ======= RT2/2: Call function under test */ + TEST_CANRX_ClearAllPersistentFlags(testMessageData); +} + +/** + * @brief Testing CANRX_HandleModeRequest + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/1: NULL_PTR for kpkCanShim -> assert + * - Routine validation: + * - RT1/7: standby requested + * - RT2/7: discharge requested + * - RT3/7: charge requested + * - RT4/7: invalid request + * - RT5/7: state counter overflow + * - RT6/7: same state as previous; OS_CheckTimeHasPassed returns true + * - RT7/7: same state as previous; OS_CheckTimeHasPassed returns false + */ +void testCANRX_HandleModeRequest(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/1 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANRX_HandleModeRequest(testMessageData, NULL_PTR)); + /* ======= Routine tests =============================================== */ + can_tableStateRequest.previousStateRequestViaCan = BMS_REQ_ID_NOREQ; + can_tableStateRequest.stateCounter = 0u; + /* ======= RT1/7: Test implementation */ + CAN_RxGetSignalDataFromMessageData_Expect( + testMessageData, 1u, 2u, &testSignalData[0u], CANRX_BMS_STATE_REQUEST_ENDIANNESS); + CAN_RxGetSignalDataFromMessageData_ReturnThruPtr_pCanSignal(&testSignalData[0u]); + /* ======= RT1/7: Call function under test */ + TEST_CANRX_HandleModeRequest(testMessageData, &can_kShim); + /* ======= RT1/7: Test output verification */ + TEST_ASSERT_EQUAL(BMS_REQ_ID_NOREQ, can_tableStateRequest.previousStateRequestViaCan); + TEST_ASSERT_EQUAL(BMS_REQ_ID_STANDBY, can_tableStateRequest.stateRequestViaCan); + TEST_ASSERT_EQUAL(BMS_REQ_ID_STANDBY, can_tableStateRequest.stateRequestViaCanPending); + TEST_ASSERT_EQUAL(1u, can_tableStateRequest.stateCounter); + + /* ======= RT2/7: Test implementation */ + CAN_RxGetSignalDataFromMessageData_Expect( + testMessageData, 1u, 2u, &testSignalData[0u], CANRX_BMS_STATE_REQUEST_ENDIANNESS); + CAN_RxGetSignalDataFromMessageData_ReturnThruPtr_pCanSignal(&testSignalData[1u]); + /* ======= RT2/7: Call function under test */ + TEST_CANRX_HandleModeRequest(testMessageData, &can_kShim); + /* ======= RT2/7: Test output verification */ + TEST_ASSERT_EQUAL(BMS_REQ_ID_STANDBY, can_tableStateRequest.previousStateRequestViaCan); + TEST_ASSERT_EQUAL(BMS_REQ_ID_NORMAL, can_tableStateRequest.stateRequestViaCan); + TEST_ASSERT_EQUAL(BMS_REQ_ID_NORMAL, can_tableStateRequest.stateRequestViaCanPending); + TEST_ASSERT_EQUAL(2u, can_tableStateRequest.stateCounter); + + /* ======= RT3/7: Test implementation */ + CAN_RxGetSignalDataFromMessageData_Expect( + testMessageData, 1u, 2u, &testSignalData[0u], CANRX_BMS_STATE_REQUEST_ENDIANNESS); + CAN_RxGetSignalDataFromMessageData_ReturnThruPtr_pCanSignal(&testSignalData[2u]); + /* ======= RT3/7: Call function under test */ + TEST_CANRX_HandleModeRequest(testMessageData, &can_kShim); + /* ======= RT3/7: Test output verification */ + TEST_ASSERT_EQUAL(BMS_REQ_ID_NORMAL, can_tableStateRequest.previousStateRequestViaCan); + TEST_ASSERT_EQUAL(BMS_REQ_ID_CHARGE, can_tableStateRequest.stateRequestViaCan); + TEST_ASSERT_EQUAL(BMS_REQ_ID_CHARGE, can_tableStateRequest.stateRequestViaCanPending); + TEST_ASSERT_EQUAL(3u, can_tableStateRequest.stateCounter); + + /* ======= RT4/7: Test implementation */ + CAN_RxGetSignalDataFromMessageData_Expect( + testMessageData, 1u, 2u, &testSignalData[0u], CANRX_BMS_STATE_REQUEST_ENDIANNESS); + CAN_RxGetSignalDataFromMessageData_ReturnThruPtr_pCanSignal(&testSignalData[3u]); + /* ======= RT4/7: Call function under test */ + TEST_CANRX_HandleModeRequest(testMessageData, &can_kShim); + /* ======= RT4/7: Test output verification */ + TEST_ASSERT_EQUAL(BMS_REQ_ID_CHARGE, can_tableStateRequest.previousStateRequestViaCan); + TEST_ASSERT_EQUAL(BMS_REQ_ID_NOREQ, can_tableStateRequest.stateRequestViaCan); + TEST_ASSERT_EQUAL(BMS_REQ_ID_NOREQ, can_tableStateRequest.stateRequestViaCanPending); + TEST_ASSERT_EQUAL(4u, can_tableStateRequest.stateCounter); + + /* ======= RT5/7: Test implementation */ + can_tableStateRequest.stateCounter = UINT8_MAX; + CAN_RxGetSignalDataFromMessageData_Expect( + testMessageData, 1u, 2u, &testSignalData[0u], CANRX_BMS_STATE_REQUEST_ENDIANNESS); + CAN_RxGetSignalDataFromMessageData_ReturnThruPtr_pCanSignal(&testSignalData[3u]); + OS_CheckTimeHasPassed_ExpectAndReturn(can_tableStateRequest.header.timestamp, 3000u, false); + /* ======= RT5/7: Call function under test */ + TEST_CANRX_HandleModeRequest(testMessageData, &can_kShim); + /* ======= RT5/7: Test output verification */ + TEST_ASSERT_EQUAL(BMS_REQ_ID_NOREQ, can_tableStateRequest.previousStateRequestViaCan); + TEST_ASSERT_EQUAL(BMS_REQ_ID_NOREQ, can_tableStateRequest.stateRequestViaCan); + TEST_ASSERT_EQUAL(BMS_REQ_ID_NOREQ, can_tableStateRequest.stateRequestViaCanPending); + TEST_ASSERT_EQUAL(0u, can_tableStateRequest.stateCounter); + + /* ======= RT6/7: Test implementation */ + can_tableStateRequest.stateRequestViaCan = BMS_REQ_ID_STANDBY; + CAN_RxGetSignalDataFromMessageData_Expect( + testMessageData, 1u, 2u, &testSignalData[0u], CANRX_BMS_STATE_REQUEST_ENDIANNESS); + CAN_RxGetSignalDataFromMessageData_ReturnThruPtr_pCanSignal(&testSignalData[0u]); + OS_CheckTimeHasPassed_ExpectAndReturn(can_tableStateRequest.header.timestamp, 3000u, true); + /* ======= RT6/7: Call function under test */ + TEST_CANRX_HandleModeRequest(testMessageData, &can_kShim); + /* ======= RT6/7: Test output verification */ + TEST_ASSERT_EQUAL(BMS_REQ_ID_STANDBY, can_tableStateRequest.previousStateRequestViaCan); + TEST_ASSERT_EQUAL(BMS_REQ_ID_STANDBY, can_tableStateRequest.stateRequestViaCan); + TEST_ASSERT_EQUAL(BMS_REQ_ID_STANDBY, can_tableStateRequest.stateRequestViaCanPending); + TEST_ASSERT_EQUAL(1u, can_tableStateRequest.stateCounter); + + /* ======= RT7/7: Test implementation */ + can_tableStateRequest.stateRequestViaCan = BMS_REQ_ID_NORMAL; + CAN_RxGetSignalDataFromMessageData_Expect( + testMessageData, 1u, 2u, &testSignalData[0u], CANRX_BMS_STATE_REQUEST_ENDIANNESS); + CAN_RxGetSignalDataFromMessageData_ReturnThruPtr_pCanSignal(&testSignalData[1u]); + OS_CheckTimeHasPassed_ExpectAndReturn(can_tableStateRequest.header.timestamp, 3000u, false); + /* ======= RT7/7: Call function under test */ + TEST_CANRX_HandleModeRequest(testMessageData, &can_kShim); + /* ======= RT7/7: Test output verification */ + TEST_ASSERT_EQUAL(BMS_REQ_ID_NORMAL, can_tableStateRequest.previousStateRequestViaCan); + TEST_ASSERT_EQUAL(BMS_REQ_ID_NORMAL, can_tableStateRequest.stateRequestViaCan); + TEST_ASSERT_EQUAL(BMS_REQ_ID_STANDBY, can_tableStateRequest.stateRequestViaCanPending); + TEST_ASSERT_EQUAL(2u, can_tableStateRequest.stateCounter); +} + +/** + * @brief Testing CANRX_HandleBalancingRequest + * @details The following cases need to be tested: + * - Argument validation: + * - None + * - Routine validation: + * - RT1/3: Disable balancing + * - RT2/3: Enable balancing + * - RT3/3: Balancing not initialized + */ +void testCANRX_HandleBalancingRequest(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/1 ======= */ + /* ======= Routine tests =============================================== */ + /* ======= RT1/3: Test implementation */ + CAN_RxGetSignalDataFromMessageData_Expect( + testMessageData, 8u, 1u, &testSignalData[0u], CANRX_BMS_STATE_REQUEST_ENDIANNESS); + CAN_RxGetSignalDataFromMessageData_ReturnThruPtr_pCanSignal(&testSignalData[0u]); + BAL_GetInitializationState_ExpectAndReturn(STD_OK); + BAL_SetStateRequest_ExpectAndReturn(BAL_STATE_GLOBAL_DISABLE_REQUEST, BAL_OK); + /* ======= RT1/3: Call function under test */ + TEST_CANRX_HandleBalancingRequest(testMessageData); + + /* ======= RT2/3: Test implementation */ + CAN_RxGetSignalDataFromMessageData_Expect( + testMessageData, 8u, 1u, &testSignalData[0u], CANRX_BMS_STATE_REQUEST_ENDIANNESS); + CAN_RxGetSignalDataFromMessageData_ReturnThruPtr_pCanSignal(&testSignalData[1u]); + BAL_GetInitializationState_ExpectAndReturn(STD_OK); + BAL_SetStateRequest_ExpectAndReturn(BAL_STATE_GLOBAL_ENABLE_REQUEST, BAL_OK); + /* ======= RT2/3: Call function under test */ + TEST_CANRX_HandleBalancingRequest(testMessageData); + + /* ======= RT3/3: Test implementation */ + CAN_RxGetSignalDataFromMessageData_Expect( + testMessageData, 8u, 1u, &testSignalData[0u], CANRX_BMS_STATE_REQUEST_ENDIANNESS); + BAL_GetInitializationState_ExpectAndReturn(STD_NOT_OK); + /* ======= RT3/3: Call function under test */ + TEST_CANRX_HandleBalancingRequest(testMessageData); +} + +/** + * @brief Testing + * @details The following cases need to be tested: + * - Argument validation: + * - None + * - Routine validation: + * - RT1/2: Function reads and handles data correctly + * - RT2/2: Requested threshold higher than maximum value + */ +void testCANRX_SetBalancingThreshold(void) { + /* ======= Routine tests =============================================== */ + /* ======= RT1/2: Test implementation */ + CAN_RxGetSignalDataFromMessageData_Expect( + testMessageData, 23u, 8u, &testSignalData[0u], CANRX_BMS_STATE_REQUEST_ENDIANNESS); + CAN_RxGetSignalDataFromMessageData_ReturnThruPtr_pCanSignal(&testSignalData[1u]); + BAL_SetBalancingThreshold_Expect(testSignalData[1u]); + /* ======= RT1/2: Call function under test */ + TEST_CANRX_SetBalancingThreshold(testMessageData); + + /* ======= RT2/2: Test implementation */ + CAN_RxGetSignalDataFromMessageData_Expect( + testMessageData, 23u, 8u, &testSignalData[0u], CANRX_BMS_STATE_REQUEST_ENDIANNESS); + CAN_RxGetSignalDataFromMessageData_ReturnThruPtr_pCanSignal(&testSignalData[4u]); + BAL_SetBalancingThreshold_Expect(UINT16_MAX); + /* ======= RT2/2: Call function under test */ + TEST_CANRX_SetBalancingThreshold(testMessageData); } diff --git a/tests/unit/app/driver/can/cbs/rx/test_can_cbs_rx_cell-temperatures.c b/tests/unit/app/driver/can/cbs/rx/test_can_cbs_rx_cell-temperatures.c new file mode 100644 index 00000000..9a6aeadc --- /dev/null +++ b/tests/unit/app/driver/can/cbs/rx/test_can_cbs_rx_cell-temperatures.c @@ -0,0 +1,278 @@ +/** + * + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * We kindly request you to use one or more of the following phrases to refer to + * foxBMS in your hardware, software, documentation or advertising materials: + * + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" + * + */ + +/** + * @file test_can_cbs_rx_cell-temperatures.c + * @author foxBMS Team + * @date 2023-08-31 (date of creation) + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup UNIT_TEST_IMPLEMENTATION + * @prefix TEST + * + * @brief Tests for the CAN driver callbacks + * + */ + +/*========== Includes =======================================================*/ +#include "unity.h" +#include "Mockcan.h" +#include "Mockcan_helper.h" +#include "Mockdiag.h" +#include "Mockftask.h" +#include "Mockos.h" + +#include "can_cbs_rx.h" +#include "can_cfg_rx-message-definitions.h" +#include "test_assert_helper.h" + +/*========== Unit Testing Framework Directives ==============================*/ +TEST_SOURCE_FILE("can_cbs_rx_cell-temperatures.c") + +TEST_INCLUDE_PATH("../../src/app/driver/can") +TEST_INCLUDE_PATH("../../src/app/driver/can/cbs") +TEST_INCLUDE_PATH("../../src/app/driver/can/cbs/rx") +TEST_INCLUDE_PATH("../../src/app/driver/config") +TEST_INCLUDE_PATH("../../src/app/driver/rtc") +TEST_INCLUDE_PATH("../../src/app/engine/diag") +TEST_INCLUDE_PATH("../../src/app/task/config") +TEST_INCLUDE_PATH("../../src/app/task/ftask") + +/*========== Definitions and Implementations for Unit Test ==================*/ +#define TEST_FULL_8_BITS (255u) +#define TEST_FULL_64_BITS (pow(2, 64) - 1) + +static DATA_BLOCK_CELL_VOLTAGE_s can_tableCellVoltages = {.header.uniqueId = DATA_BLOCK_ID_CELL_VOLTAGE}; +static DATA_BLOCK_CELL_TEMPERATURE_s can_tableTemperatures = {.header.uniqueId = DATA_BLOCK_ID_CELL_TEMPERATURE}; +static DATA_BLOCK_MIN_MAX_s can_tableMinimumMaximumValues = {.header.uniqueId = DATA_BLOCK_ID_MIN_MAX}; +static DATA_BLOCK_CURRENT_SENSOR_s can_tableCurrentSensor = {.header.uniqueId = DATA_BLOCK_ID_CURRENT_SENSOR}; +static DATA_BLOCK_OPEN_WIRE_s can_tableOpenWire = {.header.uniqueId = DATA_BLOCK_ID_OPEN_WIRE_BASE}; +static DATA_BLOCK_STATE_REQUEST_s can_tableStateRequest = {.header.uniqueId = DATA_BLOCK_ID_STATE_REQUEST}; +static DATA_BLOCK_PACK_VALUES_s can_tablePackValues = {.header.uniqueId = DATA_BLOCK_ID_PACK_VALUES}; +static DATA_BLOCK_SOF_s can_tableSof = {.header.uniqueId = DATA_BLOCK_ID_SOF}; +static DATA_BLOCK_SOC_s can_tableSoc = {.header.uniqueId = DATA_BLOCK_ID_SOC}; +static DATA_BLOCK_SOE_s can_tableSoe = {.header.uniqueId = DATA_BLOCK_ID_SOE}; +static DATA_BLOCK_ERROR_STATE_s can_tableErrorState = {.header.uniqueId = DATA_BLOCK_ID_ERROR_STATE}; +static DATA_BLOCK_INSULATION_MONITORING_s can_tableInsulation = { + .header.uniqueId = DATA_BLOCK_ID_INSULATION_MONITORING}; +static DATA_BLOCK_MSL_FLAG_s can_tableMslFlags = {.header.uniqueId = DATA_BLOCK_ID_MSL_FLAG}; +static DATA_BLOCK_RSL_FLAG_s can_tableRslFlags = {.header.uniqueId = DATA_BLOCK_ID_RSL_FLAG}; +static DATA_BLOCK_MOL_FLAG_s can_tableMolFlags = {.header.uniqueId = DATA_BLOCK_ID_MOL_FLAG}; +static DATA_BLOCK_AEROSOL_SENSOR_s can_tableAerosolSensor = {.header.uniqueId = DATA_BLOCK_ID_AEROSOL_SENSOR}; + +OS_QUEUE imd_canDataQueue = NULL_PTR; +OS_QUEUE ftsk_canToAfeCellTemperaturesQueue = NULL_PTR; + +const CAN_SHIM_s can_kShim = { + .pQueueImd = &imd_canDataQueue, + .pTableCellVoltage = &can_tableCellVoltages, + .pTableCellTemperature = &can_tableTemperatures, + .pTableMinMax = &can_tableMinimumMaximumValues, + .pTableCurrentSensor = &can_tableCurrentSensor, + .pTableOpenWire = &can_tableOpenWire, + .pTableStateRequest = &can_tableStateRequest, + .pTablePackValues = &can_tablePackValues, + .pTableSof = &can_tableSof, + .pTableSoc = &can_tableSoc, + .pTableSoe = &can_tableSoe, + .pTableErrorState = &can_tableErrorState, + .pTableInsulation = &can_tableInsulation, + .pTableMsl = &can_tableMslFlags, + .pTableRsl = &can_tableRslFlags, + .pTableMol = &can_tableMolFlags, + .pTableAerosolSensor = &can_tableAerosolSensor, +}; + +/** + * CAN signal parameters for can cell temperatures + */ +static const uint8_t canrx_kCanCellTemperatureMuxBitStart = 7u; +static const uint8_t canrx_kCanCellTemperatureMuxLength = 8u; +static const uint8_t canrx_kCanCellTemperatureInvalidFlagBitStart[6] = {8u, 9u, 10u, 11u, 12u, 13u}; +static const uint8_t canrx_kCanCellTemperatureInvalidFlagLength = 1u; +static const uint8_t canrx_kCanCellTemperatureBitStart[6] = {23u, 31u, 39u, 47u, 55u, 63u}; +static const uint8_t canrx_kCanCellTemperatureLength = 8u; + +/*========== Setup and Teardown =============================================*/ +void setUp(void) { +} + +void tearDown(void) { +} + +/*========== Test Cases =====================================================*/ +/** + * @brief Testing externalized static function + * CANRX_GetCanAfeCellTemperaturesFromMessage + * @details The following cases need to be tested: + * - Routine validation: + * - RT1/1 check if the extracted can_cellVoltages_test is right; + */ +void testCANRX_GetCanAfeCellTemperaturesFromMessage(void) { + /* ======= Routine tests =============================================== */ + /* ======= RT1/1 ======= */ + CAN_CAN2AFE_CELL_TEMPERATURES_QUEUE_s test_canCellTemperatures = {0}; + + /* Prepare a uint64_t test message that matches the can message content */ + uint64_t testMessage = (uint64_t)TEST_FULL_64_BITS; + uint64_t pCanSignal = 0; + uint64_t pCanSignal_full8bits = (uint64_t)TEST_FULL_8_BITS; + uint64_t pCanSignal_true = (uint64_t) true; + + CAN_RxGetSignalDataFromMessageData_Expect( + testMessage, + canrx_kCanCellTemperatureMuxBitStart, + canrx_kCanCellTemperatureMuxLength, + &pCanSignal, + CANRX_AFE_CELL_TEMPERATURES_ENDIANNESS); + CAN_RxGetSignalDataFromMessageData_ReturnThruPtr_pCanSignal(&pCanSignal_full8bits); + + for (uint8_t i = 0; i < CAN_NUM_OF_TEMPERATURES_IN_CAN_CELL_TEMPERATURES_MSG; i++) { + pCanSignal = 0; + CAN_RxGetSignalDataFromMessageData_Expect( + testMessage, + canrx_kCanCellTemperatureInvalidFlagBitStart[i], + canrx_kCanCellTemperatureInvalidFlagLength, + &pCanSignal, + CANRX_AFE_CELL_TEMPERATURES_ENDIANNESS); + CAN_RxGetSignalDataFromMessageData_ReturnThruPtr_pCanSignal(&pCanSignal_true); + } + + for (uint8_t i = 0; i < CAN_NUM_OF_TEMPERATURES_IN_CAN_CELL_TEMPERATURES_MSG; i++) { + pCanSignal = 0; + CAN_RxGetSignalDataFromMessageData_Expect( + testMessage, + canrx_kCanCellTemperatureBitStart[i], + canrx_kCanCellTemperatureLength, + &pCanSignal, + CANRX_AFE_CELL_TEMPERATURES_ENDIANNESS); + CAN_RxGetSignalDataFromMessageData_ReturnThruPtr_pCanSignal(&pCanSignal_full8bits); + } + + TEST_CANRX_GetCanAfeCellTemperaturesFromMessage(&test_canCellTemperatures, testMessage); + TEST_ASSERT_EQUAL_UINT8(TEST_FULL_8_BITS, test_canCellTemperatures.muxValue); + TEST_ASSERT_EQUAL(true, test_canCellTemperatures.invalidFlag[0]); + TEST_ASSERT_EQUAL(true, test_canCellTemperatures.invalidFlag[1]); + TEST_ASSERT_EQUAL(true, test_canCellTemperatures.invalidFlag[2]); + TEST_ASSERT_EQUAL(true, test_canCellTemperatures.invalidFlag[3]); + TEST_ASSERT_EQUAL_UINT8(TEST_FULL_8_BITS, test_canCellTemperatures.cellTemperature[0]); + TEST_ASSERT_EQUAL_UINT8(TEST_FULL_8_BITS, test_canCellTemperatures.cellTemperature[1]); + TEST_ASSERT_EQUAL_UINT8(TEST_FULL_8_BITS, test_canCellTemperatures.cellTemperature[2]); + TEST_ASSERT_EQUAL_UINT8(TEST_FULL_8_BITS, test_canCellTemperatures.cellTemperature[3]); +} + +/** + * @brief Testing CANRX_CellTemperatures + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/5: invalid message id for message -> assert + * - AT2/5: invalid message idType for message -> assert + * - AT3/5: invalid message DLC for message -> assert + * - AT4/5: NULL_PTR for kpkCanData -> assert + * - AT5/5: NULL_PTR for kpkCanShim -> assert + * - Routine validation: + * - RT1/2: Function calls expected subroutines + * - RT2/2: Function calls expected subroutines + */ +void testCANRX_CellTemperatures(void) { + /* ======= Assertion tests ============================================= */ + uint8_t canData[CAN_MAX_DLC] = {0}; + + /* ======= AT1/5 ======= */ + CAN_MESSAGE_PROPERTIES_s testMessageInvalidId = { + .id = CAN_MAX_11BIT_ID, /* invalid message id */ + .idType = CANRX_AFE_CELL_TEMPERATURES_ID_TYPE, /* valid id type */ + .dlc = CAN_DEFAULT_DLC, /* valid dlc */ + .endianness = CANRX_AFE_CELL_TEMPERATURES_ENDIANNESS, /* valid endianness */ + }; + TEST_ASSERT_FAIL_ASSERT(CANRX_CellTemperatures(testMessageInvalidId, canData, &can_kShim)); + + /* ======= AT2/5 ======= */ + CAN_MESSAGE_PROPERTIES_s testMessageInvalidIdType = { + .id = CANRX_AFE_CELL_TEMPERATURES_ID, /* valid message id */ + .idType = CAN_EXTENDED_IDENTIFIER_29_BIT, /* invalid id type */ + .dlc = CAN_DEFAULT_DLC, /* valid dlc */ + .endianness = CANRX_AFE_CELL_TEMPERATURES_ENDIANNESS, /* valid endianness */ + }; + TEST_ASSERT_FAIL_ASSERT(CANRX_CellTemperatures(testMessageInvalidIdType, canData, &can_kShim)); + + /* ======= AT3/5 ======= */ + CAN_MESSAGE_PROPERTIES_s testMessageInvalidDlc = { + .id = CANRX_AFE_CELL_TEMPERATURES_ID, /* valid message id */ + .idType = CANRX_AFE_CELL_TEMPERATURES_ID_TYPE, /* valid id type */ + .dlc = CAN_DEFAULT_DLC + 1u, /* invalid dlc */ + .endianness = CANRX_AFE_CELL_TEMPERATURES_ENDIANNESS, /* valid endianness */ + }; + TEST_ASSERT_FAIL_ASSERT(CANRX_CellTemperatures(testMessageInvalidDlc, canData, &can_kShim)); + + /* ======= AT4/5 ======= */ + CAN_MESSAGE_PROPERTIES_s validTestMessage = { + .id = CANRX_AFE_CELL_TEMPERATURES_ID, /* valid message id */ + .idType = CANRX_AFE_CELL_TEMPERATURES_ID_TYPE, /* valid id type */ + .dlc = CAN_DEFAULT_DLC, /* valid dlc */ + .endianness = CANRX_AFE_CELL_TEMPERATURES_ENDIANNESS, /* valid endianness */ + }; + TEST_ASSERT_FAIL_ASSERT(CANRX_CellTemperatures(validTestMessage, NULL_PTR, &can_kShim)); + + /* ======= AT5/5 ======= */ + TEST_ASSERT_FAIL_ASSERT(CANRX_CellTemperatures(validTestMessage, canData, NULL_PTR)); + + /* ======= Routine tests =============================================== */ + /* ======= RT1/2 =======*/ + uint64_t messageData = 0u; + CAN_ENDIANNESS_e canEndianness = CAN_BIG_ENDIAN; + CAN_RxGetMessageDataFromCanData_Expect(&messageData, canData, canEndianness); + for (uint8_t i = 0; i < 2 * CAN_NUM_OF_TEMPERATURES_IN_CAN_CELL_TEMPERATURES_MSG + 1; i++) { + CAN_RxGetSignalDataFromMessageData_Ignore(); + } + OS_SendToBackOfQueue_ExpectAndReturn(ftsk_canToAfeCellTemperaturesQueue, (void *)&messageData, 0, OS_SUCCESS); + DIAG_Handler_ExpectAndReturn(DIAG_ID_CAN_RX_QUEUE_FULL, DIAG_EVENT_OK, DIAG_SYSTEM, 0u, DIAG_HANDLER_RETURN_OK); + TEST_ASSERT_EQUAL_INT16(0, CANRX_CellTemperatures(validTestMessage, canData, &can_kShim)); + + /* ======= RT2/2 =======*/ + CAN_RxGetMessageDataFromCanData_Ignore(); + for (uint8_t i = 0; i < 2 * CAN_NUM_OF_TEMPERATURES_IN_CAN_CELL_TEMPERATURES_MSG + 1; i++) { + CAN_RxGetSignalDataFromMessageData_Ignore(); + } + OS_SendToBackOfQueue_IgnoreAndReturn(OS_FAIL); + DIAG_Handler_ExpectAndReturn(DIAG_ID_CAN_RX_QUEUE_FULL, DIAG_EVENT_NOT_OK, DIAG_SYSTEM, 0u, DIAG_HANDLER_RETURN_OK); + TEST_ASSERT_EQUAL_INT16(0, CANRX_CellTemperatures(validTestMessage, canData, &can_kShim)); +} diff --git a/tests/unit/app/driver/can/cbs/rx/test_can_cbs_rx_cell-voltages.c b/tests/unit/app/driver/can/cbs/rx/test_can_cbs_rx_cell-voltages.c new file mode 100644 index 00000000..96e0265a --- /dev/null +++ b/tests/unit/app/driver/can/cbs/rx/test_can_cbs_rx_cell-voltages.c @@ -0,0 +1,278 @@ +/** + * + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * We kindly request you to use one or more of the following phrases to refer to + * foxBMS in your hardware, software, documentation or advertising materials: + * + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" + * + */ + +/** + * @file test_can_cbs_rx_cell-voltages.c + * @author foxBMS Team + * @date 2023-08-31 (date of creation) + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup UNIT_TEST_IMPLEMENTATION + * @prefix TEST + * + * @brief Tests for the CAN driver callbacks + * + */ + +/*========== Includes =======================================================*/ +#include "unity.h" +#include "Mockcan.h" +#include "Mockcan_helper.h" +#include "Mockdiag.h" +#include "Mockftask.h" +#include "Mockos.h" + +#include "can_cbs_rx.h" +#include "can_cfg_rx-message-definitions.h" +#include "can_helper.h" +#include "test_assert_helper.h" + +/*========== Unit Testing Framework Directives ==============================*/ +TEST_SOURCE_FILE("can_cbs_rx_cell-voltages.c") + +TEST_INCLUDE_PATH("../../src/app/driver/can") +TEST_INCLUDE_PATH("../../src/app/driver/can/cbs") +TEST_INCLUDE_PATH("../../src/app/driver/can/cbs/rx") +TEST_INCLUDE_PATH("../../src/app/driver/config") +TEST_INCLUDE_PATH("../../src/app/driver/rtc") +TEST_INCLUDE_PATH("../../src/app/engine/diag") +TEST_INCLUDE_PATH("../../src/app/task/config") +TEST_INCLUDE_PATH("../../src/app/task/ftask") + +/*========== Definitions and Implementations for Unit Test ==================*/ +#define TEST_FULL_8_BITS (255u) +#define TEST_FULL_64_BITS (pow(2, 64) - 1) + +static DATA_BLOCK_CELL_VOLTAGE_s can_tableCellVoltages = {.header.uniqueId = DATA_BLOCK_ID_CELL_VOLTAGE}; +static DATA_BLOCK_CELL_TEMPERATURE_s can_tableTemperatures = {.header.uniqueId = DATA_BLOCK_ID_CELL_TEMPERATURE}; +static DATA_BLOCK_MIN_MAX_s can_tableMinimumMaximumValues = {.header.uniqueId = DATA_BLOCK_ID_MIN_MAX}; +static DATA_BLOCK_CURRENT_SENSOR_s can_tableCurrentSensor = {.header.uniqueId = DATA_BLOCK_ID_CURRENT_SENSOR}; +static DATA_BLOCK_OPEN_WIRE_s can_tableOpenWire = {.header.uniqueId = DATA_BLOCK_ID_OPEN_WIRE_BASE}; +static DATA_BLOCK_STATE_REQUEST_s can_tableStateRequest = {.header.uniqueId = DATA_BLOCK_ID_STATE_REQUEST}; +static DATA_BLOCK_PACK_VALUES_s can_tablePackValues = {.header.uniqueId = DATA_BLOCK_ID_PACK_VALUES}; +static DATA_BLOCK_SOF_s can_tableSof = {.header.uniqueId = DATA_BLOCK_ID_SOF}; +static DATA_BLOCK_SOC_s can_tableSoc = {.header.uniqueId = DATA_BLOCK_ID_SOC}; +static DATA_BLOCK_SOE_s can_tableSoe = {.header.uniqueId = DATA_BLOCK_ID_SOE}; +static DATA_BLOCK_ERROR_STATE_s can_tableErrorState = {.header.uniqueId = DATA_BLOCK_ID_ERROR_STATE}; +static DATA_BLOCK_INSULATION_MONITORING_s can_tableInsulation = { + .header.uniqueId = DATA_BLOCK_ID_INSULATION_MONITORING}; +static DATA_BLOCK_MSL_FLAG_s can_tableMslFlags = {.header.uniqueId = DATA_BLOCK_ID_MSL_FLAG}; +static DATA_BLOCK_RSL_FLAG_s can_tableRslFlags = {.header.uniqueId = DATA_BLOCK_ID_RSL_FLAG}; +static DATA_BLOCK_MOL_FLAG_s can_tableMolFlags = {.header.uniqueId = DATA_BLOCK_ID_MOL_FLAG}; +static DATA_BLOCK_AEROSOL_SENSOR_s can_tableAerosolSensor = {.header.uniqueId = DATA_BLOCK_ID_AEROSOL_SENSOR}; + +OS_QUEUE imd_canDataQueue = NULL_PTR; +OS_QUEUE ftsk_canToAfeCellVoltagesQueue = NULL_PTR; + +const CAN_SHIM_s can_kShim = { + .pQueueImd = &imd_canDataQueue, + .pTableCellVoltage = &can_tableCellVoltages, + .pTableCellTemperature = &can_tableTemperatures, + .pTableMinMax = &can_tableMinimumMaximumValues, + .pTableCurrentSensor = &can_tableCurrentSensor, + .pTableOpenWire = &can_tableOpenWire, + .pTableStateRequest = &can_tableStateRequest, + .pTablePackValues = &can_tablePackValues, + .pTableSof = &can_tableSof, + .pTableSoc = &can_tableSoc, + .pTableSoe = &can_tableSoe, + .pTableErrorState = &can_tableErrorState, + .pTableInsulation = &can_tableInsulation, + .pTableMsl = &can_tableMslFlags, + .pTableRsl = &can_tableRslFlags, + .pTableMol = &can_tableMolFlags, + .pTableAerosolSensor = &can_tableAerosolSensor, +}; + +/** + * CAN signal parameters for voltages + */ +static const uint8_t canrx_kCanCellVoltageMuxBitStart = 7u; +static const uint8_t canrx_kCanCellVoltageMuxLength = 8u; +static const uint8_t canrx_kCanCellVoltageInvalidFlagBitStart[4] = {12u, 13u, 14u, 15u}; +static const uint8_t canrx_kCanCellVoltageInvalidFlagLength = 1u; +static const uint8_t canrx_kCanCellVoltageBitStart[4] = {11u, 30u, 33u, 52u}; +static const uint8_t canrx_kCanCellVoltageLength = 13u; + +/*========== Setup and Teardown =============================================*/ +void setUp(void) { +} + +void tearDown(void) { +} + +/*========== Test Cases =====================================================*/ +/** + * @brief Testing externalized static function + * CANRX_GetCanAfeCellVoltagesFromMessage + * @details The following cases need to be tested: + * - Routine validation: + * - RT1/1 check if the extracted test_canCellVoltages is right; + */ +void testCANRX_GetCanAfeCellVoltagesFromMessage(void) { + /* ======= Routine tests =============================================== */ + /* ======= RT1/1 ======= */ + CAN_CAN2AFE_CELL_VOLTAGES_QUEUE_s test_canCellVoltages = {0}; + + /* Prepare a uint64_t test message that matches the can message content */ + uint64_t testMessage = (uint64_t)TEST_FULL_64_BITS; + uint64_t pCanSignal = 0; + uint64_t pCanSignal_full8bits = (uint64_t)TEST_FULL_8_BITS; + uint64_t pCanSignal_true = (uint64_t) true; + + CAN_RxGetSignalDataFromMessageData_Expect( + testMessage, + canrx_kCanCellVoltageMuxBitStart, + canrx_kCanCellVoltageMuxLength, + &pCanSignal, + CANRX_AFE_CELL_VOLTAGES_ENDIANNESS); + CAN_RxGetSignalDataFromMessageData_ReturnThruPtr_pCanSignal(&pCanSignal_full8bits); + + for (uint8_t i = 0; i < CAN_NUM_OF_VOLTAGES_IN_CAN_CELL_VOLTAGES_MSG; i++) { + pCanSignal = 0; + CAN_RxGetSignalDataFromMessageData_Expect( + testMessage, + canrx_kCanCellVoltageInvalidFlagBitStart[i], + canrx_kCanCellVoltageInvalidFlagLength, + &pCanSignal, + CANRX_AFE_CELL_VOLTAGES_ENDIANNESS); + CAN_RxGetSignalDataFromMessageData_ReturnThruPtr_pCanSignal(&pCanSignal_true); + } + + for (uint8_t i = 0; i < CAN_NUM_OF_VOLTAGES_IN_CAN_CELL_VOLTAGES_MSG; i++) { + pCanSignal = 0; + CAN_RxGetSignalDataFromMessageData_Expect( + testMessage, + canrx_kCanCellVoltageBitStart[i], + canrx_kCanCellVoltageLength, + &pCanSignal, + CANRX_AFE_CELL_VOLTAGES_ENDIANNESS); + CAN_RxGetSignalDataFromMessageData_ReturnThruPtr_pCanSignal(&pCanSignal_full8bits); + } + TEST_CANRX_GetCanAfeCellVoltagesFromMessage(&test_canCellVoltages, testMessage); + TEST_ASSERT_EQUAL_UINT8(TEST_FULL_8_BITS, test_canCellVoltages.muxValue); + TEST_ASSERT_EQUAL(true, test_canCellVoltages.invalidFlag[0]); + TEST_ASSERT_EQUAL(true, test_canCellVoltages.invalidFlag[1]); + TEST_ASSERT_EQUAL(true, test_canCellVoltages.invalidFlag[2]); + TEST_ASSERT_EQUAL(true, test_canCellVoltages.invalidFlag[3]); + TEST_ASSERT_EQUAL_UINT8(TEST_FULL_8_BITS, test_canCellVoltages.cellVoltage[0]); + TEST_ASSERT_EQUAL_UINT8(TEST_FULL_8_BITS, test_canCellVoltages.cellVoltage[1]); + TEST_ASSERT_EQUAL_UINT8(TEST_FULL_8_BITS, test_canCellVoltages.cellVoltage[2]); + TEST_ASSERT_EQUAL_UINT8(TEST_FULL_8_BITS, test_canCellVoltages.cellVoltage[3]); +} + +/** + * @brief Testing CANRX_CellVoltages + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/5: invalid message id for message -> assert + * - AT2/5: invalid message idType for message -> assert + * - AT3/5: invalid message DLC for message -> assert + * - AT4/5: NULL_PTR for kpkCanData -> assert + * - AT5/5: NULL_PTR for kpkCanShim -> assert + * - Routine validation: + * - RT1/2: Function calls expected subroutines + * - RT2/2: Function calls expected subroutines + */ +void testCANRX_CellVoltages(void) { + /* ======= Assertion tests ============================================= */ + uint8_t canData[CAN_MAX_DLC] = {0}; + + /* ======= AT1/5 ======= */ + CAN_MESSAGE_PROPERTIES_s testMessageInvalidId = { + .id = CAN_MAX_11BIT_ID, /* invalid message id */ + .idType = CANRX_AFE_CELL_VOLTAGES_ID_TYPE, /* valid id type */ + .dlc = CAN_DEFAULT_DLC, /* valid dlc */ + .endianness = CANRX_AFE_CELL_VOLTAGES_ENDIANNESS, /* valid endianness */ + }; + TEST_ASSERT_FAIL_ASSERT(CANRX_CellVoltages(testMessageInvalidId, canData, &can_kShim)); + + /* ======= AT2/5 ======= */ + CAN_MESSAGE_PROPERTIES_s testMessageInvalidIdType = { + .id = CANRX_AFE_CELL_VOLTAGES_ID, /* valid message id */ + .idType = CAN_EXTENDED_IDENTIFIER_29_BIT, /* invalid id type */ + .dlc = CAN_DEFAULT_DLC, /* valid dlc */ + .endianness = CANRX_AFE_CELL_VOLTAGES_ENDIANNESS, /* valid endianness */ + }; + TEST_ASSERT_FAIL_ASSERT(CANRX_CellVoltages(testMessageInvalidIdType, canData, &can_kShim)); + + /* ======= AT3/5 ======= */ + CAN_MESSAGE_PROPERTIES_s testMessageInvalidDlc = { + .id = CANRX_AFE_CELL_VOLTAGES_ID, /* valid message id */ + .idType = CANRX_AFE_CELL_VOLTAGES_ID_TYPE, /* valid id type */ + .dlc = CAN_DEFAULT_DLC + 1u, /* invalid dlc */ + .endianness = CANRX_AFE_CELL_VOLTAGES_ENDIANNESS, /* valid endianness */ + }; + TEST_ASSERT_FAIL_ASSERT(CANRX_CellVoltages(testMessageInvalidDlc, canData, &can_kShim)); + + /* ======= AT4/5 ======= */ + CAN_MESSAGE_PROPERTIES_s validTestMessage = { + .id = CANRX_AFE_CELL_VOLTAGES_ID, /* valid message id */ + .idType = CANRX_AFE_CELL_VOLTAGES_ID_TYPE, /* valid id type */ + .dlc = CAN_DEFAULT_DLC, /* valid dlc */ + .endianness = CANRX_AFE_CELL_VOLTAGES_ENDIANNESS, /* valid endianness */ + }; + TEST_ASSERT_FAIL_ASSERT(CANRX_CellVoltages(validTestMessage, NULL_PTR, &can_kShim)); + + /* ======= AT5/5 ======= */ + TEST_ASSERT_FAIL_ASSERT(CANRX_CellVoltages(validTestMessage, canData, NULL_PTR)); + + /* ======= Routine tests =============================================== */ + /* ======= RT1/2 =======*/ + uint64_t messageData = 0u; + CAN_ENDIANNESS_e canEndianness = CAN_BIG_ENDIAN; + CAN_RxGetMessageDataFromCanData_Expect(&messageData, canData, canEndianness); + for (uint8_t i = 0; i < 2 * CAN_NUM_OF_VOLTAGES_IN_CAN_CELL_VOLTAGES_MSG + 1; i++) { + CAN_RxGetSignalDataFromMessageData_Ignore(); + } + OS_SendToBackOfQueue_ExpectAndReturn(ftsk_canToAfeCellVoltagesQueue, (void *)&messageData, 0, OS_SUCCESS); + DIAG_Handler_ExpectAndReturn(DIAG_ID_CAN_RX_QUEUE_FULL, DIAG_EVENT_OK, DIAG_SYSTEM, 0u, DIAG_HANDLER_RETURN_OK); + TEST_ASSERT_EQUAL_INT16(0, CANRX_CellVoltages(validTestMessage, canData, &can_kShim)); + + /* ======= RT2/2 =======*/ + CAN_RxGetMessageDataFromCanData_Ignore(); + for (uint8_t i = 0; i < 2 * CAN_NUM_OF_VOLTAGES_IN_CAN_CELL_VOLTAGES_MSG + 1; i++) { + CAN_RxGetSignalDataFromMessageData_Ignore(); + } + OS_SendToBackOfQueue_IgnoreAndReturn(OS_FAIL); + DIAG_Handler_ExpectAndReturn(DIAG_ID_CAN_RX_QUEUE_FULL, DIAG_EVENT_NOT_OK, DIAG_SYSTEM, 0u, DIAG_HANDLER_RETURN_OK); + TEST_ASSERT_EQUAL_INT16(0, CANRX_CellVoltages(validTestMessage, canData, &can_kShim)); +} diff --git a/tests/unit/app/driver/can/cbs/rx/test_can_cbs_rx_current-sensor.c b/tests/unit/app/driver/can/cbs/rx/test_can_cbs_rx_current-sensor.c index 16736702..56299f68 100644 --- a/tests/unit/app/driver/can/cbs/rx/test_can_cbs_rx_current-sensor.c +++ b/tests/unit/app/driver/can/cbs/rx/test_can_cbs_rx_current-sensor.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_can_cbs_rx_current-sensor.c * @author foxBMS Team * @date 2021-04-22 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/can/cbs/rx/test_can_cbs_rx_debug.c b/tests/unit/app/driver/can/cbs/rx/test_can_cbs_rx_debug.c index 2174a270..e581b8c3 100644 --- a/tests/unit/app/driver/can/cbs/rx/test_can_cbs_rx_debug.c +++ b/tests/unit/app/driver/can/cbs/rx/test_can_cbs_rx_debug.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_can_cbs_rx_debug.c * @author foxBMS Team * @date 2021-04-22 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * @@ -55,6 +55,7 @@ /*========== Includes =======================================================*/ #include "unity.h" #include "Mockcan.h" +#include "Mockcan_cbs_tx_debug-build-configuration.h" #include "Mockcan_cbs_tx_debug-response.h" #include "Mockcan_cbs_tx_debug-unsupported-multiplexer-values.h" #include "Mockdatabase.h" @@ -81,7 +82,7 @@ TEST_SOURCE_FILE("can_cbs_rx_debug.c") TEST_INCLUDE_PATH("../../src/app/driver/can") TEST_INCLUDE_PATH("../../src/app/driver/can/cbs") TEST_INCLUDE_PATH("../../src/app/driver/can/cbs/rx") -TEST_INCLUDE_PATH("../../src/app/driver/can/cbs/tx") +TEST_INCLUDE_PATH("../../src/app/driver/can/cbs/tx-async") TEST_INCLUDE_PATH("../../src/app/driver/config") TEST_INCLUDE_PATH("../../src/app/driver/foxmath") TEST_INCLUDE_PATH("../../src/app/driver/fram") @@ -170,18 +171,21 @@ void testCANRX_DebugAssertionsParamMessage(void) { /* testing assertions, therefore only dummy CAN data required in this test */ /* test assert for wrong message ID */ CAN_MESSAGE_PROPERTIES_s testMessage = { - .id = CAN_MAX_11BIT_ID, /* invalid ID */ - .idType = CANRX_DEBUG_ID_TYPE, - .dlc = 0u, /* invalid data length */ - .endianness = CANRX_DEBUG_ENDIANNESS, /* valid endianness */ + .id = CAN_MAX_11BIT_ID, /* invalid ID */ + .idType = CAN_EXTENDED_IDENTIFIER_29_BIT, /* invalid ID-type*/ + .dlc = 0u, /* invalid data length */ + .endianness = CANRX_DEBUG_ENDIANNESS, /* valid endianness */ }; TEST_ASSERT_FAIL_ASSERT(CANRX_Debug(testMessage, testCanDataZeroArray, &can_kShim)); - /* fix message ID, therfore only the DLC length is wrong and must lead to - an assertion. */ + /* fix message ID, therfore the invalid ID-type must lead to an assertion*/ testMessage.id = CANRX_DEBUG_ID; TEST_ASSERT_FAIL_ASSERT(CANRX_Debug(testMessage, testCanDataZeroArray, &can_kShim)); + /* fix message ID-type, therefore only DLC length is wrong and must lead to an assertion.*/ + testMessage.idType = CAN_STANDARD_IDENTIFIER_11_BIT; + TEST_ASSERT_FAIL_ASSERT(CANRX_Debug(testMessage, testCanDataZeroArray, &can_kShim)); + /* fix the message, as we now need to test the rest of the arguments assertions */ testMessage.id = CAN_DEFAULT_DLC; @@ -209,7 +213,7 @@ void testCANRX_DebugInvalidMultiplexerValues(void) { uint8_t testCanData[CAN_MAX_DLC] = {0}; testCanData[0] = INVALID_MULTIPLEXER_VALUE; /* invalid multiplexer value */ - CANTX_UnsupportedMultiplexerValue_Expect(CANRX_DEBUG_ID, INVALID_MULTIPLEXER_VALUE); + CANTX_DebugUnsupportedMultiplexerVal_Expect(CANRX_DEBUG_ID, INVALID_MULTIPLEXER_VALUE); CANRX_Debug(validRxDebugTestMessage, testCanData, &can_kShim); } @@ -364,6 +368,16 @@ void testCANRX_TriggerTimeInfoMessage(void) { TEST_ASSERT_FAIL_ASSERT(TEST_CANRX_TriggerTimeInfoMessage()); } +void testCANRX_TriggerBuildConfigurationMessage(void) { + /* sending response message works as expected */ + CANTX_DebugBuildConfiguration_IgnoreAndReturn(STD_OK); + TEST_CANRX_TriggerBuildConfigurationMessage(); + + /* sending response message does not work as expected */ + CANTX_DebugBuildConfiguration_IgnoreAndReturn(STD_NOT_OK); + TEST_ASSERT_FAIL_ASSERT(TEST_CANRX_TriggerBuildConfigurationMessage()); +} + /*********************************************************************************************************************/ void testCANRX_CheckIfBmsSoftwareVersionIsRequested(void) { /* test endianness assertion */ @@ -449,6 +463,17 @@ void testCANRX_CheckIfTimeInfoIsRequested(void) { TEST_ASSERT_TRUE(isRequested); } +void testCANRX_CheckIfBuildConfigurationIsRequested(void) { + /* test endianness assertion */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANRX_CheckIfBuildConfigurationIsRequested(testMessageDataZero, invalidEndianness)) + + /* test correct message -> return true */ + /* set bit to indicate that the BMS time information is requested */ + uint64_t testMessageData = ((uint64_t)1u) << 53u; + bool isRequested = TEST_CANRX_CheckIfBuildConfigurationIsRequested(testMessageData, validEndianness); + TEST_ASSERT_TRUE(isRequested); +} + /*********************************************************************************************************************/ /* test if all functions that process the multiplexer values (pattern: CANRX_Process.*Mux) */ void testCANRX_ProcessVersionInformationMux(void) { @@ -470,6 +495,14 @@ void testCANRX_ProcessVersionInformationMux(void) { testMessageData = ((uint64_t)1u) << 51u; /* set bit to indicate that the MCU wafer information is requested */ CANTX_DebugResponse_ExpectAndReturn(CANTX_DEBUG_RESPONSE_TRANSMIT_MCU_WAFER_INFORMATION, STD_OK); TEST_CANRX_ProcessVersionInformationMux(testMessageData, validEndianness); + + testMessageData = ((uint64_t)1u) << 52u; /* set bit to indicate that the MCU wafer information is requested */ + CANTX_DebugResponse_ExpectAndReturn(CANTX_DEBUG_RESPONSE_TRANSMIT_COMMIT_HASH, STD_OK); + TEST_CANRX_ProcessVersionInformationMux(testMessageData, validEndianness); + + testMessageData = ((uint64_t)1u) << 53u; /* set bit to indicate that the MCU wafer information is requested */ + CANTX_DebugBuildConfiguration_ExpectAndReturn(STD_OK); + TEST_CANRX_ProcessVersionInformationMux(testMessageData, validEndianness); } void testCANRX_ProcessRtcMux(void) { diff --git a/tests/unit/app/driver/can/cbs/rx/test_can_cbs_rx_imd-info.c b/tests/unit/app/driver/can/cbs/rx/test_can_cbs_rx_imd-info.c index b163e176..328fdf36 100644 --- a/tests/unit/app/driver/can/cbs/rx/test_can_cbs_rx_imd-info.c +++ b/tests/unit/app/driver/can/cbs/rx/test_can_cbs_rx_imd-info.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_can_cbs_rx_imd-info.c * @author foxBMS Team * @date 2021-04-22 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * @@ -61,10 +61,14 @@ #include "Mockimd.h" #include "Mockos.h" +#include "bender_iso165c_cfg.h" #include "database_cfg.h" #include "can_cbs_rx.h" +#include "can_cbs_rx_imd-info.h" +#include "can_cfg_rx-message-definitions.h" #include "can_helper.h" +#include "test_assert_helper.h" /*========== Unit Testing Framework Directives ==============================*/ TEST_SOURCE_FILE("can_cbs_rx_imd-info.c") @@ -75,10 +79,17 @@ TEST_INCLUDE_PATH("../../src/app/driver/can/cbs/rx") TEST_INCLUDE_PATH("../../src/app/driver/config") TEST_INCLUDE_PATH("../../src/app/driver/foxmath") TEST_INCLUDE_PATH("../../src/app/driver/imd") +TEST_INCLUDE_PATH("../../src/app/driver/imd/bender/iso165c/config") TEST_INCLUDE_PATH("../../src/app/engine/diag") TEST_INCLUDE_PATH("../../src/app/task/config") /*========== Definitions and Implementations for Unit Test ==================*/ +/* dummy data array filled with zero */ +const uint8_t testCanDataZeroArray[CAN_MAX_DLC] = {0}; + +const CAN_NODE_s can_node1 = { + .canNodeRegister = canREG1, +}; static DATA_BLOCK_CELL_VOLTAGE_s can_tableCellVoltages = {.header.uniqueId = DATA_BLOCK_ID_CELL_VOLTAGE}; static DATA_BLOCK_CELL_TEMPERATURE_s can_tableTemperatures = {.header.uniqueId = DATA_BLOCK_ID_CELL_TEMPERATURE}; @@ -128,5 +139,208 @@ void tearDown(void) { } /*========== Test Cases =====================================================*/ -void testDummy(void) { +/* test assertions */ +void testAssertion_CANRX_ImdInfo(void) { + CAN_MESSAGE_PROPERTIES_s testMessage = { + .id = CAN_MAX_11BIT_ID, /* invalid ID */ + .idType = CANRX_IMD_INFO_ID_TYPE, + .dlc = CANRX_IMD_INFO_DLC, + .endianness = CANRX_IMD_INFO_ENDIANNESS, + }; + + /* test invalid ID*/ + TEST_ASSERT_FAIL_ASSERT(CANRX_ImdInfo(testMessage, testCanDataZeroArray, &can_kShim)); + + /* test invalid DLC*/ + testMessage.id = CANRX_IMD_INFO_ID; + testMessage.dlc = 9u; + TEST_ASSERT_FAIL_ASSERT(CANRX_ImdInfo(testMessage, testCanDataZeroArray, &can_kShim)); + + /* test invalid endianness*/ + testMessage.dlc = CANRX_IMD_INFO_DLC; + testMessage.endianness = CAN_BIG_ENDIAN; + TEST_ASSERT_FAIL_ASSERT(CANRX_ImdInfo(testMessage, testCanDataZeroArray, &can_kShim)); + + /* test can data is null pointer*/ + testMessage.endianness = CANRX_IMD_INFO_ENDIANNESS; + TEST_ASSERT_FAIL_ASSERT(CANRX_ImdInfo(testMessage, NULL_PTR, &can_kShim)); + + /* test can shim is null pointer*/ + TEST_ASSERT_FAIL_ASSERT(CANRX_ImdInfo(testMessage, testCanDataZeroArray, NULL_PTR)); +} + +void testAssertion_CANRX_TransferImdInfoMessageToCanBuffer(void) { + CAN_BUFFER_ELEMENT_s testBuffer = {0}; + uint8_t testDlc = 9u; + /* test dlc to big */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANRX_TransferImdInfoMessageToCanBuffer(testDlc, testCanDataZeroArray, &testBuffer)); + + /* test can data is null pointer */ + testDlc = 6u; + TEST_ASSERT_FAIL_ASSERT(TEST_CANRX_TransferImdInfoMessageToCanBuffer(testDlc, NULL_PTR, &testBuffer)); + + /* test can buffer element is null pointer */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANRX_TransferImdInfoMessageToCanBuffer(testDlc, testCanDataZeroArray, NULL_PTR)); +} + +void testAssertion_CANRX_ImdInfoGetDataFromMessage(void) { + /* test can data is null pointer*/ + TEST_ASSERT_FAIL_ASSERT(CANRX_ImdInfoGetDataFromMessage(NULL_PTR, &can_tableInsulation)); + + /* test data table is null pointer*/ + TEST_ASSERT_FAIL_ASSERT(CANRX_ImdInfoGetDataFromMessage(testCanDataZeroArray, NULL_PTR)); +} + +void testAssertion_CANRX_ImdInfoCheckMeasurementMode(void) { + /* test can data is null pointer */ + TEST_ASSERT_FAIL_ASSERT(CANRX_ImdInfoCheckMeasurementMode(NULL_PTR, I165C_ENABLE_MEASUREMENT)); + + /* test measurement mode not defined */ + TEST_ASSERT_FAIL_ASSERT(CANRX_ImdInfoCheckMeasurementMode(testCanDataZeroArray, 2u)); +} + +void testAssertion_CANRX_ImdInfoHasSelfTestBeenExecuted(void) { + /* test can data is null pointer */ + TEST_ASSERT_FAIL_ASSERT(CANRX_ImdInfoHasSelfTestBeenExecuted(NULL_PTR)); +} + +void testAssertion_CANRX_ImdInfoIsSelfTestFinished(void) { + /* test can data is null pointer*/ + TEST_ASSERT_FAIL_ASSERT(CANRX_ImdInfoIsSelfTestFinished(NULL_PTR)); +} + +/* test functionality */ +void test_CANRX_ImdInfo(void) { + CAN_MESSAGE_PROPERTIES_s testMessage = { + .id = CANRX_IMD_INFO_ID, + .idType = CANRX_IMD_INFO_ID_TYPE, + .dlc = CANRX_IMD_INFO_DLC, + .endianness = CANRX_IMD_INFO_ENDIANNESS, + }; + CAN_BUFFER_ELEMENT_s canMessage = { + .canNode = I165C_CAN_NODE, + .id = testMessage.id, + .idType = testMessage.idType, + .data = {0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u}}; + MATH_MinimumOfTwoUint8_t_ExpectAndReturn(testMessage.dlc, CAN_MAX_DLC, testMessage.dlc); + OS_SendToBackOfQueue_ExpectAndReturn(*(can_kShim.pQueueImd), (void *)&canMessage, 0u, OS_SUCCESS); + CANRX_ImdInfo(testMessage, testCanDataZeroArray, &can_kShim); +} + +void test_CANRX_TransferImdInfoMessageToCanBuffer(void) { + CAN_BUFFER_ELEMENT_s testBuffer = { + .canNode = I165C_CAN_NODE, + .id = CANRX_IMD_INFO_ID, + .idType = CANRX_IMD_INFO_ID_TYPE, + .data = {0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u}}; + uint8_t testDlc = CANRX_IMD_INFO_DLC; + uint8_t testData[CANRX_IMD_INFO_DLC] = {0x12u, 0x34u, 0x56u, 0x78u, 0x9Au, 0xBCu}; + + MATH_MinimumOfTwoUint8_t_ExpectAndReturn(testDlc, CAN_MAX_DLC, testDlc); + TEST_CANRX_TransferImdInfoMessageToCanBuffer(testDlc, testData, &testBuffer); + + TEST_ASSERT_EQUAL(0x12u, testBuffer.data[0u]); + TEST_ASSERT_EQUAL(0x34u, testBuffer.data[1u]); + TEST_ASSERT_EQUAL(0x56u, testBuffer.data[2u]); + TEST_ASSERT_EQUAL(0x78u, testBuffer.data[3u]); + TEST_ASSERT_EQUAL(0x9Au, testBuffer.data[4u]); + TEST_ASSERT_EQUAL(0xBCu, testBuffer.data[5u]); + TEST_ASSERT_EQUAL(0x00u, testBuffer.data[6u]); + TEST_ASSERT_EQUAL(0x00u, testBuffer.data[7u]); +} + +void test_CANRX_ImdInfoGetDataFromMessage(void) { + uint8_t const canData[CANRX_IMD_INFO_DLC] = {0x39u, 0x30u, 0x3Fu, 0u, 0x17u, 0x31u}; + CANRX_ImdInfoGetDataFromMessage(canData, &can_tableInsulation); + + /* measured resistance */ + TEST_ASSERT_EQUAL(12345u, can_tableInsulation.insulationResistance_kOhm); + + /* imc status */ + TEST_ASSERT_EQUAL(true, can_tableInsulation.dfIsCriticalResistanceDetected); + TEST_ASSERT_EQUAL(true, can_tableInsulation.dfIsChassisFaultDetected); + TEST_ASSERT_EQUAL(true, can_tableInsulation.dfIsDeviceErrorDetected); + TEST_ASSERT_EQUAL(false, can_tableInsulation.areDeviceFlagsValid); + TEST_ASSERT_EQUAL(true, can_tableInsulation.dfIsWarnableResistanceDetected); + + /* vifc status*/ + TEST_ASSERT_EQUAL(false, can_tableInsulation.isImdRunning); + TEST_ASSERT_EQUAL(false, can_tableInsulation.dfIsMeasurementUpToDate); + + /* test if flags get reverted correctly */ + uint8_t const resetCanData[CANRX_IMD_INFO_DLC] = {0x11u, 0x27u, 0u, 0u, 0u, 0u}; + CANRX_ImdInfoGetDataFromMessage(resetCanData, &can_tableInsulation); + + /* measured resistance */ + TEST_ASSERT_EQUAL(10001, can_tableInsulation.insulationResistance_kOhm); + + /* imc status */ + TEST_ASSERT_EQUAL(false, can_tableInsulation.dfIsCriticalResistanceDetected); + TEST_ASSERT_EQUAL(false, can_tableInsulation.dfIsChassisFaultDetected); + TEST_ASSERT_EQUAL(false, can_tableInsulation.dfIsDeviceErrorDetected); + TEST_ASSERT_EQUAL(true, can_tableInsulation.areDeviceFlagsValid); + TEST_ASSERT_EQUAL(false, can_tableInsulation.dfIsWarnableResistanceDetected); + + /* vifc status*/ + TEST_ASSERT_EQUAL(true, can_tableInsulation.isImdRunning); + TEST_ASSERT_EQUAL(true, can_tableInsulation.dfIsMeasurementUpToDate); +} + +void test_CANRX_ImdInfoCheckMeasurementMode(void) { + uint8_t const canData[CANRX_IMD_INFO_DLC] = {0u, 0u, 0u, 0u, 0x01u, 0u}; + uint8_t mode = I165C_ENABLE_MEASUREMENT; + + /* valid combination*/ + TEST_ASSERT_EQUAL(true, CANRX_ImdInfoCheckMeasurementMode(canData, mode)); + + /* invalid combination */ + mode = I165C_DISABLE_MEASUREMENT; + TEST_ASSERT_EQUAL(false, CANRX_ImdInfoCheckMeasurementMode(canData, mode)); + + /* switch actual measurement mode to disabled */ + /* valid combination*/ + TEST_ASSERT_EQUAL(true, CANRX_ImdInfoCheckMeasurementMode(testCanDataZeroArray, mode)); + + /* invalid combination */ + mode = I165C_ENABLE_MEASUREMENT; + TEST_ASSERT_EQUAL(false, CANRX_ImdInfoCheckMeasurementMode(testCanDataZeroArray, mode)); +} + +void test_CANRX_ImdInfoHasSelfTestBeenExecuted(void) { + /* overall self test executed */ + uint8_t canData[CANRX_IMD_INFO_DLC] = {0u, 0u, 0u, 0u, 0u, 0x20u}; + TEST_ASSERT_EQUAL(true, CANRX_ImdInfoHasSelfTestBeenExecuted(canData)); + + /* parameter config self test executed*/ + canData[5u] = 0x10u; + TEST_ASSERT_EQUAL(true, CANRX_ImdInfoHasSelfTestBeenExecuted(canData)); + + /* no self test executed */ + canData[5u] = 0x30u; + TEST_ASSERT_EQUAL(false, CANRX_ImdInfoHasSelfTestBeenExecuted(canData)); +} + +void test_CANRX_ImdInfoIsSelfTestFinished(void) { + /* self test is running */ + uint8_t canData[CANRX_IMD_INFO_DLC] = {0u, 0u, 0x10u, 0u, 0u, 0u}; + TEST_ASSERT_EQUAL(false, CANRX_ImdInfoIsSelfTestFinished(canData)); + + /* insulation measurement is active */ + canData[2u] = 0u; + TEST_ASSERT_EQUAL(false, CANRX_ImdInfoIsSelfTestFinished(canData)); + canData[4u] = 0x01u; + + /* self test was not executed */ +#ifdef I165C_SELF_TEST_LONG + /* overall self test */ + canData[5u] = 0x10u; + TEST_ASSERT_EQUAL(false, CANRX_ImdInfoIsSelfTestFinished(canData)); +#else + /* parameter config self test*/ + canData[5u] = 0x20u; + TEST_ASSERT_EQUAL(false, CANRX_ImdInfoIsSelfTestFinished(canData)); +#endif + /* self test is finished*/ + canData[5u] = 0u; + TEST_ASSERT_EQUAL(true, CANRX_ImdInfoIsSelfTestFinished(canData)); } diff --git a/tests/unit/app/driver/can/cbs/rx/test_can_cbs_rx_imd-response.c b/tests/unit/app/driver/can/cbs/rx/test_can_cbs_rx_imd-response.c index 53f77a5c..7caef268 100644 --- a/tests/unit/app/driver/can/cbs/rx/test_can_cbs_rx_imd-response.c +++ b/tests/unit/app/driver/can/cbs/rx/test_can_cbs_rx_imd-response.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_can_cbs_rx_imd-response.c * @author foxBMS Team * @date 2021-04-22 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * @@ -55,16 +55,20 @@ /*========== Includes =======================================================*/ #include "unity.h" #include "Mockcan.h" +#include "Mockcan_helper.h" #include "Mockdatabase.h" #include "Mockdiag.h" #include "Mockfoxmath.h" #include "Mockimd.h" #include "Mockos.h" +#include "bender_iso165c_cfg.h" #include "database_cfg.h" #include "can_cbs_rx.h" -#include "can_helper.h" +#include "can_cbs_rx_imd-response.h" +#include "can_cfg_rx-message-definitions.h" +#include "test_assert_helper.h" /*========== Unit Testing Framework Directives ==============================*/ TEST_SOURCE_FILE("can_cbs_rx_imd-response.c") @@ -75,10 +79,18 @@ TEST_INCLUDE_PATH("../../src/app/driver/can/cbs/rx") TEST_INCLUDE_PATH("../../src/app/driver/config") TEST_INCLUDE_PATH("../../src/app/driver/foxmath") TEST_INCLUDE_PATH("../../src/app/driver/imd") +TEST_INCLUDE_PATH("../../src/app/driver/imd/bender/iso165c/config") TEST_INCLUDE_PATH("../../src/app/engine/diag") +TEST_INCLUDE_PATH("../../src/app/engine/sys_mon") TEST_INCLUDE_PATH("../../src/app/task/config") /*========== Definitions and Implementations for Unit Test ==================*/ +/* dummy data array filled with zero */ +const uint8_t testCanDataZeroArray[CAN_MAX_DLC] = {0}; + +const CAN_NODE_s can_node1 = { + .canNodeRegister = canREG1, +}; static DATA_BLOCK_CELL_VOLTAGE_s can_tableCellVoltages = {.header.uniqueId = DATA_BLOCK_ID_CELL_VOLTAGE}; static DATA_BLOCK_CELL_TEMPERATURE_s can_tableTemperatures = {.header.uniqueId = DATA_BLOCK_ID_CELL_TEMPERATURE}; @@ -126,5 +138,300 @@ void tearDown(void) { } /*========== Test Cases =====================================================*/ -void testDummy(void) { +/* test assertion */ +void testAssertion_CANRX_ImdResponse(void) { + CAN_MESSAGE_PROPERTIES_s testMessage = { + .id = CAN_MAX_11BIT_ID, /* invalid ID */ + .idType = CANRX_IMD_RESPONSE_ID_TYPE, + .dlc = CANRX_IMD_RESPONSE_DLC, + .endianness = CANRX_IMD_RESPONSE_ENDIANNESS, + }; + + /* test invalid ID*/ + TEST_ASSERT_FAIL_ASSERT(CANRX_ImdResponse(testMessage, testCanDataZeroArray, &can_kShim)); + + /* test invalid DLC*/ + testMessage.id = CANRX_IMD_RESPONSE_ID; + testMessage.dlc = 9u; + TEST_ASSERT_FAIL_ASSERT(CANRX_ImdResponse(testMessage, testCanDataZeroArray, &can_kShim)); + + /* test invalid endianness*/ + testMessage.dlc = CANRX_IMD_RESPONSE_DLC; + testMessage.endianness = CAN_BIG_ENDIAN; + TEST_ASSERT_FAIL_ASSERT(CANRX_ImdResponse(testMessage, testCanDataZeroArray, &can_kShim)); + + /* test can data is null pointer*/ + testMessage.endianness = CANRX_IMD_RESPONSE_ENDIANNESS; + TEST_ASSERT_FAIL_ASSERT(CANRX_ImdResponse(testMessage, NULL_PTR, &can_kShim)); + + /* test can shim is null pointer*/ + TEST_ASSERT_FAIL_ASSERT(CANRX_ImdResponse(testMessage, testCanDataZeroArray, NULL_PTR)); +} + +void testAssertion_CANRX_TransferImdResponseMessageToCanBuffer(void) { + CAN_BUFFER_ELEMENT_s testBuffer = {0}; + uint8_t testDlc = 9u; + /* test dlc to big */ + TEST_ASSERT_FAIL_ASSERT( + TEST_CANRX_TransferImdResponseMessageToCanBuffer(testDlc, testCanDataZeroArray, &testBuffer)); + + /* test can data is null pointer */ + testDlc = 6u; + TEST_ASSERT_FAIL_ASSERT(TEST_CANRX_TransferImdResponseMessageToCanBuffer(testDlc, NULL_PTR, &testBuffer)); + + /* test can buffer element is null pointer */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANRX_TransferImdResponseMessageToCanBuffer(testDlc, testCanDataZeroArray, NULL_PTR)); +} + +void testAssertion_CANRX_ImdResponseReadInsulationResistance(void) { + /* test can data is null pointer */ + TEST_ASSERT_FAIL_ASSERT(CANRX_ImdResponseReadInsulationResistance(NULL_PTR, &can_tableInsulation)); + + /* test data table is null pointer */ + TEST_ASSERT_FAIL_ASSERT(CANRX_ImdResponseReadInsulationResistance(testCanDataZeroArray, NULL_PTR)); +} + +void testAssertion_CANRX_ImdResponseCheckInsulationFaultTendency(void) { + /* test can data is null pointer */ + TEST_ASSERT_FAIL_ASSERT(CANRX_ImdResponseCheckInsulationFaultTendency(NULL_PTR, &can_tableInsulation)); + + /* test data table is null pointer */ + TEST_ASSERT_FAIL_ASSERT(CANRX_ImdResponseCheckInsulationFaultTendency(testCanDataZeroArray, NULL_PTR)); +} + +void testAssertion_CANRX_ImdResponseCheckRelayState(void) { + uint8_t relay = I165C_D_VIFC_HV_RELAIS_NEGATIVE; + uint8_t relayState = I165C_RELAY_STATE_OPEN; + + /* test can data is null pointer */ + TEST_ASSERT_FAIL_ASSERT(CANRX_ImdResponseCheckRelayState(NULL_PTR, relay, relayState)); + + /* test relay undefined */ + relay = 32u; + TEST_ASSERT_FAIL_ASSERT(CANRX_ImdResponseCheckRelayState(testCanDataZeroArray, relay, relayState)); + + /* test relay state undefined */ + relay = I165C_D_VIFC_HV_RELAIS_POSITIVE; + relayState = 2u; + TEST_ASSERT_FAIL_ASSERT(CANRX_ImdResponseCheckRelayState(testCanDataZeroArray, relay, relayState)); +} + +/* test functionality */ +void test_CANRX_ImdResponse(void) { + CAN_MESSAGE_PROPERTIES_s testMessage = { + .id = CANRX_IMD_RESPONSE_ID, + .idType = CANRX_IMD_RESPONSE_ID_TYPE, + .dlc = CANRX_IMD_RESPONSE_DLC, + .endianness = CANRX_IMD_RESPONSE_ENDIANNESS, + }; + CAN_BUFFER_ELEMENT_s canMessage = { + .canNode = I165C_CAN_NODE, + .id = testMessage.id, + .idType = testMessage.idType, + .data = {0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u}}; + MATH_MinimumOfTwoUint8_t_ExpectAndReturn(testMessage.dlc, CAN_MAX_DLC, testMessage.dlc); + OS_SendToBackOfQueue_ExpectAndReturn(*(can_kShim.pQueueImd), (void *)&canMessage, 0u, OS_SUCCESS); + CANRX_ImdResponse(testMessage, testCanDataZeroArray, &can_kShim); +} + +void test_CANRX_TransferImdResponseMessageToCanBuffer(void) { + CAN_BUFFER_ELEMENT_s testBuffer = { + .canNode = I165C_CAN_NODE, + .id = CANRX_IMD_RESPONSE_ID, + .idType = CANRX_IMD_RESPONSE_ID_TYPE, + .data = {0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u}}; + uint8_t testDlc = CANRX_IMD_RESPONSE_DLC; + uint8_t testData[CANRX_IMD_RESPONSE_DLC] = {0x12u, 0x34u, 0x56u, 0x78u, 0x9Au}; + + MATH_MinimumOfTwoUint8_t_ExpectAndReturn(testDlc, CAN_MAX_DLC, testDlc); + TEST_CANRX_TransferImdResponseMessageToCanBuffer(testDlc, testData, &testBuffer); + + TEST_ASSERT_EQUAL(0x12u, testBuffer.data[0u]); + TEST_ASSERT_EQUAL(0x34u, testBuffer.data[1u]); + TEST_ASSERT_EQUAL(0x56u, testBuffer.data[2u]); + TEST_ASSERT_EQUAL(0x78u, testBuffer.data[3u]); + TEST_ASSERT_EQUAL(0x9Au, testBuffer.data[4u]); + TEST_ASSERT_EQUAL(0x00u, testBuffer.data[5u]); + TEST_ASSERT_EQUAL(0x00u, testBuffer.data[6u]); + TEST_ASSERT_EQUAL(0x00u, testBuffer.data[7u]); +} + +void test_CANRX_ImdResponseReadInsulationResistance(void) { + uint8_t const canData[CANRX_IMD_RESPONSE_DLC] = {0u, 0x39u, 0x30u, 0u, 0u}; + uint64_t messageDataZero = 0u; + uint64_t messageData = 0x0039300000000000u; /* canData as an int */ + uint64_t signalDataZero = 0u; + uint64_t signalData = 0x3039u; + + CAN_RxGetMessageDataFromCanData_Expect(&messageDataZero, canData, CANRX_IMD_RESPONSE_ENDIANNESS); + CAN_RxGetMessageDataFromCanData_ReturnThruPtr_pMessage(&messageData); + CAN_RxGetSignalDataFromMessageData_Expect(messageData, 8u, 16u, &signalDataZero, CANRX_IMD_RESPONSE_ENDIANNESS); + CAN_RxGetSignalDataFromMessageData_ReturnThruPtr_pCanSignal(&signalData); + CANRX_ImdResponseReadInsulationResistance(canData, &can_tableInsulation); + + TEST_ASSERT_EQUAL(12345u, can_tableInsulation.insulationResistance_kOhm); +} + +void test_CANRX_ImdResponseCheckInsulationFaultTendency(void) { + /* bias to hv minus*/ + uint8_t canData[CANRX_IMD_RESPONSE_DLC] = {0u, 0u, 0u, I165C_BIAS_TO_HV_MINUS, 0u}; + uint64_t messageDataZero = 0u; + uint64_t messageData = 0x0000000100000000u; /* canData as an int */ + uint64_t signalDataZero = 0u; + uint64_t signalData = 0x01u; + + CAN_RxGetMessageDataFromCanData_Expect(&messageDataZero, canData, CANRX_IMD_RESPONSE_ENDIANNESS); + CAN_RxGetMessageDataFromCanData_ReturnThruPtr_pMessage(&messageData); + CAN_RxGetSignalDataFromMessageData_Expect(messageData, 24u, 8u, &signalDataZero, CANRX_IMD_RESPONSE_ENDIANNESS); + CAN_RxGetSignalDataFromMessageData_ReturnThruPtr_pCanSignal(&signalData); + CANRX_ImdResponseCheckInsulationFaultTendency(canData, &can_tableInsulation); + + TEST_ASSERT_EQUAL(true, can_tableInsulation.dfIsChassisShortToHvMinus); + TEST_ASSERT_EQUAL(false, can_tableInsulation.dfIsChassisShortToHvPlus); + + /* bias to hv plus*/ + canData[3u] = I165C_BIAS_TO_HV_PLUS; + messageData = 0x0000000200000000u; + signalData = 0x02u; + + CAN_RxGetMessageDataFromCanData_Expect(&messageDataZero, canData, CANRX_IMD_RESPONSE_ENDIANNESS); + CAN_RxGetMessageDataFromCanData_ReturnThruPtr_pMessage(&messageData); + CAN_RxGetSignalDataFromMessageData_Expect(messageData, 24u, 8u, &signalDataZero, CANRX_IMD_RESPONSE_ENDIANNESS); + CAN_RxGetSignalDataFromMessageData_ReturnThruPtr_pCanSignal(&signalData); + CANRX_ImdResponseCheckInsulationFaultTendency(canData, &can_tableInsulation); + + TEST_ASSERT_EQUAL(false, can_tableInsulation.dfIsChassisShortToHvMinus); + TEST_ASSERT_EQUAL(true, can_tableInsulation.dfIsChassisShortToHvPlus); + + /* no bias */ + canData[3u] = 0u; + messageData = 0u; + signalData = 0u; + + CAN_RxGetMessageDataFromCanData_Expect(&messageDataZero, canData, CANRX_IMD_RESPONSE_ENDIANNESS); + CAN_RxGetMessageDataFromCanData_ReturnThruPtr_pMessage(&messageData); + CAN_RxGetSignalDataFromMessageData_Expect(messageData, 24u, 8u, &signalDataZero, CANRX_IMD_RESPONSE_ENDIANNESS); + CAN_RxGetSignalDataFromMessageData_ReturnThruPtr_pCanSignal(&signalData); + CANRX_ImdResponseCheckInsulationFaultTendency(canData, &can_tableInsulation); + + TEST_ASSERT_EQUAL(false, can_tableInsulation.dfIsChassisShortToHvMinus); + TEST_ASSERT_EQUAL(false, can_tableInsulation.dfIsChassisShortToHvPlus); +} + +void test_CANRX_ImdResponseCheckRelayState(void) { + /* positive relay is closed*/ + uint8_t canData[CANRX_IMD_RESPONSE_DLC] = {0u, I165C_D_VIFC_HV_RELAIS_POSITIVE, 0u, I165C_RELAY_STATE_CLOSED, 0u}; + uint64_t messageDataZero = 0u; + uint64_t messageData = 0x0001000100000000u; /* canData as an int */ + uint64_t signalDataZero = 0u; + uint64_t signalData[2u] = {0u, 1u}; + + CAN_RxGetMessageDataFromCanData_Expect(&messageDataZero, canData, CANRX_IMD_RESPONSE_ENDIANNESS); + CAN_RxGetMessageDataFromCanData_ReturnThruPtr_pMessage(&messageData); + CAN_RxGetSignalDataFromMessageData_Expect(messageData, 8u, 16u, &signalDataZero, CANRX_IMD_RESPONSE_ENDIANNESS); + CAN_RxGetSignalDataFromMessageData_ReturnThruPtr_pCanSignal(&signalData[1u]); + CAN_RxGetSignalDataFromMessageData_Expect(messageData, 24u, 16u, &signalData[1u], CANRX_IMD_RESPONSE_ENDIANNESS); + CAN_RxGetSignalDataFromMessageData_ReturnThruPtr_pCanSignal(&signalData[1u]); + TEST_ASSERT_EQUAL( + true, CANRX_ImdResponseCheckRelayState(canData, I165C_D_VIFC_HV_RELAIS_POSITIVE, I165C_RELAY_STATE_CLOSED)); + CAN_RxGetMessageDataFromCanData_Expect(&messageDataZero, canData, CANRX_IMD_RESPONSE_ENDIANNESS); + CAN_RxGetMessageDataFromCanData_ReturnThruPtr_pMessage(&messageData); + CAN_RxGetSignalDataFromMessageData_Expect(messageData, 8u, 16u, &signalDataZero, CANRX_IMD_RESPONSE_ENDIANNESS); + CAN_RxGetSignalDataFromMessageData_ReturnThruPtr_pCanSignal(&signalData[1u]); + CAN_RxGetSignalDataFromMessageData_Expect(messageData, 24u, 16u, &signalData[1u], CANRX_IMD_RESPONSE_ENDIANNESS); + CAN_RxGetSignalDataFromMessageData_ReturnThruPtr_pCanSignal(&signalData[1u]); + TEST_ASSERT_EQUAL( + false, CANRX_ImdResponseCheckRelayState(canData, I165C_D_VIFC_HV_RELAIS_NEGATIVE, I165C_RELAY_STATE_CLOSED)); + CAN_RxGetMessageDataFromCanData_Expect(&messageDataZero, canData, CANRX_IMD_RESPONSE_ENDIANNESS); + CAN_RxGetMessageDataFromCanData_ReturnThruPtr_pMessage(&messageData); + CAN_RxGetSignalDataFromMessageData_Expect(messageData, 8u, 16u, &signalDataZero, CANRX_IMD_RESPONSE_ENDIANNESS); + CAN_RxGetSignalDataFromMessageData_ReturnThruPtr_pCanSignal(&signalData[1u]); + CAN_RxGetSignalDataFromMessageData_Expect(messageData, 24u, 16u, &signalData[1u], CANRX_IMD_RESPONSE_ENDIANNESS); + CAN_RxGetSignalDataFromMessageData_ReturnThruPtr_pCanSignal(&signalData[1u]); + TEST_ASSERT_EQUAL( + false, CANRX_ImdResponseCheckRelayState(canData, I165C_D_VIFC_HV_RELAIS_POSITIVE, I165C_RELAY_STATE_OPEN)); + + /* positive relay is open */ + canData[3u] = I165C_RELAY_STATE_OPEN; + messageData = 0x00010000000000u; + CAN_RxGetMessageDataFromCanData_Expect(&messageDataZero, canData, CANRX_IMD_RESPONSE_ENDIANNESS); + CAN_RxGetMessageDataFromCanData_ReturnThruPtr_pMessage(&messageData); + CAN_RxGetSignalDataFromMessageData_Expect(messageData, 8u, 16u, &signalDataZero, CANRX_IMD_RESPONSE_ENDIANNESS); + CAN_RxGetSignalDataFromMessageData_ReturnThruPtr_pCanSignal(&signalData[1u]); + CAN_RxGetSignalDataFromMessageData_Expect(messageData, 24u, 16u, &signalData[1u], CANRX_IMD_RESPONSE_ENDIANNESS); + CAN_RxGetSignalDataFromMessageData_ReturnThruPtr_pCanSignal(&signalData[0u]); + TEST_ASSERT_EQUAL( + true, CANRX_ImdResponseCheckRelayState(canData, I165C_D_VIFC_HV_RELAIS_POSITIVE, I165C_RELAY_STATE_OPEN)); + CAN_RxGetMessageDataFromCanData_Expect(&messageDataZero, canData, CANRX_IMD_RESPONSE_ENDIANNESS); + CAN_RxGetMessageDataFromCanData_ReturnThruPtr_pMessage(&messageData); + CAN_RxGetSignalDataFromMessageData_Expect(messageData, 8u, 16u, &signalDataZero, CANRX_IMD_RESPONSE_ENDIANNESS); + CAN_RxGetSignalDataFromMessageData_ReturnThruPtr_pCanSignal(&signalData[1u]); + CAN_RxGetSignalDataFromMessageData_Expect(messageData, 24u, 16u, &signalData[1u], CANRX_IMD_RESPONSE_ENDIANNESS); + CAN_RxGetSignalDataFromMessageData_ReturnThruPtr_pCanSignal(&signalData[0u]); + TEST_ASSERT_EQUAL( + false, CANRX_ImdResponseCheckRelayState(canData, I165C_D_VIFC_HV_RELAIS_POSITIVE, I165C_RELAY_STATE_CLOSED)); + CAN_RxGetMessageDataFromCanData_Expect(&messageDataZero, canData, CANRX_IMD_RESPONSE_ENDIANNESS); + CAN_RxGetMessageDataFromCanData_ReturnThruPtr_pMessage(&messageData); + CAN_RxGetSignalDataFromMessageData_Expect(messageData, 8u, 16u, &signalDataZero, CANRX_IMD_RESPONSE_ENDIANNESS); + CAN_RxGetSignalDataFromMessageData_ReturnThruPtr_pCanSignal(&signalData[1u]); + CAN_RxGetSignalDataFromMessageData_Expect(messageData, 24u, 16u, &signalData[1u], CANRX_IMD_RESPONSE_ENDIANNESS); + CAN_RxGetSignalDataFromMessageData_ReturnThruPtr_pCanSignal(&signalData[0u]); + TEST_ASSERT_EQUAL( + false, CANRX_ImdResponseCheckRelayState(canData, I165C_D_VIFC_HV_RELAIS_NEGATIVE, I165C_RELAY_STATE_OPEN)); + + /* negative relay is open */ + canData[1u] = I165C_D_VIFC_HV_RELAIS_NEGATIVE; + messageData = 0u; + CAN_RxGetMessageDataFromCanData_Expect(&messageDataZero, canData, CANRX_IMD_RESPONSE_ENDIANNESS); + CAN_RxGetMessageDataFromCanData_ReturnThruPtr_pMessage(&messageData); + CAN_RxGetSignalDataFromMessageData_Expect(messageData, 8u, 16u, &signalDataZero, CANRX_IMD_RESPONSE_ENDIANNESS); + CAN_RxGetSignalDataFromMessageData_ReturnThruPtr_pCanSignal(&signalData[0u]); + CAN_RxGetSignalDataFromMessageData_Expect(messageData, 24u, 16u, &signalData[0u], CANRX_IMD_RESPONSE_ENDIANNESS); + CAN_RxGetSignalDataFromMessageData_ReturnThruPtr_pCanSignal(&signalData[0u]); + TEST_ASSERT_EQUAL( + true, CANRX_ImdResponseCheckRelayState(canData, I165C_D_VIFC_HV_RELAIS_NEGATIVE, I165C_RELAY_STATE_OPEN)); + CAN_RxGetMessageDataFromCanData_Expect(&messageDataZero, canData, CANRX_IMD_RESPONSE_ENDIANNESS); + CAN_RxGetMessageDataFromCanData_ReturnThruPtr_pMessage(&messageData); + CAN_RxGetSignalDataFromMessageData_Expect(messageData, 8u, 16u, &signalDataZero, CANRX_IMD_RESPONSE_ENDIANNESS); + CAN_RxGetSignalDataFromMessageData_ReturnThruPtr_pCanSignal(&signalData[0u]); + CAN_RxGetSignalDataFromMessageData_Expect(messageData, 24u, 16u, &signalData[0u], CANRX_IMD_RESPONSE_ENDIANNESS); + CAN_RxGetSignalDataFromMessageData_ReturnThruPtr_pCanSignal(&signalData[0u]); + TEST_ASSERT_EQUAL( + false, CANRX_ImdResponseCheckRelayState(canData, I165C_D_VIFC_HV_RELAIS_NEGATIVE, I165C_RELAY_STATE_CLOSED)); + CAN_RxGetMessageDataFromCanData_Expect(&messageDataZero, canData, CANRX_IMD_RESPONSE_ENDIANNESS); + CAN_RxGetMessageDataFromCanData_ReturnThruPtr_pMessage(&messageData); + CAN_RxGetSignalDataFromMessageData_Expect(messageData, 8u, 16u, &signalDataZero, CANRX_IMD_RESPONSE_ENDIANNESS); + CAN_RxGetSignalDataFromMessageData_ReturnThruPtr_pCanSignal(&signalData[0u]); + CAN_RxGetSignalDataFromMessageData_Expect(messageData, 24u, 16u, &signalData[0u], CANRX_IMD_RESPONSE_ENDIANNESS); + CAN_RxGetSignalDataFromMessageData_ReturnThruPtr_pCanSignal(&signalData[0u]); + TEST_ASSERT_EQUAL( + false, CANRX_ImdResponseCheckRelayState(canData, I165C_D_VIFC_HV_RELAIS_POSITIVE, I165C_RELAY_STATE_OPEN)); + + /* negative relay is closed */ + canData[3u] = I165C_RELAY_STATE_CLOSED; + messageData = 0x0000000001000000u; + CAN_RxGetMessageDataFromCanData_Expect(&messageDataZero, canData, CANRX_IMD_RESPONSE_ENDIANNESS); + CAN_RxGetMessageDataFromCanData_ReturnThruPtr_pMessage(&messageData); + CAN_RxGetSignalDataFromMessageData_Expect(messageData, 8u, 16u, &signalDataZero, CANRX_IMD_RESPONSE_ENDIANNESS); + CAN_RxGetSignalDataFromMessageData_ReturnThruPtr_pCanSignal(&signalData[0u]); + CAN_RxGetSignalDataFromMessageData_Expect(messageData, 24u, 16u, &signalData[0u], CANRX_IMD_RESPONSE_ENDIANNESS); + CAN_RxGetSignalDataFromMessageData_ReturnThruPtr_pCanSignal(&signalData[1u]); + TEST_ASSERT_EQUAL( + true, CANRX_ImdResponseCheckRelayState(canData, I165C_D_VIFC_HV_RELAIS_NEGATIVE, I165C_RELAY_STATE_CLOSED)); + CAN_RxGetMessageDataFromCanData_Expect(&messageDataZero, canData, CANRX_IMD_RESPONSE_ENDIANNESS); + CAN_RxGetMessageDataFromCanData_ReturnThruPtr_pMessage(&messageData); + CAN_RxGetSignalDataFromMessageData_Expect(messageData, 8u, 16u, &signalDataZero, CANRX_IMD_RESPONSE_ENDIANNESS); + CAN_RxGetSignalDataFromMessageData_ReturnThruPtr_pCanSignal(&signalData[0u]); + CAN_RxGetSignalDataFromMessageData_Expect(messageData, 24u, 16u, &signalData[0u], CANRX_IMD_RESPONSE_ENDIANNESS); + CAN_RxGetSignalDataFromMessageData_ReturnThruPtr_pCanSignal(&signalData[1u]); + TEST_ASSERT_EQUAL( + false, CANRX_ImdResponseCheckRelayState(canData, I165C_D_VIFC_HV_RELAIS_POSITIVE, I165C_RELAY_STATE_CLOSED)); + CAN_RxGetMessageDataFromCanData_Expect(&messageDataZero, canData, CANRX_IMD_RESPONSE_ENDIANNESS); + CAN_RxGetMessageDataFromCanData_ReturnThruPtr_pMessage(&messageData); + CAN_RxGetSignalDataFromMessageData_Expect(messageData, 8u, 16u, &signalDataZero, CANRX_IMD_RESPONSE_ENDIANNESS); + CAN_RxGetSignalDataFromMessageData_ReturnThruPtr_pCanSignal(&signalData[0u]); + CAN_RxGetSignalDataFromMessageData_Expect(messageData, 24u, 16u, &signalData[0u], CANRX_IMD_RESPONSE_ENDIANNESS); + CAN_RxGetSignalDataFromMessageData_ReturnThruPtr_pCanSignal(&signalData[1u]); + TEST_ASSERT_EQUAL( + false, CANRX_ImdResponseCheckRelayState(canData, I165C_D_VIFC_HV_RELAIS_NEGATIVE, I165C_RELAY_STATE_OPEN)); } diff --git a/tests/unit/app/driver/can/cbs/test_can_helper.c b/tests/unit/app/driver/can/cbs/test_can_helper.c index 33c99592..0ec0d088 100644 --- a/tests/unit/app/driver/can/cbs/test_can_helper.c +++ b/tests/unit/app/driver/can/cbs/test_can_helper.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_can_helper.c * @author foxBMS Team * @date 2021-04-22 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * @@ -63,7 +63,7 @@ #include "database_cfg.h" -#include "can_cbs_tx.h" +#include "can_cbs_tx_cyclic.h" #include "can_helper.h" #include "test_assert_helper.h" @@ -73,11 +73,13 @@ /*========== Unit Testing Framework Directives ==============================*/ TEST_INCLUDE_PATH("../../src/app/driver/can") TEST_INCLUDE_PATH("../../src/app/driver/can/cbs") -TEST_INCLUDE_PATH("../../src/app/driver/can/cbs/tx") +TEST_INCLUDE_PATH("../../src/app/driver/can/cbs/tx-cyclic") TEST_INCLUDE_PATH("../../src/app/driver/config") TEST_INCLUDE_PATH("../../src/app/driver/foxmath") +TEST_INCLUDE_PATH("../../src/app/driver/fram") TEST_INCLUDE_PATH("../../src/app/driver/imd") TEST_INCLUDE_PATH("../../src/app/engine/diag") +TEST_INCLUDE_PATH("../../src/app/engine/sys_mon") TEST_INCLUDE_PATH("../../src/app/task/config") /*========== Definitions and Implementations for Unit Test ==================*/ diff --git a/tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_crash-dump.c b/tests/unit/app/driver/can/cbs/tx-async/test_can_cbs_tx_crash-dump.c similarity index 70% rename from tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_crash-dump.c rename to tests/unit/app/driver/can/cbs/tx-async/test_can_cbs_tx_crash-dump.c index 73027073..90715ed7 100644 --- a/tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_crash-dump.c +++ b/tests/unit/app/driver/can/cbs/tx-async/test_can_cbs_tx_crash-dump.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_can_cbs_tx_crash-dump.c * @author foxBMS Team * @date 2023-02-09 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * @@ -55,19 +55,20 @@ /*========== Includes =======================================================*/ #include "unity.h" #include "Mockcan.h" +#include "Mockcan_helper.h" #include "can_cfg.h" -#include "can_cbs_tx.h" -#include "can_cfg_tx-message-definitions.h" -#include "can_helper.h" +#include "can_cbs_tx_crash-dump.h" +#include "can_cfg_tx-async-message-definitions.h" +#include "test_assert_helper.h" /*========== Unit Testing Framework Directives ==============================*/ TEST_SOURCE_FILE("can_cbs_tx_crash-dump.c") TEST_INCLUDE_PATH("../../src/app/driver/can") TEST_INCLUDE_PATH("../../src/app/driver/can/cbs") -TEST_INCLUDE_PATH("../../src/app/driver/can/cbs/tx") +TEST_INCLUDE_PATH("../../src/app/driver/can/cbs/tx-async") TEST_INCLUDE_PATH("../../src/app/driver/config") TEST_INCLUDE_PATH("../../src/app/driver/foxmath") TEST_INCLUDE_PATH("../../src/app/driver/rtc") @@ -86,6 +87,18 @@ void tearDown(void) { } /*========== Test Cases =====================================================*/ +void testAssertion_CANTX_CrashDump(void) { + TEST_ASSERT_FAIL_ASSERT(CANTX_CrashDump(CANTX_FATAL_ERRORS_ACTIONS_MAX_E)); +} + +void test_CANTX_CrashDump(void) { + uint64_t testMessageData = 0u; + uint8_t testCanData[CANTX_CRASH_DUMP_DLC] = {0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u}; -void testCANTX_CrashDump(void) { + /* stack overflow message */ + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData, 7u, 8u, 0u, CANTX_CRASH_DUMP_ENDIANNESS); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData, testCanData, CANTX_CRASH_DUMP_ENDIANNESS); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, CANTX_CRASH_DUMP_ID, CANTX_CRASH_DUMP_ID_TYPE, testCanData, STD_OK); + CANTX_CrashDump(CANTX_FATAL_ERRORS_ACTIONS_STACK_OVERFLOW); } diff --git a/tests/unit/app/driver/can/cbs/tx-async/test_can_cbs_tx_debug-build-configuration.c b/tests/unit/app/driver/can/cbs/tx-async/test_can_cbs_tx_debug-build-configuration.c new file mode 100644 index 00000000..a13eb02d --- /dev/null +++ b/tests/unit/app/driver/can/cbs/tx-async/test_can_cbs_tx_debug-build-configuration.c @@ -0,0 +1,3214 @@ +/** + * + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * We kindly request you to use one or more of the following phrases to refer to + * foxBMS in your hardware, software, documentation or advertising materials: + * + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" + * + */ + +/** + * @file test_can_cbs_tx_debug-build-configuration.c + * @author foxBMS Team + * @date 2023-02-09 (date of creation) + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup UNIT_TEST_IMPLEMENTATION + * @prefix TEST + * + * @brief Test of some module + * + */ + +/*========== Includes =======================================================*/ +#include "unity.h" +#include "Mockcan.h" +#include "Mockcan_helper.h" + +#include "battery_cell_cfg.h" +#include "battery_system_cfg.h" +#include "can_cfg.h" +#include "version_cfg.h" + +#include "can_cbs_tx_debug-build-configuration.h" +#include "can_cfg_tx-async-message-definitions.h" +#include "test_assert_helper.h" + +/*========== Unit Testing Framework Directives ==============================*/ +TEST_SOURCE_FILE("can_cbs_tx_debug-build-configuration.c") + +TEST_INCLUDE_PATH("../../src/app/application/config") +TEST_INCLUDE_PATH("../../src/app/driver/can") +TEST_INCLUDE_PATH("../../src/app/driver/can/cbs") +TEST_INCLUDE_PATH("../../src/app/driver/can/cbs/tx-async") +TEST_INCLUDE_PATH("../../src/app/driver/config") +TEST_INCLUDE_PATH("../../src/app/driver/foxmath") +TEST_INCLUDE_PATH("../../src/app/driver/rtc") +TEST_INCLUDE_PATH("../../src/app/main/include/config") +TEST_INCLUDE_PATH("../../src/app/task/config") +TEST_INCLUDE_PATH("../../src/app/task/ftask") + +/*========== Definitions and Implementations for Unit Test ==================*/ +uint64_t testMessageData[9u] = {0u, 1u, 2u, 3u, 4u, 5u, 6u, 7u, 8u}; + +float_t testSignalData[4u] = {0u, 1u, 2u, 3u}; + +static const CAN_SIGNAL_TYPE_s signalOpenWirePeriod = {0u, 0u, 1000.0f, 0.0f, 0.0f, 4095000.0f}; + +static const CAN_SIGNAL_TYPE_s signalBatteryCellTemperature = {0u, 0u, 1.0f, 0.0f, -131072.0f, 131071.0f}; + +#define TEST_PLACEHOLDER_CONVERTED_BOOL (0u) + +/* dummy data array filled with zero */ +uint8_t testCanDataZeroArray[CAN_MAX_DLC] = {0}; + +/* Dummy for version file implementation */ +const VER_BUILD_CONFIGURATION_s ver_foxbmsBuildConfiguration = { + .socAlgorithm = SOC_ALGORITHM_NONE, + .soeAlgorithm = SOE_ALGORITHM_COUNTING, + .sofAlgorithm = SOF_ALGORITHM_TRAPEZOID, + .sohAlgorithm = SOH_ALGORITHM_DEBUG, + .imdName = IMD_BENDER_ISO_165C, + .balancingStrategy = BALANCING_STRATEGY_NONE, + .rtos = FREERTOS, + .afeName = LTC_LTC6813_1, + .temperatureSensorName = EPC00, + .temperatureSensorMethod = POLYNOMIAL, +}; + +OS_QUEUE ftsk_imdCanDataQueue = NULL_PTR; + +/*========== Setup and Teardown =============================================*/ +void setUp(void) { +} + +void tearDown(void) { +} + +/*========== Test Cases =====================================================*/ + +/** + * @brief Testing CANTX_DebugBuildConfiguration + * @details The following cases need to be tested: + * - Argument validation: + * - None + * - Routine validation: + * - RT1/5: Application messages aren't queued successfully + * - RT2/5: Slave messages aren't queued successfully + * - RT3/5: Battery cell messages aren't queued successfully + * - RT4/5: Battery system messages aren't queued successfully + * - RT5/5: All messages are queued successfully + */ +void testCANTX_DebugBuildConfiguration(void) { + /* ======= Routine tests =============================================== */ + uint8_t testCanDataFilled[CAN_MAX_DLC] = {0x12, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF}; + /* ======= RT1/5: Test implementation */ + /* Messages sent by CANTX_SendApplicationConfiguration */ + CAN_TxSetMessageDataWithSignalData_Ignore(); + CAN_TxPrepareSignalData_Ignore(); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[0u], testCanDataZeroArray, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_NOT_OK); + /* ======= RT1/5: Call function under test */ + STD_RETURN_TYPE_e testResult = CANTX_DebugBuildConfiguration(); + /* ======= RT1/5: Test output verification */ + TEST_ASSERT_EQUAL(STD_NOT_OK, testResult); + + /* ======= RT2/5: Test implementation */ + /* Messages sent by CANTX_SendApplicationConfiguration */ + CAN_TxSetMessageDataWithSignalData_Ignore(); + CAN_TxPrepareSignalData_Ignore(); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[0u], testCanDataZeroArray, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + /* Messages sent by CANTX_SendSlaveConfiguration */ + CAN_TxSetMessageDataWithSignalData_Ignore(); + CAN_TxPrepareSignalData_Ignore(); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[0u], testCanDataZeroArray, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_NOT_OK); + /* ======= RT2/5: Call function under test */ + testResult = CANTX_DebugBuildConfiguration(); + /* ======= RT2/5: Test output verification */ + TEST_ASSERT_EQUAL(STD_NOT_OK, testResult); + + /* ======= RT3/5: Test implementation */ + /* Messages sent by CANTX_SendApplicationConfiguration */ + CAN_TxSetMessageDataWithSignalData_Ignore(); + CAN_TxPrepareSignalData_Ignore(); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[0u], testCanDataZeroArray, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + /* Messages sent by CANTX_SendSlaveConfiguration */ + CAN_TxSetMessageDataWithSignalData_Ignore(); + CAN_TxPrepareSignalData_Ignore(); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[0u], testCanDataZeroArray, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetMessageDataWithSignalData_Ignore(); + CAN_TxPrepareSignalData_Ignore(); + /* Messages sent by CANTX_SendBatteryCellConfiguration */ + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[0u], testCanDataZeroArray, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_NOT_OK); + /* ======= RT3/5: Call function under test */ + testResult = CANTX_DebugBuildConfiguration(); + /* ======= RT3/5: Test output verification */ + TEST_ASSERT_EQUAL(STD_NOT_OK, testResult); + + /* ======= RT4/5: Test implementation */ + /* Messages sent by CANTX_SendApplicationConfiguration */ + CAN_TxSetMessageDataWithSignalData_Ignore(); + CAN_TxPrepareSignalData_Ignore(); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[0u], testCanDataZeroArray, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + /* Messages sent by CANTX_SendSlaveConfiguration */ + CAN_TxSetMessageDataWithSignalData_Ignore(); + CAN_TxPrepareSignalData_Ignore(); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[0u], testCanDataZeroArray, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetMessageDataWithSignalData_Ignore(); + CAN_TxPrepareSignalData_Ignore(); + /* Messages sent by CANTX_SendBatteryCellConfiguration */ + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[0u], testCanDataZeroArray, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[0u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[0u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[0u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[0u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[0u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[0u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[0u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[0u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + /* Messages sent by CANTX_SendBatterySystemConfiguration */ + CAN_ConvertBooleanToInteger_IgnoreAndReturn(TEST_PLACEHOLDER_CONVERTED_BOOL); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[0u], testCanDataZeroArray, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_NOT_OK); + /* ======= RT4/5: Call function under test */ + testResult = CANTX_DebugBuildConfiguration(); + /* ======= RT4/5: Test output verification */ + TEST_ASSERT_EQUAL(STD_NOT_OK, testResult); + + /* ======= RT5/5: Test implementation */ + /* Messages sent by CANTX_SendApplicationConfiguration */ + CAN_TxSetMessageDataWithSignalData_Ignore(); + CAN_TxPrepareSignalData_Ignore(); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[0u], testCanDataZeroArray, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + /* Messages sent by CANTX_SendSlaveConfiguration */ + CAN_TxSetMessageDataWithSignalData_Ignore(); + CAN_TxPrepareSignalData_Ignore(); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[0u], testCanDataZeroArray, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + /* Messages sent by CANTX_SendBatteryCellConfiguration */ + CAN_TxSetMessageDataWithSignalData_Ignore(); + CAN_TxPrepareSignalData_Ignore(); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[0u], testCanDataZeroArray, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[0u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[0u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[0u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[0u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[0u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[0u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[0u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[0u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + /* Messages sent by CANTX_SendBatterySystemConfiguration */ + CAN_ConvertBooleanToInteger_IgnoreAndReturn(TEST_PLACEHOLDER_CONVERTED_BOOL); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[0u], testCanDataZeroArray, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[0u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[0u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[0u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[0u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[0u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[0u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[0u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + /* ======= RT5/5: Call function under test */ + testResult = CANTX_DebugBuildConfiguration(); + /* ======= RT5/5: Test output verification */ + TEST_ASSERT_EQUAL(STD_OK, testResult); +} + +/** + * @brief Testing CANTX_SendApplicationConfiguration + * @details The following cases need to be tested: + * - Argument validation: + * - None + * - Routine validation: + * - RT1/1: Function sets expected values in the message data and sends message + */ +void testCANTX_SendApplicationConfiguration(void) { + /* TODO when application message is implemented*/ + /* ======= Routine tests =============================================== */ + uint8_t testCanDataFilled[CAN_MAX_DLC] = {0x12, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF}; + /* ======= RT1/1: Test implementation */ + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x10u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[1u], 15u, 4u, ver_foxbmsBuildConfiguration.socAlgorithm, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[2u]); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[2u], 11u, 4u, ver_foxbmsBuildConfiguration.soeAlgorithm, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[3u]); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[3u], 23u, 4u, ver_foxbmsBuildConfiguration.sofAlgorithm, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[4u]); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[4u], 19u, 4u, ver_foxbmsBuildConfiguration.sohAlgorithm, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[5u]); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[5u], 31u, 4u, ver_foxbmsBuildConfiguration.balancingStrategy, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[6u]); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[6u], 27u, 4u, ver_foxbmsBuildConfiguration.imdName, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[7u]); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[7u], 39u, 4u, ver_foxbmsBuildConfiguration.rtos, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[8u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[8u], testCanDataZeroArray, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + /* ======= RT1/1: Call function under test */ + STD_RETURN_TYPE_e testResult = TEST_CANTX_SendApplicationConfiguration(); + /* ======= RT1/1: Test output verification */ + TEST_ASSERT_EQUAL(STD_OK, testResult); +} + +/** + * @brief Testing CANTX_SendSlaveConfiguration + * @details The following cases need to be tested: + * - Argument validation: + * - None + * - Routine validation: + * - RT1/1: Function sets expected values in the message data and sends message + */ +void testCANTX_SendSlaveConfiguration(void) { + /* TODO when slave message is implemented*/ + /* ======= Routine tests =============================================== */ + uint8_t testCanDataFilled[CAN_MAX_DLC] = {0x12, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF}; + /* ======= RT1/1: Test implementation */ + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x00u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[1u], 15u, 8u, ver_foxbmsBuildConfiguration.afeName, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[2u]); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[2u], 23u, 8u, ver_foxbmsBuildConfiguration.temperatureSensorName, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[3u]); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[3u], 31u, 8u, ver_foxbmsBuildConfiguration.temperatureSensorMethod, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[4u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[4u], testCanDataZeroArray, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + /* ======= RT1/1: Call function under test */ + STD_RETURN_TYPE_e testResult = TEST_CANTX_SendSlaveConfiguration(); + /* ======= RT1/1: Test output verification */ + TEST_ASSERT_EQUAL(STD_OK, testResult); +} + +/** + * @brief Testing CANTX_SendBatteryCellConfiguration + * @details The following cases need to be tested: + * - Argument validation: + * - None + * - Routine validation: + * - RT01/10: CANTX_MUX_BATTERY_CELL multiplexer message isn't queued successfully + * - RT02/10: CANTX_MUX_BATTERY_CELL_MAX_CHARGE_CURRENT multiplexer message isn't queued successfully + * - RT03/10: CANTX_MUX_BATTERY_CELL_MAX_CHARGE_TEMPERATURE multiplexer message isn't queued successfully + * - RT04/10: CANTX_MUX_BATTERY_CELL_MAX_DISCHARGE_CURRENT multiplexer message isn't queued successfully + * - RT05/10: CANTX_MUX_BATTERY_CELL_MAX_DISCHARGE_TEMPERATURE multiplexer message isn't queued successfully + * - RT06/10: CANTX_MUX_BATTERY_CELL_MAX_VOLTAGE multiplexer message isn't queued successfully + * - RT07/10: CANTX_MUX_BATTERY_CELL_MIN_CHARGE_TEMPERATURE multiplexer message isn't queued successfully + * - RT08/10: CANTX_MUX_BATTERY_CELL_MIN_DISCHARGE_TEMPERATURE multiplexer message isn't queued successfully + * - RT09/10: CANTX_MUX_BATTERY_CELL_MIN_VOLTAGE multiplexer message isn't queued successfully + * - RT10/10: All messages are queued successfully + */ +void testCANTX_SendBatteryCellConfiguration(void) { + /* ======= Routine tests =============================================== */ + uint8_t testCanDataFilled[CAN_MAX_DLC] = {0x12, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF}; + float_t temperatureMaxChargeSignals[3u] = { + (float_t)BC_TEMPERATURE_MAX_CHARGE_MSL_ddegC, + (float_t)BC_TEMPERATURE_MAX_CHARGE_RSL_ddegC, + (float_t)BC_TEMPERATURE_MAX_CHARGE_MOL_ddegC}; + float_t temperatureMaxDischargeSignals[3u] = { + (float_t)BC_TEMPERATURE_MAX_DISCHARGE_MSL_ddegC, + (float_t)BC_TEMPERATURE_MAX_DISCHARGE_RSL_ddegC, + (float_t)BC_TEMPERATURE_MAX_DISCHARGE_MOL_ddegC}; + float_t temperatureMinChargeSignals[3u] = { + (float_t)BC_TEMPERATURE_MIN_CHARGE_MSL_ddegC, + (float_t)BC_TEMPERATURE_MIN_CHARGE_RSL_ddegC, + (float_t)BC_TEMPERATURE_MIN_CHARGE_MOL_ddegC}; + float_t temperatureMinDischargeSignals[3u] = { + (float_t)BC_TEMPERATURE_MIN_DISCHARGE_MSL_ddegC, + (float_t)BC_TEMPERATURE_MIN_DISCHARGE_RSL_ddegC, + (float_t)BC_TEMPERATURE_MIN_DISCHARGE_MOL_ddegC}; + /* ======= RT01/10: Test implementation */ + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x20u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 15u, 16u, BC_VOLTAGE_NOMINAL_mV, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 31u, 16u, BC_VOLTAGE_DEEP_DISCHARGE_mV, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 47u, 16u, BC_CAPACITY_mAh, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 63u, 8u, BC_ENERGY_Wh, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataZeroArray, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_NOT_OK); + /* ======= RT01/10: Call function under test */ + STD_RETURN_TYPE_e testResult = TEST_CANTX_SendBatteryCellConfiguration(); + /* ======= RT01/10: Test output verification */ + TEST_ASSERT_EQUAL(STD_NOT_OK, testResult); + + /* ======= RT02/10: Test implementation */ + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x20u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 15u, 16u, BC_VOLTAGE_NOMINAL_mV, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 31u, 16u, BC_VOLTAGE_DEEP_DISCHARGE_mV, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 47u, 16u, BC_CAPACITY_mAh, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 63u, 8u, BC_ENERGY_Wh, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataZeroArray, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x21u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 15u, 18u, BC_CURRENT_MAX_CHARGE_MSL_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 29u, 18u, BC_CURRENT_MAX_CHARGE_RSL_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 43u, 18u, BC_CURRENT_MAX_CHARGE_MOL_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_NOT_OK); + /* ======= RT02/10: Call function under test */ + testResult = TEST_CANTX_SendBatteryCellConfiguration(); + /* ======= RT02/10: Test output verification */ + TEST_ASSERT_EQUAL(STD_NOT_OK, testResult); + + /* ======= RT03/10: Test implementation */ + CAN_TxPrepareSignalData_Ignore(); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x20u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 15u, 16u, BC_VOLTAGE_NOMINAL_mV, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 31u, 16u, BC_VOLTAGE_DEEP_DISCHARGE_mV, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 47u, 16u, BC_CAPACITY_mAh, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 63u, 8u, BC_ENERGY_Wh, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataZeroArray, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x21u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 15u, 18u, BC_CURRENT_MAX_CHARGE_MSL_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 29u, 18u, BC_CURRENT_MAX_CHARGE_RSL_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 43u, 18u, BC_CURRENT_MAX_CHARGE_MOL_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x22u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 15u, 18u, temperatureMaxChargeSignals[0u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 29u, 18u, temperatureMaxChargeSignals[1u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 43u, 18u, temperatureMaxChargeSignals[2u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_NOT_OK); + /* ======= RT03/10: Call function under test */ + testResult = TEST_CANTX_SendBatteryCellConfiguration(); + /* ======= RT03/10: Test output verification */ + TEST_ASSERT_EQUAL(STD_NOT_OK, testResult); + + /* ======= RT04/10: Test implementation */ + CAN_TxPrepareSignalData_Ignore(); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x20u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 15u, 16u, BC_VOLTAGE_NOMINAL_mV, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 31u, 16u, BC_VOLTAGE_DEEP_DISCHARGE_mV, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 47u, 16u, BC_CAPACITY_mAh, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 63u, 8u, BC_ENERGY_Wh, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataZeroArray, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x21u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 15u, 18u, BC_CURRENT_MAX_CHARGE_MSL_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 29u, 18u, BC_CURRENT_MAX_CHARGE_RSL_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 43u, 18u, BC_CURRENT_MAX_CHARGE_MOL_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x22u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 15u, 18u, temperatureMaxChargeSignals[0u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 29u, 18u, temperatureMaxChargeSignals[1u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 43u, 18u, temperatureMaxChargeSignals[2u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x23u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 15u, 18u, BC_CURRENT_MAX_DISCHARGE_MSL_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 29u, 18u, BC_CURRENT_MAX_DISCHARGE_RSL_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 43u, 18u, BC_CURRENT_MAX_DISCHARGE_MOL_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_NOT_OK); + /* ======= RT04/10: Call function under test */ + testResult = TEST_CANTX_SendBatteryCellConfiguration(); + /* ======= RT04/10: Test output verification */ + TEST_ASSERT_EQUAL(STD_NOT_OK, testResult); + + /* ======= RT05/10: Test implementation */ + CAN_TxPrepareSignalData_Ignore(); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x20u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 15u, 16u, BC_VOLTAGE_NOMINAL_mV, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 31u, 16u, BC_VOLTAGE_DEEP_DISCHARGE_mV, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 47u, 16u, BC_CAPACITY_mAh, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 63u, 8u, BC_ENERGY_Wh, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataZeroArray, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x21u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 15u, 18u, BC_CURRENT_MAX_CHARGE_MSL_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 29u, 18u, BC_CURRENT_MAX_CHARGE_RSL_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 43u, 18u, BC_CURRENT_MAX_CHARGE_MOL_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x22u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 15u, 18u, temperatureMaxChargeSignals[0u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 29u, 18u, temperatureMaxChargeSignals[1u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 43u, 18u, temperatureMaxChargeSignals[2u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x23u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 15u, 18u, BC_CURRENT_MAX_DISCHARGE_MSL_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 29u, 18u, BC_CURRENT_MAX_DISCHARGE_RSL_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 43u, 18u, BC_CURRENT_MAX_DISCHARGE_MOL_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x24u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 15u, 18u, temperatureMaxDischargeSignals[0u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 29u, 18u, temperatureMaxDischargeSignals[1u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 43u, 18u, temperatureMaxDischargeSignals[2u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_NOT_OK); + /* ======= RT05/10: Call function under test */ + testResult = TEST_CANTX_SendBatteryCellConfiguration(); + /* ======= RT05/10: Test output verification */ + TEST_ASSERT_EQUAL(STD_NOT_OK, testResult); + + /* ======= RT06/10: Test implementation */ + CAN_TxPrepareSignalData_Ignore(); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x20u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 15u, 16u, BC_VOLTAGE_NOMINAL_mV, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 31u, 16u, BC_VOLTAGE_DEEP_DISCHARGE_mV, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 47u, 16u, BC_CAPACITY_mAh, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 63u, 8u, BC_ENERGY_Wh, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataZeroArray, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x21u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 15u, 18u, BC_CURRENT_MAX_CHARGE_MSL_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 29u, 18u, BC_CURRENT_MAX_CHARGE_RSL_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 43u, 18u, BC_CURRENT_MAX_CHARGE_MOL_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x22u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 15u, 18u, temperatureMaxChargeSignals[0u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 29u, 18u, temperatureMaxChargeSignals[1u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 43u, 18u, temperatureMaxChargeSignals[2u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x23u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 15u, 18u, BC_CURRENT_MAX_DISCHARGE_MSL_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 29u, 18u, BC_CURRENT_MAX_DISCHARGE_RSL_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 43u, 18u, BC_CURRENT_MAX_DISCHARGE_MOL_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x24u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 15u, 18u, temperatureMaxDischargeSignals[0u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 29u, 18u, temperatureMaxDischargeSignals[1u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 43u, 18u, temperatureMaxDischargeSignals[2u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x25u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 15u, 18u, BC_VOLTAGE_MAX_MSL_mV, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 29u, 18u, BC_VOLTAGE_MAX_RSL_mV, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 43u, 18u, BC_VOLTAGE_MAX_MOL_mV, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_NOT_OK); + /* ======= RT06/10: Call function under test */ + testResult = TEST_CANTX_SendBatteryCellConfiguration(); + /* ======= RT06/10: Test output verification */ + TEST_ASSERT_EQUAL(STD_NOT_OK, testResult); + + /* ======= RT07/10: Test implementation */ + CAN_TxPrepareSignalData_Ignore(); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x20u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 15u, 16u, BC_VOLTAGE_NOMINAL_mV, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 31u, 16u, BC_VOLTAGE_DEEP_DISCHARGE_mV, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 47u, 16u, BC_CAPACITY_mAh, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 63u, 8u, BC_ENERGY_Wh, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataZeroArray, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x21u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 15u, 18u, BC_CURRENT_MAX_CHARGE_MSL_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 29u, 18u, BC_CURRENT_MAX_CHARGE_RSL_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 43u, 18u, BC_CURRENT_MAX_CHARGE_MOL_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x22u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 15u, 18u, temperatureMaxChargeSignals[0u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 29u, 18u, temperatureMaxChargeSignals[1u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 43u, 18u, temperatureMaxChargeSignals[2u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x23u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 15u, 18u, BC_CURRENT_MAX_DISCHARGE_MSL_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 29u, 18u, BC_CURRENT_MAX_DISCHARGE_RSL_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 43u, 18u, BC_CURRENT_MAX_DISCHARGE_MOL_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x24u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 15u, 18u, temperatureMaxDischargeSignals[0u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 29u, 18u, temperatureMaxDischargeSignals[1u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 43u, 18u, temperatureMaxDischargeSignals[2u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x25u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 15u, 18u, BC_VOLTAGE_MAX_MSL_mV, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 29u, 18u, BC_VOLTAGE_MAX_RSL_mV, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 43u, 18u, BC_VOLTAGE_MAX_MOL_mV, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x26u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 15u, 18u, temperatureMinChargeSignals[0u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 29u, 18u, temperatureMinChargeSignals[1u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 43u, 18u, temperatureMinChargeSignals[2u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_NOT_OK); + /* ======= RT07/10: Call function under test */ + testResult = TEST_CANTX_SendBatteryCellConfiguration(); + /* ======= RT07/10: Test output verification */ + TEST_ASSERT_EQUAL(STD_NOT_OK, testResult); + + /* ======= RT08/10: Test implementation */ + CAN_TxPrepareSignalData_Ignore(); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x20u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 15u, 16u, BC_VOLTAGE_NOMINAL_mV, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 31u, 16u, BC_VOLTAGE_DEEP_DISCHARGE_mV, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 47u, 16u, BC_CAPACITY_mAh, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 63u, 8u, BC_ENERGY_Wh, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataZeroArray, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x21u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 15u, 18u, BC_CURRENT_MAX_CHARGE_MSL_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 29u, 18u, BC_CURRENT_MAX_CHARGE_RSL_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 43u, 18u, BC_CURRENT_MAX_CHARGE_MOL_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x22u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 15u, 18u, temperatureMaxChargeSignals[0u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 29u, 18u, temperatureMaxChargeSignals[1u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 43u, 18u, temperatureMaxChargeSignals[2u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x23u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 15u, 18u, BC_CURRENT_MAX_DISCHARGE_MSL_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 29u, 18u, BC_CURRENT_MAX_DISCHARGE_RSL_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 43u, 18u, BC_CURRENT_MAX_DISCHARGE_MOL_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x24u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 15u, 18u, temperatureMaxDischargeSignals[0u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 29u, 18u, temperatureMaxDischargeSignals[1u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 43u, 18u, temperatureMaxDischargeSignals[2u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x25u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 15u, 18u, BC_VOLTAGE_MAX_MSL_mV, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 29u, 18u, BC_VOLTAGE_MAX_RSL_mV, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 43u, 18u, BC_VOLTAGE_MAX_MOL_mV, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x26u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 15u, 18u, temperatureMinChargeSignals[0u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 29u, 18u, temperatureMinChargeSignals[1u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 43u, 18u, temperatureMinChargeSignals[2u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x27u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 15u, 18u, temperatureMinDischargeSignals[0u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 29u, 18u, temperatureMinDischargeSignals[1u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 43u, 18u, temperatureMinDischargeSignals[2u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_NOT_OK); + /* ======= RT08/10: Call function under test */ + testResult = TEST_CANTX_SendBatteryCellConfiguration(); + /* ======= RT08/10: Test output verification */ + TEST_ASSERT_EQUAL(STD_NOT_OK, testResult); + + /* ======= RT09/10: Test implementation */ + CAN_TxPrepareSignalData_Ignore(); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x20u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 15u, 16u, BC_VOLTAGE_NOMINAL_mV, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 31u, 16u, BC_VOLTAGE_DEEP_DISCHARGE_mV, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 47u, 16u, BC_CAPACITY_mAh, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 63u, 8u, BC_ENERGY_Wh, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataZeroArray, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x21u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 15u, 18u, BC_CURRENT_MAX_CHARGE_MSL_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 29u, 18u, BC_CURRENT_MAX_CHARGE_RSL_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 43u, 18u, BC_CURRENT_MAX_CHARGE_MOL_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x22u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 15u, 18u, temperatureMaxChargeSignals[0u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 29u, 18u, temperatureMaxChargeSignals[1u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 43u, 18u, temperatureMaxChargeSignals[2u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x23u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 15u, 18u, BC_CURRENT_MAX_DISCHARGE_MSL_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 29u, 18u, BC_CURRENT_MAX_DISCHARGE_RSL_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 43u, 18u, BC_CURRENT_MAX_DISCHARGE_MOL_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x24u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 15u, 18u, temperatureMaxDischargeSignals[0u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 29u, 18u, temperatureMaxDischargeSignals[1u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 43u, 18u, temperatureMaxDischargeSignals[2u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x25u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 15u, 18u, BC_VOLTAGE_MAX_MSL_mV, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 29u, 18u, BC_VOLTAGE_MAX_RSL_mV, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 43u, 18u, BC_VOLTAGE_MAX_MOL_mV, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x26u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 15u, 18u, temperatureMinChargeSignals[0u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 29u, 18u, temperatureMinChargeSignals[1u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 43u, 18u, temperatureMinChargeSignals[2u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x27u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 15u, 18u, temperatureMinDischargeSignals[0u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 29u, 18u, temperatureMinDischargeSignals[1u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 43u, 18u, temperatureMinDischargeSignals[2u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x28u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 15u, 18u, BC_VOLTAGE_MIN_MSL_mV, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 29u, 18u, BC_VOLTAGE_MIN_RSL_mV, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 43u, 18u, BC_VOLTAGE_MIN_MOL_mV, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_NOT_OK); + /* ======= RT09/10: Call function under test */ + testResult = TEST_CANTX_SendBatteryCellConfiguration(); + /* ======= RT09/10: Test output verification */ + TEST_ASSERT_EQUAL(STD_NOT_OK, testResult); + + /* ======= RT10/10: Test implementation */ + CAN_TxPrepareSignalData_Ignore(); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x20u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 15u, 16u, BC_VOLTAGE_NOMINAL_mV, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 31u, 16u, BC_VOLTAGE_DEEP_DISCHARGE_mV, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 47u, 16u, BC_CAPACITY_mAh, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 63u, 8u, BC_ENERGY_Wh, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataZeroArray, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x21u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 15u, 18u, BC_CURRENT_MAX_CHARGE_MSL_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 29u, 18u, BC_CURRENT_MAX_CHARGE_RSL_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 43u, 18u, BC_CURRENT_MAX_CHARGE_MOL_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x22u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 15u, 18u, temperatureMaxChargeSignals[0u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 29u, 18u, temperatureMaxChargeSignals[1u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 43u, 18u, temperatureMaxChargeSignals[2u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x23u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 15u, 18u, BC_CURRENT_MAX_DISCHARGE_MSL_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 29u, 18u, BC_CURRENT_MAX_DISCHARGE_RSL_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 43u, 18u, BC_CURRENT_MAX_DISCHARGE_MOL_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x24u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 15u, 18u, temperatureMaxDischargeSignals[0u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 29u, 18u, temperatureMaxDischargeSignals[1u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 43u, 18u, temperatureMaxDischargeSignals[2u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x25u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 15u, 18u, BC_VOLTAGE_MAX_MSL_mV, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 29u, 18u, BC_VOLTAGE_MAX_RSL_mV, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 43u, 18u, BC_VOLTAGE_MAX_MOL_mV, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x26u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 15u, 18u, temperatureMinChargeSignals[0u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 29u, 18u, temperatureMinChargeSignals[1u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 43u, 18u, temperatureMinChargeSignals[2u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x27u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 15u, 18u, temperatureMinDischargeSignals[0u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 29u, 18u, temperatureMinDischargeSignals[1u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 43u, 18u, temperatureMinDischargeSignals[2u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x28u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 15u, 18u, BC_VOLTAGE_MIN_MSL_mV, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 29u, 18u, BC_VOLTAGE_MIN_RSL_mV, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 43u, 18u, BC_VOLTAGE_MIN_MOL_mV, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + /* ======= RT10/10: Call function under test */ + testResult = TEST_CANTX_SendBatteryCellConfiguration(); + /* ======= RT10/10: Test output verification */ + TEST_ASSERT_EQUAL(STD_OK, testResult); +} + +/** + * @brief Testing CANTX_SetDebugBuildConfigurationMux + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/5: NULL_PTR for pMessageData -> assert + * - AT2/5: invalid value for muxValue -> assert + * - AT3/5: invalid value for muxValue -> assert + * - AT4/5: invalid value for muxValue -> assert + * - AT5/5: invalid value for muxValue -> assert + * - Routine validation: + * - RT1/1: Function sets expected values in the message data + */ +void testCANTX_SetDebugBuildConfigurationMux(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/5 ======= */ + uint64_t muxValue = 0u; + uint64_t messageData = 0u; + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_SetDebugBuildConfigurationMux(NULL_PTR, muxValue)); + + /* ======= AT2/5 ======= */ + muxValue = 0x1Fu; + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_SetDebugBuildConfigurationMux(&messageData, muxValue)); + + /* ======= AT3/5 ======= */ + muxValue = 0x29u; + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_SetDebugBuildConfigurationMux(&messageData, muxValue)); + + /* ======= AT4/5 ======= */ + muxValue = 0x2Fu; + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_SetDebugBuildConfigurationMux(&messageData, muxValue)); + + /* ======= AT5/5 ======= */ + muxValue = 0x38u; + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_SetDebugBuildConfigurationMux(&messageData, muxValue)); + + /* ======= Routine tests =============================================== */ + muxValue = 0x10u; + /* ======= RT1/1: Test implementation */ + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x10u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + /* ======= RT1/1: Call function under test */ + TEST_CANTX_SetDebugBuildConfigurationMux(&messageData, muxValue); + /* ======= RT1/1: Test output verification */ + TEST_ASSERT_EQUAL(testMessageData[1u], messageData); +} + +/** + * @brief Testing CANTX_SetBatteryCellMuxMessageData + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/1: NULL_PTR for pMessageData -> assert + * - Routine validation: + * - RT1/1: Function sets expected values in the message data + */ +void testCANTX_SetBatteryCellMuxMessageData(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/1 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_SetBatteryCellMuxMessageData(NULL_PTR)); + + /* ======= Routine tests =============================================== */ + uint64_t messageData = 0u; + /* ======= RT1/1: Test implementation */ + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x20u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[1u], 15u, 16u, BC_VOLTAGE_NOMINAL_mV, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[2u]); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[2u], 31u, 16u, BC_VOLTAGE_DEEP_DISCHARGE_mV, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[3u]); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[3u], 47u, 16u, BC_CAPACITY_mAh, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[4u]); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[4u], 63u, 8u, BC_ENERGY_Wh, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[5u]); + /* ======= RT1/1: Call function under test */ + TEST_CANTX_SetBatteryCellMuxMessageData(&messageData); + /* ======= RT1/1: Test output verification */ + TEST_ASSERT_EQUAL(testMessageData[5u], messageData); +} + +/** + * @brief Testing CANTX_SetBatteryCellMuxMaxChargeCurrentMessageData + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/1: NULL_PTR for pMessageData -> assert + * - Routine validation: + * - RT1/1: Function sets expected values in the message data + */ +void testCANTX_SetBatteryCellMuxMaxChargeCurrentMessageData(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/1 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_SetBatteryCellMuxMaxChargeCurrentMessageData(NULL_PTR)); + + /* ======= Routine tests =============================================== */ + uint64_t messageData = 0u; + /* ======= RT1/1: Test implementation */ + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x21u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[1u], 15u, 18u, BC_CURRENT_MAX_CHARGE_MSL_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[2u]); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[2u], 29u, 18u, BC_CURRENT_MAX_CHARGE_RSL_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[3u]); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[3u], 43u, 18u, BC_CURRENT_MAX_CHARGE_MOL_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[4u]); + /* ======= RT1/1: Call function under test */ + TEST_CANTX_SetBatteryCellMuxMaxChargeCurrentMessageData(&messageData); + /* ======= RT1/1: Test output verification */ + TEST_ASSERT_EQUAL(testMessageData[4u], messageData); +} + +/** + * @brief Testing CANTX_SetBatteryCellMuxMaxChargeTemperatureMessageData + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/1: NULL_PTR for pMessageData -> assert + * - Routine validation: + * - RT1/1: Function sets expected values in the message data + */ +void testCANTX_SetBatteryCellMuxMaxChargeTemperatureMessageData(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/1 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_SetBatteryCellMuxMaxChargeTemperatureMessageData(NULL_PTR)); + + /* ======= Routine tests =============================================== */ + uint64_t messageData = 0u; + float_t temperatureSignals[3u] = { + (float_t)BC_TEMPERATURE_MAX_CHARGE_MSL_ddegC, + (float_t)BC_TEMPERATURE_MAX_CHARGE_RSL_ddegC, + (float_t)BC_TEMPERATURE_MAX_CHARGE_MOL_ddegC}; + /* ======= RT1/1: Test implementation */ + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x22u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxPrepareSignalData_Expect(&temperatureSignals[0u], signalBatteryCellTemperature); + CAN_TxPrepareSignalData_ReturnThruPtr_pSignal(&testSignalData[1u]); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[1u], 15u, 18u, testSignalData[1u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[2u]); + CAN_TxPrepareSignalData_Expect(&temperatureSignals[1u], signalBatteryCellTemperature); + CAN_TxPrepareSignalData_ReturnThruPtr_pSignal(&testSignalData[2u]); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[2u], 29u, 18u, testSignalData[2u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[3u]); + CAN_TxPrepareSignalData_Expect(&temperatureSignals[2u], signalBatteryCellTemperature); + CAN_TxPrepareSignalData_ReturnThruPtr_pSignal(&testSignalData[3u]); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[3u], 43u, 18u, testSignalData[3u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[4u]); + /* ======= RT1/1: Call function under test */ + TEST_CANTX_SetBatteryCellMuxMaxChargeTemperatureMessageData(&messageData); + /* ======= RT1/1: Test output verification */ + TEST_ASSERT_EQUAL(testMessageData[4u], messageData); +} + +/** + * @brief Testing CANTX_SetBatteryCellMuxMaxDischargeCurrentMessageData + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/1: NULL_PTR for pMessageData -> assert + * - Routine validation: + * - RT1/1: Function sets expected values in the message data + */ +void testCANTX_SetBatteryCellMuxMaxDischargeCurrentMessageData(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/1 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_SetBatteryCellMuxMaxDischargeCurrentMessageData(NULL_PTR)); + + /* ======= Routine tests =============================================== */ + uint64_t messageData = 0u; + /* ======= RT1/1: Test implementation */ + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x23u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[1u], 15u, 18u, BC_CURRENT_MAX_DISCHARGE_MSL_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[2u]); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[2u], 29u, 18u, BC_CURRENT_MAX_DISCHARGE_RSL_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[3u]); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[3u], 43u, 18u, BC_CURRENT_MAX_DISCHARGE_MOL_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[4u]); + /* ======= RT1/1: Call function under test */ + TEST_CANTX_SetBatteryCellMuxMaxDischargeCurrentMessageData(&messageData); + /* ======= RT1/1: Test output verification */ + TEST_ASSERT_EQUAL(testMessageData[4u], messageData); +} + +/** + * @brief Testing CANTX_SetBatteryCellMuxMaxDischargeTemperatureMessageData + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/1: NULL_PTR for pMessageData -> assert + * - Routine validation: + * - RT1/1: Function sets expected values in the message data + */ +void testCANTX_SetBatteryCellMuxMaxDischargeTemperatureMessageData(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/1 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_SetBatteryCellMuxMaxDischargeTemperatureMessageData(NULL_PTR)); + + /* ======= Routine tests =============================================== */ + uint64_t messageData = 0u; + + float_t temperatureSignals[3u] = { + (float_t)BC_TEMPERATURE_MAX_DISCHARGE_MSL_ddegC, + (float_t)BC_TEMPERATURE_MAX_DISCHARGE_RSL_ddegC, + (float_t)BC_TEMPERATURE_MAX_DISCHARGE_MOL_ddegC}; + /* ======= RT1/1: Test implementation */ + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x24u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxPrepareSignalData_Expect(&temperatureSignals[0u], signalBatteryCellTemperature); + CAN_TxPrepareSignalData_ReturnThruPtr_pSignal(&testSignalData[1u]); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[1u], 15u, 18u, testSignalData[1u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[2u]); + CAN_TxPrepareSignalData_Expect(&temperatureSignals[1u], signalBatteryCellTemperature); + CAN_TxPrepareSignalData_ReturnThruPtr_pSignal(&testSignalData[2u]); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[2u], 29u, 18u, testSignalData[2u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[3u]); + CAN_TxPrepareSignalData_Expect(&temperatureSignals[2u], signalBatteryCellTemperature); + CAN_TxPrepareSignalData_ReturnThruPtr_pSignal(&testSignalData[3u]); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[3u], 43u, 18u, testSignalData[3u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[4u]); + /* ======= RT1/1: Call function under test */ + TEST_CANTX_SetBatteryCellMuxMaxDischargeTemperatureMessageData(&messageData); + /* ======= RT1/1: Test output verification */ + TEST_ASSERT_EQUAL(testMessageData[4u], messageData); +} + +/** + * @brief Testing CANTX_SetBatteryCellMuxMaxVoltageMessageData + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/1: NULL_PTR for pMessageData -> assert + * - Routine validation: + * - RT1/1: Function sets expected values in the message data + */ +void testCANTX_SetBatteryCellMuxMaxVoltageMessageData(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/1 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_SetBatteryCellMuxMaxVoltageMessageData(NULL_PTR)); + + /* ======= Routine tests =============================================== */ + uint64_t messageData = 0u; + /* ======= RT1/1: Test implementation */ + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x25u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[1u], 15u, 18u, BC_VOLTAGE_MAX_MSL_mV, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[2u]); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[2u], 29u, 18u, BC_VOLTAGE_MAX_RSL_mV, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[3u]); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[3u], 43u, 18u, BC_VOLTAGE_MAX_MOL_mV, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[4u]); + /* ======= RT1/1: Call function under test */ + TEST_CANTX_SetBatteryCellMuxMaxVoltageMessageData(&messageData); + /* ======= RT1/1: Test output verification */ + TEST_ASSERT_EQUAL(testMessageData[4u], messageData); +} + +/** + * @brief Testing CANTX_SetBatteryCellMuxMinChargeTemperatureMessageData + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/1: NULL_PTR for pMessageData -> assert + * - Routine validation: + * - RT1/1: Function sets expected values in the message data + */ +void testCANTX_SetBatteryCellMuxMinChargeTemperatureMessageData(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/1 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_SetBatteryCellMuxMinChargeTemperatureMessageData(NULL_PTR)); + + /* ======= Routine tests =============================================== */ + uint64_t messageData = 0u; + float_t temperatureSignals[3u] = { + (float_t)BC_TEMPERATURE_MIN_CHARGE_MSL_ddegC, + (float_t)BC_TEMPERATURE_MIN_CHARGE_RSL_ddegC, + (float_t)BC_TEMPERATURE_MIN_CHARGE_MOL_ddegC}; + /* ======= RT1/1: Test implementation */ + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x26u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxPrepareSignalData_Expect(&temperatureSignals[0u], signalBatteryCellTemperature); + CAN_TxPrepareSignalData_ReturnThruPtr_pSignal(&testSignalData[1u]); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[1u], 15u, 18u, testSignalData[1u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[2u]); + CAN_TxPrepareSignalData_Expect(&temperatureSignals[1u], signalBatteryCellTemperature); + CAN_TxPrepareSignalData_ReturnThruPtr_pSignal(&testSignalData[2u]); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[2u], 29u, 18u, testSignalData[2u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[3u]); + CAN_TxPrepareSignalData_Expect(&temperatureSignals[2u], signalBatteryCellTemperature); + CAN_TxPrepareSignalData_ReturnThruPtr_pSignal(&testSignalData[3u]); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[3u], 43u, 18u, testSignalData[3u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[4u]); + /* ======= RT1/1: Call function under test */ + TEST_CANTX_SetBatteryCellMuxMinChargeTemperatureMessageData(&messageData); + /* ======= RT1/1: Test output verification */ + TEST_ASSERT_EQUAL(testMessageData[4u], messageData); +} + +/** + * @brief Testing CANTX_SetBatteryCellMuxMinDischargeTemperatureMessageData + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/1: NULL_PTR for pMessageData -> assert + * - Routine validation: + * - RT1/1: Function sets expected values in the message data + */ +void testCANTX_SetBatteryCellMuxMinDischargeTemperatureMessageData(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/1 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_SetBatteryCellMuxMinDischargeTemperatureMessageData(NULL_PTR)); + + /* ======= Routine tests =============================================== */ + uint64_t messageData = 0u; + float_t temperatureSignals[3u] = { + (float_t)BC_TEMPERATURE_MIN_DISCHARGE_MSL_ddegC, + (float_t)BC_TEMPERATURE_MIN_DISCHARGE_RSL_ddegC, + (float_t)BC_TEMPERATURE_MIN_DISCHARGE_MOL_ddegC}; + /* ======= RT1/1: Test implementation */ + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x27u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxPrepareSignalData_Expect(&temperatureSignals[0u], signalBatteryCellTemperature); + CAN_TxPrepareSignalData_ReturnThruPtr_pSignal(&testSignalData[1u]); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[1u], 15u, 18u, testSignalData[1u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[2u]); + CAN_TxPrepareSignalData_Expect(&temperatureSignals[1u], signalBatteryCellTemperature); + CAN_TxPrepareSignalData_ReturnThruPtr_pSignal(&testSignalData[2u]); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[2u], 29u, 18u, testSignalData[2u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[3u]); + CAN_TxPrepareSignalData_Expect(&temperatureSignals[2u], signalBatteryCellTemperature); + CAN_TxPrepareSignalData_ReturnThruPtr_pSignal(&testSignalData[3u]); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[3u], 43u, 18u, testSignalData[3u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[4u]); + /* ======= RT1/1: Call function under test */ + TEST_CANTX_SetBatteryCellMuxMinDischargeTemperatureMessageData(&messageData); + /* ======= RT1/1: Test output verification */ + TEST_ASSERT_EQUAL(testMessageData[4u], messageData); +} + +/** + * @brief Testing CANTX_SetBatteryCellMuxMinVoltageMessageData + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/1: NULL_PTR for pMessageData -> assert + * - Routine validation: + * - RT1/1: Function sets expected values in the message data + */ +void testCANTX_SetBatteryCellMuxMinVoltageMessageData(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/1 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_SetBatteryCellMuxMinVoltageMessageData(NULL_PTR)); + + /* ======= Routine tests =============================================== */ + uint64_t messageData = 0u; + /* ======= RT1/1: Test implementation */ + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x28u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[1u], 15u, 18u, BC_VOLTAGE_MIN_MSL_mV, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[2u]); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[2u], 29u, 18u, BC_VOLTAGE_MIN_RSL_mV, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[3u]); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[3u], 43u, 18u, BC_VOLTAGE_MIN_MOL_mV, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[4u]); + /* ======= RT1/1: Call function under test */ + TEST_CANTX_SetBatteryCellMuxMinVoltageMessageData(&messageData); + /* ======= RT1/1: Test output verification */ + TEST_ASSERT_EQUAL(testMessageData[4u], messageData); +} + +/** + * @brief Testing CANTX_SendBatterySystemConfiguration + * @details The following cases need to be tested: + * - Argument validation: + * - None + * - Routine validation: + * - RT1/9: CANTX_MUX_BATTERY_SYSTEM_GENERAL_1 multiplexer message isn't queued successfully + * - RT2/9: CANTX_MUX_BATTERY_SYSTEM_GENERAL_2 multiplexer message isn't queued successfully + * - RT3/9: CANTX_MUX_BATTERY_SYSTEM_CONTACTORS multiplexer message isn't queued successfully + * - RT4/9: CANTX_MUX_BATTERY_SYSTEM_CURRENT_SENSOR multiplexer message isn't queued successfully + * - RT5/9: CANTX_MUX_BATTERY_SYSTEM_FUSE multiplexer message isn't queued successfully + * - RT6/9: CANTX_MUX_BATTERY_SYSTEM_MAX_CURRENT multiplexer message isn't queued successfully + * - RT7/9: CANTX_MUX_BATTERY_SYSTEM_OPEN_WIRE_CHECK multiplexer message isn't queued successfully + * - RT8/9: CANTX_MUX_BATTERY_SYSTEM_TOTAL_NUMBERS multiplexer message isn't queued successfully + * - RT9/9: All messages are queued successfully + */ +void testCANTX_SendBatterySystemConfiguration(void) { + /* ======= Routine tests =============================================== */ + uint8_t testCanDataFilled[CAN_MAX_DLC] = {0x12, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF}; + float_t openWirePeriodSignals[4u] = { + (float_t)BS_STANDBY_OPEN_WIRE_PERIOD_ms, + (float_t)BS_NORMAL_OPEN_WIRE_PERIOD_ms, + (float_t)BS_CHARGE_OPEN_WIRE_PERIOD_ms, + (float_t)BS_ERROR_OPEN_WIRE_PERIOD_ms}; + /* ======= RT1/9: Test implementation */ + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x30u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 15u, 8u, BS_NR_OF_STRINGS, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 23u, 8u, BS_NR_OF_MODULES_PER_STRING, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 31u, 8u, BS_NR_OF_CELL_BLOCKS_PER_MODULE, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 39u, 8u, BS_NR_OF_PARALLEL_CELLS_PER_CELL_BLOCK, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 47u, 8u, BS_NR_OF_GPIOS_PER_MODULE, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 55u, 8u, BS_NR_OF_GPAS_PER_MODULE, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 63u, 8u, BS_NR_OF_TEMP_SENSORS_PER_MODULE, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataZeroArray, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_NOT_OK); + + /* ======= RT1/9: Call function under test */ + STD_RETURN_TYPE_e testResult = TEST_CANTX_SendBatterySystemConfiguration(); + /* ======= RT1/9: Test output verification */ + TEST_ASSERT_EQUAL(STD_NOT_OK, testResult); + + /* ======= RT2/9: Test implementation */ + CAN_ConvertBooleanToInteger_IgnoreAndReturn(TEST_PLACEHOLDER_CONVERTED_BOOL); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x30u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 15u, 8u, BS_NR_OF_STRINGS, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 23u, 8u, BS_NR_OF_MODULES_PER_STRING, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 31u, 8u, BS_NR_OF_CELL_BLOCKS_PER_MODULE, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 39u, 8u, BS_NR_OF_PARALLEL_CELLS_PER_CELL_BLOCK, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 47u, 8u, BS_NR_OF_GPIOS_PER_MODULE, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 55u, 8u, BS_NR_OF_GPAS_PER_MODULE, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 63u, 8u, BS_NR_OF_TEMP_SENSORS_PER_MODULE, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataZeroArray, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x31u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 15u, 1u, TEST_PLACEHOLDER_CONVERTED_BOOL, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 14u, 1u, TEST_PLACEHOLDER_CONVERTED_BOOL, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 13u, 1u, TEST_PLACEHOLDER_CONVERTED_BOOL, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 12u, 1u, TEST_PLACEHOLDER_CONVERTED_BOOL, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 11u, 12u, BS_BALANCING_RESISTANCE_ohm, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 31u, 12u, BS_REST_CURRENT_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 35u, 16u, BS_RELAXATION_PERIOD_10ms, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_NOT_OK); + /* ======= RT2/9: Call function under test */ + testResult = TEST_CANTX_SendBatterySystemConfiguration(); + /* ======= RT2/9: Test output verification */ + TEST_ASSERT_EQUAL(STD_NOT_OK, testResult); + + /* ======= RT3/9: Test implementation */ + CAN_ConvertBooleanToInteger_IgnoreAndReturn(TEST_PLACEHOLDER_CONVERTED_BOOL); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x30u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 15u, 8u, BS_NR_OF_STRINGS, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 23u, 8u, BS_NR_OF_MODULES_PER_STRING, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 31u, 8u, BS_NR_OF_CELL_BLOCKS_PER_MODULE, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 39u, 8u, BS_NR_OF_PARALLEL_CELLS_PER_CELL_BLOCK, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 47u, 8u, BS_NR_OF_GPIOS_PER_MODULE, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 55u, 8u, BS_NR_OF_GPAS_PER_MODULE, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 63u, 8u, BS_NR_OF_TEMP_SENSORS_PER_MODULE, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataZeroArray, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x31u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 15u, 1u, TEST_PLACEHOLDER_CONVERTED_BOOL, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 14u, 1u, TEST_PLACEHOLDER_CONVERTED_BOOL, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 13u, 1u, TEST_PLACEHOLDER_CONVERTED_BOOL, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 12u, 1u, TEST_PLACEHOLDER_CONVERTED_BOOL, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 11u, 12u, BS_BALANCING_RESISTANCE_ohm, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 31u, 12u, BS_REST_CURRENT_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 35u, 16u, BS_RELAXATION_PERIOD_10ms, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x32u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 15u, 8u, BS_NR_OF_CONTACTORS_OUTSIDE_STRINGS, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 23u, 8u, BS_NR_OF_CONTACTORS, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 31u, 32u, BS_MAIN_CONTACTORS_MAXIMUM_BREAK_CURRENT_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_NOT_OK); + /* ======= RT3/9: Call function under test */ + testResult = TEST_CANTX_SendBatterySystemConfiguration(); + /* ======= RT3/9: Test output verification */ + TEST_ASSERT_EQUAL(STD_NOT_OK, testResult); + + /* ======= RT4/9: Test implementation */ + CAN_ConvertBooleanToInteger_IgnoreAndReturn(TEST_PLACEHOLDER_CONVERTED_BOOL); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x30u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 15u, 8u, BS_NR_OF_STRINGS, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 23u, 8u, BS_NR_OF_MODULES_PER_STRING, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 31u, 8u, BS_NR_OF_CELL_BLOCKS_PER_MODULE, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 39u, 8u, BS_NR_OF_PARALLEL_CELLS_PER_CELL_BLOCK, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 47u, 8u, BS_NR_OF_GPIOS_PER_MODULE, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 55u, 8u, BS_NR_OF_GPAS_PER_MODULE, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 63u, 8u, BS_NR_OF_TEMP_SENSORS_PER_MODULE, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataZeroArray, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x31u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 15u, 1u, TEST_PLACEHOLDER_CONVERTED_BOOL, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 14u, 1u, TEST_PLACEHOLDER_CONVERTED_BOOL, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 13u, 1u, TEST_PLACEHOLDER_CONVERTED_BOOL, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 12u, 1u, TEST_PLACEHOLDER_CONVERTED_BOOL, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 11u, 12u, BS_BALANCING_RESISTANCE_ohm, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 31u, 12u, BS_REST_CURRENT_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 35u, 16u, BS_RELAXATION_PERIOD_10ms, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x32u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 15u, 8u, BS_NR_OF_CONTACTORS_OUTSIDE_STRINGS, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 23u, 8u, BS_NR_OF_CONTACTORS, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 31u, 32u, BS_MAIN_CONTACTORS_MAXIMUM_BREAK_CURRENT_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x33u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 15u, 1u, TEST_PLACEHOLDER_CONVERTED_BOOL, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 13u, 2u, BS_NR_OF_VOLTAGES_FROM_CURRENT_SENSOR, CAN_BIG_ENDIAN); +#if BS_CURRENT_SENSOR_PRESENT == true +#ifdef CURRENT_SENSOR_ISABELLENHUETTE_CYCLIC + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[3u], 14u, 1u, 0u, CAN_BIG_ENDIAN); +#elif CURRENT_SENSOR_ISABELLENHUETTE_TRIGGERED + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[3u], 14u, 0u, 0u, CAN_BIG_ENDIAN); +#endif + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 11u, 12u, BS_CURRENT_MEASUREMENT_RESPONSE_TIMEOUT_ms, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 31u, 12u, BS_COULOMB_COUNTING_MEASUREMENT_RESPONSE_TIMEOUT_ms, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 35u, 12u, BS_ENERGY_COUNTING_MEASUREMENT_RESPONSE_TIMEOUT_ms, CAN_BIG_ENDIAN); +#endif /* BS_CURRENT_SENSOR_PRESENT == true */ + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 55u, 12u, BS_CS_THRESHOLD_NO_CURRENT_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_NOT_OK); + /* ======= RT4/9: Call function under test */ + testResult = TEST_CANTX_SendBatterySystemConfiguration(); + /* ======= RT4/9: Test output verification */ + TEST_ASSERT_EQUAL(STD_NOT_OK, testResult); + + /* ======= RT5/9: Test implementation */ + CAN_ConvertBooleanToInteger_IgnoreAndReturn(TEST_PLACEHOLDER_CONVERTED_BOOL); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x30u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 15u, 8u, BS_NR_OF_STRINGS, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 23u, 8u, BS_NR_OF_MODULES_PER_STRING, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 31u, 8u, BS_NR_OF_CELL_BLOCKS_PER_MODULE, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 39u, 8u, BS_NR_OF_PARALLEL_CELLS_PER_CELL_BLOCK, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 47u, 8u, BS_NR_OF_GPIOS_PER_MODULE, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 55u, 8u, BS_NR_OF_GPAS_PER_MODULE, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 63u, 8u, BS_NR_OF_TEMP_SENSORS_PER_MODULE, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataZeroArray, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x31u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 15u, 1u, TEST_PLACEHOLDER_CONVERTED_BOOL, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 14u, 1u, TEST_PLACEHOLDER_CONVERTED_BOOL, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 13u, 1u, TEST_PLACEHOLDER_CONVERTED_BOOL, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 12u, 1u, TEST_PLACEHOLDER_CONVERTED_BOOL, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 11u, 12u, BS_BALANCING_RESISTANCE_ohm, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 31u, 12u, BS_REST_CURRENT_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 35u, 16u, BS_RELAXATION_PERIOD_10ms, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x32u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 15u, 8u, BS_NR_OF_CONTACTORS_OUTSIDE_STRINGS, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 23u, 8u, BS_NR_OF_CONTACTORS, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 31u, 32u, BS_MAIN_CONTACTORS_MAXIMUM_BREAK_CURRENT_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x33u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 15u, 1u, TEST_PLACEHOLDER_CONVERTED_BOOL, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 13u, 2u, BS_NR_OF_VOLTAGES_FROM_CURRENT_SENSOR, CAN_BIG_ENDIAN); +#if BS_CURRENT_SENSOR_PRESENT == true +#ifdef CURRENT_SENSOR_ISABELLENHUETTE_CYCLIC + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[3u], 14u, 1u, 0u, CAN_BIG_ENDIAN); +#elif CURRENT_SENSOR_ISABELLENHUETTE_TRIGGERED + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[3u], 14u, 0u, 0u, CAN_BIG_ENDIAN); +#endif + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 11u, 12u, BS_CURRENT_MEASUREMENT_RESPONSE_TIMEOUT_ms, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 31u, 12u, BS_COULOMB_COUNTING_MEASUREMENT_RESPONSE_TIMEOUT_ms, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 35u, 12u, BS_ENERGY_COUNTING_MEASUREMENT_RESPONSE_TIMEOUT_ms, CAN_BIG_ENDIAN); +#endif /* BS_CURRENT_SENSOR_PRESENT == true */ + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 55u, 12u, BS_CS_THRESHOLD_NO_CURRENT_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x34u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 15u, 1u, TEST_PLACEHOLDER_CONVERTED_BOOL, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 14u, 1u, TEST_PLACEHOLDER_CONVERTED_BOOL, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 11u, 12u, BS_MAX_VOLTAGE_DROP_OVER_FUSE_mV, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 31u, 16u, BS_MAIN_FUSE_MAXIMUM_TRIGGER_DURATION_ms, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_NOT_OK); + /* ======= RT5/9: Call function under test */ + testResult = TEST_CANTX_SendBatterySystemConfiguration(); + /* ======= RT5/9: Test output verification */ + TEST_ASSERT_EQUAL(STD_NOT_OK, testResult); + + /* ======= RT6/9: Test implementation */ + CAN_ConvertBooleanToInteger_IgnoreAndReturn(TEST_PLACEHOLDER_CONVERTED_BOOL); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x30u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 15u, 8u, BS_NR_OF_STRINGS, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 23u, 8u, BS_NR_OF_MODULES_PER_STRING, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 31u, 8u, BS_NR_OF_CELL_BLOCKS_PER_MODULE, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 39u, 8u, BS_NR_OF_PARALLEL_CELLS_PER_CELL_BLOCK, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 47u, 8u, BS_NR_OF_GPIOS_PER_MODULE, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 55u, 8u, BS_NR_OF_GPAS_PER_MODULE, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 63u, 8u, BS_NR_OF_TEMP_SENSORS_PER_MODULE, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataZeroArray, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x31u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 15u, 1u, TEST_PLACEHOLDER_CONVERTED_BOOL, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 14u, 1u, TEST_PLACEHOLDER_CONVERTED_BOOL, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 13u, 1u, TEST_PLACEHOLDER_CONVERTED_BOOL, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 12u, 1u, TEST_PLACEHOLDER_CONVERTED_BOOL, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 11u, 12u, BS_BALANCING_RESISTANCE_ohm, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 31u, 12u, BS_REST_CURRENT_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 35u, 16u, BS_RELAXATION_PERIOD_10ms, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x32u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 15u, 8u, BS_NR_OF_CONTACTORS_OUTSIDE_STRINGS, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 23u, 8u, BS_NR_OF_CONTACTORS, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 31u, 32u, BS_MAIN_CONTACTORS_MAXIMUM_BREAK_CURRENT_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x33u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 15u, 1u, TEST_PLACEHOLDER_CONVERTED_BOOL, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 13u, 2u, BS_NR_OF_VOLTAGES_FROM_CURRENT_SENSOR, CAN_BIG_ENDIAN); +#if BS_CURRENT_SENSOR_PRESENT == true +#ifdef CURRENT_SENSOR_ISABELLENHUETTE_CYCLIC + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[3u], 14u, 1u, 0u, CAN_BIG_ENDIAN); +#elif CURRENT_SENSOR_ISABELLENHUETTE_TRIGGERED + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[3u], 14u, 0u, 0u, CAN_BIG_ENDIAN); +#endif + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 11u, 12u, BS_CURRENT_MEASUREMENT_RESPONSE_TIMEOUT_ms, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 31u, 12u, BS_COULOMB_COUNTING_MEASUREMENT_RESPONSE_TIMEOUT_ms, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 35u, 12u, BS_ENERGY_COUNTING_MEASUREMENT_RESPONSE_TIMEOUT_ms, CAN_BIG_ENDIAN); +#endif /* BS_CURRENT_SENSOR_PRESENT == true */ + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 55u, 12u, BS_CS_THRESHOLD_NO_CURRENT_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x34u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 15u, 1u, TEST_PLACEHOLDER_CONVERTED_BOOL, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 14u, 1u, TEST_PLACEHOLDER_CONVERTED_BOOL, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 11u, 12u, BS_MAX_VOLTAGE_DROP_OVER_FUSE_mV, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 31u, 16u, BS_MAIN_FUSE_MAXIMUM_TRIGGER_DURATION_ms, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x35u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 15u, 28u, BS_MAXIMUM_STRING_CURRENT_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 35u, 28u, BS_MAXIMUM_PACK_CURRENT_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_NOT_OK); + /* ======= RT6/9: Call function under test */ + testResult = TEST_CANTX_SendBatterySystemConfiguration(); + /* ======= RT6/9: Test output verification */ + TEST_ASSERT_EQUAL(STD_NOT_OK, testResult); + + /* ======= RT7/9: Test implementation */ + CAN_TxPrepareSignalData_Ignore(); + CAN_ConvertBooleanToInteger_IgnoreAndReturn(TEST_PLACEHOLDER_CONVERTED_BOOL); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x30u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 15u, 8u, BS_NR_OF_STRINGS, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 23u, 8u, BS_NR_OF_MODULES_PER_STRING, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 31u, 8u, BS_NR_OF_CELL_BLOCKS_PER_MODULE, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 39u, 8u, BS_NR_OF_PARALLEL_CELLS_PER_CELL_BLOCK, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 47u, 8u, BS_NR_OF_GPIOS_PER_MODULE, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 55u, 8u, BS_NR_OF_GPAS_PER_MODULE, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 63u, 8u, BS_NR_OF_TEMP_SENSORS_PER_MODULE, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataZeroArray, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x31u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 15u, 1u, TEST_PLACEHOLDER_CONVERTED_BOOL, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 14u, 1u, TEST_PLACEHOLDER_CONVERTED_BOOL, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 13u, 1u, TEST_PLACEHOLDER_CONVERTED_BOOL, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 12u, 1u, TEST_PLACEHOLDER_CONVERTED_BOOL, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 11u, 12u, BS_BALANCING_RESISTANCE_ohm, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 31u, 12u, BS_REST_CURRENT_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 35u, 16u, BS_RELAXATION_PERIOD_10ms, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x32u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 15u, 8u, BS_NR_OF_CONTACTORS_OUTSIDE_STRINGS, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 23u, 8u, BS_NR_OF_CONTACTORS, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 31u, 32u, BS_MAIN_CONTACTORS_MAXIMUM_BREAK_CURRENT_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x33u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 15u, 1u, TEST_PLACEHOLDER_CONVERTED_BOOL, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 13u, 2u, BS_NR_OF_VOLTAGES_FROM_CURRENT_SENSOR, CAN_BIG_ENDIAN); +#if BS_CURRENT_SENSOR_PRESENT == true +#ifdef CURRENT_SENSOR_ISABELLENHUETTE_CYCLIC + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[3u], 14u, 1u, 0u, CAN_BIG_ENDIAN); +#elif CURRENT_SENSOR_ISABELLENHUETTE_TRIGGERED + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[3u], 14u, 0u, 0u, CAN_BIG_ENDIAN); +#endif + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 11u, 12u, BS_CURRENT_MEASUREMENT_RESPONSE_TIMEOUT_ms, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 31u, 12u, BS_COULOMB_COUNTING_MEASUREMENT_RESPONSE_TIMEOUT_ms, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 35u, 12u, BS_ENERGY_COUNTING_MEASUREMENT_RESPONSE_TIMEOUT_ms, CAN_BIG_ENDIAN); +#endif /* BS_CURRENT_SENSOR_PRESENT == true */ + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 55u, 12u, BS_CS_THRESHOLD_NO_CURRENT_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x34u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 15u, 1u, TEST_PLACEHOLDER_CONVERTED_BOOL, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 14u, 1u, TEST_PLACEHOLDER_CONVERTED_BOOL, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 11u, 12u, BS_MAX_VOLTAGE_DROP_OVER_FUSE_mV, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 31u, 16u, BS_MAIN_FUSE_MAXIMUM_TRIGGER_DURATION_ms, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x35u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 15u, 28u, BS_MAXIMUM_STRING_CURRENT_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 35u, 28u, BS_MAXIMUM_PACK_CURRENT_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x36u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 15u, 1u, TEST_PLACEHOLDER_CONVERTED_BOOL, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 14u, 12u, openWirePeriodSignals[0u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 18u, 1u, TEST_PLACEHOLDER_CONVERTED_BOOL, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 17u, 12u, openWirePeriodSignals[1u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 37u, 1u, TEST_PLACEHOLDER_CONVERTED_BOOL, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 36u, 12u, openWirePeriodSignals[2u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 40u, 12u, openWirePeriodSignals[3u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_NOT_OK); + /* ======= RT7/9: Call function under test */ + testResult = TEST_CANTX_SendBatterySystemConfiguration(); + /* ======= RT7/9: Test output verification */ + TEST_ASSERT_EQUAL(STD_NOT_OK, testResult); + + /* ======= RT8/9: Test implementation */ + CAN_TxPrepareSignalData_Ignore(); + CAN_ConvertBooleanToInteger_IgnoreAndReturn(TEST_PLACEHOLDER_CONVERTED_BOOL); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x30u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 15u, 8u, BS_NR_OF_STRINGS, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 23u, 8u, BS_NR_OF_MODULES_PER_STRING, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 31u, 8u, BS_NR_OF_CELL_BLOCKS_PER_MODULE, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 39u, 8u, BS_NR_OF_PARALLEL_CELLS_PER_CELL_BLOCK, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 47u, 8u, BS_NR_OF_GPIOS_PER_MODULE, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 55u, 8u, BS_NR_OF_GPAS_PER_MODULE, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 63u, 8u, BS_NR_OF_TEMP_SENSORS_PER_MODULE, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataZeroArray, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x31u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 15u, 1u, TEST_PLACEHOLDER_CONVERTED_BOOL, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 14u, 1u, TEST_PLACEHOLDER_CONVERTED_BOOL, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 13u, 1u, TEST_PLACEHOLDER_CONVERTED_BOOL, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 12u, 1u, TEST_PLACEHOLDER_CONVERTED_BOOL, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 11u, 12u, BS_BALANCING_RESISTANCE_ohm, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 31u, 12u, BS_REST_CURRENT_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 35u, 16u, BS_RELAXATION_PERIOD_10ms, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x32u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 15u, 8u, BS_NR_OF_CONTACTORS_OUTSIDE_STRINGS, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 23u, 8u, BS_NR_OF_CONTACTORS, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 31u, 32u, BS_MAIN_CONTACTORS_MAXIMUM_BREAK_CURRENT_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x33u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 15u, 1u, TEST_PLACEHOLDER_CONVERTED_BOOL, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 13u, 2u, BS_NR_OF_VOLTAGES_FROM_CURRENT_SENSOR, CAN_BIG_ENDIAN); +#if BS_CURRENT_SENSOR_PRESENT == true +#ifdef CURRENT_SENSOR_ISABELLENHUETTE_CYCLIC + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[3u], 14u, 1u, 0u, CAN_BIG_ENDIAN); +#elif CURRENT_SENSOR_ISABELLENHUETTE_TRIGGERED + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[3u], 14u, 0u, 0u, CAN_BIG_ENDIAN); +#endif + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 11u, 12u, BS_CURRENT_MEASUREMENT_RESPONSE_TIMEOUT_ms, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 31u, 12u, BS_COULOMB_COUNTING_MEASUREMENT_RESPONSE_TIMEOUT_ms, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 35u, 12u, BS_ENERGY_COUNTING_MEASUREMENT_RESPONSE_TIMEOUT_ms, CAN_BIG_ENDIAN); +#endif /* BS_CURRENT_SENSOR_PRESENT == true */ + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 55u, 12u, BS_CS_THRESHOLD_NO_CURRENT_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x34u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 15u, 1u, TEST_PLACEHOLDER_CONVERTED_BOOL, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 14u, 1u, TEST_PLACEHOLDER_CONVERTED_BOOL, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 11u, 12u, BS_MAX_VOLTAGE_DROP_OVER_FUSE_mV, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 31u, 16u, BS_MAIN_FUSE_MAXIMUM_TRIGGER_DURATION_ms, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x35u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 15u, 28u, BS_MAXIMUM_STRING_CURRENT_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 35u, 28u, BS_MAXIMUM_PACK_CURRENT_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x36u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 15u, 1u, TEST_PLACEHOLDER_CONVERTED_BOOL, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 14u, 12u, openWirePeriodSignals[0u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 18u, 1u, TEST_PLACEHOLDER_CONVERTED_BOOL, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 17u, 12u, openWirePeriodSignals[1u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 37u, 1u, TEST_PLACEHOLDER_CONVERTED_BOOL, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 36u, 12u, openWirePeriodSignals[2u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 40u, 12u, openWirePeriodSignals[3u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x37u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 15u, 14u, BS_NR_OF_CELL_BLOCKS_PER_STRING, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 17u, 14u, BS_NR_OF_CELL_BLOCKS, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 35u, 14u, BS_NR_OF_TEMP_SENSORS_PER_STRING, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 53u, 14u, BS_NR_OF_TEMP_SENSORS, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_NOT_OK); + /* ======= RT8/9: Call function under test */ + testResult = TEST_CANTX_SendBatterySystemConfiguration(); + /* ======= RT8/9: Test output verification */ + TEST_ASSERT_EQUAL(STD_NOT_OK, testResult); + + /* ======= RT9/9: Test implementation */ + CAN_TxPrepareSignalData_Ignore(); + CAN_ConvertBooleanToInteger_IgnoreAndReturn(TEST_PLACEHOLDER_CONVERTED_BOOL); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x30u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 15u, 8u, BS_NR_OF_STRINGS, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 23u, 8u, BS_NR_OF_MODULES_PER_STRING, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 31u, 8u, BS_NR_OF_CELL_BLOCKS_PER_MODULE, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 39u, 8u, BS_NR_OF_PARALLEL_CELLS_PER_CELL_BLOCK, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 47u, 8u, BS_NR_OF_GPIOS_PER_MODULE, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 55u, 8u, BS_NR_OF_GPAS_PER_MODULE, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 63u, 8u, BS_NR_OF_TEMP_SENSORS_PER_MODULE, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataZeroArray, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x31u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 15u, 1u, TEST_PLACEHOLDER_CONVERTED_BOOL, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 14u, 1u, TEST_PLACEHOLDER_CONVERTED_BOOL, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 13u, 1u, TEST_PLACEHOLDER_CONVERTED_BOOL, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 12u, 1u, TEST_PLACEHOLDER_CONVERTED_BOOL, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 11u, 12u, BS_BALANCING_RESISTANCE_ohm, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 31u, 12u, BS_REST_CURRENT_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 35u, 16u, BS_RELAXATION_PERIOD_10ms, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x32u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 15u, 8u, BS_NR_OF_CONTACTORS_OUTSIDE_STRINGS, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 23u, 8u, BS_NR_OF_CONTACTORS, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 31u, 32u, BS_MAIN_CONTACTORS_MAXIMUM_BREAK_CURRENT_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x33u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 15u, 1u, TEST_PLACEHOLDER_CONVERTED_BOOL, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 13u, 2u, BS_NR_OF_VOLTAGES_FROM_CURRENT_SENSOR, CAN_BIG_ENDIAN); +#if BS_CURRENT_SENSOR_PRESENT == true +#ifdef CURRENT_SENSOR_ISABELLENHUETTE_CYCLIC + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[3u], 14u, 1u, 0u, CAN_BIG_ENDIAN); +#elif CURRENT_SENSOR_ISABELLENHUETTE_TRIGGERED + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[3u], 14u, 0u, 0u, CAN_BIG_ENDIAN); +#endif + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 11u, 12u, BS_CURRENT_MEASUREMENT_RESPONSE_TIMEOUT_ms, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 31u, 12u, BS_COULOMB_COUNTING_MEASUREMENT_RESPONSE_TIMEOUT_ms, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 35u, 12u, BS_ENERGY_COUNTING_MEASUREMENT_RESPONSE_TIMEOUT_ms, CAN_BIG_ENDIAN); +#endif /* BS_CURRENT_SENSOR_PRESENT == true */ + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 55u, 12u, BS_CS_THRESHOLD_NO_CURRENT_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x34u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 15u, 1u, TEST_PLACEHOLDER_CONVERTED_BOOL, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 14u, 1u, TEST_PLACEHOLDER_CONVERTED_BOOL, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 11u, 12u, BS_MAX_VOLTAGE_DROP_OVER_FUSE_mV, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 31u, 16u, BS_MAIN_FUSE_MAXIMUM_TRIGGER_DURATION_ms, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x35u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 15u, 28u, BS_MAXIMUM_STRING_CURRENT_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 35u, 28u, BS_MAXIMUM_PACK_CURRENT_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x36u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 15u, 1u, TEST_PLACEHOLDER_CONVERTED_BOOL, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 14u, 12u, openWirePeriodSignals[0u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 18u, 1u, TEST_PLACEHOLDER_CONVERTED_BOOL, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 17u, 12u, openWirePeriodSignals[1u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 37u, 1u, TEST_PLACEHOLDER_CONVERTED_BOOL, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 36u, 12u, openWirePeriodSignals[2u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 40u, 12u, openWirePeriodSignals[3u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x37u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 15u, 14u, BS_NR_OF_CELL_BLOCKS_PER_STRING, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 17u, 14u, BS_NR_OF_CELL_BLOCKS, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 35u, 14u, BS_NR_OF_TEMP_SENSORS_PER_STRING, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 53u, 14u, BS_NR_OF_TEMP_SENSORS, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataFilled, CAN_BIG_ENDIAN); + CAN_TxSetCanDataWithMessageData_ReturnThruPtr_pCanData(testCanDataFilled); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_DEBUG_MESSAGE, + CANTX_DEBUG_BUILD_CONFIGURATION_ID, + CANTX_DEBUG_BUILD_CONFIGURATION_ID_TYPE, + testCanDataFilled, + STD_OK); + /* ======= RT9/9: Call function under test */ + testResult = TEST_CANTX_SendBatterySystemConfiguration(); + /* ======= RT9/9: Test output verification */ + TEST_ASSERT_EQUAL(STD_OK, testResult); +} + +/** + * @brief Testing CANTX_SetBatteryCellMuxMinVoltageMessageData + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/1: NULL_PTR for pMessageData -> assert + * - Routine validation: + * - RT1/1: Function sets expected values in the message data + */ +void testCANTX_SetBatterySystemMuxGeneral1MessageData(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/1 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_SetBatterySystemMuxGeneral1MessageData(NULL_PTR)); + + /* ======= Routine tests =============================================== */ + uint64_t messageData = 0u; + /* ======= RT1/1: Test implementation */ + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x30u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[1u], 15u, 8u, BS_NR_OF_STRINGS, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[2u]); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[2u], 23u, 8u, BS_NR_OF_MODULES_PER_STRING, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[3u]); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[3u], 31u, 8u, BS_NR_OF_CELL_BLOCKS_PER_MODULE, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[4u]); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[4u], 39u, 8u, BS_NR_OF_PARALLEL_CELLS_PER_CELL_BLOCK, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[5u]); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[5u], 47u, 8u, BS_NR_OF_GPIOS_PER_MODULE, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[6u]); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[6u], 55u, 8u, BS_NR_OF_GPAS_PER_MODULE, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[7u]); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[7u], 63u, 8u, BS_NR_OF_TEMP_SENSORS_PER_MODULE, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[8u]); + /* ======= RT1/1: Call function under test */ + TEST_CANTX_SetBatterySystemMuxGeneral1MessageData(&messageData); + /* ======= RT1/1: Test output verification */ + TEST_ASSERT_EQUAL(testMessageData[8u], messageData); +} + +/** + * @brief Testing CANTX_SetBatterySystemMuxGeneral2MessageData + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/1: NULL_PTR for pMessageData -> assert + * - Routine validation: + * - RT1/1: Function sets expected values in the message data + */ +void testCANTX_SetBatterySystemMuxGeneral2MessageData(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/1 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_SetBatterySystemMuxGeneral2MessageData(NULL_PTR)); + + /* ======= Routine tests =============================================== */ + uint64_t messageData = 0u; + /* ======= RT1/1: Test implementation */ + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x31u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_ConvertBooleanToInteger_ExpectAndReturn(BS_POSITIVE_DISCHARGE_CURRENT, testSignalData[0u]); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[1u], 15u, 1u, testSignalData[0u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[2u]); + CAN_ConvertBooleanToInteger_ExpectAndReturn(BS_IGNORE_INTERLOCK_FEEDBACK, testSignalData[1u]); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[2u], 14u, 1u, testSignalData[1u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[3u]); + CAN_ConvertBooleanToInteger_ExpectAndReturn(BS_CHECK_CAN_TIMING, testSignalData[2u]); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[3u], 13u, 1u, testSignalData[2u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[4u]); + CAN_ConvertBooleanToInteger_ExpectAndReturn(BS_BALANCING_DEFAULT_INACTIVE, testSignalData[3u]); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[4u], 12u, 1u, testSignalData[3u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[5u]); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[5u], 11u, 12u, BS_BALANCING_RESISTANCE_ohm, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[6u]); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[6u], 31u, 12u, BS_REST_CURRENT_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[7u]); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[7u], 35u, 16u, BS_RELAXATION_PERIOD_10ms, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[8u]); + /* ======= RT1/1: Call function under test */ + TEST_CANTX_SetBatterySystemMuxGeneral2MessageData(&messageData); + /* ======= RT1/1: Test output verification */ + TEST_ASSERT_EQUAL(testMessageData[8u], messageData); +} + +/** + * @brief Testing CANTX_SetBatterySystemMuxContactorsMessageData + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/1: NULL_PTR for pMessageData -> assert + * - Routine validation: + * - RT1/1: Function sets expected values in the message data + */ +void testCANTX_SetBatterySystemMuxContactorsMessageData(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/1 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_SetBatterySystemMuxContactorsMessageData(NULL_PTR)); + + /* ======= Routine tests =============================================== */ + uint64_t messageData = 0u; + /* ======= RT1/1: Test implementation */ + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x32u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[1u], 15u, 8u, BS_NR_OF_CONTACTORS_OUTSIDE_STRINGS, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[2u]); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[2u], 23u, 8u, BS_NR_OF_CONTACTORS, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[3u]); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[3u], 31u, 32u, BS_MAIN_CONTACTORS_MAXIMUM_BREAK_CURRENT_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[4u]); + /* ======= RT1/1: Call function under test */ + TEST_CANTX_SetBatterySystemMuxContactorsMessageData(&messageData); + /* ======= RT1/1: Test output verification */ + TEST_ASSERT_EQUAL(testMessageData[4u], messageData); +} + +/** + * @brief Testing CANTX_SetBatterySystemMuxCurrentSensorMessageData + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/1: NULL_PTR for pMessageData -> assert + * - Routine validation: + * - RT1/1: Function sets expected values in the message data + */ +void testCANTX_SetBatterySystemMuxCurrentSensorMessageData(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/1 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_SetBatterySystemMuxCurrentSensorMessageData(NULL_PTR)); + + /* ======= Routine tests =============================================== */ + uint64_t messageData = 0u; + /* ======= RT1/1: Test implementation */ + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x33u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_ConvertBooleanToInteger_ExpectAndReturn(BS_CURRENT_SENSOR_PRESENT, testSignalData[0u]); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[1u], 15u, 1u, testSignalData[0u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[2u]); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[2u], 13u, 2u, BS_NR_OF_VOLTAGES_FROM_CURRENT_SENSOR, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[3u]); +#if BS_CURRENT_SENSOR_PRESENT == true +#ifdef CURRENT_SENSOR_ISABELLENHUETTE_CYCLIC + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[3u], 14u, 1u, 0u, CAN_BIG_ENDIAN); +#elif CURRENT_SENSOR_ISABELLENHUETTE_TRIGGERED + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[3u], 14u, 0u, 0u, CAN_BIG_ENDIAN); +#endif + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[4u]); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[4u], 11u, 12u, BS_CURRENT_MEASUREMENT_RESPONSE_TIMEOUT_ms, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[5u]); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[5u], 31u, 12u, BS_COULOMB_COUNTING_MEASUREMENT_RESPONSE_TIMEOUT_ms, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[6u]); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[6u], 35u, 12u, BS_ENERGY_COUNTING_MEASUREMENT_RESPONSE_TIMEOUT_ms, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[7u]); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[7u], 55u, 12u, BS_CS_THRESHOLD_NO_CURRENT_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[8u]); +#else + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[3u], 55u, 12u, BS_CS_THRESHOLD_NO_CURRENT_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[8u]); +#endif /* BS_CURRENT_SENSOR_PRESENT == true */ + /* ======= RT1/1: Call function under test */ + TEST_CANTX_SetBatterySystemMuxCurrentSensorMessageData(&messageData); + /* ======= RT1/1: Test output verification */ + TEST_ASSERT_EQUAL(testMessageData[8u], messageData); +} + +/** + * @brief Testing CANTX_SetBatterySystemMuxFuseMessageData + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/1: NULL_PTR for pMessageData -> assert + * - Routine validation: + * - RT1/1: Function sets expected values in the message data + */ +void testCANTX_SetBatterySystemMuxFuseMessageData(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/1 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_SetBatterySystemMuxFuseMessageData(NULL_PTR)); + + /* ======= Routine tests =============================================== */ + uint64_t messageData = 0u; + /* ======= RT1/1: Test implementation */ + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x34u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_ConvertBooleanToInteger_ExpectAndReturn(BS_CHECK_FUSE_PLACED_IN_CHARGE_PATH, testSignalData[0u]); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[1u], 15u, 1u, testSignalData[0u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[2u]); + CAN_ConvertBooleanToInteger_ExpectAndReturn(BS_CHECK_FUSE_PLACED_IN_NORMAL_PATH, testSignalData[1u]); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[2u], 14u, 1u, testSignalData[1u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[3u]); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[3u], 11u, 12u, BS_MAX_VOLTAGE_DROP_OVER_FUSE_mV, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[4u]); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[4u], 31u, 16u, BS_MAIN_FUSE_MAXIMUM_TRIGGER_DURATION_ms, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[5u]); + /* ======= RT1/1: Call function under test */ + TEST_CANTX_SetBatterySystemMuxFuseMessageData(&messageData); + /* ======= RT1/1: Test output verification */ + TEST_ASSERT_EQUAL(testMessageData[5u], messageData); +} + +/** + * @brief Testing CANTX_SetBatterySystemMuxMaxCurrentMessageData + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/1: NULL_PTR for pMessageData -> assert + * - Routine validation: + * - RT1/1: Function sets expected values in the message data + */ +void testCANTX_SetBatterySystemMuxMaxCurrentMessageData(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/1 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_SetBatterySystemMuxMaxCurrentMessageData(NULL_PTR)); + + /* ======= Routine tests =============================================== */ + uint64_t messageData = 0u; + /* ======= RT1/1: Test implementation */ + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x35u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[1u], 15u, 28u, BS_MAXIMUM_STRING_CURRENT_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[2u]); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[2u], 35u, 28u, BS_MAXIMUM_PACK_CURRENT_mA, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[3u]); + /* ======= RT1/1: Call function under test */ + TEST_CANTX_SetBatterySystemMuxMaxCurrentMessageData(&messageData); + /* ======= RT1/1: Test output verification */ + TEST_ASSERT_EQUAL(testMessageData[3u], messageData); +} + +/** + * @brief Testing CANTX_SetBatterySystemMuxOpenWireCheckMessageData + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/1: NULL_PTR for pMessageData -> assert + * - Routine validation: + * - RT1/1: Function sets expected values in the message data + */ +void testCANTX_SetBatterySystemMuxOpenWireCheckMessageData(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/1 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_SetBatterySystemMuxOpenWireCheckMessageData(NULL_PTR)); + + /* ======= Routine tests =============================================== */ + uint64_t messageData = 0u; + float_t openWirePeriodSignals[4u] = { + (float_t)BS_STANDBY_OPEN_WIRE_PERIOD_ms, + (float_t)BS_NORMAL_OPEN_WIRE_PERIOD_ms, + (float_t)BS_CHARGE_OPEN_WIRE_PERIOD_ms, + (float_t)BS_ERROR_OPEN_WIRE_PERIOD_ms}; + uint64_t convertedSignalData[3u] = {0u, 1u, 2u}; + /* ======= RT1/1: Test implementation */ + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x36u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_ConvertBooleanToInteger_ExpectAndReturn(BS_STANDBY_PERIODIC_OPEN_WIRE_CHECK, convertedSignalData[0u]); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[1u], 15u, 1u, convertedSignalData[0u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[2u]); + CAN_TxPrepareSignalData_Expect(&openWirePeriodSignals[0u], signalOpenWirePeriod); + CAN_TxPrepareSignalData_ReturnThruPtr_pSignal(&testSignalData[0u]); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[2u], 14u, 12u, testSignalData[0u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[3u]); + CAN_ConvertBooleanToInteger_ExpectAndReturn(BS_NORMAL_PERIODIC_OPEN_WIRE_CHECK, convertedSignalData[1u]); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[3u], 18u, 1u, convertedSignalData[1u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[4u]); + CAN_TxPrepareSignalData_Expect(&openWirePeriodSignals[1u], signalOpenWirePeriod); + CAN_TxPrepareSignalData_ReturnThruPtr_pSignal(&testSignalData[1u]); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[4u], 17u, 12u, testSignalData[1u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[5u]); + CAN_ConvertBooleanToInteger_ExpectAndReturn(BS_CHARGE_PERIODIC_OPEN_WIRE_CHECK, convertedSignalData[2u]); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[5u], 37u, 1u, convertedSignalData[2u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[6u]); + CAN_TxPrepareSignalData_Expect(&openWirePeriodSignals[2u], signalOpenWirePeriod); + CAN_TxPrepareSignalData_ReturnThruPtr_pSignal(&testSignalData[2u]); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[6u], 36u, 12u, testSignalData[2u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[7u]); + CAN_TxPrepareSignalData_Expect(&openWirePeriodSignals[3u], signalOpenWirePeriod); + CAN_TxPrepareSignalData_ReturnThruPtr_pSignal(&testSignalData[3u]); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[7u], 40u, 12u, testSignalData[3u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[8u]); + /* ======= RT1/1: Call function under test */ + TEST_CANTX_SetBatterySystemMuxOpenWireCheckMessageData(&messageData); + /* ======= RT1/1: Test output verification */ + TEST_ASSERT_EQUAL(testMessageData[8u], messageData); +} + +/** + * @brief Testing CANTX_SetBatterySystemMuxTotalNumbersMessageData + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/1: NULL_PTR for pMessageData -> assert + * - Routine validation: + * - RT1/1: Function sets expected values in the message data + */ +void testCANTX_SetBatterySystemMuxTotalNumbersMessageData(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/1 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_SetBatterySystemMuxTotalNumbersMessageData(NULL_PTR)); + + /* ======= Routine tests =============================================== */ + uint64_t messageData = 0u; + /* ======= RT1/1: Test implementation */ + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 8u, 0x37u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[1u], 15u, 14u, BS_NR_OF_CELL_BLOCKS_PER_STRING, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[2u]); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[2u], 17u, 14u, BS_NR_OF_CELL_BLOCKS, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[3u]); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[3u], 35u, 14u, BS_NR_OF_TEMP_SENSORS_PER_STRING, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[4u]); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[4u], 53u, 14u, BS_NR_OF_TEMP_SENSORS, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[5u]); + /* ======= RT1/1: Call function under test */ + TEST_CANTX_SetBatterySystemMuxTotalNumbersMessageData(&messageData); + /* ======= RT1/1: Test output verification */ + TEST_ASSERT_EQUAL(testMessageData[5u], messageData); +} diff --git a/tests/unit/app/driver/can/cbs/tx-async/test_can_cbs_tx_debug-response.c b/tests/unit/app/driver/can/cbs/tx-async/test_can_cbs_tx_debug-response.c new file mode 100644 index 00000000..c65c0a66 --- /dev/null +++ b/tests/unit/app/driver/can/cbs/tx-async/test_can_cbs_tx_debug-response.c @@ -0,0 +1,203 @@ +/** + * + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * We kindly request you to use one or more of the following phrases to refer to + * foxBMS in your hardware, software, documentation or advertising materials: + * + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" + * + */ + +/** + * @file test_can_cbs_tx_debug-response.c + * @author foxBMS Team + * @date 2022-08-17 (date of creation) + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup UNIT_TEST_IMPLEMENTATION + * @prefix TEST + * + * @brief Tests for the CAN driver callbacks + * + */ + +/*========== Includes =======================================================*/ +#include "unity.h" +#include "Mockcan.h" +#include "Mockcan_helper.h" +#include "Mockfoxmath.h" +#include "Mockrtc.h" + +#include "database_cfg.h" +#include "version_cfg.h" + +#include "can_cbs_tx_debug-response.h" +#include "can_cfg_tx-async-message-definitions.h" + +#include + +/*========== Unit Testing Framework Directives ==============================*/ +TEST_SOURCE_FILE("can_cbs_tx_debug-response.c") + +TEST_INCLUDE_PATH("../../src/app/driver/can") +TEST_INCLUDE_PATH("../../src/app/driver/can/cbs") +TEST_INCLUDE_PATH("../../src/app/driver/can/cbs/tx-async") +TEST_INCLUDE_PATH("../../src/app/driver/config") +TEST_INCLUDE_PATH("../../src/app/driver/foxmath") +TEST_INCLUDE_PATH("../../src/app/driver/rtc") + +/*========== Definitions and Implementations for Unit Test ==================*/ +const CAN_NODE_s can_node1 = { + .canNodeRegister = canREG1, +}; + +const CAN_NODE_s can_node2Isolated = { + .canNodeRegister = canREG2, +}; + +/* Dummy for version file implementation */ +const VER_VERSION_s ver_foxbmsVersionInformation = { + .underVersionControl = true, + .isDirty = true, + .major = 13, + .minor = 54, + .patch = 7, + .distanceFromLastRelease = 42, + .commitHash = "deadbeef", + .gitRemote = "onTheDarkSideOfTheMoon.git", +}; + +/*========== Setup and Teardown =============================================*/ +void setUp(void) { +} + +void tearDown(void) { +} + +/*========== Test Cases =====================================================*/ +void testTransmitBmsVersionInfo(void) { + uint8_t testCanDataZeroArray[CANTX_DEBUG_RESPONSE_DLC] = {0u}; + uint64_t testMessageData = 0u; + + MATH_MinimumOfTwoUint16_t_ExpectAndReturn(42, 31u, 31u); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData, 7u, 8u, 0x00u, CANTX_DEBUG_RESPONSE_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData, 15u, 8u, 0x0Du, CANTX_DEBUG_RESPONSE_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData, 23u, 8u, 0x36u, CANTX_DEBUG_RESPONSE_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData, 31u, 8u, 0x07u, CANTX_DEBUG_RESPONSE_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData, 39u, 5u, 0x1Fu, CANTX_DEBUG_RESPONSE_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData, 34u, 1u, 0x01u, CANTX_DEBUG_RESPONSE_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData, 33u, 1u, 0x01u, CANTX_DEBUG_RESPONSE_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData, 32u, 1u, 0x01u, CANTX_DEBUG_RESPONSE_ENDIANNESS); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData, testCanDataZeroArray, CANTX_DEBUG_RESPONSE_ENDIANNESS); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_1, CANTX_DEBUG_RESPONSE_ID, CAN_STANDARD_IDENTIFIER_11_BIT, testCanDataZeroArray, STD_OK); + + CANTX_DebugResponse(CANTX_DEBUG_RESPONSE_TRANSMIT_BMS_VERSION_INFO); +} + +void testTransmitBootMagicStart(void) { + uint8_t testCanDataZeroArray[CANTX_DEBUG_RESPONSE_DLC] = {0u}; + uint64_t testMessageData = 0u; + + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData, 7u, 8u, 0x0Fu, CANTX_DEBUG_RESPONSE_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData, 15u, 56u, 0xFEFEFEFEFEFEFEuLL, CANTX_DEBUG_RESPONSE_ENDIANNESS); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData, testCanDataZeroArray, CANTX_DEBUG_RESPONSE_ENDIANNESS); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_1, CANTX_DEBUG_RESPONSE_ID, CAN_STANDARD_IDENTIFIER_11_BIT, testCanDataZeroArray, STD_OK); + + CANTX_DebugResponse(CANTX_DEBUG_RESPONSE_TRANSMIT_BOOT_MAGIC_START); +} + +void testTransmitBootMagicEnd(void) { + uint8_t testCanDataZeroArray[CANTX_DEBUG_RESPONSE_DLC] = {0u}; + uint64_t testMessageData = 0u; + + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData, 7u, 8u, 0x0Fu, CANTX_DEBUG_RESPONSE_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData, 15u, 56u, 0x01010101010101uLL, CANTX_DEBUG_RESPONSE_ENDIANNESS); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData, testCanDataZeroArray, CANTX_DEBUG_RESPONSE_ENDIANNESS); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_1, CANTX_DEBUG_RESPONSE_ID, CAN_STANDARD_IDENTIFIER_11_BIT, testCanDataZeroArray, STD_OK); + + CANTX_DebugResponse(CANTX_DEBUG_RESPONSE_TRANSMIT_BOOT_MAGIC_END); +} + +void testTransmitRtcTime(void) { + uint8_t testCanDataZeroArray[CANTX_DEBUG_RESPONSE_DLC] = {0u}; + uint64_t testMessageData = 0u; + RTC_TIME_DATA_s testRtcTime = { + .hundredthOfSeconds = 69u, + .seconds = 07u, + .minutes = 14u, + .hours = 3u, + .weekday = 2u, + .day = 19u, + .month = 1u, + .year = 38u, + }; + + RTC_GetSystemTimeRtcFormat_ExpectAndReturn(testRtcTime); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData, 7u, 8u, 0x04u, CANTX_DEBUG_RESPONSE_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData, 15u, 7u, 0x45u, CANTX_DEBUG_RESPONSE_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData, 8u, 6u, 0x07u, CANTX_DEBUG_RESPONSE_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData, 18u, 6u, 0x0Eu, CANTX_DEBUG_RESPONSE_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData, 28u, 5u, 0x03u, CANTX_DEBUG_RESPONSE_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData, 39u, 3u, 0x02u, CANTX_DEBUG_RESPONSE_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData, 36u, 5u, 0x13u, CANTX_DEBUG_RESPONSE_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData, 47u, 4u, 0x01u, CANTX_DEBUG_RESPONSE_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData, 43u, 7u, 0x26u, CANTX_DEBUG_RESPONSE_ENDIANNESS); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData, testCanDataZeroArray, CANTX_DEBUG_RESPONSE_ENDIANNESS); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_1, CANTX_DEBUG_RESPONSE_ID, CAN_STANDARD_IDENTIFIER_11_BIT, testCanDataZeroArray, STD_OK); + CANTX_DebugResponse(CANTX_DEBUG_RESPONSE_TRANSMIT_RTC_TIME); +} + +void testTransmitCommitHash(void) { + uint8_t testCanDataZeroArray[CANTX_DEBUG_RESPONSE_DLC] = {0u}; + uint64_t testMessageData = 0u; + + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData, 7u, 8u, 0x05u, CANTX_DEBUG_RESPONSE_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData, 15u, 8u, 0x64u, CANTX_DEBUG_RESPONSE_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData, 23u, 8u, 0x65u, CANTX_DEBUG_RESPONSE_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData, 31u, 8u, 0x61u, CANTX_DEBUG_RESPONSE_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData, 39u, 8u, 0x64u, CANTX_DEBUG_RESPONSE_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData, 47u, 8u, 0x62u, CANTX_DEBUG_RESPONSE_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData, 55u, 8u, 0x65u, CANTX_DEBUG_RESPONSE_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData, 63u, 8u, 0x65u, CANTX_DEBUG_RESPONSE_ENDIANNESS); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData, testCanDataZeroArray, CANTX_DEBUG_RESPONSE_ENDIANNESS); + CAN_DataSend_ExpectAndReturn( + CAN_NODE_1, CANTX_DEBUG_RESPONSE_ID, CAN_STANDARD_IDENTIFIER_11_BIT, testCanDataZeroArray, STD_OK); + CANTX_DebugResponse(CANTX_DEBUG_RESPONSE_TRANSMIT_COMMIT_HASH); +} diff --git a/tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_debug-unsupported-multiplexer-values.c b/tests/unit/app/driver/can/cbs/tx-async/test_can_cbs_tx_debug-unsupported-multiplexer-values.c similarity index 92% rename from tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_debug-unsupported-multiplexer-values.c rename to tests/unit/app/driver/can/cbs/tx-async/test_can_cbs_tx_debug-unsupported-multiplexer-values.c index 6d033079..a6635e76 100644 --- a/tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_debug-unsupported-multiplexer-values.c +++ b/tests/unit/app/driver/can/cbs/tx-async/test_can_cbs_tx_debug-unsupported-multiplexer-values.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_can_cbs_tx_debug-unsupported-multiplexer-values.c * @author foxBMS Team * @date 2022-11-16 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * @@ -64,8 +64,8 @@ #include "database_cfg.h" -#include "can_cbs_tx.h" #include "can_cbs_tx_debug-unsupported-multiplexer-values.h" +#include "can_cfg_tx-async-message-definitions.h" /*========== Unit Testing Framework Directives ==============================*/ TEST_SOURCE_FILE("can_cbs_tx_debug-unsupported-multiplexer-values.c") @@ -73,7 +73,7 @@ TEST_SOURCE_FILE("can_cbs_tx_debug-unsupported-multiplexer-values.c") TEST_INCLUDE_PATH("../../src/app/application/bms") TEST_INCLUDE_PATH("../../src/app/driver/can") TEST_INCLUDE_PATH("../../src/app/driver/can/cbs") -TEST_INCLUDE_PATH("../../src/app/driver/can/cbs/tx") +TEST_INCLUDE_PATH("../../src/app/driver/can/cbs/tx-async") TEST_INCLUDE_PATH("../../src/app/driver/config") TEST_INCLUDE_PATH("../../src/app/driver/foxmath") TEST_INCLUDE_PATH("../../src/app/driver/imd") @@ -82,7 +82,7 @@ TEST_INCLUDE_PATH("../../src/app/task/config") /*========== Definitions and Implementations for Unit Test ==================*/ -#define TEST_UNSUPPORTED_MULTIPLEXER 0x201 +#define TEST_UNSUPPORTED_MULTIPLEXER (0x302u) #define TEST_UNSUPPORTED_MULTIPLEXER_IDENTIFIER_TYPE (CAN_STANDARD_IDENTIFIER_11_BIT) const CAN_NODE_s can_node1 = { @@ -142,7 +142,7 @@ void tearDown(void) { } /*========== Test Cases =====================================================*/ -void testCANTX_UnsupportedMultiplexerValue(void) { +void testCANTX_DebugUnsupportedMultiplexerVal(void) { uint8_t testData[CAN_MAX_DLC] = {0}; uint32_t testMessageId = 2u; uint32_t testInvalidMultiplexerValue = 22u; @@ -153,5 +153,5 @@ void testCANTX_UnsupportedMultiplexerValue(void) { CAN_TxSetCanDataWithMessageData_Expect(testMessage, &testData[0], CAN_BIG_ENDIAN); CAN_DataSend_ExpectAndReturn( CAN_NODE_1, TEST_UNSUPPORTED_MULTIPLEXER, TEST_UNSUPPORTED_MULTIPLEXER_IDENTIFIER_TYPE, &testData[0], STD_OK); - CANTX_UnsupportedMultiplexerValue(testMessageId, testInvalidMultiplexerValue); + CANTX_DebugUnsupportedMultiplexerVal(testMessageId, testInvalidMultiplexerValue); } diff --git a/tests/unit/app/driver/can/cbs/tx-async/test_can_cbs_tx_imd-request.c b/tests/unit/app/driver/can/cbs/tx-async/test_can_cbs_tx_imd-request.c new file mode 100644 index 00000000..449ea4e3 --- /dev/null +++ b/tests/unit/app/driver/can/cbs/tx-async/test_can_cbs_tx_imd-request.c @@ -0,0 +1,324 @@ +/** + * + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * We kindly request you to use one or more of the following phrases to refer to + * foxBMS in your hardware, software, documentation or advertising materials: + * + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" + * + */ + +/** + * @file test_can_cbs_tx_imd-request.c + * @author foxBMS Team + * @date 2023-06-14 (date of creation) + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup UNIT_TEST_IMPLEMENTATION + * @prefix TEST + * + * @brief Tests for the CAN driver callbacks + * + */ + +/*========== Includes =======================================================*/ +#include "unity.h" +#include "Mockcan.h" +#include "Mockcan_helper.h" +#include "Mockdatabase.h" +#include "Mockdiag.h" +#include "Mockfoxmath.h" +#include "Mockimd.h" +#include "Mockos.h" + +#include "bender_iso165c_cfg.h" +#include "database_cfg.h" + +#include "can_cbs_tx_imd-request.h" +#include "can_cfg_tx-async-message-definitions.h" +#include "test_assert_helper.h" + +/*========== Unit Testing Framework Directives ==============================*/ +TEST_SOURCE_FILE("can_cbs_tx_imd-request.c") + +TEST_INCLUDE_PATH("../../src/app/driver/can") +TEST_INCLUDE_PATH("../../src/app/driver/can/cbs") +TEST_INCLUDE_PATH("../../src/app/driver/can/cbs/tx-async") +TEST_INCLUDE_PATH("../../src/app/driver/config") +TEST_INCLUDE_PATH("../../src/app/driver/foxmath") +TEST_INCLUDE_PATH("../../src/app/driver/imd") +TEST_INCLUDE_PATH("../../src/app/driver/imd/bender/iso165c/config") +TEST_INCLUDE_PATH("../../src/app/engine/diag") +TEST_INCLUDE_PATH("../../src/app/task/config") + +/*========== Definitions and Implementations for Unit Test ==================*/ +uint64_t testMessageData[4u] = {0u, 1u, 2u, 3u}; + +/* dummy data array filled with zero */ +uint8_t testCanDataZeroArray[CAN_MAX_DLC] = {0}; + +const CAN_NODE_s can_node1 = { + .canNodeRegister = canREG1, +}; + +const CAN_NODE_s can_node2Isolated = { + .canNodeRegister = canREG2, +}; + +/*========== Setup and Teardown =============================================*/ +void setUp(void) { +} + +void tearDown(void) { +} + +/*========== Test Cases =====================================================*/ + +/* Test invalid inputs */ +void testCANTX_ImdRequestInput(void) { + TEST_ASSERT_FAIL_ASSERT(CANTX_ImdRequest(CANTX_IMD_REQUEST_LAST_ACTION)) +} + +void testCANTX_RequestRelayOpenInput(void) { + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_RequestRelayOpen(2u)); +} + +void testCANTX_RequestRelayCloseInput(void) { + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_RequestRelayClose(2u)); +} + +void testCANTX_RequestRelayStateInput(void) { + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_RequestRelayState(2u)); +} + +/* Test helper functions */ +void testCANTX_RequestRelayOpen(void) { + /* test to open negative relay */ + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 0u, 8u, I165C_CMD_S_VIFC_SET_HV_RELAIS, CAN_LITTLE_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[1u], 8u, 16u, I165C_D_VIFC_HV_RELAIS_NEGATIVE, CAN_LITTLE_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[2u]); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[2u], 24u, 16u, I165C_RELAY_STATE_OPEN, CAN_LITTLE_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[3u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[3u], testCanDataZeroArray, CAN_LITTLE_ENDIAN); + CAN_DataSend_ExpectAndReturn( + I165C_CAN_NODE, I165C_MESSAGE_TYPE_IMD_REQUEST, I165C_TX_MESSAGE_IDENTIFIER_TYPE, testCanDataZeroArray, STD_OK); + TEST_ASSERT_EQUAL(STD_OK, CANTX_ImdRequest(CANTX_IMD_REQUEST_OPEN_NEGATIVE_RELAY)); + + /* test to open positive relay */ + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 0u, 8u, I165C_CMD_S_VIFC_SET_HV_RELAIS, CAN_LITTLE_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[1u], 8u, 16u, I165C_D_VIFC_HV_RELAIS_POSITIVE, CAN_LITTLE_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[2u]); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[2u], 24u, 16u, I165C_RELAY_STATE_OPEN, CAN_LITTLE_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[3u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[3u], testCanDataZeroArray, CAN_LITTLE_ENDIAN); + CAN_DataSend_ExpectAndReturn( + I165C_CAN_NODE, I165C_MESSAGE_TYPE_IMD_REQUEST, I165C_TX_MESSAGE_IDENTIFIER_TYPE, testCanDataZeroArray, STD_OK); + TEST_ASSERT_EQUAL(STD_OK, CANTX_ImdRequest(CANTX_IMD_REQUEST_OPEN_POSITIVE_RELAY)); +} + +void testCANTX_RequestRelayClose(void) { + /* test to close negative relay */ + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 0u, 8u, I165C_CMD_S_VIFC_SET_HV_RELAIS, CAN_LITTLE_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[1u], 8u, 16u, I165C_D_VIFC_HV_RELAIS_NEGATIVE, CAN_LITTLE_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[2u]); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[2u], 24u, 16u, I165C_RELAY_STATE_CLOSED, CAN_LITTLE_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[3u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[3u], testCanDataZeroArray, CAN_LITTLE_ENDIAN); + CAN_DataSend_ExpectAndReturn( + I165C_CAN_NODE, I165C_MESSAGE_TYPE_IMD_REQUEST, I165C_TX_MESSAGE_IDENTIFIER_TYPE, testCanDataZeroArray, STD_OK); + TEST_ASSERT_EQUAL(STD_OK, CANTX_ImdRequest(CANTX_IMD_REQUEST_CLOSE_NEGATIVE_RELAY)); + + /* test to close positive relay */ + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 0u, 8u, I165C_CMD_S_VIFC_SET_HV_RELAIS, CAN_LITTLE_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[1u], 8u, 16u, I165C_D_VIFC_HV_RELAIS_POSITIVE, CAN_LITTLE_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[2u]); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[2u], 24u, 16u, I165C_RELAY_STATE_CLOSED, CAN_LITTLE_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[3u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[3u], testCanDataZeroArray, CAN_LITTLE_ENDIAN); + CAN_DataSend_ExpectAndReturn( + I165C_CAN_NODE, I165C_MESSAGE_TYPE_IMD_REQUEST, I165C_TX_MESSAGE_IDENTIFIER_TYPE, testCanDataZeroArray, STD_OK); + TEST_ASSERT_EQUAL(STD_OK, CANTX_ImdRequest(CANTX_IMD_REQUEST_CLOSE_POSITIVE_RELAY)); +} + +void testCANTX_RequestRelayState(void) { + /* test to get negative relay state */ + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 0u, 8u, I165C_CMD_S_VIFC_GET_HV_RELAIS, CAN_LITTLE_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[1u], 8u, 16u, I165C_D_VIFC_HV_RELAIS_NEGATIVE, CAN_LITTLE_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[2u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[2u], testCanDataZeroArray, CAN_LITTLE_ENDIAN); + CAN_DataSend_ExpectAndReturn( + I165C_CAN_NODE, I165C_MESSAGE_TYPE_IMD_REQUEST, I165C_TX_MESSAGE_IDENTIFIER_TYPE, testCanDataZeroArray, STD_OK); + TEST_ASSERT_EQUAL(STD_OK, CANTX_ImdRequest(CANTX_IMD_REQUEST_NEGATIVE_RELAY_STATE)); + + /* test to get positive relay state */ + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 0u, 8u, I165C_CMD_S_VIFC_GET_HV_RELAIS, CAN_LITTLE_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[1u], 8u, 16u, I165C_D_VIFC_HV_RELAIS_POSITIVE, CAN_LITTLE_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[2u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[2u], testCanDataZeroArray, CAN_LITTLE_ENDIAN); + CAN_DataSend_ExpectAndReturn( + I165C_CAN_NODE, I165C_MESSAGE_TYPE_IMD_REQUEST, I165C_TX_MESSAGE_IDENTIFIER_TYPE, testCanDataZeroArray, STD_OK); + TEST_ASSERT_EQUAL(STD_OK, CANTX_ImdRequest(CANTX_IMD_REQUEST_POSITIVE_RELAY_STATE)); +} + +void testCANTX_RequestEnableMeasurement(void) { + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 0u, 8u, I165C_CMD_S_VIFC_CTL_MEASUREMENT, CAN_LITTLE_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[1u], 8u, 16u, I165C_ENABLE_MEASUREMENT, CAN_LITTLE_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[2u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[2u], testCanDataZeroArray, CAN_LITTLE_ENDIAN); + CAN_DataSend_ExpectAndReturn( + I165C_CAN_NODE, I165C_MESSAGE_TYPE_IMD_REQUEST, I165C_TX_MESSAGE_IDENTIFIER_TYPE, testCanDataZeroArray, STD_OK); + TEST_ASSERT_EQUAL(STD_OK, CANTX_ImdRequest(CANTX_IMD_REQUEST_ENABLE_MEASUREMENT)); +} + +void testCANTXRequestDisableMeasurement(void) { + /* test to get negative relay state */ + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 0u, 8u, I165C_CMD_S_VIFC_CTL_MEASUREMENT, CAN_LITTLE_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[1u], 8u, 16u, I165C_DISABLE_MEASUREMENT, CAN_LITTLE_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[2u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[2u], testCanDataZeroArray, CAN_LITTLE_ENDIAN); + CAN_DataSend_ExpectAndReturn( + I165C_CAN_NODE, I165C_MESSAGE_TYPE_IMD_REQUEST, I165C_TX_MESSAGE_IDENTIFIER_TYPE, testCanDataZeroArray, STD_OK); + TEST_ASSERT_EQUAL(STD_OK, CANTX_ImdRequest(CANTX_IMD_REQUEST_DISABLE_MEASUREMENT)); +} + +void testCANTXRequestSetAveragingFactor(void) { + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 0u, 8u, I165C_CMD_S_IMC_SET_MEAN_FACTOR, CAN_LITTLE_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[1u], 8u, 16u, I165C_MEASUREMENT_AVERAGING_FACTOR, CAN_LITTLE_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[2u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[2u], testCanDataZeroArray, CAN_LITTLE_ENDIAN); + CAN_DataSend_ExpectAndReturn( + I165C_CAN_NODE, I165C_MESSAGE_TYPE_IMD_REQUEST, I165C_TX_MESSAGE_IDENTIFIER_TYPE, testCanDataZeroArray, STD_OK); + TEST_ASSERT_EQUAL(STD_OK, CANTX_ImdRequest(CANTX_IMD_REQUEST_SET_AVERAGING_FACTOR)); +} + +void testCANTX_RequestReadResistance(void) { + /* test to get negative relay state */ + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 0u, 8u, I165C_CMD_S_IMC_GET_R_ISO, CAN_LITTLE_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanDataZeroArray, CAN_LITTLE_ENDIAN); + CAN_DataSend_ExpectAndReturn( + I165C_CAN_NODE, I165C_MESSAGE_TYPE_IMD_REQUEST, I165C_TX_MESSAGE_IDENTIFIER_TYPE, testCanDataZeroArray, STD_OK); + TEST_ASSERT_EQUAL(STD_OK, CANTX_ImdRequest(CANTX_IMD_REQUEST_READ_RESISTANCE)); +} + +void testCANTX_RequestUnlock(void) { + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 0u, 8u, I165C_CMD_S_VIFC_CTL_LOCK, CAN_LITTLE_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[1u], 8u, 16u, I165C_LOCK_MODE_UNLOCKED, CAN_LITTLE_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[2u]); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[2u], 24u, 16u, I165C_UNLOCK_PASSWORD, CAN_LITTLE_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[3u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[3u], testCanDataZeroArray, CAN_LITTLE_ENDIAN); + CAN_DataSend_ExpectAndReturn( + I165C_CAN_NODE, I165C_MESSAGE_TYPE_IMD_REQUEST, I165C_TX_MESSAGE_IDENTIFIER_TYPE, testCanDataZeroArray, STD_OK); + TEST_ASSERT_EQUAL(STD_OK, CANTX_ImdRequest(CANTX_IMD_REQUEST_INITIALIZATION_UNLOCK)); +} + +void testCANTX_RequestSelfTest(void) { + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 0u, 8u, I165C_CMD_S_IMC_CTL_SELFTEST, CAN_LITTLE_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); +#ifdef I165C_SELF_TEST_LONG + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[1u], 8u, 16u, I165C_SELFTEST_SCENARIO_OVERALL, CAN_LITTLE_ENDIAN); +#else /* I165C_SELF_TEST_SHORT */ + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[1u], 8u, 16u, I165C_SELFTEST_SCENARIO_PARAMETERCONFIG, CAN_LITTLE_ENDIAN); +#endif + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[2u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[2u], testCanDataZeroArray, CAN_LITTLE_ENDIAN); + CAN_DataSend_ExpectAndReturn( + I165C_CAN_NODE, I165C_MESSAGE_TYPE_IMD_REQUEST, I165C_TX_MESSAGE_IDENTIFIER_TYPE, testCanDataZeroArray, STD_OK); + TEST_ASSERT_EQUAL(STD_OK, CANTX_ImdRequest(CANTX_IMD_REQUEST_INITIALIZATION_SELF_TEST)); +} + +void testCANTX_SetErrorThreshold(void) { + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 0u, 8u, I165C_CMD_S_IMC_SET_R_ISO_ERR_THR, CAN_LITTLE_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[1u], 8u, 16u, I165C_ERROR_THRESHOLD_kOhm, CAN_LITTLE_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[2u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[2u], testCanDataZeroArray, CAN_LITTLE_ENDIAN); + CAN_DataSend_ExpectAndReturn( + I165C_CAN_NODE, I165C_MESSAGE_TYPE_IMD_REQUEST, I165C_TX_MESSAGE_IDENTIFIER_TYPE, testCanDataZeroArray, STD_OK); + TEST_ASSERT_EQUAL(STD_OK, CANTX_ImdRequest(CANTX_IMD_REQUEST_INITIALIZATION_SET_ERROR_THRESHOLD)); +} + +void testCANTX_SetWarningThreshold(void) { + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 0u, 8u, I165C_CMD_S_IMC_SET_R_ISO_WRN_THR, CAN_LITTLE_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[1u], 8u, 16u, I165C_WARNING_THRESHOLD_kOhm, CAN_LITTLE_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[2u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[2u], testCanDataZeroArray, CAN_LITTLE_ENDIAN); + CAN_DataSend_ExpectAndReturn( + I165C_CAN_NODE, I165C_MESSAGE_TYPE_IMD_REQUEST, I165C_TX_MESSAGE_IDENTIFIER_TYPE, testCanDataZeroArray, STD_OK); + TEST_ASSERT_EQUAL(STD_OK, CANTX_ImdRequest(CANTX_IMD_REQUEST_INITIALIZATION_SET_WARNING_THRESHOLD)); +} diff --git a/tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_bms-state-details.c b/tests/unit/app/driver/can/cbs/tx-cyclic/test_can_cbs_tx_bms-state-details.c similarity index 53% rename from tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_bms-state-details.c rename to tests/unit/app/driver/can/cbs/tx-cyclic/test_can_cbs_tx_bms-state-details.c index 238b28cf..7fdf30ed 100644 --- a/tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_bms-state-details.c +++ b/tests/unit/app/driver/can/cbs/tx-cyclic/test_can_cbs_tx_bms-state-details.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_can_cbs_tx_bms-state-details.c * @author foxBMS Team * @date 2021-07-27 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * @@ -54,8 +54,8 @@ /*========== Includes =======================================================*/ #include "unity.h" -#include "Mockbms.h" #include "Mockcan.h" +#include "Mockcan_helper.h" #include "Mockdatabase.h" #include "Mockdiag.h" #include "Mockfoxmath.h" @@ -65,8 +65,8 @@ #include "database_cfg.h" -#include "can_cbs_tx.h" -#include "can_helper.h" +#include "can_cbs_tx_cyclic.h" +#include "can_cfg_tx-cyclic-message-definitions.h" /*========== Unit Testing Framework Directives ==============================*/ TEST_SOURCE_FILE("can_cbs_tx_bms-state-details.c") @@ -74,7 +74,7 @@ TEST_SOURCE_FILE("can_cbs_tx_bms-state-details.c") TEST_INCLUDE_PATH("../../src/app/application/bms") TEST_INCLUDE_PATH("../../src/app/driver/can") TEST_INCLUDE_PATH("../../src/app/driver/can/cbs") -TEST_INCLUDE_PATH("../../src/app/driver/can/cbs/tx") +TEST_INCLUDE_PATH("../../src/app/driver/can/cbs/tx-cyclic") TEST_INCLUDE_PATH("../../src/app/driver/config") TEST_INCLUDE_PATH("../../src/app/driver/contactor") TEST_INCLUDE_PATH("../../src/app/driver/foxmath") @@ -86,6 +86,13 @@ TEST_INCLUDE_PATH("../../src/app/engine/sys_mon") TEST_INCLUDE_PATH("../../src/app/task/config") /*========== Definitions and Implementations for Unit Test ==================*/ +const CAN_NODE_s can_node1 = { + .canNodeRegister = canREG1, +}; + +const CAN_NODE_s can_node2Isolated = { + .canNodeRegister = canREG2, +}; static DATA_BLOCK_CELL_VOLTAGE_s can_tableCellVoltages = {.header.uniqueId = DATA_BLOCK_ID_CELL_VOLTAGE}; static DATA_BLOCK_CELL_TEMPERATURE_s can_tableTemperatures = {.header.uniqueId = DATA_BLOCK_ID_CELL_TEMPERATURE}; @@ -133,5 +140,83 @@ void tearDown(void) { } /*========== Test Cases =====================================================*/ -void testDummy(void) { +void test_BmsStateDetails(void) { + CAN_MESSAGE_PROPERTIES_s testMessage = { + .id = CANTX_BMS_STATE_DETAILS_ID, + .idType = CANTX_BMS_STATE_DETAILS_ID_TYPE, + .dlc = CANTX_BMS_STATE_DETAILS_DLC, + .endianness = CANTX_BMS_STATE_DETAILS_ENDIANNESS, + }; + uint8_t testCanDataZeroArray[CANTX_BMS_STATE_DETAILS_DLC] = {0u}; + + /* set local data table as needed */ + can_tableErrorState.taskEngineTimingViolationError = true; + can_tableErrorState.task1msTimingViolationError = true; + can_tableErrorState.task10msTimingViolationError = true; + can_tableErrorState.task100msTimingViolationError = true; + can_tableErrorState.task100msAlgoTimingViolationError = true; + + /* create timing violation response struct */ + SYSM_TIMING_VIOLATION_RESPONSE_s testRecordedTimingViolations = { + .recordedViolationEngine = true, + .recordedViolation1ms = true, + .recordedViolation10ms = true, + .recordedViolation100ms = true, + .recordedViolation100msAlgo = true, + }; + + /* values of message data after each time information was added*/ + uint64_t testMessageData[11u] = { + 0x0000u, + 0x0001u, + 0x0003u, + 0x0007u, + 0x000Fu, + 0x001Fu, + 0x011Fu, + 0x031Fu, + 0x071Fu, + 0x0F1Fu, + 0x1F1Fu, + }; + + SYSM_TIMING_VIOLATION_RESPONSE_s testRecordedTimingViolationsZero = {0u}; + + DATA_Read1DataBlock_ExpectAndReturn(can_kShim.pTableErrorState, STD_OK); + SYSM_GetRecordedTimingViolations_Expect(&testRecordedTimingViolationsZero); + SYSM_GetRecordedTimingViolations_ReturnThruPtr_pAnswer(&testRecordedTimingViolations); + CAN_ConvertBooleanToInteger_ExpectAndReturn(true, 1u); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 0u, 1u, 1u, CANTX_BMS_STATE_DETAILS_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_ConvertBooleanToInteger_ExpectAndReturn(true, 1u); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[1u], 1u, 1u, 1u, CANTX_BMS_STATE_DETAILS_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[2u]); + CAN_ConvertBooleanToInteger_ExpectAndReturn(true, 1u); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[2u], 2u, 1u, 1u, CANTX_BMS_STATE_DETAILS_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[3u]); + CAN_ConvertBooleanToInteger_ExpectAndReturn(true, 1u); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[3u], 3u, 1u, 1u, CANTX_BMS_STATE_DETAILS_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[4u]); + CAN_ConvertBooleanToInteger_ExpectAndReturn(true, 1u); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[4u], 4u, 1u, 1u, CANTX_BMS_STATE_DETAILS_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[5u]); + CAN_ConvertBooleanToInteger_ExpectAndReturn(true, 1u); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[5u], 8u, 1u, 1u, CANTX_BMS_STATE_DETAILS_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[6u]); + CAN_ConvertBooleanToInteger_ExpectAndReturn(true, 1u); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[6u], 9u, 1u, 1u, CANTX_BMS_STATE_DETAILS_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[7u]); + CAN_ConvertBooleanToInteger_ExpectAndReturn(true, 1u); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[7u], 10u, 1u, 1u, CANTX_BMS_STATE_DETAILS_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[8u]); + CAN_ConvertBooleanToInteger_ExpectAndReturn(true, 1u); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[8u], 11u, 1u, 1u, CANTX_BMS_STATE_DETAILS_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[9u]); + CAN_ConvertBooleanToInteger_ExpectAndReturn(true, 1u); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[9u], 12u, 1u, 1u, CANTX_BMS_STATE_DETAILS_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[10u]); + CAN_TxSetCanDataWithMessageData_Expect( + testMessageData[10u], testCanDataZeroArray, CANTX_BMS_STATE_DETAILS_ENDIANNESS); + + CANTX_BmsStateDetails(testMessage, testCanDataZeroArray, NULL_PTR, &can_kShim); } diff --git a/tests/unit/app/driver/can/cbs/tx-cyclic/test_can_cbs_tx_bms-state.c b/tests/unit/app/driver/can/cbs/tx-cyclic/test_can_cbs_tx_bms-state.c new file mode 100644 index 00000000..ed0019f5 --- /dev/null +++ b/tests/unit/app/driver/can/cbs/tx-cyclic/test_can_cbs_tx_bms-state.c @@ -0,0 +1,484 @@ +/** + * + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * We kindly request you to use one or more of the following phrases to refer to + * foxBMS in your hardware, software, documentation or advertising materials: + * + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" + * + */ + +/** + * @file test_can_cbs_tx_bms-state.c + * @author foxBMS Team + * @date 2021-07-27 (date of creation) + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup UNIT_TEST_IMPLEMENTATION + * @prefix TEST + * + * @brief Tests for the CAN driver callbacks + * + */ + +/*========== Includes =======================================================*/ +#include "unity.h" +#include "Mockbms.h" +#include "Mockcan.h" +#include "Mockcan_helper.h" +#include "Mockdatabase.h" +#include "Mockdiag.h" +#include "Mockfoxmath.h" +#include "Mockimd.h" +#include "Mockos.h" +#include "Mocksys_mon.h" + +#include "database_cfg.h" + +#include "can_cbs_tx_cyclic.h" +#include "can_cfg_tx-cyclic-message-definitions.h" +#include "test_assert_helper.h" + +/*========== Unit Testing Framework Directives ==============================*/ +TEST_SOURCE_FILE("can_cbs_tx_bms-state.c") + +TEST_INCLUDE_PATH("../../src/app/application/bms") +TEST_INCLUDE_PATH("../../src/app/driver/can") +TEST_INCLUDE_PATH("../../src/app/driver/can/cbs") +TEST_INCLUDE_PATH("../../src/app/driver/can/cbs/tx-cyclic") +TEST_INCLUDE_PATH("../../src/app/driver/config") +TEST_INCLUDE_PATH("../../src/app/driver/contactor") +TEST_INCLUDE_PATH("../../src/app/driver/foxmath") +TEST_INCLUDE_PATH("../../src/app/driver/fram") +TEST_INCLUDE_PATH("../../src/app/driver/imd") +TEST_INCLUDE_PATH("../../src/app/driver/sps") +TEST_INCLUDE_PATH("../../src/app/engine/diag") +TEST_INCLUDE_PATH("../../src/app/engine/sys_mon") +TEST_INCLUDE_PATH("../../src/app/task/config") + +/*========== Definitions and Implementations for Unit Test ==================*/ +uint64_t testMessageData[19u] = {0u}; + +const CAN_NODE_s can_node1 = { + .canNodeRegister = canREG1, +}; + +const CAN_NODE_s can_node2Isolated = { + .canNodeRegister = canREG2, +}; + +static DATA_BLOCK_CELL_VOLTAGE_s can_tableCellVoltages = {.header.uniqueId = DATA_BLOCK_ID_CELL_VOLTAGE}; +static DATA_BLOCK_CELL_TEMPERATURE_s can_tableTemperatures = {.header.uniqueId = DATA_BLOCK_ID_CELL_TEMPERATURE}; +static DATA_BLOCK_MIN_MAX_s can_tableMinimumMaximumValues = {.header.uniqueId = DATA_BLOCK_ID_MIN_MAX}; +static DATA_BLOCK_CURRENT_SENSOR_s can_tableCurrentSensor = {.header.uniqueId = DATA_BLOCK_ID_CURRENT_SENSOR}; +static DATA_BLOCK_OPEN_WIRE_s can_tableOpenWire = {.header.uniqueId = DATA_BLOCK_ID_OPEN_WIRE_BASE}; +static DATA_BLOCK_STATE_REQUEST_s can_tableStateRequest = {.header.uniqueId = DATA_BLOCK_ID_STATE_REQUEST}; +static DATA_BLOCK_PACK_VALUES_s can_tablePackValues = {.header.uniqueId = DATA_BLOCK_ID_PACK_VALUES}; +static DATA_BLOCK_SOF_s can_tableSof = {.header.uniqueId = DATA_BLOCK_ID_SOF}; +static DATA_BLOCK_SOC_s can_tableSoc = {.header.uniqueId = DATA_BLOCK_ID_SOC}; +static DATA_BLOCK_SOE_s can_tableSoe = {.header.uniqueId = DATA_BLOCK_ID_SOE}; +static DATA_BLOCK_ERROR_STATE_s can_tableErrorState = {.header.uniqueId = DATA_BLOCK_ID_ERROR_STATE}; +static DATA_BLOCK_INSULATION_MONITORING_s can_tableInsulation = { + .header.uniqueId = DATA_BLOCK_ID_INSULATION_MONITORING}; +static DATA_BLOCK_MSL_FLAG_s can_tableMslFlags = {.header.uniqueId = DATA_BLOCK_ID_MSL_FLAG}; +static DATA_BLOCK_RSL_FLAG_s can_tableRslFlags = {.header.uniqueId = DATA_BLOCK_ID_RSL_FLAG}; +static DATA_BLOCK_MOL_FLAG_s can_tableMolFlags = {.header.uniqueId = DATA_BLOCK_ID_MOL_FLAG}; +static DATA_BLOCK_AEROSOL_SENSOR_s can_tableAerosolSensor = {.header.uniqueId = DATA_BLOCK_ID_AEROSOL_SENSOR}; + +OS_QUEUE imd_canDataQueue = NULL_PTR; + +const CAN_SHIM_s can_kShim = { + .pQueueImd = &imd_canDataQueue, + .pTableCellVoltage = &can_tableCellVoltages, + .pTableCellTemperature = &can_tableTemperatures, + .pTableMinMax = &can_tableMinimumMaximumValues, + .pTableCurrentSensor = &can_tableCurrentSensor, + .pTableOpenWire = &can_tableOpenWire, + .pTableStateRequest = &can_tableStateRequest, + .pTablePackValues = &can_tablePackValues, + .pTableSof = &can_tableSof, + .pTableSoc = &can_tableSoc, + .pTableSoe = &can_tableSoe, + .pTableErrorState = &can_tableErrorState, + .pTableInsulation = &can_tableInsulation, + .pTableMsl = &can_tableMslFlags, + .pTableRsl = &can_tableRslFlags, + .pTableMol = &can_tableMolFlags, + .pTableAerosolSensor = &can_tableAerosolSensor, +}; + +/* bms state with standard config only relevant entries differ */ +static BMS_STATE_s bms_state = { + .timer = 0, + .stateRequest = BMS_STATE_NO_REQUEST, + .state = BMS_STATEMACH_NORMAL, /* changed */ + .substate = BMS_ENTRY, + .lastState = BMS_STATEMACH_UNINITIALIZED, + .lastSubstate = BMS_ENTRY, + .triggerentry = 0u, + .ErrRequestCounter = 0u, + .initFinished = STD_NOT_OK, + .counter = 0u, + .OscillationTimeout = 0u, + .prechargeTryCounter = 0u, + .powerPath = BMS_POWER_PATH_OPEN, + .closedStrings = {0u}, + .closedPrechargeContactors = {0u}, + .numberOfClosedStrings = 5u, /* changed */ + .deactivatedStrings = {0}, + .firstClosedString = 0u, + .stringOpenTimeout = 0u, + .nextStringClosedTimer = 0u, + .stringCloseTimeout = 0u, + .nextState = BMS_STATEMACH_STANDBY, + .restTimer_10ms = BS_RELAXATION_PERIOD_10ms, + .currentFlowState = BMS_RELAXATION, + .remainingDelay_ms = UINT32_MAX, + .minimumActiveDelay_ms = UINT32_MAX, + .transitionToErrorState = true, /* changed */ + .timeAboveContactorBreakCurrent_ms = 0u, + .stringToBeOpened = 0u, + .contactorToBeOpened = CONT_UNDEFINED, +}; + +/*========== Setup and Teardown =============================================*/ +void setUp(void) { + for (uint8_t i = 0; i < 19; i++) { + testMessageData[i] = i; + } +} + +void tearDown(void) { +} + +/*========== Test Cases =====================================================*/ +/** + * @brief Testing CANTX_AnySysMonTimingIssueDetected + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/1: NULL_PTR for kpkCanShim -> assert + * - Routine validation: + * - RT1/7: No flags set + * - RT2/7: recordedViolationAny flag set + * - RT3/7: taskEngineTimingViolationError set + * - RT4/7: task1msTimingViolationError set + * - RT5/7: task10msTimingViolationError set + * - RT6/7: task100msTimingViolationError set + * - RT7/7: task100msAlgoTimingViolationError set + */ +void testCANTX_AnySysMonTimingIssueDetected(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/1 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_AnySysMonTimingIssueDetected(NULL_PTR)); + + /* ======= Routine tests =============================================== */ + SYSM_TIMING_VIOLATION_RESPONSE_s testRecordedTimingViolationsZero = {0u}; + SYSM_TIMING_VIOLATION_RESPONSE_s testRecordedTimingViolations = { + .recordedViolationAny = false, + .recordedViolationEngine = false, + .recordedViolation1ms = false, + .recordedViolation10ms = false, + .recordedViolation100ms = false, + .recordedViolation100msAlgo = false, + }; + /* ======= RT1/7: Test implementation */ + SYSM_GetRecordedTimingViolations_Expect(&testRecordedTimingViolationsZero); + SYSM_GetRecordedTimingViolations_ReturnThruPtr_pAnswer(&testRecordedTimingViolations); + /* ======= RT1/7: Call function under test */ + bool testResult = TEST_CANTX_AnySysMonTimingIssueDetected(&can_kShim); + /* ======= RT1/7: Test output verification */ + TEST_ASSERT_EQUAL(false, testResult); + + testRecordedTimingViolations.recordedViolationAny = true; + /* ======= RT2/7: Test implementation */ + SYSM_GetRecordedTimingViolations_Expect(&testRecordedTimingViolationsZero); + SYSM_GetRecordedTimingViolations_ReturnThruPtr_pAnswer(&testRecordedTimingViolations); + /* ======= RT2/7: Call function under test */ + testResult = TEST_CANTX_AnySysMonTimingIssueDetected(&can_kShim); + /* ======= RT2/7: Test output verification */ + TEST_ASSERT_EQUAL(true, testResult); + testRecordedTimingViolations.recordedViolationAny = false; + + can_tableErrorState.taskEngineTimingViolationError = true; + /* ======= RT3/7: Test implementation */ + SYSM_GetRecordedTimingViolations_Expect(&testRecordedTimingViolationsZero); + SYSM_GetRecordedTimingViolations_ReturnThruPtr_pAnswer(&testRecordedTimingViolations); + /* ======= RT3/7: Call function under test */ + testResult = TEST_CANTX_AnySysMonTimingIssueDetected(&can_kShim); + /* ======= RT3/7: Test output verification */ + TEST_ASSERT_EQUAL(true, testResult); + can_tableErrorState.taskEngineTimingViolationError = false; + + can_tableErrorState.task1msTimingViolationError = true; + /* ======= RT4/7: Test implementation */ + SYSM_GetRecordedTimingViolations_Expect(&testRecordedTimingViolationsZero); + SYSM_GetRecordedTimingViolations_ReturnThruPtr_pAnswer(&testRecordedTimingViolations); + /* ======= RT4/7: Call function under test */ + testResult = TEST_CANTX_AnySysMonTimingIssueDetected(&can_kShim); + /* ======= RT4/7: Test output verification */ + TEST_ASSERT_EQUAL(true, testResult); + can_tableErrorState.task1msTimingViolationError = false; + + can_tableErrorState.task10msTimingViolationError = true; + /* ======= RT5/7: Test implementation */ + SYSM_GetRecordedTimingViolations_Expect(&testRecordedTimingViolationsZero); + SYSM_GetRecordedTimingViolations_ReturnThruPtr_pAnswer(&testRecordedTimingViolations); + /* ======= RT5/7: Call function under test */ + testResult = TEST_CANTX_AnySysMonTimingIssueDetected(&can_kShim); + /* ======= RT5/7: Test output verification */ + TEST_ASSERT_EQUAL(true, testResult); + can_tableErrorState.task10msTimingViolationError = false; + + can_tableErrorState.task100msTimingViolationError = true; + /* ======= RT6/7: Test implementation */ + SYSM_GetRecordedTimingViolations_Expect(&testRecordedTimingViolationsZero); + SYSM_GetRecordedTimingViolations_ReturnThruPtr_pAnswer(&testRecordedTimingViolations); + /* ======= RT6/7: Call function under test */ + testResult = TEST_CANTX_AnySysMonTimingIssueDetected(&can_kShim); + /* ======= RT6/7: Test output verification */ + TEST_ASSERT_EQUAL(true, testResult); + can_tableErrorState.task100msTimingViolationError = false; + + can_tableErrorState.task100msAlgoTimingViolationError = true; + /* ======= RT7/7: Test implementation */ + SYSM_GetRecordedTimingViolations_Expect(&testRecordedTimingViolationsZero); + SYSM_GetRecordedTimingViolations_ReturnThruPtr_pAnswer(&testRecordedTimingViolations); + /* ======= RT7/7: Call function under test */ + testResult = TEST_CANTX_AnySysMonTimingIssueDetected(&can_kShim); + /* ======= RT7/7: Test output verification */ + TEST_ASSERT_EQUAL(true, testResult); + can_tableErrorState.task100msAlgoTimingViolationError = false; +} + +/** + * @brief Testing CANTX_BmsState + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/7: invalid message id -> assert + * - AT2/7: invalid message id type -> assert + * - AT3/7: invalid message dlc size -> assert + * - AT4/7: invalid message endianness -> assert + * - AT5/7: NULL_PTR for pCanData -> assert + * - AT6/7: NO NULL_PTR for pMuxId -> assert + * - AT7/7: NULL_PTR for kpkCanShim -> assert + * - Routine validation: + * - RT1/2: Function prepares signal data as expected, no precharge error + * - RT2/2: Function prepares signal data as expected, precharge errors + */ +void testCANTX_BmsState(void) { + /* ======= Assertion tests ============================================= */ + CAN_MESSAGE_PROPERTIES_s testMessage = { + .id = 0x220, + .idType = CAN_STANDARD_IDENTIFIER_11_BIT, + .dlc = 8u, + .endianness = CAN_BIG_ENDIAN, + }; + + uint8_t testCanData[CAN_MAX_DLC] = {0u}; + uint8_t testMuxId = 0u; + /* ======= AT1/7 ======= */ + testMessage.id = CAN_MAX_11BIT_ID; + TEST_ASSERT_FAIL_ASSERT(CANTX_BmsState(testMessage, testCanData, NULL_PTR, &can_kShim)); + testMessage.id = 0x220; + /* ======= AT2/7 ======= */ + testMessage.idType = CAN_EXTENDED_IDENTIFIER_29_BIT; + TEST_ASSERT_FAIL_ASSERT(CANTX_BmsState(testMessage, testCanData, NULL_PTR, &can_kShim)); + testMessage.idType = CAN_STANDARD_IDENTIFIER_11_BIT; + /* ======= AT3/7 ======= */ + testMessage.dlc = 9u; + TEST_ASSERT_FAIL_ASSERT(CANTX_BmsState(testMessage, testCanData, NULL_PTR, &can_kShim)); + testMessage.dlc = 8u; + /* ======= AT4/7 ======= */ + testMessage.endianness = CAN_LITTLE_ENDIAN; + TEST_ASSERT_FAIL_ASSERT(CANTX_BmsState(testMessage, testCanData, NULL_PTR, &can_kShim)); + testMessage.endianness = CAN_BIG_ENDIAN; + /* ======= AT5/7 ======= */ + TEST_ASSERT_FAIL_ASSERT(CANTX_BmsState(testMessage, NULL_PTR, NULL_PTR, &can_kShim)); + /* ======= AT6/7 ======= */ + TEST_ASSERT_FAIL_ASSERT(CANTX_BmsState(testMessage, testCanData, &testMuxId, &can_kShim)); + /* ======= AT7/7 ======= */ + TEST_ASSERT_FAIL_ASSERT(CANTX_BmsState(testMessage, testCanData, NULL_PTR, NULL_PTR)); + + /* ======= Routine tests =============================================== */ + can_tableInsulation.isImdRunning = true; + can_tableErrorState.prechargeAbortedDueToVoltage[0u] = false; + can_tableErrorState.prechargeAbortedDueToCurrent[0u] = false; + can_tableErrorState.mcuDieTemperatureViolationError = true; + can_tableErrorState.mainFuseError = true; + can_tableErrorState.interlockOpenedError = true; + can_tableErrorState.criticalLowInsulationResistanceError = true; + can_tableErrorState.stateRequestTimingViolationError = true; + can_tableMslFlags.packChargeOvercurrent = true; + can_tableMslFlags.packDischargeOvercurrent = true; + can_tableErrorState.alertFlagSetError = true; + can_tableErrorState.framReadCrcError = true; + can_tableInsulation.insulationResistance_kOhm = 1250u; + + SYSM_TIMING_VIOLATION_RESPONSE_s testRecordedTimingViolationsZero = {0u}; + SYSM_TIMING_VIOLATION_RESPONSE_s testRecordedTimingViolations = { + .recordedViolationAny = true, + .recordedViolationEngine = true, + .recordedViolation1ms = true, + .recordedViolation10ms = true, + .recordedViolation100ms = true, + .recordedViolation100msAlgo = true, + }; + /* ======= RT1/1: Test implementation */ + CAN_TxPrepareSignalData_Ignore(); + DATA_Read3DataBlocks_ExpectAndReturn( + can_kShim.pTableErrorState, can_kShim.pTableInsulation, can_kShim.pTableMsl, STD_OK); + BMS_GetState_ExpectAndReturn(bms_state.state); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 3u, 4u, bms_state.state, CANTX_BMS_STATE_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + BMS_GetNumberOfConnectedStrings_ExpectAndReturn(bms_state.numberOfClosedStrings); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[1u], 7u, 4u, 5u, CANTX_BMS_STATE_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[2u]); + DIAG_IsAnyFatalErrorSet_ExpectAndReturn(true); + CAN_ConvertBooleanToInteger_ExpectAndReturn(true, 1u); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[2u], 10u, 1u, 1u, CANTX_BMS_STATE_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[3u]); + BMS_IsTransitionToErrorStateActive_ExpectAndReturn(bms_state.transitionToErrorState); + CAN_ConvertBooleanToInteger_ExpectAndReturn(true, 1u); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[3u], 11u, 1u, 1u, CANTX_BMS_STATE_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[4u]); + SYSM_GetRecordedTimingViolations_Expect(&testRecordedTimingViolationsZero); + CAN_ConvertBooleanToInteger_ExpectAndReturn(true, 1u); + SYSM_GetRecordedTimingViolations_ReturnThruPtr_pAnswer(&testRecordedTimingViolations); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[4u], 12u, 1u, 1u, CANTX_BMS_STATE_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[5u]); + CAN_ConvertBooleanToInteger_ExpectAndReturn(true, 1u); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[5u], 13u, 1u, 1u, CANTX_BMS_STATE_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[6u]); + CAN_ConvertBooleanToInteger_ExpectAndReturn(true, 1u); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[6u], 23u, 1u, 1u, CANTX_BMS_STATE_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[7u]); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[7u], 63u, 8u, 1250u, CANTX_BMS_STATE_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[8u]); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[8u], 16u, 1u, 0u, CANTX_BMS_STATE_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[9u]); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[9u], 17u, 1u, 0u, CANTX_BMS_STATE_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[10u]); + CAN_ConvertBooleanToInteger_ExpectAndReturn(true, 1u); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[10u], 18u, 1u, 1u, CANTX_BMS_STATE_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[11u]); + CAN_ConvertBooleanToInteger_ExpectAndReturn(true, 1u); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[11u], 21u, 1u, 1u, CANTX_BMS_STATE_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[12u]); + CAN_ConvertBooleanToInteger_ExpectAndReturn(true, 1u); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[12u], 22u, 1u, 1u, CANTX_BMS_STATE_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[13u]); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[13u], 24u, 1u, 1u, CANTX_BMS_STATE_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[14u]); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[14u], 25u, 1u, 1u, CANTX_BMS_STATE_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[15u]); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[15u], 26u, 1u, 1u, CANTX_BMS_STATE_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[16u]); + CAN_ConvertBooleanToInteger_ExpectAndReturn(true, 1u); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[16u], 27u, 1u, 1u, CANTX_BMS_STATE_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[17u]); + CAN_ConvertBooleanToInteger_ExpectAndReturn(true, 1u); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[17u], 28u, 1u, 1u, CANTX_BMS_STATE_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[18u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[18u], testCanData, CANTX_BMS_STATE_ENDIANNESS); + /* ======= RT1/1: Call function under test */ + uint32_t testResult = CANTX_BmsState(testMessage, testCanData, NULL_PTR, &can_kShim); + /* ======= RT1/1: Test output verification */ + TEST_ASSERT_EQUAL(0u, testResult); + + can_tableErrorState.prechargeAbortedDueToVoltage[0u] = true; + can_tableErrorState.prechargeAbortedDueToCurrent[0u] = true; + /* ======= RT1/1: Test implementation */ + CAN_TxPrepareSignalData_Ignore(); + DATA_Read3DataBlocks_ExpectAndReturn( + can_kShim.pTableErrorState, can_kShim.pTableInsulation, can_kShim.pTableMsl, STD_OK); + BMS_GetState_ExpectAndReturn(bms_state.state); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 3u, 4u, bms_state.state, CANTX_BMS_STATE_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + BMS_GetNumberOfConnectedStrings_ExpectAndReturn(bms_state.numberOfClosedStrings); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[1u], 7u, 4u, 5u, CANTX_BMS_STATE_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[2u]); + DIAG_IsAnyFatalErrorSet_ExpectAndReturn(true); + CAN_ConvertBooleanToInteger_ExpectAndReturn(true, 1u); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[2u], 10u, 1u, 1u, CANTX_BMS_STATE_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[3u]); + BMS_IsTransitionToErrorStateActive_ExpectAndReturn(bms_state.transitionToErrorState); + CAN_ConvertBooleanToInteger_ExpectAndReturn(true, 1u); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[3u], 11u, 1u, 1u, CANTX_BMS_STATE_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[4u]); + SYSM_GetRecordedTimingViolations_Expect(&testRecordedTimingViolationsZero); + CAN_ConvertBooleanToInteger_ExpectAndReturn(true, 1u); + SYSM_GetRecordedTimingViolations_ReturnThruPtr_pAnswer(&testRecordedTimingViolations); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[4u], 12u, 1u, 1u, CANTX_BMS_STATE_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[5u]); + CAN_ConvertBooleanToInteger_ExpectAndReturn(true, 1u); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[5u], 13u, 1u, 1u, CANTX_BMS_STATE_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[6u]); + CAN_ConvertBooleanToInteger_ExpectAndReturn(true, 1u); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[6u], 23u, 1u, 1u, CANTX_BMS_STATE_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[7u]); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[7u], 63u, 8u, 1250u, CANTX_BMS_STATE_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[8u]); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[8u], 16u, 1u, 1u, CANTX_BMS_STATE_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[9u]); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[9u], 17u, 1u, 1u, CANTX_BMS_STATE_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[10u]); + CAN_ConvertBooleanToInteger_ExpectAndReturn(true, 1u); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[10u], 18u, 1u, 1u, CANTX_BMS_STATE_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[11u]); + CAN_ConvertBooleanToInteger_ExpectAndReturn(true, 1u); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[11u], 21u, 1u, 1u, CANTX_BMS_STATE_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[12u]); + CAN_ConvertBooleanToInteger_ExpectAndReturn(true, 1u); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[12u], 22u, 1u, 1u, CANTX_BMS_STATE_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[13u]); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[13u], 24u, 1u, 1u, CANTX_BMS_STATE_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[14u]); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[14u], 25u, 1u, 1u, CANTX_BMS_STATE_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[15u]); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[15u], 26u, 1u, 1u, CANTX_BMS_STATE_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[16u]); + CAN_ConvertBooleanToInteger_ExpectAndReturn(true, 1u); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[16u], 27u, 1u, 1u, CANTX_BMS_STATE_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[17u]); + CAN_ConvertBooleanToInteger_ExpectAndReturn(true, 1u); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[17u], 28u, 1u, 1u, CANTX_BMS_STATE_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[18u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[18u], testCanData, CANTX_BMS_STATE_ENDIANNESS); + /* ======= RT1/1: Call function under test */ + testResult = CANTX_BmsState(testMessage, testCanData, NULL_PTR, &can_kShim); + /* ======= RT1/1: Test output verification */ + TEST_ASSERT_EQUAL(0u, testResult); +} diff --git a/tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_cell-temperatures.c b/tests/unit/app/driver/can/cbs/tx-cyclic/test_can_cbs_tx_cell-temperatures.c similarity index 88% rename from tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_cell-temperatures.c rename to tests/unit/app/driver/can/cbs/tx-cyclic/test_can_cbs_tx_cell-temperatures.c index fb029486..52ceb09f 100644 --- a/tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_cell-temperatures.c +++ b/tests/unit/app/driver/can/cbs/tx-cyclic/test_can_cbs_tx_cell-temperatures.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_can_cbs_tx_cell-temperatures.c * @author foxBMS Team * @date 2021-04-22 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * @@ -63,8 +63,8 @@ #include "database_cfg.h" -#include "can_cbs_tx.h" -#include "can_cfg_tx-message-definitions.h" +#include "can_cbs_tx_cyclic.h" +#include "can_cfg_tx-cyclic-message-definitions.h" #include "can_helper.h" #include "database_helper.h" @@ -73,12 +73,13 @@ TEST_SOURCE_FILE("can_cbs_tx_cell-temperatures.c") TEST_INCLUDE_PATH("../../src/app/driver/can") TEST_INCLUDE_PATH("../../src/app/driver/can/cbs") -TEST_INCLUDE_PATH("../../src/app/driver/can/cbs/tx") +TEST_INCLUDE_PATH("../../src/app/driver/can/cbs/tx-cyclic") TEST_INCLUDE_PATH("../../src/app/driver/config") TEST_INCLUDE_PATH("../../src/app/driver/foxmath") TEST_INCLUDE_PATH("../../src/app/driver/fram") TEST_INCLUDE_PATH("../../src/app/driver/imd") TEST_INCLUDE_PATH("../../src/app/engine/diag") +TEST_INCLUDE_PATH("../../src/app/engine/sys_mon") TEST_INCLUDE_PATH("../../src/app/task/config") /*========== Definitions and Implementations for Unit Test ==================*/ @@ -155,12 +156,12 @@ void testCAN_TxCellTemperature(void) { CANTX_CellTemperatures(testMessage, data, &muxId, &can_kShim); - TEST_ASSERT_EQUAL(0, data[0]); - TEST_ASSERT_EQUAL(0, data[1]); - TEST_ASSERT_EQUAL(10, data[2]); - TEST_ASSERT_EQUAL(11, data[3]); - TEST_ASSERT_EQUAL(12, data[4]); - TEST_ASSERT_EQUAL(25, data[5]); - TEST_ASSERT_EQUAL(40, data[6]); - TEST_ASSERT_EQUAL(246, data[7]); + TEST_ASSERT_EQUAL(0x00u, data[CAN_BYTE_0_POSITION]); + TEST_ASSERT_EQUAL(0x00u, data[CAN_BYTE_1_POSITION]); + TEST_ASSERT_EQUAL(0x0Au, data[CAN_BYTE_2_POSITION]); + TEST_ASSERT_EQUAL(0x0Bu, data[CAN_BYTE_3_POSITION]); + TEST_ASSERT_EQUAL(0x0Cu, data[CAN_BYTE_4_POSITION]); + TEST_ASSERT_EQUAL(0x19u, data[CAN_BYTE_5_POSITION]); + TEST_ASSERT_EQUAL(0x28u, data[CAN_BYTE_6_POSITION]); + TEST_ASSERT_EQUAL(0xF6u, data[CAN_BYTE_7_POSITION]); } diff --git a/tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_cell-voltages.c b/tests/unit/app/driver/can/cbs/tx-cyclic/test_can_cbs_tx_cell-voltages.c similarity index 88% rename from tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_cell-voltages.c rename to tests/unit/app/driver/can/cbs/tx-cyclic/test_can_cbs_tx_cell-voltages.c index 5ddb42d4..1535a6ae 100644 --- a/tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_cell-voltages.c +++ b/tests/unit/app/driver/can/cbs/tx-cyclic/test_can_cbs_tx_cell-voltages.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_can_cbs_tx_cell-voltages.c * @author foxBMS Team * @date 2021-04-22 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * @@ -63,8 +63,8 @@ #include "database_cfg.h" -#include "can_cbs_tx.h" -#include "can_cfg_tx-message-definitions.h" +#include "can_cbs_tx_cyclic.h" +#include "can_cfg_tx-cyclic-message-definitions.h" #include "can_helper.h" #include "database_helper.h" @@ -73,12 +73,13 @@ TEST_SOURCE_FILE("can_cbs_tx_cell-voltages.c") TEST_INCLUDE_PATH("../../src/app/driver/can") TEST_INCLUDE_PATH("../../src/app/driver/can/cbs") -TEST_INCLUDE_PATH("../../src/app/driver/can/cbs/tx") +TEST_INCLUDE_PATH("../../src/app/driver/can/cbs/tx-cyclic") TEST_INCLUDE_PATH("../../src/app/driver/config") TEST_INCLUDE_PATH("../../src/app/driver/foxmath") TEST_INCLUDE_PATH("../../src/app/driver/fram") TEST_INCLUDE_PATH("../../src/app/driver/imd") TEST_INCLUDE_PATH("../../src/app/engine/diag") +TEST_INCLUDE_PATH("../../src/app/engine/sys_mon") TEST_INCLUDE_PATH("../../src/app/task/config") /*========== Definitions and Implementations for Unit Test ==================*/ @@ -159,12 +160,12 @@ void testCAN_TxVoltage(void) { * Cell voltage 2: 3000mV * Cell voltage 3: 3700mV */ - TEST_ASSERT_EQUAL(0x00, data[0]); - TEST_ASSERT_EQUAL(0x03, data[1]); - TEST_ASSERT_EQUAL(0xE8, data[2]); - TEST_ASSERT_EQUAL(0x20, data[3]); - TEST_ASSERT_EQUAL(0xD1, data[4]); - TEST_ASSERT_EQUAL(0x77, data[5]); - TEST_ASSERT_EQUAL(0x0E, data[6]); - TEST_ASSERT_EQUAL(0x74, data[7]); + TEST_ASSERT_EQUAL(0x00u, data[CAN_BYTE_0_POSITION]); + TEST_ASSERT_EQUAL(0x03u, data[CAN_BYTE_1_POSITION]); + TEST_ASSERT_EQUAL(0xE8u, data[CAN_BYTE_2_POSITION]); + TEST_ASSERT_EQUAL(0x20u, data[CAN_BYTE_3_POSITION]); + TEST_ASSERT_EQUAL(0xD1u, data[CAN_BYTE_4_POSITION]); + TEST_ASSERT_EQUAL(0x77u, data[CAN_BYTE_5_POSITION]); + TEST_ASSERT_EQUAL(0x0Eu, data[CAN_BYTE_6_POSITION]); + TEST_ASSERT_EQUAL(0x74u, data[CAN_BYTE_7_POSITION]); } diff --git a/tests/unit/app/driver/can/cbs/tx-cyclic/test_can_cbs_tx_pack-limits.c b/tests/unit/app/driver/can/cbs/tx-cyclic/test_can_cbs_tx_pack-limits.c new file mode 100644 index 00000000..08ac6aee --- /dev/null +++ b/tests/unit/app/driver/can/cbs/tx-cyclic/test_can_cbs_tx_pack-limits.c @@ -0,0 +1,433 @@ +/** + * + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * We kindly request you to use one or more of the following phrases to refer to + * foxBMS in your hardware, software, documentation or advertising materials: + * + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" + * + */ + +/** + * @file test_can_cbs_tx_pack-limits.c + * @author foxBMS Team + * @date 2021-07-27 (date of creation) + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup UNIT_TEST_IMPLEMENTATION + * @prefix TEST + * + * @brief Tests for the CAN driver callbacks + * + */ + +/*========== Includes =======================================================*/ +#include "unity.h" +#include "Mockcan.h" +#include "Mockcan_helper.h" +#include "Mockdatabase.h" +#include "Mockdiag.h" +#include "Mockfoxmath.h" +#include "Mockimd.h" +#include "Mockos.h" + +#include "battery_cell_cfg.h" +#include "database_cfg.h" + +#include "can_cbs_tx_cyclic.h" +#include "can_cfg_tx-cyclic-message-definitions.h" +#include "test_assert_helper.h" + +/*========== Unit Testing Framework Directives ==============================*/ +TEST_SOURCE_FILE("can_cbs_tx_pack-limits.c") + +TEST_INCLUDE_PATH("../../src/app/driver/can") +TEST_INCLUDE_PATH("../../src/app/driver/can/cbs") +TEST_INCLUDE_PATH("../../src/app/driver/can/cbs/tx-cyclic") +TEST_INCLUDE_PATH("../../src/app/driver/config") +TEST_INCLUDE_PATH("../../src/app/driver/foxmath") +TEST_INCLUDE_PATH("../../src/app/driver/fram") +TEST_INCLUDE_PATH("../../src/app/driver/imd") +TEST_INCLUDE_PATH("../../src/app/engine/diag") +TEST_INCLUDE_PATH("../../src/app/engine/sys_mon") +TEST_INCLUDE_PATH("../../src/app/task/config") +TEST_INCLUDE_PATH("../../src/app/task/ftask") + +/*========== Definitions and Implementations for Unit Test ==================*/ +uint64_t testMessageData[7u] = {0u, 1u, 2u, 3u, 4u, 5u, 6u}; + +float_t testSignalData[7u] = {0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f}; + +static const CAN_SIGNAL_TYPE_s cantx_testSignalMaximumDischargeCurrent = {7u, 12u, 250.0f, 0.0f, 0.0f, 1023750.0f}; + +static const CAN_SIGNAL_TYPE_s cantx_testSignalMaximumChargeCurrent = {11u, 12u, 250.0f, 0.0f, 0.0f, 1023750.0f}; + +static const CAN_SIGNAL_TYPE_s cantx_testSignalMaximumDischargePower = {31u, 12u, 100.0f, 0.0f, 0.0f, 409500.0f}; + +static const CAN_SIGNAL_TYPE_s cantx_testSignalMaximumChargePower = {35u, 12u, 100.0f, 0.0f, 0.0f, 409500.0f}; + +static const CAN_SIGNAL_TYPE_s cantx_testSignalMaximumBatteryVoltage = {55u, 8u, 4000.0f, 0.0f, 0.0f, 1020000.0f}; + +static const CAN_SIGNAL_TYPE_s cantx_testSignalMinimumBatteryVoltage = {63u, 8u, 4000.0f, 0.0f, 0.0f, 1020000.0f}; + +static DATA_BLOCK_CELL_VOLTAGE_s can_tableCellVoltages = {.header.uniqueId = DATA_BLOCK_ID_CELL_VOLTAGE}; +static DATA_BLOCK_CELL_TEMPERATURE_s can_tableTemperatures = {.header.uniqueId = DATA_BLOCK_ID_CELL_TEMPERATURE}; +static DATA_BLOCK_MIN_MAX_s can_tableMinimumMaximumValues = {.header.uniqueId = DATA_BLOCK_ID_MIN_MAX}; +static DATA_BLOCK_CURRENT_SENSOR_s can_tableCurrentSensor = {.header.uniqueId = DATA_BLOCK_ID_CURRENT_SENSOR}; +static DATA_BLOCK_OPEN_WIRE_s can_tableOpenWire = {.header.uniqueId = DATA_BLOCK_ID_OPEN_WIRE_BASE}; +static DATA_BLOCK_STATE_REQUEST_s can_tableStateRequest = {.header.uniqueId = DATA_BLOCK_ID_STATE_REQUEST}; +static DATA_BLOCK_PACK_VALUES_s can_tablePackValues = {.header.uniqueId = DATA_BLOCK_ID_PACK_VALUES}; +static DATA_BLOCK_SOF_s can_tableSof = {.header.uniqueId = DATA_BLOCK_ID_SOF}; +static DATA_BLOCK_SOC_s can_tableSoc = {.header.uniqueId = DATA_BLOCK_ID_SOC}; +static DATA_BLOCK_SOE_s can_tableSoe = {.header.uniqueId = DATA_BLOCK_ID_SOE}; +static DATA_BLOCK_ERROR_STATE_s can_tableErrorState = {.header.uniqueId = DATA_BLOCK_ID_ERROR_STATE}; +static DATA_BLOCK_INSULATION_MONITORING_s can_tableInsulation = { + .header.uniqueId = DATA_BLOCK_ID_INSULATION_MONITORING}; +static DATA_BLOCK_MSL_FLAG_s can_tableMslFlags = {.header.uniqueId = DATA_BLOCK_ID_MSL_FLAG}; +static DATA_BLOCK_RSL_FLAG_s can_tableRslFlags = {.header.uniqueId = DATA_BLOCK_ID_RSL_FLAG}; +static DATA_BLOCK_MOL_FLAG_s can_tableMolFlags = {.header.uniqueId = DATA_BLOCK_ID_MOL_FLAG}; +static DATA_BLOCK_AEROSOL_SENSOR_s can_tableAerosolSensor = {.header.uniqueId = DATA_BLOCK_ID_AEROSOL_SENSOR}; + +OS_QUEUE ftsk_imdCanDataQueue = NULL_PTR; + +const CAN_SHIM_s can_kShim = { + .pQueueImd = &ftsk_imdCanDataQueue, + .pTableCellVoltage = &can_tableCellVoltages, + .pTableCellTemperature = &can_tableTemperatures, + .pTableMinMax = &can_tableMinimumMaximumValues, + .pTableCurrentSensor = &can_tableCurrentSensor, + .pTableOpenWire = &can_tableOpenWire, + .pTableStateRequest = &can_tableStateRequest, + .pTablePackValues = &can_tablePackValues, + .pTableSof = &can_tableSof, + .pTableSoc = &can_tableSoc, + .pTableSoe = &can_tableSoe, + .pTableErrorState = &can_tableErrorState, + .pTableInsulation = &can_tableInsulation, + .pTableMsl = &can_tableMslFlags, + .pTableRsl = &can_tableRslFlags, + .pTableMol = &can_tableMolFlags, + .pTableAerosolSensor = &can_tableAerosolSensor, +}; + +/*========== Setup and Teardown =============================================*/ +void setUp(void) { +} + +void tearDown(void) { +} + +/*========== Test Cases =====================================================*/ +/** + * @brief Testing CANTX_CalculateMaximumDischargeCurrent + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/1: NULL_PTR for kpkCanShim -> assert + * - Routine validation: + * - RT1/1: Function prepares signal data as expected + */ +void testCANTX_CalculateMaximumDischargeCurrent(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/1 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_CalculateMaximumDischargeCurrent(NULL_PTR)); + + /* ======= Routine tests =============================================== */ + float_t maximumDischargeCurrent = (float_t)can_kShim.pTableSof->recommendedContinuousPackDischargeCurrent_mA; + /* ======= RT1/1: Test implementation */ + CAN_TxPrepareSignalData_Expect(&maximumDischargeCurrent, cantx_testSignalMaximumDischargeCurrent); + CAN_TxPrepareSignalData_ReturnThruPtr_pSignal(&testSignalData[1u]); + /* ======= RT1/1: Call function under test */ + uint64_t testResult = TEST_CANTX_CalculateMaximumDischargeCurrent(&can_kShim); + /* ======= RT1/1: Test output verification */ + TEST_ASSERT_EQUAL(1u, testResult); +} + +/** + * @brief Testing CANTX_CalculateMaximumChargeCurrent + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/1: NULL_PTR for kpkCanShim -> assert + * - Routine validation: + * - RT1/1: Function prepares signal data as expected + */ +void testCANTX_CalculateMaximumChargeCurrent(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/1 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_CalculateMaximumChargeCurrent(NULL_PTR)); + + /* ======= Routine tests =============================================== */ + float_t maximumChargeCurrent = (float_t)can_kShim.pTableSof->recommendedContinuousPackChargeCurrent_mA; + /* ======= RT1/1: Test implementation */ + CAN_TxPrepareSignalData_Expect(&maximumChargeCurrent, cantx_testSignalMaximumChargeCurrent); + CAN_TxPrepareSignalData_ReturnThruPtr_pSignal(&testSignalData[1u]); + /* ======= RT1/1: Call function under test */ + uint64_t testResult = TEST_CANTX_CalculateMaximumChargeCurrent(&can_kShim); + /* ======= RT1/1: Test output verification */ + TEST_ASSERT_EQUAL(1u, testResult); +} + +/** + * @brief Testing CANTX_CalculateMaximumDischargePower + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/1: NULL_PTR for kpkCanShim -> assert + * - Routine validation: + * - RT1/1: Function prepares signal data as expected + */ +void testCANTX_CalculateMaximumDischargePower(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/1 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_CalculateMaximumDischargePower(NULL_PTR)); + + /* ======= Routine tests =============================================== */ + float_t maximumDischargePower = + ((float_t)can_kShim.pTableSof->recommendedContinuousPackDischargeCurrent_mA / 1000.0f) * + ((float_t)can_kShim.pTablePackValues->batteryVoltage_mV / 1000.0f); + /* ======= RT1/1: Test implementation */ + CAN_TxPrepareSignalData_Expect(&maximumDischargePower, cantx_testSignalMaximumDischargePower); + CAN_TxPrepareSignalData_ReturnThruPtr_pSignal(&testSignalData[1u]); + /* ======= RT1/1: Call function under test */ + uint64_t testResult = TEST_CANTX_CalculateMaximumDischargePower(&can_kShim); + /* ======= RT1/1: Test output verification */ + TEST_ASSERT_EQUAL(1u, testResult); +} + +/** + * @brief Testing CANTX_CalculateMaximumChargePower + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/1: NULL_PTR for kpkCanShim -> assert + * - Routine validation: + * - RT1/1: Function prepares signal data as expected + */ +void testCANTX_CalculateMaximumChargePower(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/1 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_CalculateMaximumChargePower(NULL_PTR)); + + /* ======= Routine tests =============================================== */ + float_t maximumChargePower = ((float_t)can_kShim.pTableSof->recommendedContinuousPackChargeCurrent_mA / 1000.0f) * + ((float_t)can_kShim.pTablePackValues->batteryVoltage_mV / 1000.0f); + /* ======= RT1/1: Test implementation */ + CAN_TxPrepareSignalData_Expect(&maximumChargePower, cantx_testSignalMaximumChargePower); + CAN_TxPrepareSignalData_ReturnThruPtr_pSignal(&testSignalData[1u]); + /* ======= RT1/1: Call function under test */ + uint64_t testResult = TEST_CANTX_CalculateMaximumChargePower(&can_kShim); + /* ======= RT1/1: Test output verification */ + TEST_ASSERT_EQUAL(1u, testResult); +} + +/** + * @brief Testing CANTX_CalculateMaximumBatteryVoltage + * @details The following cases need to be tested: + * - Argument validation: + * - None + * - Routine validation: + * - RT1/1: Function prepares signal data as expected + */ +void testCANTX_CalculateMaximumBatteryVoltage(void) { + /* ======= Routine tests =============================================== */ + float_t maximumBatteryVoltage = (float_t)(BS_NR_OF_CELL_BLOCKS_PER_STRING * BC_VOLTAGE_MAX_MSL_mV); + /* ======= RT1/1: Test implementation */ + CAN_TxPrepareSignalData_Expect(&maximumBatteryVoltage, cantx_testSignalMaximumBatteryVoltage); + CAN_TxPrepareSignalData_ReturnThruPtr_pSignal(&testSignalData[1u]); + /* ======= RT1/1: Call function under test */ + uint64_t testResult = TEST_CANTX_CalculateMaximumBatteryVoltage(); + /* ======= RT1/1: Test output verification */ + TEST_ASSERT_EQUAL(1u, testResult); +} + +/** + * @brief Testing CANTX_CalculateMinimumBatteryVoltage + * @details The following cases need to be tested: + * - Argument validation: + * - None + * - Routine validation: + * - RT1/1: Function prepares signal data as expected + */ +void testCANTX_CalculateMinimumBatteryVoltage(void) { + /* ======= Routine tests =============================================== */ + float_t minimumBatteryVoltage = (float_t)(BS_NR_OF_CELL_BLOCKS_PER_STRING * BC_VOLTAGE_MIN_MSL_mV); + /* ======= RT1/1: Test implementation */ + CAN_TxPrepareSignalData_Expect(&minimumBatteryVoltage, cantx_testSignalMinimumBatteryVoltage); + CAN_TxPrepareSignalData_ReturnThruPtr_pSignal(&testSignalData[1u]); + /* ======= RT1/1: Call function under test */ + uint64_t testResult = TEST_CANTX_CalculateMinimumBatteryVoltage(); + /* ======= RT1/1: Test output verification */ + TEST_ASSERT_EQUAL(1u, testResult); +} + +/** + * @brief Testing CANTX_BuildPackLimitsMessage + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/2: NULL_PTR for pMessageData -> assert + * - AT2/2: NULL_PTR for kpkCanShim -> assert + * - Routine validation: + * - RT1/1: Function prepares signal data as expected + */ +void testCANTX_BuildPackLimitsMessage(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/2 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_BuildPackLimitsMessage(NULL_PTR, &can_kShim)); + + /* ======= AT1/2 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_BuildPackLimitsMessage(&testMessageData[0u], NULL_PTR)); + + /* ======= Routine tests =============================================== */ + float_t maximumDischargeCurrent = (float_t)can_kShim.pTableSof->recommendedContinuousPackDischargeCurrent_mA; + float_t maximumChargeCurrent = (float_t)can_kShim.pTableSof->recommendedContinuousPackChargeCurrent_mA; + float_t maximumDischargePower = + ((float_t)can_kShim.pTableSof->recommendedContinuousPackDischargeCurrent_mA / 1000.0f) * + ((float_t)can_kShim.pTablePackValues->batteryVoltage_mV / 1000.0f); + float_t maximumChargePower = ((float_t)can_kShim.pTableSof->recommendedContinuousPackChargeCurrent_mA / 1000.0f) * + ((float_t)can_kShim.pTablePackValues->batteryVoltage_mV / 1000.0f); + float_t minimumBatteryVoltage = (float_t)(BS_NR_OF_CELL_BLOCKS_PER_STRING * BC_VOLTAGE_MIN_MSL_mV); + float_t maximumBatteryVoltage = (float_t)(BS_NR_OF_CELL_BLOCKS_PER_STRING * BC_VOLTAGE_MAX_MSL_mV); + /* ======= RT1/1: Test implementation */ + CAN_TxPrepareSignalData_Expect(&maximumDischargeCurrent, cantx_testSignalMaximumDischargeCurrent); + CAN_TxPrepareSignalData_ReturnThruPtr_pSignal(&testSignalData[1u]); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 7u, 12u, testSignalData[1u], CANTX_PACK_LIMITS_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxPrepareSignalData_Expect(&maximumChargeCurrent, cantx_testSignalMaximumChargeCurrent); + CAN_TxPrepareSignalData_ReturnThruPtr_pSignal(&testSignalData[2u]); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[1u], 11u, 12u, testSignalData[2u], CANTX_PACK_LIMITS_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[2u]); + CAN_TxPrepareSignalData_Expect(&maximumDischargePower, cantx_testSignalMaximumDischargePower); + CAN_TxPrepareSignalData_ReturnThruPtr_pSignal(&testSignalData[3u]); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[2u], 31u, 12u, testSignalData[3u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[3u]); + CAN_TxPrepareSignalData_Expect(&maximumChargePower, cantx_testSignalMaximumChargePower); + CAN_TxPrepareSignalData_ReturnThruPtr_pSignal(&testSignalData[4u]); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[3u], 35u, 12u, testSignalData[4u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[4u]); + CAN_TxPrepareSignalData_Expect(&minimumBatteryVoltage, cantx_testSignalMinimumBatteryVoltage); + CAN_TxPrepareSignalData_ReturnThruPtr_pSignal(&testSignalData[5u]); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[4u], 63u, 8u, testSignalData[5u], CANTX_PACK_LIMITS_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[5u]); + CAN_TxPrepareSignalData_Expect(&maximumBatteryVoltage, cantx_testSignalMaximumBatteryVoltage); + CAN_TxPrepareSignalData_ReturnThruPtr_pSignal(&testSignalData[6u]); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[5u], 55u, 8u, testSignalData[6u], CANTX_PACK_LIMITS_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[6u]); + + /* ======= RT1/1: Call function under test */ + TEST_CANTX_BuildPackLimitsMessage(&testMessageData[0u], &can_kShim); + TEST_ASSERT_EQUAL(testMessageData[6u], testMessageData[0u]); + testMessageData[0u] = 0u; +} + +/** + * @brief Testing CANTX_PackLimits + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/7: invalid message id -> assert + * - AT2/7: invalid message id type -> assert + * - AT3/7: invalid message dlc size -> assert + * - AT4/7: invalid message endianness -> assert + * - AT5/7: NULL_PTR for pCanData -> assert + * - AT6/7: NO NULL_PTR for pMuxId -> assert + * - AT7/7: NULL_PTR for kpkCanShim -> assert + * - Routine validation: + * - RT1/1: Function prepares signal data as expected + */ +void testCANTX_PackLimits(void) { + /* ======= Assertion tests ============================================= */ + CAN_MESSAGE_PROPERTIES_s testMessage = { + .id = CANTX_PACK_LIMITS_ID, + .idType = CANTX_PACK_LIMITS_ID_TYPE, + .dlc = CAN_MAX_DLC, + .endianness = CANTX_PACK_LIMITS_ENDIANNESS, + }; + + uint8_t testCanData[CAN_MAX_DLC] = {0u}; + uint8_t testMuxId = 0u; + /* ======= AT1/7 ======= */ + testMessage.id = CAN_MAX_11BIT_ID; + TEST_ASSERT_FAIL_ASSERT(CANTX_PackLimits(testMessage, testCanData, NULL_PTR, &can_kShim)); + testMessage.id = CANTX_PACK_LIMITS_ID; + /* ======= AT2/7 ======= */ + testMessage.idType = CAN_EXTENDED_IDENTIFIER_29_BIT; + TEST_ASSERT_FAIL_ASSERT(CANTX_PackLimits(testMessage, testCanData, NULL_PTR, &can_kShim)); + testMessage.idType = CANTX_PACK_LIMITS_ID_TYPE; + /* ======= AT3/7 ======= */ + testMessage.dlc = 9u; + TEST_ASSERT_FAIL_ASSERT(CANTX_PackLimits(testMessage, testCanData, NULL_PTR, &can_kShim)); + testMessage.dlc = CAN_MAX_DLC; + /* ======= AT4/7 ======= */ + testMessage.endianness = CAN_LITTLE_ENDIAN; + TEST_ASSERT_FAIL_ASSERT(CANTX_PackLimits(testMessage, testCanData, NULL_PTR, &can_kShim)); + testMessage.endianness = CAN_BIG_ENDIAN; + /* ======= AT5/7 ======= */ + TEST_ASSERT_FAIL_ASSERT(CANTX_PackLimits(testMessage, NULL_PTR, NULL_PTR, &can_kShim)); + /* ======= AT6/7 ======= */ + TEST_ASSERT_FAIL_ASSERT(CANTX_PackLimits(testMessage, testCanData, &testMuxId, &can_kShim)); + /* ======= AT7/7 ======= */ + TEST_ASSERT_FAIL_ASSERT(CANTX_PackLimits(testMessage, testCanData, NULL_PTR, NULL_PTR)); + + /* ======= Routine tests =============================================== */ + float_t maximumDischargeCurrent = (float_t)can_kShim.pTableSof->recommendedContinuousPackDischargeCurrent_mA; + float_t maximumChargeCurrent = (float_t)can_kShim.pTableSof->recommendedContinuousPackChargeCurrent_mA; + float_t maximumDischargePower = + ((float_t)can_kShim.pTableSof->recommendedContinuousPackDischargeCurrent_mA / 1000.0f) * + ((float_t)can_kShim.pTablePackValues->batteryVoltage_mV / 1000.0f); + float_t maximumChargePower = ((float_t)can_kShim.pTableSof->recommendedContinuousPackChargeCurrent_mA / 1000.0f) * + ((float_t)can_kShim.pTablePackValues->batteryVoltage_mV / 1000.0f); + float_t minimumBatteryVoltage = (float_t)(BS_NR_OF_CELL_BLOCKS_PER_STRING * BC_VOLTAGE_MIN_MSL_mV); + float_t maximumBatteryVoltage = (float_t)(BS_NR_OF_CELL_BLOCKS_PER_STRING * BC_VOLTAGE_MAX_MSL_mV); + /* ======= RT1/1: Test implementation */ + CAN_TxPrepareSignalData_Ignore(); + DATA_Read2DataBlocks_ExpectAndReturn(can_kShim.pTableSof, can_kShim.pTablePackValues, STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 7u, 12u, (uint64_t)maximumDischargeCurrent, CANTX_PACK_LIMITS_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 11u, 12u, (uint64_t)maximumChargeCurrent, CANTX_PACK_LIMITS_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 31u, 12u, (uint64_t)maximumDischargePower, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 35u, 12u, (uint64_t)maximumChargePower, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 63u, 8u, (uint64_t)minimumBatteryVoltage, CANTX_PACK_LIMITS_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 55u, 8u, (uint64_t)maximumBatteryVoltage, CANTX_PACK_LIMITS_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanData, CAN_BIG_ENDIAN); + /* ======= RT1/1: Call function under test */ + uint32_t testResult = CANTX_PackLimits(testMessage, testCanData, NULL_PTR, &can_kShim); + /* ======= RT1/1: Test output verification */ + TEST_ASSERT_EQUAL(0u, testResult); +} diff --git a/tests/unit/app/driver/can/cbs/tx-cyclic/test_can_cbs_tx_pack-minimum-maximum-values.c b/tests/unit/app/driver/can/cbs/tx-cyclic/test_can_cbs_tx_pack-minimum-maximum-values.c new file mode 100644 index 00000000..9570bc12 --- /dev/null +++ b/tests/unit/app/driver/can/cbs/tx-cyclic/test_can_cbs_tx_pack-minimum-maximum-values.c @@ -0,0 +1,520 @@ +/** + * + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * We kindly request you to use one or more of the following phrases to refer to + * foxBMS in your hardware, software, documentation or advertising materials: + * + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" + * + */ + +/** + * @file test_can_cbs_tx_pack-minimum-maximum-values.c + * @author foxBMS Team + * @date 2021-04-22 (date of creation) + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup UNIT_TEST_IMPLEMENTATION + * @prefix TEST + * + * @brief Tests for the CAN driver callbacks + * + */ + +/*========== Includes =======================================================*/ +#include "unity.h" +#include "Mockbms.h" +#include "Mockcan.h" +#include "Mockcan_helper.h" +#include "Mockdatabase.h" +#include "Mockdiag.h" +#include "Mockfoxmath.h" +#include "Mockimd.h" +#include "Mockos.h" + +#include "database_cfg.h" + +#include "can_cbs_tx_cyclic.h" +#include "can_cfg_tx-cyclic-message-definitions.h" +#include "test_assert_helper.h" + +#include + +/*========== Unit Testing Framework Directives ==============================*/ +TEST_SOURCE_FILE("can_cbs_tx_pack-minimum-maximum-values.c") + +TEST_INCLUDE_PATH("../../src/app/application/bms") +TEST_INCLUDE_PATH("../../src/app/driver/can") +TEST_INCLUDE_PATH("../../src/app/driver/can/cbs") +TEST_INCLUDE_PATH("../../src/app/driver/can/cbs/tx-cyclic") +TEST_INCLUDE_PATH("../../src/app/driver/config") +TEST_INCLUDE_PATH("../../src/app/driver/contactor") +TEST_INCLUDE_PATH("../../src/app/driver/foxmath") +TEST_INCLUDE_PATH("../../src/app/driver/fram") +TEST_INCLUDE_PATH("../../src/app/driver/imd") +TEST_INCLUDE_PATH("../../src/app/driver/rtc") +TEST_INCLUDE_PATH("../../src/app/driver/sps") +TEST_INCLUDE_PATH("../../src/app/engine/diag") +TEST_INCLUDE_PATH("../../src/app/engine/sys_mon") +TEST_INCLUDE_PATH("../../src/app/task/config") + +/*========== Definitions and Implementations for Unit Test ==================*/ +uint64_t testMessageData[5u] = {0u, 1u, 2u, 3u, 4u}; + +float_t testSignalData[4u] = {0.0f, 1.0f, 2.0f, 3.0f}; + +float_t testMinimumCellVoltage0 = 1750; +float_t testMaximumCellVoltage0 = 3000; +float_t testMinimumTemperature0 = -150; +float_t testMaximumTemperature0 = 350; + +float_t testMinimumCellVoltage1 = 1800; +float_t testMaximumCellVoltage1 = 1900; +float_t testMinimumTemperature1 = -100; +float_t testMaximumTemperature1 = 300; + +static const CAN_SIGNAL_TYPE_s cantx_testSignalMaximumTemperature = {55u, 8u, 10.0f, 0.0f, -1280.0f, 1270.0f}; +static const CAN_SIGNAL_TYPE_s cantx_testSignalMinimumTemperature = {63u, 8u, 10.0f, 0.0f, -1280.0f, 1270.0f}; + +static DATA_BLOCK_CELL_VOLTAGE_s can_tableCellVoltages = {.header.uniqueId = DATA_BLOCK_ID_CELL_VOLTAGE}; +static DATA_BLOCK_CELL_TEMPERATURE_s can_tableTemperatures = {.header.uniqueId = DATA_BLOCK_ID_CELL_TEMPERATURE}; +static DATA_BLOCK_MIN_MAX_s can_tableMinimumMaximumValues = {.header.uniqueId = DATA_BLOCK_ID_MIN_MAX}; +static DATA_BLOCK_CURRENT_SENSOR_s can_tableCurrentSensor = {.header.uniqueId = DATA_BLOCK_ID_CURRENT_SENSOR}; +static DATA_BLOCK_OPEN_WIRE_s can_tableOpenWire = {.header.uniqueId = DATA_BLOCK_ID_OPEN_WIRE_BASE}; +static DATA_BLOCK_STATE_REQUEST_s can_tableStateRequest = {.header.uniqueId = DATA_BLOCK_ID_STATE_REQUEST}; +static DATA_BLOCK_PACK_VALUES_s can_tablePackValues = {.header.uniqueId = DATA_BLOCK_ID_PACK_VALUES}; +static DATA_BLOCK_SOF_s can_tableSof = {.header.uniqueId = DATA_BLOCK_ID_SOF}; +static DATA_BLOCK_SOC_s can_tableSoc = {.header.uniqueId = DATA_BLOCK_ID_SOC}; +static DATA_BLOCK_ERROR_STATE_s can_tableErrorState = {.header.uniqueId = DATA_BLOCK_ID_ERROR_STATE}; +static DATA_BLOCK_INSULATION_MONITORING_s can_tableInsulation = { + .header.uniqueId = DATA_BLOCK_ID_INSULATION_MONITORING}; +static DATA_BLOCK_MSL_FLAG_s can_tableMslFlags = {.header.uniqueId = DATA_BLOCK_ID_MSL_FLAG}; +static DATA_BLOCK_RSL_FLAG_s can_tableRslFlags = {.header.uniqueId = DATA_BLOCK_ID_RSL_FLAG}; +static DATA_BLOCK_MOL_FLAG_s can_tableMolFlags = {.header.uniqueId = DATA_BLOCK_ID_MOL_FLAG}; +static DATA_BLOCK_AEROSOL_SENSOR_s can_tableAerosolSensor = {.header.uniqueId = DATA_BLOCK_ID_AEROSOL_SENSOR}; + +OS_QUEUE imd_canDataQueue = NULL_PTR; + +const CAN_SHIM_s can_kShim = { + .pQueueImd = &imd_canDataQueue, + .pTableCellVoltage = &can_tableCellVoltages, + .pTableCellTemperature = &can_tableTemperatures, + .pTableMinMax = &can_tableMinimumMaximumValues, + .pTableCurrentSensor = &can_tableCurrentSensor, + .pTableOpenWire = &can_tableOpenWire, + .pTableStateRequest = &can_tableStateRequest, + .pTablePackValues = &can_tablePackValues, + .pTableSof = &can_tableSof, + .pTableSoc = &can_tableSoc, + .pTableErrorState = &can_tableErrorState, + .pTableInsulation = &can_tableInsulation, + .pTableMsl = &can_tableMslFlags, + .pTableRsl = &can_tableRslFlags, + .pTableMol = &can_tableMolFlags, + .pTableAerosolSensor = &can_tableAerosolSensor, +}; + +/*========== Setup and Teardown =============================================*/ +void setUp(void) { + can_kShim.pTableMinMax->minimumCellVoltage_mV[0u] = (int16_t)testMinimumCellVoltage0; + can_kShim.pTableMinMax->maximumCellVoltage_mV[0u] = (int16_t)testMaximumCellVoltage0; + can_kShim.pTableMinMax->minimumTemperature_ddegC[0u] = (int16_t)testMinimumTemperature0; + can_kShim.pTableMinMax->maximumTemperature_ddegC[0u] = (int16_t)testMaximumTemperature0; + + can_kShim.pTableMinMax->minimumCellVoltage_mV[1u] = (int16_t)testMinimumCellVoltage1; + can_kShim.pTableMinMax->maximumCellVoltage_mV[1u] = (int16_t)testMaximumCellVoltage1; + can_kShim.pTableMinMax->minimumTemperature_ddegC[1u] = (int16_t)testMinimumTemperature1; + can_kShim.pTableMinMax->maximumTemperature_ddegC[1u] = (int16_t)testMaximumTemperature1; +} + +void tearDown(void) { +} + +/*========== Test Cases =====================================================*/ +/** + * @brief Testing CANTX_GetPackMaximumVoltage + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/1: NULL_PTR for kpkCanShim -> assert + * - Routine validation: + * - RT1/4: Only first string is closed + * - RT2/4: Only second string is closed + * - RT3/4: Both Strings are closed + * - RT4/4: No String is closed + */ +void testCANTX_GetPackMaximumVoltage(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/1 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_GetPackMaximumVoltage(NULL_PTR)); + + /* ======= Routine tests =============================================== */ + /* ======= RT1/4: Test implementation */ + BMS_GetNumberOfConnectedStrings_ExpectAndReturn(1u); + BMS_IsStringClosed_ExpectAndReturn(0u, true); + BMS_IsStringClosed_ExpectAndReturn(1u, false); + /* ======= RT1/4: Call function under test */ + int16_t testResult = TEST_CANTX_GetPackMaximumVoltage(&can_kShim); + /* ======= RT1/4: Test output verification */ + TEST_ASSERT_EQUAL(can_tableMinimumMaximumValues.maximumCellVoltage_mV[0u], testResult); + + /* ======= RT2/4: Test implementation */ + BMS_GetNumberOfConnectedStrings_ExpectAndReturn(1u); + BMS_IsStringClosed_ExpectAndReturn(0u, false); + BMS_IsStringClosed_ExpectAndReturn(1u, true); + /* ======= RT2/4: Call function under test */ + testResult = TEST_CANTX_GetPackMaximumVoltage(&can_kShim); + /* ======= RT2/4: Test output verification */ + TEST_ASSERT_EQUAL(can_tableMinimumMaximumValues.maximumCellVoltage_mV[1u], testResult); + + /* ======= RT3/4: Test implementation */ + BMS_GetNumberOfConnectedStrings_ExpectAndReturn(2u); + BMS_IsStringClosed_ExpectAndReturn(0u, true); + BMS_IsStringClosed_ExpectAndReturn(1u, true); + /* ======= RT3/4: Call function under test */ + testResult = TEST_CANTX_GetPackMaximumVoltage(&can_kShim); + /* ======= RT3/4: Test output verification */ + TEST_ASSERT_EQUAL(can_tableMinimumMaximumValues.maximumCellVoltage_mV[0u], testResult); + + /* ======= RT4/4: Test implementation */ + BMS_GetNumberOfConnectedStrings_ExpectAndReturn(0u); + /* ======= RT4/4: Call function under test */ + testResult = TEST_CANTX_GetPackMaximumVoltage(&can_kShim); + /* ======= RT4/4: Test output verification */ + TEST_ASSERT_EQUAL(can_tableMinimumMaximumValues.maximumCellVoltage_mV[0u], testResult); +} + +/** + * @brief Testing CANTX_GetPackMinimumVoltage + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/1: NULL_PTR for kpkCanShim -> assert + * - Routine validation: + * - RT1/4: Only first string is closed + * - RT2/4: Only second string is closed + * - RT3/4: Both Strings are closed + * - RT4/4: No String is closed + */ +void testCANTX_GetPackMinimumVoltage(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/1 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_GetPackMinimumVoltage(NULL_PTR)); + + /* ======= Routine tests =============================================== */ + /* ======= RT1/4: Test implementation */ + BMS_GetNumberOfConnectedStrings_ExpectAndReturn(1u); + BMS_IsStringClosed_ExpectAndReturn(0u, true); + BMS_IsStringClosed_ExpectAndReturn(1u, false); + /* ======= RT1/4: Call function under test */ + int16_t testResult = TEST_CANTX_GetPackMinimumVoltage(&can_kShim); + /* ======= RT1/4: Test output verification */ + TEST_ASSERT_EQUAL(can_tableMinimumMaximumValues.minimumCellVoltage_mV[0u], testResult); + + /* ======= RT2/4: Test implementation */ + BMS_GetNumberOfConnectedStrings_ExpectAndReturn(1u); + BMS_IsStringClosed_ExpectAndReturn(0u, false); + BMS_IsStringClosed_ExpectAndReturn(1u, true); + /* ======= RT2/4: Call function under test */ + testResult = TEST_CANTX_GetPackMinimumVoltage(&can_kShim); + /* ======= RT2/4: Test output verification */ + TEST_ASSERT_EQUAL(can_tableMinimumMaximumValues.minimumCellVoltage_mV[1u], testResult); + + /* ======= RT3/4: Test implementation */ + BMS_GetNumberOfConnectedStrings_ExpectAndReturn(2u); + BMS_IsStringClosed_ExpectAndReturn(0u, true); + BMS_IsStringClosed_ExpectAndReturn(1u, true); + /* ======= RT3/4: Call function under test */ + testResult = TEST_CANTX_GetPackMinimumVoltage(&can_kShim); + /* ======= RT3/4: Test output verification */ + TEST_ASSERT_EQUAL(can_tableMinimumMaximumValues.minimumCellVoltage_mV[0u], testResult); + + /* ======= RT4/4: Test implementation */ + BMS_GetNumberOfConnectedStrings_ExpectAndReturn(0u); + /* ======= RT4/4: Call function under test */ + testResult = TEST_CANTX_GetPackMinimumVoltage(&can_kShim); + /* ======= RT4/4: Test output verification */ + TEST_ASSERT_EQUAL(can_tableMinimumMaximumValues.minimumCellVoltage_mV[0u], testResult); +} + +/** + * @brief Testing CANTX_GetPackMaximumTemperature + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/1: NULL_PTR for kpkCanShim -> assert + * - Routine validation: + * - RT1/4: Only first string is closed + * - RT2/4: Only second string is closed + * - RT3/4: Both Strings are closed + * - RT4/4: No String is closed + */ +void testCANTX_GetPackMaximumTemperature(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/1 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_GetPackMaximumTemperature(NULL_PTR)); + + /* ======= Routine tests =============================================== */ + /* ======= RT1/4: Test implementation */ + BMS_GetNumberOfConnectedStrings_ExpectAndReturn(1u); + BMS_IsStringClosed_ExpectAndReturn(0u, true); + BMS_IsStringClosed_ExpectAndReturn(1u, false); + /* ======= RT1/4: Call function under test */ + int16_t testResult = TEST_CANTX_GetPackMaximumTemperature(&can_kShim); + /* ======= RT1/4: Test output verification */ + TEST_ASSERT_EQUAL(can_tableMinimumMaximumValues.maximumTemperature_ddegC[0u], testResult); + + /* ======= RT2/4: Test implementation */ + BMS_GetNumberOfConnectedStrings_ExpectAndReturn(1u); + BMS_IsStringClosed_ExpectAndReturn(0u, false); + BMS_IsStringClosed_ExpectAndReturn(1u, true); + /* ======= RT2/4: Call function under test */ + testResult = TEST_CANTX_GetPackMaximumTemperature(&can_kShim); + /* ======= RT2/4: Test output verification */ + TEST_ASSERT_EQUAL(can_tableMinimumMaximumValues.maximumTemperature_ddegC[1u], testResult); + + /* ======= RT3/4: Test implementation */ + BMS_GetNumberOfConnectedStrings_ExpectAndReturn(2u); + BMS_IsStringClosed_ExpectAndReturn(0u, true); + BMS_IsStringClosed_ExpectAndReturn(1u, true); + /* ======= RT3/4: Call function under test */ + testResult = TEST_CANTX_GetPackMaximumTemperature(&can_kShim); + /* ======= RT3/4: Test output verification */ + TEST_ASSERT_EQUAL(can_tableMinimumMaximumValues.maximumTemperature_ddegC[0u], testResult); + + /* ======= RT4/4: Test implementation */ + BMS_GetNumberOfConnectedStrings_ExpectAndReturn(0u); + /* ======= RT4/4: Call function under test */ + testResult = TEST_CANTX_GetPackMaximumTemperature(&can_kShim); + /* ======= RT4/4: Test output verification */ + TEST_ASSERT_EQUAL(can_tableMinimumMaximumValues.maximumTemperature_ddegC[0u], testResult); +} + +/** + * @brief Testing CANTX_GetPackMinimumTemperature + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/1: NULL_PTR for kpkCanShim -> assert + * - Routine validation: + * - RT1/4: Only first string is closed + * - RT2/4: Only second string is closed + * - RT3/4: Both Strings are closed + * - RT4/4: No String is closed + */ +void testCANTX_GetPackMinimumTemperature(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/1 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_GetPackMinimumTemperature(NULL_PTR)); + + /* ======= Routine tests =============================================== */ + /* ======= RT1/4: Test implementation */ + BMS_GetNumberOfConnectedStrings_ExpectAndReturn(1u); + BMS_IsStringClosed_ExpectAndReturn(0u, true); + BMS_IsStringClosed_ExpectAndReturn(1u, false); + /* ======= RT1/4: Call function under test */ + int16_t testResult = TEST_CANTX_GetPackMinimumTemperature(&can_kShim); + /* ======= RT1/4: Test output verification */ + TEST_ASSERT_EQUAL(can_tableMinimumMaximumValues.minimumTemperature_ddegC[0u], testResult); + + /* ======= RT2/4: Test implementation */ + BMS_GetNumberOfConnectedStrings_ExpectAndReturn(1u); + BMS_IsStringClosed_ExpectAndReturn(0u, false); + BMS_IsStringClosed_ExpectAndReturn(1u, true); + /* ======= RT2/4: Call function under test */ + testResult = TEST_CANTX_GetPackMinimumTemperature(&can_kShim); + /* ======= RT2/4: Test output verification */ + TEST_ASSERT_EQUAL(can_tableMinimumMaximumValues.minimumTemperature_ddegC[1u], testResult); + + /* ======= RT3/4: Test implementation */ + BMS_GetNumberOfConnectedStrings_ExpectAndReturn(2u); + BMS_IsStringClosed_ExpectAndReturn(0u, true); + BMS_IsStringClosed_ExpectAndReturn(1u, true); + /* ======= RT3/4: Call function under test */ + testResult = TEST_CANTX_GetPackMinimumTemperature(&can_kShim); + /* ======= RT3/4: Test output verification */ + TEST_ASSERT_EQUAL(can_tableMinimumMaximumValues.minimumTemperature_ddegC[0u], testResult); + + /* ======= RT4/4: Test implementation */ + BMS_GetNumberOfConnectedStrings_ExpectAndReturn(0u); + /* ======= RT4/4: Call function under test */ + testResult = TEST_CANTX_GetPackMinimumTemperature(&can_kShim); + /* ======= RT4/4: Test output verification */ + TEST_ASSERT_EQUAL(can_tableMinimumMaximumValues.minimumTemperature_ddegC[0u], testResult); +} + +/** + * @brief Testing CANTX_CalculatePackMaximumTemperature + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/1: NULL_PTR for kpkCanShim -> assert + * - Routine validation: + * - RT1/1: Function prepares signal data as expected + */ +void testCANTX_CalculatePackMaximumTemperature(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/1 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_CalculatePackMaximumTemperature(NULL_PTR)); + + /* ======= Routine tests =============================================== */ + /* ======= RT1/1: Test implementation */ + BMS_GetNumberOfConnectedStrings_IgnoreAndReturn(0u); + CAN_TxPrepareSignalData_Expect(&testMaximumTemperature0, cantx_testSignalMaximumTemperature); + CAN_TxPrepareSignalData_ReturnThruPtr_pSignal(&testSignalData[1u]); + /* ======= RT1/1: Call function under test */ + uint64_t testResult = TEST_CANTX_CalculatePackMaximumTemperature(&can_kShim); + /* ======= RT1/1: Test output verification */ + TEST_ASSERT_EQUAL(1u, testResult); +} + +/** + * @brief Testing CANTX_CalculatePackMinimumTemperature + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/1: NULL_PTR for kpkCanShim -> assert + * - Routine validation: + * - RT1/1: Function prepares signal data as expected + */ +void testCANTX_CalculatePackMinimumTemperature(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/1 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_CalculatePackMinimumTemperature(NULL_PTR)); + + /* ======= Routine tests =============================================== */ + /* ======= RT1/1: Test implementation */ + BMS_GetNumberOfConnectedStrings_IgnoreAndReturn(0u); + CAN_TxPrepareSignalData_Expect(&testMinimumTemperature0, cantx_testSignalMinimumTemperature); + CAN_TxPrepareSignalData_ReturnThruPtr_pSignal(&testSignalData[1u]); + /* ======= RT1/1: Call function under test */ + uint64_t testResult = TEST_CANTX_CalculatePackMinimumTemperature(&can_kShim); + /* ======= RT1/1: Test output verification */ + TEST_ASSERT_EQUAL(1u, testResult); +} + +/** + * @brief Testing CANTX_BuildPackMinimumMaximumValuesMessage + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/2: NULL_PTR for kpkCanShim -> assert + * - AT2/2: NULL_PTR for pMessageData -> assert + * - Routine validation: + * - RT1/1: Message data is set as expected + */ +void testCANTX_BuildPackMinimumMaximumValuesMessage(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/2 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_BuildPackMinimumMaximumValuesMessage(NULL_PTR, &testMessageData[0u])); + /* ======= AT2/2 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_BuildPackMinimumMaximumValuesMessage(&can_kShim, NULL_PTR)); + + /* ======= Routine tests =============================================== */ + uint64_t testResult = 0u; + /* ======= RT1/1: Test implementation */ + BMS_GetNumberOfConnectedStrings_IgnoreAndReturn(0u); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 14u, testMaximumCellVoltage0, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[1u], 9u, 14u, testMinimumCellVoltage0, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[2u]); + CAN_TxPrepareSignalData_Expect(&testMaximumTemperature0, cantx_testSignalMaximumTemperature); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[2u], 55u, 8u, testMaximumTemperature0, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[3u]); + CAN_TxPrepareSignalData_Expect(&testMinimumTemperature0, cantx_testSignalMinimumTemperature); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[3u], 63u, 8u, testMinimumTemperature0, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[4u]); + /* ======= RT1/1: Call function under test */ + TEST_CANTX_BuildPackMinimumMaximumValuesMessage(&can_kShim, &testResult); + /* ======= RT1/1: Test output verification */ + TEST_ASSERT_EQUAL(4u, testResult); +} + +/** + * @brief Testing CANTX_PackMinimumMaximumValues + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/7: Invalid message id -> assert + * - AT2/7: Invalid message id type -> assert + * - AT3/7: Invalid message dlc size -> assert + * - AT4/7: Invalid message endianness -> assert + * - AT5/7: NULL_PTR for pCanData -> assert + * - AT6/7: NO NULL_PTR for pMuxId -> assert + * - AT7/7: NULL_PTR for kpkCanShim -> assert + * - Routine validation: + * - RT1/1: Message data is set as expected + */ +void testCANTX_PackMinimumMaximumValues(void) { + /* ======= Assertion tests ============================================= */ + CAN_MESSAGE_PROPERTIES_s testMessage = { + .id = 0x231, + .idType = CAN_STANDARD_IDENTIFIER_11_BIT, + .dlc = 8u, + .endianness = CAN_BIG_ENDIAN, + }; + uint8_t muxId = 0u; + uint8_t canData[CAN_MAX_DLC] = {0u}; + /* ======= AT1/7 ======= */ + testMessage.id = CAN_MAX_11BIT_ID; + TEST_ASSERT_FAIL_ASSERT(CANTX_PackMinimumMaximumValues(testMessage, canData, NULL_PTR, &can_kShim)); + testMessage.id = 0x231; + /* ======= AT2/7 ======= */ + testMessage.idType = CAN_EXTENDED_IDENTIFIER_29_BIT; + TEST_ASSERT_FAIL_ASSERT(CANTX_PackMinimumMaximumValues(testMessage, canData, NULL_PTR, &can_kShim)); + testMessage.idType = CAN_STANDARD_IDENTIFIER_11_BIT; + /* ======= AT3/7 ======= */ + testMessage.dlc = 9u; + TEST_ASSERT_FAIL_ASSERT(CANTX_PackMinimumMaximumValues(testMessage, canData, NULL_PTR, &can_kShim)); + testMessage.dlc = 8u; + /* ======= AT4/7 ======= */ + testMessage.endianness = CAN_LITTLE_ENDIAN; + TEST_ASSERT_FAIL_ASSERT(CANTX_PackMinimumMaximumValues(testMessage, canData, NULL_PTR, &can_kShim)); + testMessage.endianness = CAN_BIG_ENDIAN; + /* ======= AT5/7 ======= */ + TEST_ASSERT_FAIL_ASSERT(CANTX_PackMinimumMaximumValues(testMessage, NULL_PTR, NULL_PTR, &can_kShim)); + /* ======= AT6/7 ======= */ + TEST_ASSERT_FAIL_ASSERT(CANTX_PackMinimumMaximumValues(testMessage, canData, &muxId, &can_kShim)); + /* ======= AT7/7 ======= */ + TEST_ASSERT_FAIL_ASSERT(CANTX_PackMinimumMaximumValues(testMessage, canData, NULL_PTR, NULL_PTR)); + + /* ======= Routine tests =============================================== */ + /* ======= RT1/1: Test implementation */ + BMS_GetNumberOfConnectedStrings_IgnoreAndReturn(0u); + CAN_TxPrepareSignalData_Ignore(); + DATA_Read1DataBlock_ExpectAndReturn(can_kShim.pTableMinMax, STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 14u, testMaximumCellVoltage0, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 9u, 14u, testMinimumCellVoltage0, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 55u, 8u, testMaximumTemperature0, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 63u, 8u, testMinimumTemperature0, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], canData, testMessage.endianness); + /* ======= RT1/1: Call function under test */ + + uint32_t testResult = CANTX_PackMinimumMaximumValues(testMessage, canData, NULL_PTR, &can_kShim); + /* ======= RT1/1: Test output verification */ + TEST_ASSERT_EQUAL(0u, testResult); +} diff --git a/tests/unit/app/driver/can/cbs/tx-cyclic/test_can_cbs_tx_pack-state-estimation.c b/tests/unit/app/driver/can/cbs/tx-cyclic/test_can_cbs_tx_pack-state-estimation.c new file mode 100644 index 00000000..b0066a68 --- /dev/null +++ b/tests/unit/app/driver/can/cbs/tx-cyclic/test_can_cbs_tx_pack-state-estimation.c @@ -0,0 +1,780 @@ +/** + * + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * We kindly request you to use one or more of the following phrases to refer to + * foxBMS in your hardware, software, documentation or advertising materials: + * + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" + * + */ + +/** + * @file test_can_cbs_tx_pack-state-estimation.c + * @author foxBMS Team + * @date 2021-07-27 (date of creation) + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup UNIT_TEST_IMPLEMENTATION + * @prefix TEST + * + * @brief Tests for the CAN driver callbacks + * + */ + +/*========== Includes =======================================================*/ +#include "unity.h" +#include "Mockbms.h" +#include "Mockcan.h" +#include "Mockcan_helper.h" +#include "Mockdatabase.h" +#include "Mockdiag.h" +#include "Mockfoxmath.h" +#include "Mockimd.h" +#include "Mockos.h" + +#include "database_cfg.h" + +#include "can_cbs_tx_cyclic.h" +#include "can_cfg_tx-cyclic-message-definitions.h" +#include "test_assert_helper.h" + +#include + +/*========== Unit Testing Framework Directives ==============================*/ +TEST_SOURCE_FILE("can_cbs_tx_pack-state-estimation.c") + +TEST_INCLUDE_PATH("../../src/app/application/bms") +TEST_INCLUDE_PATH("../../src/app/driver/can") +TEST_INCLUDE_PATH("../../src/app/driver/can/cbs") +TEST_INCLUDE_PATH("../../src/app/driver/can/cbs/tx-cyclic") +TEST_INCLUDE_PATH("../../src/app/driver/config") +TEST_INCLUDE_PATH("../../src/app/driver/contactor") +TEST_INCLUDE_PATH("../../src/app/driver/foxmath") +TEST_INCLUDE_PATH("../../src/app/driver/fram") +TEST_INCLUDE_PATH("../../src/app/driver/imd") +TEST_INCLUDE_PATH("../../src/app/driver/sps") +TEST_INCLUDE_PATH("../../src/app/engine/diag") +TEST_INCLUDE_PATH("../../src/app/engine/sys_mon") +TEST_INCLUDE_PATH("../../src/app/task/config") + +/*========== Definitions and Implementations for Unit Test ==================*/ +uint64_t testMessageData[7u] = {0u, 1u, 2u, 3u, 4u, 5u, 6u}; + +float_t testSignalData[4u] = {0.0f, 1.0f, 2.0f, 3.0f}; + +static const CAN_SIGNAL_TYPE_s cantx_testSignalMinimumSoc = {7u, 10u, 0.1f, 0.0f, 0.0f, 102.3f}; +static const CAN_SIGNAL_TYPE_s cantx_testSignalMaximumSoc = {13u, 10u, 0.1f, 0.0f, 0.0f, 102.3f}; +static const CAN_SIGNAL_TYPE_s cantx_testSignalMinimumSoe = {19u, 10u, 0.1f, 0.0f, 0.0f, 102.3f}; +static const CAN_SIGNAL_TYPE_s cantx_testSignalMaximumSoe = {25u, 10u, 0.1f, 0.0f, 0.0f, 102.3f}; +static const CAN_SIGNAL_TYPE_s cantx_testSignalSoh = {47u, 8u, 0.5f, 0.0f, 0.0f, 127.5f}; +static const CAN_SIGNAL_TYPE_s cantx_testSignalEnergy = {55u, 16u, 100.0f, 0.0f, 0.0f, 6553500.0f}; + +static DATA_BLOCK_CELL_VOLTAGE_s can_tableCellVoltages = {.header.uniqueId = DATA_BLOCK_ID_CELL_VOLTAGE}; +static DATA_BLOCK_CELL_TEMPERATURE_s can_tableTemperatures = {.header.uniqueId = DATA_BLOCK_ID_CELL_TEMPERATURE}; +static DATA_BLOCK_MIN_MAX_s can_tableMinimumMaximumValues = {.header.uniqueId = DATA_BLOCK_ID_MIN_MAX}; +static DATA_BLOCK_CURRENT_SENSOR_s can_tableCurrentSensor = {.header.uniqueId = DATA_BLOCK_ID_CURRENT_SENSOR}; +static DATA_BLOCK_OPEN_WIRE_s can_tableOpenWire = {.header.uniqueId = DATA_BLOCK_ID_OPEN_WIRE_BASE}; +static DATA_BLOCK_STATE_REQUEST_s can_tableStateRequest = {.header.uniqueId = DATA_BLOCK_ID_STATE_REQUEST}; +static DATA_BLOCK_PACK_VALUES_s can_tablePackValues = {.header.uniqueId = DATA_BLOCK_ID_PACK_VALUES}; +static DATA_BLOCK_SOF_s can_tableSof = {.header.uniqueId = DATA_BLOCK_ID_SOF}; +static DATA_BLOCK_SOC_s can_tableSoc = {.header.uniqueId = DATA_BLOCK_ID_SOC}; +static DATA_BLOCK_SOE_s can_tableSoe = {.header.uniqueId = DATA_BLOCK_ID_SOE}; +static DATA_BLOCK_ERROR_STATE_s can_tableErrorState = {.header.uniqueId = DATA_BLOCK_ID_ERROR_STATE}; +static DATA_BLOCK_INSULATION_MONITORING_s can_tableInsulation = { + .header.uniqueId = DATA_BLOCK_ID_INSULATION_MONITORING}; +static DATA_BLOCK_MSL_FLAG_s can_tableMslFlags = {.header.uniqueId = DATA_BLOCK_ID_MSL_FLAG}; +static DATA_BLOCK_RSL_FLAG_s can_tableRslFlags = {.header.uniqueId = DATA_BLOCK_ID_RSL_FLAG}; +static DATA_BLOCK_MOL_FLAG_s can_tableMolFlags = {.header.uniqueId = DATA_BLOCK_ID_MOL_FLAG}; +static DATA_BLOCK_AEROSOL_SENSOR_s can_tableAerosolSensor = {.header.uniqueId = DATA_BLOCK_ID_AEROSOL_SENSOR}; + +OS_QUEUE imd_canDataQueue = NULL_PTR; + +const CAN_SHIM_s can_kShim = { + .pQueueImd = &imd_canDataQueue, + .pTableCellVoltage = &can_tableCellVoltages, + .pTableCellTemperature = &can_tableTemperatures, + .pTableMinMax = &can_tableMinimumMaximumValues, + .pTableCurrentSensor = &can_tableCurrentSensor, + .pTableOpenWire = &can_tableOpenWire, + .pTableStateRequest = &can_tableStateRequest, + .pTablePackValues = &can_tablePackValues, + .pTableSof = &can_tableSof, + .pTableSoc = &can_tableSoc, + .pTableSoe = &can_tableSoe, + .pTableErrorState = &can_tableErrorState, + .pTableInsulation = &can_tableInsulation, + .pTableMsl = &can_tableMslFlags, + .pTableRsl = &can_tableRslFlags, + .pTableMol = &can_tableMolFlags, + .pTableAerosolSensor = &can_tableAerosolSensor, +}; + +/*========== Setup and Teardown =============================================*/ +void setUp(void) { + can_tableSoc.maximumSoc_perc[0u] = 75.0f; + can_tableSoc.maximumSoc_perc[1u] = 50.5f; + + can_tableSoc.minimumSoc_perc[0u] = 33.3f; + can_tableSoc.minimumSoc_perc[1u] = 44.4f; + + can_tableSoe.maximumSoe_perc[0u] = 50.0f; + can_tableSoe.maximumSoe_perc[1u] = 25.0f; + + can_tableSoe.minimumSoe_perc[0u] = 66.6f; + can_tableSoe.minimumSoe_perc[1u] = 77.7f; + + can_tableSoe.minimumSoe_Wh[0u] = 55.5f; + can_tableSoe.minimumSoe_Wh[1u] = 75.0f; +} + +void tearDown(void) { +} + +/*========== Test Cases =====================================================*/ +/** + * @brief Testing CANTX_CalculateMaximumPackSoc + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/1: NULL_PTR for kpkCanShim -> assert + * - Routine validation: + * - RT1/3: Number of connected strings is 0 + * - RT2/3: Number of connected strings is 1 + * - RT3/3: Number of connected strings is 2 + */ +void testCANTX_CalculateMaximumPackSoc(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/1 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_CalculateMaximumPackSoc(NULL_PTR)); + + /* ======= Routine tests =============================================== */ + /* ======= RT1/3: Test implementation */ + BMS_GetNumberOfConnectedStrings_ExpectAndReturn(0u); + CAN_TxPrepareSignalData_Expect(&testSignalData[0u], cantx_testSignalMaximumSoc); + CAN_TxPrepareSignalData_ReturnThruPtr_pSignal(&testSignalData[1u]); + /* ======= RT1/3: Call function under test */ + uint64_t testResult = TEST_CANTX_CalculateMaximumPackSoc(&can_kShim); + /* ======= RT1/3: Test output verification */ + TEST_ASSERT_EQUAL(1u, testResult); + + /* ======= RT2/3: Test implementation */ + float_t maximumPackSocOneStringClosed = can_tableSoc.maximumSoc_perc[0u] / BS_NR_OF_STRINGS; + BMS_GetNumberOfConnectedStrings_ExpectAndReturn(1u); + BMS_GetNumberOfConnectedStrings_ExpectAndReturn(1u); + BMS_IsStringClosed_IgnoreAndReturn(true); + CAN_TxPrepareSignalData_Expect(&maximumPackSocOneStringClosed, cantx_testSignalMaximumSoc); + CAN_TxPrepareSignalData_ReturnThruPtr_pSignal(&testSignalData[1u]); + /* ======= RT2/3: Call function under test */ + testResult = TEST_CANTX_CalculateMaximumPackSoc(&can_kShim); + /* ======= RT2/3: Test output verification */ + TEST_ASSERT_EQUAL(1u, testResult); + + /* ======= RT3/3: Test implementation */ + float_t maximumPackSocTwoStringsClosed = (2 * can_tableSoc.maximumSoc_perc[0u]) / BS_NR_OF_STRINGS; + BMS_GetNumberOfConnectedStrings_ExpectAndReturn(2u); + BMS_GetNumberOfConnectedStrings_ExpectAndReturn(2u); + BMS_IsStringClosed_IgnoreAndReturn(true); + CAN_TxPrepareSignalData_Expect(&maximumPackSocTwoStringsClosed, cantx_testSignalMaximumSoc); + CAN_TxPrepareSignalData_ReturnThruPtr_pSignal(&testSignalData[1u]); + /* ======= RT3/3: Call function under test */ + testResult = TEST_CANTX_CalculateMaximumPackSoc(&can_kShim); + /* ======= RT3/3: Test output verification */ + TEST_ASSERT_EQUAL(1u, testResult); +} + +/** + * @brief Testing CANTX_GetMaximumStringSoc + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/1: NULL_PTR for kpkCanShim -> assert + * - Routine validation: + * - RT1/4: Only first string is closed + * - RT2/4: Only second string is closed + * - RT3/4: Both Strings are closed + * - RT4/4: No String is closed + */ +void testCANTX_GetMaximumStringSoc(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/1 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_GetMaximumStringSoc(NULL_PTR)); + + /* ======= Routine tests =============================================== */ + /* ======= RT1/4: Test implementation */ + BMS_IsStringClosed_ExpectAndReturn(0u, true); + BMS_IsStringClosed_ExpectAndReturn(1u, false); + /* ======= RT1/4: Call function under test */ + float_t testResult = TEST_CANTX_GetMaximumStringSoc(&can_kShim); + /* ======= RT1/4: Test output verification */ + TEST_ASSERT_EQUAL(can_tableSoc.maximumSoc_perc[0u], testResult); + + /* ======= RT2/4: Test implementation */ + BMS_IsStringClosed_ExpectAndReturn(0u, false); + BMS_IsStringClosed_ExpectAndReturn(1u, true); + /* ======= RT2/4: Call function under test */ + testResult = TEST_CANTX_GetMaximumStringSoc(&can_kShim); + /* ======= RT2/4: Test output verification */ + TEST_ASSERT_EQUAL(can_tableSoc.maximumSoc_perc[1u], testResult); + + /* ======= RT3/4: Test implementation */ + BMS_IsStringClosed_ExpectAndReturn(0u, true); + BMS_IsStringClosed_ExpectAndReturn(1u, true); + /* ======= RT3/4: Call function under test */ + testResult = TEST_CANTX_GetMaximumStringSoc(&can_kShim); + /* ======= RT3/4: Test output verification */ + TEST_ASSERT_EQUAL(can_tableSoc.maximumSoc_perc[0u], testResult); + + /* ======= RT4/4: Test implementation */ + BMS_IsStringClosed_ExpectAndReturn(0u, false); + BMS_IsStringClosed_ExpectAndReturn(1u, false); + /* ======= RT4/4: Call function under test */ + testResult = TEST_CANTX_GetMaximumStringSoc(&can_kShim); + /* ======= RT4/4: Test output verification */ + TEST_ASSERT_EQUAL(0.0f, testResult); +} + +/** + * @brief Testing CANTX_CalculateMinimumPackSoc + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/1: NULL_PTR for kpkCanShim -> assert + * - Routine validation: + * - RT1/3: Number of connected strings is 0 + * - RT2/3: Number of connected strings is 1 + * - RT3/3: Number of connected strings is 2 + */ +void testCANTX_CalculateMinimumPackSoc(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/1 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_CalculateMinimumPackSoc(NULL_PTR)); + + /* ======= Routine tests =============================================== */ + /* ======= RT1/3: Test implementation */ + BMS_GetNumberOfConnectedStrings_ExpectAndReturn(0u); + CAN_TxPrepareSignalData_Expect(&testSignalData[0u], cantx_testSignalMinimumSoc); + CAN_TxPrepareSignalData_ReturnThruPtr_pSignal(&testSignalData[1u]); + /* ======= RT1/3: Call function under test */ + uint64_t testResult = TEST_CANTX_CalculateMinimumPackSoc(&can_kShim); + /* ======= RT1/3: Test output verification */ + TEST_ASSERT_EQUAL(1u, testResult); + + /* ======= RT2/3: Test implementation */ + float_t minimumPackSocOneStringClosed = can_tableSoc.minimumSoc_perc[0u] / BS_NR_OF_STRINGS; + BMS_GetNumberOfConnectedStrings_ExpectAndReturn(1u); + BMS_GetNumberOfConnectedStrings_ExpectAndReturn(1u); + BMS_IsStringClosed_IgnoreAndReturn(true); + CAN_TxPrepareSignalData_Expect(&minimumPackSocOneStringClosed, cantx_testSignalMinimumSoc); + CAN_TxPrepareSignalData_ReturnThruPtr_pSignal(&testSignalData[1u]); + /* ======= RT2/3: Call function under test */ + testResult = TEST_CANTX_CalculateMinimumPackSoc(&can_kShim); + /* ======= RT2/3: Test output verification */ + TEST_ASSERT_EQUAL(1u, testResult); + + /* ======= RT3/3: Test implementation */ + float_t minimumPackSocTwoStringsClosed = (2 * can_tableSoc.minimumSoc_perc[0u]) / BS_NR_OF_STRINGS; + BMS_GetNumberOfConnectedStrings_ExpectAndReturn(2u); + BMS_GetNumberOfConnectedStrings_ExpectAndReturn(2u); + BMS_IsStringClosed_IgnoreAndReturn(true); + CAN_TxPrepareSignalData_Expect(&minimumPackSocTwoStringsClosed, cantx_testSignalMinimumSoc); + CAN_TxPrepareSignalData_ReturnThruPtr_pSignal(&testSignalData[1u]); + /* ======= RT3/3: Call function under test */ + testResult = TEST_CANTX_CalculateMinimumPackSoc(&can_kShim); + /* ======= RT3/3: Test output verification */ + TEST_ASSERT_EQUAL(1u, testResult); +} + +/** + * @brief Testing CANTX_GetMinimumStringSoc + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/1: NULL_PTR for kpkCanShim -> assert + * - Routine validation: + * - RT1/4: Only first string is closed + * - RT2/4: Only second string is closed + * - RT3/4: Both Strings are closed + * - RT4/4: No String is closed + */ +void testCANTX_GetMinimumStringSoc(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/1 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_GetMinimumStringSoc(NULL_PTR)); + + /* ======= Routine tests =============================================== */ + /* ======= RT1/4: Test implementation */ + BMS_IsStringClosed_ExpectAndReturn(0u, true); + BMS_IsStringClosed_ExpectAndReturn(1u, false); + /* ======= RT1/4: Call function under test */ + float_t testResult = TEST_CANTX_GetMinimumStringSoc(&can_kShim); + /* ======= RT1/4: Test output verification */ + TEST_ASSERT_EQUAL(can_tableSoc.minimumSoc_perc[0u], testResult); + + /* ======= RT2/4: Test implementation */ + BMS_IsStringClosed_ExpectAndReturn(0u, false); + BMS_IsStringClosed_ExpectAndReturn(1u, true); + /* ======= RT2/4: Call function under test */ + testResult = TEST_CANTX_GetMinimumStringSoc(&can_kShim); + /* ======= RT2/4: Test output verification */ + TEST_ASSERT_EQUAL(can_tableSoc.minimumSoc_perc[1u], testResult); + + /* ======= RT3/4: Test implementation */ + BMS_IsStringClosed_ExpectAndReturn(0u, true); + BMS_IsStringClosed_ExpectAndReturn(1u, true); + /* ======= RT3/4: Call function under test */ + testResult = TEST_CANTX_GetMinimumStringSoc(&can_kShim); + /* ======= RT3/4: Test output verification */ + TEST_ASSERT_EQUAL(can_tableSoc.minimumSoc_perc[0u], testResult); + + /* ======= RT4/4: Test implementation */ + BMS_IsStringClosed_ExpectAndReturn(0u, false); + BMS_IsStringClosed_ExpectAndReturn(1u, false); + /* ======= RT4/4: Call function under test */ + testResult = TEST_CANTX_GetMinimumStringSoc(&can_kShim); + /* ======= RT4/4: Test output verification */ + TEST_ASSERT_EQUAL(100.0f, testResult); +} + +/** + * @brief Testing CANTX_CalculateMaximumPackSoe + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/1: NULL_PTR for kpkCanShim -> assert + * - Routine validation: + * - RT1/3: Number of connected strings is 0 + * - RT2/3: Number of connected strings is 1 + * - RT3/3: Number of connected strings is 2 + */ +void testCANTX_CalculateMaximumPackSoe(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/1 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_CalculateMaximumPackSoe(NULL_PTR)); + + /* ======= Routine tests =============================================== */ + /* ======= RT1/3: Test implementation */ + BMS_GetNumberOfConnectedStrings_ExpectAndReturn(0u); + CAN_TxPrepareSignalData_Expect(&testSignalData[0u], cantx_testSignalMaximumSoe); + CAN_TxPrepareSignalData_ReturnThruPtr_pSignal(&testSignalData[1u]); + /* ======= RT1/3: Call function under test */ + uint64_t testResult = TEST_CANTX_CalculateMaximumPackSoe(&can_kShim); + /* ======= RT1/3: Test output verification */ + TEST_ASSERT_EQUAL(1u, testResult); + + /* ======= RT2/3: Test implementation */ + float_t maximumPackSoeOneStringClosed = can_tableSoe.maximumSoe_perc[0u] / BS_NR_OF_STRINGS; + BMS_GetNumberOfConnectedStrings_ExpectAndReturn(1u); + BMS_GetNumberOfConnectedStrings_ExpectAndReturn(1u); + BMS_IsStringClosed_IgnoreAndReturn(true); + CAN_TxPrepareSignalData_Expect(&maximumPackSoeOneStringClosed, cantx_testSignalMaximumSoe); + CAN_TxPrepareSignalData_ReturnThruPtr_pSignal(&testSignalData[1u]); + /* ======= RT2/3: Call function under test */ + testResult = TEST_CANTX_CalculateMaximumPackSoe(&can_kShim); + /* ======= RT2/3: Test output verification */ + TEST_ASSERT_EQUAL(1u, testResult); + + /* ======= RT3/3: Test implementation */ + float_t maximumPackSoeTwoStringsClosed = (2 * can_tableSoe.maximumSoe_perc[0u]) / BS_NR_OF_STRINGS; + BMS_GetNumberOfConnectedStrings_ExpectAndReturn(2u); + BMS_GetNumberOfConnectedStrings_ExpectAndReturn(2u); + BMS_IsStringClosed_IgnoreAndReturn(true); + CAN_TxPrepareSignalData_Expect(&maximumPackSoeTwoStringsClosed, cantx_testSignalMaximumSoe); + CAN_TxPrepareSignalData_ReturnThruPtr_pSignal(&testSignalData[1u]); + /* ======= RT3/3: Call function under test */ + testResult = TEST_CANTX_CalculateMaximumPackSoe(&can_kShim); + /* ======= RT3/3: Test output verification */ + TEST_ASSERT_EQUAL(1u, testResult); +} + +/** + * @brief Testing CANTX_GetMaximumStringSoe + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/1: NULL_PTR for kpkCanShim -> assert + * - Routine validation: + * - RT1/4: Only first string is closed + * - RT2/4: Only second string is closed + * - RT3/4: Both Strings are closed + * - RT4/4: No String is closed + */ +void testCANTX_GetMaximumStringSoe(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/1 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_GetMaximumStringSoe(NULL_PTR)); + + /* ======= Routine tests =============================================== */ + /* ======= RT1/4: Test implementation */ + BMS_IsStringClosed_ExpectAndReturn(0u, true); + BMS_IsStringClosed_ExpectAndReturn(1u, false); + /* ======= RT1/4: Call function under test */ + float_t testResult = TEST_CANTX_GetMaximumStringSoe(&can_kShim); + /* ======= RT1/4: Test output verification */ + TEST_ASSERT_EQUAL(can_tableSoe.maximumSoe_perc[0u], testResult); + + /* ======= RT2/4: Test implementation */ + BMS_IsStringClosed_ExpectAndReturn(0u, false); + BMS_IsStringClosed_ExpectAndReturn(1u, true); + /* ======= RT2/4: Call function under test */ + testResult = TEST_CANTX_GetMaximumStringSoe(&can_kShim); + /* ======= RT2/4: Test output verification */ + TEST_ASSERT_EQUAL(can_tableSoe.maximumSoe_perc[1u], testResult); + + /* ======= RT3/4: Test implementation */ + BMS_IsStringClosed_ExpectAndReturn(0u, true); + BMS_IsStringClosed_ExpectAndReturn(1u, true); + /* ======= RT3/4: Call function under test */ + testResult = TEST_CANTX_GetMaximumStringSoe(&can_kShim); + /* ======= RT3/4: Test output verification */ + TEST_ASSERT_EQUAL(can_tableSoe.maximumSoe_perc[0u], testResult); + + /* ======= RT4/4: Test implementation */ + BMS_IsStringClosed_ExpectAndReturn(0u, false); + BMS_IsStringClosed_ExpectAndReturn(1u, false); + /* ======= RT4/4: Call function under test */ + testResult = TEST_CANTX_GetMaximumStringSoe(&can_kShim); + /* ======= RT4/4: Test output verification */ + TEST_ASSERT_EQUAL(0.0f, testResult); +} + +/** + * @brief Testing CANTX_CalculateMinimumPackSoe + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/1: NULL_PTR for kpkCanShim -> assert + * - Routine validation: + * - RT1/3: Number of connected strings is 0 + * - RT2/3: Number of connected strings is 1 + * - RT3/3: Number of connected strings is 2 + */ +void testCANTX_CalculateMinimumPackSoe(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/1 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_CalculateMinimumPackSoe(NULL_PTR)); + + /* ======= Routine tests =============================================== */ + /* ======= RT1/3: Test implementation */ + BMS_GetNumberOfConnectedStrings_ExpectAndReturn(0u); + CAN_TxPrepareSignalData_Expect(&testSignalData[0u], cantx_testSignalMinimumSoe); + CAN_TxPrepareSignalData_ReturnThruPtr_pSignal(&testSignalData[1u]); + /* ======= RT1/3: Call function under test */ + uint64_t testResult = TEST_CANTX_CalculateMinimumPackSoe(&can_kShim); + /* ======= RT1/3: Test output verification */ + TEST_ASSERT_EQUAL(1u, testResult); + + /* ======= RT2/3: Test implementation */ + float_t minimumPackSoeOneStringClosed = can_tableSoe.minimumSoe_perc[0u] / BS_NR_OF_STRINGS; + BMS_GetNumberOfConnectedStrings_ExpectAndReturn(1u); + BMS_GetNumberOfConnectedStrings_ExpectAndReturn(1u); + BMS_IsStringClosed_IgnoreAndReturn(true); + CAN_TxPrepareSignalData_Expect(&minimumPackSoeOneStringClosed, cantx_testSignalMinimumSoe); + CAN_TxPrepareSignalData_ReturnThruPtr_pSignal(&testSignalData[1u]); + /* ======= RT2/3: Call function under test */ + testResult = TEST_CANTX_CalculateMinimumPackSoe(&can_kShim); + /* ======= RT2/3: Test output verification */ + TEST_ASSERT_EQUAL(1u, testResult); + + /* ======= RT3/3: Test implementation */ + float_t minimumPackSoeTwoStringsClosed = (2 * can_tableSoe.minimumSoe_perc[0u]) / BS_NR_OF_STRINGS; + BMS_GetNumberOfConnectedStrings_ExpectAndReturn(2u); + BMS_GetNumberOfConnectedStrings_ExpectAndReturn(2u); + BMS_IsStringClosed_IgnoreAndReturn(true); + CAN_TxPrepareSignalData_Expect(&minimumPackSoeTwoStringsClosed, cantx_testSignalMinimumSoe); + CAN_TxPrepareSignalData_ReturnThruPtr_pSignal(&testSignalData[1u]); + /* ======= RT3/3: Call function under test */ + testResult = TEST_CANTX_CalculateMinimumPackSoe(&can_kShim); + /* ======= RT3/3: Test output verification */ + TEST_ASSERT_EQUAL(1u, testResult); +} + +/** + * @brief Testing CANTX_GetMinimumStringSoe + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/1: NULL_PTR for kpkCanShim -> assert + * - Routine validation: + * - RT1/4: Only first string is closed + * - RT2/4: Only second string is closed + * - RT3/4: Both Strings are closed + * - RT4/4: No String is closed + */ +void testCANTX_GetMinimumStringSoe(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/1 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_GetMinimumStringSoe(NULL_PTR)); + + /* ======= Routine tests =============================================== */ + /* ======= RT1/4: Test implementation */ + BMS_IsStringClosed_ExpectAndReturn(0u, true); + BMS_IsStringClosed_ExpectAndReturn(1u, false); + /* ======= RT1/4: Call function under test */ + float_t testResult = TEST_CANTX_GetMinimumStringSoe(&can_kShim); + /* ======= RT1/4: Test output verification */ + TEST_ASSERT_EQUAL(can_tableSoe.minimumSoe_perc[0u], testResult); + + /* ======= RT2/4: Test implementation */ + BMS_IsStringClosed_ExpectAndReturn(0u, false); + BMS_IsStringClosed_ExpectAndReturn(1u, true); + /* ======= RT2/4: Call function under test */ + testResult = TEST_CANTX_GetMinimumStringSoe(&can_kShim); + /* ======= RT2/4: Test output verification */ + TEST_ASSERT_EQUAL(can_tableSoe.minimumSoe_perc[1u], testResult); + + /* ======= RT3/4: Test implementation */ + BMS_IsStringClosed_ExpectAndReturn(0u, true); + BMS_IsStringClosed_ExpectAndReturn(1u, true); + /* ======= RT3/4: Call function under test */ + testResult = TEST_CANTX_GetMinimumStringSoe(&can_kShim); + /* ======= RT3/4: Test output verification */ + TEST_ASSERT_EQUAL(can_tableSoe.minimumSoe_perc[0u], testResult); + + /* ======= RT4/4: Test implementation */ + BMS_IsStringClosed_ExpectAndReturn(0u, false); + BMS_IsStringClosed_ExpectAndReturn(1u, false); + /* ======= RT4/4: Call function under test */ + testResult = TEST_CANTX_GetMinimumStringSoe(&can_kShim); + /* ======= RT4/4: Test output verification */ + TEST_ASSERT_EQUAL(100.0f, testResult); +} + +/** + * @brief Testing CANTX_CalculatePackSoh + * @details The following cases need to be tested: + * - Argument validation: + * - None + * - Routine validation: + * - RT1/1: Data prepared as expected + */ +void testCANTX_CalculatePackSoh(void) { + /* ======= Routine tests =============================================== */ + float_t packSoh = 100.0f; + /* ======= RT1/1: Test implementation */ + CAN_TxPrepareSignalData_Expect(&packSoh, cantx_testSignalSoh); + CAN_TxPrepareSignalData_ReturnThruPtr_pSignal(&testSignalData[1u]); + /* ======= RT1/1: Call function under test */ + uint64_t testResult = TEST_CANTX_CalculatePackSoh(); + /* ======= RT1/1: Test output verification */ + TEST_ASSERT_EQUAL(testSignalData[1u], testResult); +} + +/** + * @brief Testing CANTX_CalculatePackEnergy + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/1: NULL_PTR for kpkCanShim -> assert + * - Routine validation: + * - RT1/3: Number of connected strings is 0 + * - RT2/3: Number of connected strings is 1 + * - RT3/3: Number of connected strings is 2 + */ +void testCANTX_CalculatePackEnergy(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/1 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_CalculatePackEnergy(NULL_PTR)); + + /* ======= Routine tests =============================================== */ + /* ======= RT1/3: Test implementation */ + BMS_GetNumberOfConnectedStrings_ExpectAndReturn(0u); + CAN_TxPrepareSignalData_Expect(&testSignalData[0u], cantx_testSignalEnergy); + CAN_TxPrepareSignalData_ReturnThruPtr_pSignal(&testSignalData[1u]); + /* ======= RT1/3: Call function under test */ + uint64_t testResult = TEST_CANTX_CalculatePackEnergy(&can_kShim); + /* ======= RT1/3: Test output verification */ + TEST_ASSERT_EQUAL(testSignalData[1u], testResult); + + /* ======= RT2/3: Test implementation */ + float_t packEnergyOneStringConnected = can_tableSoe.minimumSoe_Wh[0u]; + BMS_GetNumberOfConnectedStrings_ExpectAndReturn(1u); + BMS_GetNumberOfConnectedStrings_ExpectAndReturn(1u); + CAN_TxPrepareSignalData_Expect(&packEnergyOneStringConnected, cantx_testSignalEnergy); + CAN_TxPrepareSignalData_ReturnThruPtr_pSignal(&testSignalData[1u]); + /* ======= RT2/3: Call function under test */ + testResult = TEST_CANTX_CalculatePackEnergy(&can_kShim); + /* ======= RT2/3: Test output verification */ + TEST_ASSERT_EQUAL(testSignalData[1u], testResult); + + /* ======= RT3/3: Test implementation */ + float_t packEnergyTwoStringsConnected = 2 * can_tableSoe.minimumSoe_Wh[0u]; + BMS_GetNumberOfConnectedStrings_ExpectAndReturn(2u); + BMS_GetNumberOfConnectedStrings_ExpectAndReturn(2u); + CAN_TxPrepareSignalData_Expect(&packEnergyTwoStringsConnected, cantx_testSignalEnergy); + CAN_TxPrepareSignalData_ReturnThruPtr_pSignal(&testSignalData[1u]); + /* ======= RT3/3: Call function under test */ + testResult = TEST_CANTX_CalculatePackEnergy(&can_kShim); + /* ======= RT3/3: Test output verification */ + TEST_ASSERT_EQUAL(testSignalData[1u], testResult); +} + +/** + * @brief Testing CANTX_GetStringEnergy + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/1: NULL_PTR for kpkCanShim -> assert + * - Routine validation: + * - RT1/2: String 0 energy > string 1 energy + * - RT2/2: String 0 energy < string 1 energy + */ +void testCANTX_GetStringEnergy(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/1 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_GetStringEnergy(NULL_PTR)); + + /* ======= Routine tests =============================================== */ + /* ======= RT1/2: Call function under test */ + float_t testResult = TEST_CANTX_GetStringEnergy(&can_kShim); + /* ======= RT1/2: Test output verification */ + TEST_ASSERT_EQUAL(can_tableSoe.minimumSoe_Wh[0u], testResult); + + /* ======= RT2/2: Call function under test */ + can_tableSoe.minimumSoe_Wh[0u] = 75.0f; + can_tableSoe.minimumSoe_Wh[1u] = 55.5f; + testResult = TEST_CANTX_GetStringEnergy(&can_kShim); + /* ======= RT2/2: Test output verification */ + TEST_ASSERT_EQUAL(can_tableSoe.minimumSoe_Wh[1u], testResult); + can_tableSoe.minimumSoe_Wh[0u] = 55.5f; + can_tableSoe.minimumSoe_Wh[1u] = 75.0f; +} + +/** + * @brief Testing CANTX_BuildPackStateEstimationMessage + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/2: NULL_PTR for kpkCanShim -> assert + * - AT2/2: NULL_PTR for pMessageData -> assert + * - Routine validation: + * - RT1/1: Message data is set as expected + */ +void testCANTX_BuildPackStateEstimationMessage(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/2 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_BuildPackStateEstimationMessage(NULL_PTR, &testMessageData[0u])); + /* ======= AT2/2 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_BuildPackStateEstimationMessage(&can_kShim, NULL_PTR)); + + /* ======= Routine tests =============================================== */ + uint64_t testResult = 0u; + /* ======= RT1/1: Test implementation */ + BMS_GetNumberOfConnectedStrings_IgnoreAndReturn(0u); + BMS_IsStringClosed_IgnoreAndReturn(false); + CAN_TxPrepareSignalData_Expect(NULL_PTR, cantx_testSignalMinimumSoc); + CAN_TxPrepareSignalData_IgnoreArg_pSignal(); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 10u, testSignalData[0u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxPrepareSignalData_Expect(NULL_PTR, cantx_testSignalMaximumSoc); + CAN_TxPrepareSignalData_IgnoreArg_pSignal(); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[1u], 13u, 10u, testSignalData[0u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[2u]); + CAN_TxPrepareSignalData_Expect(NULL_PTR, cantx_testSignalMinimumSoe); + CAN_TxPrepareSignalData_IgnoreArg_pSignal(); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[2u], 19u, 10u, testSignalData[0u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[3u]); + CAN_TxPrepareSignalData_Expect(NULL_PTR, cantx_testSignalMaximumSoe); + CAN_TxPrepareSignalData_IgnoreArg_pSignal(); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[3u], 25u, 10u, testSignalData[0u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[4u]); + CAN_TxPrepareSignalData_Expect(NULL_PTR, cantx_testSignalSoh); + CAN_TxPrepareSignalData_IgnoreArg_pSignal(); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[4u], 47u, 8u, 100.0f, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[5u]); + CAN_TxPrepareSignalData_Expect(NULL_PTR, cantx_testSignalEnergy); + CAN_TxPrepareSignalData_IgnoreArg_pSignal(); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[5u], 55u, 16u, testSignalData[0u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[6u]); + /* ======= RT1/1: Call function under test */ + TEST_CANTX_BuildPackStateEstimationMessage(&can_kShim, &testResult); + /* ======= RT1/1: Test output verification */ + TEST_ASSERT_EQUAL(testResult, testMessageData[6u]); +} + +/** + * @brief Testing CANTX_PackStateEstimation + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/7: Invalid message id -> assert + * - AT2/7: Invalid message id type -> assert + * - AT3/7: Invalid message dlc size -> assert + * - AT4/7: Invalid message endianness -> assert + * - AT5/7: NULL_PTR for pCanData -> assert + * - AT6/7: NO NULL_PTR for pMuxId -> assert + * - AT7/7: NULL_PTR for kpkCanShim -> assert + * - Routine validation: + * - RT1/1: Message data is set as expected + */ +void testCANTX_PackStateEstimation(void) { + /* ======= Assertion tests ============================================= */ + CAN_MESSAGE_PROPERTIES_s testMessage = { + .id = CANTX_PACK_STATE_ESTIMATION_ID, + .idType = CANTX_PACK_STATE_ESTIMATION_ID_TYPE, + .dlc = CANTX_PACK_STATE_ESTIMATION_DLC, + .endianness = CANTX_PACK_STATE_ESTIMATION_ENDIANNESS, + }; + uint8_t muxId = 0u; + uint8_t canData[CAN_MAX_DLC] = {0u}; + /* ======= AT1/7 ======= */ + testMessage.id = CAN_MAX_11BIT_ID; + TEST_ASSERT_FAIL_ASSERT(CANTX_PackStateEstimation(testMessage, canData, NULL_PTR, &can_kShim)); + testMessage.id = CANTX_PACK_STATE_ESTIMATION_ID; + /* ======= AT2/7 ======= */ + testMessage.idType = CAN_EXTENDED_IDENTIFIER_29_BIT; + TEST_ASSERT_FAIL_ASSERT(CANTX_PackStateEstimation(testMessage, canData, NULL_PTR, &can_kShim)); + testMessage.idType = CAN_STANDARD_IDENTIFIER_11_BIT; + /* ======= AT3/7 ======= */ + testMessage.dlc = 9u; + TEST_ASSERT_FAIL_ASSERT(CANTX_PackStateEstimation(testMessage, canData, NULL_PTR, &can_kShim)); + testMessage.dlc = CANTX_PACK_STATE_ESTIMATION_DLC; + /* ======= AT4/7 ======= */ + testMessage.endianness = CAN_LITTLE_ENDIAN; + TEST_ASSERT_FAIL_ASSERT(CANTX_PackStateEstimation(testMessage, canData, NULL_PTR, &can_kShim)); + testMessage.endianness = CAN_BIG_ENDIAN; + /* ======= AT5/7 ======= */ + TEST_ASSERT_FAIL_ASSERT(CANTX_PackStateEstimation(testMessage, NULL_PTR, NULL_PTR, &can_kShim)); + /* ======= AT6/7 ======= */ + TEST_ASSERT_FAIL_ASSERT(CANTX_PackStateEstimation(testMessage, canData, &muxId, &can_kShim)); + /* ======= AT7/7 ======= */ + TEST_ASSERT_FAIL_ASSERT(CANTX_PackStateEstimation(testMessage, canData, NULL_PTR, NULL_PTR)); + + /* ======= Routine tests =============================================== */ + /* ======= RT1/1: Test implementation */ + BMS_GetNumberOfConnectedStrings_IgnoreAndReturn(0u); + BMS_IsStringClosed_IgnoreAndReturn(false); + CAN_TxPrepareSignalData_Ignore(); + DATA_Read2DataBlocks_ExpectAndReturn(can_kShim.pTableSoc, can_kShim.pTableSoe, STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 10u, testSignalData[0u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 13u, 10u, testSignalData[0u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 19u, 10u, testSignalData[0u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 25u, 10u, testSignalData[0u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 47u, 8u, 100.0f, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 55u, 16u, testSignalData[0u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], canData, testMessage.endianness); + /* ======= RT1/1: Call function under test */ + + uint32_t testResult = CANTX_PackStateEstimation(testMessage, canData, NULL_PTR, &can_kShim); + /* ======= RT1/1: Test output verification */ + TEST_ASSERT_EQUAL(0u, testResult); +} diff --git a/tests/unit/app/driver/can/cbs/tx-cyclic/test_can_cbs_tx_pack-values-p0.c b/tests/unit/app/driver/can/cbs/tx-cyclic/test_can_cbs_tx_pack-values-p0.c new file mode 100644 index 00000000..86d34aff --- /dev/null +++ b/tests/unit/app/driver/can/cbs/tx-cyclic/test_can_cbs_tx_pack-values-p0.c @@ -0,0 +1,356 @@ +/** + * + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * We kindly request you to use one or more of the following phrases to refer to + * foxBMS in your hardware, software, documentation or advertising materials: + * + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" + * + */ + +/** + * @file test_can_cbs_tx_pack-values-p0.c + * @author foxBMS Team + * @date 2021-07-27 (date of creation) + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup UNIT_TEST_IMPLEMENTATION + * @prefix TEST + * + * @brief Tests for the CAN driver callbacks + * + */ + +/*========== Includes =======================================================*/ +#include "unity.h" +#include "Mockcan.h" +#include "Mockcan_helper.h" +#include "Mockdatabase.h" +#include "Mockdiag.h" +#include "Mockfoxmath.h" +#include "Mockimd.h" +#include "Mockos.h" + +#include "database_cfg.h" + +#include "can_cbs_tx_cyclic.h" +#include "can_cfg_tx-cyclic-message-definitions.h" +#include "test_assert_helper.h" + +/*========== Unit Testing Framework Directives ==============================*/ +TEST_SOURCE_FILE("can_cbs_tx_pack-values-p0.c") + +TEST_INCLUDE_PATH("../../src/app/application/bms") +TEST_INCLUDE_PATH("../../src/app/driver/can") +TEST_INCLUDE_PATH("../../src/app/driver/can/cbs") +TEST_INCLUDE_PATH("../../src/app/driver/can/cbs/tx-cyclic") +TEST_INCLUDE_PATH("../../src/app/driver/config") +TEST_INCLUDE_PATH("../../src/app/driver/foxmath") +TEST_INCLUDE_PATH("../../src/app/driver/fram") +TEST_INCLUDE_PATH("../../src/app/driver/imd") +TEST_INCLUDE_PATH("../../src/app/engine/diag") +TEST_INCLUDE_PATH("../../src/app/engine/sys_mon") +TEST_INCLUDE_PATH("../../src/app/task/config") + +/*========== Definitions and Implementations for Unit Test ==================*/ +uint64_t testMessageData[5u] = {0u, 1u, 2u, 3u, 4u}; + +float_t testSignalData[5u] = {0.0f, 1.0f, 2.0f, 3.0f, 4.0f}; + +float_t testBatteryVoltage = 324800; +float_t testBusVoltage = 325100; +float_t testCurrent = -200500; +float_t testPower = -65100; + +static const CAN_SIGNAL_TYPE_s cantx_testSignalBatteryVoltage = {7u, 15u, 100.0f, 0.0f, -1638400.0f, 1638300.0f}; +static const CAN_SIGNAL_TYPE_s cantx_testSignalBusVoltage = {8u, 15u, 100.0f, 0.0f, -1638400.0f, 1638300.0f}; +static const CAN_SIGNAL_TYPE_s cantx_testSignalPower = {25u, 17u, 10.0f, 0.0f, -655360.0f, 655350.0f}; +static const CAN_SIGNAL_TYPE_s cantx_testSignalCurrent = {40u, 17u, 10.0f, 0.0f, -655360.0f, 655350.0f}; + +static DATA_BLOCK_CELL_VOLTAGE_s can_tableCellVoltages = {.header.uniqueId = DATA_BLOCK_ID_CELL_VOLTAGE}; +static DATA_BLOCK_CELL_TEMPERATURE_s can_tableTemperatures = {.header.uniqueId = DATA_BLOCK_ID_CELL_TEMPERATURE}; +static DATA_BLOCK_MIN_MAX_s can_tableMinimumMaximumValues = {.header.uniqueId = DATA_BLOCK_ID_MIN_MAX}; +static DATA_BLOCK_CURRENT_SENSOR_s can_tableCurrentSensor = {.header.uniqueId = DATA_BLOCK_ID_CURRENT_SENSOR}; +static DATA_BLOCK_OPEN_WIRE_s can_tableOpenWire = {.header.uniqueId = DATA_BLOCK_ID_OPEN_WIRE_BASE}; +static DATA_BLOCK_STATE_REQUEST_s can_tableStateRequest = {.header.uniqueId = DATA_BLOCK_ID_STATE_REQUEST}; +static DATA_BLOCK_PACK_VALUES_s can_tablePackValues = {.header.uniqueId = DATA_BLOCK_ID_PACK_VALUES}; +static DATA_BLOCK_SOF_s can_tableSof = {.header.uniqueId = DATA_BLOCK_ID_SOF}; +static DATA_BLOCK_SOC_s can_tableSoc = {.header.uniqueId = DATA_BLOCK_ID_SOC}; +static DATA_BLOCK_SOE_s can_tableSoe = {.header.uniqueId = DATA_BLOCK_ID_SOE}; +static DATA_BLOCK_ERROR_STATE_s can_tableErrorState = {.header.uniqueId = DATA_BLOCK_ID_ERROR_STATE}; +static DATA_BLOCK_INSULATION_MONITORING_s can_tableInsulation = { + .header.uniqueId = DATA_BLOCK_ID_INSULATION_MONITORING}; +static DATA_BLOCK_MSL_FLAG_s can_tableMslFlags = {.header.uniqueId = DATA_BLOCK_ID_MSL_FLAG}; +static DATA_BLOCK_RSL_FLAG_s can_tableRslFlags = {.header.uniqueId = DATA_BLOCK_ID_RSL_FLAG}; +static DATA_BLOCK_MOL_FLAG_s can_tableMolFlags = {.header.uniqueId = DATA_BLOCK_ID_MOL_FLAG}; +static DATA_BLOCK_AEROSOL_SENSOR_s can_tableAerosolSensor = {.header.uniqueId = DATA_BLOCK_ID_AEROSOL_SENSOR}; + +OS_QUEUE imd_canDataQueue = NULL_PTR; + +const CAN_SHIM_s can_kShim = { + .pQueueImd = &imd_canDataQueue, + .pTableCellVoltage = &can_tableCellVoltages, + .pTableCellTemperature = &can_tableTemperatures, + .pTableMinMax = &can_tableMinimumMaximumValues, + .pTableCurrentSensor = &can_tableCurrentSensor, + .pTableOpenWire = &can_tableOpenWire, + .pTableStateRequest = &can_tableStateRequest, + .pTablePackValues = &can_tablePackValues, + .pTableSof = &can_tableSof, + .pTableSoc = &can_tableSoc, + .pTableSoe = &can_tableSoe, + .pTableErrorState = &can_tableErrorState, + .pTableInsulation = &can_tableInsulation, + .pTableMsl = &can_tableMslFlags, + .pTableRsl = &can_tableRslFlags, + .pTableMol = &can_tableMolFlags, + .pTableAerosolSensor = &can_tableAerosolSensor, +}; + +/*========== Setup and Teardown =============================================*/ +void setUp(void) { + can_kShim.pTablePackValues->packCurrent_mA = (int32_t)testCurrent; + can_kShim.pTablePackValues->batteryVoltage_mV = (int32_t)testBatteryVoltage; + can_kShim.pTablePackValues->highVoltageBusVoltage_mV = (int32_t)testBusVoltage; + can_kShim.pTablePackValues->packPower_W = (int32_t)testPower; +} + +void tearDown(void) { +} + +/*========== Test Cases =====================================================*/ +/** + * @brief Testing CANTX_CalculateBatteryVoltage + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/1: NULL_PTR for kpkCanShim -> assert + * - Routine validation: + * - RT1/1: Signal data is prepared as expected + */ +void testCANTX_CalculateBatteryVoltage(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/1 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_CalculateBatteryVoltage(NULL_PTR)); + + /* ======= Routine tests =============================================== */ + /* ======= RT1/1: Test implementation */ + CAN_TxPrepareSignalData_Expect(&testBatteryVoltage, cantx_testSignalBatteryVoltage); + CAN_TxPrepareSignalData_ReturnThruPtr_pSignal(&testSignalData[1u]); + /* ======= RT1/1: Call function under test */ + uint64_t testResult = TEST_CANTX_CalculateBatteryVoltage(&can_kShim); + /* ======= RT1/1: Test output verification */ + TEST_ASSERT_EQUAL(1.0, testResult); +} + +/** + * @brief Testing CANTX_CalculateBusVoltage + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/1: NULL_PTR for kpkCanShim -> assert + * - Routine validation: + * - RT1/1: Signal data is prepared as expected + */ +void testCANTX_CalculateBusVoltage(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/1 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_CalculateBusVoltage(NULL_PTR)); + + /* ======= Routine tests =============================================== */ + /* ======= RT1/1: Test implementation */ + CAN_TxPrepareSignalData_Expect(&testBusVoltage, cantx_testSignalBusVoltage); + CAN_TxPrepareSignalData_ReturnThruPtr_pSignal(&testSignalData[1u]); + /* ======= RT1/1: Call function under test */ + uint64_t testResult = TEST_CANTX_CalculateBusVoltage(&can_kShim); + /* ======= RT1/1: Test output verification */ + TEST_ASSERT_EQUAL(1u, testResult); +} + +/** + * @brief Testing CANTX_CalculatePower + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/1: NULL_PTR for kpkCanShim -> assert + * - Routine validation: + * - RT1/1: Signal data is prepared as expected + */ +void testCANTX_CalculatePower(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/1 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_CalculatePower(NULL_PTR)); + + /* ======= Routine tests =============================================== */ + /* ======= RT1/1: Test implementation */ + CAN_TxPrepareSignalData_Expect(&testPower, cantx_testSignalPower); + CAN_TxPrepareSignalData_ReturnThruPtr_pSignal(&testSignalData[1u]); + /* ======= RT1/1: Call function under test */ + uint64_t testResult = TEST_CANTX_CalculatePower(&can_kShim); + /* ======= RT1/1: Test output verification */ + TEST_ASSERT_EQUAL(1u, testResult); +} + +/** + * @brief Testing CANTX_CalculateCurrent + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/1: NULL_PTR for kpkCanShim -> assert + * - Routine validation: + * - RT1/1: Signal data is prepared as expected + */ +void testCANTX_CalculateCurrent(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/1 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_CalculateCurrent(NULL_PTR)); + + /* ======= Routine tests =============================================== */ + /* ======= RT1/1: Test implementation */ + CAN_TxPrepareSignalData_Expect(&testCurrent, cantx_testSignalCurrent); + CAN_TxPrepareSignalData_ReturnThruPtr_pSignal(&testSignalData[1u]); + /* ======= RT1/1: Call function under test */ + uint64_t testResult = TEST_CANTX_CalculateCurrent(&can_kShim); + /* ======= RT1/1: Test output verification */ + TEST_ASSERT_EQUAL(1u, testResult); +} + +/** + * @brief Testing CANTX_BuildP0Message + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/2: NULL_PTR for kpkCanShim -> assert + * - AT2/2: NULL_PTR for pMessageData -> assert + * - Routine validation: + * - RT1/1: Message data is set as expected + */ +void testCANTX_BuildP0Message(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/2 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_BuildP0Message(NULL_PTR, &testMessageData[0])); + /* ======= AT2/2 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_BuildP0Message(&can_kShim, NULL_PTR)); + + /* ======= Routine tests =============================================== */ + uint64_t testResult = 0u; + /* ======= RT1/1: Test implementation */ + CAN_TxPrepareSignalData_Expect(&testBatteryVoltage, cantx_testSignalBatteryVoltage); + CAN_TxPrepareSignalData_ReturnThruPtr_pSignal(&testSignalData[1u]); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 7u, 15u, testSignalData[1u], CANTX_PACK_VALUES_P0_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxPrepareSignalData_Expect(&testBusVoltage, cantx_testSignalBusVoltage); + CAN_TxPrepareSignalData_ReturnThruPtr_pSignal(&testSignalData[2u]); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[1u], 8u, 15u, testSignalData[2u], CANTX_PACK_VALUES_P0_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[2u]); + CAN_TxPrepareSignalData_Expect(&testPower, cantx_testSignalPower); + CAN_TxPrepareSignalData_ReturnThruPtr_pSignal(&testSignalData[3u]); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[2u], 25u, 17u, testSignalData[3u], CANTX_PACK_VALUES_P0_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[3u]); + CAN_TxPrepareSignalData_Expect(&testCurrent, cantx_testSignalCurrent); + CAN_TxPrepareSignalData_ReturnThruPtr_pSignal(&testSignalData[4u]); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[3u], 40u, 17u, testSignalData[4u], CANTX_PACK_VALUES_P0_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[4u]); + /* ======= RT1/1: Call function under test */ + TEST_CANTX_BuildP0Message(&can_kShim, &testResult); + /* ======= RT1/1: Test output verification */ + TEST_ASSERT_EQUAL(4u, testResult); +} + +/** + * @brief Testing CANTX_PackValuesP0 + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/7: Invalid message id -> assert + * - AT2/7: Invalid message id type -> assert + * - AT3/7: Invalid message dlc size -> assert + * - AT4/7: Invalid message endianness -> assert + * - AT5/7: NULL_PTR for pCanData -> assert + * - AT6/7: NO NULL_PTR for pMuxId -> assert + * - AT7/7: NULL_PTR for kpkCanShim -> assert + * - Routine validation: + * - RT1/1: Message data is set as expected + */ +void testCANTX_PackValuesP0(void) { + /* ======= Assertion tests ============================================= */ + uint8_t testCanData[CAN_MAX_DLC] = {0u}; + uint8_t testMuxId = 0u; + + CAN_MESSAGE_PROPERTIES_s testMessage = { + .id = 0x233, + .idType = CAN_STANDARD_IDENTIFIER_11_BIT, + .dlc = CAN_FOXBMS_MESSAGES_DEFAULT_DLC, + .endianness = CAN_BIG_ENDIAN, + }; + /* ======= AT1/7 ======= */ + testMessage.id = CAN_MAX_11BIT_ID; + TEST_ASSERT_FAIL_ASSERT(CANTX_PackValuesP0(testMessage, testCanData, NULL_PTR, &can_kShim)); + testMessage.id = 0x233; + /* ======= AT2/7 ======= */ + testMessage.idType = CAN_EXTENDED_IDENTIFIER_29_BIT; + TEST_ASSERT_FAIL_ASSERT(CANTX_PackValuesP0(testMessage, testCanData, NULL_PTR, &can_kShim)); + testMessage.idType = CAN_STANDARD_IDENTIFIER_11_BIT; + /* ======= AT3/7 ======= */ + testMessage.dlc = 9u; + TEST_ASSERT_FAIL_ASSERT(CANTX_PackValuesP0(testMessage, testCanData, NULL_PTR, &can_kShim)); + testMessage.dlc = 8u; + /* ======= AT4/7 ======= */ + testMessage.endianness = CAN_LITTLE_ENDIAN; + TEST_ASSERT_FAIL_ASSERT(CANTX_PackValuesP0(testMessage, testCanData, NULL_PTR, &can_kShim)); + testMessage.endianness = CAN_BIG_ENDIAN; + /* ======= AT5/7 ======= */ + TEST_ASSERT_FAIL_ASSERT(CANTX_PackValuesP0(testMessage, NULL_PTR, NULL_PTR, &can_kShim)); + /* ======= AT6/7 ======= */ + TEST_ASSERT_FAIL_ASSERT(CANTX_PackValuesP0(testMessage, testCanData, &testMuxId, &can_kShim)); + /* ======= AT7/7 ======= */ + TEST_ASSERT_FAIL_ASSERT(CANTX_PackValuesP0(testMessage, testCanData, NULL_PTR, NULL_PTR)); + + /* ======= Routine tests =============================================== */ + /* ======= RT1/1: Test implementation */ + CAN_TxPrepareSignalData_Ignore(); + DATA_Read1DataBlock_ExpectAndReturn(can_kShim.pTablePackValues, STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 7u, 15u, can_tablePackValues.batteryVoltage_mV, CANTX_PACK_VALUES_P0_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 8u, 15u, can_tablePackValues.highVoltageBusVoltage_mV, CANTX_PACK_VALUES_P0_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 25u, 17u, can_tablePackValues.packPower_W, CANTX_PACK_VALUES_P0_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 40u, 17u, can_tablePackValues.packCurrent_mA, CANTX_PACK_VALUES_P0_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanData, CAN_BIG_ENDIAN); + /* ======= RT1/1: Call function under test */ + uint64_t testResult = CANTX_PackValuesP0(testMessage, testCanData, NULL_PTR, &can_kShim); + /* ======= RT1/1: Test output verification */ + TEST_ASSERT_EQUAL(0u, testResult); +} diff --git a/tests/unit/app/driver/can/cbs/tx-cyclic/test_can_cbs_tx_pack-values-p1.c b/tests/unit/app/driver/can/cbs/tx-cyclic/test_can_cbs_tx_pack-values-p1.c new file mode 100644 index 00000000..26ffbecb --- /dev/null +++ b/tests/unit/app/driver/can/cbs/tx-cyclic/test_can_cbs_tx_pack-values-p1.c @@ -0,0 +1,254 @@ +/** + * + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * We kindly request you to use one or more of the following phrases to refer to + * foxBMS in your hardware, software, documentation or advertising materials: + * + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" + * + */ + +/** + * @file test_can_cbs_tx_pack-values-p1.c + * @author foxBMS Team + * @date 2023-05-31 (date of creation) + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup UNIT_TEST_IMPLEMENTATION + * @prefix TEST + * + * @brief Tests for the CAN driver callbacks + * + */ + +/*========== Includes =======================================================*/ +#include "unity.h" +#include "Mockcan.h" +#include "Mockcan_helper.h" +#include "Mockdatabase.h" +#include "Mockdiag.h" +#include "Mockfoxmath.h" +#include "Mockimd.h" +#include "Mockos.h" + +#include "database_cfg.h" + +#include "can_cbs_tx_cyclic.h" +#include "can_cfg_tx-cyclic-message-definitions.h" +#include "test_assert_helper.h" + +/*========== Unit Testing Framework Directives ==============================*/ +TEST_SOURCE_FILE("can_cbs_tx_pack-values-p1.c") + +TEST_INCLUDE_PATH("../../src/app/application/bms") +TEST_INCLUDE_PATH("../../src/app/driver/can") +TEST_INCLUDE_PATH("../../src/app/driver/can/cbs") +TEST_INCLUDE_PATH("../../src/app/driver/can/cbs/tx-cyclic") +TEST_INCLUDE_PATH("../../src/app/driver/config") +TEST_INCLUDE_PATH("../../src/app/driver/foxmath") +TEST_INCLUDE_PATH("../../src/app/driver/fram") +TEST_INCLUDE_PATH("../../src/app/driver/imd") +TEST_INCLUDE_PATH("../../src/app/engine/diag") +TEST_INCLUDE_PATH("../../src/app/engine/sys_mon") +TEST_INCLUDE_PATH("../../src/app/task/config") + +/*========== Definitions and Implementations for Unit Test ==================*/ +uint64_t testMessageData[3u] = {0u, 1u, 2u}; + +float_t testSignalData[5u] = {0.0f, 1.0f, 2.0f, 3.0f, 4.0f}; + +float_t testInsulationResistance_kOhm = 1234.0f; + +static const CAN_SIGNAL_TYPE_s cantx_testSignalInsulationResistance = {7u, 13u, 7.0f, 0.0f, 0.0f, 57337.0f}; + +static DATA_BLOCK_CELL_VOLTAGE_s can_tableCellVoltages = {.header.uniqueId = DATA_BLOCK_ID_CELL_VOLTAGE}; +static DATA_BLOCK_CELL_TEMPERATURE_s can_tableTemperatures = {.header.uniqueId = DATA_BLOCK_ID_CELL_TEMPERATURE}; +static DATA_BLOCK_MIN_MAX_s can_tableMinimumMaximumValues = {.header.uniqueId = DATA_BLOCK_ID_MIN_MAX}; +static DATA_BLOCK_CURRENT_SENSOR_s can_tableCurrentSensor = {.header.uniqueId = DATA_BLOCK_ID_CURRENT_SENSOR}; +static DATA_BLOCK_OPEN_WIRE_s can_tableOpenWire = {.header.uniqueId = DATA_BLOCK_ID_OPEN_WIRE_BASE}; +static DATA_BLOCK_STATE_REQUEST_s can_tableStateRequest = {.header.uniqueId = DATA_BLOCK_ID_STATE_REQUEST}; +static DATA_BLOCK_PACK_VALUES_s can_tablePackValues = {.header.uniqueId = DATA_BLOCK_ID_PACK_VALUES}; +static DATA_BLOCK_SOF_s can_tableSof = {.header.uniqueId = DATA_BLOCK_ID_SOF}; +static DATA_BLOCK_SOC_s can_tableSoc = {.header.uniqueId = DATA_BLOCK_ID_SOC}; +static DATA_BLOCK_SOE_s can_tableSoe = {.header.uniqueId = DATA_BLOCK_ID_SOE}; +static DATA_BLOCK_ERROR_STATE_s can_tableErrorState = {.header.uniqueId = DATA_BLOCK_ID_ERROR_STATE}; +static DATA_BLOCK_INSULATION_MONITORING_s can_tableInsulation = { + .header.uniqueId = DATA_BLOCK_ID_INSULATION_MONITORING}; +static DATA_BLOCK_MSL_FLAG_s can_tableMslFlags = {.header.uniqueId = DATA_BLOCK_ID_MSL_FLAG}; +static DATA_BLOCK_RSL_FLAG_s can_tableRslFlags = {.header.uniqueId = DATA_BLOCK_ID_RSL_FLAG}; +static DATA_BLOCK_MOL_FLAG_s can_tableMolFlags = {.header.uniqueId = DATA_BLOCK_ID_MOL_FLAG}; + +OS_QUEUE imd_canDataQueue = NULL_PTR; + +const CAN_SHIM_s can_kShim = { + .pQueueImd = &imd_canDataQueue, + .pTableCellVoltage = &can_tableCellVoltages, + .pTableCellTemperature = &can_tableTemperatures, + .pTableMinMax = &can_tableMinimumMaximumValues, + .pTableCurrentSensor = &can_tableCurrentSensor, + .pTableOpenWire = &can_tableOpenWire, + .pTableStateRequest = &can_tableStateRequest, + .pTablePackValues = &can_tablePackValues, + .pTableSof = &can_tableSof, + .pTableSoc = &can_tableSoc, + .pTableSoe = &can_tableSoe, + .pTableErrorState = &can_tableErrorState, + .pTableInsulation = &can_tableInsulation, + .pTableMsl = &can_tableMslFlags, + .pTableRsl = &can_tableRslFlags, + .pTableMol = &can_tableMolFlags, +}; + +/*========== Setup and Teardown =============================================*/ +void setUp(void) { + can_tableInsulation.insulationResistance_kOhm = (uint32_t)testInsulationResistance_kOhm; +} + +void tearDown(void) { +} + +/*========== Test Cases =====================================================*/ +/** + * @brief Testing CANTX_GetInsulationResistance + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/1: NULL_PTR for kpkCanShim -> assert + * - Routine validation: + * - RT1/1: Signal data is prepared as expected + */ +void testCANTX_GetInsulationResistance(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/1 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_GetInsulationResistance(NULL_PTR)); + + /* ======= Routine tests =============================================== */ + /* ======= RT1/1: Test implementation */ + CAN_TxPrepareSignalData_Expect(&testInsulationResistance_kOhm, cantx_testSignalInsulationResistance); + CAN_TxPrepareSignalData_ReturnThruPtr_pSignal(&testSignalData[1u]); + /* ======= RT1/1: Call function under test */ + uint64_t testResult = TEST_CANTX_GetInsulationResistance(&can_kShim); + /* ======= RT1/1: Test output verification */ + TEST_ASSERT_EQUAL(1u, testResult); +} + +/** + * @brief Testing CANTX_SetInsulationResistance + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/2: NULL_PTR for pMessageData -> assert + * - AT2/2: NULL_PTR for kpkCanShim -> assert + * - Routine validation: + * - RT1/1: Signal data is prepared as expected + */ +void testCANTX_SetInsulationResistance(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/2 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_SetInsulationResistance(NULL_PTR, &can_kShim)); + /* ======= AT2/2 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_SetInsulationResistance(&testMessageData[0u], NULL_PTR)); + + /* ======= Routine tests =============================================== */ + uint64_t testResult = 0u; + /* ======= RT1/1: Test implementation */ + CAN_TxPrepareSignalData_Expect(&testInsulationResistance_kOhm, cantx_testSignalInsulationResistance); + CAN_TxPrepareSignalData_ReturnThruPtr_pSignal(&testSignalData[1u]); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 13u, testSignalData[1u], CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + /* ======= RT1/1: Call function under test */ + TEST_CANTX_SetInsulationResistance(&testResult, &can_kShim); + /* ======= RT1/1: Test output verification */ + TEST_ASSERT_EQUAL(1u, testResult); +} + +/** + * @brief Testing CANTX_PackValuesP1 + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/7: Invalid message id -> assert + * - AT2/7: Invalid message id type -> assert + * - AT3/7: Invalid message dlc size -> assert + * - AT4/7: Invalid message endianness -> assert + * - AT5/7: NULL_PTR for pCanData -> assert + * - AT6/7: NO NULL_PTR for pMuxId -> assert + * - AT7/7: NULL_PTR for kpkCanShim -> assert + * - Routine validation: + * - RT1/1: Message data is set as expected + */ +void testCANTX_PackValuesP1(void) { + /* ======= Assertion tests ============================================= */ + uint8_t testCanData[CAN_MAX_DLC] = {0u}; + uint8_t testMuxId = 0u; + + CAN_MESSAGE_PROPERTIES_s testMessage = { + .id = 0x234, + .idType = CAN_STANDARD_IDENTIFIER_11_BIT, + .dlc = CAN_FOXBMS_MESSAGES_DEFAULT_DLC, + .endianness = CAN_BIG_ENDIAN, + }; + /* ======= AT1/7 ======= */ + testMessage.id = CAN_MAX_11BIT_ID; + TEST_ASSERT_FAIL_ASSERT(CANTX_PackValuesP1(testMessage, testCanData, NULL_PTR, &can_kShim)); + testMessage.id = 0x234; + /* ======= AT2/7 ======= */ + testMessage.idType = CAN_EXTENDED_IDENTIFIER_29_BIT; + TEST_ASSERT_FAIL_ASSERT(CANTX_PackValuesP1(testMessage, testCanData, NULL_PTR, &can_kShim)); + testMessage.idType = CAN_STANDARD_IDENTIFIER_11_BIT; + /* ======= AT3/7 ======= */ + testMessage.dlc = 9u; + TEST_ASSERT_FAIL_ASSERT(CANTX_PackValuesP1(testMessage, testCanData, NULL_PTR, &can_kShim)); + testMessage.dlc = 8u; + /* ======= AT4/7 ======= */ + testMessage.endianness = CAN_LITTLE_ENDIAN; + TEST_ASSERT_FAIL_ASSERT(CANTX_PackValuesP1(testMessage, testCanData, NULL_PTR, &can_kShim)); + testMessage.endianness = CAN_BIG_ENDIAN; + /* ======= AT5/7 ======= */ + TEST_ASSERT_FAIL_ASSERT(CANTX_PackValuesP1(testMessage, NULL_PTR, NULL_PTR, &can_kShim)); + /* ======= AT6/7 ======= */ + TEST_ASSERT_FAIL_ASSERT(CANTX_PackValuesP1(testMessage, testCanData, &testMuxId, &can_kShim)); + /* ======= AT7/7 ======= */ + TEST_ASSERT_FAIL_ASSERT(CANTX_PackValuesP1(testMessage, testCanData, NULL_PTR, NULL_PTR)); + + /* ======= Routine tests =============================================== */ + /* ======= RT1/1: Test implementation */ + CAN_TxPrepareSignalData_Ignore(); + DATA_Read1DataBlock_ExpectAndReturn(can_kShim.pTableInsulation, STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[0u], 7u, 13u, testInsulationResistance_kOhm, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanData, CAN_BIG_ENDIAN); + /* ======= RT1/1: Call function under test */ + uint64_t testResult = CANTX_PackValuesP1(testMessage, testCanData, NULL_PTR, &can_kShim); + /* ======= RT1/1: Test output verification */ + TEST_ASSERT_EQUAL(0u, testResult); +} diff --git a/tests/unit/app/driver/can/cbs/tx-cyclic/test_can_cbs_tx_string-minimum-maximum-values.c b/tests/unit/app/driver/can/cbs/tx-cyclic/test_can_cbs_tx_string-minimum-maximum-values.c new file mode 100644 index 00000000..ad9f58eb --- /dev/null +++ b/tests/unit/app/driver/can/cbs/tx-cyclic/test_can_cbs_tx_string-minimum-maximum-values.c @@ -0,0 +1,383 @@ +/** + * + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * We kindly request you to use one or more of the following phrases to refer to + * foxBMS in your hardware, software, documentation or advertising materials: + * + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" + * + */ + +/** + * @file test_can_cbs_tx_string-minimum-maximum-values.c + * @author foxBMS Team + * @date 2021-04-22 (date of creation) + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup UNIT_TEST_IMPLEMENTATION + * @prefix TEST + * + * @brief Tests for the CAN driver callbacks + * + */ + +/*========== Includes =======================================================*/ +#include "unity.h" +#include "Mockbms.h" +#include "Mockcan.h" +#include "Mockcan_helper.h" +#include "Mockdatabase.h" +#include "Mockdiag.h" +#include "Mockfoxmath.h" +#include "Mockimd.h" +#include "Mockos.h" + +#include "database_cfg.h" + +#include "can_cbs_tx_cyclic.h" +#include "can_cfg_tx-cyclic-message-definitions.h" +#include "test_assert_helper.h" + +/*========== Unit Testing Framework Directives ==============================*/ +TEST_SOURCE_FILE("can_cbs_tx_string-minimum-maximum-values.c") + +TEST_INCLUDE_PATH("../../src/app/application/bms") +TEST_INCLUDE_PATH("../../src/app/driver/can") +TEST_INCLUDE_PATH("../../src/app/driver/can/cbs") +TEST_INCLUDE_PATH("../../src/app/driver/can/cbs/tx-cyclic") +TEST_INCLUDE_PATH("../../src/app/driver/config") +TEST_INCLUDE_PATH("../../src/app/driver/contactor") +TEST_INCLUDE_PATH("../../src/app/driver/foxmath") +TEST_INCLUDE_PATH("../../src/app/driver/fram") +TEST_INCLUDE_PATH("../../src/app/driver/imd") +TEST_INCLUDE_PATH("../../src/app/driver/sps") +TEST_INCLUDE_PATH("../../src/app/engine/diag") +TEST_INCLUDE_PATH("../../src/app/engine/sys_mon") +TEST_INCLUDE_PATH("../../src/app/task/config") + +/*========== Definitions and Implementations for Unit Test ==================*/ +uint64_t testMessageData[6u] = {0u, 1u, 2u, 3u, 4u, 5u}; + +float_t testSignalData[5u] = {0.0f, 1.0f, 2.0f, 3.0f, 4.0f}; + +float_t testMinimumCellVoltage0 = 5775u; +float_t testMaximumCellVoltage0 = 12345u; +float_t testMinimumTemperature0 = 5u; +float_t testMaximumTemperature0 = 500u; + +float_t testMinimumCellVoltage1 = 4554u; +float_t testMaximumCellVoltage1 = 13531u; +float_t testMinimumTemperature1 = 50u; +float_t testMaximumTemperature1 = 550u; + +static const CAN_SIGNAL_TYPE_s cantx_testSignalMaximumTemperature = {35u, 9u, 5.0f, 0.0f, -1280.0f, 1275.0f}; + +static const CAN_SIGNAL_TYPE_s cantx_testSignalMinimumTemperature = {42u, 9u, 5.0f, 0.0f, -1280.0f, 1275.0f}; + +static DATA_BLOCK_CELL_VOLTAGE_s can_tableCellVoltages = {.header.uniqueId = DATA_BLOCK_ID_CELL_VOLTAGE}; +static DATA_BLOCK_CELL_TEMPERATURE_s can_tableTemperatures = {.header.uniqueId = DATA_BLOCK_ID_CELL_TEMPERATURE}; +static DATA_BLOCK_MIN_MAX_s can_tableMinimumMaximumValues = {.header.uniqueId = DATA_BLOCK_ID_MIN_MAX}; +static DATA_BLOCK_CURRENT_SENSOR_s can_tableCurrentSensor = {.header.uniqueId = DATA_BLOCK_ID_CURRENT_SENSOR}; +static DATA_BLOCK_OPEN_WIRE_s can_tableOpenWire = {.header.uniqueId = DATA_BLOCK_ID_OPEN_WIRE_BASE}; +static DATA_BLOCK_STATE_REQUEST_s can_tableStateRequest = {.header.uniqueId = DATA_BLOCK_ID_STATE_REQUEST}; +static DATA_BLOCK_PACK_VALUES_s can_tablePackValues = {.header.uniqueId = DATA_BLOCK_ID_PACK_VALUES}; +static DATA_BLOCK_SOF_s can_tableSof = {.header.uniqueId = DATA_BLOCK_ID_SOF}; +static DATA_BLOCK_SOC_s can_tableSoc = {.header.uniqueId = DATA_BLOCK_ID_SOC}; +static DATA_BLOCK_SOE_s can_tableSoe = {.header.uniqueId = DATA_BLOCK_ID_SOE}; +static DATA_BLOCK_ERROR_STATE_s can_tableErrorState = {.header.uniqueId = DATA_BLOCK_ID_ERROR_STATE}; +static DATA_BLOCK_INSULATION_MONITORING_s can_tableInsulation = { + .header.uniqueId = DATA_BLOCK_ID_INSULATION_MONITORING}; +static DATA_BLOCK_MSL_FLAG_s can_tableMslFlags = {.header.uniqueId = DATA_BLOCK_ID_MSL_FLAG}; +static DATA_BLOCK_RSL_FLAG_s can_tableRslFlags = {.header.uniqueId = DATA_BLOCK_ID_RSL_FLAG}; +static DATA_BLOCK_MOL_FLAG_s can_tableMolFlags = {.header.uniqueId = DATA_BLOCK_ID_MOL_FLAG}; + +OS_QUEUE imd_canDataQueue = NULL_PTR; + +const CAN_SHIM_s can_kShim = { + .pQueueImd = &imd_canDataQueue, + .pTableCellVoltage = &can_tableCellVoltages, + .pTableCellTemperature = &can_tableTemperatures, + .pTableMinMax = &can_tableMinimumMaximumValues, + .pTableCurrentSensor = &can_tableCurrentSensor, + .pTableOpenWire = &can_tableOpenWire, + .pTableStateRequest = &can_tableStateRequest, + .pTablePackValues = &can_tablePackValues, + .pTableSof = &can_tableSof, + .pTableSoc = &can_tableSoc, + .pTableSoe = &can_tableSoe, + .pTableErrorState = &can_tableErrorState, + .pTableInsulation = &can_tableInsulation, + .pTableMsl = &can_tableMslFlags, + .pTableRsl = &can_tableRslFlags, + .pTableMol = &can_tableMolFlags, +}; + +/*========== Setup and Teardown =============================================*/ +void setUp(void) { + can_tableMinimumMaximumValues.minimumCellVoltage_mV[0u] = (int16_t)testMinimumCellVoltage0; + can_tableMinimumMaximumValues.maximumCellVoltage_mV[0u] = (int16_t)testMaximumCellVoltage0; + can_tableMinimumMaximumValues.minimumTemperature_ddegC[0u] = (int16_t)testMinimumTemperature0; + can_tableMinimumMaximumValues.maximumTemperature_ddegC[0u] = (int16_t)testMaximumTemperature0; + + can_tableMinimumMaximumValues.minimumCellVoltage_mV[1u] = (int16_t)testMinimumCellVoltage1; + can_tableMinimumMaximumValues.maximumCellVoltage_mV[1u] = (int16_t)testMaximumCellVoltage1; + can_tableMinimumMaximumValues.minimumTemperature_ddegC[1u] = (int16_t)testMinimumTemperature1; + can_tableMinimumMaximumValues.maximumTemperature_ddegC[1u] = (int16_t)testMaximumTemperature1; +} + +void tearDown(void) { +} + +/*========== Test Cases =====================================================*/ +/** + * @brief Testing CANTX_CalculateStringMaximumTemperature + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/2: BS_NR_OF_STRINGS for stringNumber -> assert + * - AT2/2: NULL_PTR for kpkCanShim -> assert + * - Routine validation: + * - RT1/2: Signal data is prepared as expected for string 0 + * - RT2/2: Signal data is prepared as expected for string 1 + */ +void testCANTX_CalculateStringMaximumTemperature(void) { + /* ======= Assertion tests ============================================= */ + uint8_t testStringNumber = 0u; + /* ======= AT1/2 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_CalculateStringMaximumTemperature(BS_NR_OF_STRINGS, &can_kShim)); + /* ======= AT2/2 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_CalculateStringMaximumTemperature(testStringNumber, NULL_PTR)); + + /* ======= Routine tests =============================================== */ + /* ======= RT1/2: Test implementation */ + CAN_TxPrepareSignalData_Expect(&testMaximumTemperature0, cantx_testSignalMaximumTemperature); + CAN_TxPrepareSignalData_ReturnThruPtr_pSignal(&testSignalData[1u]); + /* ======= RT1/2: Call function under test */ + uint64_t testResult = TEST_CANTX_CalculateStringMaximumTemperature(testStringNumber, &can_kShim); + /* ======= RT1/2: Test output verification */ + TEST_ASSERT_EQUAL(1u, testResult); + + /* ======= RT2/2: Test implementation */ + testStringNumber = 1u; + CAN_TxPrepareSignalData_Expect(&testMaximumTemperature1, cantx_testSignalMaximumTemperature); + CAN_TxPrepareSignalData_ReturnThruPtr_pSignal(&testSignalData[1u]); + /* ======= RT2/2: Call function under test */ + testResult = TEST_CANTX_CalculateStringMaximumTemperature(testStringNumber, &can_kShim); + /* ======= RT2/2: Test output verification */ + TEST_ASSERT_EQUAL(1u, testResult); +} + +/** + * @brief Testing CANTX_CalculateStringMinimumTemperature + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/2: BS_NR_OF_STRINGS for stringNumber -> assert + * - AT2/2: NULL_PTR for kpkCanShim -> assert + * - Routine validation: + * - RT1/2: Signal data is prepared as expected for string 0 + * - RT2/2: Signal data is prepared as expected for string 1 + */ +void testCANTX_CalculateStringMinimumTemperature(void) { + /* ======= Assertion tests ============================================= */ + uint8_t testStringNumber = 0u; + /* ======= AT1/2 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_CalculateStringMinimumTemperature(BS_NR_OF_STRINGS, &can_kShim)); + /* ======= AT2/2 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_CalculateStringMinimumTemperature(testStringNumber, NULL_PTR)); + + /* ======= Routine tests =============================================== */ + /* ======= RT1/2: Test implementation */ + CAN_TxPrepareSignalData_Expect(&testMinimumTemperature0, cantx_testSignalMinimumTemperature); + CAN_TxPrepareSignalData_ReturnThruPtr_pSignal(&testSignalData[1u]); + /* ======= RT1/2: Call function under test */ + uint64_t testResult = TEST_CANTX_CalculateStringMinimumTemperature(testStringNumber, &can_kShim); + /* ======= RT1/2: Test output verification */ + TEST_ASSERT_EQUAL(1u, testResult); + + /* ======= RT2/2: Test implementation */ + testStringNumber = 1u; + CAN_TxPrepareSignalData_Expect(&testMinimumTemperature1, cantx_testSignalMinimumTemperature); + CAN_TxPrepareSignalData_ReturnThruPtr_pSignal(&testSignalData[1u]); + /* ======= RT2/2: Call function under test */ + testResult = TEST_CANTX_CalculateStringMinimumTemperature(testStringNumber, &can_kShim); + /* ======= RT2/2: Test output verification */ + TEST_ASSERT_EQUAL(1u, testResult); +} + +/** + * @brief Testing CANTX_BuildStringMessage + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/3: NULL_PTR for pMessageData -> assert + * - AT2/3: BS_NR_OF_STRINGS for stringNumber -> assert + * - AT3/3: NULL_PTR for kpkCanShim -> assert + * - Routine validation: + * - RT1/1: Signal data is prepared as expected for string 0 + * - RT1/1: Signal data is prepared as expected for string 1 + */ +void testCANTX_BuildStringMessage(void) { + /* ======= Assertion tests ============================================= */ + uint8_t testStringNumber = 0u; + /* ======= AT1/3 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_BuildStringMessage(NULL_PTR, testStringNumber, &can_kShim)); + /* ======= AT2/3 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_BuildStringMessage(&testMessageData[0u], BS_NR_OF_STRINGS, &can_kShim)); + /* ======= AT3/3 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_BuildStringMessage(&testMessageData[0u], testStringNumber, NULL_PTR)); + + /* ======= Routine tests =============================================== */ + uint64_t testResult = 0u; + /* ======= RT1/2: Test implementation */ + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 3u, 4u, 0u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[1u], 15u, 14u, testMaximumCellVoltage0, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[2u]); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[2u], 17u, 14u, testMinimumCellVoltage0, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[3u]); + CAN_TxPrepareSignalData_Expect(&testMaximumTemperature0, cantx_testSignalMaximumTemperature); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[3u], 35u, 9u, testMaximumTemperature0, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[4u]); + CAN_TxPrepareSignalData_Expect(&testMinimumTemperature0, cantx_testSignalMinimumTemperature); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[4u], 42u, 9u, testMinimumTemperature0, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[5u]); + /* ======= RT1/2: Call function under test */ + TEST_CANTX_BuildStringMessage(&testResult, testStringNumber, &can_kShim); + /* ======= RT1/2: Test output verification */ + TEST_ASSERT_EQUAL(5u, testResult); + + testResult = 0u; + /* ======= RT2/2: Test implementation */ + testStringNumber = 1u; + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 3u, 4u, 1u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[1u], 15u, 14u, testMaximumCellVoltage1, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[2u]); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[2u], 17u, 14u, testMinimumCellVoltage1, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[3u]); + CAN_TxPrepareSignalData_Expect(&testMaximumTemperature1, cantx_testSignalMaximumTemperature); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[3u], 35u, 9u, testMaximumTemperature1, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[4u]); + CAN_TxPrepareSignalData_Expect(&testMinimumTemperature1, cantx_testSignalMinimumTemperature); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[4u], 42u, 9u, testMinimumTemperature1, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[5u]); + /* ======= RT2/2: Call function under test */ + TEST_CANTX_BuildStringMessage(&testResult, testStringNumber, &can_kShim); + /* ======= RT2/2: Test output verification */ + TEST_ASSERT_EQUAL(5u, testResult); +} + +/** + * @brief Testing CANTX_StringMinimumMaximumValues + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/8: Invalid message id -> assert + * - AT2/8: Invalid message id type -> assert + * - AT3/8: Invalid message dlc size -> assert + * - AT4/8: Invalid message endianness -> assert + * - AT5/8: NULL_PTR for pCanData -> assert + * - AT6/8: NULL_PTR for pMuxId -> assert + * - AT7/8: &BS_NR_OF_STRINGS for pMuxId -> assert + * - AT8/8: NULL_PTR for kpkCanShim -> assert + * - Routine validation: + * - RT1/2: Message data is set as expected for string 0 + * - RT2/2: Message data is set as expected for string 1 + */ +void testCANTX_StringMinimumMaximumValues(void) { + /* ======= Assertion tests ============================================= */ + uint8_t testCanData[CAN_MAX_DLC] = {0u}; + uint8_t testMuxId = 0u; + + CAN_MESSAGE_PROPERTIES_s testMessage = { + .id = 0x241, + .idType = CAN_STANDARD_IDENTIFIER_11_BIT, + .dlc = CAN_FOXBMS_MESSAGES_DEFAULT_DLC, + .endianness = CAN_BIG_ENDIAN, + }; + /* ======= AT1/8 ======= */ + testMessage.id = CAN_MAX_11BIT_ID; + TEST_ASSERT_FAIL_ASSERT(CANTX_StringMinimumMaximumValues(testMessage, testCanData, &testMuxId, &can_kShim)); + testMessage.id = 0x241; + /* ======= AT2/8 ======= */ + testMessage.idType = CAN_EXTENDED_IDENTIFIER_29_BIT; + TEST_ASSERT_FAIL_ASSERT(CANTX_StringMinimumMaximumValues(testMessage, testCanData, &testMuxId, &can_kShim)); + testMessage.idType = CAN_STANDARD_IDENTIFIER_11_BIT; + /* ======= AT3/8 ======= */ + testMessage.dlc = 9u; + TEST_ASSERT_FAIL_ASSERT(CANTX_StringMinimumMaximumValues(testMessage, testCanData, &testMuxId, &can_kShim)); + testMessage.dlc = 8u; + /* ======= AT4/8 ======= */ + testMessage.endianness = CAN_LITTLE_ENDIAN; + TEST_ASSERT_FAIL_ASSERT(CANTX_StringMinimumMaximumValues(testMessage, testCanData, &testMuxId, &can_kShim)); + testMessage.endianness = CAN_BIG_ENDIAN; + /* ======= AT5/8 ======= */ + TEST_ASSERT_FAIL_ASSERT(CANTX_StringMinimumMaximumValues(testMessage, NULL_PTR, &testMuxId, &can_kShim)); + /* ======= AT6/8 ======= */ + TEST_ASSERT_FAIL_ASSERT(CANTX_StringMinimumMaximumValues(testMessage, testCanData, NULL_PTR, &can_kShim)); + /* ======= AT7/8 ======= */ + testMuxId = BS_NR_OF_STRINGS; + TEST_ASSERT_FAIL_ASSERT(CANTX_StringMinimumMaximumValues(testMessage, testCanData, &testMuxId, &can_kShim)); + testMuxId = 0u; + /* ======= AT8/8 ======= */ + TEST_ASSERT_FAIL_ASSERT(CANTX_StringMinimumMaximumValues(testMessage, testCanData, &testMuxId, NULL_PTR)); + + /* ======= Routine tests =============================================== */ + /* ======= RT1/2: Test implementation */ + CAN_TxPrepareSignalData_Ignore(); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 3u, 4u, 0u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 15u, 14u, testMaximumCellVoltage0, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 17u, 14u, testMinimumCellVoltage0, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 35u, 9u, testMaximumTemperature0, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 42u, 9u, testMinimumTemperature0, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanData, CAN_BIG_ENDIAN); + /* ======= RT1/2: Call function under test */ + uint64_t testResult = CANTX_StringMinimumMaximumValues(testMessage, testCanData, &testMuxId, &can_kShim); + /* ======= RT1/2: Test output verification */ + TEST_ASSERT_EQUAL(0u, testResult); + + /* ======= RT2/2: Test implementation */ + testMuxId = 1u; + CAN_TxPrepareSignalData_Ignore(); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 3u, 4u, 1u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 15u, 14u, testMaximumCellVoltage1, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 17u, 14u, testMinimumCellVoltage1, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 35u, 9u, testMaximumTemperature1, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 42u, 9u, testMinimumTemperature1, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanData, CAN_BIG_ENDIAN); + /* ======= RT2/2: Call function under test */ + testResult = CANTX_StringMinimumMaximumValues(testMessage, testCanData, &testMuxId, &can_kShim); + /* ======= RT2/2: Test output verification */ + TEST_ASSERT_EQUAL(0u, testResult); + TEST_ASSERT_EQUAL(0u, testMuxId); +} diff --git a/tests/unit/app/driver/can/cbs/tx-cyclic/test_can_cbs_tx_string-state-estimation.c b/tests/unit/app/driver/can/cbs/tx-cyclic/test_can_cbs_tx_string-state-estimation.c new file mode 100644 index 00000000..d038c580 --- /dev/null +++ b/tests/unit/app/driver/can/cbs/tx-cyclic/test_can_cbs_tx_string-state-estimation.c @@ -0,0 +1,563 @@ +/** + * + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * We kindly request you to use one or more of the following phrases to refer to + * foxBMS in your hardware, software, documentation or advertising materials: + * + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" + * + */ + +/** + * @file test_can_cbs_tx_string-state-estimation.c + * @author foxBMS Team + * @date 2021-07-27 (date of creation) + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup UNIT_TEST_IMPLEMENTATION + * @prefix TEST + * + * @brief Tests for the CAN driver callbacks + * + */ + +/*========== Includes =======================================================*/ +#include "unity.h" +#include "Mockbms.h" +#include "Mockcan.h" +#include "Mockcan_helper.h" +#include "Mockdatabase.h" +#include "Mockdiag.h" +#include "Mockfoxmath.h" +#include "Mockimd.h" +#include "Mockos.h" + +#include "database_cfg.h" + +#include "can_cbs_tx_cyclic.h" +#include "can_cfg_tx-cyclic-message-definitions.h" +#include "test_assert_helper.h" + +/*========== Unit Testing Framework Directives ==============================*/ +TEST_SOURCE_FILE("can_cbs_tx_string-state-estimation.c") + +TEST_INCLUDE_PATH("../../src/app/application/bms") +TEST_INCLUDE_PATH("../../src/app/driver/can") +TEST_INCLUDE_PATH("../../src/app/driver/can/cbs") +TEST_INCLUDE_PATH("../../src/app/driver/can/cbs/tx-cyclic") +TEST_INCLUDE_PATH("../../src/app/driver/config") +TEST_INCLUDE_PATH("../../src/app/driver/contactor") +TEST_INCLUDE_PATH("../../src/app/driver/foxmath") +TEST_INCLUDE_PATH("../../src/app/driver/fram") +TEST_INCLUDE_PATH("../../src/app/driver/imd") +TEST_INCLUDE_PATH("../../src/app/driver/sps") +TEST_INCLUDE_PATH("../../src/app/engine/diag") +TEST_INCLUDE_PATH("../../src/app/engine/sys_mon") +TEST_INCLUDE_PATH("../../src/app/task/config") + +/*========== Definitions and Implementations for Unit Test ==================*/ +uint64_t testMessageData[8u] = {0u, 1u, 2u, 3u, 4u, 5u, 6u, 7u}; + +float_t testSignalData[5u] = {0.0f, 1.0f, 2.0f, 3.0f, 4.0f}; + +float_t testSoh = 100.0f; + +float_t testMinimumSoc0 = 15; +float_t testMaximumSoc0 = 95; +float_t testMinimumSoe0 = 10; +float_t testMaximumSoe0 = 90; +float_t testMinimumSoeEnergy0 = 12300.0f; + +float_t testMinimumSoc1 = 10; +float_t testMaximumSoc1 = 90; +float_t testMinimumSoe1 = 15; +float_t testMaximumSoe1 = 95; +float_t testMinimumSoeEnergy1 = 45600.0f; + +static const CAN_SIGNAL_TYPE_s cantx_testSignalMinimumSoc = {3u, 9u, 0.2f, 0.0f, 0.0f, 100.0f}; +static const CAN_SIGNAL_TYPE_s cantx_testSignalMaximumSoc = {10u, 9u, 0.2f, 0.0f, 0.0f, 100.0f}; +static const CAN_SIGNAL_TYPE_s cantx_testSignalMinimumSoe = {17u, 9u, 0.2f, 0.0f, 0.0f, 100.0f}; +static const CAN_SIGNAL_TYPE_s cantx_testSignalMaximumSoe = {24u, 9u, 0.2f, 0.0f, 0.0f, 100.0f}; +static const CAN_SIGNAL_TYPE_s cantx_testSignalSoh = {47u, 9u, 0.2f, 0.0f, 0.0f, 100.0f}; +static const CAN_SIGNAL_TYPE_s cantx_testSignalMinimumSoeEnergy = {54u, 15u, 10.0f, 0.0f, 0.0f, 327670.0f}; + +static DATA_BLOCK_CELL_VOLTAGE_s can_tableCellVoltages = {.header.uniqueId = DATA_BLOCK_ID_CELL_VOLTAGE}; +static DATA_BLOCK_CELL_TEMPERATURE_s can_tableTemperatures = {.header.uniqueId = DATA_BLOCK_ID_CELL_TEMPERATURE}; +static DATA_BLOCK_MIN_MAX_s can_tableMinimumMaximumValues = {.header.uniqueId = DATA_BLOCK_ID_MIN_MAX}; +static DATA_BLOCK_CURRENT_SENSOR_s can_tableCurrentSensor = {.header.uniqueId = DATA_BLOCK_ID_CURRENT_SENSOR}; +static DATA_BLOCK_OPEN_WIRE_s can_tableOpenWire = {.header.uniqueId = DATA_BLOCK_ID_OPEN_WIRE_BASE}; +static DATA_BLOCK_STATE_REQUEST_s can_tableStateRequest = {.header.uniqueId = DATA_BLOCK_ID_STATE_REQUEST}; +static DATA_BLOCK_PACK_VALUES_s can_tablePackValues = {.header.uniqueId = DATA_BLOCK_ID_PACK_VALUES}; +static DATA_BLOCK_SOF_s can_tableSof = {.header.uniqueId = DATA_BLOCK_ID_SOF}; +static DATA_BLOCK_SOC_s can_tableSoc = {.header.uniqueId = DATA_BLOCK_ID_SOC}; +static DATA_BLOCK_SOE_s can_tableSoe = {.header.uniqueId = DATA_BLOCK_ID_SOE}; +static DATA_BLOCK_ERROR_STATE_s can_tableErrorState = {.header.uniqueId = DATA_BLOCK_ID_ERROR_STATE}; +static DATA_BLOCK_INSULATION_MONITORING_s can_tableInsulation = { + .header.uniqueId = DATA_BLOCK_ID_INSULATION_MONITORING}; +static DATA_BLOCK_MSL_FLAG_s can_tableMslFlags = {.header.uniqueId = DATA_BLOCK_ID_MSL_FLAG}; +static DATA_BLOCK_RSL_FLAG_s can_tableRslFlags = {.header.uniqueId = DATA_BLOCK_ID_RSL_FLAG}; +static DATA_BLOCK_MOL_FLAG_s can_tableMolFlags = {.header.uniqueId = DATA_BLOCK_ID_MOL_FLAG}; +static DATA_BLOCK_AEROSOL_SENSOR_s can_tableAerosolSensor = {.header.uniqueId = DATA_BLOCK_ID_AEROSOL_SENSOR}; + +OS_QUEUE imd_canDataQueue = NULL_PTR; + +const CAN_SHIM_s can_kShim = { + .pQueueImd = &imd_canDataQueue, + .pTableCellVoltage = &can_tableCellVoltages, + .pTableCellTemperature = &can_tableTemperatures, + .pTableMinMax = &can_tableMinimumMaximumValues, + .pTableCurrentSensor = &can_tableCurrentSensor, + .pTableOpenWire = &can_tableOpenWire, + .pTableStateRequest = &can_tableStateRequest, + .pTablePackValues = &can_tablePackValues, + .pTableSof = &can_tableSof, + .pTableSoc = &can_tableSoc, + .pTableSoe = &can_tableSoe, + .pTableErrorState = &can_tableErrorState, + .pTableInsulation = &can_tableInsulation, + .pTableMsl = &can_tableMslFlags, + .pTableRsl = &can_tableRslFlags, + .pTableMol = &can_tableMolFlags, + .pTableAerosolSensor = &can_tableAerosolSensor, +}; + +/*========== Setup and Teardown =============================================*/ +void setUp(void) { + can_tableSoc.minimumSoc_perc[0u] = testMinimumSoc0; + can_tableSoc.maximumSoc_perc[0u] = testMaximumSoc0; + can_tableSoe.minimumSoe_perc[0u] = testMinimumSoe0; + can_tableSoe.maximumSoe_perc[0u] = testMaximumSoe0; + can_tableSoe.minimumSoe_Wh[0u] = (uint32_t)testMinimumSoeEnergy0; + + can_tableSoc.minimumSoc_perc[1u] = testMinimumSoc1; + can_tableSoc.maximumSoc_perc[1u] = testMaximumSoc1; + can_tableSoe.minimumSoe_perc[1u] = testMinimumSoe1; + can_tableSoe.maximumSoe_perc[1u] = testMaximumSoe1; + can_tableSoe.minimumSoe_Wh[1u] = (uint32_t)testMinimumSoeEnergy1; +} + +void tearDown(void) { +} + +/*========== Test Cases =====================================================*/ +/** + * @brief Testing CANTX_CalculateMinimumStringSoc + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/2: BS_NR_OF_STRINGS for stringNumber -> assert + * - AT2/2: NULL_PTR for kpkCanShim -> assert + * - Routine validation: + * - RT1/2: Signal data is prepared as expected for string 0 + * - RT2/2: Signal data is prepared as expected for string 1 + */ +void testCANTX_CalculateMinimumStringSoc(void) { + /* ======= Assertion tests ============================================= */ + uint8_t testStringNumber = 0u; + /* ======= AT1/2 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_CalculateMinimumStringSoc(BS_NR_OF_STRINGS, &can_kShim)); + /* ======= AT2/2 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_CalculateMinimumStringSoc(testStringNumber, NULL_PTR)); + + /* ======= Routine tests =============================================== */ + /* ======= RT1/2: Test implementation */ + CAN_TxPrepareSignalData_Expect(&testMinimumSoc0, cantx_testSignalMinimumSoc); + CAN_TxPrepareSignalData_ReturnThruPtr_pSignal(&testSignalData[1u]); + /* ======= RT1/2: Call function under test */ + uint64_t testResult = TEST_CANTX_CalculateMinimumStringSoc(testStringNumber, &can_kShim); + /* ======= RT1/2: Test output verification */ + TEST_ASSERT_EQUAL(1u, testResult); + + /* ======= RT2/2: Test implementation */ + testStringNumber = 1u; + CAN_TxPrepareSignalData_Expect(&testMinimumSoc1, cantx_testSignalMinimumSoc); + CAN_TxPrepareSignalData_ReturnThruPtr_pSignal(&testSignalData[1u]); + /* ======= RT2/2: Call function under test */ + testResult = TEST_CANTX_CalculateMinimumStringSoc(testStringNumber, &can_kShim); + /* ======= RT2/2: Test output verification */ + TEST_ASSERT_EQUAL(1u, testResult); +} + +/** + * @brief Testing CANTX_CalculateMaximumStringSoc + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/2: BS_NR_OF_STRINGS for stringNumber -> assert + * - AT2/2: NULL_PTR for kpkCanShim -> assert + * - Routine validation: + * - RT1/2: Signal data is prepared as expected for string 0 + * - RT2/2: Signal data is prepared as expected for string 1 + */ +void testCANTX_CalculateMaximumStringSoc(void) { + /* ======= Assertion tests ============================================= */ + uint8_t testStringNumber = 0u; + /* ======= AT1/2 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_CalculateMaximumStringSoc(BS_NR_OF_STRINGS, &can_kShim)); + /* ======= AT2/2 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_CalculateMaximumStringSoc(testStringNumber, NULL_PTR)); + + /* ======= Routine tests =============================================== */ + /* ======= RT1/2: Test implementation */ + CAN_TxPrepareSignalData_Expect(&testMaximumSoc0, cantx_testSignalMaximumSoc); + CAN_TxPrepareSignalData_ReturnThruPtr_pSignal(&testSignalData[1u]); + /* ======= RT1/2: Call function under test */ + uint64_t testResult = TEST_CANTX_CalculateMaximumStringSoc(testStringNumber, &can_kShim); + /* ======= RT1/2: Test output verification */ + TEST_ASSERT_EQUAL(1u, testResult); + + /* ======= RT2/2: Test implementation */ + testStringNumber = 1u; + CAN_TxPrepareSignalData_Expect(&testMaximumSoc1, cantx_testSignalMaximumSoc); + CAN_TxPrepareSignalData_ReturnThruPtr_pSignal(&testSignalData[1u]); + /* ======= RT2/2: Call function under test */ + testResult = TEST_CANTX_CalculateMaximumStringSoc(testStringNumber, &can_kShim); + /* ======= RT2/2: Test output verification */ + TEST_ASSERT_EQUAL(1u, testResult); +} + +/** + * @brief Testing CANTX_CalculateMinimumStringSoe + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/2: BS_NR_OF_STRINGS for stringNumber -> assert + * - AT2/2: NULL_PTR for kpkCanShim -> assert + * - Routine validation: + * - RT1/2: Signal data is prepared as expected for string 0 + * - RT2/2: Signal data is prepared as expected for string 1 + */ +void testCANTX_CalculateMinimumStringSoe(void) { + /* ======= Assertion tests ============================================= */ + uint8_t testStringNumber = 0u; + /* ======= AT1/2 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_CalculateMinimumStringSoe(BS_NR_OF_STRINGS, &can_kShim)); + /* ======= AT2/2 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_CalculateMinimumStringSoe(testStringNumber, NULL_PTR)); + + /* ======= Routine tests =============================================== */ + /* ======= RT1/2: Test implementation */ + CAN_TxPrepareSignalData_Expect(&testMinimumSoe0, cantx_testSignalMinimumSoe); + CAN_TxPrepareSignalData_ReturnThruPtr_pSignal(&testSignalData[1u]); + /* ======= RT1/2: Call function under test */ + uint64_t testResult = TEST_CANTX_CalculateMinimumStringSoe(testStringNumber, &can_kShim); + /* ======= RT1/2: Test output verification */ + TEST_ASSERT_EQUAL(1u, testResult); + + /* ======= RT2/2: Test implementation */ + testStringNumber = 1u; + CAN_TxPrepareSignalData_Expect(&testMinimumSoe1, cantx_testSignalMinimumSoe); + CAN_TxPrepareSignalData_ReturnThruPtr_pSignal(&testSignalData[1u]); + /* ======= RT2/2: Call function under test */ + testResult = TEST_CANTX_CalculateMinimumStringSoe(testStringNumber, &can_kShim); + /* ======= RT2/2: Test output verification */ + TEST_ASSERT_EQUAL(1u, testResult); +} + +/** + * @brief Testing CANTX_CalculateMaximumStringSoe + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/2: BS_NR_OF_STRINGS for stringNumber -> assert + * - AT2/2: NULL_PTR for kpkCanShim -> assert + * - Routine validation: + * - RT1/2: Signal data is prepared as expected for string 0 + * - RT2/2: Signal data is prepared as expected for string 1 + */ +void testCANTX_CalculateMaximumStringSoe(void) { + /* ======= Assertion tests ============================================= */ + uint8_t testStringNumber = 0u; + /* ======= AT1/2 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_CalculateMaximumStringSoe(BS_NR_OF_STRINGS, &can_kShim)); + /* ======= AT2/2 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_CalculateMaximumStringSoe(testStringNumber, NULL_PTR)); + + /* ======= Routine tests =============================================== */ + /* ======= RT1/2: Test implementation */ + CAN_TxPrepareSignalData_Expect(&testMaximumSoe0, cantx_testSignalMaximumSoe); + CAN_TxPrepareSignalData_ReturnThruPtr_pSignal(&testSignalData[1u]); + /* ======= RT1/2: Call function under test */ + uint64_t testResult = TEST_CANTX_CalculateMaximumStringSoe(testStringNumber, &can_kShim); + /* ======= RT1/2: Test output verification */ + TEST_ASSERT_EQUAL(1u, testResult); + + /* ======= RT2/2: Test implementation */ + testStringNumber = 1u; + CAN_TxPrepareSignalData_Expect(&testMaximumSoe1, cantx_testSignalMaximumSoe); + CAN_TxPrepareSignalData_ReturnThruPtr_pSignal(&testSignalData[1u]); + /* ======= RT2/2: Call function under test */ + testResult = TEST_CANTX_CalculateMaximumStringSoe(testStringNumber, &can_kShim); + /* ======= RT2/2: Test output verification */ + TEST_ASSERT_EQUAL(1u, testResult); +} + +/** + * @brief Testing CANTX_CalculateStringSoh + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/2: BS_NR_OF_STRINGS for stringNumber -> assert + * - AT2/2: NULL_PTR for kpkCanShim -> assert + * - Routine validation: + * - RT1/2: Signal data is prepared as expected for string 0 + * - RT2/2: Signal data is prepared as expected for string 1 + */ +void testCANTX_CalculateStringSoh(void) { + /* ======= Assertion tests ============================================= */ + uint8_t testStringNumber = 0u; + /* ======= AT1/2 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_CalculateStringSoh(BS_NR_OF_STRINGS, &can_kShim)); + /* ======= AT2/2 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_CalculateStringSoh(testStringNumber, NULL_PTR)); + + /* ======= Routine tests =============================================== */ + /* ======= RT1/2: Test implementation */ + CAN_TxPrepareSignalData_Expect(&testSoh, cantx_testSignalSoh); + CAN_TxPrepareSignalData_ReturnThruPtr_pSignal(&testSignalData[1u]); + /* ======= RT1/2: Call function under test */ + uint64_t testResult = TEST_CANTX_CalculateStringSoh(testStringNumber, &can_kShim); + /* ======= RT1/2: Test output verification */ + TEST_ASSERT_EQUAL(1u, testResult); + + /* ======= RT2/2: Test implementation */ + testStringNumber = 1u; + CAN_TxPrepareSignalData_Expect(&testSoh, cantx_testSignalSoh); + CAN_TxPrepareSignalData_ReturnThruPtr_pSignal(&testSignalData[1u]); + /* ======= RT2/2: Call function under test */ + testResult = TEST_CANTX_CalculateStringSoh(testStringNumber, &can_kShim); + /* ======= RT2/2: Test output verification */ + TEST_ASSERT_EQUAL(1u, testResult); +} + +/** + * @brief Testing CANTX_CalculateStringEnergy + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/2: BS_NR_OF_STRINGS for stringNumber -> assert + * - AT2/2: NULL_PTR for kpkCanShim -> assert + * - Routine validation: + * - RT1/2: Signal data is prepared as expected for string 0 + * - RT2/2: Signal data is prepared as expected for string 1 + */ +void testCANTX_CalculateStringEnergy(void) { + /* ======= Assertion tests ============================================= */ + uint8_t testStringNumber = 0u; + /* ======= AT1/2 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_CalculateStringEnergy(BS_NR_OF_STRINGS, &can_kShim)); + /* ======= AT2/2 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_CalculateStringEnergy(testStringNumber, NULL_PTR)); + + /* ======= Routine tests =============================================== */ + /* ======= RT1/2: Test implementation */ + CAN_TxPrepareSignalData_Expect(&testMinimumSoeEnergy0, cantx_testSignalMinimumSoeEnergy); + CAN_TxPrepareSignalData_ReturnThruPtr_pSignal(&testSignalData[1u]); + /* ======= RT1/2: Call function under test */ + uint64_t testResult = TEST_CANTX_CalculateStringEnergy(testStringNumber, &can_kShim); + /* ======= RT1/2: Test output verification */ + TEST_ASSERT_EQUAL(1u, testResult); + + /* ======= RT2/2: Test implementation */ + testStringNumber = 1u; + CAN_TxPrepareSignalData_Expect(&testMinimumSoeEnergy1, cantx_testSignalMinimumSoeEnergy); + CAN_TxPrepareSignalData_ReturnThruPtr_pSignal(&testSignalData[1u]); + /* ======= RT2/2: Call function under test */ + testResult = TEST_CANTX_CalculateStringEnergy(testStringNumber, &can_kShim); + /* ======= RT2/2: Test output verification */ + TEST_ASSERT_EQUAL(1u, testResult); +} + +/** + * @brief Testing CANTX_BuildStringStateEstimationMessage + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/3: NULL_PTR for pMessageData -> assert + * - AT2/3: BS_NR_OF_STRINGS for stringNumber -> assert + * - AT3/3: NULL_PTR for kpkCanShim -> assert + * - Routine validation: + * - RT1/1: Signal data is prepared as expected for string 0 + * - RT1/1: Signal data is prepared as expected for string 1 + */ +void testCANTX_BuildStringStateEstimationMessage(void) { + /* ======= Assertion tests ============================================= */ + uint8_t testStringNumber = 0u; + /* ======= AT1/3 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_BuildStringStateEstimationMessage(NULL_PTR, testStringNumber, &can_kShim)); + /* ======= AT2/3 ======= */ + TEST_ASSERT_FAIL_ASSERT( + TEST_CANTX_BuildStringStateEstimationMessage(&testMessageData[0u], BS_NR_OF_STRINGS, &can_kShim)); + /* ======= AT3/3 ======= */ + TEST_ASSERT_FAIL_ASSERT( + TEST_CANTX_BuildStringStateEstimationMessage(&testMessageData[0u], testStringNumber, NULL_PTR)); + + /* ======= Routine tests =============================================== */ + uint64_t testResult = 0u; + /* ======= RT1/2: Test implementation */ + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 4u, 0u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxPrepareSignalData_Expect(&testMinimumSoc0, cantx_testSignalMinimumSoc); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[1u], 3u, 9u, testMinimumSoc0, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[2u]); + CAN_TxPrepareSignalData_Expect(&testMaximumSoc0, cantx_testSignalMaximumSoc); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[2u], 10u, 9u, testMaximumSoc0, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[3u]); + CAN_TxPrepareSignalData_Expect(&testMinimumSoe0, cantx_testSignalMinimumSoe); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[3u], 17u, 9u, testMinimumSoe0, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[4u]); + CAN_TxPrepareSignalData_Expect(&testMaximumSoe0, cantx_testSignalMaximumSoe); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[4u], 24u, 9u, testMaximumSoe0, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[5u]); + CAN_TxPrepareSignalData_Expect(&testSoh, cantx_testSignalSoh); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[5u], 47, 9u, testSoh, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[6u]); + CAN_TxPrepareSignalData_Expect(&testMinimumSoeEnergy0, cantx_testSignalMinimumSoeEnergy); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[6u], 54, 15u, testMinimumSoeEnergy0, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[7u]); + /* ======= RT1/2: Call function under test */ + TEST_CANTX_BuildStringStateEstimationMessage(&testResult, testStringNumber, &can_kShim); + /* ======= RT1/2: Test output verification */ + TEST_ASSERT_EQUAL(7u, testResult); + + testResult = 0u; + /* ======= RT1/2: Test implementation */ + testStringNumber = 1u; + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 4u, 1u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxPrepareSignalData_Expect(&testMinimumSoc1, cantx_testSignalMinimumSoc); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[1u], 3u, 9u, testMinimumSoc1, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[2u]); + CAN_TxPrepareSignalData_Expect(&testMaximumSoc1, cantx_testSignalMaximumSoc); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[2u], 10u, 9u, testMaximumSoc1, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[3u]); + CAN_TxPrepareSignalData_Expect(&testMinimumSoe1, cantx_testSignalMinimumSoe); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[3u], 17u, 9u, testMinimumSoe1, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[4u]); + CAN_TxPrepareSignalData_Expect(&testMaximumSoe1, cantx_testSignalMaximumSoe); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[4u], 24u, 9u, testMaximumSoe1, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[5u]); + CAN_TxPrepareSignalData_Expect(&testSoh, cantx_testSignalSoh); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[5u], 47, 9u, testSoh, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[6u]); + CAN_TxPrepareSignalData_Expect(&testMinimumSoeEnergy1, cantx_testSignalMinimumSoeEnergy); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[6u], 54, 15u, testMinimumSoeEnergy1, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[7u]); + /* ======= RT1/2: Call function under test */ + TEST_CANTX_BuildStringStateEstimationMessage(&testResult, testStringNumber, &can_kShim); + /* ======= RT1/2: Test output verification */ + TEST_ASSERT_EQUAL(7u, testResult); +} + +/** + * @brief Testing CANTX_StringStateEstimation + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/8: Invalid message id -> assert + * - AT2/8: Invalid message id type -> assert + * - AT3/8: Invalid message dlc size -> assert + * - AT4/8: Invalid message endianness -> assert + * - AT5/8: NULL_PTR for pCanData -> assert + * - AT6/8: NULL_PTR for pMuxId -> assert + * - AT6/8: NULL_PTR for pMuxId -> assert + * - AT8/8: NULL_PTR for kpkCanShim -> assert + * - Routine validation: + * - RT1/2: Message data is set as expected for string 0 + * - RT2/2: Message data is set as expected for string 1 + */ +void testCANTX_StringStateEstimation(void) { + /* ======= Assertion tests ============================================= */ + uint8_t testCanData[CAN_MAX_DLC] = {0u}; + uint8_t testMuxId = 0u; + + CAN_MESSAGE_PROPERTIES_s testMessage = { + .id = 0x245, + .idType = CAN_STANDARD_IDENTIFIER_11_BIT, + .dlc = CAN_FOXBMS_MESSAGES_DEFAULT_DLC, + .endianness = CAN_BIG_ENDIAN, + }; + /* ======= AT1/8 ======= */ + testMessage.id = CAN_MAX_11BIT_ID; + TEST_ASSERT_FAIL_ASSERT(CANTX_StringStateEstimation(testMessage, testCanData, &testMuxId, &can_kShim)); + testMessage.id = 0x245; + /* ======= AT2/8 ======= */ + testMessage.idType = CAN_EXTENDED_IDENTIFIER_29_BIT; + TEST_ASSERT_FAIL_ASSERT(CANTX_StringStateEstimation(testMessage, testCanData, &testMuxId, &can_kShim)); + testMessage.idType = CAN_STANDARD_IDENTIFIER_11_BIT; + /* ======= AT3/8 ======= */ + testMessage.dlc = 9u; + TEST_ASSERT_FAIL_ASSERT(CANTX_StringStateEstimation(testMessage, testCanData, &testMuxId, &can_kShim)); + testMessage.dlc = 8u; + /* ======= AT4/8 ======= */ + testMessage.endianness = CAN_LITTLE_ENDIAN; + TEST_ASSERT_FAIL_ASSERT(CANTX_StringStateEstimation(testMessage, testCanData, &testMuxId, &can_kShim)); + testMessage.endianness = CAN_BIG_ENDIAN; + /* ======= AT5/8 ======= */ + TEST_ASSERT_FAIL_ASSERT(CANTX_StringStateEstimation(testMessage, NULL_PTR, &testMuxId, &can_kShim)); + /* ======= AT6/8 ======= */ + TEST_ASSERT_FAIL_ASSERT(CANTX_StringStateEstimation(testMessage, testCanData, NULL_PTR, &can_kShim)); + /* ======= AT6/8 ======= */ + testMuxId = BS_NR_OF_STRINGS; + TEST_ASSERT_FAIL_ASSERT(CANTX_StringStateEstimation(testMessage, testCanData, &testMuxId, &can_kShim)); + testMuxId = 0u; + /* ======= AT8/8 ======= */ + TEST_ASSERT_FAIL_ASSERT(CANTX_StringStateEstimation(testMessage, testCanData, &testMuxId, NULL_PTR)); + + /* ======= Routine tests =============================================== */ + /* ======= RT1/2: Test implementation */ + CAN_TxPrepareSignalData_Ignore(); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 4u, 0u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 3u, 9u, testMinimumSoc0, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 10u, 9u, testMaximumSoc0, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 17u, 9u, testMinimumSoe0, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 24u, 9u, testMaximumSoe0, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 47, 9u, testSoh, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 54, 15u, testMinimumSoeEnergy0, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanData, CAN_BIG_ENDIAN); + /* ======= RT1/2: Call function under test */ + uint64_t testResult = CANTX_StringStateEstimation(testMessage, testCanData, &testMuxId, &can_kShim); + /* ======= RT1/2: Test output verification */ + TEST_ASSERT_EQUAL(0u, testResult); + + /* ======= RT2/2: Test implementation */ + testMuxId = 1u; + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 4u, 1u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 3u, 9u, testMinimumSoc1, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 10u, 9u, testMaximumSoc1, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 17u, 9u, testMinimumSoe1, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 24u, 9u, testMaximumSoe1, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 47, 9u, testSoh, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 54, 15u, testMinimumSoeEnergy1, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanData, CAN_BIG_ENDIAN); + /* ======= RT2/2: Call function under test */ + testResult = CANTX_StringStateEstimation(testMessage, testCanData, &testMuxId, &can_kShim); + /* ======= RT2/2: Test output verification */ + TEST_ASSERT_EQUAL(0u, testResult); + TEST_ASSERT_EQUAL(0u, testMuxId); +} diff --git a/tests/unit/app/driver/can/cbs/tx-cyclic/test_can_cbs_tx_string-state.c b/tests/unit/app/driver/can/cbs/tx-cyclic/test_can_cbs_tx_string-state.c new file mode 100644 index 00000000..6d92d31d --- /dev/null +++ b/tests/unit/app/driver/can/cbs/tx-cyclic/test_can_cbs_tx_string-state.c @@ -0,0 +1,291 @@ +/** + * + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * We kindly request you to use one or more of the following phrases to refer to + * foxBMS in your hardware, software, documentation or advertising materials: + * + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" + * + */ + +/** + * @file test_can_cbs_tx_string-state.c + * @author foxBMS Team + * @date 2023-05-31 (date of creation) + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup UNIT_TEST_IMPLEMENTATION + * @prefix TEST + * + * @brief Tests for the CAN driver callbacks + * + */ + +/*========== Includes =======================================================*/ +#include "unity.h" +#include "Mockbms.h" +#include "Mockcan.h" +#include "Mockdatabase.h" +#include "Mockdiag.h" +#include "Mockfoxmath.h" +#include "Mockimd.h" +#include "Mockos.h" +#include "Mocksys_mon.h" + +#include "database_cfg.h" + +#include "can_cbs_tx_cyclic.h" +#include "can_cfg_tx-cyclic-message-definitions.h" +#include "can_helper.h" + +/*========== Unit Testing Framework Directives ==============================*/ +TEST_SOURCE_FILE("can_cbs_tx_string-state.c") + +TEST_INCLUDE_PATH("../../src/app/application/bms") +TEST_INCLUDE_PATH("../../src/app/driver/can") +TEST_INCLUDE_PATH("../../src/app/driver/can/cbs") +TEST_INCLUDE_PATH("../../src/app/driver/can/cbs/tx-cyclic") +TEST_INCLUDE_PATH("../../src/app/driver/config") +TEST_INCLUDE_PATH("../../src/app/driver/contactor") +TEST_INCLUDE_PATH("../../src/app/driver/foxmath") +TEST_INCLUDE_PATH("../../src/app/driver/fram") +TEST_INCLUDE_PATH("../../src/app/driver/imd") +TEST_INCLUDE_PATH("../../src/app/driver/sps") +TEST_INCLUDE_PATH("../../src/app/engine/diag") +TEST_INCLUDE_PATH("../../src/app/engine/sys_mon") +TEST_INCLUDE_PATH("../../src/app/task/config") + +/*========== Definitions and Implementations for Unit Test ==================*/ + +static DATA_BLOCK_CELL_VOLTAGE_s can_tableCellVoltages = {.header.uniqueId = DATA_BLOCK_ID_CELL_VOLTAGE}; +static DATA_BLOCK_CELL_TEMPERATURE_s can_tableTemperatures = {.header.uniqueId = DATA_BLOCK_ID_CELL_TEMPERATURE}; +static DATA_BLOCK_MIN_MAX_s can_tableMinimumMaximumValues = {.header.uniqueId = DATA_BLOCK_ID_MIN_MAX}; +static DATA_BLOCK_CURRENT_SENSOR_s can_tableCurrentSensor = {.header.uniqueId = DATA_BLOCK_ID_CURRENT_SENSOR}; +static DATA_BLOCK_OPEN_WIRE_s can_tableOpenWire = {.header.uniqueId = DATA_BLOCK_ID_OPEN_WIRE_BASE}; +static DATA_BLOCK_STATE_REQUEST_s can_tableStateRequest = {.header.uniqueId = DATA_BLOCK_ID_STATE_REQUEST}; +static DATA_BLOCK_PACK_VALUES_s can_tablePackValues = {.header.uniqueId = DATA_BLOCK_ID_PACK_VALUES}; +static DATA_BLOCK_SOF_s can_tableSof = {.header.uniqueId = DATA_BLOCK_ID_SOF}; +static DATA_BLOCK_SOC_s can_tableSoc = {.header.uniqueId = DATA_BLOCK_ID_SOC}; +static DATA_BLOCK_SOE_s can_tableSoe = {.header.uniqueId = DATA_BLOCK_ID_SOE}; +static DATA_BLOCK_ERROR_STATE_s can_tableErrorState = {.header.uniqueId = DATA_BLOCK_ID_ERROR_STATE}; +static DATA_BLOCK_INSULATION_MONITORING_s can_tableInsulation = { + .header.uniqueId = DATA_BLOCK_ID_INSULATION_MONITORING}; +static DATA_BLOCK_MSL_FLAG_s can_tableMslFlags = {.header.uniqueId = DATA_BLOCK_ID_MSL_FLAG}; +static DATA_BLOCK_RSL_FLAG_s can_tableRslFlags = {.header.uniqueId = DATA_BLOCK_ID_RSL_FLAG}; +static DATA_BLOCK_MOL_FLAG_s can_tableMolFlags = {.header.uniqueId = DATA_BLOCK_ID_MOL_FLAG}; + +OS_QUEUE imd_canDataQueue = NULL_PTR; + +const CAN_SHIM_s can_kShim = { + .pQueueImd = &imd_canDataQueue, + .pTableCellVoltage = &can_tableCellVoltages, + .pTableCellTemperature = &can_tableTemperatures, + .pTableMinMax = &can_tableMinimumMaximumValues, + .pTableCurrentSensor = &can_tableCurrentSensor, + .pTableOpenWire = &can_tableOpenWire, + .pTableStateRequest = &can_tableStateRequest, + .pTablePackValues = &can_tablePackValues, + .pTableSof = &can_tableSof, + .pTableSoc = &can_tableSoc, + .pTableSoe = &can_tableSoe, + .pTableErrorState = &can_tableErrorState, + .pTableInsulation = &can_tableInsulation, + .pTableMsl = &can_tableMslFlags, + .pTableRsl = &can_tableRslFlags, + .pTableMol = &can_tableMolFlags, +}; + +/*========== Setup and Teardown =============================================*/ +void setUp(void) { +} + +void tearDown(void) { +} + +/*========== Test Cases =====================================================*/ +void test_CANTX_StringState(void) { + CAN_MESSAGE_PROPERTIES_s testMessage = { + .id = CANTX_STRING_STATE_ID, + .idType = CANTX_STRING_STATE_ID_TYPE, + .dlc = CANTX_STRING_STATE_DLC, + .endianness = CANTX_STRING_STATE_ENDIANNESS, + }; + uint8_t testCanData[CANTX_STRING_STATE_DLC] = {0u}; + + /* configure data tables */ + /* String 0 */ + can_tableErrorState.stringFuseError[0u] = true; + can_tableErrorState.deepDischargeDetectedError[0u] = 0u; + + can_tableMslFlags.overtemperatureCharge[0u] = 1u; + can_tableMslFlags.undertemperatureCharge[0u] = 0u; + can_tableMslFlags.overtemperatureDischarge[0u] = 1u; + can_tableMslFlags.undertemperatureDischarge[0u] = 0u; + can_tableMslFlags.cellChargeOvercurrent[0u] = 1u; + can_tableMslFlags.stringChargeOvercurrent[0u] = 0u; + can_tableMslFlags.cellDischargeOvercurrent[0u] = 1u; + can_tableMslFlags.stringDischargeOvercurrent[0u] = 0u; + can_tableMslFlags.overVoltage[0u] = 1u; + can_tableMslFlags.underVoltage[0u] = 0u; + + can_tableMolFlags.overtemperatureCharge[0u] = 1u; + can_tableMolFlags.undertemperatureCharge[0u] = 0u; + can_tableMolFlags.overtemperatureDischarge[0u] = 1u; + can_tableMolFlags.undertemperatureDischarge[0u] = 0u; + can_tableMolFlags.cellChargeOvercurrent[0u] = 1u; + can_tableMolFlags.stringChargeOvercurrent[0u] = 0u; + can_tableMolFlags.cellDischargeOvercurrent[0u] = 1u; + can_tableMolFlags.stringDischargeOvercurrent[0u] = 0u; + can_tableMolFlags.overVoltage[0u] = 1u; + can_tableMolFlags.underVoltage[0u] = 0u; + + can_tableRslFlags.overtemperatureCharge[0u] = 1u; + can_tableRslFlags.undertemperatureCharge[0u] = 0u; + can_tableRslFlags.overtemperatureDischarge[0u] = 1u; + can_tableRslFlags.undertemperatureDischarge[0u] = 0u; + can_tableRslFlags.cellChargeOvercurrent[0u] = 1u; + can_tableRslFlags.stringChargeOvercurrent[0u] = 0u; + can_tableRslFlags.cellDischargeOvercurrent[0u] = 1u; + can_tableRslFlags.stringDischargeOvercurrent[0u] = 0u; + can_tableRslFlags.overVoltage[0u] = 1u; + can_tableRslFlags.underVoltage[0u] = 0u; + + can_tableErrorState.contactorInPositivePathOfStringFeedbackError[0u] = true; + can_tableErrorState.contactorInNegativePathOfStringFeedbackError[0u] = false; + can_tableErrorState.afeCommunicationSpiError[0u] = true; + can_tableErrorState.afeCommunicationCrcError[0u] = false; + can_tableErrorState.afeCellVoltageInvalidError[0u] = true; + can_tableErrorState.afeCellTemperatureInvalidError[0u] = false; + can_tableErrorState.currentMeasurementInvalidError[0u] = 1u; + can_tableErrorState.currentMeasurementTimeoutError[0u] = 0u; + can_tableErrorState.currentSensorCoulombCounterTimeoutError[0u] = true; + can_tableErrorState.currentSensorEnergyCounterTimeoutError[0u] = false; + can_tableErrorState.currentSensorVoltage1TimeoutError[0u] = true; + can_tableErrorState.currentSensorVoltage2TimeoutError[0u] = false; + can_tableErrorState.currentSensorVoltage3TimeoutError[0u] = true; + can_tableErrorState.openWireDetectedError[0u] = false; + + can_tableErrorState.plausibilityCheckCellTemperatureError[0u] = true; + can_tableErrorState.plausibilityCheckCellVoltageError[0u] = false; + can_tableErrorState.plausibilityCheckPackVoltageError[0u] = true; + can_tableErrorState.plausibilityCheckCellTemperatureSpreadError[0u] = false; + can_tableErrorState.plausibilityCheckCellVoltageSpreadError[0u] = true; + + /* String 1 */ + can_tableErrorState.stringFuseError[1u] = false; + can_tableErrorState.deepDischargeDetectedError[1u] = 1u; + + can_tableMslFlags.overtemperatureCharge[1u] = 0u; + can_tableMslFlags.undertemperatureCharge[1u] = 1u; + can_tableMslFlags.overtemperatureDischarge[1u] = 0u; + can_tableMslFlags.undertemperatureDischarge[1u] = 1u; + can_tableMslFlags.cellChargeOvercurrent[1u] = 0u; + can_tableMslFlags.stringChargeOvercurrent[1u] = 1u; + can_tableMslFlags.cellDischargeOvercurrent[1u] = 0u; + can_tableMslFlags.stringDischargeOvercurrent[1u] = 1u; + can_tableMslFlags.overVoltage[1u] = 0u; + can_tableMslFlags.underVoltage[1u] = 1u; + + can_tableMolFlags.overtemperatureCharge[1u] = 0u; + can_tableMolFlags.undertemperatureCharge[1u] = 1u; + can_tableMolFlags.overtemperatureDischarge[1u] = 0u; + can_tableMolFlags.undertemperatureDischarge[1u] = 1u; + can_tableMolFlags.cellChargeOvercurrent[1u] = 0u; + can_tableMolFlags.stringChargeOvercurrent[1u] = 1u; + can_tableMolFlags.cellDischargeOvercurrent[1u] = 0u; + can_tableMolFlags.stringDischargeOvercurrent[1u] = 1u; + can_tableMolFlags.overVoltage[1u] = 0u; + can_tableMolFlags.underVoltage[1u] = 1u; + + can_tableRslFlags.overtemperatureCharge[1u] = 0u; + can_tableRslFlags.undertemperatureCharge[1u] = 1u; + can_tableRslFlags.overtemperatureDischarge[1u] = 0u; + can_tableRslFlags.undertemperatureDischarge[1u] = 1u; + can_tableRslFlags.cellChargeOvercurrent[1u] = 0u; + can_tableRslFlags.stringChargeOvercurrent[1u] = 1u; + can_tableRslFlags.cellDischargeOvercurrent[1u] = 0u; + can_tableRslFlags.stringDischargeOvercurrent[1u] = 1u; + can_tableRslFlags.overVoltage[1u] = 0u; + can_tableRslFlags.underVoltage[1u] = 1u; + + can_tableErrorState.contactorInPositivePathOfStringFeedbackError[1u] = false; + can_tableErrorState.contactorInNegativePathOfStringFeedbackError[1u] = true; + can_tableErrorState.afeCommunicationSpiError[1u] = false; + can_tableErrorState.afeCommunicationCrcError[1u] = true; + can_tableErrorState.afeCellVoltageInvalidError[1u] = false; + can_tableErrorState.afeCellTemperatureInvalidError[1u] = true; + can_tableErrorState.currentMeasurementInvalidError[1u] = 0u; + can_tableErrorState.currentMeasurementTimeoutError[1u] = 1u; + can_tableErrorState.currentSensorCoulombCounterTimeoutError[1u] = false; + can_tableErrorState.currentSensorEnergyCounterTimeoutError[1u] = true; + can_tableErrorState.currentSensorVoltage1TimeoutError[1u] = false; + can_tableErrorState.currentSensorVoltage2TimeoutError[1u] = true; + can_tableErrorState.currentSensorVoltage3TimeoutError[1u] = false; + can_tableErrorState.openWireDetectedError[1u] = true; + + can_tableErrorState.plausibilityCheckCellTemperatureError[1u] = false; + can_tableErrorState.plausibilityCheckCellVoltageError[1u] = true; + can_tableErrorState.plausibilityCheckPackVoltageError[1u] = false; + can_tableErrorState.plausibilityCheckCellTemperatureSpreadError[1u] = true; + can_tableErrorState.plausibilityCheckCellVoltageSpreadError[1u] = false; + + /* test string 0 */ + uint8_t muxId = 0u; + DATA_Read2DataBlocks_ExpectAndReturn(can_kShim.pTableRsl, can_kShim.pTableMol, STD_OK); + BMS_IsStringClosed_ExpectAndReturn(0u, true); + CANTX_StringState(testMessage, testCanData, &muxId, &can_kShim); + + TEST_ASSERT_EQUAL(0x50u, testCanData[CAN_BYTE_0_POSITION]); + TEST_ASSERT_EQUAL(0x75u, testCanData[CAN_BYTE_1_POSITION]); + TEST_ASSERT_EQUAL(0x75u, testCanData[CAN_BYTE_2_POSITION]); + TEST_ASSERT_EQUAL(0x75u, testCanData[CAN_BYTE_3_POSITION]); + TEST_ASSERT_EQUAL(0x89u, testCanData[CAN_BYTE_4_POSITION]); + TEST_ASSERT_EQUAL(0x58u, testCanData[CAN_BYTE_5_POSITION]); + TEST_ASSERT_EQUAL(0xA9u, testCanData[CAN_BYTE_6_POSITION]); + TEST_ASSERT_EQUAL(0x00u, testCanData[CAN_BYTE_7_POSITION]); + + /* test string 1 */ + muxId = 1u; + BMS_IsStringClosed_ExpectAndReturn(1u, false); + CANTX_StringState(testMessage, testCanData, &muxId, &can_kShim); + + TEST_ASSERT_EQUAL(0x81u, testCanData[CAN_BYTE_0_POSITION]); + TEST_ASSERT_EQUAL(0xBAu, testCanData[CAN_BYTE_1_POSITION]); + TEST_ASSERT_EQUAL(0xBAu, testCanData[CAN_BYTE_2_POSITION]); + TEST_ASSERT_EQUAL(0xBAu, testCanData[CAN_BYTE_3_POSITION]); + TEST_ASSERT_EQUAL(0x22u, testCanData[CAN_BYTE_4_POSITION]); + TEST_ASSERT_EQUAL(0xAAu, testCanData[CAN_BYTE_5_POSITION]); + TEST_ASSERT_EQUAL(0x52u, testCanData[CAN_BYTE_6_POSITION]); + TEST_ASSERT_EQUAL(0x00u, testCanData[CAN_BYTE_7_POSITION]); +} diff --git a/tests/unit/app/driver/can/cbs/tx-cyclic/test_can_cbs_tx_string-values-p0.c b/tests/unit/app/driver/can/cbs/tx-cyclic/test_can_cbs_tx_string-values-p0.c new file mode 100644 index 00000000..f9651ad4 --- /dev/null +++ b/tests/unit/app/driver/can/cbs/tx-cyclic/test_can_cbs_tx_string-values-p0.c @@ -0,0 +1,410 @@ +/** + * + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * We kindly request you to use one or more of the following phrases to refer to + * foxBMS in your hardware, software, documentation or advertising materials: + * + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" + * + */ + +/** + * @file test_can_cbs_tx_string-values-p0.c + * @author foxBMS Team + * @date 2023-05-31 (date of creation) + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup UNIT_TEST_IMPLEMENTATION + * @prefix TEST + * + * @brief Tests for the CAN driver callbacks + * + */ + +/*========== Includes =======================================================*/ +#include "unity.h" +#include "Mockcan.h" +#include "Mockcan_helper.h" +#include "Mockdatabase.h" +#include "Mockdiag.h" +#include "Mockfoxmath.h" +#include "Mockimd.h" +#include "Mockos.h" + +#include "database_cfg.h" + +#include "can_cbs_tx_cyclic.h" +#include "can_cfg_tx-cyclic-message-definitions.h" +#include "test_assert_helper.h" + +/*========== Unit Testing Framework Directives ==============================*/ +TEST_SOURCE_FILE("can_cbs_tx_string-values-p0.c") + +TEST_INCLUDE_PATH("../../src/app/application/bms") +TEST_INCLUDE_PATH("../../src/app/driver/can") +TEST_INCLUDE_PATH("../../src/app/driver/can/cbs") +TEST_INCLUDE_PATH("../../src/app/driver/can/cbs/tx-cyclic") +TEST_INCLUDE_PATH("../../src/app/driver/config") +TEST_INCLUDE_PATH("../../src/app/driver/foxmath") +TEST_INCLUDE_PATH("../../src/app/driver/fram") +TEST_INCLUDE_PATH("../../src/app/driver/imd") +TEST_INCLUDE_PATH("../../src/app/engine/diag") +TEST_INCLUDE_PATH("../../src/app/engine/sys_mon") +TEST_INCLUDE_PATH("../../src/app/task/config") + +/*========== Definitions and Implementations for Unit Test ==================*/ +uint64_t testMessageData[5u] = {0u, 1u, 2u, 3u, 4u}; + +float_t testSignalData[5u] = {0.0f, 1.0f, 2.0f, 3.0f, 4.0f}; + +float_t testStringVoltage0 = 400000; +float_t testStringCurrent0 = -123450; +float_t testStringPower0 = 98760; + +float_t testStringVoltage1 = 399990; +float_t testStringCurrent1 = 123450; +float_t testStringPower1 = 97680; + +static const CAN_SIGNAL_TYPE_s cantx_testSignalStringVoltage = {4u, 18u, 10.0f, 0.0f, -1310720.0f, 1310710.0f}; +static const CAN_SIGNAL_TYPE_s cantx_testSignalStringCurrent = {18u, 18u, 10.0f, 0.0f, -1310720.0f, 1310710.0f}; +static const CAN_SIGNAL_TYPE_s cantx_testSignalStringPower = {32u, 18u, 10.0f, 0.0f, -1310720.0f, 1310710.0f}; + +static DATA_BLOCK_CELL_VOLTAGE_s can_tableCellVoltages = {.header.uniqueId = DATA_BLOCK_ID_CELL_VOLTAGE}; +static DATA_BLOCK_CELL_TEMPERATURE_s can_tableTemperatures = {.header.uniqueId = DATA_BLOCK_ID_CELL_TEMPERATURE}; +static DATA_BLOCK_MIN_MAX_s can_tableMinimumMaximumValues = {.header.uniqueId = DATA_BLOCK_ID_MIN_MAX}; +static DATA_BLOCK_CURRENT_SENSOR_s can_tableCurrentSensor = {.header.uniqueId = DATA_BLOCK_ID_CURRENT_SENSOR}; +static DATA_BLOCK_OPEN_WIRE_s can_tableOpenWire = {.header.uniqueId = DATA_BLOCK_ID_OPEN_WIRE_BASE}; +static DATA_BLOCK_STATE_REQUEST_s can_tableStateRequest = {.header.uniqueId = DATA_BLOCK_ID_STATE_REQUEST}; +static DATA_BLOCK_PACK_VALUES_s can_tablePackValues = {.header.uniqueId = DATA_BLOCK_ID_PACK_VALUES}; +static DATA_BLOCK_SOF_s can_tableSof = {.header.uniqueId = DATA_BLOCK_ID_SOF}; +static DATA_BLOCK_SOC_s can_tableSoc = {.header.uniqueId = DATA_BLOCK_ID_SOC}; +static DATA_BLOCK_SOE_s can_tableSoe = {.header.uniqueId = DATA_BLOCK_ID_SOE}; +static DATA_BLOCK_ERROR_STATE_s can_tableErrorState = {.header.uniqueId = DATA_BLOCK_ID_ERROR_STATE}; +static DATA_BLOCK_INSULATION_MONITORING_s can_tableInsulation = { + .header.uniqueId = DATA_BLOCK_ID_INSULATION_MONITORING}; +static DATA_BLOCK_MSL_FLAG_s can_tableMslFlags = {.header.uniqueId = DATA_BLOCK_ID_MSL_FLAG}; +static DATA_BLOCK_RSL_FLAG_s can_tableRslFlags = {.header.uniqueId = DATA_BLOCK_ID_RSL_FLAG}; +static DATA_BLOCK_MOL_FLAG_s can_tableMolFlags = {.header.uniqueId = DATA_BLOCK_ID_MOL_FLAG}; + +OS_QUEUE imd_canDataQueue = NULL_PTR; + +const CAN_SHIM_s can_kShim = { + .pQueueImd = &imd_canDataQueue, + .pTableCellVoltage = &can_tableCellVoltages, + .pTableCellTemperature = &can_tableTemperatures, + .pTableMinMax = &can_tableMinimumMaximumValues, + .pTableCurrentSensor = &can_tableCurrentSensor, + .pTableOpenWire = &can_tableOpenWire, + .pTableStateRequest = &can_tableStateRequest, + .pTablePackValues = &can_tablePackValues, + .pTableSof = &can_tableSof, + .pTableSoc = &can_tableSoc, + .pTableSoe = &can_tableSoe, + .pTableErrorState = &can_tableErrorState, + .pTableInsulation = &can_tableInsulation, + .pTableMsl = &can_tableMslFlags, + .pTableRsl = &can_tableRslFlags, + .pTableMol = &can_tableMolFlags, +}; + +/*========== Setup and Teardown =============================================*/ +void setUp(void) { + can_tablePackValues.stringVoltage_mV[0u] = testStringVoltage0; + can_tablePackValues.stringCurrent_mA[0u] = testStringCurrent0; + can_tablePackValues.stringPower_W[0u] = testStringPower0; + + can_tablePackValues.stringVoltage_mV[1u] = testStringVoltage1; + can_tablePackValues.stringCurrent_mA[1u] = testStringCurrent1; + can_tablePackValues.stringPower_W[1u] = testStringPower1; +} + +void tearDown(void) { +} + +/*========== Test Cases =====================================================*/ +/** + * @brief Testing CANTX_CalculateStringVoltage + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/2: BS_NR_OF_STRINGS for stringNumber -> assert + * - AT2/2: NULL_PTR for kpkCanShim -> assert + * - Routine validation: + * - RT1/2: Signal data is prepared as expected for string 0 + * - RT2/2: Signal data is prepared as expected for string 1 + */ +void testCANTX_CalculateStringVoltage(void) { + /* ======= Assertion tests ============================================= */ + uint8_t testStringNumber = 0u; + /* ======= AT1/2 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_CalculateStringVoltage(BS_NR_OF_STRINGS, &can_kShim)); + /* ======= AT2/2 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_CalculateStringVoltage(testStringNumber, NULL_PTR)); + + /* ======= Routine tests =============================================== */ + /* ======= RT1/2: Test implementation */ + CAN_TxPrepareSignalData_Expect(&testStringVoltage0, cantx_testSignalStringVoltage); + CAN_TxPrepareSignalData_ReturnThruPtr_pSignal(&testSignalData[1u]); + /* ======= RT1/2: Call function under test */ + uint64_t testResult = TEST_CANTX_CalculateStringVoltage(testStringNumber, &can_kShim); + /* ======= RT1/2: Test output verification */ + TEST_ASSERT_EQUAL(1u, testResult); + + /* ======= RT2/2: Test implementation */ + testStringNumber = 1u; + CAN_TxPrepareSignalData_Expect(&testStringVoltage1, cantx_testSignalStringVoltage); + CAN_TxPrepareSignalData_ReturnThruPtr_pSignal(&testSignalData[1u]); + /* ======= RT2/2: Call function under test */ + testResult = TEST_CANTX_CalculateStringVoltage(testStringNumber, &can_kShim); + /* ======= RT2/2: Test output verification */ + TEST_ASSERT_EQUAL(1u, testResult); +} + +/** + * @brief Testing CANTX_CalculateStringCurrent + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/2: BS_NR_OF_STRINGS for stringNumber -> assert + * - AT2/2: NULL_PTR for kpkCanShim -> assert + * - Routine validation: + * - RT1/2: Signal data is prepared as expected for string 0 + * - RT2/2: Signal data is prepared as expected for string 1 + */ +void testCANTX_CalculateStringCurrent(void) { + /* ======= Assertion tests ============================================= */ + uint8_t testStringNumber = 0u; + /* ======= AT1/2 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_CalculateStringCurrent(BS_NR_OF_STRINGS, &can_kShim)); + /* ======= AT2/2 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_CalculateStringCurrent(testStringNumber, NULL_PTR)); + + /* ======= Routine tests =============================================== */ + /* ======= RT1/2: Test implementation */ + CAN_TxPrepareSignalData_Expect(&testStringCurrent0, cantx_testSignalStringCurrent); + CAN_TxPrepareSignalData_ReturnThruPtr_pSignal(&testSignalData[1u]); + /* ======= RT1/2: Call function under test */ + uint64_t testResult = TEST_CANTX_CalculateStringCurrent(testStringNumber, &can_kShim); + /* ======= RT1/2: Test output verification */ + TEST_ASSERT_EQUAL(1u, testResult); + + /* ======= RT2/2: Test implementation */ + testStringNumber = 1u; + CAN_TxPrepareSignalData_Expect(&testStringCurrent1, cantx_testSignalStringCurrent); + CAN_TxPrepareSignalData_ReturnThruPtr_pSignal(&testSignalData[1u]); + /* ======= RT2/2: Call function under test */ + testResult = TEST_CANTX_CalculateStringCurrent(testStringNumber, &can_kShim); + /* ======= RT2/2: Test output verification */ + TEST_ASSERT_EQUAL(1u, testResult); +} + +/** + * @brief Testing CANTX_CalculateStringPower + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/2: BS_NR_OF_STRINGS for stringNumber -> assert + * - AT2/2: NULL_PTR for kpkCanShim -> assert + * - Routine validation: + * - RT1/2: Signal data is prepared as expected for string 0 + * - RT2/2: Signal data is prepared as expected for string 1 + */ +void testCANTX_CalculateStringPower(void) { + /* ======= Assertion tests ============================================= */ + uint8_t testStringNumber = 0u; + /* ======= AT1/2 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_CalculateStringPower(BS_NR_OF_STRINGS, &can_kShim)); + /* ======= AT2/2 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_CalculateStringPower(testStringNumber, NULL_PTR)); + + /* ======= Routine tests =============================================== */ + /* ======= RT1/2: Test implementation */ + CAN_TxPrepareSignalData_Expect(&testStringPower0, cantx_testSignalStringPower); + CAN_TxPrepareSignalData_ReturnThruPtr_pSignal(&testSignalData[1u]); + /* ======= RT1/2: Call function under test */ + uint64_t testResult = TEST_CANTX_CalculateStringPower(testStringNumber, &can_kShim); + /* ======= RT1/2: Test output verification */ + TEST_ASSERT_EQUAL(1u, testResult); + + /* ======= RT2/2: Test implementation */ + testStringNumber = 1u; + CAN_TxPrepareSignalData_Expect(&testStringPower1, cantx_testSignalStringPower); + CAN_TxPrepareSignalData_ReturnThruPtr_pSignal(&testSignalData[1u]); + /* ======= RT2/2: Call function under test */ + testResult = TEST_CANTX_CalculateStringPower(testStringNumber, &can_kShim); + /* ======= RT2/2: Test output verification */ + TEST_ASSERT_EQUAL(1u, testResult); +} + +/** + * @brief Testing CANTX_BuildString0Message + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/3: NULL_PTR for pMessageData -> assert + * - AT2/3: BS_NR_OF_STRINGS for stringNumber -> assert + * - AT3/3: NULL_PTR for kpkCanShim -> assert + * - Routine validation: + * - RT1/1: Signal data is prepared as expected for string 0 + * - RT1/1: Signal data is prepared as expected for string 1 + */ +void testCANTX_BuildString0Message(void) { + /* ======= Assertion tests ============================================= */ + uint8_t testStringNumber = 0u; + /* ======= AT1/3 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_BuildString0Message(NULL_PTR, testStringNumber, &can_kShim)); + /* ======= AT2/3 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_BuildString0Message(&testMessageData[0u], BS_NR_OF_STRINGS, &can_kShim)); + /* ======= AT3/3 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_CANTX_BuildString0Message(&testMessageData[0u], testStringNumber, NULL_PTR)); + + /* ======= Routine tests =============================================== */ + uint64_t testResult = 0u; + /* ======= RT1/2: Test implementation */ + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 3u, 0u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxPrepareSignalData_Expect(&testStringVoltage0, cantx_testSignalStringVoltage); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[1u], 4u, 18u, testStringVoltage0, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[2u]); + CAN_TxPrepareSignalData_Expect(&testStringCurrent0, cantx_testSignalStringCurrent); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[2u], 18u, 18u, testStringCurrent0, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[3u]); + CAN_TxPrepareSignalData_Expect(&testStringPower0, cantx_testSignalStringPower); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[3u], 32u, 18u, testStringPower0, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[4u]); + /* ======= RT1/2: Call function under test */ + TEST_CANTX_BuildString0Message(&testResult, testStringNumber, &can_kShim); + /* ======= RT1/2: Test output verification */ + TEST_ASSERT_EQUAL(4u, testResult); + + testResult = 0u; + /* ======= RT1/2: Test implementation */ + testStringNumber = 1u; + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 3u, 1u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxPrepareSignalData_Expect(&testStringVoltage1, cantx_testSignalStringVoltage); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[1u], 4u, 18u, testStringVoltage1, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[2u]); + CAN_TxPrepareSignalData_Expect(&testStringCurrent1, cantx_testSignalStringCurrent); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[2u], 18u, 18u, testStringCurrent1, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[3u]); + CAN_TxPrepareSignalData_Expect(&testStringPower1, cantx_testSignalStringPower); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[3u], 32u, 18u, testStringPower1, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[4u]); + /* ======= RT1/2: Call function under test */ + TEST_CANTX_BuildString0Message(&testResult, testStringNumber, &can_kShim); + /* ======= RT1/2: Test output verification */ + TEST_ASSERT_EQUAL(4u, testResult); +} + +/** + * @brief Testing CANTX_StringValuesP0 + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/8: Invalid message id -> assert + * - AT2/8: Invalid message id type -> assert + * - AT3/8: Invalid message dlc size -> assert + * - AT4/8: Invalid message endianness -> assert + * - AT5/8: NULL_PTR for pCanData -> assert + * - AT6/8: NULL_PTR for pMuxId -> assert + * - AT6/8: NULL_PTR for pMuxId -> assert + * - AT8/8: NULL_PTR for kpkCanShim -> assert + * - Routine validation: + * - RT1/2: Message data is set as expected for string 0 + * - RT2/2: Message data is set as expected for string 1 + */ +void testCANTX_StringValuesP0(void) { + /* ======= Assertion tests ============================================= */ + uint8_t testCanData[CAN_MAX_DLC] = {0u}; + uint8_t testMuxId = 0u; + + CAN_MESSAGE_PROPERTIES_s testMessage = { + .id = 0x243, + .idType = CAN_STANDARD_IDENTIFIER_11_BIT, + .dlc = CAN_FOXBMS_MESSAGES_DEFAULT_DLC, + .endianness = CAN_BIG_ENDIAN, + }; + /* ======= AT1/8 ======= */ + testMessage.id = CAN_MAX_11BIT_ID; + TEST_ASSERT_FAIL_ASSERT(CANTX_StringValuesP0(testMessage, testCanData, &testMuxId, &can_kShim)); + testMessage.id = 0x243; + /* ======= AT2/8 ======= */ + testMessage.idType = CAN_EXTENDED_IDENTIFIER_29_BIT; + TEST_ASSERT_FAIL_ASSERT(CANTX_StringValuesP0(testMessage, testCanData, &testMuxId, &can_kShim)); + testMessage.idType = CAN_STANDARD_IDENTIFIER_11_BIT; + /* ======= AT3/8 ======= */ + testMessage.dlc = 9u; + TEST_ASSERT_FAIL_ASSERT(CANTX_StringValuesP0(testMessage, testCanData, &testMuxId, &can_kShim)); + testMessage.dlc = 8u; + /* ======= AT4/8 ======= */ + testMessage.endianness = CAN_LITTLE_ENDIAN; + TEST_ASSERT_FAIL_ASSERT(CANTX_StringValuesP0(testMessage, testCanData, &testMuxId, &can_kShim)); + testMessage.endianness = CAN_BIG_ENDIAN; + /* ======= AT5/8 ======= */ + TEST_ASSERT_FAIL_ASSERT(CANTX_StringValuesP0(testMessage, NULL_PTR, &testMuxId, &can_kShim)); + /* ======= AT6/8 ======= */ + TEST_ASSERT_FAIL_ASSERT(CANTX_StringValuesP0(testMessage, testCanData, NULL_PTR, &can_kShim)); + /* ======= AT6/8 ======= */ + testMuxId = BS_NR_OF_STRINGS; + TEST_ASSERT_FAIL_ASSERT(CANTX_StringValuesP0(testMessage, testCanData, &testMuxId, &can_kShim)); + testMuxId = 0u; + /* ======= AT8/8 ======= */ + TEST_ASSERT_FAIL_ASSERT(CANTX_StringValuesP0(testMessage, testCanData, &testMuxId, NULL_PTR)); + + /* ======= Routine tests =============================================== */ + /* ======= RT1/2: Test implementation */ + CAN_TxPrepareSignalData_Ignore(); + DATA_Read1DataBlock_ExpectAndReturn(can_kShim.pTablePackValues, STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 3u, 0u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 4u, 18u, testStringVoltage0, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 18u, 18u, testStringCurrent0, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 32u, 18u, testStringPower0, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanData, CAN_BIG_ENDIAN); + /* ======= RT1/2: Call function under test */ + uint64_t testResult = CANTX_StringValuesP0(testMessage, testCanData, &testMuxId, &can_kShim); + /* ======= RT1/2: Test output verification */ + TEST_ASSERT_EQUAL(0u, testResult); + + /* ======= RT2/2: Test implementation */ + testMuxId = 1u; + CAN_TxPrepareSignalData_Ignore(); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 3u, 1u, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 4u, 18u, testStringVoltage1, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 18u, 18u, testStringCurrent1, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 32u, 18u, testStringPower1, CAN_BIG_ENDIAN); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[1u], testCanData, CAN_BIG_ENDIAN); + /* ======= RT2/2: Call function under test */ + testResult = CANTX_StringValuesP0(testMessage, testCanData, &testMuxId, &can_kShim); + /* ======= RT2/2: Test output verification */ + TEST_ASSERT_EQUAL(0u, testResult); + TEST_ASSERT_EQUAL(0u, testMuxId); +} diff --git a/tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_string-values-p1.c b/tests/unit/app/driver/can/cbs/tx-cyclic/test_can_cbs_tx_string-values-p1.c similarity index 66% rename from tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_string-values-p1.c rename to tests/unit/app/driver/can/cbs/tx-cyclic/test_can_cbs_tx_string-values-p1.c index f2575202..ede01a35 100644 --- a/tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_string-values-p1.c +++ b/tests/unit/app/driver/can/cbs/tx-cyclic/test_can_cbs_tx_string-values-p1.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_can_cbs_tx_string-values-p1.c * @author foxBMS Team * @date 2023-05-31 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * @@ -55,6 +55,7 @@ /*========== Includes =======================================================*/ #include "unity.h" #include "Mockcan.h" +#include "Mockcan_helper.h" #include "Mockdatabase.h" #include "Mockdiag.h" #include "Mockfoxmath.h" @@ -63,9 +64,8 @@ #include "database_cfg.h" -#include "can_cbs_tx.h" -#include "can_cfg_tx-message-definitions.h" -#include "can_helper.h" +#include "can_cbs_tx_cyclic.h" +#include "can_cfg_tx-cyclic-message-definitions.h" /*========== Unit Testing Framework Directives ==============================*/ TEST_SOURCE_FILE("can_cbs_tx_string-values-p1.c") @@ -73,15 +73,20 @@ TEST_SOURCE_FILE("can_cbs_tx_string-values-p1.c") TEST_INCLUDE_PATH("../../src/app/application/bms") TEST_INCLUDE_PATH("../../src/app/driver/can") TEST_INCLUDE_PATH("../../src/app/driver/can/cbs") -TEST_INCLUDE_PATH("../../src/app/driver/can/cbs/tx") +TEST_INCLUDE_PATH("../../src/app/driver/can/cbs/tx-cyclic") TEST_INCLUDE_PATH("../../src/app/driver/config") TEST_INCLUDE_PATH("../../src/app/driver/foxmath") +TEST_INCLUDE_PATH("../../src/app/driver/fram") TEST_INCLUDE_PATH("../../src/app/driver/imd") TEST_INCLUDE_PATH("../../src/app/engine/diag") +TEST_INCLUDE_PATH("../../src/app/engine/sys_mon") TEST_INCLUDE_PATH("../../src/app/task/config") /*========== Definitions and Implementations for Unit Test ==================*/ +/* Define how often CAN_TxSetMessageDataWithSignalData gets called */ +#define TEST_NR_OF_SET_MESSAGE_DATA_CALLS (3u) + static DATA_BLOCK_CELL_VOLTAGE_s can_tableCellVoltages = {.header.uniqueId = DATA_BLOCK_ID_CELL_VOLTAGE}; static DATA_BLOCK_CELL_TEMPERATURE_s can_tableTemperatures = {.header.uniqueId = DATA_BLOCK_ID_CELL_TEMPERATURE}; static DATA_BLOCK_MIN_MAX_s can_tableMinimumMaximumValues = {.header.uniqueId = DATA_BLOCK_ID_MIN_MAX}; @@ -128,5 +133,47 @@ void tearDown(void) { } /*========== Test Cases =====================================================*/ -void testDummy(void) { +void test_CANTX_StringValuesP1(void) { + CAN_MESSAGE_PROPERTIES_s testMessage = { + .id = CANTX_STRING_VALUES_P1_ID, + .idType = CANTX_STRING_VALUES_P1_ID_TYPE, + .dlc = CANTX_STRING_VALUES_P1_DLC, + .endianness = CANTX_STRING_VALUES_P1_ENDIANNESS, + }; + uint8_t testCanData[CANTX_STRING_VALUES_P1_DLC] = {0u}; + uint64_t testMessageData[TEST_NR_OF_SET_MESSAGE_DATA_CALLS] = {0u}; + for (uint8_t i = 0; i < TEST_NR_OF_SET_MESSAGE_DATA_CALLS; i++) { + testMessageData[i] = i; + } + + /* set test data */ + can_tableCurrentSensor.energyCounter_Wh[0u] = 123456789; + can_tableCurrentSensor.energyCounter_Wh[1u] = -123456789; + + /* test string 0 */ + uint8_t muxId = 0u; + + DATA_Read1DataBlock_ExpectAndReturn(can_kShim.pTableCurrentSensor, STD_OK); + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 4u, 0u, CANTX_STRING_VALUES_P1_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + OS_EnterTaskCritical_Expect(); + OS_ExitTaskCritical_Expect(); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[1u], 15u, 32u, 123456789, CANTX_STRING_VALUES_P1_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[2u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[2u], testCanData, CANTX_STRING_VALUES_P1_ENDIANNESS); + CANTX_StringValuesP1(testMessage, testCanData, &muxId, &can_kShim); + + /* test string 1 */ + muxId = 1u; + + CAN_TxSetMessageDataWithSignalData_Expect(&testMessageData[0u], 7u, 4u, 1u, CANTX_STRING_VALUES_P1_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[1u]); + OS_EnterTaskCritical_Expect(); + OS_ExitTaskCritical_Expect(); + CAN_TxSetMessageDataWithSignalData_Expect( + &testMessageData[1u], 15u, 32u, -123456789, CANTX_STRING_VALUES_P1_ENDIANNESS); + CAN_TxSetMessageDataWithSignalData_ReturnThruPtr_pMessage(&testMessageData[2u]); + CAN_TxSetCanDataWithMessageData_Expect(testMessageData[2u], testCanData, CANTX_STRING_VALUES_P1_ENDIANNESS); + CANTX_StringValuesP1(testMessage, testCanData, &muxId, &can_kShim); } diff --git a/tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_bms-state.c b/tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_bms-state.c deleted file mode 100644 index 453088aa..00000000 --- a/tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_bms-state.c +++ /dev/null @@ -1,139 +0,0 @@ -/** - * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. - * All rights reserved. - * - * SPDX-License-Identifier: BSD-3-Clause - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * 3. Neither the name of the copyright holder nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * We kindly request you to use one or more of the following phrases to refer to - * foxBMS in your hardware, software, documentation or advertising materials: - * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ - * - */ - -/** - * @file test_can_cbs_tx_bms-state.c - * @author foxBMS Team - * @date 2021-07-27 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup UNIT_TEST_IMPLEMENTATION - * @prefix TEST - * - * @brief Tests for the CAN driver callbacks - * - */ - -/*========== Includes =======================================================*/ -#include "unity.h" -#include "Mockbms.h" -#include "Mockcan.h" -#include "Mockdatabase.h" -#include "Mockdiag.h" -#include "Mockfoxmath.h" -#include "Mockimd.h" -#include "Mockos.h" -#include "Mocksys_mon.h" - -#include "database_cfg.h" - -#include "can_cbs_tx.h" -#include "can_helper.h" - -/*========== Unit Testing Framework Directives ==============================*/ -TEST_SOURCE_FILE("can_cbs_tx_bms-state.c") - -TEST_INCLUDE_PATH("../../src/app/application/bms") -TEST_INCLUDE_PATH("../../src/app/driver/can") -TEST_INCLUDE_PATH("../../src/app/driver/can/cbs") -TEST_INCLUDE_PATH("../../src/app/driver/can/cbs/tx") -TEST_INCLUDE_PATH("../../src/app/driver/config") -TEST_INCLUDE_PATH("../../src/app/driver/contactor") -TEST_INCLUDE_PATH("../../src/app/driver/foxmath") -TEST_INCLUDE_PATH("../../src/app/driver/fram") -TEST_INCLUDE_PATH("../../src/app/driver/imd") -TEST_INCLUDE_PATH("../../src/app/driver/sps") -TEST_INCLUDE_PATH("../../src/app/engine/diag") -TEST_INCLUDE_PATH("../../src/app/engine/sys_mon") -TEST_INCLUDE_PATH("../../src/app/task/config") - -/*========== Definitions and Implementations for Unit Test ==================*/ - -static DATA_BLOCK_CELL_VOLTAGE_s can_tableCellVoltages = {.header.uniqueId = DATA_BLOCK_ID_CELL_VOLTAGE}; -static DATA_BLOCK_CELL_TEMPERATURE_s can_tableTemperatures = {.header.uniqueId = DATA_BLOCK_ID_CELL_TEMPERATURE}; -static DATA_BLOCK_MIN_MAX_s can_tableMinimumMaximumValues = {.header.uniqueId = DATA_BLOCK_ID_MIN_MAX}; -static DATA_BLOCK_CURRENT_SENSOR_s can_tableCurrentSensor = {.header.uniqueId = DATA_BLOCK_ID_CURRENT_SENSOR}; -static DATA_BLOCK_OPEN_WIRE_s can_tableOpenWire = {.header.uniqueId = DATA_BLOCK_ID_OPEN_WIRE_BASE}; -static DATA_BLOCK_STATE_REQUEST_s can_tableStateRequest = {.header.uniqueId = DATA_BLOCK_ID_STATE_REQUEST}; -static DATA_BLOCK_PACK_VALUES_s can_tablePackValues = {.header.uniqueId = DATA_BLOCK_ID_PACK_VALUES}; -static DATA_BLOCK_SOF_s can_tableSof = {.header.uniqueId = DATA_BLOCK_ID_SOF}; -static DATA_BLOCK_SOC_s can_tableSoc = {.header.uniqueId = DATA_BLOCK_ID_SOC}; -static DATA_BLOCK_SOE_s can_tableSoe = {.header.uniqueId = DATA_BLOCK_ID_SOE}; -static DATA_BLOCK_ERROR_STATE_s can_tableErrorState = {.header.uniqueId = DATA_BLOCK_ID_ERROR_STATE}; -static DATA_BLOCK_INSULATION_MONITORING_s can_tableInsulation = { - .header.uniqueId = DATA_BLOCK_ID_INSULATION_MONITORING}; -static DATA_BLOCK_MSL_FLAG_s can_tableMslFlags = {.header.uniqueId = DATA_BLOCK_ID_MSL_FLAG}; -static DATA_BLOCK_RSL_FLAG_s can_tableRslFlags = {.header.uniqueId = DATA_BLOCK_ID_RSL_FLAG}; -static DATA_BLOCK_MOL_FLAG_s can_tableMolFlags = {.header.uniqueId = DATA_BLOCK_ID_MOL_FLAG}; -static DATA_BLOCK_AEROSOL_SENSOR_s can_tableAerosolSensor = {.header.uniqueId = DATA_BLOCK_ID_AEROSOL_SENSOR}; - -OS_QUEUE imd_canDataQueue = NULL_PTR; - -const CAN_SHIM_s can_kShim = { - .pQueueImd = &imd_canDataQueue, - .pTableCellVoltage = &can_tableCellVoltages, - .pTableCellTemperature = &can_tableTemperatures, - .pTableMinMax = &can_tableMinimumMaximumValues, - .pTableCurrentSensor = &can_tableCurrentSensor, - .pTableOpenWire = &can_tableOpenWire, - .pTableStateRequest = &can_tableStateRequest, - .pTablePackValues = &can_tablePackValues, - .pTableSof = &can_tableSof, - .pTableSoc = &can_tableSoc, - .pTableSoe = &can_tableSoe, - .pTableErrorState = &can_tableErrorState, - .pTableInsulation = &can_tableInsulation, - .pTableMsl = &can_tableMslFlags, - .pTableRsl = &can_tableRslFlags, - .pTableMol = &can_tableMolFlags, - .pTableAerosolSensor = &can_tableAerosolSensor, -}; - -/*========== Setup and Teardown =============================================*/ -void setUp(void) { -} - -void tearDown(void) { -} - -/*========== Test Cases =====================================================*/ -void testDummy(void) { -} diff --git a/tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_debug-response.c b/tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_debug-response.c deleted file mode 100644 index 880f74b9..00000000 --- a/tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_debug-response.c +++ /dev/null @@ -1,126 +0,0 @@ -/** - * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. - * All rights reserved. - * - * SPDX-License-Identifier: BSD-3-Clause - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * 3. Neither the name of the copyright holder nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * We kindly request you to use one or more of the following phrases to refer to - * foxBMS in your hardware, software, documentation or advertising materials: - * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ - * - */ - -/** - * @file test_can_cbs_tx_debug-response.c - * @author foxBMS Team - * @date 2022-08-17 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup UNIT_TEST_IMPLEMENTATION - * @prefix TEST - * - * @brief Tests for the CAN driver callbacks - * - */ - -/*========== Includes =======================================================*/ -#include "unity.h" -#include "Mockcan.h" -#include "Mockcan_helper.h" -#include "Mockfoxmath.h" -#include "Mockrtc.h" - -#include "database_cfg.h" -#include "version_cfg.h" - -#include "can_cbs_tx.h" -#include "can_cbs_tx_debug-response.h" -#include "can_cfg_tx-message-definitions.h" - -#include - -/*========== Unit Testing Framework Directives ==============================*/ -TEST_SOURCE_FILE("can_cbs_tx_debug-response.c") - -TEST_INCLUDE_PATH("../../src/app/driver/can") -TEST_INCLUDE_PATH("../../src/app/driver/can/cbs") -TEST_INCLUDE_PATH("../../src/app/driver/can/cbs/tx") -TEST_INCLUDE_PATH("../../src/app/driver/config") -TEST_INCLUDE_PATH("../../src/app/driver/foxmath") -TEST_INCLUDE_PATH("../../src/app/driver/rtc") - -/*========== Definitions and Implementations for Unit Test ==================*/ -const CAN_NODE_s can_node1 = { - .canNodeRegister = canREG1, -}; - -const CAN_NODE_s can_node2Isolated = { - .canNodeRegister = canREG2, -}; - -/* Dummy for version file implementation */ -const VER_VERSION_s ver_foxbmsVersionInformation = { - .underVersionControl = true, - .isDirty = true, - .major = 1, - .minor = 1, - .patch = 1, - .distanceFromLastRelease = 42, - .commitHash = "deadbeef", - .gitRemote = "onTheDarkSideOfTheMoon.git", -}; - -/*========== Setup and Teardown =============================================*/ -void setUp(void) { -} - -void tearDown(void) { -} - -/*========== Test Cases =====================================================*/ -void testTransmitCommitHash(void) { - uint8_t testData[CAN_MAX_DLC] = {0}; - - uint64_t testMessage = 0; - CAN_TxSetMessageDataWithSignalData_Expect(&testMessage, 7u, 8u, 0x0005u, CAN_BIG_ENDIAN); - CAN_TxSetMessageDataWithSignalData_Expect(&testMessage, 15u, 8u, 0x0064u, CAN_BIG_ENDIAN); - CAN_TxSetMessageDataWithSignalData_Expect(&testMessage, 23u, 8u, 0x0065u, CAN_BIG_ENDIAN); - CAN_TxSetMessageDataWithSignalData_Expect(&testMessage, 31u, 8u, 0x0061u, CAN_BIG_ENDIAN); - CAN_TxSetMessageDataWithSignalData_Expect(&testMessage, 39u, 8u, 0x0064u, CAN_BIG_ENDIAN); - CAN_TxSetMessageDataWithSignalData_Expect(&testMessage, 47u, 8u, 0x0062u, CAN_BIG_ENDIAN); - CAN_TxSetMessageDataWithSignalData_Expect(&testMessage, 55u, 8u, 0x0065u, CAN_BIG_ENDIAN); - CAN_TxSetMessageDataWithSignalData_Expect(&testMessage, 63u, 8u, 0x0065u, CAN_BIG_ENDIAN); - CAN_TxSetCanDataWithMessageData_Expect(testMessage, &testData[0], CAN_BIG_ENDIAN); - CAN_DataSend_ExpectAndReturn( - CAN_NODE_1, CANTX_DEBUG_RESPONSE_ID, CAN_STANDARD_IDENTIFIER_11_BIT, &testData[0], STD_OK); - CANTX_DebugResponse(CANTX_DEBUG_RESPONSE_TRANSMIT_COMMIT_HASH); -} diff --git a/tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_pack-limits.c b/tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_pack-limits.c deleted file mode 100644 index cb757d0d..00000000 --- a/tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_pack-limits.c +++ /dev/null @@ -1,172 +0,0 @@ -/** - * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. - * All rights reserved. - * - * SPDX-License-Identifier: BSD-3-Clause - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * 3. Neither the name of the copyright holder nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * We kindly request you to use one or more of the following phrases to refer to - * foxBMS in your hardware, software, documentation or advertising materials: - * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ - * - */ - -/** - * @file test_can_cbs_tx_pack-limits.c - * @author foxBMS Team - * @date 2021-07-27 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup UNIT_TEST_IMPLEMENTATION - * @prefix TEST - * - * @brief Tests for the CAN driver callbacks - * - */ - -/*========== Includes =======================================================*/ -#include "unity.h" -#include "Mockcan.h" -#include "Mockdatabase.h" -#include "Mockdiag.h" -#include "Mockfoxmath.h" -#include "Mockimd.h" -#include "Mockos.h" - -#include "battery_cell_cfg.h" -#include "database_cfg.h" - -#include "can_cbs_tx.h" -#include "can_cfg_tx-message-definitions.h" -#include "can_helper.h" - -/*========== Unit Testing Framework Directives ==============================*/ -TEST_SOURCE_FILE("can_cbs_tx_pack-limits.c") - -TEST_INCLUDE_PATH("../../src/app/driver/can") -TEST_INCLUDE_PATH("../../src/app/driver/can/cbs") -TEST_INCLUDE_PATH("../../src/app/driver/can/cbs/tx") -TEST_INCLUDE_PATH("../../src/app/driver/config") -TEST_INCLUDE_PATH("../../src/app/driver/foxmath") -TEST_INCLUDE_PATH("../../src/app/driver/imd") -TEST_INCLUDE_PATH("../../src/app/engine/diag") -TEST_INCLUDE_PATH("../../src/app/task/config") -TEST_INCLUDE_PATH("../../src/app/task/ftask") - -/*========== Definitions and Implementations for Unit Test ==================*/ - -static DATA_BLOCK_CELL_VOLTAGE_s can_tableCellVoltages = {.header.uniqueId = DATA_BLOCK_ID_CELL_VOLTAGE}; -static DATA_BLOCK_CELL_TEMPERATURE_s can_tableTemperatures = {.header.uniqueId = DATA_BLOCK_ID_CELL_TEMPERATURE}; -static DATA_BLOCK_MIN_MAX_s can_tableMinimumMaximumValues = {.header.uniqueId = DATA_BLOCK_ID_MIN_MAX}; -static DATA_BLOCK_CURRENT_SENSOR_s can_tableCurrentSensor = {.header.uniqueId = DATA_BLOCK_ID_CURRENT_SENSOR}; -static DATA_BLOCK_OPEN_WIRE_s can_tableOpenWire = {.header.uniqueId = DATA_BLOCK_ID_OPEN_WIRE_BASE}; -static DATA_BLOCK_STATE_REQUEST_s can_tableStateRequest = {.header.uniqueId = DATA_BLOCK_ID_STATE_REQUEST}; -static DATA_BLOCK_PACK_VALUES_s can_tablePackValues = {.header.uniqueId = DATA_BLOCK_ID_PACK_VALUES}; -static DATA_BLOCK_SOF_s can_tableSof = {.header.uniqueId = DATA_BLOCK_ID_SOF}; -static DATA_BLOCK_SOC_s can_tableSoc = {.header.uniqueId = DATA_BLOCK_ID_SOC}; -static DATA_BLOCK_SOE_s can_tableSoe = {.header.uniqueId = DATA_BLOCK_ID_SOE}; -static DATA_BLOCK_ERROR_STATE_s can_tableErrorState = {.header.uniqueId = DATA_BLOCK_ID_ERROR_STATE}; -static DATA_BLOCK_INSULATION_MONITORING_s can_tableInsulation = { - .header.uniqueId = DATA_BLOCK_ID_INSULATION_MONITORING}; -static DATA_BLOCK_MSL_FLAG_s can_tableMslFlags = {.header.uniqueId = DATA_BLOCK_ID_MSL_FLAG}; -static DATA_BLOCK_RSL_FLAG_s can_tableRslFlags = {.header.uniqueId = DATA_BLOCK_ID_RSL_FLAG}; -static DATA_BLOCK_MOL_FLAG_s can_tableMolFlags = {.header.uniqueId = DATA_BLOCK_ID_MOL_FLAG}; -static DATA_BLOCK_AEROSOL_SENSOR_s can_tableAerosolSensor = {.header.uniqueId = DATA_BLOCK_ID_AEROSOL_SENSOR}; - -OS_QUEUE ftsk_imdCanDataQueue = NULL_PTR; - -const CAN_SHIM_s can_kShim = { - .pQueueImd = &ftsk_imdCanDataQueue, - .pTableCellVoltage = &can_tableCellVoltages, - .pTableCellTemperature = &can_tableTemperatures, - .pTableMinMax = &can_tableMinimumMaximumValues, - .pTableCurrentSensor = &can_tableCurrentSensor, - .pTableOpenWire = &can_tableOpenWire, - .pTableStateRequest = &can_tableStateRequest, - .pTablePackValues = &can_tablePackValues, - .pTableSof = &can_tableSof, - .pTableSoc = &can_tableSoc, - .pTableSoe = &can_tableSoe, - .pTableErrorState = &can_tableErrorState, - .pTableInsulation = &can_tableInsulation, - .pTableMsl = &can_tableMslFlags, - .pTableRsl = &can_tableRslFlags, - .pTableMol = &can_tableMolFlags, - .pTableAerosolSensor = &can_tableAerosolSensor, -}; - -/*========== Setup and Teardown =============================================*/ -void setUp(void) { -} - -void tearDown(void) { -} - -/*========== Test Cases =====================================================*/ -void testCAN_TxLimitValues(void) { - CAN_MESSAGE_PROPERTIES_s testMessage = { - .id = CANTX_LIMIT_VALUES_ID, - .idType = CANTX_LIMIT_VALUES_ID_TYPE, - .dlc = 8u, - .endianness = CANTX_LIMIT_VALUES_ENDIANNESS, - }; - uint8_t data[8] = {0}; - - for (uint8_t s = 0u; s < BS_NR_OF_STRINGS; s++) { - can_kShim.pTableSof->recommendedContinuousPackDischargeCurrent_mA = 270000.0f; - can_kShim.pTableSof->recommendedContinuousPackChargeCurrent_mA = 240000.0f; - } - - DATA_Read1DataBlock_IgnoreAndReturn(0u); - - CANTX_LimitValues(testMessage, data, NULL_PTR, &can_kShim); - - /** Values of: - * max. charge current: 240A - * max. discharge current: 270A - * max. charge power: 0kW - * max. discharge power: 0kW - * max. battery voltage: 380V - * min. battery voltage: 208V - */ - - uint8_t minimumBatteryVoltage = (uint8_t)((BS_NR_OF_CELL_BLOCKS_PER_STRING * BC_VOLTAGE_MIN_MSL_mV) / 4000u); - uint8_t maximumBatteryVoltage = (uint8_t)((BS_NR_OF_CELL_BLOCKS_PER_STRING * BC_VOLTAGE_MAX_MSL_mV) / 4000u); - - TEST_ASSERT_EQUAL(0x43, data[0]); - TEST_ASSERT_EQUAL(0x83, data[1]); - TEST_ASSERT_EQUAL(0xC0, data[2]); - TEST_ASSERT_EQUAL(0x00, data[3]); - TEST_ASSERT_EQUAL(0x00, data[4]); - TEST_ASSERT_EQUAL(0x00, data[5]); - TEST_ASSERT_EQUAL(maximumBatteryVoltage, data[6]); /* Max battery voltage */ - TEST_ASSERT_EQUAL(minimumBatteryVoltage, data[7]); /* Minimum battery voltage */ -} diff --git a/tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_pack-minimum-maximum-values.c b/tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_pack-minimum-maximum-values.c deleted file mode 100644 index 7e327db9..00000000 --- a/tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_pack-minimum-maximum-values.c +++ /dev/null @@ -1,210 +0,0 @@ -/** - * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. - * All rights reserved. - * - * SPDX-License-Identifier: BSD-3-Clause - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * 3. Neither the name of the copyright holder nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * We kindly request you to use one or more of the following phrases to refer to - * foxBMS in your hardware, software, documentation or advertising materials: - * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ - * - */ - -/** - * @file test_can_cbs_tx_pack-minimum-maximum-values.c - * @author foxBMS Team - * @date 2021-04-22 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup UNIT_TEST_IMPLEMENTATION - * @prefix TEST - * - * @brief Tests for the CAN driver callbacks - * - */ - -/*========== Includes =======================================================*/ -#include "unity.h" -#include "Mockbms.h" -#include "Mockcan.h" -#include "Mockdatabase.h" -#include "Mockdiag.h" -#include "Mockfoxmath.h" -#include "Mockimd.h" -#include "Mockos.h" - -#include "database_cfg.h" - -#include "can_cbs_tx.h" -#include "can_cfg_tx-message-definitions.h" -#include "can_helper.h" - -#include - -/*========== Unit Testing Framework Directives ==============================*/ -TEST_SOURCE_FILE("can_cbs_tx_pack-minimum-maximum-values.c") - -TEST_INCLUDE_PATH("../../src/app/application/bms") -TEST_INCLUDE_PATH("../../src/app/driver/can") -TEST_INCLUDE_PATH("../../src/app/driver/can/cbs") -TEST_INCLUDE_PATH("../../src/app/driver/can/cbs/tx") -TEST_INCLUDE_PATH("../../src/app/driver/config") -TEST_INCLUDE_PATH("../../src/app/driver/contactor") -TEST_INCLUDE_PATH("../../src/app/driver/foxmath") -TEST_INCLUDE_PATH("../../src/app/driver/imd") -TEST_INCLUDE_PATH("../../src/app/driver/rtc") -TEST_INCLUDE_PATH("../../src/app/driver/sps") -TEST_INCLUDE_PATH("../../src/app/engine/diag") -TEST_INCLUDE_PATH("../../src/app/task/config") - -/*========== Definitions and Implementations for Unit Test ==================*/ - -static DATA_BLOCK_CELL_VOLTAGE_s can_tableCellVoltages = {.header.uniqueId = DATA_BLOCK_ID_CELL_VOLTAGE}; -static DATA_BLOCK_CELL_TEMPERATURE_s can_tableTemperatures = {.header.uniqueId = DATA_BLOCK_ID_CELL_TEMPERATURE}; -static DATA_BLOCK_MIN_MAX_s can_tableMinimumMaximumValues = {.header.uniqueId = DATA_BLOCK_ID_MIN_MAX}; -static DATA_BLOCK_CURRENT_SENSOR_s can_tableCurrentSensor = {.header.uniqueId = DATA_BLOCK_ID_CURRENT_SENSOR}; -static DATA_BLOCK_OPEN_WIRE_s can_tableOpenWire = {.header.uniqueId = DATA_BLOCK_ID_OPEN_WIRE_BASE}; -static DATA_BLOCK_STATE_REQUEST_s can_tableStateRequest = {.header.uniqueId = DATA_BLOCK_ID_STATE_REQUEST}; -static DATA_BLOCK_PACK_VALUES_s can_tablePackValues = {.header.uniqueId = DATA_BLOCK_ID_PACK_VALUES}; -static DATA_BLOCK_SOF_s can_tableSof = {.header.uniqueId = DATA_BLOCK_ID_SOF}; -static DATA_BLOCK_SOC_s can_tableSoc = {.header.uniqueId = DATA_BLOCK_ID_SOC}; -static DATA_BLOCK_ERROR_STATE_s can_tableErrorState = {.header.uniqueId = DATA_BLOCK_ID_ERROR_STATE}; -static DATA_BLOCK_INSULATION_MONITORING_s can_tableInsulation = { - .header.uniqueId = DATA_BLOCK_ID_INSULATION_MONITORING}; -static DATA_BLOCK_MSL_FLAG_s can_tableMslFlags = {.header.uniqueId = DATA_BLOCK_ID_MSL_FLAG}; -static DATA_BLOCK_RSL_FLAG_s can_tableRslFlags = {.header.uniqueId = DATA_BLOCK_ID_RSL_FLAG}; -static DATA_BLOCK_MOL_FLAG_s can_tableMolFlags = {.header.uniqueId = DATA_BLOCK_ID_MOL_FLAG}; -static DATA_BLOCK_AEROSOL_SENSOR_s can_tableAerosolSensor = {.header.uniqueId = DATA_BLOCK_ID_AEROSOL_SENSOR}; - -OS_QUEUE imd_canDataQueue = NULL_PTR; - -const CAN_SHIM_s can_kShim = { - .pQueueImd = &imd_canDataQueue, - .pTableCellVoltage = &can_tableCellVoltages, - .pTableCellTemperature = &can_tableTemperatures, - .pTableMinMax = &can_tableMinimumMaximumValues, - .pTableCurrentSensor = &can_tableCurrentSensor, - .pTableOpenWire = &can_tableOpenWire, - .pTableStateRequest = &can_tableStateRequest, - .pTablePackValues = &can_tablePackValues, - .pTableSof = &can_tableSof, - .pTableSoc = &can_tableSoc, - .pTableErrorState = &can_tableErrorState, - .pTableInsulation = &can_tableInsulation, - .pTableMsl = &can_tableMslFlags, - .pTableRsl = &can_tableRslFlags, - .pTableMol = &can_tableMolFlags, - .pTableAerosolSensor = &can_tableAerosolSensor, -}; - -/*========== Setup and Teardown =============================================*/ -void setUp(void) { -} - -void tearDown(void) { -} - -/*========== Test Cases =====================================================*/ -void testCANTX_MinimumMaximumValuesAllStringsOpen(void) { - CAN_MESSAGE_PROPERTIES_s testMessage = { - .id = CANTX_MINIMUM_MAXIMUM_VALUES_ID, - .idType = CANTX_MINIMUM_MAXIMUM_VALUES_ID_TYPE, - .dlc = 8u, - .endianness = CANTX_MINIMUM_MAXIMUM_VALUES_ENDIANNESS, - }; - uint8_t data[8] = {0}; - - for (uint8_t s = 0u; s < BS_NR_OF_STRINGS; s++) { - can_kShim.pTableMinMax->minimumCellVoltage_mV[s] = 2000; - can_kShim.pTableMinMax->maximumCellVoltage_mV[s] = 3000; - can_kShim.pTableMinMax->minimumTemperature_ddegC[s] = -150; - can_kShim.pTableMinMax->maximumTemperature_ddegC[s] = 350; - } - - DATA_Read1DataBlock_IgnoreAndReturn(0u); - BMS_GetNumberOfConnectedStrings_IgnoreAndReturn(0u); - CANTX_MinimumMaximumValues(testMessage, data, NULL_PTR, &can_kShim); - - /** Values of: - * minimum cell voltage: 2000mV - * maximum cell voltage: 3000mV - * minimum temperature: -15degC - * maximum temperature: 35degC - */ - TEST_ASSERT_EQUAL(0x5D, data[0]); - TEST_ASSERT_EQUAL(0xC1, data[1]); - TEST_ASSERT_EQUAL(0xF4, data[2]); - TEST_ASSERT_EQUAL(0x00, data[3]); - TEST_ASSERT_EQUAL(0x00, data[4]); - TEST_ASSERT_EQUAL(0x00, data[5]); - TEST_ASSERT_EQUAL(0x23, data[6]); - TEST_ASSERT_EQUAL(0xF1, data[7]); -} - -void testCANTX_MinimumMaximumValuesAllStringsClosed(void) { - CAN_MESSAGE_PROPERTIES_s testMessage = { - .id = CANTX_MINIMUM_MAXIMUM_VALUES_ID, - .idType = CANTX_MINIMUM_MAXIMUM_VALUES_ID_TYPE, - .dlc = 8u, - .endianness = CANTX_MINIMUM_MAXIMUM_VALUES_ENDIANNESS, - }; - uint8_t data[8] = {0}; - - for (uint8_t s = 0u; s < BS_NR_OF_STRINGS; s++) { - can_kShim.pTableMinMax->minimumCellVoltage_mV[s] = 2000 + s; - can_kShim.pTableMinMax->maximumCellVoltage_mV[s] = 3000 - s; - can_kShim.pTableMinMax->minimumTemperature_ddegC[s] = -150 + s; - can_kShim.pTableMinMax->maximumTemperature_ddegC[s] = 350 - s; - } - - DATA_Read1DataBlock_IgnoreAndReturn(0u); - BMS_GetNumberOfConnectedStrings_IgnoreAndReturn(BS_NR_OF_STRINGS); - for (uint8_t s = 0u; s < BS_NR_OF_STRINGS; s++) { - BMS_IsStringClosed_IgnoreAndReturn(true); - } - CANTX_MinimumMaximumValues(testMessage, data, NULL_PTR, &can_kShim); - - /** Values of: - * minimum cell voltage: 2000mV - * maximum cell voltage: 3000mV - * minimum temperature: -15degC - * maximum temperature: 35degC - */ - TEST_ASSERT_EQUAL(0x5D, data[0]); - TEST_ASSERT_EQUAL(0xC1, data[1]); - TEST_ASSERT_EQUAL(0xF4, data[2]); - TEST_ASSERT_EQUAL(0x00, data[3]); - TEST_ASSERT_EQUAL(0x00, data[4]); - TEST_ASSERT_EQUAL(0x00, data[5]); - TEST_ASSERT_EQUAL(0x23, data[6]); - TEST_ASSERT_EQUAL(0xF1, data[7]); -} diff --git a/tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_pack-state-estimation.c b/tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_pack-state-estimation.c deleted file mode 100644 index ebd81a74..00000000 --- a/tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_pack-state-estimation.c +++ /dev/null @@ -1,233 +0,0 @@ -/** - * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. - * All rights reserved. - * - * SPDX-License-Identifier: BSD-3-Clause - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * 3. Neither the name of the copyright holder nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * We kindly request you to use one or more of the following phrases to refer to - * foxBMS in your hardware, software, documentation or advertising materials: - * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ - * - */ - -/** - * @file test_can_cbs_tx_pack-state-estimation.c - * @author foxBMS Team - * @date 2021-07-27 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup UNIT_TEST_IMPLEMENTATION - * @prefix TEST - * - * @brief Tests for the CAN driver callbacks - * - */ - -/*========== Includes =======================================================*/ -#include "unity.h" -#include "Mockbms.h" -#include "Mockcan.h" -#include "Mockdatabase.h" -#include "Mockdiag.h" -#include "Mockfoxmath.h" -#include "Mockimd.h" -#include "Mockos.h" - -#include "database_cfg.h" - -#include "can_cbs_tx.h" -#include "can_cfg_tx-message-definitions.h" -#include "can_helper.h" - -#include - -/*========== Unit Testing Framework Directives ==============================*/ -TEST_SOURCE_FILE("can_cbs_tx_pack-state-estimation.c") - -TEST_INCLUDE_PATH("../../src/app/application/bms") -TEST_INCLUDE_PATH("../../src/app/driver/can") -TEST_INCLUDE_PATH("../../src/app/driver/can/cbs") -TEST_INCLUDE_PATH("../../src/app/driver/can/cbs/tx") -TEST_INCLUDE_PATH("../../src/app/driver/config") -TEST_INCLUDE_PATH("../../src/app/driver/contactor") -TEST_INCLUDE_PATH("../../src/app/driver/foxmath") -TEST_INCLUDE_PATH("../../src/app/driver/imd") -TEST_INCLUDE_PATH("../../src/app/driver/sps") -TEST_INCLUDE_PATH("../../src/app/engine/diag") -TEST_INCLUDE_PATH("../../src/app/task/config") - -/*========== Definitions and Implementations for Unit Test ==================*/ - -static DATA_BLOCK_CELL_VOLTAGE_s can_tableCellVoltages = {.header.uniqueId = DATA_BLOCK_ID_CELL_VOLTAGE}; -static DATA_BLOCK_CELL_TEMPERATURE_s can_tableTemperatures = {.header.uniqueId = DATA_BLOCK_ID_CELL_TEMPERATURE}; -static DATA_BLOCK_MIN_MAX_s can_tableMinimumMaximumValues = {.header.uniqueId = DATA_BLOCK_ID_MIN_MAX}; -static DATA_BLOCK_CURRENT_SENSOR_s can_tableCurrentSensor = {.header.uniqueId = DATA_BLOCK_ID_CURRENT_SENSOR}; -static DATA_BLOCK_OPEN_WIRE_s can_tableOpenWire = {.header.uniqueId = DATA_BLOCK_ID_OPEN_WIRE_BASE}; -static DATA_BLOCK_STATE_REQUEST_s can_tableStateRequest = {.header.uniqueId = DATA_BLOCK_ID_STATE_REQUEST}; -static DATA_BLOCK_PACK_VALUES_s can_tablePackValues = {.header.uniqueId = DATA_BLOCK_ID_PACK_VALUES}; -static DATA_BLOCK_SOF_s can_tableSof = {.header.uniqueId = DATA_BLOCK_ID_SOF}; -static DATA_BLOCK_SOC_s can_tableSoc = {.header.uniqueId = DATA_BLOCK_ID_SOC}; -static DATA_BLOCK_SOE_s can_tableSoe = {.header.uniqueId = DATA_BLOCK_ID_SOE}; -static DATA_BLOCK_ERROR_STATE_s can_tableErrorState = {.header.uniqueId = DATA_BLOCK_ID_ERROR_STATE}; -static DATA_BLOCK_INSULATION_MONITORING_s can_tableInsulation = { - .header.uniqueId = DATA_BLOCK_ID_INSULATION_MONITORING}; -static DATA_BLOCK_MSL_FLAG_s can_tableMslFlags = {.header.uniqueId = DATA_BLOCK_ID_MSL_FLAG}; -static DATA_BLOCK_RSL_FLAG_s can_tableRslFlags = {.header.uniqueId = DATA_BLOCK_ID_RSL_FLAG}; -static DATA_BLOCK_MOL_FLAG_s can_tableMolFlags = {.header.uniqueId = DATA_BLOCK_ID_MOL_FLAG}; -static DATA_BLOCK_AEROSOL_SENSOR_s can_tableAerosolSensor = {.header.uniqueId = DATA_BLOCK_ID_AEROSOL_SENSOR}; - -OS_QUEUE imd_canDataQueue = NULL_PTR; - -const CAN_SHIM_s can_kShim = { - .pQueueImd = &imd_canDataQueue, - .pTableCellVoltage = &can_tableCellVoltages, - .pTableCellTemperature = &can_tableTemperatures, - .pTableMinMax = &can_tableMinimumMaximumValues, - .pTableCurrentSensor = &can_tableCurrentSensor, - .pTableOpenWire = &can_tableOpenWire, - .pTableStateRequest = &can_tableStateRequest, - .pTablePackValues = &can_tablePackValues, - .pTableSof = &can_tableSof, - .pTableSoc = &can_tableSoc, - .pTableSoe = &can_tableSoe, - .pTableErrorState = &can_tableErrorState, - .pTableInsulation = &can_tableInsulation, - .pTableMsl = &can_tableMslFlags, - .pTableRsl = &can_tableRslFlags, - .pTableMol = &can_tableMolFlags, - .pTableAerosolSensor = &can_tableAerosolSensor, -}; - -/*========== Setup and Teardown =============================================*/ -void setUp(void) { -} - -void tearDown(void) { -} - -/*========== Test Cases =====================================================*/ -void testCAN_TxStateEstimationCharging(void) { - CAN_MESSAGE_PROPERTIES_s testMessage = { - .id = CANTX_PACK_STATE_ESTIMATION_ID, - .idType = CANTX_PACK_STATE_ESTIMATION_ID_TYPE, - .dlc = 8u, - .endianness = CANTX_PACK_STATE_ESTIMATION_ENDIANNESS, - }; - uint8_t data[8] = {0}; - - for (uint8_t s = 0u; s < BS_NR_OF_STRINGS; s++) { - can_kShim.pTableSoc->minimumSoc_perc[s] = 71.2f; - can_kShim.pTableSoc->maximumSoc_perc[s] = 74.2f; - can_kShim.pTableSoe->minimumSoe_perc[s] = 74.6f; - can_kShim.pTableSoe->maximumSoe_perc[s] = 78.1f; - can_kShim.pTableSoe->minimumSoe_Wh[s] = 19200 / BS_NR_OF_STRINGS; - } - - DATA_Read2DataBlocks_IgnoreAndReturn(0u); - /* System is currently charging */ - BMS_GetBatterySystemState_IgnoreAndReturn(BMS_CHARGING); - /* All strings connected */ - for (uint8_t s = 0; s < BS_NR_OF_STRINGS; s++) { - BMS_IsStringClosed_IgnoreAndReturn(true); - } - BMS_GetNumberOfConnectedStrings_IgnoreAndReturn(BS_NR_OF_STRINGS); - BMS_GetBatterySystemState_IgnoreAndReturn(BMS_CHARGING); - BMS_GetNumberOfConnectedStrings_IgnoreAndReturn(BS_NR_OF_STRINGS); - BMS_GetNumberOfConnectedStrings_IgnoreAndReturn(BS_NR_OF_STRINGS); - BMS_GetNumberOfConnectedStrings_IgnoreAndReturn(BS_NR_OF_STRINGS); - - CANTX_PackStateEstimation(testMessage, data, NULL_PTR, &can_kShim); - - /** Values of: - * pack SOC: 74.2% - * pack SOE: 78.1% - * pack Energy: 19.2kWh - * pack SOH: 100.0% - */ - TEST_ASSERT_EQUAL(0x73, data[0]); - TEST_ASSERT_EQUAL(0xED, data[1]); - TEST_ASSERT_EQUAL(0xE8, data[2]); - TEST_ASSERT_EQUAL(0x2F, data[3]); - TEST_ASSERT_EQUAL(0xA0, data[4]); - TEST_ASSERT_EQUAL(0x00, data[5]); - TEST_ASSERT_EQUAL(0x07, data[6]); - TEST_ASSERT_EQUAL(0x80, data[7]); -} - -void testCAN_TxStateEstimationDischarging(void) { - CAN_MESSAGE_PROPERTIES_s testMessage = { - .id = CANTX_PACK_STATE_ESTIMATION_ID, - .idType = CANTX_PACK_STATE_ESTIMATION_ID_TYPE, - .dlc = 8u, - .endianness = CANTX_PACK_STATE_ESTIMATION_ENDIANNESS, - }; - - uint8_t data[8] = {0}; - - for (uint8_t s = 0u; s < BS_NR_OF_STRINGS; s++) { - can_kShim.pTableSoc->minimumSoc_perc[s] = 74.2f; - can_kShim.pTableSoc->maximumSoc_perc[s] = 78.2f; - can_kShim.pTableSoe->minimumSoe_perc[s] = 78.1f; - can_kShim.pTableSoe->maximumSoe_perc[s] = 83.1f; - can_kShim.pTableSoe->minimumSoe_Wh[s] = 19200 / BS_NR_OF_STRINGS; - } - - DATA_Read2DataBlocks_IgnoreAndReturn(0u); - /* System is currently charging */ - BMS_GetBatterySystemState_IgnoreAndReturn(BMS_DISCHARGING); - /* All strings connected */ - for (uint8_t s = 0; s < BS_NR_OF_STRINGS; s++) { - BMS_IsStringClosed_IgnoreAndReturn(true); - } - BMS_GetNumberOfConnectedStrings_IgnoreAndReturn(BS_NR_OF_STRINGS); - BMS_GetBatterySystemState_IgnoreAndReturn(BMS_DISCHARGING); - BMS_GetNumberOfConnectedStrings_IgnoreAndReturn(BS_NR_OF_STRINGS); - BMS_GetNumberOfConnectedStrings_IgnoreAndReturn(BS_NR_OF_STRINGS); - BMS_GetNumberOfConnectedStrings_IgnoreAndReturn(BS_NR_OF_STRINGS); - - CANTX_PackStateEstimation(testMessage, data, NULL_PTR, &can_kShim); - - /** Values of: - * pack SOC: 74.2% - * pack SOE: 78.1% - * pack Energy: 19.2kWh - * pack SOH: 100.0% - */ - TEST_ASSERT_EQUAL(0x73, data[0]); - TEST_ASSERT_EQUAL(0xED, data[1]); - TEST_ASSERT_EQUAL(0xE8, data[2]); - TEST_ASSERT_EQUAL(0x2F, data[3]); - TEST_ASSERT_EQUAL(0xA0, data[4]); - TEST_ASSERT_EQUAL(0x00, data[5]); - TEST_ASSERT_EQUAL(0x07, data[6]); - TEST_ASSERT_EQUAL(0x80, data[7]); -} diff --git a/tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_pack-values-p0.c b/tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_pack-values-p0.c deleted file mode 100644 index bdce1a09..00000000 --- a/tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_pack-values-p0.c +++ /dev/null @@ -1,164 +0,0 @@ -/** - * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. - * All rights reserved. - * - * SPDX-License-Identifier: BSD-3-Clause - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * 3. Neither the name of the copyright holder nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * We kindly request you to use one or more of the following phrases to refer to - * foxBMS in your hardware, software, documentation or advertising materials: - * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ - * - */ - -/** - * @file test_can_cbs_tx_pack-values-p0.c - * @author foxBMS Team - * @date 2021-07-27 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup UNIT_TEST_IMPLEMENTATION - * @prefix TEST - * - * @brief Tests for the CAN driver callbacks - * - */ - -/*========== Includes =======================================================*/ -#include "unity.h" -#include "Mockcan.h" -#include "Mockdatabase.h" -#include "Mockdiag.h" -#include "Mockfoxmath.h" -#include "Mockimd.h" -#include "Mockos.h" - -#include "database_cfg.h" - -#include "can_cbs_tx.h" -#include "can_cfg_tx-message-definitions.h" -#include "can_helper.h" - -/*========== Unit Testing Framework Directives ==============================*/ -TEST_SOURCE_FILE("can_cbs_tx_pack-values-p0.c") - -TEST_INCLUDE_PATH("../../src/app/application/bms") -TEST_INCLUDE_PATH("../../src/app/driver/can") -TEST_INCLUDE_PATH("../../src/app/driver/can/cbs") -TEST_INCLUDE_PATH("../../src/app/driver/can/cbs/tx") -TEST_INCLUDE_PATH("../../src/app/driver/config") -TEST_INCLUDE_PATH("../../src/app/driver/foxmath") -TEST_INCLUDE_PATH("../../src/app/driver/imd") -TEST_INCLUDE_PATH("../../src/app/engine/diag") -TEST_INCLUDE_PATH("../../src/app/task/config") - -/*========== Definitions and Implementations for Unit Test ==================*/ - -static DATA_BLOCK_CELL_VOLTAGE_s can_tableCellVoltages = {.header.uniqueId = DATA_BLOCK_ID_CELL_VOLTAGE}; -static DATA_BLOCK_CELL_TEMPERATURE_s can_tableTemperatures = {.header.uniqueId = DATA_BLOCK_ID_CELL_TEMPERATURE}; -static DATA_BLOCK_MIN_MAX_s can_tableMinimumMaximumValues = {.header.uniqueId = DATA_BLOCK_ID_MIN_MAX}; -static DATA_BLOCK_CURRENT_SENSOR_s can_tableCurrentSensor = {.header.uniqueId = DATA_BLOCK_ID_CURRENT_SENSOR}; -static DATA_BLOCK_OPEN_WIRE_s can_tableOpenWire = {.header.uniqueId = DATA_BLOCK_ID_OPEN_WIRE_BASE}; -static DATA_BLOCK_STATE_REQUEST_s can_tableStateRequest = {.header.uniqueId = DATA_BLOCK_ID_STATE_REQUEST}; -static DATA_BLOCK_PACK_VALUES_s can_tablePackValues = {.header.uniqueId = DATA_BLOCK_ID_PACK_VALUES}; -static DATA_BLOCK_SOF_s can_tableSof = {.header.uniqueId = DATA_BLOCK_ID_SOF}; -static DATA_BLOCK_SOC_s can_tableSoc = {.header.uniqueId = DATA_BLOCK_ID_SOC}; -static DATA_BLOCK_SOE_s can_tableSoe = {.header.uniqueId = DATA_BLOCK_ID_SOE}; -static DATA_BLOCK_ERROR_STATE_s can_tableErrorState = {.header.uniqueId = DATA_BLOCK_ID_ERROR_STATE}; -static DATA_BLOCK_INSULATION_MONITORING_s can_tableInsulation = { - .header.uniqueId = DATA_BLOCK_ID_INSULATION_MONITORING}; -static DATA_BLOCK_MSL_FLAG_s can_tableMslFlags = {.header.uniqueId = DATA_BLOCK_ID_MSL_FLAG}; -static DATA_BLOCK_RSL_FLAG_s can_tableRslFlags = {.header.uniqueId = DATA_BLOCK_ID_RSL_FLAG}; -static DATA_BLOCK_MOL_FLAG_s can_tableMolFlags = {.header.uniqueId = DATA_BLOCK_ID_MOL_FLAG}; -static DATA_BLOCK_AEROSOL_SENSOR_s can_tableAerosolSensor = {.header.uniqueId = DATA_BLOCK_ID_AEROSOL_SENSOR}; - -OS_QUEUE imd_canDataQueue = NULL_PTR; - -const CAN_SHIM_s can_kShim = { - .pQueueImd = &imd_canDataQueue, - .pTableCellVoltage = &can_tableCellVoltages, - .pTableCellTemperature = &can_tableTemperatures, - .pTableMinMax = &can_tableMinimumMaximumValues, - .pTableCurrentSensor = &can_tableCurrentSensor, - .pTableOpenWire = &can_tableOpenWire, - .pTableStateRequest = &can_tableStateRequest, - .pTablePackValues = &can_tablePackValues, - .pTableSof = &can_tableSof, - .pTableSoc = &can_tableSoc, - .pTableSoe = &can_tableSoe, - .pTableErrorState = &can_tableErrorState, - .pTableInsulation = &can_tableInsulation, - .pTableMsl = &can_tableMslFlags, - .pTableRsl = &can_tableRslFlags, - .pTableMol = &can_tableMolFlags, - .pTableAerosolSensor = &can_tableAerosolSensor, -}; - -/*========== Setup and Teardown =============================================*/ -void setUp(void) { -} - -void tearDown(void) { -} - -/*========== Test Cases =====================================================*/ -void testCAN_TxPackValues(void) { - CAN_MESSAGE_PROPERTIES_s testMessage = { - .id = CANTX_PACK_VALUES_ID, - .idType = CANTX_PACK_VALUES_ID_TYPE, - .dlc = 8u, - .endianness = CANTX_PACK_VALUES_ENDIANNESS, - }; - uint8_t data[8] = {0}; - - can_kShim.pTablePackValues->packCurrent_mA = -200500; - can_kShim.pTablePackValues->batteryVoltage_mV = 324800; - can_kShim.pTablePackValues->highVoltageBusVoltage_mV = 325100; - can_kShim.pTablePackValues->packPower_W = -65100; - - DATA_Read1DataBlock_IgnoreAndReturn(0u); - CANTX_PackValues(testMessage, data, NULL_PTR, &can_kShim); - - /** Values of: - * pack current: -200.5A - * battery voltage: 324.8V - * bus voltage: 325.1V - * pack power: -65.1kW - */ - TEST_ASSERT_EQUAL(0x32, data[0]); - TEST_ASSERT_EQUAL(0xC0, data[1]); - TEST_ASSERT_EQUAL(0xCB, data[2]); - TEST_ASSERT_EQUAL(0x3F, data[3]); - TEST_ASSERT_EQUAL(0x9A, data[4]); - TEST_ASSERT_EQUAL(0x4B, data[5]); - TEST_ASSERT_EQUAL(0xB1, data[6]); - TEST_ASSERT_EQUAL(0xAE, data[7]); -} diff --git a/tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_pack-values-p1.c b/tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_pack-values-p1.c deleted file mode 100644 index 535fa10a..00000000 --- a/tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_pack-values-p1.c +++ /dev/null @@ -1,132 +0,0 @@ -/** - * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. - * All rights reserved. - * - * SPDX-License-Identifier: BSD-3-Clause - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * 3. Neither the name of the copyright holder nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * We kindly request you to use one or more of the following phrases to refer to - * foxBMS in your hardware, software, documentation or advertising materials: - * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ - * - */ - -/** - * @file test_can_cbs_tx_pack-values-p1.c - * @author foxBMS Team - * @date 2023-05-31 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup UNIT_TEST_IMPLEMENTATION - * @prefix TEST - * - * @brief Tests for the CAN driver callbacks - * - */ - -/*========== Includes =======================================================*/ -#include "unity.h" -#include "Mockcan.h" -#include "Mockdatabase.h" -#include "Mockdiag.h" -#include "Mockfoxmath.h" -#include "Mockimd.h" -#include "Mockos.h" - -#include "database_cfg.h" - -#include "can_cbs_tx.h" -#include "can_cfg_tx-message-definitions.h" -#include "can_helper.h" - -/*========== Unit Testing Framework Directives ==============================*/ -TEST_SOURCE_FILE("can_cbs_tx_pack-values-p1.c") - -TEST_INCLUDE_PATH("../../src/app/application/bms") -TEST_INCLUDE_PATH("../../src/app/driver/can") -TEST_INCLUDE_PATH("../../src/app/driver/can/cbs") -TEST_INCLUDE_PATH("../../src/app/driver/can/cbs/tx") -TEST_INCLUDE_PATH("../../src/app/driver/config") -TEST_INCLUDE_PATH("../../src/app/driver/foxmath") -TEST_INCLUDE_PATH("../../src/app/driver/imd") -TEST_INCLUDE_PATH("../../src/app/engine/diag") -TEST_INCLUDE_PATH("../../src/app/task/config") - -/*========== Definitions and Implementations for Unit Test ==================*/ - -static DATA_BLOCK_CELL_VOLTAGE_s can_tableCellVoltages = {.header.uniqueId = DATA_BLOCK_ID_CELL_VOLTAGE}; -static DATA_BLOCK_CELL_TEMPERATURE_s can_tableTemperatures = {.header.uniqueId = DATA_BLOCK_ID_CELL_TEMPERATURE}; -static DATA_BLOCK_MIN_MAX_s can_tableMinimumMaximumValues = {.header.uniqueId = DATA_BLOCK_ID_MIN_MAX}; -static DATA_BLOCK_CURRENT_SENSOR_s can_tableCurrentSensor = {.header.uniqueId = DATA_BLOCK_ID_CURRENT_SENSOR}; -static DATA_BLOCK_OPEN_WIRE_s can_tableOpenWire = {.header.uniqueId = DATA_BLOCK_ID_OPEN_WIRE_BASE}; -static DATA_BLOCK_STATE_REQUEST_s can_tableStateRequest = {.header.uniqueId = DATA_BLOCK_ID_STATE_REQUEST}; -static DATA_BLOCK_PACK_VALUES_s can_tablePackValues = {.header.uniqueId = DATA_BLOCK_ID_PACK_VALUES}; -static DATA_BLOCK_SOF_s can_tableSof = {.header.uniqueId = DATA_BLOCK_ID_SOF}; -static DATA_BLOCK_SOC_s can_tableSoc = {.header.uniqueId = DATA_BLOCK_ID_SOC}; -static DATA_BLOCK_SOE_s can_tableSoe = {.header.uniqueId = DATA_BLOCK_ID_SOE}; -static DATA_BLOCK_ERROR_STATE_s can_tableErrorState = {.header.uniqueId = DATA_BLOCK_ID_ERROR_STATE}; -static DATA_BLOCK_INSULATION_MONITORING_s can_tableInsulation = { - .header.uniqueId = DATA_BLOCK_ID_INSULATION_MONITORING}; -static DATA_BLOCK_MSL_FLAG_s can_tableMslFlags = {.header.uniqueId = DATA_BLOCK_ID_MSL_FLAG}; -static DATA_BLOCK_RSL_FLAG_s can_tableRslFlags = {.header.uniqueId = DATA_BLOCK_ID_RSL_FLAG}; -static DATA_BLOCK_MOL_FLAG_s can_tableMolFlags = {.header.uniqueId = DATA_BLOCK_ID_MOL_FLAG}; - -OS_QUEUE imd_canDataQueue = NULL_PTR; - -const CAN_SHIM_s can_kShim = { - .pQueueImd = &imd_canDataQueue, - .pTableCellVoltage = &can_tableCellVoltages, - .pTableCellTemperature = &can_tableTemperatures, - .pTableMinMax = &can_tableMinimumMaximumValues, - .pTableCurrentSensor = &can_tableCurrentSensor, - .pTableOpenWire = &can_tableOpenWire, - .pTableStateRequest = &can_tableStateRequest, - .pTablePackValues = &can_tablePackValues, - .pTableSof = &can_tableSof, - .pTableSoc = &can_tableSoc, - .pTableSoe = &can_tableSoe, - .pTableErrorState = &can_tableErrorState, - .pTableInsulation = &can_tableInsulation, - .pTableMsl = &can_tableMslFlags, - .pTableRsl = &can_tableRslFlags, - .pTableMol = &can_tableMolFlags, -}; - -/*========== Setup and Teardown =============================================*/ -void setUp(void) { -} - -void tearDown(void) { -} - -/*========== Test Cases =====================================================*/ -void testDummy(void) { -} diff --git a/tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_string-state-estimation.c b/tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_string-state-estimation.c deleted file mode 100644 index 37eff60d..00000000 --- a/tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_string-state-estimation.c +++ /dev/null @@ -1,137 +0,0 @@ -/** - * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. - * All rights reserved. - * - * SPDX-License-Identifier: BSD-3-Clause - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * 3. Neither the name of the copyright holder nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * We kindly request you to use one or more of the following phrases to refer to - * foxBMS in your hardware, software, documentation or advertising materials: - * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ - * - */ - -/** - * @file test_can_cbs_tx_string-state-estimation.c - * @author foxBMS Team - * @date 2021-07-27 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup UNIT_TEST_IMPLEMENTATION - * @prefix TEST - * - * @brief Tests for the CAN driver callbacks - * - */ - -/*========== Includes =======================================================*/ -#include "unity.h" -#include "Mockbms.h" -#include "Mockcan.h" -#include "Mockdatabase.h" -#include "Mockdiag.h" -#include "Mockfoxmath.h" -#include "Mockimd.h" -#include "Mockos.h" - -#include "database_cfg.h" - -#include "can_cbs_tx.h" -#include "can_cfg_tx-message-definitions.h" -#include "can_helper.h" - -/*========== Unit Testing Framework Directives ==============================*/ -TEST_SOURCE_FILE("can_cbs_tx_string-state-estimation.c") - -TEST_INCLUDE_PATH("../../src/app/application/bms") -TEST_INCLUDE_PATH("../../src/app/driver/can") -TEST_INCLUDE_PATH("../../src/app/driver/can/cbs") -TEST_INCLUDE_PATH("../../src/app/driver/can/cbs/tx") -TEST_INCLUDE_PATH("../../src/app/driver/config") -TEST_INCLUDE_PATH("../../src/app/driver/contactor") -TEST_INCLUDE_PATH("../../src/app/driver/foxmath") -TEST_INCLUDE_PATH("../../src/app/driver/imd") -TEST_INCLUDE_PATH("../../src/app/driver/sps") -TEST_INCLUDE_PATH("../../src/app/engine/diag") -TEST_INCLUDE_PATH("../../src/app/task/config") - -/*========== Definitions and Implementations for Unit Test ==================*/ - -static DATA_BLOCK_CELL_VOLTAGE_s can_tableCellVoltages = {.header.uniqueId = DATA_BLOCK_ID_CELL_VOLTAGE}; -static DATA_BLOCK_CELL_TEMPERATURE_s can_tableTemperatures = {.header.uniqueId = DATA_BLOCK_ID_CELL_TEMPERATURE}; -static DATA_BLOCK_MIN_MAX_s can_tableMinimumMaximumValues = {.header.uniqueId = DATA_BLOCK_ID_MIN_MAX}; -static DATA_BLOCK_CURRENT_SENSOR_s can_tableCurrentSensor = {.header.uniqueId = DATA_BLOCK_ID_CURRENT_SENSOR}; -static DATA_BLOCK_OPEN_WIRE_s can_tableOpenWire = {.header.uniqueId = DATA_BLOCK_ID_OPEN_WIRE_BASE}; -static DATA_BLOCK_STATE_REQUEST_s can_tableStateRequest = {.header.uniqueId = DATA_BLOCK_ID_STATE_REQUEST}; -static DATA_BLOCK_PACK_VALUES_s can_tablePackValues = {.header.uniqueId = DATA_BLOCK_ID_PACK_VALUES}; -static DATA_BLOCK_SOF_s can_tableSof = {.header.uniqueId = DATA_BLOCK_ID_SOF}; -static DATA_BLOCK_SOC_s can_tableSoc = {.header.uniqueId = DATA_BLOCK_ID_SOC}; -static DATA_BLOCK_SOE_s can_tableSoe = {.header.uniqueId = DATA_BLOCK_ID_SOE}; -static DATA_BLOCK_ERROR_STATE_s can_tableErrorState = {.header.uniqueId = DATA_BLOCK_ID_ERROR_STATE}; -static DATA_BLOCK_INSULATION_MONITORING_s can_tableInsulation = { - .header.uniqueId = DATA_BLOCK_ID_INSULATION_MONITORING}; -static DATA_BLOCK_MSL_FLAG_s can_tableMslFlags = {.header.uniqueId = DATA_BLOCK_ID_MSL_FLAG}; -static DATA_BLOCK_RSL_FLAG_s can_tableRslFlags = {.header.uniqueId = DATA_BLOCK_ID_RSL_FLAG}; -static DATA_BLOCK_MOL_FLAG_s can_tableMolFlags = {.header.uniqueId = DATA_BLOCK_ID_MOL_FLAG}; -static DATA_BLOCK_AEROSOL_SENSOR_s can_tableAerosolSensor = {.header.uniqueId = DATA_BLOCK_ID_AEROSOL_SENSOR}; - -OS_QUEUE imd_canDataQueue = NULL_PTR; - -const CAN_SHIM_s can_kShim = { - .pQueueImd = &imd_canDataQueue, - .pTableCellVoltage = &can_tableCellVoltages, - .pTableCellTemperature = &can_tableTemperatures, - .pTableMinMax = &can_tableMinimumMaximumValues, - .pTableCurrentSensor = &can_tableCurrentSensor, - .pTableOpenWire = &can_tableOpenWire, - .pTableStateRequest = &can_tableStateRequest, - .pTablePackValues = &can_tablePackValues, - .pTableSof = &can_tableSof, - .pTableSoc = &can_tableSoc, - .pTableSoe = &can_tableSoe, - .pTableErrorState = &can_tableErrorState, - .pTableInsulation = &can_tableInsulation, - .pTableMsl = &can_tableMslFlags, - .pTableRsl = &can_tableRslFlags, - .pTableMol = &can_tableMolFlags, - .pTableAerosolSensor = &can_tableAerosolSensor, -}; - -/*========== Setup and Teardown =============================================*/ -void setUp(void) { -} - -void tearDown(void) { -} - -/*========== Test Cases =====================================================*/ -void testDummy(void) { -} diff --git a/tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_string-state.c b/tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_string-state.c deleted file mode 100644 index ef091808..00000000 --- a/tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_string-state.c +++ /dev/null @@ -1,137 +0,0 @@ -/** - * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. - * All rights reserved. - * - * SPDX-License-Identifier: BSD-3-Clause - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * 3. Neither the name of the copyright holder nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * We kindly request you to use one or more of the following phrases to refer to - * foxBMS in your hardware, software, documentation or advertising materials: - * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ - * - */ - -/** - * @file test_can_cbs_tx_string-state.c - * @author foxBMS Team - * @date 2023-05-31 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup UNIT_TEST_IMPLEMENTATION - * @prefix TEST - * - * @brief Tests for the CAN driver callbacks - * - */ - -/*========== Includes =======================================================*/ -#include "unity.h" -#include "Mockbms.h" -#include "Mockcan.h" -#include "Mockdatabase.h" -#include "Mockdiag.h" -#include "Mockfoxmath.h" -#include "Mockimd.h" -#include "Mockos.h" -#include "Mocksys_mon.h" - -#include "database_cfg.h" - -#include "can_cbs_tx.h" -#include "can_helper.h" - -/*========== Unit Testing Framework Directives ==============================*/ -TEST_SOURCE_FILE("can_cbs_tx_string-state.c") - -TEST_INCLUDE_PATH("../../src/app/application/bms") -TEST_INCLUDE_PATH("../../src/app/driver/can") -TEST_INCLUDE_PATH("../../src/app/driver/can/cbs") -TEST_INCLUDE_PATH("../../src/app/driver/can/cbs/tx") -TEST_INCLUDE_PATH("../../src/app/driver/config") -TEST_INCLUDE_PATH("../../src/app/driver/contactor") -TEST_INCLUDE_PATH("../../src/app/driver/foxmath") -TEST_INCLUDE_PATH("../../src/app/driver/fram") -TEST_INCLUDE_PATH("../../src/app/driver/imd") -TEST_INCLUDE_PATH("../../src/app/driver/sps") -TEST_INCLUDE_PATH("../../src/app/engine/diag") -TEST_INCLUDE_PATH("../../src/app/engine/sys_mon") -TEST_INCLUDE_PATH("../../src/app/task/config") - -/*========== Definitions and Implementations for Unit Test ==================*/ - -static DATA_BLOCK_CELL_VOLTAGE_s can_tableCellVoltages = {.header.uniqueId = DATA_BLOCK_ID_CELL_VOLTAGE}; -static DATA_BLOCK_CELL_TEMPERATURE_s can_tableTemperatures = {.header.uniqueId = DATA_BLOCK_ID_CELL_TEMPERATURE}; -static DATA_BLOCK_MIN_MAX_s can_tableMinimumMaximumValues = {.header.uniqueId = DATA_BLOCK_ID_MIN_MAX}; -static DATA_BLOCK_CURRENT_SENSOR_s can_tableCurrentSensor = {.header.uniqueId = DATA_BLOCK_ID_CURRENT_SENSOR}; -static DATA_BLOCK_OPEN_WIRE_s can_tableOpenWire = {.header.uniqueId = DATA_BLOCK_ID_OPEN_WIRE_BASE}; -static DATA_BLOCK_STATE_REQUEST_s can_tableStateRequest = {.header.uniqueId = DATA_BLOCK_ID_STATE_REQUEST}; -static DATA_BLOCK_PACK_VALUES_s can_tablePackValues = {.header.uniqueId = DATA_BLOCK_ID_PACK_VALUES}; -static DATA_BLOCK_SOF_s can_tableSof = {.header.uniqueId = DATA_BLOCK_ID_SOF}; -static DATA_BLOCK_SOC_s can_tableSoc = {.header.uniqueId = DATA_BLOCK_ID_SOC}; -static DATA_BLOCK_SOE_s can_tableSoe = {.header.uniqueId = DATA_BLOCK_ID_SOE}; -static DATA_BLOCK_ERROR_STATE_s can_tableErrorState = {.header.uniqueId = DATA_BLOCK_ID_ERROR_STATE}; -static DATA_BLOCK_INSULATION_MONITORING_s can_tableInsulation = { - .header.uniqueId = DATA_BLOCK_ID_INSULATION_MONITORING}; -static DATA_BLOCK_MSL_FLAG_s can_tableMslFlags = {.header.uniqueId = DATA_BLOCK_ID_MSL_FLAG}; -static DATA_BLOCK_RSL_FLAG_s can_tableRslFlags = {.header.uniqueId = DATA_BLOCK_ID_RSL_FLAG}; -static DATA_BLOCK_MOL_FLAG_s can_tableMolFlags = {.header.uniqueId = DATA_BLOCK_ID_MOL_FLAG}; - -OS_QUEUE imd_canDataQueue = NULL_PTR; - -const CAN_SHIM_s can_kShim = { - .pQueueImd = &imd_canDataQueue, - .pTableCellVoltage = &can_tableCellVoltages, - .pTableCellTemperature = &can_tableTemperatures, - .pTableMinMax = &can_tableMinimumMaximumValues, - .pTableCurrentSensor = &can_tableCurrentSensor, - .pTableOpenWire = &can_tableOpenWire, - .pTableStateRequest = &can_tableStateRequest, - .pTablePackValues = &can_tablePackValues, - .pTableSof = &can_tableSof, - .pTableSoc = &can_tableSoc, - .pTableSoe = &can_tableSoe, - .pTableErrorState = &can_tableErrorState, - .pTableInsulation = &can_tableInsulation, - .pTableMsl = &can_tableMslFlags, - .pTableRsl = &can_tableRslFlags, - .pTableMol = &can_tableMolFlags, -}; - -/*========== Setup and Teardown =============================================*/ -void setUp(void) { -} - -void tearDown(void) { -} - -/*========== Test Cases =====================================================*/ -void testDummy(void) { -} diff --git a/tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_string-values-p0.c b/tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_string-values-p0.c deleted file mode 100644 index d4cdae64..00000000 --- a/tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_string-values-p0.c +++ /dev/null @@ -1,132 +0,0 @@ -/** - * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. - * All rights reserved. - * - * SPDX-License-Identifier: BSD-3-Clause - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * 3. Neither the name of the copyright holder nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * We kindly request you to use one or more of the following phrases to refer to - * foxBMS in your hardware, software, documentation or advertising materials: - * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ - * - */ - -/** - * @file test_can_cbs_tx_string-values-p0.c - * @author foxBMS Team - * @date 2023-05-31 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 - * @ingroup UNIT_TEST_IMPLEMENTATION - * @prefix TEST - * - * @brief Tests for the CAN driver callbacks - * - */ - -/*========== Includes =======================================================*/ -#include "unity.h" -#include "Mockcan.h" -#include "Mockdatabase.h" -#include "Mockdiag.h" -#include "Mockfoxmath.h" -#include "Mockimd.h" -#include "Mockos.h" - -#include "database_cfg.h" - -#include "can_cbs_tx.h" -#include "can_cfg_tx-message-definitions.h" -#include "can_helper.h" - -/*========== Unit Testing Framework Directives ==============================*/ -TEST_SOURCE_FILE("can_cbs_tx_string-values-p0.c") - -TEST_INCLUDE_PATH("../../src/app/application/bms") -TEST_INCLUDE_PATH("../../src/app/driver/can") -TEST_INCLUDE_PATH("../../src/app/driver/can/cbs") -TEST_INCLUDE_PATH("../../src/app/driver/can/cbs/tx") -TEST_INCLUDE_PATH("../../src/app/driver/config") -TEST_INCLUDE_PATH("../../src/app/driver/foxmath") -TEST_INCLUDE_PATH("../../src/app/driver/imd") -TEST_INCLUDE_PATH("../../src/app/engine/diag") -TEST_INCLUDE_PATH("../../src/app/task/config") - -/*========== Definitions and Implementations for Unit Test ==================*/ - -static DATA_BLOCK_CELL_VOLTAGE_s can_tableCellVoltages = {.header.uniqueId = DATA_BLOCK_ID_CELL_VOLTAGE}; -static DATA_BLOCK_CELL_TEMPERATURE_s can_tableTemperatures = {.header.uniqueId = DATA_BLOCK_ID_CELL_TEMPERATURE}; -static DATA_BLOCK_MIN_MAX_s can_tableMinimumMaximumValues = {.header.uniqueId = DATA_BLOCK_ID_MIN_MAX}; -static DATA_BLOCK_CURRENT_SENSOR_s can_tableCurrentSensor = {.header.uniqueId = DATA_BLOCK_ID_CURRENT_SENSOR}; -static DATA_BLOCK_OPEN_WIRE_s can_tableOpenWire = {.header.uniqueId = DATA_BLOCK_ID_OPEN_WIRE_BASE}; -static DATA_BLOCK_STATE_REQUEST_s can_tableStateRequest = {.header.uniqueId = DATA_BLOCK_ID_STATE_REQUEST}; -static DATA_BLOCK_PACK_VALUES_s can_tablePackValues = {.header.uniqueId = DATA_BLOCK_ID_PACK_VALUES}; -static DATA_BLOCK_SOF_s can_tableSof = {.header.uniqueId = DATA_BLOCK_ID_SOF}; -static DATA_BLOCK_SOC_s can_tableSoc = {.header.uniqueId = DATA_BLOCK_ID_SOC}; -static DATA_BLOCK_SOE_s can_tableSoe = {.header.uniqueId = DATA_BLOCK_ID_SOE}; -static DATA_BLOCK_ERROR_STATE_s can_tableErrorState = {.header.uniqueId = DATA_BLOCK_ID_ERROR_STATE}; -static DATA_BLOCK_INSULATION_MONITORING_s can_tableInsulation = { - .header.uniqueId = DATA_BLOCK_ID_INSULATION_MONITORING}; -static DATA_BLOCK_MSL_FLAG_s can_tableMslFlags = {.header.uniqueId = DATA_BLOCK_ID_MSL_FLAG}; -static DATA_BLOCK_RSL_FLAG_s can_tableRslFlags = {.header.uniqueId = DATA_BLOCK_ID_RSL_FLAG}; -static DATA_BLOCK_MOL_FLAG_s can_tableMolFlags = {.header.uniqueId = DATA_BLOCK_ID_MOL_FLAG}; - -OS_QUEUE imd_canDataQueue = NULL_PTR; - -const CAN_SHIM_s can_kShim = { - .pQueueImd = &imd_canDataQueue, - .pTableCellVoltage = &can_tableCellVoltages, - .pTableCellTemperature = &can_tableTemperatures, - .pTableMinMax = &can_tableMinimumMaximumValues, - .pTableCurrentSensor = &can_tableCurrentSensor, - .pTableOpenWire = &can_tableOpenWire, - .pTableStateRequest = &can_tableStateRequest, - .pTablePackValues = &can_tablePackValues, - .pTableSof = &can_tableSof, - .pTableSoc = &can_tableSoc, - .pTableSoe = &can_tableSoe, - .pTableErrorState = &can_tableErrorState, - .pTableInsulation = &can_tableInsulation, - .pTableMsl = &can_tableMslFlags, - .pTableRsl = &can_tableRslFlags, - .pTableMol = &can_tableMolFlags, -}; - -/*========== Setup and Teardown =============================================*/ -void setUp(void) { -} - -void tearDown(void) { -} - -/*========== Test Cases =====================================================*/ -void testDummy(void) { -} diff --git a/tests/unit/app/driver/can/test_can.c b/tests/unit/app/driver/can/test_can.c index 2fea1f91..83608e27 100644 --- a/tests/unit/app/driver/can/test_can.c +++ b/tests/unit/app/driver/can/test_can.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_can.c * @author foxBMS Team * @date 2020-04-01 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/can/test_can_1.c b/tests/unit/app/driver/can/test_can_1.c index bd96bced..36cf9f9b 100644 --- a/tests/unit/app/driver/can/test_can_1.c +++ b/tests/unit/app/driver/can/test_can_1.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_can_1.c * @author foxBMS Team * @date 2023-03-13 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/can/test_can_2.c b/tests/unit/app/driver/can/test_can_2.c index f3ee85db..4516e076 100644 --- a/tests/unit/app/driver/can/test_can_2.c +++ b/tests/unit/app/driver/can/test_can_2.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_can_2.c * @author foxBMS Team * @date 2023-03-13 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/checksum/test_checksum.c b/tests/unit/app/driver/checksum/test_checksum.c index df14837b..f8bd262e 100644 --- a/tests/unit/app/driver/checksum/test_checksum.c +++ b/tests/unit/app/driver/checksum/test_checksum.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_checksum.c * @author foxBMS Team * @date 2020-04-01 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/config/test_can_cfg.c b/tests/unit/app/driver/config/test_can_cfg.c index 1b9e81fb..638576ab 100644 --- a/tests/unit/app/driver/config/test_can_cfg.c +++ b/tests/unit/app/driver/config/test_can_cfg.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_can_cfg.c * @author foxBMS Team * @date 2020-07-28 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/config/test_can_cfg_rx.c b/tests/unit/app/driver/config/test_can_cfg_rx.c index 783f4dc6..f696419b 100644 --- a/tests/unit/app/driver/config/test_can_cfg_rx.c +++ b/tests/unit/app/driver/config/test_can_cfg_rx.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_can_cfg_rx.c * @author foxBMS Team * @date 2020-07-28 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/config/test_can_cfg_tx.c b/tests/unit/app/driver/config/test_can_cfg_tx_cyclic.c similarity index 84% rename from tests/unit/app/driver/config/test_can_cfg_tx.c rename to tests/unit/app/driver/config/test_can_cfg_tx_cyclic.c index 9f22b450..55bba00d 100644 --- a/tests/unit/app/driver/config/test_can_cfg_tx.c +++ b/tests/unit/app/driver/config/test_can_cfg_tx_cyclic.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,18 +33,18 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ /** - * @file test_can_cfg_tx.c + * @file test_can_cfg_tx_cyclic.c * @author foxBMS Team * @date 2020-07-28 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * @@ -55,7 +55,7 @@ /*========== Includes =======================================================*/ #include "unity.h" #include "Mockcan.h" -#include "Mockcan_cbs_tx.h" +#include "Mockcan_cbs_tx_cyclic.h" #include "Mockdatabase.h" #include "Mockdiag.h" #include "Mockfoxmath.h" @@ -70,15 +70,18 @@ #include /*========== Unit Testing Framework Directives ==============================*/ -TEST_SOURCE_FILE("can_cfg_tx.c") +TEST_SOURCE_FILE("can_cfg_tx_cyclic.c") TEST_INCLUDE_PATH("../../src/app/driver/can") -TEST_INCLUDE_PATH("../../src/app/driver/can/cbs/tx") +TEST_INCLUDE_PATH("../../src/app/driver/can/cbs") +TEST_INCLUDE_PATH("../../src/app/driver/can/cbs/tx-cyclic") TEST_INCLUDE_PATH("../../src/app/driver/config") TEST_INCLUDE_PATH("../../src/app/driver/foxmath") +TEST_INCLUDE_PATH("../../src/app/driver/fram") TEST_INCLUDE_PATH("../../src/app/driver/imd") TEST_INCLUDE_PATH("../../src/app/driver/rtc") TEST_INCLUDE_PATH("../../src/app/engine/diag") +TEST_INCLUDE_PATH("../../src/app/engine/sys_mon") TEST_INCLUDE_PATH("../../src/app/task/config") TEST_INCLUDE_PATH("../../src/app/task/ftask") diff --git a/tests/unit/app/driver/config/test_contactor_cfg.c b/tests/unit/app/driver/config/test_contactor_cfg.c index f49a5d9e..3ee00b4b 100644 --- a/tests/unit/app/driver/config/test_contactor_cfg.c +++ b/tests/unit/app/driver/config/test_contactor_cfg.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_contactor_cfg.c * @author foxBMS Team * @date 2020-04-01 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/config/test_dma_cfg.c b/tests/unit/app/driver/config/test_dma_cfg.c index afcea5c9..12c8f304 100644 --- a/tests/unit/app/driver/config/test_dma_cfg.c +++ b/tests/unit/app/driver/config/test_dma_cfg.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_dma_cfg.c * @author foxBMS Team * @date 2020-04-01 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/config/test_fram_cfg.c b/tests/unit/app/driver/config/test_fram_cfg.c index 147cb4ae..38bcb12a 100644 --- a/tests/unit/app/driver/config/test_fram_cfg.c +++ b/tests/unit/app/driver/config/test_fram_cfg.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_fram_cfg.c * @author foxBMS Team * @date 2020-04-01 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/config/test_pex_cfg.c b/tests/unit/app/driver/config/test_pex_cfg.c index 80a10188..c231b29a 100644 --- a/tests/unit/app/driver/config/test_pex_cfg.c +++ b/tests/unit/app/driver/config/test_pex_cfg.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_pex_cfg.c * @author foxBMS Team * @date 2021-08-03 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/config/test_spi_cfg.c b/tests/unit/app/driver/config/test_spi_cfg.c index 2709e2e9..28fed0d0 100644 --- a/tests/unit/app/driver/config/test_spi_cfg.c +++ b/tests/unit/app/driver/config/test_spi_cfg.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_spi_cfg.c * @author foxBMS Team * @date 2020-04-01 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/config/test_sps_cfg.c b/tests/unit/app/driver/config/test_sps_cfg.c index 35684406..387f20ee 100644 --- a/tests/unit/app/driver/config/test_sps_cfg.c +++ b/tests/unit/app/driver/config/test_sps_cfg.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_sps_cfg.c * @author foxBMS Team * @date 2020-10-28 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/contactor/test_contactor.c b/tests/unit/app/driver/contactor/test_contactor.c index f3ffc261..d027487f 100644 --- a/tests/unit/app/driver/contactor/test_contactor.c +++ b/tests/unit/app/driver/contactor/test_contactor.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_contactor.c * @author foxBMS Team * @date 2020-03-31 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/crc/test_crc.c b/tests/unit/app/driver/crc/test_crc.c index bbe577da..6513b32d 100644 --- a/tests/unit/app/driver/crc/test_crc.c +++ b/tests/unit/app/driver/crc/test_crc.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_crc.c * @author foxBMS Team * @date 2022-02-23 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * @@ -71,5 +71,5 @@ void tearDown(void) { } /*========== Test Cases =====================================================*/ -void testDummy(void) { +void testCRC_CalculateCrc(void) { } diff --git a/tests/unit/app/driver/dma/test_dma.c b/tests/unit/app/driver/dma/test_dma.c index de609634..c5df97e5 100644 --- a/tests/unit/app/driver/dma/test_dma.c +++ b/tests/unit/app/driver/dma/test_dma.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_dma.c * @author foxBMS Team * @date 2020-04-01 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/foxmath/test_foxmath.c b/tests/unit/app/driver/foxmath/test_foxmath.c index 682b16b5..33304913 100644 --- a/tests/unit/app/driver/foxmath/test_foxmath.c +++ b/tests/unit/app/driver/foxmath/test_foxmath.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_foxmath.c * @author foxBMS Team * @date 2020-04-01 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * @@ -86,6 +86,11 @@ void tearDown(void) { } /*========== Test Cases =====================================================*/ + +void testMATH_StartupSelfTest(void) { + MATH_StartupSelfTest(); +} + void test_linearInterpolation_X1EqualsX2(void) { coord_x1 = coord_x2; TEST_ASSERT_EQUAL(coord_y1, MATH_LinearInterpolation(coord_x1, coord_y1, coord_x2, coord_y2, coord_x_interpolate)); @@ -187,3 +192,15 @@ void test_MATH_MinimumOfTwoUint16_t(void) { TEST_ASSERT_EQUAL_UINT16(0u, MATH_MinimumOfTwoUint16_t(UINT16_MAX, 0u)); TEST_ASSERT_EQUAL_UINT16(0u, MATH_MinimumOfTwoUint16_t(0u, UINT16_MAX)); } + +void testMATH_AbsInt32_t(void) { + TEST_ASSERT_EQUAL_INT32(5, MATH_AbsInt32_t(5)); + TEST_ASSERT_EQUAL_INT32(5, MATH_AbsInt32_t(-5)); + TEST_ASSERT_EQUAL_INT32(INT32_MAX, MATH_AbsInt32_t(INT32_MIN)); +} + +void testMATH_AbsInt64_t(void) { + TEST_ASSERT_EQUAL_INT32(5, MATH_AbsInt64_t(5)); + TEST_ASSERT_EQUAL_INT32(5, MATH_AbsInt64_t(-5)); + TEST_ASSERT_EQUAL_INT32(INT64_MAX, MATH_AbsInt64_t(INT64_MIN)); +} diff --git a/tests/unit/app/driver/fram/test_fram.c b/tests/unit/app/driver/fram/test_fram.c index 8c14f7ac..30568539 100644 --- a/tests/unit/app/driver/fram/test_fram.c +++ b/tests/unit/app/driver/fram/test_fram.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_fram.c * @author foxBMS Team * @date 2020-04-01 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * @@ -67,12 +67,14 @@ #include "fassert.h" #include "fram.h" +#include "test_assert_helper.h" #include /*========== Unit Testing Framework Directives ==============================*/ TEST_INCLUDE_PATH("../../src/app/driver/config") TEST_INCLUDE_PATH("../../src/app/driver/crc") +TEST_INCLUDE_PATH("../../src/app/driver/foxmath") TEST_INCLUDE_PATH("../../src/app/driver/fram") TEST_INCLUDE_PATH("../../src/app/driver/io") TEST_INCLUDE_PATH("../../src/app/driver/spi") @@ -99,5 +101,64 @@ void tearDown(void) { /*========== Test Cases =====================================================*/ -void testDummy(void) { +/** + * @brief Testing extern function #FRAM_WriteData + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/1: invalid blockId → assert + * - Routine validation: + * - RT1/x: TODO + */ +void testFRAM_WriteData(void) { + /* ======= Assertion tests ============================================= */ + const FRAM_BLOCK_ID_e invalidFramBlockId = (FRAM_BLOCK_ID_e)(FRAM_BLOCK_MAX + 1u); + /* ======= AT1/1: Assertion test */ + TEST_ASSERT_FAIL_ASSERT(FRAM_WriteData(invalidFramBlockId)); + /* ======= AT2/2: Assertion test */ + spi_framInterface.csType = SPI_CHIP_SELECT_HARDWARE; + TEST_ASSERT_FAIL_ASSERT(FRAM_ReadData(invalidFramBlockId)); +/* reset for tests */ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wunused-value" + spi_framInterface.csType == SPI_CHIP_SELECT_SOFTWARE; +#pragma GCC diagnostic pop + + /* ======= Routine tests =============================================== */ + /* ======= RT1/x: Test implementation */ + uint64_t crc = 0u; + uint8_t pWrite = 0u; + uint32_t lengthInBytes = 0u; + CRC_CalculateCrc_ExpectAndReturn(&crc, &pWrite, lengthInBytes, STD_NOT_OK); + CRC_CalculateCrc_IgnoreArg_pCrc(); + CRC_CalculateCrc_IgnoreArg_pData(); + CRC_CalculateCrc_IgnoreArg_lengthInBytes(); + FRAM_RETURN_TYPE_e ret = FRAM_WriteData(FRAM_BLOCK_ID_VERSION); + TEST_ASSERT_EQUAL(FRAM_ACCESS_CRC_BUSY, ret); +} + +/** + * @brief Testing extern function #FRAM_WriteData + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/2: invalid blockId → assert + * - AT2/2: invalid chip select type + * - Routine validation: + * - RT1/x: TODO + */ +void testFRAM_ReadData(void) { + /* ======= Assertion tests ============================================= */ + const FRAM_BLOCK_ID_e invalidFramBlockId = (FRAM_BLOCK_ID_e)(FRAM_BLOCK_MAX + 1u); + /* ======= AT1/2: Assertion test */ + TEST_ASSERT_FAIL_ASSERT(FRAM_ReadData(invalidFramBlockId)); + /* ======= AT2/2: Assertion test */ + spi_framInterface.csType = SPI_CHIP_SELECT_HARDWARE; + TEST_ASSERT_FAIL_ASSERT(FRAM_ReadData(invalidFramBlockId)); +/* reset for tests */ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wunused-value" + spi_framInterface.csType == SPI_CHIP_SELECT_SOFTWARE; +#pragma GCC diagnostic pop + + /* ======= Routine tests =============================================== */ + /* ======= RT1/x: Test implementation */ } diff --git a/tests/unit/app/driver/htsensor/test_htsensor.c b/tests/unit/app/driver/htsensor/test_htsensor.c index 7f9ed50a..79901f91 100644 --- a/tests/unit/app/driver/htsensor/test_htsensor.c +++ b/tests/unit/app/driver/htsensor/test_htsensor.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_htsensor.c * @author foxBMS Team * @date 2021-08-05 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/i2c/test_i2c.c b/tests/unit/app/driver/i2c/test_i2c.c index 58022141..3011a64c 100644 --- a/tests/unit/app/driver/i2c/test_i2c.c +++ b/tests/unit/app/driver/i2c/test_i2c.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_i2c.c * @author foxBMS Team * @date 2021-07-23 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * @@ -61,6 +61,7 @@ #include "Mocktask.h" #include "i2c.h" +#include "test_assert_helper.h" /*========== Unit Testing Framework Directives ==============================*/ TEST_INCLUDE_PATH("../../src/app/driver/config") @@ -88,3 +89,73 @@ void testI2c_Initialize(void) { i2cInit_Expect(); I2C_Initialize(); } + +/** + * @brief Testing extern function #I2C_WriteReadDma + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/6: NULL_PTR for pSocValues → assert + * - AT2/6: NULL_PTR for writeData → assert + * - AT3/6: invalid nrBytesWrite → assert + * - AT4/6: NULL_PTR for nrBytesWrite → assert + * - AT5/6: invalid nrBytesRead → assert + * - AT6/6: invalid slaveAddress → assert + * - Routine validation: + * - RT1/x: TODO + */ +void testI2C_WriteReadDma(void) { + /* ======= Assertion tests ============================================= */ + i2cBASE_t validI2cInterface; + uint32_t validSlaveAddress = 0u; + uint32_t validnrBytesWrite = 1u; + uint8_t validWriteData = 1u; + uint32_t validnrBytesRead = 2u; + uint8_t validReadData = 1u; + /* ======= AT1/6: Assertion test */ + TEST_ASSERT_FAIL_ASSERT(I2C_WriteReadDma( + NULL_PTR, validSlaveAddress, validnrBytesWrite, &validWriteData, validnrBytesRead, &validReadData)); + /* ======= AT2/6: Assertion test */ + TEST_ASSERT_FAIL_ASSERT(I2C_WriteReadDma( + &validI2cInterface, 130u, validnrBytesWrite, &validWriteData, validnrBytesRead, &validReadData)); + /* ======= AT3/6: Assertion test */ + TEST_ASSERT_FAIL_ASSERT( + I2C_WriteReadDma(&validI2cInterface, validSlaveAddress, 0u, &validWriteData, validnrBytesRead, &validReadData)); + /* ======= AT4/6: Assertion test */ + TEST_ASSERT_FAIL_ASSERT(I2C_WriteReadDma( + &validI2cInterface, validSlaveAddress, validnrBytesWrite, NULL_PTR, validnrBytesRead, &validReadData)); + /* ======= AT5/6: Assertion test */ + TEST_ASSERT_FAIL_ASSERT(I2C_WriteReadDma( + &validI2cInterface, validSlaveAddress, validnrBytesWrite, &validWriteData, 1u, &validReadData)); + /* ======= AT6/6: Assertion test */ + TEST_ASSERT_FAIL_ASSERT(I2C_WriteReadDma( + &validI2cInterface, validSlaveAddress, validnrBytesWrite, &validWriteData, validnrBytesRead, NULL_PTR)); + + /* ======= Routine tests =============================================== */ + /* ======= RT1/x: Test implementation */ +} + +/** + * @brief Testing extern function #I2C_Write + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/4: NULL_PTR for pI2cInterface → assert + * - AT2/4: invalid slaveAddress → assert + * - AT3/4: invalid nrBytes → assert + * - AT4/4: NULL_PTR for writeData → assert + * - Routine validation: + * - RT1/x: TODO + */ +void testI2C_Write(void) { + i2cBASE_t validI2cInterface; + uint32_t validSlaveAddress = 0u; + uint32_t validnrBytesWrite = 1u; + uint8_t validWriteData = 1u; + /* ======= AT1/4: Assertion test */ + TEST_ASSERT_FAIL_ASSERT(I2C_Write(NULL_PTR, validSlaveAddress, validnrBytesWrite, &validWriteData)); + /* ======= AT2/4: Assertion test */ + TEST_ASSERT_FAIL_ASSERT(I2C_Write(&validI2cInterface, 130u, validnrBytesWrite, &validWriteData)); + /* ======= AT3/4: Assertion test */ + TEST_ASSERT_FAIL_ASSERT(I2C_Write(&validI2cInterface, validSlaveAddress, 0u, &validWriteData)); + /* ======= AT4/4: Assertion test */ + TEST_ASSERT_FAIL_ASSERT(I2C_Write(&validI2cInterface, validSlaveAddress, validnrBytesWrite, NULL_PTR)); +} diff --git a/tests/unit/app/driver/imd/bender/ir155/test_bender_ir155.c b/tests/unit/app/driver/imd/bender/ir155/test_bender_ir155.c index 6d4cce87..9da10170 100644 --- a/tests/unit/app/driver/imd/bender/ir155/test_bender_ir155.c +++ b/tests/unit/app/driver/imd/bender/ir155/test_bender_ir155.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_bender_ir155.c * @author foxBMS Team * @date 2020-04-01 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/imd/bender/ir155/test_bender_ir155_helper.c b/tests/unit/app/driver/imd/bender/ir155/test_bender_ir155_helper.c index d0019458..e0864127 100644 --- a/tests/unit/app/driver/imd/bender/ir155/test_bender_ir155_helper.c +++ b/tests/unit/app/driver/imd/bender/ir155/test_bender_ir155_helper.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_bender_ir155_helper.c * @author foxBMS Team * @date 2020-11-02 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/imd/bender/iso165c/test_bender_iso165c.c b/tests/unit/app/driver/imd/bender/iso165c/test_bender_iso165c.c index bdf7a7f1..f30f4e13 100644 --- a/tests/unit/app/driver/imd/bender/iso165c/test_bender_iso165c.c +++ b/tests/unit/app/driver/imd/bender/iso165c/test_bender_iso165c.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_bender_iso165c.c * @author foxBMS Team * @date 2021-01-19 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * @@ -55,6 +55,9 @@ /*========== Includes =======================================================*/ #include "unity.h" #include "Mockcan.h" +#include "Mockcan_cbs_rx_imd-info.h" +#include "Mockcan_cbs_rx_imd-response.h" +#include "Mockcan_cbs_tx_imd-request.h" #include "Mockcan_cfg.h" #include "Mockdatabase.h" #include "Mockdiag.h" @@ -73,6 +76,8 @@ /*========== Unit Testing Framework Directives ==============================*/ TEST_INCLUDE_PATH("../../src/app/driver/can") TEST_INCLUDE_PATH("../../src/app/driver/can/cbs") +TEST_INCLUDE_PATH("../../src/app/driver/can/cbs/rx") +TEST_INCLUDE_PATH("../../src/app/driver/can/cbs/tx-async") TEST_INCLUDE_PATH("../../src/app/driver/config") TEST_INCLUDE_PATH("../../src/app/driver/imd") TEST_INCLUDE_PATH("../../src/app/driver/imd/bender/iso165c") @@ -113,12 +118,7 @@ void tearDown(void) { */ void testMessageComposition(void) { CAN_BUFFER_ELEMENT_s canMessage; - uint8_t dataWord; - uint8_t dataByte; - uint16_t data16; - uint8_t data8; uint8_t command; - uint8_t id; uint8_t tries; /* Do as if there is a message in the queue */ @@ -126,92 +126,6 @@ void testMessageComposition(void) { MPU_xQueueReceive_IgnoreAndReturn(1u); OS_ReceiveFromQueue_IgnoreAndReturn(OS_SUCCESS); - canMessage.id = 0x22u; - for (uint8_t i = 1u; i <= 8u; i++) { - canMessage.data[i] = i; - } - TEST_ASSERT_FAIL_ASSERT(TEST_I165C_ResetCanData(NULL_PTR)); - /* Reset must set all data to 0 */ - TEST_I165C_ResetCanData(&canMessage); - for (uint8_t i = 0u; i < 8u; i++) { - TEST_ASSERT_EQUAL(0u, canMessage.data[i]); - } - - data16 = 666u; - dataWord = I165C_DW1; - TEST_ASSERT_FAIL_ASSERT(TEST_I165C_WriteDataWord(dataWord, data16, NULL_PTR);); - /* Test that data is written correctly to CAN frame */ - TEST_I165C_WriteDataWord(dataWord, data16, &canMessage); - TEST_ASSERT_EQUAL(0x9Au, canMessage.data[1u]); - TEST_ASSERT_EQUAL(0x02u, canMessage.data[2u]); - dataWord = I165C_DW2; - TEST_I165C_WriteDataWord(dataWord, data16, &canMessage); - TEST_ASSERT_EQUAL(0x9Au, canMessage.data[3u]); - TEST_ASSERT_EQUAL(0x02u, canMessage.data[4u]); - - for (uint8_t i = 1u; i <= 4u; i++) { - canMessage.data[i] = i; - } - data16 = 0u; - dataWord = I165C_DW1; - TEST_ASSERT_FAIL_ASSERT(TEST_I165C_ReadDataWord(dataWord, NULL_PTR, canMessage)); - /* Test that dataword data is read correctly from usual CAN frame */ - TEST_I165C_ReadDataWord(dataWord, &data16, canMessage); - TEST_ASSERT_EQUAL(0x201u, data16); - data16 = 0u; - dataWord = I165C_DW2; - TEST_I165C_ReadDataWord(dataWord, &data16, canMessage); - TEST_ASSERT_EQUAL(0x403u, data16); - - for (uint8_t i = 0u; i <= 5u; i++) { - canMessage.data[i] = i + 1u; - } - data16 = 0u; - dataWord = I165C_DW1; - TEST_ASSERT_FAIL_ASSERT(TEST_I165C_ReadDataWordImdInfo(dataWord, NULL_PTR, canMessage)); - /* Test that dataword data is read correctly from special IMD_Info CAN frame */ - TEST_I165C_ReadDataWordImdInfo(dataWord, &data16, canMessage); - TEST_ASSERT_EQUAL(0x201u, data16); - data16 = 0u; - dataWord = I165C_DW2; - TEST_I165C_ReadDataWordImdInfo(dataWord, &data16, canMessage); - TEST_ASSERT_EQUAL(0x403u, data16); - data16 = 0u; - dataWord = I165C_DW3; - TEST_I165C_ReadDataWordImdInfo(dataWord, &data16, canMessage); - TEST_ASSERT_EQUAL(0x605u, data16); - - for (uint8_t i = 1u; i <= 4u; i++) { - canMessage.data[i] = i; - } - data8 = 0u; - dataByte = I165C_DB1; - TEST_ASSERT_FAIL_ASSERT(TEST_I165C_ReadDataByte(dataByte, NULL_PTR, canMessage)); - /* Test that databyte data is read correctly from usual CAN frame */ - TEST_I165C_ReadDataByte(dataByte, &data8, canMessage); - TEST_ASSERT_EQUAL(0x1u, data8); - data8 = 0u; - dataByte = I165C_DB2; - TEST_I165C_ReadDataByte(dataByte, &data8, canMessage); - TEST_ASSERT_EQUAL(0x2u, data8); - data8 = 0u; - dataByte = I165C_DB3; - TEST_I165C_ReadDataByte(dataByte, &data8, canMessage); - TEST_ASSERT_EQUAL(0x3u, data8); - data8 = 0u; - dataByte = I165C_DB4; - TEST_I165C_ReadDataByte(dataByte, &data8, canMessage); - TEST_ASSERT_EQUAL(0x4u, data8); - - id = 0xA; - command = 0xB; - TEST_ASSERT_FAIL_ASSERT(TEST_I165C_WriteCmd(id, command, NULL_PTR)); - /* Test that cmd is written correctly to CAN frame */ - TEST_I165C_WriteCmd(id, command, &canMessage); - TEST_ASSERT_EQUAL(0xAu, canMessage.id); - TEST_ASSERT_EQUAL(I165C_RX_MESSAGE_IDENTIFIER_TYPE, canMessage.idType); - TEST_ASSERT_EQUAL(0xBu, canMessage.data[0u]); - /* Check assertion of invalid parameter */ canMessage.data[0u] = 0xA; command = 0xA; @@ -221,60 +135,33 @@ void testMessageComposition(void) { canMessage.id = CANRX_IMD_RESPONSE_ID; canMessage.data[0u] = 0xA; command = 0xA; - TEST_ASSERT_EQUAL(true, TEST_I165C_CheckResponse(command, &canMessage)); + TEST_ASSERT_EQUAL(1u, TEST_I165C_CheckResponse(command, &canMessage)); /* Check that response ID does not correspond to awaited acknowledge */ canMessage.id = CANRX_IMD_RESPONSE_ID; canMessage.data[0u] = 0xA; command = 0xB; - TEST_ASSERT_EQUAL(false, TEST_I165C_CheckResponse(command, &canMessage)); + TEST_ASSERT_EQUAL(0u, TEST_I165C_CheckResponse(command, &canMessage)); /* Check that response failed if ID is not CANRX_IMD_RESPONSE_ID, even if response matches command */ canMessage.id = CANRX_IMD_INFO_ID; canMessage.data[0u] = 0xA; command = 0xA; - TEST_ASSERT_EQUAL(false, TEST_I165C_CheckResponse(command, &canMessage)); + TEST_ASSERT_EQUAL(0u, TEST_I165C_CheckResponse(command, &canMessage)); - /* Check that response failed if ID is not CANRX_IMD_RESPONSE_ID, if respose does not match command */ + /* Check that response failed if ID is not CANRX_IMD_RESPONSE_ID, if response does not match command */ canMessage.id = CANRX_IMD_INFO_ID; canMessage.data[0u] = 0xA; command = 0xB; - TEST_ASSERT_EQUAL(false, TEST_I165C_CheckResponse(command, &canMessage)); + TEST_ASSERT_EQUAL(0u, TEST_I165C_CheckResponse(command, &canMessage)); - canMessage.id = I165C_MESSAGETYPE_IMD_INFO; + canMessage.id = I165C_MESSAGE_TYPE_IMD_INFO; TEST_ASSERT_FAIL_ASSERT(TEST_I165C_GetImdInfo(NULL_PTR)); /* Test that an IMD_info frame was received on CAN */ TEST_ASSERT_EQUAL(true, TEST_I165C_GetImdInfo(&canMessage)); - canMessage.id = I165C_MESSAGETYPE_IMD_INFO + 1u; + canMessage.id = I165C_MESSAGE_TYPE_IMD_INFO + 1u; TEST_ASSERT_EQUAL(false, TEST_I165C_GetImdInfo(&canMessage)); - /* Test if CAN data indicated that iso165c is not initialized */ - for (uint8_t i = 0u; i < 8u; i++) { - canMessage.data[i] = 0u; - } - TEST_ASSERT_EQUAL(false, TEST_I165C_IsSelfTestFinished(canMessage)); - - /* Test if CAN data indicated that iso165c is not initialized */ - for (uint8_t i = 0u; i < 8u; i++) { - canMessage.data[i] = 0x00u; - } - /* - * D_IMC_STATUS is located in byte 2 and byte 3 of CAN message: - * Bit 4: Self test running -> set to 1 */ - canMessage.data[2u] |= (1u << I165C_SELFTEST_RUNNING_SHIFT); - /* D_VIFC_STATUS is located in byte 4 and byte 5 of CAN message - * Bit 0: Insulation measurement active -> set to 0 - * Bit 12: Self-test long executed -> set to 0 - * Bit 13: Self-test short executed -> set to 0 - */ - canMessage.data[4u] |= (0u << I165C_INSULATION_MEASUREMENT_STATUS_SHIFT); - canMessage.data[5u] |= - (0u << (I165C_IMC_SELFTEST_OVERALL_SCENARIO_SHIFT - 8u)); /* Subtract 8 because upper byte is used */ - canMessage.data[5u] |= - (0u << (I165C_IMC_SELFTEST_PARAMETERCONFIG_SCENARIO_SHIFT - 8u)); /* Subtract 8 because upper byte is used */ - - TEST_ASSERT_EQUAL(true, TEST_I165C_IsSelfTestFinished(canMessage)); - /* ----------- Test function that waits for acknowledge -----------------*/ /* Check for invalid function parameters */ @@ -283,14 +170,14 @@ void testMessageComposition(void) { TEST_ASSERT_FAIL_ASSERT(TEST_I165C_CheckAcknowledgeArrived(command, &tries, NULL_PTR)); /* Acknowledge arrived */ - canMessage.id = CANRX_IMD_RESPONSE_ID; - tries = 0u; - command = 0xA; - canMessage.data[0] = 0xA; - bool ackReceived = false; + canMessage.id = CANRX_IMD_RESPONSE_ID; + tries = 0u; + command = 0xA; + canMessage.data[0] = 0xA; + uint8_t ackReceived = 0u; ackReceived = TEST_I165C_CheckAcknowledgeArrived(command, &tries, &canMessage); - TEST_ASSERT_EQUAL(true, ackReceived); + TEST_ASSERT_EQUAL(1u, ackReceived); TEST_ASSERT_EQUAL(0u, tries); /* Acknowledge not arrived, increment try counter */ @@ -301,7 +188,7 @@ void testMessageComposition(void) { ackReceived = TEST_I165C_CheckAcknowledgeArrived(command, &tries, &canMessage); TEST_ASSERT_EQUAL(1u, tries); - TEST_ASSERT_EQUAL(false, ackReceived); + TEST_ASSERT_EQUAL(0u, ackReceived); /* Acknowledge not arrived, and allowed number of tries made, restart * Initialization (go to self test) */ @@ -311,5 +198,5 @@ void testMessageComposition(void) { ackReceived = TEST_I165C_CheckAcknowledgeArrived(command, &tries, &canMessage); TEST_ASSERT_EQUAL(I165C_TRANSMISSION_ATTEMPTS, tries); - TEST_ASSERT_EQUAL(false, ackReceived); + TEST_ASSERT_EQUAL(0u, ackReceived); } diff --git a/tests/unit/app/driver/imd/none/test_no-imd.c b/tests/unit/app/driver/imd/none/test_no-imd.c index ba6ae454..f8ade88b 100644 --- a/tests/unit/app/driver/imd/none/test_no-imd.c +++ b/tests/unit/app/driver/imd/none/test_no-imd.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_no-imd.c * @author foxBMS Team * @date 2020-04-01 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/imd/test_imd.c b/tests/unit/app/driver/imd/test_imd.c index 38be092f..84427f96 100644 --- a/tests/unit/app/driver/imd/test_imd.c +++ b/tests/unit/app/driver/imd/test_imd.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_imd.c * @author foxBMS Team * @date 2021-11-15 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/interlock/test_interlock.c b/tests/unit/app/driver/interlock/test_interlock.c index ab4da6c3..a52f3556 100644 --- a/tests/unit/app/driver/interlock/test_interlock.c +++ b/tests/unit/app/driver/interlock/test_interlock.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_interlock.c * @author foxBMS Team * @date 2020-04-01 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * @@ -82,8 +82,8 @@ void setUp(void) { .statereq = ILCK_STATE_NO_REQUEST, .state = ILCK_STATEMACHINE_UNINITIALIZED, .substate = ILCK_ENTRY, - .laststate = ILCK_STATEMACHINE_UNINITIALIZED, - .lastsubstate = ILCK_ENTRY, + .lastState = ILCK_STATEMACHINE_UNINITIALIZED, + .lastSubstate = ILCK_ENTRY, .triggerentry = 0, .ErrRequestCounter = 0, .counter = 0, @@ -165,7 +165,7 @@ void testILCK_SetStateRequestDoubleInitialization(void) { TEST_ASSERT_EQUAL(ILCK_ALREADY_INITIALIZED, ILCK_SetStateRequest(ILCK_STATE_INITIALIZATION_REQUEST)); } -void testRunStatemachineWithoutRequest(void) { +void testRunStateMachineWithoutRequest(void) { /* This group is called by the reentrance check */ OS_EnterTaskCritical_Expect(); OS_ExitTaskCritical_Expect(); @@ -179,7 +179,7 @@ void testRunStatemachineWithoutRequest(void) { TEST_ASSERT_EQUAL(ILCK_STATEMACHINE_UNINITIALIZED, ILCK_GetState()); } -void testInitializeStatemachine(void) { +void testInitializeStateMachine(void) { /* run initialization */ /* since we are checking only for the state machine passing through these states, we ignore all unnecessary functions */ @@ -200,7 +200,7 @@ void testInitializeStatemachine(void) { DIAG_Handler_IgnoreAndReturn(DIAG_HANDLER_RETURN_OK); for (uint8_t i = 0u; i < 10; i++) { - /* iterate calling this state machine 10 times (one shorttime) */ + /* iterate calling this state machine 10 times (one short time) */ ILCK_Trigger(); } @@ -223,7 +223,7 @@ void testILCK_SetStateRequestIllegalValueAndThenRunStatemachine(void) { ILCK_Trigger(); - /* Statemachine should stay uninitialized with illegal state request */ + /* State machine should stay uninitialized with illegal state request */ TEST_ASSERT_EQUAL(ILCK_STATEMACHINE_UNINITIALIZED, ILCK_GetState()); } diff --git a/tests/unit/app/driver/io/test_io.c b/tests/unit/app/driver/io/test_io.c index 6c99e944..ad4451a2 100644 --- a/tests/unit/app/driver/io/test_io.c +++ b/tests/unit/app/driver/io/test_io.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_io.c * @author foxBMS Team * @date 2020-06-10 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/led/test_led.c b/tests/unit/app/driver/led/test_led.c index b5d90b4a..0d5919f1 100644 --- a/tests/unit/app/driver/led/test_led.c +++ b/tests/unit/app/driver/led/test_led.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_led.c * @author foxBMS Team * @date 2020-10-05 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/mcu/test_mcu.c b/tests/unit/app/driver/mcu/test_mcu.c index 6a2627ed..d0cf73f5 100644 --- a/tests/unit/app/driver/mcu/test_mcu.c +++ b/tests/unit/app/driver/mcu/test_mcu.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_mcu.c * @author foxBMS Team * @date 2020-04-01 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/meas/test_meas.c b/tests/unit/app/driver/meas/test_meas.c index 7da99587..dff46985 100644 --- a/tests/unit/app/driver/meas/test_meas.c +++ b/tests/unit/app/driver/meas/test_meas.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_meas.c * @author foxBMS Team * @date 2020-04-01 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/pex/test_pex.c b/tests/unit/app/driver/pex/test_pex.c index 3b7154a9..8781f251 100644 --- a/tests/unit/app/driver/pex/test_pex.c +++ b/tests/unit/app/driver/pex/test_pex.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_pex.c * @author foxBMS Team * @date 2021-09-29 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * @@ -63,10 +63,16 @@ #include "pex_cfg.h" +#include "fstd_types.h" #include "pex.h" #include "test_assert_helper.h" +#include + /*========== Unit Testing Framework Directives ==============================*/ +TEST_SOURCE_FILE("pex.c") +TEST_SOURCE_FILE("pex_cfg.c") + TEST_INCLUDE_PATH("../../src/app/driver/config") TEST_INCLUDE_PATH("../../src/app/driver/i2c") TEST_INCLUDE_PATH("../../src/app/driver/pex") @@ -74,6 +80,10 @@ TEST_INCLUDE_PATH("../../src/app/engine/diag") /*========== Definitions and Implementations for Unit Test ==================*/ +#define TEST_PEX_I2C_INTERFACE (i2cREG1) +#define TEST_PEX_POL_INV_PORT0_REGISTER_ADDRESS (0x4u) +#define TEST_PEX_DIRECTION_PORT0_REGISTER_ADDRESS (0x6u) + long FSYS_RaisePrivilege(void) { return 0; } @@ -87,25 +97,219 @@ void tearDown(void) { /*========== Test Cases =====================================================*/ -void testModuleInterfacesWithInvalidValues(void) { - TEST_ASSERT_FAIL_ASSERT(PEX_SetPin(5, PEX_PIN00)); +/** + * @brief Testing static function #PEX_WriteConfigPolarity + * @details The following cases need to be tested: + * - Argument validation: + * - none + * - Routine validation: + * - RT1/2: function calls expected subroutine and it succeeds + * - RT2/2: function calls expected subroutine and it fails + */ +void testPEX_WriteConfigPolarity(void) { + /* ======= Assertion tests ============================================= */ + /* none */ + + /* ======= Routine tests =============================================== */ + const uint8_t expectedNrOfBytesToWrite = 3u; + uint8_t expectedI2cDataWrite[3u] = {TEST_PEX_POL_INV_PORT0_REGISTER_ADDRESS, 0u, 0u}; + + /* ======= RT1/2: Test implementation */ + for (uint8_t i = 0; i < PEX_NR_OF_PORT_EXPANDERS; i++) { + I2C_WriteDma_ExpectAndReturn( + TEST_PEX_I2C_INTERFACE, pex_addressList[i], expectedNrOfBytesToWrite, expectedI2cDataWrite, STD_OK); + } + + /* ======= RT1/2: call function under test */ + const STD_RETURN_TYPE_e succeeded = TEST_PEX_WriteConfigPolarity(); + + /* ======= RT1/2: test output verification */ + TEST_ASSERT_EQUAL(STD_OK, succeeded); + + /* ======= RT2/2: Test implementation */ + for (uint8_t i = 0; i < PEX_NR_OF_PORT_EXPANDERS; i++) { + I2C_WriteDma_ExpectAndReturn( + TEST_PEX_I2C_INTERFACE, pex_addressList[i], expectedNrOfBytesToWrite, expectedI2cDataWrite, STD_NOT_OK); + } + + /* ======= RT2/2: call function under test */ + const STD_RETURN_TYPE_e failed = TEST_PEX_WriteConfigPolarity(); + + /* ======= RT2/2: test output verification */ + TEST_ASSERT_EQUAL(STD_NOT_OK, failed); +} + +/** + * @brief Testing static function #PEX_WriteConfigDirection + * @details The following cases need to be tested: + * - Argument validation: + * - none + * - Routine validation: + * - RT1/2: function calls expected subroutine and it succeeds + * - RT2/2: function calls expected subroutine and it fails + */ +void testPEX_WriteConfigDirection(void) { + /* ======= Assertion tests ============================================= */ + /* none */ + + /* ======= Routine tests =============================================== */ + const uint8_t expectedNrOfBytesToWrite = 3u; + uint8_t expectedI2cDataWrite[3u] = {TEST_PEX_DIRECTION_PORT0_REGISTER_ADDRESS, 0u, 0u}; + + /* ======= RT1/2: Test implementation */ + for (uint8_t i = 0; i < PEX_NR_OF_PORT_EXPANDERS; i++) { + I2C_WriteDma_ExpectAndReturn( + TEST_PEX_I2C_INTERFACE, pex_addressList[i], expectedNrOfBytesToWrite, expectedI2cDataWrite, STD_OK); + } + + /* ======= RT1/2: call function under test */ + const STD_RETURN_TYPE_e succeeded = TEST_PEX_WriteConfigDirection(); + + /* ======= RT1/2: test output verification */ + TEST_ASSERT_EQUAL(STD_OK, succeeded); + + /* ======= RT2/2: Test implementation */ + for (uint8_t i = 0; i < PEX_NR_OF_PORT_EXPANDERS; i++) { + I2C_WriteDma_ExpectAndReturn( + TEST_PEX_I2C_INTERFACE, pex_addressList[i], expectedNrOfBytesToWrite, expectedI2cDataWrite, STD_NOT_OK); + } + + /* ======= RT2/2: call function under test */ + const STD_RETURN_TYPE_e failed = TEST_PEX_WriteConfigDirection(); + + /* ======= RT2/2: test output verification */ + TEST_ASSERT_EQUAL(STD_NOT_OK, failed); +} + +/** + * @brief Testing extern function #PEX_SetPin + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/2: invalid port expander → assert + * - AT2/2: invalid pin → assert + * - Routine validation: + * - TODO + */ +void testPEX_SetPin(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/2 ======= */ + TEST_ASSERT_FAIL_ASSERT(PEX_SetPin(5, PEX_PORT_0_PIN_0)); + /* ======= AT2/2 ======= */ TEST_ASSERT_FAIL_ASSERT(PEX_SetPin(PEX_PORT_EXPANDER1, 16u)); - TEST_ASSERT_FAIL_ASSERT(PEX_ResetPin(5, PEX_PIN00)); + /* ======= Routine tests =============================================== */ +} + +/** + * @brief Testing extern function #PEX_ResetPin + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/2: invalid port expander → assert + * - AT2/2: invalid pin → assert + * - Routine validation: + * - TODO + */ +void testPEX_ResetPin(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/2 ======= */ + TEST_ASSERT_FAIL_ASSERT(PEX_ResetPin(5, PEX_PORT_0_PIN_0)); + /* ======= AT2/2 ======= */ TEST_ASSERT_FAIL_ASSERT(PEX_ResetPin(PEX_PORT_EXPANDER1, 16u)); - TEST_ASSERT_FAIL_ASSERT(PEX_GetPin(5, PEX_PIN00)); + /* ======= Routine tests =============================================== */ +} + +/** + * @brief Testing extern function #PEX_GetPin + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/2: invalid port expander → assert + * - AT2/2: invalid pin → assert + * - Routine validation: + * - TODO + */ +void testPEX_GetPin(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/2 ======= */ + TEST_ASSERT_FAIL_ASSERT(PEX_GetPin(5, PEX_PORT_0_PIN_0)); + /* ======= AT2/2 ======= */ TEST_ASSERT_FAIL_ASSERT(PEX_GetPin(PEX_PORT_EXPANDER1, 16u)); - TEST_ASSERT_FAIL_ASSERT(PEX_SetPinDirectionInput(5, PEX_PIN00)); + /* ======= Routine tests =============================================== */ +} + +/** + * @brief Testing extern function #PEX_SetPinDirectionInput + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/2: invalid port expander → assert + * - AT2/2: invalid pin → assert + * - Routine validation: + * - TODO + */ +void testPEX_SetPinDirectionInput(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/2 ======= */ + TEST_ASSERT_FAIL_ASSERT(PEX_SetPinDirectionInput(5, PEX_PORT_0_PIN_0)); + /* ======= AT2/2 ======= */ TEST_ASSERT_FAIL_ASSERT(PEX_SetPinDirectionInput(PEX_PORT_EXPANDER1, 16u)); - TEST_ASSERT_FAIL_ASSERT(PEX_SetPinDirectionOutput(5, PEX_PIN00)); + /* ======= Routine tests =============================================== */ +} + +/** + * @brief Testing extern function #PEX_SetPinDirectionOutput + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/2: invalid port expander → assert + * - AT2/2: invalid pin → assert + * - Routine validation: + * - TODO + */ +void testPEX_SetPinDirectionOutput(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/2 ======= */ + TEST_ASSERT_FAIL_ASSERT(PEX_SetPinDirectionOutput(5, PEX_PORT_0_PIN_0)); + /* ======= AT2/2 ======= */ TEST_ASSERT_FAIL_ASSERT(PEX_SetPinDirectionOutput(PEX_PORT_EXPANDER1, 16u)); - TEST_ASSERT_FAIL_ASSERT(PEX_SetPinPolarityInverted(5, PEX_PIN00)); + /* ======= Routine tests =============================================== */ +} + +/** + * @brief Testing extern function #PEX_SetPinPolarityInverted + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/2: invalid port expander → assert + * - AT2/2: invalid pin → assert + * - Routine validation: + * - TODO + */ +void testPEX_SetPinPolarityInverted(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/2 ======= */ + TEST_ASSERT_FAIL_ASSERT(PEX_SetPinPolarityInverted(5, PEX_PORT_0_PIN_0)); + /* ======= AT2/2 ======= */ TEST_ASSERT_FAIL_ASSERT(PEX_SetPinPolarityInverted(PEX_PORT_EXPANDER1, 16u)); - TEST_ASSERT_FAIL_ASSERT(PEX_SetPinPolarityRetained(5, PEX_PIN00)); + /* ======= Routine tests =============================================== */ +} + +/** + * @brief Testing extern function #PEX_SetPinPolarityRetained + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/2: invalid port expander → assert + * - AT2/2: invalid pin → assert + * - Routine validation: + * - TODO + */ +void testPEX_SetPinPolarityRetained(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/2 ======= */ + TEST_ASSERT_FAIL_ASSERT(PEX_SetPinPolarityRetained(5, PEX_PORT_0_PIN_0)); + /* ======= AT2/2 ======= */ TEST_ASSERT_FAIL_ASSERT(PEX_SetPinPolarityRetained(PEX_PORT_EXPANDER1, 16u)); + + /* ======= Routine tests =============================================== */ } diff --git a/tests/unit/app/driver/pwm/test_pwm.c b/tests/unit/app/driver/pwm/test_pwm.c index f691d0ec..9d569613 100644 --- a/tests/unit/app/driver/pwm/test_pwm.c +++ b/tests/unit/app/driver/pwm/test_pwm.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_pwm.c * @author foxBMS Team * @date 2021-10-08 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * @@ -57,7 +57,7 @@ #include "MockHL_etpwm.h" /* HL_ecap.h can not be mocked, due to 'ecapNotification' is implemented in - 'pwm.c' and this would then lead to multiple defintions. + 'pwm.c' and this would then lead to multiple definitions. The solution is to only include the real HAL header, and then implement stubs for the required functions (ecapInit, ecapGetCAP1, ecapGetCAP2, ecapGetCAP3). */ @@ -76,8 +76,7 @@ long FSYS_RaisePrivilege(void) { return fsysRaisePrivilegeReturnValue; } -void ecapInit(void) { - /* dummy implementation required for linking */ +void ecapInit(void) { /* dummy implementation required for linking */ } uint32_t ecapGetCAP1(ecapBASE_t *ecap) { diff --git a/tests/unit/app/driver/rtc/test_rtc.c b/tests/unit/app/driver/rtc/test_rtc.c index 40355977..09aa2d69 100644 --- a/tests/unit/app/driver/rtc/test_rtc.c +++ b/tests/unit/app/driver/rtc/test_rtc.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_rtc.c * @author foxBMS Team * @date 2020-04-01 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/sbc/test_nxpfs85xx.c b/tests/unit/app/driver/sbc/test_nxpfs85xx.c index 9ff2893a..2d11525e 100644 --- a/tests/unit/app/driver/sbc/test_nxpfs85xx.c +++ b/tests/unit/app/driver/sbc/test_nxpfs85xx.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_nxpfs85xx.c * @author foxBMS Team * @date 2020-04-06 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix SBC * diff --git a/tests/unit/app/driver/sbc/test_sbc.c b/tests/unit/app/driver/sbc/test_sbc.c index 9506d641..968a9235 100644 --- a/tests/unit/app/driver/sbc/test_sbc.c +++ b/tests/unit/app/driver/sbc/test_sbc.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_sbc.c * @author foxBMS Team * @date 2020-07-15 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix SBC * diff --git a/tests/unit/app/driver/spi/test_spi.c b/tests/unit/app/driver/spi/test_spi.c index d3240c2e..266261cc 100644 --- a/tests/unit/app/driver/spi/test_spi.c +++ b/tests/unit/app/driver/spi/test_spi.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_spi.c * @author foxBMS Team * @date 2020-04-01 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * @@ -100,53 +100,6 @@ DMA_CHANNEL_CONFIG_s dma_spiDmaChannels[DMA_NUMBER_SPI_INTERFACES] = { {DMA_CH8, DMA_CH9}, /*!< SPI5 */ }; -/** SPI data configuration struct for ADI communication */ -static spiDAT1_t spi_kAdiDataConfig[BS_NR_OF_STRINGS] = { - { /* struct is implemented in the TI HAL and uses uppercase true and false */ - .CS_HOLD = TRUE, /* If true, HW chip select kept active between words */ - .WDEL = FALSE, /* Activation of delay between words */ - .DFSEL = SPI_FMT_0, /* Data word format selection */ - /* Hardware chip select is configured automatically depending on configuration in #SPI_INTERFACE_CONFIG_s */ - .CSNR = SPI_HARDWARE_CHIP_SELECT_DISABLE_ALL}, -}; - -/** SPI data configuration struct for LTC communication */ -static spiDAT1_t spi_kLtcDataConfig[BS_NR_OF_STRINGS] = { - { /* struct is implemented in the TI HAL and uses uppercase true and false */ - .CS_HOLD = TRUE, /* If true, HW chip select kept active between words */ - .WDEL = FALSE, /* Activation of delay between words */ - .DFSEL = SPI_FMT_0, /* Data word format selection */ - /* Hardware chip select is configured automatically depending on configuration in #SPI_INTERFACE_CONFIG_s */ - .CSNR = SPI_HARDWARE_CHIP_SELECT_DISABLE_ALL}, -}; - -/** SPI data configuration struct for MXM communication */ -static spiDAT1_t spi_kMxmDataConfig = { - .CS_HOLD = TRUE, /* If true, HW chip select kept active */ - .WDEL = TRUE, /* Activation of delay between words */ - .DFSEL = SPI_FMT_1, /* Data word format selection */ - /* Hardware chip select is configured automatically depending on configuration in #SPI_INTERFACE_CONFIG_s */ - .CSNR = SPI_HARDWARE_CHIP_SELECT_DISABLE_ALL, -}; - -/** SPI data configuration struct for NXP MC33775A communication, Tx part */ -static spiDAT1_t spi_kNxp775DataConfigTx[BS_NR_OF_STRINGS] = { - {.CS_HOLD = TRUE, /* If true, HW chip select kept active */ - .WDEL = TRUE, /* Activation of delay between words */ - .DFSEL = SPI_FMT_2, /* Data word format selection */ - /* Hardware chip select is configured automatically depending on configuration in #SPI_INTERFACE_CONFIG_s */ - .CSNR = SPI_HARDWARE_CHIP_SELECT_DISABLE_ALL}, -}; - -/** SPI data configuration struct for NXP MC33775A communication, Rx part */ -static spiDAT1_t spi_kNxp775DataConfigRx[BS_NR_OF_STRINGS] = { - {.CS_HOLD = TRUE, /* If true, HW chip select kept active */ - .WDEL = TRUE, /* Activation of delay between words */ - .DFSEL = SPI_FMT_2, /* Data word format selection */ - /* Hardware chip select is configured automatically depending on configuration in #SPI_INTERFACE_CONFIG_s */ - .CSNR = SPI_HARDWARE_CHIP_SELECT_DISABLE_ALL}, -}; - /** SPI data configuration struct for FRAM communication */ static spiDAT1_t spi_kFramDataConfig = { /* struct is implemented in the TI HAL and uses uppercase true and false */ @@ -177,65 +130,6 @@ static spiDAT1_t spi_kSbcDataConfig = { .CSNR = SPI_HARDWARE_CHIP_SELECT_DISABLE_ALL, }; -/** - * SPI interface configuration for ADI communication - * This is a list of structs because of multi string - */ -SPI_INTERFACE_CONFIG_s spi_adiInterface[BS_NR_OF_STRINGS] = { - { - .pConfig = &spi_kAdiDataConfig[0u], - .pNode = spiREG1, - .pGioPort = &(spiREG1->PC3), - .csPin = 1u, - .csType = SPI_CHIP_SELECT_HARDWARE, - }, -}; - -/** - * SPI interface configuration for LTC communication - * This is a list of structs because of multi string - */ -SPI_INTERFACE_CONFIG_s spi_ltcInterface[BS_NR_OF_STRINGS] = { - { - .pConfig = &spi_kLtcDataConfig[0u], - .pNode = spiREG1, - .pGioPort = &(spiREG1->PC3), - .csPin = 1u, - .csType = SPI_CHIP_SELECT_HARDWARE, - }, -}; - -/** SPI interface configuration for MXM communication */ -SPI_INTERFACE_CONFIG_s spi_mxmInterface = { - .pConfig = &spi_kMxmDataConfig, - .pNode = spiREG4, - .pGioPort = &(spiREG4->PC3), - .csPin = 0u, - .csType = SPI_CHIP_SELECT_HARDWARE, -}; - -/** SPI interface configuration for N775 communication Tx part */ -SPI_INTERFACE_CONFIG_s spi_nxp775InterfaceTx[BS_NR_OF_STRINGS] = { - { - .pConfig = &spi_kNxp775DataConfigTx[0u], - .pNode = spiREG1, - .pGioPort = &(spiREG1->PC3), - .csPin = 1u, - .csType = SPI_CHIP_SELECT_HARDWARE, - }, -}; - -/** SPI interface configuration for N775 communication, Rx part */ -SPI_INTERFACE_CONFIG_s spi_nxp775InterfaceRx[BS_NR_OF_STRINGS] = { - { - .pConfig = &spi_kNxp775DataConfigRx[0u], - .pNode = spiREG4, - .pGioPort = &(spiREG4->PC3), - .csPin = 0u, - .csType = SPI_CHIP_SELECT_HARDWARE, - }, -}; - /** SPI interface configuration for FRAM communication */ SPI_INTERFACE_CONFIG_s spi_framInterface = { .pConfig = &spi_kFramDataConfig, @@ -304,22 +198,39 @@ void testSPI_InitializeChipSelects(void) { /* ======= Routine tests =============================================== */ /* ======= RT1/1: Test implementation */ - const uint8_t currentString = 0u; /* ======= RT1/1: call function under test */ TEST_SPI_InitializeChipSelects(); /* ======= RT1/1: test output verification */ - TEST_ASSERT_EQUAL(SPI_HARDWARE_CHIP_SELECT_1_ACTIVE, spi_adiInterface[currentString].pConfig->CSNR); - TEST_ASSERT_EQUAL(SPI_HARDWARE_CHIP_SELECT_1_ACTIVE, spi_ltcInterface[currentString].pConfig->CSNR); - TEST_ASSERT_EQUAL(SPI_HARDWARE_CHIP_SELECT_1_ACTIVE, spi_nxp775InterfaceTx[currentString].pConfig->CSNR); - TEST_ASSERT_EQUAL(SPI_HARDWARE_CHIP_SELECT_0_ACTIVE, spi_nxp775InterfaceRx[currentString].pConfig->CSNR); - TEST_ASSERT_EQUAL(SPI_HARDWARE_CHIP_SELECT_0_ACTIVE, spi_mxmInterface.pConfig->CSNR); TEST_ASSERT_EQUAL(1u, spi_framInterface.pConfig->CSNR); TEST_ASSERT_EQUAL(1u, spi_spsInterface.pConfig->CSNR); TEST_ASSERT_EQUAL(SPI_HARDWARE_CHIP_SELECT_0_ACTIVE, spi_sbcMcuInterface.pConfig->CSNR); } +/** + * @brief Testing static function #SPI_InitializeChipSelectsAfe + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/1: invalid string -> assert + * - Routine validation: + * - RT1/1: nothing to do, as this is a dummy functions for testing + */ +void testSPI_InitializeChipSelectsAfe(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/1 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_SPI_InitializeChipSelectsAfe(BS_NR_OF_STRINGS)); + + /* ======= Routine tests =============================================== */ + /* ======= RT1/1: Test implementation */ + /* ======= RT1/1: call function under test */ + for (uint8_t s = 0u; s < BS_NR_OF_STRINGS; s++) { + TEST_SPI_InitializeChipSelectsAfe(s); + } + /* ======= RT1/1: test output verification */ + /* nothing to check */ +} + /** * @brief Testing static function #SPI_GetChipSelectPin * @details The following cases need to be tested: diff --git a/tests/unit/app/driver/spi/test_spi_adi.c b/tests/unit/app/driver/spi/test_spi_adi.c new file mode 100644 index 00000000..8094fa19 --- /dev/null +++ b/tests/unit/app/driver/spi/test_spi_adi.c @@ -0,0 +1,262 @@ +/** + * + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * We kindly request you to use one or more of the following phrases to refer to + * foxBMS in your hardware, software, documentation or advertising materials: + * + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" + * + */ + +/** + * @file test_spi_adi.c + * @author foxBMS Team + * @date 2020-10-20 (date of creation) + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup UNIT_TEST_IMPLEMENTATION + * @prefix TEST + * + * @brief Tests for the spi module + * + */ + +/*========== Includes =======================================================*/ +#include "unity.h" +#include "MockHL_spi.h" +#include "MockHL_sys_dma.h" +#include "Mockdma_cfg.h" +#include "Mockio.h" +#include "Mockmcu.h" +#include "Mockos.h" +#include "Mockspi_cfg.h" + +#include "spi.h" +#include "spi_cfg-helper.h" +#include "test_assert_helper.h" + +#include + +/*========== Unit Testing Framework Directives ==============================*/ +TEST_SOURCE_FILE("spi.c") + +TEST_INCLUDE_PATH("../../src/app/driver/config") +TEST_INCLUDE_PATH("../../src/app/driver/dma") +TEST_INCLUDE_PATH("../../src/app/driver/io") +TEST_INCLUDE_PATH("../../src/app/driver/spi") + +/*========== Definitions and Implementations for Unit Test ==================*/ + +long FSYS_RaisePrivilege(void) { + return 0; +} + +/** SPI enumeration for DMA */ +spiBASE_t *dma_spiInterfaces[DMA_NUMBER_SPI_INTERFACES] = { + spiREG1, /*!< SPI1 */ + spiREG2, /*!< SPI2 */ + spiREG3, /*!< SPI3 */ + spiREG4, /*!< SPI4 */ + spiREG5, /*!< SPI5 */ +}; + +/** DMA channel configuration for SPI communication */ +DMA_CHANNEL_CONFIG_s dma_spiDmaChannels[DMA_NUMBER_SPI_INTERFACES] = { + {DMA_CH0, DMA_CH1}, /*!< SPI1 */ + {DMA_CH2, DMA_CH3}, /*!< SPI2 */ + {DMA_CH4, DMA_CH5}, /*!< SPI3 */ + {DMA_CH6, DMA_CH7}, /*!< SPI4 */ + {DMA_CH8, DMA_CH9}, /*!< SPI5 */ +}; + +/** SPI data configuration struct for ADI communication */ +static spiDAT1_t spi_kAdiDataConfig[BS_NR_OF_STRINGS] = { + { /* struct is implemented in the TI HAL and uses uppercase true and false */ + .CS_HOLD = TRUE, /* If true, HW chip select kept active between words */ + .WDEL = FALSE, /* Activation of delay between words */ + .DFSEL = SPI_FMT_0, /* Data word format selection */ + /* Hardware chip select is configured automatically depending on configuration in #SPI_INTERFACE_CONFIG_s */ + .CSNR = SPI_HARDWARE_CHIP_SELECT_DISABLE_ALL}, +}; + +/** SPI data configuration struct for FRAM communication */ +static spiDAT1_t spi_kFramDataConfig = { + /* struct is implemented in the TI HAL and uses uppercase true and false */ + .CS_HOLD = TRUE, /* If true, HW chip select kept active */ + .WDEL = TRUE, /* Activation of delay between words */ + .DFSEL = SPI_FMT_1, /* Data word format selection */ + /* Hardware chip select is configured automatically depending on configuration in #SPI_INTERFACE_CONFIG_s */ + .CSNR = SPI_HARDWARE_CHIP_SELECT_DISABLE_ALL, +}; + +/** SPI data configuration struct for SPS communication in low speed (4MHz) */ +static spiDAT1_t spi_kSpsDataConfigLowSpeed = { + /* struct is implemented in the TI HAL and uses uppercase true and false */ + .CS_HOLD = TRUE, /* If true, HW chip select kept active */ + .WDEL = TRUE, /* Activation of delay between words */ + .DFSEL = SPI_FMT_1, /* Data word format selection */ + /* Hardware chip select is configured automatically depending on configuration in #SPI_INTERFACE_CONFIG_s */ + .CSNR = SPI_HARDWARE_CHIP_SELECT_DISABLE_ALL, +}; + +/** SPI configuration struct for SBC communication */ +static spiDAT1_t spi_kSbcDataConfig = { + /* struct is implemented in the TI HAL and uses uppercase true and false */ + .CS_HOLD = TRUE, /* If true, HW chip select kept active */ + .WDEL = TRUE, /* Activation of delay between words */ + .DFSEL = SPI_FMT_0, /* Data word format selection */ + /* Hardware chip select is configured automatically depending on configuration in #SPI_INTERFACE_CONFIG_s */ + .CSNR = SPI_HARDWARE_CHIP_SELECT_DISABLE_ALL, +}; + +/** + * SPI interface configuration for ADI communication + * This is a list of structs because of multi string + */ +SPI_INTERFACE_CONFIG_s spi_adiInterface[BS_NR_OF_STRINGS] = { + { + .pConfig = &spi_kAdiDataConfig[0u], + .pNode = spiREG1, + .pGioPort = &(spiREG1->PC3), + .csPin = 1u, + .csType = SPI_CHIP_SELECT_HARDWARE, + }, +}; + +/** SPI interface configuration for FRAM communication */ +SPI_INTERFACE_CONFIG_s spi_framInterface = { + .pConfig = &spi_kFramDataConfig, + .pNode = spiREG3, + .pGioPort = &(spiREG3->PC3), + .csPin = 1u, + .csType = SPI_CHIP_SELECT_SOFTWARE, +}; + +/** SPI interface configuration for SPS communication */ +SPI_INTERFACE_CONFIG_s spi_spsInterface = { + .pConfig = &spi_kSpsDataConfigLowSpeed, + .pNode = spiREG2, + .pGioPort = &SPI_SPS_CS_GIOPORT, + .csPin = SPI_SPS_CS_PIN, + .csType = SPI_CHIP_SELECT_SOFTWARE, +}; + +/** SPI interface configuration for SBC communication */ +SPI_INTERFACE_CONFIG_s spi_sbcMcuInterface = { + .pConfig = &spi_kSbcDataConfig, + .pNode = spiREG2, + .pGioPort = &(spiREG2->PC3), + .csPin = 0u, + .csType = SPI_CHIP_SELECT_HARDWARE, +}; + +/** struct containing the lock state of the SPI interfaces */ +SPI_BUSY_STATE_e spi_busyFlags[] = { + SPI_IDLE, + SPI_IDLE, + SPI_IDLE, + SPI_IDLE, + SPI_IDLE, +}; + +const uint8_t spi_nrBusyFlags = sizeof(spi_busyFlags) / sizeof(SPI_BUSY_STATE_e); + +/** mock for testing with an SPI handle */ +spiBASE_t spiMockHandle = {0}; + +spi_config_reg_t spiMockConfigRegister = {0}; + +uint8_t spiTestArrayResultsAdi[BS_NR_OF_STRINGS] = {SPI_HARDWARE_CHIP_SELECT_1_ACTIVE}; + +/*========== Setup and Teardown =============================================*/ +void setUp(void) { + /* make sure PC0 of config register is clean */ + spiMockConfigRegister.CONFIG_PC0 = 0; +} + +void tearDown(void) { +} + +/*========== Test Cases =====================================================*/ +/** + * @brief Testing static function #SPI_InitializeChipSelects + * @details The following cases need to be tested: + * - Argument validation: + * - none (void function) + * - Routine validation: + * - RT1/1: software chip select pin in the valid range is verbatim + * piped through the function + */ +void testSPI_InitializeChipSelects(void) { + /* ======= Assertion tests ============================================= */ + /* none */ + + /* ======= Routine tests =============================================== */ + /* ======= RT1/1: Test implementation */ + const uint8_t currentString = 0u; + + /* ======= RT1/1: call function under test */ + TEST_SPI_InitializeChipSelects(); + + /* ======= RT1/1: test output verification */ + TEST_ASSERT_EQUAL(SPI_HARDWARE_CHIP_SELECT_1_ACTIVE, spi_adiInterface[currentString].pConfig->CSNR); + TEST_ASSERT_EQUAL(1u, spi_framInterface.pConfig->CSNR); + TEST_ASSERT_EQUAL(1u, spi_spsInterface.pConfig->CSNR); + TEST_ASSERT_EQUAL(SPI_HARDWARE_CHIP_SELECT_0_ACTIVE, spi_sbcMcuInterface.pConfig->CSNR); +} + +/** + * @brief Testing static function #SPI_InitializeChipSelectsAfe + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/1: invalid string -> assert + * - Routine validation: + * - RT1/1: configuration register is properly set + */ +void testSPI_InitializeChipSelectsAfeAdi(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/1 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_SPI_InitializeChipSelectsAfe(BS_NR_OF_STRINGS)); + + /* ======= Routine tests =============================================== */ + /* ======= RT1/1: Test implementation */ + /* ======= RT1/1: call function under test */ + for (uint8_t s = 0u; s < BS_NR_OF_STRINGS; s++) { + TEST_SPI_InitializeChipSelectsAfe(s); + } + /* ======= RT1/1: test output verification */ + for (uint8_t s = 0u; s < BS_NR_OF_STRINGS; s++) { + TEST_ASSERT_EQUAL(spiTestArrayResultsAdi[s], spi_adiInterface[s].pConfig->CSNR); + } +} diff --git a/tests/unit/app/driver/spi/test_spi_debug.c b/tests/unit/app/driver/spi/test_spi_debug.c new file mode 100644 index 00000000..42d6d6a1 --- /dev/null +++ b/tests/unit/app/driver/spi/test_spi_debug.c @@ -0,0 +1,232 @@ +/** + * + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * We kindly request you to use one or more of the following phrases to refer to + * foxBMS in your hardware, software, documentation or advertising materials: + * + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" + * + */ + +/** + * @file test_spi_debug.c + * @author foxBMS Team + * @date 2020-10-20 (date of creation) + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup UNIT_TEST_IMPLEMENTATION + * @prefix TEST + * + * @brief Tests for the spi module + * + */ + +/*========== Includes =======================================================*/ +#include "unity.h" +#include "MockHL_spi.h" +#include "MockHL_sys_dma.h" +#include "Mockdma_cfg.h" +#include "Mockio.h" +#include "Mockmcu.h" +#include "Mockos.h" +#include "Mockspi_cfg.h" + +#include "spi.h" +#include "spi_cfg-helper.h" +#include "test_assert_helper.h" + +#include + +/*========== Unit Testing Framework Directives ==============================*/ +TEST_SOURCE_FILE("spi.c") + +TEST_INCLUDE_PATH("../../src/app/driver/config") +TEST_INCLUDE_PATH("../../src/app/driver/dma") +TEST_INCLUDE_PATH("../../src/app/driver/io") +TEST_INCLUDE_PATH("../../src/app/driver/spi") + +/*========== Definitions and Implementations for Unit Test ==================*/ + +long FSYS_RaisePrivilege(void) { + return 0; +} + +/** SPI enumeration for DMA */ +spiBASE_t *dma_spiInterfaces[DMA_NUMBER_SPI_INTERFACES] = { + spiREG1, /*!< SPI1 */ + spiREG2, /*!< SPI2 */ + spiREG3, /*!< SPI3 */ + spiREG4, /*!< SPI4 */ + spiREG5, /*!< SPI5 */ +}; + +/** DMA channel configuration for SPI communication */ +DMA_CHANNEL_CONFIG_s dma_spiDmaChannels[DMA_NUMBER_SPI_INTERFACES] = { + {DMA_CH0, DMA_CH1}, /*!< SPI1 */ + {DMA_CH2, DMA_CH3}, /*!< SPI2 */ + {DMA_CH4, DMA_CH5}, /*!< SPI3 */ + {DMA_CH6, DMA_CH7}, /*!< SPI4 */ + {DMA_CH8, DMA_CH9}, /*!< SPI5 */ +}; + +/** SPI data configuration struct for FRAM communication */ +static spiDAT1_t spi_kFramDataConfig = { + /* struct is implemented in the TI HAL and uses uppercase true and false */ + .CS_HOLD = TRUE, /* If true, HW chip select kept active */ + .WDEL = TRUE, /* Activation of delay between words */ + .DFSEL = SPI_FMT_1, /* Data word format selection */ + /* Hardware chip select is configured automatically depending on configuration in #SPI_INTERFACE_CONFIG_s */ + .CSNR = SPI_HARDWARE_CHIP_SELECT_DISABLE_ALL, +}; + +/** SPI data configuration struct for SPS communication in low speed (4MHz) */ +static spiDAT1_t spi_kSpsDataConfigLowSpeed = { + /* struct is implemented in the TI HAL and uses uppercase true and false */ + .CS_HOLD = TRUE, /* If true, HW chip select kept active */ + .WDEL = TRUE, /* Activation of delay between words */ + .DFSEL = SPI_FMT_1, /* Data word format selection */ + /* Hardware chip select is configured automatically depending on configuration in #SPI_INTERFACE_CONFIG_s */ + .CSNR = SPI_HARDWARE_CHIP_SELECT_DISABLE_ALL, +}; + +/** SPI configuration struct for SBC communication */ +static spiDAT1_t spi_kSbcDataConfig = { + /* struct is implemented in the TI HAL and uses uppercase true and false */ + .CS_HOLD = TRUE, /* If true, HW chip select kept active */ + .WDEL = TRUE, /* Activation of delay between words */ + .DFSEL = SPI_FMT_0, /* Data word format selection */ + /* Hardware chip select is configured automatically depending on configuration in #SPI_INTERFACE_CONFIG_s */ + .CSNR = SPI_HARDWARE_CHIP_SELECT_DISABLE_ALL, +}; + +/** SPI interface configuration for FRAM communication */ +SPI_INTERFACE_CONFIG_s spi_framInterface = { + .pConfig = &spi_kFramDataConfig, + .pNode = spiREG3, + .pGioPort = &(spiREG3->PC3), + .csPin = 1u, + .csType = SPI_CHIP_SELECT_SOFTWARE, +}; + +/** SPI interface configuration for SPS communication */ +SPI_INTERFACE_CONFIG_s spi_spsInterface = { + .pConfig = &spi_kSpsDataConfigLowSpeed, + .pNode = spiREG2, + .pGioPort = &SPI_SPS_CS_GIOPORT, + .csPin = SPI_SPS_CS_PIN, + .csType = SPI_CHIP_SELECT_SOFTWARE, +}; + +/** SPI interface configuration for SBC communication */ +SPI_INTERFACE_CONFIG_s spi_sbcMcuInterface = { + .pConfig = &spi_kSbcDataConfig, + .pNode = spiREG2, + .pGioPort = &(spiREG2->PC3), + .csPin = 0u, + .csType = SPI_CHIP_SELECT_HARDWARE, +}; + +/** struct containing the lock state of the SPI interfaces */ +SPI_BUSY_STATE_e spi_busyFlags[] = { + SPI_IDLE, + SPI_IDLE, + SPI_IDLE, + SPI_IDLE, + SPI_IDLE, +}; + +const uint8_t spi_nrBusyFlags = sizeof(spi_busyFlags) / sizeof(SPI_BUSY_STATE_e); + +/** mock for testing with an SPI handle */ +spiBASE_t spiMockHandle = {0}; + +spi_config_reg_t spiMockConfigRegister = {0}; + +/*========== Setup and Teardown =============================================*/ +void setUp(void) { + /* make sure PC0 of config register is clean */ + spiMockConfigRegister.CONFIG_PC0 = 0; +} + +void tearDown(void) { +} + +/*========== Test Cases =====================================================*/ +/** + * @brief Testing static function #SPI_InitializeChipSelects + * @details The following cases need to be tested: + * - Argument validation: + * - none (void function) + * - Routine validation: + * - RT1/1: software chip select pin in the valid range is verbatim + * piped through the function + */ +void testSPI_InitializeChipSelects(void) { + /* ======= Assertion tests ============================================= */ + /* none */ + + /* ======= Routine tests =============================================== */ + /* ======= RT1/1: Test implementation */ + + /* ======= RT1/1: call function under test */ + TEST_SPI_InitializeChipSelects(); + + /* ======= RT1/1: test output verification */ + TEST_ASSERT_EQUAL(1u, spi_framInterface.pConfig->CSNR); + TEST_ASSERT_EQUAL(1u, spi_spsInterface.pConfig->CSNR); + TEST_ASSERT_EQUAL(SPI_HARDWARE_CHIP_SELECT_0_ACTIVE, spi_sbcMcuInterface.pConfig->CSNR); +} + +/** + * @brief Testing static function #SPI_InitializeChipSelectsAfe + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/1: invalid string -> assert + * - Routine validation: + * - RT1/1: configuration register is properly set + */ +void testSPI_InitializeChipSelectsAfeDebug(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/1 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_SPI_InitializeChipSelectsAfe(BS_NR_OF_STRINGS)); + + /* ======= Routine tests =============================================== */ + /* ======= RT1/1: Test implementation */ + /* ======= RT1/1: call function under test */ + for (uint8_t s = 0u; s < BS_NR_OF_STRINGS; s++) { + TEST_SPI_InitializeChipSelectsAfe(s); + } + /* ======= RT1/1: test output verification */ + /* nothing to check */ +} diff --git a/tests/unit/app/driver/spi/test_spi_ltc.c b/tests/unit/app/driver/spi/test_spi_ltc.c new file mode 100644 index 00000000..dc8e92a3 --- /dev/null +++ b/tests/unit/app/driver/spi/test_spi_ltc.c @@ -0,0 +1,262 @@ +/** + * + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * We kindly request you to use one or more of the following phrases to refer to + * foxBMS in your hardware, software, documentation or advertising materials: + * + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" + * + */ + +/** + * @file test_spi_ltc.c + * @author foxBMS Team + * @date 2020-10-20 (date of creation) + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup UNIT_TEST_IMPLEMENTATION + * @prefix TEST + * + * @brief Tests for the spi module + * + */ + +/*========== Includes =======================================================*/ +#include "unity.h" +#include "MockHL_spi.h" +#include "MockHL_sys_dma.h" +#include "Mockdma_cfg.h" +#include "Mockio.h" +#include "Mockmcu.h" +#include "Mockos.h" +#include "Mockspi_cfg.h" + +#include "spi.h" +#include "spi_cfg-helper.h" +#include "test_assert_helper.h" + +#include + +/*========== Unit Testing Framework Directives ==============================*/ +TEST_SOURCE_FILE("spi.c") + +TEST_INCLUDE_PATH("../../src/app/driver/config") +TEST_INCLUDE_PATH("../../src/app/driver/dma") +TEST_INCLUDE_PATH("../../src/app/driver/io") +TEST_INCLUDE_PATH("../../src/app/driver/spi") + +/*========== Definitions and Implementations for Unit Test ==================*/ + +long FSYS_RaisePrivilege(void) { + return 0; +} + +/** SPI enumeration for DMA */ +spiBASE_t *dma_spiInterfaces[DMA_NUMBER_SPI_INTERFACES] = { + spiREG1, /*!< SPI1 */ + spiREG2, /*!< SPI2 */ + spiREG3, /*!< SPI3 */ + spiREG4, /*!< SPI4 */ + spiREG5, /*!< SPI5 */ +}; + +/** DMA channel configuration for SPI communication */ +DMA_CHANNEL_CONFIG_s dma_spiDmaChannels[DMA_NUMBER_SPI_INTERFACES] = { + {DMA_CH0, DMA_CH1}, /*!< SPI1 */ + {DMA_CH2, DMA_CH3}, /*!< SPI2 */ + {DMA_CH4, DMA_CH5}, /*!< SPI3 */ + {DMA_CH6, DMA_CH7}, /*!< SPI4 */ + {DMA_CH8, DMA_CH9}, /*!< SPI5 */ +}; + +/** SPI data configuration struct for LTC communication */ +static spiDAT1_t spi_kLtcDataConfig[BS_NR_OF_STRINGS] = { + { /* struct is implemented in the TI HAL and uses uppercase true and false */ + .CS_HOLD = TRUE, /* If true, HW chip select kept active between words */ + .WDEL = FALSE, /* Activation of delay between words */ + .DFSEL = SPI_FMT_0, /* Data word format selection */ + /* Hardware chip select is configured automatically depending on configuration in #SPI_INTERFACE_CONFIG_s */ + .CSNR = SPI_HARDWARE_CHIP_SELECT_DISABLE_ALL}, +}; + +/** SPI data configuration struct for FRAM communication */ +static spiDAT1_t spi_kFramDataConfig = { + /* struct is implemented in the TI HAL and uses uppercase true and false */ + .CS_HOLD = TRUE, /* If true, HW chip select kept active */ + .WDEL = TRUE, /* Activation of delay between words */ + .DFSEL = SPI_FMT_1, /* Data word format selection */ + /* Hardware chip select is configured automatically depending on configuration in #SPI_INTERFACE_CONFIG_s */ + .CSNR = SPI_HARDWARE_CHIP_SELECT_DISABLE_ALL, +}; + +/** SPI data configuration struct for SPS communication in low speed (4MHz) */ +static spiDAT1_t spi_kSpsDataConfigLowSpeed = { + /* struct is implemented in the TI HAL and uses uppercase true and false */ + .CS_HOLD = TRUE, /* If true, HW chip select kept active */ + .WDEL = TRUE, /* Activation of delay between words */ + .DFSEL = SPI_FMT_1, /* Data word format selection */ + /* Hardware chip select is configured automatically depending on configuration in #SPI_INTERFACE_CONFIG_s */ + .CSNR = SPI_HARDWARE_CHIP_SELECT_DISABLE_ALL, +}; + +/** SPI configuration struct for SBC communication */ +static spiDAT1_t spi_kSbcDataConfig = { + /* struct is implemented in the TI HAL and uses uppercase true and false */ + .CS_HOLD = TRUE, /* If true, HW chip select kept active */ + .WDEL = TRUE, /* Activation of delay between words */ + .DFSEL = SPI_FMT_0, /* Data word format selection */ + /* Hardware chip select is configured automatically depending on configuration in #SPI_INTERFACE_CONFIG_s */ + .CSNR = SPI_HARDWARE_CHIP_SELECT_DISABLE_ALL, +}; + +/** + * SPI interface configuration for LTC communication + * This is a list of structs because of multi string + */ +SPI_INTERFACE_CONFIG_s spi_ltcInterface[BS_NR_OF_STRINGS] = { + { + .pConfig = &spi_kLtcDataConfig[0u], + .pNode = spiREG1, + .pGioPort = &(spiREG1->PC3), + .csPin = 1u, + .csType = SPI_CHIP_SELECT_HARDWARE, + }, +}; + +/** SPI interface configuration for FRAM communication */ +SPI_INTERFACE_CONFIG_s spi_framInterface = { + .pConfig = &spi_kFramDataConfig, + .pNode = spiREG3, + .pGioPort = &(spiREG3->PC3), + .csPin = 1u, + .csType = SPI_CHIP_SELECT_SOFTWARE, +}; + +/** SPI interface configuration for SPS communication */ +SPI_INTERFACE_CONFIG_s spi_spsInterface = { + .pConfig = &spi_kSpsDataConfigLowSpeed, + .pNode = spiREG2, + .pGioPort = &SPI_SPS_CS_GIOPORT, + .csPin = SPI_SPS_CS_PIN, + .csType = SPI_CHIP_SELECT_SOFTWARE, +}; + +/** SPI interface configuration for SBC communication */ +SPI_INTERFACE_CONFIG_s spi_sbcMcuInterface = { + .pConfig = &spi_kSbcDataConfig, + .pNode = spiREG2, + .pGioPort = &(spiREG2->PC3), + .csPin = 0u, + .csType = SPI_CHIP_SELECT_HARDWARE, +}; + +/** struct containing the lock state of the SPI interfaces */ +SPI_BUSY_STATE_e spi_busyFlags[] = { + SPI_IDLE, + SPI_IDLE, + SPI_IDLE, + SPI_IDLE, + SPI_IDLE, +}; + +const uint8_t spi_nrBusyFlags = sizeof(spi_busyFlags) / sizeof(SPI_BUSY_STATE_e); + +/** mock for testing with an SPI handle */ +spiBASE_t spiMockHandle = {0}; + +spi_config_reg_t spiMockConfigRegister = {0}; + +uint8_t spiTestArrayResultsLtc[BS_NR_OF_STRINGS] = {SPI_HARDWARE_CHIP_SELECT_1_ACTIVE}; + +/*========== Setup and Teardown =============================================*/ +void setUp(void) { + /* make sure PC0 of config register is clean */ + spiMockConfigRegister.CONFIG_PC0 = 0; +} + +void tearDown(void) { +} + +/*========== Test Cases =====================================================*/ +/** + * @brief Testing static function #SPI_InitializeChipSelects + * @details The following cases need to be tested: + * - Argument validation: + * - none (void function) + * - Routine validation: + * - RT1/1: software chip select pin in the valid range is verbatim + * piped through the function + */ +void testSPI_InitializeChipSelects(void) { + /* ======= Assertion tests ============================================= */ + /* none */ + + /* ======= Routine tests =============================================== */ + /* ======= RT1/1: Test implementation */ + const uint8_t currentString = 0u; + + /* ======= RT1/1: call function under test */ + TEST_SPI_InitializeChipSelects(); + + /* ======= RT1/1: test output verification */ + TEST_ASSERT_EQUAL(SPI_HARDWARE_CHIP_SELECT_1_ACTIVE, spi_ltcInterface[currentString].pConfig->CSNR); + TEST_ASSERT_EQUAL(1u, spi_framInterface.pConfig->CSNR); + TEST_ASSERT_EQUAL(1u, spi_spsInterface.pConfig->CSNR); + TEST_ASSERT_EQUAL(SPI_HARDWARE_CHIP_SELECT_0_ACTIVE, spi_sbcMcuInterface.pConfig->CSNR); +} + +/** + * @brief Testing static function #SPI_InitializeChipSelectsAfe + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/1: invalid string -> assert + * - Routine validation: + * - RT1/1: configuration register is properly set + */ +void testSPI_InitializeChipSelectsAfeLtc(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/1 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_SPI_InitializeChipSelectsAfe(BS_NR_OF_STRINGS)); + + /* ======= Routine tests =============================================== */ + /* ======= RT1/1: Test implementation */ + /* ======= RT1/1: call function under test */ + for (uint8_t s = 0u; s < BS_NR_OF_STRINGS; s++) { + TEST_SPI_InitializeChipSelectsAfe(s); + } + /* ======= RT1/1: test output verification */ + for (uint8_t s = 0u; s < BS_NR_OF_STRINGS; s++) { + TEST_ASSERT_EQUAL(spiTestArrayResultsLtc[s], spi_ltcInterface[s].pConfig->CSNR); + } +} diff --git a/tests/unit/app/driver/spi/test_spi_mxm.c b/tests/unit/app/driver/spi/test_spi_mxm.c new file mode 100644 index 00000000..f4d14089 --- /dev/null +++ b/tests/unit/app/driver/spi/test_spi_mxm.c @@ -0,0 +1,256 @@ +/** + * + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * We kindly request you to use one or more of the following phrases to refer to + * foxBMS in your hardware, software, documentation or advertising materials: + * + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" + * + */ + +/** + * @file test_spi_mxm.c + * @author foxBMS Team + * @date 2020-10-20 (date of creation) + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup UNIT_TEST_IMPLEMENTATION + * @prefix TEST + * + * @brief Tests for the spi module + * + */ + +/*========== Includes =======================================================*/ +#include "unity.h" +#include "MockHL_spi.h" +#include "MockHL_sys_dma.h" +#include "Mockdma_cfg.h" +#include "Mockio.h" +#include "Mockmcu.h" +#include "Mockos.h" +#include "Mockspi_cfg.h" + +#include "spi.h" +#include "spi_cfg-helper.h" +#include "test_assert_helper.h" + +#include + +/*========== Unit Testing Framework Directives ==============================*/ +TEST_SOURCE_FILE("spi.c") + +TEST_INCLUDE_PATH("../../src/app/driver/config") +TEST_INCLUDE_PATH("../../src/app/driver/dma") +TEST_INCLUDE_PATH("../../src/app/driver/io") +TEST_INCLUDE_PATH("../../src/app/driver/spi") + +/*========== Definitions and Implementations for Unit Test ==================*/ + +long FSYS_RaisePrivilege(void) { + return 0; +} + +/** SPI enumeration for DMA */ +spiBASE_t *dma_spiInterfaces[DMA_NUMBER_SPI_INTERFACES] = { + spiREG1, /*!< SPI1 */ + spiREG2, /*!< SPI2 */ + spiREG3, /*!< SPI3 */ + spiREG4, /*!< SPI4 */ + spiREG5, /*!< SPI5 */ +}; + +/** DMA channel configuration for SPI communication */ +DMA_CHANNEL_CONFIG_s dma_spiDmaChannels[DMA_NUMBER_SPI_INTERFACES] = { + {DMA_CH0, DMA_CH1}, /*!< SPI1 */ + {DMA_CH2, DMA_CH3}, /*!< SPI2 */ + {DMA_CH4, DMA_CH5}, /*!< SPI3 */ + {DMA_CH6, DMA_CH7}, /*!< SPI4 */ + {DMA_CH8, DMA_CH9}, /*!< SPI5 */ +}; + +/** SPI data configuration struct for MXM communication */ +static spiDAT1_t spi_kMxmDataConfig = { + .CS_HOLD = TRUE, /* If true, HW chip select kept active */ + .WDEL = TRUE, /* Activation of delay between words */ + .DFSEL = SPI_FMT_1, /* Data word format selection */ + /* Hardware chip select is configured automatically depending on configuration in #SPI_INTERFACE_CONFIG_s */ + .CSNR = SPI_HARDWARE_CHIP_SELECT_DISABLE_ALL, +}; + +/** SPI data configuration struct for FRAM communication */ +static spiDAT1_t spi_kFramDataConfig = { + /* struct is implemented in the TI HAL and uses uppercase true and false */ + .CS_HOLD = TRUE, /* If true, HW chip select kept active */ + .WDEL = TRUE, /* Activation of delay between words */ + .DFSEL = SPI_FMT_1, /* Data word format selection */ + /* Hardware chip select is configured automatically depending on configuration in #SPI_INTERFACE_CONFIG_s */ + .CSNR = SPI_HARDWARE_CHIP_SELECT_DISABLE_ALL, +}; + +/** SPI data configuration struct for SPS communication in low speed (4MHz) */ +static spiDAT1_t spi_kSpsDataConfigLowSpeed = { + /* struct is implemented in the TI HAL and uses uppercase true and false */ + .CS_HOLD = TRUE, /* If true, HW chip select kept active */ + .WDEL = TRUE, /* Activation of delay between words */ + .DFSEL = SPI_FMT_1, /* Data word format selection */ + /* Hardware chip select is configured automatically depending on configuration in #SPI_INTERFACE_CONFIG_s */ + .CSNR = SPI_HARDWARE_CHIP_SELECT_DISABLE_ALL, +}; + +/** SPI configuration struct for SBC communication */ +static spiDAT1_t spi_kSbcDataConfig = { + /* struct is implemented in the TI HAL and uses uppercase true and false */ + .CS_HOLD = TRUE, /* If true, HW chip select kept active */ + .WDEL = TRUE, /* Activation of delay between words */ + .DFSEL = SPI_FMT_0, /* Data word format selection */ + /* Hardware chip select is configured automatically depending on configuration in #SPI_INTERFACE_CONFIG_s */ + .CSNR = SPI_HARDWARE_CHIP_SELECT_DISABLE_ALL, +}; + +/** SPI interface configuration for MXM communication */ +SPI_INTERFACE_CONFIG_s spi_mxmInterface = { + .pConfig = &spi_kMxmDataConfig, + .pNode = spiREG4, + .pGioPort = &(spiREG4->PC3), + .csPin = 0u, + .csType = SPI_CHIP_SELECT_HARDWARE, +}; + +/** SPI interface configuration for FRAM communication */ +SPI_INTERFACE_CONFIG_s spi_framInterface = { + .pConfig = &spi_kFramDataConfig, + .pNode = spiREG3, + .pGioPort = &(spiREG3->PC3), + .csPin = 1u, + .csType = SPI_CHIP_SELECT_SOFTWARE, +}; + +/** SPI interface configuration for SPS communication */ +SPI_INTERFACE_CONFIG_s spi_spsInterface = { + .pConfig = &spi_kSpsDataConfigLowSpeed, + .pNode = spiREG2, + .pGioPort = &SPI_SPS_CS_GIOPORT, + .csPin = SPI_SPS_CS_PIN, + .csType = SPI_CHIP_SELECT_SOFTWARE, +}; + +/** SPI interface configuration for SBC communication */ +SPI_INTERFACE_CONFIG_s spi_sbcMcuInterface = { + .pConfig = &spi_kSbcDataConfig, + .pNode = spiREG2, + .pGioPort = &(spiREG2->PC3), + .csPin = 0u, + .csType = SPI_CHIP_SELECT_HARDWARE, +}; + +/** struct containing the lock state of the SPI interfaces */ +SPI_BUSY_STATE_e spi_busyFlags[] = { + SPI_IDLE, + SPI_IDLE, + SPI_IDLE, + SPI_IDLE, + SPI_IDLE, +}; + +const uint8_t spi_nrBusyFlags = sizeof(spi_busyFlags) / sizeof(SPI_BUSY_STATE_e); + +/** mock for testing with an SPI handle */ +spiBASE_t spiMockHandle = {0}; + +spi_config_reg_t spiMockConfigRegister = {0}; + +uint8_t spiTestArrayResultsMxm[BS_NR_OF_STRINGS] = {SPI_HARDWARE_CHIP_SELECT_0_ACTIVE}; + +/*========== Setup and Teardown =============================================*/ +void setUp(void) { + /* make sure PC0 of config register is clean */ + spiMockConfigRegister.CONFIG_PC0 = 0; +} + +void tearDown(void) { +} + +/*========== Test Cases =====================================================*/ +/** + * @brief Testing static function #SPI_InitializeChipSelects + * @details The following cases need to be tested: + * - Argument validation: + * - none (void function) + * - Routine validation: + * - RT1/1: software chip select pin in the valid range is verbatim + * piped through the function + */ +void testSPI_InitializeChipSelects(void) { + /* ======= Assertion tests ============================================= */ + /* none */ + + /* ======= Routine tests =============================================== */ + /* ======= RT1/1: Test implementation */ + /* currently no multistring support for maxim */ + + /* ======= RT1/1: call function under test */ + TEST_SPI_InitializeChipSelects(); + + /* ======= RT1/1: test output verification */ + TEST_ASSERT_EQUAL(SPI_HARDWARE_CHIP_SELECT_0_ACTIVE, spi_mxmInterface.pConfig->CSNR); + TEST_ASSERT_EQUAL(1u, spi_framInterface.pConfig->CSNR); + TEST_ASSERT_EQUAL(1u, spi_spsInterface.pConfig->CSNR); + TEST_ASSERT_EQUAL(SPI_HARDWARE_CHIP_SELECT_0_ACTIVE, spi_sbcMcuInterface.pConfig->CSNR); +} + +/** + * @brief Testing static function #SPI_InitializeChipSelectsAfe + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/1: invalid string -> assert + * - Routine validation: + * - RT1/1: configuration register is properly set + */ +void testSPI_InitializeChipSelectsAfeMxm(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/1 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_SPI_InitializeChipSelectsAfe(BS_NR_OF_STRINGS)); + + /* ======= Routine tests =============================================== */ + /* ======= RT1/1: Test implementation */ + /* ======= RT1/1: call function under test */ + for (uint8_t s = 0u; s < BS_NR_OF_STRINGS; s++) { + TEST_SPI_InitializeChipSelectsAfe(s); + } + /* ======= RT1/1: test output verification */ + for (uint8_t s = 0u; s < BS_NR_OF_STRINGS; s++) { + TEST_ASSERT_EQUAL(spiTestArrayResultsMxm[s], spi_mxmInterface.pConfig->CSNR); + } +} diff --git a/tests/unit/app/driver/spi/test_spi_nxp.c b/tests/unit/app/driver/spi/test_spi_nxp.c new file mode 100644 index 00000000..ab6a6b35 --- /dev/null +++ b/tests/unit/app/driver/spi/test_spi_nxp.c @@ -0,0 +1,281 @@ +/** + * + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * We kindly request you to use one or more of the following phrases to refer to + * foxBMS in your hardware, software, documentation or advertising materials: + * + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" + * + */ + +/** + * @file test_spi_nxp.c + * @author foxBMS Team + * @date 2020-10-20 (date of creation) + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup UNIT_TEST_IMPLEMENTATION + * @prefix TEST + * + * @brief Tests for the spi module + * + */ + +/*========== Includes =======================================================*/ +#include "unity.h" +#include "MockHL_spi.h" +#include "MockHL_sys_dma.h" +#include "Mockdma_cfg.h" +#include "Mockio.h" +#include "Mockmcu.h" +#include "Mockos.h" +#include "Mockspi_cfg.h" + +#include "spi.h" +#include "spi_cfg-helper.h" +#include "test_assert_helper.h" + +#include + +/*========== Unit Testing Framework Directives ==============================*/ +TEST_SOURCE_FILE("spi.c") + +TEST_INCLUDE_PATH("../../src/app/driver/config") +TEST_INCLUDE_PATH("../../src/app/driver/dma") +TEST_INCLUDE_PATH("../../src/app/driver/io") +TEST_INCLUDE_PATH("../../src/app/driver/spi") + +/*========== Definitions and Implementations for Unit Test ==================*/ + +long FSYS_RaisePrivilege(void) { + return 0; +} + +/** SPI enumeration for DMA */ +spiBASE_t *dma_spiInterfaces[DMA_NUMBER_SPI_INTERFACES] = { + spiREG1, /*!< SPI1 */ + spiREG2, /*!< SPI2 */ + spiREG3, /*!< SPI3 */ + spiREG4, /*!< SPI4 */ + spiREG5, /*!< SPI5 */ +}; + +/** DMA channel configuration for SPI communication */ +DMA_CHANNEL_CONFIG_s dma_spiDmaChannels[DMA_NUMBER_SPI_INTERFACES] = { + {DMA_CH0, DMA_CH1}, /*!< SPI1 */ + {DMA_CH2, DMA_CH3}, /*!< SPI2 */ + {DMA_CH4, DMA_CH5}, /*!< SPI3 */ + {DMA_CH6, DMA_CH7}, /*!< SPI4 */ + {DMA_CH8, DMA_CH9}, /*!< SPI5 */ +}; + +/** SPI data configuration struct for NXP MC33775A communication, Tx part */ +static spiDAT1_t spi_kNxp775DataConfigTx[BS_NR_OF_STRINGS] = { + {.CS_HOLD = TRUE, /* If true, HW chip select kept active */ + .WDEL = TRUE, /* Activation of delay between words */ + .DFSEL = SPI_FMT_2, /* Data word format selection */ + /* Hardware chip select is configured automatically depending on configuration in #SPI_INTERFACE_CONFIG_s */ + .CSNR = SPI_HARDWARE_CHIP_SELECT_DISABLE_ALL}, +}; + +/** SPI data configuration struct for NXP MC33775A communication, Rx part */ +static spiDAT1_t spi_kNxp775DataConfigRx[BS_NR_OF_STRINGS] = { + {.CS_HOLD = TRUE, /* If true, HW chip select kept active */ + .WDEL = TRUE, /* Activation of delay between words */ + .DFSEL = SPI_FMT_2, /* Data word format selection */ + /* Hardware chip select is configured automatically depending on configuration in #SPI_INTERFACE_CONFIG_s */ + .CSNR = SPI_HARDWARE_CHIP_SELECT_DISABLE_ALL}, +}; + +/** SPI data configuration struct for FRAM communication */ +static spiDAT1_t spi_kFramDataConfig = { + /* struct is implemented in the TI HAL and uses uppercase true and false */ + .CS_HOLD = TRUE, /* If true, HW chip select kept active */ + .WDEL = TRUE, /* Activation of delay between words */ + .DFSEL = SPI_FMT_1, /* Data word format selection */ + /* Hardware chip select is configured automatically depending on configuration in #SPI_INTERFACE_CONFIG_s */ + .CSNR = SPI_HARDWARE_CHIP_SELECT_DISABLE_ALL, +}; + +/** SPI data configuration struct for SPS communication in low speed (4MHz) */ +static spiDAT1_t spi_kSpsDataConfigLowSpeed = { + /* struct is implemented in the TI HAL and uses uppercase true and false */ + .CS_HOLD = TRUE, /* If true, HW chip select kept active */ + .WDEL = TRUE, /* Activation of delay between words */ + .DFSEL = SPI_FMT_1, /* Data word format selection */ + /* Hardware chip select is configured automatically depending on configuration in #SPI_INTERFACE_CONFIG_s */ + .CSNR = SPI_HARDWARE_CHIP_SELECT_DISABLE_ALL, +}; + +/** SPI configuration struct for SBC communication */ +static spiDAT1_t spi_kSbcDataConfig = { + /* struct is implemented in the TI HAL and uses uppercase true and false */ + .CS_HOLD = TRUE, /* If true, HW chip select kept active */ + .WDEL = TRUE, /* Activation of delay between words */ + .DFSEL = SPI_FMT_0, /* Data word format selection */ + /* Hardware chip select is configured automatically depending on configuration in #SPI_INTERFACE_CONFIG_s */ + .CSNR = SPI_HARDWARE_CHIP_SELECT_DISABLE_ALL, +}; + +/** SPI interface configuration for N775 communication Tx part */ +SPI_INTERFACE_CONFIG_s spi_nxp775InterfaceTx[BS_NR_OF_STRINGS] = { + { + .pConfig = &spi_kNxp775DataConfigTx[0u], + .pNode = spiREG1, + .pGioPort = &(spiREG1->PC3), + .csPin = 1u, + .csType = SPI_CHIP_SELECT_HARDWARE, + }, +}; + +/** SPI interface configuration for N775 communication, Rx part */ +SPI_INTERFACE_CONFIG_s spi_nxp775InterfaceRx[BS_NR_OF_STRINGS] = { + { + .pConfig = &spi_kNxp775DataConfigRx[0u], + .pNode = spiREG4, + .pGioPort = &(spiREG4->PC3), + .csPin = 0u, + .csType = SPI_CHIP_SELECT_HARDWARE, + }, +}; + +/** SPI interface configuration for FRAM communication */ +SPI_INTERFACE_CONFIG_s spi_framInterface = { + .pConfig = &spi_kFramDataConfig, + .pNode = spiREG3, + .pGioPort = &(spiREG3->PC3), + .csPin = 1u, + .csType = SPI_CHIP_SELECT_SOFTWARE, +}; + +/** SPI interface configuration for SPS communication */ +SPI_INTERFACE_CONFIG_s spi_spsInterface = { + .pConfig = &spi_kSpsDataConfigLowSpeed, + .pNode = spiREG2, + .pGioPort = &SPI_SPS_CS_GIOPORT, + .csPin = SPI_SPS_CS_PIN, + .csType = SPI_CHIP_SELECT_SOFTWARE, +}; + +/** SPI interface configuration for SBC communication */ +SPI_INTERFACE_CONFIG_s spi_sbcMcuInterface = { + .pConfig = &spi_kSbcDataConfig, + .pNode = spiREG2, + .pGioPort = &(spiREG2->PC3), + .csPin = 0u, + .csType = SPI_CHIP_SELECT_HARDWARE, +}; + +/** struct containing the lock state of the SPI interfaces */ +SPI_BUSY_STATE_e spi_busyFlags[] = { + SPI_IDLE, + SPI_IDLE, + SPI_IDLE, + SPI_IDLE, + SPI_IDLE, +}; + +const uint8_t spi_nrBusyFlags = sizeof(spi_busyFlags) / sizeof(SPI_BUSY_STATE_e); + +/** mock for testing with an SPI handle */ +spiBASE_t spiMockHandle = {0}; + +spi_config_reg_t spiMockConfigRegister = {0}; + +uint8_t spiTestArrayResultsNxpTx[BS_NR_OF_STRINGS] = {SPI_HARDWARE_CHIP_SELECT_1_ACTIVE}; +uint8_t spiTestArrayResultsNxpRx[BS_NR_OF_STRINGS] = {SPI_HARDWARE_CHIP_SELECT_0_ACTIVE}; + +/*========== Setup and Teardown =============================================*/ +void setUp(void) { + /* make sure PC0 of config register is clean */ + spiMockConfigRegister.CONFIG_PC0 = 0; +} + +void tearDown(void) { +} + +/*========== Test Cases =====================================================*/ +/** + * @brief Testing static function #SPI_InitializeChipSelects + * @details The following cases need to be tested: + * - Argument validation: + * - none (void function) + * - Routine validation: + * - RT1/1: software chip select pin in the valid range is verbatim + * piped through the function + */ +void testSPI_InitializeChipSelects(void) { + /* ======= Assertion tests ============================================= */ + /* none */ + + /* ======= Routine tests =============================================== */ + /* ======= RT1/1: Test implementation */ + const uint8_t currentString = 0u; + + /* ======= RT1/1: call function under test */ + TEST_SPI_InitializeChipSelects(); + + /* ======= RT1/1: test output verification */ + TEST_ASSERT_EQUAL(SPI_HARDWARE_CHIP_SELECT_1_ACTIVE, spi_nxp775InterfaceTx[currentString].pConfig->CSNR); + TEST_ASSERT_EQUAL(SPI_HARDWARE_CHIP_SELECT_0_ACTIVE, spi_nxp775InterfaceRx[currentString].pConfig->CSNR); + TEST_ASSERT_EQUAL(1u, spi_framInterface.pConfig->CSNR); + TEST_ASSERT_EQUAL(1u, spi_spsInterface.pConfig->CSNR); + TEST_ASSERT_EQUAL(SPI_HARDWARE_CHIP_SELECT_0_ACTIVE, spi_sbcMcuInterface.pConfig->CSNR); +} + +/** + * @brief Testing static function #SPI_InitializeChipSelectsAfe + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/1: invalid string -> assert + * - Routine validation: + * - RT1/1: configuration register is properly set + */ +void testSPI_InitializeChipSelectsAfeNxp(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/1 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_SPI_InitializeChipSelectsAfe(BS_NR_OF_STRINGS)); + + /* ======= Routine tests =============================================== */ + /* ======= RT1/1: Test implementation */ + /* ======= RT1/1: call function under test */ + for (uint8_t s = 0u; s < BS_NR_OF_STRINGS; s++) { + TEST_SPI_InitializeChipSelectsAfe(s); + } + /* ======= RT1/1: test output verification */ + for (uint8_t s = 0u; s < BS_NR_OF_STRINGS; s++) { + TEST_ASSERT_EQUAL(spiTestArrayResultsNxpTx[s], spi_nxp775InterfaceTx[s].pConfig->CSNR); + TEST_ASSERT_EQUAL(spiTestArrayResultsNxpRx[s], spi_nxp775InterfaceRx[s].pConfig->CSNR); + } +} diff --git a/tests/unit/app/driver/spi/test_spi_ti.c b/tests/unit/app/driver/spi/test_spi_ti.c new file mode 100644 index 00000000..3d0dfd48 --- /dev/null +++ b/tests/unit/app/driver/spi/test_spi_ti.c @@ -0,0 +1,232 @@ +/** + * + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * We kindly request you to use one or more of the following phrases to refer to + * foxBMS in your hardware, software, documentation or advertising materials: + * + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" + * + */ + +/** + * @file test_spi_ti.c + * @author foxBMS Team + * @date 2020-10-20 (date of creation) + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 + * @ingroup UNIT_TEST_IMPLEMENTATION + * @prefix TEST + * + * @brief Tests for the spi module + * + */ + +/*========== Includes =======================================================*/ +#include "unity.h" +#include "MockHL_spi.h" +#include "MockHL_sys_dma.h" +#include "Mockdma_cfg.h" +#include "Mockio.h" +#include "Mockmcu.h" +#include "Mockos.h" +#include "Mockspi_cfg.h" + +#include "spi.h" +#include "spi_cfg-helper.h" +#include "test_assert_helper.h" + +#include + +/*========== Unit Testing Framework Directives ==============================*/ +TEST_SOURCE_FILE("spi.c") + +TEST_INCLUDE_PATH("../../src/app/driver/config") +TEST_INCLUDE_PATH("../../src/app/driver/dma") +TEST_INCLUDE_PATH("../../src/app/driver/io") +TEST_INCLUDE_PATH("../../src/app/driver/spi") + +/*========== Definitions and Implementations for Unit Test ==================*/ + +long FSYS_RaisePrivilege(void) { + return 0; +} + +/** SPI enumeration for DMA */ +spiBASE_t *dma_spiInterfaces[DMA_NUMBER_SPI_INTERFACES] = { + spiREG1, /*!< SPI1 */ + spiREG2, /*!< SPI2 */ + spiREG3, /*!< SPI3 */ + spiREG4, /*!< SPI4 */ + spiREG5, /*!< SPI5 */ +}; + +/** DMA channel configuration for SPI communication */ +DMA_CHANNEL_CONFIG_s dma_spiDmaChannels[DMA_NUMBER_SPI_INTERFACES] = { + {DMA_CH0, DMA_CH1}, /*!< SPI1 */ + {DMA_CH2, DMA_CH3}, /*!< SPI2 */ + {DMA_CH4, DMA_CH5}, /*!< SPI3 */ + {DMA_CH6, DMA_CH7}, /*!< SPI4 */ + {DMA_CH8, DMA_CH9}, /*!< SPI5 */ +}; + +/** SPI data configuration struct for FRAM communication */ +static spiDAT1_t spi_kFramDataConfig = { + /* struct is implemented in the TI HAL and uses uppercase true and false */ + .CS_HOLD = TRUE, /* If true, HW chip select kept active */ + .WDEL = TRUE, /* Activation of delay between words */ + .DFSEL = SPI_FMT_1, /* Data word format selection */ + /* Hardware chip select is configured automatically depending on configuration in #SPI_INTERFACE_CONFIG_s */ + .CSNR = SPI_HARDWARE_CHIP_SELECT_DISABLE_ALL, +}; + +/** SPI data configuration struct for SPS communication in low speed (4MHz) */ +static spiDAT1_t spi_kSpsDataConfigLowSpeed = { + /* struct is implemented in the TI HAL and uses uppercase true and false */ + .CS_HOLD = TRUE, /* If true, HW chip select kept active */ + .WDEL = TRUE, /* Activation of delay between words */ + .DFSEL = SPI_FMT_1, /* Data word format selection */ + /* Hardware chip select is configured automatically depending on configuration in #SPI_INTERFACE_CONFIG_s */ + .CSNR = SPI_HARDWARE_CHIP_SELECT_DISABLE_ALL, +}; + +/** SPI configuration struct for SBC communication */ +static spiDAT1_t spi_kSbcDataConfig = { + /* struct is implemented in the TI HAL and uses uppercase true and false */ + .CS_HOLD = TRUE, /* If true, HW chip select kept active */ + .WDEL = TRUE, /* Activation of delay between words */ + .DFSEL = SPI_FMT_0, /* Data word format selection */ + /* Hardware chip select is configured automatically depending on configuration in #SPI_INTERFACE_CONFIG_s */ + .CSNR = SPI_HARDWARE_CHIP_SELECT_DISABLE_ALL, +}; + +/** SPI interface configuration for FRAM communication */ +SPI_INTERFACE_CONFIG_s spi_framInterface = { + .pConfig = &spi_kFramDataConfig, + .pNode = spiREG3, + .pGioPort = &(spiREG3->PC3), + .csPin = 1u, + .csType = SPI_CHIP_SELECT_SOFTWARE, +}; + +/** SPI interface configuration for SPS communication */ +SPI_INTERFACE_CONFIG_s spi_spsInterface = { + .pConfig = &spi_kSpsDataConfigLowSpeed, + .pNode = spiREG2, + .pGioPort = &SPI_SPS_CS_GIOPORT, + .csPin = SPI_SPS_CS_PIN, + .csType = SPI_CHIP_SELECT_SOFTWARE, +}; + +/** SPI interface configuration for SBC communication */ +SPI_INTERFACE_CONFIG_s spi_sbcMcuInterface = { + .pConfig = &spi_kSbcDataConfig, + .pNode = spiREG2, + .pGioPort = &(spiREG2->PC3), + .csPin = 0u, + .csType = SPI_CHIP_SELECT_HARDWARE, +}; + +/** struct containing the lock state of the SPI interfaces */ +SPI_BUSY_STATE_e spi_busyFlags[] = { + SPI_IDLE, + SPI_IDLE, + SPI_IDLE, + SPI_IDLE, + SPI_IDLE, +}; + +const uint8_t spi_nrBusyFlags = sizeof(spi_busyFlags) / sizeof(SPI_BUSY_STATE_e); + +/** mock for testing with an SPI handle */ +spiBASE_t spiMockHandle = {0}; + +spi_config_reg_t spiMockConfigRegister = {0}; + +/*========== Setup and Teardown =============================================*/ +void setUp(void) { + /* make sure PC0 of config register is clean */ + spiMockConfigRegister.CONFIG_PC0 = 0; +} + +void tearDown(void) { +} + +/*========== Test Cases =====================================================*/ +/** + * @brief Testing static function #SPI_InitializeChipSelects + * @details The following cases need to be tested: + * - Argument validation: + * - none (void function) + * - Routine validation: + * - RT1/1: software chip select pin in the valid range is verbatim + * piped through the function + */ +void testSPI_InitializeChipSelects(void) { + /* ======= Assertion tests ============================================= */ + /* none */ + + /* ======= Routine tests =============================================== */ + /* ======= RT1/1: Test implementation */ + + /* ======= RT1/1: call function under test */ + TEST_SPI_InitializeChipSelects(); + + /* ======= RT1/1: test output verification */ + TEST_ASSERT_EQUAL(1u, spi_framInterface.pConfig->CSNR); + TEST_ASSERT_EQUAL(1u, spi_spsInterface.pConfig->CSNR); + TEST_ASSERT_EQUAL(SPI_HARDWARE_CHIP_SELECT_0_ACTIVE, spi_sbcMcuInterface.pConfig->CSNR); +} + +/** + * @brief Testing static function #SPI_InitializeChipSelectsAfe + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/1: invalid string -> assert + * - Routine validation: + * - RT1/1: configuration register is properly set + */ +void testSPI_InitializeChipSelectsAfeTi(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/1 ======= */ + TEST_ASSERT_FAIL_ASSERT(TEST_SPI_InitializeChipSelectsAfe(BS_NR_OF_STRINGS)); + + /* ======= Routine tests =============================================== */ + /* ======= RT1/1: Test implementation */ + /* ======= RT1/1: call function under test */ + for (uint8_t s = 0u; s < BS_NR_OF_STRINGS; s++) { + TEST_SPI_InitializeChipSelectsAfe(s); + } + /* ======= RT1/1: test output verification */ + /* nothing to check */ +} diff --git a/tests/unit/app/driver/sps/test_sps.c b/tests/unit/app/driver/sps/test_sps.c index 47352800..65c0a613 100644 --- a/tests/unit/app/driver/sps/test_sps.c +++ b/tests/unit/app/driver/sps/test_sps.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_sps.c * @author foxBMS Team * @date 2020-10-28 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * @@ -111,14 +111,14 @@ SPS_CHANNEL_STATE_s sps_channelStatus[SPS_NR_OF_AVAILABLE_SPS_CHANNELS] = { }; const SPS_CHANNEL_FEEDBACK_MAPPING_s sps_kChannelFeedbackMapping[SPS_NR_OF_AVAILABLE_SPS_CHANNELS] = { - {PEX_PORT_EXPANDER1, PEX_PIN00}, - {PEX_PORT_EXPANDER1, PEX_PIN01}, - {PEX_PORT_EXPANDER1, PEX_PIN02}, - {PEX_PORT_EXPANDER1, PEX_PIN03}, - {PEX_PORT_EXPANDER1, PEX_PIN04}, - {PEX_PORT_EXPANDER1, PEX_PIN05}, - {PEX_PORT_EXPANDER1, PEX_PIN06}, - {PEX_PORT_EXPANDER1, PEX_PIN07}, + {PEX_PORT_EXPANDER1, PEX_PORT_0_PIN_0}, + {PEX_PORT_EXPANDER1, PEX_PORT_0_PIN_1}, + {PEX_PORT_EXPANDER1, PEX_PORT_0_PIN_2}, + {PEX_PORT_EXPANDER1, PEX_PORT_0_PIN_3}, + {PEX_PORT_EXPANDER1, PEX_PORT_0_PIN_4}, + {PEX_PORT_EXPANDER1, PEX_PORT_0_PIN_5}, + {PEX_PORT_EXPANDER1, PEX_PORT_0_PIN_6}, + {PEX_PORT_EXPANDER1, PEX_PORT_0_PIN_7}, }; /*========== Setup and Teardown =============================================*/ @@ -508,18 +508,18 @@ void testContactorSwitchOnAndOff(void) { /** test the states of PEX feedback function */ void testSPS_GetChannelPexFeedback(void) { /* report pin state 0 with normally open --> should report switch off */ - PEX_GetPin_ExpectAndReturn(PEX_PORT_EXPANDER1, PEX_PIN00, 0u); + PEX_GetPin_ExpectAndReturn(PEX_PORT_EXPANDER1, PEX_PORT_0_PIN_0, 0u); TEST_ASSERT_EQUAL(CONT_SWITCH_OFF, SPS_GetChannelPexFeedback(0u, true)); /* report pin state 1 with normally open --> should report switch on */ - PEX_GetPin_ExpectAndReturn(PEX_PORT_EXPANDER1, PEX_PIN00, 1u); + PEX_GetPin_ExpectAndReturn(PEX_PORT_EXPANDER1, PEX_PORT_0_PIN_0, 1u); TEST_ASSERT_EQUAL(CONT_SWITCH_ON, SPS_GetChannelPexFeedback(0u, true)); /* report pin state 0 with normally closed --> should report switch on */ - PEX_GetPin_ExpectAndReturn(PEX_PORT_EXPANDER1, PEX_PIN00, 0u); + PEX_GetPin_ExpectAndReturn(PEX_PORT_EXPANDER1, PEX_PORT_0_PIN_0, 0u); TEST_ASSERT_EQUAL(CONT_SWITCH_ON, SPS_GetChannelPexFeedback(0u, false)); /* report pin state 1 with normally closed --> should report switch off */ - PEX_GetPin_ExpectAndReturn(PEX_PORT_EXPANDER1, PEX_PIN00, 1u); + PEX_GetPin_ExpectAndReturn(PEX_PORT_EXPANDER1, PEX_PORT_0_PIN_0, 1u); TEST_ASSERT_EQUAL(CONT_SWITCH_OFF, SPS_GetChannelPexFeedback(0u, false)); } diff --git a/tests/unit/app/driver/ts/api/test_tsi_limits.c b/tests/unit/app/driver/ts/api/test_tsi_limits.c index 75cf9776..05e42cb5 100644 --- a/tests/unit/app/driver/ts/api/test_tsi_limits.c +++ b/tests/unit/app/driver/ts/api/test_tsi_limits.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_tsi_limits.c * @author foxBMS Team * @date 2021-01-15 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TSI * diff --git a/tests/unit/app/driver/ts/epcos/b57251v5103j060/lookup-table/test_epcos_b57251v5103j060_lookup-table.c b/tests/unit/app/driver/ts/epcos/b57251v5103j060/lookup-table/test_epcos_b57251v5103j060_lookup-table.c index daa4d9b2..9a3c8f1c 100644 --- a/tests/unit/app/driver/ts/epcos/b57251v5103j060/lookup-table/test_epcos_b57251v5103j060_lookup-table.c +++ b/tests/unit/app/driver/ts/epcos/b57251v5103j060/lookup-table/test_epcos_b57251v5103j060_lookup-table.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_epcos_b57251v5103j060_lookup-table.c * @author foxBMS Team * @date 2020-08-25 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/ts/epcos/b57251v5103j060/polynomial/test_epcos_b57251v5103j060_polynomial.c b/tests/unit/app/driver/ts/epcos/b57251v5103j060/polynomial/test_epcos_b57251v5103j060_polynomial.c index 03e84aae..ad8f8230 100644 --- a/tests/unit/app/driver/ts/epcos/b57251v5103j060/polynomial/test_epcos_b57251v5103j060_polynomial.c +++ b/tests/unit/app/driver/ts/epcos/b57251v5103j060/polynomial/test_epcos_b57251v5103j060_polynomial.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_epcos_b57251v5103j060_polynomial.c * @author foxBMS Team * @date 2020-08-25 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/ts/epcos/b57251v5103j060/test_epcos_b57251v5103j060.c b/tests/unit/app/driver/ts/epcos/b57251v5103j060/test_epcos_b57251v5103j060.c index b8a4b638..8b0d2dec 100644 --- a/tests/unit/app/driver/ts/epcos/b57251v5103j060/test_epcos_b57251v5103j060.c +++ b/tests/unit/app/driver/ts/epcos/b57251v5103j060/test_epcos_b57251v5103j060.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_epcos_b57251v5103j060.c * @author foxBMS Team * @date 2020-04-01 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/ts/epcos/b57861s0103f045/lookup-table/test_epcos_b57861s0103f045_lookup-table.c b/tests/unit/app/driver/ts/epcos/b57861s0103f045/lookup-table/test_epcos_b57861s0103f045_lookup-table.c index e6179a1f..f095081d 100644 --- a/tests/unit/app/driver/ts/epcos/b57861s0103f045/lookup-table/test_epcos_b57861s0103f045_lookup-table.c +++ b/tests/unit/app/driver/ts/epcos/b57861s0103f045/lookup-table/test_epcos_b57861s0103f045_lookup-table.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_epcos_b57861s0103f045_lookup-table.c * @author foxBMS Team * @date 2020-08-25 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/ts/epcos/b57861s0103f045/polynomial/test_epcos_b57861s0103f045_polynomial.c b/tests/unit/app/driver/ts/epcos/b57861s0103f045/polynomial/test_epcos_b57861s0103f045_polynomial.c index 201a8769..3f32bfc9 100644 --- a/tests/unit/app/driver/ts/epcos/b57861s0103f045/polynomial/test_epcos_b57861s0103f045_polynomial.c +++ b/tests/unit/app/driver/ts/epcos/b57861s0103f045/polynomial/test_epcos_b57861s0103f045_polynomial.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_epcos_b57861s0103f045_polynomial.c * @author foxBMS Team * @date 2020-08-25 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/ts/epcos/b57861s0103f045/test_epcos_b57861s0103f045.c b/tests/unit/app/driver/ts/epcos/b57861s0103f045/test_epcos_b57861s0103f045.c index c51b4e5b..7055f4c5 100644 --- a/tests/unit/app/driver/ts/epcos/b57861s0103f045/test_epcos_b57861s0103f045.c +++ b/tests/unit/app/driver/ts/epcos/b57861s0103f045/test_epcos_b57861s0103f045.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_epcos_b57861s0103f045.c * @author foxBMS Team * @date 2020-04-01 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/ts/fake/none/lookup-table/test_fake_none_lookup-table.c b/tests/unit/app/driver/ts/fake/none/lookup-table/test_fake_none_lookup-table.c index 7217743f..584c0999 100644 --- a/tests/unit/app/driver/ts/fake/none/lookup-table/test_fake_none_lookup-table.c +++ b/tests/unit/app/driver/ts/fake/none/lookup-table/test_fake_none_lookup-table.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_fake_none_lookup-table.c * @author foxBMS Team * @date 2020-08-25 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/ts/fake/none/polynomial/test_fake_none_polynomial.c b/tests/unit/app/driver/ts/fake/none/polynomial/test_fake_none_polynomial.c index 649b3da2..cdaa7b8a 100644 --- a/tests/unit/app/driver/ts/fake/none/polynomial/test_fake_none_polynomial.c +++ b/tests/unit/app/driver/ts/fake/none/polynomial/test_fake_none_polynomial.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_fake_none_polynomial.c * @author foxBMS Team * @date 2020-08-25 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/ts/fake/none/test_fake_none.c b/tests/unit/app/driver/ts/fake/none/test_fake_none.c index 1e341192..6f696f6e 100644 --- a/tests/unit/app/driver/ts/fake/none/test_fake_none.c +++ b/tests/unit/app/driver/ts/fake/none/test_fake_none.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_fake_none.c * @author foxBMS Team * @date 2020-08-25 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/ts/murata/ncxxxxh103/lookup-table/test_murata_ncxxxxh103_lookup-table.c b/tests/unit/app/driver/ts/murata/ncxxxxh103/lookup-table/test_murata_ncxxxxh103_lookup-table.c index 91d7a01d..581950d3 100644 --- a/tests/unit/app/driver/ts/murata/ncxxxxh103/lookup-table/test_murata_ncxxxxh103_lookup-table.c +++ b/tests/unit/app/driver/ts/murata/ncxxxxh103/lookup-table/test_murata_ncxxxxh103_lookup-table.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_murata_ncxxxxh103_lookup-table.c * @author foxBMS Team * @date 2022-10-13 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/ts/murata/ncxxxxh103/polynomial/test_murata_ncxxxxh103_polynomial.c b/tests/unit/app/driver/ts/murata/ncxxxxh103/polynomial/test_murata_ncxxxxh103_polynomial.c index 45f29ca7..c8e5937b 100644 --- a/tests/unit/app/driver/ts/murata/ncxxxxh103/polynomial/test_murata_ncxxxxh103_polynomial.c +++ b/tests/unit/app/driver/ts/murata/ncxxxxh103/polynomial/test_murata_ncxxxxh103_polynomial.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_murata_ncxxxxh103_polynomial.c * @author foxBMS Team * @date 2022-12-13 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/ts/murata/ncxxxxh103/test_murata_ncxxxxh103.c b/tests/unit/app/driver/ts/murata/ncxxxxh103/test_murata_ncxxxxh103.c index 99742d2f..90065073 100644 --- a/tests/unit/app/driver/ts/murata/ncxxxxh103/test_murata_ncxxxxh103.c +++ b/tests/unit/app/driver/ts/murata/ncxxxxh103/test_murata_ncxxxxh103.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_murata_ncxxxxh103.c * @author foxBMS Team * @date 2022-10-13 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_string-minimum-maximum-values.c b/tests/unit/app/driver/ts/semitec/103jt/lookup-table/test_semitec_103jt_lookup-table.c similarity index 63% rename from tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_string-minimum-maximum-values.c rename to tests/unit/app/driver/ts/semitec/103jt/lookup-table/test_semitec_103jt_lookup-table.c index 9c59299a..59d0ec45 100644 --- a/tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_string-minimum-maximum-values.c +++ b/tests/unit/app/driver/ts/semitec/103jt/lookup-table/test_semitec_103jt_lookup-table.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,58 +33,38 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ /** - * @file test_can_cbs_tx_string-minimum-maximum-values.c + * @file test_semitec_103jt_lookup-table.c * @author foxBMS Team - * @date 2021-04-22 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @date 2020-08-25 (date of creation) + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * - * @brief Tests for the CAN driver callbacks + * @brief Test of fake temperature sensor * */ /*========== Includes =======================================================*/ #include "unity.h" -#include "Mockbms.h" -#include "Mockcan.h" -#include "Mockdatabase.h" -#include "Mockdiag.h" -#include "Mockfoxmath.h" -#include "Mockimd.h" -#include "Mockos.h" +#include "Mocksemitec_103jt.h" -#include "database_cfg.h" - -#include "can_cbs_tx.h" -#include "can_cfg_tx-message-definitions.h" -#include "can_helper.h" - -#include +#include "foxmath.h" +#include "tsi.h" /*========== Unit Testing Framework Directives ==============================*/ -TEST_SOURCE_FILE("can_cbs_tx_string-minimum-maximum-values.c") +TEST_SOURCE_FILE("semitec_103jt_lookup-table.c") -TEST_INCLUDE_PATH("../../src/app/application/bms") -TEST_INCLUDE_PATH("../../src/app/driver/can") -TEST_INCLUDE_PATH("../../src/app/driver/can/cbs") -TEST_INCLUDE_PATH("../../src/app/driver/can/cbs/tx") -TEST_INCLUDE_PATH("../../src/app/driver/config") -TEST_INCLUDE_PATH("../../src/app/driver/contactor") TEST_INCLUDE_PATH("../../src/app/driver/foxmath") -TEST_INCLUDE_PATH("../../src/app/driver/imd") -TEST_INCLUDE_PATH("../../src/app/driver/rtc") -TEST_INCLUDE_PATH("../../src/app/driver/sps") -TEST_INCLUDE_PATH("../../src/app/engine/diag") -TEST_INCLUDE_PATH("../../src/app/task/config") +TEST_INCLUDE_PATH("../../src/app/driver/ts/api") +TEST_INCLUDE_PATH("../../src/app/driver/ts/semitec/103jt") /*========== Definitions and Implementations for Unit Test ==================*/ @@ -96,5 +76,9 @@ void tearDown(void) { } /*========== Test Cases =====================================================*/ -void testDummy(void) { +void testTSI_GetTemperatureFromSemitec103JTLookupTable(void) { + const uint8_t test_adcVoltage_mv = 5; + const float test_temperature = 1.0; + TS_Sem00GetTemperatureFromLut_ExpectAndReturn(test_adcVoltage_mv, test_temperature); + TEST_ASSERT_EQUAL(test_temperature, TSI_GetTemperature(test_adcVoltage_mv)); } diff --git a/tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_imd-request.c b/tests/unit/app/driver/ts/semitec/103jt/test_semitec_103jt.c similarity index 68% rename from tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_imd-request.c rename to tests/unit/app/driver/ts/semitec/103jt/test_semitec_103jt.c index 32c37329..f9d2bb29 100644 --- a/tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_imd-request.c +++ b/tests/unit/app/driver/ts/semitec/103jt/test_semitec_103jt.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,51 +33,36 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ /** - * @file test_can_cbs_tx_imd-request.c + * @file test_semitec_103jt.c * @author foxBMS Team - * @date 2023-06-14 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @date 2020-04-01 (date of creation) + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * - * @brief Tests for the CAN driver callbacks + * @brief Tests for the semitec_103jt module * */ /*========== Includes =======================================================*/ #include "unity.h" -#include "Mockcan.h" -#include "Mockdatabase.h" -#include "Mockdiag.h" -#include "Mockfoxmath.h" -#include "Mockimd.h" -#include "Mockos.h" -#include "database_cfg.h" - -#include "can_cbs_tx.h" -#include "can_cfg_tx-message-definitions.h" -#include "can_helper.h" +#include "foxmath.h" +#include "semitec_103jt.h" +#include "test_assert_helper.h" /*========== Unit Testing Framework Directives ==============================*/ -TEST_SOURCE_FILE("can_cbs_tx_imd-request.c") - -TEST_INCLUDE_PATH("../../src/app/driver/can") -TEST_INCLUDE_PATH("../../src/app/driver/can/cbs") -TEST_INCLUDE_PATH("../../src/app/driver/can/cbs/tx") -TEST_INCLUDE_PATH("../../src/app/driver/config") TEST_INCLUDE_PATH("../../src/app/driver/foxmath") -TEST_INCLUDE_PATH("../../src/app/driver/imd") -TEST_INCLUDE_PATH("../../src/app/engine/diag") -TEST_INCLUDE_PATH("../../src/app/task/config") +TEST_INCLUDE_PATH("../../src/app/driver/ts") +TEST_INCLUDE_PATH("../../src/app/driver/ts/semitec/103jt") /*========== Definitions and Implementations for Unit Test ==================*/ @@ -89,5 +74,13 @@ void tearDown(void) { } /*========== Test Cases =====================================================*/ -void testDummy(void) { +void testTS_Sem00GetTemperatureFromLutFixedValues(void) { + TEST_ASSERT_EQUAL_INT16(INT16_MIN, TS_Sem00GetTemperatureFromLut(2450u)); + TEST_ASSERT_EQUAL_INT16(INT16_MAX, TS_Sem00GetTemperatureFromLut(275u)); + TEST_ASSERT_EQUAL_INT16(350, TS_Sem00GetTemperatureFromLut(1034u)); + TEST_ASSERT_EQUAL_INT16(INT16_MIN, TS_Sem00GetTemperatureFromLut(UINT16_MAX)); +} + +void testTS_Sem00GetTemperatureFromPolynomialFixedValues(void) { + TEST_ASSERT_FAIL_ASSERT(TS_Sem00GetTemperatureFromPolynomial(10000u)); } diff --git a/tests/unit/app/driver/ts/test_beta.c b/tests/unit/app/driver/ts/test_beta.c index e4b5ccde..4aee65b8 100644 --- a/tests/unit/app/driver/ts/test_beta.c +++ b/tests/unit/app/driver/ts/test_beta.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_beta.c * @author foxBMS Team * @date 2020-03-13 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix BETA * diff --git a/tests/unit/app/driver/ts/vishay/ntcalug01a103g/lookup-table/test_vishay_ntcalug01a103g_lookup-table.c b/tests/unit/app/driver/ts/vishay/ntcalug01a103g/lookup-table/test_vishay_ntcalug01a103g_lookup-table.c index 68f768f4..19bdcb84 100644 --- a/tests/unit/app/driver/ts/vishay/ntcalug01a103g/lookup-table/test_vishay_ntcalug01a103g_lookup-table.c +++ b/tests/unit/app/driver/ts/vishay/ntcalug01a103g/lookup-table/test_vishay_ntcalug01a103g_lookup-table.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_vishay_ntcalug01a103g_lookup-table.c * @author foxBMS Team * @date 2020-08-25 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/ts/vishay/ntcalug01a103g/polynomial/test_vishay_ntcalug01a103g_polynomial.c b/tests/unit/app/driver/ts/vishay/ntcalug01a103g/polynomial/test_vishay_ntcalug01a103g_polynomial.c index 024ef48d..da6c1746 100644 --- a/tests/unit/app/driver/ts/vishay/ntcalug01a103g/polynomial/test_vishay_ntcalug01a103g_polynomial.c +++ b/tests/unit/app/driver/ts/vishay/ntcalug01a103g/polynomial/test_vishay_ntcalug01a103g_polynomial.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_vishay_ntcalug01a103g_polynomial.c * @author foxBMS Team * @date 2020-08-25 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/ts/vishay/ntcalug01a103g/test_vishay_ntcalug01a103g.c b/tests/unit/app/driver/ts/vishay/ntcalug01a103g/test_vishay_ntcalug01a103g.c index 7b9526b8..83df572b 100644 --- a/tests/unit/app/driver/ts/vishay/ntcalug01a103g/test_vishay_ntcalug01a103g.c +++ b/tests/unit/app/driver/ts/vishay/ntcalug01a103g/test_vishay_ntcalug01a103g.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_vishay_ntcalug01a103g.c * @author foxBMS Team * @date 2020-04-01 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/ts/vishay/ntcle317e4103sba/lookup-table/test_vishay_ntcle317e4103sba_lookup-table.c b/tests/unit/app/driver/ts/vishay/ntcle317e4103sba/lookup-table/test_vishay_ntcle317e4103sba_lookup-table.c index bb851774..c739cddc 100644 --- a/tests/unit/app/driver/ts/vishay/ntcle317e4103sba/lookup-table/test_vishay_ntcle317e4103sba_lookup-table.c +++ b/tests/unit/app/driver/ts/vishay/ntcle317e4103sba/lookup-table/test_vishay_ntcle317e4103sba_lookup-table.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_vishay_ntcle317e4103sba_lookup-table.c * @author foxBMS Team * @date 2021-11-02 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/ts/vishay/ntcle317e4103sba/test_vishay_ntcle317e4103sba.c b/tests/unit/app/driver/ts/vishay/ntcle317e4103sba/test_vishay_ntcle317e4103sba.c index eaad3fd3..574b7f57 100644 --- a/tests/unit/app/driver/ts/vishay/ntcle317e4103sba/test_vishay_ntcle317e4103sba.c +++ b/tests/unit/app/driver/ts/vishay/ntcle317e4103sba/test_vishay_ntcle317e4103sba.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_vishay_ntcle317e4103sba.c * @author foxBMS Team * @date 2021-11-02 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/ts/vishay/ntcle413e2103f102l/lookup-table/test_vishay_ntcle413e2103f102l_lookup-table.c b/tests/unit/app/driver/ts/vishay/ntcle413e2103f102l/lookup-table/test_vishay_ntcle413e2103f102l_lookup-table.c index d0eefd35..89ed9f4f 100644 --- a/tests/unit/app/driver/ts/vishay/ntcle413e2103f102l/lookup-table/test_vishay_ntcle413e2103f102l_lookup-table.c +++ b/tests/unit/app/driver/ts/vishay/ntcle413e2103f102l/lookup-table/test_vishay_ntcle413e2103f102l_lookup-table.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_vishay_ntcle413e2103f102l_lookup-table.c * @author foxBMS Team * @date 2021-11-02 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/driver/ts/vishay/ntcle413e2103f102l/test_vishay_ntcle413e2103f102l.c b/tests/unit/app/driver/ts/vishay/ntcle413e2103f102l/test_vishay_ntcle413e2103f102l.c index 8f76723b..cd51ca35 100644 --- a/tests/unit/app/driver/ts/vishay/ntcle413e2103f102l/test_vishay_ntcle413e2103f102l.c +++ b/tests/unit/app/driver/ts/vishay/ntcle413e2103f102l/test_vishay_ntcle413e2103f102l.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_vishay_ntcle413e2103f102l.c * @author foxBMS Team * @date 2021-11-02 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/engine/config/test_database_cfg.c b/tests/unit/app/engine/config/test_database_cfg.c index bf7d0e17..988d6651 100644 --- a/tests/unit/app/engine/config/test_database_cfg.c +++ b/tests/unit/app/engine/config/test_database_cfg.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_database_cfg.c * @author foxBMS Team * @date 2020-04-02 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/engine/config/test_diag_cfg.c b/tests/unit/app/engine/config/test_diag_cfg.c index 16e18650..007c3a6c 100644 --- a/tests/unit/app/engine/config/test_diag_cfg.c +++ b/tests/unit/app/engine/config/test_diag_cfg.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_diag_cfg.c * @author foxBMS Team * @date 2020-04-01 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/engine/config/test_sys_cfg.c b/tests/unit/app/engine/config/test_sys_cfg.c index 305ed855..1a19818a 100644 --- a/tests/unit/app/engine/config/test_sys_cfg.c +++ b/tests/unit/app/engine/config/test_sys_cfg.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_sys_cfg.c * @author foxBMS Team * @date 2020-04-02 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * @@ -60,7 +60,7 @@ #include "sys_cfg.h" /*========== Unit Testing Framework Directives ==============================*/ -TEST_INCLUDE_PATH("../../src/app/driver/can/cbs/tx") +TEST_INCLUDE_PATH("../../src/app/driver/can/cbs/tx-async") TEST_INCLUDE_PATH("../../src/app/driver/config") /*========== Definitions and Implementations for Unit Test ==================*/ diff --git a/tests/unit/app/engine/config/test_sys_mon_cfg.c b/tests/unit/app/engine/config/test_sys_mon_cfg.c index 7fd3c6db..0d2dda79 100644 --- a/tests/unit/app/engine/config/test_sys_mon_cfg.c +++ b/tests/unit/app/engine/config/test_sys_mon_cfg.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_sys_mon_cfg.c * @author foxBMS Team * @date 2020-04-02 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/engine/database/test_database.c b/tests/unit/app/engine/database/test_database.c index c8ec92ca..85628357 100644 --- a/tests/unit/app/engine/database/test_database.c +++ b/tests/unit/app/engine/database/test_database.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_database.c * @author foxBMS Team * @date 2020-04-01 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * @@ -63,6 +63,7 @@ #include "database_cfg.h" #include "database.h" +#include "fstd_types.h" #include "test_assert_helper.h" #include @@ -87,6 +88,16 @@ OS_QUEUE ftsk_imdCanDataQueue = NULL_PTR; OS_QUEUE ftsk_canRxQueue = NULL_PTR; volatile bool ftsk_allQueuesCreated = true; +/** data block struct for the database built-in self-test */ +typedef struct { + /* This struct needs to be at the beginning of every database entry. During + * the initialization of a database struct, uniqueId must be set to the + * respective database entry representation in enum DATA_BLOCK_ID_e. */ + DATA_BLOCK_HEADER_s header; /*!< Data block header */ + uint8_t member1; /*!< first member of self-test struct */ + uint8_t member2; /*!< second member of self-test struct */ +} DATA_BLOCK_TEST_s; + /*========== Setup and Teardown =============================================*/ void setUp(void) { } @@ -94,7 +105,507 @@ void setUp(void) { void tearDown(void) { } -void testDummy(void) { +/** + * @brief Testing externalized static function DATA_AccessDatabaseEntries + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/2: invalid access type → assert + * - AT2/2: NULL_PTR for pData0 → assert + * - Routine validation: + * - RT1/1: TODO + */ +void testDATA_AccessDatabaseEntries(void) { + /* ======= Assertion tests ============================================= */ + const DATA_BLOCK_ACCESS_TYPE_e invalidAccessType = 300u; + const DATA_BLOCK_ACCESS_TYPE_e validAccessType = DATA_WRITE_ACCESS; + uint8_t dummyValue = 0u; + void *pValidDummy0 = &dummyValue; + void *pValidDummy1 = &dummyValue; /* not used for interface test, see function */ + void *pValidDummy2 = &dummyValue; /* not used for interface test, see function */ + void *pValidDummy3 = &dummyValue; /* not used for interface test, see function */ + /* ======= AT1/2: Assertion test */ + TEST_ASSERT_FAIL_ASSERT( + TEST_DATA_AccessDatabaseEntries(invalidAccessType, pValidDummy0, pValidDummy1, pValidDummy2, pValidDummy3)); + /* ======= AT2/2: Assertion test */ + TEST_ASSERT_FAIL_ASSERT( + TEST_DATA_AccessDatabaseEntries(validAccessType, NULL_PTR, pValidDummy1, pValidDummy2, pValidDummy3)); + + /* ======= Routine tests =============================================== */ + const DATA_BLOCK_ACCESS_TYPE_e readAccess = DATA_WRITE_ACCESS; + const DATA_BLOCK_ACCESS_TYPE_e writeAccess = DATA_READ_ACCESS; + /* ======= RT1/2: Test implementation */ + OS_SendToBackOfQueue_IgnoreAndReturn(STD_OK); + /* ======= RT1/2: call function under test */ + const STD_RETURN_TYPE_e readSuccessfully = + TEST_DATA_AccessDatabaseEntries(readAccess, pValidDummy0, pValidDummy1, pValidDummy2, pValidDummy3); + /* ======= RT1/2: test output verification */ + TEST_ASSERT_EQUAL(STD_OK, readSuccessfully); + + /* ======= RT2/2: Test implementation */ + OS_SendToBackOfQueue_IgnoreAndReturn(STD_NOT_OK); + /* ======= RT2/2: call function under test */ + const STD_RETURN_TYPE_e writeUnsuccessfully = + TEST_DATA_AccessDatabaseEntries(writeAccess, pValidDummy0, pValidDummy1, pValidDummy2, pValidDummy3); + /* ======= RT2/2: test output verification */ + TEST_ASSERT_EQUAL(STD_NOT_OK, writeUnsuccessfully); +} + +/** + * @brief Testing externalized static function DATA_CopyData + * @details The following cases need to be tested: + * - Argument validation: + * - TODO + * - Routine validation: + * - TODO + */ +void testDATA_CopyData(void) { + /* ======= Assertion tests ============================================= */ + const DATA_BLOCK_ACCESS_TYPE_e invalidAccessType = 300u; + uint32_t dataLength = 20u; + uint8_t dummyValue = 0u; + void *pValidDummy0 = &dummyValue; + void *pValidDummy1 = &dummyValue; /* not used for interface test, see function */ + /* ======= AT1/3: Assertion test */ + TEST_ASSERT_FAIL_ASSERT(TEST_DATA_CopyData(invalidAccessType, dataLength, pValidDummy0, pValidDummy1)); + /* ======= AT2/3: Assertion test */ + TEST_ASSERT_FAIL_ASSERT(TEST_DATA_CopyData(DATA_WRITE_ACCESS, dataLength, NULL_PTR, pValidDummy1)); + /* ======= AT3/3: Assertion test */ + TEST_ASSERT_FAIL_ASSERT(TEST_DATA_CopyData(DATA_READ_ACCESS, dataLength, pValidDummy0, NULL_PTR)); + + /* ======= Routine tests =============================================== */ + /* ======= RT1/2: Test implementation */ + /* Note: uniqueId is not used in this function so we can set it anything, + * that is not 0, so that we have something to compare against */ + DATA_BLOCK_TEST_s fromEntry = { + .header.uniqueId = (DATA_BLOCK_ID_e)1u, + .header.previousTimestamp = 3u, + .header.timestamp = 4u, + .member1 = 12u, + .member2 = 42u, + }; + DATA_BLOCK_TEST_s toEntry = { + .header.uniqueId = (DATA_BLOCK_ID_e)0u, + .header.previousTimestamp = 0u, + .header.timestamp = 0u, + .member1 = 0u, + .member2 = 0u, + }; + dataLength = sizeof(DATA_BLOCK_TEST_s); + /* ======= RT1/2: call function under test */ + TEST_DATA_CopyData(DATA_READ_ACCESS, dataLength, &toEntry, &fromEntry); + /* ======= RT1/2: test output verification */ + TEST_ASSERT_EQUAL_MEMORY(&fromEntry, &toEntry, dataLength); + + /* ======= RT2/2: Test implementation */ + /* Note: uniqueId is not used in this function so we can set it anything, + * that is not 0, so that we have something to compare against */ + fromEntry.header.uniqueId = (DATA_BLOCK_ID_e)2u; + fromEntry.header.previousTimestamp = 12u; + fromEntry.header.timestamp = 13u; + fromEntry.member1 = 0x1Au; + fromEntry.member2 = 0xA0u; + + toEntry.header.uniqueId = (DATA_BLOCK_ID_e)0u; + toEntry.header.previousTimestamp = 0u; + toEntry.header.timestamp = 0u; + toEntry.member1 = 0u; + toEntry.member2 = 0u; + + const uint32_t newTimestamp = 15u; + DATA_BLOCK_TEST_s expectedEntry = { + .header.uniqueId = (DATA_BLOCK_ID_e)2u, + .header.previousTimestamp = 13u, + .header.timestamp = newTimestamp, + .member1 = 0x1Au, + .member2 = 0xA0u, + }; + + OS_GetTickCount_ExpectAndReturn(newTimestamp); + /* ======= RT2/2: call function under test */ + TEST_DATA_CopyData(DATA_WRITE_ACCESS, dataLength, &toEntry, &fromEntry); + /* ======= RT2/2: test output verification */ + TEST_ASSERT_EQUAL_MEMORY(&expectedEntry, &toEntry, dataLength); +} + +/** + * @brief Testing externalized static function DATA_IterateOverDatabaseEntries + * @details The following cases need to be tested: + * - Argument validation: + * - TODO + * - Routine validation: + * - TODO + */ +void testDATA_IterateOverDatabaseEntries(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/1: Assertion test */ + TEST_ASSERT_FAIL_ASSERT(TEST_DATA_IterateOverDatabaseEntries(NULL_PTR)); + + /* ======= Routine tests =============================================== */ + /* ======= RT1/2: Test implementation */ + static DATA_BLOCK_CELL_VOLTAGE_s entry_blockCellVoltage = {.header.uniqueId = DATA_BLOCK_ID_CELL_VOLTAGE}; + DATA_QUEUE_MESSAGE_s messages[4u] = { + { + .accessType = DATA_READ_ACCESS, + .pDatabaseEntry = (void *)&entry_blockCellVoltage, + }, + { + .pDatabaseEntry = NULL_PTR, + }, + { + .pDatabaseEntry = NULL_PTR, + }, + { + .pDatabaseEntry = NULL_PTR, + }, + }; + /* ======= RT1/2: call function under test */ + TEST_DATA_IterateOverDatabaseEntries(messages); + /* ======= RT1/2: test output verification */ + /* TODO comparison */ + + /* ======= RT2/2: Test implementation */ + static DATA_BLOCK_CELL_VOLTAGE_s entry_blockInvalidId = {.header.uniqueId = DATA_BLOCK_ID_MAX}; + DATA_QUEUE_MESSAGE_s invalidMessages[4] = { + { + .accessType = DATA_READ_ACCESS, + .pDatabaseEntry = (void *)&entry_blockInvalidId, + }, + { + .pDatabaseEntry = NULL_PTR, + }, + { + .pDatabaseEntry = NULL_PTR, + }, + { + .pDatabaseEntry = NULL_PTR, + }, + }; + /* ======= RT2/2: call function under test */ + TEST_ASSERT_FAIL_ASSERT(TEST_DATA_IterateOverDatabaseEntries(invalidMessages)); + /* ======= RT2/2: test output verification */ + /* nothing to do */ +} + +/** + * @brief Testing external function #DATA_Initialize + * @details The following cases need to be tested: + * - Argument validation: + * - TODO + * - Routine validation: + * - TODO + */ +void testDATA_Initialize(void) { +} + +/** + * @brief Testing external function #DATA_Task + * @details The following cases need to be tested: + * - Argument validation: + * - TODO + * - Routine validation: + * - TODO + */ +void testDATA_Task(void) { +} + +/** + * @brief Testing extern function #DATA_Read1DataBlock + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/1: NULL_PTR for pDataToReceiver0 → assert + * - Routine validation: + * - RT1/1: TODO + */ +void testDATA_Read1DataBlock(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/1: Assertion test */ + TEST_ASSERT_FAIL_ASSERT(DATA_Read1DataBlock(NULL_PTR)); + + /* ======= Routine tests =============================================== */ + uint8_t dummyValue = 0u; + void *pValidDummy0 = &dummyValue; + /* ======= RT1/2: Test implementation */ + OS_SendToBackOfQueue_IgnoreAndReturn(STD_OK); + /* ======= RT1/2: call function under test */ + const STD_RETURN_TYPE_e readSuccessfully = DATA_Read1DataBlock(pValidDummy0); + /* ======= RT1/2: test output verification */ + TEST_ASSERT_EQUAL(STD_OK, readSuccessfully); + + /* ======= RT2/2: Test implementation */ + OS_SendToBackOfQueue_IgnoreAndReturn(STD_NOT_OK); + /* ======= RT2/2: call function under test */ + const STD_RETURN_TYPE_e readUnsuccessfully = DATA_Read1DataBlock(pValidDummy0); + /* ======= RT2/2: test output verification */ + TEST_ASSERT_EQUAL(STD_NOT_OK, readUnsuccessfully); +} + +/** + * @brief Testing extern function #DATA_Read2DataBlocks + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/2: NULL_PTR for pDataToReceiver0 → assert + * - AT2/2: NULL_PTR for pDataToReceiver1 → assert + * - Routine validation: + * - RT1/1: TODO + */ +void testDATA_Read2DataBlocks(void) { + /* ======= Assertion tests ============================================= */ + uint8_t dummyValue = 0u; + void *pValidDummy0 = &dummyValue; + void *pValidDummy1 = &dummyValue; + /* ======= AT1/2: Assertion test */ + TEST_ASSERT_FAIL_ASSERT(DATA_Read2DataBlocks(NULL_PTR, pValidDummy1)); + /* ======= AT2/2: Assertion test */ + TEST_ASSERT_FAIL_ASSERT(DATA_Read2DataBlocks(pValidDummy0, NULL_PTR)); + + /* ======= Routine tests =============================================== */ + /* ======= RT1/2: Test implementation */ + OS_SendToBackOfQueue_IgnoreAndReturn(STD_OK); + /* ======= RT1/2: call function under test */ + const STD_RETURN_TYPE_e readSuccessfully = DATA_Read2DataBlocks(pValidDummy0, pValidDummy1); + /* ======= RT1/2: test output verification */ + TEST_ASSERT_EQUAL(STD_OK, readSuccessfully); + + /* ======= RT2/2: Test implementation */ + OS_SendToBackOfQueue_IgnoreAndReturn(STD_NOT_OK); + /* ======= RT2/2: call function under test */ + const STD_RETURN_TYPE_e readUnsuccessfully = DATA_Read2DataBlocks(pValidDummy0, pValidDummy1); + /* ======= RT2/2: test output verification */ + TEST_ASSERT_EQUAL(STD_NOT_OK, readUnsuccessfully); +} + +/** + * @brief Testing extern function #DATA_Read3DataBlocks + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/3: NULL_PTR for pDataToReceiver0 → assert + * - AT2/3: NULL_PTR for pDataToReceiver1 → assert + * - AT3/3: NULL_PTR for pDataToReceiver2 → assert + * - Routine validation: + * - RT1/1: TODO + */ +void testDATA_Read3DataBlocks(void) { + /* ======= Assertion tests ============================================= */ + uint8_t dummyValue = 0u; + void *pValidDummy0 = &dummyValue; + void *pValidDummy1 = &dummyValue; + void *pValidDummy2 = &dummyValue; + /* ======= AT1/3: Assertion test */ + TEST_ASSERT_FAIL_ASSERT(DATA_Read3DataBlocks(NULL_PTR, pValidDummy1, pValidDummy2)); + /* ======= AT2/3: Assertion test */ + TEST_ASSERT_FAIL_ASSERT(DATA_Read3DataBlocks(pValidDummy0, NULL_PTR, pValidDummy2)); + /* ======= AT3/3: Assertion test */ + TEST_ASSERT_FAIL_ASSERT(DATA_Read3DataBlocks(pValidDummy0, pValidDummy1, NULL_PTR)); + + /* ======= Routine tests =============================================== */ + /* ======= RT1/2: Test implementation */ + OS_SendToBackOfQueue_IgnoreAndReturn(STD_OK); + /* ======= RT1/2: call function under test */ + const STD_RETURN_TYPE_e readSuccessfully = DATA_Read3DataBlocks(pValidDummy0, pValidDummy1, pValidDummy2); + /* ======= RT1/2: test output verification */ + TEST_ASSERT_EQUAL(STD_OK, readSuccessfully); + + /* ======= RT2/2: Test implementation */ + OS_SendToBackOfQueue_IgnoreAndReturn(STD_NOT_OK); + /* ======= RT2/2: call function under test */ + const STD_RETURN_TYPE_e readUnsuccessfully = DATA_Read3DataBlocks(pValidDummy0, pValidDummy1, pValidDummy2); + /* ======= RT2/2: test output verification */ + TEST_ASSERT_EQUAL(STD_NOT_OK, readUnsuccessfully); +} + +/** + * @brief Testing extern function #DATA_Read4DataBlocks + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/4: NULL_PTR for pDataToReceiver0 → assert + * - AT2/4: NULL_PTR for pDataToReceiver1 → assert + * - AT3/4: NULL_PTR for pDataToReceiver2 → assert + * - AT4/4: NULL_PTR for pDataToReceiver3 → assert + * - Routine validation: + * - RT1/1: TODO + */ +void testDATA_Read4DataBlocks(void) { + /* ======= Assertion tests ============================================= */ + uint8_t dummyValue = 0u; + void *pValidDummy0 = &dummyValue; + void *pValidDummy1 = &dummyValue; + void *pValidDummy2 = &dummyValue; + void *pValidDummy3 = &dummyValue; + /* ======= AT1/4: Assertion test */ + TEST_ASSERT_FAIL_ASSERT(DATA_Read4DataBlocks(NULL_PTR, pValidDummy1, pValidDummy2, pValidDummy3)); + /* ======= AT2/4: Assertion test */ + TEST_ASSERT_FAIL_ASSERT(DATA_Read4DataBlocks(pValidDummy0, NULL_PTR, pValidDummy2, pValidDummy3)); + /* ======= AT3/4: Assertion test */ + TEST_ASSERT_FAIL_ASSERT(DATA_Read4DataBlocks(pValidDummy0, pValidDummy1, NULL_PTR, pValidDummy3)); + /* ======= AT4/4: Assertion test */ + TEST_ASSERT_FAIL_ASSERT(DATA_Read4DataBlocks(pValidDummy0, pValidDummy1, pValidDummy2, NULL_PTR)); + + /* ======= Routine tests =============================================== */ + /* ======= RT1/2: Test implementation */ + OS_SendToBackOfQueue_IgnoreAndReturn(STD_OK); + /* ======= RT1/2: call function under test */ + const STD_RETURN_TYPE_e readSuccessfully = + DATA_Read4DataBlocks(pValidDummy0, pValidDummy1, pValidDummy2, pValidDummy3); + /* ======= RT1/2: test output verification */ + TEST_ASSERT_EQUAL(STD_OK, readSuccessfully); + + /* ======= RT2/2: Test implementation */ + OS_SendToBackOfQueue_IgnoreAndReturn(STD_NOT_OK); + /* ======= RT2/2: call function under test */ + const STD_RETURN_TYPE_e readUnsuccessfully = + DATA_Read4DataBlocks(pValidDummy0, pValidDummy1, pValidDummy2, pValidDummy3); + /* ======= RT2/2: test output verification */ + TEST_ASSERT_EQUAL(STD_NOT_OK, readUnsuccessfully); +} + +/** + * @brief Testing extern function #DATA_Write1DataBlock + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/1: NULL_PTR for pDataFromSender0 → assert + * - Routine validation: + * - RT1/1: TODO + */ +void testDATA_Write1DataBlock(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/1: Assertion test */ + TEST_ASSERT_FAIL_ASSERT(DATA_Write1DataBlock(NULL_PTR)); + + /* ======= Routine tests =============================================== */ + uint8_t dummyValue = 0u; + void *pValidDummy0 = &dummyValue; + /* ======= RT1/2: Test implementation */ + OS_SendToBackOfQueue_IgnoreAndReturn(STD_OK); + /* ======= RT1/2: call function under test */ + const STD_RETURN_TYPE_e writeSuccessfully = DATA_Write1DataBlock(pValidDummy0); + /* ======= RT1/2: test output verification */ + TEST_ASSERT_EQUAL(STD_OK, writeSuccessfully); + + /* ======= RT2/2: Test implementation */ + OS_SendToBackOfQueue_IgnoreAndReturn(STD_NOT_OK); + /* ======= RT2/2: call function under test */ + const STD_RETURN_TYPE_e writeUnsuccessfully = DATA_Write1DataBlock(pValidDummy0); + /* ======= RT2/2: test output verification */ + TEST_ASSERT_EQUAL(STD_NOT_OK, writeUnsuccessfully); +} + +/** + * @brief Testing extern function #DATA_Write2DataBlocks + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/2: NULL_PTR for pDataFromSender0 → assert + * - AT2/2: NULL_PTR for pDataFromSender1 → assert + * - Routine validation: + * - RT1/1: TODO + */ +void testDATA_Write2DataBlocks(void) { + /* ======= Assertion tests ============================================= */ + uint8_t dummyValue = 0u; + void *pValidDummy0 = &dummyValue; + void *pValidDummy1 = &dummyValue; + /* ======= AT1/2: Assertion test */ + TEST_ASSERT_FAIL_ASSERT(DATA_Write2DataBlocks(NULL_PTR, pValidDummy1)); + /* ======= AT2/2: Assertion test */ + TEST_ASSERT_FAIL_ASSERT(DATA_Write2DataBlocks(pValidDummy0, NULL_PTR)); + + /* ======= Routine tests =============================================== */ + /* ======= RT1/2: Test implementation */ + OS_SendToBackOfQueue_IgnoreAndReturn(STD_OK); + /* ======= RT1/2: call function under test */ + const STD_RETURN_TYPE_e writeSuccessfully = DATA_Write2DataBlocks(pValidDummy0, pValidDummy1); + /* ======= RT1/2: test output verification */ + TEST_ASSERT_EQUAL(STD_OK, writeSuccessfully); + + /* ======= RT2/2: Test implementation */ + OS_SendToBackOfQueue_IgnoreAndReturn(STD_NOT_OK); + /* ======= RT2/2: call function under test */ + const STD_RETURN_TYPE_e writeUnsuccessfully = DATA_Write2DataBlocks(pValidDummy0, pValidDummy1); + /* ======= RT2/2: test output verification */ + TEST_ASSERT_EQUAL(STD_NOT_OK, writeUnsuccessfully); +} + +/** + * @brief Testing extern function #DATA_Write3DataBlocks + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/3: NULL_PTR for pDataFromSender0 → assert + * - AT2/3: NULL_PTR for pDataFromSender1 → assert + * - AT3/3: NULL_PTR for pDataFromSender2 → assert + * - Routine validation: + * - RT1/1: TODO + */ +void testDATA_Write3DataBlocks(void) { + /* ======= Assertion tests ============================================= */ + uint8_t dummyValue = 0u; + void *pValidDummy0 = &dummyValue; + void *pValidDummy1 = &dummyValue; + void *pValidDummy2 = &dummyValue; + /* ======= AT1/3: Assertion test */ + TEST_ASSERT_FAIL_ASSERT(DATA_Write3DataBlocks(NULL_PTR, pValidDummy1, pValidDummy2)); + /* ======= AT2/3: Assertion test */ + TEST_ASSERT_FAIL_ASSERT(DATA_Write3DataBlocks(pValidDummy0, NULL_PTR, pValidDummy2)); + /* ======= AT3/3: Assertion test */ + TEST_ASSERT_FAIL_ASSERT(DATA_Write3DataBlocks(pValidDummy0, pValidDummy1, NULL_PTR)); + + /* ======= Routine tests =============================================== */ + /* ======= RT1/2: Test implementation */ + OS_SendToBackOfQueue_IgnoreAndReturn(STD_OK); + /* ======= RT1/2: call function under test */ + const STD_RETURN_TYPE_e writeSuccessfully = DATA_Write3DataBlocks(pValidDummy0, pValidDummy1, pValidDummy2); + /* ======= RT1/2: test output verification */ + TEST_ASSERT_EQUAL(STD_OK, writeSuccessfully); + + /* ======= RT2/2: Test implementation */ + OS_SendToBackOfQueue_IgnoreAndReturn(STD_NOT_OK); + /* ======= RT2/2: call function under test */ + const STD_RETURN_TYPE_e writeUnsuccessfully = DATA_Write3DataBlocks(pValidDummy0, pValidDummy1, pValidDummy2); + /* ======= RT2/2: test output verification */ + TEST_ASSERT_EQUAL(STD_NOT_OK, writeUnsuccessfully); +} + +/** + * @brief Testing extern function #DATA_Write4DataBlocks + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/4: NULL_PTR for pDataFromSender0 → assert + * - AT2/4: NULL_PTR for pDataFromSender1 → assert + * - AT3/4: NULL_PTR for pDataFromSender2 → assert + * - AT4/4: NULL_PTR for pDataFromSender3 → assert + * - Routine validation: + * - RT1/1: TODO + */ +void testDATA_Write4DataBlocks(void) { + /* ======= Assertion tests ============================================= */ + uint8_t dummyValue = 0u; + void *pValidDummy0 = &dummyValue; + void *pValidDummy1 = &dummyValue; + void *pValidDummy2 = &dummyValue; + void *pValidDummy3 = &dummyValue; + /* ======= AT1/4: Assertion test */ + TEST_ASSERT_FAIL_ASSERT(DATA_Write4DataBlocks(NULL_PTR, pValidDummy1, pValidDummy2, pValidDummy3)); + /* ======= AT2/4: Assertion test */ + TEST_ASSERT_FAIL_ASSERT(DATA_Write4DataBlocks(pValidDummy0, NULL_PTR, pValidDummy2, pValidDummy3)); + /* ======= AT3/4: Assertion test */ + TEST_ASSERT_FAIL_ASSERT(DATA_Write4DataBlocks(pValidDummy0, pValidDummy1, NULL_PTR, pValidDummy3)); + /* ======= AT4/4: Assertion test */ + TEST_ASSERT_FAIL_ASSERT(DATA_Write4DataBlocks(pValidDummy0, pValidDummy1, pValidDummy2, NULL_PTR)); + + /* ======= Routine tests =============================================== */ + /* ======= RT1/2: Test implementation */ + OS_SendToBackOfQueue_IgnoreAndReturn(STD_OK); + /* ======= RT1/2: call function under test */ + const STD_RETURN_TYPE_e writeSuccessfully = + DATA_Write4DataBlocks(pValidDummy0, pValidDummy1, pValidDummy2, pValidDummy3); + /* ======= RT1/2: test output verification */ + TEST_ASSERT_EQUAL(STD_OK, writeSuccessfully); + + /* ======= RT2/2: Test implementation */ + OS_SendToBackOfQueue_IgnoreAndReturn(STD_NOT_OK); + /* ======= RT2/2: call function under test */ + const STD_RETURN_TYPE_e writeUnsuccessfully = + DATA_Write4DataBlocks(pValidDummy0, pValidDummy1, pValidDummy2, pValidDummy3); + /* ======= RT2/2: test output verification */ + TEST_ASSERT_EQUAL(STD_NOT_OK, writeUnsuccessfully); } /** callback for #testDATA_ExecuteDataBist(); this not work for other instances */ @@ -113,6 +624,14 @@ OS_STD_RETURN_e DATA_mpuInjectValuesForExecuteBISTTestCallback( return OS_SUCCESS; } +/** + * @brief Testing extern function DATA_ExecuteDataBist + * @details The following cases need to be tested: + * - Argument validation: + * - none + * - Routine validation: + * - TODO + */ void testDATA_ExecuteDataBist(void) { OS_SendToBackOfQueue_Stub(&DATA_mpuInjectValuesForExecuteBISTTestCallback); TEST_ASSERT_PASS_ASSERT(DATA_ExecuteDataBist()); diff --git a/tests/unit/app/engine/database/test_database_helper.c b/tests/unit/app/engine/database/test_database_helper.c index 3fe3d7bb..ba672122 100644 --- a/tests/unit/app/engine/database/test_database_helper.c +++ b/tests/unit/app/engine/database/test_database_helper.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_database_helper.c * @author foxBMS Team * @date 2021-05-05 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/engine/diag/cbs/test_diag_cbs_aerosol-sensor.c b/tests/unit/app/engine/diag/cbs/test_diag_cbs_aerosol-sensor.c index 49b616d1..d44373fb 100644 --- a/tests/unit/app/engine/diag/cbs/test_diag_cbs_aerosol-sensor.c +++ b/tests/unit/app/engine/diag/cbs/test_diag_cbs_aerosol-sensor.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_diag_cbs_aerosol-sensor.c * @author foxBMS Team * @date 2023-09-06 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/engine/diag/cbs/test_diag_cbs_afe.c b/tests/unit/app/engine/diag/cbs/test_diag_cbs_afe.c index 04fb1c95..4a9e2e0a 100644 --- a/tests/unit/app/engine/diag/cbs/test_diag_cbs_afe.c +++ b/tests/unit/app/engine/diag/cbs/test_diag_cbs_afe.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_diag_cbs_afe.c * @author foxBMS Team * @date 2021-02-17 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/engine/diag/cbs/test_diag_cbs_bms.c b/tests/unit/app/engine/diag/cbs/test_diag_cbs_bms.c index f7e010c0..0718b1d9 100644 --- a/tests/unit/app/engine/diag/cbs/test_diag_cbs_bms.c +++ b/tests/unit/app/engine/diag/cbs/test_diag_cbs_bms.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_diag_cbs_bms.c * @author foxBMS Team * @date 2022-07-27 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/engine/diag/cbs/test_diag_cbs_can.c b/tests/unit/app/engine/diag/cbs/test_diag_cbs_can.c index 784b64df..15afd99e 100644 --- a/tests/unit/app/engine/diag/cbs/test_diag_cbs_can.c +++ b/tests/unit/app/engine/diag/cbs/test_diag_cbs_can.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_diag_cbs_can.c * @author foxBMS Team * @date 2021-02-17 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * @@ -104,7 +104,7 @@ void testDiagCan(void) { /* not ok event sets the CAN timing back in not ok mode */ DIAG_ErrorCanTiming(DIAG_ID_CAN_TIMING, DIAG_EVENT_NOT_OK, &diag_kpkDatabaseShim, 0u); TEST_ASSERT_EQUAL(1, diag_kpkDatabaseShim.pTableError->stateRequestTimingViolationError); - /* CAN timing can be resetted via ok event (instead a reset is required), therefore the + /* CAN timing can be reset via ok event (instead a reset is required), therefore the * CAN timing must stay in not ok mode */ DIAG_ErrorCanTiming(DIAG_ID_CAN_TIMING, DIAG_EVENT_OK, &diag_kpkDatabaseShim, 0u); TEST_ASSERT_EQUAL(1, diag_kpkDatabaseShim.pTableError->stateRequestTimingViolationError); diff --git a/tests/unit/app/engine/diag/cbs/test_diag_cbs_contactor.c b/tests/unit/app/engine/diag/cbs/test_diag_cbs_contactor.c index c427c504..bbbdc45b 100644 --- a/tests/unit/app/engine/diag/cbs/test_diag_cbs_contactor.c +++ b/tests/unit/app/engine/diag/cbs/test_diag_cbs_contactor.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_diag_cbs_contactor.c * @author foxBMS Team * @date 2021-02-17 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * @@ -181,7 +181,7 @@ void testDiagContactorPrechargeContactorFeedback(void) { TEST_ASSERT_EQUAL(1, diag_kpkDatabaseShim.pTableError->prechargeContactorFeedbackError[s]); } - /* precharge contactor feedback can be resetted via ok event (instead a reset is required), therefore the + /* precharge contactor feedback can be reset via ok event (instead a reset is required), therefore the * precharge contactor feedback must stay in not ok mode */ for (uint8_t s = 0; s < BS_NR_OF_STRINGS; s++) { DIAG_PrechargeContactorFeedback(DIAG_ID_PRECHARGE_CONTACTOR_FEEDBACK, DIAG_EVENT_OK, &diag_kpkDatabaseShim, s); diff --git a/tests/unit/app/engine/diag/cbs/test_diag_cbs_current-sensor.c b/tests/unit/app/engine/diag/cbs/test_diag_cbs_current-sensor.c index e403ebb8..0e64f7e8 100644 --- a/tests/unit/app/engine/diag/cbs/test_diag_cbs_current-sensor.c +++ b/tests/unit/app/engine/diag/cbs/test_diag_cbs_current-sensor.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_diag_cbs_current-sensor.c * @author foxBMS Team * @date 2021-02-17 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * @@ -92,11 +92,119 @@ void tearDown(void) { } /*========== Test Cases =====================================================*/ -/** tests invalid input values */ +/** + * @brief Testing DIAG_ErrorCurrentSensorInvalidInput + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/4: invalid diagnosis event ID for diagId -> assert + * - AT2/4: invalid event for event -> assert + * - AT3/4: NULL_PTR for kpkDiagShim -> assert + * - AT4/4: Invalid String number BS_NR_OF_STRINGS -> assert + * - Routine validation: + * - RT1/5: Checks whether the error bit is set correctly when the current sensor is responding. + * Tests whether the error bit is set correctly in the event of "reset" and "not ok". + * - RT2/5: Checks whether the error bit is set correctly when the CAN CC is responding. + * Tests whether the error bit is set correctly in the event of "reset" and "not ok". + * - RT3/5: Checks whether the error bit is set correctly when the CAN EC is responding. + * Tests whether the error bit is set correctly in the event of "reset" and "not ok". + * - RT4/5: Checks whether the error bit (1) doesn't change in the event of "ok". + * - RT5/5: Checks whether the error bit (0) doesn't change in the event of "ok". + */ void testDIAG_ErrorCurrentSensorInvalidInput(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/4 ======= */ TEST_ASSERT_FAIL_ASSERT(DIAG_ErrorCurrentSensor(DIAG_ID_MAX, DIAG_EVENT_OK, &diag_kpkDatabaseShim, 0u)); + /* ======= AT2/4 ======= */ TEST_ASSERT_FAIL_ASSERT(DIAG_ErrorCurrentSensor(DIAG_ID_CURRENT_SENSOR_RESPONDING, 42, &diag_kpkDatabaseShim, 0u)); + /* ======= AT3/4 ======= */ TEST_ASSERT_FAIL_ASSERT(DIAG_ErrorCurrentSensor(DIAG_ID_CURRENT_SENSOR_RESPONDING, DIAG_EVENT_OK, NULL_PTR, 0u)); + /* ======= AT4/4 ======= */ TEST_ASSERT_FAIL_ASSERT(DIAG_ErrorCurrentSensor( DIAG_ID_CURRENT_SENSOR_RESPONDING, DIAG_EVENT_OK, &diag_kpkDatabaseShim, BS_NR_OF_STRINGS)); + + /* ======= Routine tests =============================================== */ + + /* ======= RT1/5: Test implementation */ + diag_kpkDatabaseShim.pTableError->currentSensorNotRespondingError[0u] = false; + /* ======= RT1/5: call function under test */ + DIAG_ErrorCurrentSensor(DIAG_ID_CURRENT_SENSOR_RESPONDING, DIAG_EVENT_NOT_OK, &diag_kpkDatabaseShim, 0u); + /* ======= RT1/5: test output verification */ + TEST_ASSERT_TRUE(diag_kpkDatabaseShim.pTableError->currentSensorNotRespondingError[0u]); + + /* ======= RT1/5: Test implementation */ + diag_kpkDatabaseShim.pTableError->currentSensorNotRespondingError[0u] = true; + /* ======= RT1/5: call function under test */ + DIAG_ErrorCurrentSensor(DIAG_ID_CURRENT_SENSOR_RESPONDING, DIAG_EVENT_RESET, &diag_kpkDatabaseShim, 0u); + /* ======= RT1/5: test output verification */ + TEST_ASSERT_FALSE(diag_kpkDatabaseShim.pTableError->currentSensorNotRespondingError[0u]); + + /* ======= RT2/5: Test implementation */ + diag_kpkDatabaseShim.pTableError->currentSensorCoulombCounterTimeoutError[0u] = false; + /* ======= RT2/5: call function under test */ + DIAG_ErrorCurrentSensor(DIAG_ID_CAN_CC_RESPONDING, DIAG_EVENT_NOT_OK, &diag_kpkDatabaseShim, 0u); + /* ======= RT2/5: test output verification */ + TEST_ASSERT_TRUE(diag_kpkDatabaseShim.pTableError->currentSensorCoulombCounterTimeoutError[0u]); + + /* ======= RT2/5: Test implementation */ + diag_kpkDatabaseShim.pTableError->currentSensorCoulombCounterTimeoutError[0u] = true; + /* ======= RT2/5: call function under test */ + DIAG_ErrorCurrentSensor(DIAG_ID_CAN_CC_RESPONDING, DIAG_EVENT_RESET, &diag_kpkDatabaseShim, 0u); + /* ======= RT2/5: test output verification */ + TEST_ASSERT_FALSE(diag_kpkDatabaseShim.pTableError->currentSensorCoulombCounterTimeoutError[0u]); + + /* ======= RT3/5: Test implementation */ + diag_kpkDatabaseShim.pTableError->currentSensorEnergyCounterTimeoutError[0u] = false; + /* ======= RT3/5: call function under test */ + DIAG_ErrorCurrentSensor(DIAG_ID_CAN_EC_RESPONDING, DIAG_EVENT_NOT_OK, &diag_kpkDatabaseShim, 0u); + /* ======= RT3/5: test output verification */ + TEST_ASSERT_TRUE(diag_kpkDatabaseShim.pTableError->currentSensorEnergyCounterTimeoutError[0u]); + + /* ======= RT3/5: Test implementation */ + diag_kpkDatabaseShim.pTableError->currentSensorEnergyCounterTimeoutError[0u] = true; + /* ======= RT3/5: call function under test */ + DIAG_ErrorCurrentSensor(DIAG_ID_CAN_EC_RESPONDING, DIAG_EVENT_RESET, &diag_kpkDatabaseShim, 0u); + /* ======= RT3/5: test output verification */ + TEST_ASSERT_FALSE(diag_kpkDatabaseShim.pTableError->currentSensorEnergyCounterTimeoutError[0u]); + + /* ======= RT4/5: Test implementation */ + diag_kpkDatabaseShim.pTableError->currentSensorNotRespondingError[0u] = true; + /* ======= RT4/5: call function under test */ + DIAG_ErrorCurrentSensor(DIAG_ID_CURRENT_SENSOR_RESPONDING, DIAG_EVENT_OK, &diag_kpkDatabaseShim, 0u); + /* ======= RT4/5: test output verification */ + TEST_ASSERT_TRUE(diag_kpkDatabaseShim.pTableError->currentSensorNotRespondingError[0u]); + + /* ======= RT4/5: Test implementation */ + diag_kpkDatabaseShim.pTableError->currentSensorCoulombCounterTimeoutError[0u] = true; + /* ======= RT4/5: call function under test */ + DIAG_ErrorCurrentSensor(DIAG_ID_CAN_CC_RESPONDING, DIAG_EVENT_OK, &diag_kpkDatabaseShim, 0u); + /* ======= RT4/5: test output verification */ + TEST_ASSERT_TRUE(diag_kpkDatabaseShim.pTableError->currentSensorCoulombCounterTimeoutError[0u]); + + /* ======= RT4/5: Test implementation */ + diag_kpkDatabaseShim.pTableError->currentSensorEnergyCounterTimeoutError[0u] = true; + /* ======= RT4/5: call function under test */ + DIAG_ErrorCurrentSensor(DIAG_ID_CAN_EC_RESPONDING, DIAG_EVENT_OK, &diag_kpkDatabaseShim, 0u); + /* ======= RT4/5: test output verification */ + TEST_ASSERT_TRUE(diag_kpkDatabaseShim.pTableError->currentSensorEnergyCounterTimeoutError[0u]); + + /* ======= RT5/5: Test implementation */ + diag_kpkDatabaseShim.pTableError->currentSensorNotRespondingError[0u] = false; + /* ======= RT5/5: call function under test */ + DIAG_ErrorCurrentSensor(DIAG_ID_CURRENT_SENSOR_RESPONDING, DIAG_EVENT_OK, &diag_kpkDatabaseShim, 0u); + /* ======= RT5/5: test output verification */ + TEST_ASSERT_FALSE(diag_kpkDatabaseShim.pTableError->currentSensorNotRespondingError[0u]); + + /* ======= RT5/5: Test implementation */ + diag_kpkDatabaseShim.pTableError->currentSensorCoulombCounterTimeoutError[0u] = false; + /* ======= RT5/5: call function under test */ + DIAG_ErrorCurrentSensor(DIAG_ID_CAN_CC_RESPONDING, DIAG_EVENT_OK, &diag_kpkDatabaseShim, 0u); + /* ======= RT5/5: test output verification */ + TEST_ASSERT_FALSE(diag_kpkDatabaseShim.pTableError->currentSensorCoulombCounterTimeoutError[0u]); + + /* ======= RT5/5: Test implementation */ + diag_kpkDatabaseShim.pTableError->currentSensorEnergyCounterTimeoutError[0u] = false; + /* ======= RT5/5: call function under test */ + DIAG_ErrorCurrentSensor(DIAG_ID_CAN_EC_RESPONDING, DIAG_EVENT_OK, &diag_kpkDatabaseShim, 0u); + /* ======= RT5/5: Test implementation */ + TEST_ASSERT_FALSE(diag_kpkDatabaseShim.pTableError->currentSensorEnergyCounterTimeoutError[0u]); } diff --git a/tests/unit/app/engine/diag/cbs/test_diag_cbs_current.c b/tests/unit/app/engine/diag/cbs/test_diag_cbs_current.c index 4f452711..e4d91a2a 100644 --- a/tests/unit/app/engine/diag/cbs/test_diag_cbs_current.c +++ b/tests/unit/app/engine/diag/cbs/test_diag_cbs_current.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_diag_cbs_current.c * @author foxBMS Team * @date 2021-02-17 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/engine/diag/cbs/test_diag_cbs_deep-discharge.c b/tests/unit/app/engine/diag/cbs/test_diag_cbs_deep-discharge.c index 74ecbf80..3bc7decf 100644 --- a/tests/unit/app/engine/diag/cbs/test_diag_cbs_deep-discharge.c +++ b/tests/unit/app/engine/diag/cbs/test_diag_cbs_deep-discharge.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_diag_cbs_deep-discharge.c * @author foxBMS Team * @date 2021-02-17 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/engine/diag/cbs/test_diag_cbs_dummy.c b/tests/unit/app/engine/diag/cbs/test_diag_cbs_dummy.c index 8384459f..9335dbf1 100644 --- a/tests/unit/app/engine/diag/cbs/test_diag_cbs_dummy.c +++ b/tests/unit/app/engine/diag/cbs/test_diag_cbs_dummy.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_diag_cbs_dummy.c * @author foxBMS Team * @date 2021-02-17 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/engine/diag/cbs/test_diag_cbs_fram.c b/tests/unit/app/engine/diag/cbs/test_diag_cbs_fram.c index 9b4d2830..dd25dbff 100644 --- a/tests/unit/app/engine/diag/cbs/test_diag_cbs_fram.c +++ b/tests/unit/app/engine/diag/cbs/test_diag_cbs_fram.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_diag_cbs_fram.c * @author foxBMS Team * @date 2022-02-24 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/engine/diag/cbs/test_diag_cbs_i2c.c b/tests/unit/app/engine/diag/cbs/test_diag_cbs_i2c.c index 07879da3..f4d3642a 100644 --- a/tests/unit/app/engine/diag/cbs/test_diag_cbs_i2c.c +++ b/tests/unit/app/engine/diag/cbs/test_diag_cbs_i2c.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_diag_cbs_i2c.c * @author foxBMS Team * @date 2021-09-29 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/engine/diag/cbs/test_diag_cbs_insulation.c b/tests/unit/app/engine/diag/cbs/test_diag_cbs_insulation.c index e916fd66..af638342 100644 --- a/tests/unit/app/engine/diag/cbs/test_diag_cbs_insulation.c +++ b/tests/unit/app/engine/diag/cbs/test_diag_cbs_insulation.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_diag_cbs_insulation.c * @author foxBMS Team * @date 2021-02-22 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/engine/diag/cbs/test_diag_cbs_interlock.c b/tests/unit/app/engine/diag/cbs/test_diag_cbs_interlock.c index 7a7460f6..cfa68150 100644 --- a/tests/unit/app/engine/diag/cbs/test_diag_cbs_interlock.c +++ b/tests/unit/app/engine/diag/cbs/test_diag_cbs_interlock.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_diag_cbs_interlock.c * @author foxBMS Team * @date 2021-02-17 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/engine/diag/cbs/test_diag_cbs_plausibility.c b/tests/unit/app/engine/diag/cbs/test_diag_cbs_plausibility.c index b83595c9..7bdbd321 100644 --- a/tests/unit/app/engine/diag/cbs/test_diag_cbs_plausibility.c +++ b/tests/unit/app/engine/diag/cbs/test_diag_cbs_plausibility.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_diag_cbs_plausibility.c * @author foxBMS Team * @date 2021-02-17 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/engine/diag/cbs/test_diag_cbs_power-measurement.c b/tests/unit/app/engine/diag/cbs/test_diag_cbs_power-measurement.c index fb155162..f66b7acb 100644 --- a/tests/unit/app/engine/diag/cbs/test_diag_cbs_power-measurement.c +++ b/tests/unit/app/engine/diag/cbs/test_diag_cbs_power-measurement.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_diag_cbs_power-measurement.c * @author foxBMS Team * @date 2021-02-17 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * @@ -92,13 +92,63 @@ void tearDown(void) { } /*========== Test Cases =====================================================*/ -/** tests invalid input values */ +/** + * @brief Testing DIAG_ErrorHighVoltageMeasurementInvalidInput + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/4: invalid diagnosis event ID → assert + * - AT2/4: invalid diagnosis event → assert + * - AT3/4: NULL_PTR for kpkDiagShim → assert + * - AT4/4: Invalid String number → assert + * - Routine validation: + * - RT1/5: Checks whether the error bit is set correctly + * when a power timeout occurs in the current sensor. + * Tests whether the error bit is set correctly + * in the event of "reset" and "not ok". + * - RT2/5: Checks whether the error bit is set correctly + * when a power measurement invalid error occurs. + * Tests whether the error bit is set correctly + * in the event of "reset" and "not ok". + */ void testDIAG_ErrorPowerMeasurementInvalidInput(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/4 ======= */ TEST_ASSERT_FAIL_ASSERT(DIAG_ErrorPowerMeasurement(DIAG_ID_MAX, DIAG_EVENT_OK, &diag_kpkDatabaseShim, 0u)); + /* ======= AT2/4 ======= */ TEST_ASSERT_FAIL_ASSERT( DIAG_ErrorPowerMeasurement(DIAG_ID_CURRENT_SENSOR_POWER_MEASUREMENT_TIMEOUT, 42, &diag_kpkDatabaseShim, 0u)); + /* ======= AT3/4 ======= */ TEST_ASSERT_FAIL_ASSERT( DIAG_ErrorPowerMeasurement(DIAG_ID_CURRENT_SENSOR_POWER_MEASUREMENT_TIMEOUT, DIAG_EVENT_OK, NULL_PTR, 0u)); + /* ======= AT4/4 ======= */ TEST_ASSERT_FAIL_ASSERT(DIAG_ErrorPowerMeasurement( DIAG_ID_CURRENT_SENSOR_POWER_MEASUREMENT_TIMEOUT, DIAG_EVENT_OK, &diag_kpkDatabaseShim, BS_NR_OF_STRINGS)); + + /* ======= Routine tests =============================================== */ + /* ======= RT1/2: Test implementation */ + diag_kpkDatabaseShim.pTableError->currentSensorPowerTimeoutError[0u] = true; + /* ======= RT1/2: call function under test */ + DIAG_ErrorPowerMeasurement( + DIAG_ID_CURRENT_SENSOR_POWER_MEASUREMENT_TIMEOUT, DIAG_EVENT_RESET, &diag_kpkDatabaseShim, 0u); + TEST_ASSERT_FALSE(diag_kpkDatabaseShim.pTableError->currentSensorPowerTimeoutError[0u]); + /* ======= RT1/2: Test implementation */ + diag_kpkDatabaseShim.pTableError->currentSensorPowerTimeoutError[0u] = false; + /* ======= RT1/2: call function under test */ + DIAG_ErrorPowerMeasurement( + DIAG_ID_CURRENT_SENSOR_POWER_MEASUREMENT_TIMEOUT, DIAG_EVENT_NOT_OK, &diag_kpkDatabaseShim, 0u); + /* ======= RT1/2: test output verification */ + TEST_ASSERT_TRUE(diag_kpkDatabaseShim.pTableError->currentSensorPowerTimeoutError[0u]); + + /* ======= RT2/2: Test implementation */ + diag_kpkDatabaseShim.pTableError->powerMeasurementInvalidError[0u] = true; + /* ======= RT2/2: call function under test */ + DIAG_ErrorPowerMeasurement(DIAG_ID_POWER_MEASUREMENT_ERROR, DIAG_EVENT_RESET, &diag_kpkDatabaseShim, 0u); + /* ======= RT2/2: test output verification */ + TEST_ASSERT_FALSE(diag_kpkDatabaseShim.pTableError->powerMeasurementInvalidError[0u]); + /* ======= RT2/2: Test implementation */ + diag_kpkDatabaseShim.pTableError->powerMeasurementInvalidError[0u] = false; + /* ======= RT2/2: call function under test */ + DIAG_ErrorPowerMeasurement(DIAG_ID_POWER_MEASUREMENT_ERROR, DIAG_EVENT_NOT_OK, &diag_kpkDatabaseShim, 0u); + /* ======= RT2/2: test output verification */ + TEST_ASSERT_TRUE(diag_kpkDatabaseShim.pTableError->powerMeasurementInvalidError[0u]); } diff --git a/tests/unit/app/engine/diag/cbs/test_diag_cbs_rtc.c b/tests/unit/app/engine/diag/cbs/test_diag_cbs_rtc.c index 3d25d0d9..c70e0ed3 100644 --- a/tests/unit/app/engine/diag/cbs/test_diag_cbs_rtc.c +++ b/tests/unit/app/engine/diag/cbs/test_diag_cbs_rtc.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_diag_cbs_rtc.c * @author foxBMS Team * @date 2022-11-25 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/engine/diag/cbs/test_diag_cbs_sbc.c b/tests/unit/app/engine/diag/cbs/test_diag_cbs_sbc.c index 0cfac26a..676f89ed 100644 --- a/tests/unit/app/engine/diag/cbs/test_diag_cbs_sbc.c +++ b/tests/unit/app/engine/diag/cbs/test_diag_cbs_sbc.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_diag_cbs_sbc.c * @author foxBMS Team * @date 2021-02-17 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/engine/diag/cbs/test_diag_cbs_sys-mon.c b/tests/unit/app/engine/diag/cbs/test_diag_cbs_sys-mon.c index b8a09eb9..3f7998d0 100644 --- a/tests/unit/app/engine/diag/cbs/test_diag_cbs_sys-mon.c +++ b/tests/unit/app/engine/diag/cbs/test_diag_cbs_sys-mon.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_diag_cbs_sys-mon.c * @author foxBMS Team * @date 2021-02-17 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/engine/diag/cbs/test_diag_cbs_temperature.c b/tests/unit/app/engine/diag/cbs/test_diag_cbs_temperature.c index 328f3a79..2d82c8ec 100644 --- a/tests/unit/app/engine/diag/cbs/test_diag_cbs_temperature.c +++ b/tests/unit/app/engine/diag/cbs/test_diag_cbs_temperature.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_diag_cbs_temperature.c * @author foxBMS Team * @date 2021-02-17 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * @@ -92,46 +92,519 @@ void tearDown(void) { } /*========== Test Cases =====================================================*/ -/** tests invalid input values */ +/** + * @brief Testing DIAG_ErrorHighVoltageMeasurementInvalidInput + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/4: invalid diagnosis event ID → assert + * - AT2/4: invalid diagnosis event → assert + * - AT3/4: NULL_PTR for kpkDiagShim → assert + * - AT4/4: Invalid String number → assert + * - Routine validation: + * - RT1/5: Checks whether the overtemperatureCharge bit is set correctly when the max. safety limit of + * Overtemperature Charge in the cell is reached. + * Tests whether the overtemperatureCharge bit is set correctly + * in the event of "reset" and "not ok". + * - RT2/5: Checks whether the overtemperatureCharge bit is set correctly when the recommended safety limit + * of Overtemperature Charge in the cell is reached. + * Tests whether the overtemperatureCharge bit is set correctly + * in the event of "reset" and "not ok". + * - RT3/5: Checks whether the overtemperatureCharge bit is set correctly when the max. operating limit of + * Overtemperature Charge in the cell is reached. + * Tests whether the overtemperatureCharge bit is set correctly + * in the event of "reset" and "not ok". + * - RT4/5: Checks whether the overtemperatureCharge bit (1) doesn't change in the event of "ok". + * - RT5/5: Checks whether the overtemperatureCharge bit (0) doesn't change in the event of "ok". + */ void testDIAG_ErrorOvertemperatureChargeInvalidInput(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/4 ======= */ TEST_ASSERT_FAIL_ASSERT(DIAG_ErrorOvertemperatureCharge(DIAG_ID_MAX, DIAG_EVENT_OK, &diag_kpkDatabaseShim, 0u)); + /* ======= AT2/4 ======= */ TEST_ASSERT_FAIL_ASSERT( DIAG_ErrorOvertemperatureCharge(DIAG_ID_TEMP_OVERTEMPERATURE_CHARGE_MSL, 42, &diag_kpkDatabaseShim, 0u)); + /* ======= AT3/4 ======= */ TEST_ASSERT_FAIL_ASSERT( DIAG_ErrorOvertemperatureCharge(DIAG_ID_TEMP_OVERTEMPERATURE_CHARGE_MSL, DIAG_EVENT_OK, NULL_PTR, 0u)); + /* ======= AT4/4 ======= */ TEST_ASSERT_FAIL_ASSERT(DIAG_ErrorOvertemperatureCharge( DIAG_ID_TEMP_OVERTEMPERATURE_CHARGE_MSL, DIAG_EVENT_OK, &diag_kpkDatabaseShim, BS_NR_OF_STRINGS)); + + /* ======= Routine tests =============================================== */ + /* ======= RT1/5: Test implementation */ + diag_kpkDatabaseShim.pTableMsl->overtemperatureCharge[0u] = 1u; + /* ======= RT1/5: call function under test */ + DIAG_ErrorOvertemperatureCharge( + DIAG_ID_TEMP_OVERTEMPERATURE_CHARGE_MSL, DIAG_EVENT_RESET, &diag_kpkDatabaseShim, 0u); + /* ======= RT1/5: test output verification */ + TEST_ASSERT_EQUAL_INT(0u, diag_kpkDatabaseShim.pTableMsl->overtemperatureCharge[0u]); + /* ======= RT1/5: Test implementation */ + diag_kpkDatabaseShim.pTableMsl->overtemperatureCharge[0u] = 0u; + /* ======= RT1/5: call function under test */ + DIAG_ErrorOvertemperatureCharge( + DIAG_ID_TEMP_OVERTEMPERATURE_CHARGE_MSL, DIAG_EVENT_NOT_OK, &diag_kpkDatabaseShim, 0u); + /* ======= RT1/5: test output verification */ + TEST_ASSERT_EQUAL_INT(1u, diag_kpkDatabaseShim.pTableMsl->overtemperatureCharge[0u]); + + /* ======= RT2/5: Test implementation */ + diag_kpkDatabaseShim.pTableRsl->overtemperatureCharge[0u] = 1u; + /* ======= RT2/5: call function under test */ + DIAG_ErrorOvertemperatureCharge( + DIAG_ID_TEMP_OVERTEMPERATURE_CHARGE_RSL, DIAG_EVENT_RESET, &diag_kpkDatabaseShim, 0u); + /* ======= RT2/5: test output verification */ + TEST_ASSERT_EQUAL_INT(0u, diag_kpkDatabaseShim.pTableRsl->overtemperatureCharge[0u]); + /* ======= RT2/5: Test implementation */ + diag_kpkDatabaseShim.pTableRsl->overtemperatureCharge[0u] = 0u; + /* ======= RT2/5: call function under test */ + DIAG_ErrorOvertemperatureCharge( + DIAG_ID_TEMP_OVERTEMPERATURE_CHARGE_RSL, DIAG_EVENT_NOT_OK, &diag_kpkDatabaseShim, 0u); + /* ======= RT2/5: test output verification */ + TEST_ASSERT_EQUAL_INT(1u, diag_kpkDatabaseShim.pTableRsl->overtemperatureCharge[0u]); + + /* ======= RT3/5: Test implementation */ + diag_kpkDatabaseShim.pTableMol->overtemperatureCharge[0u] = 1u; + /* ======= RT3/5: call function under test */ + DIAG_ErrorOvertemperatureCharge( + DIAG_ID_TEMP_OVERTEMPERATURE_CHARGE_MOL, DIAG_EVENT_RESET, &diag_kpkDatabaseShim, 0u); + /* ======= RT3/5: test output verification */ + TEST_ASSERT_EQUAL_INT(0u, diag_kpkDatabaseShim.pTableMol->overtemperatureCharge[0u]); + /* ======= RT3/5: Test implementation */ + diag_kpkDatabaseShim.pTableMol->overtemperatureCharge[0u] = 0u; + /* ======= RT3/5: call function under test */ + DIAG_ErrorOvertemperatureCharge( + DIAG_ID_TEMP_OVERTEMPERATURE_CHARGE_MOL, DIAG_EVENT_NOT_OK, &diag_kpkDatabaseShim, 0u); + /* ======= RT3/5: test output verification */ + TEST_ASSERT_EQUAL_INT(1u, diag_kpkDatabaseShim.pTableMol->overtemperatureCharge[0u]); + + /* ======= RT4/5: Test implementation */ + diag_kpkDatabaseShim.pTableMsl->overtemperatureCharge[0u] = 1u; + /* ======= RT4/5: call function under test */ + DIAG_ErrorOvertemperatureCharge(DIAG_ID_TEMP_OVERTEMPERATURE_CHARGE_MSL, DIAG_EVENT_OK, &diag_kpkDatabaseShim, 0u); + /* ======= RT4/5: test output verification */ + TEST_ASSERT_EQUAL_INT(1u, diag_kpkDatabaseShim.pTableMsl->overtemperatureCharge[0u]); + /* ======= RT4/5: Test implementation */ + diag_kpkDatabaseShim.pTableRsl->overtemperatureCharge[0u] = 1u; + /* ======= RT4/5: call function under test */ + DIAG_ErrorOvertemperatureCharge(DIAG_ID_TEMP_OVERTEMPERATURE_CHARGE_RSL, DIAG_EVENT_OK, &diag_kpkDatabaseShim, 0u); + /* ======= RT4/5: test output verification */ + TEST_ASSERT_EQUAL_INT(1u, diag_kpkDatabaseShim.pTableRsl->overtemperatureCharge[0u]); + /* ======= RT4/5: Test implementation */ + diag_kpkDatabaseShim.pTableMol->overtemperatureCharge[0u] = 1u; + /* ======= RT4/5: call function under test */ + DIAG_ErrorOvertemperatureCharge(DIAG_ID_TEMP_OVERTEMPERATURE_CHARGE_MOL, DIAG_EVENT_OK, &diag_kpkDatabaseShim, 0u); + /* ======= RT4/5: test output verification */ + TEST_ASSERT_EQUAL_INT(1u, diag_kpkDatabaseShim.pTableMol->overtemperatureCharge[0u]); + + /* ======= RT5/5: Test implementation */ + diag_kpkDatabaseShim.pTableMsl->overtemperatureCharge[0u] = 0u; + /* ======= RT5/5: call function under test */ + DIAG_ErrorOvertemperatureCharge(DIAG_ID_TEMP_OVERTEMPERATURE_CHARGE_MSL, DIAG_EVENT_OK, &diag_kpkDatabaseShim, 0u); + /* ======= RT5/5: test output verification */ + TEST_ASSERT_EQUAL_INT(0u, diag_kpkDatabaseShim.pTableMsl->overtemperatureCharge[0u]); + /* ======= RT5/5: Test implementation */ + diag_kpkDatabaseShim.pTableRsl->overtemperatureCharge[0u] = 0u; + /* ======= RT5/5: call function under test */ + DIAG_ErrorOvertemperatureCharge(DIAG_ID_TEMP_OVERTEMPERATURE_CHARGE_RSL, DIAG_EVENT_OK, &diag_kpkDatabaseShim, 0u); + /* ======= RT5/5: test output verification */ + TEST_ASSERT_EQUAL_INT(0u, diag_kpkDatabaseShim.pTableRsl->overtemperatureCharge[0u]); + /* ======= RT5/5: Test implementation */ + diag_kpkDatabaseShim.pTableMol->overtemperatureCharge[0u] = 0u; + /* ======= RT5/5: call function under test */ + DIAG_ErrorOvertemperatureCharge(DIAG_ID_TEMP_OVERTEMPERATURE_CHARGE_MOL, DIAG_EVENT_OK, &diag_kpkDatabaseShim, 0u); + /* ======= RT5/5: test output verification */ + TEST_ASSERT_EQUAL_INT(0u, diag_kpkDatabaseShim.pTableMol->overtemperatureCharge[0u]); } +/** + * @brief Testing DIAG_ErrorOvertemperatureDischargeInvalidInput + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/4: invalid diagnosis event ID → assert + * - AT2/4: invalid diagnosis event → assert + * - AT3/4: NULL_PTR for kpkDiagShim → assert + * - AT4/4: Invalid String number → assert + * - Routine validation: + * - RT1/5: Checks whether the overtemperatureDischarge bit is set correctly + * when the max. safety limit of + * Overtemperature Discharge in the cell is reached. + * Tests whether the overtemperatureDischarge bit is set correctly + * in the event of "reset" and "not ok". + * - RT2/5: Checks whether the overtemperatureDischarge bit is set correctly + * when the recommended safety limit + * of Overtemperature Discharge in the cell is reached. + * Tests whether the overtemperatureDischarge bit is set correctly + * in the event of "reset" and "not ok". + * - RT3/5: Checks whether the overtemperatureDischarge bit is set correctly + * when the max. operating limit of + * Overtemperature Discharge in the cell is reached. + * Tests whether the overtemperatureDischarge bit is set correctly + * in the event of "reset" and "not ok". + * - RT4/5: Checks whether the overtemperatureDischarge bit (1) doesn't change in the event of "ok" + * - RT5/5: Checks whether the overtemperatureDischarge bit (0) doesn't change in the event of "ok" + */ /** tests invalid input values */ void testDIAG_ErrorOvertemperatureDischargeInvalidInput(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/4 ======= */ TEST_ASSERT_FAIL_ASSERT(DIAG_ErrorOvertemperatureDischarge(DIAG_ID_MAX, DIAG_EVENT_OK, &diag_kpkDatabaseShim, 0u)); + /* ======= AT2/4 ======= */ TEST_ASSERT_FAIL_ASSERT( DIAG_ErrorOvertemperatureDischarge(DIAG_ID_TEMP_OVERTEMPERATURE_DISCHARGE_MSL, 42, &diag_kpkDatabaseShim, 0u)); + /* ======= AT3/4 ======= */ TEST_ASSERT_FAIL_ASSERT( DIAG_ErrorOvertemperatureDischarge(DIAG_ID_TEMP_OVERTEMPERATURE_DISCHARGE_MSL, DIAG_EVENT_OK, NULL_PTR, 0u)); + /* ======= AT4/4 ======= */ TEST_ASSERT_FAIL_ASSERT(DIAG_ErrorOvertemperatureDischarge( DIAG_ID_TEMP_OVERTEMPERATURE_DISCHARGE_MSL, DIAG_EVENT_OK, &diag_kpkDatabaseShim, BS_NR_OF_STRINGS)); + + /* ======= Routine tests =============================================== */ + /* ======= RT1/5: Test implementation */ + diag_kpkDatabaseShim.pTableMsl->overtemperatureDischarge[0u] = 1u; + /* ======= RT1/5: call function under test */ + DIAG_ErrorOvertemperatureDischarge( + DIAG_ID_TEMP_OVERTEMPERATURE_DISCHARGE_MSL, DIAG_EVENT_RESET, &diag_kpkDatabaseShim, 0u); + /* ======= RT1/5: test output verification */ + TEST_ASSERT_EQUAL_INT(0u, diag_kpkDatabaseShim.pTableMsl->overtemperatureDischarge[0u]); + /* ======= RT1/5: Test implementation */ + diag_kpkDatabaseShim.pTableMsl->overtemperatureDischarge[0u] = 0u; + /* ======= RT1/5: call function under test */ + DIAG_ErrorOvertemperatureDischarge( + DIAG_ID_TEMP_OVERTEMPERATURE_DISCHARGE_MSL, DIAG_EVENT_NOT_OK, &diag_kpkDatabaseShim, 0u); + /* ======= RT1/5: test output verification */ + TEST_ASSERT_EQUAL_INT(1u, diag_kpkDatabaseShim.pTableMsl->overtemperatureDischarge[0u]); + + /* ======= RT2/5: Test implementation */ + diag_kpkDatabaseShim.pTableRsl->overtemperatureDischarge[0u] = 1u; + /* ======= RT2/5: call function under test */ + DIAG_ErrorOvertemperatureDischarge( + DIAG_ID_TEMP_OVERTEMPERATURE_DISCHARGE_RSL, DIAG_EVENT_RESET, &diag_kpkDatabaseShim, 0u); + /* ======= RT2/5: test output verification */ + TEST_ASSERT_EQUAL_INT(0u, diag_kpkDatabaseShim.pTableRsl->overtemperatureDischarge[0u]); + /* ======= RT2/5: Test implementation */ + diag_kpkDatabaseShim.pTableRsl->overtemperatureDischarge[0u] = 0u; + /* ======= RT2/5: call function under test */ + DIAG_ErrorOvertemperatureDischarge( + DIAG_ID_TEMP_OVERTEMPERATURE_DISCHARGE_RSL, DIAG_EVENT_NOT_OK, &diag_kpkDatabaseShim, 0u); + /* ======= RT2/5: test output verification */ + TEST_ASSERT_EQUAL_INT(1u, diag_kpkDatabaseShim.pTableRsl->overtemperatureDischarge[0u]); + + /* ======= RT3/5: Test implementation */ + diag_kpkDatabaseShim.pTableMol->overtemperatureDischarge[0u] = 1u; + /* ======= RT3/5: call function under test */ + DIAG_ErrorOvertemperatureDischarge( + DIAG_ID_TEMP_OVERTEMPERATURE_DISCHARGE_MOL, DIAG_EVENT_RESET, &diag_kpkDatabaseShim, 0u); + /* ======= RT3/5: test output verification */ + TEST_ASSERT_EQUAL_INT(0u, diag_kpkDatabaseShim.pTableMol->overtemperatureDischarge[0u]); + /* ======= RT3/5: Test implementation */ + diag_kpkDatabaseShim.pTableMol->overtemperatureDischarge[0u] = 0u; + /* ======= RT3/5: call function under test */ + DIAG_ErrorOvertemperatureDischarge( + DIAG_ID_TEMP_OVERTEMPERATURE_DISCHARGE_MOL, DIAG_EVENT_NOT_OK, &diag_kpkDatabaseShim, 0u); + /* ======= RT3/5: test output verification */ + TEST_ASSERT_EQUAL_INT(1u, diag_kpkDatabaseShim.pTableMol->overtemperatureDischarge[0u]); + + /* ======= RT4/5: Test implementation */ + diag_kpkDatabaseShim.pTableMsl->overtemperatureDischarge[0u] = 1u; + /* ======= RT4/5: call function under test */ + DIAG_ErrorOvertemperatureDischarge( + DIAG_ID_TEMP_OVERTEMPERATURE_DISCHARGE_MSL, DIAG_EVENT_OK, &diag_kpkDatabaseShim, 0u); + /* ======= RT4/5: test output verification */ + TEST_ASSERT_EQUAL_INT(1u, diag_kpkDatabaseShim.pTableMsl->overtemperatureDischarge[0u]); + /* ======= RT4/5: Test implementation */ + diag_kpkDatabaseShim.pTableRsl->overtemperatureDischarge[0u] = 1u; + /* ======= RT4/5: call function under test */ + DIAG_ErrorOvertemperatureDischarge( + DIAG_ID_TEMP_OVERTEMPERATURE_DISCHARGE_RSL, DIAG_EVENT_OK, &diag_kpkDatabaseShim, 0u); + /* ======= RT4/5: test output verification */ + TEST_ASSERT_EQUAL_INT(1u, diag_kpkDatabaseShim.pTableRsl->overtemperatureDischarge[0u]); + /* ======= RT4/5: Test implementation */ + diag_kpkDatabaseShim.pTableMol->overtemperatureDischarge[0u] = 1u; + /* ======= RT4/5: call function under test */ + DIAG_ErrorOvertemperatureDischarge( + DIAG_ID_TEMP_OVERTEMPERATURE_DISCHARGE_MOL, DIAG_EVENT_OK, &diag_kpkDatabaseShim, 0u); + /* ======= RT4/5: test output verification */ + TEST_ASSERT_EQUAL_INT(1u, diag_kpkDatabaseShim.pTableMol->overtemperatureDischarge[0u]); + + /* ======= RT5/5: Test implementation */ + diag_kpkDatabaseShim.pTableMsl->overtemperatureDischarge[0u] = 0u; + /* ======= RT5/5: call function under test */ + DIAG_ErrorOvertemperatureDischarge( + DIAG_ID_TEMP_OVERTEMPERATURE_DISCHARGE_MSL, DIAG_EVENT_OK, &diag_kpkDatabaseShim, 0u); + /* ======= RT5/5: test output verification */ + TEST_ASSERT_EQUAL_INT(0u, diag_kpkDatabaseShim.pTableMsl->overtemperatureDischarge[0u]); + /* ======= RT5/5: Test implementation */ + diag_kpkDatabaseShim.pTableRsl->overtemperatureDischarge[0u] = 0u; + /* ======= RT5/5: call function under test */ + DIAG_ErrorOvertemperatureDischarge( + DIAG_ID_TEMP_OVERTEMPERATURE_DISCHARGE_RSL, DIAG_EVENT_OK, &diag_kpkDatabaseShim, 0u); + /* ======= RT5/5: test output verification */ + TEST_ASSERT_EQUAL_INT(0u, diag_kpkDatabaseShim.pTableRsl->overtemperatureDischarge[0u]); + /* ======= RT5/5: Test implementation */ + diag_kpkDatabaseShim.pTableMol->overtemperatureDischarge[0u] = 0u; + /* ======= RT5/5: call function under test */ + DIAG_ErrorOvertemperatureDischarge( + DIAG_ID_TEMP_OVERTEMPERATURE_DISCHARGE_MOL, DIAG_EVENT_OK, &diag_kpkDatabaseShim, 0u); + /* ======= RT5/5: test output verification */ + TEST_ASSERT_EQUAL_INT(0u, diag_kpkDatabaseShim.pTableMol->overtemperatureDischarge[0u]); } -/** tests invalid input values */ +/** + * @brief Testing DIAG_ErrorHighVoltageMeasurementInvalidInput + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/4: invalid diagnosis event ID → assert + * - AT2/4: invalid diagnosis event → assert + * - AT3/4: NULL_PTR for kpkDiagShim → assert + * - AT4/4: Invalid String number → assert + * - Routine validation: + * - RT1/5: Checks whether the undertemperatureCharge bit is set correctly when the max. safety limit of + * Undertemperature Charge in the cell is reached. + * Tests whether the undertemperatureCharge bit is set correctly + * in the event of "reset" and "not ok". + * - RT2/5: Checks whether the undertemperatureCharge bit is set correctly when the recommended safety limit + * of Undertemperature Charge in the cell is reached. + * Tests whether the undertemperatureCharge bit is set correctly + * in the event of "reset" and "not ok". + * - RT3/5: Checks whether the undertemperatureCharge bit is set correctly when the max. operating limit of + * Undertemperature Charge in the cell is reached. + * Tests whether the undertemperatureCharge bit is set correctly + * in the event of "reset" and "not ok". + * - RT4/5: Checks whether the undertemperatureCharge bit (1) doesn't change in the event of "ok". + * - RT5/5: Checks whether the undertemperatureCharge bit (0) doesn't change in the event of "ok". + */ void testDIAG_ErrorUndertemperatureChargeInvalidInput(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/4 ======= */ TEST_ASSERT_FAIL_ASSERT(DIAG_ErrorUndertemperatureCharge(DIAG_ID_MAX, DIAG_EVENT_OK, &diag_kpkDatabaseShim, 0u)); + /* ======= AT2/4 ======= */ TEST_ASSERT_FAIL_ASSERT( DIAG_ErrorUndertemperatureCharge(DIAG_ID_TEMP_UNDERTEMPERATURE_CHARGE_MSL, 42, &diag_kpkDatabaseShim, 0u)); + /* ======= AT3/4 ======= */ TEST_ASSERT_FAIL_ASSERT( DIAG_ErrorUndertemperatureCharge(DIAG_ID_TEMP_UNDERTEMPERATURE_CHARGE_MSL, DIAG_EVENT_OK, NULL_PTR, 0u)); + /* ======= AT4/4 ======= */ TEST_ASSERT_FAIL_ASSERT(DIAG_ErrorUndertemperatureCharge( DIAG_ID_TEMP_UNDERTEMPERATURE_CHARGE_MSL, DIAG_EVENT_OK, &diag_kpkDatabaseShim, BS_NR_OF_STRINGS)); + + /* ======= Routine tests =============================================== */ + /* ======= RT1/5: Test implementation */ + diag_kpkDatabaseShim.pTableMsl->undertemperatureCharge[0u] = 1u; + /* ======= RT1/5: call function under test */ + DIAG_ErrorUndertemperatureCharge( + DIAG_ID_TEMP_UNDERTEMPERATURE_CHARGE_MSL, DIAG_EVENT_RESET, &diag_kpkDatabaseShim, 0u); + /* ======= RT1/5: test output verification */ + TEST_ASSERT_EQUAL_INT(0u, diag_kpkDatabaseShim.pTableMsl->undertemperatureCharge[0u]); + /* ======= RT1/5: Test implementation */ + diag_kpkDatabaseShim.pTableMsl->undertemperatureCharge[0u] = 0u; + /* ======= RT1/5: call function under test */ + DIAG_ErrorUndertemperatureCharge( + DIAG_ID_TEMP_UNDERTEMPERATURE_CHARGE_MSL, DIAG_EVENT_NOT_OK, &diag_kpkDatabaseShim, 0u); + /* ======= RT1/5: test output verification */ + TEST_ASSERT_EQUAL_INT(1u, diag_kpkDatabaseShim.pTableMsl->undertemperatureCharge[0u]); + + /* ======= RT2/5: Test implementation */ + diag_kpkDatabaseShim.pTableRsl->undertemperatureCharge[0u] = 1u; + /* ======= R2/5: call function under test */ + DIAG_ErrorUndertemperatureCharge( + DIAG_ID_TEMP_UNDERTEMPERATURE_CHARGE_RSL, DIAG_EVENT_RESET, &diag_kpkDatabaseShim, 0u); + /* ======= RT2/5: test output verification */ + TEST_ASSERT_EQUAL_INT(0u, diag_kpkDatabaseShim.pTableRsl->undertemperatureCharge[0u]); + /* ======= RT2/5: Test implementation */ + diag_kpkDatabaseShim.pTableRsl->undertemperatureCharge[0u] = 0u; + /* ======= RT2/5: call function under test */ + DIAG_ErrorUndertemperatureCharge( + DIAG_ID_TEMP_UNDERTEMPERATURE_CHARGE_RSL, DIAG_EVENT_NOT_OK, &diag_kpkDatabaseShim, 0u); + /* ======= RT2/5: test output verification */ + TEST_ASSERT_EQUAL_INT(1u, diag_kpkDatabaseShim.pTableRsl->undertemperatureCharge[0u]); + + /* ======= RT3/5: Test implementation */ + diag_kpkDatabaseShim.pTableMol->undertemperatureCharge[0u] = 1u; + /* ======= RT3/5: call function under test */ + DIAG_ErrorUndertemperatureCharge( + DIAG_ID_TEMP_UNDERTEMPERATURE_CHARGE_MOL, DIAG_EVENT_RESET, &diag_kpkDatabaseShim, 0u); + /* ======= RT3/5: test output verification */ + TEST_ASSERT_EQUAL_INT(0u, diag_kpkDatabaseShim.pTableMol->undertemperatureCharge[0u]); + /* ======= RT3/5: Test implementation */ + diag_kpkDatabaseShim.pTableMol->undertemperatureCharge[0u] = 0u; + /* ======= RT3/5: call function under test */ + DIAG_ErrorUndertemperatureCharge( + DIAG_ID_TEMP_UNDERTEMPERATURE_CHARGE_MOL, DIAG_EVENT_NOT_OK, &diag_kpkDatabaseShim, 0u); + /* ======= RT3/5: test output verification */ + TEST_ASSERT_EQUAL_INT(1u, diag_kpkDatabaseShim.pTableMol->undertemperatureCharge[0u]); + + /* ======= RT4/5: Test implementation */ + diag_kpkDatabaseShim.pTableMsl->undertemperatureCharge[0u] = 1u; + /* ======= RT4/5: call function under test */ + DIAG_ErrorUndertemperatureCharge( + DIAG_ID_TEMP_UNDERTEMPERATURE_CHARGE_MSL, DIAG_EVENT_OK, &diag_kpkDatabaseShim, 0u); + /* ======= RT4/5: test output verification */ + TEST_ASSERT_EQUAL_INT(1u, diag_kpkDatabaseShim.pTableMsl->undertemperatureCharge[0u]); + /* ======= RT4/5: Test implementation */ + diag_kpkDatabaseShim.pTableRsl->undertemperatureCharge[0u] = 1u; + /* ======= RT4/5: call function under test */ + DIAG_ErrorUndertemperatureCharge( + DIAG_ID_TEMP_UNDERTEMPERATURE_CHARGE_RSL, DIAG_EVENT_OK, &diag_kpkDatabaseShim, 0u); + /* ======= RT4/5: test output verification */ + TEST_ASSERT_EQUAL_INT(1u, diag_kpkDatabaseShim.pTableRsl->undertemperatureCharge[0u]); + /* ======= RT4/5: Test implementation */ + diag_kpkDatabaseShim.pTableMol->undertemperatureCharge[0u] = 1u; + /* ======= RT4/5: call function under test */ + DIAG_ErrorUndertemperatureCharge( + DIAG_ID_TEMP_UNDERTEMPERATURE_CHARGE_MOL, DIAG_EVENT_OK, &diag_kpkDatabaseShim, 0u); + /* ======= RT4/5: test output verification */ + TEST_ASSERT_EQUAL_INT(1u, diag_kpkDatabaseShim.pTableMol->undertemperatureCharge[0u]); + + /* ======= RT5/5: Test implementation */ + diag_kpkDatabaseShim.pTableMsl->undertemperatureCharge[0u] = 0u; + /* ======= RT5/5: call function under test */ + DIAG_ErrorUndertemperatureCharge( + DIAG_ID_TEMP_UNDERTEMPERATURE_CHARGE_MSL, DIAG_EVENT_OK, &diag_kpkDatabaseShim, 0u); + /* ======= RT5/5: test output verification */ + TEST_ASSERT_EQUAL_INT(0u, diag_kpkDatabaseShim.pTableMsl->undertemperatureCharge[0u]); + /* ======= RT5/5: Test implementation */ + diag_kpkDatabaseShim.pTableRsl->undertemperatureCharge[0u] = 0u; + /* ======= RT5/5: call function under test */ + DIAG_ErrorUndertemperatureCharge( + DIAG_ID_TEMP_UNDERTEMPERATURE_CHARGE_RSL, DIAG_EVENT_OK, &diag_kpkDatabaseShim, 0u); + /* ======= RT5/5: test output verification */ + TEST_ASSERT_EQUAL_INT(0u, diag_kpkDatabaseShim.pTableRsl->undertemperatureCharge[0u]); + /* ======= RT5/5: Test implementation */ + diag_kpkDatabaseShim.pTableMol->undertemperatureCharge[0u] = 0u; + /* ======= RT5/5: call function under test */ + DIAG_ErrorUndertemperatureCharge( + DIAG_ID_TEMP_UNDERTEMPERATURE_CHARGE_MOL, DIAG_EVENT_OK, &diag_kpkDatabaseShim, 0u); + /* ======= RT5/5: test output verification */ + TEST_ASSERT_EQUAL_INT(0u, diag_kpkDatabaseShim.pTableMol->undertemperatureCharge[0u]); } -/** tests invalid input values */ +/** + * @brief Testing DIAG_ErrorHighVoltageMeasurementInvalidInput + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/4: invalid diagnosis event ID→ assert + * - AT2/4: invalid diagnosis event → assert + * - AT3/4: NULL_PTR for kpkDiagShim → assert + * - AT4/4: Invalid String number → assert + * - Routine validation: + * - RT1/5: Checks whether the undertemperatureDischarge bit is set correctly + * when the max. safety limit of + * Undertemperature Discharge in the cell is reached. + * Tests whether the undertemperatureDischarge bit is set correctly + * in the event of "reset" and "not ok". + * - RT2/5: Checks whether the undertemperatureDischarge bit is set correctly + * when the recommended safety limit + * of Undertemperature Discharge in the cell is reached. + * Tests whether the undertemperatureDischarge bit is set correctly + * in the event of "reset" and "not ok". + * - RT3/5: Checks whether the undertemperatureDischarge bit is set correctly + * when the max. operating limit of + * Undertemperature Discharge in the cell is reached. + * Tests whether the undertemperatureCharge bit is set correctly + * in the event of "reset" and "not ok". + * - RT4/5: Checks whether the undertemperatureDischarge bit (1) doesn't change in the event of "ok". + * - RT5/5: Checks whether the undertemperatureDischarge bit (0) doesn't change in the event of "ok". + */ void testDIAG_ErrorUndertemperatureDischargeInvalidInput(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/4 ======= */ TEST_ASSERT_FAIL_ASSERT(DIAG_ErrorUndertemperatureDischarge(DIAG_ID_MAX, DIAG_EVENT_OK, &diag_kpkDatabaseShim, 0u)); + /* ======= AT2/4 ======= */ TEST_ASSERT_FAIL_ASSERT(DIAG_ErrorUndertemperatureDischarge( DIAG_ID_TEMP_UNDERTEMPERATURE_DISCHARGE_MSL, 42, &diag_kpkDatabaseShim, 0u)); + /* ======= AT3/4 ======= */ TEST_ASSERT_FAIL_ASSERT( DIAG_ErrorUndertemperatureDischarge(DIAG_ID_TEMP_UNDERTEMPERATURE_DISCHARGE_MSL, DIAG_EVENT_OK, NULL_PTR, 0u)); + /* ======= AT4/4 ======= */ TEST_ASSERT_FAIL_ASSERT(DIAG_ErrorUndertemperatureDischarge( DIAG_ID_TEMP_UNDERTEMPERATURE_DISCHARGE_MSL, DIAG_EVENT_OK, &diag_kpkDatabaseShim, BS_NR_OF_STRINGS)); + + /* ======= Routine tests =============================================== */ + /* ======= RT1/5: Test implementation */ + diag_kpkDatabaseShim.pTableMsl->undertemperatureDischarge[0u] = 1u; + /* ======= RT1/5: call function under test */ + DIAG_ErrorUndertemperatureDischarge( + DIAG_ID_TEMP_UNDERTEMPERATURE_DISCHARGE_MSL, DIAG_EVENT_RESET, &diag_kpkDatabaseShim, 0u); + /* ======= RT1/5: test output verification */ + TEST_ASSERT_EQUAL_INT(0u, diag_kpkDatabaseShim.pTableMsl->undertemperatureDischarge[0u]); + /* ======= RT1/5: Test implementation */ + diag_kpkDatabaseShim.pTableMsl->undertemperatureDischarge[0u] = 0u; + /* ======= RT1/5: call function under test */ + DIAG_ErrorUndertemperatureDischarge( + DIAG_ID_TEMP_UNDERTEMPERATURE_DISCHARGE_MSL, DIAG_EVENT_NOT_OK, &diag_kpkDatabaseShim, 0u); + /* ======= RT1/5: test output verification */ + TEST_ASSERT_EQUAL_INT(1u, diag_kpkDatabaseShim.pTableMsl->undertemperatureDischarge[0u]); + + /* ======= RT2/5: Test implementation */ + diag_kpkDatabaseShim.pTableRsl->undertemperatureDischarge[0u] = 1u; + /* ======= RT2/5: call function under test */ + DIAG_ErrorUndertemperatureDischarge( + DIAG_ID_TEMP_UNDERTEMPERATURE_DISCHARGE_RSL, DIAG_EVENT_RESET, &diag_kpkDatabaseShim, 0u); + /* ======= RT2/5: test output verification */ + TEST_ASSERT_EQUAL_INT(0u, diag_kpkDatabaseShim.pTableRsl->undertemperatureDischarge[0u]); + /* ======= RT2/5: Test implementation */ + diag_kpkDatabaseShim.pTableRsl->undertemperatureDischarge[0u] = 0u; + /* ======= RT2/5: call function under test */ + DIAG_ErrorUndertemperatureDischarge( + DIAG_ID_TEMP_UNDERTEMPERATURE_DISCHARGE_RSL, DIAG_EVENT_NOT_OK, &diag_kpkDatabaseShim, 0u); + /* ======= RT2/5: test output verification */ + TEST_ASSERT_EQUAL_INT(1u, diag_kpkDatabaseShim.pTableRsl->undertemperatureDischarge[0u]); + + /* ======= RT3/5: Test implementation */ + diag_kpkDatabaseShim.pTableMol->undertemperatureDischarge[0u] = 1u; + /* ======= RT3/5: call function under test */ + DIAG_ErrorUndertemperatureDischarge( + DIAG_ID_TEMP_UNDERTEMPERATURE_DISCHARGE_MOL, DIAG_EVENT_RESET, &diag_kpkDatabaseShim, 0u); + /* ======= RT3/5: test output verification */ + TEST_ASSERT_EQUAL_INT(0u, diag_kpkDatabaseShim.pTableMol->undertemperatureDischarge[0u]); + /* ======= RT3/5: Test implementation */ + diag_kpkDatabaseShim.pTableMol->undertemperatureDischarge[0u] = 0u; + /* ======= RT3/5: call function under test */ + DIAG_ErrorUndertemperatureDischarge( + DIAG_ID_TEMP_UNDERTEMPERATURE_DISCHARGE_MOL, DIAG_EVENT_NOT_OK, &diag_kpkDatabaseShim, 0u); + /* ======= RT3/5: test output verification */ + TEST_ASSERT_EQUAL_INT(1u, diag_kpkDatabaseShim.pTableMol->undertemperatureDischarge[0u]); + + /* ======= RT4/5: Test implementation */ + diag_kpkDatabaseShim.pTableMsl->undertemperatureDischarge[0u] = 1u; + /* ======= RT4/5: call function under test */ + DIAG_ErrorUndertemperatureDischarge( + DIAG_ID_TEMP_UNDERTEMPERATURE_DISCHARGE_MSL, DIAG_EVENT_OK, &diag_kpkDatabaseShim, 0u); + /* ======= RT4/5: test output verification */ + TEST_ASSERT_EQUAL_INT(1u, diag_kpkDatabaseShim.pTableMsl->undertemperatureDischarge[0u]); + /* ======= RT4/5: Test implementation */ + diag_kpkDatabaseShim.pTableRsl->undertemperatureDischarge[0u] = 1u; + /* ======= RT4/5: call function under test */ + DIAG_ErrorUndertemperatureDischarge( + DIAG_ID_TEMP_UNDERTEMPERATURE_DISCHARGE_RSL, DIAG_EVENT_OK, &diag_kpkDatabaseShim, 0u); + /* ======= RT4/5: test output verification */ + TEST_ASSERT_EQUAL_INT(1u, diag_kpkDatabaseShim.pTableRsl->undertemperatureDischarge[0u]); + /* ======= RT4/5: Test implementation */ + diag_kpkDatabaseShim.pTableMol->undertemperatureDischarge[0u] = 1u; + /* ======= RT4/5: call function under test */ + DIAG_ErrorUndertemperatureDischarge( + DIAG_ID_TEMP_UNDERTEMPERATURE_DISCHARGE_MOL, DIAG_EVENT_OK, &diag_kpkDatabaseShim, 0u); + /* ======= RT4/5: test output verification */ + TEST_ASSERT_EQUAL_INT(1u, diag_kpkDatabaseShim.pTableMol->undertemperatureDischarge[0u]); + + /* ======= RT5/5: Test implementation */ + diag_kpkDatabaseShim.pTableMsl->undertemperatureDischarge[0u] = 0u; + /* ======= RT5/5: call function under test */ + DIAG_ErrorUndertemperatureDischarge( + DIAG_ID_TEMP_UNDERTEMPERATURE_DISCHARGE_MSL, DIAG_EVENT_OK, &diag_kpkDatabaseShim, 0u); + /* ======= RT5/5: test output verification */ + TEST_ASSERT_EQUAL_INT(0u, diag_kpkDatabaseShim.pTableMsl->undertemperatureDischarge[0u]); + /* ======= RT5/5: Test implementation */ + diag_kpkDatabaseShim.pTableRsl->undertemperatureDischarge[0u] = 0u; + /* ======= RT5/5: call function under test */ + DIAG_ErrorUndertemperatureDischarge( + DIAG_ID_TEMP_UNDERTEMPERATURE_DISCHARGE_RSL, DIAG_EVENT_OK, &diag_kpkDatabaseShim, 0u); + /* ======= RT5/5: test output verification */ + TEST_ASSERT_EQUAL_INT(0u, diag_kpkDatabaseShim.pTableRsl->undertemperatureDischarge[0u]); + /* ======= RT5/5: Test implementation */ + diag_kpkDatabaseShim.pTableMol->undertemperatureDischarge[0u] = 0u; + /* ======= RT5/5: call function under test */ + DIAG_ErrorUndertemperatureDischarge( + DIAG_ID_TEMP_UNDERTEMPERATURE_DISCHARGE_MOL, DIAG_EVENT_OK, &diag_kpkDatabaseShim, 0u); + /* ======= RT5/5: test output verification */ + TEST_ASSERT_EQUAL_INT(0u, diag_kpkDatabaseShim.pTableMol->undertemperatureDischarge[0u]); } diff --git a/tests/unit/app/engine/diag/cbs/test_diag_cbs_voltage.c b/tests/unit/app/engine/diag/cbs/test_diag_cbs_voltage.c index a1939990..cf06788e 100644 --- a/tests/unit/app/engine/diag/cbs/test_diag_cbs_voltage.c +++ b/tests/unit/app/engine/diag/cbs/test_diag_cbs_voltage.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_diag_cbs_voltage.c * @author foxBMS Team * @date 2021-02-17 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * @@ -92,32 +92,344 @@ void tearDown(void) { } /*========== Test Cases =====================================================*/ -/** tests invalid input values */ +/** + * @brief Testing DIAG_ErrorOvervoltageInvalidInput + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/4: invalid diagnosis event ID for diagId -> assert + * - AT2/4: invalid event for event -> assert + * - AT3/4: NULL_PTR for kpkDiagShim -> assert + * - AT4/4: Invalid String number BS_NR_OF_STRINGS -> assert + * - Routine validation: + * - RT1/5: Checks whether the overVoltage bit is set correctly when the max. safety limit of + * overvoltage in the cell is reached. + * Tests whether the underVoltage bit is set correctly in the event of "reset" and "not ok". + * - RT2/5: Checks whether the overVoltage bit is set correctly when the recommended safety limit of + * overvoltage in the cell is reached. + * Tests whether the underVoltage bit is set correctly in the event of "reset" and "not ok". + * - RT3/5: Checks whether the overVoltage bit is set correctly when the max. operating limit of + * overvoltage in the cell is reached. + * Tests whether the underVoltage bit is set correctly in the event of "reset" and "not ok". + * - RT4/5: Checks whether the underVoltage bit (0) doesn't change in the event of "ok". + * - RT5/5: Checks whether the underVoltage bit (1) doesn't change in the event of "ok". + */ void testDIAG_ErrorOvervoltageInvalidInput(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/4 ======= */ TEST_ASSERT_FAIL_ASSERT(DIAG_ErrorOvervoltage(DIAG_ID_MAX, DIAG_EVENT_OK, &diag_kpkDatabaseShim, 0u)); + /* ======= AT2/4 ======= */ TEST_ASSERT_FAIL_ASSERT(DIAG_ErrorOvervoltage(DIAG_ID_CELL_VOLTAGE_OVERVOLTAGE_MSL, 42, &diag_kpkDatabaseShim, 0u)); + /* ======= AT3/4 ======= */ TEST_ASSERT_FAIL_ASSERT(DIAG_ErrorOvervoltage(DIAG_ID_CELL_VOLTAGE_OVERVOLTAGE_MSL, DIAG_EVENT_OK, NULL_PTR, 0u)); + /* ======= AT4/4 ======= */ TEST_ASSERT_FAIL_ASSERT(DIAG_ErrorOvervoltage( DIAG_ID_CELL_VOLTAGE_OVERVOLTAGE_MSL, DIAG_EVENT_OK, &diag_kpkDatabaseShim, BS_NR_OF_STRINGS)); + + /* ======= Routine tests =============================================== */ + /* ======= RT1/5: Test implementation */ + diag_kpkDatabaseShim.pTableMsl->overVoltage[0u] = 0; + /* ======= RT1/5: call function under test */ + DIAG_ErrorOvervoltage(DIAG_ID_CELL_VOLTAGE_OVERVOLTAGE_MSL, DIAG_EVENT_NOT_OK, &diag_kpkDatabaseShim, 0u); + /* ======= RT1/5: test output verification */ + TEST_ASSERT_EQUAL_INT(1u, diag_kpkDatabaseShim.pTableMsl->overVoltage[0u]); + /* ======= RT1/5: Test implementation */ + diag_kpkDatabaseShim.pTableMsl->overVoltage[0u] = 1; + /* ======= RT1/5: call function under test */ + DIAG_ErrorOvervoltage(DIAG_ID_CELL_VOLTAGE_OVERVOLTAGE_MSL, DIAG_EVENT_RESET, &diag_kpkDatabaseShim, 0u); + /* ======= RT1/5: test output verification */ + TEST_ASSERT_EQUAL_INT(0u, diag_kpkDatabaseShim.pTableMsl->overVoltage[0u]); + + /* ======= RT2/5: Test implementation */ + diag_kpkDatabaseShim.pTableRsl->overVoltage[0u] = 0; + /* ======= RT2/5: call function under test */ + DIAG_ErrorOvervoltage(DIAG_ID_CELL_VOLTAGE_OVERVOLTAGE_RSL, DIAG_EVENT_NOT_OK, &diag_kpkDatabaseShim, 0u); + /* ======= RT2/5: test output verification */ + TEST_ASSERT_EQUAL_INT(1u, diag_kpkDatabaseShim.pTableRsl->overVoltage[0u]); + /* ======= RT2/5: Test implementation */ + diag_kpkDatabaseShim.pTableRsl->overVoltage[0u] = 1; + /* ======= RT2/5: call function under test */ + DIAG_ErrorOvervoltage(DIAG_ID_CELL_VOLTAGE_OVERVOLTAGE_RSL, DIAG_EVENT_RESET, &diag_kpkDatabaseShim, 0u); + /* ======= RT2/5: test output verification */ + TEST_ASSERT_EQUAL_INT(0u, diag_kpkDatabaseShim.pTableRsl->overVoltage[0u]); + + /* ======= RT3/5: Test implementation */ + diag_kpkDatabaseShim.pTableMol->overVoltage[0u] = 0; + /* ======= RT3/5: call function under test */ + DIAG_ErrorOvervoltage(DIAG_ID_CELL_VOLTAGE_OVERVOLTAGE_MOL, DIAG_EVENT_NOT_OK, &diag_kpkDatabaseShim, 0u); + /* ======= RT3/5: test output verification */ + TEST_ASSERT_EQUAL_INT(1u, diag_kpkDatabaseShim.pTableMol->overVoltage[0u]); + /* ======= RT3/5: Test implementation */ + diag_kpkDatabaseShim.pTableMol->overVoltage[0u] = 1; + /* ======= RT3/5: call function under test */ + DIAG_ErrorOvervoltage(DIAG_ID_CELL_VOLTAGE_OVERVOLTAGE_MOL, DIAG_EVENT_RESET, &diag_kpkDatabaseShim, 0u); + /* ======= RT3/5: test output verification */ + TEST_ASSERT_EQUAL_INT(0u, diag_kpkDatabaseShim.pTableMol->overVoltage[0u]); + + /* ======= RT4/5: Test implementation */ + diag_kpkDatabaseShim.pTableMsl->overVoltage[0u] = 0; + /* ======= RT4/5: call function under test */ + DIAG_ErrorOvervoltage(DIAG_ID_CELL_VOLTAGE_OVERVOLTAGE_MSL, DIAG_EVENT_OK, &diag_kpkDatabaseShim, 0u); + /* ======= RT4/5: test output verification */ + TEST_ASSERT_EQUAL_INT(0u, diag_kpkDatabaseShim.pTableMsl->overVoltage[0u]); + /* ======= RT4/5: Test implementation */ + diag_kpkDatabaseShim.pTableRsl->overVoltage[0u] = 0; + /* ======= RT4/5: call function under test */ + DIAG_ErrorOvervoltage(DIAG_ID_CELL_VOLTAGE_OVERVOLTAGE_RSL, DIAG_EVENT_OK, &diag_kpkDatabaseShim, 0u); + /* ======= RT4/5: test output verification */ + TEST_ASSERT_EQUAL_INT(0u, diag_kpkDatabaseShim.pTableRsl->overVoltage[0u]); + /* ======= RT4/5: Test implementation */ + diag_kpkDatabaseShim.pTableMol->overVoltage[0u] = 0; + /* ======= RT4/5: call function under test */ + DIAG_ErrorOvervoltage(DIAG_ID_CELL_VOLTAGE_OVERVOLTAGE_MOL, DIAG_EVENT_OK, &diag_kpkDatabaseShim, 0u); + /* ======= RT4/5: test output verification */ + TEST_ASSERT_EQUAL_INT(0u, diag_kpkDatabaseShim.pTableMol->overVoltage[0u]); + + /* ======= RT5/5: Test implementation */ + diag_kpkDatabaseShim.pTableMsl->overVoltage[0u] = 1; + /* ======= RT5/5: call function under test */ + DIAG_ErrorOvervoltage(DIAG_ID_CELL_VOLTAGE_OVERVOLTAGE_MSL, DIAG_EVENT_OK, &diag_kpkDatabaseShim, 0u); + /* ======= RT5/5: test output verification */ + TEST_ASSERT_EQUAL_INT(1u, diag_kpkDatabaseShim.pTableMsl->overVoltage[0u]); + /* ======= RT5/5: Test implementation */ + diag_kpkDatabaseShim.pTableRsl->overVoltage[0u] = 1; + /* ======= RT5/5: call function under test */ + DIAG_ErrorOvervoltage(DIAG_ID_CELL_VOLTAGE_OVERVOLTAGE_RSL, DIAG_EVENT_OK, &diag_kpkDatabaseShim, 0u); + /* ======= RT5/5: test output verification */ + TEST_ASSERT_EQUAL_INT(1u, diag_kpkDatabaseShim.pTableRsl->overVoltage[0u]); + /* ======= RT5/5: Test implementation */ + diag_kpkDatabaseShim.pTableMol->overVoltage[0u] = 1; + /* ======= RT5/5: call function under test */ + DIAG_ErrorOvervoltage(DIAG_ID_CELL_VOLTAGE_OVERVOLTAGE_MOL, DIAG_EVENT_OK, &diag_kpkDatabaseShim, 0u); + /* ======= RT5/5: test output verification */ + TEST_ASSERT_EQUAL_INT(1u, diag_kpkDatabaseShim.pTableMol->overVoltage[0u]); } -/** tests invalid input values */ +/** + * @brief Testing DIAG_ErrorUndervoltageInvalidInput + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/4: invalid diagnosis event ID for diagId -> assert + * - AT2/4: invalid event for event -> assert + * - AT3/4: NULL_PTR for kpkDiagShim -> assert + * - AT4/4: Invalid String number BS_NR_OF_STRINGS -> assert + * - Routine validation: + * - RT1/5: Checks whether the underVoltage bit is set correctly when the max. safety limit of + * underVoltage in the cell is reached. + * Tests whether the underVoltage bit is set correctly in the event of "reset" and "not ok". + * - RT2/5: Checks whether the underVoltage bit is set correctly when the recommended safety limit of + * underVoltage in the cell is reached. + * Tests whether the underVoltage bit is set correctly in the event of "reset" and "not ok". + * - RT3/5: Checks whether the underVoltage bit is set correctly when the max. operating limit of + * underVoltage in the cell is reached. + * Tests whether the underVoltage bit is set correctly in the event of "reset" and "not ok". + * - RT4/5: Checks whether the underVoltage bit (0) doesn't change in the event of "ok". + * - RT5/5: Checks whether the underVoltage bit (1) doesn't change in the event of "ok". + */ void testDIAG_ErrorUndervoltageInvalidInput(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/4 ======= */ TEST_ASSERT_FAIL_ASSERT(DIAG_ErrorUndervoltage(DIAG_ID_MAX, DIAG_EVENT_OK, &diag_kpkDatabaseShim, 0u)); + /* ======= AT2/4 ======= */ TEST_ASSERT_FAIL_ASSERT( DIAG_ErrorUndervoltage(DIAG_ID_CELL_VOLTAGE_UNDERVOLTAGE_MSL, 42, &diag_kpkDatabaseShim, 0u)); + /* ======= AT3/4 ======= */ TEST_ASSERT_FAIL_ASSERT(DIAG_ErrorUndervoltage(DIAG_ID_CELL_VOLTAGE_UNDERVOLTAGE_MSL, DIAG_EVENT_OK, NULL_PTR, 0u)); + /* ======= AT4/4 ======= */ TEST_ASSERT_FAIL_ASSERT(DIAG_ErrorUndervoltage( DIAG_ID_CELL_VOLTAGE_UNDERVOLTAGE_MSL, DIAG_EVENT_OK, &diag_kpkDatabaseShim, BS_NR_OF_STRINGS)); + + /* ======= Routine tests =============================================== */ + /* ======= RT1/5: Test implementation */ + diag_kpkDatabaseShim.pTableMsl->underVoltage[0u] = 0; + /* ======= RT1/5: call function under test */ + DIAG_ErrorUndervoltage(DIAG_ID_CELL_VOLTAGE_UNDERVOLTAGE_MSL, DIAG_EVENT_NOT_OK, &diag_kpkDatabaseShim, 0u); + /* ======= RT1/5: test output verification */ + TEST_ASSERT_EQUAL_INT(1u, diag_kpkDatabaseShim.pTableMsl->underVoltage[0u]); + /* ======= RT1/5: Test implementation */ + diag_kpkDatabaseShim.pTableMsl->underVoltage[0u] = 1; + /* ======= RT1/5: call function under test */ + DIAG_ErrorUndervoltage(DIAG_ID_CELL_VOLTAGE_UNDERVOLTAGE_MSL, DIAG_EVENT_RESET, &diag_kpkDatabaseShim, 0u); + /* ======= RT1/5: test output verification */ + TEST_ASSERT_EQUAL_INT(0u, diag_kpkDatabaseShim.pTableMsl->underVoltage[0u]); + + /* ======= RT2/5: Test implementation */ + diag_kpkDatabaseShim.pTableRsl->underVoltage[0u] = 0; + /* ======= RT2/5: call function under test */ + DIAG_ErrorUndervoltage(DIAG_ID_CELL_VOLTAGE_UNDERVOLTAGE_RSL, DIAG_EVENT_NOT_OK, &diag_kpkDatabaseShim, 0u); + /* ======= RT2/5: test output verification */ + TEST_ASSERT_EQUAL_INT(1u, diag_kpkDatabaseShim.pTableRsl->underVoltage[0u]); + /* ======= RT2/5: Test implementation */ + diag_kpkDatabaseShim.pTableRsl->underVoltage[0u] = 1; + /* ======= RT2/5: call function under test */ + DIAG_ErrorUndervoltage(DIAG_ID_CELL_VOLTAGE_UNDERVOLTAGE_RSL, DIAG_EVENT_RESET, &diag_kpkDatabaseShim, 0u); + /* ======= RT2/5: test output verification */ + TEST_ASSERT_EQUAL_INT(0u, diag_kpkDatabaseShim.pTableRsl->underVoltage[0u]); + + /* ======= RT3/5: Test implementation */ + diag_kpkDatabaseShim.pTableMol->underVoltage[0u] = 0; + /* ======= RT3/5: call function under test */ + DIAG_ErrorUndervoltage(DIAG_ID_CELL_VOLTAGE_UNDERVOLTAGE_MOL, DIAG_EVENT_NOT_OK, &diag_kpkDatabaseShim, 0u); + /* ======= RT3/5: test output verification */ + TEST_ASSERT_EQUAL_INT(1u, diag_kpkDatabaseShim.pTableMol->underVoltage[0u]); + /* ======= RT3/5: Test implementation */ + diag_kpkDatabaseShim.pTableMol->underVoltage[0u] = 1; + /* ======= RT3/5: call function under test */ + DIAG_ErrorUndervoltage(DIAG_ID_CELL_VOLTAGE_UNDERVOLTAGE_MOL, DIAG_EVENT_RESET, &diag_kpkDatabaseShim, 0u); + /* ======= RT3/5: test output verification */ + TEST_ASSERT_EQUAL_INT(0u, diag_kpkDatabaseShim.pTableMol->underVoltage[0u]); + + /* ======= RT4/5: Test implementation */ + diag_kpkDatabaseShim.pTableMsl->underVoltage[0u] = 0; + /* ======= RT4/5: call function under test */ + DIAG_ErrorUndervoltage(DIAG_ID_CELL_VOLTAGE_UNDERVOLTAGE_MSL, DIAG_EVENT_OK, &diag_kpkDatabaseShim, 0u); + /* ======= RT4/5: test output verification */ + TEST_ASSERT_EQUAL_INT(0u, diag_kpkDatabaseShim.pTableMsl->underVoltage[0u]); + /* ======= RT4/5: Test implementation */ + diag_kpkDatabaseShim.pTableRsl->underVoltage[0u] = 0; + /* ======= RT4/5: call function under test */ + DIAG_ErrorUndervoltage(DIAG_ID_CELL_VOLTAGE_UNDERVOLTAGE_RSL, DIAG_EVENT_OK, &diag_kpkDatabaseShim, 0u); + /* ======= RT4/5: test output verification */ + TEST_ASSERT_EQUAL_INT(0u, diag_kpkDatabaseShim.pTableRsl->underVoltage[0u]); + /* ======= RT4/5: Test implementation */ + diag_kpkDatabaseShim.pTableMol->underVoltage[0u] = 0; + /* ======= RT4/5: call function under test */ + DIAG_ErrorUndervoltage(DIAG_ID_CELL_VOLTAGE_UNDERVOLTAGE_MOL, DIAG_EVENT_OK, &diag_kpkDatabaseShim, 0u); + /* ======= RT4/5: test output verification */ + TEST_ASSERT_EQUAL_INT(0u, diag_kpkDatabaseShim.pTableMol->underVoltage[0u]); + + /* ======= RT5/5: Test implementation */ + diag_kpkDatabaseShim.pTableMsl->underVoltage[0u] = 1; + /* ======= RT5/5: call function under test */ + DIAG_ErrorUndervoltage(DIAG_ID_CELL_VOLTAGE_UNDERVOLTAGE_MSL, DIAG_EVENT_OK, &diag_kpkDatabaseShim, 0u); + /* ======= RT5/5: test output verification */ + TEST_ASSERT_EQUAL_INT(1u, diag_kpkDatabaseShim.pTableMsl->underVoltage[0u]); + /* ======= RT5/5: Test implementation */ + diag_kpkDatabaseShim.pTableRsl->underVoltage[0u] = 1; + /* ======= RT5/5: call function under test */ + DIAG_ErrorUndervoltage(DIAG_ID_CELL_VOLTAGE_UNDERVOLTAGE_RSL, DIAG_EVENT_OK, &diag_kpkDatabaseShim, 0u); + /* ======= RT5/5: test output verification */ + TEST_ASSERT_EQUAL_INT(1u, diag_kpkDatabaseShim.pTableRsl->underVoltage[0u]); + /* ======= RT5/5: Test implementation */ + diag_kpkDatabaseShim.pTableMol->underVoltage[0u] = 1; + /* ======= RT5/5: call function under test */ + DIAG_ErrorUndervoltage(DIAG_ID_CELL_VOLTAGE_UNDERVOLTAGE_MOL, DIAG_EVENT_OK, &diag_kpkDatabaseShim, 0u); + /* ======= RT5/5: test output verification */ + TEST_ASSERT_EQUAL_INT(1u, diag_kpkDatabaseShim.pTableMol->underVoltage[0u]); } -/** tests invalid input values */ +/** + * @brief Testing DIAG_ErrorHighVoltageMeasurementInvalidInput + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/4: invalid diagnosis event ID for diagId -> assert + * - AT2/4: invalid event for event -> assert + * - AT3/4: NULL_PTR for kpkDiagShim -> assert + * - AT4/4: Invalid String number BS_NR_OF_STRINGS -> assert + * - Routine validation: + * - RT1/5: Checks whether the error bit is set correctly when Voltage 1 Measurement Timeout Error occurs. + * Tests whether the error bit is set correctly in the event of "reset" and "not ok". + * - RT2/5: Checks whether the error bit is set correctly when Voltage 2 Measurement Timeout Error occurs. + * Tests whether the error bit is set correctly in the event of "reset" and "not ok". + * - RT3/5: Checks whether the error bit is set correctly when Voltage 3 Measurement Timeout Error occurs. + * Tests whether the error bit is set correctly in the event of "reset" and "not ok". + * - RT4/5: Checks whether the error bit (0) doesn't change in the event of "ok". + * - RT5/5: Checks whether the error bit (1) doesn't change in the event of "ok". + */ void testDIAG_ErrorHighVoltageMeasurementInvalidInput(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/4 ======= */ TEST_ASSERT_FAIL_ASSERT(DIAG_ErrorHighVoltageMeasurement(DIAG_ID_MAX, DIAG_EVENT_OK, &diag_kpkDatabaseShim, 0u)); + /* ======= AT2/4 ======= */ TEST_ASSERT_FAIL_ASSERT( DIAG_ErrorHighVoltageMeasurement(DIAG_ID_CURRENT_SENSOR_V1_MEASUREMENT_TIMEOUT, 42, &diag_kpkDatabaseShim, 0u)); + /* ======= AT3/4 ======= */ TEST_ASSERT_FAIL_ASSERT( DIAG_ErrorHighVoltageMeasurement(DIAG_ID_CURRENT_SENSOR_V1_MEASUREMENT_TIMEOUT, DIAG_EVENT_OK, NULL_PTR, 0u)); + /* ======= AT4/4 ======= */ TEST_ASSERT_FAIL_ASSERT(DIAG_ErrorHighVoltageMeasurement( DIAG_ID_CURRENT_SENSOR_V1_MEASUREMENT_TIMEOUT, DIAG_EVENT_OK, &diag_kpkDatabaseShim, BS_NR_OF_STRINGS)); + + /* ======= Routine tests =============================================== */ + /* ======= RT1/5: Test implementation */ + diag_kpkDatabaseShim.pTableError->currentSensorVoltage1TimeoutError[0u] = true; + /* ======= RT1/5: call function under test */ + DIAG_ErrorHighVoltageMeasurement( + DIAG_ID_CURRENT_SENSOR_V1_MEASUREMENT_TIMEOUT, DIAG_EVENT_RESET, &diag_kpkDatabaseShim, 0u); + /* ======= RT1/5: test output verification */ + TEST_ASSERT_FALSE(diag_kpkDatabaseShim.pTableError->currentSensorVoltage1TimeoutError[0u]); + /* ======= RT1/5: Test implementation */ + diag_kpkDatabaseShim.pTableError->currentSensorVoltage1TimeoutError[0u] = false; + /* ======= RT1/5: call function under test */ + DIAG_ErrorHighVoltageMeasurement( + DIAG_ID_CURRENT_SENSOR_V1_MEASUREMENT_TIMEOUT, DIAG_EVENT_NOT_OK, &diag_kpkDatabaseShim, 0u); + /* ======= RT1/5: test output verification */ + TEST_ASSERT_TRUE(diag_kpkDatabaseShim.pTableError->currentSensorVoltage1TimeoutError[0u]); + + /* ======= RT2/5: Test implementation */ + diag_kpkDatabaseShim.pTableError->currentSensorVoltage2TimeoutError[0u] = true; + /* ======= RT2/5: call function under test */ + DIAG_ErrorHighVoltageMeasurement( + DIAG_ID_CURRENT_SENSOR_V2_MEASUREMENT_TIMEOUT, DIAG_EVENT_RESET, &diag_kpkDatabaseShim, 0u); + /* ======= RT2/5: test output verification */ + TEST_ASSERT_FALSE(diag_kpkDatabaseShim.pTableError->currentSensorVoltage2TimeoutError[0u]); + /* ======= RT2/5: Test implementation */ + diag_kpkDatabaseShim.pTableError->currentSensorVoltage2TimeoutError[0u] = false; + /* ======= RT2/5: call function under test */ + DIAG_ErrorHighVoltageMeasurement( + DIAG_ID_CURRENT_SENSOR_V2_MEASUREMENT_TIMEOUT, DIAG_EVENT_NOT_OK, &diag_kpkDatabaseShim, 0u); + /* ======= RT2/5: test output verification */ + TEST_ASSERT_TRUE(diag_kpkDatabaseShim.pTableError->currentSensorVoltage2TimeoutError[0u]); + + /* ======= RT3/5: Test implementation */ + diag_kpkDatabaseShim.pTableError->currentSensorVoltage3TimeoutError[0u] = true; + /* ======= RT3/5: call function under test */ + DIAG_ErrorHighVoltageMeasurement( + DIAG_ID_CURRENT_SENSOR_V3_MEASUREMENT_TIMEOUT, DIAG_EVENT_RESET, &diag_kpkDatabaseShim, 0u); + /* ======= RT3/5: test output verification */ + TEST_ASSERT_FALSE(diag_kpkDatabaseShim.pTableError->currentSensorVoltage3TimeoutError[0u]); + /* ======= RT3/5: Test implementation */ + diag_kpkDatabaseShim.pTableError->currentSensorVoltage3TimeoutError[0u] = false; + /* ======= RT3/5: call function under test */ + DIAG_ErrorHighVoltageMeasurement( + DIAG_ID_CURRENT_SENSOR_V3_MEASUREMENT_TIMEOUT, DIAG_EVENT_NOT_OK, &diag_kpkDatabaseShim, 0u); + /* ======= RT3/5: test output verification */ + TEST_ASSERT_TRUE(diag_kpkDatabaseShim.pTableError->currentSensorVoltage3TimeoutError[0u]); + + /* ======= RT4/5: Test implementation */ + diag_kpkDatabaseShim.pTableError->currentSensorVoltage1TimeoutError[0u] = true; + /* ======= RT4/5: call function under test */ + DIAG_ErrorUndervoltage(DIAG_ID_CURRENT_SENSOR_V1_MEASUREMENT_TIMEOUT, DIAG_EVENT_OK, &diag_kpkDatabaseShim, 0u); + /* ======= RT4/5: test output verification */ + TEST_ASSERT_TRUE(diag_kpkDatabaseShim.pTableError->currentSensorVoltage1TimeoutError[0u]); + /* ======= RT4/5: Test implementation */ + diag_kpkDatabaseShim.pTableError->currentSensorVoltage2TimeoutError[0u] = true; + /* ======= RT4/5: call function under test */ + DIAG_ErrorUndervoltage(DIAG_ID_CURRENT_SENSOR_V2_MEASUREMENT_TIMEOUT, DIAG_EVENT_OK, &diag_kpkDatabaseShim, 0u); + /* ======= RT4/5: test output verification */ + TEST_ASSERT_TRUE(diag_kpkDatabaseShim.pTableError->currentSensorVoltage2TimeoutError[0u]); + /* ======= RT4/5: Test implementation */ + diag_kpkDatabaseShim.pTableError->currentSensorVoltage3TimeoutError[0u] = true; + /* ======= RT4/5: call function under test */ + DIAG_ErrorUndervoltage(DIAG_ID_CURRENT_SENSOR_V3_MEASUREMENT_TIMEOUT, DIAG_EVENT_OK, &diag_kpkDatabaseShim, 0u); + /* ======= RT4/5: test output verification */ + TEST_ASSERT_TRUE(diag_kpkDatabaseShim.pTableError->currentSensorVoltage3TimeoutError[0u]); + + /* ======= RT5/5: Test implementation */ + diag_kpkDatabaseShim.pTableError->currentSensorVoltage1TimeoutError[0u] = false; + /* ======= RT5/5: call function under test */ + DIAG_ErrorUndervoltage(DIAG_ID_CURRENT_SENSOR_V1_MEASUREMENT_TIMEOUT, DIAG_EVENT_OK, &diag_kpkDatabaseShim, 0u); + /* ======= RT5/5: test output verification */ + TEST_ASSERT_FALSE(diag_kpkDatabaseShim.pTableError->currentSensorVoltage1TimeoutError[0u]); + /* ======= RT5/5: Test implementation */ + diag_kpkDatabaseShim.pTableError->currentSensorVoltage2TimeoutError[0u] = false; + /* ======= RT5/5: call function under test */ + DIAG_ErrorUndervoltage(DIAG_ID_CURRENT_SENSOR_V2_MEASUREMENT_TIMEOUT, DIAG_EVENT_OK, &diag_kpkDatabaseShim, 0u); + /* ======= RT5/5: test output verification */ + TEST_ASSERT_FALSE(diag_kpkDatabaseShim.pTableError->currentSensorVoltage2TimeoutError[0u]); + /* ======= RT5/5: Test implementation */ + diag_kpkDatabaseShim.pTableError->currentSensorVoltage3TimeoutError[0u] = false; + /* ======= RT5/5: call function under test */ + DIAG_ErrorUndervoltage(DIAG_ID_CURRENT_SENSOR_V3_MEASUREMENT_TIMEOUT, DIAG_EVENT_OK, &diag_kpkDatabaseShim, 0u); + /* ======= RT5/5: test output verification */ + TEST_ASSERT_FALSE(diag_kpkDatabaseShim.pTableError->currentSensorVoltage3TimeoutError[0u]); } diff --git a/tests/unit/app/engine/diag/test_diag.c b/tests/unit/app/engine/diag/test_diag.c index 9288eb63..a88c81a5 100644 --- a/tests/unit/app/engine/diag/test_diag.c +++ b/tests/unit/app/engine/diag/test_diag.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_diag.c * @author foxBMS Team * @date 2020-04-02 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * @@ -60,6 +60,7 @@ #include "diag_cfg.h" #include "diag.h" +#include "test_assert_helper.h" /*========== Unit Testing Framework Directives ==============================*/ TEST_INCLUDE_PATH("../../src/app/engine/diag") @@ -75,5 +76,12 @@ void tearDown(void) { } /*========== Test Cases =====================================================*/ -void testDummy(void) { +void testDIAG_Reset(void) { + TEST_DIAG_SetDiagerrcnttotal(3u); + TEST_DIAG_Reset(); + TEST_ASSERT_EQUAL(0u, TEST_DIAG_GetDiag()->errcnttotal); +} + +void testDIAG_Initialize(void) { + TEST_ASSERT_FAIL_ASSERT(DIAG_Initialize(NULL_PTR)); } diff --git a/tests/unit/app/engine/hw_info/test_master_info.c b/tests/unit/app/engine/hw_info/test_master_info.c index 8451c9b6..0bfe9487 100644 --- a/tests/unit/app/engine/hw_info/test_master_info.c +++ b/tests/unit/app/engine/hw_info/test_master_info.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_master_info.c * @author foxBMS Team * @date 2020-07-09 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/engine/sys/test_reset.c b/tests/unit/app/engine/sys/test_reset.c index 31a3ba72..3d6c1a0c 100644 --- a/tests/unit/app/engine/sys/test_reset.c +++ b/tests/unit/app/engine/sys/test_reset.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_reset.c * @author foxBMS Team * @date 2022-11-16 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/engine/sys/test_sys.c b/tests/unit/app/engine/sys/test_sys.c index 3b5237ee..069e382c 100644 --- a/tests/unit/app/engine/sys/test_sys.c +++ b/tests/unit/app/engine/sys/test_sys.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_sys.c * @author foxBMS Team * @date 2020-04-02 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * @@ -118,3 +118,7 @@ void tearDown(void) { void testSYS_GeneralMacroBist(void) { TEST_ASSERT_PASS_ASSERT(SYS_GeneralMacroBist()); } + +void testSYS_Trigger(void) { + TEST_ASSERT_FAIL_ASSERT(SYS_Trigger(NULL_PTR)); +} diff --git a/tests/unit/app/engine/sys_mon/test_sys_mon.c b/tests/unit/app/engine/sys_mon/test_sys_mon.c index 75b080d2..7711de02 100644 --- a/tests/unit/app/engine/sys_mon/test_sys_mon.c +++ b/tests/unit/app/engine/sys_mon/test_sys_mon.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,12 +43,12 @@ * @file test_sys_mon.c * @author foxBMS Team * @date 2020-04-02 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * - * @brief Tests for the sys_mon module + * @brief Tests for the System Monitoring module * */ @@ -117,7 +117,7 @@ SYSM_MONITORING_CFG_s sysm_ch_cfg[3] = { }; /** placeholder variable for the FRAM entry of sys mon */ -FRAM_SYS_MON_RECORD_s fram_sys_mon_record = {0}; +FRAM_SYS_MON_RECORD_s fram_sysMonViolationRecord = {0}; /*========== Setup and Teardown =============================================*/ void setUp(void) { @@ -132,17 +132,17 @@ void setUp(void) { notifications[DUMMY_TASK_ID_2].timestampExit = 0; notifications[DUMMY_TASK_ID_2].duration = 0; - fram_sys_mon_record.anyTimingIssueOccurred = false; - fram_sys_mon_record.taskEngineViolatingDuration = 0u; - fram_sys_mon_record.taskEngineEnterTimestamp = 0u; - fram_sys_mon_record.task1msViolatingDuration = 0u; - fram_sys_mon_record.task1msEnterTimestamp = 0u; - fram_sys_mon_record.task10msViolatingDuration = 0u; - fram_sys_mon_record.task10msEnterTimestamp = 0u; - fram_sys_mon_record.task100msViolatingDuration = 0u; - fram_sys_mon_record.task100msEnterTimestamp = 0u; - fram_sys_mon_record.task100msAlgorithmViolatingDuration = 0u; - fram_sys_mon_record.task100msAlgorithmEnterTimestamp = 0u; + fram_sysMonViolationRecord.anyTimingIssueOccurred = false; + fram_sysMonViolationRecord.taskEngineViolatingDuration = 0u; + fram_sysMonViolationRecord.taskEngineEnterTimestamp = 0u; + fram_sysMonViolationRecord.task1msViolatingDuration = 0u; + fram_sysMonViolationRecord.task1msEnterTimestamp = 0u; + fram_sysMonViolationRecord.task10msViolatingDuration = 0u; + fram_sysMonViolationRecord.task10msEnterTimestamp = 0u; + fram_sysMonViolationRecord.task100msViolatingDuration = 0u; + fram_sysMonViolationRecord.task100msEnterTimestamp = 0u; + fram_sysMonViolationRecord.task100msAlgorithmViolatingDuration = 0u; + fram_sysMonViolationRecord.task100msAlgorithmEnterTimestamp = 0u; } void tearDown(void) { @@ -212,7 +212,7 @@ void testSYSM_CheckNotificationsProvokeDurationViolationWithRecording(void) { /* check if violation has been recorded */ FRAM_WriteData_ExpectAndReturn(FRAM_BLOCK_ID_SYS_MON_RECORD, STD_OK); SYSM_UpdateFramData(); - TEST_ASSERT_EQUAL(true, fram_sys_mon_record.anyTimingIssueOccurred); + TEST_ASSERT_EQUAL(true, fram_sysMonViolationRecord.anyTimingIssueOccurred); } void testSYSM_NotifyInvalidTaskID(void) { @@ -266,25 +266,50 @@ void testSYSM_NotifyHitAssertWithIllegalNotifyType(void) { TEST_ASSERT_NOT_EQUAL(UINT32_MAX, notifications[DUMMY_TASK_ID_0].timestampExit); } -/** test the edge cases of the function that can return recorded violations */ +/** + * @brief Testing extern function #SYSM_GetRecordedTimingViolations + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/1: NULL_PTR for pAnswer → assert + * - Routine validation: + * - RT1/2: + * - RT2/2: + */ void testSYSM_GetRecordedTimingViolations(void) { - OS_EnterTaskCritical_Ignore(); - OS_ExitTaskCritical_Ignore(); + /* ======= AT1/2: Assertion test */ + TEST_ASSERT_FAIL_ASSERT(SYSM_GetRecordedTimingViolations(NULL_PTR)); - /* default state is no violation, therefore no flag should be set */ + /* ======= Routine tests =============================================== */ SYSM_TIMING_VIOLATION_RESPONSE_s violationResponse = {0}; + /* ======= RT1/2: Test implementation */ + /* default state is no violation, therefore no flag should be set */ + OS_EnterTaskCritical_Expect(); + OS_ExitTaskCritical_Expect(); + + /* ======= RT1/2: call function under test */ SYSM_GetRecordedTimingViolations(&violationResponse); + + /* ======= RT1/2: test output verification */ TEST_ASSERT_FALSE(violationResponse.recordedViolationEngine); TEST_ASSERT_FALSE(violationResponse.recordedViolation1ms); TEST_ASSERT_FALSE(violationResponse.recordedViolation10ms); TEST_ASSERT_FALSE(violationResponse.recordedViolation100ms); TEST_ASSERT_FALSE(violationResponse.recordedViolation100msAlgo); - /* when the general flag is set and one deviates in duration or entry, the violation should be set */ - fram_sys_mon_record.anyTimingIssueOccurred = true; - fram_sys_mon_record.taskEngineEnterTimestamp = 100u; - fram_sys_mon_record.task1msViolatingDuration = 5u; + /* ======= RT2/2: Test implementation */ + /* when the general flag is set and one deviates in duration or entry, + * the violation should be set */ + fram_sysMonViolationRecord.anyTimingIssueOccurred = true; + fram_sysMonViolationRecord.taskEngineEnterTimestamp = 100u; + fram_sysMonViolationRecord.task1msViolatingDuration = 5u; + + OS_EnterTaskCritical_Expect(); + OS_ExitTaskCritical_Expect(); + + /* ======= RT1/2: call function under test */ SYSM_GetRecordedTimingViolations(&violationResponse); + + /* ======= RT1/2: test output verification */ TEST_ASSERT_TRUE(violationResponse.recordedViolationAny); TEST_ASSERT_TRUE(violationResponse.recordedViolationEngine); TEST_ASSERT_TRUE(violationResponse.recordedViolation1ms); @@ -293,44 +318,189 @@ void testSYSM_GetRecordedTimingViolations(void) { TEST_ASSERT_FALSE(violationResponse.recordedViolation100msAlgo); } -/** test #SYSM_CopyFramStruct() and its reaction to invalid input */ -void testSYSM_CopyFramStructInvalidInput(void) { - FRAM_SYS_MON_RECORD_s dummy = {0}; - TEST_ASSERT_FAIL_ASSERT(SYSM_CopyFramStruct(NULL_PTR, &dummy)); - TEST_ASSERT_FAIL_ASSERT(SYSM_CopyFramStruct(&dummy, NULL_PTR)); +/** + * @brief Testing extern function #SYSM_ClearAllTimingViolations + * @details The following cases need to be tested: + * - Argument validation: + * - none (void function) + * - Routine validation: + * - RT1/2: all timing violations records shall be cleared + */ +void testSYSM_ClearAllTimingViolations(void) { + /* ======= Assertion tests ============================================= */ + /* none */ + + /* ======= Routine tests =============================================== */ + fram_sysMonViolationRecord.anyTimingIssueOccurred = true; + fram_sysMonViolationRecord.taskEngineEnterTimestamp = 1u; + fram_sysMonViolationRecord.taskEngineViolatingDuration = 2u; + fram_sysMonViolationRecord.task1msEnterTimestamp = 3u; + fram_sysMonViolationRecord.task1msViolatingDuration = 4u; + fram_sysMonViolationRecord.task10msEnterTimestamp = 5u; + fram_sysMonViolationRecord.task10msViolatingDuration = 6u; + fram_sysMonViolationRecord.task100msEnterTimestamp = 7u; + fram_sysMonViolationRecord.task100msViolatingDuration = 8u; + fram_sysMonViolationRecord.task100msAlgorithmEnterTimestamp = 9u; + fram_sysMonViolationRecord.task100msAlgorithmViolatingDuration = 10u; + + /* ======= RT1/1: Test implementation */ + for (SYSM_TASK_ID_e taskId = (SYSM_TASK_ID_e)0; taskId < SYSM_TASK_ID_MAX; taskId++) { + (void)DIAG_Handler_ExpectAndReturn( + DIAG_ID_SYSTEM_MONITORING, DIAG_EVENT_OK, DIAG_SYSTEM, (uint32_t)taskId, STD_OK); + } + OS_EnterTaskCritical_Expect(); /* in SYSM_ClearAllTimingViolations */ + OS_ExitTaskCritical_Expect(); /* in SYSM_ClearAllTimingViolations */ + + OS_EnterTaskCritical_Expect(); /* in SYSM_UpdateFramData */ + OS_ExitTaskCritical_Expect(); /* in SYSM_UpdateFramData */ + OS_EnterTaskCritical_Expect(); /* in SYSM_UpdateFramData: in branch */ + OS_ExitTaskCritical_Expect(); /* in SYSM_UpdateFramData: in branch */ + + FRAM_WriteData_ExpectAndReturn(FRAM_BLOCK_ID_SYS_MON_RECORD, STD_OK); + + /* the called function alters a module static variable; + * get the value to restore it */ + bool oldValue = TEST_SYSM_GetStaticVariableFlagFramCopyHasChanges(); + + /* ======= RT1/1: call function under test */ + SYSM_ClearAllTimingViolations(); + + /* ======= RT1/1: test output verification */ + TEST_ASSERT_FALSE(fram_sysMonViolationRecord.anyTimingIssueOccurred); + TEST_ASSERT_EQUAL_UINT32(fram_sysMonViolationRecord.taskEngineEnterTimestamp, 0u); + TEST_ASSERT_EQUAL_UINT32(fram_sysMonViolationRecord.taskEngineViolatingDuration, 0u); + TEST_ASSERT_EQUAL_UINT32(fram_sysMonViolationRecord.task1msEnterTimestamp, 0u); + TEST_ASSERT_EQUAL_UINT32(fram_sysMonViolationRecord.task1msViolatingDuration, 0u); + TEST_ASSERT_EQUAL_UINT32(fram_sysMonViolationRecord.task10msEnterTimestamp, 0u); + TEST_ASSERT_EQUAL_UINT32(fram_sysMonViolationRecord.task10msViolatingDuration, 0u); + TEST_ASSERT_EQUAL_UINT32(fram_sysMonViolationRecord.task100msEnterTimestamp, 0u); + TEST_ASSERT_EQUAL_UINT32(fram_sysMonViolationRecord.task100msViolatingDuration, 0u); + TEST_ASSERT_EQUAL_UINT32(fram_sysMonViolationRecord.task100msAlgorithmEnterTimestamp, 0u); + TEST_ASSERT_EQUAL_UINT32(fram_sysMonViolationRecord.task100msAlgorithmViolatingDuration, 0u); + + /* restore old value */ + (void)TEST_SYSM_SetStaticVariableFlagFramCopyHasChanges(oldValue); +} + +/** + * @brief Testing extern function #SYSM_UpdateFramData + * @details The following cases need to be tested: + * - Argument validation: + * - none (void function) + * - Routine validation: + * - RT1/2: no update are required, i.e., nothing to do. + * - RT2/2: an update is due, check that the updated values get + * copied. + */ +void testSYSM_UpdateFramData(void) { + /* ======= Assertion tests ============================================= */ + /* none */ + + /* ======= Routine tests =============================================== */ + /* ensure the test is meaningful, i.e., input and output are not equal */ + + /* ======= RT1/2: Test implementation */ + /* store the old value, so that we can reset the variable after the test */ + bool oldValue = TEST_SYSM_SetStaticVariableFlagFramCopyHasChanges(false); + OS_EnterTaskCritical_Expect(); + OS_ExitTaskCritical_Expect(); + + /* ======= RT1/2: call function under test */ + + SYSM_UpdateFramData(); + /* ======= RT1/2: test output verification */ + /* nothing shall be changed */ + /* TODO: check memory */ + + /* restore old value */ + (void)TEST_SYSM_SetStaticVariableFlagFramCopyHasChanges(oldValue); + + /* ======= RT2/2: Test implementation */ + /* store the old value, so that we can reset the variable after the test */ + oldValue = TEST_SYSM_SetStaticVariableFlagFramCopyHasChanges(true); + + /* ======= RT1/2: call function under test */ + OS_EnterTaskCritical_Expect(); + OS_ExitTaskCritical_Expect(); + OS_EnterTaskCritical_Expect(); + OS_ExitTaskCritical_Expect(); + /* we do not need the information, whether FRAM_WriteData was successful or not */ + (void)FRAM_WriteData_ExpectAndReturn(FRAM_BLOCK_ID_SYS_MON_RECORD, STD_OK); + + SYSM_UpdateFramData(); + /* ======= RT1/2: test output verification */ + /* values should have been changed */ + /* TODO: check memory */ + + /* restore old value */ + (void)TEST_SYSM_SetStaticVariableFlagFramCopyHasChanges(oldValue); } -/** test copy function of #SYSM_CopyFramStruct() */ +/** + * @brief Testing extern function #SYSM_CopyFramStruct + * @details The following cases need to be tested: + * - Argument validation: + * - AT1/2: NULL_PTR for kpkFrom → assert + * - AT2/2: NULL_PTR for pTo → assert + * - Routine validation: + * - RT1/1: all elements get copied. + */ void testSYSM_CopyFramStruct(void) { + /* ======= Assertion tests ============================================= */ + FRAM_SYS_MON_RECORD_s assertionDummy = { + .anyTimingIssueOccurred = false, + .task100msAlgorithmEnterTimestamp = 0u, + .task100msAlgorithmViolatingDuration = 0u, + .task100msEnterTimestamp = 0u, + .task100msViolatingDuration = 0u, + .task10msEnterTimestamp = 0u, + .task10msViolatingDuration = 0u, + .task1msEnterTimestamp = 0u, + .task1msViolatingDuration = 0u, + .taskEngineEnterTimestamp = 0u, + .taskEngineViolatingDuration = 0u, + }; + /* ======= AT1/2: Assertion test */ + TEST_ASSERT_FAIL_ASSERT(SYSM_CopyFramStruct(NULL_PTR, &assertionDummy)); + /* ======= AT1/2: Assertion test */ + TEST_ASSERT_FAIL_ASSERT(SYSM_CopyFramStruct(&assertionDummy, NULL_PTR)); + + /* ======= Routine tests =============================================== */ FRAM_SYS_MON_RECORD_s input = { .anyTimingIssueOccurred = true, - .task100msAlgorithmEnterTimestamp = 1, - .task100msAlgorithmViolatingDuration = 2, - .task100msEnterTimestamp = 3, - .task100msViolatingDuration = 4, - .task10msEnterTimestamp = 5, - .task10msViolatingDuration = 6, - .task1msEnterTimestamp = 7, - .task1msViolatingDuration = 8, - .taskEngineEnterTimestamp = 9, - .taskEngineViolatingDuration = 10, + .task100msAlgorithmEnterTimestamp = 1u, + .task100msAlgorithmViolatingDuration = 2u, + .task100msEnterTimestamp = 3u, + .task100msViolatingDuration = 4u, + .task10msEnterTimestamp = 5u, + .task10msViolatingDuration = 6u, + .task1msEnterTimestamp = 7u, + .task1msViolatingDuration = 8u, + .taskEngineEnterTimestamp = 9u, + .taskEngineViolatingDuration = 10u, }; FRAM_SYS_MON_RECORD_s output = { .anyTimingIssueOccurred = false, - .task100msAlgorithmEnterTimestamp = 0, - .task100msAlgorithmViolatingDuration = 0, - .task100msEnterTimestamp = 0, - .task100msViolatingDuration = 0, - .task10msEnterTimestamp = 0, - .task10msViolatingDuration = 0, - .task1msEnterTimestamp = 0, - .task1msViolatingDuration = 0, - .taskEngineEnterTimestamp = 0, - .taskEngineViolatingDuration = 0, + .task100msAlgorithmEnterTimestamp = 0u, + .task100msAlgorithmViolatingDuration = 0u, + .task100msEnterTimestamp = 0u, + .task100msViolatingDuration = 0u, + .task10msEnterTimestamp = 0u, + .task10msViolatingDuration = 0u, + .task1msEnterTimestamp = 0u, + .task1msViolatingDuration = 0u, + .taskEngineEnterTimestamp = 0u, + .taskEngineViolatingDuration = 0u, }; + /* ======= RT1/1: Test implementation */ + /* ensure the test is meaningful, i.e., input and output are not equal */ TEST_ASSERT_NOT_EQUAL(input.anyTimingIssueOccurred, output.anyTimingIssueOccurred); + + /* ======= RT1/1: call function under test */ SYSM_CopyFramStruct(&input, &output); + + /* ======= RT1/1: test output verification */ TEST_ASSERT_EQUAL(input.anyTimingIssueOccurred, output.anyTimingIssueOccurred); TEST_ASSERT_EQUAL(input.task100msAlgorithmEnterTimestamp, output.task100msAlgorithmEnterTimestamp); TEST_ASSERT_EQUAL(input.task100msAlgorithmViolatingDuration, output.task100msAlgorithmViolatingDuration); diff --git a/tests/unit/app/main/test_fassert.c b/tests/unit/app/main/test_fassert.c index 408ffb06..344261bd 100644 --- a/tests/unit/app/main/test_fassert.c +++ b/tests/unit/app/main/test_fassert.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_fassert.c * @author foxBMS Team * @date 2020-04-01 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * @@ -70,5 +70,8 @@ void tearDown(void) { /*========== Test Cases =====================================================*/ -void testDummy(void) { +void testFAS_StoreAssertLocation(void) { + uint32_t dummyProgramCounter = 0u; + const uint32_t dummyLine = 0u; + FAS_StoreAssertLocation(&dummyProgramCounter, dummyLine); } diff --git a/tests/unit/app/main/test_fstartup.c b/tests/unit/app/main/test_fstartup.c index e5fe0367..5e744883 100644 --- a/tests/unit/app/main/test_fstartup.c +++ b/tests/unit/app/main/test_fstartup.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_fstartup.c * @author foxBMS Team * @date 2020-04-01 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * @@ -55,8 +55,24 @@ /*========== Includes =======================================================*/ #include "unity.h" +#include "HL_hal_stdtypes.h" + +/* clang-format off */ +#include "MockHL_sys_common.h" +#include "MockHL_system.h" +#include "MockHL_sys_vim.h" +#include "MockHL_sys_core.h" +#include "MockHL_esm.h" +#include "MockHL_sys_mpu.h" +#include "MockHL_errata_SSWF021_45.h" +/* clang-format on */ + +#include "fstartup.h" + /*========== Unit Testing Framework Directives ==============================*/ +TEST_INCLUDE_PATH("C:/ti/Hercules/HALCoGen/v04.07.01/drivers/TMS570LC4357ZWT/SYSTEM570v000") + /*========== Definitions and Implementations for Unit Test ==================*/ /*========== Setup and Teardown =============================================*/ diff --git a/tests/unit/app/main/test_main.c b/tests/unit/app/main/test_main.c index 3d897df9..db1a51e6 100644 --- a/tests/unit/app/main/test_main.c +++ b/tests/unit/app/main/test_main.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_main.c * @author foxBMS Team * @date 2020-04-01 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * @@ -54,11 +54,82 @@ /*========== Includes =======================================================*/ #include "unity.h" +#include "MockHL_adc.h" +#include "MockHL_crc.h" +#include "MockHL_etpwm.h" +#include "MockHL_gio.h" +#include "MockHL_het.h" +#include "MockHL_pinmux.h" +#include "MockHL_sys_core.h" +#include "MockHL_system.h" /* getResetSource */ +#include "Mockadc.h" +#include "Mockchecksum.h" +#include "Mockdiag.h" +#include "Mockdiag_cfg.h" +#include "Mockdma.h" +#include "Mockfoxmath.h" +#include "Mocki2c.h" +#include "Mockled.h" +#include "Mockmaster_info.h" +#include "Mockos.h" +#include "Mockpwm.h" +#include "Mockspi.h" + +/* clang-format off */ +#include "general.h" +/* clang-format on */ + +#include "main.h" +#include "test_assert_helper.h" /*========== Unit Testing Framework Directives ==============================*/ +TEST_INCLUDE_PATH("../../src/app/driver/adc") +TEST_INCLUDE_PATH("../../src/app/driver/checksum") +TEST_INCLUDE_PATH("../../src/app/driver/config") +TEST_INCLUDE_PATH("../../src/app/driver/dma") +TEST_INCLUDE_PATH("../../src/app/driver/foxmath") +TEST_INCLUDE_PATH("../../src/app/driver/i2c") +TEST_INCLUDE_PATH("../../src/app/driver/io") +TEST_INCLUDE_PATH("../../src/app/driver/led") +TEST_INCLUDE_PATH("../../src/app/driver/pwm") +TEST_INCLUDE_PATH("../../src/app/driver/spi") +TEST_INCLUDE_PATH("../../src/app/engine/diag") +TEST_INCLUDE_PATH("../../src/app/engine/hw_info") /*========== Definitions and Implementations for Unit Test ==================*/ +/* required for mocking of the OS module */ +volatile OS_BOOT_STATE_e os_boot = OS_OFF; +uint32_t os_schedulerStartTime = 0u; +/* required for mocking of the diagnosis module */ +#define TEST_DIAG_ID_MAX_FOR_INIT (1u) +#define TEST_DIAG_ID_MAX (1u) + +extern void TEST_DummyCallback( + DIAG_ID_e diagId, + DIAG_EVENT_e event, + const DIAG_DATABASE_SHIM_s *const kpkDiagShim, + uint32_t data) { + FAS_ASSERT(diagId < TEST_DIAG_ID_MAX); + FAS_ASSERT((event == DIAG_EVENT_OK) || (event == DIAG_EVENT_NOT_OK) || (event == DIAG_EVENT_RESET)); + FAS_ASSERT(kpkDiagShim != NULL_PTR); + /* AXIVION Routine Generic-MissingParameterAssert: data: parameter accept whole range */ + (void)data; /* parameter is unused on purpose */ +} + +DIAG_ID_CFG_s diag_diagnosisIdConfiguration[] = { + /* clang-format off */ + {DIAG_ID_SYSTEM_MONITORING, DIAG_ERROR_SENSITIVITY_FIRST_EVENT, DIAG_FATAL_ERROR, DIAG_NO_DELAY, DIAG_RECORDING_ENABLED, DIAG_EVALUATION_ENABLED, TEST_DummyCallback}, + /* clang-format on */ +}; + +DIAG_DEV_s diag_device = { + .nrOfConfiguredDiagnosisEntries = sizeof(diag_diagnosisIdConfiguration) / sizeof(DIAG_ID_CFG_s), + .pConfigurationOfDiagnosisEntries = &diag_diagnosisIdConfiguration[0], + .numberOfFatalErrors = 0u, + .pFatalErrorLinkTable = {GEN_REPEAT_U(NULL_PTR, GEN_STRIP(TEST_DIAG_ID_MAX_FOR_INIT))}, +}; + /*========== Setup and Teardown =============================================*/ void setUp(void) { } @@ -68,5 +139,106 @@ void tearDown(void) { /*========== Test Cases =====================================================*/ -void testDummy(void) { +void testMain(void) { + /* ======= Assertion tests ============================================= */ + /* ======= AT1/3 ======= */ + getResetSource_ExpectAndReturn(POWERON_RESET); + resetSource_t resetSource = POWERON_RESET; + MINFO_SetResetSource_Expect(resetSource); + _enable_IRQ_interrupt__Expect(); + muxInit_Expect(); + gioInit_Expect(); + SPI_Initialize_Expect(); + adcInit_Expect(); + hetInit_Expect(); + etpwmInit_Expect(); + crcInit_Expect(); + LED_SetDebugLed_Expect(); + I2C_Initialize_Expect(); + DMA_Initialize_Expect(); + PWM_Initialize_Expect(); + DIAG_Initialize_ExpectAndReturn(&diag_device, STD_OK); + MATH_StartupSelfTest_Expect(); + OS_CheckTimeHasPassedSelfTest_ExpectAndReturn(STD_NOT_OK); + TEST_ASSERT_FAIL_ASSERT(unit_test_main()); + + /* ======= AT2/3 ======= */ + getResetSource_ExpectAndReturn(POWERON_RESET); + resetSource = POWERON_RESET; + MINFO_SetResetSource_Expect(resetSource); + _enable_IRQ_interrupt__Expect(); + muxInit_Expect(); + gioInit_Expect(); + SPI_Initialize_Expect(); + adcInit_Expect(); + hetInit_Expect(); + etpwmInit_Expect(); + crcInit_Expect(); + LED_SetDebugLed_Expect(); + I2C_Initialize_Expect(); + DMA_Initialize_Expect(); + PWM_Initialize_Expect(); + DIAG_Initialize_ExpectAndReturn(&diag_device, STD_OK); + MATH_StartupSelfTest_Expect(); + OS_CheckTimeHasPassedSelfTest_ExpectAndReturn(STD_OK); + OS_InitializeOperatingSystem_Expect(); + os_boot = OS_OFF; /* initialization of the OS failed */ + TEST_ASSERT_FAIL_ASSERT(unit_test_main()); + + /* ======= AT3/3 ======= */ + getResetSource_ExpectAndReturn(POWERON_RESET); + resetSource = POWERON_RESET; + MINFO_SetResetSource_Expect(resetSource); + _enable_IRQ_interrupt__Expect(); + muxInit_Expect(); + gioInit_Expect(); + SPI_Initialize_Expect(); + adcInit_Expect(); + hetInit_Expect(); + etpwmInit_Expect(); + crcInit_Expect(); + LED_SetDebugLed_Expect(); + I2C_Initialize_Expect(); + DMA_Initialize_Expect(); + PWM_Initialize_Expect(); + DIAG_Initialize_ExpectAndReturn(&diag_device, STD_OK); + MATH_StartupSelfTest_Expect(); + OS_CheckTimeHasPassedSelfTest_ExpectAndReturn(STD_OK); + OS_InitializeOperatingSystem_Expect(); + os_boot = OS_INIT_PRE_OS; /* successful initialization of the OS */ + CHK_ValidateChecksum_ExpectAndReturn(STD_NOT_OK); /* checksum failed */ + DIAG_Handler_ExpectAndReturn( + DIAG_ID_FLASHCHECKSUM, DIAG_EVENT_NOT_OK, DIAG_SYSTEM, 0u, DIAG_HANDLER_RETURN_ERR_OCCURRED); + TEST_ASSERT_FAIL_ASSERT(unit_test_main()); + + /* ======= Routine tests =============================================== */ + + /* ======= RT1/1: Test implementation */ + getResetSource_ExpectAndReturn(POWERON_RESET); + resetSource = POWERON_RESET; + MINFO_SetResetSource_Expect(resetSource); + _enable_IRQ_interrupt__Expect(); + muxInit_Expect(); + gioInit_Expect(); + SPI_Initialize_Expect(); + adcInit_Expect(); + hetInit_Expect(); + etpwmInit_Expect(); + crcInit_Expect(); + LED_SetDebugLed_Expect(); + I2C_Initialize_Expect(); + DMA_Initialize_Expect(); + PWM_Initialize_Expect(); + DIAG_Initialize_ExpectAndReturn(&diag_device, STD_OK); + MATH_StartupSelfTest_Expect(); + OS_CheckTimeHasPassedSelfTest_ExpectAndReturn(STD_OK); + OS_InitializeOperatingSystem_Expect(); + os_boot = OS_INIT_PRE_OS; /* successful initialization of the OS */ + CHK_ValidateChecksum_ExpectAndReturn(STD_OK); /* checksum check successful */ + OS_GetTickCount_ExpectAndReturn(0u); + OS_StartScheduler_Expect(); + /* ======= RT1/1: call function under test */ + int ret = unit_test_main(); + /* ======= RT1/1: test output verification */ + TEST_ASSERT_EQUAL(1, ret); } diff --git a/tests/unit/app/task/config/test_ftask_cfg.c b/tests/unit/app/task/config/test_ftask_cfg.c index 24b73ac6..3f4faa7c 100644 --- a/tests/unit/app/task/config/test_ftask_cfg.c +++ b/tests/unit/app/task/config/test_ftask_cfg.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_ftask_cfg.c * @author foxBMS Team * @date 2020-04-02 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * @@ -91,6 +91,7 @@ #include "fassert.h" #include "ftask.h" +#include "test_assert_helper.h" /*========== Unit Testing Framework Directives ==============================*/ TEST_INCLUDE_PATH("../../src/app/application/algorithm") @@ -150,5 +151,101 @@ void tearDown(void) { } /*========== Test Cases =====================================================*/ -void testDummy(void) { +void testFTSK_RunUserCodeIdle(void) { + TEST_ASSERT_PASS_ASSERT(FTSK_RunUserCodeIdle()); +} + +void testFTSK_InitializeUserCodeEngine(void) { + DATA_Initialize_ExpectAndReturn(STD_NOT_OK); + TEST_ASSERT_FAIL_ASSERT(FTSK_InitializeUserCodeEngine()) + + DATA_Initialize_ExpectAndReturn(STD_OK); + FRAM_Initialize_Expect(); + SYSM_Initialize_ExpectAndReturn(STD_NOT_OK); + TEST_ASSERT_FAIL_ASSERT(FTSK_InitializeUserCodeEngine()) + + DATA_Initialize_ExpectAndReturn(STD_OK); + FRAM_Initialize_Expect(); + SYSM_Initialize_ExpectAndReturn(STD_OK); + FTSK_InitializeUserCodeEngine(); +} + +void testFTSK_RunUserCodeEngine(void) { + DATA_Task_Expect(); + SYSM_CheckNotifications_Expect(); + FTSK_RunUserCodeEngine(); +} + +void testFTSK_InitializeUserCodePreCyclicTasks(void) { + SYS_SetStateRequest_ExpectAndReturn(SYS_STATE_INITIALIZATION_REQUEST, STD_NOT_OK); + PEX_Initialize_Expect(); + PEX_SetPinDirectionOutput_Expect(PEX_PORT_EXPANDER3, PEX_PORT_0_PIN_0); + PEX_SetPin_Expect(PEX_PORT_EXPANDER3, PEX_PORT_0_PIN_0); + + CONT_Initialize_Expect(); + SPS_Initialize_Expect(); + MEAS_Initialize_ExpectAndReturn(STD_OK); + MRC_Initialize_ExpectAndReturn(STD_OK); + TEST_ASSERT_FAIL_ASSERT(FTSK_InitializeUserCodePreCyclicTasks()); + + /* pass assert */ + SYS_SetStateRequest_ExpectAndReturn(SYS_STATE_INITIALIZATION_REQUEST, STD_OK); + PEX_Initialize_Expect(); + PEX_SetPinDirectionOutput_Expect(PEX_PORT_EXPANDER3, PEX_PORT_0_PIN_0); + PEX_SetPin_Expect(PEX_PORT_EXPANDER3, PEX_PORT_0_PIN_0); + + CONT_Initialize_Expect(); + SPS_Initialize_Expect(); + MEAS_Initialize_ExpectAndReturn(STD_OK); + MRC_Initialize_ExpectAndReturn(STD_OK); + LED_SetToggleTime_Expect(LED_NORMAL_OPERATION_ON_OFF_TIME_ms); + FTSK_InitializeUserCodePreCyclicTasks(); +} + +void testFTSK_RunUserCodeCyclic1ms(void) { + OS_IncrementTimer_Expect(); + DIAG_UpdateFlags_Expect(); + CAN_ReadRxBuffer_Expect(); + FTSK_RunUserCodeCyclic1ms(); +} + +void testFTSK_RunUserCodeCyclic10ms(void) { +} + +void testFTSK_RunUserCodeCyclic100ms(void) { + BAL_Trigger_Expect(); + IMD_Trigger_ExpectAndReturn(STD_OK); + LED_Trigger_Expect(); + FTSK_RunUserCodeCyclic100ms(); + + for (uint8_t i = 0; i < 9u; i++) { + BAL_Trigger_Expect(); + IMD_Trigger_ExpectAndReturn(STD_OK); + LED_Trigger_Expect(); + FTSK_RunUserCodeCyclic100ms(); + } + SE_RunStateEstimations_Expect(); + BAL_Trigger_Expect(); + IMD_Trigger_ExpectAndReturn(STD_OK); + LED_Trigger_Expect(); + FTSK_RunUserCodeCyclic100ms(); +} + +void testFTSK_RunUserCodeCyclicAlgorithm100ms(void) { + ALGO_MainFunction_Expect(); + FTSK_RunUserCodeCyclicAlgorithm100ms(); +} + +void testFTSK_RunUserCodeI2c(void) { + PEX_Trigger_Expect(); + HTSEN_Trigger_Expect(); + RTC_Trigger_Expect(); + OS_GetTickCount_ExpectAndReturn(2u); + uint32_t currentTime = 2u; + OS_DelayTaskUntil_Expect(¤tTime, 2u); + FTSK_RunUserCodeI2c(); +} + +void testFTSK_RunUserCodeAfe(void) { + FTSK_RunUserCodeAfe(); } diff --git a/tests/unit/app/task/ftask/freertos/test_ftask_freertos.c b/tests/unit/app/task/ftask/freertos/test_ftask_freertos.c index 35bf9a00..031d50cd 100644 --- a/tests/unit/app/task/ftask/freertos/test_ftask_freertos.c +++ b/tests/unit/app/task/ftask/freertos/test_ftask_freertos.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_ftask_freertos.c * @author foxBMS Team * @date 2021-11-26 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/task/ftask/test_ftask.c b/tests/unit/app/task/ftask/test_ftask.c index e22922d9..dc41be26 100644 --- a/tests/unit/app/task/ftask/test_ftask.c +++ b/tests/unit/app/task/ftask/test_ftask.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_ftask.c * @author foxBMS Team * @date 2020-04-02 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/app/task/os/freertos/test_os_freertos.c b/tests/unit/app/task/os/freertos/test_os_freertos.c index e1a41a1c..7b540863 100644 --- a/tests/unit/app/task/os/freertos/test_os_freertos.c +++ b/tests/unit/app/task/os/freertos/test_os_freertos.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_os_freertos.c * @author foxBMS Team * @date 2021-11-26 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * @@ -69,7 +69,7 @@ TEST_SOURCE_FILE("os_freertos.c") TEST_INCLUDE_PATH("../../src/app/driver/can/cbs") -TEST_INCLUDE_PATH("../../src/app/driver/can/cbs/tx") +TEST_INCLUDE_PATH("../../src/app/driver/can/cbs/tx-async") TEST_INCLUDE_PATH("../../src/app/driver/config") TEST_INCLUDE_PATH("../../src/app/driver/rtc") TEST_INCLUDE_PATH("../../src/app/task/config") diff --git a/tests/unit/app/task/os/test_os.c b/tests/unit/app/task/os/test_os.c index aaccd204..f8aa8ba6 100644 --- a/tests/unit/app/task/os/test_os.c +++ b/tests/unit/app/task/os/test_os.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_os.c * @author foxBMS Team * @date 2020-03-13 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix OS * @@ -55,6 +55,7 @@ /*========== Includes =======================================================*/ #include "unity.h" #include "Mockcan.h" +#include "Mockcan_helper.h" #include "Mockftask.h" #include "Mockftask_cfg.h" #include "Mockportmacro.h" @@ -77,7 +78,7 @@ TEST_SOURCE_FILE("os_freertos.c") TEST_INCLUDE_PATH("../../src/app/driver/can") TEST_INCLUDE_PATH("../../src/app/driver/can/cbs") -TEST_INCLUDE_PATH("../../src/app/driver/can/cbs/tx") +TEST_INCLUDE_PATH("../../src/app/driver/can/cbs/tx-async") TEST_INCLUDE_PATH("../../src/app/driver/config") TEST_INCLUDE_PATH("../../src/app/driver/rtc") TEST_INCLUDE_PATH("../../src/app/task/config") diff --git a/tests/unit/axivion/axivion_config.json b/tests/unit/axivion/axivion_config.json index 8997ce65..0073f082 100644 --- a/tests/unit/axivion/axivion_config.json +++ b/tests/unit/axivion/axivion_config.json @@ -1,14 +1,15 @@ { - "_Layers": [ - "compiler_config.json", - "ci_config.json", - "../../axivion/rule_config_c.py", - "../../axivion/rule_config_c.json", - "../../axivion/rule_config_names.py", - "../../axivion/rule_config_names.json", - "../../axivion/rule_config_include_guard.py", - "../../axivion/rule_config_bad_tokens.json", - "../../axivion/rule_config_metric_lines.json", - "../../axivion/rule_config_addon.json" - ] + "_Layers": [ + "compiler_config.json", + "ci_config.json", + "unit_test_settings.json", + "../../axivion/rule_config_c.py", + "../../axivion/rule_config_c.json", + "../../axivion/rule_config_names.py", + "../../axivion/rule_config_names.json", + "../../axivion/rule_config_include_guard.py", + "../../axivion/rule_config_bad_tokens.json", + "../../axivion/rule_config_metric_lines.json", + "../../axivion/rule_config_addon.json" + ] } diff --git a/tests/unit/axivion/call_irlink.py b/tests/unit/axivion/call_irlink.py old mode 100644 new mode 100755 index 2858cd3c..bdaa0d32 --- a/tests/unit/axivion/call_irlink.py +++ b/tests/unit/axivion/call_irlink.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -44,8 +43,11 @@ import logging import shutil import subprocess +import sys from pathlib import Path +AXIVION_BUILD_DIR = Path("tests/unit/build/axivion") + def main(): """This script does this and that""" @@ -68,24 +70,43 @@ def main(): logging.basicConfig(level=logging.ERROR) irlink = shutil.which("irlink") + if not irlink: + sys.exit("Could not find 'irlink'.") - tests_dir = Path("tests/unit/build/axivion") + tests_dir = AXIVION_BUILD_DIR / "build/unit_test/test/runners" tests = [str(i) for i in tests_dir.glob("test_*.exe")] + logging.debug("Number of tests %s", len(tests)) + + splitted_tests = [] + + tmp = [] + for i in tests: + if len(" ".join(tmp + [i])) < 10000: + tmp.append(i) + else: + splitted_tests.append(tmp) + tmp = [] + + logging.debug("Number of splitted command lines: %s", len(splitted_tests)) + out_files = [ + f"{AXIVION_BUILD_DIR}/foxbms-unit-tests-{i}.ir" + for i in range(len(splitted_tests)) + ] + + for inputs, output in zip(splitted_tests, out_files): + cmd = [irlink, "--multi_binary", "-j"] + inputs + [output] + logging.debug(cmd) + with subprocess.Popen(cmd) as p: + p.communicate() + cmd = ( - [ - irlink, - "--multi_binary", - "-j", - ] - + tests - + [ - "tests/unit/build/axivion/foxbms-unit-tests.ir", - ] + [irlink, "--multi_binary", "-j"] + + out_files + + [f"{AXIVION_BUILD_DIR}/foxbms-unit-tests.ir"] ) logging.debug(cmd) - logging.debug(f"Number of tests {len(tests)}") with subprocess.Popen(cmd) as p: p.communicate() diff --git a/tests/unit/axivion/ci_config.json b/tests/unit/axivion/ci_config.json index a1961093..3f55d09c 100644 --- a/tests/unit/axivion/ci_config.json +++ b/tests/unit/axivion/ci_config.json @@ -1,80 +1,80 @@ { - "Analysis": { - "Analysis-GlobalOptions": { - "global_excludes": [ - "C:/ti/*", - "*build/*", - "*src/hal/*", - "*src/os/*", - "*tools/vendor/ceedling/*" - ] - }, - "SaveRFG": { - "_active": true, - "rfg_file": "../build/axivion/foxbms-unit-tests.elf.rfg" - } + "Analysis": { + "Analysis-GlobalOptions": { + "global_excludes": [ + "C:/ti/*", + "*build/*", + "*src/hal/*", + "*src/os/*", + "*tools/vendor/ceedling/*" + ] }, - "Project": { - "BuildSystemIntegration": { - "child_order": [ - "Command", - "Linking" - ] - }, - "Command": { - "_active": true, - "build_command": "$(builtin:AXIVION_CONFDIR)/../run_ut_gcc_build.bat configure build_axivion -v -c yes", - "clean_command": "$(builtin:AXIVION_CONFDIR)/../run_ut_gcc_build.bat configure clean_axivion -v -c yes", - "cwd": null - }, - "Git": { - "_active": true, - "sourceserver_gitdir": "$(env:sourceServerGitDir=)" - }, - "Linking": { - "_active": true, - "_copy_from": "Command", - "build_command": "$(builtin:AXIVION_CONFDIR)/link.bat" - }, - "Project-GlobalOptions": { - "ci_mode": { - "clean_after": false, - "clean_before": "!$(env:SKIP_PREBUILD_CLEAN=false)" - }, - "directory": "../../../", - "ir": "tests/unit/build/axivion/foxbms-unit-tests.ir", - "name": "$(env:analysisProjectName=foxbms-2)" - }, - "Shadow": { - "_active": true, - "include_globbings": [ - "*.[ch]" - ], - "rootpath": "build/unit_test", - "shadow_directory": "$(env:projectShadowRepo)" - } + "SaveRFG": { + "_active": true, + "rfg_file": "../build/axivion/foxbms-unit-tests.elf.rfg" + } + }, + "Project": { + "BuildSystemIntegration": { + "child_order": [ + "Command", + "Linking" + ] }, - "Results": { - "Dashboard": { - "dashboard_url": "$(env:AXIVION_DASHBOARD_URL=)" - }, - "Database": { - "ci_mode": { - "directory": "$(AXIVION_DATABASES_DIR=.)", - "filename": "$(env:databaseFileRemote=)" - } - }, - "JSONReport": { - "_active": true, - "filename": "foxbms_spa_report.json" - } + "Command": { + "_active": true, + "build_command": "$(builtin:AXIVION_CONFDIR)/../../../fox.bat waf --cwd tests/unit configure build_axivion -v -c yes", + "clean_command": "$(builtin:AXIVION_CONFDIR)/../../../fox.bat waf --cwd tests/unit configure clean_axivion -v -c yes", + "cwd": null }, - "_Format": "1.0", - "_Version": "7.5.2", - "_VersionNum": [ - 7, - 5, - 2, - 11578 - ] + "Git": { + "_active": true, + "sourceserver_gitdir": "$(env:sourceServerGitDir=)" + }, + "Linking": { + "_active": true, + "_copy_from": "Command", + "build_command": "py $(builtin:AXIVION_CONFDIR)/call_irlink.py" + }, + "Project-GlobalOptions": { + "ci_mode": { + "clean_after": false, + "clean_before": "!$(env:SKIP_PREBUILD_CLEAN=false)" + }, + "directory": "../../../", + "ir": "tests/unit/build/axivion/foxbms-unit-tests.ir", + "name": "$(env:analysisProjectName=foxbms-2)" + }, + "Shadow": { + "_active": true, + "include_globbings": [ + "*.[ch]" + ], + "rootpath": "build/unit_test", + "shadow_directory": "$(env:projectShadowRepo)" + } + }, + "Results": { + "Dashboard": { + "dashboard_url": "$(env:AXIVION_DASHBOARD_URL=)" + }, + "Database": { + "ci_mode": { + "directory": "$(AXIVION_DATABASES_DIR=.)", + "filename": "$(env:databaseFileRemote=)" + } + }, + "JSONReport": { + "_active": true, + "filename": "foxbms_spa_report.json" + } + }, + "_Format": "1.0", + "_Version": "7.5.2", + "_VersionNum": [ + 7, + 5, + 2, + 11578 + ] } diff --git a/tests/unit/axivion/compiler_config.json b/tests/unit/axivion/compiler_config.json index c9569d7b..26408964 100644 --- a/tests/unit/axivion/compiler_config.json +++ b/tests/unit/axivion/compiler_config.json @@ -1,817 +1,817 @@ { - "Project": { - "GNUToolchain": { - "_active": true, - "archiver": { - "native_archiver": "C:\\MinGW64\\x86_64-8.1.0-release-posix-seh-rt_v6-rev0\\mingw64\\bin\\ar.EXE" - }, - "language_c": { - "emulated_compiler": "GNU", - "emulated_compiler_version": 80100, - "language_version": "C18", - "native_compiler": "C:\\MinGW64\\x86_64-8.1.0-release-posix-seh-rt_v6-rev0\\mingw64\\bin\\gcc.EXE", - "preprocessing": { - "predefined_macros": { - "FAS_ASSERT_LEVEL": "2", - "GNU_COMPILER": "1", - "UNITY_INCLUDE_EXEC_TIME": "1", - "UNITY_UNIT_TEST": "1", - "WIN32": "1", - "WIN64": "1", - "WINNT": "1", - "_INTEGRAL_MAX_BITS": "64", - "_REENTRANT": "1", - "_WIN32": "1", - "_WIN64": "1", - "__ATOMIC_ACQUIRE": "2", - "__ATOMIC_ACQ_REL": "4", - "__ATOMIC_CONSUME": "1", - "__ATOMIC_HLE_ACQUIRE": "65536", - "__ATOMIC_HLE_RELEASE": "131072", - "__ATOMIC_RELAXED": "0", - "__ATOMIC_RELEASE": "3", - "__ATOMIC_SEQ_CST": "5", - "__BIGGEST_ALIGNMENT__": "16", - "__BYTE_ORDER__": "__ORDER_LITTLE_ENDIAN__", - "__CHAR_BIT__": "8", - "__DBL_DECIMAL_DIG__": "17", - "__DBL_DENORM_MIN__": "((double)4.94065645841246544176568792868221372e-324L)", - "__DBL_DIG__": "15", - "__DBL_EPSILON__": "((double)2.22044604925031308084726333618164062e-16L)", - "__DBL_HAS_DENORM__": "1", - "__DBL_HAS_INFINITY__": "1", - "__DBL_HAS_QUIET_NAN__": "1", - "__DBL_MANT_DIG__": "53", - "__DBL_MAX_10_EXP__": "308", - "__DBL_MAX_EXP__": "1024", - "__DBL_MAX__": "((double)1.79769313486231570814527423731704357e+308L)", - "__DBL_MIN_10_EXP__": "(-307)", - "__DBL_MIN_EXP__": "(-1021)", - "__DBL_MIN__": "((double)2.22507385850720138309023271733240406e-308L)", - "__DEC128_EPSILON__": "1E-33DL", - "__DEC128_MANT_DIG__": "34", - "__DEC128_MAX_EXP__": "6145", - "__DEC128_MAX__": "9.999999999999999999999999999999999E6144DL", - "__DEC128_MIN_EXP__": "(-6142)", - "__DEC128_MIN__": "1E-6143DL", - "__DEC128_SUBNORMAL_MIN__": "0.000000000000000000000000000000001E-6143DL", - "__DEC32_EPSILON__": "1E-6DF", - "__DEC32_MANT_DIG__": "7", - "__DEC32_MAX_EXP__": "97", - "__DEC32_MAX__": "9.999999E96DF", - "__DEC32_MIN_EXP__": "(-94)", - "__DEC32_MIN__": "1E-95DF", - "__DEC32_SUBNORMAL_MIN__": "0.000001E-95DF", - "__DEC64_EPSILON__": "1E-15DD", - "__DEC64_MANT_DIG__": "16", - "__DEC64_MAX_EXP__": "385", - "__DEC64_MAX__": "9.999999999999999E384DD", - "__DEC64_MIN_EXP__": "(-382)", - "__DEC64_MIN__": "1E-383DD", - "__DEC64_SUBNORMAL_MIN__": "0.000000000000001E-383DD", - "__DECIMAL_BID_FORMAT__": "1", - "__DECIMAL_DIG__": "21", - "__DEC_EVAL_METHOD__": "2", - "__FINITE_MATH_ONLY__": "0", - "__FLOAT_WORD_ORDER__": "__ORDER_LITTLE_ENDIAN__", - "__FLT128_DECIMAL_DIG__": "36", - "__FLT128_DENORM_MIN__": "6.47517511943802511092443895822764655e-4966F128", - "__FLT128_DIG__": "33", - "__FLT128_EPSILON__": "1.92592994438723585305597794258492732e-34F128", - "__FLT128_HAS_DENORM__": "1", - "__FLT128_HAS_INFINITY__": "1", - "__FLT128_HAS_QUIET_NAN__": "1", - "__FLT128_MANT_DIG__": "113", - "__FLT128_MAX_10_EXP__": "4932", - "__FLT128_MAX_EXP__": "16384", - "__FLT128_MAX__": "1.18973149535723176508575932662800702e+4932F128", - "__FLT128_MIN_10_EXP__": "(-4931)", - "__FLT128_MIN_EXP__": "(-16381)", - "__FLT128_MIN__": "3.36210314311209350626267781732175260e-4932F128", - "__FLT32X_DECIMAL_DIG__": "17", - "__FLT32X_DENORM_MIN__": "4.94065645841246544176568792868221372e-324F32x", - "__FLT32X_DIG__": "15", - "__FLT32X_EPSILON__": "2.22044604925031308084726333618164062e-16F32x", - "__FLT32X_HAS_DENORM__": "1", - "__FLT32X_HAS_INFINITY__": "1", - "__FLT32X_HAS_QUIET_NAN__": "1", - "__FLT32X_MANT_DIG__": "53", - "__FLT32X_MAX_10_EXP__": "308", - "__FLT32X_MAX_EXP__": "1024", - "__FLT32X_MAX__": "1.79769313486231570814527423731704357e+308F32x", - "__FLT32X_MIN_10_EXP__": "(-307)", - "__FLT32X_MIN_EXP__": "(-1021)", - "__FLT32X_MIN__": "2.22507385850720138309023271733240406e-308F32x", - "__FLT32_DECIMAL_DIG__": "9", - "__FLT32_DENORM_MIN__": "1.40129846432481707092372958328991613e-45F32", - "__FLT32_DIG__": "6", - "__FLT32_EPSILON__": "1.19209289550781250000000000000000000e-7F32", - "__FLT32_HAS_DENORM__": "1", - "__FLT32_HAS_INFINITY__": "1", - "__FLT32_HAS_QUIET_NAN__": "1", - "__FLT32_MANT_DIG__": "24", - "__FLT32_MAX_10_EXP__": "38", - "__FLT32_MAX_EXP__": "128", - "__FLT32_MAX__": "3.40282346638528859811704183484516925e+38F32", - "__FLT32_MIN_10_EXP__": "(-37)", - "__FLT32_MIN_EXP__": "(-125)", - "__FLT32_MIN__": "1.17549435082228750796873653722224568e-38F32", - "__FLT64X_DECIMAL_DIG__": "21", - "__FLT64X_DENORM_MIN__": "3.64519953188247460252840593361941982e-4951F64x", - "__FLT64X_DIG__": "18", - "__FLT64X_EPSILON__": "1.08420217248550443400745280086994171e-19F64x", - "__FLT64X_HAS_DENORM__": "1", - "__FLT64X_HAS_INFINITY__": "1", - "__FLT64X_HAS_QUIET_NAN__": "1", - "__FLT64X_MANT_DIG__": "64", - "__FLT64X_MAX_10_EXP__": "4932", - "__FLT64X_MAX_EXP__": "16384", - "__FLT64X_MAX__": "1.18973149535723176502126385303097021e+4932F64x", - "__FLT64X_MIN_10_EXP__": "(-4931)", - "__FLT64X_MIN_EXP__": "(-16381)", - "__FLT64X_MIN__": "3.36210314311209350626267781732175260e-4932F64x", - "__FLT64_DECIMAL_DIG__": "17", - "__FLT64_DENORM_MIN__": "4.94065645841246544176568792868221372e-324F64", - "__FLT64_DIG__": "15", - "__FLT64_EPSILON__": "2.22044604925031308084726333618164062e-16F64", - "__FLT64_HAS_DENORM__": "1", - "__FLT64_HAS_INFINITY__": "1", - "__FLT64_HAS_QUIET_NAN__": "1", - "__FLT64_MANT_DIG__": "53", - "__FLT64_MAX_10_EXP__": "308", - "__FLT64_MAX_EXP__": "1024", - "__FLT64_MAX__": "1.79769313486231570814527423731704357e+308F64", - "__FLT64_MIN_10_EXP__": "(-307)", - "__FLT64_MIN_EXP__": "(-1021)", - "__FLT64_MIN__": "2.22507385850720138309023271733240406e-308F64", - "__FLT_DECIMAL_DIG__": "9", - "__FLT_DENORM_MIN__": "1.40129846432481707092372958328991613e-45F", - "__FLT_DIG__": "6", - "__FLT_EPSILON__": "1.19209289550781250000000000000000000e-7F", - "__FLT_EVAL_METHOD_TS_18661_3__": "0", - "__FLT_EVAL_METHOD__": "0", - "__FLT_HAS_DENORM__": "1", - "__FLT_HAS_INFINITY__": "1", - "__FLT_HAS_QUIET_NAN__": "1", - "__FLT_MANT_DIG__": "24", - "__FLT_MAX_10_EXP__": "38", - "__FLT_MAX_EXP__": "128", - "__FLT_MAX__": "3.40282346638528859811704183484516925e+38F", - "__FLT_MIN_10_EXP__": "(-37)", - "__FLT_MIN_EXP__": "(-125)", - "__FLT_MIN__": "1.17549435082228750796873653722224568e-38F", - "__FLT_RADIX__": "2", - "__FXSR__": "1", - "__GCC_ASM_FLAG_OUTPUTS__": "1", - "__GCC_ATOMIC_BOOL_LOCK_FREE": "2", - "__GCC_ATOMIC_CHAR16_T_LOCK_FREE": "2", - "__GCC_ATOMIC_CHAR32_T_LOCK_FREE": "2", - "__GCC_ATOMIC_CHAR_LOCK_FREE": "2", - "__GCC_ATOMIC_INT_LOCK_FREE": "2", - "__GCC_ATOMIC_LLONG_LOCK_FREE": "2", - "__GCC_ATOMIC_LONG_LOCK_FREE": "2", - "__GCC_ATOMIC_POINTER_LOCK_FREE": "2", - "__GCC_ATOMIC_SHORT_LOCK_FREE": "2", - "__GCC_ATOMIC_TEST_AND_SET_TRUEVAL": "1", - "__GCC_ATOMIC_WCHAR_T_LOCK_FREE": "2", - "__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1": "1", - "__GCC_HAVE_SYNC_COMPARE_AND_SWAP_16": "1", - "__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2": "1", - "__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4": "1", - "__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8": "1", - "__GCC_IEC_559": "2", - "__GCC_IEC_559_COMPLEX": "2", - "__GXX_ABI_VERSION": "1012", - "__GXX_MERGED_TYPEINFO_NAMES": "0", - "__GXX_TYPEINFO_EQUALITY_INLINE": "0", - "__INT16_C(c)": "c", - "__INT16_MAX__": "0x7fff", - "__INT16_TYPE__": "short int", - "__INT32_C(c)": "c", - "__INT32_MAX__": "0x7fffffff", - "__INT32_TYPE__": "int", - "__INT64_C(c)": "c ## LL", - "__INT64_MAX__": "0x7fffffffffffffffLL", - "__INT64_TYPE__": "long long int", - "__INT8_C(c)": "c", - "__INT8_MAX__": "0x7f", - "__INT8_TYPE__": "signed char", - "__INTMAX_C(c)": "c ## LL", - "__INTMAX_MAX__": "0x7fffffffffffffffLL", - "__INTMAX_TYPE__": "long long int", - "__INTMAX_WIDTH__": "64", - "__INTPTR_MAX__": "0x7fffffffffffffffLL", - "__INTPTR_TYPE__": "long long int", - "__INTPTR_WIDTH__": "64", - "__INT_FAST16_MAX__": "0x7fff", - "__INT_FAST16_TYPE__": "short int", - "__INT_FAST16_WIDTH__": "16", - "__INT_FAST32_MAX__": "0x7fffffff", - "__INT_FAST32_TYPE__": "int", - "__INT_FAST32_WIDTH__": "32", - "__INT_FAST64_MAX__": "0x7fffffffffffffffLL", - "__INT_FAST64_TYPE__": "long long int", - "__INT_FAST64_WIDTH__": "64", - "__INT_FAST8_MAX__": "0x7f", - "__INT_FAST8_TYPE__": "signed char", - "__INT_FAST8_WIDTH__": "8", - "__INT_LEAST16_MAX__": "0x7fff", - "__INT_LEAST16_TYPE__": "short int", - "__INT_LEAST16_WIDTH__": "16", - "__INT_LEAST32_MAX__": "0x7fffffff", - "__INT_LEAST32_TYPE__": "int", - "__INT_LEAST32_WIDTH__": "32", - "__INT_LEAST64_MAX__": "0x7fffffffffffffffLL", - "__INT_LEAST64_TYPE__": "long long int", - "__INT_LEAST64_WIDTH__": "64", - "__INT_LEAST8_MAX__": "0x7f", - "__INT_LEAST8_TYPE__": "signed char", - "__INT_LEAST8_WIDTH__": "8", - "__INT_MAX__": "0x7fffffff", - "__INT_WIDTH__": "32", - "__LDBL_DECIMAL_DIG__": "21", - "__LDBL_DENORM_MIN__": "3.64519953188247460252840593361941982e-4951L", - "__LDBL_DIG__": "18", - "__LDBL_EPSILON__": "1.08420217248550443400745280086994171e-19L", - "__LDBL_HAS_DENORM__": "1", - "__LDBL_HAS_INFINITY__": "1", - "__LDBL_HAS_QUIET_NAN__": "1", - "__LDBL_MANT_DIG__": "64", - "__LDBL_MAX_10_EXP__": "4932", - "__LDBL_MAX_EXP__": "16384", - "__LDBL_MAX__": "1.18973149535723176502126385303097021e+4932L", - "__LDBL_MIN_10_EXP__": "(-4931)", - "__LDBL_MIN_EXP__": "(-16381)", - "__LDBL_MIN__": "3.36210314311209350626267781732175260e-4932L", - "__LONG_LONG_MAX__": "0x7fffffffffffffffLL", - "__LONG_LONG_WIDTH__": "64", - "__LONG_MAX__": "0x7fffffffL", - "__LONG_WIDTH__": "32", - "__MINGW32__": "1", - "__MINGW64__": "1", - "__MMX__": "1", - "__MSVCRT__": "1", - "__NO_INLINE__": "1", - "__ORDER_BIG_ENDIAN__": "4321", - "__ORDER_LITTLE_ENDIAN__": "1234", - "__ORDER_PDP_ENDIAN__": "3412", - "__PIC__": "1", - "__PRAGMA_REDEFINE_EXTNAME": "1", - "__PTRDIFF_MAX__": "0x7fffffffffffffffLL", - "__PTRDIFF_TYPE__": "long long int", - "__PTRDIFF_WIDTH__": "64", - "__REGISTER_PREFIX__": "", - "__SCHAR_MAX__": "0x7f", - "__SCHAR_WIDTH__": "8", - "__SEG_FS": "1", - "__SEG_GS": "1", - "__SEH__": "1", - "__SHRT_MAX__": "0x7fff", - "__SHRT_WIDTH__": "16", - "__SIG_ATOMIC_MAX__": "0x7fffffff", - "__SIG_ATOMIC_MIN__": "(-__SIG_ATOMIC_MAX__ - 1)", - "__SIG_ATOMIC_TYPE__": "int", - "__SIG_ATOMIC_WIDTH__": "32", - "__SIZEOF_DOUBLE__": "8", - "__SIZEOF_FLOAT128__": "16", - "__SIZEOF_FLOAT80__": "16", - "__SIZEOF_FLOAT__": "4", - "__SIZEOF_INT128__": "16", - "__SIZEOF_INT__": "4", - "__SIZEOF_LONG_DOUBLE__": "16", - "__SIZEOF_LONG_LONG__": "8", - "__SIZEOF_LONG__": "4", - "__SIZEOF_POINTER__": "8", - "__SIZEOF_PTRDIFF_T__": "8", - "__SIZEOF_SHORT__": "2", - "__SIZEOF_SIZE_T__": "8", - "__SIZEOF_WCHAR_T__": "2", - "__SIZEOF_WINT_T__": "2", - "__SIZE_MAX__": "0xffffffffffffffffULL", - "__SIZE_TYPE__": "long long unsigned int", - "__SIZE_WIDTH__": "64", - "__SSE2_MATH__": "1", - "__SSE2__": "1", - "__SSE3__": "1", - "__SSE_MATH__": "1", - "__SSE__": "1", - "__STDC_HOSTED__": "1", - "__STDC_UTF_16__": "1", - "__STDC_UTF_32__": "1", - "__UINT16_C(c)": "c", - "__UINT16_MAX__": "0xffff", - "__UINT16_TYPE__": "short unsigned int", - "__UINT32_C(c)": "c ## U", - "__UINT32_MAX__": "0xffffffffU", - "__UINT32_TYPE__": "unsigned int", - "__UINT64_C(c)": "c ## ULL", - "__UINT64_MAX__": "0xffffffffffffffffULL", - "__UINT64_TYPE__": "long long unsigned int", - "__UINT8_C(c)": "c", - "__UINT8_MAX__": "0xff", - "__UINT8_TYPE__": "unsigned char", - "__UINTMAX_C(c)": "c ## ULL", - "__UINTMAX_MAX__": "0xffffffffffffffffULL", - "__UINTMAX_TYPE__": "long long unsigned int", - "__UINTPTR_MAX__": "0xffffffffffffffffULL", - "__UINTPTR_TYPE__": "long long unsigned int", - "__UINT_FAST16_MAX__": "0xffff", - "__UINT_FAST16_TYPE__": "short unsigned int", - "__UINT_FAST32_MAX__": "0xffffffffU", - "__UINT_FAST32_TYPE__": "unsigned int", - "__UINT_FAST64_MAX__": "0xffffffffffffffffULL", - "__UINT_FAST64_TYPE__": "long long unsigned int", - "__UINT_FAST8_MAX__": "0xff", - "__UINT_FAST8_TYPE__": "unsigned char", - "__UINT_LEAST16_MAX__": "0xffff", - "__UINT_LEAST16_TYPE__": "short unsigned int", - "__UINT_LEAST32_MAX__": "0xffffffffU", - "__UINT_LEAST32_TYPE__": "unsigned int", - "__UINT_LEAST64_MAX__": "0xffffffffffffffffULL", - "__UINT_LEAST64_TYPE__": "long long unsigned int", - "__UINT_LEAST8_MAX__": "0xff", - "__UINT_LEAST8_TYPE__": "unsigned char", - "__USER_LABEL_PREFIX__": "", - "__WCHAR_MAX__": "0xffff", - "__WCHAR_MIN__": "0", - "__WCHAR_TYPE__": "short unsigned int", - "__WCHAR_WIDTH__": "16", - "__WIN32": "1", - "__WIN32__": "1", - "__WIN64": "1", - "__WIN64__": "1", - "__WINNT": "1", - "__WINNT__": "1", - "__WINT_MAX__": "0xffff", - "__WINT_MIN__": "0", - "__WINT_TYPE__": "short unsigned int", - "__WINT_WIDTH__": "16", - "__amd64": "1", - "__amd64__": "1", - "__cdecl": "__attribute__((__cdecl__))", - "__code_model_medium__": "1", - "__declspec(x)": "__attribute__((x))", - "__fastcall": "__attribute__((__fastcall__))", - "__nocona": "1", - "__nocona__": "1", - "__pic__": "1", - "__stdcall": "__attribute__((__stdcall__))", - "__thiscall": "__attribute__((__thiscall__))", - "__tune_core2__": "1", - "__x86_64": "1", - "__x86_64__": "1", - "_cdecl": "__attribute__((__cdecl__))", - "_fastcall": "__attribute__((__fastcall__))", - "_stdcall": "__attribute__((__stdcall__))", - "_thiscall": "__attribute__((__thiscall__))" - }, - "sys_include_envvar": null, - "sys_include_path": [ - "C:/MinGW64/x86_64-8.1.0-release-posix-seh-rt_v6-rev0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include", - "C:/MinGW64/x86_64-8.1.0-release-posix-seh-rt_v6-rev0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include-fixed", - "C:/MinGW64/x86_64-8.1.0-release-posix-seh-rt_v6-rev0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/include" - ] - } - }, - "language_c.command.#": "C:\\MinGW64\\x86_64-8.1.0-release-posix-seh-rt_v6-rev0\\mingw64\\bin\\gcc.EXE -DGNU_COMPILER -DUNITY_UNIT_TEST -DUNITY_INCLUDE_EXEC_TIME -DFAS_ASSERT_LEVEL=2", - "language_c.info.#": "Using built-in specs.\nCOLLECT_GCC=C:\\MinGW64\\x86_64-8.1.0-release-posix-seh-rt_v6-rev0\\mingw64\\bin\\gcc.EXE\nCOLLECT_LTO_WRAPPER=C:/MinGW64/x86_64-8.1.0-release-posix-seh-rt_v6-rev0/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/8.1.0/lto-wrapper.exe\nTarget: x86_64-w64-mingw32\nConfigured with: ../../../src/gcc-8.1.0/configure --host=x86_64-w64-mingw32 --build=x86_64-w64-mingw32 --target=x86_64-w64-mingw32 --prefix=/mingw64 --with-sysroot=/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64 --enable-shared --enable-static --disable-multilib --enable-languages=c,c++,fortran,lto --enable-libstdcxx-time=yes --enable-threads=posix --enable-libgomp --enable-libatomic --enable-lto --enable-graphite --enable-checking=release --enable-fully-dynamic-string --enable-version-specific-runtime-libs --disable-libstdcxx-pch --disable-libstdcxx-debug --enable-bootstrap --disable-rpath --disable-win32-registry --disable-nls --disable-werror --disable-symvers --with-gnu-as --with-gnu-ld --with-arch=nocona --with-tune=core2 --with-libiconv --with-system-zlib --with-gmp=/c/mingw810/prerequisites/x86_64-w64-mingw32-static --with-mpfr=/c/mingw810/prerequisites/x86_64-w64-mingw32-static --with-mpc=/c/mingw810/prerequisites/x86_64-w64-mingw32-static --with-isl=/c/mingw810/prerequisites/x86_64-w64-mingw32-static --with-pkgversion='x86_64-posix-seh-rev0, Built by MinGW-W64 project' --with-bugurl=https://sourceforge.net/projects/mingw-w64 CFLAGS='-O2 -pipe -fno-ident -I/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64/opt/include -I/c/mingw810/prerequisites/x86_64-zlib-static/include -I/c/mingw810/prerequisites/x86_64-w64-mingw32-static/include' CXXFLAGS='-O2 -pipe -fno-ident -I/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64/opt/include -I/c/mingw810/prerequisites/x86_64-zlib-static/include -I/c/mingw810/prerequisites/x86_64-w64-mingw32-static/include' CPPFLAGS=' -I/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64/opt/include -I/c/mingw810/prerequisites/x86_64-zlib-static/include -I/c/mingw810/prerequisites/x86_64-w64-mingw32-static/include' LDFLAGS='-pipe -fno-ident -L/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64/opt/lib -L/c/mingw810/prerequisites/x86_64-zlib-static/lib -L/c/mingw810/prerequisites/x86_64-w64-mingw32-static/lib '\nThread model: posix\ngcc version 8.1.0 (x86_64-posix-seh-rev0, Built by MinGW-W64 project) \n", - "language_cxx": { - "emulated_compiler": "GNU", - "emulated_compiler_version": 80100, - "language_version": "Cpp14", - "native_compiler": "C:\\MinGW64\\x86_64-8.1.0-release-posix-seh-rt_v6-rev0\\mingw64\\bin\\g++.EXE", - "preprocessing": { - "predefined_macros": { - "FAS_ASSERT_LEVEL": "2", - "GNU_COMPILER": "1", - "UNITY_INCLUDE_EXEC_TIME": "1", - "UNITY_UNIT_TEST": "1", - "WIN32": "1", - "WIN64": "1", - "WINNT": "1", - "_INTEGRAL_MAX_BITS": "64", - "_REENTRANT": "1", - "_WIN32": "1", - "_WIN64": "1", - "__ATOMIC_ACQUIRE": "2", - "__ATOMIC_ACQ_REL": "4", - "__ATOMIC_CONSUME": "1", - "__ATOMIC_HLE_ACQUIRE": "65536", - "__ATOMIC_HLE_RELEASE": "131072", - "__ATOMIC_RELAXED": "0", - "__ATOMIC_RELEASE": "3", - "__ATOMIC_SEQ_CST": "5", - "__BIGGEST_ALIGNMENT__": "16", - "__BYTE_ORDER__": "__ORDER_LITTLE_ENDIAN__", - "__CHAR_BIT__": "8", - "__DBL_DECIMAL_DIG__": "17", - "__DBL_DENORM_MIN__": "double(4.94065645841246544176568792868221372e-324L)", - "__DBL_DIG__": "15", - "__DBL_EPSILON__": "double(2.22044604925031308084726333618164062e-16L)", - "__DBL_HAS_DENORM__": "1", - "__DBL_HAS_INFINITY__": "1", - "__DBL_HAS_QUIET_NAN__": "1", - "__DBL_MANT_DIG__": "53", - "__DBL_MAX_10_EXP__": "308", - "__DBL_MAX_EXP__": "1024", - "__DBL_MAX__": "double(1.79769313486231570814527423731704357e+308L)", - "__DBL_MIN_10_EXP__": "(-307)", - "__DBL_MIN_EXP__": "(-1021)", - "__DBL_MIN__": "double(2.22507385850720138309023271733240406e-308L)", - "__DEC128_EPSILON__": "1E-33DL", - "__DEC128_MANT_DIG__": "34", - "__DEC128_MAX_EXP__": "6145", - "__DEC128_MAX__": "9.999999999999999999999999999999999E6144DL", - "__DEC128_MIN_EXP__": "(-6142)", - "__DEC128_MIN__": "1E-6143DL", - "__DEC128_SUBNORMAL_MIN__": "0.000000000000000000000000000000001E-6143DL", - "__DEC32_EPSILON__": "1E-6DF", - "__DEC32_MANT_DIG__": "7", - "__DEC32_MAX_EXP__": "97", - "__DEC32_MAX__": "9.999999E96DF", - "__DEC32_MIN_EXP__": "(-94)", - "__DEC32_MIN__": "1E-95DF", - "__DEC32_SUBNORMAL_MIN__": "0.000001E-95DF", - "__DEC64_EPSILON__": "1E-15DD", - "__DEC64_MANT_DIG__": "16", - "__DEC64_MAX_EXP__": "385", - "__DEC64_MAX__": "9.999999999999999E384DD", - "__DEC64_MIN_EXP__": "(-382)", - "__DEC64_MIN__": "1E-383DD", - "__DEC64_SUBNORMAL_MIN__": "0.000000000000001E-383DD", - "__DECIMAL_BID_FORMAT__": "1", - "__DECIMAL_DIG__": "21", - "__DEC_EVAL_METHOD__": "2", - "__DEPRECATED": "1", - "__FINITE_MATH_ONLY__": "0", - "__FLOAT_WORD_ORDER__": "__ORDER_LITTLE_ENDIAN__", - "__FLT128_DECIMAL_DIG__": "36", - "__FLT128_DENORM_MIN__": "6.47517511943802511092443895822764655e-4966F128", - "__FLT128_DIG__": "33", - "__FLT128_EPSILON__": "1.92592994438723585305597794258492732e-34F128", - "__FLT128_HAS_DENORM__": "1", - "__FLT128_HAS_INFINITY__": "1", - "__FLT128_HAS_QUIET_NAN__": "1", - "__FLT128_MANT_DIG__": "113", - "__FLT128_MAX_10_EXP__": "4932", - "__FLT128_MAX_EXP__": "16384", - "__FLT128_MAX__": "1.18973149535723176508575932662800702e+4932F128", - "__FLT128_MIN_10_EXP__": "(-4931)", - "__FLT128_MIN_EXP__": "(-16381)", - "__FLT128_MIN__": "3.36210314311209350626267781732175260e-4932F128", - "__FLT32X_DECIMAL_DIG__": "17", - "__FLT32X_DENORM_MIN__": "4.94065645841246544176568792868221372e-324F32x", - "__FLT32X_DIG__": "15", - "__FLT32X_EPSILON__": "2.22044604925031308084726333618164062e-16F32x", - "__FLT32X_HAS_DENORM__": "1", - "__FLT32X_HAS_INFINITY__": "1", - "__FLT32X_HAS_QUIET_NAN__": "1", - "__FLT32X_MANT_DIG__": "53", - "__FLT32X_MAX_10_EXP__": "308", - "__FLT32X_MAX_EXP__": "1024", - "__FLT32X_MAX__": "1.79769313486231570814527423731704357e+308F32x", - "__FLT32X_MIN_10_EXP__": "(-307)", - "__FLT32X_MIN_EXP__": "(-1021)", - "__FLT32X_MIN__": "2.22507385850720138309023271733240406e-308F32x", - "__FLT32_DECIMAL_DIG__": "9", - "__FLT32_DENORM_MIN__": "1.40129846432481707092372958328991613e-45F32", - "__FLT32_DIG__": "6", - "__FLT32_EPSILON__": "1.19209289550781250000000000000000000e-7F32", - "__FLT32_HAS_DENORM__": "1", - "__FLT32_HAS_INFINITY__": "1", - "__FLT32_HAS_QUIET_NAN__": "1", - "__FLT32_MANT_DIG__": "24", - "__FLT32_MAX_10_EXP__": "38", - "__FLT32_MAX_EXP__": "128", - "__FLT32_MAX__": "3.40282346638528859811704183484516925e+38F32", - "__FLT32_MIN_10_EXP__": "(-37)", - "__FLT32_MIN_EXP__": "(-125)", - "__FLT32_MIN__": "1.17549435082228750796873653722224568e-38F32", - "__FLT64X_DECIMAL_DIG__": "21", - "__FLT64X_DENORM_MIN__": "3.64519953188247460252840593361941982e-4951F64x", - "__FLT64X_DIG__": "18", - "__FLT64X_EPSILON__": "1.08420217248550443400745280086994171e-19F64x", - "__FLT64X_HAS_DENORM__": "1", - "__FLT64X_HAS_INFINITY__": "1", - "__FLT64X_HAS_QUIET_NAN__": "1", - "__FLT64X_MANT_DIG__": "64", - "__FLT64X_MAX_10_EXP__": "4932", - "__FLT64X_MAX_EXP__": "16384", - "__FLT64X_MAX__": "1.18973149535723176502126385303097021e+4932F64x", - "__FLT64X_MIN_10_EXP__": "(-4931)", - "__FLT64X_MIN_EXP__": "(-16381)", - "__FLT64X_MIN__": "3.36210314311209350626267781732175260e-4932F64x", - "__FLT64_DECIMAL_DIG__": "17", - "__FLT64_DENORM_MIN__": "4.94065645841246544176568792868221372e-324F64", - "__FLT64_DIG__": "15", - "__FLT64_EPSILON__": "2.22044604925031308084726333618164062e-16F64", - "__FLT64_HAS_DENORM__": "1", - "__FLT64_HAS_INFINITY__": "1", - "__FLT64_HAS_QUIET_NAN__": "1", - "__FLT64_MANT_DIG__": "53", - "__FLT64_MAX_10_EXP__": "308", - "__FLT64_MAX_EXP__": "1024", - "__FLT64_MAX__": "1.79769313486231570814527423731704357e+308F64", - "__FLT64_MIN_10_EXP__": "(-307)", - "__FLT64_MIN_EXP__": "(-1021)", - "__FLT64_MIN__": "2.22507385850720138309023271733240406e-308F64", - "__FLT_DECIMAL_DIG__": "9", - "__FLT_DENORM_MIN__": "1.40129846432481707092372958328991613e-45F", - "__FLT_DIG__": "6", - "__FLT_EPSILON__": "1.19209289550781250000000000000000000e-7F", - "__FLT_EVAL_METHOD_TS_18661_3__": "0", - "__FLT_EVAL_METHOD__": "0", - "__FLT_HAS_DENORM__": "1", - "__FLT_HAS_INFINITY__": "1", - "__FLT_HAS_QUIET_NAN__": "1", - "__FLT_MANT_DIG__": "24", - "__FLT_MAX_10_EXP__": "38", - "__FLT_MAX_EXP__": "128", - "__FLT_MAX__": "3.40282346638528859811704183484516925e+38F", - "__FLT_MIN_10_EXP__": "(-37)", - "__FLT_MIN_EXP__": "(-125)", - "__FLT_MIN__": "1.17549435082228750796873653722224568e-38F", - "__FLT_RADIX__": "2", - "__FXSR__": "1", - "__GCC_ASM_FLAG_OUTPUTS__": "1", - "__GCC_ATOMIC_BOOL_LOCK_FREE": "2", - "__GCC_ATOMIC_CHAR16_T_LOCK_FREE": "2", - "__GCC_ATOMIC_CHAR32_T_LOCK_FREE": "2", - "__GCC_ATOMIC_CHAR_LOCK_FREE": "2", - "__GCC_ATOMIC_INT_LOCK_FREE": "2", - "__GCC_ATOMIC_LLONG_LOCK_FREE": "2", - "__GCC_ATOMIC_LONG_LOCK_FREE": "2", - "__GCC_ATOMIC_POINTER_LOCK_FREE": "2", - "__GCC_ATOMIC_SHORT_LOCK_FREE": "2", - "__GCC_ATOMIC_TEST_AND_SET_TRUEVAL": "1", - "__GCC_ATOMIC_WCHAR_T_LOCK_FREE": "2", - "__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1": "1", - "__GCC_HAVE_SYNC_COMPARE_AND_SWAP_16": "1", - "__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2": "1", - "__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4": "1", - "__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8": "1", - "__GCC_IEC_559": "2", - "__GCC_IEC_559_COMPLEX": "2", - "__GLIBCXX_BITSIZE_INT_N_0": "128", - "__GLIBCXX_TYPE_INT_N_0": "__int128", - "__GXX_ABI_VERSION": "1012", - "__GXX_MERGED_TYPEINFO_NAMES": "0", - "__GXX_TYPEINFO_EQUALITY_INLINE": "0", - "__GXX_WEAK__": "1", - "__INT16_C(c)": "c", - "__INT16_MAX__": "0x7fff", - "__INT16_TYPE__": "short int", - "__INT32_C(c)": "c", - "__INT32_MAX__": "0x7fffffff", - "__INT32_TYPE__": "int", - "__INT64_C(c)": "c ## LL", - "__INT64_MAX__": "0x7fffffffffffffffLL", - "__INT64_TYPE__": "long long int", - "__INT8_C(c)": "c", - "__INT8_MAX__": "0x7f", - "__INT8_TYPE__": "signed char", - "__INTMAX_C(c)": "c ## LL", - "__INTMAX_MAX__": "0x7fffffffffffffffLL", - "__INTMAX_TYPE__": "long long int", - "__INTMAX_WIDTH__": "64", - "__INTPTR_MAX__": "0x7fffffffffffffffLL", - "__INTPTR_TYPE__": "long long int", - "__INTPTR_WIDTH__": "64", - "__INT_FAST16_MAX__": "0x7fff", - "__INT_FAST16_TYPE__": "short int", - "__INT_FAST16_WIDTH__": "16", - "__INT_FAST32_MAX__": "0x7fffffff", - "__INT_FAST32_TYPE__": "int", - "__INT_FAST32_WIDTH__": "32", - "__INT_FAST64_MAX__": "0x7fffffffffffffffLL", - "__INT_FAST64_TYPE__": "long long int", - "__INT_FAST64_WIDTH__": "64", - "__INT_FAST8_MAX__": "0x7f", - "__INT_FAST8_TYPE__": "signed char", - "__INT_FAST8_WIDTH__": "8", - "__INT_LEAST16_MAX__": "0x7fff", - "__INT_LEAST16_TYPE__": "short int", - "__INT_LEAST16_WIDTH__": "16", - "__INT_LEAST32_MAX__": "0x7fffffff", - "__INT_LEAST32_TYPE__": "int", - "__INT_LEAST32_WIDTH__": "32", - "__INT_LEAST64_MAX__": "0x7fffffffffffffffLL", - "__INT_LEAST64_TYPE__": "long long int", - "__INT_LEAST64_WIDTH__": "64", - "__INT_LEAST8_MAX__": "0x7f", - "__INT_LEAST8_TYPE__": "signed char", - "__INT_LEAST8_WIDTH__": "8", - "__INT_MAX__": "0x7fffffff", - "__INT_WIDTH__": "32", - "__LDBL_DECIMAL_DIG__": "21", - "__LDBL_DENORM_MIN__": "3.64519953188247460252840593361941982e-4951L", - "__LDBL_DIG__": "18", - "__LDBL_EPSILON__": "1.08420217248550443400745280086994171e-19L", - "__LDBL_HAS_DENORM__": "1", - "__LDBL_HAS_INFINITY__": "1", - "__LDBL_HAS_QUIET_NAN__": "1", - "__LDBL_MANT_DIG__": "64", - "__LDBL_MAX_10_EXP__": "4932", - "__LDBL_MAX_EXP__": "16384", - "__LDBL_MAX__": "1.18973149535723176502126385303097021e+4932L", - "__LDBL_MIN_10_EXP__": "(-4931)", - "__LDBL_MIN_EXP__": "(-16381)", - "__LDBL_MIN__": "3.36210314311209350626267781732175260e-4932L", - "__LONG_LONG_MAX__": "0x7fffffffffffffffLL", - "__LONG_LONG_WIDTH__": "64", - "__LONG_MAX__": "0x7fffffffL", - "__LONG_WIDTH__": "32", - "__MINGW32__": "1", - "__MINGW64__": "1", - "__MMX__": "1", - "__MSVCRT__": "1", - "__NO_INLINE__": "1", - "__ORDER_BIG_ENDIAN__": "4321", - "__ORDER_LITTLE_ENDIAN__": "1234", - "__ORDER_PDP_ENDIAN__": "3412", - "__PIC__": "1", - "__PRAGMA_REDEFINE_EXTNAME": "1", - "__PTRDIFF_MAX__": "0x7fffffffffffffffLL", - "__PTRDIFF_TYPE__": "long long int", - "__PTRDIFF_WIDTH__": "64", - "__REGISTER_PREFIX__": "", - "__SCHAR_MAX__": "0x7f", - "__SCHAR_WIDTH__": "8", - "__SEG_FS": "1", - "__SEG_GS": "1", - "__SEH__": "1", - "__SHRT_MAX__": "0x7fff", - "__SHRT_WIDTH__": "16", - "__SIG_ATOMIC_MAX__": "0x7fffffff", - "__SIG_ATOMIC_MIN__": "(-__SIG_ATOMIC_MAX__ - 1)", - "__SIG_ATOMIC_TYPE__": "int", - "__SIG_ATOMIC_WIDTH__": "32", - "__SIZEOF_DOUBLE__": "8", - "__SIZEOF_FLOAT128__": "16", - "__SIZEOF_FLOAT80__": "16", - "__SIZEOF_FLOAT__": "4", - "__SIZEOF_INT128__": "16", - "__SIZEOF_INT__": "4", - "__SIZEOF_LONG_DOUBLE__": "16", - "__SIZEOF_LONG_LONG__": "8", - "__SIZEOF_LONG__": "4", - "__SIZEOF_POINTER__": "8", - "__SIZEOF_PTRDIFF_T__": "8", - "__SIZEOF_SHORT__": "2", - "__SIZEOF_SIZE_T__": "8", - "__SIZEOF_WCHAR_T__": "2", - "__SIZEOF_WINT_T__": "2", - "__SIZE_MAX__": "0xffffffffffffffffULL", - "__SIZE_TYPE__": "long long unsigned int", - "__SIZE_WIDTH__": "64", - "__SSE2_MATH__": "1", - "__SSE2__": "1", - "__SSE3__": "1", - "__SSE_MATH__": "1", - "__SSE__": "1", - "__STDC_HOSTED__": "1", - "__STDC_UTF_16__": "1", - "__STDC_UTF_32__": "1", - "__UINT16_C(c)": "c", - "__UINT16_MAX__": "0xffff", - "__UINT16_TYPE__": "short unsigned int", - "__UINT32_C(c)": "c ## U", - "__UINT32_MAX__": "0xffffffffU", - "__UINT32_TYPE__": "unsigned int", - "__UINT64_C(c)": "c ## ULL", - "__UINT64_MAX__": "0xffffffffffffffffULL", - "__UINT64_TYPE__": "long long unsigned int", - "__UINT8_C(c)": "c", - "__UINT8_MAX__": "0xff", - "__UINT8_TYPE__": "unsigned char", - "__UINTMAX_C(c)": "c ## ULL", - "__UINTMAX_MAX__": "0xffffffffffffffffULL", - "__UINTMAX_TYPE__": "long long unsigned int", - "__UINTPTR_MAX__": "0xffffffffffffffffULL", - "__UINTPTR_TYPE__": "long long unsigned int", - "__UINT_FAST16_MAX__": "0xffff", - "__UINT_FAST16_TYPE__": "short unsigned int", - "__UINT_FAST32_MAX__": "0xffffffffU", - "__UINT_FAST32_TYPE__": "unsigned int", - "__UINT_FAST64_MAX__": "0xffffffffffffffffULL", - "__UINT_FAST64_TYPE__": "long long unsigned int", - "__UINT_FAST8_MAX__": "0xff", - "__UINT_FAST8_TYPE__": "unsigned char", - "__UINT_LEAST16_MAX__": "0xffff", - "__UINT_LEAST16_TYPE__": "short unsigned int", - "__UINT_LEAST32_MAX__": "0xffffffffU", - "__UINT_LEAST32_TYPE__": "unsigned int", - "__UINT_LEAST64_MAX__": "0xffffffffffffffffULL", - "__UINT_LEAST64_TYPE__": "long long unsigned int", - "__UINT_LEAST8_MAX__": "0xff", - "__UINT_LEAST8_TYPE__": "unsigned char", - "__USER_LABEL_PREFIX__": "", - "__WCHAR_MAX__": "0xffff", - "__WCHAR_MIN__": "0", - "__WCHAR_TYPE__": "short unsigned int", - "__WCHAR_UNSIGNED__": "1", - "__WCHAR_WIDTH__": "16", - "__WIN32": "1", - "__WIN32__": "1", - "__WIN64": "1", - "__WIN64__": "1", - "__WINNT": "1", - "__WINNT__": "1", - "__WINT_MAX__": "0xffff", - "__WINT_MIN__": "0", - "__WINT_TYPE__": "short unsigned int", - "__WINT_WIDTH__": "16", - "__amd64": "1", - "__amd64__": "1", - "__cdecl": "__attribute__((__cdecl__))", - "__code_model_medium__": "1", - "__declspec(x)": "__attribute__((x))", - "__fastcall": "__attribute__((__fastcall__))", - "__nocona": "1", - "__nocona__": "1", - "__pic__": "1", - "__stdcall": "__attribute__((__stdcall__))", - "__thiscall": "__attribute__((__thiscall__))", - "__tune_core2__": "1", - "__x86_64": "1", - "__x86_64__": "1", - "_cdecl": "__attribute__((__cdecl__))", - "_fastcall": "__attribute__((__fastcall__))", - "_stdcall": "__attribute__((__stdcall__))", - "_thiscall": "__attribute__((__thiscall__))" - }, - "sys_include_envvar": null, - "sys_include_path": [ - "C:/MinGW64/x86_64-8.1.0-release-posix-seh-rt_v6-rev0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++", - "C:/MinGW64/x86_64-8.1.0-release-posix-seh-rt_v6-rev0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/x86_64-w64-mingw32", - "C:/MinGW64/x86_64-8.1.0-release-posix-seh-rt_v6-rev0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/backward", - "C:/MinGW64/x86_64-8.1.0-release-posix-seh-rt_v6-rev0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include", - "C:/MinGW64/x86_64-8.1.0-release-posix-seh-rt_v6-rev0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include-fixed", - "C:/MinGW64/x86_64-8.1.0-release-posix-seh-rt_v6-rev0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/include" - ] - } - }, - "language_cxx.command.#": "C:\\MinGW64\\x86_64-8.1.0-release-posix-seh-rt_v6-rev0\\mingw64\\bin\\g++.EXE -DGNU_COMPILER -DUNITY_UNIT_TEST -DUNITY_INCLUDE_EXEC_TIME -DFAS_ASSERT_LEVEL=2", - "language_cxx.info.#": "Using built-in specs.\nCOLLECT_GCC=C:\\MinGW64\\x86_64-8.1.0-release-posix-seh-rt_v6-rev0\\mingw64\\bin\\g++.EXE\nCOLLECT_LTO_WRAPPER=C:/MinGW64/x86_64-8.1.0-release-posix-seh-rt_v6-rev0/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/8.1.0/lto-wrapper.exe\nTarget: x86_64-w64-mingw32\nConfigured with: ../../../src/gcc-8.1.0/configure --host=x86_64-w64-mingw32 --build=x86_64-w64-mingw32 --target=x86_64-w64-mingw32 --prefix=/mingw64 --with-sysroot=/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64 --enable-shared --enable-static --disable-multilib --enable-languages=c,c++,fortran,lto --enable-libstdcxx-time=yes --enable-threads=posix --enable-libgomp --enable-libatomic --enable-lto --enable-graphite --enable-checking=release --enable-fully-dynamic-string --enable-version-specific-runtime-libs --disable-libstdcxx-pch --disable-libstdcxx-debug --enable-bootstrap --disable-rpath --disable-win32-registry --disable-nls --disable-werror --disable-symvers --with-gnu-as --with-gnu-ld --with-arch=nocona --with-tune=core2 --with-libiconv --with-system-zlib --with-gmp=/c/mingw810/prerequisites/x86_64-w64-mingw32-static --with-mpfr=/c/mingw810/prerequisites/x86_64-w64-mingw32-static --with-mpc=/c/mingw810/prerequisites/x86_64-w64-mingw32-static --with-isl=/c/mingw810/prerequisites/x86_64-w64-mingw32-static --with-pkgversion='x86_64-posix-seh-rev0, Built by MinGW-W64 project' --with-bugurl=https://sourceforge.net/projects/mingw-w64 CFLAGS='-O2 -pipe -fno-ident -I/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64/opt/include -I/c/mingw810/prerequisites/x86_64-zlib-static/include -I/c/mingw810/prerequisites/x86_64-w64-mingw32-static/include' CXXFLAGS='-O2 -pipe -fno-ident -I/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64/opt/include -I/c/mingw810/prerequisites/x86_64-zlib-static/include -I/c/mingw810/prerequisites/x86_64-w64-mingw32-static/include' CPPFLAGS=' -I/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64/opt/include -I/c/mingw810/prerequisites/x86_64-zlib-static/include -I/c/mingw810/prerequisites/x86_64-w64-mingw32-static/include' LDFLAGS='-pipe -fno-ident -L/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64/opt/lib -L/c/mingw810/prerequisites/x86_64-zlib-static/lib -L/c/mingw810/prerequisites/x86_64-w64-mingw32-static/lib '\nThread model: posix\ngcc version 8.1.0 (x86_64-posix-seh-rev0, Built by MinGW-W64 project) \n", - "linker": { - "library_path": [ - "C:/MinGW64/x86_64-8.1.0-release-posix-seh-rt_v6-rev0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/", - "C:/MinGW64/x86_64-8.1.0-release-posix-seh-rt_v6-rev0/mingw64/bin/../lib/gcc/", - "C:/MinGW64/x86_64-8.1.0-release-posix-seh-rt_v6-rev0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/lib/../lib/", - "C:/MinGW64/x86_64-8.1.0-release-posix-seh-rt_v6-rev0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../lib/", - "C:/MinGW64/x86_64-8.1.0-release-posix-seh-rt_v6-rev0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/lib/", - "C:/MinGW64/x86_64-8.1.0-release-posix-seh-rt_v6-rev0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../" - ] - }, - "types": { - "char16_t_type": "unsigned short", - "char32_t_type": "unsigned int", - "char_bits": 8, - "double_type": { - "alignof": 8, - "sizeof": 8 - }, - "float_type": { - "alignof": 4, - "sizeof": 4 - }, - "int_type": { - "alignof": 4, - "sizeof": 4 - }, - "long_double_type": { - "alignof": 16, - "sizeof": 16 - }, - "long_long_type": { - "alignof": 8, - "sizeof": 8 - }, - "long_type": { - "alignof": 4, - "sizeof": 4 - }, - "pointer_type": { - "alignof": 8, - "sizeof": 8 - }, - "ptrdiff_t_type": "signed long long", - "short_type": { - "alignof": 2, - "sizeof": 2 - }, - "size_t_type": "unsigned long long", - "wchar_t_type": "unsigned short", - "wint_t_type": "unsigned short" - } + "Project": { + "GNUToolchain": { + "_active": true, + "archiver": { + "native_archiver": "C:\\MinGW64\\x86_64-8.1.0-release-posix-seh-rt_v6-rev0\\mingw64\\bin\\ar.EXE" + }, + "language_c": { + "emulated_compiler": "GNU", + "emulated_compiler_version": 80100, + "language_version": "C18", + "native_compiler": "C:\\MinGW64\\x86_64-8.1.0-release-posix-seh-rt_v6-rev0\\mingw64\\bin\\gcc.EXE", + "preprocessing": { + "predefined_macros": { + "FAS_ASSERT_LEVEL": "2", + "GNU_COMPILER": "1", + "UNITY_INCLUDE_EXEC_TIME": "1", + "UNITY_UNIT_TEST": "1", + "WIN32": "1", + "WIN64": "1", + "WINNT": "1", + "_INTEGRAL_MAX_BITS": "64", + "_REENTRANT": "1", + "_WIN32": "1", + "_WIN64": "1", + "__ATOMIC_ACQUIRE": "2", + "__ATOMIC_ACQ_REL": "4", + "__ATOMIC_CONSUME": "1", + "__ATOMIC_HLE_ACQUIRE": "65536", + "__ATOMIC_HLE_RELEASE": "131072", + "__ATOMIC_RELAXED": "0", + "__ATOMIC_RELEASE": "3", + "__ATOMIC_SEQ_CST": "5", + "__BIGGEST_ALIGNMENT__": "16", + "__BYTE_ORDER__": "__ORDER_LITTLE_ENDIAN__", + "__CHAR_BIT__": "8", + "__DBL_DECIMAL_DIG__": "17", + "__DBL_DENORM_MIN__": "((double)4.94065645841246544176568792868221372e-324L)", + "__DBL_DIG__": "15", + "__DBL_EPSILON__": "((double)2.22044604925031308084726333618164062e-16L)", + "__DBL_HAS_DENORM__": "1", + "__DBL_HAS_INFINITY__": "1", + "__DBL_HAS_QUIET_NAN__": "1", + "__DBL_MANT_DIG__": "53", + "__DBL_MAX_10_EXP__": "308", + "__DBL_MAX_EXP__": "1024", + "__DBL_MAX__": "((double)1.79769313486231570814527423731704357e+308L)", + "__DBL_MIN_10_EXP__": "(-307)", + "__DBL_MIN_EXP__": "(-1021)", + "__DBL_MIN__": "((double)2.22507385850720138309023271733240406e-308L)", + "__DEC128_EPSILON__": "1E-33DL", + "__DEC128_MANT_DIG__": "34", + "__DEC128_MAX_EXP__": "6145", + "__DEC128_MAX__": "9.999999999999999999999999999999999E6144DL", + "__DEC128_MIN_EXP__": "(-6142)", + "__DEC128_MIN__": "1E-6143DL", + "__DEC128_SUBNORMAL_MIN__": "0.000000000000000000000000000000001E-6143DL", + "__DEC32_EPSILON__": "1E-6DF", + "__DEC32_MANT_DIG__": "7", + "__DEC32_MAX_EXP__": "97", + "__DEC32_MAX__": "9.999999E96DF", + "__DEC32_MIN_EXP__": "(-94)", + "__DEC32_MIN__": "1E-95DF", + "__DEC32_SUBNORMAL_MIN__": "0.000001E-95DF", + "__DEC64_EPSILON__": "1E-15DD", + "__DEC64_MANT_DIG__": "16", + "__DEC64_MAX_EXP__": "385", + "__DEC64_MAX__": "9.999999999999999E384DD", + "__DEC64_MIN_EXP__": "(-382)", + "__DEC64_MIN__": "1E-383DD", + "__DEC64_SUBNORMAL_MIN__": "0.000000000000001E-383DD", + "__DECIMAL_BID_FORMAT__": "1", + "__DECIMAL_DIG__": "21", + "__DEC_EVAL_METHOD__": "2", + "__FINITE_MATH_ONLY__": "0", + "__FLOAT_WORD_ORDER__": "__ORDER_LITTLE_ENDIAN__", + "__FLT128_DECIMAL_DIG__": "36", + "__FLT128_DENORM_MIN__": "6.47517511943802511092443895822764655e-4966F128", + "__FLT128_DIG__": "33", + "__FLT128_EPSILON__": "1.92592994438723585305597794258492732e-34F128", + "__FLT128_HAS_DENORM__": "1", + "__FLT128_HAS_INFINITY__": "1", + "__FLT128_HAS_QUIET_NAN__": "1", + "__FLT128_MANT_DIG__": "113", + "__FLT128_MAX_10_EXP__": "4932", + "__FLT128_MAX_EXP__": "16384", + "__FLT128_MAX__": "1.18973149535723176508575932662800702e+4932F128", + "__FLT128_MIN_10_EXP__": "(-4931)", + "__FLT128_MIN_EXP__": "(-16381)", + "__FLT128_MIN__": "3.36210314311209350626267781732175260e-4932F128", + "__FLT32X_DECIMAL_DIG__": "17", + "__FLT32X_DENORM_MIN__": "4.94065645841246544176568792868221372e-324F32x", + "__FLT32X_DIG__": "15", + "__FLT32X_EPSILON__": "2.22044604925031308084726333618164062e-16F32x", + "__FLT32X_HAS_DENORM__": "1", + "__FLT32X_HAS_INFINITY__": "1", + "__FLT32X_HAS_QUIET_NAN__": "1", + "__FLT32X_MANT_DIG__": "53", + "__FLT32X_MAX_10_EXP__": "308", + "__FLT32X_MAX_EXP__": "1024", + "__FLT32X_MAX__": "1.79769313486231570814527423731704357e+308F32x", + "__FLT32X_MIN_10_EXP__": "(-307)", + "__FLT32X_MIN_EXP__": "(-1021)", + "__FLT32X_MIN__": "2.22507385850720138309023271733240406e-308F32x", + "__FLT32_DECIMAL_DIG__": "9", + "__FLT32_DENORM_MIN__": "1.40129846432481707092372958328991613e-45F32", + "__FLT32_DIG__": "6", + "__FLT32_EPSILON__": "1.19209289550781250000000000000000000e-7F32", + "__FLT32_HAS_DENORM__": "1", + "__FLT32_HAS_INFINITY__": "1", + "__FLT32_HAS_QUIET_NAN__": "1", + "__FLT32_MANT_DIG__": "24", + "__FLT32_MAX_10_EXP__": "38", + "__FLT32_MAX_EXP__": "128", + "__FLT32_MAX__": "3.40282346638528859811704183484516925e+38F32", + "__FLT32_MIN_10_EXP__": "(-37)", + "__FLT32_MIN_EXP__": "(-125)", + "__FLT32_MIN__": "1.17549435082228750796873653722224568e-38F32", + "__FLT64X_DECIMAL_DIG__": "21", + "__FLT64X_DENORM_MIN__": "3.64519953188247460252840593361941982e-4951F64x", + "__FLT64X_DIG__": "18", + "__FLT64X_EPSILON__": "1.08420217248550443400745280086994171e-19F64x", + "__FLT64X_HAS_DENORM__": "1", + "__FLT64X_HAS_INFINITY__": "1", + "__FLT64X_HAS_QUIET_NAN__": "1", + "__FLT64X_MANT_DIG__": "64", + "__FLT64X_MAX_10_EXP__": "4932", + "__FLT64X_MAX_EXP__": "16384", + "__FLT64X_MAX__": "1.18973149535723176502126385303097021e+4932F64x", + "__FLT64X_MIN_10_EXP__": "(-4931)", + "__FLT64X_MIN_EXP__": "(-16381)", + "__FLT64X_MIN__": "3.36210314311209350626267781732175260e-4932F64x", + "__FLT64_DECIMAL_DIG__": "17", + "__FLT64_DENORM_MIN__": "4.94065645841246544176568792868221372e-324F64", + "__FLT64_DIG__": "15", + "__FLT64_EPSILON__": "2.22044604925031308084726333618164062e-16F64", + "__FLT64_HAS_DENORM__": "1", + "__FLT64_HAS_INFINITY__": "1", + "__FLT64_HAS_QUIET_NAN__": "1", + "__FLT64_MANT_DIG__": "53", + "__FLT64_MAX_10_EXP__": "308", + "__FLT64_MAX_EXP__": "1024", + "__FLT64_MAX__": "1.79769313486231570814527423731704357e+308F64", + "__FLT64_MIN_10_EXP__": "(-307)", + "__FLT64_MIN_EXP__": "(-1021)", + "__FLT64_MIN__": "2.22507385850720138309023271733240406e-308F64", + "__FLT_DECIMAL_DIG__": "9", + "__FLT_DENORM_MIN__": "1.40129846432481707092372958328991613e-45F", + "__FLT_DIG__": "6", + "__FLT_EPSILON__": "1.19209289550781250000000000000000000e-7F", + "__FLT_EVAL_METHOD_TS_18661_3__": "0", + "__FLT_EVAL_METHOD__": "0", + "__FLT_HAS_DENORM__": "1", + "__FLT_HAS_INFINITY__": "1", + "__FLT_HAS_QUIET_NAN__": "1", + "__FLT_MANT_DIG__": "24", + "__FLT_MAX_10_EXP__": "38", + "__FLT_MAX_EXP__": "128", + "__FLT_MAX__": "3.40282346638528859811704183484516925e+38F", + "__FLT_MIN_10_EXP__": "(-37)", + "__FLT_MIN_EXP__": "(-125)", + "__FLT_MIN__": "1.17549435082228750796873653722224568e-38F", + "__FLT_RADIX__": "2", + "__FXSR__": "1", + "__GCC_ASM_FLAG_OUTPUTS__": "1", + "__GCC_ATOMIC_BOOL_LOCK_FREE": "2", + "__GCC_ATOMIC_CHAR16_T_LOCK_FREE": "2", + "__GCC_ATOMIC_CHAR32_T_LOCK_FREE": "2", + "__GCC_ATOMIC_CHAR_LOCK_FREE": "2", + "__GCC_ATOMIC_INT_LOCK_FREE": "2", + "__GCC_ATOMIC_LLONG_LOCK_FREE": "2", + "__GCC_ATOMIC_LONG_LOCK_FREE": "2", + "__GCC_ATOMIC_POINTER_LOCK_FREE": "2", + "__GCC_ATOMIC_SHORT_LOCK_FREE": "2", + "__GCC_ATOMIC_TEST_AND_SET_TRUEVAL": "1", + "__GCC_ATOMIC_WCHAR_T_LOCK_FREE": "2", + "__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1": "1", + "__GCC_HAVE_SYNC_COMPARE_AND_SWAP_16": "1", + "__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2": "1", + "__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4": "1", + "__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8": "1", + "__GCC_IEC_559": "2", + "__GCC_IEC_559_COMPLEX": "2", + "__GXX_ABI_VERSION": "1012", + "__GXX_MERGED_TYPEINFO_NAMES": "0", + "__GXX_TYPEINFO_EQUALITY_INLINE": "0", + "__INT16_C(c)": "c", + "__INT16_MAX__": "0x7fff", + "__INT16_TYPE__": "short int", + "__INT32_C(c)": "c", + "__INT32_MAX__": "0x7fffffff", + "__INT32_TYPE__": "int", + "__INT64_C(c)": "c ## LL", + "__INT64_MAX__": "0x7fffffffffffffffLL", + "__INT64_TYPE__": "long long int", + "__INT8_C(c)": "c", + "__INT8_MAX__": "0x7f", + "__INT8_TYPE__": "signed char", + "__INTMAX_C(c)": "c ## LL", + "__INTMAX_MAX__": "0x7fffffffffffffffLL", + "__INTMAX_TYPE__": "long long int", + "__INTMAX_WIDTH__": "64", + "__INTPTR_MAX__": "0x7fffffffffffffffLL", + "__INTPTR_TYPE__": "long long int", + "__INTPTR_WIDTH__": "64", + "__INT_FAST16_MAX__": "0x7fff", + "__INT_FAST16_TYPE__": "short int", + "__INT_FAST16_WIDTH__": "16", + "__INT_FAST32_MAX__": "0x7fffffff", + "__INT_FAST32_TYPE__": "int", + "__INT_FAST32_WIDTH__": "32", + "__INT_FAST64_MAX__": "0x7fffffffffffffffLL", + "__INT_FAST64_TYPE__": "long long int", + "__INT_FAST64_WIDTH__": "64", + "__INT_FAST8_MAX__": "0x7f", + "__INT_FAST8_TYPE__": "signed char", + "__INT_FAST8_WIDTH__": "8", + "__INT_LEAST16_MAX__": "0x7fff", + "__INT_LEAST16_TYPE__": "short int", + "__INT_LEAST16_WIDTH__": "16", + "__INT_LEAST32_MAX__": "0x7fffffff", + "__INT_LEAST32_TYPE__": "int", + "__INT_LEAST32_WIDTH__": "32", + "__INT_LEAST64_MAX__": "0x7fffffffffffffffLL", + "__INT_LEAST64_TYPE__": "long long int", + "__INT_LEAST64_WIDTH__": "64", + "__INT_LEAST8_MAX__": "0x7f", + "__INT_LEAST8_TYPE__": "signed char", + "__INT_LEAST8_WIDTH__": "8", + "__INT_MAX__": "0x7fffffff", + "__INT_WIDTH__": "32", + "__LDBL_DECIMAL_DIG__": "21", + "__LDBL_DENORM_MIN__": "3.64519953188247460252840593361941982e-4951L", + "__LDBL_DIG__": "18", + "__LDBL_EPSILON__": "1.08420217248550443400745280086994171e-19L", + "__LDBL_HAS_DENORM__": "1", + "__LDBL_HAS_INFINITY__": "1", + "__LDBL_HAS_QUIET_NAN__": "1", + "__LDBL_MANT_DIG__": "64", + "__LDBL_MAX_10_EXP__": "4932", + "__LDBL_MAX_EXP__": "16384", + "__LDBL_MAX__": "1.18973149535723176502126385303097021e+4932L", + "__LDBL_MIN_10_EXP__": "(-4931)", + "__LDBL_MIN_EXP__": "(-16381)", + "__LDBL_MIN__": "3.36210314311209350626267781732175260e-4932L", + "__LONG_LONG_MAX__": "0x7fffffffffffffffLL", + "__LONG_LONG_WIDTH__": "64", + "__LONG_MAX__": "0x7fffffffL", + "__LONG_WIDTH__": "32", + "__MINGW32__": "1", + "__MINGW64__": "1", + "__MMX__": "1", + "__MSVCRT__": "1", + "__NO_INLINE__": "1", + "__ORDER_BIG_ENDIAN__": "4321", + "__ORDER_LITTLE_ENDIAN__": "1234", + "__ORDER_PDP_ENDIAN__": "3412", + "__PIC__": "1", + "__PRAGMA_REDEFINE_EXTNAME": "1", + "__PTRDIFF_MAX__": "0x7fffffffffffffffLL", + "__PTRDIFF_TYPE__": "long long int", + "__PTRDIFF_WIDTH__": "64", + "__REGISTER_PREFIX__": "", + "__SCHAR_MAX__": "0x7f", + "__SCHAR_WIDTH__": "8", + "__SEG_FS": "1", + "__SEG_GS": "1", + "__SEH__": "1", + "__SHRT_MAX__": "0x7fff", + "__SHRT_WIDTH__": "16", + "__SIG_ATOMIC_MAX__": "0x7fffffff", + "__SIG_ATOMIC_MIN__": "(-__SIG_ATOMIC_MAX__ - 1)", + "__SIG_ATOMIC_TYPE__": "int", + "__SIG_ATOMIC_WIDTH__": "32", + "__SIZEOF_DOUBLE__": "8", + "__SIZEOF_FLOAT128__": "16", + "__SIZEOF_FLOAT80__": "16", + "__SIZEOF_FLOAT__": "4", + "__SIZEOF_INT128__": "16", + "__SIZEOF_INT__": "4", + "__SIZEOF_LONG_DOUBLE__": "16", + "__SIZEOF_LONG_LONG__": "8", + "__SIZEOF_LONG__": "4", + "__SIZEOF_POINTER__": "8", + "__SIZEOF_PTRDIFF_T__": "8", + "__SIZEOF_SHORT__": "2", + "__SIZEOF_SIZE_T__": "8", + "__SIZEOF_WCHAR_T__": "2", + "__SIZEOF_WINT_T__": "2", + "__SIZE_MAX__": "0xffffffffffffffffULL", + "__SIZE_TYPE__": "long long unsigned int", + "__SIZE_WIDTH__": "64", + "__SSE2_MATH__": "1", + "__SSE2__": "1", + "__SSE3__": "1", + "__SSE_MATH__": "1", + "__SSE__": "1", + "__STDC_HOSTED__": "1", + "__STDC_UTF_16__": "1", + "__STDC_UTF_32__": "1", + "__UINT16_C(c)": "c", + "__UINT16_MAX__": "0xffff", + "__UINT16_TYPE__": "short unsigned int", + "__UINT32_C(c)": "c ## U", + "__UINT32_MAX__": "0xffffffffU", + "__UINT32_TYPE__": "unsigned int", + "__UINT64_C(c)": "c ## ULL", + "__UINT64_MAX__": "0xffffffffffffffffULL", + "__UINT64_TYPE__": "long long unsigned int", + "__UINT8_C(c)": "c", + "__UINT8_MAX__": "0xff", + "__UINT8_TYPE__": "unsigned char", + "__UINTMAX_C(c)": "c ## ULL", + "__UINTMAX_MAX__": "0xffffffffffffffffULL", + "__UINTMAX_TYPE__": "long long unsigned int", + "__UINTPTR_MAX__": "0xffffffffffffffffULL", + "__UINTPTR_TYPE__": "long long unsigned int", + "__UINT_FAST16_MAX__": "0xffff", + "__UINT_FAST16_TYPE__": "short unsigned int", + "__UINT_FAST32_MAX__": "0xffffffffU", + "__UINT_FAST32_TYPE__": "unsigned int", + "__UINT_FAST64_MAX__": "0xffffffffffffffffULL", + "__UINT_FAST64_TYPE__": "long long unsigned int", + "__UINT_FAST8_MAX__": "0xff", + "__UINT_FAST8_TYPE__": "unsigned char", + "__UINT_LEAST16_MAX__": "0xffff", + "__UINT_LEAST16_TYPE__": "short unsigned int", + "__UINT_LEAST32_MAX__": "0xffffffffU", + "__UINT_LEAST32_TYPE__": "unsigned int", + "__UINT_LEAST64_MAX__": "0xffffffffffffffffULL", + "__UINT_LEAST64_TYPE__": "long long unsigned int", + "__UINT_LEAST8_MAX__": "0xff", + "__UINT_LEAST8_TYPE__": "unsigned char", + "__USER_LABEL_PREFIX__": "", + "__WCHAR_MAX__": "0xffff", + "__WCHAR_MIN__": "0", + "__WCHAR_TYPE__": "short unsigned int", + "__WCHAR_WIDTH__": "16", + "__WIN32": "1", + "__WIN32__": "1", + "__WIN64": "1", + "__WIN64__": "1", + "__WINNT": "1", + "__WINNT__": "1", + "__WINT_MAX__": "0xffff", + "__WINT_MIN__": "0", + "__WINT_TYPE__": "short unsigned int", + "__WINT_WIDTH__": "16", + "__amd64": "1", + "__amd64__": "1", + "__cdecl": "__attribute__((__cdecl__))", + "__code_model_medium__": "1", + "__declspec(x)": "__attribute__((x))", + "__fastcall": "__attribute__((__fastcall__))", + "__nocona": "1", + "__nocona__": "1", + "__pic__": "1", + "__stdcall": "__attribute__((__stdcall__))", + "__thiscall": "__attribute__((__thiscall__))", + "__tune_core2__": "1", + "__x86_64": "1", + "__x86_64__": "1", + "_cdecl": "__attribute__((__cdecl__))", + "_fastcall": "__attribute__((__fastcall__))", + "_stdcall": "__attribute__((__stdcall__))", + "_thiscall": "__attribute__((__thiscall__))" + }, + "sys_include_envvar": null, + "sys_include_path": [ + "C:/MinGW64/x86_64-8.1.0-release-posix-seh-rt_v6-rev0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include", + "C:/MinGW64/x86_64-8.1.0-release-posix-seh-rt_v6-rev0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include-fixed", + "C:/MinGW64/x86_64-8.1.0-release-posix-seh-rt_v6-rev0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/include" + ] } - }, - "_Format": "1.0", - "_Version": "7.5.2", - "_VersionNum": [ - 7, - 5, - 2, - 11578 - ] + }, + "language_c.command.#": "C:\\MinGW64\\x86_64-8.1.0-release-posix-seh-rt_v6-rev0\\mingw64\\bin\\gcc.EXE -DGNU_COMPILER -DUNITY_UNIT_TEST -DUNITY_INCLUDE_EXEC_TIME -DFAS_ASSERT_LEVEL=2", + "language_c.info.#": "Using built-in specs.\nCOLLECT_GCC=C:\\MinGW64\\x86_64-8.1.0-release-posix-seh-rt_v6-rev0\\mingw64\\bin\\gcc.EXE\nCOLLECT_LTO_WRAPPER=C:/MinGW64/x86_64-8.1.0-release-posix-seh-rt_v6-rev0/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/8.1.0/lto-wrapper.exe\nTarget: x86_64-w64-mingw32\nConfigured with: ../../../src/gcc-8.1.0/configure --host=x86_64-w64-mingw32 --build=x86_64-w64-mingw32 --target=x86_64-w64-mingw32 --prefix=/mingw64 --with-sysroot=/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64 --enable-shared --enable-static --disable-multilib --enable-languages=c,c++,fortran,lto --enable-libstdcxx-time=yes --enable-threads=posix --enable-libgomp --enable-libatomic --enable-lto --enable-graphite --enable-checking=release --enable-fully-dynamic-string --enable-version-specific-runtime-libs --disable-libstdcxx-pch --disable-libstdcxx-debug --enable-bootstrap --disable-rpath --disable-win32-registry --disable-nls --disable-werror --disable-symvers --with-gnu-as --with-gnu-ld --with-arch=nocona --with-tune=core2 --with-libiconv --with-system-zlib --with-gmp=/c/mingw810/prerequisites/x86_64-w64-mingw32-static --with-mpfr=/c/mingw810/prerequisites/x86_64-w64-mingw32-static --with-mpc=/c/mingw810/prerequisites/x86_64-w64-mingw32-static --with-isl=/c/mingw810/prerequisites/x86_64-w64-mingw32-static --with-pkgversion='x86_64-posix-seh-rev0, Built by MinGW-W64 project' --with-bugurl=https://sourceforge.net/projects/mingw-w64 CFLAGS='-O2 -pipe -fno-ident -I/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64/opt/include -I/c/mingw810/prerequisites/x86_64-zlib-static/include -I/c/mingw810/prerequisites/x86_64-w64-mingw32-static/include' CXXFLAGS='-O2 -pipe -fno-ident -I/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64/opt/include -I/c/mingw810/prerequisites/x86_64-zlib-static/include -I/c/mingw810/prerequisites/x86_64-w64-mingw32-static/include' CPPFLAGS=' -I/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64/opt/include -I/c/mingw810/prerequisites/x86_64-zlib-static/include -I/c/mingw810/prerequisites/x86_64-w64-mingw32-static/include' LDFLAGS='-pipe -fno-ident -L/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64/opt/lib -L/c/mingw810/prerequisites/x86_64-zlib-static/lib -L/c/mingw810/prerequisites/x86_64-w64-mingw32-static/lib '\nThread model: posix\ngcc version 8.1.0 (x86_64-posix-seh-rev0, Built by MinGW-W64 project) \n", + "language_cxx": { + "emulated_compiler": "GNU", + "emulated_compiler_version": 80100, + "language_version": "Cpp14", + "native_compiler": "C:\\MinGW64\\x86_64-8.1.0-release-posix-seh-rt_v6-rev0\\mingw64\\bin\\g++.EXE", + "preprocessing": { + "predefined_macros": { + "FAS_ASSERT_LEVEL": "2", + "GNU_COMPILER": "1", + "UNITY_INCLUDE_EXEC_TIME": "1", + "UNITY_UNIT_TEST": "1", + "WIN32": "1", + "WIN64": "1", + "WINNT": "1", + "_INTEGRAL_MAX_BITS": "64", + "_REENTRANT": "1", + "_WIN32": "1", + "_WIN64": "1", + "__ATOMIC_ACQUIRE": "2", + "__ATOMIC_ACQ_REL": "4", + "__ATOMIC_CONSUME": "1", + "__ATOMIC_HLE_ACQUIRE": "65536", + "__ATOMIC_HLE_RELEASE": "131072", + "__ATOMIC_RELAXED": "0", + "__ATOMIC_RELEASE": "3", + "__ATOMIC_SEQ_CST": "5", + "__BIGGEST_ALIGNMENT__": "16", + "__BYTE_ORDER__": "__ORDER_LITTLE_ENDIAN__", + "__CHAR_BIT__": "8", + "__DBL_DECIMAL_DIG__": "17", + "__DBL_DENORM_MIN__": "double(4.94065645841246544176568792868221372e-324L)", + "__DBL_DIG__": "15", + "__DBL_EPSILON__": "double(2.22044604925031308084726333618164062e-16L)", + "__DBL_HAS_DENORM__": "1", + "__DBL_HAS_INFINITY__": "1", + "__DBL_HAS_QUIET_NAN__": "1", + "__DBL_MANT_DIG__": "53", + "__DBL_MAX_10_EXP__": "308", + "__DBL_MAX_EXP__": "1024", + "__DBL_MAX__": "double(1.79769313486231570814527423731704357e+308L)", + "__DBL_MIN_10_EXP__": "(-307)", + "__DBL_MIN_EXP__": "(-1021)", + "__DBL_MIN__": "double(2.22507385850720138309023271733240406e-308L)", + "__DEC128_EPSILON__": "1E-33DL", + "__DEC128_MANT_DIG__": "34", + "__DEC128_MAX_EXP__": "6145", + "__DEC128_MAX__": "9.999999999999999999999999999999999E6144DL", + "__DEC128_MIN_EXP__": "(-6142)", + "__DEC128_MIN__": "1E-6143DL", + "__DEC128_SUBNORMAL_MIN__": "0.000000000000000000000000000000001E-6143DL", + "__DEC32_EPSILON__": "1E-6DF", + "__DEC32_MANT_DIG__": "7", + "__DEC32_MAX_EXP__": "97", + "__DEC32_MAX__": "9.999999E96DF", + "__DEC32_MIN_EXP__": "(-94)", + "__DEC32_MIN__": "1E-95DF", + "__DEC32_SUBNORMAL_MIN__": "0.000001E-95DF", + "__DEC64_EPSILON__": "1E-15DD", + "__DEC64_MANT_DIG__": "16", + "__DEC64_MAX_EXP__": "385", + "__DEC64_MAX__": "9.999999999999999E384DD", + "__DEC64_MIN_EXP__": "(-382)", + "__DEC64_MIN__": "1E-383DD", + "__DEC64_SUBNORMAL_MIN__": "0.000000000000001E-383DD", + "__DECIMAL_BID_FORMAT__": "1", + "__DECIMAL_DIG__": "21", + "__DEC_EVAL_METHOD__": "2", + "__DEPRECATED": "1", + "__FINITE_MATH_ONLY__": "0", + "__FLOAT_WORD_ORDER__": "__ORDER_LITTLE_ENDIAN__", + "__FLT128_DECIMAL_DIG__": "36", + "__FLT128_DENORM_MIN__": "6.47517511943802511092443895822764655e-4966F128", + "__FLT128_DIG__": "33", + "__FLT128_EPSILON__": "1.92592994438723585305597794258492732e-34F128", + "__FLT128_HAS_DENORM__": "1", + "__FLT128_HAS_INFINITY__": "1", + "__FLT128_HAS_QUIET_NAN__": "1", + "__FLT128_MANT_DIG__": "113", + "__FLT128_MAX_10_EXP__": "4932", + "__FLT128_MAX_EXP__": "16384", + "__FLT128_MAX__": "1.18973149535723176508575932662800702e+4932F128", + "__FLT128_MIN_10_EXP__": "(-4931)", + "__FLT128_MIN_EXP__": "(-16381)", + "__FLT128_MIN__": "3.36210314311209350626267781732175260e-4932F128", + "__FLT32X_DECIMAL_DIG__": "17", + "__FLT32X_DENORM_MIN__": "4.94065645841246544176568792868221372e-324F32x", + "__FLT32X_DIG__": "15", + "__FLT32X_EPSILON__": "2.22044604925031308084726333618164062e-16F32x", + "__FLT32X_HAS_DENORM__": "1", + "__FLT32X_HAS_INFINITY__": "1", + "__FLT32X_HAS_QUIET_NAN__": "1", + "__FLT32X_MANT_DIG__": "53", + "__FLT32X_MAX_10_EXP__": "308", + "__FLT32X_MAX_EXP__": "1024", + "__FLT32X_MAX__": "1.79769313486231570814527423731704357e+308F32x", + "__FLT32X_MIN_10_EXP__": "(-307)", + "__FLT32X_MIN_EXP__": "(-1021)", + "__FLT32X_MIN__": "2.22507385850720138309023271733240406e-308F32x", + "__FLT32_DECIMAL_DIG__": "9", + "__FLT32_DENORM_MIN__": "1.40129846432481707092372958328991613e-45F32", + "__FLT32_DIG__": "6", + "__FLT32_EPSILON__": "1.19209289550781250000000000000000000e-7F32", + "__FLT32_HAS_DENORM__": "1", + "__FLT32_HAS_INFINITY__": "1", + "__FLT32_HAS_QUIET_NAN__": "1", + "__FLT32_MANT_DIG__": "24", + "__FLT32_MAX_10_EXP__": "38", + "__FLT32_MAX_EXP__": "128", + "__FLT32_MAX__": "3.40282346638528859811704183484516925e+38F32", + "__FLT32_MIN_10_EXP__": "(-37)", + "__FLT32_MIN_EXP__": "(-125)", + "__FLT32_MIN__": "1.17549435082228750796873653722224568e-38F32", + "__FLT64X_DECIMAL_DIG__": "21", + "__FLT64X_DENORM_MIN__": "3.64519953188247460252840593361941982e-4951F64x", + "__FLT64X_DIG__": "18", + "__FLT64X_EPSILON__": "1.08420217248550443400745280086994171e-19F64x", + "__FLT64X_HAS_DENORM__": "1", + "__FLT64X_HAS_INFINITY__": "1", + "__FLT64X_HAS_QUIET_NAN__": "1", + "__FLT64X_MANT_DIG__": "64", + "__FLT64X_MAX_10_EXP__": "4932", + "__FLT64X_MAX_EXP__": "16384", + "__FLT64X_MAX__": "1.18973149535723176502126385303097021e+4932F64x", + "__FLT64X_MIN_10_EXP__": "(-4931)", + "__FLT64X_MIN_EXP__": "(-16381)", + "__FLT64X_MIN__": "3.36210314311209350626267781732175260e-4932F64x", + "__FLT64_DECIMAL_DIG__": "17", + "__FLT64_DENORM_MIN__": "4.94065645841246544176568792868221372e-324F64", + "__FLT64_DIG__": "15", + "__FLT64_EPSILON__": "2.22044604925031308084726333618164062e-16F64", + "__FLT64_HAS_DENORM__": "1", + "__FLT64_HAS_INFINITY__": "1", + "__FLT64_HAS_QUIET_NAN__": "1", + "__FLT64_MANT_DIG__": "53", + "__FLT64_MAX_10_EXP__": "308", + "__FLT64_MAX_EXP__": "1024", + "__FLT64_MAX__": "1.79769313486231570814527423731704357e+308F64", + "__FLT64_MIN_10_EXP__": "(-307)", + "__FLT64_MIN_EXP__": "(-1021)", + "__FLT64_MIN__": "2.22507385850720138309023271733240406e-308F64", + "__FLT_DECIMAL_DIG__": "9", + "__FLT_DENORM_MIN__": "1.40129846432481707092372958328991613e-45F", + "__FLT_DIG__": "6", + "__FLT_EPSILON__": "1.19209289550781250000000000000000000e-7F", + "__FLT_EVAL_METHOD_TS_18661_3__": "0", + "__FLT_EVAL_METHOD__": "0", + "__FLT_HAS_DENORM__": "1", + "__FLT_HAS_INFINITY__": "1", + "__FLT_HAS_QUIET_NAN__": "1", + "__FLT_MANT_DIG__": "24", + "__FLT_MAX_10_EXP__": "38", + "__FLT_MAX_EXP__": "128", + "__FLT_MAX__": "3.40282346638528859811704183484516925e+38F", + "__FLT_MIN_10_EXP__": "(-37)", + "__FLT_MIN_EXP__": "(-125)", + "__FLT_MIN__": "1.17549435082228750796873653722224568e-38F", + "__FLT_RADIX__": "2", + "__FXSR__": "1", + "__GCC_ASM_FLAG_OUTPUTS__": "1", + "__GCC_ATOMIC_BOOL_LOCK_FREE": "2", + "__GCC_ATOMIC_CHAR16_T_LOCK_FREE": "2", + "__GCC_ATOMIC_CHAR32_T_LOCK_FREE": "2", + "__GCC_ATOMIC_CHAR_LOCK_FREE": "2", + "__GCC_ATOMIC_INT_LOCK_FREE": "2", + "__GCC_ATOMIC_LLONG_LOCK_FREE": "2", + "__GCC_ATOMIC_LONG_LOCK_FREE": "2", + "__GCC_ATOMIC_POINTER_LOCK_FREE": "2", + "__GCC_ATOMIC_SHORT_LOCK_FREE": "2", + "__GCC_ATOMIC_TEST_AND_SET_TRUEVAL": "1", + "__GCC_ATOMIC_WCHAR_T_LOCK_FREE": "2", + "__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1": "1", + "__GCC_HAVE_SYNC_COMPARE_AND_SWAP_16": "1", + "__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2": "1", + "__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4": "1", + "__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8": "1", + "__GCC_IEC_559": "2", + "__GCC_IEC_559_COMPLEX": "2", + "__GLIBCXX_BITSIZE_INT_N_0": "128", + "__GLIBCXX_TYPE_INT_N_0": "__int128", + "__GXX_ABI_VERSION": "1012", + "__GXX_MERGED_TYPEINFO_NAMES": "0", + "__GXX_TYPEINFO_EQUALITY_INLINE": "0", + "__GXX_WEAK__": "1", + "__INT16_C(c)": "c", + "__INT16_MAX__": "0x7fff", + "__INT16_TYPE__": "short int", + "__INT32_C(c)": "c", + "__INT32_MAX__": "0x7fffffff", + "__INT32_TYPE__": "int", + "__INT64_C(c)": "c ## LL", + "__INT64_MAX__": "0x7fffffffffffffffLL", + "__INT64_TYPE__": "long long int", + "__INT8_C(c)": "c", + "__INT8_MAX__": "0x7f", + "__INT8_TYPE__": "signed char", + "__INTMAX_C(c)": "c ## LL", + "__INTMAX_MAX__": "0x7fffffffffffffffLL", + "__INTMAX_TYPE__": "long long int", + "__INTMAX_WIDTH__": "64", + "__INTPTR_MAX__": "0x7fffffffffffffffLL", + "__INTPTR_TYPE__": "long long int", + "__INTPTR_WIDTH__": "64", + "__INT_FAST16_MAX__": "0x7fff", + "__INT_FAST16_TYPE__": "short int", + "__INT_FAST16_WIDTH__": "16", + "__INT_FAST32_MAX__": "0x7fffffff", + "__INT_FAST32_TYPE__": "int", + "__INT_FAST32_WIDTH__": "32", + "__INT_FAST64_MAX__": "0x7fffffffffffffffLL", + "__INT_FAST64_TYPE__": "long long int", + "__INT_FAST64_WIDTH__": "64", + "__INT_FAST8_MAX__": "0x7f", + "__INT_FAST8_TYPE__": "signed char", + "__INT_FAST8_WIDTH__": "8", + "__INT_LEAST16_MAX__": "0x7fff", + "__INT_LEAST16_TYPE__": "short int", + "__INT_LEAST16_WIDTH__": "16", + "__INT_LEAST32_MAX__": "0x7fffffff", + "__INT_LEAST32_TYPE__": "int", + "__INT_LEAST32_WIDTH__": "32", + "__INT_LEAST64_MAX__": "0x7fffffffffffffffLL", + "__INT_LEAST64_TYPE__": "long long int", + "__INT_LEAST64_WIDTH__": "64", + "__INT_LEAST8_MAX__": "0x7f", + "__INT_LEAST8_TYPE__": "signed char", + "__INT_LEAST8_WIDTH__": "8", + "__INT_MAX__": "0x7fffffff", + "__INT_WIDTH__": "32", + "__LDBL_DECIMAL_DIG__": "21", + "__LDBL_DENORM_MIN__": "3.64519953188247460252840593361941982e-4951L", + "__LDBL_DIG__": "18", + "__LDBL_EPSILON__": "1.08420217248550443400745280086994171e-19L", + "__LDBL_HAS_DENORM__": "1", + "__LDBL_HAS_INFINITY__": "1", + "__LDBL_HAS_QUIET_NAN__": "1", + "__LDBL_MANT_DIG__": "64", + "__LDBL_MAX_10_EXP__": "4932", + "__LDBL_MAX_EXP__": "16384", + "__LDBL_MAX__": "1.18973149535723176502126385303097021e+4932L", + "__LDBL_MIN_10_EXP__": "(-4931)", + "__LDBL_MIN_EXP__": "(-16381)", + "__LDBL_MIN__": "3.36210314311209350626267781732175260e-4932L", + "__LONG_LONG_MAX__": "0x7fffffffffffffffLL", + "__LONG_LONG_WIDTH__": "64", + "__LONG_MAX__": "0x7fffffffL", + "__LONG_WIDTH__": "32", + "__MINGW32__": "1", + "__MINGW64__": "1", + "__MMX__": "1", + "__MSVCRT__": "1", + "__NO_INLINE__": "1", + "__ORDER_BIG_ENDIAN__": "4321", + "__ORDER_LITTLE_ENDIAN__": "1234", + "__ORDER_PDP_ENDIAN__": "3412", + "__PIC__": "1", + "__PRAGMA_REDEFINE_EXTNAME": "1", + "__PTRDIFF_MAX__": "0x7fffffffffffffffLL", + "__PTRDIFF_TYPE__": "long long int", + "__PTRDIFF_WIDTH__": "64", + "__REGISTER_PREFIX__": "", + "__SCHAR_MAX__": "0x7f", + "__SCHAR_WIDTH__": "8", + "__SEG_FS": "1", + "__SEG_GS": "1", + "__SEH__": "1", + "__SHRT_MAX__": "0x7fff", + "__SHRT_WIDTH__": "16", + "__SIG_ATOMIC_MAX__": "0x7fffffff", + "__SIG_ATOMIC_MIN__": "(-__SIG_ATOMIC_MAX__ - 1)", + "__SIG_ATOMIC_TYPE__": "int", + "__SIG_ATOMIC_WIDTH__": "32", + "__SIZEOF_DOUBLE__": "8", + "__SIZEOF_FLOAT128__": "16", + "__SIZEOF_FLOAT80__": "16", + "__SIZEOF_FLOAT__": "4", + "__SIZEOF_INT128__": "16", + "__SIZEOF_INT__": "4", + "__SIZEOF_LONG_DOUBLE__": "16", + "__SIZEOF_LONG_LONG__": "8", + "__SIZEOF_LONG__": "4", + "__SIZEOF_POINTER__": "8", + "__SIZEOF_PTRDIFF_T__": "8", + "__SIZEOF_SHORT__": "2", + "__SIZEOF_SIZE_T__": "8", + "__SIZEOF_WCHAR_T__": "2", + "__SIZEOF_WINT_T__": "2", + "__SIZE_MAX__": "0xffffffffffffffffULL", + "__SIZE_TYPE__": "long long unsigned int", + "__SIZE_WIDTH__": "64", + "__SSE2_MATH__": "1", + "__SSE2__": "1", + "__SSE3__": "1", + "__SSE_MATH__": "1", + "__SSE__": "1", + "__STDC_HOSTED__": "1", + "__STDC_UTF_16__": "1", + "__STDC_UTF_32__": "1", + "__UINT16_C(c)": "c", + "__UINT16_MAX__": "0xffff", + "__UINT16_TYPE__": "short unsigned int", + "__UINT32_C(c)": "c ## U", + "__UINT32_MAX__": "0xffffffffU", + "__UINT32_TYPE__": "unsigned int", + "__UINT64_C(c)": "c ## ULL", + "__UINT64_MAX__": "0xffffffffffffffffULL", + "__UINT64_TYPE__": "long long unsigned int", + "__UINT8_C(c)": "c", + "__UINT8_MAX__": "0xff", + "__UINT8_TYPE__": "unsigned char", + "__UINTMAX_C(c)": "c ## ULL", + "__UINTMAX_MAX__": "0xffffffffffffffffULL", + "__UINTMAX_TYPE__": "long long unsigned int", + "__UINTPTR_MAX__": "0xffffffffffffffffULL", + "__UINTPTR_TYPE__": "long long unsigned int", + "__UINT_FAST16_MAX__": "0xffff", + "__UINT_FAST16_TYPE__": "short unsigned int", + "__UINT_FAST32_MAX__": "0xffffffffU", + "__UINT_FAST32_TYPE__": "unsigned int", + "__UINT_FAST64_MAX__": "0xffffffffffffffffULL", + "__UINT_FAST64_TYPE__": "long long unsigned int", + "__UINT_FAST8_MAX__": "0xff", + "__UINT_FAST8_TYPE__": "unsigned char", + "__UINT_LEAST16_MAX__": "0xffff", + "__UINT_LEAST16_TYPE__": "short unsigned int", + "__UINT_LEAST32_MAX__": "0xffffffffU", + "__UINT_LEAST32_TYPE__": "unsigned int", + "__UINT_LEAST64_MAX__": "0xffffffffffffffffULL", + "__UINT_LEAST64_TYPE__": "long long unsigned int", + "__UINT_LEAST8_MAX__": "0xff", + "__UINT_LEAST8_TYPE__": "unsigned char", + "__USER_LABEL_PREFIX__": "", + "__WCHAR_MAX__": "0xffff", + "__WCHAR_MIN__": "0", + "__WCHAR_TYPE__": "short unsigned int", + "__WCHAR_UNSIGNED__": "1", + "__WCHAR_WIDTH__": "16", + "__WIN32": "1", + "__WIN32__": "1", + "__WIN64": "1", + "__WIN64__": "1", + "__WINNT": "1", + "__WINNT__": "1", + "__WINT_MAX__": "0xffff", + "__WINT_MIN__": "0", + "__WINT_TYPE__": "short unsigned int", + "__WINT_WIDTH__": "16", + "__amd64": "1", + "__amd64__": "1", + "__cdecl": "__attribute__((__cdecl__))", + "__code_model_medium__": "1", + "__declspec(x)": "__attribute__((x))", + "__fastcall": "__attribute__((__fastcall__))", + "__nocona": "1", + "__nocona__": "1", + "__pic__": "1", + "__stdcall": "__attribute__((__stdcall__))", + "__thiscall": "__attribute__((__thiscall__))", + "__tune_core2__": "1", + "__x86_64": "1", + "__x86_64__": "1", + "_cdecl": "__attribute__((__cdecl__))", + "_fastcall": "__attribute__((__fastcall__))", + "_stdcall": "__attribute__((__stdcall__))", + "_thiscall": "__attribute__((__thiscall__))" + }, + "sys_include_envvar": null, + "sys_include_path": [ + "C:/MinGW64/x86_64-8.1.0-release-posix-seh-rt_v6-rev0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++", + "C:/MinGW64/x86_64-8.1.0-release-posix-seh-rt_v6-rev0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/x86_64-w64-mingw32", + "C:/MinGW64/x86_64-8.1.0-release-posix-seh-rt_v6-rev0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/backward", + "C:/MinGW64/x86_64-8.1.0-release-posix-seh-rt_v6-rev0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include", + "C:/MinGW64/x86_64-8.1.0-release-posix-seh-rt_v6-rev0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include-fixed", + "C:/MinGW64/x86_64-8.1.0-release-posix-seh-rt_v6-rev0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/include" + ] + } + }, + "language_cxx.command.#": "C:\\MinGW64\\x86_64-8.1.0-release-posix-seh-rt_v6-rev0\\mingw64\\bin\\g++.EXE -DGNU_COMPILER -DUNITY_UNIT_TEST -DUNITY_INCLUDE_EXEC_TIME -DFAS_ASSERT_LEVEL=2", + "language_cxx.info.#": "Using built-in specs.\nCOLLECT_GCC=C:\\MinGW64\\x86_64-8.1.0-release-posix-seh-rt_v6-rev0\\mingw64\\bin\\g++.EXE\nCOLLECT_LTO_WRAPPER=C:/MinGW64/x86_64-8.1.0-release-posix-seh-rt_v6-rev0/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/8.1.0/lto-wrapper.exe\nTarget: x86_64-w64-mingw32\nConfigured with: ../../../src/gcc-8.1.0/configure --host=x86_64-w64-mingw32 --build=x86_64-w64-mingw32 --target=x86_64-w64-mingw32 --prefix=/mingw64 --with-sysroot=/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64 --enable-shared --enable-static --disable-multilib --enable-languages=c,c++,fortran,lto --enable-libstdcxx-time=yes --enable-threads=posix --enable-libgomp --enable-libatomic --enable-lto --enable-graphite --enable-checking=release --enable-fully-dynamic-string --enable-version-specific-runtime-libs --disable-libstdcxx-pch --disable-libstdcxx-debug --enable-bootstrap --disable-rpath --disable-win32-registry --disable-nls --disable-werror --disable-symvers --with-gnu-as --with-gnu-ld --with-arch=nocona --with-tune=core2 --with-libiconv --with-system-zlib --with-gmp=/c/mingw810/prerequisites/x86_64-w64-mingw32-static --with-mpfr=/c/mingw810/prerequisites/x86_64-w64-mingw32-static --with-mpc=/c/mingw810/prerequisites/x86_64-w64-mingw32-static --with-isl=/c/mingw810/prerequisites/x86_64-w64-mingw32-static --with-pkgversion='x86_64-posix-seh-rev0, Built by MinGW-W64 project' --with-bugurl=https://sourceforge.net/projects/mingw-w64 CFLAGS='-O2 -pipe -fno-ident -I/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64/opt/include -I/c/mingw810/prerequisites/x86_64-zlib-static/include -I/c/mingw810/prerequisites/x86_64-w64-mingw32-static/include' CXXFLAGS='-O2 -pipe -fno-ident -I/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64/opt/include -I/c/mingw810/prerequisites/x86_64-zlib-static/include -I/c/mingw810/prerequisites/x86_64-w64-mingw32-static/include' CPPFLAGS=' -I/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64/opt/include -I/c/mingw810/prerequisites/x86_64-zlib-static/include -I/c/mingw810/prerequisites/x86_64-w64-mingw32-static/include' LDFLAGS='-pipe -fno-ident -L/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64/opt/lib -L/c/mingw810/prerequisites/x86_64-zlib-static/lib -L/c/mingw810/prerequisites/x86_64-w64-mingw32-static/lib '\nThread model: posix\ngcc version 8.1.0 (x86_64-posix-seh-rev0, Built by MinGW-W64 project) \n", + "linker": { + "library_path": [ + "C:/MinGW64/x86_64-8.1.0-release-posix-seh-rt_v6-rev0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/", + "C:/MinGW64/x86_64-8.1.0-release-posix-seh-rt_v6-rev0/mingw64/bin/../lib/gcc/", + "C:/MinGW64/x86_64-8.1.0-release-posix-seh-rt_v6-rev0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/lib/../lib/", + "C:/MinGW64/x86_64-8.1.0-release-posix-seh-rt_v6-rev0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../lib/", + "C:/MinGW64/x86_64-8.1.0-release-posix-seh-rt_v6-rev0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/lib/", + "C:/MinGW64/x86_64-8.1.0-release-posix-seh-rt_v6-rev0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../" + ] + }, + "types": { + "char16_t_type": "unsigned short", + "char32_t_type": "unsigned int", + "char_bits": 8, + "double_type": { + "alignof": 8, + "sizeof": 8 + }, + "float_type": { + "alignof": 4, + "sizeof": 4 + }, + "int_type": { + "alignof": 4, + "sizeof": 4 + }, + "long_double_type": { + "alignof": 16, + "sizeof": 16 + }, + "long_long_type": { + "alignof": 8, + "sizeof": 8 + }, + "long_type": { + "alignof": 4, + "sizeof": 4 + }, + "pointer_type": { + "alignof": 8, + "sizeof": 8 + }, + "ptrdiff_t_type": "signed long long", + "short_type": { + "alignof": 2, + "sizeof": 2 + }, + "size_t_type": "unsigned long long", + "wchar_t_type": "unsigned short", + "wint_t_type": "unsigned short" + } + } + }, + "_Format": "1.0", + "_Version": "7.5.2", + "_VersionNum": [ + 7, + 5, + 2, + 11578 + ] } diff --git a/tests/unit/axivion/link.bat b/tests/unit/axivion/link.bat deleted file mode 100644 index b955b1ce..00000000 --- a/tests/unit/axivion/link.bat +++ /dev/null @@ -1,44 +0,0 @@ -@REM Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -@REM All rights reserved. -@REM -@REM SPDX-License-Identifier: BSD-3-Clause -@REM -@REM Redistribution and use in source and binary forms, with or without -@REM modification, are permitted provided that the following conditions are met: -@REM -@REM 1. Redistributions of source code must retain the above copyright notice, this -@REM list of conditions and the following disclaimer. -@REM -@REM 2. Redistributions in binary form must reproduce the above copyright notice, -@REM this list of conditions and the following disclaimer in the documentation -@REM and/or other materials provided with the distribution. -@REM -@REM 3. Neither the name of the copyright holder nor the names of its -@REM contributors may be used to endorse or promote products derived from -@REM this software without specific prior written permission. -@REM -@REM THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -@REM AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -@REM IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -@REM DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -@REM FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -@REM DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -@REM SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -@REM CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -@REM OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -@REM OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -@REM -@REM We kindly request you to use one or more of the following phrases to refer to -@REM foxBMS in your hardware, software, documentation or advertising materials: -@REM -@REM - "This product uses parts of foxBMS®" -@REM - "This product includes parts of foxBMS®" -@REM - "This product is derived from foxBMS®" - -@SETLOCAL EnableExtensions EnableDelayedExpansion - -@pushd %~dp0..\..\.. - -@tools\utils\cmd\run-python-script.bat %~dp0call_irlink.py %* - -@popd diff --git a/tests/unit/axivion/unit_test_settings.json b/tests/unit/axivion/unit_test_settings.json new file mode 100644 index 00000000..92051c7c --- /dev/null +++ b/tests/unit/axivion/unit_test_settings.json @@ -0,0 +1,62 @@ +{ + "Analysis": { + "CWE-Bad-Coding-Practices-562": { + "exclude_in_macros": { + "$(delta:+)": [ + "TEST_ASSERT_FAIL_ASSERT" + ] + } + }, + "CodingStyle-Naming.Function": { + "exceptions": { + "$(delta:+)": [ + "setUp", + "tearDown" + ] + } + }, + "CodingStyle-Naming.Macro": { + "excludes": { + "$(delta:+)": [ + "MC33775A.h" + ] + } + }, + "Generic-DoxygenCommentInHeader": { + "excludes": { + "$(delta:+)": [ + "MC33775A.h" + ] + } + }, + "MisraC2012-1.2": { + "excludes": { + "$(delta:+)": [ + "test_ignore_list.h" + ] + } + }, + "MisraC2012-21.4": { + "exclude_in_macros": { + "$(delta:+)": [ + "TEST_ASSERT_FAIL_ASSERT" + ] + } + }, + "MisraC2012Directive-1.1": { + "excludes": { + "$(delta:+)": [ + "test_ignore_list.h" + ] + } + } + }, + "_Format": "1.0", + "_Version": "7.5.2", + "_VersionNum": [ + 7, + 5, + 2, + 11578 + ] +} diff --git a/tests/unit/build.json b/tests/unit/build.json index f50d8411..a1859fac 100644 --- a/tests/unit/build.json +++ b/tests/unit/build.json @@ -1,3062 +1,7585 @@ { - "src/app/application/algorithm/algorithm.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_algorithm", - "src/app/application/algorithm", - "src/app/application/algorithm/config", - "src/app/application/config", - "src/app/driver/mcu", - "src/app/engine/config", - "src/app/engine/database", - "src/app/main/include", - "src/app/main/include/config", - "src/app/task/os", - "src/os/freertos/include", - "src/os/freertos/portable/ccs/arm_cortex-r5" - ], - "sources": [ - "build/unit_test/test/mocks/test_algorithm/Mockalgorithm_cfg.c", - "build/unit_test/test/mocks/test_algorithm/Mockos.c", - "build/unit_test/test/mocks/test_algorithm/Mocktest_algorithm_stubs.c", - "src/app/application/algorithm/algorithm.c", - "tests/unit/app/application/algorithm/test_algorithm.c", - "build/unit_test/test/runners/test_algorithm_runner.c" - ] - }, - "src/app/application/algorithm/config/algorithm_cfg.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_algorithm_cfg", - "src/app/application/algorithm/config", - "src/app/application/algorithm/moving_average", - "src/app/application/config", - "src/app/driver/mcu", - "src/app/engine/config", - "src/app/engine/database", - "src/app/main/include", - "src/app/main/include/config", - "src/app/task/os", - "src/os/freertos/include", - "src/os/freertos/portable/ccs/arm_cortex-r5" - ], - "sources": [ - "build/unit_test/test/mocks/test_algorithm_cfg/Mockdatabase.c", - "build/unit_test/test/mocks/test_algorithm_cfg/Mockmoving_average.c", - "build/unit_test/test/mocks/test_algorithm_cfg/Mockos.c", - "src/app/application/algorithm/config/algorithm_cfg.c", - "tests/unit/app/application/algorithm/config/test_algorithm_cfg.c", - "build/unit_test/test/runners/test_algorithm_cfg_runner.c" - ] - }, - "src/app/application/algorithm/moving_average/moving_average.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_moving_average", - "src/app/application/algorithm/config", - "src/app/application/algorithm/moving_average", - "src/app/application/config", - "src/app/driver/mcu", - "src/app/engine/config", - "src/app/engine/database", - "src/app/main/include", - "src/app/main/include/config", - "src/app/task/os", - "src/os/freertos/include", - "src/os/freertos/portable/ccs/arm_cortex-r5" - ], - "sources": [ - "build/unit_test/test/mocks/test_moving_average/Mockdatabase.c", - "build/unit_test/test/mocks/test_moving_average/Mockos.c", - "src/app/application/algorithm/moving_average/moving_average.c", - "tests/unit/app/application/algorithm/moving_average/test_moving_average.c", - "build/unit_test/test/runners/test_moving_average_runner.c" - ] - }, - "src/app/application/algorithm/state_estimation/soc/counting/soc_counting.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_soc_counting", - "src/app/application/algorithm/state_estimation", - "src/app/application/algorithm/state_estimation/soc/counting", - "src/app/application/bms", - "src/app/driver/config", - "src/app/driver/contactor", - "src/app/driver/foxmath", - "src/app/driver/fram", - "src/app/driver/sps", - "src/app/task/config", - "src/app/application/config", - "src/app/driver/mcu", - "src/app/engine/config", - "src/app/engine/database", - "src/app/main/include", - "src/app/main/include/config", - "src/app/task/os", - "src/os/freertos/include", - "src/os/freertos/portable/ccs/arm_cortex-r5" - ], - "sources": [ - "build/unit_test/test/mocks/test_soc_counting/Mockbms.c", - "build/unit_test/test/mocks/test_soc_counting/Mockdatabase.c", - "build/unit_test/test/mocks/test_soc_counting/Mockfram.c", - "src/app/application/algorithm/state_estimation/soc/counting/soc_counting.c", - "src/app/driver/foxmath/foxmath.c", - "src/app/application/config/battery_cell_cfg.c", - "tests/unit/app/application/algorithm/state_estimation/soc/counting/test_soc_counting.c", - "build/unit_test/test/runners/test_soc_counting_runner.c" - ] - }, - "src/app/application/algorithm/state_estimation/soc/debug/soc_debug.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_soc_debug", - "src/app/application/algorithm/state_estimation", - "src/app/application/config", - "src/app/driver/mcu", - "src/app/engine/config", - "src/app/engine/database", - "src/app/main/include", - "src/app/main/include/config", - "src/app/task/os", - "src/os/freertos/include", - "src/os/freertos/portable/ccs/arm_cortex-r5", - "include", - "..tests/unit/support", - "test/mocks/test_soc_debug" - ], - "sources": [ - "build/unit_test/test/mocks/test_soc_debug/Mockdatabase.c", - "src/app/application/algorithm/state_estimation/soc/debug/soc_debug.c", - "tests/unit/app/application/algorithm/state_estimation/soc/debug/test_soc_debug.c", - "build/unit_test/test/runners/test_soc_debug_runner.c" - ] - }, - "src/app/application/algorithm/state_estimation/soc/none/soc_none.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_soc_none", - "src/app/application/algorithm/state_estimation", - "src/app/application/config", - "src/app/driver/mcu", - "src/app/engine/config", - "src/app/engine/database", - "src/app/main/include", - "src/app/main/include/config", - "src/app/task/os", - "src/os/freertos/include", - "src/os/freertos/portable/ccs/arm_cortex-r5" - ], - "sources": [ - "build/unit_test/test/mocks/test_soc_none/Mockdatabase.c", - "src/app/application/algorithm/state_estimation/soc/none/soc_none.c", - "tests/unit/app/application/algorithm/state_estimation/soc/none/test_soc_none.c", - "build/unit_test/test/runners/test_soc_none_runner.c" - ] - }, - "src/app/application/algorithm/state_estimation/soe/counting/soe_counting.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_soe_counting", - "src/app/application/algorithm/state_estimation", - "src/app/application/bms", - "src/app/driver/config", - "src/app/driver/contactor", - "src/app/driver/foxmath", - "src/app/driver/fram", - "src/app/driver/sps", - "src/app/task/config", - "src/app/application/config", - "src/app/driver/mcu", - "src/app/engine/config", - "src/app/engine/database", - "src/app/main/include", - "src/app/main/include/config", - "src/app/task/os", - "src/os/freertos/include", - "src/os/freertos/portable/ccs/arm_cortex-r5" - ], - "sources": [ - "build/unit_test/test/mocks/test_soe_counting/Mockbms.c", - "build/unit_test/test/mocks/test_soe_counting/Mockdatabase.c", - "build/unit_test/test/mocks/test_soe_counting/Mockfram.c", - "src/app/application/algorithm/state_estimation/soe/counting/soe_counting.c", - "src/app/application/config/battery_cell_cfg.c", - "src/app/driver/foxmath/foxmath.c", - "tests/unit/app/application/algorithm/state_estimation/soe/counting/test_soe_counting.c", - "build/unit_test/test/runners/test_soe_counting_runner.c" - ] - }, - "src/app/application/algorithm/state_estimation/soe/debug/soe_debug.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_soe_debug", - "src/app/application/algorithm/state_estimation", - "src/app/application/config", - "src/app/driver/mcu", - "src/app/engine/config", - "src/app/engine/database", - "src/app/main/include", - "src/app/main/include/config", - "src/app/task/os", - "src/os/freertos/include", - "src/os/freertos/portable/ccs/arm_cortex-r5" - ], - "sources": [ - "build/unit_test/test/mocks/test_soe_debug/Mockdatabase.c", - "src/app/application/algorithm/state_estimation/soe/debug/soe_debug.c", - "tests/unit/app/application/algorithm/state_estimation/soe/debug/test_soe_debug.c", - "build/unit_test/test/runners/test_soe_debug_runner.c" - ] - }, - "src/app/application/algorithm/state_estimation/soe/none/soe_none.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_soe_none" - ], - "sources": [ - "build/unit_test/test/mocks/test_soe_none/Mockdatabase.c", - "src/app/application/algorithm/state_estimation/soe/none/soe_none.c", - "tests/unit/app/application/algorithm/state_estimation/soe/none/test_soe_none.c", - "build/unit_test/test/runners/test_soe_none_runner.c" - ] - }, - "src/app/application/algorithm/state_estimation/sof/trapezoid/sof_trapezoid.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_sof_trapezoid" - ], - "sources": [ - "build/unit_test/test/mocks/test_sof_trapezoid/Mockbms.c", - "build/unit_test/test/mocks/test_sof_trapezoid/Mockdatabase.c", - "build/unit_test/test/mocks/test_sof_trapezoid/Mockfram.c", - "src/app/application/algorithm/state_estimation/sof/trapezoid/sof_trapezoid.c", - "tests/unit/app/application/algorithm/state_estimation/sof/trapezoid/test_sof_trapezoid.c", - "build/unit_test/test/runners/test_sof_trapezoid_runner.c" - ] - }, - "src/app/application/algorithm/state_estimation/sof/trapezoid/sof_trapezoid_cfg.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_sof_trapezoid_cfg" - ], - "sources": [ - "src/app/application/algorithm/state_estimation/sof/trapezoid/sof_trapezoid_cfg.c", - "tests/unit/app/application/algorithm/state_estimation/sof/trapezoid/test_sof_trapezoid_cfg.c", - "build/unit_test/test/runners/test_sof_trapezoid_cfg_runner.c" - ] - }, - "src/app/application/algorithm/state_estimation/soh/debug/soh_debug.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_soh_debug" - ], - "sources": [ - "build/unit_test/test/mocks/test_soh_debug/Mockdatabase.c", - "src/app/application/algorithm/state_estimation/soh/debug/soh_debug.c", - "tests/unit/app/application/algorithm/state_estimation/soh/debug/test_soh_debug.c", - "build/unit_test/test/runners/test_soh_debug_runner.c" - ] - }, - "src/app/application/algorithm/state_estimation/soh/none/soh_none.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_soh_none" - ], - "sources": [ - "build/unit_test/test/mocks/test_soh_none/Mockdatabase.c", - "src/app/application/algorithm/state_estimation/soh/none/soh_none.c", - "tests/unit/app/application/algorithm/state_estimation/soh/none/test_soh_none.c", - "build/unit_test/test/runners/test_soh_none_runner.c" - ] - }, - "src/app/application/algorithm/state_estimation/state_estimation.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_state_estimation" - ], - "sources": [ - "build/unit_test/test/mocks/test_state_estimation/Mockdatabase.c", - "src/app/application/algorithm/state_estimation/state_estimation.c", - "tests/unit/app/application/algorithm/state_estimation/test_state_estimation.c", - "build/unit_test/test/runners/test_state_estimation_runner.c" - ] - }, - "src/app/application/bal/bal.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_bal" - ], - "sources": [ - "build/unit_test/test/mocks/test_bal/Mockdatabase.c", - "build/unit_test/test/mocks/test_bal/Mockos.c", - "src/app/application/bal/bal.c", - "tests/unit/app/application/bal/test_bal.c", - "build/unit_test/test/runners/test_bal_runner.c" - ] - }, - "src/app/application/bal/history/bal_strategy_history.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_bal_strategy_history" - ], - "sources": [ - "build/unit_test/test/mocks/test_bal_strategy_history/Mockbal_cfg.c", - "build/unit_test/test/mocks/test_bal_strategy_history/Mockbattery_system_cfg.c", - "build/unit_test/test/mocks/test_bal_strategy_history/Mockbms.c", - "build/unit_test/test/mocks/test_bal_strategy_history/Mockdatabase.c", - "build/unit_test/test/mocks/test_bal_strategy_history/Mockfassert.c", - "build/unit_test/test/mocks/test_bal_strategy_history/Mockfram.c", - "build/unit_test/test/mocks/test_bal_strategy_history/Mockio.c", - "build/unit_test/test/mocks/test_bal_strategy_history/Mockmcu.c", - "build/unit_test/test/mocks/test_bal_strategy_history/Mockos.c", - "build/unit_test/test/mocks/test_bal_strategy_history/Mockspi.c", - "build/unit_test/test/mocks/test_bal_strategy_history/Mockstate_estimation.c", - "src/app/application/bal/history/bal_strategy_history.c", - "tests/unit/app/application/bal/history/test_bal_strategy_history.c", - "build/unit_test/test/runners/test_bal_strategy_history_runner.c" - ] - }, - "src/app/application/bal/none/bal_strategy_none.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_bal_strategy_none" - ], - "sources": [ - "build/unit_test/test/mocks/test_bal_strategy_none/Mockbattery_system_cfg.c", - "build/unit_test/test/mocks/test_bal_strategy_none/Mockbms.c", - "build/unit_test/test/mocks/test_bal_strategy_none/Mockdatabase.c", - "build/unit_test/test/mocks/test_bal_strategy_none/Mockfassert.c", - "build/unit_test/test/mocks/test_bal_strategy_none/Mockfram.c", - "build/unit_test/test/mocks/test_bal_strategy_none/Mockio.c", - "build/unit_test/test/mocks/test_bal_strategy_none/Mockmcu.c", - "build/unit_test/test/mocks/test_bal_strategy_none/Mockos.c", - "build/unit_test/test/mocks/test_bal_strategy_none/Mockspi.c", - "src/app/application/bal/none/bal_strategy_none.c", - "tests/unit/app/application/bal/none/test_bal_strategy_none.c", - "build/unit_test/test/runners/test_bal_strategy_none_runner.c" - ] - }, - "src/app/application/bal/voltage/bal_strategy_voltage.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_bal_strategy_voltage" - ], - "sources": [ - "build/unit_test/test/mocks/test_bal_strategy_voltage/Mockbal_cfg.c", - "build/unit_test/test/mocks/test_bal_strategy_voltage/Mockbattery_system_cfg.c", - "build/unit_test/test/mocks/test_bal_strategy_voltage/Mockbms.c", - "build/unit_test/test/mocks/test_bal_strategy_voltage/Mockdatabase.c", - "build/unit_test/test/mocks/test_bal_strategy_voltage/Mockfassert.c", - "build/unit_test/test/mocks/test_bal_strategy_voltage/Mockfram.c", - "build/unit_test/test/mocks/test_bal_strategy_voltage/Mockio.c", - "build/unit_test/test/mocks/test_bal_strategy_voltage/Mockmcu.c", - "build/unit_test/test/mocks/test_bal_strategy_voltage/Mockos.c", - "build/unit_test/test/mocks/test_bal_strategy_voltage/Mockspi.c", - "src/app/application/bal/voltage/bal_strategy_voltage.c", - "tests/unit/app/application/bal/voltage/test_bal_strategy_voltage.c", - "build/unit_test/test/runners/test_bal_strategy_voltage_runner.c" - ] - }, - "src/app/application/bms/bms.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_bms" - ], - "sources": [ - "build/unit_test/test/mocks/test_bms/Mockafe.c", - "build/unit_test/test/mocks/test_bms/Mockbal.c", - "build/unit_test/test/mocks/test_bms/Mockbattery_system_cfg.c", - "build/unit_test/test/mocks/test_bms/Mockcontactor.c", - "build/unit_test/test/mocks/test_bms/Mockdatabase.c", - "build/unit_test/test/mocks/test_bms/Mockdiag.c", - "build/unit_test/test/mocks/test_bms/Mockfassert.c", - "build/unit_test/test/mocks/test_bms/Mockimd.c", - "build/unit_test/test/mocks/test_bms/Mockinterlock.c", - "build/unit_test/test/mocks/test_bms/Mockled.c", - "build/unit_test/test/mocks/test_bms/Mockmeas.c", - "build/unit_test/test/mocks/test_bms/Mockos.c", - "build/unit_test/test/mocks/test_bms/Mockplausibility.c", - "build/unit_test/test/mocks/test_bms/Mocksoa.c", - "src/app/application/bms/bms.c", - "tests/unit/app/application/bms/test_bms.c", - "build/unit_test/test/runners/test_bms_runner.c" - ] - }, - "src/app/application/config/bal_cfg.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_bal_cfg" - ], - "sources": [ - "build/unit_test/test/mocks/test_bal_cfg/Mockos.c", - "src/app/application/config/bal_cfg.c", - "tests/unit/app/application/config/test_bal_cfg.c", - "build/unit_test/test/runners/test_bal_cfg_runner.c" - ] - }, - "src/app/application/config/battery_cell_cfg.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_battery_cell_cfg" - ], - "sources": [ - "src/app/application/config/battery_cell_cfg.c", - "tests/unit/app/application/config/test_battery_cell_cfg.c", - "build/unit_test/test/runners/test_battery_cell_cfg_runner.c" - ] - }, - "src/app/application/config/battery_system_cfg.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_battery_system_cfg" - ], - "sources": [ - "build/unit_test/test/mocks/test_battery_system_cfg/Mockdatabase.c", - "src/app/application/config/battery_system_cfg.c", - "tests/unit/app/application/config/test_battery_system_cfg.c", - "build/unit_test/test/runners/test_battery_system_cfg_runner.c" - ] - }, - "src/app/application/config/soa_cfg.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_soa_cfg" - ], - "sources": [ - "build/unit_test/test/mocks/test_soa_cfg/Mockbattery_cell_cfg.c", - "build/unit_test/test/mocks/test_soa_cfg/Mockbms.c", - "src/app/application/config/soa_cfg.c", - "tests/unit/app/application/config/test_soa_cfg.c", - "build/unit_test/test/runners/test_soa_cfg_runner.c" - ] - }, - "src/app/application/plausibility/plausibility.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_plausibility" - ], - "sources": [ - "build/unit_test/test/mocks/test_plausibility/Mockdiag.c", - "src/app/application/plausibility/plausibility.c", - "tests/unit/app/application/plausibility/test_plausibility.c", - "build/unit_test/test/runners/test_plausibility_runner.c" - ] - }, - "src/app/application/redundancy/redundancy.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_redundancy" - ], - "sources": [ - "build/unit_test/test/mocks/test_redundancy/Mockbms.c", - "build/unit_test/test/mocks/test_redundancy/Mockdatabase.c", - "build/unit_test/test/mocks/test_redundancy/Mockdatabase_helper.c", - "build/unit_test/test/mocks/test_redundancy/Mockdiag.c", - "build/unit_test/test/mocks/test_redundancy/Mockos.c", - "build/unit_test/test/mocks/test_redundancy/Mockplausibility.c", - "src/app/application/redundancy/redundancy.c", - "tests/unit/app/application/redundancy/test_redundancy.c", - "build/unit_test/test/runners/test_redundancy_runner.c" - ] - }, - "src/app/application/soa/soa.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_soa" - ], - "sources": [ - "build/unit_test/test/mocks/test_soa/Mockbms.c", - "build/unit_test/test/mocks/test_soa/Mockcontactor.c", - "build/unit_test/test/mocks/test_soa/Mockdatabase.c", - "build/unit_test/test/mocks/test_soa/Mockdiag.c", - "build/unit_test/test/mocks/test_soa/Mocksoa_cfg.c", - "src/app/application/soa/soa.c", - "tests/unit/app/application/soa/test_soa.c", - "build/unit_test/test/runners/test_soa_runner.c" - ] - }, - "src/app/driver/adc/adc.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_adc", - "src/app/driver/adc", - "src/app/application/config", - "src/app/driver/mcu", - "src/app/engine/config", - "src/app/engine/database", - "src/app/main/include", - "src/app/main/include/config", - "src/app/task/os", - "src/os/freertos/include", - "src/os/freertos/portable/ccs/arm_cortex-r5" - ], - "sources": [ - "build/unit_test/test/mocks/test_adc/MockHL_adc.c", - "build/unit_test/test/mocks/test_adc/Mockdatabase.c", - "build/unit_test/test/mocks/test_adc/Mockfassert.c", - "src/app/driver/adc/adc.c", - "tests/unit/app/driver/adc/test_adc.c", - "build/unit_test/test/runners/test_adc_runner.c" - ] - }, - "src/app/driver/afe/adi/ades1830/adi_ades1830_balancing.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_adi_ades1830_balancing" - ], - "sources": [ - "build/unit_test/test/mocks/test_adi_ades1830_balancing/Mockadi_ades183x.c", - "build/unit_test/test/mocks/test_adi_ades1830_balancing/Mockadi_ades183x_helpers.c", - "build/unit_test/test/mocks/test_adi_ades1830_balancing/Mockadi_ades183x_pec.c", - "build/unit_test/test/mocks/test_adi_ades1830_balancing/Mockadi_ades183x_voltages.c", - "build/unit_test/test/mocks/test_adi_ades1830_balancing/Mockdatabase.c", - "build/unit_test/test/mocks/test_adi_ades1830_balancing/Mockfassert.c", - "build/unit_test/test/mocks/test_adi_ades1830_balancing/Mockftask.c", - "build/unit_test/test/mocks/test_adi_ades1830_balancing/Mockio.c", - "build/unit_test/test/mocks/test_adi_ades1830_balancing/Mockos.c", - "build/unit_test/test/mocks/test_adi_ades1830_balancing/Mockpex.c", - "build/unit_test/test/mocks/test_adi_ades1830_balancing/Mockspi.c", - "build/unit_test/test/mocks/test_adi_ades1830_balancing/Mockspi_cfg.c", - "build/unit_test/test/mocks/test_adi_ades1830_balancing/Mocktask.c", - "build/unit_test/test/mocks/test_adi_ades1830_balancing/Mocktsi.c", - "src/app/driver/afe/adi/ades1830/adi_ades1830_balancing.c", - "tests/unit/app/driver/afe/adi/ades1830/test_adi_ades1830_balancing.c", - "build/unit_test/test/runners/test_adi_ades1830_balancing_runner.c" - ] - }, - "src/app/driver/afe/adi/ades1830/adi_ades1830_gpio_voltages.c": { - "defines": [ - "FOXBMS_AFE_DRIVER_ADI_ADES1830=1u" - ], - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_adi_ades1830_gpio_voltages", - "src/app/application/config", - "src/app/driver/afe/adi/ades1830", - "src/app/driver/afe/adi/common/ades183x", - "src/app/driver/afe/adi/common/ades183x/config", - "src/app/driver/afe/adi/common/ades183x/pec", - "src/app/driver/afe/api", - "src/app/driver/config", - "src/app/driver/dma", - "src/app/driver/io", - "src/app/driver/pex", - "src/app/driver/rtc", - "src/app/driver/spi", - "src/app/driver/ts/api", - "src/app/engine/database", - "src/app/engine/diag", - "src/app/task/config", - "src/app/task/ftask", - "src/app/application/config", - "src/app/driver/mcu", - "src/app/engine/config", - "src/app/engine/database", - "src/app/main/include", - "src/app/main/include/config", - "src/app/task/os", - "src/os/freertos/include", - "src/os/freertos/portable/ccs/arm_cortex-r5" - ], - "sources": [ - "build/unit_test/test/mocks/test_adi_ades1830_gpio_voltages/Mockadi_ades183x_cfg.c", - "build/unit_test/test/mocks/test_adi_ades1830_gpio_voltages/Mockos.c", - "build/unit_test/test/mocks/test_adi_ades1830_gpio_voltages/Mockspi.c", - "src/app/driver/afe/adi/ades1830/adi_ades1830_gpio_voltages.c", - "src/app/driver/afe/adi/common/ades183x/adi_ades183x_helpers.c", - "src/app/driver/afe/adi/common/ades183x/adi_ades183x_buffers.c", - "src/app/driver/afe/adi/common/ades183x/adi_ades183x_commands.c", - "src/app/driver/afe/adi/common/ades183x/pec/adi_ades183x_pec.c", - "tests/unit/app/driver/afe/adi/ades1830/test_adi_ades1830_gpio_voltages.c", - "build/unit_test/test/runners/test_adi_ades1830_gpio_voltages_runner.c" - ] - }, - "src/app/driver/afe/adi/ades1830/config/adi_ades1830_cfg.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_adi_ades1830_cfg" - ], - "sources": [ - "build/unit_test/test/mocks/test_adi_ades1830_cfg/Mocktsi.c", - "src/app/driver/afe/adi/ades1830/config/adi_ades1830_cfg.c", - "tests/unit/app/driver/afe/adi/ades1830/config/test_adi_ades1830_cfg.c", - "build/unit_test/test/runners/test_adi_ades1830_cfg_runner.c" - ] - }, - "src/app/driver/afe/adi/common/ades183x/adi_ades183x.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_adi_ades183x" - ], - "sources": [ - "src/app/driver/afe/adi/common/ades183x/adi_ades183x.c", - "tests/unit/app/driver/afe/adi/common/ades183x/test_adi_ades183x.c", - "build/unit_test/test/runners/test_adi_ades183x_runner.c" - ] - }, - "src/app/driver/afe/adi/common/ades183x/adi_ades183x_buffers.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_adi_ades183x_buffers" - ], - "sources": [ - "src/app/driver/afe/adi/common/ades183x/adi_ades183x_buffers.c", - "tests/unit/app/driver/afe/adi/common/ades183x/test_adi_ades183x_buffers.c", - "build/unit_test/test/runners/test_adi_ades183x_buffers_runner.c" - ] - }, - "src/app/driver/afe/adi/common/ades183x/adi_ades183x_commands.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_adi_ades183x_commands" - ], - "sources": [ - "src/app/driver/afe/adi/common/ades183x/adi_ades183x_commands.c", - "tests/unit/app/driver/afe/adi/common/ades183x/test_adi_ades183x_commands.c", - "build/unit_test/test/runners/test_adi_ades183x_commands_runner.c" - ] - }, - "src/app/driver/afe/adi/common/ades183x/adi_ades183x_commands_voltages.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_adi_ades183x_commands_voltages" - ], - "sources": [ - "src/app/driver/afe/adi/common/ades183x/adi_ades183x_commands_voltages.c", - "tests/unit/app/driver/afe/adi/common/ades183x/test_adi_ades183x_commands_voltages.c", - "build/unit_test/test/runners/test_adi_ades183x_commands_voltages_runner.c" - ] - }, - "src/app/driver/afe/adi/common/ades183x/adi_ades183x_diagnostic_w.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_adi_ades183x_diagnostic_w" - ], - "sources": [ - "src/app/driver/afe/adi/common/ades183x/_w.c", - "tests/unit/app/driver/afe/adi/common/ades183x/test_adi_ades183x_diagnostic_w.c", - "build/unit_test/test/runners/test_adi_ades183x_diagnostic_w_runner.c" - ] - }, - "src/app/driver/afe/adi/common/ades183x/adi_ades183x_helpers.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_adi_ades183x_helpers" - ], - "sources": [ - "src/app/driver/afe/adi/common/ades183x/adi_ades183x_helpers.c", - "tests/unit/app/driver/afe/adi/common/ades183x/test_adi_ades183x_helpers.c", - "build/unit_test/test/runners/test_adi_ades183x_helpers_runner.c" - ] - }, - "src/app/driver/afe/adi/common/ades183x/adi_ades183x_initialization.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_adi_ades183x_initialization" - ], - "sources": [ - "src/app/driver/afe/adi/common/ades183x/adi_ades183x_initialization.c", - "tests/unit/app/driver/afe/adi/common/ades183x/test_adi_ades183x_initialization.c", - "build/unit_test/test/runners/test_adi_ades183x_initialization_runner.c" - ] - }, - "src/app/driver/afe/adi/common/ades183x/adi_ades183x_temperatures.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_adi_ades183x_temperatures" - ], - "sources": [ - "src/app/driver/afe/adi/common/ades183x/adi_ades183x_temperatures.c", - "tests/unit/app/driver/afe/adi/common/ades183x/test_adi_ades183x_temperatures.c", - "build/unit_test/test/runners/test_adi_ades183x_temperatures_runner.c" - ] - }, - "src/app/driver/afe/adi/common/ades183x/adi_ades183x_voltages.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_adi_ades183x_voltages" - ], - "sources": [ - "src/app/driver/afe/adi/common/ades183x/adi_ades183x_voltages.c", - "tests/unit/app/driver/afe/adi/common/ades183x/test_adi_ades183x_voltages.c", - "build/unit_test/test/runners/test_adi_ades183x_voltages_runner.c" - ] - }, - "src/app/driver/afe/adi/common/ades183x/api/adi_ades183x_afe.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_adi_ades183x_afe" - ], - "sources": [ - "src/app/driver/afe/adi/common/ades183x/api/adi_ades183x_afe.c", - "tests/unit/app/driver/afe/adi/common/ades183x/api/test_adi_ades183x_afe.c", - "build/unit_test/test/runners/test_adi_ades183x_afe_runner.c" - ] - }, - "src/app/driver/afe/adi/common/ades183x/api/adi_ades183x_afe_dma.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_adi_ades183x_afe_dma" - ], - "sources": [ - "src/app/driver/afe/adi/common/ades183x/api/adi_ades183x_afe_dma.c", - "tests/unit/app/driver/afe/adi/common/ades183x/api/test_adi_ades183x_afe_dma.c", - "build/unit_test/test/runners/test_adi_ades183x_afe_dma_runner.c" - ] - }, - "src/app/driver/afe/adi/common/ades183x/config/adi_ades183x_cfg.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_adi_ades183x_cfg" - ], - "sources": [ - "src/app/driver/afe/adi/common/ades183x/config/adi_ades183x_cfg.c", - "tests/unit/app/driver/afe/adi/common/ades183x/config/test_adi_ades183x_cfg.c", - "build/unit_test/test/runners/test_adi_ades183x_cfg_runner.c" - ] - }, - "src/app/driver/afe/adi/common/ades183x/pec/adi_ades183x_pec.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_adi_ades183x_pec" - ], - "sources": [ - "src/app/driver/afe/adi/common/ades183x/pec/adi_ades183x_pec.c", - "tests/unit/app/driver/afe/adi/common/ades183x/pec/test_adi_ades183x_pec.c", - "build/unit_test/test/runners/test_adi_ades183x_pec_runner.c" - ] - }, - "src/app/driver/afe/api/afe_plausibility.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_afe_plausibility" - ], - "sources": [ - "build/unit_test/test/mocks/test_afe_plausibility/Mocktsi.c", - "src/app/driver/afe/api/afe_plausibility.c", - "tests/unit/app/driver/afe/api/test_afe_plausibility.c", - "build/unit_test/test/runners/test_afe_plausibility_runner.c" - ] - }, - "src/app/driver/afe/debug/default/api/debug_default_afe.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_debug_default_afe" - ], - "sources": [ - "build/unit_test/test/mocks/test_debug_default_afe/Mockdatabase.c", - "build/unit_test/test/mocks/test_debug_default_afe/Mockdebug_default.c", - "src/app/driver/afe/debug/default/api/debug_default_afe.c", - "tests/unit/app/driver/afe/debug/default/api/test_debug_default_afe.c", - "build/unit_test/test/runners/test_debug_default_afe_runner.c" - ] - }, - "src/app/driver/afe/debug/default/api/debug_default_afe_dma.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_debug_default_afe_dma" - ], - "sources": [ - "build/unit_test/test/mocks/test_debug_default_afe_dma/Mockdebug_default.c", - "build/unit_test/test/mocks/test_debug_default_afe_dma/Mockfassert.c", - "src/app/driver/afe/debug/default/api/debug_default_afe_dma.c", - "tests/unit/app/driver/afe/debug/default/api/test_debug_default_afe_dma.c", - "build/unit_test/test/runners/test_debug_default_afe_dma_runner.c" - ] - }, - "src/app/driver/afe/debug/default/debug_default.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_debug_default" - ], - "sources": [ - "build/unit_test/test/mocks/test_debug_default/Mockdatabase.c", - "build/unit_test/test/mocks/test_debug_default/Mockos.c", - "src/app/driver/afe/debug/default/debug_default.c", - "tests/unit/app/driver/afe/debug/default/test_debug_default.c", - "build/unit_test/test/runners/test_debug_default_runner.c" - ] - }, - "src/app/driver/afe/ltc/6806/config/ltc_6806_cfg.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_ltc_6806_cfg" - ], - "sources": [ - "src/app/driver/afe/ltc/6806/config/ltc_6806_cfg.c", - "tests/unit/app/driver/afe/ltc/6806/config/test_ltc_6806_cfg.c", - "build/unit_test/test/runners/test_ltc_6806_cfg_runner.c" - ] - }, - "src/app/driver/afe/ltc/6806/ltc_6806.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_ltc_6806" - ], - "sources": [ - "build/unit_test/test/mocks/test_ltc_6806/Mockafe_plausibility.c", - "build/unit_test/test/mocks/test_ltc_6806/Mockdatabase.c", - "build/unit_test/test/mocks/test_ltc_6806/Mockdiag.c", - "build/unit_test/test/mocks/test_ltc_6806/Mockdma.c", - "build/unit_test/test/mocks/test_ltc_6806/Mockfassert.c", - "build/unit_test/test/mocks/test_ltc_6806/Mockio.c", - "build/unit_test/test/mocks/test_ltc_6806/Mockltc_afe_dma.c", - "build/unit_test/test/mocks/test_ltc_6806/Mockltc_pec.c", - "build/unit_test/test/mocks/test_ltc_6806/Mockos.c", - "build/unit_test/test/mocks/test_ltc_6806/Mockpex.c", - "build/unit_test/test/mocks/test_ltc_6806/Mockspi.c", - "src/app/driver/afe/ltc/6806/ltc_6806.c", - "tests/unit/app/driver/afe/ltc/6806/test_ltc_6806.c", - "build/unit_test/test/runners/test_ltc_6806_runner.c" - ] - }, - "src/app/driver/afe/ltc/6813-1/config/ltc_6813-1_cfg.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_ltc_6813-1_cfg" - ], - "sources": [ - "build/unit_test/test/mocks/test_ltc_6813-1_cfg/Mocktsi.c", - "src/app/driver/afe/ltc/6813-1/config/ltc_6813-1_cfg.c", - "tests/unit/app/driver/afe/ltc/6813-1/config/test_ltc_6813-1_cfg.c", - "build/unit_test/test/runners/test_ltc_6813-1_cfg_runner.c" - ] - }, - "src/app/driver/afe/ltc/6813-1/ltc_6813-1.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_ltc_6813-1" - ], - "sources": [ - "build/unit_test/test/mocks/test_ltc_6813-1/Mockafe_plausibility.c", - "build/unit_test/test/mocks/test_ltc_6813-1/Mockdatabase.c", - "build/unit_test/test/mocks/test_ltc_6813-1/Mockdiag.c", - "build/unit_test/test/mocks/test_ltc_6813-1/Mockdma.c", - "build/unit_test/test/mocks/test_ltc_6813-1/Mockfassert.c", - "build/unit_test/test/mocks/test_ltc_6813-1/Mockio.c", - "build/unit_test/test/mocks/test_ltc_6813-1/Mockltc_afe_dma.c", - "build/unit_test/test/mocks/test_ltc_6813-1/Mockltc_pec.c", - "build/unit_test/test/mocks/test_ltc_6813-1/Mockos.c", - "build/unit_test/test/mocks/test_ltc_6813-1/Mockpex.c", - "build/unit_test/test/mocks/test_ltc_6813-1/Mockspi.c", - "build/unit_test/test/mocks/test_ltc_6813-1/Mocktsi.c", - "src/app/driver/afe/ltc/6813-1/ltc_6813-1.c", - "tests/unit/app/driver/afe/ltc/6813-1/test_ltc_6813-1.c", - "build/unit_test/test/runners/test_ltc_6813-1_runner.c" - ] - }, - "src/app/driver/afe/ltc/api/ltc_afe.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_ltc_afe" - ], - "sources": [ - "build/unit_test/test/mocks/test_ltc_afe/MockHL_sys_dma.c", - "build/unit_test/test/mocks/test_ltc_afe/Mockltc.c", - "src/app/driver/afe/ltc/api/ltc_afe.c", - "tests/unit/app/driver/afe/ltc/api/test_ltc_afe.c", - "build/unit_test/test/runners/test_ltc_afe_runner.c" - ] - }, - "src/app/driver/afe/ltc/common/ltc_afe_dma.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_ltc_afe_dma" - ], - "sources": [ - "build/unit_test/test/mocks/test_ltc_afe_dma/MockHL_sys_dma.c", - "build/unit_test/test/mocks/test_ltc_afe_dma/Mockfassert.c", - "build/unit_test/test/mocks/test_ltc_afe_dma/Mockio.c", - "build/unit_test/test/mocks/test_ltc_afe_dma/Mockltc.c", - "build/unit_test/test/mocks/test_ltc_afe_dma/Mockspi.c", - "src/app/driver/afe/ltc/common/ltc_afe_dma.c", - "tests/unit/app/driver/afe/ltc/common/test_ltc_afe_dma.c", - "build/unit_test/test/runners/test_ltc_afe_dma_runner.c" - ] - }, - "src/app/driver/afe/ltc/common/ltc_pec.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_ltc_pec" - ], - "sources": [ - "src/app/driver/afe/ltc/common/ltc_pec.c", - "tests/unit/app/driver/afe/ltc/common/test_ltc_pec.c", - "build/unit_test/test/runners/test_ltc_pec_runner.c" - ] - }, - "src/app/driver/afe/maxim/api/mxm_afe.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_mxm_afe" - ], - "sources": [ - "build/unit_test/test/mocks/test_mxm_afe/MockHL_sys_dma.c", - "build/unit_test/test/mocks/test_mxm_afe/Mockmxm_17841b.c", - "build/unit_test/test/mocks/test_mxm_afe/Mockmxm_1785x.c", - "build/unit_test/test/mocks/test_mxm_afe/Mockmxm_battery_management.c", - "build/unit_test/test/mocks/test_mxm_afe/Mockmxm_cfg.c", - "build/unit_test/test/mocks/test_mxm_afe/Mockos.c", - "src/app/driver/afe/maxim/api/mxm_afe.c", - "tests/unit/app/driver/afe/maxim/api/test_mxm_afe.c", - "build/unit_test/test/runners/test_mxm_afe_runner.c" - ] - }, - "src/app/driver/afe/maxim/common/config/mxm_cfg.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_mxm_cfg" - ], - "sources": [ - "build/unit_test/test/mocks/test_mxm_cfg/Mockdiag.c", - "build/unit_test/test/mocks/test_mxm_cfg/Mockfassert.c", - "build/unit_test/test/mocks/test_mxm_cfg/Mockio.c", - "build/unit_test/test/mocks/test_mxm_cfg/Mockspi.c", - "build/unit_test/test/mocks/test_mxm_cfg/Mockspi_cfg.c", - "src/app/driver/afe/maxim/common/config/mxm_cfg.c", - "tests/unit/app/driver/afe/maxim/common/config/test_mxm_cfg.c", - "build/unit_test/test/runners/test_mxm_cfg_runner.c" - ] - }, - "src/app/driver/afe/maxim/common/mxm_17841b.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_mxm_17841b" - ], - "sources": [ - "build/unit_test/test/mocks/test_mxm_17841b/Mockfassert.c", - "build/unit_test/test/mocks/test_mxm_17841b/Mockmxm_cfg.c", - "build/unit_test/test/mocks/test_mxm_17841b/Mockos.c", - "src/app/driver/afe/maxim/common/mxm_17841b.c", - "tests/unit/app/driver/afe/maxim/common/test_mxm_17841b.c", - "build/unit_test/test/runners/test_mxm_17841b_runner.c" - ] - }, - "src/app/driver/afe/maxim/common/mxm_1785x.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_mxm_1785x" - ], - "sources": [ - "build/unit_test/test/mocks/test_mxm_1785x/Mockafe_plausibility.c", - "build/unit_test/test/mocks/test_mxm_1785x/Mockdatabase.c", - "build/unit_test/test/mocks/test_mxm_1785x/Mockdiag.c", - "build/unit_test/test/mocks/test_mxm_1785x/Mockfassert.c", - "build/unit_test/test/mocks/test_mxm_1785x/Mockmxm_17841b.c", - "build/unit_test/test/mocks/test_mxm_1785x/Mockmxm_41b_register_map.c", - "build/unit_test/test/mocks/test_mxm_1785x/Mockmxm_battery_management.c", - "build/unit_test/test/mocks/test_mxm_1785x/Mockmxm_cfg.c", - "build/unit_test/test/mocks/test_mxm_1785x/Mockmxm_crc8.c", - "build/unit_test/test/mocks/test_mxm_1785x/Mockmxm_registry.c", - "build/unit_test/test/mocks/test_mxm_1785x/Mockos.c", - "build/unit_test/test/mocks/test_mxm_1785x/Mocktsi.c", - "src/app/driver/afe/maxim/common/mxm_1785x.c", - "tests/unit/app/driver/afe/maxim/common/test_mxm_1785x.c", - "build/unit_test/test/runners/test_mxm_1785x_runner.c" - ] - }, - "src/app/driver/afe/maxim/common/mxm_1785x_tools.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_mxm_1785x_tools" - ], - "sources": [ - "build/unit_test/test/mocks/test_mxm_1785x_tools/Mockfassert.c", - "build/unit_test/test/mocks/test_mxm_1785x_tools/Mockmxm_cfg.c", - "src/app/driver/afe/maxim/common/mxm_1785x_tools.c", - "tests/unit/app/driver/afe/maxim/common/test_mxm_1785x_tools.c", - "build/unit_test/test/runners/test_mxm_1785x_tools_runner.c" - ] - }, - "src/app/driver/afe/maxim/common/mxm_afe_dma.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_mxm_afe_dma" - ], - "sources": [ - "build/unit_test/test/mocks/test_mxm_afe_dma/MockHL_sys_dma.c", - "build/unit_test/test/mocks/test_mxm_afe_dma/Mockfassert.c", - "src/app/driver/afe/maxim/common/mxm_afe_dma.c", - "tests/unit/app/driver/afe/maxim/common/test_mxm_afe_dma.c", - "build/unit_test/test/runners/test_mxm_afe_dma_runner.c" - ] - }, - "src/app/driver/afe/maxim/common/mxm_battery_management.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_mxm_battery_management" - ], - "sources": [ - "build/unit_test/test/mocks/test_mxm_battery_management/Mockdiag.c", - "build/unit_test/test/mocks/test_mxm_battery_management/Mockfassert.c", - "build/unit_test/test/mocks/test_mxm_battery_management/Mockmxm_17841b.c", - "build/unit_test/test/mocks/test_mxm_battery_management/Mockmxm_41b_register_map.c", - "build/unit_test/test/mocks/test_mxm_battery_management/Mockmxm_cfg.c", - "build/unit_test/test/mocks/test_mxm_battery_management/Mockmxm_crc8.c", - "build/unit_test/test/mocks/test_mxm_battery_management/Mockos.c", - "src/app/driver/afe/maxim/common/mxm_battery_management.c", - "tests/unit/app/driver/afe/maxim/common/test_mxm_battery_management.c", - "build/unit_test/test/runners/test_mxm_battery_management_runner.c" - ] - }, - "src/app/driver/afe/maxim/common/mxm_bitextract.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_mxm_bitextract" - ], - "sources": [ - "src/app/driver/afe/maxim/common/mxm_bitextract.c", - "tests/unit/app/driver/afe/maxim/common/test_mxm_bitextract.c", - "build/unit_test/test/runners/test_mxm_bitextract_runner.c" - ] - }, - "src/app/driver/afe/maxim/common/mxm_crc8.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_mxm_crc8" - ], - "sources": [ - "src/app/driver/afe/maxim/common/mxm_crc8.c", - "tests/unit/app/driver/afe/maxim/common/test_mxm_crc8.c", - "build/unit_test/test/runners/test_mxm_crc8_runner.c" - ] - }, - "src/app/driver/afe/maxim/common/mxm_registry.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_mxm_registry" - ], - "sources": [ - "build/unit_test/test/mocks/test_mxm_registry/Mockfassert.c", - "build/unit_test/test/mocks/test_mxm_registry/Mockmxm_1785x.c", - "build/unit_test/test/mocks/test_mxm_registry/Mockmxm_basic_defines.c", - "src/app/driver/afe/maxim/common/mxm_registry.c", - "tests/unit/app/driver/afe/maxim/common/test_mxm_registry.c", - "build/unit_test/test/runners/test_mxm_registry_runner.c" - ] - }, - "src/app/driver/afe/maxim/max17852/mxm_17852.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_mxm_17852" - ], - "sources": [ - "build/unit_test/test/mocks/test_mxm_17852/Mockafe_plausibility.c", - "build/unit_test/test/mocks/test_mxm_17852/Mockdatabase.c", - "build/unit_test/test/mocks/test_mxm_17852/Mockdiag.c", - "build/unit_test/test/mocks/test_mxm_17852/Mockfassert.c", - "build/unit_test/test/mocks/test_mxm_17852/Mockmxm_17841b.c", - "build/unit_test/test/mocks/test_mxm_17852/Mockmxm_41b_register_map.c", - "build/unit_test/test/mocks/test_mxm_17852/Mockmxm_battery_management.c", - "build/unit_test/test/mocks/test_mxm_17852/Mockmxm_cfg.c", - "build/unit_test/test/mocks/test_mxm_17852/Mockmxm_crc8.c", - "build/unit_test/test/mocks/test_mxm_17852/Mockmxm_registry.c", - "build/unit_test/test/mocks/test_mxm_17852/Mockos.c", - "build/unit_test/test/mocks/test_mxm_17852/Mocktsi.c", - "src/app/driver/afe/maxim/max17852/mxm_17852.c", - "tests/unit/app/driver/afe/maxim/max17852/test_mxm_17852.c", - "build/unit_test/test/runners/test_mxm_17852_runner.c" - ] - }, - "src/app/driver/afe/nxp/api/nxp_afe.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_nxp_afe" - ], - "sources": [ - "build/unit_test/test/mocks/test_nxp_afe/MockHL_sys_dma.c", - "build/unit_test/test/mocks/test_nxp_afe/Mocknxp_afe.c", - "src/app/driver/afe/nxp/api/nxp_afe.c", - "tests/unit/app/driver/afe/nxp/api/test_nxp_afe.c", - "build/unit_test/test/runners/test_nxp_afe_runner.c" - ] - }, - "src/app/driver/afe/nxp/mc33775a/api/nxp_mc33775a_afe.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_nxp_mc33775a_afe" - ], - "sources": [ - "build/unit_test/test/mocks/test_nxp_mc33775a_afe/Mockafe_dma.c", - "build/unit_test/test/mocks/test_nxp_mc33775a_afe/Mockdma.c", - "build/unit_test/test/mocks/test_nxp_mc33775a_afe/Mocknxp_mc33775a.c", - "build/unit_test/test/mocks/test_nxp_mc33775a_afe/Mockos.c", - "build/unit_test/test/mocks/test_nxp_mc33775a_afe/Mockpex.c", - "src/app/driver/afe/nxp/mc33775a/api/nxp_mc33775a_afe.c", - "tests/unit/app/driver/afe/nxp/mc33775a/api/test_nxp_mc33775a_afe.c", - "build/unit_test/test/runners/test_nxp_mc33775a_afe_runner.c" - ] - }, - "src/app/driver/afe/nxp/mc33775a/config/nxp_mc33775a_cfg.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_nxp_mc33775a_cfg" - ], - "sources": [ - "build/unit_test/test/mocks/test_nxp_mc33775a_cfg/Mocktsi.c", - "src/app/driver/afe/nxp/mc33775a/config/nxp_mc33775a_cfg.c", - "tests/unit/app/driver/afe/nxp/mc33775a/config/test_nxp_mc33775a_cfg.c", - "build/unit_test/test/runners/test_nxp_mc33775a_cfg_runner.c" - ] - }, - "src/app/driver/afe/nxp/mc33775a/nxp_afe_dma.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_nxp_afe_dma" - ], - "sources": [ - "build/unit_test/test/mocks/test_nxp_afe_dma/Mockdma.c", - "build/unit_test/test/mocks/test_nxp_afe_dma/Mockio.c", - "build/unit_test/test/mocks/test_nxp_afe_dma/Mockmcu.c", - "build/unit_test/test/mocks/test_nxp_afe_dma/Mocknxp_mc33775a-ll.c", - "build/unit_test/test/mocks/test_nxp_afe_dma/Mocknxp_mc33775a.c", - "build/unit_test/test/mocks/test_nxp_afe_dma/Mockos.c", - "build/unit_test/test/mocks/test_nxp_afe_dma/Mockspi.c", - "build/unit_test/test/mocks/test_nxp_afe_dma/Mocktask.c", - "src/app/driver/afe/nxp/mc33775a/nxp_afe_dma.c", - "tests/unit/app/driver/afe/nxp/mc33775a/test_nxp_afe_dma.c", - "build/unit_test/test/runners/test_nxp_afe_dma_runner.c" - ] - }, - "src/app/driver/afe/nxp/mc33775a/nxp_mc33775a-ll.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_nxp_mc33775a-ll" - ], - "sources": [ - "build/unit_test/test/mocks/test_nxp_mc33775a-ll/Mockdma.c", - "build/unit_test/test/mocks/test_nxp_mc33775a-ll/Mockio.c", - "build/unit_test/test/mocks/test_nxp_mc33775a-ll/Mockmcu.c", - "build/unit_test/test/mocks/test_nxp_mc33775a-ll/Mockos.c", - "build/unit_test/test/mocks/test_nxp_mc33775a-ll/Mockspi.c", - "build/unit_test/test/mocks/test_nxp_mc33775a-ll/Mocktask.c", - "src/app/driver/afe/nxp/mc33775a/nxp_mc33775a-ll.c", - "tests/unit/app/driver/afe/nxp/mc33775a/test_nxp_mc33775a-ll.c", - "build/unit_test/test/runners/test_nxp_mc33775a-ll_runner.c" - ] - }, - "src/app/driver/afe/nxp/mc33775a/nxp_mc33775a.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_nxp_mc33775a" - ], - "sources": [ - "build/unit_test/test/mocks/test_nxp_mc33775a/MockHL_gio.c", - "build/unit_test/test/mocks/test_nxp_mc33775a/MockHL_system.c", - "build/unit_test/test/mocks/test_nxp_mc33775a/Mockafe_dma.c", - "build/unit_test/test/mocks/test_nxp_mc33775a/Mockdatabase.c", - "build/unit_test/test/mocks/test_nxp_mc33775a/Mockdiag.c", - "build/unit_test/test/mocks/test_nxp_mc33775a/Mockftask.c", - "build/unit_test/test/mocks/test_nxp_mc33775a/Mockio.c", - "build/unit_test/test/mocks/test_nxp_mc33775a/Mockmcu.c", - "build/unit_test/test/mocks/test_nxp_mc33775a/Mocknxp_mc33775a-ll.c", - "build/unit_test/test/mocks/test_nxp_mc33775a/Mocknxp_mc33775a_cfg.c", - "build/unit_test/test/mocks/test_nxp_mc33775a/Mockos.c", - "build/unit_test/test/mocks/test_nxp_mc33775a/Mockspi.c", - "src/app/driver/afe/nxp/mc33775a/nxp_mc33775a.c", - "tests/unit/app/driver/afe/nxp/mc33775a/test_nxp_mc33775a.c", - "build/unit_test/test/runners/test_nxp_mc33775a_runner.c" - ] - }, - "src/app/driver/afe/nxp/mc33775a/vendor/uc_msg_t.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_uc_msg_t" - ], - "sources": [ - "src/app/driver/afe/nxp/mc33775a/vendor/uc_msg_t.c", - "tests/unit/app/driver/afe/nxp/mc33775a/vendor/test_uc_msg_t.c", - "None" - ] - }, - "src/app/driver/afe/ti/api/ti_afe.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_ti_afe" - ], - "sources": [ - "src/app/driver/afe/ti/api/ti_afe.c", - "tests/unit/app/driver/afe/ti/api/test_ti_afe.c", - "build/unit_test/test/runners/test_ti_afe_runner.c" - ] - }, - "src/app/driver/afe/ti/common/api/ti_bq79xxx_afe_dma.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_ti_bq79xxx_afe_dma" - ], - "sources": [ - "build/unit_test/test/mocks/test_ti_bq79xxx_afe_dma/Mockdma.c", - "build/unit_test/test/mocks/test_ti_bq79xxx_afe_dma/Mockio.c", - "build/unit_test/test/mocks/test_ti_bq79xxx_afe_dma/Mockmcu.c", - "build/unit_test/test/mocks/test_ti_bq79xxx_afe_dma/Mockos.c", - "build/unit_test/test/mocks/test_ti_bq79xxx_afe_dma/Mockspi.c", - "build/unit_test/test/mocks/test_ti_bq79xxx_afe_dma/Mocktask.c", - "src/app/driver/afe/ti/common/api/ti_bq79xxx_afe_dma.c", - "tests/unit/app/driver/afe/ti/common/api/test_ti_bq79xxx_afe_dma.c", - "build/unit_test/test/runners/test_ti_bq79xxx_afe_dma_runner.c" - ] - }, - "src/app/driver/afe/ti/dummy/api/ti_dummy_afe.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_ti_dummy_afe" - ], - "sources": [ - "src/app/driver/afe/ti/dummy/api/ti_dummy_afe.c", - "tests/unit/app/driver/afe/ti/dummy/api/test_ti_dummy_afe.c", - "build/unit_test/test/runners/test_ti_dummy_afe_runner.c" - ] - }, - "src/app/driver/afe/ti/dummy/ti_dummy.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_ti_dummy" - ], - "sources": [ - "src/app/driver/afe/ti/dummy/ti_dummy.c", - "tests/unit/app/driver/afe/ti/dummy/test_ti_dummy.c", - "build/unit_test/test/runners/test_ti_dummy_runner.c" - ] - }, - "src/app/driver/can/can.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_can" - ], - "sources": [ - "build/unit_test/test/mocks/test_can/MockHL_can.c", - "build/unit_test/test/mocks/test_can/Mockcan_cfg.c", - "build/unit_test/test/mocks/test_can/Mockdatabase.c", - "build/unit_test/test/mocks/test_can/Mockdiag.c", - "build/unit_test/test/mocks/test_can/Mockfoxmath.c", - "build/unit_test/test/mocks/test_can/Mockftask.c", - "build/unit_test/test/mocks/test_can/Mockimd.c", - "build/unit_test/test/mocks/test_can/Mockio.c", - "build/unit_test/test/mocks/test_can/Mockmcu.c", - "build/unit_test/test/mocks/test_can/Mockos.c", - "build/unit_test/test/mocks/test_can/Mockpex.c", - "build/unit_test/test/mocks/test_can/Mockqueue.c", - "build/unit_test/test/mocks/test_can/Mocktest_can_mpu_prototype_queue_create_stub.c", - "src/app/driver/can/can.c", - "tests/unit/app/driver/can/test_can.c", - "build/unit_test/test/runners/test_can_runner.c" - ] - }, - "src/app/driver/can/cbs/can_helper.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_can_helper" - ], - "sources": [ - "build/unit_test/test/mocks/test_can_helper/Mockcan.c", - "build/unit_test/test/mocks/test_can_helper/Mockdatabase.c", - "build/unit_test/test/mocks/test_can_helper/Mockdiag.c", - "build/unit_test/test/mocks/test_can_helper/Mockfoxmath.c", - "build/unit_test/test/mocks/test_can_helper/Mockimd.c", - "build/unit_test/test/mocks/test_can_helper/Mockos.c", - "src/app/driver/can/cbs/can_helper.c", - "tests/unit/app/driver/can/cbs/test_can_helper.c", - "build/unit_test/test/runners/test_can_helper_runner.c" - ] - }, - "src/app/driver/can/cbs/rx/can_cbs_rx_aerosol-sensor.c": { - "include": [ - "build/unit_test/include", - "build_unit_test/test/mocks/test_can_cbs_rx_aerosol-sensor" - ], - "sources": [ - "build/unit_test/test/mocks/test_can_cbs_rx_aerosol-sensor/Mockcan.c", - "build/unit_test/test/mocks/test_can_cbs_rx_aerosol-sensor/Mockdatabase.c", - "build/unit_test/test/mocks/test_can_cbs_rx_aerosol-sensor/Mockdiag.c", - "build/unit_test/test/mocks/test_can_cbs_rx_aerosol-sensor/Mockfoxmath.c", - "build/unit_test/test/mocks/test_can_cbs_rx_aerosol-sensor/Mockimd.c", - "build/unit_test/test/mocks/test_can_cbs_rx_aerosol-sensor/Mockos.c", - "src/app/driver/can/cbs/rx/can_cbs_rx_aerosol-sensor.c", - "test/unit/app/driver/can/cbs/rx/test_can_cbs_rx_aerosol-sensor.c", - "build_unit_test/test/runners/test_can_cbs_rx_aerosol-sensor_runner.c" - ] - }, - "src/app/driver/can/cbs/rx/can_cbs_rx_bms-state-request.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_can_cbs_rx_bms-state-request" - ], - "sources": [ - "build/unit_test/test/mocks/test_can_cbs_rx_bms-state-request/Mockbal.c", - "build/unit_test/test/mocks/test_can_cbs_rx_bms-state-request/Mockbal_cfg.c", - "build/unit_test/test/mocks/test_can_cbs_rx_bms-state-request/Mockbms_cfg.c", - "build/unit_test/test/mocks/test_can_cbs_rx_bms-state-request/Mockcan.c", - "build/unit_test/test/mocks/test_can_cbs_rx_bms-state-request/Mockdatabase.c", - "build/unit_test/test/mocks/test_can_cbs_rx_bms-state-request/Mockdiag.c", - "build/unit_test/test/mocks/test_can_cbs_rx_bms-state-request/Mockfoxmath.c", - "build/unit_test/test/mocks/test_can_cbs_rx_bms-state-request/Mockimd.c", - "build/unit_test/test/mocks/test_can_cbs_rx_bms-state-request/Mockos.c", - "build/unit_test/test/mocks/test_can_cbs_rx_bms-state-request/Mocksys_mon.c", - "src/app/driver/can/cbs/rx/can_cbs_rx_bms-state-request.c", - "tests/unit/app/driver/can/cbs/rx/test_can_cbs_rx_bms-state-request.c", - "build/unit_test/test/runners/test_can_cbs_rx_bms-state-request_runner.c" - ] - }, - "src/app/driver/can/cbs/rx/can_cbs_rx_current-sensor.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_can_cbs_rx_current-sensor" - ], - "sources": [ - "build/unit_test/test/mocks/test_can_cbs_rx_current-sensor/Mockcan.c", - "build/unit_test/test/mocks/test_can_cbs_rx_current-sensor/Mockdatabase.c", - "build/unit_test/test/mocks/test_can_cbs_rx_current-sensor/Mockdiag.c", - "build/unit_test/test/mocks/test_can_cbs_rx_current-sensor/Mockfoxmath.c", - "build/unit_test/test/mocks/test_can_cbs_rx_current-sensor/Mockimd.c", - "build/unit_test/test/mocks/test_can_cbs_rx_current-sensor/Mockos.c", - "src/app/driver/can/cbs/rx/can_cbs_rx_current-sensor.c", - "tests/unit/app/driver/can/cbs/rx/test_can_cbs_rx_current-sensor.c", - "build/unit_test/test/runners/test_can_cbs_rx_current-sensor_runner.c" - ] - }, - "src/app/driver/can/cbs/rx/can_cbs_rx_debug.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_can_cbs_rx_debug" - ], - "sources": [ - "build/unit_test/test/mocks/test_can_cbs_rx_debug/Mockcan.c", - "build/unit_test/test/mocks/test_can_cbs_rx_debug/Mockcan_cbs_tx_debug-response.c", - "build/unit_test/test/mocks/test_can_cbs_rx_debug/Mockcan_cbs_tx_unsupported-message.c", - "build/unit_test/test/mocks/test_can_cbs_rx_debug/Mockdatabase.c", - "build/unit_test/test/mocks/test_can_cbs_rx_debug/Mockdiag.c", - "build/unit_test/test/mocks/test_can_cbs_rx_debug/Mockfoxmath.c", - "build/unit_test/test/mocks/test_can_cbs_rx_debug/Mockfram.c", - "build/unit_test/test/mocks/test_can_cbs_rx_debug/Mockimd.c", - "build/unit_test/test/mocks/test_can_cbs_rx_debug/Mockos.c", - "build/unit_test/test/mocks/test_can_cbs_rx_debug/Mockreset.c", - "src/app/driver/can/cbs/rx/can_cbs_rx_debug.c", - "tests/unit/app/driver/can/cbs/rx/test_can_cbs_rx_debug.c", - "build/unit_test/test/runners/test_can_cbs_rx_debug_runner.c" - ] - }, - "src/app/driver/can/cbs/rx/can_cbs_rx_imd-info.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_can_cbs_rx_imd-info" - ], - "sources": [ - "build/unit_test/test/mocks/test_can_cbs_rx_imd-info/Mockcan.c", - "build/unit_test/test/mocks/test_can_cbs_rx_imd-info/Mockdatabase.c", - "build/unit_test/test/mocks/test_can_cbs_rx_imd-info/Mockdiag.c", - "build/unit_test/test/mocks/test_can_cbs_rx_imd-info/Mockfoxmath.c", - "build/unit_test/test/mocks/test_can_cbs_rx_imd-info/Mockimd.c", - "build/unit_test/test/mocks/test_can_cbs_rx_imd-info/Mockos.c", - "src/app/driver/can/cbs/rx/can_cbs_rx_imd-info.c", - "tests/unit/app/driver/can/cbs/rx/test_can_cbs_rx_imd-info.c", - "build/unit_test/test/runners/test_can_cbs_rx_imd-info_runner.c" - ] - }, - "src/app/driver/can/cbs/rx/can_cbs_rx_imd-response.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_can_cbs_rx_imd-response" - ], - "sources": [ - "build/unit_test/test/mocks/test_can_cbs_rx_imd-response/Mockcan.c", - "build/unit_test/test/mocks/test_can_cbs_rx_imd-response/Mockdatabase.c", - "build/unit_test/test/mocks/test_can_cbs_rx_imd-response/Mockdiag.c", - "build/unit_test/test/mocks/test_can_cbs_rx_imd-response/Mockfoxmath.c", - "build/unit_test/test/mocks/test_can_cbs_rx_imd-response/Mockimd.c", - "build/unit_test/test/mocks/test_can_cbs_rx_imd-response/Mockos.c", - "src/app/driver/can/cbs/tx/can_cbs_rx_imd-response.c", - "tests/unit/app/driver/can/cbs/rx/test_can_cbs_rx_imd-response.c", - "build/unit_test/test/runners/test_can_cbs_rx_imd-response_runner.c" - ] - }, - "src/app/driver/can/cbs/tx/can_cbs_tx_bms-state-details.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_can_cbs_tx_bms_state" - ], - "sources": [ - "build/unit_test/test/mocks/test_can_cbs_tx_bms-state-details/Mockbms.c", - "build/unit_test/test/mocks/test_can_cbs_tx_bms-state-details/Mockcan.c", - "build/unit_test/test/mocks/test_can_cbs_tx_bms-state-details/Mockdatabase.c", - "build/unit_test/test/mocks/test_can_cbs_tx_bms-state-details/Mockdiag.c", - "build/unit_test/test/mocks/test_can_cbs_tx_bms-state-details/Mockfoxmath.c", - "build/unit_test/test/mocks/test_can_cbs_tx_bms-state-details/Mockimd.c", - "build/unit_test/test/mocks/test_can_cbs_tx_bms-state-details/Mockos.c", - "build/unit_test/test/mocks/test_can_cbs_tx_bms-state-details/Mocksys_mon.c", - "src/app/driver/can/cbs/tx/can_cbs_tx_bms-state-details.c", - "tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_bms-state-details.c", - "build/unit_test/test/runners/test_can_cbs_tx_bms-state-details_runner.c" - ] - }, - "src/app/driver/can/cbs/tx/can_cbs_tx_bms-state.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_can_cbs_tx_bms_state" - ], - "sources": [ - "build/unit_test/test/mocks/test_can_cbs_tx_bms-state/Mockbms.c", - "build/unit_test/test/mocks/test_can_cbs_tx_bms-state/Mockcan.c", - "build/unit_test/test/mocks/test_can_cbs_tx_bms-state/Mockdatabase.c", - "build/unit_test/test/mocks/test_can_cbs_tx_bms-state/Mockdiag.c", - "build/unit_test/test/mocks/test_can_cbs_tx_bms-state/Mockfoxmath.c", - "build/unit_test/test/mocks/test_can_cbs_tx_bms-state/Mockimd.c", - "build/unit_test/test/mocks/test_can_cbs_tx_bms-state/Mockos.c", - "build/unit_test/test/mocks/test_can_cbs_tx_bms-state/Mocksys_mon.c", - "src/app/driver/can/cbs/tx/can_cbs_tx_bms-state.c", - "tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_bms-state.c", - "build/unit_test/test/runners/test_can_cbs_tx_bms-state_runner.c" - ] - }, - "src/app/driver/can/cbs/tx/can_cbs_tx_cell-temperatures.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_can_cbs_tx_cell-temperatures" - ], - "sources": [ - "build/unit_test/test/mocks/test_can_cbs_tx_cell-temperatures/Mockcan.c", - "build/unit_test/test/mocks/test_can_cbs_tx_cell-temperatures/Mockdatabase.c", - "build/unit_test/test/mocks/test_can_cbs_tx_cell-temperatures/Mockdiag.c", - "build/unit_test/test/mocks/test_can_cbs_tx_cell-temperatures/Mockfoxmath.c", - "build/unit_test/test/mocks/test_can_cbs_tx_cell-temperatures/Mockimd.c", - "build/unit_test/test/mocks/test_can_cbs_tx_cell-temperatures/Mockos.c", - "src/app/driver/can/cbs/tx/can_cbs_tx_cell-temperatures.c", - "tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_cell-temperatures.c", - "build/unit_test/test/runners/test_can_cbs_tx_cell-temperatures_runner.c" - ] - }, - "src/app/driver/can/cbs/tx/can_cbs_tx_cell-voltages.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_can_cbs_tx_cell-voltages" - ], - "sources": [ - "build/unit_test/test/mocks/test_can_cbs_tx_cell-voltages/Mockcan.c", - "build/unit_test/test/mocks/test_can_cbs_tx_cell-voltages/Mockdatabase.c", - "build/unit_test/test/mocks/test_can_cbs_tx_cell-voltages/Mockdiag.c", - "build/unit_test/test/mocks/test_can_cbs_tx_cell-voltages/Mockfoxmath.c", - "build/unit_test/test/mocks/test_can_cbs_tx_cell-voltages/Mockimd.c", - "build/unit_test/test/mocks/test_can_cbs_tx_cell-voltages/Mockos.c", - "src/app/driver/can/cbs/tx/can_cbs_tx_cell-voltages.c", - "tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_cell-voltages.c", - "build/unit_test/test/runners/test_can_cbs_tx_cell-voltages_runner.c" - ] - }, - "src/app/driver/can/cbs/tx/can_cbs_tx_crash-dump.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_can_cbs_tx_crash-dump" - ], - "sources": [ - "build/unit_test/test/mocks/test_can_cbs_tx_crash-dump/Mockcan.c", - "src/app/driver/can/cbs/tx/can_cbs_tx_crash-dump.c", - "tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_crash-dump.c", - "build/unit_test/test/runners/test_can_cbs_tx_crash-dump_runner.c" - ] - }, - "src/app/driver/can/cbs/tx/can_cbs_tx_debug-response.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_can_cbs_tx_debug-response" - ], - "sources": [ - "build/unit_test/test/mocks/test_can_cbs_tx_debug-response/Mockcan.c", - "build/unit_test/test/mocks/test_can_cbs_tx_debug-response/Mockfoxmath.c", - "build/unit_test/test/mocks/test_can_cbs_tx_debug-response/Mockrtc.c", - "src/app/driver/can/cbs/tx/can_cbs_tx_debug-response.c", - "tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_debug-response.c", - "build/unit_test/test/runners/test_can_cbs_tx_debug-response_runner.c" - ] - }, - "src/app/driver/can/cbs/tx/can_cbs_tx_debug-unsupported-multiplexer-values.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_can_cbs_tx_debug-unsupported-multiplexer-values" - ], - "sources": [ - "build/unit_test/test/mocks/test_can_cbs_tx_debug-unsupported-multiplexer-values/Mockcan.c", - "build/unit_test/test/mocks/test_can_cbs_tx_debug-unsupported-multiplexer-values/Mockcan_helper.c", - "build/unit_test/test/mocks/test_can_cbs_tx_debug-unsupported-multiplexer-values/Mockdatabase.c", - "build/unit_test/test/mocks/test_can_cbs_tx_debug-unsupported-multiplexer-values/Mockdiag.c", - "build/unit_test/test/mocks/test_can_cbs_tx_debug-unsupported-multiplexer-values/Mockfoxmath.c", - "build/unit_test/test/mocks/test_can_cbs_tx_debug-unsupported-multiplexer-values/Mockimd.c", - "build/unit_test/test/mocks/test_can_cbs_tx_debug-unsupported-multiplexer-values/Mockos.c", - "src/app/driver/can/cbs/tx/can_cbs_tx_debug-unsupported-multiplexer-values.c", - "tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_debug-unsupported-multiplexer-values.c", - "build/unit_test/test/runners/test_can_cbs_tx_debug-unsupported-multiplexer-values_runner.c" - ] - }, - "src/app/driver/can/cbs/tx/can_cbs_tx_imd-request.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_can_cbs_tx_imd-request" - ], - "sources": [ - "build/unit_test/test/mocks/test_can_cbs_tx_imd-request/Mockcan.c", - "build/unit_test/test/mocks/test_can_cbs_tx_imd-request/Mockdatabase.c", - "build/unit_test/test/mocks/test_can_cbs_tx_imd-request/Mockdiag.c", - "build/unit_test/test/mocks/test_can_cbs_tx_imd-request/Mockfoxmath.c", - "build/unit_test/test/mocks/test_can_cbs_tx_imd-request/Mockimd.c", - "build/unit_test/test/mocks/test_can_cbs_tx_imd-request/Mockos.c", - "src/app/driver/can/cbs/tx/can_cbs_tx_imd-request.c", - "tests/unit/app/driver/can/cbs/rx/test_can_cbs_tx_imd-request.c", - "build/unit_test/test/runners/test_can_cbs_tx_imd-request_runner.c" - ] - }, - "src/app/driver/can/cbs/tx/can_cbs_tx_pack-limits.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_can_cbs_tx_pack-limits" - ], - "sources": [ - "build/unit_test/test/mocks/test_can_cbs_tx_pack-limits/Mockcan.c", - "build/unit_test/test/mocks/test_can_cbs_tx_pack-limits/Mockdatabase.c", - "build/unit_test/test/mocks/test_can_cbs_tx_pack-limits/Mockdiag.c", - "build/unit_test/test/mocks/test_can_cbs_tx_pack-limits/Mockfoxmath.c", - "build/unit_test/test/mocks/test_can_cbs_tx_pack-limits/Mockimd.c", - "build/unit_test/test/mocks/test_can_cbs_tx_pack-limits/Mockos.c", - "src/app/driver/can/cbs/tx/can_cbs_tx_pack-limits.c", - "tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_pack-limits.c", - "build/unit_test/test/runners/test_can_cbs_tx_pack-limits_runner.c" - ] - }, - "src/app/driver/can/cbs/tx/can_cbs_tx_pack-minimum-maximum-values.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_can_cbs_tx_pack-minimum-maximum-values" - ], - "sources": [ - "build/unit_test/test/mocks/test_can_cbs_tx_pack-minimum-maximum-values/Mockbms.c", - "build/unit_test/test/mocks/test_can_cbs_tx_pack-minimum-maximum-values/Mockcan.c", - "build/unit_test/test/mocks/test_can_cbs_tx_pack-minimum-maximum-values/Mockdatabase.c", - "build/unit_test/test/mocks/test_can_cbs_tx_pack-minimum-maximum-values/Mockdiag.c", - "build/unit_test/test/mocks/test_can_cbs_tx_pack-minimum-maximum-values/Mockfoxmath.c", - "build/unit_test/test/mocks/test_can_cbs_tx_pack-minimum-maximum-values/Mockimd.c", - "build/unit_test/test/mocks/test_can_cbs_tx_pack-minimum-maximum-values/Mockos.c", - "src/app/driver/can/cbs/tx/can_cbs_tx_pack-minimum-maximum-values.c", - "tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_pack-minimum-maximum-values.c", - "build/unit_test/test/runners/test_can_cbs_tx_pack-minimum-maximum-values_runner.c" - ] - }, - "src/app/driver/can/cbs/tx/can_cbs_tx_pack-state-estimation.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_can_cbs_tx_pack-state-estimation" - ], - "sources": [ - "build/unit_test/test/mocks/test_can_cbs_tx_pack-state-estimation/Mockbms.c", - "build/unit_test/test/mocks/test_can_cbs_tx_pack-state-estimation/Mockcan.c", - "build/unit_test/test/mocks/test_can_cbs_tx_pack-state-estimation/Mockdatabase.c", - "build/unit_test/test/mocks/test_can_cbs_tx_pack-state-estimation/Mockdiag.c", - "build/unit_test/test/mocks/test_can_cbs_tx_pack-state-estimation/Mockfoxmath.c", - "build/unit_test/test/mocks/test_can_cbs_tx_pack-state-estimation/Mockimd.c", - "build/unit_test/test/mocks/test_can_cbs_tx_pack-state-estimation/Mockos.c", - "src/app/driver/can/cbs/tx/can_cbs_tx_pack-state-estimation.c", - "tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_pack-state-estimation.c", - "build/unit_test/test/runners/test_can_cbs_tx_pack-state-estimation_runner.c" - ] - }, - "src/app/driver/can/cbs/tx/can_cbs_tx_pack-values-p0.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_can_cbs_tx_pack-values-p0" - ], - "sources": [ - "build/unit_test/test/mocks/test_can_cbs_tx_pack-values-p0/Mockcan.c", - "build/unit_test/test/mocks/test_can_cbs_tx_pack-values-p0/Mockdatabase.c", - "build/unit_test/test/mocks/test_can_cbs_tx_pack-values-p0/Mockdiag.c", - "build/unit_test/test/mocks/test_can_cbs_tx_pack-values-p0/Mockfoxmath.c", - "build/unit_test/test/mocks/test_can_cbs_tx_pack-values-p0/Mockimd.c", - "build/unit_test/test/mocks/test_can_cbs_tx_pack-values-p0/Mockos.c", - "src/app/driver/can/cbs/tx/can_cbs_tx_pack-values-p0.c", - "tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_pack-values-p0.c", - "build/unit_test/test/runners/test_can_cbs_tx_pack-values-p0_runner.c" - ] - }, - "src/app/driver/can/cbs/tx/can_cbs_tx_pack-values-p1.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_can_cbs_tx_pack-values" - ], - "sources": [ - "build/unit_test/test/mocks/test_can_cbs_tx_pack-values/Mockcan.c", - "build/unit_test/test/mocks/test_can_cbs_tx_pack-values/Mockdatabase.c", - "build/unit_test/test/mocks/test_can_cbs_tx_pack-values/Mockdiag.c", - "build/unit_test/test/mocks/test_can_cbs_tx_pack-values/Mockfoxmath.c", - "build/unit_test/test/mocks/test_can_cbs_tx_pack-values/Mockimd.c", - "build/unit_test/test/mocks/test_can_cbs_tx_pack-values/Mockos.c", - "src/app/driver/can/cbs/tx/can_cbs_tx_pack-values-p1.c", - "tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_pack-values.c", - "build/unit_test/test/runners/test_can_cbs_tx_pack-values_runner.c" - ] - }, - "src/app/driver/can/cbs/tx/can_cbs_tx_string-minimum-maximum-values.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_can_cbs_tx_string-minimum-maximum-values" - ], - "sources": [ - "build/unit_test/test/mocks/test_can_cbs_tx_string-minimum-maximum-values/Mockbms.c", - "build/unit_test/test/mocks/test_can_cbs_tx_string-minimum-maximum-values/Mockcan.c", - "build/unit_test/test/mocks/test_can_cbs_tx_string-minimum-maximum-values/Mockdatabase.c", - "build/unit_test/test/mocks/test_can_cbs_tx_string-minimum-maximum-values/Mockdiag.c", - "build/unit_test/test/mocks/test_can_cbs_tx_string-minimum-maximum-values/Mockfoxmath.c", - "build/unit_test/test/mocks/test_can_cbs_tx_string-minimum-maximum-values/Mockimd.c", - "build/unit_test/test/mocks/test_can_cbs_tx_string-minimum-maximum-values/Mockos.c", - "src/app/driver/can/cbs/tx/can_cbs_tx_string-minimum-maximum-values.c", - "tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_string-minimum-maximum-values.c", - "build/unit_test/test/runners/test_can_cbs_tx_string-minimum-maximum-values_runner.c" - ] - }, - "src/app/driver/can/cbs/tx/can_cbs_tx_string-state-estimation.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_can_cbs_tx_string-state-estimation" - ], - "sources": [ - "build/unit_test/test/mocks/test_can_cbs_tx_string-state-estimation/Mockbms.c", - "build/unit_test/test/mocks/test_can_cbs_tx_string-state-estimation/Mockcan.c", - "build/unit_test/test/mocks/test_can_cbs_tx_string-state-estimation/Mockdatabase.c", - "build/unit_test/test/mocks/test_can_cbs_tx_string-state-estimation/Mockdiag.c", - "build/unit_test/test/mocks/test_can_cbs_tx_string-state-estimation/Mockfoxmath.c", - "build/unit_test/test/mocks/test_can_cbs_tx_string-state-estimation/Mockimd.c", - "build/unit_test/test/mocks/test_can_cbs_tx_string-state-estimation/Mockos.c", - "src/app/driver/can/cbs/tx/can_cbs_tx_string-state-estimation.c", - "tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_string-state-estimation.c", - "build/unit_test/test/runners/test_can_cbs_tx_string-state-estimation_runner.c" - ] - }, - "src/app/driver/can/cbs/tx/can_cbs_tx_string-state.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_can_cbs_tx_string-state" - ], - "sources": [ - "build/unit_test/test/mocks/test_can_cbs_tx_string-state/Mockcan.c", - "build/unit_test/test/mocks/test_can_cbs_tx_string-state/Mockdatabase.c", - "build/unit_test/test/mocks/test_can_cbs_tx_string-state/Mockdiag.c", - "build/unit_test/test/mocks/test_can_cbs_tx_string-state/Mockfoxmath.c", - "build/unit_test/test/mocks/test_can_cbs_tx_string-state/Mockimd.c", - "build/unit_test/test/mocks/test_can_cbs_tx_string-state/Mockos.c", - "src/app/driver/can/cbs/tx/can_cbs_tx_string-state.c", - "tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_string-state.c", - "build/unit_test/test/runners/test_can_cbs_tx_string-state_runner.c" - ] - }, - "src/app/driver/can/cbs/tx/can_cbs_tx_string-values-p0.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_can_cbs_tx_string-values-p0" - ], - "sources": [ - "build/unit_test/test/mocks/test_can_cbs_tx_string-values-p0/Mockcan.c", - "build/unit_test/test/mocks/test_can_cbs_tx_string-values-p0/Mockdatabase.c", - "build/unit_test/test/mocks/test_can_cbs_tx_string-values-p0/Mockdiag.c", - "build/unit_test/test/mocks/test_can_cbs_tx_string-values-p0/Mockfoxmath.c", - "build/unit_test/test/mocks/test_can_cbs_tx_string-values-p0/Mockimd.c", - "build/unit_test/test/mocks/test_can_cbs_tx_string-values-p0/Mockos.c", - "src/app/driver/can/cbs/tx/can_cbs_tx_string-values-p0.c", - "tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_string-values-p0.c", - "build/unit_test/test/runners/test_can_cbs_tx_string-values-p0_runner.c" - ] - }, - "src/app/driver/can/cbs/tx/can_cbs_tx_string-values-p1.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_can_cbs_tx_string-values" - ], - "sources": [ - "build/unit_test/test/mocks/test_can_cbs_tx_string-values/Mockcan.c", - "build/unit_test/test/mocks/test_can_cbs_tx_string-values/Mockdatabase.c", - "build/unit_test/test/mocks/test_can_cbs_tx_string-values/Mockdiag.c", - "build/unit_test/test/mocks/test_can_cbs_tx_string-values/Mockfoxmath.c", - "build/unit_test/test/mocks/test_can_cbs_tx_string-values/Mockimd.c", - "build/unit_test/test/mocks/test_can_cbs_tx_string-values/Mockos.c", - "src/app/driver/can/cbs/tx/can_cbs_tx_string-values-p1.c", - "tests/unit/app/driver/can/cbs/tx/test_can_cbs_tx_string-values.c", - "build/unit_test/test/runners/test_can_cbs_tx_string-values_runner.c" - ] - }, - "src/app/driver/checksum/checksum.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_checksum" - ], - "sources": [ - "src/app/driver/checksum/checksum.c", - "tests/unit/app/driver/checksum/test_checksum.c", - "build/unit_test/test/runners/test_checksum_runner.c" - ] - }, - "src/app/driver/config/can_cfg.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_can_cfg" - ], - "sources": [ - "build/unit_test/test/mocks/test_can_cfg/Mockcan.c", - "build/unit_test/test/mocks/test_can_cfg/Mockdatabase.c", - "build/unit_test/test/mocks/test_can_cfg/Mockdiag.c", - "build/unit_test/test/mocks/test_can_cfg/Mockfoxmath.c", - "build/unit_test/test/mocks/test_can_cfg/Mockftask.c", - "build/unit_test/test/mocks/test_can_cfg/Mockimd.c", - "build/unit_test/test/mocks/test_can_cfg/Mockmpu_prototypes.c", - "build/unit_test/test/mocks/test_can_cfg/Mockos.c", - "src/app/driver/config/can_cfg.c", - "tests/unit/app/driver/config/test_can_cfg.c", - "build/unit_test/test/runners/test_can_cfg_runner.c" - ] - }, - "src/app/driver/config/can_cfg_rx.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_can_cfg_rx" - ], - "sources": [ - "build/unit_test/test/mocks/test_can_cfg_rx/Mockcan.c", - "build/unit_test/test/mocks/test_can_cfg_rx/Mockcan_cbs_rx.c", - "build/unit_test/test/mocks/test_can_cfg_rx/Mockdatabase.c", - "build/unit_test/test/mocks/test_can_cfg_rx/Mockdiag.c", - "build/unit_test/test/mocks/test_can_cfg_rx/Mockfoxmath.c", - "build/unit_test/test/mocks/test_can_cfg_rx/Mockftask.c", - "build/unit_test/test/mocks/test_can_cfg_rx/Mockimd.c", - "build/unit_test/test/mocks/test_can_cfg_rx/Mockmpu_prototypes.c", - "build/unit_test/test/mocks/test_can_cfg_rx/Mockos.c", - "src/app/driver/config/can_cfg_rx.c", - "tests/unit/app/driver/config/test_can_cfg_rx.c", - "build/unit_test/test/runners/test_can_cfg_rx_runner.c" - ] - }, - "src/app/driver/config/can_cfg_tx.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_can_cfg_tx" - ], - "sources": [ - "build/unit_test/test/mocks/test_can_cfg_tx/Mockcan.c", - "build/unit_test/test/mocks/test_can_cfg_tx/Mockcan_cbs_tx.c", - "build/unit_test/test/mocks/test_can_cfg_tx/Mockdatabase.c", - "build/unit_test/test/mocks/test_can_cfg_tx/Mockdiag.c", - "build/unit_test/test/mocks/test_can_cfg_tx/Mockfoxmath.c", - "build/unit_test/test/mocks/test_can_cfg_tx/Mockftask.c", - "build/unit_test/test/mocks/test_can_cfg_tx/Mockimd.c", - "build/unit_test/test/mocks/test_can_cfg_tx/Mockmpu_prototypes.c", - "build/unit_test/test/mocks/test_can_cfg_tx/Mockos.c", - "src/app/driver/config/can_cfg_tx.c", - "tests/unit/app/driver/config/test_can_cfg_tx.c", - "build/unit_test/test/runners/test_can_cfg_tx_runner.c" - ] - }, - "src/app/driver/config/contactor_cfg.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_contactor_cfg" - ], - "sources": [ - "src/app/driver/config/contactor_cfg.c", - "tests/unit/app/driver/config/test_contactor_cfg.c", - "build/unit_test/test/runners/test_contactor_cfg_runner.c" - ] - }, - "src/app/driver/config/dma_cfg.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_dma_cfg" - ], - "sources": [ - "src/app/driver/config/dma_cfg.c", - "tests/unit/app/driver/config/test_dma_cfg.c", - "build/unit_test/test/runners/test_dma_cfg_runner.c" - ] - }, - "src/app/driver/config/fram_cfg.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_fram_cfg" - ], - "sources": [ - "src/app/driver/config/fram_cfg.c", - "tests/unit/app/driver/config/test_fram_cfg.c", - "build/unit_test/test/runners/test_fram_cfg_runner.c" - ] - }, - "src/app/driver/config/pex_cfg.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_pex_cfg" - ], - "sources": [ - "src/app/driver/config/pex_cfg.c", - "tests/unit/app/driver/config/test_pex_cfg.c", - "build/unit_test/test/runners/test_pex_cfg_runner.c" - ] - }, - "src/app/driver/config/spi_cfg.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_spi_cfg" - ], - "sources": [ - "src/app/driver/config/spi_cfg.c", - "tests/unit/app/driver/config/test_spi_cfg.c", - "build/unit_test/test/runners/test_spi_cfg_runner.c" - ] - }, - "src/app/driver/config/sps_cfg.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_sps_cfg" - ], - "sources": [ - "src/app/driver/config/sps_cfg.c", - "tests/unit/app/driver/config/test_sps_cfg.c", - "build/unit_test/test/runners/test_sps_cfg_runner.c" - ] - }, - "src/app/driver/contactor/contactor.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_contactor" - ], - "sources": [ - "build/unit_test/test/mocks/test_contactor/Mockcontactor_cfg.c", - "build/unit_test/test/mocks/test_contactor/Mockdiag.c", - "build/unit_test/test/mocks/test_contactor/Mockfassert.c", - "build/unit_test/test/mocks/test_contactor/Mockio.c", - "build/unit_test/test/mocks/test_contactor/Mockmcu.c", - "build/unit_test/test/mocks/test_contactor/Mocksps.c", - "build/unit_test/test/mocks/test_contactor/Mocksps_cfg.c", - "src/app/driver/contactor/contactor.c", - "tests/unit/app/driver/contactor/test_contactor.c", - "build/unit_test/test/runners/test_contactor_runner.c" - ] - }, - "src/app/driver/crc/crc.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_crc", - "src/app/driver/crc", - "src/app/application/config", - "src/app/driver/mcu", - "src/app/engine/config", - "src/app/engine/database", - "src/app/main/include", - "src/app/main/include/config", - "src/app/task/os", - "src/os/freertos/include", - "src/os/freertos/portable/ccs/arm_cortex-r5" - ], - "sources": [ - "build/unit_test/test/mocks/test_crc/Mockfassert.c", - "src/app/driver/crc/crc.c", - "tests/unit/app/driver/crc/test_crc.c", - "build/unit_test/test/runners/test_crc_runner.c" - ] - }, - "src/app/driver/dma/dma.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_dma" - ], - "sources": [ - "build/unit_test/test/mocks/test_dma/MockHL_i2c.c", - "build/unit_test/test/mocks/test_dma/MockHL_spi.c", - "build/unit_test/test/mocks/test_dma/MockHL_sys_dma.c", - "build/unit_test/test/mocks/test_dma/Mockafe_dma.c", - "build/unit_test/test/mocks/test_dma/Mocki2c.c", - "build/unit_test/test/mocks/test_dma/Mockio.c", - "build/unit_test/test/mocks/test_dma/Mockspi.c", - "build/unit_test/test/mocks/test_dma/Mocktask.c", - "src/app/driver/dma/dma.c", - "tests/unit/app/driver/dma/test_dma.c", - "build/unit_test/test/runners/test_dma_runner.c" - ] - }, - "src/app/driver/foxmath/foxmath.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_foxmath", - "src/app/driver/foxmath", - "src/app/application/config", - "src/app/driver/mcu", - "src/app/engine/config", - "src/app/engine/database", - "src/app/main/include", - "src/app/main/include/config", - "src/app/task/os", - "src/os/freertos/include", - "src/os/freertos/portable/ccs/arm_cortex-r5" - ], - "sources": [ - "src/app/driver/foxmath/foxmath.c", - "tests/unit/app/driver/foxmath/test_foxmath.c", - "build/unit_test/test/runners/test_foxmath_runner.c" - ] - }, - "src/app/driver/fram/fram.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_fram" - ], - "sources": [ - "build/unit_test/test/mocks/test_fram/MockHL_spi.c", - "build/unit_test/test/mocks/test_fram/Mockcrc.c", - "build/unit_test/test/mocks/test_fram/Mockdiag.c", - "build/unit_test/test/mocks/test_fram/Mockio.c", - "build/unit_test/test/mocks/test_fram/Mockmcu.c", - "build/unit_test/test/mocks/test_fram/Mockspi.c", - "src/app/driver/fram/fram.c", - "tests/unit/app/driver/fram/test_fram.c", - "build/unit_test/test/runners/test_fram_runner.c" - ] - }, - "src/app/driver/htsensor/htsensor.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_htsensor" - ], - "sources": [ - "build/unit_test/test/mocks/test_htsensor/MockHL_i2c.c", - "build/unit_test/test/mocks/test_htsensor/MockHL_sys_dma.c", - "build/unit_test/test/mocks/test_htsensor/Mockdatabase.c", - "build/unit_test/test/mocks/test_htsensor/Mocki2c.c", - "build/unit_test/test/mocks/test_htsensor/Mockos.c", - "src/app/driver/htsensor/htsensor.c", - "tests/unit/app/driver/htsensor/test_htsensor.c", - "build/unit_test/test/runners/test_htsensor_runner.c" - ] - }, - "src/app/driver/i2c/i2c.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_i2c" - ], - "sources": [ - "build/unit_test/test/mocks/test_i2c/MockHL_i2c.c", - "build/unit_test/test/mocks/test_i2c/MockHL_sys_dma.c", - "build/unit_test/test/mocks/test_i2c/Mockmcu.c", - "build/unit_test/test/mocks/test_i2c/Mockos.c", - "build/unit_test/test/mocks/test_i2c/Mocktask.c", - "src/app/driver/i2c/i2c.c", - "tests/unit/app/driver/i2c/test_i2c.c", - "build/unit_test/test/runners/test_i2c_runner.c" - ] - }, - "src/app/driver/imd/bender/ir155/bender_ir155.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_bender_ir155" - ], - "sources": [ - "build/unit_test/test/mocks/test_bender_ir155/Mockbender_ir155_helper.c", - "build/unit_test/test/mocks/test_bender_ir155/Mockdatabase.c", - "build/unit_test/test/mocks/test_bender_ir155/Mockdiag.c", - "build/unit_test/test/mocks/test_bender_ir155/Mockfram.c", - "build/unit_test/test/mocks/test_bender_ir155/Mockio.c", - "build/unit_test/test/mocks/test_bender_ir155/Mockos.c", - "src/app/driver/imd/bender/ir155/bender_ir155.c", - "tests/unit/app/driver/imd/bender/ir155/test_bender_ir155.c", - "build/unit_test/test/runners/test_bender_ir155_runner.c" - ] - }, - "src/app/driver/imd/bender/ir155/bender_ir155_helper.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_bender_ir155_helper" - ], - "sources": [ - "build/unit_test/test/mocks/test_bender_ir155_helper/Mockfram.c", - "build/unit_test/test/mocks/test_bender_ir155_helper/Mockio.c", - "build/unit_test/test/mocks/test_bender_ir155_helper/Mockpwm.c", - "src/app/driver/imd/bender/ir155/bender_ir155_helper.c", - "tests/unit/app/driver/imd/bender/ir155/test_bender_ir155_helper.c", - "build/unit_test/test/runners/test_bender_ir155_helper_runner.c" - ] - }, - "src/app/driver/imd/bender/iso165c/bender_iso165c.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_bender_iso165c" - ], - "sources": [ - "build/unit_test/test/mocks/test_bender_iso165c/Mockcan.c", - "build/unit_test/test/mocks/test_bender_iso165c/Mockcan_cfg.c", - "build/unit_test/test/mocks/test_bender_iso165c/Mockdatabase.c", - "build/unit_test/test/mocks/test_bender_iso165c/Mockdiag.c", - "build/unit_test/test/mocks/test_bender_iso165c/Mockftask.c", - "build/unit_test/test/mocks/test_bender_iso165c/Mockio.c", - "build/unit_test/test/mocks/test_bender_iso165c/Mockmcu.c", - "build/unit_test/test/mocks/test_bender_iso165c/Mockmpu_prototypes.c", - "build/unit_test/test/mocks/test_bender_iso165c/Mockos.c", - "src/app/driver/imd/bender/iso165c/bender_iso165c.c", - "tests/unit/app/driver/imd/bender/iso165c/test_bender_iso165c.c", - "build/unit_test/test/runners/test_bender_iso165c_runner.c" - ] - }, - "src/app/driver/imd/imd.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_imd" - ], - "sources": [ - "build/unit_test/test/mocks/test_imd/Mockdatabase.c", - "build/unit_test/test/mocks/test_imd/Mockdiag.c", - "build/unit_test/test/mocks/test_imd/Mockos.c", - "src/app/driver/imd/imd.c", - "tests/unit/app/driver/imd/test_imd.c", - "build/unit_test/test/runners/test_imd_runner.c" - ] - }, - "src/app/driver/imd/none/no-imd.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_no-imd" - ], - "sources": [ - "build/unit_test/test/mocks/test_no-imd/Mockdatabase.c", - "src/app/driver/imd/none/no-imd.c", - "tests/unit/app/driver/imd/none/test_no-imd.c", - "build/unit_test/test/runners/test_no-imd_runner.c" - ] - }, - "src/app/driver/interlock/interlock.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_interlock" - ], - "sources": [ - "build/unit_test/test/mocks/test_interlock/MockHL_het.c", - "build/unit_test/test/mocks/test_interlock/Mockdatabase.c", - "build/unit_test/test/mocks/test_interlock/Mockdiag.c", - "build/unit_test/test/mocks/test_interlock/Mockfassert.c", - "build/unit_test/test/mocks/test_interlock/Mockio.c", - "build/unit_test/test/mocks/test_interlock/Mockos.c", - "src/app/driver/interlock/interlock.c", - "tests/unit/app/driver/interlock/test_interlock.c", - "build/unit_test/test/runners/test_interlock_runner.c" - ] - }, - "src/app/driver/io/io.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_io" - ], - "sources": [ - "build/unit_test/test/mocks/test_io/Mockmcu.c", - "src/app/driver/io/io.c", - "tests/unit/app/driver/io/test_io.c", - "build/unit_test/test/runners/test_io_runner.c" - ] - }, - "src/app/driver/led/led.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_led" - ], - "sources": [ - "build/unit_test/test/mocks/test_led/Mockio.c", - "build/unit_test/test/mocks/test_led/Mockos.c", - "src/app/driver/led/led.c", - "tests/unit/app/driver/led/test_led.c", - "build/unit_test/test/runners/test_led_runner.c" - ] - }, - "src/app/driver/mcu/mcu.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_mcu" - ], - "sources": [ - "src/app/driver/mcu/mcu.c", - "tests/unit/app/driver/mcu/test_mcu.c", - "build/unit_test/test/runners/test_mcu_runner.c" - ] - }, - "src/app/driver/meas/meas.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_meas" - ], - "sources": [ - "build/unit_test/test/mocks/test_meas/Mockafe.c", - "src/app/driver/meas/meas.c", - "tests/unit/app/driver/meas/test_meas.c", - "build/unit_test/test/runners/test_meas_runner.c" - ] - }, - "src/app/driver/pex/pex.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_pex" - ], - "sources": [ - "build/unit_test/test/mocks/test_pex/MockHL_i2c.c", - "build/unit_test/test/mocks/test_pex/Mockdatabase.c", - "build/unit_test/test/mocks/test_pex/Mockdiag.c", - "build/unit_test/test/mocks/test_pex/Mocki2c.c", - "build/unit_test/test/mocks/test_pex/Mockos.c", - "build/unit_test/test/mocks/test_pex/Mockportmacro.c", - "src/app/driver/pex/pex.c", - "tests/unit/app/driver/pex/test_pex.c", - "build/unit_test/test/runners/test_pex_runner.c" - ] - }, - "src/app/driver/pwm/pwm.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_pwm" - ], - "sources": [ - "build/unit_test/test/mocks/test_pwm/MockHL_etpwm.c", - "src/app/driver/pwm/pwm.c", - "tests/unit/app/driver/pwm/test_pwm.c", - "build/unit_test/test/runners/test_pwm_runner.c" - ] - }, - "src/app/driver/rtc/rtc.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_rtc" - ], - "sources": [ - "build/unit_test/test/mocks/test_rtc/MockHL_i2c.c", - "build/unit_test/test/mocks/test_rtc/MockHL_sys_dma.c", - "build/unit_test/test/mocks/test_rtc/Mockdatabase.c", - "build/unit_test/test/mocks/test_rtc/Mockdiag.c", - "build/unit_test/test/mocks/test_rtc/Mocki2c.c", - "build/unit_test/test/mocks/test_rtc/Mockos.c", - "src/app/driver/rtc/rtc.c", - "tests/unit/app/driver/rtc/test_rtc.c", - "build/unit_test/test/runners/test_rtc_runner.c" - ] - }, - "src/app/driver/sbc/fs8x_driver/sbc_fs8x.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_sbc_fs8x" - ], - "sources": [ - "src/app/driver/sbc/fs8x_driver/sbc_fs8x.c", - "tests/unit/app/driver/sbc/fs8x_driver/test_sbc_fs8x.c", - "None" - ] - }, - "src/app/driver/sbc/fs8x_driver/sbc_fs8x_communication.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_sbc_fs8x_communication" - ], - "sources": [ - "src/app/driver/sbc/fs8x_driver/sbc_fs8x_communication.c", - "tests/unit/app/driver/sbc/fs8x_driver/test_sbc_fs8x_communication.c", - "None" - ] - }, - "src/app/driver/sbc/nxpfs85xx.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_nxpfs85xx" - ], - "sources": [ - "build/unit_test/test/mocks/test_nxpfs85xx/Mockdiag.c", - "build/unit_test/test/mocks/test_nxpfs85xx/Mockdma.c", - "build/unit_test/test/mocks/test_nxpfs85xx/Mockfassert.c", - "build/unit_test/test/mocks/test_nxpfs85xx/Mockfram.c", - "build/unit_test/test/mocks/test_nxpfs85xx/Mockio.c", - "build/unit_test/test/mocks/test_nxpfs85xx/Mockmaster_info.c", - "build/unit_test/test/mocks/test_nxpfs85xx/Mockmcu.c", - "build/unit_test/test/mocks/test_nxpfs85xx/Mocksbc_fs8x.c", - "build/unit_test/test/mocks/test_nxpfs85xx/Mocksbc_fs8x_communication.c", - "build/unit_test/test/mocks/test_nxpfs85xx/Mockspi.c", - "src/app/driver/sbc/nxpfs85xx.c", - "tests/unit/app/driver/sbc/test_nxpfs85xx.c", - "build/unit_test/test/runners/test_nxpfs85xx_runner.c" - ] - }, - "src/app/driver/sbc/sbc.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_sbc" - ], - "sources": [ - "build/unit_test/test/mocks/test_sbc/Mockdma.c", - "build/unit_test/test/mocks/test_sbc/Mockio.c", - "build/unit_test/test/mocks/test_sbc/Mockmcu.c", - "build/unit_test/test/mocks/test_sbc/Mocknxpfs85xx.c", - "build/unit_test/test/mocks/test_sbc/Mockos.c", - "build/unit_test/test/mocks/test_sbc/Mockportmacro.c", - "build/unit_test/test/mocks/test_sbc/Mocksbc_fs8x.c", - "build/unit_test/test/mocks/test_sbc/Mocksbc_fs8x_communication.c", - "build/unit_test/test/mocks/test_sbc/Mockspi.c", - "src/app/driver/sbc/sbc.c", - "tests/unit/app/driver/sbc/test_sbc.c", - "build/unit_test/test/runners/test_sbc_runner.c" - ] - }, - "src/app/driver/spi/spi.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_spi" - ], - "sources": [ - "build/unit_test/test/mocks/test_spi/MockHL_spi.c", - "build/unit_test/test/mocks/test_spi/MockHL_sys_dma.c", - "build/unit_test/test/mocks/test_spi/Mockdma_cfg.c", - "build/unit_test/test/mocks/test_spi/Mockio.c", - "build/unit_test/test/mocks/test_spi/Mockmcu.c", - "build/unit_test/test/mocks/test_spi/Mockos.c", - "build/unit_test/test/mocks/test_spi/Mockspi_cfg.c", - "src/app/driver/spi/spi.c", - "tests/unit/app/driver/spi/test_spi.c", - "build/unit_test/test/runners/test_spi_runner.c" - ] - }, - "src/app/driver/sps/sps.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_sps" - ], - "sources": [ - "build/unit_test/test/mocks/test_sps/Mockcontactor.c", - "build/unit_test/test/mocks/test_sps/Mockcontactor_cfg.c", - "build/unit_test/test/mocks/test_sps/Mockdatabase.c", - "build/unit_test/test/mocks/test_sps/Mockio.c", - "build/unit_test/test/mocks/test_sps/Mockmcu.c", - "build/unit_test/test/mocks/test_sps/Mockos.c", - "build/unit_test/test/mocks/test_sps/Mockpex.c", - "build/unit_test/test/mocks/test_sps/Mockpex_cfg.c", - "build/unit_test/test/mocks/test_sps/Mockspi.c", - "build/unit_test/test/mocks/test_sps/Mockspi_cfg.c", - "build/unit_test/test/mocks/test_sps/Mocksps_cfg.c", - "build/unit_test/test/mocks/test_sps/Mocksps_types.c", - "src/app/driver/sps/sps.c", - "tests/unit/app/driver/sps/test_sps.c", - "build/unit_test/test/runners/test_sps_runner.c" - ] - }, - "src/app/driver/ts/api/tsi_limits.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_tsi_limits" - ], - "sources": [ - "build/unit_test/test/mocks/test_tsi_limits/Mocktsi_plausibility_cfg.c", - "src/app/driver/ts/api/tsi_limits.c", - "tests/unit/app/driver/ts/api/test_tsi_limits.c", - "build/unit_test/test/runners/test_tsi_limits_runner.c" - ] - }, - "src/app/driver/ts/beta.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_beta" - ], - "sources": [ - "src/app/driver/ts/beta.c", - "tests/unit/app/driver/ts/test_beta.c", - "build/unit_test/test/runners/test_beta_runner.c" - ] - }, - "src/app/driver/ts/epcos/b57251v5103j060/epcos_b57251v5103j060.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_epcos_b57251v5103j060" - ], - "sources": [ - "src/app/driver/ts/epcos/b57251v5103j060/epcos_b57251v5103j060.c", - "tests/unit/app/driver/ts/epcos/b57251v5103j060/test_epcos_b57251v5103j060.c", - "build/unit_test/test/runners/test_epcos_b57251v5103j060_runner.c" - ] - }, - "src/app/driver/ts/epcos/b57251v5103j060/lookup-table/epcos_b57251v5103j060_lookup-table.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_epcos_b57251v5103j060_lookup-table" - ], - "sources": [ - "build/unit_test/test/mocks/test_epcos_b57251v5103j060_lookup-table/Mockepcos_b57251v5103j060.c", - "src/app/driver/ts/epcos/b57251v5103j060/lookup-table/epcos_b57251v5103j060_lookup-table.c", - "tests/unit/app/driver/ts/epcos/b57251v5103j060/lookup-table/test_epcos_b57251v5103j060_lookup-table.c", - "build/unit_test/test/runners/test_epcos_b57251v5103j060_lookup-table_runner.c" - ] - }, - "src/app/driver/ts/epcos/b57251v5103j060/polynomial/epcos_b57251v5103j060_polynomial.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_epcos_b57251v5103j060_polynomial" - ], - "sources": [ - "build/unit_test/test/mocks/test_epcos_b57251v5103j060_polynomial/Mockepcos_b57251v5103j060.c", - "src/app/driver/ts/epcos/b57251v5103j060/polynomial/epcos_b57251v5103j060_polynomial.c", - "tests/unit/app/driver/ts/epcos/b57251v5103j060/polynomial/test_epcos_b57251v5103j060_polynomial.c", - "build/unit_test/test/runners/test_epcos_b57251v5103j060_polynomial_runner.c" - ] - }, - "src/app/driver/ts/epcos/b57861s0103f045/epcos_b57861s0103f045.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_epcos_b57861s0103f045" - ], - "sources": [ - "src/app/driver/ts/epcos/b57861s0103f045/epcos_b57861s0103f045.c", - "tests/unit/app/driver/ts/epcos/b57861s0103f045/test_epcos_b57861s0103f045.c", - "build/unit_test/test/runners/test_epcos_b57861s0103f045_runner.c" - ] - }, - "src/app/driver/ts/epcos/b57861s0103f045/lookup-table/epcos_b57861s0103f045_lookup-table.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_epcos_b57861s0103f045_lookup-table" - ], - "sources": [ - "build/unit_test/test/mocks/test_epcos_b57861s0103f045_lookup-table/Mockepcos_b57861s0103f045.c", - "src/app/driver/ts/epcos/b57861s0103f045/lookup-table/epcos_b57861s0103f045_lookup-table.c", - "tests/unit/app/driver/ts/epcos/b57861s0103f045/lookup-table/test_epcos_b57861s0103f045_lookup-table.c", - "build/unit_test/test/runners/test_epcos_b57861s0103f045_lookup-table_runner.c" - ] - }, - "src/app/driver/ts/epcos/b57861s0103f045/polynomial/epcos_b57861s0103f045_polynomial.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_epcos_b57861s0103f045_polynomial" - ], - "sources": [ - "build/unit_test/test/mocks/test_epcos_b57861s0103f045_polynomial/Mockepcos_b57861s0103f045.c", - "src/app/driver/ts/epcos/b57861s0103f045/polynomial/epcos_b57861s0103f045_polynomial.c", - "tests/unit/app/driver/ts/epcos/b57861s0103f045/polynomial/test_epcos_b57861s0103f045_polynomial.c", - "build/unit_test/test/runners/test_epcos_b57861s0103f045_polynomial_runner.c" - ] - }, - "src/app/driver/ts/fake/none/fake_none.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_fake_none" - ], - "sources": [ - "src/app/driver/ts/fake/none/fake_none.c", - "tests/unit/app/driver/ts/fake/none/test_fake_none.c", - "build/unit_test/test/runners/test_fake_none_runner.c" - ] - }, - "src/app/driver/ts/fake/none/lookup-table/fake_none_lookup-table.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_fake_none_lookup-table" - ], - "sources": [ - "src/app/driver/ts/fake/none/lookup-table/fake_none_lookup-table.c", - "tests/unit/app/driver/ts/fake/none/lookup-table/test_fake_none_lookup-table.c", - "build/unit_test/test/runners/test_fake_none_lookup-table_runner.c" - ] - }, - "src/app/driver/ts/fake/none/polynomial/fake_none_polynomial.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_fake_none_polynomial" - ], - "sources": [ - "src/app/driver/ts/fake/none/polynomial/fake_none_polynomial.c", - "tests/unit/app/driver/ts/fake/none/polynomial/test_fake_none_polynomial.c", - "build/unit_test/test/runners/test_fake_none_polynomial_runner.c" - ] - }, - "src/app/driver/ts/murata/ncxxxxh103/lookup-table/murata_ncxxxxh103_lookup-table.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_murata_ncxxxxh103_lookup-table" - ], - "sources": [ - "build/unit_test/test/mocks/test_murata_ncxxxxh103_lookup-table/Mockmurata_ncxxxxh103.c", - "src/app/driver/ts/murata/ncxxxxh103/lookup-table/murata_ncxxxxh103_lookup-table.c", - "tests/unit/app/driver/ts/murata/ncxxxxh103/lookup-table/test_murata_ncxxxxh103_lookup-table.c", - "build/unit_test/test/runners/test_murata_ncxxxxh103_lookup-table_runner.c" - ] - }, - "src/app/driver/ts/murata/ncxxxxh103/murata_ncxxxxh103.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_murata_ncxxxxh103" - ], - "sources": [ - "src/app/driver/ts/murata/ncxxxxh103/murata_ncxxxxh103.c", - "tests/unit/app/driver/ts/murata/ncxxxxh103/test_murata_ncxxxxh103.c", - "build/unit_test/test/runners/test_murata_ncxxxxh103_runner.c" - ] - }, - "src/app/driver/ts/murata/ncxxxxh103/polynomial/murata_ncxxxxh103_polynomial.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_murata_ncxxxxh103_polynomial" - ], - "sources": [ - "build/unit_test/test/mocks/test_murata_ncxxxxh103_polynomial/Mockmurata_ncxxxxh103.c", - "src/app/driver/ts/murata/ncxxxxh103/polynomial/murata_ncxxxxh103_polynomial.c", - "tests/unit/app/driver/ts/murata/ncxxxxh103/polynomial/test_murata_ncxxxxh103_polynomial.c", - "build/unit_test/test/runners/test_murata_ncxxxxh103_polynomial_runner.c" - ] - }, - "src/app/driver/ts/vishay/ntcalug01a103g/lookup-table/vishay_ntcalug01a103g_lookup-table.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_vishay_ntcalug01a103g_lookup-table" - ], - "sources": [ - "build/unit_test/test/mocks/test_vishay_ntcalug01a103g_lookup-table/Mockvishay_ntcalug01a103g.c", - "src/app/driver/ts/vishay/ntcalug01a103g/lookup-table/vishay_ntcalug01a103g_lookup-table.c", - "tests/unit/app/driver/ts/vishay/ntcalug01a103g/lookup-table/test_vishay_ntcalug01a103g_lookup-table.c", - "build/unit_test/test/runners/test_vishay_ntcalug01a103g_lookup-table_runner.c" - ] - }, - "src/app/driver/ts/vishay/ntcalug01a103g/polynomial/vishay_ntcalug01a103g_polynomial.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_vishay_ntcalug01a103g_polynomial" - ], - "sources": [ - "build/unit_test/test/mocks/test_vishay_ntcalug01a103g_polynomial/Mockvishay_ntcalug01a103g.c", - "src/app/driver/ts/vishay/ntcalug01a103g/polynomial/vishay_ntcalug01a103g_polynomial.c", - "tests/unit/app/driver/ts/vishay/ntcalug01a103g/polynomial/test_vishay_ntcalug01a103g_polynomial.c", - "build/unit_test/test/runners/test_vishay_ntcalug01a103g_polynomial_runner.c" - ] - }, - "src/app/driver/ts/vishay/ntcalug01a103g/vishay_ntcalug01a103g.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_vishay_ntcalug01a103g" - ], - "sources": [ - "src/app/driver/ts/vishay/ntcalug01a103g/vishay_ntcalug01a103g.c", - "tests/unit/app/driver/ts/vishay/ntcalug01a103g/test_vishay_ntcalug01a103g.c", - "build/unit_test/test/runners/test_vishay_ntcalug01a103g_runner.c" - ] - }, - "src/app/driver/ts/vishay/ntcle317e4103sba/lookup-table/vishay_ntcle317e4103sba_lookup-table.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_vishay_ntcle317e4103sba_lookup-table" - ], - "sources": [ - "build/unit_test/test/mocks/test_vishay_ntcle317e4103sba_lookup-table/Mockvishay_ntcle317e4103sba.c", - "src/app/driver/ts/vishay/ntcle317e4103sba/lookup-table/vishay_ntcle317e4103sba_lookup-table.c", - "tests/unit/app/driver/ts/vishay/ntcle317e4103sba/lookup-table/test_vishay_ntcle317e4103sba_lookup-table.c", - "build/unit_test/test/runners/test_vishay_ntcle317e4103sba_lookup-table_runner.c" - ] - }, - "src/app/driver/ts/vishay/ntcle317e4103sba/vishay_ntcle317e4103sba.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_vishay_ntcle317e4103sba" - ], - "sources": [ - "src/app/driver/ts/vishay/ntcle317e4103sba/vishay_ntcle317e4103sba.c", - "tests/unit/app/driver/ts/vishay/ntcle317e4103sba/test_vishay_ntcle317e4103sba.c", - "build/unit_test/test/runners/test_vishay_ntcle317e4103sba_runner.c" - ] - }, - "src/app/driver/ts/vishay/ntcle413e2103f102l/lookup-table/vishay_ntcle413e2103f102l_lookup-table.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_vishay_ntcle413e2103f102l_lookup-table" - ], - "sources": [ - "build/unit_test/test/mocks/test_vishay_ntcle413e2103f102l_lookup-table/Mockvishay_ntcle413e2103f102l.c", - "src/app/driver/ts/vishay/ntcle413e2103f102l/lookup-table/vishay_ntcle413e2103f102l_lookup-table.c", - "tests/unit/app/driver/ts/vishay/ntcle413e2103f102l/lookup-table/test_vishay_ntcle413e2103f102l_lookup-table.c", - "build/unit_test/test/runners/test_vishay_ntcle413e2103f102l_lookup-table_runner.c" - ] - }, - "src/app/driver/ts/vishay/ntcle413e2103f102l/vishay_ntcle413e2103f102l.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_vishay_ntcle413e2103f102l" - ], - "sources": [ - "src/app/driver/ts/vishay/ntcle413e2103f102l/vishay_ntcle413e2103f102l.c", - "tests/unit/app/driver/ts/vishay/ntcle413e2103f102l/test_vishay_ntcle413e2103f102l.c", - "build/unit_test/test/runners/test_vishay_ntcle413e2103f102l_runner.c" - ] - }, - "src/app/engine/config/database_cfg.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_database_cfg" - ], - "sources": [ - "src/app/engine/config/database_cfg.c", - "tests/unit/app/engine/config/test_database_cfg.c", - "build/unit_test/test/runners/test_database_cfg_runner.c" - ] - }, - "src/app/engine/config/diag_cfg.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_diag_cfg" - ], - "sources": [ - "build/unit_test/test/mocks/test_diag_cfg/Mockdatabase.c", - "build/unit_test/test/mocks/test_diag_cfg/Mockdiag_cbs.c", - "src/app/engine/config/diag_cfg.c", - "tests/unit/app/engine/config/test_diag_cfg.c", - "build/unit_test/test/runners/test_diag_cfg_runner.c" - ] - }, - "src/app/engine/config/sys_cfg.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_sys_cfg" - ], - "sources": [ - "build/unit_test/test/mocks/test_sys_cfg/Mockcan_cbs_tx_debug-response.c", - "build/unit_test/test/mocks/test_sys_cfg/Mockcan_cfg.c", - "src/app/engine/config/sys_cfg.c", - "tests/unit/app/engine/config/test_sys_cfg.c", - "build/unit_test/test/runners/test_sys_cfg_runner.c" - ] - }, - "src/app/engine/config/sys_mon_cfg.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_sys_mon_cfg" - ], - "sources": [ - "src/app/engine/config/sys_mon_cfg.c", - "tests/unit/app/engine/config/test_sys_mon_cfg.c", - "build/unit_test/test/runners/test_sys_mon_cfg_runner.c" - ] - }, - "src/app/engine/database/database.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_database" - ], - "sources": [ - "build/unit_test/test/mocks/test_database/Mockfassert.c", - "build/unit_test/test/mocks/test_database/Mockftask.c", - "build/unit_test/test/mocks/test_database/Mockmpu_prototypes.c", - "build/unit_test/test/mocks/test_database/Mockos.c", - "src/app/engine/database/database.c", - "tests/unit/app/engine/database/test_database.c", - "build/unit_test/test/runners/test_database_runner.c" - ] - }, - "src/app/engine/database/database_helper.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_database_helper" - ], - "sources": [ - "build/unit_test/test/mocks/test_database_helper/Mockfassert.c", - "build/unit_test/test/mocks/test_database_helper/Mockmpu_prototypes.c", - "build/unit_test/test/mocks/test_database_helper/Mockos.c", - "src/app/engine/database/database_helper.c", - "tests/unit/app/engine/database/test_database_helper.c", - "build/unit_test/test/runners/test_database_helper_runner.c" - ] - }, - "src/app/engine/diag/cbs/diag_cbs_aerosol-sensor.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_diag_cbs_aerosol-sensor" - ], - "sources": [ - "build/unit_test/test/mocks/test_diag_cbs_aerosol-sensor/Mockdiag_cfg.c", - "src/app/engine/diag/cbs/diag_cbs_aerosol-sensor.c", - "tests/unit/app/engine/diag/cbs/test_diag_cbs_aerosol-sensor.c", - "build/unit_test/test/runners/test_diag_cbs_aerosol-sensor_runner.c" - ] - }, - "src/app/engine/diag/cbs/diag_cbs_afe.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_diag_cbs_afe" - ], - "sources": [ - "build/unit_test/test/mocks/test_diag_cbs_afe/Mockdiag_cfg.c", - "src/app/engine/diag/cbs/diag_cbs_afe.c", - "tests/unit/app/engine/diag/cbs/test_diag_cbs_afe.c", - "build/unit_test/test/runners/test_diag_cbs_afe_runner.c" - ] - }, - "src/app/engine/diag/cbs/diag_cbs_bms.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_diag_cbs_bms" - ], - "sources": [ - "build/unit_test/test/mocks/test_diag_cbs_bms/Mockdiag_cfg.c", - "src/app/engine/diag/cbs/diag_cbs_bms.c", - "tests/unit/app/engine/diag/cbs/test_diag_cbs_bms.c", - "build/unit_test/test/runners/test_diag_cbs_bms_runner.c" - ] - }, - "src/app/engine/diag/cbs/diag_cbs_can.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_diag_cbs_can" - ], - "sources": [ - "build/unit_test/test/mocks/test_diag_cbs_can/Mockdiag_cfg.c", - "src/app/engine/diag/cbs/diag_cbs_can.c", - "tests/unit/app/engine/diag/cbs/test_diag_cbs_can.c", - "build/unit_test/test/runners/test_diag_cbs_can_runner.c" - ] - }, - "src/app/engine/diag/cbs/diag_cbs_contactor.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_diag_cbs_contactor" - ], - "sources": [ - "build/unit_test/test/mocks/test_diag_cbs_contactor/Mockdiag_cfg.c", - "src/app/engine/diag/cbs/diag_cbs_contactor.c", - "tests/unit/app/engine/diag/cbs/test_diag_cbs_contactor.c", - "build/unit_test/test/runners/test_diag_cbs_contactor_runner.c" - ] - }, - "src/app/engine/diag/cbs/diag_cbs_current-sensor.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_diag_cbs_current-sensor" - ], - "sources": [ - "build/unit_test/test/mocks/test_diag_cbs_current-sensor/Mockdiag_cfg.c", - "src/app/engine/diag/cbs/diag_cbs_current-sensor.c", - "tests/unit/app/engine/diag/cbs/test_diag_cbs_current-sensor.c", - "build/unit_test/test/runners/test_diag_cbs_current-sensor_runner.c" - ] - }, - "src/app/engine/diag/cbs/diag_cbs_current.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_diag_cbs_current" - ], - "sources": [ - "build/unit_test/test/mocks/test_diag_cbs_current/Mockdiag_cfg.c", - "src/app/engine/diag/cbs/diag_cbs_current.c", - "tests/unit/app/engine/diag/cbs/test_diag_cbs_current.c", - "build/unit_test/test/runners/test_diag_cbs_current_runner.c" - ] - }, - "src/app/engine/diag/cbs/diag_cbs_deep-discharge.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_diag_cbs_deep-discharge" - ], - "sources": [ - "build/unit_test/test/mocks/test_diag_cbs_deep-discharge/Mockdiag_cfg.c", - "build/unit_test/test/mocks/test_diag_cbs_deep-discharge/Mockfram.c", - "src/app/engine/diag/cbs/diag_cbs_deep-discharge.c", - "tests/unit/app/engine/diag/cbs/test_diag_cbs_deep-discharge.c", - "build/unit_test/test/runners/test_diag_cbs_deep-discharge_runner.c" - ] - }, - "src/app/engine/diag/cbs/diag_cbs_dummy.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_diag_cbs_dummy" - ], - "sources": [ - "build/unit_test/test/mocks/test_diag_cbs_dummy/Mockdiag_cfg.c", - "src/app/engine/diag/cbs/diag_cbs_dummy.c", - "tests/unit/app/engine/diag/cbs/test_diag_cbs_dummy.c", - "build/unit_test/test/runners/test_diag_cbs_dummy_runner.c" - ] - }, - "src/app/engine/diag/cbs/diag_cbs_fram.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_diag_cbs_fram" - ], - "sources": [ - "build/unit_test/test/mocks/test_diag_cbs_fram/Mockdiag_cfg.c", - "src/app/engine/diag/cbs/diag_cbs_fram.c", - "tests/unit/app/engine/diag/cbs/test_diag_cbs_fram.c", - "build/unit_test/test/runners/test_diag_cbs_fram_runner.c" - ] - }, - "src/app/engine/diag/cbs/diag_cbs_i2c.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_diag_cbs_i2c" - ], - "sources": [ - "build/unit_test/test/mocks/test_diag_cbs_i2c/Mockdiag_cfg.c", - "src/app/engine/diag/cbs/diag_cbs_i2c.c", - "tests/unit/app/engine/diag/cbs/test_diag_cbs_i2c.c", - "build/unit_test/test/runners/test_diag_cbs_i2c_runner.c" - ] - }, - "src/app/engine/diag/cbs/diag_cbs_insulation.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_diag_cbs_insulation" - ], - "sources": [ - "build/unit_test/test/mocks/test_diag_cbs_insulation/Mockdiag_cfg.c", - "src/app/engine/diag/cbs/diag_cbs_insulation.c", - "tests/unit/app/engine/diag/cbs/test_diag_cbs_insulation.c", - "build/unit_test/test/runners/test_diag_cbs_insulation_runner.c" - ] - }, - "src/app/engine/diag/cbs/diag_cbs_interlock.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_diag_cbs_interlock" - ], - "sources": [ - "build/unit_test/test/mocks/test_diag_cbs_interlock/Mockdiag_cfg.c", - "src/app/engine/diag/cbs/diag_cbs_interlock.c", - "tests/unit/app/engine/diag/cbs/test_diag_cbs_interlock.c", - "build/unit_test/test/runners/test_diag_cbs_interlock_runner.c" - ] - }, - "src/app/engine/diag/cbs/diag_cbs_plausibility.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_diag_cbs_plausibility" - ], - "sources": [ - "build/unit_test/test/mocks/test_diag_cbs_plausibility/Mockdiag_cfg.c", - "src/app/engine/diag/cbs/diag_cbs_plausibility.c", - "tests/unit/app/engine/diag/cbs/test_diag_cbs_plausibility.c", - "build/unit_test/test/runners/test_diag_cbs_plausibility_runner.c" - ] - }, - "src/app/engine/diag/cbs/diag_cbs_power-measurement.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_diag_cbs_power-measurement" - ], - "sources": [ - "build/unit_test/test/mocks/test_diag_cbs_power-measurement/Mockdiag_cfg.c", - "src/app/engine/diag/cbs/diag_cbs_power-measurement.c", - "tests/unit/app/engine/diag/cbs/test_diag_cbs_power-measurement.c", - "build/unit_test/test/runners/test_diag_cbs_power-measurement_runner.c" - ] - }, - "src/app/engine/diag/cbs/diag_cbs_rtc.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_diag_cbs_rtc" - ], - "sources": [ - "build/unit_test/test/mocks/test_diag_cbs_rtc/Mockdiag_cfg.c", - "src/app/engine/diag/cbs/diag_cbs_rtc.c", - "tests/unit/app/engine/diag/cbs/test_diag_cbs_rtc.c", - "build/unit_test/test/runners/test_diag_cbs_rtc_runner.c" - ] - }, - "src/app/engine/diag/cbs/diag_cbs_sbc.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_diag_cbs_sbc" - ], - "sources": [ - "build/unit_test/test/mocks/test_diag_cbs_sbc/Mockdiag_cfg.c", - "src/app/engine/diag/cbs/diag_cbs_sbc.c", - "tests/unit/app/engine/diag/cbs/test_diag_cbs_sbc.c", - "build/unit_test/test/runners/test_diag_cbs_sbc_runner.c" - ] - }, - "src/app/engine/diag/cbs/diag_cbs_sys-mon.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_diag_cbs_sys-mon" - ], - "sources": [ - "build/unit_test/test/mocks/test_diag_cbs_sys-mon/Mockdiag_cfg.c", - "build/unit_test/test/mocks/test_diag_cbs_sys-mon/Mocksys_mon_cfg.c", - "src/app/engine/diag/cbs/diag_cbs_sys-mon.c", - "tests/unit/app/engine/diag/cbs/test_diag_cbs_sys-mon.c", - "build/unit_test/test/runners/test_diag_cbs_sys-mon_runner.c" - ] - }, - "src/app/engine/diag/cbs/diag_cbs_temperature.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_diag_cbs_temperature" - ], - "sources": [ - "build/unit_test/test/mocks/test_diag_cbs_temperature/Mockdiag_cfg.c", - "src/app/engine/diag/cbs/diag_cbs_temperature.c", - "tests/unit/app/engine/diag/cbs/test_diag_cbs_temperature.c", - "build/unit_test/test/runners/test_diag_cbs_temperature_runner.c" - ] - }, - "src/app/engine/diag/cbs/diag_cbs_voltage.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_diag_cbs_voltage" - ], - "sources": [ - "build/unit_test/test/mocks/test_diag_cbs_voltage/Mockdiag_cfg.c", - "src/app/engine/diag/cbs/diag_cbs_voltage.c", - "tests/unit/app/engine/diag/cbs/test_diag_cbs_voltage.c", - "build/unit_test/test/runners/test_diag_cbs_voltage_runner.c" - ] - }, - "src/app/engine/diag/diag.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_diag" - ], - "sources": [ - "build/unit_test/test/mocks/test_diag/Mockdatabase.c", - "build/unit_test/test/mocks/test_diag/Mockdiag_cbs.c", - "src/app/engine/diag/diag.c", - "tests/unit/app/engine/diag/test_diag.c", - "build/unit_test/test/runners/test_diag_runner.c" - ] - }, - "src/app/engine/hw_info/master_info.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_master_info" - ], - "sources": [ - "src/app/engine/hw_info/master_info.c", - "tests/unit/app/engine/hw_info/test_master_info.c", - "build/unit_test/test/runners/test_master_info_runner.c" - ] - }, - "src/app/engine/sys/reset.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_reset" - ], - "sources": [ - "src/app/engine/sys/reset.c", - "tests/unit/app/engine/sys/test_reset.c", - "build/unit_test/test/runners/test_reset_runner.c" - ] - }, - "src/app/engine/sys/sys.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_sys" - ], - "sources": [ - "build/unit_test/test/mocks/test_sys/Mockafe.c", - "build/unit_test/test/mocks/test_sys/Mockalgorithm.c", - "build/unit_test/test/mocks/test_sys/Mockbal.c", - "build/unit_test/test/mocks/test_sys/Mockbms.c", - "build/unit_test/test/mocks/test_sys/Mockcan.c", - "build/unit_test/test/mocks/test_sys/Mockcontactor.c", - "build/unit_test/test/mocks/test_sys/Mockdatabase.c", - "build/unit_test/test/mocks/test_sys/Mockdiag.c", - "build/unit_test/test/mocks/test_sys/Mockfassert.c", - "build/unit_test/test/mocks/test_sys/Mockfram.c", - "build/unit_test/test/mocks/test_sys/Mockimd.c", - "build/unit_test/test/mocks/test_sys/Mockinterlock.c", - "build/unit_test/test/mocks/test_sys/Mockmeas.c", - "build/unit_test/test/mocks/test_sys/Mockos.c", - "build/unit_test/test/mocks/test_sys/Mocksbc.c", - "build/unit_test/test/mocks/test_sys/Mocksof_trapezoid.c", - "build/unit_test/test/mocks/test_sys/Mockstate_estimation.c", - "build/unit_test/test/mocks/test_sys/Mocksys_cfg.c", - "src/app/engine/sys/sys.c", - "tests/unit/app/engine/sys/test_sys.c", - "build/unit_test/test/runners/test_sys_runner.c" - ] - }, - "src/app/engine/sys_mon/sys_mon.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_sys_mon" - ], - "sources": [ - "build/unit_test/test/mocks/test_sys_mon/Mockdiag.c", - "build/unit_test/test/mocks/test_sys_mon/Mockfram.c", - "build/unit_test/test/mocks/test_sys_mon/Mockfram_cfg.c", - "build/unit_test/test/mocks/test_sys_mon/Mockos.c", - "build/unit_test/test/mocks/test_sys_mon/Mocksys_mon_cfg.c", - "src/app/engine/sys_mon/sys_mon.c", - "tests/unit/app/engine/sys_mon/test_sys_mon.c", - "build/unit_test/test/runners/test_sys_mon_runner.c" - ] - }, - "src/app/main/fassert.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_fassert" - ], - "sources": [ - "src/app/main/fassert.c", - "tests/unit/app/main/test_fassert.c", - "build/unit_test/test/runners/test_fassert_runner.c" - ] - }, - "src/app/main/fstartup.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_fstartup" - ], - "sources": [ - "src/app/main/fstartup.c", - "tests/unit/app/main/test_fstartup.c", - "build/unit_test/test/runners/test_fstartup_runner.c" - ] - }, - "src/app/main/main.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_main" - ], - "sources": [ - "src/app/main/main.c", - "tests/unit/app/main/test_main.c", - "build/unit_test/test/runners/test_main_runner.c" - ] - }, - "src/app/task/config/ftask_cfg.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_ftask_cfg" - ], - "sources": [ - "build/unit_test/test/mocks/test_ftask_cfg/MockHL_gio.c", - "build/unit_test/test/mocks/test_ftask_cfg/Mockadc.c", - "build/unit_test/test/mocks/test_ftask_cfg/Mockafe.c", - "build/unit_test/test/mocks/test_ftask_cfg/Mockalgorithm.c", - "build/unit_test/test/mocks/test_ftask_cfg/Mockbal.c", - "build/unit_test/test/mocks/test_ftask_cfg/Mockbms.c", - "build/unit_test/test/mocks/test_ftask_cfg/Mockcan.c", - "build/unit_test/test/mocks/test_ftask_cfg/Mockcontactor.c", - "build/unit_test/test/mocks/test_ftask_cfg/Mockdatabase.c", - "build/unit_test/test/mocks/test_ftask_cfg/Mockdiag.c", - "build/unit_test/test/mocks/test_ftask_cfg/Mockdiag_cfg.c", - "build/unit_test/test/mocks/test_ftask_cfg/Mockfram.c", - "build/unit_test/test/mocks/test_ftask_cfg/Mockhtsensor.c", - "build/unit_test/test/mocks/test_ftask_cfg/Mocki2c.c", - "build/unit_test/test/mocks/test_ftask_cfg/Mockimd.c", - "build/unit_test/test/mocks/test_ftask_cfg/Mockinterlock.c", - "build/unit_test/test/mocks/test_ftask_cfg/Mockled.c", - "build/unit_test/test/mocks/test_ftask_cfg/Mockmeas.c", - "build/unit_test/test/mocks/test_ftask_cfg/Mockmpu_prototypes.c", - "build/unit_test/test/mocks/test_ftask_cfg/Mockos.c", - "build/unit_test/test/mocks/test_ftask_cfg/Mockpex.c", - "build/unit_test/test/mocks/test_ftask_cfg/Mockredundancy.c", - "build/unit_test/test/mocks/test_ftask_cfg/Mockrtc.c", - "build/unit_test/test/mocks/test_ftask_cfg/Mocksbc.c", - "build/unit_test/test/mocks/test_ftask_cfg/Mocksof_trapezoid.c", - "build/unit_test/test/mocks/test_ftask_cfg/Mocksps.c", - "build/unit_test/test/mocks/test_ftask_cfg/Mockstate_estimation.c", - "build/unit_test/test/mocks/test_ftask_cfg/Mocksys.c", - "build/unit_test/test/mocks/test_ftask_cfg/Mocksys_mon.c", - "src/app/task/config/ftask_cfg.c", - "tests/unit/app/task/config/test_ftask_cfg.c", - "build/unit_test/test/runners/test_ftask_cfg_runner.c" - ] - }, - "src/app/task/ftask/freertos/ftask_freertos.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_ftask_freertos" - ], - "sources": [ - "build/unit_test/test/mocks/test_ftask_freertos/Mockftask_cfg.c", - "build/unit_test/test/mocks/test_ftask_freertos/Mockmpu_prototypes.c", - "build/unit_test/test/mocks/test_ftask_freertos/Mockos.c", - "build/unit_test/test/mocks/test_ftask_freertos/Mocksys_mon.c", - "src/app/task/ftask/freertos/ftask_freertos.c", - "tests/unit/app/task/ftask/freertos/test_ftask_freertos.c", - "build/unit_test/test/runners/test_ftask_freertos_runner.c" - ] - }, - "src/app/task/ftask/ftask.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_ftask" - ], - "sources": [ - "build/unit_test/test/mocks/test_ftask/MockHL_gio.c", - "build/unit_test/test/mocks/test_ftask/Mockadc.c", - "build/unit_test/test/mocks/test_ftask/Mockafe.c", - "build/unit_test/test/mocks/test_ftask/Mockalgorithm.c", - "build/unit_test/test/mocks/test_ftask/Mockbal.c", - "build/unit_test/test/mocks/test_ftask/Mockbms.c", - "build/unit_test/test/mocks/test_ftask/Mockcan.c", - "build/unit_test/test/mocks/test_ftask/Mockcontactor.c", - "build/unit_test/test/mocks/test_ftask/Mockdatabase.c", - "build/unit_test/test/mocks/test_ftask/Mockdiag.c", - "build/unit_test/test/mocks/test_ftask/Mockdiag_cfg.c", - "build/unit_test/test/mocks/test_ftask/Mockfram.c", - "build/unit_test/test/mocks/test_ftask/Mockhtsensor.c", - "build/unit_test/test/mocks/test_ftask/Mocki2c.c", - "build/unit_test/test/mocks/test_ftask/Mockimd.c", - "build/unit_test/test/mocks/test_ftask/Mockinterlock.c", - "build/unit_test/test/mocks/test_ftask/Mockled.c", - "build/unit_test/test/mocks/test_ftask/Mockmeas.c", - "build/unit_test/test/mocks/test_ftask/Mockmpu_prototypes.c", - "build/unit_test/test/mocks/test_ftask/Mockos.c", - "build/unit_test/test/mocks/test_ftask/Mockpex.c", - "build/unit_test/test/mocks/test_ftask/Mockredundancy.c", - "build/unit_test/test/mocks/test_ftask/Mockrtc.c", - "build/unit_test/test/mocks/test_ftask/Mocksbc.c", - "build/unit_test/test/mocks/test_ftask/Mocksof_trapezoid.c", - "build/unit_test/test/mocks/test_ftask/Mocksps.c", - "build/unit_test/test/mocks/test_ftask/Mockstate_estimation.c", - "build/unit_test/test/mocks/test_ftask/Mocksys.c", - "build/unit_test/test/mocks/test_ftask/Mocksys_mon.c", - "src/app/task/ftask/ftask.c", - "tests/unit/app/task/ftask/test_ftask.c", - "build/unit_test/test/runners/test_ftask_runner.c" - ] - }, - "src/app/task/os/freertos/os_freertos.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_os_freertos" - ], - "sources": [ - "build/unit_test/test/mocks/test_os_freertos/Mockcan_cbs_tx_fatal-errors.c", - "build/unit_test/test/mocks/test_os_freertos/Mockftask.c", - "build/unit_test/test/mocks/test_os_freertos/Mockftask_cfg.c", - "build/unit_test/test/mocks/test_os_freertos/Mockportmacro.c", - "build/unit_test/test/mocks/test_os_freertos/Mockqueue.c", - "build/unit_test/test/mocks/test_os_freertos/Mockrtc.c", - "build/unit_test/test/mocks/test_os_freertos/Mocktask.c", - "src/app/task/os/freertos/os_freertos.c", - "tests/unit/app/task/os/freertos/test_os_freertos.c", - "build/unit_test/test/runners/test_os_freertos_runner.c" - ] - }, - "src/app/task/os/os.c": { - "include": [ - "build/unit_test/include", - "build/unit_test/test/mocks/test_os", - "src/app/driver/can", - "src/app/driver/can/cbs", - "src/app/driver/can/cbs/tx", - "src/app/driver/config", - "src/app/driver/rtc", - "src/app/task/config", - "src/app/task/ftask", - "src/app/application/config", - "src/app/driver/mcu", - "src/app/engine/config", - "src/app/engine/database", - "src/app/main/include", - "src/app/main/include/config", - "src/app/task/os", - "src/os/freertos/include", - "src/os/freertos/portable/ccs/arm_cortex-r5" - ], - "sources": [ - "build/unit_test/test/mocks/test_os/Mockcan.c", - "build/unit_test/test/mocks/test_os/Mockftask.c", - "build/unit_test/test/mocks/test_os/Mockftask_cfg.c", - "build/unit_test/test/mocks/test_os/Mockportmacro.c", - "build/unit_test/test/mocks/test_os/Mockqueue.c", - "build/unit_test/test/mocks/test_os/Mockrtc.c", - "build/unit_test/test/mocks/test_os/Mocktask.c", - "src/app/task/os/freertos/os_freertos.c", - "src/app/driver/can/cbs/tx/can_cbs_tx_crash-dump.c", - "src/app/driver/config/can_cfg.c", - "src/app/task/os/os.c", - "tests/unit/app/task/os/test_os.c", - "build/unit_test/test/runners/test_os_runner.c" - ] + "src/app/application/algorithm/algorithm.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_algorithm", + "src/app/application/algorithm", + "src/app/application/algorithm/config", + "src/app/application/config", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config" + ], + "sources": [ + "build/unit_test/mocks/test_algorithm/Mockalgorithm_cfg.c", + "build/unit_test/mocks/test_algorithm/Mockos.c", + "build/unit_test/mocks/test_algorithm/Mocktest_algorithm_stubs.c", + "build/unit_test/test/runners/test_algorithm_runner.c", + "src/app/application/algorithm/algorithm.c", + "tests/unit/app/application/algorithm/test_algorithm.c" + ] + } + ], + "src/app/application/algorithm/config/algorithm_cfg.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_algorithm_cfg", + "src/app/application/algorithm/config", + "src/app/application/algorithm/moving_average", + "src/app/application/config", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config" + ], + "sources": [ + "build/unit_test/mocks/test_algorithm_cfg/Mockdatabase.c", + "build/unit_test/mocks/test_algorithm_cfg/Mockmoving_average.c", + "build/unit_test/mocks/test_algorithm_cfg/Mockos.c", + "build/unit_test/test/runners/test_algorithm_cfg_runner.c", + "src/app/application/algorithm/config/algorithm_cfg.c", + "tests/unit/app/application/algorithm/config/test_algorithm_cfg.c" + ] + } + ], + "src/app/application/algorithm/moving_average/moving_average.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_moving_average", + "src/app/application/algorithm/config", + "src/app/application/algorithm/moving_average", + "src/app/application/config", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config" + ], + "sources": [ + "build/unit_test/mocks/test_moving_average/Mockdatabase.c", + "build/unit_test/mocks/test_moving_average/Mockos.c", + "build/unit_test/test/runners/test_moving_average_runner.c", + "src/app/application/algorithm/moving_average/moving_average.c", + "tests/unit/app/application/algorithm/moving_average/test_moving_average.c" + ] + } + ], + "src/app/application/algorithm/state_estimation/soc/counting/soc_counting.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_soc_counting", + "src/app/application/algorithm/state_estimation", + "src/app/application/algorithm/state_estimation/soc/counting", + "src/app/application/bms", + "src/app/application/config", + "src/app/driver/config", + "src/app/driver/contactor", + "src/app/driver/foxmath", + "src/app/driver/fram", + "src/app/driver/mcu", + "src/app/driver/sps", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config" + ], + "sources": [ + "build/unit_test/mocks/test_soc_counting/Mockbms.c", + "build/unit_test/mocks/test_soc_counting/Mockdatabase.c", + "build/unit_test/mocks/test_soc_counting/Mockfram.c", + "build/unit_test/test/runners/test_soc_counting_runner.c", + "src/app/application/algorithm/state_estimation/soc/counting/soc_counting.c", + "src/app/application/config/battery_cell_cfg.c", + "src/app/driver/foxmath/foxmath.c", + "tests/unit/app/application/algorithm/state_estimation/soc/counting/test_soc_counting.c" + ] + } + ], + "src/app/application/algorithm/state_estimation/soc/debug/soc_debug.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_soc_debug", + "include", + "src/app/application/algorithm/state_estimation", + "src/app/application/config", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "test/mocks/test_soc_debug", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_soc_debug/Mockdatabase.c", + "build/unit_test/test/runners/test_soc_debug_runner.c", + "src/app/application/algorithm/state_estimation/soc/debug/soc_debug.c", + "tests/unit/app/application/algorithm/state_estimation/soc/debug/test_soc_debug.c" + ] + } + ], + "src/app/application/algorithm/state_estimation/soc/none/soc_none.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_soc_none", + "src/app/application/algorithm/state_estimation", + "src/app/application/config", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config" + ], + "sources": [ + "build/unit_test/mocks/test_soc_none/Mockdatabase.c", + "build/unit_test/test/runners/test_soc_none_runner.c", + "src/app/application/algorithm/state_estimation/soc/none/soc_none.c", + "tests/unit/app/application/algorithm/state_estimation/soc/none/test_soc_none.c" + ] + } + ], + "src/app/application/algorithm/state_estimation/soe/counting/soe_counting.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_soe_counting", + "src/app/application/algorithm/state_estimation", + "src/app/application/bms", + "src/app/application/config", + "src/app/driver/config", + "src/app/driver/contactor", + "src/app/driver/foxmath", + "src/app/driver/fram", + "src/app/driver/mcu", + "src/app/driver/sps", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config" + ], + "sources": [ + "build/unit_test/mocks/test_soe_counting/Mockbms.c", + "build/unit_test/mocks/test_soe_counting/Mockdatabase.c", + "build/unit_test/mocks/test_soe_counting/Mockfram.c", + "build/unit_test/test/runners/test_soe_counting_runner.c", + "src/app/application/algorithm/state_estimation/soe/counting/soe_counting.c", + "src/app/application/config/battery_cell_cfg.c", + "src/app/driver/foxmath/foxmath.c", + "tests/unit/app/application/algorithm/state_estimation/soe/counting/test_soe_counting.c" + ] + } + ], + "src/app/application/algorithm/state_estimation/soe/debug/soe_debug.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_soe_debug", + "src/app/application/algorithm/state_estimation", + "src/app/application/config", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config" + ], + "sources": [ + "build/unit_test/mocks/test_soe_debug/Mockdatabase.c", + "build/unit_test/test/runners/test_soe_debug_runner.c", + "src/app/application/algorithm/state_estimation/soe/debug/soe_debug.c", + "tests/unit/app/application/algorithm/state_estimation/soe/debug/test_soe_debug.c" + ] + } + ], + "src/app/application/algorithm/state_estimation/soe/none/soe_none.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_soe_none", + "src/app/application/algorithm/state_estimation", + "src/app/application/config", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_soe_none/Mockdatabase.c", + "build/unit_test/test/runners/test_soe_none_runner.c", + "src/app/application/algorithm/state_estimation/soe/none/soe_none.c", + "tests/unit/app/application/algorithm/state_estimation/soe/none/test_soe_none.c" + ] + } + ], + "src/app/application/algorithm/state_estimation/sof/trapezoid/sof_trapezoid.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_sof_trapezoid", + "src/app/application/algorithm/state_estimation", + "src/app/application/algorithm/state_estimation/sof/trapezoid", + "src/app/application/bms", + "src/app/application/config", + "src/app/driver/config", + "src/app/driver/contactor", + "src/app/driver/foxmath", + "src/app/driver/fram", + "src/app/driver/mcu", + "src/app/driver/sps", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config" + ], + "sources": [ + "build/unit_test/mocks/test_sof_trapezoid/Mockbms.c", + "build/unit_test/mocks/test_sof_trapezoid/Mockdatabase.c", + "build/unit_test/mocks/test_sof_trapezoid/Mockfoxmath.c", + "build/unit_test/mocks/test_sof_trapezoid/Mockfram.c", + "build/unit_test/test/runners/test_sof_trapezoid_runner.c", + "src/app/application/algorithm/state_estimation/sof/trapezoid/sof_trapezoid.c", + "src/app/application/algorithm/state_estimation/sof/trapezoid/sof_trapezoid_cfg.c", + "tests/unit/app/application/algorithm/state_estimation/sof/trapezoid/test_sof_trapezoid.c" + ] + } + ], + "src/app/application/algorithm/state_estimation/sof/trapezoid/sof_trapezoid_cfg.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_sof_trapezoid_cfg", + "src/app/application/algorithm/state_estimation/sof/trapezoid", + "src/app/application/config", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/test/runners/test_sof_trapezoid_cfg_runner.c", + "src/app/application/algorithm/state_estimation/sof/trapezoid/sof_trapezoid_cfg.c", + "tests/unit/app/application/algorithm/state_estimation/sof/trapezoid/test_sof_trapezoid_cfg.c" + ] + } + ], + "src/app/application/algorithm/state_estimation/soh/debug/soh_debug.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_soh_debug", + "src/app/application/algorithm/state_estimation", + "src/app/application/config", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_soh_debug/Mockdatabase.c", + "build/unit_test/test/runners/test_soh_debug_runner.c", + "src/app/application/algorithm/state_estimation/soh/debug/soh_debug.c", + "tests/unit/app/application/algorithm/state_estimation/soh/debug/test_soh_debug.c" + ] + } + ], + "src/app/application/algorithm/state_estimation/soh/none/soh_none.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_soh_none", + "src/app/application/algorithm/state_estimation", + "src/app/application/config", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_soh_none/Mockdatabase.c", + "build/unit_test/test/runners/test_soh_none_runner.c", + "src/app/application/algorithm/state_estimation/soh/none/soh_none.c", + "tests/unit/app/application/algorithm/state_estimation/soh/none/test_soh_none.c" + ] + } + ], + "src/app/application/algorithm/state_estimation/state_estimation.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_state_estimation", + "src/app/application/algorithm/state_estimation", + "src/app/application/config", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_state_estimation/Mockdatabase.c", + "build/unit_test/test/runners/test_state_estimation_runner.c", + "src/app/application/algorithm/state_estimation/soc/none/soc_none.c", + "src/app/application/algorithm/state_estimation/soe/none/soe_none.c", + "src/app/application/algorithm/state_estimation/soh/none/soh_none.c", + "src/app/application/algorithm/state_estimation/state_estimation.c", + "tests/unit/app/application/algorithm/state_estimation/test_state_estimation.c" + ] + } + ], + "src/app/application/bal/bal.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_bal", + "src/app/application/bal", + "src/app/application/config", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_bal/Mockdatabase.c", + "build/unit_test/mocks/test_bal/Mockos.c", + "build/unit_test/test/runners/test_bal_runner.c", + "src/app/application/bal/bal.c", + "tests/unit/app/application/bal/test_bal.c" + ] + } + ], + "src/app/application/bal/history/bal_strategy_history.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_bal_strategy_history", + "src/app/application/algorithm/state_estimation", + "src/app/application/bal", + "src/app/application/bms", + "src/app/application/config", + "src/app/driver/config", + "src/app/driver/contactor", + "src/app/driver/fram", + "src/app/driver/io", + "src/app/driver/mcu", + "src/app/driver/spi", + "src/app/driver/sps", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_bal_strategy_history/Mockbal_cfg.c", + "build/unit_test/mocks/test_bal_strategy_history/Mockbattery_system_cfg.c", + "build/unit_test/mocks/test_bal_strategy_history/Mockbms.c", + "build/unit_test/mocks/test_bal_strategy_history/Mockdatabase.c", + "build/unit_test/mocks/test_bal_strategy_history/Mockfassert.c", + "build/unit_test/mocks/test_bal_strategy_history/Mockfram.c", + "build/unit_test/mocks/test_bal_strategy_history/Mockio.c", + "build/unit_test/mocks/test_bal_strategy_history/Mockmcu.c", + "build/unit_test/mocks/test_bal_strategy_history/Mockos.c", + "build/unit_test/mocks/test_bal_strategy_history/Mockspi.c", + "build/unit_test/mocks/test_bal_strategy_history/Mockstate_estimation.c", + "build/unit_test/test/runners/test_bal_strategy_history_runner.c", + "src/app/application/bal/bal.c", + "src/app/application/bal/history/bal_strategy_history.c", + "tests/unit/app/application/bal/history/test_bal_strategy_history.c" + ] + } + ], + "src/app/application/bal/none/bal_strategy_none.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_bal_strategy_none", + "src/app/application/bal", + "src/app/application/bms", + "src/app/application/config", + "src/app/driver/config", + "src/app/driver/contactor", + "src/app/driver/fram", + "src/app/driver/io", + "src/app/driver/mcu", + "src/app/driver/spi", + "src/app/driver/sps", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_bal_strategy_none/Mockbattery_system_cfg.c", + "build/unit_test/mocks/test_bal_strategy_none/Mockbms.c", + "build/unit_test/mocks/test_bal_strategy_none/Mockdatabase.c", + "build/unit_test/mocks/test_bal_strategy_none/Mockfassert.c", + "build/unit_test/mocks/test_bal_strategy_none/Mockfram.c", + "build/unit_test/mocks/test_bal_strategy_none/Mockio.c", + "build/unit_test/mocks/test_bal_strategy_none/Mockmcu.c", + "build/unit_test/mocks/test_bal_strategy_none/Mockos.c", + "build/unit_test/mocks/test_bal_strategy_none/Mockspi.c", + "build/unit_test/test/runners/test_bal_strategy_none_runner.c", + "src/app/application/bal/none/bal_strategy_none.c", + "tests/unit/app/application/bal/none/test_bal_strategy_none.c" + ] + } + ], + "src/app/application/bal/voltage/bal_strategy_voltage.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_bal_strategy_voltage", + "src/app/application/bal", + "src/app/application/bal/voltage", + "src/app/application/bms", + "src/app/application/config", + "src/app/driver/config", + "src/app/driver/contactor", + "src/app/driver/fram", + "src/app/driver/io", + "src/app/driver/mcu", + "src/app/driver/spi", + "src/app/driver/sps", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_bal_strategy_voltage/Mockbal_cfg.c", + "build/unit_test/mocks/test_bal_strategy_voltage/Mockbattery_system_cfg.c", + "build/unit_test/mocks/test_bal_strategy_voltage/Mockbms.c", + "build/unit_test/mocks/test_bal_strategy_voltage/Mockdatabase.c", + "build/unit_test/mocks/test_bal_strategy_voltage/Mockfassert.c", + "build/unit_test/mocks/test_bal_strategy_voltage/Mockfram.c", + "build/unit_test/mocks/test_bal_strategy_voltage/Mockio.c", + "build/unit_test/mocks/test_bal_strategy_voltage/Mockmcu.c", + "build/unit_test/mocks/test_bal_strategy_voltage/Mockos.c", + "build/unit_test/mocks/test_bal_strategy_voltage/Mockspi.c", + "build/unit_test/test/runners/test_bal_strategy_voltage_runner.c", + "src/app/application/bal/bal.c", + "src/app/application/bal/voltage/bal_strategy_voltage.c", + "tests/unit/app/application/bal/voltage/test_bal_strategy_voltage.c" + ] + } + ], + "src/app/application/bms/bms.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_bms", + "src/app/application/bal", + "src/app/application/bms", + "src/app/application/config", + "src/app/application/plausibility", + "src/app/application/soa", + "src/app/driver/afe/api", + "src/app/driver/config", + "src/app/driver/contactor", + "src/app/driver/foxmath", + "src/app/driver/imd", + "src/app/driver/interlock", + "src/app/driver/led", + "src/app/driver/mcu", + "src/app/driver/meas", + "src/app/driver/sps", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/diag", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_bms/Mockafe.c", + "build/unit_test/mocks/test_bms/Mockbal.c", + "build/unit_test/mocks/test_bms/Mockbattery_system_cfg.c", + "build/unit_test/mocks/test_bms/Mockcontactor.c", + "build/unit_test/mocks/test_bms/Mockdatabase.c", + "build/unit_test/mocks/test_bms/Mockdiag.c", + "build/unit_test/mocks/test_bms/Mockfassert.c", + "build/unit_test/mocks/test_bms/Mockimd.c", + "build/unit_test/mocks/test_bms/Mockinterlock.c", + "build/unit_test/mocks/test_bms/Mockled.c", + "build/unit_test/mocks/test_bms/Mockmeas.c", + "build/unit_test/mocks/test_bms/Mockos.c", + "build/unit_test/mocks/test_bms/Mockplausibility.c", + "build/unit_test/mocks/test_bms/Mocksoa.c", + "build/unit_test/test/runners/test_bms_runner.c", + "src/app/application/bms/bms.c", + "src/app/driver/foxmath/foxmath.c", + "tests/unit/app/application/bms/test_bms.c" + ] + } + ], + "src/app/application/config/bal_cfg.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_bal_cfg", + "src/app/application/config", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_bal_cfg/Mockos.c", + "build/unit_test/test/runners/test_bal_cfg_runner.c", + "src/app/application/config/bal_cfg.c", + "tests/unit/app/application/config/test_bal_cfg.c" + ] + } + ], + "src/app/application/config/battery_cell_cfg.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_battery_cell_cfg", + "src/app/application/config", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/test/runners/test_battery_cell_cfg_runner.c", + "src/app/application/config/battery_cell_cfg.c", + "tests/unit/app/application/config/test_battery_cell_cfg.c" + ] + } + ], + "src/app/application/config/battery_system_cfg.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_battery_system_cfg", + "src/app/application/config", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_battery_system_cfg/Mockdatabase.c", + "build/unit_test/test/runners/test_battery_system_cfg_runner.c", + "src/app/application/config/battery_system_cfg.c", + "tests/unit/app/application/config/test_battery_system_cfg.c" + ] + } + ], + "src/app/application/config/soa_cfg.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_soa_cfg", + "src/app/application/bms", + "src/app/application/config", + "src/app/driver/config", + "src/app/driver/contactor", + "src/app/driver/mcu", + "src/app/driver/sps", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_soa_cfg/Mockbattery_cell_cfg.c", + "build/unit_test/mocks/test_soa_cfg/Mockbms.c", + "build/unit_test/test/runners/test_soa_cfg_runner.c", + "src/app/application/config/soa_cfg.c", + "tests/unit/app/application/config/test_soa_cfg.c" + ] + } + ], + "src/app/application/plausibility/plausibility.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_plausibility", + "src/app/application/config", + "src/app/application/plausibility", + "src/app/driver/foxmath", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/diag", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_plausibility/Mockdiag.c", + "build/unit_test/test/runners/test_plausibility_runner.c", + "src/app/application/plausibility/plausibility.c", + "tests/unit/app/application/plausibility/test_plausibility.c" + ] + } + ], + "src/app/application/redundancy/redundancy.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_redundancy", + "src/app/application/bms", + "src/app/application/config", + "src/app/application/plausibility", + "src/app/application/redundancy", + "src/app/driver/config", + "src/app/driver/contactor", + "src/app/driver/foxmath", + "src/app/driver/mcu", + "src/app/driver/sps", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/diag", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_redundancy/Mockbms.c", + "build/unit_test/mocks/test_redundancy/Mockdatabase.c", + "build/unit_test/mocks/test_redundancy/Mockdatabase_helper.c", + "build/unit_test/mocks/test_redundancy/Mockdiag.c", + "build/unit_test/mocks/test_redundancy/Mockos.c", + "build/unit_test/mocks/test_redundancy/Mockplausibility.c", + "build/unit_test/test/runners/test_redundancy_runner.c", + "src/app/application/redundancy/redundancy.c", + "tests/unit/app/application/redundancy/test_redundancy.c" + ] + } + ], + "src/app/application/soa/soa.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_soa", + "src/app/application/bms", + "src/app/application/config", + "src/app/application/soa", + "src/app/driver/config", + "src/app/driver/contactor", + "src/app/driver/foxmath", + "src/app/driver/mcu", + "src/app/driver/sps", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/diag", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_soa/Mockbms.c", + "build/unit_test/mocks/test_soa/Mockcontactor.c", + "build/unit_test/mocks/test_soa/Mockdatabase.c", + "build/unit_test/mocks/test_soa/Mockdiag.c", + "build/unit_test/mocks/test_soa/Mockfoxmath.c", + "build/unit_test/mocks/test_soa/Mocksoa_cfg.c", + "build/unit_test/test/runners/test_soa_runner.c", + "src/app/application/soa/soa.c", + "tests/unit/app/application/soa/test_soa.c" + ] + } + ], + "src/app/driver/adc/adc.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_adc", + "src/app/application/config", + "src/app/driver/adc", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config" + ], + "sources": [ + "build/unit_test/mocks/test_adc/MockHL_adc.c", + "build/unit_test/mocks/test_adc/Mockdatabase.c", + "build/unit_test/mocks/test_adc/Mockfassert.c", + "build/unit_test/test/runners/test_adc_runner.c", + "src/app/driver/adc/adc.c", + "tests/unit/app/driver/adc/test_adc.c" + ] + } + ], + "src/app/driver/afe/adi/ades1830/adi_ades1830_balancing.c": [ + { + "defines": [ + "FOXBMS_AFE_DRIVER_ADI=1u", + "FOXBMS_AFE_DRIVER_ADI_ADES1830=1u", + "TEST_BS_NR_OF_CELL_BLOCKS_PER_MODULE=16u" + ], + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_adi_ades1830_balancing", + "src/app/application/config", + "src/app/driver/afe/adi/ades1830", + "src/app/driver/afe/adi/common/ades183x", + "src/app/driver/afe/adi/common/ades183x/config", + "src/app/driver/afe/adi/common/ades183x/pec", + "src/app/driver/afe/api", + "src/app/driver/config", + "src/app/driver/dma", + "src/app/driver/io", + "src/app/driver/mcu", + "src/app/driver/pex", + "src/app/driver/rtc", + "src/app/driver/spi", + "src/app/driver/ts/api", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/diag", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/config", + "src/app/task/ftask", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_adi_ades1830_balancing/Mockadi_ades183x.c", + "build/unit_test/mocks/test_adi_ades1830_balancing/Mockadi_ades183x_helpers.c", + "build/unit_test/mocks/test_adi_ades1830_balancing/Mockadi_ades183x_pec.c", + "build/unit_test/mocks/test_adi_ades1830_balancing/Mockadi_ades183x_voltages.c", + "build/unit_test/mocks/test_adi_ades1830_balancing/Mockdatabase.c", + "build/unit_test/mocks/test_adi_ades1830_balancing/Mockfassert.c", + "build/unit_test/mocks/test_adi_ades1830_balancing/Mockftask.c", + "build/unit_test/mocks/test_adi_ades1830_balancing/Mockio.c", + "build/unit_test/mocks/test_adi_ades1830_balancing/Mockos.c", + "build/unit_test/mocks/test_adi_ades1830_balancing/Mockpex.c", + "build/unit_test/mocks/test_adi_ades1830_balancing/Mockspi.c", + "build/unit_test/mocks/test_adi_ades1830_balancing/Mockspi_cfg.c", + "build/unit_test/mocks/test_adi_ades1830_balancing/Mocktask.c", + "build/unit_test/mocks/test_adi_ades1830_balancing/Mocktsi.c", + "build/unit_test/test/runners/test_adi_ades1830_balancing_runner.c", + "src/app/driver/afe/adi/ades1830/adi_ades1830_balancing.c", + "src/app/driver/afe/adi/ades1830/config/adi_ades1830_cfg.c", + "src/app/driver/afe/adi/common/ades183x/adi_ades183x_buffers.c", + "src/app/driver/afe/adi/common/ades183x/adi_ades183x_commands.c", + "tests/unit/app/driver/afe/adi/ades1830/test_adi_ades1830_balancing.c" + ] + } + ], + "src/app/driver/afe/adi/ades1830/adi_ades1830_gpio_voltages.c": [ + { + "defines": [ + "FOXBMS_AFE_DRIVER_ADI=1u", + "FOXBMS_AFE_DRIVER_ADI_ADES1830=1u", + "TEST_BS_NR_OF_CELL_BLOCKS_PER_MODULE=16u" + ], + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_adi_ades1830_gpio_voltages", + "src/app/application/config", + "src/app/driver/afe/adi/ades1830", + "src/app/driver/afe/adi/common/ades183x", + "src/app/driver/afe/adi/common/ades183x/config", + "src/app/driver/afe/adi/common/ades183x/pec", + "src/app/driver/afe/api", + "src/app/driver/config", + "src/app/driver/dma", + "src/app/driver/io", + "src/app/driver/mcu", + "src/app/driver/pex", + "src/app/driver/rtc", + "src/app/driver/spi", + "src/app/driver/ts/api", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/database", + "src/app/engine/diag", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/config", + "src/app/task/ftask", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config" + ], + "sources": [ + "build/unit_test/mocks/test_adi_ades1830_gpio_voltages/Mockadi_ades183x_cfg.c", + "build/unit_test/mocks/test_adi_ades1830_gpio_voltages/Mockadi_ades183x_diagnostic.c", + "build/unit_test/mocks/test_adi_ades1830_gpio_voltages/Mockos.c", + "build/unit_test/mocks/test_adi_ades1830_gpio_voltages/Mockspi.c", + "build/unit_test/test/runners/test_adi_ades1830_gpio_voltages_runner.c", + "src/app/driver/afe/adi/ades1830/adi_ades1830_gpio_voltages.c", + "src/app/driver/afe/adi/common/ades183x/adi_ades183x_buffers.c", + "src/app/driver/afe/adi/common/ades183x/adi_ades183x_commands.c", + "src/app/driver/afe/adi/common/ades183x/adi_ades183x_helpers.c", + "src/app/driver/afe/adi/common/ades183x/pec/adi_ades183x_pec.c", + "tests/unit/app/driver/afe/adi/ades1830/test_adi_ades1830_gpio_voltages.c" + ] + } + ], + "src/app/driver/afe/adi/ades1830/config/adi_ades1830_cfg.c": [ + { + "defines": [ + "FOXBMS_AFE_DRIVER_ADI=1u", + "FOXBMS_AFE_DRIVER_ADI_ADES1830=1u", + "TEST_BS_NR_OF_CELL_BLOCKS_PER_MODULE=16u" + ], + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_adi_ades1830_cfg", + "src/app/application/config", + "src/app/driver/afe/adi/ades1830", + "src/app/driver/afe/adi/common/ades183x", + "src/app/driver/afe/adi/common/ades183x/config", + "src/app/driver/config", + "src/app/driver/mcu", + "src/app/driver/spi", + "src/app/driver/ts/api", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_adi_ades1830_cfg/Mocktsi.c", + "build/unit_test/test/runners/test_adi_ades1830_cfg_runner.c", + "src/app/driver/afe/adi/ades1830/config/adi_ades1830_cfg.c", + "src/app/driver/afe/adi/common/ades183x/config/adi_ades183x_cfg.c", + "tests/unit/app/driver/afe/adi/ades1830/config/test_adi_ades1830_cfg.c" + ] + } + ], + "src/app/driver/afe/adi/common/ades183x/adi_ades183x.c": [ + { + "defines": [ + "FOXBMS_AFE_DRIVER_ADI=1u", + "FOXBMS_AFE_DRIVER_ADI_ADES1830=1u", + "TEST_BS_NR_OF_CELL_BLOCKS_PER_MODULE=16u" + ], + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_adi_ades1830", + "include", + "src/app/application/config", + "src/app/application/config", + "src/app/driver/afe/adi/ades1830", + "src/app/driver/afe/adi/common/ades183x", + "src/app/driver/afe/adi/common/ades183x/config", + "src/app/driver/afe/adi/common/ades183x/pec", + "src/app/driver/afe/api", + "src/app/driver/config", + "src/app/driver/dma", + "src/app/driver/io", + "src/app/driver/mcu", + "src/app/driver/pex", + "src/app/driver/rtc", + "src/app/driver/spi", + "src/app/driver/ts/api", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/database", + "src/app/engine/diag", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/config", + "src/app/task/ftask", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "test/mocks/test_adi_ades1830", + "tests/unit/app/application/config", + "tests/unit/app/driver/afe/adi/ades1830", + "tests/unit/support" + ], + "runner-alias": "adi_ades1830", + "sources": [ + "build/unit_test/mocks/test_adi_ades1830/Mockadi_ades1830_defs.c", + "build/unit_test/mocks/test_adi_ades1830/Mockadi_ades183x_balancing.c", + "build/unit_test/mocks/test_adi_ades1830/Mockadi_ades183x_defs.c", + "build/unit_test/mocks/test_adi_ades1830/Mockadi_ades183x_diagnostic.c", + "build/unit_test/mocks/test_adi_ades1830/Mockadi_ades183x_gpio_voltages.c", + "build/unit_test/mocks/test_adi_ades1830/Mockadi_ades183x_helpers.c", + "build/unit_test/mocks/test_adi_ades1830/Mockadi_ades183x_initialization.c", + "build/unit_test/mocks/test_adi_ades1830/Mockadi_ades183x_pec.c", + "build/unit_test/mocks/test_adi_ades1830/Mockadi_ades183x_temperatures.c", + "build/unit_test/mocks/test_adi_ades1830/Mockadi_ades183x_voltages.c", + "build/unit_test/mocks/test_adi_ades1830/Mockafe_plausibility.c", + "build/unit_test/mocks/test_adi_ades1830/Mockdatabase.c", + "build/unit_test/mocks/test_adi_ades1830/Mockdiag.c", + "build/unit_test/mocks/test_adi_ades1830/Mockdma.c", + "build/unit_test/mocks/test_adi_ades1830/Mockfassert.c", + "build/unit_test/mocks/test_adi_ades1830/Mockftask.c", + "build/unit_test/mocks/test_adi_ades1830/Mockinfinite-loop-helper.c", + "build/unit_test/mocks/test_adi_ades1830/Mockio.c", + "build/unit_test/mocks/test_adi_ades1830/Mockos.c", + "build/unit_test/mocks/test_adi_ades1830/Mockpex.c", + "build/unit_test/mocks/test_adi_ades1830/Mockqueue.c", + "build/unit_test/mocks/test_adi_ades1830/Mockspi.c", + "build/unit_test/mocks/test_adi_ades1830/Mockspi_cfg.c", + "build/unit_test/mocks/test_adi_ades1830/Mocktask.c", + "build/unit_test/mocks/test_adi_ades1830/Mocktsi.c", + "build/unit_test/test/runners/test_adi_ades1830_runner.c", + "src/app/driver/afe/adi/ades1830/config/adi_ades1830_cfg.c", + "src/app/driver/afe/adi/common/ades183x/adi_ades183x.c", + "src/app/driver/afe/adi/common/ades183x/adi_ades183x_buffers.c", + "src/app/driver/afe/adi/common/ades183x/adi_ades183x_commands.c", + "src/app/driver/afe/adi/common/ades183x/config/adi_ades183x_cfg.c", + "tests/unit/app/driver/afe/adi/ades1830/test_adi_ades1830.c" + ] + } + ], + "src/app/driver/afe/adi/common/ades183x/adi_ades183x_buffers.c": [ + { + "defines": [ + "FOXBMS_AFE_DRIVER_ADI=1u", + "FOXBMS_AFE_DRIVER_ADI_ADES1830=1u", + "TEST_BS_NR_OF_CELL_BLOCKS_PER_MODULE=16u" + ], + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_adi_ades1830_buffers", + "src/app/application/config", + "src/app/driver/afe/adi/ades1830", + "src/app/driver/afe/adi/common/ades183x", + "src/app/driver/afe/adi/common/ades183x/config", + "src/app/driver/afe/api", + "src/app/driver/config", + "src/app/driver/mcu", + "src/app/driver/spi", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/config", + "src/app/task/ftask", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/app/driver/afe/adi/ades1830", + "tests/unit/support" + ], + "runner-alias": "adi_ades1830_buffers", + "sources": [ + "build/unit_test/test/runners/test_adi_ades1830_buffers_runner.c", + "src/app/driver/afe/adi/common/ades183x/adi_ades183x_buffers.c", + "tests/unit/app/driver/afe/adi/ades1830/test_adi_ades1830_buffers.c" + ] + } + ], + "src/app/driver/afe/adi/common/ades183x/adi_ades183x_commands.c": [ + { + "defines": [ + "FOXBMS_AFE_DRIVER_ADI=1u", + "FOXBMS_AFE_DRIVER_ADI_ADES1830=1u", + "TEST_BS_NR_OF_CELL_BLOCKS_PER_MODULE=16u" + ], + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_adi_ades1830_commands", + "src/app/application/config", + "src/app/driver/afe/adi/ades1830", + "src/app/driver/afe/adi/common/ades183x", + "src/app/driver/afe/adi/common/ades183x/config", + "src/app/driver/afe/api", + "src/app/driver/config", + "src/app/driver/mcu", + "src/app/driver/spi", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/config", + "src/app/task/ftask", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/app/driver/afe/adi/ades1830", + "tests/unit/support" + ], + "runner-alias": "adi_ades1830_commands", + "sources": [ + "build/unit_test/test/runners/test_adi_ades1830_commands_runner.c", + "src/app/driver/afe/adi/common/ades183x/adi_ades183x_commands.c", + "tests/unit/app/driver/afe/adi/ades1830/test_adi_ades1830_commands.c" + ] + } + ], + "src/app/driver/afe/adi/common/ades183x/adi_ades183x_commands_voltages.c": [ + { + "defines": [ + "FOXBMS_AFE_DRIVER_ADI=1u", + "FOXBMS_AFE_DRIVER_ADI_ADES1830=1u", + "TEST_BS_NR_OF_CELL_BLOCKS_PER_MODULE=16u" + ], + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_adi_ades1830_commands_voltages", + "src/app/application/config", + "src/app/driver/afe/adi/ades1830", + "src/app/driver/afe/adi/common/ades183x", + "src/app/driver/afe/adi/common/ades183x/config", + "src/app/driver/afe/api", + "src/app/driver/config", + "src/app/driver/mcu", + "src/app/driver/spi", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/config", + "src/app/task/ftask", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/app/driver/afe/adi/ades1830", + "tests/unit/support" + ], + "runner-alias": "adi_ades1830_commands_voltages", + "sources": [ + "build/unit_test/test/runners/test_adi_ades1830_commands_voltages_runner.c", + "src/app/driver/afe/adi/common/ades183x/adi_ades183x_commands_voltages.c", + "tests/unit/app/driver/afe/adi/ades1830/test_adi_ades1830_commands_voltages.c" + ] + } + ], + "src/app/driver/afe/adi/common/ades183x/adi_ades183x_diagnostic_w.c": [ + { + "defines": [ + "FOXBMS_AFE_DRIVER_ADI=1u", + "FOXBMS_AFE_DRIVER_ADI_ADES1830=1u", + "TEST_BS_NR_OF_CELL_BLOCKS_PER_MODULE=16u" + ], + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_adi_ades1830_diagnostic_w", + "src/app/application/config", + "src/app/driver/afe/adi/ades1830", + "src/app/driver/afe/adi/common/ades183x", + "src/app/driver/afe/adi/common/ades183x/config", + "src/app/driver/afe/adi/common/ades183x/pec", + "src/app/driver/afe/api", + "src/app/driver/config", + "src/app/driver/mcu", + "src/app/driver/pex", + "src/app/driver/rtc", + "src/app/driver/spi", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/config", + "src/app/task/ftask", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/app/driver/afe/adi/ades1830", + "tests/unit/support" + ], + "runner-alias": "adi_ades1830_diagnostic_w", + "sources": [ + "build/unit_test/test/runners/test_adi_ades1830_diagnostic_w_runner.c", + "src/app/driver/afe/adi/common/ades183x/adi_ades183x_diagnostic_w.c", + "tests/unit/app/driver/afe/adi/ades1830/test_adi_ades1830_diagnostic_w.c" + ] + } + ], + "src/app/driver/afe/adi/common/ades183x/adi_ades183x_helpers.c": [ + { + "defines": [ + "FOXBMS_AFE_DRIVER_ADI=1u", + "FOXBMS_AFE_DRIVER_ADI_ADES1830=1u", + "TEST_BS_NR_OF_CELL_BLOCKS_PER_MODULE=16u" + ], + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_adi_ades1830_helpers", + "src/app/application/config", + "src/app/driver/afe/adi/ades1830", + "src/app/driver/afe/adi/common/ades183x", + "src/app/driver/afe/adi/common/ades183x/config", + "src/app/driver/afe/adi/common/ades183x/pec", + "src/app/driver/afe/api", + "src/app/driver/config", + "src/app/driver/mcu", + "src/app/driver/pex", + "src/app/driver/rtc", + "src/app/driver/spi", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/config", + "src/app/task/ftask", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/app/driver/afe/adi/ades1830", + "tests/unit/support" + ], + "runner-alias": "adi_ades1830_helpers", + "sources": [ + "build/unit_test/mocks/test_adi_ades1830_helpers/Mockos.c", + "build/unit_test/mocks/test_adi_ades1830_helpers/Mockspi.c", + "build/unit_test/test/runners/test_adi_ades1830_helpers_runner.c", + "src/app/driver/afe/adi/common/ades183x/adi_ades183x_buffers.c", + "src/app/driver/afe/adi/common/ades183x/adi_ades183x_commands.c", + "src/app/driver/afe/adi/common/ades183x/adi_ades183x_commands_voltages.c", + "src/app/driver/afe/adi/common/ades183x/adi_ades183x_helpers.c", + "src/app/driver/afe/adi/common/ades183x/pec/adi_ades183x_pec.c", + "tests/unit/app/driver/afe/adi/ades1830/adi_ades1830_helpers_test-data-rdb.c", + "tests/unit/app/driver/afe/adi/ades1830/test_adi_ades1830_helpers.c" + ] + } + ], + "src/app/driver/afe/adi/common/ades183x/adi_ades183x_initialization.c": [ + { + "defines": [ + "FOXBMS_AFE_DRIVER_ADI=1u", + "FOXBMS_AFE_DRIVER_ADI_ADES1830=1u", + "TEST_BS_NR_OF_CELL_BLOCKS_PER_MODULE=16u" + ], + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_adi_ades1830_initialization", + "src/app/application/config", + "src/app/driver/afe/adi/ades1830", + "src/app/driver/afe/adi/common/ades183x", + "src/app/driver/afe/adi/common/ades183x/config", + "src/app/driver/afe/adi/common/ades183x/pec", + "src/app/driver/afe/api", + "src/app/driver/config", + "src/app/driver/mcu", + "src/app/driver/pex", + "src/app/driver/rtc", + "src/app/driver/spi", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/config", + "src/app/task/ftask", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/app/driver/afe/adi/ades1830", + "tests/unit/support" + ], + "runner-alias": "adi_ades1830_initialization", + "sources": [ + "build/unit_test/mocks/test_adi_ades1830_initialization/Mockadi_ades183x_helpers.c", + "build/unit_test/test/runners/test_adi_ades1830_initialization_runner.c", + "src/app/driver/afe/adi/common/ades183x/adi_ades183x_buffers.c", + "src/app/driver/afe/adi/common/ades183x/adi_ades183x_commands.c", + "src/app/driver/afe/adi/common/ades183x/adi_ades183x_initialization.c", + "tests/unit/app/driver/afe/adi/ades1830/test_adi_ades1830_initialization.c" + ] + } + ], + "src/app/driver/afe/adi/common/ades183x/adi_ades183x_temperatures.c": [ + { + "defines": [ + "FOXBMS_AFE_DRIVER_ADI=1u", + "FOXBMS_AFE_DRIVER_ADI_ADES1830=1u", + "TEST_BS_NR_OF_CELL_BLOCKS_PER_MODULE=16u" + ], + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_adi_ades1830_temperatures", + "src/app/application/config", + "src/app/driver/afe/adi/ades1830", + "src/app/driver/afe/adi/common/ades183x", + "src/app/driver/afe/adi/common/ades183x/config", + "src/app/driver/afe/adi/common/ades183x/pec", + "src/app/driver/afe/api", + "src/app/driver/config", + "src/app/driver/mcu", + "src/app/driver/pex", + "src/app/driver/rtc", + "src/app/driver/spi", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/config", + "src/app/task/ftask", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/app/driver/afe/adi/ades1830", + "tests/unit/support" + ], + "runner-alias": "adi_ades1830_temperatures", + "sources": [ + "build/unit_test/mocks/test_adi_ades1830_temperatures/Mockadi_ades183x_cfg.c", + "build/unit_test/mocks/test_adi_ades1830_temperatures/Mockadi_ades183x_helpers.c", + "build/unit_test/test/runners/test_adi_ades1830_temperatures_runner.c", + "src/app/driver/afe/adi/common/ades183x/adi_ades183x_temperatures.c", + "tests/unit/app/driver/afe/adi/ades1830/test_adi_ades1830_temperatures.c" + ] + }, + { + "defines": [ + "FOXBMS_AFE_DRIVER_ADI=1u", + "FOXBMS_AFE_DRIVER_ADI_ADES1830=1u", + "TEST_BS_NR_OF_CELL_BLOCKS_PER_MODULE=16u" + ], + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_adi_ades1830_temperatures_2", + "src/app/application/config", + "src/app/driver/afe/adi/ades1830", + "src/app/driver/afe/adi/common/ades183x", + "src/app/driver/afe/adi/common/ades183x/config", + "src/app/driver/afe/adi/common/ades183x/pec", + "src/app/driver/afe/api", + "src/app/driver/config", + "src/app/driver/mcu", + "src/app/driver/pex", + "src/app/driver/rtc", + "src/app/driver/spi", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/config", + "src/app/task/ftask", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/app/driver/afe/adi/ades1830", + "tests/unit/support" + ], + "runner-alias": "adi_ades1830_temperatures_2", + "sources": [ + "build/unit_test/mocks/test_adi_ades1830_temperatures_2/Mockadi_ades183x_cfg.c", + "build/unit_test/mocks/test_adi_ades1830_temperatures_2/Mockadi_ades183x_helpers.c", + "build/unit_test/test/runners/test_adi_ades1830_temperatures_2_runner.c", + "src/app/driver/afe/adi/common/ades183x/adi_ades183x_temperatures.c", + "tests/unit/app/driver/afe/adi/ades1830/test_adi_ades1830_temperatures_2.c" + ] + } + ], + "src/app/driver/afe/adi/common/ades183x/adi_ades183x_voltages.c": [ + { + "defines": [ + "FOXBMS_AFE_DRIVER_ADI=1u", + "FOXBMS_AFE_DRIVER_ADI_ADES1830=1u", + "TEST_BS_NR_OF_CELL_BLOCKS_PER_MODULE=16u" + ], + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_adi_ades1830_voltages", + "src/app/application/config", + "src/app/application/config", + "src/app/driver/afe/adi/ades1830", + "src/app/driver/afe/adi/common/ades183x", + "src/app/driver/afe/adi/common/ades183x/config", + "src/app/driver/afe/adi/common/ades183x/pec", + "src/app/driver/afe/api", + "src/app/driver/config", + "src/app/driver/dma", + "src/app/driver/io", + "src/app/driver/mcu", + "src/app/driver/pex", + "src/app/driver/rtc", + "src/app/driver/spi", + "src/app/driver/ts/api", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/database", + "src/app/engine/diag", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/config", + "src/app/task/ftask", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "test/mocks/test_adi_ades1830_voltages", + "tests/unit/app/application/config" + ], + "runner-alias": "adi_ades1830_voltages", + "sources": [ + "build/unit_test/mocks/test_adi_ades1830_voltages/Mockadi_ades183x_cfg.c", + "build/unit_test/mocks/test_adi_ades1830_voltages/Mockadi_ades183x_diagnostic.c", + "build/unit_test/mocks/test_adi_ades1830_voltages/Mockos.c", + "build/unit_test/mocks/test_adi_ades1830_voltages/Mockspi.c", + "build/unit_test/test/runners/test_adi_ades1830_voltages_runner.c", + "src/app/driver/afe/adi/common/ades183x/adi_ades183x_buffers.c", + "src/app/driver/afe/adi/common/ades183x/adi_ades183x_commands.c", + "src/app/driver/afe/adi/common/ades183x/adi_ades183x_commands_voltages.c", + "src/app/driver/afe/adi/common/ades183x/adi_ades183x_helpers.c", + "src/app/driver/afe/adi/common/ades183x/adi_ades183x_voltages.c", + "src/app/driver/afe/adi/common/ades183x/pec/adi_ades183x_pec.c", + "tests/unit/app/driver/afe/adi/ades1830/test_adi_ades1830_voltages.c" + ] + } + ], + "src/app/driver/afe/adi/common/ades183x/api/adi_ades183x_afe.c": [ + { + "defines": [ + "FOXBMS_AFE_DRIVER_ADI=1u", + "FOXBMS_AFE_DRIVER_ADI_ADES1830=1u", + "TEST_BS_NR_OF_CELL_BLOCKS_PER_MODULE=16u" + ], + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_adi_ades1830_afe", + "src/app/application/config", + "src/app/driver/afe/adi/ades1830", + "src/app/driver/afe/adi/common/ades183x", + "src/app/driver/afe/adi/common/ades183x/config", + "src/app/driver/afe/api", + "src/app/driver/config", + "src/app/driver/mcu", + "src/app/driver/spi", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "runner-alias": "adi_ades1830_afe", + "sources": [ + "build/unit_test/mocks/test_adi_ades1830_afe/MockHL_sys_dma.c", + "build/unit_test/mocks/test_adi_ades1830_afe/Mockadi_ades183x.c", + "build/unit_test/mocks/test_adi_ades1830_afe/Mockadi_ades183x_cfg.c", + "build/unit_test/test/runners/test_adi_ades1830_afe_runner.c", + "src/app/driver/afe/adi/common/ades183x/api/adi_ades183x_afe.c", + "tests/unit/app/driver/afe/adi/ades1830/api/test_adi_ades1830_afe.c" + ] + } + ], + "src/app/driver/afe/adi/common/ades183x/api/adi_ades183x_afe_dma.c": [ + { + "defines": [ + "FOXBMS_AFE_DRIVER_ADI=1u", + "FOXBMS_AFE_DRIVER_ADI_ADES1830=1u", + "TEST_BS_NR_OF_CELL_BLOCKS_PER_MODULE=16u" + ], + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_adi_ades1830_afe_dma", + "src/app/application/config", + "src/app/driver/afe/adi/ades1830", + "src/app/driver/afe/adi/common/ades183x", + "src/app/driver/afe/adi/common/ades183x/config", + "src/app/driver/afe/api", + "src/app/driver/config", + "src/app/driver/mcu", + "src/app/driver/rtc", + "src/app/driver/spi", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/config", + "src/app/task/ftask", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "runner-alias": "adi_ades1830_afe_dma", + "sources": [ + "build/unit_test/mocks/test_adi_ades1830_afe_dma/Mockadi_ades183x.c", + "build/unit_test/mocks/test_adi_ades1830_afe_dma/Mockfassert.c", + "build/unit_test/mocks/test_adi_ades1830_afe_dma/Mockftask.c", + "build/unit_test/mocks/test_adi_ades1830_afe_dma/Mockos.c", + "build/unit_test/mocks/test_adi_ades1830_afe_dma/Mockspi.c", + "build/unit_test/test/runners/test_adi_ades1830_afe_dma_runner.c", + "src/app/driver/afe/adi/common/ades183x/api/adi_ades183x_afe_dma.c", + "tests/unit/app/driver/afe/adi/ades1830/api/test_adi_ades1830_afe_dma.c" + ] + } + ], + "src/app/driver/afe/adi/common/ades183x/config/adi_ades183x_cfg.c": [ + { + "_comment": [ + "This source is tested at ", + "'src/app/driver/afe/adi/ades1830/config/adi_ades1830_cfg.c'." + ], + "ignore": true + } + ], + "src/app/driver/afe/adi/common/ades183x/pec/adi_ades183x_pec.c": [ + { + "defines": [ + "FOXBMS_AFE_DRIVER_ADI=1u", + "FOXBMS_AFE_DRIVER_ADI_ADES1830=1u", + "TEST_BS_NR_OF_CELL_BLOCKS_PER_MODULE=16u" + ], + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_adi_ades1830_pec", + "src/app/application/config", + "src/app/driver/afe/adi/ades1830", + "src/app/driver/afe/adi/common/ades183x", + "src/app/driver/afe/adi/common/ades183x/config", + "src/app/driver/afe/adi/common/ades183x/pec", + "src/app/driver/afe/api", + "src/app/driver/config", + "src/app/driver/mcu", + "src/app/driver/spi", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "runner-alias": "adi_ades1830_pec", + "sources": [ + "build/unit_test/test/runners/test_adi_ades1830_pec_runner.c", + "src/app/driver/afe/adi/common/ades183x/pec/adi_ades183x_pec.c", + "tests/unit/app/driver/afe/adi/ades1830/pec/test_adi_ades1830_pec.c" + ] + } + ], + "src/app/driver/afe/api/afe_plausibility.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_afe_plausibility", + "src/app/application/config", + "src/app/driver/afe/api", + "src/app/driver/mcu", + "src/app/driver/ts/api", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_afe_plausibility/Mocktsi.c", + "build/unit_test/test/runners/test_afe_plausibility_runner.c", + "src/app/driver/afe/api/afe_plausibility.c", + "tests/unit/app/driver/afe/api/test_afe_plausibility.c" + ] + } + ], + "src/app/driver/afe/debug/can/api/debug_can_afe.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_debug_can_afe", + "src/app/application/config", + "src/app/driver/afe/api", + "src/app/driver/afe/debug/can", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_debug_can_afe/Mockdatabase.c", + "build/unit_test/mocks/test_debug_can_afe/Mockdebug_can.c", + "build/unit_test/test/runners/test_debug_can_afe_runner.c", + "src/app/driver/afe/debug/can/api/debug_can_afe.c", + "tests/unit/app/driver/afe/debug/can/api/test_debug_can_afe.c" + ] + } + ], + "src/app/driver/afe/debug/can/api/debug_can_afe_dma.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_debug_can_afe_dma", + "src/app/application/config", + "src/app/driver/afe/api", + "src/app/driver/afe/debug/can", + "src/app/driver/config", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_debug_can_afe_dma/Mockdebug_can.c", + "build/unit_test/mocks/test_debug_can_afe_dma/Mockfassert.c", + "build/unit_test/test/runners/test_debug_can_afe_dma_runner.c", + "src/app/driver/afe/debug/can/api/debug_can_afe_dma.c", + "tests/unit/app/driver/afe/debug/can/api/test_debug_can_afe_dma.c" + ] + } + ], + "src/app/driver/afe/debug/can/debug_can.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_debug_can", + "src/app/application/config", + "src/app/driver/afe/api", + "src/app/driver/afe/debug/can", + "src/app/driver/can", + "src/app/driver/can/cbs", + "src/app/driver/config", + "src/app/driver/mcu", + "src/app/driver/rtc", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/config", + "src/app/task/ftask", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_debug_can/Mockcan_helper.c", + "build/unit_test/mocks/test_debug_can/Mockdatabase.c", + "build/unit_test/mocks/test_debug_can/Mockdatabase_cfg.c", + "build/unit_test/mocks/test_debug_can/Mockftask.c", + "build/unit_test/mocks/test_debug_can/Mockos.c", + "build/unit_test/test/runners/test_debug_can_runner.c", + "src/app/driver/afe/debug/can/debug_can.c", + "tests/unit/app/driver/afe/debug/can/test_debug_can.c" + ] + } + ], + "src/app/driver/afe/debug/default/api/debug_default_afe.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_debug_default_afe", + "src/app/application/config", + "src/app/driver/afe/api", + "src/app/driver/afe/debug/default", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_debug_default_afe/Mockdatabase.c", + "build/unit_test/mocks/test_debug_default_afe/Mockdebug_default.c", + "build/unit_test/test/runners/test_debug_default_afe_runner.c", + "src/app/driver/afe/debug/default/api/debug_default_afe.c", + "tests/unit/app/driver/afe/debug/default/api/test_debug_default_afe.c" + ] + } + ], + "src/app/driver/afe/debug/default/api/debug_default_afe_dma.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_debug_default_afe_dma", + "src/app/application/config", + "src/app/driver/afe/api", + "src/app/driver/afe/debug/default", + "src/app/driver/config", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_debug_default_afe_dma/Mockdebug_default.c", + "build/unit_test/mocks/test_debug_default_afe_dma/Mockfassert.c", + "build/unit_test/test/runners/test_debug_default_afe_dma_runner.c", + "src/app/driver/afe/debug/default/api/debug_default_afe_dma.c", + "tests/unit/app/driver/afe/debug/default/api/test_debug_default_afe_dma.c" + ] + } + ], + "src/app/driver/afe/debug/default/debug_default.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_debug_default", + "src/app/application/config", + "src/app/driver/afe/api", + "src/app/driver/afe/debug/default", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/diag", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_debug_default/Mockdatabase.c", + "build/unit_test/mocks/test_debug_default/Mockos.c", + "build/unit_test/test/runners/test_debug_default_runner.c", + "src/app/driver/afe/debug/default/debug_default.c", + "tests/unit/app/driver/afe/debug/default/test_debug_default.c" + ] + } + ], + "src/app/driver/afe/ltc/6806/config/ltc_6806_cfg.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_ltc_6806_cfg", + "src/app/application/config", + "src/app/driver/afe/api", + "src/app/driver/afe/ltc/6806/config", + "src/app/driver/afe/ltc/common", + "src/app/driver/afe/ltc/common/config", + "src/app/driver/config", + "src/app/driver/mcu", + "src/app/driver/spi", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/test/runners/test_ltc_6806_cfg_runner.c", + "src/app/driver/afe/ltc/6806/config/ltc_6806_cfg.c", + "tests/unit/app/driver/afe/ltc/6806/config/test_ltc_6806_cfg.c" + ] + } + ], + "src/app/driver/afe/ltc/6806/ltc_6806.c": [ + { + "defines": [ + "FOXBMS_AFE_DRIVER_LTC=1" + ], + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_ltc_6806", + "src/app/application/config", + "src/app/driver/afe/api", + "src/app/driver/afe/ltc/6806/config", + "src/app/driver/afe/ltc/common", + "src/app/driver/afe/ltc/common/config", + "src/app/driver/config", + "src/app/driver/dma", + "src/app/driver/io", + "src/app/driver/mcu", + "src/app/driver/pex", + "src/app/driver/spi", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/diag", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_ltc_6806/Mockafe_plausibility.c", + "build/unit_test/mocks/test_ltc_6806/Mockdatabase.c", + "build/unit_test/mocks/test_ltc_6806/Mockdiag.c", + "build/unit_test/mocks/test_ltc_6806/Mockdma.c", + "build/unit_test/mocks/test_ltc_6806/Mockfassert.c", + "build/unit_test/mocks/test_ltc_6806/Mockio.c", + "build/unit_test/mocks/test_ltc_6806/Mockltc_afe_dma.c", + "build/unit_test/mocks/test_ltc_6806/Mockltc_pec.c", + "build/unit_test/mocks/test_ltc_6806/Mockos.c", + "build/unit_test/mocks/test_ltc_6806/Mockpex.c", + "build/unit_test/mocks/test_ltc_6806/Mockspi.c", + "build/unit_test/test/runners/test_ltc_6806_runner.c", + "src/app/driver/afe/ltc/6806/config/ltc_6806_cfg.c", + "src/app/driver/afe/ltc/6806/ltc_6806.c", + "tests/unit/app/driver/afe/ltc/6806/test_ltc_6806.c" + ] + }, + { + "defines": [ + "FOXBMS_AFE_DRIVER_LTC=1" + ], + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_ltc_6806_pec_in_arrays", + "src/app/application/config", + "src/app/driver/afe/api", + "src/app/driver/afe/ltc/6806/config", + "src/app/driver/afe/ltc/common", + "src/app/driver/afe/ltc/common/config", + "src/app/driver/config", + "src/app/driver/dma", + "src/app/driver/io", + "src/app/driver/mcu", + "src/app/driver/pex", + "src/app/driver/spi", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/diag", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "runner-alias": "ltc_6806_pec_in_arrays", + "sources": [ + "build/unit_test/mocks/test_ltc_6806_pec_in_arrays/Mockafe_plausibility.c", + "build/unit_test/mocks/test_ltc_6806_pec_in_arrays/Mockdatabase.c", + "build/unit_test/mocks/test_ltc_6806_pec_in_arrays/Mockdiag.c", + "build/unit_test/mocks/test_ltc_6806_pec_in_arrays/Mockdma.c", + "build/unit_test/mocks/test_ltc_6806_pec_in_arrays/Mockfassert.c", + "build/unit_test/mocks/test_ltc_6806_pec_in_arrays/Mockio.c", + "build/unit_test/mocks/test_ltc_6806_pec_in_arrays/Mockltc_6806_cfg.c", + "build/unit_test/mocks/test_ltc_6806_pec_in_arrays/Mockltc_afe_dma.c", + "build/unit_test/mocks/test_ltc_6806_pec_in_arrays/Mockos.c", + "build/unit_test/mocks/test_ltc_6806_pec_in_arrays/Mockpex.c", + "build/unit_test/mocks/test_ltc_6806_pec_in_arrays/Mockspi.c", + "build/unit_test/test/runners/test_ltc_6806_pec_in_arrays_runner.c", + "src/app/driver/afe/ltc/6806/ltc_6806.c", + "src/app/driver/afe/ltc/common/ltc_pec.c", + "tests/unit/app/driver/afe/ltc/6806/test_ltc_6806_pec_in_arrays.c" + ] + } + ], + "src/app/driver/afe/ltc/6813-1/config/ltc_6813-1_cfg.c": [ + { + "defines": [ + "FOXBMS_AFE_DRIVER_LTC=1" + ], + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_ltc_6813-1_cfg", + "src/app/application/config", + "src/app/driver/afe/api", + "src/app/driver/afe/ltc/6813-1/config", + "src/app/driver/afe/ltc/common", + "src/app/driver/afe/ltc/common/config", + "src/app/driver/config", + "src/app/driver/mcu", + "src/app/driver/spi", + "src/app/driver/ts/api", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_ltc_6813-1_cfg/Mocktsi.c", + "build/unit_test/test/runners/test_ltc_6813-1_cfg_runner.c", + "src/app/driver/afe/ltc/6813-1/config/ltc_6813-1_cfg.c", + "tests/unit/app/driver/afe/ltc/6813-1/config/test_ltc_6813-1_cfg.c" + ] + }, + { + "defines": [ + "FOXBMS_AFE_DRIVER_LTC=1" + ], + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_ltc_6813-1_pec_in_arrays", + "src/app/application/config", + "src/app/driver/afe/api", + "src/app/driver/afe/ltc/6813-1/config", + "src/app/driver/afe/ltc/common", + "src/app/driver/afe/ltc/common/config", + "src/app/driver/config", + "src/app/driver/dma", + "src/app/driver/io", + "src/app/driver/mcu", + "src/app/driver/pex", + "src/app/driver/spi", + "src/app/driver/ts/api", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/diag", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "runner-alias": "ltc_6813-1_pec_in_arrays", + "sources": [ + "build/unit_test/mocks/test_ltc_6813-1_pec_in_arrays/Mockafe_plausibility.c", + "build/unit_test/mocks/test_ltc_6813-1_pec_in_arrays/Mockdatabase.c", + "build/unit_test/mocks/test_ltc_6813-1_pec_in_arrays/Mockdiag.c", + "build/unit_test/mocks/test_ltc_6813-1_pec_in_arrays/Mockdma.c", + "build/unit_test/mocks/test_ltc_6813-1_pec_in_arrays/Mockfassert.c", + "build/unit_test/mocks/test_ltc_6813-1_pec_in_arrays/Mockio.c", + "build/unit_test/mocks/test_ltc_6813-1_pec_in_arrays/Mockltc_afe_dma.c", + "build/unit_test/mocks/test_ltc_6813-1_pec_in_arrays/Mockos.c", + "build/unit_test/mocks/test_ltc_6813-1_pec_in_arrays/Mockpex.c", + "build/unit_test/mocks/test_ltc_6813-1_pec_in_arrays/Mockspi.c", + "build/unit_test/mocks/test_ltc_6813-1_pec_in_arrays/Mocktsi.c", + "build/unit_test/test/runners/test_ltc_6813-1_pec_in_arrays_runner.c", + "src/app/driver/afe/ltc/6813-1/config/ltc_6813-1_cfg.c", + "src/app/driver/afe/ltc/6813-1/ltc_6813-1.c", + "src/app/driver/afe/ltc/common/ltc_pec.c", + "tests/unit/app/driver/afe/ltc/6813-1/test_ltc_6813-1_pec_in_arrays.c" + ] + } + ], + "src/app/driver/afe/ltc/6813-1/ltc_6813-1.c": [ + { + "defines": [ + "FOXBMS_AFE_DRIVER_LTC=1" + ], + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_ltc_6813-1", + "src/app/application/config", + "src/app/driver/afe/api", + "src/app/driver/afe/ltc/6813-1/config", + "src/app/driver/afe/ltc/common", + "src/app/driver/afe/ltc/common/config", + "src/app/driver/config", + "src/app/driver/dma", + "src/app/driver/io", + "src/app/driver/mcu", + "src/app/driver/pex", + "src/app/driver/spi", + "src/app/driver/ts/api", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/diag", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_ltc_6813-1/Mockafe_plausibility.c", + "build/unit_test/mocks/test_ltc_6813-1/Mockdatabase.c", + "build/unit_test/mocks/test_ltc_6813-1/Mockdiag.c", + "build/unit_test/mocks/test_ltc_6813-1/Mockdma.c", + "build/unit_test/mocks/test_ltc_6813-1/Mockfassert.c", + "build/unit_test/mocks/test_ltc_6813-1/Mockio.c", + "build/unit_test/mocks/test_ltc_6813-1/Mockltc_afe_dma.c", + "build/unit_test/mocks/test_ltc_6813-1/Mockltc_pec.c", + "build/unit_test/mocks/test_ltc_6813-1/Mockos.c", + "build/unit_test/mocks/test_ltc_6813-1/Mockpex.c", + "build/unit_test/mocks/test_ltc_6813-1/Mockspi.c", + "build/unit_test/mocks/test_ltc_6813-1/Mocktsi.c", + "build/unit_test/test/runners/test_ltc_6813-1_runner.c", + "src/app/driver/afe/ltc/6813-1/config/ltc_6813-1_cfg.c", + "src/app/driver/afe/ltc/6813-1/ltc_6813-1.c", + "tests/unit/app/driver/afe/ltc/6813-1/test_ltc_6813-1.c" + ] + } + ], + "src/app/driver/afe/ltc/api/ltc_afe.c": [ + { + "defines": [ + "FOXBMS_AFE_DRIVER_LTC=1" + ], + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_ltc_afe", + "src/app/application/config", + "src/app/driver/afe/api", + "src/app/driver/afe/ltc/common", + "src/app/driver/afe/ltc/common/config", + "src/app/driver/config", + "src/app/driver/mcu", + "src/app/driver/spi", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_ltc_afe/MockHL_sys_dma.c", + "build/unit_test/mocks/test_ltc_afe/Mockltc.c", + "build/unit_test/test/runners/test_ltc_afe_runner.c", + "src/app/driver/afe/ltc/api/ltc_afe.c", + "tests/unit/app/driver/afe/ltc/api/test_ltc_afe.c" + ] + } + ], + "src/app/driver/afe/ltc/common/ltc_afe_dma.c": [ + { + "defines": [ + "FOXBMS_AFE_DRIVER_LTC=1" + ], + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_ltc_afe_dma", + "src/app/application/config", + "src/app/driver/afe/api", + "src/app/driver/afe/ltc/common", + "src/app/driver/afe/ltc/common/config", + "src/app/driver/config", + "src/app/driver/io", + "src/app/driver/mcu", + "src/app/driver/spi", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_ltc_afe_dma/MockHL_sys_dma.c", + "build/unit_test/mocks/test_ltc_afe_dma/Mockfassert.c", + "build/unit_test/mocks/test_ltc_afe_dma/Mockio.c", + "build/unit_test/mocks/test_ltc_afe_dma/Mockltc.c", + "build/unit_test/mocks/test_ltc_afe_dma/Mockspi.c", + "build/unit_test/test/runners/test_ltc_afe_dma_runner.c", + "src/app/driver/afe/ltc/common/ltc_afe_dma.c", + "tests/unit/app/driver/afe/ltc/common/test_ltc_afe_dma.c" + ] + } + ], + "src/app/driver/afe/ltc/common/ltc_pec.c": [ + { + "defines": [ + "FOXBMS_AFE_DRIVER_LTC=1" + ], + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_ltc_pec", + "src/app/application/config", + "src/app/driver/afe/ltc/common", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/test/runners/test_ltc_pec_runner.c", + "src/app/driver/afe/ltc/common/ltc_pec.c", + "tests/unit/app/driver/afe/ltc/common/test_ltc_pec.c" + ] + } + ], + "src/app/driver/afe/maxim/api/mxm_afe.c": [ + { + "defines": [ + "FOXBMS_AFE_DRIVER_MAXIM=1u", + "TEST_BS_NR_OF_CELL_BLOCKS_PER_MODULE=14u" + ], + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_mxm_afe", + "src/app/application/config", + "src/app/driver/afe/api", + "src/app/driver/afe/maxim/common", + "src/app/driver/afe/maxim/common/config", + "src/app/driver/config", + "src/app/driver/mcu", + "src/app/driver/spi", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_mxm_afe/MockHL_sys_dma.c", + "build/unit_test/mocks/test_mxm_afe/Mockmxm_17841b.c", + "build/unit_test/mocks/test_mxm_afe/Mockmxm_1785x.c", + "build/unit_test/mocks/test_mxm_afe/Mockmxm_battery_management.c", + "build/unit_test/mocks/test_mxm_afe/Mockmxm_cfg.c", + "build/unit_test/mocks/test_mxm_afe/Mockos.c", + "build/unit_test/test/runners/test_mxm_afe_runner.c", + "src/app/driver/afe/maxim/api/mxm_afe.c", + "tests/unit/app/driver/afe/maxim/api/test_mxm_afe.c" + ] + } + ], + "src/app/driver/afe/maxim/common/config/mxm_cfg.c": [ + { + "defines": [ + "FOXBMS_AFE_DRIVER_MAXIM=1u", + "TEST_BS_NR_OF_CELL_BLOCKS_PER_MODULE=14u" + ], + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_mxm_cfg", + "src/app/application/config", + "src/app/driver/afe/maxim/common/config", + "src/app/driver/config", + "src/app/driver/io", + "src/app/driver/mcu", + "src/app/driver/spi", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/diag", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_mxm_cfg/Mockdiag.c", + "build/unit_test/mocks/test_mxm_cfg/Mockfassert.c", + "build/unit_test/mocks/test_mxm_cfg/Mockio.c", + "build/unit_test/mocks/test_mxm_cfg/Mockspi.c", + "build/unit_test/mocks/test_mxm_cfg/Mockspi_cfg.c", + "build/unit_test/test/runners/test_mxm_cfg_runner.c", + "src/app/driver/afe/maxim/common/config/mxm_cfg.c", + "tests/unit/app/driver/afe/maxim/common/config/test_mxm_cfg.c" + ] + } + ], + "src/app/driver/afe/maxim/common/mxm_17841b.c": [ + { + "defines": [ + "FOXBMS_AFE_DRIVER_MAXIM=1u", + "TEST_BS_NR_OF_CELL_BLOCKS_PER_MODULE=14u" + ], + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_mxm_17841b", + "src/app/application/config", + "src/app/driver/afe/maxim/common", + "src/app/driver/afe/maxim/common/config", + "src/app/driver/config", + "src/app/driver/mcu", + "src/app/driver/spi", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_mxm_17841b/Mockfassert.c", + "build/unit_test/mocks/test_mxm_17841b/Mockmxm_cfg.c", + "build/unit_test/mocks/test_mxm_17841b/Mockos.c", + "build/unit_test/test/runners/test_mxm_17841b_runner.c", + "src/app/driver/afe/maxim/common/mxm_17841b.c", + "src/app/driver/afe/maxim/common/mxm_bit_extract.c", + "tests/unit/app/driver/afe/maxim/common/test_mxm_17841b.c" + ] + } + ], + "src/app/driver/afe/maxim/common/mxm_1785x.c": [ + { + "defines": [ + "FOXBMS_AFE_DRIVER_MAXIM=1u", + "TEST_BS_NR_OF_CELL_BLOCKS_PER_MODULE=14u" + ], + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_mxm_1785x", + "src/app/application/config", + "src/app/driver/afe/api", + "src/app/driver/afe/maxim/common", + "src/app/driver/afe/maxim/common/config", + "src/app/driver/config", + "src/app/driver/mcu", + "src/app/driver/spi", + "src/app/driver/ts/api", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/diag", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_mxm_1785x/Mockafe_plausibility.c", + "build/unit_test/mocks/test_mxm_1785x/Mockdatabase.c", + "build/unit_test/mocks/test_mxm_1785x/Mockdiag.c", + "build/unit_test/mocks/test_mxm_1785x/Mockfassert.c", + "build/unit_test/mocks/test_mxm_1785x/Mockmxm_17841b.c", + "build/unit_test/mocks/test_mxm_1785x/Mockmxm_41b_register_map.c", + "build/unit_test/mocks/test_mxm_1785x/Mockmxm_battery_management.c", + "build/unit_test/mocks/test_mxm_1785x/Mockmxm_cfg.c", + "build/unit_test/mocks/test_mxm_1785x/Mockmxm_crc8.c", + "build/unit_test/mocks/test_mxm_1785x/Mockmxm_registry.c", + "build/unit_test/mocks/test_mxm_1785x/Mockos.c", + "build/unit_test/mocks/test_mxm_1785x/Mocktsi.c", + "build/unit_test/test/runners/test_mxm_1785x_runner.c", + "src/app/driver/afe/maxim/common/mxm_1785x.c", + "src/app/driver/afe/maxim/common/mxm_1785x_tools.c", + "tests/unit/app/driver/afe/maxim/common/test_mxm_1785x.c" + ] + } + ], + "src/app/driver/afe/maxim/common/mxm_1785x_tools.c": [ + { + "defines": [ + "FOXBMS_AFE_DRIVER_MAXIM=1u", + "TEST_BS_NR_OF_CELL_BLOCKS_PER_MODULE=14u" + ], + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_mxm_1785x_tools", + "src/app/application/config", + "src/app/driver/afe/maxim/common", + "src/app/driver/afe/maxim/common/config", + "src/app/driver/config", + "src/app/driver/mcu", + "src/app/driver/spi", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/diag", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_mxm_1785x_tools/Mockfassert.c", + "build/unit_test/mocks/test_mxm_1785x_tools/Mockmxm_cfg.c", + "build/unit_test/test/runners/test_mxm_1785x_tools_runner.c", + "src/app/driver/afe/maxim/common/mxm_1785x_tools.c", + "tests/unit/app/driver/afe/maxim/common/test_mxm_1785x_tools.c" + ] + } + ], + "src/app/driver/afe/maxim/common/mxm_afe_dma.c": [ + { + "defines": [ + "FOXBMS_AFE_DRIVER_MAXIM=1u", + "TEST_BS_NR_OF_CELL_BLOCKS_PER_MODULE=14u" + ], + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_mxm_afe_dma", + "src/app/application/config", + "src/app/driver/afe/api", + "src/app/driver/afe/maxim/common", + "src/app/driver/afe/maxim/common/config", + "src/app/driver/config", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_mxm_afe_dma/MockHL_sys_dma.c", + "build/unit_test/mocks/test_mxm_afe_dma/Mockfassert.c", + "build/unit_test/test/runners/test_mxm_afe_dma_runner.c", + "src/app/driver/afe/maxim/common/mxm_afe_dma.c", + "src/app/driver/foxmath/foxmath.c", + "tests/unit/app/driver/afe/maxim/common/test_mxm_afe_dma.c" + ] + } + ], + "src/app/driver/afe/maxim/common/mxm_battery_management.c": [ + { + "defines": [ + "FOXBMS_AFE_DRIVER_MAXIM=1u", + "TEST_BS_NR_OF_CELL_BLOCKS_PER_MODULE=14u" + ], + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_mxm_battery_management", + "src/app/application/config", + "src/app/driver/afe/api", + "src/app/driver/afe/maxim/common", + "src/app/driver/afe/maxim/common/config", + "src/app/driver/config", + "src/app/driver/mcu", + "src/app/driver/spi", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/diag", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_mxm_battery_management/Mockdiag.c", + "build/unit_test/mocks/test_mxm_battery_management/Mockfassert.c", + "build/unit_test/mocks/test_mxm_battery_management/Mockmxm_17841b.c", + "build/unit_test/mocks/test_mxm_battery_management/Mockmxm_41b_register_map.c", + "build/unit_test/mocks/test_mxm_battery_management/Mockmxm_cfg.c", + "build/unit_test/mocks/test_mxm_battery_management/Mockmxm_crc8.c", + "build/unit_test/mocks/test_mxm_battery_management/Mockos.c", + "build/unit_test/test/runners/test_mxm_battery_management_runner.c", + "src/app/driver/afe/maxim/common/mxm_battery_management.c", + "tests/unit/app/driver/afe/maxim/common/test_mxm_battery_management.c" + ] + } + ], + "src/app/driver/afe/maxim/common/mxm_bit_extract.c": [ + { + "defines": [ + "FOXBMS_AFE_DRIVER_MAXIM=1u", + "TEST_BS_NR_OF_CELL_BLOCKS_PER_MODULE=14u" + ], + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_mxm_bit_extract", + "src/app/application/config", + "src/app/driver/afe/maxim/common", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/test/runners/test_mxm_bit_extract_runner.c", + "src/app/driver/afe/maxim/common/mxm_bit_extract.c", + "tests/unit/app/driver/afe/maxim/common/test_mxm_bit_extract.c" + ] + } + ], + "src/app/driver/afe/maxim/common/mxm_crc8.c": [ + { + "defines": [ + "FOXBMS_AFE_DRIVER_MAXIM=1u", + "TEST_BS_NR_OF_CELL_BLOCKS_PER_MODULE=14u" + ], + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_mxm_crc8", + "src/app/application/config", + "src/app/driver/afe/maxim/common", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/test/runners/test_mxm_crc8_runner.c", + "src/app/driver/afe/maxim/common/mxm_crc8.c", + "tests/unit/app/driver/afe/maxim/common/test_mxm_crc8.c" + ] + } + ], + "src/app/driver/afe/maxim/common/mxm_register_map.h": [ + { + "defines": [ + "FOXBMS_AFE_DRIVER_MAXIM=1u", + "TEST_BS_NR_OF_CELL_BLOCKS_PER_MODULE=14u" + ], + "include": [ + "src/app/application/config", + "src/app/driver/afe/maxim/common", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/test/runners/test_mxm_register_map_runner.c", + "tests/unit/app/driver/afe/maxim/common/test_mxm_register_map.c" + ] + } + ], + "src/app/driver/afe/maxim/common/mxm_registry.c": [ + { + "defines": [ + "FOXBMS_AFE_DRIVER_MAXIM=1u", + "TEST_BS_NR_OF_CELL_BLOCKS_PER_MODULE=14u" + ], + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_mxm_registry", + "src/app/application/config", + "src/app/driver/afe/maxim/common", + "src/app/driver/afe/maxim/common/config", + "src/app/driver/config", + "src/app/driver/foxmath", + "src/app/driver/mcu", + "src/app/driver/spi", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_mxm_registry/Mockfassert.c", + "build/unit_test/mocks/test_mxm_registry/Mockmxm_1785x.c", + "build/unit_test/mocks/test_mxm_registry/Mockmxm_basic_defines.c", + "build/unit_test/test/runners/test_mxm_registry_runner.c", + "src/app/driver/afe/maxim/common/mxm_1785x_tools.c", + "src/app/driver/afe/maxim/common/mxm_registry.c", + "src/app/driver/foxmath/foxmath.c", + "tests/unit/app/driver/afe/maxim/common/test_mxm_registry.c" + ] + } + ], + "src/app/driver/afe/maxim/max17852/mxm_17852.c": [ + { + "defines": [ + "FOXBMS_AFE_DRIVER_MAXIM=1u", + "TEST_BS_NR_OF_CELL_BLOCKS_PER_MODULE=14u" + ], + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_mxm_17852", + "src/app/application/config", + "src/app/driver/afe/api", + "src/app/driver/afe/maxim/common", + "src/app/driver/afe/maxim/common/config", + "src/app/driver/config", + "src/app/driver/mcu", + "src/app/driver/spi", + "src/app/driver/ts/api", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/diag", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_mxm_17852/Mockafe_plausibility.c", + "build/unit_test/mocks/test_mxm_17852/Mockdatabase.c", + "build/unit_test/mocks/test_mxm_17852/Mockdiag.c", + "build/unit_test/mocks/test_mxm_17852/Mockfassert.c", + "build/unit_test/mocks/test_mxm_17852/Mockmxm_17841b.c", + "build/unit_test/mocks/test_mxm_17852/Mockmxm_41b_register_map.c", + "build/unit_test/mocks/test_mxm_17852/Mockmxm_battery_management.c", + "build/unit_test/mocks/test_mxm_17852/Mockmxm_cfg.c", + "build/unit_test/mocks/test_mxm_17852/Mockmxm_crc8.c", + "build/unit_test/mocks/test_mxm_17852/Mockmxm_registry.c", + "build/unit_test/mocks/test_mxm_17852/Mockos.c", + "build/unit_test/mocks/test_mxm_17852/Mocktsi.c", + "build/unit_test/test/runners/test_mxm_17852_runner.c", + "src/app/driver/afe/maxim/common/mxm_1785x.c", + "src/app/driver/afe/maxim/common/mxm_1785x_tools.c", + "src/app/driver/afe/maxim/max17852/mxm_17852.c", + "tests/unit/app/driver/afe/maxim/max17852/test_mxm_17852.c" + ] + } + ], + "src/app/driver/afe/nxp/api/nxp_afe.c": [ + { + "defines": [ + "FOXBMS_AFE_DRIVER_NXP=1u", + "TEST_BS_NR_OF_CELL_BLOCKS_PER_MODULE=14u" + ], + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_nxp_afe", + "src/app/application/config", + "src/app/driver/afe/api", + "src/app/driver/afe/nxp/api", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_nxp_afe/MockHL_sys_dma.c", + "build/unit_test/mocks/test_nxp_afe/Mocknxp_afe.c", + "build/unit_test/test/runners/test_nxp_afe_runner.c", + "src/app/driver/afe/nxp/api/nxp_afe.c", + "tests/unit/app/driver/afe/nxp/api/test_nxp_afe.c" + ] + } + ], + "src/app/driver/afe/nxp/mc33775a/api/nxp_mc33775a_afe.c": [ + { + "defines": [ + "FOXBMS_AFE_DRIVER_NXP=1u", + "TEST_BS_NR_OF_CELL_BLOCKS_PER_MODULE=14u" + ], + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_nxp_mc33775a_afe", + "src/app/application/config", + "src/app/driver/afe/api", + "src/app/driver/afe/nxp/api", + "src/app/driver/afe/nxp/mc33775a", + "src/app/driver/afe/nxp/mc33775a/config", + "src/app/driver/afe/nxp/mc33775a/vendor", + "src/app/driver/config", + "src/app/driver/dma", + "src/app/driver/mcu", + "src/app/driver/pex", + "src/app/driver/spi", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_nxp_mc33775a_afe/Mockafe_dma.c", + "build/unit_test/mocks/test_nxp_mc33775a_afe/Mockdma.c", + "build/unit_test/mocks/test_nxp_mc33775a_afe/Mocknxp_mc33775a.c", + "build/unit_test/mocks/test_nxp_mc33775a_afe/Mockos.c", + "build/unit_test/mocks/test_nxp_mc33775a_afe/Mockpex.c", + "build/unit_test/test/runners/test_nxp_mc33775a_afe_runner.c", + "src/app/driver/afe/nxp/mc33775a/api/nxp_mc33775a_afe.c", + "tests/unit/app/driver/afe/nxp/mc33775a/api/test_nxp_mc33775a_afe.c" + ] + } + ], + "src/app/driver/afe/nxp/mc33775a/config/nxp_mc33775a_cfg.c": [ + { + "defines": [ + "FOXBMS_AFE_DRIVER_NXP=1u", + "TEST_BS_NR_OF_CELL_BLOCKS_PER_MODULE=14u" + ], + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_nxp_mc33775a_cfg", + "src/app/application/config", + "src/app/driver/afe/api", + "src/app/driver/afe/nxp/api", + "src/app/driver/afe/nxp/mc33775a", + "src/app/driver/afe/nxp/mc33775a/config", + "src/app/driver/afe/nxp/mc33775a/vendor", + "src/app/driver/config", + "src/app/driver/dma", + "src/app/driver/mcu", + "src/app/driver/pex", + "src/app/driver/spi", + "src/app/driver/ts/api", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_nxp_mc33775a_cfg/Mocktsi.c", + "build/unit_test/test/runners/test_nxp_mc33775a_cfg_runner.c", + "src/app/driver/afe/nxp/mc33775a/config/nxp_mc33775a_cfg.c", + "tests/unit/app/driver/afe/nxp/mc33775a/config/test_nxp_mc33775a_cfg.c" + ] + } + ], + "src/app/driver/afe/nxp/mc33775a/nxp_afe_dma.c": [ + { + "defines": [ + "FOXBMS_AFE_DRIVER_NXP=1u", + "TEST_BS_NR_OF_CELL_BLOCKS_PER_MODULE=14u" + ], + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_nxp_afe_dma", + "src/app/application/config", + "src/app/driver/afe/api", + "src/app/driver/afe/nxp/mc33775a", + "src/app/driver/afe/nxp/mc33775a/config", + "src/app/driver/afe/nxp/mc33775a/vendor", + "src/app/driver/config", + "src/app/driver/dma", + "src/app/driver/io", + "src/app/driver/mcu", + "src/app/driver/rtc", + "src/app/driver/spi", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/config", + "src/app/task/ftask", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_nxp_afe_dma/Mockdma.c", + "build/unit_test/mocks/test_nxp_afe_dma/Mockio.c", + "build/unit_test/mocks/test_nxp_afe_dma/Mockmcu.c", + "build/unit_test/mocks/test_nxp_afe_dma/Mocknxp_mc33775a-ll.c", + "build/unit_test/mocks/test_nxp_afe_dma/Mocknxp_mc33775a.c", + "build/unit_test/mocks/test_nxp_afe_dma/Mockos.c", + "build/unit_test/mocks/test_nxp_afe_dma/Mockspi.c", + "build/unit_test/mocks/test_nxp_afe_dma/Mocktask.c", + "build/unit_test/test/runners/test_nxp_afe_dma_runner.c", + "src/app/driver/afe/nxp/mc33775a/nxp_afe_dma.c", + "tests/unit/app/driver/afe/nxp/mc33775a/test_nxp_afe_dma.c" + ] + } + ], + "src/app/driver/afe/nxp/mc33775a/nxp_mc33775a-ll.c": [ + { + "defines": [ + "FOXBMS_AFE_DRIVER_NXP=1u", + "TEST_BS_NR_OF_CELL_BLOCKS_PER_MODULE=14u" + ], + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_nxp_mc33775a-ll", + "src/app/application/config", + "src/app/driver/afe/api", + "src/app/driver/afe/nxp/mc33775a", + "src/app/driver/afe/nxp/mc33775a/config", + "src/app/driver/afe/nxp/mc33775a/vendor", + "src/app/driver/config", + "src/app/driver/dma", + "src/app/driver/io", + "src/app/driver/mcu", + "src/app/driver/spi", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_nxp_mc33775a-ll/Mockdma.c", + "build/unit_test/mocks/test_nxp_mc33775a-ll/Mockio.c", + "build/unit_test/mocks/test_nxp_mc33775a-ll/Mockmcu.c", + "build/unit_test/mocks/test_nxp_mc33775a-ll/Mockos.c", + "build/unit_test/mocks/test_nxp_mc33775a-ll/Mockspi.c", + "build/unit_test/mocks/test_nxp_mc33775a-ll/Mocktask.c", + "build/unit_test/test/runners/test_nxp_mc33775a-ll_runner.c", + "src/app/driver/afe/nxp/mc33775a/nxp_mc33775a-ll.c", + "src/app/driver/afe/nxp/mc33775a/vendor/uc_msg_t.c", + "tests/unit/app/driver/afe/nxp/mc33775a/test_nxp_mc33775a-ll.c" + ] + } + ], + "src/app/driver/afe/nxp/mc33775a/nxp_mc33775a.c": [ + { + "defines": [ + "FOXBMS_AFE_DRIVER_NXP=1u", + "TEST_BS_NR_OF_CELL_BLOCKS_PER_MODULE=14u" + ], + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_nxp_mc33775a", + "src/app/application/config", + "src/app/driver/afe/api", + "src/app/driver/afe/nxp/mc33775a", + "src/app/driver/afe/nxp/mc33775a/config", + "src/app/driver/afe/nxp/mc33775a/vendor", + "src/app/driver/config", + "src/app/driver/dma", + "src/app/driver/foxmath", + "src/app/driver/io", + "src/app/driver/mcu", + "src/app/driver/rtc", + "src/app/driver/spi", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/diag", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/config", + "src/app/task/ftask", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_nxp_mc33775a/MockHL_gio.c", + "build/unit_test/mocks/test_nxp_mc33775a/MockHL_system.c", + "build/unit_test/mocks/test_nxp_mc33775a/Mockafe_dma.c", + "build/unit_test/mocks/test_nxp_mc33775a/Mockdatabase.c", + "build/unit_test/mocks/test_nxp_mc33775a/Mockdiag.c", + "build/unit_test/mocks/test_nxp_mc33775a/Mockftask.c", + "build/unit_test/mocks/test_nxp_mc33775a/Mockio.c", + "build/unit_test/mocks/test_nxp_mc33775a/Mockmcu.c", + "build/unit_test/mocks/test_nxp_mc33775a/Mocknxp_mc33775a-ll.c", + "build/unit_test/mocks/test_nxp_mc33775a/Mocknxp_mc33775a_cfg.c", + "build/unit_test/mocks/test_nxp_mc33775a/Mockos.c", + "build/unit_test/mocks/test_nxp_mc33775a/Mockspi.c", + "build/unit_test/test/runners/test_nxp_mc33775a_runner.c", + "src/app/driver/afe/nxp/mc33775a/nxp_mc33775a.c", + "tests/unit/app/driver/afe/nxp/mc33775a/test_nxp_mc33775a.c" + ] + } + ], + "src/app/driver/afe/ti/api/ti_afe.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_ti_afe", + "src/app/application/config", + "src/app/driver/afe/api", + "src/app/driver/afe/ti/api", + "src/app/driver/afe/ti/dummy", + "src/app/driver/afe/ti/dummy/api", + "src/app/driver/config", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/test/runners/test_ti_afe_runner.c", + "src/app/driver/afe/ti/api/ti_afe.c", + "src/app/driver/afe/ti/dummy/api/ti_dummy_afe.c", + "src/app/driver/afe/ti/dummy/ti_dummy.c", + "tests/unit/app/driver/afe/ti/api/test_ti_afe.c" + ] + } + ], + "src/app/driver/afe/ti/common/api/ti_bq79xxx_afe_dma.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_ti_bq79xxx_afe_dma", + "src/app/application/config", + "src/app/driver/afe/api", + "src/app/driver/config", + "src/app/driver/dma", + "src/app/driver/io", + "src/app/driver/mcu", + "src/app/driver/rtc", + "src/app/driver/spi", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/config", + "src/app/task/ftask", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_ti_bq79xxx_afe_dma/Mockdma.c", + "build/unit_test/mocks/test_ti_bq79xxx_afe_dma/Mockio.c", + "build/unit_test/mocks/test_ti_bq79xxx_afe_dma/Mockmcu.c", + "build/unit_test/mocks/test_ti_bq79xxx_afe_dma/Mockos.c", + "build/unit_test/mocks/test_ti_bq79xxx_afe_dma/Mockspi.c", + "build/unit_test/mocks/test_ti_bq79xxx_afe_dma/Mocktask.c", + "build/unit_test/test/runners/test_ti_bq79xxx_afe_dma_runner.c", + "src/app/driver/afe/ti/common/api/ti_bq79xxx_afe_dma.c", + "tests/unit/app/driver/afe/ti/common/api/test_ti_bq79xxx_afe_dma.c" + ] + } + ], + "src/app/driver/afe/ti/dummy/api/ti_dummy_afe.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_ti_dummy_afe", + "src/app/application/config", + "src/app/driver/afe/api", + "src/app/driver/afe/ti/api", + "src/app/driver/afe/ti/dummy", + "src/app/driver/config", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/test/runners/test_ti_dummy_afe_runner.c", + "src/app/driver/afe/ti/dummy/api/ti_dummy_afe.c", + "src/app/driver/afe/ti/dummy/ti_dummy.c", + "tests/unit/app/driver/afe/ti/dummy/api/test_ti_dummy_afe.c" + ] + } + ], + "src/app/driver/afe/ti/dummy/ti_dummy.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_ti_dummy", + "src/app/application/config", + "src/app/driver/afe/api", + "src/app/driver/afe/ti/api", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/test/runners/test_ti_dummy_runner.c", + "src/app/driver/afe/ti/dummy/ti_dummy.c", + "tests/unit/app/driver/afe/ti/dummy/test_ti_dummy.c" + ] + } + ], + "src/app/driver/can/can.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_can", + "src/app/application/config", + "src/app/driver/can", + "src/app/driver/can/cbs", + "src/app/driver/config", + "src/app/driver/foxmath", + "src/app/driver/imd", + "src/app/driver/io", + "src/app/driver/mcu", + "src/app/driver/pex", + "src/app/driver/rtc", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/diag", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/config", + "src/app/task/ftask", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config" + ], + "sources": [ + "build/unit_test/mocks/test_can/MockHL_can.c", + "build/unit_test/mocks/test_can/Mockcan_cfg.c", + "build/unit_test/mocks/test_can/Mockdatabase.c", + "build/unit_test/mocks/test_can/Mockdiag.c", + "build/unit_test/mocks/test_can/Mockfoxmath.c", + "build/unit_test/mocks/test_can/Mockftask.c", + "build/unit_test/mocks/test_can/Mockimd.c", + "build/unit_test/mocks/test_can/Mockio.c", + "build/unit_test/mocks/test_can/Mockmcu.c", + "build/unit_test/mocks/test_can/Mockos.c", + "build/unit_test/mocks/test_can/Mockpex.c", + "build/unit_test/mocks/test_can/Mockqueue.c", + "build/unit_test/mocks/test_can/Mocktest_can_mpu_prototype_queue_create_stub.c", + "build/unit_test/test/runners/test_can_runner.c", + "src/app/driver/can/can.c", + "tests/unit/app/driver/can/test_can.c" + ] + }, + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_can", + "src/app/application/config", + "src/app/driver/can", + "src/app/driver/can/cbs", + "src/app/driver/config", + "src/app/driver/foxmath", + "src/app/driver/imd", + "src/app/driver/io", + "src/app/driver/mcu", + "src/app/driver/pex", + "src/app/driver/rtc", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/diag", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/config", + "src/app/task/ftask", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config" + ], + "runner-alias": "can_1", + "sources": [ + "build/unit_test/mocks/test_can_1/MockHL_can.c", + "build/unit_test/mocks/test_can_1/Mockcan_cfg.c", + "build/unit_test/mocks/test_can_1/Mockdatabase.c", + "build/unit_test/mocks/test_can_1/Mockdiag.c", + "build/unit_test/mocks/test_can_1/Mockfoxmath.c", + "build/unit_test/mocks/test_can_1/Mockftask.c", + "build/unit_test/mocks/test_can_1/Mockimd.c", + "build/unit_test/mocks/test_can_1/Mockio.c", + "build/unit_test/mocks/test_can_1/Mockmcu.c", + "build/unit_test/mocks/test_can_1/Mockos.c", + "build/unit_test/mocks/test_can_1/Mockpex.c", + "build/unit_test/mocks/test_can_1/Mockqueue.c", + "build/unit_test/mocks/test_can_1/Mocktest_can_mpu_prototype_queue_create_stub.c", + "build/unit_test/test/runners/test_can_1_runner.c", + "src/app/driver/can/can.c", + "tests/unit/app/driver/can/test_can_1.c" + ] + }, + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_can", + "src/app/application/config", + "src/app/driver/can", + "src/app/driver/can/cbs", + "src/app/driver/config", + "src/app/driver/foxmath", + "src/app/driver/imd", + "src/app/driver/io", + "src/app/driver/mcu", + "src/app/driver/pex", + "src/app/driver/rtc", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/diag", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/config", + "src/app/task/ftask", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config" + ], + "runner-alias": "can_2", + "sources": [ + "build/unit_test/mocks/test_can_2/MockHL_can.c", + "build/unit_test/mocks/test_can_2/Mockcan_cfg.c", + "build/unit_test/mocks/test_can_2/Mockdatabase.c", + "build/unit_test/mocks/test_can_2/Mockdiag.c", + "build/unit_test/mocks/test_can_2/Mockfoxmath.c", + "build/unit_test/mocks/test_can_2/Mockftask.c", + "build/unit_test/mocks/test_can_2/Mockimd.c", + "build/unit_test/mocks/test_can_2/Mockio.c", + "build/unit_test/mocks/test_can_2/Mockmcu.c", + "build/unit_test/mocks/test_can_2/Mockos.c", + "build/unit_test/mocks/test_can_2/Mockpex.c", + "build/unit_test/mocks/test_can_2/Mockqueue.c", + "build/unit_test/mocks/test_can_2/Mocktest_can_mpu_prototype_queue_create_stub.c", + "build/unit_test/test/runners/test_can_2_runner.c", + "src/app/driver/can/can.c", + "tests/unit/app/driver/can/test_can_2.c" + ] + } + ], + "src/app/driver/can/cbs/can_helper.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_can_helper", + "src/app/application/config", + "src/app/driver/can", + "src/app/driver/can/cbs", + "src/app/driver/can/cbs/tx-cyclic", + "src/app/driver/config", + "src/app/driver/foxmath", + "src/app/driver/fram", + "src/app/driver/imd", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/diag", + "src/app/engine/sys_mon", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_can_helper/Mockcan.c", + "build/unit_test/mocks/test_can_helper/Mockdatabase.c", + "build/unit_test/mocks/test_can_helper/Mockdiag.c", + "build/unit_test/mocks/test_can_helper/Mockfoxmath.c", + "build/unit_test/mocks/test_can_helper/Mockimd.c", + "build/unit_test/mocks/test_can_helper/Mockos.c", + "build/unit_test/test/runners/test_can_helper_runner.c", + "src/app/driver/can/cbs/can_helper.c", + "tests/unit/app/driver/can/cbs/test_can_helper.c" + ] + } + ], + "src/app/driver/can/cbs/rx/can_cbs_rx_aerosol-sensor.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_can_cbs_rx_aerosol-sensor", + "src/app/application/config", + "src/app/driver/can", + "src/app/driver/can/cbs", + "src/app/driver/can/cbs/rx", + "src/app/driver/config", + "src/app/driver/foxmath", + "src/app/driver/imd", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/diag", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_can_cbs_rx_aerosol-sensor/Mockcan.c", + "build/unit_test/mocks/test_can_cbs_rx_aerosol-sensor/Mockdatabase.c", + "build/unit_test/mocks/test_can_cbs_rx_aerosol-sensor/Mockdiag.c", + "build/unit_test/mocks/test_can_cbs_rx_aerosol-sensor/Mockfoxmath.c", + "build/unit_test/mocks/test_can_cbs_rx_aerosol-sensor/Mockimd.c", + "build/unit_test/mocks/test_can_cbs_rx_aerosol-sensor/Mockos.c", + "build/unit_test/test/runners/test_can_cbs_rx_aerosol-sensor_runner.c", + "src/app/driver/can/cbs/can_helper.c", + "src/app/driver/can/cbs/rx/can_cbs_rx_aerosol-sensor.c", + "tests/unit/app/driver/can/cbs/rx/test_can_cbs_rx_aerosol-sensor.c" + ] + } + ], + "src/app/driver/can/cbs/rx/can_cbs_rx_bms-state-request.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_can_cbs_rx_bms-state-request", + "src/app/application/bal", + "src/app/application/config", + "src/app/driver/can", + "src/app/driver/can/cbs", + "src/app/driver/can/cbs/rx", + "src/app/driver/config", + "src/app/driver/foxmath", + "src/app/driver/fram", + "src/app/driver/imd", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/diag", + "src/app/engine/sys_mon", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_can_cbs_rx_bms-state-request/Mockbal.c", + "build/unit_test/mocks/test_can_cbs_rx_bms-state-request/Mockbal_cfg.c", + "build/unit_test/mocks/test_can_cbs_rx_bms-state-request/Mockbms_cfg.c", + "build/unit_test/mocks/test_can_cbs_rx_bms-state-request/Mockcan.c", + "build/unit_test/mocks/test_can_cbs_rx_bms-state-request/Mockcan_helper.c", + "build/unit_test/mocks/test_can_cbs_rx_bms-state-request/Mockdatabase.c", + "build/unit_test/mocks/test_can_cbs_rx_bms-state-request/Mockdiag.c", + "build/unit_test/mocks/test_can_cbs_rx_bms-state-request/Mockfoxmath.c", + "build/unit_test/mocks/test_can_cbs_rx_bms-state-request/Mockimd.c", + "build/unit_test/mocks/test_can_cbs_rx_bms-state-request/Mockos.c", + "build/unit_test/mocks/test_can_cbs_rx_bms-state-request/Mocksys_mon.c", + "build/unit_test/test/runners/test_can_cbs_rx_bms-state-request_runner.c", + "src/app/driver/can/cbs/rx/can_cbs_rx_bms-state-request.c", + "tests/unit/app/driver/can/cbs/rx/test_can_cbs_rx_bms-state-request.c" + ] + } + ], + "src/app/driver/can/cbs/rx/can_cbs_rx_cell-temperatures.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_can_cbs_rx_cell-temperatures", + "src/app/application/config", + "src/app/driver/can", + "src/app/driver/can/cbs", + "src/app/driver/can/cbs/rx", + "src/app/driver/config", + "src/app/driver/mcu", + "src/app/driver/rtc", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/diag", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/config", + "src/app/task/ftask", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_can_cbs_rx_cell-temperatures/Mockcan.c", + "build/unit_test/mocks/test_can_cbs_rx_cell-temperatures/Mockcan_helper.c", + "build/unit_test/mocks/test_can_cbs_rx_cell-temperatures/Mockdiag.c", + "build/unit_test/mocks/test_can_cbs_rx_cell-temperatures/Mockftask.c", + "build/unit_test/mocks/test_can_cbs_rx_cell-temperatures/Mockos.c", + "build/unit_test/test/runners/test_can_cbs_rx_cell-temperatures_runner.c", + "src/app/driver/can/cbs/rx/can_cbs_rx_cell-temperatures.c", + "tests/unit/app/driver/can/cbs/rx/test_can_cbs_rx_cell-temperatures.c" + ] + } + ], + "src/app/driver/can/cbs/rx/can_cbs_rx_cell-voltages.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_can_cbs_rx_cell-voltages", + "src/app/application/config", + "src/app/driver/can", + "src/app/driver/can/cbs", + "src/app/driver/can/cbs/rx", + "src/app/driver/config", + "src/app/driver/mcu", + "src/app/driver/rtc", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/diag", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/config", + "src/app/task/ftask", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_can_cbs_rx_cell-voltages/Mockcan.c", + "build/unit_test/mocks/test_can_cbs_rx_cell-voltages/Mockcan_helper.c", + "build/unit_test/mocks/test_can_cbs_rx_cell-voltages/Mockdiag.c", + "build/unit_test/mocks/test_can_cbs_rx_cell-voltages/Mockftask.c", + "build/unit_test/mocks/test_can_cbs_rx_cell-voltages/Mockos.c", + "build/unit_test/test/runners/test_can_cbs_rx_cell-voltages_runner.c", + "src/app/driver/can/cbs/rx/can_cbs_rx_cell-voltages.c", + "tests/unit/app/driver/can/cbs/rx/test_can_cbs_rx_cell-voltages.c" + ] + } + ], + "src/app/driver/can/cbs/rx/can_cbs_rx_current-sensor.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_can_cbs_rx_current-sensor", + "src/app/application/config", + "src/app/driver/can", + "src/app/driver/can/cbs", + "src/app/driver/can/cbs/rx", + "src/app/driver/config", + "src/app/driver/foxmath", + "src/app/driver/imd", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/diag", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_can_cbs_rx_current-sensor/Mockcan.c", + "build/unit_test/mocks/test_can_cbs_rx_current-sensor/Mockdatabase.c", + "build/unit_test/mocks/test_can_cbs_rx_current-sensor/Mockdiag.c", + "build/unit_test/mocks/test_can_cbs_rx_current-sensor/Mockfoxmath.c", + "build/unit_test/mocks/test_can_cbs_rx_current-sensor/Mockimd.c", + "build/unit_test/mocks/test_can_cbs_rx_current-sensor/Mockos.c", + "build/unit_test/test/runners/test_can_cbs_rx_current-sensor_runner.c", + "src/app/driver/can/cbs/can_helper.c", + "src/app/driver/can/cbs/rx/can_cbs_rx_current-sensor.c", + "tests/unit/app/driver/can/cbs/rx/test_can_cbs_rx_current-sensor.c" + ] + } + ], + "src/app/driver/can/cbs/rx/can_cbs_rx_debug.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_can_cbs_rx_debug", + "src/app/application/config", + "src/app/driver/can", + "src/app/driver/can/cbs", + "src/app/driver/can/cbs/rx", + "src/app/driver/can/cbs/tx-async", + "src/app/driver/config", + "src/app/driver/foxmath", + "src/app/driver/fram", + "src/app/driver/imd", + "src/app/driver/mcu", + "src/app/driver/rtc", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/diag", + "src/app/engine/sys", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/config", + "src/app/task/ftask", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_can_cbs_rx_debug/Mockcan.c", + "build/unit_test/mocks/test_can_cbs_rx_debug/Mockcan_cbs_tx_debug-build-configuration.c", + "build/unit_test/mocks/test_can_cbs_rx_debug/Mockcan_cbs_tx_debug-response.c", + "build/unit_test/mocks/test_can_cbs_rx_debug/Mockcan_cbs_tx_debug-unsupported-multiplexer-values.c", + "build/unit_test/mocks/test_can_cbs_rx_debug/Mockdatabase.c", + "build/unit_test/mocks/test_can_cbs_rx_debug/Mockdiag.c", + "build/unit_test/mocks/test_can_cbs_rx_debug/Mockfoxmath.c", + "build/unit_test/mocks/test_can_cbs_rx_debug/Mockfram.c", + "build/unit_test/mocks/test_can_cbs_rx_debug/Mockimd.c", + "build/unit_test/mocks/test_can_cbs_rx_debug/Mockos.c", + "build/unit_test/mocks/test_can_cbs_rx_debug/Mockreset.c", + "build/unit_test/test/runners/test_can_cbs_rx_debug_runner.c", + "src/app/driver/can/cbs/can_helper.c", + "src/app/driver/can/cbs/rx/can_cbs_rx_debug.c", + "tests/unit/app/driver/can/cbs/rx/test_can_cbs_rx_debug.c" + ] + } + ], + "src/app/driver/can/cbs/rx/can_cbs_rx_imd-info.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_can_cbs_rx_imd-info", + "src/app/application/config", + "src/app/driver/can", + "src/app/driver/can/cbs", + "src/app/driver/can/cbs/rx", + "src/app/driver/config", + "src/app/driver/foxmath", + "src/app/driver/imd", + "src/app/driver/imd/bender/iso165c/config", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/diag", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_can_cbs_rx_imd-info/Mockcan.c", + "build/unit_test/mocks/test_can_cbs_rx_imd-info/Mockdatabase.c", + "build/unit_test/mocks/test_can_cbs_rx_imd-info/Mockdiag.c", + "build/unit_test/mocks/test_can_cbs_rx_imd-info/Mockfoxmath.c", + "build/unit_test/mocks/test_can_cbs_rx_imd-info/Mockimd.c", + "build/unit_test/mocks/test_can_cbs_rx_imd-info/Mockos.c", + "build/unit_test/test/runners/test_can_cbs_rx_imd-info_runner.c", + "src/app/driver/can/cbs/can_helper.c", + "src/app/driver/can/cbs/rx/can_cbs_rx_imd-info.c", + "tests/unit/app/driver/can/cbs/rx/test_can_cbs_rx_imd-info.c" + ] + } + ], + "src/app/driver/can/cbs/rx/can_cbs_rx_imd-response.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_can_cbs_rx_imd-response", + "src/app/application/config", + "src/app/driver/can", + "src/app/driver/can/cbs", + "src/app/driver/can/cbs/rx", + "src/app/driver/config", + "src/app/driver/foxmath", + "src/app/driver/imd", + "src/app/driver/imd/bender/iso165c/config", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/diag", + "src/app/engine/sys_mon", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_can_cbs_rx_imd-response/Mockcan.c", + "build/unit_test/mocks/test_can_cbs_rx_imd-response/Mockcan_helper.c", + "build/unit_test/mocks/test_can_cbs_rx_imd-response/Mockdatabase.c", + "build/unit_test/mocks/test_can_cbs_rx_imd-response/Mockdiag.c", + "build/unit_test/mocks/test_can_cbs_rx_imd-response/Mockfoxmath.c", + "build/unit_test/mocks/test_can_cbs_rx_imd-response/Mockimd.c", + "build/unit_test/mocks/test_can_cbs_rx_imd-response/Mockos.c", + "build/unit_test/test/runners/test_can_cbs_rx_imd-response_runner.c", + "src/app/driver/can/cbs/rx/can_cbs_rx_imd-response.c", + "tests/unit/app/driver/can/cbs/rx/test_can_cbs_rx_imd-response.c" + ] + } + ], + "src/app/driver/can/cbs/tx-async/can_cbs_tx_crash-dump.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_can_cbs_tx_crash-dump", + "src/app/application/config", + "src/app/driver/can", + "src/app/driver/can/cbs", + "src/app/driver/can/cbs/tx-async", + "src/app/driver/config", + "src/app/driver/foxmath", + "src/app/driver/mcu", + "src/app/driver/rtc", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/config", + "src/app/task/ftask", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_can_cbs_tx_crash-dump/Mockcan.c", + "build/unit_test/mocks/test_can_cbs_tx_crash-dump/Mockcan_helper.c", + "build/unit_test/test/runners/test_can_cbs_tx_crash-dump_runner.c", + "src/app/driver/can/cbs/tx-async/can_cbs_tx_crash-dump.c", + "src/app/driver/config/can_cfg.c", + "tests/unit/app/driver/can/cbs/tx-async/test_can_cbs_tx_crash-dump.c" + ] + } + ], + "src/app/driver/can/cbs/tx-async/can_cbs_tx_debug-build-configuration.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_can_cbs_tx_debug-build-configuration", + "src/app/application/config", + "src/app/driver/can", + "src/app/driver/can/cbs", + "src/app/driver/can/cbs/tx-async", + "src/app/driver/config", + "src/app/driver/foxmath", + "src/app/driver/mcu", + "src/app/driver/rtc", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/config", + "src/app/task/ftask", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_can_cbs_tx_debug-build-configuration/Mockcan.c", + "build/unit_test/mocks/test_can_cbs_tx_debug-build-configuration/Mockcan_helper.c", + "build/unit_test/test/runners/test_can_cbs_tx_debug-build-configuration_runner.c", + "src/app/driver/can/cbs/tx-async/can_cbs_tx_debug-build-configuration.c", + "src/app/driver/config/can_cfg.c", + "tests/unit/app/driver/can/cbs/tx-async/test_can_cbs_tx_debug-build-configuration.c" + ] + } + ], + "src/app/driver/can/cbs/tx-async/can_cbs_tx_debug-response.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_can_cbs_tx_debug-response", + "src/app/application/config", + "src/app/driver/can", + "src/app/driver/can/cbs", + "src/app/driver/can/cbs/tx-async", + "src/app/driver/config", + "src/app/driver/foxmath", + "src/app/driver/mcu", + "src/app/driver/rtc", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_can_cbs_tx_debug-response/Mockcan.c", + "build/unit_test/mocks/test_can_cbs_tx_debug-response/Mockcan_helper.c", + "build/unit_test/mocks/test_can_cbs_tx_debug-response/Mockfoxmath.c", + "build/unit_test/mocks/test_can_cbs_tx_debug-response/Mockrtc.c", + "build/unit_test/test/runners/test_can_cbs_tx_debug-response_runner.c", + "src/app/driver/can/cbs/tx-async/can_cbs_tx_debug-response.c", + "src/app/engine/config/database_cfg.c", + "tests/unit/app/driver/can/cbs/tx-async/test_can_cbs_tx_debug-response.c" + ] + } + ], + "src/app/driver/can/cbs/tx-async/can_cbs_tx_debug-unsupported-multiplexer-values.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_can_cbs_tx_debug-unsupported-multiplexer-values", + "src/app/application/config", + "src/app/driver/can", + "src/app/driver/can/cbs", + "src/app/driver/can/cbs/tx-async", + "src/app/driver/config", + "src/app/driver/foxmath", + "src/app/driver/imd", + "src/app/driver/mcu", + "src/app/driver/rtc", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/diag", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_can_cbs_tx_debug-unsupported-multiplexer-values/Mockcan.c", + "build/unit_test/mocks/test_can_cbs_tx_debug-unsupported-multiplexer-values/Mockcan_helper.c", + "build/unit_test/mocks/test_can_cbs_tx_debug-unsupported-multiplexer-values/Mockdatabase.c", + "build/unit_test/mocks/test_can_cbs_tx_debug-unsupported-multiplexer-values/Mockdiag.c", + "build/unit_test/mocks/test_can_cbs_tx_debug-unsupported-multiplexer-values/Mockfoxmath.c", + "build/unit_test/mocks/test_can_cbs_tx_debug-unsupported-multiplexer-values/Mockimd.c", + "build/unit_test/mocks/test_can_cbs_tx_debug-unsupported-multiplexer-values/Mockos.c", + "build/unit_test/test/runners/test_can_cbs_tx_debug-unsupported-multiplexer-values_runner.c", + "src/app/driver/can/cbs/tx-async/can_cbs_tx_debug-unsupported-multiplexer-values.c", + "tests/unit/app/driver/can/cbs/tx-async/test_can_cbs_tx_debug-unsupported-multiplexer-values.c" + ] + } + ], + "src/app/driver/can/cbs/tx-async/can_cbs_tx_imd-request.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_can_cbs_tx_imd-request", + "src/app/application/config", + "src/app/driver/can", + "src/app/driver/can/cbs", + "src/app/driver/can/cbs/tx-async", + "src/app/driver/config", + "src/app/driver/foxmath", + "src/app/driver/imd", + "src/app/driver/imd/bender/iso165c/config", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/diag", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_can_cbs_tx_imd-request/Mockcan.c", + "build/unit_test/mocks/test_can_cbs_tx_imd-request/Mockcan_helper.c", + "build/unit_test/mocks/test_can_cbs_tx_imd-request/Mockdatabase.c", + "build/unit_test/mocks/test_can_cbs_tx_imd-request/Mockdiag.c", + "build/unit_test/mocks/test_can_cbs_tx_imd-request/Mockfoxmath.c", + "build/unit_test/mocks/test_can_cbs_tx_imd-request/Mockimd.c", + "build/unit_test/mocks/test_can_cbs_tx_imd-request/Mockos.c", + "build/unit_test/test/runners/test_can_cbs_tx_imd-request_runner.c", + "src/app/driver/can/cbs/tx-async/can_cbs_tx_imd-request.c", + "tests/unit/app/driver/can/cbs/tx-async/test_can_cbs_tx_imd-request.c" + ] + } + ], + "src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_bms-state-details.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_can_cbs_tx_bms-state-details", + "src/app/application/bms", + "src/app/application/config", + "src/app/driver/can", + "src/app/driver/can/cbs", + "src/app/driver/can/cbs/tx-cyclic", + "src/app/driver/config", + "src/app/driver/contactor", + "src/app/driver/foxmath", + "src/app/driver/fram", + "src/app/driver/imd", + "src/app/driver/mcu", + "src/app/driver/sps", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/diag", + "src/app/engine/sys_mon", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_can_cbs_tx_bms-state-details/Mockcan.c", + "build/unit_test/mocks/test_can_cbs_tx_bms-state-details/Mockcan_helper.c", + "build/unit_test/mocks/test_can_cbs_tx_bms-state-details/Mockdatabase.c", + "build/unit_test/mocks/test_can_cbs_tx_bms-state-details/Mockdiag.c", + "build/unit_test/mocks/test_can_cbs_tx_bms-state-details/Mockfoxmath.c", + "build/unit_test/mocks/test_can_cbs_tx_bms-state-details/Mockimd.c", + "build/unit_test/mocks/test_can_cbs_tx_bms-state-details/Mockos.c", + "build/unit_test/mocks/test_can_cbs_tx_bms-state-details/Mocksys_mon.c", + "build/unit_test/test/runners/test_can_cbs_tx_bms-state-details_runner.c", + "src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_bms-state-details.c", + "tests/unit/app/driver/can/cbs/tx-cyclic/test_can_cbs_tx_bms-state-details.c" + ] + } + ], + "src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_bms-state.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_can_cbs_tx_bms-state", + "src/app/application/bms", + "src/app/application/config", + "src/app/driver/can", + "src/app/driver/can/cbs", + "src/app/driver/can/cbs/tx-cyclic", + "src/app/driver/config", + "src/app/driver/contactor", + "src/app/driver/foxmath", + "src/app/driver/fram", + "src/app/driver/imd", + "src/app/driver/mcu", + "src/app/driver/sps", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/diag", + "src/app/engine/sys_mon", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_can_cbs_tx_bms-state/Mockbms.c", + "build/unit_test/mocks/test_can_cbs_tx_bms-state/Mockcan.c", + "build/unit_test/mocks/test_can_cbs_tx_bms-state/Mockcan_helper.c", + "build/unit_test/mocks/test_can_cbs_tx_bms-state/Mockdatabase.c", + "build/unit_test/mocks/test_can_cbs_tx_bms-state/Mockdiag.c", + "build/unit_test/mocks/test_can_cbs_tx_bms-state/Mockfoxmath.c", + "build/unit_test/mocks/test_can_cbs_tx_bms-state/Mockimd.c", + "build/unit_test/mocks/test_can_cbs_tx_bms-state/Mockos.c", + "build/unit_test/mocks/test_can_cbs_tx_bms-state/Mocksys_mon.c", + "build/unit_test/test/runners/test_can_cbs_tx_bms-state_runner.c", + "src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_bms-state.c", + "tests/unit/app/driver/can/cbs/tx-cyclic/test_can_cbs_tx_bms-state.c" + ] + } + ], + "src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_cell-temperatures.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_can_cbs_tx_cell-temperatures", + "src/app/application/config", + "src/app/driver/can", + "src/app/driver/can/cbs", + "src/app/driver/can/cbs/tx-cyclic", + "src/app/driver/config", + "src/app/driver/foxmath", + "src/app/driver/fram", + "src/app/driver/imd", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/diag", + "src/app/engine/sys_mon", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_can_cbs_tx_cell-temperatures/Mockcan.c", + "build/unit_test/mocks/test_can_cbs_tx_cell-temperatures/Mockdatabase.c", + "build/unit_test/mocks/test_can_cbs_tx_cell-temperatures/Mockdiag.c", + "build/unit_test/mocks/test_can_cbs_tx_cell-temperatures/Mockfoxmath.c", + "build/unit_test/mocks/test_can_cbs_tx_cell-temperatures/Mockimd.c", + "build/unit_test/mocks/test_can_cbs_tx_cell-temperatures/Mockos.c", + "build/unit_test/test/runners/test_can_cbs_tx_cell-temperatures_runner.c", + "src/app/driver/can/cbs/can_helper.c", + "src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_cell-temperatures.c", + "src/app/engine/database/database_helper.c", + "tests/unit/app/driver/can/cbs/tx-cyclic/test_can_cbs_tx_cell-temperatures.c" + ] + } + ], + "src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_cell-voltages.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_can_cbs_tx_cell-voltages", + "src/app/application/config", + "src/app/driver/can", + "src/app/driver/can/cbs", + "src/app/driver/can/cbs/tx-cyclic", + "src/app/driver/config", + "src/app/driver/foxmath", + "src/app/driver/fram", + "src/app/driver/imd", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/diag", + "src/app/engine/sys_mon", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config" + ], + "sources": [ + "build/unit_test/mocks/test_can_cbs_tx_cell-voltages/Mockcan.c", + "build/unit_test/mocks/test_can_cbs_tx_cell-voltages/Mockdatabase.c", + "build/unit_test/mocks/test_can_cbs_tx_cell-voltages/Mockdiag.c", + "build/unit_test/mocks/test_can_cbs_tx_cell-voltages/Mockfoxmath.c", + "build/unit_test/mocks/test_can_cbs_tx_cell-voltages/Mockimd.c", + "build/unit_test/mocks/test_can_cbs_tx_cell-voltages/Mockos.c", + "build/unit_test/test/runners/test_can_cbs_tx_cell-voltages_runner.c", + "src/app/driver/can/cbs/can_helper.c", + "src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_cell-voltages.c", + "src/app/engine/config/database_cfg.c", + "src/app/engine/database/database_helper.c", + "tests/unit/app/driver/can/cbs/tx-cyclic/test_can_cbs_tx_cell-voltages.c" + ] + } + ], + "src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_pack-limits.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_can_cbs_tx_pack-limits", + "src/app/application/config", + "src/app/driver/can", + "src/app/driver/can/cbs", + "src/app/driver/can/cbs/tx-cyclic", + "src/app/driver/config", + "src/app/driver/foxmath", + "src/app/driver/fram", + "src/app/driver/imd", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/diag", + "src/app/engine/sys_mon", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/config", + "src/app/task/ftask", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_can_cbs_tx_pack-limits/Mockcan.c", + "build/unit_test/mocks/test_can_cbs_tx_pack-limits/Mockcan_helper.c", + "build/unit_test/mocks/test_can_cbs_tx_pack-limits/Mockdatabase.c", + "build/unit_test/mocks/test_can_cbs_tx_pack-limits/Mockdiag.c", + "build/unit_test/mocks/test_can_cbs_tx_pack-limits/Mockfoxmath.c", + "build/unit_test/mocks/test_can_cbs_tx_pack-limits/Mockimd.c", + "build/unit_test/mocks/test_can_cbs_tx_pack-limits/Mockos.c", + "build/unit_test/test/runners/test_can_cbs_tx_pack-limits_runner.c", + "src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_pack-limits.c", + "tests/unit/app/driver/can/cbs/tx-cyclic/test_can_cbs_tx_pack-limits.c" + ] + } + ], + "src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_pack-minimum-maximum-values.c": [ + { + "defines": [ + "TEST_BS_NR_OF_STRINGS=2u" + ], + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_can_cbs_tx_pack-minimum-maximum-values", + "src/app/application/bms", + "src/app/application/config", + "src/app/driver/can", + "src/app/driver/can/cbs", + "src/app/driver/can/cbs/tx-cyclic", + "src/app/driver/config", + "src/app/driver/contactor", + "src/app/driver/foxmath", + "src/app/driver/fram", + "src/app/driver/imd", + "src/app/driver/mcu", + "src/app/driver/rtc", + "src/app/driver/sps", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/diag", + "src/app/engine/sys_mon", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_can_cbs_tx_pack-minimum-maximum-values/Mockbms.c", + "build/unit_test/mocks/test_can_cbs_tx_pack-minimum-maximum-values/Mockcan.c", + "build/unit_test/mocks/test_can_cbs_tx_pack-minimum-maximum-values/Mockcan_helper.c", + "build/unit_test/mocks/test_can_cbs_tx_pack-minimum-maximum-values/Mockdatabase.c", + "build/unit_test/mocks/test_can_cbs_tx_pack-minimum-maximum-values/Mockdiag.c", + "build/unit_test/mocks/test_can_cbs_tx_pack-minimum-maximum-values/Mockfoxmath.c", + "build/unit_test/mocks/test_can_cbs_tx_pack-minimum-maximum-values/Mockimd.c", + "build/unit_test/mocks/test_can_cbs_tx_pack-minimum-maximum-values/Mockos.c", + "build/unit_test/test/runners/test_can_cbs_tx_pack-minimum-maximum-values_runner.c", + "src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_pack-minimum-maximum-values.c", + "tests/unit/app/driver/can/cbs/tx-cyclic/test_can_cbs_tx_pack-minimum-maximum-values.c" + ] + } + ], + "src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_pack-state-estimation.c": [ + { + "defines": [ + "TEST_BS_NR_OF_STRINGS=2u" + ], + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_can_cbs_tx_pack-state-estimation", + "src/app/application/bms", + "src/app/application/config", + "src/app/driver/can", + "src/app/driver/can/cbs", + "src/app/driver/can/cbs/tx-cyclic", + "src/app/driver/config", + "src/app/driver/contactor", + "src/app/driver/foxmath", + "src/app/driver/fram", + "src/app/driver/imd", + "src/app/driver/mcu", + "src/app/driver/sps", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/diag", + "src/app/engine/sys_mon", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_can_cbs_tx_pack-state-estimation/Mockbms.c", + "build/unit_test/mocks/test_can_cbs_tx_pack-state-estimation/Mockcan.c", + "build/unit_test/mocks/test_can_cbs_tx_pack-state-estimation/Mockcan_helper.c", + "build/unit_test/mocks/test_can_cbs_tx_pack-state-estimation/Mockdatabase.c", + "build/unit_test/mocks/test_can_cbs_tx_pack-state-estimation/Mockdiag.c", + "build/unit_test/mocks/test_can_cbs_tx_pack-state-estimation/Mockfoxmath.c", + "build/unit_test/mocks/test_can_cbs_tx_pack-state-estimation/Mockimd.c", + "build/unit_test/mocks/test_can_cbs_tx_pack-state-estimation/Mockos.c", + "build/unit_test/test/runners/test_can_cbs_tx_pack-state-estimation_runner.c", + "src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_pack-state-estimation.c", + "tests/unit/app/driver/can/cbs/tx-cyclic/test_can_cbs_tx_pack-state-estimation.c" + ] + } + ], + "src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_pack-values-p0.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_can_cbs_tx_pack-values-p0", + "src/app/application/bms", + "src/app/application/config", + "src/app/driver/can", + "src/app/driver/can/cbs", + "src/app/driver/can/cbs/tx-cyclic", + "src/app/driver/config", + "src/app/driver/foxmath", + "src/app/driver/fram", + "src/app/driver/imd", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/diag", + "src/app/engine/sys_mon", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_can_cbs_tx_pack-values-p0/Mockcan.c", + "build/unit_test/mocks/test_can_cbs_tx_pack-values-p0/Mockcan_helper.c", + "build/unit_test/mocks/test_can_cbs_tx_pack-values-p0/Mockdatabase.c", + "build/unit_test/mocks/test_can_cbs_tx_pack-values-p0/Mockdiag.c", + "build/unit_test/mocks/test_can_cbs_tx_pack-values-p0/Mockfoxmath.c", + "build/unit_test/mocks/test_can_cbs_tx_pack-values-p0/Mockimd.c", + "build/unit_test/mocks/test_can_cbs_tx_pack-values-p0/Mockos.c", + "build/unit_test/test/runners/test_can_cbs_tx_pack-values-p0_runner.c", + "src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_pack-values-p0.c", + "tests/unit/app/driver/can/cbs/tx-cyclic/test_can_cbs_tx_pack-values-p0.c" + ] + } + ], + "src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_pack-values-p1.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_can_cbs_tx_pack-values-p1", + "src/app/application/bms", + "src/app/application/config", + "src/app/driver/can", + "src/app/driver/can/cbs", + "src/app/driver/can/cbs/tx-cyclic", + "src/app/driver/config", + "src/app/driver/foxmath", + "src/app/driver/fram", + "src/app/driver/imd", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/diag", + "src/app/engine/sys_mon", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_can_cbs_tx_pack-values-p1/Mockcan.c", + "build/unit_test/mocks/test_can_cbs_tx_pack-values-p1/Mockcan_helper.c", + "build/unit_test/mocks/test_can_cbs_tx_pack-values-p1/Mockdatabase.c", + "build/unit_test/mocks/test_can_cbs_tx_pack-values-p1/Mockdiag.c", + "build/unit_test/mocks/test_can_cbs_tx_pack-values-p1/Mockfoxmath.c", + "build/unit_test/mocks/test_can_cbs_tx_pack-values-p1/Mockimd.c", + "build/unit_test/mocks/test_can_cbs_tx_pack-values-p1/Mockos.c", + "build/unit_test/test/runners/test_can_cbs_tx_pack-values-p1_runner.c", + "src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_pack-values-p1.c", + "tests/unit/app/driver/can/cbs/tx-cyclic/test_can_cbs_tx_pack-values-p1.c" + ] + } + ], + "src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_string-minimum-maximum-values.c": [ + { + "defines": [ + "TEST_BS_NR_OF_STRINGS=2u" + ], + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_can_cbs_tx_string-minimum-maximum-values", + "src/app/application/bms", + "src/app/application/config", + "src/app/driver/can", + "src/app/driver/can/cbs", + "src/app/driver/can/cbs/tx-cyclic", + "src/app/driver/config", + "src/app/driver/contactor", + "src/app/driver/foxmath", + "src/app/driver/fram", + "src/app/driver/imd", + "src/app/driver/mcu", + "src/app/driver/sps", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/diag", + "src/app/engine/sys_mon", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_can_cbs_tx_string-minimum-maximum-values/Mockbms.c", + "build/unit_test/mocks/test_can_cbs_tx_string-minimum-maximum-values/Mockcan.c", + "build/unit_test/mocks/test_can_cbs_tx_string-minimum-maximum-values/Mockcan_helper.c", + "build/unit_test/mocks/test_can_cbs_tx_string-minimum-maximum-values/Mockdatabase.c", + "build/unit_test/mocks/test_can_cbs_tx_string-minimum-maximum-values/Mockdiag.c", + "build/unit_test/mocks/test_can_cbs_tx_string-minimum-maximum-values/Mockfoxmath.c", + "build/unit_test/mocks/test_can_cbs_tx_string-minimum-maximum-values/Mockimd.c", + "build/unit_test/mocks/test_can_cbs_tx_string-minimum-maximum-values/Mockos.c", + "build/unit_test/test/runners/test_can_cbs_tx_string-minimum-maximum-values_runner.c", + "src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_string-minimum-maximum-values.c", + "tests/unit/app/driver/can/cbs/tx-cyclic/test_can_cbs_tx_string-minimum-maximum-values.c" + ] + } + ], + "src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_string-state-estimation.c": [ + { + "defines": [ + "TEST_BS_NR_OF_STRINGS=2u" + ], + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_can_cbs_tx_string-state-estimation", + "src/app/application/bms", + "src/app/application/config", + "src/app/driver/can", + "src/app/driver/can/cbs", + "src/app/driver/can/cbs/tx-cyclic", + "src/app/driver/config", + "src/app/driver/contactor", + "src/app/driver/foxmath", + "src/app/driver/fram", + "src/app/driver/imd", + "src/app/driver/mcu", + "src/app/driver/sps", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/diag", + "src/app/engine/sys_mon", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_can_cbs_tx_string-state-estimation/Mockbms.c", + "build/unit_test/mocks/test_can_cbs_tx_string-state-estimation/Mockcan.c", + "build/unit_test/mocks/test_can_cbs_tx_string-state-estimation/Mockcan_helper.c", + "build/unit_test/mocks/test_can_cbs_tx_string-state-estimation/Mockdatabase.c", + "build/unit_test/mocks/test_can_cbs_tx_string-state-estimation/Mockdiag.c", + "build/unit_test/mocks/test_can_cbs_tx_string-state-estimation/Mockfoxmath.c", + "build/unit_test/mocks/test_can_cbs_tx_string-state-estimation/Mockimd.c", + "build/unit_test/mocks/test_can_cbs_tx_string-state-estimation/Mockos.c", + "build/unit_test/test/runners/test_can_cbs_tx_string-state-estimation_runner.c", + "src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_string-state-estimation.c", + "tests/unit/app/driver/can/cbs/tx-cyclic/test_can_cbs_tx_string-state-estimation.c" + ] + } + ], + "src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_string-state.c": [ + { + "defines": [ + "TEST_BS_NR_OF_STRINGS=2u" + ], + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_can_cbs_tx_string-state", + "src/app/application/bms", + "src/app/application/config", + "src/app/driver/can", + "src/app/driver/can/cbs", + "src/app/driver/can/cbs/tx-cyclic", + "src/app/driver/config", + "src/app/driver/contactor", + "src/app/driver/foxmath", + "src/app/driver/fram", + "src/app/driver/imd", + "src/app/driver/mcu", + "src/app/driver/sps", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/diag", + "src/app/engine/sys_mon", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config" + ], + "sources": [ + "build/unit_test/mocks/test_can_cbs_tx_string-state/Mockbms.c", + "build/unit_test/mocks/test_can_cbs_tx_string-state/Mockcan.c", + "build/unit_test/mocks/test_can_cbs_tx_string-state/Mockdatabase.c", + "build/unit_test/mocks/test_can_cbs_tx_string-state/Mockdiag.c", + "build/unit_test/mocks/test_can_cbs_tx_string-state/Mockfoxmath.c", + "build/unit_test/mocks/test_can_cbs_tx_string-state/Mockimd.c", + "build/unit_test/mocks/test_can_cbs_tx_string-state/Mockos.c", + "build/unit_test/mocks/test_can_cbs_tx_string-state/Mocksys_mon.c", + "build/unit_test/test/runners/test_can_cbs_tx_string-state_runner.c", + "src/app/driver/can/cbs/can_helper.c", + "src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_string-state.c", + "tests/unit/app/driver/can/cbs/tx-cyclic/test_can_cbs_tx_string-state.c" + ] + } + ], + "src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_string-values-p0.c": [ + { + "defines": [ + "TEST_BS_NR_OF_STRINGS=2u" + ], + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_can_cbs_tx_string-values-p0", + "src/app/application/bms", + "src/app/application/config", + "src/app/driver/can", + "src/app/driver/can/cbs", + "src/app/driver/can/cbs/tx-cyclic", + "src/app/driver/config", + "src/app/driver/foxmath", + "src/app/driver/fram", + "src/app/driver/imd", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/diag", + "src/app/engine/sys_mon", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_can_cbs_tx_string-values-p0/Mockcan.c", + "build/unit_test/mocks/test_can_cbs_tx_string-values-p0/Mockcan_helper.c", + "build/unit_test/mocks/test_can_cbs_tx_string-values-p0/Mockdatabase.c", + "build/unit_test/mocks/test_can_cbs_tx_string-values-p0/Mockdiag.c", + "build/unit_test/mocks/test_can_cbs_tx_string-values-p0/Mockfoxmath.c", + "build/unit_test/mocks/test_can_cbs_tx_string-values-p0/Mockimd.c", + "build/unit_test/mocks/test_can_cbs_tx_string-values-p0/Mockos.c", + "build/unit_test/test/runners/test_can_cbs_tx_string-values-p0_runner.c", + "src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_string-values-p0.c", + "tests/unit/app/driver/can/cbs/tx-cyclic/test_can_cbs_tx_string-values-p0.c" + ] + } + ], + "src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_string-values-p1.c": [ + { + "defines": [ + "TEST_BS_NR_OF_STRINGS=2u" + ], + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_can_cbs_tx_string-values-p1", + "src/app/application/bms", + "src/app/application/config", + "src/app/driver/can", + "src/app/driver/can/cbs", + "src/app/driver/can/cbs/tx-cyclic", + "src/app/driver/config", + "src/app/driver/foxmath", + "src/app/driver/fram", + "src/app/driver/imd", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/diag", + "src/app/engine/sys_mon", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_can_cbs_tx_string-values-p1/Mockcan.c", + "build/unit_test/mocks/test_can_cbs_tx_string-values-p1/Mockcan_helper.c", + "build/unit_test/mocks/test_can_cbs_tx_string-values-p1/Mockdatabase.c", + "build/unit_test/mocks/test_can_cbs_tx_string-values-p1/Mockdiag.c", + "build/unit_test/mocks/test_can_cbs_tx_string-values-p1/Mockfoxmath.c", + "build/unit_test/mocks/test_can_cbs_tx_string-values-p1/Mockimd.c", + "build/unit_test/mocks/test_can_cbs_tx_string-values-p1/Mockos.c", + "build/unit_test/test/runners/test_can_cbs_tx_string-values-p1_runner.c", + "src/app/driver/can/cbs/tx-cyclic/can_cbs_tx_string-values-p1.c", + "tests/unit/app/driver/can/cbs/tx-cyclic/test_can_cbs_tx_string-values-p1.c" + ] + } + ], + "src/app/driver/checksum/checksum.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_checksum", + "src/app/application/config", + "src/app/driver/checksum", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/test/runners/test_checksum_runner.c", + "src/app/driver/checksum/checksum.c", + "tests/unit/app/driver/checksum/test_checksum.c" + ] + } + ], + "src/app/driver/config/can_cfg.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_can_cfg", + "src/app/application/config", + "src/app/driver/can", + "src/app/driver/config", + "src/app/driver/foxmath", + "src/app/driver/imd", + "src/app/driver/mcu", + "src/app/driver/rtc", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/diag", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/config", + "src/app/task/ftask", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_can_cfg/Mockcan.c", + "build/unit_test/mocks/test_can_cfg/Mockdatabase.c", + "build/unit_test/mocks/test_can_cfg/Mockdiag.c", + "build/unit_test/mocks/test_can_cfg/Mockfoxmath.c", + "build/unit_test/mocks/test_can_cfg/Mockftask.c", + "build/unit_test/mocks/test_can_cfg/Mockimd.c", + "build/unit_test/mocks/test_can_cfg/Mockmpu_prototypes.c", + "build/unit_test/mocks/test_can_cfg/Mockos.c", + "build/unit_test/test/runners/test_can_cfg_runner.c", + "src/app/driver/config/can_cfg.c", + "tests/unit/app/driver/config/test_can_cfg.c" + ] + } + ], + "src/app/driver/config/can_cfg_rx.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_can_cfg_rx", + "src/app/application/config", + "src/app/driver/can", + "src/app/driver/can/cbs/rx", + "src/app/driver/config", + "src/app/driver/foxmath", + "src/app/driver/imd", + "src/app/driver/mcu", + "src/app/driver/rtc", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/diag", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/config", + "src/app/task/ftask", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_can_cfg_rx/Mockcan.c", + "build/unit_test/mocks/test_can_cfg_rx/Mockcan_cbs_rx.c", + "build/unit_test/mocks/test_can_cfg_rx/Mockdatabase.c", + "build/unit_test/mocks/test_can_cfg_rx/Mockdiag.c", + "build/unit_test/mocks/test_can_cfg_rx/Mockfoxmath.c", + "build/unit_test/mocks/test_can_cfg_rx/Mockftask.c", + "build/unit_test/mocks/test_can_cfg_rx/Mockimd.c", + "build/unit_test/mocks/test_can_cfg_rx/Mockmpu_prototypes.c", + "build/unit_test/mocks/test_can_cfg_rx/Mockos.c", + "build/unit_test/test/runners/test_can_cfg_rx_runner.c", + "src/app/driver/config/can_cfg.c", + "src/app/driver/config/can_cfg_rx.c", + "tests/unit/app/driver/config/test_can_cfg_rx.c" + ] + } + ], + "src/app/driver/config/can_cfg_tx_cyclic.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_can_cfg_tx_cyclic", + "src/app/application/config", + "src/app/driver/can", + "src/app/driver/can/cbs", + "src/app/driver/can/cbs/tx-cyclic", + "src/app/driver/config", + "src/app/driver/foxmath", + "src/app/driver/fram", + "src/app/driver/imd", + "src/app/driver/mcu", + "src/app/driver/rtc", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/diag", + "src/app/engine/sys_mon", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/config", + "src/app/task/ftask", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_can_cfg_tx_cyclic/Mockcan.c", + "build/unit_test/mocks/test_can_cfg_tx_cyclic/Mockcan_cbs_tx_cyclic.c", + "build/unit_test/mocks/test_can_cfg_tx_cyclic/Mockdatabase.c", + "build/unit_test/mocks/test_can_cfg_tx_cyclic/Mockdiag.c", + "build/unit_test/mocks/test_can_cfg_tx_cyclic/Mockfoxmath.c", + "build/unit_test/mocks/test_can_cfg_tx_cyclic/Mockftask.c", + "build/unit_test/mocks/test_can_cfg_tx_cyclic/Mockimd.c", + "build/unit_test/mocks/test_can_cfg_tx_cyclic/Mockmpu_prototypes.c", + "build/unit_test/mocks/test_can_cfg_tx_cyclic/Mockos.c", + "build/unit_test/test/runners/test_can_cfg_tx_cyclic_runner.c", + "src/app/driver/config/can_cfg.c", + "src/app/driver/config/can_cfg_tx_cyclic.c", + "tests/unit/app/driver/config/test_can_cfg_tx_cyclic.c" + ] + } + ], + "src/app/driver/config/contactor_cfg.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_contactor_cfg", + "src/app/application/config", + "src/app/driver/config", + "src/app/driver/mcu", + "src/app/driver/sps", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config" + ], + "sources": [ + "build/unit_test/test/runners/test_contactor_cfg_runner.c", + "src/app/driver/config/contactor_cfg.c", + "tests/unit/app/driver/config/test_contactor_cfg.c" + ] + } + ], + "src/app/driver/config/dma_cfg.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_dma_cfg", + "src/app/application/config", + "src/app/driver/config", + "src/app/driver/mcu", + "src/app/driver/spi", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/test/runners/test_dma_cfg_runner.c", + "src/app/driver/config/dma_cfg.c", + "tests/unit/app/driver/config/test_dma_cfg.c" + ] + } + ], + "src/app/driver/config/fram_cfg.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_fram_cfg", + "src/app/application/config", + "src/app/driver/config", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config" + ], + "sources": [ + "build/unit_test/test/runners/test_fram_cfg_runner.c", + "src/app/driver/config/fram_cfg.c", + "tests/unit/app/driver/config/test_fram_cfg.c" + ] + } + ], + "src/app/driver/config/pex_cfg.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_pex_cfg", + "src/app/application/config", + "src/app/driver/config", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config" + ], + "sources": [ + "build/unit_test/test/runners/test_pex_cfg_runner.c", + "src/app/driver/config/pex_cfg.c", + "tests/unit/app/driver/config/test_pex_cfg.c" + ] + } + ], + "src/app/driver/config/spi_cfg.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_spi_cfg", + "src/app/application/config", + "src/app/driver/config", + "src/app/driver/mcu", + "src/app/driver/spi", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config" + ], + "sources": [ + "build/unit_test/test/runners/test_spi_cfg_runner.c", + "src/app/driver/config/spi_cfg.c", + "tests/unit/app/driver/config/test_spi_cfg.c" + ] + } + ], + "src/app/driver/config/sps_cfg.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_sps_cfg", + "src/app/application/config", + "src/app/driver/config", + "src/app/driver/mcu", + "src/app/driver/sps", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/test/runners/test_sps_cfg_runner.c", + "src/app/driver/config/sps_cfg.c", + "tests/unit/app/driver/config/test_sps_cfg.c" + ] + } + ], + "src/app/driver/contactor/contactor.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_contactor", + "src/app/application/config", + "src/app/driver/config", + "src/app/driver/contactor", + "src/app/driver/io", + "src/app/driver/mcu", + "src/app/driver/sps", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/diag", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config" + ], + "sources": [ + "build/unit_test/mocks/test_contactor/Mockcontactor_cfg.c", + "build/unit_test/mocks/test_contactor/Mockdiag.c", + "build/unit_test/mocks/test_contactor/Mockfassert.c", + "build/unit_test/mocks/test_contactor/Mockio.c", + "build/unit_test/mocks/test_contactor/Mockmcu.c", + "build/unit_test/mocks/test_contactor/Mocksps.c", + "build/unit_test/mocks/test_contactor/Mocksps_cfg.c", + "build/unit_test/test/runners/test_contactor_runner.c", + "src/app/driver/contactor/contactor.c", + "tests/unit/app/driver/contactor/test_contactor.c" + ] + } + ], + "src/app/driver/crc/crc.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_crc", + "src/app/application/config", + "src/app/driver/crc", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config" + ], + "sources": [ + "build/unit_test/mocks/test_crc/Mockfassert.c", + "build/unit_test/test/runners/test_crc_runner.c", + "src/app/driver/crc/crc.c", + "tests/unit/app/driver/crc/test_crc.c" + ] + } + ], + "src/app/driver/dma/dma.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_dma", + "src/app/application/config", + "src/app/driver/afe/api", + "src/app/driver/config", + "src/app/driver/dma", + "src/app/driver/i2c", + "src/app/driver/io", + "src/app/driver/mcu", + "src/app/driver/rtc", + "src/app/driver/spi", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/config", + "src/app/task/ftask", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_dma/MockHL_i2c.c", + "build/unit_test/mocks/test_dma/MockHL_spi.c", + "build/unit_test/mocks/test_dma/MockHL_sys_dma.c", + "build/unit_test/mocks/test_dma/Mockafe_dma.c", + "build/unit_test/mocks/test_dma/Mocki2c.c", + "build/unit_test/mocks/test_dma/Mockio.c", + "build/unit_test/mocks/test_dma/Mockspi.c", + "build/unit_test/mocks/test_dma/Mocktask.c", + "build/unit_test/test/runners/test_dma_runner.c", + "src/app/driver/dma/dma.c", + "tests/unit/app/driver/dma/test_dma.c" + ] + } + ], + "src/app/driver/foxmath/foxmath.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_foxmath", + "src/app/application/config", + "src/app/driver/foxmath", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config" + ], + "sources": [ + "build/unit_test/test/runners/test_foxmath_runner.c", + "src/app/driver/foxmath/foxmath.c", + "tests/unit/app/driver/foxmath/test_foxmath.c" + ] + } + ], + "src/app/driver/fram/fram.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_fram", + "src/app/application/config", + "src/app/driver/config", + "src/app/driver/crc", + "src/app/driver/foxmath", + "src/app/driver/fram", + "src/app/driver/io", + "src/app/driver/mcu", + "src/app/driver/spi", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/diag", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_fram/MockHL_spi.c", + "build/unit_test/mocks/test_fram/Mockcrc.c", + "build/unit_test/mocks/test_fram/Mockdiag.c", + "build/unit_test/mocks/test_fram/Mockio.c", + "build/unit_test/mocks/test_fram/Mockmcu.c", + "build/unit_test/mocks/test_fram/Mockspi.c", + "build/unit_test/test/runners/test_fram_runner.c", + "src/app/driver/config/fram_cfg.c", + "src/app/driver/config/spi_cfg.c", + "src/app/driver/fram/fram.c", + "tests/unit/app/driver/fram/test_fram.c" + ] + } + ], + "src/app/driver/htsensor/htsensor.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_htsensor", + "src/app/application/config", + "src/app/driver/htsensor", + "src/app/driver/i2c", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_htsensor/MockHL_i2c.c", + "build/unit_test/mocks/test_htsensor/MockHL_sys_dma.c", + "build/unit_test/mocks/test_htsensor/Mockdatabase.c", + "build/unit_test/mocks/test_htsensor/Mocki2c.c", + "build/unit_test/mocks/test_htsensor/Mockos.c", + "build/unit_test/test/runners/test_htsensor_runner.c", + "src/app/driver/htsensor/htsensor.c", + "tests/unit/app/driver/htsensor/test_htsensor.c" + ] + } + ], + "src/app/driver/i2c/i2c.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_i2c", + "src/app/application/config", + "src/app/driver/config", + "src/app/driver/dma", + "src/app/driver/i2c", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/diag", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_i2c/MockHL_i2c.c", + "build/unit_test/mocks/test_i2c/MockHL_sys_dma.c", + "build/unit_test/mocks/test_i2c/Mockmcu.c", + "build/unit_test/mocks/test_i2c/Mockos.c", + "build/unit_test/mocks/test_i2c/Mocktask.c", + "build/unit_test/test/runners/test_i2c_runner.c", + "src/app/driver/i2c/i2c.c", + "tests/unit/app/driver/i2c/test_i2c.c" + ] + } + ], + "src/app/driver/imd/bender/ir155/bender_ir155.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_bender_ir155", + "src/app/application/config", + "src/app/driver/config", + "src/app/driver/fram", + "src/app/driver/imd", + "src/app/driver/imd/bender/ir155", + "src/app/driver/imd/bender/ir155/config", + "src/app/driver/io", + "src/app/driver/mcu", + "src/app/driver/pwm", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/diag", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/config", + "src/app/task/ftask", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_bender_ir155/Mockbender_ir155_helper.c", + "build/unit_test/mocks/test_bender_ir155/Mockdatabase.c", + "build/unit_test/mocks/test_bender_ir155/Mockdiag.c", + "build/unit_test/mocks/test_bender_ir155/Mockfram.c", + "build/unit_test/mocks/test_bender_ir155/Mockio.c", + "build/unit_test/mocks/test_bender_ir155/Mockos.c", + "build/unit_test/test/runners/test_bender_ir155_runner.c", + "src/app/driver/imd/bender/ir155/bender_ir155.c", + "tests/unit/app/driver/imd/bender/ir155/test_bender_ir155.c" + ] + } + ], + "src/app/driver/imd/bender/ir155/bender_ir155_helper.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_bender_ir155_helper", + "src/app/application/config", + "src/app/driver/config", + "src/app/driver/fram", + "src/app/driver/imd", + "src/app/driver/imd/bender/ir155", + "src/app/driver/imd/bender/ir155/config", + "src/app/driver/io", + "src/app/driver/mcu", + "src/app/driver/pwm", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/config", + "src/app/task/ftask", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_bender_ir155_helper/Mockfram.c", + "build/unit_test/mocks/test_bender_ir155_helper/Mockio.c", + "build/unit_test/mocks/test_bender_ir155_helper/Mockpwm.c", + "build/unit_test/test/runners/test_bender_ir155_helper_runner.c", + "src/app/driver/imd/bender/ir155/bender_ir155_helper.c", + "tests/unit/app/driver/imd/bender/ir155/test_bender_ir155_helper.c" + ] + } + ], + "src/app/driver/imd/bender/iso165c/bender_iso165c.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_bender_iso165c", + "src/app/application/config", + "src/app/driver/can", + "src/app/driver/can/cbs", + "src/app/driver/can/cbs/rx", + "src/app/driver/can/cbs/tx-async", + "src/app/driver/config", + "src/app/driver/imd", + "src/app/driver/imd/bender/iso165c", + "src/app/driver/imd/bender/iso165c/config", + "src/app/driver/io", + "src/app/driver/mcu", + "src/app/driver/rtc", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/diag", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/config", + "src/app/task/ftask", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_bender_iso165c/Mockcan.c", + "build/unit_test/mocks/test_bender_iso165c/Mockcan_cbs_rx_imd-info.c", + "build/unit_test/mocks/test_bender_iso165c/Mockcan_cbs_rx_imd-response.c", + "build/unit_test/mocks/test_bender_iso165c/Mockcan_cbs_tx_imd-request.c", + "build/unit_test/mocks/test_bender_iso165c/Mockcan_cfg.c", + "build/unit_test/mocks/test_bender_iso165c/Mockdatabase.c", + "build/unit_test/mocks/test_bender_iso165c/Mockdiag.c", + "build/unit_test/mocks/test_bender_iso165c/Mockftask.c", + "build/unit_test/mocks/test_bender_iso165c/Mockio.c", + "build/unit_test/mocks/test_bender_iso165c/Mockmcu.c", + "build/unit_test/mocks/test_bender_iso165c/Mockmpu_prototypes.c", + "build/unit_test/mocks/test_bender_iso165c/Mockos.c", + "build/unit_test/test/runners/test_bender_iso165c_runner.c", + "src/app/driver/imd/bender/iso165c/bender_iso165c.c", + "tests/unit/app/driver/imd/bender/iso165c/test_bender_iso165c.c" + ] + } + ], + "src/app/driver/imd/imd.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_imd", + "src/app/application/config", + "src/app/driver/config", + "src/app/driver/imd", + "src/app/driver/imd/none", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/diag", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/config", + "src/app/task/ftask", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_imd/Mockdatabase.c", + "build/unit_test/mocks/test_imd/Mockdiag.c", + "build/unit_test/mocks/test_imd/Mockos.c", + "build/unit_test/test/runners/test_imd_runner.c", + "src/app/driver/imd/imd.c", + "src/app/driver/imd/none/no-imd.c", + "tests/unit/app/driver/imd/test_imd.c" + ] + } + ], + "src/app/driver/imd/none/no-imd.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_no-imd", + "src/app/application/config", + "src/app/driver/config", + "src/app/driver/imd", + "src/app/driver/imd/none", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/config", + "src/app/task/ftask", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_no-imd/Mockdatabase.c", + "build/unit_test/test/runners/test_no-imd_runner.c", + "src/app/driver/imd/none/no-imd.c", + "tests/unit/app/driver/imd/none/test_no-imd.c" + ] + } + ], + "src/app/driver/interlock/interlock.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_interlock", + "src/app/application/config", + "src/app/driver/config", + "src/app/driver/interlock", + "src/app/driver/io", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/diag", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_interlock/MockHL_het.c", + "build/unit_test/mocks/test_interlock/Mockdatabase.c", + "build/unit_test/mocks/test_interlock/Mockdiag.c", + "build/unit_test/mocks/test_interlock/Mockfassert.c", + "build/unit_test/mocks/test_interlock/Mockio.c", + "build/unit_test/mocks/test_interlock/Mockos.c", + "build/unit_test/test/runners/test_interlock_runner.c", + "src/app/driver/interlock/interlock.c", + "tests/unit/app/driver/interlock/test_interlock.c" + ] + } + ], + "src/app/driver/io/io.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_io", + "src/app/application/config", + "src/app/driver/io", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_io/Mockmcu.c", + "build/unit_test/test/runners/test_io_runner.c", + "src/app/driver/io/io.c", + "tests/unit/app/driver/io/test_io.c" + ] + } + ], + "src/app/driver/led/led.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_led", + "src/app/application/config", + "src/app/driver/io", + "src/app/driver/led", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_led/Mockio.c", + "build/unit_test/mocks/test_led/Mockos.c", + "build/unit_test/test/runners/test_led_runner.c", + "src/app/driver/led/led.c", + "tests/unit/app/driver/led/test_led.c" + ] + } + ], + "src/app/driver/mcu/mcu.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_mcu", + "src/app/application/config", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/test/runners/test_mcu_runner.c", + "src/app/driver/mcu/mcu.c", + "tests/unit/app/driver/mcu/test_mcu.c" + ] + } + ], + "src/app/driver/meas/meas.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_meas", + "src/app/application/config", + "src/app/driver/afe/api", + "src/app/driver/mcu", + "src/app/driver/meas", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_meas/Mockafe.c", + "build/unit_test/test/runners/test_meas_runner.c", + "src/app/driver/meas/meas.c", + "tests/unit/app/driver/meas/test_meas.c" + ] + } + ], + "src/app/driver/pex/pex.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_pex", + "src/app/application/config", + "src/app/driver/config", + "src/app/driver/i2c", + "src/app/driver/mcu", + "src/app/driver/pex", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/diag", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config" + ], + "sources": [ + "build/unit_test/mocks/test_pex/MockHL_i2c.c", + "build/unit_test/mocks/test_pex/Mockdatabase.c", + "build/unit_test/mocks/test_pex/Mockdiag.c", + "build/unit_test/mocks/test_pex/Mocki2c.c", + "build/unit_test/mocks/test_pex/Mockos.c", + "build/unit_test/mocks/test_pex/Mockportmacro.c", + "build/unit_test/test/runners/test_pex_runner.c", + "src/app/driver/config/pex_cfg.c", + "src/app/driver/pex/pex.c", + "tests/unit/app/driver/pex/test_pex.c" + ] + } + ], + "src/app/driver/pwm/pwm.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_pwm", + "src/app/application/config", + "src/app/driver/foxmath", + "src/app/driver/mcu", + "src/app/driver/pwm", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config" + ], + "sources": [ + "build/unit_test/mocks/test_pwm/MockHL_etpwm.c", + "build/unit_test/test/runners/test_pwm_runner.c", + "src/app/driver/pwm/pwm.c", + "tests/unit/app/driver/pwm/test_pwm.c" + ] + } + ], + "src/app/driver/rtc/rtc.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_rtc", + "src/app/application/config", + "src/app/driver/config", + "src/app/driver/foxmath", + "src/app/driver/i2c", + "src/app/driver/mcu", + "src/app/driver/rtc", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/diag", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/config", + "src/app/task/ftask", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_rtc/MockHL_i2c.c", + "build/unit_test/mocks/test_rtc/MockHL_sys_dma.c", + "build/unit_test/mocks/test_rtc/Mockdatabase.c", + "build/unit_test/mocks/test_rtc/Mockdiag.c", + "build/unit_test/mocks/test_rtc/Mocki2c.c", + "build/unit_test/mocks/test_rtc/Mockos.c", + "build/unit_test/test/runners/test_rtc_runner.c", + "src/app/driver/rtc/rtc.c", + "tests/unit/app/driver/rtc/test_rtc.c" + ] + } + ], + "src/app/driver/sbc/nxpfs85xx.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_nxpfs85xx", + "src/app/application/config", + "src/app/driver/config", + "src/app/driver/dma", + "src/app/driver/fram", + "src/app/driver/io", + "src/app/driver/mcu", + "src/app/driver/sbc", + "src/app/driver/sbc/fs8x_driver", + "src/app/driver/spi", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/diag", + "src/app/engine/hw_info", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config" + ], + "sources": [ + "build/unit_test/mocks/test_nxpfs85xx/Mockdiag.c", + "build/unit_test/mocks/test_nxpfs85xx/Mockdma.c", + "build/unit_test/mocks/test_nxpfs85xx/Mockfassert.c", + "build/unit_test/mocks/test_nxpfs85xx/Mockfram.c", + "build/unit_test/mocks/test_nxpfs85xx/Mockio.c", + "build/unit_test/mocks/test_nxpfs85xx/Mockmaster_info.c", + "build/unit_test/mocks/test_nxpfs85xx/Mockmcu.c", + "build/unit_test/mocks/test_nxpfs85xx/Mocksbc_fs8x.c", + "build/unit_test/mocks/test_nxpfs85xx/Mocksbc_fs8x_communication.c", + "build/unit_test/mocks/test_nxpfs85xx/Mockspi.c", + "build/unit_test/test/runners/test_nxpfs85xx_runner.c", + "src/app/driver/sbc/nxpfs85xx.c", + "tests/unit/app/driver/sbc/test_nxpfs85xx.c" + ] + } + ], + "src/app/driver/sbc/sbc.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_sbc", + "src/app/application/config", + "src/app/driver/config", + "src/app/driver/dma", + "src/app/driver/io", + "src/app/driver/mcu", + "src/app/driver/sbc", + "src/app/driver/sbc/fs8x_driver", + "src/app/driver/spi", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config" + ], + "sources": [ + "build/unit_test/mocks/test_sbc/Mockdma.c", + "build/unit_test/mocks/test_sbc/Mockio.c", + "build/unit_test/mocks/test_sbc/Mockmcu.c", + "build/unit_test/mocks/test_sbc/Mocknxpfs85xx.c", + "build/unit_test/mocks/test_sbc/Mockos.c", + "build/unit_test/mocks/test_sbc/Mockportmacro.c", + "build/unit_test/mocks/test_sbc/Mocksbc_fs8x.c", + "build/unit_test/mocks/test_sbc/Mocksbc_fs8x_communication.c", + "build/unit_test/mocks/test_sbc/Mockspi.c", + "build/unit_test/test/runners/test_sbc_runner.c", + "src/app/driver/sbc/sbc.c", + "tests/unit/app/driver/sbc/test_sbc.c" + ] + } + ], + "src/app/driver/spi/spi.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_spi", + "src/app/application/config", + "src/app/driver/config", + "src/app/driver/dma", + "src/app/driver/io", + "src/app/driver/mcu", + "src/app/driver/spi", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config" + ], + "sources": [ + "build/unit_test/mocks/test_spi/MockHL_spi.c", + "build/unit_test/mocks/test_spi/MockHL_sys_dma.c", + "build/unit_test/mocks/test_spi/Mockdma_cfg.c", + "build/unit_test/mocks/test_spi/Mockio.c", + "build/unit_test/mocks/test_spi/Mockmcu.c", + "build/unit_test/mocks/test_spi/Mockos.c", + "build/unit_test/mocks/test_spi/Mockspi_cfg.c", + "build/unit_test/test/runners/test_spi_runner.c", + "src/app/driver/spi/spi.c", + "tests/unit/app/driver/spi/test_spi.c" + ] + }, + { + "defines": [ + "FOXBMS_AFE_DRIVER_ADI=1u" + ], + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_spi_adi", + "src/app/application/config", + "src/app/driver/config", + "src/app/driver/dma", + "src/app/driver/io", + "src/app/driver/mcu", + "src/app/driver/spi", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config" + ], + "runner-alias": "spi_adi", + "sources": [ + "build/unit_test/mocks/test_spi_adi/MockHL_spi.c", + "build/unit_test/mocks/test_spi_adi/MockHL_sys_dma.c", + "build/unit_test/mocks/test_spi_adi/Mockdma_cfg.c", + "build/unit_test/mocks/test_spi_adi/Mockio.c", + "build/unit_test/mocks/test_spi_adi/Mockmcu.c", + "build/unit_test/mocks/test_spi_adi/Mockos.c", + "build/unit_test/mocks/test_spi_adi/Mockspi_cfg.c", + "build/unit_test/test/runners/test_spi_adi_runner.c", + "src/app/driver/spi/spi.c", + "tests/unit/app/driver/spi/test_spi_adi.c" + ] + }, + { + "defines": [ + "FOXBMS_AFE_DRIVER_DEBUG=1u" + ], + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_spi_debug", + "src/app/application/config", + "src/app/driver/config", + "src/app/driver/dma", + "src/app/driver/io", + "src/app/driver/mcu", + "src/app/driver/spi", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config" + ], + "runner-alias": "spi_debug", + "sources": [ + "build/unit_test/mocks/test_spi_debug/MockHL_spi.c", + "build/unit_test/mocks/test_spi_debug/MockHL_sys_dma.c", + "build/unit_test/mocks/test_spi_debug/Mockdma_cfg.c", + "build/unit_test/mocks/test_spi_debug/Mockio.c", + "build/unit_test/mocks/test_spi_debug/Mockmcu.c", + "build/unit_test/mocks/test_spi_debug/Mockos.c", + "build/unit_test/mocks/test_spi_debug/Mockspi_cfg.c", + "build/unit_test/test/runners/test_spi_debug_runner.c", + "src/app/driver/spi/spi.c", + "tests/unit/app/driver/spi/test_spi_debug.c" + ] + }, + { + "defines": [ + "FOXBMS_AFE_DRIVER_LTC=1u" + ], + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_spi_ltc", + "src/app/application/config", + "src/app/driver/config", + "src/app/driver/dma", + "src/app/driver/io", + "src/app/driver/mcu", + "src/app/driver/spi", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config" + ], + "runner-alias": "spi_ltc", + "sources": [ + "build/unit_test/mocks/test_spi_ltc/MockHL_spi.c", + "build/unit_test/mocks/test_spi_ltc/MockHL_sys_dma.c", + "build/unit_test/mocks/test_spi_ltc/Mockdma_cfg.c", + "build/unit_test/mocks/test_spi_ltc/Mockio.c", + "build/unit_test/mocks/test_spi_ltc/Mockmcu.c", + "build/unit_test/mocks/test_spi_ltc/Mockos.c", + "build/unit_test/mocks/test_spi_ltc/Mockspi_cfg.c", + "build/unit_test/test/runners/test_spi_ltc_runner.c", + "src/app/driver/spi/spi.c", + "tests/unit/app/driver/spi/test_spi_ltc.c" + ] + }, + { + "defines": [ + "FOXBMS_AFE_DRIVER_MAXIM=1u" + ], + "include": [ + "build/unit_test/include", + "build/unit_test/include", + "build/unit_test/mocks/test_spi", + "build/unit_test/mocks/test_spi_mxm", + "src/app/application/config", + "src/app/driver/config", + "src/app/driver/dma", + "src/app/driver/io", + "src/app/driver/mcu", + "src/app/driver/spi", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config" + ], + "runner-alias": "spi_mxm", + "sources": [ + "build/unit_test/mocks/test_spi_mxm/MockHL_spi.c", + "build/unit_test/mocks/test_spi_mxm/MockHL_sys_dma.c", + "build/unit_test/mocks/test_spi_mxm/Mockdma_cfg.c", + "build/unit_test/mocks/test_spi_mxm/Mockio.c", + "build/unit_test/mocks/test_spi_mxm/Mockmcu.c", + "build/unit_test/mocks/test_spi_mxm/Mockos.c", + "build/unit_test/mocks/test_spi_mxm/Mockspi_cfg.c", + "build/unit_test/test/runners/test_spi_mxm_runner.c", + "src/app/driver/spi/spi.c", + "tests/unit/app/driver/spi/test_spi_mxm.c" + ] + }, + { + "defines": [ + "FOXBMS_AFE_DRIVER_NXP=1u" + ], + "include": [ + "build/unit_test/include", + "build/unit_test/include", + "build/unit_test/mocks/test_spi", + "build/unit_test/mocks/test_spi_nxp", + "src/app/application/config", + "src/app/driver/config", + "src/app/driver/dma", + "src/app/driver/io", + "src/app/driver/mcu", + "src/app/driver/spi", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config" + ], + "runner-alias": "spi_nxp", + "sources": [ + "build/unit_test/mocks/test_spi_nxp/MockHL_spi.c", + "build/unit_test/mocks/test_spi_nxp/MockHL_sys_dma.c", + "build/unit_test/mocks/test_spi_nxp/Mockdma_cfg.c", + "build/unit_test/mocks/test_spi_nxp/Mockio.c", + "build/unit_test/mocks/test_spi_nxp/Mockmcu.c", + "build/unit_test/mocks/test_spi_nxp/Mockos.c", + "build/unit_test/mocks/test_spi_nxp/Mockspi_cfg.c", + "build/unit_test/test/runners/test_spi_nxp_runner.c", + "src/app/driver/spi/spi.c", + "tests/unit/app/driver/spi/test_spi_nxp.c" + ] + }, + { + "defines": [ + "FOXBMS_AFE_DRIVER_TI=1u" + ], + "include": [ + "build/unit_test/include", + "build/unit_test/include", + "build/unit_test/mocks/test_spi", + "build/unit_test/mocks/test_spi_ti", + "src/app/application/config", + "src/app/driver/config", + "src/app/driver/dma", + "src/app/driver/io", + "src/app/driver/mcu", + "src/app/driver/spi", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config" + ], + "runner-alias": "spi_ti", + "sources": [ + "build/unit_test/mocks/test_spi_ti/MockHL_spi.c", + "build/unit_test/mocks/test_spi_ti/MockHL_sys_dma.c", + "build/unit_test/mocks/test_spi_ti/Mockdma_cfg.c", + "build/unit_test/mocks/test_spi_ti/Mockio.c", + "build/unit_test/mocks/test_spi_ti/Mockmcu.c", + "build/unit_test/mocks/test_spi_ti/Mockos.c", + "build/unit_test/mocks/test_spi_ti/Mockspi_cfg.c", + "build/unit_test/test/runners/test_spi_ti_runner.c", + "src/app/driver/spi/spi.c", + "tests/unit/app/driver/spi/test_spi_ti.c" + ] + } + ], + "src/app/driver/sps/sps.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_sps", + "src/app/application/config", + "src/app/driver/config", + "src/app/driver/contactor", + "src/app/driver/io", + "src/app/driver/mcu", + "src/app/driver/pex", + "src/app/driver/spi", + "src/app/driver/sps", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config" + ], + "sources": [ + "build/unit_test/mocks/test_sps/Mockcontactor.c", + "build/unit_test/mocks/test_sps/Mockcontactor_cfg.c", + "build/unit_test/mocks/test_sps/Mockdatabase.c", + "build/unit_test/mocks/test_sps/Mockio.c", + "build/unit_test/mocks/test_sps/Mockmcu.c", + "build/unit_test/mocks/test_sps/Mockos.c", + "build/unit_test/mocks/test_sps/Mockpex.c", + "build/unit_test/mocks/test_sps/Mockpex_cfg.c", + "build/unit_test/mocks/test_sps/Mockspi.c", + "build/unit_test/mocks/test_sps/Mockspi_cfg.c", + "build/unit_test/mocks/test_sps/Mocksps_cfg.c", + "build/unit_test/mocks/test_sps/Mocksps_types.c", + "build/unit_test/test/runners/test_sps_runner.c", + "src/app/driver/sps/sps.c", + "tests/unit/app/driver/sps/test_sps.c" + ] + } + ], + "src/app/driver/ts/api/tsi_limits.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_tsi_limits", + "src/app/application/config", + "src/app/driver/config", + "src/app/driver/ts/api", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config" + ], + "sources": [ + "build/unit_test/mocks/test_tsi_limits/Mocktsi_plausibility_cfg.c", + "build/unit_test/test/runners/test_tsi_limits_runner.c", + "src/app/driver/ts/api/tsi_limits.c", + "tests/unit/app/driver/ts/api/test_tsi_limits.c" + ] + } + ], + "src/app/driver/ts/beta.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_beta", + "src/app/application/config", + "src/app/driver/foxmath", + "src/app/driver/mcu", + "src/app/driver/ts", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config" + ], + "sources": [ + "build/unit_test/test/runners/test_beta_runner.c", + "src/app/driver/ts/beta.c", + "tests/unit/app/driver/ts/test_beta.c" + ] + } + ], + "src/app/driver/ts/epcos/b57251v5103j060/epcos_b57251v5103j060.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_epcos_b57251v5103j060", + "src/app/application/config", + "src/app/driver/foxmath", + "src/app/driver/mcu", + "src/app/driver/ts", + "src/app/driver/ts/epcos/b57251v5103j060", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/test/runners/test_epcos_b57251v5103j060_runner.c", + "src/app/driver/foxmath/foxmath.c", + "src/app/driver/ts/epcos/b57251v5103j060/epcos_b57251v5103j060.c", + "tests/unit/app/driver/ts/epcos/b57251v5103j060/test_epcos_b57251v5103j060.c" + ] + } + ], + "src/app/driver/ts/epcos/b57251v5103j060/lookup-table/epcos_b57251v5103j060_lookup-table.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_epcos_b57251v5103j060_lookup-table", + "src/app/application/config", + "src/app/driver/foxmath", + "src/app/driver/mcu", + "src/app/driver/ts/api", + "src/app/driver/ts/epcos/b57251v5103j060", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_epcos_b57251v5103j060_lookup-table/Mockepcos_b57251v5103j060.c", + "build/unit_test/test/runners/test_epcos_b57251v5103j060_lookup-table_runner.c", + "src/app/driver/ts/epcos/b57251v5103j060/lookup-table/epcos_b57251v5103j060_lookup-table.c", + "tests/unit/app/driver/ts/epcos/b57251v5103j060/lookup-table/test_epcos_b57251v5103j060_lookup-table.c" + ] + } + ], + "src/app/driver/ts/epcos/b57251v5103j060/polynomial/epcos_b57251v5103j060_polynomial.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_epcos_b57251v5103j060_polynomial", + "src/app/application/config", + "src/app/driver/foxmath", + "src/app/driver/mcu", + "src/app/driver/ts/api", + "src/app/driver/ts/epcos/b57251v5103j060", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_epcos_b57251v5103j060_polynomial/Mockepcos_b57251v5103j060.c", + "build/unit_test/test/runners/test_epcos_b57251v5103j060_polynomial_runner.c", + "src/app/driver/ts/epcos/b57251v5103j060/polynomial/epcos_b57251v5103j060_polynomial.c", + "tests/unit/app/driver/ts/epcos/b57251v5103j060/polynomial/test_epcos_b57251v5103j060_polynomial.c" + ] + } + ], + "src/app/driver/ts/epcos/b57861s0103f045/epcos_b57861s0103f045.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_epcos_b57861s0103f045", + "src/app/application/config", + "src/app/driver/foxmath", + "src/app/driver/mcu", + "src/app/driver/ts", + "src/app/driver/ts/epcos/b57861s0103f045", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/test/runners/test_epcos_b57861s0103f045_runner.c", + "src/app/driver/foxmath/foxmath.c", + "src/app/driver/ts/epcos/b57861s0103f045/epcos_b57861s0103f045.c", + "tests/unit/app/driver/ts/epcos/b57861s0103f045/test_epcos_b57861s0103f045.c" + ] + } + ], + "src/app/driver/ts/epcos/b57861s0103f045/lookup-table/epcos_b57861s0103f045_lookup-table.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_epcos_b57861s0103f045_lookup-table", + "src/app/application/config", + "src/app/driver/foxmath", + "src/app/driver/mcu", + "src/app/driver/ts/api", + "src/app/driver/ts/epcos/b57861s0103f045", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_epcos_b57861s0103f045_lookup-table/Mockepcos_b57861s0103f045.c", + "build/unit_test/test/runners/test_epcos_b57861s0103f045_lookup-table_runner.c", + "src/app/driver/foxmath/foxmath.c", + "src/app/driver/ts/epcos/b57861s0103f045/lookup-table/epcos_b57861s0103f045_lookup-table.c", + "tests/unit/app/driver/ts/epcos/b57861s0103f045/lookup-table/test_epcos_b57861s0103f045_lookup-table.c" + ] + } + ], + "src/app/driver/ts/epcos/b57861s0103f045/polynomial/epcos_b57861s0103f045_polynomial.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_epcos_b57861s0103f045_polynomial", + "src/app/application/config", + "src/app/driver/foxmath", + "src/app/driver/mcu", + "src/app/driver/ts/api", + "src/app/driver/ts/epcos/b57861s0103f045", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_epcos_b57861s0103f045_polynomial/Mockepcos_b57861s0103f045.c", + "build/unit_test/test/runners/test_epcos_b57861s0103f045_polynomial_runner.c", + "src/app/driver/foxmath/foxmath.c", + "src/app/driver/ts/epcos/b57861s0103f045/polynomial/epcos_b57861s0103f045_polynomial.c", + "tests/unit/app/driver/ts/epcos/b57861s0103f045/polynomial/test_epcos_b57861s0103f045_polynomial.c" + ] + } + ], + "src/app/driver/ts/fake/none/fake_none.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_fake_none", + "src/app/application/config", + "src/app/driver/mcu", + "src/app/driver/ts/fake/none", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/test/runners/test_fake_none_runner.c", + "src/app/driver/ts/fake/none/fake_none.c", + "tests/unit/app/driver/ts/fake/none/test_fake_none.c" + ] + } + ], + "src/app/driver/ts/fake/none/lookup-table/fake_none_lookup-table.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_fake_none_lookup-table", + "src/app/application/config", + "src/app/driver/mcu", + "src/app/driver/ts/api", + "src/app/driver/ts/fake/none", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/test/runners/test_fake_none_lookup-table_runner.c", + "src/app/driver/ts/fake/none/fake_none.c", + "src/app/driver/ts/fake/none/lookup-table/fake_none_lookup-table.c", + "tests/unit/app/driver/ts/fake/none/lookup-table/test_fake_none_lookup-table.c" + ] + } + ], + "src/app/driver/ts/fake/none/polynomial/fake_none_polynomial.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_fake_none_polynomial", + "src/app/application/config", + "src/app/driver/mcu", + "src/app/driver/ts/api", + "src/app/driver/ts/fake/none", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/test/runners/test_fake_none_polynomial_runner.c", + "src/app/driver/ts/fake/none/fake_none.c", + "src/app/driver/ts/fake/none/polynomial/fake_none_polynomial.c", + "tests/unit/app/driver/ts/fake/none/polynomial/test_fake_none_polynomial.c" + ] + } + ], + "src/app/driver/ts/murata/ncxxxxh103/lookup-table/murata_ncxxxxh103_lookup-table.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_murata_ncxxxxh103_lookup-table", + "src/app/application/config", + "src/app/driver/foxmath", + "src/app/driver/mcu", + "src/app/driver/ts/api", + "src/app/driver/ts/murata/ncxxxxh103", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_murata_ncxxxxh103_lookup-table/Mockmurata_ncxxxxh103.c", + "build/unit_test/test/runners/test_murata_ncxxxxh103_lookup-table_runner.c", + "src/app/driver/ts/murata/ncxxxxh103/lookup-table/murata_ncxxxxh103_lookup-table.c", + "tests/unit/app/driver/ts/murata/ncxxxxh103/lookup-table/test_murata_ncxxxxh103_lookup-table.c" + ] + } + ], + "src/app/driver/ts/murata/ncxxxxh103/murata_ncxxxxh103.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_murata_ncxxxxh103", + "src/app/application/config", + "src/app/driver/foxmath", + "src/app/driver/mcu", + "src/app/driver/ts", + "src/app/driver/ts/murata/ncxxxxh103", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config" + ], + "sources": [ + "build/unit_test/test/runners/test_murata_ncxxxxh103_runner.c", + "src/app/driver/foxmath/foxmath.c", + "src/app/driver/ts/murata/ncxxxxh103/murata_ncxxxxh103.c", + "tests/unit/app/driver/ts/murata/ncxxxxh103/test_murata_ncxxxxh103.c" + ] + } + ], + "src/app/driver/ts/murata/ncxxxxh103/polynomial/murata_ncxxxxh103_polynomial.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_murata_ncxxxxh103_polynomial", + "src/app/application/config", + "src/app/driver/foxmath", + "src/app/driver/mcu", + "src/app/driver/ts/api", + "src/app/driver/ts/murata/ncxxxxh103", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_murata_ncxxxxh103_polynomial/Mockmurata_ncxxxxh103.c", + "build/unit_test/test/runners/test_murata_ncxxxxh103_polynomial_runner.c", + "src/app/driver/ts/murata/ncxxxxh103/polynomial/murata_ncxxxxh103_polynomial.c", + "tests/unit/app/driver/ts/murata/ncxxxxh103/polynomial/test_murata_ncxxxxh103_polynomial.c" + ] + } + ], + "src/app/driver/ts/semitec/103jt/lookup-table/semitec_103jt_lookup-table.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_semitec_103jt_lookup-table", + "src/app/application/config", + "src/app/driver/foxmath", + "src/app/driver/mcu", + "src/app/driver/ts/api", + "src/app/driver/ts/semitec/103jt", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_semitec_103jt_lookup-table/Mocksemitec_103jt.c", + "build/unit_test/test/runners/test_semitec_103jt_lookup-table_runner.c", + "src/app/driver/ts/semitec/103jt/lookup-table/semitec_103jt_lookup-table.c", + "tests/unit/app/driver/ts/semitec/103jt/lookup-table/test_semitec_103jt_lookup-table.c" + ] + } + ], + "src/app/driver/ts/semitec/103jt/semitec_103jt.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_semitec_103jt", + "src/app/application/config", + "src/app/driver/foxmath", + "src/app/driver/mcu", + "src/app/driver/ts", + "src/app/driver/ts/semitec/103jt", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config" + ], + "sources": [ + "build/unit_test/test/runners/test_semitec_103jt_runner.c", + "src/app/driver/foxmath/foxmath.c", + "src/app/driver/ts/semitec/103jt/semitec_103jt.c", + "tests/unit/app/driver/ts/semitec/103jt/test_semitec_103jt.c" + ] + } + ], + "src/app/driver/ts/vishay/ntcalug01a103g/lookup-table/vishay_ntcalug01a103g_lookup-table.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_vishay_ntcalug01a103g_lookup-table", + "src/app/application/config", + "src/app/driver/foxmath", + "src/app/driver/mcu", + "src/app/driver/ts/api", + "src/app/driver/ts/vishay/ntcalug01a103g", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_vishay_ntcalug01a103g_lookup-table/Mockvishay_ntcalug01a103g.c", + "build/unit_test/test/runners/test_vishay_ntcalug01a103g_lookup-table_runner.c", + "src/app/driver/ts/vishay/ntcalug01a103g/lookup-table/vishay_ntcalug01a103g_lookup-table.c", + "tests/unit/app/driver/ts/vishay/ntcalug01a103g/lookup-table/test_vishay_ntcalug01a103g_lookup-table.c" + ] + } + ], + "src/app/driver/ts/vishay/ntcalug01a103g/polynomial/vishay_ntcalug01a103g_polynomial.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_vishay_ntcalug01a103g_polynomial", + "src/app/application/config", + "src/app/driver/foxmath", + "src/app/driver/mcu", + "src/app/driver/ts/api", + "src/app/driver/ts/vishay/ntcalug01a103g", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_vishay_ntcalug01a103g_polynomial/Mockvishay_ntcalug01a103g.c", + "build/unit_test/test/runners/test_vishay_ntcalug01a103g_polynomial_runner.c", + "src/app/driver/ts/vishay/ntcalug01a103g/polynomial/vishay_ntcalug01a103g_polynomial.c", + "tests/unit/app/driver/ts/vishay/ntcalug01a103g/polynomial/test_vishay_ntcalug01a103g_polynomial.c" + ] + } + ], + "src/app/driver/ts/vishay/ntcalug01a103g/vishay_ntcalug01a103g.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_vishay_ntcalug01a103g", + "src/app/application/config", + "src/app/driver/foxmath", + "src/app/driver/mcu", + "src/app/driver/ts", + "src/app/driver/ts/vishay/ntcalug01a103g", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/test/runners/test_vishay_ntcalug01a103g_runner.c", + "src/app/driver/foxmath/foxmath.c", + "src/app/driver/ts/vishay/ntcalug01a103g/vishay_ntcalug01a103g.c", + "tests/unit/app/driver/ts/vishay/ntcalug01a103g/test_vishay_ntcalug01a103g.c" + ] + } + ], + "src/app/driver/ts/vishay/ntcle317e4103sba/lookup-table/vishay_ntcle317e4103sba_lookup-table.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_vishay_ntcle317e4103sba_lookup-table", + "src/app/application/config", + "src/app/driver/foxmath", + "src/app/driver/mcu", + "src/app/driver/ts/api", + "src/app/driver/ts/vishay/ntcle317e4103sba", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_vishay_ntcle317e4103sba_lookup-table/Mockvishay_ntcle317e4103sba.c", + "build/unit_test/test/runners/test_vishay_ntcle317e4103sba_lookup-table_runner.c", + "src/app/driver/ts/vishay/ntcle317e4103sba/lookup-table/vishay_ntcle317e4103sba_lookup-table.c", + "tests/unit/app/driver/ts/vishay/ntcle317e4103sba/lookup-table/test_vishay_ntcle317e4103sba_lookup-table.c" + ] + } + ], + "src/app/driver/ts/vishay/ntcle317e4103sba/vishay_ntcle317e4103sba.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_vishay_ntcle317e4103sba", + "src/app/application/config", + "src/app/driver/foxmath", + "src/app/driver/mcu", + "src/app/driver/ts", + "src/app/driver/ts/vishay/ntcle317e4103sba", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/test/runners/test_vishay_ntcle317e4103sba_runner.c", + "src/app/driver/foxmath/foxmath.c", + "src/app/driver/ts/vishay/ntcle317e4103sba/vishay_ntcle317e4103sba.c", + "tests/unit/app/driver/ts/vishay/ntcle317e4103sba/test_vishay_ntcle317e4103sba.c" + ] + } + ], + "src/app/driver/ts/vishay/ntcle413e2103f102l/lookup-table/vishay_ntcle413e2103f102l_lookup-table.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_vishay_ntcle413e2103f102l_lookup-table", + "src/app/application/config", + "src/app/driver/foxmath", + "src/app/driver/mcu", + "src/app/driver/ts/api", + "src/app/driver/ts/vishay/ntcle413e2103f102l", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_vishay_ntcle413e2103f102l_lookup-table/Mockvishay_ntcle413e2103f102l.c", + "build/unit_test/test/runners/test_vishay_ntcle413e2103f102l_lookup-table_runner.c", + "src/app/driver/ts/vishay/ntcle413e2103f102l/lookup-table/vishay_ntcle413e2103f102l_lookup-table.c", + "tests/unit/app/driver/ts/vishay/ntcle413e2103f102l/lookup-table/test_vishay_ntcle413e2103f102l_lookup-table.c" + ] + } + ], + "src/app/driver/ts/vishay/ntcle413e2103f102l/vishay_ntcle413e2103f102l.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_vishay_ntcle413e2103f102l", + "src/app/application/config", + "src/app/driver/foxmath", + "src/app/driver/mcu", + "src/app/driver/ts", + "src/app/driver/ts/vishay/ntcle413e2103f102l", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/test/runners/test_vishay_ntcle413e2103f102l_runner.c", + "src/app/driver/foxmath/foxmath.c", + "src/app/driver/ts/vishay/ntcle413e2103f102l/vishay_ntcle413e2103f102l.c", + "tests/unit/app/driver/ts/vishay/ntcle413e2103f102l/test_vishay_ntcle413e2103f102l.c" + ] + } + ], + "src/app/engine/config/database_cfg.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_database_cfg", + "src/app/application/config", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/test/runners/test_database_cfg_runner.c", + "src/app/engine/config/database_cfg.c", + "tests/unit/app/engine/config/test_database_cfg.c" + ] + } + ], + "src/app/engine/config/diag_cfg.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_diag_cfg", + "src/app/application/config", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/diag/cbs", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_diag_cfg/Mockdatabase.c", + "build/unit_test/mocks/test_diag_cfg/Mockdiag_cbs.c", + "build/unit_test/test/runners/test_diag_cfg_runner.c", + "src/app/engine/config/diag_cfg.c", + "tests/unit/app/engine/config/test_diag_cfg.c" + ] + } + ], + "src/app/engine/config/sys_cfg.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_sys_cfg", + "src/app/application/config", + "src/app/driver/can/cbs/tx-async", + "src/app/driver/config", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_sys_cfg/Mockcan_cbs_tx_debug-response.c", + "build/unit_test/mocks/test_sys_cfg/Mockcan_cfg.c", + "build/unit_test/test/runners/test_sys_cfg_runner.c", + "src/app/engine/config/sys_cfg.c", + "tests/unit/app/engine/config/test_sys_cfg.c" + ] + } + ], + "src/app/engine/config/sys_mon_cfg.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_sys_mon_cfg", + "src/app/application/config", + "src/app/driver/config", + "src/app/driver/fram", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config" + ], + "sources": [ + "build/unit_test/test/runners/test_sys_mon_cfg_runner.c", + "src/app/engine/config/sys_mon_cfg.c", + "tests/unit/app/engine/config/test_sys_mon_cfg.c" + ] + } + ], + "src/app/engine/database/database.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_database", + "src/app/application/config", + "src/app/driver/config", + "src/app/driver/mcu", + "src/app/driver/rtc", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/config", + "src/app/task/ftask", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config" + ], + "sources": [ + "build/unit_test/mocks/test_database/Mockfassert.c", + "build/unit_test/mocks/test_database/Mockftask.c", + "build/unit_test/mocks/test_database/Mockmpu_prototypes.c", + "build/unit_test/mocks/test_database/Mockos.c", + "build/unit_test/test/runners/test_database_runner.c", + "src/app/engine/config/database_cfg.c", + "src/app/engine/database/database.c", + "tests/unit/app/engine/database/test_database.c" + ] + } + ], + "src/app/engine/database/database_helper.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_database_helper", + "src/app/application/config", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_database_helper/Mockfassert.c", + "build/unit_test/mocks/test_database_helper/Mockmpu_prototypes.c", + "build/unit_test/mocks/test_database_helper/Mockos.c", + "build/unit_test/test/runners/test_database_helper_runner.c", + "src/app/engine/database/database_helper.c", + "tests/unit/app/engine/database/test_database_helper.c" + ] + } + ], + "src/app/engine/diag/cbs/diag_cbs_aerosol-sensor.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_diag_cbs_aerosol-sensor", + "src/app/application/config", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/diag/cbs", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_diag_cbs_aerosol-sensor/Mockdiag_cfg.c", + "build/unit_test/test/runners/test_diag_cbs_aerosol-sensor_runner.c", + "src/app/engine/diag/cbs/diag_cbs_aerosol-sensor.c", + "tests/unit/app/engine/diag/cbs/test_diag_cbs_aerosol-sensor.c" + ] + } + ], + "src/app/engine/diag/cbs/diag_cbs_afe.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_diag_cbs_afe", + "src/app/application/config", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/diag/cbs", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_diag_cbs_afe/Mockdiag_cfg.c", + "build/unit_test/test/runners/test_diag_cbs_afe_runner.c", + "src/app/engine/diag/cbs/diag_cbs_afe.c", + "tests/unit/app/engine/diag/cbs/test_diag_cbs_afe.c" + ] + } + ], + "src/app/engine/diag/cbs/diag_cbs_bms.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_diag_cbs_bms", + "src/app/application/config", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/diag/cbs", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_diag_cbs_bms/Mockdiag_cfg.c", + "build/unit_test/test/runners/test_diag_cbs_bms_runner.c", + "src/app/engine/diag/cbs/diag_cbs_bms.c", + "tests/unit/app/engine/diag/cbs/test_diag_cbs_bms.c" + ] + } + ], + "src/app/engine/diag/cbs/diag_cbs_can.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_diag_cbs_can", + "src/app/application/config", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/diag/cbs", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_diag_cbs_can/Mockdiag_cfg.c", + "build/unit_test/test/runners/test_diag_cbs_can_runner.c", + "src/app/engine/diag/cbs/diag_cbs_can.c", + "tests/unit/app/engine/diag/cbs/test_diag_cbs_can.c" + ] + } + ], + "src/app/engine/diag/cbs/diag_cbs_contactor.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_diag_cbs_contactor", + "src/app/application/config", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/diag/cbs", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_diag_cbs_contactor/Mockdiag_cfg.c", + "build/unit_test/test/runners/test_diag_cbs_contactor_runner.c", + "src/app/engine/diag/cbs/diag_cbs_contactor.c", + "tests/unit/app/engine/diag/cbs/test_diag_cbs_contactor.c" + ] + } + ], + "src/app/engine/diag/cbs/diag_cbs_current-sensor.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_diag_cbs_current-sensor", + "src/app/application/config", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/diag/cbs", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_diag_cbs_current-sensor/Mockdiag_cfg.c", + "build/unit_test/test/runners/test_diag_cbs_current-sensor_runner.c", + "src/app/engine/diag/cbs/diag_cbs_current-sensor.c", + "tests/unit/app/engine/diag/cbs/test_diag_cbs_current-sensor.c" + ] + } + ], + "src/app/engine/diag/cbs/diag_cbs_current.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_diag_cbs_current", + "src/app/application/config", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/diag/cbs", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_diag_cbs_current/Mockdiag_cfg.c", + "build/unit_test/test/runners/test_diag_cbs_current_runner.c", + "src/app/engine/diag/cbs/diag_cbs_current.c", + "tests/unit/app/engine/diag/cbs/test_diag_cbs_current.c" + ] + } + ], + "src/app/engine/diag/cbs/diag_cbs_deep-discharge.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_diag_cbs_deep-discharge", + "src/app/application/config", + "src/app/driver/config", + "src/app/driver/fram", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/diag/cbs", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_diag_cbs_deep-discharge/Mockdiag_cfg.c", + "build/unit_test/mocks/test_diag_cbs_deep-discharge/Mockfram.c", + "build/unit_test/test/runners/test_diag_cbs_deep-discharge_runner.c", + "src/app/driver/config/fram_cfg.c", + "src/app/engine/diag/cbs/diag_cbs_deep-discharge.c", + "tests/unit/app/engine/diag/cbs/test_diag_cbs_deep-discharge.c" + ] + } + ], + "src/app/engine/diag/cbs/diag_cbs_dummy.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_diag_cbs_dummy", + "src/app/application/config", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/diag/cbs", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_diag_cbs_dummy/Mockdiag_cfg.c", + "build/unit_test/test/runners/test_diag_cbs_dummy_runner.c", + "src/app/engine/diag/cbs/diag_cbs_dummy.c", + "tests/unit/app/engine/diag/cbs/test_diag_cbs_dummy.c" + ] + } + ], + "src/app/engine/diag/cbs/diag_cbs_fram.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_diag_cbs_fram", + "src/app/application/config", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/diag/cbs", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_diag_cbs_fram/Mockdiag_cfg.c", + "build/unit_test/test/runners/test_diag_cbs_fram_runner.c", + "src/app/engine/diag/cbs/diag_cbs_fram.c", + "tests/unit/app/engine/diag/cbs/test_diag_cbs_fram.c" + ] + } + ], + "src/app/engine/diag/cbs/diag_cbs_i2c.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_diag_cbs_i2c", + "src/app/application/config", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/diag/cbs", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_diag_cbs_i2c/Mockdiag_cfg.c", + "build/unit_test/test/runners/test_diag_cbs_i2c_runner.c", + "src/app/engine/diag/cbs/diag_cbs_i2c.c", + "tests/unit/app/engine/diag/cbs/test_diag_cbs_i2c.c" + ] + } + ], + "src/app/engine/diag/cbs/diag_cbs_insulation.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_diag_cbs_insulation", + "src/app/application/config", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/diag/cbs", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_diag_cbs_insulation/Mockdiag_cfg.c", + "build/unit_test/test/runners/test_diag_cbs_insulation_runner.c", + "src/app/engine/diag/cbs/diag_cbs_insulation.c", + "tests/unit/app/engine/diag/cbs/test_diag_cbs_insulation.c" + ] + } + ], + "src/app/engine/diag/cbs/diag_cbs_interlock.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_diag_cbs_interlock", + "src/app/application/config", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/diag/cbs", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_diag_cbs_interlock/Mockdiag_cfg.c", + "build/unit_test/test/runners/test_diag_cbs_interlock_runner.c", + "src/app/engine/diag/cbs/diag_cbs_interlock.c", + "tests/unit/app/engine/diag/cbs/test_diag_cbs_interlock.c" + ] + } + ], + "src/app/engine/diag/cbs/diag_cbs_plausibility.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_diag_cbs_plausibility", + "src/app/application/config", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/diag/cbs", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_diag_cbs_plausibility/Mockdiag_cfg.c", + "build/unit_test/test/runners/test_diag_cbs_plausibility_runner.c", + "src/app/engine/diag/cbs/diag_cbs_plausibility.c", + "tests/unit/app/engine/diag/cbs/test_diag_cbs_plausibility.c" + ] + } + ], + "src/app/engine/diag/cbs/diag_cbs_power-measurement.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_diag_cbs_power-measurement", + "src/app/application/config", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/diag/cbs", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_diag_cbs_power-measurement/Mockdiag_cfg.c", + "build/unit_test/test/runners/test_diag_cbs_power-measurement_runner.c", + "src/app/engine/diag/cbs/diag_cbs_power-measurement.c", + "tests/unit/app/engine/diag/cbs/test_diag_cbs_power-measurement.c" + ] + } + ], + "src/app/engine/diag/cbs/diag_cbs_rtc.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_diag_cbs_rtc", + "src/app/application/config", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/diag/cbs", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_diag_cbs_rtc/Mockdiag_cfg.c", + "build/unit_test/test/runners/test_diag_cbs_rtc_runner.c", + "src/app/engine/diag/cbs/diag_cbs_rtc.c", + "tests/unit/app/engine/diag/cbs/test_diag_cbs_rtc.c" + ] + } + ], + "src/app/engine/diag/cbs/diag_cbs_sbc.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_diag_cbs_sbc", + "src/app/application/config", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/diag/cbs", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_diag_cbs_sbc/Mockdiag_cfg.c", + "build/unit_test/test/runners/test_diag_cbs_sbc_runner.c", + "src/app/engine/diag/cbs/diag_cbs_sbc.c", + "tests/unit/app/engine/diag/cbs/test_diag_cbs_sbc.c" + ] + } + ], + "src/app/engine/diag/cbs/diag_cbs_sys-mon.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_diag_cbs_sys-mon", + "src/app/application/config", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/diag/cbs", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_diag_cbs_sys-mon/Mockdiag_cfg.c", + "build/unit_test/mocks/test_diag_cbs_sys-mon/Mocksys_mon_cfg.c", + "build/unit_test/test/runners/test_diag_cbs_sys-mon_runner.c", + "src/app/engine/diag/cbs/diag_cbs_sys-mon.c", + "tests/unit/app/engine/diag/cbs/test_diag_cbs_sys-mon.c" + ] + } + ], + "src/app/engine/diag/cbs/diag_cbs_temperature.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_diag_cbs_temperature", + "src/app/application/config", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/diag/cbs", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_diag_cbs_temperature/Mockdiag_cfg.c", + "build/unit_test/test/runners/test_diag_cbs_temperature_runner.c", + "src/app/engine/diag/cbs/diag_cbs_temperature.c", + "tests/unit/app/engine/diag/cbs/test_diag_cbs_temperature.c" + ] + } + ], + "src/app/engine/diag/cbs/diag_cbs_voltage.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_diag_cbs_voltage", + "src/app/application/config", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/diag/cbs", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_diag_cbs_voltage/Mockdiag_cfg.c", + "build/unit_test/test/runners/test_diag_cbs_voltage_runner.c", + "src/app/engine/diag/cbs/diag_cbs_voltage.c", + "tests/unit/app/engine/diag/cbs/test_diag_cbs_voltage.c" + ] + } + ], + "src/app/engine/diag/diag.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_diag", + "src/app/application/config", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/diag", + "src/app/engine/diag/cbs", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_diag/Mockdatabase.c", + "build/unit_test/mocks/test_diag/Mockdiag_cbs.c", + "build/unit_test/test/runners/test_diag_runner.c", + "src/app/engine/config/diag_cfg.c", + "src/app/engine/diag/diag.c", + "tests/unit/app/engine/diag/test_diag.c" + ] + } + ], + "src/app/engine/hw_info/master_info.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_master_info", + "src/app/application/config", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/hw_info", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/test/runners/test_master_info_runner.c", + "src/app/engine/hw_info/master_info.c", + "tests/unit/app/engine/hw_info/test_master_info.c" + ] + } + ], + "src/app/engine/sys/reset.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_reset", + "src/app/application/config", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/sys", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/test/runners/test_reset_runner.c", + "src/app/engine/sys/reset.c", + "tests/unit/app/engine/sys/test_reset.c" + ] + } + ], + "src/app/engine/sys/sys.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_sys", + "src/app/application/algorithm", + "src/app/application/algorithm/config", + "src/app/application/algorithm/state_estimation", + "src/app/application/algorithm/state_estimation/sof/trapezoid", + "src/app/application/bal", + "src/app/application/bms", + "src/app/application/config", + "src/app/driver/afe/api", + "src/app/driver/can", + "src/app/driver/config", + "src/app/driver/contactor", + "src/app/driver/fram", + "src/app/driver/imd", + "src/app/driver/interlock", + "src/app/driver/mcu", + "src/app/driver/meas", + "src/app/driver/sbc", + "src/app/driver/sbc/fs8x_driver", + "src/app/driver/spi", + "src/app/driver/sps", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/diag", + "src/app/engine/sys", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_sys/Mockafe.c", + "build/unit_test/mocks/test_sys/Mockalgorithm.c", + "build/unit_test/mocks/test_sys/Mockbal.c", + "build/unit_test/mocks/test_sys/Mockbms.c", + "build/unit_test/mocks/test_sys/Mockcan.c", + "build/unit_test/mocks/test_sys/Mockcontactor.c", + "build/unit_test/mocks/test_sys/Mockdatabase.c", + "build/unit_test/mocks/test_sys/Mockdiag.c", + "build/unit_test/mocks/test_sys/Mockfassert.c", + "build/unit_test/mocks/test_sys/Mockfram.c", + "build/unit_test/mocks/test_sys/Mockimd.c", + "build/unit_test/mocks/test_sys/Mockinterlock.c", + "build/unit_test/mocks/test_sys/Mockmeas.c", + "build/unit_test/mocks/test_sys/Mockos.c", + "build/unit_test/mocks/test_sys/Mocksbc.c", + "build/unit_test/mocks/test_sys/Mocksof_trapezoid.c", + "build/unit_test/mocks/test_sys/Mockstate_estimation.c", + "build/unit_test/mocks/test_sys/Mocksys_cfg.c", + "build/unit_test/test/runners/test_sys_runner.c", + "src/app/driver/config/fram_cfg.c", + "src/app/engine/sys/sys.c", + "tests/unit/app/engine/sys/test_sys.c" + ] + } + ], + "src/app/engine/sys_mon/sys_mon.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_sys_mon", + "src/app/application/config", + "src/app/driver/config", + "src/app/driver/fram", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/diag", + "src/app/engine/sys_mon", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_sys_mon/Mockdiag.c", + "build/unit_test/mocks/test_sys_mon/Mockfram.c", + "build/unit_test/mocks/test_sys_mon/Mockfram_cfg.c", + "build/unit_test/mocks/test_sys_mon/Mockos.c", + "build/unit_test/mocks/test_sys_mon/Mocksys_mon_cfg.c", + "build/unit_test/test/runners/test_sys_mon_runner.c", + "src/app/engine/sys_mon/sys_mon.c", + "tests/unit/app/engine/sys_mon/test_sys_mon.c" + ] + } + ], + "src/app/main/fassert.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_fassert", + "src/app/application/config", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/test/runners/test_fassert_runner.c", + "src/app/main/fassert.c", + "tests/unit/app/main/test_fassert.c" + ] + } + ], + "src/app/main/fstartup.c": [ + { + "defines": [ + "uint32=uint32_t" + ], + "flags": [ + "-Wimplicit-fallthrough=4" + ], + "include": [ + "C:/ti/Hercules/HALCoGen/v04.07.01/drivers/TMS570LC4357ZWT/SYSTEM570v000", + "build/unit_test/include", + "build/unit_test/mocks/test_fstartup", + "src/app/application/config", + "src/app/driver/io", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "skip:": [ + "linux" + ], + "sources": [ + "build/unit_test/mocks/test_fstartup/MockHL_errata_SSWF021_45.c", + "build/unit_test/mocks/test_fstartup/MockHL_esm.c", + "build/unit_test/mocks/test_fstartup/MockHL_sys_common.c", + "build/unit_test/mocks/test_fstartup/MockHL_sys_core.c", + "build/unit_test/mocks/test_fstartup/MockHL_sys_mpu.c", + "build/unit_test/mocks/test_fstartup/MockHL_sys_vim.c", + "build/unit_test/mocks/test_fstartup/MockHL_system.c", + "build/unit_test/test/runners/test_fstartup_runner.c", + "src/app/main/fstartup.c", + "tests/unit/app/main/test_fstartup.c" + ] + } + ], + "src/app/main/main.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_main", + "src/app/application/config", + "src/app/driver/adc", + "src/app/driver/checksum", + "src/app/driver/config", + "src/app/driver/dma", + "src/app/driver/foxmath", + "src/app/driver/i2c", + "src/app/driver/io", + "src/app/driver/led", + "src/app/driver/mcu", + "src/app/driver/pwm", + "src/app/driver/spi", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/diag", + "src/app/engine/hw_info", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_main/MockHL_adc.c", + "build/unit_test/mocks/test_main/MockHL_crc.c", + "build/unit_test/mocks/test_main/MockHL_etpwm.c", + "build/unit_test/mocks/test_main/MockHL_gio.c", + "build/unit_test/mocks/test_main/MockHL_het.c", + "build/unit_test/mocks/test_main/MockHL_pinmux.c", + "build/unit_test/mocks/test_main/MockHL_sys_core.c", + "build/unit_test/mocks/test_main/MockHL_system.c", + "build/unit_test/mocks/test_main/Mockadc.c", + "build/unit_test/mocks/test_main/Mockchecksum.c", + "build/unit_test/mocks/test_main/Mockdiag.c", + "build/unit_test/mocks/test_main/Mockdiag_cfg.c", + "build/unit_test/mocks/test_main/Mockdma.c", + "build/unit_test/mocks/test_main/Mockfoxmath.c", + "build/unit_test/mocks/test_main/Mocki2c.c", + "build/unit_test/mocks/test_main/Mockled.c", + "build/unit_test/mocks/test_main/Mockmaster_info.c", + "build/unit_test/mocks/test_main/Mockos.c", + "build/unit_test/mocks/test_main/Mockpwm.c", + "build/unit_test/mocks/test_main/Mockspi.c", + "build/unit_test/test/runners/test_main_runner.c", + "src/app/main/main.c", + "tests/unit/app/main/test_main.c" + ] + } + ], + "src/app/task/config/ftask_cfg.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_ftask_cfg", + "src/app/application/algorithm", + "src/app/application/algorithm/config", + "src/app/application/algorithm/state_estimation", + "src/app/application/algorithm/state_estimation/sof/trapezoid", + "src/app/application/bal", + "src/app/application/bms", + "src/app/application/config", + "src/app/application/redundancy", + "src/app/driver/adc", + "src/app/driver/afe/api", + "src/app/driver/can", + "src/app/driver/config", + "src/app/driver/contactor", + "src/app/driver/dma", + "src/app/driver/fram", + "src/app/driver/htsensor", + "src/app/driver/i2c", + "src/app/driver/imd", + "src/app/driver/interlock", + "src/app/driver/led", + "src/app/driver/mcu", + "src/app/driver/meas", + "src/app/driver/pex", + "src/app/driver/rtc", + "src/app/driver/sbc", + "src/app/driver/sbc/fs8x_driver", + "src/app/driver/spi", + "src/app/driver/sps", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/diag", + "src/app/engine/sys", + "src/app/engine/sys_mon", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/config", + "src/app/task/ftask", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_ftask_cfg/MockHL_gio.c", + "build/unit_test/mocks/test_ftask_cfg/Mockadc.c", + "build/unit_test/mocks/test_ftask_cfg/Mockafe.c", + "build/unit_test/mocks/test_ftask_cfg/Mockalgorithm.c", + "build/unit_test/mocks/test_ftask_cfg/Mockbal.c", + "build/unit_test/mocks/test_ftask_cfg/Mockbms.c", + "build/unit_test/mocks/test_ftask_cfg/Mockcan.c", + "build/unit_test/mocks/test_ftask_cfg/Mockcontactor.c", + "build/unit_test/mocks/test_ftask_cfg/Mockdatabase.c", + "build/unit_test/mocks/test_ftask_cfg/Mockdiag.c", + "build/unit_test/mocks/test_ftask_cfg/Mockdiag_cfg.c", + "build/unit_test/mocks/test_ftask_cfg/Mockfram.c", + "build/unit_test/mocks/test_ftask_cfg/Mockhtsensor.c", + "build/unit_test/mocks/test_ftask_cfg/Mocki2c.c", + "build/unit_test/mocks/test_ftask_cfg/Mockimd.c", + "build/unit_test/mocks/test_ftask_cfg/Mockinterlock.c", + "build/unit_test/mocks/test_ftask_cfg/Mockled.c", + "build/unit_test/mocks/test_ftask_cfg/Mockmeas.c", + "build/unit_test/mocks/test_ftask_cfg/Mockmpu_prototypes.c", + "build/unit_test/mocks/test_ftask_cfg/Mockos.c", + "build/unit_test/mocks/test_ftask_cfg/Mockpex.c", + "build/unit_test/mocks/test_ftask_cfg/Mockredundancy.c", + "build/unit_test/mocks/test_ftask_cfg/Mockrtc.c", + "build/unit_test/mocks/test_ftask_cfg/Mocksbc.c", + "build/unit_test/mocks/test_ftask_cfg/Mocksof_trapezoid.c", + "build/unit_test/mocks/test_ftask_cfg/Mocksps.c", + "build/unit_test/mocks/test_ftask_cfg/Mockstate_estimation.c", + "build/unit_test/mocks/test_ftask_cfg/Mocksys.c", + "build/unit_test/mocks/test_ftask_cfg/Mocksys_mon.c", + "build/unit_test/test/runners/test_ftask_cfg_runner.c", + "src/app/task/config/ftask_cfg.c", + "tests/unit/app/task/config/test_ftask_cfg.c" + ] + } + ], + "src/app/task/ftask/freertos/ftask_freertos.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_ftask_freertos", + "src/app/application/config", + "src/app/driver/afe/api", + "src/app/driver/config", + "src/app/driver/fram", + "src/app/driver/mcu", + "src/app/driver/rtc", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/sys_mon", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/config", + "src/app/task/ftask", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_ftask_freertos/Mockftask_cfg.c", + "build/unit_test/mocks/test_ftask_freertos/Mockmpu_prototypes.c", + "build/unit_test/mocks/test_ftask_freertos/Mockos.c", + "build/unit_test/mocks/test_ftask_freertos/Mocksys_mon.c", + "build/unit_test/test/runners/test_ftask_freertos_runner.c", + "src/app/task/ftask/freertos/ftask_freertos.c", + "src/app/task/ftask/ftask.c", + "tests/unit/app/task/ftask/freertos/test_ftask_freertos.c" + ] + } + ], + "src/app/task/ftask/ftask.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_ftask", + "src/app/application/algorithm", + "src/app/application/algorithm/config", + "src/app/application/algorithm/state_estimation", + "src/app/application/algorithm/state_estimation/sof/trapezoid", + "src/app/application/bal", + "src/app/application/bms", + "src/app/application/config", + "src/app/application/redundancy", + "src/app/driver/adc", + "src/app/driver/afe/api", + "src/app/driver/can", + "src/app/driver/config", + "src/app/driver/contactor", + "src/app/driver/dma", + "src/app/driver/fram", + "src/app/driver/htsensor", + "src/app/driver/i2c", + "src/app/driver/imd", + "src/app/driver/interlock", + "src/app/driver/led", + "src/app/driver/mcu", + "src/app/driver/meas", + "src/app/driver/pex", + "src/app/driver/rtc", + "src/app/driver/sbc", + "src/app/driver/sbc/fs8x_driver", + "src/app/driver/spi", + "src/app/driver/sps", + "src/app/engine/config", + "src/app/engine/database", + "src/app/engine/diag", + "src/app/engine/sys", + "src/app/engine/sys_mon", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/config", + "src/app/task/ftask", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_ftask/MockHL_gio.c", + "build/unit_test/mocks/test_ftask/Mockadc.c", + "build/unit_test/mocks/test_ftask/Mockafe.c", + "build/unit_test/mocks/test_ftask/Mockalgorithm.c", + "build/unit_test/mocks/test_ftask/Mockbal.c", + "build/unit_test/mocks/test_ftask/Mockbms.c", + "build/unit_test/mocks/test_ftask/Mockcan.c", + "build/unit_test/mocks/test_ftask/Mockcontactor.c", + "build/unit_test/mocks/test_ftask/Mockdatabase.c", + "build/unit_test/mocks/test_ftask/Mockdiag.c", + "build/unit_test/mocks/test_ftask/Mockdiag_cfg.c", + "build/unit_test/mocks/test_ftask/Mockfram.c", + "build/unit_test/mocks/test_ftask/Mockhtsensor.c", + "build/unit_test/mocks/test_ftask/Mocki2c.c", + "build/unit_test/mocks/test_ftask/Mockimd.c", + "build/unit_test/mocks/test_ftask/Mockinterlock.c", + "build/unit_test/mocks/test_ftask/Mockled.c", + "build/unit_test/mocks/test_ftask/Mockmeas.c", + "build/unit_test/mocks/test_ftask/Mockmpu_prototypes.c", + "build/unit_test/mocks/test_ftask/Mockos.c", + "build/unit_test/mocks/test_ftask/Mockpex.c", + "build/unit_test/mocks/test_ftask/Mockredundancy.c", + "build/unit_test/mocks/test_ftask/Mockrtc.c", + "build/unit_test/mocks/test_ftask/Mocksbc.c", + "build/unit_test/mocks/test_ftask/Mocksof_trapezoid.c", + "build/unit_test/mocks/test_ftask/Mocksps.c", + "build/unit_test/mocks/test_ftask/Mockstate_estimation.c", + "build/unit_test/mocks/test_ftask/Mocksys.c", + "build/unit_test/mocks/test_ftask/Mocksys_mon.c", + "build/unit_test/test/runners/test_ftask_runner.c", + "src/app/task/config/ftask_cfg.c", + "src/app/task/ftask/ftask.c", + "tests/unit/app/task/ftask/test_ftask.c" + ] + } + ], + "src/app/task/os/freertos/os_freertos.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_os_freertos", + "src/app/application/config", + "src/app/driver/can/cbs", + "src/app/driver/can/cbs/tx-async", + "src/app/driver/config", + "src/app/driver/mcu", + "src/app/driver/rtc", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/config", + "src/app/task/ftask", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/mocks/test_os_freertos/Mockcan_cbs_tx_crash-dump.c", + "build/unit_test/mocks/test_os_freertos/Mockftask.c", + "build/unit_test/mocks/test_os_freertos/Mockftask_cfg.c", + "build/unit_test/mocks/test_os_freertos/Mockportmacro.c", + "build/unit_test/mocks/test_os_freertos/Mockqueue.c", + "build/unit_test/mocks/test_os_freertos/Mockrtc.c", + "build/unit_test/mocks/test_os_freertos/Mocktask.c", + "build/unit_test/test/runners/test_os_freertos_runner.c", + "src/app/task/os/freertos/os_freertos.c", + "tests/unit/app/task/os/freertos/test_os_freertos.c" + ] + } + ], + "src/app/task/os/os.c": [ + { + "include": [ + "build/unit_test/include", + "build/unit_test/mocks/test_os", + "src/app/application/config", + "src/app/driver/can", + "src/app/driver/can/cbs", + "src/app/driver/can/cbs/tx", + "src/app/driver/can/cbs/tx-async", + "src/app/driver/config", + "src/app/driver/mcu", + "src/app/driver/rtc", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/config", + "src/app/task/ftask", + "src/app/task/os", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config" + ], + "sources": [ + "build/unit_test/mocks/test_os/Mockcan.c", + "build/unit_test/mocks/test_os/Mockcan_helper.c", + "build/unit_test/mocks/test_os/Mockftask.c", + "build/unit_test/mocks/test_os/Mockftask_cfg.c", + "build/unit_test/mocks/test_os/Mockportmacro.c", + "build/unit_test/mocks/test_os/Mockqueue.c", + "build/unit_test/mocks/test_os/Mockrtc.c", + "build/unit_test/mocks/test_os/Mocktask.c", + "build/unit_test/test/runners/test_os_runner.c", + "src/app/driver/can/cbs/tx-async/can_cbs_tx_crash-dump.c", + "src/app/driver/config/can_cfg.c", + "src/app/task/os/freertos/os_freertos.c", + "src/app/task/os/os.c", + "tests/unit/app/task/os/test_os.c" + ] + } + ], + "src/opt/cells/config/lg_inr18650mj1.c": [ + { + "include": [ + "src/app/application/config", + "src/app/driver/mcu", + "src/app/engine/config", + "src/app/engine/database", + "src/app/main/include", + "src/app/main/include/config", + "src/app/task/os", + "src/opt/cells/config", + "src/os/freertos/include", + "src/os/freertos/portable/ccs/arm_cortex-r5", + "tests/unit/app/application/config", + "tests/unit/support" + ], + "sources": [ + "build/unit_test/test/runners/test_lg_inr18650mj1_runner.c", + "tests/unit/opt/cells/config/test_lg_inr18650mj1.c" + ] } + ] } diff --git a/tests/unit/doxygen_tests.h b/tests/unit/doxygen_tests.h index 64846133..14a3b93f 100644 --- a/tests/unit/doxygen_tests.h +++ b/tests/unit/doxygen_tests.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file doxygen_tests.h * @author foxBMS Team * @date 2019-06-02 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix DX * * @brief Mainpage doxygen documentation - * + * @details TODO */ #ifndef FOXBMS__DOXYGEN_TESTS_H_ @@ -63,6 +63,48 @@ * * @defgroup UNIT_TEST_IMPLEMENTATION Unit Test Implementation * + * - @ref BATTERY_CELL_CONFIGURATION + * - @ref BATTERY_SYSTEM_CONFIGURATION + * - @ref ALGORITHMS + * - @ref ALGORITHMS_CONFIGURATION + * - @ref APPLICATION + * - @ref APPLICATION_CONFIGURATION + * - @ref DRIVERS + * - @ref DRIVERS_CONFIGURATION + * - @ref ENGINE + * - @ref ENGINE_CONFIGURATION + * - @ref TASK_CONFIGURATION + * - @ref MAIN + * - @ref MAIN_CONFIGURATION + * - @ref OS + * + * @defgroup BATTERY_CELL_CONFIGURATION Battery cell configuration + * + * @defgroup BATTERY_SYSTEM_CONFIGURATION Battery system configuration + * + * @defgroup ALGORITHMS Algorithms + * @defgroup ALGORITHMS_CONFIGURATION Algorithm configurations + * + * @defgroup APPLICATION Application + * @defgroup APPLICATION_CONFIGURATION Application configurations + * + * @defgroup DRIVERS Driver + * @defgroup DRIVERS_CONFIGURATION Driver configurations + * + * @defgroup ENGINE Engine + * @defgroup ENGINE_CONFIGURATION Engine configurations + * + * @defgroup TASK Task + * @defgroup TASK_CONFIGURATION Task configuration + * + * @defgroup MAIN Main + * @defgroup MAIN_CONFIGURATION Main configuration + * + * @defgroup OS Operating system + * + * @defgroup STATE_MACHINE State machines (dummy group) + * @defgroup DOXYGEN Doxygen configuration (dummy group) + * */ /*========== Includes =======================================================*/ diff --git a/tests/scripts/waf-core/.gitignore b/tests/unit/gen_hcg/.gitignore similarity index 100% rename from tests/scripts/waf-core/.gitignore rename to tests/unit/gen_hcg/.gitignore diff --git a/tests/unit/gen_hcg/wscript b/tests/unit/gen_hcg/wscript new file mode 100755 index 00000000..68ef716d --- /dev/null +++ b/tests/unit/gen_hcg/wscript @@ -0,0 +1,64 @@ +#!/usr/bin/env python3 +# +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# All rights reserved. +# +# SPDX-License-Identifier: BSD-3-Clause +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# We kindly request you to use one or more of the following phrases to refer to +# foxBMS in your hardware, software, documentation or advertising materials: +# +# - "This product uses parts of foxBMS®" +# - "This product includes parts of foxBMS®" +# - "This product is derived from foxBMS®" + +"""Runs HALCoGen in the current directory.""" + +# pylint: disable=missing-function-docstring + +from waflib.Build import BuildContext +from waflib.Configure import ConfigurationContext +from waflib.Options import OptionsContext + +TOOLDIR = "../../../tools/waf-tools" + + +def options(opt: OptionsContext): + opt.top = "." + + +def configure(cnf: ConfigurationContext): + cnf.load("f_hcg", tooldir=TOOLDIR) + + +def build(bld: BuildContext): + bld( + source="../../../conf/hcg/hcg.hcg", + unit_test=True, + startup_hash=bld.path.find_node("../../../src/hal/startup.hash"), + ) diff --git a/tests/unit/opt/cells/config/test_lg_inr18650mj1.c b/tests/unit/opt/cells/config/test_lg_inr18650mj1.c index ab8b2fe9..5a295569 100644 --- a/tests/unit/opt/cells/config/test_lg_inr18650mj1.c +++ b/tests/unit/opt/cells/config/test_lg_inr18650mj1.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_lg_inr18650mj1.c * @author foxBMS Team * @date 2020-07-31 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/run_ut_gcc_build.bat b/tests/unit/run_ut_gcc_build.bat deleted file mode 100644 index 6c5a01a2..00000000 --- a/tests/unit/run_ut_gcc_build.bat +++ /dev/null @@ -1,65 +0,0 @@ -@REM Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -@REM All rights reserved. -@REM -@REM SPDX-License-Identifier: BSD-3-Clause -@REM -@REM Redistribution and use in source and binary forms, with or without -@REM modification, are permitted provided that the following conditions are met: -@REM -@REM 1. Redistributions of source code must retain the above copyright notice, this -@REM list of conditions and the following disclaimer. -@REM -@REM 2. Redistributions in binary form must reproduce the above copyright notice, -@REM this list of conditions and the following disclaimer in the documentation -@REM and/or other materials provided with the distribution. -@REM -@REM 3. Neither the name of the copyright holder nor the names of its -@REM contributors may be used to endorse or promote products derived from -@REM this software without specific prior written permission. -@REM -@REM THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -@REM AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -@REM IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -@REM DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -@REM FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -@REM DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -@REM SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -@REM CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -@REM OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -@REM OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -@REM -@REM We kindly request you to use one or more of the following phrases to refer to -@REM foxBMS in your hardware, software, documentation or advertising materials: -@REM -@REM - "This product uses parts of foxBMS®" -@REM - "This product includes parts of foxBMS®" -@REM - "This product is derived from foxBMS®" - -@SETLOCAL EnableExtensions EnableDelayedExpansion - -@PUSHD %~dp0 - -@FOR /F "usebackq tokens=*" %%A in ("%~dp0\..\..\conf\env\paths_win32.txt") do @( - @IF EXIST %%A ( - @CALL SET "NewPath=%%NewPath%%;%%A" - ) -) - -@IF DEFINED NewPath ( - @SET "PATH=%NewPath:~1%;%PATH%" -) - -@SET CONDA_BASE_ENVIRONMENT_ACTIVATE_SCRIPT="" -@CALL %~dp0\..\..\tools\utils\cmd\find_base_conda.bat - -@IF %CONDA_BASE_ENVIRONMENT_ACTIVATE_SCRIPT%=="" ( - pause - @EXIT /b 1 -) - -@SET BAUHAUS_CONFIG=%~dp0axivion -@CALL %CONDA_BASE_ENVIRONMENT_ACTIVATE_SCRIPT% %CONDA_DEVELOPMENT_ENVIRONMENT_NAME% - -@python %~dp0..\..\tools\waf --top %~dp0 %* - -@POPD diff --git a/tests/unit/support/test_algorithm_stubs.h b/tests/unit/support/test_algorithm_stubs.h index dc2da132..fb68bcb2 100644 --- a/tests/unit/support/test_algorithm_stubs.h +++ b/tests/unit/support/test_algorithm_stubs.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_algorithm_stubs.h * @author foxBMS Team * @date 2020-12-09 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/support/test_assert_helper.h b/tests/unit/support/test_assert_helper.h index e0970bd0..bd080f14 100644 --- a/tests/unit/support/test_assert_helper.h +++ b/tests/unit/support/test_assert_helper.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_assert_helper.h * @author foxBMS Team * @date 2020-07-22 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * @@ -77,7 +77,8 @@ _code_under_test; \ TEST_FAIL_MESSAGE("Code under test did not assert"); \ } \ - Catch(e) {} \ + Catch(e) { \ + } \ } /** @@ -88,11 +89,15 @@ * assertion fails "unknowingly", the unit test will failed * because of an unhandled exception. */ -#define TEST_ASSERT_PASS_ASSERT(_code_under_test) \ - { \ - CEXCEPTION_T e; \ - Try { _code_under_test; } \ - Catch(e) { TEST_FAIL_MESSAGE("Code under test failed an assertion"); } \ +#define TEST_ASSERT_PASS_ASSERT(_code_under_test) \ + { \ + CEXCEPTION_T e; \ + Try { \ + _code_under_test; \ + } \ + Catch(e) { \ + TEST_FAIL_MESSAGE("Code under test failed an assertion"); \ + } \ } #endif /* FOXBMS__TEST_ASSERT_HELPER_H_ */ diff --git a/tests/unit/support/test_can_mpu_prototype_queue_create_stub.h b/tests/unit/support/test_can_mpu_prototype_queue_create_stub.h index b3eb1f65..aa609a4f 100644 --- a/tests/unit/support/test_can_mpu_prototype_queue_create_stub.h +++ b/tests/unit/support/test_can_mpu_prototype_queue_create_stub.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file test_can_mpu_prototype_queue_create_stub.h * @author foxBMS Team * @date 2021-06-09 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * diff --git a/tests/unit/support/test_ignore_list.h b/tests/unit/support/test_ignore_list.h index 9e58f95e..6d21157c 100644 --- a/tests/unit/support/test_ignore_list.h +++ b/tests/unit/support/test_ignore_list.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,13 +43,13 @@ * @file test_ignore_list.h * @author foxBMS Team * @date 2023-07-21 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * * @brief Warnings that need to be ignored in the unit test build - * @details 'unknown-pragmas' needs to ignored as the GCC would otherwise + * @details These 'unknown-pragmas' needs to ignored as the GCC would otherwise * complain about the TI pragmas, which are however required. * 'unused-parameter' needs to ignored as there are generic * interfaces, where then it can appear that some parameters are then diff --git a/tests/unit/support/test_pec_helper.h b/tests/unit/support/test_pec_helper.h index 033a01b1..f4da4501 100644 --- a/tests/unit/support/test_pec_helper.h +++ b/tests/unit/support/test_pec_helper.h @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,14 +43,13 @@ * @file test_pec_helper.h * @author foxBMS Team * @date 2020-12-16 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup UNIT_TEST_IMPLEMENTATION * @prefix TEST * - * @brief helper module for testing the validity of the PEC in LTC commands + * @brief Helper module for testing the validity of the PEC in LTC commands * @details This module helps testing whole command arrays for a correct PEC - * */ #ifndef FOXBMS__TEST_PEC_HELPER_H_ diff --git a/tests/unit/wscript b/tests/unit/wscript old mode 100644 new mode 100755 index 9b13ceb0..7023ae0c --- a/tests/unit/wscript +++ b/tests/unit/wscript @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -40,8 +39,10 @@ """Host and SPA build of the unit test suite""" -# pylint: disable=missing-function-docstring +# pylint: disable=too-many-locals +import collections +import hashlib import os from pathlib import Path @@ -51,6 +52,18 @@ from waflib.Configure import ConfigurationContext from waflib.Node import Node from waflib.Options import OptionsContext from waflib.Tools import waf_unit_test +from waflib.Utils import unversioned_sys_platform + + +def sorting_error(unit_under_test, test_case, setup, key): + """Display an error message""" + err_msg = ( + f"File under test: '{unit_under_test}'\n" + f" Test case: '{test_case}'\n\n" + f" key: '{key}': should be:" + f" {sorted(setup[key])}\n\n" + ) + return err_msg def get_bld(self: Node): @@ -82,6 +95,7 @@ COMMON_CFLAGS = [ "-DGNU_COMPILER", "-DUNITY_UNIT_TEST", "-DUNITY_INCLUDE_EXEC_TIME", + "-DUNITY_USE_COMMAND_LINE_ARGS", "-std=c11", "-Wextra", "-Wall", @@ -106,6 +120,7 @@ for x in VARIANTS: def options(opt: OptionsContext): """Available build options""" + opt.top = "." opt.load("compiler_c") opt.load("waf_unit_test") @@ -144,6 +159,16 @@ def options(opt: OptionsContext): def configure(cnf: ConfigurationContext): """configures gcc for the host build (gcc) and cafeCC for the SPA build.""" + bauhaus_config = os.getenv("BAUHAUS_CONFIG", "") + if not bauhaus_config: + cnf.fatal("Environment variable 'BAUHAUS_CONFIG' must be set.") + + expected = (Path(cnf.path.abspath()) / "axivion").as_posix() + actual = Path(bauhaus_config).as_posix() + + if expected != actual: + cnf.fatal(f"Environment variable 'BAUHAUS_CONFIG' must be set to {expected}.") + # copy environments cnf.setenv("host") # gcc (native) cnf.setenv("axivion") # cafeCC (SPA) @@ -179,12 +204,19 @@ def configure(cnf: ConfigurationContext): cnf.options.check_c_compiler = "gcc" cnf.load("compiler_c") - cnf.env.append_unique("LINKFLAGS", ["-echo", "-larg", "--show_plan"]) - cnf.find_program("axivion_config", var="AXIVION_CONFIG") - cnf.find_program("cafecc", var="AXIVION_CC") - cnf.find_program("irdump", var="AXIVION_IR_DUMP") + try: + cnf.find_program("axivion_config", var="AXIVION_CONFIG") + cnf.find_program("cafecc", var="AXIVION_CC") + cnf.find_program("irdump", var="AXIVION_IR_DUMP") + except cnf.errors.ConfigurationError as err: + Logs.warn( + "Could not configure Axivion build, so it will not be " + f"available. Error:\n\n{err}\n" + ) + return cnf.env.append_unique("AXIVION_IR_DUMP_ARGS", "-m") + cnf.env.append_unique("LINKFLAGS", ["-echo", "-larg", "--show_plan"]) cnf.env.CC = cnf.env.AXIVION_CC cnf.env.LINK_CC = cnf.env.AXIVION_CC @@ -195,12 +227,19 @@ def configure(cnf: ConfigurationContext): cnf.check(features="c cprogram", fragment=fragment) +# pylint: disable=too-many-branches,too-many-statements def build(bld: BuildContext): """High level definition of the build details""" if not bld.variant: supported_cmds = ", ".join([f"{bld.cmd}_{i}" for i in VARIANTS]).strip() bld.fatal(f"supported build commands: {supported_cmds}") + if bld.variant == "axivion" and not bld.env.AXIVION_IR_DUMP: + bld.fatal( + "Axivion support was not successfully configured, " + "therefore it is not available." + ) + bld.env = bld.all_envs[bld.variant] # when cleaning(!), no further processing of needed @@ -235,11 +274,17 @@ def build(bld: BuildContext): target=c_exception, ) - units_under_test_file: dict = bld.path.find_node("build.json") - units_under_test = units_under_test_file.read_json() + units_under_test_file: Node = bld.path.find_node("build.json") + units_under_test: dict = units_under_test_file.read_json() err = 0 listed_files = [] for k, v in units_under_test.items(): + # maybe the unit test cannot be performed on the platform the tests + # are built, so just exclude the test and print a warning + if skip_platforms := units_under_test.get("skip", ""): + if unversioned_sys_platform() in skip_platforms: + Logs.warn(f"Test '{k}' is not available on this platform.") + continue if not root.find_node(k): err += 1 Logs.error(f"Could not find source file '{k}'.") @@ -247,59 +292,152 @@ def build(bld: BuildContext): listed_files.append(k) if err: bld.fatal("Missing source files.") + # check that everything is well sorted + for k, v in units_under_test.items(): + for i, test in enumerate(v): + if test.get("defines", []) != sorted(test.get("defines", [])): + bld.fatal(sorting_error(k, i, test, "defines")) + if test.get("include", []) != sorted(test.get("include", [])): + bld.fatal(sorting_error(k, i, test, "include")) + if test.get("sources", []) != sorted(test.get("sources", [])): + bld.fatal(sorting_error(k, i, test, "sources")) files = [] - for i in root.ant_glob("src/app/**/*.c"): + for i in root.ant_glob( + "src/app/**/*.c src/opt/cells/config/*.c", + excl=[ + "**/vendor/**", + "**/fs8x_driver/**", # vendored SBC files + ] + + [str(root.find_node("src/app/driver/afe/maxim/common/mxm_register_map.h"))], + ): files.append(Path(i.path_from(root)).as_posix()) if diff := set(files) - set(listed_files): bld.fatal( "The files in the sources tree do not match the files defined " f"in the build configuration '{units_under_test_file.relpath()}':\n{', '.join(diff)}" ) + + # all test files shall be included somewhere in the source tree, otherwise + # the test file is not compiled and therefore not tested + relevant_test_files = [] + + for i in root.ant_glob( + "tests/unit/**/test_*.c", + excl=[ + # these are the dummy files, see + # tests/unit/app/driver/afe/adi/common/ades183x/README.md + "tests/unit/app/driver/afe/adi/common/ades183x/**", + "tests/unit/support/**", + ], + quiet=True, + ): + relevant_test_files.append(Path(i.path_from(root)).as_posix()) + + for i in relevant_test_files: + found = False + for k, tests in units_under_test.items(): + for test in tests: + if i in test.get("sources", []): + found = True + break + if not found: + txt = (Path(root.abspath()) / Path(i)).read_text(encoding="utf-8") + if "/* this is a dummy test file */" not in txt: + bld.fatal(f"Test file '{i}' is not listed in any build instruction.") + test_runners = [] + test_implementation_files = [] for i, (k, v) in enumerate(units_under_test.items()): - if not k.endswith( # TODO remove this once it is working for all tests - ( - "/adc.c", - "/adi_ades1830_gpio_voltages.c", - "/crc.c", - "/foxmath.c", - "/algorithm.c", - "/algorithm_cfg.c", - "/moving_average.c", - "/soc_counting.c", - "/soc_debug.c", - "/soc_none.c", - "/soe_counting.c", - "/soe_debug.c", - "/os.c", + for test in v: + # check if the test file shall be ignored + if test.get("ignore", False): + if not test.get("_comment", ""): + bld.fatal( + "Ignored test files require an explanation " + f"comment (test file {k})." + ) + continue + + test_base_name = k.rsplit("/", maxsplit=1) + test_name = "" + test_runner = "" + unit_under_test = f"{test_base_name[1].rsplit('.', maxsplit=1)[0]}" + expected_unit_under_test_infix = ( + test.get("runner-alias", None) or unit_under_test + ) + expected_test_name = f"test_{expected_unit_under_test_infix}.c" + expected_runner_name = f"test_{expected_unit_under_test_infix}_runner.c" + for source in test["sources"]: + if source.endswith(f"/{expected_runner_name}"): + test_runners.append(source) + if not test_runner: + test_runner = source + if source.endswith(f"/{expected_test_name}"): + test_implementation_files.append(source) + if not test_name: + test_name = source + if not test_runner: + bld.fatal( + f"DUT: {k}: Could not find expected runner file " + f"'{expected_runner_name}' in sources list" + ) + if not test_name: + bld.fatal( + f"DUT: {k}: Could not find expected test file " + f"'{expected_test_name}' in sources list" + ) + # to avoid recompilations, but still give every test binary an + # unique name, we hash the filename into a integer + run_id = int.from_bytes(hashlib.md5(test_runner.encode()).digest(), "big") + test_runner_out = f"{test_runner}.{run_id}.exe" + sources = [] + for source in test["sources"]: + found = root.find_node(source) + if not found: + bld.fatal( + f"Could not find source '{source}' defined for '{test_runner}'." + ) + sources.append(found) + defines = test.get("defines", []) + cflags = test.get("flags", []) + bld( + features="c", + source=sources, + defines=defines, + cflags=cflags, + use=[unity, cmock, c_exception], + includes=[inc_c_exception, inc_cmock, inc_unity] + + [root.find_dir(i) for i in test["include"]], + target=f"objects-{run_id}", + idx=run_id, + ) + features = "c cprogram" + if bld.variant == "host": + features += " test" + bld( + features=features, + use=[f"objects-{run_id}", unity, cmock, c_exception], + includes=[inc_c_exception, inc_cmock, inc_unity] + + [root.find_dir(i) for i in test["include"]], + target=bld.path.find_or_declare(test_runner_out), + idx=run_id, ) - ): - continue - test_base_name = k.rsplit("/", maxsplit=1) - test_runner = "/".join([f"test_{test_base_name[1]}.{i}.exe"]) - sources = [root.find_node(i) for i in v["sources"]] - defines = v.get("defines", []) - bld( - features="c", - source=sources, - defines=defines, - use=[unity, cmock, c_exception], - includes=[inc_c_exception, inc_cmock, inc_unity] - + [root.find_dir(i) for i in v["include"]], - target=f"objects-{i}", - idx=i, - ) - features = "c cprogram" - if bld.variant == "host": - features += " test" - bld( - features=features, - use=[f"objects-{i}", unity, cmock, c_exception], - includes=[inc_c_exception, inc_cmock, inc_unity] - + [root.find_dir(i) for i in v["include"]], - target=bld.path.find_or_declare(test_runner), - idx=i, - ) if bld.variant == "host": bld.add_post_fun(waf_unit_test.summary) + + duplicate_test_runners = [ + item for item, count in collections.Counter(test_runners).items() if count > 1 + ] + if duplicate_test_runners: + bld.fatal(f"Some runners are listed more than once:\n{duplicate_test_runners}") + + duplicate_test_implementation_files = [ + item + for item, count in collections.Counter(test_implementation_files).items() + if count > 1 + ] + if duplicate_test_implementation_files: + bld.fatal( + f"Some runners are listed more than once:\n{duplicate_test_implementation_files}" + ) diff --git a/tests/variants/freertos_adi-ades1830_hbb_cc-cc-tr-none_none-no-imd.json b/tests/variants/freertos_adi-ades1830_hbb_cc-cc-tr-none_none-no-imd.json index 68864d6e..b4d450cc 100644 --- a/tests/variants/freertos_adi-ades1830_hbb_cc-cc-tr-none_none-no-imd.json +++ b/tests/variants/freertos_adi-ades1830_hbb_cc-cc-tr-none_none-no-imd.json @@ -1,31 +1,31 @@ { - "slave-unit": { - "analog-front-end": { - "manufacturer": "adi", - "ic": "ades1830" - }, - "temperature-sensor": { - "manufacturer": "epcos", - "model": "b57251v5103j060", - "method": "polynomial" - } + "application": { + "algorithm": { + "state-estimation": { + "soc": "counting", + "soe": "counting", + "sof": "trapezoid", + "soh": "none" + } }, - "application": { - "algorithm": { - "state-estimation": { - "soc": "counting", - "soe": "counting", - "sof": "trapezoid", - "soh": "none" - } - }, - "balancing-strategy": "history", - "insulation-monitoring-device": { - "manufacturer": "none", - "model": "" - } + "balancing-strategy": "history", + "insulation-monitoring-device": { + "manufacturer": "none", + "model": "" + } + }, + "rtos": { + "name": "freertos" + }, + "slave-unit": { + "analog-front-end": { + "ic": "ades1830", + "manufacturer": "adi" }, - "rtos": { - "name": "freertos" + "temperature-sensor": { + "manufacturer": "epcos", + "method": "polynomial", + "model": "b57251v5103j060" } + } } diff --git a/tests/variants/freertos_adi-ades1830_vbb_cc-cc-tr-none_none-no-imd.json b/tests/variants/freertos_adi-ades1830_vbb_cc-cc-tr-none_none-no-imd.json index c71b8868..123ebeaa 100644 --- a/tests/variants/freertos_adi-ades1830_vbb_cc-cc-tr-none_none-no-imd.json +++ b/tests/variants/freertos_adi-ades1830_vbb_cc-cc-tr-none_none-no-imd.json @@ -1,31 +1,31 @@ { - "slave-unit": { - "analog-front-end": { - "manufacturer": "adi", - "ic": "ades1830" - }, - "temperature-sensor": { - "manufacturer": "epcos", - "model": "b57251v5103j060", - "method": "polynomial" - } + "application": { + "algorithm": { + "state-estimation": { + "soc": "counting", + "soe": "counting", + "sof": "trapezoid", + "soh": "none" + } }, - "application": { - "algorithm": { - "state-estimation": { - "soc": "counting", - "soe": "counting", - "sof": "trapezoid", - "soh": "none" - } - }, - "balancing-strategy": "voltage", - "insulation-monitoring-device": { - "manufacturer": "none", - "model": "" - } + "balancing-strategy": "voltage", + "insulation-monitoring-device": { + "manufacturer": "none", + "model": "" + } + }, + "rtos": { + "name": "freertos" + }, + "slave-unit": { + "analog-front-end": { + "ic": "ades1830", + "manufacturer": "adi" }, - "rtos": { - "name": "freertos" + "temperature-sensor": { + "manufacturer": "epcos", + "method": "polynomial", + "model": "b57251v5103j060" } + } } diff --git a/tests/variants/freertos_debug-can_none_cc-cc-tr-none_bender-iso165c.json b/tests/variants/freertos_debug-can_none_cc-cc-tr-none_bender-iso165c.json new file mode 100644 index 00000000..4b0d0b2b --- /dev/null +++ b/tests/variants/freertos_debug-can_none_cc-cc-tr-none_bender-iso165c.json @@ -0,0 +1,31 @@ +{ + "application": { + "algorithm": { + "state-estimation": { + "soc": "counting", + "soe": "counting", + "sof": "trapezoid", + "soh": "none" + } + }, + "balancing-strategy": "none", + "insulation-monitoring-device": { + "manufacturer": "bender", + "model": "iso165c" + } + }, + "rtos": { + "name": "freertos" + }, + "slave-unit": { + "analog-front-end": { + "ic": "can", + "manufacturer": "debug" + }, + "temperature-sensor": { + "manufacturer": "epcos", + "method": "polynomial", + "model": "b57251v5103j060" + } + } +} diff --git a/tests/variants/freertos_debug-default_none_cc-cc-tr-none_none-no-imd.json b/tests/variants/freertos_debug-default_none_cc-cc-tr-none_none-no-imd.json index a4e56838..d3f9bdcb 100644 --- a/tests/variants/freertos_debug-default_none_cc-cc-tr-none_none-no-imd.json +++ b/tests/variants/freertos_debug-default_none_cc-cc-tr-none_none-no-imd.json @@ -1,31 +1,31 @@ { - "slave-unit": { - "analog-front-end": { - "manufacturer": "debug", - "ic": "default" - }, - "temperature-sensor": { - "manufacturer": "epcos", - "model": "b57251v5103j060", - "method": "polynomial" - } + "application": { + "algorithm": { + "state-estimation": { + "soc": "counting", + "soe": "counting", + "sof": "trapezoid", + "soh": "none" + } }, - "application": { - "algorithm": { - "state-estimation": { - "soc": "counting", - "soe": "counting", - "sof": "trapezoid", - "soh": "none" - } - }, - "balancing-strategy": "none", - "insulation-monitoring-device": { - "manufacturer": "none", - "model": "" - } + "balancing-strategy": "none", + "insulation-monitoring-device": { + "manufacturer": "none", + "model": "" + } + }, + "rtos": { + "name": "freertos" + }, + "slave-unit": { + "analog-front-end": { + "ic": "default", + "manufacturer": "debug" }, - "rtos": { - "name": "freertos" + "temperature-sensor": { + "manufacturer": "epcos", + "method": "polynomial", + "model": "b57251v5103j060" } + } } diff --git a/tests/variants/freertos_debug-default_none_debug-debug-tr-debug_none-no-imd.json b/tests/variants/freertos_debug-default_none_debug-debug-tr-debug_none-no-imd.json index 58c56802..14366e24 100644 --- a/tests/variants/freertos_debug-default_none_debug-debug-tr-debug_none-no-imd.json +++ b/tests/variants/freertos_debug-default_none_debug-debug-tr-debug_none-no-imd.json @@ -1,31 +1,31 @@ { - "slave-unit": { - "analog-front-end": { - "manufacturer": "debug", - "ic": "default" - }, - "temperature-sensor": { - "manufacturer": "epcos", - "model": "b57251v5103j060", - "method": "polynomial" - } + "application": { + "algorithm": { + "state-estimation": { + "soc": "debug", + "soe": "debug", + "sof": "trapezoid", + "soh": "debug" + } }, - "application": { - "algorithm": { - "state-estimation": { - "soc": "debug", - "soe": "debug", - "sof": "trapezoid", - "soh": "debug" - } - }, - "balancing-strategy": "none", - "insulation-monitoring-device": { - "manufacturer": "none", - "model": "" - } + "balancing-strategy": "none", + "insulation-monitoring-device": { + "manufacturer": "none", + "model": "" + } + }, + "rtos": { + "name": "freertos" + }, + "slave-unit": { + "analog-front-end": { + "ic": "default", + "manufacturer": "debug" }, - "rtos": { - "name": "freertos" + "temperature-sensor": { + "manufacturer": "epcos", + "method": "polynomial", + "model": "b57251v5103j060" } + } } diff --git a/tests/variants/freertos_debug-default_none_none-none-tr-none_none-no-imd.json b/tests/variants/freertos_debug-default_none_none-none-tr-none_none-no-imd.json index 6b229d4b..7b90dbbf 100644 --- a/tests/variants/freertos_debug-default_none_none-none-tr-none_none-no-imd.json +++ b/tests/variants/freertos_debug-default_none_none-none-tr-none_none-no-imd.json @@ -1,31 +1,31 @@ { - "slave-unit": { - "analog-front-end": { - "manufacturer": "debug", - "ic": "default" - }, - "temperature-sensor": { - "manufacturer": "epcos", - "model": "b57251v5103j060", - "method": "polynomial" - } + "application": { + "algorithm": { + "state-estimation": { + "soc": "none", + "soe": "none", + "sof": "trapezoid", + "soh": "none" + } }, - "application": { - "algorithm": { - "state-estimation": { - "soc": "none", - "soe": "none", - "sof": "trapezoid", - "soh": "none" - } - }, - "balancing-strategy": "none", - "insulation-monitoring-device": { - "manufacturer": "none", - "model": "" - } + "balancing-strategy": "none", + "insulation-monitoring-device": { + "manufacturer": "none", + "model": "" + } + }, + "rtos": { + "name": "freertos" + }, + "slave-unit": { + "analog-front-end": { + "ic": "default", + "manufacturer": "debug" }, - "rtos": { - "name": "freertos" + "temperature-sensor": { + "manufacturer": "epcos", + "method": "polynomial", + "model": "b57251v5103j060" } + } } diff --git a/tests/variants/freertos_ltc-6804-1_hbb_cc-cc-tr-none_none-no-imd.json b/tests/variants/freertos_ltc-6804-1_hbb_cc-cc-tr-none_none-no-imd.json index 50b660db..16967cdb 100644 --- a/tests/variants/freertos_ltc-6804-1_hbb_cc-cc-tr-none_none-no-imd.json +++ b/tests/variants/freertos_ltc-6804-1_hbb_cc-cc-tr-none_none-no-imd.json @@ -1,31 +1,31 @@ { - "slave-unit": { - "analog-front-end": { - "manufacturer": "ltc", - "ic": "6804-1" - }, - "temperature-sensor": { - "manufacturer": "epcos", - "model": "b57251v5103j060", - "method": "polynomial" - } + "application": { + "algorithm": { + "state-estimation": { + "soc": "counting", + "soe": "counting", + "sof": "trapezoid", + "soh": "none" + } }, - "application": { - "algorithm": { - "state-estimation": { - "soc": "counting", - "soe": "counting", - "sof": "trapezoid", - "soh": "none" - } - }, - "balancing-strategy": "history", - "insulation-monitoring-device": { - "manufacturer": "none", - "model": "" - } + "balancing-strategy": "history", + "insulation-monitoring-device": { + "manufacturer": "none", + "model": "" + } + }, + "rtos": { + "name": "freertos" + }, + "slave-unit": { + "analog-front-end": { + "ic": "6804-1", + "manufacturer": "ltc" }, - "rtos": { - "name": "freertos" + "temperature-sensor": { + "manufacturer": "epcos", + "method": "polynomial", + "model": "b57251v5103j060" } + } } diff --git a/tests/variants/freertos_ltc-6806_none_cc-cc-tr-none_none-no-imd.json b/tests/variants/freertos_ltc-6806_none_cc-cc-tr-none_none-no-imd.json index f6ef4250..3db871c8 100644 --- a/tests/variants/freertos_ltc-6806_none_cc-cc-tr-none_none-no-imd.json +++ b/tests/variants/freertos_ltc-6806_none_cc-cc-tr-none_none-no-imd.json @@ -1,31 +1,31 @@ { - "slave-unit": { - "analog-front-end": { - "manufacturer": "ltc", - "ic": "6806" - }, - "temperature-sensor": { - "manufacturer": "epcos", - "model": "b57251v5103j060", - "method": "polynomial" - } + "application": { + "algorithm": { + "state-estimation": { + "soc": "counting", + "soe": "counting", + "sof": "trapezoid", + "soh": "none" + } }, - "application": { - "algorithm": { - "state-estimation": { - "soc": "counting", - "soe": "counting", - "sof": "trapezoid", - "soh": "none" - } - }, - "balancing-strategy": "none", - "insulation-monitoring-device": { - "manufacturer": "none", - "model": "" - } + "balancing-strategy": "none", + "insulation-monitoring-device": { + "manufacturer": "none", + "model": "" + } + }, + "rtos": { + "name": "freertos" + }, + "slave-unit": { + "analog-front-end": { + "ic": "6806", + "manufacturer": "ltc" }, - "rtos": { - "name": "freertos" + "temperature-sensor": { + "manufacturer": "epcos", + "method": "polynomial", + "model": "b57251v5103j060" } + } } diff --git a/tests/variants/freertos_ltc-6812-1_hbb_cc-cc-tr-none_bender-iso165c.json b/tests/variants/freertos_ltc-6812-1_hbb_cc-cc-tr-none_bender-iso165c.json index d491c6cd..72f464dc 100644 --- a/tests/variants/freertos_ltc-6812-1_hbb_cc-cc-tr-none_bender-iso165c.json +++ b/tests/variants/freertos_ltc-6812-1_hbb_cc-cc-tr-none_bender-iso165c.json @@ -1,31 +1,31 @@ { - "slave-unit": { - "analog-front-end": { - "manufacturer": "ltc", - "ic": "6813-1" - }, - "temperature-sensor": { - "manufacturer": "epcos", - "model": "b57251v5103j060", - "method": "polynomial" - } + "application": { + "algorithm": { + "state-estimation": { + "soc": "counting", + "soe": "counting", + "sof": "trapezoid", + "soh": "none" + } }, - "application": { - "algorithm": { - "state-estimation": { - "soc": "counting", - "soe": "counting", - "sof": "trapezoid", - "soh": "none" - } - }, - "balancing-strategy": "history", - "insulation-monitoring-device": { - "manufacturer": "bender", - "model": "iso165c" - } + "balancing-strategy": "history", + "insulation-monitoring-device": { + "manufacturer": "bender", + "model": "iso165c" + } + }, + "rtos": { + "name": "freertos" + }, + "slave-unit": { + "analog-front-end": { + "ic": "6813-1", + "manufacturer": "ltc" }, - "rtos": { - "name": "freertos" + "temperature-sensor": { + "manufacturer": "epcos", + "method": "polynomial", + "model": "b57251v5103j060" } + } } diff --git a/tests/variants/freertos_ltc-6813-1_hbb_cc-cc-tr-none_bender-ir155.json b/tests/variants/freertos_ltc-6813-1_hbb_cc-cc-tr-none_bender-ir155.json index 5c28f945..54dbf841 100644 --- a/tests/variants/freertos_ltc-6813-1_hbb_cc-cc-tr-none_bender-ir155.json +++ b/tests/variants/freertos_ltc-6813-1_hbb_cc-cc-tr-none_bender-ir155.json @@ -1,31 +1,31 @@ { - "slave-unit": { - "analog-front-end": { - "manufacturer": "ltc", - "ic": "6813-1" - }, - "temperature-sensor": { - "manufacturer": "epcos", - "model": "b57251v5103j060", - "method": "polynomial" - } + "application": { + "algorithm": { + "state-estimation": { + "soc": "counting", + "soe": "counting", + "sof": "trapezoid", + "soh": "none" + } }, - "application": { - "algorithm": { - "state-estimation": { - "soc": "counting", - "soe": "counting", - "sof": "trapezoid", - "soh": "none" - } - }, - "balancing-strategy": "history", - "insulation-monitoring-device": { - "manufacturer": "bender", - "model": "ir155" - } + "balancing-strategy": "history", + "insulation-monitoring-device": { + "manufacturer": "bender", + "model": "ir155" + } + }, + "rtos": { + "name": "freertos" + }, + "slave-unit": { + "analog-front-end": { + "ic": "6813-1", + "manufacturer": "ltc" }, - "rtos": { - "name": "freertos" + "temperature-sensor": { + "manufacturer": "epcos", + "method": "polynomial", + "model": "b57251v5103j060" } + } } diff --git a/tests/variants/freertos_ltc-6813-1_hbb_cc-cc-tr-none_bender-iso165c.json b/tests/variants/freertos_ltc-6813-1_hbb_cc-cc-tr-none_bender-iso165c.json index d491c6cd..72f464dc 100644 --- a/tests/variants/freertos_ltc-6813-1_hbb_cc-cc-tr-none_bender-iso165c.json +++ b/tests/variants/freertos_ltc-6813-1_hbb_cc-cc-tr-none_bender-iso165c.json @@ -1,31 +1,31 @@ { - "slave-unit": { - "analog-front-end": { - "manufacturer": "ltc", - "ic": "6813-1" - }, - "temperature-sensor": { - "manufacturer": "epcos", - "model": "b57251v5103j060", - "method": "polynomial" - } + "application": { + "algorithm": { + "state-estimation": { + "soc": "counting", + "soe": "counting", + "sof": "trapezoid", + "soh": "none" + } }, - "application": { - "algorithm": { - "state-estimation": { - "soc": "counting", - "soe": "counting", - "sof": "trapezoid", - "soh": "none" - } - }, - "balancing-strategy": "history", - "insulation-monitoring-device": { - "manufacturer": "bender", - "model": "iso165c" - } + "balancing-strategy": "history", + "insulation-monitoring-device": { + "manufacturer": "bender", + "model": "iso165c" + } + }, + "rtos": { + "name": "freertos" + }, + "slave-unit": { + "analog-front-end": { + "ic": "6813-1", + "manufacturer": "ltc" }, - "rtos": { - "name": "freertos" + "temperature-sensor": { + "manufacturer": "epcos", + "method": "polynomial", + "model": "b57251v5103j060" } + } } diff --git a/tests/variants/freertos_ltc-6813-1_vbb_cc-cc-tr-none_bender-ir155.json b/tests/variants/freertos_ltc-6813-1_vbb_cc-cc-tr-none_bender-ir155.json index 71942434..fb93898a 100644 --- a/tests/variants/freertos_ltc-6813-1_vbb_cc-cc-tr-none_bender-ir155.json +++ b/tests/variants/freertos_ltc-6813-1_vbb_cc-cc-tr-none_bender-ir155.json @@ -1,31 +1,31 @@ { - "slave-unit": { - "analog-front-end": { - "manufacturer": "ltc", - "ic": "6813-1" - }, - "temperature-sensor": { - "manufacturer": "epcos", - "model": "b57251v5103j060", - "method": "polynomial" - } + "application": { + "algorithm": { + "state-estimation": { + "soc": "counting", + "soe": "counting", + "sof": "trapezoid", + "soh": "none" + } }, - "application": { - "algorithm": { - "state-estimation": { - "soc": "counting", - "soe": "counting", - "sof": "trapezoid", - "soh": "none" - } - }, - "balancing-strategy": "voltage", - "insulation-monitoring-device": { - "manufacturer": "bender", - "model": "ir155" - } + "balancing-strategy": "voltage", + "insulation-monitoring-device": { + "manufacturer": "bender", + "model": "ir155" + } + }, + "rtos": { + "name": "freertos" + }, + "slave-unit": { + "analog-front-end": { + "ic": "6813-1", + "manufacturer": "ltc" }, - "rtos": { - "name": "freertos" + "temperature-sensor": { + "manufacturer": "epcos", + "method": "polynomial", + "model": "b57251v5103j060" } + } } diff --git a/tests/variants/freertos_ltc-6813-1_vbb_cc-cc-tr-none_bender-iso165c.json b/tests/variants/freertos_ltc-6813-1_vbb_cc-cc-tr-none_bender-iso165c.json index dba68507..d5978299 100644 --- a/tests/variants/freertos_ltc-6813-1_vbb_cc-cc-tr-none_bender-iso165c.json +++ b/tests/variants/freertos_ltc-6813-1_vbb_cc-cc-tr-none_bender-iso165c.json @@ -1,31 +1,31 @@ { - "slave-unit": { - "analog-front-end": { - "manufacturer": "ltc", - "ic": "6813-1" - }, - "temperature-sensor": { - "manufacturer": "epcos", - "model": "b57251v5103j060", - "method": "polynomial" - } + "application": { + "algorithm": { + "state-estimation": { + "soc": "counting", + "soe": "counting", + "sof": "trapezoid", + "soh": "none" + } }, - "application": { - "algorithm": { - "state-estimation": { - "soc": "counting", - "soe": "counting", - "sof": "trapezoid", - "soh": "none" - } - }, - "balancing-strategy": "voltage", - "insulation-monitoring-device": { - "manufacturer": "bender", - "model": "iso165c" - } + "balancing-strategy": "voltage", + "insulation-monitoring-device": { + "manufacturer": "bender", + "model": "iso165c" + } + }, + "rtos": { + "name": "freertos" + }, + "slave-unit": { + "analog-front-end": { + "ic": "6813-1", + "manufacturer": "ltc" }, - "rtos": { - "name": "freertos" + "temperature-sensor": { + "manufacturer": "epcos", + "method": "polynomial", + "model": "b57251v5103j060" } + } } diff --git a/tests/variants/freertos_ltc-6813-1_vbb_cc-cc-tr-none_none-no-imd.json b/tests/variants/freertos_ltc-6813-1_vbb_cc-cc-tr-none_none-no-imd.json index 66318ddd..4ea9c316 100644 --- a/tests/variants/freertos_ltc-6813-1_vbb_cc-cc-tr-none_none-no-imd.json +++ b/tests/variants/freertos_ltc-6813-1_vbb_cc-cc-tr-none_none-no-imd.json @@ -1,31 +1,31 @@ { - "slave-unit": { - "analog-front-end": { - "manufacturer": "ltc", - "ic": "6813-1" - }, - "temperature-sensor": { - "manufacturer": "epcos", - "model": "b57251v5103j060", - "method": "polynomial" - } + "application": { + "algorithm": { + "state-estimation": { + "soc": "counting", + "soe": "counting", + "sof": "trapezoid", + "soh": "none" + } }, - "application": { - "algorithm": { - "state-estimation": { - "soc": "counting", - "soe": "counting", - "sof": "trapezoid", - "soh": "none" - } - }, - "balancing-strategy": "none", - "insulation-monitoring-device": { - "manufacturer": "none", - "model": "" - } + "balancing-strategy": "none", + "insulation-monitoring-device": { + "manufacturer": "none", + "model": "" + } + }, + "rtos": { + "name": "freertos" + }, + "slave-unit": { + "analog-front-end": { + "ic": "6813-1", + "manufacturer": "ltc" }, - "rtos": { - "name": "freertos" + "temperature-sensor": { + "manufacturer": "epcos", + "method": "polynomial", + "model": "b57251v5103j060" } + } } diff --git a/tests/variants/freertos_maxim-max17852_vbb_cc-cc-tr-none_none-no-imd.json b/tests/variants/freertos_maxim-max17852_vbb_cc-cc-tr-none_none-no-imd.json index e4b0b864..1a90dc70 100644 --- a/tests/variants/freertos_maxim-max17852_vbb_cc-cc-tr-none_none-no-imd.json +++ b/tests/variants/freertos_maxim-max17852_vbb_cc-cc-tr-none_none-no-imd.json @@ -1,31 +1,31 @@ { - "slave-unit": { - "analog-front-end": { - "manufacturer": "maxim", - "ic": "max17852" - }, - "temperature-sensor": { - "manufacturer": "epcos", - "model": "b57251v5103j060", - "method": "polynomial" - } + "application": { + "algorithm": { + "state-estimation": { + "soc": "counting", + "soe": "counting", + "sof": "trapezoid", + "soh": "none" + } }, - "application": { - "algorithm": { - "state-estimation": { - "soc": "counting", - "soe": "counting", - "sof": "trapezoid", - "soh": "none" - } - }, - "balancing-strategy": "voltage", - "insulation-monitoring-device": { - "manufacturer": "none", - "model": "" - } + "balancing-strategy": "voltage", + "insulation-monitoring-device": { + "manufacturer": "none", + "model": "" + } + }, + "rtos": { + "name": "freertos" + }, + "slave-unit": { + "analog-front-end": { + "ic": "max17852", + "manufacturer": "maxim" }, - "rtos": { - "name": "freertos" + "temperature-sensor": { + "manufacturer": "epcos", + "method": "polynomial", + "model": "b57251v5103j060" } + } } diff --git a/tests/variants/freertos_nxp-mc33775a_vbb_cc-cc-tr-none_none-no-imd.json b/tests/variants/freertos_nxp-mc33775a_vbb_cc-cc-tr-none_none-no-imd.json index df51b81c..1416ef3f 100644 --- a/tests/variants/freertos_nxp-mc33775a_vbb_cc-cc-tr-none_none-no-imd.json +++ b/tests/variants/freertos_nxp-mc33775a_vbb_cc-cc-tr-none_none-no-imd.json @@ -1,31 +1,31 @@ { - "slave-unit": { - "analog-front-end": { - "manufacturer": "nxp", - "ic": "mc33775a" - }, - "temperature-sensor": { - "manufacturer": "epcos", - "model": "b57251v5103j060", - "method": "polynomial" - } + "application": { + "algorithm": { + "state-estimation": { + "soc": "counting", + "soe": "counting", + "sof": "trapezoid", + "soh": "none" + } }, - "application": { - "algorithm": { - "state-estimation": { - "soc": "counting", - "soe": "counting", - "sof": "trapezoid", - "soh": "none" - } - }, - "balancing-strategy": "voltage", - "insulation-monitoring-device": { - "manufacturer": "none", - "model": "" - } + "balancing-strategy": "voltage", + "insulation-monitoring-device": { + "manufacturer": "none", + "model": "" + } + }, + "rtos": { + "name": "freertos" + }, + "slave-unit": { + "analog-front-end": { + "ic": "mc33775a", + "manufacturer": "nxp" }, - "rtos": { - "name": "freertos" + "temperature-sensor": { + "manufacturer": "epcos", + "method": "polynomial", + "model": "b57251v5103j060" } + } } diff --git a/tests/variants/freertos_ti-dummy_vbb_cc-cc-tr-none_none-no-imd.json b/tests/variants/freertos_ti-dummy_vbb_cc-cc-tr-none_none-no-imd.json index 3fe4a0ac..9f02209e 100644 --- a/tests/variants/freertos_ti-dummy_vbb_cc-cc-tr-none_none-no-imd.json +++ b/tests/variants/freertos_ti-dummy_vbb_cc-cc-tr-none_none-no-imd.json @@ -1,31 +1,31 @@ { - "slave-unit": { - "analog-front-end": { - "manufacturer": "ti", - "ic": "dummy" - }, - "temperature-sensor": { - "manufacturer": "epcos", - "model": "b57251v5103j060", - "method": "polynomial" - } + "application": { + "algorithm": { + "state-estimation": { + "soc": "counting", + "soe": "counting", + "sof": "trapezoid", + "soh": "none" + } }, - "application": { - "algorithm": { - "state-estimation": { - "soc": "counting", - "soe": "counting", - "sof": "trapezoid", - "soh": "none" - } - }, - "balancing-strategy": "voltage", - "insulation-monitoring-device": { - "manufacturer": "none", - "model": "" - } + "balancing-strategy": "voltage", + "insulation-monitoring-device": { + "manufacturer": "none", + "model": "" + } + }, + "rtos": { + "name": "freertos" + }, + "slave-unit": { + "analog-front-end": { + "ic": "dummy", + "manufacturer": "ti" }, - "rtos": { - "name": "freertos" + "temperature-sensor": { + "manufacturer": "epcos", + "method": "polynomial", + "model": "b57251v5103j060" } + } } diff --git a/tests/variants/lib-build/lib-build.bat b/tests/variants/lib-build/lib-build.bat deleted file mode 100644 index 911b5055..00000000 --- a/tests/variants/lib-build/lib-build.bat +++ /dev/null @@ -1,101 +0,0 @@ -@REM Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -@REM All rights reserved. -@REM -@REM SPDX-License-Identifier: BSD-3-Clause -@REM -@REM Redistribution and use in source and binary forms, with or without -@REM modification, are permitted provided that the following conditions are met: -@REM -@REM 1. Redistributions of source code must retain the above copyright notice, this -@REM list of conditions and the following disclaimer. -@REM -@REM 2. Redistributions in binary form must reproduce the above copyright notice, -@REM this list of conditions and the following disclaimer in the documentation -@REM and/or other materials provided with the distribution. -@REM -@REM 3. Neither the name of the copyright holder nor the names of its -@REM contributors may be used to endorse or promote products derived from -@REM this software without specific prior written permission. -@REM -@REM THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -@REM AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -@REM IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -@REM DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -@REM FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -@REM DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -@REM SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -@REM CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -@REM OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -@REM OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -@REM -@REM We kindly request you to use one or more of the following phrases to refer to -@REM foxBMS in your hardware, software, documentation or advertising materials: -@REM -@REM - "This product uses parts of foxBMS®" -@REM - "This product includes parts of foxBMS®" -@REM - "This product is derived from foxBMS®" - -@SETLOCAL EnableExtensions EnableDelayedExpansion - -@REM This scripts works only when foxBMS 2 is developed inside a git repository - - -@FOR /F "tokens=* USEBACKQ" %%F IN (`git rev-parse --show-toplevel`) DO @( - @SET REPO_ROOT=%%F -) - -@REM go the repository root -@cd %REPO_ROOT% - -@call waf.bat bootstrap_library_project -v -c yes -@IF %ERRORLEVEL% NEQ 0 ( - @EXIT /b %ERRORLEVEL% -) - -@mkdir libbuild - -@tar -jxf library-project.tar.bz2 --directory libbuild -@IF %ERRORLEVEL% NEQ 0 ( - @EXIT /b %ERRORLEVEL% -) - -@REM Build the library -@cd libbuild -@CALL waf.bat configure build -v -c yes -@IF %ERRORLEVEL% NEQ 0 ( - @EXIT /b %ERRORLEVEL% -) -@cd .. - -@REM Copy file that includes the library header and uses a function from it -@copy /y tests\variants\lib-build\lib-build_cc-options.yaml conf\cc\cc-options.yaml -@IF %ERRORLEVEL% NEQ 0 ( - @EXIT /b %ERRORLEVEL% -) -@copy /y tests\variants\lib-build\lib-build_main.c src\app\main\main.c -@IF %ERRORLEVEL% NEQ 0 ( - @EXIT /b %ERRORLEVEL% -) - -@REM Fix doxygen comment -@Powershell.exe -Command "((Get-Content -path .\src\app\main\main.c -Raw) -replace '@file lib-build_main.c','@file main.c') | Set-Content -NoNewline -Path .\src\app\main\main.c" -@IF %ERRORLEVEL% NEQ 0 ( - @EXIT /b %ERRORLEVEL% -) - -@REM Fix library and header path -@Powershell.exe -Command "((Get-Content -path .\conf\cc\cc-options.yaml -Raw) -replace 'REPO_ROOT', $env:REPO_ROOT) | Set-Content -NoNewline -Path .\conf\cc\cc-options.yaml" -@IF %ERRORLEVEL% NEQ 0 ( - @EXIT /b %ERRORLEVEL% -) - -@REM Build the library -@CALL waf.bat configure -v -c yes -@IF %ERRORLEVEL% NEQ 0 ( - @EXIT /b %ERRORLEVEL% -) - -@CALL waf.bat build_bin -v -c yes -@IF %ERRORLEVEL% NEQ 0 ( - @EXIT /b %ERRORLEVEL% -) diff --git a/tools/waf-tools/f_black.py b/tests/variants/lib-build/lib-build.ps1 old mode 100644 new mode 100755 similarity index 50% rename from tools/waf-tools/f_black.py rename to tests/variants/lib-build/lib-build.ps1 index 668c3bc5..3d18040e --- a/tools/waf-tools/f_black.py +++ b/tests/variants/lib-build/lib-build.ps1 @@ -1,7 +1,6 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- +#!/usr/bin/env pwsh # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -38,70 +37,53 @@ # - "This product includes parts of foxBMS®" # - "This product is derived from foxBMS®" -r"""Implements a waf tool to run `black `_. +# Make all error terminating errors +$ErrorActionPreference = "STOP" -:numref:`f-black-usage` shows how to use this tool. +Push-Location "$PSScriptRoot" -.. code-block:: python - :caption: f_black.py - :name: f-black-usage - :linenos: +$env:REPO_ROOT = (git rev-parse --show-toplevel) -join "`n" - def options(opt): - opt.load("black") +Pop-Location - def configure(conf): - conf.load("black") +Push-Location "$env:REPO_ROOT" - def build: - files = bld.path.ant_glob("\*\*/\*.py") - bld(features="black", files=files) +.\fox.ps1 waf configure -v -c yes -""" +# Create the bootstrap project +.\fox.ps1 waf bootstrap_library_project -v -c yes -from waflib import Task, TaskGen +# Create a directory for extracted files +$env:LIB_BUILD_DIR = Join-Path -Path "$env:REPO_ROOT" -ChildPath "lib-build" +New-Item -Type Directory "$env:LIB_BUILD_DIR" -Force -class black(Task.Task): # pylint: disable-msg=invalid-name - """Class to implement running the black formatting tool on Python files""" +$tmp = Join-Path -Path "$env:REPO_ROOT" -ChildPath "library-project.tar.gz" - #: str: color in which the command line is displayed in the terminal - color = "BLUE" - vars = ["BLACK_OPTIONS"] - allow_argsfile = False +C:\Windows\System32\tar.exe -jxf $tmp --directory "$env:LIB_BUILD_DIR" - run_str = "${BLACK} ${BLACK_OPTIONS} ${SRC}" +Pop-Location - def keyword(self): - """displayed keyword when black is run""" - return "Formatting" +# Build the library +Push-Location "$env:LIB_BUILD_DIR" +&"$env:LIB_BUILD_DIR\fox.ps1" waf --cwd "$env:LIB_BUILD_DIR" configure build -v -c yes +Pop-Location +Push-Location "$env:REPO_ROOT" +# Copy file that includes the library header and uses a function from it +Copy-item "${env:REPO_ROOT}\tests\variants\lib-build\lib-build_cc-options.yaml" "${env:REPO_ROOT}\conf\cc\cc-options.yaml" +Copy-item "${env:REPO_ROOT}\tests\variants\lib-build\lib-build_main.c" "${env:REPO_ROOT}\src\app\main\main.c" -@TaskGen.feature("black") -def process_black(self): - """creates black tasks for each input file""" - if not getattr(self, "files", None): - self.bld.fatal("No files given.") - for src in self.files: - self.create_task("black", src, cwd=self.path) +# Fix doxygen comment +((Get-Content -path ${env:REPO_ROOT}\src\app\main\main.c -Raw) -replace '@file lib-build_main.c', '@file main.c') | Set-Content -NoNewline -Path ${env:REPO_ROOT}\src\app\main\main.c +# Fix library and header path +((Get-Content -path ${env:REPO_ROOT}\conf\cc\cc-options.yaml -Raw) -replace 'REPO_ROOT', $env:REPO_ROOT) | Set-Content -NoNewline -Path ${env:REPO_ROOT}\conf\cc\cc-options.yaml -def options(opt): - """Passing options to black""" - opt.add_option( - "--black-option", - action="append", - default=[], - dest="BLACK_OPTION", - help="Options for black", - ) +# Configure the application with new options, that include the library paths etc. +.\fox.ps1 waf configure -v -c yes +# Build the application including the library +.\fox.ps1 waf build_bin -v -c yes -def configure(conf): - """configuration step of the black tool - - - searches for the program ``black`` - - applies configured options - """ - conf.find_program("black", var="BLACK") - conf.env.append_unique("BLACK_OPTIONS", conf.options.BLACK_OPTION) +Pop-Location diff --git a/tests/variants/lib-build/lib-build_cc-options.yaml b/tests/variants/lib-build/lib-build_cc-options.yaml index 4b1823bb..f21f13bd 100644 --- a/tests/variants/lib-build/lib-build_cc-options.yaml +++ b/tests/variants/lib-build/lib-build_cc-options.yaml @@ -1,4 +1,4 @@ -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -44,12 +44,12 @@ INCLUDE_PATHS: win32: - - REPO_ROOT\libbuild\src + - REPO_ROOT\lib-build\src linux: LIBRARY_PATHS: win32: - - REPO_ROOT\libbuild\build + - REPO_ROOT\lib-build\build linux: LIBRARIES: @@ -75,7 +75,7 @@ CFLAGS: - --emit_warnings_as_errors # additional flags that are ONLY applied to foxBMS sources foxbms: - - -Ooff + - -O0 - -DASSERT_LEVEL=0 - --issue_remarks - --strict_ansi @@ -102,6 +102,7 @@ LINKFLAGS: - --scan_libraries HEXGENFLAGS: + - --emit_warnings_as_errors - --memwidth=32 - --tektronix - -image diff --git a/tests/variants/lib-build/lib-build_main.c b/tests/variants/lib-build/lib-build_main.c index c52e390b..704f3b76 100644 --- a/tests/variants/lib-build/lib-build_main.c +++ b/tests/variants/lib-build/lib-build_main.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file lib-build_main.c * @author foxBMS Team * @date 2020-10-06 (date of creation) - * @updated 2023-10-12 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup GENERAL * @prefix TODO * @@ -58,20 +58,28 @@ #include "main.h" /* clang-format on */ +#include "HL_adc.h" +#include "HL_crc.h" +#include "HL_etpwm.h" #include "HL_gio.h" +#include "HL_het.h" +#include "HL_pinmux.h" #include "HL_sys_core.h" #include "adc.h" #include "checksum.h" -#include "contactor.h" #include "diag.h" #include "dma.h" +#include "foxmath.h" +#include "i2c.h" +#include "led.h" #include "libproject-example.h" #include "master_info.h" -#include "meas.h" #include "os.h" +#include "pwm.h" #include "spi.h" -#include "sps.h" + +#include /*========== Macros and Definitions =========================================*/ @@ -84,39 +92,50 @@ /*========== Static Function Implementations ================================*/ /*========== Extern Function Implementations ================================*/ -int main(void) { +#ifndef UNITY_UNIT_TEST +int main(void) +#else +int unit_test_main(void) +#endif +{ SUPER_Function(0, 1); MINFO_SetResetSource(getResetSource()); /* Get reset source and clear respective flags */ _enable_IRQ_interrupt_(); + muxInit(); gioInit(); SPI_Initialize(); - CONT_Initialize(); - SPS_Initialize(); - MEAS_Initialize(); + adcInit(); + hetInit(); + etpwmInit(); + crcInit(); + LED_SetDebugLed(); + I2C_Initialize(); DMA_Initialize(); + PWM_Initialize(); DIAG_Initialize(&diag_device); + MATH_StartupSelfTest(); + const STD_RETURN_TYPE_e checkTimeHasPassedSelfTestReturnValue = OS_CheckTimeHasPassedSelfTest(); + FAS_ASSERT(checkTimeHasPassedSelfTestReturnValue == STD_OK); OS_InitializeOperatingSystem(); if (OS_INIT_PRE_OS != os_boot) { - while (true) { - /* Could not create Queues, Mutexes, Events and Tasks - do not boot further from this point on*/ - } + /* Could not create Queues, Mutexes, Events and Tasks do not boot further from this point on */ + FAS_ASSERT(FAS_TRAP); } if (STD_OK != CHK_ValidateChecksum()) { if (DIAG_HANDLER_RETURN_OK != DIAG_Handler(DIAG_ID_FLASHCHECKSUM, DIAG_EVENT_NOT_OK, DIAG_SYSTEM, 0u)) { - while (true) { - /* Could not validate checksum do not boot further from this point on */ - } + /* Could not validate checksum do not boot further from this point on */ + FAS_ASSERT(FAS_TRAP); } } os_schedulerStartTime = OS_GetTickCount(); OS_StartScheduler(); - while (true) { - } + /* we must never get here; there is no way to determine the exit state of this program, + * but for the sake of correctness we exit with an error code */ + return 1; } /*========== Externalized Static Function Implementations (Unit Test) =======*/ diff --git a/tools/README.md b/tools/README.md index 2cb169c0..0493913b 100644 --- a/tools/README.md +++ b/tools/README.md @@ -1,18 +1,14 @@ -# Tools +# `tools` Directory Description -This directory contains a set of tools that support the development or usage -of foxBMS 2. - -| Script | Purpose | -|:----------------------|:----------------------------------------------------------------------------------------------| -| ``crc/*`` | Various [CRC](https://en.wikipedia.org/wiki/Cyclic_redundancy_check) helpers and scripts. | -| ``dbc/`` | foxBMS 2 data base CAN. | -| ``debugger/*`` | Configuration files for debugger settings. | -| ``gui/*`` | foxBMS 2 GUI. | -| ``ide/vscode/*`` | Configuration file templates for VS Code settings. | -| ``utils/*`` | Helper scripts for batch and shell script. | -| ``vendor/ceedling/*`` | Vendored ceedling files. | -| ``waf-tools/*`` | Tools required for the build toolchain that do not come bundled with the default waf binary. | -| ``waf`` | The build tool binary. | -| ``waf-pubkey.asc`` | This is the public key that is used by waf to sign the waf binary ``waf``. | -| ``waf-verify-sig.py`` | Script to verify the signature of the waf binary. | +| Directory Name | Long Name | Content Description | +| ---------------- | --------------------------- | ------------------------------------------------------------ | +| `crc` | Cyclic Redundancy Check | Various Cyclic Redundancy Check helpers and scripts | +| `dbc` | CAN database | CAN database for foxBMS 2 | +| `debugger` | Debugger | Configuration files for debugger settings | +| `deploy` | Deploy | Scripts for deploying the generated documentation internally | +| `ide` | Editor/IDEs | Configuration file templates for VS Code settings | +| `precharge` | Precharge | Script to help dimensioning the precharge resistor | +| `utils` | Utils | Helper scripts for batch and shell script | +| `vendor` | Vendor | Vendored, unchanged files | +| `waf-tools` | Waf tools | Waf tools that are not part of vendored Waf | +| `waf` | Waf | The build tool binary | diff --git a/tools/crc/README.md b/tools/crc/README.md index 461c8311..fbee1940 100644 --- a/tools/crc/README.md +++ b/tools/crc/README.md @@ -4,25 +4,6 @@ These Jupyter notebooks help to generate the CRC-functions as fast table implementations that are used by certain monitoring ICs. -## Installation - -In order to use these notebooks you need to have Jupyter notebooks and crcmod -installed. They come with the conda environment shipped in this repository. - -## Usage - -Activate your conda environment and then go to this directory (this makes -finding the notebooks easier). Then start Jupyter notebook with: - - Jupyter notebook - -Alternatively just execute `crc.bat` which is a wrapper script for jupyter. -This should open your browser with a Jupyter notebook instance. If not, observe -console output, there should be a link to open. - -In the jupyter notebook browser you can select a notebook and then open it. -When you click on restart and run all cells it will execute the whole notebook. - ## CRC-1 - 0x48F For details of the CRC polynomial see [here](./crc-10_0x48f.md). @@ -30,3 +11,12 @@ For details of the CRC polynomial see [here](./crc-10_0x48f.md). ## CRC-15 - 0xC599 For details of the CRC polynomial see [here](./crc-15_0xc599.md). + +## TODO + +Make + +- `crc8-0xa6.ipynb` and +- `crc16-0x9eb2h.ipynb` + +MarkDown files. diff --git a/tools/crc/build-crc-snippets.bat b/tools/crc/build-crc-snippets.bat deleted file mode 100644 index 30d5dc72..00000000 --- a/tools/crc/build-crc-snippets.bat +++ /dev/null @@ -1,74 +0,0 @@ -@REM Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -@REM All rights reserved. -@REM -@REM SPDX-License-Identifier: BSD-3-Clause -@REM -@REM Redistribution and use in source and binary forms, with or without -@REM modification, are permitted provided that the following conditions are met: -@REM -@REM 1. Redistributions of source code must retain the above copyright notice, this -@REM list of conditions and the following disclaimer. -@REM -@REM 2. Redistributions in binary form must reproduce the above copyright notice, -@REM this list of conditions and the following disclaimer in the documentation -@REM and/or other materials provided with the distribution. -@REM -@REM 3. Neither the name of the copyright holder nor the names of its -@REM contributors may be used to endorse or promote products derived from -@REM this software without specific prior written permission. -@REM -@REM THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -@REM AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -@REM IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -@REM DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -@REM FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -@REM DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -@REM SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -@REM CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -@REM OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -@REM OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -@REM -@REM We kindly request you to use one or more of the following phrases to refer to -@REM foxBMS in your hardware, software, documentation or advertising materials: -@REM -@REM - "This product uses parts of foxBMS®" -@REM - "This product includes parts of foxBMS®" -@REM - "This product is derived from foxBMS®" - -@SETLOCAL EnableExtensions EnableDelayedExpansion - -@PUSHD %~dp0 - -@FOR /F "usebackq tokens=*" %%A in ("%~dp0\..\..\conf\env\paths_win32.txt") do @( - @IF EXIST %%A ( - @CALL SET "NewPath=%%NewPath%%;%%A" - ) -) - -@IF DEFINED NewPath ( - @SET "PATH=%NewPath:~1%;%PATH%" -) - -@gcc %~dp0crc-15_0xc599.c -o%~dp0crc-15_0xc599.exe -@IF %ERRORLEVEL% neq 0 ( - @POPD - @EXIT /b 1 -) -@gcc %~dp0crc-10_0x48f.c -o%~dp0crc-10_0x48f.exe -@IF %ERRORLEVEL% neq 0 ( - @POPD - @EXIT /b 1 -) -@ECHO Running '%~dp0crc-15_0xc599' -@%~dp0crc-15_0xc599.exe -@IF %ERRORLEVEL% neq 0 ( - @POPD - @EXIT /b 1 -) -@ECHO. -@ECHO Running '%~dp0crc-10_0x48f' -@%~dp0crc-10_0x48f.exe -@IF %ERRORLEVEL% neq 0 ( - @POPD - @EXIT /b 1 -) diff --git a/tools/crc/crc-10_0x48f.c b/tools/crc/crc-10_0x48f.c index a2ed7849..eefa5ab7 100644 --- a/tools/crc/crc-10_0x48f.c +++ b/tools/crc/crc-10_0x48f.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file crc-10_0x48f.c * @author foxBMS Team * @date 2019-12-12 (date of creation) - * @updated 2023-09-05 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix NONE * diff --git a/tools/crc/crc-10_0x48f.md b/tools/crc/crc-10_0x48f.md index 0c577c42..2b4c7c16 100644 --- a/tools/crc/crc-10_0x48f.md +++ b/tools/crc/crc-10_0x48f.md @@ -2,13 +2,16 @@ - P(x) = x10 + x7 + x3 + x2 + x1 + x0 - Resulting bit sequence in the polynomial is ``0x48F`` - ``` + + ```text 10 9 8 7 6 5 4 3 2 1 0 x^ x^ x^ x^ x^ x^ x^ x^ x^ x^ x^ (bin) 1 0 0 1 0 0 0 1 1 1 1 (hex) 0x48F ``` + - The resulting CRC-10 - 0x48F lookup table is then (generated by `crc_init.py --polynomial 0x48F --width 10`): + ```c /* precomputed CRC-10 Table */ static const unsigned int crc10Table[256] = { @@ -33,5 +36,6 @@ 0x12Fu, 0x1A0u, 0x031u, 0x0BEu, }; ``` + - A C-implementation to precompute this table is available in [crc-10_0x48f.c](./crc-10_0x48f.c) diff --git a/tools/crc/crc-15_0xc599.c b/tools/crc/crc-15_0xc599.c index d06c34ad..198ec753 100644 --- a/tools/crc/crc-15_0xc599.c +++ b/tools/crc/crc-15_0xc599.c @@ -1,6 +1,6 @@ /** * - * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. + * @copyright © 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -33,9 +33,9 @@ * We kindly request you to use one or more of the following phrases to refer to * foxBMS in your hardware, software, documentation or advertising materials: * - * - ″This product uses parts of foxBMS®″ - * - ″This product includes parts of foxBMS®″ - * - ″This product is derived from foxBMS®″ + * - "This product uses parts of foxBMS®" + * - "This product includes parts of foxBMS®" + * - "This product is derived from foxBMS®" * */ @@ -43,8 +43,8 @@ * @file crc-15_0xc599.c * @author foxBMS Team * @date 2019-12-12 (date of creation) - * @updated 2023-09-05 (date of last update) - * @version v1.6.0 + * @updated 2024-08-08 (date of last update) + * @version v1.7.0 * @ingroup DRIVERS * @prefix NONE * diff --git a/tools/crc/crc-15_0xc599.md b/tools/crc/crc-15_0xc599.md index 5b167a0b..2ff6f844 100644 --- a/tools/crc/crc-15_0xc599.md +++ b/tools/crc/crc-15_0xc599.md @@ -2,12 +2,14 @@ - P(x) = x15 + x14 + x10 + x8 + x7 + x4 + x3 + x0 - Resulting bit sequence in the polynomial is ``0xC599`` - ``` + + ```text 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 x^ x^ x^ x^ x^ x^ x^ x^ x^ x^ x^ x^ x^ x^ x^ x^ (bin) 1 1 0 0 0 1 0 1 1 0 0 1 1 0 0 1 (hex) 0xC599 ``` + - The resulting CRC-15 - 0xC599 lookup table is then (generated by `crc_init.py --polynomial 0xC599 --width 15`): ```c @@ -35,5 +37,6 @@ 0x7492u, 0x5368u, 0x16F1u, 0x1DC3u, 0x585Au, 0x0BA7u, 0x4E3Eu, 0x450Cu, 0x0095u, }; ``` + - A C-implementation to precompute this table is available in [crc-15_0xc599.c](./crc-15_0xc599.c) diff --git a/tools/crc/crc.bat b/tools/crc/crc.bat deleted file mode 100644 index f5d30172..00000000 --- a/tools/crc/crc.bat +++ /dev/null @@ -1,58 +0,0 @@ -@REM Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -@REM All rights reserved. -@REM -@REM SPDX-License-Identifier: BSD-3-Clause -@REM -@REM Redistribution and use in source and binary forms, with or without -@REM modification, are permitted provided that the following conditions are met: -@REM -@REM 1. Redistributions of source code must retain the above copyright notice, this -@REM list of conditions and the following disclaimer. -@REM -@REM 2. Redistributions in binary form must reproduce the above copyright notice, -@REM this list of conditions and the following disclaimer in the documentation -@REM and/or other materials provided with the distribution. -@REM -@REM 3. Neither the name of the copyright holder nor the names of its -@REM contributors may be used to endorse or promote products derived from -@REM this software without specific prior written permission. -@REM -@REM THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -@REM AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -@REM IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -@REM DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -@REM FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -@REM DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -@REM SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -@REM CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -@REM OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -@REM OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -@REM -@REM We kindly request you to use one or more of the following phrases to refer to -@REM foxBMS in your hardware, software, documentation or advertising materials: -@REM -@REM - "This product uses parts of foxBMS®" -@REM - "This product includes parts of foxBMS®" -@REM - "This product is derived from foxBMS®" - -@SETLOCAL EnableExtensions EnableDelayedExpansion -@SET CONDA_BASE_ENVIRONMENT_ACTIVATE_SCRIPT="" -@CALL %~dp0\..\utils\cmd\find_base_conda.bat - -@IF %CONDA_BASE_ENVIRONMENT_ACTIVATE_SCRIPT%=="" ( - @EXIT /b 1 -) - -@CALL %CONDA_BASE_ENVIRONMENT_ACTIVATE_SCRIPT% %CONDA_DEVELOPMENT_ENVIRONMENT_NAME% - -@PUSHD %~dp0 -@SET PYEXE=python -@WHERE %PYEXE% 1>NUL 2>NUL -@IF %ERRORLEVEL% neq 0 SET PYEXE=py -@START "JUPYTER" /d %~dp0 /b cmd.exe /c jupyter notebook -@IF %ERRORLEVEL% NEQ 0 ( - @EXIT /b %ERRORLEVEL% -) ELSE ( - @conda deactivate -) -@POPD diff --git a/tools/crc/crc16-0x9eb2h.ipynb b/tools/crc/crc16-0x9eb2h.ipynb index c0669d2a..ab1e0515 100644 --- a/tools/crc/crc16-0x9eb2h.ipynb +++ b/tools/crc/crc16-0x9eb2h.ipynb @@ -1,5 +1,5 @@ { - "cells": [ + "cells": [ { "cell_type": "markdown", "metadata": {}, diff --git a/tools/crc/crc8-0xa6.ipynb b/tools/crc/crc8-0xa6.ipynb index 8f8a4cb2..903b6919 100644 --- a/tools/crc/crc8-0xa6.ipynb +++ b/tools/crc/crc8-0xa6.ipynb @@ -1,5 +1,5 @@ { - "cells": [ + "cells": [ { "cell_type": "markdown", "metadata": {}, diff --git a/tools/crc/crc_init.py b/tools/crc/crc_init.py old mode 100644 new mode 100755 index 35cab057..fff249ca --- a/tools/crc/crc_init.py +++ b/tools/crc/crc_init.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -150,8 +149,8 @@ def main(): logging.basicConfig(level=logging.ERROR) polynomial = int(args.polynomial, 16) width = int(args.width) - logging.debug(f"polynomial: {polynomial:#0x}") - logging.debug(f"width: {width}") + logging.debug("polynomial: %s", f"{polynomial:#0x}") + logging.debug("width: %s", width) table = precalculate_crc_table(polynomial, width) logging.debug("C code:") generate_c_table(table, width) diff --git a/tests/env/packages/env_test_arpeggio.py b/tools/crc/wscript old mode 100644 new mode 100755 similarity index 66% rename from tests/env/packages/env_test_arpeggio.py rename to tools/crc/wscript index 35c461a3..8df07e8d --- a/tests/env/packages/env_test_arpeggio.py +++ b/tools/crc/wscript @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -38,37 +37,31 @@ # - "This product includes parts of foxBMS®" # - "This product is derived from foxBMS®" -"""Testing 'arpeggio' package""" +"""Build documentation code to ensure that the documentation is correct""" -import argparse -import logging +# pylint: disable=missing-function-docstring -# package to test -import arpeggio +from waflib.Build import BuildContext +from waflib.Configure import ConfigurationContext +from waflib.Options import OptionsContext +from waflib.Tools import waf_unit_test -def main(): - """Testing 'zlib' package""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() +def options(opt: OptionsContext): + opt.top = "." + opt.load("compiler_c") - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - logging.debug(f"{arpeggio.__name__} {arpeggio.__version__}") +def configure(cnf: ConfigurationContext): + cnf.options.check_c_compiler = "gcc" + cnf.load("compiler_c") + cnf.env.append_unique("CFLAGS", ["-Wall", "-Wextra"]) + cnf.check_cc(fragment="int main() {}\n", execute=True) + cnf.load("waf_unit_test") -if __name__ == "__main__": - main() +def build(bld: BuildContext): + bld(features="c cprogram test", source="crc-10_0x48f.c", target="crc-10_0x48f") + bld(features="c cprogram test", source="crc-15_0xc599.c", target="crc-15_0xc599") + bld.add_post_fun(waf_unit_test.summary) + bld.options.clear_failed_tests = True diff --git a/tools/dbc/README.md b/tools/dbc/README.md new file mode 100644 index 00000000..8a119001 --- /dev/null +++ b/tools/dbc/README.md @@ -0,0 +1,17 @@ +# CAN Message Definitions for foxBMS 2 + +## Adding new Messages and Signals + +- Always adapt the sym-file first and then export the dbc-file. +- Generally, if the messages/signals are from a third party import these + verbatim. + - In the rare cases, where the message names need to be change, the message + names shall be suffixed (e.g., message ``Abc`` would then be + ``Abc_String0``). + - Signal names shall never be changed in third-party messages. + - Third-party DBC files shall be included in ``tools/dbc/third-party``. + See [tools/dbc/third-party/README.md](./third-party/README.md) for + more information. +- foxBMS messages shall use the prefix ``f_``. +- foxBMS message and signal names shall use a PascalCase naming schema. +- Try to always assign either a type/enum or unit to the signals. diff --git a/tools/dbc/foxbms.dbc b/tools/dbc/foxbms.dbc index ba49486c..1e0a9c82 100644 --- a/tools/dbc/foxbms.dbc +++ b/tools/dbc/foxbms.dbc @@ -2,971 +2,1675 @@ VERSION "" NS_ : + CM_ + BA_DEF_ + BA_ + VAL_ + BA_DEF_DEF_ + SIG_VALTYPE_ BS_: BU_: Vector__XXX -BO_ 546 foxBMS_PackValues: 8 Vector__XXX -SG_ foxBMS_packCurrent : 41|18@0- (0.01,0) [-1310.72|1310.71] "A" Vector__XXX -SG_ foxBMS_batteryVoltage : 7|14@0+ (0.1,0) [0|1638.3] "V" Vector__XXX -SG_ foxBMS_busVoltage : 9|14@0+ (0.1,0) [0|1638.3] "V" Vector__XXX -SG_ foxBMS_packPower : 27|18@0- (0.01,0) [-1310.72|1310.71] "kW" Vector__XXX - -BO_ 548 foxBMS_LimitValues: 8 Vector__XXX -SG_ foxBMS_maxChargeCurrent : 11|12@0+ (0.25,0) [0|1023.75] "A" Vector__XXX -SG_ foxBMS_maxDischargeCurrent : 7|12@0+ (0.25,0) [0|1023.75] "A" Vector__XXX -SG_ foxBMS_maxChargePower : 35|12@0+ (0.2,0) [0|819] "kW" Vector__XXX -SG_ foxBMS_maxDischargePower : 31|12@0+ (0.1,0) [0|409.5] "kW" Vector__XXX -SG_ foxBMS_maxBatteryVoltage : 55|8@0+ (4,0) [0|1020] "V" Vector__XXX -SG_ foxBMS_minBatteryVoltage : 63|8@0+ (4,0) [0|1020] "V" Vector__XXX - - -BO_ 547 foxBMS_MinimumMaximumValues: 8 Vector__XXX -SG_ foxBMS_minimumCellVoltage : 10|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ foxBMS_maximumCellVoltage : 7|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ foxBMS_maximumCellTemp : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ foxBMS_minimumCellTemp : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ foxBMS_inletTemperature : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ foxBMS_outletTemperature : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX - - -BO_ 640 foxBMS_StringValuesP0: 8 Vector__XXX -SG_ foxBMS_StringValuesP0_Mux M : 7|3@0+ (1,0) [0|0] "" Vector__XXX -SG_ foxBMS_String0Current : 19|18@0- (0.01,0) [-1310.72|1310.71] "A" Vector__XXX -SG_ foxBMS_String0Voltage : 4|17@0+ (0.01,0) [0|1310.71] "V" Vector__XXX -SG_ foxBMS_String0Power : 33|18@0- (0.01,0) [-1310.72|1310.71] "kW" Vector__XXX - - -BO_ 643 foxBMS_StringValuesP1: 8 Vector__XXX -SG_ foxBMS_StringValuesP1_Mux M : 7|4@0+ (1,0) [0|0] "" Vector__XXX -SG_ foxBMS_String0EnergyCount : 15|32@0- (1,0) [-2147483648|2147483647] "Wh" Vector__XXX - - -BO_ 549 foxBMS_PackStateEstimation: 8 Vector__XXX -SG_ foxBMS_packSoc : 7|14@0+ (0.01,0) [0|163.83] "%" Vector__XXX -SG_ foxBMS_packSoe : 9|14@0+ (0.01,0) [0|163.83] "%" Vector__XXX -SG_ foxBMS_packEnergy : 47|24@0+ (0.01,0) [0|167772.15] "kWh" Vector__XXX -SG_ foxBMS_packSoh : 27|12@0+ (0.025,0) [0|102.375] "%" Vector__XXX - - -BO_ 576 foxBMS_CellVoltages: 8 Vector__XXX -SG_ foxBMS_CellVoltages_Mux M : 7|8@0+ (1,0) [0|0] "" Vector__XXX -SG_ cellVoltage_000_invalidFlag m0 : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_001_invalidFlag m0 : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_002_invalidFlag m0 : 14|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_003_invalidFlag m0 : 15|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_000 m0 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_001 m0 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_002 m0 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_003 m0 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_004_invalidFlag m1 : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_005_invalidFlag m1 : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_006_invalidFlag m1 : 14|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_007_invalidFlag m1 : 15|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_004 m1 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_005 m1 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_006 m1 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_007 m1 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_008_invalidFlag m2 : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_009_invalidFlag m2 : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_010_invalidFlag m2 : 14|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_011_invalidFlag m2 : 15|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_008 m2 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_009 m2 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_010 m2 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_011 m2 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_012_invalidFlag m3 : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_013_invalidFlag m3 : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_014_invalidFlag m3 : 14|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_015_invalidFlag m3 : 15|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_012 m3 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_013 m3 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_014 m3 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_015 m3 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_016_invalidFlag m4 : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_017_invalidFlag m4 : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_018_invalidFlag m4 : 14|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_019_invalidFlag m4 : 15|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_016 m4 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_017 m4 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_018 m4 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_019 m4 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_020_invalidFlag m5 : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_021_invalidFlag m5 : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_022_invalidFlag m5 : 14|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_023_invalidFlag m5 : 15|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_020 m5 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_021 m5 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_022 m5 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_023 m5 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_024_invalidFlag m6 : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_025_invalidFlag m6 : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_026_invalidFlag m6 : 14|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_027_invalidFlag m6 : 15|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_024 m6 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_025 m6 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_026 m6 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_027 m6 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_028_invalidFlag m7 : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_029_invalidFlag m7 : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_030_invalidFlag m7 : 14|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_031_invalidFlag m7 : 15|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_028 m7 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_029 m7 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_030 m7 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_031 m7 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_032_invalidFlag m8 : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_033_invalidFlag m8 : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_034_invalidFlag m8 : 14|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_035_invalidFlag m8 : 15|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_032 m8 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_033 m8 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_034 m8 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_035 m8 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_036_invalidFlag m9 : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_037_invalidFlag m9 : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_038_invalidFlag m9 : 14|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_039_invalidFlag m9 : 15|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_036 m9 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_037 m9 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_038 m9 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_039 m9 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_040_invalidFlag m10 : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_041_invalidFlag m10 : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_042_invalidFlag m10 : 14|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_043_invalidFlag m10 : 15|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_040 m10 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_041 m10 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_042 m10 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_043 m10 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_044_invalidFlag m11 : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_045_invalidFlag m11 : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_046_invalidFlag m11 : 14|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_047_invalidFlag m11 : 15|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_044 m11 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_045 m11 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_046 m11 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_047 m11 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_048_invalidFlag m12 : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_049_invalidFlag m12 : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_050_invalidFlag m12 : 14|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_051_invalidFlag m12 : 15|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_048 m12 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_049 m12 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_050 m12 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_051 m12 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_052_invalidFlag m13 : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_053_invalidFlag m13 : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_054_invalidFlag m13 : 14|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_055_invalidFlag m13 : 15|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_052 m13 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_053 m13 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_054 m13 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_055 m13 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_056_invalidFlag m14 : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_057_invalidFlag m14 : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_058_invalidFlag m14 : 14|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_059_invalidFlag m14 : 15|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_056 m14 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_057 m14 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_058 m14 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_059 m14 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_060_invalidFlag m15 : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_061_invalidFlag m15 : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_062_invalidFlag m15 : 14|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_063_invalidFlag m15 : 15|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_060 m15 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_061 m15 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_062 m15 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_063 m15 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_064_invalidFlag m16 : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_065_invalidFlag m16 : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_066_invalidFlag m16 : 14|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_067_invalidFlag m16 : 15|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_064 m16 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_065 m16 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_066 m16 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_067 m16 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_068_invalidFlag m17 : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_069_invalidFlag m17 : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_070_invalidFlag m17 : 14|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_071_invalidFlag m17 : 15|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_068 m17 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_069 m17 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_070 m17 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_071 m17 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_072_invalidFlag m18 : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_073_invalidFlag m18 : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_074_invalidFlag m18 : 14|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_075_invalidFlag m18 : 15|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_072 m18 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_073 m18 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_074 m18 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_075 m18 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_076_invalidFlag m19 : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_077_invalidFlag m19 : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_078_invalidFlag m19 : 14|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_079_invalidFlag m19 : 15|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_076 m19 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_077 m19 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_078 m19 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_079 m19 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_080_invalidFlag m20 : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_081_invalidFlag m20 : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_082_invalidFlag m20 : 14|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_083_invalidFlag m20 : 15|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_080 m20 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_081 m20 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_082 m20 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_083 m20 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_084_invalidFlag m21 : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_085_invalidFlag m21 : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_086_invalidFlag m21 : 14|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_087_invalidFlag m21 : 15|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_084 m21 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_085 m21 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_086 m21 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_087 m21 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_088_invalidFlag m22 : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_089_invalidFlag m22 : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_090_invalidFlag m22 : 14|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_091_invalidFlag m22 : 15|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_088 m22 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_089 m22 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_090 m22 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_091 m22 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_092_invalidFlag m23 : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_093_invalidFlag m23 : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_094_invalidFlag m23 : 14|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_095_invalidFlag m23 : 15|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_092 m23 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_093 m23 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_094 m23 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_095 m23 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_096_invalidFlag m24 : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_097_invalidFlag m24 : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_098_invalidFlag m24 : 14|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_099_invalidFlag m24 : 15|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_096 m24 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_097 m24 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_098 m24 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_099 m24 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_100_invalidFlag m25 : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_101_invalidFlag m25 : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_102_invalidFlag m25 : 14|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_103_invalidFlag m25 : 15|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_100 m25 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_101 m25 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_102 m25 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_103 m25 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_104_invalidFlag m26 : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_105_invalidFlag m26 : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_106_invalidFlag m26 : 14|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_107_invalidFlag m26 : 15|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_104 m26 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_105 m26 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_106 m26 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_107 m26 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_108_invalidFlag m27 : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_109_invalidFlag m27 : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_110_invalidFlag m27 : 14|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_111_invalidFlag m27 : 15|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_108 m27 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_109 m27 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_110 m27 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_111 m27 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_112_invalidFlag m28 : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_113_invalidFlag m28 : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_114_invalidFlag m28 : 14|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_115_invalidFlag m28 : 15|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_112 m28 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_113 m28 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_114 m28 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_115 m28 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_116_invalidFlag m29 : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_117_invalidFlag m29 : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_118_invalidFlag m29 : 14|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_119_invalidFlag m29 : 15|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_116 m29 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_117 m29 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_118 m29 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_119 m29 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_120_invalidFlag m30 : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_121_invalidFlag m30 : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_122_invalidFlag m30 : 14|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_123_invalidFlag m30 : 15|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_120 m30 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_121 m30 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_122 m30 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_123 m30 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_124_invalidFlag m31 : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_125_invalidFlag m31 : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_126_invalidFlag m31 : 14|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_127_invalidFlag m31 : 15|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_124 m31 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_125 m31 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_126 m31 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_127 m31 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_128_invalidFlag m32 : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_129_invalidFlag m32 : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_130_invalidFlag m32 : 14|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_131_invalidFlag m32 : 15|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_128 m32 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_129 m32 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_130 m32 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_131 m32 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_132_invalidFlag m33 : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_133_invalidFlag m33 : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_134_invalidFlag m33 : 14|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_135_invalidFlag m33 : 15|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_132 m33 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_133 m33 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_134 m33 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_135 m33 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_136_invalidFlag m34 : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_137_invalidFlag m34 : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_138_invalidFlag m34 : 14|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_139_invalidFlag m34 : 15|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_136 m34 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_137 m34 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_138 m34 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_139 m34 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_140_invalidFlag m35 : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_141_invalidFlag m35 : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_142_invalidFlag m35 : 14|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_143_invalidFlag m35 : 15|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_140 m35 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_141 m35 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_142 m35 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_143 m35 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_144_invalidFlag m36 : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_145_invalidFlag m36 : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_146_invalidFlag m36 : 14|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_147_invalidFlag m36 : 15|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_144 m36 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_145 m36 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_146 m36 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_147 m36 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_148_invalidFlag m37 : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_149_invalidFlag m37 : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_150_invalidFlag m37 : 14|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_151_invalidFlag m37 : 15|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_148 m37 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_149 m37 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_150 m37 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_151 m37 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_152_invalidFlag m38 : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_153_invalidFlag m38 : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_154_invalidFlag m38 : 14|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_155_invalidFlag m38 : 15|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_152 m38 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_153 m38 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_154 m38 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_155 m38 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_156_invalidFlag m39 : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_157_invalidFlag m39 : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_158_invalidFlag m39 : 14|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_159_invalidFlag m39 : 15|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_156 m39 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_157 m39 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_158 m39 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_159 m39 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_160_invalidFlag m40 : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_161_invalidFlag m40 : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_162_invalidFlag m40 : 14|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_163_invalidFlag m40 : 15|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_160 m40 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_161 m40 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_162 m40 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_163 m40 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_164_invalidFlag m41 : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_165_invalidFlag m41 : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_166_invalidFlag m41 : 14|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_167_invalidFlag m41 : 15|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_164 m41 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_165 m41 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_166 m41 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_167 m41 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_168_invalidFlag m42 : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_169_invalidFlag m42 : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_170_invalidFlag m42 : 14|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_171_invalidFlag m42 : 15|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_168 m42 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_169 m42 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_170 m42 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_171 m42 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_172_invalidFlag m43 : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_173_invalidFlag m43 : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_174_invalidFlag m43 : 14|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_175_invalidFlag m43 : 15|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_172 m43 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_173 m43 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_174 m43 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_175 m43 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_176_invalidFlag m44 : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_177_invalidFlag m44 : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_178_invalidFlag m44 : 14|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_179_invalidFlag m44 : 15|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_176 m44 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_177 m44 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_178 m44 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_179 m44 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_180_invalidFlag m45 : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_181_invalidFlag m45 : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_182_invalidFlag m45 : 14|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_183_invalidFlag m45 : 15|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_180 m45 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_181 m45 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_182 m45 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_183 m45 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_184_invalidFlag m46 : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_185_invalidFlag m46 : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_186_invalidFlag m46 : 14|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_187_invalidFlag m46 : 15|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_184 m46 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_185 m46 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_186 m46 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_187 m46 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_188_invalidFlag m47 : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_189_invalidFlag m47 : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_190_invalidFlag m47 : 14|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_191_invalidFlag m47 : 15|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_188 m47 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_189 m47 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_190 m47 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_191 m47 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_192_invalidFlag m48 : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_193_invalidFlag m48 : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_194_invalidFlag m48 : 14|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_195_invalidFlag m48 : 15|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_192 m48 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_193 m48 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_194 m48 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_195 m48 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_196_invalidFlag m49 : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_197_invalidFlag m49 : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_198_invalidFlag m49 : 14|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_199_invalidFlag m49 : 15|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_196 m49 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_197 m49 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_198 m49 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_199 m49 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_200_invalidFlag m50 : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_201_invalidFlag m50 : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_202_invalidFlag m50 : 14|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_203_invalidFlag m50 : 15|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_200 m50 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_201 m50 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_202 m50 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_203 m50 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_204_invalidFlag m51 : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_205_invalidFlag m51 : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_206_invalidFlag m51 : 14|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_207_invalidFlag m51 : 15|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_204 m51 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_205 m51 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_206 m51 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_207 m51 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_208_invalidFlag m52 : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_209_invalidFlag m52 : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_210_invalidFlag m52 : 14|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_211_invalidFlag m52 : 15|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_208 m52 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_209 m52 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_210 m52 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_211 m52 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_212_invalidFlag m53 : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_213_invalidFlag m53 : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_214_invalidFlag m53 : 14|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_215_invalidFlag m53 : 15|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellVoltage_212 m53 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_213 m53 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_214 m53 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ cellVoltage_215 m53 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX - - -BO_ 592 foxBMS_CellTemperatures: 8 Vector__XXX -SG_ foxBMS_CellTemperatures_Mux M : 7|8@0+ (1,0) [0|0] "" Vector__XXX -SG_ cellTemperature_000_invalidFlag m0 : 8|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_001_invalidFlag m0 : 9|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_002_invalidFlag m0 : 10|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_003_invalidFlag m0 : 11|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_004_invalidFlag m0 : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_005_invalidFlag m0 : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_000 m0 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_001 m0 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_002 m0 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_003 m0 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_004 m0 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_005 m0 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_006_invalidFlag m1 : 8|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_007_invalidFlag m1 : 9|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_008_invalidFlag m1 : 10|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_009_invalidFlag m1 : 11|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_010_invalidFlag m1 : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_011_invalidFlag m1 : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_006 m1 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_007 m1 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_008 m1 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_009 m1 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_010 m1 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_011 m1 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_012_invalidFlag m2 : 8|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_013_invalidFlag m2 : 9|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_014_invalidFlag m2 : 10|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_015_invalidFlag m2 : 11|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_016_invalidFlag m2 : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_017_invalidFlag m2 : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_012 m2 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_013 m2 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_014 m2 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_015 m2 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_016 m2 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_017 m2 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_018_invalidFlag m3 : 8|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_019_invalidFlag m3 : 9|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_020_invalidFlag m3 : 10|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_021_invalidFlag m3 : 11|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_022_invalidFlag m3 : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_023_invalidFlag m3 : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_018 m3 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_019 m3 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_020 m3 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_021 m3 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_022 m3 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_023 m3 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_024_invalidFlag m4 : 8|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_025_invalidFlag m4 : 9|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_026_invalidFlag m4 : 10|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_027_invalidFlag m4 : 11|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_028_invalidFlag m4 : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_029_invalidFlag m4 : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_024 m4 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_025 m4 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_026 m4 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_027 m4 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_028 m4 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_029 m4 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_030_invalidFlag m5 : 8|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_031_invalidFlag m5 : 9|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_032_invalidFlag m5 : 10|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_033_invalidFlag m5 : 11|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_034_invalidFlag m5 : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_035_invalidFlag m5 : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_030 m5 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_031 m5 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_032 m5 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_033 m5 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_034 m5 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_035 m5 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_036_invalidFlag m6 : 8|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_037_invalidFlag m6 : 9|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_038_invalidFlag m6 : 10|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_039_invalidFlag m6 : 11|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_040_invalidFlag m6 : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_041_invalidFlag m6 : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_036 m6 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_037 m6 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_038 m6 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_039 m6 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_040 m6 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_041 m6 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_042_invalidFlag m7 : 8|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_043_invalidFlag m7 : 9|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_044_invalidFlag m7 : 10|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_045_invalidFlag m7 : 11|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_046_invalidFlag m7 : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_047_invalidFlag m7 : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_042 m7 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_043 m7 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_044 m7 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_045 m7 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_046 m7 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_047 m7 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_048_invalidFlag m8 : 8|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_049_invalidFlag m8 : 9|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_050_invalidFlag m8 : 10|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_051_invalidFlag m8 : 11|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_052_invalidFlag m8 : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_053_invalidFlag m8 : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_048 m8 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_049 m8 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_050 m8 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_051 m8 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_052 m8 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_053 m8 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_054_invalidFlag m9 : 8|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_055_invalidFlag m9 : 9|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_056_invalidFlag m9 : 10|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_057_invalidFlag m9 : 11|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_058_invalidFlag m9 : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_059_invalidFlag m9 : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_054 m9 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_055 m9 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_056 m9 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_057 m9 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_058 m9 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_059 m9 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_060_invalidFlag m10 : 8|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_061_invalidFlag m10 : 9|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_062_invalidFlag m10 : 10|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_063_invalidFlag m10 : 11|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_064_invalidFlag m10 : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_065_invalidFlag m10 : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_060 m10 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_061 m10 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_062 m10 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_063 m10 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_064 m10 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_065 m10 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_066_invalidFlag m11 : 8|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_067_invalidFlag m11 : 9|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_068_invalidFlag m11 : 10|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_069_invalidFlag m11 : 11|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_070_invalidFlag m11 : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_071_invalidFlag m11 : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_066 m11 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_067 m11 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_068 m11 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_069 m11 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_070 m11 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_071 m11 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_072_invalidFlag m12 : 8|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_073_invalidFlag m12 : 9|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_074_invalidFlag m12 : 10|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_075_invalidFlag m12 : 11|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_076_invalidFlag m12 : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_077_invalidFlag m12 : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_072 m12 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_073 m12 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_074 m12 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_075 m12 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_076 m12 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_077 m12 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_078_invalidFlag m13 : 8|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_079_invalidFlag m13 : 9|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_080_invalidFlag m13 : 10|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_081_invalidFlag m13 : 11|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_082_invalidFlag m13 : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_083_invalidFlag m13 : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_078 m13 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_079 m13 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_080 m13 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_081 m13 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_082 m13 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_083 m13 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_084_invalidFlag m14 : 8|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_085_invalidFlag m14 : 9|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_086_invalidFlag m14 : 10|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_087_invalidFlag m14 : 11|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_088_invalidFlag m14 : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_089_invalidFlag m14 : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_084 m14 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_085 m14 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_086 m14 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_087 m14 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_088 m14 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_089 m14 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_090_invalidFlag m15 : 8|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_091_invalidFlag m15 : 9|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_092_invalidFlag m15 : 10|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_093_invalidFlag m15 : 11|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_094_invalidFlag m15 : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_095_invalidFlag m15 : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_090 m15 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_091 m15 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_092 m15 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_093 m15 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_094 m15 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_095 m15 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_096_invalidFlag m16 : 8|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_097_invalidFlag m16 : 9|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_098_invalidFlag m16 : 10|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_099_invalidFlag m16 : 11|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_100_invalidFlag m16 : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_101_invalidFlag m16 : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_096 m16 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_097 m16 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_098 m16 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_099 m16 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_100 m16 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_101 m16 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_102_invalidFlag m17 : 8|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_103_invalidFlag m17 : 9|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_104_invalidFlag m17 : 10|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_105_invalidFlag m17 : 11|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_106_invalidFlag m17 : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_107_invalidFlag m17 : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_102 m17 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_103 m17 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_104 m17 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_105 m17 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_106 m17 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_107 m17 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_108_invalidFlag m18 : 8|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_109_invalidFlag m18 : 9|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_110_invalidFlag m18 : 10|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_111_invalidFlag m18 : 11|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_112_invalidFlag m18 : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_113_invalidFlag m18 : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_108 m18 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_109 m18 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_110 m18 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_111 m18 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_112 m18 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_113 m18 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_114_invalidFlag m19 : 8|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_115_invalidFlag m19 : 9|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_116_invalidFlag m19 : 10|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_117_invalidFlag m19 : 11|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_118_invalidFlag m19 : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_119_invalidFlag m19 : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_114 m19 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_115 m19 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_116 m19 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_117 m19 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_118 m19 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_119 m19 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_120_invalidFlag m20 : 8|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_121_invalidFlag m20 : 9|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_122_invalidFlag m20 : 10|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_123_invalidFlag m20 : 11|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_124_invalidFlag m20 : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_125_invalidFlag m20 : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_120 m20 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_121 m20 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_122 m20 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_123 m20 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_124 m20 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_125 m20 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_126_invalidFlag m21 : 8|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_127_invalidFlag m21 : 9|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_128_invalidFlag m21 : 10|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_129_invalidFlag m21 : 11|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_130_invalidFlag m21 : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_131_invalidFlag m21 : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_126 m21 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_127 m21 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_128 m21 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_129 m21 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_130 m21 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_131 m21 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_132_invalidFlag m22 : 8|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_133_invalidFlag m22 : 9|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_134_invalidFlag m22 : 10|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_135_invalidFlag m22 : 11|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_136_invalidFlag m22 : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_137_invalidFlag m22 : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_132 m22 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_133 m22 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_134 m22 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_135 m22 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_136 m22 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_137 m22 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_138_invalidFlag m23 : 8|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_139_invalidFlag m23 : 9|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_140_invalidFlag m23 : 10|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_141_invalidFlag m23 : 11|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_142_invalidFlag m23 : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_143_invalidFlag m23 : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_138 m23 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_139 m23 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_140 m23 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_141 m23 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_142 m23 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_143 m23 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_144_invalidFlag m24 : 8|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_145_invalidFlag m24 : 9|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_146_invalidFlag m24 : 10|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_147_invalidFlag m24 : 11|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_148_invalidFlag m24 : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_149_invalidFlag m24 : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_144 m24 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_145 m24 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_146 m24 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_147 m24 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_148 m24 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_149 m24 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_150_invalidFlag m25 : 8|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_151_invalidFlag m25 : 9|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_152_invalidFlag m25 : 10|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_153_invalidFlag m25 : 11|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_154_invalidFlag m25 : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_155_invalidFlag m25 : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_150 m25 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_151 m25 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_152 m25 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_153 m25 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_154 m25 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_155 m25 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_156_invalidFlag m26 : 8|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_157_invalidFlag m26 : 9|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_158_invalidFlag m26 : 10|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_159_invalidFlag m26 : 11|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_160_invalidFlag m26 : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_161_invalidFlag m26 : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_156 m26 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_157 m26 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_158 m26 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_159 m26 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_160 m26 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_161 m26 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_162_invalidFlag m27 : 8|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_163_invalidFlag m27 : 9|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_164_invalidFlag m27 : 10|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_165_invalidFlag m27 : 11|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_166_invalidFlag m27 : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_167_invalidFlag m27 : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_162 m27 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_163 m27 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_164 m27 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_165 m27 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_166 m27 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_167 m27 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_168_invalidFlag m28 : 8|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_169_invalidFlag m28 : 9|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_170_invalidFlag m28 : 10|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_171_invalidFlag m28 : 11|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_172_invalidFlag m28 : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_173_invalidFlag m28 : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_168 m28 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_169 m28 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_170 m28 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_171 m28 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_172 m28 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_173 m28 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_174_invalidFlag m29 : 8|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_175_invalidFlag m29 : 9|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_176_invalidFlag m29 : 10|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_177_invalidFlag m29 : 11|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_178_invalidFlag m29 : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_179_invalidFlag m29 : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ cellTemperature_174 m29 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_175 m29 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_176 m29 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_177 m29 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_178 m29 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX -SG_ cellTemperature_179 m29 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX - - -BO_ 560 foxBMS_BmsStateRequest: 8 Vector__XXX -SG_ foxBMS_modeRequest : 1|2@0+ (1,0) [0|3] "" Vector__XXX -SG_ foxBMS_activateBalancing : 8|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ foxBMS_balancingThreshold : 23|8@0+ (1,0) [0|255] "mV" Vector__XXX -SG_ foxBMS_externallyPrecharged : 3|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ foxBMS_resetFlags : 2|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ foxBMS_chargerConnected : 4|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ foxBMS_disableInsulationMon : 5|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ foxBMS_heaterOverride_ON : 6|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ foxBMS_heaterOverride_OFF : 7|1@0+ (1,0) [0|1] "" Vector__XXX - - -BO_ 544 foxBMS_BmsState: 8 Vector__XXX -SG_ foxBMS_State : 3|4@0+ (1,0) [0|15] "" Vector__XXX -SG_ BMS_nrOfConnectedStrings : 7|4@0+ (1,0) [0|15] "" Vector__XXX -SG_ foxBMS_generalError : 10|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ foxBMS_generalWarning : 9|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ foxBMS_Error_dieTemperatureMCU : 18|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ foxBMS_Error_OvertempPCB : 19|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ foxBMS_Error_UndertempPCB : 20|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ foxBMS_Error_PrechargeVolt : 16|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ foxBMS_Error_PrechargeCurrent : 17|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ foxBMS_heaterState : 14|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ foxBMS_coolingState : 15|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ foxBMS_insulationMonitoring : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ foxBMS_chargingComplete : 8|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ foxBMS_EmergencyShutoff : 11|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ foxBMS_MainFuseBlown : 21|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ foxBMS_insulationResistance : 63|8@0+ (10,0) [0|2550] "kOhm" Vector__XXX -SG_ foxBMS_Error_Interlock : 22|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ foxBMS_NrDeactivatedStrings : 51|4@0+ (1,0) [0|15] "" Vector__XXX -SG_ foxBMS_Error_Insulation : 23|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ foxBMS_Error_Cantiming : 24|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ foxBMS_Error_PackOvercurr_Charge : 25|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ foxBMS_Error_PackOvercur_Dischrg : 26|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ foxBMS_SysMonError : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ foxBMS_alertFlag : 27|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ foxBMS_NvramCrcError : 28|1@0+ (1,0) [0|1] "" Vector__XXX - - -BO_ 545 foxBMS_StringState: 8 Vector__XXX -SG_ foxBMS_StringState_Mux M : 3|4@0+ (1,0) [0|0] "" Vector__XXX -SG_ String0_stringConnected : 4|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ String0_balancing_active : 5|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ String0_Err_overtemp_charge : 8|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ String0_Err_undertemp_charge : 9|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ String0_Err_overtemp_discharge : 10|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ String0_Err_undertemp_discharge : 11|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ String0_Err_Overcurrent_charge : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ String0_Err_Overcurre_discharge : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ String0_Err_Overvoltage : 14|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ String0_Err_Undervoltage : 15|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ String0_Err_deep_discharge : 7|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ String0_Err_CS_currentMeas : 43|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ String0_Err_positiveContactor : 32|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ String0_Err_openWire : 49|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ String0_openWireNumber : 63|8@0+ (1,0) [0|255] "" Vector__XXX -SG_ String0_Err_plaus_cell_volt : 52|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ String0_Err_plaus_cell_temp : 51|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ String0_Err_plaus_string_volt : 53|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ String0_Err_slave_hardware : 34|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ String0_Err_dsyChainBase_Comm : 35|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ String0_Err_dsyChainPrim_CRC : 37|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ String0_Err_dsyChainRedun_Comm : 36|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ String0_Err_dsyChainRedun_CRC : 38|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ String0_Err_dsyPrim_voltMeasOor : 39|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ String0_Err_dsyRedun_voltMeasOor : 40|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ String0_Err_dsyPrim_tempMeasOor : 41|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ String0_Err_dsyRedun_tempMeasOor : 42|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ String0_Err_CS_coulombCountMeas : 44|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ String0_Err_CS_energyCountMeas : 45|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ String0_Err_plaus_volt_spread : 55|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ String0_Err_plaus_temp_spread : 54|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ String0_fuseBlown : 6|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ String0_Warning_overvoltage_MOL : 22|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ String0_Warning_undervoltage_MOL : 23|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ String0_Wrng_chargeOverTemp_MOL : 16|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ String0_Wrng_dischrgOverTemp_MOL : 18|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ String0_Wrng_chargeUnderTemp_MOL : 17|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ String0_Wrng_dischrgUnderTmp_MOL : 19|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ String0_Wrng_chargeOverCur_MOL : 20|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ String0_Wrng_dischargOverCur_MOL : 21|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ String0_Wrng_chargeOverTemp_RSL : 24|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ String0_Wrng_chargeUnderTemp_RSL : 25|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ String0_Wrng_dischrgOverTemp_RSL : 26|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ String0_Wrng_dischrgUnderTmp_RSL : 27|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ String0_Wrng_chargeOverCur_RSL : 28|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ String0_Wrng_dischargOverCur_RSL : 29|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ String0_Wrng_overvoltage_RSL : 30|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ String0_Wrng_undervoltage_RSL : 31|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ String0_Err_negativeContactor : 33|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ String0_Err_CS_voltage1Meas : 46|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ String0_Err_CS_voltage2Meas : 47|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ String0_Err_CS_voltage3Meas : 48|1@0+ (1,0) [0|1] "" Vector__XXX - - -BO_ 641 foxBMS_StringMinMaxValues: 8 Vector__XXX -SG_ foxBMS_StringMinMaxValues_Mux M : 3|4@0+ (1,0) [0|0] "" Vector__XXX -SG_ String0_minimumCellVoltage : 18|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ String0_maximumCellVoltage : 15|13@0+ (1,0) [0|8191] "mV" Vector__XXX -SG_ String0_maximumCellTemperature : 37|9@0- (0.5,0) [-128|127.5] "degC" Vector__XXX -SG_ String0_minimumCellTemperature : 44|9@0- (0.5,0) [-128|127.5] "degC" Vector__XXX - - -BO_ 642 foxBMS_StringStateEstimation: 8 Vector__XXX -SG_ foxBMS_StringStateEstimation_Mux M : 7|4@0+ (1,0) [0|0] "" Vector__XXX -SG_ String0_minimumSOC : 3|9@0+ (0.25,0) [0|127.75] "%" Vector__XXX -SG_ String0_averageSOC : 10|9@0+ (0.25,0) [0|127.5] "%" Vector__XXX -SG_ String0_maximumSOC : 17|9@0+ (0.25,0) [0|63.75] "%" Vector__XXX -SG_ String0_SOE : 24|9@0+ (0.25,0) [0|127.5] "%" Vector__XXX -SG_ String0_Energy_kWh : 54|15@0+ (0.01,0) [0|327.67] "kWh" Vector__XXX -SG_ String0_SOH : 47|9@0+ (0.25,0) [0|127.5] "%" Vector__XXX - - -BO_ 512 foxBMS_Debug: 8 Vector__XXX -SG_ foxBMS_Debug_Mux M : 7|8@0+ (1,0) [0|0] "" Vector__XXX +BO_ 640 AFE_CellTemperatures: 8 Vector__XXX +SG_ AFE_CellTemperatures_Mux M : 7|8@0+ (1,0) [0|0] "" Vector__XXX +SG_ CellTemperature_000_invalidFlag m0 : 8|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_001_invalidFlag m0 : 9|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_002_invalidFlag m0 : 10|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_003_invalidFlag m0 : 11|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_004_invalidFlag m0 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_005_invalidFlag m0 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_000 m0 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_001 m0 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_002 m0 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_003 m0 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_004 m0 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_005 m0 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_006_invalidFlag m1 : 8|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_007_invalidFlag m1 : 9|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_008_invalidFlag m1 : 10|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_009_invalidFlag m1 : 11|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_010_invalidFlag m1 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_011_invalidFlag m1 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_006 m1 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_007 m1 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_008 m1 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_009 m1 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_010 m1 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_011 m1 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_012_invalidFlag m2 : 8|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_013_invalidFlag m2 : 9|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_014_invalidFlag m2 : 10|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_015_invalidFlag m2 : 11|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_016_invalidFlag m2 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_017_invalidFlag m2 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_012 m2 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_013 m2 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_014 m2 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_015 m2 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_016 m2 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_017 m2 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_018_invalidFlag m3 : 8|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_019_invalidFlag m3 : 9|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_020_invalidFlag m3 : 10|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_021_invalidFlag m3 : 11|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_022_invalidFlag m3 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_023_invalidFlag m3 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_018 m3 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_019 m3 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_020 m3 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_021 m3 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_022 m3 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_023 m3 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_024_invalidFlag m4 : 8|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_025_invalidFlag m4 : 9|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_026_invalidFlag m4 : 10|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_027_invalidFlag m4 : 11|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_028_invalidFlag m4 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_029_invalidFlag m4 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_024 m4 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_025 m4 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_026 m4 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_027 m4 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_028 m4 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_029 m4 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_030_invalidFlag m5 : 8|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_031_invalidFlag m5 : 9|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_032_invalidFlag m5 : 10|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_033_invalidFlag m5 : 11|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_034_invalidFlag m5 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_035_invalidFlag m5 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_030 m5 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_031 m5 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_032 m5 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_033 m5 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_034 m5 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_035 m5 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_036_invalidFlag m6 : 8|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_037_invalidFlag m6 : 9|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_038_invalidFlag m6 : 10|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_039_invalidFlag m6 : 11|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_040_invalidFlag m6 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_041_invalidFlag m6 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_036 m6 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_037 m6 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_038 m6 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_039 m6 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_040 m6 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_041 m6 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_042_invalidFlag m7 : 8|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_043_invalidFlag m7 : 9|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_044_invalidFlag m7 : 10|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_045_invalidFlag m7 : 11|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_046_invalidFlag m7 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_047_invalidFlag m7 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_042 m7 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_043 m7 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_044 m7 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_045 m7 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_046 m7 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_047 m7 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_048_invalidFlag m8 : 8|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_049_invalidFlag m8 : 9|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_050_invalidFlag m8 : 10|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_051_invalidFlag m8 : 11|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_052_invalidFlag m8 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_053_invalidFlag m8 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_048 m8 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_049 m8 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_050 m8 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_051 m8 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_052 m8 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_053 m8 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_054_invalidFlag m9 : 8|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_055_invalidFlag m9 : 9|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_056_invalidFlag m9 : 10|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_057_invalidFlag m9 : 11|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_058_invalidFlag m9 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_059_invalidFlag m9 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_054 m9 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_055 m9 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_056 m9 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_057 m9 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_058 m9 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_059 m9 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_060_invalidFlag m10 : 8|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_061_invalidFlag m10 : 9|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_062_invalidFlag m10 : 10|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_063_invalidFlag m10 : 11|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_064_invalidFlag m10 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_065_invalidFlag m10 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_060 m10 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_061 m10 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_062 m10 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_063 m10 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_064 m10 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_065 m10 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_066_invalidFlag m11 : 8|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_067_invalidFlag m11 : 9|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_068_invalidFlag m11 : 10|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_069_invalidFlag m11 : 11|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_070_invalidFlag m11 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_071_invalidFlag m11 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_066 m11 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_067 m11 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_068 m11 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_069 m11 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_070 m11 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_071 m11 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_072_invalidFlag m12 : 8|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_073_invalidFlag m12 : 9|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_074_invalidFlag m12 : 10|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_075_invalidFlag m12 : 11|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_076_invalidFlag m12 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_077_invalidFlag m12 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_072 m12 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_073 m12 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_074 m12 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_075 m12 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_076 m12 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_077 m12 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_078_invalidFlag m13 : 8|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_079_invalidFlag m13 : 9|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_080_invalidFlag m13 : 10|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_081_invalidFlag m13 : 11|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_082_invalidFlag m13 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_083_invalidFlag m13 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_078 m13 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_079 m13 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_080 m13 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_081 m13 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_082 m13 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_083 m13 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_084_invalidFlag m14 : 8|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_085_invalidFlag m14 : 9|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_086_invalidFlag m14 : 10|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_087_invalidFlag m14 : 11|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_088_invalidFlag m14 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_089_invalidFlag m14 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_084 m14 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_085 m14 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_086 m14 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_087 m14 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_088 m14 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_089 m14 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_090_invalidFlag m15 : 8|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_091_invalidFlag m15 : 9|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_092_invalidFlag m15 : 10|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_093_invalidFlag m15 : 11|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_094_invalidFlag m15 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_095_invalidFlag m15 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_090 m15 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_091 m15 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_092 m15 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_093 m15 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_094 m15 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_095 m15 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_096_invalidFlag m16 : 8|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_097_invalidFlag m16 : 9|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_098_invalidFlag m16 : 10|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_099_invalidFlag m16 : 11|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_100_invalidFlag m16 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_101_invalidFlag m16 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_096 m16 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_097 m16 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_098 m16 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_099 m16 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_100 m16 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_101 m16 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_102_invalidFlag m17 : 8|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_103_invalidFlag m17 : 9|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_104_invalidFlag m17 : 10|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_105_invalidFlag m17 : 11|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_106_invalidFlag m17 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_107_invalidFlag m17 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_102 m17 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_103 m17 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_104 m17 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_105 m17 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_106 m17 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_107 m17 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_108_invalidFlag m18 : 8|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_109_invalidFlag m18 : 9|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_110_invalidFlag m18 : 10|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_111_invalidFlag m18 : 11|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_112_invalidFlag m18 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_113_invalidFlag m18 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_108 m18 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_109 m18 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_110 m18 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_111 m18 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_112 m18 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_113 m18 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_114_invalidFlag m19 : 8|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_115_invalidFlag m19 : 9|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_116_invalidFlag m19 : 10|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_117_invalidFlag m19 : 11|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_118_invalidFlag m19 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_119_invalidFlag m19 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_114 m19 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_115 m19 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_116 m19 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_117 m19 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_118 m19 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_119 m19 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_120_invalidFlag m20 : 8|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_121_invalidFlag m20 : 9|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_122_invalidFlag m20 : 10|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_123_invalidFlag m20 : 11|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_124_invalidFlag m20 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_125_invalidFlag m20 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_120 m20 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_121 m20 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_122 m20 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_123 m20 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_124 m20 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_125 m20 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_126_invalidFlag m21 : 8|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_127_invalidFlag m21 : 9|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_128_invalidFlag m21 : 10|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_129_invalidFlag m21 : 11|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_130_invalidFlag m21 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_131_invalidFlag m21 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_126 m21 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_127 m21 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_128 m21 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_129 m21 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_130 m21 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_131 m21 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_132_invalidFlag m22 : 8|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_133_invalidFlag m22 : 9|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_134_invalidFlag m22 : 10|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_135_invalidFlag m22 : 11|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_136_invalidFlag m22 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_137_invalidFlag m22 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_132 m22 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_133 m22 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_134 m22 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_135 m22 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_136 m22 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_137 m22 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_138_invalidFlag m23 : 8|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_139_invalidFlag m23 : 9|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_140_invalidFlag m23 : 10|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_141_invalidFlag m23 : 11|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_142_invalidFlag m23 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_143_invalidFlag m23 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_138 m23 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_139 m23 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_140 m23 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_141 m23 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_142 m23 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_143 m23 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_144_invalidFlag m24 : 8|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_145_invalidFlag m24 : 9|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_146_invalidFlag m24 : 10|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_147_invalidFlag m24 : 11|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_148_invalidFlag m24 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_149_invalidFlag m24 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_144 m24 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_145 m24 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_146 m24 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_147 m24 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_148 m24 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_149 m24 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_150_invalidFlag m25 : 8|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_151_invalidFlag m25 : 9|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_152_invalidFlag m25 : 10|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_153_invalidFlag m25 : 11|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_154_invalidFlag m25 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_155_invalidFlag m25 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_150 m25 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_151 m25 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_152 m25 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_153 m25 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_154 m25 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_155 m25 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_156_invalidFlag m26 : 8|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_157_invalidFlag m26 : 9|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_158_invalidFlag m26 : 10|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_159_invalidFlag m26 : 11|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_160_invalidFlag m26 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_161_invalidFlag m26 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_156 m26 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_157 m26 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_158 m26 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_159 m26 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_160 m26 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_161 m26 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_162_invalidFlag m27 : 8|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_163_invalidFlag m27 : 9|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_164_invalidFlag m27 : 10|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_165_invalidFlag m27 : 11|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_166_invalidFlag m27 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_167_invalidFlag m27 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_162 m27 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_163 m27 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_164 m27 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_165 m27 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_166 m27 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_167 m27 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_168_invalidFlag m28 : 8|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_169_invalidFlag m28 : 9|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_170_invalidFlag m28 : 10|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_171_invalidFlag m28 : 11|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_172_invalidFlag m28 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_173_invalidFlag m28 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_168 m28 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_169 m28 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_170 m28 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_171 m28 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_172 m28 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_173 m28 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_174_invalidFlag m29 : 8|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_175_invalidFlag m29 : 9|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_176_invalidFlag m29 : 10|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_177_invalidFlag m29 : 11|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_178_invalidFlag m29 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_179_invalidFlag m29 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_174 m29 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_175 m29 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_176 m29 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_177 m29 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_178 m29 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_179 m29 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX + +BO_ 624 AFE_CellVoltages: 8 Vector__XXX +SG_ AFE_CellVoltages_Mux M : 7|8@0+ (1,0) [0|0] "" Vector__XXX +SG_ CellVoltage_000_invalidFlag m0 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_001_invalidFlag m0 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_002_invalidFlag m0 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_003_invalidFlag m0 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_000 m0 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_001 m0 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_002 m0 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_003 m0 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_004_invalidFlag m1 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_005_invalidFlag m1 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_006_invalidFlag m1 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_007_invalidFlag m1 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_004 m1 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_005 m1 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_006 m1 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_007 m1 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_008_invalidFlag m2 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_009_invalidFlag m2 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_010_invalidFlag m2 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_011_invalidFlag m2 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_008 m2 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_009 m2 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_010 m2 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_011 m2 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_012_invalidFlag m3 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_013_invalidFlag m3 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_014_invalidFlag m3 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_015_invalidFlag m3 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_012 m3 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_013 m3 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_014 m3 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_015 m3 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_016_invalidFlag m4 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_017_invalidFlag m4 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_018_invalidFlag m4 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_019_invalidFlag m4 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_016 m4 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_017 m4 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_018 m4 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_019 m4 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_020_invalidFlag m5 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_021_invalidFlag m5 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_022_invalidFlag m5 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_023_invalidFlag m5 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_020 m5 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_021 m5 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_022 m5 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_023 m5 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_024_invalidFlag m6 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_025_invalidFlag m6 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_026_invalidFlag m6 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_027_invalidFlag m6 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_024 m6 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_025 m6 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_026 m6 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_027 m6 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_028_invalidFlag m7 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_029_invalidFlag m7 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_030_invalidFlag m7 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_031_invalidFlag m7 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_028 m7 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_029 m7 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_030 m7 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_031 m7 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_032_invalidFlag m8 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_033_invalidFlag m8 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_034_invalidFlag m8 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_035_invalidFlag m8 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_032 m8 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_033 m8 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_034 m8 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_035 m8 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_036_invalidFlag m9 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_037_invalidFlag m9 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_038_invalidFlag m9 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_039_invalidFlag m9 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_036 m9 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_037 m9 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_038 m9 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_039 m9 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_040_invalidFlag m10 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_041_invalidFlag m10 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_042_invalidFlag m10 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_043_invalidFlag m10 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_040 m10 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_041 m10 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_042 m10 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_043 m10 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_044_invalidFlag m11 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_045_invalidFlag m11 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_046_invalidFlag m11 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_047_invalidFlag m11 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_044 m11 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_045 m11 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_046 m11 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_047 m11 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_048_invalidFlag m12 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_049_invalidFlag m12 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_050_invalidFlag m12 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_051_invalidFlag m12 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_048 m12 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_049 m12 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_050 m12 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_051 m12 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_052_invalidFlag m13 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_053_invalidFlag m13 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_054_invalidFlag m13 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_055_invalidFlag m13 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_052 m13 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_053 m13 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_054 m13 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_055 m13 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_056_invalidFlag m14 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_057_invalidFlag m14 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_058_invalidFlag m14 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_059_invalidFlag m14 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_056 m14 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_057 m14 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_058 m14 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_059 m14 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_060_invalidFlag m15 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_061_invalidFlag m15 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_062_invalidFlag m15 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_063_invalidFlag m15 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_060 m15 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_061 m15 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_062 m15 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_063 m15 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_064_invalidFlag m16 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_065_invalidFlag m16 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_066_invalidFlag m16 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_067_invalidFlag m16 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_064 m16 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_065 m16 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_066 m16 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_067 m16 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_068_invalidFlag m17 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_069_invalidFlag m17 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_070_invalidFlag m17 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_071_invalidFlag m17 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_068 m17 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_069 m17 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_070 m17 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_071 m17 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_072_invalidFlag m18 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_073_invalidFlag m18 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_074_invalidFlag m18 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_075_invalidFlag m18 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_072 m18 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_073 m18 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_074 m18 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_075 m18 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_076_invalidFlag m19 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_077_invalidFlag m19 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_078_invalidFlag m19 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_079_invalidFlag m19 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_076 m19 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_077 m19 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_078 m19 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_079 m19 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_080_invalidFlag m20 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_081_invalidFlag m20 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_082_invalidFlag m20 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_083_invalidFlag m20 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_080 m20 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_081 m20 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_082 m20 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_083 m20 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_084_invalidFlag m21 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_085_invalidFlag m21 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_086_invalidFlag m21 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_087_invalidFlag m21 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_084 m21 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_085 m21 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_086 m21 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_087 m21 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_088_invalidFlag m22 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_089_invalidFlag m22 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_090_invalidFlag m22 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_091_invalidFlag m22 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_088 m22 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_089 m22 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_090 m22 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_091 m22 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_092_invalidFlag m23 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_093_invalidFlag m23 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_094_invalidFlag m23 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_095_invalidFlag m23 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_092 m23 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_093 m23 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_094 m23 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_095 m23 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_096_invalidFlag m24 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_097_invalidFlag m24 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_098_invalidFlag m24 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_099_invalidFlag m24 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_096 m24 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_097 m24 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_098 m24 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_099 m24 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_100_invalidFlag m25 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_101_invalidFlag m25 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_102_invalidFlag m25 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_103_invalidFlag m25 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_100 m25 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_101 m25 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_102 m25 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_103 m25 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_104_invalidFlag m26 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_105_invalidFlag m26 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_106_invalidFlag m26 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_107_invalidFlag m26 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_104 m26 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_105 m26 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_106 m26 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_107 m26 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_108_invalidFlag m27 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_109_invalidFlag m27 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_110_invalidFlag m27 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_111_invalidFlag m27 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_108 m27 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_109 m27 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_110 m27 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_111 m27 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_112_invalidFlag m28 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_113_invalidFlag m28 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_114_invalidFlag m28 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_115_invalidFlag m28 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_112 m28 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_113 m28 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_114 m28 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_115 m28 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_116_invalidFlag m29 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_117_invalidFlag m29 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_118_invalidFlag m29 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_119_invalidFlag m29 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_116 m29 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_117 m29 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_118 m29 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_119 m29 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_120_invalidFlag m30 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_121_invalidFlag m30 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_122_invalidFlag m30 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_123_invalidFlag m30 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_120 m30 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_121 m30 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_122 m30 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_123 m30 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_124_invalidFlag m31 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_125_invalidFlag m31 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_126_invalidFlag m31 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_127_invalidFlag m31 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_124 m31 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_125 m31 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_126 m31 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_127 m31 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_128_invalidFlag m32 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_129_invalidFlag m32 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_130_invalidFlag m32 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_131_invalidFlag m32 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_128 m32 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_129 m32 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_130 m32 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_131 m32 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_132_invalidFlag m33 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_133_invalidFlag m33 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_134_invalidFlag m33 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_135_invalidFlag m33 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_132 m33 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_133 m33 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_134 m33 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_135 m33 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_136_invalidFlag m34 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_137_invalidFlag m34 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_138_invalidFlag m34 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_139_invalidFlag m34 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_136 m34 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_137 m34 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_138 m34 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_139 m34 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_140_invalidFlag m35 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_141_invalidFlag m35 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_142_invalidFlag m35 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_143_invalidFlag m35 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_140 m35 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_141 m35 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_142 m35 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_143 m35 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_144_invalidFlag m36 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_145_invalidFlag m36 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_146_invalidFlag m36 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_147_invalidFlag m36 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_144 m36 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_145 m36 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_146 m36 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_147 m36 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_148_invalidFlag m37 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_149_invalidFlag m37 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_150_invalidFlag m37 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_151_invalidFlag m37 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_148 m37 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_149 m37 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_150 m37 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_151 m37 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_152_invalidFlag m38 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_153_invalidFlag m38 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_154_invalidFlag m38 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_155_invalidFlag m38 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_152 m38 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_153 m38 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_154 m38 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_155 m38 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_156_invalidFlag m39 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_157_invalidFlag m39 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_158_invalidFlag m39 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_159_invalidFlag m39 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_156 m39 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_157 m39 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_158 m39 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_159 m39 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_160_invalidFlag m40 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_161_invalidFlag m40 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_162_invalidFlag m40 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_163_invalidFlag m40 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_160 m40 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_161 m40 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_162 m40 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_163 m40 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_164_invalidFlag m41 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_165_invalidFlag m41 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_166_invalidFlag m41 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_167_invalidFlag m41 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_164 m41 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_165 m41 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_166 m41 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_167 m41 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_168_invalidFlag m42 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_169_invalidFlag m42 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_170_invalidFlag m42 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_171_invalidFlag m42 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_168 m42 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_169 m42 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_170 m42 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_171 m42 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_172_invalidFlag m43 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_173_invalidFlag m43 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_174_invalidFlag m43 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_175_invalidFlag m43 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_172 m43 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_173 m43 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_174 m43 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_175 m43 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_176_invalidFlag m44 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_177_invalidFlag m44 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_178_invalidFlag m44 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_179_invalidFlag m44 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_176 m44 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_177 m44 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_178 m44 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_179 m44 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_180_invalidFlag m45 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_181_invalidFlag m45 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_182_invalidFlag m45 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_183_invalidFlag m45 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_180 m45 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_181 m45 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_182 m45 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_183 m45 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_184_invalidFlag m46 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_185_invalidFlag m46 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_186_invalidFlag m46 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_187_invalidFlag m46 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_184 m46 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_185 m46 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_186 m46 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_187 m46 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_188_invalidFlag m47 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_189_invalidFlag m47 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_190_invalidFlag m47 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_191_invalidFlag m47 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_188 m47 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_189 m47 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_190 m47 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_191 m47 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_192_invalidFlag m48 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_193_invalidFlag m48 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_194_invalidFlag m48 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_195_invalidFlag m48 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_192 m48 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_193 m48 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_194 m48 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_195 m48 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_196_invalidFlag m49 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_197_invalidFlag m49 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_198_invalidFlag m49 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_199_invalidFlag m49 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_196 m49 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_197 m49 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_198 m49 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_199 m49 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_200_invalidFlag m50 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_201_invalidFlag m50 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_202_invalidFlag m50 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_203_invalidFlag m50 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_200 m50 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_201 m50 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_202 m50 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_203 m50 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_204_invalidFlag m51 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_205_invalidFlag m51 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_206_invalidFlag m51 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_207_invalidFlag m51 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_204 m51 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_205 m51 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_206 m51 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_207 m51 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_208_invalidFlag m52 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_209_invalidFlag m52 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_210_invalidFlag m52 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_211_invalidFlag m52 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_208 m52 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_209 m52 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_210 m52 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_211 m52 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_212_invalidFlag m53 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_213_invalidFlag m53 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_214_invalidFlag m53 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_215_invalidFlag m53 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_212 m53 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_213 m53 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_214 m53 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_215 m53 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX + +BO_ 964 BAS_AerosolSensor: 8 Vector__XXX +SG_ ParticulateMatterConcentration : 7|16@0+ (1,0) [0|65535] "" Vector__XXX +SG_ LowPowerModeWakeUpThreshold : 23|16@0+ (1,0) [0|65535] "" Vector__XXX +SG_ SensorStatus : 34|3@0+ (1,0) [0|7] "" Vector__XXX +SG_ SensorFaults : 39|5@0+ (1,0) [0|31] "" Vector__XXX +SG_ RollingCounter : 42|3@0+ (1,0) [0|7] "" Vector__XXX +SG_ CrcCheckCode : 63|8@0+ (1,0) [0|255] "" Vector__XXX + +BO_ 544 f_BmsState: 8 Vector__XXX +SG_ BmsState : 3|4@0+ (1,0) [0|15] "" Vector__XXX +SG_ NumberOfConnectedStrings : 7|4@0+ (1,0) [0|15] "" Vector__XXX +SG_ GeneralError : 10|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ GeneralWarning : 9|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ McuDieTemperatureError : 18|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ BmsMasterPcbOvertemperatureError : 19|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ BmsMasterPcbUndertemperatureErro : 20|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ PrechargeVoltageError : 16|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ PrechargeCurrentError : 17|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ HeaterState : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CoolingState : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ InsulationMonitoring : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ ChargingComplete : 8|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ EmergencyShutoff : 11|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ MainFuseBlown : 21|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ InterlockState : 22|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ NumberOfDeactivatedStrings : 51|4@0+ (1,0) [0|15] "" Vector__XXX +SG_ InsulationError : 23|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CanTimingError : 24|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ PackOvercurrentChargeError : 25|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ PackOvercurrentDischargeError : 26|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ SystemMonitoringError : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ AlertFlag : 27|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ NvramCrcError : 28|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ InsulationResistance : 63|8@0+ (200,0) [0|51000] "kOhm" Vector__XXX + +BO_ 545 f_BmsStateDetails: 8 Vector__XXX +SG_ TimingViolationEngineTask : 0|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ TimingViolation1msTask : 1|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ TimingViolation10msTask : 2|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ TimingViolation100msTask : 3|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ TimingViolation100msAlgoTask : 4|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ TimingViolation10msTaskRecorded : 10|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ TimingViolation100msTaskRecorded : 11|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ TimingViolation100msAlgoTaskReco : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ TimingViolationEngineTaskRecorde : 8|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ TimingViolation1msTaskRecorded : 9|1@0+ (1,0) [0|1] "" Vector__XXX + +BO_ 528 f_BmsStateRequest: 8 Vector__XXX +SG_ RequestBmsMode : 1|2@0+ (1,0) [0|3] "" Vector__XXX +SG_ ActivateBalancing : 8|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ SetBalancingThreshold : 23|8@0+ (1,0) [0|255] "mV" Vector__XXX +SG_ IndicatePrechargeType : 3|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ ResetPersistentFlags : 2|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ ChargerConnected : 4|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ DisableInsulationMonitoring : 5|1@0+ (1,0) [0|1] "" Vector__XXX + +BO_ 608 f_CellTemperatures: 8 Vector__XXX +SG_ f_CellTemperatures_Mux M : 7|8@0+ (1,0) [0|0] "" Vector__XXX +SG_ CellTemperature_000_invalidFlag m0 : 8|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_001_invalidFlag m0 : 9|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_002_invalidFlag m0 : 10|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_003_invalidFlag m0 : 11|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_004_invalidFlag m0 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_005_invalidFlag m0 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_000 m0 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_001 m0 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_002 m0 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_003 m0 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_004 m0 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_005 m0 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_006_invalidFlag m1 : 8|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_007_invalidFlag m1 : 9|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_008_invalidFlag m1 : 10|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_009_invalidFlag m1 : 11|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_010_invalidFlag m1 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_011_invalidFlag m1 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_006 m1 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_007 m1 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_008 m1 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_009 m1 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_010 m1 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_011 m1 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_012_invalidFlag m2 : 8|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_013_invalidFlag m2 : 9|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_014_invalidFlag m2 : 10|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_015_invalidFlag m2 : 11|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_016_invalidFlag m2 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_017_invalidFlag m2 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_012 m2 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_013 m2 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_014 m2 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_015 m2 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_016 m2 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_017 m2 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_018_invalidFlag m3 : 8|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_019_invalidFlag m3 : 9|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_020_invalidFlag m3 : 10|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_021_invalidFlag m3 : 11|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_022_invalidFlag m3 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_023_invalidFlag m3 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_018 m3 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_019 m3 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_020 m3 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_021 m3 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_022 m3 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_023 m3 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_024_invalidFlag m4 : 8|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_025_invalidFlag m4 : 9|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_026_invalidFlag m4 : 10|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_027_invalidFlag m4 : 11|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_028_invalidFlag m4 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_029_invalidFlag m4 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_024 m4 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_025 m4 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_026 m4 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_027 m4 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_028 m4 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_029 m4 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_030_invalidFlag m5 : 8|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_031_invalidFlag m5 : 9|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_032_invalidFlag m5 : 10|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_033_invalidFlag m5 : 11|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_034_invalidFlag m5 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_035_invalidFlag m5 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_030 m5 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_031 m5 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_032 m5 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_033 m5 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_034 m5 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_035 m5 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_036_invalidFlag m6 : 8|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_037_invalidFlag m6 : 9|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_038_invalidFlag m6 : 10|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_039_invalidFlag m6 : 11|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_040_invalidFlag m6 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_041_invalidFlag m6 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_036 m6 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_037 m6 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_038 m6 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_039 m6 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_040 m6 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_041 m6 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_042_invalidFlag m7 : 8|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_043_invalidFlag m7 : 9|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_044_invalidFlag m7 : 10|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_045_invalidFlag m7 : 11|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_046_invalidFlag m7 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_047_invalidFlag m7 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_042 m7 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_043 m7 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_044 m7 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_045 m7 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_046 m7 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_047 m7 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_048_invalidFlag m8 : 8|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_049_invalidFlag m8 : 9|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_050_invalidFlag m8 : 10|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_051_invalidFlag m8 : 11|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_052_invalidFlag m8 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_053_invalidFlag m8 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_048 m8 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_049 m8 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_050 m8 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_051 m8 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_052 m8 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_053 m8 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_054_invalidFlag m9 : 8|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_055_invalidFlag m9 : 9|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_056_invalidFlag m9 : 10|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_057_invalidFlag m9 : 11|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_058_invalidFlag m9 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_059_invalidFlag m9 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_054 m9 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_055 m9 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_056 m9 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_057 m9 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_058 m9 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_059 m9 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_060_invalidFlag m10 : 8|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_061_invalidFlag m10 : 9|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_062_invalidFlag m10 : 10|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_063_invalidFlag m10 : 11|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_064_invalidFlag m10 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_065_invalidFlag m10 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_060 m10 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_061 m10 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_062 m10 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_063 m10 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_064 m10 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_065 m10 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_066_invalidFlag m11 : 8|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_067_invalidFlag m11 : 9|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_068_invalidFlag m11 : 10|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_069_invalidFlag m11 : 11|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_070_invalidFlag m11 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_071_invalidFlag m11 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_066 m11 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_067 m11 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_068 m11 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_069 m11 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_070 m11 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_071 m11 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_072_invalidFlag m12 : 8|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_073_invalidFlag m12 : 9|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_074_invalidFlag m12 : 10|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_075_invalidFlag m12 : 11|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_076_invalidFlag m12 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_077_invalidFlag m12 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_072 m12 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_073 m12 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_074 m12 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_075 m12 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_076 m12 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_077 m12 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_078_invalidFlag m13 : 8|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_079_invalidFlag m13 : 9|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_080_invalidFlag m13 : 10|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_081_invalidFlag m13 : 11|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_082_invalidFlag m13 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_083_invalidFlag m13 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_078 m13 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_079 m13 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_080 m13 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_081 m13 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_082 m13 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_083 m13 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_084_invalidFlag m14 : 8|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_085_invalidFlag m14 : 9|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_086_invalidFlag m14 : 10|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_087_invalidFlag m14 : 11|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_088_invalidFlag m14 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_089_invalidFlag m14 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_084 m14 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_085 m14 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_086 m14 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_087 m14 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_088 m14 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_089 m14 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_090_invalidFlag m15 : 8|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_091_invalidFlag m15 : 9|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_092_invalidFlag m15 : 10|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_093_invalidFlag m15 : 11|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_094_invalidFlag m15 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_095_invalidFlag m15 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_090 m15 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_091 m15 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_092 m15 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_093 m15 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_094 m15 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_095 m15 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_096_invalidFlag m16 : 8|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_097_invalidFlag m16 : 9|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_098_invalidFlag m16 : 10|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_099_invalidFlag m16 : 11|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_100_invalidFlag m16 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_101_invalidFlag m16 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_096 m16 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_097 m16 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_098 m16 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_099 m16 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_100 m16 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_101 m16 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_102_invalidFlag m17 : 8|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_103_invalidFlag m17 : 9|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_104_invalidFlag m17 : 10|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_105_invalidFlag m17 : 11|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_106_invalidFlag m17 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_107_invalidFlag m17 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_102 m17 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_103 m17 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_104 m17 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_105 m17 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_106 m17 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_107 m17 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_108_invalidFlag m18 : 8|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_109_invalidFlag m18 : 9|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_110_invalidFlag m18 : 10|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_111_invalidFlag m18 : 11|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_112_invalidFlag m18 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_113_invalidFlag m18 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_108 m18 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_109 m18 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_110 m18 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_111 m18 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_112 m18 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_113 m18 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_114_invalidFlag m19 : 8|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_115_invalidFlag m19 : 9|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_116_invalidFlag m19 : 10|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_117_invalidFlag m19 : 11|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_118_invalidFlag m19 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_119_invalidFlag m19 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_114 m19 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_115 m19 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_116 m19 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_117 m19 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_118 m19 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_119 m19 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_120_invalidFlag m20 : 8|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_121_invalidFlag m20 : 9|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_122_invalidFlag m20 : 10|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_123_invalidFlag m20 : 11|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_124_invalidFlag m20 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_125_invalidFlag m20 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_120 m20 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_121 m20 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_122 m20 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_123 m20 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_124 m20 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_125 m20 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_126_invalidFlag m21 : 8|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_127_invalidFlag m21 : 9|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_128_invalidFlag m21 : 10|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_129_invalidFlag m21 : 11|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_130_invalidFlag m21 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_131_invalidFlag m21 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_126 m21 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_127 m21 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_128 m21 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_129 m21 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_130 m21 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_131 m21 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_132_invalidFlag m22 : 8|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_133_invalidFlag m22 : 9|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_134_invalidFlag m22 : 10|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_135_invalidFlag m22 : 11|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_136_invalidFlag m22 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_137_invalidFlag m22 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_132 m22 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_133 m22 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_134 m22 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_135 m22 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_136 m22 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_137 m22 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_138_invalidFlag m23 : 8|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_139_invalidFlag m23 : 9|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_140_invalidFlag m23 : 10|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_141_invalidFlag m23 : 11|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_142_invalidFlag m23 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_143_invalidFlag m23 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_138 m23 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_139 m23 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_140 m23 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_141 m23 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_142 m23 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_143 m23 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_144_invalidFlag m24 : 8|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_145_invalidFlag m24 : 9|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_146_invalidFlag m24 : 10|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_147_invalidFlag m24 : 11|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_148_invalidFlag m24 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_149_invalidFlag m24 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_144 m24 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_145 m24 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_146 m24 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_147 m24 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_148 m24 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_149 m24 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_150_invalidFlag m25 : 8|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_151_invalidFlag m25 : 9|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_152_invalidFlag m25 : 10|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_153_invalidFlag m25 : 11|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_154_invalidFlag m25 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_155_invalidFlag m25 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_150 m25 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_151 m25 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_152 m25 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_153 m25 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_154 m25 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_155 m25 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_156_invalidFlag m26 : 8|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_157_invalidFlag m26 : 9|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_158_invalidFlag m26 : 10|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_159_invalidFlag m26 : 11|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_160_invalidFlag m26 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_161_invalidFlag m26 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_156 m26 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_157 m26 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_158 m26 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_159 m26 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_160 m26 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_161 m26 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_162_invalidFlag m27 : 8|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_163_invalidFlag m27 : 9|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_164_invalidFlag m27 : 10|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_165_invalidFlag m27 : 11|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_166_invalidFlag m27 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_167_invalidFlag m27 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_162 m27 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_163 m27 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_164 m27 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_165 m27 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_166 m27 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_167 m27 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_168_invalidFlag m28 : 8|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_169_invalidFlag m28 : 9|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_170_invalidFlag m28 : 10|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_171_invalidFlag m28 : 11|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_172_invalidFlag m28 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_173_invalidFlag m28 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_168 m28 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_169 m28 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_170 m28 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_171 m28 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_172 m28 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_173 m28 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_174_invalidFlag m29 : 8|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_175_invalidFlag m29 : 9|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_176_invalidFlag m29 : 10|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_177_invalidFlag m29 : 11|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_178_invalidFlag m29 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_179_invalidFlag m29 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperature_174 m29 : 23|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_175 m29 : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_176 m29 : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_177 m29 : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_178 m29 : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CellTemperature_179 m29 : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX + +BO_ 592 f_CellVoltages: 8 Vector__XXX +SG_ f_CellVoltages_Mux M : 7|8@0+ (1,0) [0|0] "" Vector__XXX +SG_ CellVoltage_000_invalidFlag m0 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_001_invalidFlag m0 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_002_invalidFlag m0 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_003_invalidFlag m0 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_000 m0 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_001 m0 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_002 m0 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_003 m0 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_004_invalidFlag m1 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_005_invalidFlag m1 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_006_invalidFlag m1 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_007_invalidFlag m1 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_004 m1 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_005 m1 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_006 m1 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_007 m1 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_008_invalidFlag m2 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_009_invalidFlag m2 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_010_invalidFlag m2 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_011_invalidFlag m2 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_008 m2 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_009 m2 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_010 m2 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_011 m2 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_012_invalidFlag m3 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_013_invalidFlag m3 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_014_invalidFlag m3 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_015_invalidFlag m3 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_012 m3 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_013 m3 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_014 m3 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_015 m3 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_016_invalidFlag m4 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_017_invalidFlag m4 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_018_invalidFlag m4 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_019_invalidFlag m4 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_016 m4 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_017 m4 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_018 m4 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_019 m4 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_020_invalidFlag m5 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_021_invalidFlag m5 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_022_invalidFlag m5 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_023_invalidFlag m5 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_020 m5 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_021 m5 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_022 m5 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_023 m5 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_024_invalidFlag m6 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_025_invalidFlag m6 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_026_invalidFlag m6 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_027_invalidFlag m6 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_024 m6 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_025 m6 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_026 m6 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_027 m6 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_028_invalidFlag m7 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_029_invalidFlag m7 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_030_invalidFlag m7 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_031_invalidFlag m7 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_028 m7 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_029 m7 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_030 m7 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_031 m7 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_032_invalidFlag m8 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_033_invalidFlag m8 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_034_invalidFlag m8 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_035_invalidFlag m8 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_032 m8 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_033 m8 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_034 m8 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_035 m8 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_036_invalidFlag m9 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_037_invalidFlag m9 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_038_invalidFlag m9 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_039_invalidFlag m9 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_036 m9 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_037 m9 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_038 m9 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_039 m9 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_040_invalidFlag m10 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_041_invalidFlag m10 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_042_invalidFlag m10 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_043_invalidFlag m10 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_040 m10 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_041 m10 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_042 m10 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_043 m10 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_044_invalidFlag m11 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_045_invalidFlag m11 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_046_invalidFlag m11 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_047_invalidFlag m11 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_044 m11 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_045 m11 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_046 m11 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_047 m11 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_048_invalidFlag m12 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_049_invalidFlag m12 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_050_invalidFlag m12 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_051_invalidFlag m12 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_048 m12 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_049 m12 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_050 m12 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_051 m12 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_052_invalidFlag m13 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_053_invalidFlag m13 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_054_invalidFlag m13 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_055_invalidFlag m13 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_052 m13 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_053 m13 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_054 m13 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_055 m13 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_056_invalidFlag m14 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_057_invalidFlag m14 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_058_invalidFlag m14 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_059_invalidFlag m14 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_056 m14 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_057 m14 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_058 m14 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_059 m14 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_060_invalidFlag m15 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_061_invalidFlag m15 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_062_invalidFlag m15 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_063_invalidFlag m15 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_060 m15 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_061 m15 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_062 m15 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_063 m15 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_064_invalidFlag m16 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_065_invalidFlag m16 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_066_invalidFlag m16 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_067_invalidFlag m16 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_064 m16 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_065 m16 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_066 m16 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_067 m16 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_068_invalidFlag m17 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_069_invalidFlag m17 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_070_invalidFlag m17 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_071_invalidFlag m17 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_068 m17 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_069 m17 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_070 m17 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_071 m17 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_072_invalidFlag m18 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_073_invalidFlag m18 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_074_invalidFlag m18 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_075_invalidFlag m18 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_072 m18 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_073 m18 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_074 m18 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_075 m18 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_076_invalidFlag m19 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_077_invalidFlag m19 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_078_invalidFlag m19 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_079_invalidFlag m19 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_076 m19 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_077 m19 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_078 m19 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_079 m19 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_080_invalidFlag m20 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_081_invalidFlag m20 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_082_invalidFlag m20 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_083_invalidFlag m20 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_080 m20 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_081 m20 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_082 m20 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_083 m20 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_084_invalidFlag m21 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_085_invalidFlag m21 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_086_invalidFlag m21 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_087_invalidFlag m21 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_084 m21 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_085 m21 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_086 m21 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_087 m21 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_088_invalidFlag m22 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_089_invalidFlag m22 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_090_invalidFlag m22 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_091_invalidFlag m22 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_088 m22 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_089 m22 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_090 m22 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_091 m22 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_092_invalidFlag m23 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_093_invalidFlag m23 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_094_invalidFlag m23 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_095_invalidFlag m23 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_092 m23 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_093 m23 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_094 m23 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_095 m23 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_096_invalidFlag m24 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_097_invalidFlag m24 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_098_invalidFlag m24 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_099_invalidFlag m24 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_096 m24 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_097 m24 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_098 m24 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_099 m24 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_100_invalidFlag m25 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_101_invalidFlag m25 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_102_invalidFlag m25 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_103_invalidFlag m25 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_100 m25 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_101 m25 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_102 m25 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_103 m25 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_104_invalidFlag m26 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_105_invalidFlag m26 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_106_invalidFlag m26 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_107_invalidFlag m26 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_104 m26 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_105 m26 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_106 m26 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_107 m26 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_108_invalidFlag m27 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_109_invalidFlag m27 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_110_invalidFlag m27 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_111_invalidFlag m27 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_108 m27 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_109 m27 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_110 m27 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_111 m27 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_112_invalidFlag m28 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_113_invalidFlag m28 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_114_invalidFlag m28 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_115_invalidFlag m28 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_112 m28 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_113 m28 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_114 m28 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_115 m28 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_116_invalidFlag m29 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_117_invalidFlag m29 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_118_invalidFlag m29 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_119_invalidFlag m29 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_116 m29 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_117 m29 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_118 m29 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_119 m29 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_120_invalidFlag m30 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_121_invalidFlag m30 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_122_invalidFlag m30 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_123_invalidFlag m30 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_120 m30 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_121 m30 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_122 m30 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_123 m30 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_124_invalidFlag m31 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_125_invalidFlag m31 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_126_invalidFlag m31 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_127_invalidFlag m31 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_124 m31 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_125 m31 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_126 m31 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_127 m31 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_128_invalidFlag m32 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_129_invalidFlag m32 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_130_invalidFlag m32 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_131_invalidFlag m32 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_128 m32 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_129 m32 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_130 m32 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_131 m32 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_132_invalidFlag m33 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_133_invalidFlag m33 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_134_invalidFlag m33 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_135_invalidFlag m33 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_132 m33 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_133 m33 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_134 m33 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_135 m33 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_136_invalidFlag m34 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_137_invalidFlag m34 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_138_invalidFlag m34 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_139_invalidFlag m34 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_136 m34 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_137 m34 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_138 m34 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_139 m34 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_140_invalidFlag m35 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_141_invalidFlag m35 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_142_invalidFlag m35 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_143_invalidFlag m35 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_140 m35 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_141 m35 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_142 m35 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_143 m35 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_144_invalidFlag m36 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_145_invalidFlag m36 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_146_invalidFlag m36 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_147_invalidFlag m36 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_144 m36 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_145 m36 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_146 m36 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_147 m36 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_148_invalidFlag m37 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_149_invalidFlag m37 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_150_invalidFlag m37 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_151_invalidFlag m37 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_148 m37 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_149 m37 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_150 m37 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_151 m37 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_152_invalidFlag m38 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_153_invalidFlag m38 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_154_invalidFlag m38 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_155_invalidFlag m38 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_152 m38 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_153 m38 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_154 m38 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_155 m38 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_156_invalidFlag m39 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_157_invalidFlag m39 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_158_invalidFlag m39 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_159_invalidFlag m39 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_156 m39 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_157 m39 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_158 m39 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_159 m39 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_160_invalidFlag m40 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_161_invalidFlag m40 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_162_invalidFlag m40 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_163_invalidFlag m40 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_160 m40 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_161 m40 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_162 m40 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_163 m40 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_164_invalidFlag m41 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_165_invalidFlag m41 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_166_invalidFlag m41 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_167_invalidFlag m41 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_164 m41 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_165 m41 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_166 m41 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_167 m41 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_168_invalidFlag m42 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_169_invalidFlag m42 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_170_invalidFlag m42 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_171_invalidFlag m42 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_168 m42 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_169 m42 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_170 m42 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_171 m42 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_172_invalidFlag m43 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_173_invalidFlag m43 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_174_invalidFlag m43 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_175_invalidFlag m43 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_172 m43 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_173 m43 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_174 m43 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_175 m43 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_176_invalidFlag m44 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_177_invalidFlag m44 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_178_invalidFlag m44 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_179_invalidFlag m44 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_176 m44 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_177 m44 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_178 m44 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_179 m44 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_180_invalidFlag m45 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_181_invalidFlag m45 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_182_invalidFlag m45 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_183_invalidFlag m45 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_180 m45 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_181 m45 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_182 m45 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_183 m45 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_184_invalidFlag m46 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_185_invalidFlag m46 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_186_invalidFlag m46 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_187_invalidFlag m46 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_184 m46 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_185 m46 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_186 m46 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_187 m46 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_188_invalidFlag m47 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_189_invalidFlag m47 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_190_invalidFlag m47 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_191_invalidFlag m47 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_188 m47 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_189 m47 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_190 m47 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_191 m47 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_192_invalidFlag m48 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_193_invalidFlag m48 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_194_invalidFlag m48 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_195_invalidFlag m48 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_192 m48 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_193 m48 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_194 m48 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_195 m48 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_196_invalidFlag m49 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_197_invalidFlag m49 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_198_invalidFlag m49 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_199_invalidFlag m49 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_196 m49 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_197 m49 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_198 m49 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_199 m49 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_200_invalidFlag m50 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_201_invalidFlag m50 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_202_invalidFlag m50 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_203_invalidFlag m50 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_200 m50 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_201 m50 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_202 m50 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_203 m50 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_204_invalidFlag m51 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_205_invalidFlag m51 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_206_invalidFlag m51 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_207_invalidFlag m51 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_204 m51 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_205 m51 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_206 m51 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_207 m51 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_208_invalidFlag m52 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_209_invalidFlag m52 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_210_invalidFlag m52 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_211_invalidFlag m52 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_208 m52 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_209 m52 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_210 m52 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_211 m52 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_212_invalidFlag m53 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_213_invalidFlag m53 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_214_invalidFlag m53 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_215_invalidFlag m53 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltage_212 m53 : 11|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_213 m53 : 30|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_214 m53 : 33|13@0+ (1,0) [0|8191] "mV" Vector__XXX +SG_ CellVoltage_215 m53 : 52|13@0+ (1,0) [0|8191] "mV" Vector__XXX + +BO_ 255 f_CrashDump: 8 Vector__XXX +SG_ f_CrashDump_Mux M : 7|8@0+ (1,0) [0|0] "" Vector__XXX + +BO_ 768 f_Debug: 8 Vector__XXX +SG_ f_Debug_Mux M : 7|8@0+ (1,0) [0|0] "" Vector__XXX SG_ SetHundredthOfSeconds m1 : 15|7@0+ (1,0) [0|127] "" Vector__XXX SG_ SetSeconds m1 : 8|6@0+ (1,0) [0|63] "" Vector__XXX SG_ SetMinutes m1 : 18|6@0+ (1,0) [0|63] "" Vector__XXX @@ -975,124 +1679,113 @@ SG_ SetWeekday m1 : 39|3@0+ (1,0) [0|7] "" Vector__XXX SG_ SetDay m1 : 36|5@0+ (1,0) [0|31] "" Vector__XXX SG_ SetMonth m1 : 47|4@0+ (1,0) [0|15] "" Vector__XXX SG_ SetYear m1 : 43|7@0+ (1,0) [0|127] "" Vector__XXX -SG_ foxBMS_GetMcuLotNumber m0 : 10|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ foxBMS_GetBmsSoftwareVersion m0 : 8|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ foxBMS_GetMcuUniqueDieId m0 : 9|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ foxBMS_GetMcuWaferInformation m0 : 11|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ foxBMS_GetCommitHash m0 : 12|1@1+ (1,0) [0|1] "" Vector__XXX -SG_ foxBMS_TriggerSoftwareReset m2 : 39|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ GetMcuLotNumber m0 : 10|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ GetBmsSoftwareVersion m0 : 8|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ GetMcuUniqueDieId m0 : 9|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ GetMcuWaferInformation m0 : 11|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ GetCommitHash m0 : 12|1@1+ (1,0) [0|1] "" Vector__XXX +SG_ GetBuildConfiguration m0 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ TriggerSoftwareReset m2 : 39|1@0+ (1,0) [0|1] "" Vector__XXX SG_ InitializeFram m3 : 27|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ foxBMS_RequestRtcTime m4 : 8|1@0+ (1,0) [0|1] "" Vector__XXX - - -BO_ 1313 foxBMS_String0Current: 6 Vector__XXX -SG_ IVT0_Result_I_systemError : 15|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ IVT0_Result_I_OCS : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ IVT0_Result_I_overallMeasError : 14|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ IVT0_Result_I_channelMeasError : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ IVT0_ID_Result_I : 7|8@0+ (1,0) [0|255] "" Vector__XXX -SG_ IVT0_MsgCount_Result_I : 11|4@0+ (1,0) [0|15] "" Vector__XXX -SG_ IVT0_Result_I_mA : 23|32@0- (1,0) [-2147483648|2147483647] "mA" Vector__XXX - - -BO_ 1314 foxBMS_String0Voltage1: 6 Vector__XXX -SG_ IVT0_Result_U1_systemError : 15|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ IVT0_Result_U1_overallMeasError : 14|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ IVT0_Result_U1_channelMeasError : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ IVT0_Result_U1_OCS : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ IVT0_ID_Result_U1 : 7|8@0+ (1,0) [1|1] "" Vector__XXX -SG_ IVT0_MsgCount_Result_U1 : 11|4@0+ (1,0) [0|15] "" Vector__XXX -SG_ IVT0_Result_U1_mV : 23|32@0- (1,0) [-2147483648|2147483647] "mV" Vector__XXX - - -BO_ 1315 foxBMS_String0Voltage2: 6 Vector__XXX -SG_ IVT0_Result_U2_systemError : 15|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ IVT0_Result_U2_OCS : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ IVT0_Result_U2_overallMeasError : 14|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ IVT0_Result_U2_channelMeasError : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ IVT0_ID_Result_U2 : 7|8@0+ (1,0) [2|2] "" Vector__XXX -SG_ IVT0_MsgCount_Result_U2 : 11|4@0+ (1,0) [0|15] "" Vector__XXX -SG_ IVT0_Result_U2_mV : 23|32@0- (1,0) [-2147483648|2147483647] "mV" Vector__XXX - - -BO_ 1316 foxBMS_String0Voltage3: 6 Vector__XXX -SG_ IVT0_Result_U3_systemError : 15|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ IVT0_Result_U3_OCS : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ IVT0_Result_U3_overallMeasError : 14|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ IVT0_Result_U3_channelMeasError : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ IVT0_ID_Result_U3 : 7|8@0+ (1,0) [3|3] "" Vector__XXX -SG_ IVT0_MsgCount_Result_U3 : 11|4@0+ (1,0) [0|15] "" Vector__XXX -SG_ IVT0_Result_U3_mV : 23|32@0- (1,0) [-2147483648|2147483647] "mV" Vector__XXX - - -BO_ 1317 foxBMS_String0Temperature: 6 Vector__XXX -SG_ IVT0_Result_T_systemError : 15|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ IVT0_Result_T_OCS : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ IVT0_Result_T_overallMeasError : 14|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ IVT0_Result_T_channelMeasError : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ IVT0_ID_Result_T : 7|8@0+ (1,0) [4|4] "" Vector__XXX -SG_ IVT0_MsgCount_Result_T : 11|4@0+ (1,0) [0|15] "" Vector__XXX -SG_ IVT0_Result_T_ddegC : 23|32@0- (0.1,0) [-214748364.8|214748364.7] "ddegC" Vector__XXX - - -BO_ 1318 foxBMS_String0Power: 6 Vector__XXX -SG_ IVT0_Result_W_systemError : 15|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ IVT0_Result_W_OCS : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ IVT0_Result_W_overallMeasError : 14|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ IVT0_Result_W_channelMeasError : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ IVT0_Result_W : 23|32@0- (1,0) [-2147483648|2147483647] "W" Vector__XXX -SG_ IVT0_MsgCount_Result_W : 11|4@0+ (1,0) [0|15] "" Vector__XXX -SG_ IVT0_ID_Result_W : 7|8@0+ (1,0) [5|5] "" Vector__XXX - - -BO_ 1319 foxBMS_String0CurrentCounter: 6 Vector__XXX -SG_ IVT0_Result_As_systemError : 15|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ IVT0_Result_As_OCS : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ IVT0_Result_As_overallMeasError : 14|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ IVT0_Result_As_channelMeasError : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ IVT0_Result_As : 23|32@0- (1,0) [-2147483648|2147483647] "As" Vector__XXX -SG_ IVT0_MsgCount_Result_As : 11|4@0+ (1,0) [0|15] "" Vector__XXX -SG_ IVT0_ID_Result_As : 7|8@0+ (1,0) [6|6] "" Vector__XXX - - -BO_ 1320 foxBMS_String0EnergyCounter: 6 Vector__XXX -SG_ IVT0_Result_Wh_systemError : 15|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ IVT0_Result_Wh_OCS : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ IVT0_Result_Wh_overallMeasError : 14|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ IVT0_Result_Wh_channelMeasError : 13|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ IVT0_Result_Wh : 23|32@0- (1,0) [-2147483648|2147483647] "Wh" Vector__XXX -SG_ IVT0_MsgCount_Result_Wh : 11|4@0+ (1,0) [0|15] "" Vector__XXX -SG_ IVT0_ID_Result_Wh : 7|8@0+ (1,0) [7|7] "" Vector__XXX - - -BO_ 550 foxBMS_BmsStateDetails: 8 Vector__XXX -SG_ foxBMS_TimingViolationEngine : 0|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ foxBMS_TimingViolation1ms : 1|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ foxBMS_TimingViolation10ms : 2|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ foxBMS_TimingViolation100ms : 3|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ foxBMS_TimingViolation100msAlgo : 4|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ foxBMS_TimingViolation10msRec : 10|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ foxBMS_TimingViolation100msRec : 11|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ foxBMS_TimingViolation100msAlgoR : 12|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ foxBMS_TimingViolationEngineRec : 8|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ foxBMS_TimingViolation1msRec : 9|1@0+ (1,0) [0|1] "" Vector__XXX - - -BO_ 551 foxBMS_DebugResponse: 8 Vector__XXX -SG_ foxBMS_DebugResponse_Mux M : 7|8@0+ (1,0) [0|0] "" Vector__XXX -SG_ MCU_waferNumber m3 : 15|8@0+ (1,0) [0|1] "" Vector__XXX -SG_ MCU_xWaferCoordinate m3 : 27|12@0+ (1,0) [0|1] "" Vector__XXX -SG_ MCU_yWaferCoordinate m3 : 23|12@0+ (1,0) [0|1] "" Vector__XXX -SG_ MCU_LotNumber m2 : 15|32@0+ (1,0) [0|1] "" Vector__XXX -SG_ MCU_uniqueId m1 : 15|32@0+ (1,0) [0|4294967295] "" Vector__XXX -SG_ foxBMS_dirtyFlag m0 : 33|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ foxBMS_majorVersionNumber m0 : 15|8@0+ (1,0) [0|255] "" Vector__XXX -SG_ foxBMS_minorVersionNumber m0 : 23|8@0+ (1,0) [0|255] "" Vector__XXX -SG_ foxBMS_patchVersionNumber m0 : 31|8@0+ (1,0) [0|255] "" Vector__XXX -SG_ foxBMS_releaseDistance m0 : 39|5@0+ (1,0) [0|31] "" Vector__XXX -SG_ foxBMS_releaseDistanceOverflow m0 : 34|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ foxBMS_underVersionControl m0 : 32|1@0+ (1,0) [0|1] "" Vector__XXX -SG_ foxBMS_MagicBootData m15 : 15|56@0+ (1,0) [0|1] "" Vector__XXX +SG_ RequestRtcTime m4 : 8|1@0+ (1,0) [0|1] "" Vector__XXX + +BO_ 771 f_DebugBuildConfiguration: 8 Vector__XXX +SG_ f_DebugBuildConfiguration_Mux M : 0|8@1+ (1,0) [0|0] "" Vector__XXX +SG_ MaxDischargeTemperature_MSL m36 : 15|18@0- (0.1,0) [-13107.2|13107.1] "degC" Vector__XXX +SG_ MaxDischargeTemperature_RSL m36 : 29|18@0- (0.1,0) [-13107.2|13107.1] "degC" Vector__XXX +SG_ MaxdischargeTemperature_MOL m36 : 43|18@0- (0.1,0) [-13107.2|13107.1] "degC" Vector__XXX +SG_ MinDischargeTemperature_MSL m39 : 15|18@0- (0.1,0) [-13107.2|13107.1] "degC" Vector__XXX +SG_ MinDischargeTemperature_RSL m39 : 29|18@0- (0.1,0) [-13107.2|13107.1] "degC" Vector__XXX +SG_ MinDischargeTemperature_MOL m39 : 43|18@0- (0.1,0) [-13107.2|13107.1] "degC" Vector__XXX +SG_ MaxChargeTemperature_MSL m34 : 15|18@0- (0.1,0) [-13107.2|13107.1] "degC" Vector__XXX +SG_ MaxChargeTemperature_RSL m34 : 29|18@0- (0.1,0) [-13107.2|13107.1] "degC" Vector__XXX +SG_ MaxChargeTemperature_MOL m34 : 43|18@0- (0.1,0) [-13107.2|13107.1] "degC" Vector__XXX +SG_ MinChargeTemperature_MSL m38 : 15|18@0- (0.1,0) [-13107.2|13107.1] "degC" Vector__XXX +SG_ MinChargeTemperature_RSL m38 : 29|18@0- (0.1,0) [-13107.2|13107.1] "degC" Vector__XXX +SG_ MinChargeTemperature_MOL m38 : 43|18@0- (0.1,0) [-13107.2|13107.1] "degC" Vector__XXX +SG_ MaxVoltage_MSL m37 : 15|18@0- (1,0) [0|1] "mV" Vector__XXX +SG_ MaxVoltage_RSL m37 : 29|18@0- (1,0) [0|1] "mV" Vector__XXX +SG_ MaxVoltage_MOL m37 : 43|18@0- (1,0) [0|1] "mV" Vector__XXX +SG_ MinVoltage_MSL m40 : 15|18@0- (1,0) [0|1] "mV" Vector__XXX +SG_ MinVoltage_RSL m40 : 29|18@0- (1,0) [0|1] "mV" Vector__XXX +SG_ MinVoltge_MOL m40 : 43|18@0- (1,0) [0|1] "mV" Vector__XXX +SG_ NominalCellVoltage m32 : 15|16@0+ (1,0) [0|1] "mV" Vector__XXX +SG_ DeepDischargeCellVoltage m32 : 31|16@0+ (1,0) [0|1] "mV" Vector__XXX +SG_ CellCapacity m32 : 47|16@0+ (1,0) [0|1] "mAh" Vector__XXX +SG_ CellEnergy m32 : 63|8@0+ (1,0) [0|1] "Wh" Vector__XXX +SG_ MaxChargeCurrent_MSL m33 : 15|18@0+ (1,0) [0|262143] "mA" Vector__XXX +SG_ MaxChargeCurrent_RSL m33 : 29|18@0+ (1,0) [0|1] "mA" Vector__XXX +SG_ MaxChargeCurrent_MOL m33 : 43|18@0+ (1,0) [0|1] "mA" Vector__XXX +SG_ MaxDischargeCurrent_MSL m35 : 15|18@0+ (1,0) [0|1] "mA" Vector__XXX +SG_ MaxDischargeCurrent_RSL m35 : 29|18@0+ (1,0) [0|1] "mA" Vector__XXX +SG_ MaxDischargeCurrent_MOL m35 : 43|18@0+ (1,0) [0|1] "mA" Vector__XXX +SG_ NrOfStrings m48 : 15|8@0+ (1,0) [0|1] "" Vector__XXX +SG_ NrOfModulesPerString m48 : 23|8@0+ (1,0) [0|1] "" Vector__XXX +SG_ NrOfCellBlocksPerModule m48 : 31|8@0+ (1,0) [0|1] "" Vector__XXX +SG_ NrOfParallelCellsPerCellBlock m48 : 39|8@0+ (1,0) [0|1] "" Vector__XXX +SG_ NrOfGpiosPerModule m48 : 47|8@0+ (1,0) [0|1] "" Vector__XXX +SG_ NrOfGpasPerModule m48 : 55|8@0+ (1,0) [0|1] "" Vector__XXX +SG_ NrOfTemperatureSensorsPerModule m48 : 63|8@0+ (1,0) [0|1] "" Vector__XXX +SG_ NrOfCellBlocksPerString m55 : 15|14@0+ (1,0) [0|1] "" Vector__XXX +SG_ NrOfCellBlocks m55 : 17|14@0+ (1,0) [0|1] "" Vector__XXX +SG_ NrOfTempSensorsPerString m55 : 35|14@0+ (1,0) [0|1] "" Vector__XXX +SG_ NrOfTempSensors m55 : 53|14@0+ (1,0) [0|1] "" Vector__XXX +SG_ CurrentSensorPresent m51 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CurrentSensorCyclic m51 : 14|1@1+ (1,0) [0|1] "" Vector__XXX +SG_ NrOfVoltagesFromCurrentSensor m51 : 13|2@0+ (1,0) [0|1] "" Vector__XXX +SG_ CurrentMeasurementTimeout m51 : 11|12@0+ (1,0) [0|1] "ms" Vector__XXX +SG_ CoulombCountingMeasurementTimeou m51 : 31|12@0+ (1,0) [0|1] "ms" Vector__XXX +SG_ EnergyCountingMeasurementTimeout m51 : 35|12@0+ (1,0) [0|1] "ms" Vector__XXX +SG_ ThresholdNoCurrent m51 : 55|12@0+ (1,0) [0|1] "mA" Vector__XXX +SG_ MainContactorsMaxBreakCurrent m50 : 31|32@0+ (1,0) [0|1] "mA" Vector__XXX +SG_ NrOfContactors m50 : 23|8@0+ (1,0) [0|1] "" Vector__XXX +SG_ NrOfContactorsOutsideStrings m50 : 15|8@0+ (1,0) [0|1] "" Vector__XXX +SG_ StandbyPeriodicOpenWireCheck m54 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ NormalPeriodicOpenWireCheck m54 : 18|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ ChargePeriodicOpenWireCheck m54 : 37|1@1+ (1,0) [0|1] "" Vector__XXX +SG_ StandbyOpenWirePeriod m54 : 14|12@0+ (1,0) [0|4095] "s" Vector__XXX +SG_ NormalOpenWirePeriod m54 : 17|12@0+ (1,0) [0|4095] "s" Vector__XXX +SG_ ErrorOpenWirePeriod m54 : 40|12@0+ (1,0) [0|4095] "s" Vector__XXX +SG_ ChargeOpenWirePeriod m54 : 36|12@0+ (1,0) [0|4095] "s" Vector__XXX +SG_ CheckFusePlacedInChargePath m52 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CheckFusePlacedInNormalPath m52 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ MaxVoltageDropOverFuse m52 : 11|12@0+ (1,0) [0|1] "mV" Vector__XXX +SG_ MainFuseMaximumTriggerDuration m52 : 31|16@0+ (1,0) [0|1] "ms" Vector__XXX +SG_ PositiveDischargeCurrent m49 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ IgnoreInterlockFeedback m49 : 14|1@1+ (1,0) [0|1] "" Vector__XXX +SG_ CheckCanTiming m49 : 13|1@1+ (1,0) [0|1] "" Vector__XXX +SG_ BalancingDefaultInactive m49 : 12|1@1+ (1,0) [0|1] "" Vector__XXX +SG_ BalancingResistance m49 : 11|12@0+ (1,0) [0|1] "Ohm" Vector__XXX +SG_ RestCurrent m49 : 31|12@0+ (1,0) [0|1] "mA" Vector__XXX +SG_ RelaxationPeriod m49 : 35|16@0+ (10,0) [0|1] "s" Vector__XXX +SG_ MaxStringCurrent m53 : 15|28@0+ (1,0) [0|1] "mA" Vector__XXX +SG_ MaxPackCurrent m53 : 35|28@0+ (1,0) [0|1] "mA" Vector__XXX +SG_ SOC_algorithm m16 : 15|4@0+ (1,0) [0|1] "" Vector__XXX +SG_ SOE_algorithm m16 : 11|4@0+ (1,0) [0|1] "" Vector__XXX +SG_ SOF_algorithm m16 : 23|4@0+ (1,0) [0|1] "" Vector__XXX +SG_ SOH_algorithm m16 : 19|4@0+ (1,0) [0|1] "" Vector__XXX +SG_ Balancing_strategy m16 : 31|4@0+ (1,0) [0|1] "" Vector__XXX +SG_ IMD m16 : 27|4@0+ (1,0) [0|1] "" Vector__XXX +SG_ Rtos m16 : 39|4@0+ (1,0) [0|1] "" Vector__XXX +SG_ AFE m0 : 8|8@1+ (1,0) [0|1] "" Vector__XXX +SG_ TemperatureSensor m0 : 23|8@0+ (1,0) [0|1] "" Vector__XXX +SG_ TemperatureSensorMethod m0 : 31|8@0+ (1,0) [0|1] "" Vector__XXX + +BO_ 769 f_DebugResponse: 8 Vector__XXX +SG_ f_DebugResponse_Mux M : 7|8@0+ (1,0) [0|0] "" Vector__XXX +SG_ Number m3 : 15|8@0+ (1,0) [0|1] "" Vector__XXX +SG_ CoordinateX m3 : 27|12@0+ (1,0) [0|1] "" Vector__XXX +SG_ CoordinateY m3 : 23|12@0+ (1,0) [0|1] "" Vector__XXX +SG_ LotNumber m2 : 15|32@0+ (1,0) [0|1] "" Vector__XXX +SG_ UniqueId m1 : 15|32@0+ (1,0) [0|4294967295] "" Vector__XXX +SG_ DirtyFlag m0 : 33|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ MajorVersionNumber m0 : 15|8@0+ (1,0) [0|255] "" Vector__XXX +SG_ MinorVersionNumber m0 : 23|8@0+ (1,0) [0|255] "" Vector__XXX +SG_ PatchVersionNumber m0 : 31|8@0+ (1,0) [0|255] "" Vector__XXX +SG_ ReleaseDistance m0 : 39|5@0+ (1,0) [0|31] "" Vector__XXX +SG_ ReleaseDistanceOverflow m0 : 34|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ UnderVersionControl m0 : 32|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ MagicBootData m15 : 15|56@0+ (1,0) [0|1] "" Vector__XXX SG_ GetDay m4 : 36|5@0+ (1,0) [0|31] "" Vector__XXX SG_ GetHours m4 : 28|5@0+ (1,0) [0|31] "" Vector__XXX SG_ GetHundredthOfSeconds m4 : 15|7@0+ (1,0) [0|127] "" Vector__XXX @@ -1103,149 +1796,1258 @@ SG_ GetWeekday m4 : 39|3@0+ (1,0) [0|7] "" Vector__XXX SG_ GetYear m4 : 43|7@0+ (1,0) [0|127] "" Vector__XXX SG_ shortHash m5 : 15|56@0+ (1,0) [0|0] "" Vector__XXX - -BO_ 513 foxBMS_UnsupportedMultiplexerVal: 8 Vector__XXX -SG_ foxBMS_MessageId : 7|32@0+ (1,0) [0|1] "" Vector__XXX -SG_ foxBMS_MultiplexerValue : 39|32@0+ (1,0) [0|1] "" Vector__XXX - - -BO_ 255 foxBMS_FatalErrors: 8 Vector__XXX -SG_ foxBMS_FatalErrors_Mux M : 7|8@0+ (1,0) [0|0] "" Vector__XXX - - -BO_ 964 foxBMS_AerosolSensor: 8 Vector__XXX -SG_ particulate_matter_concentration : 7|16@0+ (1,0) [0|65535] "" Vector__XXX -SG_ low_power_mode_wake_up_threshold : 23|16@0+ (1,0) [0|65535] "" Vector__XXX -SG_ sensor_status : 34|3@0+ (1,0) [0|7] "" Vector__XXX -SG_ sensor_faults : 39|5@0+ (1,0) [0|31] "" Vector__XXX -SG_ rolling_counter : 42|3@0+ (1,0) [0|7] "" Vector__XXX -SG_ CRC_check_code : 63|8@0+ (1,0) [0|255] "" Vector__XXX - - -CM_ BO_ 546 "(in:can_cbs_tx_pack-values-p0.c:CANTX_PackValues, fv:tx)"; -CM_ SG_ 546 foxBMS_packCurrent "Battery pack current"; -CM_ SG_ 546 foxBMS_batteryVoltage "Battery voltage between negative and positive pole of the battery"; -CM_ SG_ 546 foxBMS_busVoltage "Battery voltage between negative pole and after main positive contactor"; -CM_ SG_ 546 foxBMS_packPower "Battery power"; -CM_ BO_ 548 "(in:can_cbs_tx_pack-limits.c:CANTX_LimitValues, fv:tx)"; -CM_ SG_ 548 foxBMS_maxChargeCurrent "Maximum battery pack charge current"; -CM_ SG_ 548 foxBMS_maxDischargeCurrent "Maximum battery pack discharge current"; -CM_ BO_ 547 "(in:can_cbs_tx_pack-minimum-maximum-values.c:CANTX_MinimumMaximumValues, fv:tx)"; -CM_ SG_ 547 foxBMS_minimumCellVoltage "Minimum cell voltage of all connected strings, if no string connected maximum value of whole system is transmitted"; -CM_ SG_ 547 foxBMS_maximumCellVoltage "Maximum cell voltage of all connected strings, if no string connected maximum value of whole system is transmitted"; -CM_ SG_ 547 foxBMS_maximumCellTemp "Maximum cell temperature of all connected strings, if no string connected maximum value of whole system is transmitted"; -CM_ SG_ 547 foxBMS_minimumCellTemp "Minium cell temperature of all connected string, if no string connected maximum value of whole system is transmitted"; -CM_ BO_ 640 "Message contains string voltage, current and power (in:can_cbs_tx_pack-values-p0.c:CANTX_StringValuesP0, fv:tx)"; -CM_ BO_ 643 "Message contains energy counting value (in:can_cbs_tx_pack-values-p0.c:CANTX_StringValuesP1, fv:tx)"; -CM_ SG_ 643 foxBMS_String0EnergyCount "Current sensor string 0 energy counting value"; -CM_ BO_ 549 "(in:can_cbs_tx_pack-state-estimation.c:CANTX_PackStateEstimation, fv:tx)"; -CM_ SG_ 549 foxBMS_packSoc "SOC currently connected to HV bus (100% if all strings connected and all strings at 100%)"; -CM_ SG_ 549 foxBMS_packSoe "SOE currently connected to HV bus (100% if all strings connected and all strings at 100%)"; -CM_ SG_ 549 foxBMS_packEnergy "Energy left in Wh that is currently connected to HV bus"; -CM_ BO_ 576 "(in:can_cbs_tx_cell-voltages.c:CANTX_CellVoltages, fv:tx)"; -CM_ BO_ 592 "(in:can_cbs_tx_cell-temperatures.c:CANTX_CellTemperatures, fv:tx)"; -CM_ BO_ 560 "(in:can_cbs_rx_bms-state-request.c:CANRX_BmsStateRequest, fv:rx)"; -CM_ SG_ 560 foxBMS_modeRequest "0x0: Disconnect strings from HV bus, 0x01: Connect strings to HV bus to start discharge, 0x02: Connect strings to HV bus to start charging"; -CM_ SG_ 560 foxBMS_activateBalancing "0: Deactivate balancing, 1: Activate balancing"; -CM_ SG_ 560 foxBMS_balancingThreshold "Required voltage difference to minimum cell voltage to activate balancing"; -CM_ SG_ 560 foxBMS_externallyPrecharged "0x0: HV bus not externally precharged, 0x01: HV bus externally precharged"; -CM_ SG_ 560 foxBMS_resetFlags "0x01: reset persistent flags"; -CM_ SG_ 560 foxBMS_chargerConnected "0x00: charger not connected, 0x01: charger connected"; -CM_ SG_ 560 foxBMS_disableInsulationMon "0x00: Check battery system insulation, 0x01: Do not check insulation of battery system"; -CM_ SG_ 560 foxBMS_heaterOverride_ON "0: no override active, 1: override active -> force heater on"; -CM_ SG_ 560 foxBMS_heaterOverride_OFF "0: no override active, 1: override active -> force heater off"; -CM_ BO_ 544 "Message contains foxBMS state (in:can_cbs_tx_bms-state.c:CANTX_BmsState, fv:tx)"; -CM_ SG_ 544 foxBMS_generalError "0x00: No error detected, 0x01: Error detected"; -CM_ SG_ 544 foxBMS_generalWarning "0x00: No warning detected, 0x01: Warning detected"; -CM_ SG_ 544 foxBMS_Error_dieTemperatureMCU "0x00: No error, 0x01: Error detected"; -CM_ SG_ 544 foxBMS_Error_OvertempPCB "foxBMS Master-PCB: 0x00: No error, 0x01: Error detected"; -CM_ SG_ 544 foxBMS_Error_UndertempPCB "foxBMS Master-PCB: 0x00: No error, 0x01: Error detected"; -CM_ SG_ 544 foxBMS_Error_PrechargeVolt "0x00: precharging successful, 0x01: precharge aborted because of voltage difference"; -CM_ SG_ 544 foxBMS_Error_PrechargeCurrent "0x00: precharging successful, 0x01: precharge aborted because current limit violated"; -CM_ SG_ 544 foxBMS_heaterState "0x00: Heater not activated, 0x01: Heater activated"; -CM_ SG_ 544 foxBMS_coolingState "0x00: Cooling not activated, 0x01: Cooling activated"; -CM_ SG_ 544 foxBMS_insulationMonitoring "0x00: insulation monitoring active, 0x01: insulation monitoring not active"; -CM_ SG_ 544 foxBMS_chargingComplete "0x01: charging complete"; -CM_ SG_ 544 foxBMS_EmergencyShutoff "The BMS is preparing to open the contactors soon due to detected error"; -CM_ SG_ 544 foxBMS_MainFuseBlown "0x00: fuse okay, 0x01: fuse blown"; -CM_ SG_ 544 foxBMS_Error_Interlock "0x00: interlock okay, 0x01: interlock open"; -CM_ SG_ 544 foxBMS_Error_Insulation "0x00: No error, 0x01: Error detected"; -CM_ SG_ 544 foxBMS_Error_Cantiming "0x00: No error, 0x01: Error detected"; -CM_ SG_ 544 foxBMS_Error_PackOvercurr_Charge "0x00: No error, 0x01: Error detected"; -CM_ SG_ 544 foxBMS_Error_PackOvercur_Dischrg "0x00: No error, 0x01: Error detected"; -CM_ SG_ 544 foxBMS_SysMonError "If this bit is set, it indicates that a task has violated its timing requirements."; -CM_ SG_ 544 foxBMS_alertFlag "foxBMS Alter flag: 0x00: No error, 0x01: Alert flag set"; -CM_ SG_ 544 foxBMS_NvramCrcError "0x00: No NVRAM CRC Error detected, 0x01: NVRAM CRC Error detected"; -CM_ BO_ 545 "Message contains string related error and warning flags (in:can_cbs_tx_bms-state.c:CANTX_StringState, fv:tx)"; -CM_ SG_ 545 String0_stringConnected "0x00: String not connected, 0x01: String connected to HV bus"; -CM_ SG_ 545 String0_balancing_active "0x00: No balancing active, 0x01: Balancing in this string active"; -CM_ SG_ 545 String0_Err_overtemp_charge "0x00: No error, 0x01: Error: Flag will be set if maximum cell temperature is above 45 degree Celsius."; -CM_ SG_ 545 String0_Err_undertemp_charge "0x00: No error, 0x01: Error: Flag will be set if minimum cell temperature is below 0 degree Celsius."; -CM_ SG_ 545 String0_Err_overtemp_discharge "0x00: No error, 0x01: Error: Flag will be set if maximum cell temperature is above 60 degree Celsius."; -CM_ SG_ 545 String0_Err_undertemp_discharge "0x00: No error, 0x01: Error: Flag will be set if minimum cell temperature is below -20 degree Celsius."; -CM_ SG_ 545 String0_Err_Overcurrent_charge "0x00: No error, 0x01: Error: Flag will be set if string charge current is above 30400mA."; -CM_ SG_ 545 String0_Err_Overcurre_discharge "0x00: No error, 0x01: Error: Flag will be set if discharge current is above maximum string current."; -CM_ SG_ 545 String0_Err_Overvoltage "0x00: No error, 0x01: Error: Flag will be set if maximum cell voltage is above 4200mV."; -CM_ SG_ 545 String0_Err_Undervoltage "0x00: No error, 0x01: Error: Flag will be set if minimum cell voltage is below 3000mV. This equals roughly 4% remaining SOC. Minimum data sheet values if 2500mV."; -CM_ SG_ 545 String0_Err_deep_discharge "0x00: No error, 0x01: Error"; -CM_ SG_ 545 String0_Err_CS_currentMeas "0x00: No error, 0x01: Error"; -CM_ SG_ 545 String0_Err_positiveContactor "0x00: No error, 0x01: Error"; -CM_ SG_ 545 String0_Err_openWire "0x00: No error, 0x01: Error"; -CM_ SG_ 545 String0_openWireNumber "Number of first open wire that has been detected in this string"; -CM_ SG_ 545 String0_Err_plaus_cell_volt "0x00: No error, 0x01: Error"; -CM_ SG_ 545 String0_Err_plaus_cell_temp "0x00: No error, 0x01: Error"; -CM_ SG_ 545 String0_Err_plaus_string_volt "0x00: No error, 0x01: Error"; -CM_ SG_ 545 String0_Err_slave_hardware "0x00: No error, 0x01: Error"; -CM_ SG_ 545 String0_Err_dsyChainBase_Comm "0x00: No error, 0x01: Error (i.e. SPI)"; -CM_ SG_ 545 String0_Err_dsyChainPrim_CRC "0x00: No error, 0x01: Error"; -CM_ SG_ 545 String0_Err_dsyChainRedun_Comm "0x00: No error, 0x01: Error"; -CM_ SG_ 545 String0_Err_dsyChainRedun_CRC "0x00: No error, 0x01: Error"; -CM_ SG_ 545 String0_Err_dsyPrim_voltMeasOor "0x00: No error, 0x01: Error"; -CM_ SG_ 545 String0_Err_dsyRedun_voltMeasOor "0x00: No error, 0x01: Error"; -CM_ SG_ 545 String0_Err_dsyPrim_tempMeasOor "0x00: No error, 0x01: Error"; -CM_ SG_ 545 String0_Err_dsyRedun_tempMeasOor "0x00: No error, 0x01: Error"; -CM_ SG_ 545 String0_Err_CS_coulombCountMeas "0x00: No error, 0x01: Error"; -CM_ SG_ 545 String0_Err_CS_energyCountMeas "0x00: No error, 0x01: Error"; -CM_ SG_ 545 String0_Err_plaus_volt_spread "0x00: No error, 0x01: Error"; -CM_ SG_ 545 String0_Err_plaus_temp_spread "0x00: No error, 0x01: Error"; -CM_ SG_ 545 String0_Err_negativeContactor "0x00: No error, 0x01: Error"; -CM_ BO_ 641 "Message contains minimum and maximum cell temperature and cell voltage values of respective string (in:can_cbs_tx_pack-minimum-maximum-values.c:CANTX_StringMinimumMaximumValues, fv:tx)"; -CM_ SG_ 641 String0_minimumCellVoltage "Minimum cell voltage in this string"; -CM_ SG_ 641 String0_maximumCellVoltage "Maximum cell voltage in this string"; -CM_ SG_ 641 String0_maximumCellTemperature "Maximum cell temperature in this string"; -CM_ SG_ 641 String0_minimumCellTemperature "Minium cell temperature in this string"; -CM_ BO_ 642 "Message contains SOC, SOE and SOH state estimations (in:can_cbs_tx_string-state-estimation.c:CANTX_StringStateEstimation, fv:tx)"; -CM_ SG_ 642 String0_SOE "SOE is depending on current direction, if battery system is charging: SOE_max is transmitted, else SOE_min"; -CM_ SG_ 642 String0_Energy_kWh "Remaining energy left in this string"; -CM_ BO_ 512 "Reserved - for debug/development purpose only (in:can_cbs_rx_debug.c:CANRX_Debug, fv:rx)"; -CM_ BO_ 1313 "Current sensor string 0: current (in:can_cbs_rx_current-sensor.c:CANRX_CurrentSensor, fv:rx); Isabellenhuette data sheet name: IVT0_Msg_Result_I"; -CM_ BO_ 1314 "Current sensor string 0: voltage 1 (in:can_cbs_rx_current-sensor.c:CANRX_CurrentSensor, fv:rx); Isabellenhuette data sheet name: IVT0_Msg_Result_U1"; -CM_ BO_ 1315 "Current sensor string 0: voltage 2 (in:can_cbs_rx_current-sensor.c:CANRX_CurrentSensor, fv:rx); Isabellenhuette data sheet name: IVT0_Msg_Result_U2"; -CM_ BO_ 1316 "Current sensor string 0: voltage 3 (in:can_cbs_rx_current-sensor.c:CANRX_CurrentSensor, fv:rx); Isabellenhuette data sheet name: IVT0_Msg_Result_U3"; -CM_ BO_ 1317 "Current sensor string 0: temperature (in:can_cbs_rx_current-sensor.c:CANRX_CurrentSensor, fv:rx); Isabellenhuette data sheet name: IVT0_Msg_Result_T"; -CM_ BO_ 1318 "Current sensor string 0: power (in:can_cbs_rx_current-sensor.c:CANRX_CurrentSensor, fv:rx); Isabellenhuette data sheet name: IVT0_Msg_Result_W"; -CM_ BO_ 1319 "Current sensor string 0: coulomb counting (in:can_cbs_rx_current-sensor.c:CANRX_CurrentSensor, fv:rx); Isabellenhuette data sheet name: IVT0_Msg_Result_As"; -CM_ BO_ 1320 "Current sensor string 0: energy counting (in:can_cbs_rx_current-sensor.c:CANRX_CurrentSensor, fv:rx); Isabellenhuette data sheet name: IVT0_Msg_Result_Wh"; -CM_ BO_ 550 "Transmits details on flags transmitted by foxBMS_State (in:can_cbs_tx_bms-state.c:CANTX_BmsStateDetails, fv:tx)"; -CM_ SG_ 550 foxBMS_TimingViolationEngine "Indicates whether the timing of the engine task has been violated."; -CM_ SG_ 550 foxBMS_TimingViolation1ms "Indicates whether the timing of the 1ms task has been violated."; -CM_ SG_ 550 foxBMS_TimingViolation10ms "Indicates whether the timing of the 10ms task has been violated."; -CM_ SG_ 550 foxBMS_TimingViolation100ms "Indicates whether the timing of the 100ms task has been violated."; -CM_ SG_ 550 foxBMS_TimingViolation100msAlgo "Indicates whether the timing of the 100ms algorithm task has been violated."; -CM_ SG_ 550 foxBMS_TimingViolation10msRec "Indicates whether a violation of the timing of the 10ms task has been recorded."; -CM_ SG_ 550 foxBMS_TimingViolation100msRec "Indicates whether a violation of the timing of the 100ms task has been recorded."; -CM_ SG_ 550 foxBMS_TimingViolation100msAlgoR "Indicates whether a violation of the timing of the 100ms algorithm task has been recorded."; -CM_ SG_ 550 foxBMS_TimingViolationEngineRec "Indicates whether a violation of the timing of the engine task has been recorded."; -CM_ SG_ 550 foxBMS_TimingViolation1msRec "Indicates whether a violation of the timing of the 1ms task has been recorded."; -CM_ BO_ 551 "(in:can_cbs_tx_debug-response.c:CANTX_DebugResponse, fv:tx)"; -CM_ SG_ 551 MCU_waferNumber "wafer number of the MCU (read from DIEDL register)"; -CM_ SG_ 551 MCU_xWaferCoordinate "x coordinate of the MCU die on the wafer (read from DIEIDL register)"; -CM_ SG_ 551 MCU_yWaferCoordinate "y coordinate of the MCU die on the wafer (read from DIEIDL register)"; -CM_ SG_ 551 MCU_LotNumber "lot number of the MCU (read from DIEIDH register)"; -CM_ SG_ 551 MCU_uniqueId "Content of Device Identification Register (DEVID)"; -CM_ BO_ 513 "(in:can_cbs_tx_debug-unsupported-multiplexer-values.c:CANTX_UnsupportedMultiplexerValue, fv:tx)"; -CM_ BO_ 255 "(in:can_cbs_tx_crash-dump.c:CANTX_SendReasonsForFatalErrors, fv:tx)"; +BO_ 770 f_DebugUnsupportedMultiplexerVal: 8 Vector__XXX +SG_ MessageId : 7|32@0+ (1,0) [0|1] "" Vector__XXX +SG_ MultiplexerValue : 39|32@0+ (1,0) [0|1] "" Vector__XXX + +BO_ 562 f_PackLimits: 8 Vector__XXX +SG_ MaximumChargeCurrent : 11|12@0+ (0.25,0) [0|1023.75] "A" Vector__XXX +SG_ MaximumDischargeCurrent : 7|12@0+ (0.25,0) [0|1023.75] "A" Vector__XXX +SG_ MaximumChargePower : 35|12@0+ (0.1,0) [0|409.5] "kW" Vector__XXX +SG_ MaximumDischargePower : 31|12@0+ (0.1,0) [0|409.5] "kW" Vector__XXX +SG_ MaximumBatteryVoltage : 55|8@0+ (4,0) [0|1020] "V" Vector__XXX +SG_ MinimumBatteryVoltage : 63|8@0+ (4,0) [0|1020] "V" Vector__XXX + +BO_ 561 f_PackMinimumMaximumValues: 8 Vector__XXX +SG_ MinimumCellVoltage : 9|14@0- (1,0) [-8192|8191] "mV" Vector__XXX +SG_ MaximumCellVoltage : 7|14@0- (1,0) [-8192|8191] "mV" Vector__XXX +SG_ MaximumCellTemperature : 55|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ MinimumCellTemperature : 63|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CoolingInletTemperature : 39|8@0- (1,0) [-128|127] "degC" Vector__XXX +SG_ CoolingOutletTemperature : 47|8@0- (1,0) [-128|127] "degC" Vector__XXX + +BO_ 565 f_PackStateEstimation: 8 Vector__XXX +SG_ MinimumSoc : 7|10@0+ (0.1,0) [0|102.3] "%" Vector__XXX +SG_ MinimumSoe : 19|10@0+ (0.1,0) [0|102.3] "%" Vector__XXX +SG_ Energy : 55|16@0+ (0.1,0) [0|6553.5] "kWh" Vector__XXX +SG_ Soh : 47|8@0+ (0.5,0) [0|127.5] "%" Vector__XXX +SG_ MaximumSoc : 13|10@0+ (0.1,0) [0|102.3] "%" Vector__XXX +SG_ MaximumSoe : 25|10@0+ (0.1,0) [0|102.3] "%" Vector__XXX + +BO_ 563 f_PackValuesP0: 8 Vector__XXX +SG_ Current : 40|17@0- (0.01,0) [-655.36|655.35] "A" Vector__XXX +SG_ BatteryVoltage : 7|15@0- (0.1,0) [-1638.4|1638.3] "V" Vector__XXX +SG_ BusVoltage : 8|15@0- (0.1,0) [-1638.4|1638.3] "V" Vector__XXX +SG_ Power : 25|17@0- (0.01,0) [-655.36|655.35] "kW" Vector__XXX + +BO_ 564 f_PackValuesP1: 8 Vector__XXX +SG_ InsulationResistance : 7|13@0+ (7,0) [0|57337] "kOhm" Vector__XXX + +BO_ 577 f_StringMinimumMaximumValues: 8 Vector__XXX +SG_ f_StringMinimumMaximumValues_Mux M : 3|4@0+ (1,0) [0|0] "" Vector__XXX +SG_ MinimumCellVoltage m0 : 17|14@0- (1,0) [-8192|8191] "mV" Vector__XXX +SG_ MaximumCellVoltage m0 : 15|14@0- (1,0) [-8192|8191] "mV" Vector__XXX +SG_ MaximumCellTemperature m0 : 35|9@0- (0.5,0) [-128|127.5] "degC" Vector__XXX +SG_ MinimumCellTemperature m0 : 42|9@0- (0.5,0) [-128|127.5] "degC" Vector__XXX + +BO_ 576 f_StringState: 8 Vector__XXX +SG_ f_StringState_Mux M : 3|4@0+ (1,0) [0|0] "" Vector__XXX +SG_ IsStringConnected m0 : 4|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ IsBalancingActive m0 : 5|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ OvertemperatureChargeMslError m0 : 8|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ UndertemperatureChargeMslError m0 : 9|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ OvertemperatureDischargeMslError m0 : 10|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ UndertemperatureDischargeMslErro m0 : 11|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellOvercurrentChargeMslError m0 : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellOvercurrentDischargeMslError m0 : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ OvervoltageMslError m0 : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ UndervoltageMslError m0 : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ DeepDischargeError m0 : 7|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ StringCurrentMeasurementError m0 : 43|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ PositiveContactorError m0 : 32|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ OpenWireError m0 : 49|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellVoltagePlausibilityError m0 : 52|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellTemperaturePlausibilityError m0 : 51|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ StringVoltagePlausibilityError m0 : 53|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ SlaveHardwareError m0 : 34|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ DaisyChainBaseCommunicationError m0 : 35|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ DaisyChainBaseCrcError m0 : 37|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ DaisyChainBaseVoltMeasOorError m0 : 39|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ DaisyChainBaseTempMeasOorError m0 : 41|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CoulombCountingMeasurementError m0 : 44|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ EnergyCountingMeasurementError m0 : 45|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ VoltageSpreadPlausibilityError m0 : 55|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ TemperatureSpreadPlausibilityErr m0 : 54|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ IsStringFuseBlown m0 : 6|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ OvervoltageMolWarning m0 : 22|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ UndervoltageMolWarning m0 : 23|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ OvertemperatureChargeMolWarning m0 : 16|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ OvertemperatureDischargeMolWarni m0 : 18|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ UndertemperatureChargeMolWarning m0 : 17|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ UndertemperatureDischargeMolWarn m0 : 19|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellOvercurrentChargeMolWarning m0 : 20|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellOvercurrentDischargeMolWarni m0 : 21|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ OvertemperatureChargeRslWarning m0 : 24|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ UndertemperatureChargeRslWarning m0 : 25|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ OvertemperatureDischargeRslWarni m0 : 26|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ UndertemperatureDischargeRslWarn m0 : 27|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellOvercurrentChargeRslWarning m0 : 28|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ CellOvercurrentDischargeRslWarni m0 : 29|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ OvervoltageRslWarning m0 : 30|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ UndervoltageRslWarning m0 : 31|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ NegativeContactorError m0 : 33|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ StringVoltageMeasurementError m0 : 46|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ FusedStringVoltageMeasurementErr m0 : 47|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ PackVoltageMeasurementError m0 : 48|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ StringOvercurrentError m0 : 63|1@0+ (1,0) [0|1] "" Vector__XXX + +BO_ 581 f_StringStateEstimation: 8 Vector__XXX +SG_ f_StringStateEstimation_Mux M : 7|4@0+ (1,0) [0|0] "" Vector__XXX +SG_ MinimumSoc m0 : 3|9@0+ (0.2,0) [0|102.2] "%" Vector__XXX +SG_ MaximumSoc m0 : 10|9@0+ (0.2,0) [0|102.2] "%" Vector__XXX +SG_ MinimumSoe m0 : 17|9@0+ (0.2,0) [0|102.2] "%" Vector__XXX +SG_ Energy m0 : 54|15@0+ (0.01,0) [0|327.67] "kWh" Vector__XXX +SG_ Soh m0 : 47|9@0+ (0.2,0) [0|102.2] "%" Vector__XXX +SG_ MaximumSoe m0 : 24|9@0+ (0.2,0) [0|102.2] "%" Vector__XXX + +BO_ 579 f_StringValuesP0: 8 Vector__XXX +SG_ f_StringValuesP0_Mux M : 7|3@0+ (1,0) [0|0] "" Vector__XXX +SG_ Current m0 : 18|18@0- (0.01,0) [-1310.72|1310.71] "A" Vector__XXX +SG_ Voltage m0 : 4|18@0- (0.01,0) [-1310.72|1310.71] "V" Vector__XXX +SG_ Power m0 : 32|18@0- (0.01,0) [-1310.72|1310.71] "kW" Vector__XXX + +BO_ 580 f_StringValuesP1: 8 Vector__XXX +SG_ f_StringValuesP1_Mux M : 7|4@0+ (1,0) [0|0] "" Vector__XXX +SG_ EnergyCounter m0 : 15|32@0- (1,0) [-2147483648|2147483647] "Wh" Vector__XXX + +BO_ 55 IMD_Info: 6 Vector__XXX +SG_ II_VIFC_STATUS_04_VIFC_CmdError : 36|1@1+ (1,0) [0|1] "" Vector__XXX +SG_ II_VIFC_STATUS_13_ST_ParamConfig : 45|1@1+ (1,0) [0|1] "" Vector__XXX +SG_ II_VIFC_STATUS_12_ST_Overall : 44|1@1+ (1,0) [0|1] "" Vector__XXX +SG_ II_VIFC_STATUS_08_Outdated : 40|1@1+ (1,0) [0|1] "" Vector__XXX +SG_ II_VIFC_STATUS_02_IMC_Alive : 34|1@1+ (1,0) [0|1] "" Vector__XXX +SG_ II_VIFC_STATUS_01_IMC_Connection : 33|1@1+ (1,0) [0|1] "" Vector__XXX +SG_ II_VIFC_STATUS_00_IsoMeasurement : 32|1@1+ (1,0) [0|1] "" Vector__XXX +SG_ II_IMC_R_ISO : 0|16@1+ (1,0) [0|65535] "kOhm" Vector__XXX +SG_ II_IMC_STATUS_05_IsoWarning : 21|1@1+ (1,0) [0|1] "" Vector__XXX +SG_ II_IMC_STATUS_04_Selftest : 20|1@1+ (1,0) [0|1] "" Vector__XXX +SG_ II_IMC_STATUS_03_Calibration : 19|1@1+ (1,0) [0|1] "" Vector__XXX +SG_ II_IMC_STATUS_02_System : 18|1@1+ (1,0) [0|1] "" Vector__XXX +SG_ II_IMC_STATUS_01_Ground : 17|1@1+ (1,0) [0|1] "" Vector__XXX +SG_ II_IMC_STATUS_00_IsoFailure : 16|1@1+ (1,0) [0|1] "" Vector__XXX + +BO_ 34 IMD_Request: 5 Vector__XXX +SG_ IMD_Request_Mux M : 0|8@1+ (1,0) [0|0] "" Vector__XXX +SG_ MG_IMC_MANUFACT_INDEX m61 : 8|16@1+ (1,0) [0|65535] "" Vector__XXX +SG_ MG_VIFC_POWER_MODE m223 : 8|16@1+ (1,0) [0|65535] "" Vector__XXX +SG_ MC_VIFC_POWER_MODE m201 : 8|16@1+ (1,0) [0|65535] "" Vector__XXX +SG_ MG_VIFC_VERSION_INDEX m222 : 8|16@1+ (1,0) [0|65535] "" Vector__XXX +SG_ MG_IMC_VERSION_INDEX m51 : 8|16@1+ (1,0) [0|65535] "" Vector__XXX +SG_ MG_IMC_EEPROM_INDEX m59 : 8|16@1+ (1,0) [0|65535] "" Vector__XXX +SG_ MC_VIFC_MEASURE_MODE m203 : 8|16@1+ (1,0) [0|65535] "" Vector__XXX +SG_ MS_IMC_MEAN_FACTOR m43 : 8|16@1+ (1,0) [1|20] "" Vector__XXX +SG_ MS_IMC_EEPROM_DATA m42 : 24|16@1+ (1,0) [0|65535] "" Vector__XXX +SG_ MS_IMC_EEPROM_INDEX m42 : 8|16@1+ (1,0) [0|65535] "" Vector__XXX +SG_ MC_VIFC_LOCK_PWD m202 : 24|16@1+ (1,0) [0|65535] "" Vector__XXX +SG_ MC_VIFC_LOCK_MODE m202 : 8|16@1+ (1,0) [0|65535] "" Vector__XXX +SG_ IMD_Request_DataWord2 m0 : 24|16@1+ (1,0) [0|65535] "" Vector__XXX +SG_ IMD_Request_DataWord1 m0 : 8|16@1+ (1,0) [0|65535] "" Vector__XXX +SG_ MS_VIFC_HV_RELAIS_STATE m210 : 24|16@1+ (1,0) [0|65535] "" Vector__XXX +SG_ MS_VIFC_HV_RELAIS m210 : 8|16@1+ (1,0) [0|65535] "" Vector__XXX +SG_ MS_IMC_R_ISO_WRN_THR m41 : 8|16@1+ (1,0) [40|2000] "kOhm" Vector__XXX +SG_ MC_IMC_CALIB_STEP m34 : 8|16@1+ (1,0) [0|65535] "" Vector__XXX +SG_ MC_IMC_SELFTEST_SCR m33 : 8|16@1+ (1,0) [0|65535] "" Vector__XXX +SG_ MS_IMC_R_ISO_ERR_THR m40 : 8|16@1+ (1,0) [30|1000] "kOhm" Vector__XXX + +BO_ 35 IMD_Response: 5 Vector__XXX +SG_ IMD_Response_Mux M : 0|8@1+ (1,0) [0|0] "" Vector__XXX +SG_ IG_VIFC_STATUS_04_VIFC_CmdError m220 : 12|1@1+ (1,0) [0|1] "" Vector__XXX +SG_ IG_VIFC_STATUS_13_ST_ParamConfig m220 : 21|1@1+ (1,0) [0|1] "" Vector__XXX +SG_ IG_VIFC_STATUS_12_ST_Overall m220 : 20|1@1+ (1,0) [0|1] "" Vector__XXX +SG_ IG_VIFC_STATUS_08_Outdated m220 : 16|1@1+ (1,0) [0|1] "" Vector__XXX +SG_ IG_VIFC_STATUS_02_IMC_Alive m220 : 10|1@1+ (1,0) [0|1] "" Vector__XXX +SG_ IG_VIFC_STATUS_01_IMCConnection m220 : 9|1@1+ (1,0) [0|1] "" Vector__XXX +SG_ IG_VIFC_STATUS_00_IsoMeasurement m220 : 8|1@1+ (1,0) [0|1] "" Vector__XXX +SG_ IG_IMC_STATUS_EXT_15_Reserved m55 : 39|1@1+ (1,0) [0|1] "" Vector__XXX +SG_ IG_IMC_STATUS_EXT_06_Reserved m55 : 30|1@1+ (1,0) [0|1] "" Vector__XXX +SG_ IG_IMC_STATUS_EXT_14_IDString m55 : 38|1@1+ (1,0) [0|1] "" Vector__XXX +SG_ IG_IMC_STATUS_EXT_13_HV2 m55 : 37|1@1+ (1,0) [0|1] "" Vector__XXX +SG_ IG_IMC_STATUS_EXT_12_HV1 m55 : 36|1@1+ (1,0) [0|1] "" Vector__XXX +SG_ IG_IMC_STATUS_EXT_11_FuseBits m55 : 35|1@1+ (1,0) [0|1] "" Vector__XXX +SG_ IG_IMC_STATUS_EXT_10_12V_NEG m55 : 34|1@1+ (1,0) [0|1] "" Vector__XXX +SG_ IG_IMC_STATUS_EXT_09_12V_POS m55 : 33|1@1+ (1,0) [0|1] "" Vector__XXX +SG_ IG_IMC_STATUS_EXT_08_TestPulse m55 : 32|1@1+ (1,0) [0|1] "" Vector__XXX +SG_ IG_IMC_STATUS_EXT_07_Parameter m55 : 31|1@1+ (1,0) [0|1] "" Vector__XXX +SG_ IG_IMC_STATUS_EXT_05_Stack m55 : 29|1@1+ (1,0) [0|1] "" Vector__XXX +SG_ IG_IMC_STATUS_EXT_04_RAM m55 : 28|1@1+ (1,0) [0|1] "" Vector__XXX +SG_ IG_IMC_STATUS_EXT_03_Flash m55 : 27|1@1+ (1,0) [0|1] "" Vector__XXX +SG_ IG_IMC_STATUS_EXT_02_EEPROM m55 : 26|1@1+ (1,0) [0|1] "" Vector__XXX +SG_ IG_IMC_STATUS_EXT_01_Hardware m55 : 25|1@1+ (1,0) [0|1] "" Vector__XXX +SG_ IG_IMC_STATUS_EXT_00_Calibration m55 : 24|1@1+ (1,0) [0|1] "" Vector__XXX +SG_ IG_IMC_STATUS_05_IsoWarning m55 : 13|1@1+ (1,0) [0|1] "" Vector__XXX +SG_ IG_IMC_STATUS_04_Selftest m55 : 12|1@1+ (1,0) [0|1] "" Vector__XXX +SG_ IG_IMC_STATUS_03_Calibration m55 : 11|1@1+ (1,0) [0|1] "" Vector__XXX +SG_ IG_IMC_STATUS_02_System m55 : 10|1@1+ (1,0) [0|1] "" Vector__XXX +SG_ IG_IMC_STATUS_01_Ground m55 : 9|1@1+ (1,0) [0|1] "" Vector__XXX +SG_ IG_IMC_STATUS_00_IsoFailure m55 : 8|1@1+ (1,0) [0|1] "" Vector__XXX +SG_ IG_VIFC_VERSION_MIN m222 : 24|8@1+ (1,0) [0|255] "" Vector__XXX +SG_ IG_VIFC_VERSION_INDEX m222 : 8|16@1+ (1,0) [0|65535] "" Vector__XXX +SG_ IG_VIFC_VERSION_MAJ m222 : 32|8@1+ (1,0) [0|255] "" Vector__XXX +SG_ IG_IMC_VERSION_MIN m51 : 24|8@1+ (1,0) [0|255] "" Vector__XXX +SG_ IG_IMC_VERSION_INDEX m51 : 8|16@1+ (1,0) [0|65535] "" Vector__XXX +SG_ IG_IMC_VERSION_MAJ m51 : 32|8@1+ (1,0) [0|255] "" Vector__XXX +SG_ IG_IMC_MANUFACT_INDEX m61 : 8|16@1+ (1,0) [0|65535] "" Vector__XXX +SG_ IG_IMC_MANUFACT_DATA m61 : 24|16@1+ (1,0) [0|65535] "" Vector__XXX +SG_ IG_IMC_R_ISO_CNT m53 : 32|8@1+ (1,0) [0|255] "Count" Vector__XXX +SG_ IG_IMC_R_ISO_BIAS m53 : 24|8@1+ (1,0) [0|255] "" Vector__XXX +SG_ IG_IMC_R_ISO m53 : 8|16@1+ (1,0) [0|65535] "kOhm" Vector__XXX +SG_ IG_VIFC_TEMP m225 : 8|16@1+ (1,0) [0|65535] "degC" Vector__XXX +SG_ IG_VIFC_IMC_ALIVE m226 : 8|16@1+ (1,0) [0|65535] "" Vector__XXX +SG_ IG_VIFC_POWER_MODE m223 : 8|16@1+ (1,0) [0|65535] "" Vector__XXX +SG_ IC_VIFC_POWER_MODE m201 : 8|16@1+ (1,0) [0|65535] "" Vector__XXX +SG_ IS_IMC_MEAN_FACTOR m43 : 8|16@1+ (1,0) [0|65535] "" Vector__XXX +SG_ IS_IMC_EEPROM_INDEX m42 : 8|16@1+ (1,0) [0|65535] "" Vector__XXX +SG_ IS_IMC_EEPROM_DATA m42 : 24|16@1+ (1,0) [0|65535] "" Vector__XXX +SG_ IC_IMC_CALIB_STEP m34 : 8|16@1+ (1,0) [0|65535] "" Vector__XXX +SG_ IS_IMC_R_ISO_WRN_THR m41 : 8|16@1+ (1,0) [0|65535] "kOhm" Vector__XXX +SG_ IS_IMC_R_ISO_ERR_THR m40 : 8|16@1+ (1,0) [0|65535] "kOhm" Vector__XXX +SG_ IC_VIFC_LOCK_MODE m202 : 8|16@1+ (1,0) [0|65535] "" Vector__XXX +SG_ IC_VIFC_MEASURE_MODE m203 : 8|16@1+ (1,0) [0|65535] "" Vector__XXX +SG_ IS_VIFC_HV_RELAIS_STATE m210 : 24|16@1+ (1,0) [0|65535] "" Vector__XXX +SG_ IS_VIFC_HV_RELAIS m210 : 8|16@1+ (1,0) [0|65535] "" Vector__XXX +SG_ IG_IMC_EEPROM_DATA m59 : 24|16@1+ (1,0) [0|65535] "" Vector__XXX +SG_ IG_IMC_EEPROM_INDEX m59 : 8|16@1+ (1,0) [0|65535] "" Vector__XXX +SG_ IG_IMC_MEAN_FACTOR m60 : 8|16@1+ (1,0) [0|65535] "" Vector__XXX +SG_ IG_VIFC_LOCK_MODE m224 : 8|16@1+ (1,0) [0|65535] "" Vector__XXX +SG_ IG_VIFC_HV_RELAIS_STATE m221 : 24|16@1+ (1,0) [0|65535] "" Vector__XXX +SG_ IG_VIFC_HV_RELAIS m221 : 8|16@1+ (1,0) [0|65535] "" Vector__XXX +SG_ IG_IMD_ERROR_CODE m255 : 8|16@1+ (1,0) [0|65535] "" Vector__XXX +SG_ IG_IMD_FAILED_CMD m255 : 24|8@1+ (1,0) [0|255] "" Vector__XXX +SG_ IG_IMC_HV_2 m58 : 8|16@1+ (1,0) [0|65535] "Volt" Vector__XXX +SG_ IG_IMC_HV_1 m54 : 8|16@1+ (1,0) [0|65535] "Volt" Vector__XXX +SG_ IG_IMC_R_ISO_WRN_THR m57 : 8|16@1+ (1,0) [0|65535] "kOhm" Vector__XXX +SG_ IG_IMC_R_ISO_ERR_THR m50 : 8|16@1+ (1,0) [0|65535] "kOhm" Vector__XXX +SG_ IC_IMC_SELFTEST_SCR m33 : 8|16@1+ (1,0) [0|65535] "" Vector__XXX +SG_ IG_IMC_TEST_CNT m90 : 8|16@1+ (1,0) [0|65535] "Calls" Vector__XXX +SG_ IMD_Response_DataWord2 m0 : 24|16@1+ (1,0) [0|65535] "" Vector__XXX +SG_ IMD_Response_DataWord1 m0 : 8|16@1+ (1,0) [0|65535] "" Vector__XXX + +BO_ 1313 IVT_String0_Current: 6 Vector__XXX +SG_ IVT_Result_I_System_Error : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ IVT_Result_I_OCS : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ IVT_Result_I_Measurement_Error : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ IVT_Result_I_Channel_Error : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ IVT_ID_Result_I : 7|8@0+ (1,0) [0|255] "" Vector__XXX +SG_ IVT_MsgCount_Result_I : 11|4@0+ (1,0) [0|15] "" Vector__XXX +SG_ IVT_Result_I : 23|32@0- (1,0) [-2147483648|2147483647] "mA" Vector__XXX + +BO_ 1319 IVT_String0_CurrentCounter: 6 Vector__XXX +SG_ IVT_Result_As_System_Error : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ IVT_Result_As_OCS : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ IVT_Result_As_Measurement_Error : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ IVT_Result_As_Channel_Error : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ IVT_Result_As : 23|32@0- (1,0) [-2147483648|2147483647] "As" Vector__XXX +SG_ IVT_MsgCount_Result_As : 11|4@0+ (1,0) [0|15] "" Vector__XXX +SG_ IVT_ID_Result_As : 7|8@0+ (1,0) [6|6] "" Vector__XXX + +BO_ 1320 IVT_String0_EnergyCounter: 6 Vector__XXX +SG_ IVT_Result_Wh_System_Error : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ IVT_Result_Wh_OCS : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ IVT_Result_Wh_Measurement_Error : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ IVT_Result_Wh_Channel_Error : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ IVT_Result_Wh : 23|32@0- (1,0) [-2147483648|2147483647] "Wh" Vector__XXX +SG_ IVT_MsgCount_Result_Wh : 11|4@0+ (1,0) [0|15] "" Vector__XXX +SG_ IVT_ID_Result_Wh : 7|8@0+ (1,0) [7|7] "" Vector__XXX + +BO_ 1318 IVT_String0_Power: 6 Vector__XXX +SG_ IVT_Result_W_System_Error : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ IVT_Result_W_OCS : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ IVT_Result_W_Measurement_Error : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ IVT_Result_W_Channel_Error : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ IVT_Result_W : 23|32@0- (1,0) [-2147483648|2147483647] "W" Vector__XXX +SG_ IVT_MsgCount_Result_W : 11|4@0+ (1,0) [0|15] "" Vector__XXX +SG_ IVT_ID_Result_W : 7|8@0+ (1,0) [5|5] "" Vector__XXX + +BO_ 1317 IVT_String0_Temperature: 6 Vector__XXX +SG_ IVT_Result_T_System_Error : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ IVT_Result_T_OCS : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ IVT_Result_T_Measurement_Error : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ IVT_Result_T_Channel_Error : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ IVT_ID_Result_T : 7|8@0+ (1,0) [4|4] "" Vector__XXX +SG_ IVT_Result_T : 23|32@0- (0.1,0) [-214748364.8|214748364.7] "degC" Vector__XXX +SG_ IVT_MsgCount_Result_T : 11|4@0+ (1,0) [0|15] "" Vector__XXX + +BO_ 1314 IVT_String0_Voltage1: 6 Vector__XXX +SG_ IVT_Result_U1_System_Error : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ IVT_Result_U1_Measurement_Error : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ IVT_Result_U1_Channel_Error : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ IVT_Result_U1_OCS : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ IVT_ID_Result_U1 : 7|8@0+ (1,0) [1|1] "" Vector__XXX +SG_ IVT_Result_U1 : 23|32@0- (1,0) [-2147483648|2147483647] "mV" Vector__XXX +SG_ IVT_MsgCount_Result_U1 : 11|4@0+ (1,0) [0|15] "" Vector__XXX + +BO_ 1315 IVT_String0_Voltage2: 6 Vector__XXX +SG_ IVT_Result_U2_System_Error : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ IVT_Result_U2_OCS : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ IVT_Result_U2_Measurement_Error : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ IVT_Result_U2_Channel_Error : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ IVT_ID_Result_U2 : 7|8@0+ (1,0) [2|2] "" Vector__XXX +SG_ IVT_MsgCount_Result_U2 : 11|4@0+ (1,0) [0|15] "" Vector__XXX +SG_ IVT_Result_U2 : 23|32@0- (1,0) [-2147483648|2147483647] "mV" Vector__XXX + +BO_ 1316 IVT_String0_Voltage3: 6 Vector__XXX +SG_ IVT_Result_U3_System_Error : 15|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ IVT_Result_U3_OCS : 12|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ IVT_Result_U3_Measurement_Error : 14|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ IVT_Result_U3_Channel_Error : 13|1@0+ (1,0) [0|1] "" Vector__XXX +SG_ IVT_ID_Result_U3 : 7|8@0+ (1,0) [3|3] "" Vector__XXX +SG_ IVT_Result_U3 : 23|32@0- (1,0) [-2147483648|2147483647] "mV" Vector__XXX +SG_ IVT_MsgCount_Result_U3 : 11|4@0+ (1,0) [0|15] "" Vector__XXX + +CM_ BO_ 640 "Cell temperature measurement data (in:can_cbs_rx_cell-temperatures.c:CANRX_CellTemperatures, fv:rx)"; +CM_ SG_ 640 CellTemperature_000 "Temperature of cell 0"; +CM_ SG_ 640 CellTemperature_001 "Temperature of cell 1"; +CM_ SG_ 640 CellTemperature_002 "Temperature of cell 2"; +CM_ SG_ 640 CellTemperature_003 "Temperature of cell 3"; +CM_ SG_ 640 CellTemperature_004 "Temperature of cell 4"; +CM_ SG_ 640 CellTemperature_005 "Temperature of cell 5"; +CM_ SG_ 640 CellTemperature_006 "Temperature of cell 6"; +CM_ SG_ 640 CellTemperature_007 "Temperature of cell 7"; +CM_ SG_ 640 CellTemperature_008 "Temperature of cell 8"; +CM_ SG_ 640 CellTemperature_009 "Temperature of cell 9"; +CM_ SG_ 640 CellTemperature_010 "Temperature of cell 10"; +CM_ SG_ 640 CellTemperature_011 "Temperature of cell 11"; +CM_ SG_ 640 CellTemperature_012 "Temperature of cell 12"; +CM_ SG_ 640 CellTemperature_013 "Temperature of cell 13"; +CM_ SG_ 640 CellTemperature_014 "Temperature of cell 14"; +CM_ SG_ 640 CellTemperature_015 "Temperature of cell 15"; +CM_ SG_ 640 CellTemperature_016 "Temperature of cell 16"; +CM_ SG_ 640 CellTemperature_017 "Temperature of cell 17"; +CM_ SG_ 640 CellTemperature_018 "Temperature of cell 18"; +CM_ SG_ 640 CellTemperature_019 "Temperature of cell 19"; +CM_ SG_ 640 CellTemperature_020 "Temperature of cell 20"; +CM_ SG_ 640 CellTemperature_021 "Temperature of cell 21"; +CM_ SG_ 640 CellTemperature_022 "Temperature of cell 22"; +CM_ SG_ 640 CellTemperature_023 "Temperature of cell 23"; +CM_ SG_ 640 CellTemperature_024 "Temperature of cell 24"; +CM_ SG_ 640 CellTemperature_025 "Temperature of cell 25"; +CM_ SG_ 640 CellTemperature_026 "Temperature of cell 26"; +CM_ SG_ 640 CellTemperature_027 "Temperature of cell 27"; +CM_ SG_ 640 CellTemperature_028 "Temperature of cell 28"; +CM_ SG_ 640 CellTemperature_029 "Temperature of cell 29"; +CM_ SG_ 640 CellTemperature_030 "Temperature of cell 30"; +CM_ SG_ 640 CellTemperature_031 "Temperature of cell 31"; +CM_ SG_ 640 CellTemperature_032 "Temperature of cell 32"; +CM_ SG_ 640 CellTemperature_033 "Temperature of cell 33"; +CM_ SG_ 640 CellTemperature_034 "Temperature of cell 34"; +CM_ SG_ 640 CellTemperature_035 "Temperature of cell 35"; +CM_ SG_ 640 CellTemperature_036 "Temperature of cell 36"; +CM_ SG_ 640 CellTemperature_037 "Temperature of cell 37"; +CM_ SG_ 640 CellTemperature_038 "Temperature of cell 38"; +CM_ SG_ 640 CellTemperature_039 "Temperature of cell 39"; +CM_ SG_ 640 CellTemperature_040 "Temperature of cell 40"; +CM_ SG_ 640 CellTemperature_041 "Temperature of cell 41"; +CM_ SG_ 640 CellTemperature_042 "Temperature of cell 42"; +CM_ SG_ 640 CellTemperature_043 "Temperature of cell 43"; +CM_ SG_ 640 CellTemperature_044 "Temperature of cell 44"; +CM_ SG_ 640 CellTemperature_045 "Temperature of cell 45"; +CM_ SG_ 640 CellTemperature_046 "Temperature of cell 46"; +CM_ SG_ 640 CellTemperature_047 "Temperature of cell 47"; +CM_ SG_ 640 CellTemperature_048 "Temperature of cell 48"; +CM_ SG_ 640 CellTemperature_049 "Temperature of cell 49"; +CM_ SG_ 640 CellTemperature_050 "Temperature of cell 50"; +CM_ SG_ 640 CellTemperature_051 "Temperature of cell 51"; +CM_ SG_ 640 CellTemperature_052 "Temperature of cell 52"; +CM_ SG_ 640 CellTemperature_053 "Temperature of cell 53"; +CM_ SG_ 640 CellTemperature_054 "Temperature of cell 54"; +CM_ SG_ 640 CellTemperature_055 "Temperature of cell 55"; +CM_ SG_ 640 CellTemperature_056 "Temperature of cell 56"; +CM_ SG_ 640 CellTemperature_057 "Temperature of cell 57"; +CM_ SG_ 640 CellTemperature_058 "Temperature of cell 58"; +CM_ SG_ 640 CellTemperature_059 "Temperature of cell 59"; +CM_ SG_ 640 CellTemperature_060 "Temperature of cell 60"; +CM_ SG_ 640 CellTemperature_061 "Temperature of cell 61"; +CM_ SG_ 640 CellTemperature_062 "Temperature of cell 62"; +CM_ SG_ 640 CellTemperature_063 "Temperature of cell 63"; +CM_ SG_ 640 CellTemperature_064 "Temperature of cell 64"; +CM_ SG_ 640 CellTemperature_065 "Temperature of cell 65"; +CM_ SG_ 640 CellTemperature_066 "Temperature of cell 66"; +CM_ SG_ 640 CellTemperature_067 "Temperature of cell 67"; +CM_ SG_ 640 CellTemperature_068 "Temperature of cell 68"; +CM_ SG_ 640 CellTemperature_069 "Temperature of cell 69"; +CM_ SG_ 640 CellTemperature_070 "Temperature of cell 70"; +CM_ SG_ 640 CellTemperature_071 "Temperature of cell 71"; +CM_ SG_ 640 CellTemperature_072 "Temperature of cell 72"; +CM_ SG_ 640 CellTemperature_073 "Temperature of cell 73"; +CM_ SG_ 640 CellTemperature_074 "Temperature of cell 74"; +CM_ SG_ 640 CellTemperature_075 "Temperature of cell 75"; +CM_ SG_ 640 CellTemperature_076 "Temperature of cell 76"; +CM_ SG_ 640 CellTemperature_077 "Temperature of cell 77"; +CM_ SG_ 640 CellTemperature_078 "Temperature of cell 78"; +CM_ SG_ 640 CellTemperature_079 "Temperature of cell 79"; +CM_ SG_ 640 CellTemperature_080 "Temperature of cell 80"; +CM_ SG_ 640 CellTemperature_081 "Temperature of cell 81"; +CM_ SG_ 640 CellTemperature_082 "Temperature of cell 82"; +CM_ SG_ 640 CellTemperature_083 "Temperature of cell 83"; +CM_ SG_ 640 CellTemperature_084 "Temperature of cell 84"; +CM_ SG_ 640 CellTemperature_085 "Temperature of cell 85"; +CM_ SG_ 640 CellTemperature_086 "Temperature of cell 86"; +CM_ SG_ 640 CellTemperature_087 "Temperature of cell 87"; +CM_ SG_ 640 CellTemperature_088 "Temperature of cell 88"; +CM_ SG_ 640 CellTemperature_089 "Temperature of cell 89"; +CM_ SG_ 640 CellTemperature_090 "Temperature of cell 90"; +CM_ SG_ 640 CellTemperature_091 "Temperature of cell 91"; +CM_ SG_ 640 CellTemperature_092 "Temperature of cell 92"; +CM_ SG_ 640 CellTemperature_093 "Temperature of cell 93"; +CM_ SG_ 640 CellTemperature_094 "Temperature of cell 94"; +CM_ SG_ 640 CellTemperature_095 "Temperature of cell 95"; +CM_ SG_ 640 CellTemperature_096 "Temperature of cell 96"; +CM_ SG_ 640 CellTemperature_097 "Temperature of cell 97"; +CM_ SG_ 640 CellTemperature_098 "Temperature of cell 98"; +CM_ SG_ 640 CellTemperature_099 "Temperature of cell 99"; +CM_ SG_ 640 CellTemperature_100 "Temperature of cell 100"; +CM_ SG_ 640 CellTemperature_101 "Temperature of cell 101"; +CM_ SG_ 640 CellTemperature_102 "Temperature of cell 102"; +CM_ SG_ 640 CellTemperature_103 "Temperature of cell 103"; +CM_ SG_ 640 CellTemperature_104 "Temperature of cell 104"; +CM_ SG_ 640 CellTemperature_105 "Temperature of cell 105"; +CM_ SG_ 640 CellTemperature_106 "Temperature of cell 106"; +CM_ SG_ 640 CellTemperature_107 "Temperature of cell 107"; +CM_ SG_ 640 CellTemperature_108 "Temperature of cell 108"; +CM_ SG_ 640 CellTemperature_109 "Temperature of cell 109"; +CM_ SG_ 640 CellTemperature_110 "Temperature of cell 110"; +CM_ SG_ 640 CellTemperature_111 "Temperature of cell 111"; +CM_ SG_ 640 CellTemperature_112 "Temperature of cell 112"; +CM_ SG_ 640 CellTemperature_113 "Temperature of cell 113"; +CM_ SG_ 640 CellTemperature_114 "Temperature of cell 114"; +CM_ SG_ 640 CellTemperature_115 "Temperature of cell 115"; +CM_ SG_ 640 CellTemperature_116 "Temperature of cell 116"; +CM_ SG_ 640 CellTemperature_117 "Temperature of cell 117"; +CM_ SG_ 640 CellTemperature_118 "Temperature of cell 118"; +CM_ SG_ 640 CellTemperature_119 "Temperature of cell 119"; +CM_ SG_ 640 CellTemperature_120 "Temperature of cell 120"; +CM_ SG_ 640 CellTemperature_121 "Temperature of cell 121"; +CM_ SG_ 640 CellTemperature_122 "Temperature of cell 122"; +CM_ SG_ 640 CellTemperature_123 "Temperature of cell 123"; +CM_ SG_ 640 CellTemperature_124 "Temperature of cell 124"; +CM_ SG_ 640 CellTemperature_125 "Temperature of cell 125"; +CM_ SG_ 640 CellTemperature_126 "Temperature of cell 126"; +CM_ SG_ 640 CellTemperature_127 "Temperature of cell 127"; +CM_ SG_ 640 CellTemperature_128 "Temperature of cell 128"; +CM_ SG_ 640 CellTemperature_129 "Temperature of cell 129"; +CM_ SG_ 640 CellTemperature_130 "Temperature of cell 130"; +CM_ SG_ 640 CellTemperature_131 "Temperature of cell 131"; +CM_ SG_ 640 CellTemperature_132 "Temperature of cell 132"; +CM_ SG_ 640 CellTemperature_133 "Temperature of cell 133"; +CM_ SG_ 640 CellTemperature_134 "Temperature of cell 134"; +CM_ SG_ 640 CellTemperature_135 "Temperature of cell 135"; +CM_ SG_ 640 CellTemperature_136 "Temperature of cell 136"; +CM_ SG_ 640 CellTemperature_137 "Temperature of cell 137"; +CM_ SG_ 640 CellTemperature_138 "Temperature of cell 138"; +CM_ SG_ 640 CellTemperature_139 "Temperature of cell 139"; +CM_ SG_ 640 CellTemperature_140 "Temperature of cell 140"; +CM_ SG_ 640 CellTemperature_141 "Temperature of cell 141"; +CM_ SG_ 640 CellTemperature_142 "Temperature of cell 142"; +CM_ SG_ 640 CellTemperature_143 "Temperature of cell 143"; +CM_ SG_ 640 CellTemperature_144 "Temperature of cell 144"; +CM_ SG_ 640 CellTemperature_145 "Temperature of cell 145"; +CM_ SG_ 640 CellTemperature_146 "Temperature of cell 146"; +CM_ SG_ 640 CellTemperature_147 "Temperature of cell 147"; +CM_ SG_ 640 CellTemperature_148 "Temperature of cell 148"; +CM_ SG_ 640 CellTemperature_149 "Temperature of cell 149"; +CM_ SG_ 640 CellTemperature_150 "Temperature of cell 150"; +CM_ SG_ 640 CellTemperature_151 "Temperature of cell 151"; +CM_ SG_ 640 CellTemperature_152 "Temperature of cell 152"; +CM_ SG_ 640 CellTemperature_153 "Temperature of cell 153"; +CM_ SG_ 640 CellTemperature_154 "Temperature of cell 154"; +CM_ SG_ 640 CellTemperature_155 "Temperature of cell 155"; +CM_ SG_ 640 CellTemperature_156 "Temperature of cell 156"; +CM_ SG_ 640 CellTemperature_157 "Temperature of cell 157"; +CM_ SG_ 640 CellTemperature_158 "Temperature of cell 158"; +CM_ SG_ 640 CellTemperature_159 "Temperature of cell 159"; +CM_ SG_ 640 CellTemperature_160 "Temperature of cell 160"; +CM_ SG_ 640 CellTemperature_161 "Temperature of cell 161"; +CM_ SG_ 640 CellTemperature_162 "Temperature of cell 162"; +CM_ SG_ 640 CellTemperature_163 "Temperature of cell 163"; +CM_ SG_ 640 CellTemperature_164 "Temperature of cell 164"; +CM_ SG_ 640 CellTemperature_165 "Temperature of cell 165"; +CM_ SG_ 640 CellTemperature_166 "Temperature of cell 166"; +CM_ SG_ 640 CellTemperature_167 "Temperature of cell 167"; +CM_ SG_ 640 CellTemperature_168 "Temperature of cell 168"; +CM_ SG_ 640 CellTemperature_169 "Temperature of cell 169"; +CM_ SG_ 640 CellTemperature_170 "Temperature of cell 170"; +CM_ SG_ 640 CellTemperature_171 "Temperature of cell 171"; +CM_ SG_ 640 CellTemperature_172 "Temperature of cell 172"; +CM_ SG_ 640 CellTemperature_173 "Temperature of cell 173"; +CM_ SG_ 640 CellTemperature_174 "Temperature of cell 174"; +CM_ SG_ 640 CellTemperature_175 "Temperature of cell 175"; +CM_ SG_ 640 CellTemperature_176 "Temperature of cell 176"; +CM_ SG_ 640 CellTemperature_177 "Temperature of cell 177"; +CM_ SG_ 640 CellTemperature_178 "Temperature of cell 178"; +CM_ SG_ 640 CellTemperature_179 "Temperature of cell 179"; +CM_ BO_ 624 "Cell voltage measurement data (in:can_cbs_rx_cell-voltages.c:CANRX_CellVoltages, fv:rx)"; +CM_ SG_ 624 CellVoltage_000 "Voltage of cell 0"; +CM_ SG_ 624 CellVoltage_001 "Voltage of cell 1"; +CM_ SG_ 624 CellVoltage_002 "Voltage of cell 2"; +CM_ SG_ 624 CellVoltage_003 "Voltage of cell 3"; +CM_ SG_ 624 CellVoltage_004 "Voltage of cell 4"; +CM_ SG_ 624 CellVoltage_005 "Voltage of cell 5"; +CM_ SG_ 624 CellVoltage_006 "Voltage of cell 6"; +CM_ SG_ 624 CellVoltage_007 "Voltage of cell 7"; +CM_ SG_ 624 CellVoltage_008 "Voltage of cell 8"; +CM_ SG_ 624 CellVoltage_009 "Voltage of cell 9"; +CM_ SG_ 624 CellVoltage_010 "Voltage of cell 10"; +CM_ SG_ 624 CellVoltage_011 "Voltage of cell 11"; +CM_ SG_ 624 CellVoltage_012 "Voltage of cell 12"; +CM_ SG_ 624 CellVoltage_013 "Voltage of cell 13"; +CM_ SG_ 624 CellVoltage_014 "Voltage of cell 14"; +CM_ SG_ 624 CellVoltage_015 "Voltage of cell 15"; +CM_ SG_ 624 CellVoltage_016 "Voltage of cell 16"; +CM_ SG_ 624 CellVoltage_017 "Voltage of cell 17"; +CM_ SG_ 624 CellVoltage_018 "Voltage of cell 18"; +CM_ SG_ 624 CellVoltage_019 "Voltage of cell 19"; +CM_ SG_ 624 CellVoltage_020 "Voltage of cell 20"; +CM_ SG_ 624 CellVoltage_021 "Voltage of cell 21"; +CM_ SG_ 624 CellVoltage_022 "Voltage of cell 22"; +CM_ SG_ 624 CellVoltage_023 "Voltage of cell 23"; +CM_ SG_ 624 CellVoltage_024 "Voltage of cell 24"; +CM_ SG_ 624 CellVoltage_025 "Voltage of cell 25"; +CM_ SG_ 624 CellVoltage_026 "Voltage of cell 26"; +CM_ SG_ 624 CellVoltage_027 "Voltage of cell 27"; +CM_ SG_ 624 CellVoltage_028 "Voltage of cell 28"; +CM_ SG_ 624 CellVoltage_029 "Voltage of cell 29"; +CM_ SG_ 624 CellVoltage_030 "Voltage of cell 30"; +CM_ SG_ 624 CellVoltage_031 "Voltage of cell 31"; +CM_ SG_ 624 CellVoltage_032 "Voltage of cell 32"; +CM_ SG_ 624 CellVoltage_033 "Voltage of cell 33"; +CM_ SG_ 624 CellVoltage_034 "Voltage of cell 34"; +CM_ SG_ 624 CellVoltage_035 "Voltage of cell 35"; +CM_ SG_ 624 CellVoltage_036 "Voltage of cell 36"; +CM_ SG_ 624 CellVoltage_037 "Voltage of cell 37"; +CM_ SG_ 624 CellVoltage_038 "Voltage of cell 38"; +CM_ SG_ 624 CellVoltage_039 "Voltage of cell 39"; +CM_ SG_ 624 CellVoltage_040 "Voltage of cell 40"; +CM_ SG_ 624 CellVoltage_041 "Voltage of cell 41"; +CM_ SG_ 624 CellVoltage_042 "Voltage of cell 42"; +CM_ SG_ 624 CellVoltage_043 "Voltage of cell 43"; +CM_ SG_ 624 CellVoltage_044 "Voltage of cell 44"; +CM_ SG_ 624 CellVoltage_045 "Voltage of cell 45"; +CM_ SG_ 624 CellVoltage_046 "Voltage of cell 46"; +CM_ SG_ 624 CellVoltage_047 "Voltage of cell 47"; +CM_ SG_ 624 CellVoltage_048 "Voltage of cell 48"; +CM_ SG_ 624 CellVoltage_049 "Voltage of cell 49"; +CM_ SG_ 624 CellVoltage_050 "Voltage of cell 50"; +CM_ SG_ 624 CellVoltage_051 "Voltage of cell 51"; +CM_ SG_ 624 CellVoltage_052 "Voltage of cell 52"; +CM_ SG_ 624 CellVoltage_053 "Voltage of cell 53"; +CM_ SG_ 624 CellVoltage_054 "Voltage of cell 54"; +CM_ SG_ 624 CellVoltage_055 "Voltage of cell 55"; +CM_ SG_ 624 CellVoltage_056 "Voltage of cell 56"; +CM_ SG_ 624 CellVoltage_057 "Voltage of cell 57"; +CM_ SG_ 624 CellVoltage_058 "Voltage of cell 58"; +CM_ SG_ 624 CellVoltage_059 "Voltage of cell 59"; +CM_ SG_ 624 CellVoltage_060 "Voltage of cell 60"; +CM_ SG_ 624 CellVoltage_061 "Voltage of cell 61"; +CM_ SG_ 624 CellVoltage_062 "Voltage of cell 62"; +CM_ SG_ 624 CellVoltage_063 "Voltage of cell 63"; +CM_ SG_ 624 CellVoltage_064 "Voltage of cell 64"; +CM_ SG_ 624 CellVoltage_065 "Voltage of cell 65"; +CM_ SG_ 624 CellVoltage_066 "Voltage of cell 66"; +CM_ SG_ 624 CellVoltage_067 "Voltage of cell 67"; +CM_ SG_ 624 CellVoltage_068 "Voltage of cell 68"; +CM_ SG_ 624 CellVoltage_069 "Voltage of cell 69"; +CM_ SG_ 624 CellVoltage_070 "Voltage of cell 70"; +CM_ SG_ 624 CellVoltage_071 "Voltage of cell 71"; +CM_ SG_ 624 CellVoltage_072 "Voltage of cell 72"; +CM_ SG_ 624 CellVoltage_073 "Voltage of cell 73"; +CM_ SG_ 624 CellVoltage_074 "Voltage of cell 74"; +CM_ SG_ 624 CellVoltage_075 "Voltage of cell 75"; +CM_ SG_ 624 CellVoltage_076 "Voltage of cell 76"; +CM_ SG_ 624 CellVoltage_077 "Voltage of cell 77"; +CM_ SG_ 624 CellVoltage_078 "Voltage of cell 78"; +CM_ SG_ 624 CellVoltage_079 "Voltage of cell 79"; +CM_ SG_ 624 CellVoltage_080 "Voltage of cell 80"; +CM_ SG_ 624 CellVoltage_081 "Voltage of cell 81"; +CM_ SG_ 624 CellVoltage_082 "Voltage of cell 82"; +CM_ SG_ 624 CellVoltage_083 "Voltage of cell 83"; +CM_ SG_ 624 CellVoltage_084 "Voltage of cell 84"; +CM_ SG_ 624 CellVoltage_085 "Voltage of cell 85"; +CM_ SG_ 624 CellVoltage_086 "Voltage of cell 86"; +CM_ SG_ 624 CellVoltage_087 "Voltage of cell 87"; +CM_ SG_ 624 CellVoltage_088 "Voltage of cell 88"; +CM_ SG_ 624 CellVoltage_089 "Voltage of cell 89"; +CM_ SG_ 624 CellVoltage_090 "Voltage of cell 90"; +CM_ SG_ 624 CellVoltage_091 "Voltage of cell 91"; +CM_ SG_ 624 CellVoltage_092 "Voltage of cell 92"; +CM_ SG_ 624 CellVoltage_093 "Voltage of cell 93"; +CM_ SG_ 624 CellVoltage_094 "Voltage of cell 94"; +CM_ SG_ 624 CellVoltage_095 "Voltage of cell 95"; +CM_ SG_ 624 CellVoltage_096 "Voltage of cell 96"; +CM_ SG_ 624 CellVoltage_097 "Voltage of cell 97"; +CM_ SG_ 624 CellVoltage_098 "Voltage of cell 98"; +CM_ SG_ 624 CellVoltage_099 "Voltage of cell 99"; +CM_ SG_ 624 CellVoltage_100 "Voltage of cell 100"; +CM_ SG_ 624 CellVoltage_101 "Voltage of cell 101"; +CM_ SG_ 624 CellVoltage_102 "Voltage of cell 102"; +CM_ SG_ 624 CellVoltage_103 "Voltage of cell 103"; +CM_ SG_ 624 CellVoltage_104 "Voltage of cell 104"; +CM_ SG_ 624 CellVoltage_105 "Voltage of cell 105"; +CM_ SG_ 624 CellVoltage_106 "Voltage of cell 106"; +CM_ SG_ 624 CellVoltage_107 "Voltage of cell 107"; +CM_ SG_ 624 CellVoltage_108 "Voltage of cell 108"; +CM_ SG_ 624 CellVoltage_109 "Voltage of cell 109"; +CM_ SG_ 624 CellVoltage_110 "Voltage of cell 110"; +CM_ SG_ 624 CellVoltage_111 "Voltage of cell 111"; +CM_ SG_ 624 CellVoltage_112 "Voltage of cell 112"; +CM_ SG_ 624 CellVoltage_113 "Voltage of cell 113"; +CM_ SG_ 624 CellVoltage_114 "Voltage of cell 114"; +CM_ SG_ 624 CellVoltage_115 "Voltage of cell 115"; +CM_ SG_ 624 CellVoltage_116 "Voltage of cell 116"; +CM_ SG_ 624 CellVoltage_117 "Voltage of cell 117"; +CM_ SG_ 624 CellVoltage_118 "Voltage of cell 118"; +CM_ SG_ 624 CellVoltage_119 "Voltage of cell 119"; +CM_ SG_ 624 CellVoltage_120 "Voltage of cell 120"; +CM_ SG_ 624 CellVoltage_121 "Voltage of cell 121"; +CM_ SG_ 624 CellVoltage_122 "Voltage of cell 122"; +CM_ SG_ 624 CellVoltage_123 "Voltage of cell 123"; +CM_ SG_ 624 CellVoltage_124 "Voltage of cell 124"; +CM_ SG_ 624 CellVoltage_125 "Voltage of cell 125"; +CM_ SG_ 624 CellVoltage_126 "Voltage of cell 126"; +CM_ SG_ 624 CellVoltage_127 "Voltage of cell 127"; +CM_ SG_ 624 CellVoltage_128 "Voltage of cell 128"; +CM_ SG_ 624 CellVoltage_129 "Voltage of cell 129"; +CM_ SG_ 624 CellVoltage_130 "Voltage of cell 130"; +CM_ SG_ 624 CellVoltage_131 "Voltage of cell 131"; +CM_ SG_ 624 CellVoltage_132 "Voltage of cell 132"; +CM_ SG_ 624 CellVoltage_133 "Voltage of cell 133"; +CM_ SG_ 624 CellVoltage_134 "Voltage of cell 134"; +CM_ SG_ 624 CellVoltage_135 "Voltage of cell 135"; +CM_ SG_ 624 CellVoltage_136 "Voltage of cell 136"; +CM_ SG_ 624 CellVoltage_137 "Voltage of cell 137"; +CM_ SG_ 624 CellVoltage_138 "Voltage of cell 138"; +CM_ SG_ 624 CellVoltage_139 "Voltage of cell 139"; +CM_ SG_ 624 CellVoltage_140 "Voltage of cell 140"; +CM_ SG_ 624 CellVoltage_141 "Voltage of cell 141"; +CM_ SG_ 624 CellVoltage_142 "Voltage of cell 142"; +CM_ SG_ 624 CellVoltage_143 "Voltage of cell 143"; +CM_ SG_ 624 CellVoltage_144 "Voltage of cell 144"; +CM_ SG_ 624 CellVoltage_145 "Voltage of cell 145"; +CM_ SG_ 624 CellVoltage_146 "Voltage of cell 146"; +CM_ SG_ 624 CellVoltage_147 "Voltage of cell 147"; +CM_ SG_ 624 CellVoltage_148 "Voltage of cell 148"; +CM_ SG_ 624 CellVoltage_149 "Voltage of cell 149"; +CM_ SG_ 624 CellVoltage_150 "Voltage of cell 150"; +CM_ SG_ 624 CellVoltage_151 "Voltage of cell 151"; +CM_ SG_ 624 CellVoltage_152 "Voltage of cell 152"; +CM_ SG_ 624 CellVoltage_153 "Voltage of cell 153"; +CM_ SG_ 624 CellVoltage_154 "Voltage of cell 154"; +CM_ SG_ 624 CellVoltage_155 "Voltage of cell 155"; +CM_ SG_ 624 CellVoltage_156 "Voltage of cell 156"; +CM_ SG_ 624 CellVoltage_157 "Voltage of cell 157"; +CM_ SG_ 624 CellVoltage_158 "Voltage of cell 158"; +CM_ SG_ 624 CellVoltage_159 "Voltage of cell 159"; +CM_ SG_ 624 CellVoltage_160 "Voltage of cell 160"; +CM_ SG_ 624 CellVoltage_161 "Voltage of cell 161"; +CM_ SG_ 624 CellVoltage_162 "Voltage of cell 162"; +CM_ SG_ 624 CellVoltage_163 "Voltage of cell 163"; +CM_ SG_ 624 CellVoltage_164 "Voltage of cell 164"; +CM_ SG_ 624 CellVoltage_165 "Voltage of cell 165"; +CM_ SG_ 624 CellVoltage_166 "Voltage of cell 166"; +CM_ SG_ 624 CellVoltage_167 "Voltage of cell 167"; +CM_ SG_ 624 CellVoltage_168 "Voltage of cell 168"; +CM_ SG_ 624 CellVoltage_169 "Voltage of cell 169"; +CM_ SG_ 624 CellVoltage_170 "Voltage of cell 170"; +CM_ SG_ 624 CellVoltage_171 "Voltage of cell 171"; +CM_ SG_ 624 CellVoltage_172 "Voltage of cell 172"; +CM_ SG_ 624 CellVoltage_173 "Voltage of cell 173"; +CM_ SG_ 624 CellVoltage_174 "Voltage of cell 174"; +CM_ SG_ 624 CellVoltage_175 "Voltage of cell 175"; +CM_ SG_ 624 CellVoltage_176 "Voltage of cell 176"; +CM_ SG_ 624 CellVoltage_177 "Voltage of cell 177"; +CM_ SG_ 624 CellVoltage_178 "Voltage of cell 178"; +CM_ SG_ 624 CellVoltage_179 "Voltage of cell 179"; +CM_ SG_ 624 CellVoltage_180 "Voltage of cell 180"; +CM_ SG_ 624 CellVoltage_181 "Voltage of cell 181"; +CM_ SG_ 624 CellVoltage_182 "Voltage of cell 182"; +CM_ SG_ 624 CellVoltage_183 "Voltage of cell 183"; +CM_ SG_ 624 CellVoltage_184 "Voltage of cell 184"; +CM_ SG_ 624 CellVoltage_185 "Voltage of cell 185"; +CM_ SG_ 624 CellVoltage_186 "Voltage of cell 186"; +CM_ SG_ 624 CellVoltage_187 "Voltage of cell 187"; +CM_ SG_ 624 CellVoltage_188 "Voltage of cell 188"; +CM_ SG_ 624 CellVoltage_189 "Voltage of cell 189"; +CM_ SG_ 624 CellVoltage_190 "Voltage of cell 190"; +CM_ SG_ 624 CellVoltage_191 "Voltage of cell 191"; +CM_ SG_ 624 CellVoltage_192 "Voltage of cell 192"; +CM_ SG_ 624 CellVoltage_193 "Voltage of cell 193"; +CM_ SG_ 624 CellVoltage_194 "Voltage of cell 194"; +CM_ SG_ 624 CellVoltage_195 "Voltage of cell 195"; +CM_ SG_ 624 CellVoltage_196 "Voltage of cell 196"; +CM_ SG_ 624 CellVoltage_197 "Voltage of cell 197"; +CM_ SG_ 624 CellVoltage_198 "Voltage of cell 198"; +CM_ SG_ 624 CellVoltage_199 "Voltage of cell 199"; +CM_ SG_ 624 CellVoltage_200 "Voltage of cell 200"; +CM_ SG_ 624 CellVoltage_201 "Voltage of cell 201"; +CM_ SG_ 624 CellVoltage_202 "Voltage of cell 202"; +CM_ SG_ 624 CellVoltage_203 "Voltage of cell 203"; +CM_ SG_ 624 CellVoltage_204 "Voltage of cell 204"; +CM_ SG_ 624 CellVoltage_205 "Voltage of cell 205"; +CM_ SG_ 624 CellVoltage_206 "Voltage of cell 206"; +CM_ SG_ 624 CellVoltage_207 "Voltage of cell 207"; +CM_ SG_ 624 CellVoltage_208 "Voltage of cell 208"; +CM_ SG_ 624 CellVoltage_209 "Voltage of cell 209"; +CM_ SG_ 624 CellVoltage_210 "Voltage of cell 210"; +CM_ SG_ 624 CellVoltage_211 "Voltage of cell 211"; +CM_ SG_ 624 CellVoltage_212 "Voltage of cell 212"; +CM_ SG_ 624 CellVoltage_213 "Voltage of cell 213"; +CM_ SG_ 624 CellVoltage_214 "Voltage of cell 214"; +CM_ SG_ 624 CellVoltage_215 "Voltage of cell 215"; CM_ BO_ 964 "(in:can_cbs_rx_aerosol-sensor.c:CANRX_AerosolSensor, fv:rx)"; +CM_ BO_ 544 "Message contains general BMS state information (in:can_cbs_tx_bms-state.c:CANTX_BmsState, fv:tx)"; +CM_ SG_ 544 BmsState "Shows the internal state of the BMS state machine"; +CM_ SG_ 544 NumberOfConnectedStrings "Shows the number of connected strings, i.e., the strings in which the contactors are closed"; +CM_ SG_ 544 GeneralError "Indicates whether any error is present on the BMS or not"; +CM_ SG_ 544 GeneralWarning "Indicates whether any warning is present on the BMS or not"; +CM_ SG_ 544 McuDieTemperatureError "Indicates whether there is an MCU temperature error or not"; +CM_ SG_ 544 BmsMasterPcbOvertemperatureError "Indicates whether a too high PCB temperature (i.e., overtemperature) of the BMS Master has been detected or not"; +CM_ SG_ 544 BmsMasterPcbUndertemperatureErro "Indicates whether a too low PCB temperature (i.e., undertemperature) of the BMS Master has been detected or not"; +CM_ SG_ 544 PrechargeVoltageError "Indicates whether precharging was successful or needed to aborted because of a too high voltage difference"; +CM_ SG_ 544 PrechargeCurrentError "Indicates whether precharging was successful or needed to aborted because of a current limit violation"; +CM_ SG_ 544 HeaterState "Indicates whether the heater is active or not"; +CM_ SG_ 544 CoolingState "Indicates whether cooling is active or not"; +CM_ SG_ 544 InsulationMonitoring "Indicates whether the insulation monitoring device is active or not"; +CM_ SG_ 544 ChargingComplete "Indicates whether charging is completed or not"; +CM_ SG_ 544 EmergencyShutoff "Indicates that the BMS is preparing to open the contactors soon due to detected error"; +CM_ SG_ 544 MainFuseBlown "Indicates whether there is the main fuse is blown or not"; +CM_ SG_ 544 InterlockState "Indicates whether the is closed or not"; +CM_ SG_ 544 NumberOfDeactivatedStrings "Shows the number of not connected strings, i.e., the strings in which the contactors are open"; +CM_ SG_ 544 InsulationError "Indicates whether an insulation error has been detected or not"; +CM_ SG_ 544 CanTimingError "Indicates whether there is CAN timing error or not"; +CM_ SG_ 544 PackOvercurrentChargeError "Indicates whether a too high pack current (i.e., overcurrent) has been detected during charing or not"; +CM_ SG_ 544 PackOvercurrentDischargeError "Indicates whether a too high pack current (i.e., overcurrent) has been detected during discharging or not"; +CM_ SG_ 544 SystemMonitoringError "Indicates whether a task has violated its timing requirements"; +CM_ SG_ 544 AlertFlag "Indicates whether any alter flag is set or not"; +CM_ SG_ 544 NvramCrcError "Indicates whether a CRC error has been detected in the NVRAM or not"; +CM_ BO_ 545 "Details on flags transmitted by the 'BmsState' message (in:can_cbs_tx_bms-state-details.c:CANTX_BmsStateDetails, fv:tx)"; +CM_ SG_ 545 TimingViolationEngineTask "Indicates whether the timing of the engine task has been violated."; +CM_ SG_ 545 TimingViolation1msTask "Indicates whether the timing of the 1ms task has been violated."; +CM_ SG_ 545 TimingViolation10msTask "Indicates whether the timing of the 10ms task has been violated."; +CM_ SG_ 545 TimingViolation100msTask "Indicates whether the timing of the 100ms task has been violated."; +CM_ SG_ 545 TimingViolation100msAlgoTask "Indicates whether the timing of the 100ms algorithm task has been violated."; +CM_ SG_ 545 TimingViolation10msTaskRecorded "Indicates whether a violation of the timing of the 10ms task has been recorded."; +CM_ SG_ 545 TimingViolation100msTaskRecorded "Indicates whether a violation of the timing of the 100ms task has been recorded."; +CM_ SG_ 545 TimingViolation100msAlgoTaskReco "Indicates whether a violation of the timing of the 100ms algorithm task has been recorded."; +CM_ SG_ 545 TimingViolationEngineTaskRecorde "Indicates whether a violation of the timing of the engine task has been recorded."; +CM_ SG_ 545 TimingViolation1msTaskRecorded "Indicates whether a violation of the timing of the 1ms task has been recorded."; +CM_ BO_ 528 "Requests specific BMS behavior and gives the BMS required information from the higher-level control unit (in:can_cbs_rx_bms-state-request.c:CANRX_BmsStateRequest, fv:rx)"; +CM_ SG_ 528 RequestBmsMode "Instructs the BMS the to try to switch to the requested mode"; +CM_ SG_ 528 ActivateBalancing "Instructs the BMS to activate/deactivate balancing"; +CM_ SG_ 528 SetBalancingThreshold "Sets the required voltage difference to minimum cell voltage to activate balancing"; +CM_ SG_ 528 IndicatePrechargeType "Notifies the BMS whether the battery system is externally precharged or not"; +CM_ SG_ 528 ResetPersistentFlags "Instructs the BMS the to reset persistent flags"; +CM_ SG_ 528 ChargerConnected "Tells the BMS whether a charger is connected or not"; +CM_ SG_ 528 DisableInsulationMonitoring "Instructs the BMS to check/not check the battery system insulation"; +CM_ BO_ 608 "Cell temperature measurement data (in:can_cbs_tx_cell-temperatures.c:CANTX_CellTemperatures, fv:tx)"; +CM_ SG_ 608 CellTemperature_000 "Temperature of cell 0"; +CM_ SG_ 608 CellTemperature_001 "Temperature of cell 1"; +CM_ SG_ 608 CellTemperature_002 "Temperature of cell 2"; +CM_ SG_ 608 CellTemperature_003 "Temperature of cell 3"; +CM_ SG_ 608 CellTemperature_004 "Temperature of cell 4"; +CM_ SG_ 608 CellTemperature_005 "Temperature of cell 5"; +CM_ SG_ 608 CellTemperature_006 "Temperature of cell 6"; +CM_ SG_ 608 CellTemperature_007 "Temperature of cell 7"; +CM_ SG_ 608 CellTemperature_008 "Temperature of cell 8"; +CM_ SG_ 608 CellTemperature_009 "Temperature of cell 9"; +CM_ SG_ 608 CellTemperature_010 "Temperature of cell 10"; +CM_ SG_ 608 CellTemperature_011 "Temperature of cell 11"; +CM_ SG_ 608 CellTemperature_012 "Temperature of cell 12"; +CM_ SG_ 608 CellTemperature_013 "Temperature of cell 13"; +CM_ SG_ 608 CellTemperature_014 "Temperature of cell 14"; +CM_ SG_ 608 CellTemperature_015 "Temperature of cell 15"; +CM_ SG_ 608 CellTemperature_016 "Temperature of cell 16"; +CM_ SG_ 608 CellTemperature_017 "Temperature of cell 17"; +CM_ SG_ 608 CellTemperature_018 "Temperature of cell 18"; +CM_ SG_ 608 CellTemperature_019 "Temperature of cell 19"; +CM_ SG_ 608 CellTemperature_020 "Temperature of cell 20"; +CM_ SG_ 608 CellTemperature_021 "Temperature of cell 21"; +CM_ SG_ 608 CellTemperature_022 "Temperature of cell 22"; +CM_ SG_ 608 CellTemperature_023 "Temperature of cell 23"; +CM_ SG_ 608 CellTemperature_024 "Temperature of cell 24"; +CM_ SG_ 608 CellTemperature_025 "Temperature of cell 25"; +CM_ SG_ 608 CellTemperature_026 "Temperature of cell 26"; +CM_ SG_ 608 CellTemperature_027 "Temperature of cell 27"; +CM_ SG_ 608 CellTemperature_028 "Temperature of cell 28"; +CM_ SG_ 608 CellTemperature_029 "Temperature of cell 29"; +CM_ SG_ 608 CellTemperature_030 "Temperature of cell 30"; +CM_ SG_ 608 CellTemperature_031 "Temperature of cell 31"; +CM_ SG_ 608 CellTemperature_032 "Temperature of cell 32"; +CM_ SG_ 608 CellTemperature_033 "Temperature of cell 33"; +CM_ SG_ 608 CellTemperature_034 "Temperature of cell 34"; +CM_ SG_ 608 CellTemperature_035 "Temperature of cell 35"; +CM_ SG_ 608 CellTemperature_036 "Temperature of cell 36"; +CM_ SG_ 608 CellTemperature_037 "Temperature of cell 37"; +CM_ SG_ 608 CellTemperature_038 "Temperature of cell 38"; +CM_ SG_ 608 CellTemperature_039 "Temperature of cell 39"; +CM_ SG_ 608 CellTemperature_040 "Temperature of cell 40"; +CM_ SG_ 608 CellTemperature_041 "Temperature of cell 41"; +CM_ SG_ 608 CellTemperature_042 "Temperature of cell 42"; +CM_ SG_ 608 CellTemperature_043 "Temperature of cell 43"; +CM_ SG_ 608 CellTemperature_044 "Temperature of cell 44"; +CM_ SG_ 608 CellTemperature_045 "Temperature of cell 45"; +CM_ SG_ 608 CellTemperature_046 "Temperature of cell 46"; +CM_ SG_ 608 CellTemperature_047 "Temperature of cell 47"; +CM_ SG_ 608 CellTemperature_048 "Temperature of cell 48"; +CM_ SG_ 608 CellTemperature_049 "Temperature of cell 49"; +CM_ SG_ 608 CellTemperature_050 "Temperature of cell 50"; +CM_ SG_ 608 CellTemperature_051 "Temperature of cell 51"; +CM_ SG_ 608 CellTemperature_052 "Temperature of cell 52"; +CM_ SG_ 608 CellTemperature_053 "Temperature of cell 53"; +CM_ SG_ 608 CellTemperature_054 "Temperature of cell 54"; +CM_ SG_ 608 CellTemperature_055 "Temperature of cell 55"; +CM_ SG_ 608 CellTemperature_056 "Temperature of cell 56"; +CM_ SG_ 608 CellTemperature_057 "Temperature of cell 57"; +CM_ SG_ 608 CellTemperature_058 "Temperature of cell 58"; +CM_ SG_ 608 CellTemperature_059 "Temperature of cell 59"; +CM_ SG_ 608 CellTemperature_060 "Temperature of cell 60"; +CM_ SG_ 608 CellTemperature_061 "Temperature of cell 61"; +CM_ SG_ 608 CellTemperature_062 "Temperature of cell 62"; +CM_ SG_ 608 CellTemperature_063 "Temperature of cell 63"; +CM_ SG_ 608 CellTemperature_064 "Temperature of cell 64"; +CM_ SG_ 608 CellTemperature_065 "Temperature of cell 65"; +CM_ SG_ 608 CellTemperature_066 "Temperature of cell 66"; +CM_ SG_ 608 CellTemperature_067 "Temperature of cell 67"; +CM_ SG_ 608 CellTemperature_068 "Temperature of cell 68"; +CM_ SG_ 608 CellTemperature_069 "Temperature of cell 69"; +CM_ SG_ 608 CellTemperature_070 "Temperature of cell 70"; +CM_ SG_ 608 CellTemperature_071 "Temperature of cell 71"; +CM_ SG_ 608 CellTemperature_072 "Temperature of cell 72"; +CM_ SG_ 608 CellTemperature_073 "Temperature of cell 73"; +CM_ SG_ 608 CellTemperature_074 "Temperature of cell 74"; +CM_ SG_ 608 CellTemperature_075 "Temperature of cell 75"; +CM_ SG_ 608 CellTemperature_076 "Temperature of cell 76"; +CM_ SG_ 608 CellTemperature_077 "Temperature of cell 77"; +CM_ SG_ 608 CellTemperature_078 "Temperature of cell 78"; +CM_ SG_ 608 CellTemperature_079 "Temperature of cell 79"; +CM_ SG_ 608 CellTemperature_080 "Temperature of cell 80"; +CM_ SG_ 608 CellTemperature_081 "Temperature of cell 81"; +CM_ SG_ 608 CellTemperature_082 "Temperature of cell 82"; +CM_ SG_ 608 CellTemperature_083 "Temperature of cell 83"; +CM_ SG_ 608 CellTemperature_084 "Temperature of cell 84"; +CM_ SG_ 608 CellTemperature_085 "Temperature of cell 85"; +CM_ SG_ 608 CellTemperature_086 "Temperature of cell 86"; +CM_ SG_ 608 CellTemperature_087 "Temperature of cell 87"; +CM_ SG_ 608 CellTemperature_088 "Temperature of cell 88"; +CM_ SG_ 608 CellTemperature_089 "Temperature of cell 89"; +CM_ SG_ 608 CellTemperature_090 "Temperature of cell 90"; +CM_ SG_ 608 CellTemperature_091 "Temperature of cell 91"; +CM_ SG_ 608 CellTemperature_092 "Temperature of cell 92"; +CM_ SG_ 608 CellTemperature_093 "Temperature of cell 93"; +CM_ SG_ 608 CellTemperature_094 "Temperature of cell 94"; +CM_ SG_ 608 CellTemperature_095 "Temperature of cell 95"; +CM_ SG_ 608 CellTemperature_096 "Temperature of cell 96"; +CM_ SG_ 608 CellTemperature_097 "Temperature of cell 97"; +CM_ SG_ 608 CellTemperature_098 "Temperature of cell 98"; +CM_ SG_ 608 CellTemperature_099 "Temperature of cell 99"; +CM_ SG_ 608 CellTemperature_100 "Temperature of cell 100"; +CM_ SG_ 608 CellTemperature_101 "Temperature of cell 101"; +CM_ SG_ 608 CellTemperature_102 "Temperature of cell 102"; +CM_ SG_ 608 CellTemperature_103 "Temperature of cell 103"; +CM_ SG_ 608 CellTemperature_104 "Temperature of cell 104"; +CM_ SG_ 608 CellTemperature_105 "Temperature of cell 105"; +CM_ SG_ 608 CellTemperature_106 "Temperature of cell 106"; +CM_ SG_ 608 CellTemperature_107 "Temperature of cell 107"; +CM_ SG_ 608 CellTemperature_108 "Temperature of cell 108"; +CM_ SG_ 608 CellTemperature_109 "Temperature of cell 109"; +CM_ SG_ 608 CellTemperature_110 "Temperature of cell 110"; +CM_ SG_ 608 CellTemperature_111 "Temperature of cell 111"; +CM_ SG_ 608 CellTemperature_112 "Temperature of cell 112"; +CM_ SG_ 608 CellTemperature_113 "Temperature of cell 113"; +CM_ SG_ 608 CellTemperature_114 "Temperature of cell 114"; +CM_ SG_ 608 CellTemperature_115 "Temperature of cell 115"; +CM_ SG_ 608 CellTemperature_116 "Temperature of cell 116"; +CM_ SG_ 608 CellTemperature_117 "Temperature of cell 117"; +CM_ SG_ 608 CellTemperature_118 "Temperature of cell 118"; +CM_ SG_ 608 CellTemperature_119 "Temperature of cell 119"; +CM_ SG_ 608 CellTemperature_120 "Temperature of cell 120"; +CM_ SG_ 608 CellTemperature_121 "Temperature of cell 121"; +CM_ SG_ 608 CellTemperature_122 "Temperature of cell 122"; +CM_ SG_ 608 CellTemperature_123 "Temperature of cell 123"; +CM_ SG_ 608 CellTemperature_124 "Temperature of cell 124"; +CM_ SG_ 608 CellTemperature_125 "Temperature of cell 125"; +CM_ SG_ 608 CellTemperature_126 "Temperature of cell 126"; +CM_ SG_ 608 CellTemperature_127 "Temperature of cell 127"; +CM_ SG_ 608 CellTemperature_128 "Temperature of cell 128"; +CM_ SG_ 608 CellTemperature_129 "Temperature of cell 129"; +CM_ SG_ 608 CellTemperature_130 "Temperature of cell 130"; +CM_ SG_ 608 CellTemperature_131 "Temperature of cell 131"; +CM_ SG_ 608 CellTemperature_132 "Temperature of cell 132"; +CM_ SG_ 608 CellTemperature_133 "Temperature of cell 133"; +CM_ SG_ 608 CellTemperature_134 "Temperature of cell 134"; +CM_ SG_ 608 CellTemperature_135 "Temperature of cell 135"; +CM_ SG_ 608 CellTemperature_136 "Temperature of cell 136"; +CM_ SG_ 608 CellTemperature_137 "Temperature of cell 137"; +CM_ SG_ 608 CellTemperature_138 "Temperature of cell 138"; +CM_ SG_ 608 CellTemperature_139 "Temperature of cell 139"; +CM_ SG_ 608 CellTemperature_140 "Temperature of cell 140"; +CM_ SG_ 608 CellTemperature_141 "Temperature of cell 141"; +CM_ SG_ 608 CellTemperature_142 "Temperature of cell 142"; +CM_ SG_ 608 CellTemperature_143 "Temperature of cell 143"; +CM_ SG_ 608 CellTemperature_144 "Temperature of cell 144"; +CM_ SG_ 608 CellTemperature_145 "Temperature of cell 145"; +CM_ SG_ 608 CellTemperature_146 "Temperature of cell 146"; +CM_ SG_ 608 CellTemperature_147 "Temperature of cell 147"; +CM_ SG_ 608 CellTemperature_148 "Temperature of cell 148"; +CM_ SG_ 608 CellTemperature_149 "Temperature of cell 149"; +CM_ SG_ 608 CellTemperature_150 "Temperature of cell 150"; +CM_ SG_ 608 CellTemperature_151 "Temperature of cell 151"; +CM_ SG_ 608 CellTemperature_152 "Temperature of cell 152"; +CM_ SG_ 608 CellTemperature_153 "Temperature of cell 153"; +CM_ SG_ 608 CellTemperature_154 "Temperature of cell 154"; +CM_ SG_ 608 CellTemperature_155 "Temperature of cell 155"; +CM_ SG_ 608 CellTemperature_156 "Temperature of cell 156"; +CM_ SG_ 608 CellTemperature_157 "Temperature of cell 157"; +CM_ SG_ 608 CellTemperature_158 "Temperature of cell 158"; +CM_ SG_ 608 CellTemperature_159 "Temperature of cell 159"; +CM_ SG_ 608 CellTemperature_160 "Temperature of cell 160"; +CM_ SG_ 608 CellTemperature_161 "Temperature of cell 161"; +CM_ SG_ 608 CellTemperature_162 "Temperature of cell 162"; +CM_ SG_ 608 CellTemperature_163 "Temperature of cell 163"; +CM_ SG_ 608 CellTemperature_164 "Temperature of cell 164"; +CM_ SG_ 608 CellTemperature_165 "Temperature of cell 165"; +CM_ SG_ 608 CellTemperature_166 "Temperature of cell 166"; +CM_ SG_ 608 CellTemperature_167 "Temperature of cell 167"; +CM_ SG_ 608 CellTemperature_168 "Temperature of cell 168"; +CM_ SG_ 608 CellTemperature_169 "Temperature of cell 169"; +CM_ SG_ 608 CellTemperature_170 "Temperature of cell 170"; +CM_ SG_ 608 CellTemperature_171 "Temperature of cell 171"; +CM_ SG_ 608 CellTemperature_172 "Temperature of cell 172"; +CM_ SG_ 608 CellTemperature_173 "Temperature of cell 173"; +CM_ SG_ 608 CellTemperature_174 "Temperature of cell 174"; +CM_ SG_ 608 CellTemperature_175 "Temperature of cell 175"; +CM_ SG_ 608 CellTemperature_176 "Temperature of cell 176"; +CM_ SG_ 608 CellTemperature_177 "Temperature of cell 177"; +CM_ SG_ 608 CellTemperature_178 "Temperature of cell 178"; +CM_ SG_ 608 CellTemperature_179 "Temperature of cell 179"; +CM_ BO_ 592 "Cell voltage measurement data (in:can_cbs_tx_cell-voltages.c:CANTX_CellVoltages, fv:tx)"; +CM_ SG_ 592 CellVoltage_000 "Voltage of cell 0"; +CM_ SG_ 592 CellVoltage_001 "Voltage of cell 1"; +CM_ SG_ 592 CellVoltage_002 "Voltage of cell 2"; +CM_ SG_ 592 CellVoltage_003 "Voltage of cell 3"; +CM_ SG_ 592 CellVoltage_004 "Voltage of cell 4"; +CM_ SG_ 592 CellVoltage_005 "Voltage of cell 5"; +CM_ SG_ 592 CellVoltage_006 "Voltage of cell 6"; +CM_ SG_ 592 CellVoltage_007 "Voltage of cell 7"; +CM_ SG_ 592 CellVoltage_008 "Voltage of cell 8"; +CM_ SG_ 592 CellVoltage_009 "Voltage of cell 9"; +CM_ SG_ 592 CellVoltage_010 "Voltage of cell 10"; +CM_ SG_ 592 CellVoltage_011 "Voltage of cell 11"; +CM_ SG_ 592 CellVoltage_012 "Voltage of cell 12"; +CM_ SG_ 592 CellVoltage_013 "Voltage of cell 13"; +CM_ SG_ 592 CellVoltage_014 "Voltage of cell 14"; +CM_ SG_ 592 CellVoltage_015 "Voltage of cell 15"; +CM_ SG_ 592 CellVoltage_016 "Voltage of cell 16"; +CM_ SG_ 592 CellVoltage_017 "Voltage of cell 17"; +CM_ SG_ 592 CellVoltage_018 "Voltage of cell 18"; +CM_ SG_ 592 CellVoltage_019 "Voltage of cell 19"; +CM_ SG_ 592 CellVoltage_020 "Voltage of cell 20"; +CM_ SG_ 592 CellVoltage_021 "Voltage of cell 21"; +CM_ SG_ 592 CellVoltage_022 "Voltage of cell 22"; +CM_ SG_ 592 CellVoltage_023 "Voltage of cell 23"; +CM_ SG_ 592 CellVoltage_024 "Voltage of cell 24"; +CM_ SG_ 592 CellVoltage_025 "Voltage of cell 25"; +CM_ SG_ 592 CellVoltage_026 "Voltage of cell 26"; +CM_ SG_ 592 CellVoltage_027 "Voltage of cell 27"; +CM_ SG_ 592 CellVoltage_028 "Voltage of cell 28"; +CM_ SG_ 592 CellVoltage_029 "Voltage of cell 29"; +CM_ SG_ 592 CellVoltage_030 "Voltage of cell 30"; +CM_ SG_ 592 CellVoltage_031 "Voltage of cell 31"; +CM_ SG_ 592 CellVoltage_032 "Voltage of cell 32"; +CM_ SG_ 592 CellVoltage_033 "Voltage of cell 33"; +CM_ SG_ 592 CellVoltage_034 "Voltage of cell 34"; +CM_ SG_ 592 CellVoltage_035 "Voltage of cell 35"; +CM_ SG_ 592 CellVoltage_036 "Voltage of cell 36"; +CM_ SG_ 592 CellVoltage_037 "Voltage of cell 37"; +CM_ SG_ 592 CellVoltage_038 "Voltage of cell 38"; +CM_ SG_ 592 CellVoltage_039 "Voltage of cell 39"; +CM_ SG_ 592 CellVoltage_040 "Voltage of cell 40"; +CM_ SG_ 592 CellVoltage_041 "Voltage of cell 41"; +CM_ SG_ 592 CellVoltage_042 "Voltage of cell 42"; +CM_ SG_ 592 CellVoltage_043 "Voltage of cell 43"; +CM_ SG_ 592 CellVoltage_044 "Voltage of cell 44"; +CM_ SG_ 592 CellVoltage_045 "Voltage of cell 45"; +CM_ SG_ 592 CellVoltage_046 "Voltage of cell 46"; +CM_ SG_ 592 CellVoltage_047 "Voltage of cell 47"; +CM_ SG_ 592 CellVoltage_048 "Voltage of cell 48"; +CM_ SG_ 592 CellVoltage_049 "Voltage of cell 49"; +CM_ SG_ 592 CellVoltage_050 "Voltage of cell 50"; +CM_ SG_ 592 CellVoltage_051 "Voltage of cell 51"; +CM_ SG_ 592 CellVoltage_052 "Voltage of cell 52"; +CM_ SG_ 592 CellVoltage_053 "Voltage of cell 53"; +CM_ SG_ 592 CellVoltage_054 "Voltage of cell 54"; +CM_ SG_ 592 CellVoltage_055 "Voltage of cell 55"; +CM_ SG_ 592 CellVoltage_056 "Voltage of cell 56"; +CM_ SG_ 592 CellVoltage_057 "Voltage of cell 57"; +CM_ SG_ 592 CellVoltage_058 "Voltage of cell 58"; +CM_ SG_ 592 CellVoltage_059 "Voltage of cell 59"; +CM_ SG_ 592 CellVoltage_060 "Voltage of cell 60"; +CM_ SG_ 592 CellVoltage_061 "Voltage of cell 61"; +CM_ SG_ 592 CellVoltage_062 "Voltage of cell 62"; +CM_ SG_ 592 CellVoltage_063 "Voltage of cell 63"; +CM_ SG_ 592 CellVoltage_064 "Voltage of cell 64"; +CM_ SG_ 592 CellVoltage_065 "Voltage of cell 65"; +CM_ SG_ 592 CellVoltage_066 "Voltage of cell 66"; +CM_ SG_ 592 CellVoltage_067 "Voltage of cell 67"; +CM_ SG_ 592 CellVoltage_068 "Voltage of cell 68"; +CM_ SG_ 592 CellVoltage_069 "Voltage of cell 69"; +CM_ SG_ 592 CellVoltage_070 "Voltage of cell 70"; +CM_ SG_ 592 CellVoltage_071 "Voltage of cell 71"; +CM_ SG_ 592 CellVoltage_072 "Voltage of cell 72"; +CM_ SG_ 592 CellVoltage_073 "Voltage of cell 73"; +CM_ SG_ 592 CellVoltage_074 "Voltage of cell 74"; +CM_ SG_ 592 CellVoltage_075 "Voltage of cell 75"; +CM_ SG_ 592 CellVoltage_076 "Voltage of cell 76"; +CM_ SG_ 592 CellVoltage_077 "Voltage of cell 77"; +CM_ SG_ 592 CellVoltage_078 "Voltage of cell 78"; +CM_ SG_ 592 CellVoltage_079 "Voltage of cell 79"; +CM_ SG_ 592 CellVoltage_080 "Voltage of cell 80"; +CM_ SG_ 592 CellVoltage_081 "Voltage of cell 81"; +CM_ SG_ 592 CellVoltage_082 "Voltage of cell 82"; +CM_ SG_ 592 CellVoltage_083 "Voltage of cell 83"; +CM_ SG_ 592 CellVoltage_084 "Voltage of cell 84"; +CM_ SG_ 592 CellVoltage_085 "Voltage of cell 85"; +CM_ SG_ 592 CellVoltage_086 "Voltage of cell 86"; +CM_ SG_ 592 CellVoltage_087 "Voltage of cell 87"; +CM_ SG_ 592 CellVoltage_088 "Voltage of cell 88"; +CM_ SG_ 592 CellVoltage_089 "Voltage of cell 89"; +CM_ SG_ 592 CellVoltage_090 "Voltage of cell 90"; +CM_ SG_ 592 CellVoltage_091 "Voltage of cell 91"; +CM_ SG_ 592 CellVoltage_092 "Voltage of cell 92"; +CM_ SG_ 592 CellVoltage_093 "Voltage of cell 93"; +CM_ SG_ 592 CellVoltage_094 "Voltage of cell 94"; +CM_ SG_ 592 CellVoltage_095 "Voltage of cell 95"; +CM_ SG_ 592 CellVoltage_096 "Voltage of cell 96"; +CM_ SG_ 592 CellVoltage_097 "Voltage of cell 97"; +CM_ SG_ 592 CellVoltage_098 "Voltage of cell 98"; +CM_ SG_ 592 CellVoltage_099 "Voltage of cell 99"; +CM_ SG_ 592 CellVoltage_100 "Voltage of cell 100"; +CM_ SG_ 592 CellVoltage_101 "Voltage of cell 101"; +CM_ SG_ 592 CellVoltage_102 "Voltage of cell 102"; +CM_ SG_ 592 CellVoltage_103 "Voltage of cell 103"; +CM_ SG_ 592 CellVoltage_104 "Voltage of cell 104"; +CM_ SG_ 592 CellVoltage_105 "Voltage of cell 105"; +CM_ SG_ 592 CellVoltage_106 "Voltage of cell 106"; +CM_ SG_ 592 CellVoltage_107 "Voltage of cell 107"; +CM_ SG_ 592 CellVoltage_108 "Voltage of cell 108"; +CM_ SG_ 592 CellVoltage_109 "Voltage of cell 109"; +CM_ SG_ 592 CellVoltage_110 "Voltage of cell 110"; +CM_ SG_ 592 CellVoltage_111 "Voltage of cell 111"; +CM_ SG_ 592 CellVoltage_112 "Voltage of cell 112"; +CM_ SG_ 592 CellVoltage_113 "Voltage of cell 113"; +CM_ SG_ 592 CellVoltage_114 "Voltage of cell 114"; +CM_ SG_ 592 CellVoltage_115 "Voltage of cell 115"; +CM_ SG_ 592 CellVoltage_116 "Voltage of cell 116"; +CM_ SG_ 592 CellVoltage_117 "Voltage of cell 117"; +CM_ SG_ 592 CellVoltage_118 "Voltage of cell 118"; +CM_ SG_ 592 CellVoltage_119 "Voltage of cell 119"; +CM_ SG_ 592 CellVoltage_120 "Voltage of cell 120"; +CM_ SG_ 592 CellVoltage_121 "Voltage of cell 121"; +CM_ SG_ 592 CellVoltage_122 "Voltage of cell 122"; +CM_ SG_ 592 CellVoltage_123 "Voltage of cell 123"; +CM_ SG_ 592 CellVoltage_124 "Voltage of cell 124"; +CM_ SG_ 592 CellVoltage_125 "Voltage of cell 125"; +CM_ SG_ 592 CellVoltage_126 "Voltage of cell 126"; +CM_ SG_ 592 CellVoltage_127 "Voltage of cell 127"; +CM_ SG_ 592 CellVoltage_128 "Voltage of cell 128"; +CM_ SG_ 592 CellVoltage_129 "Voltage of cell 129"; +CM_ SG_ 592 CellVoltage_130 "Voltage of cell 130"; +CM_ SG_ 592 CellVoltage_131 "Voltage of cell 131"; +CM_ SG_ 592 CellVoltage_132 "Voltage of cell 132"; +CM_ SG_ 592 CellVoltage_133 "Voltage of cell 133"; +CM_ SG_ 592 CellVoltage_134 "Voltage of cell 134"; +CM_ SG_ 592 CellVoltage_135 "Voltage of cell 135"; +CM_ SG_ 592 CellVoltage_136 "Voltage of cell 136"; +CM_ SG_ 592 CellVoltage_137 "Voltage of cell 137"; +CM_ SG_ 592 CellVoltage_138 "Voltage of cell 138"; +CM_ SG_ 592 CellVoltage_139 "Voltage of cell 139"; +CM_ SG_ 592 CellVoltage_140 "Voltage of cell 140"; +CM_ SG_ 592 CellVoltage_141 "Voltage of cell 141"; +CM_ SG_ 592 CellVoltage_142 "Voltage of cell 142"; +CM_ SG_ 592 CellVoltage_143 "Voltage of cell 143"; +CM_ SG_ 592 CellVoltage_144 "Voltage of cell 144"; +CM_ SG_ 592 CellVoltage_145 "Voltage of cell 145"; +CM_ SG_ 592 CellVoltage_146 "Voltage of cell 146"; +CM_ SG_ 592 CellVoltage_147 "Voltage of cell 147"; +CM_ SG_ 592 CellVoltage_148 "Voltage of cell 148"; +CM_ SG_ 592 CellVoltage_149 "Voltage of cell 149"; +CM_ SG_ 592 CellVoltage_150 "Voltage of cell 150"; +CM_ SG_ 592 CellVoltage_151 "Voltage of cell 151"; +CM_ SG_ 592 CellVoltage_152 "Voltage of cell 152"; +CM_ SG_ 592 CellVoltage_153 "Voltage of cell 153"; +CM_ SG_ 592 CellVoltage_154 "Voltage of cell 154"; +CM_ SG_ 592 CellVoltage_155 "Voltage of cell 155"; +CM_ SG_ 592 CellVoltage_156 "Voltage of cell 156"; +CM_ SG_ 592 CellVoltage_157 "Voltage of cell 157"; +CM_ SG_ 592 CellVoltage_158 "Voltage of cell 158"; +CM_ SG_ 592 CellVoltage_159 "Voltage of cell 159"; +CM_ SG_ 592 CellVoltage_160 "Voltage of cell 160"; +CM_ SG_ 592 CellVoltage_161 "Voltage of cell 161"; +CM_ SG_ 592 CellVoltage_162 "Voltage of cell 162"; +CM_ SG_ 592 CellVoltage_163 "Voltage of cell 163"; +CM_ SG_ 592 CellVoltage_164 "Voltage of cell 164"; +CM_ SG_ 592 CellVoltage_165 "Voltage of cell 165"; +CM_ SG_ 592 CellVoltage_166 "Voltage of cell 166"; +CM_ SG_ 592 CellVoltage_167 "Voltage of cell 167"; +CM_ SG_ 592 CellVoltage_168 "Voltage of cell 168"; +CM_ SG_ 592 CellVoltage_169 "Voltage of cell 169"; +CM_ SG_ 592 CellVoltage_170 "Voltage of cell 170"; +CM_ SG_ 592 CellVoltage_171 "Voltage of cell 171"; +CM_ SG_ 592 CellVoltage_172 "Voltage of cell 172"; +CM_ SG_ 592 CellVoltage_173 "Voltage of cell 173"; +CM_ SG_ 592 CellVoltage_174 "Voltage of cell 174"; +CM_ SG_ 592 CellVoltage_175 "Voltage of cell 175"; +CM_ SG_ 592 CellVoltage_176 "Voltage of cell 176"; +CM_ SG_ 592 CellVoltage_177 "Voltage of cell 177"; +CM_ SG_ 592 CellVoltage_178 "Voltage of cell 178"; +CM_ SG_ 592 CellVoltage_179 "Voltage of cell 179"; +CM_ SG_ 592 CellVoltage_180 "Voltage of cell 180"; +CM_ SG_ 592 CellVoltage_181 "Voltage of cell 181"; +CM_ SG_ 592 CellVoltage_182 "Voltage of cell 182"; +CM_ SG_ 592 CellVoltage_183 "Voltage of cell 183"; +CM_ SG_ 592 CellVoltage_184 "Voltage of cell 184"; +CM_ SG_ 592 CellVoltage_185 "Voltage of cell 185"; +CM_ SG_ 592 CellVoltage_186 "Voltage of cell 186"; +CM_ SG_ 592 CellVoltage_187 "Voltage of cell 187"; +CM_ SG_ 592 CellVoltage_188 "Voltage of cell 188"; +CM_ SG_ 592 CellVoltage_189 "Voltage of cell 189"; +CM_ SG_ 592 CellVoltage_190 "Voltage of cell 190"; +CM_ SG_ 592 CellVoltage_191 "Voltage of cell 191"; +CM_ SG_ 592 CellVoltage_192 "Voltage of cell 192"; +CM_ SG_ 592 CellVoltage_193 "Voltage of cell 193"; +CM_ SG_ 592 CellVoltage_194 "Voltage of cell 194"; +CM_ SG_ 592 CellVoltage_195 "Voltage of cell 195"; +CM_ SG_ 592 CellVoltage_196 "Voltage of cell 196"; +CM_ SG_ 592 CellVoltage_197 "Voltage of cell 197"; +CM_ SG_ 592 CellVoltage_198 "Voltage of cell 198"; +CM_ SG_ 592 CellVoltage_199 "Voltage of cell 199"; +CM_ SG_ 592 CellVoltage_200 "Voltage of cell 200"; +CM_ SG_ 592 CellVoltage_201 "Voltage of cell 201"; +CM_ SG_ 592 CellVoltage_202 "Voltage of cell 202"; +CM_ SG_ 592 CellVoltage_203 "Voltage of cell 203"; +CM_ SG_ 592 CellVoltage_204 "Voltage of cell 204"; +CM_ SG_ 592 CellVoltage_205 "Voltage of cell 205"; +CM_ SG_ 592 CellVoltage_206 "Voltage of cell 206"; +CM_ SG_ 592 CellVoltage_207 "Voltage of cell 207"; +CM_ SG_ 592 CellVoltage_208 "Voltage of cell 208"; +CM_ SG_ 592 CellVoltage_209 "Voltage of cell 209"; +CM_ SG_ 592 CellVoltage_210 "Voltage of cell 210"; +CM_ SG_ 592 CellVoltage_211 "Voltage of cell 211"; +CM_ SG_ 592 CellVoltage_212 "Voltage of cell 212"; +CM_ SG_ 592 CellVoltage_213 "Voltage of cell 213"; +CM_ SG_ 592 CellVoltage_214 "Voltage of cell 214"; +CM_ SG_ 592 CellVoltage_215 "Voltage of cell 215"; +CM_ BO_ 255 "Fatal error information (in:can_cbs_tx_crash-dump.c:CANTX_CrashDump, fv:tx)"; +CM_ BO_ 768 "Reserved - for debug/development purpose only (in:can_cbs_rx_debug.c:CANRX_Debug, fv:rx)"; +CM_ SG_ 768 f_Debug_Mux "Contains signals to set the BMS's RTC driver to certain values"; +CM_ SG_ 768 SetHundredthOfSeconds "Instructs the BMS to set the hundredth of seconds in the RTC driver"; +CM_ SG_ 768 SetSeconds "Instructs the BMS to set the seconds in the RTC driver"; +CM_ SG_ 768 SetMinutes "Instructs the BMS to set the minutes in the RTC driver"; +CM_ SG_ 768 SetHours "Instructs the BMS to set the hours in the RTC driver"; +CM_ SG_ 768 SetWeekday "Instructs the BMS to set the weekday in the RTC driver"; +CM_ SG_ 768 SetDay "Instructs the BMS to set the day in the RTC driver"; +CM_ SG_ 768 SetMonth "Instructs the BMS to set the month in the RTC driver"; +CM_ SG_ 768 SetYear "Instructs the BMS to set the year in the RTC driver"; +CM_ SG_ 768 GetMcuLotNumber "Instructs the BMS to communicate the lot number of the MCU"; +CM_ SG_ 768 GetBmsSoftwareVersion "Instructs the BMS to communicate its software version"; +CM_ SG_ 768 GetMcuUniqueDieId "Instructs the BMS to communicate the unique ID of the MCU"; +CM_ SG_ 768 GetMcuWaferInformation "Instructs the BMS to communicate the wafer information of the MCU it was made of"; +CM_ SG_ 768 GetCommitHash "Instructs the BMS to communicate the commit hash the software version was built with"; +CM_ SG_ 768 TriggerSoftwareReset "Instructs the BMS to perform a software reset"; +CM_ SG_ 768 InitializeFram "Instructs the BMS to initialize the FRAM"; +CM_ SG_ 768 RequestRtcTime "Instructs the BMS to communicate its current time"; +CM_ BO_ 771 "Contains the build configuration (in:can_cbs_tx_debug-build-configuration.c:CANTX_DebugBuildConfiguration, fv:tx)"; +CM_ BO_ 769 "Responses to the 'Debug' message (in:can_cbs_tx_debug-response.c:CANTX_DebugResponse, fv:tx)"; +CM_ SG_ 769 Number "wafer number of the MCU (read from DIEDL register)"; +CM_ SG_ 769 CoordinateX "x coordinate of the MCU die on the wafer (read from DIEIDL register)"; +CM_ SG_ 769 CoordinateY "y coordinate of the MCU die on the wafer (read from DIEIDL register)"; +CM_ SG_ 769 LotNumber "lot number of the MCU (read from DIEIDH register)"; +CM_ SG_ 769 UniqueId "Content of Device Identification Register (DEVID)"; +CM_ BO_ 770 "(in:can_cbs_tx_debug-unsupported-multiplexer-values.c:CANTX_DebugUnsupportedMultiplexerVal, fv:tx)"; +CM_ BO_ 562 "Electrical limit information (in:can_cbs_tx_pack-limits.c:CANTX_PackLimits, fv:tx)"; +CM_ SG_ 562 MaximumChargeCurrent "Maximum battery pack charge current"; +CM_ SG_ 562 MaximumDischargeCurrent "Maximum battery pack discharge current"; +CM_ SG_ 562 MaximumChargePower "Maximum battery pack charge power"; +CM_ SG_ 562 MaximumDischargePower "Maximum battery pack discharge power"; +CM_ SG_ 562 MaximumBatteryVoltage "Maximum allowed battery pack voltage (defined by either cell limits or restricted by the charging algorithm)"; +CM_ SG_ 562 MinimumBatteryVoltage "Minimum allowed battery pack voltage (defined by the cell limits or application specification)"; +CM_ BO_ 561 "(in:can_cbs_tx_pack-minimum-maximum-values.c:CANTX_PackMinimumMaximumValues, fv:tx)"; +CM_ SG_ 561 MinimumCellVoltage "Minimum cell voltage of all connected strings, if no string connected maximum value of whole system is transmitted"; +CM_ SG_ 561 MaximumCellVoltage "Maximum cell voltage of all connected strings, if no string connected maximum value of whole system is transmitted"; +CM_ SG_ 561 MaximumCellTemperature "Maximum cell temperature of all connected strings, if no string connected maximum value of whole system is transmitted"; +CM_ SG_ 561 MinimumCellTemperature "Minium cell temperature of all connected string, if no string connected maximum value of whole system is transmitted"; +CM_ SG_ 561 CoolingInletTemperature "Temperature of the coolant before it enters the cooling system"; +CM_ SG_ 561 CoolingOutletTemperature "Temperature of the coolant after it passes the cooling system"; +CM_ BO_ 565 "(in:can_cbs_tx_pack-state-estimation.c:CANTX_PackStateEstimation, fv:tx)"; +CM_ SG_ 565 MinimumSoc "Minimum SOC currently connected to HV bus (100% if all strings connected and all strings at 100%)"; +CM_ SG_ 565 MinimumSoe "Minimum SOE currently connected to HV bus (100% if all strings connected and all strings at 100%)"; +CM_ SG_ 565 Energy "Energy left in Wh that is currently connected to HV bus"; +CM_ SG_ 565 MaximumSoc "Maximum SOC currently connected to HV bus (100% if all strings connected and all strings at 100%)"; +CM_ SG_ 565 MaximumSoe "Maximum SOE currently connected to HV bus (100% if all strings connected and all strings at 100%)"; +CM_ BO_ 563 "(in:can_cbs_tx_pack-values-p0.c:CANTX_PackValuesP0, fv:tx)"; +CM_ SG_ 563 Current "Battery pack current"; +CM_ SG_ 563 BatteryVoltage "Battery voltage between negative and positive pole of the battery"; +CM_ SG_ 563 BusVoltage "Battery voltage between negative pole and after main positive contactor TODO"; +CM_ SG_ 563 Power "Battery power"; +CM_ BO_ 564 "(in:can_cbs_tx_pack-values-p1.c:CANTX_PackValuesP1, fv:tx)"; +CM_ SG_ 564 InsulationResistance "Shows the latest measured insulation resistance value"; +CM_ BO_ 577 "Message contains minimum and maximum cell temperature and cell voltage values of respective string (in:can_cbs_tx_string-minimum-maximum-values.c:CANTX_StringMinimumMaximumValues, fv:tx)"; +CM_ SG_ 577 MinimumCellVoltage "Minimum cell voltage in string 0"; +CM_ SG_ 577 MaximumCellVoltage "Maximum cell voltage in string 0"; +CM_ SG_ 577 MaximumCellTemperature "Maximum cell temperature in string 0"; +CM_ SG_ 577 MinimumCellTemperature "Minium cell temperature in string 0"; +CM_ BO_ 576 "Message contains string related error and warning flags (in:can_cbs_tx_string-state.c:CANTX_StringState, fv:tx)"; +CM_ SG_ 576 IsStringConnected "0x00: String not connected, 0x01: String connected to HV bus"; +CM_ SG_ 576 IsBalancingActive "0x00: No balancing active, 0x01: Balancing in this string active"; +CM_ SG_ 576 OvertemperatureChargeMslError "0x00: No error, 0x01: Error: Flag will be set if maximum cell temperature is above 45 degree celsius."; +CM_ SG_ 576 UndertemperatureChargeMslError "0x00: No error, 0x01: Error: Flag will be set if minimum cell temperature is below 0 degree celsius."; +CM_ SG_ 576 OvertemperatureDischargeMslError "0x00: No error, 0x01: Error: Flag will be set if maximum cell temperature is above 60 degree celsius."; +CM_ SG_ 576 UndertemperatureDischargeMslErro "Flag indicates if the minimum cell temperature is below -20 degree celsius during discharge"; +CM_ SG_ 576 CellOvercurrentChargeMslError "Flag will be set if string charge current is above ."; +CM_ SG_ 576 CellOvercurrentDischargeMslError "0x00: No error, 0x01: Error: Flag will be set if discharge current is above maximum string current."; +CM_ SG_ 576 OvervoltageMslError "0x00: No error, 0x01: Error: Flag will be set if maximum cell voltage is above 4200mV."; +CM_ SG_ 576 UndervoltageMslError "0x00: No error, 0x01: Error: Flag will be set if minimum cell voltage is below 3000mV. This equals roughly 4% remaining SOC. Minimum data sheet values if 2500mV."; +CM_ SG_ 576 DeepDischargeError "A deep dicharge in at least one cell in the string has been detected"; +CM_ SG_ 576 StringCurrentMeasurementError "Current measurement not working"; +CM_ SG_ 576 PositiveContactorError "0x00: No error, 0x01: Error"; +CM_ SG_ 576 OpenWireError "Indicates broken/not connected sense wire to at least one cell in the string"; +CM_ SG_ 576 CellVoltagePlausibilityError "0x00: No error, 0x01: Error"; +CM_ SG_ 576 CellTemperaturePlausibilityError "0x00: No error, 0x01: Error"; +CM_ SG_ 576 StringVoltagePlausibilityError "0x00: No error, 0x01: Error"; +CM_ SG_ 576 SlaveHardwareError "0x00: No error, 0x01: Error"; +CM_ SG_ 576 DaisyChainBaseCommunicationError "Indicates whether a generic error (i.e., SPI communication error) occurred in one of the AFEs in the main diasy chain (i.e., base diasy chain) in string 0"; +CM_ SG_ 576 DaisyChainBaseCrcError "Indicates whether a CRC error occurred in one of the AFEs in the main diasy chain (i.e., base diasy chain) in string 0"; +CM_ SG_ 576 DaisyChainBaseVoltMeasOorError "Indicates whether an error occurred during the voltage measurement in one of the AFEs in the main diasy chain (i.e., base diasy chain) in string 0"; +CM_ SG_ 576 DaisyChainBaseTempMeasOorError "Indicates whether an error occurred during the temperature measurement in one of the AFEs in the main diasy chain (i.e., base diasy chain) in string 0"; +CM_ SG_ 576 CoulombCountingMeasurementError "Dedeciated coulomb counting sensing is not working"; +CM_ SG_ 576 EnergyCountingMeasurementError "Dedeciated energy counting sensing is not working"; +CM_ SG_ 576 VoltageSpreadPlausibilityError "0x00: No error, 0x01: Error"; +CM_ SG_ 576 TemperatureSpreadPlausibilityErr "0x00: No error, 0x01: Error"; +CM_ SG_ 576 IsStringFuseBlown "Indicates whether the fuse is blown or not"; +CM_ SG_ 576 NegativeContactorError "0x00: No error, 0x01: Error"; +CM_ SG_ 576 StringVoltageMeasurementError "Dedicated string voltage measurement not working"; +CM_ SG_ 576 FusedStringVoltageMeasurementErr "Dedicated fused string voltage measurement not working"; +CM_ SG_ 576 PackVoltageMeasurementError "Dedicated pack voltage measurement not working"; +CM_ SG_ 576 StringOvercurrentError "Flag will be set if current capability of the string is violated (BS_MAXIMUM_STRING_CURRENT_mA)"; +CM_ BO_ 581 "Message contains SOC, SOE and SOH state estimations (in:can_cbs_tx_string-state-estimation.c:CANTX_StringStateEstimation, fv:tx)"; +CM_ SG_ 581 MinimumSoe "SOE is depending on current direction, if battery system is charging: SOE_max is transmitted, else SOE_min"; +CM_ SG_ 581 Energy "Remaining energy left in this string"; +CM_ SG_ 581 MaximumSoe "SOE is depending on current direction, if battery system is charging: SOE_max is transmitted, else SOE_min"; +CM_ BO_ 579 "Message contains string voltage, current and power (in:can_cbs_tx_string-values-p0.c:CANTX_StringValuesP0, fv:tx)"; +CM_ SG_ 579 Current "Current of string 0"; +CM_ SG_ 579 Voltage "Voltage of string 0"; +CM_ SG_ 579 Power "Power of string 0"; +CM_ BO_ 580 "Message contains energy counting value (in:can_cbs_tx_string-values-p1.c:CANTX_StringValuesP1, fv:tx)"; +CM_ SG_ 580 EnergyCounter "Energy counting value for string 0"; +CM_ BO_ 55 "(in:can_cbs_rx_imd-info.c:CANRX_ImdInfo, fv:rx)"; +CM_ BO_ 34 "(in:can_cbs_tx_imd-request.c:CANTX_ImdRequest, fv:tx)"; +CM_ BO_ 35 "(in:can_cbs_rx_imd-response.c:CANRX_ImdResponse, fv:rx)"; +CM_ BO_ 1313 "Current sensor string 0: current (in:can_cbs_rx_current-sensor.c:CANRX_CurrentSensor, fv:rx);"; +CM_ BO_ 1319 "Current sensor string 0: coulomb counting (in:can_cbs_rx_current-sensor.c:CANRX_CurrentSensor, fv:rx)"; +CM_ BO_ 1320 "Current sensor string 0: energy counting (in:can_cbs_rx_current-sensor.c:CANRX_CurrentSensor, fv:rx)"; +CM_ BO_ 1318 "Current sensor string 0: power (in:can_cbs_rx_current-sensor.c:CANRX_CurrentSensor, fv:rx)"; +CM_ BO_ 1317 "Current sensor string 0: temperature (in:can_cbs_rx_current-sensor.c:CANRX_CurrentSensor, fv:rx)"; +CM_ BO_ 1314 "Current sensor string 0: voltage 1 (in:can_cbs_rx_current-sensor.c:CANRX_CurrentSensor, fv:rx)"; +CM_ BO_ 1315 "Current sensor string 0: voltage 2 (in:can_cbs_rx_current-sensor.c:CANRX_CurrentSensor, fv:rx)"; +CM_ BO_ 1316 "Current sensor string 0: voltage 3 (in:can_cbs_rx_current-sensor.c:CANRX_CurrentSensor, fv:rx)"; BA_DEF_ "BusType" STRING ; BA_DEF_ BO_ "GenMsgCycleTime" INT 0 65535; @@ -1259,1071 +3061,1022 @@ BA_DEF_DEF_ "SigType" "Default"; BA_ "BusType" "CAN"; -BA_ "GenMsgCycleTime" BO_ 546 100; -BA_ "GenMsgCycleTime" BO_ 548 100; -BA_ "GenMsgCycleTime" BO_ 547 100; -BA_ "GenMsgCycleTime" BO_ 640 100; -BA_ "GenMsgCycleTime" BO_ 643 100; -BA_ "GenMsgCycleTime" BO_ 549 1000; -BA_ "GenMsgCycleTime" BO_ 576 5400; -BA_ "GenMsgCycleTime" BO_ 592 4500; -BA_ "GenMsgCycleTime" BO_ 544 100; -BA_ "GenMsgCycleTime" BO_ 545 100; -BA_ "GenMsgCycleTime" BO_ 641 100; -BA_ "GenMsgCycleTime" BO_ 642 1000; -BA_ "GenMsgCycleTime" BO_ 550 1000; +BA_ "GenMsgCycleTime" BO_ 640 4500; +BA_ "GenMsgCycleTime" BO_ 624 5400; BA_ "GenMsgCycleTime" BO_ 964 1000; - -BA_ "GenSigStartValue" SG_ 546 foxBMS_packCurrent 0; -BA_ "GenSigStartValue" SG_ 546 foxBMS_batteryVoltage 0; -BA_ "GenSigStartValue" SG_ 546 foxBMS_busVoltage 0; -BA_ "GenSigStartValue" SG_ 546 foxBMS_packPower 0; -BA_ "GenSigStartValue" SG_ 548 foxBMS_maxChargeCurrent 0; -BA_ "GenSigStartValue" SG_ 548 foxBMS_maxDischargeCurrent 0; -BA_ "GenSigStartValue" SG_ 548 foxBMS_maxChargePower 0; -BA_ "GenSigStartValue" SG_ 548 foxBMS_maxDischargePower 0; -BA_ "GenSigStartValue" SG_ 548 foxBMS_maxBatteryVoltage 0; -BA_ "GenSigStartValue" SG_ 548 foxBMS_minBatteryVoltage 0; -BA_ "GenSigStartValue" SG_ 547 foxBMS_minimumCellVoltage 0; -BA_ "GenSigStartValue" SG_ 547 foxBMS_maximumCellVoltage 0; -BA_ "GenSigStartValue" SG_ 547 foxBMS_maximumCellTemp 0; -BA_ "GenSigStartValue" SG_ 547 foxBMS_minimumCellTemp 0; -BA_ "GenSigStartValue" SG_ 547 foxBMS_inletTemperature 0; -BA_ "GenSigStartValue" SG_ 547 foxBMS_outletTemperature 0; -BA_ "GenSigStartValue" SG_ 640 foxBMS_String0Current 0; -BA_ "GenSigStartValue" SG_ 640 foxBMS_String0Voltage 0; -BA_ "GenSigStartValue" SG_ 640 foxBMS_String0Power 0; -BA_ "GenSigStartValue" SG_ 643 foxBMS_String0EnergyCount 0; -BA_ "GenSigStartValue" SG_ 549 foxBMS_packSoc 0; -BA_ "GenSigStartValue" SG_ 549 foxBMS_packSoe 0; -BA_ "GenSigStartValue" SG_ 549 foxBMS_packEnergy 0; -BA_ "GenSigStartValue" SG_ 549 foxBMS_packSoh 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_000_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_001_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_002_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_003_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_000 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_001 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_002 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_003 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_004_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_005_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_006_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_007_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_004 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_005 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_006 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_007 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_008_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_009_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_010_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_011_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_008 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_009 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_010 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_011 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_012_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_013_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_014_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_015_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_012 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_013 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_014 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_015 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_016_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_017_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_018_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_019_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_016 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_017 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_018 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_019 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_020_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_021_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_022_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_023_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_020 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_021 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_022 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_023 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_024_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_025_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_026_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_027_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_024 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_025 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_026 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_027 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_028_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_029_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_030_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_031_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_028 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_029 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_030 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_031 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_032_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_033_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_034_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_035_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_032 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_033 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_034 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_035 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_036_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_037_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_038_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_039_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_036 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_037 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_038 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_039 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_040_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_041_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_042_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_043_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_040 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_041 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_042 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_043 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_044_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_045_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_046_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_047_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_044 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_045 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_046 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_047 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_048_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_049_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_050_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_051_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_048 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_049 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_050 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_051 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_052_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_053_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_054_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_055_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_052 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_053 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_054 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_055 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_056_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_057_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_058_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_059_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_056 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_057 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_058 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_059 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_060_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_061_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_062_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_063_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_060 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_061 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_062 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_063 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_064_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_065_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_066_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_067_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_064 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_065 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_066 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_067 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_068_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_069_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_070_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_071_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_068 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_069 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_070 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_071 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_072_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_073_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_074_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_075_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_072 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_073 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_074 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_075 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_076_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_077_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_078_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_079_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_076 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_077 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_078 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_079 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_080_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_081_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_082_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_083_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_080 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_081 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_082 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_083 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_084_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_085_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_086_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_087_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_084 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_085 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_086 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_087 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_088_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_089_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_090_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_091_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_088 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_089 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_090 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_091 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_092_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_093_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_094_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_095_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_092 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_093 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_094 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_095 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_096_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_097_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_098_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_099_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_096 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_097 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_098 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_099 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_100_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_101_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_102_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_103_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_100 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_101 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_102 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_103 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_104_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_105_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_106_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_107_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_104 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_105 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_106 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_107 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_108_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_109_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_110_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_111_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_108 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_109 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_110 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_111 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_112_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_113_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_114_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_115_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_112 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_113 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_114 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_115 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_116_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_117_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_118_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_119_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_116 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_117 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_118 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_119 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_120_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_121_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_122_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_123_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_120 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_121 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_122 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_123 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_124_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_125_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_126_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_127_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_124 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_125 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_126 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_127 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_128_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_129_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_130_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_131_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_128 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_129 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_130 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_131 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_132_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_133_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_134_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_135_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_132 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_133 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_134 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_135 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_136_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_137_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_138_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_139_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_136 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_137 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_138 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_139 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_140_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_141_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_142_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_143_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_140 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_141 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_142 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_143 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_144_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_145_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_146_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_147_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_144 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_145 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_146 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_147 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_148_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_149_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_150_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_151_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_148 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_149 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_150 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_151 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_152_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_153_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_154_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_155_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_152 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_153 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_154 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_155 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_156_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_157_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_158_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_159_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_156 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_157 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_158 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_159 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_160_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_161_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_162_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_163_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_160 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_161 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_162 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_163 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_164_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_165_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_166_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_167_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_164 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_165 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_166 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_167 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_168_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_169_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_170_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_171_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_168 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_169 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_170 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_171 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_172_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_173_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_174_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_175_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_172 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_173 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_174 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_175 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_176_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_177_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_178_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_179_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_176 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_177 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_178 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_179 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_180_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_181_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_182_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_183_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_180 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_181 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_182 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_183 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_184_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_185_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_186_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_187_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_184 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_185 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_186 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_187 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_188_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_189_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_190_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_191_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_188 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_189 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_190 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_191 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_192_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_193_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_194_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_195_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_192 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_193 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_194 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_195 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_196_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_197_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_198_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_199_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_196 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_197 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_198 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_199 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_200_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_201_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_202_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_203_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_200 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_201 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_202 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_203 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_204_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_205_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_206_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_207_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_204 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_205 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_206 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_207 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_208_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_209_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_210_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_211_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_208 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_209 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_210 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_211 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_212_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_213_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_214_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_215_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_212 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_213 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_214 0; -BA_ "GenSigStartValue" SG_ 576 cellVoltage_215 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_000_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_001_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_002_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_003_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_004_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_005_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_000 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_001 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_002 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_003 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_004 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_005 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_006_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_007_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_008_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_009_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_010_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_011_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_006 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_007 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_008 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_009 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_010 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_011 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_012_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_013_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_014_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_015_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_016_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_017_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_012 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_013 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_014 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_015 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_016 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_017 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_018_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_019_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_020_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_021_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_022_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_023_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_018 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_019 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_020 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_021 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_022 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_023 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_024_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_025_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_026_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_027_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_028_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_029_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_024 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_025 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_026 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_027 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_028 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_029 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_030_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_031_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_032_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_033_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_034_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_035_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_030 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_031 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_032 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_033 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_034 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_035 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_036_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_037_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_038_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_039_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_040_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_041_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_036 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_037 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_038 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_039 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_040 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_041 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_042_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_043_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_044_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_045_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_046_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_047_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_042 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_043 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_044 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_045 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_046 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_047 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_048_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_049_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_050_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_051_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_052_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_053_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_048 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_049 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_050 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_051 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_052 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_053 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_054_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_055_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_056_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_057_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_058_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_059_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_054 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_055 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_056 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_057 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_058 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_059 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_060_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_061_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_062_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_063_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_064_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_065_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_060 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_061 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_062 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_063 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_064 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_065 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_066_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_067_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_068_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_069_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_070_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_071_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_066 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_067 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_068 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_069 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_070 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_071 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_072_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_073_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_074_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_075_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_076_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_077_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_072 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_073 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_074 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_075 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_076 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_077 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_078_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_079_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_080_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_081_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_082_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_083_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_078 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_079 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_080 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_081 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_082 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_083 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_084_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_085_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_086_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_087_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_088_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_089_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_084 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_085 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_086 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_087 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_088 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_089 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_090_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_091_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_092_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_093_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_094_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_095_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_090 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_091 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_092 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_093 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_094 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_095 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_096_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_097_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_098_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_099_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_100_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_101_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_096 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_097 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_098 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_099 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_100 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_101 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_102_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_103_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_104_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_105_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_106_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_107_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_102 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_103 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_104 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_105 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_106 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_107 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_108_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_109_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_110_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_111_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_112_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_113_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_108 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_109 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_110 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_111 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_112 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_113 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_114_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_115_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_116_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_117_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_118_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_119_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_114 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_115 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_116 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_117 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_118 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_119 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_120_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_121_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_122_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_123_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_124_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_125_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_120 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_121 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_122 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_123 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_124 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_125 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_126_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_127_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_128_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_129_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_130_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_131_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_126 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_127 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_128 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_129 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_130 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_131 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_132_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_133_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_134_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_135_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_136_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_137_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_132 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_133 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_134 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_135 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_136 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_137 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_138_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_139_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_140_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_141_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_142_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_143_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_138 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_139 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_140 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_141 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_142 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_143 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_144_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_145_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_146_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_147_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_148_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_149_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_144 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_145 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_146 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_147 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_148 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_149 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_150_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_151_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_152_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_153_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_154_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_155_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_150 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_151 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_152 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_153 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_154 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_155 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_156_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_157_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_158_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_159_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_160_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_161_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_156 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_157 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_158 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_159 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_160 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_161 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_162_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_163_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_164_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_165_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_166_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_167_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_162 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_163 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_164 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_165 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_166 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_167 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_168_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_169_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_170_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_171_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_172_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_173_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_168 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_169 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_170 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_171 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_172 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_173 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_174_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_175_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_176_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_177_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_178_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_179_invalidFlag 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_174 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_175 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_176 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_177 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_178 0; -BA_ "GenSigStartValue" SG_ 592 cellTemperature_179 0; -BA_ "GenSigStartValue" SG_ 560 foxBMS_modeRequest 0; -BA_ "GenSigStartValue" SG_ 560 foxBMS_activateBalancing 0; -BA_ "GenSigStartValue" SG_ 560 foxBMS_balancingThreshold 0; -BA_ "GenSigStartValue" SG_ 560 foxBMS_externallyPrecharged 0; -BA_ "GenSigStartValue" SG_ 560 foxBMS_resetFlags 0; -BA_ "GenSigStartValue" SG_ 560 foxBMS_chargerConnected 0; -BA_ "GenSigStartValue" SG_ 560 foxBMS_disableInsulationMon 0; -BA_ "GenSigStartValue" SG_ 560 foxBMS_heaterOverride_ON 0; -BA_ "GenSigStartValue" SG_ 560 foxBMS_heaterOverride_OFF 0; -BA_ "GenSigStartValue" SG_ 544 foxBMS_State 0; -BA_ "GenSigStartValue" SG_ 544 BMS_nrOfConnectedStrings 0; -BA_ "GenSigStartValue" SG_ 544 foxBMS_generalError 0; -BA_ "GenSigStartValue" SG_ 544 foxBMS_generalWarning 0; -BA_ "GenSigStartValue" SG_ 544 foxBMS_Error_dieTemperatureMCU 0; -BA_ "GenSigStartValue" SG_ 544 foxBMS_Error_OvertempPCB 0; -BA_ "GenSigStartValue" SG_ 544 foxBMS_Error_UndertempPCB 0; -BA_ "GenSigStartValue" SG_ 544 foxBMS_Error_PrechargeVolt 0; -BA_ "GenSigStartValue" SG_ 544 foxBMS_Error_PrechargeCurrent 0; -BA_ "GenSigStartValue" SG_ 544 foxBMS_heaterState 0; -BA_ "GenSigStartValue" SG_ 544 foxBMS_coolingState 0; -BA_ "GenSigStartValue" SG_ 544 foxBMS_insulationMonitoring 0; -BA_ "GenSigStartValue" SG_ 544 foxBMS_chargingComplete 0; -BA_ "GenSigStartValue" SG_ 544 foxBMS_EmergencyShutoff 0; -BA_ "GenSigStartValue" SG_ 544 foxBMS_MainFuseBlown 0; -BA_ "GenSigStartValue" SG_ 544 foxBMS_insulationResistance 0; -BA_ "GenSigStartValue" SG_ 544 foxBMS_Error_Interlock 0; -BA_ "GenSigStartValue" SG_ 544 foxBMS_NrDeactivatedStrings 0; -BA_ "GenSigStartValue" SG_ 544 foxBMS_Error_Insulation 0; -BA_ "GenSigStartValue" SG_ 544 foxBMS_Error_Cantiming 0; -BA_ "GenSigStartValue" SG_ 544 foxBMS_Error_PackOvercurr_Charge 0; -BA_ "GenSigStartValue" SG_ 544 foxBMS_Error_PackOvercur_Dischrg 0; -BA_ "GenSigStartValue" SG_ 544 foxBMS_SysMonError 0; -BA_ "GenSigStartValue" SG_ 544 foxBMS_alertFlag 0; -BA_ "GenSigStartValue" SG_ 544 foxBMS_NvramCrcError 0; -BA_ "GenSigStartValue" SG_ 545 String0_stringConnected 0; -BA_ "GenSigStartValue" SG_ 545 String0_balancing_active 0; -BA_ "GenSigStartValue" SG_ 545 String0_Err_overtemp_charge 0; -BA_ "GenSigStartValue" SG_ 545 String0_Err_undertemp_charge 0; -BA_ "GenSigStartValue" SG_ 545 String0_Err_overtemp_discharge 0; -BA_ "GenSigStartValue" SG_ 545 String0_Err_undertemp_discharge 0; -BA_ "GenSigStartValue" SG_ 545 String0_Err_Overcurrent_charge 0; -BA_ "GenSigStartValue" SG_ 545 String0_Err_Overcurre_discharge 0; -BA_ "GenSigStartValue" SG_ 545 String0_Err_Overvoltage 0; -BA_ "GenSigStartValue" SG_ 545 String0_Err_Undervoltage 0; -BA_ "GenSigStartValue" SG_ 545 String0_Err_deep_discharge 0; -BA_ "GenSigStartValue" SG_ 545 String0_Err_CS_currentMeas 0; -BA_ "GenSigStartValue" SG_ 545 String0_Err_positiveContactor 0; -BA_ "GenSigStartValue" SG_ 545 String0_Err_openWire 0; -BA_ "GenSigStartValue" SG_ 545 String0_openWireNumber 0; -BA_ "GenSigStartValue" SG_ 545 String0_Err_plaus_cell_volt 0; -BA_ "GenSigStartValue" SG_ 545 String0_Err_plaus_cell_temp 0; -BA_ "GenSigStartValue" SG_ 545 String0_Err_plaus_string_volt 0; -BA_ "GenSigStartValue" SG_ 545 String0_Err_slave_hardware 0; -BA_ "GenSigStartValue" SG_ 545 String0_Err_dsyChainBase_Comm 0; -BA_ "GenSigStartValue" SG_ 545 String0_Err_dsyChainPrim_CRC 0; -BA_ "GenSigStartValue" SG_ 545 String0_Err_dsyChainRedun_Comm 0; -BA_ "GenSigStartValue" SG_ 545 String0_Err_dsyChainRedun_CRC 0; -BA_ "GenSigStartValue" SG_ 545 String0_Err_dsyPrim_voltMeasOor 0; -BA_ "GenSigStartValue" SG_ 545 String0_Err_dsyRedun_voltMeasOor 0; -BA_ "GenSigStartValue" SG_ 545 String0_Err_dsyPrim_tempMeasOor 0; -BA_ "GenSigStartValue" SG_ 545 String0_Err_dsyRedun_tempMeasOor 0; -BA_ "GenSigStartValue" SG_ 545 String0_Err_CS_coulombCountMeas 0; -BA_ "GenSigStartValue" SG_ 545 String0_Err_CS_energyCountMeas 0; -BA_ "GenSigStartValue" SG_ 545 String0_Err_plaus_volt_spread 0; -BA_ "GenSigStartValue" SG_ 545 String0_Err_plaus_temp_spread 0; -BA_ "GenSigStartValue" SG_ 545 String0_fuseBlown 0; -BA_ "GenSigStartValue" SG_ 545 String0_Warning_overvoltage_MOL 0; -BA_ "GenSigStartValue" SG_ 545 String0_Warning_undervoltage_MOL 0; -BA_ "GenSigStartValue" SG_ 545 String0_Wrng_chargeOverTemp_MOL 0; -BA_ "GenSigStartValue" SG_ 545 String0_Wrng_dischrgOverTemp_MOL 0; -BA_ "GenSigStartValue" SG_ 545 String0_Wrng_chargeUnderTemp_MOL 0; -BA_ "GenSigStartValue" SG_ 545 String0_Wrng_dischrgUnderTmp_MOL 0; -BA_ "GenSigStartValue" SG_ 545 String0_Wrng_chargeOverCur_MOL 0; -BA_ "GenSigStartValue" SG_ 545 String0_Wrng_dischargOverCur_MOL 0; -BA_ "GenSigStartValue" SG_ 545 String0_Wrng_chargeOverTemp_RSL 0; -BA_ "GenSigStartValue" SG_ 545 String0_Wrng_chargeUnderTemp_RSL 0; -BA_ "GenSigStartValue" SG_ 545 String0_Wrng_dischrgOverTemp_RSL 0; -BA_ "GenSigStartValue" SG_ 545 String0_Wrng_dischrgUnderTmp_RSL 0; -BA_ "GenSigStartValue" SG_ 545 String0_Wrng_chargeOverCur_RSL 0; -BA_ "GenSigStartValue" SG_ 545 String0_Wrng_dischargOverCur_RSL 0; -BA_ "GenSigStartValue" SG_ 545 String0_Wrng_overvoltage_RSL 0; -BA_ "GenSigStartValue" SG_ 545 String0_Wrng_undervoltage_RSL 0; -BA_ "GenSigStartValue" SG_ 545 String0_Err_negativeContactor 0; -BA_ "GenSigStartValue" SG_ 545 String0_Err_CS_voltage1Meas 0; -BA_ "GenSigStartValue" SG_ 545 String0_Err_CS_voltage2Meas 0; -BA_ "GenSigStartValue" SG_ 545 String0_Err_CS_voltage3Meas 0; -BA_ "GenSigStartValue" SG_ 641 String0_minimumCellVoltage 0; -BA_ "GenSigStartValue" SG_ 641 String0_maximumCellVoltage 0; -BA_ "GenSigStartValue" SG_ 641 String0_maximumCellTemperature 0; -BA_ "GenSigStartValue" SG_ 641 String0_minimumCellTemperature 0; -BA_ "GenSigStartValue" SG_ 642 String0_minimumSOC 0; -BA_ "GenSigStartValue" SG_ 642 String0_averageSOC 0; -BA_ "GenSigStartValue" SG_ 642 String0_maximumSOC 0; -BA_ "GenSigStartValue" SG_ 642 String0_SOE 0; -BA_ "GenSigStartValue" SG_ 642 String0_Energy_kWh 0; -BA_ "GenSigStartValue" SG_ 642 String0_SOH 0; -BA_ "GenSigStartValue" SG_ 512 SetHundredthOfSeconds 0; -BA_ "GenSigStartValue" SG_ 512 SetSeconds 0; -BA_ "GenSigStartValue" SG_ 512 SetMinutes 0; -BA_ "GenSigStartValue" SG_ 512 SetHours 0; -BA_ "GenSigStartValue" SG_ 512 SetWeekday 0; -BA_ "GenSigStartValue" SG_ 512 SetDay 0; -BA_ "GenSigStartValue" SG_ 512 SetMonth 0; -BA_ "GenSigStartValue" SG_ 512 SetYear 0; -BA_ "GenSigStartValue" SG_ 512 foxBMS_GetMcuLotNumber 0; -BA_ "GenSigStartValue" SG_ 512 foxBMS_GetBmsSoftwareVersion 0; -BA_ "GenSigStartValue" SG_ 512 foxBMS_GetMcuUniqueDieId 0; -BA_ "GenSigStartValue" SG_ 512 foxBMS_GetMcuWaferInformation 0; -BA_ "GenSigStartValue" SG_ 512 foxBMS_GetCommitHash 0; -BA_ "GenSigStartValue" SG_ 512 foxBMS_TriggerSoftwareReset 0; -BA_ "GenSigStartValue" SG_ 512 InitializeFram 0; -BA_ "GenSigStartValue" SG_ 512 foxBMS_RequestRtcTime 0; -BA_ "GenSigStartValue" SG_ 1313 IVT0_Result_I_systemError 0; -BA_ "GenSigStartValue" SG_ 1313 IVT0_Result_I_OCS 0; -BA_ "GenSigStartValue" SG_ 1313 IVT0_Result_I_overallMeasError 0; -BA_ "GenSigStartValue" SG_ 1313 IVT0_Result_I_channelMeasError 0; -BA_ "GenSigStartValue" SG_ 1313 IVT0_ID_Result_I 0; -BA_ "GenSigStartValue" SG_ 1313 IVT0_MsgCount_Result_I 0; -BA_ "GenSigStartValue" SG_ 1313 IVT0_Result_I_mA 0; -BA_ "GenSigStartValue" SG_ 1314 IVT0_Result_U1_systemError 0; -BA_ "GenSigStartValue" SG_ 1314 IVT0_Result_U1_overallMeasError 0; -BA_ "GenSigStartValue" SG_ 1314 IVT0_Result_U1_channelMeasError 0; -BA_ "GenSigStartValue" SG_ 1314 IVT0_Result_U1_OCS 0; -BA_ "GenSigStartValue" SG_ 1314 IVT0_ID_Result_U1 1; -BA_ "GenSigStartValue" SG_ 1314 IVT0_MsgCount_Result_U1 0; -BA_ "GenSigStartValue" SG_ 1314 IVT0_Result_U1_mV 0; -BA_ "GenSigStartValue" SG_ 1315 IVT0_Result_U2_systemError 0; -BA_ "GenSigStartValue" SG_ 1315 IVT0_Result_U2_OCS 0; -BA_ "GenSigStartValue" SG_ 1315 IVT0_Result_U2_overallMeasError 0; -BA_ "GenSigStartValue" SG_ 1315 IVT0_Result_U2_channelMeasError 0; -BA_ "GenSigStartValue" SG_ 1315 IVT0_ID_Result_U2 2; -BA_ "GenSigStartValue" SG_ 1315 IVT0_MsgCount_Result_U2 0; -BA_ "GenSigStartValue" SG_ 1315 IVT0_Result_U2_mV 0; -BA_ "GenSigStartValue" SG_ 1316 IVT0_Result_U3_systemError 0; -BA_ "GenSigStartValue" SG_ 1316 IVT0_Result_U3_OCS 0; -BA_ "GenSigStartValue" SG_ 1316 IVT0_Result_U3_overallMeasError 0; -BA_ "GenSigStartValue" SG_ 1316 IVT0_Result_U3_channelMeasError 0; -BA_ "GenSigStartValue" SG_ 1316 IVT0_ID_Result_U3 3; -BA_ "GenSigStartValue" SG_ 1316 IVT0_MsgCount_Result_U3 0; -BA_ "GenSigStartValue" SG_ 1316 IVT0_Result_U3_mV 0; -BA_ "GenSigStartValue" SG_ 1317 IVT0_Result_T_systemError 0; -BA_ "GenSigStartValue" SG_ 1317 IVT0_Result_T_OCS 0; -BA_ "GenSigStartValue" SG_ 1317 IVT0_Result_T_overallMeasError 0; -BA_ "GenSigStartValue" SG_ 1317 IVT0_Result_T_channelMeasError 0; -BA_ "GenSigStartValue" SG_ 1317 IVT0_ID_Result_T 4; -BA_ "GenSigStartValue" SG_ 1317 IVT0_MsgCount_Result_T 0; -BA_ "GenSigStartValue" SG_ 1317 IVT0_Result_T_ddegC 0; -BA_ "GenSigStartValue" SG_ 1318 IVT0_Result_W_systemError 0; -BA_ "GenSigStartValue" SG_ 1318 IVT0_Result_W_OCS 0; -BA_ "GenSigStartValue" SG_ 1318 IVT0_Result_W_overallMeasError 0; -BA_ "GenSigStartValue" SG_ 1318 IVT0_Result_W_channelMeasError 0; -BA_ "GenSigStartValue" SG_ 1318 IVT0_Result_W 0; -BA_ "GenSigStartValue" SG_ 1318 IVT0_MsgCount_Result_W 0; -BA_ "GenSigStartValue" SG_ 1318 IVT0_ID_Result_W 5; -BA_ "GenSigStartValue" SG_ 1319 IVT0_Result_As_systemError 0; -BA_ "GenSigStartValue" SG_ 1319 IVT0_Result_As_OCS 0; -BA_ "GenSigStartValue" SG_ 1319 IVT0_Result_As_overallMeasError 0; -BA_ "GenSigStartValue" SG_ 1319 IVT0_Result_As_channelMeasError 0; -BA_ "GenSigStartValue" SG_ 1319 IVT0_Result_As 0; -BA_ "GenSigStartValue" SG_ 1319 IVT0_MsgCount_Result_As 0; -BA_ "GenSigStartValue" SG_ 1319 IVT0_ID_Result_As 6; -BA_ "GenSigStartValue" SG_ 1320 IVT0_Result_Wh_systemError 0; -BA_ "GenSigStartValue" SG_ 1320 IVT0_Result_Wh_OCS 0; -BA_ "GenSigStartValue" SG_ 1320 IVT0_Result_Wh_overallMeasError 0; -BA_ "GenSigStartValue" SG_ 1320 IVT0_Result_Wh_channelMeasError 0; -BA_ "GenSigStartValue" SG_ 1320 IVT0_Result_Wh 0; -BA_ "GenSigStartValue" SG_ 1320 IVT0_MsgCount_Result_Wh 0; -BA_ "GenSigStartValue" SG_ 1320 IVT0_ID_Result_Wh 7; -BA_ "GenSigStartValue" SG_ 550 foxBMS_TimingViolationEngine 0; -BA_ "GenSigStartValue" SG_ 550 foxBMS_TimingViolation1ms 0; -BA_ "GenSigStartValue" SG_ 550 foxBMS_TimingViolation10ms 0; -BA_ "GenSigStartValue" SG_ 550 foxBMS_TimingViolation100ms 0; -BA_ "GenSigStartValue" SG_ 550 foxBMS_TimingViolation100msAlgo 0; -BA_ "GenSigStartValue" SG_ 550 foxBMS_TimingViolation10msRec 0; -BA_ "GenSigStartValue" SG_ 550 foxBMS_TimingViolation100msRec 0; -BA_ "GenSigStartValue" SG_ 550 foxBMS_TimingViolation100msAlgoR 0; -BA_ "GenSigStartValue" SG_ 550 foxBMS_TimingViolationEngineRec 0; -BA_ "GenSigStartValue" SG_ 550 foxBMS_TimingViolation1msRec 0; -BA_ "GenSigStartValue" SG_ 551 MCU_waferNumber 0; -BA_ "GenSigStartValue" SG_ 551 MCU_xWaferCoordinate 0; -BA_ "GenSigStartValue" SG_ 551 MCU_yWaferCoordinate 0; -BA_ "GenSigStartValue" SG_ 551 MCU_LotNumber 0; -BA_ "GenSigStartValue" SG_ 551 MCU_uniqueId 0; -BA_ "GenSigStartValue" SG_ 551 foxBMS_dirtyFlag 0; -BA_ "GenSigStartValue" SG_ 551 foxBMS_majorVersionNumber 0; -BA_ "GenSigStartValue" SG_ 551 foxBMS_minorVersionNumber 0; -BA_ "GenSigStartValue" SG_ 551 foxBMS_patchVersionNumber 0; -BA_ "GenSigStartValue" SG_ 551 foxBMS_releaseDistance 0; -BA_ "GenSigStartValue" SG_ 551 foxBMS_releaseDistanceOverflow 0; -BA_ "GenSigStartValue" SG_ 551 foxBMS_underVersionControl 0; -BA_ "GenSigStartValue" SG_ 551 foxBMS_MagicBootData 0; -BA_ "GenSigStartValue" SG_ 551 GetDay 0; -BA_ "GenSigStartValue" SG_ 551 GetHours 0; -BA_ "GenSigStartValue" SG_ 551 GetHundredthOfSeconds 0; -BA_ "GenSigStartValue" SG_ 551 GetMinutes 0; -BA_ "GenSigStartValue" SG_ 551 GetMonth 0; -BA_ "GenSigStartValue" SG_ 551 GetSeconds 0; -BA_ "GenSigStartValue" SG_ 551 GetWeekday 0; -BA_ "GenSigStartValue" SG_ 551 GetYear 0; -BA_ "GenSigStartValue" SG_ 513 foxBMS_MessageId 0; -BA_ "GenSigStartValue" SG_ 513 foxBMS_MultiplexerValue 0; -BA_ "GenSigStartValue" SG_ 964 particulate_matter_concentration 0; -BA_ "GenSigStartValue" SG_ 964 low_power_mode_wake_up_threshold 0; -BA_ "GenSigStartValue" SG_ 964 sensor_status 0; -BA_ "GenSigStartValue" SG_ 964 sensor_faults 0; -BA_ "GenSigStartValue" SG_ 964 rolling_counter 0; -BA_ "GenSigStartValue" SG_ 964 CRC_check_code 0; - -BA_ "SigType" SG_ 551 shortHash 3; - -VAL_ 640 foxBMS_StringValuesP0_Mux 0 "mux_valuesP0String_0" ; -VAL_ 643 foxBMS_StringValuesP1_Mux 0 "mux_valuesP1String_0" ; -VAL_ 576 foxBMS_CellVoltages_Mux 0 "mux_cellVoltage_000_003" 1 "mux_cellVoltage_004_007" 2 "mux_cellVoltage_008_011" 3 "mux_cellVoltage_012_015" 4 "mux_cellVoltage_016_019" 5 "mux_cellVoltage_020_023" 6 "mux_cellVoltage_024_027" 7 "mux_cellVoltage_028_031" 8 "mux_cellVoltage_032_035" 9 "mux_cellVoltage_036_039" 10 "mux_cellVoltage_040_043" 11 "mux_cellVoltage_044_047" 12 "mux_cellVoltage_048_051" 13 "mux_cellVoltage_052_055" 14 "mux_cellVoltage_056_059" 15 "mux_cellVoltage_060_063" 16 "mux_cellVoltage_064_067" 17 "mux_cellVoltage_068_071" 18 "mux_cellVoltage_072_075" 19 "mux_cellVoltage_076_079" 20 "mux_cellVoltage_080_083" 21 "mux_cellVoltage_084_087" 22 "mux_cellVoltage_088_091" 23 "mux_cellVoltage_092_095" 24 "mux_cellVoltage_096_099" 25 "mux_cellVoltage_100_103" 26 "mux_cellVoltage_104_107" 27 "mux_cellVoltage_108_111" 28 "mux_cellVoltage_112_115" 29 "mux_cellVoltage_116_119" 30 "mux_cellVoltage_120_123" 31 "mux_cellVoltage_124_127" 32 "mux_cellVoltage_128_131" 33 "mux_cellVoltage_132_135" 34 "mux_cellVoltage_136_139" 35 "mux_cellVoltage_140_143" -36 "mux_cellVoltage_144_147" 37 "mux_cellVoltage_148_151" 38 "mux_cellVoltage_152_155" 39 "mux_cellVoltage_156_159" 40 "mux_cellVoltage_160_163" 41 "mux_cellVoltage_164_167" 42 "mux_cellVoltage_168_171" 43 "mux_cellVoltage_172_175" 44 "mux_cellVoltage_176_179" 45 "mux_cellVoltage_180_183" 46 "mux_cellVoltage_184_187" 47 "mux_cellVoltage_188_191" 48 "mux_cellVoltage_192_195" 49 "mux_cellVoltage_196_199" 50 "mux_cellVoltage_200_203" 51 "mux_cellVoltage_204_207" 52 "mux_cellVoltage_208_211" 53 "mux_cellVoltage_212_215" ; -VAL_ 592 foxBMS_CellTemperatures_Mux 0 "mux_cellTemperature_000_005" 1 "mux_cellTemperature_006_011" 2 "mux_cellTemperature_012_017" 3 "mux_cellTemperature_018_023" 4 "mux_cellTemperature_024_029" 5 "mux_cellTemperature_030_035" 6 "mux_cellTemperature_036_041" 7 "mux_cellTemperature_042_047" 8 "mux_cellTemperature_048_053" 9 "mux_cellTemperature_054_059" 10 "mux_cellTemperature_060_065" 11 "mux_cellTemperature_066_071" 12 "mux_cellTemperature_072_077" 13 "mux_cellTemperature_078_083" 14 "mux_cellTemperature_084_089" 15 "mux_cellTemperature_090_095" 16 "mux_cellTemperature_096_101" 17 "mux_cellTemperature_102_107" 18 "mux_cellTemperature_108_113" 19 "mux_cellTemperature_114_119" 20 "mux_cellTemperature_120_125" 21 "mux_cellTemperature_126_131" 22 "mux_cellTemperature_132_137" 23 "mux_cellTemperature_138_143" 24 "mux_cellTemperature_144_149" 25 "mux_cellTemperature_150_155" 26 "mux_cellTemperature_156_161" 27 "mux_cellTemperature_162_167" 28 "mux_cellTemperature_168_173" 29 "mux_cellTemperature_174_179" ; -VAL_ 545 foxBMS_StringState_Mux 0 "mux_stateString0" ; -VAL_ 641 foxBMS_StringMinMaxValues_Mux 0 "mux_minMaxValuesString0" ; -VAL_ 642 foxBMS_StringStateEstimation_Mux 0 "mux_String0_SOC_SOE" ; -VAL_ 512 foxBMS_Debug_Mux 1 "foxBMS_Rtc" 0 "foxBMS_VersionInfo" 2 "foxBMS_SoftwareReset" 3 "foxBMS_FramInitialization" 4 "foxBMS_TimeInfo" ; -VAL_ 551 foxBMS_DebugResponse_Mux 3 "foxBMS_McuWaferInformation" 2 "foxBMS_McuLotNumber" 1 "foxBMS_McuUniqueDieId" 0 "foxBMS_BmsSoftwareVersionInfo" 15 "foxBMS_BootInformation" 4 "foxBMS_RtcTime" 5 "foxBMS_CommitHash" ; -VAL_ 255 foxBMS_FatalErrors_Mux 0 "StackOverflow" ; -VAL_ 560 foxBMS_modeRequest 0 "Standby" 1 "Discharge" 2 "Charge" ; -VAL_ 544 foxBMS_State 0 "BMS_UNINITIALIZED" 1 "BMS_INITIALIZATION" 2 "BMS_INITIALIZED" 3 "BMS_IDLE" 4 "BMS_OPEN_CONTACTORS" 5 "BMS_STANDBY" 6 "BMS_PRECHARGE" 7 "BMS_NORMAL" 8 "BMS_DISCHARGE" 9 "BMS_CHARGE" 10 "BMS_ERROR" 11 "BMS_UNDEFINED" ; -VAL_ 544 foxBMS_Error_dieTemperatureMCU 0 "No Error" 1 "Error" ; -VAL_ 544 foxBMS_Error_Interlock 0 "No Error" 1 "Error" ; -VAL_ 544 foxBMS_alertFlag 0 "No Error" 1 "Error" ; -VAL_ 544 foxBMS_NvramCrcError 0 "No Error" 1 "Error" ; -VAL_ 545 String0_Err_deep_discharge 0 "No Error" 1 "Error" ; -VAL_ 545 String0_Err_positiveContactor 0 "No Error" 1 "Error" ; -VAL_ 545 String0_fuseBlown 0 "Fuse okay" 1 "Fuse blown" ; -VAL_ 545 String0_Err_negativeContactor 0 "No Error" 1 "Error" ; -VAL_ 512 SetWeekday 1 "Monday" 2 "Tuesday" 3 "Wednesday" 4 "Thursday" 5 "Friday" 6 "Saturday" 0 "Sunday" ; -VAL_ 512 SetMonth 1 "January" 2 "February" 3 "March" 4 "April" 5 "May" 6 "June" 7 "July" 8 "August" 9 "September" 10 "October" 11 "November" 12 "December" ; -VAL_ 512 foxBMS_TriggerSoftwareReset 0 "NO_SOFTWARE_RESET" 1 "SOFTWARE_RESET" ; -VAL_ 512 InitializeFram 0 "NO_FRAM_INITIALIZATION" 1 "FRAM_INITIALIZATION" ; -VAL_ 551 GetMonth 1 "January" 2 "February" 3 "March" 4 "April" 5 "May" 6 "June" 7 "July" 8 "August" 9 "September" 10 "October" 11 "November" 12 "December" ; -VAL_ 551 GetWeekday 1 "Monday" 2 "Tuesday" 3 "Wednesday" 4 "Thursday" 5 "Friday" 6 "Saturday" 0 "Sunday" ; +BA_ "GenMsgCycleTime" BO_ 544 100; +BA_ "GenMsgCycleTime" BO_ 545 1000; +BA_ "GenMsgCycleTime" BO_ 608 4500; +BA_ "GenMsgCycleTime" BO_ 592 5400; +BA_ "GenMsgCycleTime" BO_ 562 100; +BA_ "GenMsgCycleTime" BO_ 561 100; +BA_ "GenMsgCycleTime" BO_ 565 1000; +BA_ "GenMsgCycleTime" BO_ 563 100; +BA_ "GenMsgCycleTime" BO_ 564 100; +BA_ "GenMsgCycleTime" BO_ 577 100; +BA_ "GenMsgCycleTime" BO_ 576 100; +BA_ "GenMsgCycleTime" BO_ 581 1000; +BA_ "GenMsgCycleTime" BO_ 579 100; +BA_ "GenMsgCycleTime" BO_ 580 100; +BA_ "GenMsgCycleTime" BO_ 55 1000; + +BA_ "GenSigStartValue" SG_ 34 MS_IMC_MEAN_FACTOR 10; +BA_ "GenSigStartValue" SG_ 34 MS_IMC_R_ISO_WRN_THR 200; +BA_ "GenSigStartValue" SG_ 34 MC_IMC_SELFTEST_SCR 6; +BA_ "GenSigStartValue" SG_ 34 MS_IMC_R_ISO_ERR_THR 100; +BA_ "GenSigStartValue" SG_ 1319 IVT_ID_Result_As 6; +BA_ "GenSigStartValue" SG_ 1320 IVT_ID_Result_Wh 7; +BA_ "GenSigStartValue" SG_ 1318 IVT_ID_Result_W 5; +BA_ "GenSigStartValue" SG_ 1317 IVT_ID_Result_T 4; +BA_ "GenSigStartValue" SG_ 1314 IVT_ID_Result_U1 1; +BA_ "GenSigStartValue" SG_ 1315 IVT_ID_Result_U2 2; +BA_ "GenSigStartValue" SG_ 1316 IVT_ID_Result_U3 3; + +BA_ "SigType" SG_ 769 shortHash 3; + +VAL_ 640 AFE_CellTemperatures_Mux 0 "CellTemperatures_000_005" 1 "CellTemperatures_006_011" 2 "CellTemperatures_012_017" 3 "CellTemperatures_018_023" 4 "CellTemperatures_024_029" 5 "CellTemperatures_030_035" 6 "CellTemperatures_036_041" 7 "CellTemperatures_042_047" 8 "CellTemperatures_048_053" 9 "CellTemperatures_054_059" 10 "CellTemperatures_060_065" 11 "CellTemperatures_066_071" 12 "CellTemperatures_072_077" 13 "CellTemperatures_078_083" 14 "CellTemperatures_084_089" 15 "CellTemperatures_090_095" 16 "CellTemperatures_096_101" 17 "CellTemperatures_102_107" 18 "CellTemperatures_108_113" 19 "CellTemperatures_114_119" 20 "CellTemperatures_120_125" 21 "CellTemperatures_126_131" 22 "CellTemperatures_132_137" 23 "CellTemperatures_138_143" 24 "CellTemperatures_144_149" 25 "CellTemperatures_150_155" 26 "CellTemperatures_156_161" 27 "CellTemperatures_162_167" 28 "CellTemperatures_168_173" 29 "CellTemperatures_174_179"; +VAL_ 624 AFE_CellVoltages_Mux 0 "CellVoltages_000_003" 1 "CellVoltages_004_007" 2 "CellVoltages_008_011" 3 "CellVoltages_012_015" 4 "CellVoltages_016_019" 5 "CellVoltages_020_023" 6 "CellVoltages_024_027" 7 "CellVoltages_028_031" 8 "CellVoltages_032_035" 9 "CellVoltages_036_039" 10 "CellVoltages_040_043" 11 "CellVoltages_044_047" 12 "CellVoltages_048_051" 13 "CellVoltages_052_055" 14 "CellVoltages_056_059" 15 "CellVoltages_060_063" 16 "CellVoltages_064_067" 17 "CellVoltages_068_071" 18 "CellVoltages_072_075" 19 "CellVoltages_076_079" 20 "CellVoltages_080_083" 21 "CellVoltages_084_087" 22 "CellVoltages_088_091" 23 "CellVoltages_092_095" 24 "CellVoltages_096_099" 25 "CellVoltages_100_103" 26 "CellVoltages_104_107" 27 "CellVoltages_108_111" 28 "CellVoltages_112_115" 29 "CellVoltages_116_119" 30 "CellVoltages_120_123" 31 "CellVoltages_124_127" 32 "CellVoltages_128_131" 33 "CellVoltages_132_135" 34 "CellVoltages_136_139" 35 "CellVoltages_140_143" 36 "CellVoltages_144_147" 37 "CellVoltages_148_151" 38 "CellVoltages_152_155" 39 "CellVoltages_156_159" +40 "CellVoltages_160_163" 41 "CellVoltages_164_167" 42 "CellVoltages_168_171" 43 "CellVoltages_172_175" 44 "CellVoltages_176_179" 45 "CellVoltages_180_183" 46 "CellVoltages_184_187" 47 "CellVoltages_188_191" 48 "CellVoltages_192_195" 49 "CellVoltages_196_199" 50 "CellVoltages_200_203" 51 "CellVoltages_204_207" 52 "CellVoltages_208_211" 53 "CellVoltages_212_215"; +VAL_ 608 f_CellTemperatures_Mux 0 "CellTemperatures_000_005" 1 "CellTemperatures_006_011" 2 "CellTemperatures_012_017" 3 "CellTemperatures_018_023" 4 "CellTemperatures_024_029" 5 "CellTemperatures_030_035" 6 "CellTemperatures_036_041" 7 "CellTemperatures_042_047" 8 "CellTemperatures_048_053" 9 "CellTemperatures_054_059" 10 "CellTemperatures_060_065" 11 "CellTemperatures_066_071" 12 "CellTemperatures_072_077" 13 "CellTemperatures_078_083" 14 "CellTemperatures_084_089" 15 "CellTemperatures_090_095" 16 "CellTemperatures_096_101" 17 "CellTemperatures_102_107" 18 "CellTemperatures_108_113" 19 "CellTemperatures_114_119" 20 "CellTemperatures_120_125" 21 "CellTemperatures_126_131" 22 "CellTemperatures_132_137" 23 "CellTemperatures_138_143" 24 "CellTemperatures_144_149" 25 "CellTemperatures_150_155" 26 "CellTemperatures_156_161" 27 "CellTemperatures_162_167" 28 "CellTemperatures_168_173" 29 "CellTemperatures_174_179"; +VAL_ 592 f_CellVoltages_Mux 0 "CellVoltages_000_003" 1 "CellVoltages_004_007" 2 "CellVoltages_008_011" 3 "CellVoltages_012_015" 4 "CellVoltages_016_019" 5 "CellVoltages_020_023" 6 "CellVoltages_024_027" 7 "CellVoltages_028_031" 8 "CellVoltages_032_035" 9 "CellVoltages_036_039" 10 "CellVoltages_040_043" 11 "CellVoltages_044_047" 12 "CellVoltages_048_051" 13 "CellVoltages_052_055" 14 "CellVoltages_056_059" 15 "CellVoltages_060_063" 16 "CellVoltages_064_067" 17 "CellVoltages_068_071" 18 "CellVoltages_072_075" 19 "CellVoltages_076_079" 20 "CellVoltages_080_083" 21 "CellVoltages_084_087" 22 "CellVoltages_088_091" 23 "CellVoltages_092_095" 24 "CellVoltages_096_099" 25 "CellVoltages_100_103" 26 "CellVoltages_104_107" 27 "CellVoltages_108_111" 28 "CellVoltages_112_115" 29 "CellVoltages_116_119" 30 "CellVoltages_120_123" 31 "CellVoltages_124_127" 32 "CellVoltages_128_131" 33 "CellVoltages_132_135" 34 "CellVoltages_136_139" 35 "CellVoltages_140_143" 36 "CellVoltages_144_147" 37 "CellVoltages_148_151" 38 "CellVoltages_152_155" 39 "CellVoltages_156_159" +40 "CellVoltages_160_163" 41 "CellVoltages_164_167" 42 "CellVoltages_168_171" 43 "CellVoltages_172_175" 44 "CellVoltages_176_179" 45 "CellVoltages_180_183" 46 "CellVoltages_184_187" 47 "CellVoltages_188_191" 48 "CellVoltages_192_195" 49 "CellVoltages_196_199" 50 "CellVoltages_200_203" 51 "CellVoltages_204_207" 52 "CellVoltages_208_211" 53 "CellVoltages_212_215"; +VAL_ 255 f_CrashDump_Mux 0 "StackOverflow"; +VAL_ 768 f_Debug_Mux 1 "Rtc" 0 "VersionInfo" 2 "SoftwareReset" 3 "FramInitialization" 4 "TimeInfo"; +VAL_ 771 f_DebugBuildConfiguration_Mux 36 "BatteryCell_MaxDischargeTemp" 39 "BatteryCell_MinDischargeTemp" 34 "BatteryCell_MaxChargeTemp" 38 "BatteryCell_MinChargeTemp" 37 "BatteryCell_MaxVolt" 40 "BatteryCell_MinVolt" 32 "BatteryCell" 33 "BatteryCell_MaxChargeCur" 35 "BatteryCell_MaxDischargeCur" 48 "BatterySystem_General1" 55 "BatterySystem_TotalNumbers" 51 "BatterySystem_CurrentSensor" 50 "BatterySystem_Contactors" 54 "BatterySystem_OpenWireCheck" 52 "BatterySystem_Fuse" 49 "BatterySystem_General2" 53 "BatterySystem_MaxCurrent" 16 "Application" 0 "Slave"; +VAL_ 769 f_DebugResponse_Mux 3 "McuWaferInformation" 2 "McuLotNumber" 1 "McuUniqueDieId" 0 "BmsSoftwareVersionInfo" 15 "BootInformation" 4 "RtcTime" 5 "CommitHash"; +VAL_ 577 f_StringMinimumMaximumValues_Mux 0 "String0"; +VAL_ 576 f_StringState_Mux 0 "String0"; +VAL_ 581 f_StringStateEstimation_Mux 0 "String0"; +VAL_ 579 f_StringValuesP0_Mux 0 "String0"; +VAL_ 580 f_StringValuesP1_Mux 0 "String0"; +VAL_ 34 IMD_Request_Mux 61 "S_IMC_GET_MANUFACTURER" 223 "S_VIFC_GET_POWER_MODE" 201 "S_VIFC_CTL_POWER_MODE" 222 "S_VIFC_GET_VERSION" 51 "S_IMC_GET_VERSION" 59 "S_IMC_GET_EEPROM" 203 "S_VIFC_CTL_MEASUREMENT" 43 "S_IMC_SET_MEAN_FACTOR" 42 "S_IMC_SET_EEPROM" 202 "S_VIFC_CTL_LOCK" 0 "S_VIFC_CTL_DUMMY" 210 "S_VIFC_SET_HV_RELAIS" 41 "S_IMC_SET_R_ISO_WRN_THR" 34 "S_IMC_CTL_CALIB" 33 "S_IMC_CTL_SELFTEST" 40 "S_IMC_SET_R_ISO_ERR_THR" 255 "S_IMD_ERROR_FRAME" 226 "S_VIFC_GET_IMC_ALIVE" 225 "S_VIFC_GET_TEMP" 224 "S_VIFC_GET_LOCK" 221 "S_VIFC_GET_HV_RELAIS" 220 "S_VIFC_GET_STATUS" 200 "S_VIFC_CTL_IMC_RESET" 90 "S_IMC_GET_TEST_CNT" 60 "S_IMC_GET_MEAN_FACTOR" 58 "S_IMC_GET_HV_2" 57 "S_IMC_GET_R_ISO_WRN_THR" 55 "S_IMC_GET_STATUS" 54 "S_IMC_GET_HV_1" 53 "S_IMC_GET_R_ISO" 50 "S_IMC_GET_R_ISO_ERR_THR" 35 "S_IMC_CTL_SYS_UPDATE"; +VAL_ 35 IMD_Response_Mux 220 "S_VIFC_GET_STATUS" 55 "S_IMC_GET_STATUS" 222 "S_VIFC_GET_VERSION" 51 "S_IMC_GET_VERSION" 61 "S_IMC_GET_MANUFACTURER" 53 "S_IMC_GET_R_ISO" 225 "S_VIFC_GET_TEMP" 226 "S_VIFC_GET_IMC_ALIVE" 223 "S_VIFC_GET_POWER_MODE" 201 "S_VIFC_CTL_POWER_MODE" 43 "S_IMC_SET_MEAN_FACTOR" 42 "S_IMC_SET_EEPROM" 34 "S_IMC_CTL_CALIB" 41 "S_IMC_SET_R_ISO_WRN_THR" 40 "S_IMC_SET_R_ISO_ERR_THR" 202 "S_VIFC_CTL_LOCK" 203 "S_VIFC_CTL_MEASUREMENT" 210 "S_VIFC_SET_HV_RELAIS" 59 "S_IMC_GET_EEPROM" 60 "S_IMC_GET_MEAN_FACTOR" 224 "S_VIFC_GET_LOCK" 221 "S_VIFC_GET_HV_RELAIS" 255 "S_IMD_ERROR_FRAME" 58 "S_IMC_GET_HV_2" 54 "S_IMC_GET_HV_1" 57 "S_IMC_GET_R_ISO_WRN_THR" 50 "S_IMC_GET_R_ISO_ERR_THR" 33 "S_IMC_CTL_SELFTEST" 90 "S_IMC_GET_TEST_CNT" 0 "S_VIFC_CTL_DUMMY" 200 "S_VIFC_CTL_IMC_RESET" 35 "S_IMC_CTL_SYS_UPDATE"; +VAL_ 640 CellTemperature_000_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_001_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_002_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_003_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_004_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_005_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_006_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_007_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_008_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_009_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_010_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_011_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_012_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_013_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_014_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_015_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_016_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_017_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_018_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_019_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_020_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_021_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_022_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_023_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_024_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_025_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_026_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_027_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_028_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_029_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_030_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_031_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_032_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_033_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_034_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_035_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_036_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_037_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_038_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_039_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_040_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_041_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_042_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_043_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_044_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_045_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_046_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_047_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_048_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_049_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_050_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_051_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_052_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_053_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_054_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_055_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_056_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_057_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_058_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_059_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_060_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_061_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_062_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_063_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_064_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_065_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_066_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_067_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_068_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_069_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_070_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_071_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_072_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_073_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_074_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_075_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_076_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_077_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_078_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_079_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_080_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_081_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_082_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_083_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_084_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_085_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_086_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_087_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_088_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_089_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_090_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_091_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_092_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_093_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_094_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_095_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_096_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_097_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_098_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_099_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_100_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_101_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_102_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_103_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_104_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_105_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_106_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_107_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_108_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_109_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_110_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_111_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_112_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_113_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_114_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_115_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_116_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_117_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_118_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_119_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_120_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_121_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_122_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_123_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_124_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_125_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_126_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_127_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_128_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_129_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_130_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_131_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_132_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_133_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_134_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_135_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_136_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_137_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_138_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_139_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_140_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_141_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_142_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_143_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_144_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_145_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_146_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_147_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_148_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_149_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_150_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_151_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_152_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_153_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_154_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_155_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_156_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_157_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_158_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_159_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_160_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_161_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_162_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_163_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_164_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_165_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_166_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_167_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_168_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_169_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_170_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_171_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_172_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_173_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_174_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_175_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_176_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_177_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_178_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 640 CellTemperature_179_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_000_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_001_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_002_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_003_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_004_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_005_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_006_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_007_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_008_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_009_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_010_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_011_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_012_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_013_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_014_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_015_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_016_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_017_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_018_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_019_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_020_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_021_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_022_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_023_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_024_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_025_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_026_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_027_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_028_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_029_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_030_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_031_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_032_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_033_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_034_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_035_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_036_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_037_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_038_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_039_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_040_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_041_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_042_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_043_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_044_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_045_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_046_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_047_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_048_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_049_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_050_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_051_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_052_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_053_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_054_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_055_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_056_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_057_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_058_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_059_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_060_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_061_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_062_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_063_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_064_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_065_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_066_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_067_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_068_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_069_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_070_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_071_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_072_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_073_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_074_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_075_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_076_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_077_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_078_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_079_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_080_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_081_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_082_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_083_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_084_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_085_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_086_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_087_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_088_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_089_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_090_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_091_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_092_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_093_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_094_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_095_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_096_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_097_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_098_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_099_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_100_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_101_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_102_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_103_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_104_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_105_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_106_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_107_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_108_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_109_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_110_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_111_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_112_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_113_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_114_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_115_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_116_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_117_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_118_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_119_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_120_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_121_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_122_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_123_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_124_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_125_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_126_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_127_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_128_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_129_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_130_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_131_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_132_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_133_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_134_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_135_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_136_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_137_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_138_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_139_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_140_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_141_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_142_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_143_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_144_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_145_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_146_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_147_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_148_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_149_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_150_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_151_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_152_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_153_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_154_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_155_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_156_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_157_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_158_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_159_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_160_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_161_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_162_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_163_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_164_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_165_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_166_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_167_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_168_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_169_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_170_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_171_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_172_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_173_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_174_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_175_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_176_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_177_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_178_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_179_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_180_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_181_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_182_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_183_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_184_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_185_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_186_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_187_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_188_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_189_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_190_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_191_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_192_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_193_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_194_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_195_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_196_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_197_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_198_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_199_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_200_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_201_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_202_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_203_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_204_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_205_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_206_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_207_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_208_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_209_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_210_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_211_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_212_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_213_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_214_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 624 CellVoltage_215_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 544 BmsState 0 "UNINITIALIZED" 1 "INITIALIZATION" 2 "INITIALIZED" 3 "IDLE" 4 "OPEN_CONTACTORS" 5 "STANDBY" 6 "PRECHARGE" 7 "NORMAL" 8 "DISCHARGE" 9 "CHARGE" 10 "ERROR" 11 "UNDEFINED"; +VAL_ 544 GeneralError 0 "No Error" 1 "Error"; +VAL_ 544 GeneralWarning 0 "No Warning" 1 "Warning"; +VAL_ 544 McuDieTemperatureError 0 "No Error" 1 "Error"; +VAL_ 544 BmsMasterPcbOvertemperatureError 0 "No Error" 1 "Error"; +VAL_ 544 BmsMasterPcbUndertemperatureErro 0 "No Error" 1 "Error"; +VAL_ 544 PrechargeVoltageError 0 "No Error" 1 "Error"; +VAL_ 544 PrechargeCurrentError 0 "No Error" 1 "Error"; +VAL_ 544 HeaterState 0 "Inactive" 1 "Active"; +VAL_ 544 CoolingState 0 "Inactive" 1 "Active"; +VAL_ 544 InsulationMonitoring 0 "Inactive" 1 "Active"; +VAL_ 544 ChargingComplete 0 "Incomplete" 1 "Complete"; +VAL_ 544 EmergencyShutoff 0 "Inactive" 1 "Active"; +VAL_ 544 MainFuseBlown 0 "Fuse okay" 1 "Fuse blown"; +VAL_ 544 InterlockState 0 "Closed" 1 "Open"; +VAL_ 544 InsulationError 0 "No Error" 1 "Error"; +VAL_ 544 CanTimingError 0 "No Error" 1 "Error"; +VAL_ 544 PackOvercurrentChargeError 0 "No Error" 1 "Error"; +VAL_ 544 PackOvercurrentDischargeError 0 "No Error" 1 "Error"; +VAL_ 544 SystemMonitoringError 0 "No Error" 1 "Error"; +VAL_ 544 AlertFlag 0 "No Alert" 1 "Alert"; +VAL_ 544 NvramCrcError 0 "No Error" 1 "Error"; +VAL_ 545 TimingViolationEngineTask 0 "No Error" 1 "Error"; +VAL_ 545 TimingViolation1msTask 0 "No Error" 1 "Error"; +VAL_ 545 TimingViolation10msTask 0 "No Error" 1 "Error"; +VAL_ 545 TimingViolation100msTask 0 "No Error" 1 "Error"; +VAL_ 545 TimingViolation100msAlgoTask 0 "No Error" 1 "Error"; +VAL_ 545 TimingViolation10msTaskRecorded 0 "No Error" 1 "Error"; +VAL_ 545 TimingViolation100msTaskRecorded 0 "No Error" 1 "Error"; +VAL_ 545 TimingViolation100msAlgoTaskReco 0 "No Error" 1 "Error"; +VAL_ 545 TimingViolationEngineTaskRecorde 0 "No Error" 1 "Error"; +VAL_ 545 TimingViolation1msTaskRecorded 0 "No Error" 1 "Error"; +VAL_ 528 RequestBmsMode 0 "Standby" 1 "Discharge" 2 "Charge"; +VAL_ 528 IndicatePrechargeType 0 "INTERNAL" 1 "EXTERNAL"; +VAL_ 528 ChargerConnected 0 "No" 1 "Yes"; +VAL_ 608 CellTemperature_000_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_001_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_002_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_003_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_004_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_005_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_006_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_007_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_008_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_009_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_010_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_011_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_012_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_013_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_014_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_015_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_016_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_017_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_018_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_019_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_020_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_021_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_022_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_023_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_024_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_025_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_026_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_027_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_028_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_029_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_030_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_031_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_032_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_033_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_034_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_035_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_036_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_037_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_038_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_039_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_040_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_041_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_042_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_043_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_044_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_045_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_046_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_047_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_048_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_049_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_050_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_051_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_052_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_053_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_054_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_055_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_056_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_057_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_058_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_059_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_060_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_061_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_062_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_063_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_064_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_065_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_066_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_067_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_068_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_069_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_070_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_071_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_072_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_073_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_074_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_075_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_076_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_077_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_078_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_079_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_080_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_081_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_082_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_083_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_084_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_085_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_086_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_087_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_088_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_089_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_090_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_091_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_092_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_093_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_094_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_095_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_096_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_097_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_098_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_099_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_100_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_101_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_102_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_103_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_104_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_105_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_106_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_107_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_108_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_109_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_110_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_111_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_112_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_113_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_114_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_115_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_116_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_117_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_118_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_119_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_120_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_121_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_122_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_123_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_124_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_125_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_126_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_127_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_128_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_129_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_130_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_131_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_132_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_133_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_134_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_135_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_136_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_137_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_138_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_139_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_140_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_141_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_142_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_143_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_144_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_145_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_146_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_147_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_148_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_149_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_150_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_151_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_152_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_153_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_154_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_155_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_156_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_157_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_158_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_159_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_160_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_161_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_162_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_163_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_164_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_165_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_166_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_167_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_168_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_169_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_170_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_171_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_172_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_173_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_174_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_175_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_176_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_177_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_178_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 608 CellTemperature_179_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_000_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_001_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_002_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_003_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_004_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_005_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_006_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_007_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_008_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_009_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_010_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_011_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_012_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_013_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_014_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_015_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_016_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_017_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_018_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_019_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_020_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_021_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_022_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_023_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_024_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_025_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_026_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_027_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_028_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_029_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_030_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_031_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_032_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_033_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_034_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_035_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_036_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_037_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_038_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_039_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_040_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_041_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_042_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_043_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_044_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_045_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_046_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_047_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_048_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_049_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_050_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_051_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_052_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_053_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_054_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_055_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_056_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_057_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_058_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_059_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_060_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_061_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_062_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_063_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_064_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_065_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_066_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_067_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_068_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_069_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_070_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_071_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_072_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_073_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_074_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_075_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_076_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_077_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_078_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_079_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_080_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_081_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_082_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_083_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_084_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_085_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_086_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_087_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_088_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_089_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_090_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_091_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_092_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_093_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_094_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_095_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_096_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_097_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_098_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_099_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_100_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_101_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_102_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_103_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_104_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_105_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_106_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_107_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_108_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_109_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_110_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_111_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_112_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_113_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_114_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_115_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_116_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_117_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_118_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_119_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_120_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_121_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_122_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_123_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_124_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_125_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_126_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_127_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_128_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_129_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_130_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_131_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_132_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_133_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_134_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_135_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_136_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_137_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_138_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_139_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_140_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_141_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_142_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_143_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_144_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_145_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_146_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_147_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_148_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_149_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_150_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_151_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_152_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_153_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_154_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_155_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_156_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_157_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_158_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_159_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_160_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_161_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_162_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_163_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_164_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_165_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_166_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_167_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_168_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_169_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_170_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_171_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_172_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_173_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_174_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_175_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_176_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_177_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_178_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_179_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_180_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_181_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_182_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_183_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_184_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_185_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_186_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_187_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_188_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_189_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_190_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_191_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_192_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_193_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_194_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_195_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_196_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_197_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_198_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_199_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_200_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_201_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_202_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_203_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_204_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_205_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_206_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_207_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_208_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_209_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_210_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_211_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_212_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_213_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_214_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 592 CellVoltage_215_invalidFlag 0 "Invalid" 1 "Valid"; +VAL_ 768 SetWeekday 1 "Monday" 2 "Tuesday" 3 "Wednesday" 4 "Thursday" 5 "Friday" 6 "Saturday" 0 "Sunday"; +VAL_ 768 SetMonth 1 "January" 2 "February" 3 "March" 4 "April" 5 "May" 6 "June" 7 "July" 8 "August" 9 "September" 10 "October" 11 "November" 12 "December"; +VAL_ 768 TriggerSoftwareReset 0 "NO_SOFTWARE_RESET" 1 "SOFTWARE_RESET"; +VAL_ 768 InitializeFram 0 "Uninitialized" 1 "Initialized"; +VAL_ 771 CurrentSensorCyclic 0 "Current sensor cyclic" 1 "Current sensor triggered"; +VAL_ 771 SOC_algorithm 0 "None" 1 "Debug" 2 "Counting"; +VAL_ 771 SOE_algorithm 0 "None" 1 "Debug" 2 "Counting"; +VAL_ 771 SOF_algorithm 0 "Trapezoid"; +VAL_ 771 SOH_algorithm 0 "None" 1 "Debug"; +VAL_ 771 Balancing_strategy 0 "none" 1 "voltage" 2 "history"; +VAL_ 771 IMD 0 "none" 1 "Bender_iso165c" 2 "Bender_ir155"; +VAL_ 771 Rtos 0 "freertos" 1 "safertos"; +VAL_ 771 AFE 0 "LTC 6804-1" 1 "LTC 6806" 2 "LTC 6811-1" 3 "LTC 6812-1" 4 "LTC 6813-1" 5 "NXP MC33775A" 6 "MAXIM MAX17852" 7 "Debug default" 8 "ADI ADES1830" 9 "TI Dummy"; +VAL_ 771 TemperatureSensor 0 "Fak00" 1 "Epc00" 2 "Epc01" 3 "Mur00" 4 "Sem00" 5 "Vis00" 6 "Vis01" 7 "Vis02"; +VAL_ 771 TemperatureSensorMethod 0 "polynomial" 1 "lookup-table"; +VAL_ 769 DirtyFlag 0 "No" 1 "Yes"; +VAL_ 769 ReleaseDistanceOverflow 0 "No" 1 "Yes"; +VAL_ 769 UnderVersionControl 0 "No" 1 "Yes"; +VAL_ 769 GetMonth 1 "January" 2 "February" 3 "March" 4 "April" 5 "May" 6 "June" 7 "July" 8 "August" 9 "September" 10 "October" 11 "November" 12 "December"; +VAL_ 769 GetWeekday 1 "Monday" 2 "Tuesday" 3 "Wednesday" 4 "Thursday" 5 "Friday" 6 "Saturday" 0 "Sunday"; +VAL_ 576 IsStringConnected 0 "No" 1 "Yes"; +VAL_ 576 IsBalancingActive 0 "No" 1 "Yes"; +VAL_ 576 OvertemperatureChargeMslError 0 "No Error" 1 "Error"; +VAL_ 576 UndertemperatureChargeMslError 0 "No Error" 1 "Error"; +VAL_ 576 OvertemperatureDischargeMslError 0 "No Error" 1 "Error"; +VAL_ 576 UndertemperatureDischargeMslErro 0 "No Error" 1 "Error"; +VAL_ 576 CellOvercurrentChargeMslError 0 "No Error" 1 "Error"; +VAL_ 576 CellOvercurrentDischargeMslError 0 "No Error" 1 "Error"; +VAL_ 576 OvervoltageMslError 0 "No Error" 1 "Error"; +VAL_ 576 UndervoltageMslError 0 "No Error" 1 "Error"; +VAL_ 576 DeepDischargeError 0 "No Error" 1 "Error"; +VAL_ 576 StringCurrentMeasurementError 0 "No Error" 1 "Error"; +VAL_ 576 PositiveContactorError 0 "No Error" 1 "Error"; +VAL_ 576 OpenWireError 0 "No Error" 1 "Error"; +VAL_ 576 CellVoltagePlausibilityError 0 "No Error" 1 "Error"; +VAL_ 576 CellTemperaturePlausibilityError 0 "No Error" 1 "Error"; +VAL_ 576 StringVoltagePlausibilityError 0 "No Error" 1 "Error"; +VAL_ 576 SlaveHardwareError 0 "No Error" 1 "Error"; +VAL_ 576 DaisyChainBaseCommunicationError 0 "No Error" 1 "Error"; +VAL_ 576 DaisyChainBaseCrcError 0 "No Error" 1 "Error"; +VAL_ 576 DaisyChainBaseVoltMeasOorError 0 "No Error" 1 "Error"; +VAL_ 576 DaisyChainBaseTempMeasOorError 0 "No Error" 1 "Error"; +VAL_ 576 CoulombCountingMeasurementError 0 "No Error" 1 "Error"; +VAL_ 576 EnergyCountingMeasurementError 0 "No Error" 1 "Error"; +VAL_ 576 VoltageSpreadPlausibilityError 0 "No Error" 1 "Error"; +VAL_ 576 TemperatureSpreadPlausibilityErr 0 "No Error" 1 "Error"; +VAL_ 576 IsStringFuseBlown 0 "No" 1 "Yes"; +VAL_ 576 OvervoltageMolWarning 0 "No Warning" 1 "Warning"; +VAL_ 576 UndervoltageMolWarning 0 "No Warning" 1 "Warning"; +VAL_ 576 OvertemperatureChargeMolWarning 0 "No Warning" 1 "Warning"; +VAL_ 576 OvertemperatureDischargeMolWarni 0 "No Warning" 1 "Warning"; +VAL_ 576 UndertemperatureChargeMolWarning 0 "No Warning" 1 "Warning"; +VAL_ 576 UndertemperatureDischargeMolWarn 0 "No Warning" 1 "Warning"; +VAL_ 576 CellOvercurrentChargeMolWarning 0 "No Warning" 1 "Warning"; +VAL_ 576 CellOvercurrentDischargeMolWarni 0 "No Warning" 1 "Warning"; +VAL_ 576 OvertemperatureChargeRslWarning 0 "No Warning" 1 "Warning"; +VAL_ 576 UndertemperatureChargeRslWarning 0 "No Warning" 1 "Warning"; +VAL_ 576 OvertemperatureDischargeRslWarni 0 "No Warning" 1 "Warning"; +VAL_ 576 UndertemperatureDischargeRslWarn 0 "No Warning" 1 "Warning"; +VAL_ 576 CellOvercurrentChargeRslWarning 0 "No Warning" 1 "Warning"; +VAL_ 576 CellOvercurrentDischargeRslWarni 0 "No Warning" 1 "Warning"; +VAL_ 576 OvervoltageRslWarning 0 "No Warning" 1 "Warning"; +VAL_ 576 UndervoltageRslWarning 0 "No Warning" 1 "Warning"; +VAL_ 576 NegativeContactorError 0 "No Error" 1 "Error"; +VAL_ 576 StringVoltageMeasurementError 0 "No Error" 1 "Error"; +VAL_ 576 FusedStringVoltageMeasurementErr 0 "No Error" 1 "Error"; +VAL_ 576 PackVoltageMeasurementError 0 "No Error" 1 "Error"; +VAL_ 576 StringOvercurrentError 0 "No Error" 1 "Error"; +VAL_ 55 II_VIFC_STATUS_04_VIFC_CmdError 1 "Error" 0 "NoError"; +VAL_ 55 II_VIFC_STATUS_13_ST_ParamConfig 1 "NotExecuted" 0 "Executed"; +VAL_ 55 II_VIFC_STATUS_12_ST_Overall 1 "NotExecuted" 0 "Executed"; +VAL_ 55 II_VIFC_STATUS_02_IMC_Alive 1 "Error" 0 "NoError"; +VAL_ 55 II_VIFC_STATUS_01_IMC_Connection 1 "Error" 0 "NoError"; +VAL_ 55 II_VIFC_STATUS_00_IsoMeasurement 1 "Deactivated" 0 "Activated"; +VAL_ 55 II_IMC_STATUS_05_IsoWarning 1 "Warning" 0 "NoWarning"; +VAL_ 55 II_IMC_STATUS_04_Selftest 100 "Unknown" 1 "Running" 0 "NotRunning"; +VAL_ 55 II_IMC_STATUS_03_Calibration 100 "Unknown" 1 "Running" 0 "NotRunning"; +VAL_ 55 II_IMC_STATUS_02_System 1 "Error" 0 "NoError"; +VAL_ 55 II_IMC_STATUS_01_Ground 1 "Error" 0 "NoError"; +VAL_ 55 II_IMC_STATUS_00_IsoFailure 1 "Error" 0 "NoError"; +VAL_ 34 MG_VIFC_POWER_MODE 100 "Unknown" 3 "PowerDown" 2 "PowerUp" 1 "PowerOn" 0 "PowerOff"; +VAL_ 34 MC_VIFC_POWER_MODE 100 "Unknown" 3 "PowerDown" 2 "PowerUp" 1 "PowerOn" 0 "PowerOff"; +VAL_ 34 MG_VIFC_VERSION_INDEX 2 "Firmware ID" 1 "Firmware" 0 "Bootloader"; +VAL_ 34 MG_IMC_VERSION_INDEX 2 "Firmware ID" 1 "Firmware" 0 "Bootloader"; +VAL_ 34 MC_VIFC_MEASURE_MODE 1 "Activated" 0 "Deactivated"; +VAL_ 34 MC_VIFC_LOCK_MODE 100 "Unknown" 2 "BlockedToManyRetries" 1 "Locked" 0 "Unlocked"; +VAL_ 34 MS_VIFC_HV_RELAIS_STATE 100 "Unknown" 1 "HVEnabled" 0 "HVDisabled"; +VAL_ 34 MS_VIFC_HV_RELAIS 100 "Unknown" 1 "HV_1_POS" 0 "HV_1_NEG"; +VAL_ 34 MC_IMC_CALIB_STEP 6 "GainCalibrationHV2" 5 "OffsetCalibrationHV2" 4 "ARef_12V_5V_Calibration" 3 "IsoCalibration" 2 "GainCalibrationHV1" 1 "OffsetCalibrationHV1" 0 "NoAction"; +VAL_ 34 MC_IMC_SELFTEST_SCR 2 "ParameterConfig" 1 "OverAll" 0 "NoAction"; +VAL_ 35 IG_VIFC_STATUS_04_VIFC_CmdError 1 "Error" 0 "NoError"; +VAL_ 35 IG_VIFC_STATUS_13_ST_ParamConfig 1 "NotExecuted" 0 "Executed"; +VAL_ 35 IG_VIFC_STATUS_12_ST_Overall 1 "NotExecuted" 0 "Executed"; +VAL_ 35 IG_VIFC_STATUS_02_IMC_Alive 1 "Error" 0 "NoError"; +VAL_ 35 IG_VIFC_STATUS_01_IMCConnection 1 "Error" 0 "NoError"; +VAL_ 35 IG_VIFC_STATUS_00_IsoMeasurement 1 "Deactivated" 0 "Activated"; +VAL_ 35 IG_IMC_STATUS_EXT_15_Reserved 1 "Error" 0 "NoError"; +VAL_ 35 IG_IMC_STATUS_EXT_06_Reserved 1 "Error" 0 "NoError"; +VAL_ 35 IG_IMC_STATUS_EXT_14_IDString 1 "Error" 0 "NoError"; +VAL_ 35 IG_IMC_STATUS_EXT_13_HV2 1 "Error" 0 "NoError"; +VAL_ 35 IG_IMC_STATUS_EXT_12_HV1 1 "Error" 0 "NoError"; +VAL_ 35 IG_IMC_STATUS_EXT_11_FuseBits 1 "Error" 0 "NoError"; +VAL_ 35 IG_IMC_STATUS_EXT_10_12V_NEG 1 "Error" 0 "NoError"; +VAL_ 35 IG_IMC_STATUS_EXT_09_12V_POS 1 "Error" 0 "NoError"; +VAL_ 35 IG_IMC_STATUS_EXT_08_TestPulse 1 "Error" 0 "NoError"; +VAL_ 35 IG_IMC_STATUS_EXT_07_Parameter 1 "Error" 0 "NoError"; +VAL_ 35 IG_IMC_STATUS_EXT_05_Stack 1 "Error" 0 "NoError"; +VAL_ 35 IG_IMC_STATUS_EXT_04_RAM 1 "Error" 0 "NoError"; +VAL_ 35 IG_IMC_STATUS_EXT_03_Flash 1 "Error" 0 "NoError"; +VAL_ 35 IG_IMC_STATUS_EXT_02_EEPROM 1 "Error" 0 "NoError"; +VAL_ 35 IG_IMC_STATUS_EXT_01_Hardware 1 "Error" 0 "NoError"; +VAL_ 35 IG_IMC_STATUS_EXT_00_Calibration 1 "Error" 0 "NoError"; +VAL_ 35 IG_IMC_STATUS_05_IsoWarning 1 "Warning" 0 "NoWarning"; +VAL_ 35 IG_IMC_STATUS_04_Selftest 100 "Unknown" 1 "Running" 0 "NotRunning"; +VAL_ 35 IG_IMC_STATUS_03_Calibration 100 "Unknown" 1 "Running" 0 "NotRunning"; +VAL_ 35 IG_IMC_STATUS_02_System 1 "Error" 0 "NoError"; +VAL_ 35 IG_IMC_STATUS_01_Ground 1 "Error" 0 "NoError"; +VAL_ 35 IG_IMC_STATUS_00_IsoFailure 1 "Error" 0 "NoError"; +VAL_ 35 IG_VIFC_VERSION_INDEX 1 "Firmware" 0 "Bootloader"; +VAL_ 35 IG_IMC_VERSION_INDEX 3 "Firmware Hash" 2 "Firmware ID" 1 "Firmware" 0 "Bootloader"; +VAL_ 35 IG_IMC_R_ISO_BIAS 2 "HV_1_POS" 1 "HV_1_NEG" 0 "Unknown"; +VAL_ 35 IG_VIFC_IMC_ALIVE 100 "Unknown" 2 "OutOfRange" 1 "Error" 0 "Running"; +VAL_ 35 IG_VIFC_POWER_MODE 100 "Unknown" 3 "PowerDown" 2 "PowerUp" 1 "PowerOn" 0 "PowerOff"; +VAL_ 35 IC_VIFC_POWER_MODE 100 "Unknown" 3 "PowerDown" 2 "PowerUp" 1 "PowerOn" 0 "PowerOff"; +VAL_ 35 IC_IMC_CALIB_STEP 6 "GainCalibrationHV2" 5 "OffsetCalibrationHV2" 4 "ARef_12V_5V_Calibration" 3 "IsoCalibration" 2 "GainCalibrationHV1" 1 "OffsetCalibrationHV1" 0 "NoAction"; +VAL_ 35 IC_VIFC_LOCK_MODE 100 "Unknown" 2 "BlockedToManyRetries" 1 "Locked" 0 "Unlocked"; +VAL_ 35 IS_VIFC_HV_RELAIS_STATE 100 "Unknown" 1 "HVEnabled" 0 "HVDisabled"; +VAL_ 35 IS_VIFC_HV_RELAIS 100 "Unknown" 1 "HV_1_POS" 0 "HV_1_NEG"; +VAL_ 35 IG_VIFC_LOCK_MODE 100 "Unknown" 2 "BlockedToManyRetries" 1 "Locked" 0 "Unlocked"; +VAL_ 35 IG_VIFC_HV_RELAIS_STATE 100 "Unknown" 1 "HVEnabled" 0 "HVDisabled"; +VAL_ 35 IG_VIFC_HV_RELAIS 100 "Unknown" 1 "HV_1_POS" 0 "HV_1_NEG"; +VAL_ 35 IG_IMD_ERROR_CODE 1038 "VIFC_NoResponseTimeout" 1037 "VIFC_RepeatedOrMissingFrame" 1035 "VIFC_UnknownCommand" 1034 "VIFC_InvalidParameter" 1033 "VIFC_ChecksumErrorInFrame" 1032 "VIFC_Timeout10msExpired" 1001 "VIFC_QueueFullCommandRejected" 1000 "VIFC_CommandLocked" 37 "RepeatedOrMissingFrame" 36 "ErrorDuringWritingEEProms" 35 "UnknownCommand" 34 "InvalidParameter" 33 "ChecksumErrorInFrame" 32 "Timeout10msExpired"; +VAL_ 35 IG_IMD_FAILED_CMD 255 "S_IMD_ERROR_FRAME" 226 "S_VIFC_GET_IMC_ALIVE" 225 "S_VIFC_GET_TEMP" 224 "S_VIFC_GET_LOCK" 223 "S_VIFC_GET_POWER_MODE" 222 "S_VIFC_GET_VERSION" 221 "S_VIFC_GET_HV_RELAIS" 220 "S_VIFC_GET_STATUS" 210 "S_VIFC_SET_HV_RELAIS" 203 "S_VIFC_CTL_MEASUREMENT" 202 "S_VIFC_CTL_LOCK" 201 "S_VIFC_CTL_POWER_MODE" 200 "S_VIFC_CTL_IMC_RESET" 90 "S_IMC_GET_TEST_CNT" 61 "S_IMC_GET_MANUFACTURER" 60 "S_IMC_GET_MEAN_FACTOR" 59 "S_IMC_GET_EEPROM" 58 "S_IMC_GET_HV_2" 57 "S_IMC_GET_R_ISO_WRN_THR" 55 "S_IMC_GET_STATUS" 54 "S_IMC_GET_HV_1" 53 "S_IMC_GET_R_ISO" 51 "S_IMC_GET_VERSION" 50 "S_IMC_GET_R_ISO_ERR_THR" 43 "S_IMC_SET_MEAN_FACTOR" 42 "S_IMC_SET_EEPROM" 41 "S_IMC_SET_R_ISO_WRN_THR" 40 "S_IMC_SET_R_ISO_ERR_THR" 35 "S_IMC_CTL_SYS_UPDATE" 34 "S_IMC_CTL_CALIB" 33 "S_IMC_CTL_SELFTEST" 0 "S_VIFC_CTL_DUMMY"; +VAL_ 35 IC_IMC_SELFTEST_SCR 2 "ParameterConfig" 1 "OverAll" 0 "NoAction"; +VAL_ 1313 IVT_ID_Result_I 0 "Vt_Result_I"; +VAL_ 1319 IVT_ID_Result_As 6 "Vt_Result_As"; +VAL_ 1320 IVT_ID_Result_Wh 7 "Vt_Result_Wh"; +VAL_ 1318 IVT_ID_Result_W 5 "Vt_Result_W"; +VAL_ 1317 IVT_ID_Result_T 4 "Vt_Result_T"; +VAL_ 1314 IVT_ID_Result_U1 1 "Vt_Result_U1"; +VAL_ 1315 IVT_ID_Result_U2 2 "Vt_Result_U2"; +VAL_ 1316 IVT_ID_Result_U3 3 "Vt_Result_U3"; diff --git a/tools/dbc/foxbms.sym b/tools/dbc/foxbms.sym index 573f6905..2e43cb05 100644 --- a/tools/dbc/foxbms.sym +++ b/tools/dbc/foxbms.sym @@ -1,1633 +1,3449 @@ +// foxBMS CAN message and signal definition + FormatVersion=6.0 // Do not edit this line! -UniqueVariables=True Title="foxBMS" {ENUMS} -Enum=foxBMS_ModeRequest(0="Standby", // Disconnect strings from HV bus +Enum=f_ModeRequest(0="Standby", // Disconnect strings from HV bus 1="Discharge", // Connect strings to HV bus to start discharge 2="Charge") // Connect strings to HV bus to start charging // Possible states (i.e., values) the BMS state machine can have -Enum=foxBMS_State(0="BMS_UNINITIALIZED", // BMS state machine is uninitialized - 1="BMS_INITIALIZATION", // BMS state machine is currently trying to initialize - 2="BMS_INITIALIZED", // BMS state machine is initialized - 3="BMS_IDLE", // BMS state machine is idling - 4="BMS_OPEN_CONTACTORS", 5="BMS_STANDBY", 6="BMS_PRECHARGE", 7="BMS_NORMAL", 8="BMS_DISCHARGE", 9="BMS_CHARGE", - 10="BMS_ERROR", 11="BMS_UNDEFINED") -Enum=foxBMS_FuseState(0="Fuse okay", 1="Fuse blown") -// Error -Enum=foxBMS_ErrorFlag(0="No Error", // No Error detected +Enum=f_BmsState(0="UNINITIALIZED", // BMS state machine is uninitialized + 1="INITIALIZATION", // BMS state machine is currently trying to initialize + 2="INITIALIZED", // BMS state machine is initialized + 3="IDLE", // BMS state machine is idling + 4="OPEN_CONTACTORS", 5="STANDBY", 6="PRECHARGE", 7="NORMAL", 8="DISCHARGE", 9="CHARGE", 10="ERROR", 11="UNDEFINED") +Enum=f_FuseState(0="Fuse okay", // Fuse is intact + 1="Fuse blown") // Fuse is blown +// Indicates an erroneous state +Enum=f_ErrorFlag(0="No Error", // No Error detected 1="Error") // Error detected -Enum=foxBMS_RtcWeekday(1="Monday", 2="Tuesday", 3="Wednesday", 4="Thursday", 5="Friday", 6="Saturday", 0="Sunday") -Enum=foxBMS_SoftwareReset(0="NO_SOFTWARE_RESET", // Do not trigger a software reset +// Weekday +Enum=f_RtcWeekday(1="Monday", 2="Tuesday", 3="Wednesday", 4="Thursday", 5="Friday", 6="Saturday", 0="Sunday") +Enum=f_SoftwareReset(0="NO_SOFTWARE_RESET", // Do not trigger a software reset 1="SOFTWARE_RESET") // Trigger a software reset -Enum=foxBMS_FramInitialization(0="NO_FRAM_INITIALIZATION", 1="FRAM_INITIALIZATION") -Enum=foxBMS_RtcMonth(1="January", 2="February", 3="March", 4="April", 5="May", 6="June", 7="July", 8="August", - 9="September", 10="October", 11="November", 12="December") +// Indicates the initialization status of a resource etc. +Enum=f_Initialization(0="Uninitialized", // Uninitialized + 1="Initialized") // Initialized +// Month +Enum=f_RtcMonth(1="January", 2="February", 3="March", 4="April", 5="May", 6="June", 7="July", 8="August", 9="September", + 10="October", 11="November", 12="December") +// Indicates the status of the interlock line +Enum=f_InterlockState(0="Closed", // Interlock is closed + 1="Open") // Interlock is open +// Error +Enum=f_WarningFlag(0="No Warning", // No warning detected + 1="Warning") // Warning detected +// Error +Enum=f_GenericActiveFlag(0="Inactive", // (Sub-)system not active + 1="Active") // (Sub-)system active +// Indicates the completeness of a task etc. +Enum=f_CompleteFlag(0="Incomplete", // Something is incomplete + 1="Complete") // Something is complete +Enum=VtSig_IVT_ID_Result_Wh(7="Vt_Result_Wh") +Enum=VtSig_IVT_ID_Result_As(6="Vt_Result_As") +Enum=VtSig_IVT_ID_Result_W(5="Vt_Result_W") +Enum=VtSig_IVT_ID_Result_T(4="Vt_Result_T") +Enum=VtSig_IVT_ID_Result_U3(3="Vt_Result_U3") +Enum=VtSig_IVT_ID_Result_U2(2="Vt_Result_U2") +Enum=VtSig_IVT_ID_Result_U1(1="Vt_Result_U1") +Enum=VtSig_IVT_ID_Result_I(0="Vt_Result_I") +Enum=f_YesNoFlag(0="No", 1="Yes") +Enum=f_ValidInvalidFlag(0="Invalid", 1="Valid") +// Indicates alert state +Enum=f_AlertFlag(0="No Alert", // No Alert detected + 1="Alert") // Alert detected +Enum=f_PrechargeType(0="INTERNAL", // Internally precharged + 1="EXTERNAL") // Externally precharged +Enum=VtSig_IG_VIFC_STATUS_04_VIFC_Cmd(1="Error", 0="NoError") +Enum=VtSig_IG_VIFC_STATUS_13_ST_Param(1="NotExecuted", 0="Executed") +Enum=VtSig_IG_VIFC_STATUS_00_IsoMeasu(1="Deactivated", 0="Activated") +Enum=VtSig_IG_IMC_STATUS_05_IsoWarnin(1="Warning", 0="NoWarning") +Enum=VtSig_IG_IMC_STATUS_04_Selftest(100="Unknown", 1="Running", 0="NotRunning") +Enum=VtSig_IG_VIFC_VERSION_INDEX(1="Firmware", 0="Bootloader") +Enum=VtSig_IG_IMC_VERSION_INDEX(3="Firmware Hash", 2="Firmware ID", 1="Firmware", 0="Bootloader") +Enum=VtSig_IG_IMC_R_ISO_BIAS(2="HV_1_POS", 1="HV_1_NEG", 0="Unknown") +Enum=VtSig_IG_VIFC_IMC_ALIVE(100="Unknown", 2="OutOfRange", 1="Error", 0="Running") +Enum=VtSig_IG_VIFC_POWER_MODE(100="Unknown", 3="PowerDown", 2="PowerUp", 1="PowerOn", 0="PowerOff") +Enum=VtSig_IC_IMC_CALIB_STEP(6="GainCalibrationHV2", 5="OffsetCalibrationHV2", 4="ARef_12V_5V_Calibration", + 3="IsoCalibration", 2="GainCalibrationHV1", 1="OffsetCalibrationHV1", 0="NoAction") +Enum=VtSig_IC_VIFC_LOCK_MODE(100="Unknown", 2="BlockedToManyRetries", 1="Locked", 0="Unlocked") +Enum=VtSig_IS_VIFC_HV_RELAIS_STATE(100="Unknown", 1="HVEnabled", 0="HVDisabled") +Enum=VtSig_IS_VIFC_HV_RELAIS(100="Unknown", 1="HV_1_POS", 0="HV_1_NEG") +Enum=VtSig_IG_IMD_ERROR_CODE(1038="VIFC_NoResponseTimeout", 1037="VIFC_RepeatedOrMissingFrame", + 1035="VIFC_UnknownCommand", 1034="VIFC_InvalidParameter", 1033="VIFC_ChecksumErrorInFrame", + 1032="VIFC_Timeout10msExpired", 1001="VIFC_QueueFullCommandRejected", 1000="VIFC_CommandLocked", + 37="RepeatedOrMissingFrame", 36="ErrorDuringWritingEEProms", 35="UnknownCommand", 34="InvalidParameter", + 33="ChecksumErrorInFrame", 32="Timeout10msExpired") +Enum=VtSig_IG_IMD_FAILED_CMD(255="S_IMD_ERROR_FRAME", 226="S_VIFC_GET_IMC_ALIVE", 225="S_VIFC_GET_TEMP", + 224="S_VIFC_GET_LOCK", 223="S_VIFC_GET_POWER_MODE", 222="S_VIFC_GET_VERSION", 221="S_VIFC_GET_HV_RELAIS", + 220="S_VIFC_GET_STATUS", 210="S_VIFC_SET_HV_RELAIS", 203="S_VIFC_CTL_MEASUREMENT", 202="S_VIFC_CTL_LOCK", + 201="S_VIFC_CTL_POWER_MODE", 200="S_VIFC_CTL_IMC_RESET", 90="S_IMC_GET_TEST_CNT", 61="S_IMC_GET_MANUFACTURER", + 60="S_IMC_GET_MEAN_FACTOR", 59="S_IMC_GET_EEPROM", 58="S_IMC_GET_HV_2", 57="S_IMC_GET_R_ISO_WRN_THR", + 55="S_IMC_GET_STATUS", 54="S_IMC_GET_HV_1", 53="S_IMC_GET_R_ISO", 51="S_IMC_GET_VERSION", + 50="S_IMC_GET_R_ISO_ERR_THR", 43="S_IMC_SET_MEAN_FACTOR", 42="S_IMC_SET_EEPROM", 41="S_IMC_SET_R_ISO_WRN_THR", + 40="S_IMC_SET_R_ISO_ERR_THR", 35="S_IMC_CTL_SYS_UPDATE", 34="S_IMC_CTL_CALIB", 33="S_IMC_CTL_SELFTEST", + 0="S_VIFC_CTL_DUMMY") +Enum=VtSig_IC_IMC_SELFTEST_SCR(2="ParameterConfig", 1="OverAll", 0="NoAction") +Enum=VtSig_MG_VIFC_VERSION_INDEX(2="Firmware ID", 1="Firmware", 0="Bootloader") +Enum=VtSig_MC_VIFC_MEASURE_MODE(1="Activated", 0="Deactivated") +Enum=f_BalancingStrategy(0="none", 1="voltage", 2="history") +Enum=f_Imd(0="none", 1="Bender_iso165c", 2="Bender_ir155") +Enum=f_SoeAlgorithm(0="None", 1="Debug", 2="Counting") +Enum=f_Rtos(0="freertos", 1="safertos") +Enum=f_Afes(0="LTC 6804-1", 1="LTC 6806", 2="LTC 6811-1", 3="LTC 6812-1", 4="LTC 6813-1", 5="NXP MC33775A", + 6="MAXIM MAX17852", 7="Debug default", 8="ADI ADES1830", 9="TI Dummy") +Enum=f_TemperatureSensors(0="Fak00", 1="Epc00", 2="Epc01", 3="Mur00", 4="Sem00", 5="Vis00", 6="Vis01", 7="Vis02") +Enum=f_TemperatureSensorMethod(0="polynomial", 1="lookup-table") +Enum=f_CurrentSensorMode(0="Current sensor cyclic", 1="Current sensor triggered") +Enum=f_SocAlgorithm(0="None", 1="Debug", 2="Counting") +Enum=f_SofAlgorithm(0="Trapezoid") +Enum=f_SohAlgorithm(0="None", 1="Debug") {SENDRECEIVE} -[foxBMS_PackValues] -ID=222h // (in:can_cbs_tx_pack-values-p0.c:CANTX_PackValues, fv:tx) +[AFE_CellTemperatures] +ID=280h // Cell temperature measurement data (in:can_cbs_rx_cell-temperatures.c:CANRX_CellTemperatures, fv:rx) +Len=8 +CycleTime=4500 +Mux=CellTemperatures_000_005 0,8 0 -m +Var=CellTemperature_000_invalidFlag bit 15,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_001_invalidFlag bit 14,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_002_invalidFlag bit 13,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_003_invalidFlag bit 12,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_004_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_005_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_000 signed 16,8 -m /u:degC // Temperature of cell 0 +Var=CellTemperature_001 signed 24,8 -m /u:degC // Temperature of cell 1 +Var=CellTemperature_002 signed 32,8 -m /u:degC // Temperature of cell 2 +Var=CellTemperature_003 signed 40,8 -m /u:degC // Temperature of cell 3 +Var=CellTemperature_004 signed 48,8 -m /u:degC // Temperature of cell 4 +Var=CellTemperature_005 signed 56,8 -m /u:degC // Temperature of cell 5 + +[AFE_CellTemperatures] +Len=8 +CycleTime=4500 +Mux=CellTemperatures_006_011 0,8 1 -m +Var=CellTemperature_006_invalidFlag bit 15,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_007_invalidFlag bit 14,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_008_invalidFlag bit 13,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_009_invalidFlag bit 12,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_010_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_011_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_006 signed 16,8 -m /u:degC // Temperature of cell 6 +Var=CellTemperature_007 signed 24,8 -m /u:degC // Temperature of cell 7 +Var=CellTemperature_008 signed 32,8 -m /u:degC // Temperature of cell 8 +Var=CellTemperature_009 signed 40,8 -m /u:degC // Temperature of cell 9 +Var=CellTemperature_010 signed 48,8 -m /u:degC // Temperature of cell 10 +Var=CellTemperature_011 signed 56,8 -m /u:degC // Temperature of cell 11 + +[AFE_CellTemperatures] +Len=8 +CycleTime=4500 +Mux=CellTemperatures_012_017 0,8 2 -m +Var=CellTemperature_012_invalidFlag bit 15,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_013_invalidFlag bit 14,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_014_invalidFlag bit 13,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_015_invalidFlag bit 12,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_016_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_017_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_012 signed 16,8 -m /u:degC // Temperature of cell 12 +Var=CellTemperature_013 signed 24,8 -m /u:degC // Temperature of cell 13 +Var=CellTemperature_014 signed 32,8 -m /u:degC // Temperature of cell 14 +Var=CellTemperature_015 signed 40,8 -m /u:degC // Temperature of cell 15 +Var=CellTemperature_016 signed 48,8 -m /u:degC // Temperature of cell 16 +Var=CellTemperature_017 signed 56,8 -m /u:degC // Temperature of cell 17 + +[AFE_CellTemperatures] +Len=8 +CycleTime=4500 +Mux=CellTemperatures_018_023 0,8 3 -m +Var=CellTemperature_018_invalidFlag bit 15,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_019_invalidFlag bit 14,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_020_invalidFlag bit 13,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_021_invalidFlag bit 12,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_022_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_023_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_018 signed 16,8 -m /u:degC // Temperature of cell 18 +Var=CellTemperature_019 signed 24,8 -m /u:degC // Temperature of cell 19 +Var=CellTemperature_020 signed 32,8 -m /u:degC // Temperature of cell 20 +Var=CellTemperature_021 signed 40,8 -m /u:degC // Temperature of cell 21 +Var=CellTemperature_022 signed 48,8 -m /u:degC // Temperature of cell 22 +Var=CellTemperature_023 signed 56,8 -m /u:degC // Temperature of cell 23 + +[AFE_CellTemperatures] +Len=8 +CycleTime=4500 +Mux=CellTemperatures_024_029 0,8 4 -m +Var=CellTemperature_024_invalidFlag bit 15,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_025_invalidFlag bit 14,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_026_invalidFlag bit 13,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_027_invalidFlag bit 12,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_028_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_029_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_024 signed 16,8 -m /u:degC // Temperature of cell 24 +Var=CellTemperature_025 signed 24,8 -m /u:degC // Temperature of cell 25 +Var=CellTemperature_026 signed 32,8 -m /u:degC // Temperature of cell 26 +Var=CellTemperature_027 signed 40,8 -m /u:degC // Temperature of cell 27 +Var=CellTemperature_028 signed 48,8 -m /u:degC // Temperature of cell 28 +Var=CellTemperature_029 signed 56,8 -m /u:degC // Temperature of cell 29 + +[AFE_CellTemperatures] +Len=8 +CycleTime=4500 +Mux=CellTemperatures_030_035 0,8 5 -m +Var=CellTemperature_030_invalidFlag bit 15,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_031_invalidFlag bit 14,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_032_invalidFlag bit 13,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_033_invalidFlag bit 12,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_034_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_035_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_030 signed 16,8 -m /u:degC // Temperature of cell 30 +Var=CellTemperature_031 signed 24,8 -m /u:degC // Temperature of cell 31 +Var=CellTemperature_032 signed 32,8 -m /u:degC // Temperature of cell 32 +Var=CellTemperature_033 signed 40,8 -m /u:degC // Temperature of cell 33 +Var=CellTemperature_034 signed 48,8 -m /u:degC // Temperature of cell 34 +Var=CellTemperature_035 signed 56,8 -m /u:degC // Temperature of cell 35 + +[AFE_CellTemperatures] +Len=8 +CycleTime=4500 +Mux=CellTemperatures_036_041 0,8 6 -m +Var=CellTemperature_036_invalidFlag bit 15,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_037_invalidFlag bit 14,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_038_invalidFlag bit 13,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_039_invalidFlag bit 12,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_040_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_041_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_036 signed 16,8 -m /u:degC // Temperature of cell 36 +Var=CellTemperature_037 signed 24,8 -m /u:degC // Temperature of cell 37 +Var=CellTemperature_038 signed 32,8 -m /u:degC // Temperature of cell 38 +Var=CellTemperature_039 signed 40,8 -m /u:degC // Temperature of cell 39 +Var=CellTemperature_040 signed 48,8 -m /u:degC // Temperature of cell 40 +Var=CellTemperature_041 signed 56,8 -m /u:degC // Temperature of cell 41 + +[AFE_CellTemperatures] +Len=8 +CycleTime=4500 +Mux=CellTemperatures_042_047 0,8 7 -m +Var=CellTemperature_042_invalidFlag bit 15,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_043_invalidFlag bit 14,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_044_invalidFlag bit 13,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_045_invalidFlag bit 12,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_046_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_047_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_042 signed 16,8 -m /u:degC // Temperature of cell 42 +Var=CellTemperature_043 signed 24,8 -m /u:degC // Temperature of cell 43 +Var=CellTemperature_044 signed 32,8 -m /u:degC // Temperature of cell 44 +Var=CellTemperature_045 signed 40,8 -m /u:degC // Temperature of cell 45 +Var=CellTemperature_046 signed 48,8 -m /u:degC // Temperature of cell 46 +Var=CellTemperature_047 signed 56,8 -m /u:degC // Temperature of cell 47 + +[AFE_CellTemperatures] +Len=8 +CycleTime=4500 +Mux=CellTemperatures_048_053 0,8 8 -m +Var=CellTemperature_048_invalidFlag bit 15,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_049_invalidFlag bit 14,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_050_invalidFlag bit 13,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_051_invalidFlag bit 12,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_052_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_053_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_048 signed 16,8 -m /u:degC // Temperature of cell 48 +Var=CellTemperature_049 signed 24,8 -m /u:degC // Temperature of cell 49 +Var=CellTemperature_050 signed 32,8 -m /u:degC // Temperature of cell 50 +Var=CellTemperature_051 signed 40,8 -m /u:degC // Temperature of cell 51 +Var=CellTemperature_052 signed 48,8 -m /u:degC // Temperature of cell 52 +Var=CellTemperature_053 signed 56,8 -m /u:degC // Temperature of cell 53 + +[AFE_CellTemperatures] +Len=8 +CycleTime=4500 +Mux=CellTemperatures_054_059 0,8 9 -m +Var=CellTemperature_054_invalidFlag bit 15,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_055_invalidFlag bit 14,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_056_invalidFlag bit 13,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_057_invalidFlag bit 12,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_058_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_059_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_054 signed 16,8 -m /u:degC // Temperature of cell 54 +Var=CellTemperature_055 signed 24,8 -m /u:degC // Temperature of cell 55 +Var=CellTemperature_056 signed 32,8 -m /u:degC // Temperature of cell 56 +Var=CellTemperature_057 signed 40,8 -m /u:degC // Temperature of cell 57 +Var=CellTemperature_058 signed 48,8 -m /u:degC // Temperature of cell 58 +Var=CellTemperature_059 signed 56,8 -m /u:degC // Temperature of cell 59 + +[AFE_CellTemperatures] +Len=8 +CycleTime=4500 +Mux=CellTemperatures_060_065 0,8 0Ah -m +Var=CellTemperature_060_invalidFlag bit 15,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_061_invalidFlag bit 14,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_062_invalidFlag bit 13,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_063_invalidFlag bit 12,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_064_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_065_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_060 signed 16,8 -m /u:degC // Temperature of cell 60 +Var=CellTemperature_061 signed 24,8 -m /u:degC // Temperature of cell 61 +Var=CellTemperature_062 signed 32,8 -m /u:degC // Temperature of cell 62 +Var=CellTemperature_063 signed 40,8 -m /u:degC // Temperature of cell 63 +Var=CellTemperature_064 signed 48,8 -m /u:degC // Temperature of cell 64 +Var=CellTemperature_065 signed 56,8 -m /u:degC // Temperature of cell 65 + +[AFE_CellTemperatures] +Len=8 +CycleTime=4500 +Mux=CellTemperatures_066_071 0,8 0Bh -m +Var=CellTemperature_066_invalidFlag bit 15,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_067_invalidFlag bit 14,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_068_invalidFlag bit 13,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_069_invalidFlag bit 12,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_070_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_071_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_066 signed 16,8 -m /u:degC // Temperature of cell 66 +Var=CellTemperature_067 signed 24,8 -m /u:degC // Temperature of cell 67 +Var=CellTemperature_068 signed 32,8 -m /u:degC // Temperature of cell 68 +Var=CellTemperature_069 signed 40,8 -m /u:degC // Temperature of cell 69 +Var=CellTemperature_070 signed 48,8 -m /u:degC // Temperature of cell 70 +Var=CellTemperature_071 signed 56,8 -m /u:degC // Temperature of cell 71 + +[AFE_CellTemperatures] +Len=8 +CycleTime=4500 +Mux=CellTemperatures_072_077 0,8 0Ch -m +Var=CellTemperature_072_invalidFlag bit 15,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_073_invalidFlag bit 14,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_074_invalidFlag bit 13,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_075_invalidFlag bit 12,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_076_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_077_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_072 signed 16,8 -m /u:degC // Temperature of cell 72 +Var=CellTemperature_073 signed 24,8 -m /u:degC // Temperature of cell 73 +Var=CellTemperature_074 signed 32,8 -m /u:degC // Temperature of cell 74 +Var=CellTemperature_075 signed 40,8 -m /u:degC // Temperature of cell 75 +Var=CellTemperature_076 signed 48,8 -m /u:degC // Temperature of cell 76 +Var=CellTemperature_077 signed 56,8 -m /u:degC // Temperature of cell 77 + +[AFE_CellTemperatures] +Len=8 +CycleTime=4500 +Mux=CellTemperatures_078_083 0,8 0Dh -m +Var=CellTemperature_078_invalidFlag bit 15,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_079_invalidFlag bit 14,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_080_invalidFlag bit 13,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_081_invalidFlag bit 12,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_082_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_083_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_078 signed 16,8 -m /u:degC // Temperature of cell 78 +Var=CellTemperature_079 signed 24,8 -m /u:degC // Temperature of cell 79 +Var=CellTemperature_080 signed 32,8 -m /u:degC // Temperature of cell 80 +Var=CellTemperature_081 signed 40,8 -m /u:degC // Temperature of cell 81 +Var=CellTemperature_082 signed 48,8 -m /u:degC // Temperature of cell 82 +Var=CellTemperature_083 signed 56,8 -m /u:degC // Temperature of cell 83 + +[AFE_CellTemperatures] +Len=8 +CycleTime=4500 +Mux=CellTemperatures_084_089 0,8 0Eh -m +Var=CellTemperature_084_invalidFlag bit 15,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_085_invalidFlag bit 14,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_086_invalidFlag bit 13,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_087_invalidFlag bit 12,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_088_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_089_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_084 signed 16,8 -m /u:degC // Temperature of cell 84 +Var=CellTemperature_085 signed 24,8 -m /u:degC // Temperature of cell 85 +Var=CellTemperature_086 signed 32,8 -m /u:degC // Temperature of cell 86 +Var=CellTemperature_087 signed 40,8 -m /u:degC // Temperature of cell 87 +Var=CellTemperature_088 signed 48,8 -m /u:degC // Temperature of cell 88 +Var=CellTemperature_089 signed 56,8 -m /u:degC // Temperature of cell 89 + +[AFE_CellTemperatures] +Len=8 +CycleTime=4500 +Mux=CellTemperatures_090_095 0,8 0Fh -m +Var=CellTemperature_090_invalidFlag bit 15,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_091_invalidFlag bit 14,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_092_invalidFlag bit 13,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_093_invalidFlag bit 12,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_094_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_095_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_090 signed 16,8 -m /u:degC // Temperature of cell 90 +Var=CellTemperature_091 signed 24,8 -m /u:degC // Temperature of cell 91 +Var=CellTemperature_092 signed 32,8 -m /u:degC // Temperature of cell 92 +Var=CellTemperature_093 signed 40,8 -m /u:degC // Temperature of cell 93 +Var=CellTemperature_094 signed 48,8 -m /u:degC // Temperature of cell 94 +Var=CellTemperature_095 signed 56,8 -m /u:degC // Temperature of cell 95 + +[AFE_CellTemperatures] +Len=8 +CycleTime=4500 +Mux=CellTemperatures_096_101 0,8 10h -m +Var=CellTemperature_096_invalidFlag bit 15,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_097_invalidFlag bit 14,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_098_invalidFlag bit 13,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_099_invalidFlag bit 12,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_100_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_101_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_096 signed 16,8 -m /u:degC // Temperature of cell 96 +Var=CellTemperature_097 signed 24,8 -m /u:degC // Temperature of cell 97 +Var=CellTemperature_098 signed 32,8 -m /u:degC // Temperature of cell 98 +Var=CellTemperature_099 signed 40,8 -m /u:degC // Temperature of cell 99 +Var=CellTemperature_100 signed 48,8 -m /u:degC // Temperature of cell 100 +Var=CellTemperature_101 signed 56,8 -m /u:degC // Temperature of cell 101 + +[AFE_CellTemperatures] +Len=8 +CycleTime=4500 +Mux=CellTemperatures_102_107 0,8 11h -m +Var=CellTemperature_102_invalidFlag bit 15,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_103_invalidFlag bit 14,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_104_invalidFlag bit 13,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_105_invalidFlag bit 12,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_106_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_107_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_102 signed 16,8 -m /u:degC // Temperature of cell 102 +Var=CellTemperature_103 signed 24,8 -m /u:degC // Temperature of cell 103 +Var=CellTemperature_104 signed 32,8 -m /u:degC // Temperature of cell 104 +Var=CellTemperature_105 signed 40,8 -m /u:degC // Temperature of cell 105 +Var=CellTemperature_106 signed 48,8 -m /u:degC // Temperature of cell 106 +Var=CellTemperature_107 signed 56,8 -m /u:degC // Temperature of cell 107 + +[AFE_CellTemperatures] +Len=8 +CycleTime=4500 +Mux=CellTemperatures_108_113 0,8 12h -m +Var=CellTemperature_108_invalidFlag bit 15,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_109_invalidFlag bit 14,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_110_invalidFlag bit 13,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_111_invalidFlag bit 12,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_112_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_113_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_108 signed 16,8 -m /u:degC // Temperature of cell 108 +Var=CellTemperature_109 signed 24,8 -m /u:degC // Temperature of cell 109 +Var=CellTemperature_110 signed 32,8 -m /u:degC // Temperature of cell 110 +Var=CellTemperature_111 signed 40,8 -m /u:degC // Temperature of cell 111 +Var=CellTemperature_112 signed 48,8 -m /u:degC // Temperature of cell 112 +Var=CellTemperature_113 signed 56,8 -m /u:degC // Temperature of cell 113 + +[AFE_CellTemperatures] +Len=8 +CycleTime=4500 +Mux=CellTemperatures_114_119 0,8 13h -m +Var=CellTemperature_114_invalidFlag bit 15,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_115_invalidFlag bit 14,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_116_invalidFlag bit 13,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_117_invalidFlag bit 12,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_118_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_119_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_114 signed 16,8 -m /u:degC // Temperature of cell 114 +Var=CellTemperature_115 signed 24,8 -m /u:degC // Temperature of cell 115 +Var=CellTemperature_116 signed 32,8 -m /u:degC // Temperature of cell 116 +Var=CellTemperature_117 signed 40,8 -m /u:degC // Temperature of cell 117 +Var=CellTemperature_118 signed 48,8 -m /u:degC // Temperature of cell 118 +Var=CellTemperature_119 signed 56,8 -m /u:degC // Temperature of cell 119 + +[AFE_CellTemperatures] +Len=8 +CycleTime=4500 +Mux=CellTemperatures_120_125 0,8 14h -m +Var=CellTemperature_120_invalidFlag bit 15,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_121_invalidFlag bit 14,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_122_invalidFlag bit 13,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_123_invalidFlag bit 12,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_124_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_125_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_120 signed 16,8 -m /u:degC // Temperature of cell 120 +Var=CellTemperature_121 signed 24,8 -m /u:degC // Temperature of cell 121 +Var=CellTemperature_122 signed 32,8 -m /u:degC // Temperature of cell 122 +Var=CellTemperature_123 signed 40,8 -m /u:degC // Temperature of cell 123 +Var=CellTemperature_124 signed 48,8 -m /u:degC // Temperature of cell 124 +Var=CellTemperature_125 signed 56,8 -m /u:degC // Temperature of cell 125 + +[AFE_CellTemperatures] +Len=8 +CycleTime=4500 +Mux=CellTemperatures_126_131 0,8 15h -m +Var=CellTemperature_126_invalidFlag bit 15,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_127_invalidFlag bit 14,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_128_invalidFlag bit 13,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_129_invalidFlag bit 12,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_130_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_131_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_126 signed 16,8 -m /u:degC // Temperature of cell 126 +Var=CellTemperature_127 signed 24,8 -m /u:degC // Temperature of cell 127 +Var=CellTemperature_128 signed 32,8 -m /u:degC // Temperature of cell 128 +Var=CellTemperature_129 signed 40,8 -m /u:degC // Temperature of cell 129 +Var=CellTemperature_130 signed 48,8 -m /u:degC // Temperature of cell 130 +Var=CellTemperature_131 signed 56,8 -m /u:degC // Temperature of cell 131 + +[AFE_CellTemperatures] +Len=8 +CycleTime=4500 +Mux=CellTemperatures_132_137 0,8 16h -m +Var=CellTemperature_132_invalidFlag bit 15,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_133_invalidFlag bit 14,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_134_invalidFlag bit 13,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_135_invalidFlag bit 12,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_136_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_137_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_132 signed 16,8 -m /u:degC // Temperature of cell 132 +Var=CellTemperature_133 signed 24,8 -m /u:degC // Temperature of cell 133 +Var=CellTemperature_134 signed 32,8 -m /u:degC // Temperature of cell 134 +Var=CellTemperature_135 signed 40,8 -m /u:degC // Temperature of cell 135 +Var=CellTemperature_136 signed 48,8 -m /u:degC // Temperature of cell 136 +Var=CellTemperature_137 signed 56,8 -m /u:degC // Temperature of cell 137 + +[AFE_CellTemperatures] +Len=8 +CycleTime=4500 +Mux=CellTemperatures_138_143 0,8 17h -m +Var=CellTemperature_138_invalidFlag bit 15,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_139_invalidFlag bit 14,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_140_invalidFlag bit 13,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_141_invalidFlag bit 12,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_142_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_143_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_138 signed 16,8 -m /u:degC // Temperature of cell 138 +Var=CellTemperature_139 signed 24,8 -m /u:degC // Temperature of cell 139 +Var=CellTemperature_140 signed 32,8 -m /u:degC // Temperature of cell 140 +Var=CellTemperature_141 signed 40,8 -m /u:degC // Temperature of cell 141 +Var=CellTemperature_142 signed 48,8 -m /u:degC // Temperature of cell 142 +Var=CellTemperature_143 signed 56,8 -m /u:degC // Temperature of cell 143 + +[AFE_CellTemperatures] +Len=8 +CycleTime=4500 +Mux=CellTemperatures_144_149 0,8 18h -m +Var=CellTemperature_144_invalidFlag bit 15,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_145_invalidFlag bit 14,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_146_invalidFlag bit 13,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_147_invalidFlag bit 12,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_148_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_149_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_144 signed 16,8 -m /u:degC // Temperature of cell 144 +Var=CellTemperature_145 signed 24,8 -m /u:degC // Temperature of cell 145 +Var=CellTemperature_146 signed 32,8 -m /u:degC // Temperature of cell 146 +Var=CellTemperature_147 signed 40,8 -m /u:degC // Temperature of cell 147 +Var=CellTemperature_148 signed 48,8 -m /u:degC // Temperature of cell 148 +Var=CellTemperature_149 signed 56,8 -m /u:degC // Temperature of cell 149 + +[AFE_CellTemperatures] +Len=8 +CycleTime=4500 +Mux=CellTemperatures_150_155 0,8 19h -m +Var=CellTemperature_150_invalidFlag bit 15,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_151_invalidFlag bit 14,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_152_invalidFlag bit 13,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_153_invalidFlag bit 12,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_154_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_155_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_150 signed 16,8 -m /u:degC // Temperature of cell 150 +Var=CellTemperature_151 signed 24,8 -m /u:degC // Temperature of cell 151 +Var=CellTemperature_152 signed 32,8 -m /u:degC // Temperature of cell 152 +Var=CellTemperature_153 signed 40,8 -m /u:degC // Temperature of cell 153 +Var=CellTemperature_154 signed 48,8 -m /u:degC // Temperature of cell 154 +Var=CellTemperature_155 signed 56,8 -m /u:degC // Temperature of cell 155 + +[AFE_CellTemperatures] +Len=8 +CycleTime=4500 +Mux=CellTemperatures_156_161 0,8 1Ah -m +Var=CellTemperature_156_invalidFlag bit 15,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_157_invalidFlag bit 14,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_158_invalidFlag bit 13,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_159_invalidFlag bit 12,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_160_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_161_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_156 signed 16,8 -m /u:degC // Temperature of cell 156 +Var=CellTemperature_157 signed 24,8 -m /u:degC // Temperature of cell 157 +Var=CellTemperature_158 signed 32,8 -m /u:degC // Temperature of cell 158 +Var=CellTemperature_159 signed 40,8 -m /u:degC // Temperature of cell 159 +Var=CellTemperature_160 signed 48,8 -m /u:degC // Temperature of cell 160 +Var=CellTemperature_161 signed 56,8 -m /u:degC // Temperature of cell 161 + +[AFE_CellTemperatures] +Len=8 +CycleTime=4500 +Mux=CellTemperatures_162_167 0,8 1Bh -m +Var=CellTemperature_162_invalidFlag bit 15,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_163_invalidFlag bit 14,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_164_invalidFlag bit 13,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_165_invalidFlag bit 12,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_166_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_167_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_162 signed 16,8 -m /u:degC // Temperature of cell 162 +Var=CellTemperature_163 signed 24,8 -m /u:degC // Temperature of cell 163 +Var=CellTemperature_164 signed 32,8 -m /u:degC // Temperature of cell 164 +Var=CellTemperature_165 signed 40,8 -m /u:degC // Temperature of cell 165 +Var=CellTemperature_166 signed 48,8 -m /u:degC // Temperature of cell 166 +Var=CellTemperature_167 signed 56,8 -m /u:degC // Temperature of cell 167 + +[AFE_CellTemperatures] +Len=8 +CycleTime=4500 +Mux=CellTemperatures_168_173 0,8 1Ch -m +Var=CellTemperature_168_invalidFlag bit 15,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_169_invalidFlag bit 14,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_170_invalidFlag bit 13,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_171_invalidFlag bit 12,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_172_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_173_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_168 signed 16,8 -m /u:degC // Temperature of cell 168 +Var=CellTemperature_169 signed 24,8 -m /u:degC // Temperature of cell 169 +Var=CellTemperature_170 signed 32,8 -m /u:degC // Temperature of cell 170 +Var=CellTemperature_171 signed 40,8 -m /u:degC // Temperature of cell 171 +Var=CellTemperature_172 signed 48,8 -m /u:degC // Temperature of cell 172 +Var=CellTemperature_173 signed 56,8 -m /u:degC // Temperature of cell 173 + +[AFE_CellTemperatures] +Len=8 +CycleTime=4500 +Mux=CellTemperatures_174_179 0,8 1Dh -m +Var=CellTemperature_174_invalidFlag bit 15,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_175_invalidFlag bit 14,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_176_invalidFlag bit 13,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_177_invalidFlag bit 12,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_178_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_179_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_174 signed 16,8 -m /u:degC // Temperature of cell 174 +Var=CellTemperature_175 signed 24,8 -m /u:degC // Temperature of cell 175 +Var=CellTemperature_176 signed 32,8 -m /u:degC // Temperature of cell 176 +Var=CellTemperature_177 signed 40,8 -m /u:degC // Temperature of cell 177 +Var=CellTemperature_178 signed 48,8 -m /u:degC // Temperature of cell 178 +Var=CellTemperature_179 signed 56,8 -m /u:degC // Temperature of cell 179 + +[AFE_CellVoltages] +ID=270h // Cell voltage measurement data (in:can_cbs_rx_cell-voltages.c:CANRX_CellVoltages, fv:rx) +Len=8 +CycleTime=5400 +Mux=CellVoltages_000_003 0,8 0 -m +Var=CellVoltage_000_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_001_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_002_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_003_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_000 unsigned 12,13 -m /u:mV // Voltage of cell 0 +Var=CellVoltage_001 unsigned 25,13 -m /u:mV // Voltage of cell 1 +Var=CellVoltage_002 unsigned 38,13 -m /u:mV // Voltage of cell 2 +Var=CellVoltage_003 unsigned 51,13 -m /u:mV // Voltage of cell 3 + +[AFE_CellVoltages] +Len=8 +CycleTime=5400 +Mux=CellVoltages_004_007 0,8 1 -m +Var=CellVoltage_004_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_005_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_006_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_007_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_004 unsigned 12,13 -m /u:mV // Voltage of cell 4 +Var=CellVoltage_005 unsigned 25,13 -m /u:mV // Voltage of cell 5 +Var=CellVoltage_006 unsigned 38,13 -m /u:mV // Voltage of cell 6 +Var=CellVoltage_007 unsigned 51,13 -m /u:mV // Voltage of cell 7 + +[AFE_CellVoltages] +Len=8 +CycleTime=5400 +Mux=CellVoltages_008_011 0,8 2 -m +Var=CellVoltage_008_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_009_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_010_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_011_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_008 unsigned 12,13 -m /u:mV // Voltage of cell 8 +Var=CellVoltage_009 unsigned 25,13 -m /u:mV // Voltage of cell 9 +Var=CellVoltage_010 unsigned 38,13 -m /u:mV // Voltage of cell 10 +Var=CellVoltage_011 unsigned 51,13 -m /u:mV // Voltage of cell 11 + +[AFE_CellVoltages] +Len=8 +CycleTime=5400 +Mux=CellVoltages_012_015 0,8 3 -m +Var=CellVoltage_012_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_013_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_014_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_015_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_012 unsigned 12,13 -m /u:mV // Voltage of cell 12 +Var=CellVoltage_013 unsigned 25,13 -m /u:mV // Voltage of cell 13 +Var=CellVoltage_014 unsigned 38,13 -m /u:mV // Voltage of cell 14 +Var=CellVoltage_015 unsigned 51,13 -m /u:mV // Voltage of cell 15 + +[AFE_CellVoltages] +Len=8 +CycleTime=5400 +Mux=CellVoltages_016_019 0,8 4 -m +Var=CellVoltage_016_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_017_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_018_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_019_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_016 unsigned 12,13 -m /u:mV // Voltage of cell 16 +Var=CellVoltage_017 unsigned 25,13 -m /u:mV // Voltage of cell 17 +Var=CellVoltage_018 unsigned 38,13 -m /u:mV // Voltage of cell 18 +Var=CellVoltage_019 unsigned 51,13 -m /u:mV // Voltage of cell 19 + +[AFE_CellVoltages] +Len=8 +CycleTime=5400 +Mux=CellVoltages_020_023 0,8 5 -m +Var=CellVoltage_020_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_021_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_022_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_023_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_020 unsigned 12,13 -m /u:mV // Voltage of cell 20 +Var=CellVoltage_021 unsigned 25,13 -m /u:mV // Voltage of cell 21 +Var=CellVoltage_022 unsigned 38,13 -m /u:mV // Voltage of cell 22 +Var=CellVoltage_023 unsigned 51,13 -m /u:mV // Voltage of cell 23 + +[AFE_CellVoltages] +Len=8 +CycleTime=5400 +Mux=CellVoltages_024_027 0,8 6 -m +Var=CellVoltage_024_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_025_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_026_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_027_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_024 unsigned 12,13 -m /u:mV // Voltage of cell 24 +Var=CellVoltage_025 unsigned 25,13 -m /u:mV // Voltage of cell 25 +Var=CellVoltage_026 unsigned 38,13 -m /u:mV // Voltage of cell 26 +Var=CellVoltage_027 unsigned 51,13 -m /u:mV // Voltage of cell 27 + +[AFE_CellVoltages] +Len=8 +CycleTime=5400 +Mux=CellVoltages_028_031 0,8 7 -m +Var=CellVoltage_028_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_029_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_030_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_031_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_028 unsigned 12,13 -m /u:mV // Voltage of cell 28 +Var=CellVoltage_029 unsigned 25,13 -m /u:mV // Voltage of cell 29 +Var=CellVoltage_030 unsigned 38,13 -m /u:mV // Voltage of cell 30 +Var=CellVoltage_031 unsigned 51,13 -m /u:mV // Voltage of cell 31 + +[AFE_CellVoltages] +Len=8 +CycleTime=5400 +Mux=CellVoltages_032_035 0,8 8 -m +Var=CellVoltage_032_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_033_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_034_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_035_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_032 unsigned 12,13 -m /u:mV // Voltage of cell 32 +Var=CellVoltage_033 unsigned 25,13 -m /u:mV // Voltage of cell 33 +Var=CellVoltage_034 unsigned 38,13 -m /u:mV // Voltage of cell 34 +Var=CellVoltage_035 unsigned 51,13 -m /u:mV // Voltage of cell 35 + +[AFE_CellVoltages] +Len=8 +CycleTime=5400 +Mux=CellVoltages_036_039 0,8 9 -m +Var=CellVoltage_036_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_037_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_038_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_039_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_036 unsigned 12,13 -m /u:mV // Voltage of cell 36 +Var=CellVoltage_037 unsigned 25,13 -m /u:mV // Voltage of cell 37 +Var=CellVoltage_038 unsigned 38,13 -m /u:mV // Voltage of cell 38 +Var=CellVoltage_039 unsigned 51,13 -m /u:mV // Voltage of cell 39 + +[AFE_CellVoltages] +Len=8 +CycleTime=5400 +Mux=CellVoltages_040_043 0,8 0Ah -m +Var=CellVoltage_040_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_041_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_042_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_043_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_040 unsigned 12,13 -m /u:mV // Voltage of cell 40 +Var=CellVoltage_041 unsigned 25,13 -m /u:mV // Voltage of cell 41 +Var=CellVoltage_042 unsigned 38,13 -m /u:mV // Voltage of cell 42 +Var=CellVoltage_043 unsigned 51,13 -m /u:mV // Voltage of cell 43 + +[AFE_CellVoltages] +Len=8 +CycleTime=5400 +Mux=CellVoltages_044_047 0,8 0Bh -m +Var=CellVoltage_044_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_045_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_046_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_047_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_044 unsigned 12,13 -m /u:mV // Voltage of cell 44 +Var=CellVoltage_045 unsigned 25,13 -m /u:mV // Voltage of cell 45 +Var=CellVoltage_046 unsigned 38,13 -m /u:mV // Voltage of cell 46 +Var=CellVoltage_047 unsigned 51,13 -m /u:mV // Voltage of cell 47 + +[AFE_CellVoltages] +Len=8 +CycleTime=5400 +Mux=CellVoltages_048_051 0,8 0Ch -m +Var=CellVoltage_048_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_049_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_050_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_051_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_048 unsigned 12,13 -m /u:mV // Voltage of cell 48 +Var=CellVoltage_049 unsigned 25,13 -m /u:mV // Voltage of cell 49 +Var=CellVoltage_050 unsigned 38,13 -m /u:mV // Voltage of cell 50 +Var=CellVoltage_051 unsigned 51,13 -m /u:mV // Voltage of cell 51 + +[AFE_CellVoltages] +Len=8 +CycleTime=5400 +Mux=CellVoltages_052_055 0,8 0Dh -m +Var=CellVoltage_052_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_053_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_054_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_055_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_052 unsigned 12,13 -m /u:mV // Voltage of cell 52 +Var=CellVoltage_053 unsigned 25,13 -m /u:mV // Voltage of cell 53 +Var=CellVoltage_054 unsigned 38,13 -m /u:mV // Voltage of cell 54 +Var=CellVoltage_055 unsigned 51,13 -m /u:mV // Voltage of cell 55 + +[AFE_CellVoltages] +Len=8 +CycleTime=5400 +Mux=CellVoltages_056_059 0,8 0Eh -m +Var=CellVoltage_056_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_057_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_058_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_059_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_056 unsigned 12,13 -m /u:mV // Voltage of cell 56 +Var=CellVoltage_057 unsigned 25,13 -m /u:mV // Voltage of cell 57 +Var=CellVoltage_058 unsigned 38,13 -m /u:mV // Voltage of cell 58 +Var=CellVoltage_059 unsigned 51,13 -m /u:mV // Voltage of cell 59 + +[AFE_CellVoltages] +Len=8 +CycleTime=5400 +Mux=CellVoltages_060_063 0,8 0Fh -m +Var=CellVoltage_060_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_061_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_062_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_063_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_060 unsigned 12,13 -m /u:mV // Voltage of cell 60 +Var=CellVoltage_061 unsigned 25,13 -m /u:mV // Voltage of cell 61 +Var=CellVoltage_062 unsigned 38,13 -m /u:mV // Voltage of cell 62 +Var=CellVoltage_063 unsigned 51,13 -m /u:mV // Voltage of cell 63 + +[AFE_CellVoltages] +Len=8 +CycleTime=5400 +Mux=CellVoltages_064_067 0,8 10h -m +Var=CellVoltage_064_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_065_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_066_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_067_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_064 unsigned 12,13 -m /u:mV // Voltage of cell 64 +Var=CellVoltage_065 unsigned 25,13 -m /u:mV // Voltage of cell 65 +Var=CellVoltage_066 unsigned 38,13 -m /u:mV // Voltage of cell 66 +Var=CellVoltage_067 unsigned 51,13 -m /u:mV // Voltage of cell 67 + +[AFE_CellVoltages] +Len=8 +CycleTime=5400 +Mux=CellVoltages_068_071 0,8 11h -m +Var=CellVoltage_068_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_069_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_070_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_071_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_068 unsigned 12,13 -m /u:mV // Voltage of cell 68 +Var=CellVoltage_069 unsigned 25,13 -m /u:mV // Voltage of cell 69 +Var=CellVoltage_070 unsigned 38,13 -m /u:mV // Voltage of cell 70 +Var=CellVoltage_071 unsigned 51,13 -m /u:mV // Voltage of cell 71 + +[AFE_CellVoltages] +Len=8 +CycleTime=5400 +Mux=CellVoltages_072_075 0,8 12h -m +Var=CellVoltage_072_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_073_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_074_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_075_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_072 unsigned 12,13 -m /u:mV // Voltage of cell 72 +Var=CellVoltage_073 unsigned 25,13 -m /u:mV // Voltage of cell 73 +Var=CellVoltage_074 unsigned 38,13 -m /u:mV // Voltage of cell 74 +Var=CellVoltage_075 unsigned 51,13 -m /u:mV // Voltage of cell 75 + +[AFE_CellVoltages] +Len=8 +CycleTime=5400 +Mux=CellVoltages_076_079 0,8 13h -m +Var=CellVoltage_076_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_077_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_078_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_079_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_076 unsigned 12,13 -m /u:mV // Voltage of cell 76 +Var=CellVoltage_077 unsigned 25,13 -m /u:mV // Voltage of cell 77 +Var=CellVoltage_078 unsigned 38,13 -m /u:mV // Voltage of cell 78 +Var=CellVoltage_079 unsigned 51,13 -m /u:mV // Voltage of cell 79 + +[AFE_CellVoltages] +Len=8 +CycleTime=5400 +Mux=CellVoltages_080_083 0,8 14h -m +Var=CellVoltage_080_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_081_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_082_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_083_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_080 unsigned 12,13 -m /u:mV // Voltage of cell 80 +Var=CellVoltage_081 unsigned 25,13 -m /u:mV // Voltage of cell 81 +Var=CellVoltage_082 unsigned 38,13 -m /u:mV // Voltage of cell 82 +Var=CellVoltage_083 unsigned 51,13 -m /u:mV // Voltage of cell 83 + +[AFE_CellVoltages] +Len=8 +CycleTime=5400 +Mux=CellVoltages_084_087 0,8 15h -m +Var=CellVoltage_084_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_085_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_086_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_087_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_084 unsigned 12,13 -m /u:mV // Voltage of cell 84 +Var=CellVoltage_085 unsigned 25,13 -m /u:mV // Voltage of cell 85 +Var=CellVoltage_086 unsigned 38,13 -m /u:mV // Voltage of cell 86 +Var=CellVoltage_087 unsigned 51,13 -m /u:mV // Voltage of cell 87 + +[AFE_CellVoltages] +Len=8 +CycleTime=5400 +Mux=CellVoltages_088_091 0,8 16h -m +Var=CellVoltage_088_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_089_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_090_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_091_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_088 unsigned 12,13 -m /u:mV // Voltage of cell 88 +Var=CellVoltage_089 unsigned 25,13 -m /u:mV // Voltage of cell 89 +Var=CellVoltage_090 unsigned 38,13 -m /u:mV // Voltage of cell 90 +Var=CellVoltage_091 unsigned 51,13 -m /u:mV // Voltage of cell 91 + +[AFE_CellVoltages] +Len=8 +CycleTime=5400 +Mux=CellVoltages_092_095 0,8 17h -m +Var=CellVoltage_092_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_093_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_094_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_095_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_092 unsigned 12,13 -m /u:mV // Voltage of cell 92 +Var=CellVoltage_093 unsigned 25,13 -m /u:mV // Voltage of cell 93 +Var=CellVoltage_094 unsigned 38,13 -m /u:mV // Voltage of cell 94 +Var=CellVoltage_095 unsigned 51,13 -m /u:mV // Voltage of cell 95 + +[AFE_CellVoltages] +Len=8 +CycleTime=5400 +Mux=CellVoltages_096_099 0,8 18h -m +Var=CellVoltage_096_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_097_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_098_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_099_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_096 unsigned 12,13 -m /u:mV // Voltage of cell 96 +Var=CellVoltage_097 unsigned 25,13 -m /u:mV // Voltage of cell 97 +Var=CellVoltage_098 unsigned 38,13 -m /u:mV // Voltage of cell 98 +Var=CellVoltage_099 unsigned 51,13 -m /u:mV // Voltage of cell 99 + +[AFE_CellVoltages] +Len=8 +CycleTime=5400 +Mux=CellVoltages_100_103 0,8 19h -m +Var=CellVoltage_100_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_101_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_102_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_103_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_100 unsigned 12,13 -m /u:mV // Voltage of cell 100 +Var=CellVoltage_101 unsigned 25,13 -m /u:mV // Voltage of cell 101 +Var=CellVoltage_102 unsigned 38,13 -m /u:mV // Voltage of cell 102 +Var=CellVoltage_103 unsigned 51,13 -m /u:mV // Voltage of cell 103 + +[AFE_CellVoltages] +Len=8 +CycleTime=5400 +Mux=CellVoltages_104_107 0,8 1Ah -m +Var=CellVoltage_104_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_105_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_106_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_107_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_104 unsigned 12,13 -m /u:mV // Voltage of cell 104 +Var=CellVoltage_105 unsigned 25,13 -m /u:mV // Voltage of cell 105 +Var=CellVoltage_106 unsigned 38,13 -m /u:mV // Voltage of cell 106 +Var=CellVoltage_107 unsigned 51,13 -m /u:mV // Voltage of cell 107 + +[AFE_CellVoltages] +Len=8 +CycleTime=5400 +Mux=CellVoltages_108_111 0,8 1Bh -m +Var=CellVoltage_108_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_109_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_110_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_111_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_108 unsigned 12,13 -m /u:mV // Voltage of cell 108 +Var=CellVoltage_109 unsigned 25,13 -m /u:mV // Voltage of cell 109 +Var=CellVoltage_110 unsigned 38,13 -m /u:mV // Voltage of cell 110 +Var=CellVoltage_111 unsigned 51,13 -m /u:mV // Voltage of cell 111 + +[AFE_CellVoltages] +Len=8 +CycleTime=5400 +Mux=CellVoltages_112_115 0,8 1Ch -m +Var=CellVoltage_112_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_113_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_114_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_115_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_112 unsigned 12,13 -m /u:mV // Voltage of cell 112 +Var=CellVoltage_113 unsigned 25,13 -m /u:mV // Voltage of cell 113 +Var=CellVoltage_114 unsigned 38,13 -m /u:mV // Voltage of cell 114 +Var=CellVoltage_115 unsigned 51,13 -m /u:mV // Voltage of cell 115 + +[AFE_CellVoltages] +Len=8 +CycleTime=5400 +Mux=CellVoltages_116_119 0,8 1Dh -m +Var=CellVoltage_116_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_117_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_118_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_119_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_116 unsigned 12,13 -m /u:mV // Voltage of cell 116 +Var=CellVoltage_117 unsigned 25,13 -m /u:mV // Voltage of cell 117 +Var=CellVoltage_118 unsigned 38,13 -m /u:mV // Voltage of cell 118 +Var=CellVoltage_119 unsigned 51,13 -m /u:mV // Voltage of cell 119 + +[AFE_CellVoltages] +Len=8 +CycleTime=5400 +Mux=CellVoltages_120_123 0,8 1Eh -m +Var=CellVoltage_120_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_121_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_122_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_123_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_120 unsigned 12,13 -m /u:mV // Voltage of cell 120 +Var=CellVoltage_121 unsigned 25,13 -m /u:mV // Voltage of cell 121 +Var=CellVoltage_122 unsigned 38,13 -m /u:mV // Voltage of cell 122 +Var=CellVoltage_123 unsigned 51,13 -m /u:mV // Voltage of cell 123 + +[AFE_CellVoltages] +Len=8 +CycleTime=5400 +Mux=CellVoltages_124_127 0,8 1Fh -m +Var=CellVoltage_124_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_125_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_126_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_127_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_124 unsigned 12,13 -m /u:mV // Voltage of cell 124 +Var=CellVoltage_125 unsigned 25,13 -m /u:mV // Voltage of cell 125 +Var=CellVoltage_126 unsigned 38,13 -m /u:mV // Voltage of cell 126 +Var=CellVoltage_127 unsigned 51,13 -m /u:mV // Voltage of cell 127 + +[AFE_CellVoltages] +Len=8 +CycleTime=5400 +Mux=CellVoltages_128_131 0,8 20h -m +Var=CellVoltage_128_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_129_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_130_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_131_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_128 unsigned 12,13 -m /u:mV // Voltage of cell 128 +Var=CellVoltage_129 unsigned 25,13 -m /u:mV // Voltage of cell 129 +Var=CellVoltage_130 unsigned 38,13 -m /u:mV // Voltage of cell 130 +Var=CellVoltage_131 unsigned 51,13 -m /u:mV // Voltage of cell 131 + +[AFE_CellVoltages] +Len=8 +CycleTime=5400 +Mux=CellVoltages_132_135 0,8 21h -m +Var=CellVoltage_132_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_133_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_134_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_135_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_132 unsigned 12,13 -m /u:mV // Voltage of cell 132 +Var=CellVoltage_133 unsigned 25,13 -m /u:mV // Voltage of cell 133 +Var=CellVoltage_134 unsigned 38,13 -m /u:mV // Voltage of cell 134 +Var=CellVoltage_135 unsigned 51,13 -m /u:mV // Voltage of cell 135 + +[AFE_CellVoltages] +Len=8 +CycleTime=5400 +Mux=CellVoltages_136_139 0,8 22h -m +Var=CellVoltage_136_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_137_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_138_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_139_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_136 unsigned 12,13 -m /u:mV // Voltage of cell 136 +Var=CellVoltage_137 unsigned 25,13 -m /u:mV // Voltage of cell 137 +Var=CellVoltage_138 unsigned 38,13 -m /u:mV // Voltage of cell 138 +Var=CellVoltage_139 unsigned 51,13 -m /u:mV // Voltage of cell 139 + +[AFE_CellVoltages] +Len=8 +CycleTime=5400 +Mux=CellVoltages_140_143 0,8 23h -m +Var=CellVoltage_140_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_141_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_142_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_143_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_140 unsigned 12,13 -m /u:mV // Voltage of cell 140 +Var=CellVoltage_141 unsigned 25,13 -m /u:mV // Voltage of cell 141 +Var=CellVoltage_142 unsigned 38,13 -m /u:mV // Voltage of cell 142 +Var=CellVoltage_143 unsigned 51,13 -m /u:mV // Voltage of cell 143 + +[AFE_CellVoltages] +Len=8 +CycleTime=5400 +Mux=CellVoltages_144_147 0,8 24h -m +Var=CellVoltage_144_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_145_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_146_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_147_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_144 unsigned 12,13 -m /u:mV // Voltage of cell 144 +Var=CellVoltage_145 unsigned 25,13 -m /u:mV // Voltage of cell 145 +Var=CellVoltage_146 unsigned 38,13 -m /u:mV // Voltage of cell 146 +Var=CellVoltage_147 unsigned 51,13 -m /u:mV // Voltage of cell 147 + +[AFE_CellVoltages] +Len=8 +CycleTime=5400 +Mux=CellVoltages_148_151 0,8 25h -m +Var=CellVoltage_148_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_149_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_150_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_151_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_148 unsigned 12,13 -m /u:mV // Voltage of cell 148 +Var=CellVoltage_149 unsigned 25,13 -m /u:mV // Voltage of cell 149 +Var=CellVoltage_150 unsigned 38,13 -m /u:mV // Voltage of cell 150 +Var=CellVoltage_151 unsigned 51,13 -m /u:mV // Voltage of cell 151 + +[AFE_CellVoltages] +Len=8 +CycleTime=5400 +Mux=CellVoltages_152_155 0,8 26h -m +Var=CellVoltage_152_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_153_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_154_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_155_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_152 unsigned 12,13 -m /u:mV // Voltage of cell 152 +Var=CellVoltage_153 unsigned 25,13 -m /u:mV // Voltage of cell 153 +Var=CellVoltage_154 unsigned 38,13 -m /u:mV // Voltage of cell 154 +Var=CellVoltage_155 unsigned 51,13 -m /u:mV // Voltage of cell 155 + +[AFE_CellVoltages] +Len=8 +CycleTime=5400 +Mux=CellVoltages_156_159 0,8 27h -m +Var=CellVoltage_156_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_157_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_158_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_159_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_156 unsigned 12,13 -m /u:mV // Voltage of cell 156 +Var=CellVoltage_157 unsigned 25,13 -m /u:mV // Voltage of cell 157 +Var=CellVoltage_158 unsigned 38,13 -m /u:mV // Voltage of cell 158 +Var=CellVoltage_159 unsigned 51,13 -m /u:mV // Voltage of cell 159 + +[AFE_CellVoltages] +Len=8 +CycleTime=5400 +Mux=CellVoltages_160_163 0,8 28h -m +Var=CellVoltage_160_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_161_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_162_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_163_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_160 unsigned 12,13 -m /u:mV // Voltage of cell 160 +Var=CellVoltage_161 unsigned 25,13 -m /u:mV // Voltage of cell 161 +Var=CellVoltage_162 unsigned 38,13 -m /u:mV // Voltage of cell 162 +Var=CellVoltage_163 unsigned 51,13 -m /u:mV // Voltage of cell 163 + +[AFE_CellVoltages] +Len=8 +CycleTime=5400 +Mux=CellVoltages_164_167 0,8 29h -m +Var=CellVoltage_164_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_165_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_166_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_167_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_164 unsigned 12,13 -m /u:mV // Voltage of cell 164 +Var=CellVoltage_165 unsigned 25,13 -m /u:mV // Voltage of cell 165 +Var=CellVoltage_166 unsigned 38,13 -m /u:mV // Voltage of cell 166 +Var=CellVoltage_167 unsigned 51,13 -m /u:mV // Voltage of cell 167 + +[AFE_CellVoltages] +Len=8 +CycleTime=5400 +Mux=CellVoltages_168_171 0,8 2Ah -m +Var=CellVoltage_168_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_169_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_170_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_171_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_168 unsigned 12,13 -m /u:mV // Voltage of cell 168 +Var=CellVoltage_169 unsigned 25,13 -m /u:mV // Voltage of cell 169 +Var=CellVoltage_170 unsigned 38,13 -m /u:mV // Voltage of cell 170 +Var=CellVoltage_171 unsigned 51,13 -m /u:mV // Voltage of cell 171 + +[AFE_CellVoltages] +Len=8 +CycleTime=5400 +Mux=CellVoltages_172_175 0,8 2Bh -m +Var=CellVoltage_172_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_173_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_174_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_175_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_172 unsigned 12,13 -m /u:mV // Voltage of cell 172 +Var=CellVoltage_173 unsigned 25,13 -m /u:mV // Voltage of cell 173 +Var=CellVoltage_174 unsigned 38,13 -m /u:mV // Voltage of cell 174 +Var=CellVoltage_175 unsigned 51,13 -m /u:mV // Voltage of cell 175 + +[AFE_CellVoltages] +Len=8 +CycleTime=5400 +Mux=CellVoltages_176_179 0,8 2Ch -m +Var=CellVoltage_176_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_177_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_178_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_179_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_176 unsigned 12,13 -m /u:mV // Voltage of cell 176 +Var=CellVoltage_177 unsigned 25,13 -m /u:mV // Voltage of cell 177 +Var=CellVoltage_178 unsigned 38,13 -m /u:mV // Voltage of cell 178 +Var=CellVoltage_179 unsigned 51,13 -m /u:mV // Voltage of cell 179 + +[AFE_CellVoltages] +Len=8 +CycleTime=5400 +Mux=CellVoltages_180_183 0,8 2Dh -m +Var=CellVoltage_180_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_181_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_182_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_183_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_180 unsigned 12,13 -m /u:mV // Voltage of cell 180 +Var=CellVoltage_181 unsigned 25,13 -m /u:mV // Voltage of cell 181 +Var=CellVoltage_182 unsigned 38,13 -m /u:mV // Voltage of cell 182 +Var=CellVoltage_183 unsigned 51,13 -m /u:mV // Voltage of cell 183 + +[AFE_CellVoltages] +Len=8 +CycleTime=5400 +Mux=CellVoltages_184_187 0,8 2Eh -m +Var=CellVoltage_184_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_185_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_186_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_187_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_184 unsigned 12,13 -m /u:mV // Voltage of cell 184 +Var=CellVoltage_185 unsigned 25,13 -m /u:mV // Voltage of cell 185 +Var=CellVoltage_186 unsigned 38,13 -m /u:mV // Voltage of cell 186 +Var=CellVoltage_187 unsigned 51,13 -m /u:mV // Voltage of cell 187 + +[AFE_CellVoltages] +Len=8 +CycleTime=5400 +Mux=CellVoltages_188_191 0,8 2Fh -m +Var=CellVoltage_188_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_189_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_190_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_191_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_188 unsigned 12,13 -m /u:mV // Voltage of cell 188 +Var=CellVoltage_189 unsigned 25,13 -m /u:mV // Voltage of cell 189 +Var=CellVoltage_190 unsigned 38,13 -m /u:mV // Voltage of cell 190 +Var=CellVoltage_191 unsigned 51,13 -m /u:mV // Voltage of cell 191 + +[AFE_CellVoltages] +Len=8 +CycleTime=5400 +Mux=CellVoltages_192_195 0,8 30h -m +Var=CellVoltage_192_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_193_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_194_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_195_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_192 unsigned 12,13 -m /u:mV // Voltage of cell 192 +Var=CellVoltage_193 unsigned 25,13 -m /u:mV // Voltage of cell 193 +Var=CellVoltage_194 unsigned 38,13 -m /u:mV // Voltage of cell 194 +Var=CellVoltage_195 unsigned 51,13 -m /u:mV // Voltage of cell 195 + +[AFE_CellVoltages] +Len=8 +CycleTime=5400 +Mux=CellVoltages_196_199 0,8 31h -m +Var=CellVoltage_196_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_197_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_198_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_199_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_196 unsigned 12,13 -m /u:mV // Voltage of cell 196 +Var=CellVoltage_197 unsigned 25,13 -m /u:mV // Voltage of cell 197 +Var=CellVoltage_198 unsigned 38,13 -m /u:mV // Voltage of cell 198 +Var=CellVoltage_199 unsigned 51,13 -m /u:mV // Voltage of cell 199 + +[AFE_CellVoltages] +Len=8 +CycleTime=5400 +Mux=CellVoltages_200_203 0,8 32h -m +Var=CellVoltage_200_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_201_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_202_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_203_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_200 unsigned 12,13 -m /u:mV // Voltage of cell 200 +Var=CellVoltage_201 unsigned 25,13 -m /u:mV // Voltage of cell 201 +Var=CellVoltage_202 unsigned 38,13 -m /u:mV // Voltage of cell 202 +Var=CellVoltage_203 unsigned 51,13 -m /u:mV // Voltage of cell 203 + +[AFE_CellVoltages] +Len=8 +CycleTime=5400 +Mux=CellVoltages_204_207 0,8 33h -m +Var=CellVoltage_204_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_205_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_206_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_207_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_204 unsigned 12,13 -m /u:mV // Voltage of cell 204 +Var=CellVoltage_205 unsigned 25,13 -m /u:mV // Voltage of cell 205 +Var=CellVoltage_206 unsigned 38,13 -m /u:mV // Voltage of cell 206 +Var=CellVoltage_207 unsigned 51,13 -m /u:mV // Voltage of cell 207 + +[AFE_CellVoltages] +Len=8 +CycleTime=5400 +Mux=CellVoltages_208_211 0,8 34h -m +Var=CellVoltage_208_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_209_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_210_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_211_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_208 unsigned 12,13 -m /u:mV // Voltage of cell 208 +Var=CellVoltage_209 unsigned 25,13 -m /u:mV // Voltage of cell 209 +Var=CellVoltage_210 unsigned 38,13 -m /u:mV // Voltage of cell 210 +Var=CellVoltage_211 unsigned 51,13 -m /u:mV // Voltage of cell 211 + +[AFE_CellVoltages] +Len=8 +CycleTime=5400 +Mux=CellVoltages_212_215 0,8 35h -m +Var=CellVoltage_212_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_213_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_214_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_215_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_212 unsigned 12,13 -m /u:mV // Voltage of cell 212 +Var=CellVoltage_213 unsigned 25,13 -m /u:mV // Voltage of cell 213 +Var=CellVoltage_214 unsigned 38,13 -m /u:mV // Voltage of cell 214 +Var=CellVoltage_215 unsigned 51,13 -m /u:mV // Voltage of cell 215 + +[BAS_AerosolSensor] +ID=3C4h // (in:can_cbs_rx_aerosol-sensor.c:CANRX_AerosolSensor, fv:rx) Len=8 -CycleTime=100 -p -Var=foxBMS_packCurrent signed 46,18 -m /u:A /f:0.01 // Battery pack current -Var=foxBMS_batteryVoltage unsigned 0,14 -m /u:V /f:0.1 // Battery voltage between negative and positive pole of the battery -Var=foxBMS_busVoltage unsigned 14,14 -m /u:V /f:0.1 // Battery voltage between negative pole and after main positive contactor -Var=foxBMS_packPower signed 28,18 -m /u:kW /f:0.01 // Battery power +CycleTime=1000 +Var=ParticulateMatterConcentration unsigned 0,16 -m +Var=LowPowerModeWakeUpThreshold unsigned 16,16 -m +Var=SensorStatus unsigned 37,3 -m +Var=SensorFaults unsigned 32,5 -m +Var=RollingCounter unsigned 45,3 -m +Var=CrcCheckCode unsigned 56,8 -m -[foxBMS_LimitValues] -ID=224h // (in:can_cbs_tx_pack-limits.c:CANTX_LimitValues, fv:tx) +[f_BmsState] +ID=220h // Message contains general BMS state information (in:can_cbs_tx_bms-state.c:CANTX_BmsState, fv:tx) Len=8 CycleTime=100 -p -Var=foxBMS_maxChargeCurrent unsigned 12,12 -m /u:A /f:0.25 // Maximum battery pack charge current -Var=foxBMS_maxDischargeCurrent unsigned 0,12 -m /u:A /f:0.25 // Maximum battery pack discharge current -Var=foxBMS_maxChargePower unsigned 36,12 -m /u:kW /f:0.2 -Var=foxBMS_maxDischargePower unsigned 24,12 -m /u:kW /f:0.1 -Var=foxBMS_maxBatteryVoltage unsigned 48,8 -m /u:V /f:4 -Var=foxBMS_minBatteryVoltage unsigned 56,8 -m /u:V /f:4 - -[foxBMS_MinimumMaximumValues] -ID=223h // (in:can_cbs_tx_pack-minimum-maximum-values.c:CANTX_MinimumMaximumValues, fv:tx) +Var=BmsState unsigned 4,4 -m /e:f_BmsState /ln:"BmsState" // Shows the internal state of the BMS state machine +Var=NumberOfConnectedStrings unsigned 0,4 -m /ln:"NumberOfConnectedStrings" // Shows the number of connected strings, i.e., the strings in which the contactors are closed +Var=GeneralError bit 13,1 -m /e:f_ErrorFlag /ln:"GeneralError" // Indicates whether any error is present on the BMS or not +Var=GeneralWarning bit 14,1 -m /e:f_WarningFlag /ln:"GeneralWarning" // Indicates whether any warning is present on the BMS or not +Var=McuDieTemperatureError bit 21,1 -m /e:f_ErrorFlag /ln:"McuDieTemperatureError" // Indicates whether there is an MCU temperature error or not +Var=BmsMasterPcbOvertemperatureError bit 20,1 -m /e:f_ErrorFlag /ln:"BmsMasterPcbOvertemperatureError" // Indicates whether a too high PCB temperature (i.e., overtemperature) of the BMS Master has been detected or not +Var=BmsMasterPcbUndertemperatureErro bit 19,1 -m /e:f_ErrorFlag /ln:"BmsMasterPcbUndertemperatureError" // Indicates whether a too low PCB temperature (i.e., undertemperature) of the BMS Master has been detected or not +Var=PrechargeVoltageError bit 23,1 -m /e:f_ErrorFlag /ln:"PrechargeVoltageError" // Indicates whether precharging was successful or needed to aborted because of a too high voltage difference +Var=PrechargeCurrentError bit 22,1 -m /e:f_ErrorFlag /ln:"PrechargeCurrentError" // Indicates whether precharging was successful or needed to aborted because of a current limit violation +Var=HeaterState bit 9,1 -m /e:f_GenericActiveFlag /ln:"HeaterState" // Indicates whether the heater is active or not +Var=CoolingState bit 8,1 -m /e:f_GenericActiveFlag /ln:"CoolingState" // Indicates whether cooling is active or not +Var=InsulationMonitoring bit 10,1 -m /e:f_GenericActiveFlag /ln:"InsulationMonitoring" // Indicates whether the insulation monitoring device is active or not +Var=ChargingComplete bit 15,1 -m /e:f_CompleteFlag /ln:"ChargingComplete" // Indicates whether charging is completed or not +Var=EmergencyShutoff bit 12,1 -m /e:f_GenericActiveFlag /ln:"EmergencyShutoff" // Indicates that the BMS is preparing to open the contactors soon due to detected error +Var=MainFuseBlown bit 18,1 -m /e:f_FuseState /ln:"MainFuseBlown" // Indicates whether there is the main fuse is blown or not +Var=InterlockState bit 17,1 -m /e:f_InterlockState /ln:"InterlockState" // Indicates whether the is closed or not +Var=NumberOfDeactivatedStrings unsigned 52,4 -m /ln:"NumberOfDeactivatedStrings" // Shows the number of not connected strings, i.e., the strings in which the contactors are open +Var=InsulationError bit 16,1 -m /e:f_ErrorFlag /ln:"InsulationError" // Indicates whether an insulation error has been detected or not +Var=CanTimingError bit 31,1 -m /e:f_ErrorFlag /ln:"CanTimingError" // Indicates whether there is CAN timing error or not +Var=PackOvercurrentChargeError bit 30,1 -m /e:f_ErrorFlag /ln:"PackOvercurrentChargeError" // Indicates whether a too high pack current (i.e., overcurrent) has been detected during charing or not +Var=PackOvercurrentDischargeError bit 29,1 -m /e:f_ErrorFlag /ln:"PackOvercurrentDischargeError" // Indicates whether a too high pack current (i.e., overcurrent) has been detected during discharging or not +Var=SystemMonitoringError bit 11,1 -m /e:f_ErrorFlag /ln:"SystemMonitoringError" // Indicates whether a task has violated its timing requirements +Var=AlertFlag bit 28,1 -m /e:f_AlertFlag /ln:"AlertFlag" // Indicates whether any alter flag is set or not +Var=NvramCrcError bit 27,1 -m /e:f_ErrorFlag /ln:"NvramCrcError" // Indicates whether a CRC error has been detected in the NVRAM or not +Var=InsulationResistance unsigned 56,8 -m /u:kOhm /f:200 + +[f_BmsStateDetails] +ID=221h // Details on flags transmitted by the 'BmsState' message (in:can_cbs_tx_bms-state-details.c:CANTX_BmsStateDetails, fv:tx) Len=8 -CycleTime=100 -p -Var=foxBMS_minimumCellVoltage unsigned 13,13 -m /u:mV // Minimum cell voltage of all connected strings, if no string connected maximum value of whole system is transmitted -Var=foxBMS_maximumCellVoltage unsigned 0,13 -m /u:mV // Maximum cell voltage of all connected strings, if no string connected maximum value of whole system is transmitted -Var=foxBMS_maximumCellTemp signed 48,8 -m /u:degC // Maximum cell temperature of all connected strings, if no string connected maximum value of whole system is transmitted -Var=foxBMS_minimumCellTemp signed 56,8 -m /u:degC // Minium cell temperature of all connected string, if no string connected maximum value of whole system is transmitted -Var=foxBMS_inletTemperature signed 32,8 -m /u:degC -Var=foxBMS_outletTemperature signed 40,8 -m /u:degC - -[foxBMS_StringValuesP0] -ID=280h // Message contains string voltage, current and power (in:can_cbs_tx_pack-values-p0.c:CANTX_StringValuesP0, fv:tx) +CycleTime=1000 -p +Var=TimingViolationEngineTask bit 7,1 -m /e:f_ErrorFlag /ln:"TimingViolationEngineTask" // Indicates whether the timing of the engine task has been violated. +Var=TimingViolation1msTask bit 6,1 -m /e:f_ErrorFlag /ln:"TimingViolation1msTask" // Indicates whether the timing of the 1ms task has been violated. +Var=TimingViolation10msTask bit 5,1 -m /e:f_ErrorFlag /ln:"TimingViolation10msTask" // Indicates whether the timing of the 10ms task has been violated. +Var=TimingViolation100msTask bit 4,1 -m /e:f_ErrorFlag /ln:"TimingViolation100msTask" // Indicates whether the timing of the 100ms task has been violated. +Var=TimingViolation100msAlgoTask bit 3,1 -m /e:f_ErrorFlag /ln:"TimingViolation100msAlgorithmTask" // Indicates whether the timing of the 100ms algorithm task has been violated. +Var=TimingViolation10msTaskRecorded bit 13,1 -m /e:f_ErrorFlag /ln:"TimingViolation10msTaskRecorded" // Indicates whether a violation of the timing of the 10ms task has been recorded. +Var=TimingViolation100msTaskRecorded bit 12,1 -m /e:f_ErrorFlag /ln:"TimingViolation100msTaskRecorded" // Indicates whether a violation of the timing of the 100ms task has been recorded. +Var=TimingViolation100msAlgoTaskReco bit 11,1 -m /e:f_ErrorFlag /ln:"TimingViolation100msAlgorithmTaskRecorded" // Indicates whether a violation of the timing of the 100ms algorithm task has been recorded. +Var=TimingViolationEngineTaskRecorde bit 15,1 -m /e:f_ErrorFlag /ln:"TimingViolationEngineTaskRecorded" // Indicates whether a violation of the timing of the engine task has been recorded. +Var=TimingViolation1msTaskRecorded bit 14,1 -m /e:f_ErrorFlag /ln:"TimingViolation1msTaskRecorded" // Indicates whether a violation of the timing of the 1ms task has been recorded. + +[f_BmsStateRequest] +ID=210h // Requests specific BMS behavior and gives the BMS required information from the higher-level control unit (in:can_cbs_rx_bms-state-request.c:CANRX_BmsStateRequest, fv:rx) +Len=8 +Var=RequestBmsMode unsigned 6,2 -m /e:f_ModeRequest /ln:"RequestBmsMode" // Instructs the BMS the to try to switch to the requested mode +Var=ActivateBalancing bit 15,1 -m /ln:"ActivateBalancing" // Instructs the BMS to activate/deactivate balancing +Var=SetBalancingThreshold unsigned 16,8 -m /u:mV /ln:"SetBalancingThreshold" // Sets the required voltage difference to minimum cell voltage to activate balancing +Var=IndicatePrechargeType bit 4,1 -m /e:f_PrechargeType /ln:"IndicatePrechargeType" // Notifies the BMS whether the battery system is externally precharged or not +Var=ResetPersistentFlags bit 5,1 -m /ln:"ResetPersistentFlags" // Instructs the BMS the to reset persistent flags +Var=ChargerConnected bit 3,1 -m /e:f_YesNoFlag /ln:"ChargerConnected" // Tells the BMS whether a charger is connected or not +Var=DisableInsulationMonitoring bit 2,1 -m /ln:"DisableInsulationMonitoring" // Instructs the BMS to check/not check the battery system insulation + +[f_CellTemperatures] +ID=260h // Cell temperature measurement data (in:can_cbs_tx_cell-temperatures.c:CANTX_CellTemperatures, fv:tx) Len=8 -CycleTime=100 -p -Mux=mux_valuesP0String_0 0,3 0 -m -Var=foxBMS_String0Current signed 20,18 -m /u:A /f:0.01 -Var=foxBMS_String0Voltage unsigned 3,17 -m /u:V /f:0.01 -Var=foxBMS_String0Power signed 38,18 -m /u:kW /f:0.01 - -[foxBMS_StringValuesP1] -ID=283h // Message contains energy counting value (in:can_cbs_tx_pack-values-p0.c:CANTX_StringValuesP1, fv:tx) +CycleTime=4500 -p +Mux=CellTemperatures_000_005 0,8 0 -m +Var=CellTemperature_000_invalidFlag bit 15,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_001_invalidFlag bit 14,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_002_invalidFlag bit 13,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_003_invalidFlag bit 12,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_004_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_005_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_000 signed 16,8 -m /u:degC // Temperature of cell 0 +Var=CellTemperature_001 signed 24,8 -m /u:degC // Temperature of cell 1 +Var=CellTemperature_002 signed 32,8 -m /u:degC // Temperature of cell 2 +Var=CellTemperature_003 signed 40,8 -m /u:degC // Temperature of cell 3 +Var=CellTemperature_004 signed 48,8 -m /u:degC // Temperature of cell 4 +Var=CellTemperature_005 signed 56,8 -m /u:degC // Temperature of cell 5 + +[f_CellTemperatures] Len=8 -CycleTime=100 -p -Mux=mux_valuesP1String_0 0,4 0 -m -Var=foxBMS_String0EnergyCount signed 8,32 -m /u:Wh // Current sensor string 0 energy counting value - -[foxBMS_PackStateEstimation] -ID=225h // (in:can_cbs_tx_pack-state-estimation.c:CANTX_PackStateEstimation, fv:tx) +CycleTime=4500 -p +Mux=CellTemperatures_006_011 0,8 1 -m +Var=CellTemperature_006_invalidFlag bit 15,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_007_invalidFlag bit 14,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_008_invalidFlag bit 13,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_009_invalidFlag bit 12,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_010_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_011_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_006 signed 16,8 -m /u:degC // Temperature of cell 6 +Var=CellTemperature_007 signed 24,8 -m /u:degC // Temperature of cell 7 +Var=CellTemperature_008 signed 32,8 -m /u:degC // Temperature of cell 8 +Var=CellTemperature_009 signed 40,8 -m /u:degC // Temperature of cell 9 +Var=CellTemperature_010 signed 48,8 -m /u:degC // Temperature of cell 10 +Var=CellTemperature_011 signed 56,8 -m /u:degC // Temperature of cell 11 + +[f_CellTemperatures] Len=8 -CycleTime=1000 -p -Var=foxBMS_packSoc unsigned 0,14 -m /u:% /f:0.01 // SOC currently connected to HV bus (100% if all strings connected and all strings at 100%) -Var=foxBMS_packSoe unsigned 14,14 -m /u:% /f:0.01 // SOE currently connected to HV bus (100% if all strings connected and all strings at 100%) -Var=foxBMS_packEnergy unsigned 40,24 -m /u:kWh /f:0.01 // Energy left in Wh that is currently connected to HV bus -Var=foxBMS_packSoh unsigned 28,12 -m /u:% /f:0.025 - -[foxBMS_CellVoltages] -ID=240h // (in:can_cbs_tx_cell-voltages.c:CANTX_CellVoltages, fv:tx) +CycleTime=4500 -p +Mux=CellTemperatures_012_017 0,8 2 -m +Var=CellTemperature_012_invalidFlag bit 15,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_013_invalidFlag bit 14,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_014_invalidFlag bit 13,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_015_invalidFlag bit 12,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_016_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_017_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_012 signed 16,8 -m /u:degC // Temperature of cell 12 +Var=CellTemperature_013 signed 24,8 -m /u:degC // Temperature of cell 13 +Var=CellTemperature_014 signed 32,8 -m /u:degC // Temperature of cell 14 +Var=CellTemperature_015 signed 40,8 -m /u:degC // Temperature of cell 15 +Var=CellTemperature_016 signed 48,8 -m /u:degC // Temperature of cell 16 +Var=CellTemperature_017 signed 56,8 -m /u:degC // Temperature of cell 17 + +[f_CellTemperatures] Len=8 -CycleTime=5400 -p -Mux=mux_cellVoltage_000_003 0,8 0 -m -Var=cellVoltage_000_invalidFlag bit 11,1 -m -Var=cellVoltage_001_invalidFlag bit 10,1 -m -Var=cellVoltage_002_invalidFlag bit 9,1 -m -Var=cellVoltage_003_invalidFlag bit 8,1 -m -Var=cellVoltage_000 unsigned 12,13 -m /u:mV -Var=cellVoltage_001 unsigned 25,13 -m /u:mV -Var=cellVoltage_002 unsigned 38,13 -m /u:mV -Var=cellVoltage_003 unsigned 51,13 -m /u:mV - -[foxBMS_CellVoltages] +CycleTime=4500 -p +Mux=CellTemperatures_018_023 0,8 3 -m +Var=CellTemperature_018_invalidFlag bit 15,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_019_invalidFlag bit 14,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_020_invalidFlag bit 13,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_021_invalidFlag bit 12,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_022_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_023_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_018 signed 16,8 -m /u:degC // Temperature of cell 18 +Var=CellTemperature_019 signed 24,8 -m /u:degC // Temperature of cell 19 +Var=CellTemperature_020 signed 32,8 -m /u:degC // Temperature of cell 20 +Var=CellTemperature_021 signed 40,8 -m /u:degC // Temperature of cell 21 +Var=CellTemperature_022 signed 48,8 -m /u:degC // Temperature of cell 22 +Var=CellTemperature_023 signed 56,8 -m /u:degC // Temperature of cell 23 + +[f_CellTemperatures] Len=8 -CycleTime=5400 -p -Mux=mux_cellVoltage_004_007 0,8 1 -m -Var=cellVoltage_004_invalidFlag bit 11,1 -m -Var=cellVoltage_005_invalidFlag bit 10,1 -m -Var=cellVoltage_006_invalidFlag bit 9,1 -m -Var=cellVoltage_007_invalidFlag bit 8,1 -m -Var=cellVoltage_004 unsigned 12,13 -m /u:mV -Var=cellVoltage_005 unsigned 25,13 -m /u:mV -Var=cellVoltage_006 unsigned 38,13 -m /u:mV -Var=cellVoltage_007 unsigned 51,13 -m /u:mV - -[foxBMS_CellVoltages] +CycleTime=4500 -p +Mux=CellTemperatures_024_029 0,8 4 -m +Var=CellTemperature_024_invalidFlag bit 15,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_025_invalidFlag bit 14,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_026_invalidFlag bit 13,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_027_invalidFlag bit 12,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_028_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_029_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_024 signed 16,8 -m /u:degC // Temperature of cell 24 +Var=CellTemperature_025 signed 24,8 -m /u:degC // Temperature of cell 25 +Var=CellTemperature_026 signed 32,8 -m /u:degC // Temperature of cell 26 +Var=CellTemperature_027 signed 40,8 -m /u:degC // Temperature of cell 27 +Var=CellTemperature_028 signed 48,8 -m /u:degC // Temperature of cell 28 +Var=CellTemperature_029 signed 56,8 -m /u:degC // Temperature of cell 29 + +[f_CellTemperatures] Len=8 -CycleTime=5400 -p -Mux=mux_cellVoltage_008_011 0,8 2 -m -Var=cellVoltage_008_invalidFlag bit 11,1 -m -Var=cellVoltage_009_invalidFlag bit 10,1 -m -Var=cellVoltage_010_invalidFlag bit 9,1 -m -Var=cellVoltage_011_invalidFlag bit 8,1 -m -Var=cellVoltage_008 unsigned 12,13 -m /u:mV -Var=cellVoltage_009 unsigned 25,13 -m /u:mV -Var=cellVoltage_010 unsigned 38,13 -m /u:mV -Var=cellVoltage_011 unsigned 51,13 -m /u:mV - -[foxBMS_CellVoltages] +CycleTime=4500 -p +Mux=CellTemperatures_030_035 0,8 5 -m +Var=CellTemperature_030_invalidFlag bit 15,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_031_invalidFlag bit 14,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_032_invalidFlag bit 13,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_033_invalidFlag bit 12,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_034_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_035_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_030 signed 16,8 -m /u:degC // Temperature of cell 30 +Var=CellTemperature_031 signed 24,8 -m /u:degC // Temperature of cell 31 +Var=CellTemperature_032 signed 32,8 -m /u:degC // Temperature of cell 32 +Var=CellTemperature_033 signed 40,8 -m /u:degC // Temperature of cell 33 +Var=CellTemperature_034 signed 48,8 -m /u:degC // Temperature of cell 34 +Var=CellTemperature_035 signed 56,8 -m /u:degC // Temperature of cell 35 + +[f_CellTemperatures] Len=8 -CycleTime=5400 -p -Mux=mux_cellVoltage_012_015 0,8 3 -m -Var=cellVoltage_012_invalidFlag bit 11,1 -m -Var=cellVoltage_013_invalidFlag bit 10,1 -m -Var=cellVoltage_014_invalidFlag bit 9,1 -m -Var=cellVoltage_015_invalidFlag bit 8,1 -m -Var=cellVoltage_012 unsigned 12,13 -m /u:mV -Var=cellVoltage_013 unsigned 25,13 -m /u:mV -Var=cellVoltage_014 unsigned 38,13 -m /u:mV -Var=cellVoltage_015 unsigned 51,13 -m /u:mV - -[foxBMS_CellVoltages] +CycleTime=4500 -p +Mux=CellTemperatures_036_041 0,8 6 -m +Var=CellTemperature_036_invalidFlag bit 15,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_037_invalidFlag bit 14,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_038_invalidFlag bit 13,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_039_invalidFlag bit 12,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_040_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_041_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_036 signed 16,8 -m /u:degC // Temperature of cell 36 +Var=CellTemperature_037 signed 24,8 -m /u:degC // Temperature of cell 37 +Var=CellTemperature_038 signed 32,8 -m /u:degC // Temperature of cell 38 +Var=CellTemperature_039 signed 40,8 -m /u:degC // Temperature of cell 39 +Var=CellTemperature_040 signed 48,8 -m /u:degC // Temperature of cell 40 +Var=CellTemperature_041 signed 56,8 -m /u:degC // Temperature of cell 41 + +[f_CellTemperatures] Len=8 -CycleTime=5400 -p -Mux=mux_cellVoltage_016_019 0,8 4 -m -Var=cellVoltage_016_invalidFlag bit 11,1 -m -Var=cellVoltage_017_invalidFlag bit 10,1 -m -Var=cellVoltage_018_invalidFlag bit 9,1 -m -Var=cellVoltage_019_invalidFlag bit 8,1 -m -Var=cellVoltage_016 unsigned 12,13 -m /u:mV -Var=cellVoltage_017 unsigned 25,13 -m /u:mV -Var=cellVoltage_018 unsigned 38,13 -m /u:mV -Var=cellVoltage_019 unsigned 51,13 -m /u:mV - -[foxBMS_CellVoltages] +CycleTime=4500 -p +Mux=CellTemperatures_042_047 0,8 7 -m +Var=CellTemperature_042_invalidFlag bit 15,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_043_invalidFlag bit 14,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_044_invalidFlag bit 13,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_045_invalidFlag bit 12,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_046_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_047_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_042 signed 16,8 -m /u:degC // Temperature of cell 42 +Var=CellTemperature_043 signed 24,8 -m /u:degC // Temperature of cell 43 +Var=CellTemperature_044 signed 32,8 -m /u:degC // Temperature of cell 44 +Var=CellTemperature_045 signed 40,8 -m /u:degC // Temperature of cell 45 +Var=CellTemperature_046 signed 48,8 -m /u:degC // Temperature of cell 46 +Var=CellTemperature_047 signed 56,8 -m /u:degC // Temperature of cell 47 + +[f_CellTemperatures] Len=8 -CycleTime=5400 -p -Mux=mux_cellVoltage_020_023 0,8 5 -m -Var=cellVoltage_020_invalidFlag bit 11,1 -m -Var=cellVoltage_021_invalidFlag bit 10,1 -m -Var=cellVoltage_022_invalidFlag bit 9,1 -m -Var=cellVoltage_023_invalidFlag bit 8,1 -m -Var=cellVoltage_020 unsigned 12,13 -m /u:mV -Var=cellVoltage_021 unsigned 25,13 -m /u:mV -Var=cellVoltage_022 unsigned 38,13 -m /u:mV -Var=cellVoltage_023 unsigned 51,13 -m /u:mV - -[foxBMS_CellVoltages] +CycleTime=4500 -p +Mux=CellTemperatures_048_053 0,8 8 -m +Var=CellTemperature_048_invalidFlag bit 15,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_049_invalidFlag bit 14,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_050_invalidFlag bit 13,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_051_invalidFlag bit 12,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_052_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_053_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_048 signed 16,8 -m /u:degC // Temperature of cell 48 +Var=CellTemperature_049 signed 24,8 -m /u:degC // Temperature of cell 49 +Var=CellTemperature_050 signed 32,8 -m /u:degC // Temperature of cell 50 +Var=CellTemperature_051 signed 40,8 -m /u:degC // Temperature of cell 51 +Var=CellTemperature_052 signed 48,8 -m /u:degC // Temperature of cell 52 +Var=CellTemperature_053 signed 56,8 -m /u:degC // Temperature of cell 53 + +[f_CellTemperatures] Len=8 -CycleTime=5400 -p -Mux=mux_cellVoltage_024_027 0,8 6 -m -Var=cellVoltage_024_invalidFlag bit 11,1 -m -Var=cellVoltage_025_invalidFlag bit 10,1 -m -Var=cellVoltage_026_invalidFlag bit 9,1 -m -Var=cellVoltage_027_invalidFlag bit 8,1 -m -Var=cellVoltage_024 unsigned 12,13 -m /u:mV -Var=cellVoltage_025 unsigned 25,13 -m /u:mV -Var=cellVoltage_026 unsigned 38,13 -m /u:mV -Var=cellVoltage_027 unsigned 51,13 -m /u:mV - -[foxBMS_CellVoltages] +CycleTime=4500 -p +Mux=CellTemperatures_054_059 0,8 9 -m +Var=CellTemperature_054_invalidFlag bit 15,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_055_invalidFlag bit 14,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_056_invalidFlag bit 13,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_057_invalidFlag bit 12,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_058_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_059_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_054 signed 16,8 -m /u:degC // Temperature of cell 54 +Var=CellTemperature_055 signed 24,8 -m /u:degC // Temperature of cell 55 +Var=CellTemperature_056 signed 32,8 -m /u:degC // Temperature of cell 56 +Var=CellTemperature_057 signed 40,8 -m /u:degC // Temperature of cell 57 +Var=CellTemperature_058 signed 48,8 -m /u:degC // Temperature of cell 58 +Var=CellTemperature_059 signed 56,8 -m /u:degC // Temperature of cell 59 + +[f_CellTemperatures] Len=8 -CycleTime=5400 -p -Mux=mux_cellVoltage_028_031 0,8 7 -m -Var=cellVoltage_028_invalidFlag bit 11,1 -m -Var=cellVoltage_029_invalidFlag bit 10,1 -m -Var=cellVoltage_030_invalidFlag bit 9,1 -m -Var=cellVoltage_031_invalidFlag bit 8,1 -m -Var=cellVoltage_028 unsigned 12,13 -m /u:mV -Var=cellVoltage_029 unsigned 25,13 -m /u:mV -Var=cellVoltage_030 unsigned 38,13 -m /u:mV -Var=cellVoltage_031 unsigned 51,13 -m /u:mV - -[foxBMS_CellVoltages] +CycleTime=4500 -p +Mux=CellTemperatures_060_065 0,8 0Ah -m +Var=CellTemperature_060_invalidFlag bit 15,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_061_invalidFlag bit 14,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_062_invalidFlag bit 13,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_063_invalidFlag bit 12,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_064_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_065_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_060 signed 16,8 -m /u:degC // Temperature of cell 60 +Var=CellTemperature_061 signed 24,8 -m /u:degC // Temperature of cell 61 +Var=CellTemperature_062 signed 32,8 -m /u:degC // Temperature of cell 62 +Var=CellTemperature_063 signed 40,8 -m /u:degC // Temperature of cell 63 +Var=CellTemperature_064 signed 48,8 -m /u:degC // Temperature of cell 64 +Var=CellTemperature_065 signed 56,8 -m /u:degC // Temperature of cell 65 + +[f_CellTemperatures] Len=8 -CycleTime=5400 -p -Mux=mux_cellVoltage_032_035 0,8 8 -m -Var=cellVoltage_032_invalidFlag bit 11,1 -m -Var=cellVoltage_033_invalidFlag bit 10,1 -m -Var=cellVoltage_034_invalidFlag bit 9,1 -m -Var=cellVoltage_035_invalidFlag bit 8,1 -m -Var=cellVoltage_032 unsigned 12,13 -m /u:mV -Var=cellVoltage_033 unsigned 25,13 -m /u:mV -Var=cellVoltage_034 unsigned 38,13 -m /u:mV -Var=cellVoltage_035 unsigned 51,13 -m /u:mV - -[foxBMS_CellVoltages] +CycleTime=4500 -p +Mux=CellTemperatures_066_071 0,8 0Bh -m +Var=CellTemperature_066_invalidFlag bit 15,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_067_invalidFlag bit 14,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_068_invalidFlag bit 13,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_069_invalidFlag bit 12,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_070_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_071_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_066 signed 16,8 -m /u:degC // Temperature of cell 66 +Var=CellTemperature_067 signed 24,8 -m /u:degC // Temperature of cell 67 +Var=CellTemperature_068 signed 32,8 -m /u:degC // Temperature of cell 68 +Var=CellTemperature_069 signed 40,8 -m /u:degC // Temperature of cell 69 +Var=CellTemperature_070 signed 48,8 -m /u:degC // Temperature of cell 70 +Var=CellTemperature_071 signed 56,8 -m /u:degC // Temperature of cell 71 + +[f_CellTemperatures] Len=8 -CycleTime=5400 -p -Mux=mux_cellVoltage_036_039 0,8 9 -m -Var=cellVoltage_036_invalidFlag bit 11,1 -m -Var=cellVoltage_037_invalidFlag bit 10,1 -m -Var=cellVoltage_038_invalidFlag bit 9,1 -m -Var=cellVoltage_039_invalidFlag bit 8,1 -m -Var=cellVoltage_036 unsigned 12,13 -m /u:mV -Var=cellVoltage_037 unsigned 25,13 -m /u:mV -Var=cellVoltage_038 unsigned 38,13 -m /u:mV -Var=cellVoltage_039 unsigned 51,13 -m /u:mV - -[foxBMS_CellVoltages] +CycleTime=4500 -p +Mux=CellTemperatures_072_077 0,8 0Ch -m +Var=CellTemperature_072_invalidFlag bit 15,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_073_invalidFlag bit 14,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_074_invalidFlag bit 13,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_075_invalidFlag bit 12,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_076_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_077_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_072 signed 16,8 -m /u:degC // Temperature of cell 72 +Var=CellTemperature_073 signed 24,8 -m /u:degC // Temperature of cell 73 +Var=CellTemperature_074 signed 32,8 -m /u:degC // Temperature of cell 74 +Var=CellTemperature_075 signed 40,8 -m /u:degC // Temperature of cell 75 +Var=CellTemperature_076 signed 48,8 -m /u:degC // Temperature of cell 76 +Var=CellTemperature_077 signed 56,8 -m /u:degC // Temperature of cell 77 + +[f_CellTemperatures] Len=8 -CycleTime=5400 -p -Mux=mux_cellVoltage_040_043 0,8 0Ah -m -Var=cellVoltage_040_invalidFlag bit 11,1 -m -Var=cellVoltage_041_invalidFlag bit 10,1 -m -Var=cellVoltage_042_invalidFlag bit 9,1 -m -Var=cellVoltage_043_invalidFlag bit 8,1 -m -Var=cellVoltage_040 unsigned 12,13 -m /u:mV -Var=cellVoltage_041 unsigned 25,13 -m /u:mV -Var=cellVoltage_042 unsigned 38,13 -m /u:mV -Var=cellVoltage_043 unsigned 51,13 -m /u:mV - -[foxBMS_CellVoltages] +CycleTime=4500 -p +Mux=CellTemperatures_078_083 0,8 0Dh -m +Var=CellTemperature_078_invalidFlag bit 15,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_079_invalidFlag bit 14,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_080_invalidFlag bit 13,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_081_invalidFlag bit 12,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_082_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_083_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_078 signed 16,8 -m /u:degC // Temperature of cell 78 +Var=CellTemperature_079 signed 24,8 -m /u:degC // Temperature of cell 79 +Var=CellTemperature_080 signed 32,8 -m /u:degC // Temperature of cell 80 +Var=CellTemperature_081 signed 40,8 -m /u:degC // Temperature of cell 81 +Var=CellTemperature_082 signed 48,8 -m /u:degC // Temperature of cell 82 +Var=CellTemperature_083 signed 56,8 -m /u:degC // Temperature of cell 83 + +[f_CellTemperatures] Len=8 -CycleTime=5400 -p -Mux=mux_cellVoltage_044_047 0,8 0Bh -m -Var=cellVoltage_044_invalidFlag bit 11,1 -m -Var=cellVoltage_045_invalidFlag bit 10,1 -m -Var=cellVoltage_046_invalidFlag bit 9,1 -m -Var=cellVoltage_047_invalidFlag bit 8,1 -m -Var=cellVoltage_044 unsigned 12,13 -m /u:mV -Var=cellVoltage_045 unsigned 25,13 -m /u:mV -Var=cellVoltage_046 unsigned 38,13 -m /u:mV -Var=cellVoltage_047 unsigned 51,13 -m /u:mV - -[foxBMS_CellVoltages] +CycleTime=4500 -p +Mux=CellTemperatures_084_089 0,8 0Eh -m +Var=CellTemperature_084_invalidFlag bit 15,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_085_invalidFlag bit 14,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_086_invalidFlag bit 13,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_087_invalidFlag bit 12,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_088_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_089_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_084 signed 16,8 -m /u:degC // Temperature of cell 84 +Var=CellTemperature_085 signed 24,8 -m /u:degC // Temperature of cell 85 +Var=CellTemperature_086 signed 32,8 -m /u:degC // Temperature of cell 86 +Var=CellTemperature_087 signed 40,8 -m /u:degC // Temperature of cell 87 +Var=CellTemperature_088 signed 48,8 -m /u:degC // Temperature of cell 88 +Var=CellTemperature_089 signed 56,8 -m /u:degC // Temperature of cell 89 + +[f_CellTemperatures] Len=8 -CycleTime=5400 -p -Mux=mux_cellVoltage_048_051 0,8 0Ch -m -Var=cellVoltage_048_invalidFlag bit 11,1 -m -Var=cellVoltage_049_invalidFlag bit 10,1 -m -Var=cellVoltage_050_invalidFlag bit 9,1 -m -Var=cellVoltage_051_invalidFlag bit 8,1 -m -Var=cellVoltage_048 unsigned 12,13 -m /u:mV -Var=cellVoltage_049 unsigned 25,13 -m /u:mV -Var=cellVoltage_050 unsigned 38,13 -m /u:mV -Var=cellVoltage_051 unsigned 51,13 -m /u:mV - -[foxBMS_CellVoltages] +CycleTime=4500 -p +Mux=CellTemperatures_090_095 0,8 0Fh -m +Var=CellTemperature_090_invalidFlag bit 15,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_091_invalidFlag bit 14,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_092_invalidFlag bit 13,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_093_invalidFlag bit 12,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_094_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_095_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_090 signed 16,8 -m /u:degC // Temperature of cell 90 +Var=CellTemperature_091 signed 24,8 -m /u:degC // Temperature of cell 91 +Var=CellTemperature_092 signed 32,8 -m /u:degC // Temperature of cell 92 +Var=CellTemperature_093 signed 40,8 -m /u:degC // Temperature of cell 93 +Var=CellTemperature_094 signed 48,8 -m /u:degC // Temperature of cell 94 +Var=CellTemperature_095 signed 56,8 -m /u:degC // Temperature of cell 95 + +[f_CellTemperatures] Len=8 -CycleTime=5400 -p -Mux=mux_cellVoltage_052_055 0,8 0Dh -m -Var=cellVoltage_052_invalidFlag bit 11,1 -m -Var=cellVoltage_053_invalidFlag bit 10,1 -m -Var=cellVoltage_054_invalidFlag bit 9,1 -m -Var=cellVoltage_055_invalidFlag bit 8,1 -m -Var=cellVoltage_052 unsigned 12,13 -m /u:mV -Var=cellVoltage_053 unsigned 25,13 -m /u:mV -Var=cellVoltage_054 unsigned 38,13 -m /u:mV -Var=cellVoltage_055 unsigned 51,13 -m /u:mV - -[foxBMS_CellVoltages] +CycleTime=4500 -p +Mux=CellTemperatures_096_101 0,8 10h -m +Var=CellTemperature_096_invalidFlag bit 15,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_097_invalidFlag bit 14,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_098_invalidFlag bit 13,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_099_invalidFlag bit 12,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_100_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_101_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_096 signed 16,8 -m /u:degC // Temperature of cell 96 +Var=CellTemperature_097 signed 24,8 -m /u:degC // Temperature of cell 97 +Var=CellTemperature_098 signed 32,8 -m /u:degC // Temperature of cell 98 +Var=CellTemperature_099 signed 40,8 -m /u:degC // Temperature of cell 99 +Var=CellTemperature_100 signed 48,8 -m /u:degC // Temperature of cell 100 +Var=CellTemperature_101 signed 56,8 -m /u:degC // Temperature of cell 101 + +[f_CellTemperatures] Len=8 -CycleTime=5400 -p -Mux=mux_cellVoltage_056_059 0,8 0Eh -m -Var=cellVoltage_056_invalidFlag bit 11,1 -m -Var=cellVoltage_057_invalidFlag bit 10,1 -m -Var=cellVoltage_058_invalidFlag bit 9,1 -m -Var=cellVoltage_059_invalidFlag bit 8,1 -m -Var=cellVoltage_056 unsigned 12,13 -m /u:mV -Var=cellVoltage_057 unsigned 25,13 -m /u:mV -Var=cellVoltage_058 unsigned 38,13 -m /u:mV -Var=cellVoltage_059 unsigned 51,13 -m /u:mV - -[foxBMS_CellVoltages] +CycleTime=4500 -p +Mux=CellTemperatures_102_107 0,8 11h -m +Var=CellTemperature_102_invalidFlag bit 15,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_103_invalidFlag bit 14,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_104_invalidFlag bit 13,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_105_invalidFlag bit 12,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_106_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_107_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_102 signed 16,8 -m /u:degC // Temperature of cell 102 +Var=CellTemperature_103 signed 24,8 -m /u:degC // Temperature of cell 103 +Var=CellTemperature_104 signed 32,8 -m /u:degC // Temperature of cell 104 +Var=CellTemperature_105 signed 40,8 -m /u:degC // Temperature of cell 105 +Var=CellTemperature_106 signed 48,8 -m /u:degC // Temperature of cell 106 +Var=CellTemperature_107 signed 56,8 -m /u:degC // Temperature of cell 107 + +[f_CellTemperatures] Len=8 -CycleTime=5400 -p -Mux=mux_cellVoltage_060_063 0,8 0Fh -m -Var=cellVoltage_060_invalidFlag bit 11,1 -m -Var=cellVoltage_061_invalidFlag bit 10,1 -m -Var=cellVoltage_062_invalidFlag bit 9,1 -m -Var=cellVoltage_063_invalidFlag bit 8,1 -m -Var=cellVoltage_060 unsigned 12,13 -m /u:mV -Var=cellVoltage_061 unsigned 25,13 -m /u:mV -Var=cellVoltage_062 unsigned 38,13 -m /u:mV -Var=cellVoltage_063 unsigned 51,13 -m /u:mV - -[foxBMS_CellVoltages] +CycleTime=4500 -p +Mux=CellTemperatures_108_113 0,8 12h -m +Var=CellTemperature_108_invalidFlag bit 15,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_109_invalidFlag bit 14,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_110_invalidFlag bit 13,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_111_invalidFlag bit 12,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_112_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_113_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_108 signed 16,8 -m /u:degC // Temperature of cell 108 +Var=CellTemperature_109 signed 24,8 -m /u:degC // Temperature of cell 109 +Var=CellTemperature_110 signed 32,8 -m /u:degC // Temperature of cell 110 +Var=CellTemperature_111 signed 40,8 -m /u:degC // Temperature of cell 111 +Var=CellTemperature_112 signed 48,8 -m /u:degC // Temperature of cell 112 +Var=CellTemperature_113 signed 56,8 -m /u:degC // Temperature of cell 113 + +[f_CellTemperatures] Len=8 -CycleTime=5400 -p -Mux=mux_cellVoltage_064_067 0,8 10h -m -Var=cellVoltage_064_invalidFlag bit 11,1 -m -Var=cellVoltage_065_invalidFlag bit 10,1 -m -Var=cellVoltage_066_invalidFlag bit 9,1 -m -Var=cellVoltage_067_invalidFlag bit 8,1 -m -Var=cellVoltage_064 unsigned 12,13 -m /u:mV -Var=cellVoltage_065 unsigned 25,13 -m /u:mV -Var=cellVoltage_066 unsigned 38,13 -m /u:mV -Var=cellVoltage_067 unsigned 51,13 -m /u:mV - -[foxBMS_CellVoltages] +CycleTime=4500 -p +Mux=CellTemperatures_114_119 0,8 13h -m +Var=CellTemperature_114_invalidFlag bit 15,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_115_invalidFlag bit 14,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_116_invalidFlag bit 13,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_117_invalidFlag bit 12,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_118_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_119_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_114 signed 16,8 -m /u:degC // Temperature of cell 114 +Var=CellTemperature_115 signed 24,8 -m /u:degC // Temperature of cell 115 +Var=CellTemperature_116 signed 32,8 -m /u:degC // Temperature of cell 116 +Var=CellTemperature_117 signed 40,8 -m /u:degC // Temperature of cell 117 +Var=CellTemperature_118 signed 48,8 -m /u:degC // Temperature of cell 118 +Var=CellTemperature_119 signed 56,8 -m /u:degC // Temperature of cell 119 + +[f_CellTemperatures] +Len=8 +CycleTime=4500 -p +Mux=CellTemperatures_120_125 0,8 14h -m +Var=CellTemperature_120_invalidFlag bit 15,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_121_invalidFlag bit 14,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_122_invalidFlag bit 13,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_123_invalidFlag bit 12,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_124_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_125_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_120 signed 16,8 -m /u:degC // Temperature of cell 120 +Var=CellTemperature_121 signed 24,8 -m /u:degC // Temperature of cell 121 +Var=CellTemperature_122 signed 32,8 -m /u:degC // Temperature of cell 122 +Var=CellTemperature_123 signed 40,8 -m /u:degC // Temperature of cell 123 +Var=CellTemperature_124 signed 48,8 -m /u:degC // Temperature of cell 124 +Var=CellTemperature_125 signed 56,8 -m /u:degC // Temperature of cell 125 + +[f_CellTemperatures] +Len=8 +CycleTime=4500 -p +Mux=CellTemperatures_126_131 0,8 15h -m +Var=CellTemperature_126_invalidFlag bit 15,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_127_invalidFlag bit 14,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_128_invalidFlag bit 13,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_129_invalidFlag bit 12,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_130_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_131_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_126 signed 16,8 -m /u:degC // Temperature of cell 126 +Var=CellTemperature_127 signed 24,8 -m /u:degC // Temperature of cell 127 +Var=CellTemperature_128 signed 32,8 -m /u:degC // Temperature of cell 128 +Var=CellTemperature_129 signed 40,8 -m /u:degC // Temperature of cell 129 +Var=CellTemperature_130 signed 48,8 -m /u:degC // Temperature of cell 130 +Var=CellTemperature_131 signed 56,8 -m /u:degC // Temperature of cell 131 + +[f_CellTemperatures] +Len=8 +CycleTime=4500 -p +Mux=CellTemperatures_132_137 0,8 16h -m +Var=CellTemperature_132_invalidFlag bit 15,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_133_invalidFlag bit 14,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_134_invalidFlag bit 13,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_135_invalidFlag bit 12,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_136_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_137_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_132 signed 16,8 -m /u:degC // Temperature of cell 132 +Var=CellTemperature_133 signed 24,8 -m /u:degC // Temperature of cell 133 +Var=CellTemperature_134 signed 32,8 -m /u:degC // Temperature of cell 134 +Var=CellTemperature_135 signed 40,8 -m /u:degC // Temperature of cell 135 +Var=CellTemperature_136 signed 48,8 -m /u:degC // Temperature of cell 136 +Var=CellTemperature_137 signed 56,8 -m /u:degC // Temperature of cell 137 + +[f_CellTemperatures] +Len=8 +CycleTime=4500 -p +Mux=CellTemperatures_138_143 0,8 17h -m +Var=CellTemperature_138_invalidFlag bit 15,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_139_invalidFlag bit 14,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_140_invalidFlag bit 13,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_141_invalidFlag bit 12,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_142_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_143_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_138 signed 16,8 -m /u:degC // Temperature of cell 138 +Var=CellTemperature_139 signed 24,8 -m /u:degC // Temperature of cell 139 +Var=CellTemperature_140 signed 32,8 -m /u:degC // Temperature of cell 140 +Var=CellTemperature_141 signed 40,8 -m /u:degC // Temperature of cell 141 +Var=CellTemperature_142 signed 48,8 -m /u:degC // Temperature of cell 142 +Var=CellTemperature_143 signed 56,8 -m /u:degC // Temperature of cell 143 + +[f_CellTemperatures] +Len=8 +CycleTime=4500 -p +Mux=CellTemperatures_144_149 0,8 18h -m +Var=CellTemperature_144_invalidFlag bit 15,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_145_invalidFlag bit 14,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_146_invalidFlag bit 13,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_147_invalidFlag bit 12,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_148_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_149_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_144 signed 16,8 -m /u:degC // Temperature of cell 144 +Var=CellTemperature_145 signed 24,8 -m /u:degC // Temperature of cell 145 +Var=CellTemperature_146 signed 32,8 -m /u:degC // Temperature of cell 146 +Var=CellTemperature_147 signed 40,8 -m /u:degC // Temperature of cell 147 +Var=CellTemperature_148 signed 48,8 -m /u:degC // Temperature of cell 148 +Var=CellTemperature_149 signed 56,8 -m /u:degC // Temperature of cell 149 + +[f_CellTemperatures] +Len=8 +CycleTime=4500 -p +Mux=CellTemperatures_150_155 0,8 19h -m +Var=CellTemperature_150_invalidFlag bit 15,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_151_invalidFlag bit 14,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_152_invalidFlag bit 13,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_153_invalidFlag bit 12,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_154_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_155_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_150 signed 16,8 -m /u:degC // Temperature of cell 150 +Var=CellTemperature_151 signed 24,8 -m /u:degC // Temperature of cell 151 +Var=CellTemperature_152 signed 32,8 -m /u:degC // Temperature of cell 152 +Var=CellTemperature_153 signed 40,8 -m /u:degC // Temperature of cell 153 +Var=CellTemperature_154 signed 48,8 -m /u:degC // Temperature of cell 154 +Var=CellTemperature_155 signed 56,8 -m /u:degC // Temperature of cell 155 + +[f_CellTemperatures] +Len=8 +CycleTime=4500 -p +Mux=CellTemperatures_156_161 0,8 1Ah -m +Var=CellTemperature_156_invalidFlag bit 15,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_157_invalidFlag bit 14,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_158_invalidFlag bit 13,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_159_invalidFlag bit 12,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_160_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_161_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_156 signed 16,8 -m /u:degC // Temperature of cell 156 +Var=CellTemperature_157 signed 24,8 -m /u:degC // Temperature of cell 157 +Var=CellTemperature_158 signed 32,8 -m /u:degC // Temperature of cell 158 +Var=CellTemperature_159 signed 40,8 -m /u:degC // Temperature of cell 159 +Var=CellTemperature_160 signed 48,8 -m /u:degC // Temperature of cell 160 +Var=CellTemperature_161 signed 56,8 -m /u:degC // Temperature of cell 161 + +[f_CellTemperatures] +Len=8 +CycleTime=4500 -p +Mux=CellTemperatures_162_167 0,8 1Bh -m +Var=CellTemperature_162_invalidFlag bit 15,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_163_invalidFlag bit 14,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_164_invalidFlag bit 13,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_165_invalidFlag bit 12,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_166_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_167_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_162 signed 16,8 -m /u:degC // Temperature of cell 162 +Var=CellTemperature_163 signed 24,8 -m /u:degC // Temperature of cell 163 +Var=CellTemperature_164 signed 32,8 -m /u:degC // Temperature of cell 164 +Var=CellTemperature_165 signed 40,8 -m /u:degC // Temperature of cell 165 +Var=CellTemperature_166 signed 48,8 -m /u:degC // Temperature of cell 166 +Var=CellTemperature_167 signed 56,8 -m /u:degC // Temperature of cell 167 + +[f_CellTemperatures] +Len=8 +CycleTime=4500 -p +Mux=CellTemperatures_168_173 0,8 1Ch -m +Var=CellTemperature_168_invalidFlag bit 15,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_169_invalidFlag bit 14,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_170_invalidFlag bit 13,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_171_invalidFlag bit 12,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_172_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_173_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_168 signed 16,8 -m /u:degC // Temperature of cell 168 +Var=CellTemperature_169 signed 24,8 -m /u:degC // Temperature of cell 169 +Var=CellTemperature_170 signed 32,8 -m /u:degC // Temperature of cell 170 +Var=CellTemperature_171 signed 40,8 -m /u:degC // Temperature of cell 171 +Var=CellTemperature_172 signed 48,8 -m /u:degC // Temperature of cell 172 +Var=CellTemperature_173 signed 56,8 -m /u:degC // Temperature of cell 173 + +[f_CellTemperatures] +Len=8 +CycleTime=4500 -p +Mux=CellTemperatures_174_179 0,8 1Dh -m +Var=CellTemperature_174_invalidFlag bit 15,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_175_invalidFlag bit 14,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_176_invalidFlag bit 13,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_177_invalidFlag bit 12,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_178_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_179_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellTemperature_174 signed 16,8 -m /u:degC // Temperature of cell 174 +Var=CellTemperature_175 signed 24,8 -m /u:degC // Temperature of cell 175 +Var=CellTemperature_176 signed 32,8 -m /u:degC // Temperature of cell 176 +Var=CellTemperature_177 signed 40,8 -m /u:degC // Temperature of cell 177 +Var=CellTemperature_178 signed 48,8 -m /u:degC // Temperature of cell 178 +Var=CellTemperature_179 signed 56,8 -m /u:degC // Temperature of cell 179 + +[f_CellVoltages] +ID=250h // Cell voltage measurement data (in:can_cbs_tx_cell-voltages.c:CANTX_CellVoltages, fv:tx) Len=8 CycleTime=5400 -p -Mux=mux_cellVoltage_068_071 0,8 11h -m -Var=cellVoltage_068_invalidFlag bit 11,1 -m -Var=cellVoltage_069_invalidFlag bit 10,1 -m -Var=cellVoltage_070_invalidFlag bit 9,1 -m -Var=cellVoltage_071_invalidFlag bit 8,1 -m -Var=cellVoltage_068 unsigned 12,13 -m /u:mV -Var=cellVoltage_069 unsigned 25,13 -m /u:mV -Var=cellVoltage_070 unsigned 38,13 -m /u:mV -Var=cellVoltage_071 unsigned 51,13 -m /u:mV - -[foxBMS_CellVoltages] +Mux=CellVoltages_000_003 0,8 0 -m +Var=CellVoltage_000_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_001_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_002_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_003_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_000 unsigned 12,13 -m /u:mV // Voltage of cell 0 +Var=CellVoltage_001 unsigned 25,13 -m /u:mV // Voltage of cell 1 +Var=CellVoltage_002 unsigned 38,13 -m /u:mV // Voltage of cell 2 +Var=CellVoltage_003 unsigned 51,13 -m /u:mV // Voltage of cell 3 + +[f_CellVoltages] Len=8 CycleTime=5400 -p -Mux=mux_cellVoltage_072_075 0,8 12h -m -Var=cellVoltage_072_invalidFlag bit 11,1 -m -Var=cellVoltage_073_invalidFlag bit 10,1 -m -Var=cellVoltage_074_invalidFlag bit 9,1 -m -Var=cellVoltage_075_invalidFlag bit 8,1 -m -Var=cellVoltage_072 unsigned 12,13 -m /u:mV -Var=cellVoltage_073 unsigned 25,13 -m /u:mV -Var=cellVoltage_074 unsigned 38,13 -m /u:mV -Var=cellVoltage_075 unsigned 51,13 -m /u:mV - -[foxBMS_CellVoltages] +Mux=CellVoltages_004_007 0,8 1 -m +Var=CellVoltage_004_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_005_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_006_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_007_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_004 unsigned 12,13 -m /u:mV // Voltage of cell 4 +Var=CellVoltage_005 unsigned 25,13 -m /u:mV // Voltage of cell 5 +Var=CellVoltage_006 unsigned 38,13 -m /u:mV // Voltage of cell 6 +Var=CellVoltage_007 unsigned 51,13 -m /u:mV // Voltage of cell 7 + +[f_CellVoltages] Len=8 CycleTime=5400 -p -Mux=mux_cellVoltage_076_079 0,8 13h -m -Var=cellVoltage_076_invalidFlag bit 11,1 -m -Var=cellVoltage_077_invalidFlag bit 10,1 -m -Var=cellVoltage_078_invalidFlag bit 9,1 -m -Var=cellVoltage_079_invalidFlag bit 8,1 -m -Var=cellVoltage_076 unsigned 12,13 -m /u:mV -Var=cellVoltage_077 unsigned 25,13 -m /u:mV -Var=cellVoltage_078 unsigned 38,13 -m /u:mV -Var=cellVoltage_079 unsigned 51,13 -m /u:mV - -[foxBMS_CellVoltages] +Mux=CellVoltages_008_011 0,8 2 -m +Var=CellVoltage_008_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_009_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_010_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_011_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_008 unsigned 12,13 -m /u:mV // Voltage of cell 8 +Var=CellVoltage_009 unsigned 25,13 -m /u:mV // Voltage of cell 9 +Var=CellVoltage_010 unsigned 38,13 -m /u:mV // Voltage of cell 10 +Var=CellVoltage_011 unsigned 51,13 -m /u:mV // Voltage of cell 11 + +[f_CellVoltages] Len=8 CycleTime=5400 -p -Mux=mux_cellVoltage_080_083 0,8 14h -m -Var=cellVoltage_080_invalidFlag bit 11,1 -m -Var=cellVoltage_081_invalidFlag bit 10,1 -m -Var=cellVoltage_082_invalidFlag bit 9,1 -m -Var=cellVoltage_083_invalidFlag bit 8,1 -m -Var=cellVoltage_080 unsigned 12,13 -m /u:mV -Var=cellVoltage_081 unsigned 25,13 -m /u:mV -Var=cellVoltage_082 unsigned 38,13 -m /u:mV -Var=cellVoltage_083 unsigned 51,13 -m /u:mV - -[foxBMS_CellVoltages] +Mux=CellVoltages_012_015 0,8 3 -m +Var=CellVoltage_012_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_013_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_014_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_015_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_012 unsigned 12,13 -m /u:mV // Voltage of cell 12 +Var=CellVoltage_013 unsigned 25,13 -m /u:mV // Voltage of cell 13 +Var=CellVoltage_014 unsigned 38,13 -m /u:mV // Voltage of cell 14 +Var=CellVoltage_015 unsigned 51,13 -m /u:mV // Voltage of cell 15 + +[f_CellVoltages] Len=8 CycleTime=5400 -p -Mux=mux_cellVoltage_084_087 0,8 15h -m -Var=cellVoltage_084_invalidFlag bit 11,1 -m -Var=cellVoltage_085_invalidFlag bit 10,1 -m -Var=cellVoltage_086_invalidFlag bit 9,1 -m -Var=cellVoltage_087_invalidFlag bit 8,1 -m -Var=cellVoltage_084 unsigned 12,13 -m /u:mV -Var=cellVoltage_085 unsigned 25,13 -m /u:mV -Var=cellVoltage_086 unsigned 38,13 -m /u:mV -Var=cellVoltage_087 unsigned 51,13 -m /u:mV - -[foxBMS_CellVoltages] +Mux=CellVoltages_016_019 0,8 4 -m +Var=CellVoltage_016_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_017_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_018_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_019_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_016 unsigned 12,13 -m /u:mV // Voltage of cell 16 +Var=CellVoltage_017 unsigned 25,13 -m /u:mV // Voltage of cell 17 +Var=CellVoltage_018 unsigned 38,13 -m /u:mV // Voltage of cell 18 +Var=CellVoltage_019 unsigned 51,13 -m /u:mV // Voltage of cell 19 + +[f_CellVoltages] Len=8 CycleTime=5400 -p -Mux=mux_cellVoltage_088_091 0,8 16h -m -Var=cellVoltage_088_invalidFlag bit 11,1 -m -Var=cellVoltage_089_invalidFlag bit 10,1 -m -Var=cellVoltage_090_invalidFlag bit 9,1 -m -Var=cellVoltage_091_invalidFlag bit 8,1 -m -Var=cellVoltage_088 unsigned 12,13 -m /u:mV -Var=cellVoltage_089 unsigned 25,13 -m /u:mV -Var=cellVoltage_090 unsigned 38,13 -m /u:mV -Var=cellVoltage_091 unsigned 51,13 -m /u:mV - -[foxBMS_CellVoltages] +Mux=CellVoltages_020_023 0,8 5 -m +Var=CellVoltage_020_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_021_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_022_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_023_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_020 unsigned 12,13 -m /u:mV // Voltage of cell 20 +Var=CellVoltage_021 unsigned 25,13 -m /u:mV // Voltage of cell 21 +Var=CellVoltage_022 unsigned 38,13 -m /u:mV // Voltage of cell 22 +Var=CellVoltage_023 unsigned 51,13 -m /u:mV // Voltage of cell 23 + +[f_CellVoltages] Len=8 CycleTime=5400 -p -Mux=mux_cellVoltage_092_095 0,8 17h -m -Var=cellVoltage_092_invalidFlag bit 11,1 -m -Var=cellVoltage_093_invalidFlag bit 10,1 -m -Var=cellVoltage_094_invalidFlag bit 9,1 -m -Var=cellVoltage_095_invalidFlag bit 8,1 -m -Var=cellVoltage_092 unsigned 12,13 -m /u:mV -Var=cellVoltage_093 unsigned 25,13 -m /u:mV -Var=cellVoltage_094 unsigned 38,13 -m /u:mV -Var=cellVoltage_095 unsigned 51,13 -m /u:mV - -[foxBMS_CellVoltages] +Mux=CellVoltages_024_027 0,8 6 -m +Var=CellVoltage_024_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_025_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_026_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_027_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_024 unsigned 12,13 -m /u:mV // Voltage of cell 24 +Var=CellVoltage_025 unsigned 25,13 -m /u:mV // Voltage of cell 25 +Var=CellVoltage_026 unsigned 38,13 -m /u:mV // Voltage of cell 26 +Var=CellVoltage_027 unsigned 51,13 -m /u:mV // Voltage of cell 27 + +[f_CellVoltages] Len=8 CycleTime=5400 -p -Mux=mux_cellVoltage_096_099 0,8 18h -m -Var=cellVoltage_096_invalidFlag bit 11,1 -m -Var=cellVoltage_097_invalidFlag bit 10,1 -m -Var=cellVoltage_098_invalidFlag bit 9,1 -m -Var=cellVoltage_099_invalidFlag bit 8,1 -m -Var=cellVoltage_096 unsigned 12,13 -m /u:mV -Var=cellVoltage_097 unsigned 25,13 -m /u:mV -Var=cellVoltage_098 unsigned 38,13 -m /u:mV -Var=cellVoltage_099 unsigned 51,13 -m /u:mV - -[foxBMS_CellVoltages] +Mux=CellVoltages_028_031 0,8 7 -m +Var=CellVoltage_028_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_029_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_030_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_031_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_028 unsigned 12,13 -m /u:mV // Voltage of cell 28 +Var=CellVoltage_029 unsigned 25,13 -m /u:mV // Voltage of cell 29 +Var=CellVoltage_030 unsigned 38,13 -m /u:mV // Voltage of cell 30 +Var=CellVoltage_031 unsigned 51,13 -m /u:mV // Voltage of cell 31 + +[f_CellVoltages] Len=8 CycleTime=5400 -p -Mux=mux_cellVoltage_100_103 0,8 19h -m -Var=cellVoltage_100_invalidFlag bit 11,1 -m -Var=cellVoltage_101_invalidFlag bit 10,1 -m -Var=cellVoltage_102_invalidFlag bit 9,1 -m -Var=cellVoltage_103_invalidFlag bit 8,1 -m -Var=cellVoltage_100 unsigned 12,13 -m /u:mV -Var=cellVoltage_101 unsigned 25,13 -m /u:mV -Var=cellVoltage_102 unsigned 38,13 -m /u:mV -Var=cellVoltage_103 unsigned 51,13 -m /u:mV - -[foxBMS_CellVoltages] +Mux=CellVoltages_032_035 0,8 8 -m +Var=CellVoltage_032_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_033_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_034_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_035_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_032 unsigned 12,13 -m /u:mV // Voltage of cell 32 +Var=CellVoltage_033 unsigned 25,13 -m /u:mV // Voltage of cell 33 +Var=CellVoltage_034 unsigned 38,13 -m /u:mV // Voltage of cell 34 +Var=CellVoltage_035 unsigned 51,13 -m /u:mV // Voltage of cell 35 + +[f_CellVoltages] Len=8 CycleTime=5400 -p -Mux=mux_cellVoltage_104_107 0,8 1Ah -m -Var=cellVoltage_104_invalidFlag bit 11,1 -m -Var=cellVoltage_105_invalidFlag bit 10,1 -m -Var=cellVoltage_106_invalidFlag bit 9,1 -m -Var=cellVoltage_107_invalidFlag bit 8,1 -m -Var=cellVoltage_104 unsigned 12,13 -m /u:mV -Var=cellVoltage_105 unsigned 25,13 -m /u:mV -Var=cellVoltage_106 unsigned 38,13 -m /u:mV -Var=cellVoltage_107 unsigned 51,13 -m /u:mV - -[foxBMS_CellVoltages] +Mux=CellVoltages_036_039 0,8 9 -m +Var=CellVoltage_036_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_037_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_038_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_039_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_036 unsigned 12,13 -m /u:mV // Voltage of cell 36 +Var=CellVoltage_037 unsigned 25,13 -m /u:mV // Voltage of cell 37 +Var=CellVoltage_038 unsigned 38,13 -m /u:mV // Voltage of cell 38 +Var=CellVoltage_039 unsigned 51,13 -m /u:mV // Voltage of cell 39 + +[f_CellVoltages] Len=8 CycleTime=5400 -p -Mux=mux_cellVoltage_108_111 0,8 1Bh -m -Var=cellVoltage_108_invalidFlag bit 11,1 -m -Var=cellVoltage_109_invalidFlag bit 10,1 -m -Var=cellVoltage_110_invalidFlag bit 9,1 -m -Var=cellVoltage_111_invalidFlag bit 8,1 -m -Var=cellVoltage_108 unsigned 12,13 -m /u:mV -Var=cellVoltage_109 unsigned 25,13 -m /u:mV -Var=cellVoltage_110 unsigned 38,13 -m /u:mV -Var=cellVoltage_111 unsigned 51,13 -m /u:mV - -[foxBMS_CellVoltages] +Mux=CellVoltages_040_043 0,8 0Ah -m +Var=CellVoltage_040_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_041_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_042_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_043_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_040 unsigned 12,13 -m /u:mV // Voltage of cell 40 +Var=CellVoltage_041 unsigned 25,13 -m /u:mV // Voltage of cell 41 +Var=CellVoltage_042 unsigned 38,13 -m /u:mV // Voltage of cell 42 +Var=CellVoltage_043 unsigned 51,13 -m /u:mV // Voltage of cell 43 + +[f_CellVoltages] Len=8 CycleTime=5400 -p -Mux=mux_cellVoltage_112_115 0,8 1Ch -m -Var=cellVoltage_112_invalidFlag bit 11,1 -m -Var=cellVoltage_113_invalidFlag bit 10,1 -m -Var=cellVoltage_114_invalidFlag bit 9,1 -m -Var=cellVoltage_115_invalidFlag bit 8,1 -m -Var=cellVoltage_112 unsigned 12,13 -m /u:mV -Var=cellVoltage_113 unsigned 25,13 -m /u:mV -Var=cellVoltage_114 unsigned 38,13 -m /u:mV -Var=cellVoltage_115 unsigned 51,13 -m /u:mV - -[foxBMS_CellVoltages] +Mux=CellVoltages_044_047 0,8 0Bh -m +Var=CellVoltage_044_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_045_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_046_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_047_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_044 unsigned 12,13 -m /u:mV // Voltage of cell 44 +Var=CellVoltage_045 unsigned 25,13 -m /u:mV // Voltage of cell 45 +Var=CellVoltage_046 unsigned 38,13 -m /u:mV // Voltage of cell 46 +Var=CellVoltage_047 unsigned 51,13 -m /u:mV // Voltage of cell 47 + +[f_CellVoltages] Len=8 CycleTime=5400 -p -Mux=mux_cellVoltage_116_119 0,8 1Dh -m -Var=cellVoltage_116_invalidFlag bit 11,1 -m -Var=cellVoltage_117_invalidFlag bit 10,1 -m -Var=cellVoltage_118_invalidFlag bit 9,1 -m -Var=cellVoltage_119_invalidFlag bit 8,1 -m -Var=cellVoltage_116 unsigned 12,13 -m /u:mV -Var=cellVoltage_117 unsigned 25,13 -m /u:mV -Var=cellVoltage_118 unsigned 38,13 -m /u:mV -Var=cellVoltage_119 unsigned 51,13 -m /u:mV - -[foxBMS_CellVoltages] +Mux=CellVoltages_048_051 0,8 0Ch -m +Var=CellVoltage_048_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_049_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_050_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_051_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_048 unsigned 12,13 -m /u:mV // Voltage of cell 48 +Var=CellVoltage_049 unsigned 25,13 -m /u:mV // Voltage of cell 49 +Var=CellVoltage_050 unsigned 38,13 -m /u:mV // Voltage of cell 50 +Var=CellVoltage_051 unsigned 51,13 -m /u:mV // Voltage of cell 51 + +[f_CellVoltages] Len=8 CycleTime=5400 -p -Mux=mux_cellVoltage_120_123 0,8 1Eh -m -Var=cellVoltage_120_invalidFlag bit 11,1 -m -Var=cellVoltage_121_invalidFlag bit 10,1 -m -Var=cellVoltage_122_invalidFlag bit 9,1 -m -Var=cellVoltage_123_invalidFlag bit 8,1 -m -Var=cellVoltage_120 unsigned 12,13 -m /u:mV -Var=cellVoltage_121 unsigned 25,13 -m /u:mV -Var=cellVoltage_122 unsigned 38,13 -m /u:mV -Var=cellVoltage_123 unsigned 51,13 -m /u:mV - -[foxBMS_CellVoltages] +Mux=CellVoltages_052_055 0,8 0Dh -m +Var=CellVoltage_052_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_053_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_054_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_055_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_052 unsigned 12,13 -m /u:mV // Voltage of cell 52 +Var=CellVoltage_053 unsigned 25,13 -m /u:mV // Voltage of cell 53 +Var=CellVoltage_054 unsigned 38,13 -m /u:mV // Voltage of cell 54 +Var=CellVoltage_055 unsigned 51,13 -m /u:mV // Voltage of cell 55 + +[f_CellVoltages] Len=8 CycleTime=5400 -p -Mux=mux_cellVoltage_124_127 0,8 1Fh -m -Var=cellVoltage_124_invalidFlag bit 11,1 -m -Var=cellVoltage_125_invalidFlag bit 10,1 -m -Var=cellVoltage_126_invalidFlag bit 9,1 -m -Var=cellVoltage_127_invalidFlag bit 8,1 -m -Var=cellVoltage_124 unsigned 12,13 -m /u:mV -Var=cellVoltage_125 unsigned 25,13 -m /u:mV -Var=cellVoltage_126 unsigned 38,13 -m /u:mV -Var=cellVoltage_127 unsigned 51,13 -m /u:mV - -[foxBMS_CellVoltages] +Mux=CellVoltages_056_059 0,8 0Eh -m +Var=CellVoltage_056_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_057_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_058_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_059_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_056 unsigned 12,13 -m /u:mV // Voltage of cell 56 +Var=CellVoltage_057 unsigned 25,13 -m /u:mV // Voltage of cell 57 +Var=CellVoltage_058 unsigned 38,13 -m /u:mV // Voltage of cell 58 +Var=CellVoltage_059 unsigned 51,13 -m /u:mV // Voltage of cell 59 + +[f_CellVoltages] Len=8 CycleTime=5400 -p -Mux=mux_cellVoltage_128_131 0,8 20h -m -Var=cellVoltage_128_invalidFlag bit 11,1 -m -Var=cellVoltage_129_invalidFlag bit 10,1 -m -Var=cellVoltage_130_invalidFlag bit 9,1 -m -Var=cellVoltage_131_invalidFlag bit 8,1 -m -Var=cellVoltage_128 unsigned 12,13 -m /u:mV -Var=cellVoltage_129 unsigned 25,13 -m /u:mV -Var=cellVoltage_130 unsigned 38,13 -m /u:mV -Var=cellVoltage_131 unsigned 51,13 -m /u:mV - -[foxBMS_CellVoltages] +Mux=CellVoltages_060_063 0,8 0Fh -m +Var=CellVoltage_060_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_061_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_062_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_063_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_060 unsigned 12,13 -m /u:mV // Voltage of cell 60 +Var=CellVoltage_061 unsigned 25,13 -m /u:mV // Voltage of cell 61 +Var=CellVoltage_062 unsigned 38,13 -m /u:mV // Voltage of cell 62 +Var=CellVoltage_063 unsigned 51,13 -m /u:mV // Voltage of cell 63 + +[f_CellVoltages] Len=8 CycleTime=5400 -p -Mux=mux_cellVoltage_132_135 0,8 21h -m -Var=cellVoltage_132_invalidFlag bit 11,1 -m -Var=cellVoltage_133_invalidFlag bit 10,1 -m -Var=cellVoltage_134_invalidFlag bit 9,1 -m -Var=cellVoltage_135_invalidFlag bit 8,1 -m -Var=cellVoltage_132 unsigned 12,13 -m /u:mV -Var=cellVoltage_133 unsigned 25,13 -m /u:mV -Var=cellVoltage_134 unsigned 38,13 -m /u:mV -Var=cellVoltage_135 unsigned 51,13 -m /u:mV - -[foxBMS_CellVoltages] +Mux=CellVoltages_064_067 0,8 10h -m +Var=CellVoltage_064_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_065_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_066_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_067_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_064 unsigned 12,13 -m /u:mV // Voltage of cell 64 +Var=CellVoltage_065 unsigned 25,13 -m /u:mV // Voltage of cell 65 +Var=CellVoltage_066 unsigned 38,13 -m /u:mV // Voltage of cell 66 +Var=CellVoltage_067 unsigned 51,13 -m /u:mV // Voltage of cell 67 + +[f_CellVoltages] Len=8 CycleTime=5400 -p -Mux=mux_cellVoltage_136_139 0,8 22h -m -Var=cellVoltage_136_invalidFlag bit 11,1 -m -Var=cellVoltage_137_invalidFlag bit 10,1 -m -Var=cellVoltage_138_invalidFlag bit 9,1 -m -Var=cellVoltage_139_invalidFlag bit 8,1 -m -Var=cellVoltage_136 unsigned 12,13 -m /u:mV -Var=cellVoltage_137 unsigned 25,13 -m /u:mV -Var=cellVoltage_138 unsigned 38,13 -m /u:mV -Var=cellVoltage_139 unsigned 51,13 -m /u:mV - -[foxBMS_CellVoltages] +Mux=CellVoltages_068_071 0,8 11h -m +Var=CellVoltage_068_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_069_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_070_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_071_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_068 unsigned 12,13 -m /u:mV // Voltage of cell 68 +Var=CellVoltage_069 unsigned 25,13 -m /u:mV // Voltage of cell 69 +Var=CellVoltage_070 unsigned 38,13 -m /u:mV // Voltage of cell 70 +Var=CellVoltage_071 unsigned 51,13 -m /u:mV // Voltage of cell 71 + +[f_CellVoltages] Len=8 CycleTime=5400 -p -Mux=mux_cellVoltage_140_143 0,8 23h -m -Var=cellVoltage_140_invalidFlag bit 11,1 -m -Var=cellVoltage_141_invalidFlag bit 10,1 -m -Var=cellVoltage_142_invalidFlag bit 9,1 -m -Var=cellVoltage_143_invalidFlag bit 8,1 -m -Var=cellVoltage_140 unsigned 12,13 -m /u:mV -Var=cellVoltage_141 unsigned 25,13 -m /u:mV -Var=cellVoltage_142 unsigned 38,13 -m /u:mV -Var=cellVoltage_143 unsigned 51,13 -m /u:mV - -[foxBMS_CellVoltages] +Mux=CellVoltages_072_075 0,8 12h -m +Var=CellVoltage_072_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_073_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_074_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_075_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_072 unsigned 12,13 -m /u:mV // Voltage of cell 72 +Var=CellVoltage_073 unsigned 25,13 -m /u:mV // Voltage of cell 73 +Var=CellVoltage_074 unsigned 38,13 -m /u:mV // Voltage of cell 74 +Var=CellVoltage_075 unsigned 51,13 -m /u:mV // Voltage of cell 75 + +[f_CellVoltages] Len=8 CycleTime=5400 -p -Mux=mux_cellVoltage_144_147 0,8 24h -m -Var=cellVoltage_144_invalidFlag bit 11,1 -m -Var=cellVoltage_145_invalidFlag bit 10,1 -m -Var=cellVoltage_146_invalidFlag bit 9,1 -m -Var=cellVoltage_147_invalidFlag bit 8,1 -m -Var=cellVoltage_144 unsigned 12,13 -m /u:mV -Var=cellVoltage_145 unsigned 25,13 -m /u:mV -Var=cellVoltage_146 unsigned 38,13 -m /u:mV -Var=cellVoltage_147 unsigned 51,13 -m /u:mV - -[foxBMS_CellVoltages] +Mux=CellVoltages_076_079 0,8 13h -m +Var=CellVoltage_076_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_077_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_078_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_079_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_076 unsigned 12,13 -m /u:mV // Voltage of cell 76 +Var=CellVoltage_077 unsigned 25,13 -m /u:mV // Voltage of cell 77 +Var=CellVoltage_078 unsigned 38,13 -m /u:mV // Voltage of cell 78 +Var=CellVoltage_079 unsigned 51,13 -m /u:mV // Voltage of cell 79 + +[f_CellVoltages] Len=8 CycleTime=5400 -p -Mux=mux_cellVoltage_148_151 0,8 25h -m -Var=cellVoltage_148_invalidFlag bit 11,1 -m -Var=cellVoltage_149_invalidFlag bit 10,1 -m -Var=cellVoltage_150_invalidFlag bit 9,1 -m -Var=cellVoltage_151_invalidFlag bit 8,1 -m -Var=cellVoltage_148 unsigned 12,13 -m /u:mV -Var=cellVoltage_149 unsigned 25,13 -m /u:mV -Var=cellVoltage_150 unsigned 38,13 -m /u:mV -Var=cellVoltage_151 unsigned 51,13 -m /u:mV - -[foxBMS_CellVoltages] +Mux=CellVoltages_080_083 0,8 14h -m +Var=CellVoltage_080_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_081_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_082_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_083_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_080 unsigned 12,13 -m /u:mV // Voltage of cell 80 +Var=CellVoltage_081 unsigned 25,13 -m /u:mV // Voltage of cell 81 +Var=CellVoltage_082 unsigned 38,13 -m /u:mV // Voltage of cell 82 +Var=CellVoltage_083 unsigned 51,13 -m /u:mV // Voltage of cell 83 + +[f_CellVoltages] Len=8 CycleTime=5400 -p -Mux=mux_cellVoltage_152_155 0,8 26h -m -Var=cellVoltage_152_invalidFlag bit 11,1 -m -Var=cellVoltage_153_invalidFlag bit 10,1 -m -Var=cellVoltage_154_invalidFlag bit 9,1 -m -Var=cellVoltage_155_invalidFlag bit 8,1 -m -Var=cellVoltage_152 unsigned 12,13 -m /u:mV -Var=cellVoltage_153 unsigned 25,13 -m /u:mV -Var=cellVoltage_154 unsigned 38,13 -m /u:mV -Var=cellVoltage_155 unsigned 51,13 -m /u:mV - -[foxBMS_CellVoltages] +Mux=CellVoltages_084_087 0,8 15h -m +Var=CellVoltage_084_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_085_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_086_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_087_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_084 unsigned 12,13 -m /u:mV // Voltage of cell 84 +Var=CellVoltage_085 unsigned 25,13 -m /u:mV // Voltage of cell 85 +Var=CellVoltage_086 unsigned 38,13 -m /u:mV // Voltage of cell 86 +Var=CellVoltage_087 unsigned 51,13 -m /u:mV // Voltage of cell 87 + +[f_CellVoltages] Len=8 CycleTime=5400 -p -Mux=mux_cellVoltage_156_159 0,8 27h -m -Var=cellVoltage_156_invalidFlag bit 11,1 -m -Var=cellVoltage_157_invalidFlag bit 10,1 -m -Var=cellVoltage_158_invalidFlag bit 9,1 -m -Var=cellVoltage_159_invalidFlag bit 8,1 -m -Var=cellVoltage_156 unsigned 12,13 -m /u:mV -Var=cellVoltage_157 unsigned 25,13 -m /u:mV -Var=cellVoltage_158 unsigned 38,13 -m /u:mV -Var=cellVoltage_159 unsigned 51,13 -m /u:mV - -[foxBMS_CellVoltages] +Mux=CellVoltages_088_091 0,8 16h -m +Var=CellVoltage_088_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_089_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_090_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_091_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_088 unsigned 12,13 -m /u:mV // Voltage of cell 88 +Var=CellVoltage_089 unsigned 25,13 -m /u:mV // Voltage of cell 89 +Var=CellVoltage_090 unsigned 38,13 -m /u:mV // Voltage of cell 90 +Var=CellVoltage_091 unsigned 51,13 -m /u:mV // Voltage of cell 91 + +[f_CellVoltages] Len=8 CycleTime=5400 -p -Mux=mux_cellVoltage_160_163 0,8 28h -m -Var=cellVoltage_160_invalidFlag bit 11,1 -m -Var=cellVoltage_161_invalidFlag bit 10,1 -m -Var=cellVoltage_162_invalidFlag bit 9,1 -m -Var=cellVoltage_163_invalidFlag bit 8,1 -m -Var=cellVoltage_160 unsigned 12,13 -m /u:mV -Var=cellVoltage_161 unsigned 25,13 -m /u:mV -Var=cellVoltage_162 unsigned 38,13 -m /u:mV -Var=cellVoltage_163 unsigned 51,13 -m /u:mV - -[foxBMS_CellVoltages] +Mux=CellVoltages_092_095 0,8 17h -m +Var=CellVoltage_092_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_093_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_094_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_095_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_092 unsigned 12,13 -m /u:mV // Voltage of cell 92 +Var=CellVoltage_093 unsigned 25,13 -m /u:mV // Voltage of cell 93 +Var=CellVoltage_094 unsigned 38,13 -m /u:mV // Voltage of cell 94 +Var=CellVoltage_095 unsigned 51,13 -m /u:mV // Voltage of cell 95 + +[f_CellVoltages] Len=8 CycleTime=5400 -p -Mux=mux_cellVoltage_164_167 0,8 29h -m -Var=cellVoltage_164_invalidFlag bit 11,1 -m -Var=cellVoltage_165_invalidFlag bit 10,1 -m -Var=cellVoltage_166_invalidFlag bit 9,1 -m -Var=cellVoltage_167_invalidFlag bit 8,1 -m -Var=cellVoltage_164 unsigned 12,13 -m /u:mV -Var=cellVoltage_165 unsigned 25,13 -m /u:mV -Var=cellVoltage_166 unsigned 38,13 -m /u:mV -Var=cellVoltage_167 unsigned 51,13 -m /u:mV - -[foxBMS_CellVoltages] +Mux=CellVoltages_096_099 0,8 18h -m +Var=CellVoltage_096_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_097_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_098_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_099_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_096 unsigned 12,13 -m /u:mV // Voltage of cell 96 +Var=CellVoltage_097 unsigned 25,13 -m /u:mV // Voltage of cell 97 +Var=CellVoltage_098 unsigned 38,13 -m /u:mV // Voltage of cell 98 +Var=CellVoltage_099 unsigned 51,13 -m /u:mV // Voltage of cell 99 + +[f_CellVoltages] Len=8 CycleTime=5400 -p -Mux=mux_cellVoltage_168_171 0,8 2Ah -m -Var=cellVoltage_168_invalidFlag bit 11,1 -m -Var=cellVoltage_169_invalidFlag bit 10,1 -m -Var=cellVoltage_170_invalidFlag bit 9,1 -m -Var=cellVoltage_171_invalidFlag bit 8,1 -m -Var=cellVoltage_168 unsigned 12,13 -m /u:mV -Var=cellVoltage_169 unsigned 25,13 -m /u:mV -Var=cellVoltage_170 unsigned 38,13 -m /u:mV -Var=cellVoltage_171 unsigned 51,13 -m /u:mV - -[foxBMS_CellVoltages] +Mux=CellVoltages_100_103 0,8 19h -m +Var=CellVoltage_100_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_101_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_102_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_103_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_100 unsigned 12,13 -m /u:mV // Voltage of cell 100 +Var=CellVoltage_101 unsigned 25,13 -m /u:mV // Voltage of cell 101 +Var=CellVoltage_102 unsigned 38,13 -m /u:mV // Voltage of cell 102 +Var=CellVoltage_103 unsigned 51,13 -m /u:mV // Voltage of cell 103 + +[f_CellVoltages] Len=8 CycleTime=5400 -p -Mux=mux_cellVoltage_172_175 0,8 2Bh -m -Var=cellVoltage_172_invalidFlag bit 11,1 -m -Var=cellVoltage_173_invalidFlag bit 10,1 -m -Var=cellVoltage_174_invalidFlag bit 9,1 -m -Var=cellVoltage_175_invalidFlag bit 8,1 -m -Var=cellVoltage_172 unsigned 12,13 -m /u:mV -Var=cellVoltage_173 unsigned 25,13 -m /u:mV -Var=cellVoltage_174 unsigned 38,13 -m /u:mV -Var=cellVoltage_175 unsigned 51,13 -m /u:mV - -[foxBMS_CellVoltages] +Mux=CellVoltages_104_107 0,8 1Ah -m +Var=CellVoltage_104_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_105_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_106_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_107_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_104 unsigned 12,13 -m /u:mV // Voltage of cell 104 +Var=CellVoltage_105 unsigned 25,13 -m /u:mV // Voltage of cell 105 +Var=CellVoltage_106 unsigned 38,13 -m /u:mV // Voltage of cell 106 +Var=CellVoltage_107 unsigned 51,13 -m /u:mV // Voltage of cell 107 + +[f_CellVoltages] Len=8 CycleTime=5400 -p -Mux=mux_cellVoltage_176_179 0,8 2Ch -m -Var=cellVoltage_176_invalidFlag bit 11,1 -m -Var=cellVoltage_177_invalidFlag bit 10,1 -m -Var=cellVoltage_178_invalidFlag bit 9,1 -m -Var=cellVoltage_179_invalidFlag bit 8,1 -m -Var=cellVoltage_176 unsigned 12,13 -m /u:mV -Var=cellVoltage_177 unsigned 25,13 -m /u:mV -Var=cellVoltage_178 unsigned 38,13 -m /u:mV -Var=cellVoltage_179 unsigned 51,13 -m /u:mV - -[foxBMS_CellVoltages] +Mux=CellVoltages_108_111 0,8 1Bh -m +Var=CellVoltage_108_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_109_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_110_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_111_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_108 unsigned 12,13 -m /u:mV // Voltage of cell 108 +Var=CellVoltage_109 unsigned 25,13 -m /u:mV // Voltage of cell 109 +Var=CellVoltage_110 unsigned 38,13 -m /u:mV // Voltage of cell 110 +Var=CellVoltage_111 unsigned 51,13 -m /u:mV // Voltage of cell 111 + +[f_CellVoltages] Len=8 CycleTime=5400 -p -Mux=mux_cellVoltage_180_183 0,8 2Dh -m -Var=cellVoltage_180_invalidFlag bit 11,1 -m -Var=cellVoltage_181_invalidFlag bit 10,1 -m -Var=cellVoltage_182_invalidFlag bit 9,1 -m -Var=cellVoltage_183_invalidFlag bit 8,1 -m -Var=cellVoltage_180 unsigned 12,13 -m /u:mV -Var=cellVoltage_181 unsigned 25,13 -m /u:mV -Var=cellVoltage_182 unsigned 38,13 -m /u:mV -Var=cellVoltage_183 unsigned 51,13 -m /u:mV - -[foxBMS_CellVoltages] +Mux=CellVoltages_112_115 0,8 1Ch -m +Var=CellVoltage_112_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_113_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_114_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_115_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_112 unsigned 12,13 -m /u:mV // Voltage of cell 112 +Var=CellVoltage_113 unsigned 25,13 -m /u:mV // Voltage of cell 113 +Var=CellVoltage_114 unsigned 38,13 -m /u:mV // Voltage of cell 114 +Var=CellVoltage_115 unsigned 51,13 -m /u:mV // Voltage of cell 115 + +[f_CellVoltages] Len=8 CycleTime=5400 -p -Mux=mux_cellVoltage_184_187 0,8 2Eh -m -Var=cellVoltage_184_invalidFlag bit 11,1 -m -Var=cellVoltage_185_invalidFlag bit 10,1 -m -Var=cellVoltage_186_invalidFlag bit 9,1 -m -Var=cellVoltage_187_invalidFlag bit 8,1 -m -Var=cellVoltage_184 unsigned 12,13 -m /u:mV -Var=cellVoltage_185 unsigned 25,13 -m /u:mV -Var=cellVoltage_186 unsigned 38,13 -m /u:mV -Var=cellVoltage_187 unsigned 51,13 -m /u:mV - -[foxBMS_CellVoltages] +Mux=CellVoltages_116_119 0,8 1Dh -m +Var=CellVoltage_116_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_117_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_118_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_119_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_116 unsigned 12,13 -m /u:mV // Voltage of cell 116 +Var=CellVoltage_117 unsigned 25,13 -m /u:mV // Voltage of cell 117 +Var=CellVoltage_118 unsigned 38,13 -m /u:mV // Voltage of cell 118 +Var=CellVoltage_119 unsigned 51,13 -m /u:mV // Voltage of cell 119 + +[f_CellVoltages] Len=8 CycleTime=5400 -p -Mux=mux_cellVoltage_188_191 0,8 2Fh -m -Var=cellVoltage_188_invalidFlag bit 11,1 -m -Var=cellVoltage_189_invalidFlag bit 10,1 -m -Var=cellVoltage_190_invalidFlag bit 9,1 -m -Var=cellVoltage_191_invalidFlag bit 8,1 -m -Var=cellVoltage_188 unsigned 12,13 -m /u:mV -Var=cellVoltage_189 unsigned 25,13 -m /u:mV -Var=cellVoltage_190 unsigned 38,13 -m /u:mV -Var=cellVoltage_191 unsigned 51,13 -m /u:mV - -[foxBMS_CellVoltages] +Mux=CellVoltages_120_123 0,8 1Eh -m +Var=CellVoltage_120_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_121_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_122_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_123_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_120 unsigned 12,13 -m /u:mV // Voltage of cell 120 +Var=CellVoltage_121 unsigned 25,13 -m /u:mV // Voltage of cell 121 +Var=CellVoltage_122 unsigned 38,13 -m /u:mV // Voltage of cell 122 +Var=CellVoltage_123 unsigned 51,13 -m /u:mV // Voltage of cell 123 + +[f_CellVoltages] Len=8 CycleTime=5400 -p -Mux=mux_cellVoltage_192_195 0,8 30h -m -Var=cellVoltage_192_invalidFlag bit 11,1 -m -Var=cellVoltage_193_invalidFlag bit 10,1 -m -Var=cellVoltage_194_invalidFlag bit 9,1 -m -Var=cellVoltage_195_invalidFlag bit 8,1 -m -Var=cellVoltage_192 unsigned 12,13 -m /u:mV -Var=cellVoltage_193 unsigned 25,13 -m /u:mV -Var=cellVoltage_194 unsigned 38,13 -m /u:mV -Var=cellVoltage_195 unsigned 51,13 -m /u:mV - -[foxBMS_CellVoltages] +Mux=CellVoltages_124_127 0,8 1Fh -m +Var=CellVoltage_124_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_125_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_126_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_127_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_124 unsigned 12,13 -m /u:mV // Voltage of cell 124 +Var=CellVoltage_125 unsigned 25,13 -m /u:mV // Voltage of cell 125 +Var=CellVoltage_126 unsigned 38,13 -m /u:mV // Voltage of cell 126 +Var=CellVoltage_127 unsigned 51,13 -m /u:mV // Voltage of cell 127 + +[f_CellVoltages] Len=8 CycleTime=5400 -p -Mux=mux_cellVoltage_196_199 0,8 31h -m -Var=cellVoltage_196_invalidFlag bit 11,1 -m -Var=cellVoltage_197_invalidFlag bit 10,1 -m -Var=cellVoltage_198_invalidFlag bit 9,1 -m -Var=cellVoltage_199_invalidFlag bit 8,1 -m -Var=cellVoltage_196 unsigned 12,13 -m /u:mV -Var=cellVoltage_197 unsigned 25,13 -m /u:mV -Var=cellVoltage_198 unsigned 38,13 -m /u:mV -Var=cellVoltage_199 unsigned 51,13 -m /u:mV - -[foxBMS_CellVoltages] +Mux=CellVoltages_128_131 0,8 20h -m +Var=CellVoltage_128_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_129_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_130_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_131_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_128 unsigned 12,13 -m /u:mV // Voltage of cell 128 +Var=CellVoltage_129 unsigned 25,13 -m /u:mV // Voltage of cell 129 +Var=CellVoltage_130 unsigned 38,13 -m /u:mV // Voltage of cell 130 +Var=CellVoltage_131 unsigned 51,13 -m /u:mV // Voltage of cell 131 + +[f_CellVoltages] Len=8 CycleTime=5400 -p -Mux=mux_cellVoltage_200_203 0,8 32h -m -Var=cellVoltage_200_invalidFlag bit 11,1 -m -Var=cellVoltage_201_invalidFlag bit 10,1 -m -Var=cellVoltage_202_invalidFlag bit 9,1 -m -Var=cellVoltage_203_invalidFlag bit 8,1 -m -Var=cellVoltage_200 unsigned 12,13 -m /u:mV -Var=cellVoltage_201 unsigned 25,13 -m /u:mV -Var=cellVoltage_202 unsigned 38,13 -m /u:mV -Var=cellVoltage_203 unsigned 51,13 -m /u:mV - -[foxBMS_CellVoltages] +Mux=CellVoltages_132_135 0,8 21h -m +Var=CellVoltage_132_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_133_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_134_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_135_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_132 unsigned 12,13 -m /u:mV // Voltage of cell 132 +Var=CellVoltage_133 unsigned 25,13 -m /u:mV // Voltage of cell 133 +Var=CellVoltage_134 unsigned 38,13 -m /u:mV // Voltage of cell 134 +Var=CellVoltage_135 unsigned 51,13 -m /u:mV // Voltage of cell 135 + +[f_CellVoltages] Len=8 CycleTime=5400 -p -Mux=mux_cellVoltage_204_207 0,8 33h -m -Var=cellVoltage_204_invalidFlag bit 11,1 -m -Var=cellVoltage_205_invalidFlag bit 10,1 -m -Var=cellVoltage_206_invalidFlag bit 9,1 -m -Var=cellVoltage_207_invalidFlag bit 8,1 -m -Var=cellVoltage_204 unsigned 12,13 -m /u:mV -Var=cellVoltage_205 unsigned 25,13 -m /u:mV -Var=cellVoltage_206 unsigned 38,13 -m /u:mV -Var=cellVoltage_207 unsigned 51,13 -m /u:mV - -[foxBMS_CellVoltages] +Mux=CellVoltages_136_139 0,8 22h -m +Var=CellVoltage_136_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_137_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_138_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_139_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_136 unsigned 12,13 -m /u:mV // Voltage of cell 136 +Var=CellVoltage_137 unsigned 25,13 -m /u:mV // Voltage of cell 137 +Var=CellVoltage_138 unsigned 38,13 -m /u:mV // Voltage of cell 138 +Var=CellVoltage_139 unsigned 51,13 -m /u:mV // Voltage of cell 139 + +[f_CellVoltages] Len=8 CycleTime=5400 -p -Mux=mux_cellVoltage_208_211 0,8 34h -m -Var=cellVoltage_208_invalidFlag bit 11,1 -m -Var=cellVoltage_209_invalidFlag bit 10,1 -m -Var=cellVoltage_210_invalidFlag bit 9,1 -m -Var=cellVoltage_211_invalidFlag bit 8,1 -m -Var=cellVoltage_208 unsigned 12,13 -m /u:mV -Var=cellVoltage_209 unsigned 25,13 -m /u:mV -Var=cellVoltage_210 unsigned 38,13 -m /u:mV -Var=cellVoltage_211 unsigned 51,13 -m /u:mV - -[foxBMS_CellVoltages] +Mux=CellVoltages_140_143 0,8 23h -m +Var=CellVoltage_140_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_141_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_142_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_143_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_140 unsigned 12,13 -m /u:mV // Voltage of cell 140 +Var=CellVoltage_141 unsigned 25,13 -m /u:mV // Voltage of cell 141 +Var=CellVoltage_142 unsigned 38,13 -m /u:mV // Voltage of cell 142 +Var=CellVoltage_143 unsigned 51,13 -m /u:mV // Voltage of cell 143 + +[f_CellVoltages] Len=8 CycleTime=5400 -p -Mux=mux_cellVoltage_212_215 0,8 35h -m -Var=cellVoltage_212_invalidFlag bit 11,1 -m -Var=cellVoltage_213_invalidFlag bit 10,1 -m -Var=cellVoltage_214_invalidFlag bit 9,1 -m -Var=cellVoltage_215_invalidFlag bit 8,1 -m -Var=cellVoltage_212 unsigned 12,13 -m /u:mV -Var=cellVoltage_213 unsigned 25,13 -m /u:mV -Var=cellVoltage_214 unsigned 38,13 -m /u:mV -Var=cellVoltage_215 unsigned 51,13 -m /u:mV - -[foxBMS_CellTemperatures] -ID=250h // (in:can_cbs_tx_cell-temperatures.c:CANTX_CellTemperatures, fv:tx) +Mux=CellVoltages_144_147 0,8 24h -m +Var=CellVoltage_144_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_145_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_146_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_147_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_144 unsigned 12,13 -m /u:mV // Voltage of cell 144 +Var=CellVoltage_145 unsigned 25,13 -m /u:mV // Voltage of cell 145 +Var=CellVoltage_146 unsigned 38,13 -m /u:mV // Voltage of cell 146 +Var=CellVoltage_147 unsigned 51,13 -m /u:mV // Voltage of cell 147 + +[f_CellVoltages] Len=8 -CycleTime=4500 -p -Mux=mux_cellTemperature_000_005 0,8 0 -m -Var=cellTemperature_000_invalidFlag bit 15,1 -m -Var=cellTemperature_001_invalidFlag bit 14,1 -m -Var=cellTemperature_002_invalidFlag bit 13,1 -m -Var=cellTemperature_003_invalidFlag bit 12,1 -m -Var=cellTemperature_004_invalidFlag bit 11,1 -m -Var=cellTemperature_005_invalidFlag bit 10,1 -m -Var=cellTemperature_000 signed 16,8 -m /u:degC -Var=cellTemperature_001 signed 24,8 -m /u:degC -Var=cellTemperature_002 signed 32,8 -m /u:degC -Var=cellTemperature_003 signed 40,8 -m /u:degC -Var=cellTemperature_004 signed 48,8 -m /u:degC -Var=cellTemperature_005 signed 56,8 -m /u:degC - -[foxBMS_CellTemperatures] +CycleTime=5400 -p +Mux=CellVoltages_148_151 0,8 25h -m +Var=CellVoltage_148_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_149_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_150_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_151_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_148 unsigned 12,13 -m /u:mV // Voltage of cell 148 +Var=CellVoltage_149 unsigned 25,13 -m /u:mV // Voltage of cell 149 +Var=CellVoltage_150 unsigned 38,13 -m /u:mV // Voltage of cell 150 +Var=CellVoltage_151 unsigned 51,13 -m /u:mV // Voltage of cell 151 + +[f_CellVoltages] Len=8 -CycleTime=4500 -p -Mux=mux_cellTemperature_006_011 0,8 1 -m -Var=cellTemperature_006_invalidFlag bit 15,1 -m -Var=cellTemperature_007_invalidFlag bit 14,1 -m -Var=cellTemperature_008_invalidFlag bit 13,1 -m -Var=cellTemperature_009_invalidFlag bit 12,1 -m -Var=cellTemperature_010_invalidFlag bit 11,1 -m -Var=cellTemperature_011_invalidFlag bit 10,1 -m -Var=cellTemperature_006 signed 16,8 -m /u:degC -Var=cellTemperature_007 signed 24,8 -m /u:degC -Var=cellTemperature_008 signed 32,8 -m /u:degC -Var=cellTemperature_009 signed 40,8 -m /u:degC -Var=cellTemperature_010 signed 48,8 -m /u:degC -Var=cellTemperature_011 signed 56,8 -m /u:degC - -[foxBMS_CellTemperatures] +CycleTime=5400 -p +Mux=CellVoltages_152_155 0,8 26h -m +Var=CellVoltage_152_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_153_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_154_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_155_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_152 unsigned 12,13 -m /u:mV // Voltage of cell 152 +Var=CellVoltage_153 unsigned 25,13 -m /u:mV // Voltage of cell 153 +Var=CellVoltage_154 unsigned 38,13 -m /u:mV // Voltage of cell 154 +Var=CellVoltage_155 unsigned 51,13 -m /u:mV // Voltage of cell 155 + +[f_CellVoltages] Len=8 -CycleTime=4500 -p -Mux=mux_cellTemperature_012_017 0,8 2 -m -Var=cellTemperature_012_invalidFlag bit 15,1 -m -Var=cellTemperature_013_invalidFlag bit 14,1 -m -Var=cellTemperature_014_invalidFlag bit 13,1 -m -Var=cellTemperature_015_invalidFlag bit 12,1 -m -Var=cellTemperature_016_invalidFlag bit 11,1 -m -Var=cellTemperature_017_invalidFlag bit 10,1 -m -Var=cellTemperature_012 signed 16,8 -m /u:degC -Var=cellTemperature_013 signed 24,8 -m /u:degC -Var=cellTemperature_014 signed 32,8 -m /u:degC -Var=cellTemperature_015 signed 40,8 -m /u:degC -Var=cellTemperature_016 signed 48,8 -m /u:degC -Var=cellTemperature_017 signed 56,8 -m /u:degC - -[foxBMS_CellTemperatures] +CycleTime=5400 -p +Mux=CellVoltages_156_159 0,8 27h -m +Var=CellVoltage_156_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_157_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_158_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_159_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_156 unsigned 12,13 -m /u:mV // Voltage of cell 156 +Var=CellVoltage_157 unsigned 25,13 -m /u:mV // Voltage of cell 157 +Var=CellVoltage_158 unsigned 38,13 -m /u:mV // Voltage of cell 158 +Var=CellVoltage_159 unsigned 51,13 -m /u:mV // Voltage of cell 159 + +[f_CellVoltages] Len=8 -CycleTime=4500 -p -Mux=mux_cellTemperature_018_023 0,8 3 -m -Var=cellTemperature_018_invalidFlag bit 15,1 -m -Var=cellTemperature_019_invalidFlag bit 14,1 -m -Var=cellTemperature_020_invalidFlag bit 13,1 -m -Var=cellTemperature_021_invalidFlag bit 12,1 -m -Var=cellTemperature_022_invalidFlag bit 11,1 -m -Var=cellTemperature_023_invalidFlag bit 10,1 -m -Var=cellTemperature_018 signed 16,8 -m /u:degC -Var=cellTemperature_019 signed 24,8 -m /u:degC -Var=cellTemperature_020 signed 32,8 -m /u:degC -Var=cellTemperature_021 signed 40,8 -m /u:degC -Var=cellTemperature_022 signed 48,8 -m /u:degC -Var=cellTemperature_023 signed 56,8 -m /u:degC - -[foxBMS_CellTemperatures] +CycleTime=5400 -p +Mux=CellVoltages_160_163 0,8 28h -m +Var=CellVoltage_160_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_161_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_162_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_163_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_160 unsigned 12,13 -m /u:mV // Voltage of cell 160 +Var=CellVoltage_161 unsigned 25,13 -m /u:mV // Voltage of cell 161 +Var=CellVoltage_162 unsigned 38,13 -m /u:mV // Voltage of cell 162 +Var=CellVoltage_163 unsigned 51,13 -m /u:mV // Voltage of cell 163 + +[f_CellVoltages] Len=8 -CycleTime=4500 -p -Mux=mux_cellTemperature_024_029 0,8 4 -m -Var=cellTemperature_024_invalidFlag bit 15,1 -m -Var=cellTemperature_025_invalidFlag bit 14,1 -m -Var=cellTemperature_026_invalidFlag bit 13,1 -m -Var=cellTemperature_027_invalidFlag bit 12,1 -m -Var=cellTemperature_028_invalidFlag bit 11,1 -m -Var=cellTemperature_029_invalidFlag bit 10,1 -m -Var=cellTemperature_024 signed 16,8 -m /u:degC -Var=cellTemperature_025 signed 24,8 -m /u:degC -Var=cellTemperature_026 signed 32,8 -m /u:degC -Var=cellTemperature_027 signed 40,8 -m /u:degC -Var=cellTemperature_028 signed 48,8 -m /u:degC -Var=cellTemperature_029 signed 56,8 -m /u:degC - -[foxBMS_CellTemperatures] +CycleTime=5400 -p +Mux=CellVoltages_164_167 0,8 29h -m +Var=CellVoltage_164_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_165_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_166_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_167_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_164 unsigned 12,13 -m /u:mV // Voltage of cell 164 +Var=CellVoltage_165 unsigned 25,13 -m /u:mV // Voltage of cell 165 +Var=CellVoltage_166 unsigned 38,13 -m /u:mV // Voltage of cell 166 +Var=CellVoltage_167 unsigned 51,13 -m /u:mV // Voltage of cell 167 + +[f_CellVoltages] Len=8 -CycleTime=4500 -p -Mux=mux_cellTemperature_030_035 0,8 5 -m -Var=cellTemperature_030_invalidFlag bit 15,1 -m -Var=cellTemperature_031_invalidFlag bit 14,1 -m -Var=cellTemperature_032_invalidFlag bit 13,1 -m -Var=cellTemperature_033_invalidFlag bit 12,1 -m -Var=cellTemperature_034_invalidFlag bit 11,1 -m -Var=cellTemperature_035_invalidFlag bit 10,1 -m -Var=cellTemperature_030 signed 16,8 -m /u:degC -Var=cellTemperature_031 signed 24,8 -m /u:degC -Var=cellTemperature_032 signed 32,8 -m /u:degC -Var=cellTemperature_033 signed 40,8 -m /u:degC -Var=cellTemperature_034 signed 48,8 -m /u:degC -Var=cellTemperature_035 signed 56,8 -m /u:degC - -[foxBMS_CellTemperatures] +CycleTime=5400 -p +Mux=CellVoltages_168_171 0,8 2Ah -m +Var=CellVoltage_168_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_169_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_170_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_171_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_168 unsigned 12,13 -m /u:mV // Voltage of cell 168 +Var=CellVoltage_169 unsigned 25,13 -m /u:mV // Voltage of cell 169 +Var=CellVoltage_170 unsigned 38,13 -m /u:mV // Voltage of cell 170 +Var=CellVoltage_171 unsigned 51,13 -m /u:mV // Voltage of cell 171 + +[f_CellVoltages] Len=8 -CycleTime=4500 -p -Mux=mux_cellTemperature_036_041 0,8 6 -m -Var=cellTemperature_036_invalidFlag bit 15,1 -m -Var=cellTemperature_037_invalidFlag bit 14,1 -m -Var=cellTemperature_038_invalidFlag bit 13,1 -m -Var=cellTemperature_039_invalidFlag bit 12,1 -m -Var=cellTemperature_040_invalidFlag bit 11,1 -m -Var=cellTemperature_041_invalidFlag bit 10,1 -m -Var=cellTemperature_036 signed 16,8 -m /u:degC -Var=cellTemperature_037 signed 24,8 -m /u:degC -Var=cellTemperature_038 signed 32,8 -m /u:degC -Var=cellTemperature_039 signed 40,8 -m /u:degC -Var=cellTemperature_040 signed 48,8 -m /u:degC -Var=cellTemperature_041 signed 56,8 -m /u:degC - -[foxBMS_CellTemperatures] +CycleTime=5400 -p +Mux=CellVoltages_172_175 0,8 2Bh -m +Var=CellVoltage_172_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_173_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_174_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_175_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_172 unsigned 12,13 -m /u:mV // Voltage of cell 172 +Var=CellVoltage_173 unsigned 25,13 -m /u:mV // Voltage of cell 173 +Var=CellVoltage_174 unsigned 38,13 -m /u:mV // Voltage of cell 174 +Var=CellVoltage_175 unsigned 51,13 -m /u:mV // Voltage of cell 175 + +[f_CellVoltages] Len=8 -CycleTime=4500 -p -Mux=mux_cellTemperature_042_047 0,8 7 -m -Var=cellTemperature_042_invalidFlag bit 15,1 -m -Var=cellTemperature_043_invalidFlag bit 14,1 -m -Var=cellTemperature_044_invalidFlag bit 13,1 -m -Var=cellTemperature_045_invalidFlag bit 12,1 -m -Var=cellTemperature_046_invalidFlag bit 11,1 -m -Var=cellTemperature_047_invalidFlag bit 10,1 -m -Var=cellTemperature_042 signed 16,8 -m /u:degC -Var=cellTemperature_043 signed 24,8 -m /u:degC -Var=cellTemperature_044 signed 32,8 -m /u:degC -Var=cellTemperature_045 signed 40,8 -m /u:degC -Var=cellTemperature_046 signed 48,8 -m /u:degC -Var=cellTemperature_047 signed 56,8 -m /u:degC - -[foxBMS_CellTemperatures] +CycleTime=5400 -p +Mux=CellVoltages_176_179 0,8 2Ch -m +Var=CellVoltage_176_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_177_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_178_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_179_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_176 unsigned 12,13 -m /u:mV // Voltage of cell 176 +Var=CellVoltage_177 unsigned 25,13 -m /u:mV // Voltage of cell 177 +Var=CellVoltage_178 unsigned 38,13 -m /u:mV // Voltage of cell 178 +Var=CellVoltage_179 unsigned 51,13 -m /u:mV // Voltage of cell 179 + +[f_CellVoltages] Len=8 -CycleTime=4500 -p -Mux=mux_cellTemperature_048_053 0,8 8 -m -Var=cellTemperature_048_invalidFlag bit 15,1 -m -Var=cellTemperature_049_invalidFlag bit 14,1 -m -Var=cellTemperature_050_invalidFlag bit 13,1 -m -Var=cellTemperature_051_invalidFlag bit 12,1 -m -Var=cellTemperature_052_invalidFlag bit 11,1 -m -Var=cellTemperature_053_invalidFlag bit 10,1 -m -Var=cellTemperature_048 signed 16,8 -m /u:degC -Var=cellTemperature_049 signed 24,8 -m /u:degC -Var=cellTemperature_050 signed 32,8 -m /u:degC -Var=cellTemperature_051 signed 40,8 -m /u:degC -Var=cellTemperature_052 signed 48,8 -m /u:degC -Var=cellTemperature_053 signed 56,8 -m /u:degC - -[foxBMS_CellTemperatures] +CycleTime=5400 -p +Mux=CellVoltages_180_183 0,8 2Dh -m +Var=CellVoltage_180_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_181_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_182_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_183_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_180 unsigned 12,13 -m /u:mV // Voltage of cell 180 +Var=CellVoltage_181 unsigned 25,13 -m /u:mV // Voltage of cell 181 +Var=CellVoltage_182 unsigned 38,13 -m /u:mV // Voltage of cell 182 +Var=CellVoltage_183 unsigned 51,13 -m /u:mV // Voltage of cell 183 + +[f_CellVoltages] Len=8 -CycleTime=4500 -p -Mux=mux_cellTemperature_054_059 0,8 9 -m -Var=cellTemperature_054_invalidFlag bit 15,1 -m -Var=cellTemperature_055_invalidFlag bit 14,1 -m -Var=cellTemperature_056_invalidFlag bit 13,1 -m -Var=cellTemperature_057_invalidFlag bit 12,1 -m -Var=cellTemperature_058_invalidFlag bit 11,1 -m -Var=cellTemperature_059_invalidFlag bit 10,1 -m -Var=cellTemperature_054 signed 16,8 -m /u:degC -Var=cellTemperature_055 signed 24,8 -m /u:degC -Var=cellTemperature_056 signed 32,8 -m /u:degC -Var=cellTemperature_057 signed 40,8 -m /u:degC -Var=cellTemperature_058 signed 48,8 -m /u:degC -Var=cellTemperature_059 signed 56,8 -m /u:degC - -[foxBMS_CellTemperatures] +CycleTime=5400 -p +Mux=CellVoltages_184_187 0,8 2Eh -m +Var=CellVoltage_184_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_185_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_186_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_187_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_184 unsigned 12,13 -m /u:mV // Voltage of cell 184 +Var=CellVoltage_185 unsigned 25,13 -m /u:mV // Voltage of cell 185 +Var=CellVoltage_186 unsigned 38,13 -m /u:mV // Voltage of cell 186 +Var=CellVoltage_187 unsigned 51,13 -m /u:mV // Voltage of cell 187 + +[f_CellVoltages] Len=8 -CycleTime=4500 -p -Mux=mux_cellTemperature_060_065 0,8 0Ah -m -Var=cellTemperature_060_invalidFlag bit 15,1 -m -Var=cellTemperature_061_invalidFlag bit 14,1 -m -Var=cellTemperature_062_invalidFlag bit 13,1 -m -Var=cellTemperature_063_invalidFlag bit 12,1 -m -Var=cellTemperature_064_invalidFlag bit 11,1 -m -Var=cellTemperature_065_invalidFlag bit 10,1 -m -Var=cellTemperature_060 signed 16,8 -m /u:degC -Var=cellTemperature_061 signed 24,8 -m /u:degC -Var=cellTemperature_062 signed 32,8 -m /u:degC -Var=cellTemperature_063 signed 40,8 -m /u:degC -Var=cellTemperature_064 signed 48,8 -m /u:degC -Var=cellTemperature_065 signed 56,8 -m /u:degC - -[foxBMS_CellTemperatures] +CycleTime=5400 -p +Mux=CellVoltages_188_191 0,8 2Fh -m +Var=CellVoltage_188_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_189_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_190_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_191_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_188 unsigned 12,13 -m /u:mV // Voltage of cell 188 +Var=CellVoltage_189 unsigned 25,13 -m /u:mV // Voltage of cell 189 +Var=CellVoltage_190 unsigned 38,13 -m /u:mV // Voltage of cell 190 +Var=CellVoltage_191 unsigned 51,13 -m /u:mV // Voltage of cell 191 + +[f_CellVoltages] Len=8 -CycleTime=4500 -p -Mux=mux_cellTemperature_066_071 0,8 0Bh -m -Var=cellTemperature_066_invalidFlag bit 15,1 -m -Var=cellTemperature_067_invalidFlag bit 14,1 -m -Var=cellTemperature_068_invalidFlag bit 13,1 -m -Var=cellTemperature_069_invalidFlag bit 12,1 -m -Var=cellTemperature_070_invalidFlag bit 11,1 -m -Var=cellTemperature_071_invalidFlag bit 10,1 -m -Var=cellTemperature_066 signed 16,8 -m /u:degC -Var=cellTemperature_067 signed 24,8 -m /u:degC -Var=cellTemperature_068 signed 32,8 -m /u:degC -Var=cellTemperature_069 signed 40,8 -m /u:degC -Var=cellTemperature_070 signed 48,8 -m /u:degC -Var=cellTemperature_071 signed 56,8 -m /u:degC - -[foxBMS_CellTemperatures] +CycleTime=5400 -p +Mux=CellVoltages_192_195 0,8 30h -m +Var=CellVoltage_192_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_193_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_194_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_195_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_192 unsigned 12,13 -m /u:mV // Voltage of cell 192 +Var=CellVoltage_193 unsigned 25,13 -m /u:mV // Voltage of cell 193 +Var=CellVoltage_194 unsigned 38,13 -m /u:mV // Voltage of cell 194 +Var=CellVoltage_195 unsigned 51,13 -m /u:mV // Voltage of cell 195 + +[f_CellVoltages] Len=8 -CycleTime=4500 -p -Mux=mux_cellTemperature_072_077 0,8 0Ch -m -Var=cellTemperature_072_invalidFlag bit 15,1 -m -Var=cellTemperature_073_invalidFlag bit 14,1 -m -Var=cellTemperature_074_invalidFlag bit 13,1 -m -Var=cellTemperature_075_invalidFlag bit 12,1 -m -Var=cellTemperature_076_invalidFlag bit 11,1 -m -Var=cellTemperature_077_invalidFlag bit 10,1 -m -Var=cellTemperature_072 signed 16,8 -m /u:degC -Var=cellTemperature_073 signed 24,8 -m /u:degC -Var=cellTemperature_074 signed 32,8 -m /u:degC -Var=cellTemperature_075 signed 40,8 -m /u:degC -Var=cellTemperature_076 signed 48,8 -m /u:degC -Var=cellTemperature_077 signed 56,8 -m /u:degC - -[foxBMS_CellTemperatures] +CycleTime=5400 -p +Mux=CellVoltages_196_199 0,8 31h -m +Var=CellVoltage_196_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_197_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_198_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_199_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_196 unsigned 12,13 -m /u:mV // Voltage of cell 196 +Var=CellVoltage_197 unsigned 25,13 -m /u:mV // Voltage of cell 197 +Var=CellVoltage_198 unsigned 38,13 -m /u:mV // Voltage of cell 198 +Var=CellVoltage_199 unsigned 51,13 -m /u:mV // Voltage of cell 199 + +[f_CellVoltages] Len=8 -CycleTime=4500 -p -Mux=mux_cellTemperature_078_083 0,8 0Dh -m -Var=cellTemperature_078_invalidFlag bit 15,1 -m -Var=cellTemperature_079_invalidFlag bit 14,1 -m -Var=cellTemperature_080_invalidFlag bit 13,1 -m -Var=cellTemperature_081_invalidFlag bit 12,1 -m -Var=cellTemperature_082_invalidFlag bit 11,1 -m -Var=cellTemperature_083_invalidFlag bit 10,1 -m -Var=cellTemperature_078 signed 16,8 -m /u:degC -Var=cellTemperature_079 signed 24,8 -m /u:degC -Var=cellTemperature_080 signed 32,8 -m /u:degC -Var=cellTemperature_081 signed 40,8 -m /u:degC -Var=cellTemperature_082 signed 48,8 -m /u:degC -Var=cellTemperature_083 signed 56,8 -m /u:degC - -[foxBMS_CellTemperatures] +CycleTime=5400 -p +Mux=CellVoltages_200_203 0,8 32h -m +Var=CellVoltage_200_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_201_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_202_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_203_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_200 unsigned 12,13 -m /u:mV // Voltage of cell 200 +Var=CellVoltage_201 unsigned 25,13 -m /u:mV // Voltage of cell 201 +Var=CellVoltage_202 unsigned 38,13 -m /u:mV // Voltage of cell 202 +Var=CellVoltage_203 unsigned 51,13 -m /u:mV // Voltage of cell 203 + +[f_CellVoltages] Len=8 -CycleTime=4500 -p -Mux=mux_cellTemperature_084_089 0,8 0Eh -m -Var=cellTemperature_084_invalidFlag bit 15,1 -m -Var=cellTemperature_085_invalidFlag bit 14,1 -m -Var=cellTemperature_086_invalidFlag bit 13,1 -m -Var=cellTemperature_087_invalidFlag bit 12,1 -m -Var=cellTemperature_088_invalidFlag bit 11,1 -m -Var=cellTemperature_089_invalidFlag bit 10,1 -m -Var=cellTemperature_084 signed 16,8 -m /u:degC -Var=cellTemperature_085 signed 24,8 -m /u:degC -Var=cellTemperature_086 signed 32,8 -m /u:degC -Var=cellTemperature_087 signed 40,8 -m /u:degC -Var=cellTemperature_088 signed 48,8 -m /u:degC -Var=cellTemperature_089 signed 56,8 -m /u:degC - -[foxBMS_CellTemperatures] +CycleTime=5400 -p +Mux=CellVoltages_204_207 0,8 33h -m +Var=CellVoltage_204_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_205_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_206_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_207_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_204 unsigned 12,13 -m /u:mV // Voltage of cell 204 +Var=CellVoltage_205 unsigned 25,13 -m /u:mV // Voltage of cell 205 +Var=CellVoltage_206 unsigned 38,13 -m /u:mV // Voltage of cell 206 +Var=CellVoltage_207 unsigned 51,13 -m /u:mV // Voltage of cell 207 + +[f_CellVoltages] Len=8 -CycleTime=4500 -p -Mux=mux_cellTemperature_090_095 0,8 0Fh -m -Var=cellTemperature_090_invalidFlag bit 15,1 -m -Var=cellTemperature_091_invalidFlag bit 14,1 -m -Var=cellTemperature_092_invalidFlag bit 13,1 -m -Var=cellTemperature_093_invalidFlag bit 12,1 -m -Var=cellTemperature_094_invalidFlag bit 11,1 -m -Var=cellTemperature_095_invalidFlag bit 10,1 -m -Var=cellTemperature_090 signed 16,8 -m /u:degC -Var=cellTemperature_091 signed 24,8 -m /u:degC -Var=cellTemperature_092 signed 32,8 -m /u:degC -Var=cellTemperature_093 signed 40,8 -m /u:degC -Var=cellTemperature_094 signed 48,8 -m /u:degC -Var=cellTemperature_095 signed 56,8 -m /u:degC - -[foxBMS_CellTemperatures] +CycleTime=5400 -p +Mux=CellVoltages_208_211 0,8 34h -m +Var=CellVoltage_208_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_209_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_210_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_211_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_208 unsigned 12,13 -m /u:mV // Voltage of cell 208 +Var=CellVoltage_209 unsigned 25,13 -m /u:mV // Voltage of cell 209 +Var=CellVoltage_210 unsigned 38,13 -m /u:mV // Voltage of cell 210 +Var=CellVoltage_211 unsigned 51,13 -m /u:mV // Voltage of cell 211 + +[f_CellVoltages] Len=8 -CycleTime=4500 -p -Mux=mux_cellTemperature_096_101 0,8 10h -m -Var=cellTemperature_096_invalidFlag bit 15,1 -m -Var=cellTemperature_097_invalidFlag bit 14,1 -m -Var=cellTemperature_098_invalidFlag bit 13,1 -m -Var=cellTemperature_099_invalidFlag bit 12,1 -m -Var=cellTemperature_100_invalidFlag bit 11,1 -m -Var=cellTemperature_101_invalidFlag bit 10,1 -m -Var=cellTemperature_096 signed 16,8 -m /u:degC -Var=cellTemperature_097 signed 24,8 -m /u:degC -Var=cellTemperature_098 signed 32,8 -m /u:degC -Var=cellTemperature_099 signed 40,8 -m /u:degC -Var=cellTemperature_100 signed 48,8 -m /u:degC -Var=cellTemperature_101 signed 56,8 -m /u:degC - -[foxBMS_CellTemperatures] +CycleTime=5400 -p +Mux=CellVoltages_212_215 0,8 35h -m +Var=CellVoltage_212_invalidFlag bit 11,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_213_invalidFlag bit 10,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_214_invalidFlag bit 9,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_215_invalidFlag bit 8,1 -m /e:f_ValidInvalidFlag +Var=CellVoltage_212 unsigned 12,13 -m /u:mV // Voltage of cell 212 +Var=CellVoltage_213 unsigned 25,13 -m /u:mV // Voltage of cell 213 +Var=CellVoltage_214 unsigned 38,13 -m /u:mV // Voltage of cell 214 +Var=CellVoltage_215 unsigned 51,13 -m /u:mV // Voltage of cell 215 + +[f_CrashDump] +ID=0FFh // Fatal error information (in:can_cbs_tx_crash-dump.c:CANTX_CrashDump, fv:tx) Len=8 -CycleTime=4500 -p -Mux=mux_cellTemperature_102_107 0,8 11h -m -Var=cellTemperature_102_invalidFlag bit 15,1 -m -Var=cellTemperature_103_invalidFlag bit 14,1 -m -Var=cellTemperature_104_invalidFlag bit 13,1 -m -Var=cellTemperature_105_invalidFlag bit 12,1 -m -Var=cellTemperature_106_invalidFlag bit 11,1 -m -Var=cellTemperature_107_invalidFlag bit 10,1 -m -Var=cellTemperature_102 signed 16,8 -m /u:degC -Var=cellTemperature_103 signed 24,8 -m /u:degC -Var=cellTemperature_104 signed 32,8 -m /u:degC -Var=cellTemperature_105 signed 40,8 -m /u:degC -Var=cellTemperature_106 signed 48,8 -m /u:degC -Var=cellTemperature_107 signed 56,8 -m /u:degC - -[foxBMS_CellTemperatures] +Mux=StackOverflow 0,8 0 -m + +[f_Debug] +ID=300h // Reserved - for debug/development purpose only (in:can_cbs_rx_debug.c:CANRX_Debug, fv:rx) Len=8 -CycleTime=4500 -p -Mux=mux_cellTemperature_108_113 0,8 12h -m -Var=cellTemperature_108_invalidFlag bit 15,1 -m -Var=cellTemperature_109_invalidFlag bit 14,1 -m -Var=cellTemperature_110_invalidFlag bit 13,1 -m -Var=cellTemperature_111_invalidFlag bit 12,1 -m -Var=cellTemperature_112_invalidFlag bit 11,1 -m -Var=cellTemperature_113_invalidFlag bit 10,1 -m -Var=cellTemperature_108 signed 16,8 -m /u:degC -Var=cellTemperature_109 signed 24,8 -m /u:degC -Var=cellTemperature_110 signed 32,8 -m /u:degC -Var=cellTemperature_111 signed 40,8 -m /u:degC -Var=cellTemperature_112 signed 48,8 -m /u:degC -Var=cellTemperature_113 signed 56,8 -m /u:degC - -[foxBMS_CellTemperatures] +Mux=Rtc 0,8 1 -m // Contains signals to set the BMS's RTC driver to certain values +Var=SetHundredthOfSeconds unsigned 8,7 -m /ln:"SetHundredthOfSeconds" // Instructs the BMS to set the hundredth of seconds in the RTC driver +Var=SetSeconds unsigned 15,6 -m /ln:"SetSeconds" // Instructs the BMS to set the seconds in the RTC driver +Var=SetMinutes unsigned 21,6 -m /ln:"SetMinutes" // Instructs the BMS to set the minutes in the RTC driver +Var=SetHours unsigned 27,5 -m /ln:"SetHours" // Instructs the BMS to set the hours in the RTC driver +Var=SetWeekday unsigned 32,3 -m /e:f_RtcWeekday /ln:"SetWeekday" // Instructs the BMS to set the weekday in the RTC driver +Var=SetDay unsigned 35,5 -m /ln:"SetDay" // Instructs the BMS to set the day in the RTC driver +Var=SetMonth unsigned 40,4 -m /e:f_RtcMonth /ln:"SetMonth" // Instructs the BMS to set the month in the RTC driver +Var=SetYear unsigned 44,7 -m /ln:"SetYear" // Instructs the BMS to set the year in the RTC driver + +[f_Debug] Len=8 -CycleTime=4500 -p -Mux=mux_cellTemperature_114_119 0,8 13h -m -Var=cellTemperature_114_invalidFlag bit 15,1 -m -Var=cellTemperature_115_invalidFlag bit 14,1 -m -Var=cellTemperature_116_invalidFlag bit 13,1 -m -Var=cellTemperature_117_invalidFlag bit 12,1 -m -Var=cellTemperature_118_invalidFlag bit 11,1 -m -Var=cellTemperature_119_invalidFlag bit 10,1 -m -Var=cellTemperature_114 signed 16,8 -m /u:degC -Var=cellTemperature_115 signed 24,8 -m /u:degC -Var=cellTemperature_116 signed 32,8 -m /u:degC -Var=cellTemperature_117 signed 40,8 -m /u:degC -Var=cellTemperature_118 signed 48,8 -m /u:degC -Var=cellTemperature_119 signed 56,8 -m /u:degC - -[foxBMS_CellTemperatures] +Mux=VersionInfo 0,8 0 -m // Instructs the BMS to communicate its version information +Var=GetMcuLotNumber bit 13,1 -m /ln:"GetMcuLotNumber" // Instructs the BMS to communicate the lot number of the MCU +Var=GetBmsSoftwareVersion bit 15,1 -m /ln:"GetBmsSoftwareVersion" // Instructs the BMS to communicate its software version +Var=GetMcuUniqueDieId bit 14,1 -m /ln:"GetMcuUniqueDieId" // Instructs the BMS to communicate the unique ID of the MCU +Var=GetMcuWaferInformation bit 12,1 -m /ln:"GetMcuWaferInformation" // Instructs the BMS to communicate the wafer information of the MCU it was made of +Var=GetCommitHash bit 12,1 /ln:"GetCommitHash" // Instructs the BMS to communicate the commit hash the software version was built with +Var=GetBuildConfiguration unsigned 10,1 -m + +[f_Debug] Len=8 -CycleTime=4500 -p -Mux=mux_cellTemperature_120_125 0,8 14h -m -Var=cellTemperature_120_invalidFlag bit 15,1 -m -Var=cellTemperature_121_invalidFlag bit 14,1 -m -Var=cellTemperature_122_invalidFlag bit 13,1 -m -Var=cellTemperature_123_invalidFlag bit 12,1 -m -Var=cellTemperature_124_invalidFlag bit 11,1 -m -Var=cellTemperature_125_invalidFlag bit 10,1 -m -Var=cellTemperature_120 signed 16,8 -m /u:degC -Var=cellTemperature_121 signed 24,8 -m /u:degC -Var=cellTemperature_122 signed 32,8 -m /u:degC -Var=cellTemperature_123 signed 40,8 -m /u:degC -Var=cellTemperature_124 signed 48,8 -m /u:degC -Var=cellTemperature_125 signed 56,8 -m /u:degC - -[foxBMS_CellTemperatures] +Mux=SoftwareReset 0,8 2 -m // Contains signals to instruct the BMS regarding a software reset +Var=TriggerSoftwareReset bit 32,1 -m /e:f_SoftwareReset /ln:"TriggerSoftwareReset" // Instructs the BMS to perform a software reset + +[f_Debug] Len=8 -CycleTime=4500 -p -Mux=mux_cellTemperature_126_131 0,8 15h -m -Var=cellTemperature_126_invalidFlag bit 15,1 -m -Var=cellTemperature_127_invalidFlag bit 14,1 -m -Var=cellTemperature_128_invalidFlag bit 13,1 -m -Var=cellTemperature_129_invalidFlag bit 12,1 -m -Var=cellTemperature_130_invalidFlag bit 11,1 -m -Var=cellTemperature_131_invalidFlag bit 10,1 -m -Var=cellTemperature_126 signed 16,8 -m /u:degC -Var=cellTemperature_127 signed 24,8 -m /u:degC -Var=cellTemperature_128 signed 32,8 -m /u:degC -Var=cellTemperature_129 signed 40,8 -m /u:degC -Var=cellTemperature_130 signed 48,8 -m /u:degC -Var=cellTemperature_131 signed 56,8 -m /u:degC - -[foxBMS_CellTemperatures] +Mux=FramInitialization 0,8 3 -m // Contains signals to instruct the BMS regarding FRAM +Var=InitializeFram bit 28,1 -m /e:f_Initialization /ln:"InitializeFram" // Instructs the BMS to initialize the FRAM + +[f_Debug] Len=8 -CycleTime=4500 -p -Mux=mux_cellTemperature_132_137 0,8 16h -m -Var=cellTemperature_132_invalidFlag bit 15,1 -m -Var=cellTemperature_133_invalidFlag bit 14,1 -m -Var=cellTemperature_134_invalidFlag bit 13,1 -m -Var=cellTemperature_135_invalidFlag bit 12,1 -m -Var=cellTemperature_136_invalidFlag bit 11,1 -m -Var=cellTemperature_137_invalidFlag bit 10,1 -m -Var=cellTemperature_132 signed 16,8 -m /u:degC -Var=cellTemperature_133 signed 24,8 -m /u:degC -Var=cellTemperature_134 signed 32,8 -m /u:degC -Var=cellTemperature_135 signed 40,8 -m /u:degC -Var=cellTemperature_136 signed 48,8 -m /u:degC -Var=cellTemperature_137 signed 56,8 -m /u:degC - -[foxBMS_CellTemperatures] +Mux=TimeInfo 0,8 4 -m // Contains signals to instruct the BMS regarding its own time +Var=RequestRtcTime bit 15,1 -m /ln:"RequestRtcTime" // Instructs the BMS to communicate its current time + +[f_DebugBuildConfiguration] +ID=303h // Contains the build configuration (in:can_cbs_tx_debug-build-configuration.c:CANTX_DebugBuildConfiguration, fv:tx) Len=8 -CycleTime=4500 -p -Mux=mux_cellTemperature_138_143 0,8 17h -m -Var=cellTemperature_138_invalidFlag bit 15,1 -m -Var=cellTemperature_139_invalidFlag bit 14,1 -m -Var=cellTemperature_140_invalidFlag bit 13,1 -m -Var=cellTemperature_141_invalidFlag bit 12,1 -m -Var=cellTemperature_142_invalidFlag bit 11,1 -m -Var=cellTemperature_143_invalidFlag bit 10,1 -m -Var=cellTemperature_138 signed 16,8 -m /u:degC -Var=cellTemperature_139 signed 24,8 -m /u:degC -Var=cellTemperature_140 signed 32,8 -m /u:degC -Var=cellTemperature_141 signed 40,8 -m /u:degC -Var=cellTemperature_142 signed 48,8 -m /u:degC -Var=cellTemperature_143 signed 56,8 -m /u:degC - -[foxBMS_CellTemperatures] +Mux=BatteryCell_MaxDischargeTemp 0,8 24h +Var=MaxDischargeTemperature_MSL signed 8,18 -m /u:degC /f:0.1 +Var=MaxDischargeTemperature_RSL signed 26,18 -m /u:degC /f:0.1 +Var=MaxdischargeTemperature_MOL signed 44,18 -m /u:degC /f:0.1 + +[f_DebugBuildConfiguration] Len=8 -CycleTime=4500 -p -Mux=mux_cellTemperature_144_149 0,8 18h -m -Var=cellTemperature_144_invalidFlag bit 15,1 -m -Var=cellTemperature_145_invalidFlag bit 14,1 -m -Var=cellTemperature_146_invalidFlag bit 13,1 -m -Var=cellTemperature_147_invalidFlag bit 12,1 -m -Var=cellTemperature_148_invalidFlag bit 11,1 -m -Var=cellTemperature_149_invalidFlag bit 10,1 -m -Var=cellTemperature_144 signed 16,8 -m /u:degC -Var=cellTemperature_145 signed 24,8 -m /u:degC -Var=cellTemperature_146 signed 32,8 -m /u:degC -Var=cellTemperature_147 signed 40,8 -m /u:degC -Var=cellTemperature_148 signed 48,8 -m /u:degC -Var=cellTemperature_149 signed 56,8 -m /u:degC - -[foxBMS_CellTemperatures] +Mux=BatteryCell_MinDischargeTemp 0,8 27h +Var=MinDischargeTemperature_MSL signed 8,18 -m /u:degC /f:0.1 +Var=MinDischargeTemperature_RSL signed 26,18 -m /u:degC /f:0.1 +Var=MinDischargeTemperature_MOL signed 44,18 -m /u:degC /f:0.1 + +[f_DebugBuildConfiguration] Len=8 -CycleTime=4500 -p -Mux=mux_cellTemperature_150_155 0,8 19h -m -Var=cellTemperature_150_invalidFlag bit 15,1 -m -Var=cellTemperature_151_invalidFlag bit 14,1 -m -Var=cellTemperature_152_invalidFlag bit 13,1 -m -Var=cellTemperature_153_invalidFlag bit 12,1 -m -Var=cellTemperature_154_invalidFlag bit 11,1 -m -Var=cellTemperature_155_invalidFlag bit 10,1 -m -Var=cellTemperature_150 signed 16,8 -m /u:degC -Var=cellTemperature_151 signed 24,8 -m /u:degC -Var=cellTemperature_152 signed 32,8 -m /u:degC -Var=cellTemperature_153 signed 40,8 -m /u:degC -Var=cellTemperature_154 signed 48,8 -m /u:degC -Var=cellTemperature_155 signed 56,8 -m /u:degC - -[foxBMS_CellTemperatures] +Mux=BatteryCell_MaxChargeTemp 0,8 22h +Var=MaxChargeTemperature_MSL signed 8,18 -m /u:degC /f:0.1 +Var=MaxChargeTemperature_RSL signed 26,18 -m /u:degC /f:0.1 +Var=MaxChargeTemperature_MOL signed 44,18 -m /u:degC /f:0.1 + +[f_DebugBuildConfiguration] Len=8 -CycleTime=4500 -p -Mux=mux_cellTemperature_156_161 0,8 1Ah -m -Var=cellTemperature_156_invalidFlag bit 15,1 -m -Var=cellTemperature_157_invalidFlag bit 14,1 -m -Var=cellTemperature_158_invalidFlag bit 13,1 -m -Var=cellTemperature_159_invalidFlag bit 12,1 -m -Var=cellTemperature_160_invalidFlag bit 11,1 -m -Var=cellTemperature_161_invalidFlag bit 10,1 -m -Var=cellTemperature_156 signed 16,8 -m /u:degC -Var=cellTemperature_157 signed 24,8 -m /u:degC -Var=cellTemperature_158 signed 32,8 -m /u:degC -Var=cellTemperature_159 signed 40,8 -m /u:degC -Var=cellTemperature_160 signed 48,8 -m /u:degC -Var=cellTemperature_161 signed 56,8 -m /u:degC - -[foxBMS_CellTemperatures] +Mux=BatteryCell_MinChargeTemp 0,8 26h +Var=MinChargeTemperature_MSL signed 8,18 -m /u:degC /f:0.1 +Var=MinChargeTemperature_RSL signed 26,18 -m /u:degC /f:0.1 +Var=MinChargeTemperature_MOL signed 44,18 -m /u:degC /f:0.1 + +[f_DebugBuildConfiguration] Len=8 -CycleTime=4500 -p -Mux=mux_cellTemperature_162_167 0,8 1Bh -m -Var=cellTemperature_162_invalidFlag bit 15,1 -m -Var=cellTemperature_163_invalidFlag bit 14,1 -m -Var=cellTemperature_164_invalidFlag bit 13,1 -m -Var=cellTemperature_165_invalidFlag bit 12,1 -m -Var=cellTemperature_166_invalidFlag bit 11,1 -m -Var=cellTemperature_167_invalidFlag bit 10,1 -m -Var=cellTemperature_162 signed 16,8 -m /u:degC -Var=cellTemperature_163 signed 24,8 -m /u:degC -Var=cellTemperature_164 signed 32,8 -m /u:degC -Var=cellTemperature_165 signed 40,8 -m /u:degC -Var=cellTemperature_166 signed 48,8 -m /u:degC -Var=cellTemperature_167 signed 56,8 -m /u:degC - -[foxBMS_CellTemperatures] +Mux=BatteryCell_MaxVolt 0,8 25h +Var=MaxVoltage_MSL signed 8,18 -m /u:mV /min:0 /max:1 +Var=MaxVoltage_RSL signed 26,18 -m /u:mV /min:0 /max:1 +Var=MaxVoltage_MOL signed 44,18 -m /u:mV /min:0 /max:1 + +[f_DebugBuildConfiguration] Len=8 -CycleTime=4500 -p -Mux=mux_cellTemperature_168_173 0,8 1Ch -m -Var=cellTemperature_168_invalidFlag bit 15,1 -m -Var=cellTemperature_169_invalidFlag bit 14,1 -m -Var=cellTemperature_170_invalidFlag bit 13,1 -m -Var=cellTemperature_171_invalidFlag bit 12,1 -m -Var=cellTemperature_172_invalidFlag bit 11,1 -m -Var=cellTemperature_173_invalidFlag bit 10,1 -m -Var=cellTemperature_168 signed 16,8 -m /u:degC -Var=cellTemperature_169 signed 24,8 -m /u:degC -Var=cellTemperature_170 signed 32,8 -m /u:degC -Var=cellTemperature_171 signed 40,8 -m /u:degC -Var=cellTemperature_172 signed 48,8 -m /u:degC -Var=cellTemperature_173 signed 56,8 -m /u:degC - -[foxBMS_CellTemperatures] +Mux=BatteryCell_MinVolt 0,8 28h +Var=MinVoltage_MSL signed 8,18 -m /u:mV /min:0 /max:1 +Var=MinVoltage_RSL signed 26,18 -m /u:mV /min:0 /max:1 +Var=MinVoltge_MOL signed 44,18 -m /u:mV /min:0 /max:1 + +[f_DebugBuildConfiguration] Len=8 -CycleTime=4500 -p -Mux=mux_cellTemperature_174_179 0,8 1Dh -m -Var=cellTemperature_174_invalidFlag bit 15,1 -m -Var=cellTemperature_175_invalidFlag bit 14,1 -m -Var=cellTemperature_176_invalidFlag bit 13,1 -m -Var=cellTemperature_177_invalidFlag bit 12,1 -m -Var=cellTemperature_178_invalidFlag bit 11,1 -m -Var=cellTemperature_179_invalidFlag bit 10,1 -m -Var=cellTemperature_174 signed 16,8 -m /u:degC -Var=cellTemperature_175 signed 24,8 -m /u:degC -Var=cellTemperature_176 signed 32,8 -m /u:degC -Var=cellTemperature_177 signed 40,8 -m /u:degC -Var=cellTemperature_178 signed 48,8 -m /u:degC -Var=cellTemperature_179 signed 56,8 -m /u:degC - -[foxBMS_BmsStateRequest] -ID=230h // (in:can_cbs_rx_bms-state-request.c:CANRX_BmsStateRequest, fv:rx) -Len=8 -Var=foxBMS_modeRequest unsigned 6,2 -m /e:foxBMS_ModeRequest // 0x0: Disconnect strings from HV bus, 0x01: Connect strings to HV bus to start discharge, 0x02: Connect strings to HV bus to start charging -Var=foxBMS_activateBalancing bit 15,1 -m // 0: Deactivate balancing, 1: Activate balancing -Var=foxBMS_balancingThreshold unsigned 16,8 -m /u:mV // Required voltage difference to minimum cell voltage to activate balancing -Var=foxBMS_externallyPrecharged bit 4,1 -m // 0x0: HV bus not externally precharged, 0x01: HV bus externally precharged -Var=foxBMS_resetFlags bit 5,1 -m // 0x01: reset persistent flags -Var=foxBMS_chargerConnected bit 3,1 -m // 0x00: charger not connected, 0x01: charger connected -Var=foxBMS_disableInsulationMon bit 2,1 -m // 0x00: Check battery system insulation, 0x01: Do not check insulation of battery system -Var=foxBMS_heaterOverride_ON bit 1,1 -m // 0: no override active, 1: override active -> force heater on -Var=foxBMS_heaterOverride_OFF bit 0,1 -m // 0: no override active, 1: override active -> force heater off - -[foxBMS_BmsState] -ID=220h // Message contains foxBMS state (in:can_cbs_tx_bms-state.c:CANTX_BmsState, fv:tx) +Mux=BatteryCell 0,8 20h +Var=NominalCellVoltage unsigned 8,16 -m /u:mV /max:1 +Var=DeepDischargeCellVoltage unsigned 24,16 -m /u:mV /max:1 +Var=CellCapacity unsigned 40,16 -m /u:mAh /max:1 +Var=CellEnergy unsigned 56,8 -m /u:Wh /max:1 + +[f_DebugBuildConfiguration] Len=8 -CycleTime=100 -p -Var=foxBMS_State unsigned 4,4 -m /e:foxBMS_State -Var=BMS_nrOfConnectedStrings unsigned 0,4 -m -Var=foxBMS_generalError bit 13,1 -m // 0x00: No error detected, 0x01: Error detected -Var=foxBMS_generalWarning bit 14,1 -m // 0x00: No warning detected, 0x01: Warning detected -Var=foxBMS_Error_dieTemperatureMCU bit 21,1 -m /e:foxBMS_ErrorFlag // 0x00: No error, 0x01: Error detected -Var=foxBMS_Error_OvertempPCB bit 20,1 -m // foxBMS Master-PCB: 0x00: No error, 0x01: Error detected -Var=foxBMS_Error_UndertempPCB bit 19,1 -m // foxBMS Master-PCB: 0x00: No error, 0x01: Error detected -Var=foxBMS_Error_PrechargeVolt bit 23,1 -m // 0x00: precharging successful, 0x01: precharge aborted because of voltage difference -Var=foxBMS_Error_PrechargeCurrent bit 22,1 -m // 0x00: precharging successful, 0x01: precharge aborted because current limit violated -Var=foxBMS_heaterState bit 9,1 -m // 0x00: Heater not activated, 0x01: Heater activated -Var=foxBMS_coolingState bit 8,1 -m // 0x00: Cooling not activated, 0x01: Cooling activated -Var=foxBMS_insulationMonitoring bit 10,1 -m // 0x00: insulation monitoring active, 0x01: insulation monitoring not active -Var=foxBMS_chargingComplete bit 15,1 -m // 0x01: charging complete -Var=foxBMS_EmergencyShutoff bit 12,1 -m // The BMS is preparing to open the contactors soon due to detected error -Var=foxBMS_MainFuseBlown bit 18,1 -m // 0x00: fuse okay, 0x01: fuse blown -Var=foxBMS_insulationResistance unsigned 56,8 -m /u:kOhm /f:10 -Var=foxBMS_Error_Interlock bit 17,1 -m /e:foxBMS_ErrorFlag // 0x00: interlock okay, 0x01: interlock open -Var=foxBMS_NrDeactivatedStrings unsigned 52,4 -m -Var=foxBMS_Error_Insulation bit 16,1 -m // 0x00: No error, 0x01: Error detected -Var=foxBMS_Error_Cantiming bit 31,1 -m // 0x00: No error, 0x01: Error detected -Var=foxBMS_Error_PackOvercurr_Charge bit 30,1 -m // 0x00: No error, 0x01: Error detected -Var=foxBMS_Error_PackOvercur_Dischrg bit 29,1 -m // 0x00: No error, 0x01: Error detected -Var=foxBMS_SysMonError bit 11,1 -m /ln:"system monitoring error" // If this bit is set, it indicates that a task has violated its timing requirements. -Var=foxBMS_alertFlag bit 28,1 -m /e:foxBMS_ErrorFlag // foxBMS Alter flag: 0x00: No error, 0x01: Alert flag set -Var=foxBMS_NvramCrcError bit 27,1 -m /e:foxBMS_ErrorFlag // 0x00: No NVRAM CRC Error detected, 0x01: NVRAM CRC Error detected - -[foxBMS_StringState] -ID=221h // Message contains string related error and warning flags (in:can_cbs_tx_bms-state.c:CANTX_StringState, fv:tx) +Mux=BatteryCell_MaxChargeCur 0,8 21h +Var=MaxChargeCurrent_MSL unsigned 8,18 -m /u:mA +Var=MaxChargeCurrent_RSL unsigned 26,18 -m /u:mA /max:1 +Var=MaxChargeCurrent_MOL unsigned 44,18 -m /u:mA /max:1 + +[f_DebugBuildConfiguration] Len=8 -CycleTime=100 -p -Mux=mux_stateString0 4,4 0 -m -Var=String0_stringConnected bit 3,1 -m // 0x00: String not connected, 0x01: String connected to HV bus -Var=String0_balancing_active bit 2,1 -m // 0x00: No balancing active, 0x01: Balancing in this string active -Var=String0_Err_overtemp_charge bit 15,1 -m // 0x00: No error, 0x01: Error: Flag will be set if maximum cell temperature is above 45 degree Celsius. -Var=String0_Err_undertemp_charge bit 14,1 -m // 0x00: No error, 0x01: Error: Flag will be set if minimum cell temperature is below 0 degree Celsius. -Var=String0_Err_overtemp_discharge bit 13,1 -m // 0x00: No error, 0x01: Error: Flag will be set if maximum cell temperature is above 60 degree Celsius. -Var=String0_Err_undertemp_discharge bit 12,1 -m // 0x00: No error, 0x01: Error: Flag will be set if minimum cell temperature is below -20 degree Celsius. -Var=String0_Err_Overcurrent_charge bit 11,1 -m // 0x00: No error, 0x01: Error: Flag will be set if string charge current is above 30400mA. -Var=String0_Err_Overcurre_discharge bit 10,1 -m // 0x00: No error, 0x01: Error: Flag will be set if discharge current is above maximum string current. -Var=String0_Err_Overvoltage bit 9,1 -m // 0x00: No error, 0x01: Error: Flag will be set if maximum cell voltage is above 4200mV. -Var=String0_Err_Undervoltage bit 8,1 -m // 0x00: No error, 0x01: Error: Flag will be set if minimum cell voltage is below 3000mV. This equals roughly 4% remaining SOC. Minimum data sheet values if 2500mV. -Var=String0_Err_deep_discharge bit 0,1 -m /e:foxBMS_ErrorFlag // 0x00: No error, 0x01: Error -Var=String0_Err_CS_currentMeas bit 44,1 -m // 0x00: No error, 0x01: Error -Var=String0_Err_positiveContactor bit 39,1 -m /e:foxBMS_ErrorFlag // 0x00: No error, 0x01: Error -Var=String0_Err_openWire bit 54,1 -m // 0x00: No error, 0x01: Error -Var=String0_openWireNumber unsigned 56,8 -m // Number of first open wire that has been detected in this string -Var=String0_Err_plaus_cell_volt bit 51,1 -m // 0x00: No error, 0x01: Error -Var=String0_Err_plaus_cell_temp bit 52,1 -m // 0x00: No error, 0x01: Error -Var=String0_Err_plaus_string_volt bit 50,1 -m // 0x00: No error, 0x01: Error -Var=String0_Err_slave_hardware bit 37,1 -m // 0x00: No error, 0x01: Error -Var=String0_Err_dsyChainBase_Comm bit 36,1 -m // 0x00: No error, 0x01: Error (i.e. SPI) -Var=String0_Err_dsyChainPrim_CRC bit 34,1 -m // 0x00: No error, 0x01: Error -Var=String0_Err_dsyChainRedun_Comm bit 35,1 -m // 0x00: No error, 0x01: Error -Var=String0_Err_dsyChainRedun_CRC bit 33,1 -m // 0x00: No error, 0x01: Error -Var=String0_Err_dsyPrim_voltMeasOor bit 32,1 -m // 0x00: No error, 0x01: Error -Var=String0_Err_dsyRedun_voltMeasOor bit 47,1 -m // 0x00: No error, 0x01: Error -Var=String0_Err_dsyPrim_tempMeasOor bit 46,1 -m // 0x00: No error, 0x01: Error -Var=String0_Err_dsyRedun_tempMeasOor bit 45,1 -m // 0x00: No error, 0x01: Error -Var=String0_Err_CS_coulombCountMeas bit 43,1 -m // 0x00: No error, 0x01: Error -Var=String0_Err_CS_energyCountMeas bit 42,1 -m // 0x00: No error, 0x01: Error -Var=String0_Err_plaus_volt_spread bit 48,1 -m // 0x00: No error, 0x01: Error -Var=String0_Err_plaus_temp_spread bit 49,1 -m // 0x00: No error, 0x01: Error -Var=String0_fuseBlown bit 1,1 -m /e:foxBMS_FuseState /ln:"0x00: fuse okay, 0x01: fuse blown" -Var=String0_Warning_overvoltage_MOL bit 17,1 -m -Var=String0_Warning_undervoltage_MOL bit 16,1 -m -Var=String0_Wrng_chargeOverTemp_MOL bit 23,1 -m -Var=String0_Wrng_dischrgOverTemp_MOL bit 21,1 -m -Var=String0_Wrng_chargeUnderTemp_MOL bit 22,1 -m -Var=String0_Wrng_dischrgUnderTmp_MOL bit 20,1 -m -Var=String0_Wrng_chargeOverCur_MOL bit 19,1 -m -Var=String0_Wrng_dischargOverCur_MOL bit 18,1 -m -Var=String0_Wrng_chargeOverTemp_RSL bit 31,1 -m -Var=String0_Wrng_chargeUnderTemp_RSL bit 30,1 -m -Var=String0_Wrng_dischrgOverTemp_RSL bit 29,1 -m -Var=String0_Wrng_dischrgUnderTmp_RSL bit 28,1 -m -Var=String0_Wrng_chargeOverCur_RSL bit 27,1 -m -Var=String0_Wrng_dischargOverCur_RSL bit 26,1 -m -Var=String0_Wrng_overvoltage_RSL bit 25,1 -m -Var=String0_Wrng_undervoltage_RSL bit 24,1 -m -Var=String0_Err_negativeContactor bit 38,1 -m /e:foxBMS_ErrorFlag // 0x00: No error, 0x01: Error -Var=String0_Err_CS_voltage1Meas bit 41,1 -m -Var=String0_Err_CS_voltage2Meas bit 40,1 -m -Var=String0_Err_CS_voltage3Meas bit 55,1 -m - -[foxBMS_StringMinMaxValues] -ID=281h // Message contains minimum and maximum cell temperature and cell voltage values of respective string (in:can_cbs_tx_pack-minimum-maximum-values.c:CANTX_StringMinimumMaximumValues, fv:tx) +Mux=BatteryCell_MaxDischargeCur 0,8 23h +Var=MaxDischargeCurrent_MSL unsigned 8,18 -m /u:mA /max:1 +Var=MaxDischargeCurrent_RSL unsigned 26,18 -m /u:mA /max:1 +Var=MaxDischargeCurrent_MOL unsigned 44,18 -m /u:mA /max:1 + +[f_DebugBuildConfiguration] Len=8 -CycleTime=100 -p -Mux=mux_minMaxValuesString0 4,4 0 -m -Var=String0_minimumCellVoltage unsigned 21,13 -m /u:mV // Minimum cell voltage in this string -Var=String0_maximumCellVoltage unsigned 8,13 -m /u:mV // Maximum cell voltage in this string -Var=String0_maximumCellTemperature signed 34,9 -m /u:degC /f:0.5 // Maximum cell temperature in this string -Var=String0_minimumCellTemperature signed 43,9 -m /u:degC /f:0.5 // Minium cell temperature in this string +Mux=BatterySystem_General1 0,8 30h +Var=NrOfStrings unsigned 8,8 -m /max:1 +Var=NrOfModulesPerString unsigned 16,8 -m /max:1 +Var=NrOfCellBlocksPerModule unsigned 24,8 -m /max:1 +Var=NrOfParallelCellsPerCellBlock unsigned 32,8 -m /max:1 +Var=NrOfGpiosPerModule unsigned 40,8 -m /max:1 +Var=NrOfGpasPerModule unsigned 48,8 -m /max:1 +Var=NrOfTemperatureSensorsPerModule unsigned 56,8 -m /max:1 -[foxBMS_StringStateEstimation] -ID=282h // Message contains SOC, SOE and SOH state estimations (in:can_cbs_tx_string-state-estimation.c:CANTX_StringStateEstimation, fv:tx) +[f_DebugBuildConfiguration] Len=8 -CycleTime=1000 -p -Mux=mux_String0_SOC_SOE 0,4 0 -m -Var=String0_minimumSOC unsigned 4,9 -m /u:% /f:0.25 -Var=String0_averageSOC unsigned 13,9 -m /u:% /f:0.25 /max:127.5 -Var=String0_maximumSOC unsigned 22,9 -m /u:% /f:0.25 /max:63.75 -Var=String0_SOE unsigned 31,9 -m /u:% /f:0.25 /max:127.5 // SOE is depending on current direction, if battery system is charging: SOE_max is transmitted, else SOE_min -Var=String0_Energy_kWh unsigned 49,15 -m /u:kWh /f:0.01 // Remaining energy left in this string -Var=String0_SOH unsigned 40,9 -m /u:% /f:0.25 /max:127.5 +Mux=BatterySystem_TotalNumbers 0,8 37h +Var=NrOfCellBlocksPerString unsigned 8,14 -m /max:1 +Var=NrOfCellBlocks unsigned 22,14 -m /max:1 +Var=NrOfTempSensorsPerString unsigned 36,14 -m /max:1 +Var=NrOfTempSensors unsigned 50,14 -m /max:1 -[foxBMS_Debug] -ID=200h // Reserved - for debug/development purpose only (in:can_cbs_rx_debug.c:CANRX_Debug, fv:rx) +[f_DebugBuildConfiguration] Len=8 -Mux=foxBMS_Rtc 0,8 1 -m -Var=SetHundredthOfSeconds unsigned 8,7 -m -Var=SetSeconds unsigned 15,6 -m -Var=SetMinutes unsigned 21,6 -m -Var=SetHours unsigned 27,5 -m -Var=SetWeekday unsigned 32,3 -m /e:foxBMS_RtcWeekday -Var=SetDay unsigned 35,5 -m -Var=SetMonth unsigned 40,4 -m /e:foxBMS_RtcMonth -Var=SetYear unsigned 44,7 -m +Mux=BatterySystem_CurrentSensor 0,8 33h +Var=CurrentSensorPresent unsigned 8,1 -m +Var=CurrentSensorCyclic unsigned 14,1 /e:f_CurrentSensorMode +Var=NrOfVoltagesFromCurrentSensor unsigned 10,2 -m /max:1 +Var=CurrentMeasurementTimeout unsigned 12,12 -m /u:ms /max:1 +Var=CoulombCountingMeasurementTimeou unsigned 24,12 -m /u:ms /max:1 +Var=EnergyCountingMeasurementTimeout unsigned 36,12 -m /u:ms /max:1 +Var=ThresholdNoCurrent unsigned 48,12 -m /u:mA /max:1 -[foxBMS_Debug] +[f_DebugBuildConfiguration] Len=8 -Mux=foxBMS_VersionInfo 0,8 0 -m -Var=foxBMS_GetMcuLotNumber bit 13,1 -m -Var=foxBMS_GetBmsSoftwareVersion bit 15,1 -m -Var=foxBMS_GetMcuUniqueDieId bit 14,1 -m -Var=foxBMS_GetMcuWaferInformation bit 12,1 -m -Var=foxBMS_GetCommitHash bit 12,1 +Mux=BatterySystem_Contactors 0,8 32h +Var=MainContactorsMaxBreakCurrent unsigned 24,32 -m /u:mA /max:1 +Var=NrOfContactors unsigned 16,8 -m /max:1 +Var=NrOfContactorsOutsideStrings unsigned 8,8 -m /max:1 -[foxBMS_Debug] +[f_DebugBuildConfiguration] Len=8 -Mux=foxBMS_SoftwareReset 0,8 2 -m -Var=foxBMS_TriggerSoftwareReset bit 32,1 -m /e:foxBMS_SoftwareReset +Mux=BatterySystem_OpenWireCheck 0,8 36h +Var=StandbyPeriodicOpenWireCheck unsigned 8,1 -m +Var=NormalPeriodicOpenWireCheck unsigned 21,1 -m +Var=ChargePeriodicOpenWireCheck unsigned 37,1 +Var=StandbyOpenWirePeriod unsigned 9,12 -m /u:s +Var=NormalOpenWirePeriod unsigned 22,12 -m /u:s +Var=ErrorOpenWirePeriod unsigned 47,12 -m /u:s +Var=ChargeOpenWirePeriod unsigned 35,12 -m /u:s -[foxBMS_Debug] +[f_DebugBuildConfiguration] Len=8 -Mux=foxBMS_FramInitialization 0,8 3 -m -Var=InitializeFram bit 28,1 -m /e:foxBMS_FramInitialization +Mux=BatterySystem_Fuse 0,8 34h +Var=CheckFusePlacedInChargePath unsigned 8,1 -m +Var=CheckFusePlacedInNormalPath unsigned 9,1 -m +Var=MaxVoltageDropOverFuse unsigned 12,12 -m /u:mV /max:1 +Var=MainFuseMaximumTriggerDuration unsigned 24,16 -m /u:ms /max:1 -[foxBMS_Debug] +[f_DebugBuildConfiguration] Len=8 -Mux=foxBMS_TimeInfo 0,8 4 -m -Var=foxBMS_RequestRtcTime bit 15,1 -m +Mux=BatterySystem_General2 0,8 31h +Var=PositiveDischargeCurrent unsigned 8,1 -m +Var=IgnoreInterlockFeedback unsigned 14,1 +Var=CheckCanTiming unsigned 13,1 +Var=BalancingDefaultInactive unsigned 12,1 +Var=BalancingResistance unsigned 12,12 -m /u:Ohm /max:1 +Var=RestCurrent unsigned 24,12 -m /u:mA /max:1 +Var=RelaxationPeriod unsigned 36,16 -m /u:s /f:10 /max:1 -[foxBMS_String0Current] -ID=521h // Current sensor string 0: current (in:can_cbs_rx_current-sensor.c:CANRX_CurrentSensor, fv:rx); Isabellenhuette data sheet name: IVT0_Msg_Result_I -Len=6 -Var=IVT0_Result_I_systemError bit 8,1 -m -Var=IVT0_Result_I_OCS bit 11,1 -m -Var=IVT0_Result_I_overallMeasError bit 9,1 -m -Var=IVT0_Result_I_channelMeasError bit 10,1 -m -Var=IVT0_ID_Result_I unsigned 0,8 -m -Var=IVT0_MsgCount_Result_I unsigned 12,4 -m -Var=IVT0_Result_I_mA signed 16,32 -m /u:mA - -[foxBMS_String0Voltage1] -ID=522h // Current sensor string 0: voltage 1 (in:can_cbs_rx_current-sensor.c:CANRX_CurrentSensor, fv:rx); Isabellenhuette data sheet name: IVT0_Msg_Result_U1 -Len=6 -Var=IVT0_Result_U1_systemError bit 8,1 -m -Var=IVT0_Result_U1_overallMeasError bit 9,1 -m -Var=IVT0_Result_U1_channelMeasError bit 10,1 -m -Var=IVT0_Result_U1_OCS bit 11,1 -m -Var=IVT0_ID_Result_U1 unsigned 0,8 -m /min:1 /max:1 /d:1 -Var=IVT0_MsgCount_Result_U1 unsigned 12,4 -m -Var=IVT0_Result_U1_mV signed 16,32 -m /u:mV - -[foxBMS_String0Voltage2] -ID=523h // Current sensor string 0: voltage 2 (in:can_cbs_rx_current-sensor.c:CANRX_CurrentSensor, fv:rx); Isabellenhuette data sheet name: IVT0_Msg_Result_U2 -Len=6 -Var=IVT0_Result_U2_systemError bit 8,1 -m -Var=IVT0_Result_U2_OCS bit 11,1 -m -Var=IVT0_Result_U2_overallMeasError bit 9,1 -m -Var=IVT0_Result_U2_channelMeasError bit 10,1 -m -Var=IVT0_ID_Result_U2 unsigned 0,8 -m /min:2 /max:2 /d:2 -Var=IVT0_MsgCount_Result_U2 unsigned 12,4 -m -Var=IVT0_Result_U2_mV signed 16,32 -m /u:mV - -[foxBMS_String0Voltage3] -ID=524h // Current sensor string 0: voltage 3 (in:can_cbs_rx_current-sensor.c:CANRX_CurrentSensor, fv:rx); Isabellenhuette data sheet name: IVT0_Msg_Result_U3 -Len=6 -Var=IVT0_Result_U3_systemError bit 8,1 -m -Var=IVT0_Result_U3_OCS bit 11,1 -m -Var=IVT0_Result_U3_overallMeasError bit 9,1 -m -Var=IVT0_Result_U3_channelMeasError bit 10,1 -m -Var=IVT0_ID_Result_U3 unsigned 0,8 -m /min:3 /max:3 /d:3 -Var=IVT0_MsgCount_Result_U3 unsigned 12,4 -m -Var=IVT0_Result_U3_mV signed 16,32 -m /u:mV - -[foxBMS_String0Temperature] -ID=525h // Current sensor string 0: temperature (in:can_cbs_rx_current-sensor.c:CANRX_CurrentSensor, fv:rx); Isabellenhuette data sheet name: IVT0_Msg_Result_T -Len=6 -Var=IVT0_Result_T_systemError bit 8,1 -m -Var=IVT0_Result_T_OCS bit 11,1 -m -Var=IVT0_Result_T_overallMeasError bit 9,1 -m -Var=IVT0_Result_T_channelMeasError bit 10,1 -m -Var=IVT0_ID_Result_T unsigned 0,8 -m /min:4 /max:4 /d:4 -Var=IVT0_MsgCount_Result_T unsigned 12,4 -m -Var=IVT0_Result_T_ddegC signed 16,32 -m /u:ddegC /f:0.1 - -[foxBMS_String0Power] -ID=526h // Current sensor string 0: power (in:can_cbs_rx_current-sensor.c:CANRX_CurrentSensor, fv:rx); Isabellenhuette data sheet name: IVT0_Msg_Result_W -Len=6 -Var=IVT0_Result_W_systemError bit 8,1 -m -Var=IVT0_Result_W_OCS bit 11,1 -m -Var=IVT0_Result_W_overallMeasError bit 9,1 -m -Var=IVT0_Result_W_channelMeasError bit 10,1 -m -Var=IVT0_Result_W signed 16,32 -m /u:W -Var=IVT0_MsgCount_Result_W unsigned 12,4 -m -Var=IVT0_ID_Result_W unsigned 0,8 -m /min:5 /max:5 /d:5 - -[foxBMS_String0CurrentCounter] -ID=527h // Current sensor string 0: coulomb counting (in:can_cbs_rx_current-sensor.c:CANRX_CurrentSensor, fv:rx); Isabellenhuette data sheet name: IVT0_Msg_Result_As -Len=6 -Var=IVT0_Result_As_systemError bit 8,1 -m -Var=IVT0_Result_As_OCS bit 11,1 -m -Var=IVT0_Result_As_overallMeasError bit 9,1 -m -Var=IVT0_Result_As_channelMeasError bit 10,1 -m -Var=IVT0_Result_As signed 16,32 -m /u:As -Var=IVT0_MsgCount_Result_As unsigned 12,4 -m -Var=IVT0_ID_Result_As unsigned 0,8 -m /min:6 /max:6 /d:6 - -[foxBMS_String0EnergyCounter] -ID=528h // Current sensor string 0: energy counting (in:can_cbs_rx_current-sensor.c:CANRX_CurrentSensor, fv:rx); Isabellenhuette data sheet name: IVT0_Msg_Result_Wh -Len=6 -Var=IVT0_Result_Wh_systemError bit 8,1 -m -Var=IVT0_Result_Wh_OCS bit 11,1 -m -Var=IVT0_Result_Wh_overallMeasError bit 9,1 -m -Var=IVT0_Result_Wh_channelMeasError bit 10,1 -m -Var=IVT0_Result_Wh signed 16,32 -m /u:Wh -Var=IVT0_MsgCount_Result_Wh unsigned 12,4 -m -Var=IVT0_ID_Result_Wh unsigned 0,8 -m /min:7 /max:7 /d:7 +[f_DebugBuildConfiguration] +Len=8 +Mux=BatterySystem_MaxCurrent 0,8 35h +Var=MaxStringCurrent unsigned 8,28 -m /u:mA /max:1 +Var=MaxPackCurrent unsigned 36,28 -m /u:mA /max:1 -[foxBMS_BmsStateDetails] -ID=226h // Transmits details on flags transmitted by foxBMS_State (in:can_cbs_tx_bms-state.c:CANTX_BmsStateDetails, fv:tx) +[f_DebugBuildConfiguration] Len=8 -CycleTime=1000 -p -Var=foxBMS_TimingViolationEngine bit 7,1 -m /ln:"timing violation engine task" // Indicates whether the timing of the engine task has been violated. -Var=foxBMS_TimingViolation1ms bit 6,1 -m /ln:"timing violation 1ms task" // Indicates whether the timing of the 1ms task has been violated. -Var=foxBMS_TimingViolation10ms bit 5,1 -m /ln:"timing violation 10ms task" // Indicates whether the timing of the 10ms task has been violated. -Var=foxBMS_TimingViolation100ms bit 4,1 -m /ln:"timing violation 100ms task" // Indicates whether the timing of the 100ms task has been violated. -Var=foxBMS_TimingViolation100msAlgo bit 3,1 -m /ln:"timing violation 100ms algorithm task" // Indicates whether the timing of the 100ms algorithm task has been violated. -Var=foxBMS_TimingViolation10msRec bit 13,1 -m /ln:"timing violation 10ms task recorded" // Indicates whether a violation of the timing of the 10ms task has been recorded. -Var=foxBMS_TimingViolation100msRec bit 12,1 -m /ln:"timing violation 100ms task recorded" // Indicates whether a violation of the timing of the 100ms task has been recorded. -Var=foxBMS_TimingViolation100msAlgoR bit 11,1 -m /ln:"timing violation 100ms algorithm task recorded" // Indicates whether a violation of the timing of the 100ms algorithm task has been recorded. -Var=foxBMS_TimingViolationEngineRec bit 15,1 -m /ln:"timing violation engine task recorded" // Indicates whether a violation of the timing of the engine task has been recorded. -Var=foxBMS_TimingViolation1msRec bit 14,1 -m /ln:"timing violation 1ms task recorded" // Indicates whether a violation of the timing of the 1ms task has been recorded. +Mux=Application 0,8 10h +Var=SOC_algorithm unsigned 8,4 -m /max:1 /e:f_SocAlgorithm +Var=SOE_algorithm unsigned 12,4 -m /max:1 /e:f_SoeAlgorithm +Var=SOF_algorithm unsigned 16,4 -m /max:1 /e:f_SofAlgorithm +Var=SOH_algorithm unsigned 20,4 -m /max:1 /e:f_SohAlgorithm +Var=Balancing_strategy unsigned 24,4 -m /max:1 /e:f_BalancingStrategy +Var=IMD unsigned 28,4 -m /max:1 /e:f_Imd +Var=Rtos unsigned 32,4 -m /max:1 /e:f_Rtos -[foxBMS_DebugResponse] -ID=227h // (in:can_cbs_tx_debug-response.c:CANTX_DebugResponse, fv:tx) +[f_DebugBuildConfiguration] Len=8 -Mux=foxBMS_McuWaferInformation 0,8 3 -m -Var=MCU_waferNumber unsigned 8,8 -m /max:1 /ln:"wafer number of the MCU" // wafer number of the MCU (read from DIEDL register) -Var=MCU_xWaferCoordinate unsigned 28,12 -m /max:1 /ln:"x wafer coordinate" // x coordinate of the MCU die on the wafer (read from DIEIDL register) -Var=MCU_yWaferCoordinate unsigned 16,12 -m /max:1 /ln:"y wafer coordinate" // y coordinate of the MCU die on the wafer (read from DIEIDL register) +Mux=Slave 0,8 0 +Var=AFE unsigned 8,8 /max:1 /e:f_Afes +Var=TemperatureSensor unsigned 16,8 -m /max:1 /e:f_TemperatureSensors +Var=TemperatureSensorMethod unsigned 24,8 -m /max:1 /e:f_TemperatureSensorMethod -[foxBMS_DebugResponse] +[f_DebugResponse] +ID=301h // Responses to the 'Debug' message (in:can_cbs_tx_debug-response.c:CANTX_DebugResponse, fv:tx) Len=8 -Mux=foxBMS_McuLotNumber 0,8 2 -m -Var=MCU_LotNumber unsigned 8,32 -m /max:1 /ln:"lot number of the MCU" // lot number of the MCU (read from DIEIDH register) +Mux=McuWaferInformation 0,8 3 -m +Var=Number unsigned 8,8 -m /max:1 /ln:"Number" // wafer number of the MCU (read from DIEDL register) +Var=CoordinateX unsigned 28,12 -m /max:1 /ln:"CoordinateX" // x coordinate of the MCU die on the wafer (read from DIEIDL register) +Var=CoordinateY unsigned 16,12 -m /max:1 /ln:"CoordinateY" // y coordinate of the MCU die on the wafer (read from DIEIDL register) -[foxBMS_DebugResponse] +[f_DebugResponse] +Len=8 +Mux=McuLotNumber 0,8 2 -m +Var=LotNumber unsigned 8,32 -m /max:1 /ln:"LotNumber" // lot number of the MCU (read from DIEIDH register) + +[f_DebugResponse] Len=8 -Mux=foxBMS_McuUniqueDieId 0,8 1 -m -Var=MCU_uniqueId unsigned 8,32 -m // Content of Device Identification Register (DEVID) +Mux=McuUniqueDieId 0,8 1 -m +Var=UniqueId unsigned 8,32 -m /ln:"UniqueId" // Content of Device Identification Register (DEVID) -[foxBMS_DebugResponse] +[f_DebugResponse] Len=8 -Mux=foxBMS_BmsSoftwareVersionInfo 0,8 0 -m -Var=foxBMS_dirtyFlag bit 38,1 -m -Var=foxBMS_majorVersionNumber unsigned 8,8 -m -Var=foxBMS_minorVersionNumber unsigned 16,8 -m -Var=foxBMS_patchVersionNumber unsigned 24,8 -m -Var=foxBMS_releaseDistance unsigned 32,5 -m -Var=foxBMS_releaseDistanceOverflow bit 37,1 -m -Var=foxBMS_underVersionControl bit 39,1 -m +Mux=BmsSoftwareVersionInfo 0,8 0 -m +Var=DirtyFlag bit 38,1 -m /e:f_YesNoFlag /ln:"DirtyFlag" +Var=MajorVersionNumber unsigned 8,8 -m /ln:"MajorVersionNumber" +Var=MinorVersionNumber unsigned 16,8 -m /ln:"MinorVersionNumber" +Var=PatchVersionNumber unsigned 24,8 -m /ln:"PatchVersionNumber" +Var=ReleaseDistance unsigned 32,5 -m /ln:"ReleaseDistance" +Var=ReleaseDistanceOverflow bit 37,1 -m /e:f_YesNoFlag /ln:"ReleaseDistanceOverflow" +Var=UnderVersionControl bit 39,1 -m /e:f_YesNoFlag /ln:"UnderVersionControl" -[foxBMS_DebugResponse] +[f_DebugResponse] Len=8 -Mux=foxBMS_BootInformation 0,8 0Fh -m -Var=foxBMS_MagicBootData unsigned 8,56 -m /max:1 +Mux=BootInformation 0,8 0Fh -m +Var=MagicBootData unsigned 8,56 -m /max:1 /ln:"MagicBootData" -[foxBMS_DebugResponse] +[f_DebugResponse] Len=8 -Mux=foxBMS_RtcTime 0,8 4 -m +Mux=RtcTime 0,8 4 -m Var=GetDay unsigned 35,5 -m Var=GetHours unsigned 27,5 -m Var=GetHundredthOfSeconds unsigned 8,7 -m Var=GetMinutes unsigned 21,6 -m -Var=GetMonth unsigned 40,4 -m /e:foxBMS_RtcMonth +Var=GetMonth unsigned 40,4 -m /e:f_RtcMonth Var=GetSeconds unsigned 15,6 -m -Var=GetWeekday unsigned 32,3 -m /e:foxBMS_RtcWeekday +Var=GetWeekday unsigned 32,3 -m /e:f_RtcWeekday Var=GetYear unsigned 44,7 -m -[foxBMS_DebugResponse] +[f_DebugResponse] Len=8 -Mux=foxBMS_CommitHash 0,8 5 -m +Mux=CommitHash 0,8 5 -m Var=shortHash string 8,56 -m -[foxBMS_UnsupportedMultiplexerVal] -ID=201h // (in:can_cbs_tx_debug-unsupported-multiplexer-values.c:CANTX_UnsupportedMultiplexerValue, fv:tx) +[f_DebugUnsupportedMultiplexerVal] +ID=302h // (in:can_cbs_tx_debug-unsupported-multiplexer-values.c:CANTX_DebugUnsupportedMultiplexerVal, fv:tx) Len=8 -Var=foxBMS_MessageId unsigned 0,32 -m /max:1 -Var=foxBMS_MultiplexerValue unsigned 32,32 -m /max:1 +Var=MessageId unsigned 0,32 -m /max:1 /ln:"MessageId" +Var=MultiplexerValue unsigned 32,32 -m /max:1 /ln:"MultiplexerValue" -[foxBMS_FatalErrors] -ID=0FFh // (in:can_cbs_tx_crash-dump.c:CANTX_SendReasonsForFatalErrors, fv:tx) +[f_PackLimits] +ID=232h // Electrical limit information (in:can_cbs_tx_pack-limits.c:CANTX_PackLimits, fv:tx) Len=8 -Mux=StackOverflow 0,8 0 -m +CycleTime=100 -p +Var=MaximumChargeCurrent unsigned 12,12 -m /u:A /f:0.25 /ln:"MaximumChargeCurrent" // Maximum battery pack charge current +Var=MaximumDischargeCurrent unsigned 0,12 -m /u:A /f:0.25 /ln:"MaximumDischargeCurrent" // Maximum battery pack discharge current +Var=MaximumChargePower unsigned 36,12 -m /u:kW /f:0.1 /ln:"MaximumChargePower" // Maximum battery pack charge power +Var=MaximumDischargePower unsigned 24,12 -m /u:kW /f:0.1 /ln:"MaximumDischargePower" // Maximum battery pack discharge power +Var=MaximumBatteryVoltage unsigned 48,8 -m /u:V /f:4 /ln:"MaximumBatteryVoltage" // Maximum allowed battery pack voltage (defined by either cell limits or restricted by the charging algorithm) +Var=MinimumBatteryVoltage unsigned 56,8 -m /u:V /f:4 /ln:"MinimumBatteryVoltage" // Minimum allowed battery pack voltage (defined by the cell limits or application specification) -[foxBMS_AerosolSensor] -ID=3C4h // (in:can_cbs_rx_aerosol-sensor.c:CANRX_AerosolSensor, fv:rx) +[f_PackMinimumMaximumValues] +ID=231h // (in:can_cbs_tx_pack-minimum-maximum-values.c:CANTX_PackMinimumMaximumValues, fv:tx) +Len=8 +CycleTime=100 -p +Var=MinimumCellVoltage signed 14,14 -m /u:mV /ln:"MinimumCellVoltage" // Minimum cell voltage of all connected strings, if no string connected maximum value of whole system is transmitted +Var=MaximumCellVoltage signed 0,14 -m /u:mV /ln:"MaximumCellVoltage" // Maximum cell voltage of all connected strings, if no string connected maximum value of whole system is transmitted +Var=MaximumCellTemperature signed 48,8 -m /u:degC /ln:"MaximumCellTemperature" // Maximum cell temperature of all connected strings, if no string connected maximum value of whole system is transmitted +Var=MinimumCellTemperature signed 56,8 -m /u:degC /ln:"MinimumCellTemperature" // Minium cell temperature of all connected string, if no string connected maximum value of whole system is transmitted +Var=CoolingInletTemperature signed 32,8 -m /u:degC /ln:"CoolingInletTemperature" // Temperature of the coolant before it enters the cooling system +Var=CoolingOutletTemperature signed 40,8 -m /u:degC /ln:"CoolingOutletTemperature" // Temperature of the coolant after it passes the cooling system + +[f_PackStateEstimation] +ID=235h // (in:can_cbs_tx_pack-state-estimation.c:CANTX_PackStateEstimation, fv:tx) +Len=8 +CycleTime=1000 -p +Var=MinimumSoc unsigned 0,10 -m /u:% /f:0.1 /ln:"MinimumSoc" // Minimum SOC currently connected to HV bus (100% if all strings connected and all strings at 100%) +Var=MinimumSoe unsigned 20,10 -m /u:% /f:0.1 /ln:"MinimumSoe" // Minimum SOE currently connected to HV bus (100% if all strings connected and all strings at 100%) +Var=Energy unsigned 48,16 -m /u:kWh /f:0.1 /ln:"Energy" // Energy left in Wh that is currently connected to HV bus +Var=Soh unsigned 40,8 -m /u:% /f:0.5 /ln:"Soh" +Var=MaximumSoc unsigned 10,10 -m /u:% /f:0.1 /ln:"MaximumSoc" // Maximum SOC currently connected to HV bus (100% if all strings connected and all strings at 100%) +Var=MaximumSoe unsigned 30,10 -m /u:% /f:0.1 /ln:"MaximumSoe" // Maximum SOE currently connected to HV bus (100% if all strings connected and all strings at 100%) + +[f_PackValuesP0] +ID=233h // (in:can_cbs_tx_pack-values-p0.c:CANTX_PackValuesP0, fv:tx) +Len=8 +CycleTime=100 -p +Var=Current signed 47,17 -m /u:A /f:0.01 /ln:"Current" // Battery pack current +Var=BatteryVoltage signed 0,15 -m /u:V /f:0.1 /ln:"BatteryVoltage" // Battery voltage between negative and positive pole of the battery +Var=BusVoltage signed 15,15 -m /u:V /f:0.1 /ln:"BusVoltage TODO" // Battery voltage between negative pole and after main positive contactor TODO +Var=Power signed 30,17 -m /u:kW /f:0.01 /ln:"Power" // Battery power + +[f_PackValuesP1] +ID=234h // (in:can_cbs_tx_pack-values-p1.c:CANTX_PackValuesP1, fv:tx) Len=8 +CycleTime=100 -p +Var=InsulationResistance unsigned 0,13 -m /u:kOhm /f:7 /ln:"BatteryVoltage" // Shows the latest measured insulation resistance value + +[f_StringMinimumMaximumValues] +ID=241h // Message contains minimum and maximum cell temperature and cell voltage values of respective string (in:can_cbs_tx_string-minimum-maximum-values.c:CANTX_StringMinimumMaximumValues, fv:tx) +Len=8 +CycleTime=100 -p +Mux=String0 4,4 0 -m +Var=MinimumCellVoltage signed 22,14 -m /u:mV /ln:"MinimumCellVoltage" // Minimum cell voltage in string 0 +Var=MaximumCellVoltage signed 8,14 -m /u:mV /ln:"MaximumCellVoltage" // Maximum cell voltage in string 0 +Var=MaximumCellTemperature signed 36,9 -m /u:degC /f:0.5 /ln:"MaximumCellTemperature" // Maximum cell temperature in string 0 +Var=MinimumCellTemperature signed 45,9 -m /u:degC /f:0.5 /ln:"MinimumCellTemperature" // Minium cell temperature in string 0 + +[f_StringState] +ID=240h // Message contains string related error and warning flags (in:can_cbs_tx_string-state.c:CANTX_StringState, fv:tx) +Len=8 +CycleTime=100 -p +Mux=String0 4,4 0 -m +Var=IsStringConnected bit 3,1 -m /e:f_YesNoFlag // 0x00: String not connected, 0x01: String connected to HV bus +Var=IsBalancingActive bit 2,1 -m /e:f_YesNoFlag // 0x00: No balancing active, 0x01: Balancing in this string active +Var=OvertemperatureChargeMslError bit 15,1 -m /e:f_ErrorFlag // 0x00: No error, 0x01: Error: Flag will be set if maximum cell temperature is above 45 degree celsius. +Var=UndertemperatureChargeMslError bit 14,1 -m /e:f_ErrorFlag // 0x00: No error, 0x01: Error: Flag will be set if minimum cell temperature is below 0 degree celsius. +Var=OvertemperatureDischargeMslError bit 13,1 -m /e:f_ErrorFlag // 0x00: No error, 0x01: Error: Flag will be set if maximum cell temperature is above 60 degree celsius. +Var=UndertemperatureDischargeMslErro bit 12,1 -m /e:f_ErrorFlag /ln:"UndertemperatureDischargeMslError" // Flag indicates if the minimum cell temperature is below -20 degree celsius during discharge +Var=CellOvercurrentChargeMslError bit 11,1 -m /e:f_ErrorFlag // Flag will be set if string charge current is above . +Var=CellOvercurrentDischargeMslError bit 10,1 -m /e:f_ErrorFlag // 0x00: No error, 0x01: Error: Flag will be set if discharge current is above maximum string current. +Var=OvervoltageMslError bit 9,1 -m /e:f_ErrorFlag // 0x00: No error, 0x01: Error: Flag will be set if maximum cell voltage is above 4200mV. +Var=UndervoltageMslError bit 8,1 -m /e:f_ErrorFlag // 0x00: No error, 0x01: Error: Flag will be set if minimum cell voltage is below 3000mV. This equals roughly 4% remaining SOC. Minimum data sheet values if 2500mV. +Var=DeepDischargeError bit 0,1 -m /e:f_ErrorFlag // A deep dicharge in at least one cell in the string has been detected +Var=StringCurrentMeasurementError bit 44,1 -m /e:f_ErrorFlag // Current measurement not working +Var=PositiveContactorError bit 39,1 -m /e:f_ErrorFlag // 0x00: No error, 0x01: Error +Var=OpenWireError bit 54,1 -m /e:f_ErrorFlag // Indicates broken/not connected sense wire to at least one cell in the string +Var=CellVoltagePlausibilityError bit 51,1 -m /e:f_ErrorFlag // 0x00: No error, 0x01: Error +Var=CellTemperaturePlausibilityError bit 52,1 -m /e:f_ErrorFlag // 0x00: No error, 0x01: Error +Var=StringVoltagePlausibilityError bit 50,1 -m /e:f_ErrorFlag // 0x00: No error, 0x01: Error +Var=SlaveHardwareError bit 37,1 -m /e:f_ErrorFlag // 0x00: No error, 0x01: Error +Var=DaisyChainBaseCommunicationError bit 36,1 -m /e:f_ErrorFlag // Indicates whether a generic error (i.e., SPI communication error) occurred in one of the AFEs in the main diasy chain (i.e., base diasy chain) in string 0 +Var=DaisyChainBaseCrcError bit 34,1 -m /e:f_ErrorFlag // Indicates whether a CRC error occurred in one of the AFEs in the main diasy chain (i.e., base diasy chain) in string 0 +Var=DaisyChainBaseVoltMeasOorError bit 32,1 -m /e:f_ErrorFlag /ln:"DaisyChainBaseVoltageMeasurementOutOfRangeError" // Indicates whether an error occurred during the voltage measurement in one of the AFEs in the main diasy chain (i.e., base diasy chain) in string 0 +Var=DaisyChainBaseTempMeasOorError bit 46,1 -m /e:f_ErrorFlag /ln:"DaisyChainBaseTemperatureMeasurementOutOfRangeError" // Indicates whether an error occurred during the temperature measurement in one of the AFEs in the main diasy chain (i.e., base diasy chain) in string 0 +Var=CoulombCountingMeasurementError bit 43,1 -m /e:f_ErrorFlag // Dedeciated coulomb counting sensing is not working +Var=EnergyCountingMeasurementError bit 42,1 -m /e:f_ErrorFlag // Dedeciated energy counting sensing is not working +Var=VoltageSpreadPlausibilityError bit 48,1 -m /e:f_ErrorFlag // 0x00: No error, 0x01: Error +Var=TemperatureSpreadPlausibilityErr bit 49,1 -m /e:f_ErrorFlag /ln:"TemperatureSpreadPlausibilityError" // 0x00: No error, 0x01: Error +Var=IsStringFuseBlown bit 1,1 -m /e:f_YesNoFlag // Indicates whether the fuse is blown or not +Var=OvervoltageMolWarning bit 17,1 -m /e:f_WarningFlag +Var=UndervoltageMolWarning bit 16,1 -m /e:f_WarningFlag +Var=OvertemperatureChargeMolWarning bit 23,1 -m /e:f_WarningFlag +Var=OvertemperatureDischargeMolWarni bit 21,1 -m /e:f_WarningFlag /ln:"OvertemperatureDischargeMolWarning" +Var=UndertemperatureChargeMolWarning bit 22,1 -m /e:f_WarningFlag +Var=UndertemperatureDischargeMolWarn bit 20,1 -m /e:f_WarningFlag /ln:"UndertemperatureDischargeMolWarning" +Var=CellOvercurrentChargeMolWarning bit 19,1 -m /e:f_WarningFlag +Var=CellOvercurrentDischargeMolWarni bit 18,1 -m /e:f_WarningFlag /ln:"CellOvercurrentDischargeMolWarning" +Var=OvertemperatureChargeRslWarning bit 31,1 -m /e:f_WarningFlag +Var=UndertemperatureChargeRslWarning bit 30,1 -m /e:f_WarningFlag +Var=OvertemperatureDischargeRslWarni bit 29,1 -m /e:f_WarningFlag /ln:"OvertemperatureDischargeRslWarning" +Var=UndertemperatureDischargeRslWarn bit 28,1 -m /e:f_WarningFlag /ln:"UndertemperatureDischargeRslWarning" +Var=CellOvercurrentChargeRslWarning bit 27,1 -m /e:f_WarningFlag +Var=CellOvercurrentDischargeRslWarni bit 26,1 -m /e:f_WarningFlag +Var=OvervoltageRslWarning bit 25,1 -m /e:f_WarningFlag +Var=UndervoltageRslWarning bit 24,1 -m /e:f_WarningFlag +Var=NegativeContactorError bit 38,1 -m /e:f_ErrorFlag // 0x00: No error, 0x01: Error +Var=StringVoltageMeasurementError bit 41,1 -m /e:f_ErrorFlag // Dedicated string voltage measurement not working +Var=FusedStringVoltageMeasurementErr bit 40,1 -m /e:f_ErrorFlag /ln:"FusedStringVoltageMeasurementError" // Dedicated fused string voltage measurement not working +Var=PackVoltageMeasurementError bit 55,1 -m /e:f_ErrorFlag // Dedicated pack voltage measurement not working +Var=StringOvercurrentError bit 56,1 -m /e:f_ErrorFlag // Flag will be set if current capability of the string is violated (BS_MAXIMUM_STRING_CURRENT_mA) + +[f_StringStateEstimation] +ID=245h // Message contains SOC, SOE and SOH state estimations (in:can_cbs_tx_string-state-estimation.c:CANTX_StringStateEstimation, fv:tx) +Len=8 +CycleTime=1000 -p +Mux=String0 0,4 0 -m +Var=MinimumSoc unsigned 4,9 -m /u:% /f:0.2 +Var=MaximumSoc unsigned 13,9 -m /u:% /f:0.2 +Var=MinimumSoe unsigned 22,9 -m /u:% /f:0.2 // SOE is depending on current direction, if battery system is charging: SOE_max is transmitted, else SOE_min +Var=Energy unsigned 49,15 -m /u:kWh /f:0.01 // Remaining energy left in this string +Var=Soh unsigned 40,9 -m /u:% /f:0.2 +Var=MaximumSoe unsigned 31,9 -m /u:% /f:0.2 // SOE is depending on current direction, if battery system is charging: SOE_max is transmitted, else SOE_min + +[f_StringValuesP0] +ID=243h // Message contains string voltage, current and power (in:can_cbs_tx_string-values-p0.c:CANTX_StringValuesP0, fv:tx) +Len=8 +CycleTime=100 -p +Mux=String0 0,3 0 -m +Var=Current signed 21,18 -m /u:A /f:0.01 /ln:"Current" // Current of string 0 +Var=Voltage signed 3,18 -m /u:V /f:0.01 /ln:"Voltage" // Voltage of string 0 +Var=Power signed 39,18 -m /u:kW /f:0.01 /ln:"Power" // Power of string 0 + +[f_StringValuesP1] +ID=244h // Message contains energy counting value (in:can_cbs_tx_string-values-p1.c:CANTX_StringValuesP1, fv:tx) +Len=8 +CycleTime=100 -p +Mux=String0 0,4 0 -m +Var=EnergyCounter signed 8,32 -m /u:Wh /ln:"EnergyCounter" // Energy counting value for string 0 + +[IMD_Info] +ID=037h // (in:can_cbs_rx_imd-info.c:CANRX_ImdInfo, fv:rx) +Len=6 CycleTime=1000 -Var=particulate_matter_concentration unsigned 0,16 -m -Var=low_power_mode_wake_up_threshold unsigned 16,16 -m -Var=sensor_status unsigned 37,3 -m -Var=sensor_faults unsigned 32,5 -m -Var=rolling_counter unsigned 45,3 -m -Var=CRC_check_code unsigned 56,8 -m +Var=II_VIFC_STATUS_04_VIFC_CmdError bit 36,1 /e:VtSig_IG_VIFC_STATUS_04_VIFC_Cmd +Var=II_VIFC_STATUS_13_ST_ParamConfig bit 45,1 /e:VtSig_IG_VIFC_STATUS_13_ST_Param +Var=II_VIFC_STATUS_12_ST_Overall bit 44,1 /e:VtSig_IG_VIFC_STATUS_13_ST_Param +Var=II_VIFC_STATUS_08_Outdated bit 40,1 +Var=II_VIFC_STATUS_02_IMC_Alive bit 34,1 /e:VtSig_IG_VIFC_STATUS_04_VIFC_Cmd +Var=II_VIFC_STATUS_01_IMC_Connection bit 33,1 /e:VtSig_IG_VIFC_STATUS_04_VIFC_Cmd +Var=II_VIFC_STATUS_00_IsoMeasurement bit 32,1 /e:VtSig_IG_VIFC_STATUS_00_IsoMeasu +Var=II_IMC_R_ISO unsigned 0,16 /u:kOhm +Var=II_IMC_STATUS_05_IsoWarning bit 21,1 /e:VtSig_IG_IMC_STATUS_05_IsoWarnin +Var=II_IMC_STATUS_04_Selftest bit 20,1 /e:VtSig_IG_IMC_STATUS_04_Selftest +Var=II_IMC_STATUS_03_Calibration bit 19,1 /e:VtSig_IG_IMC_STATUS_04_Selftest +Var=II_IMC_STATUS_02_System bit 18,1 /e:VtSig_IG_VIFC_STATUS_04_VIFC_Cmd +Var=II_IMC_STATUS_01_Ground bit 17,1 /e:VtSig_IG_VIFC_STATUS_04_VIFC_Cmd +Var=II_IMC_STATUS_00_IsoFailure bit 16,1 /e:VtSig_IG_VIFC_STATUS_04_VIFC_Cmd + +[IMD_Request] +ID=022h // (in:can_cbs_tx_imd-request.c:CANTX_ImdRequest, fv:tx) +Len=5 +Mux=S_IMC_GET_MANUFACTURER 0,8 3Dh +Var=MG_IMC_MANUFACT_INDEX unsigned 8,16 + +[IMD_Request] +Len=5 +Mux=S_VIFC_GET_POWER_MODE 0,8 DFh +Var=MG_VIFC_POWER_MODE unsigned 8,16 /e:VtSig_IG_VIFC_POWER_MODE + +[IMD_Request] +Len=5 +Mux=S_VIFC_CTL_POWER_MODE 0,8 C9h +Var=MC_VIFC_POWER_MODE unsigned 8,16 /e:VtSig_IG_VIFC_POWER_MODE + +[IMD_Request] +Len=5 +Mux=S_VIFC_GET_VERSION 0,8 DEh +Var=MG_VIFC_VERSION_INDEX unsigned 8,16 /e:VtSig_MG_VIFC_VERSION_INDEX + +[IMD_Request] +Len=5 +Mux=S_IMC_GET_VERSION 0,8 33h +Var=MG_IMC_VERSION_INDEX unsigned 8,16 /e:VtSig_MG_VIFC_VERSION_INDEX + +[IMD_Request] +Len=5 +Mux=S_IMC_GET_EEPROM 0,8 3Bh +Var=MG_IMC_EEPROM_INDEX unsigned 8,16 + +[IMD_Request] +Len=5 +Mux=S_VIFC_CTL_MEASUREMENT 0,8 CBh +Var=MC_VIFC_MEASURE_MODE unsigned 8,16 /e:VtSig_MC_VIFC_MEASURE_MODE + +[IMD_Request] +Len=5 +Mux=S_IMC_SET_MEAN_FACTOR 0,8 2Bh +Var=MS_IMC_MEAN_FACTOR unsigned 8,16 /min:1 /max:20 /d:10 + +[IMD_Request] +Len=5 +Mux=S_IMC_SET_EEPROM 0,8 2Ah +Var=MS_IMC_EEPROM_DATA unsigned 24,16 +Var=MS_IMC_EEPROM_INDEX unsigned 8,16 + +[IMD_Request] +Len=5 +Mux=S_VIFC_CTL_LOCK 0,8 CAh +Var=MC_VIFC_LOCK_PWD unsigned 24,16 +Var=MC_VIFC_LOCK_MODE unsigned 8,16 /e:VtSig_IC_VIFC_LOCK_MODE + +[IMD_Request] +Len=5 +Mux=S_VIFC_CTL_DUMMY 0,8 0 +Var=IMD_Request_DataWord2 unsigned 24,16 +Var=IMD_Request_DataWord1 unsigned 8,16 + +[IMD_Request] +Len=5 +Mux=S_VIFC_SET_HV_RELAIS 0,8 D2h +Var=MS_VIFC_HV_RELAIS_STATE unsigned 24,16 /e:VtSig_IS_VIFC_HV_RELAIS_STATE +Var=MS_VIFC_HV_RELAIS unsigned 8,16 /e:VtSig_IS_VIFC_HV_RELAIS + +[IMD_Request] +Len=5 +Mux=S_IMC_SET_R_ISO_WRN_THR 0,8 29h +Var=MS_IMC_R_ISO_WRN_THR unsigned 8,16 /u:kOhm /min:40 /max:2000 /d:200 + +[IMD_Request] +Len=5 +Mux=S_IMC_CTL_CALIB 0,8 22h +Var=MC_IMC_CALIB_STEP unsigned 8,16 /e:VtSig_IC_IMC_CALIB_STEP + +[IMD_Request] +Len=5 +Mux=S_IMC_CTL_SELFTEST 0,8 21h +Var=MC_IMC_SELFTEST_SCR unsigned 8,16 /e:VtSig_IC_IMC_SELFTEST_SCR /d:6 + +[IMD_Request] +Len=5 +Mux=S_IMC_SET_R_ISO_ERR_THR 0,8 28h +Var=MS_IMC_R_ISO_ERR_THR unsigned 8,16 /u:kOhm /min:30 /max:1000 /d:100 + +[IMD_Request] +Len=5 +Mux=S_IMD_ERROR_FRAME 0,8 FFh + +[IMD_Request] +Len=5 +Mux=S_VIFC_GET_IMC_ALIVE 0,8 E2h + +[IMD_Request] +Len=5 +Mux=S_VIFC_GET_TEMP 0,8 E1h + +[IMD_Request] +Len=5 +Mux=S_VIFC_GET_LOCK 0,8 E0h + +[IMD_Request] +Len=5 +Mux=S_VIFC_GET_HV_RELAIS 0,8 DDh + +[IMD_Request] +Len=5 +Mux=S_VIFC_GET_STATUS 0,8 DCh + +[IMD_Request] +Len=5 +Mux=S_VIFC_CTL_IMC_RESET 0,8 C8h + +[IMD_Request] +Len=5 +Mux=S_IMC_GET_TEST_CNT 0,8 5Ah + +[IMD_Request] +Len=5 +Mux=S_IMC_GET_MEAN_FACTOR 0,8 3Ch + +[IMD_Request] +Len=5 +Mux=S_IMC_GET_HV_2 0,8 3Ah + +[IMD_Request] +Len=5 +Mux=S_IMC_GET_R_ISO_WRN_THR 0,8 39h + +[IMD_Request] +Len=5 +Mux=S_IMC_GET_STATUS 0,8 37h + +[IMD_Request] +Len=5 +Mux=S_IMC_GET_HV_1 0,8 36h + +[IMD_Request] +Len=5 +Mux=S_IMC_GET_R_ISO 0,8 35h + +[IMD_Request] +Len=5 +Mux=S_IMC_GET_R_ISO_ERR_THR 0,8 32h + +[IMD_Request] +Len=5 +Mux=S_IMC_CTL_SYS_UPDATE 0,8 23h + +[IMD_Response] +ID=023h // (in:can_cbs_rx_imd-response.c:CANRX_ImdResponse, fv:rx) +Len=5 +Mux=S_VIFC_GET_STATUS 0,8 DCh +Var=IG_VIFC_STATUS_04_VIFC_CmdError bit 12,1 /e:VtSig_IG_VIFC_STATUS_04_VIFC_Cmd +Var=IG_VIFC_STATUS_13_ST_ParamConfig bit 21,1 /e:VtSig_IG_VIFC_STATUS_13_ST_Param +Var=IG_VIFC_STATUS_12_ST_Overall bit 20,1 /e:VtSig_IG_VIFC_STATUS_13_ST_Param +Var=IG_VIFC_STATUS_08_Outdated bit 16,1 +Var=IG_VIFC_STATUS_02_IMC_Alive bit 10,1 /e:VtSig_IG_VIFC_STATUS_04_VIFC_Cmd +Var=IG_VIFC_STATUS_01_IMCConnection bit 9,1 /e:VtSig_IG_VIFC_STATUS_04_VIFC_Cmd +Var=IG_VIFC_STATUS_00_IsoMeasurement bit 8,1 /e:VtSig_IG_VIFC_STATUS_00_IsoMeasu + +[IMD_Response] +Len=5 +Mux=S_IMC_GET_STATUS 0,8 37h +Var=IG_IMC_STATUS_EXT_15_Reserved bit 39,1 /e:VtSig_IG_VIFC_STATUS_04_VIFC_Cmd +Var=IG_IMC_STATUS_EXT_06_Reserved bit 30,1 /e:VtSig_IG_VIFC_STATUS_04_VIFC_Cmd +Var=IG_IMC_STATUS_EXT_14_IDString bit 38,1 /e:VtSig_IG_VIFC_STATUS_04_VIFC_Cmd +Var=IG_IMC_STATUS_EXT_13_HV2 bit 37,1 /e:VtSig_IG_VIFC_STATUS_04_VIFC_Cmd +Var=IG_IMC_STATUS_EXT_12_HV1 bit 36,1 /e:VtSig_IG_VIFC_STATUS_04_VIFC_Cmd +Var=IG_IMC_STATUS_EXT_11_FuseBits bit 35,1 /e:VtSig_IG_VIFC_STATUS_04_VIFC_Cmd +Var=IG_IMC_STATUS_EXT_10_12V_NEG bit 34,1 /e:VtSig_IG_VIFC_STATUS_04_VIFC_Cmd +Var=IG_IMC_STATUS_EXT_09_12V_POS bit 33,1 /e:VtSig_IG_VIFC_STATUS_04_VIFC_Cmd +Var=IG_IMC_STATUS_EXT_08_TestPulse bit 32,1 /e:VtSig_IG_VIFC_STATUS_04_VIFC_Cmd +Var=IG_IMC_STATUS_EXT_07_Parameter bit 31,1 /e:VtSig_IG_VIFC_STATUS_04_VIFC_Cmd +Var=IG_IMC_STATUS_EXT_05_Stack bit 29,1 /e:VtSig_IG_VIFC_STATUS_04_VIFC_Cmd +Var=IG_IMC_STATUS_EXT_04_RAM bit 28,1 /e:VtSig_IG_VIFC_STATUS_04_VIFC_Cmd +Var=IG_IMC_STATUS_EXT_03_Flash bit 27,1 /e:VtSig_IG_VIFC_STATUS_04_VIFC_Cmd +Var=IG_IMC_STATUS_EXT_02_EEPROM bit 26,1 /e:VtSig_IG_VIFC_STATUS_04_VIFC_Cmd +Var=IG_IMC_STATUS_EXT_01_Hardware bit 25,1 /e:VtSig_IG_VIFC_STATUS_04_VIFC_Cmd +Var=IG_IMC_STATUS_EXT_00_Calibration bit 24,1 /e:VtSig_IG_VIFC_STATUS_04_VIFC_Cmd +Var=IG_IMC_STATUS_05_IsoWarning bit 13,1 /e:VtSig_IG_IMC_STATUS_05_IsoWarnin +Var=IG_IMC_STATUS_04_Selftest bit 12,1 /e:VtSig_IG_IMC_STATUS_04_Selftest +Var=IG_IMC_STATUS_03_Calibration bit 11,1 /e:VtSig_IG_IMC_STATUS_04_Selftest +Var=IG_IMC_STATUS_02_System bit 10,1 /e:VtSig_IG_VIFC_STATUS_04_VIFC_Cmd +Var=IG_IMC_STATUS_01_Ground bit 9,1 /e:VtSig_IG_VIFC_STATUS_04_VIFC_Cmd +Var=IG_IMC_STATUS_00_IsoFailure bit 8,1 /e:VtSig_IG_VIFC_STATUS_04_VIFC_Cmd + +[IMD_Response] +Len=5 +Mux=S_VIFC_GET_VERSION 0,8 DEh +Var=IG_VIFC_VERSION_MIN unsigned 24,8 +Var=IG_VIFC_VERSION_INDEX unsigned 8,16 /e:VtSig_IG_VIFC_VERSION_INDEX +Var=IG_VIFC_VERSION_MAJ unsigned 32,8 + +[IMD_Response] +Len=5 +Mux=S_IMC_GET_VERSION 0,8 33h +Var=IG_IMC_VERSION_MIN unsigned 24,8 +Var=IG_IMC_VERSION_INDEX unsigned 8,16 /e:VtSig_IG_IMC_VERSION_INDEX +Var=IG_IMC_VERSION_MAJ unsigned 32,8 + +[IMD_Response] +Len=5 +Mux=S_IMC_GET_MANUFACTURER 0,8 3Dh +Var=IG_IMC_MANUFACT_INDEX unsigned 8,16 +Var=IG_IMC_MANUFACT_DATA unsigned 24,16 + +[IMD_Response] +Len=5 +Mux=S_IMC_GET_R_ISO 0,8 35h +Var=IG_IMC_R_ISO_CNT unsigned 32,8 /u:Count +Var=IG_IMC_R_ISO_BIAS unsigned 24,8 /e:VtSig_IG_IMC_R_ISO_BIAS +Var=IG_IMC_R_ISO unsigned 8,16 /u:kOhm + +[IMD_Response] +Len=5 +Mux=S_VIFC_GET_TEMP 0,8 E1h +Var=IG_VIFC_TEMP unsigned 8,16 /u:degC + +[IMD_Response] +Len=5 +Mux=S_VIFC_GET_IMC_ALIVE 0,8 E2h +Var=IG_VIFC_IMC_ALIVE unsigned 8,16 /e:VtSig_IG_VIFC_IMC_ALIVE + +[IMD_Response] +Len=5 +Mux=S_VIFC_GET_POWER_MODE 0,8 DFh +Var=IG_VIFC_POWER_MODE unsigned 8,16 /e:VtSig_IG_VIFC_POWER_MODE + +[IMD_Response] +Len=5 +Mux=S_VIFC_CTL_POWER_MODE 0,8 C9h +Var=IC_VIFC_POWER_MODE unsigned 8,16 /e:VtSig_IG_VIFC_POWER_MODE + +[IMD_Response] +Len=5 +Mux=S_IMC_SET_MEAN_FACTOR 0,8 2Bh +Var=IS_IMC_MEAN_FACTOR unsigned 8,16 + +[IMD_Response] +Len=5 +Mux=S_IMC_SET_EEPROM 0,8 2Ah +Var=IS_IMC_EEPROM_INDEX unsigned 8,16 +Var=IS_IMC_EEPROM_DATA unsigned 24,16 + +[IMD_Response] +Len=5 +Mux=S_IMC_CTL_CALIB 0,8 22h +Var=IC_IMC_CALIB_STEP unsigned 8,16 /e:VtSig_IC_IMC_CALIB_STEP + +[IMD_Response] +Len=5 +Mux=S_IMC_SET_R_ISO_WRN_THR 0,8 29h +Var=IS_IMC_R_ISO_WRN_THR unsigned 8,16 /u:kOhm + +[IMD_Response] +Len=5 +Mux=S_IMC_SET_R_ISO_ERR_THR 0,8 28h +Var=IS_IMC_R_ISO_ERR_THR unsigned 8,16 /u:kOhm + +[IMD_Response] +Len=5 +Mux=S_VIFC_CTL_LOCK 0,8 CAh +Var=IC_VIFC_LOCK_MODE unsigned 8,16 /e:VtSig_IC_VIFC_LOCK_MODE + +[IMD_Response] +Len=5 +Mux=S_VIFC_CTL_MEASUREMENT 0,8 CBh +Var=IC_VIFC_MEASURE_MODE unsigned 8,16 + +[IMD_Response] +Len=5 +Mux=S_VIFC_SET_HV_RELAIS 0,8 D2h +Var=IS_VIFC_HV_RELAIS_STATE unsigned 24,16 /e:VtSig_IS_VIFC_HV_RELAIS_STATE +Var=IS_VIFC_HV_RELAIS unsigned 8,16 /e:VtSig_IS_VIFC_HV_RELAIS + +[IMD_Response] +Len=5 +Mux=S_IMC_GET_EEPROM 0,8 3Bh +Var=IG_IMC_EEPROM_DATA unsigned 24,16 +Var=IG_IMC_EEPROM_INDEX unsigned 8,16 + +[IMD_Response] +Len=5 +Mux=S_IMC_GET_MEAN_FACTOR 0,8 3Ch +Var=IG_IMC_MEAN_FACTOR unsigned 8,16 + +[IMD_Response] +Len=5 +Mux=S_VIFC_GET_LOCK 0,8 E0h +Var=IG_VIFC_LOCK_MODE unsigned 8,16 /e:VtSig_IC_VIFC_LOCK_MODE + +[IMD_Response] +Len=5 +Mux=S_VIFC_GET_HV_RELAIS 0,8 DDh +Var=IG_VIFC_HV_RELAIS_STATE unsigned 24,16 /e:VtSig_IS_VIFC_HV_RELAIS_STATE +Var=IG_VIFC_HV_RELAIS unsigned 8,16 /e:VtSig_IS_VIFC_HV_RELAIS + +[IMD_Response] +Len=5 +Mux=S_IMD_ERROR_FRAME 0,8 FFh +Var=IG_IMD_ERROR_CODE unsigned 8,16 /e:VtSig_IG_IMD_ERROR_CODE +Var=IG_IMD_FAILED_CMD unsigned 24,8 /e:VtSig_IG_IMD_FAILED_CMD + +[IMD_Response] +Len=5 +Mux=S_IMC_GET_HV_2 0,8 3Ah +Var=IG_IMC_HV_2 unsigned 8,16 /u:Volt + +[IMD_Response] +Len=5 +Mux=S_IMC_GET_HV_1 0,8 36h +Var=IG_IMC_HV_1 unsigned 8,16 /u:Volt + +[IMD_Response] +Len=5 +Mux=S_IMC_GET_R_ISO_WRN_THR 0,8 39h +Var=IG_IMC_R_ISO_WRN_THR unsigned 8,16 /u:kOhm + +[IMD_Response] +Len=5 +Mux=S_IMC_GET_R_ISO_ERR_THR 0,8 32h +Var=IG_IMC_R_ISO_ERR_THR unsigned 8,16 /u:kOhm + +[IMD_Response] +Len=5 +Mux=S_IMC_CTL_SELFTEST 0,8 21h +Var=IC_IMC_SELFTEST_SCR unsigned 8,16 /e:VtSig_IC_IMC_SELFTEST_SCR + +[IMD_Response] +Len=5 +Mux=S_IMC_GET_TEST_CNT 0,8 5Ah +Var=IG_IMC_TEST_CNT unsigned 8,16 /u:Calls + +[IMD_Response] +Len=5 +Mux=S_VIFC_CTL_DUMMY 0,8 0 +Var=IMD_Response_DataWord2 unsigned 24,16 +Var=IMD_Response_DataWord1 unsigned 8,16 + +[IMD_Response] +Len=5 +Mux=S_VIFC_CTL_IMC_RESET 0,8 C8h + +[IMD_Response] +Len=5 +Mux=S_IMC_CTL_SYS_UPDATE 0,8 23h + +[IVT_String0_Current] +ID=521h // Current sensor string 0: current (in:can_cbs_rx_current-sensor.c:CANRX_CurrentSensor, fv:rx); +Len=6 +Var=IVT_Result_I_System_Error bit 8,1 -m +Var=IVT_Result_I_OCS bit 11,1 -m +Var=IVT_Result_I_Measurement_Error bit 9,1 -m +Var=IVT_Result_I_Channel_Error bit 10,1 -m +Var=IVT_ID_Result_I unsigned 0,8 -m /e:VtSig_IVT_ID_Result_I +Var=IVT_MsgCount_Result_I unsigned 12,4 -m +Var=IVT_Result_I signed 16,32 -m /u:mA + +[IVT_String0_CurrentCounter] +ID=527h // Current sensor string 0: coulomb counting (in:can_cbs_rx_current-sensor.c:CANRX_CurrentSensor, fv:rx) +Len=6 +Var=IVT_Result_As_System_Error bit 8,1 -m +Var=IVT_Result_As_OCS bit 11,1 -m +Var=IVT_Result_As_Measurement_Error bit 9,1 -m +Var=IVT_Result_As_Channel_Error bit 10,1 -m +Var=IVT_Result_As signed 16,32 -m /u:As +Var=IVT_MsgCount_Result_As unsigned 12,4 -m +Var=IVT_ID_Result_As unsigned 0,8 -m /min:6 /max:6 /e:VtSig_IVT_ID_Result_As /d:6 + +[IVT_String0_EnergyCounter] +ID=528h // Current sensor string 0: energy counting (in:can_cbs_rx_current-sensor.c:CANRX_CurrentSensor, fv:rx) +Len=6 +Var=IVT_Result_Wh_System_Error bit 8,1 -m +Var=IVT_Result_Wh_OCS bit 11,1 -m +Var=IVT_Result_Wh_Measurement_Error bit 9,1 -m +Var=IVT_Result_Wh_Channel_Error bit 10,1 -m +Var=IVT_Result_Wh signed 16,32 -m /u:Wh +Var=IVT_MsgCount_Result_Wh unsigned 12,4 -m +Var=IVT_ID_Result_Wh unsigned 0,8 -m /min:7 /max:7 /e:VtSig_IVT_ID_Result_Wh /d:7 + +[IVT_String0_Power] +ID=526h // Current sensor string 0: power (in:can_cbs_rx_current-sensor.c:CANRX_CurrentSensor, fv:rx) +Len=6 +Var=IVT_Result_W_System_Error bit 8,1 -m +Var=IVT_Result_W_OCS bit 11,1 -m +Var=IVT_Result_W_Measurement_Error bit 9,1 -m +Var=IVT_Result_W_Channel_Error bit 10,1 -m +Var=IVT_Result_W signed 16,32 -m /u:W +Var=IVT_MsgCount_Result_W unsigned 12,4 -m +Var=IVT_ID_Result_W unsigned 0,8 -m /min:5 /max:5 /e:VtSig_IVT_ID_Result_W /d:5 + +[IVT_String0_Temperature] +ID=525h // Current sensor string 0: temperature (in:can_cbs_rx_current-sensor.c:CANRX_CurrentSensor, fv:rx) +Len=6 +Var=IVT_Result_T_System_Error bit 8,1 -m +Var=IVT_Result_T_OCS bit 11,1 -m +Var=IVT_Result_T_Measurement_Error bit 9,1 -m +Var=IVT_Result_T_Channel_Error bit 10,1 -m +Var=IVT_ID_Result_T unsigned 0,8 -m /min:4 /max:4 /e:VtSig_IVT_ID_Result_T /d:4 +Var=IVT_Result_T signed 16,32 -m /u:degC /f:0.1 /d:0 +Var=IVT_MsgCount_Result_T unsigned 12,4 -m + +[IVT_String0_Voltage1] +ID=522h // Current sensor string 0: voltage 1 (in:can_cbs_rx_current-sensor.c:CANRX_CurrentSensor, fv:rx) +Len=6 +Var=IVT_Result_U1_System_Error bit 8,1 -m +Var=IVT_Result_U1_Measurement_Error bit 9,1 -m +Var=IVT_Result_U1_Channel_Error bit 10,1 -m +Var=IVT_Result_U1_OCS bit 11,1 -m +Var=IVT_ID_Result_U1 unsigned 0,8 -m /min:1 /max:1 /e:VtSig_IVT_ID_Result_U1 /d:1 +Var=IVT_Result_U1 signed 16,32 -m /u:mV +Var=IVT_MsgCount_Result_U1 unsigned 12,4 -m + +[IVT_String0_Voltage2] +ID=523h // Current sensor string 0: voltage 2 (in:can_cbs_rx_current-sensor.c:CANRX_CurrentSensor, fv:rx) +Len=6 +Var=IVT_Result_U2_System_Error bit 8,1 -m +Var=IVT_Result_U2_OCS bit 11,1 -m +Var=IVT_Result_U2_Measurement_Error bit 9,1 -m +Var=IVT_Result_U2_Channel_Error bit 10,1 -m +Var=IVT_ID_Result_U2 unsigned 0,8 -m /min:2 /max:2 /e:VtSig_IVT_ID_Result_U2 /d:2 +Var=IVT_MsgCount_Result_U2 unsigned 12,4 -m +Var=IVT_Result_U2 signed 16,32 -m /u:mV + +[IVT_String0_Voltage3] +ID=524h // Current sensor string 0: voltage 3 (in:can_cbs_rx_current-sensor.c:CANRX_CurrentSensor, fv:rx) +Len=6 +Var=IVT_Result_U3_System_Error bit 8,1 -m +Var=IVT_Result_U3_OCS bit 11,1 -m +Var=IVT_Result_U3_Measurement_Error bit 9,1 -m +Var=IVT_Result_U3_Channel_Error bit 10,1 -m +Var=IVT_ID_Result_U3 unsigned 0,8 -m /min:3 /max:3 /e:VtSig_IVT_ID_Result_U3 /d:3 +Var=IVT_Result_U3 signed 16,32 -m /u:mV +Var=IVT_MsgCount_Result_U3 unsigned 12,4 -m diff --git a/tools/dbc/plot_periods.py b/tools/dbc/plot_periods.py new file mode 100755 index 00000000..803aa113 --- /dev/null +++ b/tools/dbc/plot_periods.py @@ -0,0 +1,177 @@ +#!/usr/bin/env python3 +# +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# All rights reserved. +# +# SPDX-License-Identifier: BSD-3-Clause +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# We kindly request you to use one or more of the following phrases to refer to +# foxBMS in your hardware, software, documentation or advertising materials: +# +# - "This product uses parts of foxBMS®" +# - "This product includes parts of foxBMS®" +# - "This product is derived from foxBMS®" + +"""Script to plot time period in between signals""" + +import argparse +import logging +import sys +from pathlib import Path +from typing import Dict, List + +import matplotlib.pyplot as plt +import numpy as np + + +def extract_timestamps_for_ids( + log_file: Path, target_ids: List[str] +) -> Dict[str, List[float]]: + """Extracts the timestamps for each target id""" + # Check if the file exists + if not log_file.exists(): + logging.warning("The file '%s' does not exist.", log_file) + sys.exit(1) + timestamps = {target_id: [] for target_id in target_ids} + for line in log_file.read_text(encoding="utf-8").splitlines(): + if "ID:" not in line: + continue + parts = line.split() + # get the position of ID and the timestamps + id_index = parts.index("ID:") + 1 + timestamp_index = parts.index("Timestamp:") + 1 + # Extract id and timestamp + id_value = parts[id_index] + timestamp_value = float(parts[timestamp_index]) + if id_value in target_ids: + timestamps[id_value].append(timestamp_value) + return timestamps + + +def plot_stats(difference: List[float], target_id: str, show: bool = False) -> None: + """plots the periods along with statistics""" + min_diff = min(difference) + max_diff = max(difference) + mean_diff = np.mean(difference) + std_dev = np.std(difference) + # Plot time differences + fig = plt.figure() + plt.plot(difference, marker=".", label=f"ID: {target_id}") + plt.xlabel("Consecutive Signals") + plt.ylabel("Time Difference (seconds)") + plt.title("Time Difference Between Consecutive Signals") + # Mark min and max values + min_index = difference.index(min_diff) + max_index = difference.index(max_diff) + plt.scatter( + min_index, + min_diff, + marker="v", + color="red", + label=f"Min: {min_diff:.3f}s", + s=80, + ) + plt.scatter( + max_index, + max_diff, + marker="^", + color="red", + label=f"Max: {max_diff:.3f}s", + s=80, + ) + # Add dotted line for mean + plt.axhline( + y=mean_diff, color="red", linestyle="--", label=f"Mean: {mean_diff:.3f}s" + ) + # Display std deviation in the legend + legend_text = f"Std Dev: {std_dev:.3f}s" + handles, labels = plt.gca().get_legend_handles_labels() + handles.append(plt.Line2D([0], [0], color="none")) # Dummy handle for space + labels.append(legend_text) + plt.legend(handles=handles, labels=labels) + plt.grid(True) + if show: + plt.show() + else: + fig.savefig(f"{target_id}.png", dpi=fig.dpi) + + +def plot_time_differences_for_ids( + log_file: Path, target_ids: List[str], show: bool = False +) -> None: + """calls extract timestamp function and statistics plotting function""" + timestamps = extract_timestamps_for_ids(log_file, target_ids) + for target_id in target_ids: + if not timestamps[target_id]: + logging.warning("No timestamps found for the target id: %s", target_id) + continue + all_timestamps_from_id = timestamps.get(target_id) + if not len(all_timestamps_from_id) > 1: + logging.warning("Only a single occurrence for the target id: %s", target_id) + continue + differences = [] + # iterate over timestamps starting from the second element + for i, timestamp in enumerate(all_timestamps_from_id[1:], start=1): + previous_timestamp = all_timestamps_from_id[i - 1] + difference = abs(timestamp - previous_timestamp) + differences.append(round(difference, 3)) + # Calculate statistics + plot_stats(differences, target_id, show=show) + + +def main() -> None: + "Takes path and IDs are argument and calls the plot function" + parser = argparse.ArgumentParser() + parser.add_argument( + "-v", + "--verbosity", + dest="verbosity", + action="count", + default=1, + help="set verbosity level", + ) + # Add arguments for log file and target ids + parser.add_argument("log_file", type=Path, help="Path to the log file") + parser.add_argument("target_ids", type=str, nargs="+", help="List of target IDs") + parser.add_argument( + "--show", action="store_true", help="Show plots instead of saving them." + ) + args = parser.parse_args() + + if args.verbosity == 1: + logging.basicConfig(level=logging.INFO) + elif args.verbosity > 1: + logging.basicConfig(level=logging.DEBUG) + else: + logging.basicConfig(level=logging.ERROR) + + plot_time_differences_for_ids(args.log_file, args.target_ids, show=args.show) + + +if __name__ == "__main__": + main() diff --git a/tools/dbc/plot_periods_test.py b/tools/dbc/plot_periods_test.py new file mode 100755 index 00000000..3b9a1fcf --- /dev/null +++ b/tools/dbc/plot_periods_test.py @@ -0,0 +1,125 @@ +#!/usr/bin/env python3 +# +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# All rights reserved. +# +# SPDX-License-Identifier: BSD-3-Clause +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# We kindly request you to use one or more of the following phrases to refer to +# foxBMS in your hardware, software, documentation or advertising materials: +# +# - "This product uses parts of foxBMS®" +# - "This product includes parts of foxBMS®" +# - "This product is derived from foxBMS®" + +"""unit-test for plot_periods""" + +import logging +import pathlib +import unittest +from io import StringIO +from unittest.mock import patch + +import plot_periods # pylint: disable=import-error + +TEST_FILE = pathlib.Path(__file__).parent / "test_log.txt" + + +class TestPlotPeriods(unittest.TestCase): + """some tests for plot_periods""" + + def setUp(self): + """Ensure logging is configured properly before each test""" + logging.basicConfig(level=logging.NOTSET) + self.logger = logging.getLogger() + self.logger.handlers = [] # Clear existing handlers + + @patch("sys.stderr", new_callable=StringIO) + def test_no_args(self, mock_stderr): + """Check the main help option works when no args are provided""" + with self.assertRaises(SystemExit) as sys_exit: + plot_periods.main() + self.assertEqual(sys_exit.exception.code, 2) + output = mock_stderr.getvalue() + self.assertIn("usage: ", output) + + @patch("sys.stderr", new_callable=StringIO) + def test_read_from_file(self, mock_stderr): + """Check if the warning message is generated on entering a wrong file""" + # Simulate command line args + with patch("sys.argv", ["plot_periods.py", "some.txt", "0220"]): + with self.assertRaises(SystemExit) as sys_exit: + plot_periods.main() + # Check the exit code + self.assertEqual(sys_exit.exception.code, 1) + # Capture output + output = mock_stderr.getvalue() + self.assertEqual("WARNING:root:The file 'some.txt' does not exist.\n", output) + + @patch("sys.stderr", new_callable=StringIO) + def test_wrong_id(self, mock_stderr): + """Check if the warning message is generated when no timestamps are found""" + with patch("sys.argv", ["plot_periods.py", str(TEST_FILE), "0222"]): + plot_periods.main() + output = mock_stderr.getvalue() + self.assertIn("No timestamps found for the target id: 0222", output) + + def test_timestamp_is_correct(self) -> None: + """Reading CAN message log from log file""" + timestamps = plot_periods.extract_timestamps_for_ids(TEST_FILE, ["024e"]) + # timestamps extracted value should be equal to this manually extracted values i have + self.assertEqual( + timestamps, + {"024e": [132.37569, 133.675478]}, + "Returned timestamps do not match expected timestamps", + ) + + @patch("sys.stderr", new_callable=StringIO) + def test_timestamps_length(self, mock_stderr): + """Check if the warning message is generated in case of a single timestamp""" + with patch("sys.argv", ["plot_periods.py", str(TEST_FILE), "0221"]): + plot_periods.main() + output = mock_stderr.getvalue() + self.assertEqual( + "WARNING:root:Only a single occurrence for the target id: 0221\n", output + ) + + @patch("matplotlib.figure.Figure.savefig") + def test_figure_saving(self, mock_savefig): + """Test if the figure is saved as expected.""" + with patch("sys.argv", ["plot_periods.py", str(TEST_FILE), "035c"]): + plot_periods.main() + # Assert that savefig was called once + self.assertTrue(mock_savefig.called) + self.assertEqual(mock_savefig.call_count, 1) + # Assert it was called with the expected filename + mock_savefig.assert_called_with("035c.png", dpi=100.0) + + +if __name__ == "__main__": + unittest.main() diff --git a/tools/dbc/symbol_creator.py b/tools/dbc/symbol_creator.py old mode 100644 new mode 100755 index 8782e43b..2e6fe0c0 --- a/tools/dbc/symbol_creator.py +++ b/tools/dbc/symbol_creator.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -95,57 +94,76 @@ def main(): logging.basicConfig(level=logging.ERROR) logging.debug(args) + invalid = "-m /e:f_ValidInvalidFlag" + # cell voltages + all_symbols = SCRIPT_PATH / "combined_symbol_file.txt" + all_symbols.write_text( + 'FormatVersion=6.0 // Do not edit this line!\nTitle="foxBMS"\n\n\n{SENDRECEIVE}\n\n' + ) cell_voltages = SCRIPT_PATH / "multiplexed_cell_voltages_for_sym_file.txt" volts = [] - name = "cellVoltage" + name = "CellVoltage" cycle_time_ms = str(math.ceil(args.number_of_cells / 4) * 100) for i in range(0, args.number_of_cells): - volts.append("[foxBMS_CellVoltage]") + volts.append("[f_CellVoltages]") if not i: - volts.append("ID=240h") + volts.append( + "ID=250h // (in:can_cbs_tx_cell-voltages.c:CANTX_CellVoltages, fv:tx)" + ) + # pylint: disable=line-too-long + # fmt: off volts.append("Len=8") volts.append(f"CycleTime={cycle_time_ms} -p") - volts.append( - f"Mux=mux_{name}_{(i * 4):03d}_{((i * 4) + 3):03d} 0,8 {sym_hex(i)} -m" - ) - volts.append(f"Var={name}_{(i * 4):03d}_invalidFlag bit 11,1 -m") - volts.append(f"Var={name}_{((i * 4) + 1):03d}_invalidFlag bit 10,1 -m") - volts.append(f"Var={name}_{((i * 4) + 2):03d}_invalidFlag bit 9,1 -m") - volts.append(f"Var={name}_{((i * 4) + 3):03d}_invalidFlag bit 8,1 -m") - volts.append(f"Var={name}_{(i * 4):03d} unsigned 12,13 -m /u:mV") - volts.append(f"Var={name}_{((i * 4) + 1):03d} unsigned 25,13 -m /u:mV") - volts.append(f"Var={name}_{((i * 4) + 2):03d} unsigned 38,13 -m /u:mV") - volts.append(f"Var={name}_{((i * 4) + 3):03d} unsigned 51,13 -m /u:mV") + volts.append(f"Mux={name}s_{(i * 4):03d}_{((i * 4) + 3):03d} 0,8 {sym_hex(i)} -m") + volts.append(f"Var={name}_{((i * 4) + 0):03d}_invalidFlag bit 11,1 {invalid}") + volts.append(f"Var={name}_{((i * 4) + 1):03d}_invalidFlag bit 10,1 {invalid}") + volts.append(f"Var={name}_{((i * 4) + 2):03d}_invalidFlag bit 9,1 {invalid}") + volts.append(f"Var={name}_{((i * 4) + 3):03d}_invalidFlag bit 8,1 {invalid}") + volts.append(f"Var={name}_{((i * 4) + 0):03d} unsigned 12,13 -m /u:mV // Voltage of cell {(i * 4) + 0}") + volts.append(f"Var={name}_{((i * 4) + 1):03d} unsigned 25,13 -m /u:mV // Voltage of cell {(i * 4) + 1}") + volts.append(f"Var={name}_{((i * 4) + 2):03d} unsigned 38,13 -m /u:mV // Voltage of cell {(i * 4) + 2}") + volts.append(f"Var={name}_{((i * 4) + 3):03d} unsigned 51,13 -m /u:mV // Voltage of cell {(i * 4) + 3}") volts.append("") + # fmt: on + # pylint: enable=line-too-long cell_voltages.write_text("\n".join(volts)) + with open(all_symbols, "a+", encoding="utf-8") as f: + f.write("\n".join(volts)) + # cell temperatures cell_temperatures = SCRIPT_PATH / "multiplexed_cell_temperatures_for_sym_file.txt" temps = [] - name = "cellTemperature" + name = "CellTemperature" cycle_time_ms = str(math.ceil(args.number_of_cell_temperatures / 6) * 100) for i in range(0, args.number_of_cell_temperatures): - temps.append("[foxBMS_CellTemperature]") + temps.append("[f_CellTemperatures]") if not i: - temps.append("ID=250h") + temps.append( + "ID=260h // (in:can_cbs_tx_cell-temperatures.c:CANTX_CellTemperatures, fv:tx)" + ) + # pylint: disable=line-too-long + # fmt: off temps.append("Len=8") temps.append(f"CycleTime={cycle_time_ms} -p") - temps.append( - f"Mux=mux_{name}_{(i * 6):03d}_{((i * 6) + 5):03d} 0,8 {sym_hex(i)} -m" - ) - temps.append(f"Var={name}_{(i * 6):03d}_invalidFlag bit 15,1 -m") - temps.append(f"Var={name}_{((i * 6) + 1):03d}_invalidFlag bit 14,1 -m") - temps.append(f"Var={name}_{((i * 6) + 2):03d}_invalidFlag bit 13,1 -m") - temps.append(f"Var={name}_{((i * 6) + 3):03d}_invalidFlag bit 12,1 -m") - temps.append(f"Var={name}_{((i * 6) + 4):03d}_invalidFlag bit 11,1 -m") - temps.append(f"Var={name}_{((i * 6) + 5):03d}_invalidFlag bit 10,1 -m") - temps.append(f"Var={name}_{(i * 6):03d} signed 16,8 -m /u:degC") - temps.append(f"Var={name}_{((i * 6) + 1):03d} signed 24,8 -m /u:degC") - temps.append(f"Var={name}_{((i * 6) + 2):03d} signed 32,8 -m /u:degC") - temps.append(f"Var={name}_{((i * 6) + 3):03d} signed 40,8 -m /u:degC") - temps.append(f"Var={name}_{((i * 6) + 4):03d} signed 48,8 -m /u:degC") - temps.append(f"Var={name}_{((i * 6) + 5):03d} signed 56,8 -m /u:degC") + temps.append(f"Mux={name}s_{(i * 6):03d}_{((i * 6) + 5):03d} 0,8 {sym_hex(i)} -m") + temps.append(f"Var={name}_{((i * 6) + 0):03d}_invalidFlag bit 15,1 {invalid}") + temps.append(f"Var={name}_{((i * 6) + 1):03d}_invalidFlag bit 14,1 {invalid}") + temps.append(f"Var={name}_{((i * 6) + 2):03d}_invalidFlag bit 13,1 {invalid}") + temps.append(f"Var={name}_{((i * 6) + 3):03d}_invalidFlag bit 12,1 {invalid}") + temps.append(f"Var={name}_{((i * 6) + 4):03d}_invalidFlag bit 11,1 {invalid}") + temps.append(f"Var={name}_{((i * 6) + 5):03d}_invalidFlag bit 10,1 {invalid}") + temps.append(f"Var={name}_{((i * 6) + 0):03d} signed 16,8 -m /u:degC // Temperature of cell {(i * 6) + 0}") + temps.append(f"Var={name}_{((i * 6) + 1):03d} signed 24,8 -m /u:degC // Temperature of cell {(i * 6) + 1}") + temps.append(f"Var={name}_{((i * 6) + 2):03d} signed 32,8 -m /u:degC // Temperature of cell {(i * 6) + 2}") + temps.append(f"Var={name}_{((i * 6) + 3):03d} signed 40,8 -m /u:degC // Temperature of cell {(i * 6) + 3}") + temps.append(f"Var={name}_{((i * 6) + 4):03d} signed 48,8 -m /u:degC // Temperature of cell {(i * 6) + 4}") + temps.append(f"Var={name}_{((i * 6) + 5):03d} signed 56,8 -m /u:degC // Temperature of cell {(i * 6) + 5}") temps.append("") + # fmt: on + # pylint: enable=line-too-long cell_temperatures.write_text("\n".join(temps)) + with open(all_symbols, "a+", encoding="utf-8") as f: + f.write("\n".join(temps)) if __name__ == "__main__": diff --git a/tools/dbc/test_log.txt b/tools/dbc/test_log.txt new file mode 100644 index 00000000..d39e8459 --- /dev/null +++ b/tools/dbc/test_log.txt @@ -0,0 +1,301 @@ +Timestamp: 132.072247 ID: 0241 S Rx DL: 8 00 07 ec bf 61 fb 2f d9 +Timestamp: 132.072503 ID: 024f S Rx DL: 8 00 07 ec 3f 5d fa ef d7 +Timestamp: 132.072716 ID: 0242 S Rx DL: 8 00 07 ec bf 61 fb 4f d9 +Timestamp: 132.072972 ID: 0243 S Rx DL: 8 00 07 ec 3f 5d fb 2f d8 +Timestamp: 132.073185 ID: 0244 S Rx DL: 8 00 07 eb bf 5d fb 0f d8 +Timestamp: 132.073441 ID: 0245 S Rx DL: 8 00 07 ec 3f 65 fb 2f d7 +Timestamp: 132.073655 ID: 0246 S Rx DL: 8 00 07 ec bf 69 fb 2f da +Timestamp: 132.073911 ID: 0247 S Rx DL: 8 00 07 ed bf 69 fb 4f db +Timestamp: 132.074167 ID: 0248 S Rx DL: 8 00 07 ed 3f 69 fb 4f da +Timestamp: 132.074380 ID: 0249 S Rx DL: 8 00 07 ec 3f 5d fa ef d7 +Timestamp: 132.074636 ID: 024a S Rx DL: 8 00 07 eb bf 59 fb 4f da +Timestamp: 132.074849 ID: 024b S Rx DL: 8 00 07 ed 3f 69 fb 2f da +Timestamp: 132.075105 ID: 024c S Rx DL: 8 00 07 eb bf 5d fa ef d7 +Timestamp: 132.162016 ID: 0220 S Rx DL: 8 03 08 00 01 00 00 00 00 +Timestamp: 132.164063 ID: 0525 S Rx DL: 6 04 03 00 00 00 d2 +Timestamp: 132.165429 ID: 0526 S Rx DL: 6 05 0b 00 00 01 41 +Timestamp: 132.171872 ID: 0240 S Rx DL: 8 00 07 ec bf 65 fb 0f d9 +Timestamp: 132.172085 ID: 0241 S Rx DL: 8 00 07 ec bf 61 fb 2f d9 +Timestamp: 132.172341 ID: 024f S Rx DL: 8 00 07 ec 3f 5d fa ef d7 +Timestamp: 132.172555 ID: 0242 S Rx DL: 8 00 07 ec bf 61 fb 4f d9 +Timestamp: 132.172811 ID: 0243 S Rx DL: 8 00 07 ec 3f 5d fb 2f d8 +Timestamp: 132.173024 ID: 0244 S Rx DL: 8 00 07 eb bf 5d fb 0f d8 +Timestamp: 132.173280 ID: 0245 S Rx DL: 8 00 07 ec 3f 65 fb 2f d7 +Timestamp: 132.173536 ID: 0246 S Rx DL: 8 00 07 ec bf 69 fb 2f da +Timestamp: 132.173749 ID: 0247 S Rx DL: 8 00 07 ed bf 69 fb 4f db +Timestamp: 132.174005 ID: 0248 S Rx DL: 8 00 07 ed 3f 69 fb 4f da +Timestamp: 132.174219 ID: 0249 S Rx DL: 8 00 07 ec 3f 5d fa ef d7 +Timestamp: 132.174475 ID: 024a S Rx DL: 8 00 07 eb bf 59 fb 4f da +Timestamp: 132.174731 ID: 024b S Rx DL: 8 00 07 ed 3f 69 fb 2f da +Timestamp: 132.174944 ID: 024c S Rx DL: 8 00 07 eb bf 5d fa ef d7 +Timestamp: 132.175200 ID: 024d S Rx DL: 8 00 07 eb bf 59 fa ef d7 +Timestamp: 132.261855 ID: 0220 S Rx DL: 8 03 08 00 01 00 00 00 00 +Timestamp: 132.263689 ID: 0525 S Rx DL: 6 04 08 00 00 00 d2 +Timestamp: 132.265055 ID: 0526 S Rx DL: 6 05 00 00 00 01 44 +Timestamp: 132.271966 ID: 0240 S Rx DL: 8 00 07 ec bf 65 fb 0f d9 +Timestamp: 132.272179 ID: 0241 S Rx DL: 8 00 07 ec bf 61 fb 2f d9 +Timestamp: 132.272435 ID: 024f S Rx DL: 8 00 07 ec 3f 5d fa ef d7 +Timestamp: 132.272648 ID: 0242 S Rx DL: 8 00 07 ec bf 61 fb 4f d9 +Timestamp: 132.272903 ID: 0243 S Rx DL: 8 00 07 ec 3f 5d fb 2f d8 +Timestamp: 132.362038 ID: 0220 S Rx DL: 8 03 08 00 01 00 00 00 00 +Timestamp: 132.372107 ID: 0240 S Rx DL: 8 00 07 ec bf 61 fb 0f d9 +Timestamp: 132.372363 ID: 0241 S Rx DL: 8 00 07 ec bf 61 fb 2f d9 +Timestamp: 132.372576 ID: 024f S Rx DL: 8 00 07 ec 3f 5d fa ef d7 +Timestamp: 132.372832 ID: 0242 S Rx DL: 8 00 07 ec bf 61 fb 4f d9 +Timestamp: 132.373046 ID: 0243 S Rx DL: 8 00 07 ec 3f 5d fb 2f d8 +Timestamp: 132.373302 ID: 0244 S Rx DL: 8 00 07 eb bf 5d fb 0f d8 +Timestamp: 132.373515 ID: 0245 S Rx DL: 8 00 07 ec 3f 65 fb 2f d7 +Timestamp: 132.373771 ID: 0246 S Rx DL: 8 00 07 ec bf 69 fb 2f da +Timestamp: 132.373984 ID: 0247 S Rx DL: 8 00 07 ed bf 69 fb 4f db +Timestamp: 132.374240 ID: 0248 S Rx DL: 8 00 07 ed 3f 69 fb 4f da +Timestamp: 132.374496 ID: 0249 S Rx DL: 8 00 07 ec 3f 5d fa ef d7 +Timestamp: 132.374710 ID: 024a S Rx DL: 8 00 07 eb bf 59 fb 4f da +Timestamp: 132.374966 ID: 024b S Rx DL: 8 00 07 ed 3f 69 fb 2f da +Timestamp: 132.375179 ID: 024c S Rx DL: 8 00 07 eb bf 5d fa ef d7 +Timestamp: 132.375435 ID: 024d S Rx DL: 8 00 07 eb bf 59 fa ef d7 +Timestamp: 132.375690 ID: 024e S Rx DL: 8 00 07 eb bf 5d fa ef d7 +Timestamp: 132.375904 ID: 0250 S Rx DL: 8 00 07 eb bf 5d fa ef d7 +Timestamp: 132.376160 ID: 0251 S Rx DL: 8 00 07 ec 3f 5d fa ef d8 +Timestamp: 132.462132 ID: 0220 S Rx DL: 8 03 08 00 01 00 00 00 00 +Timestamp: 132.462987 ID: 0525 S Rx DL: 6 04 02 00 00 00 d2 +Timestamp: 132.464267 ID: 0526 S Rx DL: 6 05 0a 00 00 01 44 +Timestamp: 132.471947 ID: 0240 S Rx DL: 8 00 07 ed 3f 65 fb 0f d9 +Timestamp: 132.472203 ID: 0241 S Rx DL: 8 00 07 ec bf 61 fb 2f d9 +Timestamp: 132.472416 ID: 024f S Rx DL: 8 00 07 ec 3f 5d fa ef d7 +Timestamp: 132.472672 ID: 0242 S Rx DL: 8 00 07 ec bf 61 fb 4f d9 +Timestamp: 132.472885 ID: 0243 S Rx DL: 8 00 07 ec 3f 5d fb 2f d8 +Timestamp: 132.473141 ID: 0244 S Rx DL: 8 00 07 eb bf 61 fb 0f d8 +Timestamp: 132.473355 ID: 0245 S Rx DL: 8 00 07 ec 3f 65 fb 2f d7 +Timestamp: 132.473611 ID: 0246 S Rx DL: 8 00 07 ec bf 69 fb 2f da +Timestamp: 132.473824 ID: 0247 S Rx DL: 8 00 07 ed bf 69 fb 4f db +Timestamp: 132.474080 ID: 0248 S Rx DL: 8 00 07 ec bf 69 fb 4f da +Timestamp: 132.474336 ID: 0249 S Rx DL: 8 00 07 ec 3f 5d fa ef d7 +Timestamp: 132.474549 ID: 024a S Rx DL: 8 00 07 eb bf 59 fb 4f da +Timestamp: 132.474805 ID: 024b S Rx DL: 8 00 07 ed 3f 69 fb 2f da +Timestamp: 132.562569 ID: 0525 S Rx DL: 6 04 07 00 00 00 d2 +Timestamp: 132.563764 ID: 0526 S Rx DL: 6 05 0f 00 00 01 44 +Timestamp: 132.571743 ID: 035d S Rx DL: 6 01 05 00 05 f0 34 +Timestamp: 132.571956 ID: 0528 S Rx DL: 6 07 05 00 00 00 34 +Timestamp: 132.572212 ID: 0240 S Rx DL: 8 00 07 ec bf 65 fb 2f d9 +Timestamp: 132.572425 ID: 0241 S Rx DL: 8 00 07 ec bf 61 fb 2f d9 +Timestamp: 132.663519 ID: 0526 S Rx DL: 6 05 04 00 00 01 43 +Timestamp: 132.671412 ID: 035d S Rx DL: 6 01 0a 00 05 f0 1a +Timestamp: 132.671625 ID: 0528 S Rx DL: 6 07 0a 00 00 00 34 +Timestamp: 132.672180 ID: 0240 S Rx DL: 8 00 07 ec bf 65 fb 0f d9 +Timestamp: 132.672393 ID: 0241 S Rx DL: 8 00 07 ec bf 61 fb 2f d9 +Timestamp: 132.672648 ID: 024f S Rx DL: 8 00 07 ec 3f 5d fa ef d7 +Timestamp: 132.672863 ID: 0242 S Rx DL: 8 00 07 ec bf 61 fb 4f d9 +Timestamp: 132.673119 ID: 0243 S Rx DL: 8 00 07 ec 3f 5d fb 2f d8 +Timestamp: 132.673332 ID: 0244 S Rx DL: 8 00 07 eb bf 61 fb 0f d8 +Timestamp: 132.673588 ID: 0245 S Rx DL: 8 00 07 ec 3f 65 fb 2f d7 +Timestamp: 132.673800 ID: 0246 S Rx DL: 8 00 07 ec bf 69 fb 2f da +Timestamp: 132.674057 ID: 0247 S Rx DL: 8 00 07 ed bf 69 fb 4f db +Timestamp: 132.674313 ID: 0248 S Rx DL: 8 00 07 ed 3f 69 fb 4f da +Timestamp: 132.674527 ID: 0249 S Rx DL: 8 00 07 ec 3f 5d fa ef d7 +Timestamp: 132.762120 ID: 0220 S Rx DL: 8 03 08 00 01 00 00 00 00 +Timestamp: 132.762333 ID: 035c S Rx DL: 6 00 05 00 00 03 3d +Timestamp: 132.762547 ID: 0525 S Rx DL: 6 04 01 00 00 00 d2 +Timestamp: 132.763400 ID: 0526 S Rx DL: 6 05 09 00 00 01 43 +Timestamp: 132.771080 ID: 035d S Rx DL: 6 01 0f 00 05 ef de +Timestamp: 132.771336 ID: 0528 S Rx DL: 6 07 0f 00 00 00 34 +Timestamp: 132.772018 ID: 0240 S Rx DL: 8 00 07 ec bf 65 fb 0f d9 +Timestamp: 132.772232 ID: 0241 S Rx DL: 8 00 07 ec bf 61 fb 2f d9 +Timestamp: 132.772488 ID: 024f S Rx DL: 8 00 07 ec 3f 59 fa ef d8 +Timestamp: 132.772701 ID: 0242 S Rx DL: 8 00 07 ec bf 61 fb 4f d9 +Timestamp: 132.772957 ID: 0243 S Rx DL: 8 00 07 ec 3f 5d fb 2f d8 +Timestamp: 132.773170 ID: 0244 S Rx DL: 8 00 07 eb bf 5d fb 0f d8 +Timestamp: 132.773427 ID: 0245 S Rx DL: 8 00 07 ec 3f 65 fb 2f d7 +Timestamp: 132.773683 ID: 0246 S Rx DL: 8 00 07 ec bf 69 fb 2f da +Timestamp: 132.773896 ID: 0247 S Rx DL: 8 00 07 ed bf 69 fb 4f db +Timestamp: 132.774152 ID: 0248 S Rx DL: 8 00 07 ed 3f 69 fb 4f da +Timestamp: 132.774364 ID: 0249 S Rx DL: 8 00 07 ec 3f 5d fa ef d7 +Timestamp: 132.774621 ID: 024a S Rx DL: 8 00 07 eb bf 59 fb 4f da +Timestamp: 132.862002 ID: 0220 S Rx DL: 8 03 08 00 01 00 00 00 00 +Timestamp: 132.862685 ID: 0526 S Rx DL: 6 05 0e 00 00 01 43 +Timestamp: 132.863624 ID: 035c S Rx DL: 6 00 0a 00 00 03 3c +Timestamp: 132.870621 ID: 035d S Rx DL: 6 01 04 00 05 f0 3b +Timestamp: 132.870877 ID: 0528 S Rx DL: 6 07 04 00 00 00 34 +Timestamp: 132.872072 ID: 0240 S Rx DL: 8 00 07 ec bf 65 fb 0f d9 +Timestamp: 132.872328 ID: 0241 S Rx DL: 8 00 07 ec bf 61 fb 2f d9 +Timestamp: 132.872584 ID: 024f S Rx DL: 8 00 07 ec 3f 59 fa ef d8 +Timestamp: 132.872797 ID: 0242 S Rx DL: 8 00 07 ec bf 61 fb 4f d9 +Timestamp: 132.873053 ID: 0243 S Rx DL: 8 00 07 ec 3f 5d fb 2f d8 +Timestamp: 132.962097 ID: 0220 S Rx DL: 8 03 08 00 01 00 00 00 00 +Timestamp: 132.962396 ID: 0526 S Rx DL: 6 05 03 00 00 01 43 +Timestamp: 132.965553 ID: 035c S Rx DL: 6 00 0f 00 00 03 40 +Timestamp: 132.971185 ID: 035d S Rx DL: 6 01 09 00 05 f0 08 +Timestamp: 132.971399 ID: 0528 S Rx DL: 6 07 09 00 00 00 34 +Timestamp: 132.972167 ID: 0240 S Rx DL: 8 00 07 ed 3f 65 fb 0f d9 +Timestamp: 132.972423 ID: 0241 S Rx DL: 8 00 07 ec bf 61 fb 2f d9 +Timestamp: 132.972636 ID: 024f S Rx DL: 8 00 07 ec 3f 5d fa ef d7 +Timestamp: 132.972892 ID: 0242 S Rx DL: 8 00 07 ec bf 61 fb 4f d9 +Timestamp: 132.973104 ID: 0243 S Rx DL: 8 00 07 ec 3f 5d fb 2f d8 +Timestamp: 132.973361 ID: 0244 S Rx DL: 8 00 07 eb bf 5d fb 0f d8 +Timestamp: 132.973575 ID: 0245 S Rx DL: 8 00 07 ec 3f 65 fb 2f d7 +Timestamp: 132.973831 ID: 0246 S Rx DL: 8 00 07 ec bf 69 fb 2f da +Timestamp: 132.974087 ID: 0247 S Rx DL: 8 00 07 ed bf 69 fb 4f db +Timestamp: 132.974299 ID: 0248 S Rx DL: 8 00 07 ed 3f 69 fb 4f da +Timestamp: 132.974556 ID: 0249 S Rx DL: 8 00 07 ec 3f 5d fa ef d7 +Timestamp: 132.974769 ID: 024a S Rx DL: 8 00 07 eb bf 59 fb 4f da +Timestamp: 132.975025 ID: 024b S Rx DL: 8 00 07 ed 3f 69 fb 2f da +Timestamp: 132.975281 ID: 024c S Rx DL: 8 00 07 eb bf 5d fa ef d7 +Timestamp: 133.062065 ID: 0525 S Rx DL: 6 04 00 00 00 00 d2 +Timestamp: 133.062321 ID: 0220 S Rx DL: 8 03 08 00 01 00 00 00 00 +Timestamp: 133.063174 ID: 0526 S Rx DL: 6 05 08 00 00 01 42 +Timestamp: 133.067526 ID: 035c S Rx DL: 6 00 04 00 00 03 3d +Timestamp: 133.070854 ID: 035d S Rx DL: 6 01 0e 00 05 f0 27 +Timestamp: 133.071068 ID: 0528 S Rx DL: 6 07 0e 00 00 00 34 +Timestamp: 133.072006 ID: 0240 S Rx DL: 8 00 07 ec bf 61 fb 0f d9 +Timestamp: 133.072262 ID: 0241 S Rx DL: 8 00 07 ec bf 61 fb 2f d9 +Timestamp: 133.072475 ID: 024f S Rx DL: 8 00 07 ec 3f 5d fa ef d8 +Timestamp: 133.072732 ID: 0242 S Rx DL: 8 00 07 ec bf 61 fb 4f d9 +Timestamp: 133.072945 ID: 0243 S Rx DL: 8 00 07 ec 3f 5d fb 2f d8 +Timestamp: 133.073201 ID: 0244 S Rx DL: 8 00 07 eb bf 5d fb 0f d8 +Timestamp: 133.073457 ID: 0245 S Rx DL: 8 00 07 ec 3f 65 fb 2f d7 +Timestamp: 133.073669 ID: 0246 S Rx DL: 8 00 07 ec bf 69 fb 2f da +Timestamp: 133.073926 ID: 0247 S Rx DL: 8 00 07 ed bf 69 fb 4f db +Timestamp: 133.074140 ID: 0248 S Rx DL: 8 00 07 ec bf 69 fb 4f da +Timestamp: 133.074396 ID: 0249 S Rx DL: 8 00 07 ec 3f 5d fa ef d7 +Timestamp: 133.074652 ID: 024a S Rx DL: 8 00 07 eb bf 59 fb 4f da +Timestamp: 133.161989 ID: 0220 S Rx DL: 8 03 08 00 01 00 00 00 00 +Timestamp: 133.162501 ID: 0526 S Rx DL: 6 05 0d 00 00 01 42 +Timestamp: 133.169114 ID: 035c S Rx DL: 6 00 09 00 00 03 39 +Timestamp: 133.170480 ID: 035d S Rx DL: 6 01 03 00 05 f0 2b +Timestamp: 133.170692 ID: 0528 S Rx DL: 6 07 03 00 00 00 34 +Timestamp: 133.172059 ID: 0240 S Rx DL: 8 00 07 ed 3f 65 fb 0f d9 +Timestamp: 133.172315 ID: 0241 S Rx DL: 8 00 07 ec bf 61 fb 2f d9 +Timestamp: 133.172571 ID: 024f S Rx DL: 8 00 07 ec 3f 5d fa ef d8 +Timestamp: 133.172784 ID: 0242 S Rx DL: 8 00 07 ec bf 61 fb 4f d9 +Timestamp: 133.173039 ID: 0243 S Rx DL: 8 00 07 ec 3f 5d fb 2f d8 +Timestamp: 133.173253 ID: 0244 S Rx DL: 8 00 07 eb bf 5d fb 0f d8 +Timestamp: 133.173509 ID: 0245 S Rx DL: 8 00 07 ec 3f 65 fb 2f d7 +Timestamp: 133.173723 ID: 0246 S Rx DL: 8 00 07 ec bf 69 fb 2f da +Timestamp: 133.173979 ID: 0247 S Rx DL: 8 00 07 ed bf 69 fb 4f db +Timestamp: 133.174191 ID: 0248 S Rx DL: 8 00 07 ec bf 69 fb 4f da +Timestamp: 133.174448 ID: 0249 S Rx DL: 8 00 07 ec 3f 5d fa ef d7 +Timestamp: 133.174704 ID: 024a S Rx DL: 8 00 07 eb bf 59 fb 4f da +Timestamp: 133.174917 ID: 024b S Rx DL: 8 00 07 ed 3f 69 fb 2f da +Timestamp: 133.262085 ID: 0220 S Rx DL: 8 03 08 00 01 00 00 00 00 +Timestamp: 133.262298 ID: 0526 S Rx DL: 6 05 02 00 00 01 42 +Timestamp: 133.270106 ID: 035d S Rx DL: 6 01 08 00 05 f0 14 +Timestamp: 133.270320 ID: 0528 S Rx DL: 6 07 08 00 00 00 34 +Timestamp: 133.271215 ID: 035c S Rx DL: 6 00 0e 00 00 03 3f +Timestamp: 133.361966 ID: 0526 S Rx DL: 6 05 07 00 00 01 43 +Timestamp: 133.362265 ID: 0220 S Rx DL: 8 03 08 00 01 00 00 00 00 +Timestamp: 133.369646 ID: 035d S Rx DL: 6 01 0d 00 05 ef ff +Timestamp: 133.369902 ID: 0528 S Rx DL: 6 07 0d 00 00 00 34 +Timestamp: 133.370841 ID: 035c S Rx DL: 6 00 03 00 00 03 3f +Timestamp: 133.371993 ID: 0240 S Rx DL: 8 00 07 ec bf 61 fb 0f d9 +Timestamp: 133.372249 ID: 0241 S Rx DL: 8 00 07 ec bf 61 fb 2f d9 +Timestamp: 133.372462 ID: 024f S Rx DL: 8 00 07 ec 3f 5d fa ef d8 +Timestamp: 133.372718 ID: 0242 S Rx DL: 8 00 07 ec bf 61 fb 4f d9 +Timestamp: 133.372931 ID: 0243 S Rx DL: 8 00 07 ec 3f 5d fb 2f d8 +Timestamp: 133.373188 ID: 0244 S Rx DL: 8 00 07 eb bf 5d fb 0f d8 +Timestamp: 133.373401 ID: 0245 S Rx DL: 8 00 07 ec 3f 65 fb 2f d7 +Timestamp: 133.373657 ID: 0246 S Rx DL: 8 00 07 ec bf 69 fb 2f da +Timestamp: 133.373913 ID: 0247 S Rx DL: 8 00 07 ed bf 69 fb 4f db +Timestamp: 133.374125 ID: 0248 S Rx DL: 8 00 07 ed 3f 69 fb 4f da +Timestamp: 133.374382 ID: 0249 S Rx DL: 8 00 07 ec 3f 5d fa ef d7 +Timestamp: 133.374596 ID: 024a S Rx DL: 8 00 07 eb bf 59 fb 4f da +Timestamp: 133.374852 ID: 024b S Rx DL: 8 00 07 ed 3f 69 fb 2f da +Timestamp: 133.375108 ID: 024c S Rx DL: 8 00 07 eb bf 5d fa ef d7 +Timestamp: 133.461934 ID: 0220 S Rx DL: 8 03 08 00 01 00 00 00 00 +Timestamp: 133.469188 ID: 035d S Rx DL: 6 01 02 00 05 f0 06 +Timestamp: 133.469401 ID: 0528 S Rx DL: 6 07 02 00 00 00 34 +Timestamp: 133.471364 ID: 035c S Rx DL: 6 00 08 00 00 03 40 +Timestamp: 133.472004 ID: 0240 S Rx DL: 8 00 07 ec bf 65 fb 0f d9 +Timestamp: 133.472217 ID: 0241 S Rx DL: 8 00 07 ec bf 61 fb 2f d9 +Timestamp: 133.472473 ID: 024f S Rx DL: 8 00 07 ec 3f 59 fa ef d8 +Timestamp: 133.472729 ID: 0242 S Rx DL: 8 00 07 ec bf 61 fb 4f d9 +Timestamp: 133.472943 ID: 0243 S Rx DL: 8 00 07 ec 3f 5d fb 2f d8 +Timestamp: 133.473199 ID: 0244 S Rx DL: 8 00 07 eb bf 5d fb 0f d8 +Timestamp: 133.473412 ID: 0245 S Rx DL: 8 00 07 ec 3f 65 fb 2f d7 +Timestamp: 133.473668 ID: 0246 S Rx DL: 8 00 07 ec bf 69 fb 2f da +Timestamp: 133.473881 ID: 0247 S Rx DL: 8 00 07 ed bf 69 fb 4f db +Timestamp: 133.474137 ID: 0248 S Rx DL: 8 00 07 ed 3f 69 fb 4f da +Timestamp: 133.474393 ID: 0249 S Rx DL: 8 00 07 ec 3f 5d fa ef d7 +Timestamp: 133.474607 ID: 024a S Rx DL: 8 00 07 eb bf 59 fb 4f da +Timestamp: 133.474863 ID: 024b S Rx DL: 8 00 07 ed 3f 69 fb 2f da +Timestamp: 133.475076 ID: 024c S Rx DL: 8 00 07 eb bf 5d fa ef d7 +Timestamp: 133.475332 ID: 024d S Rx DL: 8 00 07 eb bf 59 fa ef d7 +Timestamp: 133.569197 ID: 035d S Rx DL: 6 01 07 00 05 f0 2b +Timestamp: 133.569411 ID: 0528 S Rx DL: 6 07 07 00 00 00 34 +Timestamp: 133.570776 ID: 035c S Rx DL: 6 00 0d 00 00 03 3c +Timestamp: 133.572056 ID: 0240 S Rx DL: 8 00 07 ec bf 65 fb 0f d9 +Timestamp: 133.572312 ID: 0241 S Rx DL: 8 00 07 ec bf 61 fb 2f d9 +Timestamp: 133.572568 ID: 024f S Rx DL: 8 00 07 ec 3f 59 fa ef d7 +Timestamp: 133.572781 ID: 0242 S Rx DL: 8 00 07 ec bf 61 fb 4f d9 +Timestamp: 133.669377 ID: 035d S Rx DL: 6 01 0c 00 05 f0 2e +Timestamp: 133.669591 ID: 0528 S Rx DL: 6 07 0c 00 00 00 34 +Timestamp: 133.671894 ID: 0240 S Rx DL: 8 00 07 ec bf 65 fb 0f d9 +Timestamp: 133.672150 ID: 0241 S Rx DL: 8 00 07 ec bf 61 fb 2f d9 +Timestamp: 133.672363 ID: 024f S Rx DL: 8 00 07 ec 3f 5d fa ef d7 +Timestamp: 133.672619 ID: 0242 S Rx DL: 8 00 07 ec bf 61 fb 4f d9 +Timestamp: 133.672832 ID: 0243 S Rx DL: 8 00 07 ec 3f 5d fb 2f d8 +Timestamp: 133.673088 ID: 0244 S Rx DL: 8 00 07 eb bf 5d fb 0f d8 +Timestamp: 133.673302 ID: 0245 S Rx DL: 8 00 07 ec 3f 65 fb 2f d7 +Timestamp: 133.673558 ID: 0246 S Rx DL: 8 00 07 ec bf 69 fb 2f da +Timestamp: 133.673771 ID: 0247 S Rx DL: 8 00 07 ed bf 69 fb 4f db +Timestamp: 133.674026 ID: 0248 S Rx DL: 8 00 07 ed 3f 69 fb 4f da +Timestamp: 133.674283 ID: 0249 S Rx DL: 8 00 07 ec 3f 5d fa ef d7 +Timestamp: 133.674496 ID: 024a S Rx DL: 8 00 07 eb bf 59 fb 4f da +Timestamp: 133.674752 ID: 024b S Rx DL: 8 00 07 ed 3f 69 fb 2f da +Timestamp: 133.674966 ID: 024c S Rx DL: 8 00 07 eb bf 5d fa ef d7 +Timestamp: 133.675221 ID: 024d S Rx DL: 8 00 07 eb bf 59 fa ef d7 +Timestamp: 133.675478 ID: 024e S Rx DL: 8 00 07 eb bf 5d fa ef d7 +Timestamp: 133.761919 ID: 0220 S Rx DL: 8 03 08 00 01 00 00 00 00 +Timestamp: 133.769045 ID: 035d S Rx DL: 6 01 01 00 05 f0 2e +Timestamp: 133.769258 ID: 0528 S Rx DL: 6 07 01 00 00 00 34 +Timestamp: 133.771989 ID: 0240 S Rx DL: 8 00 07 ed 3f 65 fb 0f d9 +Timestamp: 133.772202 ID: 0241 S Rx DL: 8 00 07 ec bf 61 fb 2f d9 +Timestamp: 133.772458 ID: 024f S Rx DL: 8 00 07 ec 3f 5d fa ef d8 +Timestamp: 133.772671 ID: 0242 S Rx DL: 8 00 07 ec bf 61 fb 4f d9 +Timestamp: 133.772927 ID: 0243 S Rx DL: 8 00 07 ec 3f 5d fb 2f d8 +Timestamp: 133.773183 ID: 0244 S Rx DL: 8 00 07 eb bf 5d fb 0f d8 +Timestamp: 133.773396 ID: 0245 S Rx DL: 8 00 07 ec 3f 65 fb 2f d7 +Timestamp: 133.773653 ID: 0246 S Rx DL: 8 00 07 ec bf 69 fb 2f da +Timestamp: 133.773909 ID: 0247 S Rx DL: 8 00 07 ed bf 69 fb 4f db +Timestamp: 133.774122 ID: 0248 S Rx DL: 8 00 07 ed 3f 69 fb 4f da +Timestamp: 133.774378 ID: 0249 S Rx DL: 8 00 07 ec 3f 5d fa ef d7 +Timestamp: 133.774590 ID: 024a S Rx DL: 8 00 07 eb bf 59 fb 4f da +Timestamp: 133.774847 ID: 024b S Rx DL: 8 00 07 ed 3f 69 fb 2f da +Timestamp: 133.775061 ID: 024c S Rx DL: 8 00 07 eb bf 5d fa ef d7 +Timestamp: 133.775317 ID: 024d S Rx DL: 8 00 07 eb 3f 59 fa ef d7 +Timestamp: 133.869651 ID: 035d S Rx DL: 6 01 06 00 05 f0 27 +Timestamp: 133.869864 ID: 0528 S Rx DL: 6 07 06 00 00 00 34 +Timestamp: 133.872041 ID: 0240 S Rx DL: 8 00 07 ec bf 65 fb 0f d9 +Timestamp: 133.872297 ID: 0241 S Rx DL: 8 00 07 ec bf 65 fb 2f d9 +Timestamp: 133.872553 ID: 024f S Rx DL: 8 00 07 ec 3f 59 fa ef d7 +Timestamp: 133.872766 ID: 0242 S Rx DL: 8 00 07 ec bf 61 fb 4f d9 +Timestamp: 133.873022 ID: 0243 S Rx DL: 8 00 07 ec 3f 5d fb 2f d8 +Timestamp: 133.873235 ID: 0244 S Rx DL: 8 00 07 eb bf 5d fb 0f d8 +Timestamp: 133.873491 ID: 0245 S Rx DL: 8 00 07 ec 3f 65 fb 2f d7 +Timestamp: 133.873705 ID: 0246 S Rx DL: 8 00 07 ec bf 69 fb 2f da +Timestamp: 133.873960 ID: 0247 S Rx DL: 8 00 07 ed bf 69 fb 4f db +Timestamp: 133.874174 ID: 0248 S Rx DL: 8 00 07 ed 3f 69 fb 4f da +Timestamp: 133.874430 ID: 0249 S Rx DL: 8 00 07 ec 3f 5d fa ef d7 +Timestamp: 133.969234 ID: 035d S Rx DL: 6 01 0b 00 05 f0 20 +Timestamp: 133.969447 ID: 0528 S Rx DL: 6 07 0b 00 00 00 34 +Timestamp: 133.971879 ID: 0240 S Rx DL: 8 00 07 ec bf 65 fb 0f d9 +Timestamp: 133.972135 ID: 0241 S Rx DL: 8 00 07 ec bf 61 fb 2f d9 +Timestamp: 133.972391 ID: 024f S Rx DL: 8 00 07 ec 3f 59 fa ef d7 +Timestamp: 133.972605 ID: 0242 S Rx DL: 8 00 07 ec bf 61 fb 4f d9 +Timestamp: 133.972861 ID: 0243 S Rx DL: 8 00 07 ec 3f 5d fb 2f d8 +Timestamp: 133.973074 ID: 0244 S Rx DL: 8 00 07 eb bf 5d fb 0f d8 +Timestamp: 133.973330 ID: 0245 S Rx DL: 8 00 07 ec 3f 65 fb 2f d7 +Timestamp: 133.973543 ID: 0246 S Rx DL: 8 00 07 ec bf 6d fb 2f da +Timestamp: 133.973799 ID: 0247 S Rx DL: 8 00 07 ed bf 69 fb 4f db +Timestamp: 133.974013 ID: 0248 S Rx DL: 8 00 07 ed 3f 69 fb 4f da +Timestamp: 133.974269 ID: 0249 S Rx DL: 8 00 07 ec 3f 5d fa ef d7 +Timestamp: 134.061947 ID: 0220 S Rx DL: 8 03 08 00 01 00 00 00 00 +Timestamp: 134.068816 ID: 035d S Rx DL: 6 01 00 00 05 f0 34 +Timestamp: 134.069029 ID: 0528 S Rx DL: 6 07 00 00 00 00 34 +Timestamp: 134.071973 ID: 0240 S Rx DL: 8 00 07 ed 3f 65 fb 0f d9 +Timestamp: 134.072228 ID: 0241 S Rx DL: 8 00 07 ec bf 61 fb 2f d9 +Timestamp: 134.072443 ID: 024f S Rx DL: 8 00 07 ec 3f 59 fa ef d8 +Timestamp: 134.072699 ID: 0242 S Rx DL: 8 00 07 ec bf 61 fb 4f d9 +Timestamp: 134.072912 ID: 0243 S Rx DL: 8 00 07 ec 3f 5d fb 2f d8 +Timestamp: 134.073168 ID: 0244 S Rx DL: 8 00 07 eb bf 5d fb 0f d8 +Timestamp: 134.073424 ID: 0245 S Rx DL: 8 00 07 ec 3f 65 fb 2f d7 +Timestamp: 134.073637 ID: 0246 S Rx DL: 8 00 07 ec bf 69 fb 2f da +Timestamp: 134.078012 ID: 0221 S Rx DL: 8 80 00 00 00 00 00 00 00 diff --git a/tools/dbc/third-party/README.md b/tools/dbc/third-party/README.md index 5d525308..ef88c6a2 100644 --- a/tools/dbc/third-party/README.md +++ b/tools/dbc/third-party/README.md @@ -3,4 +3,5 @@ - Third party DBC files are copied into the repository verbatim. - When messages are needed for the foxBMS project, the required messages, signals etc. are copied to the ``tools/dbc/foxbms.sym`` and - ``tools/dbc/foxbms.dbc`` as needed as described in [tools/dbc/README.md](../README.md) + ``tools/dbc/foxbms.dbc`` as needed as described in + [tools/dbc/README.md](../README.md) diff --git a/tools/debugger/lauterbach/commands.md b/tools/debugger/lauterbach/commands.md index 5ea5b082..1cb50299 100644 --- a/tools/debugger/lauterbach/commands.md +++ b/tools/debugger/lauterbach/commands.md @@ -12,8 +12,8 @@ A list of some useful lauterbach command line commands: 1. Unlock flash: ``FLASH.ReProgram ALL`` 1. Erase - - Complete flash: ``FLASH.Erase ALL`` - - Only certain memory range: ``FLASH.Erase (xxxxxx)--(yyyyyy)`` + - Complete flash: ``FLASH.Erase ALL`` + - Only certain memory range: ``FLASH.Erase (xxxxxx)--(yyyyyy)`` 1. Lock flash: ``FLASH.ReProgram OFF`` ## Saving Flash to File diff --git a/tools/debugger/lauterbach/config.t32.in b/tools/debugger/lauterbach/config.t32.in index 318b0f9a..a652502c 100644 --- a/tools/debugger/lauterbach/config.t32.in +++ b/tools/debugger/lauterbach/config.t32.in @@ -4,9 +4,7 @@ ID=T32 TMP=@TMP@ SYS=@SYS@ -; T32 API Access (TCP recommended by Lauterbach) -RCL=NETTCP -PORT=20000 +@TCP@ ;SCREEN= ;MWI diff --git a/tools/debugger/lauterbach/get_macro_values.py b/tools/debugger/lauterbach/get_macro_values.py old mode 100644 new mode 100755 index 1ea25782..fb22c883 --- a/tools/debugger/lauterbach/get_macro_values.py +++ b/tools/debugger/lauterbach/get_macro_values.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -123,18 +122,18 @@ def main(): try: macro, value = line.split(" ", maxsplit=1) except ValueError: - logging.debug(f"{macro} has no value. Ignoring...") + logging.debug("%s has no value. Ignoring...", line) continue if not value.startswith("("): value = f"({value})" macros.append((macro, value)) - macros = list(set((tuple(i) for i in macros))) - logging.info(f"Adding {len(macros)} macro(s).") + macros = list({tuple(i) for i in macros}) + logging.info("Adding %s macro(s).", len(macros)) macro_cmm_file_in = REPO_ROOT / "tools/debugger/lauterbach/load_macro_values.cmm.in" if not macro_cmm_file_in.is_file(): - sys.exit(f"Could not find file {macro_cmm_file_in}") - logging.info(f"Reading configuration file '{macro_cmm_file_in}'") + sys.exit("Could not find file %s", macro_cmm_file_in) + logging.info("Reading configuration file '%s'", macro_cmm_file_in) txt = macro_cmm_file_in.read_text(encoding="utf-8") replacement = "\n".join( [f"sYmbol.CREATE.MACRO {macro} {value}" for macro, value in macros] @@ -142,7 +141,7 @@ def main(): macro_cmm_file_out = REPO_ROOT / "build/load_macro_values.cmm" REPO_ROOT.mkdir(exist_ok=True) txt = txt.replace("@MACROS_AND_VALUES@", replacement) - logging.info(f"Writing configuration file '{macro_cmm_file_out}'") + logging.info("Writing configuration file '%s'", macro_cmm_file_out) macro_cmm_file_out.write_text(txt, encoding="utf-8") logging.info("Done...") diff --git a/tools/debugger/lauterbach/init.cmm.in b/tools/debugger/lauterbach/init.cmm.in index 9b5af3a3..0a3b38a9 100644 --- a/tools/debugger/lauterbach/init.cmm.in +++ b/tools/debugger/lauterbach/init.cmm.in @@ -39,7 +39,7 @@ cd &working_path Var.Frame /Locals /Caller WinPOS 50% 50% 50% 50% Var.Watch %E - Var.AddWatch os_timer ilck_state sys_state bms_state data_blockCellVoltage data_blockCellTemperature data_blockCurrentSensor data_blockErrors data_blockMsl data_blockRsl data_blockMol + Var.AddWatch data_blockInsulationMonitoring os_timer bms_tablePackValues ilck_state data_blockInterlockFeedback imd_state cont_contactorStates sps_channelStatus data_blockStaterequest sys_state bms_state fram_version data_blockCellVoltage data_blockCellTemperature data_blockCurrentSensor data_blockErrors data_blockMsl data_blockRsl data_blockMol ;choose hex mode for input radix hex diff --git a/tools/deploy/deploy_internal_server.sh b/tools/deploy/deploy_internal_server.sh old mode 100644 new mode 100755 index 1d4e553e..6379c3de --- a/tools/deploy/deploy_internal_server.sh +++ b/tools/deploy/deploy_internal_server.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -33,22 +33,34 @@ # We kindly request you to use one or more of the following phrases to refer to # foxBMS in your hardware, software, documentation or advertising materials: # -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" +# - "This product uses parts of foxBMS®" +# - "This product includes parts of foxBMS®" +# - "This product is derived from foxBMS®" + +# cSpell:ignore webserver +# the variables shall be expanded on the client side +# shellcheck disable=SC2029 # exit immediately on failure set -e + # NAMES AND PATHS -NAME_DOC_DEPLOY_JOB='doc_deployment' +NAME_DOC_DEPLOY_JOB='id_deploy_docs' DIR_DOC_DEPLOY='doc' DOC_ARTIFACT='build/docs/.' -NAME_COV_DEPLOY_JOB='cov_report_deployment' + +NAME_COV_DEPLOY_JOB='id_deploy_embedded_cov_report' DIR_COV_DEPLOY='cov' COV_ARTIFACT='build/unit_test/artifacts/gcov/.' -NAME_COV_SCRIPT_DEPLOY_JOB='cov_script_report_deployment' + +NAME_COV_SCRIPT_DEPLOY_JOB='id_deploy_scripts_cov_report' DIR_COV_SCRIPT_DEPLOY='cov_script' -COV_SCRIPT_ARTIFACT='build/unit_test_scripts/.' +COV_SCRIPT_ARTIFACT='build/cli-selftest/.' + +NAME_SPA_AXIVION_DEPLOY_JOB='id_deploy_custom_axivion_report' +DIR_SPA_AXIVION_DEPLOY='axivion' +SPA_AXIVION_ARTIFACT='custom-reports' + REMOTE="$REMOTE_USER@$REMOTE_HOSTNAME" echo "Value of variable REMOTE_HOSTNAME: $REMOTE_HOSTNAME" echo "Value of variable REMOTE_USER: $REMOTE_USER" @@ -56,7 +68,10 @@ echo "Value of variable REMOTE_USER: $REMOTE_USER" echo 'This is the deployment-script for local reports and documentation.' echo 'I will try to detect the current CI-job:' # check for CI and if we are in the right job -if [ "$CI_JOB_NAME" != "$NAME_DOC_DEPLOY_JOB" ] && [ "$CI_JOB_NAME" != "$NAME_COV_DEPLOY_JOB" ] && [ "$CI_JOB_NAME" != "$NAME_COV_SCRIPT_DEPLOY_JOB" ]; then +if [ "$CI_JOB_NAME" != "$NAME_DOC_DEPLOY_JOB" ] && \ + [ "$CI_JOB_NAME" != "$NAME_COV_DEPLOY_JOB" ] && \ + [ "$CI_JOB_NAME" != "$NAME_COV_SCRIPT_DEPLOY_JOB" ] && \ + [ "$CI_JOB_NAME" != "$NAME_SPA_AXIVION_DEPLOY_JOB" ]; then echo 'Expected environment variables not matched.' echo "Value of CI_JOB_NAME is $CI_JOB_NAME." echo 'Make sure you are running this script in CI in the right job.' @@ -80,7 +95,7 @@ echo "scp: $(which scp)" # make sure the ssh-agent is running echo 'Making sure the ssh-agent is running:' -eval $(ssh-agent -s) +eval "$(ssh-agent -s)" # give ssh-agent the private key # If setting this up, paste the ssh private key (that you have generated for this purpose!) @@ -100,7 +115,7 @@ touch ~/.ssh/known_hosts # create a variable INTERNAL_WEBSERVER_SSH_HOST_KEY in Gitlab and add the output # of ssh-keyscan. The remote hostname should match the one in this script. echo 'Removing old ssh host key.' -ssh-keygen -R $REMOTE_HOSTNAME +ssh-keygen -R "$REMOTE_HOSTNAME" echo 'Loading ssh host key.' echo 'If this fails, make sure the variable INTERNAL_WEBSERVER_SSH_HOST_KEY is configured in Gitlab CI.' echo "$INTERNAL_WEBSERVER_SSH_HOST_KEY" >> ~/.ssh/known_hosts @@ -115,6 +130,9 @@ elif [ "$CI_JOB_NAME" == "$NAME_COV_DEPLOY_JOB" ]; then elif [ "$CI_JOB_NAME" == "$NAME_COV_SCRIPT_DEPLOY_JOB" ]; then BASE_DIR=$DIR_COV_SCRIPT_DEPLOY ARTIFACT=$COV_SCRIPT_ARTIFACT +elif [ "$CI_JOB_NAME" == "$NAME_SPA_AXIVION_DEPLOY_JOB" ]; then + BASE_DIR=$DIR_SPA_AXIVION_DEPLOY + ARTIFACT=$SPA_AXIVION_ARTIFACT fi REMOTE_BASE_DIR="$REMOTE_WEB_DIR/$BASE_DIR" @@ -123,25 +141,25 @@ echo "I will store the files in $REMOTE_TARGET_DIR." # mkdir -p base directory (based on JOB_NAME doc/ or cov/) echo "Creating directory $REMOTE_BASE_DIR on remote." -ssh $REMOTE "mkdir -p $REMOTE_BASE_DIR" +ssh "$REMOTE" "mkdir -p $REMOTE_BASE_DIR" # rm -rf $REMOTE_TARGET_DIR echo "Removing directory $REMOTE_TARGET_DIR (in order to make sure that it is empty)." -ssh $REMOTE "rm -rf $REMOTE_TARGET_DIR" +ssh "$REMOTE" "rm -rf $REMOTE_TARGET_DIR" # mkdir -p $REMOTE_TARGET_DIR echo "Creating directory $REMOTE_TARGET_DIR on remote." -ssh $REMOTE "mkdir -p $REMOTE_TARGET_DIR" +ssh "$REMOTE" "mkdir -p $REMOTE_TARGET_DIR" # tar and copy local artifacts to $REMOTE_TARGET_DIR echo 'This is the local artifact:' -ls -al $ARTIFACT +ls -la "$ARTIFACT" echo "Copying artifact from $ARTIFACT to $REMOTE_TARGET_DIR on remote." echo "pushing into $ARTIFACT" echo "pushd $ARTIFACT" -pushd $ARTIFACT +pushd "$ARTIFACT" echo "tar czf - . | ssh $REMOTE \"cd $REMOTE_TARGET_DIR && tar xzf -\"" -tar czf - . | ssh $REMOTE "cd $REMOTE_TARGET_DIR && tar xzf -" +tar czf - . | ssh "$REMOTE" "cd $REMOTE_TARGET_DIR && tar xzf -" echo "popd" popd @@ -153,16 +171,16 @@ if [ "$CI_COMMIT_BRANCH" == "$CI_DEFAULT_BRANCH" ]; then # copy contents to dir with commit ID, if we are on master echo "Commit SHA is $CI_COMMIT_SHA." echo "Removing $REMOTE_COMMIT_DIR." - ssh $REMOTE "rm -rf $REMOTE_COMMIT_DIR" + ssh "$REMOTE" "rm -rf $REMOTE_COMMIT_DIR" echo "Creating $REMOTE_COMMIT_DIR." - ssh $REMOTE "mkdir -p $REMOTE_COMMIT_DIR" + ssh "$REMOTE" "mkdir -p $REMOTE_COMMIT_DIR" echo "Copying files from $REMOTE_TARGET_DIR. to $REMOTE_COMMIT_DIR" - ssh $REMOTE "cp -r $REMOTE_TARGET_DIR. $REMOTE_COMMIT_DIR" + ssh "$REMOTE" "cp -r $REMOTE_TARGET_DIR. $REMOTE_COMMIT_DIR" fi # housekeeping: kill the current agent echo 'Cleaning up and killing current ssh-agent:' -eval $(ssh-agent -k) +eval "$(ssh-agent -k)" echo 'Live long and prosper. 🖖' diff --git a/tools/gui/README.md b/tools/gui/README.md deleted file mode 100644 index 65119bb8..00000000 --- a/tools/gui/README.md +++ /dev/null @@ -1,20 +0,0 @@ -# foxBMS 2 GUI - -## Starting the GUI - -In order to start the gui, run ``gui.bat``. - -## How to - -1. After running the helper script, the tool selection opens - ![foxBMS GUI entry frame](./entry-frame.png) - -1. Next a tool can be select, to either - - view battery system parameters during operation and control the BMS (``LiveViewAndControl``) or - - parse and visualize CAN logs generated by |foxbms| (``LogParser``). - - ![foxBMS GUI entry frame](./entry-frame-select-sub-tool.png) - -### LiveViewAndControl - -### LogParser diff --git a/tools/gui/data/2020-05-12_09-25-36_logfile_can_bms.txt b/tools/gui/data/2020-05-12_09-25-36_logfile_can_bms.txt deleted file mode 100644 index ee6d096f..00000000 --- a/tools/gui/data/2020-05-12_09-25-36_logfile_can_bms.txt +++ /dev/null @@ -1,209 +0,0 @@ -1.731014 553 8 0 3 13 65 0 0 0 0 -1.734998 555 8 0 0 0 0 0 0 0 0 -1.734998 557 8 0 0 0 0 0 0 0 0 -1.736997 558 8 170 255 255 255 255 0 0 0 -1.741009 566 8 0 0 0 0 0 0 0 0 -1.742013 567 8 0 0 0 0 0 0 0 0 -1.743993 641 8 0 1 134 160 0 0 0 0 -1.810972 662 8 0 0 0 0 0 0 0 0 -1.812967 663 8 0 0 0 0 0 0 0 0 -1.81497 737 8 0 1 134 160 0 0 0 0 -1.881931 559 8 0 0 58 231 25 200 0 0 -1.883923 774 8 0 0 0 0 0 0 0 0 -1.885911 775 8 0 0 0 0 0 0 0 0 -1.88791 849 8 0 1 134 161 0 0 0 0 -1.889909 761 8 153 151 152 151 152 150 0 0 -1.894907 755 8 0 0 0 0 0 0 0 0 -1.950887 763 8 2 0 0 0 0 0 0 0 -2.042833 544 8 26 44 25 100 26 244 0 0 -2.045819 545 8 0 3 13 66 0 0 0 0 -2.046818 546 8 0 0 13 202 0 0 0 0 -2.047818 547 8 0 0 0 0 0 0 0 0 -2.049816 549 8 0 0 0 0 0 0 0 0 -2.051833 550 8 170 255 255 255 255 0 0 0 -2.053829 562 8 0 0 0 0 0 0 0 0 -2.055827 563 8 0 0 0 0 0 0 0 0 -2.05683 640 8 0 1 134 160 0 0 0 0 -2.058826 644 8 25 200 25 200 25 199 0 0 -2.061827 576 8 0 0 14 214 14 219 14 220 -2.063826 577 8 0 0 14 214 14 220 14 217 -2.065807 578 8 0 0 14 220 14 216 14 218 -2.066824 579 8 0 0 14 218 14 221 14 219 -2.068823 580 8 0 152 153 152 152 152 0 0 -2.071822 586 8 0 0 14 216 14 218 14 217 -2.073816 587 8 0 0 14 216 14 216 14 218 -2.07482 588 8 0 0 14 215 14 220 14 214 -2.076817 589 8 0 0 14 217 14 216 14 215 -2.07782 590 8 0 152 153 151 151 152 0 0 -2.082813 597 8 0 0 14 218 14 217 14 218 -2.084796 598 8 0 0 14 217 14 218 14 216 -2.085807 599 8 0 0 14 218 14 218 14 218 -2.087794 600 8 0 0 14 218 14 219 14 219 -2.088813 601 8 0 152 152 151 152 152 0 0 -2.091812 608 8 0 0 14 221 14 218 14 220 -2.09381 609 8 0 0 14 214 14 220 14 216 -2.09481 610 8 0 0 14 220 14 216 14 220 -2.096801 611 8 0 0 14 218 14 221 14 221 -2.097808 612 8 0 151 151 151 151 151 0 0 -2.102799 618 8 0 0 14 235 14 241 14 242 -2.104785 619 8 0 0 14 242 14 241 14 234 -2.106784 620 8 0 0 14 235 14 235 14 235 -2.107801 621 8 0 0 14 233 14 235 14 236 -2.1098 622 8 0 152 152 152 151 152 0 0 -2.111799 629 8 0 0 14 234 14 231 14 233 -2.113798 630 8 0 0 14 235 14 236 14 234 -2.115797 631 8 0 0 14 241 14 235 14 236 -2.117795 632 8 0 0 14 235 14 233 14 241 -2.119794 633 8 0 152 152 153 152 152 0 0 -2.121793 658 8 0 0 0 0 0 0 0 0 -2.123787 659 8 0 0 0 0 0 0 0 0 -2.124792 736 8 0 1 134 160 0 0 0 0 -2.126786 740 8 25 200 26 44 26 44 0 0 -2.132781 672 8 0 0 14 220 14 217 14 224 -2.134768 673 8 0 0 14 225 14 226 14 224 -2.135777 674 8 0 0 14 225 14 226 14 226 -2.13778 675 8 0 0 14 225 14 208 14 225 -2.139774 676 8 0 152 152 151 151 151 0 0 -2.142776 682 8 0 0 14 227 14 225 14 224 -2.143777 683 8 0 0 14 225 14 226 14 225 -2.145775 684 8 0 0 14 227 14 227 14 227 -2.146776 685 8 0 0 14 228 14 228 14 228 -2.148773 686 8 0 151 151 151 151 151 0 0 -2.151772 693 8 0 0 14 234 14 230 14 228 -2.153766 694 8 0 0 14 227 14 230 14 229 -2.154771 695 8 0 0 14 232 14 228 14 230 -2.156769 696 8 0 0 14 209 14 229 14 232 -2.158763 697 8 0 152 152 151 151 152 0 0 -2.161766 704 8 0 0 14 229 14 227 14 227 -2.163765 705 8 0 0 14 218 14 227 14 227 -2.165764 706 8 0 0 14 227 14 227 14 227 -2.167758 707 8 0 0 14 226 14 227 14 228 -2.168763 708 8 0 151 151 151 151 151 0 0 -2.17176 714 8 0 0 14 231 14 226 14 230 -2.17276 715 8 0 0 14 228 14 231 14 232 -2.174759 716 8 0 0 14 231 14 232 14 230 -2.175759 717 8 0 0 14 232 14 229 14 239 -2.177757 718 8 0 151 151 152 151 151 0 0 -2.181755 725 8 0 0 14 231 14 233 14 232 -2.183739 726 8 0 0 14 232 14 229 14 230 -2.185738 727 8 0 0 14 231 14 233 14 231 -2.187737 728 8 0 0 14 235 14 233 14 234 -2.189735 729 8 0 151 151 151 151 151 0 0 -2.191735 551 8 0 0 51 195 22 168 0 0 -2.193733 646 8 0 0 195 80 0 0 0 0 -2.195732 742 8 0 0 195 80 0 0 0 0 -2.19773 770 8 0 0 0 0 0 0 0 0 -2.198748 771 8 0 0 0 0 0 0 0 0 -2.200747 848 8 0 1 134 160 0 0 0 0 -2.202743 852 8 26 144 26 144 26 142 0 0 -2.204741 854 8 0 0 195 80 0 0 0 0 -2.205744 760 8 153 151 152 151 152 150 0 0 -2.209742 784 8 0 0 14 247 14 252 14 246 -2.209742 785 8 0 0 14 253 14 239 14 244 -2.210723 786 8 0 0 14 240 14 244 14 237 -2.211736 787 8 0 0 14 239 14 235 14 243 -2.21274 788 8 0 151 152 151 151 151 0 0 -2.214739 754 8 0 0 0 0 0 0 0 0 -2.217737 756 8 0 4 46 166 0 4 47 130 -2.219732 758 8 0 4 51 59 0 0 0 0 -2.220731 794 8 0 0 14 242 14 224 14 215 -2.221731 795 8 0 0 14 238 14 240 14 238 -2.223734 796 8 0 0 14 240 14 236 14 235 -2.225733 797 8 0 0 14 237 14 236 14 236 -2.227713 798 8 0 151 151 151 151 151 0 0 -2.228731 805 8 0 0 14 244 14 240 14 243 -2.23073 806 8 0 0 14 242 14 242 14 246 -2.232728 807 8 0 0 14 245 14 244 14 240 -2.234727 808 8 0 0 14 241 14 237 14 245 -2.236726 809 8 0 151 151 151 150 151 0 0 -2.238725 816 8 0 0 14 255 14 236 14 249 -2.240724 817 8 0 0 14 235 14 248 14 237 -2.242723 818 8 0 0 14 251 14 237 14 247 -2.244722 819 8 0 0 14 235 14 245 14 244 -2.24672 820 8 0 151 151 151 151 150 0 0 -2.24772 826 8 0 0 14 242 14 237 14 234 -2.249719 827 8 0 0 14 237 14 237 14 238 -2.251718 828 8 0 0 14 237 14 238 14 236 -2.253717 829 8 0 0 14 234 14 236 14 245 -2.255715 830 8 0 151 150 151 151 151 0 0 -2.257714 837 8 0 0 14 254 14 242 14 244 -2.259713 838 8 0 0 14 242 14 242 14 242 -2.261712 839 8 0 0 14 239 14 240 14 241 -2.26371 840 8 0 0 14 242 14 240 14 244 -2.26571 841 8 0 151 151 151 151 151 0 0 -2.267708 762 8 0 0 0 0 0 0 0 0 -2.330672 534 8 0 0 0 0 0 0 0 0 -2.730436 552 8 26 144 25 200 27 88 0 0 -2.732435 553 8 0 3 13 65 0 0 0 0 -2.734421 554 8 0 0 13 209 0 0 0 0 -2.735421 555 8 0 0 0 0 0 0 0 0 -2.737419 557 8 0 0 0 0 0 0 0 0 -2.738437 558 8 170 255 255 255 255 0 0 0 -2.740431 566 8 0 0 0 0 0 0 0 0 -2.741435 567 8 0 0 0 0 0 0 0 0 -2.743433 641 8 0 1 134 160 0 0 0 0 -2.745432 645 8 26 44 26 44 26 44 0 0 -2.751429 581 8 0 0 14 225 14 231 14 233 -2.753423 582 8 0 0 14 226 14 232 14 230 -2.754428 583 8 0 0 14 233 14 229 14 230 -2.756423 584 8 0 0 14 230 14 234 14 232 -2.758407 585 8 0 153 153 152 152 153 0 0 -2.761406 592 8 0 0 14 227 14 230 14 230 -2.76242 593 8 0 0 14 228 14 227 14 230 -2.764404 594 8 0 0 14 226 14 233 14 224 -2.765418 595 8 0 0 14 228 14 227 14 225 -2.766418 596 8 0 153 152 151 151 152 0 0 -2.770414 602 8 0 0 14 229 14 228 14 230 -2.771415 603 8 0 0 14 228 14 229 14 228 -2.773398 604 8 0 0 14 229 14 230 14 230 -2.775397 605 8 0 0 14 230 14 230 14 231 -2.777396 606 8 0 153 153 151 151 152 0 0 -2.780413 613 8 0 0 14 234 14 231 14 233 -2.782406 614 8 0 0 14 227 14 233 14 229 -2.784392 615 8 0 0 14 234 14 228 14 233 -2.786391 616 8 0 0 14 231 14 234 14 235 -2.78839 617 8 0 151 151 151 151 151 0 0 -2.790389 624 8 0 0 14 250 14 254 14 254 -2.791407 625 8 0 0 14 254 14 254 14 250 -2.792407 626 8 0 0 14 251 14 251 14 250 -2.794386 627 8 0 0 14 249 14 250 14 251 -2.795404 628 8 0 152 151 152 151 152 0 0 -2.800401 634 8 0 0 14 249 14 247 14 248 -2.802394 635 8 0 0 14 249 14 250 14 249 -2.80438 636 8 0 0 14 253 14 250 14 250 -2.806382 637 8 0 0 14 249 14 248 14 253 -2.808378 638 8 0 152 152 152 152 152 0 0 -2.810377 662 8 0 0 0 0 0 0 0 0 -2.812376 663 8 0 0 0 0 0 0 0 0 -2.814375 737 8 0 1 134 160 0 0 0 0 -2.815392 741 8 26 144 26 144 26 144 0 0 -2.820389 677 8 0 0 14 230 14 227 14 235 -2.82237 678 8 0 0 14 235 14 237 14 235 -2.824369 679 8 0 0 14 235 14 237 14 237 -2.826368 680 8 0 0 14 235 14 219 14 235 -2.828367 681 8 0 151 152 151 151 152 0 0 -2.831383 688 8 0 0 14 239 14 237 14 236 -2.833365 689 8 0 0 14 236 14 238 14 236 -2.835363 690 8 0 0 14 238 14 239 14 240 -2.837361 691 8 0 0 14 240 14 241 14 240 -2.838362 692 8 0 152 151 151 151 151 0 0 -2.840378 698 8 0 0 14 247 14 242 14 240 -2.842376 699 8 0 0 14 240 14 242 14 241 -2.844357 700 8 0 0 14 245 14 241 14 243 -2.846375 701 8 0 0 14 221 14 242 14 245 -2.848355 702 8 0 152 151 151 151 152 0 0 -2.851372 709 8 0 0 14 240 14 238 14 238 -2.853365 710 8 0 0 14 229 14 238 14 238 -2.855352 711 8 0 0 14 238 14 237 14 237 -2.85735 712 8 0 0 14 237 14 237 14 238 -2.859349 713 8 0 151 151 151 152 151 0 0 -2.860362 720 8 0 0 14 242 14 236 14 241 -2.86236 721 8 0 0 14 238 14 241 14 243 -2.863364 722 8 0 0 14 242 14 244 14 241 -2.864364 723 8 0 0 14 245 14 239 14 250 -2.866358 724 8 0 151 151 152 151 151 0 0 -2.871355 730 8 0 0 14 242 14 244 14 244 -2.873341 731 8 0 0 14 243 14 240 14 241 -2.87534 732 8 0 0 14 243 14 244 14 243 -2.877338 733 8 0 0 14 247 14 245 14 246 -2.878355 734 diff --git a/tools/gui/data/pcan_view_v2.0.trc b/tools/gui/data/pcan_view_v2.0.trc deleted file mode 100644 index 324c8f5d..00000000 --- a/tools/gui/data/pcan_view_v2.0.trc +++ /dev/null @@ -1,29 +0,0 @@ -;$FILEVERSION=2.0 -;$STARTTIME=44018.5165532639 -;$COLUMNS=N,O,T,I,d,l,D -; -; C:\Users\wachtler\Desktop\asgfasgsagsa.trc -; Start time: 06.07.2020 12:23:50.202.0 -; Generated by PCAN-View v4.2.1.533 -;------------------------------------------------------------------------------- -; Connection Bit rate -; PCANLight_USB_16@pcan_usb 1 MBit/s -;------------------------------------------------------------------------------- -; Message Time Type ID Rx/Tx -; Number Offset | [hex] | Data Length -; | [ms] | | | | Data [hex] ... -; | | | | | | | -;---+-- ------+------ +- --+----- +- +- +- +- -- -- -- -- -- -- -- - 1 4.698 DT 0120 Tx 8 00 03 00 00 00 00 00 00 - 2 103.080 DT 0120 Tx 8 00 03 00 00 00 00 00 00 - 3 203.809 DT 0120 Tx 8 00 03 00 00 00 00 00 00 - 4 303.472 DT 0120 Tx 8 00 03 00 00 00 00 00 00 - 5 403.241 DT 0120 Tx 8 00 03 00 00 00 00 00 00 - 6 503.981 DT 0120 Tx 8 00 03 00 00 00 00 00 00 - 7 603.737 DT 0120 Tx 8 00 03 00 00 00 00 00 00 - 8 703.413 DT 0120 Tx 8 00 03 00 00 00 00 00 00 - 9 803.216 DT 0120 Tx 8 00 03 00 00 00 00 00 00 - 10 903.924 DT 0120 Tx 8 00 03 00 00 00 00 00 00 - 11 1003.670 DT 0120 Tx 8 00 03 00 00 00 00 00 00 - 12 1103.387 DT 0120 Tx 8 00 03 00 00 00 00 00 00 - 13 1103.387 DT 0240 Tx 8 00 00 0F AC 0F A4 0F A7 diff --git a/tools/gui/entry-frame-select-sub-tool.png b/tools/gui/entry-frame-select-sub-tool.png deleted file mode 100644 index f1a5383ac43f4661d1d74554cc2b6c5e48a53f08..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20886 zcmXVXV|Zmv({=1jY}=UFwmGqFPEO28GMPA;*c02fZQHhSg74hV`~Aq3z0dBeyQ`~f zRdw~M2o)u1WCVN!FfcG=Ss4j6Ffi~V(DNc3#DBk753qp#fxD?mi-A>55uSoxpsYj{ zMZv&oV-ep?ph55O&N4b~U|`?+|N8?Ub}BIk15;&?l@QhNG`!4$HO91f`?AvG>U zQ1V{4_W*oO^IuzH5K%jhrTyO?dZ^sUXg^QXu!Y4$hH zDiL_#u-iu$Z}vCn1(V9;fKw5Oq83aCCPah2TZxQHp+cRqyGNVXGp_%ezh#F5 zwRxW5Ofb;YYyLWs^@kA!eJ8$<_1J18@Ev2`F>UAJg?R(s-T&9HnY8|yb`mxx00WzF zWO{{~W5(&Er-g|>ARDlaDTFABdho;fY=KUQYH%c;;#K3BB5_nHTfkP^LG-Awtea)$<==0TY=lm0 z<5jc}SV7k>jZiT|jUU+o`M9nylF!GLOnBV1VakmeCo53Y?CZ33@bD8wMC5~;t$vsF z(?as|yf`s%9}+A&Be*lhjX!ibXvo48*hH3x_Ge1*YXY;(`-H$+5ef{)CDN~4pKA}mG%>=@PIuH&*Q$+3FV?4cvUY5^K|G!(bQ$fV$;-iGYob> zm~6ncLI2UjrbOAQn*0eQ#}*?tb9ALD_^kY=7H-fWc&NsHGBWn7&byL3c{F$xSAGX0V%)C64l(3L?i`2w7=OGnU zg6V{2k@yMud#ps99*!w|5YB9|!OyC6P2^Op;_+vakm1W;b8a(L zuIm?r2zmGQpPN8>y5FUCG80RcQPOnilq)?rUkTQi$Lzzu?&?bR-pCxO-I1O{Zs@d++6(n4JLE}ul{EylZ!==FPR6t!>y7Cg_H)b*uk#XzGC{Ca#GnkwgF zU}qIY=^O#3|5#X9%Hr{3{+RIEr&P*t^>}xUt2Txw89y4;vFWe~u}tt9$1Ei$UBGIF zY&z%?{YGY_Ay0e2`Z!9~U`n8u&!$P0mFB%0DM3NHc@qj3{J=E`Ew6O4#wEo02)OoxNc#weusc8Vn&0NxV50t>apWK7 z9ZfpIBtmV)hmH$EQc>^h6R*-rpVj}+ljZ-QIJT#0H|Qr62$Z!zPm2EkeR2|^7H9bn zr>g@E|3hsOi2p-vk*o1fVELwx(Nn$n3&`H#=1feF3hojF*#f7}T$PgknNz?8yMvRi z;{G?u6`#<1-n-j08^jbAD z;v33lB%6N=omG%HdrP2*mAtX|Z$irCX5U%=YX-1RF_#|{mudI~ql`^_R1cCVu1b0- z-JHbF2Z?0d@Dnk|VruHpjEic1XH@Dak@Foe^`HB>%B`%uumIfaSYql=p_zZwHXggV zz4-noHo=K6BXAYKt4K4i_p;~$YV26xmOzAt(_b<8ADYNa&&aX>w=9OYObny*Zm$Nq zFAnPe>(dd;2r(2iC+^=__rp`e{|OnF9XKd$1DezuD(!!Z><5EB?*CfN@X~r^(%XYA z1Zp1a{ud3=kSyV&zwXr+CfFT%c6Qbm0VD;*ZE5#?0uceh_%WHx@yOJa)TmV46&NLf z+5h##&f>EPO*MHbX3mC}Bj$fT6N!CdK_SB(^gk6DfmC$reRh7%iLWRxAK7bctdl$~ ziCQoZ(t&}ptgNhs1yxCtVf8U+$xabe>f);N-aG9{(mM z2d8YVto#P`>dqv{xZ2*0C+PBp>>uX5-w9xJwRgKkE(UZ>?OO%rPqTQL0orwIVAd$3 z8z3VkN7ldo&L_-nJS_NdzfN5B*e*Vrid1A|WRylm|JNN^^V;|~zuVYh6a|FC;|q4@ zy+mj&#T@k(Pvgy&2=(>FU@Gpd^`!fQmdrzk!06g5pwdseZ=da zAW_oASKB%U+#=^Gx)BJWC#1Bd;0ck90s8DMua$>VVXR&s?>UxC{`BMO`5&L#n@uSf zvpW#7EA+FH1nShsvEReFnXdP9u!$ped6|)S7oand!nw9noO2p_EEE*y2)G8u(k1>L zo@aRr{v+67@zSh6VM0|OIij!8cc3Z>Eg|(<@*6Mt36chXUEs}672;YBW1271hYN)x zB`phej0irJDXj=>Fv3BLWC!1?&iHUWQyql~BOISC$GC}bHwq3O^8Mv6ZsKkGb``B0 zmKX{4q*4~Z7sz9|z=(S@?k=i?8Cvc0`~nN<&=g2Ia;a1e9~I?iOi1#u;>TTj$(LsP=pSQou8OQl9{CCv-d>aCE2i z-`KSfq%qBme<2 zlxIkj{=E}i&{9MGJ%j15gF1Kgi6RY2NFmddwT~!Kk!F(%Wc9zsV@=n#Ac9GoabE5; z3&v3myV|U#v*Y68T3UEsetLNPpv7DO6OEgS`^91;2{Lzj?PLd=SZbt3Og7hNl{Gq_^lr!9lDO#F^bZv2$u5N-U-{a?sL*AZ54x$Z)B+R zai>=QjW>+ug7V#Y935W_L zi}~HimbaG~gt!niQmMGzSt-zAI$j1kaI#Z@?-=zT9i8>A)q(lQ+2=bg)-*JagBuWj z#{y;#b@9wFo%XWE(xHia49k&n4D@=s?!L^f)jv6}5DPC=@lD}YJU%X5I%E@-O zloeeyJ_|)h!1+DJrx`;AtbTc&_uo=rSSqwZu61PwJa!9T;jytEt+ui!$w}7#0LDHG zxu}$$hEXtMjuAB$&>ii_ax=uy!xl=@fqW zmT>)H!FiwZNIDylM@_cwBol&^Z*dI`tHHtXr3+(0@gK#TywuEW`X*EsxwF;PhTN_* zf!mWETBRx~qhT;ua;+0!LM>ad)+f~&RigKsV-U%9Z zK+D-$TR_K`>{rdqF>w}^=c-ANKWML5v6ypPHz-ec23*|qE{HF4*!8ZAj-FOezkdS_ zC7Ej;Sz1wL@c0^VUxn4m%dgb!cJaISmiWrC(==3NI)Sem^E`74KB^uFV`IP3gMW5* zrfg;S?y{YC_6CC^U0i%5n9AXq%Om#B!RB>2efsEeJt;YcYbGcD`+ zmU|oe&AYHj;OuM#|GSBBbapg6-RX^Y-xpCSVSz*+_%%=i)@)i<2 zi~a`kq5QO~5H;d{_w!psz;8Y+e8OMtyt4f;3`quGN1O$~nbXH(W_{g{!J@gb^iQ&0 z7Qv6yly(B6p)9dW0cZ2^DnCTxuIreAJc}evjXILFcqB>wCz4N(=`LRN>og%7!imq8 z>zk(rqZ}XmFB!` zLhF0LHuxy<{mfrkV|8_{ud6U8?X+EGL}FOZuj#gEe?#H`?=!$o?0wR@vQg5-RAY!c z3rPH87Jb9VRm&u?r)HcSC0x|?jf%~d%W#8mCF_PYrOY+)$!~Aggjp3^OwL+x?ExAM z;arto*uU&l%wI^dQ*rPKWlWc@eN){!Phtj45J}SLlI@*y0t8*&?yvp-M8E~Sf6_@> za8rndK=^jp%q9^Gl5SK@DG@YXm6VnGUDbxexHUu0wGn|)w&Osh_gZ-z>(qr$W3bUw z8+JnZGYTnEKn!GrS0mvirZ5Jru{znNvouVg5>Uu!LHO8fDrQaP0#xYy{Cr7|bxmfo z`%k0OEklB!w<`rP7EtG+XqgmDA%PeXbGjByoo$2WsGk6fk6;2~&Pmzz^sxt+AhzWJ9q=!rV$!>5M85`f%7*4KR;>C$ufK!>l!Oz0m z3o|QFX?%iS$7P02D&>DA3lFdTx?1asEUz9$Z@$O|-zF|pO2*+bJ7d1U?()s+r%Lv083Abz( za!=3L?!&E&9@;~BtvL~wgk=POP zbR6}5A{dpG;8O#HRez#hzTA`F?dt7dlWaGB_Xc=9MQl&E0YtvwRGt#*5O^5~&~Y9Y zGGRa8C-%i*2HYbI`*XcTjSGmPyhGkbg4Hvdz3=S9+zOPtzyGm}_^sQJ@^XqO`Y$>t z7P?~@IoB+DgY9HWSt3YY#*~iyhYF+%VnStaX^T!5(Fa>|11DDrv!ket-a#`0XP6-) zKYFx^E0V)SDEB^JO(P>_#CL5C8_sO-?3U`3;{jC)Y$3Mu#lh*0)`wRuLtp#{{DO`C z$;SIz)F3^kRn^(si8rDlk^4W7nZw9wG=_$Q76}4XD(M~LG*W|TG`vpFOBfvE=ray+ z_Z1rgYbmILqH%iBS(~Ze0BXqEslKb~g!*r;Qgj&E=a3~qk{Re{mY5W}<|bhEdxQ~Z z`Z%mQI643(ovdM{G>6c_BuaUk_!iAxg}$vP7sNXUtnYk~twOUi3+Cs7WTcaFg%FvJ zobT1a1^*BS)93CJ9FP>_>abA(o4_z4>y?*m)z12)50Z!&=`ss{X=%w z^gMaD*2cLE(+NLa-__8i$^2B^APik3ym3rxQT5G)U@fuOsI@D*x2xX<{g*#Cgsp52 z3WX()n2;Dc#>=;49R-4Duq0&X;IgpT;4_gOw#8J8m&k`9@`!pB?5B&PFZH-B@WUJo znuglc5ibZ*`LJrVJCB%B@oj8ug3w#_k1h_N>Z!P$n7^$11B6yvZh@Px%ZU81!NoDN z=Q;ipdV*drhlRLh_RB2byl=rFE+*25V}y_tAhB z=MqreW)<#l8?=50NmLp#kJ5ObS5V3OLBu{fn_G&EQICteD^fM!; z_}oUEX7qmFl`d8$<~Pp`FL(1Zn}2G6WVPwVxEA#;HqUU($?o(IIz0l#wm!cpMRfV> z;r~R`5+eg%iptHY+?RUVmd;@@xs_?{@bbU^T0RvR|83qp7ek9HR{K|S3f#$$Rcg)D z=4`5}QH7Q`JGJQnx~uxdi?9U3h7YkjfeEhAbiy)2&pjhx!|hQjUV$1B5k8&ErjLT% zs^h_aY<#+KK>Eqf#%9&+sEje;<~7FE zBU8CH|D8T-u@)Sb;pzi;I2zE+agh`$TW!#Fo$>FNcjtsYyY;wb>Tt|p;hry-Jt8oOHN}Bkx;y8ZkmDZ;#QsZ^IKL55{7=&`J4L(q`X8YOEqs}KO+EVhw+_Ywe*< zfq_ukV1JCWWb;f-5~BR4bgjI|6zik*d<~ohtCyQ}S$lc2lh4dTjY&CZDXq~abe|>N ztbvr5=ciZamxVTtU6~mHbTqLUza$KMf1>N*^78nrj_pSV2%{7vmpk_LFD~|PGEuVL zY{~9VIz`oU!kBV8dWwDBumZT3MU0Gu)@4e%r{$Fev)QimYT|Osxe)?*-7kg(yWblC zU-1u7f6B^QPDZS9QlC?-a(*Mg?=i?2pVdkhv(VBBXQy8Xpc!PlsL#IECn{g21z_9o;Xb+=8f)(PYklDh7uen$q2l1t`Qm%93f}%NR zN_3~fN`H#$XN0$NBD*fW@#A7*2Vp>*65aK>mXyO3sWck)#>xn=%8YBc;t?S!(08f# zh8cP{?b6nrK-;w$I11|Y5)6l6nZ9IGeyvMy{w~z>qn4iG>pVa|1SNoH~zMmi2(_QP0 z-uuk~KEQqyZePFr8Xh5LkFx<6*Lk$yDk_tuI%!+y$^%Oas@9(aqobpPqq9A%KamBW zZKeLd?A&98vfvfa3rJSHKr!uJVKeqmJRjSHYn#@Jh#yJp$n_!9VxO*Re{aQBG#h0i zdtn})cLT??OsAM4d24vsE?+-w0-`p6aua#N&(j3QvnP}|QDmZX>b_@&F}x3^=4+Ah zK3_CPJHc_}D4{%ja`rI1c196X2QcDAgJ{rG23a0% zX8{7v4s=xR1P>1`g{vb+FwfN%YKmL>ne>YZhm!Vold@D<+ zRrj;|!u7JXoN4-;f)&t6oBAVQHHd{H8PnW4WyrA14a4tw>KmhK`Zq{6K&XkOifF;Os3U85hh}IR=a!;3oByn&n4JRC&6jIn zuGJxydFHqVKMztQiSfr;^bj>Nt|D&YfgKiaZO`WF>C~)jZfe1wS^{rPjP%eUO}WD$ z3L1nz@~!B^`xeTkhCejhk55WB2%gOFo3P`C?QgxI{@NGtw{-Y_zJGTj+&zvus8)J< zP%zAzp7!9hDYcB&n@ATAoAaZn73o-Cj|ZE-LaC~XtW%OhC53&`d4bl^#Nuv0<0XLQ z<>#(3bsS*{iWxqv^RB{S4RrIs*%xwjPB6kd?|hDk6SLy2zTe3M^31S%cTt2^(9Z%* z3n)m!RYy{NKFVNPvUaYZtR5?tYr02vg3z}hE^4Ey(|NBS&mXxIRce4Y&euylde##b>#7X();l6sa1{BV} zSD}NuQ3S`CnK(JD{+Hd|lyDcjYEwpd!Ha3o9G`nNKVQMxn8IkKt>kl1r7UP`rKn3J z0QlU0Y@XbLCyUJtjIk^s3mCY49fp;{EQL&49B?D{Q`eyD_yF{jIRStZpWu=Vrkmyt9!Qi@m+RvdPt+gi8kW2!j3Bx#s; ziU!=Q$YvP|TOP2oaPw@Xl2v?{hF$y{v9C$LSgUTuk(t5-69ctl9U{Gbq_;yUWg6p& zN5<5tF9-=rSQ|)4vkPBf*?6qQAk)#&y-zqGYQiejx6q8V>L899BXW!Zsvdv<{{iK} zj|Zf$O*+VP-#U79wy%CgCnI=a1Ldk6WcMX%V2W;y{j4i*uf;Sbf?;~AH9imTGn*21Q$-d<5GY|IfNoLoMynXu%w(6yfG7Qsjz znMf-i{8y$+qE{x2&zD3>!GaTK3hu(d=7Z18yD;8xD>AZ zV5oU^%TQ@)+^|*?;<0q~5s=+`VWG9@tmHg?qn9+XBqS>f<&O!1v;B_|TkDu0mySFa z@a}k}0wD?tGW#!bWlikKnOdRlzbNZ^r%QdCamakoO1D=CvB5>61DO;n-&xjl5aDSH zJA2Uf6nAx2k2=(Su^~H3p#Q$JP%xM2x#_)~ zoSZD4vT~``{8#8s`YViDajiPs#2OGyaCv$*A6VKXsBpX{cOE+^H3&WC-od3ZTxvfzDgIav|2$R~z3nq>1j?Z+R zQ3f&tZwg;#`j3HlR$cN4GbIIdBJeJr7Z{!e|21d<$925BUS4cY zZ1%)dJ32n*!`!^`MiR%u^nB;#^n(j*1ebWly4kjkw-772Z&A-s{>g#K&)tlUl1;yi z_G}-{^GXyiQNyv&80el}s=&l?G^~sUlNfguUSXO@zP?N^Z>~-1gozli%D4vK@5Ljd z>}shMgr!Pt80><3)CiOVl9quQqqtlu2IJEqK%1M+RmLq79p3(LF4aHP@V5o~S}Zg| z7f%!%)H*{P$I=%VFjQut&iHM3m2%1Wq;-|$5@=Wl~shZjms+iNDOijGGc!N zvKcY|Vu~Ux`#q1DfI*0R6Fy9A$QH1b@ah(NS_mE6dH1efUC6BezJMVL{t5g>1oWH- zC{7N{x(d_b(RFZ^aWVH5NH5K5WNd zBU8kJA+QSto}L$ujllvu&5uF=vC4#)7(17zdnG?o4c<9S1Z1>H8LO$dF4`lrQ|u2s z$W8AQEP+)V%(UcBruSMj(3R9 z>T*Hf|1*4)OB6OJmBV_=w?3Cn%-QrvJWILP}~Q9_wA65#pSXb zxcPpNq8x>F?3PBD$BX&TM}a@NUVO@Q9awqrH?#9ZO=&pl)9e zZ#72Vq_OQrMRy$d6E2ySLIOfOjOm$^2)`a?zg01_3h%|bhrf82NFFm_+`{uA+KA+2 zD|v&eO4nCl=7+ifqImnnwEUtI4UjOMRA1|4-!2xLlEg|xNZ?} zvML=;PI-$8@(^N1WqhZH=$p-TD?7SA0fS785uxwNi*IjEH#SaM)HQ^H#$@wI07O^! zbIKqFFO&daiNYo9jz0@vG&vOA?gxXm7$^q$j+=otkpwkuQm7>Z`OkEpuwX&%a+Os(;KAMP29o^W@hjIs|v@dPrsZTf2zL zTEMZEeEm$c1vqE{Vf#w zvohA#|GxL+>NJ6Fky6|aKUlbO_@u9-|IV_GeE%R^@%GPiRY%HB z>?3;%gIk6y>qZ(GmMCl-9yL$J7nY&N&ysV4so7ch=V}jkcigJR>>ZVc*xnH{H0tK~ zKkfuxtTvcxFTEpEmixk>uRXtJ6BW~sQa^XI9jknsJn3EnB04@@IXXN3*%~Xj`} zD96I*WAsLD2T*Q40Za3meqKK;vvpUg)_+-hySce3nExur=pIo+w8(N}Xgy4r43)6$ zogezmd8aqnGTm&otu>D1f5sE51zi~ZaJyqRxDCmV}J&gj%}TaD^y#c%49>c^550;)rN z#rl-+a9x{LM<1qU*5peeugC1gL@TS#T2F*mHSZ<+asIcW3GKiXlK5>@2~g%K8rO86 z)U0FiU7UlI`=|FbeHKrYh&>04j%58!o7IxKCSF<7J9bTuobb?bnVOX00651P#ay}X zFM?)G*QdOmIi6+rH~(cz@$Rfb@otuH)ytCVkcAbdQOlYvg@Z)Y=rW<0q{HNi59Mm~ z7Or;(#n}V-5z#BnSajtIPOKL~o)uM9{u94VFor0DK$h#rFXP#2|gaep%!#>=piWc((`25{IIVTeVKDo#Nx*H1ylEk>j~Z>T-=z1~B` zl7a*ZEalxWC*5Uh7>n)h$qMq^zk=MxsSsEw6`uJjL3za+_Sh>XI4DL!_WT;^ghPY=kMQ6LP7Pp7fsc5_Hb7z zAIM>CB4px>frEE<)zJE($=$s2cG3A$QiQEOyhocWcmskbC?9l_fL~jUQ?kT67Ah@i z9;)cL#FuB5W~SNo*apW}9;d1NAS@(YU>;b{wV*28TfaN_JCkx++*OB2i?t|i8mTCptoS7-<4iB(AP?_wYvfSW zf$zd2GNn0Vyg_!KNaGuho9p@H)(Pb%CeNDBH)5t1kNlPf-}S0a#mORCuG_fR0=%uO zssR0)m4w&WU$Ad@Oq58y_IJN(SrZUbLgTfgM70$V71AyZKd1UY+$tGm(I=;u9Hl^Q zG?}6m)o5qT&E(-0Lnn9asKGJ+JXOCEQ*Fd^Wvi?ME$Y|Lm*rHV>Y+lj zC3*L%fbV?t3&CW^HD1}$By#IWXXY=JdGzj5)+UYdVMAtaKK-(2Zm9+xlJNT2a7Ulo zuO->8LH(FOn;r=B(wDdpJh@O`Yx@Jl?i_B=MUcdWgx1-7!#w{;pHMr z_p9R&)%{E<+%1m=f@EOM^ouG*vQYC*SA^MSW>zks7a{?n)!x~CAoBj03h6f!Bi*X3 zlo(5`9AgaHJkKb^UGhQo5S910{}LCn_7M=pkmL|V=N4>+b)4Q`8M?PNUGReA_Dqlb zy5I9wQKj_a#_@YyJmQV^_LdKPjfUSaIh0-=boWa6Xy{oT5&HAVw8XRKPRC^%!r~h0 z^3srfd!Ve@Mm&;2HSA#Vq%FX3h>PwlGgu@FBSZqaq3f@Wc$|*WrS&iv7c)E3K=|GtE06A4evXn?3v=y%v})zoVSdk zOjgA&*so>1rIhXFjm&2$876&Ni-XC=Gks%I%k7JH;s%;qQ*w}6WyW|(K`t=Y?K12a zB3^q#|D4}ckiZ5(`5`Hwd2N(B;yHA%f1CFJHx)Qj0fYMZA=B6zcDIUEW1<)&GCr;} z(|N$oQ6PjFKV}ub+WhpmnRcHDK&$!lLyV%of1=3WBu^B)ikX>o>C|ew zz;CnYszY!?3WY>XN7HY|GwgevJ$++v1;-2QCkdx{Tu$|KP(Dp{h9PfXvesfz&SY6> zsfR{6oL%(&)7lb1TIbo&^ z!6j4RnfpKOaa6oKO&|voSCLJ|C2mTyCL@Ddr=#A_@ixLZx-=A#3^BAE6?)A3A{rDT z4lwk^#-GP5hC&J1wXeXO&&N-i@M-f}Hl4Y+AhR%(E4}UlG#K z{M|nD###;?^5Y-=i=*IH2W+2;tBPSg^Nm*vE40t(za_dg*BouYHOK&d1URB1nMHv~ zolnu(uCPO34TG~yj;pRRKiXJkE#qR3Pte47IcjTK9ze&F&+cd8kLhB9?$6Vda;igw zq`jDUagz3cvikhfItP>^gvZ=auAiZnX5;U{ zEP7IhF4ewK;v}2WFhjAQCsUL^Zq#^Q=?~6GG5lsZFo&|KM++Oev{nCKx9(9f8qI>P z=Zz93#Zijy{qNEiuCGl*?ZRLF+?hr^yrm$=*W0y~I2?=5Mf>B@*yDTC|8zsXiX;3X zEEJO8)zwu{KnY@>HZ(NU)}ldf$oRPY{D}+)_xsNu1SBM=(JnzVYA(~&b57j|*vo%e z4dbQ&-m&UHV--bcPz>ljzY>eEhscrT3n`@sRnI&T4hEjC$g$BC3e4=?k z{bT!wbYBRhVZbShAYN;eh;E&puC7Sq`Po^|;L<52NvAZb4{eg1bJga?hDbY^A0qdy z-tWtv--YHOU|zJVXpYglN{>}+mC5lqHk(x(JchG891(`C%fxHUYRM}q;{3?EIJdl) zm_LAVT+zr)ey0PC_9oShU1X~;A)?jGA=>>cZ7VXcfe!e8b$h{2^;#mf#V+KV3S!{y zo1XbZjTnCoaf~-2{g!tynf(pzj+p@S!~ju=FGIdiH_s^|AH?;OOn31qBgyz^6EMLI zE#+NquAYYdMK05xyWa5f%mww7l@nVK(BxMfUccY{^{fouC4^JwX5<5K$UjUO984z% z0}_qeOp4nh`l=HJUw!VKE%BPl7&-7;&ZwgK*-S&s>2iQ;YhcO^%2+})-A%rHgs79G z3u!vdRDXGo$95B6lc2xH3JdwjQvt8hMWt|2dp4~Zieu1&8xY%WXOJVd%N&J`S2s8H zli0l6LS;!Z353z-|PK?6Rh)@l%nHRMUf-l=Cpjf{asebYaXLieuU2e19D&riLBvKdM-4 z(r2Jn?gx5%&CKcj{skga%cQ7i>wXS}6O^5wU+3^#J-b*y4o##oVoQS+17zzU`_O`G(5m5Q6u>Mcp>!r(Q zhMpHdf2TIh_o$q5fqlsjc=eoed^YeDq3?sZ;Lk>GX z+7DdCBF^$f&!AKFVe2h=bs6Equfx!ghs572QV$%&({yK9j+Ecl>8`E#x3;-zGgRP` zI27#)a0_vB_>W*0sBM?th{JqrzuL;(T_aJbG1>Z@U5X(!?sQ629swe{&sFwh2OOC` zwJ~jLEpzo`rexT8ssysXW^)U+HU%)V{GI!?vZ54^d+w|E6bJb`@>gb)*(RfLF$*H) zJ=JYx9wDe&%(Fnm+~$HhSk^dL}^BO z8XdZfaxH51C{38)jj%x5WBtz0kF5}#`)cdPwxvCChXu@_r!{pxqwzNA^!cDW;kR`&t0TqaI+^yzr^zK^np$+I)y-KtBEr0*jF;7lT&#cG&a6a%TlAZVM zEO;<=6gAQDl8=l*>y&E*VwNk5YpF2UNlmdD+=?Ne3kT_wJ>NOUMk2++qdYphb%v%8 z4!W0`vkw$oCKDhkFmu7at-?Xf1*Q-KF*_wnq0wBRh%urWv=>4`u$ zHErI=^)vJH?3~fbK}rOool>Yu5OG3KUsmUe?jm&*W_$A~O!|u5jcHA`I^JVQqOqdQ z?8!71hX)u8mi-7@2>(@EK=8Tt%iWDd9ZuAt?I`(pPmStkiwd4JXfXG?4b;69QgV?u zvGH#GSJ4oDD#A!08pj+s)VSNcoE-vS*sBpT@NJ{FRysaiTk?jFpd*T~pn#jx0qv>X zC^r)S#>f6>z3$D80blSF4m)_1bglG^TER2&o1?$*f5G8z6z8ixVuh+ zSERPE;jQzD;*cM&ULl=FZ&$L&AR~C-*nzaw)7{84IACj4sxD3=H5c;)v34=$;q0i2QCQfftZ1u_07a3AYZ)%>8P0U_#wJUIV6BI`<>a;y}!mUxj(OI+fdL2z;C zT+Fp!YPcmo4ZhEyA@!`vIv69*WHFgl@%#5e6Ud1COfQ1tl?x>opqv?f_c>-|N&zwO@Hgdl)*Auu8dHnsYuH)s_4gyakkUgaD)gf`=b~jjTAKlk`5k2lP?O8+ z_f_91fY8t@t}DG=xiv365%XA@i{71EgR5RAfvKwEu(QWCd8HJ1$B-YscU4;@C8a^C z$WebmQ&!}31zSpJ8 zN8z6w)$O9(%!xS7w3s?_^kc}s{GD7*As1_V30x#bkUoV4Uvd4e)%?WwgC6F2p_dzV znUH=;`0CH?h}P^39%2cT$mR&yWHyKMrv^@5(c2F-RD#1)DpFh6KP0KC;f&9z<6KKuZ*gGQ}ZcXrK88zln+r1nTC=! zvyhgEes+Bt8Zu8Q)uQcw{{YV79OESay%zGk0Hx(D^jioCcaE>lAYyihNIZ@)H^5$f z+@T(3nph||#9+3td|x{Vd|y3E#)I`5Em>XN05Lilx> z#BXLAm;s+7Pf1|p$5QaXS^Vdfg~fpw(#Sd76ue~AcOdS2Y!+3#qZ3N=+fY$u`?G2_ z@0a)Nlu<0q>uXt7+{M$~`Odv;Ae zl1W4xL45G5U7zc3$TvXW^%(ngmm58}iXdYCC`zX39g<&^$_Xo0d*+M9DUo#8sBIf!1{g%p|dX;MChD}~L0}=H)*~C{U zik$=ld}T%>1+x^?vGM{QZ~BQvY51OP?SgC+USe}KEuSA(GK5@*F|*D$VB92sTzem@ zD*WGjOW|wdKg2^4uW>njjW2o=i;?w>oKYc~@dcL9ZXr!6-h!NnH(4%RdpRTFV4$&u znb`!$L8ZOJ=P~i-x1b`(7WDa=NV##AL!5X2rH9>+J>%YMLQdbgliivQ=dwHxXV05# zcn~>|y^cA=!%3Mxj>EI3=LBxlEpmVi@;`Dt85cr~2a0m*_~0TPJB^XHuvmZ<%ORIF zN6kfzC3(MCkrFN>Jddet%-7OCwOt>d%HR4898`Ym%nSAf!?*XhS0wmQWl#`MW3KrP z8;h%}@C|orhTzsDsk3U%?ET`w)hT~f@fyJvj-_PrGyoi3 zLYQrVXWZp>9J-%+f7#OXOLxTaR1kFG(cu%24SISh7-?rzD~tS2AH8`F^jVlgpg6T$ zw=It5kfH{*m&?2IdX1IuDzKLRCIUKHdzRM+SK~ckKS0F{DM?yq50qiVC&zBv27vdQ z@jNGwi=h1t!F?&6fQ)GJB^Ov&&F-CCvBZ?glwQ(m5M62i`eFnC>(KY7tfXvK*AMY4 zIiK5o`Ed9kse{Gge3M*F6bYRv&)wjmXQ8M>)y(qlZ1KsAuE-hQC=H396U(;0W6_z3 zePF1v3Kfd%8XjxDU=}lJQy=)q<^9E`z>h*W8$wB-9akGRGz58yN8-5A_EyeR;J)9i z!>dL4h)=4i>#k(m$Rl)~s}^*GF9PE^aTY8>;O_06;ihQd=h5338`U4E1RxTCd4-t; z!VU725#c5i{(O1$P*c|nXsmhIck0^5xh!{TzW%_%j&6b#6JRp|u^-3dqug>gmt3%9 zMRK!tPxZwq{sYI;-AM} zoGQf@aMa22|Jpdus3y8C4ATTPbVKh*l_p3cRRlp2I;bG11St_rLYEFwL^=kL4vNx* z(0imxlio`xMoI)Cy(1{x$oH*#|J=Vb>zp}j)~vnv?ESvaE!q6G(%;J)%a!6QLk{*? zn}0kF8CloMPvT)dJI2oztB2APA0&caymQF`Nz&Egm54)XR$#q2~ zIrR(&0_KQ{46RJD(|f#g3^<#3RHU6QfZh9Qmhr?g5;8cjxT~m#FKNl3>!Y>|L1|3O zH&sSPd7@1PZaDn-A_27ZL*xNPV#rr9uy`E^GiKHr^sNN z0bhbzfoq%jgeL3F`JdDz)drAXdjG(k?IXDlrNU6d`-=w~jwPfVIrm_cn{41uW+o4+ z5!>8QVe#Rxs(nNz9iuI^^z@@$X z{EPk5tj?cpuAZpwcJVx^4f7fLt8Po&jsrFD1+Va`&8~sUdeC06HGE^WjVTg*}F{j?iTMJT*D6_jLJr$5fE4ZnSCbxhpp={ect+W8q*f_ zT=)B!j$r1sP30F0xJ(-Q(!Zicgc@wS+wAO@`(jCm_J@mo@vmt~zDiP1n7BFVce<1& zgFhx<9&j~vH=9CMgZBdOi8n1fbp@_GrL+MfPqx4Fz1%OoZiZJI#7+mFuz7O#Xk9*d(c6hR${c+0c>INDSD$zJq+U$(r%5?=-RD{f;Z zuj`0~9STLsM@Hbw@sg2@spZY zK~|wWO~zyNG`|`jCkIVoOP1F1az7W@Tu4a8$;nm}!=g-Sku>Jh2=RsU^$@MF+yhrn zggvsb1jDc+deeF|vJB6emPX<4Keu8`N}k!l@r@44gD(Sq zx)@pB0ucRaGwQ1jJ0^V@cc46+$G6cl-1rksAJDZ#Vp8%9jdL;fM5!y2=ZW8iE9%GB zP<2EK><zut7}?DxkfD4uhV{+$(fCDNot9o-aEl&q>VYA{l#edUoig$ZqO zi;drDXm6FzK_EqG?y_F1N@{2|$DhGnpem92~K@>Ed#{E zSBB+~Ss$t^Y{o#We>@Yr&7{54!=$d95MLq58!T`bzXdfCJLQ0UVoA68Fs0etJBU~_C%<0y90aCHGRnUUBKGK%sO?FcniX7k<^R>CQfj2CpRVUfLT7qN^^4HX{|O%bSGU zNLAbTqdjH@)VffVp*_H7xJXAe$nENVbh*8#-$_3AHcJ4zUu9Ao|E^yg!JM4wM{Y2N zz23_~<&07J_Uz)1sApSlBt_E*%5OJNrOVN8{jG3@wP93r20VAlI4Y|W?60Zr`i=8O zE}mP$GGXDT1_~n?A)UhowamN|r6uuJw?)j0a?wcWu9z&4N?qx8y|Ay{{t}SWlD{dJ zFr(j*BlGA>(Y#KmQ=|KFOdeU)7lx3RUbC+3&Ie7Y_vWj{6r)#`5c77veelX>yy_{T zwQ)w}KSrolBy1+YCi)tVNX27~tITP1Qmr@(7F72OM9*74x1yC7r4tx>_j_H;rlo}U zhO-cfZ&JPQ)FW@Uxy119<`h0WHD{tC@@E2~Ax+=LqH}&A6tKYLV7JbKJP5_~{@r^L zIbr0jU47+aaDgPAdJO^_MR(LMuM2T(31|BA_-Sp;ew}JmG*swBvr?Z|g+X*WDRl`V z4Ybv1Ry1v?6Dc<1@iefiu^m~ZV+4&@c>2k5@7QNSD_TD%NHi>hfb96U-b%XfBmt%uV7hldnFYNy94QQ`(AqP0##Ln+CTF zBY*sTAM}C%AFu5W!?Q1gFJ#N|7XaDybgrOs&t}D%!#9lT$G`~j(u0SRTtsU~!|cSL zYmFgzH4Q4FTbAviREtZlEcGD%cnNoYt<4=_MM5S}5#_F*<2RE31vZgn$NvL+(Ef|M zI1eMYNTOU)hw1-wp8i?JWb1!&?uo8t`#&qc-+q10h6?-lQRvc<-#f>Aq#*{0)ls|C zQUN*=ko_C4$O9m>#5N!s+pahjmM)Oa^7We$5?*6Z;2+$`zo(*PJx7<62L5wXxbJV* zG(i*;^WKo83uk#jo;N{0P5#~?gQ*LaxhC$8QY`csu8s=a3#dbdS)V40&cscz+BU9N zdm@P4#hBe}tpGr{5Epn~v2W>lY&0(80As@iA$8hjVDCWMxa0Wv3eyxPZwE|L?r!%x zc9xw-L0$XdYq{=j1tpekYs}!3-{TS$CMJ@#^0)&%F6+ZlXx#ezuwWy-sYudV!`faB zPAo0Jjgac8ixDavn0FKEt3yfZm*vbX zWzgvzS1{GofJ}rzEITHnb<@l?6(Eay_gb%GMND_wY;HuW&8QqBB6kMe&2{;HE=7cw1pd9+090w zN5}3dEv=8{W+7#T0;8|)7s(K@{o-8H3o$Jfq<F(}=O%G|BUV4$d03;pzT%1A_Dhlk6srgNXR0*{XPU=S5&sC4=8((3 z3+=12H7M_|(Zbp1G`MWY#~K14NaJpao4Z^i8gSNT0jQG~bbE^69y8-gbd1-N&I{pD zEPROaU2jEJjnwA=GgpDc3v(wGaZNfdE-pq!jB2B+fgxv+4-w6z^5Qab>+q}@WI~b! z{$)D_{};H2-e|$2d`Ls`|HerOESC-DtBEcNbKD}tGAVu6Dw{>r%}|b^JK;g{sLiC@ zyme%=RCxN^2n&l7k`vHdB`4T+*JiV5mDDh|$HP0o{&n&zxx z=UT6-EiB5^weNjATbe0yq0++xz%p&wHldXDYkd{lxSD^prOwLj?Y94yW?Kh4Nr}ns t2h>imXJW+#&+p5|Myn6VaJBt@IWqd>J>zgrI*Fx72GugqEYYwE{twCG2~_|9 diff --git a/tools/gui/entry-frame.png b/tools/gui/entry-frame.png deleted file mode 100644 index 640adf7ab292e77608b04de3e455413492a08dcd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22549 zcmbTdWmsEH*ey&;ad(FzE$&{dc=6)y?he6=dw}9zio3g8aF^g(+}+`%ect!_uIu}E z&W|LMo!OJUXZGCdmbJpa%S)ml5+XuDL7_-}6H|hMdbbN{&%wh&-UASo0g#V(&PtLZ zP!;3E2aqox%!TEIp`fZ`ke&@;Am0%jzG*r`L812ieZ9k>k^TV%rCuT>CaeO`JIO>a zz?oZo%})1GfJdMT;*72O@EuwaS5fCT1Jf^;)Lh$Y|}{ z2CW>#`WlNB9G&;?;(kz}&sT*Wn~)E^WZ#XBwma{QuXxqQ5dr+Z{25=I7;WE6y~|+V zTll#rXcLNObEt2>(C?SoZFa{=P5nqr+i;;1xU!txLZ4Z>3e$Clw4XY@Mn>t@dsF4g z25szVreQi|+*lw$;C}hI(DrAioMx@&tlGM0YVkcFdVPv$a$8+u>*UpI!1?7w&-X`z z{A(A<g}089t;T z6cC&WId1q2k8Ad?17(Y9ilyh%LlW*y)ZZWQ?OjS))aPfnUKAQi%pn6J_X2vU4cGkc ziynvE2ep96XrfA;ALfGp>wI6=HK?x#fC+@9DmL$6Wue7LjwTKFv-O5UvTK%dHHD1G zB;H`VT;O{-8iar~tMK}+oTkC`NNvPPvHi1r#=fg5n|=Papn3K%#v z+bT-?&pt{oq)Sk(TN^zc)CCl_2vxsb*hzDu>TAA{_P~0PMpbh$)d?f9nTpeLjf6q& zE{gkGS6g@mvmq0QO2LqFC5Sp*$c;Xox)V5kn%Ma}K-=MWaSZxC*ENEbcx)KS$E?p4 z#6pBV#<>_oB*7S>u!hfrn>-r6@1+oY%EeQIl#7TFirYnhm$8b6m3|ZDFJF*RHvpFf zQeSexK?4rFfac0#Xa_VuWT+HR-H7CpTL8qh;AsoTl9L1g5UZ_Fx~~S zYAKNjm^zqxmS@pj0fJAf{CzQw!auk2~iyzB~Gs{ zu$dwgixXVHld`6bFxgq+vx~nBLRMX87QerlPdpXgVnTwT@e>aDXBJ{dk&J9UC-y9% zG+|McBUkCkIi1RROhTMbG;}L7y+U(xt9s zSt%t*qPpYC+2|FYzjeRZ=UZ!;jw-xrYc$3jm085C<+fIBQ9I8%caQP{EJiR__G%Gy zB389Q6z#fZ9n3f1duVRdSP>*w&zCrVhRS?^JgNnyQ<2W@5j7Um%jT>DuxIgnM)gb3 zRa7^sabJlJgV524d7z@@#sGi7F*2ndlfV4gytTE{pRFabd;+U9674KZ%iJh&3mCgK z4wsTvhh`ZCa1@S-{3W@R!K~r*u71!&IxQVIj>+%EeeJe~*je{-3ajL2DtwNr39nd} z#Z}BBE)$Gi4>?kS+?mTXh}G8p3M-&r0^8-JLGV}WXq&W>h6kG4wEWlW6`K8zZE5` zdb^6*t611`Zp2*kg(LYZY>x8B%~?|TvOdjf3o;U8){Bw;EpUvhHJ~IEQS(fpTzT8B zuSJ*s91CeRAMV453w}tmg(B%_JDDsv=d5Gi-P)bE0g5bGv%QngTIoVnmm{JCF6Ypj z$5%Zmx?KNMVsqT+KwsMr)$5ilVK1JUC~)fJ=;(x>(#-f3TW-`fwzVoAZ14R(#uNQZ zIN&3|w;vm?RMlVXL2$!ktcP2;Z}s?I(M5&De2bdiZBy~WrTQ#fvfBF9CO#Ct8x))p zjB<$V@^{5sS%9=e0~xJ^*+CxPr7?eEJsF8^6CzxJfJIk;Upu*)YUttVYahr&k5Vp8+)R z0a?Wr#r1w2K85WL1IaDDfYZZ{*VUNW1vQ&0p&;5@ocu#t#g-mH@#=~GoQK4v;CI&9 zzhN14S^I&s^g;B(mKK{gj_}5h3FD$Ys-kE1-}cDOX;4xt1*3TC*d9U}J)86*QP2oR zHjyb`u1zrxAiMLPUAxil=HQ&WDEdZ)=`xo^SNyWtt*Thm6&#*N|^TY z>fwqJ9@Q>1e>6oTGPNu{mocg5@9suKZaU$!NM;eb8vcSz!~^A6J#}w0z;qoQDQ@Aw zqV)5L@?%#BJt(SgD5BQF!se&QnDcu+csYvP&0~4Sw!cGMb4jc|1>UwZ;gI14l6c)3 z4V<IO0%tSBv_{98!sua7>U9)PIzlWnb4b1<;u}=Rap8shI zb=%p4KjZ#AtJj5@Vf1ffTXNxlfY0xLfUom^fe)6{_}}0Ce+RNbDcnXmW3cI`DK$o9 zRrW9i3k5#}=?v>8{u>jUjB$79-ndw|<6d?k=@aD-44JC_4w&n>zYv&G;on;GAH?nl zv3TuwB(1J!f$u~xe*ObU{d2_>p>DM44C7HG0lISZ?9yDBs?|f5UHMkq{b> zrx$-oueN9Im_>RhD?A^{QkskZce;Yh4E~kq!mo%XettUMzjw$&sLMP`DPcsMwRLL! z7r_spRt;Du#Pklx{K@ioL3y@WaQXkRU$Oer`bE{tLMi>6^52ezo)L8(Li-i0|A60c zDY||6vmfiGA) zbF5JH-=dIp_l*9%GT#qK?0_s zcmvrrZa+WZs?5!9jV{v7&d%lL=c~5p(=7aZ=9oN|mX;hYM>U`KR%5Ce&ODx-c53hE z^s~Av)dU0A1)kj7+Vj!PORZXTf6==B^O$yj7CbzAVB5SBcfK4UX{evSJ3KsMwfW9g zfzOFaD;3V;_{gC5I*|@|PQ|-80P0Q$oXRu(U`aMqbtB%|N-&o4-)%!&EYa3k!L%6v zJB`jc7FL2W_4e&C>hqm}O)2pFO&e~{TTknt-(IJE+-E7lp`E;Bot}S$SA3SoEU_CJns;WcA;tei+KS%3RwDX!&%ikqk{owdJ{JWgfqdTGH z5N@GIV&fU*V0h-Pdqv71sO722g)nE7Xs0&b&vcmFvg18lUVDaRa_wLJKMB{YYzWdbHIdjIb%VmFrXXc5LLb5WG8};Q9nlD?k;W_Jpj$#=eap5ep(2FTUP*KKta`D;x%y9h|}GlrI3PA zRHG9~UAQ(JNp1Hxi#gY|QhG}fl=w)^cO5#B`~rl<@x6bWsz8!weL8@o^)5$Wgv=xl zEp*H*PcyerDP6*Ug{vDib8EtPLV-etc`Ft=Avr(SG7w-@hZzp^#XK<1ExXE zUN!b!ou2Q|lDdI#K;mAA>2u?1Lm>$ZJx!zRow+;hB=y5orjF`AK2RSiyGtVJ5n2ZzZA%tz<~%r~V`GOE?3z74 zDolK&;!wfQza!`2`6g9|lycw2+$#MyRQLkx3Ztf?wwbwgxyeR+*clWMd#kV`w7L z+?Hr{wVnZ7*k9>=)wLDy?YLhK14cQ(JKxS}rU)HL9Mdf_lM=o~=LHFB{Je4%3uozz z+b%p`P-Y%|v9RTpK8at{aym||vqS3RZZ|6}Ldw;p~3_pmdn;6j9Og+HC|Tgy>|THZ)$*E;=9 zKT+L=_s5Xlht$=zV*a(ho>3>QcSbu`*673*y>I-_woxRBz=8s^wz^xPh3ktw3md!B zEhZ)DvLgnf;L~qcJ-M=7mw}!Z;ud#4jU(U`P#$Wx`w71L zHfvxyOZ?5#=HBu}Pbc?B+kNyE=Oa0u&!mWv8sWqx|wXxn(h{BQyF?9a`Cn!g5mAcC4iBtt_08YM-SUU{O&(mHE!Z<=c=BF#{P24pJ!y>7cYR6ZW{z28N?#rt zwC=;-`t|!25OUGXGqbK7(6&cMlJ5_N@7hG~GFz&a&v!bY7aseQol>YM7?6A63J1?r zABJWwD={$VXt6-s4M&y22i<}9S4gFbeig!xipe}a3fkf=Ia_?5vUwMUc=H=JuJy!z z-5F36k;F*0y%|itH!j z?R_i+c!0y(y#a$_LrSZ3wjNyt^2Hm$fI*{Y60Hq?GehNV33j9K$4Ae_k8UWl7LQh* zt_A+}5l1pw? z2VOXYBDML!4vku!SPJXysbG0f<7u02*4xW^`X6hRYv7f!!W&8F{fx3k(%pMKpDTer z3313{Kh|GYHo~aidx-e_ErnU>kJjdq>%7jp`Mtd#F3qL1%XPRZt@x39@2$CAgAWm8 zTnw4m<}K1=io)O`#M^KoNVQL7qfcaS+;ki9K2v)~oTQ^8sTb!Cu+-dm`5+=W{fozC zf5cQ)63H03Fz3M)ReJI6s3eF>RI2xLzozKJetQ&0BP12T^ZX~r>td{#oz-gLJMAvD zyz0j;yWab_-ixlb<@0U0v+jFE%T>Bzm1t7*U7NDl(tvy;MgJDWlux7#^p-=GtEH=} z(Zz|P2h*+xv;}sS<<{Ub*w47 ze4=!jg{D8{{O)e}pA0X1?O+WR}?J^7=bOz5o`$Datucmr`7_#Cagzp=`}WCoMNJDskW5$tZQzR9}Fx}FG=X=fBv>R$frV8 zGnMX-YCa^~)B-5yv&SgtZUUc!itx;N%MC5b3(=CZ^TUjof|%&hptnZnEO5b%CJkwB zsEE$$bnj`dRLhJmN3bsHU{pS79(;FZ>E^UkonphDz%n`>1T!d*7yNeOU78H;#by?B z^vr^nd4I&HyF1;J9P&LL16(CBmB+=&(*;DIx`bK0rkBUi(x`nd>mQ(n*TS!@`eWwO zD6dQlO`>L4HoQ+ON8J&0$&{o;m(^ow7{zIs}CaH4rFAwn$&7qte>fa~{Bhq9YEZY> z?;ahjj;r$36}@@L9A=nXrabVY>y*-FVQ$rjBqFC_wj+kaS#gatW%#}Fs==8A21(tv z!Vwk_Y^sTvHBaX0A6%LYxS)ou`93;+{(BZ*{xWPC<<6cMr90!zUrsvULex!>vYTRp z3G9o>m1|!_X#k^NEo{ch=*rk+VP%YQ)EU3~u6<&tb!vNL1&*32doQ@E!gR*iO<{G$ zRqpBe;ff8uJd*^2lxbBygE!FBZ*1T!+XI2Q{q^%OFu{Ff7fUyo48hs!qQlnY7BRE) z6&+VYZJf|FK(loSv}M{qoyMqLPu!2nO2sgor&$H_rF0%U{vP!xne@Hbip>{1qvFQc ze(0Xz6%oTYvoEBAY?hK3$<-&Q2FD@hDM$gXqUFCHv^j6(@8HRs+;2;}{PJzPpA-DH zOYU#*@vd+|Vx7?=Mr(a_LEH{^T`{a&HHv*sAZHw=lUi$E&kMJki$q|*(?GI%ruUeP z-^tjisMoNpVR_Hd%wG1HV}bbgd|hs`-fU?^)hM1~zBiI{4gvVOYV&wlt@U(|AOv?<%@8NE)YR<{ z`AV{Te_z9?bn?L`fOXN(Izv=xY|z4S6aB*nGwROhj&AWDrwYvKBJu*wbrZ(=uq%nW zrNHlw9Rj7%v>vTVKgLIcqI9B9cQ-Rq=Ekrd&riliu(GCY$xgvPCRf_>Plnc4&nBzm zY1XtUsQvTvQTyMXUIR5;CNl3I%ZOM#o-LY(byk~U%joaFlGbq)c23DKLd+ey8nX+o zQ7b4)S!%6p(v>>0x2{!NtNLMZV)Bglq*<0~SM%{yi@R)l1n!+7l(pkQ8&Btgqx|-~ zrd>c~lWJ8Y$b|(ZeMQ3JCiTFePijzN^dj$} zD_6TciCpr54?dw`LNL^-a^49Q5u6tP-U5Qlj9Nc}1Qz4wS-i1rg(A^x1~K z@CmBXj>5Ag*K$K9lL*e`jv78odwww61FkmNum&~d2_u>=ZLYY2$7@G+`3HfMdkt9-Dq`Ajci-Bm9!Q)b9T&CmrT zLtYMbWKHi&WlLHxI*S>@0dEKuKIY!G#UjS(WN&a$h13~X%cTtV%YKE|znmLh!U0Ij zT;zgXVQ-Hjt0vL=7Xu)9$&BKPI6kJS9+Dt00fbF6q^?17+UWrPk7e=?OjXy`3hfE} zuvE9=-m)AWUjSlEkRnaKY2kLJ()_JEHl2}#Mq=P(a<_6SCk^r@Bk?Ao zThBg*hRZq_gB17kL}t^jbz|eEjwlvtV)FL(L_-{Ja%~Gwx1s6Jf-(_0(w&PeHecXzWVnhMg zRVpb(T6((Up9ROZ&K+m(2IrWS=_vufo-!T8I#@Sp5q_h7_c8?=WHTLZl-!ww#YX#% zH;gQAk8*gdsJDmLMi!e5sDrhcSeCo3A$>^Zj`(}86)b0inlGVN;PDa*8qh*Q>}#{9 zMDd5Mk)?M<&S5o;F1m^gvR9yWVjm43y~hbHe5YEvnB9t<$_#4w3z@JpO77={)=Fgk z#8Y*&m%W!BHkB4<>Zp;f-x*$2_vuJ^4rv%fIG-AqWu>HhMh}!pC=U9xJrec8Xw{?o ztH=YB!J)g zMemqmk^GSHHruwfDy|sIc>r4+9W(-Aca5iFYeMsb(exI&CyKqw7e&WQJ1LXX~#HiTDu5q)pV)`pW{Z1IC6 zP(+(WumnL}jN3p~h5a$Ojy$%3o=u#V`a!vEcgDo# z0q0vcQe|iG-dj6Dsh%gKY7$C)Ve&e{qvcCXKsn=hRj-V`aar|i6|Ozqqq(jsR3W2# zvDSQN@BG|BEF^TuAGqZCwlow4Dd44$1`#S{PBzz-s=ePwZO6TN5r(_yJP_Yn2suDl z7N=a>_{IcvbHDV1Iq!{)px|4OP|)|lK_vj@9N$xR|HO9lnKS85p zEw>#F{_Bqv?{!DaK7Zw)nw*^u*u7$OnvQqMP>;do;K&?UT>8>>(M^3na`h(GzeuMe z=!X2+EN|q#f@elypD4x>iEX-@hn}W@%F5U1V z19#R(vBW=3F1n(WYY*OhzE6Lg?~jm}x69EQ2OaIH*M3Fiu2D8Lt6xn7;$g;=h$y+Lyw4eXd$YorK7VM zSO8EUfiCSfcw@`P~$~?9+p!*D>YXie05g5H+pd#S+VIG{zdoBf+|T&h+6(D zM~7`$C11q>A^AJzH9vH5KKCIh`D7%+I<2#Z40JK20n7LrljP>gKCz(fw9=Zqg&~d) zT2cvLzV1qS%!rktHFyI92Na~;1++96Z;OWs+ir%qj`;u)lTJlU;F|XDuPt5_sCz`}CE5L@&ZeanjCQ(<^)-XN z$G-LK?MM-eKIa!}gJ-S^iOa~wqK7iQhf8@sISC0==mj-7>;K4)k-XH069+i9(IS>x z-J=`6j4PCMJtw%wVc({rFMQdQ-uYEEyGlSSXgy|{UX_Gq;PkxQ#GS9BaU}0Sjnrlz zHqUs-AoHsn6KnhKBj@O1yZq`hI~F}F-J>(c&$Y^ea?B@#k;QPpo=wy?9ZfOMj1r3; zWp3w_hjqHHo6iha$j}R>X>vWibXsDf>Vn@n3+B^pH%dJ9qm8N_mlID28cCFLA$<_1 zw?qr?(XTuV48nkp3&-gmW{6XzH6XEK9(BYT{&A``y}vPHFWbeRA=B z$Vot&RCtZx*Q_R>iW+y;=KW`qaKY&+9Qa$iL$%|q3~!FXB-PHVxD2@a_WL79(mxzxUY?J<4IEJoEQ z3@XENya#nt^3?@fbxg!jE()I7J2+)rzNjbqMNmYeiyT95D7V@czoRHCI2p*$6&bp> zeKousgd>9|M{ED1oG{ffdpk|gwIotkYs2dh^Fp{^CxKfYgXvJC^yB9u6^(HmVAVDy z5v#x^lA*YI5fk}+$*FXk+ixK)mpK>TS@5c?H@pwN`?m}P1tXc-8lgv*Qg1oS>7bFF zG7t9ayH5;M_}sdDINjad_b$t*93{B57@qhaOH&yDu+X7xsNDyVrb{uRa0u9_c3=+L; zx1`fnPDiQCj2ci5h1;rxWA0tty^#Luf8M{a&xQV#6FN+ zZ0#X-h@MeW6kFMCi7z8+yvA971CJphNW&|Y5UxWj*U}5R1c)Lj_(k)kHcvHAjR_sp zv9#K6QnR?c)4u-DV#j8PGswnxBh}e;U|*k@Q=6_7ZCwA76T-Yq(m*uax($~8kf1H! z5`5+6)8e`;uFk)%0QM#UuX2#(R{&Wa%Q>UJ`Rg2BLM3(pXxWHc%`qt2cltFN01ci@ zzvMU(ovSC0Uy06X1^hi;qVL9%&-{<>=5{*nqcFkGtrd@nnh84rTg5q4Lirar`MmkD zF4t(*BEPE4IG4~va--v>)8-*R6&ayg)?X#mn9<4vw!(lb6 z?bZ6W40`bo3Rpkd2uZ*@Qge9Z1d`&qsi5FJ@G_1IlEbmG7T`AC@I}uKQf&Ta$WjES z0l~oNfeu)Gyyox2R?*%1DwLf0LKXPQ{sje}ZJug0R{MmJ3KO+*^fcOF$n0?C-E_Ej z==#LPAr7kh8rDh0WNXh1wK+Kh2X?Ty{>Gn0x&wJ0WfcoMOJT<$K}$w`_ZwCGv=#j( zr7u~0Rbx{|DgD>1^|$7p!u$VCzwfc2-QwPgiAY|Y{hIE+t9JL!*Q~?PmEaPx{ux)% zRvRSRtrR;yi?8N#w8r7HO{w5s?ixPF@*>BHzNKbyX&y%!8J{NyAEu3l$gHzM>yBYq z3blvH*I{cFR&2wfk;VKYZ5+%N>OXr8r@V|0#roFEHdp9$3K+W;s!3mO%A`8-%oX1P z5(mdLa$9D6Y9C28{PZ*L^4kGV71};{OdOzHZBeZE_B4jyc=l(0oIC$Ew2rkCE3HaF z;~>P_`i_q?6*Q&j)knQ|sI(Jpe6gDfz?cxQuL*OXqYBSRV6sBQuqo|^kE2ff8YygQ ziPOKXvxs-Y7^tegWL5K?{b$4GQr|@XUM-t4(ta*ci{Y*Mg@IfdZtEk=}(N)pub^FS6KKb4FWZ7pdD8do+bxb({{873jHg*F$-?(`QTKU$9{Bi_`zSSTf z-LKia0mBpO7stMTS1r#|LYC%><+8lJc9iEshgN0fY4q*NTUMVgc7kZ2AW?6VXpeB_ znp6&FNu-F6_WN-Tg7hz~7SG4{WXgf(A6K=O!Xy-TKB_b}?G}b(CjLUrj$4tnjI5d-%~)nGocR z((m(C$zp!AUY( z@Q<}xw#_QAs|!j;$Q83kF6j*!0kKC8EGwa*K_iGWf0=^?n(J99E-N2Ue!Iu(Sh>Pc z3hHm8*|U3g8ge($?DPT?ulT;G$P&kgyk0n7`W$_2l(MSeA;TY?)E9E*A2=gu(M$0O zZaF26x3{3CnrrW!)EhXI48OA_XJjR4bTQ?bj^0U(wuYVlvJ`Ub*7EH87`Bo&{U@ip zdTy7F0em~!Ai|ISC;YwF%6YH0r`ipkB_4buKSRQAYsS};mkzzWbzw;&DY7~&pWb55 zx?L2zl*!JZ*qN>PnaLPvD$em^9Xx)52wk=UGc$U+=jl#gdqKL+D4tmHoJ) zisJsKY&%YZMy|r+1u6d5>qvm%SZDQF7kN-{<ZYe_9|iiSvbeXMZ4g4nVSw`}0<( zAUdlIbfXlPM9z>AJnpDa^Bd9mx>fGsMqUzumfbzOd1gtT{(=b;^XGp$SY4&2iCE+c2yqAaueAT!+9ROTUOl*Pavl3hZmk-Goj|Gj2 z*QTr`C8exiH69vG^h2|mJfW1CCt}ekJ2uNAkLo#F$2$r0a65fwYU#I_q6DUvwTb?uG+JqM@4e5b2+P09m0C6aw0ZIbxwWF9Wj3Z^Bq}F z#Y^a%=!2}C_T6#s(U~2n^7WcSPwy@Sd!}-g4O%^|;&}%({7q8ZeZ!?+GfJM!Ur{u3 zd#4!saU`Gb=0C!r?8hxNksRV=q)EP|Zeby>dpUwA} z*}wAcDEK4Y5qWka_4b1(`-Pop0*|w80$gb0Cig)lA~~3$9SR#f(N*)41MA^CJf_sM zjTiz*Y|8DYbWuS=_x<*(=0b6YZ@zHz)O6+@$}7C0us$vD%lPt>@y%4~g2U%|HlcvN zQCcSK=@5c=>W$W($4?`dZ2FU`a?Ixmho^Xm`7wx zZDcs+6I*+J8lTEcO>?l>l+IdxKJSjUVFdHJ89mJSC9}7jwV#-crp84xYBz3%@2QW7 zi<$r&8T220@?yS;udS;a_l9OmySvvpr6sF7#{l7bx1Ml69z~1<-MsR?UT+afHtSYK zlU{KQZTTKkNA`(I5Xxsnt)&6uj=1Z+++PYyBRfcr((DwVq|MC|AMT00%cImRBZEbAF0F#g^ISlajqkL41vhM1qDIC7xU{$Fj8%YU?jin*YCXXem>*%vU zUHwD@Ndy!&MFRf9EmDc6vX}ajP!b3aK_VCMYafd!^1I?~B$21_FYwQ39H1!-gxX0H z`!_?p7KSM(R(EufGaf8nlv8ONEovI+_&Xl6Lov)!Jl;1(pKmK*!pNX#`ja)4V%SMu zM<}|9^1T1&@p@EoLsR`^_pCtZ<0i@jDhUak2uzwJDpz-Veh&gjVDrJ1kur}+_>5EG z&>7w*VARZ2+n7tO^y{gauk?e(6?{72^4EQxSp)8xg$Ln8(b3~rjG(x!ZDz)W9Fb1! z_i57M$5V$Zr?~W_--4#>+?3KfyazJGwr*)I=1BwnFzyik-L}vm*V5wmR<0g3lp0LI zFGVPQMgtBML(l15)1+t0$nI`2KLcS-y=C3e5g_WFRRPl&de&wz6*& zI^q=}?R|&YT0n$>8!%~5{z|xeGrNTX}ACnq+n`6!j3TGgX#F^7Ph9{m8J8Q-U=1yP~K5MX=Y0mYRj`w#@r8rmqtpCuj#=gVSy-E)u$>y z0bkK?YpcrE1v4qiT)}f)c8871cD$)L%VG4!7C5W{O0$PHsz~eMF~Gj417!?M;sAmC zr$4>}6@c-;vfW0(#}9C5Wc?TMh1G5|%T6cO0xq38XFusLSQYQPA>Lrz(`ip^o)~Yn zZ1)%3{$|G|6HPnMlMzk3+RMYrRDufM%+8Wk=)X*s*FYQE1G1BkQPJgF<_SM?3`4*v z=)shG7VJpoJh>@nxbvq2ILS!e$Av9l?GAVZHc_5AAT$-$OIv;(7ZOM*i&0Gbs0Xzx zwSd0r(E=98#mgvk_&z(kMpD;ZJLl0GRxP=3+oZOZ&!@5~t+QkZ{nHdE&9Zcm*9LA|j(qv38%lPS{rA7N_deU{gjltk^n_-t&S)K2~rSF_7j$0oi zn5X#cQ2&WK$riZ%5Ychjfc?v>I1n0oN~oH-08$dpUvDOB)ZrtTg0Rb-4xwjg%kMem zHSW>Y8=;IP^K+m35Nr~5=0A@RD0BDL`(lgg;OvM!J}A8*q5Yi=-;hRFbxXZys^GbB z*j3um=<*kbg2e^XL&Wy==cOSrZzWa~IooSs*-yJ4CmD5~l+YbY0||+z%1awt8_kx0 z+jB9SQWSTNqbYyed(UBVWaPp`(*#!VZUZ)UMhkN5p{{#;z~ZUig+jcY8~DJ_;!9~G_JV_NFWnML<~zmd(A8Zj)(TDd@3(l4Bg(!Kgwi) z>bAv6i)p3qcS&k@?s-<@p+jQ^;gGezL*iRrFWKjJ+LxJV%Xj?CM0ofRI&I^02aH4! z`7Hw~LbvVxVwf#HdV{#@JJebI(1F_+ak*0aTeux`jL8t;O-6j&wIBCCBo5Rp(Ry>7 zw=9s8D#h!E2o@?#4=FEW^7Fr_?)&VskG)g6F8?(E?C5qg5##*G+9b@c^kL(>C{@If z$mDU#j;)^il9gi$dfH?x`ax+j-3zboURsNDQAv4!Gw5?nsWVJChvik+@S#=$F_Su@ z(ZmkR05GBNLmn#Oj~-opO(tB?)j31*?y#6}TvsWHwx+kb0&W2gm2fssa+1i6sAd08BY#?Y(D&g(5 z5?s9#xw>UY1;5_p16z^KAxyA$3;ivnnLZsNg$hjbva+}d#WGhf*pgi421Zwis(dUT z%x_ZSzTSjA1iD2Z5lKUr_Z@%pW~Y%mnXJNmpRc$3V7&)wT57(#&IDINt|LF(>1l>T zLBao-{{br@TQKU1-L|RPK#hxuh+W#ZqNKP#8A6ShF~pc}>kzK!Z1<34Jr)V81;v2! z=s^$BG}eE4&Je)8jZ5=-{3Vp}K{=3c=7*!=*kBlcj5bzj?5ZE!dz*2e6r!b{RqY|4 zA7~siMeL(XHyT5MAojrNU-EX3;P%tgJwoi>#^+32JN1NQi^@5h#7Ym6QStRJoqswU zo9M3CJ|HSG3Hd6WcHE>32}Q08Jz?stoim|k@ePOKsPC&09@pUnlI3BE=TI|4m8zc)2a>;k(Xdq z{F{q1LG8$3f)gC#iT#m76vlPnu4<YiT5o+Jn{IAddPJIFtp+c3^)~6oUYRX}$H; zW!Vjzj3+9jz>F5eF=gX&i0*w?!58a1z|hxHhIcCTKNHlD^vY`8hSS*5%@~Fv7#!B6 zBnF!VkCdjDqey7!$$kH=Hxck+Qlm2}8dEyifXA3sZL>DbfrSR6-tE|bU{2DxeXphm zh6}w-?tSj=W#0vhWdjS3MC`bNW~i9bQEba?YlzZ!*{{!*;UEM=yXVfcwa{#S7v_o< z@3IV@y~=-=VGh7VB_GYPg|FfaSKw%omBW8Q5!F4SIWB5JP#`6a42(Wm-0#ABSB)ro z>M3N*QxeI1kS=_|j}V7rW+>1PexiM7jx2f2qVauXF)Q}+Ja_14Xdtb1@pg%qT1Lku z42bJdBAsN$An$(dMEJ)-eGN=*$mlar(1pK58|zD_-ZQ)^UcOi>ZU!9e>uOZne|hz$ z!3iZ4V5Zvwsup;5Pxj#VPB*WOF);Rz)xuaZ*~;(Ns(Kf;{tR^`7{v^{Y#nj$XXl9Ghe| zFcrJ0#RFGSL1VxfhZ(UD&05XQSWC^7(*2Xozz3xmK?P$1&IEpb@BrTE@F6Y9`r$6- za3hT`++Wxg5Ha`)WwZ5*wJS-@w7(*D^81HX+-%1k_vq(vllu0+Tx)|;85X~+u zWYcKIipaj{4aQA=7D$fkP=-Xm#yw5QA7EjBH9zp9lBv(n%kN{+zun>jc9qOoRea6^U84hppcM{u7d{1#IaNpjXu>#onv04V|&`M&JaSc;iXuo_P4&MvM0Yq zoF1JYpBzWx^i+O`7nj5r6G2on@esBKf4e711GZ1N!&H&)SyrXtWgk5{F)>wZBd4Vy zzW&FdPn-E?<2ktl=Y^f^RN&`Ra3h*;!@1x?Blmv{V5dL#QqPJUzY6I}(6KOpi!+4= zj|ub`SR{=}c08K@^2ZjVLmbq-R@5eNIs4LT3btwjVJ;VTqlM_kZN^d-qrQ zB2=@2n0Huv<2wtV%On`JU=xQC^^2~x5paLx z=zCk&op1WuqZ6XKm^zsM(hI|DT~bA%?Mt(L1cdTo!krItC;=}g zF;#`fP-*GfdFl2pc^KfC#e2flM4)O*nwR>YWmQvqX6X(Ni%pN7th4XxZoe3zq+TAk zK*gF(pN}H+s(*!LAyJM#C4aPgu~CuYoM-8y)d)DA?x!)hN;72ABqU6C_|qqKyy%X; zQz-veld|+#`bKr17NI#|>h#A1IMXw#ywT^BLv7vvM;Fv}cyt`ScRmUM4Y>OhCB8jM z2j4Knh`?AgP8pzEW}2A63439NzpK>eZk=klau97)W^N>(d_2HUe4u$K8C|1HTlq!_f{u_QIHd59QBVLui5h8v+hRq1=#7^StD6gFMSAE2!*tP1O@cBG&iZF{7vu23hV^m1rNhm_cWSwj$`qPa6fr>O-NKQFSWj>J8iFI~9RkpHqeCiJ;>ji%Ryv%h_Q7FBR`mR}2R<~lA z-Y%Ckq^*-LJ8oT!rjSi5N9lP75oaJvL4s#|#_B`qbaGq$9P3}Y)P$!^Md%aX_#Yx6 z*|(S^keG&(ud1#jplEEh%=@#5D8*^3*BTQcVD^{5Ql^nuYujWJ!I1RI)S!gd z@S<{|P>2TUbMiwT_AW5~ z$*X>t_O<(R`+noX3k<@R`T}1@djk2cmF8E#L93Vme$KA-TCPj*LPyE5PZ% zEiFXyyf0>EQDXB=te0A(Lc0F$4cJEW*R)|V(Q%I7I4sLr6oU$nq`+n`Ug@j{5!F3P z3JE*+BS_ZhRKrWuT!hr)Dq&BvbZ0ZO2;2SbxI0Q$ey4NX=s2Vym19k7n-be|XW?g{ zP2+)nS1VCjS&jlTAl?nZk~LS!d0$^f_FYgv#LWNI8t)W%pe*% zE`HZ@FJM{PJN;dH#WG*oI%3~MnCR&rS!u;;#@fyPjohir|emVrj%?6p10;9-P7>7({F{=D`=Pr!*I(hYeRHD32apW^Pa)?W4cFSX@x)0HC4wkXqYq}( z5X9&rj9y1gl))hSL?=XvP6VR{!RXP&=tO5kj~3Ax31)O6zH!d^-ap>8zV-dRpSAb% ztiAWWpMBle^(%ie{d)Sl|A-}SjI%m6&$&PH4n8=9J3wcq#1WoE#e@1H_LG{LqiJGe zUPy!3iStjZ^GE+5?#s29JHFZ{b8X)fmZeu1+!pLC;)9pJw^hCZtNGK{?2v26UToqB zS%|1i{^0(#Cu=2^X9Y5T92nnzqXqT;iheyeZ-cMsie{S5<6%vQ|Qzd{kwO-a`7mLA#LQ1J0!y-+)HgM z>)ZJ+;^;+)pEsTQhTghuHEpq5^IG;YkKV0Qp;_?@n>>q*#Le+f17BkGxR=L&Jt0_T zZp9`paw)wunOdXg{j%qvlaf)WJM zIn4ig>hxRx_({pnhpm!cv=#KCx)y_up>kSnSQ4L$qQ@aU@h)_ECa?0%Fge_b7Dju) zl|?F+wUsZxhtldyvL{f}Ns(B;srOU@&>QIJ{k&VCP zc?QdQG(zkchjtTls=sDw{Ga#Sd6ajYaJSnu%# zXxcpXviV%t!uT@9-yUr_kQ}$;#UGQ$%wDnf<9a{9s|s1X@;n&(D(5${_Kc%56PEXT z(?Vb0@MGi5v719sfx&#|-+2%KG*lnAm`CJd3ijPJxe6uI;cjjgBKo!3)*IwDQd=C7 zM;4ZDLNd1`jb!w&%{Hp_t|(uf$F-uF97y;@tlOMN`GZ0)OVLrxElUk%YVvbE!B2>0 z6r{I@qWhIpS3c!U|BD9J6jI;q97FB_hAZ!Y)WEgZ;Ra2lX_BA zmF9{Nh#%Q3cU&_75l7B0h?mT2q21?3=4r)F88T=3XAKWt&4^IZGO$1A7$z0z!gkgHs%|-gQ}6Fi5YNqxkBRW17^{Ugm^YXj`_CpxJd3V z6QcL{LFFC>v9>%IAR86=sq{I^6#MfYHNe=H(8ydj9*xKc9ERsANMRIU7iG3 z>och^2pTybBjzB15Oj<`obEO-C+x+7mDsCXSm(0?KT2!f(^}LpH;a!=F8w_eZHEZUIw_utEJ@SI zn#npsN;Hu)BmuTS*++DjY;5q|{_JQA`8`pPt-uh!+!P_xpov@j|Sq$VcKf-*wSAaJ#rZ2))r2!4?NmwYRq_nhnydfJ< zuSTr>kiD~O)yK-8RZ>7B>08WNuCqyikAD~oLy=ee$zD$WDi~~BxV|qEWSyq_?o85` zbQ8f-oj0y`d!?gky-)R(&1C(wFORTnAhx#I%l2y*l?E*buFww-r0#B_w}o}le#_`Z zwzx2E)jlJSsPwLJpOQF^*fBhyV3OibLFaAAmn%}HJZQj7{CFw)pvTUBOkdIZ&Ao_E zt3XSt+tp6RgV1ep?!*iU=UV^6%{^R_t|u?k1y|x|v{2;DVejwNFHzXMFQ}RR^Sh~o zlVt$1Zl2u2NRuwzTLAMxzExC9lR8Y&XB{Z>+dqTJu2A5)n#-4jV0UqRs^4*AswuIK zN{&$-{<&Y5aK})j3%eHeEY@MW>enC`kG6;9;o+i{TfaYc{#uq_0Xnxhm-zp}p7k5M zr-&m){6f$h$pUUo{(#&&h+fSPuZ;JUC>lpOtMDtRRe>;fe`BMx-t<$Vb|H8(r4nHb-4$(#?$1NQ+I#Ey2su@AN=hWAAL%$Oi zqy}c|%<6&1l1r4^Blhc(s&H?Hp?@Ywz15ipKb+nUy!;9Ib}-5#Le|~SAZvor48*QY z??JPPQ;*qM=#~uE+t_)m;M!eUhM71TKHmo9cNFIN`K`d?1KGWZ4U5jGjmyY^bg3bN z0M~$2t^9DdA!QuC80{ML=iI?^=H^mdMj?bWo1Ra}_bgxix8t~<_wQml^MUf`+@ku# zGR!@`dVvQ*IbO2UUjcRyM!Fw4&bUf#ujp)a1zb1z)^K>+VGsPIVDg~zU6OPo)|fpgeLB9@|%6-W)S5vzf$-m&;18_6oJcW6@HL)rOa?6$=?Q zv7+$|A{_D5A^6XFj5;|&K3|E; zgid2vY3l`~{vZ6-b9*@4@*i?ZPzSfo=@^ae%Slip$Vw$=Iz7{R&{Kl$Qu_j!asf0| zb~JW`_>wU3zaCwJFStzOoNB5ECo%K*IzEcV?SZBCftJU4rKH2iHhXNh&`|dsRS(ow zZ0u*i{*_VrY$_|gsK9g*Qt_eu%BM`TJ>511XjePMSCd4BS>F^=<6$na9RMnGQFB2i zT|HN?XB=26BiFhm`-F#62Si5(8CK~e>AJ=92uYKlW}W6U#?N*KywX=4%(`>J8Xt*> zysqm3vye`4$VSlK*BSkE?I|%1x_U%ZTlt=jj}i8{EZ2(Iv>px;@)D*U5$iV+@+$WB zhGNd;3H+85(JWe9SOE~BcypL3X)0@Wf$y#dzeZgxX{O~NqnPJK%3Fr_;Wa~X(i($h z`MbmfT9l#rqONNy8fv{2oyyMPRUiaKMN+sk})RHFMpP5uJY zk1zgUBpE?z_L!uqBvtv8aO==-HA(kLW~;Tg$CB4G?e~BU&mOUVag$6yg)8nTsC?d; zp-Sv~#amOI7-o+8JP0y4?ddV&Z)sioz9TJyO=pLGLq6o)$B!fwC^A=AGAp8p>)=T*0f>R{3^1xkfv6VlEhAARS;Cpt3i?LQk@ms8 zBBV?AJB77$EZhoJWP38>*6x-Ls2*9_9SfI}q*P5fsb{cU1CUcOk-7;0gHa}cg>Rx0 zwR-YTJu2#J!b$Z%kdew#OPe#|_dl-{uq*`Bpj8}3+I3eRR`#AN(vLZ-q@}>G7jG!6 zvPZB>6MQ~d1k%cu!f*SSMzVtL*DUKBlxiHe zPoFxPy!W8V8b7J8+>1I;;9<2d`(l=#sxsAB^|SWI;x*u4_^O3WRd`={WoNR83v!IM!Ae!Qb$hw5?xeWu_K*!)(GE{|t&u)BJI!x!YZ{w$^QO zrCt98{+2v^g?fo$*%|nUA^7IM8G`?d5BfhLga0)ksN+hSC!90z=9S(>s0`%d|MCcV z{vE1S8TtQSrZdHV!|J>#KJY)lA_8rI;HUO5fqe=xX}-bpRO z8i(xL{z3VK<2e3nUa}nmcmJISwYRF~mDq_BCHq@ZcYEu>Gy^4cSn49G4f=NM&B85b z6#D(qMu2GbFIR506uveipR20Oz}X2D#K>#n+>>_w zXse?(Iy7p0-|w8fJhKKr=wXOApZU*!?rY(g4{X4-u*N>9UKq_x2{ju_6x|kPP`v!+ zxT!DlCD81^Uf-D(`*>`-3{vE zrQ&I>Oa`OnS@MSb*UQ6-G9-x^yz@Zx2Y>!I?Gq!M@gZD==C8?C8s5L`ob6;9nu@Mw zge9P*IcSPS^F^A1dLslo$70NY2OUbu=F79Ys+Wr67ntfRhycmD+r&|>9BVwj;p8Ht zo;AF_ea_{ZDHt?ISyxu7bXM{~*N|qsT3EfeYOa~sW2R)SZzP=**F@N;xcRb_lo&qD zXst{eplzdwY|0nD2W88r2lPF)*>J)~MwFUvAr-3&KP%!;L9my4Uq+OZ37Hs=92seM89z&$YQwD>U{lTp6rQ&rufN@H1U9!(I_7CQ29b`Gt_3fy|N@Z|MJxyMj$;}$O z=!9+n*To@JJbX)ng(v9rj1!y1RF=3^eA~2`Y+SOB2s6;@3ju-JuX67Tu#(Pa6tiJ+ zgbFIVC38(;75i%C=`@K)+L`8Jv(-in;a<@>={`6XJV*Hrt~A^=b4$x@(63#7-0+cwKrKgwA$u_@!n#>9f|U z9rQXohJna7Gwu=jF>340ynf+_#Lww= 400: - FOXBMS_DOC_URL = f"{FOXBMS_DOC_BASE_URL}/foxbms/gen2/docs/html/latest/" -# use latest if it correct version does not exist -FOXBMS_LICENSE_FALLBACK_URL = ( - f"{FOXBMS_DOC_BASE_URL}foxbms/gen2/docs/html/latest/general/license.html" -) -# use local doc build if we are on an development branch -if __version__ == "x.y.z": - FOXBMS_DOC_URL_LOCAL = PROJECT_ROOT / "build" / "docs" / "index.html" - if FOXBMS_DOC_URL_LOCAL.exists(): - FOXBMS_DOC_URL = FOXBMS_DOC_URL_LOCAL - else: - FOXBMS_DOC_URL = f"{FOXBMS_DOC_BASE_URL}/foxbms/gen2/docs/html/latest/" -MODULE_LICENSE_FILE: Path = (PROJECT_ROOT / "LICENSE.md").resolve() -DEFAULT_DBC_DIRECTORY_IF_IN_PROJECT_LAYOUT = ( - MODULE_DIR / ".." / ".." / "dbc" -).resolve() -if not DEFAULT_DBC_DIRECTORY_IF_IN_PROJECT_LAYOUT.is_dir(): - DEFAULT_DBC_DIRECTORY_IF_IN_PROJECT_LAYOUT = Path(os.getcwd()) -DEFAULT_DBC_FILENAME_IF_IN_PROJECT_LAYOUT = "foxbms.dbc" diff --git a/tools/gui/fgui/entry/__init__.py b/tools/gui/fgui/entry/__init__.py deleted file mode 100644 index 072c0cdd..00000000 --- a/tools/gui/fgui/entry/__init__.py +++ /dev/null @@ -1,44 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Startup window of the foxBMS GUI to select the GUI setup. -Calling this submodule alone is possible (``python -m fgui.entry``). -However, then it is limited to only use the log_parser, while lvac can not be -used.""" diff --git a/tools/gui/fgui/entry/entry_frame.py b/tools/gui/fgui/entry/entry_frame.py deleted file mode 100644 index d0eb767a..00000000 --- a/tools/gui/fgui/entry/entry_frame.py +++ /dev/null @@ -1,222 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Wrapper frame as central entry point to the foxBMS GUI software to select -the actions that should be taken: -- LiveViewAndControl -- LogParser -""" - -import logging - -import wx -from fgui import PROJECT_ROOT, __appname__, __version__ -from fgui.entry.helper import INSTRUCTIONS -from fgui.log_parser.log_parser import LogParserFrame -from fgui.lvac.lvac_frame import LiveViewAndControlMainFrame -from fgui.misc.gui_helpers import cb_open_documentation, cb_show_info, get_icon -from fgui.misc.logo import logo_foxbms -from fgui.workers.can_node_worker import CanAdapterProcess - -FRAME_STYLE = wx.DEFAULT_FRAME_STYLE & (~wx.MAXIMIZE_BOX) ^ wx.RESIZE_BORDER - - -class EntryFrame(wx.Frame): # pylint: disable=too-many-ancestors - """Main frame to construct the foxBMS GUI frame""" - - def __init__( - self, - parent=None, - title=f"{__appname__} - {__version__}", - can_process: CanAdapterProcess = None, - ): - wx.Frame.__init__(self, parent, -1, title, style=FRAME_STYLE) - self._can_process = can_process - self._lvac_frame = None - self._lp_frame = None - self.status_bar = None - self.initialize_gui() - - def start_lvac_cb(self, event): - """start the LVAC frame and locks the accompanying subprocess.""" - if self._can_process: - if self._can_process.locked.acquire(block=False): - self._lvac_frame = LiveViewAndControlMainFrame( - can_process=self._can_process - ) - else: - logging.debug("CAN process already in use.") - else: - wx.MessageBox( - ( - "foxBMS GUI has been started without selecting a CAN " - "adapter.\nIn oder to use LiveViewAndControl restart the " - "application and chose a CAN adapter." - ), - "Error", - wx.OK | wx.ICON_ERROR, - ) - - def start_lp_cb(self, event): - """Start Log Parser""" - if self._lp_frame: - self._lp_frame.SetFocus() - else: - self._lp_frame = LogParserFrame() - - def initialize_gui(self): - """Add GUI layout""" - self.SetIcon(get_icon()) - self._add_menu_bar() - self._add_status_bar() - - self.panel = wx.Panel(self) - - sizer = wx.BoxSizer(wx.VERTICAL) - - # ----------------------- - sub_sizer1 = wx.BoxSizer(wx.HORIZONTAL) - - text1 = wx.StaticText(self.panel, label=INSTRUCTIONS) - sub_sizer1.Add(text1, flag=wx.ALL, border=5) - - logo = wx.Image(logo_foxbms.GetImage()) - image_bitmap = wx.StaticBitmap(self.panel, wx.ID_ANY, wx.Bitmap(logo)) - - sub_sizer1.Add(image_bitmap, proportion=1, flag=wx.ALL, border=5) - # ----------------------- - - sizer.Add(sub_sizer1, flag=wx.TOP | wx.LEFT | wx.EXPAND, border=10) - - self.panel.SetSizer(sizer) - self.SetSize(500, 220) - self.Centre() - self.Show() - - def _add_menu_bar(self): - mb = wx.MenuBar() # pylint: disable=invalid-name - - # 'File' menu - fm = wx.Menu() # pylint: disable=invalid-name - - ctrl_id = wx.Window.NewControlId() - fmi_lvac = fm.Append(ctrl_id, "LiveViewAndControl", "Show BMS values") - self.Bind(wx.EVT_MENU, self.start_lvac_cb, fmi_lvac) - - ctrl_id = wx.Window.NewControlId() - fmi_lp = fm.Append(ctrl_id, "LogParser", "Start a new Log Parser") - self.Bind(wx.EVT_MENU, self.start_lp_cb, fmi_lp) - - ctrl_id = wx.Window.NewControlId() - fmi_exit = fm.Append(ctrl_id, "Exit", "Exit the application") - self.Bind(wx.EVT_MENU, self.cb_exit_prog, fmi_exit) - - mb.Append(fm, "File") - - # '?' menu - hm = wx.Menu() # pylint: disable=invalid-name - - ctrl_id = wx.Window.NewControlId() - show_info_item = hm.Append(ctrl_id, "Info", "Info") - self.Bind(wx.EVT_MENU, cb_show_info, show_info_item) - - ctrl_id = wx.Window.NewControlId() - open_documentation_item = hm.Append(ctrl_id, "Documentation", "Documentation") - self.Bind(wx.EVT_MENU, cb_open_documentation, open_documentation_item) - - mb.Append(hm, "?") - - # menu build fully constructed - self.SetMenuBar(mb) - - def _add_status_bar(self): - self.status_bar: wx.StatusBar = self.CreateStatusBar(2) - self.status_bar.SetStatusText(f"Project root: {PROJECT_ROOT}", 0) - adapter_name = None - if self._can_process: - adapter_name = self._can_process.init_adapter - self.status_bar.SetStatusText(f"CAN adapter: {adapter_name}", 1) - - def cb_exit_prog(self, event): - """Wrapper for menu exit.""" - self.Destroy() - - def Destroy(self): # pylint: disable=invalid-name - """Global exit function of this.""" - if self._lvac_frame and self._lvac_frame.is_running: - wx.MessageBox( - ( - "Live View and Control is still running.\n" - "Close it before closing the main application." - ), - "Error", - wx.OK | wx.ICON_ERROR, - ) - return False - - if self._lp_frame and self._lp_frame.is_running: - wx.MessageBox( - ( - "Log Parser is still running.\n" - "Close it before closing the main application." - ), - "Error", - wx.OK | wx.ICON_ERROR, - ) - return False - - if self._lvac_frame: - self._lvac_frame.CloseFrameSafely(None) - if self._lp_frame: - self._lp_frame.Destroy() - - return super().Destroy() - - -def main(): - """Run the entry parser frame as own GUI""" - app = wx.App() - wx.Locale(wx.LANGUAGE_ENGLISH) - EntryFrame() - app.MainLoop() - - -if __name__ == "__main__": - main() diff --git a/tools/gui/fgui/foxbms_gui.py b/tools/gui/fgui/foxbms_gui.py deleted file mode 100644 index f0214cba..00000000 --- a/tools/gui/fgui/foxbms_gui.py +++ /dev/null @@ -1,115 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""TODO""" -import logging -from pathlib import Path - -import click -import wx -from fgui.entry.entry_frame import EntryFrame -from fgui.misc.can.can_helpers import try_to_select_can_adapter -from fgui.misc.misc import LOG_LEVELS -from fgui.misc.program_arguments import ( - C_SETUP_BAUD_RATE, - C_SETUP_CAN_ADAPTERS, - C_SETUP_LOGGING, - C_SETUP_VERBOSITY, - chose_baud_rate, - chose_can_adapter, - chose_logging_dir, - validate_argument_combination, -) -from fgui.workers.can_node_worker import CanAdapterProcess - - -@click.command() -@click.help_option("--help", "-h") -@click.option("-v", "--verbose", **C_SETUP_VERBOSITY) -@click.option("-c", "--can-adapter", **C_SETUP_CAN_ADAPTERS) -@click.option("-b", "--baud-rate", **C_SETUP_BAUD_RATE) -@click.option("-l", "--logging", "logging_dir", **C_SETUP_LOGGING) -def main(verbose: int, can_adapter: str, baud_rate: str, logging_dir: click.Path): - """main entry point for the wrapper GUI application""" - log_level = LOG_LEVELS[min(verbose, max(LOG_LEVELS.keys()))] - logging.basicConfig(level=log_level) - logging.debug(f"Logging level: {logging.getLevelName(log_level)}") - - app = wx.App(redirect=True) - wx.Locale(wx.LANGUAGE_ENGLISH) - - if not can_adapter: - can_adapter = chose_can_adapter() - else: - can_adapter = try_to_select_can_adapter(can_adapter) - logging.debug(f"CAN adapter: {can_adapter}") - - if can_adapter and not baud_rate: - baud_rate = chose_baud_rate() - logging.debug(f"BAUD rate: {baud_rate}") - - if can_adapter and baud_rate and not logging_dir: - logging_dir = chose_logging_dir(logging_dir) - if logging_dir: - logging_dir = Path(logging_dir) - logging.debug(f"CAN Logging: {logging_dir}") - - validate_argument_combination(can_adapter, baud_rate, logging_dir) - - can_process = None - if can_adapter and baud_rate: - can_process = CanAdapterProcess(can_adapter, baud_rate, logging_dir) - can_process.daemon = True - can_process.start() - - EntryFrame(can_process=can_process) - app.MainLoop() - - if can_process: - if not can_process.g_canceled.is_set(): - logging.debug("(1/2) start canceling CanAdapterProcess") - can_process.g_cancel() - logging.debug("(2/2) done canceling CanAdapterProcess") - can_process.join() - logging.debug("exit") - - -if __name__ == "__main__": - main() # pylint: disable=no-value-for-parameter diff --git a/tools/gui/fgui/log_parser/__init__.py b/tools/gui/fgui/log_parser/__init__.py deleted file mode 100644 index c9ec8714..00000000 --- a/tools/gui/fgui/log_parser/__init__.py +++ /dev/null @@ -1,42 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""A GUI to select, read and parse CAN data logged with foxBMS. -The module can be called standalone by ``python -m fgui.log_parser``.""" diff --git a/tools/gui/fgui/log_parser/log_parser.py b/tools/gui/fgui/log_parser/log_parser.py deleted file mode 100644 index a8fdabd3..00000000 --- a/tools/gui/fgui/log_parser/log_parser.py +++ /dev/null @@ -1,597 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""A GUI to parse and visualize foxBMS generated logfiles.""" - -import os - -import matplotlib.pyplot as plt -import pandas -import wx -from fgui import ( - DEFAULT_DBC_DIRECTORY_IF_IN_PROJECT_LAYOUT, - DEFAULT_DBC_FILENAME_IF_IN_PROJECT_LAYOUT, - __appname__, - __version__, -) -from fgui.misc.can.can_helpers import dbc_file_to_database, get_dbc_dialog -from fgui.misc.gui_helpers import cb_open_documentation, cb_show_info, get_icon - -TITLE = f"{__appname__} - Log Parser - {__version__}" -SIZE = wx.Size(1000, 1000) - - -class LogParserFrame( # pylint: disable=too-many-ancestors,disable=too-many-instance-attributes - wx.Frame -): - """Main frame to construct the foxBMS Log Parser frame""" - - def __init__(self, parent=None): - """Initializes the Log Parser GUI""" - super().__init__(parent, title=TITLE, size=SIZE) - self.local = wx.Locale(wx.LANGUAGE_ENGLISH) - self.log_files = [] - self.Centre() - self.basic_gui() - self.all_checked_sig = [] - self.plot_data_frames = [] - self.all_sig = [] - self.is_running = True - self.dbc_file = str( - DEFAULT_DBC_DIRECTORY_IF_IN_PROJECT_LAYOUT - / DEFAULT_DBC_FILENAME_IF_IN_PROJECT_LAYOUT - ) - self.dbc = dbc_file_to_database(self.dbc_file) - self._add_signals() - - def basic_gui(self): - """Creates the layout of the GUI""" - # Set up the menu - self.SetIcon(get_icon()) - self._add_menu_bar() - self._add_status_bar() - self.panel = wx.Panel(self) - - # Set up trc file selector box - group_box_trc = wx.StaticBox( # pylint: disable=unused-variable - self.panel, - wx.ID_ANY, - "Select a trace-file", - size=(485, 130), - pos=(495, 120), - ) - self.logfield = wx.TextCtrl(self.panel, pos=(570, 160), size=(350, 20)) - wx.StaticText(self.panel, -1, "Path: ", pos=(510, 165)) - - btn_search_trc = wx.Button( - self.panel, -1, label="Search file", pos=(570, 200), size=(120, 25) - ) - btn_search_trc.SetBackgroundColour("WHITE") - btn_search_trc.Bind(wx.EVT_BUTTON, self.cb_on_clicked_btn_trc_src) - - # set up search in signal box - search_field = wx.SearchCtrl( - self.panel, -1, size=(400, 20), pos=(5, 267), style=0 - ) - search_field.Bind(wx.EVT_TEXT, self.cb_on_search) - - # set up clear selected signals button - btn_clr_sel_sig = wx.Button( - self.panel, -1, label="Clear selection", pos=(410, 267), size=(120, 20) - ) - btn_clr_sel_sig.SetBackgroundColour("WHITE") - btn_clr_sel_sig.Bind(wx.EVT_BUTTON, self.cb_on_click_sig_clear) - - # Set up generate - btn_generate_trc = wx.Button( - self.panel, -1, label="Generate", pos=(700, 257), size=(150, 40) - ) - btn_generate_trc.SetBackgroundColour("WHITE") - btn_generate_trc.Bind(wx.EVT_BUTTON, self.cb_on_clicked_btn_gen_trc) - - # Set up signals to be plotted - wx.StaticBox( # pylint: disable=unused-variable - self.panel, - wx.ID_ANY, - "Select signals to plot", - size=(975, 640), - pos=(5, 300), - ) - self.clb_select_sig = wx.CheckListBox( - self.panel, - -1, - size=(965, 610), - pos=(10, 320), - choices=[], - style=wx.BORDER_NONE | wx.SYS_COLOUR_HIGHLIGHT, - ) - self.clb_select_sig.Bind(wx.EVT_CHECKLISTBOX, self.cb_on_click_checked_box) - - self.Show(True) - - def _add_menu_bar(self): - menu_bar = wx.MenuBar() - file_menu = wx.Menu() - help_menu = wx.Menu() - - ctrl_id = wx.Window.NewControlId() - fmi_of = file_menu.Append(ctrl_id, "Open dbc file", "Open dbc file") - self.Bind(wx.EVT_MENU, self._get_dbc_cb, fmi_of) - fmi_exit = file_menu.Append(wx.ID_EXIT, "Exit", "Exit the application") - self.Bind(wx.EVT_MENU, self.quit_cb, fmi_exit) - menu_bar.Append(file_menu, "File") - - help_menu = wx.Menu() - ctrl_id = wx.Window.NewControlId() - show_info_item = help_menu.Append(ctrl_id, "Info", "Info") - ctrl_id = wx.Window.NewControlId() - open_documentation_item = help_menu.Append( - ctrl_id, "Documentation", "Documentation" - ) - menu_bar.Append(help_menu, "?") - self.Bind(wx.EVT_MENU, cb_show_info, show_info_item) - self.Bind(wx.EVT_MENU, cb_open_documentation, open_documentation_item) - - self.SetMenuBar(menu_bar) - - def _add_status_bar(self): - """status bar to display the currently loaded dbc file""" - # pylint: disable=attribute-defined-outside-init - self.statusbar: wx.StatusBar = self.CreateStatusBar(1) - self.statusbar.SetStatusText("No dbc file loaded") - - def open_dialog(self, window_name, only_files): - """Wrapper for the FileDialog class""" - open_file_dialog = wx.FileDialog( - self, - window_name, - os.path.dirname(os.path.realpath(__file__)), - "", - only_files, - wx.FD_OPEN | wx.FD_FILE_MUST_EXIST, - ) - - open_file_dialog.ShowModal() - path = open_file_dialog.GetPath() - open_file_dialog.Destroy() - return path - - def get_log_type(self): - """check the file type and the header to find get the log type""" - with open(self.logfield.GetValue(), "r", encoding="utf-8") as trace_template: - file_type = os.path.splitext(self.logfield.GetValue())[1] - header = [] - for _ in range(16): - header.append(trace_template.readline()) - if file_type == ".trc": - if ( - header[0] == ";$FILEVERSION=1.1\n" - and header[6].find("; Generated by PCAN-View") != -1 - ): - self.read_pcan_log_v1() - elif ( - header[0] == ";$FILEVERSION=2.0\n" - and header[6].find("; Generated by PCAN-View") != -1 - ): - self.read_pcan_log_v2() - else: - msg = "ERROR, trc file not supported" - wx.MessageBox(msg, "Error", wx.OK | wx.ICON_ERROR) - elif file_type == ".txt": - self.read_can_log() - else: - msg = "ERROR, trc file not supported" - wx.MessageBox(msg, "Error", wx.OK | wx.ICON_ERROR) - - def get_id_name(self, checked_signal): # pylint: disable=no-self-use - """Get the signal id and the signal name""" - signal_name = checked_signal[0 : checked_signal.find(" (0x")] - id_signal = checked_signal[checked_signal.find("0x") : checked_signal.find(")")] - - id_signal = id_signal.replace("x", "") - id_signal = id_signal.upper() - return id_signal, signal_name - - def get_mux_id(self, id_signal, signal_name, mdb): # pylint: disable=no-self-use - """Get multiplexer ID of checked signal""" - msg = mdb.get_message_by_frame_id(int(id_signal, 16)) - unit = "" - mux_id = "" - for i, sig in enumerate(msg.signals): # pylint: disable=unused-variable - if msg.signals[i].name == signal_name: - unit = str(msg.signals[i].unit) - if unit == "None": - unit = "" - if msg.is_multiplexed(): - if msg.signals[i].multiplexer_ids: - mux_id = msg.signals[i].multiplexer_ids[0] - break - return unit, mux_id, msg - - def append_plot_df(self, signal_timestamp, signal_val, signal_name, unit): - """Append the signal values to the plot data frame""" - if len(signal_timestamp) > 0 and len(signal_val) > 0: - plot_df = pandas.DataFrame() - plot_df.insert(0, signal_name + "_time(ms)", signal_timestamp) - plot_df.insert( - 1, signal_name + " in " + unit.replace("°C", "°C"), signal_val - ) - self.plot_data_frames.append(plot_df) - - def read_pcan_log_v1(self): # pylint: disable=too-many-locals - """Read data to selected signals from PCAN log v1 file""" - units = [] - # Get the data of all selected signals - with open(self.logfield.GetValue(), "r", encoding="utf-8") as trace_template: - for checked_signal in self.clb_select_sig.GetCheckedStrings(): - - # get signal and signal id - id_signal, signal_name = self.get_id_name(checked_signal) - - # get mux id and unit - unit, mux_id, msg = self.get_mux_id(id_signal, signal_name, self.dbc) - units.append(unit) - - # get lines with right signal - cor_signal_lines = [] - for i, line_ck in enumerate(trace_template): - if i < 16: - continue - if id_signal in line_ck[32:36]: - cor_signal_lines.append(line_ck) - if not cor_signal_lines: - continue - - # read lines with dest signal and decode data - signal_timestamp = [] - signal_val = [] - for line in cor_signal_lines: - mux_now = int(bin(int(line[41:43], 16)), 2) & 0b1111 - if mux_now == mux_id or not msg.is_multiplexed(): - timestamp = line[7:19] - timestamp = float(timestamp) - byte_list = [] - byte_list.append(int(line[41:43], 16)) # Byte 0 - byte_list.append(int(line[44:46], 16)) # Byte 1 - byte_list.append(int(line[47:49], 16)) # Byte 2 - byte_list.append(int(line[50:52], 16)) # Byte 3 - byte_list.append(int(line[53:55], 16)) # Byte 4 - byte_list.append(int(line[56:58], 16)) # Byte 5 - byte_list.append(int(line[59:61], 16)) # Byte 6 - byte_list.append(int(line[62:64], 16)) # Byte 7 - decoded_sig = msg.decode(bytes(byte_list)) - - try: - decoded_sig_val = decoded_sig[signal_name] - except KeyError: - msg = "Signal" + str(signal_name) + " is not in dictionary." - wx.MessageBox(msg, "Error", wx.OK | wx.ICON_ERROR) - self.plot_data_frames.clear() - return - signal_timestamp.append(timestamp) - signal_val.append(decoded_sig_val) - - # append plot_df with new plot data - self.append_plot_df(signal_timestamp, signal_val, signal_name, unit) - - trace_template.seek(0) - self.plot_selected_signals(units) - - def read_pcan_log_v2(self): # pylint: disable=too-many-locals - """Read data to selected signals from PCAN log v2 file""" - units = [] - # Get the data of all selected signals - with open(self.logfield.GetValue(), "r", encoding="utf-8") as trace_template: - for checked_signal in self.clb_select_sig.GetCheckedStrings(): - - # get signal and signal id - id_signal, signal_name = self.get_id_name(checked_signal) - - # get mux id and unit - unit, mux_id, msg = self.get_mux_id(id_signal, signal_name, self.dbc) - units.append(unit) - - cor_signal_lines = [] - for i, line_ck in enumerate(trace_template): - if i < 16: - continue - if id_signal in line_ck[29:33]: - cor_signal_lines.append(line_ck) - if not cor_signal_lines: - continue - - # read lines with dest signal and decode data - signal_timestamp = [] - signal_val = [] - for line in cor_signal_lines: - mux_now = int(bin(int(line[40:42], 16)), 2) & 0b1111 - if mux_now == mux_id or not msg.is_multiplexed(): - timestamp = line[7:19] - timestamp = float(timestamp) - byte_list = [] - byte_list.append(int(line[40:42], 16)) # Byte 0 - byte_list.append(int(line[43:45], 16)) # Byte 1 - byte_list.append(int(line[46:48], 16)) # Byte 2 - byte_list.append(int(line[49:51], 16)) # Byte 3 - byte_list.append(int(line[52:54], 16)) # Byte 4 - byte_list.append(int(line[55:57], 16)) # Byte 5 - byte_list.append(int(line[58:60], 16)) # Byte 6 - byte_list.append(int(line[61:63], 16)) # Byte 7 - decoded_sig = msg.decode(bytes(byte_list)) - - try: - decoded_sig_val = decoded_sig[signal_name] - except KeyError: - msg = "Signal" + str(signal_name) + " is not in dictionary." - wx.MessageBox(msg, "Error", wx.OK | wx.ICON_ERROR) - self.plot_data_frames.clear() - return - signal_timestamp.append(timestamp) - signal_val.append(decoded_sig_val) - - # append plot_df with new plot data - self.append_plot_df(signal_timestamp, signal_val, signal_name, unit) - - trace_template.seek(0) - self.plot_selected_signals(units) - - def read_can_log(self): # pylint: disable=too-many-locals - """Read data to selected signals from can file""" - units = [] - # Get the data of all selected signals - with open(self.logfield.GetValue(), "r", encoding="utf-8") as trace_template: - for checked_signal in self.clb_select_sig.GetCheckedStrings(): - - # get signal and signal id - id_signal, signal_name = self.get_id_name(checked_signal) - - # get mux id and unit - unit, mux_id, msg = self.get_mux_id(id_signal, signal_name, self.dbc) - units.append(unit) - - cor_signal_lines = [] - for i, line_ck in enumerate(trace_template): - if i < 13: - continue - line_information = line_ck.split(" ", 2) - id_signal_dez = int(id_signal, 16) - line_ck_id_dez = int(line_information[1]) - if id_signal_dez == line_ck_id_dez: - cor_signal_lines.append(line_ck) - if not cor_signal_lines: - continue - - # read lines with dest signal and decode data - signal_timestamp = [] - signal_val = [] - - for line in cor_signal_lines: - line_information = line.split(" ", 3) - byte_list_str = line_information[3].split(" ", 7) - byte_list = list(map(int, byte_list_str)) - mux_now = int(bin(int(byte_list[0])), 2) & 0b1111 - if mux_now == mux_id or not msg.is_multiplexed(): - line_information = line.split(" ", 3) - - timestamp = float(line_information[0]) - - decoded_sig = msg.decode(bytes(byte_list)) - - try: - decoded_sig_val = decoded_sig[signal_name] - except KeyError: - - msg = "Signal" + str(signal_name) + " is not in dictionary." - wx.MessageBox(msg, "Error", wx.OK | wx.ICON_ERROR) - self.plot_data_frames.clear() - return - signal_timestamp.append(timestamp) - signal_val.append(decoded_sig_val) - - # append plot_df with new plot data - self.append_plot_df(signal_timestamp, signal_val, signal_name, unit) - - trace_template.seek(0) - self.plot_selected_signals(units) - - def plot_selected_signals(self, units): - """Plot the data of the selected signals from the read log file""" - if len(self.plot_data_frames) < 1: - msg = "No signals chosen or signals not in Log files." - wx.MessageBox(msg, "Error", wx.OK | wx.ICON_ERROR) - self.plot_data_frames.clear() - return - - # set figure size depending on subplot count - subplot_count = len(set(units)) - x_size = min(subplot_count * 6, 15) - fig = plt.figure(figsize=(x_size, 8)) - - # manage subplots with units and axes to put all graphs with same unit - # in one subplot - axes_units = [[], []] - first_ax = fig.add_subplot(1, subplot_count, 1) - first_ax.set_ylabel(units[0].replace("°C", "°C"), rotation=0) - plt.xlabel("Time(ms)") - first_ax.legend(bbox_to_anchor=(0, 1.02, 1, 0.2), loc="lower left") - axes_units[0].append(first_ax) - axes_units[1].append(units[0]) - - # check all data-frames if a new plot is needed or a suiting subplot exists - for i_df, data_frame in enumerate( - self.plot_data_frames - ): # pylint: disable=invalid-name - new_ax = True - for i_unit, unit in enumerate(axes_units[1]): - if unit == units[i_df]: - new_ax = False - plt_ax = axes_units[0][i_unit] - break - if new_ax: - plt_ax = fig.add_subplot(1, subplot_count, len(axes_units[0]) + 1) - plt_ax.set_ylabel(units[i_df].replace("°C", "°C"), rotation=0) - axes_units[0].append(plt_ax) - axes_units[1].append(units[i_df]) - - data_frame.plot( - x=data_frame.columns[0], y=data_frame.columns[1], kind="line", ax=plt_ax - ) - plt.xlabel("Time(ms)") - plt_ax.legend(bbox_to_anchor=(0, 1.02, 1, 0.2), loc="lower left") - self.plot_data_frames.clear() - - plt.show() - - # Event Handling - def quit_cb(self, event): - """Closes the application""" - self.Close() - - def cb_on_clicked_btn_trc_src(self, event): - """sets the logfile to be parsed.""" - if not self.dbc: - style = wx.OK | wx.ICON_ERROR - wx.MessageBox( - ('Load a dbc file first ("File -> Open dbc File")'), "Error", style - ) - return - # Sets the value from the chosen trace file - log_file_path = self.open_dialog( - "Search for log file", "Trace or Text files (*.trc;*.txt)|*.trc;*.txt" - ) - self.logfield.SetValue(log_file_path) - - def cb_on_click_checked_box(self, event): - """Sets the checked signals""" - is_checked = self.clb_select_sig.IsChecked(event.GetInt()) - if is_checked: - self.all_checked_sig.append(event.GetString()) - else: - self.all_checked_sig.remove(event.GetString()) - - def _get_dbc_cb(self, event): - wx.CallAfter(self._get_dbc) - - def _get_dbc(self): - """Reads the signals from the dbc file""" - (self.dbc, self.dbc_file) = get_dbc_dialog() - self.statusbar.SetStatusText(str(self.dbc_file)) - self._add_signals() - - def _add_signals(self): - self.all_sig = [] - if self.dbc: - for msg in self.dbc.messages: - for sig in msg.signals: - self.all_sig.append(f"{sig.name} ({hex(msg.frame_id)})") - self.clb_select_sig.AppendItems(self.all_sig) - else: - self.clb_select_sig.Clear() - - def cb_on_clicked_btn_gen_trc(self, event): - """tries to print the trace information (only if a valid - file path is chosen)""" - # check if the provided file path is valid - if not os.path.isfile(self.logfield.GetValue()): - msg = f"{self.logfield.GetValue()} is not a valid file." - wx.MessageBox(msg, "Error", wx.OK | wx.ICON_ERROR) - return - # we are sure, we have an existing file, so we can go on - if len(self.clb_select_sig.GetCheckedItems()) > 0: - self.get_log_type() - else: - msg = "Select signals to plot." - wx.MessageBox(msg, "Error", wx.OK | wx.ICON_ERROR) - - def cb_on_search(self, event): - """filter signals based on typed string in search box""" - items_to_check = [] - if event.GetString() == "": - self.clb_select_sig.Clear() - self.clb_select_sig.AppendItems(self.all_sig) - self.clb_select_sig.SetCheckedStrings(self.all_checked_sig) - else: - searched_string = event.GetString() - self.clb_select_sig.Clear() - for sig in self.all_sig: - if sig.find(searched_string) != -1: - self.clb_select_sig.AppendItems([sig]) - if sig in self.all_checked_sig: - items_to_check.append(sig) - self.clb_select_sig.SetCheckedStrings(items_to_check) - - def cb_on_click_sig_clear(self, event): - """Clear signals""" - for i in range(len(self.clb_select_sig.GetItems())): - self.clb_select_sig.Check(i, check=False) - self.all_checked_sig.clear() - - def Destroy(self): # pylint: disable=invalid-name - """Close the Frame""" - self.is_running = False - return super().Destroy() - - def _get_log_files_cb(self, event): - with wx.FileDialog( - self, - "Open ASC file", - wildcard="CAN log files (*.asc)|*.asc", - style=wx.FD_OPEN | wx.FD_FILE_MUST_EXIST | wx.FD_MULTIPLE, - ) as file_dialog: - - if file_dialog.ShowModal() == wx.ID_CANCEL: - paths = [] - else: - paths = file_dialog.GetPaths() - for index, path in enumerate(paths): - self.list_ctrl.InsertItem(index, path) - self.log_files = paths - - -def main(): - """Run the log parser frame as own GUI""" - app = wx.App() - wx.Locale(wx.LANGUAGE_ENGLISH) - LogParserFrame() - app.MainLoop() - - -if __name__ == "__main__": - main() diff --git a/tools/gui/fgui/lvac/__init__.py b/tools/gui/fgui/lvac/__init__.py deleted file mode 100644 index 0a7a4835..00000000 --- a/tools/gui/fgui/lvac/__init__.py +++ /dev/null @@ -1,42 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""A GUI to read the BMS values as well as control the BMS via CAN. -The module can be called standalone by ``python -m fgui.lvac``.""" diff --git a/tools/gui/fgui/lvac/__main__.py b/tools/gui/fgui/lvac/__main__.py deleted file mode 100644 index 29a800c9..00000000 --- a/tools/gui/fgui/lvac/__main__.py +++ /dev/null @@ -1,45 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""make 'fgui.lvac' callable""" - -from . import lvac_frame - -lvac_frame.main() # pylint: disable=no-value-for-parameter diff --git a/tools/gui/fgui/lvac/bms_state.py b/tools/gui/fgui/lvac/bms_state.py deleted file mode 100644 index 690446ad..00000000 --- a/tools/gui/fgui/lvac/bms_state.py +++ /dev/null @@ -1,112 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - - -"""Display the BMS state""" - -import re - -import can -import wx -import wx.grid as gridlib -from cantools.database.can import Database - -from ..misc.gui_helpers import get_icon - -FRAME_STYLE = ( - wx.DEFAULT_FRAME_STYLE & (~wx.CLOSE_BOX) & (~wx.MAXIMIZE_BOX) ^ wx.RESIZE_BORDER -) - - -class BmsStateFrame( # pylint: disable=too-many-ancestors,too-many-instance-attributes - wx.Frame -): - """ - Frame to display the cell voltages in a table. - """ - - # pylint: disable=too-many-arguments - def __init__(self, title, parent=None, dbc: Database = None, pos=None): - wx.Frame.__init__(self, parent=parent, title=title, style=FRAME_STYLE) - self.SetPosition(pos) - self.SetIcon(get_icon()) - - # dbc stuff - self.bms_state_msg_name = "foxBMS_BmsState" - self.dbc = dbc - self.bms_state_msg = self.dbc.get_message_by_name(self.bms_state_msg_name) - panel = wx.Panel(self) - self.grid_table = gridlib.Grid(panel) - self.grid_table.CreateGrid(len(self.bms_state_msg.signals), 1) - self.grid_table.SetRowLabelSize(200) - self.grid_table.SetColSize(0, 100) - self.msg_to_idx = {} - for i, val in enumerate(self.bms_state_msg.signals): - self.msg_to_idx[val.name] = i - label_name = val.name.replace("foxBMS_", "") - label_name = label_name.replace("_", " ") - label_name = " ".join(re.sub(r"([A-Z])", r" \1", label_name).split()) - self.grid_table.SetRowLabelValue(i, label_name) - self.grid_table.SetColLabelValue(0, "Status") - self.grid_table.SetRowLabelAlignment(wx.ALIGN_LEFT, wx.ALIGN_CENTRE) - self.grid_table.EnableEditing(False) - self.grid_table.DisableDragRowSize() - self.grid_table.DisableDragColSize() - - sizer = wx.BoxSizer() - sizer.Add(self.grid_table, 1, wx.EXPAND | wx.ALL) - panel.SetSizer(sizer) - sizer.Fit(panel) - width, height = self.grid_table.GetSize() - self.SetSize(wx.Size(width + 28, height + 44)) - - def update_bms_state_info(self, value: can.message.Message): - """Updates the table cell entries with the current voltage values""" - msg_data: dict = self.dbc.decode_message(value.arbitration_id, value.data) - for i in msg_data.items(): - self.grid_table.SetCellValue(self.msg_to_idx[i[0]], 0, str(i[1])) - - def Destroy(self): # pylint: disable=invalid-name,no-self-use - """Unbind normal destroy""" - return True - - def NewDestroy(self): # pylint: disable=invalid-name - """Destroys the frame""" - return super().Destroy() diff --git a/tools/gui/fgui/lvac/cell_temperatures.py b/tools/gui/fgui/lvac/cell_temperatures.py deleted file mode 100644 index dec2746a..00000000 --- a/tools/gui/fgui/lvac/cell_temperatures.py +++ /dev/null @@ -1,152 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Table to display the cell temperatures""" - - -import can -import wx -import wx.grid as gridlib -from cantools.database.can import Database - -from ..misc.gui_helpers import get_icon - -FRAME_STYLE = ( - wx.DEFAULT_FRAME_STYLE & (~wx.CLOSE_BOX) & (~wx.MAXIMIZE_BOX) ^ wx.RESIZE_BORDER -) - - -class CellTemperatureFrame( # pylint: disable=too-many-ancestors,too-many-instance-attributes - wx.Frame -): - """ - Frame to display the cell temperatures in a table. - """ - - # pylint: disable=too-many-arguments - def __init__( - self, - title, - parent=None, - dbc: Database = None, - strings=1, - modules=8, - temps_per_module=4, - pos=None, - ): - wx.Frame.__init__(self, parent=parent, title=title, style=FRAME_STYLE) - self.SetPosition(pos) - self.SetIcon(get_icon()) - panel = wx.Panel(self) - self.strings = strings - self.modules = modules - self.temps_per_module = temps_per_module - self.grid_table = gridlib.Grid(panel) - self.grid_table.CreateGrid(self.temps_per_module, self.modules) - self.grid_table.SetRowLabelSize(100) - for i in range(0, self.modules): - self.grid_table.SetColLabelValue(i, f"Module {i+1}") - for i in range(0, self.temps_per_module): - self.grid_table.SetRowLabelValue(i, f"Temperature {i+1}") - self.grid_table.SetRowLabelAlignment(wx.ALIGN_LEFT, wx.ALIGN_CENTRE) - for row in range(self.temps_per_module): - for col in range(self.modules): - self.grid_table.SetCellValue(row, col, "None") - self.grid_table.EnableEditing(False) - self.grid_table.DisableDragRowSize() - self.grid_table.DisableDragColSize() - - sizer = wx.BoxSizer() - sizer.Add(self.grid_table, 1, wx.EXPAND | wx.ALL) - panel.SetSizer(sizer) - sizer.Fit(panel) - width, height = self.grid_table.GetSize() - self.SetSize(wx.Size(width + 28, height + 44)) - - # dbc stuff - self.msg_name = "foxBMS_CellTemperatures" - self.mux_name = "foxBMS_CellTemperatures_Mux" - self.dbc = dbc - self.cell_temperatures_msg = self.dbc.get_message_by_name(self.msg_name) - self.cell_temperatures_mux = self.cell_temperatures_msg.get_signal_by_name( - self.mux_name - ) - - def update_cell_temperatures(self, value: can.message.Message): - """Updates the table cell entries with the current temperature values""" - msg_data = self.dbc.decode_message(value.arbitration_id, value.data) - mux_id = self._get_mux_id(msg_data) - for i in range(0, 6): - temp_id = mux_id * 6 + i - cell_temperature = msg_data[f"cellTemperature_{str(temp_id).zfill(3)}"] - cell_temperature = str(cell_temperature) - cell_position_in_module = temp_id % self.temps_per_module - cell_position_in_string = int(temp_id // self.temps_per_module) - cell_temperature_invalid = msg_data[ - f"cellTemperature_{str(temp_id).zfill(3)}_invalidFlag" - ] - if not temp_id < self.temps_per_module * self.modules: - break - self.grid_table.SetCellValue( - cell_position_in_module, cell_position_in_string, cell_temperature - ) - if not cell_temperature_invalid: - color = wx.GREEN - else: - color = wx.RED - self.grid_table.SetCellBackgroundColour( - cell_position_in_module, cell_position_in_string, color - ) - self.grid_table.ForceRefresh() - - def _get_mux_id(self, msg_data): - mux_id_str: str = list(msg_data.values())[0] - mux_id = [ - k for k, v in self.cell_temperatures_mux.choices.items() if v == mux_id_str - ][0] - return mux_id - - def Destroy(self): # pylint: disable=invalid-name,no-self-use - """Unbind normal destroy""" - return True - - def NewDestroy(self): # pylint: disable=invalid-name - """Destroys the frame""" - return super().Destroy() diff --git a/tools/gui/fgui/lvac/cell_voltages.py b/tools/gui/fgui/lvac/cell_voltages.py deleted file mode 100644 index 1b0ad4f2..00000000 --- a/tools/gui/fgui/lvac/cell_voltages.py +++ /dev/null @@ -1,153 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - - -"""Table to display the cell voltages""" - - -import can -import wx -import wx.grid as gridlib -from cantools.database.can import Database - -from ..misc.gui_helpers import get_icon - -FRAME_STYLE = ( - wx.DEFAULT_FRAME_STYLE & (~wx.CLOSE_BOX) & (~wx.MAXIMIZE_BOX) ^ wx.RESIZE_BORDER -) - - -class CellVoltageFrame( # pylint: disable=too-many-ancestors,too-many-instance-attributes - wx.Frame -): - """ - Frame to display the cell voltages in a table. - """ - - # pylint: disable=too-many-arguments - def __init__( - self, - title, - parent=None, - dbc: Database = None, - strings=1, - modules=8, - cells_per_module=12, - pos=None, - ): - wx.Frame.__init__(self, parent=parent, title=title, style=FRAME_STYLE) - self.SetPosition(pos) - self.SetIcon(get_icon()) - panel = wx.Panel(self) - self.strings = strings - self.modules = modules - self.cells_per_module = cells_per_module - self.grid_table = gridlib.Grid(panel) - self.grid_table.CreateGrid(self.cells_per_module, self.modules) - self.grid_table.SetRowLabelSize(100) - for i in range(0, self.modules): - self.grid_table.SetColLabelValue(i, f"Module {i+1}") - for i in range(0, self.cells_per_module): - self.grid_table.SetRowLabelValue(i, f"Cell {i+1}") - self.grid_table.SetRowLabelAlignment(wx.ALIGN_LEFT, wx.ALIGN_CENTRE) - for row in range(self.cells_per_module): - for col in range(self.modules): - self.grid_table.SetCellValue(row, col, "None") - self.grid_table.EnableEditing(False) - self.grid_table.DisableDragRowSize() - self.grid_table.DisableDragColSize() - - sizer = wx.BoxSizer() - sizer.Add(self.grid_table, 1, wx.EXPAND | wx.ALL) - panel.SetSizer(sizer) - sizer.Fit(panel) - width, height = self.grid_table.GetSize() - self.SetSize(wx.Size(width + 28, height + 44)) - - # dbc stuff - self.msg_name = "foxBMS_CellVoltages" - self.mux_name = "foxBMS_CellVoltages_Mux" - self.dbc = dbc - self.cell_voltages_msg = self.dbc.get_message_by_name(self.msg_name) - self.cell_voltages_mux = self.cell_voltages_msg.get_signal_by_name( - self.mux_name - ) - - def update_cell_voltages(self, value: can.message.Message): - """Updates the table cell entries with the current voltage values""" - msg_data = self.dbc.decode_message(value.arbitration_id, value.data) - mux_id = self._get_mux_id(msg_data) - for i in range(0, 4): - cell_id = mux_id * 4 + i - cell_voltage = msg_data[f"cellVoltage_{str(cell_id).zfill(3)}"] - cell_voltage = str(cell_voltage) - cell_position_in_module = cell_id % self.cells_per_module - cell_position_in_string = int(cell_id // self.cells_per_module) - cell_voltage_invalid = msg_data[ - f"cellVoltage_{str(cell_id).zfill(3)}_invalidFlag" - ] - if not cell_id < self.cells_per_module * self.modules: - break - self.grid_table.SetCellValue( - cell_position_in_module, cell_position_in_string, cell_voltage - ) - if not cell_voltage_invalid: - color = wx.GREEN - else: - color = wx.RED - self.grid_table.SetCellBackgroundColour( - cell_position_in_module, cell_position_in_string, color - ) - self.grid_table.ForceRefresh() - - def _get_mux_id(self, msg_data): - mux_id_str: str = list(msg_data.values())[0] - mux_id = [ - k for k, v in self.cell_voltages_mux.choices.items() if v == mux_id_str - ][0] - return mux_id - - def Destroy(self): # pylint: disable=invalid-name,no-self-use - """Unbind normal destroy""" - return True - - def NewDestroy(self): # pylint: disable=invalid-name - """Destroys the frame""" - return super().Destroy() diff --git a/tools/gui/fgui/lvac/debug_response.py b/tools/gui/fgui/lvac/debug_response.py deleted file mode 100644 index 8721be8a..00000000 --- a/tools/gui/fgui/lvac/debug_response.py +++ /dev/null @@ -1,117 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Decoding and displaying of the 'DebugResponse' message""" - -month_to_number = { - "January": 1, - "February": 2, - "March": 3, - "April": 4, - "May": 5, - "June": 6, - "July": 7, - "August": 8, - "September": 9, - "October": 10, - "November": 11, - "December": 12, -} - - -def decode_debug_response(value, dbc): - "print debug information to stdout" - msg = dbc.decode_message(value.arbitration_id, value.data) - mux_value = msg["foxBMS_DebugResponse_Mux"] - if mux_value == "foxBMS_RtcTime": - hundredth_of_seconds = str(msg["GetHundredthOfSeconds"]).rjust(3, "0") - seconds = str(msg["GetSeconds"]).rjust(2, "0") - minutes = str(msg["GetMinutes"]).rjust(2, "0") - hours = str(msg["GetHours"]).rjust(2, "0") - day = str(msg["GetDay"]).rjust(2, "0") - month = str(month_to_number[str(msg["GetMonth"])]).rjust(2, "0") - year = str(msg["GetYear"]).rjust(2, "0") - nice_msg = f"BMS time: {year}-{month}-{day}" - nice_msg += f"T{hours}:{minutes}:{seconds},{hundredth_of_seconds}" - elif mux_value == "foxBMS_BmsSoftwareVersionInfo": - dirty = bool(msg["foxBMS_dirtyFlag"]) - major = str(msg["foxBMS_majorVersionNumber"]) - minor = str(msg["foxBMS_minorVersionNumber"]) - patch = str(msg["foxBMS_patchVersionNumber"]) - release_distance = str(msg["foxBMS_releaseDistance"]) - release_distance_overflow = bool(msg["foxBMS_releaseDistanceOverflow"]) - under_version_control = bool(msg["foxBMS_underVersionControl"]) - nice_msg = f"BMS Software version info: version: v{major}.{minor}.{patch}\n" - nice_msg += f"BMS Software version info: using vcs: {under_version_control}\n" - nice_msg += f"BMS Software version info: is dirty: {dirty}\n" - nice_msg += "BMS Software version info: release distance: " - nice_msg += f"{release_distance}\n" - nice_msg += "BMS Software version info: release distance overflow: " - nice_msg += f"{release_distance_overflow}" - elif mux_value == "foxBMS_BootInformation": - boot_data = msg["foxBMS_MagicBootData"] - boot_data_bin = bin(boot_data)[2:].rjust(56, "0") - if boot_data == 0xFEFEFEFEFEFEFE: - nice_msg = f"------> BMS Boot message (start marker {boot_data_bin})" - elif boot_data == 0x01010101010101: - nice_msg = f"------> BMS Boot message (end marker {boot_data_bin})" - else: - nice_msg = f"Unexpected startup data '{boot_data_bin}'" - elif mux_value == "foxBMS_McuUniqueDieId": - nice_msg = f"MCU die ID: {msg['MCU_uniqueId']}" - elif mux_value == "foxBMS_McuLotNumber": - nice_msg = f"MCU lot number: {msg['MCU_LotNumber']}" - elif mux_value == "foxBMS_McuWaferInformation": - nice_msg = f"MCU wafer information: {msg['MCU_waferNumber']} " - nice_msg += f"(x={msg['MCU_xWaferCoordinate']}, " - nice_msg += f"y={msg['MCU_yWaferCoordinate']}) " - elif mux_value == "foxBMS_CommitHash": - sha = "" - bits = str(bin(msg["shortHash"])[2:].zfill(56)) - sha = "" - for i in range(0, 7): - start = (0 + i) * 8 - end = start + 8 - bitstring = bits[start:end] - sha += chr(int(bitstring, 2)) - nice_msg = f"Short commit hash: {sha}" - else: - nice_msg = msg - print(nice_msg) diff --git a/tools/gui/fgui/lvac/default_messages.py b/tools/gui/fgui/lvac/default_messages.py deleted file mode 100644 index 5eacf60b..00000000 --- a/tools/gui/fgui/lvac/default_messages.py +++ /dev/null @@ -1,122 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Wrapper to retrieve several messages from the DBC file. -This should help to keep most of the 'message'-configuration out of the GUI -implementation.""" - - -import can -from cantools.database.can import Database, Message - - -def _get_bms_state_request_message(dbc: Database): - """Returns the BMS state request message""" - return dbc.get_message_by_name("foxBMS_BmsStateRequest") - - -def _get_state_request_signal_mode(message: Message): - """Returns the signal of the request mode of BMS state request message""" - return message.get_signal_by_name("foxBMS_modeRequest") - - -def _get_balancing_threshold_signal(message: Message): - """Returns the balancing threshold signal""" - return message.get_signal_by_name("foxBMS_balancingThreshold") - - -def _set_bms_state_request_message( - message: Message, - mode_request, - activate_balancing, - balancing_threshold, -) -> can.Message: - - data = message.encode( - { - "foxBMS_modeRequest": mode_request, - "foxBMS_activateBalancing": activate_balancing, - "foxBMS_balancingThreshold": balancing_threshold, - "foxBMS_externallyPrecharged": False, - "foxBMS_resetFlags": False, - "foxBMS_chargerConnected": False, - "foxBMS_disableInsulationMon": False, - "foxBMS_heaterOverride_ON": False, - "foxBMS_heaterOverride_OFF": False, - }, - padding=True, - ) - return can.Message(arbitration_id=message.frame_id, data=data, is_extended_id=False) - - -def _get_cell_voltages_msg_id(dbc: Database): - cell_voltage_msg = dbc.get_message_by_name("foxBMS_CellVoltages") - return cell_voltage_msg.frame_id - - -def _get_cell_temperatures_msg_id(dbc: Database): - cell_temperatures_msg = dbc.get_message_by_name("foxBMS_CellTemperatures") - return cell_temperatures_msg.frame_id - - -def _get_bms_state_msg_id(dbc: Database): - bms_state_msg = dbc.get_message_by_name("foxBMS_BmsState") - return bms_state_msg.frame_id - - -def _get_bms_state_details_msg_id(dbc: Database): - bms_state_details_msg = dbc.get_message_by_name("foxBMS_BmsStateDetails") - return bms_state_details_msg.frame_id - - -def _get_debug_response_msg_id(dbc: Database): - debug_response_msg = dbc.get_message_by_name("foxBMS_DebugResponse") - return debug_response_msg.frame_id - - -def _get_message_type(value: can.message.Message, frame_id): - if value.arbitration_id == frame_id: - return True - return False - - -def _get_balancing_threshold_limits(balancing_threshold_signal): - """Returns the maximum value of the balancing signal""" - return (balancing_threshold_signal.minimum, balancing_threshold_signal.maximum) diff --git a/tools/gui/fgui/lvac/lvac_frame.py b/tools/gui/fgui/lvac/lvac_frame.py deleted file mode 100644 index 3709d8ca..00000000 --- a/tools/gui/fgui/lvac/lvac_frame.py +++ /dev/null @@ -1,574 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Implements an app to view the CAN messages that come from the BMS and -send CAN messages to the BMS to control the BMS behavior.""" - -import logging -import time -from pathlib import Path -from typing import Union - -import can -import click -import wx -from cantools.database.can import Message -from wx.lib.masked import NumCtrl - -from .. import PROJECT_ROOT, __appname__, __version__ -from ..misc.can.can_helpers import get_dbc_dialog, try_to_select_can_adapter -from ..misc.gui_helpers import get_icon -from ..misc.misc import LOG_LEVELS, BatterySystemConfiguration -from ..misc.program_arguments import ( - C_SETUP_BAUD_RATE, - C_SETUP_CAN_ADAPTERS, - C_SETUP_LOGGING, - C_SETUP_VERBOSITY, - chose_baud_rate, - chose_can_adapter, - chose_logging_dir, - validate_argument_combination, -) -from ..workers.can_node_worker import CanAdapterProcess -from ..workers.gui_sync_worker import SyncThread -from ..workers.send_worker import PeriodicSendThread -from .bms_state import BmsStateFrame -from .cell_temperatures import CellTemperatureFrame -from .cell_voltages import CellVoltageFrame -from .debug_response import decode_debug_response -from .default_messages import ( - _get_balancing_threshold_limits, - _get_balancing_threshold_signal, - _get_bms_state_details_msg_id, - _get_bms_state_msg_id, - _get_bms_state_request_message, - _get_cell_temperatures_msg_id, - _get_cell_voltages_msg_id, - _get_debug_response_msg_id, - _get_message_type, - _get_state_request_signal_mode, - _set_bms_state_request_message, -) -from .msgs.msg_debug import DebugMessage, DebugMessageState - -TITLE = f"{__appname__} - Live View and Control - {__version__}" -SIZE = wx.Size(500, 800) - -BS_CONFIG_FILE = ( - PROJECT_ROOT / "src" / "app" / "application" / "config" / "battery_system_cfg.h" -) - - -class LiveViewAndControlMainFrame( # pylint:disable=too-many-ancestors,too-many-instance-attributes - wx.Frame -): - """Control frame of LVAC""" - - def __init__(self, parent=None, can_process: Union[None, CanAdapterProcess] = None): - wx.Frame.__init__(self, parent, -1, title=TITLE, size=SIZE) - self.SetPosition((10, 10)) - self.SetIcon(get_icon()) - self.Bind(wx.EVT_CLOSE, self.CloseFrameSafely) - self.Bind(wx.EVT_SET_FOCUS, self.onLvacFocus) - - # for the parent to know, whether we need to close the frame - self.is_running = True - - # setup the shared CAN process - self.can_process = can_process - # lock so that no one else can use it! --> use real in future! - # this is currently only some whack gui introduced lock, not a real one - # self.can_process.locked = True - self.can_process.g_idle.clear() # tell the CAN process that there will be work - self.can_process.app_paused.set() - self.can_process.app_canceled.clear() - - self.sync_worker = SyncThread( - self.worker_process_function, self.can_process.receive_queue - ) - self.send_worker = PeriodicSendThread( - self.set_send_data, self.can_process.send_queue - ) - self.panel = wx.Panel(self) - self.vbox_main = wx.BoxSizer(wx.VERTICAL) - self.panel.SetSizer(self.vbox_main) - self.vbox_main.AddStretchSpacer() - self.controls: list[wx.Button] = [] - - self.btn_start_action = False - self._add_start_btn() - self._add_bms_state_request_btn() - - self.debug_message_state = DebugMessageState() - self._add_set_rtc_time_btn() - self._add_get_rtc_time_btn() - self._add_fram_init_btn() - self._add_get_software_version_btn() - - self.bms_state_request_last_entry = 0 - self.start_sending_requests = False - self.dbc, _ = get_dbc_dialog() - if not self.dbc: - self.CloseFrameSafely(None) - return - bs_config = BatterySystemConfiguration(BS_CONFIG_FILE) - self.f_cell_voltages = CellVoltageFrame( - title="Cell Voltages", - parent=self.GetParent(), - dbc=self.dbc, - pos=(520, 10), - strings=bs_config.bs_nr_of_strings, - modules=bs_config.bs_nr_of_modules_per_string, - cells_per_module=bs_config.bs_nr_of_cell_blocks_per_module, - ) - self.f_cell_voltages.Show() - - self.f_cell_temperatures = CellTemperatureFrame( - title="Cell Temperatures", - parent=self.GetParent(), - dbc=self.dbc, - pos=(520, self.f_cell_voltages.GetSize()[1] + 30), - strings=bs_config.bs_nr_of_strings, - modules=bs_config.bs_nr_of_modules_per_string, - temps_per_module=bs_config.bs_nr_of_temp_sensors_per_module, - ) - self.f_cell_temperatures.Show() - - self.f_bms_state = BmsStateFrame( - title="BMS State and BMS State Details", - parent=self.GetParent(), - dbc=self.dbc, - pos=( - self.f_cell_voltages.GetPosition()[0] - + self.f_cell_voltages.GetSize()[0] - + 30, - self.f_cell_voltages.GetPosition()[1], - ), - ) - self.f_bms_state.Show() - - # DBC/CAN stuff - self.cell_voltages_msg_id = _get_cell_voltages_msg_id(self.dbc) - self.cell_temperatures_msg_id = _get_cell_temperatures_msg_id(self.dbc) - self.bms_state_msg_id = _get_bms_state_msg_id(self.dbc) - self.bms_state_details_msg_id = _get_bms_state_details_msg_id(self.dbc) - # construct BMS State Request Message - self.state_request_msg: Message = _get_bms_state_request_message(self.dbc) - self.state_request_signal_mode = _get_state_request_signal_mode( - self.state_request_msg - ) - # set Debug message - self.debug_msg = DebugMessage(self.dbc) - - self.debug_response_msg_id = _get_debug_response_msg_id(self.dbc) - - # Balancing - self.balancing_threshold_signal = _get_balancing_threshold_signal( - self.state_request_msg - ) - self.balancing_threshold_limits = _get_balancing_threshold_limits( - self.balancing_threshold_signal - ) - self._add_balancing_ckb() - self._add_mode_request_rbtn() - self._add_balancing_nctrl() - self.activate_balancing = False - self.balancing_threshold = 0 - self.mode_request = 0 - # on start up all controls shall not indicate that they are usable - as - # they are not (the start button must be pressed before!) - self.disable_controls() - self.Show() - - def _add_start_btn(self) -> None: - """Adds a global start/stop button for the app""" - # this button shall work at every time - do not add it to the controls - # attribute! - self.btn_start = wx.Button(self.panel, label="Start") - self.vbox_main.Add(self.btn_start, 0, wx.ALIGN_CENTER_HORIZONTAL | wx.ALL, 5) - self.btn_start.Bind(wx.EVT_BUTTON, self.thread_wrapper_cb) - - def _add_bms_state_request_btn(self) -> None: - """Add a button to start/stop sending requests to the BMS.""" - self.bms_state_request_btn = wx.Button( - self.panel, label="Start BMS State Request" - ) - self.vbox_main.Add( - self.bms_state_request_btn, 0, wx.ALIGN_CENTER_HORIZONTAL | wx.ALL, 5 - ) - self.bms_state_request_btn.Disable() - self.bms_state_request_btn.Bind(wx.EVT_BUTTON, self._set_bms_state_request_cb) - self.controls.append(self.bms_state_request_btn) - - def _add_set_rtc_time_btn(self) -> None: - """Add a button to set the RTC on the BMS.""" - self.bms_set_rtc_time_btn = wx.Button(self.panel, label="Set RTC Time") - self.vbox_main.Add( - self.bms_set_rtc_time_btn, 0, wx.ALIGN_CENTER_HORIZONTAL | wx.ALL, 5 - ) - self.bms_set_rtc_time_btn.Disable() - self.bms_set_rtc_time_btn.Bind(wx.EVT_BUTTON, self._set_rtc_time_cb) - self.controls.append(self.bms_set_rtc_time_btn) - - def _add_get_rtc_time_btn(self) -> None: - """Add a button to set the RTC on the BMS.""" - self.bms_get_rtc_time_btn = wx.Button(self.panel, label="Get RTC Time") - self.vbox_main.Add( - self.bms_get_rtc_time_btn, 0, wx.ALIGN_CENTER_HORIZONTAL | wx.ALL, 5 - ) - self.bms_get_rtc_time_btn.Disable() - self.bms_get_rtc_time_btn.Bind(wx.EVT_BUTTON, self._get_rtc_time_cb) - self.controls.append(self.bms_get_rtc_time_btn) - - def _add_fram_init_btn(self) -> None: - """Add a button to send a message to initialize the FRAM.""" - self.bms_initialize_fram_btn = wx.Button(self.panel, label="Initialize FRAM") - self.vbox_main.Add( - self.bms_initialize_fram_btn, 0, wx.ALIGN_CENTER_HORIZONTAL | wx.ALL, 5 - ) - self.bms_initialize_fram_btn.Disable() - self.bms_initialize_fram_btn.Bind(wx.EVT_BUTTON, self._get_initialize_fram_cb) - self.controls.append(self.bms_initialize_fram_btn) - - def _add_get_software_version_btn(self) -> None: - """Add to send the CAN message for retrieving the BMS software version""" - self.bms_get_software_version_btn = wx.Button( - self.panel, label="Get software version" - ) - self.vbox_main.Add( - self.bms_get_software_version_btn, 0, wx.ALIGN_CENTER_HORIZONTAL | wx.ALL, 5 - ) - self.bms_get_software_version_btn.Disable() - self.bms_get_software_version_btn.Bind( - wx.EVT_BUTTON, self._get_software_version_cb - ) - self.controls.append(self.bms_get_software_version_btn) - - def _add_balancing_ckb(self) -> None: - """Add a checkbox to enable/disable balancing""" - self.balancing_ckb = wx.CheckBox(self.panel, label="Balancing") - self.vbox_main.Add( - self.balancing_ckb, 0, wx.ALIGN_CENTER_HORIZONTAL | wx.ALL, 5 - ) - self.balancing_ckb.SetValue(False) - self.balancing_ckb.Bind(wx.EVT_CHECKBOX, self._balancing_cb) - self.controls.append(self.balancing_ckb) - - def _add_balancing_nctrl(self): - """Add a GUI element that only accepts numbers""" - self.flt1 = NumCtrl(self.panel, style=wx.TE_PROCESS_ENTER) - self.flt1.SetValue(0) - self.flt1.SetMin(self.balancing_threshold_limits[0]) - self.flt1.SetMax(self.balancing_threshold_limits[1]) - self.flt1.Bind(wx.EVT_KEY_DOWN, self._get_balancing_threshold_key) - self.controls.append(self.flt1) - - def _get_balancing_threshold_key(self, event: wx.Event): - """Gets the balancing threshold value from the control element.""" - keycode = event.GetKeyCode() - if keycode in (wx.WXK_RETURN, wx.WXK_NUMPAD_ENTER, wx.WXK_TAB): - self.balancing_threshold = self.flt1.GetValue() - event.EventObject.Navigate() - event.Skip() - - def _balancing_cb(self, event: wx.Event): - """Activate balancing""" - self.activate_balancing = event.GetEventObject().GetValue() - - def _add_mode_request_rbtn(self): - mode_requests = [] - for _, value in self.state_request_signal_mode.choices.items(): - mode_requests.append(value.name) - - self.rb_request_choices = wx.RadioBox( - self.panel, label="State Request", choices=mode_requests, majorDimension=1 - ) - self.vbox_main.Add( - self.rb_request_choices, 0, wx.ALIGN_CENTER_HORIZONTAL | wx.ALL, 7 - ) - self.rb_request_choices.Bind(wx.EVT_RADIOBOX, self.select_mode_cb) - self.controls.append(self.rb_request_choices) - - def select_mode_cb(self, event=None): - """wrapper to retrieve the requested BMS mode bay an *CallAfter* function.""" - wx.CallAfter(self.select_mode_ca, event) - - def select_mode_ca(self, event=None): - """Sets the requested BMS mode""" - event_object = event.GetEventObject() - requested_mode_as_str = event_object.GetString(event_object.GetSelection()) - for key, value in self.state_request_signal_mode.choices.items(): - if value == requested_mode_as_str: - self.mode_request = key - break - - def _set_bms_state_request_cb(self, event=None): - wx.CallAfter(self._set_bms_state_request_ca, event) - - def _set_bms_state_request_ca(self, event=None): # pylint: disable=unused-argument - """Start/stop sending BMS state request messages""" - if not self.start_sending_requests: - self.bms_state_request_btn.SetLabel("Stop BMS State Request") - self.start_sending_requests = True - else: - self.bms_state_request_btn.SetLabel("Start BMS State Request") - self.start_sending_requests = False - - def _set_rtc_time_cb(self, event=None): - wx.CallAfter(self._set_rtc_time_ca, event) - - def _get_rtc_time_cb(self, event=None): - wx.CallAfter(self._get_rtc_time_ca, event) - - def _get_initialize_fram_cb(self, event=None): - wx.CallAfter(self._get_initialize_fram_ca, event) - - def _get_software_version_cb(self, event=None): - wx.CallAfter(self._get_software_version_ca, event) - - def _set_rtc_time_ca(self, event=None): # pylint: disable=unused-argument - """Set RTC time""" - self.debug_message_state.set_rtc_time += 1 - self.debug_message_state.number_of_requests += 1 - - def _get_rtc_time_ca(self, event=None): # pylint: disable=unused-argument - """Request to get RTC time""" - self.debug_message_state.get_rtc_time += 1 - self.debug_message_state.number_of_requests += 1 - - def _get_initialize_fram_ca(self, event=None): # pylint: disable=unused-argument - """Request to initialize the FRAM""" - self.debug_message_state.fram_initialization += 1 - self.debug_message_state.number_of_requests += 1 - - def _get_software_version_ca(self, event=None): # pylint: disable=unused-argument - """Request to retrieve the software version""" - self.debug_message_state.get_software_version += 1 - self.debug_message_state.number_of_requests += 1 - - def enable_controls(self): - """Enable all control buttons""" - for i in self.controls: - i.Enable() - - def disable_controls(self): - """Disable all control buttons""" - for i in self.controls: - i.Disable() - - def thread_wrapper_cb(self, event=None): - """Start/Stop the threads""" - if not self.btn_start_action: - self.btn_start.SetLabel("Stop") - self.btn_start_action = True - self.start_threads() - self.start_process() - self.enable_controls() - else: - self.disable_controls() - self.start_sending_requests = False - self.btn_start.SetLabel("Start") - self.bms_state_request_btn.SetLabel("Start BMS State Request") - self.btn_start_action = False - self.stop_thread() - self.stop_process() - - def start_threads(self): - """Start the GUI sync threads.""" - self.sync_worker = SyncThread( - self.worker_process_function, self.can_process.receive_queue - ) - self.send_worker = PeriodicSendThread( - self.set_send_data, self.can_process.send_queue - ) - self.sync_worker.start() - self.send_worker.start() - - def stop_thread(self): - """Stop the GUI sync threads.""" - self.sync_worker.cancel() - time.sleep(0.1) - self.sync_worker.join(timeout=0.5) - self.send_worker.cancel() - time.sleep(0.1) - self.send_worker.join(timeout=0.5) - - def start_process(self): - """Used to inform CAN process, that the App has started, and the process - should no longer be paused.""" - self.can_process.app_paused.clear() - - def stop_process(self): - """Used to inform CAN process, that the App is paused.""" - self.can_process.app_paused.set() - - def set_send_data(self) -> Union[list[can.Message], None]: - """Returns CAN messages to be sent, composed with information obtained - from the GUI.""" - msgs = [] - if self.start_sending_requests: - time_ms = round(time.time() * 1000) - if time_ms - self.bms_state_request_last_entry > 95: - if time_ms - self.bms_state_request_last_entry > 105: - pass # todo - if self.activate_balancing: - balancing_threshold = self.balancing_threshold - else: - balancing_threshold = 0 - msg = _set_bms_state_request_message( - self.state_request_msg, - self.mode_request, - self.activate_balancing, - balancing_threshold, - ) - self.bms_state_request_last_entry = time_ms - msgs.append(msg) - if self.debug_message_state.number_of_requests: - msgs.extend(self.debug_msg.process_debug_messages(self)) - return msgs - - def worker_process_function(self, value): - """wrapper to call the GUI update function as an *CallAfter* function.""" - wx.CallAfter(self.update_process_label, value) - - def update_process_label(self, value: can.message.Message): - """Calls some callbacks that update the respective GUI elements.""" - if _get_message_type(value, self.cell_voltages_msg_id): - self.f_cell_voltages.update_cell_voltages(value) - elif _get_message_type(value, self.cell_temperatures_msg_id): - self.f_cell_temperatures.update_cell_temperatures(value) - elif _get_message_type(value, self.bms_state_msg_id): - self.f_bms_state.update_bms_state_info(value) - elif _get_message_type(value, self.debug_response_msg_id): - decode_debug_response(value, self.dbc) - - def CloseFrameSafely(self, event: wx.Event): # pylint: disable=invalid-name - """Close the frame safely: - - - move the CAN process to idle state - - tell the process, that this(!) app has been canceled - - Destroy all generated sub frames - - stop all threads that where used to update the GUI""" - # use g_idle first to omit race condition - self.can_process.g_idle.set() - self.can_process.app_canceled.set() - self.can_process.locked.release() - self.is_running = False - if getattr(self, "f_cell_temperatures", None): - self.f_cell_temperatures.NewDestroy() - if getattr(self, "f_cell_voltages", None): - self.f_cell_voltages.NewDestroy() - if getattr(self, "f_bms_state", None): - self.f_bms_state.NewDestroy() - if (self.sync_worker and self.sync_worker.is_alive()) or ( - self.send_worker and self.send_worker.is_alive() - ): - self.stop_thread() - if event: - event.Skip() - return super().Destroy() - - def onLvacFocus( # pylint: disable=invalid-name,unused-argument - self, event: wx.Event - ): - """Focus all LVAC frames and bring them to top""" - if getattr(self, "f_cell_temperatures", None): - self.f_cell_temperatures.Raise() - self.f_cell_temperatures.Iconize(False) - if getattr(self, "f_cell_voltages", None): - self.f_cell_voltages.Raise() - self.f_cell_voltages.Iconize(False) - if getattr(self, "f_bms_state", None): - self.f_bms_state.Raise() - self.f_bms_state.Iconize(False) - self.Raise() - - -@click.command() -@click.help_option("--help", "-h") -@click.option("-v", "--verbose", **C_SETUP_VERBOSITY) -@click.option("-c", "--can-adapter", **C_SETUP_CAN_ADAPTERS) -@click.option("-b", "--baud-rate", **C_SETUP_BAUD_RATE) -@click.option("-l", "--logging", "logging_dir", **C_SETUP_LOGGING) -def main(verbose: int, can_adapter: str, baud_rate: str, logging_dir: click.Path): - """main entry point for the LVAC GUI application""" - log_level = LOG_LEVELS[min(verbose, max(LOG_LEVELS.keys()))] - logging.basicConfig(level=log_level) - logging.debug(f"Logging level: {logging.getLevelName(log_level)}") - - app = wx.App() - wx.Locale(wx.LANGUAGE_ENGLISH) - - if not can_adapter: - can_adapter = chose_can_adapter() - else: - can_adapter = try_to_select_can_adapter(can_adapter) - logging.debug(f"CAN adapter: {can_adapter}") - - if can_adapter and not baud_rate: - baud_rate = chose_baud_rate() - logging.debug(f"BAUD rate: {baud_rate}") - - if can_adapter and baud_rate: - logging_dir = chose_logging_dir(logging_dir) - logging.debug(f"CAN Logging: {logging_dir}") - - validate_argument_combination(can_adapter, baud_rate, logging_dir) - - can_process = None - if can_adapter and baud_rate: - can_process = CanAdapterProcess(can_adapter, baud_rate, Path(logging_dir)) - can_process.locked.acquire(block=False) - can_process.daemon = True - can_process.start() - LiveViewAndControlMainFrame(can_process=can_process) - app.MainLoop() - - if can_process: - if not can_process.g_canceled.is_set(): - logging.debug("(1/2) start canceling CanAdapterProcess") - can_process.g_cancel() - logging.debug("(2/2) done canceling CanAdapterProcess") - can_process.join() - logging.debug("exit") - - -if __name__ == "__main__": - main() # pylint: disable=no-value-for-parameter diff --git a/tools/gui/fgui/lvac/msgs/msg_debug.py b/tools/gui/fgui/lvac/msgs/msg_debug.py deleted file mode 100644 index ded6bab6..00000000 --- a/tools/gui/fgui/lvac/msgs/msg_debug.py +++ /dev/null @@ -1,202 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Implementation of the 'foxBMS_Debug' message""" - -import datetime -import logging - -import can -from cantools.database.can import Database, Message - - -class DebugMessageState: # pylint: disable=too-few-public-methods - """State of the Debug message, i.e., how many debug messages have been - received and what is their handling state.""" - - def __init__(self): - self.number_of_requests: int = 0 - self.set_rtc_time: int = 0 - self.get_rtc_time: int = 0 - self.get_software_version: int = 0 - self.fram_initialization: int = 0 - self.software_reset: int = 0 - - -class DebugMessage: - """Implements the encoding of the 'DebugMessage' and the processing wrapper - for the GUI frame.""" - - def __init__(self, dbc: Database) -> None: - self.message: Message = dbc.get_message_by_name("foxBMS_Debug") - self.mux_name = "foxBMS_Debug_Mux" - self.mux_values = { - "foxBMS_VersionInfo": 0x00, - "foxBMS_Rtc": 0x01, - "foxBMS_SoftwareReset": 0x02, - "foxBMS_FramInitialization": 0x03, - "foxBMS_TimeInfo": 0x04, - } - - def trigger_fram_initialization(self) -> can.Message: - "Process FRAM initialization trigger message" - msg_data = { - self.mux_name: self.mux_values["foxBMS_FramInitialization"], - "InitializeFram": 1, - } - data = self.message.encode(msg_data, padding=True) - logging.debug(msg_data) - return can.Message( - arbitration_id=self.message.frame_id, data=data, is_extended_id=False - ) - - def trigger_software_reset(self) -> can.Message: - "Process Software reset message" - msg_data = { - self.mux_name: self.mux_values["foxBMS_SoftwareReset"], - "foxBMS_TriggerSoftwareReset": 1, - } - data = self.message.encode(msg_data, padding=True) - logging.debug(msg_data) - return can.Message( - arbitration_id=self.message.frame_id, data=data, is_extended_id=False - ) - - def get_version_info_message(self, _type: str = "all") -> can.Message: - "Process software version information message" - bms_software_version = 0 - mcu_lot_number = 0 - mcu_unique_die_id = 0 - mcu_wafer_information = 0 - mcu_get_commit_hash = 0 - if _type == "foxBMS_GetBmsSoftwareVersion": - bms_software_version = 1 - elif _type == "foxBMS_GetMcuLotNumber": - mcu_lot_number = 1 - elif _type == "foxBMS_GetMcuUniqueDieId": - mcu_unique_die_id = 1 - elif _type == "foxBMS_GetMcuWaferInformation": - mcu_wafer_information = 1 - elif _type == "foxBMS_GetCommitHash": - mcu_get_commit_hash = 1 - elif _type == "all": - bms_software_version = 1 - mcu_lot_number = 1 - mcu_unique_die_id = 1 - mcu_wafer_information = 1 - mcu_get_commit_hash = 1 - else: - logging.error(f"Unsupported value {_type}") - msg_data = { - self.mux_name: self.mux_values["foxBMS_VersionInfo"], - "foxBMS_GetBmsSoftwareVersion": bms_software_version, - "foxBMS_GetMcuLotNumber": mcu_lot_number, - "foxBMS_GetMcuUniqueDieId": mcu_unique_die_id, - "foxBMS_GetMcuWaferInformation": mcu_wafer_information, - "foxBMS_GetCommitHash": mcu_get_commit_hash, - } - data = self.message.encode(msg_data, padding=True) - logging.debug(msg_data) - return can.Message( - arbitration_id=self.message.frame_id, data=data, is_extended_id=False - ) - - def set_rtc_time_message(self) -> can.Message: - "Process RTC setting message" - now = datetime.datetime.now() - today = datetime.datetime.today() - msg_data = { - self.mux_name: self.mux_values["foxBMS_Rtc"], - "SetHundredthOfSeconds": int(now.microsecond / 10000), - "SetSeconds": int(now.second), - "SetMinutes": int(now.minute), - "SetHours": int(now.hour), - "SetWeekday": int(today.weekday()), - "SetDay": int(today.day), - "SetMonth": int(today.month), - "SetYear": int(str(today.year)[-2:]), - } - logging.debug(msg_data) - data = self.message.encode(msg_data, padding=True) - return can.Message( - arbitration_id=self.message.frame_id, data=data, is_extended_id=False - ) - - def get_rtc_time_message(self) -> can.Message: - "Process getting the RTC message" - msg_data = { - self.mux_name: self.mux_values["foxBMS_TimeInfo"], - "foxBMS_RequestRtcTime": 1, - } - data = self.message.encode(msg_data, padding=True) - logging.debug(msg_data) - return can.Message( - arbitration_id=self.message.frame_id, data=data, is_extended_id=False - ) - - def process_debug_messages(self, the_app) -> list[can.Message]: - """Process the specific multiplexer of the the debug message""" - msgs = [] - if the_app.debug_message_state.set_rtc_time: - msgs.append(self.set_rtc_time_message()) - the_app.debug_message_state.number_of_requests -= 1 - the_app.debug_message_state.set_rtc_time -= 1 - - if the_app.debug_message_state.get_rtc_time: - msgs.append(self.get_rtc_time_message()) - the_app.debug_message_state.number_of_requests -= 1 - the_app.debug_message_state.get_rtc_time -= 1 - - if the_app.debug_message_state.get_software_version: - msgs.append(self.get_version_info_message()) - the_app.debug_message_state.number_of_requests -= 1 - the_app.debug_message_state.get_software_version -= 1 - - if the_app.debug_message_state.fram_initialization: - msgs.append(self.trigger_fram_initialization()) - the_app.debug_message_state.number_of_requests -= 1 - the_app.debug_message_state.fram_initialization -= 1 - - if the_app.debug_message_state.software_reset: - msgs.append(self.trigger_software_reset()) - the_app.debug_message_state.number_of_requests -= 1 - the_app.debug_message_state.software_reset -= 1 - - return msgs diff --git a/tools/gui/fgui/misc/can/can_constants.py b/tools/gui/fgui/misc/can/can_constants.py deleted file mode 100644 index 26fa32fb..00000000 --- a/tools/gui/fgui/misc/can/can_constants.py +++ /dev/null @@ -1,74 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Defines the CAN constants for the project.""" - -BAUD_RATES = [ - 10000, - 20000, - 50000, - 100000, - 125000, - 250000, - 500000, - 800000, - 1000000, -] -DEFAULT_BAUD_RATE_INDEX = 6 -DEFAULT_BAUD_RATE = BAUD_RATES[DEFAULT_BAUD_RATE_INDEX] - -SUPPORTED_CAN_ADAPTERS = [ - "PCAN_USBBUS1", - "PCAN_USBBUS2", - "PCAN_USBBUS3", - "PCAN_USBBUS4", - "PCAN_USBBUS5", - "PCAN_USBBUS6", - "PCAN_USBBUS7", - "PCAN_USBBUS8", - "PCAN_USBBUS9", - "PCAN_USBBUS10", - "PCAN_USBBUS11", - "PCAN_USBBUS12", - "PCAN_USBBUS13", - "PCAN_USBBUS14", - "PCAN_USBBUS15", - "PCAN_USBBUS16", -] diff --git a/tools/gui/fgui/misc/can/can_helpers.py b/tools/gui/fgui/misc/can/can_helpers.py deleted file mode 100644 index f394d730..00000000 --- a/tools/gui/fgui/misc/can/can_helpers.py +++ /dev/null @@ -1,171 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Miscellaneous helpers that are related to to CAN (speaking with CAN -adapters, reading DBC files etc.)""" - -import logging -from pathlib import Path -from typing import Tuple, Union - -import can -import cantools -import wx -from can.interface import Bus -from cantools.database.can import Database -from fgui import ( - DEFAULT_DBC_DIRECTORY_IF_IN_PROJECT_LAYOUT, - DEFAULT_DBC_FILENAME_IF_IN_PROJECT_LAYOUT, -) -from fgui.misc.can.can_constants import DEFAULT_BAUD_RATE - -# we need to set up pylint disable=abstract-class-instantiated it is used since the -# 'python-can' documentation tells that this is the way to use it. See -# https://python-can.readthedocs.io/en/master/configuration.html - - -def get_dbc_dialog() -> Tuple[Union[Database, None], Tuple[Path, None]]: - """Returns a tuple dbc database and the file it has been read from.""" - dbc = None - dbc_file = None - dlg_setup = { - "message": "Open dbc file", - "defaultDir": str(DEFAULT_DBC_DIRECTORY_IF_IN_PROJECT_LAYOUT), - "defaultFile": DEFAULT_DBC_FILENAME_IF_IN_PROJECT_LAYOUT, - "wildcard": "dbc files (*.dbc)|*.dbc", - "style": wx.FD_OPEN | wx.FD_FILE_MUST_EXIST, - } - with wx.FileDialog(None, **dlg_setup) as dlg: - if dlg.ShowModal() == wx.ID_CANCEL: - pass # user abort - else: - dbc_file = dlg.GetPath() - if dbc_file: - dbc = dbc_file_to_database(dbc_file) - dbc_file = Path(dbc_file) - return (dbc, dbc_file) - - -def dbc_file_to_database(dbc_file) -> Database: - """returns the database representation of a dbc file.""" - return cantools.database.load_file(dbc_file) - - -def detect_can_adapters() -> list[can.interface.Bus]: - """Detect possible CAN adapters. Currently only PCAN USB is supported""" - connected_adapters: list[can.interface.Bus] = [] - for k, _ in can.interfaces.BACKENDS.items(): - if k == "pcan": - try_channels = [f"PCAN_USBBUS{i}" for i in range(1, 17)] - logging.info(f"Checking for {k} in {try_channels}") - style = ( - wx.PD_CAN_ABORT - | wx.PD_APP_MODAL - | wx.PD_ELAPSED_TIME - | wx.PD_REMAINING_TIME - ) - dlg_setup = { - "title": "Searching CAN adapters", - "message": "Checking for available PCAN devices...", - "maximum": len(try_channels) + 1, - "style": style, - } - with wx.ProgressDialog(**dlg_setup) as dlg: - for i, channel in enumerate(try_channels): - dlg.Update(i, f"Checking {channel}") - logging.debug(f"Checking {channel} ({i})") - adapter = None - try: - # pylint: disable=abstract-class-instantiated - adapter: can.interface = can.interface.Bus( - bustype=k, - channel=channel, - state=can.bus.BusState.ACTIVE, - ) - except can.interfaces.pcan.pcan.PcanError: - pass - if adapter: - connected_adapters.append(adapter) - if dlg.WasCancelled(): - break - logging.info(f"Connected CAN adapters: {connected_adapters}") - return connected_adapters - - -def adapter_initialize( - can_adapter: Union[str, None], baud_rate: Union[int, None] -) -> can.interface: - """wrapper for CAN adapter initialization. Currently only PCAN USB is supported""" - if not can_adapter: - raise IOError("No CAN adapter supplied.") - - if can_adapter.lower().startswith("pcan"): - cfg: str = can_adapter.split("_") - bustype = cfg[0].lower() - channel = can_adapter - # pylint: disable=abstract-class-instantiated - adapter: can.interface = can.interface.Bus( - bustype=bustype, channel=channel, bitrate=baud_rate - ) - else: - raise IOError("CAN adapter not supported.") - return adapter - - -def adapter_uninitialize(adapter: Bus) -> None: - """wrapper for CAN adapter uninitialization.""" - adapter.flush_tx_buffer() - logging.debug("flush tx buffer") - adapter.shutdown() - logging.debug(f"uninitialize {adapter}") - - -def try_to_select_can_adapter(can_adapter: str): - """Try to select a specific CAN adapter""" - adapter = None - try: - adapter = adapter_initialize(can_adapter, DEFAULT_BAUD_RATE) - except: # pylint: disable=bare-except - pass # we don't care why the provided CAN adapter can't be used - if adapter: - adapter_uninitialize(adapter) - else: - raise IOError(f"The provided CAN adapter '{can_adapter}' does not exist.") - return can_adapter diff --git a/tools/gui/fgui/misc/info_dialog.py b/tools/gui/fgui/misc/info_dialog.py deleted file mode 100644 index eb961a77..00000000 --- a/tools/gui/fgui/misc/info_dialog.py +++ /dev/null @@ -1,175 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""helper for the info dialog""" - -import pathlib - -import markdown -import wx -import wx.adv -import wx.grid -import wx.html -import wx.lib.agw.hyperlink as hl -from fgui import ( - FOXBMS_LICENSE_FALLBACK_URL, - FOXBMS_URL, - MODULE_LICENSE_FILE, - MODULE_README_FILE, - __copyright__, - __version__, -) -from fgui.misc.logo import logo_foxbms - - -class FoxbmsInfoDialog(wx.Dialog): - """Dialog box for 'Info' message""" - - # pylint: disable=too-many-ancestors - - def __init__(self, *args, **kw): - super().__init__(*args, **kw) - self.SetSize((800, 800)) - self.SetTitle("About foxBMS 2") - self.license_file = self.get_file(MODULE_LICENSE_FILE) - self.readme_file = self.get_file(MODULE_README_FILE) - self.license_text = self.get_license_text() - self.readme_text = self.get_readme_text() - self.init_foxbms_dialog() - self.SetPosition((0, 0)) - - def init_foxbms_dialog(self): - """Setup the text of the dialog box""" - # Add icon - _icon = wx.Icon() - logo_img = wx.Image(logo_foxbms.GetImage()) - logo_img_size = logo_img.GetSize() - resized = logo_img_size / 5 - logo_img.Rescale(resized[0], resized[1]) - image = wx.Bitmap(logo_img) - _icon.CopyFromBitmap(image) - self.SetIcon(_icon) - # fill panel - panel = wx.Panel(self, -1) - sizer = wx.GridBagSizer(4, 2) - # logo and heading - png = wx.Image(logo_foxbms.GetImage()).ConvertToBitmap() - logo = wx.StaticBitmap(self, -1, png, (5, 5), (png.GetWidth(), png.GetHeight())) - heading = wx.TextCtrl( - self, - -1, - f"foxBMS 2 GUI - {__version__}", - size=(275, 30), - style=wx.TE_READONLY | wx.BORDER_NONE, - ) - # pylint:disable=no-member - font = wx.Font(20, wx.DECORATIVE, wx.NORMAL, wx.BOLD) - heading.SetFont(font) - # copyright hyperlink to foxbms.org - foxbms_copyright = wx.TextCtrl( - self, - -1, - __copyright__, - (5, 5), - size=(275, 30), - style=wx.TE_READONLY | wx.BORDER_NONE, - ) - foxbms_url = hl.HyperLinkCtrl(panel, -1, "foxbms.org", URL=FOXBMS_URL) - # License text - license_html = markdown.markdown(self.license_text, output_format="html5") - license_ctrl = wx.html.HtmlWindow( - self, - -1, - pos=(5, 5), - size=(600, 550), - style=wx.TE_READONLY | wx.TE_MULTILINE | wx.BORDER_NONE, - ) - license_ctrl.SetPage(license_html) - # GUI description - readme_html = markdown.markdown(self.readme_text, output_format="html5") - description_ctrl = wx.html.HtmlWindow( - self, - -1, - pos=(5, 5), - size=(600, 400), - style=wx.TE_READONLY | wx.TE_MULTILINE | wx.BORDER_NONE, - ) - description_ctrl.SetPage(readme_html) - # add stuff to sizer - sizer.Add(logo, pos=(0, 0), flag=wx.ALIGN_CENTER) - sizer.Add(heading, pos=(0, 1), flag=wx.ALIGN_CENTER) - sizer.Add(foxbms_copyright, pos=(1, 0), flag=wx.ALIGN_CENTER) - sizer.Add(foxbms_url, pos=(1, 1), flag=wx.ALIGN_CENTER) - sizer.Add(license_ctrl, pos=(2, 0), span=(1, 2), flag=wx.EXPAND) - sizer.Add(description_ctrl, pos=(3, 0), span=(1, 2), flag=wx.EXPAND) - panel.SetSizerAndFit(sizer) - - @staticmethod - def get_file(_file): - """Returns the file, if it exists.""" - _file = pathlib.Path(_file) - if not _file.is_file(): - _file = None - return _file - - def get_license_text(self): - """Get the license text, if this is not possible link to the online - documentation of the license""" - - if self.license_file: - license_text = self.license_file.read_text(encoding="utf-8") - else: - license_text = ( - "Could not find foxBMS 2 license file.\n" - f"Please check {FOXBMS_LICENSE_FALLBACK_URL}." - ) - self.license_file_missing_msg_box = wx.MessageBox( - license_text, "License file missing", wx.OK | wx.ICON_WARNING - ) - # self.Bind(wx.EVT_BUTTON, self.license_file_missing_msg_box) - return license_text - - def get_readme_text(self): - """returns the text of the README or a default one.""" - if self.readme_file: - readme_text = self.readme_file.read_text(encoding="utf-8") - else: - readme_text = "# foxBMS 2 GUI" - return readme_text diff --git a/tools/gui/fgui/misc/logo.py b/tools/gui/fgui/misc/logo.py deleted file mode 100644 index 201aaa0d..00000000 --- a/tools/gui/fgui/misc/logo.py +++ /dev/null @@ -1,414 +0,0 @@ -# pylint: skip-file - -# ---------------------------------------------------------------------- -# This file was generated by -# -from wx.lib.embeddedimage import PyEmbeddedImage - -logo_foxbms = PyEmbeddedImage( - b"iVBORw0KGgoAAAANSUhEUgAAALgAAABaCAYAAAALv5xOAAAik3pUWHRSYXcgcHJvZmlsZSB0" - b"eXBlIGV4aWYAAHjarZznlR25tYX/IwqFAG/CgV3rZfDC17dRtx2H5MyoOZTI5jVVwDHbACia" - b"/f//d8x/+K85l01MpeaWs+W/2GLznR+qff7r93dn4/39/jfe3nNfXzepv97wvBT4Mzx/rfn1" - b"+uZ1z+f96/X5uk7n9fTpQm2/3hhf3+ivC/n6usHr9bcbBffcwL4ubPrrQsG/7hxfU3iNNLda" - b"Pk9hvj5/3mZSn/8b/RZD8TllVyK/R29LyY2fq7exELelgZ7pm76XxutCP/zdvH3UMya/gwuW" - b"36tGGBh+qKHzu+d3y930SuPnFDK/x/AEnXg2b2zh5/YW19//97uRm7ehv1L+JaXvP/2Q6rL+" - b"mmlzA/r2kfBDhvL7nz993aWP183nlN68fbpzzq+f/NfX/fH+y5zfsqb/n7PqOfuZXY+ZKefX" - b"pN6meH/ic0PRut/K/Cr8P9mqYOtX41elJSZ1tCiywa/pmvOk8bjoluvuuH3/nG4yxOi3J4/e" - b"++mDm4YXK8loft50R/1yxxfSvEi+D5NyCLzq38fi7m3bvd10lRsvVw3V47iYauVbv8w/+dA5" - b"aijnFEtS75783oAzCmXOOWMdHyMj7ryCmm6A3379+J/yGshgumGuTLDboSuQ/pHcR3GFm+jA" - b"BxN/Pg3s7ij8LZLICBKDcYEM2OxCctnZ4r0pzhHISoI6Q/ch+kFaXEp+MUgfQ8gkhy7g3nyn" - b"uPtRn/zzMkBIIug9Ewq5oRFJVoyJ+imxUkM9hRRTSjmVVFNLPYesDsu5ZCFqL6HEkkoupdTS" - b"Sjc11FhTzbXUWlvtzbcA4qZGP7baWuudm3au3Pl25wO9Dz/CiCONPMqoo40+vZlhxplmnmXW" - b"2WZffoVFH6+8yqqrrb7dppR23GnnXXbdbfdDqZ1w4kknn3Lqaeb096y90vqXX/8ia+6VNX8z" - b"pQ+W96zxailvl3CCk6SckTEfHQkvyoALxnvlzFYXo1fmlDPbPF2RPINMSs5yyhgZjNv5dNx7" - b"7j4ylwyg+UfyZkiE/xOZM0rdP8jcX/P2s6ytfoku3AypDRVUG+i+087WCKn5PPqota+9NlHJ" - b"bSdQzM3ietNsjS8Xa5uPDTJKDKSdGcJxJZ3Ue5ozMSOo4rTp10xLuFUnDL6T0192W7OMYyKj" - b"2ZF57xXOdimWOgfDcCtTH+BpCCOBwQStQIq9HtfKWTb0VfS+ZTQqJEP+uMPofox4v5iS24Kg" - b"bkvqemVD08+XKoO4X+49zMzlo926C3Fxhkge/eimhub3L4b2Ghgf+cXQzDMyrvl1aO8Dk0i6" - b"Q3sb2GtYb4MCou6wzIEr1p3C+ZtB/T5e5nPAvhMv8zlg34mX+Ryw78TLfA7Yd+JlflVg/zZe" - b"5lcF9m/jZX5VYP82XuZXBfZv42WegKV58hjbnZUKvd+b4yupjpCBrrbq8CA1yiP4tuvsE5Ab" - b"dnc0dduQ74rOcLM+QFFgo3O9vsbq0S8/a+FikkwNhTsjYw4+FqFOzmO5vBgzgkkhgoyHmWMs" - b"kEekAFftMlKuewHZqDFoYfaNVJontBORzbtEpsfUQrTHntxSHllR2WZFTwjGGr1Vx5dBO5sk" - b"GlKt2ArNus5ceuNb/mx+XCGfnkHsHm1Dh62RNDUJv01KIqiXRiIIcwHwLnax0al+JFtcHnbt" - b"PVzPcXnIqUEfBC0B9rX4sI83vnsnDQirWH4La7i0y9m+HrvXJN8APPEOftuGMXO1iTaueagk" - b"gQnVUX00mdYbsgrNlmYJo9+rL+I5W5zYmQxKwzzbFnxV8+V4B3PCAvlsglvj6gPWm2bMXs4g" - b"yjWfvCYKyUFnVlR5ep2xg+xFUXYTgVUhgm759igEM7htkazejrKM82WVnkapnooJJfu1Z0+M" - b"a+y1moOHB6keY1b+kmH0ZhNhkUZIe1DxkM50xTQiu7vrY22UbuTzbnBBqAhCVJYoqRLnkRiG" - b"WCuUxFA9DHU8EwxUZCZRECTljWfiTsXzHvU9DiyNviZ1m/Ay14QTyik6OHSiM3KFBe1JmUHX" - b"MNQ0+5haSFFlJuegOR8sCM97n966slgdefxCB4yWDtNrrWS4/V7KfPn8P70Uvqwx2h50QbvJ" - b"bDVHvV9ToWPXAw5jgCYnBrClPpD2evPLW2OOupE1c/kEPBwzaqHWCEgTKo1FGaIq6BIGfDAy" - b"28VPb1j75a2004j3OsP87Do/fDz+6hafrlPNnxlPLebPjKcgRv/IeLBZf2Y8fps/M56N0Poj" - b"45nF/Jnx4I7irecZgNkykKtp+YKJDHG4Omn+vMfpqTiwrYrEGuJ4FOijtY18bgA2oO+nAdB3" - b"bdyQL80BIE4LnIPvDTKQ7Aaxka0Mz46cmiszxiMHsiqM5Ufb0EluwyDuQwbuy0z1MN45O/go" - b"esA3rLoZrWbTcwu7txYHjhFkxwsIaHAPGVuBzTGW8eSEidiwsqcHA4040NMFhmj4jJKbiw2T" - b"wB0dQHYao0BwJ7u8qJIYAr/FVCgleQsH+drgDmBw5Y4XcIfrI+MtV3OwZO85EXefBGv9ID2k" - b"Z9rAA9ZQpuHvEwaaux1AePrsQE6/99wYbSzXTgRmyP5jnsmUy31COsBxKtGuhHbhVdQI+JoF" - b"VjvoItXuYn1YU4KgQNPkClKF0kdsR4nHwQz8DGrkkAAvZ7JOc8cAWgsPMwu3HkPUGph+gyFg" - b"DIhlQ+/wYsIITnTD5G0SygfL6BmYh3AxMhIRC1YNug3edEyyTDnk6HMNEhG7Mj8uwXAPF6sE" - b"BtkUsaI2b3/Xi1yjYqJZRBRvWRbkExLDh27hT4p4QtVaorFoNbi1Ubl8c1F4NTCZvsnvx+fN" - b"33/BEdRy8FlkH6ot3m8QfyDrOuWdETojhmLg3uGQMqgkClIaQy0D3yIaLKRORnabrWfS2uG2" - b"7EWIcHCr6JdJjdFDK3TjxvFj51mhX3RCIm6bEIymAotbSx+L63RZV7gn7BbsQHJsx4CbRhhy" - b"DnsYSgBFk5BdVKUrCyXjKooxOzxt61T3irc9JSW0aKmB5Rm1TFahYbuK8yNvEaRWaBNiZkaU" - b"pEViBYdWRBHgYimYRt4iGRQdIlR6ADXk5EuknSrduyPxMxbhgmxQOduVLRGkBkodGY1Angfx" - b"GgjdrMr0KZxMGaTBXbJLR0q7SvYyolTQfZ3WdgQf5w97Mj8i1i6CMdGBpE80VbJct2ZkEr/B" - b"wlnkHx2qBs4dZtMMyREA9Eo/GnAKuSYJ/0ybkq7GxN3cdGg8lD+XnhmFS6SaLguuRWrCSIIh" - b"zxh9wnAv39sYAWEYIjKcYq5x0nU5kTz0ekXTVeTQSvIhiIDrFVAF2XAHIfIZV4CsiHQuDRnr" - b"QEQtQPiVqYZJ2KW1kKEdvOajtOsjVa5+OcXM/iiOfAoz77NlvMlYF7lR/hRpRp2BxEUl7und" - b"SGtpxQkjwDeTXleLzEh8uItWT1F2KhdLsXJlT2TRsgV5Tq2gnbLWfY5zIXWEPIgx0VHJRVSo" - b"q2jI3SufBBTWohmmUM0CDJ5SBxzxN80lnMICxovraObeT81qQkc8dXPAtJrdNbizpazzRoIP" - b"bExUfjtFTt4ICXOjCWEslC169cArLVabOyJuRGoHmjBp24F3cQfnMmcsmXpKu66DyWGM4CYt" - b"5BaCFW9VkI9VSi4DxaBooLobmNz7REQgWh0SWOuwBdRH3dnbweEukdHYBbZiJJrKWZ7mBbQz" - b"3acsSFkftadpTtIcaog42rixoNfJ7k7B6gM0COVAgTWmzieQo3d3AJHv1GfoY4/+DiZcZo8g" - b"ZIgTdoBtW3fzRKynxD1WkRotlDM3P9m2PDfj8orXAgywNFTQjtqE8loGO71RY8sSYaQvIaGy" - b"y9WxDnbEJ+JJsEaHCK5HLjPYGQqIRcuPZUaAm+DZ7csuWqSM+Bc09CWpTMQ6ksBH+dQOKdIr" - b"m3egqROfysEnd1ywseiFQupw684pkJQiAUKEY0lTTbVMOgb3ituzBTDHjEP+FDCDSbhJCvng" - b"AE2HudQc+4DQGKOVAY5YBc6dK5FQdUOoICsgTEoqUEpheOIIOdL3dNxp3RxCNvNtPOitVO1p" - b"TI9gQOnTC0imTMWFBMMtJESuYpLm5ynAGdeIDlsAYWitlkHO8SwddH4iWmg1rZEjsSwfzQPW" - b"+Pyln33H/OVLCY8N1XH7OQlTW4wA7ywVMXDoFtbAjoURgssZb4ZY8sMXk1QnFCi812PdnR7Q" - b"Vgd9rGoJcFWkVBZ9iBMkkfEEj7Yp2DW0zYIb5LpqkqpdAwwdeyNCJoVM8Rb6oayJapzA/SS2" - b"QOMoXAFFA2r4W1grIp/kpeHlZSAbS/JRijQxVROw3XAghk4RwJNtmWrUAT0PMpxGPyOmsnX+" - b"/kWpQBN1Ay1mSNDTu+AzEAfrYvggZiAXeZa0wrItDbsX1pZqQIohEpu2ZcG+CRrknsjaWmgH" - b"iCYMu7U1WrRES4WEJg2JtUZWDRdz2WMuRFvbTBHwAJS78xcDRgOzKTJKQpSpkU7GurhG0OIw" - b"TjkPvmB70voHRBdQofj7gY7dfAENbQHUni1qpM29btUmQKIVbkPmFjLNxkxDN/5bsRZQG4u/" - b"OgjK64u8l62NmkPSUSxpmb6k3RhI4E+GthlUPc23RQyJTjshQiKRaSFfNoEEbrAOmAVIkPQ2" - b"SDusZhhvEEeC3SBp29AO7Rp6RpqL9CVFPERE4zf0Blo1XJWgLS64/pr1svsy8OIRba9c52zC" - b"Iupu4BFEzUi2vegBWmMxDTAVAyBnE1SOfWmJBUWmexugyjXV4FRwZWwsIp+JHqRS4eVVw0Io" - b"w7WQCsK3MRZEH9KuoIs9sYSCULV0mEVwEWaXx7AJnPKT2oSM4EC8hKenEv24EgKW3gHjUJ8T" - b"5ZzBYuf6nCTAGuDVI3E2FwTLwhJMrzTxO9tjTLyGq6kgG2ztSdQLurmDLmCI2I/StdV54LWB" - b"vrCHXgIbgCMAjZkAzaAEir323GEkLZlhHzbfQv2j7uqB3idCV8HEuBgQOUFaydMy0jlUhgRV" - b"XOQQIQaIIVIqdE01QNH6VtTeeaSiMA9I/UsE1nTMBRIK26bctCBDkHBS4EU5MHssWtI6WhVa" - b"nXJG1LnMsHERVacT8kaEx7MMlax1Uq7q6Ul8ysW3QdkI1uEHeJVySYg8sQRSlBKDkNNFB3d4" - b"bWhQhqaHyqBVbG6mSiK8S4sRN9Qo+t7uwHAwtUHLhYUfLHoGDT5QKURWgNjXSubKnJVzVlCl" - b"2fAEAlZwq5EnXI7rg67CXnfwAvjTyipQexpWBJ+4EDxMwRAGhkaHR+6DG4RUaH0vk31w4M6i" - b"a1A1uFpMzPTLoolWo+Hk+HJKqY4r/gxAsLS8VFJShXZ5kuetH99BhGoNqnan1dq7xnXX3n0S" - b"eJtLavrri9SsfaM1rZABWlTAly/bjy9//q756ZdRr2AKMw2/ocSv7Gb+d0r8+h3zIyW2iOvG" - b"2SARMVla6vfQImrNIg/UJ8mqGDah5G0n1z4cAkUjQlkcjDdN2IFCmeo7RRwCWAlVVUrJ06RO" - b"8qThBpIWhUUMFqkbeR1EvnQUUI4QJljpaUKPSsPAxTt66gUA7vLStBgAgfTp6KaOchvIVCAf" - b"qTlrNoeCwIQtlTQ6mpYA3E+v2U0AHySFj1H85UB55K+BMBQivJhCseLGBd2hEbSe7QAgzIxL" - b"lGGW+ULccXXkn0WHylKsatHdAAHOUv3tbrNUapcxe/AsNAOk0IYDn4/lWQ4rhCdocL+aLjf8" - b"HxgE0pVJS+GL+GxMsAvDHAi73omU+NKspVImJlwVCQ6kW77Z7N6DEFZGimwDjmxnTJ7A4+jw" - b"TqAU0nHDGTQuWXOG3BctZhSJng6/oXxBb3ifMTh5cr9Ji1eaetImLAP0mCnEZOB/153uiBVl" - b"YqFijJW1XciKExtbz3A7bEqT4p/wcYS1gzMUx1giN4vRvu3HBDGBhnFqEa5SA7d+IK1nN0+2" - b"Y1u0F5/GdNC+haoqErIYfThwb66CE92Cs4OnPfg1YAxjEvgwLHuK0sJVqMZIDZAaOH/DAReN" - b"qXuCiK2EGKHsee58DT2pAzTNaes5Aqxo7QFI4lsQeWQvLxwjztpNkA26GlI7sCo9nDCcTSMF" - b"1EwNgDViQ3O9G9pQjw43aR9Kq2fwpE7j8BvyircT3stTBqDjkVNbWuzAXZpxtyOW1/uUGMgO" - b"69h7dTtoHQKfZqON4EK7rC+ZQOCTJ+yETsci3A20iqct3ABHONoOWNs2y8bUUNt7nGrRbrhb" - b"mqpTdVq529cLeKs1+5RmXDp0QPyMpf5xlBKquyINViKr0Lu2KrAokz7XKoSjz3AKMXsMELLZ" - b"woeW4tJ2xsCtJMP4cej9moiEY0SOYe9Eu+2J1UDXFa1SEUZUC0xyqAWakskzYYuEntSn4do4" - b"VjndhRtFjVVsMBirnSdgEoZthdH1qKgJlgjws1u6R5CA0YoSNEOw8VBtVWAZDFG/EVownjB1" - b"bSmB3pQNd8H1H3l8qnI13HfXCa2Ihd0yRNGI31Enh/qjXrWxBngMZPi7P0JbHGh2MEnUIH8t" - b"EzsLnSeCgK44eMelFS2UBfoRdAaOsfHZiTBnR+xhnMFsOIfiicRfkIYITLQxkq7to9IaSHGQ" - b"y0RMfMla7KDy5COETkGbQqkegYvI6Ap6InWbF0iDDuQOsCme6ejkRjHac1v4VMRTwn7PmBzT" - b"itPR99MizCnMok2sE7W3jNvFuHqYBdSjDylgLS3qHFuOOo+oZQo8AvYUsserOqE4emdZbUGC" - b"bpAVwkkr3pV8ARL0KOPGEVEwYBVQm3HwRRYNWLdBq7RYbOCfj3JlpLtweCc71KauEjEvGX5b" - b"fznSwqV7NH2uRfc1FUfV4ZqgTerhn+UpyXE0NXP1B7vs0YgjtullDoO/bz773dYMreJfKn7W" - b"JFA4928gvXYhJHXuRefh5R3vzyhV5yv6EUShtHGRYRvwBqyhzrQQWrQ0SWto54BhPrvtBFSX" - b"dOe5NwLa39fl8/Fq2s6UPqpwyNY7uK1758rP8J+W3LLWgKnRsh477+4ncC4N0mYeMEqnVNZz" - b"oWfp7u71Zc0Rx3oF79IpgEqr3IuozLRSIEB3XVskX+8j339vlPprm/Dn48MWU/Rxa6HPMT3e" - b"JCXtU0pMiO8BuBs7NwCfp/9+ba33coF7bT75w+zNesTba1QD6YSh0rS/LFc+eb2zfuZsX7O+" - b"wkuzNm889rOJfw5w/d3YmLn5cepUyTP5VzXGf5B63cH829R/nj2XeM+5+V7SP6Jrvpf0j5mb" - b"7yX9Y1Tme0n/yLn5XtI/Zm6+l/SPyJrvJf0j5+Z7Sf8Ymfle0j9ybr6X9I+cAyPaW4HuYGXy" - b"jKbOWnZZE0eBrC4Ntz3PPRCBqM4o3gBXw9qz7ozs3hEJhrrBi0DSKe3De3hZSC/ZBLfGLuG/" - b"BkYCeZfGGlq+gCE9gmLBmE1HgLQKoMM+ZRuvxXOtGCA8Av67Yn8Twl+7kWl2WAcZJ+4r2jvz" - b"I3k8c2o65InOaUlneJb8WtHa3r6LPMhi7FTGTHPHCgVmnabOaIB7+tLppFeRFJhagrwO1dq7" - b"dA+7mQEn5jC0GueGJAKTRLTpZFNEXCFGGs4OhQff8WJuR3pVuqBfQYCXQC0ErbGdiaQiryQA" - b"d7OKn3q0oKPTWqMG58HGMP1zEEiYJ53POYQXgm86SYRGcH4to/OgQ1SP7A7awi587WjpCDMy" - b"IHfYFi0vp1a1R45QwSttrXAzqo3CT0PqxLhItV29hLiRk+cvtqFvfExa7/NattzaPIERvU2h" - b"Zp08Da9LSXfww7rdjxo9G/7GqGSEBFVDOlHFJ+MXrBZXGokerZ86iONCFlH1DBOpWLSpiqbC" - b"HGfpyxozFp00UU5V83FFCy0BiYaSfRp1U//0ZNT5paZTftKPeqer7o1DcWPswIpVuk55SaPT" - b"XVoluYsWtK3qpDhX8SNOq64Nh7exvqNb9B4WNvppuGvLOPRM0+7irTphnujIyoobd4bqCWjC" - b"ULjz1Lpnac53DDnlOvFs02nFJpuJA6+4YcKNY3GDFBc7tcStk3Adfai957+fnDn7d5PLSFAt" - b"41JQZQZpx6Yt6XzNCjca5KvPals06Ngh+cpr9GGgjrN2VmtF7+crYR2diQtCZt/jeBgyalcH" - b"DnV6EQ2vhkNDItbmnDotTmrvUyCt7FWtb6EOneCP2rW957B+OfJ6zfFr4nru4pm6DkreyVct" - b"GRyV9ACCABWdjt67j0xPoIYTSKpjLExXe9nyQyj7rK3Vp/TH0S4R5nfoxANWpi/tjwCizBCw" - b"IGREAD3tVir2kLcdraHM3SZpZFBiXsfPr/YsZQeMgjb0tJU7qYfn8Ex6nfCFUOqUls5jYYDM" - b"wRSFZ5cPnMSBa9vsIMaTFpKogbFq0BaZ7LdAMCP1/Sl+nyGLc2cB/ojX7MlEA2vSW6d94+qR" - b"rsqkby8ddcRLNL/AFfJcF77J6vRFj3qSg6bLkIoP2KzQhcZ/l5XfJwXjp+OAdMN2slB7az9V" - b"4J7AGcxjrwHQwidSg2nuZWfEeeuk455Bxz9n1AJuw4p2Lb/ozIO6oZW7vrvxC0DLiH33e57I" - b"U9UpgTGrZq0e8KUxMWAOj8AkoNNi2v+Uox9S5HDZ4KEKZQGkjHFo1xIGWX616mmm6LNWDAoN" - b"seEF27X0gp/TQwTDbUd1YptaPAZyhYA6iH96VMOV0PQcA9BPb2m5USvgyJClXag2aTOSC/1e" - b"ciY9HRoiLKZUiCKLR4Ynwh5uSJu+zAWvF3zXAyFuA/A6ClSk5HQE2etwqtO51mzlwyp05JvW" - b"mZpWvbrWqFPW4VWoSadCQp3a+OLLU0+mrIoDt/AB5QIFRhyptq8Z0DJHy9gAQSIKiQlri8Cf" - b"gNGLYeiRCp1T2jWhpTKX3qSyknZYFjRfEL0FJmElU7bW2oOjI4b3xSMcmtOmiNYuxkJqeDVm" - b"PbCd4qFnhshcwnmOqL2jtoHpnQz1ot24kgFpPSk2tDKns8wQ1t8nvktcYToRo7SmkK6rqBPO" - b"MHpYqNl7lJoJDx+WMu82cpGW8nYD/DvUA5tVyC0fj1TYwQztioC30etsFaxDfJL2B7owMotx" - b"UtSSxnHhdxRgLgfsXsgKqDGRW8SLkMe1A2WqkyhqwKlzR6Iu5JmnMgOZXVWuPe8UwEEzAxq7" - b"tK1ZrbPucRQ9fIOA6XAw8pDKCkzjPv04IP7WA/mL3kEwSDBatSZfDExGWBdaB1bvFUsvRKF4" - b"tYZR0Iwr6+G5CEq7o303d/SAK9xZuUrVgqtTpZkaumQEIjbBVj03Lfegnqhbyhesocxn06E7" - b"5JKeghq7oIqqzofBYiQedeYLBFkoNgfIQ+YHfaROFklsFBq3XAxqURe1AfzAD/PSarFPLVCH" - b"h8oHmSA/hNbSs0RFR+XDCi5k7SynrG3awYW12cu3VeEIgZLtAumCtnC0wLUWEstLvw/DH61q" - b"uS95Lcgl8BjZAWJxF8oCLgUj4OKuA4vz0WdSkwwWHeeZPmM+en5NAxi1cRU9DBW1HqTDSlWr" - b"Kkj1JASSe/oFpD/rzAsYiRphKJAysA3szIQEp/RhHh0Ur1qrRQ9NLAPY0ug82KMjhvNIdkVt" - b"BUJezSCkXFoW4kfy80GyQeXTA1q5K4ieA84lN8VaTL0Wq0M1RBW9AYhcu6AeMWD4CFflOKtj" - b"IkUbCUEPRKzNYHzIeoSQ+O3nWABoOwvITrPp+CfA0IYGZZpoKRcdmGSIlBycFPkwuYbZ7w7U" - b"CUJdLS7iD9LWAwIjbdJBGzbySfT6MAwb5IrkSn8koQMXvGe8m6esaU85ngsc2jaQpE3or6nj" - b"iiVqgVKR0spo1RruQIQUqNeDLjM6W6qeENMPz59Tj1G4cx3fc8jBQog3JAwO92B0HBVCoM2g" - b"zoDWhGAIpa/3aIsOy4Ixl0mSYgAeaIVWqv8kh2/SYCXWjEyDBfv1jCstEAJ6IWM3SqZYCDPO" - b"2EMIPrRddQyukMCuRxlq03HRUYcnQjAtkAjsuNFrkp4G0bQK6VoRPfOHZzA6w0odJqhuo6QS" - b"edMhPx0qkIyDlXMyRefxIjCpBw8X8LO8Hi3U6VmqSkfIQFzXtAvR5j39F7XUCdrqORX6KyQy" - b"lZE13UZ7woKLUD4ElKjDx0D2LNqBQG10mTLUo/SQBf+0d1dpX9CHxmXog8yYHTR4CAAp6JaF" - b"Dm+atCVU6dYQKD5tmSStpWu/qw27sBV6kifjEkaEBmkho3OBm7+A0k07bnNtvEFneAQOMsmK" - b"eLNhZD2KrF2ixOD8fiz91lrsVOmZ58ki6EOHJZZWmiEKHcPFBx9PamADBkYh6jw0jO1PP3h8" - b"3siUIrlJhbt1A0NZxadAoTrk5QfIqRM4ixgoRoDqpJRyFSrxCYy+HnWc9+hZYOBdqqiZpDM9" - b"djptmlovqdTtEG8TAQQcbq5hF/oOXIVw5hL4PhUL8SdqKWyIFDuxiREWvcpmAkw0LEoJJPOt" - b"uaTTOTlok71R5EMr3lVjA5effZT3cLWzzLNyfeP1PB2GTYep8JCn6HkZSCTpMOmZOvURZIWG" - b"1RPfGe3Az74dPf/kTdOTGjF74ScWWOdctPmsh6iK07NX3F/IuBNFjN2bmcs4HW9IwuFMFHpd" - b"a5sxdMIS6hhoB4QhPKZnS4PO4On4ycGdUcV1V0Zb3/81AeqWGtcOK3ULO+lpMXp46IwD8cen" - b"t2cVQLtE/h4x9FVnjekaMBt5ikCa5f6jCgCo0ykDraNjRfGzOiLqlp4CaLA2bDeHHqTFmRec" - b"/9S+KWoGeJSwHrYydiuBjaQ42pos8r8wLRadqoLd6QOvg8fUd12oZIfVTbY7ZBcthcqozGjq" - b"edys/b5xNwhPpFegQYBNZ22P3tG6Xv2UPSDdFrpteQRT2NbLYeoUADh2oTdW+fgIlvQMsGlf" - b"Lx0YHvqgCQtDTzo3oBPryPiEC4bkLL0CXmizS+c0Jq6P6+o01pAEE0IiMIrks56hYgZQrOs6" - b"CYXy6R4co5+oK0T1AWemnoq7hdMROC7rLKL+VYJq7rbS7AJNGjdnUTQ1dvfnhNhO9v9os1Gr" - b"HPdhwZKWGizs5lsvz059NiN0KWY9kqWTR7j6o8erQF3taabcr4ZjTPeoJ4Pp4TQEO1xRtGUo" - b"fAK9usHGbOxy1kPLOeiomzjaa/ux6SEB/eMMOqOr49CArU4JTh1p0iqFdaGTHizcCAa16Vaf" - b"+P7g9A9PCAC61n1Qq5AdIgr8jEPPfOQN42u5B9qJ2kHUpmPIegTARwMwIC5D0JqoBcog5IJ0" - b"KwUdO1pQQPkx339vADhZ6Oi497NakjFDGBwdctsmPUuuKL6mPemD8snP+RCbnsdPyR4t5HTC" - b"TSslspWEBrhABI0EKPIKLbLQhXhw4uGyFFDwReuEWiCVg9Oe79ARNAJhVcrCTMgm6MkUHU9r" - b"fDwBvuY+SNrRnToWStxUjV1GDcSZoCQJoOBQ0qhyrdVUHYgl8N5XbbfSVjOK/E3SMi4O8/Vk" - b"rLZ4dy0b/CgBPta5FEGADt3rREMAV7IOTiKegTBSA/h4D4vMTskk0dH9pyP0PHtTtnCGOhIz" - b"h9QnfcOdARQRPG1d9e9maNNXWgKPt5ZFaLmklTRyrRVRPpe4sdPGKBox6qAOKqVNYfcm/xRz" - b"FNDoqdscuwyYFjac0bFlVDAiZnftQJN7nSEkZz7ijh5ZQtq1IoHp0VIlNhGRSA0RNwu1K46w" - b"iKfoir/GQU8V6DxpGa1bnQNG6DbyQ9fpmEzTU5t69plAkkjGJUEy7/nQZppO7lkdHfJ4caZz" - b"tg4LMP6BzY3RAYrICj8l3ebxMpArYH2QIXnqhIFvMNw0UWd29NgndrIVLWYw1yMq8Vr0Hmgz" - b"FKqOhQ4d08iDDuLlMRSrpBXDux4dtd9/f5SDXeCX+S/ja7cOrrIs6AAAAAZiS0dEAP8A/wD/" - b"oL2nkwAAAAlwSFlzAAAuIwAALiMBeKU/dgAAAAd0SU1FB+IMBxI4KPL3po4AAAAZdEVYdENv" - b"bW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAgAElEQVR42u2deXyU1fX/3/eZNZN9Dwmy" - b"I5sgCgiICFp3Batt3aptbUG7WAW7WGutbW1ta6vC11o3Wq1at7qCreIKssoqyCprAgnZt8lk" - b"1uc5vz9mkkySWZNgtb8cXnkx88zz3Ofec88993POPfdcJSL0Uz/9r5LWz4J+6hfwfuqnLyiZ" - b"+1nQT59nuv5Hv6C+2aUMETuQCdiBVqDRpCn/CQV58n93/xylVMTnVT8G76fPI+3cvZfb73vY" - b"JDAU+BpwEVASUso+4BDwGrAURfnSxx4wIgl5v4D30+eOvv2jO6lpcjpA5oO6BRgAlAI7gDqQ" - b"QlATQ//vA34PvHzl+bN8137tsn6I0k+fX1q9fiM1Tc5U4E5QPwB2Aj8HeQdUC2CA0kCygMuB" - b"m0AeBoqeX77ioZIBhb6zzji9X4P30+eT5s67xSSom4DfAu8BNwNOwAICKEB8SqlmUIjIaOAR" - b"4CTgek1TS19/7IF2oe73ovTT54a+d/uvEdQQYEFIc98EuIHnBHkbCP2ppSL8RMRwmE3artB9" - b"DcBdumEULn9/Jf0C3k+fO6qobVAgVwMFwP2apsoFSQdmKFRqEIdLKeBogzC6IRqKncBfgJEK" - b"ddZDz72q+gW8nz53ZAg2UBcDh4F3X3v0flG0u0aWgroK1JXA1SEvytki4rjmwrN1Qd4CmoHZ" - b"ImKOa2Ret+DnNLa0moEiYDLIcMAGCkFQqF40pQ1Ldf4eXm60z31DbRCtt23p3I54de56re/a" - b"1dGeZOsZv5x23Bv8pFT7bcFyYr0XA6gENgP7TJrmffyeOyQ/LzdaPXNBFQLrAVcXt186MDD0" - b"sjOBIkG2KfBdfflcnn3z/SMI1cDYkFz7owr4pTcsVIYhg4HvBqcMVQjKBKKCzVEJCG0sUhG/" - b"h5cb7XPvxKB7h/SubNXlW+xyVbf7e6MUelNrFbM9HXwKr2XoKenea/EUM+ACVuqGsfjbP7t7" - b"1ZwzpwZu+MbVkd5vD8qkNIIyuupcgv5wBdhB9it4MC3F7gv97ia4AJQRXqluAn7p/IXKEGM8" - b"qL8Bp4AypaXYyUhNwWwy9c+j/ZQ45DCE5tZWk7PVnSXCpSDTgF8t+/Cjv82/7ip/hIUZd1Dz" - b"qlxBusLn7aG/iwETqHuUYuNzD/6xbfw7QFJBNUhwUHUX8Hk/vQtDjIGgHgMmZaSmqIvOnM6p" - b"48eRmZGO6Ysm4KrLzBvv+v8Kqf9i28LebYiB09nC1h27eeOD1TS2uAqBe4DaS2+49eWljz8g" - b"XZ6tR6gAJipUumEY3rBfVxL0h58D6gngRhGWA3W3/uoPAENC8Ga1QukRBbyqockE6ofAlMw0" - b"h/rBtV9jysTxmM3960H91DMaUJDPsCGDGDlsMH99+kWq6puygZ+JyJpf3rv42G9+egsdHg/l" - b"NZDXgbuBSy777o/+EV6WppRuwDsIi4FfAt+eO3/BfSFEdQmQBqwwaVogMkQRBgFfUwrtvBmn" - b"MenkkzCbzXi8Xiqra2ltdfX3WD8lTGazhYL8PDLT0zh53BiuvPg8Hnr2ZXRdnyAwa/v+wy+E" - b"zzXDigtkf3nVi8B3gAWGIauBAIgHlBvgpKGD9B0Hy54AuQSYK6L+DjIMuAmldiKseO2x+6Wb" - b"gF97y+0A44CCFKuVU8ePxWqx4PX6eO7VN3hr9QY8Pl8fT319Zzgd3zI/e+p7z1Efw7wEWqBp" - b"GmOHDeZ7113JwOIippwygWEr1rDvSIVFwUWG8GJ4yQ/8+nbmzl9wVIQ/Aw8ADwE/AfV9YIvN" - b"Ypbf//xWLp2/sNoQFgCFwImgHgLMCHeZNK2u0yBr++Bs9SiC0Vo2q8VMXm7QlVNWXsHbazbS" - b"6vEeJ+GT4yCoRpRn+1L4o7UluffGEmQJtaO79yeRdnS/p+NdSfChFwrN0A0+2X+ITds+obio" - b"AIfdzvBBJew7UgEwOlLhSx9fZMyZv+AZhCKQ20A9DywGcPt8lrnzFwZExBLymIwFbhIkRaF+" - b"Drz303nXSEQBl2CLrUFXp8ISwt0ul4uArvexBaKSUB29d98lV2Zv6hdNAFUCLjuJyiOVsBoN" - b"LyOWm1L1EQ8S4KYIdY3NGCIopbBZLW3lW6I9M3nUcO/GPfvvU6jDwB0gfwbVAKpSRBpA8kAV" - b"gWSA2qvgThTvLHt8UaBrWVryWivZoS1JCplE+C4xJnLpof6VGMLRV/N6ss90dX+oKPdEc5Oo" - b"Pqm/RORP7Luj81gRHtAX/Bi7jnf9+If8+PqrPErxLHAhsBBYDViAkcEXytugvgtcbNK0t+78" - b"7rcCEe2A5ARWJTnCJUm2qiidKnH1X7L4VUVZbEpMO0bSdL0dIBJXQDu3S/WxBu54RiXVDpUE" - b"jyHc9R1LOmbPmM7sGdPll/cuKv143+G/ichToMyhFxpAQCkV6OZqjCbg0ucaqm38xl6uVgrM" - b"KogxDRF0UWF1idXp0TtRdRuIsbC/SlAw4g1uFWX2SYxfiYikShhaJCL8sWBUooMsUUUQkawI" - b"JXPmLWgBnKecODQQ7jJso9/8dEFbob7QX3KenET0ZHJQREXojnDtoDApKLTqTMpwMtTRTKrZ" - b"g0np+MVCky+FvS2ZrG9KpdUIFyuJIbixDKp4eDlZg1LFgRDJCEJfhAxEq1u8GbVnM4CKONBj" - b"18Hv94OApikcKSltl0cQjPeuBjZv/fTg03PmLfh4+vhRgZ/f8r2+c1V2bnosLwC9GLUd1x2a" - b"cEl+PTPzd5FlPoimWlHooTI0BDOTsgbTEpjFRmdKFAGIzMxwoeqZuPSdh0UloI+TF2CJOah6" - b"175kBkpXYzj2/fvLjuL1+Uh1pDBpwjg+3LiVitp6KzBShJHAdFDXAPev+2Tvg3f+cVHL3bct" - b"6FsB7533IbEoNqsSrhpQyaz8D7GoyojuPUUAXczU+c1Jd5xK0GPTXbvGAwiqFwNFkoBBvSk3" - b"eSNbRXVzCj3H+N1/K62oYufeT5kycQIjhw3hjpvms3Pffhoamjh0pJxdB0u1ppbWPIKrk5kf" - b"7zv0KxHxRNsp30OIojAwuldb+s6dND3TxRl5GzsJtyFptBoDcQbyMWl+MkzHcAayqPabkyo/" - b"coepKEaU6oWASK+0ZmJPJws7VJKiTZwBHo8/yUE/rz/Av954m4K8PAYPLOaEkgGcUDIAEcHr" - b"9bH/cCnPvPIGuw6W2QW+D2rjpTfe+srSxx6QPhPw5IyYRA2Jjt/tmnB67jHsWmn7tYAUsqbu" - b"TJZVF+L0B0Pbsy0G+dYALbrqErYZGwqpuIsusYRf9ULggr+ZNI2BBbnYbdaYJQUCOrVNzThb" - b"3RiGRBmcQR4rpTFqcAk+v59DFVVBX3I3d2BiuLs4P5ecjHT2HD5CQDei8kIBFouZgQV5DMjP" - b"wWGzIQhOl5uKmjqO1Tb0aF1kb1k59z32D6685HxGDR9KaqoDi9mM3W5j3KiR3Hjt17j3kSc5" - b"Wl2bDuomMWS5iLT0Vov3IopKJTAIOu7JMRsMSS2lI5JRUdY6jmcrinDqHe74Zl2j1GOO68qL" - b"H2yvEsCvidoS8TcHTBw1jO9/82pS7PaYA03EoNXtpbS8nNUfbWbjzr243N6I9T9x0AAWzvsG" - b"uqFz78NPcPhYdQLau3ub87MyuPU711KYn8cDS55iy+79EVufmergzMkTOHPaaQwozMdiMbcn" - b"1DEMwefzcaTiGCvWbuCj7btpbm1N2MMlAoePVXP/E89SkpdDZnoq2ZkZXHDWTMaMHM7ggSXM" - b"PedMHn7uVQyRycAon8+32Waz9ZWAJ7KIk4ivJbJmGeTw4dDKw95g4hNnMS3twp3cVKv6DBd3" - b"1c4SZ4bqalgFv+dlZZCXk01dQyOlR8qJlq3AZrNRmJ/HpPHjmDBmNFs/2cmSF16jprG5u8Cl" - b"pZGZkU6K3c6Fs2fwyPOvdSlXxR2YSsHpp5zE0MEnYDaZKMrLA7oL+MCCXOZfdTknjR6JP6Bz" - b"4HApZeXHcLvdaJpGRno6QweVMGrEME4cPpQz9x3gyX8t5UB5ZVIQyh/QOVxZA5U1IXxeyZ0L" - b"vkd+Tjajhw8jKy2VemeLDZjo9nj7UsD73uAya6CFbh/mcKGCu4hC5mQ6xzx2LKaOcg2BgBH9" - b"rVZNKLDoZFt0TMrAKyZqfWbq/ApdouNBkxKKrTo5luBiV53fzDGfGV2ia2uL1mVRQsBvxML1" - b"QSorr+CBvz+Lx++PyClNU6RYbcyYNJ5LzpnN1EkTUQoWP/kCrijxPpqmmDRhHINXrImgxWP3" - b"SardzqzTT8NqsWAYRsRbU+1Wvv21S5kwbjQHS8t47rX/sPNAKV5/AMMwUApMmobdamHq+LFc" - b"cs4sxo06kfNnnc4jQY0bww8fe6Yvq6ylvr6e/JxsUlJSSE2x0+B0aSB5eh+EiERxE0qU+iWu" - b"ZR2acMMJpZQ46gEh01KPptztpWu4+GrxNuYU2duvlbfm8nDZILzSGRMOtAWYmtXMKVlHyLHU" - b"YtHcgIFgxqunccRdzKq6YrY6U3Ab3bXaeblOLinagk1zAgqvkcrWxlH861gRTbrWrX1jHT6u" - b"HvgpdlPHukKlN4eHSwfTqsdeHBERvIEAPn8gKpxxe/28sXIdpeWV3PKd65h40lgmjzuRlZs/" - b"iSq4ebk5zJw8kbI33gkTqPgK6MzJExg8sCRmX51x6gQmjBtNdW0df3nyeQ5VVHWDFwHdoMXt" - b"4b0NW/lk3wEmjh7JwSPlXeqSvPFtiAQHHsH9nh2YW/WJz7aTF0V65S7sLPxZZp0hqRUU2DZ1" - b"G0LBknzkWTd2eqbacwnhCtyihC/lOjkvfzcFth1oytUNIqWaIMe6jRPTB7Ol4VT+WVFMY0Br" - b"L1dTMCSlmWzLJ+3432GCWXlHEDmHf1QMICAdECXDZPDlAYcZlrqqfcZx60N5t3oEbl0liP+j" - b"QZ9woRF2HjjMlu07OG/2GUwcN5rVW3eiG92nsFa3B5vVwsxpU1i++iOqG5oS6twMRwpnTp2C" - b"UopWtwe7zdpt4cykaUwcNxqL2czKtRs4fKwqhocq+HR1QzNvr9t8XDxPKuG1l8RISwyDS1JV" - b"A8g0GaSanXEGi9Y+pQkWjnnT0EP3WzXhiqI6rih5nyL7R2iqhY7d93YMUsOqb5CiHWJ6zrtc" - b"V1KOQ+sQEpsScq2ubnU0qQYm5+xmmN0fdg0uzG9gdPoGFD5A0CWbtfWTea8+o4sejhf2q+J+" - b"1w2hrLwCXTcYUJCPpkUus6GhkQOHy8jPzeZL0yeTqGfh5FHDGT5kENU1dVTX1nZRMMEyHDYr" - b"uTlZ+PwBDpYdJdLkkNjSfKzrPVk87Bsydzcgu4w2iedzjjw63aKx2zkGkxqFw+xlpGMdmmpq" - b"H1e1vskcdQ9oL94Qxc7mDAwBTQkX5zVyTsEqbFpZe5keYyh7nWPZ0ZxHQDTGpDcwPmM7KaZD" - b"gKCpJk7N2sC+lnNZXpeBhCKqd7fkU+O/jBGplRTbN7Rr5gzzPmbljWXfkQEIwoRUL7PztmFW" - b"daGWWdnTchqvVBYSkEj6KBF/dWztpYdchbGEVjd0Vq3fxKCBxUybNJHlqz+ivrklZr/YrRbO" - b"mzUDi8XC+s0fM+7E4VHxvUnTkDCo0DfetORnteMs4Ik0om2JQHWbtro25LDHzAOHBgEwOd3N" - b"TcO3odEUEmYHmxqG8UxFYaemt4VojnH4OLfgY2zakfbfnYFxvFJxGu/Xp+MPQYr36jO4OC+T" - b"y4q9WEMeGpt2lDPySlnZcBJuQ+E14JWqHCCHYSmFLBjmIde6OdQqLyelH6TYlo9L17h0wAEy" - b"Lbva21ztnciL5UNpCGhRNFrv4tqVUpxQXIhm0qioqmn3i0d6dsuuvcyqqGTwCSXMOHU8y1as" - b"i2roBt2WwxkxbDDVdXW8vfqjdgHvWhu310+z04XVauGEAUVs3PVpu6dGkvZWxQtuixb+29uB" - b"kxBESaTgjlGXaLCsAIV2LybVFOZBsXPUk4oRQsVGWKkWJZxfUEGWZWf71YDk8n7NRN4NE25B" - b"CAgsr8vksHtsp/cW2w8wwuFrv6+tHoc9Zj5uHB6CN0HKth5mcoaTuQU1DEvdAgQt9xb9RF6p" - b"mMB+tzWJzk3idwXDSgo5Zfw4vF4vmz9pw9/ShXtBcrk9vPPhGhDhrNOnkpXmaF+T7GrEWswm" - b"Zk+fgt1mY+OWbVTVN0atpS8QYOen+zEMg7POmMqQAYXtgqd6rM17EdzWx7v0EsTgyRoLnY2x" - b"4pRWNNwdU644OOSxR3xytMPLmLTd7YIGUO45ieW1ORFdgV5DsaO5CMHSsRKnmhmR0hpcDQyb" - b"vnWBNQ25uAKDOqYwVccFRZuZlb8Bs6pHAQEpYEXNJNY1pXY1DRPEmRIFkwtKQVZaKjNOHstN" - b"37yagrxcNn38CZt37YsjJMJH23ZRerSCQSXFTDlpdNSZZMzQQUwcN4ampmbeXbsxLvR4b90m" - b"Pj1wiIEDBnDrvOs4a8rJ5GdloGk9y+wnvYEe0svnY0OUaNFhEmEAqATEPAhmimydFzFcRh61" - b"Xq3bOzRgQkYzKebKTv7yLQ0n0BSInEVKgGq3DRELSvlD6cX8ZFq9dA9HFfa5LexyjuK07E/b" - b"oxgzzTvD3ufgk6apLK3OC+HuSLhRRRFqKC4q5HvXfCXiQo9JM5Ge6iAnK5OiwnxE4IPV63n6" - b"9Tdxe31x1Vm9s4V1m7Yy5LISzp4xjdVbd3R7zmo2c96Z07HbbaxYt4HSyuq4/dTgdPHYP1/i" - b"+isuZdyokXz/W9dQXVNHTV09VTW1VFTXUF5ZzZHKGlpa3Xh8vnbbIflFuPiy05ebrc1dRVhF" - b"5bGKsyoYueJ2E+RZazoNkDpPTghqdBYWm2Yw1NGARocB5daL2NfiCOniaNGBnTdyKXTMSo/I" - b"Ol1gTV0B4zOG4jDt7zahHfVM4rmKQbToKgFvSOf6K6XIz80hIz091Fzpor0VFou5PUPY7n0H" - b"2LhtB06XOzHlJvD++s3MnjGVEcMGM3X8aFZs2t7pnqHFBYwfM4qmZicr1m/CMCQhcTlYUcWf" - b"Hn+as6dOYuqpEyjMz2PsqJFMGDcapRSGbuD2eqmqqWHX3v18sH4ThyqqiO6Sl15AleOgwXse" - b"RR3b4Cq2+rFrLZ3Qe40vI8z3HDYYlJBvr+/UQLeeSZnPFkWDBj86LAYoIwy9WvAa0bHzIY+V" - b"Rn8+DtP+TgjWGTiRl4+O4ajXlGDaBtXNt713/0FeWPoWuq6HTbUhASe46bZkQCHTTjmZEUMH" - b"c9P1X+flfy9n2Yp1EYKYund0XXMLH67byJWXXsSsaZP56JPduL3+do/IuTOnk5mRzqp1G9kf" - b"3L2eMDW73Lz2/mreWbuR/OwMstLTyM/NYWBRAcVFhQwozKe4sIBhg07gtFNP5umXXmfNx7tI" - b"7BAF6QJdY22kPg4a/HhRkdUfWnls91hT43WElsk7N9xqgnRzZaeGugIpoYWbyFpBAYXW1pDf" - b"us3laKbRF3nTtkkJs3OayLOWdWNvq57BIY81yWmyIzMugMfrZffhI3h9/qhPbN69n+WrN3DR" - b"mdP46iXn89VLLqCqpo6123cnoMWFVZs+5uwzpjHmxBGMHjKIrXsPADCsuJBJE8bR0uLiPx+s" - b"ihA1GM/lG4KQHi+uYzVwrAY4FFpTVJhNGmOGDuLis89gyiknc/0Vl9PQ5GTnwbLkvEdJRXL2" - b"mZGpYswWPa9Egc2LWbnaBUmXTGq81i7aLbQoY1KYCHRqfIukh02D3ethAgalNnUSVV3SKPWk" - b"RGT5tAw35xdsbHcrhlOOtZTTMlviCnckIyiZxRABPD4/Sz9YwwdrPyLVkcL5Z52BxZxY7seK" - b"2nrWbtyK3WbjorODz2maYsbkiWRlZrJt1+4EgqAi1Vsi11eCA8sfCLB93yH+8vS/2LztE3Jz" - b"szl/1umd6t13BmKfr2Qeh8IV5Fk9mFRD+zW/kUqdzxIVS3dnbmxhy7PolNiOdHqu0T+Aw+7u" - b"GnyY3c9XireTZv60vXuFjmg1i6rizPwDZJqNXhpBiaTKEAK6wYp1m3B7vIwcOpis9LSYg6IT" - b"Fl+3kZq6BsaMHMG4YYMoyMpk5tTJeLxeVqzdiM/vT9CJGwtuRv7d2ephxbqNeL1eRg4bQlqK" - b"LQHe9Cb6s88FXPXJe2zKIN/m7MQor55KlT8yfPAGBB/pnTohVXOhqei1nJbZRKq5KuwJK7ud" - b"J+AyOj+Ua9G5euABCu1baMt8VeebyC7n2QgdeH2AbTezcpqSCtztTeeUV9fh9XqxmC3k52Ql" - b"qGKE8pp6tmzfQWqqg1nTp3D+zGnk5mSzY8+nfPzpQRIPbZYYGjz66uzRyho8Hi/ZmZnYzBY+" - b"r6TF1drSE40evN+qIMfW1ImhTj2LhoAp4v0eQ1HnHdDpepalnoG2iDldyLfoTMstxaxqw3D0" - b"EDY25HbymVs04fKiKkalbWxfpvcag3iz6mSWHhtMS2BEJ7/4tOxSss16ki2WJDRl+KKMGaUF" - b"MbyuG+33x06Wr9ANg+Wr1uN0tjDt1InMnDYFj8fL+6vX4w/oceoVL0tAfDefUgqUwhCjT/3W" - b"x03AJaaCUlEYJjG1WrrZIMPc0Ol6jS8TX5Ql6VZD40BLPkIHfs4wlzEruw6L6vxMptngqpKj" - b"DLRvDQM3dnY0j2VHq60TTLowt4nTcz7CpOpDRmgG6+um8G59BntarexrGY6029tCScpOZmQ7" - b"o4AoSRK2xN51Pm7EEBwpKXg8Pqpq60lmO1rpsWrWb/4YhyOFgrwcDhwu4+NPD3Tjq8SZYRx2" - b"KzaLOUGYGnx2SEkRKXYb9Q2NeP2BJKHQ8XEJxnUTJhYzGH1PZleLvMgWwK5Vd3q63J0e9T0B" - b"gfUNeUzOHkK6eXfI69HIrIKPsJqmsLo+lxbDxFC7h1l5RxmVtglNOdvHarlnEq8cK8FvdDg9" - b"T0lzc0Hh1vagLcHEYfdkXqsuwhe6792aEsZkDCJFO9iuxc8r2I5fJlLnt6LEYEOzg77c1Q6Q" - b"k57KBbNnYLVY2bJ9Jy1uT1KdrxsGb69ax6gRw7DbbLz61rvtLsPw/opVy5yMNL739a/i9wd4" - b"4Y3llFXVxE2vlpORxjkzp2O1WNm1d39YvXuS1kJFabH0rYDHHmBdt3FFDuvsysoh9i7uO9I4" - b"0uogVoKcXa02VtdN5JyCOiwqODhStEPMzqtiRm4eARzYVC1m1QjtHheNWu8pvHh0HEe9HU0a" - b"aAtwRcnuUFxLkJr843ix/ESqfB0waW+rlT3N45iYdbQ9TDbXuo2vDzyEYGFH81Q2NA9Pwg3W" - b"Fh0YeRCYNMW44UO49NzZjB87msbmZpavXBPygyeXOXZ/eSW/vP+vaJpGY0tr0haDxWSiMD+X" - b"wQNLGDywmLdWrGLFho9pcXuCs3Wo25UCTSnGDhvM5Rd+iZNGn0h5ZSVvrlwT5o5MPrlp56gX" - b"6XONnmQ0YXK/F9lbUKpDwD16AbW+2K/UBV6pyifVNJOpORuwaUcJhsK2YlNl2Lpp/VyOuk/i" - b"hfLRbG+xt7Mn3WRwdUkpA1M20hbX4jNKeKf6ZHa4OpfiNhRvVZcwxDGWbOu2EJMNTKoRwUKN" - b"NzWuD7kNuhUV5HP9V+cgRncviFKQ5nBQXJhPUUE+jpQUGpqaeHHpmyHDMBomjtHtAk1xVkJj" - b"gcrqxmYefeZFrrt8DiOHDeGbV1zGRWfP4tODhzlWVY3L7UYpRV52FsOHDGLwCQNxpNgpKz/G" - b"Ey+8wqGK6iSFuovxn5lORkZG0C7y+nB7fKEHVFNPY2F6IODheK57LHikxQKbJuRaW1Bhfm2X" - b"noVTN8XBroJLVzxRXsIh1znMyCtjYMp+LKopZCAKgoWAZFDlHcqWhkG8X59Frd/UqaZn5TQz" - b"PO0gXqM41KkaHzeO583a7NA2q87v3eGy8Xz5ZL5cnEK+dR8aXgSFX7I51JoWF641tbhwulzk" - b"5eRw9oxpMTtb1w0aGptYv3kr76/dyK6DZRjSPae52+vF6/PR4mol0GmzanKaUgFNzhZ8fj9N" - b"XeLIRQx2HjzC7x9+ktmnTeS0U05myAklzJw6GaVC2WBVsAyfP0BlTQ3vrNzJu2s2UF5TH3Wx" - b"KKoUKUWKzYLdYiUrI43Lzj+LgrwcDBEOlR2hwemC4BGAO+293HDcRcATQ+EqQsquSI1LNwnp" - b"FhdhB17R4k8Li/GIPZC8huLt+gxWN47lhJQTGZriJkfzoIAGsVPaaqfUY8FlKIwucS0CrGrM" - b"YLvrrE7+9FqfhsdQUcVhdaOD3a7JjEsbR77FTQCNUncqO1usMbB38PPm3fv5zaJHsFmtEZMg" - b"tzvgRGhuaaXR6aTV4405ve8+fISHn3qOhiYnTreb5NJgdIaBT7y0jGEfbWbzrr0R72tytbJ0" - b"xVreXruRnIx0hpYMICc7E7vNhmEYNDY5KTtWxbHaOlweb6fY9URz0mSlObhg5jQmTRhHbk42" - b"KXY7jhQ7mqZRVVPLsvc+bNuytxv4xG7vUwFPBvvEH6055gBp5qawDjbR6HfQYiQ+7QjgMjT2" - b"uCzscVnpcgRizDo1+DUa/FqCE3fHwKj1a6xsSAVS4+LHcPIHAnxaWh7h3mRzs4TBr4DO+u17" - b"kuJ7tAxf5TV1lNfUxX5SFG6vn/Ka+nbtnJhfvGubu9sfBTmZ/OC6Kxg/ZlT74QoAAV3nWGUV" - b"z7y0lH1lFQAe4DEUTX2aui0+2ySqZ7bz0RhB3+NJ6S2kmY60N9uQVMrcWRHhQeLwiNDW6OOV" - b"pF7FHAyR3x8rr3l0TB1fKHumZHp+OnRvU4VEzyRmNpm48qJzOXns6KAx3OzkSHkFzhYXpUfL" - b"WbN5O2WVNUjQWHoZeP7qC84y+qCTExBwFd/ZZFGKU9LdeAwNQxQjHC7OLfwYTTWHGXJFbG3O" - b"oPtpuonkok4+/x69yj/YvazoAqPizBCJxc33leuxrRzV472S8dsQPw9kZxqQm8XUU0/GZDJx" - b"tKKSh558lgPllei6gV/X26IR3cDzwO3Z6Y6ma75y6WfpRYnGhOC1dJPBNQO3kW4OLlRYtEYs" - b"qibsrhQ+aRrHobD4kI59nYnkoiiYegoAABIqSURBVI6E9aNN/T3N05F8x/UWxsWfBXozO/Xm" - b"aPWO691n7kT7oeP3McOHkOpIQTcM1m/eys5DZUhwP3gz0AryKaiHgf+MGVzScu+dP/kM3YQS" - b"a4QHr+VaAmRaqrFrhyJEN1g54j6NpVUD2vdTRjdOeiJAiR/4FE9LqoQPi+rrEM/EdsAkks0g" - b"+QGc6OwSz+0XPSQgJSUluKyvGzQ2O9s09iFQ3wGqQJWZTVrrpbNP51tXf/X4+cGTn4ZDvkyb" - b"gaa8BBPYdwi2Sx/CPucIXjw2uD2hZu+mzJ5Mq8mmBk70ncmUkcyRg5EFSGJGKHaHUZHXFFUf" - b"8T/RI1xUlO5RAE6lWLX08UUGx5HMcZuv4muF3S1Wniy9kMEpLaQpHz40KnzpHHLZOeSxhqVT" - b"661Gi6Q54ifYScynn0gnJzpQJIF3JCdAyWJq1YsBnExWdj7DzQufiZuw2yFSKJoDihUNaaiG" - b"tCRKi4/dIqdL7o3WjYclYw2cZDq0Q/hVHxm5sQ1XlUB7eqpYpAdepxh3fcZjoGvmSR0QESGg" - b"B1cgrTYbmop+WJJ0CY8Rum9ckLj77uIzT8WIgekbYy8elkw8v7j0MLw48rmfXfnUFyecSRLa" - b"X0HEgZM4ZaSntjsVwjLG6p+FtLcLuMVsFkGqgIDX76eqOhhjPaikmImjh2OKEheQyA6OnuW2" - b"iyVs0XBosuWHD8BYnoxoh69KDE2qkqhPJI3fk6CjRAdDfHgkccJlEwmMUkoF94mOH4fJpOHz" - b"+SnrSP9c+plClL//8S6uvfUXe4B6j88/4KMt2xg1YihpqQ5uvPZKZu8/SIvLRUIbqJM8pKhv" - b"jc++fF9Pp/rjWU5ftFP4LLSnzWZl2OBBDCwuQkTYs+8Aew4fgWD8xrtKHf+dEu0CnpmRDqh9" - b"wPsiXPPu+s1q1PChTJ98CjnZWUybfMrneN9GP30eqS1sWEQoPVrBc0vfasubfhBYnp+Z8dkJ" - b"OECq3epzeXz3AtNbPd5hjz73CkePVTL79NPISE/HZNL6e62fEp9TRPB4fezau4+X3nyXg8Gd" - b"/h7gYZDSJX/69fEfZOFJW9xuD1fc/DMN4SLgEaBYKVR2ehqDBxTiSLHRs/Pq4x2tncg9iU6z" - b"8Z6Xbri37yBET6BZ/A2+iXt1kqmjxLFjFL0LeQhmDaisqedodW1blKA7KNz8ct5XLnZdeuG5" - b"n62At426ufMXasA04A5gJpCWeAvlOArJ56Gcng6s/0bde/Ze6bEfPWqhAWAvyF9B/SM7zdH6" - b"1KJ7PhuYFC3t1uU33opfNzKAk4CzBBmjUPYg5xNZyPgsDan/hvHZV+X2bMk9vncqgjI+TvyI" - b"IQM6cBRYLch6DVX5w2u/Ypw7e+ZnZwfEyitXWV3Dzb+6F28gELqv89SmoEuO6uMr6tGPn6aH" - b"QqK6bApTEc8Bju8bSSRGJBF4lvj7OlqsorSnC1skPoSSsByK8fugY9UzXt+bNE1OGzeSn938" - b"3c/e0E0scWI/9dMXk/rdIv3UL+D91E9fVEo6ffLSt97h76++qQzDCPrxUcb4EYPlt7ct6Odm" - b"D+mhvz/NO+u3KkMMFTwkV8n44YNk1+GjGIahLp45VeZfd9Vxe/99f13Cqo93KaWQhd+8kjNP" - b"nxrxvsNlR1j4uwcAuGTmVL5z7ZX/exr88Zf+bdV14+siPC3C04bIb7btO2zqF9Oe0ZqPNvHW" - b"2k123TCuF+EZhGcMkZ9u319q9gf0yboh1y378KM+nWnnzltgmjNvwaA58xak7D94mJVbd2i6" - b"YVwd0PWZ9z35fFQL88e/X0xAN+YGdOPc11eu+0LM/klV8qqbbgOYDtwN7CS4QXT9ZxFT8L9K" - b"9/39OUBNB+4CNgOvAJtCOaUmAlfGzSGdJEkwPcHfgFPfXbUWEUwglwPTYjkdQos1FwBniXwO" - b"g797C1FavT4FjAGOAfebTSaPiKEmjR7eL+A9pEAQ6p0E7AUeNJs0X0iYVEjWVJ8zV9GCcDuK" - b"/aeOH8u/V20IXu3twZ9fZAG/5ubbEBGzIA6FqgOMgK5bFOi1jU0yd/4CDUHlZaXrDU4XAd2w" - b"gQSWLVmsiwhzb1iohdLGmgGv2aR5Xn30/k7v+ObCO6h3usyAI3TJneGw+//5f39IqI433fFb" - b"SqtqzYKkhGYnr0lp3tcff6BdRubOX6hExGTSlK4bhhlUCmAoRWvX7VOLHnuC9zZs00L1MQEe" - b"i9nkfeWR+wA4eLiUW377gAlA05RhGGIDbEBAKeW+bd41xoypU6LW9+ofBnkKZAFNgBbQDYtS" - b"6AolEiFdx8o167nvyRc0EWnnpUnTvK89dr+s37SFex59ShNBs5i1wCuPBPm7dsMmfv/4Mxqg" - b"Wc2mgMVk8vsD+scK9InjxxG+liCCac68BbaOfjJ5Xn30vu5zQFitXnnjTZ58bblJICXEJ7fd" - b"avH9669/+q8LeMJ+8DnzFpiBecA3gGKQt4MtVUuVUv8RkfOAUcCLIJeAmgKyKDPVsbvJ5c4L" - b"PTtVkBQFdaBeQ/H6d758oe+c2Wfw9QW/UIbIhNB9Q0McPAw8rim1LVxIu025Ilx6w61KRE4F" - b"vg0MDnVQPfAW8OLSxx/wKKW4ZN4tExTqamAfMBU4geBS8iqQRy86Y0rz9751LV/53o/w+fVi" - b"4EaQiaCsQHWwfSy//YZrA0++/AbH6hqvDPIDHZgC5AviUfAesGTZksXuGDy1AN8EbgDJBfU+" - b"wVDSZ5RSa0Tk28DlwJxlSxbpV/7gp7R6fbkovo0wPTTw6oFlwMvFedm+itqGE4HvAvfnZaYd" - b"feK+3zJ3/gKTCNcBqYI8plA2kB+BeuHrF39pzz///Z6FYMoGryDlCjUiVHYt8IyCt5cuWaRf" - b"duOtBHTjYaABuHNZx7VBwHxgAogV1DHgWeCDpY8/oPdFAp/jjsFDOHsvyKEgU9VaYC3IERAF" - b"jAN+CLwAXAzsBlXT6Gp1AH8CpqF4XMHtoD4E7kTky08tW878n/0GQ2Qk8JggLcDvQjjfAzxm" - b"iDHsB3fcHbVu7324Bgk+vwTwAfcBvwQ+AH4EXH/pDQu1oI5SJSDXA+cB64Dfg7wSFDS14M3V" - b"m7R/vvQaXn8gG3gIGAHqQeAXwFbgXmD2vUueVW6vD0GmAD8ABgIvAb9RqHdA3Qxc9NXv/zgW" - b"GjYE2QeUgaoN8pO1QFWYWkUBXp+PVp8vBbgHYSbwd+B2ggPpZ4JccayuUQMqgDzgrtqmFseX" - b"b1yICJOBBcBek6YFQGygLgGK6hoawys0XAWF868g9wCVwCKBUdfdcnuY9u7Q3wHDyCUYHTgw" - b"dO+dwG5BFgEzvrnwji+Gkbn08UW6UqwEtQEoU4qnli1Z/I9lSxZvB0SCQt4C/ATUdZqmFpfk" - b"Z9eqoCY/RZDb7FbLf5YtWbxVKR4HeUpgnj+gp7g8PgVcA3yqlPrNsiWL1l0y87T1wK8At8C5" - b"R6rro6qBh597FeBrIdvgV9+Ye+4Hy5Ys2qCU+hvwKHCVCBlNze2JiCqB29MdtieXLVm0CqWe" - b"Av4qyByBvJfe+RAV1O5DgFuz01PfXbZk0WbgL8AbwLd0wzCFgdZ3gTsX/2Lh68uWLFoL8iiw" - b"AdTpXl8gKgxctmSxrim1CmQrcFjBU8uWLPrHsiWLPu2auv7WX/8RhNHADGBBdrrjjWVLFm1F" - b"8YQgTyjUNSKSkmKzhBSETAHm6LrkBAe7vAKseP2xByQGjH5VKR5YtmTRO8uWLF4J/BqoA85t" - b"anWrDoAS/PfV7/0YhAuADFA/K87N+uDen9y0CVisgkrs+oaWVvMXQsBj2xftW60Oodi85J47" - b"Wl5/7AE5VteogLGg6hXqmMfnt82Zt8AmYAG1R6HyQWWJGCaQmcCHCDJn3i22N1Z9ZAtBh20K" - b"NV5EoroifQHdHJpBdito+drciwG49uIvGcBqYBCQ9vyrb7TV1wB8z/7fHwH4809/aABbFcoB" - b"5OqGaKBOA3YALQ1Oly0Ml34UMgqtYTzxozCGDRkMQIbDESAY1J8XwqRxeBp/a1l9MCvslBBs" - b"a2ivk2BRqC3AcMD64kN/Qin1Kah7gduAPwQLUg8PGZAfiOlbQbqmcGgFtgGjoQ1nqPZ/Xn/A" - b"BJwK7AeaK+oabbf96aG2mOrdIb47vlALPdGZ0/GhsCA/hI1RQGbI8/JEexhcMPAnB5Q5WAdl" - b"A3KA64Hzu3TuyNC0HW+g2oCW3Iy09l2tuTnZbZ1kAcwNzc6IRtKokcMJzT5mICVUwSKCIcNP" - b"0TkWLy/0vykyC4IJ7gFncM2mZ14H6eaia6/TeOBvAuHJONJD9VEAV50/W5576/3XBa5TqGsE" - b"ucRqMtc8ePcdXd4h8YaeSDD7VGHH/Z14p4VshxnA010eHyhIq0KZvkACHm13uUIwovWlERzh" - b"8jvofL62IF6lVCWCWRC/Qr0KvB2hjHpNU3rseikDMNc5Xe0hj4FAoE34BUTajtCOojGtgC6I" - b"L9SOALApiLnF6PKMR4EroYkurhEvCeVpDP3iC2nGPwDeLrf4VdATw8vvfQiowSpo/FYq1Lk+" - b"PbAGQidwRUxpoSK/VLAHnxMUWsd9HUGMbXz6Q4R53QXS/AXT4ImnPTObNMMf0KtCWnp/QVZ6" - b"c/jzJk3jwlnTeeK1Nw1EVRI8JeOT/MwMIzzOMzXFzs9/eAMAX/v+j/GEcO0lZ04N3PiNq9GU" - b"5jdEqoEiEcMSEgRe+M+7hKbJRlDus04/jZVbdnSr5+Xf/RFBz434FKox6HqWg6Fpf1dBVmYn" - b"YTKbNX7xwxu4409/Scg6B/jX6//m6Tfe0UTErCnlf/3xRV2Ot1XdHpOwSGBLcLvgoZABv7cw" - b"K6OpI3pZoWmKKy8+l3+//R4+v55K0NhbCzwnyIPA+5fesPD96Bi8c1aB4OGvWEKesRVEOrhT" - b"YYQ8JuOA3QVZGb72chRYzWau/fKFfIEEPFrkfGQt9KXTJvLW2s2bQzDly9WNzpeUwo2gSQjD" - b"rtywxa2UMkRkKfB9Q2R5dZNzh0LpQdwtNhqbvS+89kbglhuux+MLWICbgbq3125+8sZvXM15" - b"006Vt9Ztfhf4LahJc+Yt2KQUuggFwLdCK4TNkyZOCIc0jrnzF2qIoQwYquB6gS0gVTazWbz+" - b"wDrgJuCC6sbm5Uopr4hoIU1v/OyPD3pNWgJpGULs+tfyFYgwHtRNhnBHyOVI1GNKurB5xKAS" - b"Nu85sAEoAC6rbnT+K8RLFbRp4OHnXvP49YAp5HocClwNlCnU48BdhmHsvuMP91fEqLNJENPc" - b"+QsMEdJALgVGCfwixWqV8OMJAUpys43yuoaVCFcAX6pubH5fKeUTEU0Qm0LpjpQU7xfIyEQI" - b"7qtrjsCeVlDOcGD3g29fhwpOqYuAhcCbIvK2wH+A11HcUlpZw4iSIgFeBtmqUE+IyHIRWQ78" - b"G9RLAlPWdZzjrgWZLkONkE10zVfmAITu5y/Av0VYGvIcFAH32azm8CPMioEnRGSZBH3Iz4Ly" - b"K7h7aFG+/6WH/0zQJShLQp6EN0XkbdrqjVzldHu0kH/XFcLv0oWprYBTQno4mBedrKB3Q2xd" - b"YF+rIM4IeVc8QBMCv/rxD0FRFoICtwD/EWG5BNu8FLjJFwhYRBgMcg3I75RSh7/ypTP0ED4+" - b"Buob2/eXmUPGZCPgNwVhm4Rshq8j8lYH77kV1P0Ktf3Fh9oXbVoEcQE88oe7QFgVKv8e4K0w" - b"Pr0K8vW7H3rii6PBzSYlvoDxmoL3zCZTu8VttZjF6wu8IsjbJk3r1Es3X/dV/f+efulvgrwH" - b"alhowcQNuBAqHDYb9911G9/5yS8bqhuabwIZrVBFXQbT/qElhaGpW/kE+b0S/JmpwfM0s7Oy" - b"GFFS1Lq//NgvBP6hoCRowKoGYI/ZpDW89Nc/h1erJuTP9oXAQA2w12axOBf/5ucAnD/9VN/y" - b"dVv+DPIqqLaFI3dImMvMmmaMGjKQdZ/seRyU0lSHjXDikIGs+2TvS0CKppQfIDcjjYq6xq2g" - b"rgslWGqDaUZAN55XkGLStE489fj8bwHrtdD1K86bpb+4fOU/gJXAsOBsIh4Bl0KVK0XAEGlS" - b"qO+C7Hnxwd+L3W7nvfWbmxpd7puB7BDycQI3ozg6Y8qpvLl6o26I/DY48FVo1VZaQB1CcfQr" - b"Z59hAKSn2GloaX1QofS2Ok0eM8K7ac/+PyK8HIKDJsCtUE7giMXy343D+/9uR8+ceQsuBH4n" - b"yJw3liwup5/+p+n/vw0PKrpR3E/9Av7Fp/49qP9f0f8DfFWHIXyhEGIAAAAASUVORK5CYII=" -) diff --git a/tools/gui/fgui/misc/misc.py b/tools/gui/fgui/misc/misc.py deleted file mode 100644 index 4b707212..00000000 --- a/tools/gui/fgui/misc/misc.py +++ /dev/null @@ -1,136 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Miscellaneous configurations etc. for all parts of the GUI""" - -import logging -import re -from pathlib import Path - -LOG_LEVELS = { - 0: logging.CRITICAL, - 1: logging.ERROR, - 2: logging.WARN, - 3: logging.INFO, - 4: logging.DEBUG, -} - - -class BatterySystemConfiguration: # pylint: disable=too-few-public-methods - """Battery System configuration as read from the C sources.""" - - RE_CONFIG = r"#[\s]{0,1}define\s+{{FIND_CONFIG}}\s+\((\d+)+u?\)" - - def __init__(self, config_file: Path) -> None: - txt = config_file.read_text(encoding="utf-8") - self.bs_nr_of_strings = self._get_nr_of_strings(txt) - self.bs_nr_of_modules_per_string = self._get_nr_of_modules_per_string(txt) - self.bs_nr_of_cell_blocks_per_module = self._get_nr_of_cell_blocks_per_module( - txt - ) - self.bs_nr_of_temp_sensors_per_module = self._get_nr_of_temp_sensors_per_module( - txt - ) - - def _get_nr_of_strings(self, txt): - """returns the number of strings in the battery system""" - reg = re.compile( - BatterySystemConfiguration.RE_CONFIG.replace( - "{{FIND_CONFIG}}", "BS_NR_OF_STRINGS" - ) - ) - - m = reg.search(txt) - return self.__get_int_value_from_match(m) - - def _get_nr_of_modules_per_string(self, txt): - """returns the number of modules per string in the battery system""" - reg = re.compile( - BatterySystemConfiguration.RE_CONFIG.replace( - "{{FIND_CONFIG}}", "BS_NR_OF_MODULES_PER_STRING" - ) - ) - - m = reg.search(txt) - return self.__get_int_value_from_match(m) - - def _get_nr_of_cell_blocks_per_module(self, txt): - """returns the number of cell blocks per module in the battery system""" - reg = re.compile( - BatterySystemConfiguration.RE_CONFIG.replace( - "{{FIND_CONFIG}}", "BS_NR_OF_CELL_BLOCKS_PER_MODULE" - ) - ) - - m = reg.search(txt) - return self.__get_int_value_from_match(m) - - def _get_nr_of_temp_sensors_per_module(self, txt): - """returns the number of temperature sensors per module in the battery system""" - reg = re.compile( - BatterySystemConfiguration.RE_CONFIG.replace( - "{{FIND_CONFIG}}", "BS_NR_OF_TEMP_SENSORS_PER_MODULE" - ) - ) - - m = reg.search(txt) - return self.__get_int_value_from_match(m) - - @staticmethod - def __get_int_value_from_match(m): - """returns the matched value""" - val = 1 - if m: - val = int(m.group(1)) - else: - logging.error( - "Something went wrong during parsing the " - "battery system configuration..." - ) - return val - - def __str__(self): - config = ( - f"strings: {self.bs_nr_of_strings}\n" - f"modules_per_string: {self.bs_nr_of_modules_per_string}\n" - f"cell_blocks_per_module: {self.bs_nr_of_cell_blocks_per_module}\n" - f"temp_sensors_per_module: {self.bs_nr_of_temp_sensors_per_module}\n" - ) - return config diff --git a/tools/gui/fgui/misc/program_arguments.py b/tools/gui/fgui/misc/program_arguments.py deleted file mode 100644 index 48b6c7fd..00000000 --- a/tools/gui/fgui/misc/program_arguments.py +++ /dev/null @@ -1,177 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Implements the command line argument the module must understand.""" - -import logging -import os - -import click -import wx - -from .can.can_constants import ( - BAUD_RATES, - DEFAULT_BAUD_RATE_INDEX, - SUPPORTED_CAN_ADAPTERS, -) -from .can.can_helpers import detect_can_adapters -from .gui_helpers import get_icon - -C_SETUP_VERBOSITY = { - "count": True, - "help": "Sets the verbosity level.", -} -C_SETUP_CAN_ADAPTERS = { - "type": click.Choice(SUPPORTED_CAN_ADAPTERS, case_sensitive=True), - "help": "CAN adapter to be used.", -} -C_SETUP_BAUD_RATE = { - "type": click.Choice([str(i) for i in BAUD_RATES]), - "help": "BAUD rate for the chosen CAN adapter.", -} -C_SETUP_LOGGING = { - "type": click.Path( - exists=True, - file_okay=False, - dir_okay=True, - writable=True, - readable=True, - resolve_path=True, - allow_dash=False, - ), - "is_eager": True, - "help": "DIRECTORY path to store CAN log files.", -} - - -def chose_can_adapter(): - """Helper to select a CAN adapter""" - available_can_adapters = detect_can_adapters() - if not available_can_adapters: - logging.debug("Could not find any CAN adapter.") - return None - if len(available_can_adapters) > 1: - user_abort = False - choices = [str(i) for i in available_can_adapters] - with wx.SingleChoiceDialog( - None, - "Select CAN adapter to be used", - "CAN Adapter Selection", - choices, - wx.CHOICEDLG_STYLE, - ) as can_adapter_selection_dialog: - can_adapter_selection_dialog.SetFocus() - can_adapter_selection_dialog.SetIcon(get_icon()) - if can_adapter_selection_dialog.ShowModal() != wx.ID_OK: - logging.error("No CAN adapter selected.") - user_abort = True - else: - selected_can_adapter_str = ( - can_adapter_selection_dialog.GetStringSelection() - ) - if user_abort: - for i in available_can_adapters: - i.shutdown() - return None - selected_can_adapter = None - for i in available_can_adapters: - if str(i) == selected_can_adapter_str: - selected_can_adapter = i - else: - i.shutdown() # they are not selected, shutdown immediately - else: - selected_can_adapter = available_can_adapters[0] - selected_can_adapter_str = str(selected_can_adapter) - selected_can_adapter.shutdown() - return selected_can_adapter.channel_info - - -def chose_baud_rate(): - """Helper to select the BAUD rate, if a CAN adapter was specified but no - BAUD rate.""" - user_abort = False - choices = [f"{i} 1/s" for i in BAUD_RATES] - with wx.SingleChoiceDialog( - None, "Select baud rate to be used", "baud rate", choices, wx.CHOICEDLG_STYLE - ) as baud_rate_dialog: - baud_rate_dialog.SetIcon(get_icon()) - selected_baud_rate_str = baud_rate_dialog.SetSelection(DEFAULT_BAUD_RATE_INDEX) - if baud_rate_dialog.ShowModal() != wx.ID_OK: - user_abort = True - else: - selected_baud_rate_str = baud_rate_dialog.GetStringSelection() - if user_abort: - return None - baud_rate = int(selected_baud_rate_str.split(" ")[0]) - return baud_rate - - -def chose_logging_dir(logging_dir): - """Helper to select the logging directory for the CAN messages.""" - if not logging_dir: - with wx.DirDialog( - None, - "Select logging directory", - defaultPath=str(os.getcwd()), - ) as dir_dialog: - if dir_dialog.ShowModal() == wx.ID_CANCEL: - pass - else: - logging_dir = dir_dialog.GetPath() - return logging_dir - - -def validate_argument_combination(can_adapter, baud_rate, logging_dir): - """Validates that the combination of provided arguments on the command line - is meaningful.""" - if not can_adapter and baud_rate: - logging.error( - ( - "BAUD rate supplied without supplying a CAN adapter. " - "The option is ignored." - ) - ) - if not can_adapter and logging_dir: - logging.error( - ( - "Logging directory supplied without supplying a CAN adapter. " - "The option is ignored." - ) - ) diff --git a/tools/gui/fgui/workers/can_node_worker.py b/tools/gui/fgui/workers/can_node_worker.py deleted file mode 100644 index 6e58d669..00000000 --- a/tools/gui/fgui/workers/can_node_worker.py +++ /dev/null @@ -1,182 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Implements a process, that uses a CAN adapter to send and receive messages. -Received messages are put in a queue to be consumed by e.g., a GUI. The -messages to be send can be put into the queue by any other thread/process.""" - -import multiprocessing -import time -from pathlib import Path -from queue import Empty -from typing import Union - -from can import SizedRotatingLogger -from can.interface import Bus -from can.message import Message - -from ..misc.can.can_helpers import adapter_initialize, adapter_uninitialize - - -class DummyLogger: - """Dummy logger class""" - - def __call__(self, *args, **kwargs): - pass - - def __init__(self, *args, **kwargs): - pass - - def stop(self): - """required dummy function""" - pass # pylint: disable=unnecessary-pass - - -class CanAdapterProcess( # pylint: disable=too-many-instance-attributes - multiprocessing.Process -): - """Process to interact with a CAN adapter.""" - - def __init__( - self, adapter: str, baud_rate: int, logging_dir: Union[Path, None] = None - ) -> None: - multiprocessing.Process.__init__(self) - - self.init_adapter = adapter - self.baud_rate = baud_rate - - self.receive_queue = multiprocessing.Queue(maxsize=0) - self.send_queue = multiprocessing.Queue(maxsize=0) - - self.locked = multiprocessing.Lock() # only one app my use this process - - self.g_idle = multiprocessing.Event() # waiting for an app to use the process - self.g_canceled = multiprocessing.Event() # on program exit - self.app_paused = multiprocessing.Event() # an app pauses using the process - # an app does no longer use the process - self.app_canceled = multiprocessing.Event() - - self.g_idle.set() # we start up and happily idle - self.g_canceled.clear() # and we dont throw the CAN process away on startup - self.app_paused.set() # an app starts in paused mode - self.app_canceled.clear() # an app does not throw the CAN process away on startup - self.logging_dir = logging_dir - - def run(self) -> None: - """Implements the functionality of the process, that is run, once the - process has started.""" - while True: # 'whole-program-loop' -> only exit on program exit - # first make sure we can always safely exit if someone cancels - if self.g_canceled.is_set(): - self._empty_process_queues() - break - - # idle on startup or if no app uses the process anymore - if self.g_idle.is_set(): - self._empty_process_queues() - time.sleep(1) - continue - - # we are not in idle mode, so we must run in an app context - nice! - # initialize the adapter and then start receiving/transmitting messages - adapter = adapter_initialize(self.init_adapter, self.baud_rate) - if self.logging_dir: - logger = SizedRotatingLogger( - base_filename=self.logging_dir / "foxbms.asc", - max_bytes=50000, - ) - else: - logger = DummyLogger() - while True: # 'app' loop -> exit on single app exit - # check if we are paused, then we just read the CAN bus and forget - # the messages - if self.app_canceled.is_set(): # pylint: disable=no-else-break - self._empty_process_queues() - adapter_uninitialize(adapter) - logger.stop() - break - elif self.app_paused.is_set(): - self._empty_process_queues() - self._msg_receive_and_forget(adapter) - continue - else: - # we are not paused, so lets receive and transmit messages - self._msg_receive(adapter, logger) - self._msg_send(adapter, logger) - - def _msg_receive_and_forget( # pylint: disable=no-self-use - self, adapter: Bus - ) -> None: - """Receive a message, to empty the CAN adapter buffer. - The message data is not further used.""" - adapter.recv(0.05) - - def _msg_receive(self, adapter: Bus, logger: SizedRotatingLogger) -> None: - """Receive a message and log it.""" - message: Message = adapter.recv(0.05) - if message: - self.receive_queue.put(message) - logger(message) - - def _msg_send(self, adapter: Bus, logger: SizedRotatingLogger) -> None: - """Send messages as long as there are messages to be sent.""" - while not self.send_queue.empty(): - message: Message = self.send_queue.get() - adapter.send(message) - message.is_rx = False # to have it correctly in the logger - logger(message) - - def g_cancel(self) -> None: - """Global canceling (i.e., not just 'pausing') the process. - All queues are cleared.""" - self.receive_queue.close() - self.send_queue.close() - self.receive_queue.join_thread() - self.send_queue.join_thread() - self.g_canceled.set() - - def _empty_process_queues(self): - """empty all queues associated with the process""" - for i in [self.receive_queue, self.send_queue]: - while not i.empty(): - try: - i.get(timeout=0.001) - except (ValueError, Empty): - pass diff --git a/tools/gui/fgui/workers/gui_sync_worker.py b/tools/gui/fgui/workers/gui_sync_worker.py deleted file mode 100644 index 39e9dcc8..00000000 --- a/tools/gui/fgui/workers/gui_sync_worker.py +++ /dev/null @@ -1,77 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Implements the thread, that has the callback that does the GUI updates.""" - -import logging -import multiprocessing -import threading -import time -from typing import Callable - - -class SyncThread(threading.Thread): - """Implements a class, that knows about the received CAN messages. - These messages are then feedback to a method that knows about the GUI - and then updates the respective GUI elements with the values from the - received CAN message.""" - - def __init__( - self, gui_callback: Callable, receive_queue: multiprocessing.Queue - ) -> None: - threading.Thread.__init__(self) - self.canceled = threading.Event() - self.gui_callback = gui_callback - self.receive_queue = receive_queue - - def run(self) -> None: - """Thread function to be run.""" - while True: - if self.canceled.isSet(): # cancel when button is pressed - logging.debug("SyncThread was canceled.") - break - while not self.receive_queue.empty(): - data = self.receive_queue.get() - self.gui_callback(data) - time.sleep(0.05) # no hurry - - def cancel(self) -> None: - """Cancel the thread""" - self.canceled.set() diff --git a/tools/ide/vscode/README.md b/tools/ide/vscode/README.md index 1559a224..dd9c5663 100644 --- a/tools/ide/vscode/README.md +++ b/tools/ide/vscode/README.md @@ -2,31 +2,32 @@ ## Workspace -The ``jinja2``-files in this directory contain *configuration* files for VS +The `jinja2`-files in this directory contain *configuration* files for VS Code settings. -These files get properly configured when running ``waf.bat configure`` or -``waf.sh configure`` in the root of the repository. -Please note that doing so, will overwrite the contents of `.vscode/` in +These files get properly configured when running `fox.ps1 waf configure` ( or +`fox.bat waf configure`or `./fox.sh waf configure`) in the root of the +repository. +Please note that doing so, will overwrite the contents of `.vscode` in the root of the repository with these templates. ## Snippets - ### Installation -> **_WARNING:_** -> - This will overwrite your previous settings! +Snippets are installed by copying the snippets files into the VS Code snippets +directory. +This directory is -To install the snippets just run `install-snippets.bat`. +- on Windows: `%APPDATA%\Code\User\snippets` and +- on Linux: `$HOME/.config/Code/User/snippets`. ### C -To simplify the creation of style guide conforming for loops regarding to -number of strings, modules and cells per module, just copy the content from -``snippets/c.json`` into the user snippet configuration directory: -- Windows: ``%APPDATA%\Code\User\snippets\c.json`` -- Linux: ``$HOME/.config/Code/User/snippets/c.json`` +`C`-snippets are provided to simplify the creation of style guide conforming +`for` loops regarding number of strings, modules and cells per module. +The snippet file is `c.json`. ### Python -There is also a snippet configuration for Python (``snippets/python.json``). +Simple `main`-function snippet for `Python` +The snippet file is `python.json`. diff --git a/tools/ide/vscode/c_cpp_properties.json.jinja2 b/tools/ide/vscode/c_cpp_properties.json.jinja2 deleted file mode 100644 index 70d80392..00000000 --- a/tools/ide/vscode/c_cpp_properties.json.jinja2 +++ /dev/null @@ -1,117 +0,0 @@ -{ - "env": { - "ProjectIncludePath": [ - "${workspaceFolder}/build/bin/src/app/main", - "${workspaceFolder}/build/bin/src/hal/include", - "${workspaceFolder}/build/bin/src/hal/source", - "${workspaceFolder}/build/unit_test/test/mocks/**", - "${workspaceFolder}/build/unit_test/vendor/**", - "${workspaceFolder}/src/app/application/algorithm", - "${workspaceFolder}/src/app/application/algorithm/config", - "${workspaceFolder}/src/app/application/algorithm/moving_average", - "${workspaceFolder}/src/app/application/algorithm/state_estimation/", - "${workspaceFolder}/src/app/application/algorithm/state_estimation/soc/{{ STATE_ESTIMATOR_SOC }}", - "${workspaceFolder}/src/app/application/algorithm/state_estimation/soe/{{ STATE_ESTIMATOR_SOE }}", - "${workspaceFolder}/src/app/application/algorithm/state_estimation/sof/{{ STATE_ESTIMATOR_SOF }}", - "${workspaceFolder}/src/app/application/algorithm/state_estimation/soh/{{ STATE_ESTIMATOR_SOH }}", - "${workspaceFolder}/src/app/application/bal", - "${workspaceFolder}/src/app/application/bal/{{ BALANCING_STRATEGY }}", - "${workspaceFolder}/src/app/application/bms", - "${workspaceFolder}/src/app/application/config", - "${workspaceFolder}/src/app/application/plausibility", - "${workspaceFolder}/src/app/application/soa", - "${workspaceFolder}/src/app/application/redundancy", - "${workspaceFolder}/src/app/driver/adc", - "${workspaceFolder}/src/app/driver/can", - "${workspaceFolder}/src/app/driver/can/cbs", - "${workspaceFolder}/src/app/driver/can/cbs/rx", - "${workspaceFolder}/src/app/driver/can/cbs/tx", - "${workspaceFolder}/src/app/driver/checksum", - "${workspaceFolder}/src/app/driver/config", - "${workspaceFolder}/src/app/driver/contactor", - "${workspaceFolder}/src/app/driver/dma", - "${workspaceFolder}/src/app/driver/foxmath", - "${workspaceFolder}/src/app/driver/fram", - "${workspaceFolder}/src/app/driver/htsensor", - "${workspaceFolder}/src/app/driver/i2c", - "${workspaceFolder}/src/app/driver/interlock", - "${workspaceFolder}/src/app/driver/imd", - "${workspaceFolder}/src/app/driver/imd/{{ IMD_MANUFACTURER }}",{% if IMD_MODEL|length%} - {% if IMD_MODEL != "" -%} - "${workspaceFolder}/src/app/driver/imd/{{ IMD_MANUFACTURER }}/{{ IMD_MODEL }}", - "${workspaceFolder}/src/app/driver/imd/{{ IMD_MANUFACTURER }}/{{ IMD_MODEL }}/config",{% endif %} - {%- endif %} - "${workspaceFolder}/src/app/driver/io", - "${workspaceFolder}/src/app/driver/led", - "${workspaceFolder}/src/app/driver/mcu", - "${workspaceFolder}/src/app/driver/meas", - "${workspaceFolder}/src/app/driver/afe/api", - {% for afe_include in AFE_INCLUDES %}"${workspaceFolder}/{{ afe_include }}", - {% endfor -%} - "${workspaceFolder}/src/app/driver/pex", - "${workspaceFolder}/src/app/driver/pwm", - "${workspaceFolder}/src/app/driver/rtc", - "${workspaceFolder}/src/app/driver/sbc", - "${workspaceFolder}/src/app/driver/sbc/fs8x_driver", - "${workspaceFolder}/src/app/driver/spi", - "${workspaceFolder}/src/app/driver/sps", - "${workspaceFolder}/src/app/driver/ts", - "${workspaceFolder}/src/app/driver/ts/api", - "${workspaceFolder}/src/app/driver/ts/epcos/b57251v5103j060", - "${workspaceFolder}/src/app/driver/ts/epcos/b57861s0103f045", - "${workspaceFolder}/src/app/driver/ts/fake/none", - "${workspaceFolder}/src/app/driver/ts/murata/ncxxxxh103", - "${workspaceFolder}/src/app/driver/ts/vishay/ntcalug01a103g", - "${workspaceFolder}/src/app/driver/ts/vishay/ntcle317e4103sba", - "${workspaceFolder}/src/app/driver/ts/{{TEMPERATURE_SENSOR_MANUFACTURER}}/{{TEMPERATURE_SENSOR_MODEL}}/{{TEMPERATURE_SENSOR_METHOD}}", - "${workspaceFolder}/src/app/engine/config", - "${workspaceFolder}/src/app/engine/database", - "${workspaceFolder}/src/app/engine/diag", - "${workspaceFolder}/src/app/engine/diag/cbs", - "${workspaceFolder}/src/app/engine/hw_info", - "${workspaceFolder}/src/app/engine/sys", - "${workspaceFolder}/src/app/engine/sys_mon", - "${workspaceFolder}/src/app/main/include", - "${workspaceFolder}/src/app/main/include/config", - "${workspaceFolder}/src/app/task/config", - "${workspaceFolder}/src/app/task/ftask", - "${workspaceFolder}/src/app/task/ftask/{{ RTOS }}", - "${workspaceFolder}/src/app/task/os", - "${workspaceFolder}/src/app/task/os/{{ RTOS }}", - "${workspaceFolder}/src/os/{{ RTOS }}", - {% for rtos_include in RTOS_INCLUDES %}"${workspaceFolder}/{{ rtos_include }}", - {% endfor -%} - "${workspaceFolder}/tools/vendor/ceedling/vendor/unity/src", - "${workspaceFolder}/tools/vendor/ceedling/vendor/c_exception/lib", - "${workspaceFolder}/tests/unit/support" - ], - "forcedInclude": [], - "ProjectCompiler": "{{ ARMCL }}" - }, - "configurations": [ - { - "name": "Win32", - "includePath": [ - "${ProjectIncludePath}", - {% for include in INCLUDES %}"{{ include }}"{%if not loop.last %},{%endif%} - {% endfor %} - ], - "browse": { - "path": [ - "${ProjectIncludePath}", - {% for include in INCLUDES %}"{{ include }}"{%if not loop.last %},{%endif%} - {% endfor %} - ], - "limitSymbolsToIncludedHeaders": true - }, - "compilerPath": "", - "defines": [ - {% for define in DEFINES %}"{{ define[0] }}={{ define[1] }}"{%if not loop.last %},{%endif%} - {% endfor %} - ], - "intelliSenseMode": "${default}", - "cStandard": "{{ C_STANDARD }}" - } - ], - "version": 4 -} diff --git a/tools/ide/vscode/cspell.json b/tools/ide/vscode/cspell.json new file mode 100644 index 00000000..eb8e00e5 --- /dev/null +++ b/tools/ide/vscode/cspell.json @@ -0,0 +1,937 @@ +{ + "allowCompoundWords": false, + "dictionaries": [ + "companies", + "cpp", + "misc", + "python", + "softwareTerms", + "wordsEn", + "wordsEnGb" + ], + "enabled": true, + "enabledLanguageIds": [ + "bat", + "bibtex", + "c", + "cpp", + "css", + "diff", + "html", + "json", + "jsonc", + "markdown", + "plaintext", + "powershell", + "python", + "restructuredtext", + "shellscript", + "xml", + "yaml" + ], + "flagWords": [ + "endianess", + "datasheet", + "wether" + ], + "ignorePaths": [ + "**/*rules-2012.txt", + "**/.git/objects/**", + "**/__pycache__/**", + "**/node_modules/**", + "**/package-lock.json", + "**/vscode-extension/**", + "**/.vscode/extensions/**", + ".clang-format", + ".git*", + ".lock-waf_*", + ".mailmap", + ".vscode/**", + ".pre-commit-config.yaml", + "BSD-3-Clause.txt", + "build/**", + "CC-BY-4.0.txt", + "CITATION.cff", + "conf/cc/linker_pulls.json", + "conf/env/conda_env_*.yaml", + "conf/hcg/**", + "conf/spa/.pylintrc", + "conf/spell/**", + "conf/unit/project.yml", + "conf/unit/vsc-settings.yml", + "docs/_ext/**", + "docs/_themes/**", + "docs/conf.py", + "docs/doxygen*.*", + "docs/general/licenses-packages-conda-env-win32.csv", + "docs/general/license-tables/license-info_packages-conda-env-linux.csv", + "docs/general/license-tables/license-info_packages-conda-env-win32.csv", + "docs/general/team-ad-sc.rst", + "docs/general/team-dev.rst", + "docs/general/team-former.rst", + "docs/misc/bibliography.rst", + "docs/software/configuration/fstartup.c-check.txt", + "docs/style-sheet-file.css", + "hardware/**/*.Annotation", + "hardware/**/*.BomDoc", + "hardware/**/*.DbLib", + "hardware/**/*.Harness", + "hardware/**/*.mdb", + "hardware/**/*.OutJob", + "hardware/**/*.PcbDoc", + "hardware/**/*.PcbLib", + "hardware/**/*.PrjPCB", + "hardware/**/*.PrjPcbStructure", + "hardware/**/*.PrjPcbVariants", + "hardware/**/*.SchDoc", + "hardware/**/*.SchLib", + "hardware/**/*.stp", + "src/app/driver/afe/nxp/common/MC33775A.h", + "src/app/driver/afe/nxp/mc33775a/vendor/*.c", + "src/app/driver/afe/nxp/mc33775a/vendor/*.h", + "src/app/driver/sbc/fs8x_driver/**", + "src/os/**", + "tests/axivion/axivion_preinc.h", + "tests/axivion/addon-test/**/test_*.*", + "tests/axivion/ci_config.json", + "tests/axivion/compiler_config.json", + "tests/axivion/compiler-errata/ti-cgt-arm*/**", + "tests/axivion/predefined_macros.txt", + "tests/axivion/qualification-test/qualification-kit/**", + "tests/axivion/rule_config_c.json", + "tests/re-names/*.json", + "tests/unit/build.json", + "tools/dbc/*.dbc", + "tools/dbc/*.sym", + "tools/ide/vscode/cspell.json", + "tools/debugger/lauterbach/*.in", + "tools/debugger/ozone/*.jdebug.*", + "tools/debugger/ozone/foxbms.jflash", + "tools/utils/waf-verify-sig.py", + "tools/vendor/**", + "tools/waf", + "tools/waf3-*/**" + ], + "ignoreWords": [ + "pwsh", + "decan", + "foxbms", + "foxBMS", + "FOXBMS", + "angewandten", + "Forschung", + "Foerderung", + "IISB", + "Schottkystrasse", + "Erlangen", + "Altium", + "Cppcheck", + "GitHub", + "GitLab", + "Mictor", + "OSHWA", + "SAMTEC", + "JFLASH", + "Molex", + "orcid", + "wuerth", + "zenodo", + "vulpes", + "fgui", + "lvac", + "USERPROFILE", + "PROGRAMFILES", + "PROGRAMFILESX", + "HOMEDRIVE", + "PATHEXT", + "CODEPAGE", + "ERRORLEVEL", + "LOCALAPPDATA", + "APPDATA", + "decan", + "chcp", + "dpfn", + "enabledelayedexpansion", + "enableextensions", + "findstr", + "popd", + "usebackq", + "pushd", + "setlocal", + "xcopy", + "noassocfiles", + "nomodpath", + "substr", + "gsub", + "vsdx", + "isonum", + "Cobertura", + "fstartup", + "foxmath", + "pico", + "portasm", + "AFE", + "AFES", + "BALS", + "CANRX", + "CANTX", + "HTSEN", + "ILCK", + "SYSM", + "FTSK", + "FTASK", + "EMIF", + "NOIMD", + "MRC", + "fstd", + "SHAREDRAM", + "ddeg", + "perc", + "assert", + "complex", + "ctype", + "errno", + "fenv", + "float", + "inttypes", + "iso646", + "limits", + "locale", + "math", + "setjmp", + "signal", + "stdalign", + "stdarg", + "stdatomic", + "stdbool", + "stddef", + "stdint", + "stdio", + "stdlib", + "stdnoreturn", + "stopbits", + "string", + "tgmath", + "threads", + "time", + "tsen", + "tsens", + "uchar", + "wchar", + "wctype", + "realloc", + "MOSFET", + "memcpy", + "realloc", + "calloc", + "mcalloc", + "NTFS", + "JTAG", + "unstaged", + "TASKKILL", + "Traceback", + "GCCRLE", + "LGPL", + "SPDX", + "TSPA", + "automodule", + "autoclass", + "untracked", + "mingw", + "mutex", + "posix", + "envs", + "devel", + "libc", + "Ooff", + "cflags", + "subdir", + "relpath", + "abspath", + "printf", + "memset", + "memwidth", + "threadsafe", + "threadsafety", + "vlog", + "tskdef", + "forcolon", + "linelength", + "preprocess", + "pylint", + "uint", + "typedef", + "typedefs", + "ifdef", + "ifndef", + "struct", + "structs", + "IBIT", + "PBIT", + "CBIT", + "SIMO", + "SOMI", + "docref", + "VIFC", + "curpc", + "SPSR", + "orreq", + "msreq", + "SPIDATAFMT_t", + "ecap", + "RTSV", + "SPNA", + "SCPS", + "REPEATMODE", + "BUSBUSY", + "RAMREG", + "SIGREGL", + "SIGREGH", + "DIEDL", + "ADDMODERD", + "ADDMODEWR", + "CSHOLD", + "SPIDAT", + "SPIEN", + "TDELAY", + "INTA", + "IOUT", + "Oport", + "DIEIDL", + "DIEIDH", + "DMAREQEN", + "EEPROM", + "FAS_ASSERT", + "FASSERT", + "GPIO", + "GPIOs", + "GIOPORT", + "GIODIR", + "AVCLK", + "DOUT", + "VREF", + "mosi", + "miso", + "PORTA", + "PORTASGN", + "PORTB", + "HCLK", + "SYSPC", + "ecap", + "ECLK", + "etpwm", + "TBPRD", + "TBCLK", + "FRCNT", + "ELCNT", + "WDEL", + "DFSEL", + "CSNR", + "FRDOFFSET", + "RDSIZE", + "WRSIZE", + "POWERON", + "IDADDR", + "ITCOUNT", + "DMACR", + "RXDMAEN", + "ISADDR", + "ITCOUNT", + "TXDMAEN", + "SADC", + "isospi", + "VBAT", + "VREG", + "REFUP", + "SWTEN", + "REFON", + "RDCVA", + "RDCVB", + "RDCVC", + "RDCVD", + "RDCVE", + "RDCVF", + "RDCVG", + "RDCVH", + "RDCVI", + "RDCFG", + "WRCFG", + "RDAUXA", + "RDAUXB", + "RDAUXC", + "RDAUXD", + "ADAX", + "ADOW", + "PDOWN", + "SHTNDL", + "ALRTFMEA", + "ALRTDUALUART", + "ALRTINTRFC", + "ALRTSUM", + "ALRTOVCELL", + "ALRTUVCELL", + "ALRTAUXPRTCT", + "ALRTAUXOV", + "ALRTAUXUV", + "ALRTCOMPOV", + "ALRTCOMPUV", + "ALRTCOMPAUXOV", + "ALRTCOMPAUXUV", + "ALRTBALSW", + "ALRTSTATUS", + "SWACTION", + "AUXGPIOCFG", + "AUXOV", + "AUXUV", + "ALRTIRQEN", + "ALRTOVEN", + "ALRTUVEN", + "ALRTAUXOVEN", + "ALRTAUXUVEN", + "ALRTCALTST", + "ALRTRJCT", + "OVTHCLR", + "OVTHSET", + "UVTHCLR", + "UVTHSET", + "MSMTCH", + "BIPOVTHCLR", + "BIPOVTHSET", + "BIPUVTHCLR", + "BIPUVTHSET", + "BLKOVTHCLR", + "BLKOVTHSET", + "BLKUVTHCLR", + "BLKUVTHSET", + "CSAOVTHCLR", + "CSAOVTHSET", + "CSAUVTHCLR", + "CSAUVTHSET", + "CBUVMINCELL", + "CBUVTHR", + "CBTIMER", + "AUXROVTHCLR", + "AUXROVTHSET", + "AUXRUVTHCLR", + "AUXRUVTHSET", + "AUXOVTHCLR", + "AUXAOVTHSET", + "AUXAUVTHCLR", + "AUXAUVTHSET", + "CELLOV", + "CELLUV", + "COMPOVTH", + "COMPUVTH", + "COMPAUXROVTH", + "COMPAUXRUVTH", + "COMPAUXAOVTH", + "COMPAUXAUVTH", + "COMPAUXROPNTH", + "COMPAUXAOPNTH", + "COMPACCOVTH", + "COMPACCUVTH", + "ACQCFG", + "BALSWDLY", + "BALSW", + "MEASUREEN", + "DIAGCFG", + "GPIOCFG", + "CBMODE", + "CTSTCFG", + "AUXSTCFG", + "DIAGGENCFG", + "BALAUTOUVTHR", + "BALUVSTAT", + "OVERSAMPL", + "OVTHCLR", + "AUTOBALSWDIS", + "ALRT", + "CBRESTART", + "ALRTRST", + "CMPN", + "UVTHSETREG", + "OVTHSETREG", + "CELLDLY", + "CSTAT", + "PNTR", + "CPNTR", + "WDATA", + "CSEND", + "DIAGSEL", + "DIAGSEL1", + "DIAGSEL2", + "BALEXPn", + "I2CRJCT", + "CRJCT", + "I2CRDATA1", + "I2CRDATA2", + "CRDATA", + "GNDL", + "ades", + "WRCFGA", + "WRCFGB", + "RDCFGA", + "RDCFGB", + "RDCVA", + "RDCVB", + "RDCVC", + "RDCVD", + "RDCVE", + "RDCVF", + "RDAUXA", + "RDAUXB", + "RDAUXC", + "RDAUXD", + "RDSTATA", + "RDSTATB", + "STAR", + "STBR", + "WRSCTRL", + "WRPWM", + "WRPSB", + "RDSCTRL", + "RDPWM", + "RDPSB", + "STSCTRL", + "CLRSCTRL", + "ADCV", + "ADOW", + "CVST", + "ADOL", + "ADAX", + "ADAXD", + "AXOW", + "AXST", + "ADSTAT", + "Digital", + "ADSTATD", + "STATST", + "ADCVAX", + "ADCVSC", + "CLRCELL", + "CLRCELL", + "CLRAUX", + "CLRSTAT", + "PLADC", + "DIAGN", + "WRCOMM", + "RDCOMM", + "STCOMM", + "Mute", + "Unmute", + "ICOM", + "FCOM", + "AUXREGS", + "AUXADC", + "DTMEN", + "DTRNG", + "SOAKON", + "OWRNG", + "RDSID", + "CFGRB", + "RSTCC", + "RSTF", + "TREFUP", + "VGPIO", + "OSCCHK", + "RDSTATA", + "RDSTATB", + "RDSTATC", + "RDSTATD", + "RDSTATE", + "STCR", + "CMED", + "SMED", + "THSD", + "SPIFLT", + "VDEL", + "CLRFLAG", + "STDR", + "CNTR", + "CFGRA", + "TMODCHK", + "RDAC", + "RDACA", + "RDACB", + "RDACC", + "RDACD", + "RDACE", + "RDACF", + "RDFCA", + "RDFCB", + "RDFCC", + "RDFCD", + "RDFCE", + "RDFCF", + "RDFC", + "VCELL", + "RDCV", + "RDCVALL", + "RDSV", + "RDSVA", + "RDSVB", + "RDSVC", + "RDSVD", + "RDSVE", + "RDSVF", + "RDRAXA", + "RDRAXB", + "RDRAXC", + "RDRAXD", + "ADSV", + "RDPWMA", + "WRPWMA", + "RDPWMB", + "WRPWMB", + "ITMP", + "VRES", + "DIETEMP", + "TMOD", + "RDAUXE", + "unsnapshot", + "fmea", + "uphost", + "downhost", + "KBPS", + "NXPFS", + "RSTB", + "OVUV", + "OVUVREG", + "FSSM", + "INTB", + "AMUX", + "VMON", + "REGX", + "DEVICEID", + "LBIST", + "BIST", + "ABIST", + "PGOOD", + "VCOREMON", + "VDDIO", + "FTTI", + "FCCU", + "INITFS", + "VBOSUVH", + "VBOOSTUVH", + "VSUPUV", + "VPREUVL", + "VPREUVH", + "VSUPUVL", + "VSUPUVH", + "BTFB", + "BTSC", + "UART", + "misra", + "fram", + "isabellenhuette", + "tektronix", + "pcan", + "opta", + "USBBUS", + "SENDRECEIVE", + "lauterbach", + "epcos", + "murata", + "semitec", + "vishay", + "mram", + "ntcalug", + "ntcle", + "OHKS", + "axivion", + "cafecc", + "Codeline", + "gravis", + "larg", + "preinc", + "dashserver", + "localbuild", + "noauth", + "workitem", + "irdump", + "TESTCASE", + "endasmfunc", + "doxygen", + "rcfile", + "filecvt", + "marm", + "dilfile", + "Segger", + "Jupyter", + "rubyinstaller", + "rubygems", + "Sysnative", + "msvs", + "msvc", + "tiobj", + "cygwin", + "SPNU", + "arm", + "none", + "eabi", + "objcopy", + "objdump", + "readelf", + "size", + "armabs", + "armacpia", + "armadv", + "armar", + "armasm", + "armcg", + "armcl", + "armclist", + "armdem", + "armdis", + "armembed", + "armhex", + "armilk", + "armlibinfo", + "armlnk", + "armnm", + "armofd", + "armopt", + "armpdd", + "armpprof", + "armstrip", + "armxref", + "mkhex", + "mklib", + "gmake", + "ruby", + "Mockbeta", + "Mockdatabase", + "Mockepcos", + "Mockmath", + "freertos", + "safertos", + "rtos", + "jdebug", + "gcov", + "gcovr", + "msys", + "lcov", + "devkit", + "conda", + "condarc", + "miniconda", + "halcogen", + "ceedling", + "cmock", + "cexception", + "endverbatim", + "APPNAME", + "autoconfig", + "destdir", + "TARGETLIB", + "algo", + "bdir", + "bindir", + "bldnode", + "bldpath", + "CCDEPS", + "CCLINK", + "ccroot", + "confcache", + "CPPPATH", + "cprogram", + "cstlib", + "deps", + "distcheck", + "distclean", + "incnodes", + "incpaths", + "LDFLAGS", + "libdir", + "LIBPATH", + "LINKDEPS", + "okmsg", + "outdir", + "setenv", + "sigs", + "srcnode", + "stlib", + "STLIBPATH", + "stlink", + "taskgen", + "testbuild", + "tiprogram", + "tooldir", + "uselib", + "waflib", + "wscript", + "linkcheck", + "NSEL", + "stringliteral", + "toctree", + "titlesonly", + "maxdepth", + "numref", + "linenos", + "literalinclude", + "subsubsection", + "subsubsections", + "doxygenfunction", + "genindex", + "modindex", + "modbus", + "uncrustify", + "maxsplit", + "arcname", + "pycache", + "getenv", + "pypi", + "isalnum", + "itertools", + "pylintrc", + "pyproject", + "groupby", + "linesep", + "pathsep", + "platformdirs", + "popen", + "tzname", + "rglob", + "rsplit", + "finditer", + "HAMEG", + "hexlify", + "startswith", + "cantools", + "jsonschema", + "cffconvert", + "clib", + "gprof2dot", + "iterrows", + "pstats", + "numpy", + "matplotlib", + "mypy", + "statsmodels", + "scikit", + "filterpy", + "dask", + "scipy", + "seaborn", + "pykwalify", + "qtconsole", + "qtpy", + "ruamel", + "vscroll", + "Colour", + "gridlib", + "RADIOBOX", + "NUMPAD", + "CHECKLISTBOX", + "CHOICEDLG", + "bustype", + "xlabel", + "ylabel", + "pyplot", + "fillcolor", + "graphviz", + "lhead", + "invis", + "fontcolor", + "darkgreen", + "nodesep", + "ranksep", + "ltail", + "rankdir", + "doublecircle", + "autofunction", + "numfig", + "delim", + "mathrm", + "flto", + "hexgen", + "preproc", + "LINKFLAGS", + "HEXGENFLAGS", + "NMFLAGS", + "Zener", + "TIDUM", + "pprs", + "pyvisa", + "pymodbus", + "levelname", + "selftest", + "tablefmt", + "BOOTSEL", + "Thonny", + "showindex", + "MSDS" + ], + "language": "en", + "version": "0.2", + "words": [ + "alphanumericals", + "archiver", + "cacheable", + "busbar", + "contactor", + "contactors", + "deci", + "derating", + "endianness", + "favicon", + "initialisms", + "inplace", + "intrinsics", + "layermarker", + "logfiles", + "microcontroller", + "microcontrollers", + "multiline", + "opamps", + "optocoupler", + "optocouplers", + "overcurrent", + "overtemperature", + "overvoltage", + "parens", + "parseable", + "phosphane", + "pinout", + "pinouts", + "powerline", + "precharge", + "precharged", + "precharging", + "prepend", + "prepending", + "readmes", + "recalibrated", + "receptable", + "recurse", + "reinitialization", + "resetted", + "roadmap", + "semihosting", + "solderabilty", + "strippable", + "substate", + "substates", + "supercapacitor", + "supercapacitors", + "throughs", + "timespan", + "toolchain", + "toolchains", + "toolset", + "typedefed", + "undertemperature", + "undervoltage", + "unenumerated", + "uninitialization", + "uninitialize", + "uninstallation", + "unversioned", + "vendored", + "warnable", + "pdfs", + "pkgs", + "Mbit" + ] +} diff --git a/tools/ide/vscode/cspell.json.jinja2 b/tools/ide/vscode/cspell.json.jinja2 deleted file mode 100644 index 84d74b32..00000000 --- a/tools/ide/vscode/cspell.json.jinja2 +++ /dev/null @@ -1,870 +0,0 @@ -{ - "version": "0.2", - "language": "en", - "enabledLanguageIds": [ - "bat", - "bibtex", - "c", - "cpp", - "css", - "diff", - "html", - "json", - "jsonc", - "markdown", - "plaintext", - "powershell", - "python", - "restructuredtext", - "shellscript", - "xml", - "yaml" - ], - "words": [ - "alphanumericals", - "archiver", - "cacheable", - "busbar", - "contactor", - "contactors", - "deci", - "derating", - "endianness", - "favicon", - "initialisms", - "inplace", - "intrinsics", - "layermarker", - "logfiles", - "microcontroller", - "multiline", - "opamps", - "optocoupler", - "optocouplers", - "overcurrent", - "overtemperature", - "overvoltage", - "parens", - "phosphane", - "pinout", - "pinouts", - "powerline", - "precharge", - "precharged", - "precharging", - "prepend", - "prepending", - "readmes", - "recalibrated", - "receptable", - "recurse", - "reinitialization", - "resetted", - "roadmap", - "semihosting", - "solderabilty", - "strippable", - "substate", - "substates", - "supercapacitor", - "supercapacitors", - "throughs", - "timespan", - "toolchain", - "toolchains", - "toolset", - "typedefed", - "undertemperature", - "undervoltage", - "unenumerated", - "uninitialization", - "uninitialize", - "uninstallation", - "unversioned", - "vendored", - "warnable", - "pdfs", // Abbreviation: plural PDF - "pkgs", // Abbreviation: plural packages - "Mbit" // Abbreviation: megabit - ], - "enabled": true, - "allowCompoundWords": false, - "ignoreWords": [ - "foxbms", // project name file name friendly - "foxBMS", // project name in correct casing - "FOXBMS", // project name used in code, e.g., in macros - "angewandten", // german word used in the license header - "Forschung", // german word used in the license header - "Foerderung", // german word used in the license header - "IISB", // Short name for Fraunhofer Institute for Integrated Systems and Device Technology - "Schottkystrasse", // german word used in the license header - "Erlangen", // german word used in the license header - // Company and product names - "Altium", // Name: Company - "Cppcheck", // Name:Software: static program analysis tool - "GitHub", // Name:Company - "GitLab", // Name:Company - "Mictor", // Name:Product: connector from TE Connectivity (Matched Impedance ConnecTOR) - "OSHWA", // Abbrevation:Organization: Open Source Hardware Association - "SAMTEC", // Name:Company - "JFLASH", // Name:Product: MCU flashing tool from Segger - "Molex", // Name:Company - "orcid", // Abbrevation:Organization: Open Researcher Contributor Identification Initiative - "wuerth", // Name:Company - "zenodo", // Name:Product: general-purpose open repository - "vulpes", // user name in the documentation, latin for fox - "fgui", // Name: name of the Python package that implements the foxBMS 2 GUI - "lvac", // name: name of a frame in the foxBMS 2 GUI - "USERPROFILE", // Windows environment variable name - "CODEPAGE", // Windows environment variable name - "ERRORLEVEL", // Windows environment variable name - "LOCALAPPDATA", // Windows environment variable name - "APPDATA", // Windows environment variable name - "chcp", // cmd.exe: command - "dpfn", // cmd.exe: command - "enabledelayedexpansion", // cmd.exe: Batch command - "enableextensions", // cmd.exe: Batch command - "findstr", // cmd.exe: command - "popd", // cmd.exe: command - "usebackq", // cmd.exe: command - "pushd", // cmd.exe: command - "setlocal", // cmd.exe: command - "xcopy", // cmd.exe: command - "noassocfiles", // NSIS installer argument - "nomodpath", // NSIS installer argument - "substr", // bash: command - "gsub", // bash: command - "vsdx", // file extension - "isonum", // Name: name of file(s) in the repository - "fstartup", // Name: name of file(s) in the repository - "foxmath", // Name: name of file(s) in the repository - "portasm", // Name: name of file(s) in the repository - "AFE", // Code:foxBMS:Prefix: Analog Front-End - "AFES", // see AFE - "BALS", // Code:foxBMS:Prefix: Balancing strategy - "CANRX", // Code:foxBMS:Prefix: CAN receive - "CANTX", // Code:foxBMS:Prefix: CAN transmit - "HTSEN", // Code:foxBMS:Prefix: - "ILCK", // Code:foxBMS:Prefix: - "SYSM", // Code:foxBMS:Prefix: - "FTSK", // Code:foxBMS:Prefix: - "FTASK", // Code:foxBMS:Prefix: - "EMIF", // Extended Memory Interface - "NOIMD", // Code:foxBMS:Prefix: - "MRC", // Code:foxBMS:Prefix: - "fstd", // Name: name of file(s) in the repository - "SHAREDRAM", - "ddeg", // code:unit componds: deci degree - "perc", // code:unit componds: percentage - "assert", // C standard header file - "complex", // C standard header file - "ctype", // C standard header file - "errno", // C standard header file - "fenv", // C standard header file - "float", // C standard header file - "inttypes", // C standard header file - "iso646", // C standard header file - "limits", // C standard header file - "locale", // C standard header file - "math", // C standard header file - "setjmp", // C standard header file - "signal", // C standard header file - "stdalign", // C standard header file - "stdarg", // C standard header file - "stdatomic", // C standard header file - "stdbool", // C standard header file - "stddef", // C standard header file - "stdint", // C standard header file - "stdio", // C standard header file - "stdlib", // C standard header file - "stdnoreturn", // C standard header file - "string", // C standard header file - "tgmath", // C standard header file - "threads", // C standard header file - "time", // C standard header file - "uchar", // C standard header file - "wchar", // C standard header file - "wctype", // C standard header file - "realloc", // C standard function - "MOSFET", // metal-oxide-semiconductor field-effect transistor - "memcpy", // C standard function - "realloc", // C standard function - "calloc", // C standard function - "mcalloc", // C standard function - "NTFS", // Abbrevation: New Technology File System - "JTAG", // Abbrevation:Standard: Joint Test Action Group - "unstaged", - "Traceback", - "GCCRLE", - "LGPL", // License: GNU Lesser General Public License - "SPDX", // Abbrevation:Standard: Software Package Data Exchange - "TSPA", // Abbrevation:License: TECHNOLOGY AND SOFTWARE PUBLICLY AVAILABLE - "automodule", - "autoclass", - "LLVM", // Name:Software: set of compiler and toolchain technologies - "untracked", - "mingw", // Abbrevation:Software: Minimalist GNU for Windows - "mutex", // Abbrevation:Software: - "posix", // Abbrevation:Standard: Portable Operating System Interface - "envs", // Abbrevation:Generic: environments - "devel", // Abbrevation:Generic: development - "libc", - "Ooff", - "cflags", - "subdir", - "relpath", - "abspath", - "printf", - "memset", - "memwidth", - "threadsafe", // Abbrevation:Software: - "threadsafety", // Abbrevation:Software: - "vlog", - "tskdef", - "forcolon", - "linelength", - "preprocess", - "pylint", - "uint", - "typedef", - "typedefs", - "ifdef", - "ifndef", - "struct", - "structs", - "IBIT", - "PBIT", - "CBIT", - "SIMO", - "SOMI", - "docref", - "VIFC", // Abbrevation:Bender: Vehicle Interface Controller - "curpc", // ARM - "SPSR", // ARM - "orreq", // ARM Assembler - "msreq", // ARM Assembler - // Compound words in defines, abbreveations from HAL, etc. - "SPIDATAFMT_t", // TI: driver code - "ecap", // TI: abbrevation for "Enhanced Capture" driver - "RTSV", // TI: abbrevation for "runtime support library" - "SPNA", // TI: prefix for lots of documents (and we reference them) - "SCPS", // TI: prefix for lots of documents (and we reference them) - "REPEATMODE", // TI: driver code - "BUSBUSY", // TI: driver code - "RAMREG", // TI: driver code - "SIGREGL", // TI: driver code - "SIGREGH", // TI: driver code - "DIEDL", // TI: register name - "ADDMODERD", - "ADDMODEWR", - "CSHOLD", - "SPIDAT", - "SPIEN", - "TDELAY", - "INTA", - "IOUT", - "Oport", - "DIEIDL", - "DIEIDH", - "DMAREQEN", - "EEPROM", - "FAS_ASSERT", - "FASSERT", - "GPIO", - "GPIOs", - "GIOPORT", - "GIODIR", - "AVCLK", - "DOUT", - "VREF", - "mosi", - "miso", - "PORTA", - "PORTASGN", - "PORTB", - "HCLK", - "SYSPC", - "ecap", - "ECLK", - "etpwm", - "TBPRD", - "TBCLK", - "FRCNT", - "ELCNT", - "WDEL", - "DFSEL", - "CSNR", - "FRDOFFSET", - "RDSIZE", - "WRSIZE", - "POWERON", - "IDADDR", - "ITCOUNT", - "DMACR", - "RXDMAEN", - "ISADDR", - "ITCOUNT", - "TXDMAEN", - "SADC", - // LTC related words - "isospi", - "VBAT", - "VREG", - "REFUP", - "SWTEN", - "REFON", - "RDCVA", - "RDCVB", - "RDCVC", - "RDCVD", - "RDCVE", - "RDCVF", - "RDCVG", - "RDCVH", - "RDCVI", - "RDCFG", - "WRCFG", - "RDAUXA", - "RDAUXB", - "RDAUXC", - "RDAUXD", - "ADAX", - "ADOW", - "PDOWN", - // Maxim register names - "SHTNDL", - "ALRTFMEA", - "ALRTDUALUART", - "ALRTINTRFC", - "ALRTSUM", - "ALRTOVCELL", - "ALRTUVCELL", - "ALRTAUXPRTCT", - "ALRTAUXOV", - "ALRTAUXUV", - "ALRTCOMPOV", - "ALRTCOMPUV", - "ALRTCOMPAUXOV", - "ALRTCOMPAUXUV", - "ALRTBALSW", - "ALRTSTATUS", - "SWACTION", - "AUXGPIOCFG", - "AUXOV", - "AUXUV", - "ALRTIRQEN", - "ALRTOVEN", - "ALRTUVEN", - "ALRTAUXOVEN", - "ALRTAUXUVEN", - "ALRTCALTST", - "ALRTRJCT", - "OVTHCLR", - "OVTHSET", - "UVTHCLR", - "UVTHSET", - "MSMTCH", - "BIPOVTHCLR", - "BIPOVTHSET", - "BIPUVTHCLR", - "BIPUVTHSET", - "BLKOVTHCLR", - "BLKOVTHSET", - "BLKUVTHCLR", - "BLKUVTHSET", - "CSAOVTHCLR", - "CSAOVTHSET", - "CSAUVTHCLR", - "CSAUVTHSET", - "CBUVMINCELL", - "CBUVTHR", - "CBTIMER", - "AUXROVTHCLR", - "AUXROVTHSET", - "AUXRUVTHCLR", - "AUXRUVTHSET", - "AUXOVTHCLR", - "AUXAOVTHSET", - "AUXAUVTHCLR", - "AUXAUVTHSET", - "CELLOV", - "CELLUV", - "COMPOVTH", - "COMPUVTH", - "COMPAUXROVTH", - "COMPAUXRUVTH", - "COMPAUXAOVTH", - "COMPAUXAUVTH", - "COMPAUXROPNTH", - "COMPAUXAOPNTH", - "COMPACCOVTH", - "COMPACCUVTH", - "ACQCFG", - "BALSWDLY", - "BALSW", - "MEASUREEN", - "DIAGCFG", - "GPIOCFG", - "CBMODE", - "CTSTCFG", - "AUXSTCFG", - "DIAGGENCFG", - "BALAUTOUVTHR", - "BALUVSTAT", - "OVERSAMPL", - "OVTHCLR", - "AUTOBALSWDIS", - "ALRT", - "CBRESTART", - "ALRTRST", - "CMPN", - "UVTHSETREG", - "OVTHSETREG", - "CELLDLY", - "CSTAT", - "PNTR", - "CPNTR", - "WDATA", - "CSEND", - "DIAGSEL", - "DIAGSEL1", - "DIAGSEL2", - "BALEXPn", - "I2CRJCT", - "CRJCT", - "I2CRDATA1", - "I2CRDATA2", - "CRDATA", - "GNDL", - // ADI driver related words - "ades", // ADI ADESxxxx - // ADES1830 - "AUXREGS", // ADI ADES1830: Auxiliary registers - "AUXADC", // ADI ADES1830: Auxiliary ADC - "DTMEN", // ADI ADES1830: Discharge Timer Monitor enable - "DTRNG", // ADI ADES1830: Discharge Timer Range setting - "SOAKON", // ADI ADES1830: soak enable - "OWRNG", // ADI ADES1830: soak time range - "RDSID", // ADI ADES1830: Read serial ID - "CFGRB", // ADI ADES1830: Configuration Register B - "RSTCC", // ADI ADES1830: Clear command counter - "RSTF", // ADI ADES1830: reset filter - "TREFUP", // ADI ADES1830: IC pause time to allow the reference to power up - "VGPIO", // ADI ADES1830: safety - "OSCCHK", // ADI ADES1830: safety - "RDSTATA", // ADI ADES1830: safety - "RDSTATB", // ADI ADES1830: safety - "RDSTATC", // ADI ADES1830: safety - "RDSTATD", // ADI ADES1830: safety - "RDSTATE", // ADI ADES1830: safety - "STCR", // ADI ADES1830: register - "CMED", // ADI ADES1830: flag - "SMED", // ADI ADES1830: flag - "THSD", // ADI ADES1830: flag - "SPIFLT", // ADI ADES1830: SPI fault flag - "VDEL", // ADI ADES1830: supply rail delta latent - "CLRFLAG", // ADI ADES1830: command - "STDR", // ADI ADES1830: register - "CNTR", // ADI ADES1830: counter - "CFGRA", // ADI ADES1830: register - "TMODCHK", // ADI ADES1830: flag - "RDAC", // ADI ADES1830 command - "RDACA", // ADI ADES1830: Averaged Cell Voltage Register Group A - "RDACB", // ADI ADES1830: Averaged Cell Voltage Register Group B - "RDACC", // ADI ADES1830: Averaged Cell Voltage Register Group C - "RDACD", // ADI ADES1830: Averaged Cell Voltage Register Group D - "RDACE", // ADI ADES1830: Averaged Cell Voltage Register Group E - "RDACF", // ADI ADES1830: Averaged Cell Voltage Register Group F - "RDFCA", // ADI ADES1830: Filter Cell Voltage Register Group A - "RDFCB", // ADI ADES1830: Filter Cell Voltage Register Group B - "RDFCC", // ADI ADES1830: Filter Cell Voltage Register Group C - "RDFCD", // ADI ADES1830: Filter Cell Voltage Register Group D - "RDFCE", // ADI ADES1830: Filter Cell Voltage Register Group E - "RDFCF", // ADI ADES1830: Filter Cell Voltage Register Group F - "RDFC", // ADI ADES1830 command - "VCELL", // ADI generic for 'cell Voltage' - "RDCV", // ADI ADES1830: read cell voltage RDCVn - "RDCVALL", // ADI ADES1830: read all cell voltages - "RDSV", // ADI ADES1830: read s voltage register RDSVn - "RDSVA", // ADI ADES1830: read s voltage register RDSVA - "RDSVB", // ADI ADES1830: read s voltage register RDSVB - "RDSVC", // ADI ADES1830: read s voltage register RDSVC - "RDSVD", // ADI ADES1830: read s voltage register RDSVD - "RDSVE", // ADI ADES1830: read s voltage register RDSVE - "RDSVF", // ADI ADES1830: read s voltage register RDSVF - "RDRAXA", // ADI ADES1830: redundant auxiliary register A - "RDRAXB", // ADI ADES1830: redundant auxiliary register B - "RDRAXC", // ADI ADES1830: redundant auxiliary register C - "RDRAXD", // ADI ADES1830: redundant auxiliary register D - "ADSV", // ADI ADES1830 safety: command - "RDPWMA", // ADI ADES1830 safety: command: Read PWM register Group A - "WRPWMA", // ADI ADES1830 safety: command: Write PWM register Group A - "RDPWMB", // ADI ADES1830 safety: command: Read PWM register Group B - "WRPWMB", // ADI ADES1830 safety: command: Write PWM register Group B - "ITMP", // ADI ADES1830 status Register Group A (RDSTATA) - STBR2 & STBR3 - "VRES", // ADI ADES1830 status Register Group B (RDSTATA) - STBR4 - "DIETEMP", // ADI ADES1830 safety: generic abbrevation die temperature - "TMOD", // ADI ADES1830 safety: test mode - "RDAUXE", // ADI ADES1830: Read Auxiliary Register Group E - "unsnapshot", // ADI ADES1830: new word - "fmea", // MAXIM: driver related words - "uphost", // MAXIM: driver related words - "downhost", // MAXIM: driver related words - "KBPS", // MAXIM: driver related words - "NXPFS", // NXP: - "RSTB", // NXP: - "OVUV", // NXP: - "OVUVREG", // NXP: - "FSSM", // NXP: - "INTB", // NXP: - "AMUX", // NXP: - "VMON", // NXP: - "REGX", // NXP: - "DEVICEID", // NXP: - "LBIST", // NXP: - "BIST", // NXP: - "ABIST", // NXP: - "PGOOD", // NXP: - "VCOREMON", // NXP: - "VDDIO", // NXP: - "FTTI", // NXP: - "FCCU", // NXP: - "INITFS", // NXP: - "VBOSUVH", // NXP: - "VBOOSTUVH", // NXP: - "VSUPUV", // NXP: - "VPREUVL", // NXP: - "VPREUVH", // NXP: - "VSUPUVL", // NXP: - "VSUPUVH", // NXP: - "BTFB", // NXP: - "BTSC", // NXP: - "UART", // Abbrevation: Universal Asynchronous Receiver Transmitter - "misra", // Abbrevation: Motor Industry Software Reliability Association - "fram", // Abbrevation: Ferroelectric Random Access Memory - "isabellenhuette", // Name:Company - "tektronix", // Name:Company - "pcan", // PEAK: Prodcut of the company PEAK Systems GmBH - "USBBUS", // name of the PCAN USB buses in the "python-can" library - "SENDRECEIVE", // PEAK: reserved name in 'sym' files from PEAK Systems GmBH - "lauterbach", // Name:Company - "epcos", // Name:Company - "murata", // Name:Company - "vishay", // Name:Company - "mram", // Abbrevation:Magnetoresistive Random Access Memory - "ntcalug", // temperature sensor form vishay - "ntcle", // temperature sensor form vishay - "OHKS", // digital status pin from Bender IR155 - "axivion", // Name:Company - "cafecc", // Axivion: compiler name - "Codeline", // Axivion - "gravis", // Axivion: tool name - "larg", // Axivion: linker argument name - "preinc", // Axivion - "dashserver", // Axivion: tool name - "localbuild", // Axivion: tool name - "noauth", // Axivion - "workitem", // Axivion - "irdump", // Axivion: tool name - "TESTCASE", // Axivion - "endasmfunc", // TI ARM CGT asm keyword - // third party software, tools, configuration files etc. - "doxygen", // Name:Software: Documentation softare - "rcfile", - "filecvt", - "marm", - "dilfile", - "Segger", // Name:Company - "Jupyter", - "rubyinstaller", - "rubygems", - "Sysnative", - "msvs", - "msvc", - "tiobj", - "cygwin", - "SPNU", - "arm", - "none", - "eabi", - "objcopy", - "objdump", - "readelf", - "size", - "armabs", - "armacpia", - "armadv", - "armar", - "armasm", - "armcg", - "armcl", - "armclist", - "armdem", - "armdis", - "armembed", - "armhex", - "armilk", - "armlibinfo", - "armlnk", - "armnm", - "armofd", - "armopt", - "armpdd", - "armpprof", - "armstrip", - "armxref", - "mkhex", - "mklib", - "gmake", - "ruby", - "Mockbeta", - "Mockdatabase", - "Mockepcos", - "Mockmath", - "freertos", // Name:Software - "safertos", // Name:Software - "rtos", // Abbrevation:Generic - "jdebug", - "gcov", - "gcovr", // Name:Python: package - "msys", // Abbrevation:Software: Minimal SYStem - "lcov", - "devkit", - "conda", - "condarc", - "miniconda", - "halcogen", - "ceedling", // Name:Software: ceedling project - "cmock", // Name:Software: Cmock project - "cexception", // Name:Software: CException project - "endverbatim", // Keyword:Doxygen - // waf - "APPNAME", - "autoconfig", - "destdir", - "TARGETLIB", - "algo", - "bdir", - "bindir", - "bldnode", - "bldpath", - "CCDEPS", - "CCLINK", - "ccroot", - "confcache", - "CPPPATH", - "cprogram", - "cstlib", - "deps", - "distcheck", - "distclean", - "incnodes", - "incpaths", - "LDFLAGS", - "libdir", - "LIBPATH", - "LINKDEPS", - "okmsg", - "outdir", - "setenv", - "sigs", - "srcnode", - "stlib", - "STLIBPATH", - "stlink", - "taskgen", - "testbuild", - "tiprogram", - "tooldir", - "uselib", - "waflib", - "wscript", - "linkcheck", // sphinx - "stringliteral", // reStructuredText - "toctree", // reStructuredText - "titlesonly", // reStructuredText - "maxdepth", // reStructuredText - "numref", // reStructuredText - "linenos", // reStructuredText - "literalinclude", // reStructuredText - "subsubsection", // reStructuredText - "subsubsections", // reStructuredText - "doxygenfunction", // reStructuredText - "genindex", // reStructuredText - "modindex", // reStructuredText - // python - "maxsplit", - "arcname", // Python:package: tar - "pycache", - "getenv", - "pypi", - "isalnum", - "itertools", - "pylintrc", - "pyproject", - "groupby", - "linesep", // Python:package:os - "pathsep", // Python:package:os - "platformdirs", // Name:Python: package - "popen", - "tzname", - "rglob", - "rsplit", - "finditer", - "hexlify", - "startswith", - "cantools", // Name:Python: package - "jsonschema", // Name:Python: package - "cffconvert", // Name:Python: package - "clib", // Name:Python: package - "gprof2dot", // Name:Python: package - "iterrows", // Name:Python: package - "pstats", // Name:Python: package - "numpy", // Name:Python: package - "matplotlib", // Name:Python: package - "mypy", // Name:Python: package - "statsmodels", // Name:Python: package - "scikit", // Name:Python: package - "filterpy", // Name:Python: package - "dask", // Name:Python: package - "scipy", // Name:Python: package - "seaborn", // Name:Python: package - "pykwalify", // Name:Python: package - "qtconsole", // Name:Python: package - "qtpy", // Name:Python: package - "ruamel", // Name:Python: package - "vscroll", // Python:package: wxpython - "Colour", // Python:package: wxpython - "gridlib", // Python:package: wxpython - "RADIOBOX", // Python:package: wxpython - "NUMPAD", // Python:package: wxpython - "CHECKLISTBOX", // Python:package: wxpython - "CHOICEDLG", // Python:package: wxpython - "bustype", // Python:package:python-can - "xlabel", // Python:package: matplotlib - "ylabel", // Python:package: matplotlib - "pyplot", // Python:package: matplotlib - "fillcolor", // graphviz - "graphviz", // graphviz - "lhead", // graphviz - "invis", // graphviz - "fontcolor", // graphviz - "darkgreen", // graphviz - "nodesep", // graphviz - "ranksep", // graphviz - "ltail", // graphviz - "rankdir", // graphviz - "doublecircle", // graphviz - "autofunction", // sphinx - "numfig", // sphinx - "delim", // sphinx - "mathrm", // LaTeX - "flto", // Linker flag - "hexgen", // // compiler derived words - "preproc", // // compiler derived words - "LINKFLAGS", // option name in cc-options.yaml - "HEXGENFLAGS", // option name in cc-options.yaml - "NMFLAGS", // option name in cc-options.yaml - "Zener", // Zener diode - "TIDUM", // prefix - "pprs" // file extension - ], - "dictionaries": [ - "companies", - "cpp", - "misc", - "python", - "softwareTerms", - "wordsEn", - "wordsEnGb" - ], - "flagWords": [ - "endianess", - "datasheet" - ], - "ignorePaths": [ - "**/*rules-2012.txt", - "**/.git/objects/**", - "**/__pycache__/**", - "**/node_modules/**", - "**/package-lock.json", - "**/vscode-extension/**", - ".clang-format", - ".git*", - ".lock-waf_*", - ".mailmap", - ".vscode", - "BSD-3-Clause.txt", - "build/**", - "CC-BY-4.0.txt", - "CITATION.cff", - "conf/cc/linker_pulls.json", - "conf/env/conda_env_*.yaml", - "conf/guidelines/rules.json", - "conf/hcg/**", - "conf/spa/.pylintrc", - "conf/spell/**", - "conf/unit/project.yml", - "conf/unit/vsc-settings.yml", - "docs/_ext/**", - "docs/_themes/**", - "docs/conf.py", - "docs/doxygen*.*", - "docs/general/licenses-packages-conda-env-spelling.txt", - "docs/general/licenses-packages-conda-env-spelling-build-strings.txt", - "docs/general/licenses-packages-conda-env-win32.csv", - "docs/general/license-tables/license-info_packages-conda-env-linux.csv", - "docs/general/license-tables/license-info_packages-conda-env-win32.csv", - "docs/general/license-tables/license-packages-conda-env-spelling.txt", - "docs/general/license-tables/license-packages-conda-env-spelling-build-strings.txt", - "docs/general/team-ad-sc.rst", - "docs/general/team-dev.rst", - "docs/general/team-former.rst", - "docs/misc/bibliography.rst", - "docs/software/configuration/fstartup.c-check.txt", - "docs/spelling_wordlist.txt", - "docs/style-sheet-file.css", - "hardware/**/*.Annotation", - "hardware/**/*.BomDoc", - "hardware/**/*.DbLib", - "hardware/**/*.Harness", - "hardware/**/*.mdb", - "hardware/**/*.OutJob", - "hardware/**/*.PcbDoc", - "hardware/**/*.PcbLib", - "hardware/**/*.PrjPCB", - "hardware/**/*.PrjPcbStructure", - "hardware/**/*.PrjPcbVariants", - "hardware/**/*.SchDoc", - "hardware/**/*.SchLib", - "hardware/**/*.stp", - "src/app/driver/afe/nxp/common/MC33775A.h", - "src/app/driver/afe/nxp/mc33775a/vendor/*.c", - "src/app/driver/afe/nxp/mc33775a/vendor/*.h", - "src/app/driver/sbc/fs8x_driver/**", - "src/os/**", - "tests/axivion/axivion_preinc.h", - "tests/axivion/addon-test/**/test_*.*", - "tests/axivion/ci_config.json", - "tests/axivion/compiler_config.json", - "tests/axivion/compiler-errata/ti-cgt-arm*/**", - "tests/axivion/predefined_macros.txt", - "tests/axivion/qualification-test/qualification-kit/**", - "tests/axivion/rule_config_c.json", - "tests/env/conda_env_linux.json", - "tests/env/conda_env_win32.json", - "tests/re-names/*.json", - "tests/unit/build.mocks.json", - "tests/unit/build.tests.json", - "tools/dbc/*.dbc", - "tools/dbc/*.sym", - "tools/debugger/lauterbach/*.in", - "tools/debugger/ozone/*.jdebug.*", - "tools/debugger/ozone/foxbms.jflash", - "tools/gui/fgui/misc/logo.py", - "tools/vendor/**", - "tools/waf", - "tools/waf3-*/**", - "tools/waf-verify-sig.py" - ] -} diff --git a/tools/ide/vscode/embedded-tests/c_cpp_properties.json b/tools/ide/vscode/embedded-tests/c_cpp_properties.json new file mode 100644 index 00000000..f43be9a0 --- /dev/null +++ b/tools/ide/vscode/embedded-tests/c_cpp_properties.json @@ -0,0 +1,24 @@ +{ + "env": { + "ProjectIncludePath": [] + }, + "configurations": [ + { + "name": "Win32", + "includePath": [ + "${ProjectIncludePath}" + ], + "browse": { + "path": [ + "${ProjectIncludePath}" + ], + "limitSymbolsToIncludedHeaders": true + }, + "cStandard": "c11", + "compilerPath": "compilerPath-place-holder", + "defines": [], + "intelliSenseMode": "windows-gcc-x64" + } + ], + "version": 4 +} diff --git a/tools/ide/vscode/embedded-tests/e-project-include-path.txt b/tools/ide/vscode/embedded-tests/e-project-include-path.txt new file mode 100644 index 00000000..4f63a697 --- /dev/null +++ b/tools/ide/vscode/embedded-tests/e-project-include-path.txt @@ -0,0 +1,9 @@ +@@ROOT@@/build/bin/src/app/main +@@ROOT@@/build/bin/src/hal/include +@@ROOT@@/build/bin/src/hal/source +@@ROOT@@/build/unit_test/mocks/test_*/* +@@ROOT@@/build/unit_test/vendor/c_exception/lib +@@ROOT@@/build/unit_test/vendor/cmock/src +@@ROOT@@/build/unit_test/vendor/unity/src +@@ROOT@@/tests/unit/opt/** +@@ROOT@@/tests/unit/support/* diff --git a/tools/ide/vscode/embedded-tests/launch.json b/tools/ide/vscode/embedded-tests/launch.json new file mode 100644 index 00000000..4454a102 --- /dev/null +++ b/tools/ide/vscode/embedded-tests/launch.json @@ -0,0 +1,25 @@ +{ + "configurations": [ + { + "name": "Debug active Unit Test File", + "type": "cppdbg", + "request": "launch", + "program": "program-place-holder", + "MIMode": "gdb", + "miDebuggerPath": "miDebuggerPath-place-holder", + "args": [], + "cwd": "place-holder", + "environment": [], + "externalConsole": false, + "stopAtEntry": false, + "setupCommands": [ + { + "description": "Enable pretty-printing for gdb", + "ignoreFailures": true, + "text": "-enable-pretty-printing" + } + ], + "preLaunchTask": "Unit Test: Build active file" + } + ] +} diff --git a/tools/ide/vscode/embedded-tests/settings.json b/tools/ide/vscode/embedded-tests/settings.json new file mode 100644 index 00000000..68ddd46e --- /dev/null +++ b/tools/ide/vscode/embedded-tests/settings.json @@ -0,0 +1,69 @@ +{ + "C_Cpp.autoAddFileAssociations": true, + "C_Cpp.clang_format_fallbackStyle": "none", + "C_Cpp.clang_format_style": "file", + "[c]": { + "editor.formatOnSave": true, + "editor.rulers": [ + { + "column": 79 + }, + { + "color": "#ff0000", + "column": 119 + } + ], + "files.encoding": "iso88591" + }, + "[python]": { + "editor.formatOnSave": true, + "editor.rulers": [ + 79 + ], + "files.encoding": "utf8" + }, + "editor.bracketPairColorization.enabled": true, + "editor.formatOnSave": true, + "editor.guides.bracketPairs": "active", + "editor.insertSpaces": true, + "editor.rulers": [ + 79 + ], + "editor.tabSize": 4, + "extensions.ignoreRecommendations": true, + "files.associations": { + "*.h": "c", + "*linker_script_*.cmd": "linkerscript", + "wscript": "python" + }, + "files.autoGuessEncoding": true, + "files.encoding": "iso88591", + "files.exclude": { + "**/.git": true, + "**/.svn": true, + "**/.hg": true, + "**/CVS": true, + "**/.DS_Store": true, + "**/Thumbs.db": true + }, + "files.insertFinalNewline": true, + "files.trimFinalNewlines": true, + "files.trimTrailingWhitespace": true, + "files.watcherExclude": { + "**/.git/objects/**": true, + "**/.git/subtree-cache/**": true, + "**/node_modules/*/**": true, + "**/.hg/store/**": true + }, + "pylint.args": [ + "place-holder" + ], + "python.analysis.extraPaths": [], + "python.terminal.activateEnvironment": false, + "search.exclude": { + "**/node_modules": true, + "**/bower_components": true, + "**/*.code-search": true + }, + "terminal.integrated.persistentSessionReviveProcess": "never" +} diff --git a/tools/ide/vscode/embedded-tests/tasks.json b/tools/ide/vscode/embedded-tests/tasks.json new file mode 100644 index 00000000..9971068d --- /dev/null +++ b/tools/ide/vscode/embedded-tests/tasks.json @@ -0,0 +1,25 @@ +{ + "tasks": [ + { + "label": "Unit Test: Build active file", + "detail": "Task to build the test binary.", + "type": "cppbuild", + "group": { + "isDefault": true, + "kind": "build" + }, + "command": "fox-wrapper-place-holder", + "args": [ + "ceedling", + "test:${fileBasename}" + ], + "problemMatcher": [ + "$gcc" + ], + "options": { + "cwd": "place-holder" + } + } + ], + "version": "2.0.0" +} diff --git a/tools/ide/vscode/extensions.json.jinja2 b/tools/ide/vscode/extensions.json.jinja2 deleted file mode 100644 index e92b1441..00000000 --- a/tools/ide/vscode/extensions.json.jinja2 +++ /dev/null @@ -1,13 +0,0 @@ -{ - "recommendations": [ - "ms-vscode.cpptools", - "ms-python.python", - "maziac.asm-code-lens", - "ZixuanWang.linkerscript", - "streetsidesoftware.code-spell-checker", - "redhat.vscode-yaml", - "bungcip.better-toml", - "hbenl.vscode-test-explorer", - "numaru.vscode-ceedling-test-adapter" - ] -} diff --git a/tools/ide/vscode/generic/c_cpp_properties.json b/tools/ide/vscode/generic/c_cpp_properties.json new file mode 100644 index 00000000..0697a7dd --- /dev/null +++ b/tools/ide/vscode/generic/c_cpp_properties.json @@ -0,0 +1,24 @@ +{ + "env": { + "ProjectIncludePath": [] + }, + "configurations": [ + { + "name": "Win32", + "includePath": [ + "${ProjectIncludePath}" + ], + "browse": { + "path": [ + "${ProjectIncludePath}" + ], + "limitSymbolsToIncludedHeaders": true + }, + "cStandard": "c11", + "compilerPath": "", + "defines": [], + "intelliSenseMode": "${default}" + } + ], + "version": 4 +} diff --git a/tools/ide/vscode/generic/g-project-include-path.txt b/tools/ide/vscode/generic/g-project-include-path.txt new file mode 100644 index 00000000..963e44ab --- /dev/null +++ b/tools/ide/vscode/generic/g-project-include-path.txt @@ -0,0 +1,61 @@ +@@ROOT@@/build/bin/src/app/main +@@ROOT@@/build/bin/src/hal/include +@@ROOT@@/build/bin/src/hal/source +@@ROOT@@/src/app/application/algorithm +@@ROOT@@/src/app/application/algorithm/config +@@ROOT@@/src/app/application/algorithm/moving_average +@@ROOT@@/src/app/application/algorithm/state_estimation/ +@@ROOT@@/src/app/application/bal +@@ROOT@@/src/app/application/bms +@@ROOT@@/src/app/application/config +@@ROOT@@/src/app/application/plausibility +@@ROOT@@/src/app/application/redundancy +@@ROOT@@/src/app/application/soa +@@ROOT@@/src/app/driver/adc +@@ROOT@@/src/app/driver/can +@@ROOT@@/src/app/driver/can/cbs +@@ROOT@@/src/app/driver/can/cbs/rx +@@ROOT@@/src/app/driver/can/cbs/tx-async +@@ROOT@@/src/app/driver/can/cbs/tx-cyclic +@@ROOT@@/src/app/driver/checksum +@@ROOT@@/src/app/driver/config +@@ROOT@@/src/app/driver/contactor +@@ROOT@@/src/app/driver/crc +@@ROOT@@/src/app/driver/dma +@@ROOT@@/src/app/driver/foxmath +@@ROOT@@/src/app/driver/fram +@@ROOT@@/src/app/driver/htsensor +@@ROOT@@/src/app/driver/i2c +@@ROOT@@/src/app/driver/imd +@@ROOT@@/src/app/driver/interlock +@@ROOT@@/src/app/driver/io +@@ROOT@@/src/app/driver/led +@@ROOT@@/src/app/driver/mcu +@@ROOT@@/src/app/driver/meas +@@ROOT@@/src/app/driver/pex +@@ROOT@@/src/app/driver/pwm +@@ROOT@@/src/app/driver/rtc +@@ROOT@@/src/app/driver/sbc +@@ROOT@@/src/app/driver/sbc/fs8x_driver +@@ROOT@@/src/app/driver/spi +@@ROOT@@/src/app/driver/sps +@@ROOT@@/src/app/driver/ts +@@ROOT@@/src/app/driver/ts/api +@@ROOT@@/src/app/driver/ts/epcos/b57251v5103j060 +@@ROOT@@/src/app/driver/ts/epcos/b57861s0103f045 +@@ROOT@@/src/app/driver/ts/fake/none +@@ROOT@@/src/app/driver/ts/murata/ncxxxxh103 +@@ROOT@@/src/app/driver/ts/vishay/ntcalug01a103g +@@ROOT@@/src/app/driver/ts/vishay/ntcle317e4103sba +@@ROOT@@/src/app/engine/config +@@ROOT@@/src/app/engine/database +@@ROOT@@/src/app/engine/diag +@@ROOT@@/src/app/engine/diag/cbs +@@ROOT@@/src/app/engine/hw_info +@@ROOT@@/src/app/engine/sys +@@ROOT@@/src/app/engine/sys_mon +@@ROOT@@/src/app/main/include +@@ROOT@@/src/app/main/include/config +@@ROOT@@/src/app/task/config +@@ROOT@@/src/app/task/ftask +@@ROOT@@/src/app/task/os diff --git a/tools/ide/vscode/generic/settings.json b/tools/ide/vscode/generic/settings.json new file mode 100644 index 00000000..a7c5c9a0 --- /dev/null +++ b/tools/ide/vscode/generic/settings.json @@ -0,0 +1,142 @@ +{ + "C_Cpp.autoAddFileAssociations": true, + "C_Cpp.clang_format_fallbackStyle": "none", + "C_Cpp.clang_format_style": "file", + "[json]": { + "editor.insertSpaces": true, + "editor.tabSize": 2 + }, + "[c]": { + "editor.formatOnSave": true, + "editor.rulers": [ + { + "column": 79 + }, + { + "color": "#ff0000", + "column": 119 + } + ], + "files.encoding": "iso88591" + }, + "[css]": { + "editor.formatOnSave": false + }, + "[html]": { + "editor.formatOnSave": false + }, + "[python]": { + "editor.formatOnSave": true, + "editor.rulers": [ + 79 + ], + "files.encoding": "utf8" + }, + "[restructuredtext]": { + "editor.formatOnSave": true, + "editor.rulers": [ + 79 + ] + }, + "[shellscript]": { + "files.eol": "\n" + }, + "css.validate": false, + "editor.bracketPairColorization.enabled": true, + "editor.formatOnSave": true, + "editor.guides.bracketPairs": "active", + "editor.insertSpaces": true, + "editor.rulers": [ + 79 + ], + "editor.tabSize": 4, + "extensions.ignoreRecommendations": true, + "files.associations": { + "*.h": "c", + "*.pp": "c", + "*.ppm": "c", + "*.ppr": "c", + "*.pprs": "c", + "*linker_script_*.cmd": "linkerscript", + "docs/macros.txt": "restructuredtext", + "docs/units.txt": "restructuredtext", + "tests/axivion/architecture.gxl": "xml", + "tests/axivion/cafeCC.config": "xml", + "tests/axivion/mapping.gxl": "xml", + "wscript": "python" + }, + "files.autoGuessEncoding": true, + "files.encoding": "utf8", + "files.exclude": { + "**/*.gcov": true, + "**/*.log": true, + "**/*.stats": true, + "**/*.tar.gz": true, + "**/*.zip": true, + "**/.DS_Store": true, + "**/.coverage": true, + "**/.git": true, + "**/.hg": true, + "**/.lock-waf_*_build": true, + "**/.svn": true, + "**/.wafpickle-*": true, + "**/CVS": true, + "**/__pycache__/**": true, + "**/build/**/": true, + "**/conf/hcg/include/**": true, + ".github/**": true, + ".gitlab/**": true, + ".vscode/**": true, + ".ruff_cache": true, + ".mypy_cache": true, + "build/axivion/**": true, + "build/c4che/**": true, + "build/conf_check_*/**": true, + "build/predefined_defines/**": true, + "build/tmp**": true + }, + "files.insertFinalNewline": true, + "files.trimFinalNewlines": true, + "files.trimTrailingWhitespace": true, + "files.watcherExclude": { + "**/.git/objects/**": true, + "**/.git/subtree-cache/**": true, + "**/__pycache__/**": true, + "**/build/**/*.pp": true, + "**/build/**/*.ppr": true, + "**/build/**/*.pprs": true, + "**/conf/hcg/include/**": true, + "**/waf-3-*/**": true, + "tests/axivion/qualification-kit/**": true + }, + "json.schemas": [ + { + "fileMatch": [ + "conf/bms/bms.json", + "tests/variants/*.json" + ], + "url": "./conf/bms/schema/bms.schema.json" + } + ], + "pylint.args": [ + "--rcfile=pyproject.toml" + ], + "python.analysis.extraPaths": [], + "python.terminal.activateEnvironment": false, + "search.exclude": { + "**/*.code-search": true, + "**/bower_components": true, + "**/conf/hcg/include/**": true, + "**/node_modules": true, + "**build/**/*.obj": true, + "**build/**/*.pp": true, + "**build/**/*.ppr": true, + "**build/**/*.pprs": true, + "tests/axivion/qualification-kit/**": true + }, + "terminal.integrated.persistentSessionReviveProcess": "never", + "yaml.completion": true, + "yaml.format.enable": true, + "yaml.format.singleQuote": false, + "yaml.validate": true +} diff --git a/tools/ide/vscode/generic/tasks.json b/tools/ide/vscode/generic/tasks.json new file mode 100644 index 00000000..ea4d99f4 --- /dev/null +++ b/tools/ide/vscode/generic/tasks.json @@ -0,0 +1,275 @@ +{ + "tasks": [ + { + "label": "Embedded: Build binary", + "detail": "Task to build the embedded binary", + "type": "process", + "group": { + "isDefault": false, + "kind": "build" + }, + "command": "fox-wrapper-place-holder", + "args": [ + "waf", + "build_bin", + "-c", + "yes" + ], + "problemMatcher": [ + { + "applyTo": "allDocuments", + "owner": "cpp", + "severity": "warning", + "fileLocation": [ + "place-holder" + ], + "pattern": { + "regexp": "^\"(.*)\",.line (\\d+):\\s+(remark)\\s+(.*):\\s+(.*)$", + "file": 1, + "line": 2, + "code": 4, + "message": 5 + } + }, + { + "applyTo": "allDocuments", + "owner": "cpp", + "fileLocation": [ + "place-holder" + ], + "pattern": { + "regexp": "^\"(.*)\",.line (\\d+):\\s+(warning|error)\\s+(.*):\\s+(.*)$", + "file": 1, + "line": 2, + "severity": 3, + "code": 4, + "message": 5 + } + } + ], + "options": { + "cwd": "place-holder" + } + }, + { + "label": "Embedded: Build binary verbose", + "detail": "Task to build the embedded binary in verbose mode", + "type": "process", + "group": "build", + "command": "fox-wrapper-place-holder", + "args": [ + "waf", + "build_bin", + "-v", + "-c", + "yes" + ], + "problemMatcher": [ + { + "applyTo": "allDocuments", + "owner": "cpp", + "severity": "warning", + "fileLocation": [ + "place-holder" + ], + "pattern": { + "regexp": "^\"(.*)\",.line (\\d+):\\s+(remark)\\s+(.*):\\s+(.*)$", + "file": 1, + "line": 2, + "code": 4, + "message": 5 + } + }, + { + "applyTo": "allDocuments", + "owner": "cpp", + "fileLocation": [ + "place-holder" + ], + "pattern": { + "regexp": "^\"(.*)\",.line (\\d+):\\s+(warning|error)\\s+(.*):\\s+(.*)$", + "file": 1, + "line": 2, + "severity": 3, + "code": 4, + "message": 5 + } + } + ], + "options": { + "cwd": "place-holder" + } + }, + { + "label": "Documentation: Build documentation", + "detail": "Task to build the generic documentation", + "type": "process", + "group": "build", + "command": "fox-wrapper-place-holder", + "args": [ + "waf", + "build_docs", + "-c", + "yes" + ], + "problemMatcher": [ + { + "applyTo": "allDocuments", + "owner": "doxygen", + "severity": "warning", + "fileLocation": [ + "place-holder" + ], + "pattern": { + "regexp": "^(.*):(\\d+):\\s+(warning):\\s+(.*)$", + "file": 1, + "line": 2, + "message": 4 + } + }, + { + "applyTo": "allDocuments", + "owner": "doxygen", + "severity": "error", + "fileLocation": [ + "place-holder" + ], + "pattern": { + "regexp": "^(.*):(\\d+):\\s+(error):\\s+(.*)$", + "file": 1, + "line": 2, + "message": 4 + } + } + ], + "options": { + "cwd": "place-holder" + } + }, + { + "label": "Unit Test: Build all unit tests", + "detail": "Task to build all unit tests", + "type": "process", + "group": "build", + "command": "fox-wrapper-place-holder", + "args": [ + "waf", + "build_unit_test", + "-c", + "yes" + ], + "problemMatcher": [ + "$gcc" + ], + "options": { + "cwd": "place-holder" + } + }, + { + "label": "Unit Test: Build all unit tests in coverage mode", + "detail": "Task to build all unit tests in coverage mode", + "type": "process", + "group": "build", + "command": "fox-wrapper-place-holder", + "args": [ + "waf", + "build_unit_test", + "--coverage", + "-c", + "yes" + ], + "problemMatcher": [ + "$gcc" + ], + "options": { + "cwd": "place-holder" + } + }, + { + "label": "Project: Configure", + "detail": "Task to configure the project", + "type": "process", + "group": "build", + "command": "fox-wrapper-place-holder", + "args": [ + "waf", + "configure", + "-c", + "yes" + ], + "problemMatcher": [], + "options": { + "cwd": "place-holder" + } + }, + { + "label": "Clean: Clean all build artifacts", + "detail": "Task to clean all build artifacts", + "type": "process", + "group": "build", + "command": "fox-wrapper-place-holder", + "args": [ + "waf", + "clean_all", + "-c", + "yes" + ], + "problemMatcher": [], + "options": { + "cwd": "place-holder" + } + }, + { + "label": "Clean: Clean target binary", + "detail": "Task to clean the target build artifacts", + "type": "process", + "group": "build", + "command": "fox-wrapper-place-holder", + "args": [ + "waf", + "clean_bin", + "-c", + "yes" + ], + "problemMatcher": [], + "options": { + "cwd": "place-holder" + } + }, + { + "label": "Clean: Clean unit test artifacts", + "detail": "Task to clean unit test build artifacts", + "type": "process", + "group": "build", + "command": "fox-wrapper-place-holder", + "args": [ + "waf", + "clean_unit_test", + "-c", + "yes" + ], + "problemMatcher": [], + "options": { + "cwd": "place-holder" + } + }, + { + "label": "Clean: Clean documentation build artifacts", + "detail": "Task to clean the documentation build artifacts", + "type": "process", + "group": "build", + "command": "fox-wrapper-place-holder", + "args": [ + "waf", + "clean_docs", + "-c", + "yes" + ], + "problemMatcher": [], + "options": { + "cwd": "place-holder" + } + } + ], + "version": "2.0.0" +} diff --git a/tools/ide/vscode/install-snippets.bat b/tools/ide/vscode/install-snippets.bat deleted file mode 100644 index 6ba65da2..00000000 --- a/tools/ide/vscode/install-snippets.bat +++ /dev/null @@ -1,40 +0,0 @@ -@REM Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -@REM All rights reserved. -@REM -@REM SPDX-License-Identifier: BSD-3-Clause -@REM -@REM Redistribution and use in source and binary forms, with or without -@REM modification, are permitted provided that the following conditions are met: -@REM -@REM 1. Redistributions of source code must retain the above copyright notice, this -@REM list of conditions and the following disclaimer. -@REM -@REM 2. Redistributions in binary form must reproduce the above copyright notice, -@REM this list of conditions and the following disclaimer in the documentation -@REM and/or other materials provided with the distribution. -@REM -@REM 3. Neither the name of the copyright holder nor the names of its -@REM contributors may be used to endorse or promote products derived from -@REM this software without specific prior written permission. -@REM -@REM THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -@REM AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -@REM IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -@REM DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -@REM FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -@REM DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -@REM SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -@REM CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -@REM OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -@REM OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -@REM -@REM We kindly request you to use one or more of the following phrases to refer to -@REM foxBMS in your hardware, software, documentation or advertising materials: -@REM -@REM - "This product uses parts of foxBMS®" -@REM - "This product includes parts of foxBMS®" -@REM - "This product is derived from foxBMS®" - -@SETLOCAL EnableExtensions EnableDelayedExpansion - -@copy %~dp0\snippets\* %APPDATA%\Code\User\snippets diff --git a/tools/ide/vscode/launch.json.jinja2 b/tools/ide/vscode/launch.json.jinja2 deleted file mode 100644 index cab7dffe..00000000 --- a/tools/ide/vscode/launch.json.jinja2 +++ /dev/null @@ -1,25 +0,0 @@ -{ - "version": "0.2.0", - "configurations": [ - { - "name": "Ceedling GDB", - "type": "cppdbg", - "request": "launch", - "program": "${workspaceFolder}/build/unit_test/test/out/${command:ceedlingExplorer.debugTestExecutable}", - "args": [], - "stopAtEntry": false, - "cwd": "${workspaceFolder}", - "environment": [], - "externalConsole": false, - "MIMode": "gdb", - "miDebuggerPath": "{{ GDB }}", - "setupCommands": [ - { - "description": "Enable pretty-printing for \"gdb\"", - "text": "-enable-pretty-printing", - "ignoreFailures": true - } - ] - } - ] -} diff --git a/tools/ide/vscode/settings.json.jinja2 b/tools/ide/vscode/settings.json.jinja2 deleted file mode 100644 index 00def626..00000000 --- a/tools/ide/vscode/settings.json.jinja2 +++ /dev/null @@ -1,181 +0,0 @@ -{ - "terminal.integrated.persistentSessionReviveProcess": "never", - "files.encoding": "utf8", - "files.autoGuessEncoding": true, - "files.exclude": { - "**/*.gcov": true, - "**/*.stats": true, - "**/*.zip": true, - "**/.DS_Store": true, - "**/.git": true, - "**/.hg": true, - "**/.lock-waf_*_build": true, - "**/.svn": true, - "**/.wafpickle-*": true, - "**/__pycache__/**": true, - "**/build/**/*.a": true, - "**/build/**/*.aux": true, - "**/build/**/*.crl": true, - "**/build/**/*.log": true, - "**/build/**/*.obj": true, - "**/build/**/*.pp": true, - "**/build/**/*.ppd": true, - "**/build/**/*.ppi": true, - "**/build/**/*.ppm": true, - "**/build/**/*.ppr": true, - "**/build/**/*.pprs": true, - "**/build/**/*.rl": true, - "**/build/**/*.swi.json": true, - "**/conf/hcg/include/**": true, - "**/CVS": true, - "**/LLVM/**": true, - ".github/**": true, - ".gitlab/**": true, - ".vscode/**": true, - "build/axivion/**": true, - "build/c4che/**": true, - "build/conf_check_*/**": true, - "build/predefined_defines/**": true, - "build/tmp**": true - }, - "files.watcherExclude": { - "**/.git/objects/**": true, - "**/.git/subtree-cache/**": true, - "**/__pycache__/**": true, - "**/build/**/*.pp": true, - "**/build/**/*.ppr": true, - "**/build/**/*.pprs": true, - "**/conf/hcg/include/**": true, - "**/LLVM/**": true, - "**/waf-3-*/**": true, - "tests/axivion/qualification-kit/**": true - }, - "search.exclude": { - "**/*.code-search": true, - "**/bower_components": true, - "**/conf/hcg/include/**": true, - "**/LLVM/**": true, - "**/node_modules": true, - "**build/**/*.obj": true, - "**build/**/*.pp": true, - "**build/**/*.ppr": true, - "**build/**/*.pprs": true, - "tests/axivion/qualification-kit/**": true - }, - "css.validate": false, - "json.schemas": [ - { - "fileMatch": [ - "conf/bms/bms.json", - "tests/variants/*.json" - ], - "url": "./conf/bms/schema/bms.schema.json" - } - ], - "restructuredtext.linter.disabled": true, - "restructuredtext.preview.sphinx.disabled": true, - "restructuredtext.preview.docutil.disabled": true, - "extensions.ignoreRecommendations": true, - "C_Cpp.autoAddFileAssociations": true, - "C_Cpp.clang_format_path": "{{ CLANG_FORMAT_EXECUTABLE }}", - "C_Cpp.clang_format_style": "file", - "C_Cpp.clang_format_fallbackStyle": "none", - "ceedlingExplorer.projectPath": "build/unit_test", - "ceedlingExplorer.debugConfiguration": "Ceedling GDB", - "ceedlingExplorer.problemMatching": { - "mode": "gcc" - }, - "yaml.validate": true, - "yaml.completion": true, - "yaml.format.enable": true, - "yaml.format.singleQuote": false, - "python.linting.enabled": true, - "python.linting.pylintEnabled": false, - "python.linting.lintOnSave": false, - "python.linting.pylintPath": "{{ PYLINT_PATH }}", - "python.linting.pylintArgs": [ - "--rcfile={{ PYLINT_CONFIG }}" - ], - "python.terminal.activateEnvironment": false, - "python.pythonPath": "{{ PYTHONPATH }}", - "python.analysis.extraPaths": [ - {% for EXTRA_PATH in PYTHON_ANALYSIS_EXTRA_PATHS %} - "{{ EXTRA_PATH }}" - {%- if not loop.last -%} - , - {% endif %} - {% endfor %} - ], - "python.formatting.provider": "black", - "python.formatting.blackPath": "{{ BLACK_PATH }}", - "python.formatting.blackArgs": [ - "--config", - "{{ BLACK_CONFIG }}" - ], - "editor.tabSize": 4, - "editor.insertSpaces": true, - "editor.rulers": [ - 79 - ], - "[shellscript]": { - "files.eol": "\n" - }, - "editor.formatOnSave": true, - "editor.bracketPairColorization.enabled": true, - "editor.guides.bracketPairs": "active", - "[restructuredtext]": { - "editor.formatOnSave": true, - "editor.rulers": [ - 79 - ] - }, - "[python]": { - "files.encoding": "utf8", - "editor.formatOnSave": true, - "editor.rulers": [ - 79 - ] - }, - "[c]": { - "editor.formatOnSave": true, - "files.encoding": "iso88591", - "editor.rulers": [ - { - "column": 79 - }, - { - "column": 119, - "color": "#ff0000" - } - ] - }, - "[html]": { - "editor.formatOnSave": false - }, - "[css]": { - "editor.formatOnSave": false - }, - "files.insertFinalNewline": true, - "files.trimTrailingWhitespace": true, - "files.trimFinalNewlines": true, - "files.associations": { - "docs/macros.txt": "restructuredtext", - "docs/units.txt": "restructuredtext", - "wscript": "python", - "*linker_script_*.cmd": "linkerscript", - "*.h": "c", - "*.pp": "c", - "*.ppm": "c", - "*.ppr": "c", - "*.pprs": "c", - "tests/axivion/cafeCC.config": "xml", - "tests/axivion/architecture.gxl": "xml", - "tests/axivion/mapping.gxl": "xml" - }, - "axivion.pathMappings": [ - { - "analysisProject": "{{ AXIVION_VS_CONFIG['analysisProject'] }}", - "localPath": "{{ AXIVION_VS_CONFIG['localPath'] }}" - } - ] -} diff --git a/tools/ide/vscode/snippets/c.json b/tools/ide/vscode/snippets/c.json index d742410e..6ee21763 100644 --- a/tools/ide/vscode/snippets/c.json +++ b/tools/ide/vscode/snippets/c.json @@ -1,32 +1,32 @@ { - "For Strings Loop": { - "prefix": [ - "for-strings" - ], - "body": [ - "for (uint8_t s = 0u; s < BS_NR_OF_STRINGS; s++) {", - "}" - ], - "description": "For loop to iterate over the number of strings." - }, - "For Modules Loop": { - "prefix": [ - "for-modules" - ], - "body": [ - "for (uint8_t m = 0u; m < BS_NR_OF_MODULES_PER_STRING; m++) {", - "}" - ], - "description": "For loop to iterate over the number of modules per string." - }, - "For Cells per Module Loop": { - "prefix": [ - "for-cells-per-module" - ], - "body": [ - "for (uint8_t c = 0u; c < BS_NR_OF_CELL_BLOCKS_PER_MODULE; c++) {", - "}" - ], - "description": "For loop to iterate over the number of cells per module." - } + "For Cells per Module Loop": { + "body": [ + "for (uint8_t cb = 0u; cb < BS_NR_OF_CELL_BLOCKS_PER_MODULE; cc++) {", + "}" + ], + "description": "For loop to iterate over the number of cells per module.", + "prefix": [ + "for-cells-per-module" + ] + }, + "For Modules Loop": { + "body": [ + "for (uint8_t m = 0u; m < BS_NR_OF_MODULES_PER_STRING; m++) {", + "}" + ], + "description": "For loop to iterate over the number of modules per string.", + "prefix": [ + "for-modules" + ] + }, + "For Strings Loop": { + "body": [ + "for (uint8_t s = 0u; s < BS_NR_OF_STRINGS; s++) {", + "}" + ], + "description": "For loop to iterate over the number of strings.", + "prefix": [ + "for-strings" + ] + } } diff --git a/tools/ide/vscode/snippets/python.json b/tools/ide/vscode/snippets/python.json index 7ded3e29..7bac7ad5 100644 --- a/tools/ide/vscode/snippets/python.json +++ b/tools/ide/vscode/snippets/python.json @@ -1,21 +1,21 @@ { - "main": { - "prefix": [ - "main-simple" - ], - "body": [ - "#!/usr/bin/env python3", - "# -*- coding: utf-8 -*-", - "", - "", - "def main():", - " pass", - "", - "", - "if __name__ == \"__main__\":", - " main()", - "" - ], - "description": "simple main" - } + "main": { + "body": [ + "#!/usr/bin/env python3", + "# -*- coding: utf-8 -*-", + "", + "", + "def main():", + " pass", + "", + "", + "if __name__ == \"__main__\":", + " main()", + "" + ], + "description": "simple main", + "prefix": [ + "main-simple" + ] + } } diff --git a/tools/ide/vscode/src/c_cpp_properties.json b/tools/ide/vscode/src/c_cpp_properties.json new file mode 100644 index 00000000..f43be9a0 --- /dev/null +++ b/tools/ide/vscode/src/c_cpp_properties.json @@ -0,0 +1,24 @@ +{ + "env": { + "ProjectIncludePath": [] + }, + "configurations": [ + { + "name": "Win32", + "includePath": [ + "${ProjectIncludePath}" + ], + "browse": { + "path": [ + "${ProjectIncludePath}" + ], + "limitSymbolsToIncludedHeaders": true + }, + "cStandard": "c11", + "compilerPath": "compilerPath-place-holder", + "defines": [], + "intelliSenseMode": "windows-gcc-x64" + } + ], + "version": 4 +} diff --git a/tools/ide/vscode/src/s-project-include-path.txt b/tools/ide/vscode/src/s-project-include-path.txt new file mode 100644 index 00000000..963e44ab --- /dev/null +++ b/tools/ide/vscode/src/s-project-include-path.txt @@ -0,0 +1,61 @@ +@@ROOT@@/build/bin/src/app/main +@@ROOT@@/build/bin/src/hal/include +@@ROOT@@/build/bin/src/hal/source +@@ROOT@@/src/app/application/algorithm +@@ROOT@@/src/app/application/algorithm/config +@@ROOT@@/src/app/application/algorithm/moving_average +@@ROOT@@/src/app/application/algorithm/state_estimation/ +@@ROOT@@/src/app/application/bal +@@ROOT@@/src/app/application/bms +@@ROOT@@/src/app/application/config +@@ROOT@@/src/app/application/plausibility +@@ROOT@@/src/app/application/redundancy +@@ROOT@@/src/app/application/soa +@@ROOT@@/src/app/driver/adc +@@ROOT@@/src/app/driver/can +@@ROOT@@/src/app/driver/can/cbs +@@ROOT@@/src/app/driver/can/cbs/rx +@@ROOT@@/src/app/driver/can/cbs/tx-async +@@ROOT@@/src/app/driver/can/cbs/tx-cyclic +@@ROOT@@/src/app/driver/checksum +@@ROOT@@/src/app/driver/config +@@ROOT@@/src/app/driver/contactor +@@ROOT@@/src/app/driver/crc +@@ROOT@@/src/app/driver/dma +@@ROOT@@/src/app/driver/foxmath +@@ROOT@@/src/app/driver/fram +@@ROOT@@/src/app/driver/htsensor +@@ROOT@@/src/app/driver/i2c +@@ROOT@@/src/app/driver/imd +@@ROOT@@/src/app/driver/interlock +@@ROOT@@/src/app/driver/io +@@ROOT@@/src/app/driver/led +@@ROOT@@/src/app/driver/mcu +@@ROOT@@/src/app/driver/meas +@@ROOT@@/src/app/driver/pex +@@ROOT@@/src/app/driver/pwm +@@ROOT@@/src/app/driver/rtc +@@ROOT@@/src/app/driver/sbc +@@ROOT@@/src/app/driver/sbc/fs8x_driver +@@ROOT@@/src/app/driver/spi +@@ROOT@@/src/app/driver/sps +@@ROOT@@/src/app/driver/ts +@@ROOT@@/src/app/driver/ts/api +@@ROOT@@/src/app/driver/ts/epcos/b57251v5103j060 +@@ROOT@@/src/app/driver/ts/epcos/b57861s0103f045 +@@ROOT@@/src/app/driver/ts/fake/none +@@ROOT@@/src/app/driver/ts/murata/ncxxxxh103 +@@ROOT@@/src/app/driver/ts/vishay/ntcalug01a103g +@@ROOT@@/src/app/driver/ts/vishay/ntcle317e4103sba +@@ROOT@@/src/app/engine/config +@@ROOT@@/src/app/engine/database +@@ROOT@@/src/app/engine/diag +@@ROOT@@/src/app/engine/diag/cbs +@@ROOT@@/src/app/engine/hw_info +@@ROOT@@/src/app/engine/sys +@@ROOT@@/src/app/engine/sys_mon +@@ROOT@@/src/app/main/include +@@ROOT@@/src/app/main/include/config +@@ROOT@@/src/app/task/config +@@ROOT@@/src/app/task/ftask +@@ROOT@@/src/app/task/os diff --git a/tools/ide/vscode/src/settings.json b/tools/ide/vscode/src/settings.json new file mode 100644 index 00000000..68ddd46e --- /dev/null +++ b/tools/ide/vscode/src/settings.json @@ -0,0 +1,69 @@ +{ + "C_Cpp.autoAddFileAssociations": true, + "C_Cpp.clang_format_fallbackStyle": "none", + "C_Cpp.clang_format_style": "file", + "[c]": { + "editor.formatOnSave": true, + "editor.rulers": [ + { + "column": 79 + }, + { + "color": "#ff0000", + "column": 119 + } + ], + "files.encoding": "iso88591" + }, + "[python]": { + "editor.formatOnSave": true, + "editor.rulers": [ + 79 + ], + "files.encoding": "utf8" + }, + "editor.bracketPairColorization.enabled": true, + "editor.formatOnSave": true, + "editor.guides.bracketPairs": "active", + "editor.insertSpaces": true, + "editor.rulers": [ + 79 + ], + "editor.tabSize": 4, + "extensions.ignoreRecommendations": true, + "files.associations": { + "*.h": "c", + "*linker_script_*.cmd": "linkerscript", + "wscript": "python" + }, + "files.autoGuessEncoding": true, + "files.encoding": "iso88591", + "files.exclude": { + "**/.git": true, + "**/.svn": true, + "**/.hg": true, + "**/CVS": true, + "**/.DS_Store": true, + "**/Thumbs.db": true + }, + "files.insertFinalNewline": true, + "files.trimFinalNewlines": true, + "files.trimTrailingWhitespace": true, + "files.watcherExclude": { + "**/.git/objects/**": true, + "**/.git/subtree-cache/**": true, + "**/node_modules/*/**": true, + "**/.hg/store/**": true + }, + "pylint.args": [ + "place-holder" + ], + "python.analysis.extraPaths": [], + "python.terminal.activateEnvironment": false, + "search.exclude": { + "**/node_modules": true, + "**/bower_components": true, + "**/*.code-search": true + }, + "terminal.integrated.persistentSessionReviveProcess": "never" +} diff --git a/tools/ide/vscode/src/tasks.json b/tools/ide/vscode/src/tasks.json new file mode 100644 index 00000000..1aea6e10 --- /dev/null +++ b/tools/ide/vscode/src/tasks.json @@ -0,0 +1,139 @@ +{ + "tasks": [ + { + "label": "Embedded: Build binary", + "detail": "Task to build the embedded binary", + "type": "process", + "group": { + "isDefault": false, + "kind": "build" + }, + "command": "fox-wrapper-place-holder", + "args": [ + "waf", + "build_bin", + "-c", + "yes" + ], + "problemMatcher": [ + { + "applyTo": "allDocuments", + "owner": "cpp", + "severity": "warning", + "fileLocation": [ + "place-holder" + ], + "pattern": { + "regexp": "^\"(.*)\",.line (\\d+):\\s+(remark)\\s+(.*):\\s+(.*)$", + "file": 1, + "line": 2, + "code": 4, + "message": 5 + } + }, + { + "applyTo": "allDocuments", + "owner": "cpp", + "fileLocation": [ + "place-holder" + ], + "pattern": { + "regexp": "^\"(.*)\",.line (\\d+):\\s+(warning|error)\\s+(.*):\\s+(.*)$", + "file": 1, + "line": 2, + "severity": 3, + "code": 4, + "message": 5 + } + } + ], + "options": { + "cwd": "place-holder" + } + }, + { + "label": "Embedded: Build binary verbose", + "detail": "Task to build the embedded binary in verbose mode", + "type": "process", + "group": "build", + "command": "fox-wrapper-place-holder", + "args": [ + "waf", + "build_bin", + "-v", + "-c", + "yes" + ], + "problemMatcher": [ + { + "applyTo": "allDocuments", + "owner": "cpp", + "severity": "warning", + "fileLocation": [ + "place-holder" + ], + "pattern": { + "regexp": "^\"(.*)\",.line (\\d+):\\s+(remark)\\s+(.*):\\s+(.*)$", + "file": 1, + "line": 2, + "code": 4, + "message": 5 + } + }, + { + "applyTo": "allDocuments", + "owner": "cpp", + "fileLocation": [ + "place-holder" + ], + "pattern": { + "regexp": "^\"(.*)\",.line (\\d+):\\s+(warning|error)\\s+(.*):\\s+(.*)$", + "file": 1, + "line": 2, + "severity": 3, + "code": 4, + "message": 5 + } + } + ], + "options": { + "cwd": "place-holder" + } + }, + { + "label": "Project: Configure", + "detail": "Task to configure the project", + "type": "process", + "group": "build", + "command": "fox-wrapper-place-holder", + "args": [ + "waf", + "configure", + "-c", + "yes" + ], + "problemMatcher": [], + "options": { + "cwd": "place-holder" + } + }, + { + "label": "Clean: Clean target binary", + "detail": "Task to clean the target build artifacts", + "type": "process", + "group": "build", + "command": "fox-wrapper-place-holder", + "args": [ + "waf", + "clean_bin", + "-c", + "yes" + ], + "problemMatcher": [], + "options": { + "cwd": "place-holder" + } + } + ], + "version": "2.0.0" +} diff --git a/tools/ide/vscode/tasks.json.jinja2 b/tools/ide/vscode/tasks.json.jinja2 deleted file mode 100644 index 22d1ccf2..00000000 --- a/tools/ide/vscode/tasks.json.jinja2 +++ /dev/null @@ -1,322 +0,0 @@ -{ - "version": "2.0.0", - "tasks": [ - { - "label": "Build:All", - "type": "process", - "group": "build", - "command": "{{ WAF_WRAPPER_SCRIPT }}", - "args": [ - "build_all", - "-c", - "yes" - ], - "problemMatcher": [] - }, - { - "label": "Build:Binary", - "type": "process", - "group": "build", - "command": "{{ WAF_WRAPPER_SCRIPT }}", - "args": [ - "build_bin", - "-c", - "yes" - ], - "problemMatcher": [ - { - "applyTo": "allDocuments", - "owner": "cpp", - "severity": "warning", - "fileLocation": [ - "autoDetect", - "${workspaceFolder}" - ], - "pattern": { - "regexp": "^\"(.*)\",.line (\\d+):\\s+(remark)\\s+(.*):\\s+(.*)$", - "file": 1, - "line": 2, - "code": 4, - "message": 5 - } - }, - { - "applyTo": "allDocuments", - "owner": "cpp", - "fileLocation": [ - "autoDetect", - "${workspaceFolder}" - ], - "pattern": { - "regexp": "^\"(.*)\",.line (\\d+):\\s+(warning|error)\\s+(.*):\\s+(.*)$", - "file": 1, - "line": 2, - "severity": 3, - "code": 4, - "message": 5 - } - } - ] - }, - { - "label": "Build:Binary verbose", - "type": "process", - "group": "build", - "command": "{{ WAF_WRAPPER_SCRIPT }}", - "args": [ - "build_bin", - "-v", - "-c", - "yes" - ], - "problemMatcher": [] - }, - { - "label": "Build:Documentation", - "type": "process", - "group": "build", - "command": "{{ WAF_WRAPPER_SCRIPT }}", - "args": [ - "build_docs", - "-c", - "yes" - ], - "problemMatcher": [ - { - "applyTo": "allDocuments", - "owner": "doxygen", - "severity": "warning", - "fileLocation": [ - "autoDetect", - "${workspaceFolder}" - ], - "pattern": { - "regexp": "^(.*):(\\d+):\\s+(warning):\\s+(.*)$", - "file": 1, - "line": 2, - "message": 4 - } - }, - { - "applyTo": "allDocuments", - "owner": "doxygen", - "severity": "error", - "fileLocation": [ - "autoDetect", - "${workspaceFolder}" - ], - "pattern": { - "regexp": "^(.*):(\\d+):\\s+(error):\\s+(.*)$", - "file": 1, - "line": 2, - "message": 4 - } - } - ] - }, - { - "label": "Build:Unit test", - "type": "process", - "group": "build", - "command": "{{ WAF_WRAPPER_SCRIPT }}", - "args": [ - "build_unit_test", - "-c", - "yes" - ], - "problemMatcher": [] - }, - { - "label": "Build:Unit test:Coverage", - "type": "process", - "group": "build", - "command": "{{ WAF_WRAPPER_SCRIPT }}", - "args": [ - "build_unit_test", - "--coverage", - "-c", - "yes" - ], - "problemMatcher": [] - }, - { - "label": "Configure", - "type": "process", - "group": "build", - "command": "{{ WAF_WRAPPER_SCRIPT }}", - "args": [ - "configure", - "-c", - "yes" - ], - "problemMatcher": [] - }, - { - "label": "Clean:Binary", - "type": "process", - "group": "build", - "command": "{{ WAF_WRAPPER_SCRIPT }}", - "args": [ - "clean_bin", - "-c", - "yes" - ], - "problemMatcher": [] - }, - { - "label": "Clean:Unit test", - "type": "process", - "group": "build", - "command": "{{ WAF_WRAPPER_SCRIPT }}", - "args": [ - "clean_unit_test", - "-c", - "yes" - ], - "problemMatcher": [] - }, - { - "label": "Clean:All", - "type": "process", - "group": "build", - "command": "{{ WAF_WRAPPER_SCRIPT }}", - "args": [ - "clean_all", - "-c", - "yes" - ], - "problemMatcher": [] - }, - { - "label": "Clean:Documentation", - "type": "process", - "group": "build", - "command": "{{ WAF_WRAPPER_SCRIPT }}", - "args": [ - "clean_docs", - "-c", - "yes" - ], - "problemMatcher": [] - }, - { - "label": "Clean:Distclean", - "type": "process", - "group": "build", - "command": "{{ WAF_WRAPPER_SCRIPT }}", - "args": [ - "distclean", - "-c", - "yes" - ], - "problemMatcher": [] - }, - {% if AXIVION_CONFIG is not none %} - { - "label": "Run:Axivion configuration", - "type": "process", - "group": "build", - "command": "{{ AXIVION_CONFIG_EXE }}", - "args": [ - "${workspaceFolder}/tests/axivion" - ], - "problemMatcher": [] - }, - {% endif %} - {% if AXIVION_START_ANALYSIS is not none %} - { - "label": "Run:Axivion Analysis", - "type": "process", - "group": "build", - "command": "{{ AXIVION_START_ANALYSIS }}", - "problemMatcher": [] - }, - {% endif %} - {% if AXIVION_START_DASHBOARD is not none %} - { - "label": "Run:Start Axivion Dashboard", - "type": "process", - "group": "build", - "command": "{{ AXIVION_START_DASHBOARD }}", - "problemMatcher": [] - }, - {% endif %} - { - "label": "Run:Guidelines and style guide check", - "type": "process", - "group": "build", - "command": "{{ WAF_WRAPPER_SCRIPT }}", - "args": [ - "check_guidelines", - "-c", - "yes" - ], - "problemMatcher": [ - { - "applyTo": "allDocuments", - "owner": "pylint", - "severity": "error", - "fileLocation": [ - "autoDetect", - "${workspaceFolder}" - ], - "pattern": { - "regexp": "^(.*):(\\d+):(\\d+):\\s+(.*):\\s+(.*)$", - "file": 1, - "line": 2, - "column": 3, - "code": 4, - "message": 5 - } - } - ] - {% if JFLASH|length >= 1 %} - }, - { - "label": "Flash:Binary", - "type": "process", - "group": "build", - "command": "{{ WAF_WRAPPER_SCRIPT }}", - "args": [ - "install_bin", - "-c", - "yes" - ], - "problemMatcher": [ - { - "applyTo": "allDocuments", - "owner": "cpp", - "severity": "warning", - "fileLocation": [ - "autoDetect", - "${workspaceFolder}" - ], - "pattern": { - "regexp": "^\"(.*)\",.line (\\d+):\\s+(remark)\\s+(.*):\\s+(.*)$", - "file": 1, - "line": 2, - "code": 4, - "message": 5 - } - }, - { - "applyTo": "allDocuments", - "owner": "cpp", - "fileLocation": [ - "autoDetect", - "${workspaceFolder}" - ], - "pattern": { - "regexp": "^\"(.*)\",.line (\\d+):\\s+(warning|error)\\s+(.*):\\s+(.*)$", - "file": 1, - "line": 2, - "severity": 3, - "code": 4, - "message": 5 - } - } - ] - {% endif %} - } - ] -} diff --git a/tools/precharge/precharge_dimensioning.ipynb b/tools/precharge/precharge_dimensioning.ipynb index 0b6f7b46..cd39996d 100644 --- a/tools/precharge/precharge_dimensioning.ipynb +++ b/tools/precharge/precharge_dimensioning.ipynb @@ -1,5 +1,5 @@ { - "cells": [ + "cells": [ { "attachments": {}, "cell_type": "markdown", diff --git a/tools/utils/README.md b/tools/utils/README.md index cf18d4da..7f9d8f23 100644 --- a/tools/utils/README.md +++ b/tools/utils/README.md @@ -4,12 +4,9 @@ This directory and its subdirectories contain batch and shell script helper scripts. The ``bash`` directory contains bash scripts while ``cmd`` scripts contains batch scripts. -| Script | Purpose | -|:----------------------------------|:------------------------------------------------------------------------------| -| ``bash/find_base_conda.sh`` | Searches for the base conda installation in common installation directories. | -| ``bash/run-python-script.sh`` | Runs a python script by passing all arguments verbatim to python. | -| ``cmd/find_base_conda.bat`` | Searches for the base conda installation in common installation directories. | -| ``cmd/find_git.bat`` | Searches for a git installation in common installation directories. | -| ``cmd/run-python.bat`` | Opens an interactive python shell (no arguments get passed to python). | -| ``cmd/run-python-coverage.bat`` | Runs the coverage tool (no arguments get passed to the tool). | -| ``cmd/run-python-script.bat`` | Runs a python script by passing all arguments verbatim to python. | +| Script | Purpose | +|:----------------------------------- |:------------------------------------------------------------------------------| +| ``generate_missing_test_files.py`` | TODO | +| ``list_prefixes.py`` | TODO | +| ``update_doxygen_header.py`` | TODO | +| ``update_version.py`` | TODO | diff --git a/tools/utils/bash/dir_shall_not_exist.sh b/tools/utils/bash/dir_shall_not_exist.sh deleted file mode 100644 index f3ea16b4..00000000 --- a/tools/utils/bash/dir_shall_not_exist.sh +++ /dev/null @@ -1,48 +0,0 @@ -#!/usr/bin/env bash -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -set -e - -if [ -d "$1" ]; then - # directory exists - exit 1 -else - # directory does not exist - exit 0 -fi diff --git a/tools/utils/bash/find_base_conda.sh b/tools/utils/bash/find_base_conda.sh deleted file mode 100755 index 8ac4f8d4..00000000 --- a/tools/utils/bash/find_base_conda.sh +++ /dev/null @@ -1,205 +0,0 @@ -#!/usr/bin/env bash -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -function _win32_get_vars() { - # get conda environment name - SCRIPTDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" - CONDA_ENV_FILE=$(readlink -f "${SCRIPTDIR}/../../../conf/env/conda_env_win32.yaml") - LINE_WITH_NAME=`sed '1q;d' $CONDA_ENV_FILE` - CONDA_DEVELOPMENT_ENVIRONMENT_NAME=`echo "$LINE_WITH_NAME" | cut -d":" -f 2 | xargs` - - # miniconda installation directories - if [[ $USERPROFILE = *" "* ]]; then - MINICONDA_DIRECTORIES=($SYSTEMDRIVE/miniconda3/ $ProgramData/miniconda3/) - else - MINICONDA_DIRECTORIES=($USERPROFILE/miniconda3/ $LOCALAPPDATA/miniconda3/ $LOCALAPPDATA/Continuum/miniconda3/ $SYSTEMDRIVE/miniconda3/ $ProgramData/miniconda3/) - fi - - # Activate script path (relative to the environment directory) - # File extension not necessary as .bat are executable by default on Windows - # (and the activate script is a batch script) - ACTIVATE_SCRIPT=Scripts/activate - - # Loop over all known default installation directories of miniconda - # If we find a matching activate script, we assume it is a conda valid - # environment - BASE_ENVS_FOUND=() - for env in "${MINICONDA_DIRECTORIES[@]}" - do - if [ -f "$env$ACTIVATE_SCRIPT" ]; then - BASE_ENVS_FOUND+=("$env") - fi - done - - if [ ${#BASE_ENVS_FOUND[@]} -eq 0 ]; then - echo "Could not find conda environment in default directories [${MINICONDA_DIRECTORIES[@]}]" - echo "Exiting..." - exit 1 - fi - - # Loop over all found conda base environments and check if there is an - # environment with the correct name that includes a python.exe - ENVSDIR="envs/" - DEVEL_ENV_FOUND="" - for base_env in "${BASE_ENVS_FOUND[@]}" - do - if [ -f "$base_env$ENVSDIR$CONDA_DEVELOPMENT_ENVIRONMENT_NAME/python.exe" ]; then - DEVEL_ENV_FOUND="$base_env" - break - fi - if [ -f "${HOME}/.conda/${ENVSDIR}${CONDA_DEVELOPMENT_ENVIRONMENT_NAME}/python.exe" ]; then - DEVEL_ENV_FOUND="$base_env" - break - fi - done - - # maybe we found the enviroment name not, but maybe this is on purpose as - # the user wants to run an conda environment update - if [ "${1}" == "update" ]; then - DEVEL_ENV_FOUND="$base_env" - fi - - if [ -z "${DEVEL_ENV_FOUND}" ]; then - echo "Could not find conda development environment directories [${BASE_ENVS_FOUND}]" - echo "Run '$SCRIPTDIR/../conda-update-env.sh'" - echo "Exiting..." - exit 1 - fi - - CONDA_BASE_ENVIRONMENT_INCLUDING_DEVELOPMENT_ENVIRONMENT=$DEVEL_ENV_FOUND - CONDA_BASE_ENVIRONMENT_ACTIVATE_SCRIPT=$DEVEL_ENV_FOUND$ACTIVATE_SCRIPT - CONDA_DEVELOPMENT_ENVIRONMENT_NAME=$CONDA_DEVELOPMENT_ENVIRONMENT_NAME - CONDA_DEVELOPMENT_ENVIRONMENT_CONFIGURATION_FILE=$CONDA_ENV_FILE -} - -function _linux_get_vars() { - # get conda environment name - SCRIPTDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" - CONDA_ENV_FILE=$(readlink -f "${SCRIPTDIR}/../../../conf/env/conda_env_linux.yaml") - LINE_WITH_NAME=`sed '1q;d' $CONDA_ENV_FILE` - CONDA_DEVELOPMENT_ENVIRONMENT_NAME=`echo "$LINE_WITH_NAME" |tr -d '\r' | cut -d":" -f 2 | xargs` - - # miniconda installation directories - MINICONDA_DIRECTORIES=(~/miniconda3/ /opt/miniconda3/) - - # Activate script path (relative to the environment directory) - # File extension not necessary as .bat are executable by default on Windows - # (and the activate script is a batch script) - ACTIVATE_SCRIPT=bin/activate - - # Loop over all known default installation directories of miniconda - # If we find a matching activate script, we assume it is a conda valid - # environment - BASE_ENVS_FOUND=() - for env in "${MINICONDA_DIRECTORIES[@]}" - do - if [ -f "$env$ACTIVATE_SCRIPT" ]; then - BASE_ENVS_FOUND+=("$env") - fi - done - if [ ${#BASE_ENVS_FOUND[@]} -eq 0 ]; then - echo "Could not find conda environment in default directories [${MINICONDA_DIRECTORIES[@]}]" - echo "Exiting..." - exit 1 - fi - - # Loop over all found conda base environments and check if there is an - # environment with the correct name that includes a python.exe - ENVSDIR="envs" - DEVEL_ENV_FOUND="" - for base_env in "${BASE_ENVS_FOUND[@]}" - do - if [ -f "${HOME}/miniconda3/${ENVSDIR}/${CONDA_DEVELOPMENT_ENVIRONMENT_NAME}/bin/python" ]; then - DEVEL_ENV_FOUND="$base_env" - break - fi - if [ -f "${HOME}/.conda/${ENVSDIR}/${CONDA_DEVELOPMENT_ENVIRONMENT_NAME}/bin/python" ]; then - DEVEL_ENV_FOUND="$base_env" - break - fi - if [ -f "${base_env}/${ENVSDIR}/${CONDA_DEVELOPMENT_ENVIRONMENT_NAME}/bin/python" ]; then - DEVEL_ENV_FOUND="$base_env" - break - fi - done - - # maybe we found the enviroment name not, but maybe this is on purpose as - # the user wants to run an conda environment update - if [ "${1}" == "update" ]; then - DEVEL_ENV_FOUND="$base_env" - fi - - if [ -z "${DEVEL_ENV_FOUND}" ]; then - echo "Could not find conda development environment directories [${BASE_ENVS_FOUND}]" - echo "Run '$SCRIPTDIR/../conda-update-env.sh'" - echo "Exiting..." - exit 1 - fi - CONDA_BASE_ENVIRONMENT_INCLUDING_DEVELOPMENT_ENVIRONMENT=$DEVEL_ENV_FOUND - CONDA_BASE_ENVIRONMENT_ACTIVATE_SCRIPT=$DEVEL_ENV_FOUND$ACTIVATE_SCRIPT - CONDA_DEVELOPMENT_ENVIRONMENT_NAME=$CONDA_DEVELOPMENT_ENVIRONMENT_NAME - CONDA_DEVELOPMENT_ENVIRONMENT_CONFIGURATION_FILE=$CONDA_ENV_FILE -} - -set -e -# MacOS -if [ "$(uname)" == "Darwin" ]; then - echo "MacOS is currently not supported." - exit 1 -# Linux -elif [ "$(expr substr $(uname -s) 1 5)" == "Linux" ]; then - _linux_get_vars $1 - echo $CONDA_BASE_ENVIRONMENT_INCLUDING_DEVELOPMENT_ENVIRONMENT - echo $CONDA_BASE_ENVIRONMENT_ACTIVATE_SCRIPT - echo $CONDA_DEVELOPMENT_ENVIRONMENT_NAME - echo $CONDA_DEVELOPMENT_ENVIRONMENT_CONFIGURATION_FILE -# Windows -elif [ "$(expr substr $(uname -s) 1 9)" == "CYGWIN_NT" ]; then - echo "Cygwin is not supported." - exit 1 -elif [ "$(expr substr $(uname -s) 1 10)" == "MINGW32_NT" ]; then - echo "32bit Windows is not supported." - exit 1 -elif [ "$(expr substr $(uname -s) 1 10)" == "MINGW64_NT" ] || [ "$(expr substr $(uname -s) 1 7)" == "MSYS_NT" ] ; then - _win32_get_vars $1 - echo $CONDA_BASE_ENVIRONMENT_INCLUDING_DEVELOPMENT_ENVIRONMENT - echo $CONDA_BASE_ENVIRONMENT_ACTIVATE_SCRIPT - echo $CONDA_DEVELOPMENT_ENVIRONMENT_NAME - echo $CONDA_DEVELOPMENT_ENVIRONMENT_CONFIGURATION_FILE -fi diff --git a/tools/utils/bash/find_ccs.sh b/tools/utils/bash/find_ccs.sh deleted file mode 100644 index 66987f12..00000000 --- a/tools/utils/bash/find_ccs.sh +++ /dev/null @@ -1,103 +0,0 @@ -#!/usr/bin/env bash -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -function _win32_find_ccs() { - TI_DIR="/${SYSTEMDRIVE:0:1}/ti" - CCS_DIRS=`ls --directory $TI_DIR/ccs*` - CCS_VERSION=0 - for i in $CCS_DIRS - do - NUMBER=$(echo "$i" | tr -dc '0-9') - if [ "$NUMBER" -gt "$CCS_VERSION" ]; then - CCS_VERSION=$NUMBER - fi - done - COMPILER_VERSION=`ls --directory $TI_DIR/ccs$CCS_VERSION/ccs/tools/compiler/ti-cgt-arm_* | xargs -n 1 basename` - CCS_COMPILER_BIN=$TI_DIR/ccs$CCS_VERSION/ccs/tools/compiler/$COMPILER_VERSION/bin - CCS_COMPILER_LIB=$TI_DIR/ccs$CCS_VERSION/ccs/tools/compiler/$COMPILER_VERSION/lib - CCS_UTILS_CYGWIN=$TI_DIR/ccs$CCS_VERSION/ccs/utils/bin - CCS_UTILS_BIN=$TI_DIR/ccs$CCS_VERSION/ccs/utils/cygwin - CCS_UTILS_TIOBJ2BIN=$TI_DIR/ccs$CCS_VERSION/ccs/utils/tiobj2bin -} - -function _linux_find_ccs() { - TI_DIR="/opt/ti" - CCS_DIRS=`ls --directory $TI_DIR/ccs*` - CCS_VERSION=0 - for i in $CCS_DIRS - do - NUMBER=$(echo "$i" | tr -dc '0-9') - if [ "$NUMBER" -gt "$CCS_VERSION" ]; then - CCS_VERSION=$NUMBER - fi - done - COMPILER_VERSION=`ls --directory $TI_DIR/ccs$CCS_VERSION/ccs/tools/compiler/ti-cgt-arm_* | xargs -n 1 basename` - CCS_COMPILER_BIN=$TI_DIR/ccs$CCS_VERSION/ccs/tools/compiler/$COMPILER_VERSION/bin - CCS_COMPILER_LIB=$TI_DIR/ccs$CCS_VERSION/ccs/tools/compiler/$COMPILER_VERSION/lib - CCS_UTILS_BIN=$TI_DIR/ccs$CCS_VERSION/ccs/utils/cygwin - CCS_UTILS_TIOBJ2BIN=$TI_DIR/ccs$CCS_VERSION/ccs/utils/tiobj2bin -} - -set -e -# MacOS -if [ "$(uname)" == "Darwin" ]; then - echo "MacOS is currently not supported." - exit 1 -# Linux -elif [ "$(expr substr $(uname -s) 1 5)" == "Linux" ]; then - _linux_find_ccs - echo $CCS_COMPILER_BIN - echo $CCS_COMPILER_LIB - echo $CCS_UTILS_BIN - echo $CCS_UTILS_TIOBJ2BIN -# Windows -elif [ "$(expr substr $(uname -s) 1 9)" == "CYGWIN_NT" ]; then - echo "Cygwin is not supported." - exit 1 -elif [ "$(expr substr $(uname -s) 1 10)" == "MINGW32_NT" ]; then - echo "32bit Windows is not supported." - exit 1 -elif [ "$(expr substr $(uname -s) 1 10)" == "MINGW64_NT" ] || [ "$(expr substr $(uname -s) 1 7)" == "MSYS_NT" ] ; then - _win32_find_ccs - echo $CCS_COMPILER_BIN - echo $CCS_COMPILER_LIB - echo $CCS_UTILS_BIN - echo $CCS_UTILS_CYGWIN - echo $CCS_UTILS_TIOBJ2BIN -fi diff --git a/tools/utils/bash/run-python-script.sh b/tools/utils/bash/run-python-script.sh deleted file mode 100755 index 041ddf2b..00000000 --- a/tools/utils/bash/run-python-script.sh +++ /dev/null @@ -1,115 +0,0 @@ -#!/usr/bin/env bash -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -set -e -if [ $# -eq 0 ]; then - echo "No script file to run specified." - exit 1 -fi - -if [ ! -f $1 ]; then - echo "Script '$1' does not exist." - exit 1 -fi - -# MacOS -if [ "$(uname)" == "Darwin" ]; then - echo "MacOS is currently not supported." - exit 1 -# Linux -elif [ "$(expr substr $(uname -s) 1 5)" == "Linux" ]; then - SCRIPTDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" - while read -r line; do - PATHS_TO_ADD=`echo "${PATHS_TO_ADD}:$line"| sed --expression='s/^M/:/g'` - done < ${SCRIPTDIR}/../../../conf/env/paths_linux.txt - PATHS_TO_ADD=`echo $PATHS_TO_ADD | awk '{gsub("C:", "/c", $0); print}'` - PATHS_TO_ADD=$(echo "${PATHS_TO_ADD#?}" | tr '\\' '/') - export PATH=$PATHS_TO_ADD:$PATH - # call find_base_conda and make sure that we do not exit by printing - # the exit code to CONDA_VARS (otherwise we would exit with set -e, here - # we will not as echo returns exit code 0) - CONDA_VARS=$($SCRIPTDIR/../../../tools/utils/bash/find_base_conda.sh || echo $?) - if [ "${CONDA_VARS: -1}" == "1" ]; then - # strip the exit code that we have printed to CONDA_VARS and - # print the rest - echo "${CONDA_VARS: : -1}" - exit 1 - fi - CONDA_VARS_ARRAY=($CONDA_VARS) - CONDA_BASE_ENVIRONMENT_INCLUDING_DEVELOPMENT_ENVIRONMENT=${CONDA_VARS_ARRAY[0]} - CONDA_BASE_ENVIRONMENT_ACTIVATE_SCRIPT=${CONDA_VARS_ARRAY[1]} - CONDA_DEVELOPMENT_ENVIRONMENT_NAME=${CONDA_VARS_ARRAY[2]} - CONDA_DEVELOPMENT_ENVIRONMENT_CONFIGURATION_FILE=${CONDA_VARS_ARRAY[3]} - source $CONDA_BASE_ENVIRONMENT_ACTIVATE_SCRIPT base - conda activate ${CONDA_DEVELOPMENT_ENVIRONMENT_NAME} - set + # deactivate in any case the environment, therefore ignore errors - python "$1" "${@:2}" - set - - conda deactivate -# Windows -elif [ "$(expr substr $(uname -s) 1 9)" == "CYGWIN_NT" ]; then - echo "Cygwin is not supported." - exit 1 -elif [ "$(expr substr $(uname -s) 1 10)" == "MINGW32_NT" ]; then - echo "32bit Windows is not supported." - exit 1 -elif [ "$(expr substr $(uname -s) 1 10)" == "MINGW64_NT" ] || [ "$(expr substr $(uname -s) 1 7)" == "MSYS_NT" ] ; then - CODEPAGE=`chcp.com | sed 's/[^0-9]*//g'` - if [ "$CODEPAGE" != "850" ]; then - chcp.com 850 >/dev/null 2>&1 - fi - SCRIPTDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" - while read -r line; do - PATHS_TO_ADD=`echo "${PATHS_TO_ADD}:$line"| sed --expression='s/^M/:/g'` - done < ${SCRIPTDIR}/../../../conf/env/paths_win32.txt - PATHS_TO_ADD=`echo $PATHS_TO_ADD | awk '{gsub("C:", "/c", $0); print}'` - PATHS_TO_ADD=$(echo "${PATHS_TO_ADD#?}" | tr '\\' '/') - export PATH=$PATHS_TO_ADD:$PATH - CONDA_VARS=$($SCRIPTDIR/find_base_conda.sh) - CONDA_VARS_ARRAY=($CONDA_VARS) - CONDA_BASE_ENVIRONMENT_INCLUDING_DEVELOPMENT_ENVIRONMENT=${CONDA_VARS_ARRAY[0]} - CONDA_BASE_ENVIRONMENT_ACTIVATE_SCRIPT=${CONDA_VARS_ARRAY[1]} - CONDA_DEVELOPMENT_ENVIRONMENT_NAME=${CONDA_VARS_ARRAY[2]} - CONDA_DEVELOPMENT_ENVIRONMENT_CONFIGURATION_FILE=${CONDA_VARS_ARRAY[3]} - source $CONDA_BASE_ENVIRONMENT_ACTIVATE_SCRIPT base - conda activate ${CONDA_DEVELOPMENT_ENVIRONMENT_NAME} - python.exe "$1" "${@:2}" - conda deactivate - chcp.com $CODEPAGE >/dev/null 2>&1 -fi diff --git a/tools/utils/bash/run-python.sh b/tools/utils/bash/run-python.sh deleted file mode 100644 index 9df6abba..00000000 --- a/tools/utils/bash/run-python.sh +++ /dev/null @@ -1,105 +0,0 @@ -#!/usr/bin/env bash -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -set -e -# MacOS -if [ "$(uname)" == "Darwin" ]; then - echo "MacOS is currently not supported." - exit 1 -# Linux -elif [ "$(expr substr $(uname -s) 1 5)" == "Linux" ]; then - SCRIPTDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" - while read -r line; do - PATHS_TO_ADD=`echo "${PATHS_TO_ADD}:$line"| sed --expression='s/^M/:/g'` - done < ${SCRIPTDIR}/../../../conf/env/paths_linux.txt - PATHS_TO_ADD=`echo $PATHS_TO_ADD | awk '{gsub("C:", "/c", $0); print}'` - PATHS_TO_ADD=$(echo "${PATHS_TO_ADD#?}" | tr '\\' '/') - export PATH=$PATHS_TO_ADD:$PATH - # call find_base_conda and make sure that we do not exit by printing - # the exit code to CONDA_VARS (otherwise we would exit with set -e, here - # we will not as echo returns exit code 0) - CONDA_VARS=$($SCRIPTDIR/../../../tools/utils/bash/find_base_conda.sh || echo $?) - if [ "${CONDA_VARS: -1}" == "1" ]; then - # strip the exit code that we have printed to CONDA_VARS and - # print the rest - echo "${CONDA_VARS: : -1}" - exit 1 - fi - CONDA_VARS_ARRAY=($CONDA_VARS) - CONDA_BASE_ENVIRONMENT_INCLUDING_DEVELOPMENT_ENVIRONMENT=${CONDA_VARS_ARRAY[0]} - CONDA_BASE_ENVIRONMENT_ACTIVATE_SCRIPT=${CONDA_VARS_ARRAY[1]} - CONDA_DEVELOPMENT_ENVIRONMENT_NAME=${CONDA_VARS_ARRAY[2]} - CONDA_DEVELOPMENT_ENVIRONMENT_CONFIGURATION_FILE=${CONDA_VARS_ARRAY[3]} - source $CONDA_BASE_ENVIRONMENT_ACTIVATE_SCRIPT base - conda activate ${CONDA_DEVELOPMENT_ENVIRONMENT_NAME} - set + # deactivate in any case the environment, therefore ignore errors - python "$@" - set - - conda deactivate -# Windows -elif [ "$(expr substr $(uname -s) 1 9)" == "CYGWIN_NT" ]; then - echo "Cygwin is not supported." - exit 1 -elif [ "$(expr substr $(uname -s) 1 10)" == "MINGW32_NT" ]; then - echo "32bit Windows is not supported." - exit 1 -elif [ "$(expr substr $(uname -s) 1 10)" == "MINGW64_NT" ] || [ "$(expr substr $(uname -s) 1 7)" == "MSYS_NT" ] ; then - CODEPAGE=`chcp.com | sed 's/[^0-9]*//g'` - if [ "$CODEPAGE" != "850" ]; then - chcp.com 850 >/dev/null 2>&1 - fi - SCRIPTDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" - while read -r line; do - PATHS_TO_ADD=`echo "${PATHS_TO_ADD}:$line"| sed --expression='s/^M/:/g'` - done < ${SCRIPTDIR}/../../../conf/env/paths_win32.txt - PATHS_TO_ADD=`echo $PATHS_TO_ADD | awk '{gsub("C:", "/c", $0); print}'` - PATHS_TO_ADD=$(echo "${PATHS_TO_ADD#?}" | tr '\\' '/') - export PATH=$PATHS_TO_ADD:$PATH - CONDA_VARS=$($SCRIPTDIR/find_base_conda.sh) - CONDA_VARS_ARRAY=($CONDA_VARS) - CONDA_BASE_ENVIRONMENT_INCLUDING_DEVELOPMENT_ENVIRONMENT=${CONDA_VARS_ARRAY[0]} - CONDA_BASE_ENVIRONMENT_ACTIVATE_SCRIPT=${CONDA_VARS_ARRAY[1]} - CONDA_DEVELOPMENT_ENVIRONMENT_NAME=${CONDA_VARS_ARRAY[2]} - CONDA_DEVELOPMENT_ENVIRONMENT_CONFIGURATION_FILE=${CONDA_VARS_ARRAY[3]} - source $CONDA_BASE_ENVIRONMENT_ACTIVATE_SCRIPT base - conda activate ${CONDA_DEVELOPMENT_ENVIRONMENT_NAME} - python.exe "$@" - conda deactivate - chcp.com $CODEPAGE >/dev/null 2>&1 -fi diff --git a/tools/utils/bash/run-script.sh b/tools/utils/bash/run-script.sh deleted file mode 100644 index e30bf188..00000000 --- a/tools/utils/bash/run-script.sh +++ /dev/null @@ -1,110 +0,0 @@ -#!/usr/bin/env bash -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -set -e -if [ $# -eq 0 ]; then - echo "No script file to run specified." - exit 1 -fi - -# MacOS -if [ "$(uname)" == "Darwin" ]; then - echo "MacOS is currently not supported." - exit 1 -# Linux -elif [ "$(expr substr $(uname -s) 1 5)" == "Linux" ]; then - SCRIPTDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" - while read -r line; do - PATHS_TO_ADD=`echo "${PATHS_TO_ADD}:$line"| sed --expression='s/^M/:/g'` - done < ${SCRIPTDIR}/../../../conf/env/paths_linux.txt - PATHS_TO_ADD=`echo $PATHS_TO_ADD | awk '{gsub("C:", "/c", $0); print}'` - PATHS_TO_ADD=$(echo "${PATHS_TO_ADD#?}" | tr '\\' '/') - export PATH=$PATHS_TO_ADD:$PATH - # call find_base_conda and make sure that we do not exit by printing - # the exit code to CONDA_VARS (otherwise we would exit with set -e, here - # we will not as echo returns exit code 0) - CONDA_VARS=$($SCRIPTDIR/../../../tools/utils/bash/find_base_conda.sh || echo $?) - if [ "${CONDA_VARS: -1}" == "1" ]; then - # strip the exit code that we have printed to CONDA_VARS and - # print the rest - echo "${CONDA_VARS: : -1}" - exit 1 - fi - CONDA_VARS_ARRAY=($CONDA_VARS) - CONDA_BASE_ENVIRONMENT_INCLUDING_DEVELOPMENT_ENVIRONMENT=${CONDA_VARS_ARRAY[0]} - CONDA_BASE_ENVIRONMENT_ACTIVATE_SCRIPT=${CONDA_VARS_ARRAY[1]} - CONDA_DEVELOPMENT_ENVIRONMENT_NAME=${CONDA_VARS_ARRAY[2]} - CONDA_DEVELOPMENT_ENVIRONMENT_CONFIGURATION_FILE=${CONDA_VARS_ARRAY[3]} - source $CONDA_BASE_ENVIRONMENT_ACTIVATE_SCRIPT base - conda activate ${CONDA_DEVELOPMENT_ENVIRONMENT_NAME} - set + # deactivate in any case the environment, therefore ignore errors - "$1" "${@:2}" - set - - conda deactivate -# Windows -elif [ "$(expr substr $(uname -s) 1 9)" == "CYGWIN_NT" ]; then - echo "Cygwin is not supported." - exit 1 -elif [ "$(expr substr $(uname -s) 1 10)" == "MINGW32_NT" ]; then - echo "32bit Windows is not supported." - exit 1 -elif [ "$(expr substr $(uname -s) 1 10)" == "MINGW64_NT" ] || [ "$(expr substr $(uname -s) 1 7)" == "MSYS_NT" ] ; then - CODEPAGE=`chcp.com | sed 's/[^0-9]*//g'` - if [ "$CODEPAGE" != "850" ]; then - chcp.com 850 >/dev/null 2>&1 - fi - SCRIPTDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" - while read -r line; do - PATHS_TO_ADD=`echo "${PATHS_TO_ADD}:$line"| sed --expression='s/^M/:/g'` - done < ${SCRIPTDIR}/../../../conf/env/paths_win32.txt - PATHS_TO_ADD=`echo $PATHS_TO_ADD | awk '{gsub("C:", "/c", $0); print}'` - PATHS_TO_ADD=$(echo "${PATHS_TO_ADD#?}" | tr '\\' '/') - export PATH=$PATHS_TO_ADD:$PATH - CONDA_VARS=$($SCRIPTDIR/find_base_conda.sh) - CONDA_VARS_ARRAY=($CONDA_VARS) - CONDA_BASE_ENVIRONMENT_INCLUDING_DEVELOPMENT_ENVIRONMENT=${CONDA_VARS_ARRAY[0]} - CONDA_BASE_ENVIRONMENT_ACTIVATE_SCRIPT=${CONDA_VARS_ARRAY[1]} - CONDA_DEVELOPMENT_ENVIRONMENT_NAME=${CONDA_VARS_ARRAY[2]} - CONDA_DEVELOPMENT_ENVIRONMENT_CONFIGURATION_FILE=${CONDA_VARS_ARRAY[3]} - source $CONDA_BASE_ENVIRONMENT_ACTIVATE_SCRIPT base - conda activate ${CONDA_DEVELOPMENT_ENVIRONMENT_NAME} - "$1" "${@:2}" - conda deactivate - chcp.com $CODEPAGE >/dev/null 2>&1 -fi diff --git a/tools/utils/cmd/add_pcan_to_path.bat b/tools/utils/cmd/add_pcan_to_path.bat deleted file mode 100644 index a641f613..00000000 --- a/tools/utils/cmd/add_pcan_to_path.bat +++ /dev/null @@ -1,41 +0,0 @@ -@REM Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -@REM All rights reserved. -@REM -@REM SPDX-License-Identifier: BSD-3-Clause -@REM -@REM Redistribution and use in source and binary forms, with or without -@REM modification, are permitted provided that the following conditions are met: -@REM -@REM 1. Redistributions of source code must retain the above copyright notice, this -@REM list of conditions and the following disclaimer. -@REM -@REM 2. Redistributions in binary form must reproduce the above copyright notice, -@REM this list of conditions and the following disclaimer in the documentation -@REM and/or other materials provided with the distribution. -@REM -@REM 3. Neither the name of the copyright holder nor the names of its -@REM contributors may be used to endorse or promote products derived from -@REM this software without specific prior written permission. -@REM -@REM THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -@REM AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -@REM IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -@REM DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -@REM FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -@REM DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -@REM SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -@REM CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -@REM OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -@REM OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -@REM -@REM We kindly request you to use one or more of the following phrases to refer to -@REM foxBMS in your hardware, software, documentation or advertising materials: -@REM -@REM - "This product uses parts of foxBMS®" -@REM - "This product includes parts of foxBMS®" -@REM - "This product is derived from foxBMS®" - -@SET "PCAN_BASIC_API_PATH=%USERPROFILE%\PCAN-Basic API\x64" -@IF EXIST %PCAN_BASIC_API_PATH% ( - @SET PATH=%PATH%;%PCAN_BASIC_API_PATH% -) diff --git a/tools/utils/cmd/find_base_conda.bat b/tools/utils/cmd/find_base_conda.bat deleted file mode 100644 index 9cff7edc..00000000 --- a/tools/utils/cmd/find_base_conda.bat +++ /dev/null @@ -1,119 +0,0 @@ -@REM Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -@REM All rights reserved. -@REM -@REM SPDX-License-Identifier: BSD-3-Clause -@REM -@REM Redistribution and use in source and binary forms, with or without -@REM modification, are permitted provided that the following conditions are met: -@REM -@REM 1. Redistributions of source code must retain the above copyright notice, this -@REM list of conditions and the following disclaimer. -@REM -@REM 2. Redistributions in binary form must reproduce the above copyright notice, -@REM this list of conditions and the following disclaimer in the documentation -@REM and/or other materials provided with the distribution. -@REM -@REM 3. Neither the name of the copyright holder nor the names of its -@REM contributors may be used to endorse or promote products derived from -@REM this software without specific prior written permission. -@REM -@REM THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -@REM AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -@REM IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -@REM DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -@REM FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -@REM DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -@REM SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -@REM CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -@REM OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -@REM OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -@REM -@REM We kindly request you to use one or more of the following phrases to refer to -@REM foxBMS in your hardware, software, documentation or advertising materials: -@REM -@REM - "This product uses parts of foxBMS®" -@REM - "This product includes parts of foxBMS®" -@REM - "This product is derived from foxBMS®" - -@SETLOCAL enabledelayedexpansion - -@REM set working directory to script directory -@PUSHD %~dp0 - -@REM get conda environment name -@CALL :NORMALIZE_PATH "%~dp0..\..\..\conf\env\conda_env_win32.yaml" -@SET CONDA_ENV_FILE=%NORMALIZED_PATH% -@FOR /f "usebackq tokens=*" %%A IN ("%CONDA_ENV_FILE%") DO @( - @FOR /F "tokens=1" %%B IN ("%%A") DO @( - @IF "%%B" equ "name:" ( - @FOR /f "tokens=2" %%G IN ("%%A") DO @SET CONDA_DEVELOPMENT_ENVIRONMENT_NAME=%%G - ) - ) -) - -@REM miniconda installation directories -@IF NOT "%USERPROFILE%"=="%USERPROFILE: =%" @( - @SET MINICONDA_DIRECTORIES=%SystemDrive%\miniconda3\ %ProgramData%\miniconda3\ -) ELSE @( - @SET MINICONDA_DIRECTORIES=%USERPROFILE%\miniconda3\ %LOCALAPPDATA%\miniconda3\ %LOCALAPPDATA%\Continuum\miniconda3\ %SystemDrive%\miniconda3\ %ProgramData%\miniconda3\ -) - -@REM Activate script path (relative to the environment directory) -@REM File extension not necessary as .bat are executable by default on Windows -@REM (and the activate script is a batch script) -@SET ACTIVATE_SCRIPT=Scripts\activate.bat - -@REM Loop over all known default installation directories of miniconda -@REM If we find a matching activate script, we assume it is a conda valid -@REM environment -@SET BASE_ENVS_FOUND= -@FOR %%x IN (%MINICONDA_DIRECTORIES%) DO @( - @IF EXIST %%x%ACTIVATE_SCRIPT% ( - @SET BASE_ENVS_FOUND=!BASE_ENVS_FOUND! %%x - ) -) - -@IF "%BASE_ENVS_FOUND%"=="" ( - @ECHO Could not find conda environment in default directories [%MINICONDA_DIRECTORIES%] - @ECHO Exiting... - @EXIT /b 1 -) - -@REM Loop over all found conda base environments and check if there is an -@REM environment with the correct name that includes a python.exe -@SET DEVEL_ENV_FOUND= -@FOR %%x IN (%BASE_ENVS_FOUND%) DO @( - @IF EXIST %%xenvs\%CONDA_DEVELOPMENT_ENVIRONMENT_NAME%\python.exe ( - @SET DEVEL_ENV_FOUND=%%x - ) -) - -@REM maybe we found the enviroment name not, but maybe this is on purpose as -@REM the user wants to run an conda environment update -@IF "%1"=="update" ( - @FOR %%i in (%BASE_ENVS_FOUND%) do @( - @SET DEVEL_ENV_FOUND=%%i - @GOTO done - ) -) -:done - -@IF "%DEVEL_ENV_FOUND%"=="" ( - @ECHO Could not find conda development environment directories [%BASE_ENVS_FOUND%] - @ECHO Run %~dp0..\conda-update-env.bat - @ECHO Exiting... - @EXIT /b 1 -) - -@ENDLOCAL & ( - @SET "CONDA_BASE_ENVIRONMENT_INCLUDING_DEVELOPMENT_ENVIRONMENT=%DEVEL_ENV_FOUND%" - @SET "CONDA_BASE_ENVIRONMENT_ACTIVATE_SCRIPT=%DEVEL_ENV_FOUND%%ACTIVATE_SCRIPT%" - @SET "CONDA_DEVELOPMENT_ENVIRONMENT_NAME=%CONDA_DEVELOPMENT_ENVIRONMENT_NAME%" - @SET "CONDA_DEVELOPMENT_ENVIRONMENT_CONFIGURATION_FILE=%CONDA_ENV_FILE%" -) - -@POPD - -:NORMALIZE_PATH - @SET NORMALIZED_PATH=%~dpfn1 - @EXIT /B diff --git a/tools/utils/cmd/find_ccs.bat b/tools/utils/cmd/find_ccs.bat deleted file mode 100644 index ca9d3d25..00000000 --- a/tools/utils/cmd/find_ccs.bat +++ /dev/null @@ -1,77 +0,0 @@ -@REM Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -@REM All rights reserved. -@REM -@REM SPDX-License-Identifier: BSD-3-Clause -@REM -@REM Redistribution and use in source and binary forms, with or without -@REM modification, are permitted provided that the following conditions are met: -@REM -@REM 1. Redistributions of source code must retain the above copyright notice, this -@REM list of conditions and the following disclaimer. -@REM -@REM 2. Redistributions in binary form must reproduce the above copyright notice, -@REM this list of conditions and the following disclaimer in the documentation -@REM and/or other materials provided with the distribution. -@REM -@REM 3. Neither the name of the copyright holder nor the names of its -@REM contributors may be used to endorse or promote products derived from -@REM this software without specific prior written permission. -@REM -@REM THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -@REM AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -@REM IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -@REM DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -@REM FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -@REM DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -@REM SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -@REM CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -@REM OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -@REM OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -@REM -@REM We kindly request you to use one or more of the following phrases to refer to -@REM foxBMS in your hardware, software, documentation or advertising materials: -@REM -@REM - "This product uses parts of foxBMS®" -@REM - "This product includes parts of foxBMS®" -@REM - "This product is derived from foxBMS®" - -@SETLOCAL EnableDelayedExpansion EnableExtensions - -@SET CCS_VERSIONS= -@IF EXIST %SystemDrive%\ti @( - @FOR /D %%G in (%SystemDrive%\ti\ccs*) do @( - @SET CCS_INSTALL_PATH=%%G - @SET /a CCS_VERSION=!CCS_INSTALL_PATH:~9! - @SET CCS_VERSIONS=!CCS_VERSIONS! !CCS_VERSION! - ) -) - -@SET CCS_VERSIONS=!CCS_VERSIONS:~1! - -@SET i=-1 -@FOR %%f in (!CCS_VERSIONS!) do @( - @SET /a i=!i!+1 - @SET names[!i!]=%%f -) -@SET lastindex=!i! - -@SET /a USE_CCS_VERSION=0 -@FOR /L %%f in (0,1,!lastindex!) do @( - @SET /a nr=!names[%%f]! - @IF !nr! GTR !USE_CCS_VERSION! @( - @SET USE_CCS_VERSION=!names[%%f]! - ) -) - -:CONTINUE -@for /f "delims=" %%a in ('dir /b C:\ti\ccs!USE_CCS_VERSION!\ccs\tools\compiler\ti-cgt-arm_*') do @( - @SET "COMPILER_VERSION=%%a" -) - -@ENDLOCAL & ( - @SET CCS_COMPILER_BIN=%SystemDrive%\ti\ccs%USE_CCS_VERSION%\ccs\tools\compiler\%COMPILER_VERSION%\bin - @SET CCS_COMPILER_LIB=%SystemDrive%\ti\ccs%USE_CCS_VERSION%\ccs\tools\compiler\%COMPILER_VERSION%\lib - @SET CCS_UTILS_BIN=%SystemDrive%\ti\ccs%USE_CCS_VERSION%\ccs\utils\bin - @SET CCS_UTILS_CYGWIN=%SystemDrive%\ti\ccs%USE_CCS_VERSION%\ccs\utils\cygwin - @SET CCS_UTILS_TIOBJ2BIN=%SystemDrive%\ti\ccs%USE_CCS_VERSION%\ccs\utils\tiobj2bin -) diff --git a/tools/utils/cmd/find_git.bat b/tools/utils/cmd/find_git.bat deleted file mode 100644 index b8ed88bc..00000000 --- a/tools/utils/cmd/find_git.bat +++ /dev/null @@ -1,73 +0,0 @@ -@REM Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -@REM All rights reserved. -@REM -@REM SPDX-License-Identifier: BSD-3-Clause -@REM -@REM Redistribution and use in source and binary forms, with or without -@REM modification, are permitted provided that the following conditions are met: -@REM -@REM 1. Redistributions of source code must retain the above copyright notice, this -@REM list of conditions and the following disclaimer. -@REM -@REM 2. Redistributions in binary form must reproduce the above copyright notice, -@REM this list of conditions and the following disclaimer in the documentation -@REM and/or other materials provided with the distribution. -@REM -@REM 3. Neither the name of the copyright holder nor the names of its -@REM contributors may be used to endorse or promote products derived from -@REM this software without specific prior written permission. -@REM -@REM THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -@REM AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -@REM IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -@REM DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -@REM FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -@REM DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -@REM SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -@REM CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -@REM OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -@REM OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -@REM -@REM We kindly request you to use one or more of the following phrases to refer to -@REM foxBMS in your hardware, software, documentation or advertising materials: -@REM -@REM - "This product uses parts of foxBMS®" -@REM - "This product includes parts of foxBMS®" -@REM - "This product is derived from foxBMS®" - -@SETLOCAL EnableDelayedExpansion - -@REM Assume git is installed and available in PATH -@SET NO_GIT=0 -@where /q git -@IF %ERRORLEVEL% GEQ 1 ( - @REM git is not available in PATH - @SET NO_GIT=1 -) ELSE ( - @REM git available, stop searching - @EXIT /b 0 -) - -@REM Check if system installation is available -@IF %NO_GIT% GEQ 1 ( - @IF EXIST "%ProgramFiles%\Git\cmd\git.exe" @( - @SET GIT=%ProgramFiles%\Git\cmd\ - @REM git found, set variable used as stop condition for the search - @SET NO_GIT=0 - ) ELSE ( - @SET GIT= - ) -) - -@REM Check if user installation is available -@IF %NO_GIT% GEQ 1 ( - @IF EXIST "%LOCALAPPDATA%\Programs\Git\cmd\git.exe" @( - @SET GIT=%ProgramFiles%\Git\cmd\ - ) ELSE ( - @SET GIT= - ) -) - -@ENDLOCAL & ( - @SET "GIT_DIR=%GIT%" -) diff --git a/tools/utils/cmd/find_vs-code.bat b/tools/utils/cmd/find_vs-code.bat deleted file mode 100644 index 7d46d2a9..00000000 --- a/tools/utils/cmd/find_vs-code.bat +++ /dev/null @@ -1,86 +0,0 @@ -@REM Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -@REM All rights reserved. -@REM -@REM SPDX-License-Identifier: BSD-3-Clause -@REM -@REM Redistribution and use in source and binary forms, with or without -@REM modification, are permitted provided that the following conditions are met: -@REM -@REM 1. Redistributions of source code must retain the above copyright notice, this -@REM list of conditions and the following disclaimer. -@REM -@REM 2. Redistributions in binary form must reproduce the above copyright notice, -@REM this list of conditions and the following disclaimer in the documentation -@REM and/or other materials provided with the distribution. -@REM -@REM 3. Neither the name of the copyright holder nor the names of its -@REM contributors may be used to endorse or promote products derived from -@REM this software without specific prior written permission. -@REM -@REM THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -@REM AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -@REM IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -@REM DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -@REM FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -@REM DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -@REM SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -@REM CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -@REM OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -@REM OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -@REM -@REM We kindly request you to use one or more of the following phrases to refer to -@REM foxBMS in your hardware, software, documentation or advertising materials: -@REM -@REM - "This product uses parts of foxBMS®" -@REM - "This product includes parts of foxBMS®" -@REM - "This product is derived from foxBMS®" - -@SETLOCAL EnableDelayedExpansion -@SET VS_CODE= - -@where /q code -@IF %ERRORLEVEL% GEQ 1 ( - @SET NO_VS_CODE=1 -) ELSE ( - @SET VS_CODE_CMD=code - @SET NO_VS_CODE=0 -) - -@REM reset errorlevel -@cd 2>&1 > nul - -@REM Search in user instllation directory first -@IF %NO_VS_CODE% GEQ 1 ( - @pushd "%LOCALAPPDATA%\Programs\Microsoft VS Code\bin" - @IF !ERRORLEVEL! EQU 0 ( - @where /q code - @IF %ERRORLEVEL% GEQ 1 ( - @SET NO_VS_CODE=1 - @SET VS_CODE_CMD= - ) ELSE ( - @SET VS_CODE_CMD="%LOCALAPPDATA%\Programs\Microsoft VS Code\bin\code.cmd" - @SET NO_VS_CODE=0 - ) - ) -) - -@REM reset errorlevel -@cd 2>&1 > nul - -@IF %NO_VS_CODE% GEQ 1 ( - @pushd "%PROGRAMFILES%\Microsoft VS Code\bin" - @IF !ERRORLEVEL! EQU 0 ( - @where /q code - @IF %ERRORLEVEL% GEQ 1 ( - @SET NO_VS_CODE=1 - @SET VS_CODE_CMD= - ) ELSE ( - @SET VS_CODE_CMD="%PROGRAMFILES%\Microsoft VS Code\bin\code.cmd" - @SET NO_VS_CODE=0 - ) - ) -) - -@ENDLOCAL & ( - @SET "VS_CODE=%VS_CODE_CMD%" -) diff --git a/tools/utils/cmd/run-python-coverage.bat b/tools/utils/cmd/run-python-coverage.bat deleted file mode 100644 index 403c36dc..00000000 --- a/tools/utils/cmd/run-python-coverage.bat +++ /dev/null @@ -1,64 +0,0 @@ -@REM Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -@REM All rights reserved. -@REM -@REM SPDX-License-Identifier: BSD-3-Clause -@REM -@REM Redistribution and use in source and binary forms, with or without -@REM modification, are permitted provided that the following conditions are met: -@REM -@REM 1. Redistributions of source code must retain the above copyright notice, this -@REM list of conditions and the following disclaimer. -@REM -@REM 2. Redistributions in binary form must reproduce the above copyright notice, -@REM this list of conditions and the following disclaimer in the documentation -@REM and/or other materials provided with the distribution. -@REM -@REM 3. Neither the name of the copyright holder nor the names of its -@REM contributors may be used to endorse or promote products derived from -@REM this software without specific prior written permission. -@REM -@REM THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -@REM AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -@REM IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -@REM DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -@REM FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -@REM DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -@REM SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -@REM CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -@REM OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -@REM OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -@REM -@REM We kindly request you to use one or more of the following phrases to refer to -@REM foxBMS in your hardware, software, documentation or advertising materials: -@REM -@REM - "This product uses parts of foxBMS®" -@REM - "This product includes parts of foxBMS®" -@REM - "This product is derived from foxBMS®" - -@SETLOCAL EnableExtensions EnableDelayedExpansion -@FOR /F "usebackq tokens=*" %%A in ("%~dp0\..\..\..\conf\env\paths_win32.txt") do @( - @IF EXIST %%A ( - @CALL set "NewPath=%%NewPath%%;%%A" - ) -) -@IF DEFINED NewPath ( - @SET "PATH=%NewPath:~1%;%PATH%" -) - -@SET CONDA_BASE_ENVIRONMENT_ACTIVATE_SCRIPT="" -@CALL %~dp0\find_base_conda.bat - -@IF %CONDA_BASE_ENVIRONMENT_ACTIVATE_SCRIPT%=="" ( - @EXIT /b 1 -) - -@CALL %CONDA_BASE_ENVIRONMENT_ACTIVATE_SCRIPT% %CONDA_DEVELOPMENT_ENVIRONMENT_NAME% - -@SET PROGRAM=coverage -@WHERE %PROGRAM% 1>NUL 2>NUL -@IF %ERRORLEVEL% NEQ 0 ( - @EXIT /b %ERRORLEVEL% -) ELSE ( - @%PROGRAM% %* -) -@EXIT /b %ERRORLEVEL% diff --git a/tools/utils/cmd/run-python-script.bat b/tools/utils/cmd/run-python-script.bat deleted file mode 100644 index b3a62cbd..00000000 --- a/tools/utils/cmd/run-python-script.bat +++ /dev/null @@ -1,73 +0,0 @@ -@REM Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -@REM All rights reserved. -@REM -@REM SPDX-License-Identifier: BSD-3-Clause -@REM -@REM Redistribution and use in source and binary forms, with or without -@REM modification, are permitted provided that the following conditions are met: -@REM -@REM 1. Redistributions of source code must retain the above copyright notice, this -@REM list of conditions and the following disclaimer. -@REM -@REM 2. Redistributions in binary form must reproduce the above copyright notice, -@REM this list of conditions and the following disclaimer in the documentation -@REM and/or other materials provided with the distribution. -@REM -@REM 3. Neither the name of the copyright holder nor the names of its -@REM contributors may be used to endorse or promote products derived from -@REM this software without specific prior written permission. -@REM -@REM THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -@REM AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -@REM IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -@REM DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -@REM FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -@REM DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -@REM SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -@REM CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -@REM OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -@REM OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -@REM -@REM We kindly request you to use one or more of the following phrases to refer to -@REM foxBMS in your hardware, software, documentation or advertising materials: -@REM -@REM - "This product uses parts of foxBMS®" -@REM - "This product includes parts of foxBMS®" -@REM - "This product is derived from foxBMS®" - -@SETLOCAL EnableExtensions EnableDelayedExpansion -@IF "%~1"=="" ( - @ECHO No script file to run specified. - @EXIT /b 1 -) - -@IF NOT exist "%~1" ( - @ECHO Script '%~1' does not exist. - @EXIT /b 1 -) - -@FOR /F "usebackq tokens=*" %%A in ("%~dp0\..\..\..\conf\env\paths_win32.txt") do @( - @IF EXIST %%A ( - @CALL set "NewPath=%%NewPath%%;%%A" - ) -) -@IF DEFINED NewPath ( - @SET "PATH=%NewPath:~1%;%PATH%" -) - -@SET CONDA_BASE_ENVIRONMENT_ACTIVATE_SCRIPT="" -@CALL %~dp0\find_base_conda.bat - -@IF %CONDA_BASE_ENVIRONMENT_ACTIVATE_SCRIPT%=="" ( - @EXIT /b 1 -) - -@CALL %CONDA_BASE_ENVIRONMENT_ACTIVATE_SCRIPT% %CONDA_DEVELOPMENT_ENVIRONMENT_NAME% - -@SET PYEXE=python -@WHERE %PYEXE% 1>NUL 2>NUL -@IF %ERRORLEVEL% NEQ 0 ( - @EXIT /b %ERRORLEVEL% -) ELSE ( - @%PYEXE% %* -) diff --git a/tools/utils/cmd/run-python.bat b/tools/utils/cmd/run-python.bat deleted file mode 100644 index 5796f2df..00000000 --- a/tools/utils/cmd/run-python.bat +++ /dev/null @@ -1,63 +0,0 @@ -@REM Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -@REM All rights reserved. -@REM -@REM SPDX-License-Identifier: BSD-3-Clause -@REM -@REM Redistribution and use in source and binary forms, with or without -@REM modification, are permitted provided that the following conditions are met: -@REM -@REM 1. Redistributions of source code must retain the above copyright notice, this -@REM list of conditions and the following disclaimer. -@REM -@REM 2. Redistributions in binary form must reproduce the above copyright notice, -@REM this list of conditions and the following disclaimer in the documentation -@REM and/or other materials provided with the distribution. -@REM -@REM 3. Neither the name of the copyright holder nor the names of its -@REM contributors may be used to endorse or promote products derived from -@REM this software without specific prior written permission. -@REM -@REM THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -@REM AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -@REM IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -@REM DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -@REM FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -@REM DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -@REM SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -@REM CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -@REM OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -@REM OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -@REM -@REM We kindly request you to use one or more of the following phrases to refer to -@REM foxBMS in your hardware, software, documentation or advertising materials: -@REM -@REM - "This product uses parts of foxBMS®" -@REM - "This product includes parts of foxBMS®" -@REM - "This product is derived from foxBMS®" - -@SETLOCAL EnableExtensions EnableDelayedExpansion -@FOR /F "usebackq tokens=*" %%A in ("%~dp0\..\..\..\conf\env\paths_win32.txt") do @( - @IF EXIST %%A ( - @CALL set "NewPath=%%NewPath%%;%%A" - ) -) -@IF DEFINED NewPath ( - @SET "PATH=%NewPath:~1%;%PATH%" -) - -@SET CONDA_BASE_ENVIRONMENT_ACTIVATE_SCRIPT="" -@CALL %~dp0\find_base_conda.bat - -@IF %CONDA_BASE_ENVIRONMENT_ACTIVATE_SCRIPT%=="" ( - @EXIT /b 1 -) - -@CALL %CONDA_BASE_ENVIRONMENT_ACTIVATE_SCRIPT% %CONDA_DEVELOPMENT_ENVIRONMENT_NAME% - -@SET PYEXE=python -@WHERE %PYEXE% 1>NUL 2>NUL -@IF %ERRORLEVEL% NEQ 0 ( - @EXIT /b %ERRORLEVEL% -) ELSE ( - @%PYEXE% %* -) diff --git a/tools/utils/cmd/run-script.bat b/tools/utils/cmd/run-script.bat deleted file mode 100644 index 60ccccae..00000000 --- a/tools/utils/cmd/run-script.bat +++ /dev/null @@ -1,62 +0,0 @@ -@REM Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -@REM All rights reserved. -@REM -@REM SPDX-License-Identifier: BSD-3-Clause -@REM -@REM Redistribution and use in source and binary forms, with or without -@REM modification, are permitted provided that the following conditions are met: -@REM -@REM 1. Redistributions of source code must retain the above copyright notice, this -@REM list of conditions and the following disclaimer. -@REM -@REM 2. Redistributions in binary form must reproduce the above copyright notice, -@REM this list of conditions and the following disclaimer in the documentation -@REM and/or other materials provided with the distribution. -@REM -@REM 3. Neither the name of the copyright holder nor the names of its -@REM contributors may be used to endorse or promote products derived from -@REM this software without specific prior written permission. -@REM -@REM THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -@REM AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -@REM IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -@REM DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -@REM FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -@REM DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -@REM SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -@REM CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -@REM OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -@REM OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -@REM -@REM We kindly request you to use one or more of the following phrases to refer to -@REM foxBMS in your hardware, software, documentation or advertising materials: -@REM -@REM - "This product uses parts of foxBMS®" -@REM - "This product includes parts of foxBMS®" -@REM - "This product is derived from foxBMS®" - -@SETLOCAL EnableExtensions EnableDelayedExpansion -@IF "%~1"=="" ( - @ECHO No script file to run specified. - @EXIT /b 1 -) - -@FOR /F "usebackq tokens=*" %%A in ("%~dp0\..\..\..\conf\env\paths_win32.txt") do @( - @IF EXIST %%A ( - @CALL set "NewPath=%%NewPath%%;%%A" - ) -) -@IF DEFINED NewPath ( - @SET "PATH=%NewPath:~1%;%PATH%" -) - -@SET CONDA_BASE_ENVIRONMENT_ACTIVATE_SCRIPT="" -@CALL %~dp0\find_base_conda.bat - -@IF %CONDA_BASE_ENVIRONMENT_ACTIVATE_SCRIPT%=="" ( - @EXIT /b 1 -) - -@CALL %CONDA_BASE_ENVIRONMENT_ACTIVATE_SCRIPT% %CONDA_DEVELOPMENT_ENVIRONMENT_NAME% - -@%* diff --git a/tools/utils/conda-init.bat b/tools/utils/conda-init.bat deleted file mode 100644 index fdbf2c74..00000000 --- a/tools/utils/conda-init.bat +++ /dev/null @@ -1,59 +0,0 @@ -@REM Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -@REM All rights reserved. -@REM -@REM SPDX-License-Identifier: BSD-3-Clause -@REM -@REM Redistribution and use in source and binary forms, with or without -@REM modification, are permitted provided that the following conditions are met: -@REM -@REM 1. Redistributions of source code must retain the above copyright notice, this -@REM list of conditions and the following disclaimer. -@REM -@REM 2. Redistributions in binary form must reproduce the above copyright notice, -@REM this list of conditions and the following disclaimer in the documentation -@REM and/or other materials provided with the distribution. -@REM -@REM 3. Neither the name of the copyright holder nor the names of its -@REM contributors may be used to endorse or promote products derived from -@REM this software without specific prior written permission. -@REM -@REM THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -@REM AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -@REM IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -@REM DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -@REM FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -@REM DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -@REM SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -@REM CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -@REM OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -@REM OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -@REM -@REM We kindly request you to use one or more of the following phrases to refer to -@REM foxBMS in your hardware, software, documentation or advertising materials: -@REM -@REM - "This product uses parts of foxBMS®" -@REM - "This product includes parts of foxBMS®" -@REM - "This product is derived from foxBMS®" - -@SET DOTCONDARC="%USERPROFILE%\.condarc" -@IF NOT EXIST %DOTCONDARC% ( - @ECHO Creating "%DOTCONDARC%"... - @COPY NUL %DOTCONDARC% /Y >NUL - @ECHO channels:>> %DOTCONDARC% - @ECHO - defaults>> %DOTCONDARC% - @ECHO - foxbms>> %DOTCONDARC% - @ECHO.>> %DOTCONDARC% - @ECHO Added foxBMS conda channel ^(https://anaconda.org/foxbms^) to "%DOTCONDARC%" - @ECHO #if you are behind a proxy uncomment these lines and set your proxy settings>> %DOTCONDARC% - @ECHO #proxy_servers:>> %DOTCONDARC% - @ECHO # http: http://user:pass@corp.com:8080>> %DOTCONDARC% - @ECHO # https: https://user:pass@corp.com:8080>> %DOTCONDARC% - @ECHO Created "%DOTCONDARC%" - @ECHO Open "%DOTCONDARC%" and enter your proxy information -) ELSE ( - @ECHO %DOTCONDARC% already exists. - @ECHO Maybe you need to add "foxbms" to your channels list. - @ECHO See https://docs.foxbms.org/getting-started/miniconda-installation/conda-configuration.html#condarc-configuration - @PAUSE - @exit /b 1 -) diff --git a/tools/utils/conda-update-env.bat b/tools/utils/conda-update-env.bat deleted file mode 100644 index 6e964859..00000000 --- a/tools/utils/conda-update-env.bat +++ /dev/null @@ -1,61 +0,0 @@ -@REM Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -@REM All rights reserved. -@REM -@REM SPDX-License-Identifier: BSD-3-Clause -@REM -@REM Redistribution and use in source and binary forms, with or without -@REM modification, are permitted provided that the following conditions are met: -@REM -@REM 1. Redistributions of source code must retain the above copyright notice, this -@REM list of conditions and the following disclaimer. -@REM -@REM 2. Redistributions in binary form must reproduce the above copyright notice, -@REM this list of conditions and the following disclaimer in the documentation -@REM and/or other materials provided with the distribution. -@REM -@REM 3. Neither the name of the copyright holder nor the names of its -@REM contributors may be used to endorse or promote products derived from -@REM this software without specific prior written permission. -@REM -@REM THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -@REM AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -@REM IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -@REM DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -@REM FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -@REM DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -@REM SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -@REM CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -@REM OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -@REM OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -@REM -@REM We kindly request you to use one or more of the following phrases to refer to -@REM foxBMS in your hardware, software, documentation or advertising materials: -@REM -@REM - "This product uses parts of foxBMS®" -@REM - "This product includes parts of foxBMS®" -@REM - "This product is derived from foxBMS®" - -@SETLOCAL EnableExtensions EnableDelayedExpansion -@SET CONDA_BASE_ENVIRONMENT_ACTIVATE_SCRIPT="" -@CALL %~dp0\cmd\find_base_conda.bat update - -@IF %CONDA_BASE_ENVIRONMENT_ACTIVATE_SCRIPT%=="" ( - @ECHO Could not find 'base' environment. - @EXIT /b 1 -) - -@IF EXIST %CONDA_BASE_ENVIRONMENT_INCLUDING_DEVELOPMENT_ENVIRONMENT%envs\%CONDA_DEVELOPMENT_ENVIRONMENT_NAME%\NUL ( - @ECHO Environment '%CONDA_DEVELOPMENT_ENVIRONMENT_NAME%' already exists. Nothing to do. - @EXIT /B 1 -) - -@ECHO Activating base environment... -@CALL %CONDA_BASE_ENVIRONMENT_ACTIVATE_SCRIPT% base -@ECHO done... -@ECHO Creating evironment "%CONDA_DEVELOPMENT_ENVIRONMENT_NAME%" from "%CONDA_DEVELOPMENT_ENVIRONMENT_CONFIGURATION_FILE%"... -conda env create -f %CONDA_DEVELOPMENT_ENVIRONMENT_CONFIGURATION_FILE% -@ECHO done... - -:NORMALIZE_PATH - @SET NORMALIZED_PATH=%~dpfn1 - @EXIT /B diff --git a/tools/utils/conda-update-env.sh b/tools/utils/conda-update-env.sh deleted file mode 100644 index 54eb073a..00000000 --- a/tools/utils/conda-update-env.sh +++ /dev/null @@ -1,121 +0,0 @@ -#!/usr/bin/env bash -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -set -e -# MacOS -if [ "$(uname)" == "Darwin" ]; then - echo "MacOS is currently not supported." - exit 1 -# Linux -elif [ "$(expr substr $(uname -s) 1 5)" == "Linux" ]; then - SCRIPTDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" - while read -r line; do - PATHS_TO_ADD=`echo "${PATHS_TO_ADD}:$line"| sed --expression='s/^M/:/g'` - done < ${SCRIPTDIR}/../../conf/env/paths_linux.txt - PATHS_TO_ADD=`echo $PATHS_TO_ADD | awk '{gsub("C:", "/c", $0); print}'` - PATHS_TO_ADD=$(echo "${PATHS_TO_ADD#?}" | tr '\\' '/') - export PATH=$PATHS_TO_ADD:$PATH - # call find_base_conda and make sure that we do not exit by printing - # the exit code to CONDA_VARS (otherwise we would exit with set -e, here - # we will not as echo returns exit code 0) - CONDA_VARS=$($SCRIPTDIR/bash/find_base_conda.sh update || echo $?) - if [ "${CONDA_VARS: -1}" == "1" ]; then - # strip the exit code that we have printed to CONDA_VARS and - # print the rest - echo "${CONDA_VARS: : -1}" - exit 1 - fi - CONDA_VARS_ARRAY=($CONDA_VARS) - CONDA_BASE_ENVIRONMENT_INCLUDING_DEVELOPMENT_ENVIRONMENT=${CONDA_VARS_ARRAY[0]} - CONDA_BASE_ENVIRONMENT_ACTIVATE_SCRIPT=${CONDA_VARS_ARRAY[1]} - CONDA_DEVELOPMENT_ENVIRONMENT_NAME=${CONDA_VARS_ARRAY[2]} - CONDA_DEVELOPMENT_ENVIRONMENT_CONFIGURATION_FILE=${CONDA_VARS_ARRAY[3]} - - if [ -z "${CONDA_BASE_ENVIRONMENT_ACTIVATE_SCRIPT}" ]; then - echo "Could not find 'base' environment." - exit 1 - fi - if [ -d "${CONDA_BASE_ENVIRONMENT_INCLUDING_DEVELOPMENT_ENVIRONMENT}/envs/${CONDA_DEVELOPMENT_ENVIRONMENT_NAME}" ]; then - echo "Environment '${CONDA_DEVELOPMENT_ENVIRONMENT_NAME}' already exists. Nothing to do." - exit 1 - fi - - echo "Activating base environment..." - source $CONDA_BASE_ENVIRONMENT_ACTIVATE_SCRIPT base - echo "done..." - echo "Creating evironment '$CONDA_DEVELOPMENT_ENVIRONMENT_NAME' from '$CONDA_DEVELOPMENT_ENVIRONMENT_CONFIGURATION_FILE'..." - conda env create -f ${CONDA_DEVELOPMENT_ENVIRONMENT_CONFIGURATION_FILE} - echo "done..." -# Windows -elif [ "$(expr substr $(uname -s) 1 9)" == "CYGWIN_NT" ]; then - echo "Cygwin is not supported." - exit 1 -elif [ "$(expr substr $(uname -s) 1 10)" == "MINGW32_NT" ]; then - echo "32bit Windows is not supported." - exit 1 -elif [ "$(expr substr $(uname -s) 1 10)" == "MINGW64_NT" ] || [ "$(expr substr $(uname -s) 1 7)" == "MSYS_NT" ] ; then - CODEPAGE=`chcp.com | sed 's/[^0-9]*//g'` - if [ "$CODEPAGE" != "850" ]; then - chcp.com 850 >/dev/null 2>&1 - fi - SCRIPTDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" - CONDA_VARS=$($SCRIPTDIR/bash/find_base_conda.sh update) - CONDA_VARS_ARRAY=($CONDA_VARS) - CONDA_BASE_ENVIRONMENT_INCLUDING_DEVELOPMENT_ENVIRONMENT=${CONDA_VARS_ARRAY[0]} - CONDA_BASE_ENVIRONMENT_ACTIVATE_SCRIPT=${CONDA_VARS_ARRAY[1]} - CONDA_DEVELOPMENT_ENVIRONMENT_NAME=${CONDA_VARS_ARRAY[2]} - CONDA_DEVELOPMENT_ENVIRONMENT_CONFIGURATION_FILE=${CONDA_VARS_ARRAY[3]} - - if [ -z "${CONDA_BASE_ENVIRONMENT_ACTIVATE_SCRIPT}" ]; then - echo "Could not find 'base' environment." - exit 1 - fi - if [ -d "${CONDA_BASE_ENVIRONMENT_INCLUDING_DEVELOPMENT_ENVIRONMENT}/envs/${CONDA_DEVELOPMENT_ENVIRONMENT_NAME}" ]; then - echo "Environment '${CONDA_DEVELOPMENT_ENVIRONMENT_NAME}' already exists. Nothing to do." - exit 1 - fi - - echo "Activating base environment..." - source $CONDA_BASE_ENVIRONMENT_ACTIVATE_SCRIPT base - echo "done..." - echo "Creating evironment '$CONDA_DEVELOPMENT_ENVIRONMENT_NAME' from '$CONDA_DEVELOPMENT_ENVIRONMENT_CONFIGURATION_FILE'..." - conda env create -f ${CONDA_DEVELOPMENT_ENVIRONMENT_CONFIGURATION_FILE} - echo "done..." - chcp.com $CODEPAGE >/dev/null 2>&1 -fi diff --git a/tools/utils/generate_license_list.py b/tools/utils/generate_license_list.py deleted file mode 100644 index 96f8e9f6..00000000 --- a/tools/utils/generate_license_list.py +++ /dev/null @@ -1,371 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Generates the list of conda packages for the documentation""" - -import argparse -import json -import logging -import os -import shutil -import subprocess -import sys -from datetime import date -from io import StringIO -from typing import Dict, List, Tuple, Union - -import pandas as pd - -NAME_COLUMN_WIDTH = 36 -VERSION_COLUMN_WIDTH = 20 -BUILD_COLUMN_WIDTH = 24 -CHANNEL_COLUMN_WIDTH = 12 -LICENSE_COLUMN_WIDTH = 76 - -NAME_COLUMN_NAME = "Name" -VERSION_COLUMN_NAME = "Version" -BUILD_COLUMN_NAME = "Build" -CHANNEL_COLUMN_NAME = "Channel" -LICENSE_COLUMN_NAME = "License" -LATEST_LICENSE_COLUMN_NAME = "Latest license check" - -MAGIC_KEYWORD_UNKNOWN_LICENSE = "UNKNOWN" - - -class PackageEntry: - """class for representing a package entry""" - - # pylint:disable=too-many-arguments - def __init__( - self, - name: str = None, - version: str = None, - build: str = None, - channel: str = None, - license_type: Union[str, None] = None, - latest_license_check: Union[str, None] = None, - ) -> None: - super().__init__() - self.name = name - self.version = version - self.build = build - self.channel = channel - self.license_type = license_type - self.latest_license_check = latest_license_check - - def __repr__(self): - output = f"{self.name};".ljust(NAME_COLUMN_WIDTH) - output += f"{self.version};".ljust(VERSION_COLUMN_WIDTH) - output += f"{self.build};".ljust(BUILD_COLUMN_WIDTH) - output += f"{self.channel};".ljust(CHANNEL_COLUMN_WIDTH) - if self.license_type: - output += f"{self.license_type.replace(';',',')};".ljust( - LICENSE_COLUMN_WIDTH - ) - else: - output += f"{self.license_type};".ljust(LICENSE_COLUMN_WIDTH) - output += f"{self.latest_license_check}" - return output - - @staticmethod - def date_get_today() -> str: - """returns the date-string for the output""" - today = date.today() - return today.strftime("%Y-%m-%d") - - def touch_latest_license_check(self) -> None: - """sets the date of the license check to today""" - self.latest_license_check = self.__class__.date_get_today() - - -class CondaParser: # pylint:disable=too-few-public-methods - """Helper class for parsing conda output""" - - @staticmethod - def _parse_package_list(conda_output: str = None) -> List[PackageEntry]: - """parses the conda output into a list""" - csv = pd.read_csv( - StringIO(conda_output), - sep=r"\s+", - engine="python", - header=None, - comment="#", - names=[ - NAME_COLUMN_NAME, - VERSION_COLUMN_NAME, - BUILD_COLUMN_NAME, - CHANNEL_COLUMN_NAME, - ], - ) - logging.debug(csv) - - package_list: List[PackageEntry] = [] - - for index, row in csv.iterrows(): - package = PackageEntry( - name=row[NAME_COLUMN_NAME], - version=row[VERSION_COLUMN_NAME], - build=row[BUILD_COLUMN_NAME], - channel=row[CHANNEL_COLUMN_NAME], - ) - logging.debug(f"package from line {index}: {package}") - package_list.append(package) - - return package_list - - @staticmethod - def get_package_list_from_conda() -> List[PackageEntry]: - """calls conda and obtains a list of packages""" - conda = shutil.which("conda") - logging.info(f"Conda instance at: {conda}") - if not conda: - sys.exit("Could not find conda binary.") - cmd = [conda, "list", "--show-channel-urls"] - with subprocess.Popen(cmd, stdout=subprocess.PIPE) as p: - stdout: bytes = p.communicate()[0] - package_list: List[PackageEntry] = CondaParser._parse_package_list( - stdout.decode("utf-8") - ) - logging.debug(package_list) - return package_list - - -class PipParser: # pylint:disable=too-few-public-methods - """Helper class for parsing pip packages""" - - @staticmethod - def _retrieve_pip_licenses() -> List[Dict[str, str]]: - """retrieves the pip licenses by calling pip-licenses""" - piplicenses = shutil.which("pip-licenses") - logging.info(f"Conda instance at: {piplicenses}") - if not piplicenses: - sys.exit("Could not find pip-licenses binary.") - cmd = [piplicenses, "--format=json"] - # pylint: disable=consider-using-with - p = subprocess.Popen(cmd, stdout=subprocess.PIPE) - pippackages = json.loads(p.communicate()[0]) - logging.debug(pippackages) - return pippackages - - @staticmethod - def enhance_with_pip_licenses( - input_package_list: List[PackageEntry] = None, - ) -> List[PackageEntry]: - """returns the licenses of all pip packages""" - package_list = [] - if input_package_list is not None: - package_list = input_package_list - - pip_json = PipParser._retrieve_pip_licenses() - logging.info("Scanning pip license list for bad entries and dropping them.") - pip_json = list( - filter( - lambda x: x[LICENSE_COLUMN_NAME] != MAGIC_KEYWORD_UNKNOWN_LICENSE, - pip_json, - ) - ) - - logging.info("Iterating over licenses in pip JSON") - for package in pip_json: - logging.debug(package) - hit = False - - # handle special names - if package[NAME_COLUMN_NAME] == "libarchive-c": - package[NAME_COLUMN_NAME] = "python-libarchive-c" - elif package[NAME_COLUMN_NAME] == "ruamel.yaml": - package[NAME_COLUMN_NAME] = "ruamel-yaml" - elif package[NAME_COLUMN_NAME] == "ruamel.yaml.clib": - package[NAME_COLUMN_NAME] = "ruamel-yaml-clib" - else: - # normalize package name to lower-case - package[NAME_COLUMN_NAME] = package[NAME_COLUMN_NAME].lower() - - def match_package_name( - package_list: List[PackageEntry], package: Dict[str, str] - ) -> Tuple[bool, List[PackageEntry]]: - """copy data into package_list if it can be matched with package""" - package_name = package[NAME_COLUMN_NAME] - hit = False - for listed_package in package_list: - if listed_package.name == package_name: - logging.debug( - f"Found hit in package list for package {listed_package.name}" - ) - assert listed_package.version == package[VERSION_COLUMN_NAME] - logging.debug( - f"Version in JSON and package list match: {listed_package.version}" - ) - listed_package.license_type = package[LICENSE_COLUMN_NAME] - listed_package.touch_latest_license_check() - logging.debug( - f"Assigning license {package[LICENSE_COLUMN_NAME]}" - f" (checked {listed_package.latest_license_check}) to {package_name}." - ) - - hit = True - return hit, package_list - - hit, package_list = match_package_name( - package_list=package_list, package=package - ) - if not hit: - # try with canonized name - package[NAME_COLUMN_NAME] = package[NAME_COLUMN_NAME].replace("-", "_") - hit, package_list = match_package_name( - package_list=package_list, package=package - ) - if not hit: - logging.error(f"No match found for {package[NAME_COLUMN_NAME]}.") - - return package_list - - -class OldFileParser: - """Helper class for parsing existing license files""" - - @staticmethod - def turn_old_file_into_list_of_entries( - old_file: Union[os.PathLike[str], os.PathLike[bytes]] = None, - ) -> List[PackageEntry]: - """Takes as argument the path to an old csv, tries to read it and - turn into list of packages""" - package_list = [] - if old_file is not None: - with open(old_file, mode="r", encoding="utf-8") as file_handle: - csv = pd.read_csv(file_handle, sep=";", skipinitialspace=True) - logging.debug(csv) - for index, row in csv.iterrows(): - package = PackageEntry( - name=row[NAME_COLUMN_NAME], - version=row[VERSION_COLUMN_NAME], - build=row[BUILD_COLUMN_NAME], - channel=row[CHANNEL_COLUMN_NAME], - license_type=row[LICENSE_COLUMN_NAME], - latest_license_check=row[LATEST_LICENSE_COLUMN_NAME], - ) - logging.debug(f"Extracted old package from entry {index}: {package}") - package_list.append(package) - - return package_list - - @staticmethod - def prefill_license_data_from_old_package_list( - old_list: List[PackageEntry] = None, new_list: List[PackageEntry] = None - ) -> List[PackageEntry]: - """prefills the license data in a new list from the old list""" - if (old_list is None) or (new_list is None): - sys.exit("Package List is None even though it should not be.") - - for package in new_list: - for old_package in old_list: - if package.name == old_package.name: - package.license_type = old_package.license_type - package.latest_license_check = old_package.latest_license_check - logging.info(f"Prefilled package {package.name} from old list.") - - return new_list - - -def generate_output(package_list: List[PackageEntry]) -> None: - """generates the output to stdout""" - - # print with hardcoded columns for consistency - name_text = f"{NAME_COLUMN_NAME};".ljust(NAME_COLUMN_WIDTH) - version_text = f"{VERSION_COLUMN_NAME};".ljust(VERSION_COLUMN_WIDTH) - build_text = f"{BUILD_COLUMN_NAME};".ljust(BUILD_COLUMN_WIDTH) - channel_text = f"{CHANNEL_COLUMN_NAME};".ljust(CHANNEL_COLUMN_WIDTH) - license_text = f"{LICENSE_COLUMN_NAME};".ljust(LICENSE_COLUMN_WIDTH) - latest_license_text = LATEST_LICENSE_COLUMN_NAME - print( - name_text - + version_text - + build_text - + channel_text - + license_text - + latest_license_text - ) - for package in package_list: - print(package) - - -def main(): - """This script generates a list of conda packages and gathers license - information on stdout. - """ - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - parser.add_argument( - "-f", - "--file", - dest="old_file", - action="store", - default=None, - help="path to an existing csv file", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - old_package_list = OldFileParser.turn_old_file_into_list_of_entries(args.old_file) - - package_list: List[PackageEntry] = CondaParser.get_package_list_from_conda() - package_list = OldFileParser.prefill_license_data_from_old_package_list( - old_list=old_package_list, new_list=package_list - ) - package_list = PipParser.enhance_with_pip_licenses(input_package_list=package_list) - - generate_output(package_list=package_list) - - -if __name__ == "__main__": - main() diff --git a/tools/utils/generate_missing_test_files.py b/tools/utils/generate_missing_test_files.py old mode 100644 new mode 100755 index 97597b33..07cb0a0f --- a/tools/utils/generate_missing_test_files.py +++ b/tools/utils/generate_missing_test_files.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -38,7 +37,8 @@ # - "This product includes parts of foxBMS®" # - "This product is derived from foxBMS®" -"""Helper script for updating dates in a merge request""" +"""Automatically create the accompanying test files for the source tree if +they are missing.""" import argparse import logging @@ -58,7 +58,7 @@ def get_git_root(path: str) -> str: """helper function to find the repository root Args: - path (string): path of test_f_guidelines + path (string): path of file in git repository Returns: root (string): root path of the git repository @@ -78,7 +78,7 @@ def get_git_root(path: str) -> str: def main(): - """Automatically create the test file.""" + """Automatically create the accompanying test files for the source tree.""" parser = argparse.ArgumentParser() parser.add_argument( "-v", @@ -116,14 +116,14 @@ def main(): today_iso = date.today().strftime("%Y-%m-%d") for i in err: - if not "should be in" in i: + if "should be in" not in i: continue out_txt = test_template source_file = Path(i.split("Missing test file for:")[-1].split()[0]).name missing_file = i.split("should be in: ")[-1] if missing_file.endswith(")"): missing_file = missing_file[:-1] - logging.debug(f"Need to create test file: '{missing_file}'.") + logging.debug("Need to create test file: '%s'.", missing_file) missing_file = Path(missing_file) out_txt[42] = f" * @file {missing_file.name}" out_txt[44] = f" * @date {today_iso} (date of creation)" diff --git a/tools/utils/git-hooks/pre-commit b/tools/utils/git-hooks/pre-commit deleted file mode 100644 index f31c65ce..00000000 --- a/tools/utils/git-hooks/pre-commit +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh -./tools/utils/bash/run-python-script.sh tools/utils/update_doxygen_header.py -./waf.sh check_guidelines diff --git a/tools/utils/list_prefixes.py b/tools/utils/list_prefixes.py old mode 100644 new mode 100755 index ae12e220..df1bf246 --- a/tools/utils/list_prefixes.py +++ b/tools/utils/list_prefixes.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -54,7 +53,7 @@ def get_git_root(path: str = os.path.realpath(__file__)) -> Path: """helper function to find the repository root Args: - path (string): path of test_f_guidelines + path (string): path of file in git repository Returns: root (string): root path of the git repository @@ -64,7 +63,7 @@ def get_git_root(path: str = os.path.realpath(__file__)) -> Path: return root -def main(): # pylint: disable=too-many-statements +def main(): """Update the version information in all relevant files.""" parser = argparse.ArgumentParser() parser.add_argument( diff --git a/tools/utils/llvm-install.bat b/tools/utils/llvm-install.bat deleted file mode 100644 index dd5b1818..00000000 --- a/tools/utils/llvm-install.bat +++ /dev/null @@ -1,98 +0,0 @@ -@REM Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -@REM All rights reserved. -@REM -@REM SPDX-License-Identifier: BSD-3-Clause -@REM -@REM Redistribution and use in source and binary forms, with or without -@REM modification, are permitted provided that the following conditions are met: -@REM -@REM 1. Redistributions of source code must retain the above copyright notice, this -@REM list of conditions and the following disclaimer. -@REM -@REM 2. Redistributions in binary form must reproduce the above copyright notice, -@REM this list of conditions and the following disclaimer in the documentation -@REM and/or other materials provided with the distribution. -@REM -@REM 3. Neither the name of the copyright holder nor the names of its -@REM contributors may be used to endorse or promote products derived from -@REM this software without specific prior written permission. -@REM -@REM THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -@REM AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -@REM IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -@REM DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -@REM FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -@REM DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -@REM SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -@REM CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -@REM OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -@REM OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -@REM -@REM We kindly request you to use one or more of the following phrases to refer to -@REM foxBMS in your hardware, software, documentation or advertising materials: -@REM -@REM - "This product uses parts of foxBMS®" -@REM - "This product includes parts of foxBMS®" -@REM - "This product is derived from foxBMS®" - -@SETLOCAL EnableExtensions EnableDelayedExpansion - -@NET FILE 1>NUL 2>NUL -@IF %ERRORLEVEL% NEQ 0 ( - @ECHO Installing LLVM with this script requires an elevated terminal. - @ECHO Open cmd.exe again with administrative privileges ^("Run as administrator"^) and run the script again. - @ECHO Exiting... - @PAUSE - @EXIT /b 1 -) - -@TITLE Installing LLVM - -@SET LLVM_BASE_INSTALL_DIRECTORY=C:\Program Files\LLVM -@SET LLVM_VERSION=13.0.0 -@SET LLVM_TEMP_DIR=%TEMP%\LLVM -@SET LLVM_INSTALL_DIRECTORY=%LLVM_BASE_INSTALL_DIRECTORY%\%LLVM_VERSION% -@SET LLVM_DOWNLOAD_URL=https://github.com/llvm/llvm-project/releases/download/llvmorg-%LLVM_VERSION%/LLVM-%LLVM_VERSION%-win64.exe -@SET LLVM_INSTALLER="%USERPROFILE%\Downloads\llvm-%LLVM_VERSION%-win64.exe" - -@IF NOT EXIST "%LLVM_TEMP_DIR%" ( - @MKDIR "%LLVM_TEMP_DIR%" -) - -@IF EXIST "%LLVM_BASE_INSTALL_DIRECTORY%" ( - @XCOPY "%LLVM_BASE_INSTALL_DIRECTORY%" "%LLVM_TEMP_DIR%" /s /y - @IF %ERRORLEVEL% NEQ 0 ( - @EXIT /b %ERRORLEVEL% - ) -) - -@IF EXIST "%LLVM_BASE_INSTALL_DIRECTORY%\Uninstall.exe" ( - @"%LLVM_BASE_INSTALL_DIRECTORY%\Uninstall.exe" /S -) - -@REM Maybe there is already a versioned installation -@FOR /F "tokens=* USEBACKQ" %%F IN (`dir "%LLVM_BASE_INSTALL_DIRECTORY%" /b /o-n`) do @( - @set "LATEST_LLVM_VERSION=%%F" - @goto :done -) -:done -@IF EXIST "%LLVM_BASE_INSTALL_DIRECTORY%\%LATEST_LLVM_VERSION%\Uninstall.exe" ( - @"%LLVM_BASE_INSTALL_DIRECTORY%\%LATEST_LLVM_VERSION%\Uninstall.exe" /S -) - -@REM Cleanup what ever might be left over during uninstallation -@RMDIR /s /q "%LLVM_BASE_INSTALL_DIRECTORY%" - -@ECHO Downloading LLVM -@curl.exe -fsSL %LLVM_DOWNLOAD_URL% -o "%LLVM_INSTALLER%" -@ECHO Done -@ECHO Installing LLVM %LLVM_VERSION% -@%LLVM_INSTALLER% /S /tasks="noassocfiles,nomodpath" /D=%LLVM_INSTALL_DIRECTORY% -@ECHO Done - -@ECHO Restoring old LLVM versions -@XCOPY "%LLVM_TEMP_DIR%" "%LLVM_BASE_INSTALL_DIRECTORY%" /s /e /y -@IF %ERRORLEVEL% EQU 0 ( - @RMDIR /s /q "%LLVM_TEMP_DIR%" -) -@ECHO Done diff --git a/tools/utils/mingw64-install.bat b/tools/utils/mingw64-install.bat deleted file mode 100644 index 8fc779d0..00000000 --- a/tools/utils/mingw64-install.bat +++ /dev/null @@ -1,69 +0,0 @@ -@REM Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -@REM All rights reserved. -@REM -@REM SPDX-License-Identifier: BSD-3-Clause -@REM -@REM Redistribution and use in source and binary forms, with or without -@REM modification, are permitted provided that the following conditions are met: -@REM -@REM 1. Redistributions of source code must retain the above copyright notice, this -@REM list of conditions and the following disclaimer. -@REM -@REM 2. Redistributions in binary form must reproduce the above copyright notice, -@REM this list of conditions and the following disclaimer in the documentation -@REM and/or other materials provided with the distribution. -@REM -@REM 3. Neither the name of the copyright holder nor the names of its -@REM contributors may be used to endorse or promote products derived from -@REM this software without specific prior written permission. -@REM -@REM THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -@REM AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -@REM IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -@REM DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -@REM FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -@REM DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -@REM SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -@REM CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -@REM OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -@REM OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -@REM -@REM We kindly request you to use one or more of the following phrases to refer to -@REM foxBMS in your hardware, software, documentation or advertising materials: -@REM -@REM - "This product uses parts of foxBMS®" -@REM - "This product includes parts of foxBMS®" -@REM - "This product is derived from foxBMS®" - -@SETLOCAL EnableExtensions EnableDelayedExpansion - -@TITLE Installing MinGW64 - -@SET MINGW64_BASE_INSTALL_DIRECTORY=C:\mingw64 -@SET MINGW64_VERSION=x86_64-8.1.0-release-posix-seh-rt_v6-rev0 -@SET MINGW64_INSTALL_DIRECTORY=%MINGW64_BASE_INSTALL_DIRECTORY%\%MINGW64_VERSION% -@SET MINGW64_DOWNLOAD_URL=https://sourceforge.net/projects/mingw-w64/files/Toolchains%%20targetting%%20Win64/Personal%%20Builds/mingw-builds/8.1.0/threads-posix/seh/%MINGW64_VERSION%.7z/download -@SET MINGW64_INSTALLER="%USERPROFILE%\Downloads\%MINGW64_VERSION%.7z" - -@ECHO Downloading MinGW64 -@curl.exe -fsSL %MINGW64_DOWNLOAD_URL% -o %MINGW64_INSTALLER% -@ECHO Done - -@IF NOT EXIST %MINGW64_BASE_INSTALL_DIRECTORY% @( - @ECHO Creating directory - @MKDIR %MINGW64_BASE_INSTALL_DIRECTORY% - @MKDIR %MINGW64_INSTALL_DIRECTORY% - @ECHO Done -) - -@IF NOT EXIST "C:\Program Files\7-Zip\7z.exe" @( - @ECHO Automated instllation failed as 7-zip is missing. - @ECHO Download 7-Zip from https://7-zip.org/ and install it in the default directory - @ECHO After that re-run this script - @PAUSE -) - - -@ECHO Installing MinGW64 %MINGW64_VERSION% -@"C:\Program Files\7-Zip\7z.exe" x %MINGW64_INSTALLER% -o%MINGW64_INSTALL_DIRECTORY% -@ECHO Done diff --git a/tools/utils/miniconda3-install.bat b/tools/utils/miniconda3-install.bat deleted file mode 100644 index 581700fd..00000000 --- a/tools/utils/miniconda3-install.bat +++ /dev/null @@ -1,58 +0,0 @@ -@REM Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -@REM All rights reserved. -@REM -@REM SPDX-License-Identifier: BSD-3-Clause -@REM -@REM Redistribution and use in source and binary forms, with or without -@REM modification, are permitted provided that the following conditions are met: -@REM -@REM 1. Redistributions of source code must retain the above copyright notice, this -@REM list of conditions and the following disclaimer. -@REM -@REM 2. Redistributions in binary form must reproduce the above copyright notice, -@REM this list of conditions and the following disclaimer in the documentation -@REM and/or other materials provided with the distribution. -@REM -@REM 3. Neither the name of the copyright holder nor the names of its -@REM contributors may be used to endorse or promote products derived from -@REM this software without specific prior written permission. -@REM -@REM THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -@REM AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -@REM IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -@REM DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -@REM FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -@REM DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -@REM SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -@REM CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -@REM OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -@REM OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -@REM -@REM We kindly request you to use one or more of the following phrases to refer to -@REM foxBMS in your hardware, software, documentation or advertising materials: -@REM -@REM - "This product uses parts of foxBMS®" -@REM - "This product includes parts of foxBMS®" -@REM - "This product is derived from foxBMS®" - -@SETLOCAL EnableExtensions EnableDelayedExpansion - -@TITLE Installing miniconda3 - -@REM set miniconda installation directory -@IF NOT "%USERPROFILE%"=="%USERPROFILE: =%" @( - @SET MINICONDA3_INSTALL_DIRECTORY=%SystemDrive%\miniconda3 -) ELSE @( - @SET MINICONDA3_INSTALL_DIRECTORY=%USERPROFILE%\miniconda3 -) - -@SET MINICONDA3_DOWNLOAD_URL=https://repo.anaconda.com/miniconda/Miniconda3-latest-Windows-x86_64.exe -@SET MINICONDA3_INSTALLER="%USERPROFILE%\Downloads\miniconda3-installer-win64.exe" - -@ECHO Downloading miniconda3 -@curl.exe -fsSL %MINICONDA3_DOWNLOAD_URL% -o %MINICONDA3_INSTALLER% -@ECHO Done - -@ECHO Installing miniconda3 -@%MINICONDA3_INSTALLER% /S /InstallationType=JustMe /AddToPath=0 /RegisterPython=0 /D=%MINICONDA3_INSTALL_DIRECTORY% -@ECHO Done diff --git a/tools/utils/ruby-install.bat b/tools/utils/ruby-install.bat deleted file mode 100644 index 4e24412d..00000000 --- a/tools/utils/ruby-install.bat +++ /dev/null @@ -1,55 +0,0 @@ -@REM Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -@REM All rights reserved. -@REM -@REM SPDX-License-Identifier: BSD-3-Clause -@REM -@REM Redistribution and use in source and binary forms, with or without -@REM modification, are permitted provided that the following conditions are met: -@REM -@REM 1. Redistributions of source code must retain the above copyright notice, this -@REM list of conditions and the following disclaimer. -@REM -@REM 2. Redistributions in binary form must reproduce the above copyright notice, -@REM this list of conditions and the following disclaimer in the documentation -@REM and/or other materials provided with the distribution. -@REM -@REM 3. Neither the name of the copyright holder nor the names of its -@REM contributors may be used to endorse or promote products derived from -@REM this software without specific prior written permission. -@REM -@REM THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -@REM AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -@REM IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -@REM DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -@REM FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -@REM DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -@REM SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -@REM CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -@REM OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -@REM OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -@REM -@REM We kindly request you to use one or more of the following phrases to refer to -@REM foxBMS in your hardware, software, documentation or advertising materials: -@REM -@REM - "This product uses parts of foxBMS®" -@REM - "This product includes parts of foxBMS®" -@REM - "This product is derived from foxBMS®" - -@SETLOCAL EnableExtensions EnableDelayedExpansion - -@TITLE Installing Ruby - -@ECHO Downloading Ruby -@SET RUBYINSTALLER="%USERPROFILE%\Downloads\rubyinstaller-3.1.3-1-x64.exe" -@SET RUBY_INSTALL_DIRECTORY=C:\Ruby\Ruby3.1.3-x64 -@curl.exe -fsSL https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.1.3-1/rubyinstaller-3.1.3-1-x64.exe -o "%USERPROFILE%\Downloads\rubyinstaller-3.1.3-1-x64.exe" -@ECHO Done -@ECHO Installing Ruby 3.1.3-x64 -@%RUBYINSTALLER% /verysilent /dir="%RUBY_INSTALL_DIRECTORY%" /tasks="noassocfiles,nomodpath,noridkinstall" -@ECHO Done -@ECHO Installing dependencies -@PUSHD %~dp0..\vendor\ceedling -@ECHO %__CD__% -@%RUBY_INSTALL_DIRECTORY%\bin\bundle install -@POPD -@ECHO Done diff --git a/tools/utils/run-uncrustify.bat b/tools/utils/run-uncrustify.bat deleted file mode 100644 index f786bbbe..00000000 --- a/tools/utils/run-uncrustify.bat +++ /dev/null @@ -1,61 +0,0 @@ -@REM Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -@REM All rights reserved. -@REM -@REM SPDX-License-Identifier: BSD-3-Clause -@REM -@REM Redistribution and use in source and binary forms, with or without -@REM modification, are permitted provided that the following conditions are met: -@REM -@REM 1. Redistributions of source code must retain the above copyright notice, this -@REM list of conditions and the following disclaimer. -@REM -@REM 2. Redistributions in binary form must reproduce the above copyright notice, -@REM this list of conditions and the following disclaimer in the documentation -@REM and/or other materials provided with the distribution. -@REM -@REM 3. Neither the name of the copyright holder nor the names of its -@REM contributors may be used to endorse or promote products derived from -@REM this software without specific prior written permission. -@REM -@REM THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -@REM AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -@REM IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -@REM DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -@REM FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -@REM DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -@REM SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -@REM CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -@REM OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -@REM OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -@REM -@REM We kindly request you to use one or more of the following phrases to refer to -@REM foxBMS in your hardware, software, documentation or advertising materials: -@REM -@REM - "This product uses parts of foxBMS®" -@REM - "This product includes parts of foxBMS®" -@REM - "This product is derived from foxBMS®" - -@SETLOCAL EnableExtensions EnableDelayedExpansion -@SET UNCRUSTIFY_BIN=uncrustify -@WHERE %UNCRUSTIFY_BIN% 1>NUL 2>NUL -@IF %ERRORLEVEL% NEQ 0 ( - @echo Could not find uncrustify binary. - @EXIT /b 1 -) - -@REM we found the uncrustify binary, therefore we set the variable properly -@FOR /F "usebackq tokens=*" %%i in (`@where uncrustify`) do @( - @SET UNCRUSTIFY_BIN=%%i -) - -@IF %UNCRUSTIFY_BIN%=="" ( - @EXIT /b 1 -) - -@IF "%~1"=="" @( - @%UNCRUSTIFY_BIN% --help - @EXIT /b 1 -) - -@%UNCRUSTIFY_BIN% %* -@EXIT /b %ERRORLEVEL% diff --git a/tools/utils/update_doxygen_header.py b/tools/utils/update_doxygen_header.py old mode 100644 new mode 100755 index 8bd3c664..a67fadfe --- a/tools/utils/update_doxygen_header.py +++ b/tools/utils/update_doxygen_header.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -58,7 +57,7 @@ def get_git_root(path: str) -> str: """helper function to find the repository root Args: - path (string): path of test_f_guidelines + path (string): path of file in git repository Returns: root (string): root path of the git repository @@ -104,7 +103,7 @@ def main(): tmp = [] with subprocess.Popen(cmd, stdout=subprocess.PIPE) as p: tmp = p.communicate()[0].decode("utf-8").strip().splitlines() - logging.debug(f"cmd: {cmd}, out:\n{tmp}") + logging.debug("cmd: %s, out:\n%s", cmd, tmp) if not tmp: logging.warning("Could not find merge base.") sys.exit(0) @@ -114,7 +113,7 @@ def main(): tmp = [] with subprocess.Popen(cmd, stdout=subprocess.PIPE) as p: tmp = p.communicate()[0].decode("utf-8").strip().splitlines() - logging.debug(f"cmd: {cmd}, out:\n{tmp}") + logging.debug("cmd: %s, out:\n%s", cmd, tmp) if not tmp: logging.warning("Could not find any changed files.") sys.exit(0) @@ -140,7 +139,7 @@ def main(): i.write_text(txt, encoding="ascii") break if not m: - logging.error(f"Something went wrong, check file '{i.resolve()}'.") + logging.error("Something went wrong, check file '%s'.", i.resolve()) m = False any_file = True @@ -155,7 +154,7 @@ def main(): cmds = [] files_chunked = chunk_list(files_to_be_added, nr_of_cmds) for i in files_chunked: - cmds.append((["git", "add"] + i)) + cmds.append(["git", "add"] + i) else: cmds = (["git", "add"] + files_to_be_added,) for cmd in cmds: diff --git a/tools/utils/update_version.py b/tools/utils/update_version.py old mode 100644 new mode 100755 index c65e2dd4..2deac6ca --- a/tools/utils/update_version.py +++ b/tools/utils/update_version.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -59,7 +58,7 @@ def get_git_root(path: str = os.path.realpath(__file__)) -> Path: """helper function to find the repository root Args: - path (string): path of test_f_guidelines + path (string): path of file in git repository Returns: root (string): root path of the git repository @@ -78,7 +77,7 @@ def date_get_today() -> str: def get_previous_release(repo: Path) -> str: """Return the previous version number""" path = str(repo / "docs" / "general" / "releases.csv") - with open(path, "r", encoding="utf-8") as f: + with open(path, encoding="utf-8") as f: reader = csv.DictReader(f, delimiter=";") for row in reader: if row["foxBMS 2"] != "vx.y.z": @@ -93,28 +92,36 @@ def update_c_h_files(root, iso_date_today, _from, _to): + list((root / "docs").rglob("**/*.[c|h]")) + list((root / "src").rglob("**/*.[c|h]")) + list((root / "tests").rglob("**/*.[c|h]")) + + list((root / "tools/crc").rglob("**/*.[c|h]")) ) updated = re.compile(r" \* @updated (\d{4}-\d{2}-\d{2}) \(date of last update\)") updated_new = f" * @updated {iso_date_today} (date of last update)" old_version = f" * @version v{_from}" new_version = f" * @version v{_to}" - logging.debug(f"from: {old_version}") - logging.debug(f"to: {new_version}") + logging.debug("from: %s", old_version) + logging.debug("to: %s", new_version) for i in all_c_h_files: + do_replace = False try: txt = i.read_text(encoding="utf-8") - except: # pylint: disable=bare-except + # pylint: disable=bare-except + except: # noqa: E722 continue if " * @author foxBMS Team" in txt: - # re-read file to ensure ascii encoding on our files - txt = i.read_text(encoding="ascii") - logging.debug(f"Found foxBMS 2 file: {i}") - if old_version in txt: - logging.debug("...Replacing version") - txt = txt.replace(old_version, new_version, 1) - logging.debug("...Replacing updated") - txt = updated.sub(updated_new, txt) - i.write_text(txt, encoding="ascii") + do_replace = True + elif "nxp_mc33775a-ll" in i.name: + do_replace = True + if not do_replace: + continue + # re-read file to ensure ascii encoding on our files + txt = i.read_text(encoding="ascii") + logging.debug("Found foxBMS 2 file: %s", i) + if old_version in txt: + logging.debug("...Replacing version") + txt = txt.replace(old_version, new_version, 1) + logging.debug("...Replacing updated") + txt = updated.sub(updated_new, txt) + i.write_text(txt, encoding="ascii") def update_wscript(root, _from, _to): @@ -142,14 +149,14 @@ def update_citation(root, iso_date_today, _from, _to): def update_changelog(root, iso_date_today, _from, _to): """Update changelog""" changelog = root / "docs" / "general" / "changelog.rst" - logging.debug(f"Patching {changelog}") + logging.debug("Patching %s", changelog) txt = changelog.read_text(encoding="utf-8") if _to == "x.y.z": txt = txt.splitlines() if txt[47].startswith(f"[{_to}"): sys.exit(f"Something went wrong. {changelog} already sets 'v{_to}'.") txt = ( - txt[:45] + txt[:49] + f""" ******************** [{_to}] - {MAGIC_DATE} @@ -171,7 +178,7 @@ def update_changelog(root, iso_date_today, _from, _to): ===== """.splitlines() - + txt[46:] + + txt[50:] ) txt = "\n".join(txt) + "\n" else: @@ -195,7 +202,7 @@ def update_commit_fragments(root, previous_release, _from, _to): except ValueError: sys.exit("unexpected version identifier") commit_msg_file = root / "docs" / "general" / "commit-msgs" / "next-release.txt" - logging.debug(f"Patching {commit_msg_file}") + logging.debug("Patching %s", commit_msg_file) txt = commit_msg_file.read_text(encoding="utf-8") txt = txt.replace("", change_type) txt = txt.replace(f"foxBMS 2 (v{_from})", f"foxBMS 2 (v{_to})") @@ -262,15 +269,7 @@ def update_doc_macros(root, _from, _to): macros.write_text(txt, encoding="utf-8") -def update_fgui(root, _from, _to): - """Update fgui module""" - fgui = root / "tools" / "gui" / "fgui" / "__init__.py" - txt = fgui.read_text(encoding="utf-8") - txt = txt.replace(f'__version__ = "{_from}"', f'__version__ = "{_to}"', 1) - fgui.write_text(txt, encoding="utf-8") - - -def main(): # pylint: disable=too-many-statements +def main(): """Update the version information in all relevant files.""" parser = argparse.ArgumentParser() parser.add_argument( @@ -324,7 +323,6 @@ def main(): # pylint: disable=too-many-statements update_release_csv(root, iso_date_today, _from, _to) update_installation_instructions(root, _from, _to) update_doc_macros(root, _from, _to) - update_fgui(root, _from, _to) if __name__ == "__main__": diff --git a/tools/utils/verify_checksums.py b/tools/utils/verify_checksums.py deleted file mode 100644 index 43cc9e98..00000000 --- a/tools/utils/verify_checksums.py +++ /dev/null @@ -1,116 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Calculates the checksum of file or directory and checks it against a known -hash.""" - -import argparse -import hashlib -import logging -import sys -from pathlib import Path - -MAX_READ = 4096 - - -def get_checksum(files: list[Path]): - """returns the combined checksum for a list of files and their names.""" - checksum = hashlib.sha256() - for _file in files: - buf = _file.name.encode("utf-8") - checksum.update(buf) - with open(_file, "rb") as f: - while buf: - buf = f.read(MAX_READ) - checksum.update(buf) - logging.debug(f"{_file} --> {checksum.hexdigest()}") - - return checksum.hexdigest() - - -def main(): - """verifies a checksum""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - parser.add_argument( - dest="fd_input", - help="FILE or DIRECTORY to be checked", - ) - parser.add_argument( - dest="known_hash", - help="Known hash against which should be tested.", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - files = Path(args.fd_input) - - logging.info(f"Known hash is: {args.known_hash}") - - if files.is_file(): - files = [files] - else: - files = [i for i in files.rglob("*") if i.is_file()] - - calculated_hash = get_checksum(files) - logging.info(f"Calculated hash is: {calculated_hash}") - - if not args.known_hash == calculated_hash: - logging.error("Hashes do not match.") - sys.exit(1) - else: - logging.debug("Hash matches.") - - -if __name__ == "__main__": - main() diff --git a/tools/utils/verify_doc_source_links.py b/tools/utils/verify_doc_source_links.py deleted file mode 100644 index d8e85a20..00000000 --- a/tools/utils/verify_doc_source_links.py +++ /dev/null @@ -1,127 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Checks files references that are used in some documentation files.""" - -import argparse -import logging -import sys -import re -from pathlib import Path - -import git -from git.exc import InvalidGitRepositoryError - -SCRIPT_DIR = Path(__file__).parent.resolve() - - -def main(): - """This script does this and that""" - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbosity", - dest="verbosity", - action="count", - default=0, - help="set verbosity level", - ) - args = parser.parse_args() - - if args.verbosity == 1: - logging.basicConfig(level=logging.INFO) - elif args.verbosity > 1: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.ERROR) - - try: - repo = git.Repo(SCRIPT_DIR, search_parent_directories=True) - root = Path(repo.git.rev_parse("--show-toplevel")) - except InvalidGitRepositoryError: - sys.exit("Test can only be run in a git repository.") - - ls_files = repo.git.ls_files("docs/software/modules/*.rst").splitlines() - rst_files: list[Path] = [root / i for i in ls_files] - reg = re.compile( - # r"``((tests|src)\/.*)``\s+ \(`API\s+\<(.*)\>`__,\s+\`source\s\<(.*)`__\)" - r"``((tests|src)\/.*)``\s+ \(`API\s+\<(.*)\>`__,\s+\`source\s\<(.*)\>`__\)" - ) - err = 0 - for i in rst_files: - if not i.is_file(): - logging.warning(f"File '{i}' does not exists.") - continue - txt = i.read_text(encoding="utf-8") - found_references = [] - for line in txt.splitlines(): - m = reg.search(line) - if not m: - continue - found_references.append( - (Path(m.group(1)).name, Path(m.group(3)).name, Path(m.group(4)).name) - ) - for ref in found_references: - if ref[0].endswith(".c"): - api_end = "_8c.html" - tests_end = "_8c_source.html" - elif ref[0].endswith(".h"): - api_end = "_8h.html" - tests_end = "_8h_source.html" - expected_api_ref = ref[0].replace("_", "__")[:-2] + api_end - expected_tests_ref = ref[0].replace("_", "__")[:-2] + tests_end - logging.debug(ref) - if not ref[1] == expected_api_ref: - logging.error( - f"In file '{i}' for \n\t'{ref[0]}'\nexpected\n\t'" - f"{expected_api_ref}'\nbut found\n\t'{ref[1]}'.\n" - ) - err += 1 - if not ref[2] == expected_tests_ref: - logging.error( - f"In file '{i}' for \n\t'{ref[0]}'\nexpected\n\t'" - f"{expected_tests_ref}'\nbut found\n\t'{ref[2]}'.\n" - ) - err += 1 - sys.exit(err) - - -if __name__ == "__main__": - main() diff --git a/tools/vendor/ceedling/GIT_COMMIT_SHA b/tools/vendor/ceedling/GIT_COMMIT_SHA new file mode 100644 index 00000000..cbe04a8f --- /dev/null +++ b/tools/vendor/ceedling/GIT_COMMIT_SHA @@ -0,0 +1 @@ +ba45d2c diff --git a/tools/vendor/ceedling/Gemfile b/tools/vendor/ceedling/Gemfile index a00f5e7f..887f9485 100644 --- a/tools/vendor/ceedling/Gemfile +++ b/tools/vendor/ceedling/Gemfile @@ -1,6 +1,13 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + source "http://rubygems.org/" -gem "bundler" +gem "bundler", "~> 2.5" gem "rake" gem "rspec", "~> 3.8" gem "require_all" @@ -9,6 +16,7 @@ gem "diy" gem "rr" gem "thor" gem "deep_merge" +gem "unicode-display_width" #these will be used if present, but ignored otherwise #gem "curses" diff --git a/tools/vendor/ceedling/Gemfile.lock b/tools/vendor/ceedling/Gemfile.lock index 0a2715d0..5cb2894c 100644 --- a/tools/vendor/ceedling/Gemfile.lock +++ b/tools/vendor/ceedling/Gemfile.lock @@ -3,34 +3,37 @@ GEM specs: constructor (2.0.0) deep_merge (1.2.2) - diff-lcs (1.5.0) + diff-lcs (1.5.1) diy (1.1.2) constructor (>= 1.0.0) - rake (13.0.6) + rake (13.2.1) require_all (3.0.0) rr (3.1.0) - rspec (3.12.0) - rspec-core (~> 3.12.0) - rspec-expectations (~> 3.12.0) - rspec-mocks (~> 3.12.0) - rspec-core (3.12.0) - rspec-support (~> 3.12.0) - rspec-expectations (3.12.2) + rspec (3.13.0) + rspec-core (~> 3.13.0) + rspec-expectations (~> 3.13.0) + rspec-mocks (~> 3.13.0) + rspec-core (3.13.0) + rspec-support (~> 3.13.0) + rspec-expectations (3.13.0) diff-lcs (>= 1.2.0, < 2.0) - rspec-support (~> 3.12.0) - rspec-mocks (3.12.3) + rspec-support (~> 3.13.0) + rspec-mocks (3.13.1) diff-lcs (>= 1.2.0, < 2.0) - rspec-support (~> 3.12.0) - rspec-support (3.12.0) - thor (1.2.1) + rspec-support (~> 3.13.0) + rspec-support (3.13.1) + thor (1.3.1) + unicode-display_width (2.5.0) PLATFORMS ruby x64-mingw-ucrt x64-mingw32 + x86_64-darwin-22 + x86_64-linux DEPENDENCIES - bundler + bundler (~> 2.5) constructor deep_merge diy @@ -39,6 +42,7 @@ DEPENDENCIES rr rspec (~> 3.8) thor + unicode-display_width BUNDLED WITH - 2.3.26 + 2.5.10 diff --git a/tools/vendor/ceedling/README.md b/tools/vendor/ceedling/README.md index a9875871..c291cbac 100644 --- a/tools/vendor/ceedling/README.md +++ b/tools/vendor/ceedling/README.md @@ -1,6 +1,71 @@ # Ceedling This directory contains the vendored files of Ceedling, the unit-test-runner -used by this project. It is released, if not otherwise specified under the -attached license. In order to use it, you have to install all necessary -dependencies by calling `bundle install` **in this directory**. +used by this project. +In order to use it, you have to install all necessary dependencies by calling +`bundle install` **in this directory**. + +## Using Ceedling Directly + +Ceedling can be used outside of the implemened toolchain by using the following +steps: + +- Make the correct Ruby version available in PATH (see + `/conf/env/paths_win32.txt`) +- Copy `/conf/unit/project_win32.yml` or + `/conf/unit/project_posix.yml` to `/build/unit_test/project.yml` +- Generate the HAL sources from the HALCoGen files for the project + (`conf/hcg/hcg.hcg`) +- Copy the HALCoGen generated directories (`source` and `include`) to + `/build/unit_test/`. +- `cd` into `/build/unit_test/` and run Ceedling commands (e.g., + `ceedling test:test_adc.c`) + +## How to Update the Vendored Ceedling + +- Check the Ceedling license of the latest release on + . + If it is valid to be used in the foxBMS project and therefore generally to be + updated. + If it is needed, update the license information of `license.txt` in this + directory. +- Download the desired Ceedling gem from + . +- Download the `Gemfile` and `Gemfile.lock` for the specific release from + . +- Make the correct Ruby version available in PATH (see + `/conf/env/paths_win32.txt`) +- Install the latest Ceedling version, e.g., by + + ```bash + # replace file name of the gem with the actually downloaded one + gem install path/to/ceedling-x.y.z-abcdef.gem + ``` + +- Run in repository root + + ```bash + # assuming we are in the repository root + # create the files to be vendored + ceedling new --local tmp + # if on Windows, convert the files to CRLF + pushd tmp/vendor/ceedling + find . -type f -print0 | xargs -0 unix2dos + popd + # remove the old vendored files + rm -rf tools/vendor/ceedling/bin + rm -rf tools/vendor/ceedling/lib + rm -rf tools/vendor/ceedling/plugins + rm -rf tools/vendor/ceedling/vendor + rm -f tools/vendor/ceedling/GIT_COMMIT_SHA + rm -f tools/vendor/ceedling/license.txt + # copy the new Ceedling version + cp -r tmp/vendor/ceedling/bin/ tools/vendor/ceedling/bin + cp -r tmp/vendor/ceedling/lib/ tools/vendor/ceedling/lib + cp -r tmp/vendor/ceedling/plugins/ tools/vendor/ceedling/plugins + cp -r tmp/vendor/ceedling/vendor/ tools/vendor/ceedling/vendor + cp tmp/vendor/ceedling/GIT_COMMIT_SHA tools/vendor/ceedling/GIT_COMMIT_SHA + cp tmp/vendor/ceedling/license.txt tools/vendor/ceedling/license.txt + ``` + +- Add and commit the changes. diff --git a/tools/vendor/ceedling/bin/actions_wrapper.rb b/tools/vendor/ceedling/bin/actions_wrapper.rb new file mode 100644 index 00000000..f5a06c46 --- /dev/null +++ b/tools/vendor/ceedling/bin/actions_wrapper.rb @@ -0,0 +1,42 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + +require 'thor' +require 'fileutils' + +# Wrapper for handy Thor Actions +class ActionsWrapper + include Thor::Base + include Thor::Actions + + # Most important mixin method is Thor::Actions class method `source_root()` we call externally + + def _directory(src, *args) + directory( src, *args ) + end + + def _copy_file(src, *args) + copy_file( src, *args ) + end + + def _touch_file(src) + FileUtils.touch(src) + end + + def _chmod(src, mode, *args) + chmod( src, mode, *args ) + end + + def _empty_directory(dest, *args) + empty_directory( dest, *args ) + end + + def _gsub_file(path, flag, *args, &block) + gsub_file( path, flag, *args, &block ) + end + +end diff --git a/tools/vendor/ceedling/bin/app_cfg.rb b/tools/vendor/ceedling/bin/app_cfg.rb new file mode 100644 index 00000000..e09c33d7 --- /dev/null +++ b/tools/vendor/ceedling/bin/app_cfg.rb @@ -0,0 +1,119 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + +require "io/console" + +# Create our global application configuration option set +# This approach bridges clean Ruby and Rake + +class CeedlingAppConfig + + def initialize() + # Default installation location determined from the location of this file + ceedling_root_path = File.join( File.dirname( __FILE__ ), '..' ) + + # Create internal hash of needed values + @app_cfg = { + # Base path of any Ceedling installation + :ceedling_root_path => '', + + # Ceedling installation base path + /lib + :ceedling_lib_base_path => '', + + # Ceedling installation base path + /lib/ceedling + :ceedling_lib_path => '', + + # Ceedling installation base path + /plugins + :ceedling_plugins_path => '', + + # Ceedling installation base path + /vendor + :ceedling_vendor_path => '', + + # Ceedling installation base path + /examples + :ceedling_examples_path => '', + + # Ceedling lib path + lib/ceedling/rakefile.rb + :ceedling_rakefile_filepath => '', + + # Blank initial value for completeness + :project_config => {}, + + # Default, blank value + :log_filepath => '', + + # Only specified in project config (no command line or environment variable) + :default_tasks => ['test:all'], + + # Default, blank test case filters + :include_test_case => '', + :exclude_test_case => '', + + # Default to no duration logging for setup & build ops in Rake context + :stopwatch => false, + + # Default to `exit(1)` upon failing test cases + :tests_graceful_fail => false, + + # Set terminal width (in columns) to a default + :terminal_width => 120, + } + + set_paths( ceedling_root_path ) + + # Try to query terminal width (not always available on all platforms) + begin + @app_cfg[:terminal_width] = (IO.console.winsize)[1] + rescue + # Do nothing; allow value already set to stand as default + end + end + + def set_project_config(config) + @app_cfg[:project_config] = config + end + + def set_log_filepath(filepath) + @app_cfg[:log_filepath] = filepath + end + + def set_include_test_case(matcher) + @app_cfg[:include_test_case] = matcher + end + + def set_exclude_test_case(matcher) + @app_cfg[:exclude_test_case] = matcher + end + + def set_stopwatch(enable) + @app_cfg[:stopwatch] = enable + end + + def set_tests_graceful_fail(enable) + @app_cfg[:tests_graceful_fail] = enable + end + + def set_paths(root_path) + _root_path = File.expand_path( root_path ) + lib_base_path = File.join( _root_path, 'lib' ) + lib_path = File.join( lib_base_path, 'ceedling' ) + + @app_cfg[:ceedling_root_path] = _root_path + @app_cfg[:ceedling_lib_base_path] = lib_base_path + @app_cfg[:ceedling_lib_path] = lib_path + @app_cfg[:ceedling_vendor_path] = File.join( _root_path, 'vendor' ) + @app_cfg[:ceedling_plugins_path] = File.join( _root_path, 'plugins' ) + @app_cfg[:ceedling_examples_path] = File.join( _root_path, 'examples' ) + + @app_cfg[:ceedling_rakefile_filepath] = File.join( lib_path, 'rakefile.rb' ) + end + + # External accessor to preserve hash-like read accesses + def [](key) + return @app_cfg[key] + end + +end diff --git a/tools/vendor/ceedling/bin/ceedling b/tools/vendor/ceedling/bin/ceedling index 5a1d4958..6ad1716d 100644 --- a/tools/vendor/ceedling/bin/ceedling +++ b/tools/vendor/ceedling/bin/ceedling @@ -1,364 +1,161 @@ #!/usr/bin/env ruby +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= -#these are always used require 'rubygems' -require 'fileutils' -# Check for the main project file (either the one defined in the ENV or the default) -main_filepath = ENV['CEEDLING_MAIN_PROJECT_FILE'] -project_found = (!main_filepath.nil? && File.exist?(main_filepath)) -if (!project_found) - main_filepath = "project.yml" - project_found = File.exist?(main_filepath) -end - -def is_windows? - return ((RbConfig::CONFIG['host_os'] =~ /mswin|mingw/) ? true : false) if defined?(RbConfig) - return ((Config::CONFIG['host_os'] =~ /mswin|mingw/) ? true : false) -end - -def here - File.join(File.expand_path(File.dirname(__FILE__)),"/..") -end - -unless (project_found) -#===================================== We Do Not Have A Project ================================================ - - puts "Welcome to Ceedling!" - require 'thor' - - class CeedlingTasks < Thor - include Thor::Actions - - desc "new PROJECT_NAME", "create a new ceedling project" - method_option :docs, :type => :boolean, :default => false, :desc => "Add docs in project vendor directory" - method_option :local, :type => :boolean, :default => false, :desc => "Create a copy of Ceedling in the project vendor directory" - method_option :gitignore, :type => :boolean, :default => false, :desc => "Create a gitignore file for ignoring ceedling generated files" - method_option :no_configs, :type => :boolean, :default => false, :desc => "Don't install starter configuration files" - method_option :noconfigs, :type => :boolean, :default => false - - #deprecated: - method_option :no_docs, :type => :boolean, :default => false - method_option :nodocs, :type => :boolean, :default => false - method_option :as_gem, :type => :boolean, :default => false - method_option :asgem, :type => :boolean, :default => false - method_option :with_ignore, :type => :boolean, :default => false - method_option :withignore, :type => :boolean, :default => false - def new(name, silent = false) - copy_assets_and_create_structure(name, silent, false, options) - end - - desc "upgrade PROJECT_NAME", "upgrade ceedling for a project (not req'd if gem used)" - def upgrade(name, silent = false) - as_local = true - yaml_path = File.join(name, "project.yml") - begin - require File.join(here,"lib","ceedling","yaml_wrapper.rb") - as_local = (YamlWrapper.new.load(yaml_path)[:project][:which_ceedling] != 'gem') - rescue - raise "ERROR: Could not find valid project file '#{yaml_path}'" - end - found_docs = File.exist?( File.join(name, "docs", "CeedlingPacket.md") ) - copy_assets_and_create_structure(name, silent, true, {:upgrade => true, :no_configs => true, :local => as_local, :docs => found_docs}) - end - - no_commands do - def copy_assets_and_create_structure(name, silent=false, force=false, options = {}) - - puts "WARNING: --no_docs deprecated. It is now the default. Specify -docs if you want docs installed." if (options[:no_docs] || options[:nodocs]) - puts "WARNING: --as_gem deprecated. It is now the default. Specify -local if you want ceedling installed to this project." if (options[:as_gem] || options[:asgem]) - puts "WARNING: --with_ignore deprecated. It is now called -gitignore" if (options[:with_ignore] || options[:withignore]) - - use_docs = options[:docs] || false - use_configs = !(options[:no_configs] || options[:noconfigs] || false) - use_gem = !(options[:local]) - use_ignore = options[:gitignore] || false - is_upgrade = options[:upgrade] || false - - ceedling_path = File.join(name, 'vendor', 'ceedling') - source_path = File.join(name, 'src') - test_path = File.join(name, 'test') - test_support_path = File.join(name, 'test/support') - - # If it's not an upgrade, make sure we have the paths we expect - if (!is_upgrade) - [source_path, test_path, test_support_path].each do |d| - FileUtils.mkdir_p d - end - else - prj_yaml = YamlWrapper.new.load(File.join(name, 'project.yml')) - test_support_path = if prj_yaml.key?(:path) && \ - prj_yaml[:path].key?(:support) - prj_yaml.key?[:path][:support] - else - '' - end - end - - # Genarate gitkeep in test support path - FileUtils.touch(File.join(test_support_path, '.gitkeep')) unless \ - test_support_path.empty? - - # If documentation requested, create a place to dump them and do so - doc_path = '' - if use_docs - doc_path = use_gem ? File.join(name, 'docs') : File.join(ceedling_path, 'docs') - FileUtils.mkdir_p doc_path - - in_doc_path = lambda {|f| File.join(doc_path, f)} - - # Add documentation from main projects to list - doc_files = {} - ['docs','vendor/unity/docs','vendor/cmock/docs','vendor/cexception/docs'].each do |p| - Dir[ File.expand_path(File.join(here, p, '*.md')) ].each do |f| - doc_files[ File.basename(f) ] = f unless(doc_files.include? f) - end - end - - # Add documentation from plugins to list - Dir[ File.join(here, 'plugins/**/README.md') ].each do |plugin_path| - k = "plugin_" + plugin_path.split(/\\|\//)[-2] + ".md" - doc_files[ k ] = File.expand_path(plugin_path) - end - - # Copy all documentation - doc_files.each_pair do |k, v| - copy_file(v, in_doc_path.call(k), :force => force) - end - end - - # If installed locally to project, copy ceedling, unity, cmock, & supports to vendor - unless use_gem - FileUtils.mkdir_p ceedling_path - - #copy full folders from ceedling gem into project - %w{plugins lib bin}.map do |f| - {:src => f, :dst => File.join(ceedling_path, f)} - end.each do |f| - directory(f[:src], f[:dst], :force => force) - end +# Get the path for our current code directory +ceedling_bin_path = File.expand_path( File.join( File.dirname( __FILE__ ), '..', 'bin' ) ) - # mark ceedling as an executable - File.chmod(0755, File.join(ceedling_path, 'bin', 'ceedling')) unless is_windows? +# Add load path so we can `require` files in bin/ +$LOAD_PATH.unshift( ceedling_bin_path ) - #copy necessary subcomponents from ceedling gem into project - sub_components = [ - {:src => 'vendor/c_exception/lib/', :dst => 'vendor/c_exception/lib'}, - {:src => 'vendor/cmock/config/', :dst => 'vendor/cmock/config'}, - {:src => 'vendor/cmock/lib/', :dst => 'vendor/cmock/lib'}, - {:src => 'vendor/cmock/src/', :dst => 'vendor/cmock/src'}, - {:src => 'vendor/diy/lib', :dst => 'vendor/diy/lib'}, - {:src => 'vendor/unity/auto/', :dst => 'vendor/unity/auto'}, - {:src => 'vendor/unity/src/', :dst => 'vendor/unity/src'}, - ] +# Pull in our startup configuration code in bin/ +require 'app_cfg' +CEEDLING_APPCFG = CeedlingAppConfig.new() - sub_components.each do |c| - directory(c[:src], File.join(ceedling_path, c[:dst]), :force => force) - end - end +# Add load paths for `require 'ceedling/*'` statements in bin/ code +$LOAD_PATH.unshift( CEEDLING_APPCFG[:ceedling_lib_base_path] ) - # We're copying in a configuration file if we haven't said not to - if (use_configs) - dst_yaml = File.join(name, 'project.yml') - src_yaml = if use_gem - File.join(here, 'assets', 'project_as_gem.yml') - else - if is_windows? - copy_file(File.join('assets', 'ceedling.cmd'), File.join(name, 'ceedling.cmd'), :force => force) - else - copy_file(File.join('assets', 'ceedling'), File.join(name, 'ceedling'), :force => force) - File.chmod(0755, File.join(name, 'ceedling')) - end - File.join(here, 'assets', 'project_with_guts.yml') - end +require 'constructor' # Assumed installed via Ceedling gem dependencies +require 'ceedling/constants' - # Perform the actual clone of the config file, while updating the version - File.open(dst_yaml,'w') do |dst| - require File.expand_path(File.join(File.dirname(__FILE__),"..","lib","ceedling","version.rb")) - dst << File.read(src_yaml).gsub(":ceedling_version: '?'",":ceedling_version: #{Ceedling::Version::CEEDLING}") - puts " create #{dst_yaml}" - end - end +# Centralized exception handler for: +# 1. Bootloader (bin/) +# 2. Application (lib/) last resort / outer exception handling +def boom_handler(loginator, exception) + $stderr.puts( "\n" ) - # Copy the gitignore file if requested - if (use_ignore) - copy_file(File.join('assets', 'default_gitignore'), File.join(name, '.gitignore'), :force => force) - end + if !loginator.nil? + loginator.log( exception.message, Verbosity::ERRORS, LogLabels::EXCEPTION ) + loginator.log( "Backtrace ==>", Verbosity::DEBUG ) + # Output to console the exception backtrace, formatted like Ruby does it + loginator.log( "#{exception.backtrace.first}: #{exception.message} (#{exception.class})", Verbosity::DEBUG ) + loginator.log( exception.backtrace.drop(1).map{|s| "\t#{s}"}.join("\n"), Verbosity::DEBUG ) - unless silent - puts "\n" - puts "Project '#{name}' #{force ? "upgraded" : "created"}!" - puts " - Tool documentation is located in #{doc_path}" if use_docs - puts " - Execute 'ceedling help' from #{name} to view available test & build tasks" - puts '' - end - end - end - - desc "examples", "list available example projects" - def examples() - puts "Available sample projects:" - FileUtils.cd(File.join(here, "examples")) do - Dir["*"].each {|proj| puts " #{proj}"} - end - end - - desc "example PROJ_NAME [DEST]", "new specified example project (in DEST, if specified)" - def example(proj_name, dest=nil) - if dest.nil? then dest = proj_name end - - copy_assets_and_create_structure(dest, true, false, {:local=>true, :docs=>true}) - - dest_src = File.join(dest,'src') - dest_test = File.join(dest,'test') - dest_project = File.join(dest,'project.yml') - - directory "examples/#{proj_name}/src", dest_src - directory "examples/#{proj_name}/test", dest_test - remove_file dest_project - copy_file "examples/#{proj_name}/project.yml", dest_project - - puts "\n" - puts "Example project '#{proj_name}' created!" - puts " - Tool documentation is located in vendor/ceedling/docs" - puts " - Execute 'ceedling help' to view available test & build tasks" - puts '' - end - - desc "version", "return the version of the tools installed" - def version() - require File.expand_path(File.join(File.dirname(__FILE__),"..","lib","ceedling","version.rb")) - puts " Ceedling:: #{Ceedling::Version::CEEDLING}" - puts " CMock:: #{Ceedling::Version::CMOCK}" - puts " Unity:: #{Ceedling::Version::UNITY}" - puts " CException:: #{Ceedling::Version::CEXCEPTION}" - end - end - - if (ARGV[0] =~ /^\-T$/) - puts "\n(No Project Detected, Therefore Showing Options to Create Projects)" - CeedlingTasks.tasks.each_pair do |k,v| - puts v.usage.ljust(25,' ') + v.description - end - puts "\n" + # Something went really wrong... logging isn't even up and running yet else - CeedlingTasks.source_root here - CeedlingTasks.start - end - -#===================================== We Have A Project Already ================================================ -else - require File.join(here,"lib","ceedling","yaml_wrapper.rb") - require 'rbconfig' - - #determine platform - platform = begin - case(RbConfig::CONFIG['host_os']) - when /mswin|mingw|cygwin/i - :mswin - when /darwin/ - :osx - else - :linux - end - rescue - :linux + $stderr.puts( "#{exception.class} ==> #{exception.message}" ) + $stderr.puts( "Backtrace ==>" ) + $stderr.puts( exception.backtrace ) end +end - #create our default meta-runner option set - options = { - :pretest => nil, - :args => [], - :add_path => [], - :path_connector => (platform == :mswin) ? ";" : ":", - :graceful_fail => false, - :which_ceedling => (Dir.exist?("vendor/ceedling") ? "vendor/ceedling" : 'gem'), - :default_tasks => [ 'test:all' ], - :list_tasks => false - } - - #guess that we need a special script file first if it exists - if (platform == :mswin) - options[:pretest] = File.exist?("#{ platform }_setup.bat") ? "#{ platform }_setup.bat" : nil - else - options[:pretest] = File.exist?("#{ platform }_setup.sh") ? "source #{ platform }_setup.sh" : nil - end - #merge in project settings if they can be found here - yaml_options = YamlWrapper.new.load(main_filepath) - if (yaml_options[:paths]) - options[:add_path] = yaml_options[:paths][:tools] || [] +# Entry point +begin + diy_vendor_path = File.join( CEEDLING_APPCFG[:ceedling_vendor_path], 'diy/lib' ) + + # Construct all bootloader objects + # 1. Add full path to $LOAD_PATH to simplify objects.yml + # 2. Add vendored DIY to $LOAD_PATH so we can use it + # 3. Require DIY (used by Ceedling application too) + # 4. Perform object construction + dependency injection from bin/objects.yml + # 5. Remove all paths added to $LOAD_PATH + # (Main application will restore certain paths -- possibly updated by :which_ceedling) + $LOAD_PATH.unshift( + CEEDLING_APPCFG[:ceedling_lib_path], + diy_vendor_path + ) + + require 'diy' + bin_objects_filepath = File.join( ceedling_bin_path, 'objects.yml' ) + objects = {} # Empty initial hash to be redefined (fingers crossed) + objects = DIY::Context.from_yaml( File.read( bin_objects_filepath ) ) + objects.build_everything() + + # Extract objects shared between bootloader and application + # This prevents double instantiation and preserves object state in handoff + handoff_objects = {} + handoff = [ + :loginator, + :file_wrapper, + :yaml_wrapper, + :config_walkinator, + :system_wrapper, + :verbosinator + ] + CEEDLING_HANDOFF_OBJECTS = handoff_objects + handoff.each {|name| handoff_objects[name] = objects[name] } + + # Load Thor-based top-level CLI after: + # 1. CEEDLING_BIN load path set + # 2. `objects` hash filled with DIY output + # 3. CEEDLING_HANDOFF_OBJECTS global is set + require 'cli' + + # Remove all load paths we've relied on (main application will set up load paths again) + $LOAD_PATH.delete( ceedling_bin_path ) + $LOAD_PATH.delete( CEEDLING_APPCFG[:ceedling_lib_path] ) + $LOAD_PATH.delete( diy_vendor_path ) + + # Keep a copy of the command line for edge case CLI hacking (Thor consumes ARGV) + _ARGV = ARGV.clone + + # Especially on Windows, tell Thor & Rake how wide the terminal is + ENV['THOR_COLUMNS'] = CEEDLING_APPCFG[:terminal_width].to_s() + ENV['RAKE_COLUMNS'] = ENV['THOR_COLUMNS'] + + # + # NOTE: See comment block in cli.rb to understand CLI handling + # ------------------------------------------------------------ + # + + # Command line filtering hacks + # - Backwards compatibility to silently preserve Rake `-T` CLI handling + # - Add in common `--version` or `-v` version handling + # Note: This `if` logic is necessary to ensure any other argument lists of size 1 end up with Thor + if (ARGV.size() == 1) and (ARGV[0] == '-T' or ARGV[0] == '--version' or ARGV[0] == '-v') + case ARGV[0] + when '-T' + # Call Rake task listing handler w/ default handling of project file and mixins + objects[:cli_handler].rake_help( env:ENV, app_cfg:CEEDLING_APPCFG ) + + when '--version', '-v' + # Call Ceedling's version handler directly + objects[:cli_handler].version( CEEDLING_APPCFG[:ceedling_root_path] ) + end + + # Run command line args through Thor (including "naked" Rake tasks) else - options[:add_path] = [] - end - options[:graceful_fail] = yaml_options[:graceful_fail] if yaml_options[:graceful_fail] - options[:which_ceedling] = yaml_options[:project][:which_ceedling] if (yaml_options[:project] && yaml_options[:project][:which_ceedling]) - options[:default_tasks] = yaml_options[:default_tasks] if yaml_options[:default_tasks] - - #sort through command line options - ARGV.each do |v| - case(v) - when /^(?:new|examples?|templates?)$/ - puts "\nOops. You called ceedling with argument '#{v}'.\n" + - " This is an operation that will create a new project... \n" + - " but it looks like you're already in a project. If you really \n" + - " want to do this, try moving to an empty folder.\n\n" - abort - when /^help$/ - options[:list_tasks] = true - when /^-T$/ - options[:list_tasks] = true - when /^--tasks$/ - options[:list_tasks] = true - when /^project:(\w+)/ - ENV['CEEDLING_USER_PROJECT_FILE'] = "#{$1}.yml" - when /^--test_case=(\w+)/ - ENV['CEEDLING_INCLUDE_TEST_CASE_NAME'] = $1 - when /^--exclude_test_case=(\w+)/ - ENV['CEEDLING_EXCLUDE_TEST_CASE_NAME'] = $1 - else - options[:args].push(v) - end + CeedlingTasks::CLI.start( ARGV, + { + :app_cfg => CEEDLING_APPCFG, + :objects => objects, + } + ) end - #add to the path - if (options[:add_path] && !options[:add_path].empty?) - path = ENV["PATH"] - options[:add_path].each do |p| - f = File.expand_path(File.dirname(__FILE__),p) - path = (f + options[:path_connector] + path) unless path.include? f - end - ENV["PATH"] = path +# Handle case of Thor application CLI failing to handle command line arguments. +rescue Thor::UndefinedCommandError + # Marrying Thor & Rake command line handling creates a gap (see comments in CLI handling). + # If a user enters only Rake build tasks at the command line followed by Thor flags, + # our Thor configuration doesn't see those flags. + # We catch the exception of unrecognized Thor commands here (i.e. any "naked" Rake tasks), + # and try again by forcing the Thor `build` command at the beginning of the command line. + # This way, our Thor handling will process option flags and properly pass the Rake tasks + # along as well. + + # Necessary nested exception handling + begin + CeedlingTasks::CLI.start( _ARGV.unshift( 'build' ), + { + :app_cfg => CEEDLING_APPCFG, + :objects => objects, + } + ) + rescue StandardError => ex + boom_handler( objects[:loginator], ex ) + exit(1) end - # Load Ceedling (either through the rakefile OR directly) - if (File.exist?("rakefile.rb")) - load 'rakefile.rb' - else - if (options[:which_ceedling] == 'gem') - require 'ceedling' - else - load "#{options[:which_ceedling]}/lib/ceedling.rb" - end - Ceedling.load_project - end - - Rake.application.standard_exception_handling do - if options[:list_tasks] - # Display helpful task list when requested. This required us to dig into Rake internals a bit - Rake.application.define_singleton_method(:name=) {|n| @name = n} - Rake.application.name = 'ceedling' - Rake.application.options.show_tasks = :tasks - Rake.application.options.show_task_pattern = /^(?!.*build).*$/ - Rake.application.display_tasks_and_comments() - else - task :default => options[:default_tasks] - - # Run our Tasks! - Rake.application.collect_command_line_tasks(options[:args]) - Rake.application.top_level - end - end - true -#=================================================================================================================== +# Bootloader boom handling +rescue StandardError => ex + boom_handler( objects[:loginator], ex ) + exit(1) end + diff --git a/tools/vendor/ceedling/bin/cli.rb b/tools/vendor/ceedling/bin/cli.rb new file mode 100644 index 00000000..4608a472 --- /dev/null +++ b/tools/vendor/ceedling/bin/cli.rb @@ -0,0 +1,445 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + +require 'thor' +require 'ceedling/constants' # From Ceedling application + +## +## Command Line Handling +## ===================== +## +## OVERVIEW +## -------- +## Ceedling's command line handling marries Thor and Rake. Thor does not call +## Rake. Rather, a handful of command line conventions, edge case handling, +## and Thor features are stitched together to ensure a given command line is +## processed by Thor and/or Rake. +## +## Ceedling's command line is processed with these mechanisms: +## 1. Special / edge case hacking of ARGV directly. +## 2. Thor for all application commands and flags. +## 3. Handing off to Rake from either (1) or (2) for task listing or running +## build tasks. +## +## EDGE CASE HACKING +## ----------------- +## Special / edge cases: +## 1. Silent backwards compatibility support for Rake's `-T`. +## 2. Thor does not recognize "naked" Rake build tasks as application commands +## (`ceedling test:all` instead of `ceedling build test:all`). So, we catch +## this exception and then provide the command line back to Thor as a `build` +## command line. This also allows us to ensure Thor processes `build` option +## flags following naked build tasks that would otherwise be ignored if +## we simply passed a failing command line to Rake. +## +## THOR +## ---- +## Thor is configured or overridden with these special attributes: +## * The default task is `build`. This means that if the `build` keyword is +## omitted but Thor otherwise recognizes the command line (a `build` flag is +## the first item on the command line), it will process it as the `build` +## command. The build command takes flags and tasks. Tasks are handed off to +## Rake to process. If no `build` keyword is present and `build` flags come +## after tasks, Thor sees the command line as unhandled commands. +## * The PermissiveCLI code handles unrecognized command exception so as to +## eat the Thor complaint and re-throw the exception for edge case handling. +## +## NOTES +## ----- +## * Ultimately, any unrecognized command or task is processed by Rake, and +## Rake makes the complaint. +## + + +## +## This Class +## ========== +## +## The nature of Thor more-or-less requires this class to be used as a class +## and not as an insantiated object. This shows up in a variety of ways: +## * The calling convention is `CeedlingTasks::CLI.start( ARGV )` +## * Many of the methods necessary to configure the CLI class are class +## methods in Thor and are called that way. +## +## The nature of Thor both requires and allows for some slightly ugly or +## brittle code -- relying on globals, etc. +## +## Because of this, care has been taken that this class contains as little +## logic as possible and is the funnel for any and all necessary global +## references and other little oddball needs. +## + + +# Special handling to prevent Thor from barfing on unrecognized CLI arguments +# (i.e. Rake tasks) +module PermissiveCLI + def self.extended(base) + super + base.check_unknown_options! + end + + # Redefine the Thor CLI entrypoint and exception handling + def start(args, config={}) + # Copy args as Thor changes them within the call chain of dispatch() + _args = args.clone() + + # Call Thor's handlers as it does in start() + config[:shell] ||= Thor::Base.shell.new + dispatch(nil, args, nil, config) + + # Handle undefined commands at top-level and for `help ` + rescue Thor::UndefinedCommandError => ex + # Handle `help` for an argument that is not an application command such as `new` or `build` + if _args[0].downcase() == 'help' + + # Raise ftal StandardError to differentiate from UndefinedCommandError + msg = "Argument '#{_args[1]}' is not a recognized application command with detailed help. " + + "It may be a build / plugin task without detailed help or simply a goof." + raise( msg ) + + # Otherwise, eat unhandled command errors + else + # - No error message + # - No `exit()` + # - Re-raise to allow special, external CLI handling logic + raise ex + end + end +end + +module CeedlingTasks + + VERBOSITY_NORMAL = 'normal' + VERBOSITY_DEBUG = 'debug' + + DOC_LOCAL_FLAG = "Install Ceedling plus supporting tools to vendor/" + + DOC_DOCS_FLAG = "Copy all documentation to docs/ subdirectory of project" + + DOC_PROJECT_FLAG = "Loads the filepath as your base project configuration" + + DOC_MIXIN_FLAG = "Merges the configuration mixin by name or filepath." + + LONGDOC_LOCAL_FLAG = "`--local` copies Ceedling and its dependencies to a vendor/ + subdirectory in the root of the project. It also installs a + platform-appropriate executable script `ceedling` at the root of the + project." + + LONGDOC_MIXIN_FLAG = "`--mixin` merges the specified configuration mixin. This + flag may be repeated for multiple mixins. A simple mixin name initiates a + lookup from within mixin load paths in your project file and among built-in + mixins. A filepath and/or filename (with extension) will instead merge the + specified YAML file. See documentation for complete details. + \x5> --mixin my_compiler --mixin my/path/mixin.yml" + + class CLI < Thor + include Thor::Actions + extend PermissiveCLI + + # Ensure we bail out with non-zero exit code if the command line is wrong + def self.exit_on_failure?() true end + + # Allow `build` to be omitted in command line + default_command( :build ) + + # Intercept construction to extract configuration and injected dependencies + def initialize(args, config, options) + super(args, config, options) + + @app_cfg = options[:app_cfg] + @handler = options[:objects][:cli_handler] + + @loginator = options[:objects][:loginator] + + # Set the name for labelling CLI interactions + CLI::package_name( @loginator.decorate( 'Ceedling application', LogLabels::TITLE ) ) + end + + + # Override Thor help to list Rake tasks as well + desc "help [COMMAND]", "Describe available commands and list build operations" + method_option :project, :type => :string, :default => nil, :aliases => ['-p'], :desc => DOC_PROJECT_FLAG + method_option :mixin, :type => :string, :default => [], :repeatable => true, :aliases => ['-m'], :desc => DOC_MIXIN_FLAG + method_option :debug, :type => :boolean, :default => false, :hide => true + long_desc( CEEDLING_HANDOFF_OBJECTS[:loginator].sanitize( + <<-LONGDESC + `ceedling help` provides summary help for all available application commands + and build tasks. + + COMMAND is optional and will produce detailed help for a specific application command -- + not a build or plugin task, however. + + `ceedling help` also lists the available build operations from loading your + project configuration. Optionally, a project filepath and/or mixins may be + provided to load a different project configuration than the default. + + Notes on Optional Flags: + + • #{LONGDOC_MIXIN_FLAG} + LONGDESC + ) ) + def help(command=nil) + # Get unfrozen copies so we can add / modify + _options = options.dup() + _options[:project] = options[:project].dup() if !options[:project].nil? + _options[:mixin] = [] + options[:mixin].each {|mixin| _options[:mixin] << mixin.dup() } + + _options[:verbosity] = options[:debug] ? VERBOSITY_DEBUG : nil + + # Call application help with block to execute Thor's built-in help in the help logic + @handler.app_help( ENV, @app_cfg, _options, command ) { |command| super(command) } + end + + + desc "new NAME [DEST]", "Create a new project structure at optional DEST path" + method_option :local, :type => :boolean, :default => false, :desc => DOC_LOCAL_FLAG + method_option :docs, :type => :boolean, :default => false, :desc => DOC_DOCS_FLAG + method_option :configs, :type => :boolean, :default => true, :desc => "Install starter project file in project root" + method_option :force, :type => :boolean, :default => false, :desc => "Ignore any existing project and recreate destination" + method_option :debug, :type => :boolean, :default => false, :hide => true + method_option :gitsupport, :type => :boolean, :default => false, :desc => "Create .gitignore / .gitkeep files for convenience" + long_desc( CEEDLING_HANDOFF_OBJECTS[:loginator].sanitize( + <<-LONGDESC + `ceedling new` creates a new project structure. + + NAME is required and will be the containing directory for the new project. + + DEST is an optional directory path for the new project (e.g. /). + The default is your working directory. Nonexistent paths will be created. + + Notes on Optional Flags: + + • #{LONGDOC_LOCAL_FLAG} + + • `--force` completely destroys anything found in the target path for the + new project. + LONGDESC + ) ) + def new(name, dest=nil) + require 'version' # lib/version.rb for TAG constant + + # Get unfrozen copies so we can add / modify + _options = options.dup() + _dest = dest.dup() if !dest.nil? + + _options[:verbosity] = options[:debug] ? VERBOSITY_DEBUG : nil + + @handler.new_project( ENV, @app_cfg, Ceedling::Version::TAG, _options, name, _dest ) + end + + + desc "upgrade PATH", "Upgrade vendored installation of Ceedling for a project at PATH" + method_option :project, :type => :string, :default => DEFAULT_PROJECT_FILENAME, :desc => "Project filename" + method_option :debug, :type => :boolean, :default => false, :hide => true + long_desc( CEEDLING_HANDOFF_OBJECTS[:loginator].sanitize( + <<-LONGDESC + `ceedling upgrade` updates an existing project. + + PATH is required and should be the root of the project to upgrade. + + This command only meaningfully operates on projects wth a local vendored copy + of Ceedling (in /vendor/) and optional documentation (in + /docs/). + + Running this command replaces vendored Ceedling with the version running + this command. If docs are found, they will be replaced. + + A basic check for project existence looks for vendored ceedlng and a project + configuration file. + + Notes on Optional Flags: + + • `--project` specifies a filename (optionally with leading path) for the + project configuration file used in the project existence check. Otherwise, + the default ./#{DEFAULT_PROJECT_FILENAME} at the root of the project is + checked. + LONGDESC + ) ) + def upgrade(path) + # Get unfrozen copies so we can add / modify + _options = options.dup() + _options[:project] = options[:project].dup() + _path = path.dup() + + _options[:verbosity] = options[:debug] ? VERBOSITY_DEBUG : nil + + @handler.upgrade_project( ENV, @app_cfg, _options, _path ) + end + + + desc "build [TASKS...]", "Run build tasks (`build` keyword not required)" + method_option :project, :type => :string, :default => nil, :aliases => ['-p'], :desc => DOC_PROJECT_FLAG + method_option :mixin, :type => :string, :default => [], :repeatable => true, :aliases => ['-m'], :desc => DOC_MIXIN_FLAG + method_option :verbosity, :type => :string, :default => VERBOSITY_NORMAL, :aliases => ['-v'], :desc => "Sets logging level" + method_option :log, :type => :boolean, :default => false, :aliases => ['-l'], :desc => "Enable logging to default filepath in build directory" + method_option :logfile, :type => :string, :default => '', :desc => "Enable logging to given filepath" + method_option :graceful_fail, :type => :boolean, :default => nil, :desc => "Force exit code of 0 for unit test failures" + method_option :test_case, :type => :string, :default => '', :desc => "Filter for individual unit test names" + method_option :exclude_test_case, :type => :string, :default => '', :desc => "Prevent matched unit test names from running" + # Include for consistency with other commands (override --verbosity) + method_option :debug, :type => :boolean, :default => false, :hide => true + long_desc( CEEDLING_HANDOFF_OBJECTS[:loginator].sanitize( + <<-LONGDESC + `ceedling build` executes build tasks created from your project configuration. + + NOTE: `build` is not required to run tasks. The following are equivalent: + \x5 > ceedling test:all + \x5 > ceedling build test:all + + TASKS are zero or more build operations created from your project configuration. + If no tasks are provided, built-in default tasks or your :project ↳ + :default_tasks will be executed. + + Notes on Optional Flags: + + • #{LONGDOC_MIXIN_FLAG} + + • `--test-case` and its inverse `--exclude-test-case` set test case name + matchers to run only a subset of the unit test suite. See docs for full details. + LONGDESC + ) ) + def build(*tasks) + # Get unfrozen copies so we can add / modify + _options = options.dup() + _options[:project] = options[:project].dup() if !options[:project].nil? + _options[:mixin] = [] + options[:mixin].each {|mixin| _options[:mixin] << mixin.dup() } + _options[:verbosity] = VERBOSITY_DEBUG if options[:debug] + + @handler.build( env:ENV, app_cfg:@app_cfg, options:_options, tasks:tasks ) + end + + + desc "dumpconfig FILEPATH [SECTIONS...]", "Process project configuration and write final config to a YAML file" + method_option :project, :type => :string, :default => nil, :aliases => ['-p'], :desc => DOC_PROJECT_FLAG + method_option :mixin, :type => :string, :default => [], :repeatable => true, :aliases => ['-m'], :desc => DOC_MIXIN_FLAG + method_option :app, :type => :boolean, :default => true, :desc => "Runs Ceedling application and its config manipulations" + method_option :debug, :type => :boolean, :default => false, :hide => true + long_desc( CEEDLING_HANDOFF_OBJECTS[:loginator].sanitize( + <<-LONGDESC + `ceedling dumpconfig` loads your project configuration, including all manipulations & merges, + and writes the final config to a YAML file. + + FILEPATH is a required path to a destination YAML file. A nonexistent path will be created. + + SECTIONS is an optional config “path” that extracts a portion of a configuration. The + top-level YAML container will be the path’s last element. + The following example will produce config.yml containing ':test_compiler: {...}'. + \x5> ceedling dumpconfig my/path/config.yml tools test_compiler + + Notes on Optional Flags: + + • #{LONGDOC_MIXIN_FLAG} + + • `--app` loads various settings, merges defaults, loads plugin config changes, and validates + the configuration. Disabling it dumps project config after any mixins but before any + application manipulations. + LONGDESC + ) ) + def dumpconfig(filepath, *sections) + # Get unfrozen copies so we can add / modify + _options = options.dup() + _options[:project] = options[:project].dup() if !options[:project].nil? + _options[:mixin] = [] + options[:mixin].each {|mixin| _options[:mixin] << mixin.dup() } + _filepath = filepath.dup() + + _options[:verbosity] = options[:debug] ? VERBOSITY_DEBUG : nil + + @handler.dumpconfig( ENV, @app_cfg, _options, _filepath, sections ) + end + + + desc "environment", "List all configured environment variable names with values." + method_option :project, :type => :string, :default => nil, :aliases => ['-p'], :desc => DOC_PROJECT_FLAG + method_option :mixin, :type => :string, :default => [], :repeatable => true, :aliases => ['-m'], :desc => DOC_MIXIN_FLAG + method_option :debug, :type => :boolean, :default => false, :hide => true + long_desc( CEEDLING_HANDOFF_OBJECTS[:loginator].sanitize( + <<-LONGDESC + `ceedling environment` displays all environment variables that have been set for project use. + + Notes on Optional Flags: + + * #{LONGDOC_MIXIN_FLAG} + LONGDESC + ) ) + def environment() + # Get unfrozen copies so we can add / modify + _options = options.dup() + _options[:project] = options[:project].dup() if !options[:project].nil? + _options[:mixin] = [] + options[:mixin].each {|mixin| _options[:mixin] << mixin.dup() } + + _options[:verbosity] = options[:debug] ? VERBOSITY_DEBUG : nil + + @handler.environment( ENV, @app_cfg, _options ) + end + + desc "examples", "List available example projects" + method_option :debug, :type => :boolean, :default => false, :hide => true + long_desc( CEEDLING_HANDOFF_OBJECTS[:loginator].sanitize( + <<-LONGDESC + `ceedling examples` lists the names of the example projects that come packaged with Ceedling. + + The output of this list is most useful when used by the `ceedling example` (no ‘s’) command + to extract an example project to your filesystem. + LONGDESC + ) ) + def examples() + # Get unfrozen copies so we can add / modify + _options = options.dup() + + _options[:verbosity] = options[:debug] ? VERBOSITY_DEBUG : nil + + @handler.list_examples( ENV, @app_cfg, _options ) + end + + + desc "example NAME [DEST]", "Create named example project in optional DEST path" + method_option :local, :type => :boolean, :default => false, :desc => DOC_LOCAL_FLAG + method_option :docs, :type => :boolean, :default => false, :desc => DOC_DOCS_FLAG + method_option :debug, :type => :boolean, :default => false, :hide => true + long_desc( CEEDLING_HANDOFF_OBJECTS[:loginator].sanitize( + <<-LONGDESC + `ceedling example` extracts the named example project from within Ceedling to + your filesystem. + + NAME is required to specify the example to extract. A list of example projects + is available with the `examples` command. NAME will be the containing directory + for the extracted project. + + DEST is an optional containing directory path (ex: /). The default + is your working directory. A nonexistent path will be created. + + Notes on Optional Flags: + + • #{LONGDOC_LOCAL_FLAG} + + NOTE: `example` is destructive. If the destination path is a previoulsy created + example project, `ceedling example` will overwrite the contents. + LONGDESC + ) ) + def example(name, dest=nil) + # Get unfrozen copies so we can add / modify + _options = options.dup() + _dest = dest.dup() if !dest.nil? + + _options[:verbosity] = options[:debug] ? VERBOSITY_DEBUG : nil + + @handler.create_example( ENV, @app_cfg, _options, name, _dest ) + end + + + desc "version", "Display version details of app components (also `--version` or `-v`)" + # No long_desc() needed + def version() + @handler.version( @app_cfg[:ceedling_root_path] ) + end + + end +end diff --git a/tools/vendor/ceedling/bin/cli_handler.rb b/tools/vendor/ceedling/bin/cli_handler.rb new file mode 100644 index 00000000..d40171e8 --- /dev/null +++ b/tools/vendor/ceedling/bin/cli_handler.rb @@ -0,0 +1,401 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + +require 'mixins' # Built-in Mixins +require 'ceedling/constants' # From Ceedling application +require 'versionator' # Outisde DIY context + +class CliHandler + + constructor :configinator, :projectinator, :cli_helper, :path_validator, :actions_wrapper, :loginator + + # Override to prevent exception handling from walking & stringifying the object variables. + # Object variables are lengthy and produce a flood of output. + def inspect + return this.class.name + end + + def setup() + # Aliases + @helper = @cli_helper + @actions = @actions_wrapper + end + + + # Thor application help + Rake help (if available) + def app_help(env, app_cfg, options, command, &thor_help) + verbosity = @helper.set_verbosity( options[:verbosity] ) + + # If help requested for a command, show it and skip listing build tasks + if !command.nil? + # Block handler + thor_help.call( command ) if block_given? + return + end + + # Display Thor-generated help listing + thor_help.call( command ) if block_given? + + # If it was help for a specific command, we're done + return if !command.nil? + + # If project configuration is available, also display Rake tasks + @path_validator.standardize_paths( options[:project], *options[:mixin], ) + return if !@projectinator.config_available?( filepath:options[:project], env:env ) + + list_rake_tasks( + env:env, + app_cfg: app_cfg, + filepath: options[:project], + mixins: options[:mixin], + # Silent Ceedling loading unless debug verbosity + silent: !(verbosity == Verbosity::DEBUG) + ) + end + + + # Public to be used by `-T` ARGV hack handling + def rake_help(env:, app_cfg:) + @helper.set_verbosity() # Default to normal + + list_rake_tasks( env:env, app_cfg:app_cfg ) + end + + + def new_project(env, app_cfg, ceedling_tag, options, name, dest) + @helper.set_verbosity( options[:verbosity] ) + + @path_validator.standardize_paths( dest ) + + # If destination is nil, reassign it to name + # Otherwise, join the destination and name into a new path + dest = dest.nil? ? ('./' + name) : File.join( dest, name ) + + # Check for existing project (unless --force) + if @helper.project_exists?( dest, :|, DEFAULT_PROJECT_FILENAME, 'src', 'test' ) + msg = "It appears a project already exists at #{dest}/. Use --force to destroy it and create a new project." + raise msg + end unless options[:force] + + # Update app_cfg paths (ignore return values) + @helper.which_ceedling?( env:env, app_cfg:app_cfg ) + + # Thor Actions for project tasks use paths in relation to this path + ActionsWrapper.source_root( app_cfg[:ceedling_root_path] ) + + # Blow away any existing directories and contents if --force + @actions.remove_dir( dest ) if options[:force] + + # Create blank directory structure + ['.', 'src', 'test', 'test/support'].each do |path| + @actions._empty_directory( File.join( dest, path) ) + end + + # Vendor the tools and install command line helper scripts + @helper.vendor_tools( app_cfg[:ceedling_root_path], dest ) if options[:local] + + # Copy in documentation + @helper.copy_docs( app_cfg[:ceedling_root_path], dest ) if options[:docs] + + # Copy / set up project file + @helper.create_project_file( dest, options[:local], ceedling_tag ) if options[:configs] + + # Copy Git Ignore file + if options[:gitsupport] + @actions._copy_file( + File.join( 'assets', 'default_gitignore' ), + File.join( dest, '.gitignore' ), + :force => true + ) + @actions._touch_file( File.join( dest, 'test/support', '.gitkeep') ) + end + + @loginator.log() # Blank line + @loginator.log( "New project '#{name}' created at #{dest}/\n", Verbosity::NORMAL, LogLabels::TITLE ) + end + + + def upgrade_project(env, app_cfg, options, path) + @helper.set_verbosity( options[:verbosity] ) + + @path_validator.standardize_paths( path, options[:project] ) + + # Check for existing project + if !@helper.project_exists?( path, :&, options[:project], 'vendor/ceedling/lib/version.rb' ) + msg = "Could not find an existing project at #{path}/." + raise msg + end + + which, _ = @helper.which_ceedling?( env:env, app_cfg:app_cfg ) + if (which == :gem) + msg = "Project configuration specifies the Ceedling gem, not vendored Ceedling" + @loginator.log( msg, Verbosity::NORMAL, LogLabels::NOTICE ) + end + + # Thor Actions for project tasks use paths in relation to this path + ActionsWrapper.source_root( app_cfg[:ceedling_root_path] ) + + # Recreate vendored tools + vendor_path = File.join( path, 'vendor', 'ceedling' ) + @actions.remove_dir( vendor_path ) + @helper.vendor_tools( app_cfg[:ceedling_root_path], path ) + + # Recreate documentation if we find docs/ subdirectory + docs_path = File.join( path, 'docs' ) + founds_docs = @helper.project_exists?( path, :&, File.join( 'docs', 'CeedlingPacket.md' ) ) + if founds_docs + @actions.remove_dir( docs_path ) + @helper.copy_docs( app_cfg[:ceedling_root_path], path ) + end + + @loginator.log() # Blank line + @loginator.log( "Upgraded project at #{path}/\n", Verbosity::NORMAL, LogLabels::TITLE ) + end + + + def build(env:, app_cfg:, options:{}, tasks:) + @helper.set_verbosity( options[:verbosity] ) + + @path_validator.standardize_paths( options[:project], options[:logfile], *options[:mixin] ) + + _, config = @configinator.loadinate( builtin_mixins:BUILTIN_MIXINS, filepath:options[:project], mixins:options[:mixin], env:env ) + + default_tasks = @configinator.default_tasks( config:config, default_tasks:app_cfg[:default_tasks] ) + + @helper.process_testcase_filters( + config: config, + include: options[:test_case], + exclude: options[:exclude_test_case], + tasks: tasks, + default_tasks: default_tasks + ) + + log_filepath = @helper.process_logging( options[:log], options[:logfile] ) + + # Save references + app_cfg.set_project_config( config ) + app_cfg.set_log_filepath( log_filepath ) + app_cfg.set_include_test_case( options[:test_case] ) + app_cfg.set_exclude_test_case( options[:exclude_test_case] ) + + # Set graceful_exit from command line & configuration options + app_cfg.set_tests_graceful_fail( + @helper.process_graceful_fail( + config: config, + cmdline_graceful_fail: options[:graceful_fail], + tasks: tasks, + default_tasks: default_tasks + ) + ) + + # Enable setup / operations duration logging in Rake context + app_cfg.set_stopwatch( @helper.process_stopwatch( tasks:tasks, default_tasks:default_tasks ) ) + + _, path = @helper.which_ceedling?( env:env, config:config, app_cfg:app_cfg ) + + @helper.load_ceedling( + config: config, + rakefile_path: path, + default_tasks: default_tasks + ) + + # Hand Rake tasks off to be executed + @helper.run_rake_tasks( tasks ) + end + + + def dumpconfig(env, app_cfg, options, filepath, sections) + @helper.set_verbosity( options[:verbosity] ) + + @path_validator.standardize_paths( filepath, options[:project], *options[:mixin] ) + + _, config = @configinator.loadinate( builtin_mixins:BUILTIN_MIXINS, filepath:options[:project], mixins:options[:mixin], env:env ) + + # Exception handling to ensure we dump the configuration regardless of config validation errors + begin + # If enabled, process the configuration through Ceedling automatic settings, defaults, plugins, etc. + if options[:app] + default_tasks = @configinator.default_tasks( config:config, default_tasks:app_cfg[:default_tasks] ) + + # Save references + app_cfg.set_project_config( config ) + + _, path = @helper.which_ceedling?( env:env, config:config, app_cfg:app_cfg ) + + config = @helper.load_ceedling( + config: config, + rakefile_path: path, + default_tasks: default_tasks + ) + else + @loginator.log( " > Skipped loading Ceedling application", Verbosity::OBNOXIOUS ) + end + ensure + @helper.dump_yaml( config, filepath, sections ) + + @loginator.log() # Blank line + @loginator.log( "Dumped project configuration to #{filepath}\n", Verbosity::NORMAL, LogLabels::TITLE ) + end + end + + + def environment(env, app_cfg, options) + @helper.set_verbosity( options[:verbosity] ) + + @path_validator.standardize_paths( options[:project], *options[:mixin] ) + + _, config = @configinator.loadinate( builtin_mixins:BUILTIN_MIXINS, filepath:options[:project], mixins:options[:mixin], env:env ) + + # Save references + app_cfg.set_project_config( config ) + + _, path = @helper.which_ceedling?( env:env, config:config, app_cfg:app_cfg ) + + config = @helper.load_ceedling( + config: config, + rakefile_path: path + ) + + env_list = [] + + # Process external environment -- filter for Ceedling variables + env.each do |var, value| + next if !(var =~ /ceedling/i) + name = var.to_s + env_list << "#{name}: \"#{value}\"" + end + + # Process environment created by configuration + config[:environment].each do |env| + env.each_key do |key| + name = key.to_s + env_list << "#{name}: \"#{env[key]}\"" + end + end + + output = "Environment variables:\n" + + env_list.sort.each do |line| + output << " • #{line}\n" + end + + @loginator.log() # Blank line + @loginator.log( output + "\n", Verbosity::NORMAL, LogLabels::TITLE ) + end + + + def list_examples(env, app_cfg, options) + @helper.set_verbosity( options[:verbosity] ) + + # Process which_ceedling for app_cfg modifications but ignore return values + @helper.which_ceedling?( env:env, app_cfg:app_cfg ) + + examples = @helper.lookup_example_projects( app_cfg[:ceedling_examples_path] ) + + raise( "No examples projects found") if examples.empty? + + output = "Available example projects:\n" + + examples.each {|example| output << " • #{example}\n" } + + @loginator.log() # Blank line + @loginator.log( output + "\n", Verbosity::NORMAL, LogLabels::TITLE ) + end + + + def create_example(env, app_cfg, options, name, dest) + @helper.set_verbosity( options[:verbosity] ) + + @path_validator.standardize_paths( dest ) + + # Process which_ceedling for app_cfg modifications but ignore return values + @helper.which_ceedling?( env:env, app_cfg:app_cfg ) + + examples = @helper.lookup_example_projects( app_cfg[:ceedling_examples_path] ) + + if !examples.include?( name ) + raise( "No example project '#{name}' could be found" ) + end + + # If destination is nil, reassign it to name + # Otherwise, join the destination and name into a new path + dest = dest.nil? ? ('./' + name) : File.join( dest, name ) + + dest_src = File.join( dest, 'src' ) + dest_test = File.join( dest, 'test' ) + dest_mixin = File.join( dest, 'mixin' ) + dest_project = File.join( dest, DEFAULT_PROJECT_FILENAME ) + dest_readme = File.join( dest, 'README.md' ) + + # Thor Actions for project tasks use paths in relation to this path + ActionsWrapper.source_root( app_cfg[:ceedling_root_path] ) + + @actions._directory( "examples/#{name}/src", dest_src, :force => true ) + @actions._directory( "examples/#{name}/test", dest_test, :force => true ) + @actions._directory( "examples/#{name}/mixin", dest_mixin, :force => true ) + @actions._copy_file( "examples/#{name}/#{DEFAULT_PROJECT_FILENAME}", dest_project, :force => true ) + @actions._copy_file( "examples/#{name}/README.md", dest_readme, :force => true ) + + # Vendor the tools and install command line helper scripts + @helper.vendor_tools( app_cfg[:ceedling_root_path], dest ) if options[:local] + + # Copy in documentation + @helper.copy_docs( app_cfg[:ceedling_root_path], dest ) if options[:docs] + + @loginator.log() # Blank line + @loginator.log( "Example project '#{name}' created at #{dest}/\n", Verbosity::NORMAL, LogLabels::TITLE ) + end + + + def version(ceedling_root_path) + # We only need Versionator here + versionator = Versionator.new( ceedling_root_path ) + + version = <<~VERSION + Welcome to Ceedling! + + Ceedling => #{versionator.ceedling_build} + CMock => #{versionator.cmock_tag} + Unity => #{versionator.unity_tag} + CException => #{versionator.cexception_tag} + VERSION + @loginator.log( version, Verbosity::NORMAL, LogLabels::TITLE ) + end + + + ### Private ### + + private + + def list_rake_tasks(env:, app_cfg:, filepath:nil, mixins:[], silent:false) + _, config = + @configinator.loadinate( + builtin_mixins:BUILTIN_MIXINS, + filepath: filepath, + mixins: mixins, + env: env, + silent: silent + ) + + # Save reference to loaded configuration + app_cfg.set_project_config( config ) + + _, path = @helper.which_ceedling?( env:env, config:config, app_cfg:app_cfg ) + + @helper.load_ceedling( + config: config, + rakefile_path: path, + default_tasks: app_cfg[:default_tasks] + ) + + msg = "Ceedling build & plugin tasks:\n(Parameterized tasks tend to need enclosing quotes or escape sequences in most shells)" + @loginator.log( msg, Verbosity::NORMAL, LogLabels::TITLE ) + + @helper.print_rake_tasks() + end + +end diff --git a/tools/vendor/ceedling/bin/cli_helper.rb b/tools/vendor/ceedling/bin/cli_helper.rb new file mode 100644 index 00000000..992e3fed --- /dev/null +++ b/tools/vendor/ceedling/bin/cli_helper.rb @@ -0,0 +1,454 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + +require 'app_cfg' +require 'ceedling/constants' # From Ceedling application + +class CliHelper + + constructor :file_wrapper, :actions_wrapper, :config_walkinator, :path_validator, :loginator, :system_wrapper + + def setup + # Aliases + @actions = @actions_wrapper + end + + + def project_exists?( path, op, *components ) + exists = [] + + components.each do |f| + _path = File.join( path, f ) + exists << (@file_wrapper.exist?( _path ) or @file_wrapper.directory?( _path )) + end + + return exists.reduce(op) + end + + + def create_project_file(dest, local, ceedling_tag) + project_filepath = File.join( dest, DEFAULT_PROJECT_FILENAME ) + source_filepath = '' + + if local + source_filepath = File.join( 'assets', 'project_with_guts.yml' ) + else + source_filepath = File.join( 'assets', 'project_as_gem.yml' ) + end + + # Clone the project file + @actions._copy_file( source_filepath, project_filepath, :force => true) + # Silently update internal version + @actions._gsub_file( + project_filepath, + /:ceedling_version:\s+'\?'/, + ":ceedling_version: #{ceedling_tag}", + :verbose => false + ) + end + + + # Returns two value: (1) symbol :gem or :path and (2) path for Ceedling installation + def which_ceedling?(env:, config:{}, app_cfg:) + # Determine which Ceedling we're running (in priority) + # 1. If there's an environment variable set, validate it, and return :gem or a path + # 2. If :project ↳ :which_ceedling exists in the config, validate it, and return :gem or a path + # 3. If there's a vendor/ceedling/ path in our working directory, return it as a path + # 4. If nothing is set, default to :gem and return it + # 5. Update app_cfg paths if not the gem + + # Nil for prioritized case checking logic blocks that follow + which_ceedling = nil + + # Environment variable + if !env['WHICH_CEEDLING'].nil? + @loginator.log( " > Set which Ceedling using environment variable WHICH_CEEDLING", Verbosity::OBNOXIOUS ) + which_ceedling = env['WHICH_CEEDLING'].strip() + which_ceedling = :gem if (which_ceedling.casecmp( 'gem' ) == 0) + end + + # Configuration file + if which_ceedling.nil? + value, _ = @config_walkinator.fetch_value( :project, :which_ceedling, hash:config ) + if !value.nil? + which_ceedling = value.strip() + @loginator.log( " > Set which Ceedling from config :project ↳ :which_ceedling => #{which_ceedling}", Verbosity::OBNOXIOUS ) + which_ceedling = :gem if (which_ceedling.casecmp( 'gem' ) == 0) + end + end + + # Working directory + if which_ceedling.nil? + if @file_wrapper.directory?( 'vendor/ceedling' ) + which_ceedling = 'vendor/ceedling' + @loginator.log( " > Set which Ceedling to be vendored installation", Verbosity::OBNOXIOUS ) + end + end + + # Default to gem + if which_ceedling.nil? + which_ceedling = :gem + @loginator.log( " > Defaulting to running Ceedling from Gem", Verbosity::OBNOXIOUS ) + end + + # If we're launching from the gem, return :gem and initial Rakefile path + if which_ceedling == :gem + return which_ceedling, app_cfg[:ceedling_rakefile_filepath] + end + + # Otherwise, handle which_ceedling as a base path + ceedling_path = which_ceedling.dup() + @path_validator.standardize_paths( ceedling_path ) + if !@file_wrapper.directory?( ceedling_path ) + raise "Configured Ceedling launch path #{ceedling_path}/ does not exist" + end + + # Update Ceedling installation paths + app_cfg.set_paths( ceedling_path ) + + # Check updated Ceedling paths + if !@file_wrapper.exist?( app_cfg[:ceedling_rakefile_filepath] ) + raise "Configured Ceedling launch path #{ceedling_path}/ contains no Ceedling installation" + end + + # Update variable to full application start path + ceedling_path = app_cfg[:ceedling_rakefile_filepath] + + @loginator.log( " > Launching Ceedling from #{ceedling_path}/", Verbosity::OBNOXIOUS ) + + return :path, ceedling_path + end + + + def load_ceedling(config:, rakefile_path:, default_tasks:[]) + # Set default tasks + Rake::Task.define_task(:default => default_tasks) if !default_tasks.empty? + + # Load Ceedling application from Rakefile path + require( rakefile_path ) + + # Loading the Rakefile manipulates the config hash, return it as a convenience + return config + end + + + def process_testcase_filters(config:, include:, exclude:, tasks:, default_tasks:) + # Do nothing if no test case filters + return if (include.nil? || include.empty?) && (exclude.nil? || exclude.empty?) + + # TODO: When we can programmatically check if a task is a test task, + # raise an exception if --graceful-fail is set without test operations + + # Add test runner configuration setting necessary to use test case filters + value, _ = @config_walkinator.fetch_value( :test_runner, hash:config ) + if value.nil? + # If no :test_runner section, create the whole thing + config[:test_runner] = {:cmdline_args => true} + else + # If a :test_runner section, just set :cmdlne_args + value[:cmdline_args] = true + end + end + + + def process_graceful_fail(config:, cmdline_graceful_fail:, tasks:, default_tasks:) + # TODO: When we can programmatically check if a task is a test task, + # raise an exception if --graceful-fail is set without test operations + + # Precedence + # 1. Command line option + # 2. Configuration entry + + # If command line option was set, use it + return cmdline_graceful_fail if !cmdline_graceful_fail.nil? + + # If configuration contains :graceful_fail, use it + value, _ = @config_walkinator.fetch_value( :test_build, :graceful_fail, hash:config ) + return value if value.nil? + + return false + end + + + def process_logging(enabled, filepath) + # No log file if neither enabled nor a specific filename/filepath + return '' if !enabled && (filepath.nil? || filepath.empty?()) + + # Default logfile name (to be placed in default location) if enabled but no filename/filepath + return DEFAULT_CEEDLING_LOGFILE if enabled && filepath.empty?() + + # Otherwise, a filename/filepath was provided that implicitly enables logging + dir = File.dirname( filepath ) + + # Ensure logging directory path exists + if not dir.empty? + @file_wrapper.mkdir( dir ) + end + + # Return filename/filepath + return filepath + end + + + def process_stopwatch(tasks:, default_tasks:) + _tasks = tasks.empty?() ? default_tasks.dup() : tasks.dup() + + # Namespace-less (clobber, clean, etc.), files:, and paths: tasks should not have stopwatch logging + # 1. Filter out tasks lacking a namespace + # 2. Look for any tasks other than paths: or files: + _tasks.select! {|t| t.include?( ':') } + _tasks.reject! {|t| t =~ /(^files:|^paths:)/} + + return !_tasks.empty? + end + + + def print_rake_tasks() + # (This required digging into Rake internals a bit.) + Rake.application.define_singleton_method(:name=) {|n| @name = n} + Rake.application.name = 'ceedling' + Rake.application.options.show_tasks = :tasks + Rake.application.options.show_task_pattern = /^(?!.*build).*$/ + Rake.application.display_tasks_and_comments() + end + + + def run_rake_tasks(tasks) + Rake.application.collect_command_line_tasks( tasks ) + Rake.application.top_level() + end + + + # Set global consts for verbosity and debug + def set_verbosity(verbosity=nil) + verbosity = if verbosity.nil? + Verbosity::NORMAL + elsif verbosity.to_i.to_s == verbosity + verbosity.to_i + elsif VERBOSITY_OPTIONS.include? verbosity.to_sym + VERBOSITY_OPTIONS[verbosity.to_sym] + else + raise "Unkown Verbosity '#{verbosity}' specified" + end + + # If we already set verbosity, there's nothing more to do here + return if Object.const_defined?('PROJECT_VERBOSITY') + + # Create global constant PROJECT_VERBOSITY + Object.module_eval("PROJECT_VERBOSITY = verbosity") + PROJECT_VERBOSITY.freeze() + + # Create global constant PROJECT_DEBUG + debug = (verbosity == Verbosity::DEBUG) + Object.module_eval("PROJECT_DEBUG = debug") + PROJECT_DEBUG.freeze() + + return verbosity + end + + + def dump_yaml(config, filepath, sections) + # Default to dumping entire configuration + _config = config + + # If sections were provided, process them + if !sections.empty? + # Symbolify section names + _sections = sections.map {|section| section.to_sym} + + # Try to extract subconfig from section path + value, _ = @config_walkinator.fetch_value( *_sections, hash:config ) + + # If we fail to find the section path, blow up + if value.nil? + # Reformat list of symbols to list of :
    s + _sections.map! {|section| ":#{section.to_s}"} + msg = "Cound not find configuration section #{_sections.join(' ↳ ')}" + raise(msg) + end + + # Update _config to subconfig with final sections path element as container + _config = { _sections.last => value } + end + + File.open( filepath, 'w' ) {|out| YAML.dump( _config, out )} + end + + + def lookup_example_projects(examples_path) + examples = [] + + # Examples directory listing glob + glob = File.join( examples_path, '*' ) + + @file_wrapper.directory_listing(glob).each do |path| + # Skip anything that's not a directory + next if !@file_wrapper.directory?( path ) + + # Split the directory path into elements, indexing the last one + project = (path.split( File::SEPARATOR ))[-1] + + examples << project + end + + return examples + end + + + def copy_docs(ceedling_root, dest) + docs_path = File.join( dest, 'docs' ) + + # Hash that will hold documentation copy paths + # - Key: (modified) destination documentation path + # - Value: source path + doc_files = {} + + # Add docs to list from Ceedling (docs/) and supporting projects (docs/) + { # Source path => docs/ destination path + 'docs' => '.', + 'vendor/unity/docs' => 'unity', + 'vendor/cmock/docs' => 'cmock', + 'vendor/c_exception/docs' => 'c_exception' + }.each do |src, dest| + # Form glob to collect all markdown files + glob = File.join( ceedling_root, src, '*.md' ) + # Look up markdown files + listing = @file_wrapper.directory_listing( glob ) # Already case-insensitive + # For each markdown filepath, add to hash + listing.each do |filepath| + # Reassign destination + _dest = File.join( dest, File.basename(filepath) ) + doc_files[ _dest ] = filepath + end + end + + # Add docs to list from Ceedling plugins (docs/plugins) + glob = File.join( ceedling_root, 'plugins/**/README.md' ) + listing = @file_wrapper.directory_listing( glob ) # Already case-insensitive + listing.each do |path| + # 'README.md' => '.md' where name extracted from containing path + rename = path.split(/\\|\//)[-2] + '.md' + # For each Ceedling plugin readme, add to hash + dest = File.join( 'plugins', rename ) + doc_files[ dest ] = path + end + + # Add licenses from Ceedling (docs/) and supporting projects (docs/) + { # Destination path => Source path + '.' => '.', # Ceedling + 'unity' => 'vendor/unity', + 'cmock' => 'vendor/cmock', + 'c_exception' => 'vendor/c_exception', + }.each do |dest, src| + glob = File.join( ceedling_root, src, 'license.txt' ) + # Look up licenses (use glob as capitalization can be inconsistent) + listing = @file_wrapper.directory_listing( glob ) # Already case-insensitive + # Safety check on nil references since we explicitly reference first element + next if listing.empty? + filepath = listing.first + # Reassign dest + dest = File.join( dest, File.basename( filepath ) ) + doc_files[ dest ] = filepath + end + + # Copy all documentation + doc_files.each_pair do |dest, src| + @actions._copy_file(src, File.join( docs_path, dest ), :force => true) + end + end + + + def vendor_tools(ceedling_root, dest) + vendor_path = File.join( dest, 'vendor', 'ceedling' ) + + # Copy folders from current Ceedling into project + %w{plugins lib bin}.each do |folder| + @actions._directory( + folder, + File.join( vendor_path, folder ), + :force => true + ) + end + + # Mark ceedling as an executable + @actions._chmod( File.join( vendor_path, 'bin', 'ceedling' ), 0755 ) unless @system_wrapper.windows? + + # Assembly necessary subcomponent dirs + components = [ + 'vendor/c_exception/lib/', + 'vendor/cmock/config/', + 'vendor/cmock/lib/', + 'vendor/cmock/src/', + 'vendor/diy/lib/', + 'vendor/unity/auto/', + 'vendor/unity/src/', + ] + + # Copy necessary subcomponent dirs into project + components.each do |path| + _src = path + _dest = File.join( vendor_path, path ) + @actions._directory( _src, _dest, :force => true ) + end + + # Add licenses from Ceedling and supporting projects + license_files = {} + [ # Source paths + '.', # Ceedling + 'vendor/unity', + 'vendor/cmock', + 'vendor/c_exception', + 'vendor/diy' + ].each do |src| + # Look up licenses using a Glob as capitalization can be inconsistent + glob = File.join( ceedling_root, src, 'license.txt' ) + listing = @file_wrapper.directory_listing( glob ) # Already case-insensitive + + # Safety check on nil references since we explicitly reference first element + next if listing.empty? + + # Add license copying to hash + license = listing.first + filepath = File.join( vendor_path, src, File.basename( license ) ) + license_files[ filepath ] = license + end + + # Copy license files into place + license_files.each_pair do |dest, src| + @actions._copy_file( src, dest, :force => true) + end + + # Silently copy Git SHA file for version #.#.#-build lookups if it exists + if @file_wrapper.exist?( File.join( ceedling_root, GIT_COMMIT_SHA_FILENAME) ) + @actions._copy_file( + GIT_COMMIT_SHA_FILENAME, + File.join( vendor_path, GIT_COMMIT_SHA_FILENAME ), + :force => true, :verbose => false + ) + end + + # Create executable helper scripts in project root + if @system_wrapper.windows? + # Windows command prompt launch script + @actions._copy_file( + File.join( 'assets', 'ceedling.cmd'), + File.join( dest, 'ceedling.cmd'), + :force => true + ) + else + # Unix shell launch script + launch = File.join( dest, 'ceedling') + @actions._copy_file( + File.join( 'assets', 'ceedling'), + launch, + :force => true + ) + @actions._chmod( launch, 0755 ) + end + end + +end diff --git a/tools/vendor/ceedling/bin/configinator.rb b/tools/vendor/ceedling/bin/configinator.rb new file mode 100644 index 00000000..28fe3ada --- /dev/null +++ b/tools/vendor/ceedling/bin/configinator.rb @@ -0,0 +1,111 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + +require 'deep_merge' + +class Configinator + + constructor :config_walkinator, :projectinator, :mixinator + + def loadinate(builtin_mixins:, filepath:nil, mixins:[], env:{}, silent:false) + # Aliases for clarity + cmdline_filepath = filepath + cmdline_mixins = mixins || [] + + # Load raw config from command line, environment variable, or default filepath + project_filepath, config = @projectinator.load( filepath:cmdline_filepath, env:env, silent:silent ) + + # Extract cfg_enabled_mixins mixins list plus load paths list from config + cfg_enabled_mixins, cfg_load_paths = @projectinator.extract_mixins( config: config ) + + # Get our YAML file extension + yaml_ext = @projectinator.lookup_yaml_extension( config:config ) + + # Remove any silly redundancies + cfg_enabled_mixins.uniq! + # Use absolute path to ensure proper deduplication + cfg_load_paths.uniq! { |path| File.expand_path(path) } + cmdline_mixins.uniq! + + # Validate :cfg_load_paths from :mixins section of project configuration + @projectinator.validate_mixin_load_paths( cfg_load_paths ) + + # Validate enabled mixins from :mixins section of project configuration + if not @projectinator.validate_mixins( + mixins: cfg_enabled_mixins, + load_paths: cfg_load_paths, + builtins: builtin_mixins, + source: 'Config :mixins ↳ :enabled =>', + yaml_extension: yaml_ext + ) + raise 'Project configuration file section :mixins failed validation' + end + + # Validate command line mixins + if not @projectinator.validate_mixins( + mixins: cmdline_mixins, + load_paths: cfg_load_paths, + builtins: builtin_mixins, + source: 'Mixin', + yaml_extension: yaml_ext + ) + raise 'Command line failed validation' + end + + # Find mixins in project file among load paths or built-in mixins + # Return ordered list of filepaths or built-in mixin names + config_mixins = @projectinator.lookup_mixins( + mixins: cfg_enabled_mixins, + load_paths: cfg_load_paths, + builtins: builtin_mixins, + yaml_extension: yaml_ext + ) + + # Find mixins from command line among load paths or built-in mixins + # Return ordered list of filepaths or built-in mixin names + cmdline_mixins = @projectinator.lookup_mixins( + mixins: cmdline_mixins, + load_paths: cfg_load_paths, + builtins: builtin_mixins, + yaml_extension: yaml_ext + ) + + # Fetch CEEDLING_MIXIN_# environment variables + # Sort into ordered list of hash tuples [{env variable => filepath}...] + env_mixins = @mixinator.fetch_env_filepaths( env ) + @mixinator.validate_env_filepaths( env_mixins ) + + # Eliminate duplicate mixins and return list of mixins in merge order + # [{source => filepath}...] + mixins_assembled = @mixinator.assemble_mixins( + config: config_mixins, + env: env_mixins, + cmdline: cmdline_mixins + ) + + # Merge mixins + @mixinator.merge( builtins:builtin_mixins, config:config, mixins:mixins_assembled ) + + return project_filepath, config + end + + def default_tasks(config:, default_tasks:) + # 1. If :default_tasks set in config, use it + # 2. Otherwise use the function argument (most likely a default set in the first moments of startup) + value, _ = @config_walkinator.fetch_value( :project, :default_tasks, hash:config ) + if value + # Update method parameter to config value + default_tasks = value.dup() + else + # Set key/value in config if it's not set + config.deep_merge( {:project => {:default_tasks => default_tasks}} ) + end + + return default_tasks + end + +end \ No newline at end of file diff --git a/tools/vendor/ceedling/bin/mixinator.rb b/tools/vendor/ceedling/bin/mixinator.rb new file mode 100644 index 00000000..5ff81d62 --- /dev/null +++ b/tools/vendor/ceedling/bin/mixinator.rb @@ -0,0 +1,136 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + +require 'deep_merge' + +class Mixinator + + constructor :path_validator, :yaml_wrapper, :loginator + + def setup + # ... + end + + def validate_cmdline_filepaths(paths) + validated = @path_validator.validate( + paths: paths, + source: 'Filepath argument', + ) + + if !validated + raise 'Mixins command line failed validation' + end + end + + def fetch_env_filepaths(env) + var_names = [] + + env.each do |var, filepath| + # Explicitly ignores CEEDLING_MIXIN_0 + var_names << var if var =~ /CEEDLING_MIXIN_[1-9]\d*/ + end + + # Extract numeric string (guranteed to exist) and convert to integer for ascending sorting + var_names.sort_by! {|name| name.match(/\d+$/)[0].to_i() } + + _vars = [] + # Iterate over sorted environment variable names + var_names.each do |name| + # Duplicate the filepath string to get unfrozen copy + # Handle any Windows path shenanigans + # Insert in array {env var name => filepath} + path = env[name].dup() + @path_validator.standardize_paths( path ) + _vars << {name => path} + end + + # Remove any duplicate filepaths by comparing the full absolute path + # Higher numbered environment variables removed + _vars.uniq! {|entry| File.expand_path( entry.values.first )} + + return _vars + end + + def validate_env_filepaths(vars) + validated = true + + vars.each do |entry| + validated &= @path_validator.validate( + paths: [entry.values.first], + source: "Environment variable `#{entry.keys.first}` filepath", + ) + end + + if !validated + raise 'Mixins environment variables failed validation' + end + end + + def assemble_mixins(config:, env:, cmdline:) + assembly = [] + + # Build list of hashses in precedence order to facilitate deduplication + # Any duplicates at greater indexes are removed + cmdline.each {|mixin| assembly << {'command line' => mixin}} + assembly += env + config.each {|mixin| assembly << {'project configuration' => mixin}} + + # Remove duplicates inline + # 1. Expand filepaths to absolute paths for correct deduplication (skip expanding simple mixin names) + # 2. Remove duplicates + assembly.uniq! do |entry| + # If entry is filepath, expand it, otherwise leave entry untouched (it's a mixin name only) + mixin = entry.values.first + @path_validator.filepath?( mixin ) ? File.expand_path( mixin ) : mixin + end + + # Return the compacted list in merge order + # 1. Config + # 2. Environment variable + # 3. Command line + # Later merges take precedence (e.g. command line mixins are last merge) + return assembly.reverse() + end + + def merge(builtins:, config:, mixins:) + mixins.each do |mixin| + source = mixin.keys.first + filepath = mixin.values.first + + _mixin = {} # Empty initial value + + # Load mixin from filepath if it is a filepath + if @path_validator.filepath?( filepath ) + _mixin = @yaml_wrapper.load( filepath ) + + # Log what filepath we used for this mixin + @loginator.log( " + Merging #{'(empty) ' if _mixin.nil?}#{source} mixin using #{filepath}", Verbosity::OBNOXIOUS ) + + # Reference mixin from built-in hash-based mixins + else + _mixin = builtins[filepath.to_sym()] + + # Log built-in mixin we used + @loginator.log( " + Merging built-in mixin '#{filepath}' from #{source}", Verbosity::OBNOXIOUS ) + end + + # Hnadle an empty mixin (it's unlikely but logically coherent and a good safety check) + _mixin = {} if _mixin.nil? + + # Sanitize the mixin config by removing any :mixins section (these should not end up in merges) + _mixin.delete(:mixins) + + # Merge this bad boy + config.deep_merge( _mixin ) + end + + # Validate final configuration + msg = "Final configuration is empty" + raise msg if config.empty? + end + +end diff --git a/tools/vendor/ceedling/bin/mixins.rb b/tools/vendor/ceedling/bin/mixins.rb new file mode 100644 index 00000000..2c95a228 --- /dev/null +++ b/tools/vendor/ceedling/bin/mixins.rb @@ -0,0 +1,5 @@ + +BUILTIN_MIXINS = { + # Mixin name as symbol => mixin config hash + # :mixin => {} +} diff --git a/tools/vendor/ceedling/bin/objects.yml b/tools/vendor/ceedling/bin/objects.yml new file mode 100644 index 00000000..cf63d15a --- /dev/null +++ b/tools/vendor/ceedling/bin/objects.yml @@ -0,0 +1,80 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + +# +# Loaded from lib/ +# ---------------- +# + +file_wrapper: + +yaml_wrapper: + +config_walkinator: + +system_wrapper: + +verbosinator: + +loginator: + compose: + - verbosinator + - file_wrapper + - system_wrapper + +# +# Loaded from bin/ +# ---------------- +# + +actions_wrapper: + +# Separation of logic from CLI user interface +cli_handler: + compose: + - configinator + - projectinator + - cli_helper + - path_validator + - actions_wrapper + - loginator + +cli_helper: + compose: + - file_wrapper + - config_walkinator + - path_validator + - actions_wrapper + - loginator + - system_wrapper + +path_validator: + compose: + - file_wrapper + - loginator + +mixinator: + compose: + - path_validator + - yaml_wrapper + - loginator + +projectinator: + compose: + - file_wrapper + - path_validator + - yaml_wrapper + - loginator + - system_wrapper + +configinator: + compose: + - config_walkinator + - projectinator + - mixinator + + diff --git a/tools/vendor/ceedling/bin/path_validator.rb b/tools/vendor/ceedling/bin/path_validator.rb new file mode 100644 index 00000000..91dd793f --- /dev/null +++ b/tools/vendor/ceedling/bin/path_validator.rb @@ -0,0 +1,54 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + +class PathValidator + + constructor :file_wrapper, :loginator + + def validate(paths:, source:, type: :filepath) + validated = true + + paths.each do |path| + # Error out on empty paths + if path.empty? + validated = false + @loginator.log( "#{source} contains an empty path", Verbosity::ERRORS ) + next + end + + # Error out if path is not a directory / does not exist + if (type == :directory) and !@file_wrapper.directory?( path ) + validated = false + @loginator.log( "#{source} '#{path}' does not exist as a directory in the filesystem", Verbosity::ERRORS ) + end + + # Error out if filepath does not exist + if (type == :filepath) and !@file_wrapper.exist?( path ) + validated = false + @loginator.log( "#{source} '#{path}' does not exist in the filesystem", Verbosity::ERRORS ) + end + end + + return validated + end + + # Ensure any Windows backslashes are converted to Ruby path forward slashes + # Santization happens inline + def standardize_paths( *paths ) + paths.each do |path| + next if path.nil? or path.empty? + path.gsub!( "\\", '/' ) + end + end + + + def filepath?(str) + # If argument includes a file extension or a path separator, it's a filepath + return (!File.extname( str ).empty?) || (str.include?( File::SEPARATOR )) + end + +end \ No newline at end of file diff --git a/tools/vendor/ceedling/bin/projectinator.rb b/tools/vendor/ceedling/bin/projectinator.rb new file mode 100644 index 00000000..62412efd --- /dev/null +++ b/tools/vendor/ceedling/bin/projectinator.rb @@ -0,0 +1,236 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + +require 'ceedling/constants' # From Ceedling application + +class Projectinator + + PROJECT_FILEPATH_ENV_VAR = 'CEEDLING_PROJECT_FILE' + DEFAULT_PROJECT_FILEPATH = './' + DEFAULT_PROJECT_FILENAME + DEFAULT_YAML_FILE_EXTENSION = '.yml' + + constructor :file_wrapper, :path_validator, :yaml_wrapper, :loginator, :system_wrapper + + # Discovers project file path and loads configuration. + # Precendence of attempts: + # 1. Explcit flepath from argument + # 2. Environment variable + # 3. Default filename in working directory + # Returns: + # - Absolute path of project file found and used + # - Config hash loaded from project file + def load(filepath:nil, env:{}, silent:false) + # Highest priority: command line argument + if filepath + config = load_filepath( filepath, 'from command line argument', silent ) + return File.expand_path( filepath ), config + + # Next priority: environment variable + elsif env[PROJECT_FILEPATH_ENV_VAR] + filepath = env[PROJECT_FILEPATH_ENV_VAR] + @path_validator.standardize_paths( filepath ) + config = load_filepath( + filepath, + "from environment variable `#{PROJECT_FILEPATH_ENV_VAR}`", + silent + ) + return File.expand_path( filepath ), config + + # Final option: default filepath + elsif @file_wrapper.exist?( DEFAULT_PROJECT_FILEPATH ) + filepath = DEFAULT_PROJECT_FILEPATH + config = load_filepath( filepath, "at default location", silent ) + return File.expand_path( filepath ), config + + # If no user provided filepath and the default filepath does not exist, + # we have a big problem + else + raise "No project filepath provided and default #{DEFAULT_PROJECT_FILEPATH} not found" + end + + # We'll never get here but return nil/empty for completeness + return nil, {} + end + + + # Determine if project configuration is available. + # - Simplest, default case simply tries to load default project file location. + # - Otherwise, attempts to load a filepath, the default environment variable, + # or both can be specified. + def config_available?(filepath:nil, env:{}, silent:true) + available = true + + begin + load(filepath:filepath, env:env, silent:silent) + rescue + available = false + end + + return available + end + + + def lookup_yaml_extension(config:) + return DEFAULT_YAML_FILE_EXTENSION if config[:extension].nil? + + return DEFAULT_YAML_FILE_EXTENSION if config[:extension][:yaml].nil? + + return config[:extension][:yaml] + end + + + # Pick apart a :mixins projcet configuration section and return components + # Layout mirrors :plugins section + def extract_mixins(config:) + # Get mixins config hash + _mixins = config[:mixins] + + # If no :mixins section, return: + # - Empty enabled list + # - Empty load paths + return [], [] if _mixins.nil? + + # Build list of load paths + # Configured load paths are higher in search path ordering + load_paths = _mixins[:load_paths] || [] + + # Get list of mixins + enabled = _mixins[:enabled] || [] + enabled = enabled.clone # Ensure it's a copy of configuration section + + # Handle any inline Ruby string expansion + load_paths.each do |load_path| + load_path.replace( @system_wrapper.module_eval( load_path ) ) if (load_path =~ RUBY_STRING_REPLACEMENT_PATTERN) + end + + enabled.each do |mixin| + mixin.replace( @system_wrapper.module_eval( mixin ) ) if (mixin =~ RUBY_STRING_REPLACEMENT_PATTERN) + end + + # Remove the :mixins section of the configuration + config.delete( :mixins ) + + return enabled, load_paths + end + + + # Validate :load_paths from :mixins section in project configuration + def validate_mixin_load_paths(load_paths) + validated = @path_validator.validate( + paths: load_paths, + source: 'Config :mixins ↳ :load_paths =>', + type: :directory + ) + + if !validated + raise 'Project configuration file section :mixins failed validation' + end + end + + + # Validate mixins list + def validate_mixins(mixins:, load_paths:, builtins:, source:, yaml_extension:) + validated = true + + mixins.each do |mixin| + # Validate mixin filepaths + if @path_validator.filepath?( mixin ) + if !@file_wrapper.exist?( mixin ) + @loginator.log( "Cannot find mixin at #{mixin}", Verbosity::ERRORS ) + validated = false + end + + # Otherwise, validate that mixin name can be found in load paths or builtins + else + found = false + load_paths.each do |path| + if @file_wrapper.exist?( File.join( path, mixin + yaml_extension ) ) + found = true + break + end + end + + builtins.keys.each {|key| found = true if (mixin == key.to_s)} + + if !found + msg = "#{source} '#{mixin}' cannot be found in mixin load paths as '#{mixin + yaml_extension}' or among built-in mixins" + @loginator.log( msg, Verbosity::ERRORS ) + validated = false + end + end + end + + return validated + end + + + # Yield ordered list of filepaths or built-in mixin names + def lookup_mixins(mixins:, load_paths:, builtins:, yaml_extension:) + _mixins = [] + + # Already validated, so we know: + # 1. Any mixin filepaths exists + # 2. Built-in mixin names exist in the internal hash + + # Fill filepaths array with filepaths or builtin names + mixins.each do |mixin| + # Handle explicit filepaths + if @path_validator.filepath?( mixin ) + _mixins << mixin + next # Success, move on in mixin iteration + end + + # Look for mixin in load paths. + # Move on in mixin iteration if mixin is found. + next if load_paths.any? do |path| + filepath = File.join( path, mixin + yaml_extension ) + exist = @file_wrapper.exist?( filepath ) + _mixins << filepath if exist + exist + end + + # Finally, fall through to simply add the unmodified name to the list. + # It's a built-in mixin. + _mixins << mixin + end + + return _mixins + end + + ### Private ### + + private + + def load_filepath(filepath, method, silent) + begin + # Load the filepath we settled on as our project configuration + config = @yaml_wrapper.load( filepath ) + + # A blank configuration file is technically an option (assuming mixins are merged) + # Redefine config as empty hash + config = {} if config.nil? + + # Log what the heck we loaded + if !silent + msg = "Loaded #{'(empty) ' if config.empty?}project configuration #{method} using #{filepath}" + @loginator.log( msg, Verbosity::NORMAL, LogLabels::CONSTRUCT ) + end + + return config + rescue Errno::ENOENT + # Handle special case of user-provided blank filepath + filepath = filepath.empty?() ? '' : filepath + raise "Could not find project filepath #{filepath} #{method}" + + rescue StandardError => e + # Catch-all error handling + raise "Error loading project filepath #{filepath} #{method}: #{e.message}" + end + + end + +end diff --git a/tools/vendor/ceedling/bin/versionator.rb b/tools/vendor/ceedling/bin/versionator.rb new file mode 100644 index 00000000..db1594c1 --- /dev/null +++ b/tools/vendor/ceedling/bin/versionator.rb @@ -0,0 +1,69 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + +require 'exceptions' +require 'constants' # Filename constants +require 'version' # Import Ceedling constant symbols from lib/version.rb + +## Definitions +## TAG: <#.#.#> version string used to package the software bundle +## BUILD: TAG combined with git commit hash (<#.#.#>-) + +class Versionator + + attr_reader :ceedling_tag, :ceedling_build, :unity_tag, :cmock_tag, :cexception_tag + + def initialize(ceedling_root_path) + vendor_path = File.join( ceedling_root_path, 'vendor' ) + + ceedling_git_sha = nil + + # Set Ceedling tag + @ceedling_tag = Ceedling::Version::TAG + + # Create Ceedling build string + # Lookup the Ceedling Git commit SHA if it exists as simple text file in the root of the codebase + ceedling_commit_sha_filepath = File.join( ceedling_root_path, GIT_COMMIT_SHA_FILENAME ) + @ceedling_build = + if File.exist?( ceedling_commit_sha_filepath ) + # Ingest text from commit SHA file and clean it up + sha = File.read( ceedling_commit_sha_filepath ).strip() + # - + "#{@ceedling_tag}-#{sha}" + else + # + @ceedling_tag + end + + # Create _tag accessors in the Versionator object + + # Anonymous hash to iterate through complementary vendor projects + { 'UNITY' => File.join( 'unity', 'src', 'unity.h' ), + 'CMOCK' => File.join( 'cmock', 'src', 'cmock.h' ), + 'CEXCEPTION' => File.join( 'c_exception', 'lib', 'CException.h' ) + }.each_pair do |name, path| + filename = File.join( vendor_path, path ) + + # Actually look up the vendor project version number components + version = [0,0,0] + + begin + File.readlines( filename ).each do |line| + ['VERSION_MAJOR', 'VERSION_MINOR', 'VERSION_BUILD'].each_with_index do |field, i| + m = line.match(/#{name}_#{field}\s+(\d+)/) + version[i] = m[1] unless (m.nil?) + end + end + rescue + raise CeedlingException.new( "Could not collect version information for vendor component: #{filename}" ) + end + + # Splat version and evaluate it to create Versionator object accessor + eval("@#{name.downcase}_tag = '#{version.join(".")}'") + end + end +end diff --git a/tools/vendor/ceedling/lib/ceedling.rb b/tools/vendor/ceedling/lib/ceedling.rb index 7f340023..28d27198 100644 --- a/tools/vendor/ceedling/lib/ceedling.rb +++ b/tools/vendor/ceedling/lib/ceedling.rb @@ -1,99 +1,14 @@ -## -# This module defines the interface for interacting with and loading a project -# with Ceedling. -module Ceedling - ## - # Returns the location where the gem is installed. - # === Return - # _String_ - The location where the gem lives. - def self.location - File.join( File.dirname(__FILE__), '..') - end - - ## - # Return the path to the "built-in" plugins. - # === Return - # _String_ - The path where the default plugins live. - def self.load_path - File.join( self.location, 'plugins') - end - - ## - # Return the path to the Ceedling Rakefile - # === Return - # _String_ - def self.rakefile - File.join( self.location, 'lib', 'ceedling', 'rakefile.rb' ) - end - - ## - # This method selects the project file that Ceedling will use by setting the - # CEEDLING_MAIN_PROJECT_FILE environment variable before loading the ceedling - # rakefile. A path supplied as an argument to this method will override the - # current value of the environment variable. If no path is supplied as an - # argument then the existing value of the environment variable is used. If - # the environment variable has not been set and no argument has been supplied - # then a default path of './project.yml' will be used. - # - # === Arguments - # +options+ _Hash_:: - # A hash containing the options for ceedling. Currently the following - # options are supported: - # * +config+ - The path to the project YAML configuration file. - # * +root+ - The root of the project directory. - # * +prefix+ - A prefix to prepend to plugin names in order to determine the - # corresponding gem name. - # * +plugins+ - The list of ceedling plugins to load - def self.load_project(options = {}) - # Make sure our path to the yaml file is setup - if options.has_key? :config - ENV['CEEDLING_MAIN_PROJECT_FILE'] = options[:config] - elsif ENV['CEEDLING_MAIN_PROJECT_FILE'].nil? - ENV['CEEDLING_MAIN_PROJECT_FILE'] = './project.yml' - end - - # Register the plugins - if options.has_key? :plugins - options[:plugins].each do |plugin| - register_plugin( plugin, options[:prefix] ) - end - end +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= - # Define the root of the project if specified - Object.const_set('PROJECT_ROOT', options[:root]) if options.has_key? :root - - # Load ceedling - load "#{self.rakefile}" - end - - ## - # Register a plugin for ceedling to use when a project is loaded. This method - # *must* be called prior to calling the _load_project_ method. - # - # This method is intended to be used for loading plugins distributed via the - # RubyGems mechanism. As such, the following gem structure is assumed for - # plugins. - # - # * The gem name must be prefixed with 'ceedling-' followed by the plugin - # name (ex. 'ceedling-bullseye') - # - # * The contents of the plugin must be isntalled into a subdirectory of - # the gem with the same name as the plugin (ex. 'bullseye/') - # - # === Arguments - # +name+ _String_:: The name of the plugin to load. - # +prefix+ _String_:: - # (optional, default = nil) The prefix to use for the full gem name. - def self.register_plugin(name, prefix=nil) - # Figure out the full name of the gem and location - prefix ||= 'ceedling-' - gem_name = prefix + name - gem_dir = Gem::Specification.find_by_name(gem_name).gem_dir() - - # Register the plugin with Ceedling - require 'ceedling/defaults' - DEFAULT_CEEDLING_CONFIG[:plugins][:enabled] << name - DEFAULT_CEEDLING_CONFIG[:plugins][:load_paths] << gem_dir - end -end +# This file exists solely for `require 'ceedling'` and any backwards compatibility. +# All path loading and related is handled from bin/ceedling. +# There is no shareable, library-worth code in lib/. +module Ceedling + # Emtpy +end \ No newline at end of file diff --git a/tools/vendor/ceedling/lib/ceedling/application.rb b/tools/vendor/ceedling/lib/ceedling/application.rb new file mode 100644 index 00000000..1b1dac16 --- /dev/null +++ b/tools/vendor/ceedling/lib/ceedling/application.rb @@ -0,0 +1,26 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + +# As Rake is removed, more and more functionality and code entrypoints will migrate here + +class Application + + constructor :system_wrapper + + def setup + @failures = false + end + + def register_build_failure + @failures = true + end + + def build_succeeded? + return (!@failures) && @system_wrapper.ruby_success? + end + +end diff --git a/tools/vendor/ceedling/lib/ceedling/backtrace.gdb b/tools/vendor/ceedling/lib/ceedling/backtrace.gdb new file mode 100644 index 00000000..11ec159d --- /dev/null +++ b/tools/vendor/ceedling/lib/ceedling/backtrace.gdb @@ -0,0 +1,5 @@ +if $_isvoid ($_exitcode) + call ((void(*)(int))fflush)(0) + backtrace + kill +end diff --git a/tools/vendor/ceedling/lib/ceedling/build_batchinator.rb b/tools/vendor/ceedling/lib/ceedling/build_batchinator.rb index f48aee77..db6f0ab8 100644 --- a/tools/vendor/ceedling/lib/ceedling/build_batchinator.rb +++ b/tools/vendor/ceedling/lib/ceedling/build_batchinator.rb @@ -1,7 +1,13 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= class BuildBatchinator - constructor :configurator, :streaminator, :reportinator + constructor :configurator, :loginator, :reportinator def setup @queue = Queue.new @@ -10,12 +16,12 @@ def setup # Neaten up a build step with progress message and some scope encapsulation def build_step(msg, heading: true, &block) if heading - msg = @reportinator.generate_heading(msg) + msg = @reportinator.generate_heading( @loginator.decorate( msg, LogLabels::RUN ) ) else # Progress message - msg = "\n" + @reportinator.generate_progress(msg) + msg = "\n" + @reportinator.generate_progress( @loginator.decorate( msg, LogLabels::RUN ) ) end - @streaminator.stdout_puts(msg, Verbosity::NORMAL) + @loginator.log( msg ) yield # Execute build step block end @@ -34,7 +40,7 @@ def exec(workload:, things:, &block) when :test workers = @configurator.project_test_threads else - raise NameError("Unrecognized batch workload type: #{workload}") + raise NameError.new("Unrecognized batch workload type: #{workload}") end # Enqueue all the items the block will execute against diff --git a/tools/vendor/ceedling/lib/ceedling/build_invoker_utils.rb b/tools/vendor/ceedling/lib/ceedling/build_invoker_utils.rb deleted file mode 100644 index 7f57dc4f..00000000 --- a/tools/vendor/ceedling/lib/ceedling/build_invoker_utils.rb +++ /dev/null @@ -1,37 +0,0 @@ -require 'ceedling/constants' - -## -# Utilities for raiser and reporting errors during building. -class BuildInvokerUtils - - constructor :configurator, :streaminator - - ## - # Processes exceptions and tries to display a useful message for the user. - # - # ==== Attributes - # - # * _exception_: The exception given by a rescue statement. - # * _context_: A symbol representing where in the build the exception occurs. - # * _test_build_: A bool to signify if the exception occurred while building from test or source. - # - def process_exception(exception, context, test_build=true) - if (exception.message =~ /Don't know how to build task '(.+)'/i) - error_header = "ERROR: Rake could not find file referenced in source" - error_header += " or test" if (test_build) - error_header += ": '#{$1}'. Possible stale dependency." - - @streaminator.stderr_puts( error_header ) - - if (@configurator.project_use_deep_dependencies) - help_message = "Try fixing #include statements or adding missing file. Then run '#{REFRESH_TASK_ROOT}#{context}' task and try again." - @streaminator.stderr_puts( help_message ) - end - - raise '' - else - raise exception - end - end - -end diff --git a/tools/vendor/ceedling/lib/ceedling/cacheinator.rb b/tools/vendor/ceedling/lib/ceedling/cacheinator.rb index 519a4aab..57bff8ad 100644 --- a/tools/vendor/ceedling/lib/ceedling/cacheinator.rb +++ b/tools/vendor/ceedling/lib/ceedling/cacheinator.rb @@ -1,3 +1,9 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= class Cacheinator diff --git a/tools/vendor/ceedling/lib/ceedling/cacheinator_helper.rb b/tools/vendor/ceedling/lib/ceedling/cacheinator_helper.rb index 14e8a6ef..35676218 100644 --- a/tools/vendor/ceedling/lib/ceedling/cacheinator_helper.rb +++ b/tools/vendor/ceedling/lib/ceedling/cacheinator_helper.rb @@ -1,3 +1,9 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= class CacheinatorHelper diff --git a/tools/vendor/ceedling/lib/ceedling/config_matchinator.rb b/tools/vendor/ceedling/lib/ceedling/config_matchinator.rb index 9bff4cb9..2bc57dfd 100644 --- a/tools/vendor/ceedling/lib/ceedling/config_matchinator.rb +++ b/tools/vendor/ceedling/lib/ceedling/config_matchinator.rb @@ -1,4 +1,11 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= +require 'ceedling/exceptions' # :
    : # :: @@ -10,74 +17,72 @@ class ConfigMatchinator - constructor :configurator, :streaminator + constructor :configurator, :loginator, :reportinator - def config_include?(section:, context:, operation:nil) + def config_include?(primary:, secondary:, tertiary:nil) # Create configurator accessor method - accessor = (section.to_s + '_' + context.to_s).to_sym + accessor = (primary.to_s + '_' + secondary.to_s).to_sym - # If no entry in configuration for context in this section, bail out + # If no entry in configuration for secondary in primary, bail out return false if not @configurator.respond_to?( accessor ) - # If operation undefined, we've progressed as far as we need and already know the config is present - return true if operation.nil? + # If tertiary undefined, we've progressed as far as we need and already know the config is present + return true if tertiary.nil? # Get element associated with this context elem = @configurator.send( accessor ) - # If [section][context] is a simple array + # If [primary][secondary] is a simple array if elem.is_a?(Array) - # A list instead of a hash, means [operation] is not present + # A list instead of a hash, means [tertiary] is not present return false - # If [section][context] is a hash + # If [primary][secondary] is a hash elsif elem.is_a?(Hash) - return elem.include?( operation ) + return elem.include?( tertiary ) end - # Otherwise, [section][context] is something that cannot contain an [operation] sub-hash + # Otherwise, [primary][secondary] is something that cannot contain a [tertiary] sub-hash return false end - def get_config(section:, context:, operation:nil) + def get_config(primary:, secondary:, tertiary:nil) # Create configurator accessor method - accessor = (section.to_s + '_' + context.to_s).to_sym + accessor = (primary.to_s + '_' + secondary.to_s).to_sym - # If no entry in configuration for context in this section, bail out + # If no entry in configuration for secondary in primary, bail out return nil if not @configurator.respond_to?( accessor ) - # Get config element associated with this context + # Get config element associated with this secondary elem = @configurator.send( accessor ) - # If [section][context] is a simple array + # If [primary][secondary] is a simple array if elem.class == Array - # If no operation specified, then a simple array makes sense - return elem if operation.nil? + # If no tertiary specified, then a simple array makes sense + return elem if tertiary.nil? - # Otherwise, if an operation is specified but we have an array, go boom - error = "ERROR: [#{section}][#{context}] present in project configuration but does not contain [#{operation}]." - @streaminator.stderr_puts(error, Verbosity::ERRORS) - raise + # Otherwise, if an tertiary is specified but we have an array, go boom + error = ":#{primary} ↳ :#{secondary} present in project configuration but does not contain :#{tertiary}." + raise CeedlingException.new( error ) - # If [section][context] is a hash + # If [primary][secondary] is a hash elsif elem.class == Hash - if not operation.nil? - # Bail out if we're looking for an [operation] sub-hash, but it's not present - return nil if not elem.include?( operation ) + if not tertiary.nil? + # Bail out if we're looking for an [tertiary] sub-hash, but it's not present + return nil if not elem.include?( tertiary ) - # Return array or hash at operation - return elem[operation] + # Return array or hash at tertiary + return elem[tertiary] - # If operation is not being queried, but we have a hash, return the hash + # If tertiary is not being queried, but we have a hash, return the hash else return elem end - # If [section][context] is nothing we expect--something other than an array or hash + # If [primary][secondary] is nothing we expect--something other than an array or hash else - error = "ERROR: [#{section}][#{context}] in project configuration is neither a list nor hash." - @streaminator.stderr_puts(error, Verbosity::ERRORS) - raise + error = ":#{primary} ↳ :#{secondary} in project configuration is neither a list nor hash." + raise CeedlingException.new( error ) end return nil @@ -87,10 +92,9 @@ def validate_matchers(hash:, section:, context:, operation:nil) # Look for matcher keys with missing values hash.each do |k, v| if v == nil - operation = operation.nil? ? '' : "[#{operation}]" - error = "ERROR: Missing list of values for [#{section}][#{context}]#{operation}[#{k}] matcher in project configuration." - @streaminator.stderr_puts(error, Verbosity::ERRORS) - raise + path = generate_matcher_path( section, context, operation ) + error = "Missing list of values for #{path} ↳ '#{k}' matcher in project configuration." + raise CeedlingException.new( error ) end end end @@ -101,51 +105,88 @@ def matches?(hash:, filepath:, section:, context:, operation:nil) # Sanity check if filepath.nil? - @streaminator.stderr_puts("NOTICE: [#{section}][#{context}]#{operation} > '#{matcher}' matching provided nil #{filepath}", Verbosity::ERROR) - raise + path = generate_matcher_path(section, context, operation) + error = "#{path} ↳ #{matcher} matching provided nil #{filepath}" + raise CeedlingException.new(error) end # Iterate through every hash touple [matcher key, values array] - # In prioritized order match test filepath against each matcher key... - # 1. Wildcard - # 2. Any filepath matching - # 3. Regex - # - # Wildcard and filepath matching can look like valid regexes, so they must be evaluated first. + # In prioritized order match test filepath against each matcher key. + # This order matches on special patterns first to ensure no funny business with simple substring matching + # 1. All files wildcard ('*') + # 2. Regex (/.../) + # 3. Wildcard filepath matching (e.g. 'name*') + # 4. Any filepath matching (substring matching) # # Each element of the collected _values array will be an array of values. hash.each do |matcher, values| - # 1. Try wildcard matching -- return values for every test filepath if '*' is found in values matching key - if ('*' == matcher.to_s.strip) - _values += values - - # 2. Try filepath literal matching (including substring matching) with each values matching key - elsif (filepath.include?(matcher.to_s.strip)) - _values += values + mtached = false + _matcher = matcher.to_s.strip + + # 1. Try gross wildcard matching -- return values for all test filepaths if '*' is the matching key + if ('*' == _matcher) + matched = true + + # 2. Try regular expression matching against all values matching keys that are regexes (ignore if not a valid regex) + # Note: We use logical AND here so that we get a meaningful fall-through condition. + # Nesting the actual regex matching beneath validity checking improperly catches unmatched regexes + elsif (regex?(_matcher)) and (!(form_regex(_matcher).match(filepath)).nil?) + matched = true + + # 3. Try wildcard matching -- return values for any test filepath that matches with '*' expansion + # Treat matcher as a regex: + # 1. Escape any regex characters (e.g. '-') + # 2. Convert any now escaped '\*'s into '.*' + # 3. Match filepath against regex-ified matcher + elsif (filepath =~ /#{Regexp.escape(matcher).gsub('\*', '.*')}/) + matched = true + + # 4. Try filepath literal matching (including substring matching) with each matching key + # Note: (3) will do this if the matcher key lacks a '*', but this is a just-in-case backup + elsif (filepath.include?(_matcher)) + matched = true + end - # 3. Try regular expression matching against all values matching keys that are regexes (ignore if not a valid regex) - # Note: We use logical AND here so that we get a meaningful fall-through to the else reporting condition. - # Nesting the actual regex matching beneath validity checking improperly catches unmatched regexes - elsif (regex?(matcher.to_s.strip)) and (!(filepath =~ /#{matcher.to_s.strip}/).nil?) + if matched _values += values - - else - operation = operation.nil? ? '' : "[#{operation}]" - @streaminator.stderr_puts("NOTICE: [#{section}][#{context}]#{operation} > '#{matcher}' did not match #{filepath}", Verbosity::DEBUG) - end + matched_notice(section:section, context:context, operation:operation, matcher:_matcher, filepath:filepath) + else # No match + path = generate_matcher_path(section, context, operation) + @loginator.log("#{path} ↳ `#{matcher}` did not match #{filepath}", Verbosity::DEBUG) + end end return _values.flatten # Flatten to handle YAML aliases end + ### Private ### + private + def matched_notice(section:, context:, operation:, matcher:, filepath:) + path = generate_matcher_path(section, context, operation) + @loginator.log("#{path} ↳ #{matcher} matched #{filepath}", Verbosity::OBNOXIOUS) + end + + def generate_matcher_path(*keys) + return @reportinator.generate_config_walk(keys) + end + + # Assumes expr is a string and has been stripped def regex?(expr) valid = true + if !expr.start_with?('/') + return false + end + + if !expr.end_with? ('/') + return false + end + begin - Regexp.new(expr) + Regexp.new(expr[1..-2]) rescue RegexpError valid = false end @@ -153,4 +194,9 @@ def regex?(expr) return valid end + # Assumes expr is /.../ + def form_regex(expr) + return Regexp.new(expr[1..-2]) + end + end diff --git a/tools/vendor/ceedling/lib/ceedling/config_walkinator.rb b/tools/vendor/ceedling/lib/ceedling/config_walkinator.rb new file mode 100644 index 00000000..f378cf7c --- /dev/null +++ b/tools/vendor/ceedling/lib/ceedling/config_walkinator.rb @@ -0,0 +1,35 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + +class ConfigWalkinator + + def fetch_value(*keys, hash:, default:nil) + # Safe initial values + value = default + depth = 0 + + # Set walk variable + walk = hash + + # Walk into hash & extract value at requested key sequence + keys.each { |symbol| + # Validate that we can fetch something meaningful + if !walk.is_a?( Hash) or !symbol.is_a?( Symbol ) or walk[symbol].nil? + value = default + break + end + + # Walk into the hash one more level and update value + depth += 1 + walk = walk[symbol] + value = walk + } if !walk.nil? + + return value, depth + end + +end diff --git a/tools/vendor/ceedling/lib/ceedling/configurator.rb b/tools/vendor/ceedling/lib/ceedling/configurator.rb index 86940710..2d78c2dc 100644 --- a/tools/vendor/ceedling/lib/ceedling/configurator.rb +++ b/tools/vendor/ceedling/lib/ceedling/configurator.rb @@ -1,52 +1,50 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + require 'ceedling/defaults' require 'ceedling/constants' require 'ceedling/file_path_utils' +require 'ceedling/exceptions' require 'deep_merge' - - class Configurator - attr_reader :project_config_hash, :script_plugins, :rake_plugins - attr_accessor :project_logging, :project_debug, :project_verbosity, :sanity_checks + attr_reader :project_config_hash, :programmatic_plugins, :rake_plugins + attr_accessor :project_logging, :sanity_checks, :include_test_case, :exclude_test_case - constructor(:configurator_setup, :configurator_builder, :configurator_plugins, :yaml_wrapper, :system_wrapper) do - @project_logging = false - @project_debug = false - @project_verbosity = Verbosity::NORMAL - @sanity_checks = TestResultsSanityChecks::NORMAL - end + constructor :configurator_setup, :configurator_builder, :configurator_plugins, :config_walkinator, :yaml_wrapper, :system_wrapper, :loginator, :reportinator - def setup + def setup() # Cmock config reference to provide to CMock for mock generation @cmock_config = {} # Default empty hash, replaced by reference below # Runner config reference to provide to runner generation @runner_config = {} # Default empty hash, replaced by reference below - # note: project_config_hash is an instance variable so constants and accessors created + # Note: project_config_hash is an instance variable so constants and accessors created # in eval() statements in build() have something of proper scope and persistence to reference @project_config_hash = {} - @project_config_hash_backup = {} - @script_plugins = [] + @programmatic_plugins = [] @rake_plugins = [] - end - - def replace_flattened_config(config) - @project_config_hash.merge!(config) - @configurator_setup.build_constants_and_accessors(@project_config_hash, binding()) + @project_logging = false + @sanity_checks = TestResultsSanityChecks::NORMAL end - - def store_config - @project_config_hash_backup = @project_config_hash.clone + # Override to prevent exception handling from walking & stringifying the object variables. + # Object variables are gigantic and produce a flood of output. + def inspect + # TODO: When identifying information is added to constructor, insert it into `inspect()` string + return this.class.name end - - def restore_config - @project_config_hash = @project_config_hash_backup + def replace_flattened_config(config) + @project_config_hash.merge!(config) @configurator_setup.build_constants_and_accessors(@project_config_hash, binding()) end @@ -57,287 +55,525 @@ def reset_defaults(config) :test_fixture, :test_includes_preprocessor, :test_file_preprocessor, - :test_file_preprocessor_directives, :test_dependencies_generator, :release_compiler, :release_assembler, :release_linker, - :release_dependencies_generator].each do |tool| + :release_dependencies_generator + ].each do |tool| config[:tools].delete(tool) if (not (config[:tools][tool].nil?)) end end - # The default values defined in defaults.rb (eg. DEFAULT_TOOLS_TEST) are populated - # into @param config - def populate_defaults(config) - new_config = DEFAULT_CEEDLING_CONFIG.deep_clone - new_config.deep_merge!(config) - config.replace(new_config) + # Set up essential flattened config related to verbosity. + # We do this because early config validation failures may need access to verbosity, + # but the accessors won't be available until after configuration is validated. + def set_verbosity(config) + # PROJECT_VERBOSITY and PROJECT_DEBUG set at command line processing before Ceedling is loaded - @configurator_builder.populate_defaults( config, DEFAULT_TOOLS_TEST ) - @configurator_builder.populate_defaults( config, DEFAULT_TOOLS_TEST_PREPROCESSORS ) if (config[:project][:use_test_preprocessor]) - @configurator_builder.populate_defaults( config, DEFAULT_TOOLS_TEST_DEPENDENCIES ) if (config[:project][:use_deep_dependencies]) + # Configurator will later try to create these accessors automatically but will silently + # fail if they already exist. + + if (!!defined?(PROJECT_DEBUG) and PROJECT_DEBUG) or (config[:project][:debug]) + eval("def project_debug() return true end", binding()) + else + eval("def project_debug() return false end", binding()) + end - @configurator_builder.populate_defaults( config, DEFAULT_TOOLS_RELEASE ) if (config[:project][:release_build]) - @configurator_builder.populate_defaults( config, DEFAULT_TOOLS_RELEASE_ASSEMBLER ) if (config[:project][:release_build] and config[:release_build][:use_assembly]) - @configurator_builder.populate_defaults( config, DEFAULT_TOOLS_RELEASE_DEPENDENCIES ) if (config[:project][:release_build] and config[:project][:use_deep_dependencies]) + if !!defined?(PROJECT_VERBOSITY) + eval("def project_verbosity() return #{PROJECT_VERBOSITY} end", binding()) + end end - def populate_unity_defaults(config) - unity = config[:unity] || {} - @runner_config = unity.merge(config[:test_runner] || {}) + # The default tools (eg. DEFAULT_TOOLS_TEST) are merged into default config hash + def merge_tools_defaults(config, default_config) + msg = @reportinator.generate_progress( 'Collecting default tool configurations' ) + @loginator.log( msg, Verbosity::OBNOXIOUS ) + + # config[:project] is guaranteed to exist / validated to exist + # config[:test_build] and config[:release_build] are optional in a user project configuration + release_assembly, _ = @config_walkinator.fetch_value( :release_build, :use_assembly, hash:config, default:false ) + test_assembly, _ = @config_walkinator.fetch_value( :test_build, :use_assembly, hash:config, default:false) + + default_config.deep_merge( DEFAULT_TOOLS_TEST.deep_clone() ) + + default_config.deep_merge( DEFAULT_TOOLS_TEST_PREPROCESSORS.deep_clone() ) if (config[:project][:use_test_preprocessor] != :none) + default_config.deep_merge( DEFAULT_TOOLS_TEST_ASSEMBLER.deep_clone() ) if test_assembly + + default_config.deep_merge( DEFAULT_TOOLS_RELEASE.deep_clone() ) if (config[:project][:release_build]) + default_config.deep_merge( DEFAULT_TOOLS_RELEASE_ASSEMBLER.deep_clone() ) if (config[:project][:release_build] and release_assembly) end - def populate_cmock_defaults(config) - # cmock has its own internal defaults handling, but we need to set these specific values - # so they're present for the build environment to access; - # note: these need to end up in the hash given to initialize cmock for this to be successful - cmock = config[:cmock] || {} - # yes, we're duplicating the default mock_prefix in cmock, but it's because we need CMOCK_MOCK_PREFIX always available in Ceedling's environment - cmock[:mock_prefix] = 'Mock' if (cmock[:mock_prefix].nil?) + def populate_cmock_defaults(config, default_config) + # Cmock has its own internal defaults handling, but we need to set these specific values + # so they're guaranteed values and present for the Ceedling environment to access - # just because strict ordering is the way to go - cmock[:enforce_strict_ordering] = true if (cmock[:enforce_strict_ordering].nil?) + msg = @reportinator.generate_progress( 'Collecting CMock defaults' ) + @loginator.log( msg, Verbosity::OBNOXIOUS ) - cmock[:mock_path] = File.join(config[:project][:build_root], TESTS_BASE_PATH, 'mocks') if (cmock[:mock_path].nil?) + # Begin populating defaults with CMock defaults as set by Ceedling + default_cmock = default_config[:cmock] - cmock[:verbosity] = @project_verbosity if (cmock[:verbosity].nil?) + # Fill in default settings programmatically + default_cmock[:mock_path] = File.join(config[:project][:build_root], TESTS_BASE_PATH, 'mocks') + default_cmock[:verbosity] = project_verbosity() + end - cmock[:plugins] = [] if (cmock[:plugins].nil?) - cmock[:plugins].map! { |plugin| plugin.to_sym } - cmock[:plugins].uniq! - cmock[:unity_helper] = false if (cmock[:unity_helper].nil?) + def prepare_plugins_load_paths(plugins_load_path, config) + # Plugins must be loaded before generic path evaluation & magic that happen later. + # So, perform path magic here as discrete step. + config[:plugins][:load_paths].each do |path| + path.replace( @system_wrapper.module_eval( path ) ) if (path =~ RUBY_STRING_REPLACEMENT_PATTERN) + FilePathUtils::standardize( path ) + end + + # Add Ceedling's plugins path as load path so built-in plugins can be found + config[:plugins][:load_paths] << plugins_load_path + config[:plugins][:load_paths].uniq! + + return @configurator_plugins.process_aux_load_paths( config ) + end + - if (cmock[:unity_helper]) - cmock[:unity_helper] = [cmock[:unity_helper]] if cmock[:unity_helper].is_a? String - cmock[:includes] += cmock[:unity_helper].map{|helper| File.basename(helper) } - cmock[:includes].uniq! + def merge_plugins_defaults(paths_hash, config, default_config) + # Config YAML defaults plugins + plugin_yml_defaults = @configurator_plugins.find_plugin_yml_defaults( config, paths_hash ) + + # Config Ruby-based hash defaults plugins + plugin_hash_defaults = @configurator_plugins.find_plugin_hash_defaults( config, paths_hash ) + + if (!plugin_yml_defaults.empty? or !plugin_hash_defaults.empty?) + msg = @reportinator.generate_progress( 'Collecting plugin defaults' ) + @loginator.log( msg, Verbosity::OBNOXIOUS ) end - @runner_config = cmock.merge(@runner_config || config[:test_runner] || {}) + if !@configurator_plugins.plugin_yml_defaults.empty? + msg = " > Plugin YAML defaults: " + @configurator_plugins.plugin_yml_defaults.join( ', ' ) + @loginator.log( msg, Verbosity::DEBUG ) + end + # Load base configuration values (defaults) from YAML + plugin_yml_defaults.each do |defaults| + default_config.deep_merge( @yaml_wrapper.load( defaults ) ) + end + + if !@configurator_plugins.plugin_hash_defaults.empty? + msg = " > Plugin Ruby hash defaults: " + @configurator_plugins.plugin_hash_defaults.join( ', ' ) + @loginator.log( msg, Verbosity::DEBUG ) + end + + # Load base configuration values (defaults) as hash from Ruby + plugin_hash_defaults.each do |defaults| + default_config.deep_merge( defaults ) + end + end + + + def merge_ceedling_runtime_config(config, runtime_config) + # Merge Ceedling's internal runtime configuration settings + config.deep_merge( runtime_config ) + end + + + def populate_unity_config(config) + msg = @reportinator.generate_progress( 'Processing Unity configuration' ) + @loginator.log( msg, Verbosity::OBNOXIOUS ) + + if config[:unity][:use_param_tests] + config[:unity][:defines] << 'UNITY_SUPPORT_TEST_CASES' + config[:unity][:defines] << 'UNITY_SUPPORT_VARIADIC_MACROS' + end + end + + + def populate_cmock_config(config) + # Populate config with CMock config + cmock = config[:cmock] || {} @cmock_config = cmock + + return if !config[:project][:use_mocks] + + msg = @reportinator.generate_progress( 'Processing CMock configuration' ) + @loginator.log( msg, Verbosity::OBNOXIOUS ) + + # Plugins housekeeping + cmock[:plugins].map! { |plugin| plugin.to_sym() } + cmock[:plugins].uniq! + + # CMock includes safe defaults + cmock[:includes] = [] if (cmock[:includes].nil?) + + # Default to empty array if cmock[:unity_helper_path] not provided + cmock[:unity_helper_path] = [] if cmock[:unity_helper_path].nil? + # Reformulate CMock helper path value as array of one element if it's a string in config + cmock[:unity_helper_path] = [cmock[:unity_helper_path]] if cmock[:unity_helper_path].is_a?( String ) + + # CMock Unity helper handling + cmock[:unity_helper_path].each do |path| + cmock[:includes] << File.basename( path ) + end + + cmock[:includes].uniq! + end + + + def populate_defaults( config_hash, defaults_hash ) + msg = @reportinator.generate_progress( 'Populating project configuration with collected default values' ) + @loginator.log( msg, Verbosity::OBNOXIOUS ) + + @configurator_builder.populate_defaults( config_hash, defaults_hash ) end - def copy_vendor_defines(config) - # NOTE: To maintain any backwards compatibility following a refactoring of :defines: handling, - # copy top-level vendor defines into the respective tool areas. - config[UNITY_SYM].store(:defines, config[:defines][UNITY_SYM]) - config[CMOCK_SYM].store(:defines, config[:defines][CMOCK_SYM]) - config[CEXCEPTION_SYM].store(:defines, config[:defines][CEXCEPTION_SYM]) + def populate_test_runner_generation_config(config) + msg = @reportinator.generate_progress( 'Populating test runner generation settings' ) + @loginator.log( msg, Verbosity::OBNOXIOUS ) + + use_backtrace = config[:project][:use_backtrace] + + # Force command line argument option for any backtrace option + if use_backtrace != :none + config[:test_runner][:cmdline_args] = true + end + + # Copy CMock options used by test runner generation + config[:test_runner][:mock_prefix] = config[:cmock][:mock_prefix] + config[:test_runner][:mock_suffix] = config[:cmock][:mock_suffix] + config[:test_runner][:enforce_strict_ordering] = config[:cmock][:enforce_strict_ordering] + + # Merge Unity options used by test runner generation + config[:test_runner][:defines] += config[:unity][:defines] + config[:test_runner][:use_param_tests] = config[:unity][:use_param_tests] + + @runner_config = config[:test_runner] + end + + + def populate_exceptions_config(config) + # Automagically set exception handling if CMock is configured for it + if config[:cmock][:plugins] && config[:cmock][:plugins].include?(:cexception) + msg = @reportinator.generate_progress( 'Enabling CException use based on CMock plugins settings' ) + @loginator.log( msg, Verbosity::OBNOXIOUS ) + + config[:project][:use_exceptions] = true + end end def get_runner_config + # Clone because test runner generation is not thread-safe; + # The runner generator is manufactured for each use with configuration changes for each use. return @runner_config.clone end def get_cmock_config + # Clone because test mock generation is not thread-safe; + # The mock generator is manufactured for each use with configuration changes for each use. return @cmock_config.clone end - # grab tool names from yaml and insert into tool structures so available for error messages - # set up default values - def tools_setup(config) + # Process our tools + # - :tools entries + # - Insert missing names for + # - Handle inline Ruby string substitution + # - Handle needed defaults + # - Configure test runner from backtrace configuration + def populate_tools_config(config) + msg = @reportinator.generate_progress( 'Populating tool definition settings and expanding any string replacements' ) + @loginator.log( msg, Verbosity::OBNOXIOUS ) + config[:tools].each_key do |name| tool = config[:tools][name] - # populate name if not given + if not tool.is_a?(Hash) + raise CeedlingException.new( "Expected configuration for tool :#{name} is a Hash but found #{tool.class}" ) + end + + # Populate name if not given tool[:name] = name.to_s if (tool[:name].nil?) - # handle inline ruby string substitution in executable + # Handle inline Ruby string substitution in executable if (tool[:executable] =~ RUBY_STRING_REPLACEMENT_PATTERN) tool[:executable].replace(@system_wrapper.module_eval(tool[:executable])) end - # populate stderr redirect option + # Populate $stderr redirect option tool[:stderr_redirect] = StdErrRedirect::NONE if (tool[:stderr_redirect].nil?) - # populate optional option to control verification of executable in search paths + # Populate optional option to control verification of executable in search paths tool[:optional] = false if (tool[:optional].nil?) end end - def tools_supplement_arguments(config) - tools_name_prefix = 'tools_' - config[:tools].each_key do |name| - tool = @project_config_hash[(tools_name_prefix + name.to_s).to_sym] - - # smoosh in extra arguments if specified at top-level of config (useful for plugins & default gcc tools) - # arguments are squirted in at _end_ of list - top_level_tool = (tools_name_prefix + name.to_s).to_sym - if (not config[top_level_tool].nil?) - # adding and flattening is not a good idea: might over-flatten if there's array nesting in tool args - tool[:arguments].concat config[top_level_tool][:arguments] - end - end - end - + # Smoosh in extra arguments specified at top-level of config. + # This is useful for tweaking arguments for tools (where argument order does not matter). + # Arguments are squirted in at *end* of list. + def populate_tools_supplemental_arguments(config) + msg = @reportinator.generate_progress( 'Processing tool definition supplemental arguments' ) + @loginator.log( msg, Verbosity::OBNOXIOUS ) - def find_and_merge_plugins(config) - # plugins must be loaded before generic path evaluation & magic that happen later; - # perform path magic here as discrete step - config[:plugins][:load_paths].each do |path| - path.replace(@system_wrapper.module_eval(path)) if (path =~ RUBY_STRING_REPLACEMENT_PATTERN) - FilePathUtils::standardize(path) - end + prefix = 'tools_' + config[:tools].each do |key, tool| + name = key.to_s() - config[:plugins][:load_paths] << FilePathUtils::standardize(Ceedling.load_path) - config[:plugins][:load_paths].uniq! + # Supplemental tool definition + supplemental = config[(prefix + name).to_sym] - paths_hash = @configurator_plugins.add_load_paths(config) + if (not supplemental.nil?) + args_to_add = supplemental[:arguments] - @rake_plugins = @configurator_plugins.find_rake_plugins(config, paths_hash) - @script_plugins = @configurator_plugins.find_script_plugins(config, paths_hash) - config_plugins = @configurator_plugins.find_config_plugins(config, paths_hash) - plugin_yml_defaults = @configurator_plugins.find_plugin_yml_defaults(config, paths_hash) - plugin_hash_defaults = @configurator_plugins.find_plugin_hash_defaults(config, paths_hash) + msg = " > #{name}: Arguments " + args_to_add.map{|arg| "\"#{arg}\""}.join( ', ' ) + @loginator.log( msg, Verbosity::DEBUG ) - config_plugins.each do |plugin| - plugin_config = @yaml_wrapper.load(plugin) - config.deep_merge(plugin_config) + # Adding and flattening is not a good idea -- might over-flatten if array nesting in tool args + tool[:arguments].concat( args_to_add ) + end end + end - plugin_yml_defaults.each do |defaults| - @configurator_builder.populate_defaults( config, @yaml_wrapper.load(defaults) ) + + def discover_plugins(paths_hash, config) + msg = @reportinator.generate_progress( 'Discovering all plugins' ) + @loginator.log( msg, Verbosity::OBNOXIOUS ) + + # Rake-based plugins + @rake_plugins = @configurator_plugins.find_rake_plugins( config, paths_hash ) + if !@configurator_plugins.rake_plugins.empty? + msg = " > Rake plugins: " + @configurator_plugins.rake_plugins.map{|p| p[:plugin]}.join( ', ' ) + @loginator.log( msg, Verbosity::DEBUG ) end - plugin_hash_defaults.each do |defaults| - @configurator_builder.populate_defaults( config, defaults ) + # Ruby `Plugin` subclass programmatic plugins + @programmatic_plugins = @configurator_plugins.find_programmatic_plugins( config, paths_hash ) + if !@configurator_plugins.programmatic_plugins.empty? + msg = " > Programmatic plugins: " + @configurator_plugins.programmatic_plugins.map{|p| p[:plugin]}.join( ', ' ) + @loginator.log( msg, Verbosity::DEBUG ) + end + + # Config plugins + config_plugins = @configurator_plugins.find_config_plugins( config, paths_hash ) + if !@configurator_plugins.config_plugins.empty? + msg = " > Config plugins: " + @configurator_plugins.config_plugins.map{|p| p[:plugin]}.join( ', ' ) + @loginator.log( msg, Verbosity::DEBUG ) end - # special plugin setting for results printing + return config_plugins + end + + + def populate_plugins_config(paths_hash, config) + # Set special plugin setting for results printing if unset config[:plugins][:display_raw_test_results] = true if (config[:plugins][:display_raw_test_results].nil?) + # Add corresponding path to each plugin's configuration paths_hash.each_pair { |name, path| config[:plugins][name] = path } end - def merge_imports(config) - if config[:import] - if config[:import].is_a? Array - until config[:import].empty? - path = config[:import].shift - path = @system_wrapper.module_eval(path) if (path =~ RUBY_STRING_REPLACEMENT_PATTERN) - config.deep_merge!(@yaml_wrapper.load(path)) - end - else - config[:import].each_value do |path| - if !path.nil? - path = @system_wrapper.module_eval(path) if (path =~ RUBY_STRING_REPLACEMENT_PATTERN) - config.deep_merge!(@yaml_wrapper.load(path)) - end + def merge_config_plugins(config) + return if @configurator_plugins.config_plugins.empty? + + # Merge plugin configuration values (like Ceedling project file) + @configurator_plugins.config_plugins.each do |hash| + _config = @yaml_wrapper.load( hash[:path] ) + + msg = @reportinator.generate_progress( "Merging configuration from plugin #{hash[:plugin]}" ) + @loginator.log( msg, Verbosity::OBNOXIOUS ) + + # Special handling for plugin paths + if (_config.include?( :paths )) + _config[:paths].update( _config[:paths] ) do |k,v| + plugin_path = hash[:path].match( /(.*)[\/]config[\/]\w+\.yml/ )[1] + v.map {|vv| File.expand_path( vv.gsub!( /\$PLUGIN_PATH/, plugin_path) ) } end end + + config.deep_merge( _config ) end - config.delete(:import) end + # Process environment variables set in configuration file + # (Each entry within the :environment array is a hash) def eval_environment_variables(config) + return if config[:environment].nil? + + msg = @reportinator.generate_progress( 'Processing environment variables' ) + @loginator.log( msg, Verbosity::OBNOXIOUS ) + config[:environment].each do |hash| - key = hash.keys[0] - value = hash[key] + key = hash.keys[0] # Get first (should be only) environment variable entry + value = hash[key] # Get associated value items = [] + # Special case handling for :path environment variable entry + # File::PATH_SEPARATOR => ':' (Unix-ish) or ';' (Windows) interstitial = ((key == :path) ? File::PATH_SEPARATOR : '') + + # Create an array container for the value of this entry + # - If the value is an array, get it + # - Otherwise, place value in a single item array items = ((value.class == Array) ? hash[key] : [value]) + # Process value array items.each do |item| + # Process each item for Ruby string replacement if item.is_a? String and item =~ RUBY_STRING_REPLACEMENT_PATTERN item.replace( @system_wrapper.module_eval( item ) ) end end + + # Join any value items (become a flattened string) + # - With path separator if the key was :path + # - With nothing otherwise hash[key] = items.join( interstitial ) + # Set the environment variable for our session @system_wrapper.env_set( key.to_s.upcase, hash[key] ) end end + # Eval config path lists (convert any strings to array of size 1) and handle any Ruby string replacement def eval_paths(config) - # [:plugins]:[load_paths] already handled + # :plugins ↳ :load_paths already handled - paths = [ # individual paths that don't follow convention processed below - config[:project][:build_root], - config[:release_build][:artifacts]] + msg = @reportinator.generate_progress( 'Processing path entries and expanding any string replacements' ) + @loginator.log( msg, Verbosity::OBNOXIOUS ) + + eval_path_entries( config[:project][:build_root] ) + eval_path_entries( config[:release_build][:artifacts] ) + + config[:paths].each_pair do |entry, paths| + # :paths sub-entries (e.g. :test) could be a single string -> make array + reform_path_entries_as_lists( config[:paths], entry, paths ) + eval_path_entries( paths ) + end - eval_path_list( paths ) + config[:files].each_pair do |entry, files| + # :files sub-entries (e.g. :test) could be a single string -> make array + reform_path_entries_as_lists( config[:files], entry, files ) + eval_path_entries( files ) + end - config[:paths].each_pair { |collection, paths| eval_path_list( paths ) } + # All other paths at secondary hash key level processed by convention (`_path`): + # ex. :toplevel ↳ :foo_path & :toplevel ↳ :bar_paths are evaluated + config.each_pair { |_, child| eval_path_entries( collect_path_list( child ) ) } + end - config[:files].each_pair { |collection, files| eval_path_list( files ) } - # all other paths at secondary hash key level processed by convention: - # ex. [:toplevel][:foo_path] & [:toplevel][:bar_paths] are evaluated - config.each_pair { |parent, child| eval_path_list( collect_path_list( child ) ) } + # Handle any Ruby string replacement for :flags string arrays + def eval_flags(config) + msg = @reportinator.generate_progress( 'Expanding any string replacements in :flags entries' ) + @loginator.log( msg, Verbosity::OBNOXIOUS ) + + # Descend down to array of command line flags strings regardless of depth in config block + traverse_hash_eval_string_arrays( config[:flags] ) + end + + + # Handle any Ruby string replacement for :defines string arrays + def eval_defines(config) + msg = @reportinator.generate_progress( 'Expanding any string replacements in :defines entries' ) + @loginator.log( msg, Verbosity::OBNOXIOUS ) + + # Descend down to array of #define strings regardless of depth in config block + traverse_hash_eval_string_arrays( config[:defines] ) end def standardize_paths(config) - # [:plugins]:[load_paths] already handled + msg = @reportinator.generate_progress( 'Standardizing all paths' ) + @loginator.log( msg, Verbosity::OBNOXIOUS ) - paths = [ # individual paths that don't follow convention processed below + # Individual paths that don't follow `_path` convention processed here + paths = [ config[:project][:build_root], - config[:release_build][:artifacts]] # cmock path in case it was explicitly set in config + config[:release_build][:artifacts] + ] paths.flatten.each { |path| FilePathUtils::standardize( path ) } config[:paths].each_pair do |collection, paths| - # ensure that list is an array (i.e. handle case of list being a single string, + # Ensure that list is an array (i.e. handle case of list being a single string, # or a multidimensional array) config[:paths][collection] = [paths].flatten.map{|path| FilePathUtils::standardize( path )} end - config[:files].each_pair { |collection, files| files.each{ |path| FilePathUtils::standardize( path ) } } + config[:files].each_pair { |_, files| files.each{ |path| FilePathUtils::standardize( path ) } } - config[:tools].each_pair { |tool, config| FilePathUtils::standardize( config[:executable] ) if (config.include? :executable) } + config[:tools].each_pair { |_, config| FilePathUtils::standardize( config[:executable] ) if (config.include? :executable) } - # all other paths at secondary hash key level processed by convention: - # ex. [:toplevel][:foo_path] & [:toplevel][:bar_paths] are standardized - config.each_pair do |parent, child| + # All other paths at secondary hash key level processed by convention (`_path`): + # ex. :toplevel ↳ :foo_path & :toplevel ↳ :bar_paths are standardized + config.each_pair do |_, child| collect_path_list( child ).each { |path| FilePathUtils::standardize( path ) } end end - def validate(config) - # collect felonies and go straight to jail - raise if (not @configurator_setup.validate_required_sections( config )) + def validate_essential(config) + # Collect all infractions, everybody on probation until final adjudication + blotter = true + + blotter &= @configurator_setup.validate_required_sections( config ) + blotter &= @configurator_setup.validate_required_section_values( config ) + + if !blotter + raise CeedlingException.new("Ceedling configuration failed validation") + end + end - # collect all misdemeanors, everybody on probation - blotter = [] - blotter << @configurator_setup.validate_required_section_values( config ) - blotter << @configurator_setup.validate_paths( config ) - blotter << @configurator_setup.validate_tools( config ) - blotter << @configurator_setup.validate_plugins( config ) - raise if (blotter.include?( false )) + def validate_final(config, app_cfg) + # Collect all infractions, everybody on probation until final adjudication + blotter = true + blotter &= @configurator_setup.validate_paths( config ) + blotter &= @configurator_setup.validate_tools( config ) + blotter &= @configurator_setup.validate_test_runner_generation( + config, + app_cfg[:include_test_case], + app_cfg[:exclude_test_case] + ) + blotter &= @configurator_setup.validate_test_preprocessor( config ) + blotter &= @configurator_setup.validate_backtrace( config ) + blotter &= @configurator_setup.validate_threads( config ) + blotter &= @configurator_setup.validate_plugins( config ) + + if !blotter + raise CeedlingException.new( "Ceedling configuration failed validation" ) + end end - # create constants and accessors (attached to this object) from given hash - def build(config, *keys) - # create flattened & expanded configuration hash - built_config = @configurator_setup.build_project_config( config, @configurator_builder.flattenify( config ) ) + # Create constants and accessors (attached to this object) from given hash + def build(ceedling_lib_path, config, *keys) + flattened_config = @configurator_builder.flattenify( config ) + + @configurator_setup.build_project_config( ceedling_lib_path, flattened_config ) - @project_config_hash = built_config.clone - store_config() + @configurator_setup.build_directory_structure( flattened_config ) - @configurator_setup.build_constants_and_accessors(built_config, binding()) + # Copy Unity, CMock, CException into vendor directory within build directory + @configurator_setup.vendor_frameworks_and_support_files( ceedling_lib_path, flattened_config ) - # top-level keys disappear when we flatten, so create global constants & accessors to any specified keys + @configurator_setup.build_project_collections( flattened_config ) + + @project_config_hash = flattened_config.clone + + @configurator_setup.build_constants_and_accessors( flattened_config, binding() ) + + # Top-level keys disappear when we flatten, so create global constants & accessors to any specified keys keys.each do |key| hash = { key => config[key] } - @configurator_setup.build_constants_and_accessors(hash, binding()) + @configurator_setup.build_constants_and_accessors( hash, binding() ) end end @@ -348,8 +584,8 @@ def redefine_element(elem, value) # Ensure element already exists if not @project_config_hash.include?(elem) - @streaminator.stderr_puts("Could not rederine #{elem} in configurator--element does not exist", Verbosity::ERROR) - raise + error = "Could not rederine #{elem} in configurator--element does not exist" + raise CeedlingException.new(error) end # Update internal hash @@ -357,13 +593,10 @@ def redefine_element(elem, value) # Update global constant @configurator_builder.build_global_constant(elem, value) - - # Update backup config - store_config end - # add to constants and accessors as post build step + # Add to constants and accessors as post build step def build_supplement(config_base, config_more) # merge in our post-build additions to base configuration hash config_base.deep_merge!( config_more ) @@ -373,7 +606,6 @@ def build_supplement(config_base, config_more) # merge our flattened hash with built hash from previous build @project_config_hash.deep_merge!( config_more_flattened ) - store_config() # create more constants and accessors @configurator_setup.build_constants_and_accessors(config_more_flattened, binding()) @@ -387,8 +619,11 @@ def build_supplement(config_base, config_more) def insert_rake_plugins(plugins) - plugins.each do |plugin| - @project_config_hash[:project_rakefile_component_files] << plugin + plugins.each do |hash| + msg = @reportinator.generate_progress( "Adding plugin #{hash[:plugin]} to Rake load list" ) + @loginator.log( msg, Verbosity::OBNOXIOUS ) + + @project_config_hash[:project_rakefile_component_files] << hash[:path] end end @@ -396,22 +631,59 @@ def insert_rake_plugins(plugins) private + def reform_path_entries_as_lists( container, entry, value ) + container[entry] = [value] if value.kind_of?( String ) + end + + def collect_path_list( container ) paths = [] - container.each_key { |key| paths << container[key] if (key.to_s =~ /_path(s)?$/) } if (container.class == Hash) - return paths.flatten + + if (container.class == Hash) + container.each_key do |key| + paths << container[key] if (key.to_s =~ /_path(s)?$/) + end + end + + return paths.flatten() end - def eval_path_list( paths ) - if paths.kind_of?(Array) - paths = Array.new(paths) + + def eval_path_entries( container ) + paths = [] + + case(container) + when Array then paths = Array.new( container ).flatten() + when String then paths << container + else + return end - paths.flatten.each do |path| + paths.each do |path| path.replace( @system_wrapper.module_eval( path ) ) if (path =~ RUBY_STRING_REPLACEMENT_PATTERN) end end + # Traverse configuration tree recursively to find terminal leaf nodes that are a list of strings; + # expand in place any string with the Ruby string replacement pattern. + def traverse_hash_eval_string_arrays(config) + case config + + when Array + # If it's an array of strings, process it + if config.all? { |item| item.is_a?( String ) } + # Expand in place each string item in the array + config.each do |item| + item.replace( @system_wrapper.module_eval( item ) ) if (item =~ RUBY_STRING_REPLACEMENT_PATTERN) + end + end + + when Hash + # Recurse + config.each_value { |value| traverse_hash_eval_string_arrays( value ) } + end + end + end diff --git a/tools/vendor/ceedling/lib/ceedling/configurator_builder.rb b/tools/vendor/ceedling/lib/ceedling/configurator_builder.rb index d3bddda8..6c776584 100644 --- a/tools/vendor/ceedling/lib/ceedling/configurator_builder.rb +++ b/tools/vendor/ceedling/lib/ceedling/configurator_builder.rb @@ -1,14 +1,19 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + require 'rubygems' -require 'rake' # for ext() method +require 'rake' # for ext() method require 'ceedling/file_path_utils' # for class methods require 'ceedling/defaults' require 'ceedling/constants' # for Verbosity constants class & base file paths - - class ConfiguratorBuilder - constructor :file_system_utils, :file_wrapper, :system_wrapper + constructor :file_path_collection_utils, :file_wrapper, :system_wrapper def build_global_constant(elem, value) @@ -25,6 +30,7 @@ def build_global_constant(elem, value) Object.module_eval("#{formatted_key} = value") end + def build_global_constants(config) config.each_pair do |key, value| build_global_constant(key, value) @@ -54,7 +60,7 @@ def flattenify(config) config.each_key do | parent | - # gracefully handle empty top-level entries + # Gracefully handle empty top-level entries next if (config[parent].nil?) case config[parent] @@ -63,12 +69,14 @@ def flattenify(config) key = "#{parent.to_s.downcase}_#{hash.keys[0].to_s.downcase}".to_sym new_hash[key] = hash[hash.keys[0]] end + when Hash config[parent].each_pair do | child, value | key = "#{parent.to_s.downcase}_#{child.to_s.downcase}".to_sym new_hash[key] = value end - # handle entries with no children, only values + + # Handle entries with no children, only values else new_hash["#{parent.to_s.downcase}".to_sym] = config[parent] end @@ -79,37 +87,29 @@ def flattenify(config) end + # If config lacks an entry that defaults posseses, add a config entry with the default value def populate_defaults(config, defaults) defaults.keys.sort.each do |section| - defaults[section].keys.sort.each do |entry| - config[section] = {} if config[section].nil? - config[section][entry] = defaults[section][entry].deep_clone if (config[section][entry].nil?) + case defaults[section] + when Hash + defaults[section].keys.sort.each do |entry| + config[section] = {} if config[section].nil? + config[section][entry] = defaults[section][entry].deep_clone if (config[section][entry].nil?) + end + + when Array + config[section] = defaults[section] end end end def cleanup(in_hash) - # ensure that include files inserted into test runners have file extensions & proper ones at that + # Ensure that include files inserted into test runners have file extensions & proper ones at that in_hash[:test_runner_includes].map!{|include| include.ext(in_hash[:extension_header])} end - def set_exception_handling(in_hash) - # If project defines exception handling, do not change the setting. - # But, if the project omits exception handling setting... - if not in_hash[:project_use_exceptions] - # Automagically set it if cmock is configured for it - if in_hash[:cmock_plugins] && in_hash[:cmock_plugins].include?(:cexception) - in_hash[:project_use_exceptions] = true - # Otherwise, disable exceptions for the project - else - in_hash[:project_use_exceptions] = false - end - end - end - - def set_build_paths(in_hash) out_hash = {} @@ -138,19 +138,17 @@ def set_build_paths(in_hash) [:project_release_artifacts_path, File.join(project_build_artifacts_root, RELEASE_BASE_PATH), in_hash[:project_release_build] ], [:project_release_build_cache_path, File.join(project_build_release_root, 'cache'), in_hash[:project_release_build] ], [:project_release_build_output_path, File.join(project_build_release_root, 'out'), in_hash[:project_release_build] ], - [:project_release_build_output_asm_path, File.join(project_build_release_root, 'out', 'asm'), in_hash[:project_release_build] ], - [:project_release_build_output_c_path, File.join(project_build_release_root, 'out', 'c'), in_hash[:project_release_build] ], [:project_release_dependencies_path, File.join(project_build_release_root, 'dependencies'), in_hash[:project_release_build] ], - [:project_log_path, File.join(in_hash[:project_build_root], 'logs'), true ], + [:project_log_path, File.join(in_hash[:project_build_root], 'logs'), true ], - [:project_test_preprocess_includes_path, File.join(project_build_tests_root, 'preprocess/includes'), in_hash[:project_use_test_preprocessor] ], - [:project_test_preprocess_files_path, File.join(project_build_tests_root, 'preprocess/files'), in_hash[:project_use_test_preprocessor] ], + [:project_test_preprocess_includes_path, File.join(project_build_tests_root, 'preprocess/includes'), (in_hash[:project_use_test_preprocessor] != :none) ], + [:project_test_preprocess_files_path, File.join(project_build_tests_root, 'preprocess/files'), (in_hash[:project_use_test_preprocessor] != :none) ], ] out_hash[:project_build_paths] = [] - # fetch already set mock path + # Fetch already set mock path out_hash[:project_build_paths] << in_hash[:cmock_mock_path] if (in_hash[:project_use_mocks]) paths.each do |path| @@ -158,9 +156,9 @@ def set_build_paths(in_hash) build_path = path[1] build_path_add_condition = path[2] - # insert path into build paths if associated with true condition + # Insert path into build paths if associated with true condition out_hash[:project_build_paths] << build_path if build_path_add_condition - # set path symbol name and path for each entry in paths array + # Set path symbol name and path for each entry in paths array out_hash[build_path_name] = build_path end @@ -168,16 +166,18 @@ def set_build_paths(in_hash) end - def set_rakefile_components(in_hash) + def set_rakefile_components(ceedling_lib_path, in_hash) out_hash = { - :project_rakefile_component_files => - [File.join(CEEDLING_LIB, 'ceedling', 'tasks_base.rake'), - File.join(CEEDLING_LIB, 'ceedling', 'tasks_filesystem.rake'), - File.join(CEEDLING_LIB, 'ceedling', 'tasks_tests.rake'), - File.join(CEEDLING_LIB, 'ceedling', 'rules_tests.rake')]} + :project_rakefile_component_files => [ + File.join( ceedling_lib_path, 'tasks_base.rake' ), + File.join( ceedling_lib_path, 'tasks_filesystem.rake' ), + File.join( ceedling_lib_path, 'tasks_tests.rake' ), + File.join( ceedling_lib_path, 'rules_tests.rake' ) + ] + } - out_hash[:project_rakefile_component_files] << File.join(CEEDLING_LIB, 'ceedling', 'rules_release.rake') if (in_hash[:project_release_build]) - out_hash[:project_rakefile_component_files] << File.join(CEEDLING_LIB, 'ceedling', 'tasks_release.rake') if (in_hash[:project_release_build]) + out_hash[:project_rakefile_component_files] << File.join( ceedling_lib_path, 'rules_release.rake' ) if (in_hash[:project_release_build]) + out_hash[:project_rakefile_component_files] << File.join( ceedling_lib_path, 'tasks_release.rake' ) if (in_hash[:project_release_build]) return out_hash end @@ -197,16 +197,65 @@ def set_release_target(in_hash) end - def collect_project_options(in_hash) - options = [] + def set_build_thread_counts(in_hash) + require 'etc' - in_hash[:project_options_paths].each do |path| - options << @file_wrapper.directory_listing( File.join(path, '*.yml') ) + auto_thread_count = (Etc.nprocessors + 4) + + compile_threads = in_hash[:project_compile_threads] + test_threads = in_hash[:project_test_threads] + + case compile_threads + when Integer + # Do nothing--value already validated + when Symbol + # If a symbol, it's already been validated as legal + compile_threads = auto_thread_count if compile_threads == :auto + end + + case test_threads + when Integer + # Do nothing--value already validated + when Symbol + # If a symbol, it's already been validated as legal + test_threads = auto_thread_count if test_threads == :auto end return { - :collection_project_options => options.flatten - } + :project_compile_threads => compile_threads, + :project_test_threads => test_threads + } + end + + + def set_test_preprocessor_accessors(in_hash) + accessors = {} + + # :project_use_test_preprocessor already validated + case in_hash[:project_use_test_preprocessor] + when :none + accessors = { + :project_use_test_preprocessor_tests => false, + :project_use_test_preprocessor_mocks => false + } + when :all + accessors = { + :project_use_test_preprocessor_tests => true, + :project_use_test_preprocessor_mocks => true + } + when :tests + accessors = { + :project_use_test_preprocessor_tests => true, + :project_use_test_preprocessor_mocks => false + } + when :mocks + accessors = { + :project_use_test_preprocessor_tests => false, + :project_use_test_preprocessor_mocks => true + } + end + + return accessors end @@ -219,9 +268,9 @@ def expand_all_path_globs(in_hash) path_keys << key end - # sorted to provide assured order of traversal in test calls on mocks - path_keys.sort.each do |key| - out_hash["collection_#{key}".to_sym] = @file_system_utils.collect_paths( in_hash[key] ) + path_keys.each do |key| + _collection = "collection_#{key}".to_sym + out_hash[_collection] = @file_path_collection_utils.collect_paths( in_hash[key] ) end return out_hash @@ -232,7 +281,7 @@ def collect_source_and_include_paths(in_hash) return { :collection_paths_source_and_include => ( in_hash[:collection_paths_source] + - in_hash[:collection_paths_include] ).select {|x| File.directory?(x)} + in_hash[:collection_paths_include] ) } end @@ -252,10 +301,10 @@ def collect_source_include_vendor_paths(in_hash) def collect_test_support_source_include_paths(in_hash) return { :collection_paths_test_support_source_include => - (in_hash[:collection_paths_test] + - in_hash[:collection_paths_support] + - in_hash[:collection_paths_source] + - in_hash[:collection_paths_include] ).select {|x| File.directory?(x)} + ( in_hash[:collection_paths_test] + + in_hash[:collection_paths_support] + + in_hash[:collection_paths_source] + + in_hash[:collection_paths_include] ) } end @@ -281,9 +330,13 @@ def collect_tests(in_hash) all_tests.include( File.join(path, "#{in_hash[:project_test_file_prefix]}*#{in_hash[:extension_source]}") ) end - @file_system_utils.revise_file_list( all_tests, in_hash[:files_test] ) + # Force Rake::FileList to expand patterns to ensure it happens (FileList is a bit unreliable) + all_tests.resolve() - return {:collection_all_tests => all_tests} + return { + # Add / subtract files via :files ↳ :test + :collection_all_tests => @file_path_collection_utils.revise_filelist( all_tests, in_hash[:files_test] ) + } end @@ -302,25 +355,31 @@ def collect_assembly(in_hash) all_assembly.include( File.join(path, "*#{in_hash[:extension_assembly]}") ) end - # Also add files that we are explicitly adding via :files:assembly: section - @file_system_utils.revise_file_list( all_assembly, in_hash[:files_assembly] ) + # Force Rake::FileList to expand patterns to ensure it happens (FileList is a bit unreliable) + all_assembly.resolve() + + return { + # Add / subtract files via :files ↳ :assembly + :collection_all_assembly => @file_path_collection_utils.revise_filelist( all_assembly, in_hash[:files_assembly] ) + } - return {:collection_all_assembly => all_assembly} end def collect_source(in_hash) all_source = @file_wrapper.instantiate_file_list + in_hash[:collection_paths_source].each do |path| - if File.exist?(path) and not File.directory?(path) - all_source.include( path ) - else - all_source.include( File.join(path, "*#{in_hash[:extension_source]}") ) - end + all_source.include( File.join(path, "*#{in_hash[:extension_source]}") ) end - @file_system_utils.revise_file_list( all_source, in_hash[:files_source] ) - return {:collection_all_source => all_source} + # Force Rake::FileList to expand patterns to ensure it happens (FileList is a bit unreliable) + all_source.resolve() + + return { + # Add / subtract files via :files ↳ :source + :collection_all_source => @file_path_collection_utils.revise_filelist( all_source, in_hash[:files_source] ) + } end @@ -336,69 +395,84 @@ def collect_headers(in_hash) all_headers.include( File.join(path, "*#{in_hash[:extension_header]}") ) end - @file_system_utils.revise_file_list( all_headers, in_hash[:files_include] ) + # Force Rake::FileList to expand patterns to ensure it happens (FileList is a bit unreliable) + all_headers.resolve() - return {:collection_all_headers => all_headers} + return { + # Add / subtract files via :files ↳ :include + :collection_all_headers => @file_path_collection_utils.revise_filelist( all_headers, in_hash[:files_include] ) + } end - def collect_release_existing_compilation_input(in_hash) + def collect_release_build_input(in_hash) release_input = @file_wrapper.instantiate_file_list - paths = - in_hash[:collection_paths_source] + - in_hash[:collection_paths_include] - - paths << File.join(in_hash[:cexception_vendor_path], CEXCEPTION_LIB_PATH) if (in_hash[:project_use_exceptions]) + paths = [] + paths << in_hash[:project_build_vendor_cexception_path] if (in_hash[:project_use_exceptions]) + # Collect vendor framework code files paths.each do |path| - release_input.include( File.join(path, "*#{in_hash[:extension_header]}") ) - if File.exist?(path) and not File.directory?(path) - release_input.include( path ) - else - release_input.include( File.join(path, "*#{in_hash[:extension_source]}") ) - end + release_input.include( File.join(path, '*' + EXTENSION_CORE_SOURCE) ) end - @file_system_utils.revise_file_list( release_input, in_hash[:files_source] ) - @file_system_utils.revise_file_list( release_input, in_hash[:files_include] ) - # finding assembly files handled explicitly through other means + # Collect source files + in_hash[:collection_paths_source].each do |path| + release_input.include( File.join(path, "*#{in_hash[:extension_source]}") ) + release_input.include( File.join(path, "*#{in_hash[:extension_assembly]}") ) if in_hash[:release_build_use_assembly] + end + + # Add / subtract files via :files ↳ :source & :files ↳ :assembly + revisions = in_hash[:files_source] + revisions += in_hash[:files_assembly] if in_hash[:release_build_use_assembly] + + # Force Rake::FileList to expand patterns to ensure it happens (FileList is a bit unreliable) + release_input.resolve() - return {:collection_release_existing_compilation_input => release_input} + return { + :collection_release_build_input => @file_path_collection_utils.revise_filelist( release_input, revisions ) + } end - def collect_all_existing_compilation_input(in_hash) + # Collect all test build code that exists in the configured paths (runners and mocks are handled at build time) + def collect_existing_test_build_input(in_hash) all_input = @file_wrapper.instantiate_file_list - paths = - in_hash[:collection_paths_test] + - in_hash[:collection_paths_support] + - in_hash[:collection_paths_source] + - in_hash[:collection_paths_include] - # Vendor paths for frameworks + paths = [] paths << in_hash[:project_build_vendor_unity_path] paths << in_hash[:project_build_vendor_cexception_path] if (in_hash[:project_use_exceptions]) paths << in_hash[:project_build_vendor_cmock_path] if (in_hash[:project_use_mocks]) + # Collect vendor framework code files paths.each do |path| - all_input.include( File.join(path, "*#{in_hash[:extension_header]}") ) - if File.exist?(path) and not File.directory?(path) - all_input.include( path ) - else - all_input.include( File.join(path, "*#{in_hash[:extension_source]}") ) - all_input.include( File.join(path, "*#{in_hash[:extension_assembly]}") ) if (defined?(TEST_BUILD_USE_ASSEMBLY) && TEST_BUILD_USE_ASSEMBLY) - end + all_input.include( File.join(path, '*' + EXTENSION_CORE_SOURCE) ) end - @file_system_utils.revise_file_list( all_input, in_hash[:files_test] ) - @file_system_utils.revise_file_list( all_input, in_hash[:files_support] ) - @file_system_utils.revise_file_list( all_input, in_hash[:files_source] ) - @file_system_utils.revise_file_list( all_input, in_hash[:files_include] ) - # finding assembly files handled explicitly through other means + paths = + in_hash[:collection_paths_test] + + in_hash[:collection_paths_support] + + in_hash[:collection_paths_source] + + # Collect code files + paths.each do |path| + all_input.include( File.join(path, "*#{in_hash[:extension_source]}") ) + all_input.include( File.join(path, "*#{in_hash[:extension_assembly]}") ) if in_hash[:test_build_use_assembly] + end + + # Add / subtract files via :files entries + revisions = in_hash[:files_test] + revisions += in_hash[:files_support] + revisions += in_hash[:files_source] + revisions += in_hash[:files_assembly] if in_hash[:test_build_use_assembly] + + # Force Rake::FileList to expand patterns to ensure it happens (FileList is a bit unreliable) + all_input.resolve() - return {:collection_all_existing_compilation_input => all_input} + return { + :collection_existing_test_build_input => @file_path_collection_utils.revise_filelist( all_input, revisions ) + } end @@ -416,21 +490,61 @@ def collect_test_fixture_extra_link_objects(in_hash) sources = [] support = @file_wrapper.instantiate_file_list() - @file_system_utils.revise_file_list( support, in_hash[:files_support] ) + paths = in_hash[:collection_paths_support] + + # Collect code files + paths.each do |path| + support.include( File.join(path, "*#{in_hash[:extension_source]}") ) + support.include( File.join(path, "*#{in_hash[:extension_assembly]}") ) if in_hash[:test_build_use_assembly] + end + + # Force Rake::FileList to expand patterns to ensure it happens (FileList is a bit unreliable) + support.resolve() + + support = @file_path_collection_utils.revise_filelist( support, in_hash[:files_support] ) support.each { |file| sources << file } - # create object files from all the sources + # Create object files from all the sources objects = sources.map { |file| File.basename(file) } - # no build paths here so plugins can remap if necessary (i.e. path mapping happens at runtime) + # No build paths here so plugins can remap if necessary (i.e. path mapping happens at runtime) objects.map! { |object| object.ext(in_hash[:extension_object]) } - return { :collection_all_support => sources, - :collection_test_fixture_extra_link_objects => objects - } + return { + :collection_all_support => sources, + :collection_test_fixture_extra_link_objects => objects + } + end + + + # .c files without path + def collect_vendor_framework_sources(in_hash) + sources = [] + filelist = @file_wrapper.instantiate_file_list() + + # Vendor paths for frameworks + paths = get_vendor_paths(in_hash) + + # Collect vendor framework code files + paths.each do |path| + filelist.include( File.join(path, '*' + EXTENSION_CORE_SOURCE) ) + end + + # Force Rake::FileList to expand patterns to ensure it happens (FileList is a bit unreliable) + filelist.resolve() + + # Extract just source file names + filelist.each do |filepath| + sources << File.basename(filepath) + end + + return {:collection_vendor_framework_sources => sources} end + + ### Private ### + private def get_vendor_paths(in_hash) diff --git a/tools/vendor/ceedling/lib/ceedling/configurator_plugins.rb b/tools/vendor/ceedling/lib/ceedling/configurator_plugins.rb index 75bcd982..1af76400 100644 --- a/tools/vendor/ceedling/lib/ceedling/configurator_plugins.rb +++ b/tools/vendor/ceedling/lib/ceedling/configurator_plugins.rb @@ -1,33 +1,65 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + require 'ceedling/constants' class ConfiguratorPlugins - constructor :stream_wrapper, :file_wrapper, :system_wrapper - attr_reader :rake_plugins, :script_plugins + constructor :file_wrapper, :system_wrapper + + attr_reader :rake_plugins, :programmatic_plugins, :config_plugins, :plugin_yml_defaults, :plugin_hash_defaults def setup - @rake_plugins = [] - @script_plugins = [] + @rake_plugins = [] + @programmatic_plugins = [] + @config_plugins = [] + @plugin_yml_defaults = [] + @plugin_hash_defaults = [] + end + + + # Override to prevent exception handling from walking & stringifying the object variables. + # Object variables are gigantic and produce a flood of output. + def inspect + # TODO: When identifying information is added to constructor, insert it into `inspect()` string + return this.class.name end - def add_load_paths(config) + def process_aux_load_paths(config) plugin_paths = {} + # Add any base load path to Ruby's load path collection + config[:plugins][:load_paths].each do |path| + @system_wrapper.add_load_path( path ) + end + + # If a load path contains an actual Ceedling plugin, load its subdirectories by convention config[:plugins][:enabled].each do |plugin| config[:plugins][:load_paths].each do |root| path = File.join(root, plugin) - is_script_plugin = ( not @file_wrapper.directory_listing( File.join( path, 'lib', '*.rb' ) ).empty? ) - is_rake_plugin = ( not @file_wrapper.directory_listing( File.join( path, '*.rake' ) ).empty? ) + # Ceedling Ruby-based hash defaults plugin (or config for Ceedling programmatic plugin) + is_config_plugin = ( not @file_wrapper.directory_listing( File.join( path, 'config', '*.rb' ) ).empty? ) + + # Ceedling programmatic plugin + is_programmatic_plugin = ( not @file_wrapper.directory_listing( File.join( path, 'lib', '*.rb' ) ).empty? ) - if is_script_plugin or is_rake_plugin + # Ceedling Rake plugin + is_rake_plugin = ( not @file_wrapper.directory_listing( File.join( path, '*.rake' ) ).empty? ) + + if (is_config_plugin or is_programmatic_plugin or is_rake_plugin) plugin_paths[(plugin + '_path').to_sym] = path - if is_script_plugin - @system_wrapper.add_load_path( File.join( path, 'lib') ) - @system_wrapper.add_load_path( File.join( path, 'config') ) - end + # Add paths to Ruby load paths that contain *.rb files + @system_wrapper.add_load_path( File.join( path, 'config') ) if is_config_plugin + @system_wrapper.add_load_path( File.join( path, 'lib') ) if is_programmatic_plugin + + # We found load_path/ + / path that exists, skip ahead break end end @@ -37,7 +69,7 @@ def add_load_paths(config) end - # gather up and return .rake filepaths that exist on-disk + # Gather up and return .rake filepaths that exist in plugin paths def find_rake_plugins(config, plugin_paths) @rake_plugins = [] plugins_with_path = [] @@ -45,54 +77,54 @@ def find_rake_plugins(config, plugin_paths) config[:plugins][:enabled].each do |plugin| if path = plugin_paths[(plugin + '_path').to_sym] rake_plugin_path = File.join(path, "#{plugin}.rake") - if (@file_wrapper.exist?(rake_plugin_path)) - plugins_with_path << rake_plugin_path - @rake_plugins << plugin + if @file_wrapper.exist?( rake_plugin_path ) + @rake_plugins << {:plugin => plugin, :path => rake_plugin_path} end end end - return plugins_with_path + return @rake_plugins end - # gather up and return just names of .rb classes that exist on-disk - def find_script_plugins(config, plugin_paths) - @script_plugins = [] + # Gather up names of .rb `Plugin` subclasses and root paths that exist in plugin paths + lib/ + def find_programmatic_plugins(config, plugin_paths) + @programmatic_plugins = [] config[:plugins][:enabled].each do |plugin| if path = plugin_paths[(plugin + '_path').to_sym] - script_plugin_path = File.join(path, "lib", "#{plugin}.rb") + plugin_path = File.join( path, "lib", "#{plugin}.rb" ) - if @file_wrapper.exist?(script_plugin_path) - @script_plugins << plugin + if @file_wrapper.exist?( plugin_path ) + @programmatic_plugins << {:plugin => plugin, :root_path => path} end end end - return @script_plugins + return @programmatic_plugins end - # gather up and return configuration .yml filepaths that exist on-disk + # Gather up and return config .yml filepaths that exist in plugin paths + config/ def find_config_plugins(config, plugin_paths) + @config_plugins = [] plugins_with_path = [] config[:plugins][:enabled].each do |plugin| if path = plugin_paths[(plugin + '_path').to_sym] config_plugin_path = File.join(path, "config", "#{plugin}.yml") - if @file_wrapper.exist?(config_plugin_path) - plugins_with_path << config_plugin_path + if @file_wrapper.exist?( config_plugin_path ) + @config_plugins << {:plugin => plugin, :path => config_plugin_path} end end end - return plugins_with_path + return @config_plugins end - # gather up and return default .yml filepaths that exist on-disk + # Gather up and return default .yml filepaths that exist on-disk def find_plugin_yml_defaults(config, plugin_paths) defaults_with_path = [] @@ -100,8 +132,9 @@ def find_plugin_yml_defaults(config, plugin_paths) if path = plugin_paths[(plugin + '_path').to_sym] default_path = File.join(path, 'config', 'defaults.yml') - if @file_wrapper.exist?(default_path) + if @file_wrapper.exist?( default_path ) defaults_with_path << default_path + @plugin_yml_defaults << plugin end end end @@ -109,18 +142,19 @@ def find_plugin_yml_defaults(config, plugin_paths) return defaults_with_path end - # gather up and return + # Gather up and return defaults generated by Ruby code in plugin paths + config/ def find_plugin_hash_defaults(config, plugin_paths) defaults_hash= [] config[:plugins][:enabled].each do |plugin| if path = plugin_paths[(plugin + '_path').to_sym] default_path = File.join(path, "config", "defaults_#{plugin}.rb") - if @file_wrapper.exist?(default_path) - @system_wrapper.require_file( "defaults_#{plugin}.rb") + if @file_wrapper.exist?( default_path ) + @system_wrapper.require_file( "defaults_#{plugin}.rb" ) object = eval("get_default_config()") defaults_hash << object + @plugin_hash_defaults << plugin end end end diff --git a/tools/vendor/ceedling/lib/ceedling/configurator_setup.rb b/tools/vendor/ceedling/lib/ceedling/configurator_setup.rb index 6580336a..3e41fb3d 100644 --- a/tools/vendor/ceedling/lib/ceedling/configurator_setup.rb +++ b/tools/vendor/ceedling/lib/ceedling/configurator_setup.rb @@ -1,5 +1,14 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= -# add sort-ability to symbol so we can order keys array in hash for test-ability +require 'ceedling/constants' +require 'ceedling/exceptions' + +# Add sort-ability to symbol so we can order keys array in hash for test-ability class Symbol include Comparable @@ -11,36 +20,93 @@ def <=>(other) class ConfiguratorSetup - constructor :configurator_builder, :configurator_validator, :configurator_plugins, :stream_wrapper - - - def build_project_config(config, flattened_config) - ### flesh out config - @configurator_builder.cleanup(flattened_config) - @configurator_builder.set_exception_handling(flattened_config) - - ### add to hash values we build up from configuration & file system contents - flattened_config.merge!(@configurator_builder.set_build_paths(flattened_config)) - flattened_config.merge!(@configurator_builder.set_rakefile_components(flattened_config)) - flattened_config.merge!(@configurator_builder.set_release_target(flattened_config)) - flattened_config.merge!(@configurator_builder.collect_project_options(flattened_config)) - - ### iterate through all entries in paths section and expand any & all globs to actual paths - flattened_config.merge!(@configurator_builder.expand_all_path_globs(flattened_config)) - - flattened_config.merge!(@configurator_builder.collect_vendor_paths(flattened_config)) - flattened_config.merge!(@configurator_builder.collect_source_and_include_paths(flattened_config)) - flattened_config.merge!(@configurator_builder.collect_source_include_vendor_paths(flattened_config)) - flattened_config.merge!(@configurator_builder.collect_test_support_source_include_paths(flattened_config)) - flattened_config.merge!(@configurator_builder.collect_test_support_source_include_vendor_paths(flattened_config)) - flattened_config.merge!(@configurator_builder.collect_tests(flattened_config)) - flattened_config.merge!(@configurator_builder.collect_assembly(flattened_config)) - flattened_config.merge!(@configurator_builder.collect_source(flattened_config)) - flattened_config.merge!(@configurator_builder.collect_headers(flattened_config)) - flattened_config.merge!(@configurator_builder.collect_release_existing_compilation_input(flattened_config)) - flattened_config.merge!(@configurator_builder.collect_all_existing_compilation_input(flattened_config)) - flattened_config.merge!(@configurator_builder.collect_release_artifact_extra_link_objects(flattened_config)) - flattened_config.merge!(@configurator_builder.collect_test_fixture_extra_link_objects(flattened_config)) + constructor :configurator_builder, :configurator_validator, :configurator_plugins, :loginator, :file_wrapper + + + # Override to prevent exception handling from walking & stringifying the object variables. + # Object variables are gigantic and produce a flood of output. + def inspect + # TODO: When identifying information is added to constructor, insert it into `inspect()` string + return this.class.name + end + + def build_project_config(ceedling_lib_path, flattened_config) + # Housekeeping + @configurator_builder.cleanup( flattened_config ) + + # Add to hash values we build up from configuration & file system contents + flattened_config.merge!( @configurator_builder.set_build_paths( flattened_config ) ) + flattened_config.merge!( @configurator_builder.set_rakefile_components( ceedling_lib_path, flattened_config ) ) + flattened_config.merge!( @configurator_builder.set_release_target( flattened_config ) ) + flattened_config.merge!( @configurator_builder.set_build_thread_counts( flattened_config ) ) + flattened_config.merge!( @configurator_builder.set_test_preprocessor_accessors( flattened_config ) ) + + return flattened_config + end + + def build_directory_structure(flattened_config) + msg = "Build paths:" + flattened_config[:project_build_paths].each do |path| + msg += "\n - #{(path.nil? or path.empty?) ? '' : path}" + end + @loginator.log( msg, Verbosity::DEBUG ) + + flattened_config[:project_build_paths].each do |path| + if path.nil? or path.empty? + raise CeedlingException.new( "Blank internal project build path subdirectory value" ) + end + + @file_wrapper.mkdir( path ) + end + end + + def vendor_frameworks_and_support_files(ceedling_lib_path, flattened_config) + # Copy Unity C files into build/vendor directory structure + @file_wrapper.cp_r( + # '/.' to cause cp_r to copy directory contents + File.join( flattened_config[:unity_vendor_path], UNITY_LIB_PATH, '/.' ), + flattened_config[:project_build_vendor_unity_path] + ) + + # Copy CMock C files into build/vendor directory structure + @file_wrapper.cp_r( + # '/.' to cause cp_r to copy directory contents + File.join( flattened_config[:cmock_vendor_path], CMOCK_LIB_PATH, '/.' ), + flattened_config[:project_build_vendor_cmock_path] + ) if flattened_config[:project_use_mocks] + + # Copy CException C files into build/vendor directory structure + @file_wrapper.cp_r( + # '/.' to cause cp_r to copy directory contents + File.join( flattened_config[:cexception_vendor_path], CEXCEPTION_LIB_PATH, '/.' ), + flattened_config[:project_build_vendor_cexception_path] + ) if flattened_config[:project_use_exceptions] + + # Copy backtrace debugging script into build/test directory structure + @file_wrapper.cp_r( + File.join( ceedling_lib_path, BACKTRACE_GDB_SCRIPT_FILE ), + flattened_config[:project_build_tests_root] + ) if flattened_config[:project_use_backtrace] == :gdb + end + + def build_project_collections(flattened_config) + # Iterate through all entries in paths section and expand any & all globs to actual paths + flattened_config.merge!( @configurator_builder.expand_all_path_globs( flattened_config ) ) + + flattened_config.merge!( @configurator_builder.collect_vendor_paths( flattened_config ) ) + flattened_config.merge!( @configurator_builder.collect_source_and_include_paths( flattened_config ) ) + flattened_config.merge!( @configurator_builder.collect_source_include_vendor_paths( flattened_config ) ) + flattened_config.merge!( @configurator_builder.collect_test_support_source_include_paths( flattened_config ) ) + flattened_config.merge!( @configurator_builder.collect_test_support_source_include_vendor_paths( flattened_config ) ) + flattened_config.merge!( @configurator_builder.collect_tests( flattened_config ) ) + flattened_config.merge!( @configurator_builder.collect_assembly( flattened_config ) ) + flattened_config.merge!( @configurator_builder.collect_source( flattened_config ) ) + flattened_config.merge!( @configurator_builder.collect_headers( flattened_config ) ) + flattened_config.merge!( @configurator_builder.collect_release_build_input( flattened_config ) ) + flattened_config.merge!( @configurator_builder.collect_existing_test_build_input( flattened_config ) ) + flattened_config.merge!( @configurator_builder.collect_release_artifact_extra_link_objects( flattened_config ) ) + flattened_config.merge!( @configurator_builder.collect_test_fixture_extra_link_objects( flattened_config ) ) + flattened_config.merge!( @configurator_builder.collect_vendor_framework_sources( flattened_config ) ) return flattened_config end @@ -61,6 +127,7 @@ def validate_required_sections(config) return true end + def validate_required_section_values(config) validation = [] validation << @configurator_validator.exists?(config, :project, :build_root) @@ -71,52 +138,148 @@ def validate_required_section_values(config) return true end - def validate_paths(config) - validation = [] - if config[:cmock][:unity_helper] - config[:cmock][:unity_helper].each do |path| - validation << @configurator_validator.validate_filepath_simple( path, :cmock, :unity_helper ) - end - end + def validate_paths(config) + valid = true - config[:project][:options_paths].each do |path| - validation << @configurator_validator.validate_filepath_simple( path, :project, :options_paths ) + # Ceedling ensures [:unity_helper_path] is an array + config[:cmock][:unity_helper_path].each do |path| + valid &= @configurator_validator.validate_filepath_simple( path, :cmock, :unity_helper_path ) end config[:plugins][:load_paths].each do |path| - validation << @configurator_validator.validate_filepath_simple( path, :plugins, :load_paths ) + valid &= @configurator_validator.validate_filepath_simple( path, :plugins, :load_paths ) end config[:paths].keys.sort.each do |key| - validation << @configurator_validator.validate_path_list(config, :paths, key) + valid &= @configurator_validator.validate_path_list(config, :paths, key) + valid &= @configurator_validator.validate_paths_entries(config, key) end - return false if (validation.include?(false)) - return true + config[:files].keys.sort.each do |key| + valid &= @configurator_validator.validate_path_list(config, :files, key) + valid &= @configurator_validator.validate_files_entries(config, key) + end + + return valid end def validate_tools(config) - validation = [] + valid = true - config[:tools].keys.sort.each do |key| - validation << @configurator_validator.exists?(config, :tools, key, :executable) - validation << @configurator_validator.validate_executable_filepath(config, :tools, key, :executable) if (not config[:tools][key][:optional]) - validation << @configurator_validator.validate_tool_stderr_redirect(config, :tools, key) + config[:tools].keys.sort.each do |tool| + valid &= @configurator_validator.validate_tool( config:config, key:tool ) + end + + if config[:project][:use_backtrace] == :gdb + valid &= @configurator_validator.validate_tool( + config:config, + key: :test_backtrace_gdb, + respect_optional: false + ) + end + + return valid + end + + def validate_test_runner_generation(config, include_test_case, exclude_test_case) + cmdline_args = config[:test_runner][:cmdline_args] + + # Test case filters in use + test_case_filters = !include_test_case.empty? || !exclude_test_case.empty? + + # Test case filters are in use but test runner command line arguments are not enabled + if (test_case_filters and !cmdline_args) + msg = 'Test case filters cannot be used -- enable :test_runner ↳ :cmdline_args in your project configuration' + @loginator.log( msg, Verbosity::ERRORS ) + return false end - return false if (validation.include?(false)) return true end + def validate_test_preprocessor(config) + valid = true + + options = [:none, :all, :tests, :mocks] + + use_test_preprocessor = config[:project][:use_test_preprocessor] + + if !options.include?( use_test_preprocessor ) + msg = ":project ↳ :use_test_preprocessor is :'#{use_test_preprocessor}' but must be one of #{options.map{|o| ':' + o.to_s()}.join(', ')}" + @loginator.log( msg, Verbosity::ERRORS ) + valid = false + end + + return valid + end + + def validate_backtrace(config) + valid = true + + options = [:none, :simple, :gdb] + + use_backtrace = config[:project][:use_backtrace] + + if !options.include?( use_backtrace ) + msg = ":project ↳ :use_backtrace is :'#{use_backtrace}' but must be one of #{options.map{|o| ':' + o.to_s()}.join(', ')}" + @loginator.log( msg, Verbosity::ERRORS ) + valid = false + end + + return valid + end + + def validate_threads(config) + valid = true + + compile_threads = config[:project][:compile_threads] + test_threads = config[:project][:test_threads] + + case compile_threads + when Integer + if compile_threads < 1 + @loginator.log( ":project ↳ :compile_threads must be greater than 0", Verbosity::ERRORS ) + valid = false + end + when Symbol + if compile_threads != :auto + @loginator.log( ":project ↳ :compile_threads is neither an integer nor :auto", Verbosity::ERRORS ) + valid = false + end + else + @loginator.log( ":project ↳ :compile_threads is neither an integer nor :auto", Verbosity::ERRORS ) + valid = false + end + + case test_threads + when Integer + if test_threads < 1 + @loginator.log( ":project ↳ :test_threads must be greater than 0", Verbosity::ERRORS ) + valid = false + end + when Symbol + if test_threads != :auto + @loginator.log( ":project ↳ :test_threads is neither an integer nor :auto", Verbosity::ERRORS ) + valid = false + end + else + @loginator.log( ":project ↳ :test_threads is neither an integer nor :auto", Verbosity::ERRORS ) + valid = false + end + + return valid + end + def validate_plugins(config) missing_plugins = Set.new( config[:plugins][:enabled] ) - Set.new( @configurator_plugins.rake_plugins ) - - Set.new( @configurator_plugins.script_plugins ) + Set.new( @configurator_plugins.programmatic_plugins.map {|p| p[:plugin]} ) missing_plugins.each do |plugin| - @stream_wrapper.stderr_puts("ERROR: Ceedling plugin '#{plugin}' contains no rake or ruby class entry point. (Misspelled or missing files?)") + message = "Plugin '#{plugin}' not found in built-in or project Ruby load paths. Check load paths and plugin naming and path conventions." + @loginator.log( message, Verbosity::ERRORS ) end return ( (missing_plugins.size > 0) ? false : true ) diff --git a/tools/vendor/ceedling/lib/ceedling/configurator_validator.rb b/tools/vendor/ceedling/lib/ceedling/configurator_validator.rb index f362f6ba..1053cc07 100644 --- a/tools/vendor/ceedling/lib/ceedling/configurator_validator.rb +++ b/tools/vendor/ceedling/lib/ceedling/configurator_validator.rb @@ -1,50 +1,52 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + require 'rubygems' require 'rake' # for ext() require 'ceedling/constants' -require 'ceedling/tool_executor' # for argument replacement pattern require 'ceedling/file_path_utils' # for glob handling class methods class ConfiguratorValidator - constructor :file_wrapper, :stream_wrapper, :system_wrapper + constructor :config_walkinator, :file_wrapper, :loginator, :system_wrapper, :reportinator, :tool_validator - # walk into config hash verify existence of data at key depth + # Walk into config hash verify existence of data at key depth def exists?(config, *keys) - hash = retrieve_value(config, keys) - exist = !hash[:value].nil? + hash, _ = @config_walkinator.fetch_value( *keys, hash:config ) + exist = !hash.nil? if (not exist) - # no verbosity checking since this is lowest level anyhow & verbosity checking depends on configurator - @stream_wrapper.stderr_puts("ERROR: Required config file entry #{format_key_sequence(keys, hash[:depth])} does not exist.") + walk = @reportinator.generate_config_walk( keys ) + @loginator.log( "Required config file entry #{walk} does not exist.", Verbosity::ERRORS ) end return exist end - - # walk into config hash. verify directory path(s) at given key depth + # Walk into config hash. verify existence of path(s) at given key depth. + # Paths are either full simple paths or a simple portion of a path up to a glob. def validate_path_list(config, *keys) - hash = retrieve_value(config, keys) - list = hash[:value] + exist = true + list, depth = @config_walkinator.fetch_value( *keys, hash:config ) - # return early if we couldn't walk into hash and find a value + # Return early if we couldn't walk into hash and find a value return false if (list.nil?) - - path_list = [] - exist = true - - case list - when String then path_list << list - when Array then path_list = list - end - path_list.each do |path| - base_path = FilePathUtils::extract_path(path) # lop off add/subtract notation & glob specifiers - - if (not @file_wrapper.exist?(base_path)) - # no verbosity checking since this is lowest level anyhow & verbosity checking depends on configurator - @stream_wrapper.stderr_puts("ERROR: Config path #{format_key_sequence(keys, hash[:depth])}['#{base_path}'] does not exist on disk.") + list.each do |path| + # Trim add/subtract notation & glob specifiers + _path = FilePathUtils::no_decorators( path ) + + next if _path.empty? # Path begins with or is entirely a glob, skip it + + # If (partial) path does not exist, complain + if (not @file_wrapper.exist?( _path )) + walk = @reportinator.generate_config_walk( keys, depth ) + @loginator.log( "Config path #{walk} => '#{_path}' does not exist in the filesystem.", Verbosity::ERRORS ) exist = false end end @@ -52,142 +54,121 @@ def validate_path_list(config, *keys) return exist end - - # simple path verification - def validate_filepath_simple(path, *keys) - validate_path = path - - if (not @file_wrapper.exist?(validate_path)) - # no verbosity checking since this is lowest level anyhow & verbosity checking depends on configurator - @stream_wrapper.stderr_puts("ERROR: Config path '#{validate_path}' associated with #{format_key_sequence(keys, keys.size)} does not exist on disk.") - return false - end - - return true - end - - # walk into config hash. verify specified file exists. - def validate_filepath(config, *keys) - hash = retrieve_value(config, keys) - filepath = hash[:value] - # return early if we couldn't walk into hash and find a value - return false if (filepath.nil?) + # Validate :paths entries, exercising each entry as Ceedling directory glob (variation of Ruby glob) + def validate_paths_entries(config, key) + valid = true + keys = [:paths, key] + walk = @reportinator.generate_config_walk( keys ) - # skip everything if we've got an argument replacement pattern - return true if (filepath =~ TOOL_EXECUTOR_ARGUMENT_REPLACEMENT_PATTERN) - - if (not @file_wrapper.exist?(filepath)) - - # See if we can deal with it internally. - if GENERATED_DIR_PATH.include?(filepath) - # we already made this directory before let's make it again. - FileUtils.mkdir_p File.join(File.dirname(__FILE__), filepath) - @stream_wrapper.stderr_puts("WARNING: Generated filepath #{format_key_sequence(keys, hash[:depth])}['#{filepath}'] does not exist on disk. Recreating") - - else - # no verbosity checking since this is lowest level anyhow & verbosity checking depends on configurator - @stream_wrapper.stderr_puts("ERROR: Config filepath #{format_key_sequence(keys, hash[:depth])}['#{filepath}'] does not exist on disk.") - return false - end - end + list, _ = @config_walkinator.fetch_value( *keys, hash:config ) - return true - end + # Return early if we couldn't walk into hash and find a value + return false if (list.nil?) + + list.each do |path| + dirs = [] # Working list - # walk into config hash. verify specified file exists. - def validate_executable_filepath(config, *keys) - exe_extension = config[:extension][:executable] - hash = retrieve_value(config, keys) - filepath = hash[:value] + # Trim add/subtract notation + _path = FilePathUtils::no_aggregation_decorators( path ) - # return early if we couldn't walk into hash and find a value - return false if (filepath.nil?) + if @file_wrapper.exist?( _path ) and !@file_wrapper.directory?( _path ) + # Path is a simple filepath (not a directory) + warning = "#{walk} => '#{_path}' is a filepath and will be ignored (FYI :paths is directory-oriented while :files is file-oriented)" + @loginator.log( warning, Verbosity::COMPLAIN ) - # skip everything if we've got an argument replacement pattern - return true if (filepath =~ TOOL_EXECUTOR_ARGUMENT_REPLACEMENT_PATTERN) - - # if there's no path included, verify file exists somewhere in system search paths - if (not filepath.include?('/')) - exists = false - - @system_wrapper.search_paths.each do |path| - if (@file_wrapper.exist?( File.join(path, filepath)) ) - exists = true - break - end - - if (@file_wrapper.exist?( (File.join(path, filepath)).ext( exe_extension ) )) - exists = true - break - elsif (@system_wrapper.windows? and @file_wrapper.exist?( (File.join(path, filepath)).ext( EXTENSION_WIN_EXE ) )) - exists = true - break - end + next # Skip to next path end - - if (not exists) - # no verbosity checking since this is lowest level anyhow & verbosity checking depends on configurator - @stream_wrapper.stderr_puts("ERROR: Config filepath #{format_key_sequence(keys, hash[:depth])}['#{filepath}'] does not exist in system search paths.") - return false + + # Expand paths using Ruby's Dir.glob() + # - A simple path will yield that path + # - A path glob will expand to one or more paths + _reformed = FilePathUtils::reform_subdirectory_glob( _path ) + @file_wrapper.directory_listing( _reformed ).each do |entry| + # For each result, add it to the working list *if* it's a directory + dirs << entry if @file_wrapper.directory?(entry) end - # if there is a path included, check that explicit filepath exists - else - if (not @file_wrapper.exist?(filepath)) - # no verbosity checking since this is lowest level anyhow & verbosity checking depends on configurator - @stream_wrapper.stderr_puts("ERROR: Config filepath #{format_key_sequence(keys, hash[:depth])}['#{filepath}'] does not exist on disk.") - return false - end - end - - return true - end - - def validate_tool_stderr_redirect(config, tools, tool) - redirect = config[tools][tool][:stderr_redirect] - if (redirect.class == Symbol) - # map constants and force to array of strings for runtime universality across ruby versions - if (not StdErrRedirect.constants.map{|constant| constant.to_s}.include?(redirect.to_s.upcase)) - error = "ERROR: [:#{tools}][:#{tool}][:stderr_redirect][:#{redirect}] is not a recognized option " + - "{#{StdErrRedirect.constants.map{|constant| ':' + constant.to_s.downcase}.join(', ')}}." - @stream_wrapper.stderr_puts(error) - return false + # Handle edge case of subdirectories glob but not subdirectories + # (Containing parent directory will still exist) + next if dirs.empty? and _path =~ /\/\*{1,2}$/ + + # Path did not work -- must be malformed glob or glob referencing path that does not exist. + # (An earlier step validates all simple directory paths). + if dirs.empty? + error = "#{walk} => '#{_path}' yielded no directories -- matching glob is malformed or directories do not exist" + @loginator.log( error, Verbosity::ERRORS ) + valid = false end end - return true + return valid end - - private ######################################### - - - def retrieve_value(config, keys) - value = nil - hash = config - depth = 0 - - # walk into hash & extract value at requested key sequence - keys.each do |symbol| - depth += 1 - if (not hash[symbol].nil?) - hash = hash[symbol] - value = hash - else - value = nil - break - end + + + # Validate :files entries, exercising each entry as FileList glob + def validate_files_entries(config, key) + valid = true + keys = [:files, key] + walk = @reportinator.generate_config_walk( keys ) + + list, _ = @config_walkinator.fetch_value( *keys, hash:config ) + + # Return early if we couldn't walk into hash and find a value + return false if (list.nil?) + + list.each do |path| + # Trim add/subtract notation + _path = FilePathUtils::no_aggregation_decorators( path ) + + if @file_wrapper.exist?( _path ) and @file_wrapper.directory?( _path ) + # Path is a simple directory path (and is naturally ignored by FileList without a glob pattern) + warning = "#{walk} => '#{_path}' is a directory path and will be ignored (FYI :files is file-oriented while :paths is directory-oriented)" + @loginator.log( warning, Verbosity::COMPLAIN ) + + next # Skip to next path + end + + filelist = @file_wrapper.instantiate_file_list(_path) + + # If file list is empty, complain + if (filelist.size == 0) + error = "#{walk} => '#{_path}' yielded no files -- matching glob is malformed or files do not exist" + @loginator.log( error, Verbosity::ERRORS ) + valid = false + end end - return {:value => value, :depth => depth} + return valid end - def format_key_sequence(keys, depth) - walked_keys = keys.slice(0, depth) - formatted_keys = walked_keys.map{|key| "[:#{key}]"} + # Simple path verification + def validate_filepath_simple(path, *keys) + validate_path = path - return formatted_keys.join + if (not @file_wrapper.exist?(validate_path)) + walk = @reportinator.generate_config_walk( keys, keys.size ) + @loginator.log("Config path '#{validate_path}' associated with #{walk} does not exist in the filesystem.", Verbosity::ERRORS ) + return false + end + + return true end + + def validate_tool(config:, key:, respect_optional:true) + # Get tool + walk = [:tools, key] + tool, _ = @config_walkinator.fetch_value( *walk, hash:config ) + + arg_hash = { + tool: tool, + name: @reportinator.generate_config_walk( walk ), + extension: config[:extension][:executable], + respect_optional: respect_optional + } + return @tool_validator.validate( **arg_hash ) + end + end diff --git a/tools/vendor/ceedling/lib/ceedling/constants.rb b/tools/vendor/ceedling/lib/ceedling/constants.rb index 8d5fadfd..8f505176 100644 --- a/tools/vendor/ceedling/lib/ceedling/constants.rb +++ b/tools/vendor/ceedling/lib/ceedling/constants.rb @@ -1,13 +1,55 @@ - +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + +# Logging verbosity levels class Verbosity - SILENT = 0 # as silent as possible (though there are some messages that must be spit out) - ERRORS = 1 # only errors - COMPLAIN = 2 # spit out errors and warnings/notices - NORMAL = 3 # errors, warnings/notices, standard status messages - OBNOXIOUS = 4 # all messages including extra verbose output (used for lite debugging / verification) - DEBUG = 5 # special extra verbose output for hardcore debugging + SILENT = 0 # As silent as possible (though there are some messages that must be spit out) + ERRORS = 1 # Only errors + COMPLAIN = 2 # Spit out errors and warnings/notices + NORMAL = 3 # Errors, warnings/notices, standard status messages + OBNOXIOUS = 4 # All messages including extra verbose output (used for lite debugging / verification) + DEBUG = 5 # Special extra verbose output for hardcore debugging +end + +VERBOSITY_OPTIONS = { + :silent => Verbosity::SILENT, + :errors => Verbosity::ERRORS, + :warnings => Verbosity::COMPLAIN, + :normal => Verbosity::NORMAL, + :obnoxious => Verbosity::OBNOXIOUS, + :debug => Verbosity::DEBUG, +}.freeze() + +# Label + decorator options for logging +class LogLabels + NONE = 0 # Override logic and settings with no label and no decoration + AUTO = 1 # Default labeling and decorators + NOTICE = 2 # decorator + 'NOTICE:' + WARNING = 3 # decorator + 'WARNING:' + ERROR = 4 # decorator + 'ERROR:' + EXCEPTION = 5 # decorator + 'EXCEPTION:' + CONSTRUCT = 6 # decorator only + RUN = 7 # decorator only + CRASH = 8 # decorator only + PASS = 9 # decorator only + FAIL = 10 # decorator only + TITLE = 11 # decorator only + + # Verbosity levels ERRORS – DEBUG default to certain labels or lack thereof + # The above label constants are available to override Loginator's default AUTO level as needed + # See Loginator comments end +class DurationCounts + DAY_MS = (24 * 60 * 60 * 1000) + HOUR_MS = (60 * 60 * 1000) + MINUTE_MS = (60 * 1000) + SECOND_MS = (1000) +end class TestResultsSanityChecks NONE = 0 # no sanity checking of test results @@ -15,7 +57,6 @@ class TestResultsSanityChecks THOROUGH = 2 # perform checks that require inside knowledge of system workings end - class StdErrRedirect NONE = :none AUTO = :auto @@ -24,16 +65,19 @@ class StdErrRedirect TCSH = :tcsh end +GIT_COMMIT_SHA_FILENAME = 'GIT_COMMIT_SHA' -unless defined?(PROJECT_ROOT) - PROJECT_ROOT = Dir.pwd() -end +# Escaped newline literal (literally double-slash-n) for "encoding" multiline strings as single string +NEWLINE_TOKEN = '\\n' -GENERATED_DIR_PATH = [['vendor', 'ceedling'], 'src', "test", ['test', 'support'], 'build'].each{|p| File.join(*p)} +DEFAULT_PROJECT_FILENAME = 'project.yml' -EXTENSION_WIN_EXE = '.exe' -EXTENSION_NONWIN_EXE = '.out' +GENERATED_DIR_PATH = [['vendor', 'ceedling'], 'src', "test", ['test', 'support'], 'build'].each{|p| File.join(*p)} +EXTENSION_WIN_EXE = '.exe' +EXTENSION_NONWIN_EXE = '.out' +# Vendor frameworks, generated mocks, generated runners are always .c files +EXTENSION_CORE_SOURCE = '.c' PREPROCESS_SYM = :preprocess @@ -54,15 +98,17 @@ class StdErrRedirect UNITY_TEST_SOURCE_FILE = 'TEST_SOURCE_FILE' UNITY_TEST_INCLUDE_PATH = 'TEST_INCLUDE_PATH' +RUNNER_BUILD_CMDLINE_ARGS_DEFINE = 'UNITY_USE_COMMAND_LINE_ARGS' + CMOCK_SYM = :cmock CMOCK_ROOT_PATH = 'cmock' CMOCK_LIB_PATH = "#{CMOCK_ROOT_PATH}/src" CMOCK_C_FILE = 'cmock.c' CMOCK_H_FILE = 'cmock.h' +DEFAULT_CEEDLING_LOGFILE = 'ceedling.log' -DEFAULT_CEEDLING_MAIN_PROJECT_FILE = 'project.yml' unless defined?(DEFAULT_CEEDLING_MAIN_PROJECT_FILE) # main project file -DEFAULT_CEEDLING_USER_PROJECT_FILE = 'user.yml' unless defined?(DEFAULT_CEEDLING_USER_PROJECT_FILE) # supplemental user config file +BACKTRACE_GDB_SCRIPT_FILE = 'backtrace.gdb' INPUT_CONFIGURATION_CACHE_FILE = 'input.yml' unless defined?(INPUT_CONFIGURATION_CACHE_FILE) # input configuration file dump DEFINES_DEPENDENCY_CACHE_FILE = 'defines_dependency.yml' unless defined?(DEFINES_DEPENDENCY_CACHE_FILE) # preprocessor definitions for files @@ -75,10 +121,6 @@ class StdErrRedirect RELEASE_TASK_ROOT = RELEASE_ROOT_NAME + ':' unless defined?(RELEASE_TASK_ROOT) RELEASE_SYM = RELEASE_ROOT_NAME.to_sym unless defined?(RELEASE_SYM) -REFRESH_ROOT_NAME = 'refresh' unless defined?(REFRESH_ROOT_NAME) -REFRESH_TASK_ROOT = REFRESH_ROOT_NAME + ':' unless defined?(REFRESH_TASK_ROOT) -REFRESH_SYM = REFRESH_ROOT_NAME.to_sym unless defined?(REFRESH_SYM) - UTILS_ROOT_NAME = 'utils' unless defined?(UTILS_ROOT_NAME) UTILS_TASK_ROOT = UTILS_ROOT_NAME + ':' unless defined?(UTILS_TASK_ROOT) UTILS_SYM = UTILS_ROOT_NAME.to_sym unless defined?(UTILS_SYM) @@ -88,6 +130,8 @@ class StdErrRedirect OPERATION_LINK_SYM = :link unless defined?(OPERATION_LINK_SYM) +# Match presence of any glob pattern characters +GLOB_PATTERN = /[\*\?\{\}\[\]]/ RUBY_STRING_REPLACEMENT_PATTERN = /#\{.+\}/ RUBY_EVAL_REPLACEMENT_PATTERN = /^\{(.+)\}$/ TOOL_EXECUTOR_ARGUMENT_REPLACEMENT_PATTERN = /(\$\{(\d+)\})/ @@ -99,3 +143,16 @@ class StdErrRedirect RELEASE_BASE_PATH = RELEASE_ROOT_NAME VENDORS_FILES = %w(unity UnityHelper cmock CException).freeze + +# Ruby Here +UNITY_TEST_RESULTS_TEMPLATE = <<~UNITY_TEST_RESULTS + %{output} + + ----------------------- + %{total} Tests %{failed} Failures %{ignored} Ignored + %{result} +UNITY_TEST_RESULTS + + + + diff --git a/tools/vendor/ceedling/lib/ceedling/debugger_utils.rb b/tools/vendor/ceedling/lib/ceedling/debugger_utils.rb deleted file mode 100644 index 6975b31f..00000000 --- a/tools/vendor/ceedling/lib/ceedling/debugger_utils.rb +++ /dev/null @@ -1,218 +0,0 @@ -# The debugger utils class, -# Store functions and variables helping to parse debugger output and -# prepare output understandable by report generators -class DebuggerUtils - constructor :configurator, - :tool_executor, - :unity_utils - - def setup - @new_line_tag = '$$$' - @colon_tag = '!!!' - @command_line = nil - @test_result_collector_struct = Struct.new(:passed, :failed, :ignored, - :output, keyword_init: true) - end - - # Copy original command line generated from @tool_executor.build_command_line - # to use command line without command line extra args not needed by debugger - # - # @param [hash, #command] - Command line generated from @tool_executor.build_command_line - def configure_debugger(command) - # Make a clone of clean command hash - # for further calls done for collecting segmentation fault - if @configurator.project_config_hash[:project_use_backtrace_gdb_reporter] && - @configurator.project_config_hash[:test_runner_cmdline_args] - @command_line = command.clone - elsif @configurator.project_config_hash[:project_use_backtrace_gdb_reporter] - # If command_lines are not enabled, do not clone but create reference to command - # line - @command_line = command - end - end - - # Execute test_runner file under gdb and return: - # - output -> stderr and stdout - # - time -> execution of single test - # - # @param [hash, #command] - Command line generated from @tool_executor.build_command_line - # @return [String, #output] - output from binary execution - # @return [Float, #time] - time execution of the binary file - def collect_cmd_output_with_gdb(command, cmd, test_case=nil) - gdb_file_name = @configurator.project_config_hash[:tools_backtrace_settings][:executable] - gdb_extra_args = @configurator.project_config_hash[:tools_backtrace_settings][:arguments] - gdb_extra_args = gdb_extra_args.join(' ') - - gdb_exec_cmd = "#{gdb_file_name} #{gdb_extra_args} #{cmd}" - crash_result = @tool_executor.exec(gdb_exec_cmd, command[:options]) - if (crash_result[:exit_code] == 0) and (crash_result[:output] =~ /(?:PASS|FAIL|IGNORE)/) - [crash_result[:output], crash_result[:time].to_f] - else - ["#{gdb_file_name.split(/\w+/)[0]}:1:#{test_case || 'test_Unknown'}:FAIL:#{crash_result[:output]}", 0.0] - end - end - - # Collect list of test cases from test_runner - # and apply filters basing at passed : - # --test_case - # --exclude_test_case - # input arguments - # - # @param [hash, #command] - Command line generated from @tool_executor.build_command_line - # @return Array - list of the test_cases defined in test_file_runner - def collect_list_of_test_cases(command) - all_test_names = command[:line] + @unity_utils.additional_test_run_args('', 'list_test_cases') - test_list = @tool_executor.exec(all_test_names, command[:options]) - test_runner_tc = test_list[:output].split("\n").drop(1) - - # Clean collected test case names - # Filter tests which contain test_case_name passed by `--test_case` argument - if ENV['CEEDLING_INCLUDE_TEST_CASE_NAME'] - test_runner_tc.delete_if { |i| !(i =~ /#{ENV['CEEDLING_INCLUDE_TEST_CASE_NAME']}/) } - end - - # Filter tests which contain test_case_name passed by `--exclude_test_case` argument - if ENV['CEEDLING_EXCLUDE_TEST_CASE_NAME'] - test_runner_tc.delete_if { |i| i =~ /#{ENV['CEEDLING_EXCLUDE_TEST_CASE_NAME']}/ } - end - - test_runner_tc - end - - # Update stderr output stream to auto, to collect segmentation fault for - # test execution with gcov tool - # - # @param [hash, #command] - Command line generated from @tool_executor.build_command_line - def enable_gcov_with_gdb_and_cmdargs(command) - if @configurator.project_config_hash[:project_use_backtrace_gdb_reporter] && - @configurator.project_config_hash[:test_runner_cmdline_args] - command[:options][:stderr_redirect] = if [:none, StdErrRedirect::NONE].include? @configurator.project_config_hash[:tools_backtrace_settings][:stderr_redirect] - DEFAULT_BACKTRACE_TOOL[:stderr_redirect] - else - @configurator.project_config_hash[:tools_backtrace_settings][:stderr_redirect] - end - end - end - - # Support function to collect backtrace from gdb. - # If test_runner_cmdline_args is set, function it will try to run each of test separately - # and create output String similar to non segmentation fault execution but with notification - # test with segmentation fault as failure - # - # @param [hash, #shell_result] - output shell created by calling @tool_executor.exec - # @return hash - updated shell_result passed as argument - def gdb_output_collector(shell_result) - test_case_result_collector = @test_result_collector_struct.new( - passed: 0, - failed: 0, - ignored: 0, - output: [] - ) - - # Reset time - shell_result[:time] = 0 - - test_case_list_to_execute = collect_list_of_test_cases(@command_line) - test_case_list_to_execute.each do |test_case_name| - test_run_cmd = @command_line.clone - test_run_cmd_with_args = test_run_cmd[:line] + @unity_utils.additional_test_run_args(test_case_name, 'test_case') - test_output, exec_time = collect_cmd_output_with_gdb(test_run_cmd, test_run_cmd_with_args, test_case_name) - - # Concatenate execution time between tests - # running tests serpatatelly might increase total execution time - shell_result[:time] += exec_time - - # Concatenate test results from single test runs, which not crash - # to create proper output for further parser - if test_output =~ /([\S]+):(\d+):([\S]+):(IGNORE|PASS|FAIL:)(.*)/ - test_output = "#{Regexp.last_match(1)}:#{Regexp.last_match(2)}:#{Regexp.last_match(3)}:#{Regexp.last_match(4)}#{Regexp.last_match(5)}" - if test_output =~ /:PASS/ - test_case_result_collector[:passed] += 1 - elsif test_output =~ /:IGNORE/ - test_case_result_collector[:ignored] += 1 - elsif test_output =~ /:FAIL:/ - test_case_result_collector[:failed] += 1 - end - else - # <-- Parse Segmentatation Fault output section --> - - # Withdraw test_name from gdb output - test_name = if test_output =~ /<(.*)>/ - Regexp.last_match(1) - else - '' - end - - # Collect file_name and line in which Segmentation fault have his beginning - if test_output =~ /#{test_name}\s\(\)\sat\s(.*):(\d+)\n/ - # Remove path from file_name - file_name = Regexp.last_match(1).to_s.split('/').last.split('\\').last - # Save line number - line = Regexp.last_match(2) - - # Replace: - # - '\n' by @new_line_tag to make gdb output flat - # - ':' by @colon_tag to avoid test results problems - # to enable parsing output for default generator_test_results regex - test_output = test_output.gsub("\n", @new_line_tag).gsub(':', @colon_tag) - test_output = "#{file_name}:#{line}:#{test_name}:FAIL: #{test_output}" - end - - # Mark test as failure - test_case_result_collector[:failed] += 1 - end - test_case_result_collector[:output].append("#{test_output}\r\n") - end - - template = "\n-----------------------\n" \ - "\n#{(test_case_result_collector[:passed] + \ - test_case_result_collector[:failed] + \ - test_case_result_collector[:ignored])} " \ - "Tests #{test_case_result_collector[:failed]} " \ - "Failures #{test_case_result_collector[:ignored]} Ignored\n\n" - - template += if test_case_result_collector[:failed] > 0 - "FAIL\n" - else - "OK\n" - end - shell_result[:output] = test_case_result_collector[:output].join('') + template - - shell_result - end - - # Restore new line under flatten log - # - # @param(String, #text) - string containing flatten output log - # @return [String, #output] - output with restored new line character - def restore_new_line_character_in_flatten_log(text) - if @configurator.project_config_hash[:project_use_backtrace_gdb_reporter] && - @configurator.project_config_hash[:test_runner_cmdline_args] - text = text.gsub(@new_line_tag, "\n") - end - text - end - - # Restore colon character under flatten log - # - # @param(String, #text) - string containing flatten output log - # @return [String, #output] - output with restored colon character - def restore_colon_character_in_flatten_log(text) - if @configurator.project_config_hash[:project_use_backtrace_gdb_reporter] && - @configurator.project_config_hash[:test_runner_cmdline_args] - text = text.gsub(@colon_tag, ':') - end - text - end - - # Unflat segmentation fault log - # - # @param(String, #text) - string containing flatten output log - # @return [String, #output] - output with restored colon and new line character - def unflat_debugger_log(text) - text = restore_new_line_character_in_flatten_log(text) - text = restore_colon_character_in_flatten_log(text) - text = text.gsub('"',"'") # Replace " character by ' for junit_xml reporter - text - end -end diff --git a/tools/vendor/ceedling/lib/ceedling/defaults.rb b/tools/vendor/ceedling/lib/ceedling/defaults.rb index ad7b2777..9ae6e0f6 100644 --- a/tools/vendor/ceedling/lib/ceedling/defaults.rb +++ b/tools/vendor/ceedling/lib/ceedling/defaults.rb @@ -1,18 +1,25 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + require 'ceedling/constants' require 'ceedling/system_wrapper' require 'ceedling/file_path_utils' -#this should be defined already, but not always during system specs -CEEDLING_VENDOR = File.expand_path(File.dirname(__FILE__) + '/../../vendor') unless defined? CEEDLING_VENDOR +# Assign a default value for system testing where CEEDLING_APPCFG may not be present +# TODO: Create code config & test structure that does not internalize a test path like this +CEEDLING_VENDOR = defined?( CEEDLING_APPCFG ) ? CEEDLING_APPCFG[:ceedling_vendor_path] : File.expand_path( File.dirname(__FILE__) + '/../../vendor' ) + CEEDLING_PLUGINS = [] unless defined? CEEDLING_PLUGINS DEFAULT_TEST_COMPILER_TOOL = { - :executable => ENV['CC'].nil? ? FilePathUtils.os_executable_ext('gcc').freeze : ENV['CC'].split[0], + :executable => ENV['TEST_CC'].nil? ? FilePathUtils.os_executable_ext('gcc').freeze : ENV['TEST_CC'], :name => 'default_test_compiler'.freeze, - :stderr_redirect => StdErrRedirect::NONE.freeze, :optional => false.freeze, :arguments => [ - ENV['CC'].nil? ? "" : ENV['CC'].split[1..-1], ENV['CPPFLAGS'].nil? ? "" : ENV['CPPFLAGS'].split, "-I\"${5}\"".freeze, # Per-test executable search paths "-D\"${6}\"".freeze, # Per-test executable defines @@ -27,40 +34,57 @@ ].freeze } +DEFAULT_TEST_ASSEMBLER_TOOL = { + :executable => ENV['TEST_AS'].nil? ? FilePathUtils.os_executable_ext('as').freeze : ENV['TEST_AS'], + :name => 'default_test_assembler'.freeze, + :optional => false.freeze, + :arguments => [ + ENV['TEST_ASFLAGS'].nil? ? "" : ENV['TEST_ASFLAGS'].split, + "-I\"${3}\"".freeze, # Search paths + # Any defines (${4}) are not included since GNU assembler ignores them + "\"${1}\"".freeze, + "-o \"${2}\"".freeze, + ].freeze + } + DEFAULT_TEST_LINKER_TOOL = { - :executable => ENV['CCLD'].nil? ? FilePathUtils.os_executable_ext('gcc').freeze : ENV['CCLD'].split[0], + :executable => ENV['TEST_CCLD'].nil? ? FilePathUtils.os_executable_ext('gcc').freeze : ENV['TEST_CCLD'], :name => 'default_test_linker'.freeze, - :stderr_redirect => StdErrRedirect::NONE.freeze, :optional => false.freeze, :arguments => [ - ENV['CCLD'].nil? ? "" : ENV['CCLD'].split[1..-1], - ENV['CFLAGS'].nil? ? "" : ENV['CFLAGS'].split, - ENV['LDFLAGS'].nil? ? "" : ENV['LDFLAGS'].split, + ENV['TEST_CFLAGS'].nil? ? "" : ENV['TEST_CFLAGS'].split, + ENV['TEST_LDFLAGS'].nil? ? "" : ENV['TEST_LDFLAGS'].split, "${1}".freeze, "${5}".freeze, "-o \"${2}\"".freeze, "".freeze, "${4}".freeze, - ENV['LDLIBS'].nil? ? "" : ENV['LDLIBS'].split + ENV['TEST_LDLIBS'].nil? ? "" : ENV['TEST_LDLIBS'].split ].freeze } DEFAULT_TEST_FIXTURE_TOOL = { - :executable => '${1}'.freeze, + :executable => '${1}'.freeze, # Unity test runner executable :name => 'default_test_fixture'.freeze, - :stderr_redirect => StdErrRedirect::AUTO.freeze, :optional => false.freeze, :arguments => [].freeze } +DEFAULT_TEST_FIXTURE_SIMPLE_BACKTRACE_TOOL = { + :executable => '${1}'.freeze, # Unity test runner executable + :name => 'default_test_fixture_simple_backtrace'.freeze, + :optional => false.freeze, + :arguments => [ + '-n ${2}'.freeze # Exact test case name matching flag + ].freeze + } + DEFAULT_TEST_SHALLOW_INCLUDES_PREPROCESSOR_TOOL = { - :executable => ENV['CC'].nil? ? FilePathUtils.os_executable_ext('gcc').freeze : ENV['CC'].split[0], - :name => 'default_test_includes_preprocessor'.freeze, - :stderr_redirect => StdErrRedirect::NONE.freeze, + :executable => ENV['TEST_CC'].nil? ? FilePathUtils.os_executable_ext('gcc').freeze : ENV['TEST_CC'], + :name => 'default_test_shallow_includes_preprocessor'.freeze, :optional => false.freeze, :arguments => [ - ENV['CC'].nil? ? "" : ENV['CC'].split[1..-1], - ENV['CPPFLAGS'].nil? ? "" : ENV['CPPFLAGS'].split, + ENV['TEST_CPPFLAGS'].nil? ? "" : ENV['TEST_CPPFLAGS'].split, '-E'.freeze, # Run only through preprocessor stage with its output '-MM'.freeze, # Output make rule + suppress header files found in system header directories '-MG'.freeze, # Assume missing header files are generated files (do not discard) @@ -68,18 +92,17 @@ "-D\"${2}\"".freeze, # Per-test executable defines "-DGNU_COMPILER".freeze, # OSX clang '-nostdinc'.freeze, # Ignore standard include paths + "-x c".freeze, # Force C language "\"${1}\"".freeze ].freeze } DEFAULT_TEST_NESTED_INCLUDES_PREPROCESSOR_TOOL = { - :executable => ENV['CC'].nil? ? FilePathUtils.os_executable_ext('gcc').freeze : ENV['CC'].split[0], - :name => 'default_test_includes_preprocessor'.freeze, - :stderr_redirect => StdErrRedirect::NONE.freeze, + :executable => ENV['TEST_CC'].nil? ? FilePathUtils.os_executable_ext('gcc').freeze : ENV['TEST_CC'], + :name => 'default_test_nested_includes_preprocessor'.freeze, :optional => false.freeze, :arguments => [ - ENV['CC'].nil? ? "" : ENV['CC'].split[1..-1], - ENV['CPPFLAGS'].nil? ? "" : ENV['CPPFLAGS'].split, + ENV['TEST_CPPFLAGS'].nil? ? "" : ENV['TEST_CPPFLAGS'].split, '-E'.freeze, # Run only through preprocessor stage with its output '-MM'.freeze, # Output make rule + suppress header files found in system header directories '-MG'.freeze, # Assume missing header files are generated files (do not discard) @@ -88,40 +111,23 @@ "-D\"${3}\"".freeze, # Per-test executable defines "-DGNU_COMPILER".freeze, # OSX clang '-nostdinc'.freeze, # Ignore standard include paths + "-x c".freeze, # Force C language "\"${1}\"".freeze ].freeze } DEFAULT_TEST_FILE_PREPROCESSOR_TOOL = { - :executable => ENV['CC'].nil? ? FilePathUtils.os_executable_ext('gcc').freeze : ENV['CC'].split[0], + :executable => ENV['TEST_CC'].nil? ? FilePathUtils.os_executable_ext('gcc').freeze : ENV['TEST_CC'], :name => 'default_test_file_preprocessor'.freeze, - :stderr_redirect => StdErrRedirect::NONE.freeze, :optional => false.freeze, :arguments => [ - ENV['CC'].nil? ? "" : ENV['CC'].split[1..-1], - ENV['CPPFLAGS'].nil? ? "" : ENV['CPPFLAGS'].split, + ENV['TEST_CPPFLAGS'].nil? ? "" : ENV['TEST_CPPFLAGS'].split, '-E'.freeze, "-I\"${4}\"".freeze, # Per-test executable search paths "-D\"${3}\"".freeze, # Per-test executable defines "-DGNU_COMPILER".freeze, # OSX clang # '-nostdinc'.freeze, # disabled temporarily due to stdio access violations on OSX - "\"${1}\"".freeze, - "-o \"${2}\"".freeze - ].freeze - } - -DEFAULT_TEST_FILE_PREPROCESSOR_DIRECTIVES_TOOL = { - :executable => FilePathUtils.os_executable_ext('gcc').freeze, - :name => 'default_test_file_preprocessor_directives'.freeze, - :stderr_redirect => StdErrRedirect::NONE.freeze, - :optional => false.freeze, - :arguments => [ - '-E'.freeze, - "-I\"${4}\"".freeze, # Per-test executable search paths - "-D\"${3}\"".freeze, # Per-test executable defines - "-DGNU_COMPILER".freeze, - '-fdirectives-only'.freeze, - # '-nostdinc'.freeze, # disabled temporarily due to stdio access violations on OSX + "-x c".freeze, # Force C language "\"${1}\"".freeze, "-o \"${2}\"".freeze ].freeze @@ -135,13 +141,11 @@ end DEFAULT_TEST_DEPENDENCIES_GENERATOR_TOOL = { - :executable => ENV['CC'].nil? ? FilePathUtils.os_executable_ext('gcc').freeze : ENV['CC'].split[0], + :executable => ENV['TEST_CC'].nil? ? FilePathUtils.os_executable_ext('gcc').freeze : ENV['TEST_CC'], :name => 'default_test_dependencies_generator'.freeze, - :stderr_redirect => StdErrRedirect::NONE.freeze, :optional => false.freeze, :arguments => [ - ENV['CC'].nil? ? "" : ENV['CC'].split[1..-1], - ENV['CPPFLAGS'].nil? ? "" : ENV['CPPFLAGS'].split, + ENV['TEST_CPPFLAGS'].nil? ? "" : ENV['TEST_CPPFLAGS'].split, '-E'.freeze, "-I\"${5}\"".freeze, # Per-test executable search paths "-D\"${4}\"".freeze, # Per-test executable defines @@ -151,19 +155,18 @@ MD_FLAG.freeze, '-MG'.freeze, "-MF \"${2}\"".freeze, + "-x c".freeze, # Force C language "-c \"${1}\"".freeze, # '-nostdinc'.freeze, ].freeze } DEFAULT_RELEASE_DEPENDENCIES_GENERATOR_TOOL = { - :executable => ENV['CC'].nil? ? FilePathUtils.os_executable_ext('gcc').freeze : ENV['CC'].split[0], + :executable => ENV['RELEASE_CC'].nil? ? FilePathUtils.os_executable_ext('gcc').freeze : ENV['RELEASE_CC'], :name => 'default_release_dependencies_generator'.freeze, - :stderr_redirect => StdErrRedirect::NONE.freeze, :optional => false.freeze, :arguments => [ - ENV['CC'].nil? ? "" : ENV['CC'].split[1..-1], - ENV['CPPFLAGS'].nil? ? "" : ENV['CPPFLAGS'].split, + ENV['RELEASE_CPPFLAGS'].nil? ? "" : ENV['RELEASE_CPPFLAGS'].split, '-E'.freeze, {"-I\"$\"" => 'COLLECTION_PATHS_SOURCE_INCLUDE_VENDOR'}.freeze, {"-I\"$\"" => 'COLLECTION_PATHS_RELEASE_TOOLCHAIN_INCLUDE'}.freeze, @@ -175,23 +178,22 @@ MD_FLAG.freeze, '-MG'.freeze, "-MF \"${2}\"".freeze, + "-x c".freeze, # Force C language "-c \"${1}\"".freeze, # '-nostdinc'.freeze, ].freeze } DEFAULT_RELEASE_COMPILER_TOOL = { - :executable => ENV['CC'].nil? ? FilePathUtils.os_executable_ext('gcc').freeze : ENV['CC'].split[0], + :executable => ENV['RELEASE_CC'].nil? ? FilePathUtils.os_executable_ext('gcc').freeze : ENV['RELEASE_CC'], :name => 'default_release_compiler'.freeze, - :stderr_redirect => StdErrRedirect::NONE.freeze, :optional => false.freeze, :arguments => [ - ENV['CC'].nil? ? "" : ENV['CC'].split[1..-1], - ENV['CPPFLAGS'].nil? ? "" : ENV['CPPFLAGS'].split, + ENV['RELEASE_CPPFLAGS'].nil? ? "" : ENV['RELEASE_CPPFLAGS'].split, "-I\"${5}\"".freeze, # Search paths "-D\"${6}\"".freeze, # Defines "-DGNU_COMPILER".freeze, - ENV['CFLAGS'].nil? ? "" : ENV['CFLAGS'].split, + ENV['RELEASE_CFLAGS'].nil? ? "" : ENV['RELEASE_CFLAGS'].split, "-c \"${1}\"".freeze, "-o \"${2}\"".freeze, # gcc's list file output options are complex; no use of ${3} parameter in default config @@ -201,13 +203,11 @@ } DEFAULT_RELEASE_ASSEMBLER_TOOL = { - :executable => ENV['AS'].nil? ? FilePathUtils.os_executable_ext('as').freeze : ENV['AS'].split[0], + :executable => ENV['RELEASE_AS'].nil? ? FilePathUtils.os_executable_ext('as').freeze : ENV['RELEASE_AS'], :name => 'default_release_assembler'.freeze, - :stderr_redirect => StdErrRedirect::NONE.freeze, :optional => false.freeze, :arguments => [ - ENV['AS'].nil? ? "" : ENV['AS'].split[1..-1], - ENV['ASFLAGS'].nil? ? "" : ENV['ASFLAGS'].split, + ENV['RELEASE_ASFLAGS'].nil? ? "" : ENV['RELEASE_ASFLAGS'].split, "-I\"${3}\"".freeze, # Search paths "-D\"${4}\"".freeze, # Defines (FYI--allowed with GNU assembler but ignored) "\"${1}\"".freeze, @@ -216,44 +216,51 @@ } DEFAULT_RELEASE_LINKER_TOOL = { - :executable => ENV['CCLD'].nil? ? FilePathUtils.os_executable_ext('gcc').freeze : ENV['CCLD'].split[0], + :executable => ENV['RELEASE_CCLD'].nil? ? FilePathUtils.os_executable_ext('gcc').freeze : ENV['RELEASE_CCLD'], :name => 'default_release_linker'.freeze, - :stderr_redirect => StdErrRedirect::NONE.freeze, :optional => false.freeze, :arguments => [ - ENV['CCLD'].nil? ? "" : ENV['CCLD'].split[1..-1], - ENV['CFLAGS'].nil? ? "" : ENV['CFLAGS'].split, - ENV['LDFLAGS'].nil? ? "" : ENV['LDFLAGS'].split, + ENV['RELEASE_CFLAGS'].nil? ? "" : ENV['RELEASE_CFLAGS'].split, + ENV['RELEASE_LDFLAGS'].nil? ? "" : ENV['RELEASE_LDFLAGS'].split, "\"${1}\"".freeze, "${5}".freeze, "-o \"${2}\"".freeze, "".freeze, "${4}".freeze, - ENV['LDLIBS'].nil? ? "" : ENV['LDLIBS'].split + ENV['RELEASE_LDLIBS'].nil? ? "" : ENV['RELEASE_LDLIBS'].split ].freeze } -DEFAULT_BACKTRACE_TOOL = { - :executable => FilePathUtils.os_executable_ext('gdb').freeze, - :name => 'default_backtrace_settings'.freeze, - :stderr_redirect => StdErrRedirect::AUTO.freeze, +DEFAULT_TEST_BACKTRACE_GDB_TOOL = { + :executable => ENV['GDB'].nil? ? FilePathUtils.os_executable_ext('gdb').freeze : ENV['GDB'], + :name => 'default_test_backtrace_gdb'.freeze, + # Must be optional because validation is contingent on backtrace configuration. + # (Don't break a build if `gdb` is unavailable but backtrace does not require it.) :optional => true.freeze, :arguments => [ - '-q', - '--eval-command run', - '--eval-command backtrace', - '--batch', - '--args' + '-q'.freeze, + '--batch'.freeze, + '--eval-command run'.freeze, + "--command \"${1}\"".freeze, # Debug script file to run + '--args'.freeze, + '${2}'.freeze, # Test executable + '-n ${3}'.freeze # Exact test case name matching flag ].freeze } - DEFAULT_TOOLS_TEST = { :tools => { :test_compiler => DEFAULT_TEST_COMPILER_TOOL, :test_linker => DEFAULT_TEST_LINKER_TOOL, :test_fixture => DEFAULT_TEST_FIXTURE_TOOL, - :backtrace_settings => DEFAULT_BACKTRACE_TOOL, + :test_fixture_simple_backtrace => DEFAULT_TEST_FIXTURE_SIMPLE_BACKTRACE_TOOL, + :test_backtrace_gdb => DEFAULT_TEST_BACKTRACE_GDB_TOOL, + } + } + +DEFAULT_TOOLS_TEST_ASSEMBLER = { + :tools => { + :test_assembler => DEFAULT_TEST_ASSEMBLER_TOOL, } } @@ -262,7 +269,6 @@ :test_shallow_includes_preprocessor => DEFAULT_TEST_SHALLOW_INCLUDES_PREPROCESSOR_TOOL, :test_nested_includes_preprocessor => DEFAULT_TEST_NESTED_INCLUDES_PREPROCESSOR_TOOL, :test_file_preprocessor => DEFAULT_TEST_FILE_PREPROCESSOR_TOOL, - :test_file_preprocessor_directives => DEFAULT_TEST_FILE_PREPROCESSOR_DIRECTIVES_TOOL, } } @@ -272,7 +278,6 @@ } } - DEFAULT_TOOLS_RELEASE = { :tools => { :release_compiler => DEFAULT_RELEASE_COMPILER_TOOL, @@ -295,30 +300,38 @@ DEFAULT_RELEASE_TARGET_NAME = 'project' -DEFAULT_CEEDLING_CONFIG = { +DEFAULT_CEEDLING_PROJECT_CONFIG = { :project => { # :build_root must be set by user - :use_mocks => true, + :use_mocks => false, + :use_exceptions => false, :compile_threads => 1, :test_threads => 1, - :use_test_preprocessor => false, + :use_test_preprocessor => :none, :test_file_prefix => 'test_', - :options_paths => [], :release_build => false, - :use_backtrace_gdb_reporter => false, + :use_backtrace => :simple, + :debug => false }, :release_build => { # :output is set while building configuration -- allows smart default system-dependent file extension handling :use_assembly => false, - :artifacts => [], + :artifacts => [] }, + :test_build => { + :use_assembly => false + }, + + # Unlike other top-level entries, :environment is an array (of hashes) to preserve order + :environment => [], + :paths => { - :test => [], # must be populated by user - :source => [], # must be populated by user + :test => [], # Must be populated by user + :source => [], # Should be populated by user but TEST_INCLUDE_PATH() could be used exclusively instead :support => [], - :include => [], + :include => [], # Must be populated by user :libraries => [], :test_toolchain_include => [], :release_toolchain_include => [], @@ -332,19 +345,11 @@ :include => [], }, - # unlike other top-level entries, environment's value is an array to preserve order - :environment => [ - # when evaluated, this provides wider text field for rake task comments - {:rake_columns => '120'}, - ], - :defines => { + :use_test_definition => false, :test => [], # A hash/sub-hashes in config file can include operations and test executable matchers as keys :preprocess => [], # A hash/sub-hashes in config file can include operations and test executable matchers as keys - :release => [], - :unity => [], - :cmock => [], - :cexception => [] + :release => [] }, :flags => { @@ -376,34 +381,48 @@ }, :unity => { - :vendor_path => CEEDLING_VENDOR + :defines => [], + :use_param_tests => false }, :cmock => { - :vendor_path => CEEDLING_VENDOR, - :includes => [] + :includes => [], + :defines => [], + :plugins => [], + :unity_helper_path => [], + # Yes, we're duplicating these defaults in CMock, but it's because: + # (A) We always need CMOCK_MOCK_PREFIX in Ceedling's environment + # (B) Test runner generator uses these same configuration values + :mock_prefix => 'Mock', + :mock_suffix => '', + # Just because strict ordering is the way to go + :enforce_strict_ordering => true }, :cexception => { - :vendor_path => CEEDLING_VENDOR + :defines => [] }, :test_runner => { + :cmdline_args => false, :includes => [], + :defines => [], :file_suffix => '_runner', }, - # all tools populated while building up config structure + # All tools populated while building up config / defaults structure :tools => {}, - # empty argument lists for default tools - # (these can be overridden in project file to add arguments to tools without totally redefining tools) - :test_compiler => { :arguments => [] }, - :test_linker => { :arguments => [] }, - :test_fixture => { + # Empty argument lists for default tools + # Note: These can be overridden in project file to add arguments totally redefining tools + :test_compiler => { :arguments => [] }, + :test_assembler => { :arguments => [] }, + :test_linker => { :arguments => [] }, + :test_fixture => { :arguments => [], :link_objects => [], # compiled object files to always be linked in (e.g. cmock.o if using mocks) }, + :test_backtrace_gdb => { :arguments => [] }, :test_includes_preprocessor => { :arguments => [] }, :test_file_preprocessor => { :arguments => [] }, :test_file_preprocessor_directives => { :arguments => [] }, @@ -411,11 +430,26 @@ :release_compiler => { :arguments => [] }, :release_linker => { :arguments => [] }, :release_assembler => { :arguments => [] }, - :release_dependencies_generator => { :arguments => [] }, + :release_dependencies_generator => { :arguments => [] } + }.freeze + + +CEEDLING_RUNTIME_CONFIG = { + :unity => { + :vendor_path => CEEDLING_VENDOR + }, + + :cmock => { + :vendor_path => CEEDLING_VENDOR + }, + + :cexception => { + :vendor_path => CEEDLING_VENDOR + }, :plugins => { - :load_paths => CEEDLING_PLUGINS, - :enabled => [], + :load_paths => [], + :enabled => CEEDLING_PLUGINS, } }.freeze diff --git a/tools/vendor/ceedling/lib/ceedling/defineinator.rb b/tools/vendor/ceedling/lib/ceedling/defineinator.rb index 16b40da3..9d154b7e 100644 --- a/tools/vendor/ceedling/lib/ceedling/defineinator.rb +++ b/tools/vendor/ceedling/lib/ceedling/defineinator.rb @@ -1,4 +1,9 @@ - +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= # :defines: # :test: @@ -17,37 +22,68 @@ # - TEST # - PLATFORM_B - - class Defineinator - constructor :configurator, :streaminator, :config_matchinator + constructor :configurator, :loginator, :config_matchinator def setup - @section = :defines + @topkey = :defines end def defines_defined?(context:) - return @config_matchinator.config_include?(section:@section, context:context) + return @config_matchinator.config_include?(primary:@topkey, secondary:context) end - def defines(context:, filepath:nil) - defines = @config_matchinator.get_config(section:@section, context:context) + # Defaults to inspecting configurations beneath top-level :defines + # (But, we can also lookup defines symbol lists within framework configurations--:unity, :cmock, :cexception) + def defines(topkey:@topkey, subkey:, filepath:nil) + defines = @config_matchinator.get_config(primary:topkey, secondary:subkey) if defines == nil then return [] - elsif defines.is_a?(Array) then return defines.flatten # Flatten to handle YAML aliases + elsif defines.is_a?(Array) then return defines.flatten # Flatten to handle list-nested YAML aliases elsif defines.is_a?(Hash) - @config_matchinator.validate_matchers(hash:defines, section:@section, context:context) + @config_matchinator.validate_matchers(hash:defines, section:@topkey, context:subkey) - return @config_matchinator.matches?( + arg_hash = { hash: defines, filepath: filepath, - section: @section, - context: context) + section: topkey, + context: subkey + } + + return @config_matchinator.matches?(**arg_hash) end # Handle unexpected config element type return [] end + # Optionally create a command line compilation symbol that is a test file's sanitized/converted name + def generate_test_definition(filepath:) + defines = [] + + if @configurator.defines_use_test_definition + # Get filename with no path or extension + test_def = File.basename(filepath, '.*').strip + + # Replace any non-ASCII characters with underscores + test_def = test_def.encode("ASCII", "UTF-8", invalid: :replace, undef: :replace, replace: "_") + + # Replace all non-alphanumeric characters (including spaces/punctuation but excluding underscores) with underscores + test_def.gsub!(/[^0-9a-z_]/i, '_') + + # Convert to all caps + test_def.upcase! + + # Add leading and trailiing underscores unless they already exist + test_def = test_def.start_with?('_') ? test_def : ('_' + test_def) + test_def = test_def.end_with?('_') ? test_def : (test_def + '_') + + # Add the test filename as a #define symbol to the array + defines << test_def + end + + return defines + end + end diff --git a/tools/vendor/ceedling/lib/ceedling/dependinator.rb b/tools/vendor/ceedling/lib/ceedling/dependinator.rb index 647bc195..0483215e 100644 --- a/tools/vendor/ceedling/lib/ceedling/dependinator.rb +++ b/tools/vendor/ceedling/lib/ceedling/dependinator.rb @@ -1,7 +1,13 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= class Dependinator - constructor :configurator, :project_config_manager, :test_context_extractor, :file_path_utils, :rake_wrapper, :file_wrapper + constructor :configurator, :test_context_extractor, :file_path_utils, :rake_wrapper, :file_wrapper def load_release_object_deep_dependencies(dependencies_list) @@ -22,62 +28,4 @@ def load_test_object_deep_dependencies(files_list) end end - - def enhance_runner_dependencies(runner_filepath) - @rake_wrapper[runner_filepath].enhance( [@configurator.project_test_force_rebuild_filepath] ) if (@project_config_manager.test_config_changed || - @project_config_manager.test_defines_changed) - end - - - def enhance_shallow_include_lists_dependencies(include_lists) - include_lists.each do |include_list_filepath| - @rake_wrapper[include_list_filepath].enhance( [@configurator.project_test_force_rebuild_filepath] ) if (@project_config_manager.test_config_changed || - @project_config_manager.test_defines_changed) - end - end - - - def enhance_preprocesed_file_dependencies(files) - files.each do |filepath| - @rake_wrapper[filepath].enhance( [@configurator.project_test_force_rebuild_filepath] ) if (@project_config_manager.test_config_changed || - @project_config_manager.test_defines_changed) - end - end - - - def enhance_mock_dependencies(mocks_list) - # if input configuration or ceedling changes, make sure these guys get rebuilt - mocks_list.each do |mock_filepath| - @rake_wrapper[mock_filepath].enhance( [@configurator.project_test_force_rebuild_filepath] ) if (@project_config_manager.test_config_changed || - @project_config_manager.test_defines_changed) - @rake_wrapper[mock_filepath].enhance( @configurator.cmock_unity_helper ) if (@configurator.cmock_unity_helper) - end - end - - - def enhance_dependencies_dependencies(dependencies) - dependencies.each do |dependencies_filepath| - @rake_wrapper[dependencies_filepath].enhance( [@configurator.project_test_force_rebuild_filepath] ) if (@project_config_manager.test_config_changed || - @project_config_manager.test_defines_changed) - end - end - - - def enhance_test_build_object_dependencies(objects) - objects.each do |object_filepath| - @rake_wrapper[object_filepath].enhance( [@configurator.project_test_force_rebuild_filepath] ) if (@project_config_manager.test_config_changed || - @project_config_manager.test_defines_changed) - end - end - - - def enhance_results_dependencies(result_filepath) - @rake_wrapper[result_filepath].enhance( [@configurator.project_test_force_rebuild_filepath] ) if @project_config_manager.test_config_changed - end - - - def enhance_test_executable_dependencies(test, objects) - @rake_wrapper[ @file_path_utils.form_test_executable_filepath(test) ].enhance( objects ) - end - end diff --git a/tools/vendor/ceedling/lib/ceedling/erb_wrapper.rb b/tools/vendor/ceedling/lib/ceedling/erb_wrapper.rb index 77c458b5..814e0230 100644 --- a/tools/vendor/ceedling/lib/ceedling/erb_wrapper.rb +++ b/tools/vendor/ceedling/lib/ceedling/erb_wrapper.rb @@ -1,3 +1,10 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + require 'erb' class ErbWrapper diff --git a/tools/vendor/ceedling/lib/ceedling/exceptions.rb b/tools/vendor/ceedling/lib/ceedling/exceptions.rb new file mode 100644 index 00000000..fec507b6 --- /dev/null +++ b/tools/vendor/ceedling/lib/ceedling/exceptions.rb @@ -0,0 +1,27 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + +require 'ceedling/constants' + +class CeedlingException < RuntimeError + # Nothing at the moment +end + +class ShellExecutionException < CeedlingException + attr_reader :shell_result + def initialize(shell_result:, name:) + @shell_result = shell_result + + message = name + " terminated with exit code [#{shell_result[:exit_code]}]" + + if !shell_result[:output].empty? + message += " and output >> \"#{shell_result[:output].strip()}\"" + end + + super( message ) + end +end diff --git a/tools/vendor/ceedling/lib/ceedling/file_finder.rb b/tools/vendor/ceedling/lib/ceedling/file_finder.rb index 34c38778..2bcdad42 100644 --- a/tools/vendor/ceedling/lib/ceedling/file_finder.rb +++ b/tools/vendor/ceedling/lib/ceedling/file_finder.rb @@ -1,17 +1,18 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + require 'rubygems' require 'rake' # for adding ext() method to string +require 'ceedling/exceptions' + class FileFinder - SEMAPHORE = Mutex.new constructor :configurator, :file_finder_helper, :cacheinator, :file_path_utils, :file_wrapper, :yaml_wrapper - def prepare_search_sources - @all_test_source_and_header_file_collection = - @configurator.collection_all_tests + - @configurator.collection_all_source + - @configurator.collection_all_headers - end - def find_header_file(mock_file) header = File.basename(mock_file).sub(/#{@configurator.cmock_mock_prefix}/, '').ext(@configurator.extension_header) @@ -27,118 +28,141 @@ def find_header_input_for_mock_file(mock_file) end - def find_source_from_test(test, complain) - test_prefix = @configurator.project_test_file_prefix - source_paths = @configurator.collection_all_source - - source = File.basename(test).sub(/#{test_prefix}/, '') - - # we don't blow up if a test file has no corresponding source file - return @file_finder_helper.find_file_in_collection(source, source_paths, complain, test) - end - - - def find_test_from_runner_path(runner_path) - extension_source = @configurator.extension_source - - test_file = File.basename(runner_path).sub(/#{@configurator.test_runner_file_suffix}#{'\\'+extension_source}/, extension_source) + def find_test_from_file_path(filepath) + test_file = File.basename(filepath).ext(@configurator.extension_source) - found_path = @file_finder_helper.find_file_in_collection(test_file, @configurator.collection_all_tests, :error, runner_path) + found_path = @file_finder_helper.find_file_in_collection(test_file, @configurator.collection_all_tests, :error, filepath) return found_path end - def find_test_input_for_runner_file(runner_path) - found_path = find_test_from_runner_path(runner_path) - runner_input = found_path - - if (@configurator.project_use_test_preprocessor) - runner_input = @cacheinator.diff_cached_test_file( @file_path_utils.form_preprocessed_file_filepath( found_path ) ) - end - - return runner_input - end - + def find_build_input_file(filepath:, complain: :error, context:) + release = (context == RELEASE_SYM) - def find_test_from_file_path(file_path) - test_file = File.basename(file_path).ext(@configurator.extension_source) + found_file = nil - found_path = @file_finder_helper.find_file_in_collection(test_file, @configurator.collection_all_tests, :error, file_path) + source_file = File.basename(filepath).ext('') - return found_path - end + # We only collect files that already exist when we start up. + # FileLists can produce undesired results for dynamically generated files depending on when they're accessed. + # So collect mocks and runners separately and right now. + # Assume that project configuration options will have already filtered out any files that should not be searched for. + + # Generated test runners + if (!release) and (source_file =~ /^#{@configurator.project_test_file_prefix}.+#{@configurator.test_runner_file_suffix}$/) + _source_file = source_file.ext(EXTENSION_CORE_SOURCE) + found_file = + @file_finder_helper.find_file_in_collection( + _source_file, + @file_wrapper.directory_listing( File.join(@configurator.project_test_runners_path, '*') ), + complain, + filepath) + + # Generated mocks + elsif (!release) and (source_file =~ /^#{@configurator.cmock_mock_prefix}/) + _source_file = source_file.ext(EXTENSION_CORE_SOURCE) + found_file = + @file_finder_helper.find_file_in_collection( + _source_file, + @file_wrapper.directory_listing( File.join(@configurator.cmock_mock_path, '**/*') ), + complain, + filepath) + + # Vendor framework sources (unity.c, cmock.c, cexception.c, etc.) + # Note: Taking a small chance by mixing test and release frameworks without smart checks on test/release build + elsif (@configurator.collection_vendor_framework_sources.include?(source_file.ext(EXTENSION_CORE_SOURCE))) + _source_file = source_file.ext(EXTENSION_CORE_SOURCE) + found_file = + @file_finder_helper.find_file_in_collection( + _source_file, + @configurator.collection_existing_test_build_input, + complain, + filepath) + end - def find_test_or_source_or_header_file(file_path) - file = File.basename(file_path) - return @file_finder_helper.find_file_in_collection(file, @all_test_source_and_header_file_collection, :error, file_path) - end + if !found_file.nil? + return found_file + end + # + # Above we can confidently rely on the complain parameter passed to file_finder_helper because + # we know the specific type of file being searched for. + # + # Below we ignore file misses because of lgoical complexities of searching for potentially either + # assmebly or C files, including C files that may not exist (counterparts to header files by convention). + # We save the existence handling until the end. + # + + # Assembly files for release build + if release and @configurator.release_build_use_assembly + _source_file = File.basename(filepath).ext(@configurator.extension_assembly) + found_file = + @file_finder_helper.find_file_in_collection( + _source_file, + @configurator.collection_release_build_input, + :ignore, + filepath) + + # Assembly files for test build + elsif (!release) and @configurator.test_build_use_assembly + _source_file = File.basename(filepath).ext(@configurator.extension_assembly) + found_file = + @file_finder_helper.find_file_in_collection( + _source_file, + @configurator.collection_existing_test_build_input, + :ignore, + filepath) + end - def find_compilation_input_file(file_path, complain=:error, release=false) - found_file = nil + if !found_file.nil? + return found_file + end - source_file = File.basename(file_path).ext(@configurator.extension_source) + # Release build C files + if release + _source_file = File.basename(filepath).ext(@configurator.extension_source) + found_file = + @file_finder_helper.find_file_in_collection( + _source_file, + @configurator.collection_release_build_input, + :ignore, + filepath) + + # Test build C files + else + _source_file = File.basename(filepath).ext(@configurator.extension_source) + found_file = + @file_finder_helper.find_file_in_collection( + _source_file, + @configurator.collection_existing_test_build_input, + :ignore, + filepath) + end - # We only collect files that already exist when we start up. - # FileLists can produce undesired results for dynamically generated files depending on when they're accessed. - # So collect mocks and runners separately and right now. + if found_file.nil? + _source_file += " or #{_source_file.ext(@configurator.extension_assembly)}" if @configurator.release_build_use_assembly + @file_finder_helper.handle_missing_file(_source_file, complain) + end - SEMAPHORE.synchronize { - - if (source_file =~ /#{@configurator.test_runner_file_suffix}/) - found_file = - @file_finder_helper.find_file_in_collection( - source_file, - @file_wrapper.directory_listing( File.join(@configurator.project_test_runners_path, '*') ), - complain, - file_path) - - elsif (@configurator.project_use_mocks and (source_file =~ /#{@configurator.cmock_mock_prefix}/)) - found_file = - @file_finder_helper.find_file_in_collection( - source_file, - @file_wrapper.directory_listing( File.join(@configurator.cmock_mock_path, '**/*.*') ), - complain, - file_path) - - elsif release - found_file = - @file_finder_helper.find_file_in_collection( - source_file, - @configurator.collection_release_existing_compilation_input, - complain, - file_path) - - else - temp_complain = (defined?(TEST_BUILD_USE_ASSEMBLY) && TEST_BUILD_USE_ASSEMBLY) ? :ignore : complain - found_file = - @file_finder_helper.find_file_in_collection( - source_file, - @configurator.collection_all_existing_compilation_input, - temp_complain, - file_path) - found_file ||= find_assembly_file(file_path, false) if (defined?(TEST_BUILD_USE_ASSEMBLY) && TEST_BUILD_USE_ASSEMBLY) - end - } return found_file end - def find_source_file(file_path, complain) - source_file = File.basename(file_path).ext(@configurator.extension_source) - return @file_finder_helper.find_file_in_collection(source_file, @configurator.collection_all_source, complain, file_path) + def find_source_file(filepath, complain = :error) + source_file = File.basename(filepath).ext(@configurator.extension_source) + return @file_finder_helper.find_file_in_collection(source_file, @configurator.collection_all_source, complain, filepath) end - def find_assembly_file(file_path, complain = :error) - assembly_file = File.basename(file_path).ext(@configurator.extension_assembly) - return @file_finder_helper.find_file_in_collection(assembly_file, @configurator.collection_all_assembly, complain, file_path) + def find_assembly_file(filepath, complain = :error) + assembly_file = File.basename(filepath).ext(@configurator.extension_assembly) + return @file_finder_helper.find_file_in_collection(assembly_file, @configurator.collection_all_assembly, complain, filepath) end - def find_file_from_list(file_path, file_list, complain) - return @file_finder_helper.find_file_in_collection(file_path, file_list, complain, file_path) + def find_file_from_list(filepath, file_list, complain) + return @file_finder_helper.find_file_in_collection(filepath, file_list, complain, filepath) end end diff --git a/tools/vendor/ceedling/lib/ceedling/file_finder_helper.rb b/tools/vendor/ceedling/lib/ceedling/file_finder_helper.rb index b9ad300f..a7e55b32 100644 --- a/tools/vendor/ceedling/lib/ceedling/file_finder_helper.rb +++ b/tools/vendor/ceedling/lib/ceedling/file_finder_helper.rb @@ -1,38 +1,41 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + require 'fileutils' require 'ceedling/constants' # for Verbosity enumeration +require 'ceedling/exceptions' class FileFinderHelper - constructor :streaminator + constructor :loginator - def find_file_in_collection(file_name, file_list, complain, original_filepath="") - file_to_find = nil - + def find_file_in_collection(filename, file_list, complain, original_filepath="") # search our collection for the specified base filename - matches = file_list.find_all {|v| File.basename(v) == file_name } + matches = file_list.find_all {|v| File.basename(v) == filename } + case matches.length when 0 - matches = file_list.find_all {|v| v =~ /(?:\\|\/|^)#{file_name}$/i} + matches = file_list.find_all {|v| v =~ /(?:\\|\/|^)#{filename}$/i} if (matches.length > 0) - blow_up(file_name, "However, a filename having different capitalization was found: '#{matches[0]}'.") + blow_up(filename, "However, a filename having different capitalization was found: '#{matches[0]}'.") end - case (complain) - when :error then blow_up(file_name) - when :warn then gripe(file_name) - #when :ignore then - end + return handle_missing_file(filename, complain) when 1 return matches[0] else - # Determine the closest match by giving looking for matching path segments, especially paths ENDING the same + # Determine the closest match by looking for matching path segments, especially paths ENDING the same best_match_index = 0 best_match_value = 0 reverse_original_pieces = original_filepath.split(/(?:\\|\/)/).reverse matches.each_with_index do |m,i| reverse_match_pieces = m.split(/(?:\\|\/)/).reverse - # + num = reverse_original_pieces.zip(reverse_match_pieces).inject(0){|s,v| v[0] == v[1] ? s+3 : s} num = reverse_original_pieces.inject(num){|s,v| reverse_match_pieces.include?(v) ? s+1 : s} if num > best_match_value @@ -42,21 +45,56 @@ def find_file_in_collection(file_name, file_list, complain, original_filepath="" end return matches[best_match_index] end + + return nil + end + + def find_best_path_in_collection(pathname, path_list, complain) + # search our collection for the specified exact path + raise "No path list provided for search" if path_list.nil? + return pathname if path_list.include?(pathname) + + # Determine the closest match by looking for matching path segments, especially paths ENDING the same + best_match_index = 0 + best_match_value = 0 + reverse_original_pieces = pathname.split(/(?:\\|\/)/).reverse + path_list.each_with_index do |p,i| + reverse_match_pieces = p.split(/(?:\\|\/)/).reverse + # + num = reverse_original_pieces.zip(reverse_match_pieces).inject(0){|s,v| v[0] == v[1] ? s+3 : s} + num = reverse_original_pieces.inject(num){|s,v| reverse_match_pieces.include?(v) ? s+1 : s} + if num > best_match_value + best_match_index = i + best_match_value = num + end + end + return path_list[best_match_index] end + def handle_missing_file(filename, complain) + case (complain) + when :error then blow_up(filename) + when :warn + gripe(filename) + return nil + when :ignore then return nil + end + + return nil + end + + ### Private ### + private - - def blow_up(file_name, extra_message="") - error = "ERROR: Found no file '#{file_name}' in search paths." - error += ' ' if (extra_message.length > 0) - @streaminator.stderr_puts(error + extra_message, Verbosity::ERRORS) - raise + + def blow_up(filename, extra_message="") + error = ["Found no file `#{filename}` in search paths.", extra_message].join(' ').strip + raise CeedlingException.new( error ) end - - def gripe(file_name, extra_message="") - warning = "WARNING: Found no file '#{file_name}' in search paths." - warning += ' ' if (extra_message.length > 0) - @streaminator.stderr_puts(warning + extra_message, Verbosity::COMPLAIN) + + def gripe(filename, extra_message="") + warning = ["Found no file `#{filename}` in search paths.", extra_message].join(' ').strip + @loginator.log( warning + extra_message, Verbosity::COMPLAIN ) end end diff --git a/tools/vendor/ceedling/lib/ceedling/file_path_collection_utils.rb b/tools/vendor/ceedling/lib/ceedling/file_path_collection_utils.rb new file mode 100644 index 00000000..ce71878c --- /dev/null +++ b/tools/vendor/ceedling/lib/ceedling/file_path_collection_utils.rb @@ -0,0 +1,136 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + +require 'set' +require 'pathname' +require 'fileutils' +require 'ceedling/file_path_utils' +require 'ceedling/exceptions' + + +class FilePathCollectionUtils + + constructor :file_wrapper + + def setup() + # TODO: Update Dir.pwd() to use a project root once it has been figured out + @working_dir_path = Pathname.new( Dir.pwd() ) + end + + + # Build up a directory path list from one or more strings or arrays of (+:/-:) simple paths & globs + def collect_paths(paths) + plus = Set.new # All real, expanded directory paths to add + minus = Set.new # All real, expanded paths to exclude + + # Iterate each path possibly decorated with aggregation modifiers and/or containing glob characters + paths.each do |path| + dirs = [] # Working list for evaluated directory paths + + # Get path stripped of any +:/-: aggregation modifier + _path = FilePathUtils.no_aggregation_decorators( path ) + + # If it's a glob, modify it for Ceedling's recursive subdirectory convention + _reformed = FilePathUtils::reform_subdirectory_glob( _path ) + + # Expand paths using Ruby's Dir.glob() + # - A simple path will yield that path + # - A path glob will expand to one or more paths + # Note: `sort()` becuase of Github Issue #860 + @file_wrapper.directory_listing( _reformed ).sort.each do |entry| + # For each result, add it to the working list *only* if it's a directory + # Previous validation has already made warnings about filepaths in the list + dirs << entry if @file_wrapper.directory?(entry) + end + + # For recursive directory glob at end of a path, collect parent directories too. + # Ceedling's recursive glob convention includes parent directories (unlike Ruby's glob). + if path.end_with?('/**') or path.end_with?('/*') + parents = [] + + dirs.each {|dir| parents << File.join(dir, '..')} + + # Handle edge case of subdirectory glob but no subdirectories and therefore no parents + # (Containing parent directory still exists) + parents << FilePathUtils.no_decorators( _path ) if dirs.empty? + + dirs += parents + end + + # Based on aggregation modifiers, add entries to plus and minus sets. + # Use full, absolute paths to ensure logical paths are compared properly. + # './' is logically equivalent to '' but is not equivalent as strings. + # Because plus and minus are sets, each insertion eliminates any duplicates + # (such as the parent directories for each directory as added above). + dirs.each do |dir| + abs_path = File.expand_path( dir ) + if FilePathUtils.add_path?( path ) + plus << abs_path + else + minus << abs_path + end + end + end + + # Use Set subtraction operator to remove any excluded paths + paths = (plus - minus).to_a + + paths.map! do |path| + # Reform path from full absolute to nice, neat relative path instead + (Pathname.new( path ).relative_path_from( @working_dir_path )).to_s() + end + + return paths + end + + + # Given a file list, add to it or remove from it considering (+:/-:) aggregation operators. + # Rake's FileList does not robustly handle relative filepaths and patterns. + # So, we rebuild the FileList ourselves and return it. + # TODO: Replace FileList with our own, better version. + def revise_filelist(list, revisions) + plus = Set.new # All real, expanded directory paths to add + minus = Set.new # All real, expanded paths to exclude + + # Build base plus set for revised path + list.each do |path| + # Start with expanding all list entries to absolute paths + plus << File.expand_path( path ) + end + + revisions.each do |revision| + # Include or exclude revisions in file list + path = FilePathUtils.no_aggregation_decorators( revision ) + + # Working list of revisions + filepaths = [] + + # Expand path by pattern as needed and add only filepaths to working list + @file_wrapper.directory_listing( path ).each do |entry| + filepaths << File.expand_path( entry ) if !@file_wrapper.directory?( entry ) + end + + # Handle +: / -: revisions + if FilePathUtils.add_path?( revision ) + plus.merge( filepaths ) + else + minus.merge( filepaths ) + end + end + + # Use Set subtraction operator to remove any excluded paths + paths = (plus - minus).to_a + + paths.map! do |path| + # Reform path from full absolute to nice, neat relative path instead + (Pathname.new( path ).relative_path_from( @working_dir_path )).to_s() + end + + return FileList.new( paths ) + end + +end diff --git a/tools/vendor/ceedling/lib/ceedling/file_path_utils.rb b/tools/vendor/ceedling/lib/ceedling/file_path_utils.rb index c4d04f75..b362ee8a 100644 --- a/tools/vendor/ceedling/lib/ceedling/file_path_utils.rb +++ b/tools/vendor/ceedling/lib/ceedling/file_path_utils.rb @@ -1,3 +1,10 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + require 'rubygems' require 'rake' # for ext() require 'fileutils' @@ -12,14 +19,12 @@ def ceedling_form_filepath(destination_path, original_filepath, new_extension=ni class FilePathUtils - GLOB_MATCHER = /[\*\?\{\}\[\]]/ - constructor :configurator, :file_wrapper - ######### class methods ########## + ######### Class methods ########## - # standardize path to use '/' path separator & have no trailing path separator + # Standardize path to use '/' path separator & have no trailing path separator def self.standardize(path) if path.is_a? String path.strip! @@ -34,44 +39,55 @@ def self.os_executable_ext(executable) return executable end - # extract directory path from between optional add/subtract aggregation modifiers and up to glob specifiers - # note: slightly different than File.dirname in that /files/foo remains /files/foo and does not become /files - def self.extract_path(path) - path = path.sub(/^(\+|-):/, '') + # Extract path from between optional aggregation modifiers + # and up to last path separator before glob specifiers. + # Examples: + # - '+:foo/bar/baz/' => 'foo/bar/baz' + # - 'foo/bar/ba?' => 'foo/bar' + # - 'foo/bar/baz/' => 'foo/bar/baz' + # - 'foo/bar/baz/file.x' => 'foo/bar/baz/file.x' + # - 'foo/bar/baz/file*.x' => 'foo/bar/baz' + def self.no_decorators(path) + path = self.no_aggregation_decorators(path) + + # Find first occurrence of glob specifier: *, ?, {, }, [, ] + find_index = (path =~ GLOB_PATTERN) - # find first occurrence of path separator followed by directory glob specifier: *, ?, {, }, [, ] - find_index = (path =~ GLOB_MATCHER) + # Return empty path if first character is part of a glob + return '' if find_index == 0 - # no changes needed (lop off final path separator) + # If path contains no glob, clean it up and return whole path return path.chomp('/') if (find_index.nil?) - # extract up to first glob specifier + # Extract up to first glob specifier path = path[0..(find_index-1)] - # lop off everything up to and including final path separator + # Keep everything from start of path string up to and + # including final path separator before glob character find_index = path.rindex('/') return path[0..(find_index-1)] if (not find_index.nil?) - # return string up to first glob specifier if no path separator found - return path + # Otherwise, return empty string + # (Not enough of a usable path exists free of glob operators) + return '' end - # return whether the given path is to be aggregated (no aggregation modifier defaults to same as +:) + # Return whether the given path is to be aggregated (no aggregation modifier defaults to same as +:) def self.add_path?(path) - return (path =~ /^-:/).nil? + return !path.strip.start_with?('-:') end - # get path (and glob) lopping off optional +: / -: prefixed aggregation modifiers - def self.extract_path_no_aggregation_operators(path) - return path.sub(/^(\+|-):/, '') + # Get path (and glob) lopping off optional +: / -: prefixed aggregation modifiers + def self.no_aggregation_decorators(path) + return path.sub(/^(\+|-):/, '').strip() end - # all the globs that may be in a path string work fine with one exception; - # to recurse through all subdirectories, the glob is dir/**/** but our paths use - # convention of only dir/** - def self.reform_glob(path) - return path if (path =~ /\/\*\*$/).nil? - return path + '/**' + # To recurse through all subdirectories, the RUby glob is /**/**, but our paths use + # convenience convention of only /** at tail end of a path. + def self.reform_subdirectory_glob(path) + return path if path.end_with?( '/**/**' ) + return path + '/**' if path.end_with?( '/**' ) + return path end ######### instance methods ########## @@ -85,31 +101,20 @@ def form_release_dependencies_filepath(filepath) return File.join( @configurator.project_release_dependencies_path, File.basename(filepath).ext(@configurator.extension_dependencies) ) end - def form_release_build_c_object_filepath(filepath) - return File.join( @configurator.project_release_build_output_c_path, File.basename(filepath).ext(@configurator.extension_object) ) - end - - def form_release_build_asm_object_filepath(filepath) - return File.join( @configurator.project_release_build_output_asm_path, File.basename(filepath).ext(@configurator.extension_object) ) - end - - def form_release_build_c_objects_filelist(files) - return (@file_wrapper.instantiate_file_list(files)).pathmap("#{@configurator.project_release_build_output_c_path}/%n#{@configurator.extension_object}") + def form_release_build_objects_filelist(files) + return (@file_wrapper.instantiate_file_list(files)).pathmap("#{@configurator.project_release_build_output_path}/%n#{@configurator.extension_object}") end - def form_release_build_asm_objects_filelist(files) - return (@file_wrapper.instantiate_file_list(files)).pathmap("#{@configurator.project_release_build_output_asm_path}/%n#{@configurator.extension_object}") - end - - def form_release_build_c_list_filepath(filepath) - return File.join( @configurator.project_release_build_output_c_path, File.basename(filepath).ext(@configurator.extension_list) ) + def form_release_build_list_filepath(filepath) + return File.join( @configurator.project_release_build_output_path, File.basename(filepath).ext(@configurator.extension_list) ) end def form_release_dependencies_filelist(files) return (@file_wrapper.instantiate_file_list(files)).pathmap("#{@configurator.project_release_dependencies_path}/%n#{@configurator.extension_dependencies}") end - ### tests ### + ### Tests ### + def form_test_build_cache_path(filepath) return File.join( @configurator.project_test_build_cache_path, File.basename(filepath) ) end @@ -127,25 +132,13 @@ def form_fail_results_filepath(build_output_path, filepath) end def form_runner_filepath_from_test(filepath) - return File.join( @configurator.project_test_runners_path, File.basename(filepath, @configurator.extension_source)) + @configurator.test_runner_file_suffix + @configurator.extension_source + return File.join( @configurator.project_test_runners_path, File.basename(filepath, @configurator.extension_source)) + @configurator.test_runner_file_suffix + EXTENSION_CORE_SOURCE end def form_test_filepath_from_runner(filepath) return filepath.sub(/#{TEST_RUNNER_FILE_SUFFIX}/, '') end - def form_runner_object_filepath_from_test(filepath) - return (form_test_build_c_object_filepath(filepath)).sub(/(#{@configurator.extension_object})$/, "#{@configurator.test_runner_file_suffix}\\1") - end - - def form_test_build_c_object_filepath(filepath) - return File.join( @configurator.project_test_build_output_c_path, File.basename(filepath).ext(@configurator.extension_object) ) - end - - def form_test_build_asm_object_filepath(filepath) - return File.join( @configurator.project_test_build_output_asm_path, File.basename(filepath).ext(@configurator.extension_object) ) - end - def form_test_executable_filepath(build_output_path, filepath) return File.join( build_output_path, File.basename(filepath).ext(@configurator.extension_executable) ) end diff --git a/tools/vendor/ceedling/lib/ceedling/file_system_utils.rb b/tools/vendor/ceedling/lib/ceedling/file_system_utils.rb deleted file mode 100644 index bf29650c..00000000 --- a/tools/vendor/ceedling/lib/ceedling/file_system_utils.rb +++ /dev/null @@ -1,69 +0,0 @@ -require 'rubygems' -require 'rake' -require 'set' -require 'fileutils' -require 'ceedling/file_path_utils' - - -class FileSystemUtils - - constructor :file_wrapper - - # build up path list from input of one or more strings or arrays of (+/-) paths & globs - def collect_paths(*paths) - raw = [] # all paths and globs - plus = Set.new # all paths to expand and add - minus = Set.new # all paths to remove from plus set - - # assemble all globs and simple paths, reforming our glob notation to ruby globs - paths.each do |paths_container| - case (paths_container) - when String then raw << (FilePathUtils::reform_glob(paths_container)) - when Array then paths_container.each {|path| raw << (FilePathUtils::reform_glob(path))} - else raise "Don't know how to handle #{paths_container.class}" - end - end - - # iterate through each path and glob - raw.each do |path| - - dirs = [] # container for only (expanded) paths - - # if a glob, expand it and slurp up all non-file paths - if path.include?('*') - # grab base directory only if globs are snug up to final path separator - if (path =~ /\/\*+$/) - dirs << FilePathUtils.extract_path(path) - end - - # grab expanded sub-directory globs - expanded = @file_wrapper.directory_listing( FilePathUtils.extract_path_no_aggregation_operators(path) ) - expanded.each do |entry| - dirs << entry if @file_wrapper.directory?(entry) - end - - # else just grab simple path - # note: we could just run this through glob expansion but such an - # approach doesn't handle a path not yet on disk) - else - dirs << FilePathUtils.extract_path_no_aggregation_operators(path) - end - - # add dirs to the appropriate set based on path aggregation modifier if present - FilePathUtils.add_path?(path) ? plus.merge(dirs) : minus.merge(dirs) - end - - return (plus - minus).to_a.uniq.sort - end - - - # given a file list, add to it or remove from it - def revise_file_list(list, revisions) - revisions.each do |revision| - # include or exclude file or glob to file list - file = FilePathUtils.extract_path_no_aggregation_operators( revision ) - FilePathUtils.add_path?(revision) ? list.include(file) : list.exclude(file) - end - end - -end diff --git a/tools/vendor/ceedling/lib/ceedling/file_system_wrapper.rb b/tools/vendor/ceedling/lib/ceedling/file_system_wrapper.rb index 807cbd23..6389ae7f 100644 --- a/tools/vendor/ceedling/lib/ceedling/file_system_wrapper.rb +++ b/tools/vendor/ceedling/lib/ceedling/file_system_wrapper.rb @@ -1,3 +1,9 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= class FileSystemWrapper diff --git a/tools/vendor/ceedling/lib/ceedling/file_wrapper.rb b/tools/vendor/ceedling/lib/ceedling/file_wrapper.rb index 59662fca..12326e9f 100644 --- a/tools/vendor/ceedling/lib/ceedling/file_wrapper.rb +++ b/tools/vendor/ceedling/lib/ceedling/file_wrapper.rb @@ -1,6 +1,14 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + require 'rubygems' require 'rake' # for FileList require 'fileutils' +require 'pathname' require 'ceedling/constants' @@ -24,16 +32,23 @@ def extname(filepath) return File.extname(filepath) end + # Is path a directory and does it exist? def directory?(path) return File.directory?(path) end + def relative?(path) + return Pathname.new( path).relative? + end + def dirname(path) return File.dirname(path) end def directory_listing(glob) - return Dir.glob(glob, File::FNM_PATHNAME) + # Note: `sort()` to ensure platform-independent directory listings (Github Issue #860) + # FNM_PATHNAME => Case insensitive globs + return Dir.glob(glob, File::FNM_PATHNAME).sort() end def rm_f(filepath, options={}) diff --git a/tools/vendor/ceedling/lib/ceedling/flaginator.rb b/tools/vendor/ceedling/lib/ceedling/flaginator.rb index 87953c77..7ecd42ad 100644 --- a/tools/vendor/ceedling/lib/ceedling/flaginator.rb +++ b/tools/vendor/ceedling/lib/ceedling/flaginator.rb @@ -1,3 +1,9 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= # :flags: # :test: @@ -24,30 +30,33 @@ class Flaginator - constructor :configurator, :streaminator, :config_matchinator + constructor :configurator, :loginator, :config_matchinator def setup @section = :flags end def flags_defined?(context:, operation:nil) - return @config_matchinator.config_include?(section:@section, context:context, operation:operation) + return @config_matchinator.config_include?(primary:@section, secondary:context, tertiary:operation) end def flag_down(context:, operation:, filepath:nil) - flags = @config_matchinator.get_config(section:@section, context:context, operation:operation) + flags = @config_matchinator.get_config(primary:@section, secondary:context, tertiary:operation) if flags == nil then return [] - elsif flags.is_a?(Array) then return flags.flatten # Flatten to handle YAML aliases + elsif flags.is_a?(Array) then return flags.flatten # Flatten to handle list-nested YAML aliases elsif flags.is_a?(Hash) @config_matchinator.validate_matchers(hash:flags, section:@section, context:context, operation:operation) - return @config_matchinator.matches?( + arg_hash = { hash: flags, filepath: filepath, section: @section, context: context, - operation: operation) + operation: operation + } + + return @config_matchinator.matches?(**arg_hash) end # Handle unexpected config element type diff --git a/tools/vendor/ceedling/lib/ceedling/generator.rb b/tools/vendor/ceedling/lib/ceedling/generator.rb index 877d2c2b..6bfcecf3 100644 --- a/tools/vendor/ceedling/lib/ceedling/generator.rb +++ b/tools/vendor/ceedling/lib/ceedling/generator.rb @@ -1,5 +1,14 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + require 'ceedling/constants' +require 'ceedling/exceptions' require 'ceedling/file_path_utils' +require 'rake' class Generator @@ -7,19 +16,24 @@ class Generator :generator_helper, :preprocessinator, :generator_mocks, - :generator_test_runner, :generator_test_results, + :generator_test_results_backtrace, :test_context_extractor, :tool_executor, :file_finder, :file_path_utils, :reportinator, - :streaminator, + :loginator, :plugin_manager, :file_wrapper, - :debugger_utils, - :unity_utils + :test_runner_manager + + def setup() + # Aliases + @helper = @generator_helper + @backtrace = @generator_test_results_backtrace + end def generate_mock(context:, mock:, test:, input_filepath:, output_path:) arg_hash = { @@ -31,7 +45,7 @@ def generate_mock(context:, mock:, test:, input_filepath:, output_path:) @plugin_manager.pre_mock_generate( arg_hash ) begin - # Below is a workaround that nsantiates CMock anew: + # Below is a workaround that instantiates CMock anew: # 1. To allow dfferent output path per mock # 2. To avoid any thread safety complications @@ -48,52 +62,53 @@ def generate_mock(context:, mock:, test:, input_filepath:, output_path:) module_name: test, filename: File.basename(input_filepath) ) - @streaminator.stdout_puts(msg, Verbosity::NORMAL) + @loginator.log( msg ) cmock = @generator_mocks.manufacture( config ) cmock.setup_mocks( arg_hash[:header_file] ) - rescue - raise + rescue StandardError => ex + # Re-raise execption but decorate it with CMock to better identify it + raise( ex, "CMock >> #{ex.message}", ex.backtrace ) ensure @plugin_manager.post_mock_generate( arg_hash ) end end - # test_filepath may be either preprocessed test file or original test file - def generate_test_runner(context:, mock_list:, test_filepath:, input_filepath:, runner_filepath:) + def generate_test_runner(context:, mock_list:, includes_list:, test_filepath:, input_filepath:, runner_filepath:) arg_hash = { :context => context, :test_file => test_filepath, :input_file => input_filepath, :runner_file => runner_filepath} - @plugin_manager.pre_runner_generate(arg_hash) + @plugin_manager.pre_runner_generate( arg_hash ) - # Instantiate the test runner generator each time needed for thread safety - # TODO: Make UnityTestRunnerGenerator thread-safe - generator = @generator_test_runner.manufacture() - - # collect info we need + # Collect info we need module_name = File.basename( arg_hash[:test_file] ) - test_cases = @generator_test_runner.find_test_cases( - generator: generator, - test_filepath: arg_hash[:test_file], - input_filepath: arg_hash[:input_file] - ) msg = @reportinator.generate_progress("Generating runner for #{module_name}") - @streaminator.stdout_puts(msg, Verbosity::NORMAL) + @loginator.log( msg ) + + unity_test_runner_generator = + @test_context_extractor.lookup_test_runner_generator( test_filepath ) - # build runner file + if unity_test_runner_generator.nil? + msg = "Could not find test runner generator for #{test_filepath}" + raise CeedlingException.new( msg ) + end + + # Build runner file begin - @generator_test_runner.generate( - generator: generator, + unity_test_runner_generator.generate( module_name: module_name, runner_filepath: runner_filepath, - test_cases: test_cases, - mock_list: mock_list) - rescue - raise + mock_list: mock_list, + test_file_includes: includes_list, + header_extension: @configurator.extension_header + ) + rescue StandardError => ex + # Re-raise execption but decorate it to better identify it in Ceedling output + raise( ex, "Unity Runner Generator >> #{ex.message}", ex.backtrace ) ensure @plugin_manager.post_runner_generate(arg_hash) end @@ -135,7 +150,7 @@ def generate_object_file_c( module_name: module_name, filename: File.basename(arg_hash[:source]) ) if msg.empty? - @streaminator.stdout_puts(msg, Verbosity::NORMAL) + @loginator.log( msg ) command = @tool_executor.build_command_line( @@ -149,10 +164,8 @@ def generate_object_file_c( arg_hash[:defines] ) - @streaminator.stdout_puts("Command: #{command}", Verbosity::DEBUG) - begin - shell_result = @tool_executor.exec( command[:line], command[:options] ) + shell_result = @tool_executor.exec( command ) rescue ShellExecutionException => ex shell_result = ex.shell_result raise ex @@ -200,7 +213,7 @@ def generate_object_file_asm( module_name: module_name, filename: File.basename(arg_hash[:source]) ) if msg.empty? - @streaminator.stdout_puts(msg, Verbosity::NORMAL) + @loginator.log( msg ) command = @tool_executor.build_command_line( @@ -214,10 +227,8 @@ def generate_object_file_asm( arg_hash[:dependencies] ) - @streaminator.stdout_puts("Command: #{command}", Verbosity::DEBUG) - begin - shell_result = @tool_executor.exec( command[:line], command[:options] ) + shell_result = @tool_executor.exec( command ) rescue ShellExecutionException => ex shell_result = ex.shell_result raise ex @@ -243,7 +254,7 @@ def generate_executable_file(tool, context, objects, flags, executable, map='', @plugin_manager.pre_link_execute(arg_hash) msg = @reportinator.generate_progress("Linking #{File.basename(arg_hash[:executable])}") - @streaminator.stdout_puts(msg, Verbosity::NORMAL) + @loginator.log( msg ) command = @tool_executor.build_command_line( @@ -255,91 +266,95 @@ def generate_executable_file(tool, context, objects, flags, executable, map='', arg_hash[:libraries], arg_hash[:libpaths] ) - @streaminator.stdout_puts("Command: #{command}", Verbosity::DEBUG) begin - shell_result = @tool_executor.exec( command[:line], command[:options] ) + shell_result = @tool_executor.exec( command ) rescue ShellExecutionException => ex - notice = "\n" + - "NOTICE: Ceedling assumes header files correspond to source files. A test file directs its build\n" + - "with #include statemetns as to which source files to compile and link into the executable.\n\n" + - "If the linker reports missing symbols, the following may be to blame:\n" + - " 1. This test lacks #include header statements corresponding to needed source files.\n" + - " 2. Project file paths omit source files corresponding to #include statements in this test.\n" + - " 3. Complex macros, #ifdefs, etc. have obscured correct #include statements in this test.\n" - - if (@configurator.project_use_mocks) - notice += " 4. This test does not #include needed mocks to be generated.\n\n" - else - notice += "\n" - end - - notice += "OPTIONS:\n" + - " 1. Doublecheck this test's #include statements.\n" + - " 2. Simplify complex macros or fully specify defines for this test in project config.\n" + - " 3. Use #{UNITY_TEST_SOURCE_FILE}() macro in this test to include a source file in the build.\n\n" - - @streaminator.stderr_puts(notice, Verbosity::COMPLAIN) shell_result = ex.shell_result - raise '' + raise ex ensure + arg_hash[:shell_command] = command[:line] arg_hash[:shell_result] = shell_result @plugin_manager.post_link_execute(arg_hash) end end - def generate_test_results(tool:, context:, executable:, result:) - arg_hash = {:tool => tool, :context => context, :executable => executable, :result_file => result} - @plugin_manager.pre_test_fixture_execute(arg_hash) - - msg = @reportinator.generate_progress("Running #{File.basename(arg_hash[:executable])}") - @streaminator.stdout_puts(msg, Verbosity::NORMAL) - - # Unity's exit code is equivalent to the number of failed tests, so we tell @tool_executor not to fail out if there are failures - # so that we can run all tests and collect all results - command = @tool_executor.build_command_line(arg_hash[:tool], [], arg_hash[:executable]) + def generate_test_results(tool:, context:, test_name:, test_filepath:, executable:, result:) + arg_hash = { + :tool => tool, + :context => context, + :test_name => test_name, + :test_filepath => test_filepath, + :executable => executable, + :result_file => result + } - # Configure debugger - @debugger_utils.configure_debugger(command) + @plugin_manager.pre_test_fixture_execute( arg_hash ) - # Apply additional test case filters - command[:line] += @unity_utils.collect_test_runner_additional_args - @streaminator.stdout_puts("Command: #{command}", Verbosity::DEBUG) + msg = @reportinator.generate_progress( "Running #{File.basename(arg_hash[:executable])}" ) + @loginator.log( msg ) - # Enable collecting GCOV results even when segmenatation fault is appearing - # The gcda and gcno files will be generated for a test cases which doesn't - # cause segmentation fault - @debugger_utils.enable_gcov_with_gdb_and_cmdargs(command) + # Unity's exit code is equivalent to the number of failed tests. + # We tell @tool_executor not to fail out if there are failures + # so that we can run all tests and collect all results. + command = + @tool_executor.build_command_line( + arg_hash[:tool], + # Apply additional test case filters + @test_runner_manager.collect_cmdline_args(), + arg_hash[:executable] + ) - # Run the test itself (allow it to fail. we'll analyze it in a moment) + # Run the test executable itself + # We allow it to fail without an exception. + # We'll analyze its results apart from tool_executor command[:options][:boom] = false - shell_result = @tool_executor.exec( command[:line], command[:options] ) - - # Handle SegFaults - if shell_result[:output] =~ /\s*Segmentation\sfault.*/i - if @configurator.project_config_hash[:project_use_backtrace_gdb_reporter] && @configurator.project_config_hash[:test_runner_cmdline_args] - # If we have the options and tools to learn more, dig into the details - shell_result = @debugger_utils.gdb_output_collector(shell_result) - else - # Otherwise, call a segfault a single failure so it shows up in the report - shell_result[:output] = "#{File.basename(@file_finder.find_compilation_input_file(executable))}:1:test_Unknown:FAIL:Segmentation Fault" - shell_result[:output] += "\n-----------------------\n1 Tests 1 Failures 0 Ignored\nFAIL\n" - shell_result[:exit_code] = 1 + shell_result = @tool_executor.exec( command ) + + # Handle crashes + if @helper.test_crash?( shell_result ) + @helper.log_test_results_crash( test_name, executable, shell_result ) + + filename = File.basename( test_filepath ) + + # Lookup test cases and filter based on any matchers specified for the build task + test_cases = @test_context_extractor.lookup_test_cases( test_filepath ) + test_cases = @generator_test_results.filter_test_cases( test_cases ) + + case @configurator.project_config_hash[:project_use_backtrace] + # If we have the options and tools to learn more, dig into the details + when :gdb + shell_result = + @backtrace.do_gdb( filename, executable, shell_result, test_cases ) + + # Simple test-case-by-test-case exercise + when :simple + shell_result = + @backtrace.do_simple( filename, executable, shell_result, test_cases ) + + else # :none + # Otherwise, call a crash a single failure so it shows up in the report + shell_result = @generator_test_results.create_crash_failure( + filename, + shell_result, + test_cases + ) end - else - # Don't Let The Failure Count Make Us Believe Things Aren't Working - @generator_helper.test_results_error_handler(executable, shell_result) end - processed = @generator_test_results.process_and_write_results( shell_result, - arg_hash[:result_file], - @file_finder.find_test_from_file_path(arg_hash[:executable]) ) + processed = @generator_test_results.process_and_write_results( + executable, + shell_result, + arg_hash[:result_file], + @file_finder.find_test_from_file_path( arg_hash[:executable] ) + ) arg_hash[:result_file] = processed[:result_file] arg_hash[:results] = processed[:results] - arg_hash[:shell_result] = shell_result # for raw output display if no plugins for formatted display + # For raw output display if no plugins enabled for nice display + arg_hash[:shell_result] = shell_result - @plugin_manager.post_test_fixture_execute(arg_hash) + @plugin_manager.post_test_fixture_execute( arg_hash ) end end diff --git a/tools/vendor/ceedling/lib/ceedling/generator_helper.rb b/tools/vendor/ceedling/lib/ceedling/generator_helper.rb index 34315609..bbb635f9 100644 --- a/tools/vendor/ceedling/lib/ceedling/generator_helper.rb +++ b/tools/vendor/ceedling/lib/ceedling/generator_helper.rb @@ -1,39 +1,66 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + require 'ceedling/constants' +require 'ceedling/exceptions' class GeneratorHelper - constructor :streaminator + constructor :loginator + def test_crash?(shell_result) + return true if (shell_result[:output] =~ /\s*Segmentation\sfault.*/i) - def test_results_error_handler(executable, shell_result) - notice = '' - error = false - + # Unix Signal 11 ==> SIGSEGV + # Applies to Unix-like systems including MSYS on Windows + return true if (shell_result[:status].termsig == 11) + + # No test results found in test executable output + return true if (shell_result[:output] =~ TEST_STDOUT_STATISTICS_PATTERN).nil? + + return false + end + + def log_test_results_crash(test_name, executable, shell_result) + runner = File.basename(executable) + + notice = "Test executable `#{runner}` seems to have crashed" + @loginator.log( notice, Verbosity::ERRORS, LogLabels::CRASH ) + + log = false + + # Check for empty output if (shell_result[:output].nil? or shell_result[:output].strip.empty?) - error = true - # mirror style of generic tool_executor failure output - notice = "\n" + - "ERROR: Test executable \"#{File.basename(executable)}\" failed.\n" + - "> Produced no output to $stdout.\n" + # Mirror style of generic tool_executor failure output + notice = "Test executable `#{runner}` failed.\n" + + "> Produced no output\n" + + log = true + + # Check for no test results elsif ((shell_result[:output] =~ TEST_STDOUT_STATISTICS_PATTERN).nil?) - error = true - # mirror style of generic tool_executor failure output - notice = "\n" + - "ERROR: Test executable \"#{File.basename(executable)}\" failed.\n" + - "> Produced no final test result counts in $stdout:\n" + - "#{shell_result[:output].strip}\n" + # Mirror style of generic tool_executor failure output + notice = "Test executable `#{runner}` failed.\n" + + "> Output contains no test result counts\n" + + log = true end - if (error) - # since we told the tool executor to ignore the exit code, handle it explicitly here - notice += "> And exited with status: [#{shell_result[:exit_code]}] (count of failed tests).\n" if (shell_result[:exit_code] != nil) - notice += "> And then likely crashed.\n" if (shell_result[:exit_code] == nil) + if (log) + if (shell_result[:exit_code] != nil) + notice += "> And terminated with exit code: [#{shell_result[:exit_code]}] (failed test case count).\n" + end - notice += "> This is often a symptom of a bad memory access in source or test code.\n\n" + notice += "> Causes can include a bad memory access, stack overflow, heap error, or bad branch in source or test code.\n" - @streaminator.stderr_puts(notice, Verbosity::COMPLAIN) - raise + @loginator.log( '', Verbosity::OBNOXIOUS ) + @loginator.log( notice, Verbosity::OBNOXIOUS, LogLabels::ERROR ) + @loginator.log( '', Verbosity::OBNOXIOUS ) end end diff --git a/tools/vendor/ceedling/lib/ceedling/generator_mocks.rb b/tools/vendor/ceedling/lib/ceedling/generator_mocks.rb index b4025b50..5b57b83f 100644 --- a/tools/vendor/ceedling/lib/ceedling/generator_mocks.rb +++ b/tools/vendor/ceedling/lib/ceedling/generator_mocks.rb @@ -1,3 +1,10 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + require 'cmock' class GeneratorMocks @@ -13,16 +20,19 @@ def build_configuration( output_path ) config[:mock_path] = output_path # Verbosity management for logging messages - case @configurator.project_verbosity - when Verbosity::SILENT - config[:verbosity] = 0 # CMock is silent - when Verbosity::ERRORS - when Verbosity::COMPLAIN - when Verbosity::NORMAL - when Verbosity::OBNOXIOUS - config[:verbosity] = 1 # Errors and warnings only so we can customize generation message ourselves - else # DEBUG - config[:verbosity] = 3 # Max verbosity + verbosity = @configurator.project_verbosity + + # Default to errors and warnings only so we can customize messages inside Ceedling + config[:verbosity] = 1 + + # Extreme ends of verbosity scale case handling + if (verbosity == Verbosity::SILENT) + # CMock is silent + config[:verbosity] = 0 + + elsif (verbosity == Verbosity::DEBUG) + # CMock max verbosity + config[:verbosity] = 3 end return config diff --git a/tools/vendor/ceedling/lib/ceedling/generator_test_results.rb b/tools/vendor/ceedling/lib/ceedling/generator_test_results.rb index 5c865f52..8331e497 100644 --- a/tools/vendor/ceedling/lib/ceedling/generator_test_results.rb +++ b/tools/vendor/ceedling/lib/ceedling/generator_test_results.rb @@ -1,12 +1,100 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + require 'rubygems' require 'rake' # for .ext() require 'ceedling/constants' +require 'ceedling/exceptions' + + +## +## Sample Unity Test Executable Output +## =================================== +## +## - Output is line-oriented. Anything outside the recognized lines is assumed to be from `printf()` +## or equivalent calls and collected for presentation as a collection of $stdout lines. +## - Multiline output (i.e. failure messages) can be achieved by "encoding" newlines as literal +## "\n"s (slash-n). `extract_line_elements()` handles converting newline markers into real newlines. +## - :PASS has no trailing message unless Unity's test case execution duration feature is enabled. +## If enabled, a numeric value with 'ms' as a units signifier trails, ":PASS 1.2 ms". +## - :IGNORE optionally can include a trailing message. +## - :FAIL has a trailing message that relays an assertion failure or crash condition. +## - The statistics line always has the same format with only the count values varying. +## - If there are no failed test cases, the final line is 'OK'. Otherwise, it is 'FAIL'. +## +## $stdout: +## ----------------------------------------------------------------------------------------------------- +## TestUsartModel.c:24:testGetBaudRateRegisterSettingShouldReturnAppropriateBaudRateRegisterSetting:PASS +## TestUsartModel.c:34:testIgnore:IGNORE +## TestUsartModel.c:39:testFail:FAIL: Expected 2 Was 3 +## TestUsartModel.c:49:testGetFormattedTemperatureFormatsTemperatureFromCalculatorAppropriately:PASS +## TestUsartModel.c:55:testShouldReturnErrorMessageUponInvalidTemperatureValue:PASS +## TestUsartModel.c:61:testShouldReturnWakeupMessage:PASS +## +## ----------------------- +## 6 Tests 1 Failures 1 Ignored +## FAIL + +## +## Sample Test Results Output File (YAML) +## ====================================== +## The following corresponds to the test executable output above. +## +## TestUsartModel.fail: +## --- +## :source: +## :file: test/TestUsartModel.c +## :dirname: test +## :basename: TestUsartModel.c +## :successes: +## - :test: testGetBaudRateRegisterSettingShouldReturnAppropriateBaudRateRegisterSetting +## :line: 24 +## :message: '' +## :unity_test_time: 0 +## - :test: testGetFormattedTemperatureFormatsTemperatureFromCalculatorAppropriately +## :line: 49 +## :message: '' +## :unity_test_time: 0 +## - :test: testShouldReturnErrorMessageUponInvalidTemperatureValue +## :line: 55 +## :message: '' +## :unity_test_time: 0 +## - :test: testShouldReturnWakeupMessage +## :line: 61 +## :message: '' +## :unity_test_time: 0 +## :failures: +## - :test: testFail +## :line: 39 +## :message: Expected 2 Was 3 +## :unity_test_time: 0 +## :ignores: +## - :test: testIgnore +## :line: 34 +## :message: '' +## :unity_test_time: 0 +## :counts: +## :total: 6 +## :passed: 4 +## :failed: 1 +## :ignored: 1 +## :stdout: [] +## :time: 0.006512000225484371 class GeneratorTestResults - constructor :configurator, :generator_test_results_sanity_checker, :yaml_wrapper, :debugger_utils + constructor :configurator, :generator_test_results_sanity_checker, :yaml_wrapper - def process_and_write_results(unity_shell_result, results_file, test_file) + def setup() + # Aliases + @sanity_checker = @generator_test_results_sanity_checker + end + + def process_and_write_results(executable, unity_shell_result, results_file, test_file) output_file = results_file results = get_results_structure @@ -16,72 +104,115 @@ def process_and_write_results(unity_shell_result, results_file, test_file) results[:source][:file] = test_file results[:time] = unity_shell_result[:time] unless unity_shell_result[:time].nil? - # process test statistics + # Process test statistics if (unity_shell_result[:output] =~ TEST_STDOUT_STATISTICS_PATTERN) - results[:counts][:total] = $1.to_i - results[:counts][:failed] = $2.to_i + results[:counts][:total] = $1.to_i + results[:counts][:failed] = $2.to_i results[:counts][:ignored] = $3.to_i results[:counts][:passed] = (results[:counts][:total] - results[:counts][:failed] - results[:counts][:ignored]) else - if @configurator.project_config_hash[:project_use_backtrace_gdb_reporter] - # Accessing this code block we expect failure during test execution - # which should be connected with SIGSEGV - results[:counts][:total] = 1 # Set to one as the amount of test is unknown in segfault, and one of the test is failing - results[:counts][:failed] = 1 # Set to one as the one of tests is failing with segfault - results[:counts][:ignored] = 0 - results[:counts][:passed] = 0 - - #Collect function name which cause issue and line number - if unity_shell_result[:output] =~ /\s"(.*)",\sline_num=(\d*)/ - results[:failures] << { :test => $1, :line =>$2, :message => unity_shell_result[:output], :unity_test_time => unity_shell_result[:time]} - else - #In case if regex fail write default values - results[:failures] << { :test => '??', :line =>-1, :message => unity_shell_result[:output], :unity_test_time => unity_shell_result[:time]} - end - end + raise CeedlingException.new( "Could not parse output for `#{executable}`: \"#{unity_shell_result[:output]}\"" ) end - # remove test statistics lines - output_string = unity_shell_result[:output].sub(TEST_STDOUT_STATISTICS_PATTERN, '') + # Remove test statistics lines + output_string = unity_shell_result[:output].sub( TEST_STDOUT_STATISTICS_PATTERN, '' ) + + # Process test executable results line-by-line output_string.lines do |line| - # process unity output + # Process Unity test executable output case line.chomp when /(:IGNORE)/ - elements = extract_line_elements(line, results[:source][:file]) + elements = extract_line_elements( executable, line, results[:source][:file] ) results[:ignores] << elements[0] results[:stdout] << elements[1] if (!elements[1].nil?) + when /(:PASS$)/ - elements = extract_line_elements(line, results[:source][:file]) + elements = extract_line_elements( executable, line, results[:source][:file] ) results[:successes] << elements[0] results[:stdout] << elements[1] if (!elements[1].nil?) + when /(:PASS \(.* ms\)$)/ - elements = extract_line_elements(line, results[:source][:file]) + elements = extract_line_elements( executable, line, results[:source][:file] ) results[:successes] << elements[0] results[:stdout] << elements[1] if (!elements[1].nil?) + when /(:FAIL)/ - elements = extract_line_elements(line, results[:source][:file]) - elements[0][:test] = @debugger_utils.restore_new_line_character_in_flatten_log(elements[0][:test]) + elements = extract_line_elements( executable, line, results[:source][:file] ) results[:failures] << elements[0] results[:stdout] << elements[1] if (!elements[1].nil?) - else # collect up all other - if !@configurator.project_config_hash[:project_use_backtrace_gdb_reporter] - results[:stdout] << line.chomp - end + + # Collect up all other output + else + results[:stdout] << line.chomp # Ignores blank lines end end - @generator_test_results_sanity_checker.verify(results, unity_shell_result[:exit_code]) + @sanity_checker.verify( results, unity_shell_result[:exit_code] ) - output_file = results_file.ext(@configurator.extension_testfail) if (results[:counts][:failed] > 0) + output_file = results_file.ext( @configurator.extension_testfail ) if (results[:counts][:failed] > 0) - results[:failures].each do |failure| - failure[:message] = @debugger_utils.unflat_debugger_log(failure[:message]) - end @yaml_wrapper.dump(output_file, results) return { :result_file => output_file, :result => results } end + # Filter list of test cases: + # --test_case + # --exclude_test_case + # + # @return Array - list of the test_case hashses {:test, :line_number} + def filter_test_cases(test_cases) + _test_cases = test_cases.clone + + # Filter tests which contain test_case_name passed by `--test_case` argument + if !@configurator.include_test_case.empty? + _test_cases.delete_if { |i| !(i[:test] =~ /#{@configurator.include_test_case}/) } + end + + # Filter tests which contain test_case_name passed by `--exclude_test_case` argument + if !@configurator.exclude_test_case.empty? + _test_cases.delete_if { |i| i[:test] =~ /#{@configurator.exclude_test_case}/ } + end + + return _test_cases + end + + def create_crash_failure(source, shell_result, test_cases) + count = test_cases.size() + + output = [] + test_cases.each do |test_case| + output << "#{source}:#{test_case[:line_number]}:#{test_case[:test]}:FAIL: Test executable crashed" + end + + shell_result[:output] = + regenerate_test_executable_stdout( + total: count, + failed: count, + ignored: 0, + output: output + ) + + shell_result[:exit_code] = count + + return shell_result + end + + # Fill out a template to mimic Unity's test executable output + def regenerate_test_executable_stdout(total:, failed:, ignored:, output:[]) + values = { + :total => total, + :failed => failed, + :ignored => ignored, + :output => output.map {|line| line.strip()}.join("\n"), + :result => (failed > 0) ? 'FAIL' : 'OK' + } + + return UNITY_TEST_RESULTS_TEMPLATE % values + end + + ### Private ### + private def get_results_structure @@ -96,36 +227,44 @@ def get_results_structure } end - def extract_line_elements(line, filename) - # handle anything preceding filename in line as extra output to be collected + def extract_line_elements(executable, line, filename) + # Handle anything preceding filename in line as extra output to be collected stdout = nil - stdout_regex = /(.+)#{Regexp.escape(filename)}.+/i + stdout_regex = /(.+)#{Regexp.escape(filename)}:[0-9]+:(PASS|IGNORE|FAIL).+/i unity_test_time = 0 if (line =~ stdout_regex) stdout = $1.clone - unless @configurator.project_config_hash[:project_use_backtrace_gdb_reporter] - line.sub!(/#{Regexp.escape(stdout)}/, '') - end + line.sub!(/#{Regexp.escape(stdout)}/, '') end - # collect up test results minus and extra output + # Collect up test results minus any extra output elements = (line.strip.split(':'))[1..-1] - # find timestamp if available + # Find timestamp if available if (elements[-1] =~ / \((\d*(?:\.\d*)?) ms\)/) unity_test_time = $1.to_f / 1000 elements[-1].sub!(/ \((\d*(?:\.\d*)?) ms\)/, '') end + if elements[3..-1] message = (elements[3..-1].join(':')).strip - message = @debugger_utils.unflat_debugger_log(message) else message = nil end - return {:test => elements[1], :line => elements[0].to_i, :message => message, :unity_test_time => unity_test_time}, stdout if elements.size >= 3 - return {:test => '???', :line => -1, :message => nil, :unity_test_time => unity_test_time} #fallback safe option. TODO better handling + components = { + :test => elements[1], + :line => elements[0].to_i, + # Decode any multline strings + :message => message.nil? ? nil : message.gsub( NEWLINE_TOKEN, "\n" ), + :unity_test_time => unity_test_time + } + + return components, stdout if elements.size >= 3 + + # Fall through failure case + raise CeedlingException.new( "Could not parse results output line \"line\" for `#{executable}`" ) end end diff --git a/tools/vendor/ceedling/lib/ceedling/generator_test_results_backtrace.rb b/tools/vendor/ceedling/lib/ceedling/generator_test_results_backtrace.rb new file mode 100644 index 00000000..a83b1bc0 --- /dev/null +++ b/tools/vendor/ceedling/lib/ceedling/generator_test_results_backtrace.rb @@ -0,0 +1,215 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + +class GeneratorTestResultsBacktrace + + constructor :configurator, :tool_executor, :generator_test_results + + def setup() + @RESULTS_COLLECTOR = Struct.new( :passed, :failed, :ignored, :output, keyword_init:true ) + end + + def do_simple(filename, executable, shell_result, test_cases) + # Clean stats tracker + test_case_results = @RESULTS_COLLECTOR.new( passed:0, failed:0, ignored:0, output:[] ) + + # Reset time + shell_result[:time] = 0 + + # Iterate on test cases + test_cases.each do |test_case| + # Build the test fixture to run with our test case of interest + command = @tool_executor.build_command_line( + @configurator.tools_test_fixture_simple_backtrace, [], + executable, + test_case[:test] + ) + # Things are gonna go boom, so ignore booms to get output + command[:options][:boom] = false + + crash_result = @tool_executor.exec( command ) + + # Sum execution time for each test case + # Note: Running tests serpatately increases total execution time) + shell_result[:time] += crash_result[:time].to_f() + + # Process single test case stats + case crash_result[:output] + # Success test case + when /(^#{filename}.+:PASS\s*$)/ + test_case_results[:passed] += 1 + test_output = $1 # Grab regex match + + # Ignored test case + when /(^#{filename}.+:IGNORE\s*$)/ + test_case_results[:ignored] += 1 + test_output = $1 # Grab regex match + + when /(^#{filename}.+:FAIL(:.+)?\s*$)/ + test_case_results[:failed] += 1 + test_output = $1 # Grab regex match + + else # Crash failure case + test_case_results[:failed] += 1 + test_output = "#{filename}}:#{test_case[:line_number]}:#{test_case[:test]}:FAIL: Test case crashed" + end + + # Collect up real and stand-in test results output + test_case_results[:output] << test_output + end + + # Reset shell result exit code and output + shell_result[:exit_code] = test_case_results[:failed] + shell_result[:output] = + @generator_test_results.regenerate_test_executable_stdout( + total: test_cases.size(), + ignored: test_case_results[:ignored], + failed: test_case_results[:failed], + output: test_case_results[:output] + ) + + return shell_result + end + + def do_gdb(filename, executable, shell_result, test_cases) + gdb_script_filepath = File.join( @configurator.project_build_tests_root, BACKTRACE_GDB_SCRIPT_FILE ) + + # Clean stats tracker + test_case_results = @RESULTS_COLLECTOR.new( passed:0, failed:0, ignored:0, output:[] ) + + # Reset time + shell_result[:time] = 0 + + # Iterate on test cases + test_cases.each do |test_case| + # Build the test fixture to run with our test case of interest + command = @tool_executor.build_command_line( + @configurator.tools_test_backtrace_gdb, [], + gdb_script_filepath, + executable, + test_case[:test] + ) + # Things are gonna go boom, so ignore booms to get output + command[:options][:boom] = false + + crash_result = @tool_executor.exec( command ) + + # Sum execution time for each test case + # Note: Running tests serpatately increases total execution time) + shell_result[:time] += crash_result[:time].to_f() + + test_output = '' + + # Process single test case stats + case crash_result[:output] + # Success test case + when /(^#{filename}.+:PASS\s*$)/ + test_case_results[:passed] += 1 + test_output = $1 # Grab regex match + + # Ignored test case + when /(^#{filename}.+:IGNORE\s*$)/ + test_case_results[:ignored] += 1 + test_output = $1 # Grab regex match + + when /(^#{filename}.+:FAIL(:.+)?\s*$)/ + test_case_results[:failed] += 1 + test_output = $1 # Grab regex match + + else # Crash failure case + test_case_results[:failed] += 1 + + # Collect file_name and line in which crash occurred + matched = crash_result[:output].match( /#{test_case[:test]}\s*\(\)\sat.+#{filename}:(\d+)\n/ ) + + # If we found an error report line containing `test_case() at filename.c:###` in `gdb` output + if matched + # Line number + line_number = matched[1] + + # Filter the `gdb` $stdout report to find most important lines of text + crash_report = filter_gdb_test_report( crash_result[:output], test_case[:test], filename ) + + # Unity’s test executable output is line oriented. + # Multi-line output is not possible (it looks like random `printf()` statements to the results parser) + # "Encode" newlines in multiline string to be handled by the test results parser. + test_output = crash_report.gsub( "\n", NEWLINE_TOKEN ) + + test_output = "#{filename}:#{line_number}:#{test_case[:test]}:FAIL: Test case crashed >> #{test_output}" + + # Otherwise communicate that `gdb` failed to produce a usable report + else + test_output = "#{filename}:#{test_case[:line_number]}:#{test_case[:test]}:FAIL: Test case crashed (no usable `gdb` report)" + end + end + + test_case_results[:output] << test_output + end + + # Reset shell result exit code and output + shell_result[:exit_code] = test_case_results[:failed] + shell_result[:output] = + @generator_test_results.regenerate_test_executable_stdout( + total: test_cases.size(), + ignored: test_case_results[:ignored], + failed: test_case_results[:failed], + output: test_case_results[:output] + ) + + return shell_result + end + + ### Private ### + private + + def filter_gdb_test_report(report, test_case, filename) + # Sample `gdb` backtrace output + # ============================= + # [Thread debugging using libthread_db enabled] + # Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1". + # + # [1] > Program received signal SIGSEGV, Segmentation fault. + # 0x0000555999f661fb in testCrash () at test/TestUsartModel.c:40 + # [2] > 40 uint32_t i = *nullptr; + # #0 0x0000555999f661fb in testCrash () at test/TestUsartModel.c:40 + # #1 0x0000555999f674de in run_test (func=0x555999f661e7 , name=0x555999f6b2e0 "testCrash", line_num=37) at build/test/runners/TestUsartModel_runner.c:76 + # #2 0x0000555999f6766b in main (argc=3, argv=0x7fff917e2c98) at build/test/runners/TestUsartModel_runner.c:117 + + lines = report.split( "\n" ) + + # Safe defaults to extract entire report + report_start_index = 0 # [1] + report_end_index = (lines.size()-1) # [2] + + # Find line preceding last ` () at `, [2]; + # it is the offending line of code. + # We don't need the rest of the call trace -- it's just from the runner + # up to the crashed test case. + lines.each_with_index do |line, index| + if line =~ /#{test_case}.+at.+#{filename}/ + report_end_index = (index - 1) unless (index == 0) + end + end + + # Work up from [2] to find top line of the containing text block, [1]. + # Go until we find a blank line; then increment index back down a line. + # This lops off any unneeded preamble. + report_end_index.downto(0).to_a().each do |index| + if lines[index].empty? + # Look for a blank line and adjust index to next line of text + report_start_index = (index + 1) + break + end + end + + length = (report_end_index - report_start_index) + 1 + + # Reconstitute the report from the extracted lines + return lines[report_start_index, length].join( "\n" ) + end + +end diff --git a/tools/vendor/ceedling/lib/ceedling/generator_test_results_sanity_checker.rb b/tools/vendor/ceedling/lib/ceedling/generator_test_results_sanity_checker.rb index 0b518325..f40cec48 100644 --- a/tools/vendor/ceedling/lib/ceedling/generator_test_results_sanity_checker.rb +++ b/tools/vendor/ceedling/lib/ceedling/generator_test_results_sanity_checker.rb @@ -1,17 +1,25 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + require 'rubygems' require 'rake' # for ext() method require 'ceedling/constants' +require 'ceedling/exceptions' class GeneratorTestResultsSanityChecker - constructor :configurator, :streaminator + constructor :configurator, :loginator def verify(results, unity_exit_code) # do no sanity checking if it's disabled return if (@configurator.sanity_checks == TestResultsSanityChecks::NONE) - raise "results nil or empty" if results.nil? || results.empty? + raise CeedlingException.new( "Test results nil or empty" ) if results.nil? || results.empty? ceedling_ignores_count = results[:ignores].size ceedling_failures_count = results[:failures].size @@ -48,17 +56,14 @@ def verify(results, unity_exit_code) def sanity_check_warning(file, message) unless defined?(CEEDLING_IGNORE_SANITY_CHECK) - notice = "\n" + - "ERROR: Internal sanity check for test fixture '#{file.ext(@configurator.extension_executable)}' finds that #{message}\n" + + notice = "Internal sanity check for test fixture '#{file.ext(@configurator.extension_executable)}' finds that #{message}\n" + " Possible causes:\n" + " 1. Your test + source dereferenced a null pointer.\n" + " 2. Your test + source indexed past the end of a buffer.\n" + " 3. Your test + source committed a memory access violation.\n" + " 4. Your test fixture produced an exit code of 0 despite execution ending prematurely.\n" + - " Sanity check failures of test results are usually a symptom of interrupted test execution.\n\n" - - @streaminator.stderr_puts( notice ) - raise + " Sanity check failures of test results are usually a symptom of interrupted test execution.\n\n" + raise CeedlingException.new( notice ) end end diff --git a/tools/vendor/ceedling/lib/ceedling/generator_test_runner.rb b/tools/vendor/ceedling/lib/ceedling/generator_test_runner.rb index 0c84e2f2..ef444b74 100644 --- a/tools/vendor/ceedling/lib/ceedling/generator_test_runner.rb +++ b/tools/vendor/ceedling/lib/ceedling/generator_test_runner.rb @@ -1,54 +1,84 @@ -require 'generate_test_runner.rb' # Unity's test runner generator +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + +require 'generate_test_runner' # Unity's test runner generator class GeneratorTestRunner - constructor :configurator, :file_path_utils, :file_wrapper + attr_accessor :test_cases + + # + # This class is not within any DIY context. + # It is instantiated on demand for each test file processed in a build. + # + + def initialize(config:, test_file_contents:, preprocessed_file_contents:nil) + @unity_runner_generator = UnityTestRunnerGenerator.new( config ) + + # Reduced information set + @test_cases = [] + + # Full information set used for runner generation + @test_cases_internal = [] + + parse_test_file( test_file_contents, preprocessed_file_contents ) + end - def manufacture() - return UnityTestRunnerGenerator.new( @configurator.get_runner_config ) + def generate(module_name:, runner_filepath:, mock_list:, test_file_includes:, header_extension:) + # Actually build the test runner using Unity's test runner generator. + @unity_runner_generator.generate( + module_name, + runner_filepath, + @test_cases_internal, + mock_list.map{ |mock| mock + header_extension }, + test_file_includes.map{|f| File.basename(f,'.*') + header_extension} + ) end - def find_test_cases(generator:, test_filepath:, input_filepath:) + ### Private ### - if (@configurator.project_use_test_preprocessor) - #actually look for the tests using Unity's test runner generator - contents = @file_wrapper.read(input_filepath) - tests_and_line_numbers = generator.find_tests(contents) - generator.find_setup_and_teardown(contents) + private - #look up the line numbers in the original file - source_lines = @file_wrapper.read(test_filepath).split("\n") + def parse_test_file(test_file_contents, preprocessed_file_contents) + # If there's a preprocessed file, align test case line numbers with original file contents + if (!preprocessed_file_contents.nil?) + # Save the test case structure to be used in generation + @test_cases_internal = @unity_runner_generator.find_tests( preprocessed_file_contents ) + + # Configure the runner generator around `setUp()` and `tearDown()` + @unity_runner_generator.find_setup_and_teardown( preprocessed_file_contents ) + + # Modify line numbers to match the original, non-preprocessed file + source_lines = test_file_contents.split("\n") source_index = 0; - tests_and_line_numbers.size.times do |i| + @test_cases_internal.size.times do |i| source_lines[source_index..-1].each_with_index do |line, index| - if (line =~ /#{tests_and_line_numbers[i][:test]}/) + if (line =~ /#{@test_cases_internal[i][:test]}/) source_index += index - tests_and_line_numbers[i][:line_number] = source_index + 1 + @test_cases_internal[i][:line_number] = source_index + 1 break end end end + + # Just look for the test cases within the original test file else - # Just look for the tests using Unity's test runner generator - contents = @file_wrapper.read(test_filepath) - tests_and_line_numbers = generator.find_tests(contents) - generator.find_setup_and_teardown(contents) - end + # Save the test case structure to be used in generation + @test_cases_internal = @unity_runner_generator.find_tests( test_file_contents ) - return tests_and_line_numbers - end + # Configure the runner generator around `setUp()` and `tearDown()` + @unity_runner_generator.find_setup_and_teardown( test_file_contents ) + end - def generate(generator:, module_name:, runner_filepath:, test_cases:, mock_list:, test_file_includes:[]) - header_extension = @configurator.extension_header + # Unity's `find_tests()` produces an array of hashes with the following keys... + # { test:, args:, call:, params:, line_number: } - # Actually build the test runner using Unity's test runner generator. - # (There is no need to use preprocessor here because we've already looked up test cases and are passing them in here.) - generator.generate( - module_name, - runner_filepath, - test_cases, - mock_list.map{ |mock| mock + header_extension }, - test_file_includes.map{|f| File.basename(f,'.*') + header_extension} - ) + # For external use of test case names and line numbers, keep only those pieces of info + @test_cases = @test_cases_internal.map {|hash| hash.slice( :test, :line_number )} end + end diff --git a/tools/vendor/ceedling/lib/ceedling/include_pathinator.rb b/tools/vendor/ceedling/lib/ceedling/include_pathinator.rb index 70b3cc12..9390b8e8 100644 --- a/tools/vendor/ceedling/lib/ceedling/include_pathinator.rb +++ b/tools/vendor/ceedling/lib/ceedling/include_pathinator.rb @@ -1,9 +1,16 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= require 'pathname' +require 'ceedling/exceptions' class IncludePathinator - constructor :configurator, :test_context_extractor, :streaminator, :file_wrapper + constructor :configurator, :test_context_extractor, :loginator, :file_wrapper def setup # TODO: When Ceedling's base project path handling is resolved, update this value to automatically @@ -14,21 +21,22 @@ def setup @extractor = @test_context_extractor end - def validate_test_directive_paths + def validate_test_build_directive_paths @extractor.inspect_include_paths do |test_filepath, include_paths| include_paths.each do |path| # TODO: When Ceedling's base project path handling is resolved, enable this path redefinition # path = File.join( @base_path, path ) unless @file_wrapper.exist?(path) - @streaminator.stderr_puts("'#{path}' specified by #{UNITY_TEST_INCLUDE_PATH}() within #{test_filepath} not found", Verbosity::NORMAL) - raise + error = "'#{path}' specified by #{UNITY_TEST_INCLUDE_PATH}() within #{test_filepath} not found" + raise CeedlingException.new( error ) end end end end - def augment_environment_header_files + + def validate_header_files_collection # Get existing, possibly minimal header file collection headers = @configurator.collection_all_headers @@ -37,9 +45,21 @@ def augment_environment_header_files # Add to collection of headers (Rake FileList) with directive paths and shallow wildcard matching on header file extension headers += @file_wrapper.instantiate_file_list( directive_paths.map { |path| File.join(path, '*' + EXTENSION_HEADER) } ) + headers.resolve() headers.uniq! + if headers.length == 0 + error = "No header files found in project.\n" + + "Add search paths to :paths ↳ :include in your project file and/or use #{UNITY_TEST_INCLUDE_PATH}() in your test files.\n" + + "Verify header files with `ceedling paths:include` and\\or `ceedling files:include`." + @loginator.log( error, Verbosity::COMPLAIN ) + end + + return headers + end + + def augment_environment_header_files(headers) @configurator.redefine_element(:collection_all_headers, headers) end @@ -49,4 +69,15 @@ def lookup_test_directive_include_paths(filepath) return @extractor.lookup_include_paths_list(filepath) end + # Gather together [:paths][:test] that actually contain .h files + def collect_test_include_paths + paths = [] + @configurator.collection_paths_test.each do |path| + headers = @file_wrapper.directory_listing( File.join( path, '*' + @configurator.extension_header ) ) + paths << path if headers.length > 0 + end + + return paths + end + end diff --git a/tools/vendor/ceedling/lib/ceedling/loginator.rb b/tools/vendor/ceedling/lib/ceedling/loginator.rb index 92276e1d..92fbc4f7 100644 --- a/tools/vendor/ceedling/lib/ceedling/loginator.rb +++ b/tools/vendor/ceedling/lib/ceedling/loginator.rb @@ -1,31 +1,264 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + +require 'ceedling/constants' + +# Loginator handles console and file output of logging statements class Loginator - constructor :configurator, :project_file_loader, :project_config_manager, :file_wrapper, :system_wrapper + attr_reader :project_logging + attr_writer :decorators + constructor :verbosinator, :file_wrapper, :system_wrapper - def setup_log_filepath - config_files = [] - config_files << @project_file_loader.main_file - config_files << @project_file_loader.user_file - config_files.concat( @project_config_manager.options_files ) - config_files.compact! - config_files.map! { |file| file.ext('') } - - log_name = config_files.join( '_' ) + def setup() + @decorators = false + + # Friendly robustification for certain testing scenarios + unless @system_wrapper.nil? + # Automatic setting of console printing decorations based on platform + @decorators = !@system_wrapper.windows?() + + # Environment variable takes precedence over automatic setting + _env = @system_wrapper.env_get('CEEDLING_DECORATORS') if !@system_wrapper.nil? + if !_env.nil? + if (_env == '1' or _env.strip().downcase() == 'true') + @decorators = true + elsif (_env == '0' or _env.strip().downcase() == 'false') + @decorators = false + end + end + end + + @replace = { + # Problematic characters pattern => Simple characters + /↳/ => '>>', # Config sub-entry notation + /•/ => '*', # Bulleted lists + } + + @project_logging = false + @log_filepath = nil + end + + + def set_logfile( log_filepath ) + if !log_filepath.empty? + @project_logging = true + @log_filepath = log_filepath + end + end + + + # log() + # ----- + # + # Write the given string to an optional log file and to the console + # - Logging statements to a file are always at the highest verbosity + # - Console logging is controlled by the verbosity level + # + # For default label of LogLabels::AUTO + # - If verbosity ERRORS, add ERROR: heading + # - If verbosity COMPLAIN, added WARNING: heading + # - All other verbosity levels default to no heading + # + # By setting a label: + # - A heading begins a message regardless of verbosity level, except NONE + # - NONE forcibly presents headings and emoji decorators + # + # If decoration is enabled: + # - Add fun emojis before all headings, except TITLE + # - TITLE log level adds seedling emoji alone + # + # If decoration is disabled: + # - No emojis are added to label + # - Any problematic console characters in a message are replaced with + # simpler variants + + def log(message="\n", verbosity=Verbosity::NORMAL, label=LogLabels::AUTO, stream=nil) + # Choose appropriate console stream + stream = get_stream( verbosity, stream ) + + # Flatten if needed + message = message.flatten.join("\n") if (message.class == Array) + + # Message contatenated with "\n" (unless it aready ends with a newline) + message += "\n" unless message.end_with?( "\n" ) + + # Write to log as though Verbosity::DEBUG (no filtering at all) but without fun characters + if @project_logging + file_msg = message.dup() # Copy for safe inline modifications + + # Add labels + file_msg = format( file_msg, verbosity, label, false ) + + # Note: In practice, file-based logging only works with trailing newlines (i.e. `log()` calls) + # `out()` calls will be a little ugly in the log file, but these are typically only + # used for console logging anyhow. + logfile( sanitize( file_msg, false ), extract_stream_name( stream ) ) + end + + # Only output to console when message reaches current verbosity level + return if !(@verbosinator.should_output?( verbosity )) + + # Add labels and fun characters + console_msg = format( message, verbosity, label, @decorators ) + + # Write to output stream after optionally removing any problematic characters + stream.print( sanitize( console_msg, @decorators ) ) + end + + + def decorate(str, label=LogLabels::NONE) + return str if !@decorators + + prepend = '' - @project_log_filepath = File.join( @configurator.project_log_path, log_name.ext('.log') ) + case label + when LogLabels::NOTICE + prepend = 'ℹ️ ' + when LogLabels::WARNING + prepend = '⚠️ ' + when LogLabels::ERROR + prepend = '🪲 ' + when LogLabels::EXCEPTION + prepend = '🧨 ' + when LogLabels::CONSTRUCT + prepend = '🚧 ' + when LogLabels::CRASH + prepend = '☠️ ' + when LogLabels::RUN + prepend = '👟 ' + when LogLabels::PASS + prepend = '✅ ' + when LogLabels::FAIL + prepend = '❌ ' + when LogLabels::TITLE + prepend = '🌱 ' + end + + return prepend + str + end + + + def sanitize(string, decorate=nil) + # Redefine `decorate` to @decorators value by default, + # otherwise use the argument as an override value + decorate = @decorators if decorate.nil? + + # Remove problematic console characters in-place if decoration disabled + @replace.each_pair {|k,v| string.gsub!( k, v) } if (decorate == false) + return string + end + + ### Private ### + + private + + def get_stream(verbosity, stream) + # If no stream has been specified, choose one based on the verbosity level of the prompt + if stream.nil? + if verbosity <= Verbosity::ERRORS + return $stderr + else + return $stdout + end + end + + return stream + end + + + def format(string, verbosity, label, decorate) + prepend = '' + + # Force no automatic label / decorator + return string if label == LogLabels::NONE + + # Add decorators if enabled + if decorate + case label + when LogLabels::AUTO + if verbosity == Verbosity::ERRORS + prepend = '🪲 ' + elsif verbosity == Verbosity::COMPLAIN + prepend = '⚠️ ' + end + # Otherwise, no decorators for verbosity levels + else + # If not auto, go get us a decorator + prepend = decorate('', label) + end + end + + # Add headings + case label + when LogLabels::AUTO + if verbosity == Verbosity::ERRORS + prepend += 'ERROR: ' + elsif verbosity == Verbosity::COMPLAIN + prepend += 'WARNING: ' + end + # Otherwise, no headings + when LogLabels::NOTICE + prepend += 'NOTICE: ' + when LogLabels::WARNING + prepend += 'WARNING: ' + when LogLabels::ERROR + prepend += 'ERROR: ' + when LogLabels::EXCEPTION + prepend += 'EXCEPTION: ' + when LogLabels::CRASH + prepend += 'ERROR: ' + # Otherwise no headings for decorator-only messages + end + + return prepend + string end - def log(string, heading=nil) - return if (not @configurator.project_logging) - - output = "\n[#{@system_wrapper.time_now}]" - output += " :: #{heading}" if (not heading.nil?) - output += "\n#{string.strip}\n" + def extract_stream_name(stream) + name = case (stream.fileno) + when 0 then '' + when 1 then '' + when 2 then '' + else stream.inspect + end + + return name + end + - @file_wrapper.write(@project_log_filepath, output, 'a') + def logfile(string, stream='') + # Ex: '# May 1 22:20:41 2024 | ' + header = "#{stream} #{@system_wrapper.time_now('%b %e %H:%M:%S %Y')} | " + + # Split any multiline strings so we can align them with the header + lines = string.strip.split("\n") + + # Build output string with the first (can be only) line + output = "#{header}#{lines[0]}\n" + + # If additional lines in a multiline string, pad them on the left + # to align with the header + if lines.length > 1 + lines[1..-1].each {|line| output += ((' ' * header.length) + line + "\n")} + end + + # Example output: + # + # May 1 22:20:40 2024 | Determining Artifacts to Be Built... + # May 1 22:20:40 2024 | Building Objects + # ---------------- + # May 1 22:20:40 2024 | Compiling TestUsartModel.c... + # May 1 22:20:40 2024 | Compiling TestUsartModel::unity.c... + # May 1 22:20:40 2024 | Compiling TestUsartModel::cmock.c... + + @file_wrapper.write( @log_filepath, output, 'a' ) end - + end diff --git a/tools/vendor/ceedling/lib/ceedling/makefile.rb b/tools/vendor/ceedling/lib/ceedling/makefile.rb index c3d7496d..e6334500 100644 --- a/tools/vendor/ceedling/lib/ceedling/makefile.rb +++ b/tools/vendor/ceedling/lib/ceedling/makefile.rb @@ -1,3 +1,9 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= # modified version of Rake's provided make-style dependency loader # customizations: diff --git a/tools/vendor/ceedling/lib/ceedling/objects.yml b/tools/vendor/ceedling/lib/ceedling/objects.yml index 7114a53f..6c046bfb 100644 --- a/tools/vendor/ceedling/lib/ceedling/objects.yml +++ b/tools/vendor/ceedling/lib/ceedling/objects.yml @@ -1,16 +1,26 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + +application: + compose: + - system_wrapper file_wrapper: file_system_wrapper: -stream_wrapper: - rake_wrapper: yaml_wrapper: system_wrapper: +config_walkinator: + reportinator: rake_utils: @@ -26,32 +36,11 @@ file_path_utils: - configurator - file_wrapper -file_system_utils: - compose: file_wrapper - -project_file_loader: +file_path_collection_utils: compose: - - yaml_wrapper - - stream_wrapper - - system_wrapper - file_wrapper -unity_utils: - compose: - - configurator - -debugger_utils: - compose: - - configurator - - tool_executor - - unity_utils - -project_config_manager: - compose: - - cacheinator - - configurator - - yaml_wrapper - - file_wrapper +test_runner_manager: cacheinator: compose: @@ -69,75 +58,76 @@ tool_executor: compose: - configurator - tool_executor_helper - - streaminator + - loginator - verbosinator - system_wrapper tool_executor_helper: compose: - - streaminator + - loginator - system_utils - system_wrapper + - verbosinator + +tool_validator: + compose: + - file_wrapper + - loginator + - system_wrapper + - reportinator configurator: compose: - configurator_setup - configurator_plugins - configurator_builder + - config_walkinator - yaml_wrapper - system_wrapper + - loginator + - reportinator configurator_setup: compose: - configurator_builder - configurator_validator - configurator_plugins - - stream_wrapper + - loginator + - file_wrapper configurator_plugins: compose: - - stream_wrapper - file_wrapper - system_wrapper configurator_validator: compose: + - config_walkinator - file_wrapper - - stream_wrapper + - loginator - system_wrapper + - reportinator + - tool_validator configurator_builder: compose: - - file_system_utils + - file_path_collection_utils - file_wrapper - system_wrapper loginator: compose: - - configurator - - project_file_loader - - project_config_manager + - verbosinator - file_wrapper - system_wrapper -streaminator: - compose: - - streaminator_helper - - verbosinator - - loginator - - stream_wrapper - -streaminator_helper: - setupinator: -plugin_builder: - plugin_manager: compose: - configurator - plugin_manager_helper - - streaminator + - loginator - reportinator - system_wrapper @@ -152,12 +142,12 @@ plugin_reportinator: plugin_reportinator_helper: compose: - configurator - - streaminator + - loginator - yaml_wrapper - file_wrapper verbosinator: - compose: configurator + # compose: configurator file_finder: compose: @@ -169,18 +159,19 @@ file_finder: - yaml_wrapper file_finder_helper: - compose: streaminator + compose: loginator test_context_extractor: compose: - configurator - file_wrapper + - loginator include_pathinator: compose: - configurator - test_context_extractor - - streaminator + - loginator - file_wrapper task_invoker: @@ -189,23 +180,23 @@ task_invoker: - build_batchinator - rake_utils - rake_wrapper - - project_config_manager config_matchinator: compose: - configurator - - streaminator + - loginator + - reportinator flaginator: compose: - configurator - - streaminator + - loginator - config_matchinator defineinator: compose: - configurator - - streaminator + - loginator - config_matchinator generator: @@ -214,49 +205,46 @@ generator: - generator_helper - preprocessinator - generator_mocks - - generator_test_runner - generator_test_results - test_context_extractor - tool_executor - file_finder - file_path_utils - reportinator - - streaminator + - loginator - plugin_manager - file_wrapper - - unity_utils - - debugger_utils + - test_runner_manager + - generator_test_results_backtrace generator_helper: compose: - - streaminator + - loginator generator_test_results: compose: - configurator - generator_test_results_sanity_checker - yaml_wrapper - - debugger_utils -generator_test_results_sanity_checker: +generator_test_results_backtrace: compose: - - configurator - - streaminator + - configurator + - tool_executor + - generator_test_results -generator_mocks: +generator_test_results_sanity_checker: compose: - configurator + - loginator -generator_test_runner: +generator_mocks: compose: - configurator - - file_path_utils - - file_wrapper dependinator: compose: - configurator - - project_config_manager - test_context_extractor - file_path_utils - rake_wrapper @@ -271,10 +259,10 @@ preprocessinator: - file_path_utils - file_wrapper - yaml_wrapper - - project_config_manager + - plugin_manager - configurator - test_context_extractor - - streaminator + - loginator - reportinator - rake_wrapper @@ -284,7 +272,7 @@ preprocessinator_includes_handler: - tool_executor - test_context_extractor - yaml_wrapper - - streaminator + - loginator - reportinator preprocessinator_file_handler: @@ -295,27 +283,27 @@ preprocessinator_file_handler: - tool_executor - file_path_utils - file_wrapper - - streaminator + - loginator preprocessinator_extractor: build_batchinator: compose: - configurator - - streaminator + - loginator - reportinator - test_invoker: compose: + - application - configurator - test_invoker_helper - plugin_manager - build_batchinator - - streaminator + - reportinator + - loginator - preprocessinator - task_invoker - - build_invoker_utils - generator - test_context_extractor - file_path_utils @@ -325,23 +313,24 @@ test_invoker: test_invoker_helper: compose: - configurator - - streaminator + - loginator - build_batchinator - task_invoker - test_context_extractor - include_pathinator + - preprocessinator - defineinator - flaginator - file_finder - file_path_utils - file_wrapper - generator + - test_runner_manager release_invoker: compose: - configurator - release_invoker_helper - - build_invoker_utils - dependinator - task_invoker - file_path_utils @@ -353,9 +342,4 @@ release_invoker_helper: - dependinator - task_invoker -build_invoker_utils: - compose: - - configurator - - streaminator - erb_wrapper: diff --git a/tools/vendor/ceedling/lib/ceedling/plugin.rb b/tools/vendor/ceedling/lib/ceedling/plugin.rb index f20b3a3b..b41a4692 100644 --- a/tools/vendor/ceedling/lib/ceedling/plugin.rb +++ b/tools/vendor/ceedling/lib/ceedling/plugin.rb @@ -1,79 +1,29 @@ - -class String - # reformat a multiline string to have given number of whitespace columns; - # helpful for formatting heredocs - def left_margin(margin=0) - non_whitespace_column = 0 - new_lines = [] - - # find first line with non-whitespace and count left columns of whitespace - self.each_line do |line| - if (line =~ /^\s*\S/) - non_whitespace_column = $&.length - 1 - break - end - end - - # iterate through each line, chopping off leftmost whitespace columns and add back the desired whitespace margin - self.each_line do |line| - columns = [] - margin.times{columns << ' '} - # handle special case of line being narrower than width to be lopped off - if (non_whitespace_column < line.length) - new_lines << "#{columns.join}#{line[non_whitespace_column..-1]}" - else - new_lines << "\n" - end - end - - return new_lines.join - end -end +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= class Plugin attr_reader :name, :environment attr_accessor :plugin_objects - def initialize(system_objects, name) + def initialize(system_objects, name, root_path) @environment = [] @ceedling = system_objects + @plugin_root_path = root_path @name = name self.setup end - def setup; end - - # mock generation - def pre_mock_generate(arg_hash); end - def post_mock_generate(arg_hash); end - - # test runner generation - def pre_runner_generate(arg_hash); end - def post_runner_generate(arg_hash); end - - # compilation (test or source) - def pre_compile_execute(arg_hash); end - def post_compile_execute(arg_hash); end - - # linking (test or source) - def pre_link_execute(arg_hash); end - def post_link_execute(arg_hash); end - - # test fixture execution - def pre_test_fixture_execute(arg_hash); end - def post_test_fixture_execute(arg_hash); end - - # test task - def pre_test(test); end - def post_test(test); end - - # release task - def pre_release; end - def post_release; end + # Override to prevent exception handling from walking & stringifying the object variables. + # Plugin's object variables are gigantic and produce a flood of output. + def inspect + return this.class.name + end - # whole shebang (any use of Ceedling) - def pre_build; end - def post_build; end + def setup; end def summary; end diff --git a/tools/vendor/ceedling/lib/ceedling/plugin_builder.rb b/tools/vendor/ceedling/lib/ceedling/plugin_builder.rb deleted file mode 100644 index 8d553046..00000000 --- a/tools/vendor/ceedling/lib/ceedling/plugin_builder.rb +++ /dev/null @@ -1,55 +0,0 @@ -require 'ceedling/plugin' -require 'ceedling/yaml_wrapper' - -class PluginBuilder - - attr_accessor :plugin_objects - - def construct_plugin(plugin_name, object_map_yaml, system_objects) - # @streaminator.stdout_puts("Constructing plugin #{plugin_name}...", Verbosity::OBNOXIOUS) - object_map = {} - @plugin_objects = {} - @system_objects = system_objects - - if object_map_yaml - ym = YamlMapper.new - @object_map = ym.load_string(object_map_yaml) - @object_map.each_key do |obj| - construct_object(obj) - end - else - raise "Invalid object map for plugin #{plugin_name}!" - end - - return @plugin_objects - end - - private - - def camelize(underscored_name) - return underscored_name.gsub(/(_|^)([a-z0-9])/) {$2.upcase} - end - - def construct_object(obj) - if @plugin_objects[obj].nil? - if @object_map[obj] && @object_map[obj]['compose'] - @object_map[obj]['compose'].each do |dep| - construct_object(dep) - end - end - build_object(obj) - end - end - - def build_object(new_object) - if @plugin_objects[new_object.to_sym].nil? - # @streaminator.stdout_puts("Building plugin object #{new_object}", Verbosity::OBNOXIOUS) - require new_object - class_name = camelize(new_object) - new_instance = eval("#{class_name}.new(@system_objects, class_name.to_s)") - new_instance.plugin_objects = @plugin_objects - @plugin_objects[new_object.to_sym] = new_instance - end - end - -end \ No newline at end of file diff --git a/tools/vendor/ceedling/lib/ceedling/plugin_manager.rb b/tools/vendor/ceedling/lib/ceedling/plugin_manager.rb index 0468f2fc..85a402c9 100644 --- a/tools/vendor/ceedling/lib/ceedling/plugin_manager.rb +++ b/tools/vendor/ceedling/lib/ceedling/plugin_manager.rb @@ -1,31 +1,47 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + require 'ceedling/constants' class PluginManager - constructor :configurator, :plugin_manager_helper, :streaminator, :reportinator, :system_wrapper + constructor :configurator, :plugin_manager_helper, :loginator, :reportinator, :system_wrapper def setup @build_fail_registry = [] - @plugin_objects = [] # so we can preserve order + @plugin_objects = [] # List so we can preserve order end - def load_plugin_scripts(script_plugins, system_objects) + def load_programmatic_plugins(plugins, system_objects) environment = [] - script_plugins.each do |plugin| - # protect against instantiating object multiple times due to processing config multiple times (option files, etc) - next if (@plugin_manager_helper.include?(@plugin_objects, plugin)) + plugins.each do |hash| + # Protect against instantiating object multiple times due to processing config multiple times (option files, etc) + next if (@plugin_manager_helper.include?( @plugin_objects, hash[:plugin] ) ) + + msg = @reportinator.generate_progress( "Instantiating plugin class #{camelize( hash[:plugin] )}" ) + @loginator.log( msg, Verbosity::OBNOXIOUS ) + begin - @system_wrapper.require_file( "#{plugin}.rb" ) - object = @plugin_manager_helper.instantiate_plugin_script( camelize(plugin), system_objects, plugin ) + @system_wrapper.require_file( "#{hash[:plugin]}.rb" ) + object = @plugin_manager_helper.instantiate_plugin( + camelize( hash[:plugin] ), + system_objects, + hash[:plugin], + hash[:root_path] + ) @plugin_objects << object environment += object.environment - # add plugins to hash of all system objects - system_objects[plugin.downcase.to_sym] = object + # Add plugins to hash of all system objects + system_objects[hash[:plugin].downcase().to_sym()] = object rescue - puts "Exception raised while trying to load plugin: #{plugin}" - raise + @loginator.log( "Exception raised while trying to load plugin: #{hash[:plugin]}", Verbosity::ERRORS ) + raise # Raise again for backtrace, etc. end end @@ -46,7 +62,7 @@ def print_plugin_failures report += "\n" - @streaminator.stderr_puts(report, Verbosity::ERRORS) + @loginator.log( report, Verbosity::ERRORS, LogLabels::NONE ) end end @@ -56,6 +72,12 @@ def register_build_failure(message) #### execute all plugin methods #### + def pre_mock_preprocess(arg_hash); execute_plugins(:pre_mock_preprocess, arg_hash); end + def post_mock_preprocess(arg_hash); execute_plugins(:post_mock_preprocess, arg_hash); end + + def pre_test_preprocess(arg_hash); execute_plugins(:pre_test_preprocess, arg_hash); end + def post_test_preprocess(arg_hash); execute_plugins(:post_test_preprocess, arg_hash); end + def pre_mock_generate(arg_hash); execute_plugins(:pre_mock_generate, arg_hash); end def post_mock_generate(arg_hash); execute_plugins(:post_mock_generate, arg_hash); end @@ -70,8 +92,8 @@ def post_link_execute(arg_hash); execute_plugins(:post_link_execute, arg_hash); def pre_test_fixture_execute(arg_hash); execute_plugins(:pre_test_fixture_execute, arg_hash); end def post_test_fixture_execute(arg_hash) - # special arbitration: raw test results are printed or taken over by plugins handling the job - @streaminator.stdout_puts(arg_hash[:shell_result][:output]) if (@configurator.plugins_display_raw_test_results) + # Special arbitration: Raw test results are printed or taken over by plugins handling the job + @loginator.log( arg_hash[:shell_result][:output] ) if @configurator.plugins_display_raw_test_results execute_plugins(:post_test_fixture_execute, arg_hash) end @@ -96,10 +118,14 @@ def camelize(underscored_name) def execute_plugins(method, *args) @plugin_objects.each do |plugin| begin - plugin.send(method, *args) if plugin.respond_to?(method) + if plugin.respond_to?(method) + message = @reportinator.generate_progress( "Plugin | #{camelize( plugin.name )} > :#{method}" ) + @loginator.log( message, Verbosity::OBNOXIOUS ) + plugin.send(method, *args) + end rescue - puts "Exception raised in plugin: #{plugin.name}, in method #{method}" - raise + @loginator.log( "Exception raised in plugin `#{plugin.name}` within build hook :#{method}", Verbosity::ERRORS ) + raise # Raise again for backtrace, etc. end end end diff --git a/tools/vendor/ceedling/lib/ceedling/plugin_manager_helper.rb b/tools/vendor/ceedling/lib/ceedling/plugin_manager_helper.rb index b18248a6..89dd19f3 100644 --- a/tools/vendor/ceedling/lib/ceedling/plugin_manager_helper.rb +++ b/tools/vendor/ceedling/lib/ceedling/plugin_manager_helper.rb @@ -1,3 +1,9 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= class PluginManagerHelper @@ -12,8 +18,8 @@ def include?(plugins, name) return include end - def instantiate_plugin_script(plugin, system_objects, name) - return eval("#{plugin}.new(system_objects, name)") + def instantiate_plugin(plugin, system_objects, name, root_path) + return eval( "#{plugin}.new(system_objects, name, root_path)" ) end end diff --git a/tools/vendor/ceedling/lib/ceedling/plugin_reportinator.rb b/tools/vendor/ceedling/lib/ceedling/plugin_reportinator.rb index f6fccded..7c1c23de 100644 --- a/tools/vendor/ceedling/lib/ceedling/plugin_reportinator.rb +++ b/tools/vendor/ceedling/lib/ceedling/plugin_reportinator.rb @@ -1,5 +1,13 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + require 'ceedling/constants' require 'ceedling/defaults' +require 'ceedling/exceptions' class PluginReportinator @@ -9,17 +17,18 @@ def setup @test_results_template = nil end - + def register_test_results_template(template) + @test_results_template = template + end + def set_system_objects(system_objects) @plugin_reportinator_helper.ceedling = system_objects end - def fetch_results(results_path, test, options={:boom => false}) return @plugin_reportinator_helper.fetch_results( File.join(results_path, test), options ) end - def generate_banner(message) return @reportinator.generate_banner(message) end @@ -28,9 +37,54 @@ def generate_heading(message) return @reportinator.generate_heading(message) end + ## + ## Sample Test Results Output File (YAML) + ## ====================================== + ## + ## TestUsartModel.fail: + ## --- + ## :source: + ## :file: test/TestUsartModel.c + ## :dirname: test + ## :basename: TestUsartModel.c + ## :successes: + ## - :test: testGetBaudRateRegisterSettingShouldReturnAppropriateBaudRateRegisterSetting + ## :line: 24 + ## :message: '' + ## :unity_test_time: 0 + ## - :test: testGetFormattedTemperatureFormatsTemperatureFromCalculatorAppropriately + ## :line: 49 + ## :message: '' + ## :unity_test_time: 0 + ## - :test: testShouldReturnErrorMessageUponInvalidTemperatureValue + ## :line: 55 + ## :message: '' + ## :unity_test_time: 0 + ## - :test: testShouldReturnWakeupMessage + ## :line: 61 + ## :message: '' + ## :unity_test_time: 0 + ## :failures: + ## - :test: testFail + ## :line: 39 + ## :message: Expected 2 Was 3 + ## :unity_test_time: 0 + ## :ignores: + ## - :test: testIgnore + ## :line: 34 + ## :message: '' + ## :unity_test_time: 0 + ## :counts: + ## :total: 6 + ## :passed: 4 + ## :failed: 1 + ## :ignored: 1 + ## :stdout: [] + ## :time: 0.006512000225484371 + def assemble_test_results(results_list, options={:boom => false}) - aggregated_results = get_results_structure - + aggregated_results = new_results() + results_list.each do |result_path| results = @plugin_reportinator_helper.fetch_results( result_path, options ) @plugin_reportinator_helper.process_results(aggregated_results, results) @@ -38,41 +92,47 @@ def assemble_test_results(results_list, options={:boom => false}) return aggregated_results end - - - def register_test_results_template(template) - @test_results_template = template if (@test_results_template.nil?) - end - - + def run_test_results_report(hash, verbosity=Verbosity::NORMAL, &block) - run_report( $stdout, - ((@test_results_template.nil?) ? DEFAULT_TESTS_RESULTS_REPORT_TEMPLATE : @test_results_template), - hash, - verbosity, - &block ) + if @test_results_template.nil? + raise CeedlingException.new( "No test results report template has been set." ) + end + + run_report( + @test_results_template, + hash, + verbosity, + &block + ) end - - def run_report(stream, template, hash=nil, verbosity=Verbosity::NORMAL) + def run_report(template, hash=nil, verbosity=Verbosity::NORMAL) failure = nil failure = yield() if block_given? @plugin_manager.register_build_failure( failure ) - - @plugin_reportinator_helper.run_report( stream, template, hash, verbosity ) + + # Set verbosity to error level if there were failures + verbosity = failure ? Verbosity::ERRORS : Verbosity::NORMAL + + @plugin_reportinator_helper.run_report( template, hash, verbosity ) end - private ############################### + # + # Private + # + + private - def get_results_structure + def new_results() return { - :successes => [], - :failures => [], - :ignores => [], - :stdout => [], - :counts => {:total => 0, :passed => 0, :failed => 0, :ignored => 0, :stdout => 0}, - :time => 0.0 + :times => {}, + :successes => [], + :failures => [], + :ignores => [], + :stdout => [], + :counts => {:total => 0, :passed => 0, :failed => 0, :ignored => 0, :stdout => 0}, + :total_time => 0.0 } end diff --git a/tools/vendor/ceedling/lib/ceedling/plugin_reportinator_helper.rb b/tools/vendor/ceedling/lib/ceedling/plugin_reportinator_helper.rb index ea3a9dcb..b25f0f25 100644 --- a/tools/vendor/ceedling/lib/ceedling/plugin_reportinator_helper.rb +++ b/tools/vendor/ceedling/lib/ceedling/plugin_reportinator_helper.rb @@ -1,51 +1,84 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + require 'erb' require 'rubygems' require 'rake' # for ext() require 'ceedling/constants' +require 'ceedling/exceptions' class PluginReportinatorHelper attr_writer :ceedling - constructor :configurator, :streaminator, :yaml_wrapper, :file_wrapper + constructor :configurator, :loginator, :yaml_wrapper, :file_wrapper def fetch_results(results_path, options) - pass_path = File.join(results_path.ext( @configurator.extension_testpass )) - fail_path = File.join(results_path.ext( @configurator.extension_testfail )) - - if (@file_wrapper.exist?(fail_path)) - return @yaml_wrapper.load(fail_path) - elsif (@file_wrapper.exist?(pass_path)) - return @yaml_wrapper.load(pass_path) - else - if (options[:boom]) - @streaminator.stderr_puts("Could find no test results for '#{File.basename(results_path).ext(@configurator.extension_source)}'", Verbosity::ERRORS) - raise + # Create the results filepaths + pass_path = results_path.ext( @configurator.extension_testpass ) + fail_path = results_path.ext( @configurator.extension_testfail ) + + # Collect whether the results file(s) exists + pass_exists = ( @file_wrapper.exist?( pass_path ) ? true : false ) + fail_exists = ( @file_wrapper.exist?( fail_path ) ? true : false ) + + # Handle if neither file exists + if !fail_exists and !pass_exists + + if options[:boom] + # Complain loudly + error = "Could find no test results for '#{File.basename(results_path).ext(@configurator.extension_source)}'" + raise CeedlingException.new(error) + + else + # Otherwise simply return empty results + return {} end end + + # Handle if both files exists and return the newer results + if pass_exists and fail_exists + if @file_wrapper.newer?( pass_path, fail_path ) + return @yaml_wrapper.load( pass_path ) + else + return @yaml_wrapper.load( fail_path ) + end + end + + # Return success results + return @yaml_wrapper.load(pass_path) if pass_exists + + # Return fail results + return @yaml_wrapper.load(fail_path) if fail_exists + # Safety fall-through (flow control should never get here) return {} end - - def process_results(aggregate_results, results) + def process_results(aggregate, results) return if (results.empty?) - aggregate_results[:successes] << { :source => results[:source].clone, :collection => results[:successes].clone } if (results[:successes].size > 0) - aggregate_results[:failures] << { :source => results[:source].clone, :collection => results[:failures].clone } if (results[:failures].size > 0) - aggregate_results[:ignores] << { :source => results[:source].clone, :collection => results[:ignores].clone } if (results[:ignores].size > 0) - aggregate_results[:stdout] << { :source => results[:source].clone, :collection => results[:stdout].clone } if (results[:stdout].size > 0) - aggregate_results[:counts][:total] += results[:counts][:total] - aggregate_results[:counts][:passed] += results[:counts][:passed] - aggregate_results[:counts][:failed] += results[:counts][:failed] - aggregate_results[:counts][:ignored] += results[:counts][:ignored] - aggregate_results[:counts][:stdout] += results[:stdout].size - aggregate_results[:time] += results[:time] + aggregate[:times][(results[:source][:file])] = results[:time] + aggregate[:successes] << { :source => results[:source].clone, :collection => results[:successes].clone } if (results[:successes].size > 0) + aggregate[:failures] << { :source => results[:source].clone, :collection => results[:failures].clone } if (results[:failures].size > 0) + aggregate[:ignores] << { :source => results[:source].clone, :collection => results[:ignores].clone } if (results[:ignores].size > 0) + aggregate[:stdout] << { :source => results[:source].clone, :collection => results[:stdout].clone } if (results[:stdout].size > 0) + aggregate[:counts][:total] += results[:counts][:total] + aggregate[:counts][:passed] += results[:counts][:passed] + aggregate[:counts][:failed] += results[:counts][:failed] + aggregate[:counts][:ignored] += results[:counts][:ignored] + aggregate[:counts][:stdout] += results[:stdout].size + aggregate[:total_time] += results[:time] end + def run_report(template, hash, verbosity) + output = ERB.new( template, trim_mode: "%<>" ) - def run_report(stream, template, hash, verbosity) - output = ERB.new(template, trim_mode: "%<>") - @streaminator.stream_puts(stream, output.result(binding()), verbosity) + # Run the report template and log result with no log level heading + @loginator.log( output.result(binding()), verbosity, LogLabels::NONE ) end end diff --git a/tools/vendor/ceedling/lib/ceedling/preprocessinator.rb b/tools/vendor/ceedling/lib/ceedling/preprocessinator.rb index 36525508..c1d410be 100644 --- a/tools/vendor/ceedling/lib/ceedling/preprocessinator.rb +++ b/tools/vendor/ceedling/lib/ceedling/preprocessinator.rb @@ -1,3 +1,9 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= class Preprocessinator @@ -8,10 +14,10 @@ class Preprocessinator :file_path_utils, :file_wrapper, :yaml_wrapper, - :project_config_manager, + :plugin_manager, :configurator, :test_context_extractor, - :streaminator, + :loginator, :reportinator, :rake_wrapper @@ -22,81 +28,150 @@ def setup @file_handler = @preprocessinator_file_handler end - def extract_test_build_directives(filepath:) - # Parse file in Ruby to extract build directives - msg = @reportinator.generate_progress( "Parsing #{File.basename(filepath)}" ) - @streaminator.stdout_puts( msg, Verbosity::NORMAL ) - @test_context_extractor.collect_build_directives( filepath ) - end - def extract_testing_context(filepath:, test:, flags:, include_paths:, defines:) - if (not @configurator.project_use_test_preprocessor) - # Parse file in Ruby to extract testing details (e.g. header files, mocks, etc.) - msg = @reportinator.generate_progress( "Parsing & processing #include statements within #{File.basename(filepath)}" ) - @streaminator.stdout_puts( msg, Verbosity::NORMAL ) - @test_context_extractor.collect_includes( filepath ) + def preprocess_includes(filepath:, test:, flags:, include_paths:, defines:) + includes_list_filepath = @file_path_utils.form_preprocessed_includes_list_filepath( filepath, test ) + + includes = [] + if @file_wrapper.newer?(includes_list_filepath, filepath) + msg = @reportinator.generate_module_progress( + operation: "Loading #include statement listing file for", + module_name: test, + filename: File.basename(filepath) + ) + @loginator.log( msg, Verbosity::NORMAL ) + + # Note: It's possible empty YAML content returns nil + includes = @yaml_wrapper.load( includes_list_filepath ) + + msg = "Loaded existing #include list from #{includes_list_filepath}:" + + if includes.nil? or includes.empty? + # Ensure includes defaults to emtpy array to prevent external iteration problems + includes = [] + msg += ' ' + else + includes.each { |include| msg += "\n - #{include}" } + end + + @loginator.log( msg, Verbosity::DEBUG ) + @loginator.log( '', Verbosity::DEBUG ) else - # Run test file through preprocessor to parse out include statements and then collect header files, mocks, etc. - includes = preprocess_includes( + includes = @includes_handler.extract_includes( filepath: filepath, test: test, flags: flags, include_paths: include_paths, - defines: defines) + defines: defines + ) - msg = @reportinator.generate_progress( "Processing #include statements for #{File.basename(filepath)}" ) - @streaminator.stdout_puts( msg, Verbosity::NORMAL ) + msg = "Extracted #include list from #{filepath}:" - @test_context_extractor.ingest_includes( filepath, includes ) + if includes.nil? or includes.empty? + # Ensure includes defaults to emtpy array to prevent external iteration problems + includes = [] + msg += ' ' + else + includes.each { |include| msg += "\n - #{include}" } + end + + @loginator.log( msg, Verbosity::DEBUG ) + @loginator.log( '', Verbosity::DEBUG ) + + @includes_handler.write_includes_list( includes_list_filepath, includes ) end + + return includes end - def preprocess_header_file(filepath:, test:, flags:, include_paths:, defines:) - # Extract shallow includes & print status message - includes = preprocess_file_common( - filepath: filepath, - test: test, - flags: flags, - include_paths: include_paths, - defines: defines - ) + + def preprocess_mockable_header_file(filepath:, test:, flags:, include_paths:, defines:) + preprocessed_filepath = @file_path_utils.form_preprocessed_file_filepath( filepath, test ) + + plugin_arg_hash = { + header_file: filepath, + preprocessed_header_file: preprocessed_filepath, + test: test, + flags: flags, + include_paths: include_paths, + defines: defines + } + + # Trigger pre_mock_preprocessing plugin hook + @plugin_manager.pre_mock_preprocess( plugin_arg_hash ) + + arg_hash = { + filepath: filepath, + test: test, + flags: flags, + include_paths: include_paths, + defines: defines + } + + # Extract shallow includes & print status message + includes = preprocess_file_common( **arg_hash ) + + arg_hash = { + source_filepath: filepath, + preprocessed_filepath: preprocessed_filepath, + includes: includes, + flags: flags, + include_paths: include_paths, + defines: defines + } # Run file through preprocessor & further process result - return @file_handler.preprocess_header_file( - filepath: filepath, - subdir: test, - includes: includes, - flags: flags, - include_paths: include_paths, - defines: defines - ) + plugin_arg_hash[:shell_result] = @file_handler.preprocess_header_file( **arg_hash ) + + # Trigger post_mock_preprocessing plugin hook + @plugin_manager.post_mock_preprocess( plugin_arg_hash ) + + return preprocessed_filepath end + def preprocess_test_file(filepath:, test:, flags:, include_paths:, defines:) - # Extract shallow includes & print status message - includes = preprocess_file_common( + preprocessed_filepath = @file_path_utils.form_preprocessed_file_filepath( filepath, test ) + + plugin_arg_hash = { + test_file: filepath, + preprocessed_test_file: preprocessed_filepath, + test: test, + flags: flags, + include_paths: include_paths, + defines: defines + } + + # Trigger pre_test_preprocess plugin hook + @plugin_manager.pre_test_preprocess( plugin_arg_hash ) + + arg_hash = { filepath: filepath, test: test, flags: flags, include_paths: include_paths, - defines: defines - ) + defines: defines + } + + # Extract shallow includes & print status message + includes = preprocess_file_common( **arg_hash ) + + arg_hash = { + source_filepath: filepath, + preprocessed_filepath: preprocessed_filepath, + includes: includes, + flags: flags, + include_paths: include_paths, + defines: defines + } # Run file through preprocessor & further process result - return @file_handler.preprocess_test_file( - filepath: filepath, - subdir: test, - includes: includes, - flags: flags, - include_paths: include_paths, - defines: defines - ) - end + plugin_arg_hash[:shell_result] = @file_handler.preprocess_test_file( **arg_hash ) - def preprocess_file_directives(filepath) - @includes_handler.invoke_shallow_includes_list( filepath ) - @file_handler.preprocess_file_directives( filepath, - @yaml_wrapper.load( @file_path_utils.form_preprocessed_includes_list_filepath( filepath ) ) ) + # Trigger pre_mock_preprocessing plugin hook + @plugin_manager.post_test_preprocess( plugin_arg_hash ) + + return preprocessed_filepath end ### Private ### @@ -109,7 +184,7 @@ def preprocess_file_common(filepath:, test:, flags:, include_paths:, defines:) filename: File.basename(filepath) ) - @streaminator.stdout_puts(msg, Verbosity::NORMAL) + @loginator.log( msg, Verbosity::NORMAL ) # Extract includes includes = preprocess_includes( @@ -122,32 +197,4 @@ def preprocess_file_common(filepath:, test:, flags:, include_paths:, defines:) return includes end - def preprocess_includes(filepath:, test:, flags:, include_paths:, defines:) - includes_list_filepath = @file_path_utils.form_preprocessed_includes_list_filepath( filepath, test ) - - includes = [] - - if @file_wrapper.newer?(includes_list_filepath, filepath) - msg = @reportinator.generate_module_progress( - operation: "Loading #include statement listing file for", - module_name: test, - filename: File.basename(filepath) - ) - @streaminator.stdout_puts( msg, Verbosity::NORMAL ) - includes = @yaml_wrapper.load(includes_list_filepath) - else - includes = @includes_handler.extract_includes( - filepath: filepath, - test: test, - flags: flags, - include_paths: include_paths, - defines: defines - ) - - @includes_handler.write_includes_list(includes_list_filepath, includes) - end - - return includes - end - end diff --git a/tools/vendor/ceedling/lib/ceedling/preprocessinator_extractor.rb b/tools/vendor/ceedling/lib/ceedling/preprocessinator_extractor.rb index 62026e15..30753f20 100644 --- a/tools/vendor/ceedling/lib/ceedling/preprocessinator_extractor.rb +++ b/tools/vendor/ceedling/lib/ceedling/preprocessinator_extractor.rb @@ -1,3 +1,10 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + class PreprocessinatorExtractor def extract_base_file_from_preprocessed_expansion(filepath) # preprocessing by way of toolchain preprocessor expands macros, eliminates @@ -8,7 +15,6 @@ def extract_base_file_from_preprocessed_expansion(filepath) # iterate through all lines and alternate between extract and ignore modes # all lines between a '#'line containing file name of our filepath and the # next '#'line should be extracted - base_name = File.basename(filepath) not_pragma = /^#(?!pragma\b)/ # preprocessor directive that's not a #pragma pattern = /^#.*(\s|\/|\\|\")#{Regexp.escape(base_name)}/ diff --git a/tools/vendor/ceedling/lib/ceedling/preprocessinator_file_handler.rb b/tools/vendor/ceedling/lib/ceedling/preprocessinator_file_handler.rb index bb810374..d8879eba 100644 --- a/tools/vendor/ceedling/lib/ceedling/preprocessinator_file_handler.rb +++ b/tools/vendor/ceedling/lib/ceedling/preprocessinator_file_handler.rb @@ -1,25 +1,27 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= class PreprocessinatorFileHandler - constructor :preprocessinator_extractor, :configurator, :flaginator, :tool_executor, :file_path_utils, :file_wrapper, :streaminator + constructor :preprocessinator_extractor, :configurator, :flaginator, :tool_executor, :file_path_utils, :file_wrapper, :loginator - def preprocess_header_file(filepath:, subdir:, includes:, flags:, include_paths:, defines:) - preprocessed_filepath = @file_path_utils.form_preprocessed_file_filepath( filepath, subdir ) - - filename = File.basename(filepath) + def preprocess_header_file(source_filepath:, preprocessed_filepath:, includes:, flags:, include_paths:, defines:) + filename = File.basename(source_filepath) command = @tool_executor.build_command_line( @configurator.tools_test_file_preprocessor, flags, - filepath, + source_filepath, preprocessed_filepath, defines, include_paths - ) + ) - @tool_executor.exec( command[:line], command[:options] ) - - @streaminator.stdout_puts("Command: #{command}", Verbosity::DEBUG) + shell_result = @tool_executor.exec( command ) contents = @preprocessinator_extractor.extract_base_file_from_preprocessed_expansion( preprocessed_filepath ) @@ -38,7 +40,7 @@ def preprocess_header_file(filepath:, subdir:, includes:, flags:, include_paths: guardname = '_' + filename.gsub(/\W/, '_').upcase + '_' forward_guards = [ - "#ifndef #{guardname} // Ceedling-generated guard", + "#ifndef #{guardname} // Ceedling-generated include guard", "#define #{guardname}", '' ] @@ -56,27 +58,29 @@ def preprocess_header_file(filepath:, subdir:, includes:, flags:, include_paths: # ---------------------------------------------------- contents = contents.join("\n") contents.gsub!( /(\h*\n){3,}/, "\n\n" ) + + # Remove paths from expanded #include directives + # ---------------------------------------------------- + # - We rely on search paths at compilation rather than explicit #include paths + # - Match (#include ")((path/)+)(file") and reassemble string using first and last matching groups + contents.gsub!( /(#include\s+")(([^\/]+\/)+)(.+")/, '\1\4' ) @file_wrapper.write( preprocessed_filepath, contents ) - return preprocessed_filepath + return shell_result end - def preprocess_test_file(filepath:, subdir:, includes:, flags:, include_paths:, defines:) - preprocessed_filepath = @file_path_utils.form_preprocessed_file_filepath( filepath, subdir ) - + def preprocess_test_file(source_filepath:, preprocessed_filepath:, includes:, flags:, include_paths:, defines:) command = @tool_executor.build_command_line( @configurator.tools_test_file_preprocessor, flags, - filepath, + source_filepath, preprocessed_filepath, defines, include_paths - ) + ) - @tool_executor.exec( command[:line], command[:options] ) - - @streaminator.stdout_puts("Command: #{command}", Verbosity::DEBUG) + shell_result = @tool_executor.exec( command ) contents = @preprocessinator_extractor.extract_base_file_from_preprocessed_expansion( preprocessed_filepath ) @@ -103,26 +107,7 @@ def preprocess_test_file(filepath:, subdir:, includes:, flags:, include_paths:, @file_wrapper.write( preprocessed_filepath, contents ) - return preprocessed_filepath - end - - - def preprocess_file_directives(filepath, includes) - preprocessed_filepath = @file_path_utils.form_preprocessed_file_filepath(filepath) - - command = - @tool_executor.build_command_line( @configurator.tools_test_file_preprocessor_directives, - @flaginator.flag_down( OPERATION_COMPILE_SYM, TEST_SYM, filepath ), - filepath, - preprocessed_filepath) - - @tool_executor.exec(command[:line], command[:options]) - - contents = @preprocessinator_extractor.extract_base_file_from_preprocessed_directives(preprocessed_filepath) - - includes.each{|include| contents.unshift("#include \"#{include}\"")} - - @file_wrapper.write(preprocessed_filepath, contents.join("\n")) + return shell_result end end diff --git a/tools/vendor/ceedling/lib/ceedling/preprocessinator_includes_handler.rb b/tools/vendor/ceedling/lib/ceedling/preprocessinator_includes_handler.rb index 747b402a..3f01f7ca 100644 --- a/tools/vendor/ceedling/lib/ceedling/preprocessinator_includes_handler.rb +++ b/tools/vendor/ceedling/lib/ceedling/preprocessinator_includes_handler.rb @@ -1,44 +1,52 @@ - +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= class PreprocessinatorIncludesHandler - constructor :configurator, :tool_executor, :test_context_extractor, :yaml_wrapper, :streaminator, :reportinator + constructor :configurator, :tool_executor, :test_context_extractor, :yaml_wrapper, :loginator, :reportinator ## ## Includes Extraction Overview ## ============================ ## ## BACKGROUND - ## #include extraction is hard to do. In simple cases a regex approach suffices. Not all the uncommon nested - ## header files, clever macros, and conditional preprocessing statements introduce high complexity. + ## -------- + ## #include extraction is hard to do. In simple cases a regex approach suffices, but nested header files, + ## clever macros, and conditional preprocessing statements easily introduce high complexity. ## - ## Unfortunately, there's no easily available C parsing tool that provides a simple means to extract the - ## #include statements directly embedded in a given file. Even the gcc preprocessor itself only comes close - ## to providing this information. + ## Unfortunately, there's no readily available cross-platform C parsing tool that provides a simple means + ## to extract the #include statements directly embedded in a given file. Even the gcc preprocessor itself + ## only comes close to providing this information externally. ## ## APPROACH ## -------- ## (Full details including fallback options are in the extensive code comments among the methods below.) ## ## Sadly, we can't preprocess a file with full search paths and defines and ask for the #include statements - ## embedded in a file. We get far more #includes than we want with no was to discern which are at the depth + ## embedded in a file. We get far more #includes than we want with no way to discern which are at the depth ## of the file being processed. ## ## Instead, we try our best to use some educated guessing to get as close as possible to the desired list. ## - ## I. Try to extract shallow defines with no crawling out into other header files. This gives us a - ## reference point on possible directly included files. The results may be incomplete, though. They - ## also may mistakenly list #includes that should not be in the list--because of #ifndef defaults or + ## I. Try to extract shallow defines with no crawling out into other header files. This conservative approach + ## gives us a reference point on possible directly included files. The results may be incomplete, though. + ## They also may mistakenly list #includes that should not be in the list--because of #ifndef defaults or ## because of system headers or #include <...> statements and differences among gcc implementations. ## ## II. Extract a full list of #includes by spidering out into nested headers and processing all macros, etc. + ## This is the greedy approach. ## - ## III. Find #includes common to (I) and (II). THe results of (I) should limit the potentially lengthy + ## III. Find #includes common to (I) and (II). The results of (I) should limit the potentially lengthy ## results of (II). The complete and accurate list of (II) should cut out any mistaken entries in (I). ## - ## IV. I–III are not foolproof. This approach should come quite close to an accurate list of shallow - ## includes. Edge cases and gaps will cause trouble. Other Ceedling features should provide the tools - ## to intervene. + ## IV. I–III are not foolproof. A purely greedy approach or a purely conservative approach will cause symbol + ## conflicts, missing symbols, etc. The blended and balanced approach should come quite close to an + ## accurate list of shallow includes. Edge cases and gaps will cause trouble. Other Ceedling features + ## should provide the tools to intervene. ## def extract_includes(filepath:, test:, flags:, include_paths:, defines:) @@ -47,7 +55,7 @@ def extract_includes(filepath:, test:, flags:, include_paths:, defines:) module_name: test, filename: File.basename(filepath) ) - @streaminator.stdout_puts(msg, Verbosity::NORMAL) + @loginator.log(msg, Verbosity::NORMAL) # Extract shallow includes with preprocessor and fallback regex shallow = extract_shallow_includes( @@ -177,10 +185,10 @@ def extract_shallow_includes_preprocessor(test:, filepath:, flags:, defines:) defines ) - @streaminator.stdout_puts("Command: #{command}", Verbosity::DEBUG) - - command[:options][:boom] = false # Assume errors and do not raise an exception - shell_result = @tool_executor.exec(command[:line], command[:options]) + # Assume possible errors so we have best shot at extracting results from preprocessing. + # Full code compilation will catch any breaking code errors + command[:options][:boom] = false + shell_result = @tool_executor.exec( command ) make_rules = shell_result[:output] @@ -188,7 +196,7 @@ def extract_shallow_includes_preprocessor(test:, filepath:, flags:, defines:) # Look for the first line of the make rule output. if not make_rules =~ make_rule_matcher msg = "Preprocessor #include extraction failed: #{shell_result[:output]}" - @streaminator.stdout_puts(msg, Verbosity::DEBUG) + @loginator.log(msg, Verbosity::DEBUG) return false, [] end @@ -208,10 +216,10 @@ def extract_shallow_includes_regex(test:, filepath:, flags:, defines:) module_name: test, filename: File.basename( filepath ) ) - @streaminator.stdout_puts(msg, Verbosity::NORMAL) + @loginator.log(msg, Verbosity::NORMAL) # Use abilities of @test_context_extractor to extract the #includes via regex on the file - return @test_context_extractor.scan_includes( filepath ) + return @test_context_extractor.extract_includes( filepath ) end def extract_nested_includes(filepath:, include_paths:, flags:, defines:, shallow:false) @@ -232,15 +240,15 @@ def extract_nested_includes(filepath:, include_paths:, flags:, defines:, shallow ## - Files directly #include'd in the file being preprocessed are at depth 1 ('.') ## ## Notes: - ## - Because search paths and defines are provided, error-free executiion is assumed. + ## - Because search paths and defines are provided, error-free execution is assumed. ## If the preprocessor fails, issues exist that will cause full compilation to fail. ## - Unfortuantely, because of ordering and nesting effects, a file directly #include'd may ## not be listed at depth 1 ('.'). Instead, it may end up listed at greater depth beneath ## another #include'd file if both files reference it. That is, there is no way ## to give the preprocessor full context and ask for only the files directly ## #include'd in the file being processed. - ## - The preprocessor outputs the -H #include listing to STDERR. We must redirect to - ## STDOOUT in order to access the full output. + ## - The preprocessor outputs the -H #include listing to STDERR. ToolExecutor does this + ## by default in creating the shell result output. ## - Since we're using search paths, all #included files will include paths. Depending on ## circumstances, this could yield a list with generated mocks with full build paths. ## @@ -272,14 +280,14 @@ def extract_nested_includes(filepath:, include_paths:, flags:, defines:, shallow filepath, include_paths, defines - ) - - # Redirect -H output to STDERR to STDOUT so we can access it in the execution results - command[:options][:stderr_redirect] = StdErrRedirect::AUTO + ) - @streaminator.stdout_puts( "Command: #{command}", Verbosity::DEBUG ) + # Let the preprocessor do as much as possible + # We'll extract nothing if a catastrophic error, but we'll see it in debug logging + # Any real problems will be flagged by actual compilation step + command[:options][:boom] = false - shell_result = @tool_executor.exec( command[:line], command[:options] ) + shell_result = @tool_executor.exec( command ) list = shell_result[:output] diff --git a/tools/vendor/ceedling/lib/ceedling/project_config_manager.rb b/tools/vendor/ceedling/lib/ceedling/project_config_manager.rb deleted file mode 100644 index e0f7089f..00000000 --- a/tools/vendor/ceedling/lib/ceedling/project_config_manager.rb +++ /dev/null @@ -1,45 +0,0 @@ -require 'ceedling/constants' - - -class ProjectConfigManager - - attr_reader :options_files, :release_config_changed, :test_config_changed, :test_defines_changed - attr_accessor :config_hash - - constructor :cacheinator, :configurator, :yaml_wrapper, :file_wrapper - - - def setup - @options_files = [] - @release_config_changed = false - @test_config_changed = false - @test_defines_changed = false - end - - - def merge_options(config_hash, option_filepath) - @options_files << File.basename( option_filepath ) - config_hash.deep_merge!( @yaml_wrapper.load( option_filepath ) ) - end - - - def process_release_config_change - # has project configuration changed since last release build - @release_config_changed = @cacheinator.diff_cached_release_config?( @config_hash ) - end - - - def process_test_config_change - # has project configuration changed since last test build - @test_config_changed = @cacheinator.diff_cached_test_config?( @config_hash ) - end - - def process_test_defines_change(files) - # has definitions changed since last test build - @test_defines_changed = @cacheinator.diff_cached_test_defines?( files ) - if @test_defines_changed - # update timestamp for rake task prerequisites - @file_wrapper.touch( @configurator.project_test_force_rebuild_filepath, :mtime => Time.now + 10 ) - end - end -end diff --git a/tools/vendor/ceedling/lib/ceedling/project_file_loader.rb b/tools/vendor/ceedling/lib/ceedling/project_file_loader.rb deleted file mode 100644 index bf5dcd41..00000000 --- a/tools/vendor/ceedling/lib/ceedling/project_file_loader.rb +++ /dev/null @@ -1,99 +0,0 @@ -require 'ceedling/constants' - - -class ProjectFileLoader - - attr_reader :main_file, :user_file - - constructor :yaml_wrapper, :stream_wrapper, :system_wrapper, :file_wrapper - - def setup - @main_file = nil - @mixin_files = [] - @user_file = nil - - @main_project_filepath = '' - @mixin_project_filepaths = [] - @user_project_filepath = '' - end - - - def find_project_files - # first go hunting for optional user project file by looking for environment variable and then default location on disk - user_filepath = @system_wrapper.env_get('CEEDLING_USER_PROJECT_FILE') - - if ( not user_filepath.nil? and @file_wrapper.exist?(user_filepath) ) - @user_project_filepath = user_filepath - elsif (@file_wrapper.exist?(DEFAULT_CEEDLING_USER_PROJECT_FILE)) - @user_project_filepath = DEFAULT_CEEDLING_USER_PROJECT_FILE - end - - # next check for mixin project files by looking for environment variable - mixin_filepaths = @system_wrapper.env_get('CEEDLING_MIXIN_PROJECT_FILES') - if ( not mixin_filepaths.nil? ) - mixin_filepaths.split(File::PATH_SEPARATOR).each do |filepath| - if ( @file_wrapper.exist?(filepath) ) - @mixin_project_filepaths.push(filepath) - end - end - end - - # next check for main project file by looking for environment variable and then default location on disk; - # blow up if we don't find this guy -- like, he's so totally important - main_filepath = @system_wrapper.env_get('CEEDLING_MAIN_PROJECT_FILE') - - if ( not main_filepath.nil? and @file_wrapper.exist?(main_filepath) ) - @main_project_filepath = main_filepath - elsif (@file_wrapper.exist?(DEFAULT_CEEDLING_MAIN_PROJECT_FILE)) - @main_project_filepath = DEFAULT_CEEDLING_MAIN_PROJECT_FILE - else - # no verbosity checking since this is lowest level reporting anyhow & - # verbosity checking depends on configurator which in turns needs this class (circular dependency) - @stream_wrapper.stderr_puts('Found no Ceedling project file (*.yml)') - raise - end - - @main_file = File.basename( @main_project_filepath ) - @mixin_project_filepaths.each do |filepath| - @mixin_files.push(File.basename( filepath )) - end - @user_file = File.basename( @user_project_filepath ) if ( not @user_project_filepath.empty? ) - end - - def yaml_merger(y1, y2) - o1 = y1 - y2.each_pair do |k,v| - if o1[k].nil? - o1[k] = v - else - if (o1[k].instance_of? Hash) - o1[k] = yaml_merger(o1[k], v) - elsif (o1[k].instance_of? Array) - o1[k] += v - else - o1[k] = v - end - end - end - return o1 - end - - def load_project_config - config_hash = @yaml_wrapper.load(@main_project_filepath) - - # if there are mixin project files, then use them - @mixin_project_filepaths.each do |filepath| - mixin = @yaml_wrapper.load(filepath) - config_hash = yaml_merger( config_hash, mixin ) - end - - # if there's a user project file, then use it - if ( not @user_project_filepath.empty? ) - user_hash = @yaml_wrapper.load(@user_project_filepath) - config_hash = yaml_merger( config_hash, user_hash ) - end - - return config_hash - end - -end diff --git a/tools/vendor/ceedling/lib/ceedling/rake_utils.rb b/tools/vendor/ceedling/lib/ceedling/rake_utils.rb index 3f667c85..742f6cac 100644 --- a/tools/vendor/ceedling/lib/ceedling/rake_utils.rb +++ b/tools/vendor/ceedling/lib/ceedling/rake_utils.rb @@ -1,3 +1,9 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= class RakeUtils diff --git a/tools/vendor/ceedling/lib/ceedling/rake_wrapper.rb b/tools/vendor/ceedling/lib/ceedling/rake_wrapper.rb index 15e47961..75d095dc 100644 --- a/tools/vendor/ceedling/lib/ceedling/rake_wrapper.rb +++ b/tools/vendor/ceedling/lib/ceedling/rake_wrapper.rb @@ -1,3 +1,10 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + require 'rubygems' require 'rake' require 'ceedling/makefile' # our replacement for rake's make-style dependency loader diff --git a/tools/vendor/ceedling/lib/ceedling/rakefile.rb b/tools/vendor/ceedling/lib/ceedling/rakefile.rb index 583867ee..c0689047 100644 --- a/tools/vendor/ceedling/lib/ceedling/rakefile.rb +++ b/tools/vendor/ceedling/lib/ceedling/rakefile.rb @@ -1,89 +1,146 @@ -require 'fileutils' +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= -# get directory containing this here file, back up one directory, and expand to full path -CEEDLING_ROOT = File.expand_path(File.dirname(__FILE__) + '/../..') -CEEDLING_LIB = File.join(CEEDLING_ROOT, 'lib') -CEEDLING_VENDOR = File.join(CEEDLING_ROOT, 'vendor') -CEEDLING_RELEASE = File.join(CEEDLING_ROOT, 'release') +require 'fileutils' -$LOAD_PATH.unshift( CEEDLING_LIB ) -$LOAD_PATH.unshift( File.join(CEEDLING_VENDOR, 'unity/auto') ) -$LOAD_PATH.unshift( File.join(CEEDLING_VENDOR, 'diy/lib') ) -$LOAD_PATH.unshift( File.join(CEEDLING_VENDOR, 'cmock/lib') ) +# Add Unity and CMock's Ruby code paths to $LOAD_PATH for runner generation and mocking +$LOAD_PATH.unshift( File.join( CEEDLING_APPCFG[:ceedling_vendor_path], 'unity/auto') ) +$LOAD_PATH.unshift( File.join( CEEDLING_APPCFG[:ceedling_vendor_path], 'cmock/lib') ) require 'rake' -#Let's make sure we remember the task descriptions in case we need them +# Let's make sure we remember the task descriptions in case we need them Rake::TaskManager.record_task_metadata = true -require 'diy' -require 'constructor' -require 'ceedling/constants' -require 'ceedling/target_loader' -require 'deep_merge' - -# construct all our objects -# ensure load path contains all libraries needed first -lib_ceedling_load_path_temp = File.join(CEEDLING_LIB, 'ceedling') -$LOAD_PATH.unshift( lib_ceedling_load_path_temp ) -@ceedling = DIY::Context.from_yaml( File.read( File.join(lib_ceedling_load_path_temp, 'objects.yml') ) ) -@ceedling.build_everything -# now that all objects are built, delete 'lib/ceedling' from load path -$LOAD_PATH.delete(lib_ceedling_load_path_temp) -# one-stop shopping for all our setup and such after construction -@ceedling[:setupinator].ceedling = @ceedling - -project_config = - begin - cfg = @ceedling[:setupinator].load_project_files - TargetLoader.inspect(cfg, ENV['TARGET']) - rescue TargetLoader::NoTargets - cfg - rescue TargetLoader::RequestReload - @ceedling[:setupinator].load_project_files - end +require 'ceedling/system_wrapper' +require 'ceedling/reportinator' + +# Operation duration logging +def log_runtime(run, start_time_s, end_time_s, enabled) + return if !enabled + return if !defined?(PROJECT_VERBOSITY) + return if (PROJECT_VERBOSITY < Verbosity::NORMAL) + + duration = Reportinator.generate_duration( start_time_s: start_time_s, end_time_s: end_time_s ) + + return if duration.empty? -@ceedling[:setupinator].do_setup( project_config ) - -# Configure Ruby's default reporting for Thread exceptions. -unless @ceedling[:configurator].project_verbosity == Verbosity::DEBUG - # In Ceedling's case thread scenarios will fall into these buckets: - # 1. Jobs shut down cleanly - # 2. Jobs shut down at garbage collected after a build step terminates with an error - # - # Since Ceedling is not a daemon, server app, or something to run continuously, - # we can safely disable forced exception reporting. - Thread.report_on_exception = false + @ceedling[:loginator].log() # Blank line + @ceedling[:loginator].log( "Ceedling #{run} completed in #{duration}", Verbosity::NORMAL) end -# tell all our plugins we're about to do something -@ceedling[:plugin_manager].pre_build +start_time = nil # Outside scope of exception handling + +# Top-level exception handling for any otherwise un-handled exceptions, particularly around startup +begin + # Redefine start_time with actual timestamp before set up begins + start_time = SystemWrapper.time_stopwatch_s() + + # Construct all objects + # 1. Add full path to $LOAD_PATH to simplify objects.yml + # 2. Perform object construction + dependency injection + # 3. Remove full path from $LOAD_PATH + $LOAD_PATH.unshift( CEEDLING_APPCFG[:ceedling_lib_path] ) + objects_filepath = File.join( CEEDLING_APPCFG[:ceedling_lib_path], 'objects.yml' ) + + # Create object hash and dependency injection context + @ceedling = {} # Empty hash to be redefined if all goes well + @ceedling = DIY::Context.from_yaml( File.read( objects_filepath ) ) + + # Inject objects already insatantiated from bin/ bootloader before building the rest + CEEDLING_HANDOFF_OBJECTS.each_pair {|name,obj| @ceedling.set_object( name.to_s, obj )} + + # Build Ceedling application's objects + @ceedling.build_everything() + + # Simplify load path after construction + $LOAD_PATH.delete( CEEDLING_APPCFG[:ceedling_lib_path] ) + + # One-stop shopping for all our setup and such after construction + @ceedling[:setupinator].ceedling = @ceedling + @ceedling[:setupinator].do_setup( CEEDLING_APPCFG ) + + setup_done = SystemWrapper.time_stopwatch_s() + log_runtime( 'set up', start_time, setup_done, CEEDLING_APPCFG[:stopwatch] ) + + # Configure high-level verbosity + unless defined?(PROJECT_DEBUG) and PROJECT_DEBUG + # Configure Ruby's default reporting for Thread exceptions. + # In Ceedling's case thread scenarios will fall into these buckets: + # 1. Jobs shut down cleanly + # 2. Jobs shut down at garbage collected after a build step terminates with an error + # + # Since Ceedling is not a daemon, server app, or something to run continuously, + # we can safely disable forced exception reporting. + Thread.report_on_exception = false + + # Tell Rake to shut up by default unless we're in DEBUG + verbose(false) + Rake.application.options.silent = true + + # Remove all Rake backtrace + Rake.application.options.suppress_backtrace_pattern = /.*/ + end + + # Reset start_time before operations begins + start_time = SystemWrapper.time_stopwatch_s() + + # Tell all our plugins we're about to do something + @ceedling[:plugin_manager].pre_build -# load rakefile component files (*.rake) -PROJECT_RAKEFILE_COMPONENT_FILES.each { |component| load(component) } + # load rakefile component files (*.rake) + PROJECT_RAKEFILE_COMPONENT_FILES.each { |component| load(component) } +rescue StandardError => ex + boom_handler( @ceedling[:loginator], ex ) + exit(1) +end -# tell rake to shut up by default (overridden in verbosity / debug tasks as appropriate) -verbose(false) +def test_failures_handler() + graceful_fail = CEEDLING_APPCFG[:tests_graceful_fail] + # $stdout test reporting plugins store test failures + exit(1) if @ceedling[:plugin_manager].plugins_failed? && !graceful_fail +end -# end block always executed following rake run +# End block always executed following rake run END { $stdout.flush unless $stdout.nil? $stderr.flush unless $stderr.nil? - # cache our input configurations to use in comparison upon next execution + # Cache our input configurations to use in comparison upon next execution @ceedling[:cacheinator].cache_test_config( @ceedling[:setupinator].config_hash ) if (@ceedling[:task_invoker].test_invoked?) @ceedling[:cacheinator].cache_release_config( @ceedling[:setupinator].config_hash ) if (@ceedling[:task_invoker].release_invoked?) - # only perform these final steps if we got here without runtime exceptions or errors - if (@ceedling[:system_wrapper].ruby_success) - - # tell all our plugins the build is done and process results - @ceedling[:plugin_manager].post_build - @ceedling[:plugin_manager].print_plugin_failures - exit(1) if (@ceedling[:plugin_manager].plugins_failed? && !@ceedling[:setupinator].config_hash[:graceful_fail]) + # Only perform these final steps if we got here without runtime exceptions or errors + if (@ceedling[:application].build_succeeded?) + # Tell all our plugins the build is done and process results + begin + @ceedling[:plugin_manager].post_build + @ceedling[:plugin_manager].print_plugin_failures + ops_done = SystemWrapper.time_stopwatch_s() + log_runtime( 'operations', start_time, ops_done, CEEDLING_APPCFG[:stopwatch] ) + test_failures_handler() if (@ceedling[:task_invoker].test_invoked? || @ceedling[:task_invoker].invoked?(/^gcov:/)) + rescue => ex + ops_done = SystemWrapper.time_stopwatch_s() + log_runtime( 'operations', start_time, ops_done, CEEDLING_APPCFG[:stopwatch] ) + boom_handler( @ceedling[:loginator], ex ) + exit(1) + end + + exit(0) else - puts "ERROR: Ceedling Failed" - @ceedling[:plugin_manager].post_error + msg = "Ceedling could not complete operations because of errors" + @ceedling[:loginator].log( msg, Verbosity::ERRORS, LogLabels::TITLE ) + begin + @ceedling[:plugin_manager].post_error + rescue => ex + boom_handler( @ceedling[:loginator], ex) + ensure + exit(1) + end end } diff --git a/tools/vendor/ceedling/lib/ceedling/release_invoker.rb b/tools/vendor/ceedling/lib/ceedling/release_invoker.rb index 34bb5149..64c3d8b1 100644 --- a/tools/vendor/ceedling/lib/ceedling/release_invoker.rb +++ b/tools/vendor/ceedling/lib/ceedling/release_invoker.rb @@ -1,37 +1,24 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + require 'ceedling/constants' class ReleaseInvoker - constructor :configurator, :release_invoker_helper, :build_invoker_utils, :dependinator, :task_invoker, :file_path_utils, :file_wrapper - - - def setup_and_invoke_c_objects( c_files ) - objects = @file_path_utils.form_release_build_c_objects_filelist( c_files ) - - begin - @task_invoker.invoke_release_objects( objects ) - rescue => e - @build_invoker_utils.process_exception( e, RELEASE_SYM, false ) - end - - return objects - end - + constructor :configurator, :release_invoker_helper, :dependinator, :task_invoker, :file_path_utils, :file_wrapper - def setup_and_invoke_asm_objects( asm_files ) - objects = @file_path_utils.form_release_build_asm_objects_filelist( asm_files ) - - begin - @task_invoker.invoke_release_objects( objects ) - rescue => e - @build_invoker_utils.process_exception( e, RELEASE_SYM, false ) - end + def setup_and_invoke_objects( files ) + objects = @file_path_utils.form_release_build_objects_filelist( files ) + @task_invoker.invoke_release_objects( objects ) return objects end - def artifactinate( *files ) files.flatten.each do |file| @file_wrapper.cp( file, @configurator.project_release_artifacts_path ) if @file_wrapper.exist?( file ) diff --git a/tools/vendor/ceedling/lib/ceedling/release_invoker_helper.rb b/tools/vendor/ceedling/lib/ceedling/release_invoker_helper.rb index f83a2a53..2c0dba27 100644 --- a/tools/vendor/ceedling/lib/ceedling/release_invoker_helper.rb +++ b/tools/vendor/ceedling/lib/ceedling/release_invoker_helper.rb @@ -1,19 +1,12 @@ - +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= class ReleaseInvokerHelper constructor :configurator, :dependinator, :task_invoker - - def process_deep_dependencies(dependencies_list) - return if (not @configurator.project_use_deep_dependencies) - - if @configurator.project_generate_deep_dependencies - @dependinator.enhance_release_file_dependencies( dependencies_list ) - @task_invoker.invoke_release_dependencies_files( dependencies_list ) - end - - @dependinator.load_release_object_deep_dependencies( dependencies_list ) - end - end diff --git a/tools/vendor/ceedling/lib/ceedling/reportinator.rb b/tools/vendor/ceedling/lib/ceedling/reportinator.rb index 77761a8c..0c83dee4 100644 --- a/tools/vendor/ceedling/lib/ceedling/reportinator.rb +++ b/tools/vendor/ceedling/lib/ceedling/reportinator.rb @@ -1,7 +1,74 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + +require 'unicode/display_width' + ## # Pretifies reports class Reportinator + # Generate human readable string of days, hours, minutes, seconds (and + # milliseconds) from a start count of seconds and end count of seconds. + def self.generate_duration(start_time_s:, end_time_s:) + return '' if start_time_s.nil? or end_time_s.nil? + + # Calculate duration as integer milliseconds + duration_ms = ((end_time_s - start_time_s) * 1000).to_i + + # Collect human readable time string tidbits + duration = [] + + # Singular / plural whole days + if duration_ms >= DurationCounts::DAY_MS + days = duration_ms / DurationCounts::DAY_MS + duration << "#{days} day#{'s' if days > 1}" + duration_ms -= (days * DurationCounts::DAY_MS) + # End duration string if remainder is less than 1 second (e.g. no 2 days 13 milliseconds) + duration_ms = 0 if duration_ms < 1000 + end + + # Singular / plural whole hours + if duration_ms >= DurationCounts::HOUR_MS + hours = duration_ms / DurationCounts::HOUR_MS + duration << "#{hours} hour#{'s' if hours > 1}" + duration_ms -= (hours * DurationCounts::HOUR_MS) + # End duration string if remainder is less than 1 second (e.g. no 2 days 13 milliseconds) + duration_ms = 0 if duration_ms < 1000 + end + + # Singular / plural whole minutes + if duration_ms >= DurationCounts::MINUTE_MS + minutes = duration_ms / DurationCounts::MINUTE_MS + duration << "#{minutes} minute#{'s' if minutes > 1}" + duration_ms -= (minutes * DurationCounts::MINUTE_MS) + # End duration string if remainder is less than 1 second (e.g. no 2 days 13 milliseconds) + duration_ms = 0 if duration_ms < 1000 + end + + # Plural fractional seconds (rounded) + if duration_ms >= DurationCounts::SECOND_MS + seconds = (duration_ms.to_f() / 1000.0).round(2) + duration << "#{seconds} seconds" + # End duration string + duration_ms = 0 + end + + # Singular / plural whole milliseconds (only if orginal duration less than 1 second) + if duration_ms > 0 + duration << "#{duration_ms} millisecond#{'s' if duration_ms > 1}" + end + + return duration.join(' ') + end + + def generate_duration(start_time_s:, end_time_s:) + return Reportinator.generate_duration( start_time_s: start_time_s, end_time_s: end_time_s ) + end + ## # Generates a banner for a message based on the length of the message or a # given width. @@ -19,14 +86,17 @@ class Reportinator # # def generate_banner(message, width=nil) - dash_count = ((width.nil?) ? message.strip.length : width) + # --------- + # + # --------- + dash_count = ((width.nil?) ? Unicode::DisplayWidth.of( message.strip ) : width) return "#{'-' * dash_count}\n#{message}\n#{'-' * dash_count}\n" end def generate_heading(message) # # --------- - return "\n#{message}\n#{'-' * message.length}" + return "\n#{message}\n#{'-' * Unicode::DisplayWidth.of( message.strip )}" end def generate_progress(message) @@ -42,4 +112,13 @@ def generate_module_progress(module_name:, filename:, operation:) return generate_progress("#{operation} #{label}#{filename}") end + def generate_config_walk(keys, depth=0) + # :key ↳ :key ↳ :key + + _keys = keys.clone + _keys = _keys.slice(0, depth) if depth > 0 + _keys.reject! { |key| key.nil? } + return _keys.map{|key| ":#{key}"}.join(' ↳ ') + end + end diff --git a/tools/vendor/ceedling/lib/ceedling/rules_release.rake b/tools/vendor/ceedling/lib/ceedling/rules_release.rake index 0bb3b30d..26deeb30 100644 --- a/tools/vendor/ceedling/lib/ceedling/rules_release.rake +++ b/tools/vendor/ceedling/lib/ceedling/rules_release.rake @@ -1,3 +1,9 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= RELEASE_COMPILE_TASK_ROOT = RELEASE_TASK_ROOT + 'compile:' unless defined?(RELEASE_COMPILE_TASK_ROOT) RELEASE_ASSEMBLE_TASK_ROOT = RELEASE_TASK_ROOT + 'assemble:' unless defined?(RELEASE_ASSEMBLE_TASK_ROOT) @@ -14,45 +20,39 @@ if (TOOLS_RELEASE_COMPILER[:executable] == DEFAULT_RELEASE_COMPILER_TOOL[:execut end end -if (RELEASE_BUILD_USE_ASSEMBLY) -rule(/#{PROJECT_RELEASE_BUILD_OUTPUT_ASM_PATH}\/#{'.+\\'+EXTENSION_OBJECT}$/ => [ +rule(/#{PROJECT_RELEASE_BUILD_OUTPUT_PATH}\/#{'.+' + Regexp.escape(EXTENSION_OBJECT)}$/ => [ proc do |task_name| - @ceedling[:file_finder].find_assembly_file(task_name) + @ceedling[:file_finder].find_build_input_file(filepath: task_name, complain: :error, context: RELEASE_SYM) end ]) do |object| - @ceedling[:generator].generate_object_file_asm( - tool: TOOLS_RELEASE_ASSEMBLER, - module_name: File.basename(object.source).ext(), # Source filename as module name - context: RELEASE_SYM, - source: object.source, - object: object.name, - search_paths: COLLECTION_PATHS_SOURCE_AND_INCLUDE, - flags: @ceedling[:flaginator].flag_down( context:RELEASE_SYM, operation:OPERATION_ASSEMBLE_SYM ), - defines: @ceedling[:defineinator].defines( context:RELEASE_SYM ), - list: @ceedling[:file_path_utils].form_release_build_c_list_filepath( object.name ), - dependencies: @ceedling[:file_path_utils].form_release_dependencies_filepath( object.name ) ) -end -end -rule(/#{PROJECT_RELEASE_BUILD_OUTPUT_C_PATH}\/#{'.+\\'+EXTENSION_OBJECT}$/ => [ - proc do |task_name| - @ceedling[:file_finder].find_compilation_input_file(task_name, :error, true) - end - ]) do |object| - @ceedling[:generator].generate_object_file_c( - tool: TOOLS_RELEASE_COMPILER, - module_name: File.basename(object.source).ext(), # Source filename as module name - context: RELEASE_SYM, - source: object.source, - object: object.name, - search_paths: COLLECTION_PATHS_INCLUDE, - flags: @ceedling[:flaginator].flag_down( context:RELEASE_SYM, operation:OPERATION_COMPILE_SYM ), - defines: @ceedling[:defineinator].defines( context:RELEASE_SYM ), - list: @ceedling[:file_path_utils].form_release_build_c_list_filepath( object.name ), - dependencies: @ceedling[:file_path_utils].form_release_dependencies_filepath( object.name ) ) + if @ceedling[:file_wrapper].extname(object.source) != EXTENSION_ASSEMBLY + @ceedling[:generator].generate_object_file_c( + tool: TOOLS_RELEASE_COMPILER, + module_name: File.basename(object.source).ext(), # Source filename as module name + context: RELEASE_SYM, + source: object.source, + object: object.name, + search_paths: COLLECTION_PATHS_INCLUDE, + flags: @ceedling[:flaginator].flag_down( context:RELEASE_SYM, operation:OPERATION_COMPILE_SYM ), + defines: @ceedling[:defineinator].defines( subkey:RELEASE_SYM ), + list: @ceedling[:file_path_utils].form_release_build_list_filepath( object.name ), + dependencies: @ceedling[:file_path_utils].form_release_dependencies_filepath( object.name ) ) + else + @ceedling[:generator].generate_object_file_asm( + tool: TOOLS_RELEASE_ASSEMBLER, + module_name: File.basename(object.source).ext(), # Source filename as module name + context: RELEASE_SYM, + source: object.source, + object: object.name, + search_paths: COLLECTION_PATHS_INCLUDE, + flags: @ceedling[:flaginator].flag_down( context:RELEASE_SYM, operation:OPERATION_ASSEMBLE_SYM ), + defines: @ceedling[:defineinator].defines( subkey:RELEASE_SYM ), + list: @ceedling[:file_path_utils].form_release_build_list_filepath( object.name ), + dependencies: @ceedling[:file_path_utils].form_release_dependencies_filepath( object.name ) ) + end end - rule(/#{PROJECT_RELEASE_BUILD_TARGET}/) do |bin_file| objects, libraries = @ceedling[:release_invoker].sort_objects_and_libraries(bin_file.prerequisites) tool = TOOLS_RELEASE_LINKER.clone @@ -72,34 +72,31 @@ rule(/#{PROJECT_RELEASE_BUILD_TARGET}/) do |bin_file| @ceedling[:release_invoker].artifactinate( bin_file.name, map_file, @ceedling[:configurator].release_build_artifacts ) end - namespace RELEASE_SYM do # use rules to increase efficiency for large projects (instead of iterating through all sources and creating defined tasks) namespace :compile do - rule(/^#{RELEASE_COMPILE_TASK_ROOT}\S+#{'\\'+EXTENSION_SOURCE}$/ => [ # compile task names by regex + rule(/^#{RELEASE_COMPILE_TASK_ROOT}\S+(#{Regexp.escape(EXTENSION_SOURCE)}|#{Regexp.escape(EXTENSION_CORE_SOURCE)})$/ => [ # compile task names by regex proc do |task_name| source = task_name.sub(/#{RELEASE_COMPILE_TASK_ROOT}/, '') - @ceedling[:file_finder].find_source_file(source, :error) + @ceedling[:file_finder].find_source_file(source) end ]) do |compile| - @ceedling[:rake_wrapper][:directories].invoke - @ceedling[:project_config_manager].process_release_config_change - @ceedling[:release_invoker].setup_and_invoke_c_objects( [compile.source] ) + @ceedling[:rake_wrapper][:prepare].invoke + @ceedling[:release_invoker].setup_and_invoke_objects( [compile.source] ) end end if (RELEASE_BUILD_USE_ASSEMBLY) namespace :assemble do - rule(/^#{RELEASE_ASSEMBLE_TASK_ROOT}\S+#{'\\'+EXTENSION_ASSEMBLY}$/ => [ # assemble task names by regex + rule(/^#{RELEASE_ASSEMBLE_TASK_ROOT}\S+#{Regexp.escape(EXTENSION_ASSEMBLY)}$/ => [ # assemble task names by regex proc do |task_name| source = task_name.sub(/#{RELEASE_ASSEMBLE_TASK_ROOT}/, '') @ceedling[:file_finder].find_assembly_file(source) end ]) do |assemble| - @ceedling[:rake_wrapper][:directories].invoke - @ceedling[:project_config_manager].process_release_config_change - @ceedling[:release_invoker].setup_and_invoke_asm_objects( [assemble.source] ) + @ceedling[:rake_wrapper][:prepare].invoke + @ceedling[:release_invoker].setup_and_invoke_objects( [assemble.source] ) end end end diff --git a/tools/vendor/ceedling/lib/ceedling/rules_tests.rake b/tools/vendor/ceedling/lib/ceedling/rules_tests.rake index 14f676e2..786acf6a 100644 --- a/tools/vendor/ceedling/lib/ceedling/rules_tests.rake +++ b/tools/vendor/ceedling/lib/ceedling/rules_tests.rake @@ -1,23 +1,30 @@ - +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= rule(/#{PROJECT_TEST_BUILD_OUTPUT_PATH}\/#{'.+\\' + EXTENSION_OBJECT}$/ => [ proc do |task_name| _, object = (task_name.split('+')) - @ceedling[:file_finder].find_compilation_input_file(object) + @ceedling[:file_finder].find_build_input_file(filepath: object, context: TEST_SYM) end ]) do |target| test, object = (target.name.split('+')) - if (File.basename(target.source) =~ /#{EXTENSION_SOURCE}$/) - @ceedling[:test_invoker].compile_test_component(test: test.to_sym, source: target.source, object: object) - elsif (defined?(TEST_BUILD_USE_ASSEMBLY) && TEST_BUILD_USE_ASSEMBLY) - @ceedling[:generator].generate_object_file( - TOOLS_TEST_ASSEMBLER, - OPERATION_ASSEMBLE_SYM, - TEST_SYM, - object.source, - object.name ) + tool = TOOLS_TEST_COMPILER + + if @ceedling[:file_wrapper].extname(target.source) == EXTENSION_ASSEMBLY + tool = TOOLS_TEST_ASSEMBLER end + + @ceedling[:test_invoker].compile_test_component( + tool: tool, + test: test.to_sym, + source: target.source, + object: object + ) end namespace TEST_SYM do @@ -29,8 +36,6 @@ namespace TEST_SYM do :test_fixture => TOOLS_TEST_FIXTURE } - @ceedling[:unity_utils].create_test_runner_additional_args - # use rules to increase efficiency for large projects (instead of iterating through all sources and creating defined tasks) rule(/^#{TEST_TASK_ROOT}\S+$/ => [ # test task names by regex proc do |task_name| @@ -39,7 +44,7 @@ namespace TEST_SYM do @ceedling[:file_finder].find_test_from_file_path(test) end ]) do |test| - @ceedling[:rake_wrapper][:test_deps].invoke + @ceedling[:rake_wrapper][:prepare].invoke @ceedling[:test_invoker].setup_and_invoke(tests:[test.source], options:{:force_run => true, :build_only => false}.merge(TOOL_COLLECTION_TEST_RULES)) end end diff --git a/tools/vendor/ceedling/lib/ceedling/setupinator.rb b/tools/vendor/ceedling/lib/ceedling/setupinator.rb index 92d1934d..4b62b747 100644 --- a/tools/vendor/ceedling/lib/ceedling/setupinator.rb +++ b/tools/vendor/ceedling/lib/ceedling/setupinator.rb @@ -1,54 +1,216 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= class Setupinator attr_reader :config_hash - attr_writer :ceedling def setup - @ceedling = {} @config_hash = {} end - def load_project_files - @ceedling[:project_file_loader].find_project_files - return @ceedling[:project_file_loader].load_project_config + + # Override to prevent exception handling from walking & stringifying the object variables. + # Object variables are gigantic and produce a flood of output. + def inspect + # TODO: When identifying information is added to constructor, insert it into `inspect()` string + return this.class.name + end + + + # Injector method for setting Ceedling application object hash + def ceedling=(value) + # Capture application objects hash as instance variable + @ceedling = value + + # Get our dependencies from object hash rather than DIY constructor + # This is a shortcut / validates aspects of our setup + @configurator = value[:configurator] + @loginator = value[:loginator] + @reportinator = value[:reportinator] + @plugin_manager = value[:plugin_manager] + @plugin_reportinator = value[:plugin_reportinator] + @test_runner_manager = value[:test_runner_manager] end - def do_setup(config_hash) - @config_hash = config_hash - - # load up all the constants and accessors our rake files, objects, & external scripts will need; - # note: configurator modifies the cmock section of the hash with a couple defaults to tie - # project together - the modified hash is used to build cmock object - @ceedling[:configurator].populate_defaults( config_hash ) - @ceedling[:configurator].populate_unity_defaults( config_hash ) - @ceedling[:configurator].populate_cmock_defaults( config_hash ) - @ceedling[:configurator].copy_vendor_defines( config_hash ) - @ceedling[:configurator].find_and_merge_plugins( config_hash ) - @ceedling[:configurator].merge_imports( config_hash ) - @ceedling[:configurator].eval_environment_variables( config_hash ) - @ceedling[:configurator].tools_setup( config_hash ) - @ceedling[:configurator].eval_paths( config_hash ) - @ceedling[:configurator].standardize_paths( config_hash ) - @ceedling[:configurator].validate( config_hash ) - @ceedling[:configurator].build( config_hash, :environment ) - - @ceedling[:configurator].insert_rake_plugins( @ceedling[:configurator].rake_plugins ) - @ceedling[:configurator].tools_supplement_arguments( config_hash ) + + # Load up all the constants and accessors our rake files, objects, & external scripts will need. + def do_setup( app_cfg ) + @config_hash = app_cfg[:project_config] + + ## + ## 1. Miscellaneous handling and essential configuration prep + ## + + # Set special purpose test case filters (from command line) + @configurator.include_test_case = app_cfg[:include_test_case] + @configurator.exclude_test_case = app_cfg[:exclude_test_case] + + # Verbosity handling + @configurator.set_verbosity( config_hash ) + + # Logging configuration + @loginator.set_logfile( form_log_filepath( app_cfg[:log_filepath] ) ) + @configurator.project_logging = @loginator.project_logging + + log_step( 'Validating configuration contains minimum required sections', heading:false ) + + # Complain early about anything essential that's missing + @configurator.validate_essential( config_hash ) + + # Merge any needed runtime settings into user configuration + @configurator.merge_ceedling_runtime_config( config_hash, CEEDLING_RUNTIME_CONFIG.deep_clone ) + + ## + ## 2. Handle basic configuration + ## + + log_step( 'Project Configuration Handling' ) + + # Evaluate environment vars before plugin configurations that might reference with inline Ruby string expansion + @configurator.eval_environment_variables( config_hash ) + + # Standardize paths and add to Ruby load paths + plugins_paths_hash = @configurator.prepare_plugins_load_paths( app_cfg[:ceedling_plugins_path], config_hash ) + + # Populate Unity configuration with values to tie vendor tool configurations together + @configurator.populate_unity_config( config_hash ) + + # Populate CMock configuration with values to tie vendor tool configurations together + @configurator.populate_cmock_config( config_hash ) + + ## + ## 3. Plugin Handling + ## + + log_step( 'Plugin Handling' ) + + # Plugin handling + @configurator.discover_plugins( plugins_paths_hash, config_hash ) + @configurator.merge_config_plugins( config_hash ) + @configurator.populate_plugins_config( plugins_paths_hash, config_hash ) + + ## + ## 4. Collect and apply defaults to user configuration + ## + + log_step( 'Assembling Default Settings' ) + + # Assemble defaults + defaults_hash = DEFAULT_CEEDLING_PROJECT_CONFIG.deep_clone() + @configurator.merge_tools_defaults( config_hash, defaults_hash ) + @configurator.populate_cmock_defaults( config_hash, defaults_hash ) + @configurator.merge_plugins_defaults( plugins_paths_hash, config_hash, defaults_hash ) + + # Set any essential missing or plugin values in configuration with assembled default values + @configurator.populate_defaults( config_hash, defaults_hash ) + + ## + ## 5. Fill out / modify remaining configuration from user configuration + defaults + ## + + log_step( 'Completing Project Configuration' ) + + # Configure test runner generation + @configurator.populate_test_runner_generation_config( config_hash ) + + @loginator.log( "Unity configuration >> #{config_hash[:unity]}", Verbosity::DEBUG ) + @loginator.log( "CMock configuration >> #{config_hash[:cmock]}", Verbosity::DEBUG ) + @loginator.log( "Test Runner configuration >> #{config_hash[:test_runner]}", Verbosity::DEBUG ) + @loginator.log( "CException configuration >> #{config_hash[:cexception]}", Verbosity::DEBUG ) + + # Automagically enable use of exceptions based on CMock settings + @configurator.populate_exceptions_config( config_hash ) + + # Evaluate environment vars again before subsequent configurations that might reference with inline Ruby string expansion + @configurator.eval_environment_variables( config_hash ) + + # Standardize values and expand inline Ruby string substitutions + @configurator.eval_paths( config_hash ) + @configurator.eval_flags( config_hash ) + @configurator.eval_defines( config_hash ) + @configurator.standardize_paths( config_hash ) + + # Fill out any missing tool config value / supplement arguments + @configurator.populate_tools_config( config_hash ) + @configurator.populate_tools_supplemental_arguments( config_hash ) + + # Configure test runner build & runtime options + @test_runner_manager.configure_build_options( config_hash ) + @test_runner_manager.configure_runtime_options( app_cfg[:include_test_case], app_cfg[:exclude_test_case] ) + + ## + ## 6. Validate configuration + ## + + log_step( 'Validating final project configuration', heading:false ) + + @configurator.validate_final( config_hash, app_cfg ) + + ## + ## 7. Flatten configuration + process it into globals and accessors + ## + + # Skip logging this step as the end user doesn't care about this internal preparation + + # Partially flatten config + build Configurator accessors and globals + @configurator.build( app_cfg[:ceedling_lib_path], config_hash, :environment ) + + ## + ## 8. Final plugins handling + ## + + # Detailed logging already happend for plugin processing + log_step( 'Loading Plugins' ) + + @configurator.insert_rake_plugins( @configurator.rake_plugins ) - # merge in any environment variables plugins specify, after the main build - @ceedling[:plugin_manager].load_plugin_scripts( @ceedling[:configurator].script_plugins, @ceedling ) do |env| - @ceedling[:configurator].eval_environment_variables( env ) - @ceedling[:configurator].build_supplement( config_hash, env ) + # Merge in any environment variables that plugins specify after the main build + @plugin_manager.load_programmatic_plugins( @configurator.programmatic_plugins, @ceedling ) do |env| + # Evaluate environment vars that plugins may have added + @configurator.eval_environment_variables( env ) + @configurator.build_supplement( config_hash, env ) end - @ceedling[:plugin_reportinator].set_system_objects( @ceedling ) - @ceedling[:file_finder].prepare_search_sources - @ceedling[:loginator].setup_log_filepath - @ceedling[:project_config_manager].config_hash = config_hash + # Inject dependencies for plugin needs + @plugin_reportinator.set_system_objects( @ceedling ) end def reset_defaults(config_hash) - @ceedling[:configurator].reset_defaults( config_hash ) + @configurator.reset_defaults( config_hash ) + end + +### Private + +private + + def form_log_filepath( log_filepath ) + # Bail out early if logging is disabled + return log_filepath if log_filepath.empty?() + + # If there's no directory path, put named log file in default location + if File.dirname( log_filepath ).empty?() + return File.join( @configurator.project_log_path, log_filepath ) + end + + # Otherwise, log filepath includes a directory (that's already been created) + return log_filepath end + + # Neaten up a build step with progress message and some scope encapsulation + def log_step(msg, heading:true) + if heading + msg = @reportinator.generate_heading( @loginator.decorate( msg, LogLabels::CONSTRUCT ) ) + else # Progress message + msg = "\n" + @reportinator.generate_progress( @loginator.decorate( msg, LogLabels::CONSTRUCT ) ) + end + + @loginator.log( msg, Verbosity::OBNOXIOUS ) + end + + end diff --git a/tools/vendor/ceedling/lib/ceedling/stream_wrapper.rb b/tools/vendor/ceedling/lib/ceedling/stream_wrapper.rb index d69b8bf9..0dfaec34 100644 --- a/tools/vendor/ceedling/lib/ceedling/stream_wrapper.rb +++ b/tools/vendor/ceedling/lib/ceedling/stream_wrapper.rb @@ -1,15 +1,21 @@ - +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= BEGIN { require 'io/nonblock' # If possible, capture standard data streams non-blocking mode at startup (to be restored at shutdown). - # A complex build setup may have intended this change, but it will cause trouble for Ceedling. + # A sophisticated build setup (e.g. CI) may have intended this change on either side of Ceedling, + # but it will cause trouble for Ceedling itself. if STDOUT.respond_to?(:nonblock?) # Non-blocking mode query not implemented on all platforms - STDIN_STARTUP_NONBLOCKING_MODE = (STDIN.nonblock?).freeze - STDOUT_STARTUP_NONBLOCKING_MODE = (STDOUT.nonblock?).freeze - STDERR_STARTUP_NONBLOCKING_MODE = (STDERR.nonblock?).freeze + STDIN_STARTUP_NONBLOCKING_MODE = (STDIN.nonblock?).freeze if !defined?( STDIN_STARTUP_NONBLOCKING_MODE ) + STDOUT_STARTUP_NONBLOCKING_MODE = (STDOUT.nonblock?).freeze if !defined?( STDOUT_STARTUP_NONBLOCKING_MODE ) + STDERR_STARTUP_NONBLOCKING_MODE = (STDERR.nonblock?).freeze if !defined?( STDERR_STARTUP_NONBLOCKING_MODE ) end # Ensure standard data streams are in blocking mode for Ceedling runs @@ -25,16 +31,8 @@ def initialize STDERR.sync end - def stdout_override(&fnc) - @stdout_overide_fnc = fnc - end - def stdout_puts(string) - if @stdout_overide_fnc - @stdout_overide_fnc.call(string) - else - $stdout.puts(string) - end + $stdout.puts(string) end def stderr_puts(string) @@ -47,7 +45,7 @@ def stderr_puts(string) require 'io/nonblock' # If they were captured, reset standard data streams' non-blocking mode to the setting captured at startup - STDIN.nonblock = STDIN_STARTUP_NONBLOCKING_MODE if defined?(STDIN_STARTUP_NONBLOCKING_MODE) - STDOUT.nonblock = STDOUT_STARTUP_NONBLOCKING_MODE if defined?(STDOUT_STARTUP_NONBLOCKING_MODE) - STDERR.nonblock = STDERR_STARTUP_NONBLOCKING_MODE if defined?(STDERR_STARTUP_NONBLOCKING_MODE) + STDIN.nonblock = STDIN_STARTUP_NONBLOCKING_MODE if defined?( STDIN_STARTUP_NONBLOCKING_MODE ) + STDOUT.nonblock = STDOUT_STARTUP_NONBLOCKING_MODE if defined?( STDOUT_STARTUP_NONBLOCKING_MODE ) + STDERR.nonblock = STDERR_STARTUP_NONBLOCKING_MODE if defined?( STDERR_STARTUP_NONBLOCKING_MODE ) } diff --git a/tools/vendor/ceedling/lib/ceedling/streaminator.rb b/tools/vendor/ceedling/lib/ceedling/streaminator.rb deleted file mode 100644 index 11ed109c..00000000 --- a/tools/vendor/ceedling/lib/ceedling/streaminator.rb +++ /dev/null @@ -1,37 +0,0 @@ -require 'ceedling/constants' - -class Streaminator - - constructor :streaminator_helper, :verbosinator, :loginator, :stream_wrapper - - # for those objects for whom the configurator has already been instantiated, - # Streaminator is a convenience object for handling verbosity and writing to the std streams - - def stdout_puts(string, verbosity=Verbosity::NORMAL) - if (@verbosinator.should_output?(verbosity)) - @stream_wrapper.stdout_puts(string) - end - - # write to log as though Verbosity::OBNOXIOUS - @loginator.log( string, @streaminator_helper.extract_name($stdout) ) - end - - def stderr_puts(string, verbosity=Verbosity::NORMAL) - if (@verbosinator.should_output?(verbosity)) - @stream_wrapper.stderr_puts(string) - end - - # write to log as though Verbosity::OBNOXIOUS - @loginator.log( string, @streaminator_helper.extract_name($stderr) ) - end - - def stream_puts(stream, string, verbosity=Verbosity::NORMAL) - if (@verbosinator.should_output?(verbosity)) - stream.puts(string) - end - - # write to log as though Verbosity::OBNOXIOUS - @loginator.log( string, @streaminator_helper.extract_name(stream) ) - end - -end diff --git a/tools/vendor/ceedling/lib/ceedling/streaminator_helper.rb b/tools/vendor/ceedling/lib/ceedling/streaminator_helper.rb deleted file mode 100644 index 9fb5cc0b..00000000 --- a/tools/vendor/ceedling/lib/ceedling/streaminator_helper.rb +++ /dev/null @@ -1,15 +0,0 @@ - -class StreaminatorHelper - - def extract_name(stream) - name = case (stream.fileno) - when 0 then '#' - when 1 then '#' - when 2 then '#' - else stream.inspect - end - - return name - end - -end diff --git a/tools/vendor/ceedling/lib/ceedling/system_utils.rb b/tools/vendor/ceedling/lib/ceedling/system_utils.rb index 477aba4f..4fe4f2a5 100644 --- a/tools/vendor/ceedling/lib/ceedling/system_utils.rb +++ b/tools/vendor/ceedling/lib/ceedling/system_utils.rb @@ -1,3 +1,9 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= class Object def deep_clone @@ -22,9 +28,9 @@ def setup # Checks the system shell to see if it a tcsh shell. def tcsh_shell? # once run a single time, return state determined at that execution - return @tcsh_shell if not @tcsh_shell.nil? + return @tcsh_shell unless @tcsh_shell.nil? - result = @system_wrapper.shell_backticks('echo $version') + result = @system_wrapper.shell_backticks(command:'echo $version') if ((result[:exit_code] == 0) and (result[:output].strip =~ /^tcsh/)) @tcsh_shell = true diff --git a/tools/vendor/ceedling/lib/ceedling/system_wrapper.rb b/tools/vendor/ceedling/lib/ceedling/system_wrapper.rb index e53c3e26..1ff435f4 100644 --- a/tools/vendor/ceedling/lib/ceedling/system_wrapper.rb +++ b/tools/vendor/ceedling/lib/ceedling/system_wrapper.rb @@ -1,3 +1,10 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + require 'rbconfig' require 'open3' @@ -9,6 +16,20 @@ def self.windows? return ((Config::CONFIG['host_os'] =~ /mswin|mingw/) ? true : false) end + def self.time_stopwatch_s + # Wall clock time that can be adjusted for a variety of reasons and lead to + # unexpected negative durations -- only option on Windows. + return Time.now() if SystemWrapper.windows? + + # On Posix systems, this time value is a steadily increasing count from + # a known system event (usually restart) and is more better + return Process.clock_gettime( Process::CLOCK_MONOTONIC, :float_second ) + end + + def initialize() + @argv = ARGV.clone.freeze + end + # class method so as to be mockable for tests def windows? return SystemWrapper.windows? @@ -26,8 +47,8 @@ def search_paths return ENV['PATH'].split(File::PATH_SEPARATOR) end - def cmdline_args - return ARGV + def get_cmdline + return @argv end def env_set(name, value) @@ -38,54 +59,85 @@ def env_get(name) return ENV[name] end - def time_now - return Time.now.asctime + def time_now(format=nil) + return Time.now.asctime if format.nil? + return Time.now.strftime( format ) end - def shell_capture3(command, boom = true) - begin - stdout, stderr, status = Open3.capture3(command) - rescue => err - stderr = err - status = -1 - end - $exit_code = status.freeze if boom - if (status != 0) - stdout += stderr - end + # If set, `boom` allows a non-zero exit code in results. + # Otherwise, disabled `boom` forces a success exit code but collects errors. + def shell_capture3(command:, boom:false) + # Beginning with later versions of Ruby2, simple exit codes were replaced + # by the more capable and robust Process::Status. + # Parts of Process::Status's behavior is similar to an integer exit code in + # some operations but not all. + exit_code = 0 + + stdout, stderr = '' # Safe initialization defaults + status = nil # Safe initialization default + + stdout, stderr, status = Open3.capture3( command ) + + # If boom, then capture the actual exit code. + # Otherwise, leave it as zero as though execution succeeded. + exit_code = status.exitstatus.freeze if boom and !status.nil? + + # (Re)set the global system exit code so everything matches + $exit_code = exit_code + return { - :output => stdout.freeze, - :exit_code => status.freeze + # Combine stdout & stderr streams for complete output + :output => (stdout + stderr).to_s.freeze, + + # Individual streams for detailed logging + :stdout => stdout.freeze, + :stderr => stderr.freeze, + + # Relay full Process::Status + :status => status.freeze, + + # Provide simple exit code accessor + :exit_code => exit_code.freeze } end - def shell_backticks(command, boom = true) - retval = `#{command}`.freeze + def shell_backticks(command:, boom:false) + output = `#{command}`.freeze $exit_code = ($?.exitstatus).freeze if boom return { - :output => retval.freeze, + :output => output.freeze, :exit_code => ($?.exitstatus).freeze } end - def shell_system(command, boom = true) - system( command ) + def shell_system(command:, args:[], verbose:false, boom:false) + result = nil + + if verbose + # Allow console output + result = system( command, *args ) + else + # Shush the console output + result = system( command, *args, [:out, :err] => File::NULL ) + end + $exit_code = ($?.exitstatus).freeze if boom return { - :output => "".freeze, + :result => result.freeze, :exit_code => ($?.exitstatus).freeze } end def add_load_path(path) - $LOAD_PATH.unshift(path) + # Prevent trouble with string freezing by dup()ing paths here + $LOAD_PATH.unshift( path.dup() ) end def require_file(path) require(path) end - def ruby_success + def ruby_success? # We are successful if we've never had an exit code that went boom (either because it's empty or it was 0) return ($exit_code.nil? || ($exit_code == 0)) && ($!.nil? || $!.is_a?(SystemExit) && $!.success?) end diff --git a/tools/vendor/ceedling/lib/ceedling/target_loader.rb b/tools/vendor/ceedling/lib/ceedling/target_loader.rb deleted file mode 100644 index f1e95120..00000000 --- a/tools/vendor/ceedling/lib/ceedling/target_loader.rb +++ /dev/null @@ -1,38 +0,0 @@ -module TargetLoader - class NoTargets < RuntimeError; end - class NoDirectory < RuntimeError; end - class NoDefault < RuntimeError; end - class NoSuchTarget < RuntimeError; end - - class RequestReload < RuntimeError; end - - def self.inspect(config, target_name=nil) - unless config[:targets] - raise NoTargets - end - - targets = config[:targets] - unless targets[:targets_directory] - raise NoDirectory.new("No targets directory specified.") - end - unless targets[:default_target] - raise NoDefault.new("No default target specified.") - end - - target_path = lambda {|name| File.join(targets[:targets_directory], name + ".yml")} - - target = if target_name - target_path.call(target_name) - else - target_path.call(targets[:default_target]) - end - - unless File.exist? target - raise NoSuchTarget.new("No such target: #{target}") - end - - ENV['CEEDLING_MAIN_PROJECT_FILE'] = target - - raise RequestReload - end -end diff --git a/tools/vendor/ceedling/lib/ceedling/task_invoker.rb b/tools/vendor/ceedling/lib/ceedling/task_invoker.rb index d1b5d525..d140f81d 100644 --- a/tools/vendor/ceedling/lib/ceedling/task_invoker.rb +++ b/tools/vendor/ceedling/lib/ceedling/task_invoker.rb @@ -1,9 +1,15 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= class TaskInvoker attr_accessor :first_run - constructor :dependinator, :build_batchinator, :rake_utils, :rake_wrapper, :project_config_manager + constructor :dependinator, :build_batchinator, :rake_utils, :rake_wrapper def setup @test_regexs = [/^#{TEST_ROOT_NAME}:/] diff --git a/tools/vendor/ceedling/lib/ceedling/tasks_base.rake b/tools/vendor/ceedling/lib/ceedling/tasks_base.rake index ad1d7c20..9838ddbc 100644 --- a/tools/vendor/ceedling/lib/ceedling/tasks_base.rake +++ b/tools/vendor/ceedling/lib/ceedling/tasks_base.rake @@ -1,35 +1,25 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + require 'ceedling/constants' require 'ceedling/file_path_utils' -require 'ceedling/version' - -desc "Display build environment version info." -task :version do - puts " Ceedling:: #{Ceedling::Version::CEEDLING}" - puts " Unity:: #{Ceedling::Version::UNITY}" - puts " CMock:: #{Ceedling::Version::CMOCK}" - puts " CException:: #{Ceedling::Version::CEXCEPTION}" -end - -desc "Set verbose output (silent:[#{Verbosity::SILENT}] - obnoxious:[#{Verbosity::OBNOXIOUS}])." -task :verbosity, :level do |t, args| - verbosity_level = args.level.to_i - - @ceedling[:configurator].project_verbosity = verbosity_level - - # control rake's verbosity with new setting - verbose( ((verbosity_level >= Verbosity::OBNOXIOUS) ? true : false) ) -end -desc "Enable logging" -task :logging do - @ceedling[:configurator].project_logging = true +# Set Rake verbosity using global constant verbosity set before Rake is loaded +if !!defined?(PROJECT_VERBOSITY) + verbose(PROJECT_VERBOSITY >= Verbosity::OBNOXIOUS) + if PROJECT_VERBOSITY >= Verbosity::OBNOXIOUS + Rake.application.options.silent = false + Rake.application.options.suppress_backtrace_pattern = nil + end end -# non advertised debug task +# Non-advertised debug task task :debug do - Rake::Task[:verbosity].invoke(Verbosity::DEBUG) Rake.application.options.trace = true - @ceedling[:configurator].project_debug = true end # non advertised sanity checking task @@ -38,65 +28,7 @@ task :sanity_checks, :level do |t, args| @ceedling[:configurator].sanity_checks = check_level end -# non advertised catch for calling upgrade in the wrong place -task :upgrade do - puts "WARNING: You're currently IN your project directory. Take a step out and try" - puts "again if you'd like to perform an upgrade." -end - -# list expanded environment variables -if (not ENVIRONMENT.empty?) -desc "List all configured environment variables." -task :environment do - env_list = [] - ENVIRONMENT.each do |env| - env.each_key do |key| - name = key.to_s.upcase - env_list.push(" - #{name}: \"#{env[key]}\"") - end - end - env_list.sort.each do |env_line| - puts env_line - end -end -end - -namespace :options do - - COLLECTION_PROJECT_OPTIONS.each do |option_path| - option = File.basename(option_path, '.yml') - - desc "Merge #{option} project options." - task option.to_sym do - hash = @ceedling[:project_config_manager].merge_options( @ceedling[:setupinator].config_hash, option_path ) - @ceedling[:setupinator].do_setup( hash ) - if @ceedling[:configurator].project_release_build - load(File.join(CEEDLING_LIB, 'ceedling', 'rules_release.rake')) - end - end - end - - # This is to give nice errors when typing options - rule /^options:.*/ do |t, args| - filename = t.to_s.split(':')[-1] + '.yml' - filelist = COLLECTION_PROJECT_OPTIONS.map{|s| File.basename(s) } - @ceedling[:file_finder].find_file_from_list(filename, filelist, :error) - end - - # This will output the fully-merged tools options to their own project.yml file - desc "Export tools options to a new project file" - task :export, :filename do |t, args| - outfile = args.filename || 'tools.yml' - toolcfg = {} - @ceedling[:configurator].project_config_hash.each_pair do |k,v| - toolcfg[k] = v if (k.to_s[0..5] == 'tools_') - end - File.open(outfile,'w') {|f| f << toolcfg.to_yaml({:indentation => 2})} - end -end - - -# do not present task if there's no plugins +# Do not present task if there's no plugins if (not PLUGINS_ENABLED.empty?) desc "Execute plugin result summaries (no build triggering)." task :summary do diff --git a/tools/vendor/ceedling/lib/ceedling/tasks_filesystem.rake b/tools/vendor/ceedling/lib/ceedling/tasks_filesystem.rake index 50d3e983..748e888c 100644 --- a/tools/vendor/ceedling/lib/ceedling/tasks_filesystem.rake +++ b/tools/vendor/ceedling/lib/ceedling/tasks_filesystem.rake @@ -1,3 +1,9 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= # rather than require 'rake/clean' & try to override, we replicate for finer control CLEAN = Rake::FileList["**/*~", "**/*.bak"] @@ -21,7 +27,7 @@ CLOBBER.include(File.join(PROJECT_LOG_PATH, '**/*')) CLOBBER.exclude(File.join(TESTS_BASE_PATH), '**/.gitkeep') # because of cmock config, mock path can optionally exist apart from standard test build paths -CLOBBER.include(File.join(CMOCK_MOCK_PATH, '*')) +CLOBBER.include(File.join(CMOCK_MOCK_PATH, '*')) if PROJECT_USE_MOCKS REMOVE_FILE_PROC = Proc.new { |fn| rm_r fn rescue nil } @@ -30,7 +36,7 @@ desc "Delete all build artifacts and temporary products." task(:clean) do # because :clean is a prerequisite for :clobber, intelligently display the progress message if (not @ceedling[:task_invoker].invoked?(/^clobber$/)) - @ceedling[:streaminator].stdout_puts("\nCleaning build artifacts...\n(For large projects, this task may take a long time to complete)\n\n") + @ceedling[:loginator].log("\nCleaning build artifacts...\n(For large projects, this task may take a long time to complete)\n\n") end CLEAN.each { |fn| REMOVE_FILE_PROC.call(fn) } end @@ -38,27 +44,34 @@ end # redefine clobber so we can override how it advertises itself desc "Delete all generated files (and build artifacts)." task(:clobber => [:clean]) do - @ceedling[:streaminator].stdout_puts("\nClobbering all generated files...\n(For large projects, this task may take a long time to complete)\n\n") + @ceedling[:loginator].log("\nClobbering all generated files...\n(For large projects, this task may take a long time to complete)\n\n") CLOBBER.each { |fn| REMOVE_FILE_PROC.call(fn) } end # create a directory task for each of the paths, so we know how to build them PROJECT_BUILD_PATHS.each { |path| directory(path) } +# create a single prepare task which collects all release and test prerequisites +task :prepare => [:directories] + # create a single directory task which verifies all the others get built task :directories => PROJECT_BUILD_PATHS # list paths discovered at load time namespace :paths do standard_paths = ['test', 'source', 'include', 'support'] + paths = @ceedling[:setupinator].config_hash[:paths].keys.map{|n| n.to_s.downcase} + paths.each do |name| desc "List all collected #{name} paths." if standard_paths.include?(name) task(name.to_sym) do path_list = Object.const_get("COLLECTION_PATHS_#{name.upcase}") - puts "#{name.capitalize} paths:" - path_list.sort.each {|path| puts " - #{path}" } - puts "path count: #{path_list.size}" + puts "#{name.capitalize} paths:#{' None' if path_list.size == 0}" + if path_list.size > 0 + path_list.sort.each {|path| puts " - #{path}" } + puts "Path count: #{path_list.size}" + end end end end @@ -66,16 +79,18 @@ end # list files & file counts discovered at load time namespace :files do - - categories = ['tests', 'source', 'assembly', 'include', 'support'] + categories = ['tests', 'source', 'assembly', 'headers', 'support'] categories.each do |category| desc "List all collected #{category.chomp('s')} files." task(category.chomp('s').to_sym) do files_list = Object.const_get("COLLECTION_ALL_#{category.upcase}") - puts "#{category.chomp('s').capitalize} files:" - files_list.sort.each { |filepath| puts " - #{filepath}" } - puts "file count: #{files_list.size}" + puts "#{category.chomp('s').capitalize} files:#{' None' if files_list.size == 0}" + if files_list.size > 0 + files_list.sort.each { |filepath| puts " - #{filepath}" } + puts "File count: #{files_list.size}" + puts "Note: This list sourced only from your project file, not from any build directive macros in test files." + end end end diff --git a/tools/vendor/ceedling/lib/ceedling/tasks_release.rake b/tools/vendor/ceedling/lib/ceedling/tasks_release.rake index 60e060ed..01fe5741 100644 --- a/tools/vendor/ceedling/lib/ceedling/tasks_release.rake +++ b/tools/vendor/ceedling/lib/ceedling/tasks_release.rake @@ -1,40 +1,43 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + require 'ceedling/constants' require 'ceedling/file_path_utils' desc "Build release target." -task RELEASE_SYM => [:directories] do +task RELEASE_SYM => [:prepare] do header = "Release build '#{File.basename(PROJECT_RELEASE_BUILD_TARGET)}'" - @ceedling[:streaminator].stdout_puts("\n\n#{header}\n#{'-' * header.length}") + @ceedling[:loginator].log("\n\n#{header}\n#{'-' * header.length}") begin @ceedling[:plugin_manager].pre_release core_objects = [] - extra_objects = @ceedling[:file_path_utils].form_release_build_c_objects_filelist( COLLECTION_RELEASE_ARTIFACT_EXTRA_LINK_OBJECTS ) + extra_objects = @ceedling[:file_path_utils].form_release_build_objects_filelist( COLLECTION_RELEASE_ARTIFACT_EXTRA_LINK_OBJECTS ) - @ceedling[:project_config_manager].process_release_config_change - core_objects.concat( @ceedling[:release_invoker].setup_and_invoke_c_objects( COLLECTION_ALL_SOURCE ) ) - - # If assembler use isn't enabled, COLLECTION_ALL_ASSEMBLY is empty array & nothing happens - core_objects.concat( @ceedling[:release_invoker].setup_and_invoke_asm_objects( COLLECTION_ALL_ASSEMBLY ) ) + core_objects.concat( @ceedling[:release_invoker].setup_and_invoke_objects( COLLECTION_RELEASE_BUILD_INPUT ) ) # If we're using libraries, we need to add those to our collection as well library_objects = (defined? LIBRARIES_RELEASE && !LIBRARIES_RELEASE.empty?) ? LIBRARIES_RELEASE.flatten.compact : [] file( PROJECT_RELEASE_BUILD_TARGET => (core_objects + extra_objects + library_objects) ) - Rake::Task[PROJECT_RELEASE_BUILD_TARGET].invoke + Rake::Task[PROJECT_RELEASE_BUILD_TARGET].invoke() - rescue StandardError => e - @ceedling[:streaminator].stderr_puts("Error ==> #{e.class}:: #{e.message}") + rescue StandardError => ex + @ceedling[:application].register_build_failure - # Debug backtrace - @ceedling[:streaminator].stderr_puts("Backtrace ==>", Verbosity::DEBUG) - if @ceedling[:verbosinator].should_output?(Verbosity::DEBUG) - $stderr.puts(e.backtrace) # Formats properly when directly passed to puts() - end + @ceedling[:loginator].log( "#{ex.class} ==> #{ex.message}", Verbosity::ERRORS, LogLabels::EXCEPTION ) + # Debug backtrace + @ceedling[:loginator].log( "Backtrace ==>", Verbosity::DEBUG ) + # Output to console the exception backtrace, formatted like Ruby does it + @ceedling[:loginator].log( "#{ex.backtrace.first}: #{ex.message} (#{ex.class})", Verbosity::DEBUG ) + @ceedling[:loginator].log( ex.backtrace.drop(1).map{|s| "\t#{s}"}.join("\n"), Verbosity::DEBUG ) ensure @ceedling[:plugin_manager].post_release end end - diff --git a/tools/vendor/ceedling/lib/ceedling/tasks_tests.rake b/tools/vendor/ceedling/lib/ceedling/tasks_tests.rake index 72350f4f..ba5ec96b 100644 --- a/tools/vendor/ceedling/lib/ceedling/tasks_tests.rake +++ b/tools/vendor/ceedling/lib/ceedling/tasks_tests.rake @@ -1,26 +1,13 @@ -require 'ceedling/constants' +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= -task :test_deps => [:directories] do - # Copy Unity C files into build/vendor directory structure - @ceedling[:file_wrapper].cp_r( - # '/.' to cause cp_r to copy directory contents - File.join( UNITY_VENDOR_PATH, UNITY_LIB_PATH, '/.' ), - PROJECT_BUILD_VENDOR_UNITY_PATH ) - - # Copy CMock C files into build/vendor directory structure - @ceedling[:file_wrapper].cp_r( - # '/.' to cause cp_r to copy directory contents - File.join( CMOCK_VENDOR_PATH, CMOCK_LIB_PATH, '/.' ), - PROJECT_BUILD_VENDOR_CMOCK_PATH ) if PROJECT_USE_MOCKS - - # Copy CException C files into build/vendor directory structure - @ceedling[:file_wrapper].cp_r( - # '/.' to cause cp_r to copy directory contents - File.join( CEXCEPTION_VENDOR_PATH, CEXCEPTION_LIB_PATH, '/.' ), - PROJECT_BUILD_VENDOR_CEXCEPTION_PATH ) if PROJECT_USE_EXCEPTIONS -end +require 'ceedling/constants' -task :test => [:test_deps] do +task :test => [:prepare] do Rake.application['test:all'].invoke end @@ -34,7 +21,7 @@ namespace TEST_SYM do } desc "Run all unit tests (also just 'test' works)." - task :all => [:test_deps] do + task :all => [:prepare] do @ceedling[:test_invoker].setup_and_invoke( tests:COLLECTION_ALL_TESTS, options:{:force_run => true, :build_only => false}.merge(TOOL_COLLECTION_TEST_TASKS)) @@ -42,20 +29,20 @@ namespace TEST_SYM do desc "Run single test ([*] test or source file name, no path)." task :* do - message = "\nOops! '#{TEST_ROOT_NAME}:*' isn't a real task. " + + message = "Oops! '#{TEST_ROOT_NAME}:*' isn't a real task. " + "Use a real test or source file name (no path) in place of the wildcard.\n" + - "Example: rake #{TEST_ROOT_NAME}:foo.c\n\n" + "Example: `ceedling #{TEST_ROOT_NAME}:foo.c`" - @ceedling[:streaminator].stdout_puts( message ) + @ceedling[:loginator].log( message, Verbosity::ERRORS ) end desc "Just build tests without running." - task :build_only => [:test_deps] do + task :build_only => [:prepare] do @ceedling[:test_invoker].setup_and_invoke(tests:COLLECTION_ALL_TESTS, options:{:build_only => true}.merge(TOOL_COLLECTION_TEST_TASKS)) end desc "Run tests by matching regular expression pattern." - task :pattern, [:regex] => [:test_deps] do |t, args| + task :pattern, [:regex] => [:prepare] do |t, args| matches = [] COLLECTION_ALL_TESTS.each { |test| matches << test if (test =~ /#{args.regex}/) } @@ -63,12 +50,12 @@ namespace TEST_SYM do if (matches.size > 0) @ceedling[:test_invoker].setup_and_invoke(tests:matches, options:{:force_run => false}.merge(TOOL_COLLECTION_TEST_TASKS)) else - @ceedling[:streaminator].stdout_puts("\nFound no tests matching pattern /#{args.regex}/.") + @ceedling[:loginator].log( "Found no tests matching pattern /#{args.regex}/", Verbosity::ERRORS ) end end desc "Run tests whose test path contains [dir] or [dir] substring." - task :path, [:dir] => [:test_deps] do |t, args| + task :path, [:dir] => [:prepare] do |t, args| matches = [] COLLECTION_ALL_TESTS.each { |test| matches << test if File.dirname(test).include?(args.dir.gsub(/\\/, '/')) } @@ -76,7 +63,7 @@ namespace TEST_SYM do if (matches.size > 0) @ceedling[:test_invoker].setup_and_invoke(tests:matches, options:{:force_run => false}.merge(TOOL_COLLECTION_TEST_TASKS)) else - @ceedling[:streaminator].stdout_puts("\nFound no tests including the given path or path component.") + @ceedling[:loginator].log( "Found no tests including the given path or path component", Verbosity::ERRORS ) end end diff --git a/tools/vendor/ceedling/lib/ceedling/test_context_extractor.rb b/tools/vendor/ceedling/lib/ceedling/test_context_extractor.rb index 37e74bf4..f18bda4d 100644 --- a/tools/vendor/ceedling/lib/ceedling/test_context_extractor.rb +++ b/tools/vendor/ceedling/lib/ceedling/test_context_extractor.rb @@ -1,66 +1,105 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + +require 'ceedling/exceptions' +require 'ceedling/generator_test_runner' # From lib/ not vendor/unity/auto class TestContextExtractor - constructor :configurator, :file_wrapper + constructor :configurator, :file_wrapper, :loginator def setup - @header_includes = {} - @source_includes = {} - @source_extras = {} - @mocks = {} - @include_paths = {} - @all_include_paths = [] + @all_header_includes = {} # Full list of all headers a test #includes + @header_includes = {} # List of all headers minus mocks & framework files + @source_includes = {} + @source_extras = {} + @test_runner_details = {} # Test case lists & Unity runner generator instances + @mocks = {} + @include_paths = {} + @all_include_paths = [] @lock = Mutex.new end + def collect_simple_context( filepath, *args ) + content = @file_wrapper.read( filepath ) + content = sanitize_encoding( content ) + content_no_comments = remove_comments( content ) - # Scan for & store build directives - # - TEST_SOURCE_FILE() - # - TEST_INCLUDE_PATH() - def collect_build_directives(filepath) - include_paths, source_extras = extract_build_directives( filepath, @file_wrapper.read(filepath) ) - ingest_build_directives( - filepath:filepath, - include_paths:include_paths, - source_extras:source_extras - ) + args.each do |context| + case context + when :build_directive_macros + collect_build_directives( filepath, content_no_comments ) + + when :includes + collect_includes( filepath, content_no_comments ) + + when :test_runner_details + _collect_test_runner_details( filepath, content ) + + else + raise CeedlingException.new( "Unrecognized test context for collection :#{context}" ) + end + end end - # Scan for & store includes (.h & .c) and mocks - def collect_includes(filepath) - includes = extract_includes( filepath, @file_wrapper.read(filepath) ) - ingest_includes(filepath, includes) + def collect_test_runner_details(test_filepath, input_filepath=nil) + _collect_test_runner_details( + test_filepath, + @file_wrapper.read( test_filepath ), + input_filepath.nil? ? nil : @file_wrapper.read( input_filepath ) + ) end # Scan for all includes - def scan_includes(filepath) - return extract_includes( filepath, @file_wrapper.read(filepath) ) + def extract_includes(filepath) + content = @file_wrapper.read( filepath ) + content = sanitize_encoding( content ) + content = remove_comments( content ) + + return extract_includes( filepath, content ) + end + + # All header includes .h of test file + def lookup_full_header_includes_list(filepath) + return @all_header_includes[form_file_key( filepath )] || [] end - # Header header_includes of test file with file extension + # Header includes .h (minus mocks & framework headers) in test file def lookup_header_includes_list(filepath) - return @header_includes[form_file_key(filepath)] || [] + return @header_includes[form_file_key( filepath )] || [] end # Include paths of test file specified with TEST_INCLUDE_PATH() def lookup_include_paths_list(filepath) - return @include_paths[form_file_key(filepath)] || [] + return @include_paths[form_file_key( filepath )] || [] end # Source header_includes within test file def lookup_source_includes_list(filepath) - return @source_includes[form_file_key(filepath)] || [] + return @source_includes[form_file_key( filepath )] || [] end # Source extras via TEST_SOURCE_FILE() within test file def lookup_build_directive_sources_list(filepath) - return @source_extras[form_file_key(filepath)] || [] + return @source_extras[form_file_key( filepath )] || [] + end + + def lookup_test_cases(filepath) + return @test_runner_details[form_file_key( filepath )][:test_cases] || [] + end + + def lookup_test_runner_generator(filepath) + return @test_runner_details[form_file_key( filepath )][:generator] end # Mocks within test file with no file extension def lookup_raw_mock_list(filepath) - return @mocks[form_file_key(filepath)] || [] + return @mocks[form_file_key( filepath )] || [] end def lookup_all_include_paths @@ -73,21 +112,29 @@ def inspect_include_paths def ingest_includes(filepath, includes) mock_prefix = @configurator.cmock_mock_prefix - file_key = form_file_key(filepath) + file_key = form_file_key( filepath ) - mocks = [] - headers = [] - sources = [] + mocks = [] + all_headers = [] + headers = [] + sources = [] includes.each do |include| # <*.h> if include =~ /#{Regexp.escape(@configurator.extension_header)}$/ # Check if include is a mock with regex match that extracts only mock name (no .h) scan_results = include.scan(/(#{mock_prefix}.+)#{Regexp.escape(@configurator.extension_header)}/) - mocks << scan_results[0][0] if (scan_results.size > 0) + + if (scan_results.size > 0) + # Collect mock name + mocks << scan_results[0][0] + else + # If not a mock or framework file, collect tailored header filename + headers << include unless VENDORS_FILES.include?( include.ext('') ) + end # Add to .h includes list - headers << include + all_headers << include # <*.c> elsif include =~ /#{Regexp.escape(@configurator.extension_source)}$/ # Add to .c includes list @@ -97,6 +144,7 @@ def ingest_includes(filepath, includes) @lock.synchronize do @mocks[file_key] = mocks + @all_header_includes[file_key] = all_headers @header_includes[file_key] = headers @source_includes[file_key] = sources end @@ -104,12 +152,34 @@ def ingest_includes(filepath, includes) private ################################# + # Scan for & store build directives + # - TEST_SOURCE_FILE() + # - TEST_INCLUDE_PATH() + # + # Note: This method is private unlike other `collect_ ()` methods. It is always + # called in the context collection process by way of `collect_context()`. + def collect_build_directives(filepath, content) + include_paths, source_extras = extract_build_directives( filepath, content ) + + ingest_build_directives( + filepath: filepath, + include_paths: include_paths, + source_extras: source_extras + ) + end + + # Scan for & store includes (.h & .c) and mocks + # Note: This method is private unlike other `collect_ ()` methods. It is only + # called by way of `collect_context()`. + def collect_includes(filepath, content) + includes = _extract_includes( filepath, content ) + ingest_includes( filepath, includes ) + end + def extract_build_directives(filepath, content) include_paths = [] source_extras = [] - content = remove_comments(content) - content.split("\n").each do |line| # Look for TEST_INCLUDE_PATH("<*>") statements results = line.scan(/#{UNITY_TEST_INCLUDE_PATH}\(\s*\"\s*(.+)\s*\"\s*\)/) @@ -123,12 +193,9 @@ def extract_build_directives(filepath, content) return include_paths.uniq, source_extras.uniq end - def extract_includes(filepath, content) + def _extract_includes(filepath, content) includes = [] - content = check_encoding(content) - content = remove_comments(content) - content.split("\n").each do |line| # Look for #include statements results = line.scan(/#\s*include\s+\"\s*(.+)\s*\"/) @@ -138,8 +205,34 @@ def extract_includes(filepath, content) return includes.uniq end + def _collect_test_runner_details(filepath, test_content, input_content=nil) + unity_test_runner_generator = GeneratorTestRunner.new( + config: @configurator.get_runner_config, + test_file_contents: test_content, + preprocessed_file_contents: input_content + ) + + ingest_test_runner_details( + filepath: filepath, + test_runner_generator: unity_test_runner_generator + ) + + msg = "Test cases found in #{filepath}:" + test_cases = unity_test_runner_generator.test_cases + if test_cases.empty? + msg += " " + else + msg += "\n" + test_cases.each do |test_case| + msg += " - #{test_case[:line_number]}:#{test_case[:test]}()\n" + end + end + + @loginator.log( msg, Verbosity::DEBUG ) + end + def ingest_build_directives(filepath:, include_paths:, source_extras:) - key = form_file_key(filepath) + key = form_file_key( filepath ) @lock.synchronize do @include_paths[key] = include_paths @@ -154,8 +247,19 @@ def ingest_build_directives(filepath:, include_paths:, source_extras:) end end + def ingest_test_runner_details(filepath:, test_runner_generator:) + key = form_file_key( filepath ) + + @lock.synchronize do + @test_runner_details[key] = { + :test_cases => test_runner_generator.test_cases, + :generator => test_runner_generator + } + end + end + # Note: This method modifies encoding in place (encode!) in an attempt to reduce long string copies - def check_encoding(content) + def sanitize_encoding(content) if not content.valid_encoding? content.encode!("UTF-16be", :invalid=>:replace, :replace=>"?").encode('UTF-8') end @@ -164,16 +268,18 @@ def check_encoding(content) # Note: This method is destructive to argument content in an attempt to reduce memory usage def remove_comments(content) + _content = content.clone + # Remove line comments - content.gsub!(/\/\/.*$/, '') + _content.gsub!(/\/\/.*$/, '') # Remove block comments - content.gsub!(/\/\*.*?\*\//m, '') + _content.gsub!(/\/\*.*?\*\//m, '') - return content + return _content end - def form_file_key(filepath) + def form_file_key( filepath ) return filepath.to_s.to_sym end diff --git a/tools/vendor/ceedling/lib/ceedling/test_invoker.rb b/tools/vendor/ceedling/lib/ceedling/test_invoker.rb index 12834468..7c431c34 100644 --- a/tools/vendor/ceedling/lib/ceedling/test_invoker.rb +++ b/tools/vendor/ceedling/lib/ceedling/test_invoker.rb @@ -1,3 +1,10 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + require 'ceedling/constants' require 'fileutils' @@ -5,14 +12,15 @@ class TestInvoker attr_reader :sources, :tests, :mocks - constructor :configurator, + constructor :application, + :configurator, :test_invoker_helper, :plugin_manager, - :streaminator, + :reportinator, + :loginator, :build_batchinator, :preprocessinator, :task_invoker, - :build_invoker_utils, :generator, :test_context_extractor, :file_path_utils, @@ -29,12 +37,12 @@ def setup # Aliases for brevity in code that follows @helper = @test_invoker_helper @batchinator = @build_batchinator + @context_extractor = @test_context_extractor end def setup_and_invoke(tests:, context:TEST_SYM, options:{}) # Wrap everything in an exception handler begin - # Begin fleshing out the testables data structure @batchinator.build_step("Preparing Build Paths", heading: false) do results_path = File.join( @configurator.project_build_root, context.to_s, 'results' ) @@ -59,7 +67,7 @@ def setup_and_invoke(tests:, context:TEST_SYM, options:{}) paths[:build] = build_path paths[:results] = results_path paths[:mocks] = mocks_path if @configurator.project_use_mocks - if @configurator.project_use_test_preprocessor + if @configurator.project_use_test_preprocessor != :none paths[:preprocess_incudes] = preprocess_includes_path paths[:preprocess_files] = preprocess_files_path end @@ -72,17 +80,33 @@ def setup_and_invoke(tests:, context:TEST_SYM, options:{}) @helper.clean_test_results( results_path, @testables.map{ |_, t| t[:name] } ) end - # Collect in-test build directives, etc. from test files - @batchinator.build_step("Extracting Build Directive Macros") do + # Collect in-test build directives, #include statements, and test cases from test files. + # (Actions depend on preprocessing configuration) + @batchinator.build_step("Collecting Test Context") do @batchinator.exec(workload: :compile, things: @testables) do |_, details| - @preprocessinator.extract_test_build_directives( filepath:details[:filepath] ) + filepath = details[:filepath] + + if @configurator.project_use_test_preprocessor_tests + msg = @reportinator.generate_progress( "Parsing #{File.basename(filepath)} for build directive macros" ) + @loginator.log( msg ) + + # Just build directive macros (other context collected in later steps with help of preprocessing) + @context_extractor.collect_simple_context( filepath, :build_directive_macros ) + else + msg = @reportinator.generate_progress( "Parsing #{File.basename(filepath)} for build directive macros, #includes, and test case names" ) + @loginator.log( msg ) + + # Collect the works + @context_extractor.collect_simple_context( filepath, :build_directive_macros, :includes, :test_runner_details ) + end + end # Validate test build directive paths via TEST_INCLUDE_PATH() & augment header file collection from the same - @helper.process_project_include_paths + @helper.process_project_include_paths() # Validate test build directive source file entries via TEST_SOURCE_FILE() - @batchinator.exec(workload: :compile, things: @testables) do |_, details| + @testables.each do |_, details| @helper.validate_build_directive_source_files( test:details[:name], filepath:details[:filepath] ) end end @@ -94,15 +118,22 @@ def setup_and_invoke(tests:, context:TEST_SYM, options:{}) search_paths = @helper.search_paths( filepath, details[:name] ) compile_flags = @helper.flags( context:context, operation:OPERATION_COMPILE_SYM, filepath:filepath ) + assembler_flags = @helper.flags( context:context, operation:OPERATION_ASSEMBLE_SYM, filepath:filepath ) link_flags = @helper.flags( context:context, operation:OPERATION_LINK_SYM, filepath:filepath ) compile_defines = @helper.compile_defines( context:context, filepath:filepath ) preprocess_defines = @helper.preprocess_defines( test_defines: compile_defines, filepath:filepath ) - @streaminator.stdout_puts( "Collecting search paths, flags, and defines for #{File.basename(filepath)}...", Verbosity::NORMAL) + msg = @reportinator.generate_module_progress( + operation: 'Collecting search paths, flags, and defines', + module_name: details[:name], + filename: File.basename( details[:filepath] ) + ) + @loginator.log( msg ) @lock.synchronize do details[:search_paths] = search_paths details[:compile_flags] = compile_flags + details[:assembler_flags] = assembler_flags details[:link_flags] = link_flags details[:compile_defines] = compile_defines details[:preprocess_defines] = preprocess_defines @@ -111,16 +142,26 @@ def setup_and_invoke(tests:, context:TEST_SYM, options:{}) end # Collect include statements & mocks from test files - @batchinator.build_step("Collecting Testing Context") do + @batchinator.build_step("Collecting Test Context") do @batchinator.exec(workload: :compile, things: @testables) do |_, details| - @preprocessinator.extract_testing_context( + arg_hash = { filepath: details[:filepath], test: details[:name], flags: details[:compile_flags], include_paths: details[:search_paths], - defines: details[:preprocess_defines] ) + defines: details[:preprocess_defines] + } + + msg = @reportinator.generate_module_progress( + operation: 'Preprocessing #include statements for', + module_name: arg_hash[:test], + filename: File.basename( arg_hash[:filepath] ) + ) + @loginator.log( msg ) + + @helper.extract_include_directives( arg_hash ) end - end + end if @configurator.project_use_test_preprocessor_tests # Determine Runners & Mocks For All Tests @batchinator.build_step("Determining Files to be Generated", heading: false) do @@ -128,14 +169,14 @@ def setup_and_invoke(tests:, context:TEST_SYM, options:{}) runner_filepath = @file_path_utils.form_runner_filepath_from_test( details[:filepath] ) mocks = {} - mocks_list = @configurator.project_use_mocks ? @test_context_extractor.lookup_raw_mock_list( details[:filepath] ) : [] + mocks_list = @configurator.project_use_mocks ? @context_extractor.lookup_raw_mock_list( details[:filepath] ) : [] mocks_list.each do |name| source = @helper.find_header_input_for_mock_file( name, details[:search_paths] ) preprocessed_input = @file_path_utils.form_preprocessed_file_filepath( source, details[:name] ) mocks[name.to_sym] = { :name => name, :source => source, - :input => (@configurator.project_use_test_preprocessor ? preprocessed_input : source) + :input => (@configurator.project_use_test_preprocessor_mocks ? preprocessed_input : source) } end @@ -146,6 +187,9 @@ def setup_and_invoke(tests:, context:TEST_SYM, options:{}) } details[:mocks] = mocks details[:mock_list] = mocks_list + + # Trigger pre_test plugin hook after having assembled all testing context + @plugin_manager.pre_test( details[:filepath] ) end end end @@ -166,53 +210,84 @@ def setup_and_invoke(tests:, context:TEST_SYM, options:{}) @batchinator.exec(workload: :compile, things: mocks) do |mock| details = mock[:details] testable = mock[:testable] - @preprocessinator.preprocess_header_file( + + arg_hash = { filepath: details[:source], test: testable[:name], flags: testable[:compile_flags], include_paths: testable[:search_paths], - defines: testable[:preprocess_defines]) + defines: testable[:preprocess_defines] + } + + @preprocessinator.preprocess_mockable_header_file(**arg_hash) end - } if @configurator.project_use_mocks and @configurator.project_use_test_preprocessor + } if @configurator.project_use_mocks and @configurator.project_use_test_preprocessor_mocks # Generate mocks for all tests @batchinator.build_step("Mocking") { @batchinator.exec(workload: :compile, things: mocks) do |mock| details = mock[:details] testable = mock[:testable] - @generator.generate_mock( + + arg_hash = { context: TEST_SYM, mock: mock[:name], test: testable[:name], input_filepath: details[:input], - output_path: testable[:paths][:mocks] ) + output_path: testable[:paths][:mocks] + } + + @generator.generate_mock(**arg_hash) end } if @configurator.project_use_mocks # Preprocess test files - @batchinator.build_step("Preprocessing for Test Runners") { + @batchinator.build_step("Preprocessing Test Files") { @batchinator.exec(workload: :compile, things: @testables) do |_, details| - filepath = @preprocessinator.preprocess_test_file( + arg_hash = { filepath: details[:filepath], test: details[:name], flags: details[:compile_flags], include_paths: details[:search_paths], - defines: details[:preprocess_defines]) + defines: details[:preprocess_defines] + } - @lock.synchronize { details[:runner][:input_filepath] = filepath } # Replace default input with preprocessed fle + filepath = @preprocessinator.preprocess_test_file(**arg_hash) + + # Replace default input with preprocessed file + @lock.synchronize { details[:runner][:input_filepath] = filepath } end - } if @configurator.project_use_test_preprocessor + } if @configurator.project_use_test_preprocessor_tests + + # Collect test case names + @batchinator.build_step("Collecting Test Context") { + @batchinator.exec(workload: :compile, things: @testables) do |_, details| + + msg = @reportinator.generate_module_progress( + operation: 'Parsing test case names', + module_name: details[:name], + filename: File.basename( details[:filepath] ) + ) + @loginator.log( msg ) + + @context_extractor.collect_test_runner_details( details[:filepath], details[:runner][:input_filepath] ) + end + } if @configurator.project_use_test_preprocessor_tests # Build runners for all tests @batchinator.build_step("Test Runners") do @batchinator.exec(workload: :compile, things: @testables) do |_, details| - @generator.generate_test_runner( + arg_hash = { context: TEST_SYM, mock_list: details[:mock_list], + includes_list: @test_context_extractor.lookup_header_includes_list( details[:filepath] ), test_filepath: details[:filepath], input_filepath: details[:runner][:input_filepath], - runner_filepath: details[:runner][:output_filepath]) + runner_filepath: details[:runner][:output_filepath] + } + + @generator.generate_test_runner(**arg_hash) end end @@ -222,8 +297,16 @@ def setup_and_invoke(tests:, context:TEST_SYM, options:{}) # Source files referenced by conventions or specified by build directives in a test file test_sources = @test_invoker_helper.extract_sources( details[:filepath] ) test_core = test_sources + details[:mock_list] + + # When we have a mock and an include for the same file, the mock wins + test_core.delete_if do |v| + mock_of_this_file = "#{@configurator.cmock_mock_prefix}#{File.basename(v,'.*')}" + details[:mock_list].include?(mock_of_this_file) + end + # CMock + Unity + CException test_frameworks = @helper.collect_test_framework_sources + # Extra suport source files (e.g. microcontroller startup code needed by simulator) test_support = @configurator.collection_all_support @@ -242,7 +325,11 @@ def setup_and_invoke(tests:, context:TEST_SYM, options:{}) test_fail = @file_path_utils.form_fail_results_filepath( details[:paths][:results], details[:filepath] ) # Identify all the objects shall not be linked and then remove them from objects list. - test_no_link_objects = @file_path_utils.form_test_build_objects_filelist(details[:paths][:build], @helper.fetch_shallow_source_includes( details[:filepath] )) + test_no_link_objects = + @file_path_utils.form_test_build_objects_filelist( + details[:paths][:build], + @helper.fetch_shallow_source_includes( details[:filepath] )) + test_objects = test_objects.uniq - test_no_link_objects @lock.synchronize do @@ -267,12 +354,12 @@ def setup_and_invoke(tests:, context:TEST_SYM, options:{}) end end - # Create Final Tests And/Or Executable Links + # Create test binary @batchinator.build_step("Building Test Executables") do lib_args = @helper.convert_libraries_to_arguments() lib_paths = @helper.get_library_paths_to_arguments() @batchinator.exec(workload: :compile, things: @testables) do |_, details| - @test_invoker_helper.generate_executable_now( + arg_hash = { context: context, build_path: details[:paths][:build], executable: details[:executable], @@ -280,8 +367,10 @@ def setup_and_invoke(tests:, context:TEST_SYM, options:{}) flags: details[:link_flags], lib_args: lib_args, lib_paths: lib_paths, - options: options - ) + options: options + } + + @test_invoker_helper.generate_executable_now(**arg_hash) end end @@ -289,15 +378,20 @@ def setup_and_invoke(tests:, context:TEST_SYM, options:{}) @batchinator.build_step("Executing") { @batchinator.exec(workload: :test, things: @testables) do |_, details| begin - @plugin_manager.pre_test( details[:filepath] ) - @test_invoker_helper.run_fixture_now( - context: context, - executable: details[:executable], - result: details[:results_pass], - options: options - ) - rescue => e - @build_invoker_utils.process_exception( e, context ) + arg_hash = { + context: context, + test_name: details[:name], + test_filepath: details[:filepath], + executable: details[:executable], + result: details[:results_pass], + options: options + } + + @test_invoker_helper.run_fixture_now(**arg_hash) + + # Handle exceptions so we can ensure post_test() is called. + # A lone `ensure` includes an implicit rescuing of StandardError + # with the exception continuing up the call trace. ensure @plugin_manager.post_test( details[:filepath] ) end @@ -308,15 +402,15 @@ def setup_and_invoke(tests:, context:TEST_SYM, options:{}) # StandardError is the parent class of all application-level exceptions. # Runtime errors (parent is Exception) continue on up to be caught by Ruby itself. rescue StandardError => e - @streaminator.stderr_puts("Error ==> #{e.class}:: #{e.message}") + @application.register_build_failure + @loginator.log( "#{e.class} ==> #{e.message}", Verbosity::ERRORS, LogLabels::EXCEPTION ) # Debug backtrace - @streaminator.stderr_puts("Backtrace ==>", Verbosity::DEBUG) + @loginator.log("Backtrace ==>", Verbosity::DEBUG) if @verbosinator.should_output?(Verbosity::DEBUG) - $stderr.puts(e.backtrace) # Formats properly when directly passed to puts() + @loginator.log(e.backtrace, Verbosity::DEBUG) end end - end def each_test_with_sources @@ -330,37 +424,54 @@ def lookup_sources(test:) return (@testables[_test])[:sources] end - def compile_test_component(tool:TOOLS_TEST_COMPILER, context:TEST_SYM, test:, source:, object:, msg:nil) + def compile_test_component(tool:, context:TEST_SYM, test:, source:, object:, msg:nil) testable = @testables[test] filepath = testable[:filepath] - search_paths = testable[:search_paths] - flags = testable[:compile_flags] - - # If source file is one of our vendor frameworks, augments its defines - defines = @helper.augment_vendor_defines(defines:testable[:compile_defines], filepath:source) - - @generator.generate_object_file_c( - tool: tool, - module_name: test, - context: context, - source: source, - object: object, - search_paths: search_paths, - flags: flags, - defines: defines, - list: @file_path_utils.form_test_build_list_filepath( object ), - dependencies: @file_path_utils.form_test_dependencies_filepath( object ), - msg: msg - ) - end - - def refresh_deep_dependencies - @file_wrapper.rm_f( - @file_wrapper.directory_listing( - File.join( @configurator.project_test_dependencies_path, '*' + @configurator.extension_dependencies ) ) ) - - @test_invoker_helper.process_deep_dependencies( - (@configurator.collection_all_tests + @configurator.collection_all_source).uniq ) + defines = testable[:compile_defines] + + # Tailor search path--remove duplicates and reduce list to only those needed by vendor / support file compilation + search_paths = @helper.tailor_search_paths(search_paths:testable[:search_paths], filepath:source) + + # C files (user-configured extension or core framework file extensions) + if @file_wrapper.extname(source) != @configurator.extension_assembly + flags = testable[:compile_flags] + + arg_hash = { + tool: tool, + module_name: test, + context: context, + source: source, + object: object, + search_paths: search_paths, + flags: flags, + defines: defines, + list: @file_path_utils.form_test_build_list_filepath( object ), + dependencies: @file_path_utils.form_test_dependencies_filepath( object ), + msg: msg + } + + @generator.generate_object_file_c(**arg_hash) + + # Assembly files + elsif @configurator.test_build_use_assembly + flags = testable[:assembler_flags] + + arg_hash = { + tool: tool, + module_name: test, + context: context, + source: source, + object: object, + search_paths: search_paths, + flags: flags, + defines: defines, # Generally ignored by assemblers + list: @file_path_utils.form_test_build_list_filepath( object ), + dependencies: @file_path_utils.form_test_dependencies_filepath( object ), + msg: msg + } + + @generator.generate_object_file_asm(**arg_hash) + end end private diff --git a/tools/vendor/ceedling/lib/ceedling/test_invoker_helper.rb b/tools/vendor/ceedling/lib/ceedling/test_invoker_helper.rb index 194384a6..395de3ff 100644 --- a/tools/vendor/ceedling/lib/ceedling/test_invoker_helper.rb +++ b/tools/vendor/ceedling/lib/ceedling/test_invoker_helper.rb @@ -1,18 +1,28 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + +require 'ceedling/exceptions' class TestInvokerHelper constructor :configurator, - :streaminator, + :loginator, :build_batchinator, :task_invoker, :test_context_extractor, :include_pathinator, + :preprocessinator, :defineinator, :flaginator, :file_finder, :file_path_utils, :file_wrapper, - :generator + :generator, + :test_runner_manager def setup # Alias for brevity @@ -20,32 +30,60 @@ def setup end def process_project_include_paths - @include_pathinator.validate_test_directive_paths - @include_pathinator.augment_environment_header_files + @include_pathinator.validate_test_build_directive_paths + headers = @include_pathinator.validate_header_files_collection + @include_pathinator.augment_environment_header_files(headers) + end + + def extract_include_directives(arg_hash) + # Run test file through preprocessor to parse out include statements and then collect header files, mocks, etc. + includes = @preprocessinator.preprocess_includes( **arg_hash ) + + # Store the include statements we found + @test_context_extractor.ingest_includes( arg_hash[:filepath], includes ) end def validate_build_directive_source_files(test:, filepath:) sources = @test_context_extractor.lookup_build_directive_sources_list(filepath) + ext_message = @configurator.extension_source + if @configurator.test_build_use_assembly + ext_message += " or #{@configurator.extension_assembly}" + end + sources.each do |source| - ext = @configurator.extension_source - unless @file_wrapper.extname(source) == ext - @streaminator.stderr_puts("File '#{source}' specified with #{UNITY_TEST_SOURCE_FILE}() in #{test} is not a #{ext} source file", Verbosity::NORMAL) - raise + valid_extension = true + + # Only C files in test build + if not @configurator.test_build_use_assembly + valid_extension = false if @file_wrapper.extname(source) != @configurator.extension_source + # C and assembly files in test build + else + ext = @file_wrapper.extname(source) + valid_extension = false if (ext != @configurator.extension_assembly) and (ext != @configurator.extension_source) end - if @file_finder.find_compilation_input_file(source, :ignore).nil? - @streaminator.stderr_puts("File '#{source}' specified with #{UNITY_TEST_SOURCE_FILE}() in #{test} cannot be found in the source file collection", Verbosity::NORMAL) - raise + if not valid_extension + error = "File '#{source}' specified with #{UNITY_TEST_SOURCE_FILE}() in #{test} is not a #{ext_message} source file" + raise CeedlingException.new(error) + end + + if @file_finder.find_build_input_file(filepath: source, complain: :ignore, context: TEST_SYM).nil? + error = "File '#{source}' specified with #{UNITY_TEST_SOURCE_FILE}() in #{test} cannot be found in the source file collection" + raise CeedlingException.new(error) end end end def search_paths(filepath, subdir) - paths = @include_pathinator.lookup_test_directive_include_paths( filepath ) - paths += @configurator.collection_paths_include - paths += @configurator.collection_paths_support + paths = [] + + # Start with mock path to ensure any CMock-reworked header files are encountered first paths << File.join( @configurator.cmock_mock_path, subdir ) if @configurator.project_use_mocks + paths += @include_pathinator.lookup_test_directive_include_paths( filepath ) + paths += @include_pathinator.collect_test_include_paths() + paths += @configurator.collection_paths_support + paths += @configurator.collection_paths_include paths += @configurator.collection_paths_libraries paths += @configurator.collection_paths_vendor paths += @configurator.collection_paths_test_toolchain_include @@ -57,33 +95,66 @@ def compile_defines(context:, filepath:) # If this context exists ([:defines][context]), use it. Otherwise, default to test context. context = TEST_SYM unless @defineinator.defines_defined?( context:context ) - # Defines for the test file - return @defineinator.defines( context:context, filepath:filepath ) - end - - def augment_vendor_defines(filepath:, defines:) - # Start with base defines provided - _defines = defines + defines = @defineinator.generate_test_definition( filepath:filepath ) + defines += @defineinator.defines( subkey:context, filepath:filepath ) # Unity defines - if filepath == File.join(PROJECT_BUILD_VENDOR_UNITY_PATH, UNITY_C_FILE) - _defines += @defineinator.defines( context:UNITY_SYM ) + defines += @defineinator.defines( topkey:UNITY_SYM, subkey: :defines ) # CMock defines - elsif filepath == File.join(PROJECT_BUILD_VENDOR_CMOCK_PATH, CMOCK_C_FILE) - _defines += @defineinator.defines( context:CMOCK_SYM ) if @configurator.project_use_mocks + defines += @defineinator.defines( topkey:CMOCK_SYM, subkey: :defines ) # CException defines - elsif filepath == File.join(PROJECT_BUILD_VENDOR_CEXCEPTION_PATH, CEXCEPTION_C_FILE) - _defines += @defineinator.defines( context:CEXCEPTION_SYM ) if @configurator.project_use_exceptions + defines += @defineinator.defines( topkey:CEXCEPTION_SYM, subkey: :defines ) + + # Injected defines (based on other settings) + defines += @test_runner_manager.collect_defines + + return defines.uniq + end + + def tailor_search_paths(filepath:, search_paths:) + _search_paths = [] + + # Unity search paths + if filepath == File.join(PROJECT_BUILD_VENDOR_UNITY_PATH, UNITY_C_FILE) + _search_paths += @configurator.collection_paths_support + _search_paths << PROJECT_BUILD_VENDOR_UNITY_PATH + + # CMock search paths + elsif @configurator.project_use_mocks and + (filepath == File.join(PROJECT_BUILD_VENDOR_CMOCK_PATH, CMOCK_C_FILE)) + _search_paths += @configurator.collection_paths_support + _search_paths << PROJECT_BUILD_VENDOR_UNITY_PATH + _search_paths << PROJECT_BUILD_VENDOR_CMOCK_PATH + _search_paths << PROJECT_BUILD_VENDOR_CEXCEPTION_PATH if @configurator.project_use_exceptions + + # CException search paths + elsif @configurator.project_use_exceptions and + (filepath == File.join(PROJECT_BUILD_VENDOR_CEXCEPTION_PATH, CEXCEPTION_C_FILE)) + _search_paths += @configurator.collection_paths_support + _search_paths << PROJECT_BUILD_VENDOR_CEXCEPTION_PATH + + # Support files search paths + elsif (@configurator.collection_all_support.include?(filepath)) + _search_paths = search_paths + _search_paths += @configurator.collection_paths_support + _search_paths << PROJECT_BUILD_VENDOR_UNITY_PATH + _search_paths << PROJECT_BUILD_VENDOR_CMOCK_PATH if @configurator.project_use_mocks + _search_paths << PROJECT_BUILD_VENDOR_CEXCEPTION_PATH if @configurator.project_use_exceptions + end + + # Not a vendor file, return original search paths + if _search_paths.length == 0 + return search_paths end - return _defines.uniq + return _search_paths.uniq end def preprocess_defines(test_defines:, filepath:) # Preprocessing defines for the test file - preprocessing_defines = @defineinator.defines( context:PREPROCESS_SYM, filepath:filepath ) + preprocessing_defines = @defineinator.defines( subkey:PREPROCESS_SYM, filepath:filepath ) # If no preprocessing defines are present, default to the test compilation defines return (preprocessing_defines.empty? ? test_defines : preprocessing_defines) @@ -105,9 +176,9 @@ def collect_test_framework_sources # If we're (a) using mocks (b) a Unity helper is defined and (c) that unity helper includes a source file component, # then link in the unity_helper object file too. - if ( @configurator.project_use_mocks and @configurator.cmock_unity_helper ) - @configurator.cmock_unity_helper.each do |helper| - if @file_wrapper.exist?(helper.ext(EXTENSION_SOURCE)) + if @configurator.project_use_mocks + @configurator.cmock_unity_helper_path.each do |helper| + if @file_wrapper.exist?( helper.ext(EXTENSION_SOURCE) ) sources << helper end end @@ -116,32 +187,26 @@ def collect_test_framework_sources return sources end - def process_deep_dependencies(files) - return if (not @configurator.project_use_deep_dependencies) - - dependencies_list = @file_path_utils.form_test_dependencies_filelist( files ).uniq - - if @configurator.project_generate_deep_dependencies - @task_invoker.invoke_test_dependencies_files( dependencies_list ) - end - - yield( dependencies_list ) if block_given? - end - def extract_sources(test_filepath) sources = [] # Get any additional source files specified by TEST_SOURCE_FILE() in test file _sources = @test_context_extractor.lookup_build_directive_sources_list(test_filepath) _sources.each do |source| - sources << @file_finder.find_compilation_input_file(source, :ignore) + sources << @file_finder.find_build_input_file(filepath: source, complain: :ignore, context: TEST_SYM) end + _support_headers = COLLECTION_ALL_SUPPORT.map { |filepath| File.basename(filepath).ext(EXTENSION_HEADER) } + # Get all #include .h files from test file so we can find any source files by convention - includes = @test_context_extractor.lookup_header_includes_list(test_filepath) + includes = @test_context_extractor.lookup_full_header_includes_list(test_filepath) includes.each do |include| - next if File.basename(include).start_with?(CMOCK_MOCK_PREFIX) # Ignore mocks in this list - sources << @file_finder.find_compilation_input_file(include, :ignore) + _basename = File.basename(include) + next if _basename == UNITY_H_FILE # Ignore Unity in this list + next if _basename.start_with?(CMOCK_MOCK_PREFIX) # Ignore mocks in this list + next if _support_headers.include?(_basename) # Ignore any sources in our support files list + + sources << @file_finder.find_build_input_file(filepath: include, complain: :ignore, context: TEST_SYM) end # Remove any nil or duplicate entries in list @@ -169,7 +234,7 @@ def clean_test_results(path, tests) def generate_objects_now(object_list, context, options) @batchinator.exec(workload: :compile, things: object_list) do |object| - src = @file_finder.find_compilation_input_file(object) + src = @file_finder.find_build_input_file(filepath: object, context: TEST_SYM) if (File.basename(src) =~ /#{EXTENSION_SOURCE}$/) @generator.generate_object_file( options[:test_compiler], @@ -209,23 +274,60 @@ def get_library_paths_to_arguments() end def generate_executable_now(context:, build_path:, executable:, objects:, flags:, lib_args:, lib_paths:, options:) - @generator.generate_executable_file( - options[:test_linker], - context, - objects.map{|v| "\"#{v}\""}, - flags, - executable, - @file_path_utils.form_test_build_map_filepath( build_path, executable ), - lib_args, - lib_paths ) - end - - def run_fixture_now(context:, executable:, result:, options:) + begin + @generator.generate_executable_file( + options[:test_linker], + context, + objects.map{|v| "\"#{v}\""}, + flags, + executable, + @file_path_utils.form_test_build_map_filepath( build_path, executable ), + lib_args, + lib_paths ) + rescue ShellExecutionException => ex + if ex.shell_result[:output] =~ /symbol/i + notice = "If the linker reports missing symbols, the following may be to blame:\n" + + " 1. This test lacks #include statements corresponding to needed source files (see note below).\n" + + " 2. Project file paths omit source files corresponding to #include statements in this test.\n" + + " 3. Complex macros, #ifdefs, etc. have obscured correct #include statements in this test.\n" + + " 4. Your project is attempting to mix C++ and C file extensions (not supported).\n" + if (@configurator.project_use_mocks) + notice += " 5. This test does not #include needed mocks (that triggers their generation).\n" + end + + notice += "\n" + notice += "NOTE: A test file directs the build of a test executable with #include statemetns:\n" + + " * By convention, Ceedling assumes header filenames correspond to source filenames.\n" + + " * Which code files to compile and link are determined by #include statements.\n" + if (@configurator.project_use_mocks) + notice += " * An #include statement convention directs the generation of mocks from header files.\n" + end + + notice += "\n" + notice += "OPTIONS:\n" + + " 1. Doublecheck this test's #include statements.\n" + + " 2. Simplify complex macros or fully specify symbols for this test in :project ↳ :defines.\n" + + " 3. If no header file corresponds to the needed source file, use the #{UNITY_TEST_SOURCE_FILE}()\n" + + " build diective macro in this test to inject a source file into the build.\n\n" + + "See the docs on conventions, paths, preprocessing, compilation symbols, and build directive macros.\n\n" + + # Print helpful notice + @loginator.log( notice, Verbosity::COMPLAIN, LogLabels::NOTICE ) + end + + # Re-raise the exception + raise ex + end + end + + def run_fixture_now(context:, test_name:, test_filepath:, executable:, result:, options:) @generator.generate_test_results( - tool: options[:test_fixture], - context: context, - executable: executable, - result: result) + tool: options[:test_fixture], + context: context, + test_name: test_name, + test_filepath: test_filepath, + executable: executable, + result: result) end end diff --git a/tools/vendor/ceedling/lib/ceedling/test_runner_manager.rb b/tools/vendor/ceedling/lib/ceedling/test_runner_manager.rb new file mode 100644 index 00000000..47c2ee35 --- /dev/null +++ b/tools/vendor/ceedling/lib/ceedling/test_runner_manager.rb @@ -0,0 +1,47 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + +require 'ceedling/constants' + +class TestRunnerManager + + def initialize() + @test_case_incl = nil + @test_case_excl = nil + @test_runner_defines = [] + end + + def configure_build_options(config) + cmdline_args = config[:test_runner][:cmdline_args] + + # Should never happen because of external config handling, but... + return if cmdline_args.nil? + + @test_runner_defines << RUNNER_BUILD_CMDLINE_ARGS_DEFINE if cmdline_args + end + + def configure_runtime_options(include_test_case, exclude_test_case) + if !include_test_case.empty? + @test_case_incl = "-f #{include_test_case}" + end + + if !exclude_test_case.empty? + @test_case_excl = "-x #{exclude_test_case}" + end + end + + # Return test case arguments (empty if not set) + def collect_cmdline_args() + return [ @test_case_incl, @test_case_excl ].compact() + end + + # Return ['UNITY_USE_COMMAND_LINE_ARGS'] #define required by Unity to enable cmd line arguments + def collect_defines() + return @test_runner_defines + end + +end diff --git a/tools/vendor/ceedling/lib/ceedling/tool_executor.rb b/tools/vendor/ceedling/lib/ceedling/tool_executor.rb index fd8ec4f7..cbfeb90f 100644 --- a/tools/vendor/ceedling/lib/ceedling/tool_executor.rb +++ b/tools/vendor/ceedling/lib/ceedling/tool_executor.rb @@ -1,21 +1,17 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + require 'ceedling/constants' +require 'ceedling/exceptions' require 'benchmark' -class ShellExecutionException < RuntimeError - attr_reader :shell_result - def initialize(shell_result:, message:) - @shell_result = shell_result - super(message) - end -end - class ToolExecutor - constructor :configurator, :tool_executor_helper, :streaminator, :verbosinator, :system_wrapper - - def setup - - end + constructor :configurator, :tool_executor_helper, :loginator, :verbosinator, :system_wrapper # build up a command line from yaml provided config @@ -23,44 +19,48 @@ def setup def build_command_line(tool_config, extra_params, *args) command = {} - # basic premise is to iterate top to bottom through arguments using '$' as - # a string replacement indicator to expand globals or inline yaml arrays - # into command line arguments via substitution strings - # executable must be quoted if it includes spaces (common on windows) - executable = @tool_executor_helper.osify_path_separators( expandify_element(tool_config[:name], tool_config[:executable], *args) ) - executable = "\"#{executable}\"" if executable.include?(' ') + command[:name] = tool_config[:name] + command[:executable] = tool_config[:executable] + + command[:options] = {} # Blank to hold options set before `exec()` processes + + # Basic premise is to iterate top to bottom through arguments using '$' as + # a string replacement indicator to expand globals or inline yaml arrays + # into command line arguments via substitution strings. + executable = @tool_executor_helper.osify_path_separators( + expandify_element(tool_config[:name], tool_config[:executable], *args) + ) + command[:line] = [ executable, extra_params.join(' ').strip, build_arguments(tool_config[:name], tool_config[:arguments], *args), ].reject{|s| s.nil? || s.empty?}.join(' ').strip - command[:options] = { - :stderr_redirect => @tool_executor_helper.stderr_redirection(tool_config, @configurator.project_logging) - } + @loginator.log( "Command: #{command}", Verbosity::DEBUG ) return command end # shell out, execute command, and return response - def exec(command, options={}, args=[]) + def exec(command, args=[]) + options = command[:options] + options[:boom] = true if (options[:boom].nil?) options[:stderr_redirect] = StdErrRedirect::NONE if (options[:stderr_redirect].nil?) # Build command line command_line = [ - command.strip, + command[:line].strip, args, @tool_executor_helper.stderr_redirect_cmdline_append( options ), ].flatten.compact.join(' ') - @streaminator.stderr_puts("Verbose: #{__method__}(): #{command_line}", Verbosity::DEBUG) - shell_result = {} time = Benchmark.realtime do - shell_result = @system_wrapper.shell_capture3( command_line, options[:boom] ) + shell_result = @system_wrapper.shell_capture3( command:command_line, boom:options[:boom] ) end shell_result[:time] = time @@ -70,18 +70,21 @@ def exec(command, options={}, args=[]) shell_result[:output].gsub!(/\033\[\d\dm/,'') end - @tool_executor_helper.print_happy_results( command_line, shell_result, options[:boom] ) - @tool_executor_helper.print_error_results( command_line, shell_result, options[:boom] ) + @tool_executor_helper.log_results( command_line, shell_result ) - # Go boom if exit code is not 0 and we want to debug (in some cases we don't want a non-0 exit code to raise) + # Go boom if exit code is not 0 and that code means a fatal error + # (Sometimes we don't want a non-0 exit code to cause an exception as the exit code may not mean a build-ending failure) if ((shell_result[:exit_code] != 0) and options[:boom]) - raise ShellExecutionException.new(shell_result: shell_result, message: "Tool exited with an error") + raise ShellExecutionException.new( + shell_result: shell_result, + # Titleize the command's name -- each word is capitalized and any underscores replaced with spaces + name: "'#{command[:name].split(/ |\_/).map(&:capitalize).join(" ")}' " + "(#{command[:executable]})" + ) end return shell_result end - private ############################# @@ -126,8 +129,8 @@ def expandify_element(tool_name, element, *args) args_index = ($2.to_i - 1) if (args.nil? or args[args_index].nil?) - @streaminator.stderr_puts("ERROR: Tool '#{tool_name}' expected valid argument data to accompany replacement operator #{$1}.", Verbosity::ERRORS) - raise + error = "Tool '#{tool_name}' expected valid argument data to accompany replacement operator #{$1}." + raise CeedlingException.new( error ) end match = /#{Regexp.escape($1)}/ @@ -171,8 +174,8 @@ def dehashify_argument_elements(tool_name, hash) expand = hash[hash.keys[0]] if (expand.nil?) - @streaminator.stderr_puts("ERROR: Tool '#{tool_name}' could not expand nil elements for substitution string '#{substitution}'.", Verbosity::ERRORS) - raise + error = "Tool '#{tool_name}' could not expand nil elements for substitution string '#{substitution}'." + raise CeedlingException.new( error ) end # array-ify expansion input if only a single string @@ -189,19 +192,19 @@ def dehashify_argument_elements(tool_name, hash) elsif (@system_wrapper.constants_include?(item)) const = Object.const_get(item) if (const.nil?) - @streaminator.stderr_puts("ERROR: Tool '#{tool_name}' found constant '#{item}' to be nil.", Verbosity::ERRORS) - raise + error = "Tool '#{tool_name}' found constant '#{item}' to be nil." + raise CeedlingException.new( error ) else elements << const end elsif (item.class == Array) elements << item elsif (item.class == String) - @streaminator.stderr_puts("ERROR: Tool '#{tool_name}' cannot expand nonexistent value '#{item}' for substitution string '#{substitution}'.", Verbosity::ERRORS) - raise + error = "Tool '#{tool_name}' cannot expand nonexistent value '#{item}' for substitution string '#{substitution}'." + raise CeedlingException.new( error ) else - @streaminator.stderr_puts("ERROR: Tool '#{tool_name}' cannot expand value having type '#{item.class}' for substitution string '#{substitution}'.", Verbosity::ERRORS) - raise + error = "Tool '#{tool_name}' cannot expand value having type '#{item.class}' for substitution string '#{substitution}'." + raise CeedlingException.new( error ) end end diff --git a/tools/vendor/ceedling/lib/ceedling/tool_executor_helper.rb b/tools/vendor/ceedling/lib/ceedling/tool_executor_helper.rb index 1936c683..3c30cd55 100644 --- a/tools/vendor/ceedling/lib/ceedling/tool_executor_helper.rb +++ b/tools/vendor/ceedling/lib/ceedling/tool_executor_helper.rb @@ -1,28 +1,17 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + require 'ceedling/constants' # for Verbosity enumeration & $stderr redirect enumeration ## # Helper functions for the tool executor class ToolExecutorHelper - constructor :streaminator, :system_utils, :system_wrapper - - ## - # Returns the stderr redirection based on the config and logging. - # ==== Attributes - # - # * _tool_config_: A hash containing config information. - # * _logging_: A boolean representing if logging is enabled or not. - # - def stderr_redirection(tool_config, logging) - # if there's no logging enabled, return :stderr_redirect unmodified - return tool_config[:stderr_redirect] if (not logging) - - # if there is logging enabled but the redirect is a custom value (not enum), return the custom string - return tool_config[:stderr_redirect] if (tool_config[:stderr_redirect].class == String) - - # if logging is enabled but there's no custom string, return the AUTO enumeration so $stderr goes into the log - return StdErrRedirect::AUTO - end + constructor :loginator, :system_utils, :system_wrapper, :verbosinator ## # Modifies an executables path based on platform. @@ -67,48 +56,50 @@ def stderr_redirect_cmdline_append(tool_config) end ## - # Outputs success results if command succeeded and we have verbosity cranked up. + # Logs tool execution results # ==== Attributes # # * _command_str_: The command ran. - # * _shell_results_: The outputs of the command including exit code and - # output. - # * _boom_: A boolean representing if a non zero result is erroneous. + # * _shell_results_: The outputs of the command including exit code and output. # - def print_happy_results(command_str, shell_result, boom=true) - if ((shell_result[:exit_code] == 0) or ((shell_result[:exit_code] != 0) and not boom)) - output = "> Shell executed command:\n" - output += "'#{command_str}'\n" - output += "> Produced output:\n" if (not shell_result[:output].empty?) - output += "#{shell_result[:output].strip}\n" if (not shell_result[:output].empty?) - output += "> And exited with status: [#{shell_result[:exit_code]}].\n" if (shell_result[:exit_code] != 0) - output += "\n" - - @streaminator.stdout_puts(output, Verbosity::OBNOXIOUS) + def log_results(command_str, shell_result) + # No logging unless we're at least at Obnoxious + return if !@verbosinator.should_output?( Verbosity::OBNOXIOUS ) + + output = "> Shell executed command:\n" + output += "`#{command_str}`\n" + + # Detailed debug logging + if @verbosinator.should_output?( Verbosity::DEBUG ) + output += "> With $stdout: " + output += shell_result[:stdout].empty? ? "\n" : "\n#{shell_result[:stdout].strip()}\n" + + output += "> With $stderr: " + output += shell_result[:stderr].empty? ? "\n" : "\n#{shell_result[:stderr].strip()}\n" + + output += "> And terminated with status: #{shell_result[:status]}\n" + + @loginator.log( '', Verbosity::DEBUG ) + @loginator.log( output, Verbosity::DEBUG ) + @loginator.log( '', Verbosity::DEBUG ) + + return # Bail out end - end - ## - # Outputs failures results if command failed and we have verbosity set to minimum error level. - # ==== Attributes - # - # * _command_str_: The command ran. - # * _shell_results_: The outputs of the command including exit code and - # output. - # * _boom_: A boolean representing if a non zero result is erroneous. - # - def print_error_results(command_str, shell_result, boom=true) - if ((shell_result[:exit_code] != 0) and boom) - output = "ERROR: Shell command failed.\n" - output += "> Shell executed command:\n" - output += "'#{command_str}'\n" - output += "> Produced output:\n" if (not shell_result[:output].empty?) - output += "#{shell_result[:output].strip}\n" if (not shell_result[:output].empty?) - output += "> And exited with status: [#{shell_result[:exit_code]}].\n" if (shell_result[:exit_code] != nil) - output += "> And then likely crashed.\n" if (shell_result[:exit_code] == nil) - output += "\n" - - @streaminator.stderr_puts(output, Verbosity::ERRORS) + # Slightly less verbose obnoxious logging + if !shell_result[:output].empty? + output += "> Produced output: " + output += shell_result[:output].strip().empty? ? "\n" : "\n#{shell_result[:output].strip()}\n" end + + if !shell_result[:exit_code].nil? + output += "> And terminated with exit code: [#{shell_result[:exit_code]}]\n" + else + output += "> And exited prematurely\n" + end + + @loginator.log( '', Verbosity::OBNOXIOUS ) + @loginator.log( output, Verbosity::OBNOXIOUS ) + @loginator.log( '', Verbosity::OBNOXIOUS ) end end diff --git a/tools/vendor/ceedling/lib/ceedling/tool_validator.rb b/tools/vendor/ceedling/lib/ceedling/tool_validator.rb new file mode 100644 index 00000000..fe11fb46 --- /dev/null +++ b/tools/vendor/ceedling/lib/ceedling/tool_validator.rb @@ -0,0 +1,148 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + +require 'rake' # For ext() +require 'ceedling/constants' +require 'ceedling/tool_executor' # For argument replacement pattern +require 'ceedling/file_path_utils' # For glob handling class methods + + +class ToolValidator + + constructor :file_wrapper, :loginator, :system_wrapper, :reportinator + + def validate(tool:, name:nil, extension:EXTENSION_EXECUTABLE, respect_optional:false, boom:false) + # Redefine name with name inside tool hash if it's not provided + # If the name is provided it's likely the formatted key path into the configuration file + name = tool[:name] if name.nil? or name.empty? + + valid = true + + valid &= validate_executable( tool:tool, name:name, extension:extension, respect_optional:respect_optional, boom:boom ) + valid &= validate_stderr_redirect( tool:tool, name:name, boom:boom ) + + return valid + end + + ### Private ### + + private + + def validate_executable(tool:, name:, extension:, respect_optional:, boom:) + exists = false + error = '' + + # Get unfrozen copy so we can modify for our processing + executable = tool[:executable].dup() + + # Handle a missing :executable + if (executable.nil? or executable.empty?) + error = "#{name} is missing :executable in its configuration." + if !boom + @loginator.log( error, Verbosity::ERRORS ) + return false + end + + raise CeedlingException.new(error) + end + + # If tool is optional and we're respecting that, don't bother to check if executable is legit + return true if tool[:optional] and respect_optional + + # Skip everything if we've got an argument replacement pattern in :executable + # (Allow executable to be validated by shell at run time) + return true if (executable =~ TOOL_EXECUTOR_ARGUMENT_REPLACEMENT_PATTERN) + + # Extract the executable (including optional filepath) apart from any additional arguments + # Be mindful of legal quote enclosures (e.g. `"Code Cruncher" foo bar`) + executable.strip! + if (matched = executable.match(/^"(.+)"/)) + # If the regex matched, extract contents of match group within parens + executable = matched[1] + else + # Otherwise grab first token before arguments + executable = executable.split(' ')[0] + end + + # If no path included, verify file exists in system search paths + if (not executable.include?('/')) + + # Iterate over search paths + @system_wrapper.search_paths.each do |path| + # File exists as named + if (@file_wrapper.exist?( File.join(path, executable)) ) + exists = true + break + # File exists with executable file extension + elsif (@file_wrapper.exist?( (File.join(path, executable)).ext( extension ) )) + exists = true + break + # We're on Windows and file exists with .exe file extension + elsif (@system_wrapper.windows? and @file_wrapper.exist?( (File.join(path, executable)).ext( EXTENSION_WIN_EXE ) )) + exists = true + break + end + end + + # Construct end of error message + error = "does not exist in system search paths" if not exists + + # If there is a path included, check that explicit filepath exists + else + if @file_wrapper.exist?( executable ) + exists = true + else + # Construct end of error message + error = "does not exist on disk" if not exists + end + end + + if !exists + error = "#{name} ↳ :executable => `#{executable}` " + error + end + + # Raise exception if executable can't be found and boom is set + if !exists and boom + raise CeedlingException.new( error ) + end + + # Otherwise, log error + if !exists + @loginator.log( error, Verbosity::ERRORS ) + end + + return exists + end + + def validate_stderr_redirect(tool:, name:, boom:) + error = '' + redirect = tool[:stderr_redirect] + + # If no redirect set at all, it's cool + return if redirect.nil? + + # Otherwise, process the redirect that's been set + if redirect.class == Symbol + if not StdErrRedirect.constants.map{|constant| constant.to_s}.include?( redirect.to_s.upcase ) + options = StdErrRedirect.constants.map{|constant| ':' + constant.to_s.downcase}.join(', ') + error = "#{name} ↳ :stderr_redirect => :#{redirect} is not a recognized option {#{options}}" + + # Raise exception if requested + raise CeedlingException.new( error ) if boom + + # Otherwise log error + @loginator.log( error, Verbosity::ERRORS ) + return false + end + elsif redirect.class != String + raise CeedlingException.new( "#{name} ↳ :stderr_redirect is neither a recognized value nor custom string" ) + end + + return true + end + +end diff --git a/tools/vendor/ceedling/lib/ceedling/unity_utils.rb b/tools/vendor/ceedling/lib/ceedling/unity_utils.rb deleted file mode 100644 index 88e8684e..00000000 --- a/tools/vendor/ceedling/lib/ceedling/unity_utils.rb +++ /dev/null @@ -1,109 +0,0 @@ -# The Unity utils class, -# Store functions to enable test execution of single test case under test file -# and additional warning definitions -class UnityUtils - attr_reader :test_runner_disabled_replay, :arg_option_map - attr_accessor :test_case_incl, :test_case_excl, :not_supported - - constructor :configurator - - def setup - @test_runner_disabled_replay = "NOTICE: \n" \ - "The option[s]: %.s \ncannot be applied." \ - 'To enable it, please add `:cmdline_args` under' \ - ' :test_runner option in your project.yml.' - @test_case_incl = '' - @test_case_excl = '' - @not_supported = '' - - # Refering to Unity implementation of the parser implemented in the unit.c : - # - # case 'l': /* list tests */ - # case 'n': /* include tests with name including this string */ - # case 'f': /* an alias for -n */ - # case 'q': /* quiet */ - # case 'v': /* verbose */ - # case 'x': /* exclude tests with name including this string */ - @arg_option_map = - { - 'test_case' => 'n', - 'list_test_cases' => 'l', - 'run_tests_verbose' => 'v', - 'exclude_test_case' => 'x' - } - end - - # Create test runner args which can be passed to executable test file as - # filter to execute one test case from test file - # - # @param [String, #argument] argument passed after test file name - # e.g.: ceedling test:: - # @param [String, #option] one of the supported by unity arguments. - # At current moment only "test_case_name" to - # run single test - # - # @return String - empty if cmdline_args is not set - # In other way properly formated command line for Unity - def additional_test_run_args(argument, option) - # Confirm wherever cmdline_args is set to true - # and parsing arguments under generated test runner in Unity is enabled - # and passed argument is not nil - - return nil if argument.nil? - - raise TypeError, 'option expects an arg_option_map key' unless \ - option.is_a?(String) - raise 'Unknown Unity argument option' unless \ - @arg_option_map.key?(option) - - " -#{@arg_option_map[option]} #{argument} " - end - - # Return test case arguments - # - # @return [String] formatted arguments for test file - def collect_test_runner_additional_args - "#{@test_case_incl} #{@test_case_excl}" - end - - # Parse passed by user arguments - def create_test_runner_additional_args - if ENV['CEEDLING_INCLUDE_TEST_CASE_NAME'] - if @configurator.project_config_hash[:test_runner_cmdline_args] - @test_case_incl += additional_test_run_args( - ENV['CEEDLING_INCLUDE_TEST_CASE_NAME'], - 'test_case') - else - @not_supported += "\n\t--test_case" - end - end - - if ENV['CEEDLING_EXCLUDE_TEST_CASE_NAME'] - if @configurator.project_config_hash[:test_runner_cmdline_args] - @test_case_excl += additional_test_run_args( - ENV['CEEDLING_EXCLUDE_TEST_CASE_NAME'], - 'exclude_test_case') - else - @not_supported += "\n\t--exclude_test_case" - end - end - - if ENV['CEEDLING_EXCLUDE_TEST_CASE_NAME'] || ENV['CEEDLING_INCLUDE_TEST_CASE_NAME'] - print_warning_about_not_enabled_cmdline_args - end - end - - # Return UNITY_USE_COMMAND_LINE_ARGS define required by Unity to - # compile unity with enabled cmd line arguments - # - # @return [Array] - empty if cmdline_args is not set - def self.update_defines_if_args_enables(in_hash) - in_hash[:test_runner_cmdline_args] ? ['UNITY_USE_COMMAND_LINE_ARGS'] : [] - end - - # Print on output console warning about lack of support for single test run - # if cmdline_args is not set to true in project.yml file, that - def print_warning_about_not_enabled_cmdline_args - puts(format(@test_runner_disabled_replay, opt: @not_supported)) unless @not_supported.empty? - end -end diff --git a/tools/vendor/ceedling/lib/ceedling/verbosinator.rb b/tools/vendor/ceedling/lib/ceedling/verbosinator.rb index e8ed38d7..ededb6c1 100644 --- a/tools/vendor/ceedling/lib/ceedling/verbosinator.rb +++ b/tools/vendor/ceedling/lib/ceedling/verbosinator.rb @@ -1,10 +1,17 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= -class Verbosinator +require 'ceedling/constants' - constructor :configurator +class Verbosinator def should_output?(level) - return (level <= @configurator.project_verbosity) + # Rely on global constant created at early stages of command line processing + return (!defined?(PROJECT_VERBOSITY)) || (level <= PROJECT_VERBOSITY) end end diff --git a/tools/vendor/ceedling/lib/ceedling/version.rb b/tools/vendor/ceedling/lib/ceedling/version.rb deleted file mode 100644 index b3cf5110..00000000 --- a/tools/vendor/ceedling/lib/ceedling/version.rb +++ /dev/null @@ -1,56 +0,0 @@ - -# @private -module Ceedling - module Version - { "UNITY" => File.join("unity","src","unity.h"), - "CMOCK" => File.join("cmock","src","cmock.h"), - "CEXCEPTION" => File.join("c_exception","lib","CException.h") - }.each_pair do |name, path| - # Check for local or global version of vendor directory in order to look up versions - path1 = File.expand_path( File.join("..","..","vendor",path) ) - path2 = File.expand_path( File.join(File.dirname(__FILE__),"..","..","vendor",path) ) - filename = if (File.exist?(path1)) - path1 - elsif (File.exist?(path2)) - path2 - elsif File.exist?(CEEDLING_VENDOR) - path3 = File.expand_path( File.join(CEEDLING_VENDOR,path) ) - if (File.exist?(path3)) - path3 - else - basepath = File.join( CEEDLING_VENDOR, path.split(/\\\//)[0], 'release') - begin - [ @ceedling[:file_wrapper].read( File.join(base_path, 'release', 'version.info') ).strip, - @ceedling[:file_wrapper].read( File.join(base_path, 'release', 'build.info') ).strip ].join('.') - rescue - "#{name}" - end - end - else - module_eval("#{name} = 'unknown'") - continue - end - - # Actually look up the versions - a = [0,0,0] - begin - File.readlines(filename).each do |line| - ["VERSION_MAJOR", "VERSION_MINOR", "VERSION_BUILD"].each_with_index do |field, i| - m = line.match(/#{name}_#{field}\s+(\d+)/) - a[i] = m[1] unless (m.nil?) - end - end - rescue - abort("Can't collect data for vendor component: \"#{filename}\" . \nPlease check your setup.") - end - - # splat it to return the final value - eval("#{name} = '#{a.join(".")}'") - end - - GEM = "0.32.0" - CEEDLING = GEM - - puts CEEDLING if __FILE__ == $0 - end -end diff --git a/tools/vendor/ceedling/lib/ceedling/yaml_wrapper.rb b/tools/vendor/ceedling/lib/ceedling/yaml_wrapper.rb index d5b9355d..2ecd8009 100644 --- a/tools/vendor/ceedling/lib/ceedling/yaml_wrapper.rb +++ b/tools/vendor/ceedling/lib/ceedling/yaml_wrapper.rb @@ -1,3 +1,10 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + require 'yaml' require 'erb' diff --git a/tools/vendor/ceedling/lib/version.rb b/tools/vendor/ceedling/lib/version.rb new file mode 100644 index 00000000..56f88bd9 --- /dev/null +++ b/tools/vendor/ceedling/lib/version.rb @@ -0,0 +1,24 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + +## +## version.rb is run as: +## 1. An executable script for a Ceedling tag used in the release build process +## `ruby Ceedling/lib/version.rb` +## 2. As a code module of constants consumed by Ruby's gem building process +## + +module Ceedling + module Version + # Convenience constants for gem building, etc. + GEM = '1.0.0' + TAG = GEM + + # If run as a script print Ceedling's version to $stdout + puts( TAG ) if (__FILE__ == $0) + end +end diff --git a/tools/vendor/ceedling/license.txt b/tools/vendor/ceedling/license.txt new file mode 100644 index 00000000..568fb43f --- /dev/null +++ b/tools/vendor/ceedling/license.txt @@ -0,0 +1,22 @@ +Copyright (c) 2010-2024 Michael Karlesky, Mark VanderVoord, Greg Williams + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. diff --git a/tools/vendor/ceedling/plugins/beep/README.md b/tools/vendor/ceedling/plugins/beep/README.md index 09047709..bc06b2c6 100644 --- a/tools/vendor/ceedling/plugins/beep/README.md +++ b/tools/vendor/ceedling/plugins/beep/README.md @@ -1,22 +1,133 @@ -ceedling-beep -============= +# Ceedling Plugin: Beep -This is a simple plugin that just beeps at the end of a build and/or test sequence. Are you getting too distracted surfing -the internet, chatting with coworkers, or swordfighting while it's building or testing? The friendly beep will let you know +Hear a useful beep at the end of a build. + +# Plugin Overview + +Are you getting too distracted surfing the internet, chatting with coworkers, or swordfighting while a long build runs? A friendly beep will let you know it's time to pay attention again. -This plugin has very few configuration options. At this time it can beep on completion of a task and/or on an error condition. -For each of these, you can configure the method that it should beep. +# Setup + +To use this plugin, it must be enabled: + +```yaml +:plugins: + :enabled: + - beep +``` + +# Configuration + +Beep includes a default configuration. By just enabling the plugin, the simplest cross-platform sound mechanism (`:bell` below) is automatically enabled for both +build completion and build error events. + +If you would like to customize your beeps, the following explains your options. + +## Events + +When this plugin is enabled, a beep is sounded when: + +* A test build or release build finish successfully. +* An error condition breaks a build. + +To change the default sound for each event, define `:on_done` and `:on_error` beneath a top-level `:beep` entry in your configuration file. See example below. + +## Sound options + +The following options are fixed. At present, this plugin does not expose customization settings. + +* `:bell` + + `:bell` is the simplest and most widely available option for beeping. This option simply `echo`s the unprintable [ASCII bell character][ascii-bel-character] to a command terminal. This option is generally available on all platforms, including Windows. + + [ascii-bel-character]: https://en.wikipedia.org/wiki/Bell_character + +* `:tput` + + [`tput`][tput] is a command line utility widely availble among Unix derivatives, including Linux and macOS. The `tput` utility uses the terminfo database to make the values of terminal-dependent capabilities (including the [ASCII bell character][ascii-bel-character]) and terminal information available to the shell. + + If the `echo`-based method used by the `:bell` option is not successful, `:tput` is a good backup option (except on Windows). + + [tput]: https://linux.die.net/man/1/tput + +* `:beep` + + [`beep`][beep] is an old but widely available Linux package for tone generation using the PC speaker. + + `beep` requires isntallation and the possibility of a complementary kernel module. + + The original audio device in a PC before sound cards was a simple and limited speaker directly wired to a motherboard. Rarely, modern systems still have this device. More commonly, its functions are routed to a default mode of modern audio hardware. `beep` may not work on modern Linux systems. If it is a viable option, this utility is typically dependent on a PC speaker kernel module and related configuration. + + [beep]: https://linux.die.net/man/1/beep + +* `:speaker_test` + + [`speaker-test`][speaker-test] is a Linux package commonly available for tone generation using a system's audio features. + + `speaker-test` requires installation as well as audio subsystem configuration. + + _Note:_ `speaker-test` typically mandates a 4 second minimum run, even if the configured sound plays for less than this minimum. Options to limit `speaker-test`'s minimum time are likely possible but would require combining advanced Ceedling features. + + [speaker-test]: https://linux.die.net/man/1/speaker-test + +* `:say` + + macOS includes a built-in text-to-speech command line application, [`say`][say]. When Ceedling is running on macOS and this beep option is selected, Ceedling events will be verbally announced. + + [say]: https://ss64.com/mac/say.html + +## Adding arguments to a beep tool + +Each of the sound options above map to a command line tool that Ceedling executes. + +The `:beep`, `:speaker_test`, and `:say` tools can accept additional command line arguments to modify their behavior and sound ouput. + +The `:speaker_test` tool is preconfigured with its `-t`, `-f`, and `-l` arguments to generate a 1 second 1000 Hz sine wave. Any additional arguments added through configuration will follow these (and could conflict). + +To add additional arguments, a feature of Ceedling's project file handling allows you to merge a partial tool definition with tools already fully defined. ```yaml +:tools_beep_: # Fill in as from the list above + :arguments: + - ... # Add any aguments as a list of strings +``` + +## Example beep configurations in YAML + +Enabling the plugin and event handlers with beep tool selections: + +```yaml +:plugins: + :enabled: + - beep + +# The following is the default configuration. +# It is shown for completeness, but it need not be duplicated in your project file +# if the default settings work for you. :beep: :on_done: :bell :on_error: :bell ``` -Each of these have the following options: +Adding an argument to a beep tool: + +```yaml +:plugins: + :enabled: + - beep + +:beep: + :on_done: :say # Choose the macOS `say` tool for build done events + # `:bell` remains the default for :on_error: + +:tools_beep_say: + :arguments: + - -v daniel # Change `say` command line to use Daniel voice + +``` + +# Notes - - :bell - this option uses the ASCII bell character out stdout - - :speaker_test - this uses the linux speaker-test command if installed +* Some terminal emulators intercept and/or silence beeps. Remote terminal sessions can add further complication. Be sure to check relevant configuration options to accomplish what you want. -Very likely, we'll be adding to this list if people find this to be useful. diff --git a/tools/vendor/ceedling/plugins/beep/config/defaults.yml b/tools/vendor/ceedling/plugins/beep/config/defaults.yml index d89ffe74..080195bc 100644 --- a/tools/vendor/ceedling/plugins/beep/config/defaults.yml +++ b/tools/vendor/ceedling/plugins/beep/config/defaults.yml @@ -1,3 +1,10 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + --- :beep: :on_done: :bell diff --git a/tools/vendor/ceedling/plugins/beep/config/defaults_beep.rb b/tools/vendor/ceedling/plugins/beep/config/defaults_beep.rb new file mode 100644 index 00000000..938de894 --- /dev/null +++ b/tools/vendor/ceedling/plugins/beep/config/defaults_beep.rb @@ -0,0 +1,67 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + +# Most generic beep option across all platforms -- echo the ASCII bell character +DEFAULT_BEEP_BELL_TOOL = { + :executable => 'echo'.freeze, # Using `echo` shell command / command line application + :optional => true.freeze, + :name => 'default_beep_bell'.freeze, + :arguments => [ + *('-n'.freeze unless SystemWrapper.windows?), # No trailing newline for Unix-style echo (argument omitted on Windows) + "\x07".freeze # Unprintable ASCII bell character, escaped in Ruby string + ].freeze + } + +# Terminal put the bell character on Unix-derived platforms +DEFAULT_BEEP_TPUT_TOOL = { + :executable => 'tput'.freeze, # `tput` command line application + :optional => true.freeze, + :name => 'default_beep_tput'.freeze, + :arguments => [ + "bel".freeze # `tput` argument for bell character (named 'bel' in ASCII standard) + ].freeze + } + +# Old but widely available `beep` tone generator package for Unix-derived platforms (not macOS) +DEFAULT_BEEP_BEEP_TOOL = { + :executable => 'beep'.freeze, # `beep` command line application + :optional => true.freeze, + :name => 'default_beep_beep'.freeze, + :arguments => [].freeze # Default beep (no arguments) + } + +# Widely available tone generator package for Unix-derived platforms (not macOS) +DEFAULT_BEEP_SPEAKER_TEST_TOOL = { + :executable => 'speaker-test'.freeze, # `speaker-test` command line application + :optional => true.freeze, + :name => 'default_beep_speaker_test'.freeze, + :arguments => [ # 1000 hz sine wave frequency + '-t sine'.freeze, + '-f 1000'.freeze, + '-l 1'.freeze + ].freeze + } + +# macOS text-to-speech tool +DEFAULT_BEEP_SAY_TOOL = { + :executable => 'say'.freeze, # macOS `say` command line application + :optional => true.freeze, + :name => 'default_beep_say'.freeze, + :arguments => [ + "\"${1}\"" # Replacement argument for text + ].freeze + } + +def get_default_config + return :tools => { + :beep_bell => DEFAULT_BEEP_BELL_TOOL, + :beep_tput => DEFAULT_BEEP_TPUT_TOOL, + :beep_beep => DEFAULT_BEEP_BEEP_TOOL, + :beep_speaker_test => DEFAULT_BEEP_SPEAKER_TEST_TOOL, + :beep_say => DEFAULT_BEEP_SAY_TOOL + } +end \ No newline at end of file diff --git a/tools/vendor/ceedling/plugins/beep/lib/beep.rb b/tools/vendor/ceedling/plugins/beep/lib/beep.rb index 2a9217b7..c658f69f 100644 --- a/tools/vendor/ceedling/plugins/beep/lib/beep.rb +++ b/tools/vendor/ceedling/plugins/beep/lib/beep.rb @@ -1,38 +1,85 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + require 'ceedling/plugin' -require 'beep_tools' +require 'ceedling/exceptions' BEEP_ROOT_NAME = 'beep'.freeze BEEP_SYM = BEEP_ROOT_NAME.to_sym class Beep < Plugin + # `Plugin` setup() def setup + # Get non-flattenified project configuration project_config = @ceedling[:setupinator].config_hash - @config = project_config[BEEP_SYM] + + # Get beep configuration hash + beep_config = project_config[BEEP_SYM] + + # Get tools hash + tools = project_config[:tools] + + # Lookup and capture the selected beep tools @tools = { - :beep_on_done => BEEP_TOOLS[@config[:on_done]]&.deep_clone, - :beep_on_error => BEEP_TOOLS[@config[:on_error]]&.deep_clone + :beep_on_done => tools["beep_#{beep_config[:on_done]}".to_sym], + :beep_on_error => tools["beep_#{beep_config[:on_error]}".to_sym] } + # Ensure configuration option is an actual tool if @tools[:beep_on_done].nil? - @ceedling[:streaminator].stderr_puts("Tool :beep_on_done is not defined.", verbosity=Verbosity::COMPLAIN) + error = "Option :#{beep_config[:on_done]} for :beep ↳ :on_done plugin configuration does not map to a tool." + raise CeedlingException.new( error ) end + # Ensure configuration option is an actual tool if @tools[:beep_on_error].nil? - @ceedling[:streaminator].stderr_puts("Tool :beep_on_error is not defined.", verbosity=Verbosity::COMPLAIN) + error = "Option :#{beep_config[:on_done]} for :beep ↳ :on_error plugin configuration does not map to a tool." + raise CeedlingException.new( error ) end + + # Validate the selected beep tools + # Do not validate the `:bell` tool as it relies on `echo` that could be a shell feature rather than executable + @ceedling[:tool_validator].validate( + tool: @tools[:beep_on_done], + boom: true + ) if tools[:on_done] != :bell + + @ceedling[:tool_validator].validate( + tool: @tools[:beep_on_error], + boom: true + ) if tools[:on_error] != :bell end - + + # `Plugin` build step hook def post_build - return if @tools[:beep_on_done].nil? - command = @ceedling[:tool_executor].build_command_line(@tools[:beep_on_done], []) - system(command[:line]) + command = @ceedling[:tool_executor].build_command_line( + @tools[:beep_on_done], + [], + # Only used by tools with `${1}` replacement argument + 'ceedling build done' + ) + + + # Verbosity is enabled to allow shell output (primarily for sake of the bell character) + @ceedling[:system_wrapper].shell_system( command: command[:line], verbose: true ) end + # `Plugin` build step hook def post_error - return if @tools[:beep_on_error].nil? - command = @ceedling[:tool_executor].build_command_line(@tools[:beep_on_error], []) - system(command[:line]) + command = @ceedling[:tool_executor].build_command_line( + @tools[:beep_on_error], + [], + # Only used by tools with `${1}` replacement argument + 'ceedling build error' + ) + + # Verbosity is enabled to allow shell output (primarily for sake of the bell character) + @ceedling[:system_wrapper].shell_system( command: command[:line], verbose: true ) end end diff --git a/tools/vendor/ceedling/plugins/beep/lib/beep_tools.rb b/tools/vendor/ceedling/plugins/beep/lib/beep_tools.rb deleted file mode 100644 index 51f54d7a..00000000 --- a/tools/vendor/ceedling/plugins/beep/lib/beep_tools.rb +++ /dev/null @@ -1,23 +0,0 @@ -BEEP_TOOLS = { - :bell => { - :executable => 'echo'.freeze, - :name => 'default_beep_bell'.freeze, - :stderr_redirect => StdErrRedirect::NONE.freeze, - :optional => false.freeze, - :arguments => [ - *('-ne'.freeze unless SystemWrapper.windows?), - "\x07".freeze - ].freeze - }.freeze, - :speaker_test => { - :executable => 'speaker-test'.freeze, - :name => 'default_beep_speaker_test'.freeze, - :stderr_redirect => StdErrRedirect::NONE.freeze, - :optional => false.freeze, - :arguments => [ - - '-t sine'.freeze, - - '-f 1000'.freeze, - - '-l 1'.freeze - ].freeze - }.freeze -}.freeze diff --git a/tools/vendor/ceedling/plugins/bullseye/README.md b/tools/vendor/ceedling/plugins/bullseye/README.md index ab0b53b4..7702c4a1 100644 --- a/tools/vendor/ceedling/plugins/bullseye/README.md +++ b/tools/vendor/ceedling/plugins/bullseye/README.md @@ -1,5 +1,12 @@ -ceedling-bullseye -================= +Bullseye Code Coverage Plugin +============================= + +# June 1, 2024 Bullseye Plugin Disabled + +Until the Bullseye Plugin can be updated for compatibility with Ceedling >= 1.0.0, +it has been disabled. + +(The key hurdle is access to a license for the proprietary Bullseye coverage tooling.) # Plugin Overview @@ -55,7 +62,6 @@ by Ceedling. The following is a typical configuration example: - -w140 :bullseye_report_covfn: :executable: covfn - :stderr_redirect: :auto :arguments: - '--file $': ENVIRONMENT_COVFILE - --width 120 @@ -63,7 +69,6 @@ by Ceedling. The following is a typical configuration example: - '"${1}"' :bullseye_browser: :executable: CoverageBrowser - :background_exec: :auto :optional: TRUE :arguments: - '"$"': ENVIRONMENT_COVFILE diff --git a/tools/vendor/ceedling/plugins/bullseye/bullseye.rake b/tools/vendor/ceedling/plugins/bullseye/bullseye.rake index 1fd4b36f..f82a2111 100644 --- a/tools/vendor/ceedling/plugins/bullseye/bullseye.rake +++ b/tools/vendor/ceedling/plugins/bullseye/bullseye.rake @@ -1,3 +1,10 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + directory(BULLSEYE_BUILD_OUTPUT_PATH) directory(BULLSEYE_RESULTS_PATH) directory(BULLSEYE_ARTIFACTS_PATH) @@ -12,7 +19,7 @@ PLUGINS_BULLSEYE_LIB_PATH = 'C:\\tools\\BullseyeCoverage\\lib' if not defined?(P rule(/#{BULLSEYE_BUILD_OUTPUT_PATH}\/#{'.+\\'+EXTENSION_OBJECT}$/ => [ proc do |task_name| - @ceedling[:file_finder].find_compilation_input_file(task_name) + @ceedling[:file_finder].find_build_input_file(filepath: task_name, context: BULLSEYE_SYM) end ]) do |object| @@ -55,7 +62,7 @@ end rule(/#{BULLSEYE_DEPENDENCIES_PATH}\/#{'.+\\'+EXTENSION_DEPENDENCIES}$/ => [ proc do |task_name| - @ceedling[:file_finder].find_compilation_input_file(task_name) + @ceedling[:file_finder].find_build_input_file(filepath: task_name, context: BULLSEYE_SYM) end ]) do |dep| @ceedling[:generator].generate_dependencies_file( @@ -82,7 +89,7 @@ namespace BULLSEYE_SYM do task source_coverage: COLLECTION_ALL_SOURCE.pathmap("#{BULLSEYE_BUILD_OUTPUT_PATH}/%n#{@ceedling[:configurator].extension_object}") desc 'Run code coverage for all tests' - task all: [:test_deps] do + task all: [:prepare] do @ceedling[:configurator].replace_flattened_config(@ceedling[BULLSEYE_SYM].config) @ceedling[BULLSEYE_SYM].enableBullseye(true) @ceedling[:test_invoker].setup_and_invoke(COLLECTION_ALL_TESTS, TOOL_COLLECTION_BULLSEYE_TASKS) @@ -95,11 +102,11 @@ namespace BULLSEYE_SYM do "Use a real test or source file name (no path) in place of the wildcard.\n" + "Example: rake #{BULLSEYE_ROOT_NAME}:foo.c\n\n" - @ceedling[:streaminator].stdout_puts( message ) + @ceedling[:loginator].log( message ) end desc 'Run tests by matching regular expression pattern.' - task :pattern, [:regex] => [:test_deps] do |_t, args| + task :pattern, [:regex] => [:prepare] do |_t, args| matches = [] COLLECTION_ALL_TESTS.each do |test| @@ -112,12 +119,12 @@ namespace BULLSEYE_SYM do @ceedling[:test_invoker].setup_and_invoke(matches, { force_run: false }.merge(TOOL_COLLECTION_BULLSEYE_TASKS)) @ceedling[:configurator].restore_config else - @ceedling[:streaminator].stdout_puts("\nFound no tests matching pattern /#{args.regex}/.") + @ceedling[:loginator].log("\nFound no tests matching pattern /#{args.regex}/.") end end desc 'Run tests whose test path contains [dir] or [dir] substring.' - task :path, [:dir] => [:test_deps] do |_t, args| + task :path, [:dir] => [:prepare] do |_t, args| matches = [] COLLECTION_ALL_TESTS.each do |test| @@ -130,12 +137,12 @@ namespace BULLSEYE_SYM do @ceedling[:test_invoker].setup_and_invoke(matches, { force_run: false }.merge(TOOL_COLLECTION_BULLSEYE_TASKS)) @ceedling[:configurator].restore_config else - @ceedling[:streaminator].stdout_puts("\nFound no tests including the given path or path component.") + @ceedling[:loginator].log("\nFound no tests including the given path or path component.") end end desc 'Run code coverage for changed files' - task delta: [:test_deps] do + task delta: [:prepare] do @ceedling[:configurator].replace_flattened_config(@ceedling[BULLSEYE_SYM].config) @ceedling[BULLSEYE_SYM].enableBullseye(true) @ceedling[:test_invoker].setup_and_invoke(COLLECTION_ALL_TESTS, {:force_run => false}.merge(TOOL_COLLECTION_BULLSEYE_TASKS)) @@ -151,7 +158,7 @@ namespace BULLSEYE_SYM do @ceedling[:file_finder].find_test_from_file_path(test) end ]) do |test| - @ceedling[:rake_wrapper][:test_deps].invoke + @ceedling[:rake_wrapper][:prepare].invoke @ceedling[:configurator].replace_flattened_config(@ceedling[BULLSEYE_SYM].config) @ceedling[BULLSEYE_SYM].enableBullseye(true) @ceedling[:test_invoker].setup_and_invoke([test.source], TOOL_COLLECTION_BULLSEYE_TASKS) @@ -160,23 +167,12 @@ namespace BULLSEYE_SYM do end -if PROJECT_USE_DEEP_DEPENDENCIES -namespace REFRESH_SYM do - task BULLSEYE_SYM do - @ceedling[:configurator].replace_flattened_config(@ceedling[BULLSEYE_SYM].config) - @ceedling[BULLSEYE_SYM].enableBullseye(true) - @ceedling[:test_invoker].refresh_deep_dependencies - @ceedling[:configurator].restore_config - end -end -end - namespace UTILS_SYM do desc "Open Bullseye code coverage browser" task BULLSEYE_SYM do command = @ceedling[:tool_executor].build_command_line(TOOLS_BULLSEYE_BROWSER, []) - @ceedling[:tool_executor].exec(command[:line], command[:options]) + @ceedling[:tool_executor].exec( command ) end end diff --git a/tools/vendor/ceedling/plugins/bullseye/config/defaults.yml b/tools/vendor/ceedling/plugins/bullseye/config/defaults.yml index ed261d8e..533cae60 100644 --- a/tools/vendor/ceedling/plugins/bullseye/config/defaults.yml +++ b/tools/vendor/ceedling/plugins/bullseye/config/defaults.yml @@ -1,3 +1,10 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + --- :bullseye: @@ -7,51 +14,53 @@ :paths: :bullseye_toolchain_include: [] -:tools: - :bullseye_instrumentation: - :executable: covc - :arguments: - - '--file $': ENVIRONMENT_COVFILE - - -q - - ${1} - :bullseye_compiler: - :executable: gcc - :arguments: - - -g - - -I"$": COLLECTION_PATHS_TEST_SUPPORT_SOURCE_INCLUDE_VENDOR - - -I"$": COLLECTION_PATHS_BULLSEYE_TOOLCHAIN_INCLUDE - - -D$: COLLECTION_DEFINES_TEST_AND_VENDOR - - -DBULLSEYE_COMPILER - - -c "${1}" - - -o "${2}" - :bullseye_linker: - :executable: gcc - :arguments: - - ${1} - - -o ${2} - - -L$: PLUGINS_BULLSEYE_LIB_PATH - - -lcov - :bullseye_fixture: - :executable: ${1} - :bullseye_report_covsrc: - :executable: covsrc - :arguments: - - '--file $': ENVIRONMENT_COVFILE - - -q - - -w140 - :bullseye_report_covfn: - :executable: covfn - :stderr_redirect: :auto - :arguments: - - '--file $': ENVIRONMENT_COVFILE - - --width 120 - - --no-source - - '"${1}"' - :bullseye_browser: - :executable: CoverageBrowser - :background_exec: :auto - :optional: TRUE - :arguments: - - '"$"': ENVIRONMENT_COVFILE +# TODO: Restore :tools once Bullseye plugin has been updated for Ceedling >= 1.0.0 +# :tools: +# :bullseye_instrumentation: +# :executable: covc +# :optional: true +# :arguments: +# - '--file $': ENVIRONMENT_COVFILE +# - -q +# - ${1} +# :bullseye_compiler: +# :executable: gcc +# :arguments: +# - -g +# - -I"$": COLLECTION_PATHS_TEST_SUPPORT_SOURCE_INCLUDE_VENDOR +# - -I"$": COLLECTION_PATHS_BULLSEYE_TOOLCHAIN_INCLUDE +# - -D$: COLLECTION_DEFINES_TEST_AND_VENDOR +# - -DBULLSEYE_COMPILER +# - -c "${1}" +# - -o "${2}" +# :bullseye_linker: +# :executable: gcc +# :arguments: +# - ${1} +# - -o ${2} +# - -L$: PLUGINS_BULLSEYE_LIB_PATH +# - -lcov +# :bullseye_fixture: +# :executable: ${1} +# :bullseye_report_covsrc: +# :executable: covsrc +# :optional: true +# :arguments: +# - '--file $': ENVIRONMENT_COVFILE +# - -q +# - -w140 +# :bullseye_report_covfn: +# :executable: covfn +# :optional: true +# :arguments: +# - '--file $': ENVIRONMENT_COVFILE +# - --width 120 +# - --no-source +# - '"${1}"' +# :bullseye_browser: +# :executable: CoverageBrowser +# :optional: TRUE +# :arguments: +# - '"$"': ENVIRONMENT_COVFILE ... diff --git a/tools/vendor/ceedling/plugins/bullseye/lib/bullseye.rb b/tools/vendor/ceedling/plugins/bullseye/lib/bullseye.rb index 19fd425b..c077af2b 100644 --- a/tools/vendor/ceedling/plugins/bullseye/lib/bullseye.rb +++ b/tools/vendor/ceedling/plugins/bullseye/lib/bullseye.rb @@ -1,5 +1,13 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + require 'ceedling/plugin' require 'ceedling/constants' +require 'ceedling/exceptions' BULLSEYE_ROOT_NAME = 'bullseye' BULLSEYE_TASK_ROOT = BULLSEYE_ROOT_NAME + ':' @@ -17,10 +25,11 @@ class Bullseye < Plugin def setup + # TODO: Remove `raise` when Bullseye plugin has been updated for Ceedling >= 1.0.0 + raise CeedlingException.new( "The Bullseye plugin is disabled until it can be updated for this version of Ceedling" ) @result_list = [] @environment = [ {:covfile => File.join( BULLSEYE_ARTIFACTS_PATH, 'test.cov' )} ] - @plugin_root = File.expand_path(File.join(File.dirname(__FILE__), '..')) - @coverage_template_all = @ceedling[:file_wrapper].read(File.join(@plugin_root, 'assets/template.erb')) + @coverage_template_all = @ceedling[:file_wrapper].read( File.join( @plugin_root_path, 'assets/template.erb' ) ) end def config @@ -38,7 +47,7 @@ def generate_coverage_object_file(source, object) arg_hash = {:tool => TOOLS_BULLSEYE_INSTRUMENTATION, :context => BULLSEYE_SYM, :source => source, :object => object} @ceedling[:plugin_manager].pre_compile_execute(arg_hash) - @ceedling[:streaminator].stdout_puts("Compiling #{File.basename(source)} with coverage...") + @ceedling[:loginator].log("Compiling #{File.basename(source)} with coverage...") compile_command = @ceedling[:tool_executor].build_command_line( TOOLS_BULLSEYE_COMPILER, @@ -82,7 +91,7 @@ def post_build return if (verify_coverage_file() == false) if (@ceedling[:task_invoker].invoked?(/^#{BULLSEYE_TASK_ROOT}(all|delta)/)) command = @ceedling[:tool_executor].build_command_line(TOOLS_BULLSEYE_REPORT_COVSRC, []) - shell_result = @ceedling[:tool_executor].exec(command[:line], command[:options]) + shell_result = @ceedling[:tool_executor].exec( command ) report_coverage_results_all(shell_result[:output]) else report_per_function_coverage_results(@ceedling[:test_invoker].sources) @@ -104,7 +113,7 @@ def summary # coverage results command = @ceedling[:tool_executor].build_command_line(TOOLS_BULLSEYE_REPORT_COVSRC) - shell_result = @ceedling[:tool_executor].exec(command[:line], command[:options]) + shell_result = @ceedling[:tool_executor].exec( command ) report_coverage_results_all(shell_result[:output]) end @@ -112,15 +121,15 @@ def enableBullseye(enable) if BULLSEYE_AUTO_LICENSE if (enable) args = ['push', 'on'] - @ceedling[:streaminator].stdout_puts("Enabling Bullseye") + @ceedling[:loginator].log("Enabling Bullseye") else args = ['pop'] - @ceedling[:streaminator].stdout_puts("Reverting Bullseye to previous state") + @ceedling[:loginator].log("Reverting Bullseye to previous state") end args.each do |arg| command = @ceedling[:tool_executor].build_command_line(TOOLS_BULLSEYE_BUILD_ENABLE_DISABLE, [], arg) - shell_result = @ceedling[:tool_executor].exec(command[:line], command[:options]) + shell_result = @ceedling[:tool_executor].exec( command ) end end @@ -145,12 +154,12 @@ def report_coverage_results_all(coverage) results[:coverage][:branches] = $1.to_i end - @ceedling[:plugin_reportinator].run_report($stdout, @coverage_template_all, results) + @ceedling[:plugin_reportinator].run_report( @coverage_template_all, results ) end def report_per_function_coverage_results(sources) banner = @ceedling[:plugin_reportinator].generate_banner( "#{BULLSEYE_ROOT_NAME.upcase}: CODE COVERAGE SUMMARY" ) - @ceedling[:streaminator].stdout_puts "\n" + banner + @ceedling[:loginator].log "\n" + banner coverage_sources = sources.clone coverage_sources.delete_if {|item| item =~ /#{CMOCK_MOCK_PREFIX}.+#{EXTENSION_SOURCE}$/} @@ -158,15 +167,15 @@ def report_per_function_coverage_results(sources) coverage_sources.each do |source| command = @ceedling[:tool_executor].build_command_line(TOOLS_BULLSEYE_REPORT_COVFN, [], source) - shell_results = @ceedling[:tool_executor].exec(command[:line], command[:options]) + shell_results = @ceedling[:tool_executor].exec( command ) coverage_results = shell_results[:output].deep_clone coverage_results.sub!(/.*\n.*\n/,'') # Remove the Bullseye tool banner if (coverage_results =~ /warning cov814: report is empty/) - coverage_results = "WARNING: #{source} contains no coverage data!\n\n" - @ceedling[:streaminator].stdout_puts(coverage_results, Verbosity::COMPLAIN) + coverage_results = "#{source} contains no coverage data" + @ceedling[:loginator].log(coverage_results, Verbosity::COMPLAIN) else coverage_results += "\n" - @ceedling[:streaminator].stdout_puts(coverage_results) + @ceedling[:loginator].log(coverage_results) end end end @@ -176,7 +185,7 @@ def verify_coverage_file if (!exist) banner = @ceedling[:plugin_reportinator].generate_banner( "#{BULLSEYE_ROOT_NAME.upcase}: CODE COVERAGE SUMMARY" ) - @ceedling[:streaminator].stdout_puts "\n" + banner + "\nNo coverage file.\n\n" + @ceedling[:loginator].log "\n" + banner + "\nNo coverage file.\n\n" end return exist diff --git a/tools/vendor/ceedling/plugins/colour_report/README.md b/tools/vendor/ceedling/plugins/colour_report/README.md deleted file mode 100644 index 4e0fcd45..00000000 --- a/tools/vendor/ceedling/plugins/colour_report/README.md +++ /dev/null @@ -1,20 +0,0 @@ -ceedling-colour-report -====================== - -## Overview - -The colour_report replaces the normal ceedling "pretty" output with -a colorized variant, in order to make the results easier to read from -a standard command line. This is very useful on developer machines, but -can occasionally cause problems with parsing on CI servers. - -## Setup - -Enable the plugin in your project.yml by adding `colour_report` -to the list of enabled plugins. - -``` YAML -:plugins: - :enabled: - - colour_report -``` diff --git a/tools/vendor/ceedling/plugins/colour_report/lib/colour_report.rb b/tools/vendor/ceedling/plugins/colour_report/lib/colour_report.rb deleted file mode 100644 index 1211eab4..00000000 --- a/tools/vendor/ceedling/plugins/colour_report/lib/colour_report.rb +++ /dev/null @@ -1,16 +0,0 @@ -require 'ceedling/plugin' -require 'ceedling/streaminator' -require 'ceedling/constants' - -class ColourReport < Plugin - - def setup - @ceedling[:stream_wrapper].stdout_override(&ColourReport.method(:colour_stdout)) - end - - def self.colour_stdout(string) - require 'colour_reporter.rb' - report string - end - -end diff --git a/tools/vendor/ceedling/plugins/command_hooks/README.md b/tools/vendor/ceedling/plugins/command_hooks/README.md index 8ac64afc..175ee8f8 100644 --- a/tools/vendor/ceedling/plugins/command_hooks/README.md +++ b/tools/vendor/ceedling/plugins/command_hooks/README.md @@ -1,53 +1,241 @@ -ceedling-command-hooks -====================== +# Ceedling Plugin: Command Hooks -Plugin for easily calling command line tools at various points in the build process +Easily run command line tools and scripts at various points in a Ceedling build. -Define any of these sections in :tools: to provide additional hooks to be called on demand: +# Plugin Overview -``` - :pre_mock_generate - :post_mock_generate - :pre_runner_generate - :post_runner_generate - :pre_compile_execute - :post_compile_execute - :pre_link_execute - :post_link_execute - :pre_test_fixture_execute - :pre_test - :post_test - :pre_release - :post_release - :pre_build - :post_build -``` +This plugin allows you to skip creating a full Ceedling plugin for many common use cases. It links Ceedling's programmatic `Plugin` code hooks to easily managed tool definitions. -Each of these tools can support an :executable string and an :arguments list, like so: +# Setup +To use this plugin, it must be enabled: + +```yaml +:plugins: + :enabled: + - command_hooks ``` -:tools: - :post_link_execute: - :executable: objcopy.exe + +# Configuration + +## Overview + +To connect utilties or scripts to build step hooks, Ceedling tools must be defined. + +A Ceedling tool is just a YAML blob that gathers together a handful of settings and values that tell Ceedling how to build and execute a command line. Your tool can be a command line utility, a script, etc. + +Example Ceedling tools follow. When enabled, this plugin ensures any tools you define are executed by the corresponding build step hook they are organized beneath. The configurtion of enabled hooks and tools happens in a top-level `:command_hooks:` block within your project configuration. One or more tools can be attached to a build step hook. + +## Tool lists + +A command hook can execute one or more tools. + +If only a single tool is needed, its hash keys and value can be organized as a YAML sub-hash beneath the hook key. Alternatively, a single tool can exist as the only entry in a YAML list. + +If multiple tools are needed, they must be organized as entries in a YAML list. + +See the commented examples below. + +## Tool definitions + +Each Ceedling tool requires an `:executable` string and an optional `:arguments` list. See _[CeedlingPacket][ceedling-packet]_ documentation for project configuration [`:tools`][tools-doc] entries to understand how to craft your argument list and other tool options. + +At present, this plugin passes at most one runtime parameter for use in a hook's tool argument list. If available, this parameter can be referenced with a Ceedling tool argument expansion identifier `${1}`. That is, wherever you place `${1}` in your tool argument list, `${1}` will expand in the command line Ceedling constructs with the parameter this plugin provides for that build step hook. The list of build steps hooks below document any single parameters they provide at execution. + +[tools-doc]: https://github.com/ThrowTheSwitch/Ceedling/blob/test/ceedling_0_32_rc/docs/CeedlingPacket.md#tools-configuring-command-line-tools-used-for-build-steps + +## Hook logging + +In addition to the standard Ceedling tool definition elements, a hook configuration entry may optionally include a `:logging` setting. + +`:logging` may be set to `TRUE` or `FALSE`. An omitted setting is equivalent to `FALSE`. + +When logging is enabled and logging conditions are appropriate, any output from the hook tool will be logged to the console with a brief header identifying the hook. + +* Explicit command hook output logging only occurs at verbosity levels Normal and Obnoxious. +* Debug logging naturally displays hook output as part of normal tool execution logging. It is not duplicated by hook logging. +* At Normal verbosity, blank hook output is not logged at all; Obnoxious verbosity will display blank output as ``. + +## Command Hooks example configuration YAML + +```yaml +:command_hooks: + # Hook called every time a mock is generated + # Who knows what my_script.py does -- sky is the limit + :pre_mock_generate: + # This tool is organized as a sub-hash beneath the command hook key + :executable: python :arguments: - - ${1} #This is replaced with the executable name - - output.srec - - --strip-all + - my_script.py + - --some-arg + - ${1} # Replaced with the filepath of the header file that will be mocked + :logging: TRUE # Log any tool output to console + + # Hook called for each linking operation + # Here, we are performing two tasks for the same build step hook, converting a + # binary executable to S-record format and, then, archiving with other artifacts. + :post_link_execute: + # These tools are organized in a YAML list beneath the command hook key + - :executable: objcopy.exe + :arguments: + - ${1} # Replaced with the filepath to the linker's binary artifact output + - output.srec + - --strip-all + - :executable: + :arguments: tar.exe + - -acf + - awesome_build.zip + - ${1} # Replaced with the filepath to the linker's binary artifact output + - memory_report.txt ``` -You may also specify an array of executables to be called in a particular place, like so: +# Available Build Step Hooks -``` -:tools: - :post_test: - - :executable: echo - :arguments: "${1} was glorious!" - - :executable: echo - :arguments: - - it kinda made me cry a little. - - you? -``` +Define any of the following entries within a top-level `:command_hooks:` section of your Ceedling project file to automagically connect utilities or scripts to build process steps. + +Some hooks are called for every file-related operation for which the hook is named. Other hooks are triggered by the single build step for which the hook is named. + +As an example, consider a Ceedling project with ten test files and seventeen mocks. The command line `ceedling test:all` would trigger: + +* 1 occurrence of the `:pre_build` hook. +* 10 occurrences of the `:pre_test` and `:post_test` hooks. +* 17 occurrences of the `:pre_mock_generate` and `:post_mock_generate` hooks. +* 10 occurrences of the `:pre_test_runner_generate` and `:post_test_runner_generate` hooks. +* 27(+) occurrences of the `:pre_compile` and `:post_compile` hooks. These hooks would be called 27 times for test file and mock file compilation. A test suite build will also include compilation of the source files under tests, Unity's source, CMock's source, and generated test runner C files -- easily more than another two dozen compilation hook calls. +* 10 occurrences of the `:pre_link` and `:post_link` hooks for test executable creation. +* 10 occurences of the `:pre_test_fixture_execute` and `:post_test_fixture_execute` hooks for running test executables and gathering the results of the tests cases they contain. +* 1 occurence of the `:post_build` hook unless a build error occurred (`:post_error` would be called isntead). + +## `:pre_build` + +Called once just before Ceedling executes any tasks. + +No parameters are provided for a tool's argument list when the hook is called. + +## `:post_build` + +Called once just before Ceedling terminates. + +No parameters are provided for a tool's argument list when the hook is called. + +## `:post_error` + +Called once just after any build failure and just before Ceedling terminates. + +No parameters are provided for a tool's argument list when the hook is called. + +## `:pre_test` + +Called just before each test begins its build pipeline and just after all context for that build has been gathered. + +The parameter available to a tool (`${1}`) when the hook is called is the test's filepath. + +## `:post_test` + +Called just after each test completes its build and execution. + +The parameter available to a tool (`${1}`) when the hook is called is the test's filepath. + +## `:pre_release` + +Called once just before a release build begins. + +No parameters are provided for a tool's argument list when the hook is called. + +## `:post_release` + +Called once just after a release build finishes. + +No parameters are provided for a tool's argument list when the hook is called. + +## `:pre_mock_preprocess` + +If mocks are enabled and preprocessing is in use, this is called just before each header file to be mocked is preprocessed. + +The parameter available to a tool (`${1}`) when the hook is called is the filepath of the header file to be mocked. + +See _[CeedlingPacket][ceedling-packet]_ for details on how Ceedling preprocessing operates. + +[ceedling-packet]: ../docs/CeedlingPacket.md + +## `:post_mock_preprocess` + +If mocks are enabled and preprocessing is in use, this is called just after each header file to be mocked is preprocessed. + +The parameter available to a tool (`${1}`) when the hook is called is the filepath of the header file to be mocked. + +## `:pre_mock_generate` + +If mocks are enabled, this is called just before each header file to be mocked is processed by mock generation. + +The parameter available to a tool (`${1}`) when the hook is called is the filepath of the header file to be mocked. + +## `:post_mock_generate` + +If mocks are enabled, this is called just after each mock generation. + +The parameter available to a tool (`${1}`) when the hook is called is the filepath of the header file to be mocked. + +## `:pre_test_preprocess` + +If preprocessing is in use, this is called just before each test file is preprocessed before runner generation. + +The parameter available to a tool (`${1}`) when the hook is called is the test's filepath. + +See _[CeedlingPacket][ceedling-packet]_ for details on how Ceedling preprocessing operates. + +## `:post_test_preprocess` + +If preprocessing is in use, this is called just after each test file is preprocessed. + +The parameter available to a tool (`${1}`) when the hook is called is the test's filepath. + +See _[CeedlingPacket][ceedling-packet]_ for details on how Ceedling preprocessing operates. + +## `:pre_runner_generate` + +Called just before each test file is processed by test runner generation. + +The parameter available to a tool (`${1}`) when the hook is called is the test's filepath. + +## `:post_runner_generate` + +Called just after each test runner is generated. + +The parameter available to a tool (`${1}`) when the hook is called is the test's filepath. + +## `:pre_compile_execute` + +Called just before each C or assembly file is compiled. + +The parameter available to a tool (`${1}`) when the hook is called is the filepath of the file to be compiled. + +## `:post_compile_execute` + +Called just after each file compilation. + +The parameter available to a tool (`${1}`) when the hook is called is the filepath of the input file that was compiled. + +## `:pre_link_execute` + +Called just before any binary artifact—test or release—is linked. + +The parameter available to a tool (`${1}`) when the hook is called is the binary output artifact's filepath. + +## `:post_link_execute` + +Called just after a binary artifact is linked. + +The parameter available to a tool (`${1}`) when the hook is called is the binary output artifact's filepath. + +## `:pre_test_fixture_execute` + +Called just before each test is executed in its corresponding test fixture. + +The parameter available to a tool (`${1}`) when the hook is called is the filepath of the binary artifact to be executed by the fixture. + +## `:post_test_fixture_execute` + +Called just after each test's fixture is executed and test results are collected. -Please note that it varies which arguments are being parsed down to the -hooks. For now see `command_hooks.rb` to figure out which suits you best. -Happy Tweaking! +The parameter available to a tool (`${1}`) when the hook is called is the filepath of the binary artifact that was executed by the fixture. diff --git a/tools/vendor/ceedling/plugins/command_hooks/lib/command_hooks.rb b/tools/vendor/ceedling/plugins/command_hooks/lib/command_hooks.rb index 4bf8b531..85915d62 100644 --- a/tools/vendor/ceedling/plugins/command_hooks/lib/command_hooks.rb +++ b/tools/vendor/ceedling/plugins/command_hooks/lib/command_hooks.rb @@ -1,70 +1,165 @@ -require 'ceedling/plugin' +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + require 'ceedling/constants' -class CommandHooks < Plugin +require 'ceedling/exceptions' +require 'ceedling/plugin' - attr_reader :config +COMMAND_HOOKS_ROOT_NAME = 'command_hooks'.freeze +COMMAND_HOOKS_SYM = COMMAND_HOOKS_ROOT_NAME.to_sym + +COMMAND_HOOKS_LIST = [ + :pre_mock_preprocess, + :post_mock_preprocess, + :pre_test_preprocess, + :post_test_preprocess, + :pre_mock_generate, + :post_mock_generate, + :pre_runner_generate, + :post_runner_generate, + :pre_compile_execute, + :post_compile_execute, + :pre_link_execute, + :post_link_execute, + :pre_test_fixture_execute, + :post_test_fixture_execute, + :pre_test, + :post_test, + :pre_release, + :post_release, + :pre_build, + :post_build, + :post_error, +].freeze + +class CommandHooks < Plugin def setup - @config = { - :pre_mock_generate => ((defined? TOOLS_PRE_MOCK_GENERATE) ? TOOLS_PRE_MOCK_GENERATE : nil ), - :post_mock_generate => ((defined? TOOLS_POST_MOCK_GENERATE) ? TOOLS_POST_MOCK_GENERATE : nil ), - :pre_runner_generate => ((defined? TOOLS_PRE_RUNNER_GENERATE) ? TOOLS_PRE_RUNNER_GENERATE : nil ), - :post_runner_generate => ((defined? TOOLS_POST_RUNNER_GENERATE) ? TOOLS_POST_RUNNER_GENERATE : nil ), - :pre_compile_execute => ((defined? TOOLS_PRE_COMPILE_EXECUTE) ? TOOLS_PRE_COMPILE_EXECUTE : nil ), - :post_compile_execute => ((defined? TOOLS_POST_COMPILE_EXECUTE) ? TOOLS_POST_COMPILE_EXECUTE : nil ), - :pre_link_execute => ((defined? TOOLS_PRE_LINK_EXECUTE) ? TOOLS_PRE_LINK_EXECUTE : nil ), - :post_link_execute => ((defined? TOOLS_POST_LINK_EXECUTE) ? TOOLS_POST_LINK_EXECUTE : nil ), - :pre_test_fixture_execute => ((defined? TOOLS_PRE_TEST_FIXTURE_EXECUTE) ? TOOLS_PRE_TEST_FIXTURE_EXECUTE : nil ), - :post_test_fixture_execute => ((defined? TOOLS_POST_TEST_FIXTURE_EXECUTE) ? TOOLS_POST_TEST_FIXTURE_EXECUTE : nil ), - :pre_test => ((defined? TOOLS_PRE_TEST) ? TOOLS_PRE_TEST : nil ), - :post_test => ((defined? TOOLS_POST_TEST) ? TOOLS_POST_TEST : nil ), - :pre_release => ((defined? TOOLS_PRE_RELEASE) ? TOOLS_PRE_RELEASE : nil ), - :post_release => ((defined? TOOLS_POST_RELEASE) ? TOOLS_POST_RELEASE : nil ), - :pre_build => ((defined? TOOLS_PRE_BUILD) ? TOOLS_PRE_BUILD : nil ), - :post_build => ((defined? TOOLS_POST_BUILD) ? TOOLS_POST_BUILD : nil ), - :post_error => ((defined? TOOLS_POST_ERROR) ? TOOLS_POST_ERROR : nil ), - } - @plugin_root = File.expand_path(File.join(File.dirname(__FILE__), '..')) + # Get a copy of the project configuration + project_config = @ceedling[:setupinator].config_hash + + # Convenience object references + @loginator = @ceedling[:loginator] + @reportinator = @ceedling[:reportinator] + @walkinator = @ceedling[:config_walkinator] + @tool_validator = @ceedling[:tool_validator] + @tool_executor = @ceedling[:tool_executor] + @verbosinator = @ceedling[:verbosinator] + @configurator_validator = @ceedling[:configurator_validator] + + # Look up if the accompanying `:command_hooks` configuration block exists + config_exists = @configurator_validator.exists?( + project_config, + COMMAND_HOOKS_SYM + ) + + # Go boom if the required configuration block does not exist + unless config_exists + name = @reportinator.generate_config_walk([COMMAND_HOOKS_SYM]) + error = "Command Hooks plugin is enabled but is missing a required configuration block `#{name}`" + raise CeedlingException.new(error) + end + + @config = project_config[COMMAND_HOOKS_SYM] + + # Validate the command hook keys (look out for typos) + validate_config( @config ) + + # Validate the tools beneath the keys + @config.each do |hook, tool| + if tool.is_a?(Array) + tool.each_index {|index| validate_hook( project_config, hook, index )} + else + validate_hook( project_config, hook ) + end + end end - def pre_mock_generate(arg_hash); run_hook(:pre_mock_generate, arg_hash[:header_file] ); end - def post_mock_generate(arg_hash); run_hook(:post_mock_generate, arg_hash[:header_file] ); end - def pre_runner_generate(arg_hash); run_hook(:pre_runner_generate, arg_hash[:source ] ); end - def post_runner_generate(arg_hash); run_hook(:post_runner_generate, arg_hash[:runner_file] ); end - def pre_compile_execute(arg_hash); run_hook(:pre_compile_execute, arg_hash[:source_file] ); end - def post_compile_execute(arg_hash); run_hook(:post_compile_execute, arg_hash[:object_file] ); end - def pre_link_execute(arg_hash); run_hook(:pre_link_execute, arg_hash[:executable] ); end - def post_link_execute(arg_hash); run_hook(:post_link_execute, arg_hash[:executable] ); end - def pre_test_fixture_execute(arg_hash); run_hook(:pre_test_fixture_execute, arg_hash[:executable] ); end - def post_test_fixture_execute(arg_hash); run_hook(:post_test_fixture_execute, arg_hash[:executable] ); end - def pre_test(test); run_hook(:pre_test, test ); end - def post_test(test); run_hook(:post_test, test ); end - def pre_release; run_hook(:pre_release ); end - def post_release; run_hook(:post_release ); end - def pre_build; run_hook(:pre_build ); end - def post_build; run_hook(:post_build ); end - def post_error; run_hook(:post_error ); end + def pre_mock_preprocess(arg_hash); run_hook( :pre_mock_preprocess, arg_hash[:header_file] ); end + def post_mock_preprocess(arg_hash); run_hook( :post_mock_preprocess, arg_hash[:header_file] ); end + def pre_test_preprocess(arg_hash); run_hook( :pre_test_preprocess, arg_hash[:test_file] ); end + def post_test_preprocess(arg_hash); run_hook( :post_test_preprocess, arg_hash[:test_file] ); end + def pre_mock_generate(arg_hash); run_hook( :pre_mock_generate, arg_hash[:header_file] ); end + def post_mock_generate(arg_hash); run_hook( :post_mock_generate, arg_hash[:header_file] ); end + def pre_runner_generate(arg_hash); run_hook( :pre_runner_generate, arg_hash[:source] ); end + def post_runner_generate(arg_hash); run_hook( :post_runner_generate, arg_hash[:runner_file] ); end + def pre_compile_execute(arg_hash); run_hook( :pre_compile_execute, arg_hash[:source_file] ); end + def post_compile_execute(arg_hash); run_hook( :post_compile_execute, arg_hash[:object_file] ); end + def pre_link_execute(arg_hash); run_hook( :pre_link_execute, arg_hash[:executable] ); end + def post_link_execute(arg_hash); run_hook( :post_link_execute, arg_hash[:executable] ); end + def pre_test_fixture_execute(arg_hash); run_hook( :pre_test_fixture_execute, arg_hash[:executable] ); end + def post_test_fixture_execute(arg_hash); run_hook( :post_test_fixture_execute, arg_hash[:executable] ); end + def pre_test(test); run_hook( :pre_test, test ); end + def post_test(test); run_hook( :post_test, test ); end + def pre_release; run_hook( :pre_release ); end + def post_release; run_hook( :post_release ); end + def pre_build; run_hook( :pre_build ); end + def post_build; run_hook( :post_build ); end + def post_error; run_hook( :post_error ); end - private + ### Private + private + ## - # Run a hook if its available. + # Validate plugin configuration. # # :args: - # - hook: Name of the hook to run - # - name: Name of file (default: "") - # - # :return: - # shell_result. + # - config: :command_hooks section from project config hash # - def run_hook_step(hook, name="") - if (hook[:executable]) - # Handle argument replacemant ({$1}), and get commandline - cmd = @ceedling[:tool_executor].build_command_line( hook, [], name ) - shell_result = @ceedling[:tool_executor].exec(cmd[:line], cmd[:options]) + def validate_config(config) + unless config.is_a?(Hash) + name = @reportinator.generate_config_walk([COMMAND_HOOKS_SYM]) + error = "Expected configuration #{name} to be a Hash but found #{config.class}" + raise CeedlingException.new(error) + end + + unrecognized_hooks = config.keys - COMMAND_HOOKS_LIST + + unrecognized_hooks.each do |not_a_hook| + name = @reportinator.generate_config_walk( [COMMAND_HOOKS_SYM, not_a_hook] ) + error = "Unrecognized Command Hook: #{name}" + @loginator.log( error, Verbosity::ERRORS ) + end + + unless unrecognized_hooks.empty? + error = "Unrecognized hooks found in Command Hooks plugin configuration" + raise CeedlingException.new(error) end end + + ## + # Validate given hook + # + # :args: + # - config: Project configuration hash + # - keys: Key and index of hook inside :command_hooks configuration + # + def validate_hook(config, *keys) + walk = [COMMAND_HOOKS_SYM, *keys] + name = @reportinator.generate_config_walk( walk ) + entry, _ = @walkinator.fetch_value( *walk, hash:config ) + if entry.nil? + raise CeedlingException.new( "Missing Command Hook plugin configuration for #{name}" ) + end + + unless entry.is_a?(Hash) + error = "Expected configuration #{name} for Command Hooks plugin to be a Hash but found #{entry.class}" + raise CeedlingException.new( error ) + end + + # Validate the Ceedling tool components of the hook entry config + @tool_validator.validate( tool: entry, name: name, boom: true ) + + # Default logging configuration + config[:logging] = false if config[:logging].nil? + end + ## # Run a hook if its available. # @@ -76,17 +171,61 @@ def run_hook_step(hook, name="") # def run_hook(which_hook, name="") if (@config[which_hook]) - @ceedling[:streaminator].stdout_puts("Running Hook #{which_hook}...", Verbosity::NORMAL) - if (@config[which_hook].is_a? Array) + msg = "Running Command Hook :#{which_hook}" + msg = @reportinator.generate_progress( msg ) + @loginator.log( msg ) + + # Single tool config + if (@config[which_hook].is_a? Hash) + run_hook_step( which_hook, @config[which_hook], name ) + + # Multiple tool configs + elsif (@config[which_hook].is_a? Array) @config[which_hook].each do |hook| - run_hook_step(hook, name) + run_hook_step( which_hook, hook, name ) end - elsif (@config[which_hook].is_a? Hash) - run_hook_step( @config[which_hook], name ) + + # Tool config is bad else - @ceedling[:streaminator].stdout_puts("Hook #{which_hook} was poorly formed", Verbosity::COMPLAINT) + msg = "The tool config for Command Hook #{which_hook} was poorly formed and not run" + @loginator.log( msg, Verbosity::COMPLAIN ) end end end -end + ## + # Run a hook if its available. + # + # :args: + # - hook: Name of the hook to run + # - name: Name of file (default: "") + # + # :return: + # shell_result. + # + def run_hook_step(which_hook, hook, name="") + if (hook[:executable]) + # Handle argument replacemant ({$1}), and get commandline + cmd = @ceedling[:tool_executor].build_command_line( hook, [], name ) + shell_result = @ceedling[:tool_executor].exec( cmd ) + + # If hook logging is enabled + if hook[:logging] + # Skip debug logging -- allow normal tool debug logging to do its thing + return if @verbosinator.should_output?( Verbosity::DEBUG ) + + output = shell_result[:output].strip + + # Set empty output to empty string if we're in OBNOXIOUS logging mode + output = '' if output.empty? and @verbosinator.should_output?( Verbosity::OBNOXIOUS ) + + # Don't add to logging output if there's nothing to output + return if output.empty? + + # NORMAL and OBNOXIOUS logging + @loginator.log( "Command Hook :#{which_hook} output >> #{output}" ) + end + end + end + +end diff --git a/tools/vendor/ceedling/plugins/compile_commands_json/README.md b/tools/vendor/ceedling/plugins/compile_commands_json/README.md deleted file mode 100644 index ea80b739..00000000 --- a/tools/vendor/ceedling/plugins/compile_commands_json/README.md +++ /dev/null @@ -1,29 +0,0 @@ -compile_commands_json -===================== - -## Overview - -Syntax highlighting and code completion are hard. Historically each editor or IDE has implemented their own and then competed amongst themselves to offer the best experience for developers. Often developers would still to an IDE that felt cumbersome and slow just because it had the best syntax highlighting on the market. If doing it for one language is hard (and it is) imagine doing it for dozens of them. Imagine a full stack developer who has to work with CSS, HTML, JavaScript and some Ruby - they need excellent support in all those languages which just made things even harder. - -In June of 2016, Microsoft with Red Hat and Codenvy got together to create a standard called the Language Server Protocol (LSP). The idea was simple, by standardising on one protocol, all the IDEs and editors out there would only have to support LSP, and not have custom plugins for each language. In turn, the backend code that actually does the highlighting can be written once and used by any IDE that supports LSP. Many editors already support it such as Sublime Text, vim and emacs. This means that if you're using a crufty old IDE or worse, you're using a shiny new editor without code completion, then this could be just the upgrade you're looking for! - -For C and C++ projects, many people use the `clangd` backend. So that it can do things like "go to definition", `clangd` needs to know how to build the project so that it can figure out all the pieces to the puzzle. There are manual tools such as `bear` which can be run with `gcc` or `clang` to extract this information it has a big limitation in that if run with `ceedling release` you won't get any auto completion for Unity and you'll also get error messages reported by your IDE because of what it perceives as missing headers. If you do the same with `ceedling test` now you get Unity but you might miss things that are only seen in the release build. - -This plugin resolves that issue. As it is run by Ceedling, it has access to all the build information it needs to create the perfect `compile_commands.json`. Once enabled, this plugin will generate that file and place it in `./build/artifacts/compile_commands.json`. `clangd` will search your project for this file, but it is easier to symlink it into the root directory (for example `ln -s ./build/artifacts/compile_commands.json`. - -For more information on LSP and to find out if your editor supports it, check out https://langserver.org/ - -## Setup - -Enable the plugin in your project.yml by adding `compile_commands_json` to the list -of enabled plugins. - -``` YAML -:plugins: - :enabled: - - compile_commands_json -``` - -## Configuration - -There is no additional configuration necessary to run this plugin. diff --git a/tools/vendor/ceedling/plugins/compile_commands_json/lib/compile_commands_json.rb b/tools/vendor/ceedling/plugins/compile_commands_json/lib/compile_commands_json.rb deleted file mode 100644 index b04999f3..00000000 --- a/tools/vendor/ceedling/plugins/compile_commands_json/lib/compile_commands_json.rb +++ /dev/null @@ -1,35 +0,0 @@ -require 'ceedling/plugin' -require 'ceedling/constants' -require 'json' - -class CompileCommandsJson < Plugin - def setup - @fullpath = File.join(PROJECT_BUILD_ARTIFACTS_ROOT, "compile_commands.json") - @database = if (File.exist?(@fullpath) && File.size(@fullpath) > 0) - JSON.parse( File.read(@fullpath) ) - else - [] - end - end - - def post_compile_execute(arg_hash) - - # Create the new Entry - value = { - "directory" => Dir.pwd, - "command" => arg_hash[:shell_command], - "file" => arg_hash[:source] - } - - # Determine if we're updating an existing file description or adding a new one - index = @database.index {|h| h["file"] == arg_hash[:source]} - if index - @database[index] = value - else - @database << value - end - - # Update the Actual compile_commands.json file - File.open(@fullpath,'w') {|f| f << JSON.pretty_generate(@database)} - end -end diff --git a/tools/vendor/ceedling/plugins/compile_commands_json_db/README.md b/tools/vendor/ceedling/plugins/compile_commands_json_db/README.md new file mode 100644 index 00000000..871b24bf --- /dev/null +++ b/tools/vendor/ceedling/plugins/compile_commands_json_db/README.md @@ -0,0 +1,40 @@ +# Ceedling Plugin: JSON Compilation Database + +Language Server Protocol (LSP) support for Clang tooling. + +# Background + +Syntax highlighting and code completion are hard. Historically each editor or IDE has implemented their own and then competed amongst themselves to offer the best experience for developers. Good syntax highlighting can be so valuable as to outweigh the consideration of alternate editors. If implementing sytnax highlighting and related features in a tool is hard for one language — and it is — imagine doing it for dozens of them. Further, on the flip side, imagine the complexities involved for a developer working with multiple languages at once. + +In June of 2016, Microsoft with Red Hat and Codenvy got together to create the [Language Server Protocol (LSP)][lsp-microsoft] ([community site][lsp-community]). The idea was simple. By standardizing, any conforming IDE or editor would only need to support LSP instead of custom plugins for each language. In turn, the backend code that performs syntax highlighting and similar features can be written once and used by any IDE that supports LSP. Today, [Many editors support LSP][lsp-tools]. + +[lsp-microsoft]: https://microsoft.github.io/language-server-protocol/ +[lsp-community]: https://langserver.org/ +[lsp-tools]: https://microsoft.github.io/language-server-protocol/implementors/tools/ + +# Plugin Overview + +For C and C++ projects, perhaps the most popular LSP server is the [`clangd`][clangd] backend. In order to provide features like _go to definition_, `clangd` needs to understand how to build a project so that it can discover all the pieces to the puzzle. Because of the various flavors of builds Ceedling supports and especially because of the complexities of test suite builds, components of a build can easily go missing from the view of `clangd`. + +This plugin gives `clangd` — or any tool that understands a [JSON compilation database][json-compilation-database] — full visibility into a Ceedling build. + +Once enabled, this plugin generates the database as `/artifacts/compile_commands.json` for each new build. Tools that understand JSON Compilation Database files can then process it to make their features fully available to you. + +[clangd]: https://clangd.llvm.org +[json-compilation-database]: https://clang.llvm.org/docs/JSONCompilationDatabase.html + +# Setup + +Enable the plugin in your Ceedling project file by adding `compile_commands_json_db` to the list of enabled plugins. + +``` YAML +:plugins: + :enabled: + - compile_commands_json_db +``` + +# Configuration + +There is no additional configuration necessary to run this plugin. + +`clangd` will search your build directory for the JSON compilation database, but in some instances on Unix-asbed platforms it can be easier and necessary to symlink the file into the root directory of your project (e.g. `ln -s ./build/artifacts/compile_commands.json .`). diff --git a/tools/vendor/ceedling/plugins/compile_commands_json_db/lib/compile_commands_json_db.rb b/tools/vendor/ceedling/plugins/compile_commands_json_db/lib/compile_commands_json_db.rb new file mode 100644 index 00000000..40b32e59 --- /dev/null +++ b/tools/vendor/ceedling/plugins/compile_commands_json_db/lib/compile_commands_json_db.rb @@ -0,0 +1,51 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + +require 'ceedling/plugin' +require 'ceedling/constants' +require 'json' + +class CompileCommandsJsonDb < Plugin + + # `Plugin` setup() + def setup + @fullpath = File.join(PROJECT_BUILD_ARTIFACTS_ROOT, "compile_commands.json") + + @database = [] + + if (File.exist?(@fullpath) && File.size(@fullpath) > 0) + @database = JSON.parse( File.read(@fullpath) ) + end + + @mutex = Mutex.new() + end + + # `Plugin` build step hook + def post_compile_execute(arg_hash) + + # Create new Entry from compilation + value = { + "directory" => Dir.pwd, # TODO: Replace with Ceedling project root when it exists + "file" => arg_hash[:source], + "command" => arg_hash[:shell_command], + "output" => arg_hash[:object] + } + + @mutex.synchronize do + # Determine if we're updating an existing file description or adding a new one + index = @database.index {|h| h["file"] == arg_hash[:source]} + if index + @database[index] = value + else + @database << value + end + + # Rewrite the compile_commands.json file + File.open(@fullpath,'w') {|f| f << JSON.pretty_generate(@database)} + end + end +end diff --git a/tools/vendor/ceedling/plugins/dependencies/README.md b/tools/vendor/ceedling/plugins/dependencies/README.md index 256467df..c5c93001 100644 --- a/tools/vendor/ceedling/plugins/dependencies/README.md +++ b/tools/vendor/ceedling/plugins/dependencies/README.md @@ -24,19 +24,26 @@ containing header files that might want to be included by your release project. So how does all this magic work? -First, you need to add the `:dependencies` plugin to your list. Then, we'll add a new -section called :dependencies. There, you can list as many dependencies as you desire. Each -has a series of fields which help Ceedling to understand your needs. Many of them are -optional. If you don't need that feature, just don't include it! In the end, it'll look -something like this: +First, you need to add the Dependencies plugin to your list of enabled plugins. Then, we'll +add a new comfiguration section called `:dependencies`. There, you can list as many +dependencies as you desire. Each has a series of fields that help Ceedling to understand +your needs. Many of them are optional. If you don't need that feature, just don't include +it! In the end, it'll look something like this: + +```yaml +:plugins: + :enabled: + - dependencies -``` :dependencies: - :libraries: + :deps: - :name: WolfSSL - :source_path: third_party/wolfssl/source - :build_path: third_party/wolfssl/build - :artifact_path: third_party/wolfssl/install + :paths: + :fetch: third_party/wolfssl/source + :source: third_party/wolfssl/source + :build: third_party/wolfssl/build + :artifact_lib: third_party/wolfssl/install + :artifact_inc: third_party/wolfssl/install :fetch: :method: :zip :source: \\shared_drive\third_party_libs\wolfssl\wolfssl-4.2.0.zip @@ -72,25 +79,32 @@ it easier for us to see the name of each dependency with starting dash. The name field is only used to print progress while we're running Ceedling. You may call the name of the field whatever you wish. -Working Folders ---------------- - -The `:source_path` field allows us to specify where the source code for each of our -dependencies is stored. If fetching the dependency from elsewhere, it will be fetched -to this location. All commands to build this dependency will be executed from -this location (override this by specifying a `:build_path`). Finally, the output -artifacts will be referenced to this location (override this by specifying a `:artifact_path`) - -If unspecified, the `:source_path` will be `dependencies\dep_name` where `dep_name` -is the name specified in `:name` above (with special characters removed). It's best, -though, if you specify exactly where you want your dependencies to live. +Working Paths +------------- + +All paths are collected under `:dependencies` ↳ `:paths`. The `:source` field allows us +to specify where the source code for each of our dependencies is stored. By default, it's +the same as the `:fetch` path, which is where source will be fetched TO when fetching the +dependency from elsewhere. All commands to build this dependency will be executed from +the `:source` location. Temporary data will be placed in the `:build` location. Unless you're +using one of Ceedling's built-in builders, you'll need to learn where the tool you're using to +build places it's built artifacts , and list that here. Finally, the output +artifacts will be referenced to this location. You override this by specifying a `:artifact` +path. In summary: + + - `:paths` + - `:fetch` -- where things are fetched to (defaults to `build/deps/depname/`) + - `:source` -- where we trigger builds (defaults to `:fetch`) + - `:build` -- where we have the produced build files (defaults to `<:fetch>/build`) + - `:deploy` -- where any produced library files should be copied (defaults to same as release executable) + - `:artifact` -- where output libraries can be found (defaults to `:build`) If the dependency is directly included in your project (you've specified `:none` as the -`:method` for fetching), then `:source_path` should be where your Ceedling can find the +`:method` for fetching), then `:source` should be where your Ceedling can find the source for your dependency in you repo. -All artifacts are relative to the `:artifact_path` (which defaults to be the same as -`:source_path`) +All artifacts are relative to the appropriate `:artifact` path. So if there are multiple +include dirs, choose the highest level and make the rest relative from there. Fetching Dependencies --------------------- @@ -102,30 +116,43 @@ couple of fields: - `:method` -- This is the method that this dependency is fetched. - `:none` -- This tells Ceedling that the code is already included in the project. - `:zip` -- This tells Ceedling that we want to unpack a zip file to our source path. + - `:gzip` -- This tells Ceedling that we want to unpack a gzip file to our source path. - `:git` -- This tells Ceedling that we want to clone a git repo to our source path. - `:svn` -- This tells Ceedling that we want to checkout a subversion repo to our source path. - `:custom` -- This tells Ceedling that we want to use a custom command or commands to fetch the code. -- `:source` -- This is the path or url to fetch code when using the zip or git method. -- `:tag`/`:branch` -- This is the specific tag or branch that you wish to retrieve (git only. optional). -- `:hash` -- This is the specific SHA1 hash you want to fetch (git only. optional, requires a deep clone). -- `:revision` -- This is the specific revision you want to fetch (svn only. optional). -- `:executable` -- This is a list of commands to execute when using the `:custom` method +- `:source` -- This is the path or url to fetch code when using the `:zip`, `:gzip` or `:git` method. +- `:tag`/`:branch` -- This is the specific tag or branch that you wish to retrieve (`:git` only, optional). +- `:hash` -- This is the specific SHA1 hash you want to fetch (`:git` only, optional and triggers a deep clone). +- `:revision` -- This is the specific revision you want to fetch (`:svn` only, optional). +- `:executable` -- This is a YAML list of commands to execute when using the `:custom` method +Some notes: + +The `:source` location for fetching a `:zip` or `:gzip` file is relative to the `:paths` ↳ `:source` +folder. Environment Variables --------------------- Many build systems support customization through environment variables. By specifying -an array of environment variables, Ceedling will customize the shell environment before -calling the build process. +an array of environment variables, the Dependencies plugin will customize the shell environment +before calling the build process. + +Note that Ceedling’s project configuration includes a top-level `:environment` sections itself. +The top-level `:environment` section is for all of Ceedling. The `:environment` section nested +within a specific dependency’s configuration is only for the shell environment used to process +that dependency. The format and abilities of the two `:environment` configuration sections are +also different. Environment variables may be specified in three ways. Let's look at one of each: -``` - :environment: - - ARCHITECTURE=ARM9 - - CFLAGS+=-DADD_AWESOMENESS - - CFLAGS-=-DWASTE +```yaml +:dependencies: + : + :environment: + - ARCHITECTURE=ARM9 + - CFLAGS+=-DADD_AWESOMENESS + - CFLAGS-=-DWASTE ``` In the first example, you see the most straightforward method. The environment variable @@ -199,7 +226,7 @@ In this case, Ceedling is able to automatically add these to its internal source these files to be used while building your release code. Tasks ------ +===== Once configured correctly, the `:dependencies` plugin should integrate seamlessly into your workflow and you shouldn't have to think about it. In the real world, that doesn't always happen. @@ -240,15 +267,55 @@ dependencies. Maybe you want to take that query further and actually get a list of ALL the header files Ceedling has found, including those belonging to your dependencies. -Testing -======= +Custom Tools +============ + +You can optionally specify a compiler, assembler, and linker, just as you would a release build: + +```yaml +:tools: + :deps_compiler: + :executable: gcc + :arguments: + - -g + - -I"$": COLLECTION_PATHS_SUBPROJECTS + - -D$: COLLECTION_DEFINES_SUBPROJECTS + - -c "${1}" + - -o "${2}" + :deps_linker: + :executable: ar + :arguments: + - rcs + - ${2} + - ${1} +``` -Hopefully all your dependencies are fully tested... but we can't always depend on that. -In the event that they are tested with Ceedling, you'll probably want to consider using -the `:subprojects` plugin instead of this one. The purpose of this plugin is to pull in -third party code for release... and to provide a mockable interface for Ceedling to use -during its tests of other modules. +Then, once created, you can reference these tools in your build steps by using the `:build_lib` symbol instead +of a series of strings to explain all the steps. Ceedling will understand that it should build all the specified +source and/or assembly files into the specified library: -If that's what you're after... you've found the right plugin! +```yaml +:dependencies: + :deps: + - :name: CaptainCrunch + :paths: + :fetch: ../cc/ + :source: ../cc/ + :build: ../cc/build + :artifact: ../cc/build + :fetch: + :method: :none + :environment: [] + :build: + - :build_lib + :artifacts: + :static_libraries: + - release/cc.a + :dynamic_libraries: [] + :includes: + - ./cc.h + :defines: + - THESE_GET_USED_DURING_COMPILATION +``` Happy Testing! diff --git a/tools/vendor/ceedling/plugins/dependencies/Rakefile b/tools/vendor/ceedling/plugins/dependencies/Rakefile new file mode 100644 index 00000000..0674949b --- /dev/null +++ b/tools/vendor/ceedling/plugins/dependencies/Rakefile @@ -0,0 +1,188 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + +require 'rake' + +require 'rbconfig' + +def windows?() + return (RbConfig::CONFIG['host_os'] =~ /mswin|mingw|cygwin/) +end + +# Add `ruby` to the command line on Windows to execute the Ruby-based shell script bin/ceedling +CEEDLING_CLI_EXEC = "#{'ruby ' if windows?}../../../../bin/ceedling" + +def prep_test +end + +def assert_file_exist(path) + if File.exist?(path) + puts "File #{path} exists." + else + raise "File #{path} doesn't exist after create" + end +end + +def assert_file_contains(path, expected) + if File.exist?(path) + actual = File.read(path) + if actual.match?(expected) + puts "File #{path} exists and contains specified contents." + else + puts "Expected content: #{expected}" # Debug logging + puts "Actual content: #{actual}" # Debug logging + raise "File #{path} exists but doesn't contain specified contents." + end + else + raise "File #{path} doesn't exist after create" + end +end + +def assert_file_not_exist(path) + unless File.exist?(path) + puts "File #{path} doesn't exist after destroy" + else + raise "File #{path} still exists after destroy." + end +end + +def assert_cmd_return(cmd, expected) + retval = `#{CEEDLING_CLI_EXEC} #{cmd}` + if (retval.include? expected) + puts "Testing included `#{expected}`" + else + puts retval # Debug logging + raise "Testing did not include `#{expected}`" + end +end + +def assert_cmd_not_return(cmd, expected) + retval = `#{CEEDLING_CLI_EXEC} #{cmd}` + if (!retval.include? expected) + puts "Testing didn't included `#{expected}`" + else + raise "Testing included `#{expected}`, which was unexpected." + end +end + +desc "Run integration test on example" +task :integration_test do + chdir("./example/boss") do + + # Start with a blank example project + prep_test + + # verify we can clean the dependencies + puts "\nCleaning the Dependencies:" + assert_cmd_not_return("dependencies:clean",'error') + assert_file_not_exist("./third_party/bees/source/makefile") + assert_file_not_exist("./third_party/bees/source/src/worker.c") + assert_file_not_exist("./third_party/bees/source/src/worker.h") + assert_file_not_exist("./third_party/bees/source/build/libworker.a") + assert_file_not_exist("./third_party/bees/source/build/libworker.h") + assert_file_not_exist("../supervisor/build/release/libsupervisor.a") + assert_file_not_exist("../supervisor/build/artifacts/release/libsupervisor.a") + assert_file_exist("../supervisor/src/supervisor.c") + assert_file_exist("../supervisor/src/supervisor.h") + + # verify we can fetch the dependencies + puts "\nFetching the Dependencies:" + assert_cmd_not_return("dependencies:fetch",'error') + assert_file_exist("./third_party/bees/source/makefile") + assert_file_exist("./third_party/bees/source/src/worker.c") + assert_file_exist("./third_party/bees/source/src/worker.h") + assert_file_not_exist("./third_party/bees/source/build/libworker.a") + assert_file_not_exist("./third_party/bees/source/build/libworker.h") + assert_file_not_exist("../supervisor/build/release/libsupervisor.a") + assert_file_not_exist("../supervisor/build/artifacts/release/libsupervisor.a") + assert_file_exist("../supervisor/src/supervisor.c") + assert_file_exist("../supervisor/src/supervisor.h") + + # verify we can make the dependencies + puts "\nMaking the Dependencies:" + assert_cmd_not_return("dependencies:make",'error') + assert_file_exist("./third_party/bees/source/makefile") + assert_file_exist("./third_party/bees/source/src/worker.c") + assert_file_exist("./third_party/bees/source/src/worker.h") + assert_file_exist("./third_party/bees/source/build/libworker.a") + assert_file_exist("./third_party/bees/source/build/libworker.h") + assert_file_exist("../supervisor/build/release/libsupervisor.a") + assert_file_exist("../supervisor/build/artifacts/release/libsupervisor.a") + assert_file_exist("../supervisor/src/supervisor.c") + assert_file_exist("../supervisor/src/supervisor.h") + + # verify we can clean the dependencies again + puts "\nCleaning the Dependencies (round 2):" + assert_cmd_not_return("dependencies:clean",'error') + assert_file_not_exist("./third_party/bees/source/makefile") + assert_file_not_exist("./third_party/bees/source/src/worker.c") + assert_file_not_exist("./third_party/bees/source/src/worker.h") + assert_file_not_exist("./third_party/bees/source/build/libworker.a") + assert_file_not_exist("./third_party/bees/source/build/libworker.h") + assert_file_not_exist("../supervisor/build/release/libsupervisor.a") + assert_file_not_exist("../supervisor/build/artifacts/release/libsupervisor.a") + assert_file_exist("../supervisor/src/supervisor.c") + assert_file_exist("../supervisor/src/supervisor.h") + + # verify dependencies are built automatically for a release build + puts "\nRelease with Dependencies:" + assert_cmd_not_return("release",'error') + assert_file_exist("./third_party/bees/source/makefile") + assert_file_exist("./third_party/bees/source/src/worker.c") + assert_file_exist("./third_party/bees/source/src/worker.h") + assert_file_exist("./third_party/bees/source/build/libworker.a") + assert_file_exist("./third_party/bees/source/build/libworker.h") + assert_file_exist("../supervisor/build/release/libsupervisor.a") + assert_file_exist("../supervisor/build/artifacts/release/libsupervisor.a") + assert_file_exist("../supervisor/src/supervisor.c") + assert_file_exist("../supervisor/src/supervisor.h") + + # verify we can clean the dependencies again + puts "\nCleaning the Dependencies (round 3):" + assert_cmd_not_return("dependencies:clean",'error') + assert_file_not_exist("./third_party/bees/source/makefile") + assert_file_not_exist("./third_party/bees/source/src/worker.c") + assert_file_not_exist("./third_party/bees/source/src/worker.h") + assert_file_not_exist("./third_party/bees/source/build/libworker.a") + assert_file_not_exist("./third_party/bees/source/build/libworker.h") + assert_file_not_exist("../supervisor/build/release/libsupervisor.a") + assert_file_not_exist("../supervisor/build/artifacts/release/libsupervisor.a") + assert_file_exist("../supervisor/src/supervisor.c") + assert_file_exist("../supervisor/src/supervisor.h") + + # verify dependencies are built automatically for a test build + puts "\nTesting with Dependencies:" + assert_cmd_not_return("test:all",'error') + assert_file_exist("./third_party/bees/source/makefile") + assert_file_exist("./third_party/bees/source/src/worker.c") + assert_file_exist("./third_party/bees/source/src/worker.h") + assert_file_exist("./third_party/bees/source/build/libworker.a") + assert_file_exist("./third_party/bees/source/build/libworker.h") + assert_file_exist("../supervisor/build/release/libsupervisor.a") + assert_file_exist("../supervisor/build/artifacts/release/libsupervisor.a") + assert_file_exist("../supervisor/src/supervisor.c") + assert_file_exist("../supervisor/src/supervisor.h") + + # verify we can clean the dependencies again + puts "\nCleaning the Dependencies (round 4):" + assert_cmd_not_return("dependencies:clean",'error') + assert_file_not_exist("./third_party/bees/source/makefile") + assert_file_not_exist("./third_party/bees/source/src/worker.c") + assert_file_not_exist("./third_party/bees/source/src/worker.h") + assert_file_not_exist("./third_party/bees/source/build/libworker.a") + assert_file_not_exist("./third_party/bees/source/build/libworker.h") + assert_file_not_exist("../supervisor/build/release/libsupervisor.a") + assert_file_not_exist("../supervisor/build/artifacts/release/libsupervisor.a") + assert_file_exist("../supervisor/src/supervisor.c") + assert_file_exist("../supervisor/src/supervisor.h") + + puts "\nPASSES MODULE SELF-TESTS" + + end +end + +task :default => [:integration_test] \ No newline at end of file diff --git a/tools/vendor/ceedling/plugins/dependencies/config/defaults.yml b/tools/vendor/ceedling/plugins/dependencies/config/defaults.yml index 0415f8ea..e9a02490 100644 --- a/tools/vendor/ceedling/plugins/dependencies/config/defaults.yml +++ b/tools/vendor/ceedling/plugins/dependencies/config/defaults.yml @@ -1,5 +1,78 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + --- :dependencies: - :libraries: [] + :deps: [] + +:tools: + :deps_compiler: + :executable: gcc + :name: 'Dependencies compiler' + :arguments: + - -g + - -I"$": COLLECTION_PATHS_DEPS + - -D$: COLLECTION_DEFINES_DEPS + - -c "${1}" + - -o "${2}" + + :deps_linker: + :executable: ar + :name: 'Dependencies archiver' + :arguments: + - rcs + - ${2} + - ${1} + + :deps_zip: + :executable: unzip + :name: 'Dependencies zip unarchiver' + :optional: true + :arguments: + - -o + - ${1} # Filepath + + :deps_targzip: + :executable: tar + :name: 'Dependencies tar gzip unarchiver' + :optional: true + :arguments: + - -xvzf + - ${1} # Filepath + - -C + - ./ + + :deps_git_clone: + :executable: git + :name: 'Dependencies git clone' + :optional: true + :arguments: + - clone + - ${1} # Optional branch with `-b` flag + - ${2} # Optional depth with `--depth` flag + - ${3} # Repository source + - . + + :deps_git_checkout: + :executable: git + :name: 'Dependencies git checkout' + :optional: true + :arguments: + - checkout + - ${1} # Git hash + + :deps_subversion: + :executable: svn + :name: 'Dependencies subversion' + :optional: true + :arguments: + - checkout + - ${1} # Optional branch with `--revision` flag + - ${2} # Repository source + - . ... diff --git a/tools/vendor/ceedling/plugins/dependencies/dependencies.rake b/tools/vendor/ceedling/plugins/dependencies/dependencies.rake index 87ab4b95..1e70549f 100644 --- a/tools/vendor/ceedling/plugins/dependencies/dependencies.rake +++ b/tools/vendor/ceedling/plugins/dependencies/dependencies.rake @@ -1,5 +1,11 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= -DEPENDENCIES_LIBRARIES.each do |deplib| +DEPENDENCIES_DEPS.each do |deplib| # Look up the name of this dependency library deplib_name = @ceedling[DEPENDENCIES_SYM].get_name(deplib) @@ -13,6 +19,7 @@ DEPENDENCIES_LIBRARIES.each do |deplib| all_deps = @ceedling[DEPENDENCIES_SYM].get_static_libraries_for_dependency(deplib) + @ceedling[DEPENDENCIES_SYM].get_dynamic_libraries_for_dependency(deplib) + @ceedling[DEPENDENCIES_SYM].get_include_directories_for_dependency(deplib) + + @ceedling[DEPENDENCIES_SYM].get_include_files_for_dependency(deplib) + @ceedling[DEPENDENCIES_SYM].get_source_files_for_dependency(deplib) # Add a rule for building the actual libraries from dependency list @@ -24,8 +31,9 @@ DEPENDENCIES_LIBRARIES.each do |deplib| # We double-check that it doesn't already exist, because this process sometimes # produces multiple files, but they may have already been flagged as invoked - unless (File.exist?(path)) - + if (File.exist?(path)) + @ceedling[:loginator].log("Nothing to do for dependency #{path}", Verbosity::OBNOXIOUS) + else # Set Environment Variables, Fetch, and Build @ceedling[DEPENDENCIES_SYM].set_env_if_required(path) @ceedling[DEPENDENCIES_SYM].fetch_if_required(path) @@ -36,13 +44,15 @@ DEPENDENCIES_LIBRARIES.each do |deplib| # Add a rule for building the source and includes from dependency list (@ceedling[DEPENDENCIES_SYM].get_include_directories_for_dependency(deplib) + + @ceedling[DEPENDENCIES_SYM].get_include_files_for_dependency(deplib) + @ceedling[DEPENDENCIES_SYM].get_source_files_for_dependency(deplib) ).each do |libpath| task libpath do |filetask| - path = filetask.name - - unless (File.file?(path) || File.directory?(path)) + path = File.expand_path(filetask.name) + if (File.file?(path) || File.directory?(path)) + @ceedling[:loginator].log("Nothing to do for dependency #{path}", Verbosity::OBNOXIOUS) + else # Set Environment Variables, Fetch, and Build @ceedling[DEPENDENCIES_SYM].set_env_if_required(path) @ceedling[DEPENDENCIES_SYM].fetch_if_required(path) @@ -74,12 +84,16 @@ DEPENDENCIES_LIBRARIES.each do |deplib| namespace :fetch do # Add task to directly clobber this dependency - task(deplib_name) do + task(deplib_name => @ceedling[DEPENDENCIES_SYM].get_source_path(deplib)) do @ceedling[DEPENDENCIES_SYM].fetch_if_required(deplib_name) end end end + + # grab our own reference to the main configuration hash + project_config = @ceedling[:configurator].project_config_hash + # Add source files to our list of things to build during release source_files = @ceedling[DEPENDENCIES_SYM].get_source_files_for_dependency(deplib) task PROJECT_RELEASE_BUILD_TARGET => source_files @@ -92,10 +106,6 @@ DEPENDENCIES_LIBRARIES.each do |deplib| dynamic_libs = @ceedling[DEPENDENCIES_SYM].get_dynamic_libraries_for_dependency(deplib) task RELEASE_SYM => dynamic_libs - # Add the include dirs / files to our list of dependencies for release - headers = @ceedling[DEPENDENCIES_SYM].get_include_directories_for_dependency(deplib) - task RELEASE_SYM => headers - # Paths to Libraries need to be Added to the Lib Path List all_libs = static_libs + dynamic_libs PATHS_LIBRARIES ||= [] @@ -108,6 +118,8 @@ DEPENDENCIES_LIBRARIES.each do |deplib| all_libs.each {|lib| LIBRARIES_SYSTEM << File.basename(lib,'.*').sub(/^lib/,'') } LIBRARIES_SYSTEM.uniq! LIBRARIES_SYSTEM.reject!{|s| s.empty?} + + task :prepare => all_deps end # Add any artifact:include or :source folders to our release & test includes paths so linking and mocking work. @@ -116,16 +128,16 @@ end # Add tasks for building or cleaning ALL depencies namespace DEPENDENCIES_SYM do desc "Deploy missing dependencies." - task :deploy => DEPENDENCIES_LIBRARIES.map{|deplib| "#{DEPENDENCIES_SYM}:deploy:#{@ceedling[DEPENDENCIES_SYM].get_name(deplib)}"} + task :deploy => DEPENDENCIES_DEPS.map{|deplib| "#{DEPENDENCIES_SYM}:deploy:#{@ceedling[DEPENDENCIES_SYM].get_name(deplib)}"} desc "Build any missing dependencies." - task :make => DEPENDENCIES_LIBRARIES.map{|deplib| "#{DEPENDENCIES_SYM}:make:#{@ceedling[DEPENDENCIES_SYM].get_name(deplib)}"} + task :make => DEPENDENCIES_DEPS.map{|deplib| "#{DEPENDENCIES_SYM}:make:#{@ceedling[DEPENDENCIES_SYM].get_name(deplib)}"} desc "Clean all dependencies." - task :clean => DEPENDENCIES_LIBRARIES.map{|deplib| "#{DEPENDENCIES_SYM}:clean:#{@ceedling[DEPENDENCIES_SYM].get_name(deplib)}"} + task :clean => DEPENDENCIES_DEPS.map{|deplib| "#{DEPENDENCIES_SYM}:clean:#{@ceedling[DEPENDENCIES_SYM].get_name(deplib)}"} desc "Fetch all dependencies." - task :fetch => DEPENDENCIES_LIBRARIES.map{|deplib| "#{DEPENDENCIES_SYM}:fetch:#{@ceedling[DEPENDENCIES_SYM].get_name(deplib)}"} + task :fetch => DEPENDENCIES_DEPS.map{|deplib| "#{DEPENDENCIES_SYM}:fetch:#{@ceedling[DEPENDENCIES_SYM].get_name(deplib)}"} end namespace :files do @@ -133,7 +145,7 @@ namespace :files do task :dependencies do puts "dependency files:" deps = [] - DEPENDENCIES_LIBRARIES.each do |deplib| + DEPENDENCIES_DEPS.each do |deplib| deps << @ceedling[DEPENDENCIES_SYM].get_static_libraries_for_dependency(deplib) deps << @ceedling[DEPENDENCIES_SYM].get_dynamic_libraries_for_dependency(deplib) end @@ -143,5 +155,3 @@ namespace :files do end end -# Make sure that we build dependencies before attempting to tackle any of the unit tests -Rake::Task[:test_deps].enhance ['dependencies:make'] diff --git a/tools/vendor/ceedling/plugins/dependencies/example/boss/project.yml b/tools/vendor/ceedling/plugins/dependencies/example/boss/project.yml new file mode 100644 index 00000000..fdab1bbe --- /dev/null +++ b/tools/vendor/ceedling/plugins/dependencies/example/boss/project.yml @@ -0,0 +1,234 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + +--- +:project: + # how to use ceedling. If you're not sure, leave this as `gem` and `?` + :which_ceedling: ../../../.. + :ceedling_version: '?' + + # optional features. If you don't need them, keep them turned off for performance + :use_mocks: TRUE + :use_test_preprocessor: :all + :use_backtrace: :none + + # tweak the way ceedling handles automatic tasks + :build_root: build + :test_file_prefix: test_ + :default_tasks: + - test:all + + # performance options. If your tools start giving mysterious errors, consider + # dropping this to 1 to force single-tasking + :test_threads: 8 + :compile_threads: 8 + + # you can specify different yaml config files which modify the existing one + :options_paths: [] + + # enable release build (more details in release_build section below) + :release_build: TRUE + +# further details to configure the way Ceedling handles test code +:test_build: + :use_assembly: FALSE + +# further details to configure the way Ceedling handles release code +:release_build: + :output: DepTest + :use_assembly: FALSE + :artifacts: [] + +# add the following dependencies to our build +:dependencies: + :deps: + - :name: SupervisorSupremo + :paths: + :fetch: ../supervisor/ + :source: ../supervisor/ + :build: ../supervisor/build + :artifact: ../supervisor/build + :fetch: + :method: :none + :environment: [] + :build: + - "ceedling clobber test:all release" + :artifacts: + :static_libraries: + - release/libsupervisor.a + :dynamic_libraries: [] + :includes: + - ../src/supervisor.h + - :name: WorkerBees + :paths: + :fetch: third_party/bees/source + :source: third_party/bees/source + :build: third_party/bees/source/build + :artifact: third_party/bees/source/build + :fetch: + :method: :zip + :source: ../../../../workerbees.zip #relative to source_path above + :environment: [] + :build: + - make + :artifacts: + :static_libraries: + - libworker.a + :dynamic_libraries: [] + :includes: + - libworker.h + - :name: VersionReporter + :paths: + :fetch: third_party/version/reporter + :source: third_party/version/reporter + :build: third_party/version/build + :artifact: third_party/version/build + :fetch: + :method: :tar_gzip + :source: ../../../../version.tar.gzip #relative to source_path above + :environment: [] + :build: + - :build_lib + :artifacts: + :static_libraries: + - libver.a + :dynamic_libraries: [] + :includes: + - ../reporter/version.h + +# Plugins are optional Ceedling features which can be enabled. Ceedling supports +# a variety of plugins which may effect the way things are compiled, reported, +# or may provide new command options. Refer to the readme in each plugin for +# details on how to use it. +:plugins: + :load_paths: [] + :enabled: + #- beep # beeps when finished, so you don't waste time waiting for ceedling + #- module_generator # handy for quickly creating source, header, and test templates + #- gcov # test coverage using gcov. Requires gcc, gcov, and a coverage analyzer like gcovr + #- bullseye # test coverage using bullseye. Requires bullseye for your platform + #- command_hooks # write custom actions to be called at different points during the build process + #- compile_commands_json # generate a compile_commands.json file + - dependencies # automatically fetch 3rd party libraries, etc. + #- subprojects # managing builds and test for static libraries + #- fake_function_framework # use FFF instead of CMock + + # Report options (You'll want to choose one stdout option, but may choose multiple stored options if desired) + - report_tests_pretty_stdout + +# override the default extensions for your system and toolchain +:extension: + #:header: .h + #:source: .c + #:assembly: .s + #:dependencies: .d + #:object: .o + :executable: .out + #:testpass: .pass + #:testfail: .fail + :subprojects: .a + +# This is where Ceedling should look for your source and test files. +# see documentation for the many options for specifying this. +:paths: + :test: + - ./test + :source: + - ./src + :include: + - ./src + :libraries: [] + +# You can even specify specific files to add or remove from your test +# and release collections. Usually it's better to use paths and let +# Ceedling do the work for you! +:files: + :test: [] + :source: [] + +# Compilation symbols to be injected into builds +# See documentation for advanced options: +# - Test name matchers for different symbols per test executable build +# - Referencing symbols in multiple lists using advanced YAML +# - Specifiying symbols used during test preprocessing +:defines: + :test: + - TEST # Simple list option to add symbol 'TEST' to compilation of all files in all test executables + - STATIC= + :release: + - STATIC=static + + # Enable to inject name of a test as a unique compilation symbol into its respective executable build. + :use_test_definition: FALSE + +# Configure additional command line flags provided to tools used in each build step +# :flags: +# :release: +# :compile: # Add '-Wall' and '--02' to compilation of all files in release target +# - -Wall +# - --O2 +# :test: +# :compile: +# '(_|-)special': # Add '-pedantic' to compilation of all files in all test executables with '_special' or '-special' in their names +# - -pedantic +# '*': # Add '-foo' to compilation of all files in all test executables +# - -foo + +# Configuration Options specific to CMock. See CMock docs for details +:cmock: + :mock_prefix: mock_ + :when_no_prototypes: :warn + :enforce_strict_ordering: TRUE + :plugins: + - :ignore + - :callback + :treat_as: + uint8: HEX8 + uint16: HEX16 + uint32: UINT32 + int8: INT8 + bool: UINT8 + +# Configuration options specific to Unity. +:unity: + :defines: + - UNITY_EXCLUDE_FLOAT + +# You can optionally have ceedling create environment variables for you before +# performing the rest of its tasks. +:environment: [] + +# LIBRARIES +# These libraries are automatically injected into the build process. Those specified as +# common will be used in all types of builds. Otherwise, libraries can be injected in just +# tests or releases. These options are MERGED with the options in supplemental yaml files. +:libraries: + :placement: :end + :flag: "-l${1}" + :path_flag: "-L ${1}" + :system: [] # for example, you might list 'm' to grab the math library + :test: [] + :release: [] + +# TOOLS +# This is custom configuration for any tools, but in this case, we are highlighting the +# configuration options for the dependency tools +:tools: + :deps_compiler: + :executable: gcc + :arguments: + - -g + - -I"$": COLLECTION_PATHS_DEPS + - -D$: COLLECTION_DEFINES_DEPS + - -c "${1}" + - -o "${2}" + :deps_linker: + :executable: ar + :arguments: + - -rcs + - ${2} + - ${1} diff --git a/tools/vendor/ceedling/plugins/dependencies/example/boss/src/boss.c b/tools/vendor/ceedling/plugins/dependencies/example/boss/src/boss.c new file mode 100644 index 00000000..49a994d2 --- /dev/null +++ b/tools/vendor/ceedling/plugins/dependencies/example/boss/src/boss.c @@ -0,0 +1,80 @@ +/* ========================================================================= + Ceedling - Test-Centered Build System for C + ThrowTheSwitch.org + Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams + SPDX-License-Identifier: MIT +========================================================================= */ + +#include "boss.h" +#include "supervisor.h" +#include "libworker.h" + +#define MAXIMUM_WORKERS 20 + +STATIC int hours_worked[MAXIMUM_WORKERS]; +STATIC int total_workers = 0; +STATIC int total_hours = 0; + +void boss_start() +{ + int i = 0; + + total_workers = 0; + total_hours = 0; + + for (i = 0; i < MAXIMUM_WORKERS; i++) + { + hours_worked[i] = 0; + } +} + +void boss_hire_workers(int num_workers) +{ + if (num_workers > 0) { + total_workers += num_workers; + } +} + +void boss_fire_workers(int num_workers) +{ + if (num_workers > total_workers) + { + num_workers = total_workers; + } + + if (num_workers > 0) + { + total_workers -= num_workers; + } +} + +int boss_micro_manage(int* chunks_of_work, int num_chunks) +{ + int i; + int id; + + if ((num_chunks < 0) || (chunks_of_work == 0)) + { + return -1; + } + + /* Start of the work iteration */ + for (i = 0; i < total_workers; i++) + { + worker_start_over(i); + } + + /* Distribute the work "fairly" */ + for (i = 0; i < num_chunks; i++) + { + id = supervisor_delegate(hours_worked, total_workers); + if (id >= 0) + { + worker_work(id, chunks_of_work[i]); + hours_worked[id] = worker_progress(id); + } + } + + /* How much work was finished? */ + return supervisor_progress(hours_worked, total_workers); +} \ No newline at end of file diff --git a/tools/vendor/ceedling/plugins/dependencies/example/boss/src/boss.h b/tools/vendor/ceedling/plugins/dependencies/example/boss/src/boss.h new file mode 100644 index 00000000..dcc14d44 --- /dev/null +++ b/tools/vendor/ceedling/plugins/dependencies/example/boss/src/boss.h @@ -0,0 +1,16 @@ +/* ========================================================================= + Ceedling - Test-Centered Build System for C + ThrowTheSwitch.org + Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams + SPDX-License-Identifier: MIT +========================================================================= */ + +#ifndef BOSS_H +#define BOSS_H + +void boss_start(); +void boss_hire_workers(int num_workers); +void boss_fire_workers(int num_workers); +int boss_micro_manage(int* chunks_of_work, int num_chunks); + +#endif diff --git a/tools/vendor/ceedling/plugins/dependencies/example/boss/src/main.c b/tools/vendor/ceedling/plugins/dependencies/example/boss/src/main.c new file mode 100644 index 00000000..dec9fd3c --- /dev/null +++ b/tools/vendor/ceedling/plugins/dependencies/example/boss/src/main.c @@ -0,0 +1,45 @@ +/* ========================================================================= + Ceedling - Test-Centered Build System for C + ThrowTheSwitch.org + Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams + SPDX-License-Identifier: MIT +========================================================================= */ + +#include +#include + +#include "boss.h" +#include "version.h" + +#define WORK 20 + +int main(int argc, char *argv[]) +{ + int i; + int work[WORK]; + int retval; + + /* output the version */ + puts(get_version()); + + /* This could be more interesting... but honestly, we're just proving this all builds */ + boss_start(); + + /* Hire some workers */ + for (i=0; i < 3; i++) + { + boss_hire_workers( 1 + rand() % 5 ); + } + + /* Fire a few */ + boss_fire_workers( rand() % 3 ); + + /* Do some work */ + for (i= 0; i < WORK; i++) + { + work[i] = rand() % 10; + } + retval = boss_micro_manage(work, WORK); + + return retval; +} \ No newline at end of file diff --git a/tools/vendor/ceedling/plugins/dependencies/example/boss/test/test_boss.c b/tools/vendor/ceedling/plugins/dependencies/example/boss/test/test_boss.c new file mode 100644 index 00000000..a6476037 --- /dev/null +++ b/tools/vendor/ceedling/plugins/dependencies/example/boss/test/test_boss.c @@ -0,0 +1,118 @@ +/* ========================================================================= + Ceedling - Test-Centered Build System for C + ThrowTheSwitch.org + Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams + SPDX-License-Identifier: MIT +========================================================================= */ + +#ifdef TEST + +#include "unity.h" + +#include "mock_supervisor.h" +#include "mock_libworker.h" +#include "boss.h" + + +extern int hours_worked[]; +extern int total_workers; +extern int total_hours; + +void setUp(void) +{ + boss_start(); +} + +void tearDown(void) +{ +} + +void test_boss_start_ResetsAllTheStuff(void) +{ + int i; + + total_workers = 3; + total_hours = 33; + + for (i=0; i < 3; i++) + { + hours_worked[i] = i+1; + } + + boss_start(); + + TEST_ASSERT_EQUAL_INT(0, total_workers); + TEST_ASSERT_EQUAL_INT(0, total_hours); + TEST_ASSERT_EQUAL_INT(0, hours_worked[0]); + TEST_ASSERT_EQUAL_INT(0, hours_worked[1]); + TEST_ASSERT_EQUAL_INT(0, hours_worked[2]); +} + +void test_boss_can_HireAndFireWorkers(void) +{ + TEST_ASSERT_EQUAL(0, total_workers); + + boss_hire_workers(3); + TEST_ASSERT_EQUAL(3, total_workers); + + boss_hire_workers(1); + boss_hire_workers(7); + TEST_ASSERT_EQUAL(11, total_workers); + + boss_hire_workers(0); + TEST_ASSERT_EQUAL(11, total_workers); + + boss_hire_workers(-1); + TEST_ASSERT_EQUAL(11, total_workers); + + boss_fire_workers(3); + TEST_ASSERT_EQUAL(8, total_workers); + + boss_fire_workers(2); + boss_fire_workers(4); + TEST_ASSERT_EQUAL(2, total_workers); + + boss_fire_workers(0); + TEST_ASSERT_EQUAL(2, total_workers); + + boss_fire_workers(-1); + TEST_ASSERT_EQUAL(2, total_workers); + + boss_hire_workers(18); + TEST_ASSERT_EQUAL(20, total_workers); + + boss_fire_workers(20); + TEST_ASSERT_EQUAL(0, total_workers); + + boss_fire_workers(5); + TEST_ASSERT_EQUAL(0, total_workers); +} + +void test_boss_can_MicroManageLikeABoss(void) +{ + /* An ever-increasing amount of work. this boss is kinda mean. */ + int i; + const int work_to_do[8] = { 1, 2, 3, 4, 5, 6, 7, 8 }; + + worker_start_over_Ignore(); + worker_work_Ignore(); + worker_progress_IgnoreAndReturn(1); + supervisor_progress_IgnoreAndReturn(36); + + for (i=0; i < 8; i++) + { + supervisor_delegate_IgnoreAndReturn(i % 4); + } + + /* assign all the hours */ + boss_hire_workers(4); + TEST_ASSERT_EQUAL_INT(36, boss_micro_manage(work_to_do, 8)); + + /* make sure everyone has work to do */ + for (i=0; i < 4; i++) + { + TEST_ASSERT_NOT_EQUAL_INT(0, hours_worked[i]); + } +} + +#endif diff --git a/tools/vendor/ceedling/plugins/dependencies/example/supervisor/project.yml b/tools/vendor/ceedling/plugins/dependencies/example/supervisor/project.yml new file mode 100644 index 00000000..57b3b1d8 --- /dev/null +++ b/tools/vendor/ceedling/plugins/dependencies/example/supervisor/project.yml @@ -0,0 +1,168 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + +--- +:project: + # how to use ceedling. If you're not sure, leave this as `gem` and `?` + :which_ceedling: ../../../.. + :ceedling_version: '?' + + # optional features. If you don't need them, keep them turned off for performance + :use_mocks: TRUE + :use_test_preprocessor: :all + :use_backtrace: :none + + # tweak the way ceedling handles automatic tasks + :build_root: build + :test_file_prefix: test_ + :default_tasks: + - test:all + + # performance options. If your tools start giving mysterious errors, consider + # dropping this to 1 to force single-tasking + :test_threads: 8 + :compile_threads: 8 + + # you can specify different yaml config files which modify the existing one + :options_paths: [] + + # enable release build (more details in release_build section below) + :release_build: TRUE + +# further details to configure the way Ceedling handles test code +:test_build: + :use_assembly: FALSE + +# further details to configure the way Ceedling handles release code +:release_build: + :output: libsupervisor.a + :use_assembly: FALSE + :artifacts: [] + +# Plugins are optional Ceedling features which can be enabled. Ceedling supports +# a variety of plugins which may effect the way things are compiled, reported, +# or may provide new command options. Refer to the readme in each plugin for +# details on how to use it. +:plugins: + :load_paths: [] + :enabled: + #- beep # beeps when finished, so you don't waste time waiting for ceedling + #- module_generator # handy for quickly creating source, header, and test templates + #- gcov # test coverage using gcov. Requires gcc, gcov, and a coverage analyzer like gcovr + #- bullseye # test coverage using bullseye. Requires bullseye for your platform + #- command_hooks # write custom actions to be called at different points during the build process + #- compile_commands_json # generate a compile_commands.json file + #- dependencies # automatically fetch 3rd party libraries, etc. + #- subprojects # managing builds and test for static libraries + #- fake_function_framework # use FFF instead of CMock + + # Report options (You'll want to choose one stdout option, but may choose multiple stored options if desired) + - report_tests_pretty_stdout + +# override the default extensions for your system and toolchain +:extension: + #:header: .h + #:source: .c + #:assembly: .s + #:dependencies: .d + #:object: .o + :executable: .a + #:testpass: .pass + #:testfail: .fail + #:subprojects: .a + +# This is where Ceedling should look for your source and test files. +# see documentation for the many options for specifying this. +:paths: + :test: + - ./test + :source: + - ./src + :include: + - ./src + :libraries: [] + +# You can even specify specific files to add or remove from your test +# and release collections. Usually it's better to use paths and let +# Ceedling do the work for you! +:files: + :test: [] + :source: [] + +# Compilation symbols to be injected into builds +# See documentation for advanced options: +# - Test name matchers for different symbols per test executable build +# - Referencing symbols in multiple lists using advanced YAML +# - Specifiying symbols used during test preprocessing +:defines: + :test: + - TEST # Simple list option to add symbol 'TEST' to compilation of all files in all test executables + :release: [] + + # Enable to inject name of a test as a unique compilation symbol into its respective executable build. + :use_test_definition: FALSE + +# Configure additional command line flags provided to tools used in each build step +# :flags: +# :release: +# :compile: # Add '-Wall' and '--02' to compilation of all files in release target +# - -Wall +# - --O2 +# :test: +# :compile: +# '(_|-)special': # Add '-pedantic' to compilation of all files in all test executables with '_special' or '-special' in their names +# - -pedantic +# '*': # Add '-foo' to compilation of all files in all test executables +# - -foo + +# Configuration Options specific to CMock. See CMock docs for details +:cmock: + :mock_prefix: mock_ + :when_no_prototypes: :warn + :enforce_strict_ordering: TRUE + :plugins: + - :ignore + - :callback + :treat_as: + uint8: HEX8 + uint16: HEX16 + uint32: UINT32 + int8: INT8 + bool: UINT8 + +# Configuration options specific to Unity. +:unity: + :defines: + - UNITY_EXCLUDE_FLOAT + +# You can optionally have ceedling create environment variables for you before +# performing the rest of its tasks. +:environment: [] + +# LIBRARIES +# These libraries are automatically injected into the build process. Those specified as +# common will be used in all types of builds. Otherwise, libraries can be injected in just +# tests or releases. These options are MERGED with the options in supplemental yaml files. +:libraries: + :placement: :end + :flag: "-l${1}" + :path_flag: "-L ${1}" + :system: [] # for example, you might list 'm' to grab the math library + :test: [] + :release: [] + +# Override the default linker tool to build a static library release instead of +# as executable. woo! +:tools: + :release_linker: + :name: library linker + :executable: as + :arguments: + - "\"${1}\"" + - "${5}" + - "-o \"${2}\"" + - "${4}" diff --git a/tools/vendor/ceedling/plugins/dependencies/example/supervisor/src/supervisor.c b/tools/vendor/ceedling/plugins/dependencies/example/supervisor/src/supervisor.c new file mode 100644 index 00000000..81e678bc --- /dev/null +++ b/tools/vendor/ceedling/plugins/dependencies/example/supervisor/src/supervisor.c @@ -0,0 +1,45 @@ +/* ========================================================================= + Ceedling - Test-Centered Build System for C + ThrowTheSwitch.org + Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams + SPDX-License-Identifier: MIT +========================================================================= */ + +#include "supervisor.h" + +int supervisor_delegate(int* worker_loads, int num_workers) +{ + int i; + int most_bored_id = 0; + int most_bored_hours = 999999; + + if ((num_workers < 0) || (worker_loads == 0)) + return -1; + + for (i=0; i < num_workers; i++) + { + if (worker_loads[i] < most_bored_hours) + { + most_bored_hours = worker_loads[i]; + most_bored_id = i; + } + } + + return most_bored_id; +} + +int supervisor_progress(int* worker_loads, int num_workers) +{ + int i; + int total_hours = 0; + + if (worker_loads == 0) + return 0; + + for (i=0; i < num_workers; i++) + { + total_hours += worker_loads[i]; + } + + return total_hours; +} diff --git a/tools/vendor/ceedling/plugins/dependencies/example/supervisor/src/supervisor.h b/tools/vendor/ceedling/plugins/dependencies/example/supervisor/src/supervisor.h new file mode 100644 index 00000000..789ac76f --- /dev/null +++ b/tools/vendor/ceedling/plugins/dependencies/example/supervisor/src/supervisor.h @@ -0,0 +1,14 @@ +/* ========================================================================= + Ceedling - Test-Centered Build System for C + ThrowTheSwitch.org + Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams + SPDX-License-Identifier: MIT +========================================================================= */ + +#ifndef SUPERVISOR_H +#define SUPERVISOR_H + +int supervisor_delegate(int* worker_loads, int num_workers); +int supervisor_progress(int* worker_loads, int num_workers); + +#endif diff --git a/tools/vendor/ceedling/plugins/dependencies/example/supervisor/test/test_supervisor.c b/tools/vendor/ceedling/plugins/dependencies/example/supervisor/test/test_supervisor.c new file mode 100644 index 00000000..1590a537 --- /dev/null +++ b/tools/vendor/ceedling/plugins/dependencies/example/supervisor/test/test_supervisor.c @@ -0,0 +1,58 @@ +/* ========================================================================= + Ceedling - Test-Centered Build System for C + ThrowTheSwitch.org + Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams + SPDX-License-Identifier: MIT +========================================================================= */ + +#ifdef TEST + +#include "unity.h" + +#include "supervisor.h" + +void setUp(void) +{ +} + +void tearDown(void) +{ +} + +void test_supervisor_can_DelegateProperlyToLeastBusyWorker(void) +{ + int loads1[] = { 1, 2, 3, 4 }; + int loads2[] = { 2, 1, 3, 4 }; + int loads3[] = { 2, 1, 0, 8 }; + int loads4[] = { 9, 9, 7, 0 }; + int loads5[] = { 0, 0, 1, 4 }; + + TEST_ASSERT_EQUAL(0, supervisor_delegate(loads1, 2)); + TEST_ASSERT_EQUAL(0, supervisor_delegate(loads1, 4)); + TEST_ASSERT_EQUAL(1, supervisor_delegate(loads2, 4)); + TEST_ASSERT_EQUAL(2, supervisor_delegate(loads3, 4)); + TEST_ASSERT_EQUAL(2, supervisor_delegate(loads3, 3)); + TEST_ASSERT_EQUAL(3, supervisor_delegate(loads4, 4)); + TEST_ASSERT_EQUAL(0, supervisor_delegate(loads5, 4)); + TEST_ASSERT_EQUAL(0, supervisor_delegate(loads5, 2)); +} + +void test_supervisor_can_TrackProgressProperlyAcrossAllWorkers(void) +{ + int loads1[] = { 1, 2, 3, 4 }; + int loads2[] = { 2, 1, 3, 4 }; + int loads3[] = { 2, 1, 0, 8 }; + int loads4[] = { 9, 9, 7, 0 }; + int loads5[] = { 0, 0, 1, 4 }; + + TEST_ASSERT_EQUAL(3, supervisor_progress(loads1, 2)); + TEST_ASSERT_EQUAL(10, supervisor_progress(loads1, 4)); + TEST_ASSERT_EQUAL(10, supervisor_progress(loads2, 4)); + TEST_ASSERT_EQUAL(11, supervisor_progress(loads3, 4)); + TEST_ASSERT_EQUAL(3, supervisor_progress(loads3, 3)); + TEST_ASSERT_EQUAL(25, supervisor_progress(loads4, 4)); + TEST_ASSERT_EQUAL(5, supervisor_progress(loads5, 4)); + TEST_ASSERT_EQUAL(0, supervisor_progress(loads5, 2)); +} + +#endif diff --git a/tools/vendor/ceedling/plugins/dependencies/example/version.tar.gzip b/tools/vendor/ceedling/plugins/dependencies/example/version.tar.gzip new file mode 100644 index 0000000000000000000000000000000000000000..d2f5868bd6a28268579472588793143f4b90ccfb GIT binary patch literal 577 zcmV-H0>1qpiwFQ->*r+v1MQa2ZqqOv#{&q^EFo@OxLB=_fP-ttPO_-#p<@xLwzea! zDmYb9;ms7c$Bz8h7wNP$me1b$HHG# zPgd*ou4w1HD{ztC6z)E{uiRFYy6eGa3%-VP(mZ8Hnkwy!wDkMz@0zT(+s^zo{o|7~ zd#TE;i~NUP93uDRWXMtIdPA9cPx*fE@$ADB`|IZ)-yT1p?wx<{X3lDk+^Nl7x$sNg zSO^{^ejqmOW1apPS=PTH9|cY~9mp!ST>liqFbP6lkz;P^rm?%LBb}&3H?e5~LMc3~ z?Nyx@cCBNfshcDM{jS%_UVr~piy2=3v{M@$9J9BBQKPO}`_&Br2-aXr25|UhbpV^% zF2H6-_GW-e+51?h|5Pta=RY%|5+J;B9Hvws^QAH9$e_(%go0*{i}=pU+x4tndv{h|K COLLECTION_PATHS_INCLUDE, :collection_all_headers => COLLECTION_ALL_HEADERS, } - @ceedling[DEPENDENCIES_SYM].get_include_directories_for_dependency(deplib).each do |incpath| - updates[:collection_paths_include] << incpath - Dir[ File.join(incpath, "*#{EXTENSION_HEADER}") ].each do |f| - updates[:collection_all_headers] << f + DEPENDENCIES_DEPS.each do |deplib| + @ceedling[DEPENDENCIES_SYM].get_include_directories_for_dependency(deplib).each do |incpath| + updates[:collection_paths_include] << incpath + end + + @ceedling[DEPENDENCIES_SYM].get_include_files_for_dependency(deplib).each do |inc| + updates[:collection_all_headers] << inc end end - return updates + updates end def get_name(deplib) - raise "Each dependency must have a name!" if deplib[:name].nil? + raise CeedlingException.new( "Each dependency must have a name!" ) if deplib[:name].nil? return deplib[:name].gsub(/\W*/,'') end + def get_fetch_path(deplib) + if deplib.include? :paths + return deplib[:paths][:fetch] || deplib[:paths][:source] || File.join('dependencies', get_name(deplib)) + else + return File.join('dependencies', get_name(deplib)) + end + end + def get_source_path(deplib) - return deplib[:source_path] || File.join('dependencies', get_name(deplib)) + if deplib.include? :paths + return deplib[:paths][:source] || deplib[:paths][:fetch] || File.join('dependencies', get_name(deplib)) + else + return File.join('dependencies', get_name(deplib)) + end end def get_build_path(deplib) - return deplib[:build_path] || deplib[:source_path] || File.join('dependencies', get_name(deplib)) + if deplib.include? :paths + return deplib[:paths][:build] || deplib[:paths][:source] || deplib[:paths][:fetch] || File.join('dependencies', get_name(deplib)) + else + return File.join('dependencies', get_name(deplib)) + end end def get_artifact_path(deplib) - return deplib[:artifact_path] || deplib[:source_path] || File.join('dependencies', get_name(deplib)) + if deplib.include? :paths + return deplib[:paths][:artifact] || deplib[:paths][:build] || File.join('dependencies', get_name(deplib)) + else + return File.join('dependencies', get_name(deplib)) + end end - def get_working_paths(deplib) - paths = [deplib[:source_path], deplib[:build_path], deplib[:artifact_paths]].compact.uniq + def get_working_paths(deplib, artifact_only=false) + paths = if deplib.include?(:paths) + if artifact_only + [deplib[:paths][:artifact]].compact.uniq + else + deplib[:paths].values.compact.uniq + end + else + [] + end paths = [ File.join('dependencies', get_name(deplib)) ] if (paths.empty?) return paths end @@ -80,13 +121,25 @@ def get_source_files_for_dependency(deplib) end def get_include_directories_for_dependency(deplib) - paths = (deplib[:artifacts][:includes] || []).map {|path| File.join(get_artifact_path(deplib), path)} - @ceedling[:file_system_utils].collect_paths(paths) + paths = (deplib[:artifacts][:includes] || []).map do |path| + if (path =~ /.*\.h$/) + path.split(/[\/\\]/)[0..-2] + elsif (path =~ /(?:^\+:)|(?:^-:)|(?:\*\*)/) + @ceedling[:file_path_collection_utils].collect_paths([path]) + else + path + end + end + return paths.map{|path| File.join(get_artifact_path(deplib), path) }.uniq + end + + def get_include_files_for_dependency(deplib) + (deplib[:artifacts][:includes] || []).map {|path| File.join(get_artifact_path(deplib), path)} end def set_env_if_required(lib_path) blob = @dependencies[lib_path] - raise "Could not find dependency '#{lib_path}'" if blob.nil? + raise CeedlingException.new( "Could not find dependency '#{lib_path}'" ) if blob.nil? return if (blob[:environment].nil?) return if (blob[:environment].empty?) @@ -105,44 +158,126 @@ def set_env_if_required(lib_path) end end + def generate_command_line(cmdline, name=nil) + # Break apart command line at white spaces + cmdline_items = cmdline.split(/\s+/) + + # Even though it may seem redundant to build a command line we already have, + # we do so for possible argument expansion/substitution and, more importantly, logging output. + + # Construct a tool configuration + tool_config = { + # Use tool name if provided, otherwise, grab something from the command line + :name => name.nil? ? cmdline_items[0] : name, + + # Extract executable as first item on the command line + :executable => cmdline_items[0], + + # Extract remaining arguments if there are any + :arguments => (cmdline_items.length > 1) ? cmdline_items[1..-1] : [] + } + + # Construct a command from our tool configuration + command = @ceedling[:tool_executor].build_command_line( tool_config, [] ) + + return command + end + def fetch_if_required(lib_path) blob = @dependencies[lib_path] - raise "Could not find dependency '#{lib_path}'" if blob.nil? - return if (blob[:fetch].nil?) - return if (blob[:fetch][:method].nil?) - return if (directory(blob[:source_path]) && !Dir.empty?(blob[:source_path])) - - steps = case blob[:fetch][:method] - when :none - return - when :zip - [ "gzip -d #{blob[:fetch][:source]}" ] - when :git - branch = blob[:fetch][:tag] || blob[:fetch][:branch] || '' - branch = ("-b " + branch) unless branch.empty? - unless blob[:fetch][:hash].nil? - # Do a deep clone to ensure the commit we want is available - retval = [ "git clone #{branch} #{blob[:fetch][:source]} ." ] - # Checkout the specified commit - retval << "git checkout #{blob[:fetch][:hash]}" - else - # Do a thin clone - retval = [ "git clone #{branch} --depth 1 #{blob[:fetch][:source]} ." ] - end - when :svn - revision = blob[:fetch][:revision] || '' - revision = ("--revision " + branch) unless branch.empty? - retval = [ "svn checkout #{revision} #{blob[:fetch][:source]} ." ] - retval - when :custom - blob[:fetch][:executable] - else - raise "Unknown fetch method '#{blob[:fetch][:method]}' for dependency '#{blob[:name]}'" - end + + raise CeedlingException.new( "Could not find dependency '#{lib_path}'" ) if blob.nil? + + if (blob[:fetch].nil?) || (blob[:fetch][:method].nil?) + @ceedling[:loginator].log("No fetch method for dependency '#{blob[:name]}'", Verbosity::COMPLAIN) + return + end + + unless (directory(get_source_path(blob))) + @ceedling[:loginator].log("Path #{get_source_path(blob)} is required", Verbosity::COMPLAIN) + return + end + + FileUtils.mkdir_p(get_fetch_path(blob)) unless File.exist?(get_fetch_path(blob)) + + steps = [] + + # Tools already validated within `setup()` + case blob[:fetch][:method] + when :none + # Do nothing + + when :zip + steps << + @ceedling[:tool_executor].build_command_line( + TOOLS_DEPS_ZIP, + [], + blob[:fetch][:source] + ) + + when :tar_gzip + steps << + @ceedling[:tool_executor].build_command_line( + TOOLS_DEPS_TARGZIP, + [], + blob[:fetch][:source] + ) + + when :git + branch = blob[:fetch][:tag] || blob[:fetch][:branch] || '' + branch = '-b ' + branch unless branch.empty? + + unless blob[:fetch][:hash].nil? + # Do a deep clone to ensure the commit we want is available + steps << + @ceedling[:tool_executor].build_command_line( + TOOLS_DEPS_GIT_CLONE, + [], + branch, + '', # No depth + blob[:fetch][:source] + ) + + # Checkout the specified commit + steps << + @ceedling[:tool_executor].build_command_line( + TOOLS_DEPS_GIT_CHECKOUT, + [], + blob[:fetch][:hash] + ) + else + # Do a thin clone + steps << + @ceedling[:tool_executor].build_command_line( + TOOLS_DEPS_GIT_CLONE, + [], + branch, + '--depth 1', + blob[:fetch][:source] + ) + end + + when :svn + revision = blob[:fetch][:revision] || '' + revision = '--revision ' + revision unless revision.empty? + + steps << + @ceedling[:tool_executor].build_command_line( + TOOLS_DEPS_SUBVERSION, + [], + revision, + blob[:fetch][:source] + ) + + when :custom + blob[:fetch][:executable].each.with_index(1) do |cmdline, index| + steps << generate_command_line( cmdline, "Dependencies custom command \##{index}" ) + end + end # Perform the actual fetching - @ceedling[:streaminator].stdout_puts("Fetching dependency #{blob[:name]}...", Verbosity::NORMAL) - Dir.chdir(get_source_path(blob)) do + @ceedling[:loginator].log("Fetching dependency #{blob[:name]}...", Verbosity::NORMAL) + Dir.chdir(get_fetch_path(blob)) do steps.each do |step| @ceedling[:tool_executor].exec( step ) end @@ -151,72 +286,87 @@ def fetch_if_required(lib_path) def build_if_required(lib_path) blob = @dependencies[lib_path] - raise "Could not find dependency '#{lib_path}'" if blob.nil? + raise CeedlingException.new( "Could not find dependency '#{lib_path}'" ) if blob.nil? # We don't clean anything unless we know how to fetch a new copy if (blob[:build].nil? || blob[:build].empty?) - @ceedling[:streaminator].stdout_puts("Nothing to build for dependency #{blob[:name]}", Verbosity::NORMAL) + @ceedling[:loginator].log("Nothing to build for dependency #{blob[:name]}", Verbosity::NORMAL) return end + FileUtils.mkdir_p(get_source_path(blob)) unless File.exist?(get_source_path(blob)) + FileUtils.mkdir_p(get_artifact_path(blob)) unless File.exist?(get_artifact_path(blob)) + # Perform the build - @ceedling[:streaminator].stdout_puts("Building dependency #{blob[:name]}...", Verbosity::NORMAL) - Dir.chdir(get_build_path(blob)) do + @ceedling[:loginator].log("Building dependency #{blob[:name]}...", Verbosity::NORMAL) + Dir.chdir(get_source_path(blob)) do blob[:build].each do |step| - @ceedling[:tool_executor].exec( step ) + if (step.class == Symbol) + exec_dependency_builtin_command(step, blob) + else + @ceedling[:tool_executor].exec( generate_command_line(step) ) + end end end end def clean_if_required(lib_path) blob = @dependencies[lib_path] - raise "Could not find dependency '#{lib_path}'" if blob.nil? + raise CeedlingException.new( "Could not find dependency '#{lib_path}'" ) if blob.nil? # We don't clean anything unless we know how to fetch a new copy - if (blob[:fetch].nil? || blob[:fetch][:method].nil? || (blob[:fetch][:method] == :none)) - @ceedling[:streaminator].stdout_puts("Nothing to clean for dependency #{blob[:name]}", Verbosity::NORMAL) + if (blob[:fetch].nil? || blob[:fetch][:method].nil?) + @ceedling[:loginator].log("Nothing to clean for dependency #{blob[:name]}", Verbosity::NORMAL) return end + # We only need to clean the artifacts if the source isn't being fetched + artifacts_only = (blob[:fetch][:method] == :none) + # Perform the actual Cleaning - @ceedling[:streaminator].stdout_puts("Cleaning dependency #{blob[:name]}...", Verbosity::NORMAL) - get_working_paths(blob).each do |path| + @ceedling[:loginator].log("Cleaning dependency #{blob[:name]}...", Verbosity::NORMAL) + get_working_paths(blob, artifacts_only).each do |path| FileUtils.rm_rf(path) if File.directory?(path) end end def deploy_if_required(lib_path) blob = @dependencies[lib_path] - raise "Could not find dependency '#{lib_path}'" if blob.nil? + raise CeedlingException.new( "Could not find dependency '#{lib_path}'" ) if blob.nil? # We don't need to deploy anything if there isn't anything to deploy - if (blob[:artifacts].nil? || blob[:artifacts][:dynamic_libraries].nil? || blob[:artifacts][:dynamic_libraries].empty?) - @ceedling[:streaminator].stdout_puts("Nothing to deploy for dependency #{blob[:name]}", Verbosity::NORMAL) + if (blob[:artifacts].nil? || blob[:artifacts][:dynamic_libraries].nil? || blob[:artifacts][:dynamic_libraries].empty?) + @ceedling[:loginator].log("Nothing to deploy for dependency #{blob[:name]}", Verbosity::NORMAL) return end # Perform the actual Deploying - @ceedling[:streaminator].stdout_puts("Deploying dependency #{blob[:name]}...", Verbosity::NORMAL) + @ceedling[:loginator].log("Deploying dependency #{blob[:name]}...", Verbosity::NORMAL) FileUtils.cp( lib_path, File.dirname(PROJECT_RELEASE_BUILD_TARGET) ) end def add_headers_and_sources() # Search for header file paths and files to add to our collections - DEPENDENCIES_LIBRARIES.each do |deplib| + cfg = @ceedling[:configurator].project_config_hash + + DEPENDENCIES_DEPS.each do |deplib| get_include_directories_for_dependency(deplib).each do |header| - cfg = @ceedling[:configurator].project_config_hash cfg[:collection_paths_include] << header cfg[:collection_paths_source_and_include] << header cfg[:collection_paths_test_support_source_include] << header cfg[:collection_paths_test_support_source_include_vendor] << header cfg[:collection_paths_release_toolchain_include] << header - Dir[ File.join(header, "*#{EXTENSION_HEADER}") ].each do |f| - cfg[:collection_all_headers] << f - end + end + + get_include_files_for_dependency(deplib).each do |header| + cfg[:collection_all_headers] << header + + cfg[:files] ||= {} + cfg[:files][:include] ||= [] + cfg[:files][:include] << header end get_source_files_for_dependency(deplib).each do |source| - cfg = @ceedling[:configurator].project_config_hash cfg[:collection_paths_source_and_include] << source cfg[:collection_paths_test_support_source_include] << source cfg[:collection_paths_test_support_source_include_vendor] << source @@ -226,12 +376,152 @@ def add_headers_and_sources() end end end + end + + def exec_dependency_builtin_command(step, blob) + case step + when :build_lib # We are going to use our defined deps tools to build this library + build_lib(blob) + else + raise CeedlingException.new( "No such build action as #{step.inspect} for dependency #{blob[:name]}" ) + end + end + + def build_lib(blob) + src = [] + asm = [] + hdr = [] + obj = [] + + name = blob[:name] || "" + source_path = Pathname.new get_source_path(blob) + build_path = Pathname.new get_build_path(blob) + relative_build_path = build_path.relative_path_from(source_path) + + # Verify there is an artifact that we're building that makes sense + libs = [] + raise CeedlingException.new( "No library artifacts specified for dependency #{name}" ) unless blob.include?(:artifacts) + libs += blob[:artifacts][:static_libraries] if blob[:artifacts].include?(:static_libraries) + libs += blob[:artifacts][:static_libraries] if blob[:artifacts].include?(:static_libraries) + libs = libs.flatten.uniq + raise CeedlingException.new( "No library artifacts specified for dependency #{name}" ) if libs.empty? + lib = libs[0] + + # Find all the source, header, and assembly files + src = Dir["./**/*#{EXTENSION_SOURCE}"] + hdr = Dir["./**/*#{EXTENSION_HEADER}"].map{|f| File.dirname(f) }.uniq + if (EXTENSION_ASSEMBLY && !EXTENSION_ASSEMBLY.empty?) + asm = Dir["./**/*#{EXTENSION_ASSEMBLY}"] + end + + # Do we have what we need to do this? + raise CeedlingException.new( "Nothing to build" ) if (asm.empty? and src.empty?) + raise CeedlingException.new( "No assembler specified for building dependency #{name}" ) unless (defined?(TOOLS_DEPS_ASSEMBLER) || asm.empty?) + raise CeedlingException.new( "No compiler specified for building dependency #{name}" ) unless (defined?(TOOLS_DEPS_COMPILER) || src.empty?) + raise CeedlingException.new( "No linker specified for building dependency #{name}" ) unless defined?(TOOLS_DEPS_LINKER) + + # Build all the source files + src.each do |src_file| + object_file = relative_build_path + File.basename(src_file).ext(EXTENSION_OBJECT) + @ceedling[DEPENDENCIES_SYM].replace_constant(:COLLECTION_PATHS_DEPS, find_my_paths(src_file, blob)) + @ceedling[DEPENDENCIES_SYM].replace_constant(:COLLECTION_DEFINES_DEPS, find_my_defines(src_file, blob)) + @ceedling[:generator].generate_object_file_c( + tool: TOOLS_DEPS_COMPILER, + module_name: File.basename(src_file).ext(), + context: DEPENDENCIES_SYM, + source: src_file, + object: object_file, + search_paths: hdr, + flags: (blob[:flags] || []), + defines: (blob[:defines] || []), + list: @ceedling[:file_path_utils].form_release_build_list_filepath( File.basename(src_file,EXTENSION_OBJECT) ) + ) + obj << object_file + end + + # Build all the assembly files + asm.each do |src_file| + object_file = relative_build_path + File.basename(src_file).ext(EXTENSION_OBJECT) + @ceedling[DEPENDENCIES_SYM].replace_constant(:COLLECTION_PATHS_DEPS, find_my_paths(src_file, blob)) + @ceedling[DEPENDENCIES_SYM].replace_constant(:COLLECTION_DEFINES_DEPS, find_my_defines(src_file, blob)) + @ceedling[:generator].generate_object_file_asm( + tool: TOOLS_DEPS_ASSEMBLER, + module_name: File.basename(src_file).ext(), + context: DEPENDENCIES_SYM, + source: src_file, + object: object_file + ) + obj << object_file + end - # Make all these updated files findable by Ceedling - @ceedling[:file_finder].prepare_search_sources() + # Link the library + @ceedling[:generator].generate_executable_file( + TOOLS_DEPS_LINKER, + DEPENDENCIES_SYM, + obj, + [], + relative_build_path+lib, + @ceedling[:file_path_utils].form_test_build_map_filepath(get_artifact_path(blob),lib), + (blob[:libraries] || []), + (blob[:libpaths] || []) + ) + + # Move the library to the specifed artifact folder + unless get_build_path(blob) == get_artifact_path(blob) + src = File.expand_path(lib) + dst = File.expand_path(get_artifact_path(blob), Array.new(get_build_path(blob).split(/[\\\/]+/).length,"../").join()) + "/" + lib + FileUtils.cp_r(src, dst) + end + end + + def find_my_paths( c_file, blob, file_type = :c ) + return ((blob[:source] || []) + (blob[:include] || [])).compact.uniq + end + + def find_my_defines( c_file, blob, file_type = :c ) + return (blob[:defines] || []).compact.uniq + end + + def replace_constant(constant, new_value) + Object.send(:remove_const, constant.to_sym) if (Object.const_defined? constant) + Object.const_set(constant, new_value) end + + ### Private ### + + private + + def validate_fetch_tools(blob) + return if blob[:fetch].nil? || blob[:fetch][:method].nil? + + case blob[:fetch][:method] + when :none + # Do nothing + + when :zip + @ceedling[:tool_validator].validate( tool:TOOLS_DEPS_ZIP, boom:true ) + + when :tar_gzip + @ceedling[:tool_validator].validate( tool:TOOLS_DEPS_TARGZIP, boom:true ) + + when :git + @ceedling[:tool_validator].validate( tool:TOOLS_DEPS_GIT_CLONE, boom:true ) + @ceedling[:tool_validator].validate( tool:TOOLS_DEPS_GIT_CHECKOUT, boom: true ) + + when :svn + @ceedling[:tool_validator].validate( tool:TOOLS_DEPS_SUBVERSION, boom: true ) + + when :custom + # Do nothing + + else + raise CeedlingException.new( "Unknown fetch method '#{blob[:fetch][:method]}' for dependency '#{blob[:name]}'" ) + end + end + end + # end blocks always executed following rake run END { } diff --git a/tools/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/project.yml b/tools/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/project.yml deleted file mode 100644 index 6bda2229..00000000 --- a/tools/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/project.yml +++ /dev/null @@ -1,71 +0,0 @@ ---- - -# Notes: -# Sample project C code is not presently written to produce a release artifact. -# As such, release build options are disabled. -# This sample, therefore, only demonstrates running a collection of unit tests. - -:project: - :use_exceptions: FALSE - :use_test_preprocessor: TRUE - :use_auxiliary_dependencies: TRUE - :build_root: build -# :release_build: TRUE - :test_file_prefix: test_ - -#:release_build: -# :output: MyApp.out -# :use_assembly: FALSE - -:environment: - -:extension: - :executable: .out - -:paths: - :test: - - +:test/** - :source: - - src/** - :support: - -:defines: - # in order to add common defines: - # 1) remove the trailing [] from the :common: section - # 2) add entries to the :common: section (e.g. :test: has TEST defined) - :commmon: &common_defines [] - :test: - - *common_defines - - TEST - :test_preprocess: - - *common_defines - - TEST - -:cmock: - :mock_prefix: mock_ - :when_no_prototypes: :warn - :enforce_strict_ordering: TRUE - :plugins: - - :ignore - - :callback - :treat_as: - uint8: HEX8 - uint16: HEX16 - uint32: UINT32 - int8: INT8 - bool: UINT8 - -#:tools: -# Ceedling defaults to using gcc for compiling, linking, etc. -# As [:tools] is blank, gcc will be used (so long as it's in your system path) -# See documentation to configure a given toolchain for use - -:plugins: - :load_paths: - # This change from the default is for running Ceedling out of another folder. - - ../../../../plugins - :enabled: - - stdout_pretty_tests_report - - module_generator - - fake_function_framework -... diff --git a/tools/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/rakefile.rb b/tools/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/rakefile.rb deleted file mode 100644 index e484d5fb..00000000 --- a/tools/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/rakefile.rb +++ /dev/null @@ -1,7 +0,0 @@ -# This change from the default is for running Ceedling out of another folder. -PROJECT_CEEDLING_ROOT = "../../../.." -load "#{PROJECT_CEEDLING_ROOT}/lib/ceedling.rb" - -Ceedling.load_project - -task :default => %w[ test:all release ] diff --git a/tools/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/src/bar.c b/tools/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/src/bar.c deleted file mode 100644 index 6a403234..00000000 --- a/tools/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/src/bar.c +++ /dev/null @@ -1 +0,0 @@ -#include "bar.h" diff --git a/tools/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/src/custom_types.h b/tools/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/src/custom_types.h deleted file mode 100644 index b426b32c..00000000 --- a/tools/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/src/custom_types.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef custom_types_H -#define custom_types_H - -typedef int custom_t; - -#endif diff --git a/tools/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/src/display.c b/tools/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/src/display.c deleted file mode 100644 index 2f03449b..00000000 --- a/tools/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/src/display.c +++ /dev/null @@ -1,7 +0,0 @@ -#include -#include "display.h" - -void display_turnOffStatusLed(void) -{ - printf("Display: Status LED off"); -} \ No newline at end of file diff --git a/tools/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/src/foo.c b/tools/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/src/foo.c deleted file mode 100644 index c05b1154..00000000 --- a/tools/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/src/foo.c +++ /dev/null @@ -1,16 +0,0 @@ -#include "foo.h" -#include "bar.h" -#include "subfolder/zzz.h" - -void foo_turn_on(void) { - bar_turn_on(); - zzz_sleep(1, "sleepy"); -} - -void foo_print_message(const char * message) { - bar_print_message(message); -} - -void foo_print_special_message(void) { - bar_print_message_formatted("The numbers are %d, %d and %d", 1, 2, 3); -} diff --git a/tools/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/src/foo.h b/tools/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/src/foo.h deleted file mode 100644 index 3fea6994..00000000 --- a/tools/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/src/foo.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef foo_H -#define foo_H - -void foo_turn_on(void); -void foo_print_message(const char * message); -void foo_print_special_message(void); - -#endif // foo_H diff --git a/tools/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/src/subfolder/zzz.c b/tools/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/src/subfolder/zzz.c deleted file mode 100644 index 85f370e1..00000000 --- a/tools/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/src/subfolder/zzz.c +++ /dev/null @@ -1 +0,0 @@ -#include "zzz.h" diff --git a/tools/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/src/subfolder/zzz.h b/tools/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/src/subfolder/zzz.h deleted file mode 100644 index 32c52940..00000000 --- a/tools/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/src/subfolder/zzz.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef zzz_H -#define zzz_H - -int zzz_sleep(int time, char * name); - -#endif // zzz_H diff --git a/tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/examples/driver_testing/driver.h b/tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/examples/driver_testing/driver.h deleted file mode 100644 index b7406d41..00000000 --- a/tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/examples/driver_testing/driver.h +++ /dev/null @@ -1,11 +0,0 @@ - -#ifndef DRIVER -#define DRIVER - -#include - -void driver_write(uint8_t val); -uint8_t driver_read(); -void driver_init_device(); - -#endif /*include guard*/ diff --git a/tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/examples/embedded_ui/DISPLAY.h b/tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/examples/embedded_ui/DISPLAY.h deleted file mode 100644 index 45ca62e7..00000000 --- a/tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/examples/embedded_ui/DISPLAY.h +++ /dev/null @@ -1,17 +0,0 @@ -/* - * DISPLAY.h - * - * Created on: Dec 17, 2010 - * Author: mlong - */ - -#ifndef DISPLAY_H_ -#define DISPLAY_H_ - -void DISPLAY_init(); -void DISPLAY_clear(); -unsigned int DISPLAY_get_line_capacity(); -unsigned int DISPLAY_get_line_insert_index(); -void DISPLAY_output(char * message); - -#endif /* DISPLAY_H_ */ diff --git a/tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/examples/embedded_ui/SYSTEM.h b/tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/examples/embedded_ui/SYSTEM.h deleted file mode 100644 index 080144fc..00000000 --- a/tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/examples/embedded_ui/SYSTEM.h +++ /dev/null @@ -1,21 +0,0 @@ -/* - * DISPLAY.h - * - * Created on: Dec 17, 2010 - * Author: mlong - */ - -#ifndef SYSTEM_H_ -#define SYSTEM_H_ - -typedef void (*irq_func_t)(void); - -#define IRQ_GPIO_0 0x70 -#define IRQ_GPIO_1 0x71 -#define IRQ_GPIO_2 0x72 -#define IRQ_GPIO_3 0x73 - - -void SYSTEM_register_irq(irq_func_t, unsigned int irq); - -#endif /* SYSTEM_H_ */ diff --git a/tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/examples/embedded_ui/UI.h b/tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/examples/embedded_ui/UI.h deleted file mode 100644 index 8a3fb5c5..00000000 --- a/tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/examples/embedded_ui/UI.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef UI_H_ -#define UI_H_ - -typedef void (*button_cbk_t)(void); - -void UI_init(); -unsigned int UI_get_missed_irqs(); -void UI_button_irq_handler(); -void UI_register_button_cbk(button_cbk_t cbk); -void UI_write_line(char *line); - -#endif /* UI_H_ */ diff --git a/tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/test/fff_test_global_cpp.cpp b/tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/test/fff_test_global_cpp.cpp deleted file mode 100644 index dfe1e88d..00000000 --- a/tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/test/fff_test_global_cpp.cpp +++ /dev/null @@ -1,23 +0,0 @@ - -extern "C"{ - #include "global_fakes.h" -} -#include - -DEFINE_FFF_GLOBALS; - -class FFFTestSuite: public testing::Test -{ -public: - void SetUp() - { - RESET_FAKE(voidfunc1); - RESET_FAKE(voidfunc2); - RESET_FAKE(longfunc0); - FFF_RESET_HISTORY(); - } -}; - -#include "test_cases.include" - - diff --git a/tools/vendor/ceedling/plugins/fake_function_framework/README.md b/tools/vendor/ceedling/plugins/fff/README.md similarity index 85% rename from tools/vendor/ceedling/plugins/fake_function_framework/README.md rename to tools/vendor/ceedling/plugins/fff/README.md index 8042775e..69295629 100644 --- a/tools/vendor/ceedling/plugins/fake_function_framework/README.md +++ b/tools/vendor/ceedling/plugins/fff/README.md @@ -2,37 +2,27 @@ This is a plug-in for [Ceedling](https://github.com/ThrowTheSwitch/Ceedling) to use the [Fake Function Framework](https://github.com/meekrosoft/fff) for mocking instead of CMock. -Using fff provides less strict mocking than CMock, and allows for more loosely-coupled tests. -And, when tests fail -- since you get the actual line number of the failure -- it's a lot easier to figure out what went wrong. +Using fff provides less strict mocking than CMock, and can allow for more loosely-coupled tests. -## Installing the plug-in +### Thanks -To use the plugin you need to 1) get the contents of this repo and 2) configure your project to use it. - -### Get the source - -The easiest way to get the source is to just clone this repo into the Ceedling plugin folder for your existing Ceedling project. -(Don't have a Ceedling project already? [Here are instructions to create one.](http://www.electronvector.com/blog/try-embedded-test-driven-development-right-now-with-ceedling)) -From within `/vendor/ceedling/plugins`, run: - -`git clone https://github.com/ElectronVector/fake_function_framework.git` - -This will create a new folder named `fake_function_framework` in the plugins folder. +A special thanks to [Matt Chernosky](http://www.electronvector.com) for developing this plugin originally. It's a well-loved piece of the Ceedling +ecosystem and we really appreciate his support through the years. ### Enable the plug-in. The plug-in is enabled from within your project.yml file. -In the `:plugins` configuration, add `fake_function_framework` to the list of enabled plugins: +In the `:plugins` configuration, add `fff` to the list of enabled plugins: ```yaml :plugins: :load_paths: - vendor/ceedling/plugins :enabled: - - stdout_pretty_tests_report + - report_tests_pretty_stdout - module_generator - - fake_function_framework + - fff ``` *Note that you could put the plugin source in some other loaction. In that case you'd need to add a new path the `:load_paths`.* @@ -40,7 +30,7 @@ In that case you'd need to add a new path the `:load_paths`.* ## How to use it You use fff with Ceedling the same way you used to use CMock. -Modules can still be generated with the default module generator: `rake module:create[my_module]`. + If you want to "mock" `some_module.h` in your tests, just `#include "mock_some_module.h"`. This creates a fake function for each of the functions defined in `some_module.h`. diff --git a/tools/vendor/ceedling/plugins/fake_function_framework/Rakefile b/tools/vendor/ceedling/plugins/fff/Rakefile similarity index 50% rename from tools/vendor/ceedling/plugins/fake_function_framework/Rakefile rename to tools/vendor/ceedling/plugins/fff/Rakefile index bc559411..52075367 100644 --- a/tools/vendor/ceedling/plugins/fake_function_framework/Rakefile +++ b/tools/vendor/ceedling/plugins/fff/Rakefile @@ -1,3 +1,10 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + require 'rake' require 'rspec/core/rake_task' @@ -11,8 +18,8 @@ end desc "Run integration test on example" task :integration_test do chdir("./examples/fff_example") do - sh "rake clobber" - sh "rake test:all" + sh "ceedling clobber" + sh "ceedling test:all" end end diff --git a/tools/vendor/ceedling/plugins/fff/config/fff.yml b/tools/vendor/ceedling/plugins/fff/config/fff.yml new file mode 100644 index 00000000..dd761a31 --- /dev/null +++ b/tools/vendor/ceedling/plugins/fff/config/fff.yml @@ -0,0 +1,13 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + +--- +:paths: + :support: + - $PLUGIN_PATH/src + - $PLUGIN_PATH/vendor/fff +... diff --git a/tools/vendor/ceedling/plugins/fff/examples/fff_example/project.yml b/tools/vendor/ceedling/plugins/fff/examples/fff_example/project.yml new file mode 100644 index 00000000..df023436 --- /dev/null +++ b/tools/vendor/ceedling/plugins/fff/examples/fff_example/project.yml @@ -0,0 +1,145 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + +--- +:project: + # how to use ceedling. If you're not sure, leave this as `gem` and `?` + :which_ceedling: ../../../.. + :ceedling_version: '?' + + # optional features. If you don't need them, keep them turned off for performance + :use_mocks: TRUE + :use_test_preprocessor: :all + :use_backtrace: :none + + # tweak the way ceedling handles automatic tasks + :build_root: build + :test_file_prefix: test_ + :default_tasks: + - test:all + + # performance options. If your tools start giving mysterious errors, consider + # dropping this to 1 to force single-tasking + :test_threads: 8 + :compile_threads: 8 + + # enable release build (more details in release_build section below) + :release_build: FALSE + +# further details to configure the way Ceedling handles test code +:test_build: + :use_assembly: FALSE + +# further details to configure the way Ceedling handles release code +:release_build: + :output: MyApp.out + :use_assembly: FALSE + :artifacts: [] + +# Plugins are optional Ceedling features which can be enabled. Ceedling supports +# a variety of plugins which may effect the way things are compiled, reported, +# or may provide new command options. Refer to the readme in each plugin for +# details on how to use it. +:plugins: + :load_paths: [] + :enabled: + - module_generator + - fff + - report_tests_pretty_stdout + +# override the default extensions for your system and toolchain +:extension: + #:header: .h + #:source: .c + #:assembly: .s + #:dependencies: .d + #:object: .o + :executable: .out + #:testpass: .pass + #:testfail: .fail + #:subprojects: .a + +# This is where Ceedling should look for your source and test files. +# see documentation for the many options for specifying this. +:paths: + :test: + - +:test/** + :source: + - src/** + :include: + - src/** + :libraries: [] + +# You can even specify specific files to add or remove from your test +# and release collections. Usually it's better to use paths and let +# Ceedling do the work for you! +:files: + :test: [] + :source: [] + +# Compilation symbols to be injected into builds +# See documentation for advanced options: +# - Test name matchers for different symbols per test executable build +# - Referencing symbols in multiple lists using advanced YAML +# - Specifiying symbols used during test preprocessing +:defines: + :test: + - TEST # Simple list option to add symbol 'TEST' to compilation of all files in all test executables + :release: [] + + # Enable to inject name of a test as a unique compilation symbol into its respective executable build. + :use_test_definition: FALSE + +# Configure additional command line flags provided to tools used in each build step +# :flags: +# :release: +# :compile: # Add '-Wall' and '--02' to compilation of all files in release target +# - -Wall +# - --O2 +# :test: +# :compile: +# '(_|-)special': # Add '-pedantic' to compilation of all files in all test executables with '_special' or '-special' in their names +# - -pedantic +# '*': # Add '-foo' to compilation of all files in all test executables +# - -foo + +# Configuration Options specific to CMock. See CMock docs for details +:cmock: + :mock_prefix: mock_ + :when_no_prototypes: :warn + :enforce_strict_ordering: TRUE + :plugins: + - :ignore + - :callback + :treat_as: + uint8: HEX8 + uint16: HEX16 + uint32: UINT32 + int8: INT8 + bool: UINT8 + +# Configuration options specific to Unity. +:unity: + :defines: + - UNITY_EXCLUDE_FLOAT + +# You can optionally have ceedling create environment variables for you before +# performing the rest of its tasks. +:environment: [] + +# LIBRARIES +# These libraries are automatically injected into the build process. Those specified as +# common will be used in all types of builds. Otherwise, libraries can be injected in just +# tests or releases. These options are MERGED with the options in supplemental yaml files. +:libraries: + :placement: :end + :flag: "-l${1}" + :path_flag: "-L ${1}" + :system: [] # for example, you might list 'm' to grab the math library + :test: [] + :release: [] + diff --git a/tools/vendor/ceedling/plugins/fff/examples/fff_example/src/bar.c b/tools/vendor/ceedling/plugins/fff/examples/fff_example/src/bar.c new file mode 100644 index 00000000..52cad1b4 --- /dev/null +++ b/tools/vendor/ceedling/plugins/fff/examples/fff_example/src/bar.c @@ -0,0 +1,8 @@ +/* ========================================================================= + Ceedling - Test-Centered Build System for C + ThrowTheSwitch.org + Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams + SPDX-License-Identifier: MIT +========================================================================= */ + +#include "bar.h" diff --git a/tools/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/src/bar.h b/tools/vendor/ceedling/plugins/fff/examples/fff_example/src/bar.h similarity index 54% rename from tools/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/src/bar.h rename to tools/vendor/ceedling/plugins/fff/examples/fff_example/src/bar.h index febc5865..8a4d8dbf 100644 --- a/tools/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/src/bar.h +++ b/tools/vendor/ceedling/plugins/fff/examples/fff_example/src/bar.h @@ -1,3 +1,10 @@ +/* ========================================================================= + Ceedling - Test-Centered Build System for C + ThrowTheSwitch.org + Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams + SPDX-License-Identifier: MIT +========================================================================= */ + #ifndef bar_H #define bar_H diff --git a/tools/vendor/ceedling/plugins/fff/examples/fff_example/src/custom_types.h b/tools/vendor/ceedling/plugins/fff/examples/fff_example/src/custom_types.h new file mode 100644 index 00000000..36184c87 --- /dev/null +++ b/tools/vendor/ceedling/plugins/fff/examples/fff_example/src/custom_types.h @@ -0,0 +1,13 @@ +/* ========================================================================= + Ceedling - Test-Centered Build System for C + ThrowTheSwitch.org + Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams + SPDX-License-Identifier: MIT +========================================================================= */ + +#ifndef custom_types_H +#define custom_types_H + +typedef int custom_t; + +#endif diff --git a/tools/vendor/ceedling/plugins/fff/examples/fff_example/src/display.c b/tools/vendor/ceedling/plugins/fff/examples/fff_example/src/display.c new file mode 100644 index 00000000..ef06fa7e --- /dev/null +++ b/tools/vendor/ceedling/plugins/fff/examples/fff_example/src/display.c @@ -0,0 +1,14 @@ +/* ========================================================================= + Ceedling - Test-Centered Build System for C + ThrowTheSwitch.org + Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams + SPDX-License-Identifier: MIT +========================================================================= */ + +#include +#include "display.h" + +void display_turnOffStatusLed(void) +{ + printf("Display: Status LED off"); +} \ No newline at end of file diff --git a/tools/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/src/display.h b/tools/vendor/ceedling/plugins/fff/examples/fff_example/src/display.h similarity index 60% rename from tools/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/src/display.h rename to tools/vendor/ceedling/plugins/fff/examples/fff_example/src/display.h index def29960..df93da3d 100644 --- a/tools/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/src/display.h +++ b/tools/vendor/ceedling/plugins/fff/examples/fff_example/src/display.h @@ -1,3 +1,10 @@ +/* ========================================================================= + Ceedling - Test-Centered Build System for C + ThrowTheSwitch.org + Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams + SPDX-License-Identifier: MIT +========================================================================= */ + #include void display_turnOffStatusLed(void); diff --git a/tools/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/src/event_processor.c b/tools/vendor/ceedling/plugins/fff/examples/fff_example/src/event_processor.c similarity index 82% rename from tools/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/src/event_processor.c rename to tools/vendor/ceedling/plugins/fff/examples/fff_example/src/event_processor.c index 916a9236..1fe2a875 100644 --- a/tools/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/src/event_processor.c +++ b/tools/vendor/ceedling/plugins/fff/examples/fff_example/src/event_processor.c @@ -1,3 +1,10 @@ +/* ========================================================================= + Ceedling - Test-Centered Build System for C + ThrowTheSwitch.org + Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams + SPDX-License-Identifier: MIT +========================================================================= */ + /* This module implements some business logic to test. diff --git a/tools/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/src/event_processor.h b/tools/vendor/ceedling/plugins/fff/examples/fff_example/src/event_processor.h similarity index 50% rename from tools/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/src/event_processor.h rename to tools/vendor/ceedling/plugins/fff/examples/fff_example/src/event_processor.h index a79e68c5..6097c344 100644 --- a/tools/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/src/event_processor.h +++ b/tools/vendor/ceedling/plugins/fff/examples/fff_example/src/event_processor.h @@ -1,3 +1,10 @@ +/* ========================================================================= + Ceedling - Test-Centered Build System for C + ThrowTheSwitch.org + Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams + SPDX-License-Identifier: MIT +========================================================================= */ + #include void event_deviceReset(void); diff --git a/tools/vendor/ceedling/plugins/fff/examples/fff_example/src/foo.c b/tools/vendor/ceedling/plugins/fff/examples/fff_example/src/foo.c new file mode 100644 index 00000000..95bacd13 --- /dev/null +++ b/tools/vendor/ceedling/plugins/fff/examples/fff_example/src/foo.c @@ -0,0 +1,23 @@ +/* ========================================================================= + Ceedling - Test-Centered Build System for C + ThrowTheSwitch.org + Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams + SPDX-License-Identifier: MIT +========================================================================= */ + +#include "foo.h" +#include "bar.h" +#include "subfolder/zzz.h" + +void foo_turn_on(void) { + bar_turn_on(); + zzz_sleep(1, "sleepy"); +} + +void foo_print_message(const char * message) { + bar_print_message(message); +} + +void foo_print_special_message(void) { + bar_print_message_formatted("The numbers are %d, %d and %d", 1, 2, 3); +} diff --git a/tools/vendor/ceedling/plugins/fff/examples/fff_example/src/foo.h b/tools/vendor/ceedling/plugins/fff/examples/fff_example/src/foo.h new file mode 100644 index 00000000..db131928 --- /dev/null +++ b/tools/vendor/ceedling/plugins/fff/examples/fff_example/src/foo.h @@ -0,0 +1,15 @@ +/* ========================================================================= + Ceedling - Test-Centered Build System for C + ThrowTheSwitch.org + Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams + SPDX-License-Identifier: MIT +========================================================================= */ + +#ifndef foo_H +#define foo_H + +void foo_turn_on(void); +void foo_print_message(const char * message); +void foo_print_special_message(void); + +#endif // foo_H diff --git a/tools/vendor/ceedling/plugins/fff/examples/fff_example/src/subfolder/zzz.c b/tools/vendor/ceedling/plugins/fff/examples/fff_example/src/subfolder/zzz.c new file mode 100644 index 00000000..de353129 --- /dev/null +++ b/tools/vendor/ceedling/plugins/fff/examples/fff_example/src/subfolder/zzz.c @@ -0,0 +1,8 @@ +/* ========================================================================= + Ceedling - Test-Centered Build System for C + ThrowTheSwitch.org + Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams + SPDX-License-Identifier: MIT +========================================================================= */ + +#include "zzz.h" diff --git a/tools/vendor/ceedling/plugins/fff/examples/fff_example/src/subfolder/zzz.h b/tools/vendor/ceedling/plugins/fff/examples/fff_example/src/subfolder/zzz.h new file mode 100644 index 00000000..1810f86c --- /dev/null +++ b/tools/vendor/ceedling/plugins/fff/examples/fff_example/src/subfolder/zzz.h @@ -0,0 +1,13 @@ +/* ========================================================================= + Ceedling - Test-Centered Build System for C + ThrowTheSwitch.org + Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams + SPDX-License-Identifier: MIT +========================================================================= */ + +#ifndef zzz_H +#define zzz_H + +int zzz_sleep(int time, char * name); + +#endif // zzz_H diff --git a/tools/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/test/test_event_processor.c b/tools/vendor/ceedling/plugins/fff/examples/fff_example/test/test_event_processor.c similarity index 82% rename from tools/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/test/test_event_processor.c rename to tools/vendor/ceedling/plugins/fff/examples/fff_example/test/test_event_processor.c index 9f999443..f1c0af23 100644 --- a/tools/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/test/test_event_processor.c +++ b/tools/vendor/ceedling/plugins/fff/examples/fff_example/test/test_event_processor.c @@ -1,3 +1,10 @@ +/* ========================================================================= + Ceedling - Test-Centered Build System for C + ThrowTheSwitch.org + Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams + SPDX-License-Identifier: MIT +========================================================================= */ + #include "unity.h" #include "event_processor.h" #include "mock_display.h" @@ -10,6 +17,7 @@ void setUp (void) void tearDown (void) { } + /* Test that a single function was called. */ @@ -59,7 +67,6 @@ test_whenTheVolumeKnobIsMaxed_thenVolumeDisplayIsSetTo11(void) /* Test a sequence of calls. */ - void test_whenTheModeSelectButtonIsPressed_thenTheDisplayModeIsCycled(void) { @@ -96,25 +103,22 @@ test_givenTheDisplayHasAnError_whenTheDeviceIsPoweredOn_thenTheDisplayIsPoweredD TEST_ASSERT_CALLED(display_powerDown); } -/* - Mock a sequence of calls with return values. -*/ - /* Mocking a function with a value returned by reference. */ +void return_mock_value(char * entry, int length) +{ + const char mockedEntry[] = "sleep"; + if (length > strlen(mockedEntry)) + { + strncpy(entry, mockedEntry, length); + } +} + void test_givenTheUserHasTypedSleep_whenItIsTimeToCheckTheKeyboard_theDisplayIsPoweredDown(void) { // Given - char mockedEntry[] = "sleep"; - void return_mock_value(char * entry, int length) - { - if (length > strlen(mockedEntry)) - { - strncpy(entry, mockedEntry, length); - } - } display_getKeyboardEntry_fake.custom_fake = return_mock_value; // When @@ -129,16 +133,17 @@ test_givenTheUserHasTypedSleep_whenItIsTimeToCheckTheKeyboard_theDisplayIsPowere /* Mock a function with a function pointer parameter. */ +void(*registeredCallback)(void) = 0; +void mock_display_updateData(int data, void(*callback)(void)) +{ + //Save the callback function. + registeredCallback = callback; +} + void test_givenNewDataIsAvailable_whenTheDisplayHasUpdated_thenTheEventIsComplete(void) { // A mock function for capturing the callback handler function pointer. - void(*registeredCallback)(void) = 0; - void mock_display_updateData(int data, void(*callback)(void)) - { - //Save the callback function. - registeredCallback = callback; - } display_updateData_fake.custom_fake = mock_display_updateData; // Given diff --git a/tools/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/test/test_foo.c b/tools/vendor/ceedling/plugins/fff/examples/fff_example/test/test_foo.c similarity index 73% rename from tools/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/test/test_foo.c rename to tools/vendor/ceedling/plugins/fff/examples/fff_example/test/test_foo.c index 12dd61a1..ed7ad22d 100644 --- a/tools/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/test/test_foo.c +++ b/tools/vendor/ceedling/plugins/fff/examples/fff_example/test/test_foo.c @@ -1,3 +1,10 @@ +/* ========================================================================= + Ceedling - Test-Centered Build System for C + ThrowTheSwitch.org + Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams + SPDX-License-Identifier: MIT +========================================================================= */ + #include "unity.h" #include "foo.h" #include "mock_bar.h" diff --git a/tools/vendor/ceedling/plugins/fake_function_framework/lib/fake_function_framework.rb b/tools/vendor/ceedling/plugins/fff/lib/fff.rb similarity index 72% rename from tools/vendor/ceedling/plugins/fake_function_framework/lib/fake_function_framework.rb rename to tools/vendor/ceedling/plugins/fff/lib/fff.rb index 51a90b3a..96679ced 100644 --- a/tools/vendor/ceedling/plugins/fake_function_framework/lib/fake_function_framework.rb +++ b/tools/vendor/ceedling/plugins/fff/lib/fff.rb @@ -1,20 +1,18 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + require 'ceedling/plugin' require 'fff_mock_generator' -class FakeFunctionFramework < Plugin +class Fff < Plugin - # Set up Ceedling to use this plugin. + # Set up Ceedling to use this plugin def setup - # Get the location of this plugin. - @plugin_root = File.expand_path(File.join(File.dirname(__FILE__), '..')) - puts "Using fake function framework (fff)..." - - # Switch out the cmock_builder with our own. - @ceedling[:cmock_builder].cmock = FffMockGeneratorForCMock.new(@ceedling[:setupinator].config_hash[:cmock]) - - # Add the path to fff.h to the include paths. - COLLECTION_PATHS_TEST_SUPPORT_SOURCE_INCLUDE_VENDOR << "#{@plugin_root}/vendor/fff" - COLLECTION_PATHS_TEST_SUPPORT_SOURCE_INCLUDE_VENDOR << "#{@plugin_root}/src" + @ceedling[:loginator].log( "Using Fake Function Framework (fff)...", Verbosity::OBNOXIOUS ) end def post_runner_generate(arg_hash) @@ -29,9 +27,9 @@ def post_runner_generate(arg_hash) end end -end # class FakeFunctionFramework +end # class Fff -class FffMockGeneratorForCMock +class FffCMockWrapper def initialize(options=nil) @cm_config = CMockConfig.new(options) @@ -51,11 +49,11 @@ def setup_mocks(files) end end - def generate_mock (header_file_to_mock) + def generate_mock(header_file_to_mock, folder=nil) module_name = File.basename(header_file_to_mock, '.h') - puts "Creating mock for #{module_name}..." unless @silent + puts( "Creating fake functions for #{module_name}..." ) unless @silent mock_name = @cm_config.mock_prefix + module_name + @cm_config.mock_suffix - mock_path = @cm_config.mock_path + mock_path = @cm_config.mock_path + (folder.nil? ? '' : File.join(folder,'')) if @cm_config.subdir # If a subdirectory has been configured, append it to the mock path. mock_path = "#{mock_path}/#{@cm_config.subdir}" @@ -68,8 +66,8 @@ def generate_mock (header_file_to_mock) # Create the directory if it doesn't exist. mkdir_p full_path_for_mock.pathmap("%d") - # Generate the mock header file. - puts "Creating mock: #{full_path_for_mock}.h" + # Generate the fake function header file. + puts( "Creating fake functions: #{full_path_for_mock}.h" ) # Create the mock header. File.open("#{full_path_for_mock}.h", 'w') do |f| @@ -85,3 +83,8 @@ def generate_mock (header_file_to_mock) end end + +# Switch out the CMock with FFF Mock Generator +require "cmock" +RealCMock = CMock +CMock = FffCMockWrapper diff --git a/tools/vendor/ceedling/plugins/fake_function_framework/lib/fff_mock_generator.rb b/tools/vendor/ceedling/plugins/fff/lib/fff_mock_generator.rb similarity index 93% rename from tools/vendor/ceedling/plugins/fake_function_framework/lib/fff_mock_generator.rb rename to tools/vendor/ceedling/plugins/fff/lib/fff_mock_generator.rb index 9dc03a65..69ec73dc 100644 --- a/tools/vendor/ceedling/plugins/fake_function_framework/lib/fff_mock_generator.rb +++ b/tools/vendor/ceedling/plugins/fff/lib/fff_mock_generator.rb @@ -1,3 +1,10 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + # Creates mock files from parsed header files that can be linked into applications. # The mocks created are compatible with CMock for use with Ceedling. diff --git a/tools/vendor/ceedling/plugins/fake_function_framework/spec/fff_mock_header_generator_spec.rb b/tools/vendor/ceedling/plugins/fff/spec/fff_mock_header_generator_spec.rb similarity index 97% rename from tools/vendor/ceedling/plugins/fake_function_framework/spec/fff_mock_header_generator_spec.rb rename to tools/vendor/ceedling/plugins/fff/spec/fff_mock_header_generator_spec.rb index e6ac11dd..20213c3b 100644 --- a/tools/vendor/ceedling/plugins/fake_function_framework/spec/fff_mock_header_generator_spec.rb +++ b/tools/vendor/ceedling/plugins/fff/spec/fff_mock_header_generator_spec.rb @@ -1,3 +1,10 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + require 'stringio' require 'fff_mock_generator.rb' require 'header_generator.rb' diff --git a/tools/vendor/ceedling/plugins/fake_function_framework/spec/fff_mock_source_generator_spec.rb b/tools/vendor/ceedling/plugins/fff/spec/fff_mock_source_generator_spec.rb similarity index 93% rename from tools/vendor/ceedling/plugins/fake_function_framework/spec/fff_mock_source_generator_spec.rb rename to tools/vendor/ceedling/plugins/fff/spec/fff_mock_source_generator_spec.rb index 364f8521..938c6a7d 100644 --- a/tools/vendor/ceedling/plugins/fake_function_framework/spec/fff_mock_source_generator_spec.rb +++ b/tools/vendor/ceedling/plugins/fff/spec/fff_mock_source_generator_spec.rb @@ -1,3 +1,10 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + require 'stringio' require 'fff_mock_generator.rb' diff --git a/tools/vendor/ceedling/plugins/fake_function_framework/spec/header_generator.rb b/tools/vendor/ceedling/plugins/fff/spec/header_generator.rb similarity index 79% rename from tools/vendor/ceedling/plugins/fake_function_framework/spec/header_generator.rb rename to tools/vendor/ceedling/plugins/fff/spec/header_generator.rb index cda27844..c210e353 100644 --- a/tools/vendor/ceedling/plugins/fake_function_framework/spec/header_generator.rb +++ b/tools/vendor/ceedling/plugins/fff/spec/header_generator.rb @@ -1,3 +1,10 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + # Create a CMock-style parsed header hash. This the type of hash created by # CMock when parsing header files for automock generation. It contains all of # includes, typedefs and functions (with return types and arguments) parsed from diff --git a/tools/vendor/ceedling/plugins/fake_function_framework/spec/spec_helper.rb b/tools/vendor/ceedling/plugins/fff/spec/spec_helper.rb similarity index 93% rename from tools/vendor/ceedling/plugins/fake_function_framework/spec/spec_helper.rb rename to tools/vendor/ceedling/plugins/fff/spec/spec_helper.rb index 25dc80ac..becc739d 100644 --- a/tools/vendor/ceedling/plugins/fake_function_framework/spec/spec_helper.rb +++ b/tools/vendor/ceedling/plugins/fff/spec/spec_helper.rb @@ -1,3 +1,10 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + # This file was generated by the `rspec --init` command. Conventionally, all # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`. # The generated `.rspec` file contains `--require spec_helper` which will cause diff --git a/tools/vendor/ceedling/plugins/fake_function_framework/src/fff_unity_helper.h b/tools/vendor/ceedling/plugins/fff/src/fff_unity_helper.h similarity index 77% rename from tools/vendor/ceedling/plugins/fake_function_framework/src/fff_unity_helper.h rename to tools/vendor/ceedling/plugins/fff/src/fff_unity_helper.h index de3db44a..d5152f4e 100644 --- a/tools/vendor/ceedling/plugins/fake_function_framework/src/fff_unity_helper.h +++ b/tools/vendor/ceedling/plugins/fff/src/fff_unity_helper.h @@ -1,3 +1,10 @@ +/* ========================================================================= + Ceedling - Test-Centered Build System for C + ThrowTheSwitch.org + Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams + SPDX-License-Identifier: MIT +========================================================================= */ + #ifndef fff_unity_helper_H #define fff_unity_helper_H diff --git a/tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/LICENSE b/tools/vendor/ceedling/plugins/fff/vendor/fff/LICENSE similarity index 100% rename from tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/LICENSE rename to tools/vendor/ceedling/plugins/fff/vendor/fff/LICENSE diff --git a/tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/Makefile b/tools/vendor/ceedling/plugins/fff/vendor/fff/Makefile similarity index 100% rename from tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/Makefile rename to tools/vendor/ceedling/plugins/fff/vendor/fff/Makefile diff --git a/tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/README.md b/tools/vendor/ceedling/plugins/fff/vendor/fff/README.md similarity index 100% rename from tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/README.md rename to tools/vendor/ceedling/plugins/fff/vendor/fff/README.md diff --git a/tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/buildandtest b/tools/vendor/ceedling/plugins/fff/vendor/fff/buildandtest similarity index 100% rename from tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/buildandtest rename to tools/vendor/ceedling/plugins/fff/vendor/fff/buildandtest diff --git a/tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/examples/Makefile b/tools/vendor/ceedling/plugins/fff/vendor/fff/examples/Makefile similarity index 100% rename from tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/examples/Makefile rename to tools/vendor/ceedling/plugins/fff/vendor/fff/examples/Makefile diff --git a/tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/examples/driver_testing/Makefile b/tools/vendor/ceedling/plugins/fff/vendor/fff/examples/driver_testing/Makefile similarity index 100% rename from tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/examples/driver_testing/Makefile rename to tools/vendor/ceedling/plugins/fff/vendor/fff/examples/driver_testing/Makefile diff --git a/tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/examples/driver_testing/driver.c b/tools/vendor/ceedling/plugins/fff/vendor/fff/examples/driver_testing/driver.c similarity index 58% rename from tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/examples/driver_testing/driver.c rename to tools/vendor/ceedling/plugins/fff/vendor/fff/examples/driver_testing/driver.c index 9454ba6f..7da76924 100644 --- a/tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/examples/driver_testing/driver.c +++ b/tools/vendor/ceedling/plugins/fff/vendor/fff/examples/driver_testing/driver.c @@ -1,3 +1,11 @@ +/* ========================================================================= + Ceedling - Test-Centered Build System for C + ThrowTheSwitch.org + Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams + SPDX-License-Identifier: MIT +========================================================================= */ + + #include "hardware_abstraction.h" diff --git a/tools/vendor/ceedling/plugins/fff/vendor/fff/examples/driver_testing/driver.h b/tools/vendor/ceedling/plugins/fff/vendor/fff/examples/driver_testing/driver.h new file mode 100644 index 00000000..fd1a8743 --- /dev/null +++ b/tools/vendor/ceedling/plugins/fff/vendor/fff/examples/driver_testing/driver.h @@ -0,0 +1,21 @@ +/* ========================================================================= + Ceedling - Test-Centered Build System for C + ThrowTheSwitch.org + Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams + SPDX-License-Identifier: MIT +========================================================================= */ + + + + + +#ifndef DRIVER +#define DRIVER + +#include + +void driver_write(uint8_t val); +uint8_t driver_read(); +void driver_init_device(); + +#endif /*include guard*/ diff --git a/tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/examples/driver_testing/driver.test.cpp b/tools/vendor/ceedling/plugins/fff/vendor/fff/examples/driver_testing/driver.test.cpp similarity index 75% rename from tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/examples/driver_testing/driver.test.cpp rename to tools/vendor/ceedling/plugins/fff/vendor/fff/examples/driver_testing/driver.test.cpp index 2df07027..26c03727 100644 --- a/tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/examples/driver_testing/driver.test.cpp +++ b/tools/vendor/ceedling/plugins/fff/vendor/fff/examples/driver_testing/driver.test.cpp @@ -1,3 +1,11 @@ +/* ========================================================================= + Ceedling - Test-Centered Build System for C + ThrowTheSwitch.org + Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams + SPDX-License-Identifier: MIT +========================================================================= */ + + extern "C" { #include "driver.h" diff --git a/tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/examples/driver_testing/driver.test.fff.cpp b/tools/vendor/ceedling/plugins/fff/vendor/fff/examples/driver_testing/driver.test.fff.cpp similarity index 84% rename from tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/examples/driver_testing/driver.test.fff.cpp rename to tools/vendor/ceedling/plugins/fff/vendor/fff/examples/driver_testing/driver.test.fff.cpp index d8aeb06f..4f690cdc 100644 --- a/tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/examples/driver_testing/driver.test.fff.cpp +++ b/tools/vendor/ceedling/plugins/fff/vendor/fff/examples/driver_testing/driver.test.fff.cpp @@ -1,3 +1,11 @@ +/* ========================================================================= + Ceedling - Test-Centered Build System for C + ThrowTheSwitch.org + Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams + SPDX-License-Identifier: MIT +========================================================================= */ + + extern "C"{ #include "driver.h" #include "registers.h" diff --git a/tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/examples/driver_testing/hardware_abstraction.h b/tools/vendor/ceedling/plugins/fff/vendor/fff/examples/driver_testing/hardware_abstraction.h similarity index 55% rename from tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/examples/driver_testing/hardware_abstraction.h rename to tools/vendor/ceedling/plugins/fff/vendor/fff/examples/driver_testing/hardware_abstraction.h index affa92ed..a3507d3e 100644 --- a/tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/examples/driver_testing/hardware_abstraction.h +++ b/tools/vendor/ceedling/plugins/fff/vendor/fff/examples/driver_testing/hardware_abstraction.h @@ -1,3 +1,13 @@ +/* ========================================================================= + Ceedling - Test-Centered Build System for C + ThrowTheSwitch.org + Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams + SPDX-License-Identifier: MIT +========================================================================= */ + + + + #ifndef HARDWARE_ABSTRACTION #define HARDWARE_ABSTRACTION diff --git a/tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/examples/driver_testing/registers.h b/tools/vendor/ceedling/plugins/fff/vendor/fff/examples/driver_testing/registers.h similarity index 50% rename from tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/examples/driver_testing/registers.h rename to tools/vendor/ceedling/plugins/fff/vendor/fff/examples/driver_testing/registers.h index 5c9e5a9c..30f9f6aa 100644 --- a/tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/examples/driver_testing/registers.h +++ b/tools/vendor/ceedling/plugins/fff/vendor/fff/examples/driver_testing/registers.h @@ -1,3 +1,13 @@ +/* ========================================================================= + Ceedling - Test-Centered Build System for C + ThrowTheSwitch.org + Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams + SPDX-License-Identifier: MIT +========================================================================= */ + + + + #ifndef REGISTERS_H_ #define REGISTERS_H_ diff --git a/tools/vendor/ceedling/plugins/fff/vendor/fff/examples/embedded_ui/DISPLAY.h b/tools/vendor/ceedling/plugins/fff/vendor/fff/examples/embedded_ui/DISPLAY.h new file mode 100644 index 00000000..92eb0764 --- /dev/null +++ b/tools/vendor/ceedling/plugins/fff/vendor/fff/examples/embedded_ui/DISPLAY.h @@ -0,0 +1,27 @@ +/* ========================================================================= + Ceedling - Test-Centered Build System for C + ThrowTheSwitch.org + Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams + SPDX-License-Identifier: MIT +========================================================================= */ + + + + +/* + * DISPLAY.h + * + * Created on: Dec 17, 2010 + * Author: mlong + */ + +#ifndef DISPLAY_H_ +#define DISPLAY_H_ + +void DISPLAY_init(); +void DISPLAY_clear(); +unsigned int DISPLAY_get_line_capacity(); +unsigned int DISPLAY_get_line_insert_index(); +void DISPLAY_output(char * message); + +#endif /* DISPLAY_H_ */ diff --git a/tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/examples/embedded_ui/Kata.txt b/tools/vendor/ceedling/plugins/fff/vendor/fff/examples/embedded_ui/Kata.txt similarity index 100% rename from tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/examples/embedded_ui/Kata.txt rename to tools/vendor/ceedling/plugins/fff/vendor/fff/examples/embedded_ui/Kata.txt diff --git a/tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/examples/embedded_ui/Makefile b/tools/vendor/ceedling/plugins/fff/vendor/fff/examples/embedded_ui/Makefile similarity index 100% rename from tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/examples/embedded_ui/Makefile rename to tools/vendor/ceedling/plugins/fff/vendor/fff/examples/embedded_ui/Makefile diff --git a/tools/vendor/ceedling/plugins/fff/vendor/fff/examples/embedded_ui/SYSTEM.h b/tools/vendor/ceedling/plugins/fff/vendor/fff/examples/embedded_ui/SYSTEM.h new file mode 100644 index 00000000..4e8be8e4 --- /dev/null +++ b/tools/vendor/ceedling/plugins/fff/vendor/fff/examples/embedded_ui/SYSTEM.h @@ -0,0 +1,31 @@ +/* ========================================================================= + Ceedling - Test-Centered Build System for C + ThrowTheSwitch.org + Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams + SPDX-License-Identifier: MIT +========================================================================= */ + + + + +/* + * DISPLAY.h + * + * Created on: Dec 17, 2010 + * Author: mlong + */ + +#ifndef SYSTEM_H_ +#define SYSTEM_H_ + +typedef void (*irq_func_t)(void); + +#define IRQ_GPIO_0 0x70 +#define IRQ_GPIO_1 0x71 +#define IRQ_GPIO_2 0x72 +#define IRQ_GPIO_3 0x73 + + +void SYSTEM_register_irq(irq_func_t, unsigned int irq); + +#endif /* SYSTEM_H_ */ diff --git a/tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/examples/embedded_ui/UI.c b/tools/vendor/ceedling/plugins/fff/vendor/fff/examples/embedded_ui/UI.c similarity index 69% rename from tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/examples/embedded_ui/UI.c rename to tools/vendor/ceedling/plugins/fff/vendor/fff/examples/embedded_ui/UI.c index 8ce996e6..e7f040dd 100644 --- a/tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/examples/embedded_ui/UI.c +++ b/tools/vendor/ceedling/plugins/fff/vendor/fff/examples/embedded_ui/UI.c @@ -1,3 +1,11 @@ +/* ========================================================================= + Ceedling - Test-Centered Build System for C + ThrowTheSwitch.org + Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams + SPDX-License-Identifier: MIT +========================================================================= */ + + #include "UI.h" #include "DISPLAY.h" #include "SYSTEM.h" diff --git a/tools/vendor/ceedling/plugins/fff/vendor/fff/examples/embedded_ui/UI.h b/tools/vendor/ceedling/plugins/fff/vendor/fff/examples/embedded_ui/UI.h new file mode 100644 index 00000000..e4b05406 --- /dev/null +++ b/tools/vendor/ceedling/plugins/fff/vendor/fff/examples/embedded_ui/UI.h @@ -0,0 +1,22 @@ +/* ========================================================================= + Ceedling - Test-Centered Build System for C + ThrowTheSwitch.org + Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams + SPDX-License-Identifier: MIT +========================================================================= */ + + + + +#ifndef UI_H_ +#define UI_H_ + +typedef void (*button_cbk_t)(void); + +void UI_init(); +unsigned int UI_get_missed_irqs(); +void UI_button_irq_handler(); +void UI_register_button_cbk(button_cbk_t cbk); +void UI_write_line(char *line); + +#endif /* UI_H_ */ diff --git a/tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/examples/embedded_ui/UI_test_ansic.c b/tools/vendor/ceedling/plugins/fff/vendor/fff/examples/embedded_ui/UI_test_ansic.c similarity index 93% rename from tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/examples/embedded_ui/UI_test_ansic.c rename to tools/vendor/ceedling/plugins/fff/vendor/fff/examples/embedded_ui/UI_test_ansic.c index f98e4098..851ff8c1 100644 --- a/tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/examples/embedded_ui/UI_test_ansic.c +++ b/tools/vendor/ceedling/plugins/fff/vendor/fff/examples/embedded_ui/UI_test_ansic.c @@ -1,3 +1,11 @@ +/* ========================================================================= + Ceedling - Test-Centered Build System for C + ThrowTheSwitch.org + Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams + SPDX-License-Identifier: MIT +========================================================================= */ + + #include "UI.h" #include "../../fff.h" #include "SYSTEM.h" diff --git a/tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/examples/embedded_ui/UI_test_cpp.cpp b/tools/vendor/ceedling/plugins/fff/vendor/fff/examples/embedded_ui/UI_test_cpp.cpp similarity index 90% rename from tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/examples/embedded_ui/UI_test_cpp.cpp rename to tools/vendor/ceedling/plugins/fff/vendor/fff/examples/embedded_ui/UI_test_cpp.cpp index ecd9deff..bedc5878 100644 --- a/tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/examples/embedded_ui/UI_test_cpp.cpp +++ b/tools/vendor/ceedling/plugins/fff/vendor/fff/examples/embedded_ui/UI_test_cpp.cpp @@ -1,3 +1,11 @@ +/* ========================================================================= + Ceedling - Test-Centered Build System for C + ThrowTheSwitch.org + Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams + SPDX-License-Identifier: MIT +========================================================================= */ + + extern "C"{ #include "UI.h" #include "SYSTEM.h" diff --git a/tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/examples/embedded_ui/test_suite_template.c b/tools/vendor/ceedling/plugins/fff/vendor/fff/examples/embedded_ui/test_suite_template.c similarity index 60% rename from tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/examples/embedded_ui/test_suite_template.c rename to tools/vendor/ceedling/plugins/fff/vendor/fff/examples/embedded_ui/test_suite_template.c index 00df5bb2..97d1cdb7 100644 --- a/tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/examples/embedded_ui/test_suite_template.c +++ b/tools/vendor/ceedling/plugins/fff/vendor/fff/examples/embedded_ui/test_suite_template.c @@ -1,3 +1,11 @@ +/* ========================================================================= + Ceedling - Test-Centered Build System for C + ThrowTheSwitch.org + Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams + SPDX-License-Identifier: MIT +========================================================================= */ + + #include "../../test/c_test_framework.h" /* Initialializers called for every test */ diff --git a/tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/fakegen.rb b/tools/vendor/ceedling/plugins/fff/vendor/fff/fakegen.rb similarity index 97% rename from tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/fakegen.rb rename to tools/vendor/ceedling/plugins/fff/vendor/fff/fakegen.rb index 96a02eac..a930201f 100644 --- a/tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/fakegen.rb +++ b/tools/vendor/ceedling/plugins/fff/vendor/fff/fakegen.rb @@ -1,3 +1,11 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + + # fakegen.rb # A simple code generator to create some C macros for defining test fake functions diff --git a/tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/fff.h b/tools/vendor/ceedling/plugins/fff/vendor/fff/fff.h similarity index 99% rename from tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/fff.h rename to tools/vendor/ceedling/plugins/fff/vendor/fff/fff.h index 19b0d7f4..f481b3dd 100644 --- a/tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/fff.h +++ b/tools/vendor/ceedling/plugins/fff/vendor/fff/fff.h @@ -1,3 +1,13 @@ +/* ========================================================================= + Ceedling - Test-Centered Build System for C + ThrowTheSwitch.org + Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams + SPDX-License-Identifier: MIT +========================================================================= */ + + + + /* LICENSE diff --git a/tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/gtest/Makefile b/tools/vendor/ceedling/plugins/fff/vendor/fff/gtest/Makefile similarity index 100% rename from tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/gtest/Makefile rename to tools/vendor/ceedling/plugins/fff/vendor/fff/gtest/Makefile diff --git a/tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/gtest/gtest-all.cc b/tools/vendor/ceedling/plugins/fff/vendor/fff/gtest/gtest-all.cc similarity index 100% rename from tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/gtest/gtest-all.cc rename to tools/vendor/ceedling/plugins/fff/vendor/fff/gtest/gtest-all.cc diff --git a/tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/gtest/gtest-main.cc b/tools/vendor/ceedling/plugins/fff/vendor/fff/gtest/gtest-main.cc similarity index 100% rename from tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/gtest/gtest-main.cc rename to tools/vendor/ceedling/plugins/fff/vendor/fff/gtest/gtest-main.cc diff --git a/tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/gtest/gtest.h b/tools/vendor/ceedling/plugins/fff/vendor/fff/gtest/gtest.h similarity index 99% rename from tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/gtest/gtest.h rename to tools/vendor/ceedling/plugins/fff/vendor/fff/gtest/gtest.h index 3143bd67..875b4f82 100644 --- a/tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/gtest/gtest.h +++ b/tools/vendor/ceedling/plugins/fff/vendor/fff/gtest/gtest.h @@ -1,3 +1,13 @@ +/* ========================================================================= + Ceedling - Test-Centered Build System for C + ThrowTheSwitch.org + Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams + SPDX-License-Identifier: MIT +========================================================================= */ + + + + // Copyright 2005, Google Inc. // All rights reserved. // diff --git a/tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/test/Makefile b/tools/vendor/ceedling/plugins/fff/vendor/fff/test/Makefile similarity index 100% rename from tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/test/Makefile rename to tools/vendor/ceedling/plugins/fff/vendor/fff/test/Makefile diff --git a/tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/test/c_test_framework.h b/tools/vendor/ceedling/plugins/fff/vendor/fff/test/c_test_framework.h similarity index 56% rename from tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/test/c_test_framework.h rename to tools/vendor/ceedling/plugins/fff/vendor/fff/test/c_test_framework.h index ce7ad89d..eb561f46 100644 --- a/tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/test/c_test_framework.h +++ b/tools/vendor/ceedling/plugins/fff/vendor/fff/test/c_test_framework.h @@ -1,3 +1,13 @@ +/* ========================================================================= + Ceedling - Test-Centered Build System for C + ThrowTheSwitch.org + Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams + SPDX-License-Identifier: MIT +========================================================================= */ + + + + #ifndef C_TEST_FRAMEWORK_H_ #define C_TEST_FRAMEWORK_H_ diff --git a/tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/test/fff_test_c.c b/tools/vendor/ceedling/plugins/fff/vendor/fff/test/fff_test_c.c similarity index 92% rename from tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/test/fff_test_c.c rename to tools/vendor/ceedling/plugins/fff/vendor/fff/test/fff_test_c.c index a4de6edc..0d7085bf 100644 --- a/tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/test/fff_test_c.c +++ b/tools/vendor/ceedling/plugins/fff/vendor/fff/test/fff_test_c.c @@ -1,3 +1,11 @@ +/* ========================================================================= + Ceedling - Test-Centered Build System for C + ThrowTheSwitch.org + Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams + SPDX-License-Identifier: MIT +========================================================================= */ + + // Want to keep the argument history for 13 calls #define OVERRIDE_ARG_HIST_LEN 13u diff --git a/tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/test/fff_test_cpp.cpp b/tools/vendor/ceedling/plugins/fff/vendor/fff/test/fff_test_cpp.cpp similarity index 77% rename from tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/test/fff_test_cpp.cpp rename to tools/vendor/ceedling/plugins/fff/vendor/fff/test/fff_test_cpp.cpp index dcd28892..1fe63368 100644 --- a/tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/test/fff_test_cpp.cpp +++ b/tools/vendor/ceedling/plugins/fff/vendor/fff/test/fff_test_cpp.cpp @@ -1,3 +1,11 @@ +/* ========================================================================= + Ceedling - Test-Centered Build System for C + ThrowTheSwitch.org + Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams + SPDX-License-Identifier: MIT +========================================================================= */ + + /* * fff_test.cpp * diff --git a/tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/test/fff_test_global_c.c b/tools/vendor/ceedling/plugins/fff/vendor/fff/test/fff_test_global_c.c similarity index 89% rename from tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/test/fff_test_global_c.c rename to tools/vendor/ceedling/plugins/fff/vendor/fff/test/fff_test_global_c.c index 01112baa..5be8870b 100644 --- a/tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/test/fff_test_global_c.c +++ b/tools/vendor/ceedling/plugins/fff/vendor/fff/test/fff_test_global_c.c @@ -1,3 +1,11 @@ +/* ========================================================================= + Ceedling - Test-Centered Build System for C + ThrowTheSwitch.org + Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams + SPDX-License-Identifier: MIT +========================================================================= */ + + #include "global_fakes.h" #include "c_test_framework.h" diff --git a/tools/vendor/ceedling/plugins/fff/vendor/fff/test/fff_test_global_cpp.cpp b/tools/vendor/ceedling/plugins/fff/vendor/fff/test/fff_test_global_cpp.cpp new file mode 100644 index 00000000..3ffa55f5 --- /dev/null +++ b/tools/vendor/ceedling/plugins/fff/vendor/fff/test/fff_test_global_cpp.cpp @@ -0,0 +1,31 @@ +/* ========================================================================= + Ceedling - Test-Centered Build System for C + ThrowTheSwitch.org + Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams + SPDX-License-Identifier: MIT +========================================================================= */ + + + +extern "C"{ + #include "global_fakes.h" +} +#include + +DEFINE_FFF_GLOBALS; + +class FFFTestSuite: public testing::Test +{ +public: + void SetUp() + { + RESET_FAKE(voidfunc1); + RESET_FAKE(voidfunc2); + RESET_FAKE(longfunc0); + FFF_RESET_HISTORY(); + } +}; + +#include "test_cases.include" + + diff --git a/tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/test/global_fakes.c b/tools/vendor/ceedling/plugins/fff/vendor/fff/test/global_fakes.c similarity index 65% rename from tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/test/global_fakes.c rename to tools/vendor/ceedling/plugins/fff/vendor/fff/test/global_fakes.c index a727096d..90dc763b 100644 --- a/tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/test/global_fakes.c +++ b/tools/vendor/ceedling/plugins/fff/vendor/fff/test/global_fakes.c @@ -1,3 +1,11 @@ +/* ========================================================================= + Ceedling - Test-Centered Build System for C + ThrowTheSwitch.org + Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams + SPDX-License-Identifier: MIT +========================================================================= */ + + #include "global_fakes.h" #include // for memcpy diff --git a/tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/test/global_fakes.h b/tools/vendor/ceedling/plugins/fff/vendor/fff/test/global_fakes.h similarity index 78% rename from tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/test/global_fakes.h rename to tools/vendor/ceedling/plugins/fff/vendor/fff/test/global_fakes.h index d4cf017c..f7a3e329 100644 --- a/tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/test/global_fakes.h +++ b/tools/vendor/ceedling/plugins/fff/vendor/fff/test/global_fakes.h @@ -1,3 +1,13 @@ +/* ========================================================================= + Ceedling - Test-Centered Build System for C + ThrowTheSwitch.org + Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams + SPDX-License-Identifier: MIT +========================================================================= */ + + + + #ifndef GLOBAL_FAKES_H_ #define GLOBAL_FAKES_H_ diff --git a/tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/test/test_cases.include b/tools/vendor/ceedling/plugins/fff/vendor/fff/test/test_cases.include similarity index 100% rename from tools/vendor/ceedling/plugins/fake_function_framework/vendor/fff/test/test_cases.include rename to tools/vendor/ceedling/plugins/fff/vendor/fff/test/test_cases.include diff --git a/tools/vendor/ceedling/plugins/gcov/README.md b/tools/vendor/ceedling/plugins/gcov/README.md index 57d56651..b8c6c34f 100644 --- a/tools/vendor/ceedling/plugins/gcov/README.md +++ b/tools/vendor/ceedling/plugins/gcov/README.md @@ -1,180 +1,515 @@ -ceedling-gcov -============= +# Ceedling Plugin: Gcov + +This plugin integrates the code coverage abilities of the GNU compiler +collection with test builds. It provides simple coverage metrics by default and +can optionally produce sophisticated coverage reports. # Plugin Overview -Plugin for integrating GNU GCov code coverage tool into Ceedling projects. +When enabled, this plugin creates a new set of `gcov:` tasks that mirror +Ceedling's existing `test:` tasks. A `gcov:` task executes one or more tests +with coverage enabled for the source files exercised by those tests. + +This plugin also provides an extensive set of options for generating various +coverage reports for your project. The simplest is text-based coverage +summaries printed to the console after a `gcov:` test task is executed. + +This document details configuration, reporting options, and provides basic +[troubleshooting help][troubleshooting]. -In its simplest usage, this plugin outputs coverage statistics to the -console for each source file exercised by a test after the standard -Ceedling test results summary. For more advanced visualization and -reporting, this plugin also supports a variety of report generation -options. +[troubleshooting]: #advanced-configuration--troubleshooting -Advanced report generation uses [gcovr](https://www.gcovr.com/) and / or -[ReportGenerator](https://reportgenerator.io) -as utilities to generate HTML, XML, JSON, or Text reports. +# Simple Coverage Summaries -In the default configuration, if reports are configured, this plugin -automatically generates reports after each execution of a `gcov:` task. -An optional setting documented below disables automatic report -generation, providing a separate Ceedling task instead. +In its simplest usage, this plugin outputs coverage statistics to the console +for each source file exercised by a test. These console-based coverage +summaries are provided after the standard Ceedling test results summary. Other +than enabling the plugin and ensuring `gcov` is installed, no further set up +is necessary to produce these summaries. -## Installation of Report Generation Tools +_Note_: Automatic summaries may be disabled (see configuration options below). -[gcovr](https://www.gcovr.com/) is available on any platform supported by Python. +When the Gcov plugin is active it enables Ceedling tasks like this: + +```shell + > ceedling gcov:Model +``` -gcovr can be installed via pip like so: +… that then generate output like this: -```sh -pip install gcovr ``` +-------------------------- +GCOV: OVERALL TEST SUMMARY +-------------------------- +TESTED: 1 +PASSED: 1 +FAILED: 0 +IGNORED: 0 + +--------------------------- +GCOV: CODE COVERAGE SUMMARY +--------------------------- + +TestModel +--------- +Model.c | Lines executed:100.00% of 4 +Model.c | No branches +Model.c | No calls +TimerModel.c | Lines executed:0.00% of 3 +TimerModel.c | No branches +TimerModel.c | No calls +``` + +# Advanced Coverage Reports + +For more advanced visualizations and reporting, this plugin also supports a +variety of report generation options. + +Advanced report generation uses [gcovr] and / or [ReportGenerator] to generate +HTML, XML, JSON, or text-based reports from coverage-instrumented test runs. +See the tools' respective sites for examples of the reports they can generate. + +In the default configuration, if reports are enabled, this plugin automatically +generates reports in the build's `artifacts/` directory after each execution of +a `gcov:` task. + +An optional setting documented below disables automatic report generation, +providing a separate Ceedling task instead. Reports can then be generated +on demand after test suite runs. + +[gcovr]: https://www.gcovr.com/ +[ReportGenerator]: https://reportgenerator.io + +# Important Notes on Coverage Summaries vs. Coverage Reports + +Coverage summaries and coverage reports provide different levels of fidelity +and usability. Summaries are relatively unsophisticated while reports are +sophisticated. As such, both provide different capabilities and levels of +usability. + +## Coverage summaries + +Optional coverage summaries are intentionally simple. They require no +configuration and, to oversimplify, are largely filtered output from the `gcov` +tool. + +Coverage summaries are reported to the console for each source file exercised by +the tests executed by `gcov:` tasks. That is, coverage summaries correspond to +the tests executed, and in turn, the source code that your tests call. This +could be all tests (and thus all source code) or a subset of tests (and some +subset of source code). The `gcov` tool is run multiple times after test suite +execution in direct relation to the set of tests you ran with `gcov:` testing +tasks. In short, the scope of coverage summaries is guaranteed to match the +test suite you run. + +Coverage summaries do not include any sort of grand total, final tallies. This +is the domain of full coverage reports. + +Note that Ceedling can exercise the same source code under multiple scenarios +using multiple test files. Practically, this means that the same source file +may be listed in the coverage summaries more than once. That said, its coverage +statistics will be the same each time — the aggregate result of all tests that +exercised it. + +## Coverage reports + +Coverage reports provide both much more detail and better overviews of coverage +than the console-based coverage summaries. However, with this comes the need +for more sophisticated configuration and certain caveats on what is reported. + +Later sections detail how to configure the reports this plugin can generate. + +Of note is a consequence of how reports are generated and the limits of the +tools that do so. Reports are generated using coverage results on disk. The +report generation tools slurp up the coverage results they find in the `gcov/` +build output directory. This means that previous test suite runs can “pollute” +coverage reports. The solution is simple if blunt — run the `clobber` task +before running a coverage-instrumented test suite. This will yield a coverage +report with scope that matches that of the test suite you run. + +Both the `gcovr` and `reportgeneator` reporting utilities include powerful +filters that can limit the scope of reports. Hypothetically, it's possible for +coverage reports to have the same clear scope as coverage summaries. However, +in large projects, these filters would cause impractically long command lines. +Both tools provide configuration file options that would solve the command line +problem. However, this feature is “experimental” for `gcovr` and considerable +work to implement for both reporting utilities. At present, running +`ceedling clobber` before generating reports is the best option to ensure +accurate reports. + +# Plugin Set Up & Configuration + +## Supported tool versions [May 10, 2024] + +At the time of the last major updates to the Gcov plugin, the following notes +on version compatibility were known to be accurate. + +Keep in mind that for proper functioning, you do not necessarily need to +install all the tooks the Gcov plugin works with. Depending on configuration +options documented in later sections, any of the following tool combinations +may be sufficient for your needs: + +1. `gcov` +1. `gcov` + `gcovr` +1. `gcov` + `reportgenerator` +1. `gcov` + `gcovr` + `reportgenerator` + +### `gcov` + +The Gcov plugin is known to work with `gcov` packaged with GNU Compiler +Collection 12.2 and should work with versions through at least 14. + +The maintainers of `gcov` introduced significant behavioral changes for version +12. Previous versions of `gcov` had a simple exit code scheme with only a +single non-zero exit code upon fatal errors. Since version 12 `gcov` emits a +variety of exit codes even if the noted issue is a non-fatal error. The Gcov +plugin’s logic assumes version 12 behavior and processes failure messages and +exit codes appropriately, taking into account plugin configuration options. + +The Gcov plugin should be compatible with versions of `gcov` before version 12. +That is, its improved `gcov` exit handling should not be broken by the prior +simpler behavior. The Gcov plugin dependes on the `gcov` command line and has +been compatible with it as far back as `gcov` version 7. + +Because long file paths are quite common in software development scenarios, by +default, the Gcov plugin depends on the `gcov` `-x` flag. This flag hashes long +file paths to ensure they are not a problem for certain platforms' file +systems. This flag became available with `gcov` version 7. At the time of this +README section’s last update, the GNU Compiler Collection was at version 14. We +do not recommend using `gcov` version 6 and earlier. And, in fact, because of +the Gcov plugin’s dependence on the `gcov` `-x` flag, attempting to use it will +fail. + +### `gcovr` + +The Gcov plugin is known to work with `gcovr` 5.2 through `gcovr` 6.x. The +Gcov plugin supports `gcovr` command line conventions since version 4.2 and +attempts to support `gcovr` command lines before version 4.2. We recommend +using `gcovr` 5 and later. + +### `reportgenerator` + +The Gcov plugin is known to work with `reportgenerator` 5.2.4. The command line +for executing `reportgenerator` that the Gcov plugin relies on has largely been +stable since version 4. We recommend using `reportgenerator` 5.0 and later. + +## Toolchain dependencies + +### GNU Compiler Collection + +This plugin relies on the GNU compiler collection. Coverage instrumentation +is enabled through `gcc` compiler flags. Coverage-insrumented executables +(i.e. test suites) output coverage result files to disk when run. `gcov`, +`gcovr`, and `reportgenerator` (the tools managed by this plugin) all produce +their coverage tallies from these files. `gcov` is part of the GNU compiler +collection. The other tools — detailed below — require separate installation. + +Ceedling's default toolchain is the same as needed by this plugin. If you +are already running Ceedling test suites with the GNU compiler toolchain, +you are good to go. If you are using another toolchain for test suite and/or +release builds you will need to install the GNU compiler collection to use +this plugin. Depending on your needs you may also need to install the reporting +utilities, `gcovr` and/or `reportgenerator`. + +### `gcovr` and `reportgenerator`’s dependence on `gcov` + +Both the `gcovr` and `reportgenerator` tools depend on the `gcov` tool. This +dependency plays out in two different ways. In both cases, the report +generation utilities ingest `gcov`'s output to produce their artifacts. As +such, `gcov` must be available in your environment if using report generation. + +1. `gcovr` calls `gcov` directly. + + Because it calls `gcov` directly, you are limited as to the + advanced Ceedling features you can employ to modify `gcov`'s execution. + However, with a configuration option (see below) you can instruct `gcovr` + to call something other than `gcov` (e.g. a script that intercepts and + modifies how `gcovr` calls out to `gcov`). -[ReportGenerator](https://reportgenerator.io) is available on any platform supported by .Net. + `gcovr` instructs `gcov` to generate `.gcov` files that it processes and + discards. A `gcovr` option documented below will retain the `.gcov` files. -It can be installed via .NET Core like so: +2. `reportgenerator` expects the existence of `.gcov` files to do its work. + This Ceedling plugin calls `gcov` appropriately to generate the `.gcov` + files `reportgenerator` needs before then calling the report utility. -```sh -dotnet tool install -g dotnet-reportgenerator-globaltool + You can use Ceedling's features to modify how `gcov` is run before + `reportgenerator`. + +## Enable this plugin + +To use this plugin it must be enabled in your Ceedling project file: + +```yaml +:plugins: + :enabled: + - gcov ``` -It is not required to install both `gcovr` and `ReportGenerator`. Either utility -may be installed, or both utilities may be used. If reports are configured but -no `utilities:` section exists, `gcovr` is the default tool. +This simple configuration will create new `gcov:` tasks to run tests with +source coverage and output simple coverage summaries to the console as above. + +## Disabling automatic coverage summaries -## Plugin Configuration +To disable the coverage summaries generated immediately following `gcov:` tasks, +simply add the following to a top-level `:gcov:` section in your project +configuration file. -The gcov plugin supports configuration options via your `project.yml` provided -by Ceedling. +```yaml +:plugins: + :enabled: + - gcov + +:gcov: + :summaries: FALSE +``` -### Utilities +## Report generation + +To generate reports: + +1. GCovr and / or ReportGenerator must installed or otherwise ready to run in + Ceedling's environment. +1. Reporting options must be configured in your project file beneath a `:gcov:` + entry. + +The next sections explain each of these steps. + +### Installation of report generation utilities + +[gcovr] is available on any platform supported by Python. + +`gcovr` can be installed via pip like this: + +```shell + > pip install gcovr +``` -Gcovr and / or ReportGenerator may be enabled to create coverage reports. +[ReportGenerator] is available on any platform supported by .Net. + +`ReportGenerator` can be installed via .NET Core like so: + +```shell + > dotnet tool install -g dotnet-reportgenerator-globaltool +``` + +Either or both of `gcovr` or `ReportGenerator` may be used. Only one must +be installed for advanced report generation. + +## Enabling report generation utilities + +If reports are configured (see next sections) but no `:utilities:` subsection +exists, this plugin defaults to using `gcovr` for report generation. + +Otherwise, enable Gcovr and / or ReportGenerator to create coverage reports. ```yaml :gcov: :utilities: - - gcovr # Use gcovr to create the specified reports (default). - - ReportGenerator # Use ReportGenerator to create the specified reports. + - gcovr # Use `gcovr` to create reports (default if no :utilities set). + - ReportGenerator # Use `ReportGenerator` to create reports. ``` -### Reports +## Automatic and manual report generation -By default, if report generation is configured, this plugin automatically -generates reports after any `gcov:` task is executed. To disable this behavior, -add `:report_task: TRUE` to your `:gcov:` configuration. +By default, if reports are specified, this plugin automatically generates +reports after any `gcov:` task is executed. To disable this behavior, add +`:report_task: TRUE` to your project file's `:gcov:` configuration. -With this setting enabled, an additional Ceedling task `report:gcov` is created. +With this setting enabled, an additional Ceedling task `report:gcov` is enabled. It may be executed after `gcov:` tasks to generate the configured reports. -For small projects, the default behavior is likely preferred. Alternatively, this +For small projects, the default behavior is likely preferred. This alernative setting allows large or complex projects to execute potentially time intensive report generation only when desired. +Enabling the manual report generation task looks like this: + ```yaml :gcov: - :report_task: [TRUE|FALSE] + :report_task: TRUE ``` -## Example Usage -_Note_: Basic coverage statistics are always printed to the console regardless of -report generation options. +# Example Usage + +_Note_: Unless disabled, basic coverage summaries are always printed to the +console regardless of report generation options. + +## Automatic report generation (default) -### With automatic coverage report generation (default) If coverage report generation is configured, the plugin defaults to running reports after any `gcov:` task. -```sh -ceedling gcov:all +```yaml +:plugins: + :enabled: + - gcov + +:gcov: + :utilities: + - gcovr # Enabled by default -- shown for completeness + :report_task: FALSE # Disabled by default -- shown for completeness + :reports: # See later section for report configuration + - HtmlBasic + + ... # Further configuration for reporting (not shown) + +``` + +```shell + > ceedling gcov:all ``` -### With coverage report generation configured as an additional task +## Report generation configured as manual task + If the `:report_task:` configuration option is enabled, reports are not -automatically generaed after test suite coverage builds. Instead, report generation -is triggered by the `report:gcov` task. +automatically generaed after test suite coverage builds. Instead, report +generation is triggered by the `report:gcov` task. + +```yaml +:plugins: + :enabled: + - gcov + +:gcov: + :utilities: + - gcovr # Enabled by default -- shown for completeness + :report_task: TRUE + :reports: # See later section for report configuration + - HtmlBasic # Enabled by default -- shown for completeness + + ... # Further configuration for reporting (not shown) -```sh -ceedling gcov:all report:gcov ``` -```sh -ceedling gcov:all -ceedling report:gcov +With the separate reporting task enabled, it can be used like any other Ceedling task. + +```shell + > ceedling gcov:all report:gcov ``` -## Report Generation Configuration +or + +```shell + > ceedling gcov:all + + > ceedling report:gcov +``` -Various reports are available and may be enabled with the following -configuration items. See the specific report sections that follow -for additional options and information. All generated reports will be -found in `build/artifacts/gcov`. +### Full report generation configuration example + +```yaml +:plugins: + :enabled: + - gcov + +:gcov: + :summaries: FALSE # Simple coverage summaries to console disabled + :reports: # `gcovr` tool enabled by default + - HtmlDetailed + - Text + - Cobertura + :gcovr: # `gcovr` common and report-specific options + :report_root: "../../" # Atypical layout -- project.yml is inside a subdirectoy below + :sort_percentage: TRUE + :sort_uncovered: FALSE + :html_medium_threshold: 60 + :html_high_threshold: 85 + :print_summary: TRUE + :threads: 4 + :keep: FALSE +``` + +# Report Generation Configuration + +Various reports are available. Each must be enabled in `:gcov` ↳ `:reports`. + +If no report types are specified, report generation (but not coverage summaries) +is disabled regardless of any other setting. + +Most report types can only be generated by `gcovr` or `ReportGenerator`. Some +can be generated by both. This means that your selection of report is impacted by +which generation utility is enabled. In fact, in some cases, the same report type +could be generated by each utility (to different artifact build output folders). + +Reports are configured with: + +1. General or common options for each report generation utility +1. Specific options for types of report per each report generation utility + +These are detailed in the sections that follow. See the +[GCovr User Guide][gcovr-user-guide] and the +[ReportGenerator Wiki][report-generator-wiki] for full details. + +[gcovr-user-guide]: https://www.gcovr.com/en/stable/guide.html +[report-generator-wiki]: https://github.com/danielpalme/ReportGenerator/wiki ```yaml :gcov: # Specify one or more reports to generate. # Defaults to HtmlBasic. :reports: - # Make an HTML summary report. + # Generate an HTML summary report. # Supported utilities: gcovr, ReportGenerator - HtmlBasic - # Make an HTML report with line by line coverage of each source file. + # Generate an HTML report with line by line coverage of each source file. # Supported utilities: gcovr, ReportGenerator - HtmlDetailed - # Make a Text report, which may be output to the console with gcovr or a file in both gcovr and ReportGenerator. + # Generate a Text report, which may be output to the console with gcovr or a file in both gcovr and ReportGenerator. # Supported utilities: gcovr, ReportGenerator - Text - # Make a Cobertura XML report. + # Generate a Cobertura XML report. # Supported utilities: gcovr, ReportGenerator - Cobertura - # Make a SonarQube XML report. + # Generate a SonarQube XML report. # Supported utilities: gcovr, ReportGenerator - SonarQube - # Make a JSON report. + # Generate a JSON report. # Supported utilities: gcovr - JSON - # Make a detailed HTML report with CSS and JavaScript included in every HTML page. Useful for build servers. + # Generate a detailed HTML report with CSS and JavaScript included in every HTML page. Useful for build servers. # Supported utilities: ReportGenerator - HtmlInline - # Make a detailed HTML report with a light theme and CSS and JavaScript included in every HTML page for Azure DevOps. + # Generate a detailed HTML report with a light theme and CSS and JavaScript included in every HTML page for Azure DevOps. # Supported utilities: ReportGenerator - HtmlInlineAzure - # Make a detailed HTML report with a dark theme and CSS and JavaScript included in every HTML page for Azure DevOps. + # Generate a detailed HTML report with a dark theme and CSS and JavaScript included in every HTML page for Azure DevOps. # Supported utilities: ReportGenerator - HtmlInlineAzureDark - # Make a single HTML file containing a chart with historic coverage information. + # Generate a single HTML file containing a chart with historic coverage information. # Supported utilities: ReportGenerator - HtmlChart - # Make a detailed HTML report in a single file. + # Generate a detailed HTML report in a single file. # Supported utilities: ReportGenerator - MHtml - # Make SVG and PNG files that show line and / or branch coverage information. + # Generate SVG and PNG files that show line and / or branch coverage information. # Supported utilities: ReportGenerator - Badges - # Make a single CSV file containing coverage information per file. + # Generate a single CSV file containing coverage information per file. # Supported utilities: ReportGenerator - CsvSummary - # Make a single TEX file containing a summary for all files and detailed reports for each files. + # Generate a single TEX file containing a summary for all files and detailed reports for each files. # Supported utilities: ReportGenerator - Latex - # Make a single TEX file containing a summary for all files. + # Generate a single TEX file containing a summary for all files. # Supported utilities: ReportGenerator - LatexSummary - # Make a single PNG file containing a chart with historic coverage information. + # Generate a single PNG file containing a chart with historic coverage information. # Supported utilities: ReportGenerator - PngChart @@ -182,40 +517,32 @@ found in `build/artifacts/gcov`. # Supported utilities: ReportGenerator - TeamCitySummary - # Make a text file in lcov format. + # Generate a text file in lcov format. # Supported utilities: ReportGenerator - lcov - # Make a XML file containing a summary for all classes and detailed reports for each class. + # Generate a XML file containing a summary for all classes and detailed reports for each class. # Supported utilities: ReportGenerator - Xml - # Make a single XML file containing a summary for all files. + # Generate a single XML file containing a summary for all files. # Supported utilities: ReportGenerator - XmlSummary ``` -### Gcovr HTML Reports +## Gcovr report output + +All reports generated by `gcovr` are found in `/artifacts/gcov/gcovr/`. -Generation of Gcovr HTML reports may be modified with the following configuration items. +## Gcovr HTML reports + +Generation of HTML reports may be modified with the following configuration items. ```yaml :gcov: - # Set to 'true' to enable HTML reports or set to 'false' to disable. - # Defaults to enabled. (gcovr --html) - # Deprecated - See the :reports: configuration option. - :html_report: [true|false] - - # Gcovr supports generating two types of HTML reports. Use 'basic' to create - # an HTML report with only the overall file information. Use 'detailed' to create - # an HTML report with line by line coverage of each source file. - # Defaults to 'basic'. Set to 'detailed' for (gcovr --html-details). - # Deprecated - See the :reports: configuration option. - :html_report_type: [basic|detailed] - :gcovr: # HTML report filename. - :html_artifact_filename: + :html_artifact_filename: # Use 'title' as title for the HTML report. # Default is 'Head'. (gcovr --html-title) @@ -235,46 +562,39 @@ Generation of Gcovr HTML reports may be modified with the following configuratio # Set to 'true' to use absolute paths to link the 'detailed' reports. # Defaults to relative links. (gcovr --html-absolute-paths) - :html_absolute_paths: [true|false] + :html_absolute_paths: # Override the declared HTML report encoding. Defaults to UTF-8. (gcovr --html-encoding) :html_encoding: ``` -### Cobertura XML Reports +## Gcovr Cobertura XML reports Generation of Cobertura XML reports may be modified with the following configuration items. ```yaml :gcov: - # Set to 'true' to enable Cobertura XML reports or set to 'false' to disable. - # Defaults to disabled. (gcovr --xml) - # Deprecated - See the :reports: configuration option. - :xml_report: [true|false] - :gcovr: # Set to 'true' to pretty-print the Cobertura XML report, otherwise set to 'false'. # Defaults to disabled. (gcovr --xml-pretty) - :xml_pretty: [true|false] - :cobertura_pretty: [true|false] + :cobertura_pretty: - # Cobertura XML report filename. - :xml_artifact_filename: - :cobertura_artifact_filename: + # Override default Cobertura XML report filename. + :cobertura_artifact_filename: ``` -### SonarQube XML Reports +## Gcovr SonarQube XML reports Generation of SonarQube XML reports may be modified with the following configuration items. ```yaml :gcov: :gcovr: - # SonarQube XML report filename. - :sonarqube_artifact_filename: + # Override default SonarQube XML report filename. + :sonarqube_artifact_filename: ``` -### JSON Reports +## Gcovr JSON reports Generation of JSON reports may be modified with the following configuration items. @@ -283,13 +603,13 @@ Generation of JSON reports may be modified with the following configuration item :gcovr: # Set to 'true' to pretty-print the JSON report, otherwise set 'false'. # Defaults to disabled. (gcovr --json-pretty) - :json_pretty: [true|false] + :json_pretty: - # JSON report filename. - :json_artifact_filename: + # Override default JSON report filename. + :json_artifact_filename: ``` -### Text Reports +## Gcovr text reports Generation of text reports may be modified with the following configuration items. Text reports may be printed to the console or output to a file. @@ -297,194 +617,270 @@ Text reports may be printed to the console or output to a file. ```yaml :gcov: :gcovr: - # Text report filename. - # The text report is printed to the console when no filename is provided. - :text_artifact_filename: + # Override default text report filename. + :text_artifact_filename: ``` -### Common Report Options - -There are a number of options to control which files are considered part of -the coverage report. Most often, we only care about coverage on our source code, and not -on tests or automatically generated mocks, runners, etc. However, there are times -where this isn't true... or there are times where we've moved ceedling's directory -structure so that the project file isn't at the root of the project anymore. In these -cases, you may need to tweak `report_include`, `report_exclude`, and `exclude_directories`. +## Common gcovr options -One important note about `report_root`: gcovr will take only a single root folder, unlike -Ceedling's ability to take as many as you like. So you will need to choose a folder which is -a superset of ALL the folders you want, and then use the include or exclude options to set up -patterns of files to pay attention to or ignore. It's not ideal, but it works. +A number of options exist to control which files are considered part of a +coverage report. This Ceedling gcov plugin itself handles the most important +aspect — only source files under test are compiled with coverage. Tests, mocks, +and test runners, are not compiled with coverage. -Finally, there are a number of settings which can be specified to adjust the -default behaviors of gcovr: +**Note:** `gcovr` will only accept a single path for `:report_root`. In typical +usage, this is of no concern as it is handled automatically. In unusual project +layouts, you may need to specify a folder that encompasses _all_ build folders +containing coverage result files and optionally, selectively exclude patterns +of paths or files. For instance, if your Ceedling project file is not at the +root of your project, you may need set `:report_root` as well as +`:report_exclude` and `:exclude_directories`. ```yaml :gcov: :gcovr: # The root directory of your source files. Defaults to ".", the current directory. # File names are reported relative to this root. The report_root is the default report_include. - :report_root: "." + # Default if unspecified: "." + :report_root: # Load the specified configuration file. # Defaults to gcovr.cfg in the report_root directory. (gcovr --config) :config_file: - # Exit with a status of 2 if the total line coverage is less than MIN. - # Can be ORed with exit status of 'fail_under_branch' option. (gcovr --fail-under-line) - :fail_under_line: 30 + # Exit with a status of 2 if the total line coverage is less than MIN percentage. + # Can be ORed with exit status of other fail options. (gcovr --fail-under-line) + :fail_under_line: <1-100> + + # Exit with a status of 4 if the total branch coverage is less than MIN percentage. + # Can be ORed with exit status of other fail options. (gcovr --fail-under-branch) + :fail_under_branch: <1-100> + + # Exit with a status of 8 if the total decision coverage is less than MIN percentage. + # Can be ORed with exit status of other fail options. (gcovr --fail-under-decision) + :fail_under_decision: <1-100> + + # Exit with a status of 16 if the total function coverage is less than MIN percentage. + # Can be ORed with exit status of other fail options. (gcovr --fail-under-function) + :fail_under_function: <1-100> - # Exit with a status of 4 if the total branch coverage is less than MIN. - # Can be ORed with exit status of 'fail_under_line' option. (gcovr --fail-under-branch) - :fail_under_branch: 30 + # If the fail options above are set, specify whether those conditions should break a build. + # The default option is false and simply logs a warning without breaking the build. + :exception_on_fail: # Select the source file encoding. # Defaults to the system default encoding (UTF-8). (gcovr --source-encoding) - :source_encoding: + :source_encoding: # Report the branch coverage instead of the line coverage. For text report only. (gcovr --branches). - :branches: [true|false] + :branches: # Sort entries by increasing number of uncovered lines. # For text and HTML report. (gcovr --sort-uncovered) - :sort_uncovered: [true|false] + :sort_uncovered: # Sort entries by increasing percentage of uncovered lines. # For text and HTML report. (gcovr --sort-percentage) - :sort_percentage: [true|false] + :sort_percentage: # Print a small report to stdout with line & branch percentage coverage. # This is in addition to other reports. (gcovr --print-summary). - :print_summary: [true|false] + :print_summary: # Keep only source files that match this filter. (gcovr --filter). - :report_include: "^src" + # Filters are regular expressions (ex: "^src") + :report_include: # Exclude source files that match this filter. (gcovr --exclude). - :report_exclude: "^vendor.*|^build.*|^test.*|^lib.*" + # Filters are regular expressions (ex: "^vendor.*|^build.*|^test.*|^lib.*") + :report_exclude: # Keep only gcov data files that match this filter. (gcovr --gcov-filter). - :gcov_filter: + # Filters are regular expressions + :gcov_filter: # Exclude gcov data files that match this filter. (gcovr --gcov-exclude). - :gcov_exclude: + # Filters are regular expressions + :gcov_exclude: - # Exclude directories that match this regex while searching + # Exclude directories that match this filter while searching # raw coverage files. (gcovr --exclude-directories). - :exclude_directories: + # Filters are regular expressions + :exclude_directories: # Use a particular gcov executable. (gcovr --gcov-executable). - :gcov_executable: + # (This may be appropriate and necessary in special circumstances. + # Please review Ceedling's options for modifying tools first.) + :gcov_executable: # Exclude branch coverage from lines without useful # source code. (gcovr --exclude-unreachable-branches). - :exclude_unreachable_branches: [true|false] + :exclude_unreachable_branches: # For branch coverage, exclude branches that the compiler # generates for exception handling. (gcovr --exclude-throw-branches). - :exclude_throw_branches: [true|false] + :exclude_throw_branches: # Use existing gcov files for analysis. Default: False. (gcovr --use-gcov-files) - :use_gcov_files: [true|false] + :use_gcov_files: # Skip lines with parse errors in GCOV files instead of # exiting with an error. (gcovr --gcov-ignore-parse-errors). - :gcov_ignore_parse_errors: [true|false] + :gcov_ignore_parse_errors: # Override normal working directory detection. (gcovr --object-directory) - :object_directory: + :object_directory: # Keep gcov files after processing. (gcovr --keep). - :keep: [true|false] + :keep: # Delete gcda files after processing. (gcovr --delete). - :delete: [true|false] + :delete: # Set the number of threads to use in parallel. (gcovr -j). - :threads: + :threads: ``` -### ReportGenerator Configuration +## ReportGenerator configuration -The ReportGenerator utility may be configured with the following configuration items. -All generated reports may be found in `build/artifacts/gcov/ReportGenerator`. +The `ReportGenerator` utility may be configured with the following configuration items. + +All generated reports are found in `/artifacts/gcov/ReportGenerator/`. ```yaml :gcov: :report_generator: # Optional directory for storing persistent coverage information. # Can be used in future reports to show coverage evolution. - :history_directory: + :history_directory: # Optional plugin files for custom reports or custom history storage (separated by semicolon). - :plugins: CustomReports.dll + :plugins: ;<*.dll> - # Optional list of assemblies that should be included or excluded in the report (separated by semicolon).. + # Optional list of assemblies that should be included or excluded in the report (separated by semicolon). # Exclusion filters take precedence over inclusion filters. # Wildcards are allowed, but not regular expressions. - :assembly_filters: "+Included;-Excluded" + :assembly_filters: +;- - # Optional list of classes that should be included or excluded in the report (separated by semicolon).. + # Optional list of classes that should be included or excluded in the report (separated by semicolon). # Exclusion filters take precedence over inclusion filters. # Wildcards are allowed, but not regular expressions. - :class_filters: "+Included;-Excluded" + :class_filters: +;- - # Optional list of files that should be included or excluded in the report (separated by semicolon).. + # Optional list of files that should be included or excluded in the report (separated by semicolon). # Exclusion filters take precedence over inclusion filters. # Wildcards are allowed, but not regular expressions. - :file_filters: "-./vendor/*;-./build/*;-./test/*;-./lib/*;+./src/*" + # Example: "-./vendor/*;-./build/*;-./test/*;-./lib/*;+./src/*" + :file_filters: +;- # The verbosity level of the log messages. - # Values: Verbose, Info, Warning, Error, Off - :verbosity: Warning + # Values: Verbose, Info, Warning, Error, Off (defaults to Warning) + :verbosity: # Optional tag or build version. :tag: # Optional list of one or more regular expressions to exclude gcov notes files that match these filters. :gcov_exclude: - - - - - - # Optionally use a particular gcov executable. Defaults to gcov. - :gcov_executable: + - + - ... # Optionally set the number of threads to use in parallel. Defaults to 1. - :threads: + :threads: # Optional list of one or more command line arguments to pass to Report Generator. # Useful for configuring Risk Hotspots and Other Settings. # https://github.com/danielpalme/ReportGenerator/wiki/Settings + # Note: This can be accomplished with Ceedling's tool configuration options outside of plugin + # configuration but is supported here to collect configuration options in one place. :custom_args: - - - - + - + - ... ``` -## Known issues -### Empty Gcovr report with Gcovr 4.2+ -- If you are facing an empty gcovr report with version 4.2+ try to specify the folder you want to get a coverage. -```bash -├── Includes -├── Sources -└── UnitTestFramework - └──project.yml +# Advanced Configuration & Troubleshooting + +See the _Ceedling Cookbook_ for options on how to use Ceedling's advanced +features to modify how this plugin is configured, especially tool +configurations. + +Details of interest for this plugin to be modified or made use of using +Ceedling's advanced features are primarily contained in +[defaults_gcov.rb](conig/defaults_gcov.rb) and [defaults.yml](config/defaults.yml). + +## “gcovr not found” + +`gcovr` is a Python-based application. Depending on the particulars of its +installation and your platform, you may encounter a “gcovr not found” error. +This is usually related to complications of running a Python script as an +executable. + +### Check your `PATH` + +The problem may be as simple to solve as ensuring your user or system path +include the path to `python` and/or the `gcovr` script. `gcovr` may be +successfully installed and findable by Python; this does not necessarily +mean that shell commands Ceedling spawns can find these tools. + +Options: + +1. Modify your user or system path to include your Python installation, `gcovr` + location, or both. +1. Use Ceedling's `:environment` project configuration with its special + handling of `PATH` to modify the search path Ceedling accesses when it + executes shell commands. xample below. + +```yaml +:environment: + - :path: # Concatenates the following with OS-specific path separator + - # Add Python and/or `gcovr` path + - "#{ENV['PATH']}" # Fetch existing path entries ``` +### Redefine `gcovr` to call Python directly + +Another solution is simple in concept. Instead of calling `gcovr` directly, call +`python` with the `gcovr` script as a command line argument (followed by all of +the configured `gcovr` arguments). + +To implement the solution, we make use of two features: + +* `gcovr`'s tool `:executable` definition that looks up an environment variable. +* Ceedling's `:environment` settings to redefine `gcovr`. + +Gcovr's tool defintion, like many of Ceedling's tool defintions, defaults to an +environment variable (`GCOVR`) if it is defined. If we set that environment +variable to call Python with the path to the `gcovr` script, Ceedling will call +that instead of only `gcovr`. Ceedling enables you to set environment variables +that only exist while it runs. + +In your project file: + ```yaml -:gcov: - :gcovr: - # Keep only source files that match this filter. (gcovr --filter). - :report_include: "^../Sources.*" - ``` +:environment: + # Fill in / omit paths on your system as appropritate to your circumstances + - :gcovr: /python /gcovr +``` + +Alternatively, a slightly more elegant approach may work in some cases: + +```yaml +:environment: + - ":gcovr: python #{`which gcovr`}" # Shell out to look up the path to gcovr +``` +A variation of this concept relies on Python's knowledge of its runtime +environment and packages: -## To-Do list +```yaml +:environment: + - :gcovr: python -m gcovr # Call the gcovr module +``` -- Generate overall report (combined statistics from all files with coverage) +# References -## Citations +Much of the text describing report generations options in this document was +taken from the [Gcovr User Guide][gcovr-user-guide] and the +[ReportGenerator Wiki][report-generator-wiki]. -Most of the comment text which describes the options was taken from the -[Gcovr User Guide](https://www.gcovr.com/en/stable/guide.html) and the -[ReportGenerator Wiki](https://github.com/danielpalme/ReportGenerator/wiki). -The text is repeated here to provide the most accurate option functionality. +The text is repeated here to provide as useful documenation as possible. diff --git a/tools/vendor/ceedling/plugins/gcov/assets/template.erb b/tools/vendor/ceedling/plugins/gcov/assets/template.erb deleted file mode 100644 index 5e5a1742..00000000 --- a/tools/vendor/ceedling/plugins/gcov/assets/template.erb +++ /dev/null @@ -1,15 +0,0 @@ -% function_string = hash[:coverage][:functions].to_s -% branch_string = hash[:coverage][:branches].to_s -% format_string = "%#{[function_string.length, branch_string.length].max}i" -<%=@ceedling[:plugin_reportinator].generate_banner("#{GCOV_ROOT_NAME.upcase}: CODE COVERAGE SUMMARY")%> -% if (!hash[:coverage][:functions].nil?) -FUNCTIONS: <%=sprintf(format_string, hash[:coverage][:functions])%>% -% else -FUNCTIONS: none -% end -% if (!hash[:coverage][:branches].nil?) -BRANCHES: <%=sprintf(format_string, hash[:coverage][:branches])%>% -% else -BRANCHES: none -% end - diff --git a/tools/vendor/ceedling/plugins/gcov/config/defaults.yml b/tools/vendor/ceedling/plugins/gcov/config/defaults.yml new file mode 100644 index 00000000..8bfb86d6 --- /dev/null +++ b/tools/vendor/ceedling/plugins/gcov/config/defaults.yml @@ -0,0 +1,22 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + +--- +:gcov: + :summaries: TRUE # Enable simple coverage summaries to console after tests + :report_task: FALSE # Disabled dedicated report generation task (this enables automatic report generation) + :utilities: + - gcovr # Defaults to `gcovr` as report generation utility + :reports: [] # User must specify a report to enable report generation + :gcovr: + :report_root: "." # Gcovr defaults to scanning for results starting in working directory + :report_generator: + :verbosity: Warning # Default verbosity + :collection_paths_source: [] # Explicitly defined as default empty array to simplify option validation code + :custom_args: [] # Explicitly defined as default empty array to simplify option validation code + :gcov_exclude: [] # Explicitly defined as default empty array to simplify option validation code +... diff --git a/tools/vendor/ceedling/plugins/gcov/config/defaults_gcov.rb b/tools/vendor/ceedling/plugins/gcov/config/defaults_gcov.rb index ed4e756e..8107bbbe 100644 --- a/tools/vendor/ceedling/plugins/gcov/config/defaults_gcov.rb +++ b/tools/vendor/ceedling/plugins/gcov/config/defaults_gcov.rb @@ -1,20 +1,24 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= DEFAULT_GCOV_COMPILER_TOOL = { - :executable => ENV['CC'].nil? ? FilePathUtils.os_executable_ext('gcc').freeze : ENV['CC'].split[0], + :executable => ENV['GCOV_CC'].nil? ? FilePathUtils.os_executable_ext('gcc').freeze : ENV['GCOV_CC'], :name => 'default_gcov_compiler'.freeze, - :stderr_redirect => StdErrRedirect::NONE.freeze, :optional => false.freeze, :arguments => [ "-g".freeze, "-fprofile-arcs".freeze, "-ftest-coverage".freeze, - ENV['CC'].nil? ? "" : ENV['CC'].split[1..-1], - ENV['CPPFLAGS'].nil? ? "" : ENV['CPPFLAGS'].split, + ENV['GCOV_CPPFLAGS'].nil? ? "" : ENV['GCOV_CPPFLAGS'].split, "-I\"${5}\"".freeze, # Per-test executable search paths "-D\"${6}\"".freeze, # Per-test executable defines "-DGCOV_COMPILER".freeze, "-DCODE_COVERAGE".freeze, - ENV['CFLAGS'].nil? ? "" : ENV['CFLAGS'].split, + ENV['GCOV_CFLAGS'].nil? ? "" : ENV['GCOV_CFLAGS'].split, "-c \"${1}\"".freeze, "-o \"${2}\"".freeze, # gcc's list file output options are complex; no use of ${3} parameter in default config @@ -24,38 +28,35 @@ } DEFAULT_GCOV_LINKER_TOOL = { - :executable => ENV['CCLD'].nil? ? FilePathUtils.os_executable_ext('gcc').freeze : ENV['CCLD'].split[0], + :executable => ENV['GCOV_CCLD'].nil? ? FilePathUtils.os_executable_ext('gcc').freeze : ENV['GCOV_CCLD'], :name => 'default_gcov_linker'.freeze, - :stderr_redirect => StdErrRedirect::NONE.freeze, :optional => false.freeze, :arguments => [ "-g".freeze, "-fprofile-arcs".freeze, "-ftest-coverage".freeze, - ENV['CCLD'].nil? ? "" : ENV['CCLD'].split[1..-1], - ENV['CFLAGS'].nil? ? "" : ENV['CFLAGS'].split, - ENV['LDFLAGS'].nil? ? "" : ENV['LDFLAGS'].split, + ENV['GCOV_CFLAGS'].nil? ? "" : ENV['GCOV_CFLAGS'].split, + ENV['GCOV_LDFLAGS'].nil? ? "" : ENV['GCOV_LDFLAGS'].split, "${1}".freeze, "${5}".freeze, "-o \"${2}\"".freeze, "${4}".freeze, - ENV['LDLIBS'].nil? ? "" : ENV['LDLIBS'].split + ENV['GCOV_LDLIBS'].nil? ? "" : ENV['GCOV_LDLIBS'].split ].freeze } DEFAULT_GCOV_FIXTURE_TOOL = { :executable => '${1}'.freeze, :name => 'default_gcov_fixture'.freeze, - :stderr_redirect => StdErrRedirect::AUTO.freeze, :optional => false.freeze, :arguments => [].freeze } -DEFAULT_GCOV_REPORT_TOOL = { - :executable => ENV['GCOV'].nil? ? FilePathUtils.os_executable_ext('gcov').freeze : ENV['GCOV'].split[0], - :name => 'default_gcov_report'.freeze, - :stderr_redirect => StdErrRedirect::NONE.freeze, - :optional => false.freeze, +# Produce summaries printed to console +DEFAULT_GCOV_SUMMARY_TOOL = { + :executable => ENV['GCOV_SUMMARY'].nil? ? FilePathUtils.os_executable_ext('gcov').freeze : ENV['GCOV_SUMMARY'], + :name => 'default_gcov_summary'.freeze, + :optional => true.freeze, :arguments => [ "-n".freeze, "-p".freeze, @@ -65,10 +66,10 @@ ].freeze } -DEFAULT_GCOV_GCOV_POST_REPORT_TOOL = { - :executable => ENV['GCOV'].nil? ? FilePathUtils.os_executable_ext('gcov').freeze : ENV['GCOV'].split[0], - :name => 'default_gcov_gcov_post_report'.freeze, - :stderr_redirect => StdErrRedirect::NONE.freeze, +# Produce .gcov files (used in conjunction with ReportGenerator) +DEFAULT_GCOV_REPORT_TOOL = { + :executable => ENV['GCOV_REPORT'].nil? ? FilePathUtils.os_executable_ext('gcov').freeze : ENV['GCOV_REPORT'], + :name => 'default_gcov_report'.freeze, :optional => true.freeze, :arguments => [ "-b".freeze, @@ -79,20 +80,21 @@ ].freeze } -DEFAULT_GCOV_GCOVR_POST_REPORT_TOOL = { - :executable => 'gcovr'.freeze, - :name => 'default_gcov_gcovr_post_report'.freeze, - :stderr_redirect => StdErrRedirect::NONE.freeze, +# Produce reports with `gcovr` +DEFAULT_GCOV_GCOVR_REPORT_TOOL = { + # No extension handling -- `gcovr` is generally an extensionless Python script + :executable => ENV['GCOVR'].nil? ? 'gcovr'.freeze : ENV['GCOVR'], + :name => 'default_gcov_gcovr_report'.freeze, :optional => true.freeze, :arguments => [ "${1}".freeze ].freeze } -DEFAULT_GCOV_REPORTGENERATOR_POST_REPORT = { - :executable => 'reportgenerator'.freeze, - :name => 'default_gcov_reportgenerator_post_report'.freeze, - :stderr_redirect => StdErrRedirect::NONE.freeze, +# Produce reports with `reportgenerator` +DEFAULT_GCOV_REPORTGENERATOR_REPORT_TOOL = { + :executable => ENV['REPORTGENERATOR'].nil? ? FilePathUtils.os_executable_ext('reportgenerator').freeze : ENV['REPORTGENERATOR'], + :name => 'default_gcov_reportgenerator_report'.freeze, :optional => true.freeze, :arguments => [ "${1}".freeze @@ -104,9 +106,9 @@ def get_default_config :gcov_compiler => DEFAULT_GCOV_COMPILER_TOOL, :gcov_linker => DEFAULT_GCOV_LINKER_TOOL, :gcov_fixture => DEFAULT_GCOV_FIXTURE_TOOL, - :gcov_report => DEFAULT_GCOV_REPORT_TOOL, - :gcov_gcov_post_report => DEFAULT_GCOV_GCOV_POST_REPORT_TOOL, - :gcov_gcovr_post_report => DEFAULT_GCOV_GCOVR_POST_REPORT_TOOL, - :gcov_reportgenerator_post_report => DEFAULT_GCOV_REPORTGENERATOR_POST_REPORT + :gcov_summary => DEFAULT_GCOV_SUMMARY_TOOL, + :gcov_report => DEFAULT_GCOV_REPORT_TOOL, + :gcov_gcovr_report => DEFAULT_GCOV_GCOVR_REPORT_TOOL, + :gcov_reportgenerator_report => DEFAULT_GCOV_REPORTGENERATOR_REPORT_TOOL } end diff --git a/tools/vendor/ceedling/plugins/gcov/gcov.rake b/tools/vendor/ceedling/plugins/gcov/gcov.rake index 3c85aac1..d8efc3df 100644 --- a/tools/vendor/ceedling/plugins/gcov/gcov.rake +++ b/tools/vendor/ceedling/plugins/gcov/gcov.rake @@ -1,3 +1,10 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + require 'reportgenerator_reportinator' require 'gcovr_reportinator' @@ -8,7 +15,7 @@ directory(GCOV_DEPENDENCIES_PATH) CLEAN.include(File.join(GCOV_BUILD_OUTPUT_PATH, '*')) CLEAN.include(File.join(GCOV_RESULTS_PATH, '*')) -CLEAN.include(File.join(GCOV_ARTIFACTS_PATH, '*')) +CLEAN.include(File.join(GCOV_ARTIFACTS_PATH, '**/*')) CLEAN.include(File.join(GCOV_DEPENDENCIES_PATH, '*')) CLOBBER.include(File.join(GCOV_BUILD_PATH, '**/*')) @@ -16,7 +23,7 @@ CLOBBER.include(File.join(GCOV_BUILD_PATH, '**/*')) rule(/#{GCOV_BUILD_OUTPUT_PATH}\/#{'.+\\' + EXTENSION_OBJECT}$/ => [ proc do |task_name| _, object = (task_name.split('+')) - @ceedling[:file_finder].find_compilation_input_file(object) + @ceedling[:file_finder].find_build_input_file(filepath: object, context: GCOV_SYM) end ]) do |target| test, object = (target.name.split('+')) @@ -29,23 +36,21 @@ task directories: [GCOV_BUILD_OUTPUT_PATH, GCOV_RESULTS_PATH, GCOV_DEPENDENCIES_ namespace GCOV_SYM do desc 'Run code coverage for all tests' - task all: [:test_deps] do - @ceedling[:configurator].replace_flattened_config(@ceedling[GCOV_SYM].config) - @ceedling[:test_invoker].setup_and_invoke(tests:COLLECTION_ALL_TESTS, context:GCOV_SYM, options:TOOL_COLLECTION_GCOV_TASKS) - @ceedling[:configurator].restore_config + task all: [:prepare] do + @ceedling[:test_invoker].setup_and_invoke( tests:COLLECTION_ALL_TESTS, context:GCOV_SYM, options:TOOL_COLLECTION_GCOV_TASKS ) end desc 'Run single test w/ coverage ([*] test or source file name, no path).' task :* do - message = "\nOops! '#{GCOV_ROOT_NAME}:*' isn't a real task. " \ + message = "Oops! '#{GCOV_ROOT_NAME}:*' isn't a real task. " \ "Use a real test or source file name (no path) in place of the wildcard.\n" \ - "Example: rake #{GCOV_ROOT_NAME}:foo.c\n\n" + "Example: `ceedling #{GCOV_ROOT_NAME}:foo.c`" - @ceedling[:streaminator].stdout_puts(message) + @ceedling[:loginator].log( message, Verbosity::ERRORS ) end desc 'Run tests by matching regular expression pattern.' - task :pattern, [:regex] => [:test_deps] do |_t, args| + task :pattern, [:regex] => [:prepare] do |_t, args| matches = [] COLLECTION_ALL_TESTS.each do |test| @@ -53,16 +58,14 @@ namespace GCOV_SYM do end if !matches.empty? - @ceedling[:configurator].replace_flattened_config(@ceedling[GCOV_SYM].config) - @ceedling[:test_invoker].setup_and_invoke(tests:matches, context:GCOV_SYM, options:{ force_run: false }.merge(TOOL_COLLECTION_GCOV_TASKS)) - @ceedling[:configurator].restore_config + @ceedling[:test_invoker].setup_and_invoke( tests:matches, context:GCOV_SYM, options:{ force_run: false }.merge(TOOL_COLLECTION_GCOV_TASKS) ) else - @ceedling[:streaminator].stdout_puts("\nFound no tests matching pattern /#{args.regex}/.") + @ceedling[:loginator].log("\nFound no tests matching pattern /#{args.regex}/.") end end desc 'Run tests whose test path contains [dir] or [dir] substring.' - task :path, [:dir] => [:test_deps] do |_t, args| + task :path, [:dir] => [:prepare] do |_t, args| matches = [] COLLECTION_ALL_TESTS.each do |test| @@ -70,16 +73,13 @@ namespace GCOV_SYM do end if !matches.empty? - @ceedling[:configurator].replace_flattened_config(@ceedling[GCOV_SYM].config) - @ceedling[:test_invoker].setup_and_invoke(tests:matches, context:GCOV_SYM, options:{ force_run: false }.merge(TOOL_COLLECTION_GCOV_TASKS)) - @ceedling[:configurator].restore_config + @ceedling[:test_invoker].setup_and_invoke( tests:matches, context:GCOV_SYM, options:{ force_run: false }.merge(TOOL_COLLECTION_GCOV_TASKS) ) else - @ceedling[:streaminator].stdout_puts("\nFound no tests including the given path or path component.") + @ceedling[:loginator].log( 'Found no tests including the given path or path component', Verbosity::ERRORS ) end end - # use a rule to increase efficiency for large projects - # gcov test tasks by regex + # Use a rule to increase efficiency for large projects -- gcov test tasks by regex rule(/^#{GCOV_TASK_ROOT}\S+$/ => [ proc do |task_name| test = task_name.sub(/#{GCOV_TASK_ROOT}/, '') @@ -87,21 +87,17 @@ namespace GCOV_SYM do @ceedling[:file_finder].find_test_from_file_path(test) end ]) do |test| - @ceedling[:rake_wrapper][:test_deps].invoke - @ceedling[:configurator].replace_flattened_config(@ceedling[GCOV_SYM].config) - @ceedling[:test_invoker].setup_and_invoke(tests:[test.source], context:GCOV_SYM, options:TOOL_COLLECTION_GCOV_TASKS) - @ceedling[:configurator].restore_config + @ceedling[:rake_wrapper][:prepare].invoke + @ceedling[:test_invoker].setup_and_invoke( tests:[test.source], context:GCOV_SYM, options:TOOL_COLLECTION_GCOV_TASKS ) end end -# If gcov config enables separate report generation task, create the task -if @ceedling[GCOV_SYM].automatic_reporting_disabled? +# If gcov config enables dedicated report generation task, create the task +if not @ceedling[GCOV_SYM].automatic_reporting_enabled? namespace GCOV_REPORT_NAMESPACE_SYM do desc "Generate reports from coverage results (Note: a #{GCOV_SYM}: task must be executed first)" task GCOV_SYM do - @ceedling[:configurator].replace_flattened_config(@ceedling[GCOV_SYM].config) @ceedling[:gcov].generate_coverage_reports() - @ceedling[:configurator].restore_config end end end diff --git a/tools/vendor/ceedling/plugins/gcov/lib/gcov.rb b/tools/vendor/ceedling/plugins/gcov/lib/gcov.rb index 8d2882f7..aeaeaf7d 100644 --- a/tools/vendor/ceedling/plugins/gcov/lib/gcov.rb +++ b/tools/vendor/ceedling/plugins/gcov/lib/gcov.rb @@ -1,41 +1,80 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + require 'ceedling/plugin' require 'ceedling/constants' +require 'ceedling/exceptions' require 'gcov_constants' require 'gcovr_reportinator' require 'reportgenerator_reportinator' class Gcov < Plugin - attr_reader :config - + + # `Plugin` setup() def setup @result_list = [] - @config = { - gcov_html_report_filter: GCOV_FILTER_EXCLUDE - } + @project_config = @ceedling[:configurator].project_config_hash - @plugin_root = File.expand_path(File.join(File.dirname(__FILE__), '..')) - @coverage_template_all = @ceedling[:file_wrapper].read(File.join(@plugin_root, 'assets/template.erb')) + # Are any reports enabled? + @reports_enabled = reports_enabled?( @project_config[:gcov_reports] ) + + # Was a gcov: task on the command line? + @cli_gcov_task = @ceedling[:system_wrapper].get_cmdline().any?{|item| item.include?( GCOV_TASK_ROOT )} + + # Validate the gcov tools if coverage summaries are enabled (summaries rely on the `gcov` tool) + # Note: This gcov tool is a different configuration than the gcov tool used by ReportGenerator + if summaries_enabled?( @project_config ) + @ceedling[:tool_validator].validate( + tool: TOOLS_GCOV_SUMMARY, + boom: true + ) + end - config = @ceedling[:configurator].project_config_hash - @reports_enabled = reports_enabled?( config[:gcov_reports] ) + # Validate configuration and tools while building Reportinators + @reportinators = build_reportinators( + @project_config[:gcov_utilities], + @reports_enabled, + @cli_gcov_task + ) + + # Convenient instance variable references + @configurator = @ceedling[:configurator] + @loginator = @ceedling[:loginator] + @test_invoker = @ceedling[:test_invoker] + @plugin_reportinator = @ceedling[:plugin_reportinator] + @file_path_utils = @ceedling[:file_path_utils] + @file_wrapper = @ceedling[:file_wrapper] + @tool_executor = @ceedling[:tool_executor] + + @mutex = Mutex.new() + end - # This may raise an exception because of configuration or tool installation issues. - # Best to complain about it before allowing any tasks to run. - @reportinators = build_reportinators( config[:gcov_utilities], @reports_enabled ) + # Called within class and also externally by plugin Rakefile + # No parameters enables the opportunity for latter mechanism + def automatic_reporting_enabled? + return (@project_config[:gcov_report_task] == false) end def generate_coverage_object_file(test, source, object) + # Non-coverage compiler tool = TOOLS_TEST_COMPILER msg = nil + # Handle assembly file that comes through + if File.extname(source) == EXTENSION_ASSEMBLY + tool = TOOLS_TEST_ASSEMBLER # If a source file (not unity, mocks, etc.) is to be compiled use code coverage compiler - if @ceedling[:configurator].collection_all_source.to_a.include?(source) + elsif @configurator.collection_all_source.include?(source) tool = TOOLS_GCOV_COMPILER msg = "Compiling #{File.basename(source)} with coverage..." end - @ceedling[:test_invoker].compile_test_component( + @test_invoker.compile_test_component( tool: tool, context: GCOV_SYM, test: test, @@ -45,149 +84,199 @@ def generate_coverage_object_file(test, source, object) ) end + # `Plugin` build step hook def post_test_fixture_execute(arg_hash) result_file = arg_hash[:result_file] - if (result_file =~ /#{GCOV_RESULTS_PATH}/) && !@result_list.include?(result_file) - @result_list << arg_hash[:result_file] + @mutex.synchronize do + if (result_file =~ /#{GCOV_RESULTS_PATH}/) && !@result_list.include?(result_file) + @result_list << arg_hash[:result_file] + end end end + # `Plugin` build step hook def post_build - # Do nothing unless a gcov: task was used - return unless @ceedling[:task_invoker].invoked?(/^#{GCOV_TASK_ROOT}/) + # Do nothing unless a gcov: task was on the command line + return unless @cli_gcov_task - # Assemble test results - results = @ceedling[:plugin_reportinator].assemble_test_results(@result_list) - hash = { - header: GCOV_ROOT_NAME.upcase, - results: results - } + # Only present plugin-based test results if raw test results disabled by a reporting plugin + if !@configurator.plugins_display_raw_test_results + results = {} - # Print unit test suite results - @ceedling[:plugin_reportinator].run_test_results_report(hash) do - message = '' - message = 'Unit test failures.' if results[:counts][:failed] > 0 - message + # Assemble test results + @mutex.synchronize do + results = @plugin_reportinator.assemble_test_results( @result_list ) + end + + hash = { + header: GCOV_ROOT_NAME.upcase, + results: results + } + + # Print unit test suite results + @plugin_reportinator.run_test_results_report( hash ) do + message = '' + message = 'Unit test failures.' if results[:counts][:failed] > 0 + message + end end - # Prinnt a short report of coverage results for each source file exercised by a test - report_per_file_coverage_results() + # Print summary of coverage to console for each source file exercised by a test + console_coverage_summaries() if summaries_enabled?( @project_config ) - # Run coverage report generation - generate_coverage_reports() if not automatic_reporting_disabled? + # Run full coverage report generation + generate_coverage_reports() if automatic_reporting_enabled? end + # `Plugin` build step hook def summary - result_list = @ceedling[:file_path_utils].form_pass_results_filelist(GCOV_RESULTS_PATH, COLLECTION_ALL_TESTS) + # Only present plugin-based test results if raw test results disabled by a reporting plugin + return if @configurator.plugins_display_raw_test_results + + # Build up the list of passing results from all tests + result_list = @file_path_utils.form_pass_results_filelist( + GCOV_RESULTS_PATH, + COLLECTION_ALL_TESTS + ) - # Get test results for only those tests in our configuration and for those only tests with results on disk hash = { header: GCOV_ROOT_NAME.upcase, - results: @ceedling[:plugin_reportinator].assemble_test_results(result_list, boom: false) + # Collect all existing test results (success or failing) in the filesystem, + # limited to our test collection + :results => @plugin_reportinator.assemble_test_results( + result_list, + {:boom => false} + ) } - @ceedling[:plugin_reportinator].run_test_results_report(hash) + @plugin_reportinator.run_test_results_report(hash) end - def automatic_reporting_disabled? - config = @ceedling[:configurator].project_config_hash - - task = config[:gcov_report_task] + # Called within class and also externally by conditionally regnerated Rake task + # No parameters enables the opportunity for latter mechanism + def generate_coverage_reports() + return if not @reports_enabled - return task if not task.nil? + @reportinators.each do |reportinator| + # Create the artifacts output directory. + @file_wrapper.mkdir( reportinator.artifacts_path ) - return false + # Generate reports + reportinator.generate_reports( @configurator.project_config_hash ) + end end - def generate_coverage_reports - return if (not @reports_enabled) or @reportinators.empty? + ### Private ### - # Create the artifacts output directory. - @ceedling[:file_wrapper].mkdir( GCOV_ARTIFACTS_PATH ) + private - @reportinators.each do |reportinator| - reportinator.make_reports( @ceedling[:configurator].project_config_hash ) - end + def reports_enabled?(cfg_reports) + return !cfg_reports.empty? end - private ################################### + def summaries_enabled?(config) + return config[:gcov_summaries] + end + + def utility_enabled?(opts, utility_name) + return opts.map(&:upcase).include?( utility_name.upcase ) + end - def report_per_file_coverage_results() - banner = @ceedling[:plugin_reportinator].generate_banner( "#{GCOV_ROOT_NAME.upcase}: CODE COVERAGE SUMMARY" ) - @ceedling[:streaminator].stdout_puts "\n" + banner + def console_coverage_summaries() + banner = @plugin_reportinator.generate_banner( "#{GCOV_ROOT_NAME.upcase}: CODE COVERAGE SUMMARY" ) + @loginator.log "\n" + banner # Iterate over each test run and its list of source files - @ceedling[:test_invoker].each_test_with_sources do |test, sources| - heading = @ceedling[:plugin_reportinator].generate_heading( test ) - @ceedling[:streaminator].stdout_puts(heading) + @test_invoker.each_test_with_sources do |test, sources| + heading = @plugin_reportinator.generate_heading( test ) + @loginator.log(heading) sources.each do |source| filename = File.basename(source) name = filename.ext('') - command = @ceedling[:tool_executor].build_command_line( - TOOLS_GCOV_REPORT, + command = @tool_executor.build_command_line( + TOOLS_GCOV_SUMMARY, [], # No additional arguments filename, # .c source file that should have been compiled with coverage File.join(GCOV_BUILD_OUTPUT_PATH, test) # /gcov/out/ for coverage data files ) - # Run the gcov tool and collect raw coverage report - shell_results = @ceedling[:tool_executor].exec(command[:line], command[:options]) + # Do not raise an exception if `gcov` terminates with a non-zero exit code, just note it and move on. + # Recent releases of `gcov` have become more strict and vocal about errors and exit codes. + command[:options][:boom] = false + + # Run the gcov tool and collect the raw coverage report + shell_results = @tool_executor.exec( command ) results = shell_results[:output].strip - # Skip to next loop iteration if no coverage results. + # Handle errors instead of raising a shell exception + if shell_results[:exit_code] != 0 + debug = "gcov error (#{shell_results[:exit_code]}) while processing #{filename}... #{results}" + @loginator.log( debug, Verbosity::DEBUG, LogLabels::ERROR ) + @loginator.log( "gcov was unable to process coverage for #{filename}", Verbosity::COMPLAIN ) + next # Skip to next loop iteration + end + # A source component may have been compiled with coverage but none of its code actually called in a test. - # In this case, gcov does not produce an error, only blank results. + # In this case, versions of gcov may not produce an error, only blank results. if results.empty? - @ceedling[:streaminator].stdout_puts("#{filename} : No functions called or code paths exercised by test\n") - next + msg = "No functions called or code paths exercised by test for #{filename}" + @loginator.log( msg, Verbosity::COMPLAIN, LogLabels::NOTICE ) + next # Skip to next loop iteration + end + + # Source filepath to be extracted from gcov coverage results via regex + _source = '' + + # Extract (relative) filepath from results and expand to absolute path + matches = results.match(/File\s+'(.+)'/) + if matches.nil? or matches.length() != 2 + msg = "Could not extract filepath via regex from gcov results for #{test}::#{File.basename(source)}" + @loginator.log( msg, Verbosity::DEBUG, LogLabels::ERROR ) + else + # Expand to full path from likely partial path to ensure correct matches on source component within gcov results + _source = File.expand_path(matches[1]) end - # If results include intended source, extract details from console - if results =~ /(File\s+'#{Regexp.escape(source)}'.+$)/m - # Reformat from first line as filename banner to each line labeled with the filename + # If gcov results include intended source (comparing absolute paths), report coverage details summaries + if _source == File.expand_path(source) + # Reformat from first line as filename banner to each line of statistics labeled with the filename # Only extract the first four lines of the console report (to avoid spidering coverage reports through libs, etc.) - report = Regexp.last_match(1).lines.to_a[1..4].map { |line| filename + ' | ' + line }.join('') - @ceedling[:streaminator].stdout_puts(report + "\n") + report = results.lines.to_a[1..4].map { |line| filename + ' | ' + line }.join('') + @loginator.log(report + "\n") - # Otherwise, no coverage results were found + # Otherwise, found no coverage results else - msg = "ERROR: Could not find coverage results for #{source} component of #{test}" - @ceedling[:streaminator].stderr_puts( msg, Verbosity::NORMAL ) + msg = "Found no coverage results for #{test}::#{File.basename(source)}" + @loginator.log( msg, Verbosity::COMPLAIN ) end end end end - def reports_enabled?(cfg_reports) - return false if cfg_reports.nil? or cfg_reports.empty? - return true - end - - def build_reportinators(cfg_utils, enabled) + def build_reportinators(config, enabled, gcov_task) reportinators = [] - return [] if not enabled - - # Remove unsupported reporting utilities. - if (not cfg_utils.nil?) - cfg_utils.reject! { |item| !(UTILITY_NAMES.map(&:upcase).include? item.upcase) } - end + # Do not instantiate reportinators (and tool validation) unless reports enabled and a gcov: task present in command line + return reportinators if ((!enabled) or (!gcov_task)) - # Default to gcovr when no reporting utilities are specified. - if cfg_utils.nil? || cfg_utils.empty? - cfg_utils = [UTILITY_NAME_GCOVR] + config.each do |reportinator| + if not GCOV_UTILITY_NAMES.map(&:upcase).include?( reportinator.upcase ) + options = GCOV_UTILITY_NAMES.map{ |utility| "'#{utility}'" }.join(', ') + msg = "Plugin configuration :gcov ↳ :utilities => `#{reportinator}` is not a recognized option {#{options}}." + raise CeedlingException.new(msg) + end end # Run reports using gcovr - if utility_enabled?( cfg_utils, UTILITY_NAME_GCOVR ) + if utility_enabled?( config, GCOV_UTILITY_NAME_GCOVR ) reportinator = GcovrReportinator.new( @ceedling ) reportinators << reportinator end # Run reports using ReportGenerator - if utility_enabled?( cfg_utils, UTILITY_NAME_REPORT_GENERATOR ) + if utility_enabled?( config, GCOV_UTILITY_NAME_REPORT_GENERATOR ) reportinator = ReportGeneratorReportinator.new( @ceedling ) reportinators << reportinator end @@ -195,24 +284,5 @@ def build_reportinators(cfg_utils, enabled) return reportinators end - # Returns true if the given utility is enabled, otherwise returns false. - def utility_enabled?(opts, utility_name) - enabled = !(opts.nil?) && (opts.map(&:upcase).include? utility_name.upcase) - - # Simple check for utility installation - # system() result is nil if could not run command - if enabled and system(utility_name, '--version', [:out, :err] => File::NULL).nil? - @ceedling[:streaminator].stderr_puts("ERROR: gcov report generation tool '#{utility_name}'' not installed.", Verbosity::NORMAL) - raise - end - - return enabled - end - end -# end blocks always executed following rake run -END { - # cache our input configurations to use in comparison upon next execution - @ceedling[:cacheinator].cache_test_config(@ceedling[:setupinator].config_hash) if @ceedling[:task_invoker].invoked?(/^#{GCOV_TASK_ROOT}/) -} diff --git a/tools/vendor/ceedling/plugins/gcov/lib/gcov_constants.rb b/tools/vendor/ceedling/plugins/gcov/lib/gcov_constants.rb index 740a87c6..56414495 100644 --- a/tools/vendor/ceedling/plugins/gcov/lib/gcov_constants.rb +++ b/tools/vendor/ceedling/plugins/gcov/lib/gcov_constants.rb @@ -1,3 +1,9 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= GCOV_ROOT_NAME = 'gcov'.freeze GCOV_TASK_ROOT = GCOV_ROOT_NAME + ':' @@ -11,17 +17,14 @@ GCOV_RESULTS_PATH = File.join(GCOV_BUILD_PATH, "results") GCOV_DEPENDENCIES_PATH = File.join(GCOV_BUILD_PATH, "dependencies") GCOV_ARTIFACTS_PATH = File.join(PROJECT_BUILD_ARTIFACTS_ROOT, GCOV_ROOT_NAME) -GCOV_REPORT_GENERATOR_PATH = File.join(GCOV_ARTIFACTS_PATH, "ReportGenerator") -GCOV_ARTIFACTS_FILE_HTML = File.join(GCOV_ARTIFACTS_PATH, "GcovCoverageResults.html") -GCOV_ARTIFACTS_FILE_COBERTURA = File.join(GCOV_ARTIFACTS_PATH, "GcovCoverageCobertura.xml") -GCOV_ARTIFACTS_FILE_SONARQUBE = File.join(GCOV_ARTIFACTS_PATH, "GcovCoverageSonarQube.xml") -GCOV_ARTIFACTS_FILE_JSON = File.join(GCOV_ARTIFACTS_PATH, "GcovCoverage.json") +GCOV_REPORT_GENERATOR_ARTIFACTS_PATH = File.join(GCOV_ARTIFACTS_PATH, "ReportGenerator") +GCOV_GCOVR_ARTIFACTS_PATH = File.join(GCOV_ARTIFACTS_PATH, "gcovr") -GCOV_FILTER_EXCLUDE_PATHS = ['vendor', 'build', 'test', 'lib'] - -# gcovr supports regular expressions. -GCOV_FILTER_EXCLUDE = GCOV_FILTER_EXCLUDE_PATHS.map{|path| '^'.concat(*path).concat('.*')}.join('|') +GCOV_GCOVR_ARTIFACTS_FILE_HTML = File.join(GCOV_GCOVR_ARTIFACTS_PATH, "GcovCoverageResults.html") +GCOV_GCOVR_ARTIFACTS_FILE_COBERTURA = File.join(GCOV_GCOVR_ARTIFACTS_PATH, "GcovCoverageCobertura.xml") +GCOV_GCOVR_ARTIFACTS_FILE_SONARQUBE = File.join(GCOV_GCOVR_ARTIFACTS_PATH, "GcovCoverageSonarQube.xml") +GCOV_GCOVR_ARTIFACTS_FILE_JSON = File.join(GCOV_GCOVR_ARTIFACTS_PATH, "GcovCoverage.json") TOOL_COLLECTION_GCOV_TASKS = { :test_compiler => TOOLS_GCOV_COMPILER, @@ -31,12 +34,9 @@ } # Report Creation Utilities -UTILITY_NAME_GCOVR = "gcovr" -UTILITY_NAME_REPORT_GENERATOR = "ReportGenerator" -UTILITY_NAMES = [UTILITY_NAME_GCOVR, UTILITY_NAME_REPORT_GENERATOR] - -# ReportGenerator supports text with wildcard characters. -GCOV_REPORT_GENERATOR_FILE_FILTERS = GCOV_FILTER_EXCLUDE_PATHS.map{|path| File.join('-.', *path, '*')}.join(';') +GCOV_UTILITY_NAME_GCOVR = "gcovr" +GCOV_UTILITY_NAME_REPORT_GENERATOR = "ReportGenerator" +GCOV_UTILITY_NAMES = [GCOV_UTILITY_NAME_GCOVR, GCOV_UTILITY_NAME_REPORT_GENERATOR] # Report Types class ReportTypes diff --git a/tools/vendor/ceedling/plugins/gcov/lib/gcovr_reportinator.rb b/tools/vendor/ceedling/plugins/gcov/lib/gcovr_reportinator.rb index 6e51621e..f5b1848e 100644 --- a/tools/vendor/ceedling/plugins/gcov/lib/gcovr_reportinator.rb +++ b/tools/vendor/ceedling/plugins/gcov/lib/gcovr_reportinator.rb @@ -1,21 +1,51 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + require 'reportinator_helper' +require 'ceedling/exceptions' require 'ceedling/constants' class GcovrReportinator + attr_reader :artifacts_path + def initialize(system_objects) + @artifacts_path = GCOV_GCOVR_ARTIFACTS_PATH @ceedling = system_objects @reportinator_helper = ReportinatorHelper.new(system_objects) - support_deprecated_options( @ceedling[:configurator].project_config_hash ) + + # Validate the gcovr tool since it's used to generate reports + @ceedling[:tool_validator].validate( + tool: TOOLS_GCOV_GCOVR_REPORT, + boom: true + ) + + # Convenient instance variable references + @loginator = @ceedling[:loginator] + @reportinator = @ceedling[:reportinator] + @tool_executor = @ceedling[:tool_executor] end # Generate the gcovr report(s) specified in the options. - def make_reports(opts) + def generate_reports(opts) # Get the gcovr version number. gcovr_version_info = get_gcovr_version() + # Get gcovr options from project configuration options + gcovr_opts = get_gcovr_opts(opts) + + # Extract exception_on_fail setting + exception_on_fail = !!gcovr_opts[:exception_on_fail] + # Build the common gcovr arguments. - args_common = args_builder_common(opts) + args_common = args_builder_common(gcovr_opts) + + msg = @reportinator.generate_heading( "Running Gcovr Coverage Reports" ) + @loginator.log( msg ) if ((gcovr_version_info[0] == 4) && (gcovr_version_info[1] >= 2)) || (gcovr_version_info[0] > 4) reports = [] @@ -36,8 +66,10 @@ def make_reports(opts) args += (_args = args_builder_html(opts, false)) reports << "HTML" if not _args.empty? - msg = @ceedling[:reportinator].generate_progress("Creating #{reports.join(', ')} coverage report(s) with gcovr in '#{GCOV_ARTIFACTS_PATH}'") - @ceedling[:streaminator].stdout_puts("\n" + msg, Verbosity::NORMAL) + reports.each do |report| + msg = @reportinator.generate_progress("Generating #{report} coverage report in '#{GCOV_GCOVR_ARTIFACTS_PATH}'") + @loginator.log( msg ) + end # Generate the report(s). # only if one of the previous done checks for: @@ -47,10 +79,9 @@ def make_reports(opts) # - args_builder_json # - args_builder_html # - # updated the args variable. In other case, no need to run GCOVR - # for current setup. + # updated the args variable. In other case, no need to run GCOVR for current setup. if !(args == args_common) - run(args) + run( gcovr_opts, args, exception_on_fail ) end else # gcovr version 4.1 and earlier supports HTML and Cobertura XML reports. @@ -60,88 +91,50 @@ def make_reports(opts) args_html = args_builder_html(opts, true) if args_html.length > 0 - msg = @ceedling[:reportinator].generate_progress("Creating an HTML coverage report with gcovr in '#{GCOV_ARTIFACTS_PATH}'") - @ceedling[:streaminator].stdout_puts(msg, Verbosity::NORMAL) + msg = @reportinator.generate_progress("Generating an HTML coverage report in '#{GCOV_GCOVR_ARTIFACTS_PATH}'") + @loginator.log( msg ) # Generate the HTML report. - run(args_common + args_html) + run( gcovr_opts, (args_common + args_html), exception_on_fail ) end if args_cobertura.length > 0 - msg = @ceedling[:reportinator].generate_progress("Creating an Cobertura XML coverage report with gcovr in '#{GCOV_ARTIFACTS_PATH}'") - @ceedling[:streaminator].stdout_puts(msg, Verbosity::NORMAL) + msg = @reportinator.generate_progress("Generating an Cobertura XML coverage report in '#{GCOV_GCOVR_ARTIFACTS_PATH}'") + @loginator.log( msg ) # Generate the Cobertura XML report. - run(args_common + args_cobertura) + run( gcovr_opts, (args_common + args_cobertura), exception_on_fail ) end end # Determine if the gcovr text report is enabled. Defaults to disabled. - if is_report_enabled(opts, ReportTypes::TEXT) - make_text_report(opts, args_common) - end - end - - - def support_deprecated_options(opts) - # Support deprecated :html_report: and ":html_report_type: basic" options. - if !is_report_enabled(opts, ReportTypes::HTML_BASIC) && (opts[:gcov_html_report] || (opts[:gcov_html_report_type].is_a? String) && (opts[:gcov_html_report_type].casecmp("basic") == 0)) - opts[:gcov_reports].push(ReportTypes::HTML_BASIC) - end - - # Support deprecated ":html_report_type: detailed" option. - if !is_report_enabled(opts, ReportTypes::HTML_DETAILED) && (opts[:gcov_html_report_type].is_a? String) && (opts[:gcov_html_report_type].casecmp("detailed") == 0) - opts[:gcov_reports].push(ReportTypes::HTML_DETAILED) + if report_enabled?(opts, ReportTypes::TEXT) + generate_text_report( opts, args_common, exception_on_fail ) end - # Support deprecated :xml_report: option. - if opts[:gcov_xml_report] - opts[:gcov_reports].push(ReportTypes::COBERTURA) - end - - # Default to HTML basic report when no report types are defined. - if opts[:gcov_reports].empty? && opts[:gcov_html_report_type].nil? && opts[:gcov_xml_report].nil? - opts[:gcov_reports] = [ReportTypes::HTML_BASIC] - - msg = <<~TEXT_BLOCK - NOTE: In your project.yml, define one or more of the following to specify which reports to generate. - For now, creating only an #{ReportTypes::HTML_BASIC} report... - - :gcov: - :reports: - - #{ReportTypes::HTML_BASIC}" - - #{ReportTypes::HTML_DETAILED}" - - #{ReportTypes::TEXT}" - - #{ReportTypes::COBERTURA}" - - #{ReportTypes::SONARQUBE}" - - #{ReportTypes::JSON}" - - TEXT_BLOCK - - @ceedling[:streaminator].stdout_puts(msg, Verbosity::NORMAL) - end + # White space log line + @loginator.log( '' ) end + ### Private ### private GCOVR_SETTING_PREFIX = "gcov_gcovr" # Build the gcovr report generation common arguments. - def args_builder_common(opts) - gcovr_opts = get_opts(opts) - + def args_builder_common(gcovr_opts) args = "" - args += "--root \"#{gcovr_opts[:report_root] || '.'}\" " + args += "--root \"#{gcovr_opts[:report_root]}\" " unless gcovr_opts[:report_root].nil? args += "--config \"#{gcovr_opts[:config_file]}\" " unless gcovr_opts[:config_file].nil? args += "--filter \"#{gcovr_opts[:report_include]}\" " unless gcovr_opts[:report_include].nil? - args += "--exclude \"#{gcovr_opts[:report_exclude] || GCOV_FILTER_EXCLUDE}\" " + args += "--exclude \"#{gcovr_opts[:report_exclude]}\" " unless gcovr_opts[:report_exclude].nil? args += "--gcov-filter \"#{gcovr_opts[:gcov_filter]}\" " unless gcovr_opts[:gcov_filter].nil? args += "--gcov-exclude \"#{gcovr_opts[:gcov_exclude]}\" " unless gcovr_opts[:gcov_exclude].nil? args += "--exclude-directories \"#{gcovr_opts[:exclude_directories]}\" " unless gcovr_opts[:exclude_directories].nil? - args += "--branches " if gcovr_opts[:branches].nil? || gcovr_opts[:branches] # Defaults to enabled. + args += "--branches " if gcovr_opts[:branches] args += "--sort-uncovered " if gcovr_opts[:sort_uncovered] - args += "--sort-percentage " if gcovr_opts[:sort_percentage].nil? || gcovr_opts[:sort_percentage] # Defaults to enabled. + args += "--sort-percentage " if gcovr_opts[:sort_percentage] args += "--print-summary " if gcovr_opts[:print_summary] args += "--gcov-executable \"#{gcovr_opts[:gcov_executable]}\" " unless gcovr_opts[:gcov_executable].nil? args += "--exclude-unreachable-branches " if gcovr_opts[:exclude_unreachable_branches] @@ -150,23 +143,31 @@ def args_builder_common(opts) args += "--gcov-ignore-parse-errors " if gcovr_opts[:gcov_ignore_parse_errors] args += "--keep " if gcovr_opts[:keep] args += "--delete " if gcovr_opts[:delete] + args += "--merge-mode-functions \"#{gcovr_opts[:merge_mode_function]}\" " args += "-j #{gcovr_opts[:threads]} " if !(gcovr_opts[:threads].nil?) && (gcovr_opts[:threads].is_a? Integer) - [:fail_under_line, :fail_under_branch, :source_encoding, :object_directory].each do |opt| - unless gcovr_opts[opt].nil? - - value = gcovr_opts[opt] - if (opt == :fail_under_line) || (opt == :fail_under_branch) - if not value.is_a? Integer - @ceedling[:streaminator].stdout_puts("ERROR: Option value #{opt} has to be an integer", Verbosity::NORMAL) - value = nil - elsif (value < 0) || (value > 100) - @ceedling[:streaminator].stdout_puts("ERROR: Option value #{opt} has to be a percentage from 0 to 100", Verbosity::NORMAL) - value = nil - end + [:fail_under_line, + :fail_under_branch, + :fail_under_decision, + :fail_under_function, + :source_encoding, + :object_directory + ].each do |opt| + next if gcovr_opts[opt].nil? + + value = gcovr_opts[opt] + + # Value sanity checks for :fail_under_* settings + if opt.to_s =~ /fail_/ + if not value.is_a? Integer + raise CeedlingException.new(":gcov ↳ :gcovr ↳ :#{opt} => '#{value}' must be an integer") + elsif (value < 0) || (value > 100) + raise CeedlingException.new(":gcov ↳ :gcovr ↳ :#{opt} => '#{value}' must be an integer percentage 0 – 100") end - args += "--#{opt.to_s.gsub('_','-')} #{value} " unless value.nil? end + + # If the YAML key has a value, trasnform key into command line argument with value and concatenate + args += "--#{opt.to_s.gsub('_','-')} #{value} " unless value.nil? end return args @@ -175,20 +176,18 @@ def args_builder_common(opts) # Build the gcovr Cobertura XML report generation arguments. def args_builder_cobertura(opts, use_output_option=false) - gcovr_opts = get_opts(opts) + gcovr_opts = get_gcovr_opts(opts) args = "" # Determine if the Cobertura XML report is enabled. Defaults to disabled. - if is_report_enabled(opts, ReportTypes::COBERTURA) + if report_enabled?(opts, ReportTypes::COBERTURA) # Determine the Cobertura XML report file name. - artifacts_file_cobertura = GCOV_ARTIFACTS_FILE_COBERTURA + artifacts_file_cobertura = GCOV_GCOVR_ARTIFACTS_FILE_COBERTURA if !(gcovr_opts[:cobertura_artifact_filename].nil?) - artifacts_file_cobertura = File.join(GCOV_ARTIFACTS_PATH, gcovr_opts[:cobertura_artifact_filename]) - elsif !(gcovr_opts[:xml_artifact_filename].nil?) - artifacts_file_cobertura = File.join(GCOV_ARTIFACTS_PATH, gcovr_opts[:xml_artifact_filename]) + artifacts_file_cobertura = File.join(GCOV_GCOVR_ARTIFACTS_PATH, gcovr_opts[:cobertura_artifact_filename]) end - args += "--xml-pretty " if gcovr_opts[:xml_pretty] || gcovr_opts[:cobertura_pretty] + args += "--xml-pretty " if gcovr_opts[:cobertura_pretty] args += "--xml #{use_output_option ? "--output " : ""} \"#{artifacts_file_cobertura}\" " end @@ -198,15 +197,15 @@ def args_builder_cobertura(opts, use_output_option=false) # Build the gcovr SonarQube report generation arguments. def args_builder_sonarqube(opts, use_output_option=false) - gcovr_opts = get_opts(opts) + gcovr_opts = get_gcovr_opts(opts) args = "" # Determine if the gcovr SonarQube XML report is enabled. Defaults to disabled. - if is_report_enabled(opts, ReportTypes::SONARQUBE) + if report_enabled?(opts, ReportTypes::SONARQUBE) # Determine the SonarQube XML report file name. - artifacts_file_sonarqube = GCOV_ARTIFACTS_FILE_SONARQUBE + artifacts_file_sonarqube = GCOV_GCOVR_ARTIFACTS_FILE_SONARQUBE if !(gcovr_opts[:sonarqube_artifact_filename].nil?) - artifacts_file_sonarqube = File.join(GCOV_ARTIFACTS_PATH, gcovr_opts[:sonarqube_artifact_filename]) + artifacts_file_sonarqube = File.join(GCOV_GCOVR_ARTIFACTS_PATH, gcovr_opts[:sonarqube_artifact_filename]) end args += "--sonarqube #{use_output_option ? "--output " : ""} \"#{artifacts_file_sonarqube}\" " @@ -218,15 +217,15 @@ def args_builder_sonarqube(opts, use_output_option=false) # Build the gcovr JSON report generation arguments. def args_builder_json(opts, use_output_option=false) - gcovr_opts = get_opts(opts) + gcovr_opts = get_gcovr_opts(opts) args = "" # Determine if the gcovr JSON report is enabled. Defaults to disabled. - if is_report_enabled(opts, ReportTypes::JSON) + if report_enabled?(opts, ReportTypes::JSON) # Determine the JSON report file name. - artifacts_file_json = GCOV_ARTIFACTS_FILE_JSON + artifacts_file_json = GCOV_GCOVR_ARTIFACTS_FILE_JSON if !(gcovr_opts[:json_artifact_filename].nil?) - artifacts_file_json = File.join(GCOV_ARTIFACTS_PATH, gcovr_opts[:json_artifact_filename]) + artifacts_file_json = File.join(GCOV_GCOVR_ARTIFACTS_PATH, gcovr_opts[:json_artifact_filename]) end args += "--json-pretty " if gcovr_opts[:json_pretty] @@ -241,24 +240,23 @@ def args_builder_json(opts, use_output_option=false) # Build the gcovr HTML report generation arguments. def args_builder_html(opts, use_output_option=false) - gcovr_opts = get_opts(opts) + gcovr_opts = get_gcovr_opts(opts) args = "" - # Determine if the gcovr HTML report is enabled. Defaults to enabled. - html_enabled = (opts[:gcov_html_report].nil? && opts[:gcov_reports].empty?) || - is_report_enabled(opts, ReportTypes::HTML_BASIC) || - is_report_enabled(opts, ReportTypes::HTML_DETAILED) + # Determine if the gcovr HTML report is enabled. + html_enabled = report_enabled?(opts, ReportTypes::HTML_BASIC) || + report_enabled?(opts, ReportTypes::HTML_DETAILED) if html_enabled # Determine the HTML report file name. - artifacts_file_html = GCOV_ARTIFACTS_FILE_HTML + artifacts_file_html = GCOV_GCOVR_ARTIFACTS_FILE_HTML if !(gcovr_opts[:html_artifact_filename].nil?) - artifacts_file_html = File.join(GCOV_ARTIFACTS_PATH, gcovr_opts[:html_artifact_filename]) + artifacts_file_html = File.join(GCOV_GCOVR_ARTIFACTS_PATH, gcovr_opts[:html_artifact_filename]) end is_html_report_type_detailed = (opts[:gcov_html_report_type].is_a? String) && (opts[:gcov_html_report_type].casecmp("detailed") == 0) - args += "--html-details " if is_html_report_type_detailed || is_report_enabled(opts, ReportTypes::HTML_DETAILED) + args += "--html-details " if is_html_report_type_detailed || report_enabled?(opts, ReportTypes::HTML_DETAILED) args += "--html-title \"#{gcovr_opts[:html_title]}\" " unless gcovr_opts[:html_title].nil? args += "--html-absolute-paths " if !(gcovr_opts[:html_absolute_paths].nil?) && gcovr_opts[:html_absolute_paths] args += "--html-encoding \"#{gcovr_opts[:html_encoding]}\" " unless gcovr_opts[:html_encoding].nil? @@ -275,82 +273,135 @@ def args_builder_html(opts, use_output_option=false) end - # Generate a gcovr text report. - def make_text_report(opts, args_common) - gcovr_opts = get_opts(opts) + # Generate a gcovr text report + def generate_text_report(opts, args_common, boom) + gcovr_opts = get_gcovr_opts(opts) args_text = "" - message_text = "Creating a text coverage report" + message_text = "Generating a text coverage report" filename = gcovr_opts[:text_artifact_filename] || 'coverage.txt' - artifacts_file_txt = File.join(GCOV_ARTIFACTS_PATH, filename) + artifacts_file_txt = File.join(GCOV_GCOVR_ARTIFACTS_PATH, filename) args_text += "--output \"#{artifacts_file_txt}\" " - message_text += " in '#{GCOV_ARTIFACTS_PATH}'" + message_text += " in '#{GCOV_GCOVR_ARTIFACTS_PATH}'" - msg = @ceedling[:reportinator].generate_progress(message_text) - @ceedling[:streaminator].stdout_puts(msg, Verbosity::NORMAL) + msg = @reportinator.generate_progress(message_text) + @loginator.log(msg, Verbosity::NORMAL) # Generate the text report - run(args_common + args_text) + run( gcovr_opts, (args_common + args_text), boom ) end # Get the gcovr options from the project options. - def get_opts(opts) - return opts[GCOVR_SETTING_PREFIX.to_sym] || {} + def get_gcovr_opts(opts) + return opts[GCOVR_SETTING_PREFIX.to_sym] end - # Run gcovr with the given arguments. - def run(args) - command = @ceedling[:tool_executor].build_command_line(TOOLS_GCOV_GCOVR_POST_REPORT, [], args) - @ceedling[:streaminator].stdout_puts("Command: #{command}", Verbosity::DEBUG) + # Run gcovr with the given arguments + def run(opts, args, boom) + command = @tool_executor.build_command_line(TOOLS_GCOV_GCOVR_REPORT, [], args) - command[:options][:boom] = false # Don't raise an exception if non-zero exit - shell_result = @ceedling[:tool_executor].exec(command[:line], command[:options]) + shell_result = nil + + begin + shell_result = @tool_executor.exec( command ) + rescue ShellExecutionException => ex + result = ex.shell_result + @reportinator_helper.print_shell_result( result ) + raise(ex) if gcovr_exec_exception?( opts, result[:exit_code], boom ) + end - @reportinator_helper.print_shell_result(shell_result) - show_gcovr_message(shell_result[:exit_code]) + @reportinator_helper.print_shell_result( shell_result ) end - # Get the gcovr version number as components. - # Returns [major, minor]. + # Get the gcovr version number as components + # Return [major, minor] def get_gcovr_version() version_number_major = 0 version_number_minor = 0 - command = @ceedling[:tool_executor].build_command_line(TOOLS_GCOV_GCOVR_POST_REPORT, [], "--version") - @ceedling[:streaminator].stdout_puts("Command: #{command}", Verbosity::DEBUG) + command = @tool_executor.build_command_line(TOOLS_GCOV_GCOVR_REPORT, [], "--version") - shell_result = @ceedling[:tool_executor].exec(command[:line], command[:options]) + msg = @reportinator.generate_progress("Collecting gcovr version for conditional feature handling") + @loginator.log( msg, Verbosity::OBNOXIOUS ) + + shell_result = @tool_executor.exec( command ) version_number_match_data = shell_result[:output].match(/gcovr ([0-9]+)\.([0-9]+)/) if !(version_number_match_data.nil?) && !(version_number_match_data[1].nil?) && !(version_number_match_data[2].nil?) version_number_major = version_number_match_data[1].to_i version_number_minor = version_number_match_data[2].to_i + else + raise CeedlingException.new( "Could not collect `gcovr` version from its command line" ) end return version_number_major, version_number_minor end - # Show a more human-friendly message on gcovr return code - def show_gcovr_message(exitcode) - if ((exitcode & 2) == 2) - @ceedling[:streaminator].stdout_puts("ERROR: Line coverage is less than the minimum", Verbosity::NORMAL) - raise + # Output to console a human-friendly message on certain coverage failure exit codes + # Perform the logic on whether to raise an exception + def gcovr_exec_exception?(opts, exitcode, boom) + + # Special handling of exit code 2 with --fail-under-line + if ((exitcode & 2) == 2) and !opts[:gcovr][:fail_under_line].nil? + msg = "Line coverage is less than the configured gcovr minimum of #{opts[:gcovr][:fail_under_line]}%" + if boom + raise CeedlingException.new(msg) + else + @loginator.log( msg, Verbosity::COMPLAIN ) + # Clear bit in exit code + exitcode &= ~2 + end + end + + # Special handling of exit code 4 with --fail-under-branch + if ((exitcode & 4) == 4) and !opts[:gcovr][:fail_under_branch].nil? + msg = "Branch coverage is less than the configured gcovr minimum of #{opts[:gcovr][:fail_under_branch]}%" + if boom + raise CeedlingException.new(msg) + else + @loginator.log( msg, Verbosity::COMPLAIN ) + # Clear bit in exit code + exitcode &= ~4 + end end - if ((exitcode & 4) == 4) - @ceedling[:streaminator].stdout_puts("ERROR: Branch coverage is less than the minimum", Verbosity::NORMAL) - raise + + # Special handling of exit code 8 with --fail-under-decision + if ((exitcode & 8) == 8) and !opts[:gcovr][:fail_under_decision].nil? + msg = "Decision coverage is less than the configured gcovr minimum of #{opts[:gcovr][:fail_under_decision]}%" + if boom + raise CeedlingException.new(msg) + else + @loginator.log( msg, Verbosity::COMPLAIN ) + # Clear bit in exit code + exitcode &= ~8 + end end + + # Special handling of exit code 16 with --fail-under-function + if ((exitcode & 16) == 16) and !opts[:gcovr][:fail_under_function].nil? + msg = "Function coverage is less than the configured gcovr minimum of #{opts[:gcovr][:fail_under_function]}%" + if boom + raise CeedlingException.new(msg) + else + @loginator.log( msg, Verbosity::COMPLAIN ) + # Clear bit in exit code + exitcode &= ~16 + end + end + + # A non-zero exit code is a problem + return (exitcode != 0) end # Returns true if the given report type is enabled, otherwise returns false. - def is_report_enabled(opts, report_type) - return !(opts.nil?) && !(opts[:gcov_reports].nil?) && (opts[:gcov_reports].map(&:upcase).include? report_type.upcase) + def report_enabled?(opts, report_type) + return opts[:gcov_reports].map(&:upcase).include?( report_type.upcase ) end end diff --git a/tools/vendor/ceedling/plugins/gcov/lib/reportgenerator_reportinator.rb b/tools/vendor/ceedling/plugins/gcov/lib/reportgenerator_reportinator.rb index a94088ed..c4fe358b 100644 --- a/tools/vendor/ceedling/plugins/gcov/lib/reportgenerator_reportinator.rb +++ b/tools/vendor/ceedling/plugins/gcov/lib/reportgenerator_reportinator.rb @@ -1,48 +1,77 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + require 'benchmark' require 'reportinator_helper' require 'ceedling/constants' +require 'ceedling/exceptions' class ReportGeneratorReportinator + attr_reader :artifacts_path + def initialize(system_objects) + @artifacts_path = GCOV_REPORT_GENERATOR_ARTIFACTS_PATH @ceedling = system_objects @reportinator_helper = ReportinatorHelper.new(system_objects) + + # Validate the `reportgenerator` tool since it's used to generate reports + @ceedling[:tool_validator].validate( + tool: TOOLS_GCOV_REPORTGENERATOR_REPORT, + boom: true + ) + + # Validate the `gcov` report tool since it's used to generate .gcov files processed by `reportgenerator` + # Note: This gcov tool is a different configuration than the gcov tool used for coverage summaries + @ceedling[:tool_validator].validate( + tool: TOOLS_GCOV_REPORT, + boom: true + ) + + # Convenient instance variable references + @loginator = @ceedling[:loginator] + @reportinator = @ceedling[:reportinator] + @tool_executor = @ceedling[:tool_executor] end # Generate the ReportGenerator report(s) specified in the options. - def make_reports(opts) + def generate_reports(opts) shell_result = nil total_time = Benchmark.realtime do rg_opts = get_opts(opts) - msg = @ceedling[:reportinator].generate_progress("Creating #{opts[:gcov_reports].join(', ')} coverage report(s) with ReportGenerator in '#{GCOV_REPORT_GENERATOR_PATH}'") - @ceedling[:streaminator].stdout_puts("\n" + msg, Verbosity::NORMAL) + msg = @reportinator.generate_heading( "Running ReportGenerator Coverage Reports" ) + @loginator.log( msg ) + + opts[:gcov_reports].each do |report| + msg = @reportinator.generate_progress("Generating #{report} coverage report in '#{GCOV_REPORT_GENERATOR_ARTIFACTS_PATH}'") + @loginator.log( msg ) + end # Cleanup any existing .gcov files to avoid reporting old coverage results. for gcov_file in Dir.glob("*.gcov") File.delete(gcov_file) end - # Use a custom gcov executable, if specified. - GCOV_TOOL_CONFIG[:executable] = rg_opts[:gcov_executable] unless rg_opts[:gcov_executable].nil? - gcno_exclude_str = "" # Avoid running gcov on custom specified .gcno files. - if !(rg_opts.nil?) && !(rg_opts[:gcov_exclude].nil?) && !(rg_opts[:gcov_exclude].empty?) - for gcno_exclude_expression in rg_opts[:gcov_exclude] - if !(gcno_exclude_expression.nil?) && !(gcno_exclude_expression.empty?) - # We want to filter .gcno files, not .gcov files. - # We will generate .gcov files from .gcno files. - gcno_exclude_expression = gcno_exclude_expression.chomp("\\.gcov") - gcno_exclude_expression = gcno_exclude_expression.chomp(".gcov") - # The .gcno extension will be added later as we create the regex. - gcno_exclude_expression = gcno_exclude_expression.chomp("\\.gcno") - gcno_exclude_expression = gcno_exclude_expression.chomp(".gcno") - # Append the custom expression. - gcno_exclude_str += "|#{gcno_exclude_expression}" - end + for gcno_exclude_expression in rg_opts[:gcov_exclude] + if !(gcno_exclude_expression.nil?) && !(gcno_exclude_expression.empty?) + # We want to filter .gcno files, not .gcov files. + # We will generate .gcov files from .gcno files. + gcno_exclude_expression = gcno_exclude_expression.chomp("\\.gcov") + gcno_exclude_expression = gcno_exclude_expression.chomp(".gcov") + # The .gcno extension will be added later as we create the regex. + gcno_exclude_expression = gcno_exclude_expression.chomp("\\.gcno") + gcno_exclude_expression = gcno_exclude_expression.chomp(".gcno") + # Append the custom expression. + gcno_exclude_str += "|#{gcno_exclude_expression}" end end @@ -63,21 +92,31 @@ def make_reports(opts) args = args_builder(opts) # Generate the report(s). - shell_result = run(args) + begin + shell_result = run(args) + rescue ShellExecutionException => ex + shell_result = ex.shell_result + # Re-raise + raise ex + ensure + # Cleanup .gcov files. + for gcov_file in Dir.glob("*.gcov") + File.delete(gcov_file) + end + end else - @ceedling[:streaminator].stdout_puts("\nWARNING: No matching .gcno coverage files found.", Verbosity::NORMAL) + @loginator.log( "No matching .gcno coverage files found", Verbosity::COMPLAIN ) end - # Cleanup .gcov files. - for gcov_file in Dir.glob("*.gcov") - File.delete(gcov_file) - end end if shell_result shell_result[:time] = total_time @reportinator_helper.print_shell_result(shell_result) end + + # White space log line + @loginator.log( '' ) end @@ -108,9 +147,6 @@ def make_reports(opts) REPORT_GENERATOR_SETTING_PREFIX = "gcov_report_generator" - # Deep clone the gcov tool config, so we can modify it locally if specified via options. - GCOV_TOOL_CONFIG = Marshal.load(Marshal.dump(TOOLS_GCOV_GCOV_POST_REPORT)) - # Build the ReportGenerator arguments. def args_builder(opts) rg_opts = get_opts(opts) @@ -118,52 +154,42 @@ def args_builder(opts) args = "" args += "\"-reports:*.gcov\" " - args += "\"-targetdir:\"#{GCOV_REPORT_GENERATOR_PATH}\"\" " + args += "\"-targetdir:\"#{GCOV_REPORT_GENERATOR_ARTIFACTS_PATH}\"\" " # Build the report types argument. - if !(opts.nil?) && !(opts[:gcov_reports].nil?) && !(opts[:gcov_reports].empty?) - args += "\"-reporttypes:" - - for report_type in opts[:gcov_reports] - rg_report_type = REPORT_TYPE_TO_REPORT_GENERATOR_REPORT_NAME[report_type.upcase] - if !(rg_report_type.nil?) - args += rg_report_type + ";" - report_type_count = report_type_count + 1 - end - end + args += "\"-reporttypes:" - # Removing trailing ';' after the last report type. - args = args.chomp(";") - - # Append a space separator after the report type. - args += "\" " + for report_type in opts[:gcov_reports] + rg_report_type = REPORT_TYPE_TO_REPORT_GENERATOR_REPORT_NAME[report_type.upcase] + if !(rg_report_type.nil?) + args += rg_report_type + ";" + report_type_count = report_type_count + 1 + end end - # Build the source directories argument. - args += "\"-sourcedirs:.;" - if !(opts[:collection_paths_source].nil?) - args += opts[:collection_paths_source].join(';') - end + # Removing trailing ';' after the last report type. args = args.chomp(";") + + # Append a space separator after the report type. args += "\" " + # Build the source directories argument. + args += "\"-sourcedirs:.;#{opts[:collection_paths_source].join(';')}\" " + args += "\"-historydir:#{rg_opts[:history_directory]}\" " unless rg_opts[:history_directory].nil? args += "\"-plugins:#{rg_opts[:plugins]}\" " unless rg_opts[:plugins].nil? args += "\"-assemblyfilters:#{rg_opts[:assembly_filters]}\" " unless rg_opts[:assembly_filters].nil? args += "\"-classfilters:#{rg_opts[:class_filters]}\" " unless rg_opts[:class_filters].nil? - file_filters = rg_opts[:file_filters] || @ceedling[:tool_executor_helper].osify_path_separators(GCOV_REPORT_GENERATOR_FILE_FILTERS) - args += "\"-filefilters:#{file_filters}\" " - args += "\"-verbosity:#{rg_opts[:verbosity] || "Warning"}\" " + args += "\"-filefilters:#{rg_opts[:file_filters]}\" " unless rg_opts[:file_filters].nil? + args += "\"-verbosity:#{rg_opts[:verbosity]}\" " unless rg_opts[:verbosity].nil? args += "\"-tag:#{rg_opts[:tag]}\" " unless rg_opts[:tag].nil? args += "\"settings:createSubdirectoryForAllReportTypes=true\" " unless report_type_count <= 1 args += "\"settings:numberOfReportsParsedInParallel=#{rg_opts[:num_parallel_threads]}\" " unless rg_opts[:num_parallel_threads].nil? args += "\"settings:numberOfReportsMergedInParallel=#{rg_opts[:num_parallel_threads]}\" " unless rg_opts[:num_parallel_threads].nil? # Append custom arguments. - if !(rg_opts[:custom_args].nil?) && !(rg_opts[:custom_args].empty?) - for custom_arg in rg_opts[:custom_args] - args += "\"#{custom_arg}\" " unless custom_arg.nil? || custom_arg.empty? - end + for custom_arg in rg_opts[:custom_args] + args += "\"#{custom_arg}\" " unless custom_arg.nil? || custom_arg.empty? end return args @@ -172,25 +198,23 @@ def args_builder(opts) # Get the ReportGenerator options from the project options. def get_opts(opts) - return opts[REPORT_GENERATOR_SETTING_PREFIX.to_sym] || {} + return opts[REPORT_GENERATOR_SETTING_PREFIX.to_sym] end # Run ReportGenerator with the given arguments. def run(args) - command = @ceedling[:tool_executor].build_command_line(TOOLS_GCOV_REPORTGENERATOR_POST_REPORT, [], args) - @ceedling[:streaminator].stdout_puts("Command: #{command}", Verbosity::DEBUG) + command = @tool_executor.build_command_line(TOOLS_GCOV_REPORTGENERATOR_REPORT, [], args) - return @ceedling[:tool_executor].exec(command[:line], command[:options]) + return @tool_executor.exec( command ) end # Run gcov with the given arguments. def run_gcov(args) - command = @ceedling[:tool_executor].build_command_line(GCOV_TOOL_CONFIG, [], args) - @ceedling[:streaminator].stdout_puts("Command: #{command}", Verbosity::DEBUG) + command = @tool_executor.build_command_line(TOOLS_GCOV_REPORT, [], args) - return @ceedling[:tool_executor].exec(command[:line], command[:options]) + return @tool_executor.exec( command ) end end diff --git a/tools/vendor/ceedling/plugins/gcov/lib/reportinator_helper.rb b/tools/vendor/ceedling/plugins/gcov/lib/reportinator_helper.rb index d4568ff8..9598c690 100644 --- a/tools/vendor/ceedling/plugins/gcov/lib/reportinator_helper.rb +++ b/tools/vendor/ceedling/plugins/gcov/lib/reportinator_helper.rb @@ -1,20 +1,28 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + require 'ceedling/constants' class ReportinatorHelper def initialize(system_objects) - @ceedling = system_objects + # Convenience alias + @loginator = system_objects[:loginator] end # Output the shell result to the console. def print_shell_result(shell_result) if !(shell_result.nil?) msg = "Done in %.3f seconds." % shell_result[:time] - @ceedling[:streaminator].stdout_puts(msg, Verbosity::NORMAL) + @loginator.log(msg, Verbosity::NORMAL) if !(shell_result[:output].nil?) && (shell_result[:output].length > 0) - @ceedling[:streaminator].stdout_puts(shell_result[:output], Verbosity::OBNOXIOUS) + @loginator.log(shell_result[:output], Verbosity::OBNOXIOUS) end end end diff --git a/tools/vendor/ceedling/plugins/html_tests_report/README.md b/tools/vendor/ceedling/plugins/html_tests_report/README.md deleted file mode 100644 index 939c066d..00000000 --- a/tools/vendor/ceedling/plugins/html_tests_report/README.md +++ /dev/null @@ -1,38 +0,0 @@ -html_tests_report -================ - -## Overview - -The html_tests_report plugin creates an HTML file of test results, -which makes the results easier to read. The HTML file is output to the appropriate -`/artifacts/` directory (e.g. `artifacts/test/` for test tasks, -`artifacts/gcov/` for gcov, or `artifacts/bullseye/` for bullseye runs). - -## Setup - -Enable the plugin in your project.yml by adding `html_tests_report` to the list -of enabled plugins. - -``` YAML -:plugins: - :enabled: - - html_tests_report -``` - -## Configuration - -Optionally configure the output / artifact filename in your project.yml with -the `artifact_filename` configuration option. The default filename is -`report.html`. - -You can also configure the path that this artifact is stored. This can be done -by setting `path`. The default is that it will be placed in a subfolder under -the `build` directory. - -If you use some means for continuous integration, you may also want to add -.xsl file to CI's configuration for proper parsing of .xml report. - -``` YAML -:html_tests_report: - :artifact_filename: report_test.html -``` diff --git a/tools/vendor/ceedling/plugins/json_tests_report/README.md b/tools/vendor/ceedling/plugins/json_tests_report/README.md deleted file mode 100644 index 8e5a1e57..00000000 --- a/tools/vendor/ceedling/plugins/json_tests_report/README.md +++ /dev/null @@ -1,36 +0,0 @@ -json_tests_report -================= - -## Overview - -The json_tests_report plugin creates a JSON file of test results, which is -handy for Continuous Integration build servers or as input into other -reporting tools. The JSON file is output to the appropriate -`/artifacts/` directory (e.g. `artifacts/test/` for test tasks, -`artifacts/gcov/` for gcov, or `artifacts/bullseye/` for bullseye runs). - -## Setup - -Enable the plugin in your project.yml by adding `json_tests_report` to the list -of enabled plugins. - -``` YAML -:plugins: - :enabled: - - json_tests_report -``` - -## Configuration - -Optionally configure the output / artifact filename in your project.yml with -the `artifact_filename` configuration option. The default filename is -`report.json`. - -You can also configure the path that this artifact is stored. This can be done -by setting `path`. The default is that it will be placed in a subfolder under -the `build` directory. - -``` YAML -:json_tests_report: - :artifact_filename: report_spectuluarly.json -``` diff --git a/tools/vendor/ceedling/plugins/json_tests_report/lib/json_tests_report.rb b/tools/vendor/ceedling/plugins/json_tests_report/lib/json_tests_report.rb deleted file mode 100644 index 8b02e580..00000000 --- a/tools/vendor/ceedling/plugins/json_tests_report/lib/json_tests_report.rb +++ /dev/null @@ -1,83 +0,0 @@ -require 'ceedling/plugin' -require 'ceedling/constants' -require 'json' - -class JsonTestsReport < Plugin - def setup - @results_list = {} - @test_counter = 0 - end - - def post_test_fixture_execute(arg_hash) - context = arg_hash[:context] - - @results_list[context] = [] if @results_list[context].nil? - - @results_list[context] << arg_hash[:result_file] - end - - def post_build - @results_list.each_key do |context| - results = @ceedling[:plugin_reportinator].assemble_test_results(@results_list[context]) - - artifact_filename = @ceedling[:configurator].project_config_hash[:json_tests_report_artifact_filename] || 'report.json' - artifact_fullpath = @ceedling[:configurator].project_config_hash[:json_tests_report_path] || File.join(PROJECT_BUILD_ARTIFACTS_ROOT, context.to_s) - file_path = File.join(artifact_fullpath, artifact_filename) - - @ceedling[:file_wrapper].open(file_path, 'w') do |f| - @test_counter = 1 - - json = { - "FailedTests" => write_failures(results[:failures]), - "PassedTests" => write_tests(results[:successes]), - "IgnoredTests" => write_tests(results[:ignores]), - "Summary" => write_statistics(results[:counts]) - } - - f << JSON.pretty_generate(json) - end - end - end - - private - - def write_failures(results) - retval = [] - results.each do |result| - result[:collection].each do |item| - @test_counter += 1 - retval << { - "file" => result[:source][:file], - "test" => item[:test], - "line" => item[:line], - "message" => item[:message] - } - end - end - return retval.uniq - end - - def write_tests(results) - retval = [] - results.each do |result| - result[:collection].each do |item| - @test_counter += 1 - retval << { - "file" => result[:source][:file], - "test" => item[:test] - } - end - end - return retval - end - - def write_statistics(counts) - return { - "total_tests" => counts[:total], - "passed" => (counts[:total] - counts[:ignored] - counts[:failed]), - "ignored" => counts[:ignored], - "failures" => counts[:failed] - } - end - -end diff --git a/tools/vendor/ceedling/plugins/junit_tests_report/README.md b/tools/vendor/ceedling/plugins/junit_tests_report/README.md deleted file mode 100644 index 1259fd66..00000000 --- a/tools/vendor/ceedling/plugins/junit_tests_report/README.md +++ /dev/null @@ -1,36 +0,0 @@ -junit_tests_report -==================== - -## Overview - -The junit_tests_report plugin creates an XML file of test results in JUnit -format, which is handy for Continuous Integration build servers or as input -into other reporting tools. The XML file is output to the appropriate -`/artifacts/` directory (e.g. `artifacts/test/` for test tasks, -`artifacts/gcov/` for gcov, or `artifacts/bullseye/` for bullseye runs). - -## Setup - -Enable the plugin in your project.yml by adding `junit_tests_report` -to the list of enabled plugins. - -``` YAML -:plugins: - :enabled: - - junit_tests_report -``` - -## Configuration - -Optionally configure the output / artifact filename in your project.yml with -the `artifact_filename` configuration option. The default filename is -`report.xml`. - -You can also configure the path that this artifact is stored. This can be done -by setting `path`. The default is that it will be placed in a subfolder under -the `build` directory. - -``` YAML -:junit_tests_report: - :artifact_filename: report_junit.xml -``` diff --git a/tools/vendor/ceedling/plugins/junit_tests_report/lib/junit_tests_report.rb b/tools/vendor/ceedling/plugins/junit_tests_report/lib/junit_tests_report.rb deleted file mode 100644 index 31043938..00000000 --- a/tools/vendor/ceedling/plugins/junit_tests_report/lib/junit_tests_report.rb +++ /dev/null @@ -1,134 +0,0 @@ -require 'ceedling/plugin' -require 'ceedling/constants' - -class JunitTestsReport < Plugin - - def setup - @results_list = {} - @test_counter = 0 - @time_result = [] - end - - def post_test_fixture_execute(arg_hash) - context = arg_hash[:context] - - @results_list[context] = [] if (@results_list[context].nil?) - - @results_list[context] << arg_hash[:result_file] - @time_result << arg_hash[:shell_result][:time] - - end - - def post_build - @results_list.each_key do |context| - results = @ceedling[:plugin_reportinator].assemble_test_results(@results_list[context]) - - artifact_filename = @ceedling[:configurator].project_config_hash[:junit_tests_report_artifact_filename] || 'report.xml' - artifact_fullpath = @ceedling[:configurator].project_config_hash[:junit_tests_report_path] || File.join(PROJECT_BUILD_ARTIFACTS_ROOT, context.to_s) - file_path = File.join(artifact_fullpath, artifact_filename) - - @ceedling[:file_wrapper].open( file_path, 'w' ) do |f| - @testsuite_counter = 0 - @testcase_counter = 0 - suites = reorganise_results( results ) - - write_header( results, f ) - suites.each{|suite| write_suite( suite, f ) } - write_footer( f ) - end - end - end - - private - - def write_header( results, stream ) - results[:counts][:time] = @time_result.reduce(0, :+) - stream.puts '' - stream.puts('' % results[:counts]) - end - - def write_footer( stream ) - stream.puts '' - end - - def reorganise_results( results ) - # Reorganise the output by test suite instead of by result - suites = Hash.new{ |h,k| h[k] = {collection: [], total: 0, success: 0, failed: 0, ignored: 0, errors: 0, stdout: []} } - results[:successes].each do |result| - source = result[:source] - name = source[:file].sub(/\..{1,4}$/, "") - suites[name][:collection] += result[:collection].map{|test| test.merge(result: :success)} - suites[name][:total] += result[:collection].length - suites[name][:success] += result[:collection].length - end - results[:failures].each do |result| - source = result[:source] - name = source[:file].sub(/\..{1,4}$/, "") - suites[name][:collection] += result[:collection].map{|test| test.merge(result: :failed)} - suites[name][:total] += result[:collection].length - suites[name][:failed] += result[:collection].length - end - results[:ignores].each do |result| - source = result[:source] - name = source[:file].sub(/\..{1,4}$/, "") - suites[name][:collection] += result[:collection].map{|test| test.merge(result: :ignored)} - suites[name][:total] += result[:collection].length - suites[name][:ignored] += result[:collection].length - end - results[:stdout].each do |result| - source = result[:source] - name = source[:file].sub(/\..{1,4}$/, "") - suites[name][:stdout] += result[:collection] - end - suites.map{|name, data| data.merge(name: name) } - end - - def write_suite( suite, stream ) - suite[:time] = @time_result.shift - stream.puts(' ' % suite) - - suite[:collection].each do |test| - write_test( test, stream ) - end - - unless suite[:stdout].empty? - stream.puts(' ') - suite[:stdout].each do |line| - line.gsub!(/&/, '&') - line.gsub!(//, '>') - line.gsub!(/"/, '"') - line.gsub!(/'/, ''') - stream.puts(line) - end - stream.puts(' ') - end - - stream.puts(' ') - end - - def write_test( test, stream ) - test[:test].gsub!(/&/, '&') - test[:test].gsub!(//, '>') - test[:test].gsub!(/"/, '"') - test[:test].gsub!(/'/, ''') - - case test[:result] - when :success - stream.puts(' ' % test) - when :failed - stream.puts(' ' % test) - if test[:message].empty? - stream.puts(' ') - else - stream.puts(' ' % test[:message]) - end - stream.puts(' ') - when :ignored - stream.puts(' ' % test) - stream.puts(' ') - stream.puts(' ') - end - end -end diff --git a/tools/vendor/ceedling/plugins/module_generator/README.md b/tools/vendor/ceedling/plugins/module_generator/README.md index 71de14cd..d13dfd36 100644 --- a/tools/vendor/ceedling/plugins/module_generator/README.md +++ b/tools/vendor/ceedling/plugins/module_generator/README.md @@ -1,10 +1,10 @@ ceedling-module-generator ========================= -## Overview +## Plugin Overview The module_generator plugin adds a pair of new commands to Ceedling, allowing -you to make or remove modules according to predefined templates. WIth a single call, +you to make or remove modules according to predefined templates. With a single call, Ceedling can generate a source, header, and test file for a new module. If given a pattern, it can even create a series of submodules to support specific design patterns. Finally, it can just as easily remove related modules, avoiding the need to delete @@ -22,6 +22,8 @@ specified a different default (see configuration). It will create three files: `MadScience.c`, `MadScience.h`, and `TestMadScience.c`. *NOTE* that it is important that there are no spaces between the brackets. We know, it's annoying... but it's the rules. +### Patterns + You can also create an entire pattern of files. To do that, just add a second argument to the pattern ID. Something like this: @@ -33,6 +35,70 @@ In this example, we'd create 9 files total: 3 headers, 3 source files, and 3 tes files would be named `SecretLairModel`, `SecretLairConductor`, and `SecretLairHardware`. Isn't that nice? +### Paths + +But what if I don't want it to place my new files in the default location? + +It can do that too! You can give it a hint as to where to find your files. The pattern matching +here is fairly basic, but it is usually sufficient. It works perfectly if your directory structure +matches a common pattern. For example, let's say you issue this command: + +``` +ceedling module:create[lab:SecretLair,mch] +``` + +Say your directory structure looks like this: + +``` +:paths: + :source: + - lab/src + - lair/src + - other/src + :test: + - lab/test + - lair/test + - other/test +``` + +In this case, the `lab:` hint would make the module generator guess you want your files here: + + - source files: `lab/src` (because it's a close match) + - include files: `lab/src` (because no include paths were listed) + - test files: `lab/test` (because it's a close match) + +Instead, if your directory structure looks like this: + +``` +:paths: + :source: + - src/** #this might contain subfolders lab, lair, and other + :include: + - inc/** #again, this might contain subfolders lab, lair, other, and shared + :test: + - test +``` + +In this case, the `lab:` hint would make the module generator guess you want your files here: + + - source files: `src/lab` (because it's a close match) + - include files: `inc/lab` (because it's a close match) + - test files: `test` (because there wasn't a close match, and this was the first entry on our list) + +You can see that more complicated structures will have files placed in the wrong place from time to +time... no worries... you can move the file after it's created... but if your project has any kind of +consistent structure, the guessing engine does a good job of making it work. + +Three more quick notes about the path-matching: + +1. You can give multiple ordered hints that map roughly to folder nesting! `lab:secret:lair` will + happily match to put `lair.c` in a folder like `my/lab/secret/`. + +2. Whenever the matcher fails to find a good candidate (or if it finds multiple equally good + candidates), it will always guess in the order you have the paths listed in your project.yml file + +## Stubbing + Similarly, you can create stubs for all functions in a header file just by making a single call to your handy `stub` feature, like this: @@ -40,8 +106,8 @@ to your handy `stub` feature, like this: ceedling module:stub[SecretLair] ``` -This call will look in SecretLair.h and will generate a file SecretLair.c that contains a stub -for each function declared in the header! Even better, if SecretLair.c already exists, it will +This call will look in `SecretLair.h` and will generate a file `SecretLair.c` that contains a stub +for each function declared in the header! Even better, if `SecretLair.c` already exists, it will add only new functions, leaving your existing calls alone so that it doesn't cause any problems. ## Configuration @@ -57,9 +123,15 @@ follows the default ceedling structure... but what if you have a different struc ``` :module_generator: :project_root: ./ - :source_root: source/ - :inc_root: includes/ - :test_root: tests/ + :naming: :bumpy + :includes: + - :src: [] + - :inc: [] + - :tst: [] + :boilerplates: + - :src: "" + - :inc: "" + - :tst: "" ``` Now I've redirected the location where modules are going to be generated. @@ -82,15 +154,28 @@ by adding to the `:includes` array. For example: ### Boilerplates You can specify the actual boilerplate used for each of your files. This is the handy place to -put that corporate copyright notice (or maybe a copyleft notice, if that's your perference?) +put that corporate copyright notice (or maybe a copyleft notice, if that's your preference?) + +Notice there is a separate template for source files, include files, and test files. Also, +your boilerplates can optionally contain `%1$s` which will inject the filename into that spot. ``` :module_generator: - :boilerplates: | - /*************************** - * This file is Awesome. * - * That is All. * - ***************************/ + :boilerplates: + :src: | + /*************************** + * %1$s + * This file is Awesome. + * That is All. + ***************************/ + :inc: | + /*************************** + * Header. Woo. * + ***************************/ + :tst: | + /*************************** + * My Awesome Test For %1$s + ***************************/ ``` ### Test Defines diff --git a/tools/vendor/ceedling/plugins/module_generator/Rakefile b/tools/vendor/ceedling/plugins/module_generator/Rakefile new file mode 100644 index 00000000..93dbd911 --- /dev/null +++ b/tools/vendor/ceedling/plugins/module_generator/Rakefile @@ -0,0 +1,205 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + +require 'rake' +require 'rbconfig' + +def windows?() + return (RbConfig::CONFIG['host_os'] =~ /mswin|mingw|cygwin/) +end + +# Add `ruby` to the command line on Windows to execute the Ruby-based shell script bin/ceedling +CEEDLING_CLI_EXEC = "#{'ruby ' if windows?}../../../bin/ceedling" + +def prep_test + FileUtils.rm_rf Dir['./**/*.c'] + FileUtils.rm_rf Dir['./**/*.h'] + FileUtils.mkdir_p "./s/rev" + FileUtils.mkdir_p "./i/rev" + FileUtils.mkdir_p "./t/rev" + FileUtils.mkdir_p "./sub/s" + FileUtils.mkdir_p "./sub/i" + FileUtils.mkdir_p "./sub/t" +end + +def prep_stub(num) + FileUtils.cp_r("../assets/stubby#{num}.h","./i/stubby.h") +end + +def assert_file_exist(path) + if File.exist?(path) + puts "File #{path} exists." + else + raise "File #{path} doesn't exist after create" + end +end + +def assert_file_contains(path, expected) + if File.exist?(path) + actual = File.read(path) + if actual.match?(expected) + puts "File #{path} exists and contains specified contents." + else + puts "Expected content: #{expected}" # Debug logging + puts "Actual content: #{actual}" # Debug logging + raise "File #{path} exists but doesn't contain specified contents." + end + else + raise "File #{path} doesn't exist after create" + end +end + +def assert_file_not_exist(path) + unless File.exist?(path) + puts "File #{path} doesn't exist after destroy" + else + raise "File #{path} still exists after destroy." + end +end + +def assert_test_run_contains(expected) + retval = `#{CEEDLING_CLI_EXEC} clobber test:all 2>&1` + if (retval.include? expected) + puts "Testing included `#{expected}`" + else + puts retval # Debug logging + raise "Testing did not include `#{expected}`" + end +end + +def call_create(cmd) + retval = `#{CEEDLING_CLI_EXEC} module:create[#{cmd}] 2>&1` + puts retval # Debug logging + if retval.match? /Error/i + raise "Received error when creating:\n#{retval}" + else + puts "Created #{cmd}" + end +end + +def call_destroy(cmd) + retval = `#{CEEDLING_CLI_EXEC} module:destroy[#{cmd}] 2>&1` + puts retval # Debug logging + if retval.match? /Error/i + raise "Received error when destroying:\n#{retval}" + else + puts "Destroyed #{cmd}" + end +end + +def call_stub(cmd) + retval = `#{CEEDLING_CLI_EXEC} module:stub[#{cmd}] 2>&1` + puts retval # Debug logging + if retval.match? /Error/i + raise "Received error when stubbing:\n#{retval}" + else + puts "Stubbed #{cmd}" + end +end + +desc "Run integration test on example" +task :integration_test do + chdir("./example/") do + + # Start with a blank example project + prep_test + assert_test_run_contains("No tests executed") + + # Add a module without path. + # It should be added to first path on list of each category + puts "\nVerifying Default Create:" + call_create("a_file") + assert_file_exist("s/rev/a_file.c") + assert_file_exist("i/rev/a_file.h") + assert_file_exist("sub/t/test_a_file.c") + assert_test_run_contains("TESTED: 1") + + # Make sure that we can add modules properly when the directory + # pattern is subdirs with src, inc, and test folders each + puts "\nVerifying Subdirectory Create:" + call_create("sub:b_file") + assert_file_exist("sub/s/b_file.c") + assert_file_exist("sub/i/b_file.h") + assert_file_exist("sub/t/test_b_file.c") + assert_test_run_contains("TESTED: 2") + + # Make sure that we can add modules properly when the directory + # pattern is subdirs under the src, inc, and test folders + puts "\nVerifying Reverse Subdirectory Create:" + call_create("rev:c_file") + assert_file_exist("s/rev/c_file.c") + assert_file_exist("i/rev/c_file.h") + assert_file_exist("t/rev/test_c_file.c") + assert_test_run_contains("TESTED: 3") + + # Does our Boilerplate mechanism work? + puts "\nVerifying Boilerplate:" + assert_file_contains("s/rev/c_file.c", "MAY THE SOURCE BE WITH YOU") + assert_file_contains("i/rev/c_file.h", "feel included") + assert_file_contains("t/rev/test_c_file.c", "Don't Test Me, Sir") + + # Are other essentials being injected + puts "\nVerifying Guts:" + assert_file_contains("s/rev/a_file.c", "#include \"a_file.h\"") + assert_file_contains("i/rev/a_file.h", "#ifndef A_FILE_H") + assert_file_contains("sub/t/test_a_file.c", "test_a_file_NeedToImplement") + + # Destroy a module without path. + # It should be removed from first path on list of each category + puts "\nVerifying Default Destroy:" + call_destroy("a_file") + assert_file_not_exist("s/rev/a_file.c") + assert_file_not_exist("i/rev/a_file.h") + assert_file_not_exist("sub/t/test_a_file.c") + assert_test_run_contains("TESTED: 2") + + # Make sure that we can destroy modules properly when the directory + # pattern is subdirs with src, inc, and test folders each + puts "\nVerifying Subdirectory Destroy:" + call_destroy("sub:b_file") + assert_file_not_exist("sub/s/b_file.c") + assert_file_not_exist("sub/i/b_file.h") + assert_file_not_exist("sub/t/test_b_file.c") + assert_test_run_contains("TESTED: 1") + + # Make sure that we can destroy modules properly when the directory + # pattern is subdirs under the src, inc, and test folders + puts "\nVerifying Reverse Subdirectory Destroy:" + call_destroy("rev:c_file") + assert_file_not_exist("s/rev/c_file.c") + assert_file_not_exist("i/rev/c_file.h") + assert_file_not_exist("t/rev/test_c_file.c") + assert_test_run_contains("No tests executed") + + # Verify stubbing functionality can make a new source file + puts "\nVerifying Stubbing:" + prep_stub(1) + call_stub("i:stubby") + assert_file_contains("s/rev/stubby.c","void shorty") + + # Verify stubbing functionality can update a source file + puts "\nVerifying Stub Updating:" + prep_stub(2) + call_stub("i:stubby") + assert_file_contains("s/rev/stubby.c","void shorty") + assert_file_contains("s/rev/stubby.c","void shrimpy") + assert_file_contains("s/rev/stubby.c","int tiny") + + # Make sure that we can destroy modules properly even when the + # entire set doesn't exist + puts "\nVerifying Partial Destroy:" + call_destroy("i:stubby") + assert_file_not_exist("s/rev/stubby.c") + assert_file_not_exist("i/rev/stubby.h") + prep_test + + puts "\nPASSES MODULE SELF-TESTS" + + end +end + +task :default => [:integration_test] \ No newline at end of file diff --git a/tools/vendor/ceedling/plugins/module_generator/assets/stubby1.h b/tools/vendor/ceedling/plugins/module_generator/assets/stubby1.h new file mode 100644 index 00000000..4941469a --- /dev/null +++ b/tools/vendor/ceedling/plugins/module_generator/assets/stubby1.h @@ -0,0 +1,13 @@ +/* ========================================================================= + Ceedling - Test-Centered Build System for C + ThrowTheSwitch.org + Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams + SPDX-License-Identifier: MIT +========================================================================= */ + +#ifndef STUBBY_H +#define STUBBY_H + +void shorty(int); + +#endif // STUBBY_H diff --git a/tools/vendor/ceedling/plugins/module_generator/assets/stubby2.h b/tools/vendor/ceedling/plugins/module_generator/assets/stubby2.h new file mode 100644 index 00000000..6460a5f9 --- /dev/null +++ b/tools/vendor/ceedling/plugins/module_generator/assets/stubby2.h @@ -0,0 +1,15 @@ +/* ========================================================================= + Ceedling - Test-Centered Build System for C + ThrowTheSwitch.org + Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams + SPDX-License-Identifier: MIT +========================================================================= */ + +#ifndef STUBBY_H +#define STUBBY_H + +void shrimpy(void); +void shorty(int); +int tiny(int a); + +#endif // STUBBY_H diff --git a/tools/vendor/ceedling/plugins/module_generator/config/module_generator.yml b/tools/vendor/ceedling/plugins/module_generator/config/module_generator.yml index cdb2da2e..48d8942d 100644 --- a/tools/vendor/ceedling/plugins/module_generator/config/module_generator.yml +++ b/tools/vendor/ceedling/plugins/module_generator/config/module_generator.yml @@ -1,4 +1,14 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + :module_generator: :project_root: ./ - :source_root: src/ - :test_root: test/ \ No newline at end of file + :naming: :snake #options: :bumpy, :camel, :caps, or :snake + :boilerplates: + :src: "" + :inc: "" + :tst: "" \ No newline at end of file diff --git a/tools/vendor/ceedling/plugins/module_generator/example/project.yml b/tools/vendor/ceedling/plugins/module_generator/example/project.yml new file mode 100644 index 00000000..b1c89915 --- /dev/null +++ b/tools/vendor/ceedling/plugins/module_generator/example/project.yml @@ -0,0 +1,175 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + +--- +:project: + # how to use ceedling. If you're not sure, leave this as `gem` and `?` + :which_ceedling: ../../.. + :ceedling_version: '?' + + # optional features. If you don't need them, keep them turned off for performance + :use_mocks: TRUE + :use_test_preprocessor: :all + :use_backtrace: :none + + # tweak the way ceedling handles automatic tasks + :build_root: build + :test_file_prefix: test_ + :default_tasks: + - test:all + + # performance options. If your tools start giving mysterious errors, consider + # dropping this to 1 to force single-tasking + :test_threads: 8 + :compile_threads: 8 + + # enable release build (more details in release_build section below) + :release_build: FALSE + +# further details to configure the way Ceedling handles test code +:test_build: + :use_assembly: FALSE + +# further details to configure the way Ceedling handles release code +:release_build: + :output: MyApp.out + :use_assembly: FALSE + :artifacts: [] + +# Plugins are optional Ceedling features which can be enabled. Ceedling supports +# a variety of plugins which may effect the way things are compiled, reported, +# or may provide new command options. Refer to the readme in each plugin for +# details on how to use it. +:plugins: + :load_paths: [] + :enabled: + #- beep # beeps when finished, so you don't waste time waiting for ceedling + - module_generator # handy for quickly creating source, header, and test templates + #- gcov # test coverage using gcov. Requires gcc, gcov, and a coverage analyzer like gcovr + #- bullseye # test coverage using bullseye. Requires bullseye for your platform + #- command_hooks # write custom actions to be called at different points during the build process + #- compile_commands_json_db # generate a compile_commands.json file + #- dependencies # automatically fetch 3rd party libraries, etc. + #- subprojects # managing builds and test for static libraries + #- fake_function_framework # use FFF instead of CMock + + # Report options (You'll want to choose one stdout option, but may choose multiple stored options if desired) + #- test_suite_reporter + - report_tests_raw_output_log + - report_tests_pretty_stdout + #- report_tests_ide_stdout + #- report_tests_gtestlike_stdout + #- teamcity_tests_report + #- warnings_report + +# override the default extensions for your system and toolchain +:extension: + #:header: .h + #:source: .c + #:assembly: .s + #:dependencies: .d + #:object: .o + :executable: .out + #:testpass: .pass + #:testfail: .fail + #:subprojects: .a + +# This is where Ceedling should look for your source and test files. +# see documentation for the many options for specifying this. +:paths: + :test: + - +:sub/t + - +:t/** + :source: + - s/** + - sub/s + :include: + - i/** + - sub/i + :libraries: [] + +# You can even specify specific files to add or remove from your test +# and release collections. Usually it's better to use paths and let +# Ceedling do the work for you! +:files: + :test: [] + :source: [] + +# Compilation symbols to be injected into builds +# See documentation for advanced options: +# - Test name matchers for different symbols per test executable build +# - Referencing symbols in multiple lists using advanced YAML +# - Specifiying symbols used during test preprocessing +:defines: + :test: + - TEST # Simple list option to add symbol 'TEST' to compilation of all files in all test executables + :release: [] + + # Enable to inject name of a test as a unique compilation symbol into its respective executable build. + :use_test_definition: FALSE + +# Configure additional command line flags provided to tools used in each build step +# :flags: +# :release: +# :compile: # Add '-Wall' and '--02' to compilation of all files in release target +# - -Wall +# - --O2 +# :test: +# :compile: +# '(_|-)special': # Add '-pedantic' to compilation of all files in all test executables with '_special' or '-special' in their names +# - -pedantic +# '*': # Add '-foo' to compilation of all files in all test executables +# - -foo + +# Configuration Options specific to CMock. See CMock docs for details +:cmock: + :mock_prefix: mock_ + :when_no_prototypes: :warn + :enforce_strict_ordering: TRUE + :plugins: + - :ignore + - :callback + :treat_as: + uint8: HEX8 + uint16: HEX16 + uint32: UINT32 + int8: INT8 + bool: UINT8 + +# Configuration options specific to Unity. +:unity: + :defines: + - UNITY_EXCLUDE_FLOAT + +# You can optionally have ceedling create environment variables for you before +# performing the rest of its tasks. +:environment: [] + +# LIBRARIES +# These libraries are automatically injected into the build process. Those specified as +# common will be used in all types of builds. Otherwise, libraries can be injected in just +# tests or releases. These options are MERGED with the options in supplemental yaml files. +:libraries: + :placement: :end + :flag: "-l${1}" + :path_flag: "-L ${1}" + :system: [] # for example, you might list 'm' to grab the math library + :test: [] + :release: [] + +:module_generator: + :project_root: ./ + :naming: :snake #options: :bumpy, :camel, :caps, or :snake + :boilerplates: + :src: "/* MAY THE SOURCE BE WITH YOU */" + :inc: | + /* ================================== + | It's important to make everyone + | feel included, particularly in + | when making important decisions. + ===================================*/ + :tst: "// Don't Test Me, Sir." diff --git a/tools/vendor/ceedling/plugins/module_generator/lib/module_generator.rb b/tools/vendor/ceedling/plugins/module_generator/lib/module_generator.rb index 9b9bfb12..ffdabd08 100644 --- a/tools/vendor/ceedling/plugins/module_generator/lib/module_generator.rb +++ b/tools/vendor/ceedling/plugins/module_generator/lib/module_generator.rb @@ -1,3 +1,10 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + require 'ceedling/plugin' require 'ceedling/constants' require 'erb' @@ -9,8 +16,13 @@ class ModuleGenerator < Plugin def create(module_name, optz={}) - require "generate_module.rb" #From Unity Scripts + # grab our own reference to the main configuration hash + @project_config = @ceedling[:configurator].project_config_hash + + # load the generate module script form Unity's collection of scripts. + require "generate_module.rb" + # if asked to destroy, do so. otherwise create (because isn't creating something always better?) if ((!optz.nil?) && (optz[:destroy])) UnityModuleGenerator.new( divine_options(optz) ).destroy(module_name) else @@ -19,25 +31,28 @@ def create(module_name, optz={}) end def stub_from_header(module_name, optz={}) - require "cmock.rb" #From CMock + + # grab our own reference to the main configuration hash + @project_config = @ceedling[:configurator].project_config_hash + + # load CMock to be used for stubbing here. + require "cmock.rb" + + # generate skeleton file stuboptz = divine_options(optz) - pathname = optz[:path_inc] || optz[:path_src] || "src" - filename = File.expand_path(optz[:module_root_path], File.join(pathname, module_name + ".h")) + stuboptz[:subdir] = nil + stuboptz[:mock_path] = stuboptz[:path_src] + filename = File.join(stuboptz[:path_inc], module_name + ".h") + puts stuboptz.to_yaml CMock.new(stuboptz).setup_skeletons(filename) end private def divine_options(optz={}) + # Build default configuration based on looking up other values unity_generator_options = { - :path_src => ((defined? MODULE_GENERATOR_SOURCE_ROOT ) ? MODULE_GENERATOR_SOURCE_ROOT.gsub('\\', '/').sub(/^\//, '').sub(/\/$/, '') : "src" ), - :path_inc => ((defined? MODULE_GENERATOR_INC_ROOT ) ? - MODULE_GENERATOR_INC_ROOT.gsub('\\', '/').sub(/^\//, '').sub(/\/$/, '') - : (defined? MODULE_GENERATOR_SOURCE_ROOT ) ? - MODULE_GENERATOR_SOURCE_ROOT.gsub('\\', '/').sub(/^\//, '').sub(/\/$/, '') - : "src" ), - :path_tst => ((defined? MODULE_GENERATOR_TEST_ROOT ) ? MODULE_GENERATOR_TEST_ROOT.gsub( '\\', '/').sub(/^\//, '').sub(/\/$/, '') : "test" ), :pattern => optz[:pattern], :test_prefix => ((defined? PROJECT_TEST_FILE_PREFIX ) ? PROJECT_TEST_FILE_PREFIX : "Test" ), :mock_prefix => ((defined? CMOCK_MOCK_PREFIX ) ? CMOCK_MOCK_PREFIX : "Mock" ), @@ -45,10 +60,25 @@ def divine_options(optz={}) :boilerplates => ((defined? MODULE_GENERATOR_BOILERPLATES) ? MODULE_GENERATOR_BOILERPLATES : {} ), :naming => ((defined? MODULE_GENERATOR_NAMING ) ? MODULE_GENERATOR_NAMING : nil ), :update_svn => ((defined? MODULE_GENERATOR_UPDATE_SVN ) ? MODULE_GENERATOR_UPDATE_SVN : false ), - :skeleton_path=> ((defined? MODULE_GENERATOR_SOURCE_ROOT ) ? MODULE_GENERATOR_SOURCE_ROOT.gsub('\\', '/').sub(/^\//, '').sub(/\/$/, '') : "src" ), :test_define => ((defined? MODULE_GENERATOR_TEST_DEFINE ) ? MODULE_GENERATOR_TEST_DEFINE : "TEST" ), } + # Add our lookup paths to this, based on overall project configuration + unity_generator_options[:paths_src] = @project_config[:collection_paths_source] || [ 'src' ] + unity_generator_options[:paths_inc] = @project_config[:collection_paths_include] || @project_config[:collection_paths_source] || [ 'src' ] + unity_generator_options[:paths_tst] = @project_config[:collection_paths_test] || [ 'test' ] + + # Flatten if necessary + if (unity_generator_options[:paths_src].class == Hash) + unity_generator_options[:paths_src] = unity_generator_options[:paths_src].values.flatten + end + if (unity_generator_options[:paths_inc].class == Hash) + unity_generator_options[:paths_inc] = unity_generator_options[:paths_inc].values.flatten + end + if (unity_generator_options[:paths_tst].class == Hash) + unity_generator_options[:paths_tst] = unity_generator_options[:paths_tst].values.flatten + end + # Read Boilerplate template file. if (defined? MODULE_GENERATOR_BOILERPLATE_FILES) @@ -67,11 +97,19 @@ def divine_options(optz={}) end end - # If using "create[:]" option from command line. - unless optz[:module_root_path].to_s.empty? - unity_generator_options[:path_src] = File.join(optz[:module_root_path], unity_generator_options[:path_src]) - unity_generator_options[:path_inc] = File.join(optz[:module_root_path], unity_generator_options[:path_inc]) - unity_generator_options[:path_tst] = File.join(optz[:module_root_path], unity_generator_options[:path_tst]) + # Check if using "create[:]" optional paths from command line. + if optz[:module_root_path].to_s.empty? + # No path specified. Use the first of each list because we have nothing else to base it on + unity_generator_options[:skeleton_path] = unity_generator_options[:paths_src][0] + unity_generator_options[:path_src] = unity_generator_options[:paths_src][0] + unity_generator_options[:path_inc] = unity_generator_options[:paths_inc][0] + unity_generator_options[:path_tst] = unity_generator_options[:paths_tst][0] + else + # A path was specified. Do our best to determine which is the best choice based on this information + unity_generator_options[:skeleton_path] = @ceedling[:file_finder_helper].find_best_path_in_collection(optz[:module_root_path], unity_generator_options[:paths_src], :ignore) || unity_generator_options[:paths_src][0] + unity_generator_options[:path_src] = @ceedling[:file_finder_helper].find_best_path_in_collection(optz[:module_root_path], unity_generator_options[:paths_src], :ignore) || unity_generator_options[:paths_src][0] + unity_generator_options[:path_inc] = @ceedling[:file_finder_helper].find_best_path_in_collection(optz[:module_root_path], unity_generator_options[:paths_inc], :ignore) || unity_generator_options[:paths_inc][0] + unity_generator_options[:path_tst] = @ceedling[:file_finder_helper].find_best_path_in_collection(optz[:module_root_path], unity_generator_options[:paths_tst], :ignore) || unity_generator_options[:paths_tst][0] end return unity_generator_options diff --git a/tools/vendor/ceedling/plugins/module_generator/module_generator.rake b/tools/vendor/ceedling/plugins/module_generator/module_generator.rake index f4ed9f11..e1340f23 100644 --- a/tools/vendor/ceedling/plugins/module_generator/module_generator.rake +++ b/tools/vendor/ceedling/plugins/module_generator/module_generator.rake @@ -1,3 +1,9 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= namespace :module do module_root_separator = ":" @@ -10,6 +16,7 @@ namespace :module do p = files.delete(pat) optz[:pattern] = p unless p.nil? end + files.each do |v| module_root_path, module_name = v.split(module_root_separator, 2) if module_name diff --git a/tools/vendor/ceedling/plugins/raw_output_report/README.md b/tools/vendor/ceedling/plugins/raw_output_report/README.md deleted file mode 100644 index 330e87d3..00000000 --- a/tools/vendor/ceedling/plugins/raw_output_report/README.md +++ /dev/null @@ -1,19 +0,0 @@ -ceedling-raw-output-report -========================== - -## Overview - -The raw-output-report allows you to capture all the output from the called -tools in a single document, so you can trace back through it later. This is -useful for debugging... but can eat through memory quickly if left running. - -## Setup - -Enable the plugin in your project.yml by adding `raw_output_report` -to the list of enabled plugins. - -``` YAML -:plugins: - :enabled: - - raw_output_report -``` diff --git a/tools/vendor/ceedling/plugins/raw_output_report/lib/raw_output_report.rb b/tools/vendor/ceedling/plugins/raw_output_report/lib/raw_output_report.rb deleted file mode 100644 index 014e6771..00000000 --- a/tools/vendor/ceedling/plugins/raw_output_report/lib/raw_output_report.rb +++ /dev/null @@ -1,41 +0,0 @@ -require 'ceedling/plugin' -require 'ceedling/constants' - -class RawOutputReport < Plugin - def setup - @log_paths = {} - end - - def post_test_fixture_execute(arg_hash) - output = strip_output(arg_hash[:shell_result][:output]) - write_raw_output_log(arg_hash, output) - end - - private - - def strip_output(raw_output) - output = "" - raw_output.each_line do |line| - next if line =~ /^\n$/ - next if line =~ /^.*:\d+:.*:(IGNORE|PASS|FAIL)/ - return output if line =~/^-----------------------\n$/ - output << line - end - end - def write_raw_output_log(arg_hash, output) - logging = generate_log_path(arg_hash) - @ceedling[:file_wrapper].write(logging[:path], output , logging[:flags]) unless logging.nil? - end - - def generate_log_path(arg_hash) - f_name = File.basename(arg_hash[:result_file], '.pass') - base_path = File.join(PROJECT_BUILD_ARTIFACTS_ROOT, arg_hash[:context].to_s) - file_path = File.join(base_path, f_name + '.log') - - if @ceedling[:file_wrapper].exist?(base_path) - return { path: file_path, flags: 'w' } - end - - nil - end -end diff --git a/tools/vendor/ceedling/plugins/report_build_warnings_log/README.md b/tools/vendor/ceedling/plugins/report_build_warnings_log/README.md new file mode 100644 index 00000000..1a71faf1 --- /dev/null +++ b/tools/vendor/ceedling/plugins/report_build_warnings_log/README.md @@ -0,0 +1,40 @@ +# Ceedling Plugin: Build Warnings Log + +Capture build process warnings from command tools to a plain text log file. + +# Plugin Overview + +This plugin captures warning messages output by command line tools throughout a +build. At the end of a build, any collected warning messages are written to one +or more plain text log files. + +Warning messages are collected for all compilation-related builds and +differentiated by build context — `test`, `release`, or plugin-modified build +(e.g. `gcov`). + +Ceedling warning messages or warning messages from code generation will not +appear in log files; warnings are only collected from build step command line +tools for the predefined build steps of preprocessing, compilation, and +linking. + +Log files are written to `/artifacts//`. + +# Setup + +Enable the plugin in your Ceedling project file: + +```yaml +:plugins: + :enabled: + - report_build_warnings_log +``` + +# Configuration + +To change the default filename of `warning.log`, add your desired filename to +your configuration file using `:report_build_warnings_log:` ↳ `:filename`. + +```yaml +:report_build_warnings_log: + :filename: more_better_filename.ext +``` diff --git a/tools/vendor/ceedling/plugins/report_build_warnings_log/config/defaults.yml b/tools/vendor/ceedling/plugins/report_build_warnings_log/config/defaults.yml new file mode 100644 index 00000000..dfa1f8c2 --- /dev/null +++ b/tools/vendor/ceedling/plugins/report_build_warnings_log/config/defaults.yml @@ -0,0 +1,12 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + + +--- +:report_build_warnings_log: + :filename: warnings.log +... \ No newline at end of file diff --git a/tools/vendor/ceedling/plugins/report_build_warnings_log/lib/report_build_warnings_log.rb b/tools/vendor/ceedling/plugins/report_build_warnings_log/lib/report_build_warnings_log.rb new file mode 100644 index 00000000..2c28a04e --- /dev/null +++ b/tools/vendor/ceedling/plugins/report_build_warnings_log/lib/report_build_warnings_log.rb @@ -0,0 +1,143 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + + +require 'ceedling/plugin' +require 'ceedling/constants' + +class ReportBuildWarningsLog < Plugin + + # `Plugin` setup() + def setup + # Create structure of @warnings hash with default values + @warnings = Hash.new() do |h,k| + # k => :context + h[k] = { + collection: [], + } + end + + # Ceedling can run with multiple threads, provide a lock to use around @warnings + @mutex = Mutex.new() + + # Get default (default.yml) / user-set log filename in project configuration + @log_filename = @ceedling[:configurator].report_build_warnings_log_filename + + # Convenient instance variable references + @file_wrapper = @ceedling[:file_wrapper] + @loginator = @ceedling[:loginator] + @reportinator = @ceedling[:reportinator] + end + + # `Plugin` build step hook + def post_mock_preprocess(arg_hash) + # After preprocessing, parse output, store warning if found + process_output( + arg_hash[:context], + arg_hash[:shell_result][:output], + @warnings + ) + end + + # `Plugin` build step hook + def post_test_preprocess(arg_hash) + # After preprocessing, parse output, store warning if found + process_output( + arg_hash[:context], + arg_hash[:shell_result][:output], + @warnings + ) + end + + # `Plugin` build step hook + def post_compile_execute(arg_hash) + # After compiling, parse output, store warning if found + process_output( + arg_hash[:context], + arg_hash[:shell_result][:output], + @warnings + ) + end + + # `Plugin` build step hook + def post_link_execute(arg_hash) + # After linking, parse output, store warning if found + process_output( + arg_hash[:context], + arg_hash[:shell_result][:output], + @warnings + ) + end + + # `Plugin` build step hook + def post_build() + # Write collected warnings to log(s) + write_logs( @warnings, @log_filename ) + end + + # `Plugin` build step hook + def post_error() + # Write collected warnings to log(s) + write_logs( @warnings, @log_filename ) + end + + ### Private ### + + private + + # Extract warning messages and store to hash in thread-safe manner + def process_output(context, output, hash) + # If $stderr/$stdout does not contain "warning", bail out + return if !(output =~ /warning/i) + + # Store warning message + @mutex.synchronize do + hash[context][:collection] << output + end + end + + # Walk warnings hash and write contents to log file(s) + def write_logs( warnings, filename ) + msg = @reportinator.generate_heading( "Running Warnings Report" ) + @loginator.log( msg ) + + empty = false + + @mutex.synchronize { empty = warnings.empty? } + + if empty + @loginator.log( "Build produced no warnings.\n" ) + return + end + + @mutex.synchronize do + warnings.each do |context, hash| + log_filepath = form_log_filepath( context, filename ) + + msg = @reportinator.generate_progress( "Generating artifact #{log_filepath}" ) + @loginator.log( msg ) + + File.open( log_filepath, 'w' ) do |f| + hash[:collection].each { |warning| f << warning } + end + end + end + + # White space at command line after progress messages + @loginator.log( '' ) + end + + def form_log_filepath(context, filename) + path = File.join( PROJECT_BUILD_ARTIFACTS_ROOT, context.to_s ) + filepath = File.join(path, filename) + + # Ensure containing artifact directory exists + @file_wrapper.mkdir( path ) + + return filepath + end +end diff --git a/tools/vendor/ceedling/plugins/report_tests_gtestlike_stdout/README.md b/tools/vendor/ceedling/plugins/report_tests_gtestlike_stdout/README.md new file mode 100644 index 00000000..802be6c7 --- /dev/null +++ b/tools/vendor/ceedling/plugins/report_tests_gtestlike_stdout/README.md @@ -0,0 +1,96 @@ +# Ceedling Plugin: GTest-like Test Suite Console Report + +Prints to the console ($stdout) test suite results in a GTest-like format. + +# Plugin Overview + +This plugin is intended to be used in place of the more commonly used "pretty" +test report plugin. Like its sibling, this plugin ollects raw test results from +the individual test executables of your test suite and presents them in a more +readable summary form — specifically the GoogleTest format. + +This plugin is most useful when using an IDE or working with a CI system that +understands the GTest console logging format. + +# Setup + +Enable the plugin in your Ceedling project by adding +`report_tests_gtestlike_stdout` to the list of enabled plugins instead of any +other `report_tests_*_stdout` plugin. + +```YAML +:plugins: + :enabled: + - report_tests_gtestlike_stdout +``` + +# Configuration + +No additional configuration is needed once the plugin is enabled. + +# Plugin Output + +## Ceedling mapped to GoogleTest reporting elements + +Ceedling's conventions and output map to GTest format as the following: + +* A Ceedling test file — ultimately an individual test executable — is a GTest + _test case_. +* A Ceedling test case (a.k.a. unit test) is a GTest _test_. +* Execution time is collected for each Ceedling test executable, not each + Ceedling test case. As such, the test report includes only execution time for + each GTest _test case_. Individual test execution times are reported as 0 ms. + +GoogleTest generates reporting output incrementally. Ceedling produces test +results incrementally as well, but its plugin reporting structure does not +collect and format statistics until the end of a build. This plugin duplicates +the tense of the wording in a GTest report, but it is unintentionally somewhat +misleading. + +## Example output (snippet) + +The GTest format is verbose. It lists all tests with success and failure results. + +The example output below shows the header and footer of test results for a suite +of 49 Ceedling tests in 18 test files but only includes logging for 6 tests. + +```sh + > ceedling test:all +``` + +``` +[==========] Running 49 tests from 18 test cases. +[----------] Global test environment set-up. + + ... + +[----------] 4 tests from test/TestUsartModel.c +[ RUN ] test/TestUsartModel.c.testGetBaudRateRegisterSettingShouldReturnAppropriateBaudRateRegisterSetting +[ OK ] test/TestUsartModel.c.testGetBaudRateRegisterSettingShouldReturnAppropriateBaudRateRegisterSetting (0 ms) +[ RUN ] test/TestUsartModel.c.testGetFormattedTemperatureFormatsTemperatureFromCalculatorAppropriately +[ OK ] test/TestUsartModel.c.testGetFormattedTemperatureFormatsTemperatureFromCalculatorAppropriately (0 ms) +[ RUN ] test/TestUsartModel.c.testShouldReturnErrorMessageUponInvalidTemperatureValue +[ OK ] test/TestUsartModel.c.testShouldReturnErrorMessageUponInvalidTemperatureValue (0 ms) +[ RUN ] test/TestUsartModel.c.testShouldReturnWakeupMessage +[ OK ] test/TestUsartModel.c.testShouldReturnWakeupMessage (0 ms) +[----------] 4 tests from test/TestUsartModel.c (1277 ms total) +[----------] 1 tests from test/TestMain.c +[ RUN ] test/TestMain.c.testMainShouldCallExecutorInitAndContinueToCallExecutorRunUntilHalted +[ OK ] test/TestMain.c.testMainShouldCallExecutorInitAndContinueToCallExecutorRunUntilHalted (0 ms) +[----------] 1 tests from test/TestMain.c (1351 ms total) +[----------] 1 tests from test/TestModel.c +[ RUN ] test/TestModel.c.testInitShouldCallSchedulerAndTemperatureFilterInit +test/TestModel.c(21): error: Function TaskScheduler_Init() called more times than expected. + Actual: FALSE + Expected: TRUE +[ FAILED ] test/TestModel.c.testInitShouldCallSchedulerAndTemperatureFilterInit (0 ms) +[----------] 1 tests from test/TestModel.c (581 ms total) + +[----------] Global test environment tear-down. +[==========] 49 tests from 18 test cases ran. +[ PASSED ] 48 tests. +[ FAILED ] 1 tests, listed below: +[ FAILED ] test/TestModel.c.testInitShouldCallSchedulerAndTemperatureFilterInit + + 1 FAILED TESTS +``` diff --git a/tools/vendor/ceedling/plugins/stdout_gtestlike_tests_report/assets/template.erb b/tools/vendor/ceedling/plugins/report_tests_gtestlike_stdout/assets/template.erb similarity index 91% rename from tools/vendor/ceedling/plugins/stdout_gtestlike_tests_report/assets/template.erb rename to tools/vendor/ceedling/plugins/report_tests_gtestlike_stdout/assets/template.erb index fb8e3b13..b312cdb1 100644 --- a/tools/vendor/ceedling/plugins/stdout_gtestlike_tests_report/assets/template.erb +++ b/tools/vendor/ceedling/plugins/report_tests_gtestlike_stdout/assets/template.erb @@ -1,8 +1,7 @@ % ignored = hash[:results][:counts][:ignored] % failed = hash[:results][:counts][:failed] % stdout_count = hash[:results][:counts][:stdout] -% header_prepend = ((hash[:header].length > 0) ? "#{hash[:header]}: " : '') -% banner_width = 25 + header_prepend.length # widest message +% name_banner = (" #{hash[:header]}" + (' ' * (9 - hash[:header].length)))[0..9] % results = {} % hash[:results][:successes].each do |testresult| % results[ testresult[:source][:file] ] = testresult[:collection] @@ -28,7 +27,8 @@ % end % end - +[==========] +[<%=name_banner%>] [==========] Running <%=hash[:results][:counts][:total].to_s%> tests from <%=results.length.to_s%> test cases. [----------] Global test environment set-up. % results.each_pair do |modulename, moduledetails| @@ -57,17 +57,16 @@ [ OK ] <%=modulename%>.<%=item[:test]%> (0 ms) % end % end -[----------] <%=moduledetails.length.to_s%> tests from <%=modulename%> (0 ms total) +% duration = ((hash[:results][:times][modulename]) * 1000.0).round(0) +[----------] <%=moduledetails.length.to_s%> tests from <%=modulename%> (<%=duration%> ms total) % end % if (hash[:results][:counts][:total] > 0) [----------] Global test environment tear-down. -[==========] <%=hash[:results][:counts][:total].to_s%> tests from <%=hash[:results][:stdout].length.to_s%> test cases ran. +[==========] <%=hash[:results][:counts][:total].to_s%> tests from <%=results.length.to_s%> test cases ran. [ PASSED ] <%=hash[:results][:counts][:passed].to_s%> tests. % if (failed == 0) [ FAILED ] 0 tests. - - 0 FAILED TESTS % else [ FAILED ] <%=failed.to_s%> tests, listed below: % hash[:results][:failures].each do |failure| diff --git a/tools/vendor/ceedling/plugins/report_tests_gtestlike_stdout/config/report_tests_gtestlike_stdout.yml b/tools/vendor/ceedling/plugins/report_tests_gtestlike_stdout/config/report_tests_gtestlike_stdout.yml new file mode 100644 index 00000000..399c3d58 --- /dev/null +++ b/tools/vendor/ceedling/plugins/report_tests_gtestlike_stdout/config/report_tests_gtestlike_stdout.yml @@ -0,0 +1,11 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + +--- +:plugins: + # tell Ceedling we got results display taken care of + :display_raw_test_results: FALSE diff --git a/tools/vendor/ceedling/plugins/report_tests_gtestlike_stdout/lib/report_tests_gtestlike_stdout.rb b/tools/vendor/ceedling/plugins/report_tests_gtestlike_stdout/lib/report_tests_gtestlike_stdout.rb new file mode 100644 index 00000000..20e7553b --- /dev/null +++ b/tools/vendor/ceedling/plugins/report_tests_gtestlike_stdout/lib/report_tests_gtestlike_stdout.rb @@ -0,0 +1,69 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + +require 'ceedling/plugin' +require 'ceedling/defaults' + +class ReportTestsGtestlikeStdout < Plugin + + # `Plugin` setup() + def setup + @result_list = [] + @mutex = Mutex.new + + # Fetch the test results template for this plugin + template = @ceedling[:file_wrapper].read( File.join( @plugin_root_path, 'assets/template.erb' ) ) + + # Set the report template + @ceedling[:plugin_reportinator].register_test_results_template( template ) + end + + # `Plugin` build step hook -- collect result file paths after each test fixture execution + def post_test_fixture_execute(arg_hash) + # Thread-safe manipulation since test fixtures can be run in child processes + # spawned within multiple test execution threads. + @mutex.synchronize do + @result_list << arg_hash[:result_file] + end + end + + # `Plugin` build step hook -- render a report immediately upon build completion (that invoked tests) + def post_build() + # Ensure a test task was invoked as part of the build + return if not (@ceedling[:task_invoker].test_invoked?) + + results = @ceedling[:plugin_reportinator].assemble_test_results( @result_list ) + hash = { + :header => TEST_SYM.upcase(), + :results => results + } + + @ceedling[:plugin_reportinator].run_test_results_report(hash) + end + + # `Plugin` build step hook -- render a test results report on demand using results from a previous build + def summary() + # Build up the list of passing results from all tests + result_list = @ceedling[:file_path_utils].form_pass_results_filelist( + PROJECT_TEST_RESULTS_PATH, + COLLECTION_ALL_TESTS + ) + + hash = { + :header => TEST_SYM.upcase(), + # Collect all existing test results (success or failing) in the filesystem, + # limited to our test collection + :results => @ceedling[:plugin_reportinator].assemble_test_results( + result_list, + {:boom => false} + ) + } + + @ceedling[:plugin_reportinator].run_test_results_report( hash ) + end + +end diff --git a/tools/vendor/ceedling/plugins/report_tests_ide_stdout/README.md b/tools/vendor/ceedling/plugins/report_tests_ide_stdout/README.md new file mode 100644 index 00000000..03d46655 --- /dev/null +++ b/tools/vendor/ceedling/plugins/report_tests_ide_stdout/README.md @@ -0,0 +1,62 @@ +# Ceedling Plugin: IDE Test Suite Console Report + +Prints to the console ($stdout) test suite results with a test failure filepath and line number format understood by nearly any IDE. + +# Plugin Overview + +This plugin is intended to be used in place of the more commonly used "pretty" +test report plugin. Like its sibling, this plugin ollects raw test results from +the individual test executables of your test suite and presents them in a more +readable summary form. + +The format of test results produced by this plugin is identical to its prettier +sibling with one key difference — test failures are listed in such a way that +filepaths, line numbers, and test case function names can be easily parsed by +a typical IDE. The formatting of test failure messages uses a simple, defacto +standard of a sort recognized almost universally. + +The end result is that test failures in your IDE's build window can become +links that jump directly to failing test cases. + +# Setup + +Enable the plugin in your project.yml by adding `report_tests_ide_stdout` to +the list of enabled plugins instead of any other `report_tests_*_stdout` +plugin. + +``` YAML +:plugins: + :enabled: + - report_tests_ide_stdout +``` + +# Configuration + +No additional configuration is needed once the plugin is enabled. + +# Example Output + +```sh + > ceedling test:Model +``` + +``` +------------------- +FAILED TEST SUMMARY +------------------- +test/TestModel.c:21:testInitShouldCallSchedulerAndTemperatureFilterInit: "Function TaskScheduler_Init() called more times than expected." + +-------------------- +OVERALL TEST SUMMARY +-------------------- +TESTED: 1 +PASSED: 0 +FAILED: 1 +IGNORED: 0 + +--------------------- +BUILD FAILURE SUMMARY +--------------------- +Unit test failures. +``` + diff --git a/tools/vendor/ceedling/plugins/report_tests_ide_stdout/config/report_tests_ide_stdout.yml b/tools/vendor/ceedling/plugins/report_tests_ide_stdout/config/report_tests_ide_stdout.yml new file mode 100644 index 00000000..399c3d58 --- /dev/null +++ b/tools/vendor/ceedling/plugins/report_tests_ide_stdout/config/report_tests_ide_stdout.yml @@ -0,0 +1,11 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + +--- +:plugins: + # tell Ceedling we got results display taken care of + :display_raw_test_results: FALSE diff --git a/tools/vendor/ceedling/plugins/report_tests_ide_stdout/lib/report_tests_ide_stdout.rb b/tools/vendor/ceedling/plugins/report_tests_ide_stdout/lib/report_tests_ide_stdout.rb new file mode 100644 index 00000000..40c343fa --- /dev/null +++ b/tools/vendor/ceedling/plugins/report_tests_ide_stdout/lib/report_tests_ide_stdout.rb @@ -0,0 +1,72 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + +require 'ceedling/plugin' +require 'ceedling/defaults' + +class ReportTestsIdeStdout < Plugin + + # `Plugin` setup() + def setup + @result_list = [] + @mutex = Mutex.new + + # Set the report template (which happens to be the Ceedling default) + @ceedling[:plugin_reportinator].register_test_results_template( + DEFAULT_TESTS_RESULTS_REPORT_TEMPLATE + ) + end + + # `Plugin` build step hook -- collect result file paths after each test fixture execution + def post_test_fixture_execute(arg_hash) + # Thread-safe manipulation since test fixtures can be run in child processes + # spawned within multiple test execution threads. + @mutex.synchronize do + @result_list << arg_hash[:result_file] + end + end + + # `Plugin` build step hook -- render a report immediately upon build completion (that invoked tests) + def post_build() + # Ensure a test task was invoked as part of the build + return if (not @ceedling[:task_invoker].test_invoked?) + + results = @ceedling[:plugin_reportinator].assemble_test_results( @result_list ) + hash = { + :header => '', + :results => results + } + + @ceedling[:plugin_reportinator].run_test_results_report( hash ) do + message = '' + message = 'Unit test failures.' if (hash[:results][:counts][:failed] > 0) + message + end + end + + # `Plugin` build step hook -- render a test results report on demand using results from a previous build + def summary() + # Build up the list of passing results from all tests + result_list = @ceedling[:file_path_utils].form_pass_results_filelist( + PROJECT_TEST_RESULTS_PATH, + COLLECTION_ALL_TESTS + ) + + hash = { + :header => '', + # Collect all existing test results (success or failing) in the filesystem, + # limited to our test collection + :results => @ceedling[:plugin_reportinator].assemble_test_results( + result_list, + {:boom => false} + ) + } + + @ceedling[:plugin_reportinator].run_test_results_report( hash ) + end + +end diff --git a/tools/vendor/ceedling/plugins/report_tests_log_factory/README.md b/tools/vendor/ceedling/plugins/report_tests_log_factory/README.md new file mode 100644 index 00000000..95dcd385 --- /dev/null +++ b/tools/vendor/ceedling/plugins/report_tests_log_factory/README.md @@ -0,0 +1,446 @@ +# Ceedling Plugin: Test Suite Report Log Factory + +Generate one or more built-in test suite reports — JSON, JUnit XML, CppUnit XML, or HTML — or create your own. + +# Plugin Overview + +Test reports are handy for all sorts of reasons. Various build and reporting tools are able to generate, visualize, or otherwise process results encoded in handy container formats including JSON and XML. + +This plugin generates one or more of up to four available test suite report formats: + +1. JSON +1. JUnit XML +1. CppUnit XML +1. HTML + +This plugin generates reports after test builds, storing them in your project `artifacts/` build path. + +With a limited amount of Ruby code, you can also create your own report without creating an entire Ceedling plugin. + +# _User Beware_ + +Test reports often lack well managed standards or even much documentation at all. Different revisions of the formats exist as do different flavors of the same version produced by different tools. + +If a test report produced by this plugin does not work for your needs or is not recognized by your report processing tool of choice, well, sadly, this is not all that uncommon. You have at least two options: + +1. Use a script or other tool to post-process the report into a format that works for you. You might be surprised how many of these hacks are commonly necessary and exist peppered throughout online forums. You can incorporate any such post-processing step by enabling the `command_hooks` Ceedling plugin (lower in the plugin list than this plugin) and configuring a Ceedling tool to run the needed transformation. +1. Use Ceedling's abilities plus features of this plugin (documented below) to generate your own test report with a minimal amount of Ruby code. + +# Setup + +Enable the plugin in your Ceedling project file by adding `report_tests_log_factory` to the list of enabled plugins. + +```yaml +:plugins: + :enabled: + - report_tests_log_factory +``` + +All generated reports are written to `/artifacts/`. Your Ceedling project file specifies `` as a required entry for any build. Your build's context defaults to `test`. Certain other test build plugins (e.g. GCov) provide a different context (e.g. `gcov`) for test builds, generally named after themselves. That is, for example, if this plugin is used in conjunction with a GCov coverage build, the reports will end up in a subdirectory other than `test/`, `gcov/`. + +# Configuration + +Enable the reports you wish to generate — `json`, `junit`, and/or `cppunit` — within the `:report_tests_log_factory` ↳ `:reports` configuration list. + +```yaml +:report_tests_log_factory: + # Any one or all four of the following... + :reports: + - json + - junit + - cppunit + - html +``` + +Each report is written to a default filename within `/artifacts/`: + +* JSON: _tests_report.json_ +* JUnit XML: _junit_tests_report.xml_ +* CppUnit XML: _cppunit_tests_report.xml_ +* HTML: _tests_report.html_ + +To change the output filename, specify it with the `:filename` key beneath the relevant report within the `:report_tests_log_factory` configuration block: + +```yaml +:report_tests_log_factory: + # Replace `` with one of the available options above. + # Each report can have its own sub-configuration block. + :reports: + - + :: + :filename: 'more_better_filename.ext' +``` + +# Built-in Reports + +## Execution duration values + +Some test reporting formats include the execution time (duration) for aspects of a test suite run. Various granularities exist from the total time for all tests to the time of each suite (per the relevant defition of a suite) to the time required to run individual test cases. See _CeedlingPacket_ for the details on time duration values. + +Ceedling automatically gathers all the relevant durations. In fact, Ceedling itself performs the needed timing and arithmetric in all cases, except one. Individual test case exection time tracking is specifically a [Unity] feature (see its documentation for more details). If enabled and if your platform supports the time mechanism Unity relies on, Ceedling will automatically collect test case time values and make them available to reports. + +To enable test case duration measurements, they must be enabled as a Unity compilation option. Add `UNITY_INCLUDE_EXEC_TIME` to Unity's compilation symbols (`:unity` ↳ `:defines`) in your Ceedling project file (below). This plugin and the core of Ceedling take care of the rest. Unity test case durations as reported by Ceedling default to 0 if this Unity compilation option is not configured. + +```yaml +:unity: + :defines: + - UNITY_INCLUDE_EXEC_TIME +``` + +_Note:_ Most test cases are quite short, and most computers are quite fast. As such, Unity test case execution time is often reported as 0 milliseconds as the CPU execution time for a test case typically remains in the microseconds range. Unity would require special rigging that is inconsistently available across platforms to measure test case durations at a finer resolution. + +[Unity]: https://github.com/ThrowTheSwitch/Unity + +## JSON Format + +[JSON] is “a lightweight data-interchange format.” JSON serializes common data structures into a human readable form. The format has several pros, including the ability for entirely different programming languages to ingest JSON and recreate these data structures. As such, this makes JSON a good report generation option as the result can be easily programmatically manipulated and put to use. + +Something like XML is a general purpose structure for, well, structuring data. XML has enough formality that XML formats can be validated with general purpose tools plus much more. JSON is much more flexible but rather tied to the data it encodes. Small changes to a data structure can have big impacts. + +The JSON this plugin generates uses an ad hoc set of data structures following no standard — though any other test framework outputting test results in JSON may look fairly similar. + +### Example JSON configuration YAML + +```yaml +:plugins: + :enabled: + - report_tests_log_factory + +:report_tests_log_factory: + :reports: + - json + # Default filename shown for completeness + # `:json` block only needed to override default + :json: + :filename: tests_report.json +``` + +[JSON]: https://www.json.org/ + +### Example JSON test report + +In the following example a single test file _TestUsartModel.c_ exercised four test cases. Two test cases passed, one test case failed, and one test case was ignored. + +```sh + > ceedling test:UsartModel +``` + +```json +{ + "FailedTests": [ + { + "file": "test/TestUsartModel.c", + "test": "testGetFormattedTemperatureFormatsTemperatureFromCalculatorAppropriately", + "line": 25, + "message": "Function TemperatureFilter_GetTemperatureInCelcius() called more times than expected." + } + ], + "PassedTests": [ + { + "file": "test/TestUsartModel.c", + "test": "testGetBaudRateRegisterSettingShouldReturnAppropriateBaudRateRegisterSetting" + }, + { + "file": "test/TestUsartModel.c", + "test": "testShouldReturnErrorMessageUponInvalidTemperatureValue" + } + ], + "IgnoredTests": [ + { + "file": "test/TestUsartModel.c", + "test": "testShouldReturnWakeupMessage" + } + ], + "Summary": { + "total_tests": 4, + "passed": 2, + "ignored": 1, + "failures": 1 + } +} +``` + +## JUnit XML Format + +[JUnit] holds a certain position among testing tools. While it is an xUnit-style framework specific to unit testing Java, it has influenced how Continuous Integration build tools operate, and its [JUnit XML report format][junit-xml-format] has become something of a defacto standard for test reports in any language. The JUnit XML format has been revised in various ways over time but generally has more available documentation than some other formats. + +[JUnit]: https://junit.org/ +[junit-xml-format]: https://docs.getxray.app/display/XRAY/Taking+advantage+of+JUnit+XML+reports + +### Example JUnit configuration YAML + +```yaml +:plugins: + :enabled: + - report_tests_log_factory + +:report_tests_log_factory: + :reports: + - junit + # Default filename shown for completeness + # `:junit` block only needed to override default + :junit: + :filename: junit_tests_report.xml +``` + +### Example JUnit test report + +In the following example a single test file _TestUsartModel.c_ exercised four test cases. Two test cases passed, one test case failed, and one test case was ignored (a.k.a. “skipped” in JUnit lingo). + +In mapping a Ceedling test suite to JUnit convetions, a Ceedling _test file_ becomes a JUnit _test suite_. + +```sh + > ceedling test:UsartModel +``` + +```xml + + + + + + + + + + + + + +``` + +## CppUnit XML Format + +[CppUnit] is an xUnit-style port of the JUnit framework to C/C++. Documentation for its XML test report is scattered and not easily linked. + +[CppUnit]: https://freedesktop.org/wiki/Software/cppunit/ + +### Example CppUnit configuration YAML + +```yaml +:plugins: + :enabled: + - report_tests_log_factory + +:report_tests_log_factory: + :reports: + - cppunit + # Default filename shown for completeness + # `:cppunit` block only needed to override default + :cppunit: + :filename: cppunit_tests_report.xml +``` + +### Example CppUnit test report + +In the following example a single test file _TestUsartModel.c_ exercised four test cases. Two test cases passed, one test case failed, and one test case was ignored. + +In mapping a Ceedling test suite to CppUnit convetions, a CppUnit test name is the concatenation of a Ceedling test filename and a test case function name. As such, a test filename will appear in the report a number of times equal to the number of test cases it holds. Test IDs are merely an incrementing count useful to uniquely identifying tests by number; no ordering or convention is enforced in generating them. + +```sh + > ceedling test:UsartModel +``` + +```xml + + + + + test/TestUsartModel.c::testGetFormattedTemperatureFormatsTemperatureFromCalculatorAppropriately + Assertion + + test/TestUsartModel.c + 25 + + Function TemperatureFilter_GetTemperatureInCelcius() called more times than expected. + + + + + test/TestUsartModel.c::testGetBaudRateRegisterSettingShouldReturnAppropriateBaudRateRegisterSetting + + + test/TestUsartModel.c::testShouldReturnErrorMessageUponInvalidTemperatureValue + + + + + test/TestUsartModel.c::testShouldReturnWakeupMessage + + + + 4 + 1 + 1 + 0 + 1 + + +``` + +## HTML Format + +This plugin creates an adhoc HTML page in a single file. + +### Example HTML configuration YAML + +```yaml +:plugins: + :enabled: + - report_tests_log_factory + +:report_tests_log_factory: + :reports: + - html + # Default filename shown for completeness + # `:html` block only needed to override default + :html: + :filename: tests_report.html +``` + +### Example HTML test report + +![](sample_html_report.png) + +# Creating Your Own Custom Report + +Creating your own report requires three steps: + +1. Choose a directory to hold your report Ruby code and add it to your `:plugins` ↳ `:load_paths` configuration. +1. Create a Ruby file in the directory from (1) per instructions that follow. +1. Enable your new report in your `:report_tests_log_factory` Ceedling configuration. + +## Custom report configuration + +Configuration steps, (1) and (3) above, are documented by example below. Conventions simplify the Ruby programming and require certain naming rules that extend into your project configuration. + +```yaml +:plugins: + :load_paths: # Paths can be relative or absolute + - scripts/ # Add /scripts to Ruby's load paths + :enabled: + - report_tests_log_factory + +:report_tests_log_factory: + :reports: + - fancy_shmancy # Your custom report must follow naming rules (below) +``` + +## Custom `TestsReporter` Ruby code + +To create a custom report, here's what you gotta do: + +1. Create a Ruby file in your configured additional load path named `_tests_reporter.rb`. `` should be in lower case and use underscores if you wish to seperate words (i.e. snakecase). +1. The Ruby code itself must subclass an existing plugin class, `TestsReporter`. +1. Your new subclass must be named `TestsReporter` where `` is the camelcase version of your report name from (1). +1. Fill out up to four methods in your custom `TestsReporter` subclass: + * `setup()` + * `header()` (optional) + * `body()` + * `footer()` (optional) + +Overriding the default filename of your custom report happens just as it does for the built-in reports. In fact, apart from the custom load path, the built-in reports documented above use the same mechanisms as a custom report. These Ruby files can and should be used as references. + +You may access `:report_tests_log_factory` configuration for your custom report using a handy utility method documented in a later section. + +### Sample `TestReporter` custom subclass + +The following code creates a simple, dummy report of the _FancyShmancy_ variety (note the name correspondence to the example configuration YAML above). + +```ruby +# Must include this `require` statement +require 'tests_reporter' + +# Your custom class must: +# 1. Follow the naming convention TestsReporter where +# corresponds to the entry in your +# `:report_tests_log_factory` configuration. +# 2. Sublcass `TestsReporter`. +class FancyShmancyTestsReporter < TestsReporter + + # Must include a method `setup()` that: + # 1. Calls `super()` with a default filename for the custom report. + # (No convention or limitations on filenames.) + # 2. Includes any needed instance variables. + # (`setup()` is effectively your constructor.) + def setup() + super( default_filename: 'fancy_shmancy_tests_report.xml' ) + end + + # If your report includes a header section, fill out this method. + # If no header in your report, this method is not needed in this file at all. + def header(results:, stream:) + stream.puts( '' ) + stream.puts( "" ) + end + + # Process test results into report records + def body(results:, stream:) + results.each do |result| + result[:collection].each do |item| + write_test( item, stream ) + end + end + end + + # If your report includes a footer section, fill out this method. + # If no footer in your report, this method is not needed in this file at all. + def footer(results:, stream:) + stream.puts( "" ) + end + + # If you want to break up your custom reporting code, create all the private + # methods you wish and call them as needed from `setup()`, `header()`, + # `body()`, and `footer()`. + + private + + # A simple helper method for a simple test report entry. + # This methid is not required by a custom `TestReporter` subclass. + def write_test(item, stream) + stream.puts( " #{item[:test]}" ) + end + +end +``` + +### Plugin hooks & test results data structure + +See [_PluginDevelopmentGuide_][custom-plugins] for documentation of the test results data structure (i.e. the `results` method arguments in above sample code). + +See this plugin's built-in `TestsReports` subclasses — `json_tests_reporter.rb`, `junit_tests_reporter.rb`, and `cppunit_tests_reporter.rb` — for examples of using test results. + +[custom-plugins]: ../docs/PluginDevelopmentGuide.md + +### `TestsReporter` utility methods + +#### Configuration access: `fetch_config_value(*keys)` + +You may call the private method `fetch_config_value(*keys)` of the parent class `TestReporters` from your custom subclass to retrieve configuration entries. + +This method automatically indexes into `:report_tests_log_factory` configuration to extract any needed configuration values for your custom report. If the configuration keys do not exist, it simply returns `nil`. Otherwise, it returns the hash, list, string, boolean, or numeric value for the specified key walk into your report's configuration. + +`fetch_config_value(*keys)` expects a list of keys and only accesses configuration beneath `:report_tests_log_factory` ↳ `:`. + +##### Example _FancyShmancy_ configuration + `TestsReporter.fetch_config_value()` calls + +```yaml +report_tests_log_factory: + :fancy_shmancy: + # Hypothetical feature to standardize test names before writing to report + :standardize: + :names: TRUE + :filters: + - '/^Foo/' + - '/Bar$/' +``` + +```ruby +# Calls from within FancyShmancyTestsReporter + +fetch_config_value( :standardize, :names ) => true + +fetch_config_value( :standardize, :filters ) => ['/^Foo/', '/Bar$/'] + +fetch_config_value( :does, :not, :exist ) => nil +``` diff --git a/tools/vendor/ceedling/plugins/report_tests_log_factory/config/defaults.yml b/tools/vendor/ceedling/plugins/report_tests_log_factory/config/defaults.yml new file mode 100644 index 00000000..c1843b34 --- /dev/null +++ b/tools/vendor/ceedling/plugins/report_tests_log_factory/config/defaults.yml @@ -0,0 +1,11 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + +--- +:report_tests_log_factory: + :reports: [] +... \ No newline at end of file diff --git a/tools/vendor/ceedling/plugins/report_tests_log_factory/lib/cppunit_tests_reporter.rb b/tools/vendor/ceedling/plugins/report_tests_log_factory/lib/cppunit_tests_reporter.rb new file mode 100644 index 00000000..004aebbc --- /dev/null +++ b/tools/vendor/ceedling/plugins/report_tests_log_factory/lib/cppunit_tests_reporter.rb @@ -0,0 +1,100 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + +require 'tests_reporter' + +class CppunitTestsReporter < TestsReporter + + def setup() + super( default_filename: 'cppunit_tests_report.xml' ) + @test_counter = 0 + end + + # CppUnit XML header + def header(results:, stream:) + stream.puts( '' ) + stream.puts( "" ) + end + + # CppUnit XML test list contents + def body(results:, stream:) + @test_counter = 1 + write_failures( results[:failures], stream ) + write_tests( results[:successes], stream, 'SuccessfulTests' ) + write_tests( results[:ignores], stream, 'IgnoredTests' ) + write_statistics( results[:counts], stream ) + end + + # CppUnit XML footer + def footer(results:, stream:) + stream.puts( "" ) + end + + ### Private + + private + + def write_failures(results, stream) + if results.size.zero? + stream.puts( " " ) + return + end + + stream.puts( " " ) + + results.each do |result| + result[:collection].each do |item| + filename = result[:source][:file] + + stream.puts " " + stream.puts " #{filename}::#{item[:test]}" + stream.puts " Assertion" + stream.puts " " + stream.puts " #{filename}" + stream.puts " #{item[:line]}" + stream.puts " " + stream.puts " #{item[:message]}" + stream.puts " " + @test_counter += 1 + end + end + + stream.puts( " " ) + end + + def write_tests(results, stream, tag) + if results.size.zero? + stream.puts( " <#{tag}/>" ) + return + end + + stream.puts( " <#{tag}>" ) + + results.each do |result| + result[:collection].each do |item| + filename = result[:source][:file] + stream.puts( " " ) + stream.puts( " #{filename}::#{item[:test]}" ) + stream.puts( " " ) + @test_counter += 1 + end + end + + stream.puts " " + end + + def write_statistics(counts, stream) + stream.puts( " " ) + stream.puts( " #{counts[:total]}" ) + stream.puts( " #{counts[:ignored]}" ) + stream.puts( " #{counts[:failed]}" ) + stream.puts( " 0" ) + stream.puts( " #{counts[:failed]}" ) + stream.puts( " " ) + end + +end diff --git a/tools/vendor/ceedling/plugins/html_tests_report/lib/html_tests_report.rb b/tools/vendor/ceedling/plugins/report_tests_log_factory/lib/html_tests_reporter.rb similarity index 75% rename from tools/vendor/ceedling/plugins/html_tests_report/lib/html_tests_report.rb rename to tools/vendor/ceedling/plugins/report_tests_log_factory/lib/html_tests_reporter.rb index 31b5440d..3c8c3e57 100644 --- a/tools/vendor/ceedling/plugins/html_tests_report/lib/html_tests_report.rb +++ b/tools/vendor/ceedling/plugins/report_tests_log_factory/lib/html_tests_reporter.rb @@ -1,47 +1,20 @@ -require 'ceedling/plugin' -require 'ceedling/constants' +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= -class HtmlTestsReport < Plugin - def setup - @results_list = {} - @test_counter = 0 - end - - def post_test_fixture_execute(arg_hash) - context = arg_hash[:context] - - @results_list[context] = [] if @results_list[context].nil? - - @results_list[context] << arg_hash[:result_file] - end - - def post_build - @results_list.each_key do |context| - results = @ceedling[:plugin_reportinator].assemble_test_results(@results_list[context]) - - artifact_filename = @ceedling[:configurator].project_config_hash[:html_tests_report_artifact_filename] || 'report.html' - artifact_fullpath = @ceedling[:configurator].project_config_hash[:html_tests_report_path] || File.join(PROJECT_BUILD_ARTIFACTS_ROOT, context.to_s) - file_path = File.join(artifact_fullpath, artifact_filename) +require 'tests_reporter' - @ceedling[:file_wrapper].open(file_path, 'w') do |f| - @test_counter = 1 - write_results(results, f) - end - end - end +class HtmlTestsReporter < TestsReporter - private - - def write_results(results, stream) - write_header(stream) - write_statistics(results[:counts], stream) - write_failures(results[:failures], stream) - write_tests(results[:ignores], stream, "Ignored Tests", "ignored") - write_tests(results[:successes], stream, "Success Tests", "success") - write_footer(stream) + def setup() + super( default_filename: 'tests_report.html' ) end - - def write_header(stream) + + # HTML header + def header(results:, stream:) stream.puts "" stream.puts '' stream.puts '' @@ -95,6 +68,24 @@ def write_header(stream) stream.puts '' end + # CppUnit XML test list contents + def body(results:, stream:) + write_statistics( results[:counts], stream) + write_failures( results[:failures], stream) + write_tests( results[:ignores], stream, "Ignored Tests", "ignored" ) + write_tests( results[:successes], stream, "Success Tests", "success" ) + end + + # HTML footer + def footer(results:, stream:) + stream.puts '' + stream.puts '' + end + + ### Private + + private + def write_statistics(counts, stream) stream.puts '

    Summary

    ' stream.puts '' @@ -111,17 +102,15 @@ def write_statistics(counts, stream) end def write_failures(results, stream) - if results.size.zero? - return - end + return if results.size.zero? - stream.puts '

    Failed Test

    ' + stream.puts '

    Failed Tests

    ' stream.puts '
    ' stream.puts '' stream.puts '' results.each do |result| - filename = result[:source][:path] + result[:source][:file] + filename = result[:source][:file] @first_row = true result[:collection].each do |item| @@ -152,9 +141,7 @@ def write_failures(results, stream) end def write_tests(results, stream, title, style) - if results.size.zero? - return - end + return if results.size.zero? stream.puts "

    #{title}

    " stream.puts "
    FileLocationMessage
    " @@ -162,7 +149,7 @@ def write_tests(results, stream, title, style) stream.puts '' results.each do |result| - filename = result[:source][:path] + result[:source][:file] + filename = result[:source][:file] @first_row = true result[:collection].each do |item| @@ -191,8 +178,4 @@ def write_tests(results, stream, title, style) stream.puts "
    " end - def write_footer(stream) - stream.puts '' - stream.puts '' - end end diff --git a/tools/vendor/ceedling/plugins/report_tests_log_factory/lib/json_tests_reporter.rb b/tools/vendor/ceedling/plugins/report_tests_log_factory/lib/json_tests_reporter.rb new file mode 100644 index 00000000..d29008f4 --- /dev/null +++ b/tools/vendor/ceedling/plugins/report_tests_log_factory/lib/json_tests_reporter.rb @@ -0,0 +1,72 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + +require 'json' +require 'tests_reporter' + +class JsonTestsReporter < TestsReporter + + def setup() + super( default_filename: 'tests_report.json' ) + end + + def body(results:, stream:) + hash = { + "FailedTests" => write_failures( results[:failures] ), + "PassedTests" => write_tests( results[:successes] ), + "IgnoredTests" => write_tests( results[:ignores] ), + "Summary" => write_statistics( results[:counts] ) + } + + stream << JSON.pretty_generate(hash) + end + + ### Private + + private + + def write_failures(results) + # Array of hashes relating a source file, test, and test failure + failures = [] + results.each do |result| + result[:collection].each do |item| + failures << { + "file" => result[:source][:file], + "test" => item[:test], + "line" => item[:line], + "message" => item[:message] + } + end + end + return failures.uniq + end + + def write_tests(results) + # Array of hashes relating a source file and test + successes = [] + results.each do |result| + result[:collection].each do |item| + successes << { + "file" => result[:source][:file], + "test" => item[:test] + } + end + end + return successes + end + + def write_statistics(counts) + # Hash of keys:values for statistics + return { + "total_tests" => counts[:total], + "passed" => (counts[:total] - counts[:ignored] - counts[:failed]), + "ignored" => counts[:ignored], + "failures" => counts[:failed] + } + end + +end \ No newline at end of file diff --git a/tools/vendor/ceedling/plugins/report_tests_log_factory/lib/junit_tests_reporter.rb b/tools/vendor/ceedling/plugins/report_tests_log_factory/lib/junit_tests_reporter.rb new file mode 100644 index 00000000..9d187fba --- /dev/null +++ b/tools/vendor/ceedling/plugins/report_tests_log_factory/lib/junit_tests_reporter.rb @@ -0,0 +1,197 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + +require 'tests_reporter' + +class JunitTestsReporter < TestsReporter + + def setup() + super( default_filename: 'junit_tests_report.xml' ) + end + + def header(results:, stream:) + stream.puts( '' ) + stream.puts( + '' % results[:total_time] + ) + end + + def body(results:, stream:) + suites = reorganize_results( results ) + + suites.each do |suite| + write_suite( suite, stream ) + end + end + + def footer(results:, stream:) + stream.puts( '' ) + end + + ### Private + + private + + # Reorganize test results by test executable instead of by result category + # Original success structure: successeses { file => test_cases[] } + # Reorganized test results: file => test_cases[{... result: :success}] + def reorganize_results( results ) + # Create structure of hash with default values + suites = Hash.new() do |h,k| + h[k] = { + collection: [], + total: 0, + success: 0, + failed: 0, + ignored: 0, + errors: 0, + time: 0, + stdout: [] + } + end + + results[:successes].each do |result| + # Extract filepath + source = result[:source][:file] + + # Filepath minus file extension + name = source.sub( /#{File.extname(source)}$/, '' ) + + # Sanitize: Ensure no nil elements + result[:collection].compact! + + # Sanitize: Ensure no empty test result hashes + result[:collection].select! {|test| !test.empty?() } + + # Add success test cases to full test case collection and update statistics + suites[name][:collection] += result[:collection].map{|test| test.merge(result: :success)} + suites[name][:total] += result[:collection].length + suites[name][:success] += result[:collection].length + suites[name][:time] = results[:times][source] + end + + results[:failures].each do |result| + # Extract filepath + source = result[:source][:file] + + # Filepath minus file extension + name = source.sub( /#{File.extname(source)}$/, '' ) + + # Sanitize: Ensure no nil elements + result[:collection].compact! + + # Sanitize: Ensure no empty test result hashes + result[:collection].select! {|test| !test.empty?() } + + # Add failure test cases to full test case collection and update statistics + suites[name][:collection] += result[:collection].map{|test| test.merge(result: :failed)} + suites[name][:total] += result[:collection].length + suites[name][:failed] += result[:collection].length + suites[name][:time] = results[:times][source] + end + + results[:ignores].each do |result| + # Extract filepath + source = result[:source][:file] + + # Filepath minus file extension + name = source.sub( /#{File.extname(source)}$/, '' ) + + # Sanitize: Ensure no nil elements + result[:collection].compact! + + # Sanitize: Ensure no empty test result hashes + result[:collection].select! {|test| !test.empty?() } + + # Add ignored test cases to full test case collection and update statistics + suites[name][:collection] += result[:collection].map{|test| test.merge(result: :ignored)} + suites[name][:total] += result[:collection].length + suites[name][:ignored] += result[:collection].length + suites[name][:time] = results[:times][source] + end + + results[:stdout].each do |result| + # Extract filepath + source = result[:source][:file] + # Filepath minus file extension + name = source.sub( /#{File.extname(source)}$/, '' ) + + # Add $stdout messages to collection + suites[name][:stdout] += result[:collection] + end + + # Add name to suite hashes (duplicating the key for suites) + suites.map{|name, data| data.merge(name: name) } + end + + def write_suite( suite, stream ) + stream.puts( + ' ' % suite[:time] + ) + + suite[:collection].each do |test| + write_test( test, stream ) + end + + unless suite[:stdout].empty? + stream.puts(' ') + suite[:stdout].each do |line| + line.gsub!(/&/, '&') + line.gsub!(//, '>') + line.gsub!(/"/, '"') + line.gsub!(/'/, ''') + stream.puts( line ) + end + stream.puts(' ') + end + + stream.puts(' ') + end + + def write_test( test, stream ) + test[:test].gsub!(/&/, '&') + test[:test].gsub!(//, '>') + test[:test].gsub!(/"/, '"') + test[:test].gsub!(/'/, ''') + + case test[:result] + when :success + stream.puts( + ' ' % test + ) + + when :failed + stream.puts( + ' ' % test + ) + + if test[:message].empty? + stream.puts( ' ' ) + else + stream.puts( ' ' % test[:message] ) + end + + stream.puts( ' ' ) + + when :ignored + stream.puts( ' ' % test ) + stream.puts( ' ' ) + stream.puts( ' ' ) + end + end +end diff --git a/tools/vendor/ceedling/plugins/report_tests_log_factory/lib/report_tests_log_factory.rb b/tools/vendor/ceedling/plugins/report_tests_log_factory/lib/report_tests_log_factory.rb new file mode 100644 index 00000000..e1855903 --- /dev/null +++ b/tools/vendor/ceedling/plugins/report_tests_log_factory/lib/report_tests_log_factory.rb @@ -0,0 +1,135 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + +require 'ceedling/plugin' + +class ReportTestsLogFactory < Plugin + + # `Plugin` setup() + def setup + # Hash: Context => Array of test executable results files + @results = {} + + # Get our test suite reports' configuration + config = @ceedling[:setupinator].config_hash + @config = config[:report_tests_log_factory] + + # Get list of enabled reports + reports = @config[:reports] + + # Array of Reporter subclass objects + @reporters = load_reporters( reports, @config ) + + # Disable this plugin if no reports configured + @enabled = !(reports.empty?) + + @mutex = Mutex.new() + + @loginator = @ceedling[:loginator] + @reportinator = @ceedling[:reportinator] + end + + # `Plugin` build step hook -- collect context:results_filepath after test fixture runs + def post_test_fixture_execute(arg_hash) + # Do nothing if no reports configured + return if not @enabled + + # Get context from test run + context = arg_hash[:context] + + @mutex.synchronize do + # Create an empty array if context does not already exist as a key + @results[context] = [] if @results[context].nil? + + # Add results filepath to array at context key + @results[context] << arg_hash[:result_file] + end + end + + # `Plugin` build step hook -- process results into log files after test build completes + def post_build + # Do nothing if no reports configured + return if not @enabled + + empty = false + + @mutex.synchronize { empty = @results.empty? } + + # Do nothing if no results were generated (e.g. not a test build) + return if empty + + msg = @reportinator.generate_heading( "Running Test Suite Reports" ) + @loginator.log( msg ) + + @mutex.synchronize do + # For each configured reporter, generate a test suite report per test context + @results.each do |context, results_filepaths| + # Assemble results from all results filepaths collected + _results = @ceedling[:plugin_reportinator].assemble_test_results( results_filepaths ) + + # Provide results to each Reporter + @reporters.each do |reporter| + filepath = File.join( PROJECT_BUILD_ARTIFACTS_ROOT, context.to_s, reporter.filename ) + + msg = @reportinator.generate_progress( "Generating artifact #{filepath}" ) + @loginator.log( msg ) + + reporter.write( filepath: filepath, results: _results ) + end + end + end + + # White space at command line after progress messages + @loginator.log( '' ) + end + + ### Private + + private + + def load_reporters(reports, config) + reporters = [] + + # For each report name string in configuration, dynamically load the corresponding + # Reporter subclass by convention + + # The steps below limit the set up complexity that would otherwise be + # required of a user's custom Reporter subclass + reports.each do |report| + # Enforce lowercase convention internally + report = report.downcase() + + # Convert report configuration name 'foo_bar' to 'FooBarTestReporter' class name + # 1. Convert 'x_Y' (snake case) to camel case ('xY') + # 2. Capitalize first character of config name and add rest of class name + _reporter = report.gsub(/_./) {|match| match.upcase().delete('_') } + _reporter = _reporter[0].capitalize() + _reporter[1..-1] + 'TestsReporter' + + # Load each Reporter sublcass Ruby file dynamically by convention + # For custom user subclasses, requires directoy in :plugins ↳ :load_paths + require "#{report}_tests_reporter" + + # Dynamically instantiate Reporter subclass object + reporter = eval( "#{_reporter}.new(handle: :#{report})" ) + + # Inject configuration + reporter.config = config[report.to_sym] + + # Inject utilty object + reporter.config_walkinator = @ceedling[:config_walkinator] + + # Perform Reporter sublcass set up + reporter.setup() + + # Add new object to our internal list + reporters << reporter + end + + return reporters + end + +end diff --git a/tools/vendor/ceedling/plugins/report_tests_log_factory/lib/tests_reporter.rb b/tools/vendor/ceedling/plugins/report_tests_log_factory/lib/tests_reporter.rb new file mode 100644 index 00000000..427244a0 --- /dev/null +++ b/tools/vendor/ceedling/plugins/report_tests_log_factory/lib/tests_reporter.rb @@ -0,0 +1,70 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + +class TestsReporter + + # Dependency injection + attr_writer :config_walkinator + + # Setup value injection + attr_writer :config + + # Publicly accessible filename for the resulting report + attr_reader :filename + + def initialize(handle:) + @handle = handle + + # Safe default filename in case user's custom subclass forgets to call + # setup() with a default filename. + # If the report is named 'foo_bar' in project configuration, the + # fallback filename is 'foo_bar.report' + @filename = "#{handle}.report" + end + + def setup(default_filename:) + @filename = update_filename( default_filename ) + end + + # Write report contents to file + def write(filepath:, results:) + File.open( filepath, 'w' ) do |f| + header( results: results, stream: f ) + body( results: results, stream: f ) + footer( results: results, stream: f ) + end + end + + def header(results:, stream:) + # Override in subclass to do something + end + + def body(results:, stream:) + # Override in subclass to do something + end + + def footer(results:, stream:) + # Override in subclass to do something + end + + ### Private + + private + + def update_filename(default_filename) + # Fetch configured filename if it exists, otherwise return default filename + filename, _ = @config_walkinator.fetch_value( :filename, hash:@config, default:default_filename ) + return filename + end + + # Handy convenience method for subclasses + def fetch_config_value(*keys) + result, _ = @config_walkinator.fetch_value( *keys, hash:@config ) + return result + end + +end \ No newline at end of file diff --git a/tools/vendor/ceedling/plugins/report_tests_log_factory/sample_html_report.png b/tools/vendor/ceedling/plugins/report_tests_log_factory/sample_html_report.png new file mode 100644 index 0000000000000000000000000000000000000000..2cc6468cc59d58a0b8fe95ed48f6be44b15fe0ef GIT binary patch literal 46135 zcmce;XH=6-6fPR|11x}_g(3*pu+Rko>2`V%NPy5qS|Ff=fOHf=QHpfwAU%ah2_*qWopaZ^Yn^q^J?qY|ta<0%vuDqqnZ2K9-b5N1XmTAEI1B&) zxU{wI7y|%oAOK*0^+9%4jYq`EIso7dK>N;3(~S!U%xR8vY(3iH^Xx^tm^Qf<6TU0A`?A10n&5l zXtqc>J|92z(Bepp@jJ8t<{k_zsjZuo=v9Fa$*AZV3dpWsA7V~C-}1*3mBpQR{TVPH zyTu9(KgQ}E&L)|ESepGR2T?Bh;(vYu01jLq#rA$bzw`draDJ7u$58wK{JNp_5Ax41 zz`w`;4>oNQKwShQcp~q7s!wiBLgDQhR@=^H1*r-coY$ zR8bwlcBy?&Cw|uxbXc~-~Vk` zWX}cC1y#1oa1J9CdAm^W-DCZQI-*-4rm`7HVlQhLV+n_V;tLSMvag||dQ%&TK4{G| zI~l1dh@B3PE57tcPUv?Te@oOwG8P8KifLrdR#*Dde6T{RRBWX!#c*+ObMlBha&W$a z{s0*K7@G!;Av2X}ktNE<@4M<-I*pDdiACQz8EGm`Ovv+4qbSFFJQE;nhP*^Ji|jPXv(;2b1wQ-ea0;D z%wv~2keL-q>%zN!aXtvWo~D!Wc)qlvZM2ofGAq8`MlpXgTC#qH9qK-7j2paDSA{_g zHpjg@S5Q&;h~R?_kZ+?c8e29|QR*)B!6{Y2eu6&)p4b!uT^WP$F0YQ}G*jE=-0%5v1A)7m|uRO>>_2){= zX6F{d5)zF#p3-Av>@YvOAQv-l?w(j9{2Ii39INP*9Fp5oY;E+zf5hzpMleXT`qXPR z#t>E2gAx!WPz@iz9L~Gyp#foph{(s#bfdar)gPJ`tk(`*e+%zrMiDLLh6k(YY&+;Z z-?$mwz>DWypk@A<04T6{BnI)Nv55YhVd^ z;@Dtc_4*RrTTlsgQz=z|h8*CU9H2Y@HtIc^`w%A2^SKbG_y>k&I>qwU#RuTp2W3P` z?HCqY=t=sA;{il{0+;kaUL5;VL=l2-RTo?r#&*t-b^;VGC%?&8A}=l0w~e)xkg(Id z6%{XPs6Ic}H0l(S$?7HU_cIZmJ0YeOUq+lO$m22NTQ+r!MTJYmE4ZAmNbf&mI^&rq zVJ>9EJTLfAJ;&CoLrTa`ktaTjie0lz>+OC49tblKQX5I+o^Ee%H+5G}3JFe9aHnJ} zRKRz)p~_;~e1u{`1)c;VSS2E}223AoR#Z`DX1Emk3K*1OY{L|Lmn2gz$)?s=-_W}a zx%%u@an0NndY0@%{vc{`&)OWKyXJ?eJeh8s&Dmr$rhD}As%xh8iR+zXsG?CF#;M_T z_dMBx7M?|k`(5W-3C{eon=x}w9aFnvTIyuay7mOiYb2(DtL_VSImn~+|X z7r)tyR?qh@H%#E4lGZT;r;|z`Lq7)lpQj!5{)#&=6XJtU>w+%6LcFr#`D2DAyOp8Q zT>Gzu@wu-4n=i?Dk9)BDP$pTdOT9>E-R_i)ym9c_=P<}-HOEPnWFgaw zG0moY(X&r28!*{BA@X7s^BsOh8SrJWhovmjMyZ7_33+^_FwzSoC;clAPrXJ5O)~TOBr)8Ugk@Nz{IKz=GF6Ko(5wzTw4%8a9yJL z-YOZ5NP|xCptvn_{DUJ!wcH4~+2QWC%C+W`uOV>HRYR5{N7uTSv#HCT_aq&Kfg_&1 zg*OUaiSwN@Mv)v2(V^OSJ zxe+C8H(yCO@-v>kz6Ous9g%|Wio_@OGVn;kq@h|4u;O)r+_v(j2Fa~0EqUV0YQ-X9 zRReDV^EOo}%_<5Bz8SAmIs45GQWKnZ%@yHfrC_To&8%V%CKjfP7%secJcG~HdeZ>%w@t_rrj!apqr%^M13IiF+D;RRIqaG)p7lF3D+E3O6E~&Hprt* zbqDWK<@j&msk9A8Z4EuCS3yV%Wa(Hw+qCWhHAAE;O=B3xC4&kxJ5|NT7>l$QdeQ!f z^Od9J<=e!MNcV7M_T`l!gO#nItWA@P5~Z74`@1p{OLX5cr?Z%=+w1mnz#|^y93|Ub zXCdINE2wBh=e0-O zrmBA0HSL7LtRg?BV#IOuHW^_mk_Iz{kq(OvOI@sl!xFNBo7`uWb9VR`b0tkBZSh#J z>RA8NnTNW8{@=uL5Be|YD^H)M&2--HT1|lrG`${3h`g=hy-MJtW|Snv!_}r$t#OZD zGm0vj56ce{%)#Bsu2ZLVU%bz>T-!L+2JP7xJPz%`?q0PczmSXlQN6fRnq?sLdZ$|m z2W>i$EYH05#ojjCeT)wo%R6ik6g>a zA63iKRN$`d0+DibqBOR?84-u=BtIa$m#%bo^DGn7d<|TrWz=G2M)d@>L?~Y3-Y}cA48>Ab6SU#g!nBuxqa-aDBzP2n)a}=XA14@Ru7ikT&bN> zVU;>vglB|`W=L<&p!7$$?u)RKmOcaLH-SC-C?QN^$(m2@Ll%V_ifF>NMz9UX4!mLf z{*}uo#XlY3l;b5HCDY>WU%uiT*-f zXP&fa-H!=%+tDITh0^|KJr*x4#0Iu{F#VZzjM;+E_7wbQ$Ag8b;%hUj9NxRM*QPcP zi0~5PsP7FmjiG!*EL%y_WuKjMl#rkAX{$+AWm<0dGBar*W)j0gPhOsIR_$lgmgdRy z`iE%Vf+E(+)8%QPT>rDC?E<}e&TYdwawc(+{8GAJJXEvXTvPUgG%RIvu4DJ?5VdAP zYJ1U^;I^;rkB2utKT+vvilKW!7p<}gJU7&HsYYSMTb{2E{ix@wtoy#;ZN@Dc;#)su zSRnYPkI?0doq5dKD!TvYF`1|g$|3UW$hdr8#@4^!bs?TFo&17pWZ2fh#2&@xd=D~1neHonlXCefA(CA`J5wqv8B*JLH;tl_ zh_gHJeZMu;v$DyBytzR*RXD|I#=*g%R&g2gFG2iF33N!~nJ? z4qG<;Q*ir`*`@DVt#RSGueORxZe-cwOI^q>Zf z%*E}gKm7o1NZIT|j^&tui2urWHUckNzNhj9Z*Fs*c<)bZ^;F-JrnPVr0Sj*UjvxhA zgOIa!@}wNo?u`w0;2&sw%BM{M8TbATJUBaiPE z2slX_T{vD=f1%dEGDOEX4*OmPZ7Nzq?~=L&+!OE6T^$22X4Pm9)fU0CHbys1;$J;m zbEOi1jit82r;I1}>}8ifzd3nq%)@v)-x7r@z}TRHT_o5dgR^#JPn68@tbpoP`Sr>b z2o{`wdaK`p9kG`d%YZf}(>=~22@f&RBZrrDJ^l(sEw?M74**X^*rz9}vSU`nd#&#M zP4(?i9Z4{MN$C~KnbRAuZtNZIjZenu`3<%qNF}B@T)fduc(3;;QJW#>(k(f0bFTii zB%}XY#~Dt|l38Zf(XH8=1UuE`Bj%Z_tJK4x|D)MA-a_`a+pkeVr8pj~;=e6F97&I5 zhm=u4*Z1wg5}{>MW1X;-N2V9w&Ur5pn-OV0uv?0d;GgQ~ZeS|>k_cM{|tFm;%+UL))Y#VyWlYUg;%8E>g5r<6GM1pUO-D^Svj##ML5G=bKpiw{b&WS1Z3(6JCFcQAw@4xK%w_bI zl;VY!xeqCPJtnrjlQFCq|CO{kYMhjAa$l%gD%&d(q9%OlKxhTDDcaZ4W1^^pN)~lI;Ft+Ni4>U6S5;Q$Kfd7j$s6Lotwgi>HIU|19A_E(#== z<(lmA;oL^EV$e=Ep-2IcA=$Sk;@=4~Uttz7$=wb6bbIOz`oE8inb=lVxntGicnHgf zt7%gAY4m=EbNQSm$qaB$XPND_Bg!HpHBQ~vB3nJ_)0nR&&_bd+9B_}Pnip{sjAmbO zpt}#tpZDvZr*^C2a6w~N;oAK#3a95aACbn~lgc6l{QxKK5YHoYswAu{*G{S@1Ao+QH{bx<)_cI4B4ptu%c87c z{jL&?8wGeN2Y*_8?l@u3C>J~)(tdai$yp%52(*}?c zn1qjY)&ASa?+kTMtB57U2^1sd!uFM1pU=x9Hh>kcteivV1ELHYf;4SCUAuOdE~em@ zs$Gdq&??Q%4(VYrhlo?%Q{V;BA)VYhBa!2PdnH>9MVl~n)*g7ii#c2Py>4;J>YyE} z?J!7FObbp9URfs>y3T6qCd6{&3rlb3NK=#>rw|?2d|ydO9#AheX6>FQ^l+jCOv2fj z2-xmOP%~e;JSFfNyh}BSFT}VmzcXi_a7WjTkK!YgrILx2&J7hE5hUQ=3qIzc~TZR2(=S$xFV1NuN!vD`e2AvA zzDAd%bze1>kF-cR_bNk}=1JUc-xsza8qmyjL3s^#pB>CZ3V3d1)JeXvz{? zBRbzTjaf1mQQyLvG}O+=)nxTz_CaC8OkER6gX%>jsm1qnP!`Jx1WjT$rop8wqp9tr zZPq6v^()*vLh^i^{Qxqzsuq!Eu+4wyg7S;%g`>R%|NP9N+Ou{u3r6-JUB^jQ{^IR<2K3-j&gH5)hmW%Rj2r9v5p6RaoKG^A(Q(W zGl3C!;n&G9PVr2EnqD}5|Ni|rTG48K{u)#3!tv7Id%WGeGHT%{udYe{k0ZPt<`viL z^LOjb4gy)*>c8!m7k(cNmr(?bN9v!XOLqNY<1oJtGtbIjVNT;eUgk%9PrPFtdv-G} zWqZfS{|}h;|3Jcxf1BaLsff5>iy~GSRxz5cp|RN)8{_idNq*TN<9aR&V14)Q+_2$v zfcETqoYr&R|FCr4|ASci|Iq7y523$S{t;rRM_|FbM6=r?<+rT#vpN8F?{u@yrz_K7 zCnO1}t5Yj)kDoVD0`S9+OA?eC3~||J`|LhZ-G4AI0DkiK*~u@vBTvpH+4HB8k`Kd5 z9(0HU&Bo%uM5LND5P=IfQ3hxkf5?g%kC1gFG|dw918YhNC}@#>d($lvk$jK9fUFN8gaJ`DnfeIR zJOQZO2}sC0{XTPar<`*$pFly~@ZHM8cAs?A&H}-5X3=!@x!Nq2w&!%zl)#VgMAQ4? zN;v^hkn{Ygi-X(7rkXxa)Tp+F<&MUbr%(L18JEZ>>nq(ah_PY`Eh~K<Q#OH$%b|1c^D7cjQ$Vm;Kijn*A@V zE{8!=oSu=&g*ffl?4Hd8OM$f@HU9&N9P6Sb>oS?FuiqHZK0RAOJxFCTo%kK)pS z$xC&eLPcD0{~{$eV6__LTt^)&j?Vfh4$!-HsCmI1NRJUkvA~gPRfucK6+= zQe{bDz5hOA$OZIXdH#DzNriTtRzlE?q%04iKC2{aZyyAUR?;!71Fu)PPG0J4C`rgO zBLVN2QsUnX_2Wxm`QnEG4tKg&#aMFeoVyG(OT|MsfDqHnsseoF#glcgf`<&x$+8dV z;5^7dn|*qBe&Nb8#*{pM*(h##9Y|C<1z}pOzzd|ryzO`HPKJYPN#sotz?Z<~$Pj~uj1Z}R_Z}R_c0|3Zu zZEkL!jJ#uNYMMwr*S<5l5g-52?OQ3J8$9-Rp+DjchoZ$Mhg!wXivM{nG}3*79kUm+ zhaO8dbOT;__&#mXU{9)@L>Z%mTKI+h9Wfl?vHCZN|FCrAe*H>c+sz}%7n)?Oj_l+WSVaGN94+tlY4b7 z0&ZW@#7|_pd)Vr}Uq$blho37*1bI_&k5CLP z>)!Yo(pw5B2cwkJtNeLxd}U3;uVRNflJ-=YlJfgg@O6yfpR^`2ojvu)lThO+b`S@Kc1`C9I_2 z>C@LxlEz)@!5UpDa5Am_*G7x?+iUl2f;c0mb%siOGU#Senw`+4NZc{yYFgTw1wMue z;g8OZj3Qs}t1jO&u-@sL*>BgW2MC*^(&k*{(Zj(PJ6@O-Q#q}|R;UoA@|`mm&DcX9E=J@W(3&*4r@jw4ym`zGM!5AH zd9&ki-QWDtoQ=!w#qn}~$=K`6eFu+wPpQc8oZWM*(C;TNxOZJLf|n-npmf4rp*k=B z>U?d9CNAFt!jyhQTnmg{IZ?B>dic5RnNC7FX8W@~A`(Lm>OA@Hg*M+C5+s}X| zXP+5=Vo~$Ii}USs*Xps+(m-oJRRy@pe1}`Qt~Sk@nZ0_1+S!vcvYaeERqg;N>|$ z^WVDwzk8IqdNSI3&t9w*a`rEB6Z+;LXwMhVTzCfD)9zrT-CloyTj&0tn&#VcvnbzJ zcTOJqiSW?og!*RcC$FTPtd`KJG<8mvjCFk(AYg3$;VYGY4X&WB3%Wautc|-qn9(qj9FJC;g?0lJTChv~!u$I~03gCb2jBSQE zjJ&abf(M%=azZ&)6)oF`QLjFkGErA7`qJQf{tkVehdUU>B)<`1WZ%EB0(&Cg-19R7 zY*YQ;X(N$NCD$mJnP!AlgUxXEj4>WYSKXA?S4l8pR+EspA3sKzWyB@(^fVBV`T&*= z)Q6}{RX59MSGrA;A;4f|`i6#e2^BjWMD52c6!}87SHjbP5TzUG#<3cYOYkr4Qc!&iee7DjBnn|%>UfG?aDQ|M52vng=Hqf#(u0pe|epjG;Y1In_#Adq}WeJ@ZGd_r}0>a?SKj`GzYHRDr&aIzMod|?Z z;6_MviRIpek3^B}upwhU&?nbYe|Bw57Y#Bm-Hv#yg9(vdoe9`lfIviBhH} zMe72QL4w$ywv1uR#|`hT#oZnxH4!=#I*pYCaV;y;$3^Vv^`FDCQyLl=mxsIlSyRKzA7j^ru zB~i+4u(NdXpxS3U_&1{pg?WAb#6cHQUxVpxLD68H#(<&QkK9a1kbHd-S!6i*ken_r zvaH^$$f`=v<^Uw*VOZzE>WO4)vPoI;6bdE{S$)9EQ<}!Dy^>yf+jg-rzi`X zIJ?{*P=M}iVj=PQMZ@rX-z2AGEt8(q^P=ZXuxOllfeNH@C8qctPf{ApI&Acm`+MLS z($&3#^In+N1ur5)UP2Ot&LbWjx`D?juZuHilAG;gR!H5#K=o56dGFk!NIMsjcNUKG z@bC=TkifDnU&Tulvem4WEnEeY@5A_x|I(p2DA|PKkVQ3tQgUlrmJil4tirJ?;36FANJ$F2G8!@0pPPNKNY$l`FM-y{J?Q=yf#uIZWvk1Inx zf~_>vc4`!kHVKQmQeq9Bu;atR!URyd*wqYG{egZ<`dp&r=G!N?g_=waedpFD4rSwx zazh5TI?0ZTqev0F-!1$TstWm$TX=hUyKZsNfIltpyF~Dwoxe$(f>foNy;lx=3Ta=J zB(GE|9V7VKglOV__Ei%exta2$q)>YfSLHoO>g?3R3acMSg*$1dIu%$3RLw;?R}A+F zs|_OV5J&c_;6ERKSw-#bxm6{dX@y$3i^WxM6#3KEIQ*x78q$9%<|WIuX z5Rz08UAAIFTf@7hpcD;yD5y&+xqEGH zX4eWM>IRN)^p-yL+CeqJfVT0~e$}cO*1uaH9Eoe~2QzJvWbSJO>jy2mDMfx%TI4D=$Li zOp|mxJbMvCvxgxcp~IEe>MiQ3Mjz#Nr|vP7;v%MjTG+!@0g^b{Xy*;nNEVSv_e*<7 zY~ln0-(hVnlavepP?v%uf2m8=hy&CRdwiC1Mw)~LvU&BjTwS_*q~X!PyJmW6`P$PN zc|w^@jD33tx>1DkBVaEy&=M6fc0HT7|g#M$cK zi_okai?e@w6f(M4DUn4Ad4WV{gvhw4|^& z4SMj#&DzOVt9THmcGss`*td zO`L^Kv`QdhaR&C;B`5n22V7vbsV*`GT-X82VOH^clB*B zJxs+>L0E0A_k_U8PaU}wYMg_b@}n`ZWPO8`(|Uv4ppq$D$dx(RkxHstEcH>3J#;f;eBZ9F*=%3-2nMU$>5w?0 znc7jdccgb;tWHLZ);caFqip8xa;AvZ9;PFEjl}+j?HdQliU^W_ZI!Q7&tcH&A>a#v zN?!lJ=kB;>!vW(B=$wLvUJc|3X!}!V&Qt26=cqr%1N=K^)MSbeC0HeMgPNWrY73h> z_vD7&YExA0lBZemUX52ZTRC$72+!a6w9$x5{sz~HQUh)Q1p6V=Lx1DDC^jb-2!8~v zo>Y#avEU=?gl<;AZJCp1C=Sy2r|eIcjh|2Y^dbVmMgCZGx?7u=-#^HW=Lq|%23oIyCs}$I?#O58zT<60~8R=0H%E)+(klM!`;R zo}vzd_uAI95y0~9y1?m5c!O=PSOFNtKD)n>R=?rDYJ?2lSgc!HSe{-BG2FfC+`RY7 zH}~{wjtF&yIf3nFTMY3MpXqS2pBiIvNVM_Wx18?;+~6YX_3v?#%ET44{ci7`;zpOv zP&KzJc5`pWX?0mj4b=4%h9o6s27sqi7ttD` zC6~3b3vH~~wpPY`xk~wttk)bj;ZcumBE8whgnqfwqAdcLi~(gM7K&Eo+UBq%hTq@i z_#d{{g0oU8BCVXmhj+(e4w~+nBudf7kjkW2vmkq5_5KfkdDlksA4x$|?HU!&2xs(d z5B-8wf0Zb{jfYvKtd*Z%`TQ?H(Q<<2)k+$eQowKY^>;H44|~WP)yiKGgyqxch~Mu5 z04;UzH(YX9`D^%z|5By7l`hrWY{+n|Zb!CUWeW|ylv5g?pB9EAcnSbQul_)AFe|5& zZda?<*gtnGzp2a3aMg}hg4)E!&SCDAg8`w-O&>f1x_i^6QKZw_mNCv_>-zvQ_w>1O zKVDXXq9q3xz77qs5}@%hc1figeZH(=O!dGjXs*l+6l<5ss<$jt_ttizVoD`MYFUbY zYx>P-84dr#4SHdiV$oIcq+$Z8{jY zNXKJz?N!)7YLK;DQ{Q0zs=(}5byz0W!whu<51Ap(DL~fAUXmfDpaCJ$INrarcT%oP zc9YHs8ldNIv>J5KH)vy^*-xo9a5lh=wBSi8ZKNozKPuJ6jizHAYdq>gZ0e8<`3bWb z^RnLEZ!2QW2r0K-cGdwtcBtJZx71$(=<(mYO}t^fFN)j%6yj6RPLuUaPxd@jCa@3i z29HW_n1DmO9O{fseo=1SXyb5fM}}agmSCyiG`;y|O*g*FqNbC{yW~TF zMi;XRa}nL}LTSafa%OXr(@aP9WV57;mOUB4jv>^(7Mj18J!|X^etNdX{x`%lJJQZ{ z3bqdPC^`$ry1N*#)x^xrwVn5uOGdS(W7b}t=sInHysa8k}rf zKQ!p4R!hQdoz*krI3My1V|)#D(k#+Fq8tP{Wl1a7*5@2HH`5vzP*OsV_fXXYOMAO= z_EM!V!uOE1vHo)x>Hes*>!2NDK0DS5ePv!fDgrq*b-9zHBc24RxNC4wn!%W|IRpsJ z5l|ky6o<|Mr`AHOLQ_@_puB60Q{oyu}U5lU2>imvI7f2ZXOc8wWZiXVY(-AnB+MS zK7EmS2|r@x;Ult?v#vfLA9f$T;Z-4QvtWMGvY3Q-pIJ$b3DTklw8-LQ0f49Oq;$;S z?59DI!((b6tot7@#khp1b!AoqnIsI$wWY0!`K;M}^`s2p+6itO@HXw9IfvT}I(@C} zp_%H%1=cz=_UTnFWSRrrbA41q#;*^RUguL_t(8F;aW$jFS=K%zspwAJSFC64?`JQ& z6!;jL2elY$cxe-SJM|;lYBLJ9nlM>H>yHmJ?YqSRcoWNaR788UqJTN&!!njc?D8eY zQcn+3t4zlMYY{#$WA|Q#kH+|nz>5Gw0RQ@mtC4^bY%0p$<6#48fR$BQEOuoF;Jrs> z0{^6D-SMp5nvMjfy$h}nvh}+01t~ml(){5Jt?B(KekT#60$3@iT%8;>RC6%w~|IPTYS@@ich&f>QcrOmHKtB+_qkPCLr00>0PG+ zS_+ma53ohnXatCG_q_En7L(F&;pFiBqL$5jSi-fAjUvip^rb?oA!=}>=4_M9Lw=z& zOA~=}Ia-&iJ{ZI4LM1dVxK*uj!K}ucX_gWw7rpFD^O&wxO`OxX{;jgf0&uP3ysV-q z0xSR=Mp78YxY)}$2?Xu{1NNB3DfTBhinSGy^X`3h_y=(6{7ICPffbyGh>uX(DWCm0 zXY{Usypq!0X^UoYonmO$goV;dXu^{!AQ+sa+QzIzX;qpcaiYl{r|d`hKMSHlETB50 z*I4#8zJG~kU1AK&QW{&uypI9#O+`O7vrzgv$Me{=B)y*nN9JokcB5DkX`|LO%DKu4g;9V?d|@FN(Jt z`f*NMokXj=;tyi~XIv0y!)A=*nT^V6ce<;w1QM<<%$##In;X3cgq9fRQ3n^+1NaG~ z@ul6Y<2_Xf=#Vg>Ff8scp#`Nl+zo1rneBE$j|>;bNb=0eidXT=cFtOL?29^4vKmhh zBn&0iI{l;UJ5^)$sGg&9(Ppp#1ChrItjXar9k%Ca{vy=-ixX;IB_Nxj;(M*5+sPYO zuB3}oC?2&eJbCB2X}trBon0M=;4L9r&-`{6cu;MKl*ajhEx?&Ka?aiS&fOVTch-tD zP8AtuEA0Gi)es2T8W)Lv`gGs;V2Mc!a}n>k_5Emwj6s&F>(+uVUT%}gj6QM6fFHk2 z^Nh}&m1jsK^zm04YC6=<$}3YHiyO`>9rL`Fe=o1eYUb@i^j*2R!j9Jh0i&{*g37HWJUSVFcV)9bVffM55pA5BI%>Ru~ce7XUa z)k7ocxl!gxS%WL5Nxajw8g2nSE3iP3FMhN~URJ}ZrPlWA&fBB*wqxZZBdx`F;TK!$ z6Q5}O6LlVM%K=fKeLVyzk_a=X%cuuxvmSbO@h;3p*GfGFIy?`nAvFXo-nNc$^K>_) z`coxHA*uB-1~JNbZ0k#@VTU#4^<9?U5St#D6>>|1G@}~4(|WM+$?EXf4sm8~?zauc zwikR`+7d2BYq0G5+s+xv@OFNFel6$1-*fS6Qhv=2i}7G?ZXOmv;n<^+6N*>a2Q9#$ z_hkEPg(P1kZRKh#Z8#(-z#2w*G%~;nQegO|mBZxEef-1c;$F@LD6)c4 znQ*S5ay4ofZmFuUp_pZuvOxeleX6T?J+j|_B_%(e2i>;vBYO74uZBuW$^r+ zV;LF2Zn5vCwAFjk56BrwqEnGEgQ3Toh$7t`I{YcKXEu93k7 zK*w!|cVNP3g3-Ee|48}ZhQ>4&5t{ABd0GQ7o+2mM#rh^kO_gqBtYAhSMlXyYFLKCe zWnQLOzPN6%11b?DjGCK54J+%a0fz~)MS6}M`R6J7ZjoO@2Gh8GS8J8Dink-H2BV+! zN^{0YUsj_)U^|l}H&50cEeY>i5w0Dm+bY-1Gp1rvHx90P?gz9aSNPEm`m0w%I+Uw9 zg5%E<(ke(Yfu9r>SB?ZNNMA`$hf7j}v0V+Sojd+y0!|U3=BeZ{GfK`YUOWSGSofbt zR9p#KJ*{Aht$Nn(tQ5K|I%-sc+vJ81R=ZASc3---qEQ{Lv_8pl3Q0q6kwZo+MpQ=y z3F;R$tsjqM4h$yy5Qe~W$;I>S3UG~dfzMar)`xej9bB^AI)9lYOZz?p}A= zI*St+#Ij$vYjEk$mSh!w9BNLU_E#;}7x!(In_Db4xdsvp97}!;Vx7*DeYf2<9?JtC zwkwJ>nLBUHN220bA$w!ymJQkj@N$Gl;_ikv6C%X(X7p%L(9TQmy_94?0dm13Lk%9G8d2|`PVN&W_5 z75ZmWYgT~rq&H`@^kMTo`B7_ErVa0K+{SvQn^NfG{0i-)5-C8Z)IQ=+me`uQ@04tFP$p$)q6?H1l%plQ@kmv#-a)$E=pa?-2;B zO=9)KJPa*1I4z*kdbH6z!S}Yw^f%xX05tUtC=$5zba{ulD0s;*>ss(GbF7F1qx|^C z=Qk=5wCKA+2adlz&&Kq2_pr!PTe|C&9#rPS2o+hr7f>{t%#Ep6uBlq=aeRK;`4TyK z1?7$4x1L1XzH5{4AP{+z#PLa*BGBw+j};K zGI!ZW*xep)rStdSum#A(vktv4R(T&dYRV6Lsrzyo0LNwmC@X>=+I_aIs#<5T(I+zm zo}ZfnHqgy$Lqxvp?7Ru1nHQE?S{$%p9~wK)xSyLTkv#xiLi7cyaj!16Z3Icw>EYvQ z)MEUIi?SpyKwkRTH(<%`04p4!eQ>C^nNao>xYrG{BzjG&*}V+7&s-T)Qv6o0O;jRQ zk9Ipu%U*xi<5!V$KyIjXY-n-_b4sZcsHC2f9jEbY)BhDY1O)}PEC#QujIZN&>mRR7 zXpe8Nk14AE{B~fNW#mR6%gAxRLX-H1{1Khm9+;0GKcdzLiVW8|-LD>A`)s-$2?FBf zqqh6^0a{XP(#|CrXQ7X^KD(of)v=|#o$c|dd921Bx^&%lKcM?vLxcLC+^K-0wW7hd zA^$Vjn}u2Z`CovC;-p3v+GG0rrjTEUKT4x?DotS+kn$@fvg=Y0o67N{m+5>_R{g=X zaHVF$i+1!NK&A|?uwkRJvY-i*kkLHD2$a8~9#Wx9oik0%Qf#ms=N`JVv;K?qdVaD- z98kRgm^u7Q9IG^%6UW9xijRbTsM{~2_$c5n_B$RauLU=GsBb}0@J|1)GTinhH7VAB z8~i?TRx0$--VKDtC*KI)20evX*d!un_RmeJU!Y>}MiI;c^qQb`A>JcZpz6_|9$8V* z2i%=5QI_{^ocybXL$v(EuB1o<1w|RoCL%Z~_&;dUH<%m5awo4fj!^@q>6?_H&kA+mMd$eh!wl9FMXzzynney60r zRcVpM5E0$(gBe-#oTik+-t47?FEF`;KS?Ygv}`WfdGzSXV&x5Pn@NJ?jW_Chj0wQ5 za`lL5rcw!Xh=niPL*pO~>r7Wx8tt)2VP(V2uD{H}rRsaxH}~JKZppLh@Y>FBZzy9F zvGDzAL(Hr6xt~Gi(+nGH&YC2yKZddUad7kV2Q!gk;(G8$$Q$SgL(W3|!!4lmH-SX6 z5OnP`6P(bV3GG(ekJR5HTJ1x^EHN?!5aZi7J7vO}zm*0nKnkWDu1U%~g5EPB>!Tj` zJcH_48T5S^_5rq`8fy-BOHEtkSQaCJ4c_!75)pe+Km0@UBy6hBjPC?HZuqd-QO;H;%Padq%r)_6gR7OCW>& z5K#2WgA0D33)!vACZ9bO0D$n5#RS)v9tX;+Pe<~ev*H4SzS8$PZxnL@s3g82xcPk^I(p+xj@;POl7sj6q;nRXv3FB{ zihyOJ?0{l=ZYC^1;!nwY>S-vul4lB+X;f^nHf(o{78-4ma z$UNwZ(>vCHQ2$71&C_v1+6d(KOK z&w}3-c)2hBsSJ(G{XhEe9$cR9$-e-Bcz@PbgHjR19DgOrVjvw@|0>Z7T8?-*`IRG3 zerxyFf1I4A2kkORWT~1%^_QPpVP4kShb7nvyrku0^PjIamk*o}oI#7Ge?Fe^&rssv zMcPN7{?GB-YH=X$eI2u0HCOCzcJoz2Wa5X9d~xNJRXYn7)pz7mxvnuH5ee_B`WF>= zwrqdQ^iCPx$!U5TLhlGx?;gs_+~^FPlGE@}uk#F=T20-OyXG&EiyphKIy=0#FSLa5 zBHs$+wI+T2V08rJYTAl)FtOgdjdUha$;29vksZHojc&o{!>{bwu)p^K{WP$i^2XlW z_5iw&4b1VXKbl4`0onX%V0STfrI9*QW`k8E%+#~)O~doHHB&XS4de`ojj0_&n>Z}ra%alMb8eE}I zfGA51^NgJ>1JRgNUW0YFo)&+?2kE+QCd3q9cDugy9_8rg)XL4pIuk`JlT^tbF5GHE za6!*=m8@|^#5i*po6CRz?;UQ1&7Bu^Jf&Z<*q{Q;w!Ku*(~(Y2`k4#OuGn56&dYQS z-yeUJrJ1DsUekBf>bhp!mjK|Zv*6%pkh!qt@jqjH`=sTLP79azkl6_Td(qvkW%@md zY!Cmtf>EW5KBwR@bKLyPTU%gG|-WW%Grt z1lThN`(BTR=DLS<%mlWKW;-UU&@-JZ(>8eIK{Ow+fzV?ZFPlp^_xir2_<7U z9##ctLmc|7_7%7S0kW;W?zkzU{}v3ohg~YwN7$a3EqG4cO|2yqSc8Mo&0Oaarfx+e z7LULor@Sr3jf#$QsJ*gOaL^eYDCUawKb`(j4QFrtf;*i!8}cYY*-)$hfqckxqJeWA z&vk-`S)s$z%Hv$VPAP}X<5_O7rZv@W{$bl9Q<)VHeoJ!Z!L&;x1XteoRsZqi?@o5Y z@47vb-|Net&5k}iC4JPKG>9bljZFoK(v13*-U@&iiJisq@HVl_s`Zs zv@p&#edTFWF^CojIzN;{nN8>s3pTlyo(%edSv149+R+KN{^0YTr(~m!)z<_hiCrt) z;ixWFOktt}t7Qy$1pciTcYeXG~Vb>nhq$z^q@*JLZeUxf^V2)x~aA5x=@kfqMj*jn~nT!5QNC z8c~@iwD5fVLM~>kqVnOUMe~&F!PVUrGuo+l*o{^j6>;METc`jGv$Pc$W!sSeFXw^J zD=V#6=3~B#zjEOG9Qh&8>8taKDTM$}hg|#`nHdU(5*^()@1!dn6z`P2=&U`hsQ=H1 zn#xW>+QxU89`GgRrvRy;>XLRp5>tHmLtKo9DJ7u#@u<#8Zgb00iGbqahS9nPVP|#b z<|^Kq5T9K2Gj(+R5YgFzAt{HP%XW#+*~{ePa~?ctAgVN6+GN2K`hARwgF>#!*H0<( z78cGTgoP}#b-P$*TE}B-lVym}d_Tow>==?5_<5M}Ma%8XOBgst@2wtPQxom`OATY$ zY&Q4`>-8b$Lewytt6URW@eiV9~{PiFvl zA4Hcgy3X@iz_x*b8FjmRA@FJCo#O0Wwel|XL# zn|WpF!C3S6Ed!|sm(HyJH2vr?z@tR#GdCtDIBUYEH&Q&F?%*Ka0fy&%{%k2NfkhK+ zc<=otTH#y0iLNdZ3aBC7fpXdWcB5=M zg^${Uo(*5VZ--S7N+c6llrfRI$N|0m5jW?TZ!Q2VhLj^l_ug_*C zYh~wsvyR|qnwM3_#G2xHE(t2-urXXpAzjxDvepjH-PrDqv`|p>3Rt*Pj9s!)y7ntw zfzfP@k2sLl-{`8-PEj{(e|>lUX8xT+rX_^N)afB))24aj_ILXF7gMr!`({~G`wK4b z-5GjAR1SYytPD~zUlHORi&8dvyf#AEzKId)48ODUdx5L6s+n-*P8i*~=XE(6xz&nl z^0sTrb=aCRubLNU^4(0;P=QxiFLBk_9{@-PKd%>Cd6)Yl%XP;ayvpO?*K2M=1k$Za zdq3yPID4iJ_TLS|ULiOwL~(OD5Rz*iCz{Nex)PT773J376>94Qbe?&1eX;%ga2H&t zWTQhaAZZuFp&;TjH}=i>qzp#069?8WU)mY(kVj z1#TU;>|CABmm#vKLo)BrL9cvuC(B^YD5O3_&|W3cpNSPu1*MPSPnd*R`OVx2XP2^S zc(U@nHI(Brm`PHqMqi)gdW=9rbw{0r|RUzg~$pb|-NY2KRqr$~*Ql zTWbnnPs;h4swDYAdah2s_1q0Hu5F5W0~g>yTbmYn{1}wjW1;##p~j8)Sn*$ceu4S6 z*;f)@j@lGBls4$>^w}}_u({@HnVDNP24mi^5$7l&P_4DBAZY{LQ|zm$aJ^z8WE`P_G_peOxd-mB4&=z+tMMniaZ zsMm&5&@ZENTPB#d#ew=N{K^HTNPkQmT$&&zn}?F)r&65|1uv|N#HQjyd7Rf&1cug- zH3s6ohe4-asD;IFM5#4Is)*nC2`@&GFDBzUt)J6p&iFHefnl@c#Lfv_BzGu;i;9m~p!jX!^pn~ZyVidz(M8k@`Ru5sGF zZXllpp+J~n-CvS+a-%27#;o4INn*;O=TkX}zX44Vs>ps0I{Z0dga{*k8AFSMM25{cK4Q}w2r3X!P_ z8B)fLTGn0`vM4EL#NpUt>%UqN;&orLVNDZwa!X&1^D~Bux+yVz@^-@GqG`X3K)VO) zhq;g?&4F9Z7B%7;;GH#Vs?_+IE#ch`g81_@9!CZuhGmrw*=hXDg}w#GPNLWwL!GShlB#a z_r+xy{;_as-co#)D#1IMo8Jw( zsM#V~2GP`)>sIjiCu8@BU*CDXxQ<_zkn0!I@LlBR=2zz$dM@|#tm$qGzI{2PcLf7R z+n(BN_HeFqzu6e?CSjt*g$m)oVs+Tn&hE0=ZpgCarW831lg&1ao~{3 zBs$)D^Vx6Ebid+mS3%Nm9s8Q};~U9(&?ScaPbTG|k&g{t`n|Rg8u1LAk1wbr(8Jvb z%>sS6z!;(&Ax_ z+ntBoET8ONHQ}IC^XlGq5UMU6yyoX&1vrlQ@Bj8iT&C+bc=r%TvC@q^^BT}i-ybcd zxh|1;e{C$KC+k{o_7oeZ)>fNQ52hUZDHL%F{#Ykpq&S;o46tOV)xDkC$<$T8kaiw zJgwj31^Muo_!#V~Cc4u1&}y$~9aU<#(I8?}*~-9e0L_yTY56;BdE#>OH=WKOJl<_J z>D?Y=Ns3u_Y)%WbuWLdsRgM{2qU$_{qAl$~AkC`vJR^wrL$%ECE@6wEtR$5(eZD1Q zM$L6?hofwu%MlZl>l%XvR+>$BEv4*-e5h&079x8<(x3Nn7wKxa;&|iGv-@{i0X^$g z$pT!v$5<9cW%Mdem+p>d%OG9;be^7hxMACz(+>&d!FezrWiK(&rCLZ9+ zyruD!4ab9mMST_;8l$eOkD)hDdT5QNJ+30y(Xazc9FZ9dYRz|b#*vlQeK}&7?|Tmw zQ-uL+qUDml5PGQE6KvjkNyAraJXf(Kz2X=f=*aC?C1$mRn+s!3n7O?){H;TnpV8HG zQXTujm7DO57>sU_nRUV8LMb+o(M->55LHLxq#RZ?sw8aTyoOzNyPV_0{>CF5Wm-% zYI!$HSr@a|)7Gqg7hrLZOB^=cUY&uNXr*WWW(BUx(tPp<<4Xu9Pm-bSRQ~l~I2%m< zMxBt4XQ*?bJ!;$sj&~q89TLj{29f!dd-9jY-B7WdP}bwn9Bz^psO7}zfnVrY?0SVJ z*dm$1ypD=zx!xN%Xq2(G#b+tzd#E31q-@C-=gaLy6l{PmHkZ&kb^s9|F&;;HJYhPrh=J_;+OIaD)dJ zC5+dVV7Xf27X=7ET@8n;x(8J{tGH8Pqmpvd5!yZBVor_5l=4^XG z(gI2WnDFh>g{GCFzo*drcpA=dzj}HsMP0p;nw)@>Ne5|>0r#*nKW zW1$~_j*{4UNQSUU`rlQ88QM#AC^0|NyiT{jWJ$&o6{v=8zzoTdX0?wbXGa~}+0K#N z4^nS^W&%iU^Dw|V@R@b0J((F4@{S86ef$=oFn+44cZ(J6-PK@{OC^m|11E zuV0n5lxedDINFQ|BV?|)&u{q>Ck>^A;xBLIKze{qZct8qAcanE0h`H^GK{_Yn4{D1%KyOf*0 zZIOVkeN}30eYDakbc)Eb^7$%k1o^xFor)k>!F2xj&i{}5hwcB(=A8e()XR+bQ7#ep zjHgp2ufh+Uax(=;h4xuAyBnEX>Hs=C*B6wh5kL?hjPujct5&-;B$Awa>&4Q$iIhmf z$?rAD%zYziHQi2?@UmO2D-PnG*m^|DT)IWvYTSyfYxAW`t9mMI^aKiV8DOEXEa;5c*Zk#nCee>gAFR2xHJ$*dzRh`7?;QzJs|K z*Ck_5jlQbKokez@U+ug42FJt;Y3lXICaI$hEGs0kvT?4^ysJ^WNlr0mDnwK5{E{Zm zT)cRF-BVqO-dlqb#nTmxY0JmL$)hE1UA%+Gnu_}yIvo}Lt4->@R=*+DACIFpLT(&* zsGJIX2iFQ9per&>#|&mGRhWW==SoP5iKkleUU!M3fMG{7%clN3PGYd>K6tDzzK<0c zNAM}pA-1{0UM$7=E(9))Z%rP4Z->BFI6xqmt`H(zLp=zy(T4eiEoFvXyj!JJ*Sv4C z>uDFOwv=>hteQb6Zcy1ymvC=D?qP}V5z-Tf&P90odR_ixihfql!jp|S&7}`~m;%$V zc)drVq~P7@-zjB+-pXdi1siVFD-Dt$tyd1^#n#ptDxn_$Z<9Gc_qWJ}p{lljErVx0 zoFi;Iqz{~!CKPmbNVe)a#(OS-XD?`IA;Jip_G|nGgaN+s!<#&EX(LG*$fwyP6GCAC z5_!%`exx)GV+rweb{E$$kh|saI0KB*dfy?P1h$N^evvhLJ2)yNm-AJ|OKYrUDIdN4 zT9moJd#KAQBifiT7iM@KwyoPXJk(G2ek4;I^4h1%yxLvGKji)~D9L@qo?~kL`udLu zrh1mH1g`hl=d)c-do;AJMNUsex>P)?{)rU~yGY8xKU?&MmS^XBU5VBjeiC?YBxbq9 zbdI&PSl*Qjizn!1FiTzHKD^g*t-lu4tXq^q>#J`_^liL|oaB70ao6Ee|BtH1kN#?? zSe5FwuaaEg@$j&Pk;4UQ5>|@JBPHt8NUW}ckgLXE`2F1L#KBoLLO5k*lyJVT7;v)p z2j+%LxPM}}gTPFvk(_66qY3_~M8&l@d=XtqcLnjTGL8I!7#& zZ;_VvzN3sda2)s|PkhdaL%GKeW5HZ&m0ieNk^(voh+l{OQQp=TdpCua4dfP=4O5kx zBX|)b4@%LdlTCtDB1Blw&0vxQq2Es1>x)=ewsdh8klqiHanQe;AN4uvAdo5j;R3J? z3as@}ke6BvMy9pBE+Dt(24uP21VFTvGC zOIyOos~XVj>tbnF_TjV0v;tT6Q2$p8_4ub((0H_~dudQpa__tpbm{v30#uS*KcCD_ z3q#h*w#&TO@v}sKjLD;b(76#8#0%QR7^cWQ2$KN=$D5_=l};&V)Vhw!Y~qAzKj=zE z*Vk0!E++1rGXSG&gFXxJ6R1pDz8Tg3Gha#(N@7aob)Rn6NBduXB6Az>ZzhfSehX-5 zSdRX<>@MQ={~kE zT*B+{&<#N$_RR;+wXT?+{Vd8=sC%_b?kIRM$!pZC^i}s(qln??wrs@VJ zZpcZ5t`~ZCL3cd4tZ(E;%3i|koOk*aqLO>wxj*|w!l^Y^F!I`v;WYwRuwAWB@xsc` zHafpw%=ME4mC zabxOXX{X7SQ@|6~WjBU^KW>X|4SWUTgavU_s?>pOfd-ZG)I~dC5pCNM@qKWgq^Y4x ze1A6CmVIwg{+QvlN&9O4;O{mj*Q)Q0#T%k5%>6n&Z{(h9rj`J+GaMn@u&0G>6XSAd zkR(y?*iFO0s_^*o(wBya07Ir?#WST+Wt}bugtpc@K_gvp=rxP$jUwH!=!eZ7s@=jn zg;9ZSDned93Qe}1<~WO==|d9~2dg~lf_^7e%ul_q>J4X8107>xg#eb<1=88$Z>aw) z--P>j7aKDN1+*ue+|Ku@md(!j|G$S%dVoyI4dIi+V)hh6Jo(>ij2e_`ov|sn++1}m znIGp$;vE{;hTuxw4eVa{f^NM3i7kFdaUH&7r1i-!0NxavWgT=GjKMdA93Pvb7Qkp5 z35><6a0L(UMTY}gNwxhCmk0dUY)q2fm_`R|NPsjF;mvBjkZ9h@GpwO_@I{HRP-1s` zBD2#~3RazN+>YFL4_7v-?DZkgo^BD8dAQp?*_8JT_a;|0+VMdu)+71-^|uJdY|)XI z-JF-fRY+j5NmNYx%&}BKiLk~-b1>fPY~TE)WF<-eS}`@`cxrdac`Ms&LUo#y5bpVV=H0XbA z98Hn+eLFYd1nIy%IWR^(M%A=TGq)xwI16&3AM7ob*xbG_`k`y`K2IN4TC91~&g|?H z;C;<{$@|&}3(sj4%Ia93-uzf^fUC{46}a;LF&XM8q%aM4A#W~Oq8&kaE=hqGyYzlHZJ|Pr3@l7Lk)4?eD!7v7|d;@GTX8H5DpT=Od3SuF=jedHq zVZIB_{Yg-Yz_1^ICDB!GyaS`F<%V|3OwYo_?)9eJv{SEGe`b@W45PUXFeaw8B4CvXYT8GY=JhpPolkldYzadET$--A z;;(dBGhiBVs@UDQF?g_q*`n*JHhJkHZnPi0(awR|bGhbpPC+ZzMalm9qbK;Bv!zR&(Tw{5R0k55mp~|0WGQ*t6`L;2`pdDPs*Jcg3+(M7lAfcDb1abmd&9 z`TXijlr<1bzR#CDP1&MhugJP1Zgp&TO7Jdk=vKdNZUUuDN4Xz;J?$}P(8NG5S>0Hk zR%X%hz++(mzgnCaq0uob+elXR>@9!&R`x@B{8}vYjBc`>#kC`;o3Px#Cg;E*V!>iM z`s+4RW*N3PoG6RipP>JlNit}p^#jC4Q06@XwZlvvmzz-cos(}5=pW%?7PE0!sO3b# zp9u2C>1ETtrrHDV9l?6ghnL2-4^U5W8CkxI(gwn*s$=q|DDU)PLjePLz}U6v;fl{Z zr{#Cpr5?Sr&#xzgNBhN>3d--3o5wE{mw=5s?>8R`sOIC*}_)i`%k<-m)ja0$bTn{#X7_q2C7yt}$yV=M%B9-h`MP#!GFsdMA*$`dRM zP@1PPeYT|DIxw@gEoqZfzRP3g@l-aO1ENlonK@$@LXg0e#s~l4A|=1{OC__aGPd3ue-w~UuqrGJWh|! zfId7TNKGBztXzy|Zfp`w@oO9)we6;My7}M|oxf%pu{n{7K;Mkb>S;jqPxCC(KMf)j zHz&=bT_R49qC0vxas^29HtllT6p=nVf!ZdToup}_g5HVPPY{BFau}bo$v3m8>Nj%$ zagk~|;#4zo*PEqb6ev4))w&W-;cV5buSMo}Nbs*Sa(p)@zH=nTrEq8kt~z+T7?=%z zs(9>LLa@s_GY^&R;-O74AT$M{2k~r88uQE;;53}Nb7xAB5b1GHcOZyqzB=_}mTQ(uu$D(K$=3YY+1YKbrHzi;B-3V@Hm5H?A>tR(s&om$ z_gA$zt2*_`w;j))md~lZ8mU#K6LFDruxow|EsNFV3$f)q<(*jLkSeG#eA>|C;ZOs{ zvhB@~pNxlwxELUF&6Z40hc~+o(HfotzhgU|2bc9^*vA`)tgR-x6C;cym5>uM?X8B_ zyS%^V@D@|zkOSTU$~>?96w~e4L9!Y*$=r4=Z^lUydTivqYfPLWWfRA1+jYDEQI4OP zw{s{yRJowca4ZddhY#qPCNkc3(NEK{67?~2un;}CvkI$j;b~%ONyL%OF#6Lyw~tbS z+%mv%L1))s-L&!E?B4aQVn+l8u0m(H+t%}j(`%wBjW`qJjo}_vbLsY=z!PRKw~@6u z$wP6xe3dD%aLdxAD5Kz-YKcnof=SIp=vtrlcx(dQcnM^aDODYF7Ghe@Vh=iMsO#qCZ|2rK0z2QypHm)eYb(3$qwOD@p}NS~zIq9xXha9MkHbMavYzr*(z*n+T8`BN+8N6e*&6h;!|C zh&62g<1;0%vqH3JG9iVbcUd0m%`9M=-_@7;6&N69od7aA*PNA6K%svHJCc{j9Pa)dJ`FQh0ZPZ7(?8g@1hBbhJt!&^|~P4Sta#O`S+<@C+(z2vUAKq_f zVnU4b%`%!E8fnf6j!MTiR%FU23xYq-*9P&6O$u3GQO$J5E}Xgvc{CZZc@^iZUMMZF zCppQ6u=r0Jl60>+uyHfRYO25r#v?gcc+S~fyZngS{@_GgF;ck9F#Fv6!{!9s$yoT? zpu2I6zaAUT++YwX4CWWLTh1NQi&6m3PP14l{!3Q)TD$qqo|Y$JWZ1TsCJ?Tx_0Y?o zDjoe%GuCt;cWqsBbNa>LJ*K3%B(fhXajTgD+h8E)8E?$tQS!ZTAFN>`=*~`1Se^7dXB)jwh4!qju;T0Uu{MOn@*DTqBhm6LZtV zl?*1YKIHUMGLdu5z?g<{NxTy|G#!15at=X%Q-s|gC$3xWnlp7=lp=73zIpgGEXg?6 zTIwTSYFgSjb*Iv2n+>B>&qU34uYZ-q&56A{reagaZ{zU!7#EPy z+udHNSbC*XvZt}ZKr8B%oscH^_BWw8kXKV;5!P-@^a1mjnPdheJM+sMAp2K8|ASYy zk0Rn=xV#m$#oO}UB)=rO6>8t7kPfo3ve?@e{9VzdNVWQHk+}%kW39d!mSfJqb4qW~ za_|J@&QszE9zMj}`N#f3dj5q!lRL*G!%`Nb_^zK^iYL-FlD*rH&l6Ax_s}hNce}A# zjup85<&&3`Wv5_Yz9jw}8G7=n&gxDnQgR2eA`Ohhz{oLCdir4@+&I_iwl`Qj4MnUE zpHxF5A6Q^?vqc^C)&Uftk-B|Xo{$H1*n^l!I51S!5QW3oO-*K{LJMetY zH*&3DXyKY-c+G>xQT|LuN6hkOI}lJmFcRL0Ki@6K29oWv#|zxdC9u!&6d|sXCB$Ig zM6?bta8b;w^DKvPrJb(@p>5{Yx_$`I5q#}(Dx$gd`L>BUztNRxpKe>5)Cyej{uy%h zukB?DVj*#QU_K*@D_w ztqsyqwd?a0l(w>SPffb{8gEjhx+b}@&Hh$N2USMsx`7uWDqZI@H}qS|(bb-ID$Uce zk(+)xeWvGngtU{8yGO0H5`&bY(gCER50k>2Am|e;^TfK$;W}1;usH|ix}2rIz>*|k zVstw_yIUQexTBdc?WE;f)=D$eyz%PLO#rq-=+I%f4fTq$?PUPA!?RCUFFeu>ASmA2 zvh7tVq>=8h2B79A0sKfO53cw6^j8U(&Z3M^ef8R`iXf;L8f_i$zFzsV{Pb39r-g`! zkh8HT8UIb-DVCj;)bFOdv)ybfiecB6Sf}yRrT9l%A~ZrBDMIXo9{!+ zt{tv;Jp`PlB&)Xy`F2Ll0zOV^fUo`46Gc~gfn{*4xbkJBkD zQ!knm;=CD4rZFC9bAjd3m7E##8lI(Rn^rfbrgdrC?=}uwIZO!=;Q!P`Y}(B~DY`pM zKxBuSm%Lu|RDb;}!2)R-E@EQSC)z@FQo5wO*Y#$1Kv(nQvx4JimE+9RQU{=e3g@wF zHfC(idSjbkjz8yG6nNAxOCVpZw|wpX@WBWAj^v_WuWb7j4+!8rIM$oVJOxWdPLta& z(0(ZPLq>qYL(NjpQ=0V&T|m%KF7!alY7}<=o9d{h5$UgH<_hydLVjPGlKHwaogSqn zc{Hzl<|RprV!-?=L*L5|N_gn#2ahy{<=ofQoyd*_;Oc+GfT^CGGdVkmIO`VezY1G&C^8X{Y-If~HfNsL25B zFd*xBFs%Hu+QZ)~-fd^TwTlh(7o`C$&dV3H|1`K;_drDmcrjr3dy{Z3iav^?lyXXU z*ctu?n5(z}U{_A5z2iXe8v7q~=k{p_^8o*vWQe_^x#_$E#BP2_qF4pUA*#d&EYmf* z*!kUyZ!JmOe|;P!?_P>*sQ=(up2X#d0-$Ob<}6e+9zIIqX^jpE!Y8(aBTzFdN1=rV z$?qT~Ni{~<0J6+Cs;hnyl(%;mtB@gsXITmND~hky<+0{7p#22Yj4eRy>oo=PLnSVx*E}USi~3^m>u_HFxs#y+-FG(lN83*3I=w&kR)`@ zW4E^?o-Y-QM;>q&@%TxbX2=Os_gJGx#$3s>q{(SYzl&UD>hG2WHmDlB#;}2AkH5Wl zr_{*M1{1^eZ_3>(w9-=tvN6V>$vN4D+AUsXMq!Nad>u8|_bA(dc#{8OC*4*|VhgM^%?X}S`guI=UK$%;*ItRKg8)n)D zTzW!QZaE3)Zxd&;D<}Sl11{I2sI4y^x_bb-iU|Sadw{*pbe}6hDDH*q|MEd zlB5bQt2trd`99iZ1OEC#!qBx?OAFv!iOjkbhL0Sm?WAR+B$vDw(!qw8o+NksDfOp~ z6Wl^a9oyLe2ejjbIUms%pZ`l?2{yck`?c`~8$Q3KU2Hrnw^ybbrZj9_JRfaoSRyr~ zelM0mmRo&NBIk4oUZB8uva_6k?NoRI#<-Zna8K%#&L;8SL+h6$Wn1#CjK!lIPqzif zCE(xQ6T?*o-D{g=JCNVW-HkI8_`1)OeH@7}ZJeSb{AWjOEFHS3oC z`^pyCt~g~dKlyta0H5HmzNBGMK<3wzBqzS3C$$D+Xm#$h((?GPE&(wqLyyGHU6dr7 zv#U)2fr#%6zo-6ZfCBJ!F{%qi(uamzc7ddp%`3dTsSfG3Y1acfNY#LY%D|b-T#4nT&Ncr&JteagjZm@6S%?=Xpaq6NSZXzi5+b*Ll*f-4dEDqf@{BVAM_n~9z zy96JvCg0FRg=(|h+`q@IJ!7sQ^LdJNuNw9#n=~e2k9qALD?OBGmr6^>H|6w;gP*JM zVAB*3*i|rr@)Uh7h6^z$CgseU-Hyj;Ec8%63#4kY+h19NWew}nuh|{PxDwDdq&R7M z$mj0}X%kQCQ{Ts@DZ%j4HD;LRKAq&9F=BmVz?Li0a~|ijOG5)Sw7sfm{{1B-&N1C- zx-Dgbb8VJ24|4JtLu&6F8 z5jZlPeCVzgc(-M$v4bu+~{z6TdS1d z>AXI0exS#*;jE>E`aK=x>^B+#KlH6B*RE-0qy;0vLPO zlBiS8WA1;wx8KKG+u)QfUG%}L{}gGmo*6zz?Vg+$y|T~rg*K7Mf4XEp$8ifT#lJ$( zP6>4{oU>Jb1}cWDNOS60-^u|!03-c#UV?UsgpL*`c5LYU{5%T5*8lZj-my2k4Y%R( z1EHnKAzTGXLlSKVwam;*!Y&PxhPmw((yP z{?CA3Cd{b}eU{9AuxS3s*}s!l@(^ESs%)AzN7dh+eARRxg~)~abcXGXi9WODedFisnhia0+cC~l1j?rZjD4x>m}u~EyMKXh7vEm!vH;Dma4pCY*u?(yN&ATnwM+p&nW5BF z%nt|KSG=0`lam$4P&L*}l2oJvQ{&nx1}cWN7gA_bK2XjB?Aw z{Z{G{-6bP&nUEGHZ%-&3#vu{;G;Oue-ea_zN(uU~As;}X_eeo#)Q%AX9sL~>s)s?e z*C41$GA6N?_E-~6pDf%OLxU6R1*c52=X91dwV07YoTBxRaNz+ZHxfpxtF=J>cMN_YFF(Stw}7+(U;}*)$GBR}`;xR^IoG zZTI&WbKo4Uu}isb^|b8c8?5^STwC4_o!Hub?X)~fAU=W*QzLf@v$>#wQ*zj@tD1uDPcmiGA-T6 znlOgI$36OSl&#Nh=x!y=GdC=THOt*XU>F26)Tyg)J(CBAq46H*;ZrQ4L8+u$Gao2# zb#b1H#$qZLa=*0AxzK+;xX%1xQoMC1J@+JWWX)TS<#1=YRm-I>9gr}-amJ(JV_0l! zokPhW33)LS5s?+I$H91-rM2SDOk`Ttn@TmMEtz~<@54b|uT^&2gp&MeuTOn((`Fv_ z=u9hZbz$|2ruO=Sy-+G8ByEkD$F)O@l--V;({U3*`=T*(A1om!F}=D%WK&{e0LmM8 ztdSle28G_O4~mGTe^~lF=`HMI(DnEQO;9qpqn1t~CZrw>Jt>R2yyN~!FD#JsXC zlq-&yNS@0%mWA9vhu&U* zdptJ=uDfHNzE!ctYkksaPHpsU-Br28H?Clh)Y5g73QW}4lm3$eg<*0&Ya)aLZa;e0 zSbC=}?b5F7Ztq~elHMR}mvh_c)O*j(oa87V%5bX76T(-%y>r%`na04aXNEeQ3h|q{RovhjdR;&vqpqgZ_;Upq zvh8s<w(56ZkF6E! zlAFd%M#3eB8}zE22{eCrl}^;wu*$WpJn`&7t-U10$Z^9;e@yA{Er-=1KvlQURX zQO47maq%^>kcW9mfM4lg-Z+2N>MRabhtkkXb+2%1E>kM4uqZghtD$gSqjBsA+PEEi zAJAdsCy`nqcveMkb+W0%g3X_`&nD#Uz4OPL!YZoGqqZr-otn1c$F^1mXN8;f;AOFJ;$+6x`5 zPv_AnUUS00Blo~9(MkH|0i0E=>*+)jQu`}mpz2JnBcQnpblCI$^xJfM#Utv?IaAvc z{_x@I-Xi*xp}O8-2ljQ%h4zS~&Hy+@dp1}jN{nTnNV>(X6&O?9cM>O#`TF#e-nw(& z^i&pqyhWkblz$?t);s^$3tRSYkl(UAogrrd%5wh_RR||!O}pL`v=g?KLI}3|)8iW= z03*C>*w;qZ}3s1%#R7cH@J3O&xbSGfadv7oK zwA(NLT0bn(AVJx<5$6f82`)8WWV6I-(rJ_V*!{Y16HU5mhAr~M3G}3`QfkdcN&EV+ zCB|oQ|IEE~+ICMEc9nE;?B=Nk;%-2gQr~&fM!?htS9!#ax%IT^W=q>+pQ%nN&q;(8leFJS0NLsSgn0VT^f8 ztA1KB>j?@@>H43ygXgp&ezx}K3Z_dlZUqcnQd$|BCe1x-_oG-B58iqG_%Z2&+*qB8 z_VJ+v6X>n%_#MWBAe3(?-n8`{uLd3MFe^CFwHw6vwDH?;;Ur~;L*}iDTU~{hqI0U2 zkyU#9Xp_RM#~-ie?vRabS5r@7r3t1e2bjuW$D4DXPrO%5S(MG?f2C|fwEVy^mMdIn z{WUv(*e^G*OH|1MiH+Hg8q*6LwH*{b_(YeWJGL=TYW)N=iONgBj)bBQgY0{V?>5xlhu=E&}xN z?PBqwaXuZIsI7t^t;yg;CC$Ng361#z@2%Hgiz^wL&m~uFvaW_T`B{7=9vho%FlUaw z2_lyBQomXM*i&KUa5az!hHNIns#ay`KR?P3Dj=>D?zLt#DDT{>W|BX!38>UP44r3} zy!>Z6795A-MkMK*s8j2D=|UEl~YW*8Tw@@8h{hoQ~KzZQ&COm|H21&9Zk z5;G{3I@FP;VQp0k>4U}Ljjyi--H&REVF63VvghR3SxJ0n{Xx}%*YcBvuOsZuRnt!6 zW*Wya%=DCSc2?rXs^aVV%hBL_b--EP5MBhM1V+5PLpLwVp@tQ+j zSK5&pH%>hqER0#36dI!4hVQLf*qrt>0%`}&FtH8`d{9QQIWA8~xn3ufs0nP`sa+~r zOS+Rh32KCew-l8;+?w!0nLl#l$>`4(TFY&R%cVr7wD^>EAMhmMcOsjEJ_reT4aPhSw=Fx(` zu&^jr_plPYnUBZe02@DSA$W}6v)iB7cHBt--y49;+2AuHLrFecF7h;m!7@|Yu zQ=MOS+Ts@0#L6}`b*tSRIw>(3&enmF0?K~xOk@Inl^D{d?6`gSP8b}S?}3^=N6>jd zSor89XgCDUiQnDmReGiXLGmIg>-+&79&H0FYJJQw?Wkx@Cgp!Hn1Fc2PNe0$rg zE-2!*8fC|-hpW{&7%4&DrKnEnK_hlvr~bq zfcyc>niT$VyRRUDFlYkYYTDmX@C8SLT>8(V$9=*r+4eb0k_koE(-GdWO@6-;5VYYJ zW7~-iC>gpiHbb*Zx$@y*WvFo}%hemOmwp835LKSelgFOSep(#Sxe6{GEhtryEg~jc z-ha`TRPUF}EvSfsTYC&v9G;JR?=nM0V^%0>!+qgOE?g+h!INm}w{ly7?fNiCW7Uyw zp%RvWdQb&Le4So%0K7!DXqL9l8yUonZ3M7WKYJ?fr~aoAEW|yv$U1~slr0{k3+=XLs!FxEr^-1$ z+2ft5PR%7E$fw;rzt4xzT3?LO=km6%zC(B=CY5|GK^nwXEBR_aNU!}ZW&G;bW{k1}$F?{+0eYboeUpl-jJJNXk z$K0(V-FI`H;D?1TboX-aq=j3Ou1aeepyx5bnST+)d&I#IRZuFgp#`(<#)KE0t`aI%`J~dnrU?1A=RPX5lCsiwKtVb zaOW_CKyGvm#g(bzGM?cw_B#CSMq*uTp%EkjkJgm{f3C8?>@#T;B+w6K#nsR4?vbDy zSKCkasP;)mtR`>nH%(pb10;Y|uTawshI@)Uc9%9#ORuO6-}=DLSxO^oeu@{m|Huym zIP9#PwoR=R&PupTqWZRXthCCQK~oSCHqakRU|hZ5VP(g841>!qy~Zn)838 zbdPy^n{FewO4P=FvGh=^9Y|t2<%ES?bHL)UZ;PXqA>*@K2sZF%=_;oB>n8sq-|w`) zU{dE|$>9>y@hpi=572YJpimv-NT*kSqol%7dXEW zc3MvSaXL!33(8tIpA}Wy9YyWLM(!1z8nXh+rdE`B07y4+-b&@koch;Se?hsz^%th$ zfNC%HUA?;84s`KgOH+lBV~DNv-=&BYThaFm@-}$)o&@`TFxnmx_uwmt0GI0i#W!s7 z#N=2HPXL(Mv;R3zXQZ~kE)<-v{rvj>sQ%9X%-->DvShnatp2xwEp?xqi$ql_eGb)8 zFWmm0ZzbKHUegE8@8y|b8>j=2;_kZD zEfiqFyXsh@-P?LovS78npo|8e=JDl?SML?WNu#bh&UHZ%(@;>bZ%azXp?~##_yqwe z?Op)0PdLFlTrih6j$8S0*T@opu`hkx$?OCKelVg$0yYaUum1RN<$x@@)gE>ekzNj{ za+w8xN>s@bzL3NR2I__vM-&;oCdiC_9f+R|Vpjne%|m9b4#;AsQn-58BrEUYx&;(94`8 z*!ZMf1S2i)T-v?}&1T9!8d=Yp&dghC1}<8-V^q)Dp)Jc-6)X19H;69>*$+uNQwGP} zwcA?z{T*eysr`>Q;1n&!DT-E;78^+U8H8ASUc6)D$O>&PtLvkbipc4`o^q9H_Z@ad%QhuT&sVPZETcY5YkIz4rrXc2Jot zd@a8Q^VDeS+tB)o!Q>8>(de&llIylJyHJ*1f+zT0Mc7PYJiaB?tq^A{`l^D_q{v5w+4eT*qgof z+-vPM=WqVjo^$e9bekh@*_vp=P1%bc=n0e!VK-73&{sjFlIU^%@>RzGiJ`U-8O`5;r=6TVH=+cdUZ_13#^ERm5iY0!&Qa zYbD0?%PQM)C4*@h=PMkAqw&&6Hq;U15_(WAcgMi@AJZn9xx3bYc)7A~ER2@Tj$6!5 zBptas<@tP7X|F<>ydww%e^2MrfTBjg_!Q5zB1{hHtS3^Z0;+6thcnfOBj)K9e|xYU z*n&nB>8X^#QU`}j*^nO?)u1)3!qtn$dl+|YWc!>MiBYACcKbjPRybQc%Bi@YPa}tv zlPsWSp?ysM2oI<_ZE3$RDR;6p3M(<^twa8qq9fnWcWt$Nhz!rIx1v2OcHQxJ-A6H-igkNWzEo07CHbp*Qx@ZwLh18;JeNw zy5jset)UT^nYU?GzzZH9y+XzyuW$Ttp9%Vty)O;~nmteY9-_m1=X-znW7pIR<_PDd zKn#2*G1p0wt3MHOloDly`KtpAVxFc-p2X%LLbXXfYBkHA+4g01@U@Rks(t_dJ`#M> z2QeRFEqYZNjw7<_u^)VWqNIg@WZs;h!~qqMSu_l!(N}*dn1mFrZ!Ubc^o0x5!#lu8 zBfd!ZK}Isg(n)sfomNj9b1SB}IgjnVJWbZ=8Ptts4MhPG#(Hd)D9fg5d0M=w3bE`$ zdsQLs_|7w_8xQz0l%KJi`zuJ(HjYo`%|Ja%6utJdyHQ=aHl@>Z#&fls%vD;yY%4W` z?J=d}ThqT~tA_a2S!#%5k330Lgr;u9ebT&MLy(RsRi; z%0{X-rZH8knNGj9q5g}aod4s*{{OPn=YOl$GJaSaWhC5nA<{wC3`tzZ{sa4Asv^PXeL|`(0rgJ zJ2XgaAm=inu&97}^UGR9V^c_ATD`UEYO#zJ zO-i_#X;W8<(YGn>Hh&{z>Ujlxsn6nZ$(ULOK=6=1AddPXtiGVIP7+RyQn_P3^c%#t z_Y#0w72FawxTuv|@0XPK`mr?`rB8KwS|MW}#G4*_D!+niZk4aCPQM5Q=~Tl~QX#~+ zgpW&oS*?w{)ytDq%;5A1rp5m6%y9O!`HuI+*$>iI;aT z_Pu%B5LZAXjgYm^|4&AcM}f#ve!y{>Vg?g;6rCG zdJA#urgQ~Pw9Pk>|x9VN*V6H6KTEW8mj?7;$t8b_L@k;Ig9REfx zdrh~LpwzaQK4Q%qVni4Kgt6!bw?}sNgB_K`*;{*$2lzNr^q=Z~lkBZ&d>;DbRbcGl z9sa6oGv|Xz+^R1WKTf`mFvqU8@|vgQ{;9I>1i{aEB2AJuUW@HHnt#2%2op=Zfu+U- zHythz{>*HOx6$zm&U6w6an*HqsQt`@%=-csRBmgM$`oRau42fb;H;L;jqooz!J6j@ zVp+$qyJy}_VT|o?o@57?zDJPea?|;)inmK^wa)zQW>E5Rv{3cW9{nPt+nE)xMW6kF zl`Ad+uZImu9j?zQq1^^pn9V?718}KsKBGHqvtS{#Nf{KK%im_(gdF`N>}Q4+D4H7M z2xwo8mb7VhT-)mo`=kN;>t7>%FqJ8Z=L%TtHjh8NiUS{s=7K&fC%H0iH}=MZlSXQ! z4V&KvhjM`>ajUwfsHuBSEUzES zKD5e*(1ytjFAHKFPf^XhTPwrunS-fZ`%&cDr2o9KU)>SQCwqYxU`Wn@vue|Z{)jvY z`@{#4n82I9Fw1P78vT;Zi*D?&vvvQVU~n#64HwHlK5QtCG9>=+lBm7p0I_e*o;m4N zPn%k|lX5JI$%*Zbcut)`v}C7Vk)AfDX)1n<1;Z9)q693W8jm6MC6h+>OP5>1x@PwZ zzif;JpN>$#2Ay*Ey7zEAPpCTppQC@mXW5Q7uu>KOLPkDAq8BM}=`X9uU6{=Hj z9rMdN8mds}NSDWKmT5$pPd!zunisZAG;EQ;7fi}s5SUxyq-CylrB(!EO^oKcM6QhY37i**ePeWW`>-PqZ!KxlV036Rx$sMi06;{4xxaSGRPZoc| zlay;jadlKYVSP)cd-~GAKX0`V+27UqK-I_ewu2gh6aRjjOTR@2raRvzauvwmkJ!f% zCVEFd35j%IaP0ko?|1iWmr>DMLLSLaQT1Id7R%lG3;6YaQ!V?yWkR<){(tP%L*yQs*)Lctd=UIfbm zrhDdU_7ELNH!*mJ$=J~BrTc#kqm(l^Ow8=j2!c~E!pcDWkVZZgNPGiYO`NgbG%{S8 z3bPAckhSZZ>nP6zZutEMVtG8-hf?-V1Zn&IQo#-`CUAMRT!B%Ir_ueSgQ&z0L7&Zr zZJXB!;!OdfRp1r?F9fETN?K{W{(iaeRP!Y*MyK`}Fhqg(s&TMO;Ow{pjmbZ;uTia^ zvahl6%7`sCRVvQzhVYfES0!W1kb!KUr}Md=uu63$G8ikXeh;i@<%COdc4shFFg`yZ z=gmadcrm%?(X(y}y9%o^G1W_Q+2orij<~%Yqr!W{K=7CQO+3ydzHDjrjGQ!AycZ}X z+Hb)OlinE<72L4KxZx6{Tl738>(KHsudkZ>_oKrXY7J17?h;I;tu{FfEB_P`^FXOH zPq>{za)~5>@xhE>S#6!X-X*isT~%gy+1B;ccBiY#9%A*3VFWQS%H9NUy_%&n=>%$w z{NV&)b=1{ytu^QjnY7VwKH>G(5G!oeR|pxMf!;r8VYn0?wsC?%zm(n;2oYR14m-Qj z!x>H=U^u4%lPl6_aG+DC(A6AAp4`{1;#N@U$ zg?XQ^?>~c;Qiojk4lrH;!;)LPGPThU1ASon&4Gk1q!YD`bo>UpA1uDkgum$V!HP;r z$hL-&rL8=)`&`r!)@_Q;Ei-_RS=$iTu0BvE*Ncj`54hNpkc$19v)G;7EsMdwXE8az z!@;!WF*tU{r;=Whv4bSn%?EA_BKn zyYN37ZbcXrjX0zCz~Pzu6qG6OUM~fkkvU-v{ADdJ6>*L_kC7peYI6(kPs57@hx(~icZw% zM+RSMznC26WyAw%-(2J!qdMX+SJhY6u$@_Xnpq+Cm5#UO=R>=j<|p+wJhV{g`K@u$@)VL*kK=~;)r$XsnL5Vl$@8rOp zoew;UTrO-W?t03LE59ItIiGLJyWH%LpOWx}0wcD3r&g?W!D-$Wc52vB zC-m`x(yxyy=$faU8{yQGd7DD?m0GZ96L_h~knCZ*E=W;)4lEF`7u0Q5jXYx@F4FyF zKs0Exue<~7)>s!T3R}Ep50?7_(_&|J-BS`X66;l5?!^t#h*6A>8q!npRu8CEltYjyjF4$*mj2Se$A*qArOTapDZ9FpnQiyn~ieB|BcOmNk6cy9X zI=OK{IC{ef{B2sO4}@CgxIa{w=76Z2+Qsq z_6eo9;jXJ*_bxFwL(j6L{-JtZx$jJTEvrcd;zN|%(GTSOvR57CfaRzub6M?maHc`^ zK>#hQmIdrmbAHVFA}WAk2JRxeO5ZJ3wULGqlCAwd;!~b)c0u(YsHfX`&+p95$S0+?rEcNLNh0YzmZt=IpD|TW*V`g(G)?@&jpa9D_q|=~?IG2oDv%-0>Q})Nbtb(T*NG-kSG7yXfVdo;@M2 zcge%Z<{gXcas0zvyb=g<_6#&(6Z$dj830+uC61(dg~&!c)lm_BEoZ^V`_8+R1YqT{ zw|vG|#1Nuy`N&DuNau3)P~#l8C%4z_aQ6)igtTTWwvM@`;h&?{?Gxl>_dRSgrfO-| z)F#x9Hz0Y3=5m^tQvadzc~S5hg4VZ%)TsB(QRrsT@=FzRPGcBjW(U;nr$rL{z$`0R zls%Mr$vUsb)z;T)lLvII*>lzJc@5JI&@v&7z)Xrjn9bmp1lvG?@TKxox$>B@Lm`LJ zi&lWApm?8RZ&lT+UCno91X7@)1wk3kL@U#Vrho?aD*f|Qy@Bi-AM5~ zVY%PR?lS3UrBmmhQaYMsj`P3@mSw$CV7+RM5UdTTnWI6!E=tUDu#d^{QNWu8pek0N>k*m-4{PZ(A?4uN`c*TdJbJT-xg`qasLHjN;lnfoCSYnGB+V998{y zRxP}XKlV|3{c+boysMb6u>^9WS9#kVs#Gvo{3*d>%|Mlxwe4=!p5t}U2y@?fdbl&S zLYvjww7R@0Cy>81NazbC(tC&l6VerLS|;-~ikDQmi%T@+!w!?w-`{tmF4QYa2X4kF zEp-_*r)cRqw|_Ade?>e3JAD|h{0S01_Pnk*ax*7AV(DR9i1N1u7J49j;m$Kn2ELCx z+}H6#L)Ix+e`zDQD7cy~$7TOiriYo*{V8*9Ehgbg$_OK`=KG5}_KI3AaZC;l_(r48 z=%$&M@~Nxu=D(1E>58^%tO%Zg*~Ou`Kdv)q{iQbP1Rb%^q1)bCVaxgU*PZZLpNm~V zyr9WJ2iD?in)ZE-p*UmSV~L4(OL%(_dGaVF;8~laN^EEVh89I$YGwNW<3Ba0sJd7s z0xajm`V>;Gq3ANB#e=hXde&XGV?%x_S5V$vyY53Ua0HZcF~8!jxv_P6XFvNa1NaR1 zc*9;k0v7P51cf%7OtbB!uQ6=+XBRvvMuZd{6W|J{@L+K4 zgDlGOv8HpawYAyywvuOlRF&8%4-?8;oO4AO)`?g+`NcR(cBCKrKDQqL-A~UHpF*9a zNgMPprkWVvPu$m}{j9VKJ8T9k;8$=-=n5!h0Ppvw#%!m7yRULBNZ~4N>&btVA=3eB zRP5)(l{jNePxF)p8{_C^){ z?P1yQg?9{%x`oOcZuU;U0l2YZ1pzIAMCP$A8tB@!g9eA1E>DF-kg*>Hw47~= znoJ$mtjw(IQ|NAzsMnO^s^6K?k_ff78<85C31KEGOJM=Hn)27?so_RNBQ-#ccz`gI zYAV#5@36@4YrPGOL{pNXy}uspiu#LAuicWtC3Y870hIjxctLE#7W~~`hRm<6_W2h0 zr1FJDWOf#Zh>VcQzA-^@g7{AbkogSvpMqjjwgIa&4_Fe{{gf`OW(tF|f{A{tc566kSWIR%8B~7ey13#M&69>3v}Gl zT5%vcp(S36ek$y=ym!uhT>$IvJvL8Qe^}dRxc7(Zs3F~L2Rk&q37iK-3eUEt2Z%_*juw4G^b7Nht*2GrFAaQh72O56PZQ5po<*wg=8ue-6Mo-*T=L(=b(9cJ#3;iPnOy zyZi*7xaW=O1l-Zgy2A~c<#YWpRb>od=4zNfdV_Rxc?@syu~hKTxr}}(04-g^vXMc; zHP$rS_m`wWl8BGJQEvlOP-f$yKOdVaX4y6rd+c_6<^cKeMu9bo-NH*%(n+VC2kyV^ z;!*dmqQ9ueAg-HxsK0yj8`40}ZA|n*aSNYr{bckmv64nC;-4thi)n{bB6tBt)m!19 z+7I4~D*OEBKivXmsameX_jFpW6607-X#$Kb<+{Myb2HSa?oI^6@+!~8vKvloK| z1%*A#cN@x26#IX&rDT2R%uUY^k6=f=okA?E1<7G zgcIfHZiM|5EE#WEPvq>A1ej_w1Rqr{BT7>PP_&08AQ&->^0K~O}JP~mE$zLo&SwO9)A zJJ(=B%H z&WTEgfpl|V%+}w+mrftff;V6F9jvlb1yVXqut-Try3Ra4w?C8?gh~AcnWE1!ulF;T zb>>TQJIdmMo-?>rJA*Pxy>@(`Q@$~fUrxe6QhxOan*3;&-XrbE%byMx>8?O9;C9ot zrhR#fN?!;2XfsHk_twA0^TGk9d2U7PU0BhoFzz4_W%h||tP>IY1IhPmSW?IslN?5+ zO@7~;8+sz$5!x47);HrD^-qbmje?{`@^Kx4775+`D0rIKm)+{AL$siBI8#o0``Twc z6KO*_;ng~_CJjS%y->WS?1_^izuh6F`%$g)1Xiu_ zjZf`oab6^$=XTUCa@`sb zLiBzI+uL{?;BnYJ-65=GnXt$3*W}K6>)!2+P*FVdd-S5I*uj0>*K0h{cmMkR{aBBY zO8+@WNR21q)$!lqlllC-@7XzC$7^!3I~op_{Svl}pG)X1{M=8+;#V3AuD>2_$hfDJ igP6A)f%kt3)tSi5HEkb1*xxgp9*wh?-uVybVGrK` literal 0 HcmV?d00001 diff --git a/tools/vendor/ceedling/plugins/report_tests_pretty_stdout/README.md b/tools/vendor/ceedling/plugins/report_tests_pretty_stdout/README.md new file mode 100644 index 00000000..a0a36898 --- /dev/null +++ b/tools/vendor/ceedling/plugins/report_tests_pretty_stdout/README.md @@ -0,0 +1,54 @@ +# Ceedling Plugin: Pretty Test Suite Console Report + +Prints to the console ($stdout) simple, readable test suite results. + +# Plugin Overview + +This plugin is intended to be the default option for formatting a test suite's +results when displayed at the console. It collects raw test results from the +individual test executables of your test suite and presents them in a more +readable summary form. + +# Setup + +Enable the plugin in your project.yml by adding `report_tests_pretty_stdout` to +the list of enabled plugins instead of any other `report_tests_*_stdout` +plugin. + +``` YAML +:plugins: + :enabled: + - report_tests_pretty_stdout +``` + +# Configuration + +No additional configuration is needed once the plugin is enabled. + +# Example Output + +```sh + > ceedling test:Model +``` + +``` +------------------- +FAILED TEST SUMMARY +------------------- +[test/TestModel.c] + Test: testInitShouldCallSchedulerAndTemperatureFilterInit + At line (21): "Function TaskScheduler_Init() called more times than expected." + +-------------------- +OVERALL TEST SUMMARY +-------------------- +TESTED: 1 +PASSED: 0 +FAILED: 1 +IGNORED: 0 + +--------------------- +BUILD FAILURE SUMMARY +--------------------- +Unit test failures. +``` diff --git a/tools/vendor/ceedling/plugins/stdout_pretty_tests_report/assets/template.erb b/tools/vendor/ceedling/plugins/report_tests_pretty_stdout/assets/template.erb similarity index 74% rename from tools/vendor/ceedling/plugins/stdout_pretty_tests_report/assets/template.erb rename to tools/vendor/ceedling/plugins/report_tests_pretty_stdout/assets/template.erb index 52b29f7f..609a43ec 100644 --- a/tools/vendor/ceedling/plugins/stdout_pretty_tests_report/assets/template.erb +++ b/tools/vendor/ceedling/plugins/report_tests_pretty_stdout/assets/template.erb @@ -20,11 +20,11 @@ [<%=ignore[:source][:file]%>] % ignore[:collection].each do |item| Test: <%=item[:test]%> -% if (not item[:message].empty?) +% if (not item[:message].empty?) At line (<%=item[:line]%>): "<%=item[:message]%>" -% else +% else At line (<%=item[:line]%>) -% end +% end % end % end @@ -34,19 +34,23 @@ % hash[:results][:failures].each do |failure| [<%=failure[:source][:file]%>] % failure[:collection].each do |item| +% header = "At line (#{item[:line]}):" Test: <%=item[:test]%> -% if (not item[:message].empty?) - At line (<%=item[:line]%>): "<%=item[:message]%>" -% else - At line (<%=item[:line]%>) -% end +% if (not item[:message].empty?) +% # Cause multline error messages to wrap with indentation aligned with line header +% msg = item[:message].split("\n").enum_for(:each_with_index).map{|line,i| ((i >= 1) ? (' ' * (header.size + 3)) : '') + line}.join("\n") + <%=header%> "<%=msg%>" +% else + <%=header%> +% end % end % end % end % total_string = hash[:results][:counts][:total].to_s % format_string = "%#{total_string.length}i" -<%=@ceedling[:plugin_reportinator].generate_banner(header_prepend + 'OVERALL TEST SUMMARY')%> +% decorator = (failed > 0) ? LogLabels::FAIL : LogLabels::PASS +<%=@ceedling[:plugin_reportinator].generate_banner(header_prepend + @loginator.decorate('OVERALL TEST SUMMARY', decorator))%> % if (hash[:results][:counts][:total] > 0) TESTED: <%=hash[:results][:counts][:total].to_s%> PASSED: <%=sprintf(format_string, hash[:results][:counts][:passed])%> diff --git a/tools/vendor/ceedling/plugins/report_tests_pretty_stdout/config/report_tests_pretty_stdout.yml b/tools/vendor/ceedling/plugins/report_tests_pretty_stdout/config/report_tests_pretty_stdout.yml new file mode 100644 index 00000000..399c3d58 --- /dev/null +++ b/tools/vendor/ceedling/plugins/report_tests_pretty_stdout/config/report_tests_pretty_stdout.yml @@ -0,0 +1,11 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + +--- +:plugins: + # tell Ceedling we got results display taken care of + :display_raw_test_results: FALSE diff --git a/tools/vendor/ceedling/plugins/report_tests_pretty_stdout/lib/report_tests_pretty_stdout.rb b/tools/vendor/ceedling/plugins/report_tests_pretty_stdout/lib/report_tests_pretty_stdout.rb new file mode 100644 index 00000000..992949e5 --- /dev/null +++ b/tools/vendor/ceedling/plugins/report_tests_pretty_stdout/lib/report_tests_pretty_stdout.rb @@ -0,0 +1,73 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + +require 'ceedling/plugin' +require 'ceedling/defaults' + +class ReportTestsPrettyStdout < Plugin + + # `Plugin` setup() + def setup + @result_list = [] + @mutex = Mutex.new + + # Fetch the test results template for this plugin + template = @ceedling[:file_wrapper].read( File.join( @plugin_root_path, 'assets/template.erb' ) ) + + # Set the report template + @ceedling[:plugin_reportinator].register_test_results_template( template ) + end + + # `Plugin` build step hook -- collect result file paths after each test fixture execution + def post_test_fixture_execute(arg_hash) + # Thread-safe manipulation since test fixtures can be run in child processes + # spawned within multiple test execution threads. + @mutex.synchronize do + @result_list << arg_hash[:result_file] + end + end + + # `Plugin` build step hook -- render a report immediately upon build completion (that invoked tests) + def post_build() + # Ensure a test task was invoked as part of the build + return if not (@ceedling[:task_invoker].test_invoked?) + + results = @ceedling[:plugin_reportinator].assemble_test_results( @result_list ) + hash = { + :header => '', + :results => results + } + + @ceedling[:plugin_reportinator].run_test_results_report(hash) do + message = '' + message = 'Unit test failures.' if (results[:counts][:failed] > 0) + message + end + end + + # `Plugin` build step hook -- render a test results report on demand using results from a previous build + def summary() + # Build up the list of passing results from all tests + result_list = @ceedling[:file_path_utils].form_pass_results_filelist( + PROJECT_TEST_RESULTS_PATH, + COLLECTION_ALL_TESTS + ) + + hash = { + :header => '', + # Collect all existing test results (success or failing) in the filesystem, + # limited to our test collection + :results => @ceedling[:plugin_reportinator].assemble_test_results( + result_list, + {:boom => false} + ) + } + + @ceedling[:plugin_reportinator].run_test_results_report( hash ) + end + +end diff --git a/tools/vendor/ceedling/plugins/report_tests_raw_output_log/README.md b/tools/vendor/ceedling/plugins/report_tests_raw_output_log/README.md new file mode 100644 index 00000000..560d4b11 --- /dev/null +++ b/tools/vendor/ceedling/plugins/report_tests_raw_output_log/README.md @@ -0,0 +1,50 @@ +# Ceedling Plugin: Raw Test Output Logs + +Capture extra console output — typically `printf()`-style statements — from +test cases to log files. + +# Plugin Overview + +This plugin gathers and filters console output from test executables into log +files. Though not required, it is usually used in addition to the +`report_tests_*_stdout` plugins that gather and format test results for display +at the console. + +Debugging in unit tested code is often accomplished with simple `printf()`- +style calls to dump information to the console. This plugin's log files can be +helpful in supporting debugging efforts or quality validation. + +## Test executable output + +Ceedling and Unity cooperate to extract console statements from test executable +runs. Unity-based test executables print test case pass/fail status messages +and test case accounting to the console ($stdout). + +Ceedling and various reporting plugins gather all this, including unrecognized +output, to format it and present summaries at the console. + +This plugin captures the unrecognized output to log files. + +## Log files + +Log files are only created if test executables produce console output apart from +expected Unity test results as described above. Log files are named for the +respective test executables. + +Builds are differentiated by build context — `test`, `release`, or +plugin-modified build (e.g. `gcov`). Log files are written to `/artifacts//.raw.log`. + +# Setup + +Enable the plugin in your Ceedling project: + +``` YAML +:plugins: + :enabled: + - report_tests_raw_output_log +``` + +# Configuration + +No additional configuration is needed once the plugin is enabled. \ No newline at end of file diff --git a/tools/vendor/ceedling/plugins/report_tests_raw_output_log/lib/report_tests_raw_output_log.rb b/tools/vendor/ceedling/plugins/report_tests_raw_output_log/lib/report_tests_raw_output_log.rb new file mode 100644 index 00000000..a1fd89ac --- /dev/null +++ b/tools/vendor/ceedling/plugins/report_tests_raw_output_log/lib/report_tests_raw_output_log.rb @@ -0,0 +1,129 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + +require 'ceedling/plugin' +require 'ceedling/constants' + +class ReportTestsRawOutputLog < Plugin + # `Plugin` setup() + def setup + # @raw_output hash with default values + @raw_output = {} + + # Ceedling can run with multiple threads, provide a lock to use around @raw_output + @mutex = Mutex.new() + + # Convenient instance variable references + @file_wrapper = @ceedling[:file_wrapper] + @loginator = @ceedling[:loginator] + @reportinator = @ceedling[:reportinator] + end + + # `Plugin` build step hook + def post_test_fixture_execute(arg_hash) + output = extract_output( arg_hash[:shell_result][:output] ) + + # Bail out early + return if output.empty? + + # After test fixture execution, parse output, store any raw console statements + @mutex.synchronize do + process_output( + arg_hash[:context], + arg_hash[:test_name], + output, + @raw_output + ) + end + end + + # `Plugin` build step hook + def post_build() + # Write collected raw output to log(s) + write_logs( @raw_output ) + end + + # `Plugin` build step hook + def post_error() + # Write collected raw output to log(s) + write_logs( @raw_output ) + end + + ### Private ### + + private + + # Pick apart test executable console output to find any lines not specific to a test case + def extract_output(raw_output) + output = [] + + raw_output.each_line do |line| + # Skip blank lines + next if line =~ /^\s*\n$/ + + # Skip test case reporting lines + next if line =~ /^.+:\d+:.+:(IGNORE|PASS|FAIL)/ + + # Return early if we get to test results summary footer + return output if line =~/^-+\n$/ + + # Capture all other console output from the test runner, including `printf()`-style debugging statements + output << line + end + + return output + end + + # Store raw output messages to hash in thread-safe manner + def process_output(context, test, output, hash) + # Store warning message + hash[context] = {} if hash[context].nil? + hash[context][test] = output + end + + def write_logs(hash) + msg = @reportinator.generate_heading( "Running Raw Tests Output Report" ) + @loginator.log( msg ) + + empty = false + + @mutex.synchronize { empty = hash.empty? } + + if empty + @loginator.log( "Tests produced no extra console output.\n" ) + return + end + + @mutex.synchronize do + hash.each do |context, tests| + tests.each do |test, output| + log_filepath = form_log_filepath( context, test ) + + msg = @reportinator.generate_progress( "Generating artifact #{log_filepath}" ) + @loginator.log( msg ) + + File.open( log_filepath, 'w' ) do |f| + output.each { |line| f << line } + end + end + end + end + + # White space at command line after progress messages + @loginator.log( '' ) + end + + def form_log_filepath(context, test) + path = File.join( PROJECT_BUILD_ARTIFACTS_ROOT, context.to_s ) + filepath = File.join(path, test + '.raw.log') + + # Ensure containing artifact directory exists + @file_wrapper.mkdir( path ) + + return filepath + end +end diff --git a/tools/vendor/ceedling/plugins/report_tests_teamcity_stdout/README.md b/tools/vendor/ceedling/plugins/report_tests_teamcity_stdout/README.md new file mode 100644 index 00000000..82204db0 --- /dev/null +++ b/tools/vendor/ceedling/plugins/report_tests_teamcity_stdout/README.md @@ -0,0 +1,94 @@ +# Ceedling Plugin: TeamCity Test Suite Console Report + +Prints to the console ($stdout) test suite build events and results in a format understood by the CI product TeamCity. + +# Plugin Overview + +This plugin is intended to be used within [TeamCity] Continuous Integration +(CI) builds. It processes Ceedling test suites and executable output into +TeamCity [service messages][service-messages]. Service messages are a specially +formatted type of log output that a TeamCity build server picks out of build +output to collect progress and metrics of various sorts. + +Typically, this plugin is used only in CI builds. Its output is unhelpful in +development builds locally. See the [Configuration](#configuration) section for +options on enabling the build in CI but disabling it locally. + +[TeamCity]: https://www.jetbrains.com/teamcity/ +[service-messages]: +https://www.jetbrains.com/help/teamcity/service-messages.html + +# Setup + +Enable the plugin in your Ceedling project file by adding +`report_tests_teamcity_stdout`. + +``` YAML +:plugins: + :enabled: + - report_tests_teamcity_stdout +``` + +# Configuration + +All the `report_tests_*_stdout` plugins may be enabled in various combinations. +But, some combinations may not make a great deal of sense. The TeamCity +plugin “plays nice” with all the others but is generally most appropriate +running in a CI build on a TeamCity server. Its output will clutter and obscure +console logging at a local development environment command line. + +You may enable the TeamCity plugin (above) but disable its operation using the +following. + +```YAML +:teamcity: + :build: FALSE +``` + +This may seem silly, right? Why enable the plugin and then disable it, +cancelling it out? The answer has to do with _where_ you use the second YAML +blurb configuration setting. + +Ceedling provides Mixins for applying configurations settings on top of your +base project configuraiton file. +See the [Mixins documentation][ceedling-mixins] for full details. + +[ceedling-mixins]: ../docs/CeedlingPacket.md#base-project-configuration-file-mixins-section-entries + +As an example, you might enable the plugin in the main project file that is +committed to your repository while disabling the plugin in your local user +project file that is ignored by your repository. In this way, the plugin would +run on a TeamCity build server but not in your local development environment. + +# Example Output + +TeamCity's convention for identifying tests uses the naming convention of the +underlying Java language in which TeamCity is written, +`package_or_namespace.ClassName.TestName`. + +This plugin maps Ceedling conventions to TeamCity test service messages as +`context.TestFilepath.TestCaseName`. + +* `context` Your build's context defaults to `test`. Certain other test build + plugins (e.g. GCov) provide a different context (`gcov`) for test builds, + generally named after themselves. +* `TestFilepath` This identifier is the relative filepath of the relevant test + file without a file extension (e.g. no `.c`). +* `TestCaseName` This identifier is a test case function name within a Ceedling test file. + +```sh + > ceedling test:UsartModel +``` + +``` +##teamcity[testSuiteStarted name='TestUsartModel' flowId='15'] +##teamcity[testStarted name='test.test/TestUsartModel.testGetBaudRateRegisterSettingShouldReturnAppropriateBaudRateRegisterSetting' flowId='15'] +##teamcity[testFinished name='test.test/TestUsartModel.testGetBaudRateRegisterSettingShouldReturnAppropriateBaudRateRegisterSetting' duration='81' flowId='15'] +##teamcity[testStarted name='test.test/TestUsartModel.testShouldReturnErrorMessageUponInvalidTemperatureValue' flowId='15'] +##teamcity[testFinished name='test.test/TestUsartModel.testShouldReturnErrorMessageUponInvalidTemperatureValue' duration='81' flowId='15'] +##teamcity[testStarted name='test.test/TestUsartModel.testGetFormattedTemperatureFormatsTemperatureFromCalculatorAppropriately' flowId='15'] +##teamcity[testFailed name='test.test/TestUsartModel.testGetFormattedTemperatureFormatsTemperatureFromCalculatorAppropriately' message='Function TemperatureFilter_GetTemperatureInCelcius() called more times than expected.' details='File: test/TestUsartModel.c Line: 25' flowId='15'] +##teamcity[testFinished name='test.test/TestUsartModel.testGetFormattedTemperatureFormatsTemperatureFromCalculatorAppropriately' duration='81' flowId='15'] +##teamcity[testIgnored name='test.test/TestUsartModel.testShouldReturnWakeupMessage' flowId='15'] +##teamcity[testSuiteFinished name='TestUsartModel' flowId='15'] +``` diff --git a/tools/vendor/ceedling/plugins/report_tests_teamcity_stdout/config/defaults.yml b/tools/vendor/ceedling/plugins/report_tests_teamcity_stdout/config/defaults.yml new file mode 100644 index 00000000..83124442 --- /dev/null +++ b/tools/vendor/ceedling/plugins/report_tests_teamcity_stdout/config/defaults.yml @@ -0,0 +1,12 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + +--- +:teamcity: + # Override to FALSE in user, local project options to prevent CI $stdout messages + :build: TRUE +... \ No newline at end of file diff --git a/tools/vendor/ceedling/plugins/report_tests_teamcity_stdout/config/report_tests_teamcity_stdout.yml b/tools/vendor/ceedling/plugins/report_tests_teamcity_stdout/config/report_tests_teamcity_stdout.yml new file mode 100644 index 00000000..399c3d58 --- /dev/null +++ b/tools/vendor/ceedling/plugins/report_tests_teamcity_stdout/config/report_tests_teamcity_stdout.yml @@ -0,0 +1,11 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + +--- +:plugins: + # tell Ceedling we got results display taken care of + :display_raw_test_results: FALSE diff --git a/tools/vendor/ceedling/plugins/report_tests_teamcity_stdout/lib/report_tests_teamcity_stdout.rb b/tools/vendor/ceedling/plugins/report_tests_teamcity_stdout/lib/report_tests_teamcity_stdout.rb new file mode 100644 index 00000000..c2678906 --- /dev/null +++ b/tools/vendor/ceedling/plugins/report_tests_teamcity_stdout/lib/report_tests_teamcity_stdout.rb @@ -0,0 +1,163 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + +require 'ceedling/plugin' +require 'ceedling/defaults' + +class ReportTestsTeamcityStdout < Plugin + + # `Plugin` setup() + def setup + # TEAMCITY_BUILD defaults to true but can be overridden in a user + # project file to stop CI messages locally. + @output_enabled = TEAMCITY_BUILD + + # Provide thread-safety for multi-threaded builds + @mutex = Mutex.new + + # A counter incremented for each Ceedling test executable allowing + # concurrent executables to differentiate their service messages. + @flowid_count = 0 + + # A TeamCity suite correlates to a Ceedling test executable + # This hash relates each test filepath to a unique Flow ID + # (TeamCity uses Flow IDs to differentiate messages generated in concurrent threads) + @suites = {} + end + + # `Plugin` build step hook + def pre_test(test) + return if !@output_enabled + + # Generate a new Flow ID and store it in test hash + @mutex.synchronize do + @flowid_count += 1 + @suites[test] = { :flowid => @flowid_count } + end + + # Generate first TeamCity service message + @mutex.synchronize do + teamcity_service_message( + "testSuiteStarted name='#{File.basename(test, '.*')}'", + @suites[test][:flowid] + ) + end + end + + # `Plugin` build step hook + def post_test_fixture_execute(arg_hash) + return if !@output_enabled + + flowId = nil + test_key = arg_hash[:test_filepath] + + # Get unique Flow ID + @mutex.synchronize do + flowId = @suites[test_key][:flowid] + end + + # Gather test results for this test executable + results = @ceedling[:plugin_reportinator].assemble_test_results( [arg_hash[:result_file]] ) + + # Apportion total run time of test executable equally to each test case within it. + duration_ms = results[:total_time] * 1000.0 + avg_duration = (duration_ms / [1, results[:counts][:passed] + results[:counts][:failed]].max).round + + context = arg_hash[:context] + + # Handle test case successes within the test executable + results[:successes].each do |success| + filepath = File.join( success[:source][:dirname], File.basename( success[:source][:basename], '.*' ) ) + + # puts(success) + success[:collection].each do |test| + _test = test[:test] + + # Create Java-like name per TeamCity convention `package_or_namespace.ClassName.TestName` + # ==> `context.TestFilepath.TestCaseName` + teamcity_service_message( + "testStarted name='#{context}.#{filepath}.#{_test}'", + flowId + ) + + teamcity_service_message( + "testFinished name='#{context}.#{filepath}.#{_test}' duration='#{avg_duration}'", + flowId + ) + end + end + + # Handle test case failures within the test executable + results[:failures].each do |failure| + failure[:collection].each do |test| + filepath = File.join( failure[:source][:dirname], File.basename( failure[:source][:basename], '.*' ) ) + + _test = test[:test] + _message = test[:message] + + teamcity_service_message( + "testStarted name='#{context}.#{filepath}.#{_test}'", + flowId + ) + + # Create Java-like name per TeamCity convention `package_or_namespace.ClassName.TestName` + # ==> `context.TestFilepath.TestCaseName` + _message = + "testFailed name='#{context}.#{filepath}.#{_test}' " + + "message='#{escape(_message)}' " + + "details='File: #{failure[:source][:file]} Line: #{test[:line]}'" + + teamcity_service_message( _message, flowId ) + + teamcity_service_message( + "testFinished name='#{context}.#{filepath}.#{_test}' duration='#{avg_duration}'", + flowId + ) + end + end + + # Handle ignored tests + results[:ignores].each do |ignored| + ignored[:collection].each do |test| + filepath = File.join( ignored[:source][:dirname], File.basename( ignored[:source][:basename], '.*' ) ) + _test = test[:test] + + service_message = "testIgnored name='#{context}.#{filepath}.#{_test}'" + + teamcity_service_message( service_message, flowId ) + end + end + + end + + # `Plugin` build step hook + def post_test(test) + return if !@output_enabled + + @mutex.synchronize do + teamcity_service_message( + "testSuiteFinished name='#{File.basename(test, '.*')}'", + @suites[test][:flowid] + ) + end + end + + ### Private + + private + + def escape(string) + # https://www.jetbrains.com/help/teamcity/service-messages.html#Escaped+Values + string.gsub(/['|\[\]]/, '|\0').gsub('\r', '|r').gsub('\n', '|n') + end + + def teamcity_service_message(content, flowId=0) + # https://www.jetbrains.com/help/teamcity/service-messages.html + puts "##teamcity[#{content} flowId='#{flowId}']" + end + +end diff --git a/tools/vendor/ceedling/plugins/stdout_gtestlike_tests_report/README.md b/tools/vendor/ceedling/plugins/stdout_gtestlike_tests_report/README.md deleted file mode 100644 index 9ab60847..00000000 --- a/tools/vendor/ceedling/plugins/stdout_gtestlike_tests_report/README.md +++ /dev/null @@ -1,19 +0,0 @@ -ceedling-stdout-gtestlike-tests-report -====================== - -## Overview - -The stdout_gtestlike_tests_report replaces the normal ceedling "pretty" output with -a variant that resembles the output of gtest. This is most helpful when trying to -integrate into an IDE or CI that is meant to work with google test. - -## Setup - -Enable the plugin in your project.yml by adding `stdout_gtestlike_tests_report` -to the list of enabled plugins. - -``` YAML -:plugins: - :enabled: - - stdout_gtestlike_tests_report -``` diff --git a/tools/vendor/ceedling/plugins/stdout_gtestlike_tests_report/assets/template.erb copy b/tools/vendor/ceedling/plugins/stdout_gtestlike_tests_report/assets/template.erb copy deleted file mode 100644 index a90f495e..00000000 --- a/tools/vendor/ceedling/plugins/stdout_gtestlike_tests_report/assets/template.erb copy +++ /dev/null @@ -1,59 +0,0 @@ -% ignored = hash[:results][:counts][:ignored] -% failed = hash[:results][:counts][:failed] -% stdout_count = hash[:results][:counts][:stdout] -% header_prepend = ((hash[:header].length > 0) ? "#{hash[:header]}: " : '') -% banner_width = 25 + header_prepend.length # widest message - - -% if (stdout_count > 0) -[==========] Running <%=hash[:results][:counts][:total].to_s%> tests from <%=hash[:results][:stdout].length.to_s%> test cases. -[----------] Global test environment set-up. -% end -% if (failed > 0) -% hash[:results][:failures].each do |failure| -[----------] <%=failure[:collection].length.to_s%> tests from <%=failure[:source][:file]%> -% failure[:collection].each do |item| -[ RUN ] <%=failure[:source][:file]%>.<%=item[:test]%> -% if (not item[:message].empty?) -<%=failure[:source][:file]%>(<%=item[:line]%>): error: <%=item[:message]%> - -% m = item[:message].match(/Expected\s+(.*)\s+Was\s+([^\.]*)\./) -% if m.nil? - Actual: FALSE - Expected: TRUE -% else - Actual: <%=m[2]%> - Expected: <%=m[1]%> -% end -% else -<%=failure[:source][:file]%>(<%=item[:line]%>): fail: <%=item[:message]%> - Actual: FALSE - Expected: TRUE -% end -[ FAILED ] <%=failure[:source][:file]%>.<%=item[:test]%> (0 ms) -% end -[----------] <%=failure[:collection].length.to_s%> tests from <%=failure[:source][:file]%> (0 ms total) -% end -% end -% if (hash[:results][:counts][:total] > 0) -[----------] Global test environment tear-down. -[==========] <%=hash[:results][:counts][:total].to_s%> tests from <%=hash[:results][:stdout].length.to_s%> test cases ran. -[ PASSED ] <%=hash[:results][:counts][:passed].to_s%> tests. -% if (failed == 0) -[ FAILED ] 0 tests. - - 0 FAILED TESTS -% else -[ FAILED ] <%=failed.to_s%> tests, listed below: -% hash[:results][:failures].each do |failure| -% failure[:collection].each do |item| -[ FAILED ] <%=failure[:source][:file]%>.<%=item[:test]%> -% end -% end - - <%=failed.to_s%> FAILED TESTS -% end -% else - -No tests executed. -% end diff --git a/tools/vendor/ceedling/plugins/stdout_gtestlike_tests_report/config/stdout_gtestlike_tests_report.yml b/tools/vendor/ceedling/plugins/stdout_gtestlike_tests_report/config/stdout_gtestlike_tests_report.yml deleted file mode 100644 index c25acf51..00000000 --- a/tools/vendor/ceedling/plugins/stdout_gtestlike_tests_report/config/stdout_gtestlike_tests_report.yml +++ /dev/null @@ -1,4 +0,0 @@ ---- -:plugins: - # tell Ceedling we got results display taken care of - :display_raw_test_results: FALSE diff --git a/tools/vendor/ceedling/plugins/stdout_gtestlike_tests_report/lib/stdout_gtestlike_tests_report.rb b/tools/vendor/ceedling/plugins/stdout_gtestlike_tests_report/lib/stdout_gtestlike_tests_report.rb deleted file mode 100644 index a51438a3..00000000 --- a/tools/vendor/ceedling/plugins/stdout_gtestlike_tests_report/lib/stdout_gtestlike_tests_report.rb +++ /dev/null @@ -1,43 +0,0 @@ -require 'ceedling/plugin' -require 'ceedling/defaults' - -class StdoutGtestlikeTestsReport < Plugin - - def setup - @result_list = [] - @plugin_root = File.expand_path(File.join(File.dirname(__FILE__), '..')) - template = @ceedling[:file_wrapper].read(File.join(@plugin_root, 'assets/template.erb')) - @ceedling[:plugin_reportinator].register_test_results_template( template ) - end - - def post_test_fixture_execute(arg_hash) - return if not (arg_hash[:context] == TEST_SYM) - - @result_list << arg_hash[:result_file] - end - - def post_build - return if not (@ceedling[:task_invoker].test_invoked?) - - results = @ceedling[:plugin_reportinator].assemble_test_results(@result_list) - hash = { - :header => '', - :results => results - } - - @ceedling[:plugin_reportinator].run_test_results_report(hash) - end - - def summary - result_list = @ceedling[:file_path_utils].form_pass_results_filelist( PROJECT_TEST_RESULTS_PATH, COLLECTION_ALL_TESTS ) - - # get test results for only those tests in our configuration and of those only tests with results on disk - hash = { - :header => '', - :results => @ceedling[:plugin_reportinator].assemble_test_results(result_list, {:boom => false}) - } - - @ceedling[:plugin_reportinator].run_test_results_report(hash) - end - -end diff --git a/tools/vendor/ceedling/plugins/stdout_ide_tests_report/README.md b/tools/vendor/ceedling/plugins/stdout_ide_tests_report/README.md deleted file mode 100644 index ed6c6558..00000000 --- a/tools/vendor/ceedling/plugins/stdout_ide_tests_report/README.md +++ /dev/null @@ -1,18 +0,0 @@ -ceedling-stdout-ide-tests-report -================================ - -## Overview - -The stdout_ide_tests_report replaces the normal ceedling "pretty" output with -a simplified variant intended to be easily parseable. - -## Setup - -Enable the plugin in your project.yml by adding `stdout_ide_tests_report` -to the list of enabled plugins. - -``` YAML -:plugins: - :enabled: - - stdout_ide_tests_report -``` diff --git a/tools/vendor/ceedling/plugins/stdout_ide_tests_report/config/stdout_ide_tests_report.yml b/tools/vendor/ceedling/plugins/stdout_ide_tests_report/config/stdout_ide_tests_report.yml deleted file mode 100644 index c25acf51..00000000 --- a/tools/vendor/ceedling/plugins/stdout_ide_tests_report/config/stdout_ide_tests_report.yml +++ /dev/null @@ -1,4 +0,0 @@ ---- -:plugins: - # tell Ceedling we got results display taken care of - :display_raw_test_results: FALSE diff --git a/tools/vendor/ceedling/plugins/stdout_ide_tests_report/lib/stdout_ide_tests_report.rb b/tools/vendor/ceedling/plugins/stdout_ide_tests_report/lib/stdout_ide_tests_report.rb deleted file mode 100644 index 48b3e819..00000000 --- a/tools/vendor/ceedling/plugins/stdout_ide_tests_report/lib/stdout_ide_tests_report.rb +++ /dev/null @@ -1,44 +0,0 @@ -require 'ceedling/plugin' -require 'ceedling/defaults' - -class StdoutIdeTestsReport < Plugin - - def setup - @result_list = [] - end - - def post_test_fixture_execute(arg_hash) - return if not (arg_hash[:context] == TEST_SYM) - - @result_list << arg_hash[:result_file] - end - - def post_build - return if (not @ceedling[:task_invoker].test_invoked?) - - results = @ceedling[:plugin_reportinator].assemble_test_results(@result_list) - hash = { - :header => '', - :results => results - } - - @ceedling[:plugin_reportinator].run_test_results_report(hash) do - message = '' - message = 'Unit test failures.' if (hash[:results][:counts][:failed] > 0) - message - end - end - - def summary - result_list = @ceedling[:file_path_utils].form_pass_results_filelist( PROJECT_TEST_RESULTS_PATH, COLLECTION_ALL_TESTS ) - - # get test results for only those tests in our configuration and of those only tests with results on disk - hash = { - :header => '', - :results => @ceedling[:plugin_reportinator].assemble_test_results(result_list, {:boom => false}) - } - - @ceedling[:plugin_reportinator].run_test_results_report(hash) - end - -end diff --git a/tools/vendor/ceedling/plugins/stdout_pretty_tests_report/README.md b/tools/vendor/ceedling/plugins/stdout_pretty_tests_report/README.md deleted file mode 100644 index 7e1be238..00000000 --- a/tools/vendor/ceedling/plugins/stdout_pretty_tests_report/README.md +++ /dev/null @@ -1,20 +0,0 @@ -ceedling-pretty-tests-report -============================ - -## Overview - -The stdout_pretty_tests_report is the default output of ceedling. Instead of -showing most of the raw output of CMock, Ceedling, etc., it shows a simplified -view. It also creates a nice summary at the end of execution which groups the -results into ignored and failed tests. - -## Setup - -Enable the plugin in your project.yml by adding `stdout_pretty_tests_report` -to the list of enabled plugins. - -``` YAML -:plugins: - :enabled: - - stdout_pretty_tests_report -``` diff --git a/tools/vendor/ceedling/plugins/stdout_pretty_tests_report/config/stdout_pretty_tests_report.yml b/tools/vendor/ceedling/plugins/stdout_pretty_tests_report/config/stdout_pretty_tests_report.yml deleted file mode 100644 index c25acf51..00000000 --- a/tools/vendor/ceedling/plugins/stdout_pretty_tests_report/config/stdout_pretty_tests_report.yml +++ /dev/null @@ -1,4 +0,0 @@ ---- -:plugins: - # tell Ceedling we got results display taken care of - :display_raw_test_results: FALSE diff --git a/tools/vendor/ceedling/plugins/stdout_pretty_tests_report/lib/stdout_pretty_tests_report.rb b/tools/vendor/ceedling/plugins/stdout_pretty_tests_report/lib/stdout_pretty_tests_report.rb deleted file mode 100644 index bf1aa39b..00000000 --- a/tools/vendor/ceedling/plugins/stdout_pretty_tests_report/lib/stdout_pretty_tests_report.rb +++ /dev/null @@ -1,47 +0,0 @@ -require 'ceedling/plugin' -require 'ceedling/defaults' - -class StdoutPrettyTestsReport < Plugin - - def setup - @result_list = [] - @plugin_root = File.expand_path(File.join(File.dirname(__FILE__), '..')) - template = @ceedling[:file_wrapper].read(File.join(@plugin_root, 'assets/template.erb')) - @ceedling[:plugin_reportinator].register_test_results_template( template ) - end - - def post_test_fixture_execute(arg_hash) - #TODO CLEANUP return if not (arg_hash[:context] == TEST_SYM) - - @result_list << arg_hash[:result_file] - end - - def post_build - return if not (@ceedling[:task_invoker].test_invoked?) - - results = @ceedling[:plugin_reportinator].assemble_test_results(@result_list) - hash = { - :header => '', - :results => results - } - - @ceedling[:plugin_reportinator].run_test_results_report(hash) do - message = '' - message = 'Unit test failures.' if (results[:counts][:failed] > 0) - message - end - end - - def summary - result_list = @ceedling[:file_path_utils].form_pass_results_filelist( PROJECT_TEST_RESULTS_PATH, COLLECTION_ALL_TESTS ) - - # get test results for only those tests in our configuration and of those only tests with results on disk - hash = { - :header => '', - :results => @ceedling[:plugin_reportinator].assemble_test_results(result_list, {:boom => false}) - } - - @ceedling[:plugin_reportinator].run_test_results_report(hash) - end - -end diff --git a/tools/vendor/ceedling/plugins/subprojects/README.md b/tools/vendor/ceedling/plugins/subprojects/README.md deleted file mode 100644 index e51a4e60..00000000 --- a/tools/vendor/ceedling/plugins/subprojects/README.md +++ /dev/null @@ -1,63 +0,0 @@ -ceedling-subprojects -==================== - -Plugin for supporting subprojects that are built as static libraries. It continues to support -dependency tracking, without getting confused between your main project files and your -subproject files. It accepts different compiler flags and linker flags, allowing you to -optimize for your situation. - -First, you're going to want to add the extension to your list of known extensions: - -``` -:extension: - :subprojects: '.a' -``` - -Define a new section called :subprojects. There, you can list as many subprojects -as you may need under the :paths key. For each, you specify a unique place to build -and a unique name. - -``` -:subprojects: - :paths: - - :name: libprojectA - :source: - - ./subprojectA/first/dir - - ./subprojectA/second/dir - :include: - - ./subprojectA/include/dir - :build_root: ./subprojectA/build/dir - :defines: - - DEFINE_JUST_FOR_THIS_FILE - - AND_ANOTHER - - :name: libprojectB - :source: - - ./subprojectB/only/dir - :include: - - ./subprojectB/first/include/dir - - ./subprojectB/second/include/dir - :build_root: ./subprojectB/build/dir - :defines: [] #none for this one -``` - -You can specify the compiler and linker, just as you would a release build: - -``` -:tools: - :subprojects_compiler: - :executable: gcc - :arguments: - - -g - - -I"$": COLLECTION_PATHS_SUBPROJECTS - - -D$: COLLECTION_DEFINES_SUBPROJECTS - - -c "${1}" - - -o "${2}" - :subprojects_linker: - :executable: ar - :arguments: - - rcs - - ${2} - - ${1} -``` - -That's all there is to it! Happy Hacking! diff --git a/tools/vendor/ceedling/plugins/subprojects/config/defaults.yml b/tools/vendor/ceedling/plugins/subprojects/config/defaults.yml deleted file mode 100644 index 1045a595..00000000 --- a/tools/vendor/ceedling/plugins/subprojects/config/defaults.yml +++ /dev/null @@ -1,33 +0,0 @@ ---- -#:extension: -# :subprojects: '.a' - -:subprojects: - :paths: [] -# - :name: subprojectA -# :source: -# - ./first/subproject/dir -# - ./second/subproject/dir -# :include: -# - ./first/include/dir -# :build_root: ./subproject/build/dir -# :defines: -# - FIRST_DEFINE - -:tools: - :subprojects_compiler: - :executable: gcc - :arguments: - - -g - - -I"$": COLLECTION_PATHS_SUBPROJECTS - - -D$: COLLECTION_DEFINES_SUBPROJECTS - - -c "${1}" - - -o "${2}" - :subprojects_linker: - :executable: ar - :arguments: - - rcs - - ${2} - - ${1} - -... diff --git a/tools/vendor/ceedling/plugins/subprojects/lib/subprojects.rb b/tools/vendor/ceedling/plugins/subprojects/lib/subprojects.rb deleted file mode 100644 index 559251ed..00000000 --- a/tools/vendor/ceedling/plugins/subprojects/lib/subprojects.rb +++ /dev/null @@ -1,92 +0,0 @@ -require 'ceedling/plugin' -require 'ceedling/constants' - -SUBPROJECTS_ROOT_NAME = 'subprojects' -SUBPROJECTS_TASK_ROOT = SUBPROJECTS_ROOT_NAME + ':' -SUBPROJECTS_SYM = SUBPROJECTS_ROOT_NAME.to_sym - -class Subprojects < Plugin - - def setup - @plugin_root = File.expand_path(File.join(File.dirname(__FILE__), '..')) - - # Add to the test paths - SUBPROJECTS_PATHS.each do |subproj| - subproj[:source].each do |path| - COLLECTION_PATHS_TEST_SUPPORT_SOURCE_INCLUDE_VENDOR << path - end - subproj[:include].each do |path| - COLLECTION_PATHS_TEST_SUPPORT_SOURCE_INCLUDE_VENDOR << path - end - end - - # Gather information about the subprojects - @subprojects = {} - @subproject_lookup_by_path = {} - SUBPROJECTS_PATHS.each do |subproj| - @subprojects[ subproj[:name] ] = subproj.clone - @subprojects[ subproj[:name] ][:c] = [] - @subprojects[ subproj[:name] ][:asm] = [] - subproj[:source].each do |path| - search_path = "#{path[-1].match(/\\|\//) ? path : "#{path}/"}*#{EXTENSION_SOURCE}" - @subprojects[ subproj[:name] ][:c] += Dir[search_path] - if (EXTENSION_ASSEMBLY && !EXTENSION_ASSEMBLY.empty?) - search_path = "#{path[-1].match(/\\|\//) ? path : "#{path}/"}*#{EXTENSION_ASSEMBLY}" - @subprojects[ subproj[:name] ][:asm] += Dir[search_path] - end - end - @subproject_lookup_by_path[ subproj[:build_root] ] = subproj[:name] - end - end - - def find_my_project( c_file, file_type = :c ) - @subprojects.each_pair do |subprojname, subproj| - return subprojname if (subproj[file_type].include?(c_file)) - end - end - - def find_my_paths( c_file, file_type = :c ) - @subprojects.each_pair do |subprojname, subproj| - return (subproj[:source] + (subproj[:include] || [])) if (subproj[file_type].include?(c_file)) - end - return [] - end - - def find_my_defines( c_file, file_type = :c ) - @subprojects.each_pair do |subprojname, subproj| - return (subproj[:defines] || []) if (subproj[file_type].include?(c_file)) - end - return [] - end - - def list_all_object_files_for_subproject( lib_name ) - subproj = File.basename(lib_name, EXTENSION_SUBPROJECTS) - objpath = "#{@subprojects[subproj][:build_root]}/out/c" - bbb = @subprojects[subproj][:c].map{|f| "#{objpath}/#{File.basename(f,EXTENSION_SOURCE)}#{EXTENSION_OBJECT}" } - bbb - end - - def find_library_source_file_for_object( obj_name ) - cname = "#{File.basename(obj_name, EXTENSION_OBJECT)}#{EXTENSION_SOURCE}" - dname = File.dirname(obj_name)[0..-7] - pname = @subproject_lookup_by_path[dname] - return @ceedling[:file_finder].find_file_from_list(cname, @subprojects[pname][:c], :error) - end - - def find_library_assembly_file_for_object( obj_name ) - cname = "#{File.basename(obj_name, EXTENSION_OBJECT)}#{EXTENSION_ASEMBLY}" - dname = File.dirname(obj_name)[0..-7] - pname = @subproject_lookup_by_path[dname] - return @ceedling[:file_finder].find_file_from_list(cname, @subprojects[pname][:asm], :error) - end - - def replace_constant(constant, new_value) - Object.send(:remove_const, constant.to_sym) if (Object.const_defined? constant) - Object.const_set(constant, new_value) - end - -end - -# end blocks always executed following rake run -END { -} diff --git a/tools/vendor/ceedling/plugins/subprojects/subprojects.rake b/tools/vendor/ceedling/plugins/subprojects/subprojects.rake deleted file mode 100644 index 0025c3ec..00000000 --- a/tools/vendor/ceedling/plugins/subprojects/subprojects.rake +++ /dev/null @@ -1,78 +0,0 @@ - - -SUBPROJECTS_PATHS.each do |subproj| - - subproj_source = subproj[:source] - subproj_include = subproj[:include] - subproj_name = subproj[:name] - subproj_build_root = subproj[:build_root] - subproj_build_out = "#{subproj[:build_root]}/out" - subproj_build_c = "#{subproj[:build_root]}/out/c" - subproj_build_asm = "#{subproj[:build_root]}/out/asm" - subproj_directories = [ subproj_build_root, subproj_build_out, subproj_build_c, subproj_build_asm ] - - subproj_directories.each do |subdir| - directory(subdir) - end - - CLEAN.include(File.join(subproj_build_root, '*')) - CLEAN.include(File.join(subproj_build_out, '*')) - - CLOBBER.include(File.join(subproj_build_root, '**/*')) - - # Add a rule for building the actual static library from our object files - rule(/#{subproj_build_root}#{'.+\\'+EXTENSION_SUBPROJECTS}$/ => [ - proc do |task_name| - @ceedling[SUBPROJECTS_SYM].list_all_object_files_for_subproject(task_name) - end - ]) do |bin_file| - @ceedling[:generator].generate_executable_file( - TOOLS_SUBPROJECTS_LINKER, - SUBPROJECTS_SYM, - bin_file.prerequisites, - bin_file.name, - @ceedling[:file_path_utils].form_test_build_map_filepath(bin_file.name)) - end - - # Add a rule for building object files from assembly files to link into a library - if (RELEASE_BUILD_USE_ASSEMBLY) - rule(/#{subproj_build_asm}#{'.+\\'+EXTENSION_OBJECT}$/ => [ - proc do |task_name| - @ceedling[SUBPROJECTS_SYM].find_library_assembly_file_for_object(task_name) - end - ]) do |object| - @ceedling[SUBPROJECTS_SYM].replace_constant(:COLLECTION_PATHS_SUBPROJECTS, @ceedling[SUBPROJECTS_SYM].find_my_paths(object.source, :asm)) - @ceedling[SUBPROJECTS_SYM].replace_constant(:COLLECTION_DEFINES_SUBPROJECTS, @ceedling[SUBPROJECTS_SYM].find_my_defines(object.source, :asm)) - @ceedling[:generator].generate_object_file( - TOOLS_SUBPROJECTS_ASSEMBLER, - OPERATION_ASSEMBLE_SYM, - SUBPROJECTS_SYM, - object.source, - object.name ) - end - end - - # Add a rule for building object files from C files to link into a library - rule(/#{subproj_build_c}#{'.+\\'+EXTENSION_OBJECT}$/ => [ - proc do |task_name| - @ceedling[SUBPROJECTS_SYM].find_library_source_file_for_object(task_name) - end - ]) do |object| - @ceedling[SUBPROJECTS_SYM].replace_constant(:COLLECTION_PATHS_SUBPROJECTS, @ceedling[SUBPROJECTS_SYM].find_my_paths(object.source, :c)) - @ceedling[SUBPROJECTS_SYM].replace_constant(:COLLECTION_DEFINES_SUBPROJECTS, @ceedling[SUBPROJECTS_SYM].find_my_defines(object.source, :c)) - @ceedling[:generator].generate_object_file( - TOOLS_SUBPROJECTS_COMPILER, - OPERATION_COMPILE_SYM, - SUBPROJECTS_SYM, - object.source, - object.name, - @ceedling[:file_path_utils].form_release_build_c_list_filepath( object.name ) ) - end - - # Add the subdirectories involved to our list of those that should be autogenerated - task :directories => subproj_directories.clone - - # Finally, add the static library to our RELEASE build dependency list - task RELEASE_SYM => ["#{subproj_build_root}/#{subproj_name}#{EXTENSION_SUBPROJECTS}"] -end - diff --git a/tools/vendor/ceedling/plugins/teamcity_tests_report/README.md b/tools/vendor/ceedling/plugins/teamcity_tests_report/README.md deleted file mode 100644 index 9fcda7d5..00000000 --- a/tools/vendor/ceedling/plugins/teamcity_tests_report/README.md +++ /dev/null @@ -1,18 +0,0 @@ -ceedling-teamcity-tests-report -============================== - -## Overview - -The teamcity_tests_report replaces the normal ceedling "pretty" output with -a version that has results tagged to be consumed with the teamcity CI server. - -## Setup - -Enable the plugin in your project.yml by adding `teamcity_tests_report` -to the list of enabled plugins. - -``` YAML -:plugins: - :enabled: - - teamcity_tests_report -``` diff --git a/tools/vendor/ceedling/plugins/teamcity_tests_report/config/teamcity_tests_report.yml b/tools/vendor/ceedling/plugins/teamcity_tests_report/config/teamcity_tests_report.yml deleted file mode 100644 index c25acf51..00000000 --- a/tools/vendor/ceedling/plugins/teamcity_tests_report/config/teamcity_tests_report.yml +++ /dev/null @@ -1,4 +0,0 @@ ---- -:plugins: - # tell Ceedling we got results display taken care of - :display_raw_test_results: FALSE diff --git a/tools/vendor/ceedling/plugins/teamcity_tests_report/lib/teamcity_tests_report.rb b/tools/vendor/ceedling/plugins/teamcity_tests_report/lib/teamcity_tests_report.rb deleted file mode 100644 index 4b9616b3..00000000 --- a/tools/vendor/ceedling/plugins/teamcity_tests_report/lib/teamcity_tests_report.rb +++ /dev/null @@ -1,57 +0,0 @@ -require 'ceedling/plugin' -require 'ceedling/defaults' - -class TeamcityTestsReport < Plugin - - def setup - @suite_started = nil - @output_enabled = !defined?(TEAMCITY_BUILD) || TEAMCITY_BUILD - end - - def escape(string) - string.gsub(/['|\[\]]/, '|\0').gsub('\r', '|r').gsub('\n', '|n') - end - - def pre_test(test) - teamcity_message "testSuiteStarted name='#{File.basename(test, '.c')}'" - @suite_started = Time.now - end - - def post_test(test) - teamcity_message "testSuiteFinished name='#{File.basename(test, '.c')}'" - end - - def post_test_fixture_execute(arg_hash) - duration = (Time.now - @suite_started) * 1000 - results = @ceedling[:plugin_reportinator].assemble_test_results([arg_hash[:result_file]]) - avg_duration = (duration / [1, results[:counts][:passed] + results[:counts][:failed]].max).round - - results[:successes].each do |success| - success[:collection].each do |test| - teamcity_message "testStarted name='#{test[:test]}'" - teamcity_message "testFinished name='#{test[:test]}' duration='#{avg_duration}'" - end - end - - results[:failures].each do |failure| - failure[:collection].each do |test| - teamcity_message "testStarted name='#{test[:test]}'" - teamcity_message "testFailed name='#{test[:test]}' message='#{escape(test[:message])}' details='File: #{failure[:source][:file]} Line: #{test[:line]}'" - teamcity_message "testFinished name='#{test[:test]}' duration='#{avg_duration}'" - end - end - - results[:ignores].each do |failure| - failure[:collection].each do |test| - teamcity_message "testIgnored name='#{test[:test]}' message='#{escape(test[:message])}'" - end - end - - # We ignore stdout - end - - def teamcity_message(content) - puts "##teamcity[#{content}]" unless !@output_enabled - end - -end diff --git a/tools/vendor/ceedling/plugins/warnings_report/README.md b/tools/vendor/ceedling/plugins/warnings_report/README.md deleted file mode 100644 index fd7fae5d..00000000 --- a/tools/vendor/ceedling/plugins/warnings_report/README.md +++ /dev/null @@ -1,19 +0,0 @@ -warnings-report -=============== - -## Overview - -The warnings_report captures all warnings throughout the build process -and collects them into a single report at the end of execution. It places all -of this into a warnings file in the output artifact directory. - -## Setup - -Enable the plugin in your project.yml by adding `warnings_report` -to the list of enabled plugins. - -``` YAML -:plugins: - :enabled: - - warnings_report -``` diff --git a/tools/vendor/ceedling/plugins/warnings_report/lib/warnings_report.rb b/tools/vendor/ceedling/plugins/warnings_report/lib/warnings_report.rb deleted file mode 100644 index d4f43fb5..00000000 --- a/tools/vendor/ceedling/plugins/warnings_report/lib/warnings_report.rb +++ /dev/null @@ -1,69 +0,0 @@ -require 'ceedling/plugin' -require 'ceedling/constants' - -class WarningsReport < Plugin - def setup - @stderr_redirect = nil - @log_paths = {} - end - - def pre_compile_execute(arg_hash) - # at beginning of compile, override tool's stderr_redirect so we can parse $stderr + $stdout - set_stderr_redirect(arg_hash) - end - - def post_compile_execute(arg_hash) - # after compilation, grab output for parsing/logging, restore stderr_redirect, log warning if it exists - output = arg_hash[:shell_result][:output] - restore_stderr_redirect(arg_hash) - write_warning_log(arg_hash[:context], output) - end - - def pre_link_execute(arg_hash) - # at beginning of link, override tool's stderr_redirect so we can parse $stderr + $stdout - set_stderr_redirect(arg_hash) - end - - def post_link_execute(arg_hash) - # after linking, grab output for parsing/logging, restore stderr_redirect, log warning if it exists - output = arg_hash[:shell_result][:output] - restore_stderr_redirect(arg_hash) - write_warning_log(arg_hash[:context], output) - end - - private - - def set_stderr_redirect(hash) - @stderr_redirect = hash[:tool][:stderr_redirect] - hash[:tool][:stderr_redirect] = StdErrRedirect::AUTO - end - - def restore_stderr_redirect(hash) - hash[:tool][:stderr_redirect] = @stderr_redirect - end - - def write_warning_log(context, output) - # if $stderr/$stdout contain "warning", log it - if output =~ /warning/i - # generate a log path & file io write flags - logging = generate_log_path(context) - @ceedling[:file_wrapper].write(logging[:path], output + "\n", logging[:flags]) unless logging.nil? - end - end - - def generate_log_path(context) - # if path has already been generated, return it & 'append' file io flags (append to log) - return { path: @log_paths[context], flags: 'a' } unless @log_paths[context].nil? - - # first time through, generate path & 'write' file io flags (create new log) - base_path = File.join(PROJECT_BUILD_ARTIFACTS_ROOT, context.to_s) - file_path = File.join(base_path, 'warnings.log') - - if @ceedling[:file_wrapper].exist?(base_path) - @log_paths[context] = file_path - return { path: file_path, flags: 'w' } - end - - nil - end -end diff --git a/tools/vendor/ceedling/plugins/xml_tests_report/README.md b/tools/vendor/ceedling/plugins/xml_tests_report/README.md deleted file mode 100644 index 529e33b9..00000000 --- a/tools/vendor/ceedling/plugins/xml_tests_report/README.md +++ /dev/null @@ -1,39 +0,0 @@ -xml_tests_report -================ - -## Overview - -The xml_tests_report plugin creates an XML file of test results in xUnit -format, which is handy for Continuous Integration build servers or as input -into other reporting tools. The XML file is output to the appropriate -`/artifacts/` directory (e.g. `artifacts/test/` for test tasks, -`artifacts/gcov/` for gcov, or `artifacts/bullseye/` for bullseye runs). - -## Setup - -Enable the plugin in your project.yml by adding `xml_tests_report` to the list -of enabled plugins. - -``` YAML -:plugins: - :enabled: - - xml_tests_report -``` - -## Configuration - -Optionally configure the output / artifact filename in your project.yml with -the `artifact_filename` configuration option. The default filename is -`report.xml`. - -You can also configure the path that this artifact is stored. This can be done -by setting `path`. The default is that it will be placed in a subfolder under -the `build` directory. - -If you use some means for continuous integration, you may also want to add -.xsl file to CI's configuration for proper parsing of .xml report. - -``` YAML -:xml_tests_report: - :artifact_filename: report_xunit.xml -``` diff --git a/tools/vendor/ceedling/plugins/xml_tests_report/lib/xml_tests_report.rb b/tools/vendor/ceedling/plugins/xml_tests_report/lib/xml_tests_report.rb deleted file mode 100644 index ea5eaf64..00000000 --- a/tools/vendor/ceedling/plugins/xml_tests_report/lib/xml_tests_report.rb +++ /dev/null @@ -1,112 +0,0 @@ -require 'ceedling/plugin' -require 'ceedling/constants' - -class XmlTestsReport < Plugin - def setup - @results_list = {} - @test_counter = 0 - end - - def post_test_fixture_execute(arg_hash) - context = arg_hash[:context] - - @results_list[context] = [] if @results_list[context].nil? - - @results_list[context] << arg_hash[:result_file] - end - - def post_build - @results_list.each_key do |context| - results = @ceedling[:plugin_reportinator].assemble_test_results(@results_list[context]) - - artifact_filename = @ceedling[:configurator].project_config_hash[:xml_tests_report_artifact_filename] || 'report.xml' - artifact_fullpath = @ceedling[:configurator].project_config_hash[:xml_tests_report_path] || File.join(PROJECT_BUILD_ARTIFACTS_ROOT, context.to_s) - - file_path = File.join(artifact_fullpath, artifact_filename) - - @ceedling[:file_wrapper].open(file_path, 'w') do |f| - @test_counter = 1 - write_results(results, f) - end - end - end - - private - - def write_results(results, stream) - write_header(stream) - write_failures(results[:failures], stream) - write_tests(results[:successes], stream, 'SuccessfulTests') - write_tests(results[:ignores], stream, 'IgnoredTests') - write_statistics(results[:counts], stream) - write_footer(stream) - end - - def write_header(stream) - stream.puts "" - stream.puts '' - end - - def write_failures(results, stream) - if results.size.zero? - stream.puts "\t" - return - end - - stream.puts "\t" - - results.each do |result| - result[:collection].each do |item| - filename = result[:source][:file] - - stream.puts "\t\t" - stream.puts "\t\t\t#{filename}::#{item[:test]}" - stream.puts "\t\t\tAssertion" - stream.puts "\t\t\t" - stream.puts "\t\t\t\t#{filename}" - stream.puts "\t\t\t\t#{item[:line]}" - stream.puts "\t\t\t" - stream.puts "\t\t\t#{item[:message]}" - stream.puts "\t\t" - @test_counter += 1 - end - end - - stream.puts "\t" - end - - def write_tests(results, stream, tag) - if results.size.zero? - stream.puts "\t<#{tag}/>" - return - end - - stream.puts "\t<#{tag}>" - - results.each do |result| - result[:collection].each do |item| - filename = result[:source][:file] - stream.puts "\t\t" - stream.puts "\t\t\t#{filename}::#{item[:test]}" - stream.puts "\t\t" - @test_counter += 1 - end - end - - stream.puts "\t" - end - - def write_statistics(counts, stream) - stream.puts "\t" - stream.puts "\t\t#{counts[:total]}" - stream.puts "\t\t#{counts[:ignored]}" - stream.puts "\t\t#{counts[:failed]}" - stream.puts "\t\t0" - stream.puts "\t\t#{counts[:failed]}" - stream.puts "\t" - end - - def write_footer(stream) - stream.puts '' - end -end diff --git a/tools/vendor/ceedling/vendor/c_exception/lib/CException.c b/tools/vendor/ceedling/vendor/c_exception/lib/CException.c index fdff8f47..825e5451 100644 --- a/tools/vendor/ceedling/vendor/c_exception/lib/CException.c +++ b/tools/vendor/ceedling/vendor/c_exception/lib/CException.c @@ -1,9 +1,22 @@ +/* ========================================================================= + CException - Simple Exception Handling in C + ThrowTheSwitch.org + Copyright (c) 2007-24 Mark VanderVoord + SPDX-License-Identifier: MIT +========================================================================= */ + #include "CException.h" +#ifdef __GNUC__ #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wmissing-field-initializers" +#endif + volatile CEXCEPTION_FRAME_T CExceptionFrames[CEXCEPTION_NUM_ID] = {{ 0 }}; + +#ifdef __GNUC__ #pragma GCC diagnostic pop +#endif //------------------------------------------------------------------------------------------ // Throw diff --git a/tools/vendor/ceedling/vendor/c_exception/lib/CException.h b/tools/vendor/ceedling/vendor/c_exception/lib/CException.h index be9e1869..6b6cf104 100644 --- a/tools/vendor/ceedling/vendor/c_exception/lib/CException.h +++ b/tools/vendor/ceedling/vendor/c_exception/lib/CException.h @@ -1,3 +1,10 @@ +/* ========================================================================= + CException - Simple Exception Handling in C + ThrowTheSwitch.org + Copyright (c) 2007-24 Mark VanderVoord + SPDX-License-Identifier: MIT +========================================================================= */ + #ifndef _CEXCEPTION_H #define _CEXCEPTION_H @@ -11,7 +18,7 @@ extern "C" #define CEXCEPTION_VERSION_MAJOR 1 #define CEXCEPTION_VERSION_MINOR 3 -#define CEXCEPTION_VERSION_BUILD 3 +#define CEXCEPTION_VERSION_BUILD 4 #define CEXCEPTION_VERSION ((CEXCEPTION_VERSION_MAJOR << 16) | (CEXCEPTION_VERSION_MINOR << 8) | CEXCEPTION_VERSION_BUILD) //To Use CException, you have a number of options: diff --git a/tools/vendor/ceedling/vendor/c_exception/license.txt b/tools/vendor/ceedling/vendor/c_exception/license.txt new file mode 100644 index 00000000..6a7911c1 --- /dev/null +++ b/tools/vendor/ceedling/vendor/c_exception/license.txt @@ -0,0 +1,22 @@ +Copyright (c) 2007-2024 Mark VanderVoord + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. diff --git a/tools/vendor/ceedling/vendor/cmock/LICENSE.txt b/tools/vendor/ceedling/vendor/cmock/LICENSE.txt new file mode 100644 index 00000000..98167e40 --- /dev/null +++ b/tools/vendor/ceedling/vendor/cmock/LICENSE.txt @@ -0,0 +1,19 @@ +Copyright (c) 2007-14 Mike Karlesky, Mark VanderVoord, Greg Williams + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. \ No newline at end of file diff --git a/tools/vendor/ceedling/vendor/cmock/lib/cmock_generator_plugin_return_thru_ptr.rb b/tools/vendor/ceedling/vendor/cmock/lib/cmock_generator_plugin_return_thru_ptr.rb index 96b20035..8d0b2d56 100644 --- a/tools/vendor/ceedling/vendor/cmock/lib/cmock_generator_plugin_return_thru_ptr.rb +++ b/tools/vendor/ceedling/vendor/cmock/lib/cmock_generator_plugin_return_thru_ptr.rb @@ -2,9 +2,15 @@ class CMockGeneratorPluginReturnThruPtr attr_reader :priority attr_accessor :utils - def initialize(_config, utils) + def initialize(config, utils) @utils = utils @priority = 9 + @config = config + end + + def ptr_to_const(arg_type) + # replace last "*" with " const*" + arg_type.gsub(/(.*)\*/, '\1 const*') end def instance_typedefs(function) @@ -13,12 +19,21 @@ def instance_typedefs(function) next unless @utils.ptr_or_str?(arg[:type]) && !(arg[:const?]) lines << " char ReturnThruPtr_#{arg[:name]}_Used;\n" - lines << " #{arg[:type]} ReturnThruPtr_#{arg[:name]}_Val;\n" + lines << " #{ptr_to_const(arg[:type])} ReturnThruPtr_#{arg[:name]}_Val;\n" lines << " size_t ReturnThruPtr_#{arg[:name]}_Size;\n" end lines end + def void_pointer?(type) + # returns true if the provided type is a void, or is supposed to be treated as void + if type.casecmp?('void') + true + else + @config.respond_to?(:treat_as_void) ? @config.treat_as_void.include?(type) : false + end + end + def mock_function_declarations(function) lines = '' function[:args].each do |arg| @@ -27,7 +42,8 @@ def mock_function_declarations(function) lines << "#define #{function[:name]}_ReturnThruPtr_#{arg[:name]}(#{arg[:name]})" # If the pointer type actually contains an asterisk, we can do sizeof the type (super safe), otherwise # we need to do a sizeof the dereferenced pointer (which could be a problem if give the wrong size - lines << if arg[:type][-1] == '*' + # however if its a void pointer we are given then we have to use the provided parameter name because sizeof(void) is UB. + lines << if (arg[:type][-1] == '*') && (void_pointer?(arg[:type][0..-2]) == false) " #{function[:name]}_CMockReturnMemThruPtr_#{arg[:name]}(__LINE__, #{arg[:name]}, sizeof(#{arg[:type][0..-2]}))\n" else " #{function[:name]}_CMockReturnMemThruPtr_#{arg[:name]}(__LINE__, #{arg[:name]}, sizeof(*#{arg[:name]}))\n" @@ -36,7 +52,7 @@ def mock_function_declarations(function) lines << " #{function[:name]}_CMockReturnMemThruPtr_#{arg[:name]}(__LINE__, #{arg[:name]}, cmock_len * sizeof(*#{arg[:name]}))\n" lines << "#define #{function[:name]}_ReturnMemThruPtr_#{arg[:name]}(#{arg[:name]}, cmock_size)" lines << " #{function[:name]}_CMockReturnMemThruPtr_#{arg[:name]}(__LINE__, #{arg[:name]}, cmock_size)\n" - lines << "void #{function[:name]}_CMockReturnMemThruPtr_#{arg[:name]}(UNITY_LINE_TYPE cmock_line, #{arg[:type]} #{arg[:name]}, size_t cmock_size);\n" + lines << "void #{function[:name]}_CMockReturnMemThruPtr_#{arg[:name]}(UNITY_LINE_TYPE cmock_line, #{ptr_to_const(arg[:type])} #{arg[:name]}, size_t cmock_size);\n" end lines end @@ -48,7 +64,7 @@ def mock_interfaces(function) arg_name = arg[:name] next unless @utils.ptr_or_str?(arg[:type]) && !(arg[:const?]) - lines << "void #{func_name}_CMockReturnMemThruPtr_#{arg_name}(UNITY_LINE_TYPE cmock_line, #{arg[:type]} #{arg_name}, size_t cmock_size)\n" + lines << "void #{func_name}_CMockReturnMemThruPtr_#{arg_name}(UNITY_LINE_TYPE cmock_line, #{ptr_to_const(arg[:type])} #{arg_name}, size_t cmock_size)\n" lines << "{\n" lines << " CMOCK_#{func_name}_CALL_INSTANCE* cmock_call_instance = " \ "(CMOCK_#{func_name}_CALL_INSTANCE*)CMock_Guts_GetAddressFor(CMock_Guts_MemEndOfChain(Mock.#{func_name}_CallInstance));\n" @@ -70,7 +86,7 @@ def mock_implementation(function) lines << " if (cmock_call_instance->ReturnThruPtr_#{arg_name}_Used)\n" lines << " {\n" lines << " UNITY_TEST_ASSERT_NOT_NULL(#{arg_name}, cmock_line, CMockStringPtrIsNULL);\n" - lines << " memcpy((void*)#{arg_name}, (void*)cmock_call_instance->ReturnThruPtr_#{arg_name}_Val,\n" + lines << " memcpy((void*)#{arg_name}, (const void*)cmock_call_instance->ReturnThruPtr_#{arg_name}_Val,\n" lines << " cmock_call_instance->ReturnThruPtr_#{arg_name}_Size);\n" lines << " }\n" end diff --git a/tools/vendor/ceedling/vendor/cmock/lib/cmock_header_parser.rb b/tools/vendor/ceedling/vendor/cmock/lib/cmock_header_parser.rb index 491e4671..15224349 100644 --- a/tools/vendor/ceedling/vendor/cmock/lib/cmock_header_parser.rb +++ b/tools/vendor/ceedling/vendor/cmock/lib/cmock_header_parser.rb @@ -137,7 +137,7 @@ def transform_inline_functions(source) # If the user uses a macro to declare an inline function, # smushing the macros makes it easier to recognize them as a macro and if required, # remove them later on in this function - source.gsub!(/\s*\\\s*/m, ' ') + source.gsub!(/\s*\\(\n|\s*)/m, ' ') # Just looking for static|inline in the gsub is a bit too aggressive (functions that are named like this, ...), so we try to be a bit smarter # Instead, look for an inline pattern (f.e. "static inline") and parse it. diff --git a/tools/vendor/ceedling/vendor/cmock/lib/cmock_unityhelper_parser.rb b/tools/vendor/ceedling/vendor/cmock/lib/cmock_unityhelper_parser.rb index 9f4beb77..57f2aeb1 100644 --- a/tools/vendor/ceedling/vendor/cmock/lib/cmock_unityhelper_parser.rb +++ b/tools/vendor/ceedling/vendor/cmock/lib/cmock_unityhelper_parser.rb @@ -35,6 +35,9 @@ def get_helper(ctype) def map_c_types c_types = {} @config.treat_as.each_pair do |ctype, expecttype| + if ctype.is_a?(Symbol) + raise ":treat_as expects a list of identifier: identifier mappings, but got a symbol: #{ctype}. Check the indentation in your project.yml" + end c_type = ctype.gsub(/\s+/, '_') if expecttype =~ /\*/ c_types[c_type] = "UNITY_TEST_ASSERT_EQUAL_#{expecttype.delete('*')}_ARRAY" diff --git a/tools/vendor/ceedling/vendor/diy/LICENSE.txt b/tools/vendor/ceedling/vendor/diy/LICENSE.txt new file mode 100644 index 00000000..ee8023c2 --- /dev/null +++ b/tools/vendor/ceedling/vendor/diy/LICENSE.txt @@ -0,0 +1,7 @@ +Copyright 2007-2024 Atomic Object + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/tools/vendor/ceedling/vendor/diy/lib/diy.rb b/tools/vendor/ceedling/vendor/diy/lib/diy.rb index 581afc7e..99420ec4 100644 --- a/tools/vendor/ceedling/vendor/diy/lib/diy.rb +++ b/tools/vendor/ceedling/vendor/diy/lib/diy.rb @@ -1,3 +1,11 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + + require 'diy/factory.rb' require 'yaml' require 'set' diff --git a/tools/vendor/ceedling/vendor/diy/lib/diy/factory.rb b/tools/vendor/ceedling/vendor/diy/lib/diy/factory.rb index d2566c5d..317c2062 100644 --- a/tools/vendor/ceedling/vendor/diy/lib/diy/factory.rb +++ b/tools/vendor/ceedling/vendor/diy/lib/diy/factory.rb @@ -1,3 +1,11 @@ +# ========================================================================= +# Ceedling - Test-Centered Build System for C +# ThrowTheSwitch.org +# Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + + module DIY #:nodoc:# class FactoryDef #:nodoc: attr_accessor :name, :target, :class_name, :library diff --git a/tools/vendor/ceedling/vendor/unity/LICENSE.txt b/tools/vendor/ceedling/vendor/unity/LICENSE.txt new file mode 100644 index 00000000..ecca34ce --- /dev/null +++ b/tools/vendor/ceedling/vendor/unity/LICENSE.txt @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2007-24 Mike Karlesky, Mark VanderVoord, Greg Williams + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/tools/vendor/ceedling/vendor/unity/auto/__init__.py b/tools/vendor/ceedling/vendor/unity/auto/__init__.py old mode 100644 new mode 100755 index e69de29b..793090f9 --- a/tools/vendor/ceedling/vendor/unity/auto/__init__.py +++ b/tools/vendor/ceedling/vendor/unity/auto/__init__.py @@ -0,0 +1,7 @@ +# ========================================================================= +# Unity - A Test Framework for C +# ThrowTheSwitch.org +# Copyright (c) 2007-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + diff --git a/tools/vendor/ceedling/vendor/unity/auto/colour_prompt.rb b/tools/vendor/ceedling/vendor/unity/auto/colour_prompt.rb index 85cbfd80..57b495a0 100644 --- a/tools/vendor/ceedling/vendor/unity/auto/colour_prompt.rb +++ b/tools/vendor/ceedling/vendor/unity/auto/colour_prompt.rb @@ -1,8 +1,9 @@ -# ========================================== -# Unity Project - A Test Framework for C -# Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams -# [Released under MIT License. Please refer to license.txt for details] -# ========================================== +# ========================================================================= +# Unity - A Test Framework for C +# ThrowTheSwitch.org +# Copyright (c) 2007-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= if RUBY_PLATFORM =~ /(win|w)32$/ begin diff --git a/tools/vendor/ceedling/vendor/unity/auto/colour_reporter.rb b/tools/vendor/ceedling/vendor/unity/auto/colour_reporter.rb index 1c3bc216..273ea3b6 100644 --- a/tools/vendor/ceedling/vendor/unity/auto/colour_reporter.rb +++ b/tools/vendor/ceedling/vendor/unity/auto/colour_reporter.rb @@ -1,8 +1,9 @@ -# ========================================== -# Unity Project - A Test Framework for C -# Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams -# [Released under MIT License. Please refer to license.txt for details] -# ========================================== +# ========================================================================= +# Unity - A Test Framework for C +# ThrowTheSwitch.org +# Copyright (c) 2007-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= require_relative 'colour_prompt' @@ -12,7 +13,7 @@ def report(message) if !$colour_output $stdout.puts(message) else - message = message.join('\n') if message.class == Array + message = message.join('\n') if message.instance_of?(Array) message.each_line do |line| line.chomp! colour = case line diff --git a/tools/vendor/ceedling/vendor/unity/auto/extract_version.py b/tools/vendor/ceedling/vendor/unity/auto/extract_version.py old mode 100644 new mode 100755 index 1d137e5b..ff7a6982 --- a/tools/vendor/ceedling/vendor/unity/auto/extract_version.py +++ b/tools/vendor/ceedling/vendor/unity/auto/extract_version.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# ========================================================================= +# Unity - A Test Framework for C +# ThrowTheSwitch.org +# Copyright (c) 2007-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + import re import sys diff --git a/tools/vendor/ceedling/vendor/unity/auto/generate_config.yml b/tools/vendor/ceedling/vendor/unity/auto/generate_config.yml index 4a5e4742..d0fccec7 100644 --- a/tools/vendor/ceedling/vendor/unity/auto/generate_config.yml +++ b/tools/vendor/ceedling/vendor/unity/auto/generate_config.yml @@ -1,3 +1,10 @@ +# ========================================================================= +# Unity - A Test Framework for C +# ThrowTheSwitch.org +# Copyright (c) 2007-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + #this is a sample configuration file for generate_module #you would use it by calling generate_module with the -ygenerate_config.yml option #files like this are useful for customizing generate_module to your environment diff --git a/tools/vendor/ceedling/vendor/unity/auto/generate_module.rb b/tools/vendor/ceedling/vendor/unity/auto/generate_module.rb index 7151586b..4c91a131 100644 --- a/tools/vendor/ceedling/vendor/unity/auto/generate_module.rb +++ b/tools/vendor/ceedling/vendor/unity/auto/generate_module.rb @@ -1,8 +1,9 @@ -# ========================================== -# Unity Project - A Test Framework for C -# Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams -# [Released under MIT License. Please refer to license.txt for details] -# ========================================== +# ========================================================================= +# Unity - A Test Framework for C +# ThrowTheSwitch.org +# Copyright (c) 2007-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= # This script creates all the files with start code necessary for a new module. # A simple module only requires a source file, header file, and test file. @@ -13,7 +14,7 @@ require 'pathname' # TEMPLATE_TST -TEMPLATE_TST ||= '#ifdef TEST +TEMPLATE_TST ||= '#ifdef %5$s #include "unity.h" @@ -32,7 +33,7 @@ TEST_IGNORE_MESSAGE("Need to Implement %1$s"); } -#endif // TEST +#endif // %5$s '.freeze # TEMPLATE_SRC @@ -108,7 +109,8 @@ def self.default_options update_svn: false, boilerplates: {}, test_prefix: 'Test', - mock_prefix: 'Mock' + mock_prefix: 'Mock', + test_define: 'TEST' } end @@ -132,9 +134,9 @@ def files_to_operate_on(module_name, pattern = nil) # create triad definition prefix = @options[:test_prefix] || 'Test' - triad = [{ ext: '.c', path: @options[:path_src], prefix: '', template: TEMPLATE_SRC, inc: :src, boilerplate: @options[:boilerplates][:src] }, + triad = [{ ext: '.c', path: @options[:path_src], prefix: '', template: TEMPLATE_SRC, inc: :src, boilerplate: @options[:boilerplates][:src] }, { ext: '.h', path: @options[:path_inc], prefix: '', template: TEMPLATE_INC, inc: :inc, boilerplate: @options[:boilerplates][:inc] }, - { ext: '.c', path: @options[:path_tst], prefix: prefix, template: TEMPLATE_TST, inc: :tst, boilerplate: @options[:boilerplates][:tst] }] + { ext: '.c', path: @options[:path_tst], prefix: prefix, template: TEMPLATE_TST, inc: :tst, boilerplate: @options[:boilerplates][:tst], test_define: @options[:test_define] }] # prepare the pattern for use pattern = (pattern || @options[:pattern] || 'src').downcase @@ -154,6 +156,7 @@ def files_to_operate_on(module_name, pattern = nil) path: (Pathname.new("#{cfg[:path]}#{subfolder}") + filename).cleanpath, name: submodule_name, template: cfg[:template], + test_define: cfg[:test_define], boilerplate: cfg[:boilerplate], includes: case (cfg[:inc]) when :src then (@options[:includes][:src] || []) | (pattern_traits[:inc].map { |f| format(f, module_name) }) @@ -168,18 +171,19 @@ def files_to_operate_on(module_name, pattern = nil) end ############################ - def neutralize_filename(name, start_cap = true) + def neutralize_filename(name, start_cap: true) return name if name.empty? + name = name.split(/(?:\s+|_|(?=[A-Z][a-z]))|(?<=[a-z])(?=[A-Z])/).map(&:capitalize).join('_') - name = name[0].downcase + name[1..-1] unless start_cap + name = name[0].downcase + name[1..] unless start_cap name end ############################ def create_filename(part1, part2 = '') - name = part2.empty? ? part1 : part1 + '_' + part2 + name = part2.empty? ? part1 : "#{part1}_#{part2}" case (@options[:naming]) - when 'bumpy' then neutralize_filename(name, false).delete('_') + when 'bumpy' then neutralize_filename(name, start_cap: false).delete('_') when 'camel' then neutralize_filename(name).delete('_') when 'snake' then neutralize_filename(name).downcase when 'caps' then neutralize_filename(name).upcase @@ -212,7 +216,8 @@ def generate(module_name, pattern = nil) f.write(file[:template] % [file[:name], file[:includes].map { |ff| "#include \"#{ff}\"\n" }.join, file[:name].upcase.tr('-', '_'), - file[:name].tr('-', '_')]) + file[:name].tr('-', '_'), + file[:test_define]]) end if @options[:update_svn] `svn add \"#{file[:path]}\"` @@ -260,12 +265,12 @@ def destroy(module_name, pattern = nil) case arg when /^-d/ then destroy = true when /^-u/ then options[:update_svn] = true - when /^-p\"?(\w+)\"?/ then options[:pattern] = Regexp.last_match(1) - when /^-s\"?(.+)\"?/ then options[:path_src] = Regexp.last_match(1) - when /^-i\"?(.+)\"?/ then options[:path_inc] = Regexp.last_match(1) - when /^-t\"?(.+)\"?/ then options[:path_tst] = Regexp.last_match(1) - when /^-n\"?(.+)\"?/ then options[:naming] = Regexp.last_match(1) - when /^-y\"?(.+)\"?/ then options = UnityModuleGenerator.grab_config(Regexp.last_match(1)) + when /^-p"?(\w+)"?/ then options[:pattern] = Regexp.last_match(1) + when /^-s"?(.+)"?/ then options[:path_src] = Regexp.last_match(1) + when /^-i"?(.+)"?/ then options[:path_inc] = Regexp.last_match(1) + when /^-t"?(.+)"?/ then options[:path_tst] = Regexp.last_match(1) + when /^-n"?(.+)"?/ then options[:naming] = Regexp.last_match(1) + when /^-y"?(.+)"?/ then options = UnityModuleGenerator.grab_config(Regexp.last_match(1)) when /^(\w+)/ raise "ERROR: You can't have more than one Module name specified!" unless module_name.nil? diff --git a/tools/vendor/ceedling/vendor/unity/auto/generate_test_runner.rb b/tools/vendor/ceedling/vendor/unity/auto/generate_test_runner.rb index 69f3ff50..1a90564d 100644 --- a/tools/vendor/ceedling/vendor/unity/auto/generate_test_runner.rb +++ b/tools/vendor/ceedling/vendor/unity/auto/generate_test_runner.rb @@ -1,10 +1,11 @@ #!/usr/bin/ruby -# ========================================== -# Unity Project - A Test Framework for C -# Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams -# [Released under MIT License. Please refer to license.txt for details] -# ========================================== +# ========================================================================= +# Unity - A Test Framework for C +# ThrowTheSwitch.org +# Copyright (c) 2007-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= class UnityTestRunnerGenerator def initialize(options = nil) @@ -45,6 +46,7 @@ def self.default_options cmdline_args: false, omit_begin_end: false, use_param_tests: false, + use_system_files: true, include_extensions: '(?:hpp|hh|H|h)', source_extensions: '(?:cpp|cc|ino|C|c)' } @@ -69,7 +71,7 @@ def run(input_file, output_file, options = nil) source = source.force_encoding('ISO-8859-1').encode('utf-8', replace: nil) tests = find_tests(source) headers = find_includes(source) - testfile_includes = (headers[:local] + headers[:system]) + testfile_includes = @options[:use_system_files] ? (headers[:local] + headers[:system]) : (headers[:local]) used_mocks = find_mocks(testfile_includes) testfile_includes = (testfile_includes - used_mocks) testfile_includes.delete_if { |inc| inc =~ /(unity|cmock)/ } @@ -80,7 +82,7 @@ def run(input_file, output_file, options = nil) # determine which files were used to return them all_files_used = [input_file, output_file] - all_files_used += testfile_includes.map { |filename| filename + '.c' } unless testfile_includes.empty? + all_files_used += testfile_includes.map { |filename| "#{filename}.c" } unless testfile_includes.empty? all_files_used += @options[:includes] unless @options[:includes].empty? all_files_used += headers[:linkonly] unless headers[:linkonly].empty? all_files_used.uniq @@ -144,12 +146,12 @@ def find_tests(source) if @options[:use_param_tests] && !arguments.empty? args = [] type_and_args = arguments.split(/TEST_(CASE|RANGE|MATRIX)/) - for i in (1...type_and_args.length).step(2) + (1...type_and_args.length).step(2).each do |i| case type_and_args[i] - when "CASE" + when 'CASE' args << type_and_args[i + 1].sub(/^\s*\(\s*(.*?)\s*\)\s*$/m, '\1') - when "RANGE" + when 'RANGE' args += type_and_args[i + 1].scan(/(\[|<)\s*(-?\d+.?\d*)\s*,\s*(-?\d+.?\d*)\s*,\s*(-?\d+.?\d*)\s*(\]|>)/m).map do |arg_values_str| exclude_end = arg_values_str[0] == '<' && arg_values_str[-1] == '>' arg_values_str[1...-1].map do |arg_value_str| @@ -163,13 +165,13 @@ def find_tests(source) arg_combinations.flatten.join(', ') end - when "MATRIX" - single_arg_regex_string = /(?:(?:"(?:\\"|[^\\])*?")+|(?:'\\?.')+|(?:[^\s\]\["'\,]|\[[\d\S_-]+\])+)/.source + when 'MATRIX' + single_arg_regex_string = /(?:(?:"(?:\\"|[^\\])*?")+|(?:'\\?.')+|(?:[^\s\]\["',]|\[[\d\S_-]+\])+)/.source args_regex = /\[((?:\s*#{single_arg_regex_string}\s*,?)*(?:\s*#{single_arg_regex_string})?\s*)\]/m arg_elements_regex = /\s*(#{single_arg_regex_string})\s*,\s*/m args += type_and_args[i + 1].scan(args_regex).flatten.map do |arg_values_str| - (arg_values_str + ',').scan(arg_elements_regex) + ("#{arg_values_str},").scan(arg_elements_regex) end.reduce do |result, arg_range_expanded| result.product(arg_range_expanded) end.map do |arg_combinations| @@ -188,7 +190,7 @@ def find_tests(source) source_lines = source.split("\n") source_index = 0 tests_and_line_numbers.size.times do |i| - source_lines[source_index..-1].each_with_index do |line, index| + source_lines[source_index..].each_with_index do |line, index| next unless line =~ /\s+#{tests_and_line_numbers[i][:test]}(?:\s|\()/ source_index += index @@ -207,12 +209,11 @@ def find_includes(source) source.gsub!(/\/\/.*$/, '') # remove line comments (all that remain) # parse out includes - includes = { - local: source.scan(/^\s*#include\s+\"\s*(.+\.#{@options[:include_extensions]})\s*\"/).flatten, + { + local: source.scan(/^\s*#include\s+"\s*(.+\.#{@options[:include_extensions]})\s*"/).flatten, system: source.scan(/^\s*#include\s+<\s*(.+)\s*>/).flatten.map { |inc| "<#{inc}>" }, - linkonly: source.scan(/^TEST_SOURCE_FILE\(\s*\"\s*(.+\.#{@options[:source_extensions]})\s*\"/).flatten + linkonly: source.scan(/^TEST_SOURCE_FILE\(\s*"\s*(.+\.#{@options[:source_extensions]})\s*"/).flatten } - includes end def find_mocks(includes) @@ -239,7 +240,11 @@ def create_header(output, mocks, testfile_includes = []) output.puts('#include "cmock.h"') unless mocks.empty? output.puts('}') if @options[:externcincludes] if @options[:defines] && !@options[:defines].empty? - @options[:defines].each { |d| output.puts("#ifndef #{d}\n#define #{d}\n#endif /* #{d} */") } + output.puts("/* injected defines for unity settings, etc */") + @options[:defines].each do |d| + def_only = d.match(/(\w+).*/)[1] + output.puts("#ifndef #{def_only}\n#define #{d}\n#endif /* #{def_only} */") + end end if @options[:header_file] && !@options[:header_file].empty? output.puts("#include \"#{File.basename(@options[:header_file])}\"") @@ -369,7 +374,7 @@ def create_run_test(output) require 'erb' file = File.read(File.join(__dir__, 'run_test.erb')) template = ERB.new(file, trim_mode: '<>') - output.puts("\n" + template.result(binding)) + output.puts("\n#{template.result(binding)}") end def create_args_wrappers(output, tests) @@ -459,7 +464,7 @@ def create_main(output, filename, tests, used_mocks) end def create_h_file(output, filename, tests, testfile_includes, used_mocks) - filename = File.basename(filename).gsub(/[-\/\\\.\,\s]/, '_').upcase + filename = File.basename(filename).gsub(/[-\/\\.,\s]/, '_').upcase output.puts('/* AUTOGENERATED FILE. DO NOT EDIT. */') output.puts("#ifndef _#{filename}") output.puts("#define _#{filename}\n\n") @@ -498,7 +503,7 @@ def create_h_file(output, filename, tests, testfile_includes, used_mocks) when /\.*\.ya?ml$/ options = UnityTestRunnerGenerator.grab_config(arg) true - when /--(\w+)=\"?(.*)\"?/ + when /--(\w+)="?(.*)"?/ options[Regexp.last_match(1).to_sym] = Regexp.last_match(2) true when /\.*\.(?:hpp|hh|H|h)$/ diff --git a/tools/vendor/ceedling/vendor/unity/auto/parse_output.rb b/tools/vendor/ceedling/vendor/unity/auto/parse_output.rb index 864104be..7a5b7a5e 100644 --- a/tools/vendor/ceedling/vendor/unity/auto/parse_output.rb +++ b/tools/vendor/ceedling/vendor/unity/auto/parse_output.rb @@ -1,3 +1,9 @@ +# ========================================================================= +# Unity - A Test Framework for C +# ThrowTheSwitch.org +# Copyright (c) 2007-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= #============================================================ # Author: John Theofanopoulos # A simple parser. Takes the output files generated during the @@ -56,7 +62,7 @@ def set_xml_output # Set the flag to indicate if there will be an XML output file or not def test_suite_name=(cli_arg) @real_test_suite_name = cli_arg - puts 'Real test suite name will be \'' + @real_test_suite_name + '\'' + puts "Real test suite name will be '#{@real_test_suite_name}'" end def xml_encode_s(str) @@ -75,7 +81,7 @@ def write_xml_output # Pushes the suite info as xml to the array list, which will be written later def push_xml_output_suite_info # Insert opening tag at front - heading = '' + heading = "" @array_list.insert(0, heading) # Push back the closing tag @array_list.push '' @@ -83,20 +89,20 @@ def push_xml_output_suite_info # Pushes xml output data to the array list, which will be written later def push_xml_output_passed(test_name, execution_time = 0) - @array_list.push ' ' + @array_list.push " " end # Pushes xml output data to the array list, which will be written later def push_xml_output_failed(test_name, reason, execution_time = 0) - @array_list.push ' ' - @array_list.push ' ' + reason + '' + @array_list.push " " + @array_list.push " #{reason}" @array_list.push ' ' end # Pushes xml output data to the array list, which will be written later def push_xml_output_ignored(test_name, reason, execution_time = 0) - @array_list.push ' ' - @array_list.push ' ' + reason + '' + @array_list.push " " + @array_list.push " #{reason}" @array_list.push ' ' end @@ -144,7 +150,7 @@ def test_failed_unity_fixture(array) test_name = array[1] test_suite_verify(class_name) reason_array = array[2].split(':') - reason = reason_array[-1].lstrip.chomp + ' at line: ' + reason_array[-4] + reason = "#{reason_array[-1].lstrip.chomp} at line: #{reason_array[-4]}" printf "%-40s FAILED\n", test_name @@ -189,12 +195,12 @@ def test_passed(array) def test_failed(array) # ':' symbol will be valid in function args now real_method_name = array[@result_usual_idx - 1..-3].join(':') - array = array[0..@result_usual_idx - 3] + [real_method_name] + array[-2..-1] + array = array[0..@result_usual_idx - 3] + [real_method_name] + array[-2..] last_item = array.length - 1 test_time = get_test_time(array[last_item]) test_name = array[last_item - 2] - reason = array[last_item].chomp.lstrip + ' at line: ' + array[last_item - 3] + reason = "#{array[last_item].chomp.lstrip} at line: #{array[last_item - 3]}" class_name = array[@class_name_idx] if test_name.start_with? 'TEST(' @@ -217,7 +223,7 @@ def test_failed(array) def test_ignored(array) # ':' symbol will be valid in function args now real_method_name = array[@result_usual_idx - 1..-3].join(':') - array = array[0..@result_usual_idx - 3] + [real_method_name] + array[-2..-1] + array = array[0..@result_usual_idx - 3] + [real_method_name] + array[-2..] last_item = array.length - 1 test_time = get_test_time(array[last_item]) @@ -268,7 +274,7 @@ def detect_os_specifics(line) def process(file_name) @array_list = [] - puts 'Parsing file: ' + file_name + puts "Parsing file: #{file_name}" @test_passed = 0 @test_failed = 0 @@ -333,17 +339,17 @@ def process(file_name) @test_ignored += 1 elsif line_array.size >= 4 # We will check output from color compilation - if line_array[@result_usual_idx..-1].any? { |l| l.include? 'PASS' } + if line_array[@result_usual_idx..].any? { |l| l.include? 'PASS' } test_passed(line_array) @test_passed += 1 - elsif line_array[@result_usual_idx..-1].any? { |l| l.include? 'FAIL' } + elsif line_array[@result_usual_idx..].any? { |l| l.include? 'FAIL' } test_failed(line_array) @test_failed += 1 elsif line_array[@result_usual_idx..-2].any? { |l| l.include? 'IGNORE' } test_ignored(line_array) @test_ignored += 1 - elsif line_array[@result_usual_idx..-1].any? { |l| l.include? 'IGNORE' } - line_array.push('No reason given (' + get_test_time(line_array[@result_usual_idx..-1]).to_s + ' ms)') + elsif line_array[@result_usual_idx..].any? { |l| l.include? 'IGNORE' } + line_array.push("No reason given (#{get_test_time(line_array[@result_usual_idx..])} ms)") test_ignored(line_array) @test_ignored += 1 end @@ -353,9 +359,9 @@ def process(file_name) puts '' puts '=================== SUMMARY =====================' puts '' - puts 'Tests Passed : ' + @test_passed.to_s - puts 'Tests Failed : ' + @test_failed.to_s - puts 'Tests Ignored : ' + @test_ignored.to_s + puts "Tests Passed : #{@test_passed}" + puts "Tests Failed : #{@test_failed}" + puts "Tests Ignored : #{@test_ignored}" return unless @xml_out diff --git a/tools/vendor/ceedling/vendor/unity/auto/run_test.erb b/tools/vendor/ceedling/vendor/unity/auto/run_test.erb index 68b33730..e334d657 100644 --- a/tools/vendor/ceedling/vendor/unity/auto/run_test.erb +++ b/tools/vendor/ceedling/vendor/unity/auto/run_test.erb @@ -2,7 +2,7 @@ static void run_test(UnityTestFunction func, const char* name, UNITY_LINE_TYPE line_num) { Unity.CurrentTestName = name; - Unity.CurrentTestLineNumber = line_num; + Unity.CurrentTestLineNumber = (UNITY_UINT) line_num; #ifdef UNITY_USE_COMMAND_LINE_ARGS if (!UnityTestMatches()) return; diff --git a/tools/vendor/ceedling/vendor/unity/auto/stylize_as_junit.py b/tools/vendor/ceedling/vendor/unity/auto/stylize_as_junit.py old mode 100644 new mode 100755 index 06c86596..a60c472e --- a/tools/vendor/ceedling/vendor/unity/auto/stylize_as_junit.py +++ b/tools/vendor/ceedling/vendor/unity/auto/stylize_as_junit.py @@ -1,11 +1,10 @@ #! python3 -# ========================================== -# Fork from Unity Project - A Test Framework for C -# Pull request on Gerrit in progress, the objective of this file is to be deleted when official Unity deliveries -# include that modification -# Copyright (c) 2015 Alexander Mueller / XelaRellum@web.de -# [Released under MIT License. Please refer to license.txt for details] -# ========================================== +# ========================================================================= +# Unity - A Test Framework for C +# ThrowTheSwitch.org +# Copyright (c) 2007-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= import sys import os from glob import glob diff --git a/tools/vendor/ceedling/vendor/unity/auto/stylize_as_junit.rb b/tools/vendor/ceedling/vendor/unity/auto/stylize_as_junit.rb index e01f7912..b44979e2 100644 --- a/tools/vendor/ceedling/vendor/unity/auto/stylize_as_junit.rb +++ b/tools/vendor/ceedling/vendor/unity/auto/stylize_as_junit.rb @@ -1,3 +1,10 @@ +# ========================================================================= +# Unity - A Test Framework for C +# ThrowTheSwitch.org +# Copyright (c) 2007-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + #!/usr/bin/ruby # # unity_to_junit.rb @@ -99,7 +106,7 @@ def run test_file = if test_file_str.length < 2 result_file else - test_file_str[0] + ':' + test_file_str[1] + "#{test_file_str[0]}:#{test_file_str[1]}" end result_output[:source][:path] = File.dirname(test_file) result_output[:source][:file] = File.basename(test_file) diff --git a/tools/vendor/ceedling/vendor/unity/auto/test_file_filter.rb b/tools/vendor/ceedling/vendor/unity/auto/test_file_filter.rb index 3cc32de8..c922cdd2 100644 --- a/tools/vendor/ceedling/vendor/unity/auto/test_file_filter.rb +++ b/tools/vendor/ceedling/vendor/unity/auto/test_file_filter.rb @@ -1,8 +1,9 @@ -# ========================================== -# Unity Project - A Test Framework for C -# Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams -# [Released under MIT License. Please refer to license.txt for details] -# ========================================== +# ========================================================================= +# Unity - A Test Framework for C +# ThrowTheSwitch.org +# Copyright (c) 2007-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= require_relative 'yaml_helper' @@ -15,6 +16,7 @@ def initialize(all_files = false) file = 'test_file_filter.yml' return unless File.exist?(file) + filters = YamlHelper.load_file(file) @all_files = filters[:all_files] @only_files = filters[:only_files] diff --git a/tools/vendor/ceedling/vendor/unity/auto/type_sanitizer.rb b/tools/vendor/ceedling/vendor/unity/auto/type_sanitizer.rb index dafb8826..0cf9563c 100644 --- a/tools/vendor/ceedling/vendor/unity/auto/type_sanitizer.rb +++ b/tools/vendor/ceedling/vendor/unity/auto/type_sanitizer.rb @@ -1,6 +1,13 @@ +# ========================================================================= +# Unity - A Test Framework for C +# ThrowTheSwitch.org +# Copyright (c) 2007-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= + module TypeSanitizer def self.sanitize_c_identifier(unsanitized) # convert filename to valid C identifier by replacing invalid chars with '_' - unsanitized.gsub(/[-\/\\\.\,\s]/, '_') + unsanitized.gsub(/[-\/\\.,\s]/, '_') end end diff --git a/tools/vendor/ceedling/vendor/unity/auto/unity_test_summary.py b/tools/vendor/ceedling/vendor/unity/auto/unity_test_summary.py old mode 100644 new mode 100755 index 00c0da8c..a7d24bad --- a/tools/vendor/ceedling/vendor/unity/auto/unity_test_summary.py +++ b/tools/vendor/ceedling/vendor/unity/auto/unity_test_summary.py @@ -1,10 +1,10 @@ #! python3 -# ========================================== -# Unity Project - A Test Framework for C -# Copyright (c) 2015 Alexander Mueller / XelaRellum@web.de -# [Released under MIT License. Please refer to license.txt for details] -# Based on the ruby script by Mike Karlesky, Mark VanderVoord, Greg Williams -# ========================================== +# ========================================================================= +# Unity - A Test Framework for C +# ThrowTheSwitch.org +# Copyright (c) 2007-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= import sys import os import re diff --git a/tools/vendor/ceedling/vendor/unity/auto/unity_test_summary.rb b/tools/vendor/ceedling/vendor/unity/auto/unity_test_summary.rb index b3fe8a69..0d7f1838 100644 --- a/tools/vendor/ceedling/vendor/unity/auto/unity_test_summary.rb +++ b/tools/vendor/ceedling/vendor/unity/auto/unity_test_summary.rb @@ -1,8 +1,9 @@ -# ========================================== -# Unity Project - A Test Framework for C -# Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams -# [Released under MIT License. Please refer to license.txt for details] -# ========================================== +# ========================================================================= +# Unity - A Test Framework for C +# ThrowTheSwitch.org +# Copyright (c) 2007-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= # !/usr/bin/ruby # @@ -86,7 +87,11 @@ def usage(err_msg = nil) def get_details(_result_file, lines) results = { failures: [], ignores: [], successes: [] } lines.each do |line| - _src_file, _src_line, _test_name, status, _msg = line.split(/:/) + status_match = line.match(/^[^:]+:[^:]+:\w+(?:\([^)]*\))?:([^:]+):?/) + next unless status_match + + status = status_match.captures[0] + line_out = (@root && (@root != 0) ? "#{@root}#{line}" : line).gsub(/\//, '\\') case status when 'IGNORE' then results[:ignores] << line_out @@ -108,7 +113,7 @@ def parse_test_summary(summary) # parse out the command options opts, args = ARGV.partition { |v| v =~ /^--\w+/ } - opts.map! { |v| v[2..-1].to_sym } + opts.map! { |v| v[2..].to_sym } # create an instance to work with uts = UnityTestSummary.new(opts) @@ -124,7 +129,7 @@ def parse_test_summary(summary) uts.targets = results # set the root path - args[1] ||= Dir.pwd + '/' + args[1] ||= "#{Dir.pwd}/" uts.root = ARGV[1] # run the summarizer diff --git a/tools/vendor/ceedling/vendor/unity/auto/yaml_helper.rb b/tools/vendor/ceedling/vendor/unity/auto/yaml_helper.rb index e5a08657..32746db7 100644 --- a/tools/vendor/ceedling/vendor/unity/auto/yaml_helper.rb +++ b/tools/vendor/ceedling/vendor/unity/auto/yaml_helper.rb @@ -1,15 +1,19 @@ -# ========================================== -# Unity Project - A Test Framework for C -# Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams -# [Released under MIT License. Please refer to license.txt for details] -# ========================================== +# ========================================================================= +# Unity - A Test Framework for C +# ThrowTheSwitch.org +# Copyright (c) 2007-24 Mike Karlesky, Mark VanderVoord, & Greg Williams +# SPDX-License-Identifier: MIT +# ========================================================================= require 'yaml' module YamlHelper def self.load(body) - YAML.respond_to?(:unsafe_load) ? - YAML.unsafe_load(body) : YAML.load(body) + if YAML.respond_to?(:unsafe_load) + YAML.unsafe_load(body) + else + YAML.load(body) + end end def self.load_file(file) diff --git a/tools/vendor/ceedling/vendor/unity/src/unity.c b/tools/vendor/ceedling/vendor/unity/src/unity.c index 8c946ebe..7fd703ab 100644 --- a/tools/vendor/ceedling/vendor/unity/src/unity.c +++ b/tools/vendor/ceedling/vendor/unity/src/unity.c @@ -1,8 +1,9 @@ /* ========================================================================= - Unity Project - A Test Framework for C - Copyright (c) 2007-21 Mike Karlesky, Mark VanderVoord, Greg Williams - [Released under MIT License. Please refer to license.txt for details] -============================================================================ */ + Unity - A Test Framework for C + ThrowTheSwitch.org + Copyright (c) 2007-24 Mike Karlesky, Mark VanderVoord, & Greg Williams + SPDX-License-Identifier: MIT +========================================================================= */ #include "unity.h" @@ -356,11 +357,11 @@ void UnityPrintFloat(const UNITY_DOUBLE input_number) { UnityPrint("0"); } - else if (isnan(number)) + else if (UNITY_IS_NAN(number)) { UnityPrint("nan"); } - else if (isinf(number)) + else if (UNITY_IS_INF(number)) { UnityPrint("inf"); } @@ -895,15 +896,15 @@ void UnityAssertEqualIntArray(UNITY_INTERNAL_PTR expected, #ifndef UNITY_EXCLUDE_FLOAT /* Wrap this define in a function with variable types as float or double */ #define UNITY_FLOAT_OR_DOUBLE_WITHIN(delta, expected, actual, diff) \ - if (isinf(expected) && isinf(actual) && (((expected) < 0) == ((actual) < 0))) return 1; \ + if (UNITY_IS_INF(expected) && UNITY_IS_INF(actual) && (((expected) < 0) == ((actual) < 0))) return 1; \ if (UNITY_NAN_CHECK) return 1; \ (diff) = (actual) - (expected); \ if ((diff) < 0) (diff) = -(diff); \ if ((delta) < 0) (delta) = -(delta); \ - return !(isnan(diff) || isinf(diff) || ((diff) > (delta))) + return !(UNITY_IS_NAN(diff) || UNITY_IS_INF(diff) || ((diff) > (delta))) /* This first part of this condition will catch any NaN or Infinite values */ #ifndef UNITY_NAN_NOT_EQUAL_NAN - #define UNITY_NAN_CHECK isnan(expected) && isnan(actual) + #define UNITY_NAN_CHECK UNITY_IS_NAN(expected) && UNITY_IS_NAN(actual) #else #define UNITY_NAN_CHECK 0 #endif @@ -954,12 +955,12 @@ void UnityAssertWithinFloatArray(const UNITY_FLOAT delta, #endif } - if (isinf(in_delta)) + if (UNITY_IS_INF(in_delta)) { return; /* Arrays will be force equal with infinite delta */ } - if (isnan(in_delta)) + if (UNITY_IS_NAN(in_delta)) { /* Delta must be correct number */ UnityPrintPointlessAndBail(); @@ -1098,21 +1099,21 @@ void UnityAssertFloatSpecial(const UNITY_FLOAT actual, { case UNITY_FLOAT_IS_INF: case UNITY_FLOAT_IS_NOT_INF: - is_trait = isinf(actual) && (actual > 0); + is_trait = UNITY_IS_INF(actual) && (actual > 0); break; case UNITY_FLOAT_IS_NEG_INF: case UNITY_FLOAT_IS_NOT_NEG_INF: - is_trait = isinf(actual) && (actual < 0); + is_trait = UNITY_IS_INF(actual) && (actual < 0); break; case UNITY_FLOAT_IS_NAN: case UNITY_FLOAT_IS_NOT_NAN: - is_trait = isnan(actual) ? 1 : 0; + is_trait = UNITY_IS_NAN(actual) ? 1 : 0; break; case UNITY_FLOAT_IS_DET: /* A determinate number is non infinite and not NaN. */ case UNITY_FLOAT_IS_NOT_DET: - is_trait = !isinf(actual) && !isnan(actual); + is_trait = !UNITY_IS_INF(actual) && !UNITY_IS_NAN(actual); break; case UNITY_FLOAT_INVALID_TRAIT: /* Supress warning */ @@ -1182,12 +1183,12 @@ void UnityAssertWithinDoubleArray(const UNITY_DOUBLE delta, #endif } - if (isinf(in_delta)) + if (UNITY_IS_INF(in_delta)) { return; /* Arrays will be force equal with infinite delta */ } - if (isnan(in_delta)) + if (UNITY_IS_NAN(in_delta)) { /* Delta must be correct number */ UnityPrintPointlessAndBail(); @@ -1325,21 +1326,21 @@ void UnityAssertDoubleSpecial(const UNITY_DOUBLE actual, { case UNITY_FLOAT_IS_INF: case UNITY_FLOAT_IS_NOT_INF: - is_trait = isinf(actual) && (actual > 0); + is_trait = UNITY_IS_INF(actual) && (actual > 0); break; case UNITY_FLOAT_IS_NEG_INF: case UNITY_FLOAT_IS_NOT_NEG_INF: - is_trait = isinf(actual) && (actual < 0); + is_trait = UNITY_IS_INF(actual) && (actual < 0); break; case UNITY_FLOAT_IS_NAN: case UNITY_FLOAT_IS_NOT_NAN: - is_trait = isnan(actual) ? 1 : 0; + is_trait = UNITY_IS_NAN(actual) ? 1 : 0; break; case UNITY_FLOAT_IS_DET: /* A determinate number is non infinite and not NaN. */ case UNITY_FLOAT_IS_NOT_DET: - is_trait = !isinf(actual) && !isnan(actual); + is_trait = !UNITY_IS_INF(actual) && !UNITY_IS_NAN(actual); break; case UNITY_FLOAT_INVALID_TRAIT: /* Supress warning */ @@ -1609,8 +1610,8 @@ void UnityAssertEqualString(const char* expected, } } else - { /* handle case of one pointers being null (if both null, test should pass) */ - if (expected != actual) + { /* fail if either null but not if both */ + if (expected || actual) { Unity.CurrentTestFailed = 1; } @@ -1649,8 +1650,8 @@ void UnityAssertEqualStringLen(const char* expected, } } else - { /* handle case of one pointers being null (if both null, test should pass) */ - if (expected != actual) + { /* fail if either null but not if both */ + if (expected || actual) { Unity.CurrentTestFailed = 1; } @@ -2031,15 +2032,22 @@ static void UnityPrintFVA(const char* format, va_list va) UNITY_EXTRACT_ARG(UNITY_UINT, number, length_mod, va, unsigned int); UNITY_OUTPUT_CHAR('0'); UNITY_OUTPUT_CHAR('x'); - UnityPrintNumberHex(number, 8); + UnityPrintNumberHex(number, UNITY_MAX_NIBBLES); break; } case 'p': { - const unsigned int number = va_arg(va, unsigned int); + UNITY_UINT number; + char nibbles_to_print = 8; + if (UNITY_POINTER_WIDTH == 64) + { + length_mod = UNITY_LENGTH_MODIFIER_LONG_LONG; + nibbles_to_print = 16; + } + UNITY_EXTRACT_ARG(UNITY_UINT, number, length_mod, va, unsigned int); UNITY_OUTPUT_CHAR('0'); UNITY_OUTPUT_CHAR('x'); - UnityPrintNumberHex((UNITY_UINT)number, 8); + UnityPrintNumberHex((UNITY_UINT)number, nibbles_to_print); break; } case 'c': @@ -2322,6 +2330,18 @@ int UnityParseOptions(int argc, char** argv) UnityPrint("ERROR: Unknown Option "); UNITY_OUTPUT_CHAR(argv[i][1]); UNITY_PRINT_EOL(); + /* Now display help */ + /* FALLTHRU */ + case 'h': + UnityPrint("Options: "); UNITY_PRINT_EOL(); + UnityPrint("-l List all tests and exit"); UNITY_PRINT_EOL(); + UnityPrint("-f NAME Filter to run only tests whose name includes NAME"); UNITY_PRINT_EOL(); + UnityPrint("-n NAME (deprecated) alias of -f"); UNITY_PRINT_EOL(); + UnityPrint("-h show this Help menu"); UNITY_PRINT_EOL(); + UnityPrint("-q Quiet/decrease verbosity"); UNITY_PRINT_EOL(); + UnityPrint("-v increase Verbosity"); UNITY_PRINT_EOL(); + UnityPrint("-x NAME eXclude tests whose name includes NAME"); UNITY_PRINT_EOL(); + UNITY_OUTPUT_FLUSH(); return 1; } } diff --git a/tools/vendor/ceedling/vendor/unity/src/unity.h b/tools/vendor/ceedling/vendor/unity/src/unity.h index 2785c728..8337c8c6 100644 --- a/tools/vendor/ceedling/vendor/unity/src/unity.h +++ b/tools/vendor/ceedling/vendor/unity/src/unity.h @@ -1,16 +1,17 @@ -/* ========================================== - Unity Project - A Test Framework for C - Copyright (c) 2007-21 Mike Karlesky, Mark VanderVoord, Greg Williams - [Released under MIT License. Please refer to license.txt for details] -========================================== */ +/* ========================================================================= + Unity - A Test Framework for C + ThrowTheSwitch.org + Copyright (c) 2007-24 Mike Karlesky, Mark VanderVoord, & Greg Williams + SPDX-License-Identifier: MIT +========================================================================= */ #ifndef UNITY_FRAMEWORK_H #define UNITY_FRAMEWORK_H #define UNITY #define UNITY_VERSION_MAJOR 2 -#define UNITY_VERSION_MINOR 5 -#define UNITY_VERSION_BUILD 4 +#define UNITY_VERSION_MINOR 6 +#define UNITY_VERSION_BUILD 0 #define UNITY_VERSION ((UNITY_VERSION_MAJOR << 16) | (UNITY_VERSION_MINOR << 8) | UNITY_VERSION_BUILD) #ifdef __cplusplus diff --git a/tools/vendor/ceedling/vendor/unity/src/unity_internals.h b/tools/vendor/ceedling/vendor/unity/src/unity_internals.h index 9f89eda9..1214bf07 100644 --- a/tools/vendor/ceedling/vendor/unity/src/unity_internals.h +++ b/tools/vendor/ceedling/vendor/unity/src/unity_internals.h @@ -1,8 +1,9 @@ -/* ========================================== - Unity Project - A Test Framework for C - Copyright (c) 2007-21 Mike Karlesky, Mark VanderVoord, Greg Williams - [Released under MIT License. Please refer to license.txt for details] -========================================== */ +/* ========================================================================= + Unity - A Test Framework for C + ThrowTheSwitch.org + Copyright (c) 2007-24 Mike Karlesky, Mark VanderVoord, & Greg Williams + SPDX-License-Identifier: MIT +========================================================================= */ #ifndef UNITY_INTERNALS_H #define UNITY_INTERNALS_H @@ -241,16 +242,25 @@ #endif typedef UNITY_FLOAT_TYPE UNITY_FLOAT; -/* isinf & isnan macros should be provided by math.h */ -#ifndef isinf -/* The value of Inf - Inf is NaN */ -#define isinf(n) (isnan((n) - (n)) && !isnan(n)) -#endif - +/* isnan macro should be provided by math.h. Override if not macro */ +#ifndef UNITY_IS_NAN #ifndef isnan /* NaN is the only floating point value that does NOT equal itself. * Therefore if n != n, then it is NaN. */ -#define isnan(n) ((n != n) ? 1 : 0) +#define UNITY_IS_NAN(n) ((n != n) ? 1 : 0) +#else +#define UNITY_IS_NAN(n) isnan(n) +#endif +#endif + +/* isinf macro should be provided by math.h. Override if not macro */ +#ifndef UNITY_IS_INF +#ifndef isinf +/* The value of Inf - Inf is NaN */ +#define UNITY_IS_INF(n) (UNITY_IS_NAN((n) - (n)) && !UNITY_IS_NAN(n)) +#else +#define UNITY_IS_INF(n) isinf(n) +#endif #endif #endif @@ -759,13 +769,25 @@ extern const char UnityStrErrShorthand[]; * Test Running Macros *-------------------------------------------------------*/ +#ifdef UNITY_TEST_PROTECT +#define TEST_PROTECT() UNITY_TEST_PROTECT() +#else #ifndef UNITY_EXCLUDE_SETJMP_H #define TEST_PROTECT() (setjmp(Unity.AbortFrame) == 0) -#define TEST_ABORT() longjmp(Unity.AbortFrame, 1) #else #define TEST_PROTECT() 1 +#endif +#endif + +#ifdef UNITY_TEST_ABORT +#define TEST_ABORT() UNITY_TEST_ABORT() +#else +#ifndef UNITY_EXCLUDE_SETJMP_H +#define TEST_ABORT() longjmp(Unity.AbortFrame, 1) +#else #define TEST_ABORT() return #endif +#endif /* Automatically enable variadic macros support, if it not enabled before */ #ifndef UNITY_SUPPORT_VARIADIC_MACROS diff --git a/tools/waf-pubkey.asc b/tools/waf-pubkey.asc deleted file mode 100644 index 8c122700..00000000 --- a/tools/waf-pubkey.asc +++ /dev/null @@ -1,51 +0,0 @@ ------BEGIN PGP PUBLIC KEY BLOCK----- - -mQINBF+oSEgBEACtvXmcnUw2UqmCymZV2Ceie2V3mJDhx3uFnUAAkZp1is1Fv38l -vcyO+umT2S6E3ZMMon4WS1kuzQw2Eplzf43FXqP5IU1D4sR/SlUafcGQClCBGjsU -1V1dtyiFYQVKQw2ouPh/1i7h2aPkXG9qj3uk5QgFM1UxsxZuaG9TKmDZmC7gARaR -+21GX7M3vHCHy33GBENEJ5Pbb8yZDeTZRlypyZaFDJCqibqh0qB+nvIemyDQKp5e -yg0STFWmBZLDuKw3JtN6ykADsuWLWpXqxUCwD2WZboCNRqfircMTNoCmNYoOyiFf -h04Dy4ao0VPDKJlpMJyZODqHQx1mCoKXcLkVaEomMbimWeS+JKjNCtfJTKOI+hBF -H/0VyDlBju6BCkYXwgVDfQnnXWfXKYVOK4tAHeOkavfOFnLWee90VbSKhsPP3gXc -AcO+0FUKz7UH77PpFrhXrxZE+jY4CzfUqnLXll6Jlze8oqeJlxUxQptRyJTMCsq5 -twEySXXPU+4lUbbb4VDlGH0OAdG3k2DchHmPIhJn90sn+7PBC7LVaaCt8VM4n88M -VF311wgW9pUu+fDa7CKn2KDPDOpe24HuGjhY6WesIL4K0squnT2Bfx/J7iu1Gp7x -qjZGDg5da9VpMP4ZOdmrPbPK3bEZ8hPei3m7Ioyx2x2xJlKJa1BYgFC1xQARAQAB -tBpUaG9tYXMgTmFneSA8dG5hZ3lAd2FmLmlvPokCTAQTAQoANhYhBAs5crLZ4y6r -Qj0uDyK+DGL/v6VIBQJfqEhIAhsDBQkJZgGAAwsJCAUVCgkICwIeAQIXgAAKCRAi -vgxi/7+lSEpdD/9IbBZLYIvyeKDQoOZlnvyP0tpusfdPaqaCfOdgkklFiNDmxoCp -TATTlUfIS1Mnm8rULLVe1QmM5NZx40Y1qfs+j1mJK1awJXMpSFvIttlXjjNGwdbO -2dp536kP7X9CRq/9hzmSalwsSQHfpkBWTRdqennyQJHCMM+YhXFQhrb9qm8awePV -ZonCuf6o9e08im78rWSFWPi9gpOmRSvcoDY0kv7h8R5WlEjRuzrNDMePs42seoz9 -c70ITgM1fG1efIN78XMKSmdrXrf7rMRekfZ9rqxNbvgslYUohBE8jWBwON96YlGh -+qXLr3vgfjghTjHHMAMxSkdywAbps1JKB+mHDIHv4RGiBFXTJ6Qob8+O0dyrTY+k -dfswq1e1vZzABfj8JAekQtWv4syYdm2+fEC9oi4nqxXb1unLR8TthJuceUQwDdIG -pk6lqIkWqQftVu3FBbEGkwsCW3fDwqoJAhdjVxORgAe/JL0r0abpq+vm0+vN+lkL -ZdOWcSsnGxmpIzfuYRFo7W1qSz8UEfUKdpo5q/hsmCVHSR2aIsRVM23XByPtw6YU -CczlQ3Zz3YfJpknB1j+9uEd9wTTl7OC+xPwLBNzOa1lCa1hrPtnCbIFwtv49iVYd -sZf6RWZ4CQuV2MfdFWxpUh0KUfSuarv+u4bs8t0Me5RJlwcv7AnjeBH51bkCDQRf -qEhIARAAxcqbbAqivd1SvzqkWNu8RSTFtaofRbVFhyr1yIhXDA6rGuORj/NQRp6n -A5iPqBBvdpYR83xX8F2Bkv+33nIscxkAInuJVvAJ017LnYSDlikoUuwCrsjrS80k -haTO47i/VDbA75MlXqdejA9QKDSHu2S3+szjeU1/ACjWKdqHAN9I0LV4ATnybXEZ -178CxT3CTBbdkdAUV2Gv683awQfyBP0p+24MNjK+b+bAlyLXpN3CR59coyV8zH42 -5ReqXCeSoAhyvA5qa4KwZQ+zO2CVqb66LzuNjMZY536mPFTrUTXJRuPl+WmN0OjZ -FCbB8dBm7mnuEtgnUtZYK0UFyiHEG8jr4qbGlgbyJOcQYmQ/frba+eFL6LgXclNM -t4rOpD7KkM20zSU48aIyk+fANIN/MFAV1usJMri7DF4bmWgwBTm3T5xR0CELTlY7 -sE8VRssL5exMBSC0CbsTRmM4/qmU5NPRYS40BPVL8T0sYVnAzRUcF64bjjptMikN -DJkdASrzM23m/+m5N1rn5CfYDlwyN4cxlUmRQBQy25lkNPZZJKZfkUAbWYNfs9v3 -Jvp2zyWr4hO874dRU82ovfvQzCCIbtpy6SxhSmQ2E338c4GpAuv3Pp7Dr/lTWSCY -MUbNwd99SlGJ/FDqvbF+e0U9JZ2HA+0/NWS6pFZnR8ZeRarAr3EAEQEAAYkCPAQY -AQoAJhYhBAs5crLZ4y6rQj0uDyK+DGL/v6VIBQJfqEhIAhsMBQkJZgGAAAoJECK+ -DGL/v6VIzwIP/A4n5MFiB12OSokOdb5qtv66T9AwAg6G9LkZQExUtt2CLt+1BuxJ -f1V2kW/xFZ/EJi0ZiDmmf0npY3YTclYxcBPiNCDwNSL11p6wq3ACg/muhbz//NLL -tVKDEYf1DgYEqR0Ya9N8WtraI6MAeHPEYCZDBl2M7fm+r0pyErhKHnsXsMdtdV2k -1ZudjFHLeAGrHMkAm0IiyYUFY/Ww8KgVJex+m1nNpatMJhjQz+aAVv3EyVpyyaHc -684+t89vdnmWfdHQbQysyvNyWegtoalE66kUtk4cpwc8+voMuKl4y1U8jvZIR3Hh -XKqKKfY23V1Tr9etM7jnYLfChUkOK21xBk0I345cuy/XfZa1FED7Qq5Sia04zlFe -Mv4378hVt5VSSmr5mCVdVkopu1ctFjB3ZXD0TAUi8hmTks+laXFKpgLETD1iMQp2 -Inc2AWDX1ASIwvZxt/NqWika80ennnPUJY/hMVcozwQv1Z7PlfvhWxTXWGCl88Xw -ojLOD+TjNspMv/yXCaadAg4PrFJKXB6kX77rd0XCD9lOPATdMA60mvfHdCZyCHPp -B/wA41BB34+AC+I5TbMGM/mgQGpQ6nkCAU7pyxJ9Q+Egz2OSQibNAbcGrO5YZ6ko -cy15xEk3XzLqVLTA+euLC3z8ql6DFkBxt6Ta0pEUaYKRUAQYFADhd46E -=7TXb ------END PGP PUBLIC KEY BLOCK----- diff --git a/tools/waf-tools/doxygen.py b/tools/waf-tools/doxygen.py deleted file mode 100644 index ea6d4929..00000000 --- a/tools/waf-tools/doxygen.py +++ /dev/null @@ -1,125 +0,0 @@ -#! /usr/bin/env python -# encoding: UTF-8 -# Thomas Nagy 2008-2010 (ita) - -# changed by the foxBMS Team: -# - applied black to have a uniform style guide with in the foxBMS project -# - fixed things pylint found -# - some variables/methods etc. were renamed -# - parsing the doxygen file has been simplified to our needs -# Compare to -# https://gitlab.com/ita1024/waf/-/blob/waf-2.0.20/waflib/extras/doxygen.py -# if you want to see all changes in detail. - -"""Implements a waf tool to run doxygen - -:numref:`doxygen-usage` shows how to use this tool. - -.. code-block:: python - :caption: doxygen.py - :name: doxygen-usage - :linenos: - - def configure(conf): - conf.load("doxygen") - - def build(bld): - bld(features="doxygen", doxygen_conf="doxygen.conf") - -""" - -import os -import os.path -import re - -from waflib import Context, Node, Task, TaskGen - - -class doxygen(Task.Task): # pylint: disable=invalid-name - """Doxygen task""" - - color = "BLUE" - ext_in = [".c", ".h"] - - run_str = "${DOXYGEN} ${SRC[0].abspath()}" - - def runnable_status(self): - for i in self.run_after: - if not i.hasrun: - return Task.ASK_LATER - # all options must be on a single line - doxygen_full_config = self.inputs[0].read().splitlines() - self.doxygen_config = {} # pylint: disable=attribute-defined-outside-init - for i in doxygen_full_config: - if not i.startswith("#") and not i == "": - i_txt = re.sub(" +", " ", i).replace(" = ", "=") - try: - key, val = i_txt.split("=") - self.doxygen_config[key] = val.split(" ") - except ValueError: - # not simple parsable, ignore, as we are only interested - # in a few simple values - pass - self.doxygen_input = [] # pylint: disable=attribute-defined-outside-init - for node in self.doxygen_config["INPUT"]: - self.doxygen_input.append(self.generator.bld.root.find_node(node)) - - # Output path is always an absolute path as it was transformed above. - # W0201 is 'attribute-defined-outside-init' - out_dir = self.doxygen_config["OUTPUT_DIRECTORY"][0] - path = self.generator.bld.path - self.output_dir = path.find_or_declare(out_dir) # pylint: disable=W0201 - self.output_dir.mkdir() - self.signature() - return Task.Task.runnable_status(self) - - def scan(self): - """gets all sources from the INPUT directory based on the FILE_PATTERNS - and excludes everything found by EXCLUDE_PATTERNS""" - exclude_patterns_config = self.doxygen_config.get("EXCLUDE_PATTERNS", []) - exclude_patterns = [ - pattern.replace("*/", "**/") for pattern in exclude_patterns_config - ] - file_patterns = self.doxygen_config.get("FILE_PATTERNS", ["*.c", "*.h"]) - if self.doxygen_config.get("RECURSIVE", ["YES"]) == ["YES"]: - file_patterns = [f"**/{pattern}" for pattern in file_patterns] - nodes = [] - names = [] - for node in self.doxygen_input: - if os.path.isdir(node.abspath()): - for i in node.ant_glob(incl=file_patterns, excl=exclude_patterns): - nodes.append(i) - else: - nodes.append(node) - return (nodes, names) - - def post_run(self): - nodes = self.output_dir.ant_glob("**/*", quiet=True) - for node in nodes: - self.generator.bld.node_sigs[node] = self.uid() - self.outputs += nodes - return Task.Task.post_run(self) - - -@TaskGen.feature("doxygen") -def process_doxygen(self): - """creates the doxygen task""" - if not getattr(self, "doxygen_conf", None): - self.generator.bld.fatal("No doxygen configuration file supplied.") - if not isinstance(self.doxygen_conf, Node.Node): - self.generator.bld.fatal("'doxygen_conf' must be a Node.") - - self.create_task( - "doxygen", - self.doxygen_conf, - cwd=self.bld.path.get_bld().abspath(), - output=Context.STDERR, - ) - - -def configure(conf): - """Check if doxygen and dot are available. - - Dot is needed to draw the diagrams""" - conf.find_program("doxygen", var="DOXYGEN") - conf.find_program("dot", var="DOT") diff --git a/tools/waf-tools/f_axivion.py b/tools/waf-tools/f_axivion.py old mode 100644 new mode 100755 index 346351ef..5ebe5275 --- a/tools/waf-tools/f_axivion.py +++ b/tools/waf-tools/f_axivion.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -50,9 +49,11 @@ from waflib.TaskGen import taskgen_method from waflib.Configure import conf -import f_ti_arm_helper # pylint: disable=unused-import -import f_ti_arm_tools # pylint: disable=unused-import -import f_ti_color_arm_cgt # pylint: disable=unused-import +# pylint: disable=unused-import +import f_ti_arm_helper # noqa: F401 +import f_ti_arm_tools # noqa: F401 +import f_ti_color_arm_cgt # noqa: F401 +# pylint: enable=unused-import def configure(configure_context): diff --git a/tools/waf-tools/f_bootstrap_library_project.py b/tools/waf-tools/f_bootstrap_library_project.py old mode 100644 new mode 100755 index 1d0b21d7..094f5edb --- a/tools/waf-tools/f_bootstrap_library_project.py +++ b/tools/waf-tools/f_bootstrap_library_project.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -50,7 +49,6 @@ import tarfile from tempfile import NamedTemporaryFile -import black from waflib import Context from waflib.Build import BuildContext @@ -73,13 +71,14 @@ def bootstrap_library_project(ctx): ctx.path.find_node("LICENSE.md"), ] tools = [ - ctx.path.find_node("waf.bat"), - ctx.path.find_node("waf.sh"), + ctx.path.find_node("fox.bat"), + ctx.path.find_node("fox.ps1"), + ctx.path.find_node("fox.py"), + ctx.path.find_node("fox.sh"), ctx.path.find_node("tools/waf"), - ctx.path.find_node("tools/waf-tools/f_miniconda_env.py"), - ctx.path.find_node("tools/waf-tools/why.py"), ] tools.extend(ctx.path.ant_glob("conf/env/** conf/cc/remarks.txt tools/utils/**")) + tools.extend(ctx.path.ant_glob("cli/**/*.py")) lib_cc_options = ctx.path.find_node( "docs/software/build-process/misc/libcc-options.yaml" ) @@ -107,12 +106,6 @@ def bootstrap_library_project(ctx): compiler_tool_txt_new = re.sub( r'\s{0,}(,)?\s{0,}"hcg_compiler"\s{0,}(,)?\s{0,}', "", compiler_tool_txt_new ) - try: - compiler_tool_txt_new = black.format_file_contents( - compiler_tool_txt_new, fast=False, mode=black.FileMode() - ) - except black.NothingChanged: - pass commit_id = "unknown" try: repo = Repo(search_parent_directories=True) @@ -124,7 +117,7 @@ def bootstrap_library_project(ctx): f"build a library for foxBMS (based on {commit_id}).\n\nFor details visit " "https://foxbms.org.\n" ) - with tarfile.open("library-project.tar.bz2", mode="w:bz2") as tar: + with tarfile.open("library-project.tar.gz", mode="w:gz") as tar: for i in tools + misc: tar.add(i.relpath()) tar.add( diff --git a/tools/waf-tools/f_check_db_vars.py b/tools/waf-tools/f_check_db_vars.py old mode 100644 new mode 100755 index 09d5de6c..847d5781 --- a/tools/waf-tools/f_check_db_vars.py +++ b/tools/waf-tools/f_check_db_vars.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -156,7 +155,7 @@ def run(self): "Project will not compile with that error." ) - def keyword(self): # pylint: disable=no-self-use + def keyword(self): """displayed keyword when this check is run""" return "Checking for database variables in" diff --git a/tools/waf-tools/f_clang_format.py b/tools/waf-tools/f_clang_format.py deleted file mode 100644 index a4e1cadf..00000000 --- a/tools/waf-tools/f_clang_format.py +++ /dev/null @@ -1,116 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -r"""Implements a waf tool to run -`clang-format `_. - -:numref:`f-clang-format-usage` shows how to use this tool. - -.. code-block:: python - :caption: f_clang-format.py - :name: f-clang-format-usage - :linenos: - - def options(opt): - opt.load("clang_format") - - def configure(conf): - conf.load("clang_format") - - def build: - files = bld.path.ant_glob("\*\*/\*.c") - bld(features="clang-format", files=files) - -""" - -import os - -from waflib import Task, TaskGen, Utils - - -class clang_format(Task.Task): # pylint: disable-msg=invalid-name - """Task to run clang-format on all given source files""" - - #: str: color in which the command line is displayed in the terminal - color = "BLUE" - - vars = ["CLANG_FORMAT_OPTIONS", "CLANG_FORMAT_CONFIGURATION_FILES"] - - run_str = "${CLANG_FORMAT} ${CLANG_FORMAT_OPTIONS} ${SRC[0].abspath()}" - - -@TaskGen.feature("clang-format") -def process_clang_format(self): - """creates clang-format task for each input source""" - if not getattr(self, "files", None): - self.bld.fatal("No files given.") - for src in self.files: - self.create_task("clang_format", src, cwd=self.path) - - -def options(opt): - """Passing options to clang-format""" - opt.add_option( - "--clang-format-option", - action="append", - default=[], - dest="CLANG_FORMAT_OPTION", - help="Options for clang-format", - ) - - -def configure(conf): - """configuration step of the clang-format tool - - - searches for the program ``clang-format`` - - applies configured options - """ - # check first for clang-format in the PATH. If it is not present search in - # the default installation directory - conf.start_msg("Checking for program 'clang-format'") - conf.find_program("clang-format", mandatory=False) - if not conf.env.CLANG_FORMAT: - if Utils.is_win32: - conf.find_program( - "clang-format", - path_list=[os.path.join(os.environ["ProgramFiles"], "LLVM", "bin")], - ) - conf.end_msg(conf.env.get_flat("CLANG_FORMAT")) - conf.env.append_unique("CLANG_FORMAT_OPTIONS", conf.options.CLANG_FORMAT_OPTION) diff --git a/tools/waf-tools/f_doxygen.py b/tools/waf-tools/f_doxygen.py new file mode 100755 index 00000000..9ffee734 --- /dev/null +++ b/tools/waf-tools/f_doxygen.py @@ -0,0 +1,66 @@ +#!/usr/bin/env python3 +# +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# All rights reserved. +# +# SPDX-License-Identifier: BSD-3-Clause +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# We kindly request you to use one or more of the following phrases to refer to +# foxBMS in your hardware, software, documentation or advertising materials: +# +# - "This product uses parts of foxBMS®" +# - "This product includes parts of foxBMS®" +# - "This product is derived from foxBMS®" + + +"""Simple doxygen runner""" + +from waflib import Task, TaskGen + + +class Doxygen(Task.Task): + """Doxygen task""" + + color = "BLUE" + + run_str = "${DOXYGEN} ${SRC[0].abspath()}" + always_run = True + + +@TaskGen.feature("doxygen") +def process_doxygen(self): + """Creates the doxygen task""" + self.create_task( + "Doxygen", self.doxygen_conf, cwd=self.bld.path.get_bld().abspath() + ) + + +def configure(conf): + """Check if doxygen and dot are available.""" + conf.find_program("doxygen", var="DOXYGEN") + conf.find_program("dot", var="DOT") diff --git a/tools/waf-tools/f_guidelines.py b/tools/waf-tools/f_guidelines.py deleted file mode 100644 index 68ba7c8c..00000000 --- a/tools/waf-tools/f_guidelines.py +++ /dev/null @@ -1,2071 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Implements a waf tool to check for foxBMS project guidelines""" - -import collections -import datetime -import json -import os -import pathlib -import re -from codecs import BOM_UTF8, BOM_UTF16_BE, BOM_UTF16_LE, BOM_UTF32_BE, BOM_UTF32_LE -from enum import Enum - -from waflib import Context, Logs, Task, TaskGen -from waflib.Build import BuildContext - -# pylint: disable-msg=invalid-name -# pylint: disable=no-member -# pylint: disable=too-many-lines - -TOOLDIR = os.path.dirname(os.path.realpath(__file__)) - - -class AutoNumberGuidelineErrors(Enum): - """Auto numbering Enum - - Inherits from enum and provides an automatic numeration for all its - members - """ - - def __new__(cls): - """overridden __new__ class method - - Each time a member in an AutoNumberGuidelineErrors enum is assigned, - the member value is set to the number of actual members. The counting - starts with 0. - """ - value = len(cls.__members__) - obj = object.__new__(cls) - obj._value_ = value - return obj - - -class GuidelineViolations(AutoNumberGuidelineErrors): - """Assign numbers to our error codes - - GuidelineViolations inherits from AutoNumberGuidelineErrors and numbers - are automatically set for each error code. The counting starts with 0 for - NO_VIOLATION. - """ - - NO_VIOLATION = () - GENERAL_FORBIDDEN_FILENAME = () - GENERAL_NOT_UNIQUE_FILENAME = () - GENERAL_EOF_NO_EMPTY_NEWLINE = () - GENERAL_EOF_TOO_MANY_EMPTY_NEWLINES = () - GENERAL_TRAILING_WHITESPACE = () - GENERAL_TABS = () - GENERAL_ENCODING = () - HEADER = () - C_GUARD = () - C_DOXYGEN = () - C_SECTION = () - C_COMMENT_STYLE = () - RST_MISSING_INCLUDE = () - RST_ORPHAN = () - RST_HEADING = () - C_UNIT_TEST_DIRECTIVES = () - - -def options(opt): - """Defines options that can be passed to waf""" - opt.add_option( - "--commit-year", - action="store", - default=datetime.datetime.now().year, - dest="COMMIT_YEAR", - help="Date to be checked", - ) - opt.load("f_black", tooldir=TOOLDIR) - opt.load("f_clang_format", tooldir=TOOLDIR) - opt.load("f_pylint", tooldir=TOOLDIR) - - -def configure(conf): - "Configures all sub-tools the guidelines tool needs" - # black - conf.load("f_black", tooldir=TOOLDIR) - conf.env.BLACK_CONFIG = [ - conf.path.find_node(os.path.join("conf", "fmt", "pyproject.toml")).abspath() - ] - if not conf.env.BLACK_OPTIONS: - conf.env.BLACK_OPTIONS = ["--config", conf.env.BLACK_CONFIG[0], "--quiet"] - # clang-format - conf.load("f_clang_format", tooldir=TOOLDIR) - if not conf.env.CLANG_FORMAT_OPTIONS: - conf.env.CLANG_FORMAT_OPTIONS = ["-i", "-style=file"] - # pylint - conf.load("f_pylint", tooldir=TOOLDIR) - conf.env.PYLINT_CONFIG = [ - conf.path.find_node(os.path.join("conf", "spa", ".pylintrc")).abspath() - ] - if not conf.env.PYLINT_OPTIONS: - conf.env.PYLINT_OPTIONS = [f"--rcfile={conf.env.PYLINT_CONFIG[0]}"] - - -class filenames(Task.Task): - """Class to implement the filenames check - - A task is only executed if the filename of a file or the regular expression for - correct filenames is changed. - - """ - - # color (string): color in which the command line is displayed in the terminal - color = "BLUE" - - # vars (list): contains a condition which triggers the execution of the task. - # The condition is the change of the corresponding part in the - # configuration file - vars = ["CHECK_CONFIG_GEN_001"] - - def run(self): - """calls test function and prints the error message - - A list (in self.input) containing the name of the to be checked file - is passed as first argument in the task generation. The second argument - self.rule_name contains the name of the style guide rule. Depending on - the return value of the test function, an error message - with incorrect filename is printed. - - Returns: - int: - returns 0 for no filename rule violation otherwise the value - of GuidelineViolations.GENERAL_FORBIDDEN_FILENAME - """ - - error = self.test(self.inputs[0].name, self.regex) - - if error != GuidelineViolations.NO_VIOLATION: - Logs.error( - f"{self.rule_name}: File/directory '{self.inputs[0].abspath()}' " - f"does not match to ({self.regex})." - ) - return error.value - - @staticmethod - def test(filename, reg): - """Implements check that filename does not include forbidden - characters - - Args: - filename (string): the name of the to be checked file - reg (regex): a compiled regular expression for a correct filename - - Returns: - GuidelineViolations: - GENERAL_FORBIDDEN_FILENAME or NO_VIOLATION depending on the test result - """ - error = GuidelineViolations.NO_VIOLATION - if not reg.search(filename): - error = GuidelineViolations.GENERAL_FORBIDDEN_FILENAME - return error - - def keyword(self): - """Displayed keyword for check""" - return f"Checking filename ({self.rule_name})" - - -class unique_filenames(Task.Task): - """Class to implement the filename uniqueness check - - A task is only executed if a filename of a file is changed. - A filename is not allowed to occur twice or more in the repository. - - """ - - # color (string): color in which the command line is displayed in the terminal - color = "BLUE" - # vars (list): contains a condition which triggers the execution of the task. - # The condition is the change of the corresponding part in the - # configuration file - vars = ["CHECK_CONFIG_GEN_002"] - - def run(self): - """calls test function and prints the error message - - A list (in self.input) containing the name of the to be checked file - is passed as first argument in the task generation. The second argument - self.rule_name contains the name of the style guide rule. run calls the - test function and passes all filenames in the repository. Depending on - the return value of the test function, an error message with all - duplicates is printed. - - Returns: - int: - returns 0 for no unique filename rule violation otherwise the value - of GuidelineViolations.GENERAL_NOT_UNIQUE_FILENAME - """ - - error, duplicates = self.test( - [pathlib.Path(i.abspath()).name for i in self.inputs] - ) - if error != GuidelineViolations.NO_VIOLATION: - for i in duplicates: - ith_dup = self.generator.path.ant_glob(f"**/{i}", quiet=True) - Logs.error( - f"{self.rule_name}: The file {i} exists multiple times: {ith_dup}" - ) - return error.value - - @staticmethod - def test(all_filenames): - """checks whether there are files with the same name in the repository - - The collections.Counter puts all filenames with their count - in a dictionary. If the count is bigger than one, the filename is - inserted into the list of duplicates. - - Args: - all_filenames (list): list with all filenames in the repository - - Returns: - GuidelineViolations: - If the duplicates list is not empty a GuidelineViolations - GENERAL_NOT_UNIQUE_FILENAME is returned with the duplicates list - """ - - error = GuidelineViolations.NO_VIOLATION - duplicates = [ - i for i, count in collections.Counter(all_filenames).items() if count > 1 - ] - if duplicates: - error = GuidelineViolations.GENERAL_NOT_UNIQUE_FILENAME - return error, duplicates - - def keyword(self): - """Displayed keyword for check""" - return f"Checking filename uniqueness ({self.rule_name})" - - -class encoding(Task.Task): - """Class to implement the utf-8 coding check - - . - - """ - - # color (string): color in which the command line is displayed in the terminal - color = "BLUE" - # invalid (tuple): lists all forbidden BOM - invalid = (BOM_UTF8, BOM_UTF16_BE, BOM_UTF16_LE, BOM_UTF32_BE, BOM_UTF32_LE) - # vars (list): contains a condition which triggers the execution of the task. - # The condition is the change of the corresponding part in the - # configuration file - vars = ["CHECK_CONFIG_GEN_003"] - - def run(self): - """Implements check that a file can be opened in utf-8 mode and has - no BOM markers - - A list (in self.input) containing the path of the to be checked file - is passed as first argument in the task generation. The second argument - self.rule_name contains the name of the style guide rule. run calls the - test function and passes file path, rule name and the encoding style (utf-8). - Depending on the return value of the test function, an error message is - printed. - - Returns: - int: - returns 0 for no encoding violation otherwise the value - of GuidelineViolations.GENERAL_ENCODING - """ - - error, error_message = self.test( - self.inputs[0].abspath(), - self.rule_name, - self.encoding, - ) - Logs.error(error_message) - return error.value - - @staticmethod - def test(file_path, rulename, encoding_type="utf-8"): - """checks whether a file is correct encoded - - file in file_path is first opened and read with utf-8 encoding and - afterwards checked for not allowed BOM - - Args: - file_path (string): path to file - encoding_type (string): expected file encoding (default: "utf8") - - Raises: - UnicodeDecodeError: DecodeError is thrown if the file can not be read - with the specified encoding - - Returns: - GuidelineViolations: - If the file can be opened with the specified encoding and contains - no BOM, GuidelineViolations.NO_VIOLATION is returned. - Otherwise GuidelineViolations.GENERAL_ENCODING is returned along with - a more detailed error message - """ - err = GuidelineViolations.NO_VIOLATION - err_msg = "" - try: - with open(file_path, "r", encoding=encoding_type) as f: - f.read() - # UnicodeDecodeError if text can not be decoded - # LookupError if the encoding is not known - except (UnicodeDecodeError, LookupError) as err: - err_msg = f"{rulename}: File '{file_path}' " - err_msg += f"can not be read with encoding {encoding_type}.\n" - err_msg += f"{err}" - err = GuidelineViolations.GENERAL_ENCODING - return err, err_msg - # BOM are only part of utf-8 - if encoding_type == "utf-8": - with open(file_path, "r+b") as f: - try: - txt = f.readlines()[0] - except IndexError: - pass # file is empty - else: - if txt.startswith(encoding.invalid): - err_msg = f"{rulename}: File" - err_msg += f" '{file_path}' uses BOM markers" - err = GuidelineViolations.GENERAL_ENCODING - return err, err_msg - - def keyword(self): - """Displayed keyword for check""" - return f"Checking encoding ({self.rule_name})" - - -class posix_3_206(Task.Task): - """Class to implement the POSIX 3.206 check - - A task is only executed if a file or the check itself is changed. - - """ - - # color (string): color in which the command line is displayed in the terminal - color = "BLUE" - # vars (list): contains a condition which triggers the execution of the task. - # The condition is the change of the corresponding part in the - # configuration file - vars = ["CHECK_CONFIG_GEN_004"] - - def run(self): - """Implements check that the file contains one empty line at the end - - A list (in self.input) containing the text of the to be checked file - is passed as first argument in the task generation. The second argument - self.rule_name contains the name of the style guide rule. run calls the - test function and passes the text of the to be checked file. Depending on - the return value of the test function, an error message is printed. - - Returns: - int: - If no violation is found the value of - GuidelineViolations.NO_VIOLATION is returned. If a file contains - no empty line or too many empty lines an error message the is - printed and the value of - GuidelineViolations.GENERAL_EOF_NO_EMPTY_NEWLINE or - GuidelineViolations.GENERAL_EOF_TOO_MANY_EMPTY_NEWLINES is returned - """ - - error = self.test(self.inputs[0].read()) - if error != GuidelineViolations.NO_VIOLATION: - base_error_msg = f"{self.rule_name}: File '{self.inputs[0].abspath()}'" - if error == GuidelineViolations.GENERAL_EOF_NO_EMPTY_NEWLINE: - Logs.error( - f"{base_error_msg} misses an empty line at the end of the file." - ) - elif error == GuidelineViolations.GENERAL_EOF_TOO_MANY_EMPTY_NEWLINES: - Logs.error( - f"{base_error_msg} adds unnecessary newlines line at the end of the file." - ) - return error.value - - @staticmethod - def test(txt): - """Implements check that text ends with a single empty line - - Args: - txt (string): contains text that should have only one single - empty line at the end - - Returns: - GuidelineViolations: - GuidelineViolations.NO_VIOLATION if the text ends with an - empty line, GuidelineViolations.GENERAL_EOF_NO_EMPTY_NEWLINE if a - newline is missing at the end of the text or - GuidelineViolations.GENERAL_EOF_TOO_MANY_EMPTY_NEWLINES if there is - more than one empty line at the end of the text. - """ - - error = GuidelineViolations.NO_VIOLATION - if not txt == "": - if not txt.endswith(os.linesep): - error = GuidelineViolations.GENERAL_EOF_NO_EMPTY_NEWLINE - if txt and txt.splitlines()[-1] == "": - error = GuidelineViolations.GENERAL_EOF_TOO_MANY_EMPTY_NEWLINES - return error - - def keyword(self): - """Displayed keyword for check""" - return f"Checking POSIX 3.206 ({self.rule_name})" - - -class trailing_whitespace(Task.Task): - """Class to implement the trailing whitespace check - - . - - """ - - # color (string): color in which the command line is displayed in the terminal - color = "BLUE" - # vars (list): contains a condition which triggers the execution of the task. - # The condition is the change of the corresponding part in the - # configuration file - vars = ["CHECK_CONFIG_GEN_005"] - - def run(self): - """calls test function and prints the line number with trailing whitespace - - A list (in self.input) containing the path of the to be checked file - is passed as first argument in the task generation. The second argument - self.rule_name contains the name of the style guide rule. run calls the - test function and passes the text of the to be checked file. Depending - on the return value of the test function, an error message is printed. - - Returns: - int: - If no violation is found the value of - GuidelineViolations.NO_VIOLATION is returned. If a line in the - file contains whitespace at the end - GuidelineViolations.GENERAL_TRAILING_WHITESPACE is returned - """ - errors = self.test(self.inputs[0].read()) - - if errors: - for err in errors: - Logs.error( - f"{self.rule_name}: File '{self.inputs[0].abspath()}' " - f"adds trailing whitespace in {self.inputs[0].abspath()}:{err[1]}" - ) - return GuidelineViolations.GENERAL_TRAILING_WHITESPACE.value - return GuidelineViolations.NO_VIOLATION.value - - @staticmethod - def test(txt): - """checks line by line the text whether there are trailing whitespace - - Args: - txt (string): text of the to be checked file - - Returns: - list: - A list of tuples with GuidelineViolations members and the line - number containing trailing whitespace. - """ - - errors = [] - txt_list = txt.splitlines() - for i, val in enumerate(txt_list): - if val.endswith(" "): - errors.append((GuidelineViolations.GENERAL_TRAILING_WHITESPACE, i + 1)) - return errors - - def keyword(self): - """Displayed keyword for check""" - return f"Checking trailing whitespace ({self.rule_name})" - - -class tabs(Task.Task): - """Class to implement running the trailing whitespace check - - . - - """ - - # color (string): color in which the command line is displayed in the terminal - color = "BLUE" - # vars (list): contains a condition which triggers the execution of the task. - # The condition is the change of the corresponding part in the - # configuration file - vars = ["CHECK_CONFIG_GEN_006"] - - def run(self): - """calls test function and prints out the line with tabs in it - - A list (in self.input) containing the path of the to be checked file - is passed as first argument in the task generation. The second argument - self.rule_name contains the name of the style guide rule. run calls the - test function and passes the text of the to be checked file. Depending - on the return value of the test function, an error message is printed. - - Returns: - int: - If no violation is found the value of - GuidelineViolations.NO_VIOLATION is returned. If a line in the - file contains tabs the value of GuidelineViolations.GENERAL_TABS is returned - """ - - errors = self.test(self.inputs[0].read()) - - if errors: - for err in errors: - Logs.error( - f"{self.rule_name}: File {self.inputs[0].abspath()}:{err[1]} " - "forbidden tabs found" - ) - return GuidelineViolations.GENERAL_TABS.value - return GuidelineViolations.NO_VIOLATION.value - - @staticmethod - def test(txt): - """Implements check that lines in text do not have tabs - - Args: - txt (string): text of the to be checked file - - Returns: - list: - A list of tuples with GuidelineViolations members and the line - number containing tabs. - """ - errors = [] - txt_list = txt.splitlines() - for i, val in enumerate(txt_list): - if "\t" in val: - errors.append((GuidelineViolations.GENERAL_TABS, i + 1)) - return errors - - def keyword(self): - """Displayed keyword for check""" - return f"Checking tabs ({self.rule_name})" - - -class c_check_doxygen(Task.Task): - """Class to implement the doxygen comment check - - A task is only executed if a file or the regular expression C_004_REGEX - is changed. - - """ - - # color (string): color in which the command line is displayed in the terminal - color = "BLUE" - # vars (list): contains a condition which triggers the execution of the task. - # The condition is the change of the corresponding part in the - # configuration file - vars = ["CHECK_CONFIG_C_004"] - - def run(self): - """ - calls test function and prints out the line with a wrong file level - doxygen comment - - A list (in self.input) containing the path of the to be checked file - is passed as first argument in the task generation. The second argument - self.rule_name contains the name of the style guide rule. run calls the - test function and passes the filename, the text of the to be checked - file and regular expression from rules.json. Depending on the return - value of the test function, an error message is printed. - - Returns: - int: - If no violation is found the value of - GuidelineViolations.NO_VIOLATION is returned. If a line is not - conform with the FILE LEVEL Doxygen rule the - GuidelineViolations.C_DOXYGEN value is returned - - """ - errors = self.test( - self.inputs[0].name, - self.inputs[0].read(), - self.regex, - self.generator.bld.env.VERSION, - ) - if errors: - for err in errors: - Logs.error( - f"{self.rule_name}: In file: " - f"{self.inputs[0].abspath()}:{err[1]} {err[2]}" - ) - return GuidelineViolations.C_DOXYGEN.value - return GuidelineViolations.NO_VIOLATION.value - - @staticmethod - def test(filename, txt, regex, version): - """Implements check that the file level doxygen comments are correct - - This function checks whether the FILE LEVEL Doxygen comment - format is existent and in the correct order in the file. The first for - loop compiles the needed regular expressions for the FILE LEVEL Doxygen - comment style and the second loop goes line by line over the whole file. - doxygen_regex_number is the current searched regular expression and - doxygen_regex_found_line is the line of the match of the last searched - regular expression. In the second loop the beginning of the C - comment is searched first. A second occurrence of the C comment start sets - doxygen_regex_found_line to the actual line, because not all C comments - are FILE LEVEL Doxygen comments. The next if clause looks for the end - of the Doxygen comment. At last it is checked whether all necessary - comments exists in the right order. - - Args: - filename (string): name of the actual file - txt (string): text of the to be checked file - config (dict): dictionary containing regular expressions - - Returns: - list: - A list of tuple with GuidelineViolations member and the error - message - """ - errors = [] - txt_list = txt.splitlines() - doxygen_regex = [] - for i, regex_string in enumerate(regex): # compile all doxygen regex - regex_string = regex_string.replace("@FILENAME@", filename) - regex_string = regex_string.replace("@VERSION@", version) - compiled_regex = re.compile(regex_string) - doxygen_regex.append(compiled_regex) - - doxygen_regex_number = 0 # which doxygen regex is searched at the moment - doxygen_regex_found_line = -1 # in which line the last doxygen regex was found - # Search the start of the File Level Doxygen - for i, line in enumerate(txt_list): # searching line by line - if re.match(doxygen_regex[0], line): # try to find \** - if doxygen_regex_number == 0: - doxygen_regex_number = 1 - doxygen_regex_found_line = i - continue - if doxygen_regex_number == 1: - # If \* was found a second time found line is set to actual line - doxygen_regex_found_line = i - continue - - # Search end mark of File Level Doxygen - if doxygen_regex_number == len(doxygen_regex) - 2: - # if all doxygen regex were found, except the last two - if re.match(doxygen_regex[len(doxygen_regex) - 1], line): - # if */ was found end search loop - break - if re.match(doxygen_regex[len(doxygen_regex) - 2], line): - # if [ ]\\*.* was found jump into next loop step - continue - errors.append( # If the last two doxygen regex were not found - ( - GuidelineViolations.C_DOXYGEN, - i + 1, - "The File Level Doxygen ends without end mark */", - ) - ) - break - - # Searching File Level Doxygen pattern between start and end mark - if not doxygen_regex_number == 0: # If at least \* was found - if re.match(doxygen_regex[doxygen_regex_number], line): - # If actual search doxygen regex was found - if doxygen_regex_found_line == i - 1: - # Is the next doxygen regex found after the previous regex - doxygen_regex_number += 1 - doxygen_regex_found_line = i - continue - if ( - doxygen_regex_number > 1 - ): # If \* and @file were found but no other doxygen regex - regex_pattern = doxygen_regex[doxygen_regex_number].pattern - regex_pattern = re.findall(r"\(\D*\)", regex_pattern)[0][1:-1] - errors.append( - ( - GuidelineViolations.C_DOXYGEN, - i + 1, - f"Line does not match with required File Level Doxygen " - f"{regex_pattern} comment", - ) - ) - doxygen_regex_number += 1 - doxygen_regex_found_line = i - - if doxygen_regex_number == 1: - errors.append( - ( - GuidelineViolations.C_DOXYGEN, - 0, - f"@file {filename} was not found", - ) - ) - if doxygen_regex_number == 0: - errors.append( - ( - GuidelineViolations.C_DOXYGEN, - 0, - r"The start \* of the doxygen header was not found", - ) - ) - return errors - - def keyword(self): - """Displayed keyword for check""" - return f"Checking file level doxygen ({self.rule_name})" - - -class c_check_define_guard(Task.Task): - """Class to implement define guard check - - A task is only executed if a file or the regular expression - C_005_REGEX is changed. - - """ - - # color (string): color in which the command line is displayed in the terminal - color = "BLUE" - # vars (list): contains a condition which triggers the execution of the task. - # The condition is the change of the corresponding part in the - # configuration file - vars = ["CHECK_CONFIG_C_005"] - - def run(self): - """calls test function to search after the include guard - - A list (in self.input) containing the path and the name of the to be - checked file is passed as first argument in the task generation. The - second argument self.rule_name contains the name of the style guide rule. - run calls the test function and passes the filename, the text of the - to be checked file and regular expression from rules.json. Depending - on the return value of the test function, an error message is printed. - - Returns: - int: - If no violation is found the value of - GuidelineViolations.NO_VIOLATION is returned. If a line in the - file contains tabs GuidelineViolations.GUARD is returned - """ - errors = self.test( - self.inputs[0].name, - self.inputs[0].read(), - self.regex, - ) - if errors: - for err in errors: - Logs.error(f"{self.rule_name}: {self.inputs[0].abspath()} {err[1]}") - return GuidelineViolations.C_GUARD.value - return GuidelineViolations.NO_VIOLATION.value - - @staticmethod - def test(filename, txt, config): - """Implements checks that the include guard exists - - First it is searched after #ifndef, #define and #endif. Afterwards it - is checked with the line number whether everything is at the correct - position. - - Args: - filename (string): name of the actual file - txt (string): text of the to be checked file - config (dict): dictionary containing regular expressions - - Returns: - list: - A list of tuple with GuidelineViolations member and the error - message - - """ - stem = pathlib.Path(filename).stem - errors = [] - found_ifndef_guard = (False, -2) - found_define_guard = (False, -2) - found_endif_guard = (False, -2) - txt_list = txt.splitlines() - prefix = config["prefix"] - suffix = config["suffix"] - infix = stem.upper() - last_line_nr = 0 - for rep in config["replacements"]: - for key, value in rep.items(): - infix = infix.replace(key, value) - guard = f"{prefix}{infix}{suffix}" - for i, line in enumerate(txt_list): - last_line_nr = i - if line == f"#ifndef {guard}": - found_ifndef_guard = (True, i + 1) - if line == f"#define {guard}": - found_define_guard = (True, i + 1) - if line == f"#endif /* {guard} */": - found_endif_guard = (True, i + 1) - - if not found_ifndef_guard[0]: - errors.append( - ( - GuidelineViolations.C_GUARD, - f"The file misses '#ifndef {guard}'", - ) - ) - if not found_define_guard[0]: - errors.append( - ( - GuidelineViolations.C_GUARD, - f"No '#define {guard}' found", - ) - ) - else: - if ( - found_ifndef_guard[0] - and found_ifndef_guard[1] != found_define_guard[1] - 1 - ): - errors.append( - ( - GuidelineViolations.C_GUARD, - f"No '#define {guard}' found " "directly after ifndef", - ) - ) - - if not found_endif_guard[0]: - errors.append( - ( - GuidelineViolations.C_GUARD, - "No '#endif /* " f"{guard} */' found in the whole file", - ) - ) - else: - if ( - found_define_guard[0] - and found_define_guard[1] > found_endif_guard[1] - 2 - ): - errors.append( - ( - GuidelineViolations.C_GUARD, - "'#endif /* " - f"{guard} */' not found at least two " - "lines after #define", - ) - ) - if found_endif_guard[1] != last_line_nr + 1: - errors.append( - (GuidelineViolations.C_GUARD, "Found '#endif' is not the last line") - ) - - return errors - - def keyword(self): - """Displayed keyword for check""" - return f"Checking define guard ({self.rule_name})" - - -class c_check_sections(Task.Task): - """Class to check existence of section comments - - A task is only executed if a file or the regular expression - C_006_SECTION_STRING is changed. - - """ - - # color (string): color in which the command line is displayed in the terminal - color = "BLUE" - # vars (list): contains a condition which triggers the execution of the task. - # The condition is the change of the corresponding part in the - # configuration file - vars = ["CHECK_CONFIG_C_006"] - - def run(self): - """calls test function to search section comments - - A list (in self.input) containing the path of the to be checked file - is passed as first argument in the task generation. The second argument - self.rule_name contains the name of the style guide rule. run calls the - test function and passes the text of the to be checked - file and regular expression from rules.json. Depending on the return - value of the test function, an error message is printed. - - Returns: - int: - If no violation is found the value of - GuidelineViolations.NO_VIOLATION is returned. If the sections are - not correct the value of GuidelineViolations.C_SECTION is returned - """ - - errors = self.test( - self.inputs[0].read(), - self.section_strings, - ) - if errors: - for err in errors: - Logs.error(f"In file: {self.inputs[0].abspath()}:{err[1]} {err[2]}") - return GuidelineViolations.C_SECTION.value - return GuidelineViolations.NO_VIOLATION.value - - @staticmethod - def test(txt, section_strings): - """Implements check that all section comments exists in the right order - - This function checks whether the section comments are existent in the - file. Furthermore it is checked whether the section comments are in the - correct order which is checked by a current_section_searched. - - Args: - txt (string): text of the to be checked file - section_strings (list): list containing regular expressions for the - section comments - - Returns: - list: - A list with tuple out of a GuidelineViolations member and the error - messages - """ - found_section = [] - errors = [] - previous_line = "" - for i in section_strings: - if txt.count(i) > 1: - errors.append( - ( - GuidelineViolations.C_SECTION, - 0, - f"'{i}' found more often than expected.", - ) - ) - for i, line in enumerate(txt.splitlines()): - for j, comment_string in enumerate(section_strings): - if comment_string == line: - found_section.append((j, i, previous_line)) - previous_line = line.rstrip(os.linesep) - - found_section_bool = [False] * len(section_strings) - previous_section_index = -1 - - for i, sec in enumerate(found_section): - # sec[0] is the number of the section string - # found_section_bool[sec[0]] can only be true if the section was - # already found earlier - if found_section_bool[sec[0]]: - previous_section_index = sec[0] - errors.append( - ( - GuidelineViolations.C_SECTION, - sec[1] + 1, - f"{section_strings[sec[0]]} is a duplicate", - ) - ) - else: - found_section_bool[sec[0]] = True - # previous_section_index is only smaller if the actual section - # index is at least 2 larger, therefore other sections are missing - # between them - if ( - previous_section_index < (sec[0] - 1) - and previous_section_index != -1 - ): - errors.append( - ( - GuidelineViolations.C_SECTION, - sec[1] + 1, - f"Between {section_strings[sec[0]]} and the previous " - f"section should be {sec[0]-1-previous_section_index}" - " other sections", - ) - ) - # previous_section is only bigger if the actual section should - # have come earlier - if previous_section_index > (sec[0] - 1): - errors.append( - ( - GuidelineViolations.C_SECTION, - sec[1] + 1, - f"{section_strings[sec[0]]} must be before the " - "previous section", - ) - ) - previous_section_index = sec[0] - # sec[2] is the string of the previous line - if sec[2]: - errors.append( - ( - GuidelineViolations.C_SECTION, - sec[1] + 1, - f"Ahead of {section_strings[sec[0]]} must be one " - "empty line", - ) - ) - - for i, found_bool in enumerate(found_section_bool): - if not found_bool: - errors.append( - ( - GuidelineViolations.C_SECTION, - 0, - f"{section_strings[i]} is missing", - ) - ) - return errors - - def keyword(self): - """Displayed keyword for check""" - return f"Checking existence of sections ({self.rule_name})" - - -class c_check_comment_style(Task.Task): - """Class to implement c comment style check - - . - - """ - - # color (string): color in which the command line is displayed in the terminal - color = "BLUE" - # vars (list): contains a condition which triggers the execution of the task. - # The condition is the change of the corresponding part in the - # configuration file - vars = ["CHECK_CONFIG_C_029"] - - def run(self): - """calls test function and prints the error message - - A list (in self.input) containing the path of the to be - checked file is passed as first argument in the task generation. The - second argument self.rule_name contains the name of the style guide rule. - run calls the test function and passes the text of the to be checked - file with regular expression for the comment style. Depending on - the return value of the test function an error message with the - filename and the line number is printed. - - Returns: - int: - If no violation is found the value of - GuidelineViolations.NO_VIOLATION is returned. If the file contains - the forbidden comment style the value of - GuidelineViolations.C_COMMENT_STYLE is returned - """ - - errors = self.test(self.inputs[0].read(), self.regex) - if errors: - for err in errors: - Logs.error( - f"{self.rule_name}: File: {self.inputs[0].abspath()}:{err}:" - f" {self.comment_style} comment style is not allowed" - ) - return GuidelineViolations.C_COMMENT_STYLE.value - return GuidelineViolations.NO_VIOLATION.value - - @staticmethod - def test(txt, regex): - """Implements check which searches for forbidden comment style - - Args: - txt (string): text of the to be checked file - regex (compiled pattern): - contains regular expression for the forbidden comment style - - Returns: - list: - A list with line numbers in which the forbidden comment style was - found. - """ - errors = [] - for i, line in enumerate(txt.splitlines()): - if re.search(regex, line): - errors.append(i + 1) - return errors - - def keyword(self): - """Displayed keyword for check""" - return f"Checking c comment style ({self.rule_name})" - - -class check_header(Task.Task): - """Class to implement running the checks for headers in files - - A task is only executed if a file or the regular expression HEADER_REGEX is changed. - This task is executed for C, Python, Shell, Batch and YAML files. - - """ - - # color (string): color in which the command line is displayed in the terminal - color = "BLUE" - # vars (list): contains a condition which triggers the execution of the task. - # The condition is the change of the corresponding part in the - # configuration file - vars = ["CHECK_CONFIG_HEADER"] - - def run(self): - """calls test function and errors in the headers of the files - - A list (in self.input) containing the path of the to be - checked file is passed as first argument in the task generation. The - second argument self.rule_name contains the name of the style guide rule. - run calls the test function and passes the text of the to be checked - file with the specific header of a file type. Depending on the return - value of the test function an error message with the filename and line - is printed. - - Returns: - int: - If no violation is found the value of - GuidelineViolations.NO_VIOLATION is returned. If a line in the - file contains whitespace at the end - GuidelineViolations.HEADER is returned - """ - errors = self.test( - self.inputs[0].read(), self.generator.env.HEADER_REGEX[self.lang_type] - ) - if errors: - for err in errors: # pylint: disable=unused-variable - Logs.error( - f"{self.rule_name}: File: {self.inputs[0].abspath()}:{err[1]}" - f" Line is not matching with {self.lang_type} header" - ) - return GuidelineViolations.HEADER.value - return GuidelineViolations.NO_VIOLATION.value - - @staticmethod - def test(txt, header): - """Implements check that header is contained in text - - For each file type it is defined a specific header which - has to be contained in the file. test function checks each line for - this header. - - Args: - txt (string): text of the to be checked file - header (list): contains all lines of the header - - Returns: - list: - A list of tuples with GuidelineViolations members and the line - number containing differences in the headers. - """ - errors = [] - txt_list = txt.splitlines() - for i, line in enumerate(header): - try: - if not line == txt_list[i]: - errors.append((GuidelineViolations.HEADER, i + 1)) - except IndexError: - errors.append((GuidelineViolations.HEADER, i + 1)) - break - return errors - - def keyword(self): - """Displayed keyword for check depending on the file type""" - word = "Checking headers" - - if self.lang_type == "C": - word = f"{self.rule_name} in C-file)" - elif self.lang_type == "Python": - word = f"{self.rule_name} in python-file)" - elif self.lang_type == "YAML": - word = f"{self.rule_name} in YAML-file)" - elif self.lang_type == "batch": - word = f"{self.rule_name} in batch-file)" - elif self.lang_type == "shell": - word = f"{self.rule_name} in shell-file)" - return word - - -class rst_check_include(Task.Task): - """Class to implement the macro include check - - A task is only executed if a file or the INCLUDE_REGEX is changed. - - """ - - # color (string): color in which the command line is displayed in the terminal - color = "BLUE" - # vars (list): contains a condition which triggers the execution of the task. - # The condition is the change of the corresponding part in the - # configuration file - vars = ["CHECK_CONFIG_RST_003"] - - def run(self): - """calls test function and prints the error message - - A list (in self.input) containing the path of the to be - checked file is passed as first argument in the task generation. The - second argument self.rule_name contains the name of the style guide rule. - run iterates over all specific excludes of the included files. - Afterwards run calls the test function and passes the text of the to - be checked file with regular expression for to be included file. Depending on - the return value of the test function an error message with the - filename is printed. - - Returns: - int: - If no violation is found the value of - GuidelineViolations.NO_VIOLATION is returned. If the file does not - include the necessary file the value of - GuidelineViolations.RST_MISSING_INCLUDE is returned - """ - - err = GuidelineViolations.NO_VIOLATION.value - for i, regex in enumerate(self.regex_list): - error = self.test( - self.inputs[0].read(), - regex, - ) - if error != GuidelineViolations.NO_VIOLATION: - Logs.error( - f"{self.rule_name}: File: {self.inputs[0].abspath()}:" - f" {self.include_name[i]} has to be included" - ) - err = error.value - return err - - @staticmethod - def test(txt, regex): - """Implements check that all necessary files are included - - Each .rst file has to include specific files - - Args: - txt (string): text of the to be checked file - regex (compiled pattern): contains regular expression for the include - - Returns: - GuidelineViolations: - if a file includes necessary file, GuidelineViolations.NO_VIOLATION is - returned otherwise GuidelineViolations.RST_MISSING_INCLUDE - """ - txt = txt.splitlines() - error = GuidelineViolations.RST_MISSING_INCLUDE - for line in txt: - if re.match(regex, line): - error = GuidelineViolations.NO_VIOLATION - break - return error - - def keyword(self): - """Displayed keyword for check""" - return f"Checking rst include ({self.rule_name})" - - -class rst_check_heading(Task.Task): - """Class to implement the rst heading check - - . - - """ - - # color (string): color in which the command line is displayed in the terminal - color = "BLUE" - # vars (list): contains a condition which triggers the execution of the task. - # The condition is the change of the corresponding part in the - # configuration file - vars = ["CHECK_CONFIG_RST_005"] - - def run(self): - """calls test function and prints the error message - - A list (in self.input) containing the path of the to be - checked file is passed as first argument in the task generation. The - second argument self.rule_name contains the name of the style guide rule. - run calls the test function and passes the text of the to be checked - file. Depending on the return value of the test function an error - message with the filename is printed. - - Returns: - int: - If no violation is found the value of - GuidelineViolations.NO_VIOLATION is returned. If the file does not - have a heading the value of GuidelineViolations.RST_HEADING is returned - - """ - errors = self.test(self.inputs[0].read(), self.heading_regex_list) - if errors: - for error in errors: - Logs.error( - f"{self.rule_name}: File: {self.inputs[0].abspath()}:{error[1]}" - f" {error[0]}" - ) - return GuidelineViolations.RST_HEADING.value - return GuidelineViolations.NO_VIOLATION.value - - @staticmethod - def test(txt, regex): # pylint: disable=too-many-branches - """Implements the check that rst files have a heading - - First it is iterated over the whole file to search for the file label, - overline, file caption and underline. Afterwards there are returned - error messages depending on the case. - - Args: - txt (string): text of the to be checked file - - Returns: - GuidelineViolations: - if a file has a heading two lines after the file label - GuidelineViolations.NO_VIOLATION is returned, - otherwise GuidelineViolations.RST_HEADING - """ - label_link_regex = regex[0] - underlines_regex = regex[1] - overlines_regex = regex[2] - errors = [] - heading = "" - found_label = -1 - found_caption = -1 - found_overline = -1 - found_underline = -1 - overline_length = 0 - underline_length = 0 - caption_length = 0 - wrong_overline_symbols = False - overline = "" - # loops over whole file and saves the line number of the found headings regex - for i, line in enumerate(txt.splitlines()): - label_found = re.match(label_link_regex, line) - if label_found and not heading: - heading = label_found.group(1) - heading = "".join(ch.upper() if ch.isalnum() else "_" for ch in heading) - found_label = i - if found_caption < 0 and found_overline < 0: - if re.match(overlines_regex, line): - found_overline = i - overline = line - overline_length = len(line) - elif re.match(underlines_regex, line): - wrong_overline_symbols = True - if heading and found_caption < 0: - caption = "".join(ch.upper() if ch.isalnum() else "_" for ch in line) - if caption == heading: - found_caption = i - caption_length = len(caption) - if found_caption > 0 > found_underline: - if found_overline > 0: - if line == overline: - found_underline = i - underline_length = len(line) - elif re.match(underlines_regex, line): - found_underline = i - underline_length = len(line) - - # error handling for the returned errors - if found_label > 0: - if found_caption < 0: - errors.append((f"Caption {heading} was not found", 0)) - else: - if found_overline > 0 and found_overline != found_label + 2: - errors.append( - ( - "Overline of the caption was not found two lines" - " after the file label", - found_overline + 1, - ) - ) - if found_overline > 0: - if found_label != found_caption - 3: - errors.append( - ( - f"The caption {heading} was not found three lines after " - "the file label", - found_caption + 1, - ) - ) - - if found_underline < 0: - errors.append( - ( - "Caption underline equal to overline is missing", - 0, - ) - ) - elif found_underline > 0 and found_underline - 1 != found_caption: - errors.append( - ( - "Underline was not found directly after caption", - found_underline + 1, - ) - ) - else: - if wrong_overline_symbols: - errors.append( - ( - "Overline contains not allowed symbols" - " (allowed symbols as '#*)", - 0, - ) - ) - if found_label != found_caption - 2: - errors.append( - ( - f"The caption {heading} was not found two lines after " - "the file label", - found_caption + 1, - ) - ) - if found_underline < 0: - errors.append( - ( - "Caption underline (allowed symbols as '#*=-^\"')" - " is missing", - 0, - ) - ) - elif found_underline > 0 and found_underline - 1 != found_caption: - errors.append( - ( - "Underline was not found directly after caption", - found_underline + 1, - ) - ) - else: - errors.append(("File label not found at the beginning of the file", 0)) - - if underline_length not in (0, caption_length) or overline_length not in ( - 0, - caption_length, - ): - errors.append( - ( - "Length of underline/overline is not equal to the length of the caption", - 0, - ) - ) - return errors - - def keyword(self): - """Displayed keyword for check""" - return f"Checking rst heading ({self.rule_name})" - - -class rst_check_orphan(Task.Task): - """Class to implement declaration of rst file orphans""" - - # color (string): color in which the command line is displayed in the terminal - color = "BLUE" - # vars (list): contains a condition which triggers the execution of the task. - # The condition is the change of the corresponding part in the - # configuration file - vars = ["CHECK_CONFIG_RST_006"] - - def run(self): - """calls test function and prints the error message - - A list (in self.input) containing the path of the to be - checked file is passed as first argument in the task generation. The - second argument self.rule_name contains the name of the style guide rule. - run calls the test function and passes the first line of the to be checked - file. Depending on the return value of the test function an error - message with the filename is printed. - - Returns: - int: - If no violation is found the value of - GuidelineViolations.NO_VIOLATION is returned. If the file does not - have orphan in the first line the value of - GuidelineViolations.RST_ORPHAN is returned - """ - error = self.test(self.inputs[0].read()) - if error != GuidelineViolations.NO_VIOLATION: - Logs.error( - f"{self.rule_name}: File: {self.inputs[0].abspath()}:" - " The first line has to be ':orphan:'" - ) - return GuidelineViolations.RST_ORPHAN.value - return GuidelineViolations.NO_VIOLATION.value - - @staticmethod - def test(txt): - """Implements check that the file is declared as orphan - - Args: - txt (string): first line of the to be checked file - - Returns: - GuidelineViolations: - if a file includes orphan in the first line, - GuidelineViolations.NO_VIOLATION is returned, - otherwise GuidelineViolations.ORPHAN - """ - txt = txt.splitlines()[0] - if txt == ":orphan:": - return GuidelineViolations.NO_VIOLATION - return GuidelineViolations.RST_ORPHAN - - def keyword(self): - """Displayed keyword for check""" - return f"Checking rst orphan ({self.rule_name})" - - -class sort_unit_testing_directives(Task.Task): - """Class to implement declaration of rst file orphans""" - - # color (string): color in which the command line is displayed in the terminal - color = "BLUE" - - before = ["clang_format"] - - def run(self): - """calls test function and prints the error message - - A list (in self.input) containing the path of the to be - checked file is passed as first argument in the task generation. The - second argument self.rule_name contains the name of the style guide rule. - run calls the test function and passes the first line of the to be checked - file. Depending on the return value of the test function an error - message with the filename is printed. - - Returns: - int: - If no violation is found the value of - GuidelineViolations.NO_VIOLATION is returned. If the file does not - have orphan in the first line the value of - GuidelineViolations.RST_ORPHAN is returned - """ - error = self.test(self.inputs[0].read()) - if error: - print(error) - Logs.error( - f"File: {self.inputs[0].abspath()}: unit testing directives are not sorted" - ) - return GuidelineViolations.C_UNIT_TEST_DIRECTIVES.value - return GuidelineViolations.NO_VIOLATION.value - - @staticmethod - def test(txt: str): - """Implements check that the unit testing framework directives in a - file are correctly sorted. - - Args: - txt (string): first line of the to be checked file - - Returns: - fixed list of directives - """ - re_test_files = re.compile(r"TEST_SOURCE_FILE\(\"(.*)\"\)") - re_include_paths = re.compile(r"TEST_INCLUDE_PATH\(\"(.*)\"\)") - test_files = [] - include_paths = [] - txt_input = txt.splitlines() - for i, line in enumerate(txt_input): - m = re_test_files.match(line) - if m: - test_files.append((m.group(0), i)) - m = re_include_paths.match(line) - if m: - include_paths.append((m.group(0), i)) - # if there are no directives, just return early - if not test_files and not include_paths: - return 0 - - error = 0 - # check that the order is ok: sources, then includes, and that there is an - # empty line between these - test_files_line_nr = [i[1] for i in test_files] - include_paths_line_nr = [i[1] for i in include_paths] - if not test_files_line_nr == sorted(test_files_line_nr): - error = 1 - - if not include_paths_line_nr == sorted(include_paths_line_nr): - error = 2 - - if ( - test_files_line_nr - and include_paths_line_nr - and not (max(test_files_line_nr) - min(include_paths_line_nr)) == -2 - ): - error = 3 - - # check that each list is sorted alphabetically - if not test_files == sorted(test_files): - print(f"Test files should be sorted like this:\n{sorted(test_files)}") - error += 4 - if not include_paths == sorted(include_paths): - print(f"Includes should be sorted like this:\n{sorted(include_paths)}") - error += 5 - - return error - - def keyword(self): - """Displayed keyword for check""" - return "Checking sorting of unit testing directives" - - -@TaskGen.feature("guidelines") -def process_guidelines(self): - # pylint: disable=too-many-statements,too-many-branches,too-many-locals - """creates guideline tasks for the repository - - process_guidelines is decorated with TaskGen.feature which specifies when - the tasks are executed. feature guidelines is defined in wscript. - - """ - - if not getattr(self, "config", None): - self.bld.fatal("No configuration given.") - excl_global = self.config["global"] - excl_binary = [f"**/*.{i}" for i in self.config["binary"]] - - # check for valid filenames - rule = self.config["file_names"] - excl_filenames = rule.get("exclude", []) + excl_global - filenames_to_check = self.bld.path.ant_glob( - "**", excl=excl_filenames, dir=True, quiet=True - ) - self.env.CHECK_CONFIG_GEN_001 = str(excl_filenames) - filename_regex = re.compile(r"" + rule["regex"]) - rn = rule["name"] - for i in filenames_to_check: - self.create_task("filenames", src=i, rule_name=rn, regex=filename_regex) - - # check that filenames are unique - rule = self.config["unique_filenames"] - excl_unique = rule.get("exclude", []) + excl_global - self.env.CHECK_CONFIG_GEN_002 = str(excl_unique) - unique_to_check = self.bld.path.ant_glob("**", excl=excl_unique, quiet=True) - self.create_task("unique_filenames", src=unique_to_check, rule_name=rule["name"]) - - # check that text files can be opened in UTF-8 mode - rule = self.config["encoding"] - excl_encoding = excl_binary + excl_global - # value of vars to trigger task execution - self.env.CHECK_CONFIG_GEN_003 = str(excl_encoding) + str(rule) - default_excl = excl_encoding - # saves for each encoding all files in a list - encoding_to_check = {} - for exception in rule["exceptions"]: - for key, value in exception.items(): - # key is glob path expression - # value is encoding - if value in encoding_to_check: - # if encoding already part of the dict - encoding_to_check[value].extend( - self.bld.path.ant_glob(key, excl=excl_encoding, quiet=True) - ) - default_excl.append(key) - else: - encoding_to_check[value] = self.bld.path.ant_glob( - key, excl=excl_encoding, quiet=True - ) - default_excl.append(key) - encoding_to_check[rule["default"]] = self.bld.path.ant_glob( - "**", excl=default_excl, quiet=True - ) - for key, value in encoding_to_check.items(): - for i in value: - self.create_task("encoding", src=i, rule_name=rule["name"], encoding=key) - - # check that text files adhere to POSIX 3.206 - rule = self.config["posix_3.206"] - excl_posix_3_206 = rule.get("exclude", []) + excl_binary + excl_global - posix_3_206_to_check = self.bld.path.ant_glob( - "**", excl=excl_posix_3_206, quiet=True - ) - self.env.CHECK_CONFIG_GEN_004 = str(excl_posix_3_206) - for i in posix_3_206_to_check: - self.create_task("posix_3_206", src=i, rule_name=rule["name"]) - - # check that text files do not have trailing whitespace - rule = self.config["trailing_whitespace"] - excl_trailing_whitespace = rule.get("exclude", []) + excl_binary + excl_global - trailing_whitespace_to_check = self.bld.path.ant_glob( - "**", excl=excl_trailing_whitespace, quiet=True - ) - self.env.CHECK_CONFIG_GEN_005 = str(excl_trailing_whitespace) - for i in trailing_whitespace_to_check: - self.create_task("trailing_whitespace", src=i, rule_name=rule["name"]) - - # check that text files do not use tabs - rule = self.config["tabs"] - excl_tabs = rule.get("exclude", []) + excl_binary + excl_global - tabs_to_check = self.bld.path.ant_glob("**", excl=excl_tabs, quiet=True) - self.env.CHECK_CONFIG_GEN_006 = str(excl_tabs) - for i in tabs_to_check: - self.create_task("tabs", src=i, rule_name=rule["name"]) - - # language checks : C - c_rules = self.config["languages"]["C"] - excl_c = c_rules.get("exclude", []) + excl_global - incl_c = c_rules.get("files", ["**/*.c", "**/.h"]) - - # doxygen - excl_c_doxygen = c_rules["doxygen"].get("exclude", []) + excl_c - c_to_check_doxygen = self.bld.path.ant_glob(incl_c, excl=excl_c_doxygen, quiet=True) - self.env.CHECK_CONFIG_C_004 = str(excl_c) + str(incl_c) + str(c_rules["doxygen"]) - C_004_REGEX = c_rules["doxygen"]["regex"] - rn = c_rules["doxygen"]["name"] - for i in c_to_check_doxygen: - self.create_task("c_check_doxygen", src=i, rule_name=rn, regex=C_004_REGEX) - - # define guard - excl_c_define_guard = c_rules["define_guard"].get("exclude", []) + excl_c - incl_c_define_guard = c_rules["define_guard"].get("include", ["**/*.h"]) - c_to_check_define_guard = self.bld.path.ant_glob( - incl_c_define_guard, excl=excl_c_define_guard, quiet=True - ) - self.env.CHECK_CONFIG_C005 = ( - str(incl_c) + str(excl_c) + str(c_rules["define_guard"]) - ) - C_005_REGEX = c_rules["define_guard"] - rn = c_rules["define_guard"]["name"] - for i in c_to_check_define_guard: - self.create_task("c_check_define_guard", src=i, rule_name=rn, regex=C_005_REGEX) - - # section - excl_sections = c_rules["sections"].get("exclude", []) + excl_c - excl_c_header_section = ( - excl_sections + ["**/*.c"] + c_rules["sections"]["header"]["exclude"] - ) - c_to_check_header_section = self.bld.path.ant_glob( - incl_c, excl=excl_c_header_section, quiet=True - ) - - excl_c_source_section = ( - excl_sections + ["**/*.h"] + c_rules["sections"]["source"]["exclude"] - ) - c_to_check_source_section = self.bld.path.ant_glob( - incl_c, excl=excl_c_source_section, quiet=True - ) - - excl_c_test_header_section = ( - excl_sections + ["**/*.c"] + c_rules["sections"]["test_header"]["exclude"] - ) - c_to_check_test_header_section = self.bld.path.ant_glob( - incl_c, excl=excl_c_test_header_section, quiet=True - ) - - excl_c_test_source_section = ( - excl_sections + ["**/*.h"] + c_rules["sections"]["test_source"]["exclude"] - ) - c_to_check_test_source_section = self.bld.path.ant_glob( - incl_c, excl=excl_c_test_source_section, quiet=True - ) - - section_to_check_file = [ - c_to_check_header_section, - c_to_check_source_section, - c_to_check_test_header_section, - c_to_check_test_source_section, - ] - section_list = [] - section_list.append(c_rules["sections"]["header"]["sections"]) - section_list.append(c_rules["sections"]["source"]["sections"]) - section_list.append(c_rules["sections"]["test_header"]["sections"]) - section_list.append(c_rules["sections"]["test_source"]["sections"]) - self.env.CHECK_CONFIG_C_006 = str(incl_c) + str(excl_c) + str(c_rules["sections"]) - rn = c_rules["sections"]["name"] - for i, file_list in enumerate(section_to_check_file): - for f in file_list: - self.create_task( - "c_check_sections", src=f, section_strings=section_list[i], rule_name=rn - ) - - # c comment style - excl_c_comment_style = c_rules["comment-style"].get("exclude", []) + excl_global - self.env.CHECK_CONFIG_C_029 = ( - str(incl_c) + str(excl_c) + str(c_rules["comment-style"]) - ) - c_to_check_comment_style = self.bld.path.ant_glob( - incl_c, excl=excl_c_comment_style, quiet=True - ) - forbidden_style = c_rules["comment-style"]["forbidden"] - self.comment_style = forbidden_style - if forbidden_style != "C99": - self.bld.fatal(f"{forbidden_style} is not implement yet") - comment_regex = re.compile(r"(? int: - """validate that the rules file has a consistent ordering""" - prev_err = err - for k, v in rules.items(): - if isinstance(v, dict): - new_err = validate_rules_file(v, err) - if new_err != prev_err: - err = new_err - elif isinstance(v, list): - if k in ("text", "sections", "regex"): - continue - try: # only sort lists of simple types - if not v == sorted(v): - err += 1 - Logs.error( - f"List '{json.dumps(v)}' not sorted.\n" - f"Use\n {json.dumps(sorted(v))}\n" - ) - except TypeError: - pass - return err diff --git a/tools/waf-tools/f_hcg.py b/tools/waf-tools/f_hcg.py old mode 100644 new mode 100755 index 4a44fa5f..aa1294c8 --- a/tools/waf-tools/f_hcg.py +++ b/tools/waf-tools/f_hcg.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -38,8 +37,7 @@ # - "This product includes parts of foxBMS®" # - "This product is derived from foxBMS®" -"""Implements a waf tool to use TI HALCoGen (https://www.ti.com/tool/HALCOGEN) -""" +"""Implements a waf tool to use TI HALCoGen (https://www.ti.com/tool/HALCOGEN)""" import binascii import os @@ -76,6 +74,7 @@ def parse_xml(self): device_setting.tag == "tools" and device_setting.text != "ti" ): + # pylint: disable-next=broad-exception-raised raise BaseException("tool not supported") if element.tag == "OS": for os_setting in self.root.iter(element.tag): @@ -284,9 +283,7 @@ def run(self): ) if not startup_node: self.generator.bld.fatal("Could not find startup source.") - hl_sys_startup_file = self.outputs.index( - startup_node - ) # pylint: disable=no-member + hl_sys_startup_file = self.outputs.index(startup_node) # pylint: disable=no-member if not hl_sys_startup_file: self.generator.bld.fatal("Could not find 'HL_sys_startup.c'.") generated_file_hash = binascii.hexlify( @@ -319,7 +316,7 @@ def fix_gen_hal_incs(self): """Add path to HALCoGen generated header files to every build""" if self.env.HCG_GEN_HAL_INC_PATHS: inc_paths = [os.path.join(i, "include") for i in self.env.HCG_GEN_HAL_INC_PATHS] - if not inc_paths in self.env.INCPATHS: + if inc_paths not in self.env.INCPATHS: self.env.append_unique("INCPATHS", inc_paths) diff --git a/tools/waf-tools/f_helpers.py b/tools/waf-tools/f_helpers.py old mode 100644 new mode 100755 index 0b9c75db..bc0d915b --- a/tools/waf-tools/f_helpers.py +++ b/tools/waf-tools/f_helpers.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -38,8 +37,7 @@ # - "This product includes parts of foxBMS®" # - "This product is derived from foxBMS®" -"""Various helper functions used in the foxBMS waf toolchain -""" +"""Various helper functions used in the foxBMS waf toolchain""" import pathlib import json @@ -57,7 +55,7 @@ def f_validator( ): """Returns a validator with resolved relative references""" schema_path = pathlib.Path(schema_path).resolve().as_posix() - with open(schema_path, mode="r", encoding="utf-8") as f: + with open(schema_path, encoding="utf-8") as f: schema = json.load(f) if Utils.is_win32: uri_template = "file:///{0}" diff --git a/tools/waf-tools/f_j_flash.py b/tools/waf-tools/f_j_flash.py old mode 100644 new mode 100755 index 2e0e6f08..6951f7e7 --- a/tools/waf-tools/f_j_flash.py +++ b/tools/waf-tools/f_j_flash.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -38,8 +37,7 @@ # - "This product includes parts of foxBMS®" # - "This product is derived from foxBMS®" -"""Implements a waf tool to flash binaries to the foxBMS MCU -""" +"""Implements a waf tool to flash binaries to the foxBMS MCU""" import os @@ -123,7 +121,7 @@ def versiontuple(version_string): Logs.debug( f"Removing (invalid) version of J-Flash ({JFLASH_ENV_VAR}) from env." ) - ctx.env.__delitem__(JFLASH_ENV_VAR) + del ctx.env.JFLASH_ENV_VAR def configure(ctx): diff --git a/tools/waf-tools/f_lauterbach.py b/tools/waf-tools/f_lauterbach.py old mode 100644 new mode 100755 index aa1735f9..d72a31ba --- a/tools/waf-tools/f_lauterbach.py +++ b/tools/waf-tools/f_lauterbach.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -77,6 +76,12 @@ def options(opt): dest="LAUTERBACH_BASE", help="Installation directory of Lauterbach tools", ) + opt.add_option( + "--lauterbach-use-tcp", + action="store_true", + dest="lauterbach_use_tcp", + help="Use TCP as connection for the debugger.", + ) def configure(conf): @@ -135,9 +140,13 @@ def configure(conf): if t32marm_root.endswith(os.sep): t32marm_root = t32marm_root[:-1] + tcp = "" + if conf.options.lauterbach_use_tcp: + tcp = "RCL=NETTCP\nPORT=20000" config_t32 = config_t32.read() config_t32 = config_t32.replace("@TMP@", os.getenv("TMP")) config_t32 = config_t32.replace("@SYS@", t32_root) + config_t32 = config_t32.replace("@TCP@", tcp) config_t32_node = conf.path.get_bld().make_node("config.t32") config_t32_node.write(config_t32) @@ -160,12 +169,13 @@ def configure(conf): path = os.path.join(conf.path.get_bld().abspath(), "run_t32marm.lnk") - shell = win32com.client.Dispatch("WScript.Shell") - shortcut = shell.CreateShortCut(path) - shortcut.Targetpath = conf.env.T32MARM[0] - shortcut.WorkingDirectory = t32marm_root - shortcut.Arguments = " ".join( - ["-c", config_t32_node.abspath(), "-s", t32_cmm_node.abspath()] - ) - shortcut.WindowStyle = 3 - shortcut.save() + if Utils.is_win32: + shell = win32com.client.Dispatch("WScript.Shell") + shortcut = shell.CreateShortCut(path) + shortcut.Targetpath = conf.env.T32MARM[0] + shortcut.WorkingDirectory = t32marm_root + shortcut.Arguments = " ".join( + ["-c", config_t32_node.abspath(), "-s", t32_cmm_node.abspath()] + ) + shortcut.WindowStyle = 3 + shortcut.save() diff --git a/tools/waf-tools/f_miniconda_env.py b/tools/waf-tools/f_miniconda_env.py deleted file mode 100644 index 7503a224..00000000 --- a/tools/waf-tools/f_miniconda_env.py +++ /dev/null @@ -1,252 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -"""Implements a waf tool to check that all requirements for the development -workflow are installed properly. - -:numref:`f-miniconda-env-usage` shows how to use this tool. - -.. code-block:: python - :caption: f_miniconda_env.py - :name: f-miniconda-env-usage - :linenos: - - def options(opt): - opt.load("f_miniconda_env") - - def configure(conf): - conf.load("f_miniconda_env") - -""" -import json -import os -import sys - -import yaml -from waflib import Context, Errors, Logs, Utils - -if Utils.is_win32: - CONDA_BASE = [ - os.path.join(os.environ["USERPROFILE"], "miniconda3"), - os.path.join(os.environ["LOCALAPPDATA"], "Continuum", "miniconda3"), - os.path.join(os.environ["LOCALAPPDATA"], "miniconda3"), - os.path.join(os.environ["ProgramData"], "Miniconda3"), - os.path.join(os.environ["SystemDrive"], os.sep, "miniconda3"), - ] - ENV_DIRS = [ - os.path.join(i, "envs") - for i in CONDA_BASE + [os.path.join(os.environ["USERPROFILE"], ".conda")] - ] - -else: - CONDA_BASE = [ - os.path.join("~", "miniconda3"), - os.path.join(os.sep, "opt", "miniconda3"), - ] - ENV_DIRS = [ - os.path.join(i, "envs") for i in CONDA_BASE + [os.path.join("~", ".conda")] - ] - - -def options(opt): - """Configuration options for the miniconda environment tool""" - opt.add_option( - "--ignore-env-check", - action="store_true", - default=False, - dest="IGNORE_ENV_CHECK", - help="Disable environment checking (not recommended)", - ) - opt.add_option( - "--conda-env-file", - action="store", - default=os.path.join( - "conf", "env", f"conda_env_{Utils.unversioned_sys_platform()}.yaml" - ), - dest="CONDA_ENV_FILE", - help="Path to conda environment specification file", - ) - - opt.add_option( - "--conda-base-env", - action="append", - default=CONDA_BASE, - dest="CONDA_BASE_ENV", - help="Installation directory of the miniconda base environment", - ) - opt.load("python") - - -def configure(conf): # pylint: disable=too-many-statements,too-many-branches - """configuration step of the miniconda environment tool""" - try: - conf.env.PYTHON[0] - except IndexError: - conf.load("python") - if conf.options.IGNORE_ENV_CHECK: - conf.env.ENV_CHECK = False - return - - # check that all python packages are available - if Utils.is_win32: - a_dir = "Scripts" - else: - a_dir = "bin" - path_list = [os.path.join(i, a_dir) for i in conf.options.CONDA_BASE_ENV] - conf.find_program("conda", mandatory=False, path_list=path_list) - try: - conf.env.CONDA[0] - except IndexError: - conf.fatal( - "A conda base installation is required at " - f"{conf.options.CONDA_BASE_ENV}.\nAlternatively you can specify " - "an installed conda base environment by passing it via " - "'--conda-base-env'." - ) - - cmd = Utils.subst_vars("${CONDA} env list --json", conf.env).split() - - try: - std = conf.cmd_and_log(cmd, output=Context.BOTH) - available_conda_envs = json.loads(std[0]) - except Errors.WafError as env_search: - Logs.error(env_search.msg.strip()) - conf.fatal("Searching for conda environments failed.") - - conda_env_spec_file = conf.path.find_node(conf.options.CONDA_ENV_FILE) - with open(conda_env_spec_file.abspath(), "r", encoding="utf-8") as stream: - try: - conda_spec = yaml.load(stream, Loader=yaml.Loader) - except yaml.YAMLError as exc: - conf.fatal(exc) - env = None - for env in available_conda_envs["envs"]: - if env.lower().endswith(conda_spec["name"]): - conf.env.CONDA_DEVEL_ENV = conda_spec["name"] - break - if not conf.env.CONDA_DEVEL_ENV: - conf.fatal(f"Development environment '{conf.env.CONDA_DEVEL_ENV}' not found.") - - correct_env = False - # now we are sure that: at least a string (we found at least *something*), - # is returned from shutil.which() and conf.env.PYTHON[0] exist. - # Therefore the following comparisons are (from a type perspective) safe. - if Utils.is_win32: - if ( - # NTFS on Windows is case insensitive, so don't be too - # strict on string comparison when we check paths - sys.executable.lower() == conf.env.PYTHON[0].lower() - and sys.executable.lower() == os.path.join(env.lower(), "python.exe") - ): - correct_env = True - else: - if sys.executable == conf.env.PYTHON[0] and sys.executable == os.path.join( - env.lower(), "bin", "python" - ): - correct_env = True - if not correct_env: - Logs.error(f"The development environment {conda_spec['name']} is not active.") - conf.fatal( - f"Run 'conda activate {conda_spec['name']}' and configure the project again." - ) - - found_devel_env = False - for e in ENV_DIRS: # pylint: disable=invalid-name - search_path = os.path.join(e, conf.env.get_flat("CONDA_DEVEL_ENV")) - cmd = conf.env.CONDA + ["env", "export", "-p", search_path] - try: - std = conf.cmd_and_log( - cmd, output=Context.BOTH, quiet=Context.BOTH, input=os.linesep.encode() - ) - except Errors.WafError as env_export: - Logs.error(env_export.msg.strip()) - conf.fatal( - f"Could not export dependencies from environment {conda_spec['name']}" - ) - tmp_env = yaml.load(std[0], Loader=yaml.Loader) - if not tmp_env.get("dependencies", None): - # if there are no dependencies, then the environment does not exist. - continue - - conda_env_yaml = conf.path.get_bld().make_node( - f"{conf.env.CONDA_DEVEL_ENV}_environment.yaml" - ) - conda_env_yaml.write(std[0]) - with open(conda_env_yaml.abspath(), "r", encoding="utf-8") as stream: - try: - current_conda_env = yaml.load(stream, Loader=yaml.Loader) - except yaml.YAMLError as exc: - conf.fatal(exc) - - for i in current_conda_env["dependencies"]: - if isinstance(i, dict): - pips = i["pip"] - - pkg_error = False - for _pkg in conda_spec["dependencies"]: - if isinstance(_pkg, str): - if _pkg in current_conda_env["dependencies"]: - Logs.debug(f"Found {_pkg.split('=')}") - else: - Logs.warn(f"Could not find {_pkg.split('=')}") - pkg_error = True - elif isinstance(_pkg, dict): - for pip_pkg in _pkg["pip"]: - if pip_pkg in pips: - Logs.debug(f"Found {pip_pkg.split('==')}") - else: - Logs.warn(f"Could not find pip-package {pip_pkg.split('==')}") - pkg_error = True - if pkg_error: - Logs.warn( - "There are package errors in environment " - f"{conf.env.CONDA_DEVEL_ENV} at {search_path}.\n" - "Proceeding with next search path." - ) - else: - # found a development environment, that satisfies the dependencies - found_devel_env = True - break - - if not found_devel_env: - conf.fatal( - f"No development environment found in {ENV_DIRS} that satisfies " - "the dependencies." - ) diff --git a/tools/waf-tools/f_node_helper.py b/tools/waf-tools/f_node_helper.py old mode 100644 new mode 100755 index 94555c07..f9bffaa6 --- a/tools/waf-tools/f_node_helper.py +++ b/tools/waf-tools/f_node_helper.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -40,7 +39,6 @@ """Helper methods to work with waf node objects""" - from waflib import Errors, Node, TaskGen, Utils diff --git a/tools/waf-tools/f_ozone.py b/tools/waf-tools/f_ozone.py old mode 100644 new mode 100755 index 4984aa7d..8f33e97c --- a/tools/waf-tools/f_ozone.py +++ b/tools/waf-tools/f_ozone.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause diff --git a/tools/waf-tools/f_pylint.py b/tools/waf-tools/f_pylint.py deleted file mode 100644 index aeb7654a..00000000 --- a/tools/waf-tools/f_pylint.py +++ /dev/null @@ -1,107 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -r"""Implements a waf tool to run `pylint `_. - -:numref:`f-pylint-usage` shows how to use this tool. - -.. code-block:: python - :caption: f_pylint.py - :name: f-pylint-usage - :linenos: - - def options(opt): - opt.load("pylint") - - def configure(conf): - conf.load("pylint") - - def build: - files = bld.path.ant_glob("\*\*/\*.py") - bld(features="pylint", files=files) - -""" - -from waflib import Task, TaskGen - - -class pylint(Task.Task): # pylint: disable-msg=invalid-name - """Class to implement running the pylint static analysis tool on Python files""" - - #: str: color in which the command line is displayed in the terminal - color = "BLUE" - vars = ["PYLINT_OPTIONS"] - after = ["black"] - - run_str = "${PYLINT} ${PYLINT_OPTIONS} ${SRC[0].abspath()}" - - def keyword(self): - """displayed keyword when pylint is run""" - return "Linting" - - -@TaskGen.feature("pylint") -def process_pylint(self): - """creates pylint tasks for each input file""" - if not getattr(self, "files", None): - self.bld.fatal("No files given.") - for src in self.files: - self.create_task("pylint", src, cwd=self.path) - - -def options(opt): - """Passing options to pylint""" - opt.add_option( - "--pylint-option", - action="append", - default=[], - dest="PYLINT_OPTION", - help="Options for pylint", - ) - - -def configure(conf): - """configuration step of the pylint tool - - - searches for the program ``pylint`` - - applies configured options - """ - conf.find_program("pylint", var="PYLINT") - conf.env.append_unique("PYLINT_OPTIONS", conf.options.PYLINT_OPTION) diff --git a/tools/waf-tools/f_sphinx_build.py b/tools/waf-tools/f_sphinx_build.py old mode 100644 new mode 100755 index a4cab968..4c83d328 --- a/tools/waf-tools/f_sphinx_build.py +++ b/tools/waf-tools/f_sphinx_build.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -43,10 +42,11 @@ """ import os -import re import sys -from waflib import Logs, Node, Task, TaskGen, Utils +from waflib import Logs, Task, TaskGen, Utils + +from waflib.Configure import ConfigurationContext class sphinx_task(Task.Task): # pylint: disable=invalid-name @@ -113,111 +113,12 @@ def run(self): Logs.info(cmd) env = self.env.env or None cwd = self.generator.bld.path.get_bld().abspath() - proc = Utils.subprocess.Popen( - cmd.split(), - stdin=Utils.subprocess.PIPE, - stdout=Utils.subprocess.PIPE, - stderr=Utils.subprocess.PIPE, - env=env, - cwd=cwd, - ) - - std_out, std_err = proc.communicate() - std_out = std_out.decode(errors="ignore") - std_err = std_err.decode(errors="ignore") - ret = getattr(self, "check_output_" + self.env.BUILDERNAME)(std_out, std_err) - if ret: - self.generator.bld.fatal(f"Could not build {self.env.BUILDERNAME}") - - def check_output_spelling(self, std_out, std_err): - """check if the spelling task generates any real errors""" - err_bit = 0 - re_splitter = r":([0-9]{1,}):" - re_err = re.compile(r"\.rst" + re_splitter) - for line in std_out.strip().splitlines(): - # if the output line contains ".rst:" it indicates that an error - # has been found. The path is relative to the source directory - # therefore we need to construct the path to the source file with - # the error to generate a meaningful error message - match = re_err.search(line) - if match: - err_bit += 1 - err_msg = re.split(re_splitter, line) - err_file = os.path.normpath(os.path.join(self.env.SRCDIR, err_msg[0])) - err_line = err_msg[1] - err_word = err_msg[2] - Logs.error(f"{err_file}:{err_line}:error:{err_word}") - else: - if Logs.verbose: - print(line) - for line in std_err.strip().splitlines(): - if self.removedinsphinx30warning(line): - continue - Logs.error(line) - if not err_bit: - err_bit = 1 - - return err_bit - - def check_output_linkcheck(self, std_out, std_err): - """check if the linkcheck task generates any real errors""" - err_bit = 0 - re_splitter = r"(\[[ ]{0,2}\d{1,3}\%\])" - re_err = r"line\s{0,}(\d{1,})\s{0,}\)(.*)" - current_file = "" - for line in std_out.strip().splitlines(): - try: - current_file = os.path.normpath( - os.path.join( - self.env.SRCDIR, re.split(re_splitter, line)[2].strip() + ".rst" - ) - ) - except IndexError: - pass - if "broken " in line: - line = re.sub(r"\s\s+", " ", line) - err_bit += 1 - try: - line, msg = re.split(re_err, line) - Logs.error(f"{current_file}:{line}:{msg}") - except ValueError: - Logs.error(line) - else: - if Logs.verbose: - print(line) - for line in std_err.strip().splitlines(): - if self.removedinsphinx30warning(line): - continue - Logs.error(line) - if not err_bit: - err_bit = 1 - - return err_bit + proc = Utils.subprocess.Popen(cmd.split(), env=env, cwd=cwd) - def check_output_html(self, std_out, std_err): - """check if the html task generates any real errors""" - err_bit = 0 - for line in std_out.strip().splitlines(): - if Logs.verbose: - print(line) - for line in std_err.strip().splitlines(): - if self.removedinsphinx30warning(line): - continue - Logs.error(line) - if not err_bit: - err_bit = 1 - - return err_bit - - @staticmethod - def removedinsphinx30warning(_str): - """The warning ``RemovedInSphinx30Warning`` is not a valid warning in - our build therefore it can skipped to fail the build.""" - ret = False - if "RemovedInSphinx30Warning".lower() in _str.lower(): - Logs.warn(_str) - ret = True - return ret + proc.communicate() + if not proc.returncode: + print(f"Index file: {cwd+ os.sep}index.html.") + return proc.returncode def __str__(self): """for printing""" @@ -228,25 +129,10 @@ def keyword(self): return f"Compiling {self.env['BUILDERNAME']}" -@TaskGen.extension(".rst", ".txt", ".csv") -def rst(self, node): # pylint: disable=unused-argument - """dummy function to be able to use - ``bld(features="sphinx", source="abc*.rst", ...)``.""" - - @TaskGen.feature("sphinx") @TaskGen.before_method("process_source") def apply_sphinx(self): """Set up the task generator with a Sphinx instance and create a task.""" - inputs = [] - for i in Utils.to_list(self.source): - if not isinstance(i, Node.Node): - node = self.path.find_node(i) - else: - node = i - if not node: - raise ValueError(f"Source file '{i}'' not found.") - inputs.append(node) # get sphinx config (conf.py) and derive the srcdir from it. if not getattr(self, "conf_py", None): @@ -268,7 +154,7 @@ def apply_sphinx(self): for builder in builders: outfile = self.path.get_bld().make_node(builder) outfile.write(builder) - builder_task = self.create_task("sphinx_task", inputs + [outfile]) + builder_task = self.create_task("sphinx_task", [outfile]) builder_task.inputs.append(self.conf_py) builder_task.env["BUILDERNAME"] = builder builder_task.env["SRCDIR"] = src_dir @@ -293,11 +179,7 @@ def apply_sphinx(self): builder_task.outputs.append(self.out_dir_node) -def configure(conf): - """Check if the following programs are available - - - ``sphinx-build``, - - ``dot`` - """ +def configure(conf: ConfigurationContext): + """Check that sphinx-build and dot are available""" conf.find_program("sphinx-build", var="SPHINX_BUILD") conf.find_program("dot", var="DOT") diff --git a/tools/waf-tools/f_ti_arm_cgt.py b/tools/waf-tools/f_ti_arm_cgt.py old mode 100644 new mode 100755 index a48fc07a..66ca1e43 --- a/tools/waf-tools/f_ti_arm_cgt.py +++ b/tools/waf-tools/f_ti_arm_cgt.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -38,8 +37,9 @@ # - "This product includes parts of foxBMS®" # - "This product is derived from foxBMS®" -"""Implements a waf tool to use TI ARM CGT (https://www.ti.com/tool/ARM-CGT). -""" +"""Implements a waf tool to use TI ARM CGT (https://www.ti.com/tool/ARM-CGT).""" + +# pylint: disable=too-many-statements,too-many-lines,too-many-locals import binascii import json @@ -58,9 +58,12 @@ from waflib.Tools import c_preproc from waflib.Tools.ccroot import link_task -import f_ti_arm_cgt_cc_options # pylint: disable=unused-import -import f_ti_arm_helper # pylint: disable=unused-import -import f_ti_arm_tools # pylint: disable=unused-import +# pylint: disable=unused-import +import f_ti_arm_cgt_cc_options # noqa: F401 +import f_ti_arm_helper # noqa: F401 +import f_ti_arm_tools # noqa: F401 + +# pylint: enable=unused-import import f_ti_color_arm_cgt HAVE_GIT = False @@ -158,7 +161,7 @@ class asm(Task.Task): # pylint: disable-msg=invalid-name,too-few-public-methods #: fun: function to be used as scanner method scan = c_preproc.scan - def keyword(self): # pylint: disable=no-self-use + def keyword(self): """displayed keyword when assembler source files are compiled""" return "Compiling" @@ -314,7 +317,7 @@ class c(Task.Task): # pylint: disable-msg=invalid-name,too-few-public-methods #: fun: function to be used as scanner method scan = c_preproc.scan - def keyword(self): # pylint: disable=no-self-use + def keyword(self): """displayed keyword when source files are compiled""" return "Compiling" @@ -363,7 +366,7 @@ class c_pp(Task.Task): # pylint: disable-msg=invalid-name,too-few-public-method #: fun: function to be used as scanner method scan = c_preproc.scan - def keyword(self): # pylint: disable=no-self-use + def keyword(self): """displayed keyword when source files are parsed for pp information""" return "Preprocessing" @@ -412,7 +415,7 @@ class c_ppi(Task.Task): # pylint: disable-msg=invalid-name,too-few-public-metho #: fun: function to be used as scanner method scan = c_preproc.scan - def keyword(self): # pylint: disable=no-self-use + def keyword(self): """displayed keyword when source files are parsed for ppi information""" return "Parsing" @@ -461,7 +464,7 @@ class c_ppd(Task.Task): # pylint: disable-msg=invalid-name,too-few-public-metho #: fun: function to be used as scanner method scan = c_preproc.scan - def keyword(self): # pylint: disable=no-self-use + def keyword(self): """displayed keyword when source files are parsed for ppd information""" return "Parsing" @@ -510,7 +513,7 @@ class c_ppm(Task.Task): # pylint: disable-msg=invalid-name,too-few-public-metho #: fun: function to be used as scanner method scan = c_preproc.scan - def keyword(self): # pylint: disable=no-self-use + def keyword(self): """displayed keyword when source files are parsed for ppm information""" return "Parsing" @@ -591,7 +594,7 @@ def parse_output(pull_config, obj_path, std): return [], [] if not std: return [], [] - if not "#10252" in std: + if "#10252" not in std: return [], [] # now we know that at least some warning has been printed to stdout that # includes the linker remark #10252 and that a pull file has been @@ -644,8 +647,8 @@ def parse_output(pull_config, obj_path, std): return hits, errors - def keyword(self): # pylint: disable=no-self-use - """displayed keyword when black is linking the target""" + def keyword(self): + """displayed keyword when linking the target""" return "Linking" @@ -657,7 +660,7 @@ class stlink_task(link_task): # pylint: disable-msg=invalid-name,too-few-public "${AR} ${ARFLAGS} ${AR_TGT_F} ${TGT[0].abspath()} ${AR_SRC_F}${SRC}", ] - def keyword(self): # pylint: disable=no-self-use + def keyword(self): """displayed keyword when linking""" return "Linking" @@ -686,7 +689,7 @@ def run(self): for in_file, out_file in zip(self.inputs, self.outputs): shutil.copy2(in_file.abspath(), out_file.abspath()) - def keyword(self): # pylint: disable=no-self-use + def keyword(self): """displayed keyword when copying the elf file""" return "Copy" @@ -748,7 +751,7 @@ def tiprogram(bld, *k, **kw): if "linker_pulls" in kw: scan_opt = "--scan_libraries" - if not scan_opt in bld.env.LINKFLAGS and not scan_opt in kw["linkflags"]: + if scan_opt not in bld.env.LINKFLAGS and scan_opt not in kw["linkflags"]: bld.fatal( "'linker_pulls' was specified without linker flag '--scan_libraries'." ) @@ -841,7 +844,7 @@ def check_duplicate_and_not_existing_includes(self): item for t in duplicates for item in t - if not os.sep + "build" + os.sep in item + if os.sep + "build" + os.sep not in item ] duplicates = list(set(duplicates)) err += f"Duplicate include directories are: {duplicates}\n" @@ -865,7 +868,7 @@ class hexgen(Task.Task): # pylint: disable-msg=invalid-name """str: string to be interpolated to create the command line to create a hex file from an elf file.""" - def keyword(self): # pylint: disable=no-self-use + def keyword(self): """displayed keyword when generating the hex file""" return "Compiling" @@ -907,7 +910,7 @@ class bingen(Task.Task): # pylint: disable-msg=invalid-name """str: string to be interpolated to create the command line to create a bin file from an elf file.""" - def keyword(self): # pylint: disable=no-self-use + def keyword(self): """displayed keyword when generating the bin file""" return "Compiling" @@ -983,7 +986,7 @@ def run(self): if err: Logs.error(err) - def keyword(self): # pylint: disable=no-self-use + def keyword(self): """displayed keyword when size is run on object files""" return "Processing size" @@ -1013,7 +1016,7 @@ class nm(Task.Task): # pylint: disable-msg=invalid-name,too-few-public-methods """str: string to be interpolated to create the command line to create a nm file from an ``*.obj``, ``*.a`` or ``*.elf`` file.""" - def keyword(self): # pylint: disable=no-self-use + def keyword(self): """displayed keyword when armnm is run on object files""" return "Processing nm" @@ -1027,9 +1030,7 @@ def remove_stuff_from_pp(self): self.create_task("clean_pp_file", node.outputs[0], outs) -class clean_pp_file( - Task.Task -): # pylint: disable-msg=invalid-name,too-few-public-methods +class clean_pp_file(Task.Task): # pylint: disable-msg=invalid-name,too-few-public-methods """Task to remove some information from the preprocessed files""" #: str: color in which the command line is displayed in the terminal @@ -1058,7 +1059,7 @@ def run(self): txt = re.sub(rep[0], rep[1], txt) self.outputs[1].write(txt, encoding="utf-8") - def keyword(self): # pylint: disable=no-self-use + def keyword(self): """displayed keyword when post-processing the pre-processed files""" return "Postprocessing" @@ -1078,6 +1079,8 @@ class create_version_source(Task.Task): # pylint: disable=invalid-name #: list of str: extensions that trigger a re-build ext_out = [".h"] + always_run = True + def get_remote(self): """returns the git remote""" # pylint: disable=no-member @@ -1200,6 +1203,9 @@ def run(self): f"version defined in waf ({waf_version})." ) + # get information for the build configuration struct + build_configuration = self.get_build_configuration() + # note: these values have to be in line with the corresponding defines # in version_cfg.h commit_hash_maximum_string_length = 9 @@ -1221,7 +1227,7 @@ def run(self): " * @file c.c", " * @author foxBMS Team", " * @date 2019-08-27 (date of creation)", - " * @updated 2023-01-02 (date of last update)", + " * @updated 2024-01-09 (date of last update)", " * @version vx.y.z", " * @ingroup SOME_GROUP", " * @prefix ABC", @@ -1243,6 +1249,7 @@ def run(self): ] for finding, _replacement in zip(doxygen_comment_tpl, doxygen_comment): txt = txt.replace(finding, _replacement) + # pylint: disable=line-too-long marker = "/*========== Static Constant and Variable Definitions =======================*/" txt = txt.replace( marker, @@ -1258,13 +1265,143 @@ def run(self): f" .distanceFromLastRelease = {distance_int},", f' .commitHash = "{commit_hash}",', f' .gitRemote = "{git_remote[:git_remote_maximum_string_length]}",', + "};\n", + "const VER_BUILD_CONFIGURATION_s ver_foxbmsBuildConfiguration = {", + f" .socAlgorithm = SOC_ALGORITHM_{build_configuration['soc_state_estimator']},", + f" .soeAlgorithm = SOE_ALGORITHM_{build_configuration['soe_state_estimator']},", + f" .sofAlgorithm = SOF_ALGORITHM_{build_configuration['sof_state_estimator']},", + f" .sohAlgorithm = SOH_ALGORITHM_{build_configuration['soh_state_estimator']},", + f" .imdName = {build_configuration['imd_name']},", + f" .balancingStrategy = BALANCING_STRATEGY_{build_configuration['balancing_strategy']},", + f" .rtos = {build_configuration['rtos']},", + f" .afeName = {build_configuration['afe_name']},", + f" .temperatureSensorName = {build_configuration['temp_sensor_name']},", + f" .temperatureSensorMethod = {build_configuration['temp_sensor_method']},", "};", ] ), ) + # pylint: enable=line-too-long self.outputs[0].write(txt, encoding="utf-8") + def get_build_configuration(self): # pylint: disable=too-many-branches + """Puts together the information for the build configuration struct + returns the build configuration in a dictionary""" + build_configuration = {} + + # get state estimators + build_configuration["soc_state_estimator"] = "INVALID" + if not self.env.state_estimator_soc == []: + build_configuration["soc_state_estimator"] = str( + self.env.state_estimator_soc + ).upper() + build_configuration["soe_state_estimator"] = "INVALID" + if not self.env.state_estimator_soe == []: + build_configuration["soe_state_estimator"] = str( + self.env.state_estimator_soe + ).upper() + build_configuration["sof_state_estimator"] = "INVALID" + if not self.env.state_estimator_sof == []: + build_configuration["sof_state_estimator"] = str( + self.env.state_estimator_sof + ).upper() + build_configuration["soh_state_estimator"] = "INVALID" + if not self.env.state_estimator_soh == []: + build_configuration["soh_state_estimator"] = str( + self.env.state_estimator_soh + ).upper() + + # get imd name + imd_man = str(self.env.imd_manufacturer) + imd_model = str(self.env.imd_model) + imd_name = "IMD_NONE" + if imd_man == "bender": + if imd_model == "iso165c": + imd_name = f"IMD_{imd_man.upper()}_ISO_165C" + elif imd_model == "ir155": + imd_name = f"IMD_{imd_man.upper()}_IR_155" + build_configuration["imd_name"] = imd_name + + # get balancing strategy + build_configuration["balancing_strategy"] = "NONE" + if not self.env.balancing_strategy == []: + build_configuration["balancing_strategy"] = str( + self.env.balancing_strategy + ).upper() + + # get rtos + build_configuration["rtos"] = "FREERTOS" + if not self.env.RTOS_NAME == []: + build_configuration["rtos"] = str(self.env.RTOS_NAME[0]).upper() + + # get afe name + afe_man = str(self.env.afe_manufacturer) + afe_ic = str(self.env.afe_ic) + afe_ic_d = "DEBUG_DEFAULT" + if afe_man == "ltc": + if afe_ic in ("6804-1", "6811-1", "6812-1"): + afe_ic_d = "6813-1" + if afe_ic == "6804-1": + afe_ic_d = f"{afe_man.upper()}_LTC6804_1" + elif afe_ic == "6806": + afe_ic_d = f"{afe_man.upper()}_LTC6806" + elif afe_ic == "6811-1": + afe_ic_d = f"{afe_man.upper()}_LTC6811_1" + elif afe_ic == "6812-1": + afe_ic_d = f"{afe_man.upper()}_LTC6812_1" + elif afe_ic == "6813-1": + afe_ic_d = f"{afe_man.upper()}_LTC6813_1" + elif afe_man == "nxp": + if afe_ic == "mc33775a": + afe_ic_d = f"{afe_man.upper()}_MC33775A" + elif afe_man == "adi": + if afe_ic == "ades1830": + afe_ic_d = f"{afe_man.upper()}_ADES1830" + elif afe_man == "debug": + if afe_ic == "default": + afe_ic_d = f"{afe_man.upper()}_DEFAULT" + elif afe_man == "maxim": + if afe_ic == "max17852": + afe_ic_d = f"{afe_man.upper()}_MAX17852" + elif afe_man == "ti": + if afe_ic == "dummy": + afe_ic_d = "TI_DUMMY" + build_configuration["afe_name"] = afe_ic_d + + # get temp sensor name + temp_sensor_man = str(self.env.temperature_sensor_manuf) + temp_sensor_model = str(self.env.temperature_sensor_model) + temp_sensor = "FAK00" + if temp_sensor_man == "epcos": + if temp_sensor_model == "b57251v5103j060": + temp_sensor = "EPC00" + elif temp_sensor_model == "b57861s0103f045": + temp_sensor = "EPC01" + elif temp_sensor_man == "murata": + if temp_sensor_model == "ncxxxxh103": + temp_sensor = "MUR00" + elif temp_sensor_man == "semitec": + if temp_sensor_model == "103jt": + temp_sensor = "SEM00" + elif temp_sensor_man == "vishay": + if temp_sensor_model == "ntcalug01a103g": + temp_sensor = "VIS00" + elif temp_sensor_model == "ntcle317e4103sba": + temp_sensor = "VIS01" + elif temp_sensor_model == "ntcle413e2103f102l": + temp_sensor = "VIS02" + build_configuration["temp_sensor_name"] = temp_sensor + + # get temp sensor method + temp_sensor_meth = str(self.env.temperature_sensor_meth) + temp_sensor_method = "LOOKUP_TABLE" + if temp_sensor_meth == "polynomial": + temp_sensor_method = "POLYNOMIAL" + build_configuration["temp_sensor_method"] = temp_sensor_method + + return build_configuration + def sig_explicit_deps(self): """Defines how to get signature of this task (and thus when to rerun it)""" version_output = self.get_version_from_git() @@ -1285,7 +1422,8 @@ def create_version_file(self): "Not a git repository. Proceeding without version information." ) repo = None - except: # pylint: disable=bare-except + # pylint: disable=bare-except + except: # noqa: E722 Logs.error(f"An unexpected error occurred:\n{sys.exc_info()[0]}") Logs.warn("Proceeding without version information.") repo = None diff --git a/tools/waf-tools/f_ti_arm_cgt_cc_options.py b/tools/waf-tools/f_ti_arm_cgt_cc_options.py old mode 100644 new mode 100755 index a7f25ab3..02ec4846 --- a/tools/waf-tools/f_ti_arm_cgt_cc_options.py +++ b/tools/waf-tools/f_ti_arm_cgt_cc_options.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause diff --git a/tools/waf-tools/f_ti_arm_helper.py b/tools/waf-tools/f_ti_arm_helper.py old mode 100644 new mode 100755 index ab745d3c..4eeb9bef --- a/tools/waf-tools/f_ti_arm_helper.py +++ b/tools/waf-tools/f_ti_arm_helper.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -68,14 +67,6 @@ def run_build_for_defines(self, *k, **kw): # pylint: disable-msg=unused-argumen Returns: tuple: A tuple containing the success of the build and the path to the output directory """ - buf = [] - for key in sorted(kw.keys()): - v = kw[key] # pylint: disable-msg=invalid-name - if hasattr(v, "__call__"): - buf.append(Utils.h_fun(v)) - else: - buf.append(str(v)) - h = Utils.h_list(buf) # pylint: disable-msg=invalid-name,W0612 _dir = ( self.bldnode.abspath() + os.sep diff --git a/tools/waf-tools/f_ti_arm_tools.py b/tools/waf-tools/f_ti_arm_tools.py old mode 100644 new mode 100755 index 0d32d622..1c95d5a0 --- a/tools/waf-tools/f_ti_arm_tools.py +++ b/tools/waf-tools/f_ti_arm_tools.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -51,7 +50,6 @@ "armacpia", "armadv", "armcg", - "armcl", "armclist", "armdem", "armdis", diff --git a/tools/waf-tools/f_ti_color_arm_cgt.py b/tools/waf-tools/f_ti_color_arm_cgt.py old mode 100644 new mode 100755 index 8152dd73..18ef64c5 --- a/tools/waf-tools/f_ti_color_arm_cgt.py +++ b/tools/waf-tools/f_ti_color_arm_cgt.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -60,6 +59,7 @@ "catastrophic error", ] + # pylint: disable-msg=invalid-name,too-few-public-methods class armclFormatter(Logs.formatter): """Custom formatter for armcl output diff --git a/tools/waf-tools/f_unit_test.py b/tools/waf-tools/f_unit_test.py old mode 100644 new mode 100755 index b8585654..76b2fb66 --- a/tools/waf-tools/f_unit_test.py +++ b/tools/waf-tools/f_unit_test.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -113,22 +112,16 @@ def configure(conf): ] # get build directory - conf.env.append_unique("CEEDLING_OPTIONS", ["verbosity[3]"]) + conf.env.append_unique("CEEDLING_OPTIONS", ["--verbosity=normal"]) conf.env.append_unique("CEEDLING_TEST_OPTIONS", ["test:all"]) conf.env.append_unique("CEEDLING_COVERAGE_OPTIONS", ["gcov:all"]) ceedling_project_file_dir = conf.path.find_dir(os.path.join("conf", "unit")) if Utils.is_win32: - ext = "cmd" ceedling_project_file = ceedling_project_file_dir.find_node("project_win32.yml") else: - ext = "sh" ceedling_project_file = ceedling_project_file_dir.find_node("project_posix.yml") - ceedling_cmd_file = conf.path.find_node( - os.path.join("conf", "unit", f"ceedling.{ext}") - ) conf.env.CEEDLING_MAIN_PROJECT_FILE = ceedling_project_file.relpath() - conf.env.CEEDLING_CMD_FILE = ceedling_cmd_file.relpath() conf.env.CEEDLING_BUILD_PATH = os.path.join( ".", conf.path.get_bld().path_from(conf.path), "unit_test" ) diff --git a/tools/waf-tools/f_vscode.py b/tools/waf-tools/f_vscode.py old mode 100644 new mode 100755 index 15e8b991..b31309bf --- a/tools/waf-tools/f_vscode.py +++ b/tools/waf-tools/f_vscode.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -44,237 +43,580 @@ For information on VS Code see https://code.visualstudio.com/. """ +# pylint: disable=too-many-locals,too-many-statements + import os -from pathlib import Path +import copy import re +import json +import shutil +from pathlib import Path -import jinja2 -from waflib import Context, Utils +from waflib import Context, Utils, Logs +from waflib.Node import Node +from waflib.Configure import ConfigurationContext, conf -# This tool uses slash as path separator for the sake of simplicity as it -# - works on both, Windows and unix-like systems (see -# https://docs.microsoft.com/en-us/archive/blogs/larryosterman/why-is-the-dos-path-character) -# - it make the json configuration file more readable +if Utils.is_win32: + BAUHAUS_DIR = ( + Path(os.environ.get("ProgramFiles(x86)", "C:\\Program Files(x86)")) / "Bauhaus" + ) + FOX_WRAPPER_EXT = "bat" +else: + BAUHAUS_DIR = Path(os.environ.get("HOME", "/")) / "bauhaus-suite" + FOX_WRAPPER_EXT = "sh" -def fix_jinja(txt): - """appends empty line to file, if missing""" - return ( - os.linesep.join([s for s in txt.splitlines() if not s.strip() == ""]) - + os.linesep +def dump_json_to_node(node: Node, cfg: dict): + """Dump dictionary to node""" + Path(node.abspath()).write_text( + json.dumps(cfg, indent=2, sort_keys=False), encoding="utf-8" ) -def configure(conf): # pylint: disable=too-many-statements,too-many-branches - """configuration step of the VS Code waf tool: +def get_axivion_modules(ax_modules_rel: Path, cafecc: str = "") -> list[str]: + """Prepares the Axivion Modules path""" + axivion_modules = [] + if BAUHAUS_DIR.is_dir(): + axivion_modules.append((BAUHAUS_DIR / ax_modules_rel).as_posix()) + if cafecc: + axivion_modules.append((Path(cafecc).parent.parent / ax_modules_rel).as_posix()) + return axivion_modules - - Find code - - configure a project if code was found""" - # create a VS Code workspace if code is installed on this platform + +def default_includes( + ctx: ConfigurationContext, base_dir: Node, inc_file: str +) -> list[str]: + """Get include lines from a file""" + inc_node = base_dir.find_node(inc_file) + + if not inc_node: + ctx.fatal(f"Could not find '{os.path.join(base_dir.abspath(), inc_file)}'.") + txt: str = inc_node.read(encoding="utf-8") + return txt.splitlines() + + +def get_vscode_relevant_defines(compiler_builtin_defines: list[str]) -> list[str]: + """Get all compiler builtin defines formatted for VS Code""" + reg = re.compile(r"(#define)([ ])([a-zA-Z0-9_]{1,})([ ])([a-zA-Z0-9_\":. ]{1,})") + vscode_defines = [] + for d in compiler_builtin_defines: + define = d.split("/*")[0] + _def = reg.search(define) + if _def: + def_name, val = _def.group(3), _def.group(5) + if def_name in ( + "__DATE__", + "__TIME__", + "__EDG_VERSION__", + "__edg_front_end__", + "__EDG_SIZE_TYPE__", + "__EDG_PTRDIFF_TYPE__", + ): + continue + vscode_defines.append(f"{def_name}={val}") + return vscode_defines + + +def get_hcg_includes(halcogen: list) -> list[str]: + """get HALCoGen includes""" + try: + return [ + Path( + os.path.join( + Path(halcogen[0]).parent.parent.parent, + "F021 Flash API", + "02.01.01", + "include", + ) + ).as_posix() + ] + except IndexError: + return [] + + +@conf +def get_fox_py_wrapper_executable(ctx: ConfigurationContext) -> bool: + """check which fox.py-wrapper to use (.bat, .ps1 or .sh)""" + ctx.start_msg("Checking for 'fox.py' wrapper:") + if Utils.is_win32: + for i in ("bat", "ps1", "sh"): + ctx.find_program("fox", var="FOX_WRAPPER", mandatory=False, exts=f".{i}") + if ctx.env.FOX_WRAPPER: + ctx.env.FOX_WRAPPER = [str(ctx.path.find_node(ctx.env.FOX_WRAPPER[0]))] + cmd = [ctx.env.FOX_WRAPPER[0], "-h"] + with Utils.subprocess.Popen( + cmd, + cwd=ctx.path.abspath(), + stderr=Utils.subprocess.PIPE, + stdout=Utils.subprocess.PIPE, + ) as p: + p.communicate() + if not p.returncode: + break # we have successfully set 'ctx.env.FOX_WRAPPER' + # fallback to 'find_node' + ctx.env.append_unique("FOX_WRAPPER", str(ctx.path.find_node("fox.bat"))) + else: + ctx.find_program("fox.sh", var="FOX_WRAPPER") + if ctx.env.FOX_WRAPPER: + ctx.env.FOX_WRAPPER = [str(ctx.path.find_node(ctx.env.FOX_WRAPPER[0]))] + cmd = [ctx.env.FOX_WRAPPER[0], "-h"] + with Utils.subprocess.Popen(cmd, cwd=ctx.path.abspath()) as p: + p.communicate() + if p.returncode: # we could **NOT** find a working fox wrapper + ctx.env.FOX_WRAPPER = "" + + # fallback to 'find_node' + if not ctx.env.FOX_WRAPPER: + ctx.env.append_unique("FOX_WRAPPER", str(ctx.path.find_node("fox.sh"))) + + ctx.end_msg(ctx.env.get_flat("FOX_WRAPPER")) + + +@conf +def find_vscode(ctx: ConfigurationContext) -> bool: + """Find VS Code""" is_remote_session = False - conf.start_msg("Checking for program 'code'") + ctx.start_msg("Checking for program 'code'") if Utils.is_win32: - conf.find_program("code", mandatory=False) - if not conf.env.CODE: + ctx.find_program("code", mandatory=False) + if not ctx.env.CODE: code_dir = "Microsoft VS Code" path_list = [ os.path.join(os.environ["LOCALAPPDATA"], "Programs", code_dir), os.path.join(os.environ["PROGRAMFILES"], code_dir), ] - conf.find_program( + ctx.find_program( "code", path_list=path_list, mandatory=False, ) else: - conf.find_program("code", mandatory=False) - if not conf.env.CODE: + ctx.find_program("code", mandatory=False) + if not ctx.env.CODE: # we might be in a remote environment, scan for this code_server_dir = os.path.join(os.path.expanduser("~"), ".vscode-server") is_remote_session = os.path.isdir(code_server_dir) - conf.msg("Found 'vscode-server' (remote session)", code_server_dir) - if not (conf.env.CODE or is_remote_session): - conf.end_msg(False) - return - conf.end_msg(conf.env.get_flat("CODE") or "remote") - conf.start_msg("Creating workspace") - vscode_dir = conf.path.make_node(".vscode") + ctx.msg("Found 'vscode-server' (remote session)", code_server_dir) + + if not (ctx.env.CODE or is_remote_session): + ctx.end_msg(False) + return False + + ctx.end_msg(ctx.env.get_flat("CODE") or "remote") + return True + + +@conf +def valid_configuration_files(ctx: ConfigurationContext, base_cfg_dir: Node): + """Validate, that all VS configuration files are valid json files""" + err = 0 + for i in base_cfg_dir.ant_glob("**/*.json"): + try: + i.read_json() + except json.decoder.JSONDecodeError: + err += 1 + Logs.error(f"'{i}' is not a valid json file.") + + if err: + ctx.fatal("Invalid configuration files provided.") + + +@conf +def setup_generic(ctx: ConfigurationContext, base_cfg_dir: Node): + """Setup the generic VS Code configuration""" + # Setup requires: + # - copy cspell.json verbatim + # - copy c_cpp_properties.json and adapt paths + # - copy settings.json and adapt paths + # - copy tasks.json and adapt paths + + # First copy everything from the configuration directory to the actual + # required location, so that in later steps the setup can be adapted and + # then write the configuration to the specific configuration file. + + ctx.start_msg("Creating generic workspace") + vscode_dir = ctx.path.make_node(".vscode") vscode_dir.mkdir() - vscode_config_dir = conf.path.find_dir(os.path.join("tools", "ide", "vscode")) - template_loader = jinja2.FileSystemLoader(searchpath=vscode_config_dir.relpath()) - template_env = jinja2.Environment(loader=template_loader) - if Utils.is_win32: - waf_wrapper_script = Path(conf.path.abspath()).as_posix() + "/waf.bat" - else: - waf_wrapper_script = Path(conf.path.abspath()) / "waf.sh" - axivion_base_path = Path( - os.path.join(conf.path.abspath(), "tests", "axivion") - ).as_posix() - axivion_start_analysis = None - axivion_start_dashboard = None - axivion_config_exe = None - if Utils.is_win32: - axivion_start_analysis = axivion_base_path + "/scripts/start_local_analysis.bat" - axivion_start_dashboard = ( - axivion_base_path + "/scripts/start_local_dashserver.bat" - ) - if conf.env.AXIVION_CONFIG: - axivion_config_exe = Path(conf.env.AXIVION_CONFIG[0]).as_posix() - - template = template_env.get_template("tasks.json.jinja2") - tasks = template.render( - WAF_WRAPPER_SCRIPT=waf_wrapper_script, - AXIVION_CONFIG_EXE=axivion_config_exe, - AXIVION_START_ANALYSIS=axivion_start_analysis, - AXIVION_START_DASHBOARD=axivion_start_dashboard, - JFLASH=conf.env.JFLASH, + shutil.copy2(base_cfg_dir.find_node("cspell.json").abspath(), vscode_dir.abspath()) + for i in base_cfg_dir.ant_glob("generic/*.json"): + shutil.copy2(i.abspath(), vscode_dir.abspath()) + + ### c_cpp_properties.json + c_cpp_properties_node = vscode_dir.find_node("c_cpp_properties.json") + if not c_cpp_properties_node: + ctx.fatal(f"Could not find 'c_cpp_properties.json' in {vscode_dir}") + c_cpp_properties = c_cpp_properties_node.read_json() + + compiler_builtin_defines: list[str] = ( + ctx.root.find_node(ctx.env.COMPILER_BUILTIN_DEFINES_FILE[0]) + .read(encoding="utf-8") + .splitlines() + ) + + # ctx.env.DEFINES: we need a deepcopy of these defines otherwise it alters + # the defines passed to the compiler at build-time! + vscode_defines = get_vscode_relevant_defines( + compiler_builtin_defines + ) + copy.deepcopy(ctx.env.DEFINES) + + win32_config_index = 0 + inc_path_halcogen = get_hcg_includes(ctx.env.HALCOGEN) + c_cpp_properties["configurations"][win32_config_index]["includePath"].extend( + [(Path(ctx.env.CC[0]).parent.parent / "include").as_posix()] + inc_path_halcogen + ) + c_cpp_properties["configurations"][win32_config_index]["browse"]["path"].extend( + [(Path(ctx.env.CC[0]).parent.parent / "include").as_posix()] + inc_path_halcogen ) - vsc_tasks_file = os.path.join(vscode_dir.relpath(), "tasks.json") - conf.path.make_node(vsc_tasks_file).write(fix_jinja(tasks)) - - template = template_env.get_template("extensions.json.jinja2") - extensions = template.render() - vsc_extensions_file = os.path.join(vscode_dir.relpath(), "extensions.json") - conf.path.make_node(vsc_extensions_file).write(fix_jinja(extensions)) - - template = template_env.get_template("cspell.json.jinja2") - cspell = template.render() - vsc_cspell_file = os.path.join(vscode_dir.relpath(), "cspell.json") - conf.path.make_node(vsc_cspell_file).write(fix_jinja(cspell)) - - template = template_env.get_template("settings.json.jinja2") - # Python and friends: Python, conda, pylint, black - py_exe = "python" - if conf.env.PYTHON: - py_exe = Path(conf.env.PYTHON[0]).as_posix() - pylint_exe = "pylint" - if conf.env.PYLINT: - pylint_exe = Path(conf.env.PYLINT[0]).as_posix() - pylint_cfg = "" - if conf.env.PYLINT_CONFIG: - pylint_cfg = Path(conf.env.PYLINT_CONFIG[0]).as_posix() - black_exe = "black" - if conf.env.BLACK: - black_exe = Path(conf.env.BLACK[0]).as_posix() - black_cfg = "" - if conf.env.BLACK_CONFIG: - black_cfg = Path(conf.env.BLACK_CONFIG[0]).as_posix() - # directory of waf and waf-tools + c_cpp_properties["configurations"][win32_config_index]["defines"] = vscode_defines + + include_path = default_includes( + ctx, base_cfg_dir, "generic/g-project-include-path.txt" + ) + inc_base = "@@ROOT@@/src" + inc_app = f"{inc_base}/app" + inc_state = f"{inc_app}/application/algorithm/state_estimation" + include_path.extend( + [ + f"{inc_state}/soc/{ctx.env.state_estimator_soc}", + f"{inc_state}/soe/{ctx.env.state_estimator_soe}", + f"{inc_state}/sof/{ctx.env.state_estimator_sof}", + f"{inc_state}/soh/{ctx.env.state_estimator_soh}", + f"{inc_app}/driver/imd/{ctx.env.imd_manufacturer}", + f"{inc_app}/task/ftask/{ctx.env.RTOS_NAME[0]}", + f"{inc_app}/task/os/{ctx.env.RTOS_NAME[0]}", + f"{inc_base}/os/{ctx.env.RTOS_NAME[0]}", + f"{inc_app}/application/bal/{ctx.env.balancing_strategy}", + ( + f"{inc_app}/driver/ts/{ctx.env.temperature_sensor_manuf}/" + f"{ctx.env.temperature_sensor_model}/{ctx.env.temperature_sensor_meth}" + ), + ] + ) + p = [] + for i in ctx.env.INCLUDES_RTOS + ctx.env.INCLUDES_AFE: + k = Path(ctx.root.find_node(i).path_from(ctx.path)).as_posix() + p.append(k) + p = [f"@@ROOT@@/{i}" for i in p] + include_path.extend(p) + c_cpp_properties["env"]["ProjectIncludePath"] = [ + Path(i.replace("@@ROOT@@", ctx.path.abspath())).as_posix() + for i in sorted(include_path) + ] + + for i in c_cpp_properties["configurations"]: + if i["name"] == "Win32": + # use GCC as dummy compiler + i["compilerPath"] = Path(str(ctx.env.GCC[0])).as_posix() + dump_json_to_node(c_cpp_properties_node, c_cpp_properties) + + ### settings.json + settings_node = vscode_dir.find_node("settings.json") + if not settings_node: + ctx.fatal(f"Could not find 'settings.json' in {vscode_dir}") + settings = settings_node.read_json() + + ### settings.json: python.* waf_dir = Path(Context.waf_dir).as_posix() waf_tools_dir = Path( - os.path.join(conf.path.abspath(), "tools", "waf-tools") + os.path.join(ctx.path.abspath(), "tools", "waf-tools") ).as_posix() - # Clang-format - clang_format_executable = "" - if conf.env.CLANG_FORMAT: - clang_format_executable = Path(conf.env.CLANG_FORMAT[0]).as_posix() - ax_modules_rel = Path(os.path.join("lib", "scripts")) - - if Utils.is_win32: - axivion_modules = ( - Path(os.environ.get("ProgramFiles(x86)", "C:\\Program Files(x86)")) - / "Bauhaus" - / ax_modules_rel - ).as_posix() - userprofile = os.environ.get( - "USERPROFILE", os.environ.get("HOMEDRIVE", "C:") + os.sep - ) - else: - axivion_modules = ( - Path(os.environ.get("HOME", "/")) / "bauhaus-suite" / ax_modules_rel - ) - userprofile = os.environ.get("HOME", "~") + # now clean up the remaining configuration options in the template + settings["python.analysis.extraPaths"] = [waf_dir, waf_tools_dir] + settings["pylint.args"] = [ + f"--rcfile={Path(ctx.path.abspath()).as_posix()}/pyproject.toml" + ] - axivion_vs_config = { - "analysisProject": "foxbms-2", - "localPath": Path(conf.path.abspath()).as_posix(), - "analysisPath": Path(userprofile).as_posix(), + ### settings.json: files.* + settings["files.exclude"] = { + **settings["files.exclude"], + **{ + ".vscode/**": True, + "hal/**": True, + "opt/**": True, + }, } - if conf.env.AXIVION_CC: - projects_path = os.path.join(userprofile, ".bauhaus", "localbuild", "projects") - axivion_vs_config["analysisPath"] = Path(projects_path).as_posix() - try: - axivion_modules = ( - Path(conf.env.AXIVION_CC[0]).parent.parent / ax_modules_rel - ).as_posix() - except IndexError: - pass - settings = template.render( - PYTHONPATH=py_exe, - PYTHON_ANALYSIS_EXTRA_PATHS=[waf_dir, waf_tools_dir, axivion_modules], - PYLINT_PATH=pylint_exe, - PYLINT_CONFIG=pylint_cfg, - BLACK_PATH=black_exe, - BLACK_CONFIG=black_cfg, - CLANG_FORMAT_EXECUTABLE=clang_format_executable, - AXIVION_VS_CONFIG=axivion_vs_config, - ) + dump_json_to_node(settings_node, settings) + + ### tasks.json + tasks_node = vscode_dir.find_node("tasks.json") + if not tasks_node: + ctx.fatal(f"Could not find 'tasks.json' in {vscode_dir}") + tasks = tasks_node.read_json() + for i in tasks["tasks"]: + i["command"] = Path(ctx.env.FOX_WRAPPER[0]).as_posix() + i["options"]["cwd"] = Path(ctx.path.abspath()).as_posix() + for p in i["problemMatcher"]: + if isinstance(p, dict): + p["fileLocation"] = ["autoDetect", Path(ctx.path.abspath()).as_posix()] + dump_json_to_node(tasks_node, tasks) - vsc_settings_file = os.path.join(vscode_dir.relpath(), "settings.json") - conf.path.make_node(vsc_settings_file).write(fix_jinja(settings)) + ctx.end_msg(vscode_dir) - template = template_env.get_template("c_cpp_properties.json.jinja2") - defines_read = ( - conf.root.find_node(conf.env.COMPILER_BUILTIN_DEFINES_FILE[0]) - .read() + +@conf +def setup_src(ctx: ConfigurationContext, base_cfg_dir: Node): + """Setup the src VS Code configuration""" + # Setup requires: + # - copy cspell.json verbatim + # - copy c_cpp_properties.json and adapt paths + # - copy settings.json and adapt paths + # - copy tasks.json and adapt paths + + # First copy everything from the configuration directory to the actual + # required location, so that in later steps the setup can be adapted and + # then write the configuration to the specific configuration file. + + ctx.start_msg("Creating target workspace") + vscode_dir = ctx.path.make_node("src/.vscode") + vscode_dir.mkdir() + + shutil.copy2(base_cfg_dir.find_node("cspell.json").abspath(), vscode_dir.abspath()) + for i in base_cfg_dir.ant_glob("src/*.json"): + shutil.copy2(i.abspath(), vscode_dir.abspath()) + + ### c_cpp_properties.json + c_cpp_properties_node = vscode_dir.find_node("c_cpp_properties.json") + if not c_cpp_properties_node: + ctx.fatal(f"Could not find 'c_cpp_properties.json' in {vscode_dir}") + c_cpp_properties = c_cpp_properties_node.read_json() + + compiler_builtin_defines: list[str] = ( + ctx.root.find_node(ctx.env.COMPILER_BUILTIN_DEFINES_FILE[0]) + .read(encoding="utf-8") .splitlines() ) - vscode_defines = [i.split("=") for i in conf.env.DEFINES] - reg = re.compile(r"(#define)([ ])([a-zA-Z0-9_]{1,})([ ])([a-zA-Z0-9_\":. ]{1,})") - for d in defines_read: - define = d.split("/*")[0] - _def = reg.search(define) - if _def: - def_name, val = _def.group(3), _def.group(5) - if def_name in ("__DATE__", "__TIME__"): - continue - if '"' in val: - val = val.replace('"', '\\"') - vscode_defines.append((def_name, val)) - rtos_includes = [ - Path(str(conf.root.find_node(i).path_from(conf.path))).as_posix() - for i in conf.env.INCLUDES_RTOS + + # ctx.env.DEFINES: we need a deepcopy of these defines otherwise it alters + # the defines passed to the compiler at build-time! + vscode_defines = get_vscode_relevant_defines( + compiler_builtin_defines + ) + copy.deepcopy(ctx.env.DEFINES) + + win32_config_index = 0 + inc_path_halcogen = get_hcg_includes(ctx.env.HALCOGEN) + c_cpp_properties["configurations"][win32_config_index]["includePath"].extend( + [(Path(ctx.env.CC[0]).parent.parent / "include").as_posix()] + inc_path_halcogen + ) + c_cpp_properties["configurations"][win32_config_index]["browse"]["path"].extend( + [(Path(ctx.env.CC[0]).parent.parent / "include").as_posix()] + inc_path_halcogen + ) + c_cpp_properties["configurations"][win32_config_index]["defines"] = vscode_defines + + include_path = default_includes(ctx, base_cfg_dir, "src/s-project-include-path.txt") + + inc_base = "@@ROOT@@/src" + inc_app = f"{inc_base}/app" + inc_state = f"{inc_app}/application/algorithm/state_estimation" + include_path.extend( + [ + f"{inc_state}/soc/{ctx.env.state_estimator_soc}", + f"{inc_state}/soe/{ctx.env.state_estimator_soe}", + f"{inc_state}/sof/{ctx.env.state_estimator_sof}", + f"{inc_state}/soh/{ctx.env.state_estimator_soh}", + f"{inc_app}/driver/imd/{ctx.env.imd_manufacturer}", + f"{inc_app}/task/ftask/{ctx.env.RTOS_NAME[0]}", + f"{inc_app}/task/os/{ctx.env.RTOS_NAME[0]}", + f"{inc_base}/os/{ctx.env.RTOS_NAME[0]}", + f"{inc_app}/application/bal/{ctx.env.balancing_strategy}", + ( + f"{inc_app}/driver/ts/{ctx.env.temperature_sensor_manuf}/" + f"{ctx.env.temperature_sensor_model}/{ctx.env.temperature_sensor_meth}" + ), + ] + ) + p = [] + for i in ctx.env.INCLUDES_RTOS + ctx.env.INCLUDES_AFE: + k = Path(ctx.root.find_node(i).path_from(ctx.path)).as_posix() + p.append(k) + p = [f"@@ROOT@@/{i}" for i in p] + include_path.extend(p) + c_cpp_properties["env"]["ProjectIncludePath"] = [ + Path(i.replace("@@ROOT@@", ctx.path.abspath())).as_posix() + for i in sorted(include_path) ] - afe_includes = [ - Path(str(conf.root.find_node(i).path_from(conf.path))).as_posix() - for i in conf.env.INCLUDES_AFE + + for i in c_cpp_properties["configurations"]: + if i["name"] == "Win32": + # use GCC as dummy compiler + i["compilerPath"] = Path(str(ctx.env.GCC[0])).as_posix() + dump_json_to_node(c_cpp_properties_node, c_cpp_properties) + + ### settings.json + settings_node = vscode_dir.find_node("settings.json") + if not settings_node: + ctx.fatal(f"Could not find 'settings.json' in {vscode_dir}") + settings = settings_node.read_json() + + ### settings.json: python.* + waf_dir = Path(Context.waf_dir).as_posix() + waf_tools_dir = Path( + os.path.join(ctx.path.abspath(), "tools", "waf-tools") + ).as_posix() + + # now clean up the remaining configuration options in the template + settings["python.analysis.extraPaths"] = [waf_dir, waf_tools_dir] + settings["pylint.args"] = [ + f"--rcfile={Path(ctx.path.abspath()).as_posix()}/pyproject.toml" ] - c_cpp_properties = template.render( - ARMCL=Path(conf.env.CC[0]).as_posix(), - RTOS=conf.env.RTOS_NAME[0], - RTOS_INCLUDES=rtos_includes, - BALANCING_STRATEGY=conf.env.balancing_strategy, - AFE_INCLUDES=afe_includes, - TEMPERATURE_SENSOR_MANUFACTURER=conf.env.temperature_sensor_manuf, - TEMPERATURE_SENSOR_MODEL=conf.env.temperature_sensor_model, - TEMPERATURE_SENSOR_METHOD=conf.env.temperature_sensor_meth, - STATE_ESTIMATOR_SOC=conf.env.state_estimator_soc, - STATE_ESTIMATOR_SOE=conf.env.state_estimator_soe, - STATE_ESTIMATOR_SOF=conf.env.state_estimator_sof, - STATE_ESTIMATOR_SOH=conf.env.state_estimator_soh, - IMD_MANUFACTURER=conf.env.imd_manufacturer, - IMD_MODEL=conf.env.imd_model, - INCLUDES=[Path(x).as_posix() for x in conf.env.INCLUDES], - C_STANDARD="c11", - DEFINES=vscode_defines, - ) - vsc_c_cpp_properties_file = os.path.join( - vscode_dir.relpath(), "c_cpp_properties.json" + + ### settings.json: files.* + settings["files.exclude"] = { + **settings["files.exclude"], + **{ + ".vscode/**": True, + "hal/**": True, + "opt/**": True, + }, + } + + dump_json_to_node(settings_node, settings) + + ### tasks.json + tasks_node = vscode_dir.find_node("tasks.json") + if not tasks_node: + ctx.fatal(f"Could not find 'tasks.json' in {vscode_dir}") + tasks = tasks_node.read_json() + for i in tasks["tasks"]: + i["command"] = Path(ctx.env.FOX_WRAPPER[0]).as_posix() + i["options"]["cwd"] = Path(ctx.path.abspath()).as_posix() + for p in i["problemMatcher"]: + p["fileLocation"] = ["autoDetect", Path(ctx.path.abspath()).as_posix()] + dump_json_to_node(tasks_node, tasks) + + ctx.end_msg(vscode_dir) + + +@conf +def setup_embedded_unit_tests(ctx: ConfigurationContext, base_cfg_dir: Node): + """Setup the embedded unit test VS Code configuration""" + # Setup requires: + # - copy cspell.json verbatim + # - copy c_cpp_properties.json and adapt paths + # - copy launch.json and adapt paths + # - copy settings.json and adapt paths + # - copy tasks.json and adapt paths + + # First copy everything from the configuration directory to the actual + # required location, so that in later steps the setup can be adapted and + # then write the configuration to the specific configuration file. + + ctx.start_msg("Creating embedded unit tests workspace") + vscode_dir = ctx.path.make_node("tests/unit/.vscode") + vscode_dir.mkdir() + + shutil.copy2(base_cfg_dir.find_node("cspell.json").abspath(), vscode_dir.abspath()) + for i in base_cfg_dir.ant_glob("embedded-tests/*.json"): + shutil.copy2(i.abspath(), vscode_dir.abspath()) + + ### c_cpp_properties.json + c_cpp_properties_node = vscode_dir.find_node("c_cpp_properties.json") + if not c_cpp_properties_node: + ctx.fatal(f"Could not find 'c_cpp_properties.json' in {vscode_dir}") + c_cpp_properties = c_cpp_properties_node.read_json() + + # all directories in /src + include_dirs = ctx.path.ant_glob("src/**", src=False, dir=True, excl=["**/.vscode"]) + c_cpp_properties["env"]["ProjectIncludePath"] = [ + Path(i.abspath()).as_posix() for i in include_dirs + ] + + # add some testing specific paths + for i in default_includes( + ctx, base_cfg_dir, "embedded-tests/e-project-include-path.txt" + ): + c_cpp_properties["env"]["ProjectIncludePath"].append( + Path(i.replace("@@ROOT@@", ctx.path.abspath())).as_posix() + ) + c_cpp_properties["env"]["ProjectIncludePath"] = sorted( + c_cpp_properties["env"]["ProjectIncludePath"] ) - for i in conf.env.VSCODE_MK_DIRS: - conf.path.make_node(i).mkdir() - conf.path.make_node(vsc_c_cpp_properties_file).write(fix_jinja(c_cpp_properties)) + for i in c_cpp_properties["configurations"]: + if i["name"] == "Win32": + i["compilerPath"] = Path(str(ctx.env.GCC[0])).as_posix() + dump_json_to_node(c_cpp_properties_node, c_cpp_properties) + + ### launch.json + launch_node = vscode_dir.find_node("launch.json") + if not launch_node: + ctx.fatal(f"Could not find 'launch.json' in {vscode_dir}") + launch = launch_node.read_json() + if ctx.env.GDB: + for i in launch["configurations"]: + i["miDebuggerPath"] = Path(str(ctx.env.GDB[0])).as_posix() + i["cwd"] = Path(ctx.path.abspath()).as_posix() + i["program"] = ( + Path(ctx.path.abspath()) + / "build/unit_test/test/out/${fileBasenameNoExtension}/" + "${fileBasenameNoExtension}.out" + ).as_posix() + + dump_json_to_node(launch_node, launch) + + ### settings.json + settings_node = vscode_dir.find_node("settings.json") + if not settings_node: + ctx.fatal(f"Could not find 'settings.json' in {vscode_dir}") + settings = settings_node.read_json() + + ### settings.json: python.* + waf_dir = Path(Context.waf_dir).as_posix() + waf_tools_dir = Path( + os.path.join(ctx.path.abspath(), "tools", "waf-tools") + ).as_posix() + + # now clean up the remaining configuration options in the template + settings["python.analysis.extraPaths"] = [waf_dir, waf_tools_dir] + settings["pylint.args"] = [ + f"--rcfile={Path(ctx.path.abspath()).as_posix()}/pyproject.toml" + ] + + ### settings.json: files.* + settings["files.exclude"] = { + **settings["files.exclude"], + **{ + "**/build/**": True, + "**/.lock-waf_*_build": True, + ".vscode/**": True, + "axivion/**": True, + "gen_hcg/**": True, + }, + } + + dump_json_to_node(settings_node, settings) + + ### tasks.json + tasks_node = vscode_dir.find_node("tasks.json") + if not tasks_node: + ctx.fatal(f"Could not find 'tasks.json' in {vscode_dir}") + tasks = tasks_node.read_json() + for i in tasks["tasks"]: + i["command"] = Path(ctx.env.FOX_WRAPPER[0]).as_posix() + i["options"]["cwd"] = Path(ctx.path.abspath()).as_posix() + + dump_json_to_node(tasks_node, tasks) + + ctx.end_msg(vscode_dir) + + +def configure(ctx: ConfigurationContext): # pylint: disable=too-many-branches + """configuration step of the VS Code waf tool: + + - Find code + - configure a project if code was found""" + # create a VS Code workspace if code is installed on this platform + if not ctx.find_vscode(): + return - template = template_env.get_template("launch.json.jinja2") - gdb_exe = "gdb" - if conf.env.GDB: - gdb_exe = Path(conf.env.GDB[0]).as_posix() - launch = template.render(GDB=gdb_exe) + ctx.get_fox_py_wrapper_executable() - vsc_launch_file = os.path.join(vscode_dir.relpath(), "launch.json") - conf.path.make_node(vsc_launch_file).write(fix_jinja(launch)) + # We have found 'code', check that the configuration files are valid + base_cfg_dir = ctx.path.find_dir(os.path.join("tools", "ide", "vscode")) + ctx.valid_configuration_files(base_cfg_dir) - conf.end_msg("ok") + # # configure the workspaces + ctx.setup_generic(base_cfg_dir) + ctx.setup_src(base_cfg_dir) + ctx.setup_embedded_unit_tests(base_cfg_dir) diff --git a/tools/waf-tools/why.py b/tools/waf-tools/why.py deleted file mode 100644 index c465544f..00000000 --- a/tools/waf-tools/why.py +++ /dev/null @@ -1,77 +0,0 @@ -#! /usr/bin/env python -# encoding: utf-8 -# Thomas Nagy, 2010 (ita) - -""" -This tool modifies the task signature scheme to store and obtain -information about the task execution (why it must run, etc):: - - def configure(conf): - conf.load('why') - -After adding the tool, a full rebuild is necessary: -waf clean build --zones=task -""" - -from waflib import Task, Utils, Logs, Errors - -def signature(self): - # compute the result one time, and suppose the scan_signature will give the good result - try: - return self.cache_sig - except AttributeError: - pass - - self.m = Utils.md5() - self.m.update(self.hcode) - id_sig = self.m.digest() - - # explicit deps - self.m = Utils.md5() - self.sig_explicit_deps() - exp_sig = self.m.digest() - - # env vars - self.m = Utils.md5() - self.sig_vars() - var_sig = self.m.digest() - - # implicit deps / scanner results - self.m = Utils.md5() - if self.scan: - try: - self.sig_implicit_deps() - except Errors.TaskRescan: - return self.signature() - impl_sig = self.m.digest() - - ret = self.cache_sig = impl_sig + id_sig + exp_sig + var_sig - return ret - - -Task.Task.signature = signature - -old = Task.Task.runnable_status -def runnable_status(self): - ret = old(self) - if ret == Task.RUN_ME: - try: - old_sigs = self.generator.bld.task_sigs[self.uid()] - except (KeyError, AttributeError): - Logs.debug("task: task must run as no previous signature exists") - else: - new_sigs = self.cache_sig - def v(x): - return Utils.to_hex(x) - - Logs.debug('Task %r', self) - msgs = ['* Implicit or scanner dependency', '* Task code', '* Source file, explicit or manual dependency', '* Configuration data variable'] - tmp = 'task: -> %s: %s %s' - for x in range(len(msgs)): - l = len(Utils.SIG_NIL) - a = new_sigs[x*l : (x+1)*l] - b = old_sigs[x*l : (x+1)*l] - if (a != b): - Logs.debug(tmp, msgs[x].ljust(35), v(a), v(b)) - return ret -Task.Task.runnable_status = runnable_status diff --git a/tools/waf-verify-sig.py b/tools/waf-verify-sig.py deleted file mode 100644 index b555add2..00000000 --- a/tools/waf-verify-sig.py +++ /dev/null @@ -1,56 +0,0 @@ -#! /usr/bin/env python -# encoding: utf-8 -# Thomas Nagy, 2014-2015 - -""" -A simple file for verifying signatures in signed waf files -This script is meant for Python >= 2.6 and the encoding is bytes - latin-1 - -Distributing detached signatures is boring -""" - -import sys, os, re, subprocess - -if __name__ == '__main__': - try: - infile = sys.argv[1] - except IndexError: - infile = 'waf' - - try: - outfile1 = sys.argv[2] - except IndexError: - outfile1 = infile + '-sig' - - try: - outfile2 = sys.argv[3] - except IndexError: - outfile2 = outfile1 + '.asc' - - f1 = open(outfile1, 'wb') - f2 = open(outfile2, 'wb') - f = open(infile, 'rb') - try: - txt = f.read() - - lastline = txt.decode('latin-1').splitlines()[-1] # just the last line - if not lastline.startswith('#-----BEGIN PGP SIGNATURE-----'): - print("ERROR: there is no signature to verify in %r :-/" % infile) - sys.exit(1) - - sigtext = lastline.replace('\\n', '\n') # convert newlines - sigtext = sigtext[1:] # omit the '# character' - sigtext = sigtext.encode('latin-1') # python3 - - f2.write(sigtext) - f1.write(txt[:-len(lastline) - 1]) # one newline character was eaten from splitlines() - finally: - f.close() - f1.close() - f2.close() - - cmd = 'gpg --verify %s' % outfile2 - print("-> %r" % cmd) - ret = subprocess.Popen(cmd, shell=True).wait() - sys.exit(ret) - diff --git a/waf.bat b/waf.bat deleted file mode 100644 index 2ec3dade..00000000 --- a/waf.bat +++ /dev/null @@ -1,122 +0,0 @@ -@REM Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -@REM All rights reserved. -@REM -@REM SPDX-License-Identifier: BSD-3-Clause -@REM -@REM Redistribution and use in source and binary forms, with or without -@REM modification, are permitted provided that the following conditions are met: -@REM -@REM 1. Redistributions of source code must retain the above copyright notice, this -@REM list of conditions and the following disclaimer. -@REM -@REM 2. Redistributions in binary form must reproduce the above copyright notice, -@REM this list of conditions and the following disclaimer in the documentation -@REM and/or other materials provided with the distribution. -@REM -@REM 3. Neither the name of the copyright holder nor the names of its -@REM contributors may be used to endorse or promote products derived from -@REM this software without specific prior written permission. -@REM -@REM THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -@REM AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -@REM IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -@REM DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -@REM FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -@REM DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -@REM SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -@REM CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -@REM OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -@REM OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -@REM -@REM We kindly request you to use one or more of the following phrases to refer to -@REM foxBMS in your hardware, software, documentation or advertising materials: -@REM -@REM - "This product uses parts of foxBMS®" -@REM - "This product includes parts of foxBMS®" -@REM - "This product is derived from foxBMS®" - -@SETLOCAL EnableExtensions EnableDelayedExpansion - -@TITLE foxBMS Development Console - -@REM Set the code page to 850 -@REM https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/chcp -@REM Get the current code page -@FOR /F "tokens=* USEBACKQ" %%F IN (`chcp.com 2^>^&1`) DO @( - @SET CODEPAGE_OUT=%%F -) -@REM split output by whitespace and use the last argument as this contains the -@REM activate code page -@FOR %%a in (%CODEPAGE_OUT%) do @( - @SET CODEPAGE=%%a -) -@REM Remove the trailing dot if it exists -@IF "%CODEPAGE:~-1%"=="." @( - @SET CODEPAGE=%CODEPAGE:~0,-1% -) ELSE ( - @SET CODEPAGE=%CODEPAGE% -) - -@REM If the code page is not multilingual, set it to 850 -@IF NOT "%CODEPAGE%"=="850" ( - @chcp.com 850 2>&1 > nul -) -@REM now we have code page that will work - -@CALL %~dp0\tools\utils\cmd\find_git.bat - -@IF DEFINED GIT_DIR ( - @set "PATH=%GIT_DIR%;%PATH%" -) - -@FOR /F "usebackq tokens=*" %%A in ("%~dp0\conf\env\paths_win32.txt") do @( - @IF EXIST %%A ( - @CALL SET "NewPath=%%NewPath%%;%%A" - ) -) - -@IF DEFINED NewPath ( - @SET "PATH=%NewPath:~1%;%PATH%" -) - -@FOR %%X in (armcl.exe) DO @( - @SET ARMCL_AVAILABLE=%%~$PATH:X -) - -@REM if FOXBMS_2_CCS_VERSION_STRICT is not set and armcl was not found in -@REM path, we try to find any CCS installation in the known installation paths -@IF NOT DEFINED FOXBMS_2_CCS_VERSION_STRICT @( - @IF NOT DEFINED ARMCL_AVAILABLE @( - @ECHO Could not find pinned compiler. Try to use any available in 'C:\ti\'. - @SET CCS_COMPILER_BIN= - @CALL %~dp0\tools\utils\cmd\find_ccs.bat - @FOR %%x in (!CCS_COMPILER_BIN! !CCS_COMPILER_LIB! !CCS_UTILS_BIN! !CCS_UTILS_CYGWIN! !CCS_UTILS_TIOBJ2BIN!) do @( - @CALL SET "CCS_PATHS=%%CCS_PATHS%%%%x;" - ) - @SET PATH=!CCS_PATHS:~0,-1!;!PATH! - ) -) - -@SET CONDA_BASE_ENVIRONMENT_ACTIVATE_SCRIPT="" -@CALL %~dp0\tools\utils\cmd\find_base_conda.bat - -@IF %CONDA_BASE_ENVIRONMENT_ACTIVATE_SCRIPT%=="" ( - pause - @EXIT /b 1 -) - -@CALL %CONDA_BASE_ENVIRONMENT_ACTIVATE_SCRIPT% %CONDA_DEVELOPMENT_ENVIRONMENT_NAME% - -@PUSHD %~dp0 -@SET PYEXE=python -@WHERE %PYEXE% 1>NUL 2>NUL -@IF %ERRORLEVEL% neq 0 SET PYEXE=py -@%PYEXE% -x "%~dp0\tools\waf" %* -@IF %ERRORLEVEL% NEQ 0 ( - @chcp.com %CODEPAGE% 2>&1 > nul - @EXIT /b %ERRORLEVEL% -) ELSE ( - @chcp.com %CODEPAGE% 2>&1 > nul - @conda deactivate -) -@POPD diff --git a/waf.sh b/waf.sh deleted file mode 100755 index 74dac562..00000000 --- a/waf.sh +++ /dev/null @@ -1,149 +0,0 @@ -#!/usr/bin/env bash -# -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. -# All rights reserved. -# -# SPDX-License-Identifier: BSD-3-Clause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# We kindly request you to use one or more of the following phrases to refer to -# foxBMS in your hardware, software, documentation or advertising materials: -# -# - "This product uses parts of foxBMS®" -# - "This product includes parts of foxBMS®" -# - "This product is derived from foxBMS®" - -set -e -# MacOS -if [ "$(uname)" == "Darwin" ]; then - echo "MacOS is currently not supported." - exit 1 -# Linux -elif [ "$(expr substr $(uname -s) 1 5)" == "Linux" ]; then - SCRIPTDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" - while read -r line; do - _line=`echo $line | sed --expression='s/^M/:/g'` - if [ -d "$_line" ]; then - PATHS_TO_ADD=`echo "${PATHS_TO_ADD}:$_line"` - fi - done < ${SCRIPTDIR}/conf/env/paths_linux.txt - PATHS_TO_ADD=`echo $PATHS_TO_ADD | awk '{gsub("C:", "/c", $0); print}'` - PATHS_TO_ADD=$(echo "${PATHS_TO_ADD#?}" | tr '\\' '/') - export PATH=$PATHS_TO_ADD:$PATH - set +e - ARMCL_TEST=`which armcl > /dev/null 2>&1` - if [ $? -ne 0 ]; then - set -e - echo "Could not find pinned compiler. Try to use any available in '/opt/ti'". - CCS_VARS=$($SCRIPTDIR/tools/utils/bash/find_ccs.sh || echo $?) - CCS_VARS_ARRAY=($CCS_VARS) - CCS_PATHS_TO_ADD=`echo $CCS_VARS | sed "s/ /:/g"` - export PATH=$CCS_PATHS_TO_ADD:$PATH - else - set -e - fi - # call find_base_conda and make sure that we do not exit by printing - # the exit code to CONDA_VARS (otherwise we would exit with set -e, here - # we will not as echo returns exit code 0) - CONDA_VARS=$($SCRIPTDIR/tools/utils/bash/find_base_conda.sh || echo $?) - if [ "${CONDA_VARS: -1}" == "1" ]; then - # strip the exit code that we have printed to CONDA_VARS and - # print the rest - echo "${CONDA_VARS: : -1}" - exit 1 - fi - CONDA_VARS_ARRAY=($CONDA_VARS) - CONDA_BASE_ENVIRONMENT_INCLUDING_DEVELOPMENT_ENVIRONMENT=${CONDA_VARS_ARRAY[0]} - CONDA_BASE_ENVIRONMENT_ACTIVATE_SCRIPT=${CONDA_VARS_ARRAY[1]} - CONDA_DEVELOPMENT_ENVIRONMENT_NAME=${CONDA_VARS_ARRAY[2]} - CONDA_DEVELOPMENT_ENVIRONMENT_CONFIGURATION_FILE=${CONDA_VARS_ARRAY[3]} - source $CONDA_BASE_ENVIRONMENT_ACTIVATE_SCRIPT base - conda activate ${CONDA_DEVELOPMENT_ENVIRONMENT_NAME} - set + # deactivate in any case the environment, therefore ignore build errors - python ${SCRIPTDIR}/tools/waf $@ - set - - conda deactivate -# Windows -elif [ "$(expr substr $(uname -s) 1 9)" == "CYGWIN_NT" ]; then - echo "Cygwin is not supported." - exit 1 -elif [ "$(expr substr $(uname -s) 1 10)" == "MINGW32_NT" ]; then - echo "32bit Windows is not supported." - exit 1 -elif [ "$(expr substr $(uname -s) 1 10)" == "MINGW64_NT" ] || [ "$(expr substr $(uname -s) 1 7)" == "MSYS_NT" ] ; then - CODEPAGE=`chcp.com | sed 's/[^0-9]*//g'` - if [ "$CODEPAGE" != "850" ]; then - chcp.com 850 >/dev/null 2>&1 - fi - SCRIPTDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" - while read -r line; do - _line=`echo $line | sed --expression='s/^M/:/g'` - if [ -d "$_line" ]; then - PATHS_TO_ADD=`echo "${PATHS_TO_ADD}:$_line"` - fi - done < ${SCRIPTDIR}/conf/env/paths_win32.txt - PATHS_TO_ADD=`echo $PATHS_TO_ADD | awk '{gsub("C:", "/c", $0); print}'` - PATHS_TO_ADD=$(echo "${PATHS_TO_ADD#?}" | tr '\\' '/') - export PATH=$PATHS_TO_ADD:$PATH - set +e - # if FOXBMS_2_CCS_VERSION_STRICT is not set and armcl was not found in - # path, we try to find any CCS installation in the known installation paths - ARMCL_TEST=`which armcl > /dev/null 2>&1` - if [ $? -ne 0 ] ; then - if [[ -z $FOXBMS_2_CCS_VERSION_STRICT ]]; then - set -e - echo "Could not find pinned compiler. Try to use any available in 'C:\ti\'". - CCS_VARS=$($SCRIPTDIR/tools/utils/bash/find_ccs.sh || echo $?) - CCS_VARS_ARRAY=($CCS_VARS) - CCS_PATHS_TO_ADD=`echo $CCS_VARS | sed "s/ /:/g"` - export PATH=$CCS_PATHS_TO_ADD:$PATH - fi - else - set -e - fi - # call find_base_conda and make sure that we do not exit by printing - # the exit code to CONDA_VARS (otherwise we would exit with set -e, here - # we will not as echo returns exit code 0) - CONDA_VARS=$($SCRIPTDIR/tools/utils/bash/find_base_conda.sh || echo $?) - if [ "${CONDA_VARS: -1}" == "1" ]; then - # strip the exit code that we have printed to CONDA_VARS and - # print the rest - echo "${CONDA_VARS: : -1}" - read -n1 -r -p "Press any key to continue..." key - exit 1 - fi - CONDA_VARS_ARRAY=($CONDA_VARS) - CONDA_BASE_ENVIRONMENT_INCLUDING_DEVELOPMENT_ENVIRONMENT=${CONDA_VARS_ARRAY[0]} - CONDA_BASE_ENVIRONMENT_ACTIVATE_SCRIPT=${CONDA_VARS_ARRAY[1]} - CONDA_DEVELOPMENT_ENVIRONMENT_NAME=${CONDA_VARS_ARRAY[2]} - CONDA_DEVELOPMENT_ENVIRONMENT_CONFIGURATION_FILE=${CONDA_VARS_ARRAY[3]} - source $CONDA_BASE_ENVIRONMENT_ACTIVATE_SCRIPT base - conda activate ${CONDA_DEVELOPMENT_ENVIRONMENT_NAME} - python ${SCRIPTDIR}/tools/waf $@ - conda deactivate - chcp.com $CODEPAGE >/dev/null 2>&1 -fi diff --git a/wscript b/wscript old mode 100644 new mode 100755 index a14884cc..7413f849 --- a/wscript +++ b/wscript @@ -1,7 +1,6 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- # -# Copyright (c) 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. +# Copyright (c) 2010 - 2024, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V. # All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause @@ -46,20 +45,20 @@ configuration the toolchain for building foxBMS binaries, the documentation and running various checks on the source files. """ +# pylint: disable=too-many-locals +import dataclasses +import linecache import os import pathlib import shlex import sys import tarfile -import linecache -import stat from binascii import hexlify -import dataclasses from typing import Union import jsonschema -from waflib import Build, Configure, Context, Errors, Logs, Options, Scripting, Utils +from waflib import Build, Context, Errors, Logs, Options, Scripting, Utils from waflib.Build import ( BuildContext, CleanContext, @@ -69,27 +68,24 @@ from waflib.Build import ( ) Context.Context.line_just = 50 -Configure.autoconfig = 1 -out = "build" # pylint:disable=invalid-name -"""output directory""" -top = "." # pylint:disable=invalid-name -"""Waf top directory""" +out = "build" # pylint: disable=invalid-name +top = "." # pylint: disable=invalid-name APPNAME = "foxBMS" -"""name of the application. This is used in various Waf functions""" -VERSION = "1.6.0" -"""version of the application. This is used in various Waf functions. This -version must match the version number defined in ``macros.txt``. Otherwise a -configuration error is thrown.""" +# version of the application. This is used in various Waf functions. This +# version must match the version number defined in macros.txt. Otherwise a +# configuration error is thrown. +VERSION = "1.7.0" +# Binary build command variations that are supported. The commands are then +# generated by concatenating the command + the variant, e.g., build_bin BIN_VARIANTS = ["bin", "axivion"] -"""Binary build command variations that are supported. The commands are then -generated by concatenating the command + the variant, e.g., ``build_bin``""" -MISC_VARIANTS = ["docs", "unit_test"] -"""Additional commands, that do not need more contexts than build and clean""" + +# Additional commands, that do not need more contexts than build and clean +MISC_VARIANTS = ["docs", "unit_test", "doxygen_src", "doxygen_tests"] ALL_VARIANTS = {"binary": BIN_VARIANTS, "misc": MISC_VARIANTS} @@ -110,6 +106,8 @@ AFE_SETUP = { "fsm": FoxBMSDefine("FOXBMS_AFE_DRIVER_TYPE_FSM", 0), "no-fsm": FoxBMSDefine("FOXBMS_AFE_DRIVER_TYPE_NO_FSM", 0), "afe-ic": FoxBMSDefine("", None), + "afe-ic-family": FoxBMSDefine("", None), + "afe-manufacturer": FoxBMSDefine("", None), } for target_type, target_val in ALL_VARIANTS.items(): @@ -154,13 +152,13 @@ for target_type, target_val in ALL_VARIANTS.items(): BUILD_VARIANTS.append(f"build_{var}") CLEAN_VARIANTS.append(f"clean_{var}") +# Files and directories that are excluded when running dist commands DIST_EXCLUDE = ( f"{out}/** **/.git **/.gitignore .gitlab/** **/.gitattributes " "**/*.tar.bz2 **/*.tar.gz **/*.pyc __pycache__ " "tools/waf*.*.**-* .lock-* " f".ws *eclipse* .vs* { APPNAME.lower()}/**" ) -"""Files and directories that are excluded when running dist commands""" def version_consistency_checker(ctx): @@ -172,10 +170,6 @@ def version_consistency_checker(ctx): changelog_txt = changelog_file.read(encoding="utf-8") m_file = ctx.path.find_node(os.path.join(doc_dir, "macros.txt")) m_file_txt = m_file.read(encoding="utf-8") - gs_file = ctx.path.find_node( - os.path.join(doc_dir, "getting-started", "software-installation.rst") - ) - gs_file_txt = gs_file.read() if m_file_txt.find(f".. |version_foxbms| replace:: ``{VERSION}``") < 0: ctx.fatal( f"The version information in {m_file} is different from the " @@ -186,23 +180,6 @@ def version_consistency_checker(ctx): f"The version information in {changelog_file} is different " f"from the specified version {VERSION}." ) - repo_url = "https://github.com/foxBMS/foxbms-2" - must_include_version = [ - f"curl --silent --show-error -L -o foxbms-2-v{VERSION}.zip " - f"{repo_url}/archive/v{VERSION}.zip", - f"tar -x -f foxbms-2-v{VERSION}.zip", - f"ren foxbms-2-{VERSION} foxbms-2", - ] - if not all(gs_file_txt.find(i) > 0 for i in must_include_version): - ctx.fatal( - f"The version information in {gs_file} is different from the " - f"specified version {VERSION}" - ) - pys = [ - ctx.path.find_node(os.path.join("tools", "gui", "fgui", "__init__.py")), - ] - if not all(i.read().find(f'__version__ = "{VERSION}"') > 0 for i in pys): - ctx.fatal(f"Version information in {pys} is not correct.") all_c_sources = ctx.path.ant_glob( "docs/**/*.c docs/**/*.h src/**/*.c src/**/*.c tests/**/*.c tests/**/*.c", excl=[ @@ -213,6 +190,7 @@ def version_consistency_checker(ctx): "tests/axivion/qualification-test/**/*.c", "tests/axivion/qualification-test/**/*.h", "tests/unit/build/**", + "tests/unit/gen_hcg/**", ], ) version_line = -1 @@ -242,13 +220,12 @@ def options(opt): ) opt.load("f_axivion", tooldir=TOOLDIR) opt.load("f_sphinx_build", tooldir=TOOLDIR) - opt.load("doxygen", tooldir=TOOLDIR) + opt.load("f_doxygen", tooldir=TOOLDIR) opt.load("f_ti_arm_cgt", tooldir=TOOLDIR) # load db-check-tool opt.load("f_check_db_vars", tooldir=TOOLDIR) # load bootstrap-library-project-tool opt.load("f_bootstrap_library_project", tooldir=TOOLDIR) - opt.load("f_guidelines", tooldir=TOOLDIR) for k in ( "--targets", @@ -263,7 +240,6 @@ def options(opt): "--no-msvc-lazy", "--force", "--check-c-compiler", - "doxygen", ): option = opt.parser.get_option(k) if option: @@ -279,35 +255,14 @@ def options(opt): help="Use a configuration cache", ) - opt.add_option( - "--skip-doxygen", - action="store_true", - help="Builds the documentation without the Doxygen documentation", - ) - - opt.load("f_miniconda_env", tooldir=TOOLDIR) opt.load("f_lauterbach", tooldir=TOOLDIR) - opt.add_option( - "--why", dest="WHY", action="store_true", help="Loads the 'why' tool." - ) opt.load("f_j_flash", tooldir=TOOLDIR) - opt.load("f_git_hooks", tooldir=TOOLDIR) - - -def configure(conf): # pylint: disable=too-many-statements,too-many-branches - """Configures the project. - This includes loading all tools needed to build and link binaries, - rendering the documentation and checking source files for style violations: - The loaded tools are: - - - TI ARM compiler (`f_ti_arm_cgt`) - - Documentation tools (`f_sphinx_build`, `doxygen`) - To ensure that the active environment is the correct one for the project, - all conda packages are checked to be installed in the correct version. - A workspace is generated if Visual Studio Code is found on the machine. - """ +# pylint: disable-next=too-many-branches,too-many-statements +def configure(conf): + """Configures the project""" + conf.options.IGNORE_ENV_CHECK = True if " " in conf.path.abspath(): conf.fatal(f"Project path must not contain spaces ({conf.path}).") conf.env.append_unique("PROJECT_ROOT", pathlib.Path(conf.path.abspath()).as_posix()) @@ -399,18 +354,16 @@ def configure(conf): # pylint: disable=too-many-statements,too-many-branches conf.check(msg="Checking for code snippet (program)", build_fun=full_build) conf.setenv("", default_env) - conf.load("f_miniconda_env", tooldir=TOOLDIR) conf.load("f_check_db_vars", tooldir=TOOLDIR) conf.load("f_bootstrap_library_project", tooldir=TOOLDIR) - conf.load("f_guidelines", tooldir=TOOLDIR) # add flasher tool conf.load("f_j_flash", tooldir=TOOLDIR) # configure the documentation toolchain conf.load("f_sphinx_build", tooldir=TOOLDIR) - conf.load("doxygen", tooldir=TOOLDIR) + conf.load("f_doxygen", tooldir=TOOLDIR) conf.load("f_unit_test", tooldir=TOOLDIR) conf.env.VSCODE_MK_DIRS = [ os.path.join(out, "unit_test", "test", "mocks"), @@ -459,39 +412,44 @@ def configure(conf): # pylint: disable=too-many-statements,too-many-branches if slave_afe["ic"] in ("6804-1", "6811-1", "6812-1"): afe_ic_inc = "6813-1" if slave_afe["ic"] == "6804-1": - afe_ic_d = "LTC_LTC6804_1" + afe_ic_d = f"{afe_man.upper()}_LTC6804_1" elif slave_afe["ic"] == "6806": - afe_ic_d = "LTC_LTC6806" + afe_ic_d = f"{afe_man.upper()}_LTC6806" elif slave_afe["ic"] == "6811-1": - afe_ic_d = "LTC_LTC6811_1" + afe_ic_d = f"{afe_man.upper()}_LTC6811_1" elif slave_afe["ic"] == "6812-1": - afe_ic_d = "LTC_LTC6812_1" + afe_ic_d = f"{afe_man.upper()}_LTC6812_1" elif slave_afe["ic"] == "6813-1": - afe_ic_d = "LTC_LTC6813_1" + afe_ic_d = f"{afe_man.upper()}_LTC6813_1" elif slave_afe["manufacturer"] == "nxp": afe_driver_type = "no-fsm" if slave_afe["ic"] == "mc33775a": - afe_ic_d = "NXP_MC33775A" + afe_ic_d = f"{afe_man.upper()}_MC33775A" elif slave_afe["manufacturer"] == "adi": afe_driver_type = "no-fsm" if slave_afe["ic"] == "ades1830": - afe_ic_d = "ADI_ADES1830" + afe_ic_d = f"{afe_man.upper()}_ADES1830" elif slave_afe["manufacturer"] == "debug": if slave_afe["ic"] == "default": - afe_ic_d = "DEBUG_DEFAULT" + afe_ic_d = f"{afe_man.upper()}_DEFAULT" + if slave_afe["ic"] == "can": + afe_driver_type = "no-fsm" + afe_ic_d = f"{afe_man.upper()}_CAN" elif slave_afe["manufacturer"] == "maxim": if slave_afe["ic"] == "max17852": - afe_ic_d = "MAX_MAX17852" + afe_ic_d = f"{afe_man.upper()}_MAX17852" elif slave_afe["manufacturer"] == "ti": if slave_afe["ic"] == "dummy": afe_ic_d = "TI_DUMMY" if not afe_ic_d: conf.fatal("AFE IC specific define not set.") - # set the driver type implementation accordingly + # set AFE configuration AFE_SETUP[afe_driver_type].value = 1 AFE_SETUP["afe-ic"].name = "FOXBMS_AFE_DRIVER_" + afe_ic_d AFE_SETUP["afe-ic"].value = 1 + AFE_SETUP["afe-manufacturer"].name = "FOXBMS_AFE_DRIVER_" + afe_man.upper() + AFE_SETUP["afe-manufacturer"].value = 1 for _, i in AFE_SETUP.items(): conf.define(i.name, i.value) @@ -569,17 +527,15 @@ def configure(conf): # pylint: disable=too-many-statements,too-many-branches # load VS Code setup as last foxBMS specific tool to ensure that all # variables have a meaningful value conf.load("f_vscode", tooldir=TOOLDIR) - conf.load("f_git_hooks", tooldir=TOOLDIR) # the project has been successfully configured, now we can set the # application name and version conf.env.APPNAME = APPNAME conf.env.VERSION = VERSION - if conf.options.WHY: - conf.load("why", tooldir=TOOLDIR) -def build(bld): # pylint: disable=too-many-branches,too-many-statements +# pylint: disable-next=too-many-branches,too-many-statements +def build(bld: BuildContext): """High level definition of the build details""" if not bld.variant: bld.fatal( @@ -607,7 +563,7 @@ def build(bld): # pylint: disable=too-many-branches,too-many-statements ax_commands = all_commands[min_idx:] err = 0 for i in ax_commands: - if not "_axivion" in i: + if "_axivion" not in i: err += 1 Logs.error(f"'{i}' must not be used in that order {all_commands!r}.") if err: @@ -652,7 +608,10 @@ def build(bld): # pylint: disable=too-many-branches,too-many-statements bld( features="db_check", - files=bld.path.ant_glob("tests/unit/**/*.c"), + files=bld.path.ant_glob( + "tests/unit/**/*.c", + excl=["tests/unit/app/engine/database/test_database.c"], + ), ) bld.add_group() source = bld.path.find_node(bld.env.CEEDLING_MAIN_PROJECT_FILE) @@ -662,14 +621,6 @@ def build(bld): # pylint: disable=too-many-branches,too-many-statements target="project.yml", is_copy=True, ) - source = bld.path.find_node(bld.env.CEEDLING_CMD_FILE) - bld( - features="subst", - source=source, - target=source.name, - is_copy=True, - chmod=os.stat(source.abspath()).st_mode | stat.S_IEXEC, - ) if Utils.is_win32: bld( source=os.path.join("conf", "hcg", "hcg.hcg"), @@ -686,11 +637,7 @@ def build(bld): # pylint: disable=too-many-branches,too-many-statements bld(features="ceedling") if bld.variant == "docs": - # The jinja2 templates generate the specific template files for documentation. - # At next doxygen is run, to ensure that doxygen's xml output is build. - # After that the regular documentation can be build using sphinx-build, which - # now includes the build documentation as well as the API documentation from - # doxygen. + # C source code examples that should build bld.recurse( [ os.path.join("docs", "developer-manual", "style-guide", "examples"), @@ -702,461 +649,100 @@ def build(bld): # pylint: disable=too-many-branches,too-many-statements os.path.join("docs", "software", "modules", "task", "ftask"), ], ) - doc_dir = "docs" + # build the sphinx documentation + config = bld.path.find_node(os.path.join("docs", "conf.py")) + bld( + features="sphinx", + builders="html", + out_dir=".", + conf_py=config, + VERSION=bld.env.version, + RELEASE=bld.env.version, + ) bld.post_mode = Build.POST_LAZY + # pylint: disable-next=consider-using-in + if bld.variant == "doxygen_src" or bld.variant == "doxygen_tests": bld.add_group("generate_doc_files") bld.add_group("doxygen") - bld.add_group("sphinx") bld.set_group("generate_doc_files") # we use absolute paths for the doxygen configuration as it is written # during configuration time, and therefore this is okay - # fmt: off - # pylint: disable=line-too-long - _input = [ - bld.path.find_node(os.path.join("docs", "developer-manual", "style-guide", "state-machine-example")), - bld.path.find_node("src") - ] - _project_logo = bld.path.find_node(os.path.join("docs", "_static", "foxbms250px.png")) - _exclude = [ - bld.path.find_node(os.path.join("src", "hal")), - bld.path.find_node(os.path.join("src", "os")), - bld.path.find_node(os.path.join("src", "app", "driver", "afe", "ltc", "common", "ltc_pec.c")), - bld.path.find_node(os.path.join("src", "app", "driver", "afe", "ltc", "common", "ltc_pec.h")), - bld.path.find_node(os.path.join("src", "app", "driver", "afe", "nxp", "mc33775a","vendor")), - bld.path.find_node(os.path.join("tests", "unit", "build")), + if bld.variant == "doxygen_src": + tgt_name = "src" + brief = f'"The {APPNAME} Battery Management System API Documentation"' + src_input = [ + bld.path.find_node( + "docs/developer-manual/style-guide/state-machine-example" + ), + bld.path.find_node("src"), + ] + elif bld.variant == "doxygen_tests": + tgt_name = "tests" + brief = f'"The {APPNAME} Unit Tests API Documentation"' + src_input = [ + bld.path.find_node("src/app"), + bld.path.find_node("tests/unit"), + ] + else: + tgt_name = "" + brief = "" + src_input = [] + bld.fatal("Invalid doxygen variant build") + + project_logo = bld.path.find_node("docs/_static/foxbms250px.png") + exclude = [ + bld.path.find_node("src/hal"), + bld.path.find_node("src/os"), + bld.path.find_node("src/app/driver/afe/ltc/common/ltc_pec.c"), + bld.path.find_node("src/app/driver/afe/ltc/common/ltc_pec.h"), + bld.path.find_node("src/app/driver/afe/nxp/mc33775a/vendor"), + bld.path.find_node("tests/unit/build"), ] - _html_footer = bld.path.find_node(os.path.join("docs", "doxygen_footer.html")) - _layout_file = bld.path.find_node(os.path.join("docs", "doxygen_layout.xml")) - _html_style_sheet = bld.path.find_node(os.path.join("docs", "style-sheet-file.css")) - _html_extra_files = bld.path.find_node(os.path.join("docs", "_static", "cc.large.png")) - _image_path = bld.path.find_node(os.path.join("docs", "_static", "cc.large.png")) - # pylint: enable=line-too-long - # fmt: on + html_footer = bld.path.find_node(os.path.join("docs", "doxygen_footer.html")) + layout_file = bld.path.find_node(os.path.join("docs", "doxygen_layout.xml")) + html_css = bld.path.find_node(os.path.join("docs", "style-sheet-file.css")) + html_extra_files = bld.path.find_node("docs/_static/cc.large.png") + image_path = bld.path.find_node("docs/_static/cc.large.png") + if not all( ( - _input, - _project_logo, - _exclude[:], - _html_footer, - _layout_file, - _html_style_sheet, - _html_extra_files, - _image_path, + src_input, + project_logo, + exclude[:], + html_footer, + layout_file, + html_css, + html_extra_files, + image_path, ) ): bld.fatal("Some doxygen input is not correct.") - doxy_conf_src = bld.path.get_bld().find_or_declare("doxygen_src.conf") + + doxy_conf_tgt = bld.path.get_bld().find_or_declare(f"doxygen_{tgt_name}.conf") bld( features="subst", - source=bld.path.find_node(os.path.join("docs", "doxygen_src.conf.in")), - target=doxy_conf_src, + source=bld.path.find_node(f"docs/doxygen_{tgt_name}.conf.in"), + target=doxy_conf_tgt, PROJECT_NAME=APPNAME, PROJECT_NUMBER=VERSION, - PROJECT_BRIEF=f'"The {APPNAME} Battery Management System API Documentation"', - PROJECT_LOGO=_project_logo.abspath(), - OUTPUT_DIRECTORY="_static/doxygen/src", - INPUT=" ".join([i.abspath() for i in _input if i]), - EXCLUDE=" ".join([i.abspath() for i in _exclude if i]), - HTML_FOOTER=_html_footer.abspath(), - LAYOUT_FILE=_layout_file.abspath(), - HTML_STYLESHEET=_html_style_sheet.abspath(), - HTML_EXTRA_FILES=_html_extra_files.abspath(), - IMAGE_PATH=_image_path.abspath(), - ) - _input = [ - bld.path.find_node("src/app"), - bld.path.find_node("tests/unit"), - ] - doxy_conf_tests = bld.path.get_bld().find_or_declare("doxygen_tests.conf") - bld( - features="subst", - source=bld.path.find_node(os.path.join("docs", "doxygen_tests.conf.in")), - target=doxy_conf_tests, - PROJECT_NAME=f"{APPNAME} - Unit Tests", - PROJECT_NUMBER=VERSION, - PROJECT_BRIEF=f'"The {APPNAME} Unit Tests API Documentation"', - PROJECT_LOGO=_project_logo.abspath(), - OUTPUT_DIRECTORY="_static/doxygen/tests", - INPUT=" ".join([i.abspath() for i in _input if i]), - EXCLUDE=" ".join([i.abspath() for i in _exclude if i]), - HTML_FOOTER=_html_footer.abspath(), - LAYOUT_FILE=_layout_file.abspath(), - HTML_STYLESHEET=_html_style_sheet.abspath(), - HTML_EXTRA_FILES=_html_extra_files.abspath(), - IMAGE_PATH=_image_path.abspath(), + PROJECT_BRIEF=brief, + DOT_PATH=bld.env.DOT[0], + PROJECT_LOGO=project_logo.abspath(), + INPUT=" ".join([i.abspath() for i in src_input if i]), + EXCLUDE=" ".join([i.abspath() for i in exclude if i]), + HTML_FOOTER=html_footer.abspath(), + LAYOUT_FILE=layout_file.abspath(), + HTML_STYLESHEET=html_css.abspath(), + HTML_EXTRA_FILES=html_extra_files.abspath(), + IMAGE_PATH=image_path.abspath(), ) + + # build 'src' or 'tests' doxygen documentation bld.set_group("doxygen") - doxy_conf_src = bld.path.get_bld().find_or_declare("doxygen_src.conf") - doxy_conf_tests = bld.path.get_bld().find_or_declare("doxygen_tests.conf") - if not bld.options.skip_doxygen: - bld(features="doxygen", doxygen_conf=doxy_conf_src) - bld(features="doxygen", doxygen_conf=doxy_conf_tests) - - bld.set_group("sphinx") - # fmt: off - # pylint: disable=line-too-long - sources = [ - os.path.join(doc_dir, "developer-manual", "hardware-developer-manual.rst"), - os.path.join(doc_dir, "developer-manual", "preface.rst"), - os.path.join(doc_dir, "developer-manual", "public-release-process.rst"), - os.path.join(doc_dir, "developer-manual", "software", "software-development-process.rst"), - os.path.join(doc_dir, "developer-manual", "software", "software-modifications.rst"), - os.path.join(doc_dir, "developer-manual", "software", "software-programming-language.rst"), - os.path.join(doc_dir, "developer-manual", "software", "software-testing.rst"), - os.path.join(doc_dir, "developer-manual", "software", "software-tools.rst"), - os.path.join(doc_dir, "developer-manual", "software", "software-verification.rst"), - os.path.join(doc_dir, "developer-manual", "software-developer-manual.rst"), - os.path.join(doc_dir, "developer-manual", "style-guide", "guidelines_batch_shell.rst"), - os.path.join(doc_dir, "developer-manual", "style-guide", "guidelines_c.rst"), - os.path.join(doc_dir, "developer-manual", "style-guide", "guidelines_general.rst"), - os.path.join(doc_dir, "developer-manual", "style-guide", "guidelines_overview.rst"), - os.path.join(doc_dir, "developer-manual", "style-guide", "guidelines_overview_c.csv"), - os.path.join(doc_dir, "developer-manual", "style-guide", "guidelines_overview_general.csv"), - os.path.join(doc_dir, "developer-manual", "style-guide", "guidelines_overview_python.csv"), - os.path.join(doc_dir, "developer-manual", "style-guide", "guidelines_overview_rst.csv"), - os.path.join(doc_dir, "developer-manual", "style-guide", "guidelines_overview_sh.csv"), - os.path.join(doc_dir, "developer-manual", "style-guide", "guidelines_overview_yaml.csv"), - os.path.join(doc_dir, "developer-manual", "style-guide", "guidelines_python.rst"), - os.path.join(doc_dir, "developer-manual", "style-guide", "guidelines_rst.rst"), - os.path.join(doc_dir, "developer-manual", "style-guide", "guidelines_yaml.rst"), - os.path.join(doc_dir, "developer-manual", "style-guide", "state-machines_how-to.rst"), - os.path.join(doc_dir, "developer-manual", "style-guide", "style-guide.rst"), - os.path.join(doc_dir, "general", "changelog.rst"), - os.path.join(doc_dir, "general", "commit-msgs", "next-release.txt"), - os.path.join(doc_dir, "general", "commit-msgs", "release-v1.0.0.txt"), - os.path.join(doc_dir, "general", "commit-msgs", "release-v1.0.1.txt"), - os.path.join(doc_dir, "general", "commit-msgs", "release-v1.0.2.txt"), - os.path.join(doc_dir, "general", "commit-msgs", "release-v1.1.0.txt"), - os.path.join(doc_dir, "general", "commit-msgs", "release-v1.1.1.txt"), - os.path.join(doc_dir, "general", "commit-msgs", "release-v1.1.2.txt"), - os.path.join(doc_dir, "general", "commit-msgs", "release-v1.2.0.txt"), - os.path.join(doc_dir, "general", "commit-msgs", "release-v1.2.1.txt"), - os.path.join(doc_dir, "general", "commit-msgs", "release-v1.3.0.txt"), - os.path.join(doc_dir, "general", "commit-msgs", "release-v1.4.0.txt"), - os.path.join(doc_dir, "general", "commit-msgs", "release-v1.4.1.txt"), - os.path.join(doc_dir, "general", "commit-msgs", "release-v1.5.0.txt"), - os.path.join(doc_dir, "general", "commit-msgs", "release-v1.5.1.txt"), - os.path.join(doc_dir, "general", "license.rst"), - os.path.join(doc_dir, "general", "license-tables", "license-info_ceedling.csv"), - os.path.join(doc_dir, "general", "license-tables", "license-info_freertos.csv"), - os.path.join(doc_dir, "general", "license-tables", "license-info_llvm.csv"), - os.path.join(doc_dir, "general", "license-tables", "license-info_mingw64.csv"), - os.path.join(doc_dir, "general", "license-tables", "license-info_miniconda.csv"), - os.path.join(doc_dir, "general", "license-tables", "license-info_packages-conda-env-linux.csv"), - os.path.join(doc_dir, "general", "license-tables", "license-info_packages-conda-env-win32.csv"), - os.path.join(doc_dir, "general", "license-tables", "license-info_ruby-installer.csv"), - os.path.join(doc_dir, "general", "license-tables", "license-info_ti-ccs.csv"), - os.path.join(doc_dir, "general", "license-tables", "license-info_ti-hcg.csv"), - os.path.join(doc_dir, "general", "license-tables", "license-info_vs-code.csv"), - os.path.join(doc_dir, "general", "license-tables", "license-info_vs-code_extensions.csv"), - os.path.join(doc_dir, "general", "license-tables", "license-info_waf-binary.csv"), - os.path.join(doc_dir, "general", "license-tables", "license-info_waf-unit-tests.csv"), - os.path.join(doc_dir, "general", "license-tables", "license-packages-conda-env-spelling.txt"), - os.path.join(doc_dir, "general", "license-tables", "license-packages-conda-env-spelling-build-strings.txt"), - os.path.join(doc_dir, "general", "motivation.rst"), - os.path.join(doc_dir, "general", "releases.csv"), - os.path.join(doc_dir, "general", "releases.rst"), - os.path.join(doc_dir, "general", "safety", "safety.rst"), - os.path.join(doc_dir, "general", "team.rst"), - os.path.join(doc_dir, "general", "team-ad-sc.rst"), - os.path.join(doc_dir, "general", "team-dev.rst"), - os.path.join(doc_dir, "general", "team-former.rst"), - os.path.join(doc_dir, "getting-started", "first-steps-on-hardware.rst"), - os.path.join(doc_dir, "getting-started", "getting-started.rst"), - os.path.join(doc_dir, "getting-started", "llvm-installation", "llvm-installation.rst"), - os.path.join(doc_dir, "getting-started", "mingw64-installation", "mingw64-installation.rst"), - os.path.join(doc_dir, "getting-started", "miniconda-installation", "conda-configuration.rst"), - os.path.join(doc_dir, "getting-started", "miniconda-installation", "miniconda-installation.rst"), - os.path.join(doc_dir, "getting-started", "repository-structure.rst"), - os.path.join(doc_dir, "getting-started", "ruby-installation", "ruby-installation.rst"), - os.path.join(doc_dir, "getting-started", "software-installation.rst"), - os.path.join(doc_dir, "getting-started", "workspace.rst"), - os.path.join(doc_dir, "hardware", "connectors.rst"), - os.path.join(doc_dir, "hardware", "design-resources.rst"), - os.path.join(doc_dir, "hardware", "hardware.rst"), - os.path.join(doc_dir, "hardware", "interfaces", "ltc-ltc6820-vx.x.x", "ltc-ltc6820-changelog.rst"), - os.path.join(doc_dir, "hardware", "interfaces", "ltc-ltc6820-vx.x.x", "ltc-ltc6820-v1.0.3", "ltc-ltc6820-v1.0.3_isospi_connectors.csv"), - os.path.join(doc_dir, "hardware", "interfaces", "ltc-ltc6820-vx.x.x", "ltc-ltc6820-v1.0.3", "ltc-ltc6820-v1.0.3_master_connector.csv"), - os.path.join(doc_dir, "hardware", "interfaces", "ltc-ltc6820-vx.x.x", "ltc-ltc6820-v1.0.3.rst"), - os.path.join(doc_dir, "hardware", "interfaces", "maxim-max17841b-vx.x.x", "maxim-max17841b-changelog.rst"), - os.path.join(doc_dir, "hardware", "interfaces", "maxim-max17841b-vx.x.x", "maxim-max17841b-v1.0.0", "maxim-max17841b-v1.0.0_debug_connector.csv"), - os.path.join(doc_dir, "hardware", "interfaces", "maxim-max17841b-vx.x.x", "maxim-max17841b-v1.0.0", "maxim-max17841b-v1.0.0_master_connector.csv"), - os.path.join(doc_dir, "hardware", "interfaces", "maxim-max17841b-vx.x.x", "maxim-max17841b-v1.0.0", "maxim-max17841b-v1.0.0_uartrx_connectors.csv"), - os.path.join(doc_dir, "hardware", "interfaces", "maxim-max17841b-vx.x.x", "maxim-max17841b-v1.0.0", "maxim-max17841b-v1.0.0_uarttx_connectors.csv"), - os.path.join(doc_dir, "hardware", "interfaces", "maxim-max17841b-vx.x.x", "maxim-max17841b-v1.0.0.rst"), - os.path.join(doc_dir, "hardware", "interfaces", "nxp-mc33664-vx.x.x", "nxp-mc33664-changelog.rst"), - os.path.join(doc_dir, "hardware", "interfaces", "nxp-mc33664-vx.x.x", "nxp-mc33664-v1.0.2.rst"), - os.path.join(doc_dir, "hardware", "interfaces.rst"), - os.path.join(doc_dir, "hardware", "master", "ti-tms570lc4357-vx.x.x", "ti-tms570lc4357-changelog.rst"), - os.path.join(doc_dir, "hardware", "master", "ti-tms570lc4357-vx.x.x", "ti-tms570lc4357-v1.1.1", "pinout", "ti-tms570lc4357-v1.1.1_can1.csv"), - os.path.join(doc_dir, "hardware", "master", "ti-tms570lc4357-vx.x.x", "ti-tms570lc4357-v1.1.1", "pinout", "ti-tms570lc4357-v1.1.1_can2.csv"), - os.path.join(doc_dir, "hardware", "master", "ti-tms570lc4357-vx.x.x", "ti-tms570lc4357-v1.1.1", "pinout", "ti-tms570lc4357-v1.1.1_debug.csv"), - os.path.join(doc_dir, "hardware", "master", "ti-tms570lc4357-vx.x.x", "ti-tms570lc4357-v1.1.1", "pinout", "ti-tms570lc4357-v1.1.1_ethernet.csv"), - os.path.join(doc_dir, "hardware", "master", "ti-tms570lc4357-vx.x.x", "ti-tms570lc4357-v1.1.1", "pinout", "ti-tms570lc4357-v1.1.1_extension.csv"), - os.path.join(doc_dir, "hardware", "master", "ti-tms570lc4357-vx.x.x", "ti-tms570lc4357-v1.1.1", "pinout", "ti-tms570lc4357-v1.1.1_interface.csv"), - os.path.join(doc_dir, "hardware", "master", "ti-tms570lc4357-vx.x.x", "ti-tms570lc4357-v1.1.1", "pinout", "ti-tms570lc4357-v1.1.1_interlock.csv"), - os.path.join(doc_dir, "hardware", "master", "ti-tms570lc4357-vx.x.x", "ti-tms570lc4357-v1.1.1", "pinout", "ti-tms570lc4357-v1.1.1_isomon.csv"), - os.path.join(doc_dir, "hardware", "master", "ti-tms570lc4357-vx.x.x", "ti-tms570lc4357-v1.1.1", "pinout", "ti-tms570lc4357-v1.1.1_rs485.csv"), - os.path.join(doc_dir, "hardware", "master", "ti-tms570lc4357-vx.x.x", "ti-tms570lc4357-v1.1.1", "pinout", "ti-tms570lc4357-v1.1.1_sps.csv"), - os.path.join(doc_dir, "hardware", "master", "ti-tms570lc4357-vx.x.x", "ti-tms570lc4357-v1.1.1", "pinout", "ti-tms570lc4357-v1.1.1_supply_ext.csv"), - os.path.join(doc_dir, "hardware", "master", "ti-tms570lc4357-vx.x.x", "ti-tms570lc4357-v1.1.1", "ti-tms570lc4357-v1.1.1_block_diagram.rst"), - os.path.join(doc_dir, "hardware", "master", "ti-tms570lc4357-vx.x.x", "ti-tms570lc4357-v1.1.1", "ti-tms570lc4357-v1.1.1_functional_description.rst"), - os.path.join(doc_dir, "hardware", "master", "ti-tms570lc4357-vx.x.x", "ti-tms570lc4357-v1.1.1", "ti-tms570lc4357-v1.1.1_pinout.rst"), - os.path.join(doc_dir, "hardware", "master", "ti-tms570lc4357-vx.x.x", "ti-tms570lc4357-v1.1.1.rst"), - os.path.join(doc_dir, "hardware", "master", "ti-tms570lc4357-vx.x.x", "ti-tms570lc4357-v1.1.3.rst"), - os.path.join(doc_dir, "hardware", "master", "ti-tms570lc4357-vx.x.x", "ti-tms570lc4357-v1.1.5.rst"), - os.path.join(doc_dir, "hardware", "master.rst"), - os.path.join(doc_dir, "hardware", "slaves", "12-ltc-ltc6804-1-vx.x.x", "12-ltc-ltc6804-1-v1.x.x", "12-ltc-ltc6804-1-v1.x.x_cell_temperature_connector.csv"), - os.path.join(doc_dir, "hardware", "slaves", "12-ltc-ltc6804-1-vx.x.x", "12-ltc-ltc6804-1-v1.x.x", "12-ltc-ltc6804-1-v1.x.x_cell_voltage_connector.csv"), - os.path.join(doc_dir, "hardware", "slaves", "12-ltc-ltc6804-1-vx.x.x", "12-ltc-ltc6804-1-v1.x.x", "12-ltc-ltc6804-1-v1.x.x_master_daisy_connector.csv"), - os.path.join(doc_dir, "hardware", "slaves", "12-ltc-ltc6804-1-vx.x.x", "12-ltc-ltc6804-1-v1.x.x", "12-ltc-ltc6804-1-v1.x.x_primary_daisy_connector.csv"), - os.path.join(doc_dir, "hardware", "slaves", "12-ltc-ltc6804-1-vx.x.x", "12-ltc-ltc6804-1-v1.x.x.rst"), - os.path.join(doc_dir, "hardware", "slaves", "12-ltc-ltc6811-1-vx.x.x", "12-ltc-ltc6811-1-changelog.rst"), - os.path.join(doc_dir, "hardware", "slaves", "12-ltc-ltc6811-1-vx.x.x", "12-ltc-ltc6811-1-v2.0.3", "12-ltc-ltc6811-1-v2.0.3_analog-inputs-connector.csv"), - os.path.join(doc_dir, "hardware", "slaves", "12-ltc-ltc6811-1-vx.x.x", "12-ltc-ltc6811-1-v2.0.3", "12-ltc-ltc6811-1-v2.0.3_cell-voltage-sense-connector.csv"), - os.path.join(doc_dir, "hardware", "slaves", "12-ltc-ltc6811-1-vx.x.x", "12-ltc-ltc6811-1-v2.0.3", "12-ltc-ltc6811-1-v2.0.3_daisy-input-connectors.csv"), - os.path.join(doc_dir, "hardware", "slaves", "12-ltc-ltc6811-1-vx.x.x", "12-ltc-ltc6811-1-v2.0.3", "12-ltc-ltc6811-1-v2.0.3_daisy-output-connectors.csv"), - os.path.join(doc_dir, "hardware", "slaves", "12-ltc-ltc6811-1-vx.x.x", "12-ltc-ltc6811-1-v2.0.3", "12-ltc-ltc6811-1-v2.0.3_digital-io-connector.csv"), - os.path.join(doc_dir, "hardware", "slaves", "12-ltc-ltc6811-1-vx.x.x", "12-ltc-ltc6811-1-v2.0.3", "12-ltc-ltc6811-1-v2.0.3_electrical-ratings.csv"), - os.path.join(doc_dir, "hardware", "slaves", "12-ltc-ltc6811-1-vx.x.x", "12-ltc-ltc6811-1-v2.0.3", "12-ltc-ltc6811-1-v2.0.3_extension-connector.csv"), - os.path.join(doc_dir, "hardware", "slaves", "12-ltc-ltc6811-1-vx.x.x", "12-ltc-ltc6811-1-v2.0.3", "12-ltc-ltc6811-1-v2.0.3_external-dc-supply-connector.csv"), - os.path.join(doc_dir, "hardware", "slaves", "12-ltc-ltc6811-1-vx.x.x", "12-ltc-ltc6811-1-v2.0.3", "12-ltc-ltc6811-1-v2.0.3_gpio-extension-connector.csv"), - os.path.join(doc_dir, "hardware", "slaves", "12-ltc-ltc6811-1-vx.x.x", "12-ltc-ltc6811-1-v2.0.3", "12-ltc-ltc6811-1-v2.0.3_mechanical-dimensions.csv"), - os.path.join(doc_dir, "hardware", "slaves", "12-ltc-ltc6811-1-vx.x.x", "12-ltc-ltc6811-1-v2.0.3", "12-ltc-ltc6811-1-v2.0.3_temperature-sensor-connector.csv"), - os.path.join(doc_dir, "hardware", "slaves", "12-ltc-ltc6811-1-vx.x.x", "12-ltc-ltc6811-1-v2.0.3.rst"), - os.path.join(doc_dir, "hardware", "slaves", "12-ltc-ltc6811-1-vx.x.x", "12-ltc-ltc6811-1-v2.1.2", "12-ltc-ltc6811-1-v2.1.2_analog-inputs-connector.csv"), - os.path.join(doc_dir, "hardware", "slaves", "12-ltc-ltc6811-1-vx.x.x", "12-ltc-ltc6811-1-v2.1.2", "12-ltc-ltc6811-1-v2.1.2_cell-voltage-sense-connector.csv"), - os.path.join(doc_dir, "hardware", "slaves", "12-ltc-ltc6811-1-vx.x.x", "12-ltc-ltc6811-1-v2.1.2", "12-ltc-ltc6811-1-v2.1.2_daisy-input-connectors.csv"), - os.path.join(doc_dir, "hardware", "slaves", "12-ltc-ltc6811-1-vx.x.x", "12-ltc-ltc6811-1-v2.1.2", "12-ltc-ltc6811-1-v2.1.2_daisy-output-connectors.csv"), - os.path.join(doc_dir, "hardware", "slaves", "12-ltc-ltc6811-1-vx.x.x", "12-ltc-ltc6811-1-v2.1.2", "12-ltc-ltc6811-1-v2.1.2_digital-io-connector.csv"), - os.path.join(doc_dir, "hardware", "slaves", "12-ltc-ltc6811-1-vx.x.x", "12-ltc-ltc6811-1-v2.1.2", "12-ltc-ltc6811-1-v2.1.2_electrical-ratings.csv"), - os.path.join(doc_dir, "hardware", "slaves", "12-ltc-ltc6811-1-vx.x.x", "12-ltc-ltc6811-1-v2.1.2", "12-ltc-ltc6811-1-v2.1.2_extension-connector.csv"), - os.path.join(doc_dir, "hardware", "slaves", "12-ltc-ltc6811-1-vx.x.x", "12-ltc-ltc6811-1-v2.1.2", "12-ltc-ltc6811-1-v2.1.2_external-dc-supply-connector.csv"), - os.path.join(doc_dir, "hardware", "slaves", "12-ltc-ltc6811-1-vx.x.x", "12-ltc-ltc6811-1-v2.1.2", "12-ltc-ltc6811-1-v2.1.2_gpio-extension-connector.csv"), - os.path.join(doc_dir, "hardware", "slaves", "12-ltc-ltc6811-1-vx.x.x", "12-ltc-ltc6811-1-v2.1.2", "12-ltc-ltc6811-1-v2.1.2_mechanical-dimensions.csv"), - os.path.join(doc_dir, "hardware", "slaves", "12-ltc-ltc6811-1-vx.x.x", "12-ltc-ltc6811-1-v2.1.2", "12-ltc-ltc6811-1-v2.1.2_temperature-sensor-connector.csv"), - os.path.join(doc_dir, "hardware", "slaves", "12-ltc-ltc6811-1-vx.x.x", "12-ltc-ltc6811-1-v2.1.2.rst"), - os.path.join(doc_dir, "hardware", "slaves", "12-ltc-ltc6811-1-vx.x.x", "12-ltc-ltc6811-1-v2.1.6", "12-ltc-ltc6811-1-v2.1.6_analog-inputs-connector.csv"), - os.path.join(doc_dir, "hardware", "slaves", "12-ltc-ltc6811-1-vx.x.x", "12-ltc-ltc6811-1-v2.1.6", "12-ltc-ltc6811-1-v2.1.6_cell-voltage-sense-connector.csv"), - os.path.join(doc_dir, "hardware", "slaves", "12-ltc-ltc6811-1-vx.x.x", "12-ltc-ltc6811-1-v2.1.6", "12-ltc-ltc6811-1-v2.1.6_daisy-input-connectors.csv"), - os.path.join(doc_dir, "hardware", "slaves", "12-ltc-ltc6811-1-vx.x.x", "12-ltc-ltc6811-1-v2.1.6", "12-ltc-ltc6811-1-v2.1.6_daisy-output-connectors.csv"), - os.path.join(doc_dir, "hardware", "slaves", "12-ltc-ltc6811-1-vx.x.x", "12-ltc-ltc6811-1-v2.1.6", "12-ltc-ltc6811-1-v2.1.6_digital-io-connector.csv"), - os.path.join(doc_dir, "hardware", "slaves", "12-ltc-ltc6811-1-vx.x.x", "12-ltc-ltc6811-1-v2.1.6", "12-ltc-ltc6811-1-v2.1.6_electrical-ratings.csv"), - os.path.join(doc_dir, "hardware", "slaves", "12-ltc-ltc6811-1-vx.x.x", "12-ltc-ltc6811-1-v2.1.6", "12-ltc-ltc6811-1-v2.1.6_extension-connector.csv"), - os.path.join(doc_dir, "hardware", "slaves", "12-ltc-ltc6811-1-vx.x.x", "12-ltc-ltc6811-1-v2.1.6", "12-ltc-ltc6811-1-v2.1.6_external-dc-supply-connector.csv"), - os.path.join(doc_dir, "hardware", "slaves", "12-ltc-ltc6811-1-vx.x.x", "12-ltc-ltc6811-1-v2.1.6", "12-ltc-ltc6811-1-v2.1.6_gpio-extension-connector.csv"), - os.path.join(doc_dir, "hardware", "slaves", "12-ltc-ltc6811-1-vx.x.x", "12-ltc-ltc6811-1-v2.1.6", "12-ltc-ltc6811-1-v2.1.6_mechanical-dimensions.csv"), - os.path.join(doc_dir, "hardware", "slaves", "12-ltc-ltc6811-1-vx.x.x", "12-ltc-ltc6811-1-v2.1.6", "12-ltc-ltc6811-1-v2.1.6_temperature-sensor-connector.csv"), - os.path.join(doc_dir, "hardware", "slaves", "12-ltc-ltc6811-1-vx.x.x", "12-ltc-ltc6811-1-v2.1.6.rst"), - os.path.join(doc_dir, "hardware", "slaves", "14-nxp-mc33775a-vx.x.x", "14-nxp-mc33775a-changelog.rst"), - os.path.join(doc_dir, "hardware", "slaves", "14-nxp-mc33775a-vx.x.x", "14-nxp-mc33775a-v1.0.0", "14-nxp-mc33775a-v1.0.0_mechanical-dimensions.csv"), - os.path.join(doc_dir, "hardware", "slaves", "14-nxp-mc33775a-vx.x.x", "14-nxp-mc33775a-v1.0.0.rst"), - os.path.join(doc_dir, "hardware", "slaves", "16-adi-ades1830-vx.x.x", "16-adi-ades1830-changelog.rst"), - os.path.join(doc_dir, "hardware", "slaves", "16-adi-ades1830-vx.x.x", "16-adi-ades1830-v0.9.0", "16-adi-ades1830-v0.9.0_cell_voltage-sense-connector.csv"), - os.path.join(doc_dir, "hardware", "slaves", "16-adi-ades1830-vx.x.x", "16-adi-ades1830-v0.9.0", "16-adi-ades1830-v0.9.0_daisy-input-connectors.csv"), - os.path.join(doc_dir, "hardware", "slaves", "16-adi-ades1830-vx.x.x", "16-adi-ades1830-v0.9.0", "16-adi-ades1830-v0.9.0_daisy-output-connectors.csv"), - os.path.join(doc_dir, "hardware", "slaves", "16-adi-ades1830-vx.x.x", "16-adi-ades1830-v0.9.0", "16-adi-ades1830-v0.9.0_electrical-ratings.csv"), - os.path.join(doc_dir, "hardware", "slaves", "16-adi-ades1830-vx.x.x", "16-adi-ades1830-v0.9.0", "16-adi-ades1830-v0.9.0_mechanical-dimensions.csv"), - os.path.join(doc_dir, "hardware", "slaves", "16-adi-ades1830-vx.x.x", "16-adi-ades1830-v0.9.0", "16-adi-ades1830-v0.9.0_temperature-sensor-connector.csv"), - os.path.join(doc_dir, "hardware", "slaves", "16-adi-ades1830-vx.x.x", "16-adi-ades1830-v0.9.0.rst"), - os.path.join(doc_dir, "hardware", "slaves", "18-ltc-ltc6813-1-vx.x.x", "18-ltc-ltc6813-1-changelog.rst"), - os.path.join(doc_dir, "hardware", "slaves", "18-ltc-ltc6813-1-vx.x.x", "18-ltc-ltc6813-1-v1.1.3", "18-ltc-ltc6813-1-v1.1.3_analog-inputs-connector.csv"), - os.path.join(doc_dir, "hardware", "slaves", "18-ltc-ltc6813-1-vx.x.x", "18-ltc-ltc6813-1-v1.1.3", "18-ltc-ltc6813-1-v1.1.3_cell_voltage-sense-connector.csv"), - os.path.join(doc_dir, "hardware", "slaves", "18-ltc-ltc6813-1-vx.x.x", "18-ltc-ltc6813-1-v1.1.3", "18-ltc-ltc6813-1-v1.1.3_daisy-input-connectors.csv"), - os.path.join(doc_dir, "hardware", "slaves", "18-ltc-ltc6813-1-vx.x.x", "18-ltc-ltc6813-1-v1.1.3", "18-ltc-ltc6813-1-v1.1.3_daisy-output-connectors.csv"), - os.path.join(doc_dir, "hardware", "slaves", "18-ltc-ltc6813-1-vx.x.x", "18-ltc-ltc6813-1-v1.1.3", "18-ltc-ltc6813-1-v1.1.3_digital-io-connector.csv"), - os.path.join(doc_dir, "hardware", "slaves", "18-ltc-ltc6813-1-vx.x.x", "18-ltc-ltc6813-1-v1.1.3", "18-ltc-ltc6813-1-v1.1.3_electrical-ratings.csv"), - os.path.join(doc_dir, "hardware", "slaves", "18-ltc-ltc6813-1-vx.x.x", "18-ltc-ltc6813-1-v1.1.3", "18-ltc-ltc6813-1-v1.1.3_extension-connector.csv"), - os.path.join(doc_dir, "hardware", "slaves", "18-ltc-ltc6813-1-vx.x.x", "18-ltc-ltc6813-1-v1.1.3", "18-ltc-ltc6813-1-v1.1.3_extension-connector_2.csv"), - os.path.join(doc_dir, "hardware", "slaves", "18-ltc-ltc6813-1-vx.x.x", "18-ltc-ltc6813-1-v1.1.3", "18-ltc-ltc6813-1-v1.1.3_external-dc-supply-connector.csv"), - os.path.join(doc_dir, "hardware", "slaves", "18-ltc-ltc6813-1-vx.x.x", "18-ltc-ltc6813-1-v1.1.3", "18-ltc-ltc6813-1-v1.1.3_gpio-extension-connector.csv"), - os.path.join(doc_dir, "hardware", "slaves", "18-ltc-ltc6813-1-vx.x.x", "18-ltc-ltc6813-1-v1.1.3", "18-ltc-ltc6813-1-v1.1.3_mechanical-dimensions.csv"), - os.path.join(doc_dir, "hardware", "slaves", "18-ltc-ltc6813-1-vx.x.x", "18-ltc-ltc6813-1-v1.1.3", "18-ltc-ltc6813-1-v1.1.3_temperature-sensor-connector.csv"), - os.path.join(doc_dir, "hardware", "slaves", "18-ltc-ltc6813-1-vx.x.x", "18-ltc-ltc6813-1-v1.1.3.rst"), - os.path.join(doc_dir, "hardware", "slaves", "18-ltc-ltc6813-1-vx.x.x", "18-ltc-ltc6813-1-v1.1.4.rst"), - os.path.join(doc_dir, "hardware", "slaves", "18-ltc-ltc6813-1-vx.x.x", "18-ltc-ltc6813-1-v1.1.5.rst"), - os.path.join(doc_dir, "hardware", "slaves.rst"), - os.path.join(doc_dir, "index.rst"), - os.path.join(doc_dir, "introduction", "abbreviations-definitions.rst"), - os.path.join(doc_dir, "introduction", "bms-overview.rst"), - os.path.join(doc_dir, "introduction", "naming-conventions.rst"), - os.path.join(doc_dir, "introduction", "use-case.rst"), - os.path.join(doc_dir, "macros.txt"), - os.path.join(doc_dir, "misc", "acknowledgements.rst"), - os.path.join(doc_dir, "misc", "bibliography.rst"), - os.path.join(doc_dir, "misc", "definitions.csv"), - os.path.join(doc_dir, "misc", "developer-manual-nomenclature.csv"), - os.path.join(doc_dir, "misc", "indices-and-tables.rst"), - os.path.join(doc_dir, "software", "api", "overview.rst"), - os.path.join(doc_dir, "software", "architecture", "architecture.rst"), - os.path.join(doc_dir, "software", "build", "build.rst"), - os.path.join(doc_dir, "software", "build", "waf-available-commands.csv"), - os.path.join(doc_dir, "software", "build-environment", "build-environment.rst"), - os.path.join(doc_dir, "software", "build-environment", "build-environment_how-to.rst"), - os.path.join(doc_dir, "software", "build-process", "build-process.rst"), - os.path.join(doc_dir, "software", "build-process", "library-project_how-to.rst"), - os.path.join(doc_dir, "software", "configuration", "battery-cell-configuration.csv"), - os.path.join(doc_dir, "software", "configuration", "battery-system-configuration.csv"), - os.path.join(doc_dir, "software", "configuration", "compiler", "compiler-configuration.rst"), - os.path.join(doc_dir, "software", "configuration", "compiler", "linker_pulls", "example_linker_output.txt"), - os.path.join(doc_dir, "software", "configuration", "configuration.rst"), - os.path.join(doc_dir, "software", "configuration", "fstartup.c-check.txt"), - os.path.join(doc_dir, "software", "configuration", "without-halcogen_how-to.rst"), - os.path.join(doc_dir, "software", "how-to", "how-to.rst"), - os.path.join(doc_dir, "software", "linker-script", "linker-script.rst"), - os.path.join(doc_dir, "software", "linker-script", "linker-script-definitions.csv"), - os.path.join(doc_dir, "software", "modules", "application", "algorithm", "algorithm.rst"), - os.path.join(doc_dir, "software", "modules", "application", "algorithm", "state-estimation", "soc", "soc_counting.rst"), - os.path.join(doc_dir, "software", "modules", "application", "algorithm", "state-estimation", "soc", "soc_debug.rst"), - os.path.join(doc_dir, "software", "modules", "application", "algorithm", "state-estimation", "soc", "soc_none.rst"), - os.path.join(doc_dir, "software", "modules", "application", "algorithm", "state-estimation", "soe", "soe_counting.rst"), - os.path.join(doc_dir, "software", "modules", "application", "algorithm", "state-estimation", "soe", "soe_debug.rst"), - os.path.join(doc_dir, "software", "modules", "application", "algorithm", "state-estimation", "soe", "soe_none.rst"), - os.path.join(doc_dir, "software", "modules", "application", "algorithm", "state-estimation", "sof", "sof_trapezoid.rst"), - os.path.join(doc_dir, "software", "modules", "application", "algorithm", "state-estimation", "soh", "soh_debug.rst"), - os.path.join(doc_dir, "software", "modules", "application", "algorithm", "state-estimation", "soh", "soh_none.rst"), - os.path.join(doc_dir, "software", "modules", "application", "algorithm", "state-estimation", "state-estimation.rst"), - os.path.join(doc_dir, "software", "modules", "application", "bal", "bal.rst"), - os.path.join(doc_dir, "software", "modules", "application", "bms", "bms.rst"), - os.path.join(doc_dir, "software", "modules", "application", "bms", "bms_how-to.rst"), - os.path.join(doc_dir, "software", "modules", "application", "plausibility", "plausibility.rst"), - os.path.join(doc_dir, "software", "modules", "application", "redundancy", "redundancy.rst"), - os.path.join(doc_dir, "software", "modules", "application", "soa", "soa.rst"), - os.path.join(doc_dir, "software", "modules", "driver", "adc", "adc.rst"), - os.path.join(doc_dir, "software", "modules", "driver", "afe", "adding-a-new-ic_how-to.rst"), - os.path.join(doc_dir, "software", "modules", "driver", "afe", "adi", "adi_ades1830.rst"), - os.path.join(doc_dir, "software", "modules", "driver", "afe", "afe.rst"), - os.path.join(doc_dir, "software", "modules", "driver", "afe", "debug", "default.rst"), - os.path.join(doc_dir, "software", "modules", "driver", "afe", "ltc", "6804-1.rst"), - os.path.join(doc_dir, "software", "modules", "driver", "afe", "ltc", "6806.rst"), - os.path.join(doc_dir, "software", "modules", "driver", "afe", "ltc", "6811-1.rst"), - os.path.join(doc_dir, "software", "modules", "driver", "afe", "ltc", "6812-1.rst"), - os.path.join(doc_dir, "software", "modules", "driver", "afe", "ltc", "6813-1.rst"), - os.path.join(doc_dir, "software", "modules", "driver", "afe", "maxim", "max1785x.rst"), - os.path.join(doc_dir, "software", "modules", "driver", "afe", "nxp", "mc33775a.rst"), - os.path.join(doc_dir, "software", "modules", "driver", "afe", "supported-afes.rst"), - os.path.join(doc_dir, "software", "modules", "driver", "can", "can.rst"), - os.path.join(doc_dir, "software", "modules", "driver", "can", "can_how-to.rst"), - os.path.join(doc_dir, "software", "modules", "driver", "contactor", "contactor.rst"), - os.path.join(doc_dir, "software", "modules", "driver", "crc", "crc.rst"), - os.path.join(doc_dir, "software", "modules", "driver", "dma", "dma.rst"), - os.path.join(doc_dir, "software", "modules", "driver", "foxmath", "foxmath.rst"), - os.path.join(doc_dir, "software", "modules", "driver", "foxmath", "utils.rst"), - os.path.join(doc_dir, "software", "modules", "driver", "fram", "fram.rst"), - os.path.join(doc_dir, "software", "modules", "driver", "htsen", "htsen.rst"), - os.path.join(doc_dir, "software", "modules", "driver", "i2c", "i2c.rst"), - os.path.join(doc_dir, "software", "modules", "driver", "imd", "bender", "bender_ir155.rst"), - os.path.join(doc_dir, "software", "modules", "driver", "imd", "bender", "bender_iso165c.rst"), - os.path.join(doc_dir, "software", "modules", "driver", "imd", "imd.rst"), - os.path.join(doc_dir, "software", "modules", "driver", "imd", "none", "no-imd.rst"), - os.path.join(doc_dir, "software", "modules", "driver", "interlock", "interlock.rst"), - os.path.join(doc_dir, "software", "modules", "driver", "io", "io.rst"), - os.path.join(doc_dir, "software", "modules", "driver", "mcu", "mcu.rst"), - os.path.join(doc_dir, "software", "modules", "driver", "meas", "meas.rst"), - os.path.join(doc_dir, "software", "modules", "driver", "pex", "pex.rst"), - os.path.join(doc_dir, "software", "modules", "driver", "pwm", "pwm.rst"), - os.path.join(doc_dir, "software", "modules", "driver", "rtc", "rtc.rst"), - os.path.join(doc_dir, "software", "modules", "driver", "sbc", "sbc.rst"), - os.path.join(doc_dir, "software", "modules", "driver", "spi", "spi.rst"), - os.path.join(doc_dir, "software", "modules", "driver", "sps", "sps.rst"), - os.path.join(doc_dir, "software", "modules", "driver", "ts", "adding-a-new-ts_how-to.rst"), - os.path.join(doc_dir, "software", "modules", "driver", "ts", "epcos", "b57251v5103j060.rst"), - os.path.join(doc_dir, "software", "modules", "driver", "ts", "epcos", "b57861s0103f045.rst"), - os.path.join(doc_dir, "software", "modules", "driver", "ts", "fake", "none.rst"), - os.path.join(doc_dir, "software", "modules", "driver", "ts", "murata", "ncxxxxh103.rst"), - os.path.join(doc_dir, "software", "modules", "driver", "ts", "ts.rst"), - os.path.join(doc_dir, "software", "modules", "driver", "ts", "ts-sensors.rst"), - os.path.join(doc_dir, "software", "modules", "driver", "ts", "ts-short-names.csv"), - os.path.join(doc_dir, "software", "modules", "driver", "ts", "vishay", "ntcalug01a103g.rst"), - os.path.join(doc_dir, "software", "modules", "driver", "ts", "vishay", "ntcle317e4103sba.rst"), - os.path.join(doc_dir, "software", "modules", "engine", "database", "database.rst"), - os.path.join(doc_dir, "software", "modules", "engine", "database", "database_how-to.rst"), - os.path.join(doc_dir, "software", "modules", "engine", "diag", "diag.rst"), - os.path.join(doc_dir, "software", "modules", "engine", "diag", "diag_how-to.rst"), - os.path.join(doc_dir, "software", "modules", "engine", "hw_info", "hw_info.rst"), - os.path.join(doc_dir, "software", "modules", "engine", "sys", "sys.rst"), - os.path.join(doc_dir, "software", "modules", "engine", "sys_mon", "sys_mon.rst"), - os.path.join(doc_dir, "software", "modules", "main", "fassert.rst"), - os.path.join(doc_dir, "software", "modules", "main", "fassert_how-to.rst"), - os.path.join(doc_dir, "software", "modules", "main", "startup.rst"), - os.path.join(doc_dir, "software", "modules", "main", "version.rst"), - os.path.join(doc_dir, "software", "modules", "modules.rst"), - os.path.join(doc_dir, "software", "modules", "task", "ftask", "ftask.rst"), - os.path.join(doc_dir, "software", "modules", "task", "ftask", "ftask_how-to.rst"), - os.path.join(doc_dir, "software", "modules", "task", "ftask", "ftask-function-overview.csv"), - os.path.join(doc_dir, "software", "modules", "task", "ftask", "ftask-user-code-functions.csv"), - os.path.join(doc_dir, "software", "modules", "task", "os", "os.rst"), - os.path.join(doc_dir, "software", "overview", "sw-overview.rst"), - os.path.join(doc_dir, "software", "unit-tests", "unit-tests.rst"), - os.path.join(doc_dir, "software", "unit-tests", "unit-tests_how-to.rst"), - os.path.join(doc_dir, "spelling_wordlist.txt"), - os.path.join(doc_dir, "system", "bjb-measurements.csv"), - os.path.join(doc_dir, "system", "colors-in-system-block-diagram.csv"), - os.path.join(doc_dir, "system", "precharging.rst"), - os.path.join(doc_dir, "system", "symbols-in-system-block-diagram.csv"), - os.path.join(doc_dir, "system", "system-introduction.rst"), - os.path.join(doc_dir, "system", "system-voltage-and-current-monitoring.rst"), - os.path.join(doc_dir, "tools", "dbc.rst"), - os.path.join(doc_dir, "tools", "debugger", "debug-application.rst"), - os.path.join(doc_dir, "tools", "debugger", "debugger-lauterbach.rst"), - os.path.join(doc_dir, "tools", "debugger", "debugger-ozone.rst"), - os.path.join(doc_dir, "tools", "gui", "gui.rst"), - os.path.join(doc_dir, "tools", "gui", "gui-implementation.rst"), - os.path.join(doc_dir, "tools", "gui", "impl", "entry", "entry.rst"), - os.path.join(doc_dir, "tools", "gui", "impl", "fgui.rst"), - os.path.join(doc_dir, "tools", "gui", "impl", "log_parser", "log_parser.rst"), - os.path.join(doc_dir, "tools", "gui", "impl", "lvac", "lvac.rst"), - os.path.join(doc_dir, "tools", "gui", "impl", "misc", "misc.rst"), - os.path.join(doc_dir, "tools", "gui", "impl", "workers", "workers.rst"), - os.path.join(doc_dir, "tools", "halcogen", "halcogen.rst"), - os.path.join(doc_dir, "tools", "static-analysis", "axivion.rst"), - os.path.join(doc_dir, "tools", "waf-tools", "compiler-tool", "f_ti_arm_cgt.rst"), - os.path.join(doc_dir, "tools", "waf-tools", "compiler-tool", "f_ti_arm_cgt_cc_options.rst"), - os.path.join(doc_dir, "tools", "waf-tools", "compiler-tool", "f_ti_arm_helper.rst"), - os.path.join(doc_dir, "tools", "waf-tools", "compiler-tool", "f_ti_arm_tools.rst"), - os.path.join(doc_dir, "tools", "waf-tools", "compiler-tool", "f_ti_color_arm_cgt.rst"), - os.path.join(doc_dir, "tools", "waf-tools", "f_axivion.rst"), - os.path.join(doc_dir, "tools", "waf-tools", "f_black.rst"), - os.path.join(doc_dir, "tools", "waf-tools", "f_bootstrap_library_project.rst"), - os.path.join(doc_dir, "tools", "waf-tools", "f_check_db_vars.rst"), - os.path.join(doc_dir, "tools", "waf-tools", "f_clang_format.rst"), - os.path.join(doc_dir, "tools", "waf-tools", "f_git_hooks.rst"), - os.path.join(doc_dir, "tools", "waf-tools", "f_guidelines.rst"), - os.path.join(doc_dir, "tools", "waf-tools", "f_hcg.rst"), - os.path.join(doc_dir, "tools", "waf-tools", "f_j_flash.rst"), - os.path.join(doc_dir, "tools", "waf-tools", "f_lauterbach.rst"), - os.path.join(doc_dir, "tools", "waf-tools", "f_miniconda_env.rst"), - os.path.join(doc_dir, "tools", "waf-tools", "f_node_helper.rst"), - os.path.join(doc_dir, "tools", "waf-tools", "f_ozone.rst"), - os.path.join(doc_dir, "tools", "waf-tools", "f_pylint.rst"), - os.path.join(doc_dir, "tools", "waf-tools", "f_sphinx_build.rst"), - os.path.join(doc_dir, "tools", "waf-tools", "f_unit_test.rst"), - os.path.join(doc_dir, "tools", "waf-tools", "f_vscode.rst"), - os.path.join(doc_dir, "tools", "waf-tools", "ti-arm-compiler-tools.csv"), - os.path.join(doc_dir, "tools", "waf-tools", "ti-arm-compiler-tools.rst"), - os.path.join(doc_dir, "tools", "waf-tools", "waf-tools.rst"), - os.path.join(doc_dir, "units.txt"), - ] - # pylint: enable=line-too-long - # fmt: on - source = [] - for src in sources: - node = bld.path.find_node(src) - if not node: - bld.fatal(f"{src} does not exist.") - source.append(node) - config = bld.path.find_node(os.path.join("docs", "conf.py")) - bld( - features="sphinx", - builders="html spelling", - out_dir=".", - source=source, - conf_py=config, - VERSION=bld.env.version, - RELEASE=bld.env.version, - ) + doxygen_conf = bld.path.get_bld().find_or_declare(f"doxygen_{tgt_name}.conf") + bld(features="doxygen", doxygen_conf=doxygen_conf) def build_all(ctx): # pylint: disable=unused-argument @@ -1199,7 +785,7 @@ def distcheck_cmd(self): # pylint: disable=unused-argument,missing-function-doc cfg = shlex.split(Options.options.distcheck_args) else: cfg = [x for x in sys.argv if x.startswith("-")] - if "-c" in cfg and not "yes" in cfg: + if "-c" in cfg and "yes" not in cfg: cfg.insert(cfg.index("-c") + 1, "yes") dist_waf = os.path.relpath(sys.argv[0], self.path.abspath()) cmd = [ @@ -1251,8 +837,7 @@ class DistCheckBin(Scripting.DistCheck): def distcheck_bin(conf): - """creates tar.bz form the source directory and tries to run a build, and - includes the build output in the archive""" + """creates tar.bz form the source directory""" conf.tar_build = True Scripting.DistCheck.make_distcheck_cmd = distcheck_cmd Scripting.DistCheck.check = check_cmd @@ -1309,28 +894,6 @@ def check_test_files(ctx): ctx.fatal(f"{err_msg}\nTests are implement invalid.") -def get_axivion_files(ctx): - """get all relevant test files. The output is meant to be used in - tests/axivion/qualification-test/run_axivion_qualification_kit_tests.bat""" - as_seen_from = ctx.path.find_node("tests/axivion/qualification-test") - all_test_files = ctx.path.ant_glob( - [ - "tests/axivion/qualification-test/qualification-kit/**/*.c", - "tests/axivion/qualification-test/qualification-kit/**/*.tst", - ], - ) - tests = [] - for i in all_test_files: - real_path = pathlib.Path(i.parent.path_from(as_seen_from)).as_posix().split("/") - g_path = "".join(["*/" for _ in real_path]) - if g_path not in tests: - tests.append(g_path) - resulting_glob = [] - for i in tests: - resulting_glob.extend([f"{i}*.c", f"{i}*.tst"]) - print(" ".join(sorted(resulting_glob))) - - def get_deepest_src_file(ctx): """Returns the path length of all source files.""" all_test_files = ctx.path.ant_glob("src/**")